From 5227ae7be9d2c2e3682105469e78e697d0c68ee0 Mon Sep 17 00:00:00 2001 From: H-zk Date: Thu, 27 Apr 2023 14:57:46 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E8=A7=82=E7=9C=8B=E9=A1=B5=20SDK=20UI?= =?UTF-8?q?=20=E5=BC=80=E6=BA=90=E7=89=88=20v0.1.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .browserslistrc | 3 + .editorconfig | 7 + .eslintignore | 39 + .eslintrc.js | 31 + .gitattributes | 9 + .gitignore | 33 + .husky/pre-commit | 4 + .prettierignore | 39 + .prettierrc.js | 12 + .stylelintignore | 40 + .vscode/extensions.json | 12 + .vscode/settings.json | 38 + README.md | 134 +- babel.config.js | 13 + build/build-config.js | 106 + build/core-import.js | 7 + build/tag-config.js | 23 + build/webpack.vue.config.js | 132 + icon-svgs/demo/icon-demo-mobile.html | 1977 ++ icon-svgs/demo/icon-demo-pc.html | 2074 ++ icon-svgs/mobile/arrow-down.svg | 6 + icon-svgs/mobile/arrow-left.svg | 4 + icon-svgs/mobile/arrow-right.svg | 4 + icon-svgs/mobile/arrow-up.svg | 4 + icon-svgs/mobile/booking.svg | 7 + icon-svgs/mobile/check-round-fill.svg | 6 + icon-svgs/mobile/check.svg | 6 + icon-svgs/mobile/close-round.svg | 11 + icon-svgs/mobile/close.svg | 6 + icon-svgs/mobile/danmu-switch.svg | 7 + icon-svgs/mobile/delete.svg | 6 + icon-svgs/mobile/emotion.svg | 6 + icon-svgs/mobile/forbid.svg | 6 + icon-svgs/mobile/heart.svg | 6 + icon-svgs/mobile/keyboard.svg | 6 + icon-svgs/mobile/like.svg | 6 + icon-svgs/mobile/media.svg | 6 + icon-svgs/mobile/message.svg | 6 + icon-svgs/mobile/people.svg | 6 + icon-svgs/mobile/play-round.svg | 6 + icon-svgs/mobile/product.svg | 6 + icon-svgs/mobile/smiling-face.svg | 6 + icon-svgs/mobile/translate.svg | 6 + icon-svgs/mobile/video-call.svg | 6 + icon-svgs/mobile/voice-call.svg | 6 + icon-svgs/pc/apply-video-call.svg | 7 + icon-svgs/pc/arrow-down.svg | 6 + icon-svgs/pc/arrow-left.svg | 4 + icon-svgs/pc/arrow-right.svg | 4 + icon-svgs/pc/arrow-up.svg | 4 + icon-svgs/pc/booking.svg | 7 + icon-svgs/pc/bulletin.svg | 6 + icon-svgs/pc/caret-down.svg | 6 + icon-svgs/pc/caret-left.svg | 6 + icon-svgs/pc/caret-right.svg | 6 + icon-svgs/pc/caret-up.svg | 6 + icon-svgs/pc/check-round-fill.svg | 6 + icon-svgs/pc/check.svg | 6 + icon-svgs/pc/close-round.svg | 11 + icon-svgs/pc/close.svg | 6 + icon-svgs/pc/device-setting.svg | 11 + icon-svgs/pc/emotion.svg | 6 + icon-svgs/pc/feedback.svg | 6 + icon-svgs/pc/forbid.svg | 6 + icon-svgs/pc/hang-up.svg | 7 + icon-svgs/pc/lang.svg | 6 + icon-svgs/pc/media.svg | 6 + icon-svgs/pc/people.svg | 6 + icon-svgs/pc/pic.svg | 6 + icon-svgs/pc/picture.svg | 6 + icon-svgs/pc/play-round.svg | 6 + icon-svgs/pc/set-nick.svg | 6 + icon-svgs/pc/share.svg | 6 + icon-svgs/pc/tips.svg | 6 + icon-svgs/pc/translate.svg | 6 + icon-svgs/pc/video-call.svg | 6 + icon-svgs/pc/voice-call.svg | 6 + icon-svgs/pc/warning-round-fill.svg | 6 + package-lock.json | 20879 ++++++++++++++++ package.json | 103 + polyv-icon.config.js | 27 + postcss.config.js | 7 + public/favicon.ico | Bin 0 -> 4286 bytes public/index.html | 16 + src/app/_hooks/use-global-events-effect.ts | 35 + src/app/_hooks/use-global-style.ts | 106 + src/app/_hooks/use-weixin-setup.ts | 72 + src/app/app-events/events/chat.ts | 40 + src/app/app-events/events/connectMic.ts | 34 + src/app/app-events/events/doc.ts | 7 + src/app/app-events/events/donate.ts | 8 + src/app/app-events/events/finance.ts | 13 + src/app/app-events/events/global.ts | 25 + src/app/app-events/events/index.ts | 48 + src/app/app-events/events/interaction.ts | 99 + src/app/app-events/events/invite.ts | 8 + src/app/app-events/events/microActivity.ts | 8 + src/app/app-events/events/player.ts | 26 + src/app/app-events/events/portrait.ts | 44 + src/app/app-events/events/withdraw.ts | 16 + src/app/app-events/index.ts | 5 + src/app/app-events/use-app-events.ts | 48 + .../main-enter/_hooks/use-main-enter.ts | 29 + .../_hooks/use-page-layout-style.ts | 32 + src/app/layout/main-enter/mobile-main.vue | 78 + src/app/layout/main-enter/pc-main.vue | 35 + .../_components/page-error-mobile-default.vue | 153 + .../_components/page-error-pc-default.vue | 78 + .../_components/page-error-work-wechat.vue | 60 + .../page-error/_hooks/use-page-error.ts | 59 + .../layout/page-error/images/error-404.png | Bin 0 -> 5167 bytes .../layout/page-error/images/error-auth.png | Bin 0 -> 4662 bytes .../page-error/images/error-noExist.png | Bin 0 -> 6875 bytes src/app/layout/page-error/images/tip-icon.png | Bin 0 -> 12792 bytes .../layout/page-error/page-error-entry.vue | 22 + src/app/layout/page-error/page-error-type.ts | 31 + src/app/use-watch-app.ts | 216 + src/app/watch-app.vue | 52 + src/assets/constants/date-format.ts | 14 + src/assets/constants/defaults.ts | 36 + src/assets/constants/key-code.ts | 13 + src/assets/constants/selector.ts | 12 + src/assets/constants/special-user-types.ts | 21 + src/assets/constants/tab-name.ts | 69 + src/assets/favicons/polyv.ico | Bin 0 -> 4286 bytes .../low-latency/low-latency-bg-mobile.svg | 119 + .../images/low-latency/low-latency-bg-pc.svg | 117 + src/assets/images/player/icon-cam-closed.png | Bin 0 -> 1417 bytes src/assets/images/player/icon-sip.png | Bin 0 -> 1158 bytes src/assets/images/player/play-btn.png | Bin 0 -> 7531 bytes .../images/player/player-audio-mode.png | Bin 0 -> 40745 bytes src/assets/images/player/player-no-live.png | Bin 0 -> 55165 bytes src/assets/images/player/player-stop.png | Bin 0 -> 58603 bytes src/assets/images/share/facebook.png | Bin 0 -> 1364 bytes src/assets/images/share/qq.png | Bin 0 -> 1750 bytes src/assets/images/share/qzone.png | Bin 0 -> 2278 bytes src/assets/images/share/twitter.png | Bin 0 -> 2061 bytes src/assets/images/share/weibo.png | Bin 0 -> 2857 bytes .../images/splash/default-splash-full-img.jpg | Bin 0 -> 109545 bytes src/assets/lang/i18ns/arabic.ts | 9 + src/assets/lang/i18ns/china.ts | 458 + src/assets/lang/i18ns/english.ts | 474 + src/assets/lang/i18ns/farsi.ts | 9 + src/assets/lang/i18ns/index.ts | 21 + src/assets/lang/i18ns/portuguese.ts | 9 + src/assets/lang/i18ns/russian.ts | 9 + src/assets/lang/i18ns/spanish.ts | 9 + src/assets/lang/index.ts | 53 + src/assets/lang/lang-enum.ts | 23 + src/assets/lang/types.ts | 12 + src/assets/styles/animation.scss | 88 + src/assets/styles/fonts/ALIBABAFont.eot | Bin 0 -> 4306 bytes src/assets/styles/fonts/ALIBABAFont.otf | Bin 0 -> 3496 bytes src/assets/styles/fonts/ALIBABAFont.svg | 182 + src/assets/styles/fonts/ALIBABAFont.ttf | Bin 0 -> 4020 bytes src/assets/styles/fonts/ALIBABAFont.woff | Bin 0 -> 2936 bytes src/assets/styles/function.scss | 7 + src/assets/styles/global.scss | 122 + src/assets/styles/mixins.scss | 147 + src/assets/styles/mobile.scss | 5 + src/assets/styles/pc-response.scss | 11 + src/assets/styles/pc.scss | 10 + src/assets/styles/portrait.scss | 5 + src/assets/styles/variables.scss | 115 + src/assets/utils/array.ts | 8 + src/assets/utils/browser.ts | 71 + src/assets/utils/copy.ts | 43 + src/assets/utils/date-time.ts | 21 + src/assets/utils/dom.ts | 45 + src/assets/utils/file.ts | 54 + src/assets/utils/function.ts | 7 + src/assets/utils/image.ts | 89 + src/assets/utils/number.ts | 42 + src/assets/utils/storage.ts | 32 + src/assets/utils/string.ts | 56 + src/assets/utils/types.ts | 3 + src/assets/utils/url.ts | 15 + src/assets/utils/utils.ts | 36 + src/assets/utils/validate.ts | 47 + src/assets/utils/vue-utils/emit-utils.ts | 18 + src/assets/utils/vue-utils/index.ts | 23 + src/assets/utils/vue-utils/props-utils.ts | 94 + src/components/README.md | 9 + .../action-sheet/mobile-action-sheet.vue | 73 + .../common-base/action-sheet/types.ts | 8 + .../action-sheet/use-action-sheet.ts | 76 + .../common-base/count-down/count-down.vue | 191 + .../common-base/count-down/types.ts | 7 + .../common-base/count-down/use-count-down.ts | 159 + .../custom-teleport/custom-teleport.ts | 101 + .../mobile-dialog/imgs/icon-arrow-l.png | Bin 0 -> 1846 bytes .../dialog/mobile-dialog/imgs/icon_close.png | Bin 0 -> 1039 bytes .../dialog/mobile-dialog/mobile-dialog.vue | 270 + .../dialog/pc-dialog/pc-dialog.vue | 498 + .../common-base/dialog/pc-dialog/types.ts | 4 + .../common-base/dialog/use-dialog-tips.ts | 74 + .../mobile-form-area-picker.vue | 160 + .../form-area-picker/pc-form-area-picker.vue | 47 + .../form-area-picker/use-form-area-picker.ts | 144 + .../form-checkbox/mobile-form-checkbox.vue | 73 + .../form/form-checkbox/pc-form-checkbox.vue | 78 + .../form/form-checkbox/use-form-checkbox.ts | 34 + .../mobile-form-image-verify-input.vue | 53 + .../pc-form-image-verify-input.vue | 53 + .../form/form-image-verify-input/type.ts | 4 + .../use-image-verify-input.ts | 75 + .../form/form-input/hooks/use-form-input.ts | 152 + .../form/form-input/mobile-form-input.vue | 200 + .../form/form-input/pc-form-input.vue | 127 + .../form/form-input/types/form-input-types.ts | 11 + src/components/common-base/form/form-item.vue | 133 + .../mobile-form-number-input.vue | 40 + .../pc-form-number-input.vue | 33 + .../use-form-number-input.ts | 76 + .../mobile-form-phone-input.vue | 103 + .../form-phone-input/pc-form-phone-input.vue | 101 + .../form-phone-input/use-form-phone-input.ts | 69 + .../form-protocol/mobile-form-protocol.vue | 44 + .../form/form-protocol/pc-form-protocol.vue | 48 + .../form/form-protocol/use-form-protocol.ts | 35 + .../form/form-select/mobile-form-select.vue | 164 + .../form/form-select/pc-form-select.vue | 168 + .../form-select/types/form-select-types.ts | 8 + .../form/form-select/use-form-select.ts | 201 + .../mobile-form-slide-verify.vue | 61 + .../pc-form-slide-verify.vue | 54 + .../form-slide-verify/use-slide-verify.ts | 100 + .../mobile-form-sms-verify-input.vue | 83 + .../pc-form-sms-verify-input.vue | 91 + .../use-sms-verify-input.ts | 242 + .../common-base/form/form-submit-button.vue | 22 + .../form-upload-image/form-upload-image.vue | 104 + .../use-form-upload-image.ts | 71 + src/components/common-base/form/form-wrap.vue | 23 + .../common-base/form/hooks/use-form-common.ts | 90 + .../common-base/form/hooks/use-form-item.ts | 188 + .../form/hooks/use-form-submit-button.ts | 64 + .../common-base/form/hooks/use-form.ts | 130 + .../common-base/form/imgs/form-upload-add.png | Bin 0 -> 256 bytes .../common-base/form/imgs/form-upload-del.png | Bin 0 -> 1630 bytes .../form/imgs/form-upload-failed.png | Bin 0 -> 1260 bytes .../form/imgs/form-upload-loading.png | Bin 0 -> 1418 bytes .../common-base/form/types/enums.ts | 19 + .../common-base/form/types/form-types.ts | 29 + .../common-base/form/utils/utils.ts | 14 + .../iframe-render/mobile-iframe-render.vue | 33 + .../iframe-render/pc-iframe-render.vue | 33 + .../iframe-render/use-iframe-render.ts | 32 + .../common-base/list-loading/imgs/loading.png | Bin 0 -> 1779 bytes .../common-base/list-loading/list-loading.vue | 15 + .../normal-button/normal-button.vue | 176 + .../common-base/normal-button/types.ts | 44 + .../normal-button/use-normal-button.ts | 27 + .../phone-code/mobile-phone-code.vue | 135 + .../common-base/phone-code/pc-phone-code.vue | 122 + .../common-base/phone-code/phone-code-data.ts | 931 + .../common-base/phone-code/use-phone-code.ts | 90 + .../common-base/popup/mobile-popup.vue | 423 + src/components/common-base/popup/types.ts | 25 + src/components/common-base/popup/use-popup.ts | 416 + .../mobile-rich-text-render.vue | 105 + .../rich-text-render/pc-rich-text-render.vue | 105 + .../rich-text-render/use-rich-text-render.ts | 24 + .../common-base/slider-bar/slider-bar.vue | 185 + .../common-base/slider-bar/use-slider-bar.ts | 280 + .../common-base/tabs/hooks/types.ts | 50 + .../common-base/tabs/hooks/use-simple-tabs.ts | 41 + .../common-base/tabs/hooks/use-tab-header.ts | 183 + .../common-base/tabs/hooks/use-tab-pane.ts | 102 + .../common-base/tabs/hooks/use-tabs.ts | 227 + .../mobile-menu-tab-header.vue | 167 + .../mobile-menu-tabs/mobile-menu-tab-pane.vue | 35 + .../mobile-menu-tabs/mobile-menu-tabs.vue | 48 + .../pc-aside-tabs/pc-aside-tab-header.vue | 171 + .../tabs/pc-aside-tabs/pc-aside-tab-pane.vue | 31 + .../tabs/pc-aside-tabs/pc-aside-tabs.vue | 45 + .../pc-normal-tabs/pc-normal-tab-header.vue | 78 + .../pc-normal-tabs/pc-normal-tab-pane.vue | 33 + .../tabs/pc-normal-tabs/pc-normal-tabs.vue | 23 + .../portrait-normal-tabs.vue | 67 + .../basic-info/imgs/low-latency-bg-mob.svg | 119 + .../basic-info/imgs/low-latency-bg.svg | 117 + .../basic-info/mobile-basic-info.vue | 243 + .../basic-info/pc-basic-info.vue | 250 + .../enroll/hooks/use-enroll-dialog.ts | 70 + .../enroll/hooks/use-enroll-enter.ts | 22 + .../enroll/hooks/use-enroll-form.ts | 347 + .../enroll/hooks/use-enroll-login.ts | 141 + .../enroll/mobile-enroll-form.vue | 328 + .../enroll/mobile-enroll-login.vue | 111 + .../enroll/mobile-enroll-popup.vue | 44 + .../common-business/enroll/mobile-enroll.vue | 63 + .../enroll/pc-enroll-dialog.vue | 41 + .../common-business/enroll/pc-enroll-form.vue | 348 + .../enroll/pc-enroll-login.vue | 128 + .../common-business/enroll/pc-enroll.vue | 63 + .../lang-switch/mobile-lang-switch.vue | 48 + .../lang-switch/pc-lang-switch.vue | 183 + .../hooks/use-live-booking-fail.ts | 18 + .../hooks/use-live-booking-form.ts | 122 + .../live-booking/hooks/use-live-booking-wx.ts | 48 + .../live-booking/imgs/apollo-live-qrcode.jpg | Bin 0 -> 148563 bytes .../mobile-live-booking-button.vue | 183 + .../mobile-live-booking-form-popup.vue | 75 + .../mobile-live-booking-subscribe-popup.vue | 96 + .../live-booking/pc-live-booking-button.vue | 130 + .../pc-live-booking-form-dialog.vue | 83 + .../live-booking/types/index.ts | 21 + .../mobile-live-count-down.vue | 30 + .../live-count-down/pc-live-count-down.vue | 28 + .../live-count-down/use-live-count-down.ts | 13 + .../page-fixed-widgets/fixed-back-top.vue | 56 + .../page-fixed-widgets/fixed-web-share.vue | 39 + .../page-fixed-widgets/page-fixed-widgets.vue | 63 + .../page-footer/mobile-page-footer.vue | 35 + .../page-footer/pc-page-footer.vue | 35 + .../page-footer/use-page-footer.ts | 41 + .../player/player-audio-live-placeholder.vue | 114 + .../player/player-video-placeholder.vue | 56 + .../risk-confirm-letter/img/no-agree.png | Bin 0 -> 38583 bytes .../mobile-risk-confirm-letter.vue | 276 + .../pc-risk-confirm-letter.vue | 269 + .../use-risk-confirm-letter.ts | 170 + .../status-tag/mini-status-tag.vue | 35 + .../status-tag/mobile-status-tag.vue | 31 + .../status-tag/pc-status-tag.vue | 32 + .../status-tag/use-status-tag.ts | 85 + .../imgs/icon-share-wechat.png | Bin 0 -> 1301 bytes .../web-share-panel/web-share-panel.vue | 182 + .../mobile/icons/arrow-down/index.ts | 22 + .../mobile/icons/arrow-left/index.ts | 22 + .../mobile/icons/arrow-right/index.ts | 22 + .../mobile/icons/arrow-up/index.ts | 22 + .../mobile/icons/booking/index.ts | 23 + .../mobile/icons/check-round-fill/index.ts | 22 + .../mobile/icons/check/index.ts | 22 + .../mobile/icons/close-round/index.ts | 27 + .../mobile/icons/close/index.ts | 22 + .../mobile/icons/danmu-switch/index.ts | 23 + .../mobile/icons/delete/index.ts | 22 + .../mobile/icons/emotion/index.ts | 22 + .../mobile/icons/forbid/index.ts | 22 + .../mobile/icons/heart/index.ts | 22 + .../mobile/icons/keyboard/index.ts | 22 + .../mobile/icons/like/index.ts | 22 + .../mobile/icons/media/index.ts | 22 + .../mobile/icons/message/index.ts | 22 + .../mobile/icons/people/index.ts | 22 + .../mobile/icons/play-round/index.ts | 22 + .../mobile/icons/product/index.ts | 22 + .../mobile/icons/smiling-face/index.ts | 22 + .../mobile/icons/translate/index.ts | 22 + .../mobile/icons/video-call/index.ts | 22 + .../mobile/icons/voice-call/index.ts | 22 + src/components/component-icons/mobile/map.ts | 30 + .../pc/icons/apply-video-call/index.ts | 27 + .../pc/icons/arrow-down/index.ts | 22 + .../pc/icons/arrow-left/index.ts | 22 + .../pc/icons/arrow-right/index.ts | 22 + .../pc/icons/arrow-up/index.ts | 22 + .../component-icons/pc/icons/booking/index.ts | 23 + .../pc/icons/bulletin/index.ts | 22 + .../pc/icons/caret-down/index.ts | 22 + .../pc/icons/caret-left/index.ts | 22 + .../pc/icons/caret-right/index.ts | 22 + .../pc/icons/caret-up/index.ts | 22 + .../pc/icons/check-round-fill/index.ts | 22 + .../component-icons/pc/icons/check/index.ts | 22 + .../pc/icons/close-round/index.ts | 27 + .../component-icons/pc/icons/close/index.ts | 22 + .../pc/icons/device-setting/index.ts | 30 + .../component-icons/pc/icons/emotion/index.ts | 22 + .../pc/icons/feedback/index.ts | 22 + .../component-icons/pc/icons/forbid/index.ts | 22 + .../component-icons/pc/icons/hang-up/index.ts | 27 + .../component-icons/pc/icons/lang/index.ts | 22 + .../component-icons/pc/icons/media/index.ts | 22 + .../component-icons/pc/icons/people/index.ts | 22 + .../component-icons/pc/icons/pic/index.ts | 22 + .../component-icons/pc/icons/picture/index.ts | 22 + .../pc/icons/play-round/index.ts | 22 + .../pc/icons/set-nick/index.ts | 22 + .../component-icons/pc/icons/share/index.ts | 22 + .../component-icons/pc/icons/tips/index.ts | 22 + .../pc/icons/translate/index.ts | 22 + .../pc/icons/video-call/index.ts | 22 + .../pc/icons/voice-call/index.ts | 22 + .../pc/icons/warning-round-fill/index.ts | 22 + src/components/component-icons/pc/map.ts | 38 + .../auth/auth-code/mobile-auth-code.vue | 110 + .../auth/auth-code/pc-auth-code.vue | 132 + .../auth/auth-code/use-auth-code.ts | 93 + .../auth/auth-custom/auth-custom.vue | 10 + .../auth/auth-custom/use-auth-custom.ts | 51 + .../auth/auth-direct/use-auth-direct.ts | 62 + .../auth/auth-external/auth-external.vue | 10 + .../auth/auth-external/use-auth-external.ts | 81 + .../auth-info/hooks/use-auth-info-form.ts | 250 + .../auth-info/hooks/use-auth-info-login.ts | 97 + .../auth-info/hooks/use-auth-info-setting.ts | 33 + .../auth/auth-info/mobile-auth-info-form.vue | 222 + .../auth/auth-info/mobile-auth-info-login.vue | 72 + .../auth/auth-info/mobile-auth-info.vue | 39 + .../auth/auth-info/pc-auth-info-form.vue | 236 + .../auth/auth-info/pc-auth-info-login.vue | 83 + .../auth/auth-info/pc-auth-info.vue | 33 + .../auth/auth-info/use-auth-info.ts | 65 + .../auth/auth-none/auth-none.vue | 9 + .../auth/auth-none/use-auth-none.ts | 36 + .../auth/auth-pay/mobile-auth-pay.vue | 73 + .../auth/auth-pay/pc-auth-pay.vue | 185 + .../auth/auth-pay/use-auth-pay.ts | 242 + .../auth/auth-phone/mobile-auth-phone.vue | 74 + .../auth/auth-phone/pc-auth-phone.vue | 93 + .../auth/auth-phone/use-auth-phone.ts | 91 + .../mobile-auth-work-weixin.vue | 9 + .../auth-work-weixin/pc-auth-work-weixin.vue | 32 + .../auth-work-weixin/use-auth-work-weixin.ts | 112 + .../auth/auth-work-weixin/utils.ts | 15 + .../auth/hooks/use-auth-button.ts | 182 + .../auth/hooks/use-auth-common.ts | 126 + .../auth/hooks/use-auth-special.ts | 101 + .../auth/imgs/icon-auth-pay-wechat-green.png | Bin 0 -> 2240 bytes .../auth/imgs/icon-auth-pay-wechat-logo.png | Bin 0 -> 1286 bytes .../auth/imgs/icon-auth-pay-wechat.png | Bin 0 -> 1690 bytes .../auth/mobile-auth-button.vue | 63 + .../page-splash-common/auth/mobile-auth.vue | 38 + .../auth/pc-auth-button.vue | 66 + .../page-splash-common/auth/pc-auth.vue | 34 + .../auth/types/auth-type.ts | 10 + .../_hooks/use-player-trial-event.ts | 117 + .../_hooks/use-player-trial-main.ts | 78 + .../mobile-player-trial.vue | 77 + .../player-trial/use-player-trial.ts | 93 + .../ask/ask-msg-list/mobile-ask-msg-list.vue | 37 + .../ask/ask-msg-list/pc-ask-msg-list.vue | 39 + .../ask/ask-msg-list/use-ask-msg-list.ts | 52 + .../ask/hooks/use-ask-send.ts | 94 + .../page-watch-common/ask/hooks/use-ask.ts | 143 + .../ask/mobile-ask/mobile-ask.vue | 53 + .../page-watch-common/ask/pc-ask/pc-ask.vue | 66 + .../page-watch-common/barrage/pc-barrage.vue | 31 + .../page-watch-common/barrage/use-barrage.ts | 62 + .../chapter/hooks/use-chapter.ts | 67 + .../chapter/mobile-chapter.vue | 73 + .../page-watch-common/chapter/pc-chapter.vue | 76 + .../chapter/portrait-chapter.vue | 73 + .../chat/chat-close-tips/chat-close-tips.vue | 35 + .../imgs/closed_chat_black.png | Bin 0 -> 865 bytes .../chat-close-tips/imgs/closed_chat_icon.png | Bin 0 -> 867 bytes .../mobile-chat-connect-error-dialog.vue | 86 + .../pc-chat-connect-error-dialog.vue | 55 + .../use-chat-connect-error.ts | 46 + .../chat-emotional-feedback/imgs/icon-no.png | Bin 0 -> 5324 bytes .../chat-emotional-feedback/imgs/icon-yes.png | Bin 0 -> 4989 bytes .../mobile-emotional-feedback.vue | 76 + .../pc-emotional-feedback.vue | 76 + .../use-emotional-feedback.ts | 190 + .../chat-error-tips/pc-chat-error-tips.vue | 61 + .../chat-error-tips/use-chat-error-tips.ts | 24 + .../mobile-chat-full-message.vue | 116 + .../pc-chat-full-message.vue | 99 + .../portrait-chat-full-message.vue | 87 + .../chat/chat-full-message/type.ts | 11 + .../use-chat-full-message.ts | 52 + .../hooks/use-chat-input-controller.ts | 111 + .../chat-input-controller/imgs/icon-gift.png | Bin 0 -> 891 bytes .../imgs/icon-menu-animation-hide-mob.png | Bin 0 -> 3081 bytes .../imgs/icon-menu-animation-show-mob.png | Bin 0 -> 2770 bytes .../imgs/icon-menu-announcement-mob.png | Bin 0 -> 1008 bytes .../imgs/icon-menu-feed-back.png | Bin 0 -> 3486 bytes .../imgs/icon-menu-img-mob.png | Bin 0 -> 1401 bytes .../imgs/icon-menu-lang-mob.png | Bin 0 -> 1531 bytes .../imgs/icon-menu-msg.png | Bin 0 -> 2109 bytes .../imgs/icon-menu-only-sp-mob.png | Bin 0 -> 2115 bytes .../imgs/icon-menu-redenvelope-mob.png | Bin 0 -> 1360 bytes .../imgs/icon-menu-score-redpack.png | Bin 0 -> 1308 bytes .../imgs/icon-menu-set-nick.png | Bin 0 -> 1005 bytes .../imgs/icon-menu-show-all-mob.png | Bin 0 -> 1286 bytes .../imgs/icon-menu-withdraw-mob.png | Bin 0 -> 1671 bytes .../imgs/icon-reward.png | Bin 0 -> 1778 bytes .../mobile-chat-input-controller.vue | 108 + .../mobile-more-item.vue | 116 + .../mobile-more-panel.vue | 216 + .../input-more-panel.vue | 119 + .../pc-chat-input-controller.vue | 223 + .../portrait-chat-input-controller.vue | 74 + .../chat/chat-like/_hooks/use-chat-like.ts | 109 + .../chat-like/_hooks/use-like-animation.ts | 84 + .../imgs/icon-chat-like-portrait.png | Bin 0 -> 4205 bytes .../chat/chat-like/imgs/icon-like-crown.png | Bin 0 -> 2345 bytes .../chat/chat-like/imgs/icon-like-diamond.png | Bin 0 -> 2293 bytes .../chat/chat-like/imgs/icon-like-donuts.png | Bin 0 -> 2787 bytes .../chat/chat-like/imgs/icon-like-gift.png | Bin 0 -> 2225 bytes .../chat/chat-like/imgs/icon-like-heart.png | Bin 0 -> 2572 bytes .../chat/chat-like/imgs/icon-like-rocket.png | Bin 0 -> 2594 bytes .../chat/chat-like/imgs/icon-like-star.png | Bin 0 -> 2554 bytes .../chat/chat-like/imgs/icon-like-thumb.png | Bin 0 -> 2358 bytes .../chat/chat-like/imgs/icon-like-trophy.png | Bin 0 -> 2279 bytes .../chat-like/imgs/icon-like-watermelon.png | Bin 0 -> 2286 bytes .../chat/chat-like/mobile-chat-like.vue | 88 + .../chat/chat-like/pc-chat-like.vue | 86 + .../chat/chat-like/portrait-chat-like.vue | 85 + .../hooks/chat-msg-handle-hook.ts | 123 + .../hooks/contract-history-hook.ts | 117 + .../chat-msg-list/hooks/hide-chat-msg-hook.ts | 32 + .../chat-msg-list/hooks/msg-queue-hook.ts | 160 + .../chat-msg-list/hooks/msg-render-hook.ts | 163 + .../hooks/request-history-hook.ts | 179 + .../hooks/request-history-session-hook.ts | 156 + .../chat/chat-msg-list/hooks/send-msg-hook.ts | 58 + .../chat/chat-msg-list/hooks/types.ts | 18 + .../chat/chat-msg-list/imgs/loading.png | Bin 0 -> 1779 bytes .../chat-msg-list/mobile-chat-msg-list.vue | 80 + .../_hooks/chat-msg-computed-hook.ts | 24 + .../msg-items/_hooks/chat-msg-data-hook.ts | 76 + .../msg-items/_hooks/chat-msg-quote-hook.ts | 67 + .../msg-items/_hooks/chat-msg-time-hook.ts | 91 + .../msg-items/_hooks/chat-msg-user-hook.ts | 148 + .../msg-items/_imgs/img-msg-placeholder.png | Bin 0 -> 2535 bytes .../_msg-container/mobile-msg-container.vue | 156 + .../_msg-container/pc-msg-container.vue | 106 + .../_msg-container/portrait-msg-container.vue | 109 + .../_msg-container/use-msg-container.ts | 36 + .../_msg-container/use-msg-tips-control.ts | 66 + .../mobile-msg-quote-content.vue | 77 + .../pc-msg-quote-content.vue | 78 + .../portrait-msg-quote-content.vue | 70 + .../use-msg-quote-content.ts | 25 + .../_msg-user-actor/msg-user-actor.vue | 38 + .../_msg-user-actor/use-msg-user-actor.ts | 41 + .../_msg-user-info/mobile-msg-user-info.vue | 95 + .../_msg-user-info/pc-msg-user-info.vue | 116 + .../_msg-user-info/portrait-msg-user-info.vue | 38 + .../_msg-user-info/use-msg-user-info.ts | 9 + .../chat-msg-list/msg-items/_styles/vars.scss | 14 + .../customer-msg/mobile-customer-msg.vue | 20 + .../customer-msg/pc-customer-msg.vue | 20 + .../customer-msg/portrait-customer-msg.vue | 16 + .../customer-msg/use-customer-msg.ts | 10 + .../emotion-msg/mobile-emotion-msg.vue | 43 + .../msg-items/emotion-msg/pc-emotion-msg.vue | 43 + .../emotion-msg/portrait-emotion-msg.vue | 43 + .../msg-items/emotion-msg/use-emotion-msg.ts | 31 + .../msg-items/file-msg/imgs/icon_doc.svg | 14 + .../msg-items/file-msg/imgs/icon_pdf.svg | 14 + .../msg-items/file-msg/imgs/icon_ppt.svg | 15 + .../msg-items/file-msg/imgs/icon_xls.svg | 16 + .../msg-items/file-msg/mobile-file-msg.vue | 122 + .../msg-items/file-msg/pc-file-msg.vue | 125 + .../msg-items/file-msg/portrait-file-msg.vue | 100 + .../msg-items/file-msg/use-file-msg.ts | 102 + .../msg-items/image-msg/mobile-image-msg.vue | 78 + .../msg-items/image-msg/pc-image-msg.vue | 81 + .../image-msg/portrait-image-msg.vue | 74 + .../msg-items/image-msg/use-image-msg.ts | 170 + .../msg-items/mobile-chat-msg-item.vue | 67 + .../msg-items/pc-chat-msg-item.vue | 65 + .../msg-items/portrait-chat-msg-item.vue | 56 + .../redpaper-msg/imgs/icon_redpack.png | Bin 0 -> 2753 bytes .../redpaper-msg/mobile-redpaper-msg.vue | 29 + .../redpaper-msg/pc-redpaper-msg.vue | 53 + .../redpaper-msg/portrait-redpaper-msg.vue | 47 + .../redpaper-msg/use-redpaper-msg.ts | 87 + .../imgs/redpaper-msg-ico.png | Bin 0 -> 790 bytes .../mobile-redpaper-receive-msg.vue | 63 + .../pc-redpaper-receive-msg.vue | 60 + .../portrait-redpaper-receive-msg.vue | 56 + .../use-redpaper-receive-msg.ts | 34 + .../reward-msg/imgs/icon-redpaper.png | Bin 0 -> 8546 bytes .../reward-msg/mobile-reward-msg.vue | 71 + .../msg-items/reward-msg/pc-reward-msg.vue | 72 + .../reward-msg/portrait-reward-msg.vue | 32 + .../msg-items/speak-msg/mobile-speak-msg.vue | 199 + .../msg-items/speak-msg/pc-speak-msg.vue | 182 + .../speak-msg/portrait-speak-msg.vue | 132 + .../msg-items/speak-msg/use-speak-msg.ts | 234 + .../system-msg/mobile-system-msg.vue | 20 + .../msg-items/system-msg/pc-system-msg.vue | 20 + .../system-msg/portrait-system-msg.vue | 16 + .../msg-items/system-msg/use-system-msg.ts | 10 + .../msg-items/use-chat-msg-item.ts | 105 + .../chat/chat-msg-list/pc-chat-msg-list.vue | 86 + .../chat-msg-list/portrait-chat-msg-list.vue | 73 + .../chat/chat-msg-list/styles/index.scss | 25 + .../chat/chat-msg-list/use-chat-msg-list.ts | 227 + .../chat-msg-quote/mobile-chat-msg-quote.vue | 59 + .../chat/chat-msg-quote/pc-chat-msg-quote.vue | 57 + .../chat/chat-msg-quote/use-chat-msg-quote.ts | 23 + .../mobile-chat-room-pendant.vue | 151 + .../pc-chat-room-pendant.vue | 97 + .../portrait-chat-room-pendant.vue | 108 + .../chat/chat-room/mobile-chat-room.vue | 109 + .../chat/chat-room/pc-chat-room.vue | 115 + .../chat-set-nick/mobile-chat-set-nick.vue | 49 + .../chat/chat-set-nick/pc-chat-set-nick.vue | 72 + .../chat-set-nick/portrait-chat-set-nick.vue | 61 + .../chat/chat-set-nick/use-chat-set-nick.ts | 94 + .../chat/chat-welcome/chat-welcome-tips.vue | 99 + .../chat/chat-welcome/imgs/bg-portrait.png | Bin 0 -> 1695 bytes .../chat/chat-welcome/imgs/bg.png | Bin 0 -> 3745 bytes .../chat-welcome/imgs/icon-start-left.png | Bin 0 -> 463 bytes .../chat-welcome/imgs/icon-start-right.png | Bin 0 -> 478 bytes .../portrait-chat-welcome-tips.vue | 51 + .../chat-welcome/use-chat-welcome-tips.ts | 132 + .../connect-mic/common/connect-mic-info.vue | 62 + .../common/connect-mic-network.vue | 69 + .../connect-mic/common/connect-microphone.vue | 58 + .../connect-mic/hooks/use-connect-mic-item.ts | 112 + .../connect-mic/hooks/use-connect-mic.ts | 156 + .../connect-mic/imgs/btn-audio-close.png | Bin 0 -> 1564 bytes .../connect-mic/imgs/btn-audio-open.png | Bin 0 -> 1458 bytes .../connect-mic/imgs/btn-close.png | Bin 0 -> 237 bytes .../connect-mic/imgs/btn-icon-default.png | Bin 0 -> 653 bytes .../connect-mic/imgs/btn-icon-disabled.png | Bin 0 -> 640 bytes .../connect-mic/imgs/btn-icon-hangup.png | Bin 0 -> 624 bytes .../connect-mic/imgs/btn-set.png | Bin 0 -> 1717 bytes .../connect-mic/imgs/btn-video-close.png | Bin 0 -> 1250 bytes .../connect-mic/imgs/btn-video-open.png | Bin 0 -> 1069 bytes .../connect-mic/imgs/call-connecting.gif | Bin 0 -> 18637 bytes .../imgs/item-audio-close-hover.png | Bin 0 -> 4388 bytes .../connect-mic/imgs/item-audio-close.png | Bin 0 -> 4373 bytes .../imgs/item-audio-open-hover.png | Bin 0 -> 3197 bytes .../connect-mic/imgs/item-audio-open.png | Bin 0 -> 3199 bytes .../connect-mic/imgs/item-bottom-bar.png | Bin 0 -> 4300 bytes .../imgs/item-status-audio-closed.png | Bin 0 -> 985 bytes .../imgs/item-status-audio-full.png | Bin 0 -> 1114 bytes .../imgs/item-status-audio-zero.png | Bin 0 -> 870 bytes .../imgs/item-video-close-hover.png | Bin 0 -> 4799 bytes .../connect-mic/imgs/item-video-close.png | Bin 0 -> 4796 bytes .../imgs/item-video-open-hover.png | Bin 0 -> 3367 bytes .../connect-mic/imgs/item-video-open.png | Bin 0 -> 3361 bytes .../connect-mic/imgs/phone.png | Bin 0 -> 563 bytes .../mobile-connect-mic-pendant.vue | 346 + .../mobile-connect-mic-user-item.vue | 91 + .../mobile-connect-mic-user-list.vue | 63 + .../pc-connect-mic/pc-connect-mic-bottom.vue | 54 + .../pc-connect-mic/pc-connect-mic-button.vue | 84 + .../pc-connect-mic/pc-connect-mic-confirm.vue | 93 + .../pc-connect-mic-placeholder.vue | 71 + .../pc-connect-mic-user-item-control.vue | 164 + .../pc-connect-mic-user-item.vue | 109 + .../pc-connect-mic-user-list.vue | 56 + .../pc-connect-mic/pc-connect-mic.vue | 56 + .../mobile-count-down-layer.vue | 115 + .../count-down-layer/pc-count-down-layer.vue | 113 + .../portrait-count-down-layer.vue | 59 + .../count-down-layer/use-count-down-layer.ts | 17 + .../mobile-custom-tuwen-text-menu.vue | 32 + .../doc/_hooks/use-keydown-control.ts | 53 + .../mobile-doc-side-switch.vue | 41 + .../doc/doc-side-switch/side.png | Bin 0 -> 1539 bytes .../doc/doc-switch/portrait-doc-switch.vue | 35 + .../doc/imgs/icon-doc-hide.png | Bin 0 -> 1547 bytes .../doc/imgs/icon-doc-show.png | Bin 0 -> 1671 bytes .../page-watch-common/doc/imgs/player-ppt.png | Bin 0 -> 55385 bytes .../page-watch-common/doc/mobile-doc.vue | 31 + .../doc/pc-doc-empty-placeholder.vue | 25 + .../page-watch-common/doc/pc-doc.vue | 39 + .../page-watch-common/doc/portrait-doc.vue | 31 + .../page-watch-common/doc/use-doc.ts | 99 + .../donate-animation-item.vue | 249 + .../donate-animation/donate-animation.vue | 39 + .../imgs/donate-float-tips-bg.png | Bin 0 -> 18875 bytes .../imgs/donate-float-tips-redpaper.png | Bin 0 -> 8546 bytes .../donate/donate-animation/styles/var.scss | 6 + .../donate-animation/use-donate-animation.ts | 147 + .../donate/donate-panel/hooks/types.ts | 7 + .../donate-panel/hooks/use-donate-cash.ts | 68 + .../hooks/use-donate-good-point.ts | 55 + .../donate-panel/hooks/use-donate-good.ts | 71 + .../donate-panel/hooks/use-donate-pay.ts | 244 + .../donate/donate-panel/imgs/redpack-cash.png | Bin 0 -> 6000 bytes .../mobile-donate-panel-cash.vue | 187 + .../mobile-donate-panel-good.vue | 252 + .../mobile-donate-panel.vue | 39 + .../pc-donate-panel/pc-donate-cash.vue | 158 + .../pc-donate-panel/pc-donate-panel.vue | 305 + .../pc-donate-panel/pc-donate-pay-qrcode.vue | 104 + .../portrait-donate-panel-cash.vue | 161 + .../portrait-donate-panel-good.vue | 270 + .../portrait-donate-popup.vue | 63 + .../donate-svga-animation.vue | 36 + .../use-donate-svga-animation.ts | 132 + .../hooks/use-emotion-face-picker.ts | 45 + .../hooks/use-emotion-image-picker.ts | 42 + .../hooks/use-emotion-picker.ts | 77 + .../mobile-emotion-face-picker.vue | 44 + .../mobile-emotion-image-picker.vue | 64 + .../mobile-emotion-picker.vue | 192 + .../imgs/icon-face-emotion.png | Bin 0 -> 2514 bytes .../imgs/icon-image-emotion.png | Bin 0 -> 2342 bytes .../pc-emotion-face-picker.vue | 49 + .../pc-emotion-image-picker.vue | 70 + .../pc-emotion-picker/pc-emotion-picker.vue | 106 + .../portrait-emotion-picker.vue | 201 + .../follow/follow-btn/mobile-follow-btn.vue | 31 + .../follow/follow-btn/portrait-follow-btn.vue | 34 + .../imgs/mobile-promotion-close-1.png | Bin 0 -> 627 bytes .../imgs/mobile-promotion-close.png | Bin 0 -> 2782 bytes .../imgs/promotion-background.png | Bin 0 -> 43098 bytes .../follow-layer/mobile-follow-layer.vue | 86 + .../follow-layer/portrait-follow-layer.vue | 91 + .../follow/hooks/use-follow-btn.ts | 11 + .../follow/hooks/use-follow-layer.ts | 40 + .../follow/hooks/use-follow-setting.ts | 50 + .../_style/cover-mobile-interact-receive.scss | 54 + .../_style/cover-pc-interact-receive.scss | 70 + .../cover-portrait-interact-receive.scss | 57 + .../interactive-receive/_types/index.ts | 83 + .../announcement/announcement-top.vue | 24 + .../hooks/use-announcement-tips.ts | 82 + .../announcement/hooks/use-announcement.ts | 118 + .../announcement/imgs/icon-bulletin.png | Bin 0 -> 2316 bytes .../mobile-announcement-popup.vue | 69 + .../announcement/pc-announcement-dialog.vue | 40 + .../announcement/portrait-annoucement-bar.vue | 22 + .../portrait-announcement-entrance.vue | 76 + .../announcement/types/announcement-types.ts | 11 + .../hooks/imgs/icon-answer-card.png | Bin 0 -> 441 bytes .../hooks/imgs/icon-answer-card_p.png | Bin 0 -> 2812 bytes .../hooks/use-answer-card-entrance.ts | 69 + .../answer-card/hooks/use-answer-card.ts | 93 + .../hooks/use-quick-answer-card.ts | 68 + .../answer-card/mobile-answer-card-popup.vue | 55 + .../answer-card/mobile-quick-answer-card.vue | 69 + .../answer-card/pc-answer-card-dialog.vue | 43 + .../pc-quick-answer-card-dialog.vue | 41 + .../answer-card/types/answer-card-types.ts | 22 + .../check-in/hooks/imgs/icon-check-in.png | Bin 0 -> 696 bytes .../check-in/hooks/imgs/icon-check-in_p.png | Bin 0 -> 2862 bytes .../check-in/hooks/use-check-in-entrance.ts | 37 + .../check-in/hooks/use-check-in.ts | 52 + .../check-in/mobile-check-in-popup.vue | 34 + .../check-in/pc-check-in-dialog.vue | 39 + .../check-in/portrait-check-in-popup.vue | 19 + .../enroll-lottery/enroll-lottery-pendant.vue | 46 + .../hooks/use-enroll-lottery.ts | 33 + .../mobile-enroll-lottery-popup.vue | 34 + .../pc-enroll-lottery-dialog.vue | 26 + .../feed-back/hooks/use-feed-back.ts | 40 + .../feed-back/mobile-feed-back-popup.vue | 26 + .../feed-back/pc-feed-back-dialog.vue | 27 + .../interactive-entrance/imgs/icon-task.png | Bin 0 -> 395 bytes .../mobile-interactive-entrance.vue | 81 + .../pc-interactive-entrance.vue | 137 + .../portrait-interactive-entrance.vue | 153 + .../use-interactive-entrance.ts | 37 + .../interactive-receive/load-iar-ui.ts | 89 + .../hooks/imgs/icon-lottery-record.png | Bin 0 -> 330 bytes .../hooks/imgs/icon-lottery-record_p.png | Bin 0 -> 2536 bytes .../lottery/hooks/use-lottery-animation.ts | 46 + .../hooks/use-lottery-record-entrance.ts | 37 + .../lottery/hooks/use-lottery-record.ts | 101 + .../lottery/hooks/use-lottery-result.ts | 102 + .../lottery/mobile-lottery-animation.vue | 77 + .../lottery/mobile-lottery-record-popup.vue | 50 + .../lottery/mobile-lottery-result-popup.vue | 45 + .../lottery/pc-lottery-animation.vue | 28 + .../lottery/pc-lottery-record.vue | 71 + .../lottery/pc-lottery-result-dialog.vue | 35 + .../lottery/types/lottery-types.ts | 28 + .../interactive-receive/mobile-iar-render.vue | 81 + .../interactive-receive/pc-iar-render.vue | 53 + .../portrait-iar-render.vue | 87 + .../product/hooks/use-product-detail.ts | 30 + .../product/hooks/use-product-job-detail.ts | 31 + .../product/hooks/use-product-list.ts | 57 + .../product/hooks/use-product.ts | 175 + .../product/imgs/icon-job.png | Bin 0 -> 3229 bytes .../product/imgs/icon-shop-car.svga | Bin 0 -> 15071 bytes .../product/mobile-product-bubble.vue | 40 + .../mobile-product-job-detail-popup.vue | 31 + .../product/mobile-product-list.vue | 114 + .../product/pc-product-bubble.vue | 39 + .../product/pc-product-job-detail-dialog.vue | 30 + .../product/pc-product-list.vue | 106 + .../product/portrait-product-bubble.vue | 50 + .../portrait-product-job-detail-popup.vue | 32 + .../portrait-product-list-entrance.vue | 66 + .../product/portrait-product-list-popup.vue | 191 + .../product/types/product-types.ts | 25 + .../push-card/hooks/use-push-card.ts | 21 + .../push-card/mobile-push-card.vue | 23 + .../push-card/pc-push-card.vue | 23 + .../hooks/use-question-answer.ts | 55 + .../question-answer/imgs/icon-btn-edit.png | Bin 0 -> 2648 bytes .../question-answer/imgs/icon-close-black.png | Bin 0 -> 611 bytes .../imgs/icon-emotion-black.png | Bin 0 -> 1213 bytes .../mobile-question-answer.vue | 57 + .../question-answer/pc-question-answer.vue | 70 + .../portrait-question-answer.vue | 108 + .../hooks/imgs/icon-questionnaire.png | Bin 0 -> 374 bytes .../hooks/imgs/icon-questionnaire_p.png | Bin 0 -> 2709 bytes .../hooks/use-questionnaire-entrance.ts | 37 + .../questionnaire/hooks/use-questionnaire.ts | 109 + .../mobile-questionnaire-popup.vue | 58 + .../questionnaire/pc-questionnaire-dialog.vue | 38 + .../questionnaire/types/questionnaire-type.ts | 23 + .../redpack-rain/hooks/use-redpack-rain.ts | 92 + .../redpack-rain/mobile-redpack-rain.vue | 46 + .../redpack-rain/pc-redpack-rain.vue | 23 + .../redpack-rain/types/redpack-rain-types.ts | 4 + .../redpack/hooks/use-redpack-pendant.ts | 36 + .../redpack/hooks/use-redpack.ts | 114 + .../redpack/mobile-redpack-popup.vue | 56 + .../redpack/pc-redpack-dialog.vue | 24 + .../redpack/redpack-pendant.vue | 19 + .../_hooks/use-risk-evaluation-main.ts | 152 + .../common/risk-evaluation-entrance.vue | 101 + .../common/risk-evaluation-icon.svg | 1 + .../risk-evaluation-redirect-dialog.vue | 116 + .../mobile-risk-evaluation.vue | 65 + .../risk-evaluation/pc-risk-evaluation.vue | 62 + .../types/risk-evaluation-types.ts | 29 + .../use-risk-evaluation-reset.ts | 183 + .../score/hooks/use-score-record.ts | 51 + .../score/mobile-score-record-popup.vue | 43 + .../topic-pk/hook/use-topic-pk.ts | 11 + .../topic-pk/mobile-topic-pk.vue | 16 + .../topic-pk/pc-topic-pk.vue | 16 + .../tuwen-live/hooks/use-tuwen-live.ts | 109 + .../tuwen-live/mobile-tuwen-live.vue | 97 + .../tuwen-live/pc-tuwen-live.vue | 109 + .../tuwen-live/types/tuwen-live-types.ts | 12 + .../use-iar-global-config.ts | 28 + .../vote/hooks/use-vote.ts | 19 + .../vote/mobile-vote-panel.vue | 22 + .../vote/pc-vote-panel.vue | 22 + .../hooks/use-welfare-lottery.ts | 74 + .../mobile-welfare-lottery.vue | 40 + .../welfare-lottery/pc-welfare-lottery.vue | 34 + .../invite/hooks/use-invite-poster-entry.ts | 16 + .../invite/hooks/use-invite-rank.ts | 203 + .../imgs/invite-poster-entry.png | Bin 0 -> 3904 bytes .../mobile-invite-poster-entry-capsule.vue | 27 + .../mobile-invite-poster-entry.vue | 24 + .../invite/mobile-invite-rank/imgs/rank-1.png | Bin 0 -> 8048 bytes .../invite/mobile-invite-rank/imgs/rank-2.png | Bin 0 -> 8093 bytes .../invite/mobile-invite-rank/imgs/rank-3.png | Bin 0 -> 8451 bytes .../mobile-invite-rank-item.vue | 140 + .../mobile-invite-rank/mobile-invite-rank.vue | 201 + .../portrait-invite-poster-entry.vue | 23 + .../fonts/BarlowSemiCondensed-Medium.ttf | Bin 0 -> 99360 bytes .../BarlowSemiCondensed-SemiBoldItalic.ttf | Bin 0 -> 107624 bytes .../imgs/icon-champion.png | Bin 0 -> 3012 bytes .../imgs/icon-default-avatar.png | Bin 0 -> 897 bytes .../portrait-invite-rank/imgs/icon-invite.png | Bin 0 -> 1399 bytes .../imgs/icon-no-invite.png | Bin 0 -> 2326 bytes .../portrait-invite-rank/imgs/icon-no.1.png | Bin 0 -> 4069 bytes .../portrait-invite-rank/imgs/icon-no.2.png | Bin 0 -> 3430 bytes .../portrait-invite-rank/imgs/icon-no.3.png | Bin 0 -> 3442 bytes .../imgs/icon-second-place.png | Bin 0 -> 2527 bytes .../imgs/icon-third-place.png | Bin 0 -> 2461 bytes .../portrait-invite-rank/imgs/invite-bg.png | Bin 0 -> 135115 bytes .../portrait-invite-rank-entrance.vue | 44 + .../portrait-invite-rank-top3-item.vue | 166 + .../portrait-invite-rank.vue | 350 + .../mobile-live-start-tips.vue | 32 + .../live-start-tips/pc-live-start-tips.vue | 87 + .../live-start-tips/use-live-start-tips.ts | 47 + .../member-list/imgs/loading.png | Bin 0 -> 1779 bytes .../member-list/member-list-item.vue | 90 + .../member-list/member-list.vue | 145 + .../member-list/use-member-list.ts | 262 + .../hooks/use-micro-activity.ts | 127 + .../hooks/window-device-motion.ts | 87 + .../mobile-micro-activity.vue | 170 + .../pc-micro-activity/imgs/icon_close.png | Bin 0 -> 1039 bytes .../pc-micro-activity/pc-micro-activity.vue | 238 + .../portrait-micro-activity-pendant.vue | 40 + .../portrait-micro-activity.vue | 99 + .../auto-textarea/mobile-auto-textarea.vue | 113 + .../auto-textarea/pc-auto-textarea.vue | 101 + .../auto-textarea/use-auto-textarea.ts | 245 + .../mobile-msg-input-wrap.vue | 285 + .../mobile-msg-input-wrap/var.scss | 1 + .../pc-msg-input-wrap/pc-msg-input-wrap.vue | 360 + .../pc-set-nick-placeholder.vue | 47 + .../portrait-msg-input-wrap.vue | 156 + .../use-msg-input-controller.ts | 222 + .../msg-input-wrap/use-msg-input-wrap.ts | 177 + .../multi-meeting/imgs/playing.gif | Bin 0 -> 3658 bytes .../multi-meeting/mobile-multi-meeting.vue | 211 + .../multi-meeting/pc-multi-meeting.vue | 242 + .../multi-meeting/use-multi-meeting.ts | 212 + .../page-advert/mobile-page-advert.vue | 142 + .../page-advert/pc-page-advert.vue | 150 + .../page-advert/use-page-advert.ts | 52 + .../playback-list/hooks/use-playback-list.ts | 23 + .../mobile-playback-list.vue | 214 + .../pc-playback-list/pc-playback-list.vue | 223 + .../portrait-playback-list.vue | 214 + .../common/audio-panel/imgs/audio-1.png | Bin 0 -> 24190 bytes .../common/audio-panel/imgs/audio-2.png | Bin 0 -> 24622 bytes .../common/audio-panel/imgs/audio-3.png | Bin 0 -> 25124 bytes .../audio-panel/portrait-audio-panel.vue | 88 + .../imgs/portrait-end-placeholder.png | Bin 0 -> 22510 bytes .../portrait-none-live-panel.vue | 28 + .../player-play-button/imgs/play-btn-2.png | Bin 0 -> 16999 bytes .../imgs/play-btn-prefix.gif | Bin 0 -> 3647 bytes .../player-play-button/imgs/play-btn.png | Bin 0 -> 7531 bytes .../player-play-button/player-play-button.vue | 106 + .../use-player-play-button.ts | 12 + .../player/hooks/use-player-action.ts | 207 + .../player/hooks/use-player-control.ts | 335 + .../player/hooks/use-player-event.ts | 123 + .../player/hooks/use-player-keyboard.ts | 117 + .../player/hooks/use-player-main.ts | 203 + .../player/hooks/use-resolution-size.ts | 124 + .../player/imgs/icon-pause.png | Bin 0 -> 303 bytes .../player/imgs/icon-play.png | Bin 0 -> 487 bytes .../player/imgs/play-btn.png | Bin 0 -> 7531 bytes .../player/imgs/player-audio-mode.png | Bin 0 -> 40745 bytes .../player/imgs/player-no-live.png | Bin 0 -> 55165 bytes .../player/imgs/player-stop.png | Bin 0 -> 58603 bytes .../imgs/low-latency-active.png | Bin 0 -> 254 bytes .../imgs/mobile-player-ui-fullscreen-exit.png | Bin 0 -> 329 bytes .../imgs/mobile-player-ui-fullscreen.png | Bin 0 -> 178 bytes .../imgs/mobile-player-ui-pause.png | Bin 0 -> 644 bytes .../imgs/mobile-player-ui-play.png | Bin 0 -> 1129 bytes .../imgs/mobile-player-ui-refresh.png | Bin 0 -> 979 bytes .../imgs/mobile-player-ui-setting.png | Bin 0 -> 4339 bytes .../mobile-low-latency-switch.vue | 129 + .../mobile-player-control-setting.vue | 101 + .../mobile-player-control.vue | 280 + .../pc-player-control/connect-mic-setting.vue | 106 + .../imgs/icon-call-audio-close-hover.png | Bin 0 -> 2360 bytes .../imgs/icon-call-audio-close.png | Bin 0 -> 1850 bytes .../imgs/icon-call-audio-hover.png | Bin 0 -> 1420 bytes .../imgs/icon-call-audio.png | Bin 0 -> 1157 bytes .../imgs/icon-call-video-close-hover.png | Bin 0 -> 2626 bytes .../imgs/icon-call-video-close.png | Bin 0 -> 2019 bytes .../imgs/icon-call-video-hover.png | Bin 0 -> 1578 bytes .../imgs/icon-call-video.png | Bin 0 -> 1274 bytes .../imgs/pc-player-ui-barrage-close.png | Bin 0 -> 468 bytes .../imgs/pc-player-ui-barrage-open.png | Bin 0 -> 274 bytes .../pc-player-ui-fullscreen-cancel-hover.png | Bin 0 -> 625 bytes .../imgs/pc-player-ui-fullscreen-cancel.png | Bin 0 -> 580 bytes .../imgs/pc-player-ui-fullscreen-hover.png | Bin 0 -> 326 bytes .../imgs/pc-player-ui-fullscreen.png | Bin 0 -> 364 bytes .../imgs/pc-player-ui-pause-hover.png | Bin 0 -> 283 bytes .../imgs/pc-player-ui-pause.png | Bin 0 -> 265 bytes .../imgs/pc-player-ui-play-hover.png | Bin 0 -> 736 bytes .../imgs/pc-player-ui-play.png | Bin 0 -> 584 bytes .../imgs/pc-player-ui-refresh-hover.png | Bin 0 -> 1285 bytes .../imgs/pc-player-ui-refresh.png | Bin 0 -> 1141 bytes .../imgs/pc-player-ui-setting-hover.png | Bin 0 -> 1396 bytes .../imgs/pc-player-ui-setting.png | Bin 0 -> 1102 bytes .../imgs/pc-player-ui-sound-hover.png | Bin 0 -> 1072 bytes .../imgs/pc-player-ui-sound-mute-hover.png | Bin 0 -> 2097 bytes .../imgs/pc-player-ui-sound-mute.png | Bin 0 -> 1561 bytes .../imgs/pc-player-ui-sound.png | Bin 0 -> 842 bytes .../imgs/pc-player-ui-switch-screen-hover.png | Bin 0 -> 1016 bytes .../imgs/pc-player-ui-switch-screen.png | Bin 0 -> 842 bytes .../pc-player-control/player-control.vue | 524 + .../pc-player-control/player-setting.vue | 177 + .../pc-player-control/rate-setting.vue | 30 + .../pc-player-control/volume-setting.vue | 174 + .../_styles/control-select-options.scss | 48 + .../portrait-latency-setting-popup.vue | 57 + .../portrait-line-setting-popup.vue | 55 + .../portrait-player-control-popup.vue | 26 + .../portrait-player-progress.vue | 75 + .../portrait-quality-setting-popup.vue | 55 + .../portrait-rate-setting-popup.vue | 57 + .../use-portrait-setting-popup.ts | 40 + .../mobile-player-cover-img.vue | 56 + .../player-cover-img/pc-player-cover-img.vue | 62 + .../portrait-player-cover-img.vue | 87 + .../player/player-logo/mobile-player-logo.vue | 69 + .../player/player-logo/pc-player-logo.vue | 69 + .../mobile-player-main/mobile-player-main.vue | 166 + .../styles/cover-mobile-player.scss | 5 + .../pc-player-main/pc-player-main.vue | 70 + .../styles/cover-pc-player.scss | 24 + .../_hooks/use-portrait-click-player.ts | 92 + .../_styles/cover-player-style.scss | 43 + .../portrait-player-main.vue | 189 + .../use-portrait-player-size.ts | 156 + .../send-redpack/_hooks/use-send-redpack.ts | 170 + .../send-redpack/mobile-send-redpack.vue | 129 + .../withdraw/_hooks/use-receive-record.ts | 109 + .../withdraw/_hooks/use-withdraw-apply.ts | 178 + .../withdraw/_hooks/use-withdraw-detail.ts | 116 + .../mobile-withdraw-apply.vue | 168 + .../mobile-cash-receive-record.vue | 83 + .../mobile-redpack-receive-record.vue | 93 + .../mobile-withdraw-detail.vue | 214 + .../portrait-withdraw-apply.vue | 164 + .../portrait-cash-receive-record.vue | 54 + .../portrait-redpack-receive-record.vue | 58 + .../portrait-withdraw-detail.vue | 182 + .../withdraw/use-withdraw.ts | 45 + .../bind-sdk-events/bind-channel-events.ts | 19 + src/core/bind-sdk-events/bind-chat-events.ts | 33 + .../bind-connect-mic-events.ts | 16 + .../bind-sdk-events/bind-enroll-events.ts | 12 + .../bind-finance-risk-evaluation-events.ts | 18 + .../bind-interact-receive-events.ts | 15 + .../bind-sdk-events/bind-invite-events.ts | 10 + .../bind-sdk-events/bind-player-events.ts | 37 + src/core/bind-sdk-events/bind-user-events.ts | 10 + .../bind-sdk-events/bind-watch-core-events.ts | 30 + src/core/watch-sdk.ts | 72 + src/hooks/README.md | 13 + .../animation/use-svga-animation/index.ts | 109 + src/hooks/animation/use-svga-player/index.ts | 252 + src/hooks/behaviors/use-append-to/index.ts | 30 + src/hooks/behaviors/use-aside-drag/index.ts | 92 + .../behaviors/use-click-outside/index.ts | 105 + .../behaviors/use-panel-visible/index.ts | 62 + src/hooks/behaviors/use-scroll-arrow/index.ts | 72 + src/hooks/behaviors/use-scroll-list/index.ts | 122 + .../behaviors/use-simple-visible/index.ts | 98 + src/hooks/business/use-pv-track/index.ts | 12 + .../components/use-image-preview/index.ts | 23 + .../use-popper/_components/popper-arrow.vue | 58 + .../use-popper/_hooks/use-popper-arrow.ts | 50 + .../use-popper/_hooks/use-popper-core.ts | 192 + .../_hooks/use-popper-interactive.ts | 104 + .../use-popper/_hooks/use-popper-visible.ts | 91 + .../components/use-popper/_popper-type.ts | 73 + src/hooks/components/use-popper/index.ts | 113 + .../use-popper/use-auto-topmost-show.ts | 34 + .../_components/imgs/toast-error.svg | 1 + .../use-toast/_components/imgs/toast-help.svg | 1 + .../use-toast/_components/imgs/toast-info.svg | 1 + .../_components/imgs/toast-loading.svg | 18 + .../_components/imgs/toast-success.svg | 1 + .../_components/imgs/toast-warning.svg | 1 + .../use-toast/_components/mobile-toast.vue | 59 + .../use-toast/_components/pc-toast.vue | 107 + .../use-toast/_hooks/use-toast-comp.ts | 154 + src/hooks/components/use-toast/_toast_type.ts | 29 + src/hooks/components/use-toast/index.ts | 158 + src/hooks/core/use-error-catch/index.ts | 138 + src/hooks/core/use-error-verify/index.ts | 29 + src/hooks/core/use-query-params/index.ts | 116 + src/hooks/core/use-screen-orient/index.ts | 79 + src/hooks/core/use-vue/index.ts | 38 + .../core/use-window-resize-listener/index.ts | 39 + .../platform/use-polyv-watch-domain/index.ts | 37 + .../use-weixin/use-weixin-authorize.ts | 118 + .../platform/use-weixin/use-weixin-pay.ts | 58 + .../platform/use-weixin/use-weixin-sdk.ts | 119 + .../platform/use-weixin/use-weixin-share.ts | 177 + src/hooks/tools/use-count-down/index.ts | 114 + src/hooks/tools/use-format/index.ts | 37 + src/hooks/tools/use-fullscreen/index.ts | 148 + src/main.ts | 44 + .../components/mobile-splash-btn.vue | 31 + .../mobile-splash/mobile-splash-full.vue | 125 + .../splash/mobile-splash/mobile-splash.vue | 150 + src/pages/splash/pc-splash/pc-splash.vue | 310 + .../_hooks/use-connect-mic-setup.ts | 30 + .../use-watch-page/_hooks/use-main-screen.ts | 84 + .../use-watch-page/_hooks/use-online.ts | 92 + .../use-watch-page/_hooks/use-polling.ts | 37 + .../_hooks/use-single-session-verify.ts | 89 + .../watch/_hooks/use-watch-page/index.ts | 27 + src/pages/watch/_hooks/use-watch-tab/index.ts | 99 + .../layout/mobile-watch-layout.vue | 321 + .../mobile-watch/layout/mobile-watch-menu.vue | 292 + .../layout/mobile-watch-pendant.vue | 44 + src/pages/watch/mobile-watch/mobile-watch.vue | 103 + .../pc-watch/layout/pc-watch-aside-menu.vue | 165 + .../pc-watch/layout/pc-watch-bottom-menu.vue | 114 + .../watch/pc-watch/layout/pc-watch-layout.vue | 391 + .../pc-watch/layout/pc-watch-sub-pack-up.vue | 115 + src/pages/watch/pc-watch/pc-watch.vue | 60 + .../channel-description/images/icon-desc.png | Bin 0 -> 1362 bytes .../portrait-channel-description.vue | 71 + .../channel-info/images/icon-eye.png | Bin 0 -> 575 bytes .../portrait-channel-info-capsule.vue | 113 + .../images/icon-send-msg.png | Bin 0 -> 2821 bytes .../portrait-chat-input-placeholder.vue | 88 + .../components/menu/images/icon-audio.png | Bin 0 -> 1444 bytes .../menu/images/icon-donate-hide.png | Bin 0 -> 1947 bytes .../menu/images/icon-donate-show.png | Bin 0 -> 1654 bytes .../components/menu/images/icon-feed.png | Bin 0 -> 1591 bytes .../components/menu/images/icon-more.png | Bin 0 -> 1472 bytes .../components/menu/images/icon-only-host.png | Bin 0 -> 1441 bytes .../components/menu/images/icon-qa.png | Bin 0 -> 1209 bytes .../components/menu/images/icon-rate.png | Bin 0 -> 417 bytes .../menu/images/icon-score-withdraw.png | Bin 0 -> 3199 bytes .../menu/images/icon-set-latency.png | Bin 0 -> 1110 bytes .../components/menu/images/icon-set-level.png | Bin 0 -> 646 bytes .../components/menu/images/icon-set-line.png | Bin 0 -> 1281 bytes .../components/menu/images/icon-show-all.png | Bin 0 -> 2469 bytes .../components/menu/images/icon-video.png | Bin 0 -> 955 bytes .../components/menu/images/icon-withdraw.png | Bin 0 -> 1165 bytes .../menu/portrait-menu-entrance.vue | 27 + .../components/menu/portrait-menu-item.vue | 138 + .../components/menu/portrait-menu-popup.vue | 313 + .../portrait-playback-chapter-popup.vue | 82 + .../portrait-watch/layout/boundary-wrap.vue | 44 + .../layout/carousel-main-screen.vue | 311 + .../layout/carousel-page-container.vue | 25 + .../layout/carousel-sub-screen.vue | 50 + .../layout/images/icon-donate.png | Bin 0 -> 2002 bytes .../layout/images/icon-playback.png | Bin 0 -> 4706 bytes .../layout/images/portrait-bg.png | Bin 0 -> 37212 bytes .../layout/portrait-watch-layout-carousel.vue | 70 + .../layout/portrait-watch-layout.vue | 85 + .../watch/portrait-watch/portrait-watch.vue | 167 + src/plugins/alloy-finger/transform.js | 322 + src/plugins/async-validator/index.ts | 9 + .../external-lib-loaders/load-ali-awsc.ts | 28 + .../external-lib-loaders/load-svga-player.ts | 48 + .../load-work-weixin-login.ts | 60 + .../external-lib-loaders/load-wx-sdk.ts | 57 + src/plugins/pinia/index.ts | 5 + src/plugins/pinia/util.ts | 23 + src/plugins/polyv-ui/admin-import.ts | 19 + src/plugins/polyv-ui/area-utils.ts | 41 + src/plugins/polyv-ui/cover-styles.scss | 6 + src/plugins/polyv-ui/mobile-import.ts | 14 + src/plugins/polyv-ui/pc-import.ts | 19 + src/plugins/polyv-ui/types.ts | 75 + src/plugins/vconsole/index.ts | 21 + src/skins/_common/basic-iar-style.scss | 328 + src/skins/_common/basic-mobile-style.scss | 260 + src/skins/_common/basic-pc-style.scss | 216 + src/skins/_common/basic-style.scss | 248 + src/skins/_common/functions.scss | 38 + src/skins/_common/mixins.scss | 23 + src/skins/_debug/skin-select.vue | 64 + src/skins/black/_black-mobile.scss | 4 + src/skins/black/_black-pc.scss | 4 + src/skins/black/config-common.scss | 244 + src/skins/black/config-iar.scss | 111 + src/skins/black/config-mobile.scss | 154 + src/skins/black/config-pc.scss | 110 + src/skins/black/config.scss | 7 + src/skins/black/imgs/pws-icon-more.png | Bin 0 -> 283 bytes src/skins/black/imgs/pws-pc-connect-mic.gif | Bin 0 -> 18637 bytes src/skins/black/imgs/pws-pc-watch-bg.png | Bin 0 -> 390919 bytes .../imgs/pws-product-icon-recruitment.png | Bin 0 -> 6213 bytes src/skins/black/imgs/pws-product-icon.png | Bin 0 -> 7906 bytes src/skins/black/imgs/pws-product-shop-car.png | Bin 0 -> 4200 bytes src/skins/black/imgs/pws-qa-entry.png | Bin 0 -> 2671 bytes src/skins/black/imgs/pws-qa-no-data-icon.png | Bin 0 -> 1144 bytes src/skins/black/imgs/pws-zan.png | Bin 0 -> 2998 bytes src/skins/blue/_blue-mobile.scss | 4 + src/skins/blue/_blue-pc.scss | 4 + src/skins/blue/config-common.scss | 244 + src/skins/blue/config-iar.scss | 111 + src/skins/blue/config-mobile.scss | 154 + src/skins/blue/config-pc.scss | 110 + src/skins/blue/config.scss | 7 + src/skins/blue/imgs/pws-icon-more.png | Bin 0 -> 283 bytes src/skins/blue/imgs/pws-pc-connect-mic.gif | Bin 0 -> 20756 bytes src/skins/blue/imgs/pws-pc-watch-bg.png | Bin 0 -> 198641 bytes .../imgs/pws-product-icon-recruitment.png | Bin 0 -> 7740 bytes src/skins/blue/imgs/pws-product-icon.png | Bin 0 -> 9847 bytes src/skins/blue/imgs/pws-product-shop-car.png | Bin 0 -> 4458 bytes src/skins/blue/imgs/pws-qa-entry.png | Bin 0 -> 2671 bytes src/skins/blue/imgs/pws-qa-no-data-icon.png | Bin 0 -> 1143 bytes src/skins/blue/imgs/pws-zan.png | Bin 0 -> 2983 bytes src/skins/golden/_golden-mobile.scss | 4 + src/skins/golden/_golden-pc.scss | 4 + src/skins/golden/config-common.scss | 244 + src/skins/golden/config-iar.scss | 111 + src/skins/golden/config-mobile.scss | 154 + src/skins/golden/config-pc.scss | 110 + src/skins/golden/config.scss | 7 + src/skins/golden/imgs/pws-icon-more.png | Bin 0 -> 283 bytes src/skins/golden/imgs/pws-pc-connect-mic.gif | Bin 0 -> 20852 bytes src/skins/golden/imgs/pws-pc-watch-bg.png | Bin 0 -> 108707 bytes .../imgs/pws-product-icon-recruitment.png | Bin 0 -> 7385 bytes src/skins/golden/imgs/pws-product-icon.png | Bin 0 -> 9355 bytes .../golden/imgs/pws-product-shop-car.png | Bin 0 -> 4458 bytes src/skins/golden/imgs/pws-qa-entry.png | Bin 0 -> 2671 bytes src/skins/golden/imgs/pws-qa-no-data-icon.png | Bin 0 -> 1143 bytes src/skins/golden/imgs/pws-zan.png | Bin 0 -> 3083 bytes src/skins/green/_green-mobile.scss | 4 + src/skins/green/_green-pc.scss | 4 + src/skins/green/config-common.scss | 244 + src/skins/green/config-iar.scss | 111 + src/skins/green/config-mobile.scss | 154 + src/skins/green/config-pc.scss | 110 + src/skins/green/config.scss | 7 + src/skins/green/imgs/pws-icon-more.png | Bin 0 -> 283 bytes src/skins/green/imgs/pws-pc-connect-mic.gif | Bin 0 -> 21656 bytes src/skins/green/imgs/pws-pc-watch-bg.png | Bin 0 -> 115734 bytes .../imgs/pws-product-icon-recruitment.png | Bin 0 -> 6213 bytes src/skins/green/imgs/pws-product-icon.png | Bin 0 -> 7906 bytes src/skins/green/imgs/pws-product-shop-car.png | Bin 0 -> 4200 bytes src/skins/green/imgs/pws-qa-entry.png | Bin 0 -> 4273 bytes src/skins/green/imgs/pws-qa-no-data-icon.png | Bin 0 -> 1144 bytes src/skins/green/imgs/pws-zan.png | Bin 0 -> 6359 bytes src/skins/red/_red-mobile.scss | 4 + src/skins/red/_red-pc.scss | 4 + src/skins/red/config-common.scss | 244 + src/skins/red/config-iar.scss | 111 + src/skins/red/config-mobile.scss | 154 + src/skins/red/config-pc.scss | 110 + src/skins/red/config.scss | 7 + src/skins/red/imgs/pws-icon-more.png | Bin 0 -> 283 bytes src/skins/red/imgs/pws-pc-connect-mic.gif | Bin 0 -> 20616 bytes src/skins/red/imgs/pws-pc-watch-bg.png | Bin 0 -> 390919 bytes .../red/imgs/pws-product-icon-recruitment.png | Bin 0 -> 6213 bytes src/skins/red/imgs/pws-product-icon.png | Bin 0 -> 7906 bytes src/skins/red/imgs/pws-product-shop-car.png | Bin 0 -> 4200 bytes src/skins/red/imgs/pws-qa-entry.png | Bin 0 -> 3533 bytes src/skins/red/imgs/pws-qa-no-data-icon.png | Bin 0 -> 1144 bytes src/skins/red/imgs/pws-zan.png | Bin 0 -> 4436 bytes src/skins/use-page-skin.ts | 152 + src/skins/white/_white-mobile.scss | 4 + src/skins/white/_white-pc.scss | 4 + src/skins/white/config-common.scss | 244 + src/skins/white/config-iar.scss | 111 + src/skins/white/config-mobile.scss | 154 + src/skins/white/config-pc.scss | 110 + src/skins/white/config.scss | 7 + src/skins/white/imgs/pws-icon-more.png | Bin 0 -> 283 bytes src/skins/white/imgs/pws-pc-connect-mic.gif | Bin 0 -> 20852 bytes src/skins/white/imgs/pws-pc-watch-bg.png | Bin 0 -> 419940 bytes .../imgs/pws-product-icon-recruitment.png | Bin 0 -> 7385 bytes src/skins/white/imgs/pws-product-icon.png | Bin 0 -> 9355 bytes src/skins/white/imgs/pws-product-shop-car.png | Bin 0 -> 4458 bytes src/skins/white/imgs/pws-qa-entry.png | Bin 0 -> 2671 bytes src/skins/white/imgs/pws-qa-no-data-icon.png | Bin 0 -> 1143 bytes src/skins/white/imgs/pws-zan.png | Bin 0 -> 2983 bytes src/store/use-auth-store.ts | 88 + src/store/use-channel-info-store.ts | 299 + src/store/use-channel-menu-store.ts | 283 + src/store/use-channel-store.ts | 189 + src/store/use-chat-msg-store.ts | 435 + src/store/use-chat-store.ts | 256 + src/store/use-common-store.ts | 17 + src/store/use-connect-mic-store.ts | 220 + src/store/use-doc-store.ts | 63 + src/store/use-donate-store.ts | 341 + src/store/use-enroll-store.ts | 199 + src/store/use-finance-store.ts | 148 + src/store/use-interact-receive-store.ts | 195 + src/store/use-invite-store.ts | 144 + src/store/use-lang-store.ts | 210 + src/store/use-layout-store.ts | 160 + src/store/use-live-booking-store.ts | 138 + src/store/use-micro-activity-store.ts | 52 + src/store/use-page-store.ts | 53 + src/store/use-playback-store.ts | 220 + src/store/use-player-store.ts | 341 + src/store/use-portrait-layout-store.ts | 103 + src/store/use-score-store.ts | 40 + src/store/use-send-redpack-store.ts | 73 + src/store/use-share-store.ts | 245 + src/store/use-viewer-store.ts | 119 + src/store/use-watch-app-store.ts | 206 + src/store/use-webview-store.ts | 72 + src/store/use-weixin-store.ts | 85 + stylelint.config.js | 85 + tsconfig.build.json | 14 + tsconfig.json | 32 + types/ali-awsc.d.ts | 17 + types/alloyfinger.d.ts | 14 + types/emotion-sdk.d.ts | 21 + types/global.d.ts | 40 + types/polyv-ui-admin.d.ts | 80 + types/polyv-ui-mobile.d.ts | 46 + types/polyv-ui-pc.d.ts | 46 + types/shims-scss.d.ts | 14 + types/shims-vue.d.ts | 10 + types/vue-declare-extend.d.ts | 12 + types/wx-jssdk.d.ts | 1475 ++ vue.config.js | 62 + 1269 files changed, 106281 insertions(+), 24 deletions(-) create mode 100644 .browserslistrc create mode 100644 .editorconfig create mode 100644 .eslintignore create mode 100644 .eslintrc.js create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 .husky/pre-commit create mode 100644 .prettierignore create mode 100644 .prettierrc.js create mode 100644 .stylelintignore create mode 100644 .vscode/extensions.json create mode 100644 .vscode/settings.json create mode 100644 babel.config.js create mode 100644 build/build-config.js create mode 100644 build/core-import.js create mode 100644 build/tag-config.js create mode 100644 build/webpack.vue.config.js create mode 100644 icon-svgs/demo/icon-demo-mobile.html create mode 100644 icon-svgs/demo/icon-demo-pc.html create mode 100644 icon-svgs/mobile/arrow-down.svg create mode 100644 icon-svgs/mobile/arrow-left.svg create mode 100644 icon-svgs/mobile/arrow-right.svg create mode 100644 icon-svgs/mobile/arrow-up.svg create mode 100644 icon-svgs/mobile/booking.svg create mode 100644 icon-svgs/mobile/check-round-fill.svg create mode 100644 icon-svgs/mobile/check.svg create mode 100644 icon-svgs/mobile/close-round.svg create mode 100644 icon-svgs/mobile/close.svg create mode 100644 icon-svgs/mobile/danmu-switch.svg create mode 100644 icon-svgs/mobile/delete.svg create mode 100644 icon-svgs/mobile/emotion.svg create mode 100644 icon-svgs/mobile/forbid.svg create mode 100644 icon-svgs/mobile/heart.svg create mode 100644 icon-svgs/mobile/keyboard.svg create mode 100644 icon-svgs/mobile/like.svg create mode 100644 icon-svgs/mobile/media.svg create mode 100644 icon-svgs/mobile/message.svg create mode 100644 icon-svgs/mobile/people.svg create mode 100644 icon-svgs/mobile/play-round.svg create mode 100644 icon-svgs/mobile/product.svg create mode 100644 icon-svgs/mobile/smiling-face.svg create mode 100644 icon-svgs/mobile/translate.svg create mode 100644 icon-svgs/mobile/video-call.svg create mode 100644 icon-svgs/mobile/voice-call.svg create mode 100644 icon-svgs/pc/apply-video-call.svg create mode 100644 icon-svgs/pc/arrow-down.svg create mode 100644 icon-svgs/pc/arrow-left.svg create mode 100644 icon-svgs/pc/arrow-right.svg create mode 100644 icon-svgs/pc/arrow-up.svg create mode 100644 icon-svgs/pc/booking.svg create mode 100644 icon-svgs/pc/bulletin.svg create mode 100644 icon-svgs/pc/caret-down.svg create mode 100644 icon-svgs/pc/caret-left.svg create mode 100644 icon-svgs/pc/caret-right.svg create mode 100644 icon-svgs/pc/caret-up.svg create mode 100644 icon-svgs/pc/check-round-fill.svg create mode 100644 icon-svgs/pc/check.svg create mode 100644 icon-svgs/pc/close-round.svg create mode 100644 icon-svgs/pc/close.svg create mode 100644 icon-svgs/pc/device-setting.svg create mode 100644 icon-svgs/pc/emotion.svg create mode 100644 icon-svgs/pc/feedback.svg create mode 100644 icon-svgs/pc/forbid.svg create mode 100644 icon-svgs/pc/hang-up.svg create mode 100644 icon-svgs/pc/lang.svg create mode 100644 icon-svgs/pc/media.svg create mode 100644 icon-svgs/pc/people.svg create mode 100644 icon-svgs/pc/pic.svg create mode 100644 icon-svgs/pc/picture.svg create mode 100644 icon-svgs/pc/play-round.svg create mode 100644 icon-svgs/pc/set-nick.svg create mode 100644 icon-svgs/pc/share.svg create mode 100644 icon-svgs/pc/tips.svg create mode 100644 icon-svgs/pc/translate.svg create mode 100644 icon-svgs/pc/video-call.svg create mode 100644 icon-svgs/pc/voice-call.svg create mode 100644 icon-svgs/pc/warning-round-fill.svg create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 polyv-icon.config.js create mode 100644 postcss.config.js create mode 100644 public/favicon.ico create mode 100644 public/index.html create mode 100644 src/app/_hooks/use-global-events-effect.ts create mode 100644 src/app/_hooks/use-global-style.ts create mode 100644 src/app/_hooks/use-weixin-setup.ts create mode 100644 src/app/app-events/events/chat.ts create mode 100644 src/app/app-events/events/connectMic.ts create mode 100644 src/app/app-events/events/doc.ts create mode 100644 src/app/app-events/events/donate.ts create mode 100644 src/app/app-events/events/finance.ts create mode 100644 src/app/app-events/events/global.ts create mode 100644 src/app/app-events/events/index.ts create mode 100644 src/app/app-events/events/interaction.ts create mode 100644 src/app/app-events/events/invite.ts create mode 100644 src/app/app-events/events/microActivity.ts create mode 100644 src/app/app-events/events/player.ts create mode 100644 src/app/app-events/events/portrait.ts create mode 100644 src/app/app-events/events/withdraw.ts create mode 100644 src/app/app-events/index.ts create mode 100644 src/app/app-events/use-app-events.ts create mode 100644 src/app/layout/main-enter/_hooks/use-main-enter.ts create mode 100644 src/app/layout/main-enter/_hooks/use-page-layout-style.ts create mode 100644 src/app/layout/main-enter/mobile-main.vue create mode 100644 src/app/layout/main-enter/pc-main.vue create mode 100644 src/app/layout/page-error/_components/page-error-mobile-default.vue create mode 100644 src/app/layout/page-error/_components/page-error-pc-default.vue create mode 100644 src/app/layout/page-error/_components/page-error-work-wechat.vue create mode 100644 src/app/layout/page-error/_hooks/use-page-error.ts create mode 100644 src/app/layout/page-error/images/error-404.png create mode 100644 src/app/layout/page-error/images/error-auth.png create mode 100644 src/app/layout/page-error/images/error-noExist.png create mode 100644 src/app/layout/page-error/images/tip-icon.png create mode 100644 src/app/layout/page-error/page-error-entry.vue create mode 100644 src/app/layout/page-error/page-error-type.ts create mode 100644 src/app/use-watch-app.ts create mode 100644 src/app/watch-app.vue create mode 100644 src/assets/constants/date-format.ts create mode 100644 src/assets/constants/defaults.ts create mode 100644 src/assets/constants/key-code.ts create mode 100644 src/assets/constants/selector.ts create mode 100644 src/assets/constants/special-user-types.ts create mode 100644 src/assets/constants/tab-name.ts create mode 100644 src/assets/favicons/polyv.ico create mode 100644 src/assets/images/low-latency/low-latency-bg-mobile.svg create mode 100644 src/assets/images/low-latency/low-latency-bg-pc.svg create mode 100644 src/assets/images/player/icon-cam-closed.png create mode 100644 src/assets/images/player/icon-sip.png create mode 100644 src/assets/images/player/play-btn.png create mode 100644 src/assets/images/player/player-audio-mode.png create mode 100644 src/assets/images/player/player-no-live.png create mode 100644 src/assets/images/player/player-stop.png create mode 100644 src/assets/images/share/facebook.png create mode 100644 src/assets/images/share/qq.png create mode 100644 src/assets/images/share/qzone.png create mode 100644 src/assets/images/share/twitter.png create mode 100644 src/assets/images/share/weibo.png create mode 100644 src/assets/images/splash/default-splash-full-img.jpg create mode 100644 src/assets/lang/i18ns/arabic.ts create mode 100644 src/assets/lang/i18ns/china.ts create mode 100644 src/assets/lang/i18ns/english.ts create mode 100644 src/assets/lang/i18ns/farsi.ts create mode 100644 src/assets/lang/i18ns/index.ts create mode 100644 src/assets/lang/i18ns/portuguese.ts create mode 100644 src/assets/lang/i18ns/russian.ts create mode 100644 src/assets/lang/i18ns/spanish.ts create mode 100644 src/assets/lang/index.ts create mode 100644 src/assets/lang/lang-enum.ts create mode 100644 src/assets/lang/types.ts create mode 100644 src/assets/styles/animation.scss create mode 100644 src/assets/styles/fonts/ALIBABAFont.eot create mode 100644 src/assets/styles/fonts/ALIBABAFont.otf create mode 100644 src/assets/styles/fonts/ALIBABAFont.svg create mode 100644 src/assets/styles/fonts/ALIBABAFont.ttf create mode 100644 src/assets/styles/fonts/ALIBABAFont.woff create mode 100644 src/assets/styles/function.scss create mode 100644 src/assets/styles/global.scss create mode 100644 src/assets/styles/mixins.scss create mode 100644 src/assets/styles/mobile.scss create mode 100644 src/assets/styles/pc-response.scss create mode 100644 src/assets/styles/pc.scss create mode 100644 src/assets/styles/portrait.scss create mode 100644 src/assets/styles/variables.scss create mode 100644 src/assets/utils/array.ts create mode 100644 src/assets/utils/browser.ts create mode 100644 src/assets/utils/copy.ts create mode 100644 src/assets/utils/date-time.ts create mode 100644 src/assets/utils/dom.ts create mode 100644 src/assets/utils/file.ts create mode 100644 src/assets/utils/function.ts create mode 100644 src/assets/utils/image.ts create mode 100644 src/assets/utils/number.ts create mode 100644 src/assets/utils/storage.ts create mode 100644 src/assets/utils/string.ts create mode 100644 src/assets/utils/types.ts create mode 100644 src/assets/utils/url.ts create mode 100644 src/assets/utils/utils.ts create mode 100644 src/assets/utils/validate.ts create mode 100644 src/assets/utils/vue-utils/emit-utils.ts create mode 100644 src/assets/utils/vue-utils/index.ts create mode 100644 src/assets/utils/vue-utils/props-utils.ts create mode 100644 src/components/README.md create mode 100644 src/components/common-base/action-sheet/mobile-action-sheet.vue create mode 100644 src/components/common-base/action-sheet/types.ts create mode 100644 src/components/common-base/action-sheet/use-action-sheet.ts create mode 100644 src/components/common-base/count-down/count-down.vue create mode 100644 src/components/common-base/count-down/types.ts create mode 100644 src/components/common-base/count-down/use-count-down.ts create mode 100644 src/components/common-base/custom-teleport/custom-teleport.ts create mode 100644 src/components/common-base/dialog/mobile-dialog/imgs/icon-arrow-l.png create mode 100644 src/components/common-base/dialog/mobile-dialog/imgs/icon_close.png create mode 100644 src/components/common-base/dialog/mobile-dialog/mobile-dialog.vue create mode 100644 src/components/common-base/dialog/pc-dialog/pc-dialog.vue create mode 100644 src/components/common-base/dialog/pc-dialog/types.ts create mode 100644 src/components/common-base/dialog/use-dialog-tips.ts create mode 100644 src/components/common-base/form/form-area-picker/mobile-form-area-picker.vue create mode 100644 src/components/common-base/form/form-area-picker/pc-form-area-picker.vue create mode 100644 src/components/common-base/form/form-area-picker/use-form-area-picker.ts create mode 100644 src/components/common-base/form/form-checkbox/mobile-form-checkbox.vue create mode 100644 src/components/common-base/form/form-checkbox/pc-form-checkbox.vue create mode 100644 src/components/common-base/form/form-checkbox/use-form-checkbox.ts create mode 100644 src/components/common-base/form/form-image-verify-input/mobile-form-image-verify-input.vue create mode 100644 src/components/common-base/form/form-image-verify-input/pc-form-image-verify-input.vue create mode 100644 src/components/common-base/form/form-image-verify-input/type.ts create mode 100644 src/components/common-base/form/form-image-verify-input/use-image-verify-input.ts create mode 100644 src/components/common-base/form/form-input/hooks/use-form-input.ts create mode 100644 src/components/common-base/form/form-input/mobile-form-input.vue create mode 100644 src/components/common-base/form/form-input/pc-form-input.vue create mode 100644 src/components/common-base/form/form-input/types/form-input-types.ts create mode 100644 src/components/common-base/form/form-item.vue create mode 100644 src/components/common-base/form/form-number-input/mobile-form-number-input.vue create mode 100644 src/components/common-base/form/form-number-input/pc-form-number-input.vue create mode 100644 src/components/common-base/form/form-number-input/use-form-number-input.ts create mode 100644 src/components/common-base/form/form-phone-input/mobile-form-phone-input.vue create mode 100644 src/components/common-base/form/form-phone-input/pc-form-phone-input.vue create mode 100644 src/components/common-base/form/form-phone-input/use-form-phone-input.ts create mode 100644 src/components/common-base/form/form-protocol/mobile-form-protocol.vue create mode 100644 src/components/common-base/form/form-protocol/pc-form-protocol.vue create mode 100644 src/components/common-base/form/form-protocol/use-form-protocol.ts create mode 100644 src/components/common-base/form/form-select/mobile-form-select.vue create mode 100644 src/components/common-base/form/form-select/pc-form-select.vue create mode 100644 src/components/common-base/form/form-select/types/form-select-types.ts create mode 100644 src/components/common-base/form/form-select/use-form-select.ts create mode 100644 src/components/common-base/form/form-slide-verify/mobile-form-slide-verify.vue create mode 100644 src/components/common-base/form/form-slide-verify/pc-form-slide-verify.vue create mode 100644 src/components/common-base/form/form-slide-verify/use-slide-verify.ts create mode 100644 src/components/common-base/form/form-sms-verify-input/mobile-form-sms-verify-input.vue create mode 100644 src/components/common-base/form/form-sms-verify-input/pc-form-sms-verify-input.vue create mode 100644 src/components/common-base/form/form-sms-verify-input/use-sms-verify-input.ts create mode 100644 src/components/common-base/form/form-submit-button.vue create mode 100644 src/components/common-base/form/form-upload-image/form-upload-image.vue create mode 100644 src/components/common-base/form/form-upload-image/use-form-upload-image.ts create mode 100644 src/components/common-base/form/form-wrap.vue create mode 100644 src/components/common-base/form/hooks/use-form-common.ts create mode 100644 src/components/common-base/form/hooks/use-form-item.ts create mode 100644 src/components/common-base/form/hooks/use-form-submit-button.ts create mode 100644 src/components/common-base/form/hooks/use-form.ts create mode 100644 src/components/common-base/form/imgs/form-upload-add.png create mode 100644 src/components/common-base/form/imgs/form-upload-del.png create mode 100644 src/components/common-base/form/imgs/form-upload-failed.png create mode 100644 src/components/common-base/form/imgs/form-upload-loading.png create mode 100644 src/components/common-base/form/types/enums.ts create mode 100644 src/components/common-base/form/types/form-types.ts create mode 100644 src/components/common-base/form/utils/utils.ts create mode 100644 src/components/common-base/iframe-render/mobile-iframe-render.vue create mode 100644 src/components/common-base/iframe-render/pc-iframe-render.vue create mode 100644 src/components/common-base/iframe-render/use-iframe-render.ts create mode 100644 src/components/common-base/list-loading/imgs/loading.png create mode 100644 src/components/common-base/list-loading/list-loading.vue create mode 100644 src/components/common-base/normal-button/normal-button.vue create mode 100644 src/components/common-base/normal-button/types.ts create mode 100644 src/components/common-base/normal-button/use-normal-button.ts create mode 100644 src/components/common-base/phone-code/mobile-phone-code.vue create mode 100644 src/components/common-base/phone-code/pc-phone-code.vue create mode 100644 src/components/common-base/phone-code/phone-code-data.ts create mode 100644 src/components/common-base/phone-code/use-phone-code.ts create mode 100644 src/components/common-base/popup/mobile-popup.vue create mode 100644 src/components/common-base/popup/types.ts create mode 100644 src/components/common-base/popup/use-popup.ts create mode 100644 src/components/common-base/rich-text-render/mobile-rich-text-render.vue create mode 100644 src/components/common-base/rich-text-render/pc-rich-text-render.vue create mode 100644 src/components/common-base/rich-text-render/use-rich-text-render.ts create mode 100644 src/components/common-base/slider-bar/slider-bar.vue create mode 100644 src/components/common-base/slider-bar/use-slider-bar.ts create mode 100644 src/components/common-base/tabs/hooks/types.ts create mode 100644 src/components/common-base/tabs/hooks/use-simple-tabs.ts create mode 100644 src/components/common-base/tabs/hooks/use-tab-header.ts create mode 100644 src/components/common-base/tabs/hooks/use-tab-pane.ts create mode 100644 src/components/common-base/tabs/hooks/use-tabs.ts create mode 100644 src/components/common-base/tabs/mobile-menu-tabs/mobile-menu-tab-header.vue create mode 100644 src/components/common-base/tabs/mobile-menu-tabs/mobile-menu-tab-pane.vue create mode 100644 src/components/common-base/tabs/mobile-menu-tabs/mobile-menu-tabs.vue create mode 100644 src/components/common-base/tabs/pc-aside-tabs/pc-aside-tab-header.vue create mode 100644 src/components/common-base/tabs/pc-aside-tabs/pc-aside-tab-pane.vue create mode 100644 src/components/common-base/tabs/pc-aside-tabs/pc-aside-tabs.vue create mode 100644 src/components/common-base/tabs/pc-normal-tabs/pc-normal-tab-header.vue create mode 100644 src/components/common-base/tabs/pc-normal-tabs/pc-normal-tab-pane.vue create mode 100644 src/components/common-base/tabs/pc-normal-tabs/pc-normal-tabs.vue create mode 100644 src/components/common-base/tabs/portrait-normal-tabs/portrait-normal-tabs.vue create mode 100644 src/components/common-business/basic-info/imgs/low-latency-bg-mob.svg create mode 100644 src/components/common-business/basic-info/imgs/low-latency-bg.svg create mode 100644 src/components/common-business/basic-info/mobile-basic-info.vue create mode 100644 src/components/common-business/basic-info/pc-basic-info.vue create mode 100644 src/components/common-business/enroll/hooks/use-enroll-dialog.ts create mode 100644 src/components/common-business/enroll/hooks/use-enroll-enter.ts create mode 100644 src/components/common-business/enroll/hooks/use-enroll-form.ts create mode 100644 src/components/common-business/enroll/hooks/use-enroll-login.ts create mode 100644 src/components/common-business/enroll/mobile-enroll-form.vue create mode 100644 src/components/common-business/enroll/mobile-enroll-login.vue create mode 100644 src/components/common-business/enroll/mobile-enroll-popup.vue create mode 100644 src/components/common-business/enroll/mobile-enroll.vue create mode 100644 src/components/common-business/enroll/pc-enroll-dialog.vue create mode 100644 src/components/common-business/enroll/pc-enroll-form.vue create mode 100644 src/components/common-business/enroll/pc-enroll-login.vue create mode 100644 src/components/common-business/enroll/pc-enroll.vue create mode 100644 src/components/common-business/lang-switch/mobile-lang-switch.vue create mode 100644 src/components/common-business/lang-switch/pc-lang-switch.vue create mode 100644 src/components/common-business/live-booking/hooks/use-live-booking-fail.ts create mode 100644 src/components/common-business/live-booking/hooks/use-live-booking-form.ts create mode 100644 src/components/common-business/live-booking/hooks/use-live-booking-wx.ts create mode 100644 src/components/common-business/live-booking/imgs/apollo-live-qrcode.jpg create mode 100644 src/components/common-business/live-booking/mobile-live-booking-button.vue create mode 100644 src/components/common-business/live-booking/mobile-live-booking-form-popup.vue create mode 100644 src/components/common-business/live-booking/mobile-live-booking-subscribe-popup.vue create mode 100644 src/components/common-business/live-booking/pc-live-booking-button.vue create mode 100644 src/components/common-business/live-booking/pc-live-booking-form-dialog.vue create mode 100644 src/components/common-business/live-booking/types/index.ts create mode 100644 src/components/common-business/live-count-down/mobile-live-count-down.vue create mode 100644 src/components/common-business/live-count-down/pc-live-count-down.vue create mode 100644 src/components/common-business/live-count-down/use-live-count-down.ts create mode 100644 src/components/common-business/page-fixed-widgets/fixed-back-top.vue create mode 100644 src/components/common-business/page-fixed-widgets/fixed-web-share.vue create mode 100644 src/components/common-business/page-fixed-widgets/page-fixed-widgets.vue create mode 100644 src/components/common-business/page-footer/mobile-page-footer.vue create mode 100644 src/components/common-business/page-footer/pc-page-footer.vue create mode 100644 src/components/common-business/page-footer/use-page-footer.ts create mode 100644 src/components/common-business/player/player-audio-live-placeholder.vue create mode 100644 src/components/common-business/player/player-video-placeholder.vue create mode 100644 src/components/common-business/risk-confirm-letter/img/no-agree.png create mode 100644 src/components/common-business/risk-confirm-letter/mobile-risk-confirm-letter.vue create mode 100644 src/components/common-business/risk-confirm-letter/pc-risk-confirm-letter.vue create mode 100644 src/components/common-business/risk-confirm-letter/use-risk-confirm-letter.ts create mode 100644 src/components/common-business/status-tag/mini-status-tag.vue create mode 100644 src/components/common-business/status-tag/mobile-status-tag.vue create mode 100644 src/components/common-business/status-tag/pc-status-tag.vue create mode 100644 src/components/common-business/status-tag/use-status-tag.ts create mode 100644 src/components/common-business/web-share-panel/imgs/icon-share-wechat.png create mode 100644 src/components/common-business/web-share-panel/web-share-panel.vue create mode 100644 src/components/component-icons/mobile/icons/arrow-down/index.ts create mode 100644 src/components/component-icons/mobile/icons/arrow-left/index.ts create mode 100644 src/components/component-icons/mobile/icons/arrow-right/index.ts create mode 100644 src/components/component-icons/mobile/icons/arrow-up/index.ts create mode 100644 src/components/component-icons/mobile/icons/booking/index.ts create mode 100644 src/components/component-icons/mobile/icons/check-round-fill/index.ts create mode 100644 src/components/component-icons/mobile/icons/check/index.ts create mode 100644 src/components/component-icons/mobile/icons/close-round/index.ts create mode 100644 src/components/component-icons/mobile/icons/close/index.ts create mode 100644 src/components/component-icons/mobile/icons/danmu-switch/index.ts create mode 100644 src/components/component-icons/mobile/icons/delete/index.ts create mode 100644 src/components/component-icons/mobile/icons/emotion/index.ts create mode 100644 src/components/component-icons/mobile/icons/forbid/index.ts create mode 100644 src/components/component-icons/mobile/icons/heart/index.ts create mode 100644 src/components/component-icons/mobile/icons/keyboard/index.ts create mode 100644 src/components/component-icons/mobile/icons/like/index.ts create mode 100644 src/components/component-icons/mobile/icons/media/index.ts create mode 100644 src/components/component-icons/mobile/icons/message/index.ts create mode 100644 src/components/component-icons/mobile/icons/people/index.ts create mode 100644 src/components/component-icons/mobile/icons/play-round/index.ts create mode 100644 src/components/component-icons/mobile/icons/product/index.ts create mode 100644 src/components/component-icons/mobile/icons/smiling-face/index.ts create mode 100644 src/components/component-icons/mobile/icons/translate/index.ts create mode 100644 src/components/component-icons/mobile/icons/video-call/index.ts create mode 100644 src/components/component-icons/mobile/icons/voice-call/index.ts create mode 100644 src/components/component-icons/mobile/map.ts create mode 100644 src/components/component-icons/pc/icons/apply-video-call/index.ts create mode 100644 src/components/component-icons/pc/icons/arrow-down/index.ts create mode 100644 src/components/component-icons/pc/icons/arrow-left/index.ts create mode 100644 src/components/component-icons/pc/icons/arrow-right/index.ts create mode 100644 src/components/component-icons/pc/icons/arrow-up/index.ts create mode 100644 src/components/component-icons/pc/icons/booking/index.ts create mode 100644 src/components/component-icons/pc/icons/bulletin/index.ts create mode 100644 src/components/component-icons/pc/icons/caret-down/index.ts create mode 100644 src/components/component-icons/pc/icons/caret-left/index.ts create mode 100644 src/components/component-icons/pc/icons/caret-right/index.ts create mode 100644 src/components/component-icons/pc/icons/caret-up/index.ts create mode 100644 src/components/component-icons/pc/icons/check-round-fill/index.ts create mode 100644 src/components/component-icons/pc/icons/check/index.ts create mode 100644 src/components/component-icons/pc/icons/close-round/index.ts create mode 100644 src/components/component-icons/pc/icons/close/index.ts create mode 100644 src/components/component-icons/pc/icons/device-setting/index.ts create mode 100644 src/components/component-icons/pc/icons/emotion/index.ts create mode 100644 src/components/component-icons/pc/icons/feedback/index.ts create mode 100644 src/components/component-icons/pc/icons/forbid/index.ts create mode 100644 src/components/component-icons/pc/icons/hang-up/index.ts create mode 100644 src/components/component-icons/pc/icons/lang/index.ts create mode 100644 src/components/component-icons/pc/icons/media/index.ts create mode 100644 src/components/component-icons/pc/icons/people/index.ts create mode 100644 src/components/component-icons/pc/icons/pic/index.ts create mode 100644 src/components/component-icons/pc/icons/picture/index.ts create mode 100644 src/components/component-icons/pc/icons/play-round/index.ts create mode 100644 src/components/component-icons/pc/icons/set-nick/index.ts create mode 100644 src/components/component-icons/pc/icons/share/index.ts create mode 100644 src/components/component-icons/pc/icons/tips/index.ts create mode 100644 src/components/component-icons/pc/icons/translate/index.ts create mode 100644 src/components/component-icons/pc/icons/video-call/index.ts create mode 100644 src/components/component-icons/pc/icons/voice-call/index.ts create mode 100644 src/components/component-icons/pc/icons/warning-round-fill/index.ts create mode 100644 src/components/component-icons/pc/map.ts create mode 100644 src/components/page-splash-common/auth/auth-code/mobile-auth-code.vue create mode 100644 src/components/page-splash-common/auth/auth-code/pc-auth-code.vue create mode 100644 src/components/page-splash-common/auth/auth-code/use-auth-code.ts create mode 100644 src/components/page-splash-common/auth/auth-custom/auth-custom.vue create mode 100644 src/components/page-splash-common/auth/auth-custom/use-auth-custom.ts create mode 100644 src/components/page-splash-common/auth/auth-direct/use-auth-direct.ts create mode 100644 src/components/page-splash-common/auth/auth-external/auth-external.vue create mode 100644 src/components/page-splash-common/auth/auth-external/use-auth-external.ts create mode 100644 src/components/page-splash-common/auth/auth-info/hooks/use-auth-info-form.ts create mode 100644 src/components/page-splash-common/auth/auth-info/hooks/use-auth-info-login.ts create mode 100644 src/components/page-splash-common/auth/auth-info/hooks/use-auth-info-setting.ts create mode 100644 src/components/page-splash-common/auth/auth-info/mobile-auth-info-form.vue create mode 100644 src/components/page-splash-common/auth/auth-info/mobile-auth-info-login.vue create mode 100644 src/components/page-splash-common/auth/auth-info/mobile-auth-info.vue create mode 100644 src/components/page-splash-common/auth/auth-info/pc-auth-info-form.vue create mode 100644 src/components/page-splash-common/auth/auth-info/pc-auth-info-login.vue create mode 100644 src/components/page-splash-common/auth/auth-info/pc-auth-info.vue create mode 100644 src/components/page-splash-common/auth/auth-info/use-auth-info.ts create mode 100644 src/components/page-splash-common/auth/auth-none/auth-none.vue create mode 100644 src/components/page-splash-common/auth/auth-none/use-auth-none.ts create mode 100644 src/components/page-splash-common/auth/auth-pay/mobile-auth-pay.vue create mode 100644 src/components/page-splash-common/auth/auth-pay/pc-auth-pay.vue create mode 100644 src/components/page-splash-common/auth/auth-pay/use-auth-pay.ts create mode 100644 src/components/page-splash-common/auth/auth-phone/mobile-auth-phone.vue create mode 100644 src/components/page-splash-common/auth/auth-phone/pc-auth-phone.vue create mode 100644 src/components/page-splash-common/auth/auth-phone/use-auth-phone.ts create mode 100644 src/components/page-splash-common/auth/auth-work-weixin/mobile-auth-work-weixin.vue create mode 100644 src/components/page-splash-common/auth/auth-work-weixin/pc-auth-work-weixin.vue create mode 100644 src/components/page-splash-common/auth/auth-work-weixin/use-auth-work-weixin.ts create mode 100644 src/components/page-splash-common/auth/auth-work-weixin/utils.ts create mode 100644 src/components/page-splash-common/auth/hooks/use-auth-button.ts create mode 100644 src/components/page-splash-common/auth/hooks/use-auth-common.ts create mode 100644 src/components/page-splash-common/auth/hooks/use-auth-special.ts create mode 100644 src/components/page-splash-common/auth/imgs/icon-auth-pay-wechat-green.png create mode 100644 src/components/page-splash-common/auth/imgs/icon-auth-pay-wechat-logo.png create mode 100644 src/components/page-splash-common/auth/imgs/icon-auth-pay-wechat.png create mode 100644 src/components/page-splash-common/auth/mobile-auth-button.vue create mode 100644 src/components/page-splash-common/auth/mobile-auth.vue create mode 100644 src/components/page-splash-common/auth/pc-auth-button.vue create mode 100644 src/components/page-splash-common/auth/pc-auth.vue create mode 100644 src/components/page-splash-common/auth/types/auth-type.ts create mode 100644 src/components/page-splash-common/player-trial/_hooks/use-player-trial-event.ts create mode 100644 src/components/page-splash-common/player-trial/_hooks/use-player-trial-main.ts create mode 100644 src/components/page-splash-common/player-trial/mobile-player-trial/mobile-player-trial.vue create mode 100644 src/components/page-splash-common/player-trial/use-player-trial.ts create mode 100644 src/components/page-watch-common/ask/ask-msg-list/mobile-ask-msg-list.vue create mode 100644 src/components/page-watch-common/ask/ask-msg-list/pc-ask-msg-list.vue create mode 100644 src/components/page-watch-common/ask/ask-msg-list/use-ask-msg-list.ts create mode 100644 src/components/page-watch-common/ask/hooks/use-ask-send.ts create mode 100644 src/components/page-watch-common/ask/hooks/use-ask.ts create mode 100644 src/components/page-watch-common/ask/mobile-ask/mobile-ask.vue create mode 100644 src/components/page-watch-common/ask/pc-ask/pc-ask.vue create mode 100644 src/components/page-watch-common/barrage/pc-barrage.vue create mode 100644 src/components/page-watch-common/barrage/use-barrage.ts create mode 100644 src/components/page-watch-common/chapter/hooks/use-chapter.ts create mode 100644 src/components/page-watch-common/chapter/mobile-chapter.vue create mode 100644 src/components/page-watch-common/chapter/pc-chapter.vue create mode 100644 src/components/page-watch-common/chapter/portrait-chapter.vue create mode 100644 src/components/page-watch-common/chat/chat-close-tips/chat-close-tips.vue create mode 100644 src/components/page-watch-common/chat/chat-close-tips/imgs/closed_chat_black.png create mode 100644 src/components/page-watch-common/chat/chat-close-tips/imgs/closed_chat_icon.png create mode 100644 src/components/page-watch-common/chat/chat-connect-error/mobile-chat-connect-error-dialog.vue create mode 100644 src/components/page-watch-common/chat/chat-connect-error/pc-chat-connect-error-dialog.vue create mode 100644 src/components/page-watch-common/chat/chat-connect-error/use-chat-connect-error.ts create mode 100644 src/components/page-watch-common/chat/chat-emotional-feedback/imgs/icon-no.png create mode 100644 src/components/page-watch-common/chat/chat-emotional-feedback/imgs/icon-yes.png create mode 100644 src/components/page-watch-common/chat/chat-emotional-feedback/mobile-emotional-feedback.vue create mode 100644 src/components/page-watch-common/chat/chat-emotional-feedback/pc-emotional-feedback.vue create mode 100644 src/components/page-watch-common/chat/chat-emotional-feedback/use-emotional-feedback.ts create mode 100644 src/components/page-watch-common/chat/chat-error-tips/pc-chat-error-tips.vue create mode 100644 src/components/page-watch-common/chat/chat-error-tips/use-chat-error-tips.ts create mode 100644 src/components/page-watch-common/chat/chat-full-message/mobile-chat-full-message.vue create mode 100644 src/components/page-watch-common/chat/chat-full-message/pc-chat-full-message.vue create mode 100644 src/components/page-watch-common/chat/chat-full-message/portrait-chat-full-message.vue create mode 100644 src/components/page-watch-common/chat/chat-full-message/type.ts create mode 100644 src/components/page-watch-common/chat/chat-full-message/use-chat-full-message.ts create mode 100644 src/components/page-watch-common/chat/chat-input-controller/hooks/use-chat-input-controller.ts create mode 100644 src/components/page-watch-common/chat/chat-input-controller/imgs/icon-gift.png create mode 100644 src/components/page-watch-common/chat/chat-input-controller/imgs/icon-menu-animation-hide-mob.png create mode 100644 src/components/page-watch-common/chat/chat-input-controller/imgs/icon-menu-animation-show-mob.png create mode 100644 src/components/page-watch-common/chat/chat-input-controller/imgs/icon-menu-announcement-mob.png create mode 100644 src/components/page-watch-common/chat/chat-input-controller/imgs/icon-menu-feed-back.png create mode 100644 src/components/page-watch-common/chat/chat-input-controller/imgs/icon-menu-img-mob.png create mode 100644 src/components/page-watch-common/chat/chat-input-controller/imgs/icon-menu-lang-mob.png create mode 100644 src/components/page-watch-common/chat/chat-input-controller/imgs/icon-menu-msg.png create mode 100644 src/components/page-watch-common/chat/chat-input-controller/imgs/icon-menu-only-sp-mob.png create mode 100644 src/components/page-watch-common/chat/chat-input-controller/imgs/icon-menu-redenvelope-mob.png create mode 100644 src/components/page-watch-common/chat/chat-input-controller/imgs/icon-menu-score-redpack.png create mode 100644 src/components/page-watch-common/chat/chat-input-controller/imgs/icon-menu-set-nick.png create mode 100644 src/components/page-watch-common/chat/chat-input-controller/imgs/icon-menu-show-all-mob.png create mode 100644 src/components/page-watch-common/chat/chat-input-controller/imgs/icon-menu-withdraw-mob.png create mode 100644 src/components/page-watch-common/chat/chat-input-controller/imgs/icon-reward.png create mode 100644 src/components/page-watch-common/chat/chat-input-controller/mobile-chat-input-controller/mobile-chat-input-controller.vue create mode 100644 src/components/page-watch-common/chat/chat-input-controller/mobile-chat-input-controller/mobile-more-item.vue create mode 100644 src/components/page-watch-common/chat/chat-input-controller/mobile-chat-input-controller/mobile-more-panel.vue create mode 100644 src/components/page-watch-common/chat/chat-input-controller/pc-chat-input-controller/input-more-panel.vue create mode 100644 src/components/page-watch-common/chat/chat-input-controller/pc-chat-input-controller/pc-chat-input-controller.vue create mode 100644 src/components/page-watch-common/chat/chat-input-controller/portrait-chat-input-controller/portrait-chat-input-controller.vue create mode 100644 src/components/page-watch-common/chat/chat-like/_hooks/use-chat-like.ts create mode 100644 src/components/page-watch-common/chat/chat-like/_hooks/use-like-animation.ts create mode 100644 src/components/page-watch-common/chat/chat-like/imgs/icon-chat-like-portrait.png create mode 100644 src/components/page-watch-common/chat/chat-like/imgs/icon-like-crown.png create mode 100644 src/components/page-watch-common/chat/chat-like/imgs/icon-like-diamond.png create mode 100644 src/components/page-watch-common/chat/chat-like/imgs/icon-like-donuts.png create mode 100644 src/components/page-watch-common/chat/chat-like/imgs/icon-like-gift.png create mode 100644 src/components/page-watch-common/chat/chat-like/imgs/icon-like-heart.png create mode 100644 src/components/page-watch-common/chat/chat-like/imgs/icon-like-rocket.png create mode 100644 src/components/page-watch-common/chat/chat-like/imgs/icon-like-star.png create mode 100644 src/components/page-watch-common/chat/chat-like/imgs/icon-like-thumb.png create mode 100644 src/components/page-watch-common/chat/chat-like/imgs/icon-like-trophy.png create mode 100644 src/components/page-watch-common/chat/chat-like/imgs/icon-like-watermelon.png create mode 100644 src/components/page-watch-common/chat/chat-like/mobile-chat-like.vue create mode 100644 src/components/page-watch-common/chat/chat-like/pc-chat-like.vue create mode 100644 src/components/page-watch-common/chat/chat-like/portrait-chat-like.vue create mode 100644 src/components/page-watch-common/chat/chat-msg-list/hooks/chat-msg-handle-hook.ts create mode 100644 src/components/page-watch-common/chat/chat-msg-list/hooks/contract-history-hook.ts create mode 100644 src/components/page-watch-common/chat/chat-msg-list/hooks/hide-chat-msg-hook.ts create mode 100644 src/components/page-watch-common/chat/chat-msg-list/hooks/msg-queue-hook.ts create mode 100644 src/components/page-watch-common/chat/chat-msg-list/hooks/msg-render-hook.ts create mode 100644 src/components/page-watch-common/chat/chat-msg-list/hooks/request-history-hook.ts create mode 100644 src/components/page-watch-common/chat/chat-msg-list/hooks/request-history-session-hook.ts create mode 100644 src/components/page-watch-common/chat/chat-msg-list/hooks/send-msg-hook.ts create mode 100644 src/components/page-watch-common/chat/chat-msg-list/hooks/types.ts create mode 100644 src/components/page-watch-common/chat/chat-msg-list/imgs/loading.png create mode 100644 src/components/page-watch-common/chat/chat-msg-list/mobile-chat-msg-list.vue create mode 100644 src/components/page-watch-common/chat/chat-msg-list/msg-items/_hooks/chat-msg-computed-hook.ts create mode 100644 src/components/page-watch-common/chat/chat-msg-list/msg-items/_hooks/chat-msg-data-hook.ts create mode 100644 src/components/page-watch-common/chat/chat-msg-list/msg-items/_hooks/chat-msg-quote-hook.ts create mode 100644 src/components/page-watch-common/chat/chat-msg-list/msg-items/_hooks/chat-msg-time-hook.ts create mode 100644 src/components/page-watch-common/chat/chat-msg-list/msg-items/_hooks/chat-msg-user-hook.ts create mode 100644 src/components/page-watch-common/chat/chat-msg-list/msg-items/_imgs/img-msg-placeholder.png create mode 100644 src/components/page-watch-common/chat/chat-msg-list/msg-items/_msg-container/mobile-msg-container.vue create mode 100644 src/components/page-watch-common/chat/chat-msg-list/msg-items/_msg-container/pc-msg-container.vue create mode 100644 src/components/page-watch-common/chat/chat-msg-list/msg-items/_msg-container/portrait-msg-container.vue create mode 100644 src/components/page-watch-common/chat/chat-msg-list/msg-items/_msg-container/use-msg-container.ts create mode 100644 src/components/page-watch-common/chat/chat-msg-list/msg-items/_msg-container/use-msg-tips-control.ts create mode 100644 src/components/page-watch-common/chat/chat-msg-list/msg-items/_msg-quote-content/mobile-msg-quote-content.vue create mode 100644 src/components/page-watch-common/chat/chat-msg-list/msg-items/_msg-quote-content/pc-msg-quote-content.vue create mode 100644 src/components/page-watch-common/chat/chat-msg-list/msg-items/_msg-quote-content/portrait-msg-quote-content.vue create mode 100644 src/components/page-watch-common/chat/chat-msg-list/msg-items/_msg-quote-content/use-msg-quote-content.ts create mode 100644 src/components/page-watch-common/chat/chat-msg-list/msg-items/_msg-user-actor/msg-user-actor.vue create mode 100644 src/components/page-watch-common/chat/chat-msg-list/msg-items/_msg-user-actor/use-msg-user-actor.ts create mode 100644 src/components/page-watch-common/chat/chat-msg-list/msg-items/_msg-user-info/mobile-msg-user-info.vue create mode 100644 src/components/page-watch-common/chat/chat-msg-list/msg-items/_msg-user-info/pc-msg-user-info.vue create mode 100644 src/components/page-watch-common/chat/chat-msg-list/msg-items/_msg-user-info/portrait-msg-user-info.vue create mode 100644 src/components/page-watch-common/chat/chat-msg-list/msg-items/_msg-user-info/use-msg-user-info.ts create mode 100644 src/components/page-watch-common/chat/chat-msg-list/msg-items/_styles/vars.scss create mode 100644 src/components/page-watch-common/chat/chat-msg-list/msg-items/customer-msg/mobile-customer-msg.vue create mode 100644 src/components/page-watch-common/chat/chat-msg-list/msg-items/customer-msg/pc-customer-msg.vue create mode 100644 src/components/page-watch-common/chat/chat-msg-list/msg-items/customer-msg/portrait-customer-msg.vue create mode 100644 src/components/page-watch-common/chat/chat-msg-list/msg-items/customer-msg/use-customer-msg.ts create mode 100644 src/components/page-watch-common/chat/chat-msg-list/msg-items/emotion-msg/mobile-emotion-msg.vue create mode 100644 src/components/page-watch-common/chat/chat-msg-list/msg-items/emotion-msg/pc-emotion-msg.vue create mode 100644 src/components/page-watch-common/chat/chat-msg-list/msg-items/emotion-msg/portrait-emotion-msg.vue create mode 100644 src/components/page-watch-common/chat/chat-msg-list/msg-items/emotion-msg/use-emotion-msg.ts create mode 100644 src/components/page-watch-common/chat/chat-msg-list/msg-items/file-msg/imgs/icon_doc.svg create mode 100644 src/components/page-watch-common/chat/chat-msg-list/msg-items/file-msg/imgs/icon_pdf.svg create mode 100644 src/components/page-watch-common/chat/chat-msg-list/msg-items/file-msg/imgs/icon_ppt.svg create mode 100644 src/components/page-watch-common/chat/chat-msg-list/msg-items/file-msg/imgs/icon_xls.svg create mode 100644 src/components/page-watch-common/chat/chat-msg-list/msg-items/file-msg/mobile-file-msg.vue create mode 100644 src/components/page-watch-common/chat/chat-msg-list/msg-items/file-msg/pc-file-msg.vue create mode 100644 src/components/page-watch-common/chat/chat-msg-list/msg-items/file-msg/portrait-file-msg.vue create mode 100644 src/components/page-watch-common/chat/chat-msg-list/msg-items/file-msg/use-file-msg.ts create mode 100644 src/components/page-watch-common/chat/chat-msg-list/msg-items/image-msg/mobile-image-msg.vue create mode 100644 src/components/page-watch-common/chat/chat-msg-list/msg-items/image-msg/pc-image-msg.vue create mode 100644 src/components/page-watch-common/chat/chat-msg-list/msg-items/image-msg/portrait-image-msg.vue create mode 100644 src/components/page-watch-common/chat/chat-msg-list/msg-items/image-msg/use-image-msg.ts create mode 100644 src/components/page-watch-common/chat/chat-msg-list/msg-items/mobile-chat-msg-item.vue create mode 100644 src/components/page-watch-common/chat/chat-msg-list/msg-items/pc-chat-msg-item.vue create mode 100644 src/components/page-watch-common/chat/chat-msg-list/msg-items/portrait-chat-msg-item.vue create mode 100644 src/components/page-watch-common/chat/chat-msg-list/msg-items/redpaper-msg/imgs/icon_redpack.png create mode 100644 src/components/page-watch-common/chat/chat-msg-list/msg-items/redpaper-msg/mobile-redpaper-msg.vue create mode 100644 src/components/page-watch-common/chat/chat-msg-list/msg-items/redpaper-msg/pc-redpaper-msg.vue create mode 100644 src/components/page-watch-common/chat/chat-msg-list/msg-items/redpaper-msg/portrait-redpaper-msg.vue create mode 100644 src/components/page-watch-common/chat/chat-msg-list/msg-items/redpaper-msg/use-redpaper-msg.ts create mode 100644 src/components/page-watch-common/chat/chat-msg-list/msg-items/redpaper-receive-msg/imgs/redpaper-msg-ico.png create mode 100644 src/components/page-watch-common/chat/chat-msg-list/msg-items/redpaper-receive-msg/mobile-redpaper-receive-msg.vue create mode 100644 src/components/page-watch-common/chat/chat-msg-list/msg-items/redpaper-receive-msg/pc-redpaper-receive-msg.vue create mode 100644 src/components/page-watch-common/chat/chat-msg-list/msg-items/redpaper-receive-msg/portrait-redpaper-receive-msg.vue create mode 100644 src/components/page-watch-common/chat/chat-msg-list/msg-items/redpaper-receive-msg/use-redpaper-receive-msg.ts create mode 100644 src/components/page-watch-common/chat/chat-msg-list/msg-items/reward-msg/imgs/icon-redpaper.png create mode 100644 src/components/page-watch-common/chat/chat-msg-list/msg-items/reward-msg/mobile-reward-msg.vue create mode 100644 src/components/page-watch-common/chat/chat-msg-list/msg-items/reward-msg/pc-reward-msg.vue create mode 100644 src/components/page-watch-common/chat/chat-msg-list/msg-items/reward-msg/portrait-reward-msg.vue create mode 100644 src/components/page-watch-common/chat/chat-msg-list/msg-items/speak-msg/mobile-speak-msg.vue create mode 100644 src/components/page-watch-common/chat/chat-msg-list/msg-items/speak-msg/pc-speak-msg.vue create mode 100644 src/components/page-watch-common/chat/chat-msg-list/msg-items/speak-msg/portrait-speak-msg.vue create mode 100644 src/components/page-watch-common/chat/chat-msg-list/msg-items/speak-msg/use-speak-msg.ts create mode 100644 src/components/page-watch-common/chat/chat-msg-list/msg-items/system-msg/mobile-system-msg.vue create mode 100644 src/components/page-watch-common/chat/chat-msg-list/msg-items/system-msg/pc-system-msg.vue create mode 100644 src/components/page-watch-common/chat/chat-msg-list/msg-items/system-msg/portrait-system-msg.vue create mode 100644 src/components/page-watch-common/chat/chat-msg-list/msg-items/system-msg/use-system-msg.ts create mode 100644 src/components/page-watch-common/chat/chat-msg-list/msg-items/use-chat-msg-item.ts create mode 100644 src/components/page-watch-common/chat/chat-msg-list/pc-chat-msg-list.vue create mode 100644 src/components/page-watch-common/chat/chat-msg-list/portrait-chat-msg-list.vue create mode 100644 src/components/page-watch-common/chat/chat-msg-list/styles/index.scss create mode 100644 src/components/page-watch-common/chat/chat-msg-list/use-chat-msg-list.ts create mode 100644 src/components/page-watch-common/chat/chat-msg-quote/mobile-chat-msg-quote.vue create mode 100644 src/components/page-watch-common/chat/chat-msg-quote/pc-chat-msg-quote.vue create mode 100644 src/components/page-watch-common/chat/chat-msg-quote/use-chat-msg-quote.ts create mode 100644 src/components/page-watch-common/chat/chat-room-pendant/mobile-chat-room-pendant.vue create mode 100644 src/components/page-watch-common/chat/chat-room-pendant/pc-chat-room-pendant.vue create mode 100644 src/components/page-watch-common/chat/chat-room-pendant/portrait-chat-room-pendant.vue create mode 100644 src/components/page-watch-common/chat/chat-room/mobile-chat-room.vue create mode 100644 src/components/page-watch-common/chat/chat-room/pc-chat-room.vue create mode 100644 src/components/page-watch-common/chat/chat-set-nick/mobile-chat-set-nick.vue create mode 100644 src/components/page-watch-common/chat/chat-set-nick/pc-chat-set-nick.vue create mode 100644 src/components/page-watch-common/chat/chat-set-nick/portrait-chat-set-nick.vue create mode 100644 src/components/page-watch-common/chat/chat-set-nick/use-chat-set-nick.ts create mode 100644 src/components/page-watch-common/chat/chat-welcome/chat-welcome-tips.vue create mode 100644 src/components/page-watch-common/chat/chat-welcome/imgs/bg-portrait.png create mode 100644 src/components/page-watch-common/chat/chat-welcome/imgs/bg.png create mode 100644 src/components/page-watch-common/chat/chat-welcome/imgs/icon-start-left.png create mode 100644 src/components/page-watch-common/chat/chat-welcome/imgs/icon-start-right.png create mode 100644 src/components/page-watch-common/chat/chat-welcome/portrait-chat-welcome-tips.vue create mode 100644 src/components/page-watch-common/chat/chat-welcome/use-chat-welcome-tips.ts create mode 100644 src/components/page-watch-common/connect-mic/common/connect-mic-info.vue create mode 100644 src/components/page-watch-common/connect-mic/common/connect-mic-network.vue create mode 100644 src/components/page-watch-common/connect-mic/common/connect-microphone.vue create mode 100644 src/components/page-watch-common/connect-mic/hooks/use-connect-mic-item.ts create mode 100644 src/components/page-watch-common/connect-mic/hooks/use-connect-mic.ts create mode 100644 src/components/page-watch-common/connect-mic/imgs/btn-audio-close.png create mode 100644 src/components/page-watch-common/connect-mic/imgs/btn-audio-open.png create mode 100644 src/components/page-watch-common/connect-mic/imgs/btn-close.png create mode 100644 src/components/page-watch-common/connect-mic/imgs/btn-icon-default.png create mode 100644 src/components/page-watch-common/connect-mic/imgs/btn-icon-disabled.png create mode 100644 src/components/page-watch-common/connect-mic/imgs/btn-icon-hangup.png create mode 100644 src/components/page-watch-common/connect-mic/imgs/btn-set.png create mode 100644 src/components/page-watch-common/connect-mic/imgs/btn-video-close.png create mode 100644 src/components/page-watch-common/connect-mic/imgs/btn-video-open.png create mode 100644 src/components/page-watch-common/connect-mic/imgs/call-connecting.gif create mode 100644 src/components/page-watch-common/connect-mic/imgs/item-audio-close-hover.png create mode 100644 src/components/page-watch-common/connect-mic/imgs/item-audio-close.png create mode 100644 src/components/page-watch-common/connect-mic/imgs/item-audio-open-hover.png create mode 100644 src/components/page-watch-common/connect-mic/imgs/item-audio-open.png create mode 100644 src/components/page-watch-common/connect-mic/imgs/item-bottom-bar.png create mode 100644 src/components/page-watch-common/connect-mic/imgs/item-status-audio-closed.png create mode 100644 src/components/page-watch-common/connect-mic/imgs/item-status-audio-full.png create mode 100644 src/components/page-watch-common/connect-mic/imgs/item-status-audio-zero.png create mode 100644 src/components/page-watch-common/connect-mic/imgs/item-video-close-hover.png create mode 100644 src/components/page-watch-common/connect-mic/imgs/item-video-close.png create mode 100644 src/components/page-watch-common/connect-mic/imgs/item-video-open-hover.png create mode 100644 src/components/page-watch-common/connect-mic/imgs/item-video-open.png create mode 100644 src/components/page-watch-common/connect-mic/imgs/phone.png create mode 100644 src/components/page-watch-common/connect-mic/mobile-connect-mic/mobile-connect-mic-pendant.vue create mode 100644 src/components/page-watch-common/connect-mic/mobile-connect-mic/mobile-connect-mic-user-item.vue create mode 100644 src/components/page-watch-common/connect-mic/mobile-connect-mic/mobile-connect-mic-user-list.vue create mode 100644 src/components/page-watch-common/connect-mic/pc-connect-mic/pc-connect-mic-bottom.vue create mode 100644 src/components/page-watch-common/connect-mic/pc-connect-mic/pc-connect-mic-button.vue create mode 100644 src/components/page-watch-common/connect-mic/pc-connect-mic/pc-connect-mic-confirm.vue create mode 100644 src/components/page-watch-common/connect-mic/pc-connect-mic/pc-connect-mic-placeholder.vue create mode 100644 src/components/page-watch-common/connect-mic/pc-connect-mic/pc-connect-mic-user-item-control.vue create mode 100644 src/components/page-watch-common/connect-mic/pc-connect-mic/pc-connect-mic-user-item.vue create mode 100644 src/components/page-watch-common/connect-mic/pc-connect-mic/pc-connect-mic-user-list.vue create mode 100644 src/components/page-watch-common/connect-mic/pc-connect-mic/pc-connect-mic.vue create mode 100644 src/components/page-watch-common/count-down-layer/mobile-count-down-layer.vue create mode 100644 src/components/page-watch-common/count-down-layer/pc-count-down-layer.vue create mode 100644 src/components/page-watch-common/count-down-layer/portrait-count-down-layer.vue create mode 100644 src/components/page-watch-common/count-down-layer/use-count-down-layer.ts create mode 100644 src/components/page-watch-common/custom-tuwen-text-menu/mobile-custom-tuwen-text-menu.vue create mode 100644 src/components/page-watch-common/doc/_hooks/use-keydown-control.ts create mode 100644 src/components/page-watch-common/doc/doc-side-switch/mobile-doc-side-switch.vue create mode 100644 src/components/page-watch-common/doc/doc-side-switch/side.png create mode 100644 src/components/page-watch-common/doc/doc-switch/portrait-doc-switch.vue create mode 100644 src/components/page-watch-common/doc/imgs/icon-doc-hide.png create mode 100644 src/components/page-watch-common/doc/imgs/icon-doc-show.png create mode 100644 src/components/page-watch-common/doc/imgs/player-ppt.png create mode 100644 src/components/page-watch-common/doc/mobile-doc.vue create mode 100644 src/components/page-watch-common/doc/pc-doc-empty-placeholder.vue create mode 100644 src/components/page-watch-common/doc/pc-doc.vue create mode 100644 src/components/page-watch-common/doc/portrait-doc.vue create mode 100644 src/components/page-watch-common/doc/use-doc.ts create mode 100644 src/components/page-watch-common/donate/donate-animation/donate-animation-item.vue create mode 100644 src/components/page-watch-common/donate/donate-animation/donate-animation.vue create mode 100644 src/components/page-watch-common/donate/donate-animation/imgs/donate-float-tips-bg.png create mode 100644 src/components/page-watch-common/donate/donate-animation/imgs/donate-float-tips-redpaper.png create mode 100644 src/components/page-watch-common/donate/donate-animation/styles/var.scss create mode 100644 src/components/page-watch-common/donate/donate-animation/use-donate-animation.ts create mode 100644 src/components/page-watch-common/donate/donate-panel/hooks/types.ts create mode 100644 src/components/page-watch-common/donate/donate-panel/hooks/use-donate-cash.ts create mode 100644 src/components/page-watch-common/donate/donate-panel/hooks/use-donate-good-point.ts create mode 100644 src/components/page-watch-common/donate/donate-panel/hooks/use-donate-good.ts create mode 100644 src/components/page-watch-common/donate/donate-panel/hooks/use-donate-pay.ts create mode 100644 src/components/page-watch-common/donate/donate-panel/imgs/redpack-cash.png create mode 100644 src/components/page-watch-common/donate/donate-panel/mobile-donate-panel/mobile-donate-panel-cash.vue create mode 100644 src/components/page-watch-common/donate/donate-panel/mobile-donate-panel/mobile-donate-panel-good.vue create mode 100644 src/components/page-watch-common/donate/donate-panel/mobile-donate-panel/mobile-donate-panel.vue create mode 100644 src/components/page-watch-common/donate/donate-panel/pc-donate-panel/pc-donate-cash.vue create mode 100644 src/components/page-watch-common/donate/donate-panel/pc-donate-panel/pc-donate-panel.vue create mode 100644 src/components/page-watch-common/donate/donate-panel/pc-donate-panel/pc-donate-pay-qrcode.vue create mode 100644 src/components/page-watch-common/donate/donate-panel/portrait-donate-popup/portrait-donate-panel-cash.vue create mode 100644 src/components/page-watch-common/donate/donate-panel/portrait-donate-popup/portrait-donate-panel-good.vue create mode 100644 src/components/page-watch-common/donate/donate-panel/portrait-donate-popup/portrait-donate-popup.vue create mode 100644 src/components/page-watch-common/donate/donate-svga-animation/donate-svga-animation.vue create mode 100644 src/components/page-watch-common/donate/donate-svga-animation/use-donate-svga-animation.ts create mode 100644 src/components/page-watch-common/emotion-picker/hooks/use-emotion-face-picker.ts create mode 100644 src/components/page-watch-common/emotion-picker/hooks/use-emotion-image-picker.ts create mode 100644 src/components/page-watch-common/emotion-picker/hooks/use-emotion-picker.ts create mode 100644 src/components/page-watch-common/emotion-picker/mobile-emotion-picker/mobile-emotion-face-picker.vue create mode 100644 src/components/page-watch-common/emotion-picker/mobile-emotion-picker/mobile-emotion-image-picker.vue create mode 100644 src/components/page-watch-common/emotion-picker/mobile-emotion-picker/mobile-emotion-picker.vue create mode 100644 src/components/page-watch-common/emotion-picker/pc-emotion-picker/imgs/icon-face-emotion.png create mode 100644 src/components/page-watch-common/emotion-picker/pc-emotion-picker/imgs/icon-image-emotion.png create mode 100644 src/components/page-watch-common/emotion-picker/pc-emotion-picker/pc-emotion-face-picker.vue create mode 100644 src/components/page-watch-common/emotion-picker/pc-emotion-picker/pc-emotion-image-picker.vue create mode 100644 src/components/page-watch-common/emotion-picker/pc-emotion-picker/pc-emotion-picker.vue create mode 100644 src/components/page-watch-common/emotion-picker/portrait-emotion-picker/portrait-emotion-picker.vue create mode 100644 src/components/page-watch-common/follow/follow-btn/mobile-follow-btn.vue create mode 100644 src/components/page-watch-common/follow/follow-btn/portrait-follow-btn.vue create mode 100644 src/components/page-watch-common/follow/follow-layer/imgs/mobile-promotion-close-1.png create mode 100644 src/components/page-watch-common/follow/follow-layer/imgs/mobile-promotion-close.png create mode 100644 src/components/page-watch-common/follow/follow-layer/imgs/promotion-background.png create mode 100644 src/components/page-watch-common/follow/follow-layer/mobile-follow-layer.vue create mode 100644 src/components/page-watch-common/follow/follow-layer/portrait-follow-layer.vue create mode 100644 src/components/page-watch-common/follow/hooks/use-follow-btn.ts create mode 100644 src/components/page-watch-common/follow/hooks/use-follow-layer.ts create mode 100644 src/components/page-watch-common/follow/hooks/use-follow-setting.ts create mode 100644 src/components/page-watch-common/interactive-receive/_style/cover-mobile-interact-receive.scss create mode 100644 src/components/page-watch-common/interactive-receive/_style/cover-pc-interact-receive.scss create mode 100644 src/components/page-watch-common/interactive-receive/_style/cover-portrait-interact-receive.scss create mode 100644 src/components/page-watch-common/interactive-receive/_types/index.ts create mode 100644 src/components/page-watch-common/interactive-receive/announcement/announcement-top.vue create mode 100644 src/components/page-watch-common/interactive-receive/announcement/hooks/use-announcement-tips.ts create mode 100644 src/components/page-watch-common/interactive-receive/announcement/hooks/use-announcement.ts create mode 100644 src/components/page-watch-common/interactive-receive/announcement/imgs/icon-bulletin.png create mode 100644 src/components/page-watch-common/interactive-receive/announcement/mobile-announcement-popup.vue create mode 100644 src/components/page-watch-common/interactive-receive/announcement/pc-announcement-dialog.vue create mode 100644 src/components/page-watch-common/interactive-receive/announcement/portrait-annoucement-bar.vue create mode 100644 src/components/page-watch-common/interactive-receive/announcement/portrait-announcement-entrance.vue create mode 100644 src/components/page-watch-common/interactive-receive/announcement/types/announcement-types.ts create mode 100644 src/components/page-watch-common/interactive-receive/answer-card/hooks/imgs/icon-answer-card.png create mode 100644 src/components/page-watch-common/interactive-receive/answer-card/hooks/imgs/icon-answer-card_p.png create mode 100644 src/components/page-watch-common/interactive-receive/answer-card/hooks/use-answer-card-entrance.ts create mode 100644 src/components/page-watch-common/interactive-receive/answer-card/hooks/use-answer-card.ts create mode 100644 src/components/page-watch-common/interactive-receive/answer-card/hooks/use-quick-answer-card.ts create mode 100644 src/components/page-watch-common/interactive-receive/answer-card/mobile-answer-card-popup.vue create mode 100644 src/components/page-watch-common/interactive-receive/answer-card/mobile-quick-answer-card.vue create mode 100644 src/components/page-watch-common/interactive-receive/answer-card/pc-answer-card-dialog.vue create mode 100644 src/components/page-watch-common/interactive-receive/answer-card/pc-quick-answer-card-dialog.vue create mode 100644 src/components/page-watch-common/interactive-receive/answer-card/types/answer-card-types.ts create mode 100644 src/components/page-watch-common/interactive-receive/check-in/hooks/imgs/icon-check-in.png create mode 100644 src/components/page-watch-common/interactive-receive/check-in/hooks/imgs/icon-check-in_p.png create mode 100644 src/components/page-watch-common/interactive-receive/check-in/hooks/use-check-in-entrance.ts create mode 100644 src/components/page-watch-common/interactive-receive/check-in/hooks/use-check-in.ts create mode 100644 src/components/page-watch-common/interactive-receive/check-in/mobile-check-in-popup.vue create mode 100644 src/components/page-watch-common/interactive-receive/check-in/pc-check-in-dialog.vue create mode 100644 src/components/page-watch-common/interactive-receive/check-in/portrait-check-in-popup.vue create mode 100644 src/components/page-watch-common/interactive-receive/enroll-lottery/enroll-lottery-pendant.vue create mode 100644 src/components/page-watch-common/interactive-receive/enroll-lottery/hooks/use-enroll-lottery.ts create mode 100644 src/components/page-watch-common/interactive-receive/enroll-lottery/mobile-enroll-lottery-popup.vue create mode 100644 src/components/page-watch-common/interactive-receive/enroll-lottery/pc-enroll-lottery-dialog.vue create mode 100644 src/components/page-watch-common/interactive-receive/feed-back/hooks/use-feed-back.ts create mode 100644 src/components/page-watch-common/interactive-receive/feed-back/mobile-feed-back-popup.vue create mode 100644 src/components/page-watch-common/interactive-receive/feed-back/pc-feed-back-dialog.vue create mode 100644 src/components/page-watch-common/interactive-receive/interactive-entrance/imgs/icon-task.png create mode 100644 src/components/page-watch-common/interactive-receive/interactive-entrance/mobile-interactive-entrance.vue create mode 100644 src/components/page-watch-common/interactive-receive/interactive-entrance/pc-interactive-entrance.vue create mode 100644 src/components/page-watch-common/interactive-receive/interactive-entrance/portrait-interactive-entrance.vue create mode 100644 src/components/page-watch-common/interactive-receive/interactive-entrance/use-interactive-entrance.ts create mode 100644 src/components/page-watch-common/interactive-receive/load-iar-ui.ts create mode 100644 src/components/page-watch-common/interactive-receive/lottery/hooks/imgs/icon-lottery-record.png create mode 100644 src/components/page-watch-common/interactive-receive/lottery/hooks/imgs/icon-lottery-record_p.png create mode 100644 src/components/page-watch-common/interactive-receive/lottery/hooks/use-lottery-animation.ts create mode 100644 src/components/page-watch-common/interactive-receive/lottery/hooks/use-lottery-record-entrance.ts create mode 100644 src/components/page-watch-common/interactive-receive/lottery/hooks/use-lottery-record.ts create mode 100644 src/components/page-watch-common/interactive-receive/lottery/hooks/use-lottery-result.ts create mode 100644 src/components/page-watch-common/interactive-receive/lottery/mobile-lottery-animation.vue create mode 100644 src/components/page-watch-common/interactive-receive/lottery/mobile-lottery-record-popup.vue create mode 100644 src/components/page-watch-common/interactive-receive/lottery/mobile-lottery-result-popup.vue create mode 100644 src/components/page-watch-common/interactive-receive/lottery/pc-lottery-animation.vue create mode 100644 src/components/page-watch-common/interactive-receive/lottery/pc-lottery-record.vue create mode 100644 src/components/page-watch-common/interactive-receive/lottery/pc-lottery-result-dialog.vue create mode 100644 src/components/page-watch-common/interactive-receive/lottery/types/lottery-types.ts create mode 100644 src/components/page-watch-common/interactive-receive/mobile-iar-render.vue create mode 100644 src/components/page-watch-common/interactive-receive/pc-iar-render.vue create mode 100644 src/components/page-watch-common/interactive-receive/portrait-iar-render.vue create mode 100644 src/components/page-watch-common/interactive-receive/product/hooks/use-product-detail.ts create mode 100644 src/components/page-watch-common/interactive-receive/product/hooks/use-product-job-detail.ts create mode 100644 src/components/page-watch-common/interactive-receive/product/hooks/use-product-list.ts create mode 100644 src/components/page-watch-common/interactive-receive/product/hooks/use-product.ts create mode 100644 src/components/page-watch-common/interactive-receive/product/imgs/icon-job.png create mode 100644 src/components/page-watch-common/interactive-receive/product/imgs/icon-shop-car.svga create mode 100644 src/components/page-watch-common/interactive-receive/product/mobile-product-bubble.vue create mode 100644 src/components/page-watch-common/interactive-receive/product/mobile-product-job-detail-popup.vue create mode 100644 src/components/page-watch-common/interactive-receive/product/mobile-product-list.vue create mode 100644 src/components/page-watch-common/interactive-receive/product/pc-product-bubble.vue create mode 100644 src/components/page-watch-common/interactive-receive/product/pc-product-job-detail-dialog.vue create mode 100644 src/components/page-watch-common/interactive-receive/product/pc-product-list.vue create mode 100644 src/components/page-watch-common/interactive-receive/product/portrait-product-bubble.vue create mode 100644 src/components/page-watch-common/interactive-receive/product/portrait-product-job-detail-popup.vue create mode 100644 src/components/page-watch-common/interactive-receive/product/portrait-product-list-entrance.vue create mode 100644 src/components/page-watch-common/interactive-receive/product/portrait-product-list-popup.vue create mode 100644 src/components/page-watch-common/interactive-receive/product/types/product-types.ts create mode 100644 src/components/page-watch-common/interactive-receive/push-card/hooks/use-push-card.ts create mode 100644 src/components/page-watch-common/interactive-receive/push-card/mobile-push-card.vue create mode 100644 src/components/page-watch-common/interactive-receive/push-card/pc-push-card.vue create mode 100644 src/components/page-watch-common/interactive-receive/question-answer/hooks/use-question-answer.ts create mode 100644 src/components/page-watch-common/interactive-receive/question-answer/imgs/icon-btn-edit.png create mode 100644 src/components/page-watch-common/interactive-receive/question-answer/imgs/icon-close-black.png create mode 100644 src/components/page-watch-common/interactive-receive/question-answer/imgs/icon-emotion-black.png create mode 100644 src/components/page-watch-common/interactive-receive/question-answer/mobile-question-answer.vue create mode 100644 src/components/page-watch-common/interactive-receive/question-answer/pc-question-answer.vue create mode 100644 src/components/page-watch-common/interactive-receive/question-answer/portrait-question-answer.vue create mode 100644 src/components/page-watch-common/interactive-receive/questionnaire/hooks/imgs/icon-questionnaire.png create mode 100644 src/components/page-watch-common/interactive-receive/questionnaire/hooks/imgs/icon-questionnaire_p.png create mode 100644 src/components/page-watch-common/interactive-receive/questionnaire/hooks/use-questionnaire-entrance.ts create mode 100644 src/components/page-watch-common/interactive-receive/questionnaire/hooks/use-questionnaire.ts create mode 100644 src/components/page-watch-common/interactive-receive/questionnaire/mobile-questionnaire-popup.vue create mode 100644 src/components/page-watch-common/interactive-receive/questionnaire/pc-questionnaire-dialog.vue create mode 100644 src/components/page-watch-common/interactive-receive/questionnaire/types/questionnaire-type.ts create mode 100644 src/components/page-watch-common/interactive-receive/redpack-rain/hooks/use-redpack-rain.ts create mode 100644 src/components/page-watch-common/interactive-receive/redpack-rain/mobile-redpack-rain.vue create mode 100644 src/components/page-watch-common/interactive-receive/redpack-rain/pc-redpack-rain.vue create mode 100644 src/components/page-watch-common/interactive-receive/redpack-rain/types/redpack-rain-types.ts create mode 100644 src/components/page-watch-common/interactive-receive/redpack/hooks/use-redpack-pendant.ts create mode 100644 src/components/page-watch-common/interactive-receive/redpack/hooks/use-redpack.ts create mode 100644 src/components/page-watch-common/interactive-receive/redpack/mobile-redpack-popup.vue create mode 100644 src/components/page-watch-common/interactive-receive/redpack/pc-redpack-dialog.vue create mode 100644 src/components/page-watch-common/interactive-receive/redpack/redpack-pendant.vue create mode 100644 src/components/page-watch-common/interactive-receive/risk-evaluation/_hooks/use-risk-evaluation-main.ts create mode 100644 src/components/page-watch-common/interactive-receive/risk-evaluation/common/risk-evaluation-entrance.vue create mode 100644 src/components/page-watch-common/interactive-receive/risk-evaluation/common/risk-evaluation-icon.svg create mode 100644 src/components/page-watch-common/interactive-receive/risk-evaluation/common/risk-evaluation-redirect-dialog.vue create mode 100644 src/components/page-watch-common/interactive-receive/risk-evaluation/mobile-risk-evaluation.vue create mode 100644 src/components/page-watch-common/interactive-receive/risk-evaluation/pc-risk-evaluation.vue create mode 100644 src/components/page-watch-common/interactive-receive/risk-evaluation/types/risk-evaluation-types.ts create mode 100644 src/components/page-watch-common/interactive-receive/risk-evaluation/use-risk-evaluation-reset.ts create mode 100644 src/components/page-watch-common/interactive-receive/score/hooks/use-score-record.ts create mode 100644 src/components/page-watch-common/interactive-receive/score/mobile-score-record-popup.vue create mode 100644 src/components/page-watch-common/interactive-receive/topic-pk/hook/use-topic-pk.ts create mode 100644 src/components/page-watch-common/interactive-receive/topic-pk/mobile-topic-pk.vue create mode 100644 src/components/page-watch-common/interactive-receive/topic-pk/pc-topic-pk.vue create mode 100644 src/components/page-watch-common/interactive-receive/tuwen-live/hooks/use-tuwen-live.ts create mode 100644 src/components/page-watch-common/interactive-receive/tuwen-live/mobile-tuwen-live.vue create mode 100644 src/components/page-watch-common/interactive-receive/tuwen-live/pc-tuwen-live.vue create mode 100644 src/components/page-watch-common/interactive-receive/tuwen-live/types/tuwen-live-types.ts create mode 100644 src/components/page-watch-common/interactive-receive/use-iar-global-config.ts create mode 100644 src/components/page-watch-common/interactive-receive/vote/hooks/use-vote.ts create mode 100644 src/components/page-watch-common/interactive-receive/vote/mobile-vote-panel.vue create mode 100644 src/components/page-watch-common/interactive-receive/vote/pc-vote-panel.vue create mode 100644 src/components/page-watch-common/interactive-receive/welfare-lottery/hooks/use-welfare-lottery.ts create mode 100644 src/components/page-watch-common/interactive-receive/welfare-lottery/mobile-welfare-lottery.vue create mode 100644 src/components/page-watch-common/interactive-receive/welfare-lottery/pc-welfare-lottery.vue create mode 100644 src/components/page-watch-common/invite/hooks/use-invite-poster-entry.ts create mode 100644 src/components/page-watch-common/invite/hooks/use-invite-rank.ts create mode 100644 src/components/page-watch-common/invite/mobile-invite-poster-entry/imgs/invite-poster-entry.png create mode 100644 src/components/page-watch-common/invite/mobile-invite-poster-entry/mobile-invite-poster-entry-capsule.vue create mode 100644 src/components/page-watch-common/invite/mobile-invite-poster-entry/mobile-invite-poster-entry.vue create mode 100644 src/components/page-watch-common/invite/mobile-invite-rank/imgs/rank-1.png create mode 100644 src/components/page-watch-common/invite/mobile-invite-rank/imgs/rank-2.png create mode 100644 src/components/page-watch-common/invite/mobile-invite-rank/imgs/rank-3.png create mode 100644 src/components/page-watch-common/invite/mobile-invite-rank/mobile-invite-rank-item.vue create mode 100644 src/components/page-watch-common/invite/mobile-invite-rank/mobile-invite-rank.vue create mode 100644 src/components/page-watch-common/invite/portrait-invite-poster-entry/portrait-invite-poster-entry.vue create mode 100644 src/components/page-watch-common/invite/portrait-invite-rank/fonts/BarlowSemiCondensed-Medium.ttf create mode 100644 src/components/page-watch-common/invite/portrait-invite-rank/fonts/BarlowSemiCondensed-SemiBoldItalic.ttf create mode 100644 src/components/page-watch-common/invite/portrait-invite-rank/imgs/icon-champion.png create mode 100644 src/components/page-watch-common/invite/portrait-invite-rank/imgs/icon-default-avatar.png create mode 100644 src/components/page-watch-common/invite/portrait-invite-rank/imgs/icon-invite.png create mode 100644 src/components/page-watch-common/invite/portrait-invite-rank/imgs/icon-no-invite.png create mode 100644 src/components/page-watch-common/invite/portrait-invite-rank/imgs/icon-no.1.png create mode 100644 src/components/page-watch-common/invite/portrait-invite-rank/imgs/icon-no.2.png create mode 100644 src/components/page-watch-common/invite/portrait-invite-rank/imgs/icon-no.3.png create mode 100644 src/components/page-watch-common/invite/portrait-invite-rank/imgs/icon-second-place.png create mode 100644 src/components/page-watch-common/invite/portrait-invite-rank/imgs/icon-third-place.png create mode 100644 src/components/page-watch-common/invite/portrait-invite-rank/imgs/invite-bg.png create mode 100644 src/components/page-watch-common/invite/portrait-invite-rank/portrait-invite-rank-entrance.vue create mode 100644 src/components/page-watch-common/invite/portrait-invite-rank/portrait-invite-rank-top3-item.vue create mode 100644 src/components/page-watch-common/invite/portrait-invite-rank/portrait-invite-rank.vue create mode 100644 src/components/page-watch-common/live-start-tips/mobile-live-start-tips.vue create mode 100644 src/components/page-watch-common/live-start-tips/pc-live-start-tips.vue create mode 100644 src/components/page-watch-common/live-start-tips/use-live-start-tips.ts create mode 100644 src/components/page-watch-common/member-list/imgs/loading.png create mode 100644 src/components/page-watch-common/member-list/member-list-item.vue create mode 100644 src/components/page-watch-common/member-list/member-list.vue create mode 100644 src/components/page-watch-common/member-list/use-member-list.ts create mode 100644 src/components/page-watch-common/micro-activity/hooks/use-micro-activity.ts create mode 100644 src/components/page-watch-common/micro-activity/hooks/window-device-motion.ts create mode 100644 src/components/page-watch-common/micro-activity/mobile-micro-activity/mobile-micro-activity.vue create mode 100644 src/components/page-watch-common/micro-activity/pc-micro-activity/imgs/icon_close.png create mode 100644 src/components/page-watch-common/micro-activity/pc-micro-activity/pc-micro-activity.vue create mode 100644 src/components/page-watch-common/micro-activity/portrait-micro-activity/portrait-micro-activity-pendant.vue create mode 100644 src/components/page-watch-common/micro-activity/portrait-micro-activity/portrait-micro-activity.vue create mode 100644 src/components/page-watch-common/msg-input-wrap/auto-textarea/mobile-auto-textarea.vue create mode 100644 src/components/page-watch-common/msg-input-wrap/auto-textarea/pc-auto-textarea.vue create mode 100644 src/components/page-watch-common/msg-input-wrap/auto-textarea/use-auto-textarea.ts create mode 100644 src/components/page-watch-common/msg-input-wrap/mobile-msg-input-wrap/mobile-msg-input-wrap.vue create mode 100644 src/components/page-watch-common/msg-input-wrap/mobile-msg-input-wrap/var.scss create mode 100644 src/components/page-watch-common/msg-input-wrap/pc-msg-input-wrap/pc-msg-input-wrap.vue create mode 100644 src/components/page-watch-common/msg-input-wrap/pc-msg-input-wrap/pc-set-nick-placeholder.vue create mode 100644 src/components/page-watch-common/msg-input-wrap/portrait-msg-input-wrap/portrait-msg-input-wrap.vue create mode 100644 src/components/page-watch-common/msg-input-wrap/use-msg-input-controller.ts create mode 100644 src/components/page-watch-common/msg-input-wrap/use-msg-input-wrap.ts create mode 100644 src/components/page-watch-common/multi-meeting/imgs/playing.gif create mode 100644 src/components/page-watch-common/multi-meeting/mobile-multi-meeting.vue create mode 100644 src/components/page-watch-common/multi-meeting/pc-multi-meeting.vue create mode 100644 src/components/page-watch-common/multi-meeting/use-multi-meeting.ts create mode 100644 src/components/page-watch-common/page-advert/mobile-page-advert.vue create mode 100644 src/components/page-watch-common/page-advert/pc-page-advert.vue create mode 100644 src/components/page-watch-common/page-advert/use-page-advert.ts create mode 100644 src/components/page-watch-common/playback-list/hooks/use-playback-list.ts create mode 100644 src/components/page-watch-common/playback-list/mobile-playback-list/mobile-playback-list.vue create mode 100644 src/components/page-watch-common/playback-list/pc-playback-list/pc-playback-list.vue create mode 100644 src/components/page-watch-common/playback-list/portrait-playback-list/portrait-playback-list.vue create mode 100644 src/components/page-watch-common/player/common/audio-panel/imgs/audio-1.png create mode 100644 src/components/page-watch-common/player/common/audio-panel/imgs/audio-2.png create mode 100644 src/components/page-watch-common/player/common/audio-panel/imgs/audio-3.png create mode 100644 src/components/page-watch-common/player/common/audio-panel/portrait-audio-panel.vue create mode 100644 src/components/page-watch-common/player/common/none-live-panel/imgs/portrait-end-placeholder.png create mode 100644 src/components/page-watch-common/player/common/none-live-panel/portrait-none-live-panel.vue create mode 100644 src/components/page-watch-common/player/common/player-play-button/imgs/play-btn-2.png create mode 100644 src/components/page-watch-common/player/common/player-play-button/imgs/play-btn-prefix.gif create mode 100644 src/components/page-watch-common/player/common/player-play-button/imgs/play-btn.png create mode 100644 src/components/page-watch-common/player/common/player-play-button/player-play-button.vue create mode 100644 src/components/page-watch-common/player/common/player-play-button/use-player-play-button.ts create mode 100644 src/components/page-watch-common/player/hooks/use-player-action.ts create mode 100644 src/components/page-watch-common/player/hooks/use-player-control.ts create mode 100644 src/components/page-watch-common/player/hooks/use-player-event.ts create mode 100644 src/components/page-watch-common/player/hooks/use-player-keyboard.ts create mode 100644 src/components/page-watch-common/player/hooks/use-player-main.ts create mode 100644 src/components/page-watch-common/player/hooks/use-resolution-size.ts create mode 100644 src/components/page-watch-common/player/imgs/icon-pause.png create mode 100644 src/components/page-watch-common/player/imgs/icon-play.png create mode 100644 src/components/page-watch-common/player/imgs/play-btn.png create mode 100644 src/components/page-watch-common/player/imgs/player-audio-mode.png create mode 100644 src/components/page-watch-common/player/imgs/player-no-live.png create mode 100644 src/components/page-watch-common/player/imgs/player-stop.png create mode 100644 src/components/page-watch-common/player/player-control/mobile-player-control/imgs/low-latency-active.png create mode 100644 src/components/page-watch-common/player/player-control/mobile-player-control/imgs/mobile-player-ui-fullscreen-exit.png create mode 100644 src/components/page-watch-common/player/player-control/mobile-player-control/imgs/mobile-player-ui-fullscreen.png create mode 100644 src/components/page-watch-common/player/player-control/mobile-player-control/imgs/mobile-player-ui-pause.png create mode 100644 src/components/page-watch-common/player/player-control/mobile-player-control/imgs/mobile-player-ui-play.png create mode 100644 src/components/page-watch-common/player/player-control/mobile-player-control/imgs/mobile-player-ui-refresh.png create mode 100644 src/components/page-watch-common/player/player-control/mobile-player-control/imgs/mobile-player-ui-setting.png create mode 100644 src/components/page-watch-common/player/player-control/mobile-player-control/mobile-low-latency-switch.vue create mode 100644 src/components/page-watch-common/player/player-control/mobile-player-control/mobile-player-control-setting.vue create mode 100644 src/components/page-watch-common/player/player-control/mobile-player-control/mobile-player-control.vue create mode 100644 src/components/page-watch-common/player/player-control/pc-player-control/connect-mic-setting.vue create mode 100644 src/components/page-watch-common/player/player-control/pc-player-control/imgs/icon-call-audio-close-hover.png create mode 100644 src/components/page-watch-common/player/player-control/pc-player-control/imgs/icon-call-audio-close.png create mode 100644 src/components/page-watch-common/player/player-control/pc-player-control/imgs/icon-call-audio-hover.png create mode 100644 src/components/page-watch-common/player/player-control/pc-player-control/imgs/icon-call-audio.png create mode 100644 src/components/page-watch-common/player/player-control/pc-player-control/imgs/icon-call-video-close-hover.png create mode 100644 src/components/page-watch-common/player/player-control/pc-player-control/imgs/icon-call-video-close.png create mode 100644 src/components/page-watch-common/player/player-control/pc-player-control/imgs/icon-call-video-hover.png create mode 100644 src/components/page-watch-common/player/player-control/pc-player-control/imgs/icon-call-video.png create mode 100644 src/components/page-watch-common/player/player-control/pc-player-control/imgs/pc-player-ui-barrage-close.png create mode 100644 src/components/page-watch-common/player/player-control/pc-player-control/imgs/pc-player-ui-barrage-open.png create mode 100644 src/components/page-watch-common/player/player-control/pc-player-control/imgs/pc-player-ui-fullscreen-cancel-hover.png create mode 100644 src/components/page-watch-common/player/player-control/pc-player-control/imgs/pc-player-ui-fullscreen-cancel.png create mode 100644 src/components/page-watch-common/player/player-control/pc-player-control/imgs/pc-player-ui-fullscreen-hover.png create mode 100644 src/components/page-watch-common/player/player-control/pc-player-control/imgs/pc-player-ui-fullscreen.png create mode 100644 src/components/page-watch-common/player/player-control/pc-player-control/imgs/pc-player-ui-pause-hover.png create mode 100644 src/components/page-watch-common/player/player-control/pc-player-control/imgs/pc-player-ui-pause.png create mode 100644 src/components/page-watch-common/player/player-control/pc-player-control/imgs/pc-player-ui-play-hover.png create mode 100644 src/components/page-watch-common/player/player-control/pc-player-control/imgs/pc-player-ui-play.png create mode 100644 src/components/page-watch-common/player/player-control/pc-player-control/imgs/pc-player-ui-refresh-hover.png create mode 100644 src/components/page-watch-common/player/player-control/pc-player-control/imgs/pc-player-ui-refresh.png create mode 100644 src/components/page-watch-common/player/player-control/pc-player-control/imgs/pc-player-ui-setting-hover.png create mode 100644 src/components/page-watch-common/player/player-control/pc-player-control/imgs/pc-player-ui-setting.png create mode 100644 src/components/page-watch-common/player/player-control/pc-player-control/imgs/pc-player-ui-sound-hover.png create mode 100644 src/components/page-watch-common/player/player-control/pc-player-control/imgs/pc-player-ui-sound-mute-hover.png create mode 100644 src/components/page-watch-common/player/player-control/pc-player-control/imgs/pc-player-ui-sound-mute.png create mode 100644 src/components/page-watch-common/player/player-control/pc-player-control/imgs/pc-player-ui-sound.png create mode 100644 src/components/page-watch-common/player/player-control/pc-player-control/imgs/pc-player-ui-switch-screen-hover.png create mode 100644 src/components/page-watch-common/player/player-control/pc-player-control/imgs/pc-player-ui-switch-screen.png create mode 100644 src/components/page-watch-common/player/player-control/pc-player-control/player-control.vue create mode 100644 src/components/page-watch-common/player/player-control/pc-player-control/player-setting.vue create mode 100644 src/components/page-watch-common/player/player-control/pc-player-control/rate-setting.vue create mode 100644 src/components/page-watch-common/player/player-control/pc-player-control/volume-setting.vue create mode 100644 src/components/page-watch-common/player/player-control/portrait-player-control/_styles/control-select-options.scss create mode 100644 src/components/page-watch-common/player/player-control/portrait-player-control/portrait-latency-setting-popup.vue create mode 100644 src/components/page-watch-common/player/player-control/portrait-player-control/portrait-line-setting-popup.vue create mode 100644 src/components/page-watch-common/player/player-control/portrait-player-control/portrait-player-control-popup.vue create mode 100644 src/components/page-watch-common/player/player-control/portrait-player-control/portrait-player-progress.vue create mode 100644 src/components/page-watch-common/player/player-control/portrait-player-control/portrait-quality-setting-popup.vue create mode 100644 src/components/page-watch-common/player/player-control/portrait-player-control/portrait-rate-setting-popup.vue create mode 100644 src/components/page-watch-common/player/player-control/portrait-player-control/use-portrait-setting-popup.ts create mode 100644 src/components/page-watch-common/player/player-cover-img/mobile-player-cover-img.vue create mode 100644 src/components/page-watch-common/player/player-cover-img/pc-player-cover-img.vue create mode 100644 src/components/page-watch-common/player/player-cover-img/portrait-player-cover-img.vue create mode 100644 src/components/page-watch-common/player/player-logo/mobile-player-logo.vue create mode 100644 src/components/page-watch-common/player/player-logo/pc-player-logo.vue create mode 100644 src/components/page-watch-common/player/player-main/mobile-player-main/mobile-player-main.vue create mode 100644 src/components/page-watch-common/player/player-main/mobile-player-main/styles/cover-mobile-player.scss create mode 100644 src/components/page-watch-common/player/player-main/pc-player-main/pc-player-main.vue create mode 100644 src/components/page-watch-common/player/player-main/pc-player-main/styles/cover-pc-player.scss create mode 100644 src/components/page-watch-common/player/player-main/portrait-player-main/_hooks/use-portrait-click-player.ts create mode 100644 src/components/page-watch-common/player/player-main/portrait-player-main/_styles/cover-player-style.scss create mode 100644 src/components/page-watch-common/player/player-main/portrait-player-main/portrait-player-main.vue create mode 100644 src/components/page-watch-common/player/player-main/portrait-player-main/use-portrait-player-size.ts create mode 100644 src/components/page-watch-common/send-redpack/_hooks/use-send-redpack.ts create mode 100644 src/components/page-watch-common/send-redpack/mobile-send-redpack.vue create mode 100644 src/components/page-watch-common/withdraw/_hooks/use-receive-record.ts create mode 100644 src/components/page-watch-common/withdraw/_hooks/use-withdraw-apply.ts create mode 100644 src/components/page-watch-common/withdraw/_hooks/use-withdraw-detail.ts create mode 100644 src/components/page-watch-common/withdraw/mobile-withdraw-apply/mobile-withdraw-apply.vue create mode 100644 src/components/page-watch-common/withdraw/mobile-withdraw-detail/mobile-cash-receive-record.vue create mode 100644 src/components/page-watch-common/withdraw/mobile-withdraw-detail/mobile-redpack-receive-record.vue create mode 100644 src/components/page-watch-common/withdraw/mobile-withdraw-detail/mobile-withdraw-detail.vue create mode 100644 src/components/page-watch-common/withdraw/portrait-withdraw-apply/portrait-withdraw-apply.vue create mode 100644 src/components/page-watch-common/withdraw/portrait-withdraw-detail/portrait-cash-receive-record.vue create mode 100644 src/components/page-watch-common/withdraw/portrait-withdraw-detail/portrait-redpack-receive-record.vue create mode 100644 src/components/page-watch-common/withdraw/portrait-withdraw-detail/portrait-withdraw-detail.vue create mode 100644 src/components/page-watch-common/withdraw/use-withdraw.ts create mode 100644 src/core/bind-sdk-events/bind-channel-events.ts create mode 100644 src/core/bind-sdk-events/bind-chat-events.ts create mode 100644 src/core/bind-sdk-events/bind-connect-mic-events.ts create mode 100644 src/core/bind-sdk-events/bind-enroll-events.ts create mode 100644 src/core/bind-sdk-events/bind-finance-risk-evaluation-events.ts create mode 100644 src/core/bind-sdk-events/bind-interact-receive-events.ts create mode 100644 src/core/bind-sdk-events/bind-invite-events.ts create mode 100644 src/core/bind-sdk-events/bind-player-events.ts create mode 100644 src/core/bind-sdk-events/bind-user-events.ts create mode 100644 src/core/bind-sdk-events/bind-watch-core-events.ts create mode 100644 src/core/watch-sdk.ts create mode 100644 src/hooks/README.md create mode 100644 src/hooks/animation/use-svga-animation/index.ts create mode 100644 src/hooks/animation/use-svga-player/index.ts create mode 100644 src/hooks/behaviors/use-append-to/index.ts create mode 100644 src/hooks/behaviors/use-aside-drag/index.ts create mode 100644 src/hooks/behaviors/use-click-outside/index.ts create mode 100644 src/hooks/behaviors/use-panel-visible/index.ts create mode 100644 src/hooks/behaviors/use-scroll-arrow/index.ts create mode 100644 src/hooks/behaviors/use-scroll-list/index.ts create mode 100644 src/hooks/behaviors/use-simple-visible/index.ts create mode 100644 src/hooks/business/use-pv-track/index.ts create mode 100644 src/hooks/components/use-image-preview/index.ts create mode 100644 src/hooks/components/use-popper/_components/popper-arrow.vue create mode 100644 src/hooks/components/use-popper/_hooks/use-popper-arrow.ts create mode 100644 src/hooks/components/use-popper/_hooks/use-popper-core.ts create mode 100644 src/hooks/components/use-popper/_hooks/use-popper-interactive.ts create mode 100644 src/hooks/components/use-popper/_hooks/use-popper-visible.ts create mode 100644 src/hooks/components/use-popper/_popper-type.ts create mode 100644 src/hooks/components/use-popper/index.ts create mode 100644 src/hooks/components/use-popper/use-auto-topmost-show.ts create mode 100644 src/hooks/components/use-toast/_components/imgs/toast-error.svg create mode 100644 src/hooks/components/use-toast/_components/imgs/toast-help.svg create mode 100644 src/hooks/components/use-toast/_components/imgs/toast-info.svg create mode 100644 src/hooks/components/use-toast/_components/imgs/toast-loading.svg create mode 100644 src/hooks/components/use-toast/_components/imgs/toast-success.svg create mode 100644 src/hooks/components/use-toast/_components/imgs/toast-warning.svg create mode 100644 src/hooks/components/use-toast/_components/mobile-toast.vue create mode 100644 src/hooks/components/use-toast/_components/pc-toast.vue create mode 100644 src/hooks/components/use-toast/_hooks/use-toast-comp.ts create mode 100644 src/hooks/components/use-toast/_toast_type.ts create mode 100644 src/hooks/components/use-toast/index.ts create mode 100644 src/hooks/core/use-error-catch/index.ts create mode 100644 src/hooks/core/use-error-verify/index.ts create mode 100644 src/hooks/core/use-query-params/index.ts create mode 100644 src/hooks/core/use-screen-orient/index.ts create mode 100644 src/hooks/core/use-vue/index.ts create mode 100644 src/hooks/core/use-window-resize-listener/index.ts create mode 100644 src/hooks/platform/use-polyv-watch-domain/index.ts create mode 100644 src/hooks/platform/use-weixin/use-weixin-authorize.ts create mode 100644 src/hooks/platform/use-weixin/use-weixin-pay.ts create mode 100644 src/hooks/platform/use-weixin/use-weixin-sdk.ts create mode 100644 src/hooks/platform/use-weixin/use-weixin-share.ts create mode 100644 src/hooks/tools/use-count-down/index.ts create mode 100644 src/hooks/tools/use-format/index.ts create mode 100644 src/hooks/tools/use-fullscreen/index.ts create mode 100644 src/main.ts create mode 100644 src/pages/splash/mobile-splash/components/mobile-splash-btn.vue create mode 100644 src/pages/splash/mobile-splash/mobile-splash-full.vue create mode 100644 src/pages/splash/mobile-splash/mobile-splash.vue create mode 100644 src/pages/splash/pc-splash/pc-splash.vue create mode 100644 src/pages/watch/_hooks/use-watch-page/_hooks/use-connect-mic-setup.ts create mode 100644 src/pages/watch/_hooks/use-watch-page/_hooks/use-main-screen.ts create mode 100644 src/pages/watch/_hooks/use-watch-page/_hooks/use-online.ts create mode 100644 src/pages/watch/_hooks/use-watch-page/_hooks/use-polling.ts create mode 100644 src/pages/watch/_hooks/use-watch-page/_hooks/use-single-session-verify.ts create mode 100644 src/pages/watch/_hooks/use-watch-page/index.ts create mode 100644 src/pages/watch/_hooks/use-watch-tab/index.ts create mode 100644 src/pages/watch/mobile-watch/layout/mobile-watch-layout.vue create mode 100644 src/pages/watch/mobile-watch/layout/mobile-watch-menu.vue create mode 100644 src/pages/watch/mobile-watch/layout/mobile-watch-pendant.vue create mode 100644 src/pages/watch/mobile-watch/mobile-watch.vue create mode 100644 src/pages/watch/pc-watch/layout/pc-watch-aside-menu.vue create mode 100644 src/pages/watch/pc-watch/layout/pc-watch-bottom-menu.vue create mode 100644 src/pages/watch/pc-watch/layout/pc-watch-layout.vue create mode 100644 src/pages/watch/pc-watch/layout/pc-watch-sub-pack-up.vue create mode 100644 src/pages/watch/pc-watch/pc-watch.vue create mode 100644 src/pages/watch/portrait-watch/components/channel-description/images/icon-desc.png create mode 100644 src/pages/watch/portrait-watch/components/channel-description/portrait-channel-description.vue create mode 100644 src/pages/watch/portrait-watch/components/channel-info/images/icon-eye.png create mode 100644 src/pages/watch/portrait-watch/components/channel-info/portrait-channel-info-capsule.vue create mode 100644 src/pages/watch/portrait-watch/components/chat/chat-input-placeholder/images/icon-send-msg.png create mode 100644 src/pages/watch/portrait-watch/components/chat/chat-input-placeholder/portrait-chat-input-placeholder.vue create mode 100644 src/pages/watch/portrait-watch/components/menu/images/icon-audio.png create mode 100644 src/pages/watch/portrait-watch/components/menu/images/icon-donate-hide.png create mode 100644 src/pages/watch/portrait-watch/components/menu/images/icon-donate-show.png create mode 100644 src/pages/watch/portrait-watch/components/menu/images/icon-feed.png create mode 100644 src/pages/watch/portrait-watch/components/menu/images/icon-more.png create mode 100644 src/pages/watch/portrait-watch/components/menu/images/icon-only-host.png create mode 100644 src/pages/watch/portrait-watch/components/menu/images/icon-qa.png create mode 100644 src/pages/watch/portrait-watch/components/menu/images/icon-rate.png create mode 100644 src/pages/watch/portrait-watch/components/menu/images/icon-score-withdraw.png create mode 100644 src/pages/watch/portrait-watch/components/menu/images/icon-set-latency.png create mode 100644 src/pages/watch/portrait-watch/components/menu/images/icon-set-level.png create mode 100644 src/pages/watch/portrait-watch/components/menu/images/icon-set-line.png create mode 100644 src/pages/watch/portrait-watch/components/menu/images/icon-show-all.png create mode 100644 src/pages/watch/portrait-watch/components/menu/images/icon-video.png create mode 100644 src/pages/watch/portrait-watch/components/menu/images/icon-withdraw.png create mode 100644 src/pages/watch/portrait-watch/components/menu/portrait-menu-entrance.vue create mode 100644 src/pages/watch/portrait-watch/components/menu/portrait-menu-item.vue create mode 100644 src/pages/watch/portrait-watch/components/menu/portrait-menu-popup.vue create mode 100644 src/pages/watch/portrait-watch/components/playback-chapter-popup/portrait-playback-chapter-popup.vue create mode 100644 src/pages/watch/portrait-watch/layout/boundary-wrap.vue create mode 100644 src/pages/watch/portrait-watch/layout/carousel-main-screen.vue create mode 100644 src/pages/watch/portrait-watch/layout/carousel-page-container.vue create mode 100644 src/pages/watch/portrait-watch/layout/carousel-sub-screen.vue create mode 100644 src/pages/watch/portrait-watch/layout/images/icon-donate.png create mode 100644 src/pages/watch/portrait-watch/layout/images/icon-playback.png create mode 100644 src/pages/watch/portrait-watch/layout/images/portrait-bg.png create mode 100644 src/pages/watch/portrait-watch/layout/portrait-watch-layout-carousel.vue create mode 100644 src/pages/watch/portrait-watch/layout/portrait-watch-layout.vue create mode 100644 src/pages/watch/portrait-watch/portrait-watch.vue create mode 100644 src/plugins/alloy-finger/transform.js create mode 100644 src/plugins/async-validator/index.ts create mode 100644 src/plugins/external-lib-loaders/load-ali-awsc.ts create mode 100644 src/plugins/external-lib-loaders/load-svga-player.ts create mode 100644 src/plugins/external-lib-loaders/load-work-weixin-login.ts create mode 100644 src/plugins/external-lib-loaders/load-wx-sdk.ts create mode 100644 src/plugins/pinia/index.ts create mode 100644 src/plugins/pinia/util.ts create mode 100644 src/plugins/polyv-ui/admin-import.ts create mode 100644 src/plugins/polyv-ui/area-utils.ts create mode 100644 src/plugins/polyv-ui/cover-styles.scss create mode 100644 src/plugins/polyv-ui/mobile-import.ts create mode 100644 src/plugins/polyv-ui/pc-import.ts create mode 100644 src/plugins/polyv-ui/types.ts create mode 100644 src/plugins/vconsole/index.ts create mode 100644 src/skins/_common/basic-iar-style.scss create mode 100644 src/skins/_common/basic-mobile-style.scss create mode 100644 src/skins/_common/basic-pc-style.scss create mode 100644 src/skins/_common/basic-style.scss create mode 100644 src/skins/_common/functions.scss create mode 100644 src/skins/_common/mixins.scss create mode 100644 src/skins/_debug/skin-select.vue create mode 100644 src/skins/black/_black-mobile.scss create mode 100644 src/skins/black/_black-pc.scss create mode 100644 src/skins/black/config-common.scss create mode 100644 src/skins/black/config-iar.scss create mode 100644 src/skins/black/config-mobile.scss create mode 100644 src/skins/black/config-pc.scss create mode 100644 src/skins/black/config.scss create mode 100644 src/skins/black/imgs/pws-icon-more.png create mode 100644 src/skins/black/imgs/pws-pc-connect-mic.gif create mode 100644 src/skins/black/imgs/pws-pc-watch-bg.png create mode 100644 src/skins/black/imgs/pws-product-icon-recruitment.png create mode 100644 src/skins/black/imgs/pws-product-icon.png create mode 100644 src/skins/black/imgs/pws-product-shop-car.png create mode 100644 src/skins/black/imgs/pws-qa-entry.png create mode 100644 src/skins/black/imgs/pws-qa-no-data-icon.png create mode 100644 src/skins/black/imgs/pws-zan.png create mode 100644 src/skins/blue/_blue-mobile.scss create mode 100644 src/skins/blue/_blue-pc.scss create mode 100644 src/skins/blue/config-common.scss create mode 100644 src/skins/blue/config-iar.scss create mode 100644 src/skins/blue/config-mobile.scss create mode 100644 src/skins/blue/config-pc.scss create mode 100644 src/skins/blue/config.scss create mode 100644 src/skins/blue/imgs/pws-icon-more.png create mode 100644 src/skins/blue/imgs/pws-pc-connect-mic.gif create mode 100644 src/skins/blue/imgs/pws-pc-watch-bg.png create mode 100644 src/skins/blue/imgs/pws-product-icon-recruitment.png create mode 100644 src/skins/blue/imgs/pws-product-icon.png create mode 100644 src/skins/blue/imgs/pws-product-shop-car.png create mode 100644 src/skins/blue/imgs/pws-qa-entry.png create mode 100644 src/skins/blue/imgs/pws-qa-no-data-icon.png create mode 100644 src/skins/blue/imgs/pws-zan.png create mode 100644 src/skins/golden/_golden-mobile.scss create mode 100644 src/skins/golden/_golden-pc.scss create mode 100644 src/skins/golden/config-common.scss create mode 100644 src/skins/golden/config-iar.scss create mode 100644 src/skins/golden/config-mobile.scss create mode 100644 src/skins/golden/config-pc.scss create mode 100644 src/skins/golden/config.scss create mode 100644 src/skins/golden/imgs/pws-icon-more.png create mode 100644 src/skins/golden/imgs/pws-pc-connect-mic.gif create mode 100644 src/skins/golden/imgs/pws-pc-watch-bg.png create mode 100644 src/skins/golden/imgs/pws-product-icon-recruitment.png create mode 100644 src/skins/golden/imgs/pws-product-icon.png create mode 100644 src/skins/golden/imgs/pws-product-shop-car.png create mode 100644 src/skins/golden/imgs/pws-qa-entry.png create mode 100644 src/skins/golden/imgs/pws-qa-no-data-icon.png create mode 100644 src/skins/golden/imgs/pws-zan.png create mode 100644 src/skins/green/_green-mobile.scss create mode 100644 src/skins/green/_green-pc.scss create mode 100644 src/skins/green/config-common.scss create mode 100644 src/skins/green/config-iar.scss create mode 100644 src/skins/green/config-mobile.scss create mode 100644 src/skins/green/config-pc.scss create mode 100644 src/skins/green/config.scss create mode 100644 src/skins/green/imgs/pws-icon-more.png create mode 100644 src/skins/green/imgs/pws-pc-connect-mic.gif create mode 100644 src/skins/green/imgs/pws-pc-watch-bg.png create mode 100644 src/skins/green/imgs/pws-product-icon-recruitment.png create mode 100644 src/skins/green/imgs/pws-product-icon.png create mode 100644 src/skins/green/imgs/pws-product-shop-car.png create mode 100644 src/skins/green/imgs/pws-qa-entry.png create mode 100644 src/skins/green/imgs/pws-qa-no-data-icon.png create mode 100644 src/skins/green/imgs/pws-zan.png create mode 100644 src/skins/red/_red-mobile.scss create mode 100644 src/skins/red/_red-pc.scss create mode 100644 src/skins/red/config-common.scss create mode 100644 src/skins/red/config-iar.scss create mode 100644 src/skins/red/config-mobile.scss create mode 100644 src/skins/red/config-pc.scss create mode 100644 src/skins/red/config.scss create mode 100644 src/skins/red/imgs/pws-icon-more.png create mode 100644 src/skins/red/imgs/pws-pc-connect-mic.gif create mode 100644 src/skins/red/imgs/pws-pc-watch-bg.png create mode 100644 src/skins/red/imgs/pws-product-icon-recruitment.png create mode 100644 src/skins/red/imgs/pws-product-icon.png create mode 100644 src/skins/red/imgs/pws-product-shop-car.png create mode 100644 src/skins/red/imgs/pws-qa-entry.png create mode 100644 src/skins/red/imgs/pws-qa-no-data-icon.png create mode 100644 src/skins/red/imgs/pws-zan.png create mode 100644 src/skins/use-page-skin.ts create mode 100644 src/skins/white/_white-mobile.scss create mode 100644 src/skins/white/_white-pc.scss create mode 100644 src/skins/white/config-common.scss create mode 100644 src/skins/white/config-iar.scss create mode 100644 src/skins/white/config-mobile.scss create mode 100644 src/skins/white/config-pc.scss create mode 100644 src/skins/white/config.scss create mode 100644 src/skins/white/imgs/pws-icon-more.png create mode 100644 src/skins/white/imgs/pws-pc-connect-mic.gif create mode 100644 src/skins/white/imgs/pws-pc-watch-bg.png create mode 100644 src/skins/white/imgs/pws-product-icon-recruitment.png create mode 100644 src/skins/white/imgs/pws-product-icon.png create mode 100644 src/skins/white/imgs/pws-product-shop-car.png create mode 100644 src/skins/white/imgs/pws-qa-entry.png create mode 100644 src/skins/white/imgs/pws-qa-no-data-icon.png create mode 100644 src/skins/white/imgs/pws-zan.png create mode 100644 src/store/use-auth-store.ts create mode 100644 src/store/use-channel-info-store.ts create mode 100644 src/store/use-channel-menu-store.ts create mode 100644 src/store/use-channel-store.ts create mode 100644 src/store/use-chat-msg-store.ts create mode 100644 src/store/use-chat-store.ts create mode 100644 src/store/use-common-store.ts create mode 100644 src/store/use-connect-mic-store.ts create mode 100644 src/store/use-doc-store.ts create mode 100644 src/store/use-donate-store.ts create mode 100644 src/store/use-enroll-store.ts create mode 100644 src/store/use-finance-store.ts create mode 100644 src/store/use-interact-receive-store.ts create mode 100644 src/store/use-invite-store.ts create mode 100644 src/store/use-lang-store.ts create mode 100644 src/store/use-layout-store.ts create mode 100644 src/store/use-live-booking-store.ts create mode 100644 src/store/use-micro-activity-store.ts create mode 100644 src/store/use-page-store.ts create mode 100644 src/store/use-playback-store.ts create mode 100644 src/store/use-player-store.ts create mode 100644 src/store/use-portrait-layout-store.ts create mode 100644 src/store/use-score-store.ts create mode 100644 src/store/use-send-redpack-store.ts create mode 100644 src/store/use-share-store.ts create mode 100644 src/store/use-viewer-store.ts create mode 100644 src/store/use-watch-app-store.ts create mode 100644 src/store/use-webview-store.ts create mode 100644 src/store/use-weixin-store.ts create mode 100644 stylelint.config.js create mode 100644 tsconfig.build.json create mode 100644 tsconfig.json create mode 100644 types/ali-awsc.d.ts create mode 100644 types/alloyfinger.d.ts create mode 100644 types/emotion-sdk.d.ts create mode 100644 types/global.d.ts create mode 100644 types/polyv-ui-admin.d.ts create mode 100644 types/polyv-ui-mobile.d.ts create mode 100644 types/polyv-ui-pc.d.ts create mode 100644 types/shims-scss.d.ts create mode 100644 types/shims-vue.d.ts create mode 100644 types/vue-declare-extend.d.ts create mode 100644 types/wx-jssdk.d.ts create mode 100644 vue.config.js diff --git a/.browserslistrc b/.browserslistrc new file mode 100644 index 0000000..ebada7e --- /dev/null +++ b/.browserslistrc @@ -0,0 +1,3 @@ +> 1% +last 2 versions +ie >= 9 diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..8a04ad9 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,7 @@ +[*.{js,jsx,ts,tsx,vue,css,scss,md,html,json}] +indent_style = space +indent_size = 2 +trim_trailing_whitespace = true +insert_final_newline = true +end_of_line = lf +charset = utf-8 diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 0000000..f9102de --- /dev/null +++ b/.eslintignore @@ -0,0 +1,39 @@ +.DS_Store + +# Logs +logs +*.log* + +# Dependency directories +**/node_modules +**/jspm_packages + +# TypeScript cache +*.tsbuildinfo + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Output of 'npm pack' +*.tgz + +# Editor directories and files +.idea +#.vscode +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? + +# Polyv +*.html +*.min.js +**/.dist/ +**/dist/ +**/dist-saas/ +**/map-file/** +**/component-icons/** \ No newline at end of file diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 0000000..e24cca0 --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,31 @@ +/* eslint-env node */ + +module.exports = { + root: true, + extends: [ + './node_modules/@polyv/eslint-config/lib/for-vue', + './node_modules/@polyv/eslint-config/lib/for-ts', + 'plugin:prettier/recommended', + ], + parserOptions: { + parser: '@typescript-eslint/parser', + extraFileExtensions: ['.vue'], + }, + globals: { + PROJECT_BUILD_TIME: 'readonly', + PROJECT_VERSION: 'readonly', + }, + rules: { + 'no-console': 'off', + 'prettier/prettier': 'warn', + 'vue/v-on-event-hyphenation': [ + 'warn', + 'always', + { + ignore: ['statusChange'], + }, + ], + '@typescript-eslint/no-empty-function': 'off', + '@typescript-eslint/explicit-module-boundary-types': 'off', + }, +}; diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..d923235 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,9 @@ +*.js eol=lf +*.vue eol=lf +*.css eol=lf +*.scss eol=lf +*.json eol=lf +*.md eol=lf +*.jsx eol=lf +*.ts eol=lf +*.svg eol=lf diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..f15741c --- /dev/null +++ b/.gitignore @@ -0,0 +1,33 @@ +.DS_Store + +# Logs +logs +*.log* + +# Dependency directories +**/node_modules +**/jspm_packages + +# TypeScript cache +*.tsbuildinfo + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Output of 'npm pack' +*.tgz + +# Editor directories and files +.idea +#.vscode +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? + +dist +dist-static \ No newline at end of file diff --git a/.husky/pre-commit b/.husky/pre-commit new file mode 100644 index 0000000..3e1cef8 --- /dev/null +++ b/.husky/pre-commit @@ -0,0 +1,4 @@ +#!/usr/bin/env sh +. "$(dirname -- "$0")/_/husky.sh" + +npm run precommit diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 0000000..f9102de --- /dev/null +++ b/.prettierignore @@ -0,0 +1,39 @@ +.DS_Store + +# Logs +logs +*.log* + +# Dependency directories +**/node_modules +**/jspm_packages + +# TypeScript cache +*.tsbuildinfo + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Output of 'npm pack' +*.tgz + +# Editor directories and files +.idea +#.vscode +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? + +# Polyv +*.html +*.min.js +**/.dist/ +**/dist/ +**/dist-saas/ +**/map-file/** +**/component-icons/** \ No newline at end of file diff --git a/.prettierrc.js b/.prettierrc.js new file mode 100644 index 0000000..bdea8ad --- /dev/null +++ b/.prettierrc.js @@ -0,0 +1,12 @@ +/** @type {import("prettier").Config} */ +module.exports = { + printWidth: 100, + singleQuote: true, + bracketSameLine: false, + jsxBracketSameLine: true, + trailingComma: 'all', + semi: true, + arrowParens: 'avoid', + quoteProps: 'as-needed', + singleAttributePerLine: true, +}; diff --git a/.stylelintignore b/.stylelintignore new file mode 100644 index 0000000..9dc8639 --- /dev/null +++ b/.stylelintignore @@ -0,0 +1,40 @@ +.DS_Store + +# Logs +logs +*.log* + +# Dependency directories +**/node_modules +**/jspm_packages + +# TypeScript cache +*.tsbuildinfo + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Output of 'npm pack' +*.tgz + +# Editor directories and files +.idea +#.vscode +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? + +# Polyv +*.html +*.min.js +*.svg +**/.dist/ +**/dist/ +**/dist-saas/ +**/map-file/** +**/component-icons/** \ No newline at end of file diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 0000000..a8acdff --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,12 @@ +{ + "recommendations": [ + "esbenp.prettier-vscode", + "vue.volar", + "stylelint.vscode-stylelint", + "dbaeumer.vscode-eslint", + ], + "unwantedRecommendations": [ + "HookyQR.beautify", + "octref.vetur" + ] +} \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..48e32fe --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,38 @@ +{ + "prettier.enable": true, + "[html]": { + "editor.defaultFormatter": "esbenp.prettier-vscode" + }, + "[css]": { + "editor.defaultFormatter": "stylelint.vscode-stylelint" + }, + "[scss]": { + "editor.defaultFormatter": "stylelint.vscode-stylelint" + }, + "css.validate": false, + "less.validate": false, + "scss.validate": false, + "stylelint.enable": true, + "stylelint.validate": [ + "css", + "sass", + "scss", + "postcss", + "vue" + ], + "eslint.format.enable": true, + "[javascript]": { + "editor.defaultFormatter": "esbenp.prettier-vscode" + }, + "[typescript]": { + "editor.defaultFormatter": "esbenp.prettier-vscode" + }, + "[vue]": { + "editor.defaultFormatter": "esbenp.prettier-vscode", + }, + "editor.codeActionsOnSave": { + "source.fixAll.eslint": true, + "source.fixAll.stylelint": true + }, + "typescript.tsdk": "node_modules/typescript/lib" +} \ No newline at end of file diff --git a/README.md b/README.md index 7a4e7ea..1350770 100644 --- a/README.md +++ b/README.md @@ -1,37 +1,123 @@ # polyv-web-live-watch-sdk -#### 介绍 -保利威直播观看 SDK +## 介绍 -#### 软件架构 -软件架构说明 +- 为了让客户能够更便捷、友好地定制观看页,保利威推出了**POLYV 直播观看 SDK**,并将该 SDK 拆分成 UI 层和逻辑层 +- 该开源项目对应 **POLYV 直播观看 SDK** 的 UI 层,需要搭配逻辑层 `@polyv/live-watch-sdk` 一起使用 +## 项目说明 -#### 安装教程 +该开源项目基于 `vue-cli@4.x + vue@2.7 + typescript@4.x + pinia` 实现的单页面应用(SPA),除 `@polyv/live-watch-sdk` 外,还集成了其他**保利威 npm 库**和部分第三方开源工具库 -1. xxxx -2. xxxx -3. xxxx +| 保利威 npm 库 | 备注 | +| :----------------------------------------------------------------------------- | :---------------------------------------------------------------------------------------------- | +| [@polyv/emotion-sdk](https://www.npmjs.com/package/@polyv/emotion-sdk) | POLYV 表情 SDK | +| [@polyv/utils](https://www.npmjs.com/package/@polyv/utils) | POLYV 工具函数库 | +| [@polyv/web-view-bridge](https://www.npmjs.com/package/@polyv/web-view-bridge) | POLYV 前端 WebView 桥接器库 | +| [@polyv/eslint-config](https://www.npmjs.com/package/@polyv/eslint-config) | POLYV 前端工程 ESLint 通用配置 | +| @polyv/polyv-ui | POLYV 前端组件库【暂不对外提供文档】 | +| [@polyv/icons-vue](https://www.npmjs.com/package/@polyv/icons-vue) | POLYV 图标库工具 ,搭配 [@polyv/icons-cli](https://www.npmjs.com/package/@polyv/icons-cli) 使用 | -#### 使用说明 +## 项目运行 -1. xxxx -2. xxxx -3. xxxx +项目运行前请**注意** -#### 参与贡献 +- 确保 `node` 版本 `^14.15.4 || >=16.0.0"` +- 了解保利威基础业务概念,比如:频道号(channelId) +- 由于项目初始化会自动设置 `husky` 钩子,请确保项目根目录存在 `.git` 文件夹,或者通过这篇[文档](https://typicode.github.io/husky/#/?id=custom-directory)指定对应的 `.git` 文件夹位置。如果完全不使用 `git`,请删除 `package.json` 中的 `prepare` 脚本命令 -1. Fork 本仓库 -2. 新建 Feat_xxx 分支 -3. 提交代码 -4. 新建 Pull Request +在项目根目录使用 `npm` 来执行以下命令 +```sh +npm ci #安装依赖 +npm run dev #启动项目 +``` -#### 特技 +执行完成后,就可以在浏览器打开 `http://localhost:15020/index.html?channelId={channelId}` 来访问页面 -1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md -2. Gitee 官方博客 [blog.gitee.com](https://blog.gitee.com) -3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解 Gitee 上的优秀开源项目 -4. [GVP](https://gitee.com/gvp) 全称是 Gitee 最有价值开源项目,是综合评定出的优秀开源项目 -5. Gitee 官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help) -6. Gitee 封面人物是一档用来展示 Gitee 会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/) +## 构建部署 + +请先阅读以下两篇官方文档 + +- [vue-cli 构建目标](https://cli.vuejs.org/zh/guide/build-targets.html) +- [vue-cli 部署](https://cli.vuejs.org/zh/guide/deployment.html) + +如果需要自定义**生产环境构建文件的目录(outputDir)**,或者更改**部署应用包时的基本 URL(publicPath)**,请查看 `build/build-config.js` 和 `vue.config.js` 后自行修改 + +### 基本构建和部署 + +如果需要用 Web 应用服务器来部署,比如 `Nginx`,那可以执行以下命令 + +```sh +npm run build +``` + +- 执行完成后,源码会构建输出到 `dist` 文件夹中,将该文件夹上传到服务器后,还需要修改 `Nginx` 的配置来支持页面访问 +- 如果需要本地预览,请先执行[静态构建和部署](#静态构建和部署) + +### 静态构建和部署 + +如果只需要简单上传代码到服务器后就能完成部署,那可以执行以下命令 + +```sh +npm run build-static +``` + +- 执行完成后,源码会构建输出到 `dist-static` 文件夹中,只要将该文件夹上传到服务器即完成部署 +- 如果需要本地预览,可以启动一个 HTTP 服务器来访问 `dist-static` 文件夹,在本地预览生产环境构建最简单的方式就是使用一个 Node.js 静态文件服务器,例如 [serve](https://github.com/vercel/serve) + +## 目录说明 + +项目根目录说明 + +| 路径 | 说明 | +| :--------- | :------------------------------------------------------------------------------------------------------------------------------ | +| .husky/ | [husky](https://github.com/typicode/husky) 钩子文件夹 | +| build/ | 构建逻辑 | +| public/ | 静态资源文件夹,请参考这篇[文档](https://cli.vuejs.org/zh/guide/html-and-static-assets.html#public-%E6%96%87%E4%BB%B6%E5%A4%B9) | +| icon-svgs/ | svg 图标文件夹 | +| types/ | 全局的 typescript 类型 | +| src/ | 项目源码 | + +`src` 目录说明 + +| 路径 | 说明 | +| :------------- | :---------------------------------------------------------------------------------------------------------------------------------------- | +| src/core | 搭配 `@polyv/live-watch-sdk` 逻辑层 | +| src/app | 项目应用入口 | +| src/store | 项目数据存储层 | +| src/pages | 项目业务页面,分为`引导页(splash)`和`观看页(watch)`,页面内再通过 `桌面端(pc)`,`移动端横屏(mobile)`,`移动端竖屏(portrait)` 来区分使用场景 | +| src/components | [项目相关组件](src/components/README.md) | +| src/hooks | [项目公共 hooks](src/hooks/README.md) | +| src/assets | 项目静态资源 , `src/assets/lang` 存放多语言文本 | +| src/skins | 项目多皮肤 | +| src/plugins | 项目第三方插件 | + +关键文件指引 + +- 主入口 + - `src/main.ts` + - `src/app/watch-app.vue` +- 搭配 SDK 逻辑层 + - `src/core/watch-sdk.ts` + - `src/store/use-watch-app-store.ts` => `resetUpWatchCore` +- 主业务 + - 引导页进观看页 `src/app/layout/main-enter/_hooks/use-main-enter.ts` + - 观看条件处理 + - `src/components/page-splash-common/auth/hooks/use-auth-common.ts` + - `src/components/page-splash-common/auth/hooks/use-auth-special.ts` + - 互动 UI 加载 `src/components/page-watch-common/interactive-receive/load-iar-ui.ts` + +## 补充说明 + +### 构建图标组件 + +- 图标组件通过 `@polyv/icons-cli` 脚手架生成,执行 `npm run generate-icon` 会构建到 `src/components/component-icons` 中 +- 需要添加图标时,需要开发者根据移动端和桌面端对图标分类,添加 svg 文件到 `icon-svgs` 对应目录下 +- 在 `icon-svgs/demo/` 文件夹中可以查看到项目中的图标示例 +- `vue` 图标组件中统一使用脚手架生成的 `map.ts` 文件引入 + +### 关于项目校验 + +- 目前该项目支持在 `git commit` 时进行校验,如校验失败需自动修复,可以执行 `npm run lint-fix` 尝试修复,如不需要该校验流程,请移除 `package.json` 中的 `precommit` 命令 +- 由于项目中使用的 `fork-ts-checker-webpack-plugin` 不支持 `vue2.7` 对 `script setup` 区块的代码校验,建议在生产构建前,执行 `npm run check` 来检查一遍代码 diff --git a/babel.config.js b/babel.config.js new file mode 100644 index 0000000..49fcd13 --- /dev/null +++ b/babel.config.js @@ -0,0 +1,13 @@ +const isProd = process.env.NODE_ENV === 'production'; +const ProdPlugins = isProd + ? [['transform-remove-console', { exclude: ['error', 'warn', 'info'] }]] + : []; + +module.exports = { + presets: ['@vue/cli-plugin-babel/preset'], + plugins: [ + '@babel/plugin-proposal-nullish-coalescing-operator', + '@babel/plugin-proposal-optional-chaining', + ...ProdPlugins, + ], +}; diff --git a/build/build-config.js b/build/build-config.js new file mode 100644 index 0000000..b9dde23 --- /dev/null +++ b/build/build-config.js @@ -0,0 +1,106 @@ +/** + * @file 包信息 + */ + +/* eslint-env node */ +/* eslint-disable prefer-const */ +/* eslint-disable prettier/prettier */ + +const path = require('path'); +const pkgJSON = require('../package'); + +const { formatDate } = require('@polyv/utils/dist/cjs/date'); + +/** 当前是否为开发模式 */ +const devMode = (exports.devMode = process.env.NODE_ENV !== 'production'); + +let publicPath = process.env.VUE_APP_BUILD_MODE === 'STATIC' ? './' : '/'; + + + +exports.publicPath = publicPath; + +/** 项目构建时间 */ +const projectBuildTime = (exports.projectBuildTime = formatDate(new Date(), 'YYYY-MM-DD hh:mm:ss')); + +/** 项目版本号 */ +const projectVersion = (exports.projectVersion = pkgJSON.version); + +/** + * 获取观看页 SDK 环境变量 + * */ +function getWatchSdkEnv() { + if (devMode) return 'test'; + + return 'prod'; +} + +/** 注入的全局常量 */ +exports.defineConstants = { + /** 项目构建时间 */ + PROJECT_BUILD_TIME: JSON.stringify(projectBuildTime), + /** 项目版本号 */ + PROJECT_VERSION: JSON.stringify(projectVersion), + /** 观看页 SDK 加载的环境 */ + WATCH_SDK_ENV: JSON.stringify(getWatchSdkEnv()), +}; + +/** ts 配置文件 */ +exports.tsConfigFile = path.resolve( + __dirname, + devMode ? '../tsconfig.json' : '../tsconfig.build.json', +); + +/** 需要编译的包名 */ +exports.transpileDependencies = [ + 'pinia', + '@vue/devtools-api', + '@just4', + 'lodash-es', + 'js-base64', + '@polyv/utils', +]; + +/** 需要配置到 sass-resources-loader 的资源 */ +exports.sassResources = ['assets/styles/variables.scss', 'assets/styles/mixins.scss']; + +let devAlias = {}; + + +/** 别名 */ +exports.alias = { + '@': path.resolve(__dirname, '../src'), + '@utils-ts': path.resolve(__dirname, '../node_modules/@polyv/utils/dist/es'), + ...devAlias, +}; + +/** 开发服务器端口号 */ +exports.devServerPort = 15020; + +/** 开发服务器局域网ip */ +exports.devServerHost = '0.0.0.0'; + +/** 本地开发服务器代理 */ +exports.devServerProxy = { + '^/(v2|error-verify)': { + target: 'http://live.polyv.cn', // 测试环境 + changeOrigin: true, + onProxyReq(proxyReq) { + proxyReq.setHeader('host', 'live.polyv.cn'); + }, + onProxyRes(proxyRes) { + const cookies = proxyRes.headers['set-cookie']; + if (cookies) { + const newCookie = cookies.map(item => { + return item.replace(/;\s*Domain=([^;])+/, ''); + }); + proxyRes.headers['set-cookie'] = newCookie; + } + }, + }, +}; + +/** 生产环境构建文件的目录 */ +let outputDir = process.env.VUE_APP_BUILD_MODE === 'STATIC' ? 'dist-static' : 'dist'; + +exports.outputDir = outputDir; diff --git a/build/core-import.js b/build/core-import.js new file mode 100644 index 0000000..1da842f --- /dev/null +++ b/build/core-import.js @@ -0,0 +1,7 @@ +const path = require('path'); + +const nodeModulesPath = path.resolve(__dirname, '../node_modules'); + +exports.coreJsImports = ['weak-map'].map(item => { + return path.join(nodeModulesPath, `core-js/es/${item}`); +}); diff --git a/build/tag-config.js b/build/tag-config.js new file mode 100644 index 0000000..d7245b5 --- /dev/null +++ b/build/tag-config.js @@ -0,0 +1,23 @@ +/** + * @file 自动引入 js 的配置 + */ +const { devMode } = require('./build-config'); + +/** externals 列表 */ +exports.externalConfigs = devMode + ? {} + : { + vue: 'Vue', + }; + +/** 引入配置 */ +exports.tagConfigs = devMode + ? [] + : [ + /** Vue */ + { + path: 'https://s4.videocc.net/library/vue/2.x/vue-2.7.14.runtime.min.js', + usePublicPath: false, + append: false, + }, + ]; diff --git a/build/webpack.vue.config.js b/build/webpack.vue.config.js new file mode 100644 index 0000000..fc2a3ec --- /dev/null +++ b/build/webpack.vue.config.js @@ -0,0 +1,132 @@ +const path = require('path'); +const webpack = require('webpack'); + +const HtmlWebpackTagsPlugin = require('html-webpack-tags-plugin'); +const ESLintPlugin = require('eslint-webpack-plugin'); +const StyleLintPlugin = require('stylelint-webpack-plugin'); +const ForkTsCheckerWebpackPlugin = require('fork-ts-checker-webpack-plugin'); +const SpeedMeasurePlugin = require('speed-measure-webpack-plugin'); +const { BundleAnalyzerPlugin } = require('webpack-bundle-analyzer'); + +const { sassResources, alias, tsConfigFile, defineConstants, devMode } = require('./build-config'); +const { externalConfigs, tagConfigs } = require('./tag-config'); + +const srcPath = path.resolve(__dirname, '../src'); +const include = [srcPath]; + +/** @type {import('webpack').Configuration} */ +let webpackVueConfig = { + resolve: { + extensions: ['.js', '.mjs', '.ts', '.vue', '.css', '.scss'], + alias: { + ...alias, + }, + }, + + module: { + rules: [ + { + test: /\.ts$/, + use: [ + 'babel-loader', + { + loader: 'ts-loader', + options: { + transpileOnly: true, + appendTsSuffixTo: ['\\.vue$'], + configFile: tsConfigFile, + }, + }, + ], + exclude: /node_modules/, + include: srcPath, + }, + { + test: /\.ico$/i, + use: [ + { + loader: 'url-loader', + options: { + limit: false, + }, + }, + ], + exclude: /node_modules/, + }, + { + test: /\.scss$/, + include, + use: [ + { + loader: 'sass-resources-loader', + options: { + resources: sassResources.map(function (item) { + return path.join(srcPath, item); + }), + }, + }, + ], + }, + { + test: /\.svga$/i, + use: [ + { + loader: 'url-loader', + options: { + limit: false, + }, + }, + ], + exclude: /node_modules/, + }, + ], + }, + + externals: externalConfigs, + + plugins: [ + new webpack.DefinePlugin(defineConstants), + + new HtmlWebpackTagsPlugin({ + tags: tagConfigs, + }), + + new ForkTsCheckerWebpackPlugin({ + typescript: { + configFile: tsConfigFile, + extensions: { + vue: { + enabled: true, + compiler: require.resolve('vue/compiler-sfc'), + }, + diagnosticOptions: { + semantic: true, + }, + }, + }, + }), + + new ESLintPlugin({ + lintDirtyModulesOnly: devMode, + extensions: ['js', 'ts', 'vue'], + }), + + new StyleLintPlugin({ + lintDirtyModulesOnly: devMode, + files: ['**/*.{vue,css,scss}'], + }), + ], +}; + +if (process.env.USE_ANALYZER) { + webpackVueConfig.plugins.push( + new BundleAnalyzerPlugin({ + analyzerMode: 'static', + }), + ); + + const smp = new SpeedMeasurePlugin(); + webpackVueConfig = smp.wrap(webpackVueConfig); +} + +module.exports = webpackVueConfig; diff --git a/icon-svgs/demo/icon-demo-mobile.html b/icon-svgs/demo/icon-demo-mobile.html new file mode 100644 index 0000000..a8be220 --- /dev/null +++ b/icon-svgs/demo/icon-demo-mobile.html @@ -0,0 +1,1977 @@ + + + + + + 移动端观看页图标 + + + +
+ + + + + + + + diff --git a/icon-svgs/demo/icon-demo-pc.html b/icon-svgs/demo/icon-demo-pc.html new file mode 100644 index 0000000..45256e2 --- /dev/null +++ b/icon-svgs/demo/icon-demo-pc.html @@ -0,0 +1,2074 @@ + + + + + + PC 端观看页图标 + + + +
+ + + + + + + + diff --git a/icon-svgs/mobile/arrow-down.svg b/icon-svgs/mobile/arrow-down.svg new file mode 100644 index 0000000..c852970 --- /dev/null +++ b/icon-svgs/mobile/arrow-down.svg @@ -0,0 +1,6 @@ + + 箭头-下 + + diff --git a/icon-svgs/mobile/arrow-left.svg b/icon-svgs/mobile/arrow-left.svg new file mode 100644 index 0000000..8a35721 --- /dev/null +++ b/icon-svgs/mobile/arrow-left.svg @@ -0,0 +1,4 @@ + + 箭头-左 + + diff --git a/icon-svgs/mobile/arrow-right.svg b/icon-svgs/mobile/arrow-right.svg new file mode 100644 index 0000000..0e1a290 --- /dev/null +++ b/icon-svgs/mobile/arrow-right.svg @@ -0,0 +1,4 @@ + + 箭头-右 + + diff --git a/icon-svgs/mobile/arrow-up.svg b/icon-svgs/mobile/arrow-up.svg new file mode 100644 index 0000000..7dada65 --- /dev/null +++ b/icon-svgs/mobile/arrow-up.svg @@ -0,0 +1,4 @@ + + 箭头-上 + + diff --git a/icon-svgs/mobile/booking.svg b/icon-svgs/mobile/booking.svg new file mode 100644 index 0000000..0eb4658 --- /dev/null +++ b/icon-svgs/mobile/booking.svg @@ -0,0 +1,7 @@ + + 预约 + + diff --git a/icon-svgs/mobile/check-round-fill.svg b/icon-svgs/mobile/check-round-fill.svg new file mode 100644 index 0000000..589d4d1 --- /dev/null +++ b/icon-svgs/mobile/check-round-fill.svg @@ -0,0 +1,6 @@ + + 选中-圆-填充 + + diff --git a/icon-svgs/mobile/check.svg b/icon-svgs/mobile/check.svg new file mode 100644 index 0000000..7197a38 --- /dev/null +++ b/icon-svgs/mobile/check.svg @@ -0,0 +1,6 @@ + + 选中 + + diff --git a/icon-svgs/mobile/close-round.svg b/icon-svgs/mobile/close-round.svg new file mode 100644 index 0000000..2e16e50 --- /dev/null +++ b/icon-svgs/mobile/close-round.svg @@ -0,0 +1,11 @@ + + 关闭-圆 + + + diff --git a/icon-svgs/mobile/close.svg b/icon-svgs/mobile/close.svg new file mode 100644 index 0000000..fe77ea4 --- /dev/null +++ b/icon-svgs/mobile/close.svg @@ -0,0 +1,6 @@ + + 关闭 + + diff --git a/icon-svgs/mobile/danmu-switch.svg b/icon-svgs/mobile/danmu-switch.svg new file mode 100644 index 0000000..a432034 --- /dev/null +++ b/icon-svgs/mobile/danmu-switch.svg @@ -0,0 +1,7 @@ + + 弹幕开关 + + + diff --git a/icon-svgs/mobile/delete.svg b/icon-svgs/mobile/delete.svg new file mode 100644 index 0000000..a67c7c2 --- /dev/null +++ b/icon-svgs/mobile/delete.svg @@ -0,0 +1,6 @@ + + 删除 + + diff --git a/icon-svgs/mobile/emotion.svg b/icon-svgs/mobile/emotion.svg new file mode 100644 index 0000000..c89c8c6 --- /dev/null +++ b/icon-svgs/mobile/emotion.svg @@ -0,0 +1,6 @@ + + 表情 + + diff --git a/icon-svgs/mobile/forbid.svg b/icon-svgs/mobile/forbid.svg new file mode 100644 index 0000000..3a49ee2 --- /dev/null +++ b/icon-svgs/mobile/forbid.svg @@ -0,0 +1,6 @@ + + 禁止 + + diff --git a/icon-svgs/mobile/heart.svg b/icon-svgs/mobile/heart.svg new file mode 100644 index 0000000..78252f9 --- /dev/null +++ b/icon-svgs/mobile/heart.svg @@ -0,0 +1,6 @@ + + + + diff --git a/icon-svgs/mobile/keyboard.svg b/icon-svgs/mobile/keyboard.svg new file mode 100644 index 0000000..81412e2 --- /dev/null +++ b/icon-svgs/mobile/keyboard.svg @@ -0,0 +1,6 @@ + + 键盘 + + diff --git a/icon-svgs/mobile/like.svg b/icon-svgs/mobile/like.svg new file mode 100644 index 0000000..b9a4d75 --- /dev/null +++ b/icon-svgs/mobile/like.svg @@ -0,0 +1,6 @@ + + 点赞 + + diff --git a/icon-svgs/mobile/media.svg b/icon-svgs/mobile/media.svg new file mode 100644 index 0000000..3b90cb4 --- /dev/null +++ b/icon-svgs/mobile/media.svg @@ -0,0 +1,6 @@ + + icon播放中 + + diff --git a/icon-svgs/mobile/message.svg b/icon-svgs/mobile/message.svg new file mode 100644 index 0000000..1d1b796 --- /dev/null +++ b/icon-svgs/mobile/message.svg @@ -0,0 +1,6 @@ + + 消息 + + diff --git a/icon-svgs/mobile/people.svg b/icon-svgs/mobile/people.svg new file mode 100644 index 0000000..56377c6 --- /dev/null +++ b/icon-svgs/mobile/people.svg @@ -0,0 +1,6 @@ + + 人物 + + diff --git a/icon-svgs/mobile/play-round.svg b/icon-svgs/mobile/play-round.svg new file mode 100644 index 0000000..e8b2a69 --- /dev/null +++ b/icon-svgs/mobile/play-round.svg @@ -0,0 +1,6 @@ + + icon播放 + + diff --git a/icon-svgs/mobile/product.svg b/icon-svgs/mobile/product.svg new file mode 100644 index 0000000..8dacd5b --- /dev/null +++ b/icon-svgs/mobile/product.svg @@ -0,0 +1,6 @@ + + 商品 + + diff --git a/icon-svgs/mobile/smiling-face.svg b/icon-svgs/mobile/smiling-face.svg new file mode 100644 index 0000000..6bbd07d --- /dev/null +++ b/icon-svgs/mobile/smiling-face.svg @@ -0,0 +1,6 @@ + + 笑脸 + + diff --git a/icon-svgs/mobile/translate.svg b/icon-svgs/mobile/translate.svg new file mode 100644 index 0000000..f7b4ee0 --- /dev/null +++ b/icon-svgs/mobile/translate.svg @@ -0,0 +1,6 @@ + + 翻译 + + diff --git a/icon-svgs/mobile/video-call.svg b/icon-svgs/mobile/video-call.svg new file mode 100644 index 0000000..bf658e7 --- /dev/null +++ b/icon-svgs/mobile/video-call.svg @@ -0,0 +1,6 @@ + + 视频连线 + + diff --git a/icon-svgs/mobile/voice-call.svg b/icon-svgs/mobile/voice-call.svg new file mode 100644 index 0000000..3b67ee7 --- /dev/null +++ b/icon-svgs/mobile/voice-call.svg @@ -0,0 +1,6 @@ + + 语音连线 + + diff --git a/icon-svgs/pc/apply-video-call.svg b/icon-svgs/pc/apply-video-call.svg new file mode 100644 index 0000000..ba58d74 --- /dev/null +++ b/icon-svgs/pc/apply-video-call.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/icon-svgs/pc/arrow-down.svg b/icon-svgs/pc/arrow-down.svg new file mode 100644 index 0000000..c852970 --- /dev/null +++ b/icon-svgs/pc/arrow-down.svg @@ -0,0 +1,6 @@ + + 箭头-下 + + diff --git a/icon-svgs/pc/arrow-left.svg b/icon-svgs/pc/arrow-left.svg new file mode 100644 index 0000000..8a35721 --- /dev/null +++ b/icon-svgs/pc/arrow-left.svg @@ -0,0 +1,4 @@ + + 箭头-左 + + diff --git a/icon-svgs/pc/arrow-right.svg b/icon-svgs/pc/arrow-right.svg new file mode 100644 index 0000000..0e1a290 --- /dev/null +++ b/icon-svgs/pc/arrow-right.svg @@ -0,0 +1,4 @@ + + 箭头-右 + + diff --git a/icon-svgs/pc/arrow-up.svg b/icon-svgs/pc/arrow-up.svg new file mode 100644 index 0000000..7dada65 --- /dev/null +++ b/icon-svgs/pc/arrow-up.svg @@ -0,0 +1,4 @@ + + 箭头-上 + + diff --git a/icon-svgs/pc/booking.svg b/icon-svgs/pc/booking.svg new file mode 100644 index 0000000..0eb4658 --- /dev/null +++ b/icon-svgs/pc/booking.svg @@ -0,0 +1,7 @@ + + 预约 + + diff --git a/icon-svgs/pc/bulletin.svg b/icon-svgs/pc/bulletin.svg new file mode 100644 index 0000000..3f2037b --- /dev/null +++ b/icon-svgs/pc/bulletin.svg @@ -0,0 +1,6 @@ + + 公告 + + diff --git a/icon-svgs/pc/caret-down.svg b/icon-svgs/pc/caret-down.svg new file mode 100644 index 0000000..5cb35d4 --- /dev/null +++ b/icon-svgs/pc/caret-down.svg @@ -0,0 +1,6 @@ + + 箭头-下-三角形 + + diff --git a/icon-svgs/pc/caret-left.svg b/icon-svgs/pc/caret-left.svg new file mode 100644 index 0000000..4b369ac --- /dev/null +++ b/icon-svgs/pc/caret-left.svg @@ -0,0 +1,6 @@ + + 箭头-左-三角形 + + diff --git a/icon-svgs/pc/caret-right.svg b/icon-svgs/pc/caret-right.svg new file mode 100644 index 0000000..91074d2 --- /dev/null +++ b/icon-svgs/pc/caret-right.svg @@ -0,0 +1,6 @@ + + 箭头-右-三角形 + + diff --git a/icon-svgs/pc/caret-up.svg b/icon-svgs/pc/caret-up.svg new file mode 100644 index 0000000..a370cdb --- /dev/null +++ b/icon-svgs/pc/caret-up.svg @@ -0,0 +1,6 @@ + + 箭头-上-三角形 + + diff --git a/icon-svgs/pc/check-round-fill.svg b/icon-svgs/pc/check-round-fill.svg new file mode 100644 index 0000000..d679216 --- /dev/null +++ b/icon-svgs/pc/check-round-fill.svg @@ -0,0 +1,6 @@ + + 选择-圆-填充 + + diff --git a/icon-svgs/pc/check.svg b/icon-svgs/pc/check.svg new file mode 100644 index 0000000..7197a38 --- /dev/null +++ b/icon-svgs/pc/check.svg @@ -0,0 +1,6 @@ + + 选中 + + diff --git a/icon-svgs/pc/close-round.svg b/icon-svgs/pc/close-round.svg new file mode 100644 index 0000000..2e16e50 --- /dev/null +++ b/icon-svgs/pc/close-round.svg @@ -0,0 +1,11 @@ + + 关闭-圆 + + + diff --git a/icon-svgs/pc/close.svg b/icon-svgs/pc/close.svg new file mode 100644 index 0000000..f8830b2 --- /dev/null +++ b/icon-svgs/pc/close.svg @@ -0,0 +1,6 @@ + + 关闭 + + diff --git a/icon-svgs/pc/device-setting.svg b/icon-svgs/pc/device-setting.svg new file mode 100644 index 0000000..237ccb5 --- /dev/null +++ b/icon-svgs/pc/device-setting.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/icon-svgs/pc/emotion.svg b/icon-svgs/pc/emotion.svg new file mode 100644 index 0000000..cb76447 --- /dev/null +++ b/icon-svgs/pc/emotion.svg @@ -0,0 +1,6 @@ + + 表情 + + diff --git a/icon-svgs/pc/feedback.svg b/icon-svgs/pc/feedback.svg new file mode 100644 index 0000000..7bc9f1d --- /dev/null +++ b/icon-svgs/pc/feedback.svg @@ -0,0 +1,6 @@ + + 投诉反馈 + + diff --git a/icon-svgs/pc/forbid.svg b/icon-svgs/pc/forbid.svg new file mode 100644 index 0000000..3a49ee2 --- /dev/null +++ b/icon-svgs/pc/forbid.svg @@ -0,0 +1,6 @@ + + 禁止 + + diff --git a/icon-svgs/pc/hang-up.svg b/icon-svgs/pc/hang-up.svg new file mode 100644 index 0000000..c2478c0 --- /dev/null +++ b/icon-svgs/pc/hang-up.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/icon-svgs/pc/lang.svg b/icon-svgs/pc/lang.svg new file mode 100644 index 0000000..cc59683 --- /dev/null +++ b/icon-svgs/pc/lang.svg @@ -0,0 +1,6 @@ + + 语言 + + diff --git a/icon-svgs/pc/media.svg b/icon-svgs/pc/media.svg new file mode 100644 index 0000000..2ef85a1 --- /dev/null +++ b/icon-svgs/pc/media.svg @@ -0,0 +1,6 @@ + + 多媒体 + + diff --git a/icon-svgs/pc/people.svg b/icon-svgs/pc/people.svg new file mode 100644 index 0000000..529da82 --- /dev/null +++ b/icon-svgs/pc/people.svg @@ -0,0 +1,6 @@ + + 人物 + + diff --git a/icon-svgs/pc/pic.svg b/icon-svgs/pc/pic.svg new file mode 100644 index 0000000..3fc7e9e --- /dev/null +++ b/icon-svgs/pc/pic.svg @@ -0,0 +1,6 @@ + + 图片 + + diff --git a/icon-svgs/pc/picture.svg b/icon-svgs/pc/picture.svg new file mode 100644 index 0000000..3fc7e9e --- /dev/null +++ b/icon-svgs/pc/picture.svg @@ -0,0 +1,6 @@ + + 图片 + + diff --git a/icon-svgs/pc/play-round.svg b/icon-svgs/pc/play-round.svg new file mode 100644 index 0000000..81cebea --- /dev/null +++ b/icon-svgs/pc/play-round.svg @@ -0,0 +1,6 @@ + + 播放-圆 + + diff --git a/icon-svgs/pc/set-nick.svg b/icon-svgs/pc/set-nick.svg new file mode 100644 index 0000000..b33edfc --- /dev/null +++ b/icon-svgs/pc/set-nick.svg @@ -0,0 +1,6 @@ + + 设置昵称 + + diff --git a/icon-svgs/pc/share.svg b/icon-svgs/pc/share.svg new file mode 100644 index 0000000..29fbcae --- /dev/null +++ b/icon-svgs/pc/share.svg @@ -0,0 +1,6 @@ + + 分享 + + diff --git a/icon-svgs/pc/tips.svg b/icon-svgs/pc/tips.svg new file mode 100644 index 0000000..bab8c4a --- /dev/null +++ b/icon-svgs/pc/tips.svg @@ -0,0 +1,6 @@ + + 提示 + + diff --git a/icon-svgs/pc/translate.svg b/icon-svgs/pc/translate.svg new file mode 100644 index 0000000..f7b4ee0 --- /dev/null +++ b/icon-svgs/pc/translate.svg @@ -0,0 +1,6 @@ + + 翻译 + + diff --git a/icon-svgs/pc/video-call.svg b/icon-svgs/pc/video-call.svg new file mode 100644 index 0000000..bf658e7 --- /dev/null +++ b/icon-svgs/pc/video-call.svg @@ -0,0 +1,6 @@ + + 视频连线 + + diff --git a/icon-svgs/pc/voice-call.svg b/icon-svgs/pc/voice-call.svg new file mode 100644 index 0000000..3b67ee7 --- /dev/null +++ b/icon-svgs/pc/voice-call.svg @@ -0,0 +1,6 @@ + + 语音连线 + + diff --git a/icon-svgs/pc/warning-round-fill.svg b/icon-svgs/pc/warning-round-fill.svg new file mode 100644 index 0000000..187c58e --- /dev/null +++ b/icon-svgs/pc/warning-round-fill.svg @@ -0,0 +1,6 @@ + + 警告-圆-填充 + + diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..8c2a28b --- /dev/null +++ b/package-lock.json @@ -0,0 +1,20879 @@ +{ + "name": "polyv-web-live-watch-sdk", + "version": "0.1.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@achrinza/node-ipc": { + "version": "9.2.2", + "resolved": "https://registry.npmmirror.com/@achrinza/node-ipc/-/node-ipc-9.2.2.tgz", + "integrity": "sha512-b90U39dx0cU6emsOvy5hxU4ApNXnE3+Tuo8XQZfiKTGelDwpMwBVgBP7QX6dGTcJgu/miyJuNJ/2naFBliNWEw==", + "dev": true, + "requires": { + "@node-ipc/js-queue": "2.0.3", + "event-pubsub": "4.3.0", + "js-message": "1.0.7" + } + }, + "@ampproject/remapping": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/@ampproject%2fremapping/-/remapping-2.2.0.tgz", + "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@babel/code-frame": { + "version": "7.10.1", + "resolved": "https://registry.npmmirror.com/@babel/code-frame/download/@babel/code-frame-7.10.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40babel%2Fcode-frame%2Fdownload%2F%40babel%2Fcode-frame-7.10.1.tgz", + "integrity": "sha1-1UgcUJXaocV+FuVMb5GYRDr7Sf8=", + "dev": true, + "requires": { + "@babel/highlight": "^7.10.1" + } + }, + "@babel/compat-data": { + "version": "7.17.10", + "resolved": "https://registry.npmmirror.com/@babel%2fcompat-data/-/compat-data-7.17.10.tgz", + "integrity": "sha512-GZt/TCsG70Ms19gfZO1tM4CVnXsPgEPBCpJu+Qz3L0LUDsY5nZqFZglIoPC1kIYOtNBZlrnFT+klg12vFGZXrw==", + "dev": true + }, + "@babel/core": { + "version": "7.20.5", + "resolved": "https://registry.npmmirror.com/@babel%2fcore/-/core-7.20.5.tgz", + "integrity": "sha512-UdOWmk4pNWTm/4DlPUl/Pt4Gz4rcEMb7CY0Y3eJl5Yz1vI8ZJGmHWaVE55LoxRjdpx0z259GE9U5STA9atUinQ==", + "dev": true, + "requires": { + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.20.5", + "@babel/helper-compilation-targets": "^7.20.0", + "@babel/helper-module-transforms": "^7.20.2", + "@babel/helpers": "^7.20.5", + "@babel/parser": "^7.20.5", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.20.5", + "@babel/types": "^7.20.5", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.1", + "semver": "^6.3.0" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.18.6", + "resolved": "https://registry.npmmirror.com/@babel%2fcode-frame/-/code-frame-7.18.6.tgz", + "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "dev": true, + "requires": { + "@babel/highlight": "^7.18.6" + } + }, + "@babel/compat-data": { + "version": "7.20.5", + "resolved": "https://registry.npmmirror.com/@babel%2fcompat-data/-/compat-data-7.20.5.tgz", + "integrity": "sha512-KZXo2t10+/jxmkhNXc7pZTqRvSOIvVv/+lJwHS+B2rErwOyjuVRh60yVpb7liQ1U5t7lLJ1bz+t8tSypUZdm0g==", + "dev": true + }, + "@babel/generator": { + "version": "7.20.5", + "resolved": "https://registry.npmmirror.com/@babel%2fgenerator/-/generator-7.20.5.tgz", + "integrity": "sha512-jl7JY2Ykn9S0yj4DQP82sYvPU+T3g0HFcWTqDLqiuA9tGRNIj9VfbtXGAYTTkyNEnQk1jkMGOdYka8aG/lulCA==", + "dev": true, + "requires": { + "@babel/types": "^7.20.5", + "@jridgewell/gen-mapping": "^0.3.2", + "jsesc": "^2.5.1" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.20.0", + "resolved": "https://registry.npmmirror.com/@babel%2fhelper-compilation-targets/-/helper-compilation-targets-7.20.0.tgz", + "integrity": "sha512-0jp//vDGp9e8hZzBc6N/KwA5ZK3Wsm/pfm4CrY7vzegkVxc65SgSn6wYOnwHe9Js9HRQ1YTCKLGPzDtaS3RoLQ==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.20.0", + "@babel/helper-validator-option": "^7.18.6", + "browserslist": "^4.21.3", + "semver": "^6.3.0" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.19.1", + "resolved": "https://registry.npmmirror.com/@babel%2fhelper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", + "dev": true + }, + "@babel/helper-validator-option": { + "version": "7.18.6", + "resolved": "https://registry.npmmirror.com/@babel%2fhelper-validator-option/-/helper-validator-option-7.18.6.tgz", + "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", + "dev": true + }, + "@babel/highlight": { + "version": "7.18.6", + "resolved": "https://registry.npmmirror.com/@babel%2fhighlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.18.6", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.20.5", + "resolved": "https://registry.npmmirror.com/@babel%2fparser/-/parser-7.20.5.tgz", + "integrity": "sha512-r27t/cy/m9uKLXQNWWebeCUHgnAZq0CpG1OwKRxzJMP1vpSU4bSIK2hq+/cp0bQxetkXx38n09rNu8jVkcK/zA==", + "dev": true + }, + "@babel/traverse": { + "version": "7.20.5", + "resolved": "https://registry.npmmirror.com/@babel%2ftraverse/-/traverse-7.20.5.tgz", + "integrity": "sha512-WM5ZNN3JITQIq9tFZaw1ojLU3WgWdtkxnhM1AegMS+PvHjkM5IXjmYEGY7yukz5XS4sJyEf2VzWjI8uAavhxBQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.20.5", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.19.0", + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/parser": "^7.20.5", + "@babel/types": "^7.20.5", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.20.5", + "resolved": "https://registry.npmmirror.com/@babel%2ftypes/-/types-7.20.5.tgz", + "integrity": "sha512-c9fst/h2/dcF7H+MJKZ2T0KjEQ8hY/BNnDk/H3XY8C4Aw/eWQXWn/lWntHF9ooUBnGmEvbfGrTgLWc+um0YDUg==", + "dev": true, + "requires": { + "@babel/helper-string-parser": "^7.19.4", + "@babel/helper-validator-identifier": "^7.19.1", + "to-fast-properties": "^2.0.0" + } + }, + "@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmmirror.com/@jridgewell%2fgen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "browserslist": { + "version": "4.21.4", + "resolved": "https://registry.npmmirror.com/browserslist/-/browserslist-4.21.4.tgz", + "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001400", + "electron-to-chromium": "^1.4.251", + "node-releases": "^2.0.6", + "update-browserslist-db": "^1.0.9" + } + }, + "electron-to-chromium": { + "version": "1.4.284", + "resolved": "https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", + "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==", + "dev": true + }, + "json5": { + "version": "2.2.3", + "resolved": "https://registry.npmmirror.com/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node-releases": { + "version": "2.0.6", + "resolved": "https://registry.npmmirror.com/node-releases/-/node-releases-2.0.6.tgz", + "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", + "dev": true + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmmirror.com/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "@babel/eslint-parser": { + "version": "7.19.1", + "resolved": "https://registry.npmmirror.com/@babel%2feslint-parser/-/eslint-parser-7.19.1.tgz", + "integrity": "sha512-AqNf2QWt1rtu2/1rLswy6CDP7H9Oh3mMhk177Y67Rg8d7RD9WfOLLv8CGn6tisFvS2htm86yIe1yLF6I1UDaGQ==", + "dev": true, + "requires": { + "@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1", + "eslint-visitor-keys": "^2.1.0", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmmirror.com/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "@babel/generator": { + "version": "7.20.0", + "resolved": "https://registry.npmmirror.com/@babel%2fgenerator/-/generator-7.20.0.tgz", + "integrity": "sha512-GUPcXxWibClgmYJuIwC2Bc2Lg+8b9VjaJ+HlNdACEVt+Wlr1eoU1OPZjZRm7Hzl0gaTsUZNQfeihvZJhG7oc3w==", + "dev": true, + "requires": { + "@babel/types": "^7.20.0", + "@jridgewell/gen-mapping": "^0.3.2", + "jsesc": "^2.5.1" + }, + "dependencies": { + "@babel/helper-validator-identifier": { + "version": "7.19.1", + "resolved": "https://registry.npmmirror.com/@babel%2fhelper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", + "dev": true + }, + "@babel/types": { + "version": "7.20.0", + "resolved": "https://registry.npmmirror.com/@babel%2ftypes/-/types-7.20.0.tgz", + "integrity": "sha512-Jlgt3H0TajCW164wkTOTzHkZb075tMQMULzrLUoUeKmO7eFL96GgDxf7/Axhc5CAuKE3KFyVW1p6ysKsi2oXAg==", + "dev": true, + "requires": { + "@babel/helper-string-parser": "^7.19.4", + "@babel/helper-validator-identifier": "^7.19.1", + "to-fast-properties": "^2.0.0" + } + }, + "@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmmirror.com/@jridgewell%2fgen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + } + } + }, + "@babel/helper-annotate-as-pure": { + "version": "7.18.6", + "resolved": "https://registry.npmmirror.com/@babel%2fhelper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", + "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + }, + "dependencies": { + "@babel/helper-validator-identifier": { + "version": "7.19.1", + "resolved": "https://registry.npmmirror.com/@babel%2fhelper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", + "dev": true + }, + "@babel/types": { + "version": "7.20.5", + "resolved": "https://registry.npmmirror.com/@babel%2ftypes/-/types-7.20.5.tgz", + "integrity": "sha512-c9fst/h2/dcF7H+MJKZ2T0KjEQ8hY/BNnDk/H3XY8C4Aw/eWQXWn/lWntHF9ooUBnGmEvbfGrTgLWc+um0YDUg==", + "dev": true, + "requires": { + "@babel/helper-string-parser": "^7.19.4", + "@babel/helper-validator-identifier": "^7.19.1", + "to-fast-properties": "^2.0.0" + } + } + } + }, + "@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.18.9", + "resolved": "https://registry.npmmirror.com/@babel%2fhelper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz", + "integrity": "sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==", + "dev": true, + "requires": { + "@babel/helper-explode-assignable-expression": "^7.18.6", + "@babel/types": "^7.18.9" + }, + "dependencies": { + "@babel/helper-validator-identifier": { + "version": "7.19.1", + "resolved": "https://registry.npmmirror.com/@babel%2fhelper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", + "dev": true + }, + "@babel/types": { + "version": "7.20.5", + "resolved": "https://registry.npmmirror.com/@babel%2ftypes/-/types-7.20.5.tgz", + "integrity": "sha512-c9fst/h2/dcF7H+MJKZ2T0KjEQ8hY/BNnDk/H3XY8C4Aw/eWQXWn/lWntHF9ooUBnGmEvbfGrTgLWc+um0YDUg==", + "dev": true, + "requires": { + "@babel/helper-string-parser": "^7.19.4", + "@babel/helper-validator-identifier": "^7.19.1", + "to-fast-properties": "^2.0.0" + } + } + } + }, + "@babel/helper-compilation-targets": { + "version": "7.18.2", + "resolved": "https://registry.npmmirror.com/@babel%2fhelper-compilation-targets/-/helper-compilation-targets-7.18.2.tgz", + "integrity": "sha512-s1jnPotJS9uQnzFtiZVBUxe67CuBa679oWFHpxYYnTpRL/1ffhyX44R9uYiXoa/pLXcY9H2moJta0iaanlk/rQ==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.17.10", + "@babel/helper-validator-option": "^7.16.7", + "browserslist": "^4.20.2", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmmirror.com/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "@babel/helper-create-class-features-plugin": { + "version": "7.20.5", + "resolved": "https://registry.npmmirror.com/@babel%2fhelper-create-class-features-plugin/-/helper-create-class-features-plugin-7.20.5.tgz", + "integrity": "sha512-3RCdA/EmEaikrhayahwToF0fpweU/8o2p8vhc1c/1kftHOdTKuC65kik/TLc+qfbS8JKw4qqJbne4ovICDhmww==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.19.0", + "@babel/helper-member-expression-to-functions": "^7.18.9", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/helper-replace-supers": "^7.19.1", + "@babel/helper-split-export-declaration": "^7.18.6" + } + }, + "@babel/helper-create-regexp-features-plugin": { + "version": "7.20.5", + "resolved": "https://registry.npmmirror.com/@babel%2fhelper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.20.5.tgz", + "integrity": "sha512-m68B1lkg3XDGX5yCvGO0kPx3v9WIYLnzjKfPcQiwntEQa5ZeRkPmo2X/ISJc8qxWGfwUr+kvZAeEzAwLec2r2w==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "regexpu-core": "^5.2.1" + } + }, + "@babel/helper-define-polyfill-provider": { + "version": "0.3.3", + "resolved": "https://registry.npmmirror.com/@babel%2fhelper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz", + "integrity": "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==", + "dev": true, + "requires": { + "@babel/helper-compilation-targets": "^7.17.7", + "@babel/helper-plugin-utils": "^7.16.7", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.20.2", + "resolved": "https://registry.npmmirror.com/@babel%2fhelper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", + "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", + "dev": true + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmmirror.com/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "@babel/helper-environment-visitor": { + "version": "7.18.9", + "resolved": "https://registry.npmmirror.com/@babel%2fhelper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", + "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", + "dev": true + }, + "@babel/helper-explode-assignable-expression": { + "version": "7.18.6", + "resolved": "https://registry.npmmirror.com/@babel%2fhelper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz", + "integrity": "sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + }, + "dependencies": { + "@babel/helper-validator-identifier": { + "version": "7.19.1", + "resolved": "https://registry.npmmirror.com/@babel%2fhelper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", + "dev": true + }, + "@babel/types": { + "version": "7.20.5", + "resolved": "https://registry.npmmirror.com/@babel%2ftypes/-/types-7.20.5.tgz", + "integrity": "sha512-c9fst/h2/dcF7H+MJKZ2T0KjEQ8hY/BNnDk/H3XY8C4Aw/eWQXWn/lWntHF9ooUBnGmEvbfGrTgLWc+um0YDUg==", + "dev": true, + "requires": { + "@babel/helper-string-parser": "^7.19.4", + "@babel/helper-validator-identifier": "^7.19.1", + "to-fast-properties": "^2.0.0" + } + } + } + }, + "@babel/helper-function-name": { + "version": "7.19.0", + "resolved": "https://registry.npmmirror.com/@babel%2fhelper-function-name/-/helper-function-name-7.19.0.tgz", + "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", + "dev": true, + "requires": { + "@babel/template": "^7.18.10", + "@babel/types": "^7.19.0" + }, + "dependencies": { + "@babel/helper-validator-identifier": { + "version": "7.19.1", + "resolved": "https://registry.npmmirror.com/@babel%2fhelper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", + "dev": true + }, + "@babel/types": { + "version": "7.20.0", + "resolved": "https://registry.npmmirror.com/@babel%2ftypes/-/types-7.20.0.tgz", + "integrity": "sha512-Jlgt3H0TajCW164wkTOTzHkZb075tMQMULzrLUoUeKmO7eFL96GgDxf7/Axhc5CAuKE3KFyVW1p6ysKsi2oXAg==", + "dev": true, + "requires": { + "@babel/helper-string-parser": "^7.19.4", + "@babel/helper-validator-identifier": "^7.19.1", + "to-fast-properties": "^2.0.0" + } + } + } + }, + "@babel/helper-hoist-variables": { + "version": "7.18.6", + "resolved": "https://registry.npmmirror.com/@babel%2fhelper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", + "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + }, + "dependencies": { + "@babel/helper-validator-identifier": { + "version": "7.19.1", + "resolved": "https://registry.npmmirror.com/@babel%2fhelper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", + "dev": true + }, + "@babel/types": { + "version": "7.20.5", + "resolved": "https://registry.npmmirror.com/@babel%2ftypes/-/types-7.20.5.tgz", + "integrity": "sha512-c9fst/h2/dcF7H+MJKZ2T0KjEQ8hY/BNnDk/H3XY8C4Aw/eWQXWn/lWntHF9ooUBnGmEvbfGrTgLWc+um0YDUg==", + "dev": true, + "requires": { + "@babel/helper-string-parser": "^7.19.4", + "@babel/helper-validator-identifier": "^7.19.1", + "to-fast-properties": "^2.0.0" + } + } + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.18.9", + "resolved": "https://registry.npmmirror.com/@babel%2fhelper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.9.tgz", + "integrity": "sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg==", + "dev": true, + "requires": { + "@babel/types": "^7.18.9" + }, + "dependencies": { + "@babel/helper-validator-identifier": { + "version": "7.19.1", + "resolved": "https://registry.npmmirror.com/@babel%2fhelper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", + "dev": true + }, + "@babel/types": { + "version": "7.20.5", + "resolved": "https://registry.npmmirror.com/@babel%2ftypes/-/types-7.20.5.tgz", + "integrity": "sha512-c9fst/h2/dcF7H+MJKZ2T0KjEQ8hY/BNnDk/H3XY8C4Aw/eWQXWn/lWntHF9ooUBnGmEvbfGrTgLWc+um0YDUg==", + "dev": true, + "requires": { + "@babel/helper-string-parser": "^7.19.4", + "@babel/helper-validator-identifier": "^7.19.1", + "to-fast-properties": "^2.0.0" + } + } + } + }, + "@babel/helper-module-imports": { + "version": "7.10.1", + "resolved": "https://registry.npmmirror.com/@babel/helper-module-imports/download/@babel/helper-module-imports-7.10.1.tgz", + "integrity": "sha1-3TMb1FvMxWbOdwBOnQX+F63ROHY=", + "dev": true, + "requires": { + "@babel/types": "^7.10.1" + } + }, + "@babel/helper-module-transforms": { + "version": "7.20.2", + "resolved": "https://registry.npmmirror.com/@babel%2fhelper-module-transforms/-/helper-module-transforms-7.20.2.tgz", + "integrity": "sha512-zvBKyJXRbmK07XhMuujYoJ48B5yvvmM6+wcpv6Ivj4Yg6qO7NOZOSnvZN9CRl1zz1Z4cKf8YejmCMh8clOoOeA==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-simple-access": "^7.20.2", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/helper-validator-identifier": "^7.19.1", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.20.1", + "@babel/types": "^7.20.2" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.18.6", + "resolved": "https://registry.npmmirror.com/@babel%2fcode-frame/-/code-frame-7.18.6.tgz", + "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "dev": true, + "requires": { + "@babel/highlight": "^7.18.6" + } + }, + "@babel/generator": { + "version": "7.20.5", + "resolved": "https://registry.npmmirror.com/@babel%2fgenerator/-/generator-7.20.5.tgz", + "integrity": "sha512-jl7JY2Ykn9S0yj4DQP82sYvPU+T3g0HFcWTqDLqiuA9tGRNIj9VfbtXGAYTTkyNEnQk1jkMGOdYka8aG/lulCA==", + "dev": true, + "requires": { + "@babel/types": "^7.20.5", + "@jridgewell/gen-mapping": "^0.3.2", + "jsesc": "^2.5.1" + } + }, + "@babel/helper-module-imports": { + "version": "7.18.6", + "resolved": "https://registry.npmmirror.com/@babel%2fhelper-module-imports/-/helper-module-imports-7.18.6.tgz", + "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.19.1", + "resolved": "https://registry.npmmirror.com/@babel%2fhelper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", + "dev": true + }, + "@babel/highlight": { + "version": "7.18.6", + "resolved": "https://registry.npmmirror.com/@babel%2fhighlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.18.6", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.20.5", + "resolved": "https://registry.npmmirror.com/@babel%2fparser/-/parser-7.20.5.tgz", + "integrity": "sha512-r27t/cy/m9uKLXQNWWebeCUHgnAZq0CpG1OwKRxzJMP1vpSU4bSIK2hq+/cp0bQxetkXx38n09rNu8jVkcK/zA==", + "dev": true + }, + "@babel/traverse": { + "version": "7.20.5", + "resolved": "https://registry.npmmirror.com/@babel%2ftraverse/-/traverse-7.20.5.tgz", + "integrity": "sha512-WM5ZNN3JITQIq9tFZaw1ojLU3WgWdtkxnhM1AegMS+PvHjkM5IXjmYEGY7yukz5XS4sJyEf2VzWjI8uAavhxBQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.20.5", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.19.0", + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/parser": "^7.20.5", + "@babel/types": "^7.20.5", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.20.5", + "resolved": "https://registry.npmmirror.com/@babel%2ftypes/-/types-7.20.5.tgz", + "integrity": "sha512-c9fst/h2/dcF7H+MJKZ2T0KjEQ8hY/BNnDk/H3XY8C4Aw/eWQXWn/lWntHF9ooUBnGmEvbfGrTgLWc+um0YDUg==", + "dev": true, + "requires": { + "@babel/helper-string-parser": "^7.19.4", + "@babel/helper-validator-identifier": "^7.19.1", + "to-fast-properties": "^2.0.0" + } + }, + "@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmmirror.com/@jridgewell%2fgen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.18.6", + "resolved": "https://registry.npmmirror.com/@babel%2fhelper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz", + "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + }, + "dependencies": { + "@babel/helper-validator-identifier": { + "version": "7.19.1", + "resolved": "https://registry.npmmirror.com/@babel%2fhelper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", + "dev": true + }, + "@babel/types": { + "version": "7.20.5", + "resolved": "https://registry.npmmirror.com/@babel%2ftypes/-/types-7.20.5.tgz", + "integrity": "sha512-c9fst/h2/dcF7H+MJKZ2T0KjEQ8hY/BNnDk/H3XY8C4Aw/eWQXWn/lWntHF9ooUBnGmEvbfGrTgLWc+um0YDUg==", + "dev": true, + "requires": { + "@babel/helper-string-parser": "^7.19.4", + "@babel/helper-validator-identifier": "^7.19.1", + "to-fast-properties": "^2.0.0" + } + } + } + }, + "@babel/helper-plugin-utils": { + "version": "7.10.1", + "resolved": "https://registry.npmmirror.com/@babel/helper-plugin-utils/download/@babel/helper-plugin-utils-7.10.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40babel%2Fhelper-plugin-utils%2Fdownload%2F%40babel%2Fhelper-plugin-utils-7.10.1.tgz", + "integrity": "sha1-7Fpc8O7JJbZsYFgDKLEiwBIwoSc=", + "dev": true + }, + "@babel/helper-remap-async-to-generator": { + "version": "7.18.9", + "resolved": "https://registry.npmmirror.com/@babel%2fhelper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz", + "integrity": "sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-wrap-function": "^7.18.9", + "@babel/types": "^7.18.9" + }, + "dependencies": { + "@babel/helper-validator-identifier": { + "version": "7.19.1", + "resolved": "https://registry.npmmirror.com/@babel%2fhelper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", + "dev": true + }, + "@babel/types": { + "version": "7.20.5", + "resolved": "https://registry.npmmirror.com/@babel%2ftypes/-/types-7.20.5.tgz", + "integrity": "sha512-c9fst/h2/dcF7H+MJKZ2T0KjEQ8hY/BNnDk/H3XY8C4Aw/eWQXWn/lWntHF9ooUBnGmEvbfGrTgLWc+um0YDUg==", + "dev": true, + "requires": { + "@babel/helper-string-parser": "^7.19.4", + "@babel/helper-validator-identifier": "^7.19.1", + "to-fast-properties": "^2.0.0" + } + } + } + }, + "@babel/helper-replace-supers": { + "version": "7.19.1", + "resolved": "https://registry.npmmirror.com/@babel%2fhelper-replace-supers/-/helper-replace-supers-7.19.1.tgz", + "integrity": "sha512-T7ahH7wV0Hfs46SFh5Jz3s0B6+o8g3c+7TMxu7xKfmHikg7EAZ3I2Qk9LFhjxXq8sL7UkP5JflezNwoZa8WvWw==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-member-expression-to-functions": "^7.18.9", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/traverse": "^7.19.1", + "@babel/types": "^7.19.0" + }, + "dependencies": { + "@babel/helper-validator-identifier": { + "version": "7.19.1", + "resolved": "https://registry.npmmirror.com/@babel%2fhelper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", + "dev": true + }, + "@babel/types": { + "version": "7.20.5", + "resolved": "https://registry.npmmirror.com/@babel%2ftypes/-/types-7.20.5.tgz", + "integrity": "sha512-c9fst/h2/dcF7H+MJKZ2T0KjEQ8hY/BNnDk/H3XY8C4Aw/eWQXWn/lWntHF9ooUBnGmEvbfGrTgLWc+um0YDUg==", + "dev": true, + "requires": { + "@babel/helper-string-parser": "^7.19.4", + "@babel/helper-validator-identifier": "^7.19.1", + "to-fast-properties": "^2.0.0" + } + } + } + }, + "@babel/helper-simple-access": { + "version": "7.20.2", + "resolved": "https://registry.npmmirror.com/@babel%2fhelper-simple-access/-/helper-simple-access-7.20.2.tgz", + "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==", + "dev": true, + "requires": { + "@babel/types": "^7.20.2" + }, + "dependencies": { + "@babel/helper-validator-identifier": { + "version": "7.19.1", + "resolved": "https://registry.npmmirror.com/@babel%2fhelper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", + "dev": true + }, + "@babel/types": { + "version": "7.20.5", + "resolved": "https://registry.npmmirror.com/@babel%2ftypes/-/types-7.20.5.tgz", + "integrity": "sha512-c9fst/h2/dcF7H+MJKZ2T0KjEQ8hY/BNnDk/H3XY8C4Aw/eWQXWn/lWntHF9ooUBnGmEvbfGrTgLWc+um0YDUg==", + "dev": true, + "requires": { + "@babel/helper-string-parser": "^7.19.4", + "@babel/helper-validator-identifier": "^7.19.1", + "to-fast-properties": "^2.0.0" + } + } + } + }, + "@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.20.0", + "resolved": "https://registry.npmmirror.com/@babel%2fhelper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz", + "integrity": "sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==", + "dev": true, + "requires": { + "@babel/types": "^7.20.0" + }, + "dependencies": { + "@babel/helper-validator-identifier": { + "version": "7.19.1", + "resolved": "https://registry.npmmirror.com/@babel%2fhelper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", + "dev": true + }, + "@babel/types": { + "version": "7.20.5", + "resolved": "https://registry.npmmirror.com/@babel%2ftypes/-/types-7.20.5.tgz", + "integrity": "sha512-c9fst/h2/dcF7H+MJKZ2T0KjEQ8hY/BNnDk/H3XY8C4Aw/eWQXWn/lWntHF9ooUBnGmEvbfGrTgLWc+um0YDUg==", + "dev": true, + "requires": { + "@babel/helper-string-parser": "^7.19.4", + "@babel/helper-validator-identifier": "^7.19.1", + "to-fast-properties": "^2.0.0" + } + } + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.18.6", + "resolved": "https://registry.npmmirror.com/@babel%2fhelper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", + "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + }, + "dependencies": { + "@babel/helper-validator-identifier": { + "version": "7.19.1", + "resolved": "https://registry.npmmirror.com/@babel%2fhelper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", + "dev": true + }, + "@babel/types": { + "version": "7.20.0", + "resolved": "https://registry.npmmirror.com/@babel%2ftypes/-/types-7.20.0.tgz", + "integrity": "sha512-Jlgt3H0TajCW164wkTOTzHkZb075tMQMULzrLUoUeKmO7eFL96GgDxf7/Axhc5CAuKE3KFyVW1p6ysKsi2oXAg==", + "dev": true, + "requires": { + "@babel/helper-string-parser": "^7.19.4", + "@babel/helper-validator-identifier": "^7.19.1", + "to-fast-properties": "^2.0.0" + } + } + } + }, + "@babel/helper-string-parser": { + "version": "7.19.4", + "resolved": "https://registry.npmmirror.com/@babel%2fhelper-string-parser/-/helper-string-parser-7.19.4.tgz", + "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==" + }, + "@babel/helper-validator-identifier": { + "version": "7.10.1", + "resolved": "https://registry.npmmirror.com/@babel/helper-validator-identifier/download/@babel/helper-validator-identifier-7.10.1.tgz", + "integrity": "sha1-V3CwwagmxPU/Xt5eFTFj4DGOlLU=", + "dev": true + }, + "@babel/helper-validator-option": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel%2fhelper-validator-option/-/helper-validator-option-7.16.7.tgz", + "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==", + "dev": true + }, + "@babel/helper-wrap-function": { + "version": "7.20.5", + "resolved": "https://registry.npmmirror.com/@babel%2fhelper-wrap-function/-/helper-wrap-function-7.20.5.tgz", + "integrity": "sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.19.0", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.20.5", + "@babel/types": "^7.20.5" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.18.6", + "resolved": "https://registry.npmmirror.com/@babel%2fcode-frame/-/code-frame-7.18.6.tgz", + "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "dev": true, + "requires": { + "@babel/highlight": "^7.18.6" + } + }, + "@babel/generator": { + "version": "7.20.5", + "resolved": "https://registry.npmmirror.com/@babel%2fgenerator/-/generator-7.20.5.tgz", + "integrity": "sha512-jl7JY2Ykn9S0yj4DQP82sYvPU+T3g0HFcWTqDLqiuA9tGRNIj9VfbtXGAYTTkyNEnQk1jkMGOdYka8aG/lulCA==", + "dev": true, + "requires": { + "@babel/types": "^7.20.5", + "@jridgewell/gen-mapping": "^0.3.2", + "jsesc": "^2.5.1" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.19.1", + "resolved": "https://registry.npmmirror.com/@babel%2fhelper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", + "dev": true + }, + "@babel/highlight": { + "version": "7.18.6", + "resolved": "https://registry.npmmirror.com/@babel%2fhighlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.18.6", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.20.5", + "resolved": "https://registry.npmmirror.com/@babel%2fparser/-/parser-7.20.5.tgz", + "integrity": "sha512-r27t/cy/m9uKLXQNWWebeCUHgnAZq0CpG1OwKRxzJMP1vpSU4bSIK2hq+/cp0bQxetkXx38n09rNu8jVkcK/zA==", + "dev": true + }, + "@babel/traverse": { + "version": "7.20.5", + "resolved": "https://registry.npmmirror.com/@babel%2ftraverse/-/traverse-7.20.5.tgz", + "integrity": "sha512-WM5ZNN3JITQIq9tFZaw1ojLU3WgWdtkxnhM1AegMS+PvHjkM5IXjmYEGY7yukz5XS4sJyEf2VzWjI8uAavhxBQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.20.5", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.19.0", + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/parser": "^7.20.5", + "@babel/types": "^7.20.5", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.20.5", + "resolved": "https://registry.npmmirror.com/@babel%2ftypes/-/types-7.20.5.tgz", + "integrity": "sha512-c9fst/h2/dcF7H+MJKZ2T0KjEQ8hY/BNnDk/H3XY8C4Aw/eWQXWn/lWntHF9ooUBnGmEvbfGrTgLWc+um0YDUg==", + "dev": true, + "requires": { + "@babel/helper-string-parser": "^7.19.4", + "@babel/helper-validator-identifier": "^7.19.1", + "to-fast-properties": "^2.0.0" + } + }, + "@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmmirror.com/@jridgewell%2fgen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "@babel/helpers": { + "version": "7.20.6", + "resolved": "https://registry.npmmirror.com/@babel%2fhelpers/-/helpers-7.20.6.tgz", + "integrity": "sha512-Pf/OjgfgFRW5bApskEz5pvidpim7tEDPlFtKcNRXWmfHGn9IEI2W2flqRQXTFb7gIPTyK++N6rVHuwKut4XK6w==", + "dev": true, + "requires": { + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.20.5", + "@babel/types": "^7.20.5" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.18.6", + "resolved": "https://registry.npmmirror.com/@babel%2fcode-frame/-/code-frame-7.18.6.tgz", + "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "dev": true, + "requires": { + "@babel/highlight": "^7.18.6" + } + }, + "@babel/generator": { + "version": "7.20.5", + "resolved": "https://registry.npmmirror.com/@babel%2fgenerator/-/generator-7.20.5.tgz", + "integrity": "sha512-jl7JY2Ykn9S0yj4DQP82sYvPU+T3g0HFcWTqDLqiuA9tGRNIj9VfbtXGAYTTkyNEnQk1jkMGOdYka8aG/lulCA==", + "dev": true, + "requires": { + "@babel/types": "^7.20.5", + "@jridgewell/gen-mapping": "^0.3.2", + "jsesc": "^2.5.1" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.19.1", + "resolved": "https://registry.npmmirror.com/@babel%2fhelper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", + "dev": true + }, + "@babel/highlight": { + "version": "7.18.6", + "resolved": "https://registry.npmmirror.com/@babel%2fhighlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.18.6", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.20.5", + "resolved": "https://registry.npmmirror.com/@babel%2fparser/-/parser-7.20.5.tgz", + "integrity": "sha512-r27t/cy/m9uKLXQNWWebeCUHgnAZq0CpG1OwKRxzJMP1vpSU4bSIK2hq+/cp0bQxetkXx38n09rNu8jVkcK/zA==", + "dev": true + }, + "@babel/traverse": { + "version": "7.20.5", + "resolved": "https://registry.npmmirror.com/@babel%2ftraverse/-/traverse-7.20.5.tgz", + "integrity": "sha512-WM5ZNN3JITQIq9tFZaw1ojLU3WgWdtkxnhM1AegMS+PvHjkM5IXjmYEGY7yukz5XS4sJyEf2VzWjI8uAavhxBQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.20.5", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.19.0", + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/parser": "^7.20.5", + "@babel/types": "^7.20.5", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.20.5", + "resolved": "https://registry.npmmirror.com/@babel%2ftypes/-/types-7.20.5.tgz", + "integrity": "sha512-c9fst/h2/dcF7H+MJKZ2T0KjEQ8hY/BNnDk/H3XY8C4Aw/eWQXWn/lWntHF9ooUBnGmEvbfGrTgLWc+um0YDUg==", + "dev": true, + "requires": { + "@babel/helper-string-parser": "^7.19.4", + "@babel/helper-validator-identifier": "^7.19.1", + "to-fast-properties": "^2.0.0" + } + }, + "@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmmirror.com/@jridgewell%2fgen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "@babel/highlight": { + "version": "7.10.1", + "resolved": "https://registry.npmmirror.com/@babel/highlight/download/@babel/highlight-7.10.1.tgz", + "integrity": "sha1-hB0Ji6YTuhpCeis4PXnjVVLDiuA=", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.10.1", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.18.11", + "resolved": "https://registry.npmmirror.com/@babel%2fparser/-/parser-7.18.11.tgz", + "integrity": "sha512-9JKn5vN+hDt0Hdqn1PiJ2guflwP+B6Ga8qbDuoF0PzzVhrzsKIJo8yGqVk6CmMHiMei9w1C1Bp9IMJSIK+HPIQ==" + }, + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.18.6", + "resolved": "https://registry.npmmirror.com/@babel%2fplugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz", + "integrity": "sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.20.2", + "resolved": "https://registry.npmmirror.com/@babel%2fhelper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", + "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", + "dev": true + } + } + }, + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.18.9", + "resolved": "https://registry.npmmirror.com/@babel%2fplugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.18.9.tgz", + "integrity": "sha512-AHrP9jadvH7qlOj6PINbgSuphjQUAK7AOT7DPjBo9EHoLhQTnnK5u45e1Hd4DbSQEO9nqPWtQ89r+XEOWFScKg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", + "@babel/plugin-proposal-optional-chaining": "^7.18.9" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.20.2", + "resolved": "https://registry.npmmirror.com/@babel%2fhelper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", + "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", + "dev": true + } + } + }, + "@babel/plugin-proposal-async-generator-functions": { + "version": "7.20.1", + "resolved": "https://registry.npmmirror.com/@babel%2fplugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.1.tgz", + "integrity": "sha512-Gh5rchzSwE4kC+o/6T8waD0WHEQIsDmjltY8WnWRXHUdH8axZhuH86Ov9M72YhJfDrZseQwuuWaaIT/TmePp3g==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/helper-remap-async-to-generator": "^7.18.9", + "@babel/plugin-syntax-async-generators": "^7.8.4" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.20.2", + "resolved": "https://registry.npmmirror.com/@babel%2fhelper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", + "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", + "dev": true + } + } + }, + "@babel/plugin-proposal-class-properties": { + "version": "7.18.6", + "resolved": "https://registry.npmmirror.com/@babel%2fplugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", + "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.20.2", + "resolved": "https://registry.npmmirror.com/@babel%2fhelper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", + "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", + "dev": true + } + } + }, + "@babel/plugin-proposal-class-static-block": { + "version": "7.18.6", + "resolved": "https://registry.npmmirror.com/@babel%2fplugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.6.tgz", + "integrity": "sha512-+I3oIiNxrCpup3Gi8n5IGMwj0gOCAjcJUSQEcotNnCCPMEnixawOQ+KeJPlgfjzx+FKQ1QSyZOWe7wmoJp7vhw==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.20.2", + "resolved": "https://registry.npmmirror.com/@babel%2fhelper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", + "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", + "dev": true + } + } + }, + "@babel/plugin-proposal-decorators": { + "version": "7.20.2", + "resolved": "https://registry.npmmirror.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.20.2.tgz", + "integrity": "sha512-nkBH96IBmgKnbHQ5gXFrcmez+Z9S2EIDKDQGp005ROqBigc88Tky4rzCnlP/lnlj245dCEQl4/YyV0V1kYh5dw==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.20.2", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-replace-supers": "^7.19.1", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/plugin-syntax-decorators": "^7.19.0" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.20.2", + "resolved": "https://registry.npmmirror.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", + "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", + "dev": true + }, + "@babel/helper-validator-identifier": { + "version": "7.19.1", + "resolved": "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==" + }, + "@babel/types": { + "version": "7.20.2", + "resolved": "https://registry.npmmirror.com/@babel/types/-/types-7.20.2.tgz", + "integrity": "sha512-FnnvsNWgZCr232sqtXggapvlkk/tuwR/qhGzcmxI0GXLCjmPYQPzio2FbdlWuY6y1sHFfQKk+rRbUZ9VStQMog==", + "requires": { + "@babel/helper-string-parser": "^7.19.4", + "@babel/helper-validator-identifier": "^7.19.1", + "to-fast-properties": "^2.0.0" + } + } + } + }, + "@babel/plugin-proposal-dynamic-import": { + "version": "7.18.6", + "resolved": "https://registry.npmmirror.com/@babel%2fplugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz", + "integrity": "sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.20.2", + "resolved": "https://registry.npmmirror.com/@babel%2fhelper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", + "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", + "dev": true + } + } + }, + "@babel/plugin-proposal-export-namespace-from": { + "version": "7.18.9", + "resolved": "https://registry.npmmirror.com/@babel%2fplugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz", + "integrity": "sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.20.2", + "resolved": "https://registry.npmmirror.com/@babel%2fhelper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", + "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", + "dev": true + } + } + }, + "@babel/plugin-proposal-json-strings": { + "version": "7.18.6", + "resolved": "https://registry.npmmirror.com/@babel%2fplugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz", + "integrity": "sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-json-strings": "^7.8.3" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.20.2", + "resolved": "https://registry.npmmirror.com/@babel%2fhelper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", + "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", + "dev": true + } + } + }, + "@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.18.9", + "resolved": "https://registry.npmmirror.com/@babel%2fplugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.18.9.tgz", + "integrity": "sha512-128YbMpjCrP35IOExw2Fq+x55LMP42DzhOhX2aNNIdI9avSWl2PI0yuBWarr3RYpZBSPtabfadkH2yeRiMD61Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.20.2", + "resolved": "https://registry.npmmirror.com/@babel%2fhelper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", + "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", + "dev": true + } + } + }, + "@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.18.6", + "resolved": "https://registry.npmmirror.com/@babel%2fplugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", + "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.20.2", + "resolved": "https://registry.npmmirror.com/@babel%2fhelper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", + "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", + "dev": true + } + } + }, + "@babel/plugin-proposal-numeric-separator": { + "version": "7.18.6", + "resolved": "https://registry.npmmirror.com/@babel%2fplugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", + "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.20.2", + "resolved": "https://registry.npmmirror.com/@babel%2fhelper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", + "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", + "dev": true + } + } + }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.20.2", + "resolved": "https://registry.npmmirror.com/@babel%2fplugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.2.tgz", + "integrity": "sha512-Ks6uej9WFK+fvIMesSqbAto5dD8Dz4VuuFvGJFKgIGSkJuRGcrwGECPA1fDgQK3/DbExBJpEkTeYeB8geIFCSQ==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.20.1", + "@babel/helper-compilation-targets": "^7.20.0", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.20.1" + }, + "dependencies": { + "@babel/compat-data": { + "version": "7.20.5", + "resolved": "https://registry.npmmirror.com/@babel%2fcompat-data/-/compat-data-7.20.5.tgz", + "integrity": "sha512-KZXo2t10+/jxmkhNXc7pZTqRvSOIvVv/+lJwHS+B2rErwOyjuVRh60yVpb7liQ1U5t7lLJ1bz+t8tSypUZdm0g==", + "dev": true + }, + "@babel/helper-compilation-targets": { + "version": "7.20.0", + "resolved": "https://registry.npmmirror.com/@babel%2fhelper-compilation-targets/-/helper-compilation-targets-7.20.0.tgz", + "integrity": "sha512-0jp//vDGp9e8hZzBc6N/KwA5ZK3Wsm/pfm4CrY7vzegkVxc65SgSn6wYOnwHe9Js9HRQ1YTCKLGPzDtaS3RoLQ==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.20.0", + "@babel/helper-validator-option": "^7.18.6", + "browserslist": "^4.21.3", + "semver": "^6.3.0" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.20.2", + "resolved": "https://registry.npmmirror.com/@babel%2fhelper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", + "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", + "dev": true + }, + "@babel/helper-validator-option": { + "version": "7.18.6", + "resolved": "https://registry.npmmirror.com/@babel%2fhelper-validator-option/-/helper-validator-option-7.18.6.tgz", + "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", + "dev": true + }, + "browserslist": { + "version": "4.21.4", + "resolved": "https://registry.npmmirror.com/browserslist/-/browserslist-4.21.4.tgz", + "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001400", + "electron-to-chromium": "^1.4.251", + "node-releases": "^2.0.6", + "update-browserslist-db": "^1.0.9" + } + }, + "electron-to-chromium": { + "version": "1.4.284", + "resolved": "https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", + "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==", + "dev": true + }, + "node-releases": { + "version": "2.0.6", + "resolved": "https://registry.npmmirror.com/node-releases/-/node-releases-2.0.6.tgz", + "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", + "dev": true + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmmirror.com/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "@babel/plugin-proposal-optional-catch-binding": { + "version": "7.18.6", + "resolved": "https://registry.npmmirror.com/@babel%2fplugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz", + "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.20.2", + "resolved": "https://registry.npmmirror.com/@babel%2fhelper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", + "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", + "dev": true + } + } + }, + "@babel/plugin-proposal-optional-chaining": { + "version": "7.18.9", + "resolved": "https://registry.npmmirror.com/@babel%2fplugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.18.9.tgz", + "integrity": "sha512-v5nwt4IqBXihxGsW2QmCWMDS3B3bzGIk/EQVZz2ei7f3NJl8NzAJVvUmpDW5q1CRNY+Beb/k58UAH1Km1N411w==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.20.2", + "resolved": "https://registry.npmmirror.com/@babel%2fhelper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", + "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", + "dev": true + } + } + }, + "@babel/plugin-proposal-private-methods": { + "version": "7.18.6", + "resolved": "https://registry.npmmirror.com/@babel%2fplugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", + "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.20.2", + "resolved": "https://registry.npmmirror.com/@babel%2fhelper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", + "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", + "dev": true + } + } + }, + "@babel/plugin-proposal-private-property-in-object": { + "version": "7.20.5", + "resolved": "https://registry.npmmirror.com/@babel%2fplugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.20.5.tgz", + "integrity": "sha512-Vq7b9dUA12ByzB4EjQTPo25sFhY+08pQDBSZRtUAkj7lb7jahaHR5igera16QZ+3my1nYR4dKsNdYj5IjPHilQ==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-create-class-features-plugin": "^7.20.5", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.20.2", + "resolved": "https://registry.npmmirror.com/@babel%2fhelper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", + "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", + "dev": true + } + } + }, + "@babel/plugin-proposal-unicode-property-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmmirror.com/@babel%2fplugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", + "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.20.2", + "resolved": "https://registry.npmmirror.com/@babel%2fhelper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", + "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", + "dev": true + } + } + }, + "@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmmirror.com/@babel%2fplugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmmirror.com/@babel%2fplugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.20.2", + "resolved": "https://registry.npmmirror.com/@babel%2fhelper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", + "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", + "dev": true + } + } + }, + "@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmmirror.com/@babel%2fplugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.20.2", + "resolved": "https://registry.npmmirror.com/@babel%2fhelper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", + "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", + "dev": true + } + } + }, + "@babel/plugin-syntax-decorators": { + "version": "7.19.0", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.19.0.tgz", + "integrity": "sha512-xaBZUEDntt4faL1yN8oIFlhfXeQAWJW7CLKYsHTUqriCUbj8xOra8bfxxKGi/UwExPFBuPdH4XfHc9rGQhrVkQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.19.0" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.20.2", + "resolved": "https://registry.npmmirror.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", + "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", + "dev": true + } + } + }, + "@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmmirror.com/@babel%2fplugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmmirror.com/@babel%2fplugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-syntax-import-assertions": { + "version": "7.20.0", + "resolved": "https://registry.npmmirror.com/@babel%2fplugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz", + "integrity": "sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.19.0" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.20.2", + "resolved": "https://registry.npmmirror.com/@babel%2fhelper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", + "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", + "dev": true + } + } + }, + "@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmmirror.com/@babel%2fplugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-jsx": { + "version": "7.18.6", + "resolved": "https://registry.npmmirror.com/@babel%2fplugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz", + "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.20.2", + "resolved": "https://registry.npmmirror.com/@babel%2fhelper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", + "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", + "dev": true + } + } + }, + "@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmmirror.com/@babel%2fplugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.20.2", + "resolved": "https://registry.npmmirror.com/@babel%2fhelper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", + "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", + "dev": true + } + } + }, + "@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmmirror.com/@babel%2fplugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmmirror.com/@babel%2fplugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.20.2", + "resolved": "https://registry.npmmirror.com/@babel%2fhelper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", + "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", + "dev": true + } + } + }, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmmirror.com/@babel%2fplugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmmirror.com/@babel%2fplugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmmirror.com/@babel%2fplugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmmirror.com/@babel%2fplugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.20.2", + "resolved": "https://registry.npmmirror.com/@babel%2fhelper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", + "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", + "dev": true + } + } + }, + "@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmmirror.com/@babel%2fplugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.20.2", + "resolved": "https://registry.npmmirror.com/@babel%2fhelper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", + "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", + "dev": true + } + } + }, + "@babel/plugin-syntax-typescript": { + "version": "7.20.0", + "resolved": "https://registry.npmmirror.com/@babel%2fplugin-syntax-typescript/-/plugin-syntax-typescript-7.20.0.tgz", + "integrity": "sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.19.0" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.19.0", + "resolved": "https://registry.npmmirror.com/@babel%2fhelper-plugin-utils/-/helper-plugin-utils-7.19.0.tgz", + "integrity": "sha512-40Ryx7I8mT+0gaNxm8JGTZFUITNqdLAgdg0hXzeVZxVD6nFsdhQvip6v8dqkRHzsz1VFpFAaOCHNn0vKBL7Czw==", + "dev": true + } + } + }, + "@babel/plugin-transform-arrow-functions": { + "version": "7.18.6", + "resolved": "https://registry.npmmirror.com/@babel%2fplugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.18.6.tgz", + "integrity": "sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.20.2", + "resolved": "https://registry.npmmirror.com/@babel%2fhelper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", + "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", + "dev": true + } + } + }, + "@babel/plugin-transform-async-to-generator": { + "version": "7.18.6", + "resolved": "https://registry.npmmirror.com/@babel%2fplugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.18.6.tgz", + "integrity": "sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-remap-async-to-generator": "^7.18.6" + }, + "dependencies": { + "@babel/helper-module-imports": { + "version": "7.18.6", + "resolved": "https://registry.npmmirror.com/@babel%2fhelper-module-imports/-/helper-module-imports-7.18.6.tgz", + "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.20.2", + "resolved": "https://registry.npmmirror.com/@babel%2fhelper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", + "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", + "dev": true + }, + "@babel/helper-validator-identifier": { + "version": "7.19.1", + "resolved": "https://registry.npmmirror.com/@babel%2fhelper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", + "dev": true + }, + "@babel/types": { + "version": "7.20.5", + "resolved": "https://registry.npmmirror.com/@babel%2ftypes/-/types-7.20.5.tgz", + "integrity": "sha512-c9fst/h2/dcF7H+MJKZ2T0KjEQ8hY/BNnDk/H3XY8C4Aw/eWQXWn/lWntHF9ooUBnGmEvbfGrTgLWc+um0YDUg==", + "dev": true, + "requires": { + "@babel/helper-string-parser": "^7.19.4", + "@babel/helper-validator-identifier": "^7.19.1", + "to-fast-properties": "^2.0.0" + } + } + } + }, + "@babel/plugin-transform-block-scoped-functions": { + "version": "7.18.6", + "resolved": "https://registry.npmmirror.com/@babel%2fplugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz", + "integrity": "sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.20.2", + "resolved": "https://registry.npmmirror.com/@babel%2fhelper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", + "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", + "dev": true + } + } + }, + "@babel/plugin-transform-block-scoping": { + "version": "7.20.5", + "resolved": "https://registry.npmmirror.com/@babel%2fplugin-transform-block-scoping/-/plugin-transform-block-scoping-7.20.5.tgz", + "integrity": "sha512-WvpEIW9Cbj9ApF3yJCjIEEf1EiNJLtXagOrL5LNWEZOo3jv8pmPoYTSNJQvqej8OavVlgOoOPw6/htGZro6IkA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.20.2" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.20.2", + "resolved": "https://registry.npmmirror.com/@babel%2fhelper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", + "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", + "dev": true + } + } + }, + "@babel/plugin-transform-classes": { + "version": "7.20.2", + "resolved": "https://registry.npmmirror.com/@babel%2fplugin-transform-classes/-/plugin-transform-classes-7.20.2.tgz", + "integrity": "sha512-9rbPp0lCVVoagvtEyQKSo5L8oo0nQS/iif+lwlAz29MccX2642vWDlSZK+2T2buxbopotId2ld7zZAzRfz9j1g==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-compilation-targets": "^7.20.0", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.19.0", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-replace-supers": "^7.19.1", + "@babel/helper-split-export-declaration": "^7.18.6", + "globals": "^11.1.0" + }, + "dependencies": { + "@babel/compat-data": { + "version": "7.20.5", + "resolved": "https://registry.npmmirror.com/@babel%2fcompat-data/-/compat-data-7.20.5.tgz", + "integrity": "sha512-KZXo2t10+/jxmkhNXc7pZTqRvSOIvVv/+lJwHS+B2rErwOyjuVRh60yVpb7liQ1U5t7lLJ1bz+t8tSypUZdm0g==", + "dev": true + }, + "@babel/helper-compilation-targets": { + "version": "7.20.0", + "resolved": "https://registry.npmmirror.com/@babel%2fhelper-compilation-targets/-/helper-compilation-targets-7.20.0.tgz", + "integrity": "sha512-0jp//vDGp9e8hZzBc6N/KwA5ZK3Wsm/pfm4CrY7vzegkVxc65SgSn6wYOnwHe9Js9HRQ1YTCKLGPzDtaS3RoLQ==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.20.0", + "@babel/helper-validator-option": "^7.18.6", + "browserslist": "^4.21.3", + "semver": "^6.3.0" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.20.2", + "resolved": "https://registry.npmmirror.com/@babel%2fhelper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", + "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", + "dev": true + }, + "@babel/helper-validator-option": { + "version": "7.18.6", + "resolved": "https://registry.npmmirror.com/@babel%2fhelper-validator-option/-/helper-validator-option-7.18.6.tgz", + "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", + "dev": true + }, + "browserslist": { + "version": "4.21.4", + "resolved": "https://registry.npmmirror.com/browserslist/-/browserslist-4.21.4.tgz", + "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001400", + "electron-to-chromium": "^1.4.251", + "node-releases": "^2.0.6", + "update-browserslist-db": "^1.0.9" + } + }, + "electron-to-chromium": { + "version": "1.4.284", + "resolved": "https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", + "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==", + "dev": true + }, + "node-releases": { + "version": "2.0.6", + "resolved": "https://registry.npmmirror.com/node-releases/-/node-releases-2.0.6.tgz", + "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", + "dev": true + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmmirror.com/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "@babel/plugin-transform-computed-properties": { + "version": "7.18.9", + "resolved": "https://registry.npmmirror.com/@babel%2fplugin-transform-computed-properties/-/plugin-transform-computed-properties-7.18.9.tgz", + "integrity": "sha512-+i0ZU1bCDymKakLxn5srGHrsAPRELC2WIbzwjLhHW9SIE1cPYkLCL0NlnXMZaM1vhfgA2+M7hySk42VBvrkBRw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.9" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.20.2", + "resolved": "https://registry.npmmirror.com/@babel%2fhelper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", + "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", + "dev": true + } + } + }, + "@babel/plugin-transform-destructuring": { + "version": "7.20.2", + "resolved": "https://registry.npmmirror.com/@babel%2fplugin-transform-destructuring/-/plugin-transform-destructuring-7.20.2.tgz", + "integrity": "sha512-mENM+ZHrvEgxLTBXUiQ621rRXZes3KWUv6NdQlrnr1TkWVw+hUjQBZuP2X32qKlrlG2BzgR95gkuCRSkJl8vIw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.20.2" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.20.2", + "resolved": "https://registry.npmmirror.com/@babel%2fhelper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", + "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", + "dev": true + } + } + }, + "@babel/plugin-transform-dotall-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmmirror.com/@babel%2fplugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz", + "integrity": "sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.20.2", + "resolved": "https://registry.npmmirror.com/@babel%2fhelper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", + "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", + "dev": true + } + } + }, + "@babel/plugin-transform-duplicate-keys": { + "version": "7.18.9", + "resolved": "https://registry.npmmirror.com/@babel%2fplugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz", + "integrity": "sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.9" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.20.2", + "resolved": "https://registry.npmmirror.com/@babel%2fhelper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", + "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", + "dev": true + } + } + }, + "@babel/plugin-transform-exponentiation-operator": { + "version": "7.18.6", + "resolved": "https://registry.npmmirror.com/@babel%2fplugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz", + "integrity": "sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==", + "dev": true, + "requires": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.20.2", + "resolved": "https://registry.npmmirror.com/@babel%2fhelper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", + "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", + "dev": true + } + } + }, + "@babel/plugin-transform-for-of": { + "version": "7.18.8", + "resolved": "https://registry.npmmirror.com/@babel%2fplugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz", + "integrity": "sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.20.2", + "resolved": "https://registry.npmmirror.com/@babel%2fhelper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", + "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", + "dev": true + } + } + }, + "@babel/plugin-transform-function-name": { + "version": "7.18.9", + "resolved": "https://registry.npmmirror.com/@babel%2fplugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz", + "integrity": "sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==", + "dev": true, + "requires": { + "@babel/helper-compilation-targets": "^7.18.9", + "@babel/helper-function-name": "^7.18.9", + "@babel/helper-plugin-utils": "^7.18.9" + }, + "dependencies": { + "@babel/compat-data": { + "version": "7.20.5", + "resolved": "https://registry.npmmirror.com/@babel%2fcompat-data/-/compat-data-7.20.5.tgz", + "integrity": "sha512-KZXo2t10+/jxmkhNXc7pZTqRvSOIvVv/+lJwHS+B2rErwOyjuVRh60yVpb7liQ1U5t7lLJ1bz+t8tSypUZdm0g==", + "dev": true + }, + "@babel/helper-compilation-targets": { + "version": "7.20.0", + "resolved": "https://registry.npmmirror.com/@babel%2fhelper-compilation-targets/-/helper-compilation-targets-7.20.0.tgz", + "integrity": "sha512-0jp//vDGp9e8hZzBc6N/KwA5ZK3Wsm/pfm4CrY7vzegkVxc65SgSn6wYOnwHe9Js9HRQ1YTCKLGPzDtaS3RoLQ==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.20.0", + "@babel/helper-validator-option": "^7.18.6", + "browserslist": "^4.21.3", + "semver": "^6.3.0" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.20.2", + "resolved": "https://registry.npmmirror.com/@babel%2fhelper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", + "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", + "dev": true + }, + "@babel/helper-validator-option": { + "version": "7.18.6", + "resolved": "https://registry.npmmirror.com/@babel%2fhelper-validator-option/-/helper-validator-option-7.18.6.tgz", + "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", + "dev": true + }, + "browserslist": { + "version": "4.21.4", + "resolved": "https://registry.npmmirror.com/browserslist/-/browserslist-4.21.4.tgz", + "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001400", + "electron-to-chromium": "^1.4.251", + "node-releases": "^2.0.6", + "update-browserslist-db": "^1.0.9" + } + }, + "electron-to-chromium": { + "version": "1.4.284", + "resolved": "https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", + "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==", + "dev": true + }, + "node-releases": { + "version": "2.0.6", + "resolved": "https://registry.npmmirror.com/node-releases/-/node-releases-2.0.6.tgz", + "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", + "dev": true + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmmirror.com/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "@babel/plugin-transform-literals": { + "version": "7.18.9", + "resolved": "https://registry.npmmirror.com/@babel%2fplugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz", + "integrity": "sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.9" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.20.2", + "resolved": "https://registry.npmmirror.com/@babel%2fhelper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", + "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", + "dev": true + } + } + }, + "@babel/plugin-transform-member-expression-literals": { + "version": "7.18.6", + "resolved": "https://registry.npmmirror.com/@babel%2fplugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz", + "integrity": "sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.20.2", + "resolved": "https://registry.npmmirror.com/@babel%2fhelper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", + "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", + "dev": true + } + } + }, + "@babel/plugin-transform-modules-amd": { + "version": "7.19.6", + "resolved": "https://registry.npmmirror.com/@babel%2fplugin-transform-modules-amd/-/plugin-transform-modules-amd-7.19.6.tgz", + "integrity": "sha512-uG3od2mXvAtIFQIh0xrpLH6r5fpSQN04gIVovl+ODLdUMANokxQLZnPBHcjmv3GxRjnqwLuHvppjjcelqUFZvg==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.19.6", + "@babel/helper-plugin-utils": "^7.19.0" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.20.2", + "resolved": "https://registry.npmmirror.com/@babel%2fhelper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", + "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", + "dev": true + } + } + }, + "@babel/plugin-transform-modules-commonjs": { + "version": "7.19.6", + "resolved": "https://registry.npmmirror.com/@babel%2fplugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.19.6.tgz", + "integrity": "sha512-8PIa1ym4XRTKuSsOUXqDG0YaOlEuTVvHMe5JCfgBMOtHvJKw/4NGovEGN33viISshG/rZNVrACiBmPQLvWN8xQ==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.19.6", + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/helper-simple-access": "^7.19.4" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.20.2", + "resolved": "https://registry.npmmirror.com/@babel%2fhelper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", + "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", + "dev": true + } + } + }, + "@babel/plugin-transform-modules-systemjs": { + "version": "7.19.6", + "resolved": "https://registry.npmmirror.com/@babel%2fplugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.19.6.tgz", + "integrity": "sha512-fqGLBepcc3kErfR9R3DnVpURmckXP7gj7bAlrTQyBxrigFqszZCkFkcoxzCp2v32XmwXLvbw+8Yq9/b+QqksjQ==", + "dev": true, + "requires": { + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-module-transforms": "^7.19.6", + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/helper-validator-identifier": "^7.19.1" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.20.2", + "resolved": "https://registry.npmmirror.com/@babel%2fhelper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", + "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", + "dev": true + }, + "@babel/helper-validator-identifier": { + "version": "7.19.1", + "resolved": "https://registry.npmmirror.com/@babel%2fhelper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", + "dev": true + } + } + }, + "@babel/plugin-transform-modules-umd": { + "version": "7.18.6", + "resolved": "https://registry.npmmirror.com/@babel%2fplugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz", + "integrity": "sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.20.2", + "resolved": "https://registry.npmmirror.com/@babel%2fhelper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", + "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", + "dev": true + } + } + }, + "@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.20.5", + "resolved": "https://registry.npmmirror.com/@babel%2fplugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.20.5.tgz", + "integrity": "sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.20.5", + "@babel/helper-plugin-utils": "^7.20.2" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.20.2", + "resolved": "https://registry.npmmirror.com/@babel%2fhelper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", + "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", + "dev": true + } + } + }, + "@babel/plugin-transform-new-target": { + "version": "7.18.6", + "resolved": "https://registry.npmmirror.com/@babel%2fplugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz", + "integrity": "sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.20.2", + "resolved": "https://registry.npmmirror.com/@babel%2fhelper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", + "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", + "dev": true + } + } + }, + "@babel/plugin-transform-object-super": { + "version": "7.18.6", + "resolved": "https://registry.npmmirror.com/@babel%2fplugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz", + "integrity": "sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-replace-supers": "^7.18.6" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.20.2", + "resolved": "https://registry.npmmirror.com/@babel%2fhelper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", + "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", + "dev": true + } + } + }, + "@babel/plugin-transform-parameters": { + "version": "7.20.5", + "resolved": "https://registry.npmmirror.com/@babel%2fplugin-transform-parameters/-/plugin-transform-parameters-7.20.5.tgz", + "integrity": "sha512-h7plkOmcndIUWXZFLgpbrh2+fXAi47zcUX7IrOQuZdLD0I0KvjJ6cvo3BEcAOsDOcZhVKGJqv07mkSqK0y2isQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.20.2" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.20.2", + "resolved": "https://registry.npmmirror.com/@babel%2fhelper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", + "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", + "dev": true + } + } + }, + "@babel/plugin-transform-property-literals": { + "version": "7.18.6", + "resolved": "https://registry.npmmirror.com/@babel%2fplugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz", + "integrity": "sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.20.2", + "resolved": "https://registry.npmmirror.com/@babel%2fhelper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", + "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", + "dev": true + } + } + }, + "@babel/plugin-transform-regenerator": { + "version": "7.20.5", + "resolved": "https://registry.npmmirror.com/@babel%2fplugin-transform-regenerator/-/plugin-transform-regenerator-7.20.5.tgz", + "integrity": "sha512-kW/oO7HPBtntbsahzQ0qSE3tFvkFwnbozz3NWFhLGqH75vLEg+sCGngLlhVkePlCs3Jv0dBBHDzCHxNiFAQKCQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.20.2", + "regenerator-transform": "^0.15.1" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.20.2", + "resolved": "https://registry.npmmirror.com/@babel%2fhelper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", + "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", + "dev": true + } + } + }, + "@babel/plugin-transform-reserved-words": { + "version": "7.18.6", + "resolved": "https://registry.npmmirror.com/@babel%2fplugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz", + "integrity": "sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.20.2", + "resolved": "https://registry.npmmirror.com/@babel%2fhelper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", + "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", + "dev": true + } + } + }, + "@babel/plugin-transform-runtime": { + "version": "7.19.6", + "resolved": "https://registry.npmmirror.com/@babel%2fplugin-transform-runtime/-/plugin-transform-runtime-7.19.6.tgz", + "integrity": "sha512-PRH37lz4JU156lYFW1p8OxE5i7d6Sl/zV58ooyr+q1J1lnQPyg5tIiXlIwNVhJaY4W3TmOtdc8jqdXQcB1v5Yw==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-plugin-utils": "^7.19.0", + "babel-plugin-polyfill-corejs2": "^0.3.3", + "babel-plugin-polyfill-corejs3": "^0.6.0", + "babel-plugin-polyfill-regenerator": "^0.4.1", + "semver": "^6.3.0" + }, + "dependencies": { + "@babel/helper-module-imports": { + "version": "7.18.6", + "resolved": "https://registry.npmmirror.com/@babel%2fhelper-module-imports/-/helper-module-imports-7.18.6.tgz", + "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.20.2", + "resolved": "https://registry.npmmirror.com/@babel%2fhelper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", + "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", + "dev": true + }, + "@babel/helper-validator-identifier": { + "version": "7.19.1", + "resolved": "https://registry.npmmirror.com/@babel%2fhelper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", + "dev": true + }, + "@babel/types": { + "version": "7.20.5", + "resolved": "https://registry.npmmirror.com/@babel%2ftypes/-/types-7.20.5.tgz", + "integrity": "sha512-c9fst/h2/dcF7H+MJKZ2T0KjEQ8hY/BNnDk/H3XY8C4Aw/eWQXWn/lWntHF9ooUBnGmEvbfGrTgLWc+um0YDUg==", + "dev": true, + "requires": { + "@babel/helper-string-parser": "^7.19.4", + "@babel/helper-validator-identifier": "^7.19.1", + "to-fast-properties": "^2.0.0" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmmirror.com/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "@babel/plugin-transform-shorthand-properties": { + "version": "7.18.6", + "resolved": "https://registry.npmmirror.com/@babel%2fplugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz", + "integrity": "sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.20.2", + "resolved": "https://registry.npmmirror.com/@babel%2fhelper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", + "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", + "dev": true + } + } + }, + "@babel/plugin-transform-spread": { + "version": "7.19.0", + "resolved": "https://registry.npmmirror.com/@babel%2fplugin-transform-spread/-/plugin-transform-spread-7.19.0.tgz", + "integrity": "sha512-RsuMk7j6n+r752EtzyScnWkQyuJdli6LdO5Klv8Yx0OfPVTcQkIUfS8clx5e9yHXzlnhOZF3CbQ8C2uP5j074w==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.20.2", + "resolved": "https://registry.npmmirror.com/@babel%2fhelper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", + "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", + "dev": true + } + } + }, + "@babel/plugin-transform-sticky-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmmirror.com/@babel%2fplugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz", + "integrity": "sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.20.2", + "resolved": "https://registry.npmmirror.com/@babel%2fhelper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", + "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", + "dev": true + } + } + }, + "@babel/plugin-transform-template-literals": { + "version": "7.18.9", + "resolved": "https://registry.npmmirror.com/@babel%2fplugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz", + "integrity": "sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.9" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.20.2", + "resolved": "https://registry.npmmirror.com/@babel%2fhelper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", + "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", + "dev": true + } + } + }, + "@babel/plugin-transform-typeof-symbol": { + "version": "7.18.9", + "resolved": "https://registry.npmmirror.com/@babel%2fplugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz", + "integrity": "sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.9" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.20.2", + "resolved": "https://registry.npmmirror.com/@babel%2fhelper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", + "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", + "dev": true + } + } + }, + "@babel/plugin-transform-typescript": { + "version": "7.20.0", + "resolved": "https://registry.npmmirror.com/@babel%2fplugin-transform-typescript/-/plugin-transform-typescript-7.20.0.tgz", + "integrity": "sha512-xOAsAFaun3t9hCwZ13Qe7gq423UgMZ6zAgmLxeGGapFqlT/X3L5qT2btjiVLlFn7gWtMaVyceS5VxGAuKbgizw==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.19.0", + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/plugin-syntax-typescript": "^7.20.0" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.19.0", + "resolved": "https://registry.npmmirror.com/@babel%2fhelper-plugin-utils/-/helper-plugin-utils-7.19.0.tgz", + "integrity": "sha512-40Ryx7I8mT+0gaNxm8JGTZFUITNqdLAgdg0hXzeVZxVD6nFsdhQvip6v8dqkRHzsz1VFpFAaOCHNn0vKBL7Czw==", + "dev": true + }, + "@babel/helper-validator-identifier": { + "version": "7.19.1", + "resolved": "https://registry.npmmirror.com/@babel%2fhelper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==" + }, + "@babel/types": { + "version": "7.20.0", + "resolved": "https://registry.npmmirror.com/@babel%2ftypes/-/types-7.20.0.tgz", + "integrity": "sha512-Jlgt3H0TajCW164wkTOTzHkZb075tMQMULzrLUoUeKmO7eFL96GgDxf7/Axhc5CAuKE3KFyVW1p6ysKsi2oXAg==", + "requires": { + "@babel/helper-string-parser": "^7.19.4", + "@babel/helper-validator-identifier": "^7.19.1", + "to-fast-properties": "^2.0.0" + } + } + } + }, + "@babel/plugin-transform-unicode-escapes": { + "version": "7.18.10", + "resolved": "https://registry.npmmirror.com/@babel%2fplugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz", + "integrity": "sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.9" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.20.2", + "resolved": "https://registry.npmmirror.com/@babel%2fhelper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", + "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", + "dev": true + } + } + }, + "@babel/plugin-transform-unicode-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmmirror.com/@babel%2fplugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz", + "integrity": "sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.20.2", + "resolved": "https://registry.npmmirror.com/@babel%2fhelper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", + "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", + "dev": true + } + } + }, + "@babel/preset-env": { + "version": "7.20.2", + "resolved": "https://registry.npmmirror.com/@babel%2fpreset-env/-/preset-env-7.20.2.tgz", + "integrity": "sha512-1G0efQEWR1EHkKvKHqbG+IN/QdgwfByUpM5V5QroDzGV2t3S/WXNQd693cHiHTlCFMpr9B6FkPFXDA2lQcKoDg==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.20.1", + "@babel/helper-compilation-targets": "^7.20.0", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-validator-option": "^7.18.6", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.18.9", + "@babel/plugin-proposal-async-generator-functions": "^7.20.1", + "@babel/plugin-proposal-class-properties": "^7.18.6", + "@babel/plugin-proposal-class-static-block": "^7.18.6", + "@babel/plugin-proposal-dynamic-import": "^7.18.6", + "@babel/plugin-proposal-export-namespace-from": "^7.18.9", + "@babel/plugin-proposal-json-strings": "^7.18.6", + "@babel/plugin-proposal-logical-assignment-operators": "^7.18.9", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", + "@babel/plugin-proposal-numeric-separator": "^7.18.6", + "@babel/plugin-proposal-object-rest-spread": "^7.20.2", + "@babel/plugin-proposal-optional-catch-binding": "^7.18.6", + "@babel/plugin-proposal-optional-chaining": "^7.18.9", + "@babel/plugin-proposal-private-methods": "^7.18.6", + "@babel/plugin-proposal-private-property-in-object": "^7.18.6", + "@babel/plugin-proposal-unicode-property-regex": "^7.18.6", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-import-assertions": "^7.20.0", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-transform-arrow-functions": "^7.18.6", + "@babel/plugin-transform-async-to-generator": "^7.18.6", + "@babel/plugin-transform-block-scoped-functions": "^7.18.6", + "@babel/plugin-transform-block-scoping": "^7.20.2", + "@babel/plugin-transform-classes": "^7.20.2", + "@babel/plugin-transform-computed-properties": "^7.18.9", + "@babel/plugin-transform-destructuring": "^7.20.2", + "@babel/plugin-transform-dotall-regex": "^7.18.6", + "@babel/plugin-transform-duplicate-keys": "^7.18.9", + "@babel/plugin-transform-exponentiation-operator": "^7.18.6", + "@babel/plugin-transform-for-of": "^7.18.8", + "@babel/plugin-transform-function-name": "^7.18.9", + "@babel/plugin-transform-literals": "^7.18.9", + "@babel/plugin-transform-member-expression-literals": "^7.18.6", + "@babel/plugin-transform-modules-amd": "^7.19.6", + "@babel/plugin-transform-modules-commonjs": "^7.19.6", + "@babel/plugin-transform-modules-systemjs": "^7.19.6", + "@babel/plugin-transform-modules-umd": "^7.18.6", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.19.1", + "@babel/plugin-transform-new-target": "^7.18.6", + "@babel/plugin-transform-object-super": "^7.18.6", + "@babel/plugin-transform-parameters": "^7.20.1", + "@babel/plugin-transform-property-literals": "^7.18.6", + "@babel/plugin-transform-regenerator": "^7.18.6", + "@babel/plugin-transform-reserved-words": "^7.18.6", + "@babel/plugin-transform-shorthand-properties": "^7.18.6", + "@babel/plugin-transform-spread": "^7.19.0", + "@babel/plugin-transform-sticky-regex": "^7.18.6", + "@babel/plugin-transform-template-literals": "^7.18.9", + "@babel/plugin-transform-typeof-symbol": "^7.18.9", + "@babel/plugin-transform-unicode-escapes": "^7.18.10", + "@babel/plugin-transform-unicode-regex": "^7.18.6", + "@babel/preset-modules": "^0.1.5", + "@babel/types": "^7.20.2", + "babel-plugin-polyfill-corejs2": "^0.3.3", + "babel-plugin-polyfill-corejs3": "^0.6.0", + "babel-plugin-polyfill-regenerator": "^0.4.1", + "core-js-compat": "^3.25.1", + "semver": "^6.3.0" + }, + "dependencies": { + "@babel/compat-data": { + "version": "7.20.5", + "resolved": "https://registry.npmmirror.com/@babel%2fcompat-data/-/compat-data-7.20.5.tgz", + "integrity": "sha512-KZXo2t10+/jxmkhNXc7pZTqRvSOIvVv/+lJwHS+B2rErwOyjuVRh60yVpb7liQ1U5t7lLJ1bz+t8tSypUZdm0g==", + "dev": true + }, + "@babel/helper-compilation-targets": { + "version": "7.20.0", + "resolved": "https://registry.npmmirror.com/@babel%2fhelper-compilation-targets/-/helper-compilation-targets-7.20.0.tgz", + "integrity": "sha512-0jp//vDGp9e8hZzBc6N/KwA5ZK3Wsm/pfm4CrY7vzegkVxc65SgSn6wYOnwHe9Js9HRQ1YTCKLGPzDtaS3RoLQ==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.20.0", + "@babel/helper-validator-option": "^7.18.6", + "browserslist": "^4.21.3", + "semver": "^6.3.0" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.20.2", + "resolved": "https://registry.npmmirror.com/@babel%2fhelper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", + "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", + "dev": true + }, + "@babel/helper-validator-identifier": { + "version": "7.19.1", + "resolved": "https://registry.npmmirror.com/@babel%2fhelper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", + "dev": true + }, + "@babel/helper-validator-option": { + "version": "7.18.6", + "resolved": "https://registry.npmmirror.com/@babel%2fhelper-validator-option/-/helper-validator-option-7.18.6.tgz", + "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", + "dev": true + }, + "@babel/types": { + "version": "7.20.5", + "resolved": "https://registry.npmmirror.com/@babel%2ftypes/-/types-7.20.5.tgz", + "integrity": "sha512-c9fst/h2/dcF7H+MJKZ2T0KjEQ8hY/BNnDk/H3XY8C4Aw/eWQXWn/lWntHF9ooUBnGmEvbfGrTgLWc+um0YDUg==", + "dev": true, + "requires": { + "@babel/helper-string-parser": "^7.19.4", + "@babel/helper-validator-identifier": "^7.19.1", + "to-fast-properties": "^2.0.0" + } + }, + "browserslist": { + "version": "4.21.4", + "resolved": "https://registry.npmmirror.com/browserslist/-/browserslist-4.21.4.tgz", + "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001400", + "electron-to-chromium": "^1.4.251", + "node-releases": "^2.0.6", + "update-browserslist-db": "^1.0.9" + } + }, + "core-js-compat": { + "version": "3.26.1", + "resolved": "https://registry.npmmirror.com/core-js-compat/-/core-js-compat-3.26.1.tgz", + "integrity": "sha512-622/KzTudvXCDLRw70iHW4KKs1aGpcRcowGWyYJr2DEBfRrd6hNJybxSWJFuZYD4ma86xhrwDDHxmDaIq4EA8A==", + "dev": true, + "requires": { + "browserslist": "^4.21.4" + } + }, + "electron-to-chromium": { + "version": "1.4.284", + "resolved": "https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", + "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==", + "dev": true + }, + "node-releases": { + "version": "2.0.6", + "resolved": "https://registry.npmmirror.com/node-releases/-/node-releases-2.0.6.tgz", + "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", + "dev": true + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmmirror.com/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "@babel/preset-modules": { + "version": "0.1.5", + "resolved": "https://registry.npmmirror.com/@babel%2fpreset-modules/-/preset-modules-0.1.5.tgz", + "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + } + }, + "@babel/preset-typescript": { + "version": "7.18.6", + "resolved": "https://registry.npmmirror.com/@babel%2fpreset-typescript/-/preset-typescript-7.18.6.tgz", + "integrity": "sha512-s9ik86kXBAnD760aybBucdpnLsAt0jK1xqJn2juOn9lkOvSHV60os5hxoVJsPzMQxvnUJFAlkont2DvvaYEBtQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-validator-option": "^7.18.6", + "@babel/plugin-transform-typescript": "^7.18.6" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.19.0", + "resolved": "https://registry.npmmirror.com/@babel%2fhelper-plugin-utils/-/helper-plugin-utils-7.19.0.tgz", + "integrity": "sha512-40Ryx7I8mT+0gaNxm8JGTZFUITNqdLAgdg0hXzeVZxVD6nFsdhQvip6v8dqkRHzsz1VFpFAaOCHNn0vKBL7Czw==", + "dev": true + }, + "@babel/helper-validator-option": { + "version": "7.18.6", + "resolved": "https://registry.npmmirror.com/@babel%2fhelper-validator-option/-/helper-validator-option-7.18.6.tgz", + "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", + "dev": true + } + } + }, + "@babel/runtime": { + "version": "7.10.2", + "resolved": "https://registry.npmmirror.com/@babel/runtime/download/@babel/runtime-7.10.2.tgz", + "integrity": "sha1-0QPyHyYCSX04NIoy4AhjfVBtuDk=", + "dev": true, + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "@babel/template": { + "version": "7.18.10", + "resolved": "https://registry.npmmirror.com/@babel%2ftemplate/-/template-7.18.10.tgz", + "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.18.10", + "@babel/types": "^7.18.10" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.18.6", + "resolved": "https://registry.npmmirror.com/@babel%2fcode-frame/-/code-frame-7.18.6.tgz", + "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "dev": true, + "requires": { + "@babel/highlight": "^7.18.6" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.19.1", + "resolved": "https://registry.npmmirror.com/@babel%2fhelper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", + "dev": true + }, + "@babel/highlight": { + "version": "7.18.6", + "resolved": "https://registry.npmmirror.com/@babel%2fhighlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.18.6", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/types": { + "version": "7.20.0", + "resolved": "https://registry.npmmirror.com/@babel%2ftypes/-/types-7.20.0.tgz", + "integrity": "sha512-Jlgt3H0TajCW164wkTOTzHkZb075tMQMULzrLUoUeKmO7eFL96GgDxf7/Axhc5CAuKE3KFyVW1p6ysKsi2oXAg==", + "dev": true, + "requires": { + "@babel/helper-string-parser": "^7.19.4", + "@babel/helper-validator-identifier": "^7.19.1", + "to-fast-properties": "^2.0.0" + } + } + } + }, + "@babel/traverse": { + "version": "7.20.0", + "resolved": "https://registry.npmmirror.com/@babel%2ftraverse/-/traverse-7.20.0.tgz", + "integrity": "sha512-5+cAXQNARgjRUK0JWu2UBwja4JLSO/rBMPJzpsKb+oBF5xlUuCfljQepS4XypBQoiigL0VQjTZy6WiONtUdScQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.20.0", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.19.0", + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/parser": "^7.20.0", + "@babel/types": "^7.20.0", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.18.6", + "resolved": "https://registry.npmmirror.com/@babel%2fcode-frame/-/code-frame-7.18.6.tgz", + "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "dev": true, + "requires": { + "@babel/highlight": "^7.18.6" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.19.1", + "resolved": "https://registry.npmmirror.com/@babel%2fhelper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", + "dev": true + }, + "@babel/highlight": { + "version": "7.18.6", + "resolved": "https://registry.npmmirror.com/@babel%2fhighlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.18.6", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.20.0", + "resolved": "https://registry.npmmirror.com/@babel%2fparser/-/parser-7.20.0.tgz", + "integrity": "sha512-G9VgAhEaICnz8iiJeGJQyVl6J2nTjbW0xeisva0PK6XcKsga7BIaqm4ZF8Rg1Wbaqmy6znspNqhPaPkyukujzg==", + "dev": true + }, + "@babel/types": { + "version": "7.20.0", + "resolved": "https://registry.npmmirror.com/@babel%2ftypes/-/types-7.20.0.tgz", + "integrity": "sha512-Jlgt3H0TajCW164wkTOTzHkZb075tMQMULzrLUoUeKmO7eFL96GgDxf7/Axhc5CAuKE3KFyVW1p6ysKsi2oXAg==", + "dev": true, + "requires": { + "@babel/helper-string-parser": "^7.19.4", + "@babel/helper-validator-identifier": "^7.19.1", + "to-fast-properties": "^2.0.0" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "@babel/types": { + "version": "7.10.2", + "resolved": "https://registry.npmmirror.com/@babel/types/download/@babel/types-7.10.2.tgz", + "integrity": "sha1-MCg74xytDb9vsAvUBkHKDqZ1Fy0=", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.10.1", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + }, + "@discoveryjs/json-ext": { + "version": "0.5.7", + "resolved": "https://registry.npmmirror.com/@discoveryjs%2fjson-ext/-/json-ext-0.5.7.tgz", + "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", + "dev": true + }, + "@eslint/eslintrc": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/@eslint%2feslintrc/-/eslintrc-1.3.0.tgz", + "integrity": "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.3.2", + "globals": "^13.15.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "globals": { + "version": "13.15.0", + "resolved": "https://registry.npmmirror.com/globals/-/globals-13.15.0.tgz", + "integrity": "sha512-bpzcOlgDhMG070Av0Vy5Owklpv1I6+j96GhUI7Rh7IzDCKLzboflLrrfqMu8NquDbiR4EOQk7XzJwqVJxicxog==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmmirror.com/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true + } + } + }, + "@hapi/address": { + "version": "2.1.4", + "resolved": "https://registry.npmmirror.com/@hapi/address/-/address-2.1.4.tgz", + "integrity": "sha512-QD1PhQk+s31P1ixsX0H0Suoupp3VMXzIVMSwobR3F3MSUO2YCV0B7xqLcUw/Bh8yuvd3LhpyqLQWTNcRmp6IdQ==", + "dev": true + }, + "@hapi/bourne": { + "version": "1.3.2", + "resolved": "https://registry.npmmirror.com/@hapi/bourne/-/bourne-1.3.2.tgz", + "integrity": "sha512-1dVNHT76Uu5N3eJNTYcvxee+jzX4Z9lfciqRRHCU27ihbUcYi+iSc2iml5Ke1LXe1SyJCLA0+14Jh4tXJgOppA==", + "dev": true + }, + "@hapi/hoek": { + "version": "8.5.1", + "resolved": "https://registry.npmmirror.com/@hapi/hoek/-/hoek-8.5.1.tgz", + "integrity": "sha512-yN7kbciD87WzLGc5539Tn0sApjyiGHAJgKvG9W8C7O+6c7qmoQMfVs0W4bX17eqz6C78QJqqFrtgdK5EWf6Qow==", + "dev": true + }, + "@hapi/joi": { + "version": "15.1.1", + "resolved": "https://registry.npmmirror.com/@hapi/joi/-/joi-15.1.1.tgz", + "integrity": "sha512-entf8ZMOK8sc+8YfeOlM8pCfg3b5+WZIKBfUaaJT8UsjAAPjartzxIYm3TIbjvA4u+u++KbcXD38k682nVHDAQ==", + "dev": true, + "requires": { + "@hapi/address": "2.x.x", + "@hapi/bourne": "1.x.x", + "@hapi/hoek": "8.x.x", + "@hapi/topo": "3.x.x" + } + }, + "@hapi/topo": { + "version": "3.1.6", + "resolved": "https://registry.npmmirror.com/@hapi/topo/-/topo-3.1.6.tgz", + "integrity": "sha512-tAag0jEcjwH+P2quUfipd7liWCNX2F8NvYjQp2wtInsZxnMlypdw0FtAOLxtvvkO+GSRRbmNi8m/5y42PQJYCQ==", + "dev": true, + "requires": { + "@hapi/hoek": "^8.3.0" + } + }, + "@humanwhocodes/config-array": { + "version": "0.9.5", + "resolved": "https://registry.npmmirror.com/@humanwhocodes%2fconfig-array/-/config-array-0.9.5.tgz", + "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", + "dev": true, + "requires": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + }, + "dependencies": { + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/@humanwhocodes%2fobject-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, + "@intervolga/optimize-cssnano-plugin": { + "version": "1.0.6", + "resolved": "https://registry.npmmirror.com/@intervolga/optimize-cssnano-plugin/-/optimize-cssnano-plugin-1.0.6.tgz", + "integrity": "sha512-zN69TnSr0viRSU6cEDIcuPcP67QcpQ6uHACg58FiN9PDrU6SLyGW3MR4tiISbYxy1kDWAVPwD+XwQTWE5cigAA==", + "dev": true, + "requires": { + "cssnano": "^4.0.0", + "cssnano-preset-default": "^4.0.0", + "postcss": "^7.0.0" + }, + "dependencies": { + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmmirror.com/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "cosmiconfig": { + "version": "5.2.1", + "resolved": "https://registry.npmmirror.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz", + "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", + "requires": { + "import-fresh": "^2.0.0", + "is-directory": "^0.3.1", + "js-yaml": "^3.13.1", + "parse-json": "^4.0.0" + } + }, + "css-select": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/css-select/-/css-select-2.1.0.tgz", + "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", + "requires": { + "boolbase": "^1.0.0", + "css-what": "^3.2.1", + "domutils": "^1.7.0", + "nth-check": "^1.0.2" + } + }, + "css-tree": { + "version": "1.0.0-alpha.37", + "resolved": "https://registry.npmmirror.com/css-tree/-/css-tree-1.0.0-alpha.37.tgz", + "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", + "requires": { + "mdn-data": "2.0.4", + "source-map": "^0.6.1" + } + }, + "css-what": { + "version": "3.4.2", + "resolved": "https://registry.npmmirror.com/css-what/-/css-what-3.4.2.tgz", + "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==" + }, + "dom-serializer": { + "version": "0.2.2", + "resolved": "https://registry.npmmirror.com/dom-serializer/-/dom-serializer-0.2.2.tgz", + "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "requires": { + "domelementtype": "^2.0.1", + "entities": "^2.0.0" + }, + "dependencies": { + "domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==" + } + } + }, + "domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmmirror.com/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" + }, + "domutils": { + "version": "1.7.0", + "resolved": "https://registry.npmmirror.com/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "requires": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "import-fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/import-fresh/-/import-fresh-2.0.0.tgz", + "integrity": "sha512-eZ5H8rcgYazHbKC3PG4ClHNykCSxtAhxSSEM+2mb+7evD2CKF5V7c0dNum7AdpDh0ZdICwZY9sRSn8f+KH96sg==", + "requires": { + "caller-path": "^2.0.0", + "resolve-from": "^3.0.0" + } + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmmirror.com/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "mdn-data": { + "version": "2.0.4", + "resolved": "https://registry.npmmirror.com/mdn-data/-/mdn-data-2.0.4.tgz", + "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==" + }, + "nth-check": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/nth-check/-/nth-check-1.0.2.tgz", + "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "requires": { + "boolbase": "~1.0.0" + } + }, + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "svgo": { + "version": "1.3.2", + "resolved": "https://registry.npmmirror.com/svgo/-/svgo-1.3.2.tgz", + "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", + "requires": { + "chalk": "^2.4.1", + "coa": "^2.0.2", + "css-select": "^2.0.0", + "css-select-base-adapter": "^0.1.1", + "css-tree": "1.0.0-alpha.37", + "csso": "^4.0.2", + "js-yaml": "^3.13.1", + "mkdirp": "~0.5.1", + "object.values": "^1.1.0", + "sax": "~1.2.4", + "stable": "^0.1.8", + "unquote": "~1.1.1", + "util.promisify": "~1.0.0" + } + } + } + }, + "@jridgewell/gen-mapping": { + "version": "0.1.1", + "resolved": "https://registry.npmmirror.com/@jridgewell%2fgen-mapping/-/gen-mapping-0.1.1.tgz", + "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.0.7", + "resolved": "https://registry.npmmirror.com/@jridgewell%2fresolve-uri/-/resolve-uri-3.0.7.tgz", + "integrity": "sha512-8cXDaBBHOr2pQ7j77Y6Vp5VDT2sIqWyWQ56TjEq4ih/a4iST3dItRe8Q9fp0rrIl9DoKhWQtUQz/YpOxLkXbNA==", + "dev": true + }, + "@jridgewell/set-array": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/@jridgewell%2fset-array/-/set-array-1.1.1.tgz", + "integrity": "sha512-Ct5MqZkLGEXTVmQYbGtx9SVqD2fqwvdubdps5D3djjAkgkKwT918VNOz65pEHFaYTeWcukmJmH5SwsA9Tn2ObQ==", + "dev": true + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.13", + "resolved": "https://registry.npmmirror.com/@jridgewell%2fsourcemap-codec/-/sourcemap-codec-1.4.13.tgz", + "integrity": "sha512-GryiOJmNcWbovBxTfZSF71V/mXbgcV3MewDe3kIMCLyIh5e7SKAeUZs+rMnJ8jkMolZ/4/VsdBmMrw3l+VdZ3w==", + "dev": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmmirror.com/@jridgewell%2ftrace-mapping/-/trace-mapping-0.3.13.tgz", + "integrity": "sha512-o1xbKhp9qnIAoHJSWd6KlCZfqslL4valSF81H8ImioOAxluWYWOpWkpyktY2vnt4tbrX9XYaxovq6cgowaJp2w==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "@just4/dom": { + "version": "0.3.0-beta.2", + "resolved": "https://registry.npmmirror.com/@just4%2fdom/-/dom-0.3.0-beta.2.tgz", + "integrity": "sha512-iBnuw/sDoNcXNm5umc+RncoQ/Oe+6bKhcpcLz8A5Msjgjb8dcUd3C5Rq0RYcdKafrjPh63ZWHMMdHhL3tkQSTw==", + "requires": { + "@just4/util": "^0.2.0-beta.1" + }, + "dependencies": { + "@just4/util": { + "version": "0.2.0-beta.1", + "resolved": "https://registry.npmmirror.com/@just4%2futil/-/util-0.2.0-beta.1.tgz", + "integrity": "sha512-tXFtVV8GwrmXYgUDYHjQHYJcrlxomtTSJMtfeCJMP2AaH/Jb4OWGwwxAn+rQhujnUfJhOHK+xun48DreJLfuVA==" + } + } + }, + "@just4/load-script": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/@just4%2fload-script/-/load-script-1.0.0.tgz", + "integrity": "sha512-fJj67ycUEj8AGh7fEnCbnev+S+/kLRoOkbZ22khyj00SopXMMI9S34aidZ//VOy0dZ67BweMFiZhHR8rltMwdA==", + "requires": { + "@just4/querystring": "^1.0.0", + "@just4/util": "^1.0.0" + } + }, + "@just4/querystring": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/@just4%2fquerystring/-/querystring-1.0.0.tgz", + "integrity": "sha512-lbxu1iG2ceFzkM/4dGxVfsJdyWblGzGvNk2cy2+NDzphFE0Kv3BAEsx/tD58Yzi33+4GyPE9a9pruL3GyifAKw==", + "requires": { + "@just4/util": "^1.0.0" + } + }, + "@just4/storage": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/@just4%2fstorage/-/storage-1.0.0.tgz", + "integrity": "sha512-9OGJd7UaqAcyhAhZXzqjeyVhgrl6nxKiEiO/li4C2hujuH9zoL2B5jm6de5htayQI+tvDV6TYD2TESc8StUqtQ==" + }, + "@just4/ua-info": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/@just4%2fua-info/-/ua-info-1.0.0.tgz", + "integrity": "sha512-ok3RAIsZkt/qPsapFSvAQabD7mLjhUdEUmRQ0eyPoDegqj9YE/oI11buIQZqo1DmoCkee85U0XlxtkibSEF+1g==" + }, + "@just4/util": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/@just4%2futil/-/util-1.0.0.tgz", + "integrity": "sha512-9nyLGBRnP7NfoPQDeCvq+DJpsCQtVQ3rg5U1cf4QSWauNRupftH+yHcb4IvPrmMlvSYXNzwv3D9V00VBkQtrng==" + }, + "@just4/virtual-list": { + "version": "0.8.0-beta.2", + "resolved": "https://registry.npmmirror.com/@just4%2fvirtual-list/-/virtual-list-0.8.0-beta.2.tgz", + "integrity": "sha512-31VqqcWSxN7dYQuVoyX878Kg9NOpUIlQtYQwj7cYbURilygk2n4peuN050bf8CXTZgv5cV+n5pbC5a6MxOjgiw==", + "requires": { + "@just4/dom": "^0.3.0-beta.2", + "@just4/util": "^0.2.0-beta.1", + "eventemitter3": "^4.0.7" + }, + "dependencies": { + "@just4/util": { + "version": "0.2.0-beta.1", + "resolved": "https://registry.npmmirror.com/@just4%2futil/-/util-0.2.0-beta.1.tgz", + "integrity": "sha512-tXFtVV8GwrmXYgUDYHjQHYJcrlxomtTSJMtfeCJMP2AaH/Jb4OWGwwxAn+rQhujnUfJhOHK+xun48DreJLfuVA==" + } + } + }, + "@mrmlnc/readdir-enhanced": { + "version": "2.2.1", + "resolved": "https://registry.npmmirror.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz", + "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==", + "dev": true, + "requires": { + "call-me-maybe": "^1.0.1", + "glob-to-regexp": "^0.3.0" + } + }, + "@nicolo-ribaudo/eslint-scope-5-internals": { + "version": "5.1.1-v1", + "resolved": "https://registry.npmmirror.com/@nicolo-ribaudo%2feslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz", + "integrity": "sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==", + "dev": true, + "requires": { + "eslint-scope": "5.1.1" + } + }, + "@node-ipc/js-queue": { + "version": "2.0.3", + "resolved": "https://registry.npmmirror.com/@node-ipc/js-queue/-/js-queue-2.0.3.tgz", + "integrity": "sha512-fL1wpr8hhD5gT2dA1qifeVaoDFlQR5es8tFuKqjHX+kdOtdNHnxkVZbtIrR2rxnMFvehkjaZRNV2H/gPXlb0hw==", + "dev": true, + "requires": { + "easy-stack": "1.0.1" + } + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmmirror.com/@nodelib%2ffs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmmirror.com/@nodelib%2ffs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmmirror.com/@nodelib%2ffs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@polka/url": { + "version": "1.0.0-next.21", + "resolved": "https://registry.npmmirror.com/@polka%2furl/-/url-1.0.0-next.21.tgz", + "integrity": "sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==", + "dev": true + }, + "@polyv/emotion-sdk": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/@polyv%2femotion-sdk/-/emotion-sdk-2.3.0.tgz", + "integrity": "sha512-bPZMW8BgFCJ54bZiYudDnTdNYWJQXYDydwFMkAWUVJFveWvWnL30HxJGSXpJabzMrPq7Vh2m58b1yddmmk4pZw==" + }, + "@polyv/eslint-config": { + "version": "0.4.0-beta.1", + "resolved": "https://registry.npmmirror.com/@polyv%2feslint-config/-/eslint-config-0.4.0-beta.1.tgz", + "integrity": "sha512-fMOTyaBI5N2ZHPOICEI0LTxgEKukreEV48yTtRIT7UolzmsBNIW0Mj6FxwT8kxPTa5qIJt1e6KdgoMBLHx2wxA==", + "dev": true, + "requires": { + "@babel/eslint-parser": "^7.19.1", + "@typescript-eslint/eslint-plugin": "^5.46.0", + "@typescript-eslint/parser": "^5.46.0", + "@vue/eslint-config-standard": "^6.1.0", + "eslint-plugin-import": "^2.26.0", + "eslint-plugin-node": "^11.1.0", + "eslint-plugin-promise": "^6.1.1", + "eslint-plugin-sonarjs": "^0.17.0", + "eslint-plugin-vue": "^9.8.0", + "vue-eslint-parser": "^9.1.0" + } + }, + "@polyv/icons-cli": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/@polyv%2ficons-cli/-/icons-cli-1.2.0.tgz", + "integrity": "sha512-XTrrT1uW3m0MZWMhYJ+gATDQyzGrqBjCncXPjCxRoYu62L7m0MlNUWrcY3YJghqKusOMET9JE4qtn2Pg4JqTVQ==", + "dev": true, + "requires": { + "camelcase": "^6.3.0", + "chalk": "^4.0.0", + "commander": "^9.3.0", + "fast-glob": "^3.2.11", + "fs-extra": "^10.0.1", + "prettier": "^2.5.1", + "rimraf": "^3.0.2", + "svgo": "^2.8.0", + "tinycolor2": "^1.4.2" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmmirror.com/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "commander": { + "version": "9.5.0", + "resolved": "https://registry.npmmirror.com/commander/-/commander-9.5.0.tgz", + "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", + "dev": true + }, + "fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmmirror.com/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmmirror.com/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmmirror.com/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + } + } + }, + "@polyv/icons-vue": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/@polyv%2ficons-vue/-/icons-vue-1.2.0.tgz", + "integrity": "sha512-XmQuHXJtp9FBlcmIQD3odyRgVPITZRsnfwQpxyPdn8ShGnWzpxxLsvHx22Zy0Rg0fr2wCMmJ0Kg61qQ1EjQ/DA==" + }, + "@polyv/live-watch-sdk": { + "version": "0.1.0", + "resolved": "https://registry.npmmirror.com/@polyv%2flive-watch-sdk/-/live-watch-sdk-0.1.0.tgz", + "integrity": "sha512-IIdsCKirpzUxXqgW/bpF+EG8iitgZeQST3BUFSdQf7KrolKYlO6hH+5LH0bcm4SRufcIUfz0/nTYXUdGvLv7TQ==" + }, + "@polyv/polyv-ui": { + "version": "2.24.0", + "resolved": "https://registry.npmmirror.com/@polyv%2fpolyv-ui/-/polyv-ui-2.24.0.tgz", + "integrity": "sha512-kXsGtoAuQ255v/KGmJbcbQ3Gnhwdr2YjncPfzBBrCH1d0VevylAWVYq1wwK3VFF9eAlDEwbWBG6L0Bk+9mmZ+Q==" + }, + "@polyv/utils": { + "version": "2.0.0-beta.5", + "resolved": "https://registry.npmmirror.com/@polyv%2futils/-/utils-2.0.0-beta.5.tgz", + "integrity": "sha512-5rnJb4v4G7MgkHdNyrsV7gqGsz4w57SGbxQE9tzlkAkFCyKbMs/VKiu0+Jd95RkRVoQkukqE2wYPuLwXpIiROA==" + }, + "@polyv/web-view-bridge": { + "version": "0.1.0-webview-app.8", + "resolved": "https://registry.npmmirror.com/@polyv%2fweb-view-bridge/-/web-view-bridge-0.1.0-webview-app.8.tgz", + "integrity": "sha512-/RE/c4jSgViWaDMZLciGs0Vj/KspXnELhzo4wA/ITIILi0sqvp8a9ib5iVGuGu8qzjQ85nWm3oVlIrxtdTsO5A==", + "requires": { + "events": "^3.3.0", + "url-search-params-polyfill": "^8.1.0" + } + }, + "@popperjs/core": { + "version": "2.11.4", + "resolved": "https://registry.npmmirror.com/@popperjs%2fcore/-/core-2.11.4.tgz", + "integrity": "sha512-q/ytXxO5NKvyT37pmisQAItCFqA7FD/vNb8dgaJy3/630Fsc+Mz9/9f2SziBoIZ30TJooXyTwZmhi1zjXmObYg==" + }, + "@soda/friendly-errors-webpack-plugin": { + "version": "1.8.1", + "resolved": "https://registry.npmmirror.com/@soda/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-1.8.1.tgz", + "integrity": "sha512-h2ooWqP8XuFqTXT+NyAFbrArzfQA7R6HTezADrvD9Re8fxMLTPPniLdqVTdDaO0eIoLaAwKT+d6w+5GeTk7Vbg==", + "dev": true, + "requires": { + "chalk": "^3.0.0", + "error-stack-parser": "^2.0.6", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@soda/get-current-script": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/@soda/get-current-script/-/get-current-script-1.0.2.tgz", + "integrity": "sha512-T7VNNlYVM1SgQ+VsMYhnDkcGmWhQdL0bDyGm5TlQ3GBXnJscEClUUOKduWTmm2zCnvNLC1hc3JpuXjs/nFOc5w==", + "dev": true + }, + "@stylelint/postcss-css-in-js": { + "version": "0.37.3", + "resolved": "https://registry.npmmirror.com/@stylelint%2fpostcss-css-in-js/-/postcss-css-in-js-0.37.3.tgz", + "integrity": "sha512-scLk3cSH1H9KggSniseb2KNAU5D9FWc3H7BxCSAIdtU9OWIyw0zkEZ9qEKHryRM+SExYXRKNb7tOOVNAsQ3iwg==", + "dev": true, + "requires": { + "@babel/core": "^7.17.9" + } + }, + "@stylelint/postcss-markdown": { + "version": "0.36.2", + "resolved": "https://registry.npmmirror.com/@stylelint%2fpostcss-markdown/-/postcss-markdown-0.36.2.tgz", + "integrity": "sha512-2kGbqUVJUGE8dM+bMzXG/PYUWKkjLIkRLWNh39OaADkiabDRdw8ATFCgbMz5xdIcvwspPAluSL7uY+ZiTWdWmQ==", + "dev": true, + "requires": { + "remark": "^13.0.0", + "unist-util-find-all-after": "^3.0.2" + } + }, + "@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/@tootallnate%2fonce/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "dev": true + }, + "@trysound/sax": { + "version": "0.2.0", + "resolved": "https://registry.npmmirror.com/@trysound%2fsax/-/sax-0.2.0.tgz", + "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", + "dev": true + }, + "@types/body-parser": { + "version": "1.19.2", + "resolved": "https://registry.npmmirror.com/@types/body-parser/-/body-parser-1.19.2.tgz", + "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", + "dev": true, + "requires": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "@types/connect": { + "version": "3.4.35", + "resolved": "https://registry.npmmirror.com/@types/connect/-/connect-3.4.35.tgz", + "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/connect-history-api-fallback": { + "version": "1.3.5", + "resolved": "https://registry.npmmirror.com/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz", + "integrity": "sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw==", + "dev": true, + "requires": { + "@types/express-serve-static-core": "*", + "@types/node": "*" + } + }, + "@types/eslint": { + "version": "7.29.0", + "resolved": "https://registry.npmmirror.com/@types%2feslint/-/eslint-7.29.0.tgz", + "integrity": "sha512-VNcvioYDH8/FxaeTKkM4/TiTwt6pBV9E3OfGmvaw8tPl0rrHCJ4Ll15HRT+pMiFAf/MLQvAzC+6RzUMEL9Ceng==", + "dev": true, + "requires": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "@types/estree": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/@types%2festree/-/estree-1.0.0.tgz", + "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==", + "dev": true + }, + "@types/express": { + "version": "4.17.14", + "resolved": "https://registry.npmmirror.com/@types/express/-/express-4.17.14.tgz", + "integrity": "sha512-TEbt+vaPFQ+xpxFLFssxUDXj5cWCxZJjIcB7Yg0k0GMHGtgtQgpvx/MUQUeAkNbA9AAGrwkAsoeItdTgS7FMyg==", + "dev": true, + "requires": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.18", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "@types/express-serve-static-core": { + "version": "4.17.31", + "resolved": "https://registry.npmmirror.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.31.tgz", + "integrity": "sha512-DxMhY+NAsTwMMFHBTtJFNp5qiHKJ7TeqOo23zVEM9alT1Ml27Q3xcTH0xwxn7Q0BbMcVEJOs/7aQtUWupUQN3Q==", + "dev": true, + "requires": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*" + } + }, + "@types/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmmirror.com/@types%2fglob/-/glob-7.2.0.tgz", + "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", + "dev": true, + "requires": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "@types/http-proxy": { + "version": "1.17.9", + "resolved": "https://registry.npmmirror.com/@types/http-proxy/-/http-proxy-1.17.9.tgz", + "integrity": "sha512-QsbSjA/fSk7xB+UXlCT3wHBy5ai9wOcNDWwZAtud+jXhwOM3l+EYZh8Lng4+/6n8uar0J7xILzqftJdJ/Wdfkw==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/json-schema": { + "version": "7.0.11", + "resolved": "https://registry.npmmirror.com/@types%2fjson-schema/-/json-schema-7.0.11.tgz", + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", + "dev": true + }, + "@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmmirror.com/@types%2fjson5/-/json5-0.0.29.tgz", + "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", + "dev": true + }, + "@types/lodash": { + "version": "4.14.182", + "resolved": "https://registry.npmmirror.com/@types%2flodash/-/lodash-4.14.182.tgz", + "integrity": "sha512-/THyiqyQAP9AfARo4pF+aCGcyiQ94tX/Is2I7HofNRqoYLgN1PBoOWu2/zTA5zMxzP5EFutMtWtGAFRKUe961Q==", + "dev": true + }, + "@types/lodash-es": { + "version": "4.17.6", + "resolved": "https://registry.npmmirror.com/@types%2flodash-es/-/lodash-es-4.17.6.tgz", + "integrity": "sha512-R+zTeVUKDdfoRxpAryaQNRKk3105Rrgx2CFRClIgRGaqDTdjsm8h6IYA8ir584W3ePzkZfst5xIgDwYrlh9HLg==", + "dev": true, + "requires": { + "@types/lodash": "*" + } + }, + "@types/mdast": { + "version": "3.0.10", + "resolved": "https://registry.npmmirror.com/@types%2fmdast/-/mdast-3.0.10.tgz", + "integrity": "sha512-W864tg/Osz1+9f4lrGTZpCSO5/z4608eUp19tbozkq2HJK6i3z1kT0H9tlADXuYIb1YYOBByU4Jsqkk75q48qA==", + "dev": true, + "requires": { + "@types/unist": "*" + } + }, + "@types/mime": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/@types/mime/-/mime-3.0.1.tgz", + "integrity": "sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==", + "dev": true + }, + "@types/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmmirror.com/@types%2fminimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", + "dev": true + }, + "@types/minimist": { + "version": "1.2.2", + "resolved": "https://registry.npmmirror.com/@types%2fminimist/-/minimist-1.2.2.tgz", + "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", + "dev": true + }, + "@types/node": { + "version": "17.0.40", + "resolved": "https://registry.npmmirror.com/@types%2fnode/-/node-17.0.40.tgz", + "integrity": "sha512-UXdBxNGqTMtm7hCwh9HtncFVLrXoqA3oJW30j6XWp5BH/wu3mVeaxo7cq5benFdBw34HB3XDT2TRPI7rXZ+mDg==", + "dev": true + }, + "@types/normalize-package-data": { + "version": "2.4.0", + "resolved": "https://registry.npmmirror.com/@types/normalize-package-data/download/@types/normalize-package-data-2.4.0.tgz", + "integrity": "sha1-5IbQ2XOW15vu3QpuM/RTT/a0lz4=", + "dev": true + }, + "@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/@types%2fparse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", + "dev": true + }, + "@types/q": { + "version": "1.5.5", + "resolved": "https://registry.npmmirror.com/@types/q/-/q-1.5.5.tgz", + "integrity": "sha512-L28j2FcJfSZOnL1WBjDYp2vUHCeIFlyYI/53EwD/rKUBQ7MtUUfbQWiyKJGpcnv4/WgrhWsFKrcPstcAt/J0tQ==" + }, + "@types/qs": { + "version": "6.9.7", + "resolved": "https://registry.npmmirror.com/@types/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", + "dev": true + }, + "@types/range-parser": { + "version": "1.2.4", + "resolved": "https://registry.npmmirror.com/@types/range-parser/-/range-parser-1.2.4.tgz", + "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", + "dev": true + }, + "@types/semver": { + "version": "7.3.13", + "resolved": "https://registry.npmmirror.com/@types%2fsemver/-/semver-7.3.13.tgz", + "integrity": "sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==", + "dev": true + }, + "@types/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmmirror.com/@types/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg==", + "dev": true, + "requires": { + "@types/mime": "*", + "@types/node": "*" + } + }, + "@types/source-list-map": { + "version": "0.1.2", + "resolved": "https://registry.npmmirror.com/@types%2fsource-list-map/-/source-list-map-0.1.2.tgz", + "integrity": "sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA==", + "dev": true + }, + "@types/tapable": { + "version": "1.0.8", + "resolved": "https://registry.npmmirror.com/@types%2ftapable/-/tapable-1.0.8.tgz", + "integrity": "sha512-ipixuVrh2OdNmauvtT51o3d8z12p6LtFW9in7U79der/kwejjdNchQC5UMn5u/KxNoM7VHHOs/l8KS8uHxhODQ==", + "dev": true + }, + "@types/uglify-js": { + "version": "3.13.3", + "resolved": "https://registry.npmmirror.com/@types%2fuglify-js/-/uglify-js-3.13.3.tgz", + "integrity": "sha512-9dmBYXt/rKxedUXfCvXSxyiPvpDXLkiRlv17DnqdhS+pRustL1967rI1jZVt1xysTO+xJGMoZzcy3cWC9+b6Tw==", + "dev": true, + "requires": { + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "@types/unist": { + "version": "2.0.6", + "resolved": "https://registry.npmmirror.com/@types%2funist/-/unist-2.0.6.tgz", + "integrity": "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==", + "dev": true + }, + "@types/webpack": { + "version": "4.41.32", + "resolved": "https://registry.npmmirror.com/@types%2fwebpack/-/webpack-4.41.32.tgz", + "integrity": "sha512-cb+0ioil/7oz5//7tZUSwbrSAN/NWHrQylz5cW8G0dWTcF/g+/dSdMlKVZspBYuMAN1+WnwHrkxiRrLcwd0Heg==", + "dev": true, + "requires": { + "@types/node": "*", + "@types/tapable": "^1", + "@types/uglify-js": "*", + "@types/webpack-sources": "*", + "anymatch": "^3.0.0", + "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "@types/webpack-dev-server": { + "version": "3.11.6", + "resolved": "https://registry.npmmirror.com/@types/webpack-dev-server/-/webpack-dev-server-3.11.6.tgz", + "integrity": "sha512-XCph0RiiqFGetukCTC3KVnY1jwLcZ84illFRMbyFzCcWl90B/76ew0tSqF46oBhnLC4obNDG7dMO0JfTN0MgMQ==", + "dev": true, + "requires": { + "@types/connect-history-api-fallback": "*", + "@types/express": "*", + "@types/serve-static": "*", + "@types/webpack": "^4", + "http-proxy-middleware": "^1.0.0" + }, + "dependencies": { + "http-proxy-middleware": { + "version": "1.3.1", + "resolved": "https://registry.npmmirror.com/http-proxy-middleware/-/http-proxy-middleware-1.3.1.tgz", + "integrity": "sha512-13eVVDYS4z79w7f1+NPllJtOQFx/FdUW4btIvVRMaRlUY9VGstAbo5MOhLEuUgZFRHn3x50ufn25zkj/boZnEg==", + "dev": true, + "requires": { + "@types/http-proxy": "^1.17.5", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" + } + }, + "is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "dev": true + } + } + }, + "@types/webpack-sources": { + "version": "3.2.0", + "resolved": "https://registry.npmmirror.com/@types%2fwebpack-sources/-/webpack-sources-3.2.0.tgz", + "integrity": "sha512-Ft7YH3lEVRQ6ls8k4Ff1oB4jN6oy/XmU6tQISKdhfh+1mR+viZFphS6WL0IrtDOzvefmJg5a0s7ZQoRXwqTEFg==", + "dev": true, + "requires": { + "@types/node": "*", + "@types/source-list-map": "*", + "source-map": "^0.7.3" + }, + "dependencies": { + "source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true + } + } + }, + "@typescript-eslint/eslint-plugin": { + "version": "5.46.0", + "resolved": "https://registry.npmmirror.com/@typescript-eslint%2feslint-plugin/-/eslint-plugin-5.46.0.tgz", + "integrity": "sha512-QrZqaIOzJAjv0sfjY4EjbXUi3ZOFpKfzntx22gPGr9pmFcTjcFw/1sS1LJhEubfAGwuLjNrPV0rH+D1/XZFy7Q==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "5.46.0", + "@typescript-eslint/type-utils": "5.46.0", + "@typescript-eslint/utils": "5.46.0", + "debug": "^4.3.4", + "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", + "regexpp": "^3.2.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "semver": { + "version": "7.3.8", + "resolved": "https://registry.npmmirror.com/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "@typescript-eslint/parser": { + "version": "5.46.0", + "resolved": "https://registry.npmmirror.com/@typescript-eslint%2fparser/-/parser-5.46.0.tgz", + "integrity": "sha512-joNO6zMGUZg+C73vwrKXCd8usnsmOYmgW/w5ZW0pG0RGvqeznjtGDk61EqqTpNrFLUYBW2RSBFrxdAZMqA4OZA==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "5.46.0", + "@typescript-eslint/types": "5.46.0", + "@typescript-eslint/typescript-estree": "5.46.0", + "debug": "^4.3.4" + }, + "dependencies": { + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "@typescript-eslint/scope-manager": { + "version": "5.46.0", + "resolved": "https://registry.npmmirror.com/@typescript-eslint%2fscope-manager/-/scope-manager-5.46.0.tgz", + "integrity": "sha512-7wWBq9d/GbPiIM6SqPK9tfynNxVbfpihoY5cSFMer19OYUA3l4powA2uv0AV2eAZV6KoAh6lkzxv4PoxOLh1oA==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.46.0", + "@typescript-eslint/visitor-keys": "5.46.0" + } + }, + "@typescript-eslint/type-utils": { + "version": "5.46.0", + "resolved": "https://registry.npmmirror.com/@typescript-eslint%2ftype-utils/-/type-utils-5.46.0.tgz", + "integrity": "sha512-dwv4nimVIAsVS2dTA0MekkWaRnoYNXY26dKz8AN5W3cBFYwYGFQEqm/cG+TOoooKlncJS4RTbFKgcFY/pOiBCg==", + "dev": true, + "requires": { + "@typescript-eslint/typescript-estree": "5.46.0", + "@typescript-eslint/utils": "5.46.0", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + }, + "dependencies": { + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "@typescript-eslint/types": { + "version": "5.46.0", + "resolved": "https://registry.npmmirror.com/@typescript-eslint%2ftypes/-/types-5.46.0.tgz", + "integrity": "sha512-wHWgQHFB+qh6bu0IAPAJCdeCdI0wwzZnnWThlmHNY01XJ9Z97oKqKOzWYpR2I83QmshhQJl6LDM9TqMiMwJBTw==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "5.46.0", + "resolved": "https://registry.npmmirror.com/@typescript-eslint%2ftypescript-estree/-/typescript-estree-5.46.0.tgz", + "integrity": "sha512-kDLNn/tQP+Yp8Ro2dUpyyVV0Ksn2rmpPpB0/3MO874RNmXtypMwSeazjEN/Q6CTp8D7ExXAAekPEcCEB/vtJkw==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.46.0", + "@typescript-eslint/visitor-keys": "5.46.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "dependencies": { + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "semver": { + "version": "7.3.8", + "resolved": "https://registry.npmmirror.com/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "@typescript-eslint/utils": { + "version": "5.46.0", + "resolved": "https://registry.npmmirror.com/@typescript-eslint%2futils/-/utils-5.46.0.tgz", + "integrity": "sha512-4O+Ps1CRDw+D+R40JYh5GlKLQERXRKW5yIQoNDpmXPJ+C7kaPF9R7GWl+PxGgXjB3PQCqsaaZUpZ9dG4U6DO7g==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.46.0", + "@typescript-eslint/types": "5.46.0", + "@typescript-eslint/typescript-estree": "5.46.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0", + "semver": "^7.3.7" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.3.8", + "resolved": "https://registry.npmmirror.com/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "@typescript-eslint/visitor-keys": { + "version": "5.46.0", + "resolved": "https://registry.npmmirror.com/@typescript-eslint%2fvisitor-keys/-/visitor-keys-5.46.0.tgz", + "integrity": "sha512-E13gBoIXmaNhwjipuvQg1ByqSAu/GbEpP/qzFihugJ+MomtoJtFAJG/+2DRPByf57B863m0/q7Zt16V9ohhANw==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.46.0", + "eslint-visitor-keys": "^3.3.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmmirror.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "dev": true + } + } + }, + "@volar/language-core": { + "version": "1.0.24", + "resolved": "https://registry.npmmirror.com/@volar/language-core/-/language-core-1.0.24.tgz", + "integrity": "sha512-vTN+alJiWwK0Pax6POqrmevbtFW2dXhjwWiW/MW4f48eDYPLdyURWcr8TixO7EN/nHsUBj2udT7igFKPtjyAKg==", + "dev": true, + "requires": { + "@volar/source-map": "1.0.24", + "muggle-string": "^0.1.0" + } + }, + "@volar/source-map": { + "version": "1.0.24", + "resolved": "https://registry.npmmirror.com/@volar/source-map/-/source-map-1.0.24.tgz", + "integrity": "sha512-Qsv/tkplx18pgBr8lKAbM1vcDqgkGKQzbChg6NW+v0CZc3G7FLmK+WrqEPzKlN7Cwdc6XVL559Nod8WKAfKr4A==", + "dev": true, + "requires": { + "muggle-string": "^0.1.0" + } + }, + "@volar/typescript": { + "version": "1.0.24", + "resolved": "https://registry.npmmirror.com/@volar/typescript/-/typescript-1.0.24.tgz", + "integrity": "sha512-f8hCSk+PfKR1/RQHxZ79V1NpDImHoivqoizK+mstphm25tn/YJ/JnKNjZHB+o21fuW0yKlI26NV3jkVb2Cc/7A==", + "dev": true, + "requires": { + "@volar/language-core": "1.0.24" + } + }, + "@volar/vue-language-core": { + "version": "1.0.24", + "resolved": "https://registry.npmmirror.com/@volar/vue-language-core/-/vue-language-core-1.0.24.tgz", + "integrity": "sha512-2NTJzSgrwKu6uYwPqLiTMuAzi7fAY3yFy5PJ255bGJc82If0Xr+cW8pC80vpjG0D/aVLmlwAdO4+Ya2BI8GdDg==", + "dev": true, + "requires": { + "@volar/language-core": "1.0.24", + "@volar/source-map": "1.0.24", + "@vue/compiler-dom": "^3.2.45", + "@vue/compiler-sfc": "^3.2.45", + "@vue/reactivity": "^3.2.45", + "@vue/shared": "^3.2.45", + "minimatch": "^5.1.1", + "vue-template-compiler": "^2.7.14" + }, + "dependencies": { + "@vue/compiler-sfc": { + "version": "3.2.47", + "resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.2.47.tgz", + "integrity": "sha512-rog05W+2IFfxjMcFw10tM9+f7i/+FFpZJJ5XHX72NP9eC2uRD+42M3pYcQqDXVYoj74kHMSEdQ/WmCjt8JFksQ==", + "dev": true, + "requires": { + "@babel/parser": "^7.16.4", + "@vue/compiler-core": "3.2.47", + "@vue/compiler-dom": "3.2.47", + "@vue/compiler-ssr": "3.2.47", + "@vue/reactivity-transform": "3.2.47", + "@vue/shared": "3.2.47", + "estree-walker": "^2.0.2", + "magic-string": "^0.25.7", + "postcss": "^8.1.10", + "source-map": "^0.6.1" + } + }, + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "@volar/vue-typescript": { + "version": "1.0.24", + "resolved": "https://registry.npmmirror.com/@volar/vue-typescript/-/vue-typescript-1.0.24.tgz", + "integrity": "sha512-9a25oHDvGaNC0okRS47uqJI6FxY4hUQZUsxeOUFHcqVxZEv8s17LPuP/pMMXyz7jPygrZubB/qXqHY5jEu/akA==", + "dev": true, + "requires": { + "@volar/typescript": "1.0.24", + "@volar/vue-language-core": "1.0.24" + } + }, + "@vue/babel-helper-vue-jsx-merge-props": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/@vue%2fbabel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-1.2.1.tgz", + "integrity": "sha512-QOi5OW45e2R20VygMSNhyQHvpdUwQZqGPc748JLGCYEy+yp8fNFNdbNIGAgZmi9e+2JHPd6i6idRuqivyicIkA==", + "dev": true + }, + "@vue/babel-helper-vue-transform-on": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/@vue/babel-helper-vue-transform-on/-/babel-helper-vue-transform-on-1.0.2.tgz", + "integrity": "sha512-hz4R8tS5jMn8lDq6iD+yWL6XNB699pGIVLk7WSJnn1dbpjaazsjZQkieJoRX6gW5zpYSCFqQ7jUquPNY65tQYA==", + "dev": true + }, + "@vue/babel-plugin-jsx": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/@vue/babel-plugin-jsx/-/babel-plugin-jsx-1.1.1.tgz", + "integrity": "sha512-j2uVfZjnB5+zkcbc/zsOc0fSNGCMMjaEXP52wdwdIfn0qjFfEYpYZBFKFg+HHnQeJCVrjOeO0YxgaL7DMrym9w==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.0.0", + "@babel/plugin-syntax-jsx": "^7.0.0", + "@babel/template": "^7.0.0", + "@babel/traverse": "^7.0.0", + "@babel/types": "^7.0.0", + "@vue/babel-helper-vue-transform-on": "^1.0.2", + "camelcase": "^6.0.0", + "html-tags": "^3.1.0", + "svg-tags": "^1.0.0" + }, + "dependencies": { + "camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmmirror.com/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true + }, + "html-tags": { + "version": "3.2.0", + "resolved": "https://registry.npmmirror.com/html-tags/-/html-tags-3.2.0.tgz", + "integrity": "sha512-vy7ClnArOZwCnqZgvv+ddgHgJiAFXe3Ge9ML5/mBctVJoUoYPCdxVucOywjDARn6CVoh3dRSFdPHy2sX80L0Wg==", + "dev": true + } + } + }, + "@vue/babel-plugin-transform-vue-jsx": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/@vue%2fbabel-plugin-transform-vue-jsx/-/babel-plugin-transform-vue-jsx-1.2.1.tgz", + "integrity": "sha512-HJuqwACYehQwh1fNT8f4kyzqlNMpBuUK4rSiSES5D4QsYncv5fxFsLyrxFPG2ksO7t5WP+Vgix6tt6yKClwPzA==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.0.0", + "@babel/plugin-syntax-jsx": "^7.2.0", + "@vue/babel-helper-vue-jsx-merge-props": "^1.2.1", + "html-tags": "^2.0.0", + "lodash.kebabcase": "^4.1.1", + "svg-tags": "^1.0.0" + } + }, + "@vue/babel-preset-app": { + "version": "4.5.19", + "resolved": "https://registry.npmmirror.com/@vue/babel-preset-app/-/babel-preset-app-4.5.19.tgz", + "integrity": "sha512-VCNRiAt2P/bLo09rYt3DLe6xXUMlhJwrvU18Ddd/lYJgC7s8+wvhgYs+MTx4OiAXdu58drGwSBO9SPx7C6J82Q==", + "dev": true, + "requires": { + "@babel/core": "^7.11.0", + "@babel/helper-compilation-targets": "^7.9.6", + "@babel/helper-module-imports": "^7.8.3", + "@babel/plugin-proposal-class-properties": "^7.8.3", + "@babel/plugin-proposal-decorators": "^7.8.3", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-jsx": "^7.8.3", + "@babel/plugin-transform-runtime": "^7.11.0", + "@babel/preset-env": "^7.11.0", + "@babel/runtime": "^7.11.0", + "@vue/babel-plugin-jsx": "^1.0.3", + "@vue/babel-preset-jsx": "^1.2.4", + "babel-plugin-dynamic-import-node": "^2.3.3", + "core-js": "^3.6.5", + "core-js-compat": "^3.6.5", + "semver": "^6.1.0" + }, + "dependencies": { + "@babel/runtime": { + "version": "7.20.1", + "resolved": "https://registry.npmmirror.com/@babel/runtime/-/runtime-7.20.1.tgz", + "integrity": "sha512-mrzLkl6U9YLF8qpqI7TB82PESyEGjm/0Ly91jG575eVxMMlb8fYfOXFZIJ8XfLrJZQbm7dlKry2bJmXBUEkdFg==", + "dev": true, + "requires": { + "regenerator-runtime": "^0.13.10" + } + }, + "regenerator-runtime": { + "version": "0.13.10", + "resolved": "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.13.10.tgz", + "integrity": "sha512-KepLsg4dU12hryUO7bp/axHAKvwGOCV0sGloQtpagJ12ai+ojVDqkeGSiRX1zlq+kjIMZ1t7gpze+26QqtdGqw==", + "dev": true + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmmirror.com/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "@vue/babel-preset-jsx": { + "version": "1.2.4", + "resolved": "https://registry.npmmirror.com/@vue%2fbabel-preset-jsx/-/babel-preset-jsx-1.2.4.tgz", + "integrity": "sha512-oRVnmN2a77bYDJzeGSt92AuHXbkIxbf/XXSE3klINnh9AXBmVS1DGa1f0d+dDYpLfsAKElMnqKTQfKn7obcL4w==", + "dev": true, + "requires": { + "@vue/babel-helper-vue-jsx-merge-props": "^1.2.1", + "@vue/babel-plugin-transform-vue-jsx": "^1.2.1", + "@vue/babel-sugar-composition-api-inject-h": "^1.2.1", + "@vue/babel-sugar-composition-api-render-instance": "^1.2.4", + "@vue/babel-sugar-functional-vue": "^1.2.2", + "@vue/babel-sugar-inject-h": "^1.2.2", + "@vue/babel-sugar-v-model": "^1.2.3", + "@vue/babel-sugar-v-on": "^1.2.3" + } + }, + "@vue/babel-sugar-composition-api-inject-h": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/@vue%2fbabel-sugar-composition-api-inject-h/-/babel-sugar-composition-api-inject-h-1.2.1.tgz", + "integrity": "sha512-4B3L5Z2G+7s+9Bwbf+zPIifkFNcKth7fQwekVbnOA3cr3Pq71q71goWr97sk4/yyzH8phfe5ODVzEjX7HU7ItQ==", + "dev": true, + "requires": { + "@babel/plugin-syntax-jsx": "^7.2.0" + } + }, + "@vue/babel-sugar-composition-api-render-instance": { + "version": "1.2.4", + "resolved": "https://registry.npmmirror.com/@vue%2fbabel-sugar-composition-api-render-instance/-/babel-sugar-composition-api-render-instance-1.2.4.tgz", + "integrity": "sha512-joha4PZznQMsxQYXtR3MnTgCASC9u3zt9KfBxIeuI5g2gscpTsSKRDzWQt4aqNIpx6cv8On7/m6zmmovlNsG7Q==", + "dev": true, + "requires": { + "@babel/plugin-syntax-jsx": "^7.2.0" + } + }, + "@vue/babel-sugar-functional-vue": { + "version": "1.2.2", + "resolved": "https://registry.npmmirror.com/@vue%2fbabel-sugar-functional-vue/-/babel-sugar-functional-vue-1.2.2.tgz", + "integrity": "sha512-JvbgGn1bjCLByIAU1VOoepHQ1vFsroSA/QkzdiSs657V79q6OwEWLCQtQnEXD/rLTA8rRit4rMOhFpbjRFm82w==", + "dev": true, + "requires": { + "@babel/plugin-syntax-jsx": "^7.2.0" + } + }, + "@vue/babel-sugar-inject-h": { + "version": "1.2.2", + "resolved": "https://registry.npmmirror.com/@vue%2fbabel-sugar-inject-h/-/babel-sugar-inject-h-1.2.2.tgz", + "integrity": "sha512-y8vTo00oRkzQTgufeotjCLPAvlhnpSkcHFEp60+LJUwygGcd5Chrpn5480AQp/thrxVm8m2ifAk0LyFel9oCnw==", + "dev": true, + "requires": { + "@babel/plugin-syntax-jsx": "^7.2.0" + } + }, + "@vue/babel-sugar-v-model": { + "version": "1.2.3", + "resolved": "https://registry.npmmirror.com/@vue%2fbabel-sugar-v-model/-/babel-sugar-v-model-1.2.3.tgz", + "integrity": "sha512-A2jxx87mySr/ulAsSSyYE8un6SIH0NWHiLaCWpodPCVOlQVODCaSpiR4+IMsmBr73haG+oeCuSvMOM+ttWUqRQ==", + "dev": true, + "requires": { + "@babel/plugin-syntax-jsx": "^7.2.0", + "@vue/babel-helper-vue-jsx-merge-props": "^1.2.1", + "@vue/babel-plugin-transform-vue-jsx": "^1.2.1", + "camelcase": "^5.0.0", + "html-tags": "^2.0.0", + "svg-tags": "^1.0.0" + } + }, + "@vue/babel-sugar-v-on": { + "version": "1.2.3", + "resolved": "https://registry.npmmirror.com/@vue%2fbabel-sugar-v-on/-/babel-sugar-v-on-1.2.3.tgz", + "integrity": "sha512-kt12VJdz/37D3N3eglBywV8GStKNUhNrsxChXIV+o0MwVXORYuhDTHJRKPgLJRb/EY3vM2aRFQdxJBp9CLikjw==", + "dev": true, + "requires": { + "@babel/plugin-syntax-jsx": "^7.2.0", + "@vue/babel-plugin-transform-vue-jsx": "^1.2.1", + "camelcase": "^5.0.0" + } + }, + "@vue/cli-overlay": { + "version": "4.5.19", + "resolved": "https://registry.npmmirror.com/@vue/cli-overlay/-/cli-overlay-4.5.19.tgz", + "integrity": "sha512-GdxvNSmOw7NHIazCO8gTK+xZbaOmScTtxj6eHVeMbYpDYVPJ+th3VMLWNpw/b6uOjwzzcyKlA5dRQ1DAb+gF/g==", + "dev": true + }, + "@vue/cli-plugin-babel": { + "version": "4.5.18", + "resolved": "https://registry.npmmirror.com/@vue/cli-plugin-babel/-/cli-plugin-babel-4.5.18.tgz", + "integrity": "sha512-Juiu3EgV228pKcfWu6vrABrrXYoMtanf4PlG6P2drPHf1LgVmaUp1g/K7IxdCc63IY9E+eCWjZ2ZEnQvxMSWOQ==", + "dev": true, + "requires": { + "@babel/core": "^7.11.0", + "@vue/babel-preset-app": "^4.5.18", + "@vue/cli-shared-utils": "^4.5.18", + "babel-loader": "^8.1.0", + "cache-loader": "^4.1.0", + "thread-loader": "^2.1.3", + "webpack": "^4.0.0" + } + }, + "@vue/cli-plugin-router": { + "version": "4.5.19", + "resolved": "https://registry.npmmirror.com/@vue/cli-plugin-router/-/cli-plugin-router-4.5.19.tgz", + "integrity": "sha512-3icGzH1IbVYmMMsOwYa0lal/gtvZLebFXdE5hcQJo2mnTwngXGMTyYAzL56EgHBPjbMmRpyj6Iw9k4aVInVX6A==", + "dev": true, + "requires": { + "@vue/cli-shared-utils": "^4.5.19" + } + }, + "@vue/cli-plugin-vuex": { + "version": "4.5.19", + "resolved": "https://registry.npmmirror.com/@vue/cli-plugin-vuex/-/cli-plugin-vuex-4.5.19.tgz", + "integrity": "sha512-DUmfdkG3pCdkP7Iznd87RfE9Qm42mgp2hcrNcYQYSru1W1gX2dG/JcW8bxmeGSa06lsxi9LEIc/QD1yPajSCZw==", + "dev": true + }, + "@vue/cli-service": { + "version": "4.5.18", + "resolved": "https://registry.npmmirror.com/@vue/cli-service/-/cli-service-4.5.18.tgz", + "integrity": "sha512-ACRfiyzQNT+3Ko8NdkyvKMsAJ7IziQcM+QvRzfHo11v4YllcQBbRxYsmnffvjaZfNBefQvJ1qX9FI+ggIlxYQA==", + "dev": true, + "requires": { + "@intervolga/optimize-cssnano-plugin": "^1.0.5", + "@soda/friendly-errors-webpack-plugin": "^1.7.1", + "@soda/get-current-script": "^1.0.0", + "@types/minimist": "^1.2.0", + "@types/webpack": "^4.0.0", + "@types/webpack-dev-server": "^3.11.0", + "@vue/cli-overlay": "^4.5.18", + "@vue/cli-plugin-router": "^4.5.18", + "@vue/cli-plugin-vuex": "^4.5.18", + "@vue/cli-shared-utils": "^4.5.18", + "@vue/component-compiler-utils": "^3.1.2", + "@vue/preload-webpack-plugin": "^1.1.0", + "@vue/web-component-wrapper": "^1.2.0", + "acorn": "^7.4.0", + "acorn-walk": "^7.1.1", + "address": "^1.1.2", + "autoprefixer": "^9.8.6", + "browserslist": "^4.12.0", + "cache-loader": "^4.1.0", + "case-sensitive-paths-webpack-plugin": "^2.3.0", + "cli-highlight": "^2.1.4", + "clipboardy": "^2.3.0", + "cliui": "^6.0.0", + "copy-webpack-plugin": "^5.1.1", + "css-loader": "^3.5.3", + "cssnano": "^4.1.10", + "debug": "^4.1.1", + "default-gateway": "^5.0.5", + "dotenv": "^8.2.0", + "dotenv-expand": "^5.1.0", + "file-loader": "^4.2.0", + "fs-extra": "^7.0.1", + "globby": "^9.2.0", + "hash-sum": "^2.0.0", + "html-webpack-plugin": "^3.2.0", + "launch-editor-middleware": "^2.2.1", + "lodash.defaultsdeep": "^4.6.1", + "lodash.mapvalues": "^4.6.0", + "lodash.transform": "^4.6.0", + "mini-css-extract-plugin": "^0.9.0", + "minimist": "^1.2.5", + "pnp-webpack-plugin": "^1.6.4", + "portfinder": "^1.0.26", + "postcss-loader": "^3.0.0", + "ssri": "^8.0.1", + "terser-webpack-plugin": "^1.4.4", + "thread-loader": "^2.1.3", + "url-loader": "^2.2.0", + "vue-loader": "^15.9.2", + "vue-loader-v16": "npm:vue-loader@^16.1.0", + "vue-style-loader": "^4.1.2", + "webpack": "^4.0.0", + "webpack-bundle-analyzer": "^3.8.0", + "webpack-chain": "^6.4.0", + "webpack-dev-server": "^3.11.0", + "webpack-merge": "^4.2.2" + }, + "dependencies": { + "@nodelib/fs.stat": { + "version": "1.1.3", + "resolved": "https://registry.npmmirror.com/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz", + "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==", + "dev": true + }, + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmmirror.com/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true + }, + "acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmmirror.com/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "optional": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmmirror.com/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==", + "dev": true, + "requires": { + "array-uniq": "^1.0.1" + } + }, + "autoprefixer": { + "version": "9.8.8", + "resolved": "https://registry.npmmirror.com/autoprefixer/-/autoprefixer-9.8.8.tgz", + "integrity": "sha512-eM9d/swFopRt5gdJ7jrpCwgvEMIayITpojhkkSMRsFHYuH5bkSQ4p/9qTEHtmNudUZh22Tehu7I6CxAW0IXTKA==", + "dev": true, + "requires": { + "browserslist": "^4.12.0", + "caniuse-lite": "^1.0.30001109", + "normalize-range": "^0.1.2", + "num2fraction": "^1.2.2", + "picocolors": "^0.2.1", + "postcss": "^7.0.32", + "postcss-value-parser": "^4.1.0" + } + }, + "big.js": { + "version": "3.2.0", + "resolved": "https://registry.npmmirror.com/big.js/-/big.js-3.2.0.tgz", + "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==" + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmmirror.com/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "optional": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "optional": true + }, + "cosmiconfig": { + "version": "5.2.1", + "resolved": "https://registry.npmmirror.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz", + "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", + "requires": { + "import-fresh": "^2.0.0", + "is-directory": "^0.3.1", + "js-yaml": "^3.13.1", + "parse-json": "^4.0.0" + } + }, + "css-select": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/css-select/-/css-select-2.1.0.tgz", + "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", + "requires": { + "boolbase": "^1.0.0", + "css-what": "^3.2.1", + "domutils": "^1.7.0", + "nth-check": "^1.0.2" + } + }, + "css-tree": { + "version": "1.0.0-alpha.37", + "resolved": "https://registry.npmmirror.com/css-tree/-/css-tree-1.0.0-alpha.37.tgz", + "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", + "requires": { + "mdn-data": "2.0.4", + "source-map": "^0.6.1" + } + }, + "css-what": { + "version": "3.4.2", + "resolved": "https://registry.npmmirror.com/css-what/-/css-what-3.4.2.tgz", + "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==" + }, + "dir-glob": { + "version": "2.2.2", + "resolved": "https://registry.npmmirror.com/dir-glob/-/dir-glob-2.2.2.tgz", + "integrity": "sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==", + "dev": true, + "requires": { + "path-type": "^3.0.0" + } + }, + "dom-serializer": { + "version": "0.2.2", + "resolved": "https://registry.npmmirror.com/dom-serializer/-/dom-serializer-0.2.2.tgz", + "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "requires": { + "domelementtype": "^2.0.1", + "entities": "^2.0.0" + }, + "dependencies": { + "domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==" + } + } + }, + "domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmmirror.com/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" + }, + "domutils": { + "version": "1.7.0", + "resolved": "https://registry.npmmirror.com/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "requires": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "emojis-list": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/emojis-list/-/emojis-list-2.1.0.tgz", + "integrity": "sha512-knHEZMgs8BB+MInokmNTg/OyPlAddghe1YBgNwJBc5zsJi/uyIcXoSDsL/W9ymOsBoBGdPIHXYJ9+qKFwRwDng==" + }, + "fast-glob": { + "version": "2.2.7", + "resolved": "https://registry.npmmirror.com/fast-glob/-/fast-glob-2.2.7.tgz", + "integrity": "sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==", + "dev": true, + "requires": { + "@mrmlnc/readdir-enhanced": "^2.2.1", + "@nodelib/fs.stat": "^1.1.2", + "glob-parent": "^3.1.0", + "is-glob": "^4.0.0", + "merge2": "^1.2.3", + "micromatch": "^3.1.10" + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "find-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "requires": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + } + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "requires": { + "locate-path": "^3.0.0" + } + }, + "fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmmirror.com/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "globby": { + "version": "9.2.0", + "resolved": "https://registry.npmmirror.com/globby/-/globby-9.2.0.tgz", + "integrity": "sha512-ollPHROa5mcxDEkwg6bPt3QbEf4pDQSNtd6JPL1YvOvAo/7/0VAm9TccUeoTmarjPw4pfUthSCqcyfNB1I3ZSg==", + "dev": true, + "requires": { + "@types/glob": "^7.1.1", + "array-union": "^1.0.2", + "dir-glob": "^2.2.2", + "fast-glob": "^2.2.6", + "glob": "^7.1.3", + "ignore": "^4.0.3", + "pify": "^4.0.1", + "slash": "^2.0.0" + }, + "dependencies": { + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmmirror.com/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + }, + "slash": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "dev": true + } + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "optional": true + }, + "hash-sum": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/hash-sum/-/hash-sum-2.0.0.tgz", + "integrity": "sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==", + "dev": true + }, + "ignore": { + "version": "3.3.10", + "resolved": "https://registry.npmmirror.com/ignore/-/ignore-3.3.10.tgz", + "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==" + }, + "import-fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/import-fresh/-/import-fresh-2.0.0.tgz", + "integrity": "sha512-eZ5H8rcgYazHbKC3PG4ClHNykCSxtAhxSSEM+2mb+7evD2CKF5V7c0dNum7AdpDh0ZdICwZY9sRSn8f+KH96sg==", + "requires": { + "caller-path": "^2.0.0", + "resolve-from": "^3.0.0" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmmirror.com/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "json5": { + "version": "0.5.1", + "resolved": "https://registry.npmmirror.com/json5/-/json5-0.5.1.tgz", + "integrity": "sha512-4xrs1aW+6N5DalkqSVA8fxh458CXvR99WU8WLKmq4v8eWAL86Xo3BVqyd3SkA9wEVjCMqyvvRRkshAdOnBp5rw==" + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + } + }, + "mdn-data": { + "version": "2.0.4", + "resolved": "https://registry.npmmirror.com/mdn-data/-/mdn-data-2.0.4.tgz", + "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==" + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmmirror.com/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "nth-check": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/nth-check/-/nth-check-1.0.2.tgz", + "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "requires": { + "boolbase": "~1.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "requires": { + "p-limit": "^2.0.0" + } + }, + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==" + }, + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "requires": { + "pify": "^3.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "dev": true + } + } + }, + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "requires": { + "find-up": "^3.0.0" + } + }, + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==" + }, + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + }, + "dependencies": { + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmmirror.com/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + } + } + }, + "slash": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/slash/-/slash-1.0.0.tgz", + "integrity": "sha512-3TYDR7xWt4dIqV2JauJr+EJeW356RXijHeUlO+8djJ+uBXPn8/2dpzBc8yQhh583sVvc9CvFAeQVgijsH+PNNg==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "optional": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "svgo": { + "version": "1.3.2", + "resolved": "https://registry.npmmirror.com/svgo/-/svgo-1.3.2.tgz", + "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", + "requires": { + "chalk": "^2.4.1", + "coa": "^2.0.2", + "css-select": "^2.0.0", + "css-select-base-adapter": "^0.1.1", + "css-tree": "1.0.0-alpha.37", + "csso": "^4.0.2", + "js-yaml": "^3.13.1", + "mkdirp": "~0.5.1", + "object.values": "^1.1.0", + "sax": "~1.2.4", + "stable": "^0.1.8", + "unquote": "~1.1.1", + "util.promisify": "~1.0.0" + } + }, + "tapable": { + "version": "1.1.3", + "resolved": "https://registry.npmmirror.com/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==" + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + }, + "vue-loader-v16": { + "version": "npm:vue-loader@16.8.3", + "resolved": "https://registry.npmmirror.com/vue-loader/-/vue-loader-16.8.3.tgz", + "integrity": "sha512-7vKN45IxsKxe5GcVCbc2qFU5aWzyiLrYJyUuMz4BQLKctCj/fmCa0w6fGiiQ2cLFetNcek1ppGJQDCup0c1hpA==", + "dev": true, + "optional": true, + "requires": { + "chalk": "^4.1.0", + "hash-sum": "^2.0.0", + "loader-utils": "^2.0.0" + }, + "dependencies": { + "big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmmirror.com/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true, + "optional": true + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "optional": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true, + "optional": true + }, + "json5": { + "version": "2.2.3", + "resolved": "https://registry.npmmirror.com/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "optional": true + }, + "loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmmirror.com/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "dev": true, + "optional": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + } + } + }, + "webpack-bundle-analyzer": { + "version": "3.9.0", + "resolved": "https://registry.npmmirror.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.9.0.tgz", + "integrity": "sha512-Ob8amZfCm3rMB1ScjQVlbYYUEJyEjdEtQ92jqiFUYt5VkEeO2v5UMbv49P/gnmCZm3A6yaFQzCBvpZqN4MUsdA==", + "dev": true, + "requires": { + "acorn": "^7.1.1", + "acorn-walk": "^7.1.1", + "bfj": "^6.1.1", + "chalk": "^2.4.1", + "commander": "^2.18.0", + "ejs": "^2.6.1", + "express": "^4.16.3", + "filesize": "^3.6.1", + "gzip-size": "^5.0.0", + "lodash": "^4.17.19", + "mkdirp": "^0.5.1", + "opener": "^1.5.1", + "ws": "^6.0.0" + } + } + } + }, + "@vue/cli-shared-utils": { + "version": "4.5.19", + "resolved": "https://registry.npmmirror.com/@vue/cli-shared-utils/-/cli-shared-utils-4.5.19.tgz", + "integrity": "sha512-JYpdsrC/d9elerKxbEUtmSSU6QRM60rirVubOewECHkBHj+tLNznWq/EhCjswywtePyLaMUK25eTqnTSZlEE+g==", + "dev": true, + "requires": { + "@achrinza/node-ipc": "9.2.2", + "@hapi/joi": "^15.0.1", + "chalk": "^2.4.2", + "execa": "^1.0.0", + "launch-editor": "^2.2.1", + "lru-cache": "^5.1.1", + "open": "^6.3.0", + "ora": "^3.4.0", + "read-pkg": "^5.1.1", + "request": "^2.88.2", + "semver": "^6.1.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmmirror.com/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } + } + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "requires": { + "pump": "^3.0.0" + } + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==" + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", + "requires": { + "path-key": "^2.0.0" + } + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==" + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmmirror.com/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==" + } + } + }, + "@vue/compiler-core": { + "version": "3.2.47", + "resolved": "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.2.47.tgz", + "integrity": "sha512-p4D7FDnQb7+YJmO2iPEv0SQNeNzcbHdGByJDsT4lynf63AFkOTFN07HsiRSvjGo0QrxR/o3d0hUyNCUnBU2Tig==", + "dev": true, + "requires": { + "@babel/parser": "^7.16.4", + "@vue/shared": "3.2.47", + "estree-walker": "^2.0.2", + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "@vue/compiler-dom": { + "version": "3.2.47", + "resolved": "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.2.47.tgz", + "integrity": "sha512-dBBnEHEPoftUiS03a4ggEig74J2YBZ2UIeyfpcRM2tavgMWo4bsEfgCGsu+uJIL/vax9S+JztH8NmQerUo7shQ==", + "dev": true, + "requires": { + "@vue/compiler-core": "3.2.47", + "@vue/shared": "3.2.47" + } + }, + "@vue/compiler-sfc": { + "version": "2.7.14", + "resolved": "https://registry.npmmirror.com/@vue%2fcompiler-sfc/-/compiler-sfc-2.7.14.tgz", + "integrity": "sha512-aNmNHyLPsw+sVvlQFQ2/8sjNuLtK54TC6cuKnVzAY93ks4ZBrvwQSnkkIh7bsbNhum5hJBS00wSDipQ937f5DA==", + "requires": { + "@babel/parser": "^7.18.4", + "postcss": "^8.4.14", + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "@vue/compiler-ssr": { + "version": "3.2.47", + "resolved": "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.2.47.tgz", + "integrity": "sha512-wVXC+gszhulcMD8wpxMsqSOpvDZ6xKXSVWkf50Guf/S+28hTAXPDYRTbLQ3EDkOP5Xz/+SY37YiwDquKbJOgZw==", + "dev": true, + "requires": { + "@vue/compiler-dom": "3.2.47", + "@vue/shared": "3.2.47" + } + }, + "@vue/component-compiler-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmmirror.com/@vue%2fcomponent-compiler-utils/-/component-compiler-utils-3.3.0.tgz", + "integrity": "sha512-97sfH2mYNU+2PzGrmK2haqffDpVASuib9/w2/noxiFi31Z54hW+q3izKQXXQZSNhtiUpAI36uSuYepeBe4wpHQ==", + "dev": true, + "requires": { + "consolidate": "^0.15.1", + "hash-sum": "^1.0.2", + "lru-cache": "^4.1.2", + "merge-source-map": "^1.1.0", + "postcss": "^7.0.36", + "postcss-selector-parser": "^6.0.2", + "prettier": "^1.18.2 || ^2.0.0", + "source-map": "~0.6.1", + "vue-template-es2015-compiler": "^1.9.0" + }, + "dependencies": { + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dev": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + } + } + }, + "@vue/devtools-api": { + "version": "6.5.0", + "resolved": "https://registry.npmmirror.com/@vue%2fdevtools-api/-/devtools-api-6.5.0.tgz", + "integrity": "sha512-o9KfBeaBmCKl10usN4crU53fYtC1r7jJwdGKjPT24t348rHxgfpZ0xL3Xm/gLUYnc0oTp8LAmrxOeLyu6tbk2Q==" + }, + "@vue/eslint-config-standard": { + "version": "6.1.0", + "resolved": "https://registry.npmmirror.com/@vue%2feslint-config-standard/-/eslint-config-standard-6.1.0.tgz", + "integrity": "sha512-9+hrEyflDzsGdlBDl9jPV5DIYUx1TOU5OSQqRDKCrNumrxRj5HRWKuk+ocXWnha6uoNRtLC24mY7d/MwqvBCNw==", + "dev": true, + "requires": { + "eslint-config-standard": "^16.0.3", + "eslint-import-resolver-node": "^0.3.4", + "eslint-import-resolver-webpack": "^0.13.1" + } + }, + "@vue/preload-webpack-plugin": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/@vue/preload-webpack-plugin/-/preload-webpack-plugin-1.1.2.tgz", + "integrity": "sha512-LIZMuJk38pk9U9Ur4YzHjlIyMuxPlACdBIHH9/nGYVTsaGKOSnSuELiE8vS9wa+dJpIYspYUOqk+L1Q4pgHQHQ==", + "dev": true + }, + "@vue/reactivity": { + "version": "3.2.47", + "resolved": "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.2.47.tgz", + "integrity": "sha512-7khqQ/75oyyg+N/e+iwV6lpy1f5wq759NdlS1fpAhFXa8VeAIKGgk2E/C4VF59lx5b+Ezs5fpp/5WsRYXQiKxQ==", + "dev": true, + "requires": { + "@vue/shared": "3.2.47" + } + }, + "@vue/reactivity-transform": { + "version": "3.2.47", + "resolved": "https://registry.npmmirror.com/@vue/reactivity-transform/-/reactivity-transform-3.2.47.tgz", + "integrity": "sha512-m8lGXw8rdnPVVIdIFhf0LeQ/ixyHkH5plYuS83yop5n7ggVJU+z5v0zecwEnX7fa7HNLBhh2qngJJkxpwEEmYA==", + "dev": true, + "requires": { + "@babel/parser": "^7.16.4", + "@vue/compiler-core": "3.2.47", + "@vue/shared": "3.2.47", + "estree-walker": "^2.0.2", + "magic-string": "^0.25.7" + } + }, + "@vue/shared": { + "version": "3.2.47", + "resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.2.47.tgz", + "integrity": "sha512-BHGyyGN3Q97EZx0taMQ+OLNuZcW3d37ZEVmEAyeoA9ERdGvm9Irc/0Fua8SNyOtV1w6BS4q25wbMzJujO9HIfQ==", + "dev": true + }, + "@vue/web-component-wrapper": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/@vue/web-component-wrapper/-/web-component-wrapper-1.3.0.tgz", + "integrity": "sha512-Iu8Tbg3f+emIIMmI2ycSI8QcEuAUgPTgHwesDU1eKMLE4YC/c/sFbGc70QgMq31ijRftV0R7vCm9co6rldCeOA==", + "dev": true + }, + "@webassemblyjs/ast": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/@webassemblyjs%2fast/-/ast-1.9.0.tgz", + "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", + "dev": true, + "requires": { + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0" + } + }, + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/@webassemblyjs%2ffloating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz", + "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==", + "dev": true + }, + "@webassemblyjs/helper-api-error": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/@webassemblyjs%2fhelper-api-error/-/helper-api-error-1.9.0.tgz", + "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==", + "dev": true + }, + "@webassemblyjs/helper-buffer": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/@webassemblyjs%2fhelper-buffer/-/helper-buffer-1.9.0.tgz", + "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==", + "dev": true + }, + "@webassemblyjs/helper-code-frame": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/@webassemblyjs%2fhelper-code-frame/-/helper-code-frame-1.9.0.tgz", + "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==", + "dev": true, + "requires": { + "@webassemblyjs/wast-printer": "1.9.0" + } + }, + "@webassemblyjs/helper-fsm": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/@webassemblyjs%2fhelper-fsm/-/helper-fsm-1.9.0.tgz", + "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==", + "dev": true + }, + "@webassemblyjs/helper-module-context": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/@webassemblyjs%2fhelper-module-context/-/helper-module-context-1.9.0.tgz", + "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0" + } + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/@webassemblyjs%2fhelper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", + "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==", + "dev": true + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/@webassemblyjs%2fhelper-wasm-section/-/helper-wasm-section-1.9.0.tgz", + "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0" + } + }, + "@webassemblyjs/ieee754": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/@webassemblyjs%2fieee754/-/ieee754-1.9.0.tgz", + "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", + "dev": true, + "requires": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "@webassemblyjs/leb128": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/@webassemblyjs%2fleb128/-/leb128-1.9.0.tgz", + "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", + "dev": true, + "requires": { + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/utf8": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/@webassemblyjs%2futf8/-/utf8-1.9.0.tgz", + "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==", + "dev": true + }, + "@webassemblyjs/wasm-edit": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/@webassemblyjs%2fwasm-edit/-/wasm-edit-1.9.0.tgz", + "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/helper-wasm-section": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-opt": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", + "@webassemblyjs/wast-printer": "1.9.0" + } + }, + "@webassemblyjs/wasm-gen": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/@webassemblyjs%2fwasm-gen/-/wasm-gen-1.9.0.tgz", + "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" + } + }, + "@webassemblyjs/wasm-opt": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/@webassemblyjs%2fwasm-opt/-/wasm-opt-1.9.0.tgz", + "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0" + } + }, + "@webassemblyjs/wasm-parser": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/@webassemblyjs%2fwasm-parser/-/wasm-parser-1.9.0.tgz", + "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-api-error": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" + } + }, + "@webassemblyjs/wast-parser": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/@webassemblyjs%2fwast-parser/-/wast-parser-1.9.0.tgz", + "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/floating-point-hex-parser": "1.9.0", + "@webassemblyjs/helper-api-error": "1.9.0", + "@webassemblyjs/helper-code-frame": "1.9.0", + "@webassemblyjs/helper-fsm": "1.9.0", + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/wast-printer": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/@webassemblyjs%2fwast-printer/-/wast-printer-1.9.0.tgz", + "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0", + "@xtuc/long": "4.2.2" + } + }, + "@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/@xtuc%2fieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true + }, + "@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmmirror.com/@xtuc%2flong/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true + }, + "accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmmirror.com/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dev": true, + "requires": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + } + }, + "acorn": { + "version": "8.8.0", + "resolved": "https://registry.npmmirror.com/acorn/-/acorn-8.8.0.tgz", + "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", + "dev": true + }, + "acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmmirror.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true + }, + "acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmmirror.com/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "dev": true + }, + "address": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/address/-/address-1.2.1.tgz", + "integrity": "sha512-B+6bi5D34+fDYENiH5qOlA0cV2rAGKuWZ9LeyUUehbXy8e0VS9e498yO0Jeeh+iM+6KbfudHTFjXw2MmJD4QRA==", + "dev": true + }, + "agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmmirror.com/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "requires": { + "debug": "4" + }, + "dependencies": { + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "agentkeepalive": { + "version": "3.5.2", + "resolved": "https://registry.npmmirror.com/agentkeepalive/-/agentkeepalive-3.5.2.tgz", + "integrity": "sha512-e0L/HNe6qkQ7H19kTlRRqUibEAwDK5AFk6y3PtMsuut2VAH6+Q4xZml1tNDJD7kSAyqmbG/K08K5WEJYtUrSlQ==", + "dev": true, + "requires": { + "humanize-ms": "^1.2.1" + } + }, + "aggregate-error": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/aggregate-error/download/aggregate-error-3.0.1.tgz", + "integrity": "sha1-2y/nJG5Tb0DZtUQqOeEX191qJOA=", + "dev": true, + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + } + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmmirror.com/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ajv-errors": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/ajv-errors/-/ajv-errors-1.0.1.tgz", + "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==" + }, + "ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmmirror.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==" + }, + "ali-oss": { + "version": "6.17.1", + "resolved": "https://registry.npmmirror.com/ali-oss/-/ali-oss-6.17.1.tgz", + "integrity": "sha512-v2oT3UhSJTH/LrsscVvi7iEGrnundydNaFzpYAKatqOl4JNcBV4UiwtlJU+ZHLys040JH2k+CutznA0GoE+P2w==", + "dev": true, + "requires": { + "address": "^1.0.0", + "agentkeepalive": "^3.4.1", + "bowser": "^1.6.0", + "copy-to": "^2.0.1", + "dateformat": "^2.0.0", + "debug": "^2.2.0", + "destroy": "^1.0.4", + "end-or-error": "^1.0.1", + "get-ready": "^1.0.0", + "humanize-ms": "^1.2.0", + "is-type-of": "^1.0.0", + "js-base64": "^2.5.2", + "jstoxml": "^2.0.0", + "merge-descriptors": "^1.0.1", + "mime": "^2.4.5", + "mz-modules": "^2.1.0", + "platform": "^1.3.1", + "pump": "^3.0.0", + "sdk-base": "^2.0.1", + "stream-http": "2.8.2", + "stream-wormhole": "^1.0.4", + "urllib": "^2.33.1", + "utility": "^1.8.0", + "xml2js": "^0.4.16" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "js-base64": { + "version": "2.6.4", + "resolved": "https://registry.npmmirror.com/js-base64/-/js-base64-2.6.4.tgz", + "integrity": "sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==", + "dev": true + }, + "stream-http": { + "version": "2.8.2", + "resolved": "https://registry.npmmirror.com/stream-http/-/stream-http-2.8.2.tgz", + "integrity": "sha512-QllfrBhqF1DPcz46WxKTs6Mz1Bpc+8Qm6vbqOpVav5odAXwbyzwnEczoWqtxrsmlO+cJqtPrp/8gWKWjaKLLlA==", + "dev": true, + "requires": { + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.3.6", + "to-arraybuffer": "^1.0.0", + "xtend": "^4.0.0" + } + } + } + }, + "alloyfinger": { + "version": "0.1.16", + "resolved": "https://registry.npmmirror.com/alloyfinger/-/alloyfinger-0.1.16.tgz", + "integrity": "sha512-AfsLALs929WQsjSk1pbysoiVU3bgm/4k1wdZDtMQ7uI7b8XweqCCnUiBYqqdp8uPZ1fBq/+LCJhgUlhd90FssQ==" + }, + "alphanum-sort": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz", + "integrity": "sha512-0FcBfdcmaumGPQ0qPn7Q5qTgz/ooXgIyp1rf8ik5bGX8mpE2YHjC0P/eyQvxu1GURYQgq9ozf2mteQ5ZD9YiyQ==", + "dev": true + }, + "ansi-colors": { + "version": "3.2.4", + "resolved": "https://registry.npmmirror.com/ansi-colors/-/ansi-colors-3.2.4.tgz", + "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==", + "dev": true + }, + "ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmmirror.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "requires": { + "type-fest": "^0.21.3" + }, + "dependencies": { + "type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmmirror.com/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true + } + } + }, + "ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmmirror.com/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", + "dev": true + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmmirror.com/ansi-styles/download/ansi-styles-3.2.1.tgz", + "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=", + "requires": { + "color-convert": "^1.9.0" + } + }, + "any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=", + "dev": true + }, + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmmirror.com/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "dev": true + }, + "arch": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/arch/-/arch-2.2.0.tgz", + "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==", + "dev": true + }, + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/arr-diff/download/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true + }, + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/arr-union/download/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "dev": true + }, + "array-find": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/array-find/-/array-find-1.0.0.tgz", + "integrity": "sha1-bI4obRHtdoMn+OYuzuhzU8o+eLg=", + "dev": true + }, + "array-flatten": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/array-flatten/-/array-flatten-2.1.2.tgz", + "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", + "dev": true + }, + "array-includes": { + "version": "3.1.6", + "resolved": "https://registry.npmmirror.com/array-includes/-/array-includes-3.1.6.tgz", + "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "get-intrinsic": "^1.1.3", + "is-string": "^1.0.7" + }, + "dependencies": { + "es-abstract": { + "version": "1.20.5", + "resolved": "https://registry.npmmirror.com/es-abstract/-/es-abstract-1.20.5.tgz", + "integrity": "sha512-7h8MM2EQhsCA7pU/Nv78qOXFpD8Rhqd12gYiSJVkrH9+e8VuA8JlPJK/hQjjlLv6pJvx/z1iRFKzYb0XT/RuAQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.1.3", + "get-symbol-description": "^1.0.0", + "gopd": "^1.0.1", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.2", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.4.3", + "safe-regex-test": "^1.0.0", + "string.prototype.trimend": "^1.0.6", + "string.prototype.trimstart": "^1.0.6", + "unbox-primitive": "^1.0.2" + } + }, + "get-intrinsic": { + "version": "1.1.3", + "resolved": "https://registry.npmmirror.com/get-intrinsic/-/get-intrinsic-1.1.3.tgz", + "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + } + }, + "is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmmirror.com/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true + }, + "object.assign": { + "version": "4.1.4", + "resolved": "https://registry.npmmirror.com/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + } + }, + "string.prototype.trimend": { + "version": "1.0.6", + "resolved": "https://registry.npmmirror.com/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", + "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + } + }, + "string.prototype.trimstart": { + "version": "1.0.6", + "resolved": "https://registry.npmmirror.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", + "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + } + } + } + }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true + }, + "array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/array-uniq/download/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmmirror.com/array-unique/download/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "array.prototype.flat": { + "version": "1.3.1", + "resolved": "https://registry.npmmirror.com/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz", + "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0" + }, + "dependencies": { + "es-abstract": { + "version": "1.20.5", + "resolved": "https://registry.npmmirror.com/es-abstract/-/es-abstract-1.20.5.tgz", + "integrity": "sha512-7h8MM2EQhsCA7pU/Nv78qOXFpD8Rhqd12gYiSJVkrH9+e8VuA8JlPJK/hQjjlLv6pJvx/z1iRFKzYb0XT/RuAQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.1.3", + "get-symbol-description": "^1.0.0", + "gopd": "^1.0.1", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.2", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.4.3", + "safe-regex-test": "^1.0.0", + "string.prototype.trimend": "^1.0.6", + "string.prototype.trimstart": "^1.0.6", + "unbox-primitive": "^1.0.2" + } + }, + "get-intrinsic": { + "version": "1.1.3", + "resolved": "https://registry.npmmirror.com/get-intrinsic/-/get-intrinsic-1.1.3.tgz", + "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + } + }, + "is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmmirror.com/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true + }, + "object.assign": { + "version": "4.1.4", + "resolved": "https://registry.npmmirror.com/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + } + }, + "string.prototype.trimend": { + "version": "1.0.6", + "resolved": "https://registry.npmmirror.com/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", + "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + } + }, + "string.prototype.trimstart": { + "version": "1.0.6", + "resolved": "https://registry.npmmirror.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", + "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + } + } + } + }, + "array.prototype.reduce": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/array.prototype.reduce/-/array.prototype.reduce-1.0.4.tgz", + "integrity": "sha512-WnM+AjG/DvLRLo4DDl+r+SvCzYtD2Jd9oeBYMcEaI7t3fFrHY9M53/wdLcTvmZNQ70IU6Htj0emFkZ5TS+lrdw==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.2", + "es-array-method-boxes-properly": "^1.0.0", + "is-string": "^1.0.7" + } + }, + "arrify": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/arrify/-/arrify-2.0.1.tgz", + "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", + "dev": true + }, + "asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmmirror.com/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "dev": true, + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "asn1.js": { + "version": "5.4.1", + "resolved": "https://registry.npmmirror.com/asn1.js/-/asn1.js-5.4.1.tgz", + "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", + "dev": true, + "requires": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "safer-buffer": "^2.1.0" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmmirror.com/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } + } + }, + "assert": { + "version": "1.5.0", + "resolved": "https://registry.npmmirror.com/assert/-/assert-1.5.0.tgz", + "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", + "dev": true, + "requires": { + "object-assign": "^4.1.1", + "util": "0.10.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/inherits/download/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", + "dev": true + }, + "util": { + "version": "0.10.3", + "resolved": "https://registry.npmmirror.com/util/download/util-0.10.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Futil%2Fdownload%2Futil-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "dev": true, + "requires": { + "inherits": "2.0.1" + } + } + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "dev": true + }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/assign-symbols/download/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "dev": true + }, + "ast-types": { + "version": "0.13.4", + "resolved": "https://registry.npmmirror.com/ast-types/-/ast-types-0.13.4.tgz", + "integrity": "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==", + "dev": true, + "requires": { + "tslib": "^2.0.1" + } + }, + "astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true + }, + "async": { + "version": "2.6.4", + "resolved": "https://registry.npmmirror.com/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", + "dev": true, + "requires": { + "lodash": "^4.17.14" + } + }, + "async-each": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/async-each/-/async-each-1.0.3.tgz", + "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", + "dev": true + }, + "async-limiter": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/async-limiter/download/async-limiter-1.0.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fasync-limiter%2Fdownload%2Fasync-limiter-1.0.1.tgz", + "integrity": "sha1-3TeelPDbgxCwgpH51kwyCXZmF/0=", + "dev": true + }, + "async-validator": { + "version": "4.2.5", + "resolved": "https://registry.npmmirror.com/async-validator/-/async-validator-4.2.5.tgz", + "integrity": "sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==" + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmmirror.com/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true + }, + "at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true + }, + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/atob/download/atob-2.1.2.tgz", + "integrity": "sha1-bZUX654DDSQ2ZmZR6GvZ9vE1M8k=", + "dev": true + }, + "autoprefixer": { + "version": "8.0.0", + "resolved": "https://registry.npmmirror.com/autoprefixer/-/autoprefixer-8.0.0.tgz", + "integrity": "sha512-XBEqAoESCyGu3daYmWcTC37Dwmjvs0y40UtUO3MMX+Pd/w7jwNFfUKNtxoMFu0u0wcotP+arDpU3JVH54UV79Q==", + "dev": true, + "requires": { + "browserslist": "^3.0.0", + "caniuse-lite": "^1.0.30000808", + "normalize-range": "^0.1.2", + "num2fraction": "^1.2.2", + "postcss": "^6.0.17", + "postcss-value-parser": "^3.2.3" + }, + "dependencies": { + "browserslist": { + "version": "3.2.8", + "resolved": "https://registry.npmmirror.com/browserslist/-/browserslist-3.2.8.tgz", + "integrity": "sha512-WHVocJYavUwVgVViC0ORikPHQquXwVh939TaelZ4WDqpWgTX/FsGhl/+P4qBUAGcRvtOgDgC+xftNWWp2RUTAQ==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30000844", + "electron-to-chromium": "^1.3.47" + } + }, + "postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmmirror.com/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", + "dev": true + }, + "aws4": { + "version": "1.11.0", + "resolved": "https://registry.npmmirror.com/aws4/-/aws4-1.11.0.tgz", + "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", + "dev": true + }, + "babel-loader": { + "version": "8.2.5", + "resolved": "https://registry.npmmirror.com/babel-loader/-/babel-loader-8.2.5.tgz", + "integrity": "sha512-OSiFfH89LrEMiWd4pLNqGz4CwJDtbs2ZVc+iGu2HrkRfPxId9F2anQj38IxWpmRfsUY0aBZYi1EFcd3mhtRMLQ==", + "dev": true, + "requires": { + "find-cache-dir": "^3.3.1", + "loader-utils": "^2.0.0", + "make-dir": "^3.1.0", + "schema-utils": "^2.6.5" + }, + "dependencies": { + "loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmmirror.com/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "dependencies": { + "json5": { + "version": "2.2.3", + "resolved": "https://registry.npmmirror.com/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true + } + } + } + } + }, + "babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmmirror.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "dev": true, + "requires": { + "object.assign": "^4.1.0" + } + }, + "babel-plugin-import": { + "version": "1.13.3", + "resolved": "https://registry.npmmirror.com/babel-plugin-import/download/babel-plugin-import-1.13.3.tgz?cache=0&sync_timestamp=1606209944483&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fbabel-plugin-import%2Fdownload%2Fbabel-plugin-import-1.13.3.tgz", + "integrity": "sha1-nbu6fRrHK9QSkXqDDUReAJQdJtc=", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.0.0", + "@babel/runtime": "^7.0.0" + } + }, + "babel-plugin-polyfill-corejs2": { + "version": "0.3.3", + "resolved": "https://registry.npmmirror.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", + "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.17.7", + "@babel/helper-define-polyfill-provider": "^0.3.3", + "semver": "^6.1.1" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmmirror.com/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "babel-plugin-polyfill-corejs3": { + "version": "0.6.0", + "resolved": "https://registry.npmmirror.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz", + "integrity": "sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.3.3", + "core-js-compat": "^3.25.1" + }, + "dependencies": { + "browserslist": { + "version": "4.21.4", + "resolved": "https://registry.npmmirror.com/browserslist/-/browserslist-4.21.4.tgz", + "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001400", + "electron-to-chromium": "^1.4.251", + "node-releases": "^2.0.6", + "update-browserslist-db": "^1.0.9" + } + }, + "core-js-compat": { + "version": "3.26.1", + "resolved": "https://registry.npmmirror.com/core-js-compat/-/core-js-compat-3.26.1.tgz", + "integrity": "sha512-622/KzTudvXCDLRw70iHW4KKs1aGpcRcowGWyYJr2DEBfRrd6hNJybxSWJFuZYD4ma86xhrwDDHxmDaIq4EA8A==", + "dev": true, + "requires": { + "browserslist": "^4.21.4" + } + }, + "electron-to-chromium": { + "version": "1.4.284", + "resolved": "https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", + "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==", + "dev": true + }, + "node-releases": { + "version": "2.0.6", + "resolved": "https://registry.npmmirror.com/node-releases/-/node-releases-2.0.6.tgz", + "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", + "dev": true + } + } + }, + "babel-plugin-polyfill-regenerator": { + "version": "0.4.1", + "resolved": "https://registry.npmmirror.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz", + "integrity": "sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.3.3" + } + }, + "babel-plugin-transform-remove-console": { + "version": "6.9.4", + "resolved": "https://registry.npmmirror.com/babel-plugin-transform-remove-console/-/babel-plugin-transform-remove-console-6.9.4.tgz", + "integrity": "sha1-uYA2DAZzhOJLNXpYjYB9PINSd4A=", + "dev": true + }, + "bail": { + "version": "1.0.5", + "resolved": "https://registry.npmmirror.com/bail/-/bail-1.0.5.tgz", + "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==", + "dev": true + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/balanced-match/download/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmmirror.com/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dev": true, + "requires": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/define-property/download/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmmirror.com/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true + }, + "batch": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/batch/download/batch-0.6.1.tgz", + "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", + "dev": true + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "dev": true, + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "bfj": { + "version": "6.1.2", + "resolved": "https://registry.npmmirror.com/bfj/-/bfj-6.1.2.tgz", + "integrity": "sha512-BmBJa4Lip6BPRINSZ0BPEIfB1wUY/9rwbwvIHQA1KjX9om29B6id0wnWXq7m3bn5JrUVjeOTnVuhPT1FiHwPGw==", + "dev": true, + "requires": { + "bluebird": "^3.5.5", + "check-types": "^8.0.3", + "hoopy": "^0.1.4", + "tryer": "^1.0.1" + } + }, + "big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmmirror.com/big.js/download/big.js-5.2.2.tgz", + "integrity": "sha1-ZfCvOC9Xi83HQr2cKB6cstd2gyg=", + "dev": true + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true + }, + "bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmmirror.com/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "dev": true, + "optional": true, + "requires": { + "file-uri-to-path": "1.0.0" + }, + "dependencies": { + "file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "dev": true, + "optional": true + } + } + }, + "bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmmirror.com/bluebird/download/bluebird-3.7.2.tgz", + "integrity": "sha1-nyKcFb4nJFT/qXOs4NvueaGww28=", + "dev": true + }, + "bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmmirror.com/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", + "dev": true + }, + "body-parser": { + "version": "1.20.0", + "resolved": "https://registry.npmmirror.com/body-parser/-/body-parser-1.20.0.tgz", + "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==", + "dev": true, + "requires": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.10.3", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true + }, + "qs": { + "version": "6.10.3", + "resolved": "https://registry.npmmirror.com/qs/-/qs-6.10.3.tgz", + "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", + "dev": true, + "requires": { + "side-channel": "^1.0.4" + } + }, + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" + } + } + }, + "bonjour": { + "version": "3.5.0", + "resolved": "https://registry.npmmirror.com/bonjour/download/bonjour-3.5.0.tgz", + "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", + "dev": true, + "requires": { + "array-flatten": "^2.1.0", + "deep-equal": "^1.0.1", + "dns-equal": "^1.0.0", + "dns-txt": "^2.0.2", + "multicast-dns": "^6.0.1", + "multicast-dns-service-types": "^1.1.0" + } + }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/boolbase/download/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" + }, + "bowser": { + "version": "1.9.4", + "resolved": "https://registry.npmmirror.com/bowser/-/bowser-1.9.4.tgz", + "integrity": "sha512-9IdMmj2KjigRq6oWhmwv1W36pDuA4STQZ8q6YO9um+x07xgYNCD3Oou+WP/3L1HNz7iqythGet3/p4wvc8AAwQ==", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmmirror.com/brace-expansion/download/brace-expansion-1.1.11.tgz", + "integrity": "sha1-PH/L9SnYcibz0vUrlm/1Jx60Qd0=", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmmirror.com/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/brorand/download/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", + "dev": true + }, + "browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "dev": true, + "requires": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "browserify-cipher": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "dev": true, + "requires": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "browserify-des": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "dev": true, + "requires": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "browserify-rsa": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/browserify-rsa/-/browserify-rsa-4.1.0.tgz", + "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", + "dev": true, + "requires": { + "bn.js": "^5.0.0", + "randombytes": "^2.0.1" + } + }, + "browserify-sign": { + "version": "4.2.1", + "resolved": "https://registry.npmmirror.com/browserify-sign/-/browserify-sign-4.2.1.tgz", + "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", + "dev": true, + "requires": { + "bn.js": "^5.1.1", + "browserify-rsa": "^4.0.1", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "elliptic": "^6.5.3", + "inherits": "^2.0.4", + "parse-asn1": "^5.1.5", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + } + } + }, + "browserify-zlib": { + "version": "0.2.0", + "resolved": "https://registry.npmmirror.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz", + "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "dev": true, + "requires": { + "pako": "~1.0.5" + } + }, + "browserslist": { + "version": "4.20.4", + "resolved": "https://registry.npmmirror.com/browserslist/-/browserslist-4.20.4.tgz", + "integrity": "sha512-ok1d+1WpnU24XYN7oC3QWgTyMhY/avPJ/r9T00xxvUOIparA/gc+UPUMaod3i+G6s+nI2nUb9xZ5k794uIwShw==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001349", + "electron-to-chromium": "^1.4.147", + "escalade": "^3.1.1", + "node-releases": "^2.0.5", + "picocolors": "^1.0.0" + } + }, + "buffer": { + "version": "4.9.2", + "resolved": "https://registry.npmmirror.com/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "dev": true, + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, + "buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "buffer-indexof": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/buffer-indexof/-/buffer-indexof-1.1.1.tgz", + "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==", + "dev": true + }, + "buffer-json": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/buffer-json/-/buffer-json-2.0.0.tgz", + "integrity": "sha512-+jjPFVqyfF1esi9fvfUs3NqM0pH1ziZ36VP4hmA/y/Ssfo/5w5xHKfTw9BwQjoJ1w/oVtpLomqwUHKdefGyuHw==", + "dev": true + }, + "buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/buffer-xor/download/buffer-xor-1.0.3.tgz", + "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", + "dev": true + }, + "builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/builtin-status-codes/download/builtin-status-codes-3.0.0.tgz", + "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", + "dev": true + }, + "bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmmirror.com/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true + }, + "cacache": { + "version": "12.0.4", + "resolved": "https://registry.npmmirror.com/cacache/-/cacache-12.0.4.tgz", + "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", + "dev": true, + "requires": { + "bluebird": "^3.5.5", + "chownr": "^1.1.1", + "figgy-pudding": "^3.5.1", + "glob": "^7.1.4", + "graceful-fs": "^4.1.15", + "infer-owner": "^1.0.3", + "lru-cache": "^5.1.1", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.3", + "ssri": "^6.0.1", + "unique-filename": "^1.1.1", + "y18n": "^4.0.0" + }, + "dependencies": { + "ssri": { + "version": "6.0.2", + "resolved": "https://registry.npmmirror.com/ssri/-/ssri-6.0.2.tgz", + "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==", + "dev": true, + "requires": { + "figgy-pudding": "^3.5.1" + } + } + } + }, + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dev": true, + "requires": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + } + }, + "cache-loader": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/cache-loader/-/cache-loader-4.1.0.tgz", + "integrity": "sha512-ftOayxve0PwKzBF/GLsZNC9fJBXl8lkZE3TOsjkboHfVHVkL39iUEs1FO07A33mizmci5Dudt38UZrrYXDtbhw==", + "dev": true, + "requires": { + "buffer-json": "^2.0.0", + "find-cache-dir": "^3.0.0", + "loader-utils": "^1.2.3", + "mkdirp": "^0.5.1", + "neo-async": "^2.6.1", + "schema-utils": "^2.0.0" + } + }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "call-me-maybe": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/call-me-maybe/-/call-me-maybe-1.0.2.tgz", + "integrity": "sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ==", + "dev": true + }, + "caller-callsite": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/caller-callsite/-/caller-callsite-2.0.0.tgz", + "integrity": "sha512-JuG3qI4QOftFsZyOn1qq87fq5grLIyk1JYd5lJmdA+fG7aQ9pA/i3JIJGcO3q0MrRcHlOt1U+ZeHW8Dq9axALQ==", + "requires": { + "callsites": "^2.0.0" + } + }, + "caller-path": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/caller-path/-/caller-path-2.0.0.tgz", + "integrity": "sha512-MCL3sf6nCSXOwCTzvPKhN18TU7AHTvdtam8DAogxcrJ8Rjfbbg7Lgng64H9Iy+vUV6VGFClN/TyxBkAebLRR4A==", + "requires": { + "caller-callsite": "^2.0.0" + } + }, + "callsites": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/callsites/-/callsites-2.0.0.tgz", + "integrity": "sha512-ksWePWBloaWPxJYQ8TL0JHvtci6G5QTKwQ95RcWAa/lzoAKuAOflGdAK92hpHXjkwb8zLxoLNUoNYZgVsaJzvQ==" + }, + "camel-case": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/camel-case/-/camel-case-3.0.0.tgz", + "integrity": "sha512-+MbKztAYHXPr1jNTSKQF52VpcFjwY5RkR7fxksV8Doo4KAYc5Fl4UJRgthBbTmEx8C54DqahhbLJkDwjI3PI/w==", + "dev": true, + "requires": { + "no-case": "^2.2.0", + "upper-case": "^1.1.1" + } + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmmirror.com/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "camelcase-keys": { + "version": "6.2.2", + "resolved": "https://registry.npmmirror.com/camelcase-keys/-/camelcase-keys-6.2.2.tgz", + "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", + "dev": true, + "requires": { + "camelcase": "^5.3.1", + "map-obj": "^4.0.0", + "quick-lru": "^4.0.1" + } + }, + "caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + } + }, + "caniuse-lite": { + "version": "1.0.30001464", + "resolved": "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001464.tgz", + "integrity": "sha512-oww27MtUmusatpRpCGSOneQk2/l5czXANDSFvsc7VuOQ86s3ANhZetpwXNf1zY/zdfP63Xvjz325DAdAoES13g==", + "dev": true + }, + "case-sensitive-paths-webpack-plugin": { + "version": "2.4.0", + "resolved": "https://registry.npmmirror.com/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz", + "integrity": "sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==", + "dev": true + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmmirror.com/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", + "dev": true + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmmirror.com/chalk/download/chalk-2.4.2.tgz?cache=0&sync_timestamp=1591687070184&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fchalk%2Fdownload%2Fchalk-2.4.2.tgz", + "integrity": "sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ=", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "character-entities": { + "version": "1.2.4", + "resolved": "https://registry.npmmirror.com/character-entities/-/character-entities-1.2.4.tgz", + "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==", + "dev": true + }, + "character-entities-legacy": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", + "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==", + "dev": true + }, + "character-reference-invalid": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", + "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==", + "dev": true + }, + "check-types": { + "version": "8.0.3", + "resolved": "https://registry.npmmirror.com/check-types/-/check-types-8.0.3.tgz", + "integrity": "sha512-YpeKZngUmG65rLudJ4taU7VLkOCTMhNl/u4ctNC56LQS/zJTyNH0Lrtwm1tfTsbLlwvlfsA2d1c8vCf/Kh2KwQ==", + "dev": true + }, + "chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmmirror.com/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "dependencies": { + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + } + } + }, + "chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true + }, + "chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "dev": true + }, + "cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmmirror.com/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmmirror.com/define-property/download/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "clean-css": { + "version": "4.2.4", + "resolved": "https://registry.npmmirror.com/clean-css/-/clean-css-4.2.4.tgz", + "integrity": "sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A==", + "dev": true, + "requires": { + "source-map": "~0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/clean-stack/download/clean-stack-2.2.0.tgz?cache=0&sync_timestamp=1564586594378&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fclean-stack%2Fdownload%2Fclean-stack-2.2.0.tgz", + "integrity": "sha1-7oRy27Ep5yezHooQpCfe6d/kAIs=", + "dev": true + }, + "cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "requires": { + "restore-cursor": "^3.1.0" + } + }, + "cli-highlight": { + "version": "2.1.11", + "resolved": "https://registry.npmmirror.com/cli-highlight/-/cli-highlight-2.1.11.tgz", + "integrity": "sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "highlight.js": "^10.7.1", + "mz": "^2.4.0", + "parse5": "^5.1.1", + "parse5-htmlparser2-tree-adapter": "^6.0.0", + "yargs": "^16.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "cli-spinners": { + "version": "2.7.0", + "resolved": "https://registry.npmmirror.com/cli-spinners/-/cli-spinners-2.7.0.tgz", + "integrity": "sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw==", + "dev": true + }, + "cli-truncate": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/cli-truncate/-/cli-truncate-3.1.0.tgz", + "integrity": "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==", + "dev": true, + "requires": { + "slice-ansi": "^5.0.0", + "string-width": "^5.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true + }, + "ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true + }, + "emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", + "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", + "dev": true + }, + "slice-ansi": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/slice-ansi/-/slice-ansi-5.0.0.tgz", + "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", + "dev": true, + "requires": { + "ansi-styles": "^6.0.0", + "is-fullwidth-code-point": "^4.0.0" + } + }, + "string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "requires": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + } + }, + "strip-ansi": { + "version": "7.0.1", + "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-7.0.1.tgz", + "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "dev": true, + "requires": { + "ansi-regex": "^6.0.1" + } + } + } + }, + "clipboard": { + "version": "2.0.10", + "resolved": "https://registry.npmmirror.com/clipboard/-/clipboard-2.0.10.tgz", + "integrity": "sha512-cz3m2YVwFz95qSEbCDi2fzLN/epEN9zXBvfgAoGkvGOJZATMl9gtTDVOtBYkx2ODUJl2kvmud7n32sV2BpYR4g==", + "requires": { + "good-listener": "^1.2.2", + "select": "^1.1.2", + "tiny-emitter": "^2.0.0" + } + }, + "clipboardy": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/clipboardy/-/clipboardy-2.3.0.tgz", + "integrity": "sha512-mKhiIL2DrQIsuXMgBgnfEHOZOryC7kY7YO//TN6c63wlEm3NG5tz+YgY5rVi29KCmq/QQjKYvM7a19+MDOTHOQ==", + "dev": true, + "requires": { + "arch": "^2.1.1", + "execa": "^1.0.0", + "is-wsl": "^2.1.1" + }, + "dependencies": { + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "requires": { + "pump": "^3.0.0" + } + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==" + }, + "is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "requires": { + "is-docker": "^2.0.0" + } + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", + "requires": { + "path-key": "^2.0.0" + } + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==" + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==" + } + } + }, + "cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + } + } + }, + "clone": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "dev": true + }, + "clone-regexp": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/clone-regexp/-/clone-regexp-2.2.0.tgz", + "integrity": "sha512-beMpP7BOtTipFuW8hrJvREQ2DrRu3BE7by0ZpibtfBA+qfHYvMGTc2Yb1JMYPKg/JUw0CHYvpg796aNTSW9z7Q==", + "dev": true, + "requires": { + "is-regexp": "^2.0.0" + } + }, + "coa": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/coa/-/coa-2.0.2.tgz", + "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", + "requires": { + "@types/q": "^1.5.1", + "chalk": "^2.4.1", + "q": "^1.1.2" + } + }, + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/collection-visit/download/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "dev": true, + "requires": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + } + }, + "color": { + "version": "3.2.1", + "resolved": "https://registry.npmmirror.com/color/-/color-3.2.1.tgz", + "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", + "dev": true, + "requires": { + "color-convert": "^1.9.3", + "color-string": "^1.6.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmmirror.com/color-convert/download/color-convert-1.9.3.tgz?cache=0&sync_timestamp=1566248870121&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fcolor-convert%2Fdownload%2Fcolor-convert-1.9.3.tgz", + "integrity": "sha1-u3GFBpDh8TZWfeYp0tVHHe2kweg=", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmmirror.com/color-name/download/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmmirror.com/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "dev": true, + "requires": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "colorette": { + "version": "2.0.17", + "resolved": "https://registry.npmmirror.com/colorette/-/colorette-2.0.17.tgz", + "integrity": "sha512-hJo+3Bkn0NCHybn9Tu35fIeoOKGOk5OCC32y4Hz2It+qlCO2Q3DeQ1hRn/tDDMQKRYUEzqsl7jbF6dYKjlE60g==", + "dev": true + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmmirror.com/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmmirror.com/commander/download/commander-2.20.3.tgz?cache=0&sync_timestamp=1587781810870&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fcommander%2Fdownload%2Fcommander-2.20.3.tgz", + "integrity": "sha1-/UhehMA+tIgcIHIrpIA16FMa6zM=", + "dev": true + }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/commondir/download/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=" + }, + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/component-emitter/download/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", + "dev": true + }, + "compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmmirror.com/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dev": true, + "requires": { + "mime-db": ">= 1.43.0 < 2" + } + }, + "compression": { + "version": "1.7.4", + "resolved": "https://registry.npmmirror.com/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "dev": true, + "requires": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "dependencies": { + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/bytes/download/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", + "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmmirror.com/concat-map/download/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmmirror.com/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "connect-history-api-fallback": { + "version": "1.6.0", + "resolved": "https://registry.npmmirror.com/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", + "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", + "dev": true + }, + "console-browserify": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/console-browserify/-/console-browserify-1.2.0.tgz", + "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", + "dev": true + }, + "consolidate": { + "version": "0.15.1", + "resolved": "https://registry.npmmirror.com/consolidate/-/consolidate-0.15.1.tgz", + "integrity": "sha512-DW46nrsMJgy9kqAbPt5rKaCr7uFtpo4mSUvLHIUbJEjm0vo+aY5QLwBUq3FK4tRnJr/X0Psc0C4jf/h+HtXSMw==", + "dev": true, + "requires": { + "bluebird": "^3.1.1" + } + }, + "constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/constants-browserify/download/constants-browserify-1.0.0.tgz", + "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", + "dev": true + }, + "content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmmirror.com/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dev": true, + "requires": { + "safe-buffer": "5.2.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + } + } + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/content-type/download/content-type-1.0.4.tgz", + "integrity": "sha1-4TjMdeBAxyexlm/l5fjJruJW/js=", + "dev": true + }, + "convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true + }, + "cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmmirror.com/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "dev": true + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmmirror.com/cookie-signature/download/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", + "dev": true + }, + "copy-concurrently": { + "version": "1.0.5", + "resolved": "https://registry.npmmirror.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz", + "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", + "dev": true, + "requires": { + "aproba": "^1.1.1", + "fs-write-stream-atomic": "^1.0.8", + "iferr": "^0.1.5", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.0" + } + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmmirror.com/copy-descriptor/download/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true + }, + "copy-to": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/copy-to/-/copy-to-2.0.1.tgz", + "integrity": "sha1-JoD7uAaKSNCGVrYJgJK9r8kG9KU=", + "dev": true + }, + "copy-webpack-plugin": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/copy-webpack-plugin/-/copy-webpack-plugin-5.1.2.tgz", + "integrity": "sha512-Uh7crJAco3AjBvgAy9Z75CjK8IG+gxaErro71THQ+vv/bl4HaQcpkexAY8KVW/T6D2W2IRr+couF/knIRkZMIQ==", + "dev": true, + "requires": { + "cacache": "^12.0.3", + "find-cache-dir": "^2.1.0", + "glob-parent": "^3.1.0", + "globby": "^7.1.1", + "is-glob": "^4.0.1", + "loader-utils": "^1.2.3", + "minimatch": "^3.0.4", + "normalize-path": "^3.0.0", + "p-limit": "^2.2.1", + "schema-utils": "^1.0.0", + "serialize-javascript": "^4.0.0", + "webpack-log": "^2.0.0" + }, + "dependencies": { + "array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "dev": true, + "requires": { + "array-uniq": "^1.0.1" + } + }, + "dir-glob": { + "version": "2.2.2", + "resolved": "https://registry.npmmirror.com/dir-glob/-/dir-glob-2.2.2.tgz", + "integrity": "sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==", + "dev": true, + "requires": { + "path-type": "^3.0.0" + } + }, + "find-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + } + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "globby": { + "version": "7.1.1", + "resolved": "https://registry.npmmirror.com/globby/-/globby-7.1.1.tgz", + "integrity": "sha512-yANWAN2DUcBtuus5Cpd+SKROzXHs2iVXFZt/Ykrfz6SAXqacLX25NZpltE+39ceMexYF4TtEadjuSTw8+3wX4g==", + "dev": true, + "requires": { + "array-union": "^1.0.1", + "dir-glob": "^2.0.0", + "glob": "^7.1.2", + "ignore": "^3.3.5", + "pify": "^3.0.0", + "slash": "^1.0.0" + } + }, + "ignore": { + "version": "3.3.10", + "resolved": "https://registry.npmmirror.com/ignore/-/ignore-3.3.10.tgz", + "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==", + "dev": true + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "dependencies": { + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true + } + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "requires": { + "pify": "^3.0.0" + } + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "dev": true + }, + "pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "dev": true, + "requires": { + "find-up": "^3.0.0" + } + }, + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + }, + "slash": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/slash/-/slash-1.0.0.tgz", + "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", + "dev": true + } + } + }, + "core-js": { + "version": "3.26.1", + "resolved": "https://registry.npmmirror.com/core-js/-/core-js-3.26.1.tgz", + "integrity": "sha512-21491RRQVzUn0GGM9Z1Jrpr6PNPxPi+Za8OM9q4tksTSnlbXXGKK1nXNg/QvwFYettXvSX6zWKCtHHfjN4puyA==", + "dev": true + }, + "core-js-compat": { + "version": "3.22.8", + "resolved": "https://registry.npmmirror.com/core-js-compat/-/core-js-compat-3.22.8.tgz", + "integrity": "sha512-pQnwg4xtuvc2Bs/5zYQPaEYYSuTxsF7LBWF0SvnVhthZo/Qe+rJpcEekrdNK5DWwDJ0gv0oI9NNX5Mppdy0ctg==", + "dev": true, + "requires": { + "browserslist": "^4.20.3", + "semver": "7.0.0" + }, + "dependencies": { + "semver": { + "version": "7.0.0", + "resolved": "https://registry.npmmirror.com/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "dev": true + } + } + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/core-util-is/download/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "cosmiconfig": { + "version": "7.0.1", + "resolved": "https://registry.npmmirror.com/cosmiconfig/-/cosmiconfig-7.0.1.tgz", + "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", + "dev": true, + "requires": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + } + }, + "create-ecdh": { + "version": "4.0.4", + "resolved": "https://registry.npmmirror.com/create-ecdh/-/create-ecdh-4.0.4.tgz", + "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "elliptic": "^6.5.3" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmmirror.com/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } + } + }, + "create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "dev": true, + "requires": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmmirror.com/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "dev": true, + "requires": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "cross-env": { + "version": "7.0.3", + "resolved": "https://registry.npmmirror.com/cross-env/-/cross-env-7.0.3.tgz", + "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.1" + }, + "dependencies": { + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "dependencies": { + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "crypto-browserify": { + "version": "3.12.0", + "resolved": "https://registry.npmmirror.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "dev": true, + "requires": { + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" + } + }, + "css-color-names": { + "version": "0.0.4", + "resolved": "https://registry.npmmirror.com/css-color-names/-/css-color-names-0.0.4.tgz", + "integrity": "sha512-zj5D7X1U2h2zsXOAM8EyUREBnnts6H+Jm+d1M2DbiQQcUtnqgQsMrdo8JW9R80YFUmIdBZeMu5wvYM7hcgWP/Q==", + "dev": true + }, + "css-declaration-sorter": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz", + "integrity": "sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==", + "dev": true, + "requires": { + "postcss": "^7.0.1", + "timsort": "^0.3.0" + }, + "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "css-loader": { + "version": "3.6.0", + "resolved": "https://registry.npmmirror.com/css-loader/-/css-loader-3.6.0.tgz", + "integrity": "sha512-M5lSukoWi1If8dhQAUCvj4H8vUt3vOnwbQBH9DdTm/s4Ym2B/3dPMtYZeJmq7Q3S3Pa+I94DcZ7pc9bP14cWIQ==", + "dev": true, + "requires": { + "camelcase": "^5.3.1", + "cssesc": "^3.0.0", + "icss-utils": "^4.1.1", + "loader-utils": "^1.2.3", + "normalize-path": "^3.0.0", + "postcss": "^7.0.32", + "postcss-modules-extract-imports": "^2.0.0", + "postcss-modules-local-by-default": "^3.0.2", + "postcss-modules-scope": "^2.2.0", + "postcss-modules-values": "^3.0.0", + "postcss-value-parser": "^4.1.0", + "schema-utils": "^2.7.0", + "semver": "^6.3.0" + }, + "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmmirror.com/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "dev": true, + "requires": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + } + }, + "css-select-base-adapter": { + "version": "0.1.1", + "resolved": "https://registry.npmmirror.com/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", + "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==" + }, + "css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmmirror.com/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "requires": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmmirror.com/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "dev": true + }, + "cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/cssesc/download/cssesc-3.0.0.tgz", + "integrity": "sha1-N3QZGZA7hoVl4cCep0dEXNGJg+4=", + "dev": true + }, + "cssnano": { + "version": "4.1.11", + "resolved": "https://registry.npmmirror.com/cssnano/-/cssnano-4.1.11.tgz", + "integrity": "sha512-6gZm2htn7xIPJOHY824ERgj8cNPgPxyCSnkXc4v7YvNW+TdVfzgngHcEhy/8D11kUWRUMbke+tC+AUcUsnMz2g==", + "dev": true, + "requires": { + "cosmiconfig": "^5.0.0", + "cssnano-preset-default": "^4.0.8", + "is-resolvable": "^1.0.0", + "postcss": "^7.0.0" + }, + "dependencies": { + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmmirror.com/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "cosmiconfig": { + "version": "5.2.1", + "resolved": "https://registry.npmmirror.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz", + "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", + "dev": true, + "requires": { + "import-fresh": "^2.0.0", + "is-directory": "^0.3.1", + "js-yaml": "^3.13.1", + "parse-json": "^4.0.0" + } + }, + "import-fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/import-fresh/-/import-fresh-2.0.0.tgz", + "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", + "dev": true, + "requires": { + "caller-path": "^2.0.0", + "resolve-from": "^3.0.0" + } + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmmirror.com/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "cssnano-preset-default": { + "version": "4.0.8", + "resolved": "https://registry.npmmirror.com/cssnano-preset-default/-/cssnano-preset-default-4.0.8.tgz", + "integrity": "sha512-LdAyHuq+VRyeVREFmuxUZR1TXjQm8QQU/ktoo/x7bz+SdOge1YKc5eMN6pRW7YWBmyq59CqYba1dJ5cUukEjLQ==", + "dev": true, + "requires": { + "css-declaration-sorter": "^4.0.1", + "cssnano-util-raw-cache": "^4.0.1", + "postcss": "^7.0.0", + "postcss-calc": "^7.0.1", + "postcss-colormin": "^4.0.3", + "postcss-convert-values": "^4.0.1", + "postcss-discard-comments": "^4.0.2", + "postcss-discard-duplicates": "^4.0.2", + "postcss-discard-empty": "^4.0.1", + "postcss-discard-overridden": "^4.0.1", + "postcss-merge-longhand": "^4.0.11", + "postcss-merge-rules": "^4.0.3", + "postcss-minify-font-values": "^4.0.2", + "postcss-minify-gradients": "^4.0.2", + "postcss-minify-params": "^4.0.2", + "postcss-minify-selectors": "^4.0.2", + "postcss-normalize-charset": "^4.0.1", + "postcss-normalize-display-values": "^4.0.2", + "postcss-normalize-positions": "^4.0.2", + "postcss-normalize-repeat-style": "^4.0.2", + "postcss-normalize-string": "^4.0.2", + "postcss-normalize-timing-functions": "^4.0.2", + "postcss-normalize-unicode": "^4.0.1", + "postcss-normalize-url": "^4.0.1", + "postcss-normalize-whitespace": "^4.0.2", + "postcss-ordered-values": "^4.1.2", + "postcss-reduce-initial": "^4.0.3", + "postcss-reduce-transforms": "^4.0.2", + "postcss-svgo": "^4.0.3", + "postcss-unique-selectors": "^4.0.1" + }, + "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "cssnano-util-get-arguments": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz", + "integrity": "sha512-6RIcwmV3/cBMG8Aj5gucQRsJb4vv4I4rn6YjPbVWd5+Pn/fuG+YseGvXGk00XLkoZkaj31QOD7vMUpNPC4FIuw==", + "dev": true + }, + "cssnano-util-get-match": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz", + "integrity": "sha512-JPMZ1TSMRUPVIqEalIBNoBtAYbi8okvcFns4O0YIhcdGebeYZK7dMyHJiQ6GqNBA9kE0Hym4Aqym5rPdsV/4Cw==", + "dev": true + }, + "cssnano-util-raw-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz", + "integrity": "sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA==", + "dev": true, + "requires": { + "postcss": "^7.0.0" + }, + "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "cssnano-util-same-parent": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz", + "integrity": "sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==", + "dev": true + }, + "csso": { + "version": "4.2.0", + "resolved": "https://registry.npmmirror.com/csso/-/csso-4.2.0.tgz", + "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", + "requires": { + "css-tree": "^1.1.2" + } + }, + "csstype": { + "version": "3.1.1", + "resolved": "https://registry.npmmirror.com/csstype/-/csstype-3.1.1.tgz", + "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==" + }, + "cyclist": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/cyclist/-/cyclist-1.0.1.tgz", + "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=", + "dev": true + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmmirror.com/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "data-uri-to-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz", + "integrity": "sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og==", + "dev": true + }, + "dateformat": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/dateformat/-/dateformat-2.2.0.tgz", + "integrity": "sha1-QGXiATz5+5Ft39gu+1Bq1MZ2kGI=", + "dev": true + }, + "de-indent": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/de-indent/-/de-indent-1.0.2.tgz", + "integrity": "sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==", + "dev": true + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + }, + "dependencies": { + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/decamelize/download/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "decamelize-keys": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/decamelize-keys/download/decamelize-keys-1.1.0.tgz", + "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=", + "dev": true, + "requires": { + "decamelize": "^1.1.0", + "map-obj": "^1.0.0" + }, + "dependencies": { + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "dev": true + } + } + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmmirror.com/decode-uri-component/download/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true + }, + "deep-equal": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/deep-equal/-/deep-equal-1.1.1.tgz", + "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", + "dev": true, + "requires": { + "is-arguments": "^1.0.4", + "is-date-object": "^1.0.1", + "is-regex": "^1.0.4", + "object-is": "^1.0.1", + "object-keys": "^1.1.1", + "regexp.prototype.flags": "^1.2.0" + } + }, + "deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmmirror.com/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmmirror.com/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "dev": true + }, + "default-gateway": { + "version": "5.0.5", + "resolved": "https://registry.npmmirror.com/default-gateway/-/default-gateway-5.0.5.tgz", + "integrity": "sha512-z2RnruVmj8hVMmAnEJMTIJNijhKCDiGjbLP+BHJFOT7ld3Bo5qcIBpVYDniqhbMIIf+jZDlkP2MkPXiQy/DBLA==", + "dev": true, + "requires": { + "execa": "^3.3.0" + }, + "dependencies": { + "execa": { + "version": "3.4.0", + "resolved": "https://registry.npmmirror.com/execa/-/execa-3.4.0.tgz", + "integrity": "sha512-r9vdGQk4bmCuK1yKQu1KTwcT2zwfWdbdaXfCtAh+5nU/4fSX+JAb7vZGvI5naJrQlvONrEB20jeruESI69530g==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "p-finally": "^2.0.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + } + }, + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmmirror.com/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "dev": true + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true + }, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "p-finally": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/p-finally/-/p-finally-2.0.1.tgz", + "integrity": "sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw==", + "dev": true + } + } + }, + "default-user-agent": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/default-user-agent/-/default-user-agent-1.0.0.tgz", + "integrity": "sha1-FsRu/cq6PtxF8k8r1IaLAbfCrcY=", + "dev": true, + "requires": { + "os-name": "~1.0.3" + } + }, + "defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "dev": true, + "requires": { + "clone": "^1.0.2" + } + }, + "define-properties": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/define-properties/-/define-properties-1.1.4.tgz", + "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", + "requires": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + } + }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "dependencies": { + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "degenerator": { + "version": "3.0.2", + "resolved": "https://registry.npmmirror.com/degenerator/-/degenerator-3.0.2.tgz", + "integrity": "sha512-c0mef3SNQo56t6urUU6tdQAs+ThoD0o9B9MJ8HEt7NQcGEILCRFqQb7ZbP9JAv+QF1Ky5plydhMR/IrqWDm+TQ==", + "dev": true, + "requires": { + "ast-types": "^0.13.2", + "escodegen": "^1.8.1", + "esprima": "^4.0.0", + "vm2": "^3.9.8" + } + }, + "del": { + "version": "4.1.1", + "resolved": "https://registry.npmmirror.com/del/-/del-4.1.1.tgz", + "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==", + "dev": true, + "requires": { + "@types/glob": "^7.1.1", + "globby": "^6.1.0", + "is-path-cwd": "^2.0.0", + "is-path-in-cwd": "^2.0.0", + "p-map": "^2.0.0", + "pify": "^4.0.1", + "rimraf": "^2.6.3" + }, + "dependencies": { + "array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "dev": true, + "requires": { + "array-uniq": "^1.0.1" + } + }, + "globby": { + "version": "6.1.0", + "resolved": "https://registry.npmmirror.com/globby/download/globby-6.1.0.tgz?cache=0&sync_timestamp=1591083783605&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fglobby%2Fdownload%2Fglobby-6.1.0.tgz", + "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", + "dev": true, + "requires": { + "array-union": "^1.0.1", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/pify/download/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + }, + "p-map": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/p-map/-/p-map-2.1.0.tgz", + "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", + "dev": true + } + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true + }, + "delegate": { + "version": "3.2.0", + "resolved": "https://registry.npmmirror.com/delegate/-/delegate-3.2.0.tgz", + "integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==" + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/depd/download/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true + }, + "des.js": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/des.js/-/des.js-1.0.1.tgz", + "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "dev": true + }, + "detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "dev": true + }, + "diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmmirror.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmmirror.com/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } + } + }, + "digest-header": { + "version": "0.0.1", + "resolved": "https://registry.npmmirror.com/digest-header/-/digest-header-0.0.1.tgz", + "integrity": "sha1-Ecz23uxXZqw3l0TZAcEsuklRS+Y=", + "dev": true, + "requires": { + "utility": "0.1.11" + }, + "dependencies": { + "utility": { + "version": "0.1.11", + "resolved": "https://registry.npmmirror.com/utility/-/utility-0.1.11.tgz", + "integrity": "sha1-/eYM+bTkdRlHoM9dEEzik2ciZxU=", + "dev": true, + "requires": { + "address": ">=0.0.1" + } + } + } + }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "requires": { + "path-type": "^4.0.0" + } + }, + "dns-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/dns-equal/download/dns-equal-1.0.0.tgz", + "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=", + "dev": true + }, + "dns-packet": { + "version": "1.3.4", + "resolved": "https://registry.npmmirror.com/dns-packet/-/dns-packet-1.3.4.tgz", + "integrity": "sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA==", + "dev": true, + "requires": { + "ip": "^1.1.0", + "safe-buffer": "^5.0.1" + } + }, + "dns-txt": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/dns-txt/download/dns-txt-2.0.2.tgz", + "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", + "dev": true, + "requires": { + "buffer-indexof": "^1.0.0" + } + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "dom-converter": { + "version": "0.2.0", + "resolved": "https://registry.npmmirror.com/dom-converter/-/dom-converter-0.2.0.tgz", + "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", + "dev": true, + "requires": { + "utila": "~0.4" + } + }, + "dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmmirror.com/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + } + }, + "domain-browser": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/domain-browser/-/domain-browser-1.2.0.tgz", + "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", + "dev": true + }, + "domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true + }, + "domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmmirror.com/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "dev": true, + "requires": { + "domelementtype": "^2.2.0" + } + }, + "domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmmirror.com/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dev": true, + "requires": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + } + }, + "dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmmirror.com/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "dev": true, + "requires": { + "is-obj": "^2.0.0" + } + }, + "dotenv": { + "version": "8.6.0", + "resolved": "https://registry.npmmirror.com/dotenv/-/dotenv-8.6.0.tgz", + "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==", + "dev": true + }, + "dotenv-expand": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/dotenv-expand/-/dotenv-expand-5.1.0.tgz", + "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==", + "dev": true + }, + "duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmmirror.com/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", + "dev": true + }, + "duplexify": { + "version": "3.7.1", + "resolved": "https://registry.npmmirror.com/duplexify/-/duplexify-3.7.1.tgz", + "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", + "dev": true, + "requires": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + } + }, + "eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmmirror.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, + "easy-stack": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/easy-stack/-/easy-stack-1.0.1.tgz", + "integrity": "sha512-wK2sCs4feiiJeFXn3zvY0p41mdU5VUgbgs1rNsc/y5ngFUijdWd+iIN8eoyuZHKB8xN6BL4PdWmzqFmxNg6V2w==", + "dev": true + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmmirror.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", + "dev": true, + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/ee-first/download/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", + "dev": true + }, + "ejs": { + "version": "2.7.4", + "resolved": "https://registry.npmmirror.com/ejs/-/ejs-2.7.4.tgz", + "integrity": "sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA==", + "dev": true + }, + "electron-to-chromium": { + "version": "1.4.147", + "resolved": "https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.4.147.tgz", + "integrity": "sha512-czclPqxLMPqPMkahKcske4TaS5lcznsc26ByBlEFDU8grTBVK9C5W6K9I6oEEhm4Ai4jTihGnys90xY1yjXcRg==", + "dev": true + }, + "elliptic": { + "version": "6.5.4", + "resolved": "https://registry.npmmirror.com/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "dev": true, + "requires": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmmirror.com/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } + } + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmmirror.com/emoji-regex/download/emoji-regex-8.0.0.tgz", + "integrity": "sha1-6Bj9ac5cz8tARZT4QpY79TFkzDc=", + "dev": true + }, + "emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/emojis-list/download/emojis-list-3.0.0.tgz", + "integrity": "sha1-VXBmIEatKeLpFucariYKvf9Pang=", + "dev": true + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/encodeurl/download/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "dev": true + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmmirror.com/end-of-stream/download/end-of-stream-1.4.4.tgz?cache=0&sync_timestamp=1569416367473&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fend-of-stream%2Fdownload%2Fend-of-stream-1.4.4.tgz", + "integrity": "sha1-WuZKX0UFe682JuwU2gyl5LJDHrA=", + "requires": { + "once": "^1.4.0" + } + }, + "end-or-error": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/end-or-error/-/end-or-error-1.0.1.tgz", + "integrity": "sha1-3HpiEP5403L+4kqLSJnb0VVBTcs=", + "dev": true + }, + "enhanced-resolve": { + "version": "0.9.1", + "resolved": "https://registry.npmmirror.com/enhanced-resolve/-/enhanced-resolve-0.9.1.tgz", + "integrity": "sha1-TW5omzcl+GCQknzMhs2fFjW4ni4=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "memory-fs": "^0.2.0", + "tapable": "^0.1.8" + } + }, + "entities": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==" + }, + "errno": { + "version": "0.1.8", + "resolved": "https://registry.npmmirror.com/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "dev": true, + "requires": { + "prr": "~1.0.1" + } + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmmirror.com/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "error-stack-parser": { + "version": "2.1.4", + "resolved": "https://registry.npmmirror.com/error-stack-parser/-/error-stack-parser-2.1.4.tgz", + "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==", + "dev": true, + "requires": { + "stackframe": "^1.3.4" + } + }, + "es-abstract": { + "version": "1.20.1", + "resolved": "https://registry.npmmirror.com/es-abstract/-/es-abstract-1.20.1.tgz", + "integrity": "sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==", + "requires": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "regexp.prototype.flags": "^1.4.3", + "string.prototype.trimend": "^1.0.5", + "string.prototype.trimstart": "^1.0.5", + "unbox-primitive": "^1.0.2" + } + }, + "es-array-method-boxes-properly": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", + "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==" + }, + "es-shim-unscopables": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", + "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmmirror.com/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/escape-html/download/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmmirror.com/escape-string-regexp/download/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "escodegen": { + "version": "1.14.3", + "resolved": "https://registry.npmmirror.com/escodegen/-/escodegen-1.14.3.tgz", + "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", + "dev": true, + "requires": { + "esprima": "^4.0.1", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "optional": true + } + } + }, + "eslint": { + "version": "8.18.0", + "resolved": "https://registry.npmmirror.com/eslint/-/eslint-8.18.0.tgz", + "integrity": "sha512-As1EfFMVk7Xc6/CvhssHUjsAQSkpfXvUGMFC3ce8JDe6WvqCgRrLOBQbVpsBFr1X1V+RACOadnzVvcUS5ni2bA==", + "dev": true, + "requires": { + "@eslint/eslintrc": "^1.3.0", + "@humanwhocodes/config-array": "^0.9.2", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.1.1", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.2", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^6.0.1", + "globals": "^13.15.0", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true + }, + "eslint-scope": { + "version": "7.1.1", + "resolved": "https://registry.npmmirror.com/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + } + }, + "eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmmirror.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "dev": true + }, + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmmirror.com/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + }, + "glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "requires": { + "is-glob": "^4.0.3" + }, + "dependencies": { + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + } + } + }, + "globals": { + "version": "13.15.0", + "resolved": "https://registry.npmmirror.com/globals/-/globals-13.15.0.tgz", + "integrity": "sha512-bpzcOlgDhMG070Av0Vy5Owklpv1I6+j96GhUI7Rh7IzDCKLzboflLrrfqMu8NquDbiR4EOQk7XzJwqVJxicxog==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npmmirror.com/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmmirror.com/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "requires": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + } + }, + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmmirror.com/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1" + } + }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmmirror.com/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true + } + } + }, + "eslint-config-prettier": { + "version": "8.5.0", + "resolved": "https://registry.npmmirror.com/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", + "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==", + "dev": true + }, + "eslint-config-standard": { + "version": "16.0.3", + "resolved": "https://registry.npmmirror.com/eslint-config-standard/-/eslint-config-standard-16.0.3.tgz", + "integrity": "sha512-x4fmJL5hGqNJKGHSjnLdgA6U6h1YW/G2dW9fA+cyVur4SK6lyue8+UgNKWlZtUDTXvgKDD/Oa3GQjmB5kjtVvg==", + "dev": true + }, + "eslint-import-resolver-node": { + "version": "0.3.6", + "resolved": "https://registry.npmmirror.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", + "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", + "dev": true, + "requires": { + "debug": "^3.2.7", + "resolve": "^1.20.0" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmmirror.com/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmmirror.com/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "dev": true, + "requires": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + } + } + }, + "eslint-import-resolver-webpack": { + "version": "0.13.2", + "resolved": "https://registry.npmmirror.com/eslint-import-resolver-webpack/-/eslint-import-resolver-webpack-0.13.2.tgz", + "integrity": "sha512-XodIPyg1OgE2h5BDErz3WJoK7lawxKTJNhgPNafRST6csC/MZC+L5P6kKqsZGRInpbgc02s/WZMrb4uGJzcuRg==", + "dev": true, + "requires": { + "array-find": "^1.0.0", + "debug": "^3.2.7", + "enhanced-resolve": "^0.9.1", + "find-root": "^1.1.0", + "has": "^1.0.3", + "interpret": "^1.4.0", + "is-core-module": "^2.7.0", + "is-regex": "^1.1.4", + "lodash": "^4.17.21", + "resolve": "^1.20.0", + "semver": "^5.7.1" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmmirror.com/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmmirror.com/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "dev": true, + "requires": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + } + } + }, + "eslint-module-utils": { + "version": "2.7.4", + "resolved": "https://registry.npmmirror.com/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz", + "integrity": "sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==", + "dev": true, + "requires": { + "debug": "^3.2.7" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmmirror.com/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + } + } + }, + "eslint-plugin-es": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz", + "integrity": "sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==", + "dev": true, + "requires": { + "eslint-utils": "^2.0.0", + "regexpp": "^3.0.0" + }, + "dependencies": { + "eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + } + }, + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + } + } + }, + "eslint-plugin-import": { + "version": "2.26.0", + "resolved": "https://registry.npmmirror.com/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz", + "integrity": "sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==", + "dev": true, + "requires": { + "array-includes": "^3.1.4", + "array.prototype.flat": "^1.2.5", + "debug": "^2.6.9", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.6", + "eslint-module-utils": "^2.7.3", + "has": "^1.0.3", + "is-core-module": "^2.8.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.values": "^1.1.5", + "resolve": "^1.22.0", + "tsconfig-paths": "^3.14.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmmirror.com/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "dev": true, + "requires": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + } + } + }, + "eslint-plugin-node": { + "version": "11.1.0", + "resolved": "https://registry.npmmirror.com/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz", + "integrity": "sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==", + "dev": true, + "requires": { + "eslint-plugin-es": "^3.0.0", + "eslint-utils": "^2.0.0", + "ignore": "^5.1.1", + "minimatch": "^3.0.4", + "resolve": "^1.10.1", + "semver": "^6.1.0" + }, + "dependencies": { + "eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + } + }, + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmmirror.com/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "eslint-plugin-prettier": { + "version": "4.2.1", + "resolved": "https://registry.npmmirror.com/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz", + "integrity": "sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==", + "dev": true, + "requires": { + "prettier-linter-helpers": "^1.0.0" + } + }, + "eslint-plugin-promise": { + "version": "6.1.1", + "resolved": "https://registry.npmmirror.com/eslint-plugin-promise/-/eslint-plugin-promise-6.1.1.tgz", + "integrity": "sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==", + "dev": true + }, + "eslint-plugin-sonarjs": { + "version": "0.17.0", + "resolved": "https://registry.npmmirror.com/eslint-plugin-sonarjs/-/eslint-plugin-sonarjs-0.17.0.tgz", + "integrity": "sha512-jtGtxI49UbJJeJj7CVRLI3+LLH+y+hkR3GOOwM7vBbci9DEFIRGCWvEd2BJScrzltZ6D6iubukTAfc9cyG7sdw==", + "dev": true + }, + "eslint-plugin-vue": { + "version": "9.8.0", + "resolved": "https://registry.npmmirror.com/eslint-plugin-vue/-/eslint-plugin-vue-9.8.0.tgz", + "integrity": "sha512-E/AXwcTzunyzM83C2QqDHxepMzvI2y6x+mmeYHbVDQlKFqmKYvRrhaVixEeeG27uI44p9oKDFiyCRw4XxgtfHA==", + "dev": true, + "requires": { + "eslint-utils": "^3.0.0", + "natural-compare": "^1.4.0", + "nth-check": "^2.0.1", + "postcss-selector-parser": "^6.0.9", + "semver": "^7.3.5", + "vue-eslint-parser": "^9.0.1", + "xml-name-validator": "^4.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "postcss-selector-parser": { + "version": "6.0.11", + "resolved": "https://registry.npmmirror.com/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz", + "integrity": "sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==", + "dev": true, + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } + }, + "semver": { + "version": "7.3.8", + "resolved": "https://registry.npmmirror.com/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmmirror.com/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^2.0.0" + } + }, + "eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true + }, + "eslint-webpack-plugin": { + "version": "2.7.0", + "resolved": "https://registry.npmmirror.com/eslint-webpack-plugin/-/eslint-webpack-plugin-2.7.0.tgz", + "integrity": "sha512-bNaVVUvU4srexGhVcayn/F4pJAz19CWBkKoMx7aSQ4wtTbZQCnG5O9LHCE42mM+JSKOUp7n6vd5CIwzj7lOVGA==", + "dev": true, + "requires": { + "@types/eslint": "^7.29.0", + "arrify": "^2.0.1", + "jest-worker": "^27.5.1", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "schema-utils": "^3.1.1" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmmirror.com/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + } + }, + "schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "espree": { + "version": "9.3.2", + "resolved": "https://registry.npmmirror.com/espree/-/espree-9.3.2.tgz", + "integrity": "sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA==", + "dev": true, + "requires": { + "acorn": "^8.7.1", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.3.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmmirror.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "dev": true + } + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + }, + "esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmmirror.com/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmmirror.com/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/estraverse/download/estraverse-4.3.0.tgz?cache=0&sync_timestamp=1586968505635&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Festraverse%2Fdownload%2Festraverse-4.3.0.tgz", + "integrity": "sha1-OYrT88WiSUi+dyXoPRGn3ijNvR0=", + "dev": true + }, + "estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmmirror.com/esutils/download/esutils-2.0.3.tgz", + "integrity": "sha1-dNLrTeC42hKTcRkQ1Qd1ubcQ72Q=", + "dev": true + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmmirror.com/etag/download/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "dev": true + }, + "event-pubsub": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/event-pubsub/-/event-pubsub-4.3.0.tgz", + "integrity": "sha512-z7IyloorXvKbFx9Bpie2+vMJKKx1fH1EN5yiTfp8CiLOTptSYy1g8H4yDpGlEdshL1PBiFtBHepF2cNsqeEeFQ==", + "dev": true + }, + "eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmmirror.com/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" + }, + "events": { + "version": "3.3.0", + "resolved": "https://registry.npmmirror.com/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==" + }, + "eventsource": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/eventsource/-/eventsource-1.1.2.tgz", + "integrity": "sha512-xAH3zWhgO2/3KIniEKYPr8plNSzlGINOUqYj0m0u7AB81iRw8b/3E73W6AuU+6klLbaSFmZnaETQ2lXPfAydrA==", + "dev": true + }, + "evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "dev": true, + "requires": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "execa": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dev": true, + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "dependencies": { + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dev": true, + "requires": { + "path-key": "^2.0.0" + } + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + } + } + }, + "execall": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/execall/-/execall-2.0.0.tgz", + "integrity": "sha512-0FU2hZ5Hh6iQnarpRtQurM/aAvp3RIbfvgLHrcqJYzhXyV2KFruhuChf9NC6waAhiUR7FFtlugkI4p7f2Fqlow==", + "dev": true, + "requires": { + "clone-regexp": "^2.1.0" + } + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmmirror.com/expand-brackets/download/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmmirror.com/define-property/download/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "express": { + "version": "4.18.1", + "resolved": "https://registry.npmmirror.com/express/-/express-4.18.1.tgz", + "integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==", + "dev": true, + "requires": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.0", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.10.3", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "dependencies": { + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", + "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true + }, + "qs": { + "version": "6.10.3", + "resolved": "https://registry.npmmirror.com/qs/-/qs-6.10.3.tgz", + "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", + "dev": true, + "requires": { + "side-channel": "^1.0.4" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + }, + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true + } + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmmirror.com/extend/download/extend-3.0.2.tgz", + "integrity": "sha1-+LETa0Bx+9jrFAr/hYsQGewpFfo=", + "dev": true + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmmirror.com/extend-shallow/download/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmmirror.com/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/define-property/download/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", + "dev": true + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmmirror.com/fast-deep-equal/download/fast-deep-equal-3.1.3.tgz?cache=0&sync_timestamp=1591599697571&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Ffast-deep-equal%2Fdownload%2Ffast-deep-equal-3.1.3.tgz", + "integrity": "sha1-On1WtVnWy8PrUSMlJE5hmmXGxSU=" + }, + "fast-diff": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/fast-diff/-/fast-diff-1.2.0.tgz", + "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", + "dev": true + }, + "fast-glob": { + "version": "3.2.11", + "resolved": "https://registry.npmmirror.com/fast-glob/-/fast-glob-3.2.11.tgz", + "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "dependencies": { + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + } + } + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/fast-json-stable-stringify/download/fast-json-stable-stringify-2.1.0.tgz?cache=0&sync_timestamp=1576340291001&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Ffast-json-stable-stringify%2Fdownload%2Ffast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha1-h0v2nG9ATCtdmcSBNBOZ/VWJJjM=" + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmmirror.com/fast-levenshtein/download/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "fastest-levenshtein": { + "version": "1.0.12", + "resolved": "https://registry.npmmirror.com/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz", + "integrity": "sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==", + "dev": true + }, + "fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmmirror.com/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmmirror.com/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "dev": true, + "requires": { + "websocket-driver": ">=0.5.1" + } + }, + "figgy-pudding": { + "version": "3.5.2", + "resolved": "https://registry.npmmirror.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz", + "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==" + }, + "file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmmirror.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "requires": { + "flat-cache": "^3.0.4" + } + }, + "file-loader": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/file-loader/-/file-loader-4.3.0.tgz", + "integrity": "sha512-aKrYPYjF1yG3oX0kWRrqrSMfgftm7oJW5M+m4owoldH5C51C0RkIwB++JbRvEW3IU6/ZG5n8UvEcdgwOt2UOWA==", + "dev": true, + "requires": { + "loader-utils": "^1.2.3", + "schema-utils": "^2.5.0" + } + }, + "file-uri-to-path": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/file-uri-to-path/-/file-uri-to-path-2.0.0.tgz", + "integrity": "sha512-hjPFI8oE/2iQPVe4gbrJ73Pp+Xfub2+WI2LlXDbsaJBwT5wuMh35WNWVYYTpnz895shtwfyutMFLFywpQAFdLg==", + "dev": true + }, + "filesize": { + "version": "3.6.1", + "resolved": "https://registry.npmmirror.com/filesize/-/filesize-3.6.1.tgz", + "integrity": "sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg==", + "dev": true + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmmirror.com/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true + } + } + }, + "find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmmirror.com/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + } + }, + "find-root": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/find-root/-/find-root-1.1.0.tgz", + "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==", + "dev": true + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmmirror.com/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "requires": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "dependencies": { + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmmirror.com/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "flatted": { + "version": "3.2.5", + "resolved": "https://registry.npmmirror.com/flatted/-/flatted-3.2.5.tgz", + "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==", + "dev": true + }, + "flush-write-stream": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz", + "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "readable-stream": "^2.3.6" + } + }, + "follow-redirects": { + "version": "1.15.2", + "resolved": "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.2.tgz", + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", + "dev": true + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/for-in/download/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", + "dev": true + }, + "fork-ts-checker-webpack-plugin": { + "version": "6.5.2", + "resolved": "https://registry.npmmirror.com/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.2.tgz", + "integrity": "sha512-m5cUmF30xkZ7h4tWUgTAcEaKmUW7tfyUyTqNNOz7OxWJ0v1VWKTcOvH8FWHUwSjlW/356Ijc9vi3XfcPstpQKA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.8.3", + "@types/json-schema": "^7.0.5", + "chalk": "^4.1.0", + "chokidar": "^3.4.2", + "cosmiconfig": "^6.0.0", + "deepmerge": "^4.2.2", + "fs-extra": "^9.0.0", + "glob": "^7.1.6", + "memfs": "^3.1.2", + "minimatch": "^3.0.4", + "schema-utils": "2.7.0", + "semver": "^7.3.2", + "tapable": "^1.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "cosmiconfig": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/cosmiconfig/-/cosmiconfig-6.0.0.tgz", + "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", + "dev": true, + "requires": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.7.2" + } + }, + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmmirror.com/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmmirror.com/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "schema-utils": { + "version": "2.7.0", + "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-2.7.0.tgz", + "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.4", + "ajv": "^6.12.2", + "ajv-keywords": "^3.4.1" + } + }, + "semver": { + "version": "7.3.8", + "resolved": "https://registry.npmmirror.com/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "tapable": { + "version": "1.1.3", + "resolved": "https://registry.npmmirror.com/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", + "dev": true + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmmirror.com/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "formstream": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/formstream/-/formstream-1.1.1.tgz", + "integrity": "sha512-yHRxt3qLFnhsKAfhReM4w17jP+U1OlhUjnKPPtonwKbIJO7oBP0MvoxkRUwb8AU9n0MIkYy5X5dK6pQnbj+R2Q==", + "dev": true, + "requires": { + "destroy": "^1.0.4", + "mime": "^2.5.2", + "pause-stream": "~0.0.11" + }, + "dependencies": { + "mime": { + "version": "2.6.0", + "resolved": "https://registry.npmmirror.com/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "dev": true + } + } + }, + "forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmmirror.com/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "dev": true + }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/fragment-cache/download/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dev": true, + "requires": { + "map-cache": "^0.2.2" + } + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmmirror.com/fresh/download/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "dev": true + }, + "from2": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/from2/-/from2-2.3.0.tgz", + "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + } + }, + "fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmmirror.com/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "fs-monkey": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/fs-monkey/-/fs-monkey-1.0.3.tgz", + "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==", + "dev": true + }, + "fs-write-stream-atomic": { + "version": "1.0.10", + "resolved": "https://registry.npmmirror.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", + "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "iferr": "^0.1.5", + "imurmurhash": "^0.1.4", + "readable-stream": "1 || 2" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/fs.realpath/download/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "optional": true + }, + "ftp": { + "version": "0.3.10", + "resolved": "https://registry.npmmirror.com/ftp/-/ftp-0.3.10.tgz", + "integrity": "sha1-kZfYYa2BQvPmPVqDv+TFn3MwiF0=", + "dev": true, + "requires": { + "readable-stream": "1.1.x", + "xregexp": "2.0.0" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmmirror.com/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + } + } + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "function.prototype.name": { + "version": "1.1.5", + "resolved": "https://registry.npmmirror.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz", + "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" + } + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/functional-red-black-tree/download/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmmirror.com/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==" + }, + "gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmmirror.com/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmmirror.com/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + } + }, + "get-ready": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/get-ready/-/get-ready-1.0.0.tgz", + "integrity": "sha1-+RgX8emt7P6hOlYq38jeiDqzR4I=", + "dev": true + }, + "get-stdin": { + "version": "8.0.0", + "resolved": "https://registry.npmmirror.com/get-stdin/-/get-stdin-8.0.0.tgz", + "integrity": "sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==", + "dev": true + }, + "get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmmirror.com/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true + }, + "get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + } + }, + "get-uri": { + "version": "3.0.2", + "resolved": "https://registry.npmmirror.com/get-uri/-/get-uri-3.0.2.tgz", + "integrity": "sha512-+5s0SJbGoyiJTZZ2JTpFPLMPSch72KEqGOTvQsBqg0RBWvwhWUSYZFAtz3TPW0GXJuLBJPts1E241iHg+VRfhg==", + "dev": true, + "requires": { + "@tootallnate/once": "1", + "data-uri-to-buffer": "3", + "debug": "4", + "file-uri-to-path": "2", + "fs-extra": "^8.1.0", + "ftp": "^0.3.10" + }, + "dependencies": { + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmmirror.com/get-value/download/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmmirror.com/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmmirror.com/glob/download/glob-7.1.6.tgz", + "integrity": "sha1-FB8zuBp8JJLhJVlDB0gMRmeSeKY=", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", + "dev": true, + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", + "dev": true, + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "glob-to-regexp": { + "version": "0.3.0", + "resolved": "https://registry.npmmirror.com/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz", + "integrity": "sha512-Iozmtbqv0noj0uDDqoL0zNq0VBEfK2YFoMAZoxJe4cwphvLR+JskfF30QhXHOR4m3KrE6NLRYw+U9MRXvifyig==", + "dev": true + }, + "global-modules": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/global-modules/-/global-modules-2.0.0.tgz", + "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", + "dev": true, + "requires": { + "global-prefix": "^3.0.0" + } + }, + "global-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "dev": true, + "requires": { + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" + } + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmmirror.com/globals/download/globals-11.12.0.tgz?cache=0&sync_timestamp=1591426170432&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fglobals%2Fdownload%2Fglobals-11.12.0.tgz", + "integrity": "sha1-q4eVM4hooLq9hSV1gBjCp+uVxC4=", + "dev": true + }, + "globby": { + "version": "11.1.0", + "resolved": "https://registry.npmmirror.com/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + } + }, + "globjoin": { + "version": "0.1.4", + "resolved": "https://registry.npmmirror.com/globjoin/download/globjoin-0.1.4.tgz", + "integrity": "sha1-L0SUrIkZ43Z8XLtpHp9GMyQoXUM=", + "dev": true + }, + "gonzales-pe": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/gonzales-pe/-/gonzales-pe-4.3.0.tgz", + "integrity": "sha512-otgSPpUmdWJ43VXyiNgEYE4luzHCL2pz4wQ0OnDluC6Eg4Ko3Vexy/SrSynglw/eR+OhkzmqFCZa/OFa/RgAOQ==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "good-listener": { + "version": "1.2.2", + "resolved": "https://registry.npmmirror.com/good-listener/download/good-listener-1.2.2.tgz", + "integrity": "sha1-1TswzfkxPf+33JoNR3CWqm0UXFA=", + "requires": { + "delegate": "^3.1.2" + } + }, + "gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.3" + }, + "dependencies": { + "get-intrinsic": { + "version": "1.1.3", + "resolved": "https://registry.npmmirror.com/get-intrinsic/-/get-intrinsic-1.1.3.tgz", + "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + } + } + } + }, + "graceful-fs": { + "version": "4.2.4", + "resolved": "https://registry.npmmirror.com/graceful-fs/download/graceful-fs-4.2.4.tgz", + "integrity": "sha1-Ila94U02MpWMRl68ltxGfKB6Kfs=", + "dev": true + }, + "gzip-size": { + "version": "5.1.1", + "resolved": "https://registry.npmmirror.com/gzip-size/-/gzip-size-5.1.1.tgz", + "integrity": "sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA==", + "dev": true, + "requires": { + "duplexer": "^0.1.1", + "pify": "^4.0.1" + } + }, + "handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", + "dev": true + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", + "dev": true + }, + "har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmmirror.com/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "dev": true, + "requires": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + } + }, + "hard-rejection": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/hard-rejection/-/hard-rejection-2.1.0.tgz", + "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", + "dev": true + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/has-flag/download/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "requires": { + "get-intrinsic": "^1.1.1" + } + }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" + }, + "has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "requires": { + "has-symbols": "^1.0.2" + } + }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/has-value/download/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dev": true, + "requires": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/has-values/download/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/kind-of/download/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "hash-base": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "dev": true, + "requires": { + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + } + } + }, + "hash-sum": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/hash-sum/-/hash-sum-1.0.2.tgz", + "integrity": "sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=", + "dev": true + }, + "hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmmirror.com/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "he": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/he/download/he-1.2.0.tgz", + "integrity": "sha1-hK5l+n6vsWX922FWauFLrwVmTw8=", + "dev": true + }, + "hex-color-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/hex-color-regex/-/hex-color-regex-1.1.0.tgz", + "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==", + "dev": true + }, + "highlight.js": { + "version": "10.7.3", + "resolved": "https://registry.npmmirror.com/highlight.js/-/highlight.js-10.7.3.tgz", + "integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==", + "dev": true + }, + "hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/hmac-drbg/download/hmac-drbg-1.0.1.tgz", + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "dev": true, + "requires": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "hoopy": { + "version": "0.1.4", + "resolved": "https://registry.npmmirror.com/hoopy/-/hoopy-0.1.4.tgz", + "integrity": "sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ==", + "dev": true + }, + "hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmmirror.com/hpack.js/download/hpack.js-2.1.6.tgz", + "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "hsl-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/hsl-regex/-/hsl-regex-1.0.0.tgz", + "integrity": "sha512-M5ezZw4LzXbBKMruP+BNANf0k+19hDQMgpzBIYnya//Al+fjNct9Wf3b1WedLqdEs2hKBvxq/jh+DsHJLj0F9A==", + "dev": true + }, + "hsla-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/hsla-regex/-/hsla-regex-1.0.0.tgz", + "integrity": "sha512-7Wn5GMLuHBjZCb2bTmnDOycho0p/7UVaAeqXZGbHrBCl6Yd/xDhQJAXe6Ga9AXJH2I5zY1dEdYw2u1UptnSBJA==", + "dev": true + }, + "html-entities": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/html-entities/-/html-entities-1.4.0.tgz", + "integrity": "sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA==", + "dev": true + }, + "html-minifier": { + "version": "3.5.21", + "resolved": "https://registry.npmmirror.com/html-minifier/-/html-minifier-3.5.21.tgz", + "integrity": "sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA==", + "dev": true, + "requires": { + "camel-case": "3.0.x", + "clean-css": "4.2.x", + "commander": "2.17.x", + "he": "1.2.x", + "param-case": "2.1.x", + "relateurl": "0.2.x", + "uglify-js": "3.4.x" + }, + "dependencies": { + "commander": { + "version": "2.17.1", + "resolved": "https://registry.npmmirror.com/commander/-/commander-2.17.1.tgz", + "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==", + "dev": true + } + } + }, + "html-tags": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/html-tags/-/html-tags-2.0.0.tgz", + "integrity": "sha1-ELMKOGCF9Dzt41PMj6fLDe7qZos=", + "dev": true + }, + "html-webpack-plugin": { + "version": "3.2.0", + "resolved": "https://registry.npmmirror.com/html-webpack-plugin/-/html-webpack-plugin-3.2.0.tgz", + "integrity": "sha512-Br4ifmjQojUP4EmHnRBoUIYcZ9J7M4bTMcm7u6xoIAIuq2Nte4TzXX0533owvkQKQD1WeMTTTyD4Ni4QKxS0Bg==", + "dev": true, + "requires": { + "html-minifier": "^3.2.3", + "loader-utils": "^0.2.16", + "lodash": "^4.17.3", + "pretty-error": "^2.0.2", + "tapable": "^1.0.0", + "toposort": "^1.0.0", + "util.promisify": "1.0.0" + }, + "dependencies": { + "big.js": { + "version": "3.2.0", + "resolved": "https://registry.npmmirror.com/big.js/-/big.js-3.2.0.tgz", + "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==", + "dev": true + }, + "emojis-list": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/emojis-list/-/emojis-list-2.1.0.tgz", + "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", + "dev": true + }, + "json5": { + "version": "0.5.1", + "resolved": "https://registry.npmmirror.com/json5/-/json5-0.5.1.tgz", + "integrity": "sha512-4xrs1aW+6N5DalkqSVA8fxh458CXvR99WU8WLKmq4v8eWAL86Xo3BVqyd3SkA9wEVjCMqyvvRRkshAdOnBp5rw==", + "dev": true + }, + "loader-utils": { + "version": "0.2.17", + "resolved": "https://registry.npmmirror.com/loader-utils/-/loader-utils-0.2.17.tgz", + "integrity": "sha512-tiv66G0SmiOx+pLWMtGEkfSEejxvb6N6uRrQjfWJIT79W9GMpgKeCAmm9aVBKtd4WEgntciI8CsGqjpDoCWJug==", + "dev": true, + "requires": { + "big.js": "^3.1.3", + "emojis-list": "^2.0.0", + "json5": "^0.5.0", + "object-assign": "^4.0.1" + } + }, + "tapable": { + "version": "1.1.3", + "resolved": "https://registry.npmmirror.com/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", + "dev": true + }, + "util.promisify": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/util.promisify/-/util.promisify-1.0.0.tgz", + "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "object.getownpropertydescriptors": "^2.0.3" + } + } + } + }, + "html-webpack-tags-plugin": { + "version": "2.0.17", + "resolved": "https://registry.npmmirror.com/html-webpack-tags-plugin/-/html-webpack-tags-plugin-2.0.17.tgz", + "integrity": "sha512-TKT8hnumMni6ztKfWZpP+UBeA7+aUn+qQQ4c9wT/p1IGTO/QWoIc19E+ZrxCcToDMjBO1NMYWkUbW4c4NtlGvg==", + "dev": true, + "requires": { + "glob": "^7.1.4", + "minimatch": "^3.0.4", + "slash": "^3.0.0" + } + }, + "htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmmirror.com/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + } + }, + "http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmmirror.com/http-deceiver/download/http-deceiver-1.2.7.tgz", + "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=", + "dev": true + }, + "http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dev": true, + "requires": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "dependencies": { + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true + }, + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true + } + } + }, + "http-parser-js": { + "version": "0.5.6", + "resolved": "https://registry.npmmirror.com/http-parser-js/-/http-parser-js-0.5.6.tgz", + "integrity": "sha512-vDlkRPDJn93swjcjqMSaGSPABbIarsr1TLAui/gLDXzV5VsJNdXNzMYDyNBLQkjWQCJ1uizu8T2oDMhmGt0PRA==", + "dev": true + }, + "http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmmirror.com/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dev": true, + "requires": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + } + }, + "http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "dev": true, + "requires": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + }, + "dependencies": { + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "http-proxy-middleware": { + "version": "0.19.1", + "resolved": "https://registry.npmmirror.com/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz", + "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==", + "dev": true, + "requires": { + "http-proxy": "^1.17.0", + "is-glob": "^4.0.0", + "lodash": "^4.17.11", + "micromatch": "^3.1.10" + }, + "dependencies": { + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmmirror.com/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmmirror.com/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + } + } + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "https-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/https-browserify/download/https-browserify-1.0.0.tgz", + "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", + "dev": true + }, + "https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmmirror.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dev": true, + "requires": { + "agent-base": "6", + "debug": "4" + }, + "dependencies": { + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "human-signals": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/human-signals/-/human-signals-3.0.1.tgz", + "integrity": "sha512-rQLskxnM/5OCldHo+wNXbpVgDn5A17CUoKX+7Sokwaknlq7CdSnphy0W39GU8dw59XiCXmFXDg4fRuckQRKewQ==", + "dev": true + }, + "humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0=", + "dev": true, + "requires": { + "ms": "^2.0.0" + } + }, + "husky": { + "version": "8.0.1", + "resolved": "https://registry.npmmirror.com/husky/-/husky-8.0.1.tgz", + "integrity": "sha512-xs7/chUH/CKdOCs7Zy0Aev9e/dKOMZf3K1Az1nar3tzlv0jfqnYtu235bstsWTmXOR0EfINrPa97yy4Lz6RiKw==", + "dev": true + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmmirror.com/iconv-lite/download/iconv-lite-0.4.24.tgz?cache=0&sync_timestamp=1591605412872&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Ficonv-lite%2Fdownload%2Ficonv-lite-0.4.24.tgz", + "integrity": "sha1-ICK0sl+93CHS9SSXSkdKr+czkIs=", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "icss-utils": { + "version": "4.1.1", + "resolved": "https://registry.npmmirror.com/icss-utils/-/icss-utils-4.1.1.tgz", + "integrity": "sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA==", + "dev": true, + "requires": { + "postcss": "^7.0.14" + }, + "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true + }, + "iferr": { + "version": "0.1.5", + "resolved": "https://registry.npmmirror.com/iferr/-/iferr-0.1.5.tgz", + "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", + "dev": true + }, + "ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmmirror.com/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "dev": true + }, + "immutable": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/immutable/-/immutable-4.1.0.tgz", + "integrity": "sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==", + "dev": true + }, + "import-cwd": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/import-cwd/-/import-cwd-2.1.0.tgz", + "integrity": "sha512-Ew5AZzJQFqrOV5BTW3EIoHAnoie1LojZLXKcCQ/yTRyVZosBhK1x1ViYjHGf5pAFOq8ZyChZp6m/fSN7pJyZtg==", + "dev": true, + "requires": { + "import-from": "^2.1.0" + } + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmmirror.com/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "import-from": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/import-from/-/import-from-2.1.0.tgz", + "integrity": "sha512-0vdnLL2wSGnhlRmzHJAg5JHjt1l2vYhzJ7tNLGbeVg0fse56tpGaH0uzH+r9Slej+BSXXEHvBKDEnVSLLE9/+w==", + "dev": true, + "requires": { + "resolve-from": "^3.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==", + "dev": true + } + } + }, + "import-lazy": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/import-lazy/-/import-lazy-4.0.0.tgz", + "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==", + "dev": true + }, + "import-local": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/import-local/-/import-local-2.0.0.tgz", + "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", + "dev": true, + "requires": { + "pkg-dir": "^3.0.0", + "resolve-cwd": "^2.0.0" + }, + "dependencies": { + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "dev": true, + "requires": { + "find-up": "^3.0.0" + } + } + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmmirror.com/imurmurhash/download/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/indent-string/download/indent-string-4.0.0.tgz", + "integrity": "sha1-Yk+PRJfWGbLZdoUx1Y9BIoVNclE=", + "dev": true + }, + "indexes-of": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/indexes-of/download/indexes-of-1.0.1.tgz", + "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=", + "dev": true + }, + "infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/infer-owner/download/infer-owner-1.0.4.tgz", + "integrity": "sha1-xM78qo5RBRwqQLos6KPScpWvlGc=", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmmirror.com/inflight/download/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmmirror.com/inherits/download/inherits-2.0.4.tgz", + "integrity": "sha1-D6LGT5MpF8NDOg3tVTY6rjdBa3w=", + "dev": true + }, + "ini": { + "version": "1.3.8", + "resolved": "https://registry.npmmirror.com/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + }, + "internal-ip": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/internal-ip/-/internal-ip-4.3.0.tgz", + "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==", + "dev": true, + "requires": { + "default-gateway": "^4.2.0", + "ipaddr.js": "^1.9.0" + }, + "dependencies": { + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "default-gateway": { + "version": "4.2.0", + "resolved": "https://registry.npmmirror.com/default-gateway/-/default-gateway-4.2.0.tgz", + "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==", + "dev": true, + "requires": { + "execa": "^1.0.0", + "ip-regex": "^2.1.0" + } + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "requires": { + "pump": "^3.0.0" + } + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "requires": { + "path-key": "^2.0.0" + } + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" + } + } + }, + "internal-slot": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "requires": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + } + }, + "interpret": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", + "dev": true + }, + "ip": { + "version": "1.1.5", + "resolved": "https://registry.npmmirror.com/ip/download/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", + "dev": true + }, + "ip-regex": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/ip-regex/download/ip-regex-2.1.0.tgz", + "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=", + "dev": true + }, + "ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmmirror.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dev": true + }, + "is-absolute-url": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz", + "integrity": "sha512-vOx7VprsKyllwjSkLV79NIhpyLfr3jAp7VaTCMXOJHu4m0Ew1CZ2fcjASwmV1jI3BWuWHB013M48eyeldk9gYg==", + "dev": true + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmmirror.com/is-accessor-descriptor/download/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmmirror.com/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-alphabetical": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/is-alphabetical/-/is-alphabetical-1.0.4.tgz", + "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==", + "dev": true + }, + "is-alphanumerical": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", + "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", + "dev": true, + "requires": { + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0" + } + }, + "is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/is-arrayish/download/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" + }, + "is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "requires": { + "has-bigints": "^1.0.1" + } + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmmirror.com/is-buffer/download/is-buffer-1.1.6.tgz?cache=0&sync_timestamp=1588707106955&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fis-buffer%2Fdownload%2Fis-buffer-1.1.6.tgz", + "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=", + "dev": true + }, + "is-callable": { + "version": "1.2.4", + "resolved": "https://registry.npmmirror.com/is-callable/-/is-callable-1.2.4.tgz", + "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==" + }, + "is-class-hotfix": { + "version": "0.0.6", + "resolved": "https://registry.npmmirror.com/is-class-hotfix/-/is-class-hotfix-0.0.6.tgz", + "integrity": "sha512-0n+pzCC6ICtVr/WXnN2f03TK/3BfXY7me4cjCAqT8TYXEl0+JBRoqBo94JJHXcyDSLUeWbNX8Fvy5g5RJdAstQ==", + "dev": true + }, + "is-color-stop": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/is-color-stop/-/is-color-stop-1.1.0.tgz", + "integrity": "sha512-H1U8Vz0cfXNujrJzEcvvwMDW9Ra+biSYA3ThdQvAnMLJkEHQXn6bWzLkxHtVYJ+Sdbx0b6finn3jZiaVe7MAHA==", + "dev": true, + "requires": { + "css-color-names": "^0.0.4", + "hex-color-regex": "^1.1.0", + "hsl-regex": "^1.0.0", + "hsla-regex": "^1.0.0", + "rgb-regex": "^1.0.1", + "rgba-regex": "^1.0.0" + } + }, + "is-core-module": { + "version": "2.9.0", + "resolved": "https://registry.npmmirror.com/is-core-module/-/is-core-module-2.9.0.tgz", + "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmmirror.com/is-data-descriptor/download/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmmirror.com/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmmirror.com/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-decimal": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/is-decimal/-/is-decimal-1.0.4.tgz", + "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==", + "dev": true + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmmirror.com/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "is-directory": { + "version": "0.3.1", + "resolved": "https://registry.npmmirror.com/is-directory/-/is-directory-0.3.1.tgz", + "integrity": "sha512-yVChGzahRFvbkscn2MlwGismPO12i9+znNruC5gVEntG3qu0xQMzsGg/JFbrsqDOHtHFPci+V5aP5T9I+yeKqw==" + }, + "is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmmirror.com/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmmirror.com/is-extendable/download/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/is-extglob/download/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/is-fullwidth-code-point/download/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha1-8Rb4Bk/pCz94RKOJl8C3UFEmnx0=", + "dev": true + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/is-glob/download/is-glob-4.0.1.tgz", + "integrity": "sha1-dWfb6fL14kZ7x3q4PEopSCQHpdw=", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-hexadecimal": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", + "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==", + "dev": true + }, + "is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==" + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmmirror.com/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "dev": true + }, + "is-path-cwd": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz", + "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", + "dev": true + }, + "is-path-in-cwd": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz", + "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==", + "dev": true, + "requires": { + "is-path-inside": "^2.1.0" + } + }, + "is-path-inside": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/is-path-inside/-/is-path-inside-2.1.0.tgz", + "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==", + "dev": true, + "requires": { + "path-is-inside": "^1.0.2" + } + }, + "is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmmirror.com/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-regexp": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/is-regexp/-/is-regexp-2.1.0.tgz", + "integrity": "sha512-OZ4IlER3zmRIoB9AqNhEggVxqIH4ofDns5nRrPS6yQxXE1TPCUpFznBfRQmQa8uC+pXqjMnukiJBxCisIxiLGA==", + "dev": true + }, + "is-resolvable": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/is-resolvable/-/is-resolvable-1.1.0.tgz", + "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", + "dev": true + }, + "is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "requires": { + "call-bind": "^1.0.2" + } + }, + "is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true + }, + "is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmmirror.com/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "requires": { + "has-symbols": "^1.0.2" + } + }, + "is-type-of": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/is-type-of/-/is-type-of-1.2.1.tgz", + "integrity": "sha512-uK0kyX9LZYhSDS7H2sVJQJop1UnWPWmo5RvR3q2kFH6AUHYs7sOrVg0b4nyBHw29kRRNFofYN/JbHZDlHiItTA==", + "dev": true, + "requires": { + "core-util-is": "^1.0.2", + "is-class-hotfix": "~0.0.6", + "isstream": "~0.1.2" + } + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/is-typedarray/download/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmmirror.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true + }, + "is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "requires": { + "call-bind": "^1.0.2" + } + }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true + }, + "is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/is-wsl/download/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/isarray/download/isarray-1.0.0.tgz?cache=0&sync_timestamp=1562592096220&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fisarray%2Fdownload%2Fisarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/isexe/download/isexe-2.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fisexe%2Fdownload%2Fisexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/isobject/download/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmmirror.com/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true + }, + "javascript-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/javascript-stringify/-/javascript-stringify-2.1.0.tgz", + "integrity": "sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg==", + "dev": true + }, + "jest-worker": { + "version": "28.1.1", + "resolved": "https://registry.npmmirror.com/jest-worker/-/jest-worker-28.1.1.tgz", + "integrity": "sha512-Au7slXB08C6h+xbJPp7VIb6U0XX5Kc9uel/WFc6/rcTzGiaVCBRngBExSYuXSLFPULPSYU3cJ3ybS988lNFQhQ==", + "dev": true, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "js-base64": { + "version": "3.7.2", + "resolved": "https://registry.npmmirror.com/js-base64/-/js-base64-3.7.2.tgz", + "integrity": "sha512-NnRs6dsyqUXejqk/yv2aiXlAvOs56sLkX6nUdeaNezI5LFFLlsZjOThmwnrcwh5ZZRwZlCMnVAY3CvhIhoVEKQ==" + }, + "js-message": { + "version": "1.0.7", + "resolved": "https://registry.npmmirror.com/js-message/-/js-message-1.0.7.tgz", + "integrity": "sha512-efJLHhLjIyKRewNS9EGZ4UpI8NguuL6fKkhRxVuMmrGV2xN/0APGdQYwLFky5w9naebSZ0OwAGp0G6/2Cg90rA==", + "dev": true + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/js-tokens/download/js-tokens-4.0.0.tgz?cache=0&sync_timestamp=1586796260005&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fjs-tokens%2Fdownload%2Fjs-tokens-4.0.0.tgz", + "integrity": "sha1-GSA/tZmR35jjoocFDUZHzerzJJk=", + "dev": true + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmmirror.com/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", + "dev": true + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmmirror.com/jsesc/download/jsesc-2.5.2.tgz", + "integrity": "sha1-gFZNLkg9rPbo7yCWUKZ98/DCg6Q=", + "dev": true + }, + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" + }, + "json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmmirror.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmmirror.com/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmmirror.com/json-schema-traverse/download/json-schema-traverse-0.4.1.tgz", + "integrity": "sha1-afaofZUTq4u4/mO9sJecRI5oRmA=" + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/json-stable-stringify-without-jsonify/download/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmmirror.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "dev": true + }, + "json3": { + "version": "3.3.3", + "resolved": "https://registry.npmmirror.com/json3/-/json3-3.3.3.tgz", + "integrity": "sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==", + "dev": true + }, + "json5": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "jsprim": { + "version": "1.4.2", + "resolved": "https://registry.npmmirror.com/jsprim/-/jsprim-1.4.2.tgz", + "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + } + }, + "jstoxml": { + "version": "2.2.9", + "resolved": "https://registry.npmmirror.com/jstoxml/-/jstoxml-2.2.9.tgz", + "integrity": "sha512-OYWlK0j+roh+eyaMROlNbS5cd5R25Y+IUpdl7cNdB8HNrkgwQzIS7L9MegxOiWNBj9dQhA/yAxiMwCC5mwNoBw==", + "dev": true + }, + "killable": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/killable/-/killable-1.0.1.tgz", + "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==", + "dev": true + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true + }, + "klona": { + "version": "2.0.5", + "resolved": "https://registry.npmmirror.com/klona/-/klona-2.0.5.tgz", + "integrity": "sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ==", + "dev": true + }, + "known-css-properties": { + "version": "0.21.0", + "resolved": "https://registry.npmmirror.com/known-css-properties/-/known-css-properties-0.21.0.tgz", + "integrity": "sha512-sZLUnTqimCkvkgRS+kbPlYW5o8q5w1cu+uIisKpEWkj31I8mx8kNG162DwRav8Zirkva6N5uoFsm9kzK4mUXjw==", + "dev": true + }, + "ko-sleep": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/ko-sleep/-/ko-sleep-1.1.4.tgz", + "integrity": "sha512-s05WGpvvzyTuRlRE8fM7ru2Z3O+InbJuBcckTWKg2W+2c1k6SnFa3IfiSSt0/peFrlYAXgNoxuJWWVNmWh+K/A==", + "dev": true, + "requires": { + "ms": "*" + } + }, + "launch-editor": { + "version": "2.6.0", + "resolved": "https://registry.npmmirror.com/launch-editor/-/launch-editor-2.6.0.tgz", + "integrity": "sha512-JpDCcQnyAAzZZaZ7vEiSqL690w7dAEyLao+KC96zBplnYbJS7TYNjvM3M7y3dGz+v7aIsJk3hllWuc0kWAjyRQ==", + "dev": true, + "requires": { + "picocolors": "^1.0.0", + "shell-quote": "^1.7.3" + } + }, + "launch-editor-middleware": { + "version": "2.6.0", + "resolved": "https://registry.npmmirror.com/launch-editor-middleware/-/launch-editor-middleware-2.6.0.tgz", + "integrity": "sha512-K2yxgljj5TdCeRN1lBtO3/J26+AIDDDw+04y6VAiZbWcTdBwsYN6RrZBnW5DN/QiSIdKNjKdATLUUluWWFYTIA==", + "dev": true, + "requires": { + "launch-editor": "^2.6.0" + } + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmmirror.com/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, + "lilconfig": { + "version": "2.0.5", + "resolved": "https://registry.npmmirror.com/lilconfig/-/lilconfig-2.0.5.tgz", + "integrity": "sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg==", + "dev": true + }, + "lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmmirror.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "lint-staged": { + "version": "13.0.3", + "resolved": "https://registry.npmmirror.com/lint-staged/-/lint-staged-13.0.3.tgz", + "integrity": "sha512-9hmrwSCFroTSYLjflGI8Uk+GWAwMB4OlpU4bMJEAT5d/llQwtYKoim4bLOyLCuWFAhWEupE0vkIFqtw/WIsPug==", + "dev": true, + "requires": { + "cli-truncate": "^3.1.0", + "colorette": "^2.0.17", + "commander": "^9.3.0", + "debug": "^4.3.4", + "execa": "^6.1.0", + "lilconfig": "2.0.5", + "listr2": "^4.0.5", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "object-inspect": "^1.12.2", + "pidtree": "^0.6.0", + "string-argv": "^0.3.1", + "yaml": "^2.1.1" + }, + "dependencies": { + "commander": { + "version": "9.4.1", + "resolved": "https://registry.npmmirror.com/commander/-/commander-9.4.1.tgz", + "integrity": "sha512-5EEkTNyHNGFPD2H+c/dXXfQZYa/scCKasxWcXJaWnNJ99pnQN9Vnmqow+p+PlFPE63Q6mThaZws1T+HxfpgtPw==", + "dev": true + }, + "execa": { + "version": "6.1.0", + "resolved": "https://registry.npmmirror.com/execa/-/execa-6.1.0.tgz", + "integrity": "sha512-QVWlX2e50heYJcCPG0iWtf8r0xjEYfz/OYLGDYH+IyjWezzPNxz63qNFOu0l4YftGWuizFVZHHs8PrLU5p2IDA==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.1", + "human-signals": "^3.0.1", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^3.0.7", + "strip-final-newline": "^3.0.0" + } + }, + "is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "dev": true + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "npm-run-path": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/npm-run-path/-/npm-run-path-5.1.0.tgz", + "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", + "dev": true, + "requires": { + "path-key": "^4.0.0" + } + }, + "path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "dev": true + }, + "strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "dev": true + }, + "yaml": { + "version": "2.1.3", + "resolved": "https://registry.npmmirror.com/yaml/-/yaml-2.1.3.tgz", + "integrity": "sha512-AacA8nRULjKMX2DvWvOAdBZMOfQlypSFkjcOcu9FalllIDJ1kvlREzcdIZmidQUqqeMv7jorHjq2HlLv/+c2lg==", + "dev": true + } + } + }, + "listr2": { + "version": "4.0.5", + "resolved": "https://registry.npmmirror.com/listr2/-/listr2-4.0.5.tgz", + "integrity": "sha512-juGHV1doQdpNT3GSTs9IUN43QJb7KHdF9uqg7Vufs/tG9VTzpFphqF4pm/ICdAABGQxsyNn9CiYA3StkI6jpwA==", + "dev": true, + "requires": { + "cli-truncate": "^2.1.0", + "colorette": "^2.0.16", + "log-update": "^4.0.0", + "p-map": "^4.0.0", + "rfdc": "^1.3.0", + "rxjs": "^7.5.5", + "through": "^2.3.8", + "wrap-ansi": "^7.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "cli-truncate": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/cli-truncate/-/cli-truncate-2.1.0.tgz", + "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", + "dev": true, + "requires": { + "slice-ansi": "^3.0.0", + "string-width": "^4.2.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "slice-ansi": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/slice-ansi/-/slice-ansi-3.0.0.tgz", + "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + } + } + } + }, + "loader-runner": { + "version": "2.4.0", + "resolved": "https://registry.npmmirror.com/loader-runner/-/loader-runner-2.4.0.tgz", + "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==", + "dev": true + }, + "loader-utils": { + "version": "1.4.2", + "resolved": "https://registry.npmmirror.com/loader-utils/-/loader-utils-1.4.2.tgz", + "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "lodash-es": { + "version": "4.17.21", + "resolved": "https://registry.npmmirror.com/lodash-es/-/lodash-es-4.17.21.tgz", + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" + }, + "lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmmirror.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", + "dev": true + }, + "lodash.defaultsdeep": { + "version": "4.6.1", + "resolved": "https://registry.npmmirror.com/lodash.defaultsdeep/-/lodash.defaultsdeep-4.6.1.tgz", + "integrity": "sha512-3j8wdDzYuWO3lM3Reg03MuQR957t287Rpcxp1njpEa8oDrikb+FwGdW3n+FELh/A6qib6yPit0j/pv9G/yeAqA==", + "dev": true + }, + "lodash.kebabcase": { + "version": "4.1.1", + "resolved": "https://registry.npmmirror.com/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz", + "integrity": "sha1-hImxyw0p/4gZXM7KRI/21swpXDY=", + "dev": true + }, + "lodash.mapvalues": { + "version": "4.6.0", + "resolved": "https://registry.npmmirror.com/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz", + "integrity": "sha512-JPFqXFeZQ7BfS00H58kClY7SPVeHertPE0lNuCyZ26/XlN8TvakYD7b9bGyNmXbT/D3BbtPAAmq90gPWqLkxlQ==", + "dev": true + }, + "lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmmirror.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", + "dev": true + }, + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmmirror.com/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "lodash.transform": { + "version": "4.6.0", + "resolved": "https://registry.npmmirror.com/lodash.transform/-/lodash.transform-4.6.0.tgz", + "integrity": "sha512-LO37ZnhmBVx0GvOU/caQuipEh4GN82TcWv3yHlebGDgOxbxiwwzW5Pcx2AcvpIv2WmvmSMoC492yQFNhy/l/UQ==", + "dev": true + }, + "lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmmirror.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", + "dev": true + }, + "lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmmirror.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", + "dev": true + }, + "log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "log-update": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/log-update/-/log-update-4.0.0.tgz", + "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", + "dev": true, + "requires": { + "ansi-escapes": "^4.3.0", + "cli-cursor": "^3.1.0", + "slice-ansi": "^4.0.0", + "wrap-ansi": "^6.2.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + } + } + }, + "loglevel": { + "version": "1.8.0", + "resolved": "https://registry.npmmirror.com/loglevel/-/loglevel-1.8.0.tgz", + "integrity": "sha512-G6A/nJLRgWOuuwdNuA6koovfEV1YpqqAG4pRUlFaz3jj2QNZ8M4vBqnVA+HBTmU/AMNUtlOsMmSpF6NyOjztbA==", + "dev": true + }, + "longest-streak": { + "version": "2.0.4", + "resolved": "https://registry.npmmirror.com/longest-streak/-/longest-streak-2.0.4.tgz", + "integrity": "sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==", + "dev": true + }, + "lower-case": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/lower-case/-/lower-case-1.1.4.tgz", + "integrity": "sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==", + "dev": true + }, + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmmirror.com/lru-cache/download/lru-cache-5.1.1.tgz", + "integrity": "sha1-HaJ+ZxAnGUdpXa9oSOhH8B2EuSA=", + "dev": true, + "requires": { + "yallist": "^3.0.2" + } + }, + "magic-string": { + "version": "0.25.9", + "resolved": "https://registry.npmmirror.com/magic-string/-/magic-string-0.25.9.tgz", + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "dev": true, + "requires": { + "sourcemap-codec": "^1.4.8" + } + }, + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "requires": { + "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmmirror.com/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmmirror.com/map-cache/download/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "dev": true + }, + "map-obj": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/map-obj/-/map-obj-4.3.0.tgz", + "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", + "dev": true + }, + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/map-visit/download/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "dev": true, + "requires": { + "object-visit": "^1.0.0" + } + }, + "mathml-tag-names": { + "version": "2.1.3", + "resolved": "https://registry.npmmirror.com/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz", + "integrity": "sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==", + "dev": true + }, + "md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmmirror.com/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "dev": true, + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "mdast-util-from-markdown": { + "version": "0.8.5", + "resolved": "https://registry.npmmirror.com/mdast-util-from-markdown/-/mdast-util-from-markdown-0.8.5.tgz", + "integrity": "sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ==", + "dev": true, + "requires": { + "@types/mdast": "^3.0.0", + "mdast-util-to-string": "^2.0.0", + "micromark": "~2.11.0", + "parse-entities": "^2.0.0", + "unist-util-stringify-position": "^2.0.0" + } + }, + "mdast-util-to-markdown": { + "version": "0.6.5", + "resolved": "https://registry.npmmirror.com/mdast-util-to-markdown/-/mdast-util-to-markdown-0.6.5.tgz", + "integrity": "sha512-XeV9sDE7ZlOQvs45C9UKMtfTcctcaj/pGwH8YLbMHoMOXNNCn2LsqVQOqrF1+/NU8lKDAqozme9SCXWyo9oAcQ==", + "dev": true, + "requires": { + "@types/unist": "^2.0.0", + "longest-streak": "^2.0.0", + "mdast-util-to-string": "^2.0.0", + "parse-entities": "^2.0.0", + "repeat-string": "^1.0.0", + "zwitch": "^1.0.0" + } + }, + "mdast-util-to-string": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz", + "integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==", + "dev": true + }, + "mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmmirror.com/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmmirror.com/media-typer/download/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "dev": true + }, + "memfs": { + "version": "3.4.7", + "resolved": "https://registry.npmmirror.com/memfs/-/memfs-3.4.7.tgz", + "integrity": "sha512-ygaiUSNalBX85388uskeCyhSAoOSgzBbtVCr9jA2RROssFL9Q19/ZXFqS+2Th2sr1ewNIWgFdLzLC3Yl1Zv+lw==", + "dev": true, + "requires": { + "fs-monkey": "^1.0.3" + } + }, + "memory-fs": { + "version": "0.2.0", + "resolved": "https://registry.npmmirror.com/memory-fs/-/memory-fs-0.2.0.tgz", + "integrity": "sha1-8rslNovBIeORwlIN6Slpyu4KApA=", + "dev": true + }, + "meow": { + "version": "9.0.0", + "resolved": "https://registry.npmmirror.com/meow/-/meow-9.0.0.tgz", + "integrity": "sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==", + "dev": true, + "requires": { + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.2.2", + "decamelize": "^1.2.0", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^3.0.0", + "read-pkg-up": "^7.0.1", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.18.0", + "yargs-parser": "^20.2.3" + }, + "dependencies": { + "type-fest": { + "version": "0.18.1", + "resolved": "https://registry.npmmirror.com/type-fest/-/type-fest-0.18.1.tgz", + "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", + "dev": true + } + } + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/merge-descriptors/download/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", + "dev": true + }, + "merge-source-map": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/merge-source-map/-/merge-source-map-1.1.0.tgz", + "integrity": "sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==", + "dev": true, + "requires": { + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/merge-stream/download/merge-stream-2.0.0.tgz", + "integrity": "sha1-UoI2KaFN0AyXcPtq1H3GMQ8sH2A=", + "dev": true + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmmirror.com/merge2/download/merge2-1.4.1.tgz?cache=0&sync_timestamp=1591170027156&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fmerge2%2Fdownload%2Fmerge2-1.4.1.tgz", + "integrity": "sha1-Q2iJL4hekHRVpv19xVwMnUBJkK4=", + "dev": true + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/methods/download/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "dev": true + }, + "micromark": { + "version": "2.11.4", + "resolved": "https://registry.npmmirror.com/micromark/-/micromark-2.11.4.tgz", + "integrity": "sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==", + "dev": true, + "requires": { + "debug": "^4.0.0", + "parse-entities": "^2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmmirror.com/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "dev": true, + "requires": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmmirror.com/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } + } + }, + "mime": { + "version": "2.4.6", + "resolved": "https://registry.npmmirror.com/mime/download/mime-2.4.6.tgz?cache=0&sync_timestamp=1590596706367&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fmime%2Fdownload%2Fmime-2.4.6.tgz", + "integrity": "sha1-5bQHyQ20QvK+tbFiNz0Htpr/pNE=", + "dev": true + }, + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true + }, + "mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "requires": { + "mime-db": "1.52.0" + } + }, + "mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "dev": true + }, + "min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "dev": true + }, + "mini-css-extract-plugin": { + "version": "0.9.0", + "resolved": "https://registry.npmmirror.com/mini-css-extract-plugin/-/mini-css-extract-plugin-0.9.0.tgz", + "integrity": "sha512-lp3GeY7ygcgAmVIcRPBVhIkf8Us7FZjA+ILpal44qLdSu11wmjKQ3d9k15lfD7pO4esu9eUIAW7qiYIBppv40A==", + "dev": true, + "requires": { + "loader-utils": "^1.1.0", + "normalize-url": "1.9.1", + "schema-utils": "^1.0.0", + "webpack-sources": "^1.1.0" + }, + "dependencies": { + "normalize-url": { + "version": "1.9.1", + "resolved": "https://registry.npmmirror.com/normalize-url/-/normalize-url-1.9.1.tgz", + "integrity": "sha512-A48My/mtCklowHBlI8Fq2jFWK4tX4lJ5E6ytFsSOq1fzpvT0SQSgKhSg7lN5c2uYFOrUAOQp6zhhJnpp1eMloQ==", + "dev": true, + "requires": { + "object-assign": "^4.0.1", + "prepend-http": "^1.0.0", + "query-string": "^4.1.0", + "sort-keys": "^1.0.0" + } + }, + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + } + } + }, + "minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true + }, + "minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/minimalistic-crypto-utils/download/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", + "dev": true + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmmirror.com/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==" + }, + "minimist-options": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/minimist-options/-/minimist-options-4.1.0.tgz", + "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", + "dev": true, + "requires": { + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0", + "kind-of": "^6.0.3" + }, + "dependencies": { + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "dev": true + }, + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "dev": true + } + } + }, + "minipass": { + "version": "3.1.3", + "resolved": "https://registry.npmmirror.com/minipass/download/minipass-3.1.3.tgz", + "integrity": "sha1-fUL/HzljVILhX5zbUxhN7r1YFf0=", + "dev": true, + "requires": { + "yallist": "^4.0.0" + }, + "dependencies": { + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/yallist/download/yallist-4.0.0.tgz", + "integrity": "sha1-m7knkNnA7/7GO+c1GeEaNQGaOnI=", + "dev": true + } + } + }, + "mississippi": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/mississippi/-/mississippi-3.0.0.tgz", + "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", + "dev": true, + "requires": { + "concat-stream": "^1.5.0", + "duplexify": "^3.4.2", + "end-of-stream": "^1.1.0", + "flush-write-stream": "^1.0.0", + "from2": "^2.1.0", + "parallel-transform": "^1.1.0", + "pump": "^3.0.0", + "pumpify": "^1.3.3", + "stream-each": "^1.1.0", + "through2": "^2.0.0" + } + }, + "mitt": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/mitt/-/mitt-3.0.0.tgz", + "integrity": "sha512-7dX2/10ITVyqh4aOSVI9gdape+t9l2/8QxHrFmUXu4EEUpdlxl6RudZUPZoc+zuY2hk1j7XxVroIVIan/pD/SQ==" + }, + "mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmmirror.com/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "dev": true, + "requires": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmmirror.com/mkdirp/download/mkdirp-0.5.5.tgz?cache=0&sync_timestamp=1587535418745&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fmkdirp%2Fdownload%2Fmkdirp-0.5.5.tgz", + "integrity": "sha1-2Rzv1i0UNsoPQWIOJRKI1CAJne8=", + "requires": { + "minimist": "^1.2.5" + } + }, + "move-concurrently": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/move-concurrently/-/move-concurrently-1.0.1.tgz", + "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", + "dev": true, + "requires": { + "aproba": "^1.1.1", + "copy-concurrently": "^1.0.0", + "fs-write-stream-atomic": "^1.0.8", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.3" + } + }, + "mrmime": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/mrmime/-/mrmime-1.0.1.tgz", + "integrity": "sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==", + "dev": true + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/ms/download/ms-2.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fms%2Fdownload%2Fms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "muggle-string": { + "version": "0.1.0", + "resolved": "https://registry.npmmirror.com/muggle-string/-/muggle-string-0.1.0.tgz", + "integrity": "sha512-Tr1knR3d2mKvvWthlk7202rywKbiOm4rVFLsfAaSIhJ6dt9o47W4S+JMtWhd/PW9Wrdew2/S2fSvhz3E2gkfEg==", + "dev": true + }, + "multicast-dns": { + "version": "6.2.3", + "resolved": "https://registry.npmmirror.com/multicast-dns/-/multicast-dns-6.2.3.tgz", + "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", + "dev": true, + "requires": { + "dns-packet": "^1.3.1", + "thunky": "^1.0.2" + } + }, + "multicast-dns-service-types": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/multicast-dns-service-types/download/multicast-dns-service-types-1.1.0.tgz", + "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=", + "dev": true + }, + "mz": { + "version": "2.7.0", + "resolved": "https://registry.npmmirror.com/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, + "requires": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "mz-modules": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/mz-modules/-/mz-modules-2.1.0.tgz", + "integrity": "sha512-sjk8lcRW3vrVYnZ+W+67L/2rL+jbO5K/N6PFGIcLWTiYytNr22Ah9FDXFs+AQntTM1boZcoHi5qS+CV1seuPog==", + "dev": true, + "requires": { + "glob": "^7.1.2", + "ko-sleep": "^1.0.3", + "mkdirp": "^0.5.1", + "pump": "^3.0.0", + "rimraf": "^2.6.1" + } + }, + "nan": { + "version": "2.17.0", + "resolved": "https://registry.npmmirror.com/nan/-/nan-2.17.0.tgz", + "integrity": "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==", + "dev": true, + "optional": true + }, + "nanoid": { + "version": "3.3.4", + "resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.4.tgz", + "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==" + }, + "nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmmirror.com/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + } + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/natural-compare/download/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", + "dev": true + }, + "negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmmirror.com/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "dev": true + }, + "neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmmirror.com/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "netmask": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/netmask/-/netmask-2.0.2.tgz", + "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==", + "dev": true + }, + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmmirror.com/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" + }, + "no-case": { + "version": "2.3.2", + "resolved": "https://registry.npmmirror.com/no-case/-/no-case-2.3.2.tgz", + "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", + "dev": true, + "requires": { + "lower-case": "^1.1.1" + } + }, + "node-forge": { + "version": "0.10.0", + "resolved": "https://registry.npmmirror.com/node-forge/-/node-forge-0.10.0.tgz", + "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==", + "dev": true + }, + "node-libs-browser": { + "version": "2.2.1", + "resolved": "https://registry.npmmirror.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz", + "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", + "dev": true, + "requires": { + "assert": "^1.1.1", + "browserify-zlib": "^0.2.0", + "buffer": "^4.3.0", + "console-browserify": "^1.1.0", + "constants-browserify": "^1.0.0", + "crypto-browserify": "^3.11.0", + "domain-browser": "^1.1.1", + "events": "^3.0.0", + "https-browserify": "^1.0.0", + "os-browserify": "^0.3.0", + "path-browserify": "0.0.1", + "process": "^0.11.10", + "punycode": "^1.2.4", + "querystring-es3": "^0.2.0", + "readable-stream": "^2.3.3", + "stream-browserify": "^2.0.1", + "stream-http": "^2.7.2", + "string_decoder": "^1.0.0", + "timers-browserify": "^2.0.4", + "tty-browserify": "0.0.0", + "url": "^0.11.0", + "util": "^0.11.0", + "vm-browserify": "^1.0.1" + }, + "dependencies": { + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmmirror.com/punycode/download/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + } + } + }, + "node-releases": { + "version": "2.0.5", + "resolved": "https://registry.npmmirror.com/node-releases/-/node-releases-2.0.5.tgz", + "integrity": "sha512-U9h1NLROZTq9uE1SNffn6WuPDg8icmi3ns4rEl/oTfIle4iLjTliCzgTsbaIFMq/Xn078/lfY/BL0GWZ+psK4Q==", + "dev": true + }, + "normalize-package-data": { + "version": "3.0.3", + "resolved": "https://registry.npmmirror.com/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", + "dev": true, + "requires": { + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.3.7", + "resolved": "https://registry.npmmirror.com/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/normalize-path/download/normalize-path-3.0.0.tgz", + "integrity": "sha1-Dc1p/yOhybEf0JeDFmRKA4ghamU=", + "dev": true + }, + "normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmmirror.com/normalize-range/download/normalize-range-0.1.2.tgz", + "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", + "dev": true + }, + "normalize-selector": { + "version": "0.2.0", + "resolved": "https://registry.npmmirror.com/normalize-selector/-/normalize-selector-0.2.0.tgz", + "integrity": "sha1-0LFF62kRicY6eNIB3E/bEpPvDAM=", + "dev": true + }, + "normalize-url": { + "version": "3.3.0", + "resolved": "https://registry.npmmirror.com/normalize-url/-/normalize-url-3.3.0.tgz", + "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==", + "dev": true + }, + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "requires": { + "path-key": "^3.0.0" + } + }, + "nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "requires": { + "boolbase": "^1.0.0" + } + }, + "num2fraction": { + "version": "1.2.2", + "resolved": "https://registry.npmmirror.com/num2fraction/download/num2fraction-1.2.2.tgz", + "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=", + "dev": true + }, + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmmirror.com/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmmirror.com/object-assign/download/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true + }, + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmmirror.com/object-copy/download/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dev": true, + "requires": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmmirror.com/define-property/download/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmmirror.com/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "object-inspect": { + "version": "1.12.2", + "resolved": "https://registry.npmmirror.com/object-inspect/-/object-inspect-1.12.2.tgz", + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==" + }, + "object-is": { + "version": "1.1.5", + "resolved": "https://registry.npmmirror.com/object-is/-/object-is-1.1.5.tgz", + "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + }, + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/object-visit/download/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dev": true, + "requires": { + "isobject": "^3.0.0" + } + }, + "object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmmirror.com/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + } + }, + "object.getownpropertydescriptors": { + "version": "2.1.4", + "resolved": "https://registry.npmmirror.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.4.tgz", + "integrity": "sha512-sccv3L/pMModT6dJAYF3fzGMVcb38ysQ0tEE6ixv2yXJDtEIPph268OlAdJj5/qZMZDq2g/jqvwppt36uS/uQQ==", + "requires": { + "array.prototype.reduce": "^1.0.4", + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.1" + } + }, + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/object.pick/download/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "object.values": { + "version": "1.1.5", + "resolved": "https://registry.npmmirror.com/object.values/-/object.values-1.1.5.tgz", + "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + } + }, + "obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "dev": true + }, + "on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmmirror.com/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + }, + "on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/once/download/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "dev": true, + "requires": { + "mimic-fn": "^4.0.0" + } + }, + "open": { + "version": "6.4.0", + "resolved": "https://registry.npmmirror.com/open/-/open-6.4.0.tgz", + "integrity": "sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg==", + "dev": true, + "requires": { + "is-wsl": "^1.1.0" + } + }, + "opener": { + "version": "1.5.2", + "resolved": "https://registry.npmmirror.com/opener/-/opener-1.5.2.tgz", + "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", + "dev": true + }, + "opn": { + "version": "5.5.0", + "resolved": "https://registry.npmmirror.com/opn/-/opn-5.5.0.tgz", + "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==", + "dev": true, + "requires": { + "is-wsl": "^1.1.0" + } + }, + "optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmmirror.com/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dev": true, + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + } + }, + "ora": { + "version": "3.4.0", + "resolved": "https://registry.npmmirror.com/ora/-/ora-3.4.0.tgz", + "integrity": "sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "cli-cursor": "^2.1.0", + "cli-spinners": "^2.0.0", + "log-symbols": "^2.2.0", + "strip-ansi": "^5.2.0", + "wcwidth": "^1.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "dev": true + }, + "cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==", + "dev": true, + "requires": { + "restore-cursor": "^2.0.0" + } + }, + "log-symbols": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/log-symbols/-/log-symbols-2.2.0.tgz", + "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "dev": true, + "requires": { + "chalk": "^2.0.1" + } + }, + "mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "dev": true + }, + "onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==", + "dev": true, + "requires": { + "mimic-fn": "^1.0.0" + } + }, + "restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==", + "dev": true, + "requires": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "os-browserify": { + "version": "0.3.0", + "resolved": "https://registry.npmmirror.com/os-browserify/download/os-browserify-0.3.0.tgz", + "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", + "dev": true + }, + "os-name": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/os-name/-/os-name-1.0.3.tgz", + "integrity": "sha1-GzefZINa98Wn9JizV8uVIVwVnt8=", + "dev": true, + "requires": { + "osx-release": "^1.0.0", + "win-release": "^1.0.0" + } + }, + "osx-release": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/osx-release/-/osx-release-1.1.0.tgz", + "integrity": "sha1-8heRGigTaUmvG/kwiyQeJzfTzWw=", + "dev": true, + "requires": { + "minimist": "^1.1.0" + } + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/p-finally/download/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" + } + }, + "p-retry": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/p-retry/-/p-retry-3.0.1.tgz", + "integrity": "sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==", + "dev": true, + "requires": { + "retry": "^0.12.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" + }, + "pac-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/pac-proxy-agent/-/pac-proxy-agent-5.0.0.tgz", + "integrity": "sha512-CcFG3ZtnxO8McDigozwE3AqAw15zDvGH+OjXO4kzf7IkEKkQ4gxQ+3sdF50WmhQ4P/bVusXcqNE2S3XrNURwzQ==", + "dev": true, + "requires": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4", + "get-uri": "3", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "5", + "pac-resolver": "^5.0.0", + "raw-body": "^2.2.0", + "socks-proxy-agent": "5" + }, + "dependencies": { + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "pac-resolver": { + "version": "5.0.1", + "resolved": "https://registry.npmmirror.com/pac-resolver/-/pac-resolver-5.0.1.tgz", + "integrity": "sha512-cy7u00ko2KVgBAjuhevqpPeHIkCIqPe1v24cydhWjmeuzaBfmUWFCZJ1iAh5TuVzVZoUzXIW7K8sMYOZ84uZ9Q==", + "dev": true, + "requires": { + "degenerator": "^3.0.2", + "ip": "^1.1.5", + "netmask": "^2.0.2" + } + }, + "pako": { + "version": "1.0.11", + "resolved": "https://registry.npmmirror.com/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "dev": true + }, + "parallel-transform": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/parallel-transform/-/parallel-transform-1.2.0.tgz", + "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==", + "dev": true, + "requires": { + "cyclist": "^1.0.1", + "inherits": "^2.0.3", + "readable-stream": "^2.1.5" + } + }, + "param-case": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/param-case/-/param-case-2.1.1.tgz", + "integrity": "sha512-eQE845L6ot89sk2N8liD8HAuH4ca6Vvr7VWAWwt7+kvvG5aBcPmmphQ68JsEG2qa9n1TykS2DLeMt363AAH8/w==", + "dev": true, + "requires": { + "no-case": "^2.2.0" + } + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/parent-module/download/parent-module-1.0.1.tgz", + "integrity": "sha1-aR0nCeeMefrjoVZiJFLQB2LKqqI=", + "dev": true, + "requires": { + "callsites": "^3.0.0" + }, + "dependencies": { + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/callsites/download/callsites-3.1.0.tgz", + "integrity": "sha1-s2MKvYlDQy9Us/BRkjjjPNffL3M=", + "dev": true + } + } + }, + "parse-asn1": { + "version": "5.1.6", + "resolved": "https://registry.npmmirror.com/parse-asn1/-/parse-asn1-5.1.6.tgz", + "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", + "dev": true, + "requires": { + "asn1.js": "^5.2.0", + "browserify-aes": "^1.0.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3", + "safe-buffer": "^5.1.1" + } + }, + "parse-entities": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/parse-entities/-/parse-entities-2.0.0.tgz", + "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", + "dev": true, + "requires": { + "character-entities": "^1.0.0", + "character-entities-legacy": "^1.0.0", + "character-reference-invalid": "^1.0.0", + "is-alphanumerical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-hexadecimal": "^1.0.0" + } + }, + "parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmmirror.com/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + }, + "parse5": { + "version": "5.1.1", + "resolved": "https://registry.npmmirror.com/parse5/-/parse5-5.1.1.tgz", + "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", + "dev": true + }, + "parse5-htmlparser2-tree-adapter": { + "version": "6.0.1", + "resolved": "https://registry.npmmirror.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", + "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", + "dev": true, + "requires": { + "parse5": "^6.0.1" + }, + "dependencies": { + "parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmmirror.com/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "dev": true + } + } + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmmirror.com/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true + }, + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmmirror.com/pascalcase/download/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "dev": true + }, + "path-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npmmirror.com/path-browserify/-/path-browserify-0.0.1.tgz", + "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", + "dev": true + }, + "path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/path-dirname/download/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", + "dev": true + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/path-is-absolute/download/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/path-is-inside/download/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "dev": true + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmmirror.com/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmmirror.com/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmmirror.com/path-to-regexp/download/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", + "dev": true + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + }, + "pause-stream": { + "version": "0.0.11", + "resolved": "https://registry.npmmirror.com/pause-stream/-/pause-stream-0.0.11.tgz", + "integrity": "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=", + "dev": true, + "requires": { + "through": "~2.3" + } + }, + "pbkdf2": { + "version": "3.1.2", + "resolved": "https://registry.npmmirror.com/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", + "dev": true, + "requires": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", + "dev": true + }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + }, + "pidtree": { + "version": "0.6.0", + "resolved": "https://registry.npmmirror.com/pidtree/-/pidtree-0.6.0.tgz", + "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==", + "dev": true + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" + }, + "pinia": { + "version": "2.0.34", + "resolved": "https://registry.npmmirror.com/pinia/-/pinia-2.0.34.tgz", + "integrity": "sha512-cgOoGUiyqX0SSgX8XelK9+Ri4XA2/YyNtgjogwfzIx1g7iZTaZPxm7/bZYMCLU2qHRiHhxG7SuQO0eBacFNc2Q==", + "requires": { + "@vue/devtools-api": "^6.5.0", + "vue-demi": "*" + } + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmmirror.com/pinkie/download/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/pinkie-promise/download/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "requires": { + "pinkie": "^2.0.0" + } + }, + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmmirror.com/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "requires": { + "find-up": "^4.0.0" + } + }, + "platform": { + "version": "1.3.6", + "resolved": "https://registry.npmmirror.com/platform/-/platform-1.3.6.tgz", + "integrity": "sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg==", + "dev": true + }, + "pnp-webpack-plugin": { + "version": "1.7.0", + "resolved": "https://registry.npmmirror.com/pnp-webpack-plugin/-/pnp-webpack-plugin-1.7.0.tgz", + "integrity": "sha512-2Rb3vm+EXble/sMXNSu6eoBx8e79gKqhNq9F5ZWW6ERNCTE/Q0wQNne5541tE5vKjfM8hpNCYL+LGc1YTfI0dg==", + "dev": true, + "requires": { + "ts-pnp": "^1.1.6" + } + }, + "portfinder": { + "version": "1.0.28", + "resolved": "https://registry.npmmirror.com/portfinder/-/portfinder-1.0.28.tgz", + "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", + "dev": true, + "requires": { + "async": "^2.6.2", + "debug": "^3.1.1", + "mkdirp": "^0.5.5" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmmirror.com/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + } + } + }, + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmmirror.com/posix-character-classes/download/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "dev": true + }, + "postcss": { + "version": "8.4.14", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.4.14.tgz", + "integrity": "sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==", + "requires": { + "nanoid": "^3.3.4", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + } + }, + "postcss-calc": { + "version": "7.0.5", + "resolved": "https://registry.npmmirror.com/postcss-calc/-/postcss-calc-7.0.5.tgz", + "integrity": "sha512-1tKHutbGtLtEZF6PT4JSihCHfIVldU72mZ8SdZHIYriIZ9fh9k9aWSppaT8rHsyI3dX+KSR+W+Ix9BMY3AODrg==", + "dev": true, + "requires": { + "postcss": "^7.0.27", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.0.2" + }, + "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "postcss-colormin": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/postcss-colormin/-/postcss-colormin-4.0.3.tgz", + "integrity": "sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "color": "^3.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "postcss-convert-values": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz", + "integrity": "sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==", + "dev": true, + "requires": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "postcss-discard-comments": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz", + "integrity": "sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==", + "dev": true, + "requires": { + "postcss": "^7.0.0" + }, + "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "postcss-discard-duplicates": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz", + "integrity": "sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==", + "dev": true, + "requires": { + "postcss": "^7.0.0" + }, + "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "postcss-discard-empty": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz", + "integrity": "sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==", + "dev": true, + "requires": { + "postcss": "^7.0.0" + }, + "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "postcss-discard-overridden": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz", + "integrity": "sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==", + "dev": true, + "requires": { + "postcss": "^7.0.0" + }, + "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "postcss-html": { + "version": "0.36.0", + "resolved": "https://registry.npmmirror.com/postcss-html/-/postcss-html-0.36.0.tgz", + "integrity": "sha512-HeiOxGcuwID0AFsNAL0ox3mW6MHH5cstWN1Z3Y+n6H+g12ih7LHdYxWwEA/QmrebctLjo79xz9ouK3MroHwOJw==", + "dev": true, + "requires": { + "htmlparser2": "^3.10.0" + }, + "dependencies": { + "dom-serializer": { + "version": "0.2.2", + "resolved": "https://registry.npmmirror.com/dom-serializer/-/dom-serializer-0.2.2.tgz", + "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "entities": "^2.0.0" + }, + "dependencies": { + "domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true + }, + "entities": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true + } + } + }, + "domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmmirror.com/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", + "dev": true + }, + "domhandler": { + "version": "2.4.2", + "resolved": "https://registry.npmmirror.com/domhandler/-/domhandler-2.4.2.tgz", + "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", + "dev": true, + "requires": { + "domelementtype": "1" + } + }, + "domutils": { + "version": "1.7.0", + "resolved": "https://registry.npmmirror.com/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "dev": true, + "requires": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "entities": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", + "dev": true + }, + "htmlparser2": { + "version": "3.10.1", + "resolved": "https://registry.npmmirror.com/htmlparser2/-/htmlparser2-3.10.1.tgz", + "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", + "dev": true, + "requires": { + "domelementtype": "^1.3.1", + "domhandler": "^2.3.0", + "domutils": "^1.5.1", + "entities": "^1.1.1", + "inherits": "^2.0.1", + "readable-stream": "^3.1.1" + } + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "postcss-less": { + "version": "3.1.4", + "resolved": "https://registry.npmmirror.com/postcss-less/-/postcss-less-3.1.4.tgz", + "integrity": "sha512-7TvleQWNM2QLcHqvudt3VYjULVB49uiW6XzEUFmvwHzvsOEF5MwBrIXZDJQvJNFGjJQTzSzZnDoCJ8h/ljyGXA==", + "dev": true, + "requires": { + "postcss": "^7.0.14" + }, + "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "postcss-load-config": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/postcss-load-config/-/postcss-load-config-2.1.2.tgz", + "integrity": "sha512-/rDeGV6vMUo3mwJZmeHfEDvwnTKKqQ0S7OHUi/kJvvtx3aWtyWG2/0ZWnzCt2keEclwN6Tf0DST2v9kITdOKYw==", + "dev": true, + "requires": { + "cosmiconfig": "^5.0.0", + "import-cwd": "^2.0.0" + }, + "dependencies": { + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmmirror.com/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "cosmiconfig": { + "version": "5.2.1", + "resolved": "https://registry.npmmirror.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz", + "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", + "dev": true, + "requires": { + "import-fresh": "^2.0.0", + "is-directory": "^0.3.1", + "js-yaml": "^3.13.1", + "parse-json": "^4.0.0" + } + }, + "import-fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/import-fresh/-/import-fresh-2.0.0.tgz", + "integrity": "sha512-eZ5H8rcgYazHbKC3PG4ClHNykCSxtAhxSSEM+2mb+7evD2CKF5V7c0dNum7AdpDh0ZdICwZY9sRSn8f+KH96sg==", + "dev": true, + "requires": { + "caller-path": "^2.0.0", + "resolve-from": "^3.0.0" + } + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmmirror.com/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", + "dev": true, + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, + "resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==", + "dev": true + } + } + }, + "postcss-loader": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/postcss-loader/-/postcss-loader-3.0.0.tgz", + "integrity": "sha512-cLWoDEY5OwHcAjDnkyRQzAXfs2jrKjXpO/HQFcc5b5u/r7aa471wdmChmwfnv7x2u840iat/wi0lQ5nbRgSkUA==", + "dev": true, + "requires": { + "loader-utils": "^1.1.0", + "postcss": "^7.0.0", + "postcss-load-config": "^2.0.0", + "schema-utils": "^1.0.0" + }, + "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "postcss-media-query-parser": { + "version": "0.2.3", + "resolved": "https://registry.npmmirror.com/postcss-media-query-parser/download/postcss-media-query-parser-0.2.3.tgz", + "integrity": "sha1-J7Ocb02U+Bsac7j3Y1HGCeXO8kQ=", + "dev": true + }, + "postcss-merge-longhand": { + "version": "4.0.11", + "resolved": "https://registry.npmmirror.com/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz", + "integrity": "sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw==", + "dev": true, + "requires": { + "css-color-names": "0.0.4", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "stylehacks": "^4.0.0" + }, + "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "postcss-merge-rules": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz", + "integrity": "sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "caniuse-api": "^3.0.0", + "cssnano-util-same-parent": "^4.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0", + "vendors": "^1.0.0" + }, + "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "postcss-selector-parser": { + "version": "3.1.2", + "resolved": "https://registry.npmmirror.com/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", + "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", + "dev": true, + "requires": { + "dot-prop": "^5.2.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "postcss-minify-font-values": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz", + "integrity": "sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==", + "dev": true, + "requires": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "postcss-minify-gradients": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz", + "integrity": "sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q==", + "dev": true, + "requires": { + "cssnano-util-get-arguments": "^4.0.0", + "is-color-stop": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "postcss-minify-params": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz", + "integrity": "sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg==", + "dev": true, + "requires": { + "alphanum-sort": "^1.0.0", + "browserslist": "^4.0.0", + "cssnano-util-get-arguments": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "uniqs": "^2.0.0" + }, + "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "postcss-minify-selectors": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz", + "integrity": "sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==", + "dev": true, + "requires": { + "alphanum-sort": "^1.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0" + }, + "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "postcss-selector-parser": { + "version": "3.1.2", + "resolved": "https://registry.npmmirror.com/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", + "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", + "dev": true, + "requires": { + "dot-prop": "^5.2.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "postcss-modules-extract-imports": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz", + "integrity": "sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ==", + "dev": true, + "requires": { + "postcss": "^7.0.5" + }, + "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "postcss-modules-local-by-default": { + "version": "3.0.3", + "resolved": "https://registry.npmmirror.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.3.tgz", + "integrity": "sha512-e3xDq+LotiGesympRlKNgaJ0PCzoUIdpH0dj47iWAui/kyTgh3CiAr1qP54uodmJhl6p9rN6BoNcdEDVJx9RDw==", + "dev": true, + "requires": { + "icss-utils": "^4.1.1", + "postcss": "^7.0.32", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + }, + "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "postcss-modules-scope": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz", + "integrity": "sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ==", + "dev": true, + "requires": { + "postcss": "^7.0.6", + "postcss-selector-parser": "^6.0.0" + }, + "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "postcss-modules-values": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz", + "integrity": "sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg==", + "dev": true, + "requires": { + "icss-utils": "^4.0.0", + "postcss": "^7.0.6" + }, + "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "postcss-normalize-charset": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz", + "integrity": "sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==", + "dev": true, + "requires": { + "postcss": "^7.0.0" + }, + "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "postcss-normalize-display-values": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz", + "integrity": "sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ==", + "dev": true, + "requires": { + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "postcss-normalize-positions": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz", + "integrity": "sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA==", + "dev": true, + "requires": { + "cssnano-util-get-arguments": "^4.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "postcss-normalize-repeat-style": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz", + "integrity": "sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q==", + "dev": true, + "requires": { + "cssnano-util-get-arguments": "^4.0.0", + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "postcss-normalize-string": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz", + "integrity": "sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA==", + "dev": true, + "requires": { + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "postcss-normalize-timing-functions": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz", + "integrity": "sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A==", + "dev": true, + "requires": { + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "postcss-normalize-unicode": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz", + "integrity": "sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "postcss-normalize-url": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz", + "integrity": "sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==", + "dev": true, + "requires": { + "is-absolute-url": "^2.0.0", + "normalize-url": "^3.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "postcss-normalize-whitespace": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz", + "integrity": "sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==", + "dev": true, + "requires": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "postcss-ordered-values": { + "version": "4.1.2", + "resolved": "https://registry.npmmirror.com/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz", + "integrity": "sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==", + "dev": true, + "requires": { + "cssnano-util-get-arguments": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "postcss-reduce-initial": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz", + "integrity": "sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "caniuse-api": "^3.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0" + }, + "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "postcss-reduce-transforms": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz", + "integrity": "sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==", + "dev": true, + "requires": { + "cssnano-util-get-match": "^4.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "postcss-resolve-nested-selector": { + "version": "0.1.1", + "resolved": "https://registry.npmmirror.com/postcss-resolve-nested-selector/download/postcss-resolve-nested-selector-0.1.1.tgz", + "integrity": "sha1-Kcy8fDfe36wwTp//C/FZaz9qDk4=", + "dev": true + }, + "postcss-safe-parser": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/postcss-safe-parser/-/postcss-safe-parser-4.0.2.tgz", + "integrity": "sha512-Uw6ekxSWNLCPesSv/cmqf2bY/77z11O7jZGPax3ycZMFU/oi2DMH9i89AdHc1tRwFg/arFoEwX0IS3LCUxJh1g==", + "dev": true, + "requires": { + "postcss": "^7.0.26" + }, + "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "postcss-sass": { + "version": "0.4.4", + "resolved": "https://registry.npmmirror.com/postcss-sass/-/postcss-sass-0.4.4.tgz", + "integrity": "sha512-BYxnVYx4mQooOhr+zer0qWbSPYnarAy8ZT7hAQtbxtgVf8gy+LSLT/hHGe35h14/pZDTw1DsxdbrwxBN++H+fg==", + "dev": true, + "requires": { + "gonzales-pe": "^4.3.0", + "postcss": "^7.0.21" + }, + "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "postcss-scss": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/postcss-scss/-/postcss-scss-2.1.1.tgz", + "integrity": "sha512-jQmGnj0hSGLd9RscFw9LyuSVAa5Bl1/KBPqG1NQw9w8ND55nY4ZEsdlVuYJvLPpV+y0nwTV5v/4rHPzZRihQbA==", + "dev": true, + "requires": { + "postcss": "^7.0.6" + }, + "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "postcss-selector-parser": { + "version": "6.0.2", + "resolved": "https://registry.npmmirror.com/postcss-selector-parser/download/postcss-selector-parser-6.0.2.tgz?cache=0&sync_timestamp=1582039646348&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fpostcss-selector-parser%2Fdownload%2Fpostcss-selector-parser-6.0.2.tgz", + "integrity": "sha1-k0z3mdAWyDQRhZ4J3Oyt4BKG7Fw=", + "dev": true, + "requires": { + "cssesc": "^3.0.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + }, + "postcss-sorting": { + "version": "7.0.1", + "resolved": "https://registry.npmmirror.com/postcss-sorting/-/postcss-sorting-7.0.1.tgz", + "integrity": "sha512-iLBFYz6VRYyLJEJsBJ8M3TCqNcckVzz4wFounSc5Oez35ogE/X+aoC5fFu103Ot7NyvjU3/xqIXn93Gp3kJk4g==", + "dev": true + }, + "postcss-svgo": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/postcss-svgo/-/postcss-svgo-4.0.3.tgz", + "integrity": "sha512-NoRbrcMWTtUghzuKSoIm6XV+sJdvZ7GZSc3wdBN0W19FTtp2ko8NqLsgoh/m9CzNhU3KLPvQmjIwtaNFkaFTvw==", + "dev": true, + "requires": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "svgo": "^1.0.0" + }, + "dependencies": { + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmmirror.com/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "css-select": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/css-select/-/css-select-2.1.0.tgz", + "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", + "dev": true, + "requires": { + "boolbase": "^1.0.0", + "css-what": "^3.2.1", + "domutils": "^1.7.0", + "nth-check": "^1.0.2" + } + }, + "css-tree": { + "version": "1.0.0-alpha.37", + "resolved": "https://registry.npmmirror.com/css-tree/-/css-tree-1.0.0-alpha.37.tgz", + "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", + "dev": true, + "requires": { + "mdn-data": "2.0.4", + "source-map": "^0.6.1" + } + }, + "css-what": { + "version": "3.4.2", + "resolved": "https://registry.npmmirror.com/css-what/-/css-what-3.4.2.tgz", + "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==", + "dev": true + }, + "dom-serializer": { + "version": "0.2.2", + "resolved": "https://registry.npmmirror.com/dom-serializer/-/dom-serializer-0.2.2.tgz", + "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "entities": "^2.0.0" + }, + "dependencies": { + "domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true + } + } + }, + "domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmmirror.com/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", + "dev": true + }, + "domutils": { + "version": "1.7.0", + "resolved": "https://registry.npmmirror.com/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "dev": true, + "requires": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmmirror.com/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "mdn-data": { + "version": "2.0.4", + "resolved": "https://registry.npmmirror.com/mdn-data/-/mdn-data-2.0.4.tgz", + "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==", + "dev": true + }, + "nth-check": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/nth-check/-/nth-check-1.0.2.tgz", + "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "dev": true, + "requires": { + "boolbase": "~1.0.0" + } + }, + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "svgo": { + "version": "1.3.2", + "resolved": "https://registry.npmmirror.com/svgo/-/svgo-1.3.2.tgz", + "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "coa": "^2.0.2", + "css-select": "^2.0.0", + "css-select-base-adapter": "^0.1.1", + "css-tree": "1.0.0-alpha.37", + "csso": "^4.0.2", + "js-yaml": "^3.13.1", + "mkdirp": "~0.5.1", + "object.values": "^1.1.0", + "sax": "~1.2.4", + "stable": "^0.1.8", + "unquote": "~1.1.1", + "util.promisify": "~1.0.0" + } + } + } + }, + "postcss-syntax": { + "version": "0.36.2", + "resolved": "https://registry.npmmirror.com/postcss-syntax/-/postcss-syntax-0.36.2.tgz", + "integrity": "sha512-nBRg/i7E3SOHWxF3PpF5WnJM/jQ1YpY9000OaVXlAQj6Zp/kIqJxEDWIZ67tAd7NLuk7zqN4yqe9nc0oNAOs1w==", + "dev": true + }, + "postcss-unique-selectors": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz", + "integrity": "sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==", + "dev": true, + "requires": { + "alphanum-sort": "^1.0.0", + "postcss": "^7.0.0", + "uniqs": "^2.0.0" + }, + "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "postcss-value-parser": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/postcss-value-parser/download/postcss-value-parser-4.1.0.tgz", + "integrity": "sha1-RD9qIM7WSBor2k+oUypuVdeJoss=", + "dev": true + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true + }, + "prepend-http": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/prepend-http/-/prepend-http-1.0.4.tgz", + "integrity": "sha512-PhmXi5XmoyKw1Un4E+opM2KcsJInDvKyuOumcjjw3waw86ZNjHwVUOOWLc4bCzLdcKNaWBH9e99sbWzDQsVaYg==", + "dev": true + }, + "prettier": { + "version": "2.7.1", + "resolved": "https://registry.npmmirror.com/prettier/-/prettier-2.7.1.tgz", + "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", + "dev": true + }, + "prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "dev": true, + "requires": { + "fast-diff": "^1.1.2" + } + }, + "pretty-error": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/pretty-error/-/pretty-error-2.1.2.tgz", + "integrity": "sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw==", + "dev": true, + "requires": { + "lodash": "^4.17.20", + "renderkid": "^2.0.4" + } + }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmmirror.com/process/download/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", + "dev": true + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/process-nextick-args/download/process-nextick-args-2.0.1.tgz", + "integrity": "sha1-eCDZsWEgzFXKmud5JoCufbptf+I=", + "dev": true + }, + "promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/promise-inflight/download/promise-inflight-1.0.1.tgz", + "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", + "dev": true + }, + "proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmmirror.com/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dev": true, + "requires": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + } + }, + "proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/proxy-agent/-/proxy-agent-5.0.0.tgz", + "integrity": "sha512-gkH7BkvLVkSfX9Dk27W6TyNOWWZWRilRfk1XxGNWOYJ2TuedAv1yFpCaU9QSBmBe716XOTNpYNOzhysyw8xn7g==", + "dev": true, + "requires": { + "agent-base": "^6.0.0", + "debug": "4", + "http-proxy-agent": "^4.0.0", + "https-proxy-agent": "^5.0.0", + "lru-cache": "^5.1.1", + "pac-proxy-agent": "^5.0.0", + "proxy-from-env": "^1.0.0", + "socks-proxy-agent": "^5.0.0" + }, + "dependencies": { + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "dev": true + }, + "prr": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/prr/download/prr-1.0.1.tgz", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", + "dev": true + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "dev": true + }, + "psl": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", + "dev": true + }, + "public-encrypt": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmmirror.com/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } + } + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/pump/download/pump-3.0.0.tgz", + "integrity": "sha1-tKIRaBW94vTh6mAjVOjHVWUQemQ=", + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "pumpify": { + "version": "1.5.1", + "resolved": "https://registry.npmmirror.com/pumpify/-/pumpify-1.5.1.tgz", + "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", + "dev": true, + "requires": { + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" + }, + "dependencies": { + "pump": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + } + } + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/punycode/download/punycode-2.1.1.tgz", + "integrity": "sha1-tYsBCsQMIsVldhbI0sLALHv0eew=" + }, + "q": { + "version": "1.5.1", + "resolved": "https://registry.npmmirror.com/q/-/q-1.5.1.tgz", + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=" + }, + "qs": { + "version": "6.11.0", + "resolved": "https://registry.npmmirror.com/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dev": true, + "requires": { + "side-channel": "^1.0.4" + } + }, + "query-string": { + "version": "4.3.4", + "resolved": "https://registry.npmmirror.com/query-string/-/query-string-4.3.4.tgz", + "integrity": "sha512-O2XLNDBIg1DnTOa+2XrIwSiXEV8h2KImXUnjhhn2+UsvZ+Es2uyd5CCRTNQlDGbzUQOW3aYCBx9rVA6dzsiY7Q==", + "dev": true, + "requires": { + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" + } + }, + "querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmmirror.com/querystring/download/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", + "dev": true + }, + "querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/querystring-es3/download/querystring-es3-0.2.1.tgz", + "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", + "dev": true + }, + "querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "dev": true + }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmmirror.com/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true + }, + "quick-lru": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/quick-lru/-/quick-lru-4.0.1.tgz", + "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", + "dev": true + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/randombytes/download/randombytes-2.1.0.tgz", + "integrity": "sha1-32+ENy8CcNxlzfYpE0mrekc9Tyo=", + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "dev": true, + "requires": { + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" + } + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true + }, + "raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmmirror.com/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "dev": true, + "requires": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + }, + "read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmmirror.com/read-pkg/download/read-pkg-5.2.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fread-pkg%2Fdownload%2Fread-pkg-5.2.0.tgz", + "integrity": "sha1-e/KVQ4yloz5WzTDgU7NO5yUMk8w=", + "dev": true, + "requires": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "dependencies": { + "hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmmirror.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmmirror.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + } + } + }, + "read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmmirror.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "dev": true, + "requires": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, + "dependencies": { + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmmirror.com/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true + } + } + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmmirror.com/readable-stream/download/readable-stream-2.3.7.tgz?cache=0&sync_timestamp=1581624324274&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Freadable-stream%2Fdownload%2Freadable-stream-2.3.7.tgz", + "integrity": "sha1-Hsoc9xGu+BTAT2IlKjamL2yyO1c=", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "redent": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "dev": true, + "requires": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + } + }, + "regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmmirror.com/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true + }, + "regenerate-unicode-properties": { + "version": "10.1.0", + "resolved": "https://registry.npmmirror.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", + "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", + "dev": true, + "requires": { + "regenerate": "^1.4.2" + } + }, + "regenerator-runtime": { + "version": "0.13.5", + "resolved": "https://registry.npmmirror.com/regenerator-runtime/download/regenerator-runtime-0.13.5.tgz?cache=0&sync_timestamp=1584052481783&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fregenerator-runtime%2Fdownload%2Fregenerator-runtime-0.13.5.tgz", + "integrity": "sha1-2Hih0JS0MG0QuQlkhLM+vVXiZpc=", + "dev": true + }, + "regenerator-transform": { + "version": "0.15.1", + "resolved": "https://registry.npmmirror.com/regenerator-transform/-/regenerator-transform-0.15.1.tgz", + "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==", + "dev": true, + "requires": { + "@babel/runtime": "^7.8.4" + } + }, + "regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dev": true, + "requires": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + } + }, + "regexp.prototype.flags": { + "version": "1.4.3", + "resolved": "https://registry.npmmirror.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", + "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "functions-have-names": "^1.2.2" + } + }, + "regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmmirror.com/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true + }, + "regexpu-core": { + "version": "5.2.2", + "resolved": "https://registry.npmmirror.com/regexpu-core/-/regexpu-core-5.2.2.tgz", + "integrity": "sha512-T0+1Zp2wjF/juXMrMxHxidqGYn8U4R+zleSJhX9tQ1PUsS8a9UtYfbsF9LdiVgNX3kiX8RNaKM42nfSgvFJjmw==", + "dev": true, + "requires": { + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.1.0", + "regjsgen": "^0.7.1", + "regjsparser": "^0.9.1", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" + } + }, + "regjsgen": { + "version": "0.7.1", + "resolved": "https://registry.npmmirror.com/regjsgen/-/regjsgen-0.7.1.tgz", + "integrity": "sha512-RAt+8H2ZEzHeYWxZ3H2z6tF18zyyOnlcdaafLrm21Bguj7uZy6ULibiAFdXEtKQY4Sy7wDTwDiOazasMLc4KPA==", + "dev": true + }, + "regjsparser": { + "version": "0.9.1", + "resolved": "https://registry.npmmirror.com/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", + "dev": true, + "requires": { + "jsesc": "~0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmmirror.com/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "dev": true + } + } + }, + "relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmmirror.com/relateurl/download/relateurl-0.2.7.tgz", + "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=", + "dev": true + }, + "remark": { + "version": "13.0.0", + "resolved": "https://registry.npmmirror.com/remark/-/remark-13.0.0.tgz", + "integrity": "sha512-HDz1+IKGtOyWN+QgBiAT0kn+2s6ovOxHyPAFGKVE81VSzJ+mq7RwHFledEvB5F1p4iJvOah/LOKdFuzvRnNLCA==", + "dev": true, + "requires": { + "remark-parse": "^9.0.0", + "remark-stringify": "^9.0.0", + "unified": "^9.1.0" + } + }, + "remark-parse": { + "version": "9.0.0", + "resolved": "https://registry.npmmirror.com/remark-parse/-/remark-parse-9.0.0.tgz", + "integrity": "sha512-geKatMwSzEXKHuzBNU1z676sGcDcFoChMK38TgdHJNAYfFtsfHDQG7MoJAjs6sgYMqyLduCYWDIWZIxiPeafEw==", + "dev": true, + "requires": { + "mdast-util-from-markdown": "^0.8.0" + } + }, + "remark-stringify": { + "version": "9.0.1", + "resolved": "https://registry.npmmirror.com/remark-stringify/-/remark-stringify-9.0.1.tgz", + "integrity": "sha512-mWmNg3ZtESvZS8fv5PTvaPckdL4iNlCHTt8/e/8oN08nArHRHjNZMKzA/YW3+p7/lYqIw4nx1XsjCBo/AxNChg==", + "dev": true, + "requires": { + "mdast-util-to-markdown": "^0.6.0" + } + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/remove-trailing-separator/download/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true + }, + "renderkid": { + "version": "2.0.7", + "resolved": "https://registry.npmmirror.com/renderkid/-/renderkid-2.0.7.tgz", + "integrity": "sha512-oCcFyxaMrKsKcTY59qnCAtmDVSLfPbrv6A3tVbPdFMMrv5jaK10V6m40cKsoPNhAqN6rmHW9sswW4o3ruSrwUQ==", + "dev": true, + "requires": { + "css-select": "^4.1.3", + "dom-converter": "^0.2.0", + "htmlparser2": "^6.1.0", + "lodash": "^4.17.21", + "strip-ansi": "^3.0.1" + }, + "dependencies": { + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/strip-ansi/download/strip-ansi-3.0.1.tgz?cache=0&sync_timestamp=1573280518303&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + } + } + }, + "repeat-element": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/repeat-element/-/repeat-element-1.1.4.tgz", + "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", + "dev": true + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmmirror.com/repeat-string/download/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true + }, + "request": { + "version": "2.88.2", + "resolved": "https://registry.npmmirror.com/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "dev": true, + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "dependencies": { + "qs": { + "version": "6.5.3", + "resolved": "https://registry.npmmirror.com/qs/-/qs-6.5.3.tgz", + "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", + "dev": true + }, + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmmirror.com/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "dev": true + } + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/require-directory/download/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true + }, + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true + }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/requires-port/download/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", + "dev": true + }, + "resolve": { + "version": "1.17.0", + "resolved": "https://registry.npmmirror.com/resolve/download/resolve-1.17.0.tgz", + "integrity": "sha1-sllBtUloIxzC0bt2p5y38sC/hEQ=", + "dev": true, + "requires": { + "path-parse": "^1.0.6" + } + }, + "resolve-cwd": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz", + "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", + "dev": true, + "requires": { + "resolve-from": "^3.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "dev": true + } + } + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/resolve-url/download/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "dev": true + }, + "restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "requires": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "dependencies": { + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true + }, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } + } + } + }, + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npmmirror.com/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true + }, + "retry": { + "version": "0.12.0", + "resolved": "https://registry.npmmirror.com/retry/download/retry-0.12.0.tgz", + "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", + "dev": true + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, + "rfdc": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/rfdc/-/rfdc-1.3.0.tgz", + "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", + "dev": true + }, + "rgb-regex": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/rgb-regex/-/rgb-regex-1.0.1.tgz", + "integrity": "sha512-gDK5mkALDFER2YLqH6imYvK6g02gpNGM4ILDZ472EwWfXZnC2ZEpoB2ECXTyOVUKuk/bPJZMzwQPBYICzP+D3w==", + "dev": true + }, + "rgba-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/rgba-regex/-/rgba-regex-1.0.0.tgz", + "integrity": "sha512-zgn5OjNQXLUTdq8m17KdaicF6w89TZs8ZU8y0AYENIU6wG8GG6LLm0yLSiPY8DmaYmHdgRW8rnApjoT0fQRfMg==", + "dev": true + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmmirror.com/rimraf/download/rimraf-2.7.1.tgz?cache=0&sync_timestamp=1581229865753&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Frimraf%2Fdownload%2Frimraf-2.7.1.tgz", + "integrity": "sha1-NXl/E6f9rcVmFCwp1PB8ytSD4+w=", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "dev": true, + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "run-queue": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/run-queue/-/run-queue-1.0.3.tgz", + "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", + "dev": true, + "requires": { + "aproba": "^1.1.1" + } + }, + "rxjs": { + "version": "7.5.7", + "resolved": "https://registry.npmmirror.com/rxjs/-/rxjs-7.5.7.tgz", + "integrity": "sha512-z9MzKh/UcOqB3i20H6rtrlaE/CgjLOvheWK/9ILrbhROGTweAi1BaFsTT9FbwZi5Trr1qNRs+MXkhmR06awzQA==", + "dev": true, + "requires": { + "tslib": "^2.1.0" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/safe-buffer/download/safe-buffer-5.1.2.tgz", + "integrity": "sha1-mR7GnSluAxN0fVm9/St0XDX4go0=", + "dev": true + }, + "safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/safe-regex/download/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, + "requires": { + "ret": "~0.1.10" + } + }, + "safe-regex-test": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz", + "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-regex": "^1.1.4" + }, + "dependencies": { + "get-intrinsic": { + "version": "1.1.3", + "resolved": "https://registry.npmmirror.com/get-intrinsic/-/get-intrinsic-1.1.3.tgz", + "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + } + } + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/safer-buffer/download/safer-buffer-2.1.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fsafer-buffer%2Fdownload%2Fsafer-buffer-2.1.2.tgz", + "integrity": "sha1-RPoWGwGHuVSd2Eu5GAL5vYOFzWo=", + "dev": true + }, + "sass": { + "version": "1.52.2", + "resolved": "https://registry.npmmirror.com/sass/-/sass-1.52.2.tgz", + "integrity": "sha512-mfHB2VSeFS7sZlPv9YohB9GB7yWIgQNTGniQwfQ04EoQN0wsQEv7SwpCwy/x48Af+Z3vDeFXz+iuXM3HK/phZQ==", + "dev": true, + "requires": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + } + }, + "sass-loader": { + "version": "10.2.1", + "resolved": "https://registry.npmmirror.com/sass-loader/-/sass-loader-10.2.1.tgz", + "integrity": "sha512-RRvWl+3K2LSMezIsd008ErK4rk6CulIMSwrcc2aZvjymUgKo/vjXGp1rSWmfTUX7bblEOz8tst4wBwWtCGBqKA==", + "dev": true, + "requires": { + "klona": "^2.0.4", + "loader-utils": "^2.0.0", + "neo-async": "^2.6.2", + "schema-utils": "^3.0.0", + "semver": "^7.3.2" + }, + "dependencies": { + "loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmmirror.com/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "dependencies": { + "json5": { + "version": "2.2.3", + "resolved": "https://registry.npmmirror.com/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true + } + } + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + }, + "semver": { + "version": "7.3.7", + "resolved": "https://registry.npmmirror.com/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "sass-resources-loader": { + "version": "2.2.5", + "resolved": "https://registry.npmmirror.com/sass-resources-loader/-/sass-resources-loader-2.2.5.tgz", + "integrity": "sha512-po8rfETH9cOQACWxubT/1CCu77KjxwRtCDm6QAXZH99aUHBydwSoxdIjC40SGp/dcS/FkSNJl0j1VEojGZqlvQ==", + "dev": true, + "requires": { + "async": "^3.2.3", + "chalk": "^4.1.0", + "glob": "^7.1.6", + "loader-utils": "^2.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "async": { + "version": "3.2.4", + "resolved": "https://registry.npmmirror.com/async/-/async-3.2.4.tgz", + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", + "dev": true + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmmirror.com/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "dependencies": { + "json5": { + "version": "2.2.3", + "resolved": "https://registry.npmmirror.com/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true + } + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmmirror.com/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + }, + "schema-utils": { + "version": "2.7.1", + "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" + } + }, + "sdk-base": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/sdk-base/-/sdk-base-2.0.1.tgz", + "integrity": "sha1-ukAonovfJy7RHdnql+r5jgNtJMY=", + "dev": true, + "requires": { + "get-ready": "~1.0.0" + } + }, + "select": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/select/download/select-1.1.2.tgz", + "integrity": "sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0=" + }, + "select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/select-hose/download/select-hose-2.0.0.tgz", + "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=", + "dev": true + }, + "selfsigned": { + "version": "1.10.14", + "resolved": "https://registry.npmmirror.com/selfsigned/-/selfsigned-1.10.14.tgz", + "integrity": "sha512-lkjaiAye+wBZDCBsu5BGi0XiLRxeUlsGod5ZP924CRSEoGuZAw/f7y9RKu28rwTfiHVhdavhB0qH0INV6P1lEA==", + "dev": true, + "requires": { + "node-forge": "^0.10.0" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmmirror.com/semver/download/semver-5.7.1.tgz", + "integrity": "sha1-qVT5Ma66UI0we78Gnv8MAclhFvc=" + }, + "send": { + "version": "0.18.0", + "resolved": "https://registry.npmmirror.com/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dev": true, + "requires": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/ms/download/ms-2.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fms%2Fdownload%2Fms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmmirror.com/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true + } + } + }, + "serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, + "serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmmirror.com/serve-index/download/serve-index-1.9.1.tgz", + "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", + "dev": true, + "requires": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmmirror.com/http-errors/download/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmmirror.com/inherits/download/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + } + } + }, + "serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmmirror.com/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dev": true, + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + } + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/set-blocking/download/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmmirror.com/setimmediate/download/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", + "dev": true + }, + "setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true + }, + "sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmmirror.com/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "shell-quote": { + "version": "1.7.4", + "resolved": "https://registry.npmmirror.com/shell-quote/-/shell-quote-1.7.4.tgz", + "integrity": "sha512-8o/QEhSSRb1a5i7TFR0iM4G16Z0vYB2OQVs4G3aAFXjn3T6yEx8AZxy1PgDF7I00LZHYA3WxaSYIf5e5sAX8Rw==", + "dev": true + }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, + "signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmmirror.com/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmmirror.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "dev": true, + "requires": { + "is-arrayish": "^0.3.1" + }, + "dependencies": { + "is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmmirror.com/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", + "dev": true + } + } + }, + "sirv": { + "version": "1.0.19", + "resolved": "https://registry.npmmirror.com/sirv/-/sirv-1.0.19.tgz", + "integrity": "sha512-JuLThK3TnZG1TAKDwNIqNq6QA2afLOCcm+iE8D1Kj3GA40pSPsxQjjJl0J8X3tsR7T+CP1GavpzLwYkgVLWrZQ==", + "dev": true, + "requires": { + "@polka/url": "^1.0.0-next.20", + "mrmime": "^1.0.0", + "totalist": "^1.0.0" + } + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + } + } + }, + "smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmmirror.com/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "dev": true + }, + "snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmmirror.com/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dev": true, + "requires": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmmirror.com/define-property/download/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dev": true, + "requires": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/define-property/download/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dev": true, + "requires": { + "kind-of": "^3.2.0" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmmirror.com/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "sockjs": { + "version": "0.3.24", + "resolved": "https://registry.npmmirror.com/sockjs/-/sockjs-0.3.24.tgz", + "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", + "dev": true, + "requires": { + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" + } + }, + "sockjs-client": { + "version": "1.5.1", + "resolved": "https://registry.npmmirror.com/sockjs-client/-/sockjs-client-1.5.1.tgz", + "integrity": "sha512-VnVAb663fosipI/m6pqRXakEOw7nvd7TUgdr3PlR/8V2I95QIdwT8L4nMxhyU8SmDBHYXU1TOElaKOmKLfYzeQ==", + "dev": true, + "requires": { + "debug": "^3.2.6", + "eventsource": "^1.0.7", + "faye-websocket": "^0.11.3", + "inherits": "^2.0.4", + "json3": "^3.3.3", + "url-parse": "^1.5.1" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmmirror.com/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + } + } + }, + "socks": { + "version": "2.7.1", + "resolved": "https://registry.npmmirror.com/socks/-/socks-2.7.1.tgz", + "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", + "dev": true, + "requires": { + "ip": "^2.0.0", + "smart-buffer": "^4.2.0" + }, + "dependencies": { + "ip": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/ip/-/ip-2.0.0.tgz", + "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", + "dev": true + } + } + }, + "socks-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmmirror.com/socks-proxy-agent/-/socks-proxy-agent-5.0.1.tgz", + "integrity": "sha512-vZdmnjb9a2Tz6WEQVIurybSwElwPxMZaIc7PzqbJTrezcKNznv6giT7J7tZDZ1BojVaa1jvO/UiUdhDVB0ACoQ==", + "dev": true, + "requires": { + "agent-base": "^6.0.2", + "debug": "4", + "socks": "^2.3.3" + }, + "dependencies": { + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "sort-keys": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/sort-keys/-/sort-keys-1.1.2.tgz", + "integrity": "sha512-vzn8aSqKgytVik0iwdBEi+zevbTYZogewTUM6dtpmGwEcdzbub/TX4bCzRhebDCRC3QzXgJsLRKB2V/Oof7HXg==", + "dev": true, + "requires": { + "is-plain-obj": "^1.0.0" + }, + "dependencies": { + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", + "dev": true + } + } + }, + "source-list-map": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/source-list-map/download/source-list-map-2.0.1.tgz", + "integrity": "sha1-OZO9hzv8SEecyp6jpUeDXHwVSzQ=", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmmirror.com/source-map/download/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==" + }, + "source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmmirror.com/source-map-resolve/download/source-map-resolve-0.5.3.tgz?cache=0&sync_timestamp=1584829515586&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fsource-map-resolve%2Fdownload%2Fsource-map-resolve-0.5.3.tgz", + "integrity": "sha1-GQhmvs51U+H48mei7oLGBrVQmho=", + "dev": true, + "requires": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmmirror.com/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "source-map-url": { + "version": "0.4.0", + "resolved": "https://registry.npmmirror.com/source-map-url/download/source-map-url-0.4.0.tgz", + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", + "dev": true + }, + "sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmmirror.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "dev": true + }, + "spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmmirror.com/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.11", + "resolved": "https://registry.npmmirror.com/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz", + "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==", + "dev": true + }, + "spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "dev": true, + "requires": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + }, + "dependencies": { + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "dev": true, + "requires": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + }, + "dependencies": { + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "specificity": { + "version": "0.4.1", + "resolved": "https://registry.npmmirror.com/specificity/-/specificity-0.4.1.tgz", + "integrity": "sha512-1klA3Gi5PD1Wv9Q0wUoOQN1IWAuPu0D1U03ThXTr0cJ20+/iq2tHSDnK7Kk/0LXJ1ztUB2/1Os0wKmfyNgUQfg==", + "dev": true + }, + "speed-measure-webpack-plugin": { + "version": "1.5.0", + "resolved": "https://registry.npmmirror.com/speed-measure-webpack-plugin/-/speed-measure-webpack-plugin-1.5.0.tgz", + "integrity": "sha512-Re0wX5CtM6gW7bZA64ONOfEPEhwbiSF/vz6e2GvadjuaPrQcHTQdRGsD8+BE7iUOysXH8tIenkPCQBEcspXsNg==", + "dev": true, + "requires": { + "chalk": "^4.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dev": true, + "requires": { + "extend-shallow": "^3.0.0" + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" + }, + "sshpk": { + "version": "1.17.0", + "resolved": "https://registry.npmmirror.com/sshpk/-/sshpk-1.17.0.tgz", + "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", + "dev": true, + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + } + }, + "ssri": { + "version": "8.0.1", + "resolved": "https://registry.npmmirror.com/ssri/-/ssri-8.0.1.tgz", + "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", + "dev": true, + "requires": { + "minipass": "^3.1.1" + } + }, + "stable": { + "version": "0.1.8", + "resolved": "https://registry.npmmirror.com/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==" + }, + "stackframe": { + "version": "1.3.4", + "resolved": "https://registry.npmmirror.com/stackframe/-/stackframe-1.3.4.tgz", + "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==", + "dev": true + }, + "static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmmirror.com/static-extend/download/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "dev": true, + "requires": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmmirror.com/define-property/download/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmmirror.com/statuses/download/statuses-1.5.0.tgz?cache=0&sync_timestamp=1587327902535&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fstatuses%2Fdownload%2Fstatuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "dev": true + }, + "stream-browserify": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/stream-browserify/-/stream-browserify-2.0.2.tgz", + "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", + "dev": true, + "requires": { + "inherits": "~2.0.1", + "readable-stream": "^2.0.2" + } + }, + "stream-each": { + "version": "1.2.3", + "resolved": "https://registry.npmmirror.com/stream-each/-/stream-each-1.2.3.tgz", + "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "stream-shift": "^1.0.0" + } + }, + "stream-http": { + "version": "2.8.3", + "resolved": "https://registry.npmmirror.com/stream-http/-/stream-http-2.8.3.tgz", + "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", + "dev": true, + "requires": { + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.3.6", + "to-arraybuffer": "^1.0.0", + "xtend": "^4.0.0" + } + }, + "stream-shift": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/stream-shift/-/stream-shift-1.0.1.tgz", + "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", + "dev": true + }, + "stream-wormhole": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/stream-wormhole/-/stream-wormhole-1.1.0.tgz", + "integrity": "sha512-gHFfL3px0Kctd6Po0M8TzEvt3De/xu6cnRrjlfYNhwbhLPLwigI2t1nc6jrzNuaYg5C4YF78PPFuQPzRiqn9ew==", + "dev": true + }, + "strict-uri-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", + "integrity": "sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==", + "dev": true + }, + "string-argv": { + "version": "0.3.1", + "resolved": "https://registry.npmmirror.com/string-argv/-/string-argv-0.3.1.tgz", + "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==", + "dev": true + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + } + } + }, + "string.prototype.trimend": { + "version": "1.0.5", + "resolved": "https://registry.npmmirror.com/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz", + "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" + } + }, + "string.prototype.trimstart": { + "version": "1.0.5", + "resolved": "https://registry.npmmirror.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz", + "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/string_decoder/download/string_decoder-1.1.1.tgz?cache=0&sync_timestamp=1565170823020&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fstring_decoder%2Fdownload%2Fstring_decoder-1.1.1.tgz", + "integrity": "sha1-nPFhG6YmhdcDCunkujQUnDrwP8g=", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/strip-ansi/download/strip-ansi-6.0.0.tgz?cache=0&sync_timestamp=1573280518303&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-6.0.0.tgz", + "integrity": "sha1-CxVx3XZpzNTz4G4U7x7tJiJa5TI=", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + } + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + }, + "strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/strip-eof/download/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "dev": true + }, + "strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/strip-final-newline/download/strip-final-newline-2.0.0.tgz", + "integrity": "sha1-ibhS+y/L6Tb29LMYevsKEsGrWK0=", + "dev": true + }, + "strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dev": true, + "requires": { + "min-indent": "^1.0.0" + } + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmmirror.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + }, + "style-loader": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/style-loader/-/style-loader-2.0.0.tgz", + "integrity": "sha512-Z0gYUJmzZ6ZdRUqpg1r8GsaFKypE+3xAzuFeMuoHgjc9KZv3wMyCRjQIWEbhoFSq7+7yoHXySDJyyWQaPajeiQ==", + "dev": true, + "requires": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "dependencies": { + "loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmmirror.com/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "dependencies": { + "json5": { + "version": "2.2.3", + "resolved": "https://registry.npmmirror.com/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true + } + } + }, + "schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "style-search": { + "version": "0.1.0", + "resolved": "https://registry.npmmirror.com/style-search/download/style-search-0.1.0.tgz", + "integrity": "sha1-eVjHk+R+MuB9K1yv5cC/jhLneQI=", + "dev": true + }, + "stylehacks": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/stylehacks/-/stylehacks-4.0.3.tgz", + "integrity": "sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g==", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0" + }, + "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "postcss-selector-parser": { + "version": "3.1.2", + "resolved": "https://registry.npmmirror.com/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", + "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", + "dev": true, + "requires": { + "dot-prop": "^5.2.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "stylelint": { + "version": "13.13.1", + "resolved": "https://registry.npmmirror.com/stylelint/-/stylelint-13.13.1.tgz", + "integrity": "sha512-Mv+BQr5XTUrKqAXmpqm6Ddli6Ief+AiPZkRsIrAoUKFuq/ElkUh9ZMYxXD0iQNZ5ADghZKLOWz1h7hTClB7zgQ==", + "dev": true, + "requires": { + "@stylelint/postcss-css-in-js": "^0.37.2", + "@stylelint/postcss-markdown": "^0.36.2", + "autoprefixer": "^9.8.6", + "balanced-match": "^2.0.0", + "chalk": "^4.1.1", + "cosmiconfig": "^7.0.0", + "debug": "^4.3.1", + "execall": "^2.0.0", + "fast-glob": "^3.2.5", + "fastest-levenshtein": "^1.0.12", + "file-entry-cache": "^6.0.1", + "get-stdin": "^8.0.0", + "global-modules": "^2.0.0", + "globby": "^11.0.3", + "globjoin": "^0.1.4", + "html-tags": "^3.1.0", + "ignore": "^5.1.8", + "import-lazy": "^4.0.0", + "imurmurhash": "^0.1.4", + "known-css-properties": "^0.21.0", + "lodash": "^4.17.21", + "log-symbols": "^4.1.0", + "mathml-tag-names": "^2.1.3", + "meow": "^9.0.0", + "micromatch": "^4.0.4", + "normalize-selector": "^0.2.0", + "postcss": "^7.0.35", + "postcss-html": "^0.36.0", + "postcss-less": "^3.1.4", + "postcss-media-query-parser": "^0.2.3", + "postcss-resolve-nested-selector": "^0.1.1", + "postcss-safe-parser": "^4.0.2", + "postcss-sass": "^0.4.4", + "postcss-scss": "^2.1.1", + "postcss-selector-parser": "^6.0.5", + "postcss-syntax": "^0.36.2", + "postcss-value-parser": "^4.1.0", + "resolve-from": "^5.0.0", + "slash": "^3.0.0", + "specificity": "^0.4.1", + "string-width": "^4.2.2", + "strip-ansi": "^6.0.0", + "style-search": "^0.1.0", + "sugarss": "^2.0.0", + "svg-tags": "^1.0.0", + "table": "^6.6.0", + "v8-compile-cache": "^2.3.0", + "write-file-atomic": "^3.0.3" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "autoprefixer": { + "version": "9.8.8", + "resolved": "https://registry.npmmirror.com/autoprefixer/-/autoprefixer-9.8.8.tgz", + "integrity": "sha512-eM9d/swFopRt5gdJ7jrpCwgvEMIayITpojhkkSMRsFHYuH5bkSQ4p/9qTEHtmNudUZh22Tehu7I6CxAW0IXTKA==", + "dev": true, + "requires": { + "browserslist": "^4.12.0", + "caniuse-lite": "^1.0.30001109", + "normalize-range": "^0.1.2", + "num2fraction": "^1.2.2", + "picocolors": "^0.2.1", + "postcss": "^7.0.32", + "postcss-value-parser": "^4.1.0" + } + }, + "balanced-match": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/balanced-match/-/balanced-match-2.0.0.tgz", + "integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==", + "dev": true + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "html-tags": { + "version": "3.2.0", + "resolved": "https://registry.npmmirror.com/html-tags/-/html-tags-3.2.0.tgz", + "integrity": "sha512-vy7ClnArOZwCnqZgvv+ddgHgJiAFXe3Ge9ML5/mBctVJoUoYPCdxVucOywjDARn6CVoh3dRSFdPHy2sX80L0Wg==", + "dev": true + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "postcss-selector-parser": { + "version": "6.0.10", + "resolved": "https://registry.npmmirror.com/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", + "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", + "dev": true, + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "type-fest": { + "version": "0.18.1", + "resolved": "https://registry.npmmirror.com/type-fest/-/type-fest-0.18.1.tgz", + "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==" + } + } + }, + "stylelint-config-prettier": { + "version": "9.0.3", + "resolved": "https://registry.npmmirror.com/stylelint-config-prettier/-/stylelint-config-prettier-9.0.3.tgz", + "integrity": "sha512-5n9gUDp/n5tTMCq1GLqSpA30w2sqWITSSEiAWQlpxkKGAUbjcemQ0nbkRvRUa0B1LgD3+hCvdL7B1eTxy1QHJg==", + "dev": true + }, + "stylelint-config-recess-order": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/stylelint-config-recess-order/-/stylelint-config-recess-order-3.0.0.tgz", + "integrity": "sha512-uNXrlDz570Q7HJlrq8mNjgfO/xlKIh2hKVKEFMTG1/ih/6tDLcTbuvO1Zoo2dnQay990OAkWLDpTDOorB+hmBw==", + "dev": true, + "requires": { + "stylelint-order": "5.x" + } + }, + "stylelint-config-recommended": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/stylelint-config-recommended/-/stylelint-config-recommended-5.0.0.tgz", + "integrity": "sha512-c8aubuARSu5A3vEHLBeOSJt1udOdS+1iue7BmJDTSXoCBmfEQmmWX+59vYIj3NQdJBY6a/QRv1ozVFpaB9jaqA==", + "dev": true + }, + "stylelint-config-recommended-scss": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/stylelint-config-recommended-scss/-/stylelint-config-recommended-scss-4.3.0.tgz", + "integrity": "sha512-/noGjXlO8pJTr/Z3qGMoaRFK8n1BFfOqmAbX1RjTIcl4Yalr+LUb1zb9iQ7pRx1GsEBXOAm4g2z5/jou/pfMPg==", + "dev": true, + "requires": { + "stylelint-config-recommended": "^5.0.0" + } + }, + "stylelint-order": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/stylelint-order/-/stylelint-order-5.0.0.tgz", + "integrity": "sha512-OWQ7pmicXufDw5BlRqzdz3fkGKJPgLyDwD1rFY3AIEfIH/LQY38Vu/85v8/up0I+VPiuGRwbc2Hg3zLAsJaiyw==", + "dev": true, + "requires": { + "postcss": "^8.3.11", + "postcss-sorting": "^7.0.1" + } + }, + "stylelint-scss": { + "version": "3.21.0", + "resolved": "https://registry.npmmirror.com/stylelint-scss/-/stylelint-scss-3.21.0.tgz", + "integrity": "sha512-CMI2wSHL+XVlNExpauy/+DbUcB/oUZLARDtMIXkpV/5yd8nthzylYd1cdHeDMJVBXeYHldsnebUX6MoV5zPW4A==", + "dev": true, + "requires": { + "lodash": "^4.17.15", + "postcss-media-query-parser": "^0.2.3", + "postcss-resolve-nested-selector": "^0.1.1", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + } + }, + "stylelint-webpack-plugin": { + "version": "2.4.0", + "resolved": "https://registry.npmmirror.com/stylelint-webpack-plugin/-/stylelint-webpack-plugin-2.4.0.tgz", + "integrity": "sha512-MhXDqd8HPXdY51nGeDeUEXToximoIbc0Z5TQC1M0ApR0ejrOwj9dRZKiL/00MDRrQfuAGkjcJ6sOVvc4gRzbgQ==", + "dev": true, + "requires": { + "arrify": "^2.0.1", + "globby": "^11.0.4", + "jest-worker": "^28.1.0", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "schema-utils": "^3.1.1" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "sugarss": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/sugarss/-/sugarss-2.0.0.tgz", + "integrity": "sha512-WfxjozUk0UVA4jm+U1d736AUpzSrNsQcIbyOkoE364GrtWmIrFdk5lksEupgWMD4VaT/0kVx1dobpiDumSgmJQ==", + "dev": true, + "requires": { + "postcss": "^7.0.2" + }, + "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmmirror.com/supports-color/download/supports-color-5.5.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fsupports-color%2Fdownload%2Fsupports-color-5.5.0.tgz", + "integrity": "sha1-4uaaRKyHcveKHsCzW2id9lMO/I8=", + "requires": { + "has-flag": "^3.0.0" + } + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true + }, + "svg-tags": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/svg-tags/download/svg-tags-1.0.0.tgz", + "integrity": "sha1-WPcc7jvVGbWdSyqEO2x95krAR2Q=", + "dev": true + }, + "svgaplayerweb": { + "version": "2.3.1", + "resolved": "https://registry.npmmirror.com/svgaplayerweb/download/svgaplayerweb-2.3.1.tgz", + "integrity": "sha1-Au3BavFiCvn1dKU254E/wlE55Hs=" + }, + "svgo": { + "version": "2.8.0", + "resolved": "https://registry.npmmirror.com/svgo/-/svgo-2.8.0.tgz", + "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", + "dev": true, + "requires": { + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^4.1.3", + "css-tree": "^1.1.3", + "csso": "^4.2.0", + "picocolors": "^1.0.0", + "stable": "^0.1.8" + }, + "dependencies": { + "commander": { + "version": "7.2.0", + "resolved": "https://registry.npmmirror.com/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true + } + } + }, + "table": { + "version": "6.8.0", + "resolved": "https://registry.npmmirror.com/table/-/table-6.8.0.tgz", + "integrity": "sha512-s/fitrbVeEyHKFa7mFdkuQMWlH1Wgw/yEXMt5xACT4ZpzWFluehAxRtUUQKPuWhaLAWhFcVx6w3oC8VKaUfPGA==", + "dev": true, + "requires": { + "ajv": "^8.0.1", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, + "dependencies": { + "ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmmirror.com/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + } + } + }, + "tapable": { + "version": "0.1.10", + "resolved": "https://registry.npmmirror.com/tapable/-/tapable-0.1.10.tgz", + "integrity": "sha1-KcNXB8K3DlDQdIK10gLo7URtr9Q=", + "dev": true + }, + "terser": { + "version": "4.8.1", + "resolved": "https://registry.npmmirror.com/terser/-/terser-4.8.1.tgz", + "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==", + "dev": true, + "requires": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "terser-webpack-plugin": { + "version": "1.4.5", + "resolved": "https://registry.npmmirror.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz", + "integrity": "sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==", + "dev": true, + "requires": { + "cacache": "^12.0.2", + "find-cache-dir": "^2.1.0", + "is-wsl": "^1.1.0", + "schema-utils": "^1.0.0", + "serialize-javascript": "^4.0.0", + "source-map": "^0.6.1", + "terser": "^4.1.2", + "webpack-sources": "^1.4.0", + "worker-farm": "^1.7.0" + }, + "dependencies": { + "find-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + } + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "dev": true + }, + "pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "dev": true, + "requires": { + "find-up": "^3.0.0" + } + }, + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + }, + "dependencies": { + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmmirror.com/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + } + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmmirror.com/text-table/download/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dev": true, + "requires": { + "any-promise": "^1.0.0" + } + }, + "thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmmirror.com/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=", + "dev": true, + "requires": { + "thenify": ">= 3.1.0 < 4" + } + }, + "thread-loader": { + "version": "2.1.3", + "resolved": "https://registry.npmmirror.com/thread-loader/-/thread-loader-2.1.3.tgz", + "integrity": "sha512-wNrVKH2Lcf8ZrWxDF/khdlLlsTMczdcwPA9VEK4c2exlEPynYWxi9op3nPTo5lAnDIkE0rQEB3VBP+4Zncc9Hg==", + "dev": true, + "requires": { + "loader-runner": "^2.3.1", + "loader-utils": "^1.1.0", + "neo-async": "^2.6.0" + } + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmmirror.com/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "through2": { + "version": "2.0.5", + "resolved": "https://registry.npmmirror.com/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "requires": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", + "dev": true + }, + "timers-browserify": { + "version": "2.0.12", + "resolved": "https://registry.npmmirror.com/timers-browserify/-/timers-browserify-2.0.12.tgz", + "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==", + "dev": true, + "requires": { + "setimmediate": "^1.0.4" + } + }, + "timsort": { + "version": "0.3.0", + "resolved": "https://registry.npmmirror.com/timsort/-/timsort-0.3.0.tgz", + "integrity": "sha512-qsdtZH+vMoCARQtyod4imc2nIJwg9Cc7lPRrw9CzF8ZKR0khdr8+2nX80PBhET3tcyTtJDxAffGh2rXH4tyU8A==", + "dev": true + }, + "tiny-emitter": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/tiny-emitter/-/tiny-emitter-2.1.0.tgz", + "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==" + }, + "tinycolor2": { + "version": "1.6.0", + "resolved": "https://registry.npmmirror.com/tinycolor2/-/tinycolor2-1.6.0.tgz", + "integrity": "sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==", + "dev": true + }, + "to-arraybuffer": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/to-arraybuffer/download/to-arraybuffer-1.0.1.tgz", + "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", + "dev": true + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/to-fast-properties/download/to-fast-properties-2.0.0.tgz?cache=0&sync_timestamp=1580550317222&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fto-fast-properties%2Fdownload%2Fto-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" + }, + "to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmmirror.com/to-object-path/download/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmmirror.com/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmmirror.com/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dev": true, + "requires": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true + }, + "toposort": { + "version": "1.0.7", + "resolved": "https://registry.npmmirror.com/toposort/-/toposort-1.0.7.tgz", + "integrity": "sha512-FclLrw8b9bMWf4QlCJuHBEVhSRsqDj6u3nIjAzPeJvgl//1hBlffdlk0MALceL14+koWEdU4ofRAXofbODxQzg==", + "dev": true + }, + "totalist": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/totalist/-/totalist-1.1.0.tgz", + "integrity": "sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g==", + "dev": true + }, + "tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmmirror.com/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dev": true, + "requires": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + } + }, + "trim-newlines": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/trim-newlines/-/trim-newlines-3.0.1.tgz", + "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", + "dev": true + }, + "trough": { + "version": "1.0.5", + "resolved": "https://registry.npmmirror.com/trough/-/trough-1.0.5.tgz", + "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==", + "dev": true + }, + "tryer": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/tryer/-/tryer-1.0.1.tgz", + "integrity": "sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==", + "dev": true + }, + "ts-loader": { + "version": "8.4.0", + "resolved": "https://registry.npmmirror.com/ts-loader/-/ts-loader-8.4.0.tgz", + "integrity": "sha512-6nFY3IZ2//mrPc+ImY3hNWx1vCHyEhl6V+wLmL4CZcm6g1CqX7UKrkc6y0i4FwcfOhxyMPCfaEvh20f4r9GNpw==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "enhanced-resolve": "^4.0.0", + "loader-utils": "^2.0.0", + "micromatch": "^4.0.0", + "semver": "^7.3.4" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "enhanced-resolve": { + "version": "4.5.0", + "resolved": "https://registry.npmmirror.com/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", + "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "memory-fs": "^0.5.0", + "tapable": "^1.0.0" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmmirror.com/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "dependencies": { + "json5": { + "version": "2.2.3", + "resolved": "https://registry.npmmirror.com/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true + } + } + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "memory-fs": { + "version": "0.5.0", + "resolved": "https://registry.npmmirror.com/memory-fs/-/memory-fs-0.5.0.tgz", + "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", + "dev": true, + "requires": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + } + }, + "semver": { + "version": "7.3.7", + "resolved": "https://registry.npmmirror.com/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "tapable": { + "version": "1.1.3", + "resolved": "https://registry.npmmirror.com/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", + "dev": true + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "ts-pnp": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/ts-pnp/-/ts-pnp-1.2.0.tgz", + "integrity": "sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw==", + "dev": true + }, + "tsconfig-paths": { + "version": "3.14.1", + "resolved": "https://registry.npmmirror.com/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz", + "integrity": "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==", + "dev": true, + "requires": { + "@types/json5": "^0.0.29", + "json5": "^1.0.1", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", + "dev": true + }, + "tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmmirror.com/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmmirror.com/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } + }, + "tty-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmmirror.com/tty-browserify/download/tty-browserify-0.0.0.tgz", + "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", + "dev": true + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmmirror.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "dev": true, + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmmirror.com/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", + "dev": true + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmmirror.com/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2" + } + }, + "type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmmirror.com/type-fest/download/type-fest-0.6.0.tgz?cache=0&sync_timestamp=1591686750124&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Ftype-fest%2Fdownload%2Ftype-fest-0.6.0.tgz", + "integrity": "sha1-jSojcNPfiG61yQraHFv2GIrPg4s=", + "dev": true + }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmmirror.com/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmmirror.com/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true + }, + "typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmmirror.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, + "requires": { + "is-typedarray": "^1.0.0" + } + }, + "typescript": { + "version": "4.7.3", + "resolved": "https://registry.npmmirror.com/typescript/-/typescript-4.7.3.tgz", + "integrity": "sha512-WOkT3XYvrpXx4vMMqlD+8R8R37fZkjyLGlxavMc4iB8lrl8L0DeTcHbYgw/v0N/z9wAFsgBhcsF0ruoySS22mA==", + "dev": true + }, + "uglify-js": { + "version": "3.4.10", + "resolved": "https://registry.npmmirror.com/uglify-js/-/uglify-js-3.4.10.tgz", + "integrity": "sha512-Y2VsbPVs0FIshJztycsO2SfPk7/KAF/T72qzv9u5EpQ4kB2hQoHlhNQTsNyy6ul7lQtqJN/AoWeS23OzEiEFxw==", + "dev": true, + "requires": { + "commander": "~2.19.0", + "source-map": "~0.6.1" + }, + "dependencies": { + "commander": { + "version": "2.19.0", + "resolved": "https://registry.npmmirror.com/commander/-/commander-2.19.0.tgz", + "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "requires": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + } + }, + "unescape": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/unescape/-/unescape-1.0.1.tgz", + "integrity": "sha512-O0+af1Gs50lyH1nUu3ZyYS1cRh01Q/kUKatTOkSs7jukXE6/NebucDVxyiDsA9AQ4JC1V1jUH9EO8JX2nMDgGQ==", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", + "dev": true + }, + "unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dev": true, + "requires": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + } + }, + "unicode-match-property-value-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", + "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", + "dev": true + }, + "unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "dev": true + }, + "unified": { + "version": "9.2.2", + "resolved": "https://registry.npmmirror.com/unified/-/unified-9.2.2.tgz", + "integrity": "sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ==", + "dev": true, + "requires": { + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^2.0.0", + "trough": "^1.0.0", + "vfile": "^4.0.0" + }, + "dependencies": { + "is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmmirror.com/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", + "dev": true + } + } + }, + "union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + } + }, + "uniq": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/uniq/download/uniq-1.0.1.tgz", + "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=", + "dev": true + }, + "uniqs": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/uniqs/-/uniqs-2.0.0.tgz", + "integrity": "sha512-mZdDpf3vBV5Efh29kMw5tXoup/buMgxLzOt/XKFKcVmi+15ManNQWr6HfZ2aiZTYlYixbdNJ0KFmIZIv52tHSQ==", + "dev": true + }, + "unique-filename": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/unique-filename/download/unique-filename-1.1.1.tgz", + "integrity": "sha1-HWl2k2mtoFgxA6HmrodoG1ZXMjA=", + "dev": true, + "requires": { + "unique-slug": "^2.0.0" + } + }, + "unique-slug": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/unique-slug/download/unique-slug-2.0.2.tgz", + "integrity": "sha1-uqvOkQg/xk6UWw861hPiZPfNTmw=", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4" + } + }, + "unist-util-find-all-after": { + "version": "3.0.2", + "resolved": "https://registry.npmmirror.com/unist-util-find-all-after/-/unist-util-find-all-after-3.0.2.tgz", + "integrity": "sha512-xaTC/AGZ0rIM2gM28YVRAFPIZpzbpDtU3dRmp7EXlNVA8ziQc4hY3H7BHXM1J49nEmiqc3svnqMReW+PGqbZKQ==", + "dev": true, + "requires": { + "unist-util-is": "^4.0.0" + } + }, + "unist-util-is": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/unist-util-is/-/unist-util-is-4.1.0.tgz", + "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==", + "dev": true + }, + "unist-util-stringify-position": { + "version": "2.0.3", + "resolved": "https://registry.npmmirror.com/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", + "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", + "dev": true, + "requires": { + "@types/unist": "^2.0.2" + } + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmmirror.com/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/unpipe/download/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "dev": true + }, + "unquote": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/unquote/-/unquote-1.1.1.tgz", + "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=" + }, + "unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/unset-value/download/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "dev": true, + "requires": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmmirror.com/has-value/download/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "dev": true, + "requires": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/isobject/download/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmmirror.com/has-values/download/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "dev": true + } + } + }, + "upath": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "dev": true + }, + "update-browserslist-db": { + "version": "1.0.10", + "resolved": "https://registry.npmmirror.com/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", + "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", + "dev": true, + "requires": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + } + }, + "upper-case": { + "version": "1.1.3", + "resolved": "https://registry.npmmirror.com/upper-case/-/upper-case-1.1.3.tgz", + "integrity": "sha512-WRbjgmYzgXkCV7zNVpy5YgrHgbBv126rMALQQMrmzOVC4GM2waQ9x7xtm8VU+1yF2kWyPzI9zbZ48n4vSxwfSA==", + "dev": true + }, + "uri-js": { + "version": "4.2.2", + "resolved": "https://registry.npmmirror.com/uri-js/download/uri-js-4.2.2.tgz", + "integrity": "sha1-lMVA4f93KVbiKZUHwBCupsiDjrA=", + "requires": { + "punycode": "^2.1.0" + } + }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmmirror.com/urix/download/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "dev": true + }, + "url": { + "version": "0.11.0", + "resolved": "https://registry.npmmirror.com/url/download/url-0.11.0.tgz", + "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "dev": true, + "requires": { + "punycode": "1.3.2", + "querystring": "0.2.0" + }, + "dependencies": { + "punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmmirror.com/punycode/download/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", + "dev": true + } + } + }, + "url-loader": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/url-loader/-/url-loader-2.3.0.tgz", + "integrity": "sha512-goSdg8VY+7nPZKUEChZSEtW5gjbS66USIGCeSJ1OVOJ7Yfuh/36YxCwMi5HVEJh6mqUYOoy3NJ0vlOMrWsSHog==", + "dev": true, + "requires": { + "loader-utils": "^1.2.3", + "mime": "^2.4.4", + "schema-utils": "^2.5.0" + } + }, + "url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmmirror.com/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "dev": true, + "requires": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "url-search-params-polyfill": { + "version": "8.1.1", + "resolved": "https://registry.npmmirror.com/url-search-params-polyfill/-/url-search-params-polyfill-8.1.1.tgz", + "integrity": "sha512-KmkCs6SjE6t4ihrfW9JelAPQIIIFbJweaaSLTh/4AO+c58JlDcb+GbdPt8yr5lRcFg4rPswRFRRhBGpWwh0K/Q==" + }, + "urllib": { + "version": "2.39.1", + "resolved": "https://registry.npmmirror.com/urllib/-/urllib-2.39.1.tgz", + "integrity": "sha512-c3sLtY8uhc/WoyJt/nNcEwO4fFC9sFYMQmU5NKoUz9OqUYrPSbYFPflocZCA5oCTavky9weK+YA2EHjsva9AwQ==", + "dev": true, + "requires": { + "any-promise": "^1.3.0", + "content-type": "^1.0.2", + "debug": "^2.6.9", + "default-user-agent": "^1.0.0", + "digest-header": "^0.0.1", + "ee-first": "~1.1.1", + "formstream": "^1.1.0", + "humanize-ms": "^1.2.0", + "iconv-lite": "^0.4.15", + "ip": "^1.1.5", + "proxy-agent": "^5.0.0", + "pump": "^3.0.0", + "qs": "^6.4.0", + "statuses": "^1.3.1", + "utility": "^1.16.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, + "use": { + "version": "3.1.1", + "resolved": "https://registry.npmmirror.com/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "dev": true + }, + "util": { + "version": "0.11.1", + "resolved": "https://registry.npmmirror.com/util/-/util-0.11.1.tgz", + "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", + "dev": true, + "requires": { + "inherits": "2.0.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmmirror.com/inherits/download/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + } + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/util-deprecate/download/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "util.promisify": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/util.promisify/-/util.promisify-1.0.1.tgz", + "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==", + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.2", + "has-symbols": "^1.0.1", + "object.getownpropertydescriptors": "^2.1.0" + } + }, + "utila": { + "version": "0.4.0", + "resolved": "https://registry.npmmirror.com/utila/download/utila-0.4.0.tgz", + "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=", + "dev": true + }, + "utility": { + "version": "1.17.0", + "resolved": "https://registry.npmmirror.com/utility/-/utility-1.17.0.tgz", + "integrity": "sha512-KdVkF9An/0239BJ4+dqOa7NPrPIOeQE9AGfx0XS16O9DBiHNHRJMoeU5nL6pRGAkgJOqdOu8R4gBRcXnAocJKw==", + "dev": true, + "requires": { + "copy-to": "^2.0.1", + "escape-html": "^1.0.3", + "mkdirp": "^0.5.1", + "mz": "^2.7.0", + "unescape": "^1.0.1" + } + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/utils-merge/download/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "dev": true + }, + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmmirror.com/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true + }, + "v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmmirror.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/vary/download/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "dev": true + }, + "vconsole": { + "version": "3.3.4", + "resolved": "https://registry.npmmirror.com/vconsole/download/vconsole-3.3.4.tgz", + "integrity": "sha1-p9rNiIez0+kC6NGEJc2lbDTnf1E=" + }, + "vendors": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/vendors/-/vendors-1.0.4.tgz", + "integrity": "sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==", + "dev": true + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmmirror.com/verror/-/verror-1.10.0.tgz", + "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "vfile": { + "version": "4.2.1", + "resolved": "https://registry.npmmirror.com/vfile/-/vfile-4.2.1.tgz", + "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", + "dev": true, + "requires": { + "@types/unist": "^2.0.0", + "is-buffer": "^2.0.0", + "unist-util-stringify-position": "^2.0.0", + "vfile-message": "^2.0.0" + }, + "dependencies": { + "is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmmirror.com/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", + "dev": true + } + } + }, + "vfile-message": { + "version": "2.0.4", + "resolved": "https://registry.npmmirror.com/vfile-message/-/vfile-message-2.0.4.tgz", + "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", + "dev": true, + "requires": { + "@types/unist": "^2.0.0", + "unist-util-stringify-position": "^2.0.0" + } + }, + "vm-browserify": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/vm-browserify/-/vm-browserify-1.1.2.tgz", + "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", + "dev": true + }, + "vm2": { + "version": "3.9.11", + "resolved": "https://registry.npmmirror.com/vm2/-/vm2-3.9.11.tgz", + "integrity": "sha512-PFG8iJRSjvvBdisowQ7iVF580DXb1uCIiGaXgm7tynMR1uTBlv7UJlB1zdv5KJ+Tmq1f0Upnj3fayoEOPpCBKg==", + "dev": true, + "requires": { + "acorn": "^8.7.0", + "acorn-walk": "^8.2.0" + } + }, + "vue": { + "version": "2.7.14", + "resolved": "https://registry.npmmirror.com/vue/-/vue-2.7.14.tgz", + "integrity": "sha512-b2qkFyOM0kwqWFuQmgd4o+uHGU7T+2z3T+WQp8UBjADfEv2n4FEMffzBmCKNP0IGzOEEfYjvtcC62xaSKeQDrQ==", + "requires": { + "@vue/compiler-sfc": "2.7.14", + "csstype": "^3.1.0" + } + }, + "vue-demi": { + "version": "0.14.0", + "resolved": "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.0.tgz", + "integrity": "sha512-gt58r2ogsNQeVoQ3EhoUAvUsH9xviydl0dWJj7dabBC/2L4uBId7ujtCwDRD0JhkGsV1i0CtfLAeyYKBht9oWg==" + }, + "vue-eslint-parser": { + "version": "9.1.0", + "resolved": "https://registry.npmmirror.com/vue-eslint-parser/-/vue-eslint-parser-9.1.0.tgz", + "integrity": "sha512-NGn/iQy8/Wb7RrRa4aRkokyCZfOUWk19OP5HP6JEozQFX5AoS/t+Z0ZN7FY4LlmWc4FNI922V7cvX28zctN8dQ==", + "dev": true, + "requires": { + "debug": "^4.3.4", + "eslint-scope": "^7.1.1", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.1", + "esquery": "^1.4.0", + "lodash": "^4.17.21", + "semver": "^7.3.6" + }, + "dependencies": { + "eslint-scope": { + "version": "7.1.1", + "resolved": "https://registry.npmmirror.com/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + } + }, + "eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmmirror.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "dev": true + }, + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmmirror.com/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "semver": { + "version": "7.3.8", + "resolved": "https://registry.npmmirror.com/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "vue-hot-reload-api": { + "version": "2.3.4", + "resolved": "https://registry.npmmirror.com/vue-hot-reload-api/-/vue-hot-reload-api-2.3.4.tgz", + "integrity": "sha512-BXq3jwIagosjgNVae6tkHzzIk6a8MHFtzAdwhnV5VlvPTFxDCvIttgSiHWjdGoTJvXtmRu5HacExfdarRcFhog==", + "dev": true + }, + "vue-loader": { + "version": "15.10.1", + "resolved": "https://registry.npmmirror.com/vue-loader/-/vue-loader-15.10.1.tgz", + "integrity": "sha512-SaPHK1A01VrNthlix6h1hq4uJu7S/z0kdLUb6klubo738NeQoLbS6V9/d8Pv19tU0XdQKju3D1HSKuI8wJ5wMA==", + "dev": true, + "requires": { + "@vue/component-compiler-utils": "^3.1.0", + "hash-sum": "^1.0.2", + "loader-utils": "^1.1.0", + "vue-hot-reload-api": "^2.3.0", + "vue-style-loader": "^4.1.0" + } + }, + "vue-style-loader": { + "version": "4.1.3", + "resolved": "https://registry.npmmirror.com/vue-style-loader/-/vue-style-loader-4.1.3.tgz", + "integrity": "sha512-sFuh0xfbtpRlKfm39ss/ikqs9AbKCoXZBpHeVZ8Tx650o0k0q/YCM7FRvigtxpACezfq6af+a7JeqVTWvncqDg==", + "dev": true, + "requires": { + "hash-sum": "^1.0.2", + "loader-utils": "^1.0.2" + } + }, + "vue-template-compiler": { + "version": "2.7.14", + "resolved": "https://registry.npmmirror.com/vue-template-compiler/-/vue-template-compiler-2.7.14.tgz", + "integrity": "sha512-zyA5Y3ArvVG0NacJDkkzJuPQDF8RFeRlzV2vLeSnhSpieO6LK2OVbdLPi5MPPs09Ii+gMO8nY4S3iKQxBxDmWQ==", + "dev": true, + "requires": { + "de-indent": "^1.0.2", + "he": "^1.2.0" + } + }, + "vue-template-es2015-compiler": { + "version": "1.9.1", + "resolved": "https://registry.npmmirror.com/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz", + "integrity": "sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw==", + "dev": true + }, + "vue-tsc": { + "version": "1.0.24", + "resolved": "https://registry.npmmirror.com/vue-tsc/-/vue-tsc-1.0.24.tgz", + "integrity": "sha512-mmU1s5SAqE1nByQAiQnao9oU4vX+mSdsgI8H57SfKH6UVzq/jP9+Dbi2GaV+0b4Cn361d2ln8m6xeU60ApiEXg==", + "dev": true, + "requires": { + "@volar/vue-language-core": "1.0.24", + "@volar/vue-typescript": "1.0.24" + } + }, + "vue-types": { + "version": "4.2.1", + "resolved": "https://registry.npmmirror.com/vue-types/-/vue-types-4.2.1.tgz", + "integrity": "sha512-DNQZmJuOvovLUIp0BENRkdnZHbI0V4e2mNvjAZOAXKD56YGvRchtUYOXA/XqTxdv7Ng5SJLZqRKRpAhm5NLaPQ==", + "requires": { + "is-plain-object": "5.0.0" + }, + "dependencies": { + "is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==" + } + } + }, + "watchpack": { + "version": "1.7.5", + "resolved": "https://registry.npmmirror.com/watchpack/-/watchpack-1.7.5.tgz", + "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==", + "dev": true, + "requires": { + "chokidar": "^3.4.1", + "graceful-fs": "^4.1.2", + "neo-async": "^2.5.0", + "watchpack-chokidar2": "^2.0.1" + } + }, + "watchpack-chokidar2": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz", + "integrity": "sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==", + "dev": true, + "optional": true, + "requires": { + "chokidar": "^2.1.8" + }, + "dependencies": { + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "optional": true, + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + }, + "dependencies": { + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/normalize-path/download/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "optional": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } + } + }, + "binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "dev": true, + "optional": true + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmmirror.com/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "optional": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "optional": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmmirror.com/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "dev": true, + "optional": true, + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "optional": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "optional": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmmirror.com/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "dev": true, + "optional": true, + "requires": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + } + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/is-binary-path/download/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "optional": true, + "requires": { + "binary-extensions": "^1.0.0" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "optional": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "optional": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmmirror.com/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "optional": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmmirror.com/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "dev": true, + "optional": true, + "requires": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "optional": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + } + } + }, + "wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmmirror.com/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "dev": true, + "requires": { + "minimalistic-assert": "^1.0.0" + } + }, + "wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "dev": true, + "requires": { + "defaults": "^1.0.3" + } + }, + "webpack": { + "version": "4.46.0", + "resolved": "https://registry.npmmirror.com/webpack/-/webpack-4.46.0.tgz", + "integrity": "sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/wasm-edit": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", + "acorn": "^6.4.1", + "ajv": "^6.10.2", + "ajv-keywords": "^3.4.1", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^4.5.0", + "eslint-scope": "^4.0.3", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^2.4.0", + "loader-utils": "^1.2.3", + "memory-fs": "^0.4.1", + "micromatch": "^3.1.10", + "mkdirp": "^0.5.3", + "neo-async": "^2.6.1", + "node-libs-browser": "^2.2.1", + "schema-utils": "^1.0.0", + "tapable": "^1.1.3", + "terser-webpack-plugin": "^1.4.3", + "watchpack": "^1.7.4", + "webpack-sources": "^1.4.1" + }, + "dependencies": { + "acorn": { + "version": "6.4.2", + "resolved": "https://registry.npmmirror.com/acorn/-/acorn-6.4.2.tgz", + "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", + "dev": true + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmmirror.com/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "enhanced-resolve": { + "version": "4.5.0", + "resolved": "https://registry.npmmirror.com/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", + "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "memory-fs": "^0.5.0", + "tapable": "^1.0.0" + }, + "dependencies": { + "memory-fs": { + "version": "0.5.0", + "resolved": "https://registry.npmmirror.com/memory-fs/-/memory-fs-0.5.0.tgz", + "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", + "dev": true, + "requires": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + } + } + } + }, + "eslint-scope": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/eslint-scope/-/eslint-scope-4.0.3.tgz", + "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", + "dev": true, + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "find-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "requires": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + } + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "requires": { + "locate-path": "^3.0.0" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + } + }, + "memory-fs": { + "version": "0.4.1", + "resolved": "https://registry.npmmirror.com/memory-fs/-/memory-fs-0.4.1.tgz", + "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", + "dev": true, + "requires": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + } + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmmirror.com/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "requires": { + "p-limit": "^2.0.0" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" + }, + "pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "requires": { + "find-up": "^3.0.0" + } + }, + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "ssri": { + "version": "6.0.2", + "resolved": "https://registry.npmmirror.com/ssri/-/ssri-6.0.2.tgz", + "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==", + "requires": { + "figgy-pudding": "^3.5.1" + } + }, + "tapable": { + "version": "1.1.3", + "resolved": "https://registry.npmmirror.com/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", + "dev": true + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + } + } + }, + "webpack-bundle-analyzer": { + "version": "4.8.0", + "resolved": "https://registry.npmmirror.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.8.0.tgz", + "integrity": "sha512-ZzoSBePshOKhr+hd8u6oCkZVwpVaXgpw23ScGLFpR6SjYI7+7iIWYarjN6OEYOfRt8o7ZyZZQk0DuMizJ+LEIg==", + "dev": true, + "requires": { + "@discoveryjs/json-ext": "0.5.7", + "acorn": "^8.0.4", + "acorn-walk": "^8.0.0", + "chalk": "^4.1.0", + "commander": "^7.2.0", + "gzip-size": "^6.0.0", + "lodash": "^4.17.20", + "opener": "^1.5.2", + "sirv": "^1.0.7", + "ws": "^7.3.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "commander": { + "version": "7.2.0", + "resolved": "https://registry.npmmirror.com/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true + }, + "gzip-size": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/gzip-size/-/gzip-size-6.0.0.tgz", + "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", + "dev": true, + "requires": { + "duplexer": "^0.1.2" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "ws": { + "version": "7.5.9", + "resolved": "https://registry.npmmirror.com/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "dev": true + } + } + }, + "webpack-chain": { + "version": "6.5.1", + "resolved": "https://registry.npmmirror.com/webpack-chain/-/webpack-chain-6.5.1.tgz", + "integrity": "sha512-7doO/SRtLu8q5WM0s7vPKPWX580qhi0/yBHkOxNkv50f6qB76Zy9o2wRTrrPULqYTvQlVHuvbA8v+G5ayuUDsA==", + "dev": true, + "requires": { + "deepmerge": "^1.5.2", + "javascript-stringify": "^2.0.1" + }, + "dependencies": { + "deepmerge": { + "version": "1.5.2", + "resolved": "https://registry.npmmirror.com/deepmerge/-/deepmerge-1.5.2.tgz", + "integrity": "sha512-95k0GDqvBjZavkuvzx/YqVLv/6YYa17fz6ILMSf7neqQITCPbnfEnQvEgMPNjH4kgobe7+WIL0yJEHku+H3qtQ==", + "dev": true + } + } + }, + "webpack-dev-middleware": { + "version": "3.7.3", + "resolved": "https://registry.npmmirror.com/webpack-dev-middleware/-/webpack-dev-middleware-3.7.3.tgz", + "integrity": "sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ==", + "dev": true, + "requires": { + "memory-fs": "^0.4.1", + "mime": "^2.4.4", + "mkdirp": "^0.5.1", + "range-parser": "^1.2.1", + "webpack-log": "^2.0.0" + }, + "dependencies": { + "memory-fs": { + "version": "0.4.1", + "resolved": "https://registry.npmmirror.com/memory-fs/-/memory-fs-0.4.1.tgz", + "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", + "dev": true, + "requires": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + } + } + } + }, + "webpack-dev-server": { + "version": "3.11.3", + "resolved": "https://registry.npmmirror.com/webpack-dev-server/-/webpack-dev-server-3.11.3.tgz", + "integrity": "sha512-3x31rjbEQWKMNzacUZRE6wXvUFuGpH7vr0lIEbYpMAG9BOxi0928QU1BBswOAP3kg3H1O4hiS+sq4YyAn6ANnA==", + "dev": true, + "requires": { + "ansi-html-community": "0.0.8", + "bonjour": "^3.5.0", + "chokidar": "^2.1.8", + "compression": "^1.7.4", + "connect-history-api-fallback": "^1.6.0", + "debug": "^4.1.1", + "del": "^4.1.1", + "express": "^4.17.1", + "html-entities": "^1.3.1", + "http-proxy-middleware": "0.19.1", + "import-local": "^2.0.0", + "internal-ip": "^4.3.0", + "ip": "^1.1.5", + "is-absolute-url": "^3.0.3", + "killable": "^1.0.1", + "loglevel": "^1.6.8", + "opn": "^5.5.0", + "p-retry": "^3.0.1", + "portfinder": "^1.0.26", + "schema-utils": "^1.0.0", + "selfsigned": "^1.10.8", + "semver": "^6.3.0", + "serve-index": "^1.9.1", + "sockjs": "^0.3.21", + "sockjs-client": "^1.5.0", + "spdy": "^4.0.2", + "strip-ansi": "^3.0.1", + "supports-color": "^6.1.0", + "url": "^0.11.0", + "webpack-dev-middleware": "^3.7.2", + "webpack-log": "^2.0.0", + "ws": "^6.2.1", + "yargs": "^13.3.2" + }, + "dependencies": { + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + }, + "dependencies": { + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/normalize-path/download/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } + } + }, + "binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "dev": true + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmmirror.com/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmmirror.com/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "dev": true, + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + } + }, + "cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "requires": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "dev": true + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "requires": { + "locate-path": "^3.0.0" + } + }, + "fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmmirror.com/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "dev": true, + "optional": true, + "requires": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + } + }, + "is-absolute-url": { + "version": "3.0.3", + "resolved": "https://registry.npmmirror.com/is-absolute-url/-/is-absolute-url-3.0.3.tgz", + "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==", + "dev": true + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/is-binary-path/download/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "requires": { + "binary-extensions": "^1.0.0" + } + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/is-fullwidth-code-point/download/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmmirror.com/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "requires": { + "p-limit": "^2.0.0" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" + }, + "pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "requires": { + "find-up": "^3.0.0" + } + }, + "readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmmirror.com/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + } + }, + "resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=" + }, + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmmirror.com/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "dev": true + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/strip-ansi/download/strip-ansi-3.0.1.tgz?cache=0&sync_timestamp=1573280518303&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + }, + "wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "dev": true + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "yargs": { + "version": "13.3.2", + "resolved": "https://registry.npmmirror.com/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "dev": true, + "requires": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" + } + }, + "yargs-parser": { + "version": "13.1.2", + "resolved": "https://registry.npmmirror.com/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, + "webpack-log": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/webpack-log/-/webpack-log-2.0.0.tgz", + "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==", + "dev": true, + "requires": { + "ansi-colors": "^3.0.0", + "uuid": "^3.3.2" + }, + "dependencies": { + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmmirror.com/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "dev": true + } + } + }, + "webpack-merge": { + "version": "4.2.2", + "resolved": "https://registry.npmmirror.com/webpack-merge/-/webpack-merge-4.2.2.tgz", + "integrity": "sha512-TUE1UGoTX2Cd42j3krGYqObZbOD+xF7u28WB7tfUordytSjbWTIjK/8V0amkBfTYN4/pB/GIDlJZZ657BGG19g==", + "dev": true, + "requires": { + "lodash": "^4.17.15" + } + }, + "webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmmirror.com/webpack-sources/download/webpack-sources-1.4.3.tgz", + "integrity": "sha1-7t2OwLko+/HL/plOItLYkPMwqTM=", + "dev": true, + "requires": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/download/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "dev": true + } + } + }, + "websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmmirror.com/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "dev": true, + "requires": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + } + }, + "websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmmirror.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "dev": true + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmmirror.com/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "requires": { + "isexe": "^2.0.0" + } + }, + "which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "requires": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/which-module/download/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "win-release": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/win-release/-/win-release-1.1.1.tgz", + "integrity": "sha1-X6VeAr58qTTt/BJmVjLoSbcuUgk=", + "dev": true, + "requires": { + "semver": "^5.0.1" + } + }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmmirror.com/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true + }, + "worker-farm": { + "version": "1.7.0", + "resolved": "https://registry.npmmirror.com/worker-farm/-/worker-farm-1.7.0.tgz", + "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==", + "dev": true, + "requires": { + "errno": "~0.1.7" + } + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + } + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/wrappy/download/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmmirror.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "ws": { + "version": "6.2.2", + "resolved": "https://registry.npmmirror.com/ws/-/ws-6.2.2.tgz", + "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==", + "dev": true, + "requires": { + "async-limiter": "~1.0.0" + } + }, + "xml-name-validator": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/xml-name-validator/-/xml-name-validator-4.0.0.tgz", + "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", + "dev": true + }, + "xml2js": { + "version": "0.4.23", + "resolved": "https://registry.npmmirror.com/xml2js/-/xml2js-0.4.23.tgz", + "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", + "dev": true, + "requires": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + } + }, + "xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmmirror.com/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", + "dev": true + }, + "xregexp": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/xregexp/-/xregexp-2.0.0.tgz", + "integrity": "sha1-UqY+VsoLhKfzpfPWGHLxJq16WUM=", + "dev": true + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/xtend/download/xtend-4.0.2.tgz", + "integrity": "sha1-u3J3n1+kZRhrH0OPZ0+jR/2121Q=", + "dev": true + }, + "y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmmirror.com/yallist/download/yallist-3.1.1.tgz", + "integrity": "sha1-27fa+b/YusmrRev2ArjLrQ1dCP0=", + "dev": true + }, + "yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmmirror.com/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true + }, + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmmirror.com/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "dependencies": { + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmmirror.com/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmmirror.com/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true + } + } + }, + "yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmmirror.com/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true + }, + "zwitch": { + "version": "1.0.5", + "resolved": "https://registry.npmmirror.com/zwitch/-/zwitch-1.0.5.tgz", + "integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==", + "dev": true + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..18f3626 --- /dev/null +++ b/package.json @@ -0,0 +1,103 @@ +{ + "name": "polyv-web-live-watch-sdk", + "version": "0.1.0", + "private": true, + "scripts": { + "dev": "vue-cli-service serve", + "build": "cross-env NODE_ENV=production vue-cli-service build", + "build-static": "cross-env VUE_APP_BUILD_MODE=STATIC npm run build", + "generate-icon": "polyv-icon generate", + "build-analyzer": "cross-env USE_ANALYZER=y npm run build", + "check": "vue-tsc --noEmit --skipLibCheck", + "lint:es": "eslint . --ext .js,.ts,.vue", + "lint:style": "stylelint **/*.{css,scss,sass,vue}", + "lint": "npm run lint:es && npm run lint:style", + "lint-fix:es": "eslint . --ext .js,.ts,.vue --fix", + "lint-fix:style": "stylelint **/*.{css,scss,sass,vue} --fix", + "lint-fix": "npm run lint-fix:es && npm run lint-fix:style", + "precommit": "lint-staged", + "prepare": "husky install .husky" + }, + "lint-staged": { + "*.{js,ts,vue}": [ + "cross-env NODE_ENV=production eslint" + ], + "*.{css,sass,scss,vue}": [ + "stylelint" + ] + }, + "dependencies": { + "@just4/dom": "^0.3.0-beta.2", + "@just4/load-script": "^1.0.0", + "@just4/querystring": "^1.0.0", + "@just4/storage": "^1.0.0", + "@just4/ua-info": "^1.0.0", + "@just4/virtual-list": "^0.8.0-beta.2", + "@polyv/emotion-sdk": "^2.3.0", + "@polyv/icons-vue": "^1.2.0", + "@polyv/live-watch-sdk": "0.1.0", + "@polyv/polyv-ui": "^2.24.0", + "@polyv/utils": "^2.0.0-beta.5", + "@polyv/web-view-bridge": "0.1.0-webview-app.8", + "@popperjs/core": "^2.11.4", + "alloyfinger": "^0.1.16", + "async-validator": "^4.2.5", + "clipboard": "^2.0.10", + "js-base64": "^3.7.2", + "lodash-es": "^4.17.21", + "mitt": "^3.0.0", + "pinia": "2.0.34", + "svgaplayerweb": "^2.3.1", + "vconsole": "^3.3.4", + "vue": "2.7.14", + "vue-types": "^4.2.1" + }, + "devDependencies": { + "@babel/core": "^7.20.5", + "@babel/plugin-syntax-jsx": "^7.18.6", + "@babel/preset-env": "^7.20.2", + "@babel/preset-typescript": "^7.18.6", + "@polyv/eslint-config": "^0.4.0-beta.1", + "@polyv/icons-cli": "^1.2.0", + "@types/lodash-es": "^4.17.6", + "@vue/cli-plugin-babel": "^4.5.18", + "@vue/cli-service": "^4.5.18", + "autoprefixer": "^8.0.0", + "babel-loader": "^8.2.2", + "babel-plugin-import": "^1.13.3", + "babel-plugin-transform-remove-console": "^6.9.4", + "core-js": "^3.26.1", + "cross-env": "^7.0.3", + "eslint": "^8.17.0", + "eslint-config-prettier": "^8.5.0", + "eslint-plugin-prettier": "^4.2.1", + "eslint-webpack-plugin": "^2.7.0", + "fork-ts-checker-webpack-plugin": "^6.5.2", + "html-webpack-tags-plugin": "^2.0.17", + "husky": "^8.0.0", + "lint-staged": "^13.0.3", + "prettier": "^2.7.1", + "sass": "^1.33.0", + "sass-loader": "^10.2.0", + "sass-resources-loader": "^2.2.5", + "sockjs-client": "1.5.1", + "speed-measure-webpack-plugin": "^1.5.0", + "style-loader": "^2.0.0", + "stylelint": "^13.13.1", + "stylelint-config-prettier": "^9.0.3", + "stylelint-config-recess-order": "^3.0.0", + "stylelint-config-recommended": "^5.0.0", + "stylelint-config-recommended-scss": "^4.2.0", + "stylelint-scss": "^3.19.0", + "stylelint-webpack-plugin": "^2.1.1", + "ts-loader": "^8.4.0", + "typescript": "^4.7.3", + "vue-loader": "15.10.1", + "vue-style-loader": "^4.1.3", + "vue-tsc": "1.0.24", + "webpack-bundle-analyzer": "^4.7.0" + }, + "engines": { + "node": "^14.15.4 || >=16.0.0" + } +} diff --git a/polyv-icon.config.js b/polyv-icon.config.js new file mode 100644 index 0000000..f0a9d3f --- /dev/null +++ b/polyv-icon.config.js @@ -0,0 +1,27 @@ +/** + * 文档地址:https://npm-registry.polyv.net/-/web/detail/@polyv/icons-cli + */ + +/** @type {import('@polyv/icons-cli').IconLibraryCliConfig[]} */ +module.exports = [ + { + resourcesDir: './icon-svgs/pc', + outDir: './src/components/component-icons/pc', + libraryType: 'vue', + iconMap: './src/components/component-icons/pc/map.ts', + convertColorMode: 'all', + mapExportPrefix: 'PcIcon', + demoHtml: './icon-svgs/demo/icon-demo-pc.html', + libraryName: 'PC 端观看页图标', + }, + { + resourcesDir: './icon-svgs/mobile', + outDir: './src/components/component-icons/mobile', + libraryType: 'vue', + iconMap: './src/components/component-icons/mobile/map.ts', + convertColorMode: 'all', + mapExportPrefix: 'MobileIcon', + demoHtml: './icon-svgs/demo/icon-demo-mobile.html', + libraryName: '移动端观看页图标', + }, +]; diff --git a/postcss.config.js b/postcss.config.js new file mode 100644 index 0000000..a8b929a --- /dev/null +++ b/postcss.config.js @@ -0,0 +1,7 @@ +/* eslint-env node */ + +module.exports = { + plugins: { + autoprefixer: {}, + }, +}; diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..df36fcfb72584e00488330b560ebcf34a41c64c2 GIT binary patch literal 4286 zcmds*O-Phc6o&64GDVCEQHxsW(p4>LW*W<827=Unuo8sGpRux(DN@jWP-e29Wl%wj zY84_aq9}^Am9-cWTD5GGEo#+5Fi2wX_P*bo+xO!)p*7B;iKlbFd(U~_d(U?#hLj56 zPhFkj-|A6~Qk#@g^#D^U0XT1cu=c-vu1+SElX9NR;kzAUV(q0|dl0|%h|dI$%VICy zJnu2^L*Te9JrJMGh%-P79CL0}dq92RGU6gI{v2~|)p}sG5x0U*z<8U;Ij*hB9z?ei z@g6Xq-pDoPl=MANPiR7%172VA%r)kevtV-_5H*QJKFmd;8yA$98zCxBZYXTNZ#QFk2(TX0;Y2dt&WitL#$96|gJY=3xX zpCoi|YNzgO3R`f@IiEeSmKrPSf#h#Qd<$%Ej^RIeeYfsxhPMOG`S`Pz8q``=511zm zAm)MX5AV^5xIWPyEu7u>qYs?pn$I4nL9J!=K=SGlKLXpE<5x+2cDTXq?brj?n6sp= zphe9;_JHf40^9~}9i08r{XM$7HB!`{Ys~TK0kx<}ZQng`UPvH*11|q7&l9?@FQz;8 zx!=3<4seY*%=OlbCbcae?5^V_}*K>Uo6ZWV8mTyE^B=DKy7-sdLYkR5Z?paTgK-zyIkKjIcpyO z{+uIt&YSa_$QnN_@t~L014dyK(fOOo+W*MIxbA6Ndgr=Y!f#Tokqv}n<7-9qfHkc3 z=>a|HWqcX8fzQCT=dqVbogRq!-S>H%yA{1w#2Pn;=e>JiEj7Hl;zdt-2f+j2%DeVD zsW0Ab)ZK@0cIW%W7z}H{&~yGhn~D;aiP4=;m-HCo`BEI+Kd6 z={Xwx{TKxD#iCLfl2vQGDitKtN>z|-AdCN|$jTFDg0m3O`WLD4_s#$S literal 0 HcmV?d00001 diff --git a/public/index.html b/public/index.html new file mode 100644 index 0000000..6be8f7d --- /dev/null +++ b/public/index.html @@ -0,0 +1,16 @@ + + + + + + + + + + +
+ + + diff --git a/src/app/_hooks/use-global-events-effect.ts b/src/app/_hooks/use-global-events-effect.ts new file mode 100644 index 0000000..4e75f3a --- /dev/null +++ b/src/app/_hooks/use-global-events-effect.ts @@ -0,0 +1,35 @@ +import { useScreenOrientHook } from '@/hooks/core/use-screen-orient'; +import { useLayoutStore } from '@/store/use-layout-store'; +import { usePageStore } from '@/store/use-page-store'; +import { onMounted } from 'vue'; + +/** + * @hook 监听全局事件的副作用处理 + */ +export function useGlobalEventsEffect() { + const layoutStore = useLayoutStore(); + const pageStore = usePageStore(); + + // 处理屏幕旋转 + useScreenOrientHook({ + autoListenCb: screenOrientationMode => { + layoutStore.$patch({ + screenOrientationMode, + }); + }, + }); + + onMounted(() => { + // 处理页面显隐 + document.addEventListener('visibilitychange', () => { + pageStore.$patch({ + visibilityState: document.visibilityState === 'visible', + }); + }); + + // 禁止 safari 浏览器双击放大缩小效果 + document.addEventListener('gesturestart', (event: Event) => { + event.preventDefault(); + }); + }); +} diff --git a/src/app/_hooks/use-global-style.ts b/src/app/_hooks/use-global-style.ts new file mode 100644 index 0000000..fc9e987 --- /dev/null +++ b/src/app/_hooks/use-global-style.ts @@ -0,0 +1,106 @@ +/** + * @file 全局样式及页面元素处理 + */ +import { useChannelInfoStore } from '@/store/use-channel-info-store'; +import { useChannelStore } from '@/store/use-channel-store'; +import { $ } from '@just4/dom'; +import { watchEffect } from 'vue'; +import { DEFAULT_BROWSER_ICON } from '@/assets/constants/defaults'; +import { isIOS, isMobile } from '@/assets/utils/browser'; + +/** + * @hook 全局样式 hook + */ +export const useGlobalStyle = () => { + /** + * 设置全局的 css 样式逻辑 + */ + function setupGlobalStyle(): void { + // 针对 ios 设备添加文档的 css 标识 + const iosPageClass = 'g-page--ios'; + if (isIOS) { + $(document.documentElement).addClass(iosPageClass); + $(document.body).addClass(iosPageClass); + } + } + + /** + * 移除骨架屏节点 + */ + function removeSkeleton(): void { + if (isMobile) { + const skeleton = document.querySelector('#skeleton'); + skeleton?.parentNode?.removeChild(skeleton); + } + } + + return { + setupGlobalStyle, + removeSkeleton, + }; +}; + +/** + * 浏览器标签页标题 hook + */ +export const useBrowserTitle = () => { + const channelInfoStore = useChannelInfoStore(); + + /** + * 设置浏览器标签页标题 + */ + function setBrowserTitle(): void { + const channelTitle = channelInfoStore.channelTitle; + if (channelTitle) { + window.document.title = channelTitle; + } + } + + watchEffect(setBrowserTitle); + + return { + setBrowserTitle, + }; +}; + +/** + * 浏览器标签页图标 hook + */ +export const useBrowserIcon = () => { + const channelStore = useChannelStore(); + + /** + * 设置图标元素 + * @param href 链接 + */ + function setFavIconElem(href: string): void { + let favIconNode = document.querySelector('link[rel*=icon]'); + if (!favIconNode) { + favIconNode = document.createElement('link'); + window.document.head.appendChild(favIconNode); + } + favIconNode.rel = 'shortcut icon'; + favIconNode.type = 'image/x-icon'; + favIconNode.href = href; + } + + function setBrowserIcon(): void { + const channelDetail = channelStore.channelDetail; + if (!channelDetail) { + return; + } + + let icon = DEFAULT_BROWSER_ICON; + if (channelDetail.channelInfo.customIcon) { + icon = channelDetail.channelInfo.customIcon; + } + + setFavIconElem(icon); + } + + watchEffect(setBrowserIcon); + + return { + setBrowserIcon, + }; +}; diff --git a/src/app/_hooks/use-weixin-setup.ts b/src/app/_hooks/use-weixin-setup.ts new file mode 100644 index 0000000..9056321 --- /dev/null +++ b/src/app/_hooks/use-weixin-setup.ts @@ -0,0 +1,72 @@ +import { + useWeixinAuthorize, + useWorkWeixinAuthorize, +} from '@/hooks/platform/use-weixin/use-weixin-authorize'; +import { useWeixinSdk } from '@/hooks/platform/use-weixin/use-weixin-sdk'; +import { useWeixinShare } from '@/hooks/platform/use-weixin/use-weixin-share'; +import { useAuthStore } from '@/store/use-auth-store'; +import { useWeixinStore } from '@/store/use-weixin-store'; +import { unref } from 'vue'; +import { AuthType } from '@polyv/live-watch-sdk'; +import { useViewerStore } from '@/store/use-viewer-store'; + +/** + * @hook 处理微信流程 + * @returns 返回 true 则表示中断页面渲染,需要进行微信授权 + */ +export const useWeixinSetup = async () => { + const weixinStore = useWeixinStore(); + const viewerStore = useViewerStore(); + const authStore = useAuthStore(); + + /** + * 是否需要微信授权 + */ + function needWeixinAuthorized() { + /** + * 如果是付费观看进来的观众且没有进行非静默授权的,都要进行微信授权 + * 如:从非微信浏览器付费进入,再从微信端打开观看页 + */ + if (viewerStore.authType === AuthType.Pay && !weixinStore.weixinWatchAuthorized) { + return true; + } + + return !weixinStore.weixinAuthorized; + } + + /** + * 是否使用静默授权 + */ + function toSnsApiBase() { + // 存在付费观看的观看条件则不使用静默授权 + if (authStore.hasAuth(AuthType.Pay)) { + return false; + } + + return true; + } + + // 处理微信授权 + const { canWeixinAuthorize, redirectWeixinAuthorize } = useWeixinAuthorize(); + if (unref(canWeixinAuthorize) && needWeixinAuthorized()) { + await redirectWeixinAuthorize({ + snsApiBase: toSnsApiBase(), + }); + return true; + } + + // 处理企业微信授权 + const { canWorkWeixinAuthorize, redirectWorkWeixinAuthorize } = useWorkWeixinAuthorize(); + if (unref(canWorkWeixinAuthorize) && !weixinStore.workWeixinAuthorized) { + await redirectWorkWeixinAuthorize(); + return true; + } + + // 处理微信 js-sdk + const { getWeixinSdk } = useWeixinSdk(); + const { configureWeixinShare } = useWeixinShare(); + if (unref(canWeixinAuthorize) || unref(canWorkWeixinAuthorize)) { + await getWeixinSdk(); + await configureWeixinShare(); + } +}; diff --git a/src/app/app-events/events/chat.ts b/src/app/app-events/events/chat.ts new file mode 100644 index 0000000..d384322 --- /dev/null +++ b/src/app/app-events/events/chat.ts @@ -0,0 +1,40 @@ +/** + * @file 组件通信-聊天室消息控制事件 + */ + +export const chatEvents = { + /** 重建聊天列表 */ + ResetUpChatMsgList: 'ResetUpChatMsgList', + /** + * 滚动到最新的消息 + */ + ScrollToNew: 'ScrollToNew', + /** + * 发送消息到聊天室 + * @param {string} content 消息文本 + */ + SendMessageToChat: 'SendMessageToChat', + /** + * 打开设置昵称 + * @param {boolean} visible 显示状态 + */ + OpenSetNick: 'OpenSetNick', + /** + * 聊天消息更新 + * @param {object} msgResult 消息结果 + */ + MsgResultUpdate: 'MsgResultUpdate', + /** + * 将聊天室输入框聚焦 + */ + FocusToChatInput: 'FocusToChatInput', + /** + * 显示完整消息 + * @param {string} content 完整的消息内容 + */ + ShowFullMessage: 'ShowFullMessage', + /** + * 触发发送图片 + */ + ToSendImage: 'ToSendImage', +}; diff --git a/src/app/app-events/events/connectMic.ts b/src/app/app-events/events/connectMic.ts new file mode 100644 index 0000000..488fba5 --- /dev/null +++ b/src/app/app-events/events/connectMic.ts @@ -0,0 +1,34 @@ +/** + * @file 连麦相关全局事件 + */ +export const connectMicEvents = { + /** + * 重新初始化连麦 + */ + ResetUpConnectMic: 'ResetUpConnectMic', + + /** + * 触发打开设备设置 + */ + TriggerOpenDeviceSetting: 'TriggerOpenDeviceSetting', + + /** + * 触发申请连麦 + */ + TriggerApplyConnectMic: 'TriggerApplyConnectMic', + + /** + * 触发取消申请连麦 + */ + TriggerCancelApplyConnectMic: 'TriggerCancelApplyConnectMic', + + /** + * 触发下麦 + */ + TriggerEndConnectMic: 'TriggerEndConnectMic', + + /** + * 触发下麦二次确认 + */ + TriggerEndConnectConfirm: 'TriggerEndConnectConfirm', +}; diff --git a/src/app/app-events/events/doc.ts b/src/app/app-events/events/doc.ts new file mode 100644 index 0000000..0b5b4ee --- /dev/null +++ b/src/app/app-events/events/doc.ts @@ -0,0 +1,7 @@ +/** + * @file 白板相关全局事件 + */ +export const docEvents = { + /** 重新创建文档 */ + ResetUpDoc: 'ResetUpDoc', +}; diff --git a/src/app/app-events/events/donate.ts b/src/app/app-events/events/donate.ts new file mode 100644 index 0000000..7a7151b --- /dev/null +++ b/src/app/app-events/events/donate.ts @@ -0,0 +1,8 @@ +/** + * @file 组件通信-打赏事件 + */ + +export const donateEvents = { + /** 显示打赏弹层(竖屏) */ + OpenDonatePopup: 'OpenDonatePopup', +}; diff --git a/src/app/app-events/events/finance.ts b/src/app/app-events/events/finance.ts new file mode 100644 index 0000000..07bd19b --- /dev/null +++ b/src/app/app-events/events/finance.ts @@ -0,0 +1,13 @@ +/** + * @file 金融相关全局事件 + */ +export const financeEvents = { + /** 风险测评-展示主要弹窗 */ + RiskEvaluationMainDialogShow: 'risk-evaluation-main-dialog-show', + /** 风险测评-关闭主要弹窗 */ + RiskEvaluationMainDialogHidden: 'risk-evaluation-main-dialog-hidden', + /** 风险测评-挂件倒计时缓存清除 */ + RiskEvaluationPendantTimeoutCacheClear: 'risk-evaluation-pendant-timeout-cache-clear', + /** 风险测评-展示跳转弹窗 */ + RiskEvaluationRedirectDialogShow: 'risk-evaluation-redirect-dialog-show', +}; diff --git a/src/app/app-events/events/global.ts b/src/app/app-events/events/global.ts new file mode 100644 index 0000000..ed44d38 --- /dev/null +++ b/src/app/app-events/events/global.ts @@ -0,0 +1,25 @@ +export const globalEvents = { + /** + * 打开多语言切换 + */ + OpenLanguageSwitch: 'OpenLanguageSwitch', + /** + * PC 端侧边菜单栏被切换 + * @param {string} name 菜单栏名 + */ + PcAsideMenuSwitch: 'PcAsideMenuSwitch', + /** + * 移动端底部菜单栏切换 + * @param {string} name 菜单栏名 + */ + MobileBottomMenuSwitch: 'MobileBottomMenuSwitch', + /** + * 消息输入框聚焦 + */ + MsgInputFocus: 'MsgInputFocus', + /** + * 打开关注弹层 + * @param {boolean} visible 是否显示 + */ + OpenFollowLayer: 'OpenFollowLayer', +}; diff --git a/src/app/app-events/events/index.ts b/src/app/app-events/events/index.ts new file mode 100644 index 0000000..71796f7 --- /dev/null +++ b/src/app/app-events/events/index.ts @@ -0,0 +1,48 @@ +import { docEvents } from './doc'; +import { playerEvents } from './player'; +import { globalEvents } from './global'; +import { chatEvents } from './chat'; +import { donateEvents } from './donate'; +import { interactionEvents } from './interaction'; +import { inviteEvents } from './invite'; +import { microActivityEvents } from './microActivity'; +import { financeEvents } from './finance'; +import { connectMicEvents } from './connectMic'; +import { portraitEvents } from './portrait'; +import { withdrawEvents } from './withdraw'; + +const modules = { + doc: docEvents, + player: playerEvents, + global: globalEvents, + chat: chatEvents, + donate: donateEvents, + interaction: interactionEvents, + invite: inviteEvents, + withdraw: withdrawEvents, + portrait: portraitEvents, + microActivity: microActivityEvents, + finance: financeEvents, + connectMic: connectMicEvents, +}; + +type EventModules = typeof modules; + +/** + * 给模块事件加上模块名限定,如 chat 模块 { ALTER_MSG: 'ALTER_MSG' } -> { ALTER_MSG: 'chat.ALTER_MSG' } + */ +function addModuleName(moduleName: string, events: UniversalParams) { + const moduleEvent: UniversalParams = {}; + Object.keys(events).forEach(event => { + moduleEvent[event] = `${moduleName}.${events[event]}`; + }); + return moduleEvent; +} + +const newModules: UniversalParams> = {}; +Object.keys(modules).forEach(moduleName => { + const modName = moduleName as keyof EventModules; + newModules[modName] = addModuleName(modName, modules[modName]); +}); + +export default newModules as EventModules; diff --git a/src/app/app-events/events/interaction.ts b/src/app/app-events/events/interaction.ts new file mode 100644 index 0000000..026799d --- /dev/null +++ b/src/app/app-events/events/interaction.ts @@ -0,0 +1,99 @@ +/** + * @file 互动功能相关全局事件 + */ +export const interactionEvents = { + /** + * 打开公告列表 + */ + OpenAnnouncementList: 'OpenAnnouncementList', + /** + * 打开某个公告详情 + * @param {object} data 公告详情 + */ + OpenAnnouncementDetail: 'OpenAnnouncementDetail', + /** + * 打开签到弹窗 + * @param {boolean} visible 显示状态 + */ + OpenCheckIn: 'OpenCheckIn', + /** + * 打开问卷弹窗 + * @param {boolean} visible 显示状态 + */ + OpenQuestionnaire: 'OpenQuestionnaire', + /** + * 打开答题卡弹窗 + * @param {boolean} visible 显示状态 + */ + OpenAnswerCard: 'OpenAnswerCard', + /** + * 打开快速答题卡弹窗 + * @param {boolean} visible 显示状态 + */ + OpenQuickAnswerCard: 'OpenQuickAnswerCard', + /** + * 打开竖屏的商品库列表弹窗 + * @param {boolean} visible 显示状态 + */ + OpenPortraitProductList: 'OpenPortraitProductList', + /** + * 打开举报反馈弹窗 + * @param {boolean} visible 显示状态 + */ + OpenFeedBack: 'OpenFeedBack', + /** + * 判断发言是否满足评论抽奖 + * @param {string} comment 消息内容 + */ + CheckCommentLotteryComment: 'CheckCommentLotteryComment', + /** + * 打开红包雨 + * @param {object} data 红包消息 + */ + OpenRedpackRain: 'OpenRedpackRain', + /** + * 打开红包弹窗 + * @param {object} data 红包消息 + */ + OpenRedpack: 'OpenRedpack', + /** + * 设置红包状态 + */ + SetRedpackStatus: 'SetRedpackStatus', + /** + * 打开抽奖结果弹窗 + * @param {boolean} visible 显示状态 + * @param {object} record 红包记录 + */ + OpenLotteryResult: 'OpenLotteryResult', + /** + * 打开积分记录弹层 + * @param {boolean} visible 显示状态 + */ + OpenScoreRecord: 'OpenScoreRecord', + /** + * 打开中奖记录 + * @param {boolean} visible 显示状态 + */ + OpenLotteryRecord: 'OpenLotteryRecord', + /** + * 打开报名抽奖 + * @param {boolean} visible 显示状态 + */ + OpenEnrollLottery: 'OpenEnrollLottery', + /** + * 打开发送红包 + * @param {boolean} visible 显示状态 + */ + OpenSendRedpack: 'OpenSendRedpack', + /** + * 打开问答弹层 + * @param {boolean} visible 显示状态 + */ + OpenQuestionAnswer: 'OpenQuestionAnswer', + /** + * 打开商品库的职位详情 + * @param {object} jobDetail 职位详情 + */ + OpenProductJobDetail: 'OpenProductJobDetail', +}; diff --git a/src/app/app-events/events/invite.ts b/src/app/app-events/events/invite.ts new file mode 100644 index 0000000..11701bf --- /dev/null +++ b/src/app/app-events/events/invite.ts @@ -0,0 +1,8 @@ +/** + * @file 组件通信-邀请事件 + */ + +export const inviteEvents = { + /** 邀请榜弹窗显示(竖屏) */ + OpenPortraitInviteRank: 'OpenPortraitInviteRank', +}; diff --git a/src/app/app-events/events/microActivity.ts b/src/app/app-events/events/microActivity.ts new file mode 100644 index 0000000..8100c58 --- /dev/null +++ b/src/app/app-events/events/microActivity.ts @@ -0,0 +1,8 @@ +/** + * @file 组件通信-微活动事件 + */ + +export const microActivityEvents = { + /** 微活动弹窗显示(竖屏) */ + OpenPortraitMicroActivity: 'OpenPortraitMicroActivity', +}; diff --git a/src/app/app-events/events/player.ts b/src/app/app-events/events/player.ts new file mode 100644 index 0000000..591d49c --- /dev/null +++ b/src/app/app-events/events/player.ts @@ -0,0 +1,26 @@ +/** + * @file 播放器模块事件 + */ +export const playerEvents = { + /** + * 重新创建播放器 + */ + ResetUpPlayer: 'ResetUpPlayer', + /** + * 点击了移动端播放器容器 + */ + ClickMobilePlayerContainer: 'ClickMobilePlayerContainer', + /** + * 显示历史播放提示 + * @param {number} duration 播放进度 + */ + ShowHistoryTips: 'ShowHistoryTips', + /** + * 试看播放开始 + */ + TrialPlayEnd: 'TrialPlayEnd', + /** + * 试看播放结束 + */ + TrialPlayStart: 'TrialPlayStart', +}; diff --git a/src/app/app-events/events/portrait.ts b/src/app/app-events/events/portrait.ts new file mode 100644 index 0000000..8e383a0 --- /dev/null +++ b/src/app/app-events/events/portrait.ts @@ -0,0 +1,44 @@ +/** + * @file 竖屏模块事件 + */ +export const portraitEvents = { + /** + * 打开菜单栏弹层 + * @param {boolean} visible 显示状态,默认:true + * @param {boolean} useTransition 是否使用动画 + */ + OpenMenuPopup: 'OpenMenuPopup', + /** + * 点击了播放器区域 + * @param {MouseEvent} event 事件对象 + */ + ClickPlayerRegion: 'ClickPlayerRegion', + /** + * 打开线路切换弹层 + * @param {boolean} visible 显示状态,默认:true + * @param {boolean} useTransition 是否使用动画,默认:true + */ + OpenLineSettingPopup: 'OpenLineSettingPopup', + /** + * 打开清晰度切换弹层 + * @param {boolean} visible 显示状态,默认:true + * @param {boolean} useTransition 是否使用动画,默认:true + */ + OpenQualitySettingPopup: 'OpenQualitySettingPopup', + /** + * 打开倍速设置弹层 + * @param {boolean} visible 显示状态,默认:true + * @param {boolean} useTransition 是否使用动画,默认:true + */ + OpenRateSettingPopup: 'OpenRateSettingPopup', + /** + * 打开回放+章节弹层 + * @param {boolean} visible 显示状态,默认:true + */ + OpenPlaybackChapter: 'OpenPlaybackChapter', + /** + * 打开延迟模式弹层 + * @param {boolean} visible 显示状态,默认:true + */ + OpenLatencySwitchPopup: 'OpenLatencySwitchPopup', +}; diff --git a/src/app/app-events/events/withdraw.ts b/src/app/app-events/events/withdraw.ts new file mode 100644 index 0000000..a2e429e --- /dev/null +++ b/src/app/app-events/events/withdraw.ts @@ -0,0 +1,16 @@ +/** + * @file 提现事件 + */ + +export const withdrawEvents = { + /** + * 打开提现详情 + * @param {boolean} visible 显示状态 + */ + OpenWithdrawDetail: 'OpenWithdrawDetail', + /** + * 打开提现申请 + * @param {boolean} visible 显示状态 + */ + OpenWithdrawApply: 'OpenWithdrawApply', +}; diff --git a/src/app/app-events/index.ts b/src/app/app-events/index.ts new file mode 100644 index 0000000..5a665f1 --- /dev/null +++ b/src/app/app-events/index.ts @@ -0,0 +1,5 @@ +/** + * @file 全局组件通讯插件 + */ + +export * from './use-app-events'; diff --git a/src/app/app-events/use-app-events.ts b/src/app/app-events/use-app-events.ts new file mode 100644 index 0000000..d0680a8 --- /dev/null +++ b/src/app/app-events/use-app-events.ts @@ -0,0 +1,48 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ +import { onBeforeUnmount, onMounted, readonly } from 'vue'; +import mitt from 'mitt'; +import events from './events/'; + +// 消息模块 +export const appEvents = readonly(events); + +type AppMittEvents = { + [key: string]: any; +}; + +const emitter = mitt(); +// 应用消息总线 +export const eventBus = { + $on: emitter.on, + $emit: emitter.emit, + $off: emitter.off, +}; + +/** + * 设置 eventBus 监听 + * @param event appEvents 中的事件 + * @param callback 回调 + */ +export const useEventBusListener = (event: string, callback: (...arg: any[]) => unknown) => { + onMounted(() => { + eventBus.$on(event, callback); + }); + + onBeforeUnmount(() => { + eventBus.$off(event, callback); + }); +}; + +/** + * 触发 eventBus 事件 + * @param event appEvents 中的事件 + */ +export const useEventBusEmitter = (event: string) => { + function emitEvent(params: any) { + eventBus.$emit(event, params); + } + + return { + emitEvent, + }; +}; diff --git a/src/app/layout/main-enter/_hooks/use-main-enter.ts b/src/app/layout/main-enter/_hooks/use-main-enter.ts new file mode 100644 index 0000000..d4d4b33 --- /dev/null +++ b/src/app/layout/main-enter/_hooks/use-main-enter.ts @@ -0,0 +1,29 @@ +import { watch } from 'vue'; + +import { useWatchAppStore } from '@/store/use-watch-app-store'; + +export const useMainEnter = ( + options: { + watchLoader?: () => Promise; + } = {}, +) => { + const { watchLoader } = options; + + const watchAppStore = useWatchAppStore(); + + watch( + () => watchAppStore.shouldShowSplash, + async newVal => { + if (newVal === false) { + if (watchLoader) { + await watchLoader(); + } + // 从引导页进入观看页 + await watchAppStore.setupLiveWatch(); + } + }, + { + immediate: true, + }, + ); +}; diff --git a/src/app/layout/main-enter/_hooks/use-page-layout-style.ts b/src/app/layout/main-enter/_hooks/use-page-layout-style.ts new file mode 100644 index 0000000..fe14f0e --- /dev/null +++ b/src/app/layout/main-enter/_hooks/use-page-layout-style.ts @@ -0,0 +1,32 @@ +import { onBeforeUnmount, onBeforeMount, ref } from 'vue'; + +/** + * @hook PC 页面布局 hook + */ +export const usePageLayoutStyle = () => { + const pageWidth = ref(0); + + function updatePageWidth(): void { + const width = document.documentElement.clientWidth; + pageWidth.value = width; + + // 浏览器可用区域宽度在 1024 和 1920 之间变化时,内容区域对应宽度为 964 和 1680。 + // 设置 fontSize 为内容区域宽度后,就不再需要在 CSS 中计算宽度(实际上也很难在 CSS 里面算),仅需设为 1rem。 + document.documentElement.style.fontSize = + 964 + ((1680 - 964) * (Math.min(1920, Math.max(width, 1024)) - 1024)) / (1920 - 1024) + 'px'; + } + + onBeforeMount(() => { + updatePageWidth(); + window.addEventListener('resize', updatePageWidth, false); + }); + + onBeforeUnmount(() => { + window.removeEventListener('resize', updatePageWidth, false); + document.documentElement.style.fontSize = ''; + }); + + return { + pageWidth, + }; +}; diff --git a/src/app/layout/main-enter/mobile-main.vue b/src/app/layout/main-enter/mobile-main.vue new file mode 100644 index 0000000..417994e --- /dev/null +++ b/src/app/layout/main-enter/mobile-main.vue @@ -0,0 +1,78 @@ + + + + + + + + diff --git a/src/app/layout/main-enter/pc-main.vue b/src/app/layout/main-enter/pc-main.vue new file mode 100644 index 0000000..a813454 --- /dev/null +++ b/src/app/layout/main-enter/pc-main.vue @@ -0,0 +1,35 @@ + + + + + + diff --git a/src/app/layout/page-error/_components/page-error-mobile-default.vue b/src/app/layout/page-error/_components/page-error-mobile-default.vue new file mode 100644 index 0000000..dddd505 --- /dev/null +++ b/src/app/layout/page-error/_components/page-error-mobile-default.vue @@ -0,0 +1,153 @@ + + + + + + + diff --git a/src/app/layout/page-error/_components/page-error-pc-default.vue b/src/app/layout/page-error/_components/page-error-pc-default.vue new file mode 100644 index 0000000..5eda922 --- /dev/null +++ b/src/app/layout/page-error/_components/page-error-pc-default.vue @@ -0,0 +1,78 @@ + + + + + + + diff --git a/src/app/layout/page-error/_components/page-error-work-wechat.vue b/src/app/layout/page-error/_components/page-error-work-wechat.vue new file mode 100644 index 0000000..1e7cf6e --- /dev/null +++ b/src/app/layout/page-error/_components/page-error-work-wechat.vue @@ -0,0 +1,60 @@ + + + + + diff --git a/src/app/layout/page-error/_hooks/use-page-error.ts b/src/app/layout/page-error/_hooks/use-page-error.ts new file mode 100644 index 0000000..2eb42c3 --- /dev/null +++ b/src/app/layout/page-error/_hooks/use-page-error.ts @@ -0,0 +1,59 @@ +import { computed, unref } from 'vue'; + +import { useWatchAppStore } from '@/store/use-watch-app-store'; +import { storeDefinitionToRefs } from '@/plugins/pinia/util'; +import { PageErrorType, PageErrorData } from '@/app/layout/page-error/page-error-type'; + +/** + * @hook 全局错误页-页面错误数据 + */ +export const usePageErrorHook = () => { + /** 页面错误数据,必定存在 */ + const pageError = computed(() => { + return storeDefinitionToRefs(useWatchAppStore).pageError.value as PageErrorData; + }); + + const isWorkWechatError = computed(() => { + return unref(pageError).type === PageErrorType.WorkWechatCode; + }); + + const isDisallowMobileWatch = computed(() => { + return unref(pageError).type === PageErrorType.MobileChannelClosed; + }); + + const isAuthError = computed(() => { + const authErrorTypes = [ + PageErrorType.ExternalAuthFail, + PageErrorType.DirectAuthFail, + PageErrorType.ExternalAuthFail, + PageErrorType.NotAuthorized, + ]; + return authErrorTypes.includes(unref(pageError).type); + }); + + const isNotExistError = computed(() => { + return ( + unref(pageError).type === PageErrorType.ChannelIdError || + unref(pageError).type === PageErrorType.ChannelClosed + ); + }); + + const isNotFoundError = computed(() => { + return ( + !isAuthError.value && + !isNotExistError.value && + !isWorkWechatError.value && + !isDisallowMobileWatch.value + ); + }); + + return { + pageError, + + isWorkWechatError, + isDisallowMobileWatch, + isAuthError, + isNotExistError, + isNotFoundError, + }; +}; diff --git a/src/app/layout/page-error/images/error-404.png b/src/app/layout/page-error/images/error-404.png new file mode 100644 index 0000000000000000000000000000000000000000..8dc1fc071d70e3c96a749dc2cde3a34e38fd5d22 GIT binary patch literal 5167 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 f`q*^m(hgU#d5pJ&%AhLeM5K#^u9C;$Mc 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 literal 0 HcmV?d00001 diff --git a/src/app/layout/page-error/images/error-noExist.png b/src/app/layout/page-error/images/error-noExist.png new file mode 100644 index 0000000000000000000000000000000000000000..a3cf5ab4f5da46db5a8de0238026dfc96910c27b GIT binary patch literal 6875 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 literal 0 HcmV?d00001 diff --git a/src/app/layout/page-error/images/tip-icon.png b/src/app/layout/page-error/images/tip-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..c7b6085af2e67429793df163e00e19dd055284df GIT binary patch literal 12792 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 S3;5R>fQpj(?Lvh|$o~Vy+ib}I literal 0 HcmV?d00001 diff --git a/src/app/layout/page-error/page-error-entry.vue b/src/app/layout/page-error/page-error-entry.vue new file mode 100644 index 0000000..e3a5826 --- /dev/null +++ b/src/app/layout/page-error/page-error-entry.vue @@ -0,0 +1,22 @@ + + + + diff --git a/src/app/layout/page-error/page-error-type.ts b/src/app/layout/page-error/page-error-type.ts new file mode 100644 index 0000000..d3fc82e --- /dev/null +++ b/src/app/layout/page-error/page-error-type.ts @@ -0,0 +1,31 @@ +/** 页面异常状态类型 */ +export enum PageErrorType { + /** 频道号异常 */ + ChannelIdError = 'ChannelIdError', + /** 频道号被关闭 */ + ChannelClosed = 'ChannelClosed', + /** 移动端观看被关闭 */ + MobileChannelClosed = 'MobileChannelClosed', + /** 外部授权失败 */ + ExternalAuthFail = 'ExternalAuthFail', + /** 独立授权失败 */ + DirectAuthFail = 'DirectAuthFail', + /** 未被授权 */ + NotAuthorized = 'NotAuthorized', + /** 企业微信异常 */ + WorkWechatCode = 'WorkWechatCode', // WORK_WECHAT_CODE + /** 未知错误 */ + UnknownError = 'UnknownError', +} + +/** + * 页面异常数据 + */ +export interface PageErrorData { + /** 异常类型 */ + type: PageErrorType; + /** 标题 */ + title: string; + /** 描述 */ + desc?: string; +} diff --git a/src/app/use-watch-app.ts b/src/app/use-watch-app.ts new file mode 100644 index 0000000..61bf470 --- /dev/null +++ b/src/app/use-watch-app.ts @@ -0,0 +1,216 @@ +import Vue, { onBeforeMount } from 'vue'; + +import { getWatchCore, initWatchSdk } from '@/core/watch-sdk'; + +import { useErrorCatch } from '@/hooks/core/use-error-catch'; +import { paramGetter } from '@/hooks/core/use-query-params'; +import { usePageSkin } from '@/skins/use-page-skin'; +import { useAuthSpecial } from '@/components/page-splash-common/auth/hooks/use-auth-special'; +import { useWeixinSetup } from './_hooks/use-weixin-setup'; +import { useGlobalEventsEffect } from './_hooks/use-global-events-effect'; +import { useBrowserIcon, useBrowserTitle, useGlobalStyle } from './_hooks/use-global-style'; +import { loadInteractiveReceiveUI } from '@/components/page-watch-common/interactive-receive/load-iar-ui'; + +import { useWatchAppStore } from '@/store/use-watch-app-store'; +import { useChannelStore } from '@/store/use-channel-store'; +import { useChannelInfoStore } from '@/store/use-channel-info-store'; +import { useLiveBookingStore } from '@/store/use-live-booking-store'; +import { useViewerStore } from '@/store/use-viewer-store'; + +import { translate } from '@/assets/lang'; +import { isMobile, isMockPc } from '@/assets/utils/browser'; +import { ynToBool } from '@utils-ts/boolean'; + +import { PageErrorType } from '@/app/layout/page-error/page-error-type'; +import { YN } from '@polyv/live-watch-sdk'; +import { useLangStore } from '@/store/use-lang-store'; +import { LangType } from '@/assets/lang/lang-enum'; + +/** 错误日志记录 */ +const useErrorLogRecord = () => { + const watchCore = getWatchCore(); + const { windowErrorHandler, promiseErrorHandler, vueErrorHandler } = useErrorCatch(data => { + watchCore.logger.error('watch-app', 'error-log-record', JSON.stringify(data)); + }); + + windowErrorHandler(); + promiseErrorHandler(); + Vue.config.errorHandler = (error, vm, info) => { + vueErrorHandler(error, vm, info); + }; +}; + +/** + * 拦截观看页应用初始化 + * @desc 存在需要拦截的情况下,拦截器内部会自行处理,调用方需要终止初始化函数继续执行 + * @returns 是否需要拦截 + * */ +const useInterceptWatchAppInit = (): boolean => { + const watchCore = getWatchCore(); + const watchAppStore = useWatchAppStore(); + + const channelDetail = watchCore.channel.getChannelDetail(); + + // 当前处于分会场,是否需要跳转到主会场进行观看条件授权 + if (ynToBool(channelDetail.action?.mainChannelRedirect, YN.N)) { + const mainChannelId = channelDetail.multiMeetingSetting?.mainChannelId; + if (!mainChannelId) { + console.error('缺少主会场频道号'); + return true; + } + const watchUrl = watchCore.channel.generateWatchUrl(mainChannelId.toString()); + location.replace(watchUrl); + return true; + } + + // 观看页被关闭 + if (ynToBool(channelDetail.channelInfo.isClosePreview, YN.N)) { + watchAppStore.setPageError({ + type: PageErrorType.ChannelClosed, + title: translate('pageError.channelClosed'), + }); + return true; + } + + // 移动端观看页被关闭 + if ((isMobile || isMockPc) && !ynToBool(channelDetail.channelInfo.mobileEnabled, YN.Y)) { + watchAppStore.setPageError({ + type: PageErrorType.MobileChannelClosed, + title: translate('pageError.mobileChannelClosed'), + }); + return true; + } + + return false; +}; + +/** + * @hook 观看页应用 hook + */ +export function useWatchApp() { + useBrowserTitle(); + useBrowserIcon(); + + const { setupGlobalStyle, removeSkeleton } = useGlobalStyle(); + const { initPageSkin } = usePageSkin(); + + const watchAppStore = useWatchAppStore(); + const channelStore = useChannelStore(); + const channelInfoStore = useChannelInfoStore(); + const viewerStore = useViewerStore(); + const liveBookingStore = useLiveBookingStore(); + const langStore = useLangStore(); + + function onLayoutMounted() { + removeSkeleton(); + } + + /** 获取地址上的频道号 */ + function getChannelIdByUrl(): string | undefined { + let channelId: string | undefined; + if (/\d+$/.test(window.location.pathname)) { + channelId = RegExp.lastMatch; + } else if (paramGetter.channelId()) { + channelId = paramGetter.channelId(); + } + + if (!channelId) { + watchAppStore.setPageError({ + type: PageErrorType.ChannelIdError, + title: translate('pageError.channelClosed'), + }); + return; + } + + return channelId; + } + + /** + * 设置观看页应用 + */ + async function setupWatchApp(): Promise { + const channelId = getChannelIdByUrl(); + if (!channelId) { + return; + } + + // 初始化观看页 SDK + initWatchSdk({ + env: WATCH_SDK_ENV, + channelId, + vid: paramGetter.vid(), + testModeToken: paramGetter.testModeToken(), + promoteId: paramGetter.promoteId(), + invitePosterId: paramGetter.invitePosterId(), + wxInviteId: paramGetter.wxInviteId(), + invitee: paramGetter.invitee(), + userInfo: { + userId: paramGetter.viewerid(), + nick: paramGetter.nickname() || paramGetter.name(), + pic: paramGetter.avatar(), + }, + zone: paramGetter.zone(), + language: langStore.currentLang === LangType.Chinese ? 'zh_CN' : 'en', + }); + + try { + await Promise.all([ + // 安装观看页核心 + watchAppStore.resetUpWatchCore(), + // 记载互动功能 UI 组件 + loadInteractiveReceiveUI(), + ]); + } catch (error) { + console.error(error); + watchAppStore.setPageError({ + type: PageErrorType.UnknownError, + title: '数据请求异常,页面初始化失败!', + }); + return; + } + + // 错误日志记录 + useErrorLogRecord(); + + /** 需要拦截观看页应用初始化 */ + const needInterceptWatchAppInit = useInterceptWatchAppInit(); + if (needInterceptWatchAppInit) { + return; + } + + // 同步相关 store 的数据 + channelStore.syncChannelStore(); + channelInfoStore.syncChannelInfo(); + viewerStore.syncViewerInfo(); + liveBookingStore.initLiveBookingData(); + + // 初始化多皮肤 + initPageSkin(); + + // 处理特殊授权 + const { handleSpecialAuth } = useAuthSpecial(); + await handleSpecialAuth(); + + // 处理微信流程 + const weixinResult = await useWeixinSetup(); + if (weixinResult) { + return; + } + + watchAppStore.$patch({ + watchAppInited: true, + }); + } + + onBeforeMount(() => { + setupGlobalStyle(); + setupWatchApp(); + }); + + useGlobalEventsEffect(); + + return { + onLayoutMounted, + getChannelIdByUrl, + }; +} diff --git a/src/app/watch-app.vue b/src/app/watch-app.vue new file mode 100644 index 0000000..bfc78c8 --- /dev/null +++ b/src/app/watch-app.vue @@ -0,0 +1,52 @@ + + + + + + + diff --git a/src/assets/constants/date-format.ts b/src/assets/constants/date-format.ts new file mode 100644 index 0000000..cdc3c0c --- /dev/null +++ b/src/assets/constants/date-format.ts @@ -0,0 +1,14 @@ +/** + * 完整的日期格式 + */ +export const DATE_FORMAT_COMPLETE = 'YYYY-MM-DD hh:mm:ss'; + +/** + * 斜杠格式 + */ +export const DATE_FORMAT_SLASH = 'YYYY/MM/DD hh:mm'; + +/** + * 仅小时分钟 + */ +export const DATE_FORMAT_HM = 'hh:mm'; diff --git a/src/assets/constants/defaults.ts b/src/assets/constants/defaults.ts new file mode 100644 index 0000000..ba3769b --- /dev/null +++ b/src/assets/constants/defaults.ts @@ -0,0 +1,36 @@ +/** + * @file 一些静态资源的默认地址(包括通过 require 引入到图片) + */ + +/** 默认的频道 logo */ +export const DEFAULT_CHANNEL_LOGO = 'https://s1.videocc.net/default-img/channel/default-logo.png'; + +/** 默认观众头像 */ +export const DEFAULT_VIEWER_AVATAR = 'https://s1.videocc.net/default-img/avatar/viewer.png'; + +/** 默认引导页封面图 */ +export const DEFAULT_SPLASH_IMG = 'https://s1.videocc.net/default-img/channel/default-splash.png'; + +/** 默认引导页大图封面图 */ +export const DEFAULT_SPLASH_FULL_IMG = require('@/assets/images/splash/default-splash-full-img.jpg'); + +/** 默认 SVGA 文件目录 */ +export const DEFAULT_SVGA_DIRECTORY = 'https://s1.videocc.net/default-img/donate-svga/'; + +/** 默认的浏览器 ico */ +export { default as DEFAULT_BROWSER_ICON } from '@/assets/favicons/polyv.ico'; + +/** 默认分享图标 - QQ */ +export const DEFAULT_SHARE_QQ_ICON: string = require('@/assets/images/share/qq.png'); + +/** 默认分享图标 - QQ 空间 */ +export const DEFAULT_SHARE_QZONE_ICON: string = require('@/assets/images/share/qzone.png'); + +/** 默认分享图标 - 微博 */ +export const DEFAULT_SHARE_WEIBO_ICON: string = require('@/assets/images/share/weibo.png'); + +/** 默认选择的手机区号 */ +export const DEFAULT_PHONE_NUMBER_AREA_CODE = '+86'; + +/** 默认唯一登录校验频率 */ +export const DEFAULT_VERIFY_QUERY_FREQUENCY = 30; diff --git a/src/assets/constants/key-code.ts b/src/assets/constants/key-code.ts new file mode 100644 index 0000000..7f74956 --- /dev/null +++ b/src/assets/constants/key-code.ts @@ -0,0 +1,13 @@ +/** 键盘按键 */ +export enum KeyCodeMap { + /** 上箭头 */ + ArrowUp = 38, + /** 下箭头 */ + ArrowDown = 40, + /** 左箭头 */ + ArrowLeft = 37, + /** 右箭头 */ + ArrowRight = 39, + /** 空格键 */ + Space = 32, +} diff --git a/src/assets/constants/selector.ts b/src/assets/constants/selector.ts new file mode 100644 index 0000000..a05a599 --- /dev/null +++ b/src/assets/constants/selector.ts @@ -0,0 +1,12 @@ +/** + * @file 常用的 className + */ + +/** PC 端播放器主屏 className */ +export const PC_MAIN_PLAYER_SELECTOR = '.c-pc-watch-layout__main__left'; + +/** PC 端用于全屏的选择器 */ +export const PC_PLAYER_FULL_SCREEN_SELECTOR = '.c-pc-watch-layout__main__fullscreen-wrap'; + +/** PC 端右边侧边栏外层 */ +export const PC_LAYOUT_ASIDE_WRAP = '.c-pc-watch-layout__main__right'; diff --git a/src/assets/constants/special-user-types.ts b/src/assets/constants/special-user-types.ts new file mode 100644 index 0000000..cba9402 --- /dev/null +++ b/src/assets/constants/special-user-types.ts @@ -0,0 +1,21 @@ +import { ChatUserTypes } from '@polyv/live-watch-sdk'; + +/** + * 特殊用户身份类型列表 + */ +export const specialUserTypes = [ + ChatUserTypes.Teacher, + ChatUserTypes.Manager, + ChatUserTypes.Guest, + ChatUserTypes.Assistant, + ChatUserTypes.Attendee, + ChatUserTypes.Dummy, +]; + +/** + * 判断是否为特殊的用户类型 + * @param userType 用户类型 + */ +export function isSpecialUserType(userType: ChatUserTypes): boolean { + return specialUserTypes.includes(userType); +} diff --git a/src/assets/constants/tab-name.ts b/src/assets/constants/tab-name.ts new file mode 100644 index 0000000..93cbbbb --- /dev/null +++ b/src/assets/constants/tab-name.ts @@ -0,0 +1,69 @@ +/** + * 移动端下文档和摄像头 tab 名 + */ +export const TAB_NAME_DOC_OR_VIDEO = 'docOrVideo'; + +/** + * 聊天室 tab 名 + */ +export const TAB_NAME_CHAT = 'chat'; + +/** + * 问答 tab 名 + */ +export const TAB_NAME_QA = 'qa'; + +/** + * 提问 tab 名 + */ +export const TAB_NAME_ASK = 'ask'; + +/** + * 连麦 tab 名 + */ +export const TAB_NAME_CONNECT_MIC = 'connectMic'; + +/** + * 投票 tab 名 + */ +export const TAB_NAME_VOTE = 'vote'; + +/** + * 云席 tab 名 + */ +export const TAB_NAME_SEAT = 'seat'; + +/** + * 邀请榜 tab 名 + */ +export const TAB_NAME_INVITE_RANK = 'inviteRank'; + +/** + * 成员列表 tab 名 + */ +export const TAB_NAME_MEMBERS = 'members'; + +/** + * 商品库 tab 名 + */ +export const TAB_NAME_PRODUCT = 'product'; + +/** + * 回放 tab 名 + */ +export const TAB_NAME_PLAYBACK = 'playback'; + +/** + * 章节 tab 名 + */ +export const TAB_NAME_CHAPTER = 'chapter'; + +/** + * 微活动 tab 名 + */ +export const TAB_NAME_MICRO_ACTIVITY = 'microActivity'; + +/** + * 图文直播 tab 名 + */ +export const TAB_NAME_TUWEN_LIVE = 'tuwenLive'; diff --git a/src/assets/favicons/polyv.ico b/src/assets/favicons/polyv.ico new file mode 100644 index 0000000000000000000000000000000000000000..4a26ad425a95082983f384a12b9485b97c08cc27 GIT binary patch literal 4286 zcmeH|y-EW?5Xa{*kWOQvC%7EL0feSp(jmqtfgqcmOs;)!n;(>rwmNc89%kpO)X9ciMjOxiPKzyI!dWe(X;P+$-Fm z{S54Y3GM&!%l?bcjpFw(_A7Av-TEh<;asNOJO=UeSQzuL3%}&^hG*BqImF;!?7`1@ zG{KhS5QD$lJ&-lv_yOiQhe7>32FB`T4n_ z4#z3@bMU_?In6iBhiBHHam!Us62Q%{T%XgB2e;4cS zW#E5=cSXDs6P$koz8W|IYv5p5D8^h@z5oCK literal 0 HcmV?d00001 diff --git a/src/assets/images/low-latency/low-latency-bg-mobile.svg b/src/assets/images/low-latency/low-latency-bg-mobile.svg new file mode 100644 index 0000000..93c92a5 --- /dev/null +++ b/src/assets/images/low-latency/low-latency-bg-mobile.svg @@ -0,0 +1,119 @@ + + + + icon无延迟-移动端 + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/images/low-latency/low-latency-bg-pc.svg b/src/assets/images/low-latency/low-latency-bg-pc.svg new file mode 100644 index 0000000..d8d202f --- /dev/null +++ b/src/assets/images/low-latency/low-latency-bg-pc.svg @@ -0,0 +1,117 @@ + + + + icon无延迟备份 2 + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/images/player/icon-cam-closed.png b/src/assets/images/player/icon-cam-closed.png new file mode 100644 index 0000000000000000000000000000000000000000..4fddd3221419149077c9d0210377626c91687516 GIT binary patch literal 1417 zcmb7^YdF(;0LOouZLu&qBiHH4CCaUsOD>r>h{Hk|IZTSv(P5{_CXW4Q%%iJoL-FKD zdQQ1yIV}?#C%5JrxkR=u#9`*vh)zfE&ztk&`}sc4_s#d+C!6T+rGnN$0{~QfygdT9 zoAND+sBN~3SA79M5`8=f!SslQ(%A>bc(vyNj?(Lwd5h_nU++e05SDJp9~guSG@^=* z=W2Trj;jylRm_$@d+9qUPnrszLEsjJzVRV*BUO39v@mNHrq@R>~gUM&KQQlDkn>D&1hpQl@y?mst!ZOPd>iifK7x zH+HuK#PA%2DL6p|aK&>MZAyL#^aQaJ6D&FDk2yR6D^P+IWR2q)>)FL$>as;9mU|(? z-eRajlL6NIMQOVQ)D*J#^KtP&qL~bkjp%SKy*C43@{0+eozy~dN>;H@7D^|?W?Fwd zDOmBMoDZ5F4V@}%cqh8hX)xUClnIx^t&N;vTULmS%zcnh(x7Vnc)4-o=!5*C)AVqI z67AO~PJ|(Nia2ODEHx^IQR~@1nPA5~;_KRihkPZ^fLI+YmgWVmuwuarjXB3TE@ zu~93gkTfk0ouA>g_Cw(uY_Qy*Xsj>jnfJT47r=pMWl_Zru|+j*>MQB(JL30wreF>h zaftiE(Zz>m`Q3+TNz5{iq-BTcXljcSvHP)v#wwl4ql96=P>`i{ogSS`mLIx(vjAT( z@*@L#hd-5n6E5dyr4XO|3~_p{Mn@(|S~Uf)kqN2~l@e?-?&W-qPwHqta8gBPW5W*{ z_n|R%3Kp~%Ua?1<-J01UTka3}EyYVijGgozg{^K;a~E-NZU4E0UwTEWDF?o710q*T z1lbo+_LexNQwHwYmpm;f`t8hHsYt{1l)5v_&zk4* zH`OLub(Ni0(2*&#F?^9lHLc}RDf*+`hknOg!FbjJ-uQx*cjzS(?nd}|bIc`wdZ5_b z!N~6)%7E*MUX=hqHL)tZmYg+hnqdi%Sj)C3OVDA07X~R>WRP^7Vdj8j=nNAfNC&nF zNH)$e<+|Qm{Eo+0@28gTgQz&Ib;d#zH=!O&2iCisuQ7!ZB{GI=`@yX6PX&4)IrC}H zpkv6({G$6&LEL_Q)7sgC6ij!VrnpRux6dBaZMp}f>Jc_Tj;>XLQrPy$9H(D5_AbBE zuJ!V-cIj(8LRpl34@>eGWDiM=(71SFSTCv$N#}x;J;^%ACs|a6SMT&t&1@)WZXRU9 zD`|_GYq1!|kGi>^l4Xjq(lxP!M?LEVb@4dI`igLluyZxh4O=aWpYA;Cad8m;33DHtT_=J+w}FRg{GU3 zFDbjBK$M|aVWtoUPCt7`w_?ipG3(-+2_kmKo|L!JzDmP%{`CgsgyGPS6Qx|b<~Yk? z!y-bOcChlw&GB93lZAOJ{!c#k&zswtF-hFPEP+9!Ss%} literal 0 HcmV?d00001 diff --git a/src/assets/images/player/icon-sip.png b/src/assets/images/player/icon-sip.png new file mode 100644 index 0000000000000000000000000000000000000000..1b54d6f45389e60b5ba80f7ca803d891539bef8f GIT binary patch literal 1158 zcmeAS@N?(olHy`uVBq!ia0vp^J|N7&3?x5zE|dgP)d4;su0UEI70AiSDJUpF#FUhj zAY6zDkc2RR;y?zFl#!7Ei-8D5BmmT#BY&ZXW+2+xa4XawxJ)Mn|I4@O}hlT2?D~bwR>98pP zJ;OZH)5S3);_#d)FU!^_2()CzxE+r)o?L5ftMK8Uf5r2n9$sE4-@l%HZTeSTZzhG! ze;ypTJykU|bX#emRehIzR`nY16s^~f%WPl%-FbAk!=ZY`U-Cj9)_wa~E1FfDAz;I) zTq&1Od_%|mtu2T8lg8hvJKj4jnx7N&Z>!F}`t-e1J(gI?mF4eWAlH54>Ym+?3j4lp zRF3vO^VV)zB*1}HwzVhrOKUegwFI@5RBHpTeYds3y!-*#;6yB0gy z?@hnwRgFUjSfYpZ!9<5mC0-@U&_#%YJzCevv_K+c%ewm%lDw*tp2A#bkQi!9o)@PMyLWcB!Kd z*ZRsMdM9;Fl%DLg+;2xpK<8G0>q3nQ!P`AWjTc7B)-DJybbGL&=4`CIAD5Qy`N%l| zY5VP0|Eyw`R(tuwUFoApuB-EG#v5vv4@zB1IeTpNV!niFllW6sh?#Yq-Smv<+9KWr zE9S*2v2%8(6*FyHbmpMXo1Tm*zdx+zULPD%(iJ6r{o>awlbnd>a!QChWC<*vBPE${-tma}hPtP> z+zX3?{0dh#^PkErc`J0DLwLiE>B6mgN8?0v{yTW~uDg)wxWjC&{mZ(W`Yq-iIUlwt z%u-&yjpNFjubY1{X~z~X$$flFC*V!|3LpN+1^ z(~}y%-Mtu~>*{lHN}JOJ{|gEy0>0O7nG;+dt7UTcO48Pl4e#D8-syXNZs~##Mq9m` z?nDXd#%|nmqHD*_J<|eoBICYaf7MldW%-(`ySevY6|mCe{=ZKoQC0bl^6Hf$AN405 z$BZ3`njxg HN@xNAP2cAy literal 0 HcmV?d00001 diff --git a/src/assets/images/player/play-btn.png b/src/assets/images/player/play-btn.png new file mode 100644 index 0000000000000000000000000000000000000000..fafd0896e24c759f473de6f9cc4664cce6463571 GIT binary patch literal 7531 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 KxBQMx#Qy>6@HgTB literal 0 HcmV?d00001 diff --git a/src/assets/images/player/player-no-live.png b/src/assets/images/player/player-no-live.png new file mode 100644 index 0000000000000000000000000000000000000000..0634450d7647c55ca7da54a6392dc33d0d83b00d GIT binary patch literal 55165 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 z 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 z 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�(IdCGr9wJcoc~(eB8aSZw1#S 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 literal 0 HcmV?d00001 diff --git a/src/assets/images/player/player-stop.png b/src/assets/images/player/player-stop.png new file mode 100644 index 0000000000000000000000000000000000000000..da641688bca80b67716894701fa8fb71b42fd2ba GIT binary patch literal 58603 zcmcG#XH=72&^C$`5tJwhC=hCB(uz6bJ}vWA9#Bk>GzMc%iAMoY9W!n!!!2F0!lo~>;g3$psYmj5V98N>&$WVS zc~bY4Zs=*tBn}>a4v)A{aGQ9Oz7$scvtsC4UN1+^pja>T2i^ z6HY=2k=lWi){2$W%aeJYB&VA#^E^RZ!Cm@!0$9Z#tl|ez50}!2l-7<*@4#jD;AFJX z867x?YEarooV0eloNkUREL{ecD)S;arw1pilPRI-1y*|xh6YF|dC9y;kx~zn(u~gP z#DP@ELq54#%gu!r8X-i?SzL=bysFazc@*7cUbAEAcyl&~Aa3T;B2}LA+ zn27j`r?NKL9XK(02T>U-F$HH4uz~PXEirk=j88Z*xmQnRt%W3XGdplOpK!vGdU#jX zV$aj+w>}gv7k&Cw*Sps-ydPcpJE87)X!g`N^t*TNN!b`q7O^Dnvy1&gS8>n%w&%BS zipW{*pkM0#+p2HY<=v+=-tH^A%_Vf=0xC|Fy%wHYc4&C7sd_9)`~F!!#PM2qsy&~^>#ADh6c{Kp``YB=aSuf&`IAT})Wv8UwmnR0zPfR)tqW=ll%{GtXM4VO% zx^WSeIL};M`4?PSACBJ=Tik=I8^l!);F6kgKKZ!(P8^=7IUTsB31nj>XmELdtNJSX^l@?rky7zX%sug$pgm6@A8~w&2hWxWp!0UMDWS4HsUC z3o6BBeZ-uKxthUS9=6R=)3UEV|A`alPa$oo*g(w5ogSpORkAL|4NY0jeDD z?P{gzcZm&j>PX6^4lerOW0Cm=!%i0}PUDU?wI{x9bpI9?E0_r?7q+z!ijeVrV!!`_2+ z%R4-k-YGEe6{;&D8yoke<~JHD8x%_J6b5g;c9XPLV#xF2sI7!7-?K3Z<=3nn=5mA( z88axyg#ZiVLXfgQ8^4`YG-fxxmCJN2bf(JYde~6pq)vR?^ZT!Cu|?ME>>(^wz3}U< zjYzh3v5s=z71{Scm)Pn*x;5n($s~bC@rh$Le6-PA)(&B$q#+^e9I(VF_Q9ctYpmZX zH8>M$TRwP3O>}p!uHJbLTZ>d;L%*2fjwN$_xAkJf($if?Qu1?6Jk?YLd&BYzG>BGl zB;M}7Z-e926O{)OSLKnt1zTOt926Ve8_yr&U(ln1DC1+TrMxvl8NbT?TpcN27QDl~ zHb#B(n>)xH&e_76t>dQJ9nanDmBe1av->oo0C*1o7>YR-p`+vnvwhi!OH-fZ0f<8+ z9|M8u3?fF@bVP5o=nu))7hgU_$o@?lZ?kFGL;VN z^FdO9c!8*gTsr+R@BLN#;v;hVD5I11eJh+dyKF)kbpW?Xp;mgtcK~Fl2sCgLVxl%! z#y1O0Eid@$?18uWJRlKTxJKZ~E~FncsIK`;qIdn%ey2U(z1^;rP# zJ?j-qkQv&7EvE}W7CWh=jvz8aaZl+_5zWQ-2GQ^h%zq|#0swAf-$o=_s=R$Gi&nH! zRALJ5X~7_s;2|NJGwq>Ci8_p>daUaqA>Fkpn3{?%9Yq9&xW;P0$`@SYLwyCChLkOI zO*Y-V*B`&8=7$%y9FtEqKp_v69nn9Q_uzI`N?IFV!gy!Ie!lIQwP3283nDqNoW?U~ z7UQ5E6ye{8qH>I7lQ=F}dv^|d0rdT*g$9Mu7&Sn@rZYV8RtG-@`suoDFt|$2k^2H6 zMo)SMqtxMSzLcrz@RA`bv2X>_=o=fBPbAdIkx3gYrRt?kV0Nkef)pZS@ag2s7*s)) zLF8pAxfCNFI+@3PZ^#)S`obJWxhf9X28NXV1btRj?ENqa2jr@IhtY6ee>c+;Ja*4j zAQH{;7!3OgQV~Nm0JC$d6ETR)l}qQA7y%Bh=MIp^12Zdcyq~<KDfio}^|_*=U^wD+7Oy5ELm8hx1`78d606BauIn>8*RRUkXR2F0o zRcmgMs72?`kq3UdVE~&tC9v&{o&<8|GkFW9u*h#pvu#d6VjS3#1S%Cxl04i{6_vzK zf4?W>NIo#q(fGz8o zsuYUWmzz$Wy8Xx7ya+#Z&(96_^sda$A>G^KQBYyUNOz9QjrxQ7o(kg5 zQzN|n=q;G(_QP9!L9|dy{%`~otot3Wcv{3}+-G$Kfh8IGOwSVm4(<$)l^=Muh(R4t zCMo&fkV@`R4m4=_FiPUSQ;YGb2+sB6N_ca1<2}_#>UsS6T9OMT&|NCZQ?d z(d%5c47>1~a8{fzl#>b^m1VBG{ehj=md7Y^kl)h%tJd@O?=9p%PL7gkPqx$WN$4i?S5rY9tg6jo6`%BPmEz5y|QT_fj;%mN}xnW#@JTwMCs;OSaz7!0v zEMI-yVYc%ynq*sl_CK~LkHFB1%}7a-IURoRaf6il!f5w~YFtoK>O4!TCz@vKHhxM7 zhIy)HwW)tvkTc%8G zi#I`01MuVVO$ymmeKa1KbVaBW&p(X@jmgv!I(50{+;`r5!AtyIJYn8@6nO){j6O8K z>-+6iIWxyFn-NYSQ4_&`u(l*n5!5Dh-qQI7NFphnBjoQ39Xcl0giwP3LGhpuFT|(= z9F zT3JmxEt%gTZ3pc*s0WA<$DJc&u2jpW~0P@AD>si>p)F-=eT zv!W&FNoige>p;AACv5u0OS65m+$qBm+}(No@o|w+EaB8ZwTw#Dkt3Ck8=qobW7a&4 z*jTeElPV;C*uUWm6M#~cCi<49xC87G?KLxaO zsk&lBI3(GU8OloXb&_lr3wWp)+~RKhi!w_qDj3w`cAYgPIiZO!kXI8A+Zi8FhnV%= zDAnn!sG#V8s*9*9Q_^IH@|9k6p$*~j!9>|^5&!*tsXxY^nk4+S(hE-lFcm%HBv6ZL zAYKJYErO@zdFAqWY19h_TSHXg4|^)#uC)S|XjyCq%MC%TXOv+LnzA-ZFOW*|NCHTK z1P`;CyK2Hb)AR<6pN)# zAR6SE+=?@^RGS^ma{*}mXY*T8$$XIyTdMXWu_y&SEClRi)6NvuLjWc?S)mC#FOMs@23s0`0BXeBlVPyBt-^ zKfc|D&xv@%d7|=DOC<-$Pv2QtDZc@#yR&PR1&7kapr!;(jjV1AD2v!s#$*o!F_CKN z58qbU^sq<1@O#>K18nppTavcYiMqydzU`)Wii%Y>CD1mmhP{S@kI=fV=>&NGuKRqV zWo7W_Zu@^gcPbXVEaVVTpEfCt;I8~;@mrDpWCEChQ0-Lc`&TAHw! z#YZ7`_m8{WAMToNtecc_LLJPX>YJL<;v>AH)Y$a3ybnK=YM-Ylq2~;$dxNLU`K z<+q>mRmcWWI)8^B?nG>FZqh{)P2?s2?O*oT^hjKQNi-@vXdksk)REm&f?8Q25H}Oa z`o0pvSRQ170Co1-@jf7AL^A*&s#YB62+4qLVKF1O1L*KO+cZPO&L{fD9y(`&e*oUCgAa1)k2+P7pz1sz8a8RHZ4#mKfZg+ zs?H}RWDtMQFWO4Z4e;R)$AI6ja?fn*zg#|s9merE7kD!<-dH1njUnubL8ol+qyr7n zVovxvX$nxWYT8kSg)FLC{d@xn{WS~oydlDJVh5$*3o9|G>;wacg8PGR%5Kd*y7*}q zOSL8WC{EJSipO}dP4zeP_b80*_H6&};R!UAN!+w}xDC{3>bX9ZuQ|u}(el(DO~BI+ zt3tbjfF|$%BpYVuZ-fPrYQfbto@t^=O8fWn`8pEi)4>GHR!mR`383_bsZehOs5zHq z#*T+W@JTa748v~nbQ z?DexG8Ca-o#-ZMnrFj1_y61g%m4pWIfEQ%9(_38&p&QOmE>QYq^Jr= zuN53s#L=nzxa@R&i=_c@l&bdE)OPITOFAlZdV`4Wo zRBP9WR&(i7qQq+s;?0*%;QV#c7ZG%HNjpTd>5qYn?q?VJg9|lf!Bi>n9>+3G{!Jkqq!UH!U`cEM!DM15CQzn_q z;zUKuSKe}n@uoB+j#bDX2m><@6<^tWRY>_S4Yh-^tZBk$e6oN3&eFxNh4v1mV!Ox{JfXXvPS__y zQ2k&26#`NCLLDEbmM9+vgSaFrNcix8zHb5EN(ga%pybHDakh)JMQ|sC0A{cbCp)7} z$Q#bT{T{K^FLdDU2mUM#Xm6CHpY^HYf&&wXylKmwIb6f{*BAIt=Yrb)%PDL-EV%AI6 z#{ZH~H2=6KF-%9^};UAzRzM@%SI1v9x6YlX#g+xp z9D20)brC+S`!8SJ2cRoACcR|eYBlxlZnC_x!B?uLKB$0gGGy8l2k|=)8l(1KnbiN2 z$|34cC6UzP&Sr&O>6pK+T%@i{G4z2`7OeJmHbVopoB?g-zcY0miP`^4qXy6^Za_1| zu*uGP72y!Cmmhf0H1H|mw*G;DP~$|nGoc37LL8LwUq(IV=86iL$NXJz<_AcDOtyY* zjypwfy306kM(kGh1&P*uVbFS&wZ<)gPL0Ou3(%%82g0m`12qr_;i{XGXiS$DTu;IK z@*K8@oSnwZZ@jbV+uiC?wzLbf+(~p6f2Sw}V#IJE^R$$YFcIJ5M_`F-)hlCvpKeP2 zD8W*o%M;s7qBR_3zM09=PjmpExywsHsd($`1fh^0v^Hi5ppGGv(P-V>e4<<1x2%9rM!6jTmd`{Mnp#qUpu^;O#Z@`n4DeGi9~H?uCBofW}o zqJ18Bs5tu0y*BVGs*hs9b~d&%Ki0XmIjHCvZuQ;rRZoeT0`=+mNI<`1!+$P!Tw>nN zuDs`tB^pM#AZgTMfP2Udsf{i=BcE}8L3&eT=lM}DLFhAyY$us&T^b8SfzO`&=jyk@ z&PtxK3nopx;2nyK476`%6*I{Q6#dU}37dhgW7Yg+87;~C${6}grg1`scQ2Z3z40%HP+u-5j046~S~ znwMx{POLyw>@9|7Q)lTt^!Sd&PC~4#d^lnF>vI+1Cr;k>$tu6(Ifi!i@DcvRFc>@>luPx|G6S5z-cth3{dl{-oy;B>3yKxVBrC24s9|M)ie6JN!(m=}-Prk}V zoy``E_THlhoBeIa*7h{VJ!+PB>kl+^c09<*%=DKmt+}Vzf~B^!w{N~mU$y8Zru z!1F5G1yEe|a**e|BqOKd#Q;o&m)G~C#F1HFgjSNnu4ARcKtF`UiJpf>>5 z4t2rq43D4q*^UoU-U^(meLG#phMO&1*!m)SwIZqoejVKlKKoQ=Wml;FPBCAxRxuL5 z0cJ|~@5{$XM4)arK_;)+g!szw+a~_6O#AYCG-rsU*mCzKSUI3et6fo?(3&?5uTz3B zk_wOoPb-c*Db*kb%HA*sf{>VDwUg%hKsj$!oa@oitLCaZmA8Jf@Gx9J%h)C5J?&<}dZn-UaZ{$LX0G z5fL4Z?02XnHBH0!d-6Go4giw-)}E&&iOOw2d(Yuv?sANSTr`U9H?UwtpL}r%b4{)w zAMW#&KhF<3&>O`gBZ;v@ZOqo@V5M%O65FG|3hKP^@1)4v{Rh?NxC@LzT~M7G9|M(z z6+1|M7Z2$lGceF4%$A7kM(HqegS&RzjUn=0#FI&Hld7-2%3hz+s(1_s(M(Dk=awi` zv+pnoap`x@7$zR@X}>0!EAWO+Fcqr5CEZr_AqOg-{(S%Ry@*HeY1Y^AN=$9)@81hY zHXqjAs8GQS2JBC%#irW#s>)(0lmV2f)sKr6jTqa6oU|roJ4KvU^Egeft>gk7bV*u+ z?oNF_xBoN$(l~y4NvEcRO(6qneNK2LC_GlHxXO(phV0sst3;%Z&oqwkp_U10?>++V zo?86zy7Kw{rIq(_6p)KloL%Be90N$*>rQuV@NBA5j^f7v&zQ7WZWhZH$JgGjF zZxb0895`C2`*)>=dbH7EOEWL6KGq-B@Gicw&mP5j&=B=wQz)a$-e+_4nq`^Qy`V$N zt4WR{A8WJwfiLR|Y~LT<1RKZ4m_KYl+B)^*Tt!|*2mnAn?YKVC(yzf6~eSsDE z#=9=nd1&{l3$}BWlwWiRY}4};?RY|GWu(kp8ST=({lQ|;O&nlxwEn$c2&p&#D1_M5 z7>YT)Ec>-nY6ZD8%Hx9Ea)4$BDU{I-%v*yZ8~T|^hPkO6$z9oT~0{8-TU zrY9z5+KNsdaP&e2OYQ}!5xOkw`jT??NWiq^_0ifo*5`*0@Zy}eSV+Tod}3$zw})G3 zsplIbb9Z*QR+BOjjiF9>XtML0LH?I-Y0JZ-Bm=+$0b8B#kt>w$)XD=<`P@y#vuAeW z&!2PcA2Rto1rLYywk&LZ5!{k^%xv0l%y0AA+C*9)2$`V4YC=?J3N}n&;}H4GZGs& z8MDZfpzg!Uw!bycRb*AnU%yJ~)2HhxPp!D;gxsmCaA245x;TZ(&Ara;M{HkrV3(chCFm=Ud`ao7%vEvdcA`<4$UO&%b%mYWSbO| zIj{^-&t=;MY7u7R>mRSq29pw^%ip2&ojhN7e%NuXQBGlC(`#dUik;B40Y9c>Btp)b zqeEuMf7rTH_hCHU+ME0^h+mG;C&4Jebc`)oePP67Fxf%$^ktMDMtxF%&;#}DC}n4) z*GfL@0pp*H!9L~g7-bMdyh5$4zczorj@KgddW}nv$uv$D+u=tia{g_7iK8R?jCSsF_V?5KM1N znP?V&jpxbeC_(j;L?H0zIiKi>Nzv<5&N)WB_UG|?Byz#P&dr>AepJBFBlPMUNI$&h zk+_kbwgxmANVbk#ec2oFmC!CFtNcV*xHu`qS#85~Q>(XjtjYp84(n*RllPS-qw>QO z&krSrrDgPgKR?&I2PT%>tG&g@sM9R8z~QI*H=*-)7cBG3+a@Zv3l%GjQg#4$XnOt3 z1BSD({Ue=ctsRi0f-n4vZ=AbD(6@(Alv0r*^Ae8L`lC z#6W;XIr!AJ=)D;tITyNw9tTD<1bpVHd-4-?uYNrx0%TCFj=bZ(DmWbyLI}hp1H~=o z9yg6xPVSXlT%7(r>Ghi19Zp0RN>BT&+2Go z+K>C1nP8&k`pOtxC3C>i~zfB&7$ zDjQ^u*~#h?_Gno?eMiDmR|0t|q4Pwb;lSOW&kC_yhT2crN+DH1vPi=t_i`C`9JQcJ zrS7iME$*-_9-AwBBX;5<*A_XtAYdkNcY(u52r!xToheD;^RaF z{(MP_cqosAj|szXc`ljIO7guXWTG|%c6zQ)MaYsgLzFkq27yz|QUJ&&veR%*6@uo=*h{>m1kiMwTkc;<05WWb?pjDX6;_!JNTH z#pZZak2*>(%7E^t=|_+|A|@A9-|&%dLKp(s$s;m`+=H-aziQIZ@7kzwB6)SWx|rd? zgS0D(cdGLv0XqED`LHtZ-84O)WUekw(d#0D&xqJ=2H88@*Jg-p$8S*VBOiFz?9AqI z<1}Bc(|=63_Xf3UczeXEjMvzEr|m#U&p_M2xmuEmw=ZwN>UaG4DB80yhnLrn82F@p zl5fQdh=4f82USn!i);q-{EHY)m+iH!G~F6dp#J1Po>@7pyMR zoA+@0wkx#J4GK3^#zAc{|^$&Yo|&rTK1MHrr41RmO!X zS1FVE?(R0)xhVvrT4g@UQ5w~zZBVCWRrvn=-Nad$T~_R;-P1Mh_ohbm`%6Tt!J+RBQF&ik(QB`n;Ix zn~a|QK5VnwUDHMJ)sk%EbgI=C7+FaU93ayWCrm2$Z(S>01>d zEsB`PTYxr$VFoYjY1}9cr!q6pi!3LuFZ9*MwJcXru72-~n`0-PNuu~ND?X}RZ3eD< zqSztuw<*$NfdD6JH7`|Nyp;2;Pv^yh@pvU9ynfcb80Ek7rl2Oa;nnKa2o~Q4+TgY208AV?eTW+>W?Wk}-Th>->HoeyP zNA9hDIovHB(IUW7@5B^x5CK3C;7Fc7Dq+EeV5p)*H$LHYBiT?Lr%5e8ql^rN^nP;R zDz_N4;jTUG8=VoE6s$O-%QO~5zqoA;zeueF3hyv!apvtyJ2(TzHiXWoS9Vv^5B6<% znoV5GTfVWiz-phg)`AN^0N#Z=>^%m)SJ82dr=N}|djw1=FN23|kdSdWyXE5%bh@b>;Eg@w9aqNVY}%h&lI6J(DfJg(Q$rS$$EU2@m7sY8(sFCOwZo586mQ zblJef8Qn!4XD%)RU*b>q4%|DwG5lSw)zF0JHw8>B8%&&bf$AtbQbRa-&u@Dzw#pwG zz&|_HWzu)56iu=*^XE!kLq4^J?#wozLmE7}z3-vsZ+kXC2sc_-ewIxclwMA`|Ik9O z=Y^3Tg2dp^nURdnEkQN!UOYix+c0e`7AkEOLVqm;j7gL z)T38q;_sL3E5BTlxzCteG~GXqcbuM(TIg+6PYwo=%=V9XIo16INZUV5T^Ndol0YpT zgo}7=KAQU#)FAbq&-gh-|6>eBEvwcK9YJ9J4J7!!l~#_Ix@hZ%GCCkgvep;2e&HS8 zf;+K&d-dnu2lY`_zCW~98fVC&)BW~)#29tl`eoM`)68kRnt{r5uN93xn#S z>g#8v5(y45lv$-a)^RouQ(KAY>N_x=_a7f_+<_bX8TzA+=(SYrYdqrD0%TRC)>Z88 zj$_U-KmHQG!}@Mb9*VviU99?pH>x^+<8gXHz9I)-K)_vN4^_X!c4$2nkb|5740qpX zyGtChggJkjP+I=LGmdUfmCkICGH>7CGRRWrcUA`7T+J5`3uKMV1>{IOnj)!G)7imO z(;=36qV^yHAaX9=rmi(<)jsk#CHL+~UM7GgT%h_zLc>@;iqm{3K53PEcp?hZ#m>`O zkf6wl?|G>y9n@$-D%I3b!M@fxhFG>Tdhr^Vbe$gh*2@W1R6LW2rD_j3oG@sR%q+=F zCGd3SDYn*C1I*vM4aep-L26opWp+Fhj>2R`q(s8zq7oSu+X~me7ia)n(8wxu)~f2} z#;hqv3Shu^1oqOYu5g~otDfe!xNe$3Ld=dU;FVJ?9ejclDzXvhJSgr#tVbHiXu(m? zhcJ>ho~q_|q6eC+#?22NOrj0aIW~ks=ai>_<)=0OzC>7tYa0-QJ(-^jz-vCSbqRO5 zY#WiG8a8fk@sJd8??1&SsTmfHEHByD6jWCeB5mW?3g&4sqsN{eoHj1D9Fa>H1Vzki z%ZG;P?NA>Ul$mRHcs}&spZDzH%A_v4smFYiwlcrP_xRbT{UE2`lY|fB>AmBQ2MPIy zN6*j1j=rrq6GPts-k(c;On1Ho-c`Bm8sGXQSkcnF588^VpaQ-?#l&sF0)il6uWVeZ zsC>MU1wF=Hvm39IUTZv9KekmweIO2}Vth!k{s~R};Nz2|TH!)4 ziv{D@@Q zaCJa?(_^U3!v-cN4(L6B7hJoHMr~*i9t6bs^UM9ZhQgi! z19(>Z`Gs_&LO2paEJfSts)sP{ohh~l?cNjQA60SR;C0-o@(8CV`Af2V-L)#4BOUOP zBYhhNQis!8i_y+Q8^`clZ?*{bT^-bGO9uow4QU3jn!!zKv4okKnbg&=Tv6V7ZJZhR zTD6xM_XitW@wL`jMrZNox_AiXbkN*jDkpZM^lLDkh236;N$fY~i}TYIb)+=$NH-@` zJQy^i3v9JnXszgfS$BLKDvR3S_W04Co+L}z@hejgj^2|_m;~BAoNdCUwN%tSM4Te) zefzgJhiKM4*77E5Ny^qS)t~-;`;rn)7~&R!8TwJEs%t^Vi7(d%cj698$}ZYUcRe?a zWX6vF>_}Ju(kSHaQY?C9hpx&y$0;<&1<~NNpOtl=Kscf7c`FrpKBcKK&C zPml`%gRVSV8p&{Yt7TWd*3atOW5H(l3?&L40iv)9fPrLX##m7B67b6g%k3uxJi_+U z&mm0EMZOcVc;IdT32F^Q3Rq!77)bwQ^2e=rURC1qKqJAAL^dvmQp&ft+P1g0G(Xpg z9mVT0gggF>ZsA&M|M}_i3U|F#UdgfjHn=@5(REj7yVUD5+X+pcg!aGOH8~mxI~euW zVQblLmT}~nJN1U)h*dq!S6Sm#GSpSq*{)6}(eU9dq8w20G|eWGT~mSf{>=K`#A{^x z_X|D9#^=H7TUczkT>B<=i8)aEdOcQ->3Y@88f&5&GxVzp>Ea4dCN1FAarK|}CVf_` zn7iIC_ttANy+G1A7ErqG!8b2EX|+TlF5Wah>v>GdhmViAc)*Q$W%F>B2yWMeZ}z6jGl{mE*AhHc+YgYv7SHh<{0%RIA2cG`d z)6jy#9+~;4NpIjDxa+KM!y-+dl0Ce^KrbzeE6eqRKtk{j1I@h?GOb0a^ng`vvO9n- z6#@J){*i!al4DAUco04v!(J_bN6XlU&tb1ZEUA>Ci_|uaYqOvHo_1JtAr1ma>9Hvn z3_^Q*8<#4fabYX}w#EWMl6nmlm64jZF8+YYq{!G$|IYX4vFrqlI-bD!UdA1bjpMRd&DYo7{TmpDH5Mg&3>kMn)Vk7#Pf8;VtXk6Sp2KDcr6( z#2cc)|HyW=(_nweFJZ*;nY-TgYVTY<3)t9;*@0-ry8b>;IHPofn7-@tebJW!*3T>cBMFKL=5tZ%4$C+=>Yruo4U8(a7}H z*M4r0^%DE@`bxA5R?hT*#);?sP8=F@nc>#yFx^$cnolGaPKZrhn3_N;kmRl}cZfrT z@A5N7Yf;F(KFU!=={nkYf45@%PoF3Gl9_M-z6~gfC!OK1=eNq<37}O<+AoxIuX%3K zY}~c|y`sgJWhaY9#s?EU7CZIW`otasB~|2=`{rQmeTF?d@my2Z0HQgg!t_?F&Ts7V zOgMgstTTK{-q+><(5b8ixwqi9Z)QJbKf>CL7-Nd+<=+Vzq9LSryi8FFXNPu3{B9C9 zoj&cj58wxjNVZRUop5$?)>8nLdl|eqmx4Qh<_gK)$UmVpPO)Wod2Nd}f!Z^=o~j-A zc78r>P1Ja0pSFy*+gO=DOYTuf{+CMLW)=Fju>P&PETqHPYx$Ys_g^I*{PCI#ypNhU z#s{yrE-vO6>%#@N`xESiD!6PMzsw7(crC;^1JTqqf$%FEgkxbQsy}(1Lv@xVqW*06ogDee+2t0u?%#!( zcm_Gs)`gkI?=GKa$3<=CcOQ^NQ~e_nvHELvJ=7I6_2TFIwNz5)I}=AE&2(dr#jaY2 z2GnoE>72azY_Kn!5O9l|s#k+uw}p$;J4Z6W6V?-$7wne~n+;x69H*sz5nkU&C5~(Odl$j|9fkPd4r*cdHUt6S6UoVDAvUhE@fuU|Z()SxY zVm=RmE6>w5Ek#CsAF&h;A$|%Q@o>w{hOIB~ps;(6399w!uGeW6iAJO-&pQ(KT;X2{ z;m?|A+wt8l;+V57p@h~!J-|OqSshhKxho-kuGHd?CZai|hZ4Bk(dJflB^na5A8oBs z2KDe9Z(W2)e@utD7>xVqSAUCqp09l2p4XXId*su%@Qx_$=w7$5Ozf{e7Yp>A51if_ zgtV%Q1uGtcvWx+XWht$L0k0%x_Z*kbS4$=;x$mLy^{ucz5DaFOSTYTq@&bRP31*Ut zP)v{Lf=Rd_QzK~>St0-qe7kp0@?22gYKhFiYF~#23(;BRT!7? zl@Mr?P55UvmH$AT}lxnm@{0aaaLF^PuWK zpIbAhx)MjPyLUiQdh`3>6^vNYT93h)d56F(>#|D9nb||J7b>GvdKN8~#^RgNZO_g< zcWl?vfqi+a_B8iDeB0Y~h(R^Fb&?+k$0-J3%w5>UG)Tt6o}d_hc{cNr*)7#Nb zje=7xgR^RmY&y-xogV}Ovia}wm0~_P7SwYjGcIkif4itPfjeDeLtG%lR&@);HcjZ$9D|x>jGD# z4D3jx#9c!@QG>}RA7p7-Kl5+TkpZg7G+*&*|F#dx_PlFhoC!7QIwpK&Gjir|DoN#C zv&;h!+vCLV|Ls2Me{D%&==+li6@WXKb9%)gK5EV!zHn5e^_5ACE`aHE>vAV)^)u<0 z`TfGi z$5sDeO?(fU5jkq@O5UuHpgC(h>@>@*`3|3Z5QLrsug}^`k5n=!9DjEt6CH|iU3did zEUJS(q#2-it>>DTQls?q;k&JpbMxwB+W@*S{GN{I-HQ#IKx=Dvg;773XC4iWYW@vP z@CuEA+A4NzX*H8uPPwIiACpVE&fh`Z97~@c27q)T@;JjtXAXb8LMm^%>WJ8M>|Q-J zaP))os^+s#Vqn6wsQP5Z3k*y`KW`w42frqIR^9(njn*eN-G;+P7XFHNSH@W94MQp7 z+_}-?aiqW{b@jl99M*^#FWyXNlHFKn_Wm6(wfTH6+wS-V9 z8S2v2_@lz-|Ijd%=;$4^fOa?;>Y}zbCWf*P75=fG%cNT&fkww@;#Yt1b;;7OLO%@s zXmRj+Ll8$zRj?FzRWsOuY5E_gKm;E>_#UTECNW9naJA!v%TNUL;ut^{m+AmN&c)b%yPix=7^G zfg&bpWSqQijg7Y;Qzs;l&(_g)ON^u5}G*!iuY?YJaor?!kn>xq*q) z@XTBI40vvT7faggmD!9n^%_c|wa~pIj#p_Lq9f zjR>F@U}1kx{mf|T1yXoD(_DCFnO&;P%vCRrW5*g~=Fi0H*Nw;*TCvz#pT*#t!;z__ zN)~o?#c7}Yx=zjUjhk#u@gO?UB$~{4u?*b%&qdI{@Hj(`TN0jz7Vn z2_~!mk$E6heCfX`sjKM|H~-z&8qL#PYrtE}B`b@;U&5u?%iRC-e$+r*EkN1jQktOx zD}YbkRE)e`sJy)EFDh=J+3+lvtSlFotUIXfE((2<0cTzPAOV1HuCIn2U&a@ZSMi}0 zYpGH=0>TavFCR0L^E;oP9)535k*f~{<-8lVbAPwhKZ1}5VwL6=KNwxpnIwWgYoUb4 z;?G!Rwka2G?r}B8zLXKCYkTc^-;F-ta`;e`jaZWBdqa9Fb7!HS*xA0w!;-S8s;c>b z0&5Vch0fVlRTc0%_6;LJikoA%4z!_zKxD%Tn8X%NjTF4A48m3BXs6);iM`f%Ew zt5;*8_VxlDTBAwcn9RY>#WWW^#4Dw%f4nM=#h1;GQG1qr=+q$79DOveXW}eRn+7@Bed3J&vN`tNGa=bzbIgQnN<~uid-eG}zW=`- zk9$1F{k)&A>$>iVHa_z%?;qbsU~NBTly>AGw=HAASx=VO7xE8uxktAex(p#wkN51o zq<;VN?H}DP9CI4j8KwQahg4tKb%{p=z2DA-R`eZH~&pZbg#>;kcVaA^7sBj zXLybaZt@A6rtA>|JIt)IifDk;BO&++J4-n8Q6Xqy*SXDnOl-J{a`43l#tu71%tqpx!nJU1yFSoqJgAO7*`Z;oz1vNtf2-a zQk~KTZUeDyKi1fK92l7yV9e!uHL+R54I=Hj9FUlh>um&^iiYtb%NLCk_o`BPA{1@6 ztJsnj4(U*qt^qE?x9y#w+B0qvx)zes`Ur>ZX2mT zxtkuv@LOfUsd&mz`u;L;*Yn4pI_nrl$kCC0p4)iAOzPgq#ofsGvp|J6g-VzHnrl7bYP*DxatA!Q}BxUbYZMX{}ubb8wB=_j%@fW1ju`wtKh)8CfVw%5?pk?WvYYp~Jg*)1iGOFCx3?AK_^fIlBkVun7j! z@-$a@K?XZ+I$wE^W$AW2+cb|f{;-@tDTV!D%FjQbOA8mkiwMC>veQ83HWJb3@2OW= ze+O!Z6t9CA$^}-*(zIo$DD)+}-ZVTwF=baTtP+l0_;ntQ*wM0-R~0={4^pC5;!YTZ zqKubKE2hDTcbyR=Q+A9W01v_ioKGbk_ zgT!@l8-xl*1zY){7&AJYJdC7Ry;MR1UHJO`dTb9@C{@X=Ux5Ys5i@=^x3WzIMWo|* ziq|4i*F8$8)-Z8$rLPTqUO9Y(IYPM+f=l!tO}(TK0^o{YTtKCzYOVQwHmXP5DxJ~e zB+R9ycjmt0X2G;{bn15PI9yAqn2kc1-Q-Dd4kr1!eA!mwXZEV|v84SGvYh6;`_?s2 z?(4I+n8qxsf?G-p2`>;1Kbhr>KO}3V-zzNsWrxV{{u|r(eElI)^Cj)_+gJB2Jde3w zRZ5pE6V~2ai(g6EBWwI? zo@5p)Pi0PhPL0)QUHe6O9e*|!cV{BRGf@O`m)&i9Ot=KPX_gN8*r3^WomLk~wUSS| zY5}Pm4R|h@sz?QptUkxfD3kUY*5ePNQV|yBVVi6IA6E~?64O9&c){dqGmK8tdT*+{ z$336tRlNswfwf&~ic9^LmvMJ)LBwvrb2|?wWwW-Mw+(i8OBP3%Lu~_X{Upt-%^NJ? zRZ|5Zfmxq!7(jP2**x0bemap$9q3rHFurjzvh+pAF_;jw5~lH&p&|8Ha(jIwXK<$C z&Gg50CsMCwe@t0vGOy^dnTru^c^lL z^q#yP7t&#;0P(4oxxbkPz%<-#b$EWqZ9A8S7lEy+CE5j@qC;FpxUj*xqK_~4O8-tn ziv3-gi?ur@*L}4ZLzW5%T|7KYl<)ecz=7l!P3>nT)%bSLJzvc{hojlnQr+P1Q_-G# z#3GL(W{44sNCM~~+5Yr}65;Adm(0l=ken9C8`k`s}AMYc=RqJmi4E4qIBFB$+ z;2~sMk=oLv!Ewa?qX+o?J7utN$U#NwY?`S;CBOp2K}*SG-d35uNb0a(_Ss#oee;QF zdPY_DPsXQIew!BBi|tH4Bhq)G(3J!+CKS1b%@BUMt>9~y{N*ZsrwiI z;M2KiSqZm!OyWlU>x>)^p^g8o%C~o_P%?(bpX5%W!?;wCS9M>)vtP=ql}+i~2|Ts~3~p}zobT`= zJGP#W(;Lpr*0!1r5XveHga2ENm|wqnQpjJ|LC;IslB8!9x%7e?5kE$;Zm=ctmpeG# zod@Df^+W3oPp^+!*Fo7eZ-rJ3O7Fe{imcWnpgiN&|21SD5~x}X{fQ6VG7fz{r7Fv+ z_SVR^F}wQ$kUcR)f~#3hclD9-qsm`aNQQm9YS@_VUruB#RPZ8-U1r`qIKC<1t&kR9 zB&q7n7=qin+1;f4?83Ny6P8(Yur_umwGWy`z{93LQ`l$%%;OXXw3};O4FwNts_59f z&%!@P^X-``=_R3X>gw#(*Tz3{f0J3(qWqa$PUvNdcYpWcAG4OHXEJ{Tzap**)Nt`2 z@&uax_|lTLTZa^V?&`0L+_ccaAs2CZp)|Rb>EKFEwud=$wr8O-n5ycvKZ;>T|AGfR zI4ix-GT#z7#w^-7I?z07SPh>fm&d21?{@`>1QJ8{Yl2)10opM*glk>yL^-v;04NA~ zvEdYVA;&~E!SU%{SuVL6ir$E=^R?`t#`q%bKyCRG%}%p_1a})AC6_)@H{!LcKjyoF z&0p?MepOVmIr{U`OTy-z&(EgsoATog&A;tfihUWL0FUe#Yzd((Q&@Ib}a1Z zo{%vKq&NsJQ>swf_XG1%CiNse7qIaDN&1JDOqpNqNyM986Onglc;$pJUrdV86>s02 zC+hz(=HpqGyvO#AVtB2%3!Djl1)1-rHlI5DVvDTs`KraMsRp(c`LY69UO=T zPsrqQgj~G30E-&b{`bXee z7q@|h5^ zGZ++suhq}{2m;?XZFl#N^4QpO4{CfUcFSe`Ss*aygZ^$IPmEtn;Y=d6zRBV9{Xgbt z@TV&{jIsS$oJ@GLC;&L8nxScIck;w4 zX0?%c0qcy?B27F-T`(l9kY>D6!mAZ1!)L z2RPu%ZcF4a*NT(W<&Cw_SWul-1Je6=&&1@tb0vFgXD=^&+wmbXeo#h#lVl;H!{dsm z|Kq|?HDUjrhEE&a?tvaH{2%V_s!0S^B#+Z3-?LEVk-r9!R9GDVc6;@_sH;Sykf0bv z9kl?jxR6__zgtnNE+m;QRB`$h7ZRbT2*1~MvhJth?}GRIDCYBCRJ10<9>tVdYwO~7 z+1`G}&rvG5Tr6aZdb#YPAR_;2!fu{k1Vsx__cl*A6?w74EJDr=*I$p&g1z!&D%*yN zBSk7(E5X7QM!jsiA%a)<5sf&C19_LEf8I2C5kPiEx{u8r#hrI$#OB;#N-n3A* z&DwuQW%K4L{tTaq&paE|#|%tvBn%>FUNCf!=N#W}vA*rc?pybX&!yLLU-VJwlBMv~ z;XNegO+H)b{Hn;Vb-GQ39Q#E4L6G=ao#LMANG7WJoJB!2Ppd#5;b*5X>Z$G={z-4NL?1r;j1$$A5J?5YHwp3->fus25wi z$29Ibys*>E+L1C^GthIH7a*9t(p;)NnNDGI1sC~Kcbm}FKa^AI7s$7cc}~BzHCide z`Ygh8#m1lxRDQ7@n!Zsh3#|GnipdP`L-_SV7y16+?4d9JqhA{_o$AE95DLh}N|vaD z&LY}N+czxm7l*a`(3E-YmAB>Nf*B}&ORm|2G~?P}i0j+)Qf}GStNQ5f6(Gy!ym+VY zQ?1t=xMz_y-DLlaHhQ@H_Ot1^M2C0mDDt`bmBcHrtHTX{I+)NF2Y7ckKvg!mf`04Z zNCYqcGp~BQoS?gT20u+Rf&4vxdgThlmY>iX)9ksG=iIYz?=S0XzmqRtRo^*KsIF}BEr{cm z&O1T_D~%}1)Tg;>EHkKPdxec(Sld^56!)jE6qT9?KALb&|NNp^Gp}O?y1|p7)EU3t zhVC{p!R_eK6kEW><1f0;z1aXGAvQCLVgqK`yvYD;R!3H$1v?@fs`>MHbs|G)8uqiU zOX}ghu{}F+=*M3iWp_XRle>C?mDj z(E7dEAGVs_ZinFl>A~CYs!NGCN*y6e3Txa zr7jr<$)#7iHcpG~SK?*%NawOH!$#vwilDAfQI?lH7DOMNr8_O}(4qmR#ZGHB9+7{j z_ZyPIe-Y8$@BcYrLZQBLcZ4XGb1>yz$J+Jhd4&y4z}WYuYyWEaJ#=qs zX^}P!5{)lE2=-p@`HiLL zPy#3-|0uai1CRaxca$WtHPl=e#omXr$7B?V<&v3tu2z<$Z&g2ppCp7G=>KxyXlbeV zZopc~FmCL>LZ>YDA*Z?3A-kV7a(-B*8?5L#t7&+P{UZxeZ&=^I_umJj+5fg<-JYGecavT}GFBf(+rhn(d z%3I@VQ&zVr)vOsCu+{ypVe?(SGTY0RIwf75bZe6s@VJ}St0-i>To~SnMX-8NZ+9Zr;dx`)lMZC_(}ePPxSvUG2>f3XUk~6B~Zav zFrTf4K2$#i8mo&!a#zZsS9umchUed!_!zE8UM~E~-w=Lz)W) zZZGWRTf%dHFO={2*4)3;9FDhq1zGoAq3hYamgfgZHN0_sGs87$NbmqzKjx~~40yib zZ2tJ?)YPRIK$v^c`Z3h+)8E@ZC(4dJ^Y!v5kVZY}n`?>I`Bc&jCDZU9Ic`qB8`Ki?BdbPG1i8;6Olnm!UlG-}=^R5;;y z&4|dkKFLnGPsa?%h2SAGU}=CQTFIeEGhtdoIW{%8g;ivh+@`0}3qCKn)<4C3yOrz1 zni6{Z@U`UA&}90#jv9)`j%~@CxwzlbymnJc*e?Ccck(}D7e~G$!e3hQn*1_caA-{e zKfriDi}`nt*mADjD=RPOBdVZ!CNB3?I1n)oIznDtXmgFY;HENJdiJMVY_YC?nhqy- z+rmE9ZLY;%jNJ3n1@1+_ZrSPAR_QClL$zb=2VthDm1brH3tY)|>R&b3EcdOP5z=gz zsrELwHYfxveJtvria*7TvOEXb#s=PgKlwv^_omOM8xe!*H1v)L%k891Od?MsuS3#F z(}k$PW}2>v=M+VqM|rQ}zs*>9?(l_t$WDGTPXTt&l>M<>N;|r~M78~sE2s~|_H;{4 zqcK3sPeCnsh@RvpIhW$neq~;u$nL~yNYTLr2gJ1JrjH&qs9Y{GxsTB_)bW3FJQBFt zA|~;K1svq~Gr}wqlxYNkQ2Mqj%!&%K^59>M03YZ>g=H9JpKluk_VH0p6F!f<9;M+J zA0MB{%zM#xeq)#G+-LKIZhbI*8#hLLnc=-;yfElo&WnPfs>?Y5<~~w!#N%7#6o# zqh%@ue}HRP9;E!!1(?EnBZa3UVq@m%?5o-NNbbQ)`JW_^)0&Bbr>42cJk#9wN1Gqs zRFGkt)U#YF9=tS+q0848ZC?I*&F}fg;hvwO+A1%tC|(LAbLzbJdLMSUbP5&n9B#GL zK-m^<$bp}X&@~NcPx`dI?0y8K!KKcCpI!RPpBu90pH7GlVFPR!w+s%;+RxAJA_{i}OdI(gP`Qw1<=KK4<Aq|W+bAE1F@11@4pf?QSx)Ku# zZnAM#?=}2ROp~0Y`5tr~l9SFJ6Hw&mYT`9)ki-xfP6hh7ng4p^v2X51-}TLk;CGu# zCJf*FO{4zK&sA!8XFuwuvb8dt4DY~sy_}Yi#esSUcigh#ppuu?)?GZ`2V-^xcD}Gu zP%g8630^AjnjV#$(DJ8xLglQ`DKI(3&o|gVC~fSc^4ny*5obV%l5tctJuE|_qVfs- zj7U))sUKnk8*R)gShDCq^kzqZO?vl8_|N+v9(PA>sU)aDK?0T6ls=H3b3Ht946%3h zMU_<66x8o+>z))%O-fDxs$KP8Hiv>T?;2s6psNMDK87AEMuh~8C(xp(ja)@(-MI zLr>$WBk*i`U*`Vx*~)4`0DSe{PKr)Q<1IEEICs0w1dxD;rUGR}U6WpisBGT4zuEDM zb%9)LYmn(^Ma|9wvz4GH_iV|p5(kd!?~8yu5Ls1E1;PEzJ86my2x4QUv9KSu!hgd z*%)0`HPsWVZd1WrEd4;?6u*D9|m8`B<^fRutTI#VuL$*VV<{{d-3=*oqX~x_@j?2hu(c^ z*l9K!bLPfWHx0jNIl}Bt8!tOEL`b(CC7NPbWR`Q7l>F`me*l7AjP68CR!VC2_07N1 z@p%5XGNbFnJj3%fx)@c6mqC)PqWOtd^LRW*>9BXddP$WTMDOnJ@6&6f2hU4$%3rD{sCMZPM5h1` z=g9lmW9gL__t)yFrQ1=X1;hAP&Sb*kce%RM%?A1E>5UdV#h%aU{cv9JUB*{ z_^&-XekAVVn8W~<3 z06*e{EzMf8{fRaDk53Mg`2Bg9XUN%&I@NMJRO+a$FQ^dT62g#>vn2f!ny}hHO*Lw`zXJcbyL$c2!UbFVmvEBv0UFwnjRptPw|C~Jq9{}k) z75sL6S1MBN7HK=l4$JDbnxVf1Ok1&mKfm1K{L5}j`Ox&bqV2b%+S6#p%MnYecuuy! zz^A{NFT|gGMz{F;`L(o~{+Wh8P$9JXYj~5glR-#nIAYl@>uSVjvgHS$pt5dLLC7$>7hO$Pmv`Ow)rdm+Zb%+uA4{6vvAS_M(=-2VRT5nT@_Xx{1^)ncNd+=>y{xyswGtFUTbs6CwkXK?Y=GVzF3R&VellcLzrY_y5#QQpvDS0HECa z*z>UDFJ#i|m$=)&IabcNbqz2wcX zlh#{N4q?ZR z?wFePqkVnNy4YfOz7EvAr)+Qlv?U4&T1wa0_a&MlGaYXIH`w=34Mdut6h0`N?;sNm z=~5in-u1DJTpV=z+sqVb}lctHH^fiN!YomszsgsTMZ7D*--4 z=^0`f?(tAv!{fW5F7AsmyuH0im~>5yex$S~Ho%gZXrQk~&j({pViSNRLfEM24Zu7+ z8@d9i3{EIbKY@T7F5>`2ARbT712gb(PFHIrU7w2jrIp`sKm6-tB;j!un6#H&oB+%G zC*OBiDo2qbm{BoVgVsl9{8xOoYnT%p9EJ);YrVfU&=6X?NU~+t5~-H_PaGLw%TdRh zFhba3!PEQK#tmaK`vQx06F^+j*E0$FFYx4m*7Sy!Sged@@vy2^!(BEbw2C!fMj6I1 zfNGVCkMa%@NKgQ}+v^LbQ>sUWkOv}(@%!y8mPg;p%SgVYl}N$UJ{72AZ?b9mTvO2O zXwdA9*u&`|so)x~lxg;G7};6*Vz?A+@^ePfS((t-bOWwgu4!Dt&8@vYcy>qt{8~ec6I4V0zdBS zj;!uDh7kI+K!@ATZ=QYk|2w|Z@s(KbAb6Dq3>|Y`m$M}V0VLW2*sG6oiOKZWLF1r4 zIzHKwH0Oba8`QLpP%Up^!aB<-Blg`u;Tg=hr9r~o9W(@7Cc~$36;&>VTUUU}dvp#!hUA(*blfJ@3m6AT} zD|Ohigj~ZKo5#JaIwwF}w|VZiP|FS2%k^vCESLZyXQqR}+dX4)VZ32!6VOG(AWW%c zUiFhSGcAvk?6SO@#*HKExaA)%^-#ey{{otV_C8Jn2b|>n0Gzn2I{KVoy#?743R^pF z%!Yqm6bTYMKK>m{gYQlHeB#nMZk+9?{^zm0B>MIyj*SswiA1S1G*BlyxW33JN@k;A zkBV~k9g^ywf>h>?O9(4Y&(T?!M<78-749ld>ike>%WH>zx9tqxWB_8DQ1XxS`JiE1 z`z1)1o?GsHZHcJ1G2+f^{~2A|<<*07XEFQn~g@g^q zcH6>R(_H{V#y7}l2-cqEutr{$O@VU}9j=`)OiM!nTd$6xUtb0oDgbjdrhC1H-cQhj zZ*i)dyK^4R9Dy5&D*OIuTOO8kLQ&H#8No_v#HL>kIPBTS+|~i&;p0utI5>Gz6)U010O5UH-_Io7GCia1j(>dhPb+XQIb?o5nC@p6d#7GF$^>J9S?-Qxc$gC0>7BvKjlOn;noqqQ-7xR|D6pE5_<@hu()CZivTUD7Z1j{xWct;1e4d-lO;GBYf(hoxQs#P zZ}(`3KQ&^mv-=IpJ_75>BCJ{Dl%8>Tw)gN+?4x=}mL6Pz9K9WDHvmYt29_0bV3kMe zo#7ah@9-!H&|t8wctB1mQcWy8Ec;-hL+kQFd_)D|3dDa!?`f3z+47W7+7=mwyx;W7UX{I;r=O6793DAmSApy&t&Q4~(!CL5>7?m&WXPTz& zvV)06kQ5Ey#5pA?^OLiPMfYNC6MBryl-k}-{Vt><%YoA|B|kgywD%;UYX>#jb?KO( z&AvS?9K}<~gsmAG`G|ZuF&^(WF5yW7wPP}e!o(lFZs5nx1lMGPDq&Wb=%!p~zuhDk zA65#{%T;Z`YR+mdL1<80b_V%#5hFhauem*O3Tm2=P_vw%tQwzEcJPlR=SL=jmE@FQ zI<A{af5_Ao0c>Bc#d=0Ft+=04U?OkOy)o2mbRs3x5X_<5-_6&oXz7qSrJO& z%Rzc6sjAb@JcsJ{dmV^@MaQocr7&_`J0`YCHIp&6>j{BfJ22^f|9t99biH{QWlGgK{yvyMI+bXq`^u8iOe!9`6EG>{m{K^9+4yZ50(9@{`p zw|9zRbi4zcseL$MzuccoBe?EPmft-Wl)$G$ksyQ*V>hX(z>8fugcfwh_uB(C2!7u0 zQd=qP9@8FZ&<}_7J=wm7BeMbX%Wip#Vd7^9WAv=>DHn5jXLOVQ04yV47Cn}z23@WqMfaWz z+xZ&kS=ajVVSm6XI=8ITMVnt4h}=Bbw+C*#L+^~q5svi-3X-MvV5z}28O_$iK4#OF z-TcGkP;?{HAQ!}X{uizkmJKp$)J$Y_8myz$c>*;lIteb*@;ZGTZRPY_bjOTy8FsO| zf-A2cD^#s8N?ps}o}_U3tJA#}#O|*61=Yhf&FG7rb_N}wo)cf0KJIwp{o3Wud#?b` zw0{O5O-I>&{Pq3#xZTqhi+@2q6Uy#RD%qUclV61d4{Rrj4szN%OtQY3bAU=cmXL(< zJJeUgfE&$fARbbrchDZ#x-P<13`_xY4-0R3a3_*A%b~|S2t-$OHHoX&%*wn8?x(D= z>1S&J`Wc?AQ$BAV+Y=CVPI<&1(x6*Uw}4_2JQ4wb~eW75#>8J-|;!@WMwH6c}p#JgDzy>8pPgp>xw4(u$O z#p{CB)fQHZB(c9)RQPXw-*T(@0Jz51a+T-j-3nL zFuTKfRrb)VX??dCI8i$8i>tNfR$_`jc7LI`rqT~clHu4)lh{06KA*d*spX8sHEq-- z6OuxJ14~8_2ThG zWu1A5EKi_k_K|C<@GW+iz%p$p?T7dhCI3{;Sw|NSK1aRzdE}FqgADd~A@3on&zaXL z6F1-Z0!6gY!QK5QTX`;g*iRa!tK)KE%D~DIKA4UuPuUV_xegKtdiFERPu{`#w2xyF z(&`oyUFA&RdJeuvP{MIEpc-r2@L(#U6E@UOwmM<=jVbI1#tYqkW9e;>R&z>i9bBV7 za(3VpNy;@2z6Bm!d+Vo*>eB=|bRQm5qO#ds$`0;?y&(l4v0ImL8;g%@bD)(&5ii7T@cuh4dvRfR^pq-xl( zd!BB0_qb%MF4@7#ORU9daa`qlduL{!e9LvHrcdp}Mp@_lV2%ZAEU6dUho$dyWy8}c z4bZmizHEQC%qHe?$>aGQe5d)8>W%5O#9;C}EE7K_ZY0(-A$+nsjx_NHEdoIeo+?`0 zdvjVS_eaR~UzS&~z|ozsk)KT3Gqu`PB88oykg+R4uJ9H4t&NX$v>y>hb0-R18%75p z(&bup+_e5&vay$O)DD4^vDvRv$pcw#?W{h@=}c^Fc}=+2mZiqw zKl56vTLK}XpyIRgR>KiR+Imx(z+P6cD;7yMDVvz|*?^Tdv| zU&28b&`D%iANu@7lLB!jfY&qip>hw0xn_f)uvasx2&7EZAhP5-4>Yu}(C&Pd{DGX~zRF-r_9dj%$aE5GzLc~ltaWLPtKQ7Z>zZfXiH6H6@odp6fzEaK;b>xWni-;U#^p+$c+GJHdwHK6CQXHV(5OqT?*4R zL~C&P%I;a|D!;d9zx)T50ceF zF?Yd@&ZvND!VMs?wg}*5x;f);YIlp!Pju$Ts@KPG4Y2D$6CUQsEO0L-<^wTm!^{ek zo>-F{3u+9-%(11!06rIBfXwk{lgJ_)H#A?Sl-WCtNP?aH!NG7-k`%QoL>bT%12PTNq+shN&cP;y6f*7kfKCV5 z!k?`n?uyDNJiKL7pI0bSv^|OIQ1{qIGWU5J&TP=gBw38t7wF*QC0e7JaPDMk;}UyK z5e0Kocg(0_H$59I&_ssc?EcSAZseF1WRmu%9!_cBGo>(b$ZGPF9jI_tY@tLkApu(- z0*wo}iOT{o_%irEZ|AH&8FauXY^a!NnR;6mJ^2|t`UHmUzBwj;%=|_@-t-Uv<0~`+ zKT&1i7~T2jp#20<;b`!yVxF_!<{i>w#YK|96^|Yv{IXffxVxsPkhdo4nw+ufd?pwV z8v$OxaJ((I^imO5j_cLK&)Sb8Cg{GhfBsLNJmDrZqoHpY#hIcuXobq$sNo>Et3g zs4Yba8a0)S>*L}+Vl=i}%lyWBck<8>rO-97$vOkrh-GvvU0tsp@_+*gyH2MQB z3ZVLKJF~fbHo!ToWq>oPScVH^BXt3l!_kHhIsE<*;;YWij2b15*$$q%hm(a->=qIW zWm9`BeI17xih}YD_8*A!doN@;*thbl*i&=(C~xb0e^x6p3SW+UdZ;CS{~N!}-}t4? zHftZ0_F7BI7K;f^E!Bh!rpbeN4v5nO#s)yp^PZ?wzt29J!&4rA45RQT?LJ|iPFXVI zOXGHN4P z!KpdkY3M|lIVxcZS}hkBGUOvG-D1z2m$LocWO}MzOCFvLGd~4O#7$J*kf(y@^U6OI z9SQuo`X`0D%a4bJ`H3#+-ZfVL#zN9;;6DU&M7;J)a_KbZJUccGOvGH(O;iuw{r?M2 z-3V{Mt&t+TONI+NVI4V{Rf5Bwy2R7|Shfw==a-!^E9SlCi-rwviAi9L5s+Q_{zFYx z?})cWUJ`gNmS_%lygfjQ$1N&DQ#-F5pYC1Q2f6j9fImDCSD-6@l$w^d%v#<*TP7X= zo(GfnOO(^V1z>U}cHWMi8{$Dd`#a6+;>msUj^lnH^j*}bu4y(>T;8#J>qxP+od*AA zZ)3#1E-Om(j1{O_hkCLYAht>So}fd;g-ftwYJT~!DB16xs$Fq;%}YsL4OAkV?k#Xw z^(*Hb;)DJOer)xi9_V#ESTf=^^}k?3M)W~2lI1i@U^nrjlGcl{@gz6u+fVfTxV`&B zaVv#>?Vnl_N2YP@0+q7V)0VTC_;rf*>1fK#uQ)|KvDR#u>uBoX(`ORRurcmlTbJT= zZ^FH;>5=eu8bLnFp;!`fJZ?|=M9?UYHnm(>B*j?$ESsKgSoyI@XhFsO9up=C#Jmt_ z`TBg#nBh1b&=e^-Gz^invnt0^ua2wI^C$KtK60cK6d4tD%j+xbt2!;9)ufhxwaqe5 ztLgi@U3G9M*5-iF0n?amTfTXgo8Palx`cre zt`q941Ad%ZPUrg)v@{28JV33gJMJ6X>YJY82VQC7iDN{tS&tYh*Y-%z&t`nF0fak) z;+E8b=Q`Y{p5S$@6LM%2)AQY+gdg^i-5QhT)^F-N_JzfeU&YIDUDL)+%RPr6qfUmg z+M&RB+km2StPW8=s)6)u64$Q2N|d^`ehrOzBx==MPLm1#8y4hs9rE;9$%_vC3-HpO zHu$z5i+Gkqr5Krb&h5eXcCSm?W4$$rqP!}4YK=rQ7B+AC-}Z2Ehl%VTF>x~@GnDS$ zJ;FJ!hiz{y4<6IDoscbaF5>H|tkX=84~x5aSO5Ng`!gv0%U|ud=CmJgO=^TLO}tW# zjTA!{c65DKww`w*gALKWCyTiwvvKxzc zZ{@WbrIN;QRTm1^qA@D(dovrjD9hcdF$^fL5QZ6l2SDcdIk;e+Mue#S zK%CL#oq63yv-Mr~hPkO+PnIo#YDa4(maTB=x{T1O>)7iEB@J**Z9`fw#nJG$sqZDx zb|9s|CJ#W-Zs9QU0qUuVL7;}xAth%5>Ou|J~18I88SDd z`YDf-1l#%=#bs)0GRS1!E`kjBD56cUt2Bku~U667)ur95Pj2q>3{&zxaBdys+i zeL-&l@2y7_w-{lZ8(&2h?Xwl1G8VO{xME=ytGJK^fu#Gy@C-t;v?lUBZw4!8adB#R z4uKFe%7?jm)LxB##ZyTyTz&Hk>_cM9W}5IpwPq6kBQ6htr0ZTm;q>karaE#gGq0FZ zcBsH}b7vy?#^kUbtM^kkJW{9jirbSun9G=T?O>8I#4nBsCroIX;*a zuqqhC>3x2S(!H~nlZ9=&=bLjgc<1X&B_jjmepM5Bw5`Vj7NaWS%zz~=4_TiOtjyFUvLTb2)F!EFCI?8)2BeYt<=4 z1AcbbCs?DMh6F2+0Jq>stFjGYJY6M%&HT-FRMyM%=Pi;fW(#m#W|k*IQ~k-QLN|4G z3-Q9oRb+7uzP?5ubxVYT``Im^bT)VH7bxIvLny7~({#g6XO~q$rr=@^rt}J_SG)qe z&hLTXMD!ajnD&0#{cDpo;%IaoeiNoLV52pXe4p2}enK7K$lzr@+J35RNcGGo#F)Ug z=4m9T`L#xna`t%-mg@a=%}c%jUhezp>oe*GYWoOGf^qB(awqHZzB`&9FBYO+N2}sx zOgDFJFU=N^i<`^`=0gSla)N332=m8;nCCo9|AEgU=MaXj#ncXXS1!TjRY(i6<5`W7 z*lV(9HPdMV4q~&&k@62Dj76V$?I(ufmR~U3;MZggsxM1mUi@XK{OrTSkaHFy`{Rwo zWlu9m%=5mV4iO`i!=%*@A{P=)w<4~~No^Rc58YcQM$Q?=f!!Xx)-l)?;J>gR;MK%6 zu=qS@FnSnlGhymvuAQb1_H^O1YS`f|s)A5Co=I3*CRsv_Ih^8|CLU+Y1%k?Pq<9Mn^f9bQDEq&Dho zx>gkSBmtZ=1k9=;`CVd^KN21nrMu{QSY`Y(S`{J7Ks~?Ue=m+0#nPNuDEgTM;Z)W< z&DC6{?nO=kS2%!WarV#Ce27qe(Zo6mmgpj5MxVp6pE;X{M~+v8*S$X*viY>_3nWsu zG;m|HV6r`iJFei+>+ZE0{}!58@n@v;G8LPQWNLzxmQKUHPk>4zNJ1W6!X(MJ8H7imn^yl>BWaMf)!g0u>`R- zhjKD&Ysm~He+DcYq`KwHwKzH3`dnK5&P%hY1e0~Ziz=V1MFTFRTEZRJV0EV<(>U`y zvdhfej`nPo+6nX=9y#@WdPMG7{b5zzfY!5T?JNoikP$sw!7L3uOd%8 zPHL-gt1hOTmTL{f<1eiGeY0QFII73&TyyYXikD-Q`!)fhTB&0|jKqLd-y7;g+v-L} zOR?;DlNB}h;uW2%*MGEciJkR>68$TAt5a3tExujY5m8VpNXO%*`cuyn2xy#hIS)Z$F<=fI+Ypxez8&h?|JB z*}5jVgY9d3{;4f2ETc@AjZ7_u|KS4*eHz`<+~$nh;SR{}5v_T1YUClTR3E`PwS}0d zOaxU;8sv3m^o>W%4a4dRS*Qg$I01q<9f_|`6?{LAkkezj@@Rq;HX<)>Qr`Fa`|4dE z;Pevn4(9he(5>LE0O#NtsxoMbavprt6{kMyIeaEE2r{$S!^bDI#EyE_IV3PmoBmy{ z4Lz;=d**7kratdxO5ivGA?WTqYH@NPvH#IBX>q5H;34e;v!D$k7+Y5}<-W8(_E$3> zvM?^h8z#dQOm|-${QaHq_q@_{nM&TGs3~hf`zG|P?g(iX@y*jO zpR}EfK_*<=pzMK+B)l$}qP!`xi|G#P>)J?qMuk-ShQJQAq(4vqpGH6@<@c^>*3^DB)1oJ`OJ7OoC*aC>BK$v)1jlX#J#mYCSE?<`$YMHWfD`XFwJ zpyB?gB{d#xe6=7z3^<}~kk#W>ssptjQ^-T@&07j1iE+#7IZ^zY3<`3jg0=`!W5l=% zy)OFDZq&1rzQH|49bEH%iZl~=DC=$Ybq30(^gnLfT7XUdB}dW{gfihd4{1CT2;#2W za{H%aWylzbhk1t5;C)0ZCz%7c?&+yf@e3^YNiq*k_9{==GvV-!*ay;GV#9qFE|D)P zG)Cpe+s22LLg(U?yH!nUk7MW(-&F{+ah_V6n{EiylORZopp#~cJWnQgcF(65p@q81XZ~-G2JPC6RzXVfub*_CNm<#Ixrcf=D5Mk0W@PilCfd z2Hqpl}(*bBE4*FS|vEeR{Z_@_2X9gR zuIF(6m%#PQM@VcS)>$JOlS!ZH7LA3s1dgL6#Os?k_IfH@zGd?|C25KaZcvrLxOdOj zqf*uqZWL_NM&rNRxW(y580L^7k>a~wtC>n^sU;9OliEFSgkkV1oduN7>O~;EkkrXH zfoqh6ZxI{LSqnKbO@yQWFvm|n_*~cdS5_%p$CJ(`UfwWDb;s>MBeSEpfe`4QO!jzi zyun_Drn=ZT=CpR6}12wPE)yY9S>237b5pLCi!dKFh@Qyc#N zWk?IrF+d8Byu&Gev~U5LhukfCuE?S2&qc|>?aP3uXq>5SkBI_X+b61(2>mb5Sy$Z3 zQ6ePr;N*g9Zb6eeFfrqa+_n1Bo+A(58d1=b9*$6OVI%NHabQYixxLCEDnRHH z#Xbkui6g%^aXC-pF@lWHyS;NO+ECo;)oGEE@5`GvN@1DWk>OT)u}SmH z;s1vPc-?Yk<0y!-Fo@V@t_iLiH((M?}R_c5*)WL)b# zHNv-Fc~m$-q4pVSDwKjFG^*ygm4}zMbEc0ac5R)E*6i&7bjbEsF3Pb8uF8aAq)Pu= z&|uHTBU|8xl!7)R66tUaL0c>tx+daA1ZqQx!%drw6 zW*G$x)#19jk^W=%P0-C(&69?@+GkuO+s&z6lp;xDrwIR*Q(V+CYNh_>NefTuZ z7`iRLPpsOu!k)>AP}cW}g8I$kT^EK_O}krFRAn%Q&#(%^K29^z_=ux|4_ahkbD5#3 z+d}jHn*A5Cv9Sgz5C6^JFE?H!qr&VxRc6D(88B=(&U|tz3T?Z3L-zmCbRGUw{r^9! zi@4b%$KI|)iF?T&S7u}rmusXDt{IAJuWR0ttgMKOd(DvSm66$%>>0|6eA4)x`aXXD zzrZH_gPr?upj8WMVjdgB;!pYeD;xaZ*QiLf8JP)nQFvle~!@nQBl zs%>+0|hJ%#d#17}8N+EoJH&0&p+iuZ<%@5?v0R%^ZRw#o3Kg7dwf3V<#+~ zsJ(1wX4=Eub8DxCf-%L#M#eN((=0&-EKFF59li6Um>J}S3%US2=&KptoC6L07>HgP zPdEa416df>SnR7OsC#;+LEIa3@dCm+Pm7+w1&(V|{4*?!ld$`bK5g~ah`iBIBJZDe z`hld+3Y&&F4FHldM0YN16xVNzD`NKUpe80^<5Q+-7cOQzg@AVtu!w)zWH`9pU<>H>! zE_Q#Ix9`!&F>HWSY;YlL8OqX~Rj&B`OBXLYh^|Q=2;Z5JmK##mB8(05MJ5Sj7Hutd znKfxAvdm{6$+B^`g6`v^QK66Pym+F4D$Q*ybmlo@GZJ z9#U&qlB@YTZP}R3uqg$kS&>MI{H+Vf z*f@Q$POoxtzKv2{+H&zn*)K3!2#WGrn;d>j+$8|=9TerAXsASnH-~AQL}1&2eh6YR zrl*0u(fQ(9ud4_HT_RnZ`la{ztt?17Bs6=yL&xRS9k@7S2G>d6_EeSJ8_N2b);lv$C$?8p}Nz4&`_L5a?q@0b}`H7vN%;fzLk z_O?qFs-zNzNQZZu7!XWK&_^j92l#VPe!uKO^wH=D!hqK?_q#1bGmcxi=2hW1rp(!~ zPht0kxZS2x)OjUqN1cJz|4Q*HS1k^-HYvVH2w(L7MOMiOH2)j>uSBAguHeda1|rFV z(Spj#z9mr{3pv=BCfl(Q!Pz7ocba3D|AvM--^>Aio|%G>E8zVsG5WlnPy?6yu#jp> z8Z%9(xU-2X&c~xP{$1;JDu@TwTrhfI`8K;cbSm%U2N8$nepSqY(EsW7Ya!}iaFFu> zI?P2!h5(`4bgsJnNFW;#+;J!^8^9IbDNm?`{9C&CA&fqiNnOwV#zo(t5o{~e`*%F@8jpS`jY9yvb zA%VSvY;@g!P0#dsiMD??aM5U@fptWF)R)1D8<5e+<$O;T!o?mS)IP;u(ckjqXPMy0 zdBnYhn&!)<#QZwQ*M^Fr2mdgY%nH0V1_{LTQ7S~+Yl9D1Dkb0>m;7eOcgS7tDP}j>%@gOunjpoMEl%Np zu2zAZ8t{W?KYUq0>CeBv;GheTDp~H-eY`uvO6RtMCDl8pJ|xLP`flnmE331T`b~e( zhA5`;GG5NA@LbKq=T$dgR{;*iKuW(b{r7_1xFgHg<;9fFxGv2VnX*y(r$JOpcXhw6 zXtPYHv^6+K2;=G5ckE0v2e0|b{<2n6+IAcLmk)^W?ZWPJaTk#QVWC!G*#2f zg)KN(b4?cE($f?mA|A zRuo)5D3O^&&H6NQoI+uFpfk7>Z`>C;Iy3*u2`bHImw@4HeM}9URfz5=!<2g`64eI% zdp{^~1^#?NQ`TV^S)X=(jBzKV^>$FDR%DaV&7Da=N=#n9mN!%)&Fqyk1}{de()>Z( z=-v4#5O+)OA8~tU-Wvlj`;-WN(z_jyWm1r|Kp)M+y_n&;3QP~E(`#d$+;wDz0*`cN zW33v!zPuUIaD{?wV)r!bk~D*oYF#Gk(Id7P!8w)3a^lq8<}rJ%H_w~NWG{iT*M__$ zGHG2P?j`SW(y^Nz4f~ESIKdPQBaXt*3xJI2%_LVv%S|R1)H4Q0TMh0|PlEi-g(F+J zk;qy7pde6GI~(#CBdG980xz&EE+9vV(#dg4NC08_={jsSSmbVbZ zd@GEG4If4}KyhpENmw#7gfZ=_`@lgyKs`6S4HO)Pfl%P_)~l7a&1UhWJa)ke?fbB> zZ@C&sx}Cv~qlqbSl4n{m4c3l9X3s8)|{(FcX=>l%SQ!k}HgE;JBJoW7iXfhsg z7gQx)6x-6a-E4@imD~}+ZKMi+A}7`!OgGk8-*{r^<8op@nN#*4fj3t6rpUaG)@ z*13%cDwo}u63^NO&9=>B=fMR^B$HoQgQIs!1Rg`ZcFX+2HuVtF+8Nt=IePO7Qx`%wrM#p;`ei~ z494W|>0VcI?dN`ojt(a@(xQXSgS!^fJfqLePnlV_DZR233Tx%{LG=iVcSLNpbsI+< zn7b-6=fVCGFG(L@3Cwu9InJMY!3V3$cRy|6$&7VrQ=KNN%<`Gpel818qylJp&+gpU zVZg*+pOxJ@o#IeZWkll?Q5KCwmDrnNWFe%W7z~6nH$U|zkUN`PMn1oD`w;6qJ^q!i zeZx%)C-si+Ze=k=XyM-v+CBq^s`ohg3IiL3U+K>S87H5ltJ$dhsM$)$8Ae-!CrqgV zy1Y7-jn3)9krVFXGl<#-=S#36&Fv`YHUSKvNeQhM@0SqKK)?-~gL%9gOYmyRW;1L@ zLho&T1^vxRT3wu(6t3uzGz`o^;4?n%angcXZtB&A8In_R&;*vd?uhZojsT=A;*OU81gpWEEpfu#Co2!W7MJucl|r zcbB))e#{VBle6|jut4J_xa={J+Q5ox{YyFqFiR+Aqyh{L1-;+Pm`2H@1pQbg7#pVc zDzc#*6ET&z7^LM5ox~CBTv_o15_~AYGLYoe6pZfG0pbCfmAgkho5@l2MU=|0NB3h= z(l~s5n+lsIn3xK9mLeJxcV3y-_5Nryb6MLWtwn}y*x&z))*OHoV<=o;jcF-T88!|bfHHwK)KT$kA*ebo z^Ts_N=Fo{Eh1$qG_KNIVBGW7)FE2J)a`~v+mG&pRo^EPfe&osdrC%XR6T4_>`d1aR zTLSaB4q)>s$l!uA&J!GtOycBRg~wgN)TR};%Ak{i0+kG5tg+{poo~!sf3iH6;tmqWjG!e%P`mvLp5lGPYuyEyOjRI7@9Zs zU4r>NVq z;=D`x`I!+pvQ5NMX`c4>UKG9-#oA|znL+C_Z^OEP#A$uqU zC>mPU1n)DC$f~L8A)>G80QWWK2)WD!Q5*q+RRlI?_tLxp1gf_krvogPRf((qX^}}O zE;b$^#HHX8dmpxL%z7(1o}ecfWvU9<*6)E{5C1b0?MV-7LSZq@P8XdZ*R3e&LS2p} znTtp=Tc<7M={kU!py2yduNtkBj(I)hSAX-z7&B7X#KJy+EfglXvZ=RnC9ox}_t|Np zia7O7ICjcwh~qa;rLQMm)NIBo7wa^#t*}C#+xhN?8!INnp}5$a*HL_ z1Q>mV!N_{I@>amq1rz19a-V5aDxhy#8>l7}{adU;UwF)7g|$Tf;iv&`Z3ETsOafvndIoY$AM?E{(w2mw;)DsqwMem*V1vJzxj-1F+Xa=Q zd*T+2y4ekI?+&=Np)@DHy{^Gb(WjU3+1tv=A$uP$4*B7IvZF4y(oA@3n9ML?e!jc; zM2wu*+5)oI&xBxG{!1J26|Jw^_3zx`_Y#x5cb5=$=fl89sov@80jKkb?GXWFk|U{Lw!g$scu2qjsIn_E?Fds8l^g`X!)n!*@rokrL1$XNO2;iVk;W8`G- z66&dVt*!Y*nL{tBT-3xx1*CY`RyEPnJ=(~AF9~EFMdxcR$fM<3$ z9$6WDzmzG1{UR^LK}fou1+CI0{S)Vu?!A5`?UGqj@gZ}aUu2dV>j#zptEBSzGI_h` zRA+2-14Xds%#*M8a_^($l_3E zJcsiO>O_vc(4@zba@(_ErXPr&rO&1jB0lgaXawO;YC$tE&05_H&xa_X9}S}#?qOrQfKEO z9uT!RxqP{5&i}1+__F$1Z{1}mM}UMVc?N>U8B1dXf@^2=8wylwbV3vn8r#_jTLqe0 z!9dI1zM%)_g= zrpOOOCLQP3G-vtYrCwU^C5)!mSpN+OW06{he(LTt(=1F^;h6#-0$KH8d3m+9X41$p z(`2wWuR#vEUS>q8gvH})C~zTl||;rH|nQ z8h&)xn`uEV9=8Kc?x4{*<^s=ATWx&*CH~sFYlZ*P&+*^*xXM3F!X?g(M8CILc0z_h z4ddkl{5CL+=rM%e%>^Srx`(y}jkNO8-kw9u7`^K@rfb2Eua!uuS{#r~aZ#unc9CJF z2Ib^AO~_X=6`cq3kf~yS8N#sI`8GZxy;}gX^Q!)wBeB9)+r-?gEAAit>(l9BmUltl zqZ2_F(6PDxCmrXQg};HVuQ#)U4He7W@ra2)-wu1kHsfLwkj02;`_pc6TZ%%#+C9b! zSpmC0C)MG=@Q}p*PyO$B}K~$U$ylj_MUgG_1M(E;$a`M zC*9kV;gFpr%V^V{m}-Qz(Xip7j*_drm$L~*cv~BRFP}Y(^emWe_;E)xL;7WDOv|RsRj;?fXtGkP8Mo4QTe$ZhYUl zz)QI3lg2R)aFs|oW9w^UQ*k-h6<_ni;2kb%Gf=;ORg;h&(@Cx;;5q$IAO4P6m}R$T z9AoT|j3qt#mTO8E7`jBRzd7vp{@mx^@PLES8i9r22NrCeKn0oc7I52wZ1M(NOM|!pZc#0H9O|3IGrcG~Eadu70QpR>rTurN1`d$mz@p)k(`p`Hwfhr#Vh0HK)ogEfoR|MDk|zFY_9R7YYR<<`@ZrC#%pb z8esEjR)RbSVS`8syM?DmuLYbwq|ppAwW;HmQyh;+di7|W5#5OSIzR`-%<_G}RcPhC zxlW|;o-i~Hxc<4X@bdEwPgFuQ>KXYPA{NNg4)s=s8JY7Pvy~+4)#m5`&m+dgpH$PD z4oED?dgzy4RFtwwFD{J-&00S*Ht*-M*CDmGL= z!RZrE={53|t&SU>ZB3*JN@VF3oTXVvRvef$TUI84p6%OuIi$fP65S*)B5ILBw$v~Z z%RP6$)C+$olVwTlAR?2%K)+fHzek13>GOGH?nl=LUp zu2}BpfBn#0bQOYNU@x+-s(E!U)vNN~22%DpO%wJ?3NLEF#-|&L9H+1Kp5v+RHe*O4 z8L4XyY456p$XOs-u5nyfrPD>wB1(ix5)>UCz*11fQ%K-IDej{3Q1=Y|km%_T2`_>` zkgqZguTIhE_^>U^qPj0#VK0_v?JhRHIA2l(rN#k4)WctO$Tuv^?pd+$iE2)jR@?N-(F6CsWNt6R2?RpRjE57JP&0C81@?!FhcfxVdDpLFV z!zt0mqfSvcO(DUCRlrqGluHv?SMKjWjjGOwY)lkUa-Wkj9vR`V{I0HM`8W113ga$~ zr!!KsuGFhyzvrgp2kC!28Wj`FW?GXfs>@(b7%Izkh0?+mrgExvo@=D&OJQm~bw<;k zfDR}>IrWbgu`8dfm%h&ca*5UEkDMl=Qot)|A9oXSC zC&lK=Bn+v39qIfg0p9kgstio1tHKr)#C6kL*aHX zI&2DXhkgt^BBh-a0UwDX{B!1v0P6VB24IGl66ZHqi~JvX`4ivW3%s``ZZUHxQL5Im z6;K<9PW*6*$SF?P2DC-3N8+hR9#44i`-H7*bht#a)v;&3{5fWO^frViB90EBU(sjE zJ%yCCJFv&z35%Uti5;<`cZ#j&{YY}8 z*_%I`dHN4aIII?KOVnGgJ$$pI!a3EOKOJ{B93)_qF;!((<9I32ZJR1*)~{Bc>?o$! zKQFlP=iXzs2W<=bqOeI4})_lD)pkJ!+!c95IMZ{1K9BJAiayJQ3UC|3Q zDibrW5?}V{r`VX2YOJLEMXp)=ap?0a$$V+xD8BgoIg$Bzk&+v0X_OtvX&1~!S*)rShAxgg~%e|s%`gNF-fkIcxV_T0`5V5uWeW!bXcW!Z(qN_5OG7_?A z>uWZp;97AgYW7ybj$$^^5r3KWs*&^QCv%vXiE0KCFjQ-7pZ2Qsfy!Q5+jsVMY(G}~ z!CBFf{-M`2B1L!HmQG;-lyq#W#hyn+*EiQ?pVv#!tG(pZeg3=3<^z`3i5-j(pt1eH z$>cuFDK=F}D$@?ei^a-!Kvmy^R(pnHL;^vNPs2f=L8E_|o#y3e?$BMNQ%$@0Crjdh zQ$<)#czU-s;P?pP_(zBxeyF^n{z+Ca&d!c55%6W1$dX83A@QWAVcU4J^wOiJ0<2EA z$W}As|L+ArP(eKj)Mv-%;SLYHV(xZt!b;N!@v}!gIyT!whogx!IH~h|@3TZx#3pT= z2zVu3h{9xhY1~+@K7jHZNs;rj_P}?MNJ7c*VS)Y+j*qnd2(bSxla14ErQ>=58%sW; zBPSec?y~44JA-mgVuk43)LH^{I7U=N1VcHNTs+5eKDEIsRRZv%Jo)hC%#`+f*r)8CudB+ z)IvED2J=YBb?u)zzx%jds1+^%>7TV9q*ZfNbGM`VZ zs^^x^>2Srdb6PPV*3rh`l2y4oO%L+;e5(HTORCgvC}Cd5tdWN^M``&{+koK9RDmnr zQf@*<*_EeKNNJ16*BI6ZKgT@7-%zDI5BLyz1sBw&~O=n?L zlO_F|DSE;nb_$$=^3dSA&~AqYbkR~0hVD3M5c``v#8%2RKo1q3oDrU@|K3XJs##C| zUfYYJs$_V1QwFF$`yKS%n=BUCD*s+9I8+=6mF`MWun%HopFm-=+{WI`wmhG_iw#gL zsL5h)6y6EpzDXb_sjB{XeEq0aznY&%gL|Gf5oI=?=@8>InSrK?K&_%RE8)NpX+O~^f6WVlttqQl{>$o1iK?` z6Zyn5R5>&2^3m~l(W7%nm&ce-PTK2}4t=MI?i^eE#b5=2s$Z3k_iKTjT>^8#*=VAG zz=&I>L5V}MlGeQ`BflJ~mt#S_t0^W7-ak{#qj|tGBqOH&iSv7>B%qX1$t8h}#x;Q{ znVR)eSryoh@Gz^v;QBog>K!Z6!DD{KkPLC9CLQQC%x^}*0|_67iP8Tm<g~D2)B#G>$BAjg@^&GQ_dE>7m z{o(`5MaCuY+^fD@eu=OJg>Fcvt(2BjC&!w=u`^6{ZC@^qTbTXQNxnXl60BO+mO22} zQbduZ$eDZNzw*F$d~lD$!9O}`hx9;HBdb{IRiAysn8tb3qk1u3yV|F%-XQ4E$kF#@ z=|p8mc@f^r#(5ETFN6~9zW=E)RI~=Kcnc?|yGEfDHttp?PySG^?TkYx6^@SgBEmo6 z-jq6Ov_@uL)?lyNb*@T*$_nzD|fr4d@5 zgc3>zew+1u7ZkS$byAS)o%^nFJtWs6Z9ob*d1Tfv+it~-Jw`wkBlUjQ`POuOAXCU9@ydB%{g zGz}|-^v!Q7~)(A%4CQ^|PBM;tT_7fp0Rgf*O6QQeE<5xdas8#O*A_)Pf)IoX) zO)Sgxr$Lp@wlMWDZ-}0+2My=$&UwJMT+)Z(8GCN+YWA~Y2H^UceIqF~B_CpN;?yow zC@gwLde);e%V2~BSx1RVYPC{OZLqNZ?O_sEBvO%0?>}0P=ipK+iEmt4q`i)2_1m;R zX2_}zHI#d~m(p)_NbL?KzNEUpS+^NLRrznNio6zdzZ^2f?-h%S6nuO<-r$4+A_+?= zi)rVP6q98?Gt`wbt)r~a!ilM=wd^bw795UM-b!g{o%4EbX3*#$1K!mbF6q@~iflBS z_)+hZQieN3Ve4PfD=cUuIXGRNz5(tzBBFlFO`m%PA36~$}gOwHO2 z93W~BecXF3^eXR~HuBybOK5M#4S~`TJy7g&VN{{R_mc!w+&i06DOlYp_8PDcJ2 z&eL{3lBiLu&S}PieeEfl7UQx8G#K9ID8fCAN3;-$EV{g2Rimc1QZErw+@W$j)ZNDq z9X5RAAch!JP-$`*0(4)4a$opZ}j-sLo z)FJ8JHA5tNNoK6gRQY->vyF+0ftBrg7mqYSmc?u?^Kyz8!Cy9@$xmiNyBo-VW9>;e zZIq_d(v10Q20>@-`ddQNj&W|3w?b2I=e=A?f87fC1F8x(@ zL8n`k$doADIfUNAWyY#aGdT?z@VGp}`MCD>0==p>%x$W7zURerkVebkJmHd!+Ie=9?bRt3 z5d=~qTm6pBMCNhbW_6D#S7s3A{ol?UIsIotn*}xC=Oy1o0@rU6@VcH=>gmODx})hG zp~kkb+*Yn4Xuk%%NC{}_GxE0re5OeLrI2mV$Fpv5;$^iahu9sg7p|*pWa%6b4%K724$FdcHZr;2^MyoAs{uc|&{~ zGJ}d|=o$U@XOB=URd_3ezVGcu(UL11RJ`lulWfmbYPw4C^kU8?8pu1({_RW`smc`Y zrEEk?$MQ9H3f`2g%G2`V^nO4)#JFy=QR$LrYw5~2px4{0cduo<@%diWH=nJolj~p& zq&J)DU9lG&qN{X*)2+QMa{M{1M3q;5$W-QC@twdqLShY>>ZOS?F7=-ZA{97#j~Z93 z%L%7dcFx1=ve~`3ghXFC^pTZdj>AuP zy@pM>>s>B5N@Nz#r^5F$(0nAT>8 z44WrJ#Q@eDTYeNs_UEAa%UITB^RG37i&43gs{cni%x~>H)KYMs^E|J$FyjC@+dyZK?drb;(AUrP|DZ*PrBW;vjt;3-XPpBJqXc>Sm@?1u`Ys-rVMjhp zo?V#EgH;4JZM_8w?*uT(m(C=vG5g2hJ`K`mA?LI~@$8PYyPhar1@A_=vnwt!aH>e= z-$pXOhNp!KDVL$@Ba3yX^r$pt3y&*2zRl_o z{>O1#s)ElFExA2BVa{93LSv1#X+FNN+X|8Wk$zJqwz-(AIY}Au1#v)2`bu9Q^o0W) z8sOX0Lh}69Ho>L`yWDWm*v~w+XVb82;lWTMqLx01w^sC>p57dIaUjBBm4^n3ep$W2 z-2dZQF)h$~LbGIAcZJxr0xL-wtlx}uqr7c)2n~kn9`k4#}Z99$`OJ}wc zil->oj)x24h`1!U>@KQ)lU>g-nYBdthpFl>*}so4fV2KJx*b$>?OeYT_~Ths&C#Ov zna3;M&3haZX|aY_zUw6CL;E!;&Ax@Fh#PnTUknPL; zy(I6#lTZM*olf{3I?Ff})Tw?P)OJnB)|2ncFV7^t-lBU*nzH+BoDA2y-1%AaVM^JA z{&|2d5B~%eKlR<^O_3-2c56tw7;2LXT*j&2G?QJD4Q>fIX>_Cd<#s-3zhsv36FC>B zlLF#v-=ku={e9;tE`ND3S}m~M^1K<$;g-Ux?pW_Wg6{gVEF@K_CG_D#O-ue6d*-!X zYF^Jr@-Is~niM-EVjdU6vvAU*J{XRgBvT)AptQ9xdGp)yA;S< zz&vNU=m6u{rL8`N4H3Z+KNd5hQ$dj-4cIfW6O!CU4s`MD<=Y1G^=h97xY$ua&20Fu zzhR#$I-x-3eh2i%lv|WE&G^%@2(M7Pz4>}R)RC)XFr<5ESw^m&2E7M-s%-vzD5eHl z8T@uvwoF+WF!ERP#JB|51(7paaW2#ba$lW09g{Ord2LNt4dnIbf`lhifceG}P?CFb z_&l#(n8UU(6r{+WbY){vqGwPt@%wDzi6YpWv(y`o_74qksgU`NCkY@a`*qcM+FG?efQs91mViG;kwr2!w%xc zz9}UXedbKj-wq6UC%=WyJRM0)hkhcC`TcNK)g1bqWV%4eIf%4~!=O~=?Yr~$$QXwL zg~1)F>t>egvSnOU z7VRj=(aqbX48aemF{6RYIQSgZ+7b_RbiGU^o^kt;4Yvu6Be{?a6j<{i=QeD6p)H5 z{!>X|G_54BsXKz#@39m^>n-DF`w4@AS!Ys^xuBycltufH(k{-u0$04 z_s^f%+|PVE4vgaAF0V*#)b|`8h?GgGuElri8b$DS*nNtB=j}oK>gEG>$$}TZ42qU$ zzli$g@@qn$Xnq&uCw|dWE6DKhH+q&VqB(6SN;}(5dJiO$%g^6`DMvc9$jty&{`9@7 znJA>`qDKTex^Vm3(c2sLk?7r7Zm3*WJX+)uX)-hk9!OKSNyqa5+hbk(!$l`u{xY@e zh-<76j!nVx?%W6+L8KJsWHqx-dy?j&S>uoLjGiiil_n&S{QBE-Q&Q9+h0kAD3~f2Q3&J;$?a;HBWe1 zSDYRz8p`44Be|WtR~0PQDb_z?y6X%z4-$66<@1ea_3GFt3@@+Z8fPMA`h}3CHEHKv zapbj-ICm=6B$Aj#C!HCq-%m&3qs_x%5cs4ohblel|L^VZYcx2byE~-gz}x@oW<~d( ziN&FD3pucHBs9NJ=Q0iJ$|_)^yPerLj*+9|ctz$ccGe`)!h?q?>Ngv}npJL8{q?19 zPOK%RUiDx5#PztTJTBM;!Z@ooEgrE{VU5y^ZDln<2%`Pw2QPRoy1)BBqz2wT(v3t{ z%~tS>f$r#P?niwwZ}qBu)!&14eGSg5?JkSfs{w+NyLu2IBVx8NjCvuPrQzB7In7$< zTtR}H*;GRVcIKr*yZE~d{Exy>&}(jxo?EQb2VfZ)*5_No!s~NIatcSC>|im%4TOg+ zrH-}C{qa?rzrR4K0CAX4@^$5v?u&}#x(3GnDxzS2>mE)!eYM^m1GE!aE+Cw{fm+m< z2rH$g>u(SC%_q?cnZQf&ulq{zp3`dH^zD(WYkK=Cd8o)$9&o|Sw-c6}qmmHA z$Fb;zm`mWJ8uR}C_`y+(6KR7N<_PM6>j~OWY~4-vBDhd(9A!~obOxtPNQ{EU`MPW? zC0V-)oLqr{n1<@G>EfkIf7+0y<`U1gVTx`*!Okg>#ICR%5#E$;i#QXj5(8YV?Q|pd zKIif(tENV*e)t2*m!7i;JOWea&V_uiiw3$K&y>WGJrsgSa2k{*u2xn5hc}4bgrEow zsq!Q=0dG8Hb*rbHi=CBgFXW;W;Z~k-yAwYPU1MV}-ZCv$7*w3V3jtkUG)$}~masGV z7fub)vQvy6C>z~ImLCP~ZbIR>+e=)x13#YUzZdb}jb2ng?Nqz*Fa?lB=*bReDV_f* zjWjBj_N%3YG+0vCn8aSg&K4GDy279eiKSct0R(Higv!>z2KMxtTOm^kt#T`vOVq-p zcn$}F01GpPVU0wRFuM=%E&}~4=X$qVz@skQn9-}l9W^U()e}xWS^G9-3P>IE>HQm< zDM0Ud_(8sOqP%F3t5*l}-Bxg3M;cNV^u!8<_{KgYEt8%v+I}8hXYZwiA=9#(=@X#O$wyg(v>m~sGuaz{tw!eGO&F! zP78TId_Ytp2UZ%(R3#5Kk?nZ54{Ll(YZKqu2H4rf!#~XB7VrH|y7uJahnKs_L8u`z zRlkor6EdtF-9UqL) z3XWzHY2jCIZKk>6oM{oLC&kS-Uy;woF@qulpv2%VdW-l{DbCbR?mCWIXBMhw9j$$v zbE|4eAUo5bJovaZ@{Y@D>SV0o?SuPMw~^6%6-%CVT@NDBWt9C~q*ZiBr!U$%33!?3 zJ5*o%(tdyb^BZkIj&dUBQz8l12B%j5_7ID;Pf2N>`NHp}%XQi{>o%W!j4O2GVV$kj2hjVUc0(;b__ab^E-!0C$Luv))BpY+e2{Du3z@(IjUViXF6!=|h6 z0F7|-YVu2$DP~b zTt!+;KU@4V@A+#rS5V?{?sj82w-3X$#YyH$tFw6Yu1TJWz!JP)y;nDoK4NwLG1vKl zX4)c;#~cI1C!BBzce;MWz4+OndLvkL+TFOuO4yc@B* zl+P=wROcxB2f_H#hnsKq6-LFiE^wXeAJn4f=5+8M*I8^3f9y2Mc}M|dpwyR^K7up_>N zOwr%J@smh{8`PrZe)BWjWXxi<_L;tHh_R9p$i)o%RST)!^{vmF(fOltW2SanUSAGn z$zopv;A$T)93UQ4)i;EEQ>O{FTGta0Tn|I_(1I=B_j%oqf6s{VH}FVKD@`&kkSi{7{juj10>9`F znBQC5rnmC&V=JMPI}RHzqntM$4S5~8-GQGw8aOz!?n&=}#CoE@W;_Zc zqftRWZRdoI#%Q`ejXBnNl>pabD9LT-67M|Ccw?XSC0!pzIDXCHO7%>P-`8Bs4d&oZ z6S&agpaT1F7GnBm@yGo$yC3k85xN$e&I)gsleO}Ler59Mr)hZK&#C{SDR9^a-pO<6 zdk=?epHlse~iaGHGabvJ{L{yB!(-cMow5nLBqJ z$Z7L@eJIdyB{Sy}(=TRQax+);X9Z$$0cafUEkha=t;B~@9y-5n zz)k_q_j_Gnd5?bNGGniI&gfrXv;{}&(P?AfRJPKDl5VX@uwy_<+)SecTOZK;vHfh5 z^!>OiiQDF)0e_O%bLgN za~i*jPU8FZDqN>xu)fmGarg`6DWvI2VGTKtbLn8KOR)bxIzgmnUa_uE21CR15Rc`!ZS#Y~2Ux$~=e=V)3I_$Va z_$_9`W^<_NWQE)cTkv`K=L+p(8e+dg*g-&{RI|J)dk6Z_~hm?Nv{a zDTFM@A?-4+Q9>v^p7gZfjU&hjTt`lqr$e7F9sCW6`436~~ddS5lal0YV zj})w}$E?x&%soF~=Jlq-jSGten_%{~8qU={p##Q??fO67JiB7Fj3)jx`r`^+;%a1A zp{B$sUiKR{U*ftDxQ*oJEJYadjXQ0EUkUbqk+=*HXfm(^iu8Uv@T5@T+`9Yrw0eU;ctJPr1UGQeMlNkcpr6@ zGy7^RH<}W+oTH@HpZ=T_|1Ys%^X>{Kr`ne+k4(dv6jXo1kzelrCpn4B*Lv(+cYvMS zb?_d+wT|Q;&(k6-MZa4(vzAOr8r zqX!5OHhWZ$Z-$cQY1vsMA2!T}FJ^xGefGR={_QMrlfK}?l*$uA+U-6bMN&Mv`7|Hb zPWcbVTuJ+2K%M&-?stz{)JTRSII{cvLN0!Z^A2+0 zz{xp1iUoh?%~RxkE*@(m^*hP+s^gNP>+|q*6xoh~`E0bzICtGg3uUCqk#VJ!rb@M4 zFsb|?@tvCIEjd_lzw-k$X(aJ&6Jqhih8XHT65I61^6*!u73P8Ry4_TR;>(KecKQ&k z24kqw+;ZRFb0X2<`!NA3_2?ai2o&hQ_SDtg@ND+@*UuwH>D+X8uXQ@*97?!QAy}JLU;C(|~+_+5g zQ>4?pm!sJOQDaf^z}mdtVhRnf&FjM_MF-=_cZY;ReP8kl(-`xcXNg+!i?FbL0u;(4 zey-Y|P(ionTLa09f9wN&-!~Tgkoh9UU~t~IN7*<|P^sWoSrUBVhCYa_$&SPEg)3gv zDNV(N+!YF&E}YYW5WM8%Jpb}zg@rZPxvg|DbR{QCVtVAmPM{c%^) z?6BBpEMkH&p%)de*fW2O*yb~@vU0$ zKyu2|L(IJ5M?)^0P=7@}`>YNiwh=%2R};Z&_A64rrGvG_B3G4f`~6-X{k%zZ@G_ow z%K5e(_FXn^YiMSPB>e&@Y)6V)(D&?D?HldXX1(g{TbfzNiL{a~hXDW{fd2=Cszk*dO2D^X>V)pWgLh zzO1#b`@RnU|8?Ehy4S2=rtEW+$-^V?TTTYHt&tA`&VB!T8%A_hcP*-_OoMDwl4E1J zo2f^*T3jr#D`+&G{SCZy^SEQ4D6D=^e%2hdUSE1X zD!_tgu_4Fw(C^j`B3)r8$ExaNz0-*Pk174yli72fL~zmVvblo_VMs}#%f!`ul*0b= zi(keZXOHpqx`?EXgGk#SYkH6Ijoe>@XieMf*T2Sk zYbjF#&3lHS+YGyk;vB~!!&;fC}oyX75Y12)i3 zK5wP)C$Q>)ODl5Mxz*dERxH;uJ-_wkUr|%p^+4JO)H4b%Z1Im_dXPaMfENO);qQ47 z=pcV~ysnSadf%tRheL$5yj9-&IG7{x0Y@JH=9zK;xmEX`i5&|+q(PR-EA0a}8HD{z zj@JqHd)ANzZ z)1*niMK3gUGR5=slQ8u*{A!bjo>KG{zE7Q5hvexu-l4s^!r~>XIM9O}g8i!1=FM*m}WkrB`U&ACH&V9b}JXKlVlqy+=RmGR!$y+>}?iciH<5 zP-4eZsmTFkpaphLx;Ku_CXPSeWCef3H>0S*T2Vgtr&|dfH;dZH!rNFu7&y1-{Nl*jTl118?pk1q*3{|jm?WuZ(SecRgG zJEk7UlxG|;=3iy6R68M);sQobOXKXHl-WgkcQG4FH_TvVMK<=4MNN4ZZ?Cdf4|(CO ztJ%;7CGS|uO9r(ouKD@9t=&^ol6-L|*5N`=9E71AQdn&ga2iBoY`D4OdzAO!vKNSX zCoT_xc=1|`FDB>_DmG;{T`0Yzz?CmJQ45KLe3Kg z+3McRBNSW3%gQfPzHgdZf+>fRHOXNitpSH9?NLl`=GkVh@LGd)wbQwh5)hPT+i75q zYzaP0Qwy`Dr)Xtq0oXs`?OWBQ-rv^H;jFZ!x47D#w3agfevdy9;vG?zdFEPHT}xln zk-ukhwrE{fH5RBl&Uhqg(syGH@Jk(TID5ngfV|$~T6r|)Nm)(xFzzfT>GR_$#!w2P zCf7{2BF{)Z{UVGMQg4sT&Lw?ZV@*}8ky&ZK{bl>)uOV)kKdsXIMDN^D~mWit?-Hw zew5#Rvh0qDv~_So!=Cm1ybhULl<2&3>aZ**D+ub$3A)xG@s3y}2siF^!h5$0q+bvK zaKE_Cz5+|YdqBg!R6q+Kd2LQ>xm3a@&vaw6OMoRH5~CPJLF!Th4Lem(aJ_AOQr~3H z&^qm6pAXz~1_3Y_@3f~m$I4HHCHma)O7Cp zkj>}N)a$bTo)VVY##pMjGPm_j#n>Hso*wlT>j-@^>e?+V;1OZXK;^p8i={x+@K!;0 zF3wRedX@tEn?KV!bC3yDFkeO}IWi{k5o!^P{z>=EnWhDEr(@pRW9% z=pQUlB)sUWA_yn|$5!~`L6o`&luYipU0Di#2XR~oHeNOlJQPo zpTiBYh5natz&ikJtOpy^{LZo*WwJ85T(j00R8@Eq<|4J1166zB-htKiZm^7%LDjcU8!8<7accTQ zTKjS5xBOJq_15SRGv_a_vEK3d=&g}6WMy&E3zKkx#sF)zrN?hS#hjE|d?nXhU)_ z6Y@y1*4W_~x8K-i{ihW-N3ANn#Utl*$j?`e-c@p(>L@;WLky*G0}+a?SU$eA52tqh z4BSgth6;SXgl=m9+G_Csbk=ehGxo@eSMqA?og7>I)Ux}^>-UW*Ho%k4Icgp zbHvyp<}7fS5t$Y-7$EqD78rT(2C4RCmQOHPU|0#w)`xBQ{6@;8WLPYsA6EpkD$hS# zM0!bb20A_a`!;39D)TGVwwCxJY^KtAx=ppz0NI{Pn0Xy(@~I-yXH%|G z3IQ0?Hu&trrp3&u)#0B~ZsX0h$$tR6aCvZrlXB*R4*3?$9kYR5L`9j)8<*?rsGtHI z&4CKAH8)yaLtHIMrZoMyfYjxfFWGAdx7^HpcWj6c_}&}g6McDBIw&rX=FCE>Eio^+ z;{~&)FewzyFt4A@rmLou{9M@|vCzzjEYPEH-?~Ajl!{%;Io13$Al1IaUh$dZ6|`MI zB#Lfpk&Okku}rs;s#b6Bd#i_P?_|-0nQn3hqv5pkLFel#g#+WRQcTHbClAY#p&PRUnpe0*ap`fs7;5Q~;?4C;NMBhVLXbA2jW0Ns$D7 z87R}yPcTUznMf?*=1L0bV-x}>18Q@Rc=hsSR82@VWmki9Q`4Oq=OUEnb$MI&&6Lgf zZQj=zLlr}&IUzMu*CO6lq&{IzzjthmjcjMvE6eZl0ohd}B_HKV!zz@tF{S}pCBK@y zHfTNT6cCLA1(J{&DDjqP88TTwdmT~JlZzOF15Mlmd}20f>}1i5l+dr{OseS?&Z+4E zce~+8W~$v+J%X)pCe^Om9M2rGC?1HdkUPLP(H}!Sn)sr|4BohA9XLvhxst6(Z+Za` z%?ByhR7b;GORlp7o%0tyf~J&ZB=ExaB zx~yC9LmUSaZKQ;9pBLw(iQiut%G^*tm+y)0AaG9MyWPh~)f3y5-9D@f#KV~HC8uD%AaBZjmUgF4h>cjX$(h>4qmCjTF52nL&Vq!481)8+HuKV-wMBtFc(iiSADa@R{gwtZE~@e4Yt)&kVtrP z0H?Y=l-}+Gd%|0x$Eo}P5En}o>2H(*eP5vM^kPeWt6uc1)Hp`;N1^iP29AZI*y2d}HxO0;H%oWmyRt(X!_53A$R4w|3+G@fnVF~v6 zKh~Gq{CIbDH`aXLL?B;taZko`bL{y+6_bC3NDLhvIn#e<-v~|5Nn?)p! zKMlAP7Z9JIziZcfmolLZXH9E*6!EW3J)}jL)sE6;OS7c==GAW)Up_Eap5$O;M*#_S z0K{5wFwv)QK+>n@3A$uCg~hFR3Br#StBu3W8R>}mVJ<;#OE7|UV+_>8u}MF8t@22Q zec;C?i_GTV5;-X`|6sd!#TN8^w zRELZ<>P}&UW|(4nr)C&&ng}Qxb%nrvvjoAsm;M2cW3i;Ke)g+4r@(eyQd2Ih4J=)T z{na}05b1YTBwXN54Q50|$wm_*m2$pl$*?X1Ps9E-KU%&3*u2t1O9!^IV@YA5ZSmxa z!={fG@2)beI~-2z@m2un5$gy&nrS2}89!rySGDj1=&*tNfp4nsMz!BYx!UAJblv!* z{P`=*0r4dJ**s!t3dAtg!2thvfJTEgB$}2`JLNe}Od5)FdfwKkU4W=E5S5AD)=(Pr zvFuC7s{`qit71%9iS&*^C9_1%%RMo#gQ0{Hn?fZ(^?kNwT(nSqJ-?fnn5YxA9U$c*MO2I-8>1BpJbaIPu+)Clq zEd{$j?;0wYSKfT2n;I{OjQsw)rfZ{~+e6HT7=76FwK}JLTGGtnGG*X?Zuzm zh*jEC>4Ni=(aI?r(*j>>49HGJz!5-GP@Y2%pLYwx^mGwOo#Zq)CAx2$a2U_%^Rl_{ z@!<<BXf73pFC{69!e`;)0vD~g zfAwQ;g3W@loFM0SSpBYH}iC;a--JqwJeX6J{XSTyw%*9BnrHSLHJF$7Xb?IU1&9vjD`gc}x3Cf$dyz z&}3Yfey&FUlYGb{pZ(vnaBg#UgJrD!i z`Ft4{*)BZFIRSbMjC8X70DH$g}hA6c12q=n-D~;M8Kh3qCHFu6(IY zzBNj58u1uYCDrKToLdDm^zmomN^63EimgkN(H&4Qn|MK7Nw-8kO5&7yZXcgF4mPi_ zuyAz+J$+Q$Ai;!^Rp#&{nJ(H&?2YB3g1YB4LIE78TE|jPU>9Pbc>;|srHDNNl^li3 z)S4Gi3=2pL_T28inA}3ae)quJR*3FnZ&j$*Zl8MzffN!rE`PoNfighQjV2HkzlMFw z*ngwPa^5b{r58eBH9lIRqGz79<;Jx6G+RZyCFPmmv&{4=M4^bD1SJ>xy#p1)se(1{ z2j*1NBQt?s)(|Nzu|d@5GH<0irk>u<_-(P=L{i81XC&XaM>Wyh4WW4^s{1x$k2&`z zg|w%ZoPRybou$MQm2g|IK|ymh)$cpET*8Taweu zde0@Bhu6he5ACI#8g4(7ZEWcjU-zWF#3*kKCFPaa=x+`b&YYMZckH6M%) z70}ThH&3&eHhjkg{&NvfXE`mgPP~y(wDJCi(qQ?H!FGGvn#o5CLoQL!Yts+Fc5g?c zjRR{h2ivnwb$LwIk2V>r)mjDY>$Sa*+pKZnJRn_uP$;SLGEXZ=C8qr9$a(qGqt&&J z(%`BEQ)dF$+>7Az3$rc9v|>hHD5BWM)U&{qxRU(&dr6bfaR6I(2yBOYp7$n4Uo1*C z9jDcGsBmUUl)0G;3t(Ogh&ay9G(8mFb$eP{>Cs{=hgvASzFXh>D%y zsr1@VW=s3xTTiaqZ+CLlfOwg57c#7Z>+E*dcaMx0o315*@}-JRxpFZbKco zEIKxNKf8oFtDcW(fTr?#3f=o@MqG0%*GxU-QaS!E6Rr%PBk?Y<`v39gzk6n3nE$TG z|19nQ2m4=s{l7QXK-?yH%cI8gL;Lq0|IefUU!D1nA#ruzAcP>gB0uDompQ`o)i`v( LV}J2JzgzzUR8YG7 literal 0 HcmV?d00001 diff --git a/src/assets/images/share/facebook.png b/src/assets/images/share/facebook.png new file mode 100644 index 0000000000000000000000000000000000000000..d1ed03ddf70aa2a9ff55d3d6bb2508c847af4526 GIT binary patch literal 1364 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 literal 0 HcmV?d00001 diff --git a/src/assets/images/share/qzone.png b/src/assets/images/share/qzone.png new file mode 100644 index 0000000000000000000000000000000000000000..c6ca532ad3e0c9298ff0f14794dcf9fae6e0078e GIT binary patch literal 2278 zcmW+&XH=8f7ENX3L==!Jm;{Un3_*CJjDj#KRR@hQwh<7JHj03V zVx%f4I4BZ|2_)1Y5E4pgf|Nu^0{QBEzP0Y%XRm$M+UKmb?~i+zMsZ%FzC|5}!>w_3 zaqz@y{`b3*h~fM7S$bF@1=}67!{J`tCqscNa5#bn&7JNDaH-%Y50v8paA+7;VTVHj zTB!iX6XeoR{xM9)6qJ7!ZSe=WR8-{pUBL*)8{kq@pC}O51M6ZOZ2hid1RV~*tS}Q5 z#!(dH(4f};`?u22u@ex7qT*1oec<7T(AaZ;?+=NR;jgu@d=Tu92Zu7DzH6%XQ=s4y z*ck?Phr{DVsB#RJ55Na&+8yH={s58-Wd7gAPHMsSu?d^!&IgS)GP9X)1X?s4?5qerzqG1lYPU&VVA-W6Sy zepnhRE@SjDcxA;Q&JMQgoBvuF|CjxOcDdNE?7vy7HSObL(c_~z!;7n}E>Gr|pYEoZ ztRfxM&EiR9s@)qN?a|5%bukI5^x1tVuTgR-_TUX%yS-;TAv1$TKl;o&C+oHo%|F+> zg#MC#=FDn+BNpB00Z&_9i>7|lZ|?)wXQHhYHQolMdmOjZeRrm6Z49T@H`u4Xc(L+F zTSrF&k3dNjakq)dPtL38v9We+C7$2b*5Q0QAA1$zIb8OG2Wj!2Tue=^tnRMK&d7M2 z^vPQ&^zpf?o}HTd_uaI7K0h(hf#mMyMs;@eymH0Yw*YTsT=cxaaHoZZl~pQE(9Lab z)M%ud>)_4zaj)7CPG$T)f9o34$7j6ei)^oTgz%|ez-(i}$J=Wo)c7rSV(8yeWq8A!%s_&Rpyw_X}6$87ZF)OcP8}HGXDS zR&qc3`c-)caME0+NG2H#8Np_4eD`D9(Q{E7qN=(*OG2I2+5Vk)XI1ZX3Tk0tVNSHp zb$8OUeV4Pcem<;;dO&A3=8_cy$7`+U37+^e90@&xYpe_GB^P$&6Z4NcHjzT!xTJWU z4CK&RQ}`G3hB1Yrw1h-F|EA*U&I~zD>z)KZ{NB#K>h)+uL(eMu-MIELAv(=rr+NFAf@7+pFr?KV-Z#FaPoao z=!Xw(Zr2h0U(d%e$}P7zJJtQcDh8o<#k`=e)2~EdCS}60ORRNV$w;hBKHb|pIeD^N zqoJzK-)D1dLWcyK)4?Iee5D&EocieH}sqqU$NUT_uyGrUtxM zM*Wd|tL^!reA=DiW7kn+Oig#=z5@e7tAmMfQVX^bq-wr*`1)w2iI%5cMIkAO^(Zed zCvo*JW@d+_aX@eBOy7~iI@_AU%L@&=a2^q1d*!?IHcdTh%NAUGXJll*v1a(AT}c;S zWBf;U)!Qfp@``bDgW;iI@%-Dj3dIQZSKl%Qv2w-o2F{9w@GR`gO;S#{`<~+Le$H5;BxGr_?lVsMX8bb%0zG9eI&N z64j`+)}~un=2?wNn;uiLW;&ld+5WifZPf1-tQJZ3AniITlf61UvVmz%zKBaa6kFI8 zQ%&(I=AEgwe$3#$}DfI#NiqO2!{T~jArN+i~du+YLuB5~=Rzv98o7velmpP&lL8nF-V0Z68 z3PZ1u;3Vi@MB?&Qwb6Pu1MV+{a|#8U>9s3+1-E^NC!YO?C!VjbTAmXCw>7qt`_D`|g`dam nt8O(%h0FuYbo7h%I36Ls0B%X&NQ%CH6mYJN6o)eVfcSp_y#xNX literal 0 HcmV?d00001 diff --git a/src/assets/images/share/twitter.png b/src/assets/images/share/twitter.png new file mode 100644 index 0000000000000000000000000000000000000000..a19593635491b6a6b870aa4fb9a14d19e2f17140 GIT binary patch literal 2061 zcmV+o2=e!dP)005u}0{{R3yb+fl00004XF*Lt006O% z3;baP0005nP)t-sRkr_CtnOH??p3VrQmyM(uJdNI@>Q(vRjuw-tnXE?oqDtRjlq+tnNv+|5vZ@Rju$jQ<(Dv^3{-o3P==A-l)c2~^_odVJ_x%6%`~TPM`{(riUa{}h>-)If_ACrquUfvhaw-^PA80snz%6^8M%Y{jJyc@A&?w)%TCc^z-`v zWwh|D*Y|R}@nW*@TCecM;`+ie_W_*t&+)9U+Xweb1<|8ctU z;qm-mvG4o+|5vT=|NsA0tnP4Z{_Fq%04#J;PE!@})8|1c6!7NJ-azDSltv!A*AvLn z2bEO*AhS>43hZ+T`Dy{4@{kEm-vDs>+h+g(1*S7WA6=VDu^N=aQ|z<%j=^Myq&uP?hfz!^Rn}K9@yR4nc1PNk&<{k zi9{q4i)Au}!s*oO8~#eKcRCdcnM^Dei6jypkD7(D5(Tu|9S)m~&sVE4gw$$2-)3_- z>~;;W_wFb2tBU>l&(c<506&1`Lr zk55f~{W>-li%m>SPX~kWF!6S%oh^VSQ@-I6iRR`=B$*+<|JSeGBk(?NGO-EJY<4

X)ko2{+P zkq;iA0iQmFS(Qkb4=57BhTgq<>sD@K@%X!UA3h8Ye*BmoIW>g_{PG26RU~3QpjZrb zLpwWBW&?qT4<9}H{TmJV`7_L>Sj>DtnG6cJw3NNokk_YAFq<+N^8pVYgbX}?{_NS- z)^q3b1(Tv7o$_{3bQzU{P_Slir$$UV)9(EPKcrlqbt*$~B zre4o{z=j6cP@gYNBOv73zN3zgo*t@zZa3WCUuS{wfN+O(TZ4lh4|%+q86vg_ zdDJuk!Y@r277RwC?d@*&$VgWgS-|`Ei2xG1)zJh9y||~-f0r&%TObn?#C}c$A`7$u zLW4(Xxm-g-)yR^m>6C-40lsWWSVFNgd`Jl$?aZTY-xevb$4I6Lfis@ zY$vUNkc9SL>g~O70gV@nwYCzUn^4A`RzOHmMeg(%qELP5V*<7-Q{@1lvVx4a6oi{V;0gXodCJ$b3b2Hpg9UYyWeewjOpd3}e30hdLnlDvUZH_cDrxZC4ed**QtU! zAlEI0Iw04vhdLnFHHtbQ*SU;3AlE&QI$+v`J#e6K?tNZ5I5HfN>mtf^vSkJ!*G-x0 r=*8y==+L|G!0Tj_R7illPOt!$Z;EHPA~$aZ5E`yOU4MPnNwL^LAID6);r z5Rx_fHY8hwETh@?ncwvM&U4QB&hvfm_n!BU_j%62*x6p&C9fe5004GbUWY)X5%+t^ z0i}DBN{*&9YR1!4$|AZX> zf2HKVG1BP^lOT~&7z^P`hdq=?Bn+hQ?~*T^CFOznNPDFsIj;)YCB>{H3@1HZw6w^p zsbM8P5w5I=W@kjRv)m6K*w5016pCPAfImFUEidDim$Tyj--2NLVa( zb~eA|qhN55-`>tnP2r?tImNHpSgh#ll$gnsP`7ww5|7j%7#ifav@m01I4|@0ogM77 zRQ|{iudI|;Rwfwe7mbW?3SJ8O`soZ zDZ;U^X+p{bmq6gv)(HCg_)Se*0$w;V!NI)}ba%6Jvbk?7gbVZB%1VB353jzCM`{$W zuZu=T#cOMV(GfA7E}Wz=LPPi+9n9!xW<)qUGlPY}NCW~we?K!kj9XG7=;~r;JYyv! z2p1L@en?(jEw8GQSN29YGsDG~ix$6&mVZcuLJ614{Xk?rO%#rgi{|DS|DjorA%jD?n-m{Sc_F!!!HQ`IniqK_sNbacjg?a#r9-2DIS&fpN9n9U$@6q3Vqv z!(g7zjEo5lYcsb4&`VPx0RVE_EFor&5nne8SS}832fC1EFrdYb-No*;Wa)6RSK0n% zXF9Z1k>mm~wcK7}fjo>r2p)c%U5VZb_FSZs#Y11S2k2v3T^VNtcb+Y zQZ22~vOo6a<|}L)81R!UZRjfJ=I6f%G}O{6EhQ3}7P$ttGEc6!xoK(|&$XH1%@h@* zKVq>}Rd(gzZFDA+o_D@~+6DinsX6lU>C-m{F}qgR)~M8lqLM$Al)}UBP%t~R)q)!J z^m5n4Xzgya)ljyc{`j;7yvr!?ZU) zxS+a*R|b}N&$~{O)7U$vm&jAK&x>(WwVNBAf8pxuQ&WSoygWUTMzes_l(%oQinVog z{wk(z^FbPsA^`RxN}q+aXE^`RXZ&lwMt4nIvuIU!a4iQh{>q3g5`>NLLbhylVu=xlJ28Pfv4-kuT9CXu2&>4#0r%$ikjIsT%2QtXk@%n@_VqI zwwhdsOm1c|*DWa0+uOW-xLCjFnC|7SL#;2)g$92~d~)JC0e?boVhpxyO_U*#(ySxy z+`{978n0Xxi+Q{;cMpTH0d>>x@R?IhC<(E_jeOhH^%m==Du^8NvlVblCp`STOjOi} z)nIEyg^r$IfbwAw*y^Y`h4~BMdoBzR6*;`$Q8!jZBC;2|9zULS&E*dkj*rWHt}`G+ zxw>x1EYT7ajz2e!q_cFQ7AX|}xk~4<>NAE;dR0}YwI@k?MAuPbwEB_Zp%_L4LPkx# z{^rfUV7`%zgeE{@V#UOCgVH0D(@NGUPv!J)DIVBILiziD_Id!E57;@r_jK46b?c63 z$2#@)I|2LDM~e^xC*0`hvkI{|O%c}qd>7i-`0Mu>GG(IFPN(tSeG#2*^oUK}B`+K5 z;gMdm{BHn@wm7uN<-P}|4^lvt4dET~9qCC)uSusaUNU?4a4>y+)n|z{USZxa&zJ)E zz$+pjsg|H=K4$OV-huuG^7y%MtCoV@LNMrxL#zjVJ>!*u`ZT zIFPp;d&g;?1_9^jf5QP9Q|iIB~huh)hGyZa=VdiaVSNPVBg=Dt7Paczta_75m!1; zc#QKRCou~Qf~La#2BKT>4u3Dsv|#_SfHX&qPem?Tz~P~+l|c-qrzb}*h99yJN6PE( zC+L|wj3(?dG8!wgUIt#g1P38t(1Y)5=qrOs@}cztzU?dHz&OMRLH1Mk)C(Tk&oA%f z=A>D|`bM()#+#I9DO_)HbbI; z%Y8F0M?ckkU72>^!zo=g4AdbrQ`2Z|4a%Vv8XucIbocI^^+8O`%#71Y z_*SnMmvi3V;-KY&$((EgsFT4scMkKk;!ZnI>{7m8$;Z$3) z{Pihlhk$7P<-#o2d?73m)VdW`=A*xVLE-o-{yNbIv;BcsNGeLe+%^w6f zzBYYG>9mNUMsL{vW-rXMf6PXSUK`s2p;y-m^oH1#Mw-}I7R zd4*h|b5cHJb0zV4<=yx!A&()B2|Iu0#dQM(p)m#l}##`^%}zMk0YkB?N|PyQ1GT3+^uPkhqR zwpE_k^^mjdx%|@EEbR>_CK%u{U5xBm-nzK#S3T5t8 z*+b^7jlqrgK9pX)T3;U-xkfyc8A|hrjt)HYt@K*WhkMTpR#U)ZRCgd|X}CBg<>ku_ z1YNzht!;8LF0R49-X#l@cP5@as_Y3c{04T7iUNV0o&9F5Z;)a|KfYAzy>2(Sy#EjE zyy`#2a^+IUyr3nE6B~GoFtdFCh!S#z zwl9`&xmboJLEw^2s^$aw`nplB?hjgVD9X^Wc@*|L?)z%qkvG!61iE+tzw<6bqZjsMoXN%b0ZO{*MjtjpEL`nKE99{x)Xg_)D0iSv{|1A_F0Z zgA!~iQaRYA)(2l8=+`8OgIz;o&qPZ$Nd}?*bt~hOu1eJbhG>BJ);TwCqm|FC10P>T zFXl-kxrhB%XKq;>1zoD;C9>EQ=22GHKkVZP=}hqA1JT|q?N@Hw*!P%l!KhVl!nX5# z6--((-O!mlmN!8 zH^l_lb?p$bgZLB5DS(>J@yE^roVm<&N&=VAXMk2wzle9tsIn#OuHd#THJ}C|E5!$zSCn@Q? z?KUK_pKExi@cq{cWoVc4*%(C6g-VOsq72MV_5G74v{2y)FQ$FNIP~&qubCnwF`UfI z*%8?t*Zg;3pT^|@-1Zt06Hb6GOxHeNtLD_DDNGlPY<=qcQhHH~EUq43nFks`WQ|htly?1G3p4-1;#=B72Y@L9(P3*-K!6qdQNR=*@9<5Cr5xN-(o<-Q>zgF=&TA-!Gy7T&?88hrG7GpzX z-@@MqqBkc>66uX?*LA4|9>(h>+Lye~=aMKOW7d+1LZ^&PSr3nhu@6&XO#Ry@93KD}Q`VPv;BhVJg78qDGLVtZ0aB>O@7av|Y`YzIUPmQG^bZ`SR zhdYqXi$qb~jA}|859%!@aOLq9O4)L^9Gli<)A?RyG7L6sbsEp0d|0A2(i%?@Dn3Ny z5I$=`6SSubf1)0uYL~HC3^J4(XebvubE<2Jec|G^UWuAN!#;A6GQM&iiq@nZU{HLh zcd8>lc9R{*MerCTTKSR>Tmww0M_$i|Z>=Q+(>2$+;&LlPrAzXC`R!mP&<`XVIp8G2 zcW|uO844R4BM<$Lwumm>z^F@h;pkHKKIpSJ%k-O$xn%ng4 zss;%RZ@84nmELwbldE{Af>=+4Mlxh{O0dp93TAB0`qKaX@n)DvT{{jrk@SaP24SLe z@kPM(u~zcz-H4X7fY}?as90HJTRW4ZTnKk7kC+Z>XlR|ENUzAGjR=@c>cuTCBRl3XoNNDU;8eQAY+#I~lNDTBLw9aoM)#y~l@;x>p0XB|?6Od7 zsrXHWd-@Z1?e-THLH=49`;E`QvuQfu_Kk?yH21I&7idt@mNb8dMRim4&6%cZiqgSv zi)_RAmWp!x(?=~0$EC|7Uw#4XO6mal$RTYyTg)uU(AsxV4x`MSUMH~xK#9KwTf47U za?oS8T*&N}-_$Nj@Bagg&^gk{O;90tGwXq*A;~M0FOoQQeU*r~<IApGxTUek>dk_EMZFrPcrxKquNlG?hJg-;+{$vhX3si!J zziixAddfCt1m2c0lHu6(KU@CvKTQxDAlx8wOl(%`;K!G-X|E!r6QYJh$$yjJl8M5NZBXk=YSyfy!BoX16Vs`?sJLf_ zP2&rNG$o|cJ9ELhMdN-zNVJcR;_Xq(XklF&d3-i<3~-MrH0|skj`OAvdk~hiwFty- zgo=7G?`xcI!<(bo)`~m23{Jr>K|7TcK+kJU*3U&XLPV(eR7M&pqAf&4o+8egEZo=I zERC(N_hEZ80L8J)Y+zC*1q3kFtA=T3sacO+W~rXptTAE|t8Mn5LNC*OJH1hoFL zpfHLE|D?bR1$JWJNjxu8|EQv* zcEA;j+~*+`GlVdolA37*J3hurFHi6$bQ$mRb|e?TE456N?@CI z*WXJE+s|%n5TRTw5%WCu>{WhzLNLMzRF*E-IB=q=t@uvs9lXLoZvP2Mx))>O193aP zuYJsjOw=94NTnvY7ZYYx^v%REv?iM!M@cy#ONPV(h0Ek_xY}B-ut!4SA7D*{gkk>m zSO1J8fYIl&n36g97DY*Dz-U`WUwNjd>sO!a02;ZpgB^k`hmsR@7HuOd?xUDti!5F5 z1a-2%6svB-0g0m`6Zt0Y_93cHGurWvlCT1!aJiUE^53gEQ3q73@1L)Cq4Ij`uv5L$ z9y4c7RjwM+IKPIL0Yv7xKLb3Xfl zTIod%`;lK*TP3e1vAN&J}-;JmSz6 z_ZZ0){n2(H=xD7UMvM7AoP(IaYIB9{)*ES=sNGdeg7 zkCyC3s;j$4_|NH@XqHIe1Hu(5x~ca;`!a%h!`yyDgmNFLWb=8rxvyPk>X_`llJY+# zXdf*QtH4o?t6J;82*Mxsg_RxY+}Hm2b<9vH5*l?#Vy$4%j$>Y|2`F7qoCc$DPs$S= z?F=W)rc$W29gbzi=OqFb*uF)XjD_u5zXm{zMxswYo%xjq z`yZyR2q=GO`ASs8`&jZ!Hk`MSx5YstH}oA!RTbAB0+cFljD1LbTzyGhHl8dLT4L)H zFAqZwscT{^+iW+TqvqE2Zh*B)yMH`Kvelm`e&%@%mu(va$-gzbXw!@t`5&V?Ufcdx zrx#+kxiAknXGMgwE-OKvYBO(_h@Jfc)tC4!Q>R;Vmw-)XcEsi#vg!)Y86 z6xCI5{6gWi{FUqm8nx1Ij}fzy@{OlT$aMnuoqGu&S2Kg3h@T^0z2aBs5R3HGK{@Q0 zqWY{MP!@FRz2~xHTp54nPjSR)EsA!JaGE_&cvkt(@H; z(Y_j@Llu+qltmnwf-~0AoaWd2BknzA55t+|+(j~YftMjQ#o~7J9&Qf<_ix_lSO%3K zA*l%&lg&jM{NNNYJVZn_cJ5H=0JAFp3_f_^ulEy@2@NJz7{Z24VcW+yV6@eEmZq{? z`rx0#;_<6I)7M%e%fVqLW&4{1_IfjczK>Qa4yk}pw&m63;gvQDl+PpzZO1c<2o;A` zq>un_x8e3Z0W;E!N$c2p2XmC4P z2$RS*saWt-VQ_=eUx{K)-C&hDzE1EGI=$rfEgX9Xv*bszvZ1$Dwl6b#u&;`@6R!x7 zp29wGcOSQG0@~Ieq4C_vb&~VYK`yWz0oMY2!&nz_y0rkcyu@Bp(J*Hr?*~6b(VF`y(4j+ilu5r3}4= z(m}<2y)}jJ)|a1hKCL@~+0e}uc|=gd-%il9eQIwsgUK-3%En@REhzNoJuTNZ*(6?x zOYak7VGo<9mU-G+QVZT{04SY|4MzuCj5rfTn77ui}ea69$A zqNKlqoO;xF?bwJmfYk(&L*h)w@F6PFGwdQ1C5bcH3_F@Q zu&764SNHh}KlfsVu24_+@~(fwP&TlRU8#IpqdMgR{9bNGV&8a7z}Ty#(5{0i(Z4;Q zLJ*bzNlVue#&N*0dT9)H4Sw0n@V6w?dmMuD>zqg$O65EShbdDb`x{Cp{u#ly@+`1? z%{52pLK)Yyk-givj7A%XL0G-5j$un}+%B47#HWF%$Qv(16rRE8NbxL-in->iU;MeD zxbz(am6Ja3$;x>3AK!R5vE2*Gj&8EHbJ1kCR1Q$n}Z z7;}{BnVaErdU6c03Uz$hAU0Vg=aVR0#iNl%`qA%xdq!QmYS^RXhx! zb$%qklt7Ruk@p}oR}U&72uHy$cotkh{w>)_G*Z zW{l7yG^(*^zja*KLBt9(j zL*Q+hI=RAvRXV|Jzbv>U8tv&a_y=3@WS*{r$R6k^-VDShmvVZ5eNA56cpwi_?0Ft{ zJmZX!4oUInC-YObHz&v)?YBocWVF~P(}i@2&8du4Op%5_5z~p5REd3k`28_oGs&T< z*~PblfpYFyQ%uN!UR!FTI99)MIuS}#w2v>rByld+VJGW%B#0e(I(Pw zPdLtO<&Po9J*K=2$V{vG0&4aRajasI-2grhAqrN>=jhI_o9Li2Jh#eJ(FW?<#l3vc zek+}rh3q#C;~SFKv)3UWv|5+GmcNEh{Pzr(qb;1~_&Jv}R(}sFHoXQ!6F$ zfKK4)2q0;rG&?8f0Xrbu#qT;Wwf^8Bu9%K{h-U>kUM5C4gw1hQv3*40;K*#6b9-;L zx)xRF3>Lc#UruiOIb4-cip>I2Clk6IiRnS0U4-mx(eKG9fdfljNaW3FoW&4x&qIy% zzDJpVDb|SeqSr8mQC#x!e(i#?ep1nfrifsO_#TMOYy7qt(Mm-Ut0uhk-ThO;uED`d z)6%Yc*O$XY^vp7^bfn>QfjWSqTQ){oajFzmIcnOA`D6MZ`R=CIC^coZQac^g;t9_K z3=pf{Vv%p9z7Af=QB8?}u2h_g%Lp|n(Rz-|dy2^m}`u=KYM)mgKi?$B=#4{?tS_PIxH$l=lOTx8^X{f z=BMCLnpTkNBEf!|zazNMgyUGiGZdB;?mg$eC0mCUvq;RJ5!NRxi4@*L-innq8&<^Q zkjEp@Fg%M@;T9sKI;Mz{1NQ0>`>;UL)HwcnSgNBphdcuyVRiCeWWQ3V{e%j$s-r5= z&~_+kN8;My-A&r6=9O`Bm@`fTD}#)a-4MCQXT%Pg4dmDm{rWj|+L_6W$mF z=b9^JxEf{t@Ye+TIu}VA&b>ChiU?g&h^Oj)A%h z3b|=~HzOJJLyg*NY~%9fiI3ZAMHr8BCN`1{cf-az1eRqh8FxG&Njw4D?)unZ+gmm) zz_f0^Jl@3p?LR;o34OcH?yC{Znm2Q{_OAg23X6$j6mJza&qGSw`iupu{phbN>I2(V zC0$Ad`QIz-jr6c^b*CEmg-C?tdB+Ic;4+k=ZG*Z;5(m3e>02g%a`%c%)Wc&IO2*PP z_J%fdmRQht%nRNfm~T9-dvoEmeE6rhP^X^aZyR;2xhiQZecbdn#QQ^j(`lFE0YXQ} z?iV}#a3d#3W)t-1QHjBH)&iY&U6Q)Q4r+t=RNPNP#?2i-Nr0pLb;#SV`mC)e(rUWj z1@Li2#@38Q!OEoL!B;bb@b$D&wL!QirzU+iVoGalO&`=g>02v0_DLn&$lGWeOAanY z$_zzi+*Ty|2e97s$JkQZx|m5zMZZt|hWLVw?$gZUeWHrd#30cG_J6)@BWXt0XZBneu z-kzJlR!HBA9SWb^k-{k&u^SL|udSt+D5JtRYr(=!**N;pFAD=m_D$<{{YM4x*LkyW z>#no6LvR7AC2FbW}P6I%o~bYH!vnmdVvYFLxvH(k&CH3?&KxVEXrUQf~fJ5KU##L7ZJm z$>%dW#|!Qfa+gd|@TiB&A5cka2%Z9v(jv4!08c zp$7mJPqlRBRDzJXa@Hl}JiZZwe{>ax=N6patgqG>0hw6~ zhBj}J2KSe>Erof4_hVAAXZYu-?& zv^>!m`Pmng6!wP@u8^h+4yo8BN4Dw0V)EBbqcXdsCYH3KY86kR3nz63`We#=gx=IusU5waZFu?XXXf{uD26 zw)qc`$7USk5foGwUjjFHJWE5qcQ`Mqq z%?8UW2cwhtrw0oc1?}ln8$b3sA8woAv=oZuu0z-OZ7&ndOZY=7KA-r$rK=QH4pTCK z)Gq%ukeeWBc^5}#K-Sv%xgW3KdsxN}Ee}Auw{iH_z;WNz)SW$P^4Gb+%Lj!NGRH}9 zMSBZ5P(2f!@W-c;NLA8O^X*@h<5gw}V5WRunz)SlZ(_3UbK85Xde^=)N{6Hv@i3#Nlu#o$bk~P;^L~^HjwpKSTLW*s5&ReOovMy+ z9_E!*JH>lZpQXMGV08wX71*F7#)>bopd8BC8ym32FL4Y-x*v+?2mQ_bzd&Fb*)0K^ zGv5yn@5;UlP_9t34U96~4id1I=?CCdjZ`*@M|n~#BAiJu9IkL9M-*Deultn%`CQ&p zfgDT)!*v9uNqnci+^ODIe6xO!_0F}!jg*6zCZ0OU@bzbPF#p?)u39cm(g&P zn})8Eul!Z_9JAeUZC#I+W?ug14^8DVSW1mOlFMI1V*1ioSTasHFjx^Ygf?NP$i$Sk zrAkUh(hVHl(_FNo_X23|wK)MvYbWv54L;Sr9vEA!AM~dvCdftb`03O%?DMj66`~0E%f``k$b0B8ER*mJhcmlK2eVY;6BE2oxlX zmM&V(j!l>SOAB?>GWpCid^G9DceA~2?qMMRyTO8b9VQWP<9l}8ojp|BD6SAeRFv!K z7Pl^IlJt8b;pSP50n?*(AapM&48>|HIeaJ#!X5 z>k_CW$npsaZeL1Ex`CI7@W5PeG~bO&Lx`PAuzjwhXv>lo$iB`*SB2;2UVDD_Hg-9l z>$^71&v^2(I>G;--_6pQCBcb%UkshA<%zOAqow6}=bZ4m<>!#X;-|o<&Khn@r|8CN zoy9K9AGjB=D7P9uWl}9b!&b!h@&&pqO%%iV@^P(rv&x%ly9ck}*%)@MTUxVpnvwFi zR|j3)>ioHNoB>FX&Xi~qd@VJU3Fnh0I|kiM+`PrzaLGxmlFTSoGJcJ5&&?z? z#M!izKQx?R1wu}FGTb`U9@;TSGHudSB*;;!P|l#P!zyyKSX2rcN&-uQzh&MIn=`-B zsU}=mp^WH?6Y;3L?hHf<{x8O1m;S#fjJePY-rfN~U^K#CVuQn@8Zw>)QoJ<5g!o=Fz!ysapjLJuYub$)p8!h<(BE@#CFv9H zgDqrM8uMu2D9ka#nzX&7vtlGKjUvnC0(+Mc^Yt5m((Wq>#|`{|S}t@lPTut#L-9k* zH}RPto8OgiD@L=9ZA1u*f3J^7`$iSXy!WTptGde#M&S&=r>Bu!qMRP{tc83(ngQNl zQqjKM%MxXcIIpApotJARpkTQo^i_PQVs8XeBP6Tep2JU6l%AEe`$1d|@P z7Hm2CYPaTQlUlw-$|mC%8M9@w6CA>Il%gprdEkEDIEJ9Je!3yb&qCm}^Y80edN_*Y z4#r7be}R&=*X94MZx*Yv=2;oiLCb<`@Y@?3tfyeW_THW<}B73FG3IdeGatUpnCE; zMyczAH#K4cx9wXVX-1uX#`^ChqWl>;khpFe8vVQ1uM?chHndhcIioa`k`0MOIZ@&( z;iQJ;334UQ-d5gz;^xT6S^T=JbRzCaV?yx1Y4?5HL?3mKhf5mj*dc9FiR#V01asgW`<7WJ%Y ztHKPmY8XbNdKpK!o$71vbS?Ly1psprB)pFM@6x@mrKfq%2cNN(rfR84SgWBaN8jz5 z?zI{Vt<#g0){Xl4?qJw}a%*h>oT+Z^$?EW~&_Yx2Cz2B5C;ltOp|>Lxw1AzD*TcQ^ z73Jm#x=M_VaYYJyH$~C9Lm7~9C$=$Nah!Dbb>+b(4i=G&YJFHQ^A!7uLCQ`xotTxc zjR29Xbct4)VTPq{rgIWk;{y5n<{X4jDCzdkl;;v}2OmXnWU+{v{zbPL?xCTu0hkn~oLnDwHXWM}OeiZY`=%D?Qg(g>Gq zo-J=b8rYaJi@LhRsn>C^*+Tf_syv+XP3)u=x#WkjN`Yl=()ZTBnw|uz($Tik*}yxB zp=f#*Dc>9lSP_X9v9D*@dbE6)reWqqjI=7TDKXYl~p|S^A24~@J;**@V2m_@g zaYn?5K*wAQ5``yeHK*m!!4yrp0ymj|Gc0p5~A~=vG>vQEP8p!;djO~d&sL0`!(I#lA(?M zt2+_3&({mNqOb_=5I$&u3E|XLZ6%R*>T$HIb%fL8zWPLp0=>3!T`PQSACZ>}1Gwi- z*D$OwG(9NC7Qa%q!ho+$0+rR?VUUJc2CXeM6&OGmgzAEOSA&+}yCJ=dG|M8}g+EWfUh$GsUVUa+nLCFmM z#48-AYSZXWle+apMg`arzo3CkP|k!z7hdhP=y~mk?BP*%R*QpX4wqZrg?)p`U#IG|Bp-x&1La$4L?@ zL`IO1lH`!!Z8-rAE8C)FY%P3kMy}tP%U<0C_`v2?<853=Tty67)WDNS2T_k z{83YDEw4YQ+|`73T#3WWs_M|e$p(8#|1nkOWG0Ym-vVzY z19l9(<)C}p{K|=&aMh$dgK&56S=7%mogf)n$;Ml>m0h)6gN?KUYkqOg-6>(l4GNc3VPV@*8i{lgYDpe4qY1$ZK z(N~S9Tdk2St*H3jaTMhRY5c@LS^So>5;sAq@!-aD$p3;{jWwPdQ+*s0@k$Nq3hwBo z;j8jby&WEus`hm)7M1O3)nFA#%hh^qPds&{`w(>wyg3UzRbsgd0x&3|k|g0yHC~7I zuk^_Kna@%eti1SE0)(I^q%Dz=@-hJzZ^VbTJq{G(iF^qKq|c>OcG5kPWHkQ(VUjN? zT|j%xJIx-+&u>x<%lpGC(4S$e4>ld5LtZ{!Rs&xc9uc!GkL9-%HxCj!bbO?{xDJNS z0XlEBW9Rb%aJ&&a=ZEFt!BJ(8eM7C3qJjDI=<>+sId3LUU8~>Mwqp1nU2)|k*Fz2cGS5$I&i?^O zjvrE`B?_I$^MJ$CB6^O#jRmkK+%fct7z=Czj@m%_Kr;kik-nt|@gu_V`rFQcg>;mT zeq@6t-LG}T3Kh`~Cwk)HS-ki{*FnEWkW0PH8+Tm!V@@pFciww2+m^x;E=$@g9znl?#T4dES6{p3Is>R`zI3-bRnaEv8B+Ue zHW}T^ABMGKKWMFGWK1yzf)c?hpG$|B&9*%=ZsBnQexbUBEJ_9_3B=CzWsFaq#43KH z)4#AJB8F^kt#j8NO3(XdZ;ORi&pf-{cdkSfH65~qB;eMFHuTeKm2MNIRL9r7snQc4 zN)f8Z?;*n5TTZtPfac%LAl` z;;f$vRIFtYycDpHg?}k}TNB4dI^Sje)W}%lSbu%FLe;j9QmOazVHkU_*K-Bbm*mQv z(_v)k`w16ALAv+1H#gZd;d6dYR032`y$ROIW|ii=`u)do3s0+$#=aimG%0W7a$%Y z1?w@G-JRaMX1i>u90OG1e7HeCl&9V1R&*M1r@beOLy-Yl5Riu_HWC-^nD9FELSV99 zOTbqY(-82LNWFp$muyqrJLyDIb@-w@+sFJu3}UG+H;S^hSc$6m!fy1QyDOwUnLu99 z%`V(P+m4t%>O?9=CsAwS5Vu{oBYTzZwS!`A5lFQ|JuQ@eOEnw7Te&93C#*feYr@%K zEX^^P&-H4h%KevG@^_4r_$FgFk+jKD?@P9m_w2l(7F{MKG|f*dZ#mB&NcFRj6Pll| zvU>FQUkzY)d>4(*v=&liKs;ZCw2`GIksigz@R6X^EhqP8JuS}}pEJkFwmiS&YucbK zcD}YciD~>fJW%*#HMKoJa58?IBxYqE9hWh9yJ#hX-5MrtR6gM{+HpCiE#l%JUAvz%MwPU;1^5g|I z>)}#UYe*?B_3CenwRh!h(i5yc?wTTslBxcUZ>a$Y)kRQ8@JKFI=`I_xom>1?YwSp=7bFmGu1cs$ZuX{&cBH979l&Rohz%nJW$t%7Mu3eUlx&SNTJuRC(*YQJ>+mQg}H@%XDWkn#7G4sw( zvqVU%g&M^Cc^K4^E$Y+!P?{c6a$JX^mmX|I);?4LE6yhz)P$BjFi~)clAXmaV@mSX zMo1t(;^<)nD*$U{9l#vu;mL5U8q@IU&MikTck?UjeF;W6G^G;LnCtVrzB~{V+AHNeN zzm$?0>4ZX!927N!e~M-Q9IMC}DCLk11XIupbDJcAZ$za$u7{N@D=J|86VY9wvUbaP(3N)bc0=czuv~z8wU0ssyQjBxQyC_vl`h%yfP=#A|gV) zY9NSyG}V6I-Tboo2af&?keW?52Zt~l-Af!MT3w@d*lUJ}!f>6(AqW~sgtsek8PB*> z<(y?qaEkvXoVaxmegc%6-KZEwK-#)PT{+6Mh%p_p8+PRv z>wVQaw^Woo^*QEfFdHL+j zKWLR&M|byy*->ueGu_Kpu6|t%z=~$3dlLK1P8x>OrA;5ZPKI)@}Vv*OQvB8{5!oo6H`B}|n%!BSce;87Qmb3cU{S0=BS8COEZ$9ct0 zxC)hooC*B+PUT0B>d2_ermD4940+Sq8xn|~=3AII^Zmd6ah6r=t?awPX%E>Lq&3j| zc7R6KWjZR5IB%m=Qo7ru$n9N0QnrbM5vHRqVdXxHZoG+DfYx4gz=pMzU2TjCF@frN)J=s{x7G|`s$vfo_9VJIK z__}CF$giMls-UE7$5nxy?d9`xWWHzg-mlA;W&bq>$0+frozKj8!)v==zoXa(Rz(Pc1MGLq41-!(uvFWagVZy64V?8|)+;|(q{?VJ%I1S#^Ai-5sV6XB zIjuzRVcIrz9INq*r;*I>E@uslx)Ei~{v7V!d1&m}(RQ#P6A~J44 zh)_F#--Of2DRF29uy+#$@-%|D`R6viSHmL3Ut6<(#*i72?wNCSlHjz?Nkr$?PC5vQ zyLDnQkez;PjhISH*rkia8qN;ig>OjO{)*0ziN`88*;lu$|HNBjn_ zaI#=r&V^3j9pm~vE{@}@=38|M>4D2S=idoutQeKT?vq>m#?DHDP<}M8@|As7uJWW7 zZhGuT9D&xe=6RbzGuv?o)SBFJ2>K)+(Ffm0t?^spU!f{HgZV0ku^fxzHdf_~TtlVH z%ROoiPZ_uXamq$$ zDIGi0#&Ol#(oKU>`fuT?=ETq${?(qnvtiESIep3{{@*OvGEGT}axq_Q-CtJS=5neF z!E{v}6kcopuJ`)4g!`z}*i6JezA5pKKi9ddcOsN3NfN9_)Qr^88cJZcSscA!lnkWU z%QDtaof@)ryaJlJ9)}cfiK3oTUDg112<$gcY@d^A)5wlu2wVF%KYyp!(XXd=uvTgW z;hCMv_hjfqL!d$obf(S{W3#qnjn`E>JcNhKhf1BsSFC>x=(TOF6DJp?tD|#H z3=9g9i7y8CspoN1ziL(AZ6BwdYqF55{#muX?65$wjR%jjN0NE+SlYhuD6O&6%jfx~ z`hk0SgQH1N&Ji|~)h)X2@W3b$TO~URYAX|imWT$S`Hq$4+zizAjIwLCY4L%@jZbJ| z#TP|U+lRQN_Sl6Ugod*(?14^116jkhA%m!jOocy0J(gY1i>Y0v56|%q`qXUmOyp&! z3zdZ_aFy8iOr33^>?X!{y>`<2C{{}d8$SY>!wDle`V6K^n+nLldMD5J1tSK6+k7IOp5YXPBz&@IoAx6OIlRVRNxrl#+>fwR$MSN*v26Tw1E zaqX{NgG?&7^}EUkb~v0CL@XPat5E!jgUf>t0p2PQ>J3( z4Zw!VV^V^jo4CaC?-nr5n;naDsI9AZVNN5Krkjt;X-oT0dv?VMALp7(sl~pQq*cvZ zH*V&UEyR$R5O|T}AxXkeyYzVozoukJCrd;HJSLVB=ngoDAT6@kpnn3hjS?%tR-ItV z70fBWlxXotixzC-TIMaQAP1nq*wU7e?7Q0@ZuPaTd$)tSjX0f3H=bF;FCZNR!?(aP zT}QJV@U@5RE~lMriu?mL0NBBx-r}^DoA;a6J+Rmo?pM8F$F*4e3>CBHS2FMlX)k*K zy%qTAq9at{>c}HHG=jY*zL6c4sdl2BU4l8uqIv1UCptJBM!)3#VCz813D!g<7PY2V z@$xu>&?dCh>NtFzEMEf|mvApUT5YdB^-t>;RdZ{Vlt{FkD=9L2=P0X}C6=r^+^G(h zmZI?l)u9HQ!f5Z6&S9zkbH3N_6SLgrGt&Unp?pTb327uD0N2nE=vg~SF1iy$EcC*o1vFuts2PW zN8f5n#!VCFt-e{pE9muRzY=Qg*Hls>$K?6`;fKNB_YwE#HTM)V3H(DJMHcLF7WaI0 zKm;_*mDG#*R7zboC;DiAcrej^)x_ryvJ`(v9_^8`=&_wp9Q~{k=X;CR6W!SUk+2oA zssr$H;Z>YZt9s+9$SPm)=Zs8alMr6&%wa@ETiE#J6(IVoT{OmJJzCeUFCp(0MCIg5-puj z|5>5ky`%wa#{lA?p^-Y&t-T*cTcC6)dheeBM@6>bUa~ z|2A~MwB+xN4cR1h({Yq90KVDyX65tR*}4r%A~z@g`|wbOTHZg2GSHCp0g&p%_;yQd zK%!q)1n}KPjI?QE7ygnszk6)eCp%YWs)2-D@UKq$t$idC9;DhEE+n4dan-)QaCe($ zwqh0beid8`O&WnkoX9A=<+;7nPHmfaY9GN=u^&7F#THT1nrfB#)m7Lv$H=Kuh!==$ zv_^l{WUAmPDdC~~iu!t0o94oet zo1Rq<$RkEwPD!v3gq`c+c|q%PR`FugTCVGs1#Ps0xx-^h68o>SHT(7#+~|phB8^WyTu?RCHzSaIt2-;;SFpXw2T+H_loZP3vuIkcHfOIjMdZi zEYnyO8lb8=m{%-m8?w=rT8pU{TA^V>s38U^N&Q#omszqK8mN#hK+uN+D|#za6?|j@ zn1uIo{{inVb0RAfL&^7d_n1<;6D%NWYcPt*lZ6kiEb*PTG`BPR3j)Vx#yh@=TXB!{1*qgbp!jB&NHH2@dnh`-aL#E zn=UkW-`^r`Z=0FCx(o!Rj16PwZ|q`Jsu`&Y3D!rs+AQfDn4NaUIMn77&1p8duDiGk z*Ic%F$5XVVQ9;`}xg?^%Vec?kgL{z8-${h+7koDmRwkAX^Kil4&1D^nWXg9|g*l1> zWXn)D^aXT_!!{~lf086v1in?>g3Lb8A?VOos>}C2oJ@AWwOC%8(OCNb0DM4$zneMT zC~iWnVpGkDAQRUW7Q2}z$bC`cv+(Eyro)4LQgQv8XJy|BdQ=sfOc5injE^vL6?DMy z^R#yR?By9KPKWE%c+uYS4JPhLL3Kl-0m4mgw?0!P4aO{>pAOP^#Fg0NCuu%<*Gd*z z*IdgYnU`hM8*ZaejL>n$kWII3Cy~%9IOs3gJEgsXv(yUJL$xMh_*wBoe+Lp=zUC^L zT7ndN#Q4jAsV8l$5=!~*$`o$~uubEKd0V@pbdq|2=ix!IyhvfT{U+?mjbL}40;1l= zy1^!&QEw^K)EjZDcLb=|r_+|cq<98sE0a8L#XI{@)-jAzVZ}%M65Vq&Wu}L@D zyIR=#Lu76lzQf(XFO|RU2gV)n>RarZWhrj69a9^1 zdqatN-wCpY(u-VfO3Bz3Q(ZpLjVWAZ&*2Sl`KnI^b$pDDBhTkcQ^Erjkw8 zurFa_>CapjO*mV3-Vy%*{X_m(r8e1Vd%y*1Gwl6*YSiKBQ@bTOgOx4IrR8?=99a=u zaMcw0i?@^%g{O-E*cU+@+>_58Fhvckxhh>Pt8L+XO~>)V-jZdyC3ia0>3N!@hH39e zN+rC7c#wnCi}~ZGy3yFT?84Gs&y`uM>bR@dS4>~rwK!74t9AbE4mY|pWAM{$sZdh4 zAjnrLG1a=sgky^ zrR1a}l21Y8G0+~s)!|>$rfKqA@wC#|Qg<7Y0k`;Ki&R8d)t3YWl(L6B7d-90El=6M znv7cP{JiqPv&nS;^I&*3#n;)Z-?R3eEfeudeRx$f+O4s_*(V$WG(x_gS|QtpjJ@h@ zi2H(MZ&GY}n|X{?TAT+OSq3>lJb*FRjW5z}#o515tFyabX0$+R2g5l;r_7M1Voobs zlD_q5@!2Zwt`l#=Q;G+2QVlQrOeFSAdsEOmC*@gCsO`W*4?8Fnq4yDS-!_#Jp}8A3 z1%I>)De$Q_G3_4=Zub~{#pox3>wI>k>OhF5c;?g!2nZ zij+DZEM^p1ayxUIT*&HikopVFrB*6HJb-+O9(c@S0^KVo-j3P&3f9+jw&D;~*&k9W zTFM=wwMS2Kn~`#cb*R(Q<6B)2=D5&U9F4&wUyu(thHJIC)tZB~S#PaU9a&S3m2#qd z&KD-S1vH>2@|zGnaM*DkD|_>an7!@I!cv7OkOf4-tSxPpw-A5|j%FxC)T({hZ50Us ze&~Hx{V!|_9r+HdE)F~@M+ff848-fVwY+GK;xpOe*`jYeR zcADh5F8~{P@}-ov2`7~kYm!eMrxkZZ@_d}nm|;;FY~Dk_5=Hp)#pTS^YA0vC4|=U6 z2Hr6OT0tNa$Ak}Zc*oJ6&MXkd9IQs@!W#xB#Gc{vtP|R1A-d`;ZBsA4LPTp5>%yRJ z-dfn(Zl_NukAeWat*4?#LHVEMh#yHaZ2AP(rNpQ`9mIg9*2y4+4o5;Q^}~BVW~!cW z%(F8EQRO)Fr_|!EZ)=_h<$-dd`=GZ7;@smm#_v+~MP09=QZwQ+wkeaZar!zu*x=gt;0l9KgJPJ?@#BajK? zV?V@QaoeR88LQ47!*=$GLIen*qC4HV03A$vE4CUX4@om}D1+XVp$XbEnLN~h;6HavYyQmq7iWLeW zac(Qdt6U*Irx1S$b$5scn;Yvkvc-k-F`yuwI5PXI9bYBBQ0n~N3)M3;(MFO zb!Nu)#bnn_W2xr~!|^Hd6o|oFcLU0?w!Y<_!(ga4L@wlk3FYgZWHxO(wb<*cwHvI? zYUe=e?yx&pmgE{cz8jEM4;YOeed!Kwal)k@syH5VAuTfMQf%URB=ATk_%6zKyp#mq z>KqJVIKC-+i(VIBR%eF+TP7c4ZHL>2*%=BFXLy%3Il%*vFtw-C<-*J{j>Df_A$ml=A5$wv7c#;l=oVo#4iU)|N_OWV4XRT3Lr%kIq z<3W47w;UvYu9%A#v0SSToZ|W>yoTL(YAzC2*J$s8vbYb?^(4t)@6n z3O6>yBSV2EZ1$Us$x+-o3*vdo+D}ug<<^^&f|V5fw(_^|!R?k~61Yo7Rsd!}j)G}-lOM{8=iHodUw%GzNm^`*zqqkc%+(+|4kFHiKrDqdo!wqCb_BLj1a z{Jg(BN7=Vo>h(~#R0ci*FF~;Q)IHCZBsqrR7%IxIoZoPMQJL@HJNzleu?zfJF=&WK z@f?SDKI(R@{Hu~eem-JW=sp%1$0Wy@*Gms zPb*QmIFTt5%M>2$DBEp?#wKCAPjptUfCkbu177n(v3vsAZ6rK*)gxUzDtFNi(o~wv zwNa~u33Y4O;|?f(C%D1~YHrNXs?l84Z7PHo+JRj{3n}P))Q~*=Mk|b(jEa3&ONRQ8 z;umnV8xV10do=ca1+Wm1d zc9HD8O_bWTb4nQw$5P7bbjFcl&zW%`bsnP-K5b=AQoNr)04aTtDq%7Vss&XLelf)lTMq-$g6kKH+`8M>yB?~Bzd?-w8COR%GZT>ha z}-C!h$)u1J@7z7tAuLQ{C>KC=MpXC0%*GBg7SMwf?wt zeDFsHeN5gZNjg*vS(LqGv?xr{=A+f*%dIJHI8+t^1fSuFKe2YQxsvl@ za@6SrGbMM5RDM@IIrYRno1QMn?@F$qIpd}isI^&C`Rz=M=|jyp7TVHnVmTPI*<*J& zRyv!+9KoK^#CO$p`vtefuq9bIGE!r(@HNmr*m`c>ZppBxN4boJ)vPTT&5!0+M|0F{}GPwPzT>k&D`VDg%4ydifr~S!c6b_i)Tj>BP*;~hf_PD?J;GPF^t2|k^zlA{g(9NK;7={Y~uC#rffy8ehu$&Z%k%BbA6>W;Yziyp_z3qH!1bwMQ6NBU4#qU z%Lt1|E?8k=Qi_`f-8`_KSls7NKRh>blBEh=xd=(GBd}JWEPb%IMW+?WNm4?tc^5>kTrI)J@Em<_ixZyf z6yD0cn%jd6p}Mt6gtZX>SxMuS5&E2S<2h8_sZ^en^Mz}1WlK_x$t3yXYuk(Fusj94 z8rbLt@f>)c6Q5*OA+a{=+MTI?A9zb>B@ItjMPE+Yqz6^Gd#~3DROw4%H-f_F&k2?) zbf)+_9R)0c4eiLjFt*mDsHj%r=mj7eNUtoZ<9m~Sw!&vNI9IH;lIZf>aGZ$i+)cV0 zb-=rnsZSF`SWpcLH$z~Tl6LhX-dKAn!rd#oBdR>`*q}x!c`E~h>4*M9)9ll!HKsD& zSc0craQ-6C%Gz)9DESN?!R;ToA(m29rDOoq%>%`*S!?&Ms3j@Plc1))N60ykP_rsB z-dv@8Lyw=taY;60e)asZYjVC=)1J%u47(-P{y3uV$XOR!?a2QCmNk$x*RlRZ2vXaA zuHru(%L3!he(HS&D+Z(LzGc-+$hx&|N`qU!0y0(MZ9h*l?~N_7h5I|U-dsC=v8JK0 zeP_h*%BTxgA-Au?a@~qfx)%uga`Voey0fiyjYN>@gNkY${0-jQy$QrOSaD8DB$94P z>xT@Nz=m1dd^V?&r+W0pSB>IVSewQBg_S7Qi-O_y*n3?Q3EfDdj=15nO34W)YDwT@ zXbVau2UM~)fekldc}O5~*5 zpKK+z+MHg{P0k8>S}b#SBkdf>JdVRL(Q8({@XJgNpGb#H5IR`P;V z*G8zoYQ?R(f9(bpX*J0O|FQD9pmmB zbO|5N5&nGbGg+R}==yz4MIIk1?}dx&A79!0v2cF^!mw}NV(!ZS0OhAOck=J>`yE#`U*LVq7JT(!%eC2u_8x}9}pN+;Bl*9%eP?}m`2TIu8*GQF$0agxQF zLoM=8#on*9QjX2C91mV7y1r-O9f|wRBW4LN%&4wRmsGW>S5nq)Pv&q%R@z06OdP2; zO7|y`e_RtCNcY7l`7V-p)xnqzfGE{89{3w{IC?QCqMNZw{hn-m@X)5B>rWQvpYy|w zE(05B1o>Qf;Ej@tXeNf=q&T5X+QNs#DM=%ec^Co&=OIf(q$hDfx>8NKz|}PGacTnG z{+K2ZLhXK@c!KJbm!wqo!c^26v|X0FR?Mf=8Or(1@wIkCFS%lcgU5EDPw~T(wI62a zwOTv+r=_rhqbL_DbjC+9@5yl^%|4^c6+VdJWyJDFBhRNevAv!9QBTRwF_&{}uJ#Eb zw&bjC?$i6Lzf^nUVcET=wZ^dD*%;cTC*X66PYFD|9(9v#4$fX+_@C{35JHE>-vy7q zE=NvAx7H#!+dB#^Wgfp=B&i&m;@Wnj?8Qs2(Vo^V9$~j3tar6KQwHUdqjKv&b#K&p zeKA$%Q*4DJSAe zxPm=SqKTy-8;mYx#}dlZ$-WVGD)z#)9>K)l(*P{}$7YS)LYj(Ft-4-sygc8fjuFzL zm4XK#;ZAFzZSYOUmAtT*&FySXxL)&{)e_u8aZ_((ZC{b5S?z}%l%zzKw4zOw@|*Cl z%NAp|o|ebdy*Poa^hoJ45YT3$-HV;TaHDTgiZ7OBn6eV;Pbum3#rN!0snnfb(|MXZ zoLvqn$ig{Orsl+1wf#Y`KbAIMXSka;_732;W>DZU)O~xytX3)Q7Rl@r6=P{_6PrW_ z0OEs@@cIhpg#Vj-lb9i{xc#=TBnZfUeS-#5~b+!eMOnG*5VIuu4j|*iuyoGzE2^4ED z(+lKT920v1i+$J!LXlp~u4gK=P$5%LR93NM-q$An!xisKazyIWtfDMMEyte-Y$ZNt zp!(wOYLxh0mOC%R$W+C5Rm$^9OUnkzLqvGh?dgrTVDM(}+f`!EkA!=@r;m5eD;f5c zj$Am>Fnc5W>xFI(r2b`g0ae?!=C*&@exgYf=|t0M_m2Uvd^=OYQ2N{XVzpHrD|~`5 z@XfN^n^K*NSmRQ&-)W!mY4;EvrUEB>(~Ind3#!*xU(M zo($c?uivpt{>dNl6zVUf3DvjxldSaa0YE0gADyV5%mQs;rS^k6$5zk)nqb zPTszFT%S!2u$6?Jq;E$ze@}tsY=ia zZR|$c#?4PYu#}`pCxD>zcSTS^j%LOw&aMRw&c{}A;(Oo8;J7UY%lPZruG#l$dPkn?R;d{F28khr=3w!lw^`~HL0+MEtpG9 zh)5X$pcSO2l%y3N3H}&Kl**Q^*j$qZ!bv_6eg&{S2O#Dw**UsyU8OxS=M91wPV0S7 zKt0YG{44is4Yrb{9RLzfbvT=bZO~S=00$GLHIl;5UI-lVh5VPMIln$lOgy|Q=xF=+I#;1 zH)3Xn%l)3T*GFKrnYF7jvWG%Kn}|G4IDHV<^275$l&pgzqIRVlWl~w zE!yTYTED4!_(y4^x3j5v(Ecjvea=TF$6|Q*&tRh2hN(WQDawUXW0D?l-N&AAsY^cR z2CB)x!FN!NFExDGRV#Z((pxOeix8@a_~1hbH({x(E|Ud1)q-WwuJJdh>IFg_Q5w z59x(j5R|76AcAZNI1WuQ){WdnhTDs#*ZO+l4z!|XmWNUVO>0kVm0H)orWK0HSsRHQ zTLoa#j{CT6^f)%-0l{tHbBT>4r8(3`mX$7%XD03&+pY=(__$E{t%Y}>l`MrgKaL8y zPkar3LVZY5>QwCM+J3X8HJ0er`3ruI;mi=0Y5o4ZBkZ5*v8E3c|; z6~p~%30Enj$Ktq#;_a9JHOi)DcyK{ zXwfc?N0PZ7ee(`Xrn?!^)2P}l@TP8oic3?Y}`wE+O=9pG=O6 z4ZwJml>W-cRU`8ltS?d|Q>Ce?45%ptg`|rRabCx^TK8w}#`Gzr=7o&Xq1D&SeKV^D z1+=zXL1tFmrD@4%IVlR_2>S7$WVyWwz4!;55O5H)etGMKXDPCm9k~f;ggUh$3%3PH zw%|USlltK~$gAJB_aNHV#eLM0XzNN%4N7#S%cp`mVph-{R;X#7dV!hXtnFpcBsG2< zY?~=Ru#ok~y4kUdAtKRi|*()u@2((Oa2<%zM@p5gT+3b)Ri-6VZRH2t-( zZyv###x2LZ080Lc>Dd*P`#QgS0>o}MYV798-fW-D(zK81)2m8`Qj6Z_r=}EQxKiHm zFJe6K3-Jps6qFEfD-ADgz_*q$w$P-ggIha_N|QC~mL}i<>@a4Z!orem&H@o$a2Hb1 zQd9E~I(=|r6DkS;Nw+7FiL9jWiKxp`cVe!$*;km5-g&F!_f|u7DoXYzeYYt*elw*75~x7s<9*G$#< za$9D|lMN3WD)#2z%;R#gAB@2vBi_9_TJVQ z+CIjI<~>lYO3F%cryk2r&syTFwr-2Ic(7L>biX*UY~yx$IOzj*LU*P&c*Jq-@}M~D zm*Azlbj;40&Q)W(4E>)v#Zb%cc8>o5vznBwmq%N!w_9!*Twvk{iB}y%V3J7S8w^1` zv-J{YeAH?6d1qusPjO9;yX0jY56s%<>x&`T)9t+0Jp=4@Qta)Qo1_fAIWn1x-$LCg z3sMK;Hp=$_Wo}XN17f3VVu|ZUaHZzj>g#k#YwngVT5(sgCgfv9#W8mqvU!r0!%086 z2vH=qbW*_|7cumLb8I&PUCz{}5p$#~+}&3CKuQ!2VFVK(<(U)X0c%D39`=jvK*dUS zglSD{Gqp(xRY`P+Ds)HReW65jCu*!Zn;Q&7I)jk2HbTsD^44#pKLVi<` zL#kAh$Uj_6-IP06>wji?^sLvTx{FlHvee3(Th!TVY&e?{wMiZokEk~C#9^))v77b3 zQYzY=sI|EjO66i|%%5ClIJmP_x>k)y9Oi#C@QnzL!_Kt)J3Rm68FZPO_Zix zZ2KuD{{Z2KKWYBc8lBoVQW2fC&pOmI1mLmfJ!y7NnO(01P$*X({)fujYj_?h; ztU=p*^NRN#uCwQCk*cg}Hbc#I3T*g~ z2V&2QEloVyg{-Z~HwTOL#q!e}vB7PW-K%L1FCgGn^0#+#F#~hn$be@oj)tk2juD9C zS7ld9C6>na;ZEvG=R#!f03eM7oW@2(?Jc0X=b%~sMpM_!n^U3IxOMo|c2tK{70vuz zLG>3HjXSi-a7PD{M#JxkAGD`veO2ulpH6Sp{OM4y)LUUJH9Ds$PP&$oER@|xp!W6m z#BS7u$9sEA@q={SV>P{6Rdz`;&$o&P&Ra8S`p^ZY5CQ z#9PjS*d=#DMf@Qq{zAt1lB&I}HU9wq!JEztxFKm;f%E5%a7h-JSK?BY7#W<& z8ArMag%D-}hzBgdI#dK*;^xuC5DJDu1m~3HB1a%d>myoH$^DJwz>2!wxK-Pr!-#J5 zSCz5r4t!VP7xd)&VqkwqwX-kwc9X1~n0qwUU&*nXSzdBn4b3PZ?OTXP&f-D+vNrH~ zSmM2QuI*=^dsphUPgC=pz|@+QwLbhv?d)L+ut?g0$3Qteo8bOU?StAAO*A&4r8z5B zE08F4He70LDlGLSmr$>m6!`)=+Sk80u>Sz{9vz1^rZATJBLZBV<)7k(5F@Gp(qlZU zOTh7*K`pH)HfPelNF+o8jMGvr$4TdBsP$YI3E zl-d^CDr|zJs9hv`AMnN5>~)wkk8EDt+I5zDNam`ZbB9o^Mt~`Eom1*{mmE&^(m!D& z3#mff0#8gypKi8v>{%0AnPahDR-rb!1aVKy4pP ~8=zl!n5tLK2$`jtRNLw@PB$ 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', + 'auth.info.registered.title': '我已登记', + 'auth.phone.placeholder': '请输入验证信息', + 'auth.pay.tips': '本次观看需支付', + 'auth.pay.scan': '微信扫码支付', + 'auth.pay.hasPay': '我已支付 >', + 'auth.pay.wechatPrefix': '请使用已付款的', + 'auth.pay.wechatSuffix': '微信,扫一扫二维码进入观看', + 'auth.pay.clickPay': '点击付费购买', + 'auth.pay.audience': '已付费观众?请', + 'auth.pay.clickHere': '点击这里', + 'auth.pay.wechat': '微信支付', + 'auth.workWeixin.title': '企业微信登录', + 'auth.workWeixin.qrcodeLoading': '二维码加载中', + 'auth.error.checkProtocol': '请勾选隐私声明', + 'auth.error.unknown': '未知错误', + 'auth.error.codeEmpty': '请输入验证信息', + 'auth.error.codeError': '输入的验证码错误', + 'auth.error.smsCodeError': '短信验证码错误', + 'auth.error.phoneEmpty': '请输入验证信息', + 'auth.error.payTimeout': '支付超时,请重新扫码付费', + 'auth.error.phoneNotExistent': '输入的会员码错误', + 'auth.error.phoneNotRegister': '手机号未登记', + 'auth.error.improveInfo': '请完善信息', + 'auth.error.externalFail': '该页面使用外部授权,请使用授权入口进入观看', + 'auth.error.directFail': '授权出错,该页面使用独立授权,请使用授权入口进行观看', + 'auth.error.workWeixinExpire': '观看条件已失效,无法继续观看,请联系管理员', + 'auth.error.workWeixinNotAllow': '若为企微员工请在企业微信打开该链接观看直播', + 'auth.error.workWeixinNotStaff': '登录失败,请确认员工身份', + 'auth.enter': '进入直播', + + 'ask.placeholderMsg': '您好!请问有什么问题吗', + + 'base.frequentOperation': '您操作过于频繁,请稍后再试', + 'base.region': '地区', + 'base.ok': '我知道了', + 'base.backTop': '回到顶部', + 'base.people': '人', + 'base.error.payFail': '支付失败', + 'base.confirm': '确认', + 'base.cancel': '取消', + 'base.ignore': '忽略', + 'base.warmTips': '温情提示', + 'base.enterLive': '进入直播', + 'base.tips': '提示', + 'base.me': '我', + 'base.more': '更多', + 'base.notAuthorized': '您未被授权观看本直播', + 'base.changeLang': '语言切换', + 'base.message': '消息', + 'base.packUp': '收起', + 'base.spreadOut': '展开', + 'base.copy': '复制', + 'base.fullText': '全文', + 'base.translateFinish': '翻译完成', + 'base.camera': '摄像头', + 'base.popup.supportDragUp': '弹窗支持向上拖动', + 'base.popup.understood': '知道了', + + 'channel.descEmpty': '暂无直播介绍~', + + 'call.connect': '连线', + 'connectMic.deviceCheck': '设备检测', + 'connectMic.openVideoTips': '讲师开启了视频连线', + 'connectMic.openAudioTips': '讲师开启了语音连线', + 'connectMic.joinConnect': '点击申请连线按钮参与', + 'connectMic.applying': '申请连线中', + 'connectMic.applying2': '请求中', + 'connectMic.applyConnect': '申请连线', + 'connectMic.applyConnect.video': '视频连线', + 'connectMic.applyConnect.audio': '语音连线', + 'connectMic.cancelApply': '取消申请', + 'connectMic.endConnect': '结束连线', + 'connectMic.keepConnect': '保持连线', + 'connectMic.me': '我', + 'connectMic.teacher': '讲师', + 'connectMic.confirm1': '您当前正在进行音视频连线', + 'connectMic.confirm2': '确认结束?', + 'connectMic.teacherHangUp': '连线已结束,您可以再次申请连线', + 'connectMic.agreement': '视频连线时需拍摄、收集人像信息', + 'connectMic.error.getDeviceFail': '无法获取设备权限或无设备,请检查后重试!', + 'connectMic.error.overLimit': '上麦失败,当前上麦人数已达最大人数', + + 'chat.empty': '聊天室空空如也~', + 'chat.connectError': '聊天室连接失败,无法与其他人互动,立即刷新重试?', + 'chat.norMore': '没有更多了', + 'chat.loadError': '消息加载失败', + 'chat.closeTips': '本直播间已长时间未使用,聊天室暂时关闭,将在下次开播时恢复正常', + 'chat.transformTip': '已关联其他房间,仅可观看直播内容', + 'chat.onlyHost': '只看我和讲师', + 'chat.onlyHost2': '只看主持', + 'chat.lookAll': '查看全部', + 'chat.sendImage': '发送图片', + 'chat.setNick': '修改昵称', + 'chat.setNick.title': '设置昵称', + 'chat.setNick.placeholder': '请输入昵称', + 'chat.setNick.success': '设置成功', + 'chat.setNick.tips1': '点击', + 'chat.setNick.tips2': '设置昵称', + 'chat.setNick.tips3': '参与互动', + 'chat.setNick.error.empty': '请输入昵称', + 'chat.setNick.error.special': '昵称包含非法字符', + 'chat.send': '发送', + 'chat.input.placeholder': '我也来参与一下互动', + 'chat.input.placeholder2': '跟大家聊点什么吧~', + 'chat.input.placeholder3': '点击设置昵称参与互动', + 'chat.input.maxImageTips': '最多插入不超过${maxCount}张图片', + 'chat.closeRoom': '聊天室已关闭', + 'chat.roomClosed': '聊天室暂时关闭', + 'chat.roomReopened': '聊天室重新打开', + 'chat.reply': '回复', + 'chat.illegalImage': '图片违规', + 'chat.moreMsg': '有更多消息', + 'chat.moreMsg2': '查看新消息', + + 'copy.link': '复制链接', + 'copy.success': '复制成功', + 'copy.linkSuccess': '链接复制成功,可去浏览器粘贴下载', + + 'doc.name': '文档', + + 'donate.title': '打赏', + 'donate.cash': '现金', + 'donate.cashReward': '现金打赏', + 'donate.custom': '自定义', + 'donate.custom2': '自定义金额', + 'donate.placeholder': '请输入金额', + 'donate.random': '随机', + 'donate.goodAction': '赠送了', + 'donate.cashAction': '打赏', + 'donate.yuan': '元', + 'donate.free': '免费', + 'donate.button': '打赏', + 'donate.name.six': '666', + 'donate.name.bear': '小熊', + 'donate.name.microphone': '麦克风', + 'donate.name.villa': '别墅', + 'donate.name.coffee': '咖啡', + 'donate.name.trophy': '奖杯', + 'donate.name.star': '小星星', + 'donate.name.applause': '掌声', + 'donate.name.yacht': '游艇', + 'donate.name.rocket': '火箭', + 'donate.name.like': '点赞', + 'donate.name.fireworks': '烟火', + 'donate.name.crown': '皇冠', + 'donate.name.cars': '跑车', + 'donate.name.goldenEggs': '金蛋', + 'donate.name.diamonds': '钻石', + 'donate.name.plane': '飞机', + 'donate.name.flower': '鲜花', + 'donate.confirm': '确认打赏', + 'donate.point.getFail': '获取积分失败', + 'donate.point.myPoint': '我的积分:', + 'donate.error.notChoice': '请选择打赏的礼物', + 'donate.error.fail': '打赏失败', + 'donate.error.unknown': '打赏发生未知错误', + 'donate.error.payTimeOut': '支付超时', + 'donate.error.payFail': '支付失败', + 'donate.error.notZero': '输入金额不能是0', + 'donate.error.mini': '请输入大于等于 ${price} 的金额', + 'donate.hideAnimation': '屏蔽特效', + 'donate.hideAnimation.tips': '已屏蔽其他用户的礼物特效', + 'donate.showAnimation': '展示特效', + 'donate.showAnimation.tips': '已恢复其他用户的礼物特效', + 'donate.spot': '点', + + 'enroll.text': '报名观看', + 'enroll.enrolledTips': '您已报名,新填写的信息会覆盖原有信息', + 'enroll.entrance': '我已报名 直接进入>', + 'enroll.auditing': '报名审核中', + 'enroll.loginTitle': '我已报名', + 'enroll.error.emailUnenroll': '该邮箱尚未报名,请先填写报名信息后再观看直播', + 'enroll.error.phoneUnenroll': '该手机号尚未报名,请先填写报名信息后再观看直播', + 'enroll.error.smsCodeError': '短信验证码错误', + + 'form.name.phoneNumber': '手机号码', + 'form.name.verifyCode': '验证码', + 'form.placeholder.phoneInput': '请输入手机号码', + 'form.placeholder.smsVerify': '短信验证码', + 'form.placeholder.imageVerify': '请输入验证码', + 'form.placeholder.enterCountry': '请输入国家名查询', + 'form.error.phoneNumberRequired': '请输入手机号码', + 'form.error.phoneNumberError': '请输入正确的手机号码', + 'form.error.smsVerifyRequired': '请输入短信验证码', + 'form.error.imageCaptchaError': '图片验证码错误', + 'form.error.emailRequired': '请输入邮箱地址', + 'form.error.emailError': '请输入正确的邮箱地址', + 'form.error.onlyCnAnEn': '只能包含中文或英文', + 'form.error.areaError': '请选择正确的地区', + 'form.getSmsVerify': '获取验证码', + 'form.resend': '重新发送', + 'form.radio': '单选', + 'form.checkbox': '多选', + 'form.select.multiPrefix': '已选', + 'form.select.multiSuffix': '项', + 'form.uploadImage.prefixTips': '当前可上传', + 'form.uploadImage.suffixTips': '张', + + 'global.singleSession.error.unknow': '未知原因异常,您将被退出观看', + 'global.singleSession.error.relogin': '帐号在另外的地方登录,您将被退出观看', + + 'interact.announcement.title': '公告', + 'interact.announcement.titleList': '公告列表', + 'interact.announcement.titleDetail': '公告', + 'interact.answerCard.singleChoice': '【单选】', + 'interact.answerCard.multiChoice': '【多选】', + 'interact.answerCard.title': '答题卡', + 'interact.answerCard.checkResultTitle': '查看结果', + 'interact.answerCard.checkAnswerTitle': '查看答案', + 'interact.answerCard.notSubmitted': '未作答', + 'interact.checkIn.title': '签到', + 'interact.feedBack.title': '投诉反馈', + 'interact.lottery.result': '中奖结果', + 'interact.lottery.record': '中奖记录', + 'interact.lottery.checkList': '中奖名单', + 'interact.lottery.submitInfo': '填写中奖信息', + 'interact.product.jobDetail': '职位详情', + 'interact.questionnaire.title': '问卷', + 'interact.questionnaire.result': '问卷结果', + 'interact.questionnaire.result.list': '问卷列表', + 'interact.vote.title': '投票', + 'interact.task.title': '任务', + 'interact.task.me': '我的任务', + 'interact.tuwen.tuwenMode': '图文模式', + 'interact.tuwen.picMode': '图片模式', + 'interact.tuwen.total': '共', + 'interact.tuwen.totalCount': '条图文直播', + 'interact.scoreRecord.title': '积分记录', + 'interact.enrollLottery.title': '报名抽奖', + + 'liveBooking.book': '预约', + 'liveBooking.bookLive': '预约直播', + 'liveBooking.booked': '已预约', + 'liveBooking.writeForm': '填写预约信息', + 'liveBooking.confirm': '确认预约', + 'liveBooking.bookingSuccess': '预约成功,请等待通知', + 'liveBooking.cancelSuccess': '取消预约成功', + 'liveBooking.smsWrong': '验证码错误,请重新输入', + 'liveBooking.fail': '预约失败', + 'liveBooking.subscribe1': '长按二维码关注', + 'liveBooking.subscribe2': '可以在直播开始', + 'liveBooking.subscribe3': '前15分钟', + 'liveBooking.subscribe4': '收到开播提醒', + 'liveBooking.welcome': '欢迎观看本次直播', + + 'liveCountDown.text': '直播倒计时', + + 'liveStatus.live': '直播中', + 'liveStatus.waiting': '等待中', + 'liveStatus.end': '暂无直播', + 'liveStatus.stop': '直播暂停', + 'liveStatus.playback': '回放中', + 'liveStatus.unStart': '未开始', + + 'live.audioLive': '音频模式', + 'live.goLive': '直播开始 立即前往', + + 'layout.fullscreen': '全屏', + 'layout.fullscreenCancel': '取消全屏', + + 'pageError.feedBack': '可以先检查您的频道号,再反馈给管理员,稍后就可以处理好。', + 'pageError.channelNotExist': '频道号不存在', + 'pageError.channelClosed': '频道号已被关闭', + 'pageError.mobileChannelClosed': '本直播仅支持PC端观看,请使用PC浏览以下地址', + + 'player.play.button.text': '立即播放', + 'player.play': '播放', + 'player.pause': '暂停', + 'player.refresh': '刷新', + 'player.switchScreen': '切换', + 'player.manualPlayTips1': '点击', + 'player.manualPlayTips2': '播放按钮', + 'player.manualPlayTips3': ',进入直播', + 'player.rtc.paused': '已暂停直播和连麦画面', + 'player.volumeTips1': '是否允许浏览器播放声音?', + 'player.volumeTips2': '播放声音', + 'player.barrage': '弹幕', + 'player.barrage.show': '弹幕开', + 'player.barrage.close': '弹幕关', + 'player.openBarrage': '开启弹幕', + 'player.closeBarrage': '关闭弹幕', + 'player.lineSwitch': '线路选择', + 'player.lineSetting': '切换线路', + 'player.line': '线路', + 'player.quality': '清晰度', + 'player.qualitySetting': '切换清晰度', + 'player.quality.auto': '自动', + 'player.quality.sd': '流畅', + 'player.quality.hd': '高清', + 'player.quality.fhd': '超清', + 'player.rate': '倍速', + 'player.historyTips': '已为您定位到上次观看进度', + 'player.restart': '从头播放', + 'player.latencyMode.name': '模式', + 'player.latencyMode.low': '无延迟', + 'player.latencyMode.normal': '正常延迟', + 'player.latency.error': '播放无延迟异常,已帮您切换到正常延迟模式', + 'player.mode.audio': '音频模式', + 'player.mode.video': '视频模式', + 'player.audio.ing': '音频播放中', + + 'playback.list': '回放列表', + 'playback.playing': '播放中', + 'playback.startTime': '开始时间:', + 'playback.chapter': '章节', + 'playback.no.more': '没有更多了', + + 'trial.play.finish.tip': '试看已结束', + 'trial.player.start.tip': '本次直播为付费直播,您可试看 ${time} 分钟', + 'trial.player.end.tip': '试看已结束。如果您觉得本直播不错,请点击付费观看', + + 'redpack.receive.name': '红包', + 'redpack.finish': ',红包已被领完', + 'redpack.normal.get': '从普通红包中获得', + 'redpack.password.get': '从口令红包中获得', + 'redpack.rain.get': '从红包雨中获得', + 'redpack.rain.finish': ',红包雨已被领完', + 'redpack.type.normal': '普通红包', + 'redpack.type.password': '口令红包', + 'redpack.type.rain': '红包雨', + 'redpack.type.alipayPassword': '支付宝口令红包', + 'redpack.sendMsg': '发送了一个', + 'redpack.receive': '点击领取', + + 'redpack.name': '红包', + 'redpack.send.title': '发红包', + 'redpack.send.sum': '总金额', + 'redpack.send.sum.placeholder': '请填写总金额', + 'redpack.send.sum.unit': '元', + 'redpack.send.num': '个数', + 'redpack.send.num.placeholder': '请填写个数', + 'redpack.send.num.unit': '个', + 'redpack.blessing.placeholder': '恭喜发财,大吉大利', + 'redpack.desc': '红包为随机红包,总金额需大于 1 元,另需收取 2% 手续费', + 'redpack.send.btn.text': '塞钱进红包', + 'redpack.single.amount.limit': '单个红包不可超过 ${amount} 元', + 'redpack.single.num.limit': '红包数量不可超过 ${count}', + 'redpack.equal.amount.limit': '最低平分金额大于等于 ${average} 元', + 'redpack.bad.words': '涉及敏感词', + 'redpack.send.amount.low': '金额不能小于1元', + 'redpack.greeting.long': '祝福语过长', + 'redpack.unsupported': '不支持该红包类型', + + 'risk.confirm.letter.agree': '同意并观看直播', + 'risk.confirm.letter.disagree': '不同意', + 'risk.confirm.letter.viewAgreement': '查看协议', + + 'seminar.host': '主持人', + + 'share.title': '分享', + 'share.wxScan': '微信扫一扫', + 'share.QQ': 'QQ', + 'share.QZone': 'QQ空间', + 'share.weibo': '新浪微博', + + 'unit.day': '天', + 'unit.hour': '时', + 'unit.minute': '分', + 'unit.second': '秒', + + 'watch.liveTime': '直播时间', + 'watch.pvSuffix': '次观看', + + 'welcome.text': '欢迎', + 'welcome.wait': '等', + 'welcome.peopleJoin': '人加入', + 'welcome.join': '加入', + + 'weixin.scanToPay': '请使用微信扫码支付', + 'weixin.pay.success': '支付成功', + 'weixin.error.payTimeout': '支付超时', + 'weixin.error.toWechatPay': '请在微信中打开本页进行支付', + 'weixin.error.openInClient': '请在微信端打开', + + 'withdraw.name': '提现', + 'withdraw.apply.popup.title': '提现', + 'withdraw.apply.amount': '提现金额', + 'withdraw.apply.amount.all': '全部', + 'withdraw.apply.amount.most': '最多可提现 ${amount} 元', + 'withdraw.apply.amount.most.merchant': '单次最多提现 ${amount} 元', + 'withdraw.apply.username': '提现用户名', + 'withdraw.apply.tips': + '* 红包余额需满 ¥${amount} 才可提现,仅支持微信实名认证用户提现,申请提现后在 ${day} 个工作日内,提现至你的微信钱包。', + 'withdraw.apply.btn.text': '提现', + 'withdraw.apply.success.msg': '提现申请成功', + 'withdraw.apply.rules.amount.required': '请填写提现金额', + 'withdraw.apply.rules.amount.low': '金额不能小于1元', + + 'withdraw.error.noUser': '找不到该微信用户', + 'withdraw.error.getCashExceed': '提取金额超过用户余额', + 'withdraw.error.getCashMoreThan1': '提取金额必须大于1元', + 'withdraw.error.getCashFailed': '申请记录失败', + + 'withdraw.detail.popup.title': '我的红包余额', + 'withdraw.detail.btn.text': '提现', + 'withdraw.redpack.receive.record': '历史领取', + 'withdraw.redpack.receive.record.listName': '红包领取', + 'withdraw.cash.receive.record': '历史提现', + 'withdraw.cash.receive.record.listName': '提现成功', + + 'menu.tabName.desc': '直播介绍', + 'menu.tabName.chat': '聊天', + 'menu.tabName.text': '图文', + 'menu.tabName.seat': '云席', + 'menu.tabName.quiz': '提问', + 'menu.tabName.iframe': '链接', + 'menu.tabName.previous': '往期', + 'menu.tabName.tuwen': '图文直播', + 'menu.tabName.qa': '问答', + 'menu.tabName.buy': '边看边买', + 'menu.tabName.invite': '邀请榜', + 'menu.tabName.members': '成员', + 'menu.tabName.vote': '投票', + 'menu.tabName.microActivity': '微活动', + 'menu.tabName.chapter': '章节', + + 'multiMeeting.other': '其它会场', + + 'member.self': '我', + 'member.failTips': '网络异常,成员加载失败,请', + 'member.failTips.retry': '点击重试', + + 'microActivity.wechatScan': '微信扫码参与该互动', + + 'invite.rank': '排行', + 'invite.rank.people.number': '邀请人数', + 'invite.rank.people': '人', + 'invite.rank.me': '我', + 'invite.rank.no.more': '没有更多了~', + 'invite.rank.loaded.failed': '榜单正在更新中,请稍等~', + 'invite.rank.invited': '你已邀请${number}人', + 'invite.rank.invite.btn': '去邀请', + 'invite.rank.click.btn.desc': '点击右侧按钮,邀请微信好友观看', + 'invite.rank.desc1': '继续保持!', + 'invite.rank.desc2': '继续保持,还差${number}人被第二名超越', + 'invite.rank.desc3': '距离第一名只差${number}人', + + 'invite.poster.num.text': '邀请人数', + 'invite.poster.not.on.the.list': '未上榜', + 'invite.poster.go.invite': '冲榜', + 'invite.poster.no.data': '暂无邀请,赶快抓住机会上榜吧!', +}; diff --git a/src/assets/lang/i18ns/english.ts b/src/assets/lang/i18ns/english.ts new file mode 100644 index 0000000..ab9204d --- /dev/null +++ b/src/assets/lang/i18ns/english.ts @@ -0,0 +1,474 @@ +import { LangConfig } from '../types'; + +/** + * 英文语言配置 + */ +export const englishLang: LangConfig = { + 'watchCore.error.uploadImage': 'Upload Image Fail!', + + 'auth.button.none': 'Enter', + 'auth.button.phone': 'Member entrance', + 'auth.button.pay': 'Pay to watch', + 'auth.button.info': 'Register to watch', + 'auth.button.code': 'Fill in the captcha', + 'auth.button.login': 'Login in to watch', + 'auth.button.workWx': 'Wecom entrance', + 'auth.button.playback': 'Enter', + 'auth.code.placeholder': 'Please enter verification information', + 'auth.info.registered.entrance': 'I have registered, go directly to', + 'auth.info.registered.title': 'I have registered', + 'auth.phone.placeholder': 'Please enter verification information', + 'auth.pay.tips': 'Need to pay for watching', + 'auth.pay.scan': 'Scan with WeChat and pay', + 'auth.pay.hasPay': 'Paid >', + 'auth.pay.wechatPrefix': 'Please use the paid', + 'auth.pay.wechatSuffix': 'WeChat and scan the QR code to watch', + 'auth.pay.clickPay': 'Click to buy', + 'auth.pay.audience': 'Paid viewers ? please', + 'auth.pay.clickHere': 'click here', + 'auth.pay.wechat': 'Wechat Pay', + 'auth.workWeixin.title': 'Work wechat login', + 'auth.workWeixin.qrcodeLoading': 'Qrcode loading', + 'auth.error.checkProtocol': 'Please tick the privacy statement', + 'auth.error.unknown': 'unknown', + 'auth.error.codeEmpty': 'Please enter verification information', + 'auth.error.codeError': 'The verification code entered is incorrect', + 'auth.error.smsCodeError': 'SMS verification code error', + 'auth.error.phoneEmpty': 'Please enter verification information', + 'auth.error.payTimeout': 'Payment Timeout!', + 'auth.error.phoneNotExistent': 'Wrong member code entered', + 'auth.error.phoneNotRegister': 'Phone number not registered', + 'auth.error.improveInfo': 'Please complete the information', + 'auth.error.externalFail': + 'This page uses external authorization. Please use the authorized entry to view!', + 'auth.error.directFail': + 'Error, this page uses independent authorization, please use the authorization portal to watch', + 'auth.error.workWeixinExpire': + 'The view channel condition have expired, and you cannot continue to watch, please contact the administrator', + 'auth.error.workWeixinNotAllow': 'Please open this link within Wecom to watch the live stream.', + 'auth.error.workWeixinNotStaff': 'Login failed, please confirm staff identity.', + 'auth.enter': 'Enter', + + 'ask.placeholderMsg': 'Hi, what can I do for you', + + 'base.frequentOperation': 'Your operation is too frequent, please try again later', + 'base.region': 'Region', + 'base.ok': 'OK', + 'base.backTop': 'Top', + 'base.people': 'people', + 'base.error.payFail': 'The payment is failed', + 'base.confirm': 'Confirm', + 'base.cancel': 'Cancel', + 'base.ignore': 'Ignore', + 'base.warmTips': 'Warm Tips', + 'base.enterLive': 'Enter', + 'base.tips': 'Tips', + 'base.me': 'me', + 'base.more': 'More', + 'base.notAuthorized': 'You are not allowed to access this page', + 'base.changeLang': 'Language switch', + 'base.message': 'Message', + 'base.packUp': 'Pack up', + 'base.spreadOut': 'Open', + 'base.copy': 'Copy', + 'base.fullText': 'Full text', + 'base.translateFinish': 'Completed', + 'base.camera': 'Camera', + 'base.popup.supportDragUp': 'Support drag up', + 'base.popup.understood': 'I see', + + 'channel.descEmpty': 'No live broadcast introduction~', + + 'call.connect': 'Video call', + 'connectMic.deviceCheck': 'Equipment inspection', + 'connectMic.openVideoTips': 'Lecturer started a video call', + 'connectMic.openAudioTips': 'Lecturer started a voice call', + 'connectMic.joinConnect': 'Click the button to join the call', + 'connectMic.applying': 'Requesting a call', + 'connectMic.applying2': 'applying', + 'connectMic.applyConnect': 'Apply for a call', + 'connectMic.applyConnect.video': 'Apply video call', + 'connectMic.applyConnect.audio': 'Apply audio call', + 'connectMic.cancelApply': 'Cancel Apply', + 'connectMic.endConnect': 'End call', + 'connectMic.keepConnect': 'Keep calling', + 'connectMic.me': 'Me', + 'connectMic.teacher': 'Teacher', + 'connectMic.confirm1': 'Are you sure to end the current call', + 'connectMic.confirm2': 'Sure end call?', + 'connectMic.teacherHangUp': 'The call has ended. You can request again', + 'connectMic.agreement': + 'It is necessary to shoot and collect portrait information during video connection', + 'connectMic.error.getDeviceFail': + 'Unable to get device access or no device, please check and try again!', + 'connectMic.error.overLimit': + 'Failed to register. The number of people currently registered has reached the maximum', + + 'chat.empty': 'Nothing in chat room ~', + 'chat.connectError': 'Chatroom disconnect, you cannot chat with others, refresh now?', + 'chat.norMore': 'No more updates', + 'chat.loadError': 'Message failed to load', + 'chat.closeTips': + 'As the channel has not been used for a long time, the chat room is temporarily closed till the next broadcast.', + 'chat.transformTip': 'Chatroom occupied, video only.', + 'chat.onlyHost': 'Presenter', + 'chat.onlyHost2': 'Presenter', + 'chat.lookAll': 'Look all', + 'chat.sendImage': 'Send picture', + 'chat.setNick': 'Rename', + 'chat.setNick.title': 'Rename', + 'chat.setNick.placeholder': 'Please set your nickname', + 'chat.setNick.success': 'Successfully set', + 'chat.setNick.tips1': 'Click to', + 'chat.setNick.tips2': 'set nickname', + 'chat.setNick.tips3': 'and join live chat', + 'chat.setNick.error.empty': 'Please set your nickname', + 'chat.setNick.error.special': 'Nicknames contain special characters', + 'chat.send': 'Send', + 'chat.input.placeholder': 'Join the chat', + 'chat.input.placeholder2': 'Join the chat', + 'chat.input.placeholder3': 'Click to set nickname to participate in interaction', + 'chat.input.maxImageTips': 'Insert no more than ${maxCount} pictures at most', + 'chat.closeRoom': 'Chat room is closed', + 'chat.roomClosed': 'Chat room temporarily closed', + 'chat.roomReopened': 'Chat room reopened', + 'chat.reply': 'reply', + 'chat.illegalImage': 'Image illegal', + 'chat.moreMsg': 'Click to see more', + 'chat.moreMsg2': 'See new message', + + 'copy.link': 'Copy Link', + 'copy.success': 'Copy success', + 'copy.linkSuccess': 'The link is copied successfully. You can download it in the browser', + + 'doc.name': 'Document', + + 'donate.title': 'Gift', + 'donate.cash': 'Cash', + 'donate.cashReward': 'Reward', + 'donate.custom': 'Or', + 'donate.custom2': 'Arbitrary amount', + 'donate.placeholder': 'Please enter the amount', + 'donate.yuan': '¥', + 'donate.random': 'Random', + 'donate.goodAction': 'send', + 'donate.cashAction': 'gift', + 'donate.free': 'Free', + 'donate.button': 'Confirm', + 'donate.name.six': '666', + 'donate.name.bear': 'Bear', + 'donate.name.microphone': 'Microphone', + 'donate.name.villa': 'Villa', + 'donate.name.coffee': 'Coffee', + 'donate.name.trophy': 'Trophy', + 'donate.name.star': 'Star', + 'donate.name.applause': 'Applause', + 'donate.name.yacht': 'Yacht', + 'donate.name.rocket': 'Rocket', + 'donate.name.like': 'Like', + 'donate.name.fireworks': 'Fireworks', + 'donate.name.crown': 'Crown', + 'donate.name.cars': 'Cars', + 'donate.name.goldenEggs': 'Golden Eggs', + 'donate.name.diamonds': 'Diamonds', + 'donate.name.plane': 'Plane', + 'donate.name.flower': 'Flower', + 'donate.confirm': 'Confirm donate', + 'donate.point.getFail': 'Failed to obtain integral', + 'donate.point.myPoint': 'My integral: ', + 'donate.error.notChoice': 'Please select a gift for reward', + 'donate.error.fail': 'donate failed', + 'donate.error.unknown': 'donate happen unknow error', + 'donate.error.payTimeOut': 'Payment Timeout', + 'donate.error.payFail': 'The payment is failed', + 'donate.error.notZero': 'The input amount cannot be 0', + 'donate.error.mini': 'Please enter an amount greater than or equal to ${price}', + 'donate.hideAnimation': 'Hide animation', + 'donate.hideAnimation.tips': 'Other users gift effects have been blocked', + 'donate.showAnimation': 'Show animation', + 'donate.showAnimation.tips': 'Other users gift effects have been restored', + 'donate.spot': 'Spot', + + 'enroll.text': 'Sign up', + 'enroll.enrolledTips': + 'You have already signed up, the content currently filled in will overwirte the previous', + 'enroll.entrance': 'I have signed up, go directly to', + 'enroll.auditing': 'Under review', + 'enroll.loginTitle': 'Login', + 'enroll.error.emailUnenroll': + 'The phone number has not been registered yet, please register first to watch the live', + 'enroll.error.phoneUnenroll': + 'The email has not been registered yet, please register first to watch the live', + 'enroll.error.smsCodeError': 'Incorrect SMS verification code', + + 'form.name.phoneNumber': 'Phone number', + 'form.name.verifyCode': 'Verification code', + 'form.placeholder.phoneInput': 'Please enter the phone number', + 'form.placeholder.smsVerify': 'SMS verification code', + 'form.placeholder.imageVerify': 'Please enter the verification code', + 'form.placeholder.enterCountry': 'Please enter the country name', + 'form.error.phoneNumberRequired': 'Please enter the phone number', + 'form.error.phoneNumberError': 'Please enter the correct mobile phone number', + 'form.error.smsVerifyRequired': 'Please enter SMS verification code', + 'form.error.imageCaptchaError': 'Image verification code error', + 'form.error.emailRequired': 'Please enter the email address', + 'form.error.emailError': 'Please enter the correct email address', + 'form.error.areaError': 'Please select the correct region', + 'form.error.onlyCnAnEn': 'Only supports Chinese or English', + 'form.getSmsVerify': 'Get verification code', + 'form.resend': 'Resend', + 'form.radio': 'single choice', + 'form.checkbox': 'multiple choice', + 'form.select.multiPrefix': '', + 'form.select.multiSuffix': ' items selected', + 'form.uploadImage.prefixTips': 'Currently uploading ', + 'form.uploadImage.suffixTips': ' sheets', + + 'global.singleSession.error.unknow': 'Account has logged in other place', + 'global.singleSession.error.relogin': 'Account has logged in other place', + + 'interact.announcement.title': 'Announcement', + 'interact.announcement.titleList': 'Announcement List', + 'interact.announcement.titleDetail': 'Announcement', + 'interact.answerCard.singleChoice': '【Single Choice】', + 'interact.answerCard.multiChoice': '【Multiple Choice】', + 'interact.answerCard.title': 'Answer Sheet', + 'interact.answerCard.checkResultTitle': 'Result', + 'interact.answerCard.checkAnswerTitle': 'Answers', + 'interact.answerCard.notSubmitted': 'Not Submitted', + 'interact.checkIn.title': 'CheckIn', + 'interact.feedBack.title': 'feed Back', + 'interact.lottery.result': 'results', + 'interact.lottery.record': 'Records', + 'interact.lottery.checkList': 'Check out the list', + 'interact.lottery.submitInfo': 'Fill in the information', + 'interact.product.jobDetail': 'Job Details', + 'interact.questionnaire.title': 'Questionnaire', + 'interact.questionnaire.result': 'Questionnaire Result', + 'interact.questionnaire.result.list': 'List', + 'interact.vote.title': 'Vote', + 'interact.task.title': 'Task', + 'interact.task.me': 'My task', + 'interact.tuwen.tuwenMode': 'Pictures&Text', + 'interact.tuwen.picMode': 'Only Pictures', + 'interact.tuwen.total': '', + 'interact.tuwen.totalCount': ' Records', + 'interact.scoreRecord.title': 'Score record', + 'interact.enrollLottery.title': 'Enroll lottery', + + 'liveBooking.book': 'Book', + 'liveBooking.bookLive': 'Book', + 'liveBooking.booked': 'Booked', + 'liveBooking.writeForm': 'Fill in the appointment information', + 'liveBooking.confirm': 'Confirm appointment', + 'liveBooking.bookingSuccess': 'The appointment is successful, please wait for notification', + 'liveBooking.cancelSuccess': 'Cancel the appointment successfully', + 'liveBooking.smsWrong': 'The verification code is wrong, please re-enter', + 'liveBooking.fail': 'Booking fail', + 'liveBooking.subscribe1': 'Long press the QR code to follow', + 'liveBooking.subscribe2': "and you 'll receive a reminder", + 'liveBooking.subscribe3': ' 15 minutes ', + 'liveBooking.subscribe4': 'before this webcast.', + 'liveBooking.welcome': 'Welcome to the live', + + 'liveCountDown.text': 'Countdown', + + 'liveStatus.live': 'Live', + 'liveStatus.waiting': 'Waiting', + 'liveStatus.end': 'Not Live', + 'liveStatus.stop': 'Pause', + 'liveStatus.playback': 'Replaying', + 'liveStatus.unStart': 'Not Started', + + 'live.audioLive': 'Audio Live', + 'live.goLive': 'Live broadcast has started', + + 'layout.fullscreen': 'Full screen', + 'layout.fullscreenCancel': 'Full screen off', + + 'pageError.feedBack': + 'You can check your channel number first, then feed it back to the administrator, and you can deal with it later.', + 'pageError.channelNotExist': 'Channel number does not exist', + 'pageError.channelClosed': 'Channel is closed', + 'pageError.mobileChannelClosed': + 'This live broadcast only supports PC viewing, please use PC to browse the following address', + + 'player.play.button.text': 'Click to enter', + 'player.play': 'Play', + 'player.pause': 'Pause', + 'player.refresh': 'Refresh', + 'player.switchScreen': 'Switch', + 'player.manualPlayTips1': 'Click the', + 'player.manualPlayTips2': 'play button', + 'player.manualPlayTips3': 'to enter the live broadcast', + 'player.rtc.paused': 'Live video and calling stopped', + 'player.volumeTips1': 'Do you allow the browser to play sound?', + 'player.volumeTips2': 'Yes', + 'player.barrage': 'Barrage', + 'player.barrage.show': 'Danmaku on', + 'player.barrage.close': 'Danmaku off', + 'player.openBarrage': 'Barrage on', + 'player.closeBarrage': 'Barrage off', + 'player.lineSwitch': 'Line', + 'player.lineSetting': 'Switch Line', + 'player.line': 'line', + 'player.quality': 'quality', + 'player.qualitySetting': 'Switch Quality', + 'player.quality.auto': 'Auto', + 'player.quality.sd': 'SD', + 'player.quality.hd': 'HD', + 'player.quality.fhd': 'FHD', + 'player.rate': 'Rate', + 'player.historyTips': 'Locating the Playback progress ', + 'player.restart': 'Restart', + 'player.latencyMode.name': 'Mode', + 'player.latencyMode.low': 'Undelayed', + 'player.latencyMode.normal': 'Normal', + 'player.latency.error': 'Undelayed playmode error, you are now in normal playmode', + 'player.mode.audio': 'Audio', + 'player.mode.video': 'Video', + 'player.audio.ing': 'Audio playing', + + 'playback.list': 'Playback', + 'playback.playing': 'Playing', + 'playback.startTime': 'start time:', + 'playback.chapter': 'Chapter', + 'playback.no.more': 'No more updates', + + 'trial.play.finish.tip': 'Free preview expired', + 'trial.player.start.tip': 'This live is a paid live.You can tyr it for ${time} minute.', + 'trial.player.end.tip': + 'The trial is over. If you think this live broadcast is good, please click pay to watch', + + 'redpack.receive.name': '', + 'redpack.finish': '. The red envelope has been taken out', + 'redpack.normal.get': 'got the red envelope from the normal red envelope', + 'redpack.password.get': 'got the red envelope from the password red envelope', + 'redpack.rain.get': 'got the red envelope from the red envelope rain', + 'redpack.rain.finish': ' The red envelope rain has been taken out', + 'redpack.type.normal': 'normal redpack', + 'redpack.type.password': 'password redpack', + 'redpack.type.rain': 'redpack rain', + 'redpack.type.alipayPassword': 'Alipay password red envelope', + 'redpack.sendMsg': 'send ', + 'redpack.receive': 'receive', + + 'redpack.name': 'Redpack', + 'redpack.send.title': 'Red Packet', + 'redpack.send.sum': 'Sum', + 'redpack.send.sum.placeholder': 'Fill in the total amount', + 'redpack.send.sum.unit': 'yuan', + 'redpack.send.num': 'Number', + 'redpack.send.num.placeholder': 'Fill in the number', + 'redpack.send.num.unit': 'packet', + 'redpack.blessing.placeholder': 'Congratulations on making a fortune', + 'redpack.desc': '* The red packet is a random red packet with a total amount of more than 1 yuan', + 'redpack.send.btn.text': 'Sure', + 'redpack.single.amount.limit': 'The amount should not exceed {amount} yuan', + 'redpack.single.num.limit': 'The number of red packets should not exceed ${count}', + 'redpack.equal.amount.limit': + 'The minimum split amount is greater than or equal to ${average} yuan', + 'redpack.bad.words': 'There are sensitive words ', + 'redpack.send.amount.low': 'The amount should not be less than 1 yuan', // 发红包限制 + 'redpack.greeting.long': 'Blessing words too long', + 'redpack.unsupported': 'The red packets type is not supported', + + 'risk.confirm.letter.agree': 'Agree and watch the live broadcast', + 'risk.confirm.letter.disagree': 'Disagree', + 'risk.confirm.letter.viewAgreement': 'View Agreement', + + 'seminar.host': 'Host', + + 'share.title': 'Share', + 'share.wxScan': 'Scan code and share to WeChat', + 'share.QQ': 'QQ', + 'share.QZone': 'QZone', + 'share.weibo': 'Weibo', + + 'unit.day': 'D', + 'unit.hour': 'H', + 'unit.minute': 'M', + 'unit.second': 'S', + + 'watch.liveTime': 'Live start time', + 'watch.pvSuffix': 'views', + + 'welcome.text': 'welcome', + 'welcome.wait': 'and', + 'welcome.peopleJoin': 'people entered', + 'welcome.join': 'join', + + 'weixin.scanToPay': 'Scan with Wechat and Pay', + 'weixin.pay.success': 'Payment success', + 'weixin.error.payTimeout': 'Payment timeout', + 'weixin.error.toWechatPay': 'Please pay on WeChat', + 'weixin.error.openInClient': 'Please open it at WeChat', + + 'withdraw.name': 'Withdraw', + 'withdraw.apply.popup.title': 'confirm', + 'withdraw.apply.amount': 'amount', + 'withdraw.apply.amount.all': 'All', + 'withdraw.apply.amount.most': 'Can withdraw up to ¥${amount}', + 'withdraw.apply.amount.most.merchant': 'The maximum single withdrawal amount is ¥${amount}', + 'withdraw.apply.username': 'username', + 'withdraw.apply.tips': + '* Balance should be more than ¥${amount} Yuan for withdrawing. Withdrawal will be in your Wechat wallet within ${day} working days', + 'withdraw.apply.btn.text': 'Withdrawal', + 'withdraw.apply.success.msg': 'Successful application for withdrawals', + 'withdraw.apply.rules.amount.required': 'Fill in the total amount', + 'withdraw.apply.rules.amount.low': 'The amount should not be less than 1 yuan', + + 'withdraw.error.noUser': 'The WeChat user is not found', + 'withdraw.error.getCashExceed': 'The amount exceeds the user balance', + 'withdraw.error.getCashMoreThan1': 'The amount must be more than ¥ 1', + 'withdraw.error.getCashFailed': 'Failure of application record', + + 'withdraw.detail.popup.title': 'Balance', + 'withdraw.detail.btn.text': 'Withdrawal', + 'withdraw.redpack.receive.record': 'Receive history', + 'withdraw.redpack.receive.record.listName': 'Received', + 'withdraw.cash.receive.record': 'Cash withdrawal', + 'withdraw.cash.receive.record.listName': 'Withdrawal', + + 'menu.tabName.desc': 'Intro', + 'menu.tabName.chat': 'Chat', + 'menu.tabName.text': 'Image & Text', + 'menu.tabName.seat': 'Seat', + 'menu.tabName.quiz': 'Ask', + 'menu.tabName.iframe': 'Link', + 'menu.tabName.previous': 'Previous', + 'menu.tabName.tuwen': 'Tuwen Live', + 'menu.tabName.qa': 'Q & A', + 'menu.tabName.buy': 'Buy', + 'menu.tabName.invite': 'Ranking List', + 'menu.tabName.members': 'Members', + 'menu.tabName.vote': 'Vote', + 'menu.tabName.microActivity': 'MicroActivity', + 'menu.tabName.chapter': 'Chapter', + + 'multiMeeting.other': 'Breakout rooms', + + 'member.self': 'me', + 'member.failTips': 'Network error, members load failed,', + 'member.failTips.retry': 'click here to retry', + + 'microActivity.wechatScan': 'Scan the code to participate', + + 'invite.rank': 'Ranking', + 'invite.rank.people.number': 'Number of people', + 'invite.rank.people': ' people', + 'invite.rank.me': 'me', + 'invite.rank.no.more': 'No more', + 'invite.rank.loaded.failed': 'The list is being updated, please wait a moment~', + 'invite.rank.invited': 'You have invited ${number} people', + 'invite.rank.invite.btn': 'Invite', + 'invite.rank.click.btn.desc': 'Click the button on the right to invite your WeChat friends', + 'invite.rank.desc1': 'Keep going!', + 'invite.rank.desc2': 'Keep going, or be overtaken by second place', + 'invite.rank.desc3': 'only ${number} people short of becoming first', + + 'invite.poster.num.text': 'invitees', + 'invite.poster.not.on.the.list': 'Not listed', + 'invite.poster.go.invite': 'Invite', + 'invite.poster.no.data': 'No invitation at the moment. Jump at the chance to on the list.', +}; diff --git a/src/assets/lang/i18ns/farsi.ts b/src/assets/lang/i18ns/farsi.ts new file mode 100644 index 0000000..3c79dd5 --- /dev/null +++ b/src/assets/lang/i18ns/farsi.ts @@ -0,0 +1,9 @@ +import { LangConfig } from '../types'; +import { englishLang } from './english'; + +/** + * 波斯语配置 + */ +export const farsiLang: LangConfig = { + ...englishLang, +}; diff --git a/src/assets/lang/i18ns/index.ts b/src/assets/lang/i18ns/index.ts new file mode 100644 index 0000000..d749303 --- /dev/null +++ b/src/assets/lang/i18ns/index.ts @@ -0,0 +1,21 @@ +import { LangType } from '../lang-enum'; +import { LangI18nData } from '../types'; +import { arabicLang } from './arabic'; +import { chinaLang } from './china'; +import { englishLang } from './english'; +import { farsiLang } from './farsi'; +import { portugueseLang } from './portuguese'; +import { russianLang } from './russian'; +import { spanishLang } from './spanish'; + +export const i18nData: LangI18nData = { + [LangType.Chinese]: chinaLang, + [LangType.English]: englishLang, + [LangType.Arabic]: arabicLang, + [LangType.Farsi]: farsiLang, + [LangType.Portuguese]: portugueseLang, + [LangType.Russian]: russianLang, + [LangType.Spanish]: spanishLang, +}; + +export default i18nData; diff --git a/src/assets/lang/i18ns/portuguese.ts b/src/assets/lang/i18ns/portuguese.ts new file mode 100644 index 0000000..ad4c00a --- /dev/null +++ b/src/assets/lang/i18ns/portuguese.ts @@ -0,0 +1,9 @@ +import { LangConfig } from '../types'; +import { englishLang } from './english'; + +/** + * 葡萄牙语配置 + */ +export const portugueseLang: LangConfig = { + ...englishLang, +}; diff --git a/src/assets/lang/i18ns/russian.ts b/src/assets/lang/i18ns/russian.ts new file mode 100644 index 0000000..4ae7c3e --- /dev/null +++ b/src/assets/lang/i18ns/russian.ts @@ -0,0 +1,9 @@ +import { LangConfig } from '../types'; +import { englishLang } from './english'; + +/** + * 俄罗斯语配置 + */ +export const russianLang: LangConfig = { + ...englishLang, +}; diff --git a/src/assets/lang/i18ns/spanish.ts b/src/assets/lang/i18ns/spanish.ts new file mode 100644 index 0000000..9e49209 --- /dev/null +++ b/src/assets/lang/i18ns/spanish.ts @@ -0,0 +1,9 @@ +import { LangConfig } from '../types'; +import { englishLang } from './english'; + +/** + * 西班牙语配置 + */ +export const spanishLang: LangConfig = { + ...englishLang, +}; diff --git a/src/assets/lang/index.ts b/src/assets/lang/index.ts new file mode 100644 index 0000000..471067f --- /dev/null +++ b/src/assets/lang/index.ts @@ -0,0 +1,53 @@ +import Vue from 'vue'; +import { LangType } from './lang-enum'; +import { i18nData } from './i18ns/index'; +import { LangKey, LangLocaleFn } from './types'; + +let locale: LangType | LangLocaleFn = LangType.Chinese; // 默认中文 + +/** 替换多语言中的字符串模板 */ +function replace(key: string, value: string, str: string): string { + return str.replace(new RegExp('\\${' + key + '}', 'g'), value); +} + +/** 格式化多语言 */ +function formatLang(lang: string): LangType { + const lowerLocale = lang && lang.toLowerCase && lang.toLowerCase(); + if (lowerLocale === 'zh_cn' || lowerLocale === 'zh-cn') { + return LangType.Chinese; + } + return lang as LangType; +} + +/** 转换多语言 */ +export function translate(key: LangKey, options: UniversalParams = {}): string { + let lang: LangType = LangType.Chinese; + + if (typeof locale === 'function') { + lang = formatLang(locale()); + } else if (typeof locale === 'string') { + lang = formatLang(locale); + } + + const textList = i18nData[lang] || i18nData[LangType.Chinese]; + let text = textList[key]; + + if (options) { + const keys = Object.keys(options); + for (const key of keys) { + const value = options[key]; + text = replace(key, value, text); + } + } + + return text; +} + +export type LangInstallOptions = { + locale: LangType | LangLocaleFn; +}; + +export const i18nInstall = (vue: typeof Vue, options: LangInstallOptions) => { + Vue.prototype.$lang = translate; + locale = options.locale || locale; +}; diff --git a/src/assets/lang/lang-enum.ts b/src/assets/lang/lang-enum.ts new file mode 100644 index 0000000..e6cfce4 --- /dev/null +++ b/src/assets/lang/lang-enum.ts @@ -0,0 +1,23 @@ +/** + * @file 多语言相关枚举 + */ + +/** + * 语言类型枚举 + */ +export enum LangType { + /** 中文 */ + Chinese = 'zh_CN', + /** 英文 */ + English = 'en', + /** 俄语 */ + Russian = 'ru', + /** 葡萄牙语 */ + Portuguese = 'pt', + /** 阿拉伯语 */ + Arabic = 'ar', + /** 波斯语 */ + Farsi = 'fa', + /** 西班牙语 */ + Spanish = 'es', +} diff --git a/src/assets/lang/types.ts b/src/assets/lang/types.ts new file mode 100644 index 0000000..b6720b7 --- /dev/null +++ b/src/assets/lang/types.ts @@ -0,0 +1,12 @@ +import { LangType } from './lang-enum'; +import { chinaLang } from './i18ns/china'; + +/** 某个多语言配置 */ +export type LangConfig = typeof chinaLang; + +export type LangKey = keyof LangConfig; + +/** 多语言匹配类型 */ +export type LangI18nData = Record; + +export type LangLocaleFn = () => LangType; diff --git a/src/assets/styles/animation.scss b/src/assets/styles/animation.scss new file mode 100644 index 0000000..7448509 --- /dev/null +++ b/src/assets/styles/animation.scss @@ -0,0 +1,88 @@ +// 渐变动画 +.fade-enter-active { + animation: fade-in .3s; +} +.fade-leave-active { + animation: fade-in .35s reverse; +} +@keyframes fade-in { + 0% { + opacity: 0; + } + 100% { + opacity: 1; + } +} + +// 底部滑出动画 +.slide-enter-active { + animation: slide-in .2s ease-in-out; +} +.slide-leave-active { + animation: slide-in .15s reverse ease-in-out; +} +@keyframes slide-in { + 0% { + transform: translate(0, 100%); + } + 100% { + transform: translate(0, 0); + } +} + +// 旋转动画 +@keyframes spin { + 0% { + transform: rotate(0); + } + 100% { + transform: rotate(360deg); + } +} + +// 放大 +@keyframes scale-animation { + 0% { + transform: scale(1); + } + 50% { + transform: scale(1.2); + } + 100% { + transform: scale(1); + } +} + +.g-transition-menu-right-enter-active { + animation: menu-right 0.3s cubic-bezier(0.76, 0, 0.24, 1); +} +.g-transition-menu-right-leave-active { + animation: menu-left 0.3s cubic-bezier(0.76, 0, 0.24, 1); +} +.g-transition-menu-left-leave-active { + animation: menu-right 0.3s cubic-bezier(0.76, 0, 0.24, 1) reverse; +} +.g-transition-menu-left-enter-active { + animation: menu-left 0.3s cubic-bezier(0.76, 0, 0.24, 1) reverse; +} +@keyframes menu-right { + 0% { + opacity: 0; + transform: translateX(100vw); + } + 100% { + opacity: 1; + transform: translateX(0); + } +} +@keyframes menu-left { + 0% { + opacity: 1; + transform: translateX(0); + } + 100% { + opacity: 0; + transform: translateX(-100vw); + } +} + diff --git a/src/assets/styles/fonts/ALIBABAFont.eot b/src/assets/styles/fonts/ALIBABAFont.eot new file mode 100644 index 0000000000000000000000000000000000000000..1139bf9cf51442e09dd1ad38d6a1ae47e58a632a GIT binary patch literal 4306 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 literal 0 HcmV?d00001 diff --git a/src/assets/styles/fonts/ALIBABAFont.svg b/src/assets/styles/fonts/ALIBABAFont.svg new file mode 100644 index 0000000..feddfbd --- /dev/null +++ b/src/assets/styles/fonts/ALIBABAFont.svg @@ -0,0 +1,182 @@ + + + + +Created by FontForge 20200314 at Mon Apr 15 18:44:59 2019 + By www-data +copyright missing + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/styles/fonts/ALIBABAFont.ttf b/src/assets/styles/fonts/ALIBABAFont.ttf new file mode 100644 index 0000000000000000000000000000000000000000..e0193f0cbc0a8cc363ed3b1536dc7e5c88fe8fd6 GIT binary patch literal 4020 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 literal 0 HcmV?d00001 diff --git a/src/assets/styles/fonts/ALIBABAFont.woff b/src/assets/styles/fonts/ALIBABAFont.woff new file mode 100644 index 0000000000000000000000000000000000000000..cc64e7985a564de7d363b38d87fc8be7d06ee812 GIT binary patch literal 2936 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 yeM>|Qod=pUWVxsR97^Vea1GvNS= 11.2 + padding-bottom: calc(env(safe-area-inset-bottom) + #{$normalBottom}); + // 兼容不支持calc(env(safe-area-inset-bottom)和calc(constant(safe-area-inset-bottom)这两种写法的浏览器,假设安全距离为0,设置padding-bottom为传出的值 + @supports not(padding-bottom: calc(env(safe-area-inset-bottom) + #{$normalBottom}) or (padding-bottom: calc(constant(safe-area-inset-bottom, $normalBottom) + #{$normalBottom}))) { + padding-bottom: $normalBottom; + } + } +} + +@mixin clear-input-style { + background: none; + border: none; + border-radius: 0; + outline: none; + &::-webkit-input-placeholder { + color: #9E9E9E; + } + &::placeholder { + color: #9E9E9E; + } + &::-webkit-outer-spin-button, + &::-webkit-inner-spin-button { + -webkit-appearance: none !important; + margin: 0; + } + &[type=number] { + -moz-appearance: textfield; + } + &[disabled] { + opacity: 1; + } + &[type=button], + &[type=submit], + &[type=reset] { + -webkit-appearance: none; + background: #fff; + } +} + +@mixin scrollbar($scrollbar-color: null) { + &::-webkit-scrollbar { + width: 6px; + } + &::-webkit-scrollbar-thumb { + @if ($scrollbar-color) { + background-color: $scrollbar-color; + } + border-radius: 3px; + } +} + +// 隐藏滚动条 +@mixin hidden-scrollbar { + &::-webkit-scrollbar { + display: none; + } +} + +@mixin scroll-style { + &::-webkit-scrollbar { + width: 12px; + height: 12px; + cursor: pointer; + } + &::-webkit-scrollbar-thumb { + background: #CFD8DC; + border: 2px solid #EDF1F7; + border-radius: 8px; + } + &::-webkit-scrollbar-track-piece { + background: #EDF1F7; + } +} + +// 单行内容超出省略 +@mixin singleline-text { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +// 多行内容超出省略 +@mixin multiline-text($lineCount: 2) { + display: -webkit-box; + overflow: hidden; + text-overflow: ellipsis; + -webkit-box-orient: vertical; + -webkit-line-clamp: $lineCount; +} + +// 利用缩放生成0.5px 边框 +@mixin minor-border($color: #e1e1e1) { + &::after { + position: absolute; + top: 0; + left: 0; + box-sizing: border-box; + display: block; + width: 200%; + height: 200%; + pointer-events: none; + content: ''; + border: 1px solid $color; + border-radius: 50%; + transform: scale(0.5); + transform-origin: 0 0; + } +} + +$others-font: 'Helvetica Neue', helvetica, 'PingFang SC', 'Microsoft YaHei', arial, sans-serif; +$mobile-font: 'PingFangSC-Regular', 'Roboto', $others-font; +@mixin mobile-font($type: regular, $font-size: 12px, $font-weight: normal) { + @if $type == regular { + font: $font-weight $font-size $mobile-font; + } @else if $type == medium { + font: $font-weight $font-size $mobile-font; + } @else if $type == semibold { + font: $font-weight $font-size $mobile-font; + } +} + + +// 混入 alibaba 字体 +@mixin alibaba-font($font-size: 12px, $font-weight: normal) { + font: $font-weight $font-size ALIBABAFont, $mobile-font; +} + diff --git a/src/assets/styles/mobile.scss b/src/assets/styles/mobile.scss new file mode 100644 index 0000000..e4cbe8c --- /dev/null +++ b/src/assets/styles/mobile.scss @@ -0,0 +1,5 @@ +html, body { + width: 100%; + height: 100%; + overflow: hidden; +} diff --git a/src/assets/styles/pc-response.scss b/src/assets/styles/pc-response.scss new file mode 100644 index 0000000..095de12 --- /dev/null +++ b/src/assets/styles/pc-response.scss @@ -0,0 +1,11 @@ +// PC 端响应式样式 + +.g-aside-font-size { + font-size: 16px; +} + +@media (max-width: 1920px) { + .g-aside-font-size { + font-size: 14px !important; + } +} diff --git a/src/assets/styles/pc.scss b/src/assets/styles/pc.scss new file mode 100644 index 0000000..56865f9 --- /dev/null +++ b/src/assets/styles/pc.scss @@ -0,0 +1,10 @@ +@import './pc-response.scss'; + +.g-outside { + min-width: 1rem; +} +.g-boundary { + width: 1rem; + margin-right: auto; + margin-left: auto; +} diff --git a/src/assets/styles/portrait.scss b/src/assets/styles/portrait.scss new file mode 100644 index 0000000..a8bcdcb --- /dev/null +++ b/src/assets/styles/portrait.scss @@ -0,0 +1,5 @@ + +// 竖屏主体色 +$--portrait-primary-color: #FFD16B; +// 竖屏弹窗内线条颜色 +$--portrait-popper-border: rgba(255, 255, 255, .1); diff --git a/src/assets/styles/variables.scss b/src/assets/styles/variables.scss new file mode 100644 index 0000000..1bf5b8d --- /dev/null +++ b/src/assets/styles/variables.scss @@ -0,0 +1,115 @@ +@use 'sass:map'; +@import './function.scss'; +@import './portrait.scss'; + +// 最高层级的 z-index +$--zIndex-top: 10001; +// 一般挂件的 z-index +$--zIndex-pendant: 2000; + +$--color-white: #FFFFFF !default; // 白色 +$--color-black: #000000 !default; // 黑色 +$--color-primary: #3082FE !default; // 主题色 +$--color-primary-portrait: #FFA611 !default; // 竖屏主题色 + +// #458ffe +$--color-primary-light-1: get-opacity-color($--color-primary, 1); +// #599bfe +$--color-primary-light-2: get-opacity-color($--color-primary, 2); +// #6ea8fe +$--color-primary-light-3: get-opacity-color($--color-primary, 3); +// #83b4fe +$--color-primary-light-4: get-opacity-color($--color-primary, 4); +// #98c1ff +$--color-primary-light-5: get-opacity-color($--color-primary, 5); +// #accdff +$--color-primary-light-6: get-opacity-color($--color-primary, 6); +// #c1daff +$--color-primary-light-7: get-opacity-color($--color-primary, 7); +// #d6e6ff +$--color-primary-light-8: get-opacity-color($--color-primary, 8); +// #eaf3ff +$--color-primary-light-9: get-opacity-color($--color-primary, 9); + +// 背景色 +$--bg-color-disabled: #E9ECEE !default; // 不可用 +$--bg-color-portrait-popup: #262523 !default; // 竖屏下的弹层背景色 +$--bg-color-portrait-disabled: #CDCDCD !default; // 竖屏下的不可用 + +// 字体色 +$--font-color-primary: #333333 !default; // 默认字体颜色 +$--font-color-disabled: #9E9E9E !default; // 不可用 +$--font-color-info: #999999 !default; // 信息 +$--font-color-error: #ff5722 !default; // 异常 + +// 边框色 +$--border-color-primary: #EDEDEF !default; // 常规边框色 +$--border-color-error: #ff5722 !default; // 异常状态边框色 + +// 阴影 +$--shadow-dialog: 0 0 16px 0 rgba(0, 0, 0, 0.08) !default; // 对话框阴影 +$--shadow-popper: 0 6px 12px rgb(0, 0, 0, 0.1) !default; // 弹层阴影 + +// 表单相关样式变量 +$--form-input-height: 40px !default; // 输入框高度 +$--form-input-height-small: 30px !default; // 输入框高度 - small + +$--form-input-padding: 0 16px !default; // 输入框内边距 +$--form-input-padding-small: 0 8px !default; // 输入框内边距 - small + +$--form-input-font-size: 14px !default; // 输入框字体大小 +$--form-input-font-size-small: 12px !default; // 输入框字体大小 - small + +$--form-input-border-color: #d8d8d8 !default; // 输入框边框颜色 +$--form-input-border-color-error: $--border-color-error !default; // 输入框异常边框色 + +$--form-input-bg: $--color-white !default; // 输入框背景色 +$--form-input-bg-error: #ffe9e9 !default; // 输入框异常背景色 + +// 表单相关样式变量(移动端) +$--mobile-form-input-sizes: ( + 'default': ( + 'height': 48px, + 'padding': 0 16px, + 'font-size': 16px, + 'radius': 24px, + ), + 'medium': ( + 'height': 40px, + 'padding': 0 16px, + 'font-size': 14px, + 'radius': 20px, + ), + 'small': ( + 'height': 36px, + 'padding': 0 12px, + 'font-size': 14px, + 'radius': 18px, + ), +) !default; + +$--mobile-form-input-themes: ( + 'default': ( + 'border-color': #f6f6f6, + 'background': #f6f6f6, + 'font-color': $--font-color-primary, + ), + 'error': ( + 'border-color': $--border-color-error, + 'background': #f6f6f6, + 'font-color': $--font-color-primary, + ), + 'dark': ( + 'border-color': #1a1b1f, + 'background': #1a1b1f, + 'font-color': $--color-white, + ), +) !default; + +// 播放器控制栏相关样式变量 +// 播放器面板背景 +$--player-control-panel-bg: rgba(0, 0, 0, 0.65) !default; + + +$--finance-primary-text-color: rgb(208, 172, 82); +$--finance-primary-bg-color: rgb(217, 186, 108); diff --git a/src/assets/utils/array.ts b/src/assets/utils/array.ts new file mode 100644 index 0000000..441edfb --- /dev/null +++ b/src/assets/utils/array.ts @@ -0,0 +1,8 @@ +/** + * 创建字符串元组 + */ +export const tupleString = (...args: T): T => args; + +export function isArray(target: unknown): target is T { + return Array.isArray(target); +} diff --git a/src/assets/utils/browser.ts b/src/assets/utils/browser.ts new file mode 100644 index 0000000..c7e9227 --- /dev/null +++ b/src/assets/utils/browser.ts @@ -0,0 +1,71 @@ +import { getCurrentUAInfo } from '@just4/ua-info'; + +const ua = navigator.userAgent.toLowerCase(); + +const uaInfo = getCurrentUAInfo(); + +/** 是否移动端 */ +export const isMobile = uaInfo.isPortable; + +/** 是否微信(非企业微信) */ +export const isWeixin = uaInfo.client.isWx; + +/** 是否企业微信 */ +export const isWorkWeixin = uaInfo.client.isWxWork; + +/** 是否为 QQ 浏览器 */ +export const isQQBrowser = uaInfo.client.isQQBrowser; + +/** 是否为 UC 浏览器 */ +export const isUCBrowser = uaInfo.client.isUCBrowser; + +/** 是否为百度 app */ +export const isBaiduApp = uaInfo.client.isBaiduApp; + +/** 是否安卓 */ +export const isAndroid = uaInfo.os.isAndroid; + +/** 是否 ios */ +export const isIOS = uaInfo.os.isIOS; + +/** 是否被 iframe */ +export const isIframe = window.self !== window.top; + +/** 获取 IOS 版本 */ +export function getIosVersion() { + const ver = navigator.appVersion.match(/OS (\d+)_(\d+)_?(\d+)?/); + if (ver) { + return parseInt(ver[1], 10); + } else { + return null; + } +} + +/** 针对 iOS 13 以上 iPad(ua 与桌面端 Mac OS 近似) */ +export const isDesktopIPad = /mac os x/i.test(ua) && 'ontouchend' in document; + +/** IE 浏览器版本号,不符合该浏览器特征时返回空字符串 */ +const ieVersion = /\bMSIE\s(\d+)/i.test(ua) || /\bTrident\/.*;\srv:(\d+)/.test(ua) ? RegExp.$1 : ''; + +/** 是否为低版本 IE */ +export const isLowerIE = ieVersion && Number(ieVersion) <= 10; + +/** + * 判断是否模拟 PC 的 UA + * + * 通过媒体查询判断,不通过 UA 和 navigator.platform + * - pointer:coarse 表示当前设备的指针是不精确的。手机不支持鼠标,只支持触摸 + * - hover: none 表示当前设备不支持 mouse hover 处理 + */ +function judgeIsMockPC(): boolean { + const matchMedia = window.matchMedia; + if (matchMedia) { + const isCoarsePointer = matchMedia('(pointer:coarse)').matches; + const isNotHover = matchMedia('(hover: none)').matches; + return isCoarsePointer && isNotHover && !isMobile; // 内部逻辑:支持触摸,不支持鼠标悬浮,UA 判断又不是移动端 => 模拟 PC + } + return false; +} + +/** 是否模拟 UA 为 PC */ +export const isMockPc = judgeIsMockPC(); diff --git a/src/assets/utils/copy.ts b/src/assets/utils/copy.ts new file mode 100644 index 0000000..fd57768 --- /dev/null +++ b/src/assets/utils/copy.ts @@ -0,0 +1,43 @@ +import { toast } from '@/hooks/components/use-toast'; +import Clipboard from 'clipboard'; +import { translate } from '../lang'; + +/** + * 复制文本 + * @param text 复制内容 + */ +export function copyText(text: string) { + return new Promise((resolve, reject) => { + const btnElm = document.createElement('button'); + btnElm.style.width = '0'; + btnElm.style.height = '0'; + const clipboard = new Clipboard(btnElm, { + text: () => { + return text; + }, + action: () => { + return 'copy'; + }, + }); + + clipboard.on('success', function (e) { + clipboard.destroy(); + document.body.removeChild(btnElm); + resolve(e); + }); + + clipboard.on('error', function (e) { + clipboard.destroy(); + document.body.removeChild(btnElm); + reject(e); + }); + + document.body.appendChild(btnElm); + btnElm.click(); + }); +} + +/** 提示复制成功 */ +export const toastCopySuccess = () => { + toast.success(translate('copy.success')); +}; diff --git a/src/assets/utils/date-time.ts b/src/assets/utils/date-time.ts new file mode 100644 index 0000000..7506b22 --- /dev/null +++ b/src/assets/utils/date-time.ts @@ -0,0 +1,21 @@ +/** + * @file 日期时间相关的工具方法 + */ + +/** + * 秒数转成时长字符串 + * @param duration 秒数,单位:秒 + */ +export function formatDuration(duration: number): string { + const seconds = Math.floor(duration % 60) + .toString() + .padStart(2, '0'); + const minutes = Math.floor((duration / 60) % 60) + .toString() + .padStart(2, '0'); + const hours = Math.floor(duration / 3600) + .toString() + .padStart(2, '0'); + + return `${hours}:${minutes}:${seconds}`; +} diff --git a/src/assets/utils/dom.ts b/src/assets/utils/dom.ts new file mode 100644 index 0000000..26cbd97 --- /dev/null +++ b/src/assets/utils/dom.ts @@ -0,0 +1,45 @@ +/** 当前浏览器是否支持 filter 样式 */ +export const supportsFilterStyle = 'filter' in document.body.style; + +export function getElement(selector: string | HTMLElement): HTMLElement | null { + if (selector instanceof HTMLElement) { + return selector; + } + return document.querySelector(selector); +} + +/** + * 格式化样式数值 + * @param size 数值或数值字符串 + */ +export function formatStyleSize(size?: string | number): string | undefined { + if (typeof size === 'string') { + return size; + } + + if (typeof size === 'number') { + return `${size}px`; + } + + return size; +} + +/** + * 判断是否是否在 input 等可编辑的表单元素中 + */ +export function isFocusActiveForm(): boolean { + const activeElem = document.activeElement; + if (!activeElem) { + return false; + } + const tagName = activeElem.tagName.toLowerCase(); + + // 可编辑的 div + if (tagName === 'div' && activeElem.getAttribute('contenteditable')) { + return true; + } + + // 表单元素 + const tagNames = ['input', 'textarea']; + return tagNames.includes(tagName); +} diff --git a/src/assets/utils/file.ts b/src/assets/utils/file.ts new file mode 100644 index 0000000..792915f --- /dev/null +++ b/src/assets/utils/file.ts @@ -0,0 +1,54 @@ +/** + * @file 和文件相关的工具方法 + */ +import { changeProtocol } from '@utils-ts/net'; +import { isIframe, isMobile, isWeixin } from './browser'; + +/** + * 获取文件后缀名 + * @param fileName 文件名 + */ +export function getFileSuffix(fileName: string): string { + const result = fileName.match(/[^.]+$/); + if (!result) return ''; + return result[0].toLocaleLowerCase(); +} + +/** + * 下载文件 + * @param fileUrl 文件地址 + * @param fileName 文件名 + */ +export function downloadFile(fileUrl: string, fileName: string) { + const path = changeProtocol(fileUrl, 'https'); + const a = document.createElement('a'); + a.setAttribute('target', '_blank'); + + // 在 iframe 下上报事件到父窗口中进行下载 + if (isIframe) { + const record = { name: 'file', path }; + window.parent.postMessage(record, '*'); + return; + } + + // 移动端与微信 + if (isWeixin || isMobile) { + a.href = path; + document.body.appendChild(a); + a.click(); + document.body.removeChild(a); + return; + } + + const xhr = new window.XMLHttpRequest(); + xhr.open('GET', path, true); + xhr.responseType = 'blob'; + xhr.onload = () => { + const blobUrl = window.URL.createObjectURL(xhr.response); + a.href = blobUrl; + a.download = fileName; + a.click(); + a.remove(); + }; + xhr.send(); +} diff --git a/src/assets/utils/function.ts b/src/assets/utils/function.ts new file mode 100644 index 0000000..e2628fb --- /dev/null +++ b/src/assets/utils/function.ts @@ -0,0 +1,7 @@ +/** + * 判断目标是否为函数类型 + * @param target 目标 + */ +export function isFunction(target: unknown): target is T { + return typeof target === 'function'; +} diff --git a/src/assets/utils/image.ts b/src/assets/utils/image.ts new file mode 100644 index 0000000..2aa9e51 --- /dev/null +++ b/src/assets/utils/image.ts @@ -0,0 +1,89 @@ +/** + * @file 和图片相关的工具函数 + */ +import { changeProtocol, startsWithProtocol } from '@utils-ts/net'; + +/** + * 重置图片的地址 + * @param url 图片地址 + */ +export function resetImageProtocol(url: string): string { + // 如果当前页面是 http 协议则用 http + if (startsWithProtocol(location.href, ['http'])) { + return changeProtocol(url, 'http'); + } + + // 其余情况都用 https + return changeProtocol(url, 'https'); +} + +/** + * 重置 oss 的图片尺寸 + * @param url 图片地址 + * @param width 宽度 + * @param height 高度 + */ +export function resizeOSSImg(url: string, width?: number, height?: number): string { + if (!url) { + return url; + } + + const a = document.createElement('a'); + a.href = url; + + const host = a.host.toLowerCase(); + const search = a.search; + + if (host !== 'liveimages.videocc.net' || search) { + return url; + } + + let result = url + '?x-oss-process=image/resize,mfit'; + if (width) { + result += ',w_' + width; + } + if (height) { + result += ',h_' + height; + } + result += ',limit_1'; + return result; +} + +/** + * 获取图片地址的尺寸 + * @param url 图片地址 + * @returns 尺寸与图片实例 + */ +export function getImgSize( + url: string, +): Promise<{ width: number; height: number; imgTarget: HTMLImageElement }> { + return new Promise<{ width: number; height: number; imgTarget: HTMLImageElement }>( + (resolve, reject) => { + const img = new Image(); + const resolvePromise = () => { + resolve({ + width: img.width, + height: img.height, + imgTarget: img, + }); + }; + img.onload = () => { + resolvePromise(); + }; + img.onerror = ( + event: Event | string, + source?: string, + lineno?: number, + colno?: number, + error?: Error, + ) => { + const reason = error?.message || '未知原因'; + reject(new Error(`获取图片尺寸失败:${reason}`)); + }; + img.src = url; + if (img.complete) { + resolvePromise(); + } + }, + ); +} diff --git a/src/assets/utils/number.ts b/src/assets/utils/number.ts new file mode 100644 index 0000000..cd93927 --- /dev/null +++ b/src/assets/utils/number.ts @@ -0,0 +1,42 @@ +/** + * @file 跟数值有关的工具方法 + */ + +export function isNumber(target: unknown): target is number { + return typeof target === 'number'; +} + +/** + * 缩短万以上的数值 + * @param num 数值 + */ +export function shortNumber(num: number): string { + if (num >= 10000) { + return (num / 10000).toFixed(1) + 'w'; + } else { + return num.toString(); + } +} + +/** + * 保留小数位 + * @param number + * @param accuracy 精度,选传,默认为 2 + */ +export function numberToFixed(number: number, accuracy = 2): number { + return Number(number.toFixed(accuracy)); +} + +/** + * 保留数值的小数位,并转为字符串 + * @param num + * @param accuracy 精度,默认:1 + */ +export function numberAccuracy(num: number, accuracy = 1): string { + const numStr = num.toString(); + const numStrList = numStr.split('.'); + const integerStr = numStrList[0]; + let decimalStr = numStrList[1] || ''; + decimalStr = decimalStr.padEnd(accuracy, '0'); + return `${integerStr}.${decimalStr}`; +} diff --git a/src/assets/utils/storage.ts b/src/assets/utils/storage.ts new file mode 100644 index 0000000..54af7b7 --- /dev/null +++ b/src/assets/utils/storage.ts @@ -0,0 +1,32 @@ +import { local } from '@just4/storage'; + +/** + * Storage 存储 key 前缀 + */ +export const STORAGE_KEY_PREFIX = 'plv-live-watch-sdk-'; + +/** + * 获取 storage 的完整 key + * @param suffix 后缀 + */ +export function getStorageKey(suffix: string): string { + return `${STORAGE_KEY_PREFIX}${suffix}`; +} + +/** + * 设置 localStorage + * @param key + * @param value + */ +export function setLocalStorage(key: string, value: string): void { + local.set(getStorageKey(key), value); +} + +/** + * 获取 localStorage + * @param key + * @returns + */ +export function getLocalStorage(key: string): string | null { + return local.get(getStorageKey(key)); +} diff --git a/src/assets/utils/string.ts b/src/assets/utils/string.ts new file mode 100644 index 0000000..1ee6a3e --- /dev/null +++ b/src/assets/utils/string.ts @@ -0,0 +1,56 @@ +/** + * @file 跟字符串相关的工具方法 + */ + +import { resizeOSSImg } from './image'; + +/** + * 将字符串中的 转换为空格 + * 背景:新版观看在做英文自动折行时,如果后端返回的富文本字符串包含 ,依然会存在换行切割单词的问题,因此需要做这个转换 + * 影响:如果出现连续空格的情况,使用该方法转换后,只会存在一个空格;目前会在使用的地方增加white-space: pre-wrap处理 + * 目前应用范围:对后端返回的富文本字符串进行转换,包括直播介绍、报名观看的隐私政策 + * @param str 需要处理的字符串 + */ +export function nbspToSpace(str: string): string { + return String(str).replace(/ /g, ' '); +} + +/** + * 将富文本字符串中的图片地址进行大小处理 + * @param htmlContent 富文本字符串 + */ +export function resizeHtmlContentImg(htmlContent: string): string { + if (!htmlContent) { + return ''; + } + return htmlContent.replace( + /()/gi, + (match, before, quot, src, after) => { + return before + '"' + resizeOSSImg(src, 1680) + '"' + ' data-src="' + src + '"' + after; + }, + ); +} + +export function isString(target: unknown): target is string { + return typeof target === 'string'; +} + +/** + * html字符串提取纯文本 + */ +export function htmlStr2Text(htmlStr: string): string | null { + if (!htmlStr) return ''; + const dom = document.createElement('div'); + dom.innerHTML = htmlStr; + return dom.textContent; +} + +/** + * 将字符串中的链接转成 a 标签 + * @param text 目标字符串 + */ +export function parseLinkContent(text: string) { + const linkReg = /(http[s]?:\/\/)([\w-]+(\.[\w-]+)+([\w\-.,@?^=%&:/~+#]*[\w\-@?^=%&/~+#])?)/g; + + return text.replace(linkReg, '$1$2'); +} diff --git a/src/assets/utils/types.ts b/src/assets/utils/types.ts new file mode 100644 index 0000000..33485bc --- /dev/null +++ b/src/assets/utils/types.ts @@ -0,0 +1,3 @@ +export function isUndefined(target: unknown): target is undefined { + return typeof target === 'undefined'; +} diff --git a/src/assets/utils/url.ts b/src/assets/utils/url.ts new file mode 100644 index 0000000..edaf555 --- /dev/null +++ b/src/assets/utils/url.ts @@ -0,0 +1,15 @@ +/** + * @file 与地址有关的工具方法 + */ +import { changeProtocol } from '@utils-ts/net'; + +/** + * 将 url 修改成当前访问协议/补全协议头 + * @param url 目标 url + */ +export function fitProtocol(url: string): string { + const matchRs = /^(http(s?)):/.exec(location.href); + const protocol = (matchRs && matchRs[1]) || 'https'; + + return changeProtocol(url, protocol); +} diff --git a/src/assets/utils/utils.ts b/src/assets/utils/utils.ts new file mode 100644 index 0000000..323ba41 --- /dev/null +++ b/src/assets/utils/utils.ts @@ -0,0 +1,36 @@ +/** + * 等待一段时间 + * @param time 等待时间 + */ +export function wait(time = 3000) { + return new Promise(resolve => { + setTimeout(() => { + resolve(); + }, time); + }); +} + +/** + * 获取事件对象中的坐标 + * @param event 事件对象 + */ +export function getEventPosition(event: MouseEvent | TouchEvent): { + clientX: number; + clientY: number; +} { + if (event instanceof MouseEvent) { + return { + clientX: event.clientX, + clientY: event.clientY, + }; + } + + const touch = event.touches[0] || event.changedTouches[0] || event.targetTouches[0]; + const touchX = touch.pageX; + const touchY = touch.pageY; + + return { + clientX: touchX, + clientY: touchY, + }; +} diff --git a/src/assets/utils/validate.ts b/src/assets/utils/validate.ts new file mode 100644 index 0000000..289f9ec --- /dev/null +++ b/src/assets/utils/validate.ts @@ -0,0 +1,47 @@ +/** + * @file 验证相关的工具函数 + */ + +/** + * 根据区号验证手机号是否正确 + * @param phoneNumber 手机号 + * @param areaCode 区号,默认:+86 + * @returns 正确的手机号返回 true + */ +export function validatePhoneNumber(phoneNumber: string, areaCode = '+86'): boolean { + // 对于非国内的手机号,只需要 5~20 位 + if (areaCode !== '+86') { + return /(^\d{5,20}$)/.test(phoneNumber); + } + + return /^1[3-9]\d{9}$/.test(phoneNumber); +} + +/** + * 验证图片验证码 + * @param imageCaptcha 图片验证码 + * @param imageId 图片验证码 id + * @returns 正确的验证码返回 true + */ +export function validateImageCaptcha(imageCaptcha: string, imageId: string): boolean { + return imageCaptcha.length >= 5 && imageId.length > 0; +} + +/** + * 文本是否包含特殊字符 + * @param text 目标文本 + * @returns 如果存在特殊字符则返回 true + */ +export function validateSpecialString(text: string): boolean { + const containSpecial = /[~!@#$%^&*()+=[\]{}|\\;:",./<>?]+/; + return containSpecial.test(text); +} + +/** + * 检测文本中是否仅包含中英文和空格 + * @param text 目标文本 + * @returns 如果存在其他字符则返回 false + */ +export function validateCnAndEn(text: string): boolean { + return /^[\u4e00-\u9fa5a-zA-Z ]+$/.test(text); +} diff --git a/src/assets/utils/vue-utils/emit-utils.ts b/src/assets/utils/vue-utils/emit-utils.ts new file mode 100644 index 0000000..b7fff0a --- /dev/null +++ b/src/assets/utils/vue-utils/emit-utils.ts @@ -0,0 +1,18 @@ +import { EmitFn, ObjectEmitsOptions } from 'vue/types/v3-setup-context'; + +type EmitFuncType

= (arg: P) => void; + +/** + * 创建 emit 配置的空函数 + */ +export const emitFunc =

(): EmitFuncType

=> (() => true) as EmitFuncType

; + +export type VueEmit ObjectEmitsOptions> = EmitFn>; + +type UpdateEmitReturn = Record<`update:${K}`, EmitFuncType

>; + +export function updateModelEmit(field: K) { + return { + [`update:${field}`]: () => true, + } as unknown as UpdateEmitReturn; +} diff --git a/src/assets/utils/vue-utils/index.ts b/src/assets/utils/vue-utils/index.ts new file mode 100644 index 0000000..a7dc83b --- /dev/null +++ b/src/assets/utils/vue-utils/index.ts @@ -0,0 +1,23 @@ +import Vue, { Ref, unref } from 'vue'; + +export type SimilarResponsive = T | Ref; + +/** + * 获取 ref 响应式对象中的 dom 节点,如果不是则返回 undefined + * @param targetRef 响应式对象 + */ +export const getRefElem = (targetRef: Ref | HTMLElement): E | undefined => { + const refValue = unref(targetRef); + + // 如果解构出来的是 dom 节点 + if (refValue instanceof HTMLElement) { + return refValue as E; + } + + // 如果解构出来的是 vue 对象,则返回 $el + if (refValue instanceof Vue) { + return refValue.$el; + } + + return undefined; +}; diff --git a/src/assets/utils/vue-utils/props-utils.ts b/src/assets/utils/vue-utils/props-utils.ts new file mode 100644 index 0000000..297e5a7 --- /dev/null +++ b/src/assets/utils/vue-utils/props-utils.ts @@ -0,0 +1,94 @@ +/** + * @file Vue 的 props 工具 + */ +import { IconComponentOption } from '@polyv/icons-vue/icon-builder'; +import { computed, ComputedRef, ExtractPropTypes } from 'vue'; +import { + string as _string, + number as _number, + bool as _bool, + object as _object, + func as _func, + oneOf as _oneOf, + array as _array, + oneOfType as _oneOfType, + VueTypeValidableDef, +} from 'vue-types'; + +/** Vue prop 配置工具 */ +export class PropUtils { + /** String 类型,默认:'' */ + static get string() { + return _string().def(''); + } + + /** String 类型,默认:undefined */ + static get looseString() { + return _string(); + } + + /** Number 类型,默认:0 */ + static get number() { + return _number().def(0); + } + + /** Number 类型,默认:undefined */ + static get looseNumber() { + return _number(); + } + + /** Boolean 类型,默认:true */ + static get bool() { + return _bool().def(true); + } + + static readonly objectType = _object; + + /** Array 类型,默认:[] */ + static readonly array = () => { + return _array().def([]); + }; + + /** Object 类型 */ + static readonly object = _object; + + /** Function 类型 */ + static readonly func = _func; + + /** 指定为数组中的值 */ + static readonly oneOf = _oneOf; + + /** 自定义类型 */ + static readonly oneOfType = _oneOfType; + + /** 枚举类型 */ + static readonly enum = _string; + + /** 图标组件类型 */ + static readonly icon = (): VueTypeValidableDef => { + return { + type: undefined, + default: undefined, + required: false, + } as VueTypeValidableDef; + }; +} + +export type VueProps UniversalParams> = Readonly>>; + +export type FormatProps UniversalParams> = Partial< + ExtractPropTypes> +>; + +export type PropComputedRefs

= { + [K in keyof P]: ComputedRef; +}; + +/** 结构 props,将 props 转成 computed */ +export const useProps =

(props: P): PropComputedRefs

=> { + const ret: PropComputedRefs

= {} as PropComputedRefs

; + for (const key in props) { + ret[key] = computed(() => props[key]); + } + return ret; +}; diff --git a/src/components/README.md b/src/components/README.md new file mode 100644 index 0000000..b801d9a --- /dev/null +++ b/src/components/README.md @@ -0,0 +1,9 @@ +# 说明 + +| 目录 | 说明 | +| :----------------- | :------------------------------------------------------------- | +| common-base | 存放一些基础组件,尽量不要使用 store | +| common-business | 存放 `splash` 和 `watch` 都需要用到的业务组件 | +| component-icons | 源文件在 `icon-svgs`,该文件夹是经过脚手架自动生成的的图标组件 | +| page-splash-common | 引导页公共组件 | +| page-watch-common | 直播观看页公共组件 | diff --git a/src/components/common-base/action-sheet/mobile-action-sheet.vue b/src/components/common-base/action-sheet/mobile-action-sheet.vue new file mode 100644 index 0000000..386abdf --- /dev/null +++ b/src/components/common-base/action-sheet/mobile-action-sheet.vue @@ -0,0 +1,73 @@ + + + + + + diff --git a/src/components/common-base/action-sheet/types.ts b/src/components/common-base/action-sheet/types.ts new file mode 100644 index 0000000..f7b5ce9 --- /dev/null +++ b/src/components/common-base/action-sheet/types.ts @@ -0,0 +1,8 @@ +export type ActionSheetValue = string | number; + +export interface ActionSheetItem { + /** 名称 */ + name: string; + /** 选项值 */ + value: ActionSheetValue; +} diff --git a/src/components/common-base/action-sheet/use-action-sheet.ts b/src/components/common-base/action-sheet/use-action-sheet.ts new file mode 100644 index 0000000..968af6c --- /dev/null +++ b/src/components/common-base/action-sheet/use-action-sheet.ts @@ -0,0 +1,76 @@ +import { emitFunc, updateModelEmit, VueEmit } from '@/assets/utils/vue-utils/emit-utils'; +import { PropUtils, VueProps } from '@/assets/utils/vue-utils/props-utils'; +import { ref, watch } from 'vue'; +import { PopupInstance } from '@/components/common-base/popup/types'; +import { popupEmits, popupProps } from '@/components/common-base/popup/use-popup'; +import { ActionSheetItem, ActionSheetValue } from './types'; + +export const actionSheetProps = () => ({ + ...popupProps(), + /** 操作选项列表 */ + actions: PropUtils.array(), + /** 当前选择的操作,支持.sync */ + actionValue: PropUtils.oneOfType([String, Number]).def(''), + /** 是否显示取消,默认:true */ + showCancel: PropUtils.bool.def(false), +}); + +export const actionSheetEmits = () => ({ + ...popupEmits(), + ...updateModelEmit<'actionValue', ActionSheetValue>('actionValue'), + /** 点击选项 */ + 'click-action': emitFunc(), +}); + +export const useActionSheet = (options: { + props: VueProps; + emit: VueEmit; +}) => { + const { props, emit } = options; + + const actionVisible = ref(false); + + watch( + () => props.visible, + () => { + actionVisible.value = props.visible; + }, + ); + + watch( + () => actionVisible.value, + () => { + if (actionVisible.value === props.visible) return; + emit('update:visible', actionVisible.value); + }, + ); + + const popupRef = ref(); + + /** 处理点击选项 */ + function onClickOption(option: ActionSheetItem) { + if (props.actionValue !== option.value) { + emit('update:actionValue', option.value); + } + + if (popupRef.value) { + popupRef.value.closePopup(); + } + + emit('click-action', option.value); + } + + /** 处理点击取消 */ + function onClickCancel() { + if (popupRef.value) { + popupRef.value.closePopup(); + } + } + + return { + actionVisible, + popupRef, + onClickOption, + onClickCancel, + }; +}; diff --git a/src/components/common-base/count-down/count-down.vue b/src/components/common-base/count-down/count-down.vue new file mode 100644 index 0000000..2777108 --- /dev/null +++ b/src/components/common-base/count-down/count-down.vue @@ -0,0 +1,191 @@ + + + + + + diff --git a/src/components/common-base/count-down/types.ts b/src/components/common-base/count-down/types.ts new file mode 100644 index 0000000..a1b261e --- /dev/null +++ b/src/components/common-base/count-down/types.ts @@ -0,0 +1,7 @@ +import { tupleString } from '@/assets/utils/array'; + +export const countDownSizes = tupleString('default', 'small'); +export type CountDownSize = typeof countDownSizes[number]; + +export const countdownThemes = tupleString('square', 'text'); +export type CountDownTheme = typeof countdownThemes[number]; diff --git a/src/components/common-base/count-down/use-count-down.ts b/src/components/common-base/count-down/use-count-down.ts new file mode 100644 index 0000000..29060e1 --- /dev/null +++ b/src/components/common-base/count-down/use-count-down.ts @@ -0,0 +1,159 @@ +import { translate } from '@/assets/lang'; +import { SimilarResponsive } from '@/assets/utils/vue-utils'; +import { emitFunc, VueEmit } from '@/assets/utils/vue-utils/emit-utils'; +import { PropUtils, useProps, VueProps } from '@/assets/utils/vue-utils/props-utils'; +import { useSecondCountDown } from '@/hooks/tools/use-count-down'; +import { IRemaining as CountDownSurplusData } from '@utils-ts/countdown'; +import { computed, Ref, unref, watch } from 'vue'; +import { countDownSizes, countdownThemes } from './types'; + +export const countDownProps = () => ({ + /** 尺寸,small-小型尺寸,常用于移动端 */ + size: PropUtils.oneOf(countDownSizes).def('default'), + /** 倒计时样式,square-方形,text-文本,默认:square */ + theme: PropUtils.oneOf(countdownThemes).def('square'), + /** 计时时间,优先级高于 endTimestamp */ + second: PropUtils.number.def(undefined), + /** 结束的时间戳 */ + endTimestamp: PropUtils.number.def(undefined), + /** 只有 0 天时是否隐藏天数,默认:true */ + hideZeroDays: PropUtils.bool.def(true), +}); + +/** + * 倒计时组件的 emit 配置 + */ +export const countDownEmits = () => ({ + /** 倒计时改变 */ + 'count-down-change': emitFunc(), + /** 倒计时结束 */ + 'count-down-finish': emitFunc(), +}); + +export type CountDownField = 'days' | 'hours' | 'minutes' | 'seconds'; + +export interface CountDownFieldItem { + /** 字段名 */ + field: CountDownField; + /** 标题 */ + title: string; + /** 时间单位,多语言 */ + unit: string; +} + +export interface CountDownItem { + /** 数值 */ + count: number; + /** 数值文案,自动补 0 */ + text: string; + /** 标题 */ + title: string; + /** 时间单位,含多语言 */ + unit: string; +} + +export interface UseCountDownOptions { + /** 总秒数,单位秒 */ + second?: SimilarResponsive; + /** 结束的时间戳 */ + endTimestamp?: SimilarResponsive; + /** 当天数为 0 时隐藏天数,默认:true */ + hideZeroDays?: boolean | Ref; + emit?: VueEmit; +} + +/** + * 倒计时 hook + * @param {Object} options 选项 + * @param {Proxy} options.second 总秒数,单位:秒 + * @param {Proxy} options.endTimestamp 结束的时间戳 + * @param {Proxy} options.hideZeroDays 当天数为 0 时隐藏天数,默认:true + * @param {Function} options.emit 回调方法 + */ +export const useCountDown = (options: { + props: VueProps; + emit: VueEmit; +}) => { + const { props, emit } = options; + const { hideZeroDays, second, endTimestamp } = useProps(props); + + const { surplusTime, computedSecond, initCountDown, startCountDown, stopCountDown } = + useSecondCountDown({ + second, + endTimestamp, + onCountDownChange: data => emit('count-down-change', data), + onCountDownFinish: () => emit('count-down-finish'), + }); + + /** 显示的时间内容列表 */ + const timeContents = computed(() => { + const contents: CountDownItem[] = []; + + const surplusVal = unref(surplusTime); + + const fields: CountDownFieldItem[] = [ + { field: 'days', title: 'DAY', unit: translate('unit.day') }, + { field: 'hours', title: 'HOUR', unit: translate('unit.hour') }, + { field: 'minutes', title: 'MIN', unit: translate('unit.minute') }, + { field: 'seconds', title: 'SEC', unit: translate('unit.second') }, + ]; + + fields.forEach(({ field, title, unit }) => { + const count = surplusVal[field]; + + // 对于 0 天则不在显示列表中 + if (unref(hideZeroDays) && field === 'days' && count === 0) { + return; + } + + contents.push({ + // 数值 + count, + // 数值文案,自动补 0 + text: formatNumber(count), + // 标题 + title, + // 单位,含多语言 + unit: unref(unit), + }); + }); + + return contents; + }); + + /** + * 显示的时间文案 + * @example + * 01 天 10 时 22 分 30 秒 + */ + const timeText = computed(() => { + const texts: string[] = []; + + unref(timeContents).forEach(data => { + texts.push(`${data.text} ${data.unit}`); + }); + + return texts.join(' '); + }); + + /** 格式化数值,自动补 0 */ + function formatNumber(count: number): string { + return count < 10 ? `0${count}` : count.toString(); + } + + watch( + () => unref(computedSecond), + () => initCountDown(), + { + immediate: true, + }, + ); + + return { + surplusTime, + timeContents, + timeText, + startCountDown, + stopCountDown, + }; +}; diff --git a/src/components/common-base/custom-teleport/custom-teleport.ts b/src/components/common-base/custom-teleport/custom-teleport.ts new file mode 100644 index 0000000..9e60a5a --- /dev/null +++ b/src/components/common-base/custom-teleport/custom-teleport.ts @@ -0,0 +1,101 @@ +/** + * @file 自定义 vue3 的 teleport + */ +import { useVue } from '@/hooks/core/use-vue'; +import { PropUtils } from '@/assets/utils/vue-utils/props-utils'; +import { defineComponent, nextTick, onBeforeUnmount, onMounted, watch } from 'vue'; +import { $ } from '@just4/dom'; + +const customTeleportProps = () => ({ + /** 渲染到某个节点 */ + to: PropUtils.oneOfType([String, HTMLElement]), +}); + +export const CustomTeleport = defineComponent({ + props: { + ...customTeleportProps(), + }, + setup(props, { slots }) { + const { getCurrentElem } = useVue(); + + const startComment = document.createComment('teleport start'); + const $startComment = $(startComment); + + const endComment = document.createComment('teleport end'); + const $endComment = $(endComment); + + /** 设置渲染位置的占位 */ + function setTeleportPosition() { + const elem = getCurrentElem(); + if (!elem) { + return; + } + const $elem = $(elem); + $startComment.insertBefore($elem); + $endComment.insertAfter($elem); + } + + /** 重置元素到初时位置 */ + function resetToDefaultPosition() { + const elem = getCurrentElem(); + if (!elem) { + return; + } + const $elem = $(elem); + $elem.insertAfter($startComment); + } + + /** 设置节点位置 */ + async function setElemPosition() { + await nextTick(); + // 没传则重置到初时位置 + if (!props.to) { + resetToDefaultPosition(); + return; + } + + const elem = getCurrentElem(); + if (!elem) { + return; + } + + let parentElem: Element | undefined | null; + if (typeof props.to === 'string') { + parentElem = document.querySelector(props.to); + } else if (props.to instanceof Element) { + parentElem = props.to; + } + + if (!parentElem) { + resetToDefaultPosition(); + return; + } + + const $parentElem = $(parentElem); + $parentElem.append(elem); + } + + watch( + () => props.to, + () => { + setElemPosition(); + }, + ); + + onMounted(() => { + setTeleportPosition(); + if (props.to) { + setElemPosition(); + } + }); + + onBeforeUnmount(() => { + $startComment.remove(); + $endComment.remove(); + }); + + return () => slots.default && slots.default(); + }, +}); + +export default CustomTeleport; diff --git a/src/components/common-base/dialog/mobile-dialog/imgs/icon-arrow-l.png b/src/components/common-base/dialog/mobile-dialog/imgs/icon-arrow-l.png new file mode 100644 index 0000000000000000000000000000000000000000..0ec661d8ada78cac0027c4072aec4d9c08c498a6 GIT binary patch literal 1846 zcmbVNe@q)y9KZ6T19XJNkxXRsc3|Ap>;2#;?WNrcEz(Ylq}0e*W_G=Mg$wQ7?e3rj z!(_xow#2O?D3RdAIMgM>_#aV|88#=?@DPHnM8NVyZ7$B z&-?!Pe1F{Wy4sq}c|~~$f^7DAJpnj-;RxoK;d|$;!|%c=SMl!G5ahlGjA23s2Dc$d zcA*$-&>Q?uv%DO&aDp5HmUvWwXasTWjVm1A0(3M4nncNo-T3$u3>5_@_FTE2^eb-A zEP6XsP~TA-oRh{sc;sG)0gUL0fUEoMkAMCehS`L3OGSW&@rlQ_A3% z6KmFWg(ZksEM|$7S!A_|pzL-#LDB?G;}C&s?UK&LaY-v#mEZvyuZoH;$`WcwD6t}jT9kwMQg!!1rPzC$*n36s@tHMC5AT&>sA4$ z%W6=TBdd|BTQwP_DGQD6@^ic>8BXk8a|L)f9XK%~Za78bG##XDEJMP$JxRT_E2dPNOJ zv^`Ze_26)76%o;7s<0eylziCZ(q4tbeqk)roeF-WdmWHqgHvHAlhn(9Ac$$)=cx?F2d~eK zMK8LxzV!XfV0|u=cxd02w=$-yxyOc%_Z%q7dG)6Y9~R{9r!{Zew+?V*Vw2WB{pj>( zuT_g9V=Dr3qh2$%;o__9@AciBpJn{B%YU62UN&ECTpI2h6$hTL`TVJD z{nE@_TdX88h2YAOudgU0L&UFI-^in0)m9vt5}z8Rx!3 zx?THhUE2~x`DoVJp3ENP+z&{G>x#`qCfNLfoIca0oQx~onOO+9XfkJlOD1y$_|#-J zfy*W{vOWLh{=z|`wfGS7#n1Ym%_9f<-|P>ZX&G6*w)o;~;t}iQVtcmu_DSZ~(l-jl z1+b@N>i36F%p|I$a(d^nZ_bA+^E&5Fn|9wm`Z^o16%4&nYRX!`CJ@trH{j~p(OXHTrNkiqri3g_DSr66Z);C8@sNJx;`pCHNNzl`#{UV(H(gIvy(p( me=qfq4>yLkY)IsKvO6=wWnU_e%*1))&*rPH^}JtosQVuj7inAo literal 0 HcmV?d00001 diff --git a/src/components/common-base/dialog/mobile-dialog/imgs/icon_close.png b/src/components/common-base/dialog/mobile-dialog/imgs/icon_close.png new file mode 100644 index 0000000000000000000000000000000000000000..8c03227f8e3fb819459d37129e783d76deab34c9 GIT binary patch literal 1039 zcmeAS@N?(olHy`uVBq!ia0vp^njp-<3?%38`*4JTfiW_`C&U%V{f`&?{P`0o4ux-e*7570FprP;>C-yva-s`%8H5#AX!~qT~$@}=+UEx4UnAo_u_=JR{ zq~wf@%*?Fp?3|pO+`PPkg2JMr;@bL#hK9z*rl#iRmX_Am_6{KE?CR?7?&<02?d|QG zIC1%kmFLgjfAIKU#oA++fVMLxdAqw5nep*P0NKwxT^vI!PEVcsI-1c@pPB|JNIVkJ^$Zt{>-~;`P}w1pA%E2MD&+EUxKW< zZ%Ob@3egu{lk&}`TWo_))uWkS6JClw4GCr!-&gs-^!@2&>LDgK_7^{83wl@M;@z*DXJo6N=+yl;ZRxF>td&QV z-lqA+Ns4+T*Zny@vspCYQr51gV#SQ7P8sz1Dh&*`*|$C(VLm$L7SnRQG#r)~1BhS!-< z65YKc@XEyG8t;$q{r2o`;&(Ov v(~QpjUtAZP%{Z)HuD@M9adVt*%rCZ<%_l^4V*DI{(a+%N>gTe~DWM4f2%ROY literal 0 HcmV?d00001 diff --git a/src/components/common-base/dialog/mobile-dialog/mobile-dialog.vue b/src/components/common-base/dialog/mobile-dialog/mobile-dialog.vue new file mode 100644 index 0000000..0dec16f --- /dev/null +++ b/src/components/common-base/dialog/mobile-dialog/mobile-dialog.vue @@ -0,0 +1,270 @@ + + + + + diff --git a/src/components/common-base/dialog/pc-dialog/pc-dialog.vue b/src/components/common-base/dialog/pc-dialog/pc-dialog.vue new file mode 100644 index 0000000..793fcf2 --- /dev/null +++ b/src/components/common-base/dialog/pc-dialog/pc-dialog.vue @@ -0,0 +1,498 @@ + + + + + + diff --git a/src/components/common-base/dialog/pc-dialog/types.ts b/src/components/common-base/dialog/pc-dialog/types.ts new file mode 100644 index 0000000..bc56ced --- /dev/null +++ b/src/components/common-base/dialog/pc-dialog/types.ts @@ -0,0 +1,4 @@ +export interface DialogInstance { + /** 重置位置 */ + resetPosition(): void; +} diff --git a/src/components/common-base/dialog/use-dialog-tips.ts b/src/components/common-base/dialog/use-dialog-tips.ts new file mode 100644 index 0000000..b3366fe --- /dev/null +++ b/src/components/common-base/dialog/use-dialog-tips.ts @@ -0,0 +1,74 @@ +import { inject, InjectionKey, onBeforeUnmount, provide, ref } from 'vue'; + +export interface DialogTipsInstance { + /** 显示弹层的提示 */ + showDialogTips: (tips: string) => void; +} + +export const DIALOG_TIPS_PROVIDE_KEY: InjectionKey = + Symbol('DIALOG_TIPS_PROVIDE_KEY'); + +/** + * 弹层提示 hooks(用于弹层中) + */ +export const useDialogTips = () => { + let timer: number | undefined; + + const dialogTips = ref(); + + /** 显示弹层提示 */ + function showDialogTips(tips: string) { + dialogTips.value = tips; + setHiddenTimer(); + } + + /** 设置隐藏定时器 */ + function setHiddenTimer() { + clearHiddenTimer(); + + timer = window.setTimeout(() => { + dialogTips.value = undefined; + clearHiddenTimer(); + }, 2000); + } + + /** 清楚隐藏定时器 */ + function clearHiddenTimer() { + if (timer) { + clearTimeout(timer); + timer = undefined; + } + } + + onBeforeUnmount(() => { + clearHiddenTimer(); + }); + + const dialogTipsInstance: DialogTipsInstance = { + showDialogTips, + }; + + provide(DIALOG_TIPS_PROVIDE_KEY, dialogTipsInstance); + + return { + dialogTips, + showDialogTips, + dialogTipsInstance, + }; +}; + +/** + * 弹层提示 hook + */ +export const useDialogTipsUtils = () => { + const dialogTipsContext = inject(DIALOG_TIPS_PROVIDE_KEY); + + /** 显示弹层提示 */ + function showDialogTips(tips: string) { + dialogTipsContext && dialogTipsContext.showDialogTips(tips); + } + + return { + showDialogTips, + }; +}; diff --git a/src/components/common-base/form/form-area-picker/mobile-form-area-picker.vue b/src/components/common-base/form/form-area-picker/mobile-form-area-picker.vue new file mode 100644 index 0000000..6302e60 --- /dev/null +++ b/src/components/common-base/form/form-area-picker/mobile-form-area-picker.vue @@ -0,0 +1,160 @@ + + + + + + diff --git a/src/components/common-base/form/form-area-picker/pc-form-area-picker.vue b/src/components/common-base/form/form-area-picker/pc-form-area-picker.vue new file mode 100644 index 0000000..263a467 --- /dev/null +++ b/src/components/common-base/form/form-area-picker/pc-form-area-picker.vue @@ -0,0 +1,47 @@ + + + + + + diff --git a/src/components/common-base/form/form-area-picker/use-form-area-picker.ts b/src/components/common-base/form/form-area-picker/use-form-area-picker.ts new file mode 100644 index 0000000..09a14ed --- /dev/null +++ b/src/components/common-base/form/form-area-picker/use-form-area-picker.ts @@ -0,0 +1,144 @@ +import { computed, ComputedRef, onBeforeMount, ref, unref, watch } from 'vue'; +import { PropUtils, VueProps } from '@/assets/utils/vue-utils/props-utils'; +import { emitFunc, VueEmit } from '@/assets/utils/vue-utils/emit-utils'; +import type { AreaData, AreaPickerComponent } from '@/plugins/polyv-ui/types'; +import { formCommonProps, useFormCommonValidate } from '../hooks/use-form-common'; +import { isMobile } from '@/assets/utils/browser'; +import { getSelectData, isSelectFinish } from '@/plugins/polyv-ui/area-utils'; +import { useCommonStore } from '@/store/use-common-store'; + +export const formAreaPickerProps = () => ({ + ...formCommonProps(), + /** 绑定值 */ + value: PropUtils.array(), + /** 占位文本 */ + placeholder: PropUtils.string, +}); + +export const formAreaPickerEmit = () => ({ + input: emitFunc(), +}); + +export interface FormAreaPickerInstance { + /** 是否已选择完成 */ + isFinish: ComputedRef; +} + +export const useFormAreaPicker = (options: { + AreaPicker: AreaPickerComponent; + props: VueProps; + emit: VueEmit; +}) => { + const commonStore = useCommonStore(); + const { AreaPicker, props, emit } = options; + + const { formItemIsError, blurToValidateItem, focusToRemoveError } = useFormCommonValidate({ + props, + }); + + const innerValue = ref([]); + + const inputPlaceholder = computed(() => props.placeholder); + + /** 是否已选择完成 */ + const isFinish = computed(() => { + return isSelectFinish(props.value, commonStore.areaData); + }); + + const innerIsFinish = computed(() => { + return isSelectFinish(innerValue.value, commonStore.areaData); + }); + + const inputValue = computed(() => { + let data: AreaData[] = []; + + if (innerIsFinish.value) { + data = getSelectData(innerValue.value, commonStore.areaData); + } else if (isSelectFinish(props.value, commonStore.areaData)) { + data = getSelectData(props.value, commonStore.areaData); + } + + return data.map(item => item.name).join('/'); + }); + + watch( + () => unref(innerValue), + () => { + if (!isMobile) { + emit('input', unref(innerValue)); + } + }, + ); + + const instance: FormAreaPickerInstance = { + isFinish, + }; + + const pickerVisible = ref(false); + + const refreshKey = ref(1); + + function openPicker() { + if (!isFinish.value) { + refreshKey.value += 1; + } + pickerVisible.value = true; + onShowPicker(); + } + + function closePicker() { + if (!innerIsFinish.value) { + innerValue.value = props.value; + } + pickerVisible.value = false; + onHiddenPicker(); + } + + /** 处理隐藏弹层 */ + function onHiddenPicker() { + blurToValidateItem(); + } + + /** 处理显示弹层 */ + function onShowPicker() { + focusToRemoveError(); + } + + function onClickConfirm() { + if (!unref(innerIsFinish)) { + return; + } + emit('input', unref(innerValue)); + closePicker(); + } + + onBeforeMount(async () => { + if (commonStore.areaData.length === 0) { + const areaData = await AreaPicker.loadAreaDataUrl(); + commonStore.$patch({ + areaData, + }); + } + }); + + return { + innerValue, + isFinish, + innerIsFinish, + instance, + inputValue, + inputPlaceholder, + refreshKey, + + formItemIsError, + blurToValidateItem, + focusToRemoveError, + + pickerVisible, + openPicker, + closePicker, + onHiddenPicker, + onShowPicker, + onClickConfirm, + }; +}; diff --git a/src/components/common-base/form/form-checkbox/mobile-form-checkbox.vue b/src/components/common-base/form/form-checkbox/mobile-form-checkbox.vue new file mode 100644 index 0000000..45265f5 --- /dev/null +++ b/src/components/common-base/form/form-checkbox/mobile-form-checkbox.vue @@ -0,0 +1,73 @@ + + + + + + diff --git a/src/components/common-base/form/form-checkbox/pc-form-checkbox.vue b/src/components/common-base/form/form-checkbox/pc-form-checkbox.vue new file mode 100644 index 0000000..79dbb7b --- /dev/null +++ b/src/components/common-base/form/form-checkbox/pc-form-checkbox.vue @@ -0,0 +1,78 @@ + + + + + + diff --git a/src/components/common-base/form/form-checkbox/use-form-checkbox.ts b/src/components/common-base/form/form-checkbox/use-form-checkbox.ts new file mode 100644 index 0000000..f729d37 --- /dev/null +++ b/src/components/common-base/form/form-checkbox/use-form-checkbox.ts @@ -0,0 +1,34 @@ +import { emitFunc, updateModelEmit, VueEmit } from '@/assets/utils/vue-utils/emit-utils'; +import { PropUtils, VueProps } from '@/assets/utils/vue-utils/props-utils'; +import { computed, unref } from 'vue'; + +export const formCheckboxProps = () => ({ + /** 是否选中,支持.sync */ + checked: PropUtils.bool.def(false), +}); + +export const formCheckboxEmits = () => ({ + ...updateModelEmit<'checked', boolean>('checked'), + change: emitFunc(), +}); + +export const useFormCheckbox = (options: { + props: VueProps; + emit: VueEmit; +}) => { + const { props, emit } = options; + + /** 是否已选中 */ + const isChecked = computed(() => props.checked); + + /** 处理点击复选框 */ + function onClickCheckbox(): void { + emit('update:checked', !unref(isChecked)); + emit('change', !unref(isChecked)); + } + + return { + isChecked, + onClickCheckbox, + }; +}; diff --git a/src/components/common-base/form/form-image-verify-input/mobile-form-image-verify-input.vue b/src/components/common-base/form/form-image-verify-input/mobile-form-image-verify-input.vue new file mode 100644 index 0000000..be1481b --- /dev/null +++ b/src/components/common-base/form/form-image-verify-input/mobile-form-image-verify-input.vue @@ -0,0 +1,53 @@ + + + + + + diff --git a/src/components/common-base/form/form-image-verify-input/pc-form-image-verify-input.vue b/src/components/common-base/form/form-image-verify-input/pc-form-image-verify-input.vue new file mode 100644 index 0000000..f697c54 --- /dev/null +++ b/src/components/common-base/form/form-image-verify-input/pc-form-image-verify-input.vue @@ -0,0 +1,53 @@ + + + + + + diff --git a/src/components/common-base/form/form-image-verify-input/type.ts b/src/components/common-base/form/form-image-verify-input/type.ts new file mode 100644 index 0000000..6c64277 --- /dev/null +++ b/src/components/common-base/form/form-image-verify-input/type.ts @@ -0,0 +1,4 @@ +export interface ImageVerifyInputInstance { + /** 刷新图片验证码 */ + refreshVerifyImage(resetVal?: boolean): Promise; +} diff --git a/src/components/common-base/form/form-image-verify-input/use-image-verify-input.ts b/src/components/common-base/form/form-image-verify-input/use-image-verify-input.ts new file mode 100644 index 0000000..00f8edc --- /dev/null +++ b/src/components/common-base/form/form-image-verify-input/use-image-verify-input.ts @@ -0,0 +1,75 @@ +import { translate } from '@/assets/lang'; +import { emitFunc, updateModelEmit, VueEmit } from '@/assets/utils/vue-utils/emit-utils'; +import { PropUtils, VueProps } from '@/assets/utils/vue-utils/props-utils'; +import { getWatchCore } from '@/core/watch-sdk'; +import { computed, onMounted, ref, watch } from 'vue'; +import { InputValueType } from '../form-input/hooks/use-form-input'; +import { ImageVerifyInputInstance } from './type'; + +export const formImageVerifyInputProps = () => ({ + // 验证码绑定值 + value: PropUtils.string.def(''), + // 图片 id,支持 .sync + imageId: PropUtils.string.def(''), +}); + +export const formImageVerifyInputEmits = () => ({ + ...updateModelEmit<'imageId', string>('imageId'), + input: emitFunc(), +}); + +export const useImageVerifyInput = (options: { + props: VueProps; + emit: VueEmit; +}) => { + const { props, emit } = options; + + const inputPlaceholder = computed(() => { + return translate('form.placeholder.imageVerify'); + }); + + /** 验证码图片地址 */ + const imageUrl = ref(''); + + /** 刷新验证码图片 */ + async function refreshVerifyImage(resetVal = false) { + const watchCore = getWatchCore(); + const data = await watchCore.sms.generateImageVerifyCode(); + imageUrl.value = data.url; + emit('update:imageId', data.imageId); + + if (resetVal) { + emit('input', ''); + } + } + + onMounted(() => { + refreshVerifyImage(); + }); + + watch( + () => props.imageId, + () => { + if (props.imageId === '') { + refreshVerifyImage(); + } + }, + ); + + /** 处理输入框输入 */ + function onInputChange(val: InputValueType): void { + emit('input', `${val}`); + } + + const instance: ImageVerifyInputInstance = { + refreshVerifyImage, + }; + + return { + inputPlaceholder, + imageUrl, + refreshVerifyImage, + onInputChange, + instance, + }; +}; diff --git a/src/components/common-base/form/form-input/hooks/use-form-input.ts b/src/components/common-base/form/form-input/hooks/use-form-input.ts new file mode 100644 index 0000000..252b251 --- /dev/null +++ b/src/components/common-base/form/form-input/hooks/use-form-input.ts @@ -0,0 +1,152 @@ +/** + * @file 表单组件输入框 hook + */ + +import { useVue } from '@/hooks/core/use-vue'; +import { emitFunc, VueEmit } from '@/assets/utils/vue-utils/emit-utils'; +import { PropUtils, VueProps } from '@/assets/utils/vue-utils/props-utils'; +import { + formCommonProps, + useFormCommon, + useFormCommonValidate, +} from '@/components/common-base/form/hooks/use-form-common'; +import { computed, ref, unref } from 'vue'; +import { FormInputInstance } from '../types/form-input-types'; + +export type InputValueType = string | number; + +export const formInputProps = () => ({ + ...formCommonProps(), + /** 禁用输入 */ + disabled: PropUtils.bool.def(false), + /** 绑定值 */ + value: PropUtils.oneOfType([String, Number]).def(''), + /** 输入框原生类型 */ + type: PropUtils.string.def('text'), + /** 输入框占位 */ + placeholder: PropUtils.string.def(''), + /** 最大长度 */ + maxlength: PropUtils.number.def(Infinity), + /** 显示字数限制,默认:false */ + showWordLimit: PropUtils.bool.def(false), + /** 尾部文字 */ + suffixText: PropUtils.string.def(''), +}); + +export const formInputEmits = () => ({ + input: emitFunc(), + /** 失焦 */ + blur: emitFunc(), + /** 聚焦 */ + focus: emitFunc(), + /** 回车事件 */ + enter: emitFunc(), +}); + +export const useFormInput = (options: { + props: VueProps; + emit: VueEmit; + classPrefix: string; +}) => { + const { emit, props, classPrefix } = options; + + const { blurToValidateItem, focusToRemoveError, formItemIsError } = useFormCommonValidate({ + props, + }); + + const { commonClassNames } = useFormCommon({ + props, + classPrefix, + }); + + /** 实例 */ + const inputRef = ref(); + + /** 输入框 className */ + const inputClassNames = computed(() => { + const classNames = [...unref(commonClassNames)]; + + if (unref(formItemIsError)) { + classNames.push(`${classPrefix}--error`); + } + + return classNames; + }); + + /** 字数限制文案 */ + const wordLimitText = computed(() => { + if (!props.showWordLimit) { + return ''; + } + + const length = `${props.value ?? ''}`.length; + if (props.maxlength === Infinity) { + return `${length}`; + } + + return `${length}/${props.maxlength}`; + }); + + /** 处理输入框输入事件 */ + function onInputChanged(event: Event) { + const target = event.target as HTMLInputElement; + let value = target.value; + if (props.type === 'number') { + value = value.slice(0, props.maxlength); + target.value = value; + } + emit('input', value); + } + + /** 处理输入框失焦事件 */ + function onInputBlur() { + blurToValidateItem(); + emit('blur', props.value); + } + + /** 处理输入框聚焦事件 */ + function onInputFocus() { + focusToRemoveError(); + emit('focus', props.value); + } + + /** 处理输入框回车事件 */ + function onInputEnter() { + emit('enter', props.value); + } + + const { getInstance } = useVue(); + + /** 强制更新 */ + function forceUpdate(): void { + const instance = getInstance(); + instance?.$forceUpdate(); + } + + /** 聚焦输入框 */ + function focusInput() { + inputRef.value?.focus(); + } + + /** 失焦输入框 */ + function blurInput() { + inputRef.value?.blur(); + } + + const formInstance: FormInputInstance = { + forceUpdate, + focusInput, + blurInput, + }; + + return { + inputRef, + inputClassNames, + onInputChanged, + onInputBlur, + onInputFocus, + onInputEnter, + formInstance, + wordLimitText, + }; +}; diff --git a/src/components/common-base/form/form-input/mobile-form-input.vue b/src/components/common-base/form/form-input/mobile-form-input.vue new file mode 100644 index 0000000..527f3e9 --- /dev/null +++ b/src/components/common-base/form/form-input/mobile-form-input.vue @@ -0,0 +1,200 @@ + + + + + + diff --git a/src/components/common-base/form/form-input/pc-form-input.vue b/src/components/common-base/form/form-input/pc-form-input.vue new file mode 100644 index 0000000..9729b1c --- /dev/null +++ b/src/components/common-base/form/form-input/pc-form-input.vue @@ -0,0 +1,127 @@ + + + + + + diff --git a/src/components/common-base/form/form-input/types/form-input-types.ts b/src/components/common-base/form/form-input/types/form-input-types.ts new file mode 100644 index 0000000..b6fb46a --- /dev/null +++ b/src/components/common-base/form/form-input/types/form-input-types.ts @@ -0,0 +1,11 @@ +/** + * 实例 + */ +export interface FormInputInstance { + /** 强制更新 */ + forceUpdate(): void; + /** 聚焦输入框 */ + focusInput(): void; + /** 失焦输入框 */ + blurInput(): void; +} diff --git a/src/components/common-base/form/form-item.vue b/src/components/common-base/form/form-item.vue new file mode 100644 index 0000000..181c61f --- /dev/null +++ b/src/components/common-base/form/form-item.vue @@ -0,0 +1,133 @@ + + + + + + diff --git a/src/components/common-base/form/form-number-input/mobile-form-number-input.vue b/src/components/common-base/form/form-number-input/mobile-form-number-input.vue new file mode 100644 index 0000000..c5e7662 --- /dev/null +++ b/src/components/common-base/form/form-number-input/mobile-form-number-input.vue @@ -0,0 +1,40 @@ + + + + diff --git a/src/components/common-base/form/form-number-input/pc-form-number-input.vue b/src/components/common-base/form/form-number-input/pc-form-number-input.vue new file mode 100644 index 0000000..774209c --- /dev/null +++ b/src/components/common-base/form/form-number-input/pc-form-number-input.vue @@ -0,0 +1,33 @@ + + + + diff --git a/src/components/common-base/form/form-number-input/use-form-number-input.ts b/src/components/common-base/form/form-number-input/use-form-number-input.ts new file mode 100644 index 0000000..2e1b8b6 --- /dev/null +++ b/src/components/common-base/form/form-number-input/use-form-number-input.ts @@ -0,0 +1,76 @@ +import { emitFunc, VueEmit } from '@/assets/utils/vue-utils/emit-utils'; +import { PropUtils, useProps, VueProps } from '@/assets/utils/vue-utils/props-utils'; +import { ref, unref } from 'vue'; +import { InputValueType } from '../form-input/hooks/use-form-input'; +import { FormInputInstance } from '../form-input/types/form-input-types'; +import { formCommonProps } from '../hooks/use-form-common'; + +export type NumberInputValueType = string | number; + +export const formNumberInputProps = () => ({ + ...formCommonProps(), + // 绑定值 + value: PropUtils.oneOfType([String, Number]).def(''), + // 最大值 + max: PropUtils.number.def(Infinity), + // 最小值 + min: PropUtils.number.def(-Infinity), +}); + +export const formNumberInputEmits = () => ({ + input: emitFunc(), +}); + +export const useFormNumberInput = (options: { + props: VueProps; + emit: VueEmit; +}) => { + const { props, emit } = options; + + const { value } = useProps(props); + + const inputRef = ref(); + + /** + * 格式化值 + */ + function formatValue(val: string | number): NumberInputValueType { + if (val === '') { + return val; + } + return Number(val); + } + + /** + * 检查最大值和最小值 + */ + function checkMaxMin(val: NumberInputValueType): NumberInputValueType { + if (val === '') { + return val; + } + if (val > props.max) { + return props.max; + } + if (val < props.min) { + return props.min; + } + return val; + } + + function onInputChange(val: InputValueType): void { + let newVal = formatValue(val); + newVal = checkMaxMin(newVal); + emit('input', newVal); + + const inputInstance = unref(inputRef); + if (inputInstance) { + inputInstance.forceUpdate(); + } + } + + return { + inputRef, + value, + onInputChange, + }; +}; diff --git a/src/components/common-base/form/form-phone-input/mobile-form-phone-input.vue b/src/components/common-base/form/form-phone-input/mobile-form-phone-input.vue new file mode 100644 index 0000000..38981ab --- /dev/null +++ b/src/components/common-base/form/form-phone-input/mobile-form-phone-input.vue @@ -0,0 +1,103 @@ + + + + + + diff --git a/src/components/common-base/form/form-phone-input/pc-form-phone-input.vue b/src/components/common-base/form/form-phone-input/pc-form-phone-input.vue new file mode 100644 index 0000000..ae4d530 --- /dev/null +++ b/src/components/common-base/form/form-phone-input/pc-form-phone-input.vue @@ -0,0 +1,101 @@ + + + + + + diff --git a/src/components/common-base/form/form-phone-input/use-form-phone-input.ts b/src/components/common-base/form/form-phone-input/use-form-phone-input.ts new file mode 100644 index 0000000..ee90525 --- /dev/null +++ b/src/components/common-base/form/form-phone-input/use-form-phone-input.ts @@ -0,0 +1,69 @@ +/** + * @file 手机号码输入框 hook + */ + +import { translate } from '@/assets/lang'; +import { formCommonProps, useFormCommonValidate } from '../hooks/use-form-common'; +import { computed } from 'vue'; +import { PropUtils, VueProps } from '@/assets/utils/vue-utils/props-utils'; +import { emitFunc, updateModelEmit, VueEmit } from '@/assets/utils/vue-utils/emit-utils'; +import { InputValueType } from '../form-input/hooks/use-form-input'; + +export const formPhoneInputProps = () => ({ + ...formCommonProps(), + // 绑定值 + value: PropUtils.string, + // 区号,支持.sync + areaCode: PropUtils.string.def('+86'), + // 占位符 + placeholder: PropUtils.string, +}); + +export const formPhoneInputEmits = () => ({ + input: emitFunc(), + blur: emitFunc(), + ...updateModelEmit<'areaCode', string>('areaCode'), +}); + +export const useFormPhoneInput = (options: { + props: VueProps; + emit: VueEmit; + closePhoneCode?: () => void; +}) => { + const { props, emit, closePhoneCode } = options; + const { validateCurrentFormItem, blurToValidateItem } = useFormCommonValidate({ + props, + }); + + /** 输入框占位文本 */ + const inputPlaceholder = computed(() => { + return props.placeholder || translate('form.placeholder.phoneInput'); + }); + + /** 处理表单输入框修改 */ + function onFormInputChange(val: InputValueType) { + emit('input', `${val}`); + } + + /** 处理表单输入框失焦 */ + async function onFormInputBlur() { + try { + await blurToValidateItem(); + emit('blur', props.value); + } catch (error) {} + } + + /** 处理区号选择 */ + function onPhoneCodeInput(code: string) { + emit('update:areaCode', code); + validateCurrentFormItem(); + closePhoneCode && closePhoneCode(); + } + + return { + inputPlaceholder, + onFormInputChange, + onFormInputBlur, + onPhoneCodeInput, + }; +}; diff --git a/src/components/common-base/form/form-protocol/mobile-form-protocol.vue b/src/components/common-base/form/form-protocol/mobile-form-protocol.vue new file mode 100644 index 0000000..d20b0e4 --- /dev/null +++ b/src/components/common-base/form/form-protocol/mobile-form-protocol.vue @@ -0,0 +1,44 @@ + + + + + + diff --git a/src/components/common-base/form/form-protocol/pc-form-protocol.vue b/src/components/common-base/form/form-protocol/pc-form-protocol.vue new file mode 100644 index 0000000..b13bba3 --- /dev/null +++ b/src/components/common-base/form/form-protocol/pc-form-protocol.vue @@ -0,0 +1,48 @@ + + + + + + diff --git a/src/components/common-base/form/form-protocol/use-form-protocol.ts b/src/components/common-base/form/form-protocol/use-form-protocol.ts new file mode 100644 index 0000000..9cfa505 --- /dev/null +++ b/src/components/common-base/form/form-protocol/use-form-protocol.ts @@ -0,0 +1,35 @@ +import { emitFunc, VueEmit } from '@/assets/utils/vue-utils/emit-utils'; +import { PropUtils, VueProps } from '@/assets/utils/vue-utils/props-utils'; +import { computed } from 'vue'; + +export const formProtocolProps = () => ({ + /** 是否选中 */ + value: PropUtils.bool.def(false), + /** 协议内容 */ + content: PropUtils.string, +}); + +export const formProtocolEmits = () => ({ + input: emitFunc(), +}); + +export const useFormProtocol = (options: { + props: VueProps; + emit: VueEmit; +}) => { + const { props, emit } = options; + + const checkboxChecked = computed(() => props.value); + + const contentHtml = computed(() => props.content); + + function onCheckboxChange(checked: boolean) { + emit('input', checked); + } + + return { + checkboxChecked, + contentHtml, + onCheckboxChange, + }; +}; diff --git a/src/components/common-base/form/form-select/mobile-form-select.vue b/src/components/common-base/form/form-select/mobile-form-select.vue new file mode 100644 index 0000000..59cb73a --- /dev/null +++ b/src/components/common-base/form/form-select/mobile-form-select.vue @@ -0,0 +1,164 @@ + + + + + + diff --git a/src/components/common-base/form/form-select/pc-form-select.vue b/src/components/common-base/form/form-select/pc-form-select.vue new file mode 100644 index 0000000..0e12fe7 --- /dev/null +++ b/src/components/common-base/form/form-select/pc-form-select.vue @@ -0,0 +1,168 @@ + + + + + + diff --git a/src/components/common-base/form/form-select/types/form-select-types.ts b/src/components/common-base/form/form-select/types/form-select-types.ts new file mode 100644 index 0000000..d3eb3f7 --- /dev/null +++ b/src/components/common-base/form/form-select/types/form-select-types.ts @@ -0,0 +1,8 @@ +export type SelectValueType = string | number; + +export interface SelectOptionItem { + /** 显示的文案 */ + label: string; + /** 绑定值 */ + value: SelectValueType; +} diff --git a/src/components/common-base/form/form-select/use-form-select.ts b/src/components/common-base/form/form-select/use-form-select.ts new file mode 100644 index 0000000..741a90a --- /dev/null +++ b/src/components/common-base/form/form-select/use-form-select.ts @@ -0,0 +1,201 @@ +import { translate } from '@/assets/lang'; +import { isArray } from '@/assets/utils/array'; +import { emitFunc, VueEmit } from '@/assets/utils/vue-utils/emit-utils'; +import { PropUtils, useProps, VueProps } from '@/assets/utils/vue-utils/props-utils'; +import { computed, ref } from 'vue'; +import { SelectOptionItem, SelectValueType } from './types/form-select-types'; +import { formCommonProps, useFormCommonValidate } from '../hooks/use-form-common'; + +export const formSelectProps = () => ({ + ...formCommonProps(), + // 绑定值 + value: PropUtils.oneOfType([String, Number, Array]).def(''), + // 输入框标题 + title: PropUtils.string, + // 占位符 + placeholder: PropUtils.string, + // 选项列表 + options: PropUtils.array(), + // 是否多选 + multiple: PropUtils.bool.def(false), +}); + +export const formSelectEmits = () => ({ + input: emitFunc(), +}); + +export const useFormSelect = (options: { + props: VueProps; + emit: VueEmit; + closeOptions?: () => void; +}) => { + const { props, emit, closeOptions } = options; + const { formItemIsError, blurToValidateItem, focusToRemoveError } = useFormCommonValidate({ + props, + }); + + const { title, multiple } = useProps(props); + + /** 输入框的 value 值 */ + const inputValue = computed(() => { + let valText = ''; + + if (props.multiple && isArray(props.value) && props.value.length) { + return `${translate('form.select.multiPrefix')}${props.value.length}${translate( + 'form.select.multiSuffix', + )}`; + } + + if (!props.multiple) { + const index = props.options.findIndex(option => option.value === props.value); + if (index !== -1) { + valText = props.options[index].label; + } + } + + return valText; + }); + + /** 输入框占位符 */ + const inputPlaceholder = computed(() => props.placeholder); + + /** 选项列表 */ + const optionList = computed(() => { + return props.options; + }); + + function onClickOption(option: SelectOptionItem): void { + if (props.multiple && isArray(props.value)) { + if (props.value.includes(option.value)) { + emit( + 'input', + props.value.filter(item => item !== option.value), + ); + } else { + emit('input', [...props.value, option.value]); + } + } + + if (!props.multiple) { + if (option.value !== props.value) { + emit('input', option.value); + } + + if (closeOptions) { + closeOptions(); + } + } + } + + /** 是否已选中 */ + function isSelectedOption(value: SelectValueType): boolean { + if (props.multiple && isArray(props.value)) { + return props.value.includes(value); + } + if (!props.multiple) { + return value === props.value; + } + return false; + } + + return { + multiple, + title, + inputValue, + inputPlaceholder, + optionList, + onClickOption, + isSelectedOption, + + formItemIsError, + blurToValidateItem, + focusToRemoveError, + }; +}; + +/** + * 移动端下的 select + */ +export const useFormSelectMobile = (options: { + props: VueProps; + emit: VueEmit; +}) => { + const { props, emit } = options; + + /** 选项是否显示 */ + const optionVisible = ref(false); + + /** 打开选项 */ + function openOption() { + optionVisible.value = true; + } + + /** 关闭选项 */ + function closeOption() { + optionVisible.value = false; + } + + /** 已选的 value */ + const selectValue = ref(''); + + /** 处理点击选项 */ + function onClickOption(option: SelectOptionItem): void { + if (!props.multiple) { + selectValue.value = option.value; + return; + } + + if (!isArray(selectValue.value)) { + selectValue.value = []; + } + + if (selectValue.value.includes(option.value)) { + selectValue.value = selectValue.value.filter(item => item !== option.value); + } else { + selectValue.value = [...selectValue.value, option.value]; + } + } + + /** 处理点击确认 */ + function onClickConfirm() { + if (!props.multiple) { + if (!selectValue.value) { + return; + } + + if (selectValue.value !== props.value) { + emit('input', selectValue.value); + closeOption(); + } + } + + if (props.multiple) { + if (!isArray(selectValue.value)) { + selectValue.value = []; + } + + emit('input', selectValue.value); + closeOption(); + } + } + + /** 是否已选中 */ + function isSelectedOption(value: SelectValueType): boolean { + if (props.multiple && isArray(selectValue.value)) { + return selectValue.value.includes(value); + } + if (!props.multiple) { + return value === selectValue.value; + } + return false; + } + + return { + optionVisible, + openOption, + closeOption, + onClickOption, + onClickConfirm, + isSelectedOption, + }; +}; diff --git a/src/components/common-base/form/form-slide-verify/mobile-form-slide-verify.vue b/src/components/common-base/form/form-slide-verify/mobile-form-slide-verify.vue new file mode 100644 index 0000000..955b6f2 --- /dev/null +++ b/src/components/common-base/form/form-slide-verify/mobile-form-slide-verify.vue @@ -0,0 +1,61 @@ + + + + + + diff --git a/src/components/common-base/form/form-slide-verify/pc-form-slide-verify.vue b/src/components/common-base/form/form-slide-verify/pc-form-slide-verify.vue new file mode 100644 index 0000000..be24ba5 --- /dev/null +++ b/src/components/common-base/form/form-slide-verify/pc-form-slide-verify.vue @@ -0,0 +1,54 @@ + + + + + + diff --git a/src/components/common-base/form/form-slide-verify/use-slide-verify.ts b/src/components/common-base/form/form-slide-verify/use-slide-verify.ts new file mode 100644 index 0000000..839089d --- /dev/null +++ b/src/components/common-base/form/form-slide-verify/use-slide-verify.ts @@ -0,0 +1,100 @@ +/** + * @file 滑块验证码 hook + */ + +import { loadAliAwsc } from '@/plugins/external-lib-loaders/load-ali-awsc'; +import { randomStr } from '@utils-ts/string'; +import { onMounted } from 'vue'; +import { useLangStore } from '@/store/use-lang-store'; +import { LangType } from '@/assets/lang/lang-enum'; +import { PropUtils, VueProps } from '@/assets/utils/vue-utils/props-utils'; +import { emitFunc, VueEmit } from '@/assets/utils/vue-utils/emit-utils'; +import { getWatchCore } from '@/core/watch-sdk'; + +export interface SlideVerifyData { + sessionId: string; + sig: string; + token: string; + scene: string; +} + +export const formSlideVerifyProps = () => ({ + /** 绑定的验证值 */ + value: PropUtils.objectType(), +}); + +export const formSlideVerifyEmits = () => ({ + input: emitFunc(), + 'verify-success': emitFunc(), + 'verify-fail': emitFunc(), + 'verify-error': emitFunc(), +}); + +export const useSlideVerify = (options: { + props: VueProps; + emit: VueEmit; +}) => { + const { emit } = options; + const langStore = useLangStore(); + + const id = randomStr(8); + const scene = 'nc_register_h5'; + + // 语言配置 + const langConfig = { + cn: { + SLIDE: '按住滑块,拖动到最右', + }, + }; + + /** 初始化验证码 */ + async function initSlideVerify() { + const AWSC = await loadAliAwsc(); + + // eslint-disable-next-line @typescript-eslint/no-explicit-any + AWSC.use('nc', (state: unknown, module: any) => { + const watchCore = getWatchCore(); + module.init({ + // 应用类型标识。它和使用场景标识(scene字段)一起决定了滑动验证的业务场景与后端对应使用的策略模型。您可以在阿里云验证码控制台的配置管理页签找到对应的appkey字段值,请务必正确填写。 + appkey: watchCore.utils.getAliSliderAppKey(), + // 使用场景标识。它和应用类型标识(appkey字段)一起决定了滑动验证的业务场景与后端对应使用的策略模型。您可以在阿里云验证码控制台的配置管理页签找到对应的scene值,请务必正确填写。 + scene, + // 声明滑动验证需要渲染的目标ID。 + renderTo: `#${id}`, + // 配置语言 + language: langStore.currentLang === LangType.Chinese ? 'cn' : 'en', + // 更新多语言配置 + upLang: langConfig, + // 前端滑动验证通过时会触发该回调参数。您可以在该回调参数中将会话ID(sessionId)、签名串(sig)、请求唯一标识(token)字段记录下来,随业务请求一同发送至您的服务端调用验签。 + success: (data: SlideVerifyData) => { + const slideData = { + sessionId: data.sessionId, + sig: data.sig, + token: data.token, + scene, + }; + + emit('input', slideData); + emit('verify-success', slideData); + }, + // 滑动验证失败时触发该回调参数。 + fail: (failCode: string) => { + emit('verify-fail', failCode); + }, + // 验证码加载出现异常时触发该回调参数。 + error: (errorCode: string) => { + emit('verify-error', errorCode); + }, + }); + }); + } + + onMounted(() => { + initSlideVerify(); + }); + + return { + id, + initSlideVerify, + }; +}; diff --git a/src/components/common-base/form/form-sms-verify-input/mobile-form-sms-verify-input.vue b/src/components/common-base/form/form-sms-verify-input/mobile-form-sms-verify-input.vue new file mode 100644 index 0000000..2bf875f --- /dev/null +++ b/src/components/common-base/form/form-sms-verify-input/mobile-form-sms-verify-input.vue @@ -0,0 +1,83 @@ + + + + + + diff --git a/src/components/common-base/form/form-sms-verify-input/pc-form-sms-verify-input.vue b/src/components/common-base/form/form-sms-verify-input/pc-form-sms-verify-input.vue new file mode 100644 index 0000000..49174b4 --- /dev/null +++ b/src/components/common-base/form/form-sms-verify-input/pc-form-sms-verify-input.vue @@ -0,0 +1,91 @@ + + + + + + diff --git a/src/components/common-base/form/form-sms-verify-input/use-sms-verify-input.ts b/src/components/common-base/form/form-sms-verify-input/use-sms-verify-input.ts new file mode 100644 index 0000000..c11a6f2 --- /dev/null +++ b/src/components/common-base/form/form-sms-verify-input/use-sms-verify-input.ts @@ -0,0 +1,242 @@ +/** + * @file 短信验证码输入框 hook + */ + +import { PropUtils, useProps, VueProps } from '@/assets/utils/vue-utils/props-utils'; +import { translate } from '@/assets/lang'; +import { validateImageCaptcha, validatePhoneNumber } from '@/assets/utils/validate'; +import { computed, ref, unref, watchEffect } from 'vue'; +import { toast } from '@/hooks/components/use-toast'; +import { getWatchCore } from '@/core/watch-sdk'; +import { useSecondCountDown } from '@/hooks/tools/use-count-down'; +import { emitFunc, VueEmit } from '@/assets/utils/vue-utils/emit-utils'; +import { + SmsScene, + SmsValidType, + SendSmsVerifyCodeFail, + SendSmsVerifyResult, +} from '@polyv/live-watch-sdk'; +import { InputValueType } from '../form-input/hooks/use-form-input'; +import { ImageVerifyInputInstance } from '../form-image-verify-input/type'; +import { isArray } from '@/assets/utils/array'; + +/** 验证类型,imageCode - 图片验证码,sliderCode - 滑块验证码 */ +export type VerifyType = 'imageCaptcha' | 'sliderCode'; + +/** + * props 配置 + */ +export const formSmsVerifyInputProps = () => ({ + /** 绑定值 */ + value: PropUtils.string.def(''), + /** 区号 */ + areaCode: PropUtils.string.def('+86'), + /** 手机号 */ + phoneNumber: PropUtils.string.def(''), + /** 短信场景 */ + smsScene: PropUtils.enum().isRequired, + /** 验证类型 */ + validType: PropUtils.enum().def(SmsValidType.Image), + /** 图片验证码 id */ + imageId: PropUtils.string.def(''), + /** 图片验证码 */ + imageCaptcha: PropUtils.string.def(''), + /** 图片验证码节点 */ + imageVerifyInputRef: PropUtils.oneOfType([ + Array, + Object, + ]), +}); + +/** + * emit 配置 + */ +export const formSmsVerifyInputEmits = () => ({ + input: emitFunc(), +}); + +export const useSmsVerifyInput = (options: { + props: VueProps; + emit: VueEmit; +}) => { + const { props, emit } = options; + const { areaCode, phoneNumber, smsScene, imageCaptcha, imageId, validType } = useProps(props); + const { surplusTime, initCountDown } = useSecondCountDown({ + second: 60, + }); + + /** 输入框占位文本 */ + const inputPlaceholder = computed(() => { + return translate('form.placeholder.smsVerify'); + }); + + /** 发送按钮是否禁用 */ + const sendDisabled = computed(() => { + let isDisabled = false; + const areaCodeVal = unref(areaCode); + const phoneNumberVal = unref(phoneNumber); + + // 手机号不规范 + if (!validatePhoneNumber(phoneNumberVal, areaCodeVal)) { + isDisabled = true; + } + + // 存在倒计时 + if (unref(surplusTime).seconds !== 0) { + isDisabled = true; + } + + // 如果是图片验证码则验证长度 + if ( + unref(validType) === SmsValidType.Image && + !validateImageCaptcha(unref(imageCaptcha), unref(imageId)) + ) { + isDisabled = true; + } + + return isDisabled; + }); + + /** 发送按钮文本 */ + const sendText = computed(() => { + const seconds = unref(surplusTime).seconds; + if (seconds !== 0) { + return `${translate('form.resend')}${seconds}${translate('unit.second')}`; + } + + return translate('form.getSmsVerify'); + }); + + /** 处理输入框输入 */ + function onInputChange(val: InputValueType): void { + emit('input', `${val}`); + } + + /** 滑块验证码是否显示 */ + const slideVerifyVisible = ref(false); + + watchEffect(() => { + if (unref(sendDisabled)) { + slideVerifyVisible.value = false; + } + }); + + /** 处理点击发送 */ + function onClickSend() { + if (unref(sendDisabled)) { + return; + } + + if (unref(validType) === SmsValidType.Slider) { + slideVerifyVisible.value = true; + } else { + toSendImageSmsCode(); + } + } + + /** + * 发送短信验证码(滑块验证) + */ + async function toSendSliderSmsCode(slideData: AliAwscSliceData) { + const watchCore = getWatchCore(); + const validTypeVal = unref(validType); + + let result: SendSmsVerifyResult | undefined; + + if (validTypeVal === SmsValidType.Slider) { + result = await watchCore.sms.sendSmsVerifyCode({ + phoneNumber: unref(phoneNumber), + areaCode: unref(areaCode), + validType: validTypeVal, + scene: unref(smsScene), + sessionId: slideData.sessionId, + sig: slideData.sig, + token: slideData.token, + }); + } + + if (!result) { + return; + } + + if (result.success) { + onSendSuccess(); + return; + } + + toast.error(translate('base.frequentOperation')); + slideVerifyVisible.value = false; + } + + /** + * 发送短信验证码(图片验证) + */ + async function toSendImageSmsCode() { + const watchCore = getWatchCore(); + const validTypeVal = unref(validType); + + let result: SendSmsVerifyResult | undefined; + + if (validTypeVal === SmsValidType.Image) { + result = await watchCore.sms.sendSmsVerifyCode({ + phoneNumber: unref(phoneNumber), + areaCode: unref(areaCode), + validType: validTypeVal, + scene: unref(smsScene), + imageId: unref(imageId), + imageCaptcha: unref(imageCaptcha), + }); + } + + if (!result) { + return; + } + + if (result.success) { + onSendSuccess(); + return; + } + + const failReason = result.failReason; + if (failReason === SendSmsVerifyCodeFail.ImageCaptchaError) { + toast.error(translate('form.error.imageCaptchaError')); + refreshImageVerify(); + } + } + + /** 刷新图片验证码的输入框 */ + function refreshImageVerify() { + if (isArray(props.imageVerifyInputRef)) { + props.imageVerifyInputRef.forEach(instance => { + instance.refreshVerifyImage(true); + }); + } else { + props.imageVerifyInputRef?.refreshVerifyImage(true); + } + } + + /** + * 处理发送成功 + */ + function onSendSuccess() { + // 开始倒计时 + initCountDown(); + + // 2秒后隐藏滑块验证码 + setTimeout(() => { + slideVerifyVisible.value = false; + }, 2000); + } + + return { + inputPlaceholder, + sendDisabled, + sendText, + SmsValidType, + onInputChange, + slideVerifyVisible, + onClickSend, + toSendSliderSmsCode, + toSendImageSmsCode, + }; +}; diff --git a/src/components/common-base/form/form-submit-button.vue b/src/components/common-base/form/form-submit-button.vue new file mode 100644 index 0000000..c15b596 --- /dev/null +++ b/src/components/common-base/form/form-submit-button.vue @@ -0,0 +1,22 @@ + + + + diff --git a/src/components/common-base/form/form-upload-image/form-upload-image.vue b/src/components/common-base/form/form-upload-image/form-upload-image.vue new file mode 100644 index 0000000..83b941e --- /dev/null +++ b/src/components/common-base/form/form-upload-image/form-upload-image.vue @@ -0,0 +1,104 @@ + + + + + + diff --git a/src/components/common-base/form/form-upload-image/use-form-upload-image.ts b/src/components/common-base/form/form-upload-image/use-form-upload-image.ts new file mode 100644 index 0000000..bea4a3b --- /dev/null +++ b/src/components/common-base/form/form-upload-image/use-form-upload-image.ts @@ -0,0 +1,71 @@ +import { translate } from '@/assets/lang'; +import { isMobile } from '@/assets/utils/browser'; +import { emitFunc, VueEmit } from '@/assets/utils/vue-utils/emit-utils'; +import { PropUtils, useProps, VueProps } from '@/assets/utils/vue-utils/props-utils'; +import { getWatchCore } from '@/core/watch-sdk'; +import { toast } from '@/hooks/components/use-toast'; +import { computed, unref } from 'vue'; + +export const formUploadImageProps = () => ({ + /** 绑定值 */ + value: PropUtils.array(), + /** 最大上传数量 */ + maxCount: PropUtils.number.def(Infinity), +}); + +export const formUploadImageEmit = () => ({ + input: emitFunc(), +}); + +export const useFormUploadImage = (options: { + props: VueProps; + emit: VueEmit; +}) => { + const { props, emit } = options; + const { value, maxCount } = useProps(props); + + /** 处理点击上传 */ + async function onClickUpload() { + try { + if (unref(value).length >= unref(maxCount)) { + return; + } + + const watchCore = getWatchCore(); + const { imageUrl } = await watchCore.utils.uploadImage(); + const newVal = [...unref(value), imageUrl]; + emit('input', newVal); + } catch (error) { + toast.error(translate('watchCore.error.uploadImage')); + } + } + + /** 处理点击删除 */ + function onClickDelete(index: number) { + const newVal = unref(value).filter((url, _index) => _index !== index); + emit('input', newVal); + } + + /** 数量提示 */ + const countTips = computed(() => { + if (props.maxCount === 1 || props.maxCount === Infinity) { + return ''; + } + const surplusCount = props.maxCount - props.value.length; + if (surplusCount === 0) { + return ''; + } + return `(${translate('form.uploadImage.prefixTips')}${surplusCount}${translate( + 'form.uploadImage.suffixTips', + )})`; + }); + + return { + value, + maxCount, + onClickUpload, + onClickDelete, + countTips, + isMobile, + }; +}; diff --git a/src/components/common-base/form/form-wrap.vue b/src/components/common-base/form/form-wrap.vue new file mode 100644 index 0000000..c602f77 --- /dev/null +++ b/src/components/common-base/form/form-wrap.vue @@ -0,0 +1,23 @@ + + + + diff --git a/src/components/common-base/form/hooks/use-form-common.ts b/src/components/common-base/form/hooks/use-form-common.ts new file mode 100644 index 0000000..146b6e4 --- /dev/null +++ b/src/components/common-base/form/hooks/use-form-common.ts @@ -0,0 +1,90 @@ +import { PropUtils, VueProps } from '@/assets/utils/vue-utils/props-utils'; +import { computed, unref } from 'vue'; +import { FormSize, FormTheme } from '../types/enums'; +import { useFormItemInject } from './use-form-item'; +import { useFormWrapPropsInject } from './use-form'; + +export const formCommonProps = () => ({ + /** 尺寸 */ + size: PropUtils.enum(), + /** 主题 */ + theme: PropUtils.enum(), + /** 是否进行表单验证 */ + validateForm: PropUtils.bool.def(true), +}); + +export const useFormCommon = (options: { + props: VueProps; + classPrefix: string; +}) => { + const { props, classPrefix } = options; + const formProps = useFormWrapPropsInject(); + + /** 表单组件公用 className */ + const commonClassNames = computed(() => { + const list = []; + + // 尺寸 + const sizeVal = props.size; + if (sizeVal && sizeVal !== FormSize.Default) { + list.push(`${classPrefix}--size-${sizeVal}`); + } + + // 主题 + const themeVal = props.theme || formProps?.theme; + if (unref(themeVal)) { + list.push(`${classPrefix}--theme-${themeVal}`); + } + + return list; + }); + + return { + commonClassNames, + }; +}; + +/** 表单组件下的验证状态 hook */ +export const useFormCommonValidate = (options: { props: VueProps }) => { + const { props } = options; + const formItemContext = useFormItemInject(); + + /** 验证当前的表单节点 */ + async function validateCurrentFormItem() { + await formItemContext?.validateFormItem(); + } + + /** 在失焦时进行表单节点验证 */ + async function blurToValidateItem() { + if (!props.validateForm) { + return; + } + + await validateCurrentFormItem(); + } + + /** 在聚焦时移除表单节点异常提示 */ + function focusToRemoveError() { + if (!props.validateForm) { + return; + } + + formItemContext?.removeErrorMessage(); + } + + /** 表单节点是否处于异常 */ + const formItemIsError = computed(() => { + if (!props.validateForm || !formItemContext) { + return false; + } + + return unref(formItemContext.formItemIsError); + }); + + return { + validateCurrentFormItem, + blurToValidateItem, + focusToRemoveError, + formItemIsError, + }; +}; diff --git a/src/components/common-base/form/hooks/use-form-item.ts b/src/components/common-base/form/hooks/use-form-item.ts new file mode 100644 index 0000000..9ea7b1b --- /dev/null +++ b/src/components/common-base/form/hooks/use-form-item.ts @@ -0,0 +1,188 @@ +import { isMobile } from '@/assets/utils/browser'; +import { formatStyleSize } from '@/assets/utils/dom'; +import { PropUtils, VueProps } from '@/assets/utils/vue-utils/props-utils'; +import Schema from '@/plugins/async-validator'; +import { computed, inject, InjectionKey, provide, ref, unref, watchEffect } from 'vue'; +import { + FormItemInstance, + formItemLabelModels, + FormItemLabelModel, + FormValidateOptions, +} from '../types/form-types'; +import { useFormWrapPropsInject } from './use-form'; + +export const formItemProps = () => ({ + /** 该节点属于表单数据中的哪个字段 */ + formField: PropUtils.looseString, + /** 节点标签 */ + label: PropUtils.looseString, + /** 表单标题宽度 */ + labelWidth: PropUtils.looseNumber, + /** 表单标题高度 */ + labelHeight: PropUtils.looseNumber, + /** 表单输入框内容宽度 */ + contentWidth: PropUtils.looseNumber, + /** 是否显示异常信息 */ + showErrorMessage: PropUtils.bool.def(true), + /** 节点异常信息 */ + errorMessage: PropUtils.looseString, + /** label 模式 */ + labelModel: PropUtils.oneOf(formItemLabelModels), + /** 是否显示必填星号 */ + required: PropUtils.bool.def(false), +}); + +/** 组件名 */ +export const FORM_ITEM_COMPONENT_NAME = 'form-item'; + +/** + * 判断 vue 实例是否为 + * @param instance 实例 + */ +export const isFormItemInstance = (instance: unknown): instance is FormItemInstance => { + const _instance = instance as Partial | undefined; + return _instance?.isFormItem ?? false; +}; + +export const FORM_ITEM_PROVIDE_KEY: InjectionKey = + Symbol('FORM_ITEM_PROVIDE_KEY'); + +export const useFormItemInject = (): FormItemInstance | undefined => { + return inject(FORM_ITEM_PROVIDE_KEY); +}; + +export const useFormItem = (options: { props: VueProps }) => { + const { props } = options; + + const required = computed(() => props.required); + + const formProps = useFormWrapPropsInject(); + + const labelText = computed(() => props.label); + + const labelModel = computed( + () => props.labelModel ?? formProps?.labelModel ?? 'inline', + ); + + /** 节点标签样式 */ + const labelStyle = computed(() => { + if (unref(labelModel) === 'header') { + return {}; + } + + const width = props.labelWidth ?? formProps?.labelWidth; + const height = props.labelHeight ?? formProps?.labelHeight; + + return { + width: formatStyleSize(width), + height: formatStyleSize(height), + }; + }); + + /** 节点内容宽度样式 */ + const contentWidthStyle = computed(() => { + const width = props.contentWidth ?? formProps?.contentWidth; + + return formatStyleSize(width); + }); + + /** 节点异常提示 */ + const itemErrorMessage = ref(); + /** 当前表单节点是否异常 */ + const formItemIsError = computed(() => typeof unref(itemErrorMessage) !== 'undefined'); + + watchEffect(() => { + if (props.errorMessage) { + setErrorMessage(props.errorMessage); + } else { + itemErrorMessage.value = undefined; + } + }); + + /** 设置异常提示 */ + function setErrorMessage(message: string | undefined): void { + if (message && !props.showErrorMessage) return; + + itemErrorMessage.value = message; + } + + /** 移除异常提示 */ + function removeErrorMessage() { + itemErrorMessage.value = undefined; + } + + /** 验证当前表单节点 */ + function validateFormItem(validateOptions: FormValidateOptions = {}): Promise { + const showErrorMessage = validateOptions.showErrorMessage ?? true; + + // 当前节点验证的字段名 + const validateField = props.formField; + const formDataVal = formProps?.formData; + const formRulesVal = formProps?.formRules; + + /** + * 没有传验证字段 + * 中没有 formData + * 以上条件满足其一则不进行验证,默认通过验证 + */ + if (!validateField || !formDataVal || !formRulesVal || !formRulesVal[validateField]) { + return Promise.resolve(); + } + + // 创建验证对象 + const descriptor = { + [validateField]: formRulesVal[validateField], + }; + const validateVal = { + [validateField]: formDataVal[validateField], + }; + const validator = new Schema(descriptor); + + // 执行验证 + let message: string | undefined; + validator.validate(validateVal, errors => { + if (errors && errors.length) { + message = errors[0].message; + } + }); + + // 验证失败则提示 + if (showErrorMessage && props.showErrorMessage) { + setErrorMessage(message); + } + + return new Promise((resolve, reject) => { + if (typeof message === 'undefined') { + resolve(); + } else { + reject(new Error(message)); + } + }); + } + + // expose 导出对象 + const formItemInstance: FormItemInstance = { + isFormItem: true, + formItemIsError, + setErrorMessage, + removeErrorMessage, + validateFormItem, + }; + + // 向下注入 + provide(FORM_ITEM_PROVIDE_KEY, formItemInstance); + + return { + required, + labelText, + labelModel, + labelStyle, + contentWidthStyle, + itemErrorMessage, + formItemIsError, + removeErrorMessage, + validateFormItem, + formItemInstance, + isMobile, + }; +}; diff --git a/src/components/common-base/form/hooks/use-form-submit-button.ts b/src/components/common-base/form/hooks/use-form-submit-button.ts new file mode 100644 index 0000000..ae1e9a4 --- /dev/null +++ b/src/components/common-base/form/hooks/use-form-submit-button.ts @@ -0,0 +1,64 @@ +import { ref, unref, watch } from 'vue'; +import { useFormWrapInject, useFormWrapPropsInject } from './use-form'; + +export const useFormSubmitButton = () => { + const formProps = useFormWrapPropsInject(); + const formContext = useFormWrapInject(); + + /** 提交按钮是否禁用 */ + const buttonIsDisabled = ref(false); + + /** 检查按钮是否需要禁用 */ + async function checkDisabled(): Promise { + let isDisabled = false; + + if (!formContext) { + return; + } + + // 表单正在提交中 + if (unref(formContext.isSubmiting)) { + isDisabled = true; + buttonIsDisabled.value = isDisabled; + return; + } + + // 进行表单验证 + try { + if (formContext.validateCurrentForm) { + await formContext.validateCurrentForm({ + showErrorMessage: false, + }); + } + } catch (e) { + if (unref(formContext.debug)) { + console.error('form-submit-button-error', e); + } + isDisabled = true; + } + + buttonIsDisabled.value = isDisabled; + } + + watch( + () => { + return [formProps && formProps.formData, formContext && unref(formContext.isSubmiting)]; + }, + () => checkDisabled(), + { + immediate: true, + deep: true, + }, + ); + + /** 处理按钮点击 */ + function onButtonClick() { + formContext && formContext.submitForm(); + } + + return { + buttonIsDisabled, + checkDisabled, + onButtonClick, + }; +}; diff --git a/src/components/common-base/form/hooks/use-form.ts b/src/components/common-base/form/hooks/use-form.ts new file mode 100644 index 0000000..40d1337 --- /dev/null +++ b/src/components/common-base/form/hooks/use-form.ts @@ -0,0 +1,130 @@ +import { useVue } from '@/hooks/core/use-vue'; +import { emitFunc, VueEmit } from '@/assets/utils/vue-utils/emit-utils'; +import { PropUtils, useProps, VueProps } from '@/assets/utils/vue-utils/props-utils'; +import { ValidatorRules } from '@/plugins/async-validator'; +import { ComputedRef, inject, InjectionKey, provide, Ref, ref, unref } from 'vue'; +import { FormTheme } from '../types/enums'; +import { formItemLabelModels, FormValidateOptions } from '../types/form-types'; +import { isFormItemInstance } from './use-form-item'; + +export const formWrapProps = () => ({ + /** 绑定的表单对象 */ + formData: PropUtils.object().def({}), + /** 验证规则 */ + formRules: PropUtils.object().def({}), + /** 表单标题宽度 */ + labelWidth: PropUtils.number.def(170), + /** 表单标题高度 */ + labelHeight: PropUtils.number.def(40), + /** 表单输入框内容宽度 */ + contentWidth: PropUtils.looseNumber, + /** 表单提交方法 */ + submitAction: PropUtils.func(), + /** 表单主题,dark-黑暗 */ + theme: PropUtils.enum(), + /** label 模式,默认:inline */ + labelModel: PropUtils.oneOf(formItemLabelModels).def('inline'), + /** 是否开启 debug 打印,默认:false */ + debug: PropUtils.bool.def(false), +}); + +export const formWrapEmits = () => ({ + // 表单提交事件 + 'submit-form': emitFunc(), +}); + +export type FormWrapProps = VueProps; + +/** 注入类型 */ +export interface FormWrapInjectData { + /** 是否正在提交 */ + isSubmiting: Ref; + /** debug */ + debug: ComputedRef; + /** 验证当前表单 */ + validateCurrentForm(validateOptions?: FormValidateOptions): Promise; + /** 提交当前表单 */ + submitForm(validateOptions?: FormValidateOptions): Promise; +} + +export const FORM_WRAP_PROPS_PROVIDE_KEY: InjectionKey = Symbol( + 'FORM_WRAP_PROPS_PROVIDE_KEY', +); + +export const useFormWrapPropsInject = (): FormWrapProps | undefined => { + return inject(FORM_WRAP_PROPS_PROVIDE_KEY); +}; + +export const FORM_WRAP_PROVIDE_KEY: InjectionKey = + Symbol('FORM_WRAP_PROVIDE_KEY'); + +export const useFormWrapInject = (): FormWrapInjectData | undefined => { + return inject(FORM_WRAP_PROVIDE_KEY); +}; + +export const useFormWrap = (options: { + props: VueProps; + emit: VueEmit; +}) => { + const { props, emit } = options; + + const { formData, submitAction, debug } = useProps(props); + const { getCurrentChildrens } = useVue(); + + /** 表单是否正在提交 */ + const isSubmiting = ref(false); + + /** 验证当前表单 */ + async function validateCurrentForm(validateOptions: FormValidateOptions = {}): Promise { + const childrens = getCurrentChildrens(); + if (!childrens || childrens.length === 0) { + return; + } + + for (let i = 0; i < childrens.length; i++) { + const instance = childrens[i]; + if (isFormItemInstance(instance)) { + try { + await instance.validateFormItem(validateOptions); + } catch (e) { + return Promise.reject(e); + } + } + } + } + + /** 验证并触发表单提交 */ + async function submitForm(validateOptions: FormValidateOptions): Promise { + await validateCurrentForm(validateOptions); + + emit('submit-form', unref(formData)); + + const submitActionFn = unref(submitAction); + if (typeof submitActionFn === 'function') { + isSubmiting.value = true; + try { + await submitActionFn(unref(formData)); + } catch (e) { + isSubmiting.value = false; + } finally { + isSubmiting.value = false; + } + } + } + + // 向下注入 props + provide(FORM_WRAP_PROPS_PROVIDE_KEY, props); + + provide(FORM_WRAP_PROVIDE_KEY, { + debug, + isSubmiting, + validateCurrentForm, + submitForm, + }); + + return { + isSubmiting, + validateCurrentForm, + submitForm, + }; +}; diff --git a/src/components/common-base/form/imgs/form-upload-add.png b/src/components/common-base/form/imgs/form-upload-add.png new file mode 100644 index 0000000000000000000000000000000000000000..a3b1e6c2efa0347aeea44cd2074bd04a32df45d9 GIT binary patch literal 256 zcmeAS@N?(olHy`uVBq!ia0vp^2SAvG8AvYpRA>UEL<4+6T!Hk&sS77fTQqUn;;B=Y z%$&Ix$TdB)_90M$tt7}VnBo1=G*e0bjZ^%AB2zqF978H@y}h}YlgUw}^l`+_84q2}fqEDiUVq!MWc6KxxXYK9y_zwPFZ6tk zfPjDp3k!=7BV(hBgM-4)-v`#tnqzdaZiU)o+siqtFIKK={H8wZwfg!8d@L;YkW>n0 oaOmXf{5AWom%V`vWcH7(;#oG^J>4J3&IWNkUHx3vIVCg!05zvw!vFvP literal 0 HcmV?d00001 diff --git a/src/components/common-base/form/imgs/form-upload-del.png b/src/components/common-base/form/imgs/form-upload-del.png new file mode 100644 index 0000000000000000000000000000000000000000..03322421f786c2801d0237843d81d40266037bb2 GIT binary patch literal 1630 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 literal 0 HcmV?d00001 diff --git a/src/components/common-base/form/imgs/form-upload-loading.png b/src/components/common-base/form/imgs/form-upload-loading.png new file mode 100644 index 0000000000000000000000000000000000000000..600b64c8778149f02223c5220324cbd9619e56f1 GIT binary patch literal 1418 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY3?!3`olAk#mH?j+S0Md=sDT&S`xJrhwkZkn z3ua*95als=7A6qAs?s|n@aR%y$=rtr+;3>BJ6msGzrf`C`_pscFZX}$ZclzS`Ofam z(@SLS&o|d9STq#=-tw_*2Ll6(r>Bc!NW|f}*E5S3IS4d7d^XA1#=$XQ;+jPt?`XIk zdGi1N`nNL;crpTRT<2eD6v}U_8^LMg-D!60&xY#!-Z?jY=O6iCe^Ykx*MHx>ef#_O z@3-ZpFMN9+?|S16xRd#82^82jo)^V@4L|MP#`z8Iw{G@~F`8pj%l|3@gFCBWPR&}3u zdT?@~W$CWR2G>#;S>CJ^uIIV9P}$aL`}(z&VL6d5FIr6^`PvW1FSu6l^P;_4^9f&D zPZ3S!N9VPU%P0oRbUM#Jm{b31h49fytj|sqwJwos+Y-Nk*=hCqwX=SO-!UoHQYkO7 zkU1sP{_I$i?FHXGofaXAOTC$7Pbt6cY0UO)T5$A~Mc0*$`k6|JM(&rluxrlicPqb? znBTQD`tY}poAn+0CnfZ}TaXytcKpbhi8GZm16J*g>9c5EtNLTF%p#t!UGp}bS&;Lv zn03|T=aVv84|5)zG^Jm}{%WKK)k&pmHne0t&nx29tfC697c%Kd&Xw6k3?^}w-%H$1A@CJL>X zImi0?>#6gcUL~G+4^*LUOW+q{J!P5 z_X0;Dp-Kk3^k;jEg+0XFUHIdA!&Jt9Y&GZ}>zM0$x$e2{!9oA2WR z4Tqw`i!~F!DP35@U>aL?Ldp78{f9$o6U08*cyLX)$+PLQ3GZPOAHhuuNnQdhZ__5s zzoa34*y6$0qi(zB{c+Lc)LACcm}n9;sl=@{(#T=HVZ`!_Ck2uwF5lA2lC5ZFakH{U zE%4lNbDw2j47b{)^lmIpyZI!~faz2~=EAF`M+|kFUw8^F`m%Y^t_ja~<>hHQ%u;Zf z{WX2_&8_nm?_^2xbP(!uStzva(kt0BE*+7=j2UXd8;&m0z4G&jkIwdWJ@!RxxA(Oj z$`iDDKE15_+(!vc{b!uJXUvQa|2NyW(emAQ^|wFkLZ*7~%wjnIoUifQ_8qq-?$T=f z5wLXiEBgzE&0*T1>m<~#mWn=}5N=oIB(rSIwbx&diq`+0cFj<4q3KTf3V&I?Tr z!d|Dou5k|xndI|5u}FTZ(UzStLZ(|!*oQ4D3q9kvd~>S6WFJmBu9Z!E?Rnc(GPmDe ze);;sZ9_Y`1(Pp?@ zW2cyr@1)?pwfwoU{%!wHh8=sg&Df%rciS$@kMs0?$WIaY?c%~TJp@=dF?hQAxvX; + /** 设置异常提示 */ + setErrorMessage(message: string | undefined): void; + /** 移除异常提示 */ + removeErrorMessage(): void; + /** 验证表单节点 */ + validateFormItem(validateOptions?: FormValidateOptions): Promise; +} + +export const formItemLabelModels = tupleString('inline', 'header'); +/** 表单节点 label 样式,inline-行内,header-头部 */ +export type FormItemLabelModel = typeof formItemLabelModels[number]; diff --git a/src/components/common-base/form/utils/utils.ts b/src/components/common-base/form/utils/utils.ts new file mode 100644 index 0000000..7159783 --- /dev/null +++ b/src/components/common-base/form/utils/utils.ts @@ -0,0 +1,14 @@ +import { SelectOptionItem } from '../form-select/types/form-select-types'; + +/** + * 格式化字符串数组下拉选项 + */ +export function formatSimpleSelectOptions(options: string[]): SelectOptionItem[] { + const strList = options.filter(str => !!str); + return strList.map(str => { + return { + label: str, + value: str, + }; + }); +} diff --git a/src/components/common-base/iframe-render/mobile-iframe-render.vue b/src/components/common-base/iframe-render/mobile-iframe-render.vue new file mode 100644 index 0000000..935a712 --- /dev/null +++ b/src/components/common-base/iframe-render/mobile-iframe-render.vue @@ -0,0 +1,33 @@ + + + + + + diff --git a/src/components/common-base/iframe-render/pc-iframe-render.vue b/src/components/common-base/iframe-render/pc-iframe-render.vue new file mode 100644 index 0000000..10cc00a --- /dev/null +++ b/src/components/common-base/iframe-render/pc-iframe-render.vue @@ -0,0 +1,33 @@ + + + + + + diff --git a/src/components/common-base/iframe-render/use-iframe-render.ts b/src/components/common-base/iframe-render/use-iframe-render.ts new file mode 100644 index 0000000..4eae674 --- /dev/null +++ b/src/components/common-base/iframe-render/use-iframe-render.ts @@ -0,0 +1,32 @@ +import { formatStyleSize } from '@/assets/utils/dom'; +import { PropUtils, VueProps } from '@/assets/utils/vue-utils/props-utils'; +import { computed } from 'vue'; +import { CSSProperties } from 'vue/types/jsx'; + +export const iframeRenderProps = () => ({ + /** 地址 */ + src: PropUtils.looseString, + /** 高度,默认:600 */ + height: PropUtils.oneOfType([String, Number]).def(600), +}); + +export const useIframeRender = (options: { props: VueProps }) => { + const { props } = options; + + const iframeSrc = computed(() => props.src); + + const wrapStyle = computed(() => { + const styles: CSSProperties = {}; + + if (props.height) { + styles.height = formatStyleSize(props.height); + } + + return styles; + }); + + return { + iframeSrc, + wrapStyle, + }; +}; diff --git a/src/components/common-base/list-loading/imgs/loading.png b/src/components/common-base/list-loading/imgs/loading.png new file mode 100644 index 0000000000000000000000000000000000000000..8a2d5b705698d63ce54f18b469b30eab095949b8 GIT binary patch literal 1779 zcmVtB_*hk4cwP8d`PdXK zcGEPrSfRn7SqZw367R!oQUuY)QV}1uDnxRPXMQ>LPMJ<-?w!XuXJ(R<-Q~`mbI*7F z`=9@uJ9mO${( zfW7d#z?DO16<9a8Qs}%OJLoE-TN!lTkX2(FXipAN71c_h^BT=6qgpz2-jP*dONHJj z$SSZCL2oqJZY#_r`8yQ!W&`a89;XKH2yK9)k#~ytKxl&;4Y^xh_k}jd@sK-V8|Y-F zzOVL6AqF}v=&YoTYPA}wBJw&_tJO?=v*L~Fb)CrqbX;TyJqy?!q0>fA3Y@j*c4J=^ z(P==-#tlljX+(Kuprat~*s)^^W9%RzJ|!@T=snK);l;(pzrxOEy0J3>9R*oHmP(~V zh*%|}9`P6v*NCXvXf)mk3oVY*iJdBRRA2|OTrQs@qHS(eL_A-w*SAN3);VGNLhH!S zago~*&HX?djRuPYtt+}6>?@O@YUm`$s-SgXYlTjVtP)x^wl-)P$f}`LVrzkxg{%Ww z6}EC{naH}JRbb}^`s~@WmnZD~`}cqESKb{vcI*!E{P6Iwl+7gBb+%GycQlWVj`p-# zt(}%-l^A1x1Hk9CTJ2i^u)CFI4zf6IVq)SDW9()3f`xPb%FN8nl?6*kY^zeK+ywv+ zaL%u_ZM#t@6wWLxEUc-hv6Vr4Q%12^d<+raM#LKcK-9uNa?al!92|USZf?%EHWnRr zBa6r5FMb+0w^i6)0T6t zsi`Re`~)ICLPX+I<@;w@)}6IlZ8;av-n20?GE(U4>pKSkw{*ZJB3c$7-{Z%Re-br% zI~_kcIr(rqZ4Gr<`To4Ry1IR7X{jYUeJF`&zml#}sXR_ZZxYdsV$&@MhKNqLTCFEf zojUcW4D3C7_FUK7+k4cqtnm)#BSicS5udNsY9DxylaZ&TLkHE(qUzwBKS)Fe5b+_W zYVhfNeQj-R_sNqdf06;cckkX?dwP0K13=mDeC=)4PZ9A5W9&0`)gd#gwLv=-#J+v| zu4jzhZ&}u>M0B^e^C}{`P$;~Qh`YUQA>uc-ZNJ1h|Kh}n6MuB7RFX!uR%mxeM@B|& z?(6G&5fL91lM@kHi1-5lJU2Z(Juf4gopVf0O^pG-TSRm_BHHcA_oLO-)z_AmmVOD- zR&Jr4&XvpMG7*gez%`unFX!jyzrJ+oQrAUH7#!!Afq?;QY;5cv#@KxT@Gl}R)a&(n zlyl@B+DR!SQfW!kTYNXx+%pV8p@BbwnHJ zu%AQMaVB*Hqe;!t?Fl3D)t|bfI!@Zi)MU7kp_Ali;gWhpiv^2q+xH@(*b7m`$cv8%h{c_ZJSHN1W?lQ&N~gn-DvWj z$6VytWtUGDw9`zfRFeK17QZee-P`b~w2pinv{<>EtKCn^UWP}3P=THXuDj2H_v_G|r&TR- z(gt={8%`fHd6%#x(VYe4P|#V4>ZoZaOUIi#IcgdW1D!Q!lRn~)NYFi`&5gR_o349h z5c0Y@I;hRG>uZS?N>0@YIIz5n@=i9}0E7Vz@{6^Twpk)S3GBM%c$5eZbL>Wma+%1X zb95NsEbW;@eZT9XPr<)Ym6|#>0=Dc(mNFT3ik!TrklaD%anYj+Sy_(GV+v7;tOeRZ z&uS`B4XivzXT8?e1)LgmnrTHhuDh?w%DcF=tgIB1CaPcGGY1`afU^EN1FdO<{sUv- VNUUlmd%pkx002ovPDHLkV1kHuU2^~c literal 0 HcmV?d00001 diff --git a/src/components/common-base/list-loading/list-loading.vue b/src/components/common-base/list-loading/list-loading.vue new file mode 100644 index 0000000..08f6860 --- /dev/null +++ b/src/components/common-base/list-loading/list-loading.vue @@ -0,0 +1,15 @@ + + + diff --git a/src/components/common-base/normal-button/normal-button.vue b/src/components/common-base/normal-button/normal-button.vue new file mode 100644 index 0000000..33616e3 --- /dev/null +++ b/src/components/common-base/normal-button/normal-button.vue @@ -0,0 +1,176 @@ + + + + + + diff --git a/src/components/common-base/normal-button/types.ts b/src/components/common-base/normal-button/types.ts new file mode 100644 index 0000000..2e81bbb --- /dev/null +++ b/src/components/common-base/normal-button/types.ts @@ -0,0 +1,44 @@ +/** + * 按钮类型 + */ +export enum ButtonType { + /** 主题按钮 */ + Primary = 'primary', + /** 信息按钮 */ + Info = 'info', + /** 取消按钮 */ + Cancel = 'cancel', + /** 竖屏按钮 */ + Portrait = 'portrait', + /** 加重按钮 */ + Aggravate = 'aggravate', + /** 侧边菜单栏 */ + AsideMenu = 'aside-menu', +} + +/** + * 按钮尺寸 + */ +export enum ButtonSize { + /** 大 - 56px */ + Large = 'large', + /** 中 - 48px */ + Medium = 'medium', + /** 默认 - 40px */ + Default = 'default', + /** 小 - 32px */ + Small = 'small', + /** 超小 - 28px */ + Mini = 'mini', + /** 超级小 - 24px */ + XMini = 'x-mini', +} + +/** + * 按钮原生类型 + */ +export enum ButtonNativeType { + Button = 'button', + Submit = 'submit', + Reset = 'reset', +} diff --git a/src/components/common-base/normal-button/use-normal-button.ts b/src/components/common-base/normal-button/use-normal-button.ts new file mode 100644 index 0000000..565202e --- /dev/null +++ b/src/components/common-base/normal-button/use-normal-button.ts @@ -0,0 +1,27 @@ +import { emitFunc } from '@/assets/utils/vue-utils/emit-utils'; +import { PropUtils } from '@/assets/utils/vue-utils/props-utils'; +import { ButtonNativeType, ButtonSize, ButtonType } from './types'; + +export const normalButtonProps = () => ({ + /** 按钮文本,默认:按钮 */ + text: PropUtils.string.def('按钮'), + /** 原生类型,默认:button */ + nativeType: PropUtils.enum().def(ButtonNativeType.Button), + /** 按钮类型,默认:ButtonType.Primary */ + type: PropUtils.enum().def(ButtonType.Primary), + /** 按钮尺寸,默认:ButtonSize.Default */ + size: PropUtils.enum().def(ButtonSize.Default), + /** 按钮是否禁用,默认:false */ + disabled: PropUtils.bool.def(false), + /** 是否块状级按钮,默认:false */ + block: PropUtils.bool.def(false), + /** 按钮图标 */ + icon: PropUtils.icon(), + /** 按钮图标 class */ + iconClass: PropUtils.string, +}); + +export const normalButtonEmits = () => ({ + /** 点击事件 */ + click: emitFunc(), +}); diff --git a/src/components/common-base/phone-code/mobile-phone-code.vue b/src/components/common-base/phone-code/mobile-phone-code.vue new file mode 100644 index 0000000..00a1bf0 --- /dev/null +++ b/src/components/common-base/phone-code/mobile-phone-code.vue @@ -0,0 +1,135 @@ + + + + + + diff --git a/src/components/common-base/phone-code/pc-phone-code.vue b/src/components/common-base/phone-code/pc-phone-code.vue new file mode 100644 index 0000000..6b6a830 --- /dev/null +++ b/src/components/common-base/phone-code/pc-phone-code.vue @@ -0,0 +1,122 @@ + + + + + + diff --git a/src/components/common-base/phone-code/phone-code-data.ts b/src/components/common-base/phone-code/phone-code-data.ts new file mode 100644 index 0000000..52b57d1 --- /dev/null +++ b/src/components/common-base/phone-code/phone-code-data.ts @@ -0,0 +1,931 @@ +const phoneCodeData = [ + { + letter: 'A', + }, + { + country: '阿富汗', + code: '+93', + }, + { + country: '阿尔巴尼亚', + code: '+355', + }, + { + country: '阿尔及利亚', + code: '+213', + }, + { + country: '安道尔', + code: '+376', + }, + { + country: '安哥拉', + code: '+244', + }, + { + country: '安圭拉', + code: '+1264', + }, + { + country: '安提瓜和巴布达', + code: '+1268', + }, + { + country: '阿根廷', + code: '+54', + }, + { + country: '阿鲁巴', + code: '+297', + }, + { + country: '澳大利亚', + code: '+61', + }, + { + country: '奥地利', + code: '+43', + }, + { + country: '阿塞拜疆', + code: '+994', + }, + { + country: '埃及', + code: '+20', + }, + { + country: '爱沙尼亚', + code: '+372', + }, + { + country: '埃塞俄比亚', + code: '+251', + }, + { + country: '爱尔兰', + code: '+353', + }, + { + country: '阿曼', + code: '+968', + }, + { + country: '阿拉伯联合酋长国', + code: '+971', + }, + { + letter: 'B', + }, + { + country: '巴哈马', + code: '+1242', + }, + { + country: '巴林', + code: '+973', + }, + { + country: '巴巴多斯', + code: '+1246', + }, + { + country: '白俄罗斯', + code: '+375', + }, + { + country: '比利时', + code: '+32', + }, + { + country: '伯利兹', + code: '+501', + }, + { + country: '贝宁', + code: '+229', + }, + { + country: '百慕大群岛', + code: '+1441', + }, + { + country: '不丹', + code: '+975', + }, + { + country: '玻利维亚', + code: '+591', + }, + { + country: '波斯尼亚和黑塞哥维那', + code: '+387', + }, + { + country: '博茨瓦纳', + code: '+267', + }, + { + country: '巴西', + code: '+55', + }, + { + country: '保加利亚', + code: '+359', + }, + { + country: '布基纳法索', + code: '+226', + }, + { + country: '布隆迪', + code: '+257', + }, + { + country: '冰岛', + code: '+354', + }, + { + country: '巴基斯坦', + code: '+92', + }, + { + country: '巴勒斯坦', + code: '+970', + }, + { + country: '巴拿马', + code: '+507', + }, + { + country: '巴布亚新几内亚', + code: '+675', + }, + { + country: '巴拉圭', + code: '+595', + }, + { + country: '波兰', + code: '+48', + }, + { + country: '波多黎各', + code: '+1787', + }, + { + letter: 'C', + }, + { + country: '赤道几内亚', + code: '+240', + }, + { + letter: 'D', + }, + { + country: '丹麦', + code: '+45', + }, + { + country: '多米尼加', + code: '+1767', + }, + { + country: '多米尼加共和国', + code: '+1809', + }, + { + country: '东帝汶', + code: '+670', + }, + { + country: '德国', + code: '+49', + }, + { + country: '多哥', + code: '+228', + }, + { + letter: 'E', + }, + { + country: '厄瓜多尔', + code: '+593', + }, + { + country: '厄立特里亚', + code: '+291', + }, + { + country: '俄罗斯', + code: '+7', + }, + { + letter: 'F', + }, + { + country: '法罗群岛', + code: '+298', + }, + { + country: '斐济', + code: '+679', + }, + { + country: '芬兰', + code: '+358', + }, + { + country: '法国', + code: '+33', + }, + { + country: '法属圭亚那', + code: '+594', + }, + { + country: '法属波利尼西亚', + code: '+689', + }, + { + country: '菲律宾', + code: '+63', + }, + { + letter: 'G', + }, + { + country: '哥伦比亚', + code: '+57', + }, + { + country: '哥斯达黎加', + code: '+506', + }, + { + country: '古巴', + code: '+53', + }, + { + country: '刚果民主共和国', + code: '+243', + }, + { + country: '冈比亚', + code: '+220', + }, + { + country: '格鲁吉亚', + code: '+995', + }, + { + country: '格陵兰岛', + code: '+299', + }, + { + country: '格林纳达', + code: '+1473', + }, + { + country: '瓜德罗普岛', + code: '+590', + }, + { + country: '关岛', + code: '+1671', + }, + { + country: '瓜地马拉', + code: '+502', + }, + { + country: '圭亚那', + code: '+592', + }, + { + country: '刚果共和国', + code: '+242', + }, + { + letter: 'H', + }, + { + country: '海地', + code: '+509', + }, + { + country: '洪都拉斯', + code: '+504', + }, + { + country: '哈萨克斯坦', + code: '+7', + }, + { + country: '黑山', + code: '+382', + }, + { + country: '荷兰', + code: '+31', + }, + { + country: '韩国', + code: '+82', + }, + { + letter: 'J', + }, + { + country: '柬埔寨', + code: '+855', + }, + { + country: '加拿大', + code: '+1', + }, + { + country: '捷克', + code: '+420', + }, + { + country: '吉布提', + code: '+253', + }, + { + country: '加蓬', + code: '+241', + }, + { + country: '加纳', + code: '+233', + }, + { + country: '几内亚', + code: '+224', + }, + { + country: '几内亚比绍共和国', + code: '+245', + }, + { + country: '基里巴斯', + code: '+686', + }, + { + country: '吉尔吉斯斯坦', + code: '+996', + }, + { + country: '津巴布韦', + code: '+263', + }, + { + letter: 'K', + }, + { + country: '喀麦隆', + code: '+237', + }, + { + country: '开普', + code: '+238', + }, + { + country: '开曼群岛', + code: '+1345', + }, + { + country: '科摩罗', + code: '+269', + }, + { + country: '库克群岛', + code: '+682', + }, + { + country: '克罗地亚', + code: '+385', + }, + { + country: '库拉索', + code: '+599', + }, + { + country: '肯尼亚', + code: '+254', + }, + { + country: '科威特', + code: '+965', + }, + { + country: '卡塔尔', + code: '+974', + }, + { + letter: 'L', + }, + { + country: '老挝', + code: '+856', + }, + { + country: '拉脱维亚', + code: '+371', + }, + { + country: '黎巴嫩', + code: '+961', + }, + { + country: '莱索托', + code: '+266', + }, + { + country: '利比里亚', + code: '+231', + }, + { + country: '利比亚', + code: '+218', + }, + { + country: '列支敦士登', + code: '+423', + }, + { + country: '立陶宛', + code: '+370', + }, + { + country: '卢森堡', + code: '+352', + }, + { + country: '留尼汪', + code: '+262', + }, + { + country: '罗马尼亚', + code: '+40', + }, + { + country: '卢旺达', + code: '+250', + }, + { + letter: 'M', + }, + { + country: '美属萨摩亚', + code: '+1684', + }, + { + country: '孟加拉国', + code: '+880', + }, + { + country: '马其顿', + code: '+389', + }, + { + country: '马达加斯加', + code: '+261', + }, + { + country: '马拉维', + code: '+265', + }, + { + country: '马来西亚', + code: '+60', + }, + { + country: '马尔代夫', + code: '+960', + }, + { + country: '马里', + code: '+223', + }, + { + country: '马耳他', + code: '+356', + }, + { + country: '马提尼克', + code: '+596', + }, + { + country: '毛里塔尼亚', + code: '+222', + }, + { + country: '毛里求斯', + code: '+230', + }, + { + country: '马约特', + code: '+262', + }, + { + country: '墨西哥', + code: '+52', + }, + { + country: '摩尔多瓦', + code: '+373', + }, + { + country: '摩纳哥', + code: '+377', + }, + { + country: '蒙古', + code: '+976', + }, + { + country: '蒙特塞拉特岛', + code: '+1664', + }, + { + country: '摩洛哥', + code: '+212', + }, + { + country: '莫桑比克', + code: '+258', + }, + { + country: '缅甸', + code: '+95', + }, + { + country: '秘鲁', + code: '+51', + }, + { + country: '美国', + code: '+1', + }, + { + country: '美属维尔京群岛', + code: '+1284', + }, + { + letter: 'N', + }, + { + country: '纳米比亚', + code: '+264', + }, + { + country: '尼泊尔', + code: '+977', + }, + { + country: '尼加拉瓜', + code: '+505', + }, + { + country: '尼日尔', + code: '+227', + }, + { + country: '尼日利亚', + code: '+234', + }, + { + country: '挪威', + code: '+47', + }, + { + country: '南非', + code: '+27', + }, + { + letter: 'P', + }, + { + country: '帕劳', + code: '+680', + }, + { + country: '葡萄牙', + code: '+351', + }, + { + letter: 'R', + }, + { + country: '日本', + code: '+81', + }, + { + country: '瑞典', + code: '+46', + }, + { + country: '瑞士', + code: '+41', + }, + { + letter: 'S', + }, + { + country: '塞浦路斯', + code: '+357', + }, + { + country: '萨尔瓦多', + code: '+503', + }, + { + country: '圣基茨和尼维斯', + code: '+1869', + }, + { + country: '圣露西亚', + code: '+1758', + }, + { + country: '圣彼埃尔和密克隆岛', + code: '+508', + }, + { + country: '圣文森特和格林纳丁斯', + code: '+1784', + }, + { + country: '萨摩亚', + code: '+685', + }, + { + country: '圣马力诺', + code: '+378', + }, + { + country: '圣多美和普林西比', + code: '+239', + }, + { + country: '沙特阿拉伯', + code: '+966', + }, + { + country: '塞内加尔', + code: '+221', + }, + { + country: '塞尔维亚', + code: '+381', + }, + { + country: '塞舌尔', + code: '+248', + }, + { + country: '塞拉利昂', + code: '+232', + }, + { + country: '圣马丁岛(荷兰部分)', + code: '+1721', + }, + { + country: '斯洛伐克', + code: '+421', + }, + { + country: '斯洛文尼亚', + code: '+386', + }, + { + country: '所罗门群岛', + code: '+677', + }, + { + country: '索马里', + code: '+252', + }, + { + country: '斯里兰卡', + code: '+94', + }, + { + country: '苏丹', + code: '+249', + }, + { + country: '苏里南', + code: '+597', + }, + { + country: '斯威士兰', + code: '+268', + }, + { + letter: 'T', + }, + { + country: '塔吉克斯坦', + code: '+992', + }, + { + country: '坦桑尼亚', + code: '+255', + }, + { + country: '泰国', + code: '+66', + }, + { + country: '汤加', + code: '+676', + }, + { + country: '特立尼达和多巴哥', + code: '+1868', + }, + { + country: '突尼斯', + code: '+216', + }, + { + country: '土耳其', + code: '+90', + }, + { + country: '土库曼斯坦', + code: '+993', + }, + { + country: '特克斯和凯科斯群岛', + code: '+1649', + }, + { + letter: 'W', + }, + { + country: '文莱', + code: '+673', + }, + { + country: '乌干达', + code: '+256', + }, + { + country: '乌克兰', + code: '+380', + }, + { + country: '乌拉圭', + code: '+598', + }, + { + country: '乌兹别克斯坦', + code: '+998', + }, + { + country: '瓦努阿图', + code: '+678', + }, + { + country: '委内瑞拉', + code: '+58', + }, + { + letter: 'X', + }, + { + country: '希腊', + code: '+30', + }, + { + country: '匈牙利', + code: '+36', + }, + { + country: '象牙海岸', + code: '+225', + }, + { + country: '新喀里多尼亚', + code: '+687', + }, + { + country: '新西兰', + code: '+64', + }, + { + country: '新加坡', + code: '+65', + }, + { + country: '西班牙', + code: '+34', + }, + { + country: '叙利亚', + code: '+963', + }, + { + letter: 'Y', + }, + { + country: '亚美尼亚', + code: '+374', + }, + { + country: '印度', + code: '+91', + }, + { + country: '印度尼西亚', + code: '+62', + }, + { + country: '伊朗', + code: '+98', + }, + { + country: '伊拉克', + code: '+964', + }, + { + country: '以色列', + code: '+972', + }, + { + country: '意大利', + code: '+39', + }, + { + country: '牙买加', + code: '+1876', + }, + { + country: '约旦', + code: '+962', + }, + { + country: '英国', + code: '+44', + }, + { + country: '越南', + code: '+84', + }, + { + country: '英属处女群岛', + code: '+1340', + }, + { + country: '也门', + code: '+967', + }, + { + letter: 'Z', + }, + { + country: '中非共和国', + code: '+236', + }, + { + country: '乍得', + code: '+235', + }, + { + country: '智利', + code: '+56', + }, + { + country: '直布罗陀', + code: '+350', + }, + { + country: '中国大陆', + code: '+86', + }, + { + country: '中国香港', + code: '+852', + }, + { + country: '中国澳门', + code: '+853', + }, + { + country: '中国台湾', + code: '+886', + }, + { + country: '赞比亚', + code: '+260', + }, +]; + +export default phoneCodeData; diff --git a/src/components/common-base/phone-code/use-phone-code.ts b/src/components/common-base/phone-code/use-phone-code.ts new file mode 100644 index 0000000..205b37c --- /dev/null +++ b/src/components/common-base/phone-code/use-phone-code.ts @@ -0,0 +1,90 @@ +/** + * @file 手机区号选择 hook + */ + +import { isUndefined } from '@/assets/utils/types'; +import { emitFunc, VueEmit } from '@/assets/utils/vue-utils/emit-utils'; +import { PropUtils, VueProps } from '@/assets/utils/vue-utils/props-utils'; +import { computed, ref, unref } from 'vue'; +import codeList from './phone-code-data'; + +export const PhoneCodeEmits = ['input']; + +export type PhoneCodeDataItem = typeof codeList[number]; + +export const phoneCodeProps = () => ({ + value: PropUtils.string.def(''), +}); + +export const phoneCodeEmits = () => ({ + input: emitFunc(), +}); + +export const usePhoneCode = (options: { + props: VueProps; + emit: VueEmit; +}) => { + const { props, emit } = options; + + /** 搜索的关键词 */ + const searchKey = ref(''); + + /** 所有首字母列表 */ + const letterList = computed(() => { + return codeList.filter(item => item.letter); + }); + + const phoneCodeList = computed(() => { + if (!unref(searchKey)) { + return codeList; + } + + return codeList.filter(item => { + if (item.letter) { + return false; + } + + if (item.code && item.code.indexOf(unref(searchKey)) !== -1) { + return true; + } + + if (item.country && item.country.indexOf(unref(searchKey)) !== -1) { + return true; + } + + return false; + }); + }); + + /** 区号选择列表 ref */ + const codeListRef = ref(); + + /** 滚动到某个字母中 */ + function scrollToLetter(letter: string | undefined) { + const codeListElem = unref(codeListRef); + if (!codeListElem || !letter) { + return; + } + + const targetLetterEl = codeListElem.querySelector(`[date-letter=${letter}]`); + + targetLetterEl && targetLetterEl.scrollIntoView(); + } + + /** 处理点击区号 */ + function onClickCountry(item: PhoneCodeDataItem) { + if (isUndefined(item.code)) return; + if (props.value === item.code) return; + + emit('input', item.code); + } + + return { + searchKey, + phoneCodeList, + letterList, + codeListRef, + scrollToLetter, + onClickCountry, + }; +}; diff --git a/src/components/common-base/popup/mobile-popup.vue b/src/components/common-base/popup/mobile-popup.vue new file mode 100644 index 0000000..354e14b --- /dev/null +++ b/src/components/common-base/popup/mobile-popup.vue @@ -0,0 +1,423 @@ + + + + + + diff --git a/src/components/common-base/popup/types.ts b/src/components/common-base/popup/types.ts new file mode 100644 index 0000000..4d6d1d9 --- /dev/null +++ b/src/components/common-base/popup/types.ts @@ -0,0 +1,25 @@ +/** + * Popup 弹层主题 + */ +export enum PopupTheme { + /** 默认主题 */ + Default = 'default', + /** 竖屏主题-黑色主题 */ + Portrait = 'portrait', + /** 竖屏主题-白色主题 */ + PortraitLight = 'portrait-light', +} + +export interface PopupInstance { + /** 打开 */ + openPopup(): void; + /** 关闭 */ + closePopup(): void; +} + +/** 屏幕横屏下的弹窗位置 */ +export enum PopupHorizontalScreenPosition { + Left = 'left', + Center = 'center', + Right = 'right', +} diff --git a/src/components/common-base/popup/use-popup.ts b/src/components/common-base/popup/use-popup.ts new file mode 100644 index 0000000..d795f81 --- /dev/null +++ b/src/components/common-base/popup/use-popup.ts @@ -0,0 +1,416 @@ +/* eslint-disable sonarjs/cognitive-complexity */ +import { computed, nextTick, onBeforeUnmount, onMounted, ref, unref, watch } from 'vue'; +import AlloyFinger from 'alloyfinger'; + +import { PlvPopperManager } from '@/plugins/polyv-ui/admin-import'; +import { Transform } from '@/plugins/alloy-finger/transform'; + +import { useAppendTo } from '@/hooks/behaviors/use-append-to'; + +import { emitFunc, updateModelEmit, VueEmit } from '@/assets/utils/vue-utils/emit-utils'; +import { PropUtils, VueProps } from '@/assets/utils/vue-utils/props-utils'; +import { isUndefined } from '@/assets/utils/types'; + +import { CSSProperties } from 'vue/types/jsx'; +import { PopupInstance, PopupHorizontalScreenPosition, PopupTheme } from './types'; +import { useScreenOrientHook } from '@/hooks/core/use-screen-orient'; + +export const popupProps = () => ({ + /** 显示状态,默认:false,支持 .sync */ + visible: PropUtils.bool.def(false), + /** 弹层标题 */ + title: PropUtils.string.def(''), + /** 是否占满全屏,默认:false */ + fullScreen: PropUtils.bool.def(false), + /** 占满除播放器以外的主体区域,默认:false */ + fillBodySection: PropUtils.bool.def(false), + /** 是否显示头部标题区,默认:true */ + showHeader: PropUtils.bool.def(true), + /** 是否插入到 body 中,默认:true */ + appendToBody: PropUtils.bool.def(true), + /** 是否显示关闭,默认:true */ + closable: PropUtils.bool.def(true), + /** 是否显示返回,默认:false */ + backable: PropUtils.bool.def(false), + /** 在点击返回时自动关闭,默认:false */ + backAutoClose: PropUtils.bool.def(false), + /** 点击蒙层关闭弹窗,默认:true */ + closeOnClickMask: PropUtils.bool.def(true), + /** 蒙层透明度,默认:0.6 */ + maskOpacity: PropUtils.number.def(0.6), + /** 弹层主体样式 */ + contentStyle: PropUtils.objectType().def({}), + /** 是否使用弹出层管理器,集中控制弹窗层级,默认:true */ + usePopperManager: PropUtils.bool.def(true), + /** 窗口尺寸变化时是否重设样式,默认:false */ + updateOnResize: PropUtils.bool.def(false), + /** 弹层主题,默认:default */ + theme: PropUtils.enum().def(PopupTheme.Default), + /** 弹层主体高度 */ + contentHeight: PropUtils.number, + /** 弹层主体使用页面高度百分比,0~1,默认:false */ + contentPercentHeight: PropUtils.oneOfType([Boolean, Number]).def(false), + /** 隐藏 header 的底部边框,默认:false */ + hideHeaderBorder: PropUtils.bool.def(false), + /** 弹层主体背景色 */ + contentBackground: PropUtils.string, + /** 是否使用动画显隐,默认:true */ + useTransition: PropUtils.bool.def(true), + /** + * 是否使用纵向拖拽,默认:false + * 注意,使用拖拽功能,弹窗主体高度为 100%,具体内容高度需要外部组件搭配 drag-vertical 钩子自行计算 + * */ + draggable: PropUtils.bool.def(false), + /** 弹窗主体距离顶部的百分比距离,0~1,默认 0 */ + contentPercentTop: PropUtils.number.def(0), + /** 强制横屏展示 */ + forceHorizontalScreen: PropUtils.bool.def(false), + /** 屏幕横屏下的弹窗位置,默认为 right */ + horizontalScreenPosition: PropUtils.enum().def( + PopupHorizontalScreenPosition.Right, + ), +}); + +export const popupEmits = () => ({ + ...updateModelEmit<'visible', boolean>('visible'), + ...updateModelEmit<'useTransition', boolean>('useTransition'), + /** 进入之后 */ + 'after-enter': emitFunc(), + /** 离开之后 */ + 'after-leave': emitFunc(), + /** 点击返回 */ + 'click-back': emitFunc(), + /** 上下推拽 */ + 'drag-vertical': emitFunc<{ translateY: number }>(), +}); + +export const usePopup = (options: { + props: VueProps; + emit: VueEmit; +}) => { + const { props, emit } = options; + + const { + isVerticalScreenOrientation, + isHorizontalScreenOrientation, + updateScreenOrientationModeManually, + } = useScreenOrientHook({ + autoListen: props.updateOnResize, + }); + + /** 弹层 ref */ + const popupRef = ref(); + /** 弹层主体 ref */ + const popupContentRef = ref(); + /** 弹层主体头部 Ref */ + const popupContentHeaderRef = ref(); + + /** 弹层外层显示状态 */ + const wrapVisible = ref(false); + + /** 主体显示状态 */ + const contentVisible = ref(false); + + /** 主体计算的高度 */ + const contentComputedHeight = ref(); + + /** 主体最大高度 */ + const contentMaxHeight = ref(); + + /** 窗口原高度 */ + const pageOriginHeight = ref(document.documentElement.clientHeight || document.body.clientHeight); + + /** 标识位-初次渲染 */ + const firstPaint = ref(true); + + /** 是否需要"可拖拽"提示框 */ + const needDraggableTip = ref(true); + + /** + * 是否展示"可拖拽"提示框 + * @desc 业务逻辑,配置可拖拽的情况下,第一次打开弹窗时必定展示 + * */ + const draggableTipVisible = computed(() => { + return props.draggable && firstPaint.value && needDraggableTip.value; + }); + + /** 蒙层样式 */ + const popupMaskStyle = computed(() => { + return { + background: `rgba(0, 0, 0, ${props.maskOpacity})`, + }; + }); + + /** 弹层主体渲染高度 */ + const contentRenderHeight = computed(() => { + if ( + props.draggable || + props.fullScreen || + props.forceHorizontalScreen || + isHorizontalScreenOrientation.value + ) { + return '100%'; + } + + if (props.contentHeight) { + return props.contentHeight; + } + + let contentPercentHeight = 0; + if (props.contentPercentHeight === true) { + contentPercentHeight = 0.6; + } else if (typeof props.contentPercentHeight === 'number') { + contentPercentHeight = props.contentPercentHeight; + } + + if (contentPercentHeight) { + return document.documentElement.clientHeight * contentPercentHeight; + } + + return contentComputedHeight.value; + }); + + /** 弹层主体样式 */ + const popupContentStyle = computed(() => { + let style: CSSProperties = {}; + + if (props.contentPercentTop) { + style.top = `${props.contentPercentTop * 100}%`; + } + + if (!isUndefined(contentRenderHeight.value)) { + style.height = + typeof contentRenderHeight.value === 'string' + ? contentRenderHeight.value + : `${contentRenderHeight.value}px`; + } + + if (contentMaxHeight.value) { + style.maxHeight = `${contentMaxHeight.value}px`; + } + + // 如果存在自定义header,则不设置圆角 + if (!props.showHeader) { + style.borderRadius = 'unset'; + } + + if (props.contentBackground) { + style.background = props.contentBackground; + } + + style = Object.assign({}, style, props.contentStyle); + + return style; + }); + + /** 关闭"可拖拽"提示框 */ + function closeDraggableTip() { + needDraggableTip.value = false; + } + + /** 点击蒙层 */ + function onClickMask() { + if (props.closeOnClickMask) { + closePopup(); + } + } + + /** 打开弹层 */ + function openPopup() { + wrapVisible.value = true; + contentVisible.value = true; + updateHeight(); + nextTick(() => { + if (props.usePopperManager && popupRef.value) { + PlvPopperManager.openPopper(popupRef.value); + } + }); + } + + /** 关闭弹层 */ + function closePopup() { + contentVisible.value = false; + emit('update:visible', false); + } + + /** 处理进入动画结束之后 */ + function onAfterEnter() { + emit('update:useTransition', true); + emit('after-enter'); + } + + /** 处理离开动画结束之后 */ + function onAfterLeave() { + wrapVisible.value = false; + emit('update:useTransition', true); + emit('after-leave'); + if (props.draggable) { + const $popupContent = popupRef.value as AlloyFingerTransformHTMLElement; + $popupContent.translateY = 0; + } + } + + /** 处理点击返回 */ + function onClickBack() { + if (props.backAutoClose) { + closePopup(); + } + emit('click-back'); + } + + /** 获取弹窗主体头部的高度 */ + function getPopupContentHeaderHeight() { + return (popupContentHeaderRef.value && popupContentHeaderRef.value.clientHeight) || 50; + } + + /** 绑定 touch 行为 */ + function bindTouchBehavior() { + const $popup = popupRef.value; + const $popupContentHeader = popupContentHeaderRef.value; + + if (!$popup || !$popupContentHeader) return; + + const contentPercentTop = props.contentPercentTop; + const documentHeight = document.documentElement.clientHeight; + const minY = documentHeight * contentPercentTop; + const maxY = documentHeight - minY - getPopupContentHeaderHeight(); + + // 在 $popup 上挂载 css-transform 钩子 + const $transformPanel = Transform($popup); + + new AlloyFinger($popupContentHeader, { + pressMove: evt => { + const translateY = $transformPanel.translateY + evt.deltaY; + if (translateY <= -minY || $transformPanel.translateY > maxY) { + evt.preventDefault(); + return; + } + $transformPanel.translateY = translateY > maxY ? maxY : translateY; + emit('drag-vertical', { translateY }); + evt.preventDefault(); + }, + }); + } + + watch( + () => props.visible, + () => { + if (props.visible) { + openPopup(); + if (props.draggable && firstPaint.value) { + nextTick(() => { + bindTouchBehavior(); + }); + } + } else { + closePopup(); + closeDraggableTip(); + firstPaint.value = false; + } + }, + ); + + // 更新高度信息 + async function updateHeight() { + contentComputedHeight.value = undefined; + contentMaxHeight.value = undefined; + // 手动更新屏幕旋转模式,减少性能开销 + updateScreenOrientationModeManually(); + await nextTick(); + setContentHeight(); + } + + /** + * 设置主题高度 + * 限高,最高不遮盖播放器区域 + * 在安卓手机上,软键盘弹起会导致页面高度变化,如果当前页面高度小于初始高度,popper高度按初始高度计算 + */ + function setContentHeight() { + const popupEl = unref(popupRef); + if (!popupEl) return; + + if ( + props.draggable || + props.fullScreen || + props.forceHorizontalScreen || + isHorizontalScreenOrientation.value + ) { + return; + } + + const ratio = 16 / 9; + const playerHeight = window.innerWidth / ratio; + const currentPageHeight = document.documentElement.clientHeight || document.body.clientHeight; + const isCompressed = currentPageHeight < pageOriginHeight.value; + const bodyClientHeight = isCompressed ? pageOriginHeight.value : popupEl.offsetHeight; + // 高度遮盖播放器,或始终需要占满除播放器以外高度(横屏状态除外,横屏状态没有最大高度,可以遮挡播放器) + const maxHeight = bodyClientHeight - playerHeight; + + contentMaxHeight.value = maxHeight; + if (isVerticalScreenOrientation.value && props.fillBodySection) { + contentComputedHeight.value = maxHeight; + } + } + + /** 若浏览器窗口尺寸变化(多窗口、webview 小窗恢复、软键盘弹出),在弹窗可见情况下,重新调整窗口尺寸 */ + function onPageResize() { + if (!props.visible) { + return; + } + const isFocusInput = + document.activeElement instanceof HTMLTextAreaElement || + document.activeElement instanceof HTMLInputElement; + // 软键盘弹出导致窗口变化 + if (isFocusInput && window.innerHeight < screen.availHeight) { + return; + } + setTimeout(() => { + updateHeight(); + }, 200); + } + + if (props.appendToBody) { + useAppendTo(popupRef); + } + + onMounted(() => { + if (props.updateOnResize) { + window.addEventListener('resize', onPageResize); + } + }); + + onBeforeUnmount(() => { + if (props.updateOnResize) { + window.removeEventListener('resize', onPageResize); + } + }); + + const popupInstance: PopupInstance = { + openPopup, + closePopup, + }; + + return { + wrapVisible, + contentVisible, + popupRef, + popupContentHeaderRef, + popupContentRef, + popupMaskStyle, + popupContentStyle, + popupInstance, + onAfterEnter, + onAfterLeave, + onClickMask, + openPopup, + closePopup, + onClickBack, + + firstPaint, + draggableTipVisible, + closeDraggableTip, + + isVerticalScreen: isVerticalScreenOrientation, + isHorizontalScreen: isHorizontalScreenOrientation, + }; +}; diff --git a/src/components/common-base/rich-text-render/mobile-rich-text-render.vue b/src/components/common-base/rich-text-render/mobile-rich-text-render.vue new file mode 100644 index 0000000..1ee6e23 --- /dev/null +++ b/src/components/common-base/rich-text-render/mobile-rich-text-render.vue @@ -0,0 +1,105 @@ + + + + + + diff --git a/src/components/common-base/rich-text-render/pc-rich-text-render.vue b/src/components/common-base/rich-text-render/pc-rich-text-render.vue new file mode 100644 index 0000000..3c6a13c --- /dev/null +++ b/src/components/common-base/rich-text-render/pc-rich-text-render.vue @@ -0,0 +1,105 @@ + + + + + + diff --git a/src/components/common-base/rich-text-render/use-rich-text-render.ts b/src/components/common-base/rich-text-render/use-rich-text-render.ts new file mode 100644 index 0000000..3dd0679 --- /dev/null +++ b/src/components/common-base/rich-text-render/use-rich-text-render.ts @@ -0,0 +1,24 @@ +import { resizeHtmlContentImg } from '@/assets/utils/string'; +import { PropUtils, VueProps } from '@/assets/utils/vue-utils/props-utils'; +import { computed } from 'vue'; + +/** + * props 配置 + */ +export const richTextRenderProps = () => ({ + /** html 富文本内容 */ + htmlContent: PropUtils.string.def(''), +}); + +export const useRichTextRender = (options: { props: VueProps }) => { + const { props } = options; + + /** 用于渲染的富文本内容 */ + const renderHtmlContent = computed(() => { + return resizeHtmlContentImg(props.htmlContent); + }); + + return { + renderHtmlContent, + }; +}; diff --git a/src/components/common-base/slider-bar/slider-bar.vue b/src/components/common-base/slider-bar/slider-bar.vue new file mode 100644 index 0000000..5f3d0de --- /dev/null +++ b/src/components/common-base/slider-bar/slider-bar.vue @@ -0,0 +1,185 @@ + + + + + + diff --git a/src/components/common-base/slider-bar/use-slider-bar.ts b/src/components/common-base/slider-bar/use-slider-bar.ts new file mode 100644 index 0000000..5f82aa4 --- /dev/null +++ b/src/components/common-base/slider-bar/use-slider-bar.ts @@ -0,0 +1,280 @@ +import { tupleString } from '@/assets/utils/array'; +import { isMobile } from '@/assets/utils/browser'; +import { numberToFixed } from '@/assets/utils/number'; +import { getEventPosition } from '@/assets/utils/utils'; +import { emitFunc, VueEmit } from '@/assets/utils/vue-utils/emit-utils'; +import { PropUtils, useProps, VueProps } from '@/assets/utils/vue-utils/props-utils'; +import { computed, onBeforeUnmount, ref, unref, watch } from 'vue'; +import { CSSProperties } from 'vue/types/jsx'; + +export const sliderBarDirections = tupleString('horizontal', 'vertical'); +export type SliderBarDirection = typeof sliderBarDirections[number]; + +export const sliderBarProps = () => ({ + /** 绑定值 */ + value: PropUtils.number.def(0), + /** hover 时放大滑块 */ + hoverToZoom: PropUtils.bool.def(false), + /** 热区范围 */ + hotAreaSize: PropUtils.number.def(28), + /** 滑块轨道粗细 */ + sliderTrackSize: PropUtils.number.def(6), + /** 隐藏轨道圆角 */ + sliderTrackRadiusHide: PropUtils.bool.def(false), + /** 外层轨道颜色 */ + wrapSliderTrackColor: PropUtils.string.def('rgba(255, 255, 255, .8)'), + /** 内层轨道颜色 */ + innerSliderTrackColor: PropUtils.string.def('#3082FE'), + /** 滑块原点大小 */ + sliderDotSize: PropUtils.number.def(14), + /** 滑块方向 */ + direction: PropUtils.oneOf(sliderBarDirections).def('horizontal'), + /** 最小值 */ + min: PropUtils.number.def(0), + /** 最大值 */ + max: PropUtils.number.def(100), + /** 显示提示 */ + tooltips: PropUtils.bool.def(false), +}); + +export const sliderBarEmits = () => ({ + input: emitFunc(), + change: emitFunc(), + 'drag-change': emitFunc(), +}); + +export const useSliderBar = (options: { + props: VueProps; + emit: VueEmit; +}) => { + const { props, emit } = options; + + /** 当前的进度值 */ + const currentValue = ref(0); + /** 当前是否正在拖拽中 */ + const isDragging = ref(false); + const { hoverToZoom, tooltips } = useProps(props); + + watch( + () => props.value, + () => (currentValue.value = props.value), + { + immediate: true, + }, + ); + watch( + () => unref(currentValue), + () => { + if (unref(currentValue) !== props.value) { + emit('input', unref(currentValue)); + emit('change', unref(currentValue)); + } + }, + ); + + /** 热区样式 */ + const containerStyle = computed(() => { + const styles: CSSProperties = {}; + + switch (props.direction) { + case 'horizontal': + styles.height = `${props.hotAreaSize}px`; + break; + case 'vertical': + styles.width = `${props.hotAreaSize}px`; + break; + } + + return styles; + }); + + /** 外层轨道样式 */ + const wrapTrackStyle = computed(() => { + const styles: CSSProperties = { + background: props.wrapSliderTrackColor, + borderRadius: `${props.sliderTrackSize}px`, + }; + + if (props.sliderTrackRadiusHide) { + styles.borderRadius = 0; + } + + switch (props.direction) { + case 'horizontal': + styles.height = `${props.sliderTrackSize}px`; + break; + case 'vertical': + styles.width = `${props.sliderTrackSize}px`; + break; + } + + return styles; + }); + + /** 内部轨道的长度百分比 */ + const innerTrackLengthPercent = computed(() => { + const percentNum = (100 * (unref(currentValue) - props.min)) / (props.max - props.min); + return `${percentNum > 100 ? 100 : percentNum}%`; + }); + + /** 内部轨道样式 */ + const innerTrackStyle = computed(() => { + const styles: CSSProperties = { + background: props.innerSliderTrackColor, + }; + + switch (props.direction) { + case 'horizontal': + styles.width = unref(innerTrackLengthPercent); + break; + case 'vertical': + styles.height = unref(innerTrackLengthPercent); + break; + } + + return styles; + }); + + /** 点样式 */ + const sliderDotStyle = computed(() => { + const styles: CSSProperties = { + width: `${props.sliderDotSize}px`, + height: `${props.sliderDotSize}px`, + }; + + switch (props.direction) { + case 'horizontal': + styles.left = unref(innerTrackLengthPercent); + break; + case 'vertical': + styles.bottom = unref(innerTrackLengthPercent); + break; + } + + return styles; + }); + + const containerRef = ref(); + + function listenWindowEvent(): void { + removeListenWindowEvent(); + if (isMobile) { + window.addEventListener('touchmove', onMouseMove); + window.addEventListener('touchend', onMouseUp); + window.addEventListener('touchcancel', onMouseUp); + } else { + window.addEventListener('mousemove', onMouseMove); + window.addEventListener('mouseup', onMouseUp); + } + } + + function removeListenWindowEvent(): void { + if (isMobile) { + window.removeEventListener('touchmove', onMouseMove); + window.removeEventListener('touchend', onMouseUp); + window.removeEventListener('touchcancel', onMouseUp); + } else { + window.removeEventListener('mousemove', onMouseMove); + window.removeEventListener('mouseup', onMouseUp); + } + } + + function onMouseDown(event: MouseEvent | TouchEvent): void { + const eventPosition = getEventPosition(event); + let clientNumber = eventPosition.clientX; + if (props.direction === 'vertical') { + clientNumber = eventPosition.clientY; + } + computedValue(clientNumber); + isDragging.value = true; + listenWindowEvent(); + } + + function onMouseMove(event: MouseEvent | TouchEvent): void { + const eventPosition = getEventPosition(event); + let clientNumber = eventPosition.clientX; + if (props.direction === 'vertical') { + clientNumber = eventPosition.clientY; + } + computedValue(clientNumber); + + onTrackMouseMove(event); + } + + function onMouseUp(): void { + isDragging.value = false; + removeListenWindowEvent(); + } + + const trackHoverX = ref(0); + const trackHoverValue = ref(0); + + function onTrackMouseMove(event: MouseEvent | TouchEvent): void { + const containerElem = unref(containerRef); + if (!containerElem) { + return; + } + const bound = containerElem.getBoundingClientRect(); + const eventPosition = getEventPosition(event); + const hoverX = eventPosition.clientX - bound.left; + trackHoverX.value = hoverX >= 0 ? hoverX : 0; + const hoverValue = computedValue(eventPosition.clientX, false); + if (typeof hoverValue !== 'undefined' && hoverValue >= 0) { + trackHoverValue.value = hoverValue; + } + } + + function computedValue(clientNumber: number, setValue = true): number | undefined { + const containerElem = unref(containerRef); + if (!containerElem) { + return; + } + const bound = containerElem.getBoundingClientRect(); + const totalLength = props.direction === 'vertical' ? bound.height : bound.width; + const startPoint = props.direction === 'vertical' ? bound.bottom : bound.left; + let pointLength = clientNumber - startPoint; + if (props.direction === 'vertical' && pointLength > 0) { + return; + } + if (props.direction === 'horizontal' && pointLength < 0) { + return; + } + + pointLength = Math.abs(pointLength); + + let percent = pointLength / totalLength; + if (percent > 1) { + percent = 1; + } else if (percent < 0) { + percent = 0; + } + const newValue = numberToFixed(props.min + (props.max - props.min) * percent); + if (setValue && newValue !== unref(currentValue)) { + currentValue.value = newValue; + emit('drag-change', newValue); + } + + return newValue; + } + + onBeforeUnmount(() => { + removeListenWindowEvent(); + }); + + return { + currentValue, + hoverToZoom, + tooltips, + isDragging, + containerStyle, + wrapTrackStyle, + innerTrackStyle, + sliderDotStyle, + containerRef, + onMouseDown, + onMouseUp, + trackHoverX, + trackHoverValue, + onTrackMouseMove, + }; +}; diff --git a/src/components/common-base/tabs/hooks/types.ts b/src/components/common-base/tabs/hooks/types.ts new file mode 100644 index 0000000..c4c0523 --- /dev/null +++ b/src/components/common-base/tabs/hooks/types.ts @@ -0,0 +1,50 @@ +import { Ref } from 'vue'; + +export type TabNameType = string | number; + +export interface TabPaneDataItem { + /** tab 的标签 */ + label: string; + /** tab 的名称 */ + name: TabNameType; + /** tab 的附加标签 */ + subLabel: string; + /** 是否显示红点 */ + showReminder: boolean; +} + +/** tab 附加数据 */ +export type TabPaneAdditionalData = Pick; + +export interface TabsInstance { + currentTabName: Ref; + /** 设置当前激活的面板 */ + setCurrentTab(name: TabNameType): void; +} + +export interface TabsInjectContext { + /** 上一次的 tab 激活 name */ + prevTabName: Ref; + /** 当前激活的 tab name */ + currentTabName: Ref; + /** 上一次的 tab 激活 index */ + prevTabIndex: Ref; + /** 当前激活的 tab index */ + currentTabIndex: Ref; + /** tab 面板数据列表 */ + tabPaneData: Ref; + /** 设置当前激活面板 */ + setCurrentTab: (name: TabNameType) => void; + /** 切到下一个 tab */ + toNextTab: () => void; + /** 切到上一个 tab */ + toPrevTab: () => void; +} + +/** + * tab 面板对象 + */ +export interface TabPaneInstance { + /** 获取面板数据 */ + getTabPaneData: () => TabPaneDataItem; +} diff --git a/src/components/common-base/tabs/hooks/use-simple-tabs.ts b/src/components/common-base/tabs/hooks/use-simple-tabs.ts new file mode 100644 index 0000000..0640222 --- /dev/null +++ b/src/components/common-base/tabs/hooks/use-simple-tabs.ts @@ -0,0 +1,41 @@ +import { emitFunc, VueEmit } from '@/assets/utils/vue-utils/emit-utils'; +import { PropUtils, VueProps } from '@/assets/utils/vue-utils/props-utils'; + +export interface SimpleTabItem { + /** 文本 */ + label: string; + /** 绑定值 */ + value: string; +} + +export const simpleTabsProps = () => ({ + /** 是否显示边框 */ + border: PropUtils.bool.def(true), + /** 绑定值,支持 v-model */ + value: PropUtils.string.def(''), + /** tab 列表 */ + tabs: PropUtils.array().def([]), +}); + +export const simpleTabsEmits = () => ({ + input: emitFunc(), + 'tab-click': emitFunc(), +}); + +export const useSimpleTabs = (options: { + props: VueProps; + emit: VueEmit; +}) => { + const { props, emit } = options; + + function onClickTab(value: string) { + if (value !== props.value) { + emit('input', value); + } + emit('tab-click', value); + } + + return { + onClickTab, + }; +}; diff --git a/src/components/common-base/tabs/hooks/use-tab-header.ts b/src/components/common-base/tabs/hooks/use-tab-header.ts new file mode 100644 index 0000000..3ba3d53 --- /dev/null +++ b/src/components/common-base/tabs/hooks/use-tab-header.ts @@ -0,0 +1,183 @@ +import { nextTick, onBeforeUnmount, onMounted, Ref, ref, unref, watch } from 'vue'; +import { useTabsInject } from './use-tabs'; +import { useLangStore } from '@/store/use-lang-store'; +import { TabPaneDataItem } from './types'; +import { useWindowResizeListener } from '@/hooks/core/use-window-resize-listener'; + +export const useTabHeader = ( + options: { + /** 点击后滚动到当前 tab,默认:false */ + scrollCurrent?: boolean; + } = {}, +) => { + const { scrollCurrent = false } = options; + const langStore = useLangStore(); + + const { tabPaneData, currentTabName, currentTabIndex, setCurrentTab, toNextTab, toPrevTab } = + useTabsInject(); + + const scrollRef = ref(); + const itemRef = ref([]); + + /** 处理点击节点 */ + function onClickHeaderItem(paneData: TabPaneDataItem) { + if (paneData.name === unref(currentTabName)) { + return; + } + setCurrentTab(paneData.name); + if (scrollCurrent) { + scrollToCurrent(); + } + } + + /** 处理点击 next 箭头 */ + async function onClickNext() { + toNextTab(); + await nextTick(); + if (scrollCurrent) { + scrollToCurrent(); + } + } + + /** 处理点击 prev 箭头 */ + async function onClickPrev() { + toPrevTab(); + await nextTick(); + if (scrollCurrent) { + scrollToCurrent(); + } + } + + /** 当前节点的下横线 left 定位 */ + const currentLineLeft = ref(); + const currentLineRef = ref(); + + /** 滚动到当前 tab */ + function scrollToCurrent() { + const currentItemElem = itemRef.value[currentTabIndex.value]; + const scrollElem = scrollRef.value; + if (currentItemElem && scrollElem) { + const scrollLeft = Math.max( + 0, + currentItemElem.offsetLeft - (scrollElem.offsetWidth - currentItemElem.offsetWidth) / 2, + ); + scrollElem.scrollTo({ + top: 0, + left: scrollLeft, + behavior: 'smooth', + }); + } + } + + /** 计算下横线 left 定位 */ + async function computeCurrentLineLeft() { + await nextTick(); + const currentLineElem = unref(currentLineRef); + const itemElements = unref(itemRef); + const currentIndex = unref(currentTabIndex); + + if (!Array.isArray(itemElements) || !currentLineElem || currentIndex === -1) { + return; + } + + const currentItemElem = itemElements[currentIndex]; + if (!currentItemElem) { + return; + } + + const left = + currentItemElem.offsetLeft + (currentItemElem.offsetWidth - currentLineElem.offsetWidth) / 2; + + if (left !== unref(currentLineLeft)) { + currentLineLeft.value = left; + } + } + + useWindowResizeListener(() => { + setTimeout(() => { + computeCurrentLineLeft(); + }, 5); + }, true); + + watch( + () => [unref(currentTabIndex), unref(tabPaneData), langStore.currentLang], + () => computeCurrentLineLeft(), + { + immediate: true, + }, + ); + + return { + scrollRef, + itemRef, + tabPaneData, + currentTabName, + scrollToCurrent, + onClickHeaderItem, + onClickNext, + onClickPrev, + currentLineLeft, + currentLineRef, + }; +}; + +/** + * Tab 左右箭头 hook + */ +export const useTabHeaderArrow = (options: { + scrollRef: Ref; + tabPaneData: Ref; +}) => { + const { scrollRef, tabPaneData } = options; + + const leftArrowVisible = ref(false); + const rightArrowVisible = ref(false); + + /** 计算箭头显示 */ + function computedArrowVisible() { + const scrollElem = unref(scrollRef); + + if (!scrollElem) return; + + const scrollLeft = Math.ceil(scrollElem.scrollLeft); + if (scrollLeft > 0) { + leftArrowVisible.value = true; + } else { + leftArrowVisible.value = false; + } + + if (scrollLeft < Math.floor(scrollElem.scrollWidth - scrollElem.clientWidth)) { + rightArrowVisible.value = true; + } else { + rightArrowVisible.value = false; + } + } + + watch( + () => unref(tabPaneData), + async () => { + await nextTick(); + computedArrowVisible(); + }, + ); + + onMounted(() => { + computedArrowVisible(); + if (scrollRef.value) { + scrollRef.value.addEventListener('scroll', computedArrowVisible); + } + }); + + onBeforeUnmount(() => { + if (scrollRef.value) { + scrollRef.value.removeEventListener('scroll', computedArrowVisible); + } + }); + + return { + scrollRef, + leftArrowVisible, + rightArrowVisible, + computedArrowVisible, + }; +}; diff --git a/src/components/common-base/tabs/hooks/use-tab-pane.ts b/src/components/common-base/tabs/hooks/use-tab-pane.ts new file mode 100644 index 0000000..6cde49c --- /dev/null +++ b/src/components/common-base/tabs/hooks/use-tab-pane.ts @@ -0,0 +1,102 @@ +/** + * @file 标签页 TabPane hook + */ + +import { PropUtils, useProps, VueProps } from '@/assets/utils/vue-utils/props-utils'; +import { computed, onBeforeMount, ref, unref, watch } from 'vue'; +import { TabNameType, TabPaneDataItem, TabPaneInstance } from './types'; +import { useTabsInject } from './use-tabs'; + +export const tabPaneProps = () => ({ + /** 面板标签名 */ + label: PropUtils.string.def(''), + /** 面板附加标签名 */ + subLabel: PropUtils.string.def(''), + /** 面板名称 */ + name: PropUtils.oneOfType([String, Number]).isRequired, + /** 是否懒加载,默认:false */ + lazyLoad: PropUtils.bool.def(false), + /** 切换到当前面板时重新渲染,优先级高于 lazyLoad,默认:false */ + switchToRefresh: PropUtils.bool.def(false), + /** 显示红点 */ + showReminder: PropUtils.bool.def(false), +}); + +/** + * 判断 vue 实例是否为 + * @param instance 实例 + */ +export const isTabPaneInstance = (instance: unknown): instance is TabPaneInstance => { + const _instance = instance as Partial | undefined; + return typeof _instance?.getTabPaneData === 'function'; +}; + +export const useTabPane = (options: { props: VueProps }) => { + const { props } = options; + const { label, subLabel, name, lazyLoad, switchToRefresh, showReminder } = useProps(props); + const { currentTabName, currentTabIndex, prevTabIndex } = useTabsInject(); + + /** 当前面板是否显示 */ + const paneVisible = computed(() => unref(currentTabName) === unref(name)); + + /** 面板进出动画 */ + const transitionName = computed(() => { + const prevIndexVal = prevTabIndex.value; + const currentIndexVal = currentTabIndex.value; + let name = ''; + + if (prevIndexVal !== -1 && currentIndexVal !== -1) { + name = currentIndexVal > prevIndexVal ? 'g-transition-menu-right' : 'g-transition-menu-left'; + } + + return name; + }); + + /** 获取当前标签页面板的数据 */ + function getTabPaneData(): TabPaneDataItem { + return { + label: unref(label), + subLabel: unref(subLabel), + name: unref(name), + showReminder: unref(showReminder), + }; + } + + /** 是否渲染 slot */ + const renderSlot = ref(false); + + /** 检查渲染状态 */ + function checkRenderStatus() { + if (unref(switchToRefresh)) { + renderSlot.value = unref(currentTabName) === unref(name); + return; + } + + if (!unref(lazyLoad) || unref(currentTabName) === unref(name)) { + renderSlot.value = true; + } + } + + onBeforeMount(() => { + checkRenderStatus(); + }); + + watch( + () => unref(currentTabName), + () => checkRenderStatus(), + ); + + const tabPaneInstance: TabPaneInstance = { + getTabPaneData, + }; + + return { + label, + name, + paneVisible, + transitionName, + getTabPaneData, + renderSlot, + tabPaneInstance, + }; +}; diff --git a/src/components/common-base/tabs/hooks/use-tabs.ts b/src/components/common-base/tabs/hooks/use-tabs.ts new file mode 100644 index 0000000..ce15a91 --- /dev/null +++ b/src/components/common-base/tabs/hooks/use-tabs.ts @@ -0,0 +1,227 @@ +/** + * @file 标签页 Tabs hook + */ + +import { eventBus } from '@/app/app-events'; +import { useVue } from '@/hooks/core/use-vue'; +import { emitFunc, VueEmit } from '@/assets/utils/vue-utils/emit-utils'; +import { PropUtils, useProps, VueProps } from '@/assets/utils/vue-utils/props-utils'; +import { + inject, + InjectionKey, + nextTick, + onMounted, + onUpdated, + provide, + ref, + unref, + watch, +} from 'vue'; +import { + TabNameType, + TabPaneDataItem, + TabPaneInstance, + TabsInjectContext, + TabsInstance, +} from './types'; +import { isTabPaneInstance } from './use-tab-pane'; + +export const tabsProps = () => ({ + /** 激活的面板 name */ + value: PropUtils.oneOfType([String, Number]).def(''), +}); + +export const tabsEmits = () => ({ + input: emitFunc(), +}); + +export const TABS_PROVIDE_KEY: InjectionKey = Symbol('tabsProvideKey'); + +export const useTabsProvide = (context: TabsInjectContext) => { + provide(TABS_PROVIDE_KEY, context); +}; + +export const useTabsInject = (): TabsInjectContext => { + return inject(TABS_PROVIDE_KEY) as TabsInjectContext; +}; + +/** 标签页 tabs hook */ +export const useTabs = (options: { + props: VueProps; + emit: VueEmit; + switchEvent?: string; +}) => { + const { props, emit } = options; + const { value } = useProps(props); + const { getSlot } = useVue(); + + /** 上一次激活的面板 name */ + const prevTabName = ref(''); + /** 当前激活的面板 name */ + const currentTabName = ref(''); + /** 上一刻激活的面板索引 */ + const prevTabIndex = ref(-1); + /** 当前激活的面板索引 */ + const currentTabIndex = ref(-1); + /** 面板数据列表 */ + const tabPaneData = ref([]); + + /** 设置当前激活的面板 */ + function setCurrentTab(name: TabNameType) { + if (name === unref(currentTabName)) { + return; + } + const newIndex = unref(tabPaneData).findIndex(paneData => paneData.name === name); + + if (newIndex === -1) { + return; + } + + prevTabName.value = unref(currentTabName); + prevTabIndex.value = unref(currentTabIndex); + + currentTabName.value = name; + currentTabIndex.value = newIndex; + + emit('input', name); + + if (options.switchEvent) { + eventBus.$emit(options.switchEvent, name); + } + } + + /** 切到下一个 tab */ + function toNextTab() { + // 已是最后一个 + if (currentTabIndex.value >= tabPaneData.value.length - 1) { + return; + } + const nextTabData = tabPaneData.value[currentTabIndex.value + 1]; + nextTabData && setCurrentTab(nextTabData.name); + } + + /** 切到上一个 tab */ + function toPrevTab() { + // 已是最后一个 + if (currentTabIndex.value <= 0) { + return; + } + const prevTabData = tabPaneData.value[currentTabIndex.value - 1]; + prevTabData && setCurrentTab(prevTabData.name); + } + + watch( + () => unref(value), + () => setCurrentTab(unref(value)), + ); + + /** 获取面板实例对象 */ + function getTabPaneInstances() { + const defaultSlot = getSlot(); + + const instances: TabPaneInstance[] = []; + + defaultSlot.forEach(vNode => { + const instance = vNode.componentInstance; + if (isTabPaneInstance(instance)) { + instances.push(instance); + } + }); + + return instances; + } + + /** 获取标签面板数据 */ + function getTabPaneData() { + const panes: TabPaneDataItem[] = []; + const instances = getTabPaneInstances(); + + instances.forEach(instance => { + const panelData = instance.getTabPaneData(); + panes.push(panelData); + }); + + return panes; + } + + /** 更新标签面板数据 */ + async function updateTabPaneData() { + await nextTick(); + const panes = getTabPaneData(); + const paneDataVal = unref(tabPaneData); + + // 是否需要更新 tab 面板数据 + let shouldUpdateTabPaneData = false; + // 是否需要重置到第一个 tab + let shouldSetFirstTab = false; + + if (panes.length !== paneDataVal.length) { + shouldUpdateTabPaneData = true; + } else { + panes.forEach((paneData, index) => { + const oldItem = paneDataVal[index]; + for (const key in paneData) { + const field = key as keyof TabPaneDataItem; + if (paneData[field] !== oldItem[field]) { + shouldUpdateTabPaneData = true; + } + } + }); + } + + if (shouldUpdateTabPaneData) { + if (panes.length !== tabPaneData.value.length) { + shouldSetFirstTab = true; + } + tabPaneData.value = panes; + } + + const currentIndex = panes.findIndex(paneData => paneData.name === unref(currentTabName)); + if (currentIndex === -1 && panes.length) { + shouldSetFirstTab = true; + } + + if (shouldSetFirstTab) { + setCurrentTab(panes[0].name); + } + } + + onMounted(() => { + updateTabPaneData(); + }); + + onUpdated(() => { + updateTabPaneData(); + }); + + useTabsProvide({ + prevTabName, + currentTabName, + prevTabIndex, + currentTabIndex, + tabPaneData, + setCurrentTab, + toNextTab, + toPrevTab, + }); + + const tabsInstance: TabsInstance = { + currentTabName, + setCurrentTab, + }; + + return { + prevTabName, + currentTabName, + prevTabIndex, + currentTabIndex, + setCurrentTab, + toNextTab, + toPrevTab, + + tabPaneData, + getTabPaneData, + updateTabPaneData, + tabsInstance, + }; +}; diff --git a/src/components/common-base/tabs/mobile-menu-tabs/mobile-menu-tab-header.vue b/src/components/common-base/tabs/mobile-menu-tabs/mobile-menu-tab-header.vue new file mode 100644 index 0000000..cc6f36a --- /dev/null +++ b/src/components/common-base/tabs/mobile-menu-tabs/mobile-menu-tab-header.vue @@ -0,0 +1,167 @@ + + + + + + diff --git a/src/components/common-base/tabs/mobile-menu-tabs/mobile-menu-tab-pane.vue b/src/components/common-base/tabs/mobile-menu-tabs/mobile-menu-tab-pane.vue new file mode 100644 index 0000000..5ade0a8 --- /dev/null +++ b/src/components/common-base/tabs/mobile-menu-tabs/mobile-menu-tab-pane.vue @@ -0,0 +1,35 @@ + + + + + + diff --git a/src/components/common-base/tabs/mobile-menu-tabs/mobile-menu-tabs.vue b/src/components/common-base/tabs/mobile-menu-tabs/mobile-menu-tabs.vue new file mode 100644 index 0000000..54d787b --- /dev/null +++ b/src/components/common-base/tabs/mobile-menu-tabs/mobile-menu-tabs.vue @@ -0,0 +1,48 @@ + + + + + + diff --git a/src/components/common-base/tabs/pc-aside-tabs/pc-aside-tab-header.vue b/src/components/common-base/tabs/pc-aside-tabs/pc-aside-tab-header.vue new file mode 100644 index 0000000..1527678 --- /dev/null +++ b/src/components/common-base/tabs/pc-aside-tabs/pc-aside-tab-header.vue @@ -0,0 +1,171 @@ + + + + + + diff --git a/src/components/common-base/tabs/pc-aside-tabs/pc-aside-tab-pane.vue b/src/components/common-base/tabs/pc-aside-tabs/pc-aside-tab-pane.vue new file mode 100644 index 0000000..5c4dbeb --- /dev/null +++ b/src/components/common-base/tabs/pc-aside-tabs/pc-aside-tab-pane.vue @@ -0,0 +1,31 @@ + + + + + + diff --git a/src/components/common-base/tabs/pc-aside-tabs/pc-aside-tabs.vue b/src/components/common-base/tabs/pc-aside-tabs/pc-aside-tabs.vue new file mode 100644 index 0000000..bc8f173 --- /dev/null +++ b/src/components/common-base/tabs/pc-aside-tabs/pc-aside-tabs.vue @@ -0,0 +1,45 @@ + + + + + + diff --git a/src/components/common-base/tabs/pc-normal-tabs/pc-normal-tab-header.vue b/src/components/common-base/tabs/pc-normal-tabs/pc-normal-tab-header.vue new file mode 100644 index 0000000..95513ae --- /dev/null +++ b/src/components/common-base/tabs/pc-normal-tabs/pc-normal-tab-header.vue @@ -0,0 +1,78 @@ + + + + + + diff --git a/src/components/common-base/tabs/pc-normal-tabs/pc-normal-tab-pane.vue b/src/components/common-base/tabs/pc-normal-tabs/pc-normal-tab-pane.vue new file mode 100644 index 0000000..119b128 --- /dev/null +++ b/src/components/common-base/tabs/pc-normal-tabs/pc-normal-tab-pane.vue @@ -0,0 +1,33 @@ + + + + + + diff --git a/src/components/common-base/tabs/pc-normal-tabs/pc-normal-tabs.vue b/src/components/common-base/tabs/pc-normal-tabs/pc-normal-tabs.vue new file mode 100644 index 0000000..dab4e2d --- /dev/null +++ b/src/components/common-base/tabs/pc-normal-tabs/pc-normal-tabs.vue @@ -0,0 +1,23 @@ + + + + diff --git a/src/components/common-base/tabs/portrait-normal-tabs/portrait-normal-tabs.vue b/src/components/common-base/tabs/portrait-normal-tabs/portrait-normal-tabs.vue new file mode 100644 index 0000000..549fa91 --- /dev/null +++ b/src/components/common-base/tabs/portrait-normal-tabs/portrait-normal-tabs.vue @@ -0,0 +1,67 @@ + + + + + diff --git a/src/components/common-business/basic-info/imgs/low-latency-bg-mob.svg b/src/components/common-business/basic-info/imgs/low-latency-bg-mob.svg new file mode 100644 index 0000000..93c92a5 --- /dev/null +++ b/src/components/common-business/basic-info/imgs/low-latency-bg-mob.svg @@ -0,0 +1,119 @@ + + + + icon无延迟-移动端 + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/components/common-business/basic-info/imgs/low-latency-bg.svg b/src/components/common-business/basic-info/imgs/low-latency-bg.svg new file mode 100644 index 0000000..d8d202f --- /dev/null +++ b/src/components/common-business/basic-info/imgs/low-latency-bg.svg @@ -0,0 +1,117 @@ + + + + icon无延迟备份 2 + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/components/common-business/basic-info/mobile-basic-info.vue b/src/components/common-business/basic-info/mobile-basic-info.vue new file mode 100644 index 0000000..c56b658 --- /dev/null +++ b/src/components/common-business/basic-info/mobile-basic-info.vue @@ -0,0 +1,243 @@ + + + + + + diff --git a/src/components/common-business/basic-info/pc-basic-info.vue b/src/components/common-business/basic-info/pc-basic-info.vue new file mode 100644 index 0000000..7d686e8 --- /dev/null +++ b/src/components/common-business/basic-info/pc-basic-info.vue @@ -0,0 +1,250 @@ + + + + + + diff --git a/src/components/common-business/enroll/hooks/use-enroll-dialog.ts b/src/components/common-business/enroll/hooks/use-enroll-dialog.ts new file mode 100644 index 0000000..c161931 --- /dev/null +++ b/src/components/common-business/enroll/hooks/use-enroll-dialog.ts @@ -0,0 +1,70 @@ +import { translate } from '@/assets/lang'; +import { useEnrollStore } from '@/store/use-enroll-store'; +import { computed, ref, unref } from 'vue'; + +/** + * 报名表单实例 + */ +export interface EnrollDialogInstance { + /** 显示报名观看表单弹层 */ + openEnrollForm(): void; +} + +export type EnrollDialogModel = 'form' | 'login'; + +/** + * 报名观看弹窗 hook + */ +export const useEnrollDialog = () => { + const enrollStore = useEnrollStore(); + + /** 弹层是否显示 */ + const dialogVisible = ref(false); + + /** 弹层模式 */ + const dialogModel = ref('form'); + + /** 弹层标题 */ + const dialogTitle = computed(() => { + if (unref(dialogModel) === 'login') { + return translate('enroll.loginTitle'); + } + + return enrollStore.enrollTitle; + }); + + /** 显示报名观看表单弹层 */ + function openEnrollForm() { + dialogModel.value = 'form'; + dialogVisible.value = true; + } + + /** 关闭报名观看表单弹层 */ + function closeEnrollDialog() { + dialogVisible.value = false; + } + + /** 处理点击已报名入口 */ + function onClickEnrolled() { + dialogModel.value = 'login'; + } + + function onClickBack() { + dialogModel.value = 'form'; + } + + const enrollDialogInstance: EnrollDialogInstance = { + openEnrollForm, + }; + + return { + dialogVisible, + dialogTitle, + enrollDialogInstance, + dialogModel, + openEnrollForm, + closeEnrollDialog, + onClickEnrolled, + onClickBack, + }; +}; diff --git a/src/components/common-business/enroll/hooks/use-enroll-enter.ts b/src/components/common-business/enroll/hooks/use-enroll-enter.ts new file mode 100644 index 0000000..0b80cd1 --- /dev/null +++ b/src/components/common-business/enroll/hooks/use-enroll-enter.ts @@ -0,0 +1,22 @@ +import { ref, unref } from 'vue'; +import { EnrollDialogInstance } from './use-enroll-dialog'; + +/** + * 报名观看入口 hook + */ +export const useEnrollEnter = () => { + const dialogRef = ref(); + + /** 处理点击入口 */ + function onClickEnter() { + const dialogInstrance = unref(dialogRef); + if (dialogInstrance) { + dialogInstrance.openEnrollForm(); + } + } + + return { + dialogRef, + onClickEnter, + }; +}; diff --git a/src/components/common-business/enroll/hooks/use-enroll-form.ts b/src/components/common-business/enroll/hooks/use-enroll-form.ts new file mode 100644 index 0000000..85cfaf5 --- /dev/null +++ b/src/components/common-business/enroll/hooks/use-enroll-form.ts @@ -0,0 +1,347 @@ +/* eslint-disable sonarjs/cognitive-complexity */ +import { translate } from '@/assets/lang'; +import { validatePhoneNumber } from '@/assets/utils/validate'; +import { emitFunc, VueEmit } from '@/assets/utils/vue-utils/emit-utils'; +import { ImageVerifyInputInstance } from '@/components/common-base/form/form-image-verify-input/type'; +import { useDialogTipsUtils } from '@/components/common-base/dialog/use-dialog-tips'; +import { toast } from '@/hooks/components/use-toast'; +import { getWatchCore } from '@/core/watch-sdk'; +import { ValidatorRules } from '@/plugins/async-validator'; +import { getAreaSelectNames, isSelectFinish } from '@/plugins/polyv-ui/area-utils'; +import { useEnrollStore } from '@/store/use-enroll-store'; +import { + EnrollAuthType, + EnrollFieldItem, + EnrollFieldType, + EnrollFormContent, + SubmitEnrollError, +} from '@polyv/live-watch-sdk'; +import { computed, reactive, ref } from 'vue'; +import { useCommonStore } from '@/store/use-common-store'; +import { useWatchAppStore } from '@/store/use-watch-app-store'; + +interface EnrollBasicFormData { + /** 验证的手机号 */ + phoneNumber: string; + /** 手机区号 */ + areaCode: string; + /** 图片验证码 */ + imageId: string; + imageCaptcha: string; + /** 短信验证码 */ + smsCode: string; + /** 验证的邮箱地址 */ + email: string; +} + +type EnrollValFormData = Record; + +export const enrollFormEmits = () => ({ + /** 关闭弹层 */ + 'close-dialog': emitFunc(), + /** 点击取消 */ + 'click-cancel': emitFunc(), + /** 点击我已报名 */ + 'click-enrolled': emitFunc(), +}); + +/** + * 报名观看表单填写 hook + */ +export const useEnrollForm = (options: { emit: VueEmit }) => { + const { emit } = options; + + const watchAppStore = useWatchAppStore(); + const enrollStore = useEnrollStore(); + const commonStore = useCommonStore(); + + /** + * 获取字段的表单初始值 + */ + function getInitFormData() { + const data: EnrollValFormData = {}; + + enrollStore.enrollFields.forEach(item => { + if ( + [EnrollFieldType.Checkbox, EnrollFieldType.Upload, EnrollFieldType.Area].includes(item.type) + ) { + data[item.fieldId] = []; + } else if (item.type === EnrollFieldType.Privacy) { + data[item.fieldId] = false; + } else { + data[item.fieldId] = ''; + } + }); + + return data; + } + + const imageVerifyInputRef = ref(); + + /** 填写表单对象 */ + const formData = reactive({ + ...getInitFormData(), + // 手机号 + phoneNumber: '', + // 手机区号 + areaCode: '+86', + // 图片验证码 id + imageId: '', + // 图片验证码 + imageCaptcha: '', + // 短信验证码 + smsCode: '', + // 验证的邮箱地址 + email: '', + }); + + /** 处理手机号码输入框改变 */ + function onPhoneNumberChange(phoneNumber: string) { + formData.phoneNumber = phoneNumber; + } + + /** 处理邮箱输入框改变 */ + function onEmailChange(email: string) { + formData.email = email; + } + + /** 表单验证规则 */ + const formRules = computed(() => { + const rules: ValidatorRules = {}; + + enrollStore.enrollFields.forEach(fieldItem => { + const fieldId = fieldItem.fieldId; + const isRequired = fieldItem.isRequired; + + switch (fieldItem.type) { + case EnrollFieldType.Name: + case EnrollFieldType.Text: + case EnrollFieldType.Radio: + rules[fieldId] = [ + { type: 'string', message: translate('auth.error.improveInfo'), required: isRequired }, + ]; + break; + case EnrollFieldType.Email: + rules[fieldId] = [ + { type: 'string', message: translate('auth.error.improveInfo'), required: isRequired }, + { type: 'email', message: translate('form.error.emailError') }, + ]; + break; + case EnrollFieldType.Checkbox: + case EnrollFieldType.Upload: + rules[fieldId] = [ + { type: 'array', message: translate('auth.error.improveInfo'), required: isRequired }, + ]; + break; + case EnrollFieldType.Area: + rules[fieldId] = [ + { type: 'array', message: translate('auth.error.improveInfo'), required: isRequired }, + { + validator: (rule, val: string[]) => { + if (val.length && !isSelectFinish(val, commonStore.areaData)) { + return [translate('form.error.areaError')]; + } + return []; + }, + }, + ]; + break; + case EnrollFieldType.Privacy: + rules[fieldId] = { + validator: (rule, val: boolean) => { + if (!val) { + return [translate('auth.error.checkProtocol')]; + } + return []; + }, + }; + break; + case EnrollFieldType.Mobile: + // 使用手机号验证 + if (fieldItem.authType === EnrollAuthType.Mobile) { + rules[fieldId] = [ + { + type: 'string', + message: translate('form.error.phoneNumberRequired'), + required: true, + }, + { + validator: () => { + const phoneNumber = formData.phoneNumber; + const areaCode = formData.areaCode; + + if (validatePhoneNumber(phoneNumber, areaCode)) { + return []; + } + + return [translate('form.error.phoneNumberError')]; + }, + }, + ]; + if (enrollStore.smsVerifyEnabled) { + rules.smsCode = [ + { + type: 'string', + message: translate('form.error.smsVerifyRequired'), + required: true, + }, + ]; + } + } + // 使用邮箱验证 + if (fieldItem.authType === EnrollAuthType.Email) { + rules[fieldId] = [ + { + type: 'string', + message: translate('form.error.emailRequired'), + required: isRequired, + }, + { type: 'email', message: translate('form.error.emailError') }, + ]; + } + break; + } + }); + + return rules; + }); + + /** 格式化特殊的字段名称 */ + function formatSpecialName(fieldItem: EnrollFieldItem): string { + let name = fieldItem.name; + if (fieldItem.type === EnrollFieldType.Radio) { + name = `[${translate('form.radio')}] ${name}`; + } + if (fieldItem.type === EnrollFieldType.Checkbox) { + name = `[${translate('form.checkbox')}] ${name}`; + } + return name; + } + + /** + * 处理表单提交 + */ + async function submitForm() { + const watchCore = getWatchCore(); + const content: EnrollFormContent = {}; + const formDataVal = formData as EnrollValFormData; + + const phoneNumber = formData.phoneNumber; + const areaCode = formData.areaCode; + const smsCode = formData.smsCode; + const email = formData.email; + + enrollStore.enrollFields.forEach(fieldItem => { + const fieldId = fieldItem.fieldId; + + switch (fieldItem.type) { + case EnrollFieldType.Name: + case EnrollFieldType.Text: + case EnrollFieldType.Radio: + case EnrollFieldType.Mobile: + case EnrollFieldType.Email: + content[fieldId] = formDataVal[fieldId] as string; + break; + case EnrollFieldType.Checkbox: + case EnrollFieldType.Upload: + content[fieldId] = formDataVal[fieldId] as string[]; + break; + case EnrollFieldType.Area: { + const areaValue = formDataVal[fieldId] as string[]; + const areaPickData = getAreaSelectNames(areaValue, commonStore.areaData).join('/'); + content[fieldId] = areaPickData; + break; + } + case EnrollFieldType.Privacy: + content[fieldId] = '√'; + break; + } + }); + + const result = await watchCore.enroll.submitEnrollForm({ + phoneNumber, + areaCode, + smsCode, + email, + content, + }); + + if (!result.success) { + switch (result.failReason) { + case SubmitEnrollError.SmsCodeVerifyError: + toast.error(translate('enroll.error.smsCodeError')); + break; + case SubmitEnrollError.LackRequired: + default: + toast.error(result.failMessage || '未知错误!'); + break; + } + return; + } + + // 优先判断是否需要审核和审核是否通过 + if (result.auditEnabled && !result.hasAudited) { + toast.success(translate('enroll.auditing')); + emit('close-dialog'); + return; + } + + // 入口报名且报名成功的情况下需要重新安装 watchCore + if (enrollStore.needEnrollByEnter && result.hasEnrolled) { + await watchAppStore.resetUpWatchCore(); + } + + emit('close-dialog'); + } + + function onClickCancel() { + emit('click-cancel'); + } + + function onClickEnrolled() { + emit('click-enrolled'); + } + + return { + EnrollFieldType, + EnrollAuthType, + imageVerifyInputRef, + formData, + formRules, + onPhoneNumberChange, + onEmailChange, + formatSpecialName, + submitForm, + onClickCancel, + onClickEnrolled, + }; +}; + +export const useEnrollCheckMobile = (options: { + /** 获取手机区号 */ + getAreaCode: () => string; +}) => { + const { showDialogTips } = useDialogTipsUtils(); + + /** 失焦检查报名状态 */ + async function blurToCheckStatus(mobileOrEmail: string) { + if (!mobileOrEmail) { + return; + } + + const watchCore = getWatchCore(); + const result = await watchCore.enroll.getEnrollStatus({ + phoneNumber: mobileOrEmail, + email: mobileOrEmail, + areaCode: options.getAreaCode(), + }); + + if (result.hasEnrolled) { + showDialogTips(translate('enroll.enrolledTips')); + } + } + + return { + blurToCheckStatus, + }; +}; diff --git a/src/components/common-business/enroll/hooks/use-enroll-login.ts b/src/components/common-business/enroll/hooks/use-enroll-login.ts new file mode 100644 index 0000000..45c58f9 --- /dev/null +++ b/src/components/common-business/enroll/hooks/use-enroll-login.ts @@ -0,0 +1,141 @@ +import { DEFAULT_PHONE_NUMBER_AREA_CODE } from '@/assets/constants/defaults'; +import { translate } from '@/assets/lang'; +import { validatePhoneNumber } from '@/assets/utils/validate'; +import { emitFunc, VueEmit } from '@/assets/utils/vue-utils/emit-utils'; +import { ImageVerifyInputInstance } from '@/components/common-base/form/form-image-verify-input/type'; +import { toast } from '@/hooks/components/use-toast'; +import { getWatchCore } from '@/core/watch-sdk'; +import { ValidatorRules } from '@/plugins/async-validator'; +import { useEnrollStore } from '@/store/use-enroll-store'; +import { EnrollAuthType } from '@polyv/live-watch-sdk'; +import { computed, reactive, ref } from 'vue'; +import { useWatchAppStore } from '@/store/use-watch-app-store'; + +export const enrollLoginEmits = () => ({ + /** 点击取消 */ + 'click-cancel': emitFunc(), + /** 关闭弹层 */ + 'close-dialog': emitFunc(), +}); + +/** + * 报名观看登录 hook + */ +export const useEnrollLogin = (options: { emit: VueEmit }) => { + const { emit } = options; + + const watchAppStore = useWatchAppStore(); + const enrollStore = useEnrollStore(); + + const imageVerifyInputRef = ref(); + + /** 表单对象 */ + const formData = reactive({ + // 手机号 + phoneNumber: '', + // 区号 + areaCode: DEFAULT_PHONE_NUMBER_AREA_CODE, + // 图片验证码 + imageId: '', + imageCaptcha: '', + // 短信验证码 + smsCode: '', + // 邮箱 + email: '', + }); + + /** 表单验证规则 */ + const formRules = computed(() => { + const rules: ValidatorRules = {}; + + // 手机号验证 + if (enrollStore.enrollAuthType === EnrollAuthType.Mobile) { + rules.phoneNumber = [ + { type: 'string', message: translate('form.error.phoneNumberRequired'), required: true }, + { + validator: () => { + const phoneNumber = formData.phoneNumber; + const areaCode = formData.areaCode; + + if (validatePhoneNumber(phoneNumber, areaCode)) { + return []; + } + + return [translate('form.error.phoneNumberError')]; + }, + }, + ]; + + if (enrollStore.smsVerifyEnabled) { + rules.smsCode = [ + { type: 'string', message: translate('form.error.smsVerifyRequired'), required: true }, + ]; + } + } + + // 邮箱验证 + if (enrollStore.enrollAuthType === EnrollAuthType.Email) { + rules.email = [ + { type: 'string', message: translate('form.error.emailRequired'), required: true }, + { type: 'email', message: translate('form.error.emailError') }, + ]; + } + + return rules; + }); + + /** + * 提交登录表单 + */ + async function submitLoginForm() { + const watchCore = getWatchCore(); + + const result = await watchCore.enroll.loginEnroll({ + phoneNumber: formData.phoneNumber, + areaCode: formData.areaCode, + smsCode: formData.smsCode, + email: formData.email, + }); + + if (!result.success) { + toast.error(result.failMessage || '未知错误!'); + return; + } + + // 未填写报名信息 + if (!result.hasEnrolled) { + let toastMsg = translate('enroll.error.phoneUnenroll'); + if (enrollStore.enrollAuthType === EnrollAuthType.Email) { + toastMsg = translate('enroll.error.emailUnenroll'); + } + toast.error(toastMsg); + return; + } + + // 已填写但报名审核中 + if (result.auditEnabled && !result.hasAudited) { + toast.success(translate('enroll.auditing')); + emit('close-dialog'); + return; + } + + // 入口报名且报名成功的情况下需要重新安装 watchCore + if (enrollStore.needEnrollByEnter && result.hasEnrolled) { + await watchAppStore.resetUpWatchCore(); + } + + emit('close-dialog'); + } + + function onClickCancel() { + emit('click-cancel'); + } + + return { + imageVerifyInputRef, + formData, + formRules, + submitLoginForm, + onClickCancel, + }; +}; diff --git a/src/components/common-business/enroll/mobile-enroll-form.vue b/src/components/common-business/enroll/mobile-enroll-form.vue new file mode 100644 index 0000000..8edb3e5 --- /dev/null +++ b/src/components/common-business/enroll/mobile-enroll-form.vue @@ -0,0 +1,328 @@ + + + + + + diff --git a/src/components/common-business/enroll/mobile-enroll-login.vue b/src/components/common-business/enroll/mobile-enroll-login.vue new file mode 100644 index 0000000..1e3b899 --- /dev/null +++ b/src/components/common-business/enroll/mobile-enroll-login.vue @@ -0,0 +1,111 @@ + + + + + + diff --git a/src/components/common-business/enroll/mobile-enroll-popup.vue b/src/components/common-business/enroll/mobile-enroll-popup.vue new file mode 100644 index 0000000..3ca6a24 --- /dev/null +++ b/src/components/common-business/enroll/mobile-enroll-popup.vue @@ -0,0 +1,44 @@ + + + + diff --git a/src/components/common-business/enroll/mobile-enroll.vue b/src/components/common-business/enroll/mobile-enroll.vue new file mode 100644 index 0000000..8429af7 --- /dev/null +++ b/src/components/common-business/enroll/mobile-enroll.vue @@ -0,0 +1,63 @@ + + + + + + diff --git a/src/components/common-business/enroll/pc-enroll-dialog.vue b/src/components/common-business/enroll/pc-enroll-dialog.vue new file mode 100644 index 0000000..7dafffa --- /dev/null +++ b/src/components/common-business/enroll/pc-enroll-dialog.vue @@ -0,0 +1,41 @@ + + + + diff --git a/src/components/common-business/enroll/pc-enroll-form.vue b/src/components/common-business/enroll/pc-enroll-form.vue new file mode 100644 index 0000000..af87d09 --- /dev/null +++ b/src/components/common-business/enroll/pc-enroll-form.vue @@ -0,0 +1,348 @@ + + + + + + diff --git a/src/components/common-business/enroll/pc-enroll-login.vue b/src/components/common-business/enroll/pc-enroll-login.vue new file mode 100644 index 0000000..8187494 --- /dev/null +++ b/src/components/common-business/enroll/pc-enroll-login.vue @@ -0,0 +1,128 @@ + + + + + + diff --git a/src/components/common-business/enroll/pc-enroll.vue b/src/components/common-business/enroll/pc-enroll.vue new file mode 100644 index 0000000..3ee8d7d --- /dev/null +++ b/src/components/common-business/enroll/pc-enroll.vue @@ -0,0 +1,63 @@ + + + + + + diff --git a/src/components/common-business/lang-switch/mobile-lang-switch.vue b/src/components/common-business/lang-switch/mobile-lang-switch.vue new file mode 100644 index 0000000..367e9dc --- /dev/null +++ b/src/components/common-business/lang-switch/mobile-lang-switch.vue @@ -0,0 +1,48 @@ + + + + diff --git a/src/components/common-business/lang-switch/pc-lang-switch.vue b/src/components/common-business/lang-switch/pc-lang-switch.vue new file mode 100644 index 0000000..23c34b0 --- /dev/null +++ b/src/components/common-business/lang-switch/pc-lang-switch.vue @@ -0,0 +1,183 @@ + + + + + + diff --git a/src/components/common-business/live-booking/hooks/use-live-booking-fail.ts b/src/components/common-business/live-booking/hooks/use-live-booking-fail.ts new file mode 100644 index 0000000..0b83e5b --- /dev/null +++ b/src/components/common-business/live-booking/hooks/use-live-booking-fail.ts @@ -0,0 +1,18 @@ +import { translate } from '@/assets/lang'; +import { toast } from '@/hooks/components/use-toast'; +import { LiveBookingFailReason } from '@polyv/live-watch-sdk'; + +/** + * 提示预约错误原因 + * @param failReason 错误原因 + */ +export function toastBookingFail(failReason: LiveBookingFailReason) { + switch (failReason) { + case LiveBookingFailReason.Unknown: + toast.error(translate('liveBooking.fail')); + break; + case LiveBookingFailReason.VerifyCodeError: + toast.error(translate('liveBooking.smsWrong')); + break; + } +} diff --git a/src/components/common-business/live-booking/hooks/use-live-booking-form.ts b/src/components/common-business/live-booking/hooks/use-live-booking-form.ts new file mode 100644 index 0000000..170f805 --- /dev/null +++ b/src/components/common-business/live-booking/hooks/use-live-booking-form.ts @@ -0,0 +1,122 @@ +/** + * @file (短信)直播预约表单 hook + */ +import { translate } from '@/assets/lang'; +import { getStorageKey } from '@/assets/utils/storage'; +import { validatePhoneNumber } from '@/assets/utils/validate'; +import { toast } from '@/hooks/components/use-toast'; +import { getWatchCore } from '@/core/watch-sdk'; +import { ValidatorRules } from '@/plugins/async-validator'; +import { useLiveBookingStore } from '@/store/use-live-booking-store'; +import { local } from '@just4/storage'; +import { computed, reactive, ref } from 'vue'; +import { LiveBookingFormInstance } from '../types'; +import { toastBookingFail } from './use-live-booking-fail'; + +// local 中的手机号码缓存 key +const LOCAL_PHONE_KEY = getStorageKey('live-booking-phone'); +// local 中的手机区号缓存 key +const LOCAL_AREA_CODE_KEY = getStorageKey('live-booking-area-code'); + +export const useLiveBookingForm = () => { + const liveBookingStore = useLiveBookingStore(); + + /** 直播预约表单数据 */ + const bookingFormData = reactive({ + // 手机号 + phoneNumber: local.get(LOCAL_PHONE_KEY) || '', + // 手机区号 + areaCode: local.get(LOCAL_AREA_CODE_KEY) || '+86', + // 短信验证码 + verifyCode: '', + }); + + /** 直播预约表单验证规则 */ + const bookingFormRules = computed(() => { + return { + phoneNumber: [ + { type: 'string', message: translate('form.error.phoneNumberRequired'), required: true }, + { + validator: () => { + const { phoneNumber, areaCode } = bookingFormData; + + if (validatePhoneNumber(phoneNumber, areaCode)) { + return []; + } + + return [translate('form.error.phoneNumberError')]; + }, + }, + ], + verifyCode: [ + { type: 'string', message: translate('form.error.smsVerifyRequired'), required: true }, + ], + }; + }); + + /** 预约表单是否显示 */ + const bookingFormVisible = ref(false); + + /** 打开弹层 */ + function openBookingForm() { + bookingFormVisible.value = true; + bookingFormData.verifyCode = ''; + } + + /** 提交直播预约表单 */ + async function submitLiveBookingForm() { + const watchCore = getWatchCore(); + const result = await watchCore.liveBooking.submitSmsLiveBooking({ + phoneNumber: bookingFormData.phoneNumber, + areaCode: bookingFormData.areaCode, + verifyCode: bookingFormData.verifyCode, + }); + + if (result.success) { + local.set(LOCAL_PHONE_KEY, bookingFormData.phoneNumber); + local.set(LOCAL_AREA_CODE_KEY, bookingFormData.areaCode); + + toast.success(translate('liveBooking.bookingSuccess')); + liveBookingStore.isSmsLiveBooking = true; + + bookingFormVisible.value = false; + } else { + toastBookingFail(result.failReason); + } + } + + /** 取消预约 */ + async function cancelLiveBooking() { + const watchCore = getWatchCore(); + const result = await watchCore.liveBooking.cancelSmsLiveBooking({ + phoneNumber: bookingFormData.phoneNumber, + areaCode: bookingFormData.areaCode, + }); + + if (result.success) { + local.remove(LOCAL_PHONE_KEY); + local.remove(LOCAL_AREA_CODE_KEY); + + toast.success(translate('liveBooking.cancelSuccess')); + liveBookingStore.isSmsLiveBooking = false; + } else { + toastBookingFail(result.failReason); + } + } + + const liveBookingFormInstance: LiveBookingFormInstance = { + openBookingForm, + submitLiveBookingForm, + cancelLiveBooking, + }; + + return { + bookingFormData, + bookingFormRules, + bookingFormVisible, + openBookingForm, + submitLiveBookingForm, + cancelLiveBooking, + liveBookingFormInstance, + }; +}; diff --git a/src/components/common-business/live-booking/hooks/use-live-booking-wx.ts b/src/components/common-business/live-booking/hooks/use-live-booking-wx.ts new file mode 100644 index 0000000..baeba4a --- /dev/null +++ b/src/components/common-business/live-booking/hooks/use-live-booking-wx.ts @@ -0,0 +1,48 @@ +import { getWatchCore } from '@/core/watch-sdk'; +import { useLiveBookingStore } from '@/store/use-live-booking-store'; +import { ref } from 'vue'; +import { SubscribeInstance } from '../types'; +import { toastBookingFail } from './use-live-booking-fail'; + +export const useLiveBookingWx = () => { + const liveBookingStore = useLiveBookingStore(); + + const subscribeRef = ref(); + + /** 提交微信预约 */ + async function wxSubmitLiveBooking() { + const watchCore = getWatchCore(); + const result = await watchCore.liveBooking.submitWxLiveBooking(); + + if (result.success) { + liveBookingStore.wxBookingCount += 1; + liveBookingStore.isWxLiveBooking = true; + + // 未关注,弹出二维码弹层 + if (!liveBookingStore.isWxSubscribed) { + subscribeRef.value?.openPopup(); + } + } else { + toastBookingFail(result.failReason); + } + } + + /** 取消微信预约 */ + async function wxCancelLiveBooking() { + const watchCore = getWatchCore(); + const result = await watchCore.liveBooking.cancelWxLiveBooking(); + + if (result.success) { + liveBookingStore.wxBookingCount -= 1; + liveBookingStore.isWxLiveBooking = false; + } else { + toastBookingFail(result.failReason); + } + } + + return { + subscribeRef, + wxSubmitLiveBooking, + wxCancelLiveBooking, + }; +}; diff --git a/src/components/common-business/live-booking/imgs/apollo-live-qrcode.jpg b/src/components/common-business/live-booking/imgs/apollo-live-qrcode.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b8985815a28ff08f27de214b50016cb23165da5d GIT binary patch literal 148563 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�f1`x?o-7V!9j3ZM6`7- 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 + + + + + diff --git a/src/components/common-business/live-booking/mobile-live-booking-form-popup.vue b/src/components/common-business/live-booking/mobile-live-booking-form-popup.vue new file mode 100644 index 0000000..ecb5b0c --- /dev/null +++ b/src/components/common-business/live-booking/mobile-live-booking-form-popup.vue @@ -0,0 +1,75 @@ + + + + + + diff --git a/src/components/common-business/live-booking/mobile-live-booking-subscribe-popup.vue b/src/components/common-business/live-booking/mobile-live-booking-subscribe-popup.vue new file mode 100644 index 0000000..d565ec4 --- /dev/null +++ b/src/components/common-business/live-booking/mobile-live-booking-subscribe-popup.vue @@ -0,0 +1,96 @@ + + + + + + diff --git a/src/components/common-business/live-booking/pc-live-booking-button.vue b/src/components/common-business/live-booking/pc-live-booking-button.vue new file mode 100644 index 0000000..5216600 --- /dev/null +++ b/src/components/common-business/live-booking/pc-live-booking-button.vue @@ -0,0 +1,130 @@ + + + + + + diff --git a/src/components/common-business/live-booking/pc-live-booking-form-dialog.vue b/src/components/common-business/live-booking/pc-live-booking-form-dialog.vue new file mode 100644 index 0000000..954da7a --- /dev/null +++ b/src/components/common-business/live-booking/pc-live-booking-form-dialog.vue @@ -0,0 +1,83 @@ + + + + + + diff --git a/src/components/common-business/live-booking/types/index.ts b/src/components/common-business/live-booking/types/index.ts new file mode 100644 index 0000000..1331ad5 --- /dev/null +++ b/src/components/common-business/live-booking/types/index.ts @@ -0,0 +1,21 @@ +/** + * 短信预约表单实例 + */ +export interface LiveBookingFormInstance { + /** 打开表单弹层 */ + openBookingForm: () => void; + /** 提交预约 */ + submitLiveBookingForm: () => Promise; + /** 取消预约 */ + cancelLiveBooking: () => Promise; +} + +/** + * 公众号二维码实例 + */ +export interface SubscribeInstance { + /** 打开公众号二维码弹层 */ + openPopup: (qrcodeUrl?: string) => void; + /** 关闭弹层 */ + closePopup: () => void; +} diff --git a/src/components/common-business/live-count-down/mobile-live-count-down.vue b/src/components/common-business/live-count-down/mobile-live-count-down.vue new file mode 100644 index 0000000..15859be --- /dev/null +++ b/src/components/common-business/live-count-down/mobile-live-count-down.vue @@ -0,0 +1,30 @@ + + + + diff --git a/src/components/common-business/live-count-down/pc-live-count-down.vue b/src/components/common-business/live-count-down/pc-live-count-down.vue new file mode 100644 index 0000000..2a1d566 --- /dev/null +++ b/src/components/common-business/live-count-down/pc-live-count-down.vue @@ -0,0 +1,28 @@ + + + + diff --git a/src/components/common-business/live-count-down/use-live-count-down.ts b/src/components/common-business/live-count-down/use-live-count-down.ts new file mode 100644 index 0000000..100fd4f --- /dev/null +++ b/src/components/common-business/live-count-down/use-live-count-down.ts @@ -0,0 +1,13 @@ +import { useChannelInfoStore } from '@/store/use-channel-info-store'; + +export const useLiveCountDown = () => { + const channelInfoStore = useChannelInfoStore(); + + function onCountDownFinish() { + channelInfoStore.isLiveStartCountDownEnd = true; + } + + return { + onCountDownFinish, + }; +}; diff --git a/src/components/common-business/page-fixed-widgets/fixed-back-top.vue b/src/components/common-business/page-fixed-widgets/fixed-back-top.vue new file mode 100644 index 0000000..ed39d1e --- /dev/null +++ b/src/components/common-business/page-fixed-widgets/fixed-back-top.vue @@ -0,0 +1,56 @@ + + + + + + diff --git a/src/components/common-business/page-fixed-widgets/fixed-web-share.vue b/src/components/common-business/page-fixed-widgets/fixed-web-share.vue new file mode 100644 index 0000000..a6b0cc9 --- /dev/null +++ b/src/components/common-business/page-fixed-widgets/fixed-web-share.vue @@ -0,0 +1,39 @@ + + + + + + diff --git a/src/components/common-business/page-fixed-widgets/page-fixed-widgets.vue b/src/components/common-business/page-fixed-widgets/page-fixed-widgets.vue new file mode 100644 index 0000000..65d8aed --- /dev/null +++ b/src/components/common-business/page-fixed-widgets/page-fixed-widgets.vue @@ -0,0 +1,63 @@ + + + + + + diff --git a/src/components/common-business/page-footer/mobile-page-footer.vue b/src/components/common-business/page-footer/mobile-page-footer.vue new file mode 100644 index 0000000..28c23e3 --- /dev/null +++ b/src/components/common-business/page-footer/mobile-page-footer.vue @@ -0,0 +1,35 @@ + + + + + + diff --git a/src/components/common-business/page-footer/pc-page-footer.vue b/src/components/common-business/page-footer/pc-page-footer.vue new file mode 100644 index 0000000..7263b05 --- /dev/null +++ b/src/components/common-business/page-footer/pc-page-footer.vue @@ -0,0 +1,35 @@ + + + + + + diff --git a/src/components/common-business/page-footer/use-page-footer.ts b/src/components/common-business/page-footer/use-page-footer.ts new file mode 100644 index 0000000..83284e2 --- /dev/null +++ b/src/components/common-business/page-footer/use-page-footer.ts @@ -0,0 +1,41 @@ +/** + * @file 页脚 hook + */ +import { useChannelStore } from '@/store/use-channel-store'; +import { storeDefinitionToRefs } from '@/plugins/pinia/util'; +import { ynToBool } from '@utils-ts/boolean'; +import { changeProtocol } from '@utils-ts/net'; +import { computed, unref } from 'vue'; + +/** 页脚 hook */ +export const usePageFooter = () => { + const { channelDetail } = storeDefinitionToRefs(useChannelStore); + + /** 页脚设置信息 */ + const footerSetting = computed(() => unref(channelDetail)?.footerSetting); + + /** 页脚是否显示 */ + const footerVisible = computed(() => ynToBool(unref(footerSetting)?.showFooterEnabled || 'N')); + + /** 页脚跳转链接 */ + const footerLink = computed(() => { + const setting = unref(footerSetting); + if (!setting) { + return ''; + } + const { footTextLinkProtocol, footTextLinkUrl } = setting; + return changeProtocol(footTextLinkUrl, footTextLinkProtocol); + }); + + /** 页脚文案 */ + const footerText = computed(() => { + return unref(footerSetting)?.footerText || ''; + }); + + return { + footerSetting, + footerVisible, + footerLink, + footerText, + }; +}; diff --git a/src/components/common-business/player/player-audio-live-placeholder.vue b/src/components/common-business/player/player-audio-live-placeholder.vue new file mode 100644 index 0000000..b8896ea --- /dev/null +++ b/src/components/common-business/player/player-audio-live-placeholder.vue @@ -0,0 +1,114 @@ + + + + + + diff --git a/src/components/common-business/player/player-video-placeholder.vue b/src/components/common-business/player/player-video-placeholder.vue new file mode 100644 index 0000000..55cb7b4 --- /dev/null +++ b/src/components/common-business/player/player-video-placeholder.vue @@ -0,0 +1,56 @@ + + + + + + diff --git a/src/components/common-business/risk-confirm-letter/img/no-agree.png b/src/components/common-business/risk-confirm-letter/img/no-agree.png new file mode 100644 index 0000000000000000000000000000000000000000..740c4f696e0535d3fcde068923781f83d5a7d4d6 GIT binary patch literal 38583 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 + + + + + + + + + + + + + diff --git a/src/components/common-business/risk-confirm-letter/pc-risk-confirm-letter.vue b/src/components/common-business/risk-confirm-letter/pc-risk-confirm-letter.vue new file mode 100644 index 0000000..9f9d7a4 --- /dev/null +++ b/src/components/common-business/risk-confirm-letter/pc-risk-confirm-letter.vue @@ -0,0 +1,269 @@ + + + + + diff --git a/src/components/common-business/risk-confirm-letter/use-risk-confirm-letter.ts b/src/components/common-business/risk-confirm-letter/use-risk-confirm-letter.ts new file mode 100644 index 0000000..92624ef --- /dev/null +++ b/src/components/common-business/risk-confirm-letter/use-risk-confirm-letter.ts @@ -0,0 +1,170 @@ +import { computed, ref, reactive, watchEffect } from 'vue'; +import { getWatchCore } from '@/core/watch-sdk'; +import { FinanceRiskConfirmAgreement, FinanceRiskConfirmInfo } from '@polyv/live-watch-sdk'; +import { isMobile } from '@/assets/utils/browser'; +import { toast } from '@/hooks/components/use-toast'; +import { useFinanceStore } from '@/store/use-finance-store'; +import { useWatchAppStore } from '@/store/use-watch-app-store'; + +export enum RiskConfirmLetterRenderMode { + /** 默认展示 */ + DEFAULT = 'default', + /** 预览协议 */ + PREVIEW_AGREEMENT = 'previewAgreement', + /** "不同意"的提示 */ + DISAGREE_TIPS = 'disagreeTips', +} + +enum RiskConfirmAgreeStatus { + DEFAULT = 0, + AGREE = 1, + DISAGREE = 2, +} + +export const useRiskConfirmLetterHook = () => { + const watchAppStore = useWatchAppStore(); + const financeStore = useFinanceStore(); + + const dialogVisible = ref(false); + + /** 风险确认同意状态 */ + const riskConfirmAgreeStatus = ref(RiskConfirmAgreeStatus.DEFAULT); + + /** 观众风险确认信息 */ + const viewerRiskConfirmInfo = ref(null); + + /** 当前预览的协议 */ + const curPreviewAgreement = reactive({ + title: '', + src: '', + }); + + /** 风险确认函-渲染模式 */ + const riskConfirmLetterRenderMode = computed(() => { + if (curPreviewAgreement.src) { + return RiskConfirmLetterRenderMode.PREVIEW_AGREEMENT; + } + + if (riskConfirmAgreeStatus.value === RiskConfirmAgreeStatus.DISAGREE) { + return RiskConfirmLetterRenderMode.DISAGREE_TIPS; + } + + return RiskConfirmLetterRenderMode.DEFAULT; + }); + + const contentWrapperStyle = computed(() => { + if (riskConfirmLetterRenderMode.value === RiskConfirmLetterRenderMode.PREVIEW_AGREEMENT) { + return { + minHeight: '400px', + }; + } + return { + minHeight: '212px', + maxHeight: '212px', + }; + }); + + /** 预览协议 */ + function handlePreviewAgreement(agreement: FinanceRiskConfirmAgreement) { + if (!viewerRiskConfirmInfo.value) return; + + const watchCore = getWatchCore(); + const previewAgreementUrl = watchCore.financeRiskConfirm.getRiskConfirmAgreementContentUrl({ + agreement, + isMobile: isMobile, + }); + + curPreviewAgreement.title = agreement.agreementTitle; + curPreviewAgreement.src = previewAgreementUrl; + } + + /** 预览默认协议 */ + function handlePreviewDefaultAgreement(title: '服务协议' | '隐私协议') { + if (!viewerRiskConfirmInfo.value) return; + + const defaultAgreement = viewerRiskConfirmInfo.value.defaultAgreements.find( + agreement => agreement.agreementTitle === title, + ); + + if (!defaultAgreement) { + console.error(`找不到《${title}》对应的协议内容`); + return; + } + + handlePreviewAgreement(defaultAgreement); + } + + /** 不同意 */ + function handleDisagreeRiskConfirm() { + riskConfirmAgreeStatus.value = RiskConfirmAgreeStatus.DISAGREE; + } + + /** 同意确认 */ + async function handleAgreeRiskConfirm() { + const watchCore = getWatchCore(); + const result = await watchCore.financeRiskConfirm.agreeRiskConfirm(); + + if (result.success) { + dialogVisible.value = false; + riskConfirmAgreeStatus.value = RiskConfirmAgreeStatus.AGREE; + + financeStore.syncRiskConfirm({ + riskConfirmStatus: true, + }); + watchAppStore.recoverConnectLiveWatch(); + } else { + console.error(result.failMessage); + toast.error('同意失败'); + } + } + + /** 重置风险确认函渲染模式 */ + function resetRiskConfirmLetterRenderMode() { + curPreviewAgreement.title = ''; + curPreviewAgreement.src = ''; + + riskConfirmAgreeStatus.value = RiskConfirmAgreeStatus.DEFAULT; + } + + /** + * 初始化观众风险确认信息 + * @desc 需要在获取到观众信息后才能正常使用 + * */ + async function initViewerRiskConfirmInfo() { + const watchCore = getWatchCore(); + const result = await watchCore.financeRiskConfirm.getViewerRiskConfirmInfo(); + if (!result.success) { + console.error(result.failMessage); + toast.error('获取观众风险确认函信息失败'); + return; + } + + viewerRiskConfirmInfo.value = result; + } + + // 副作用监听 + const stopWatchEffect = watchEffect(async () => { + if (!financeStore.riskConfirmEnabled) return; + if (watchAppStore.shouldShowSplash) return; + if (!watchAppStore.liveWatchInited) return; + + await initViewerRiskConfirmInfo(); + dialogVisible.value = true; + stopWatchEffect(); + }); + + return { + dialogVisible, + viewerRiskConfirmInfo, + curPreviewAgreement, + + riskConfirmLetterRenderMode, + contentWrapperStyle, + + resetRiskConfirmLetterRenderMode, + handlePreviewAgreement, + handlePreviewDefaultAgreement, + handleAgreeRiskConfirm, + handleDisagreeRiskConfirm, + }; +}; diff --git a/src/components/common-business/status-tag/mini-status-tag.vue b/src/components/common-business/status-tag/mini-status-tag.vue new file mode 100644 index 0000000..b4721a3 --- /dev/null +++ b/src/components/common-business/status-tag/mini-status-tag.vue @@ -0,0 +1,35 @@ + + + + + + diff --git a/src/components/common-business/status-tag/mobile-status-tag.vue b/src/components/common-business/status-tag/mobile-status-tag.vue new file mode 100644 index 0000000..43d0ee2 --- /dev/null +++ b/src/components/common-business/status-tag/mobile-status-tag.vue @@ -0,0 +1,31 @@ + + + + + diff --git a/src/components/common-business/status-tag/pc-status-tag.vue b/src/components/common-business/status-tag/pc-status-tag.vue new file mode 100644 index 0000000..8f16051 --- /dev/null +++ b/src/components/common-business/status-tag/pc-status-tag.vue @@ -0,0 +1,32 @@ + + + + + diff --git a/src/components/common-business/status-tag/use-status-tag.ts b/src/components/common-business/status-tag/use-status-tag.ts new file mode 100644 index 0000000..92bc6c6 --- /dev/null +++ b/src/components/common-business/status-tag/use-status-tag.ts @@ -0,0 +1,85 @@ +import { translate } from '@/assets/lang'; +import { PropUtils, VueProps } from '@/assets/utils/vue-utils/props-utils'; +import { useChannelStore } from '@/store/use-channel-store'; +import { LiveStatus } from '@polyv/live-watch-sdk'; +import { computed, unref } from 'vue'; + +export const statusTagProps = () => ({ + liveStatus: PropUtils.enum(), +}); + +/** + * 直播状态标签 hook + */ +export const useStatusTag = (options: { props: VueProps }) => { + const { props } = options; + + const channelStore = useChannelStore(); + + const liveStatus = computed(() => { + return props.liveStatus ?? channelStore.liveStatus; + }); + + /** + * 获取直播状态文本 + * @param status 直播状态 + */ + function getLiveStatusText(status: LiveStatus): string { + const tagTexts: Record = { + [LiveStatus.Live]: translate('liveStatus.live'), + [LiveStatus.Waiting]: translate('liveStatus.waiting'), + [LiveStatus.End]: translate('liveStatus.end'), + [LiveStatus.Stop]: translate('liveStatus.stop'), + [LiveStatus.Playback]: translate('liveStatus.playback'), + [LiveStatus.UnStart]: translate('liveStatus.unStart'), + }; + + return tagTexts[status]; + } + + /** + * 直播状态标签文本 + */ + const statusTagText = computed(() => { + return getLiveStatusText(unref(liveStatus)); + }); + + return { + liveStatus, + statusTagText, + }; +}; + +export const useMiniStatusTagStyle = (options: { props: VueProps }) => { + const { props } = options; + + const channelStore = useChannelStore(); + + const liveStatus = computed(() => { + return props.liveStatus ?? channelStore.liveStatus; + }); + + const tagColors: Record = { + [LiveStatus.Live]: 'linear-gradient(150deg, #F06E6E 0%, #E63A3A 100%)', + [LiveStatus.Playback]: 'linear-gradient(152deg, #5ba3ff, #3082fe)', + [LiveStatus.Waiting]: 'linear-gradient(152deg, #abafc0, #73778c)', + [LiveStatus.End]: 'linear-gradient(152deg, #abafc0, #73778c)', + [LiveStatus.Stop]: 'linear-gradient(152deg, #abafc0, #73778c)', + [LiveStatus.UnStart]: 'linear-gradient(152deg, #abafc0, #73778c)', + }; + + /** + * 直播状态标签样式 + */ + const minStatusTagStyle = computed(() => { + const color = tagColors[unref(liveStatus)]; + + return { + background: color, + }; + }); + + return { + minStatusTagStyle, + }; +}; diff --git a/src/components/common-business/web-share-panel/imgs/icon-share-wechat.png b/src/components/common-business/web-share-panel/imgs/icon-share-wechat.png new file mode 100644 index 0000000000000000000000000000000000000000..2e6a3c53b7e77c03a72910cbec5ba502e4eea565 GIT binary patch literal 1301 zcmV+w1?u{VP)4Y6J!GMM4!7jV4WK*++>A#F#*phQy!|4DR47)NZ>2N+B9|O9c{; z-L26;fL}Be5`}^gyAOc`i6Md^l^{_gP%!R~mLg^6erBdFEX&O77HQo3YcuoRbI+dd zIhQcRwdCNMJ1^;1ULajO$Dj#BJPwR;CJf;WGo2yu?<`CE%H)z=Ypd%28p;t=sPW=> zOD%)n2D6I+rI39Dq(PJ<&}U&!Q%8Y&oXr*|L(_!dRbWgl1kl!oa7dDhOXkZy`F;ZW40RSniwL!Ed_tzfa;zJ?GJ^VZT4Bek_v^?z8|y_H-&Nr-`^%y{i) zNJ%8UWE4-6kQxtt%gi;_b%8FEEX@wP8ut`(kS`HZ!Po%ig1dmJ3{h9a6PQj$Z~A-S za*tg*kcfO?PoT}%GGSO?KQ3EjAwK9Yj@#FIzTdZc0AvDz*IaDTp|S4 z6!HhMf;n9}V&quzC0pi07n^O==?;6E9wj0+5ASSfXU5BtM9Vs6wtiwfo4wn=2;epl zVmoJjYO37KEcGNp$H1686jG3-S4oWpH#0Ebnh=5!ueLPvuJ#*$HK%!@BA0&DKI7xl zCds`k#z0(LPDI=9x$lAR`OjV#5$ifKkxwjF6JIog*x#^4GYkMugb%&eT$4VkA}jS6Za_(s?j_%f4)b9ZZ# zbxEJqF>}>w)-^Mg}Hm+v^*mpaVg zr|h6)pmu{-+cC5Otsr7n$wMazxWLTj5O%}L9negbifx27W9few@+HE$ut$3@E2FOo zSahF3rb@;1p_tLCs6M4Lq>AdYAv-OL<~k;~Rus*JRW7mNzS8>#^Y~ZqUYm$g00000 LNkvXXu0mjfb9`*| literal 0 HcmV?d00001 diff --git a/src/components/common-business/web-share-panel/web-share-panel.vue b/src/components/common-business/web-share-panel/web-share-panel.vue new file mode 100644 index 0000000..c2c25b0 --- /dev/null +++ b/src/components/common-business/web-share-panel/web-share-panel.vue @@ -0,0 +1,182 @@ + + + + + + diff --git a/src/components/component-icons/mobile/icons/arrow-down/index.ts b/src/components/component-icons/mobile/icons/arrow-down/index.ts new file mode 100644 index 0000000..fe00365 --- /dev/null +++ b/src/components/component-icons/mobile/icons/arrow-down/index.ts @@ -0,0 +1,22 @@ +/** + * @file ArrowDown Icon + * @author Auto Generated by @polyv/icons-cli + */ + +import { IconBuilder } from '@polyv/icons-vue/icon-builder'; + +export default IconBuilder( + 'arrow-down', + (data) => ` + + + +` +); diff --git a/src/components/component-icons/mobile/icons/arrow-left/index.ts b/src/components/component-icons/mobile/icons/arrow-left/index.ts new file mode 100644 index 0000000..f90e0b7 --- /dev/null +++ b/src/components/component-icons/mobile/icons/arrow-left/index.ts @@ -0,0 +1,22 @@ +/** + * @file ArrowLeft Icon + * @author Auto Generated by @polyv/icons-cli + */ + +import { IconBuilder } from '@polyv/icons-vue/icon-builder'; + +export default IconBuilder( + 'arrow-left', + (data) => ` + + + +` +); diff --git a/src/components/component-icons/mobile/icons/arrow-right/index.ts b/src/components/component-icons/mobile/icons/arrow-right/index.ts new file mode 100644 index 0000000..9528ebc --- /dev/null +++ b/src/components/component-icons/mobile/icons/arrow-right/index.ts @@ -0,0 +1,22 @@ +/** + * @file ArrowRight Icon + * @author Auto Generated by @polyv/icons-cli + */ + +import { IconBuilder } from '@polyv/icons-vue/icon-builder'; + +export default IconBuilder( + 'arrow-right', + (data) => ` + + + +` +); diff --git a/src/components/component-icons/mobile/icons/arrow-up/index.ts b/src/components/component-icons/mobile/icons/arrow-up/index.ts new file mode 100644 index 0000000..b2217e9 --- /dev/null +++ b/src/components/component-icons/mobile/icons/arrow-up/index.ts @@ -0,0 +1,22 @@ +/** + * @file ArrowUp Icon + * @author Auto Generated by @polyv/icons-cli + */ + +import { IconBuilder } from '@polyv/icons-vue/icon-builder'; + +export default IconBuilder( + 'arrow-up', + (data) => ` + + + +` +); diff --git a/src/components/component-icons/mobile/icons/booking/index.ts b/src/components/component-icons/mobile/icons/booking/index.ts new file mode 100644 index 0000000..c7b154e --- /dev/null +++ b/src/components/component-icons/mobile/icons/booking/index.ts @@ -0,0 +1,23 @@ +/** + * @file Booking Icon + * @author Auto Generated by @polyv/icons-cli + */ + +import { IconBuilder } from '@polyv/icons-vue/icon-builder'; + +export default IconBuilder( + 'booking', + (data) => ` + + + +` +); diff --git a/src/components/component-icons/mobile/icons/check-round-fill/index.ts b/src/components/component-icons/mobile/icons/check-round-fill/index.ts new file mode 100644 index 0000000..e87b601 --- /dev/null +++ b/src/components/component-icons/mobile/icons/check-round-fill/index.ts @@ -0,0 +1,22 @@ +/** + * @file CheckRoundFill Icon + * @author Auto Generated by @polyv/icons-cli + */ + +import { IconBuilder } from '@polyv/icons-vue/icon-builder'; + +export default IconBuilder( + 'check-round-fill', + (data) => ` + + + +` +); diff --git a/src/components/component-icons/mobile/icons/check/index.ts b/src/components/component-icons/mobile/icons/check/index.ts new file mode 100644 index 0000000..a322046 --- /dev/null +++ b/src/components/component-icons/mobile/icons/check/index.ts @@ -0,0 +1,22 @@ +/** + * @file Check Icon + * @author Auto Generated by @polyv/icons-cli + */ + +import { IconBuilder } from '@polyv/icons-vue/icon-builder'; + +export default IconBuilder( + 'check', + (data) => ` + + + +` +); diff --git a/src/components/component-icons/mobile/icons/close-round/index.ts b/src/components/component-icons/mobile/icons/close-round/index.ts new file mode 100644 index 0000000..77aecca --- /dev/null +++ b/src/components/component-icons/mobile/icons/close-round/index.ts @@ -0,0 +1,27 @@ +/** + * @file CloseRound Icon + * @author Auto Generated by @polyv/icons-cli + */ + +import { IconBuilder } from '@polyv/icons-vue/icon-builder'; + +export default IconBuilder( + 'close-round', + (data) => ` + + + + +` +); diff --git a/src/components/component-icons/mobile/icons/close/index.ts b/src/components/component-icons/mobile/icons/close/index.ts new file mode 100644 index 0000000..5816d4c --- /dev/null +++ b/src/components/component-icons/mobile/icons/close/index.ts @@ -0,0 +1,22 @@ +/** + * @file Close Icon + * @author Auto Generated by @polyv/icons-cli + */ + +import { IconBuilder } from '@polyv/icons-vue/icon-builder'; + +export default IconBuilder( + 'close', + (data) => ` + + + +` +); diff --git a/src/components/component-icons/mobile/icons/danmu-switch/index.ts b/src/components/component-icons/mobile/icons/danmu-switch/index.ts new file mode 100644 index 0000000..2a228e2 --- /dev/null +++ b/src/components/component-icons/mobile/icons/danmu-switch/index.ts @@ -0,0 +1,23 @@ +/** + * @file DanmuSwitch Icon + * @author Auto Generated by @polyv/icons-cli + */ + +import { IconBuilder } from '@polyv/icons-vue/icon-builder'; + +export default IconBuilder( + 'danmu-switch', + (data) => ` + + + + +` +); diff --git a/src/components/component-icons/mobile/icons/delete/index.ts b/src/components/component-icons/mobile/icons/delete/index.ts new file mode 100644 index 0000000..087ea0d --- /dev/null +++ b/src/components/component-icons/mobile/icons/delete/index.ts @@ -0,0 +1,22 @@ +/** + * @file Delete Icon + * @author Auto Generated by @polyv/icons-cli + */ + +import { IconBuilder } from '@polyv/icons-vue/icon-builder'; + +export default IconBuilder( + 'delete', + (data) => ` + + + +` +); diff --git a/src/components/component-icons/mobile/icons/emotion/index.ts b/src/components/component-icons/mobile/icons/emotion/index.ts new file mode 100644 index 0000000..9a9169b --- /dev/null +++ b/src/components/component-icons/mobile/icons/emotion/index.ts @@ -0,0 +1,22 @@ +/** + * @file Emotion Icon + * @author Auto Generated by @polyv/icons-cli + */ + +import { IconBuilder } from '@polyv/icons-vue/icon-builder'; + +export default IconBuilder( + 'emotion', + (data) => ` + + + +` +); diff --git a/src/components/component-icons/mobile/icons/forbid/index.ts b/src/components/component-icons/mobile/icons/forbid/index.ts new file mode 100644 index 0000000..0ae523b --- /dev/null +++ b/src/components/component-icons/mobile/icons/forbid/index.ts @@ -0,0 +1,22 @@ +/** + * @file Forbid Icon + * @author Auto Generated by @polyv/icons-cli + */ + +import { IconBuilder } from '@polyv/icons-vue/icon-builder'; + +export default IconBuilder( + 'forbid', + (data) => ` + + + +` +); diff --git a/src/components/component-icons/mobile/icons/heart/index.ts b/src/components/component-icons/mobile/icons/heart/index.ts new file mode 100644 index 0000000..bea63f0 --- /dev/null +++ b/src/components/component-icons/mobile/icons/heart/index.ts @@ -0,0 +1,22 @@ +/** + * @file Heart Icon + * @author Auto Generated by @polyv/icons-cli + */ + +import { IconBuilder } from '@polyv/icons-vue/icon-builder'; + +export default IconBuilder( + 'heart', + (data) => ` + + + +` +); diff --git a/src/components/component-icons/mobile/icons/keyboard/index.ts b/src/components/component-icons/mobile/icons/keyboard/index.ts new file mode 100644 index 0000000..cd2f86d --- /dev/null +++ b/src/components/component-icons/mobile/icons/keyboard/index.ts @@ -0,0 +1,22 @@ +/** + * @file Keyboard Icon + * @author Auto Generated by @polyv/icons-cli + */ + +import { IconBuilder } from '@polyv/icons-vue/icon-builder'; + +export default IconBuilder( + 'keyboard', + (data) => ` + + + +` +); diff --git a/src/components/component-icons/mobile/icons/like/index.ts b/src/components/component-icons/mobile/icons/like/index.ts new file mode 100644 index 0000000..fe50be7 --- /dev/null +++ b/src/components/component-icons/mobile/icons/like/index.ts @@ -0,0 +1,22 @@ +/** + * @file Like Icon + * @author Auto Generated by @polyv/icons-cli + */ + +import { IconBuilder } from '@polyv/icons-vue/icon-builder'; + +export default IconBuilder( + 'like', + (data) => ` + + + +` +); diff --git a/src/components/component-icons/mobile/icons/media/index.ts b/src/components/component-icons/mobile/icons/media/index.ts new file mode 100644 index 0000000..977c0eb --- /dev/null +++ b/src/components/component-icons/mobile/icons/media/index.ts @@ -0,0 +1,22 @@ +/** + * @file Media Icon + * @author Auto Generated by @polyv/icons-cli + */ + +import { IconBuilder } from '@polyv/icons-vue/icon-builder'; + +export default IconBuilder( + 'media', + (data) => ` + + + +` +); diff --git a/src/components/component-icons/mobile/icons/message/index.ts b/src/components/component-icons/mobile/icons/message/index.ts new file mode 100644 index 0000000..d472173 --- /dev/null +++ b/src/components/component-icons/mobile/icons/message/index.ts @@ -0,0 +1,22 @@ +/** + * @file Message Icon + * @author Auto Generated by @polyv/icons-cli + */ + +import { IconBuilder } from '@polyv/icons-vue/icon-builder'; + +export default IconBuilder( + 'message', + (data) => ` + + + +` +); diff --git a/src/components/component-icons/mobile/icons/people/index.ts b/src/components/component-icons/mobile/icons/people/index.ts new file mode 100644 index 0000000..88fe585 --- /dev/null +++ b/src/components/component-icons/mobile/icons/people/index.ts @@ -0,0 +1,22 @@ +/** + * @file People Icon + * @author Auto Generated by @polyv/icons-cli + */ + +import { IconBuilder } from '@polyv/icons-vue/icon-builder'; + +export default IconBuilder( + 'people', + (data) => ` + + + +` +); diff --git a/src/components/component-icons/mobile/icons/play-round/index.ts b/src/components/component-icons/mobile/icons/play-round/index.ts new file mode 100644 index 0000000..c66f1b9 --- /dev/null +++ b/src/components/component-icons/mobile/icons/play-round/index.ts @@ -0,0 +1,22 @@ +/** + * @file PlayRound Icon + * @author Auto Generated by @polyv/icons-cli + */ + +import { IconBuilder } from '@polyv/icons-vue/icon-builder'; + +export default IconBuilder( + 'play-round', + (data) => ` + + + +` +); diff --git a/src/components/component-icons/mobile/icons/product/index.ts b/src/components/component-icons/mobile/icons/product/index.ts new file mode 100644 index 0000000..0f45c9e --- /dev/null +++ b/src/components/component-icons/mobile/icons/product/index.ts @@ -0,0 +1,22 @@ +/** + * @file Product Icon + * @author Auto Generated by @polyv/icons-cli + */ + +import { IconBuilder } from '@polyv/icons-vue/icon-builder'; + +export default IconBuilder( + 'product', + (data) => ` + + + +` +); diff --git a/src/components/component-icons/mobile/icons/smiling-face/index.ts b/src/components/component-icons/mobile/icons/smiling-face/index.ts new file mode 100644 index 0000000..5505425 --- /dev/null +++ b/src/components/component-icons/mobile/icons/smiling-face/index.ts @@ -0,0 +1,22 @@ +/** + * @file SmilingFace Icon + * @author Auto Generated by @polyv/icons-cli + */ + +import { IconBuilder } from '@polyv/icons-vue/icon-builder'; + +export default IconBuilder( + 'smiling-face', + (data) => ` + + + +` +); diff --git a/src/components/component-icons/mobile/icons/translate/index.ts b/src/components/component-icons/mobile/icons/translate/index.ts new file mode 100644 index 0000000..1776759 --- /dev/null +++ b/src/components/component-icons/mobile/icons/translate/index.ts @@ -0,0 +1,22 @@ +/** + * @file Translate Icon + * @author Auto Generated by @polyv/icons-cli + */ + +import { IconBuilder } from '@polyv/icons-vue/icon-builder'; + +export default IconBuilder( + 'translate', + (data) => ` + + + +` +); diff --git a/src/components/component-icons/mobile/icons/video-call/index.ts b/src/components/component-icons/mobile/icons/video-call/index.ts new file mode 100644 index 0000000..066397a --- /dev/null +++ b/src/components/component-icons/mobile/icons/video-call/index.ts @@ -0,0 +1,22 @@ +/** + * @file VideoCall Icon + * @author Auto Generated by @polyv/icons-cli + */ + +import { IconBuilder } from '@polyv/icons-vue/icon-builder'; + +export default IconBuilder( + 'video-call', + (data) => ` + + + +` +); diff --git a/src/components/component-icons/mobile/icons/voice-call/index.ts b/src/components/component-icons/mobile/icons/voice-call/index.ts new file mode 100644 index 0000000..b40bd63 --- /dev/null +++ b/src/components/component-icons/mobile/icons/voice-call/index.ts @@ -0,0 +1,22 @@ +/** + * @file VoiceCall Icon + * @author Auto Generated by @polyv/icons-cli + */ + +import { IconBuilder } from '@polyv/icons-vue/icon-builder'; + +export default IconBuilder( + 'voice-call', + (data) => ` + + + +` +); diff --git a/src/components/component-icons/mobile/map.ts b/src/components/component-icons/mobile/map.ts new file mode 100644 index 0000000..5686c42 --- /dev/null +++ b/src/components/component-icons/mobile/map.ts @@ -0,0 +1,30 @@ +/** + * @file All Icon Exporter + * @author Auto Generated by @polyv/icons-cli + */ + +export { default as MobileIconArrowDown } from './icons/arrow-down'; +export { default as MobileIconArrowLeft } from './icons/arrow-left'; +export { default as MobileIconArrowRight } from './icons/arrow-right'; +export { default as MobileIconArrowUp } from './icons/arrow-up'; +export { default as MobileIconBooking } from './icons/booking'; +export { default as MobileIconCheck } from './icons/check'; +export { default as MobileIconCheckRoundFill } from './icons/check-round-fill'; +export { default as MobileIconClose } from './icons/close'; +export { default as MobileIconCloseRound } from './icons/close-round'; +export { default as MobileIconDanmuSwitch } from './icons/danmu-switch'; +export { default as MobileIconDelete } from './icons/delete'; +export { default as MobileIconEmotion } from './icons/emotion'; +export { default as MobileIconForbid } from './icons/forbid'; +export { default as MobileIconHeart } from './icons/heart'; +export { default as MobileIconKeyboard } from './icons/keyboard'; +export { default as MobileIconLike } from './icons/like'; +export { default as MobileIconMedia } from './icons/media'; +export { default as MobileIconMessage } from './icons/message'; +export { default as MobileIconPeople } from './icons/people'; +export { default as MobileIconPlayRound } from './icons/play-round'; +export { default as MobileIconProduct } from './icons/product'; +export { default as MobileIconSmilingFace } from './icons/smiling-face'; +export { default as MobileIconTranslate } from './icons/translate'; +export { default as MobileIconVideoCall } from './icons/video-call'; +export { default as MobileIconVoiceCall } from './icons/voice-call'; diff --git a/src/components/component-icons/pc/icons/apply-video-call/index.ts b/src/components/component-icons/pc/icons/apply-video-call/index.ts new file mode 100644 index 0000000..b8cf592 --- /dev/null +++ b/src/components/component-icons/pc/icons/apply-video-call/index.ts @@ -0,0 +1,27 @@ +/** + * @file ApplyVideoCall Icon + * @author Auto Generated by @polyv/icons-cli + */ + +import { IconBuilder } from '@polyv/icons-vue/icon-builder'; + +export default IconBuilder( + 'apply-video-call', + (data) => ` + + + + + + + +` +); diff --git a/src/components/component-icons/pc/icons/arrow-down/index.ts b/src/components/component-icons/pc/icons/arrow-down/index.ts new file mode 100644 index 0000000..fe00365 --- /dev/null +++ b/src/components/component-icons/pc/icons/arrow-down/index.ts @@ -0,0 +1,22 @@ +/** + * @file ArrowDown Icon + * @author Auto Generated by @polyv/icons-cli + */ + +import { IconBuilder } from '@polyv/icons-vue/icon-builder'; + +export default IconBuilder( + 'arrow-down', + (data) => ` + + + +` +); diff --git a/src/components/component-icons/pc/icons/arrow-left/index.ts b/src/components/component-icons/pc/icons/arrow-left/index.ts new file mode 100644 index 0000000..f90e0b7 --- /dev/null +++ b/src/components/component-icons/pc/icons/arrow-left/index.ts @@ -0,0 +1,22 @@ +/** + * @file ArrowLeft Icon + * @author Auto Generated by @polyv/icons-cli + */ + +import { IconBuilder } from '@polyv/icons-vue/icon-builder'; + +export default IconBuilder( + 'arrow-left', + (data) => ` + + + +` +); diff --git a/src/components/component-icons/pc/icons/arrow-right/index.ts b/src/components/component-icons/pc/icons/arrow-right/index.ts new file mode 100644 index 0000000..9528ebc --- /dev/null +++ b/src/components/component-icons/pc/icons/arrow-right/index.ts @@ -0,0 +1,22 @@ +/** + * @file ArrowRight Icon + * @author Auto Generated by @polyv/icons-cli + */ + +import { IconBuilder } from '@polyv/icons-vue/icon-builder'; + +export default IconBuilder( + 'arrow-right', + (data) => ` + + + +` +); diff --git a/src/components/component-icons/pc/icons/arrow-up/index.ts b/src/components/component-icons/pc/icons/arrow-up/index.ts new file mode 100644 index 0000000..b2217e9 --- /dev/null +++ b/src/components/component-icons/pc/icons/arrow-up/index.ts @@ -0,0 +1,22 @@ +/** + * @file ArrowUp Icon + * @author Auto Generated by @polyv/icons-cli + */ + +import { IconBuilder } from '@polyv/icons-vue/icon-builder'; + +export default IconBuilder( + 'arrow-up', + (data) => ` + + + +` +); diff --git a/src/components/component-icons/pc/icons/booking/index.ts b/src/components/component-icons/pc/icons/booking/index.ts new file mode 100644 index 0000000..c7b154e --- /dev/null +++ b/src/components/component-icons/pc/icons/booking/index.ts @@ -0,0 +1,23 @@ +/** + * @file Booking Icon + * @author Auto Generated by @polyv/icons-cli + */ + +import { IconBuilder } from '@polyv/icons-vue/icon-builder'; + +export default IconBuilder( + 'booking', + (data) => ` + + + +` +); diff --git a/src/components/component-icons/pc/icons/bulletin/index.ts b/src/components/component-icons/pc/icons/bulletin/index.ts new file mode 100644 index 0000000..80aba63 --- /dev/null +++ b/src/components/component-icons/pc/icons/bulletin/index.ts @@ -0,0 +1,22 @@ +/** + * @file Bulletin Icon + * @author Auto Generated by @polyv/icons-cli + */ + +import { IconBuilder } from '@polyv/icons-vue/icon-builder'; + +export default IconBuilder( + 'bulletin', + (data) => ` + + + +` +); diff --git a/src/components/component-icons/pc/icons/caret-down/index.ts b/src/components/component-icons/pc/icons/caret-down/index.ts new file mode 100644 index 0000000..58962db --- /dev/null +++ b/src/components/component-icons/pc/icons/caret-down/index.ts @@ -0,0 +1,22 @@ +/** + * @file CaretDown Icon + * @author Auto Generated by @polyv/icons-cli + */ + +import { IconBuilder } from '@polyv/icons-vue/icon-builder'; + +export default IconBuilder( + 'caret-down', + (data) => ` + + + +` +); diff --git a/src/components/component-icons/pc/icons/caret-left/index.ts b/src/components/component-icons/pc/icons/caret-left/index.ts new file mode 100644 index 0000000..0b50c8f --- /dev/null +++ b/src/components/component-icons/pc/icons/caret-left/index.ts @@ -0,0 +1,22 @@ +/** + * @file CaretLeft Icon + * @author Auto Generated by @polyv/icons-cli + */ + +import { IconBuilder } from '@polyv/icons-vue/icon-builder'; + +export default IconBuilder( + 'caret-left', + (data) => ` + + + +` +); diff --git a/src/components/component-icons/pc/icons/caret-right/index.ts b/src/components/component-icons/pc/icons/caret-right/index.ts new file mode 100644 index 0000000..ae81b88 --- /dev/null +++ b/src/components/component-icons/pc/icons/caret-right/index.ts @@ -0,0 +1,22 @@ +/** + * @file CaretRight Icon + * @author Auto Generated by @polyv/icons-cli + */ + +import { IconBuilder } from '@polyv/icons-vue/icon-builder'; + +export default IconBuilder( + 'caret-right', + (data) => ` + + + +` +); diff --git a/src/components/component-icons/pc/icons/caret-up/index.ts b/src/components/component-icons/pc/icons/caret-up/index.ts new file mode 100644 index 0000000..7c135d6 --- /dev/null +++ b/src/components/component-icons/pc/icons/caret-up/index.ts @@ -0,0 +1,22 @@ +/** + * @file CaretUp Icon + * @author Auto Generated by @polyv/icons-cli + */ + +import { IconBuilder } from '@polyv/icons-vue/icon-builder'; + +export default IconBuilder( + 'caret-up', + (data) => ` + + + +` +); diff --git a/src/components/component-icons/pc/icons/check-round-fill/index.ts b/src/components/component-icons/pc/icons/check-round-fill/index.ts new file mode 100644 index 0000000..e87b601 --- /dev/null +++ b/src/components/component-icons/pc/icons/check-round-fill/index.ts @@ -0,0 +1,22 @@ +/** + * @file CheckRoundFill Icon + * @author Auto Generated by @polyv/icons-cli + */ + +import { IconBuilder } from '@polyv/icons-vue/icon-builder'; + +export default IconBuilder( + 'check-round-fill', + (data) => ` + + + +` +); diff --git a/src/components/component-icons/pc/icons/check/index.ts b/src/components/component-icons/pc/icons/check/index.ts new file mode 100644 index 0000000..a322046 --- /dev/null +++ b/src/components/component-icons/pc/icons/check/index.ts @@ -0,0 +1,22 @@ +/** + * @file Check Icon + * @author Auto Generated by @polyv/icons-cli + */ + +import { IconBuilder } from '@polyv/icons-vue/icon-builder'; + +export default IconBuilder( + 'check', + (data) => ` + + + +` +); diff --git a/src/components/component-icons/pc/icons/close-round/index.ts b/src/components/component-icons/pc/icons/close-round/index.ts new file mode 100644 index 0000000..77aecca --- /dev/null +++ b/src/components/component-icons/pc/icons/close-round/index.ts @@ -0,0 +1,27 @@ +/** + * @file CloseRound Icon + * @author Auto Generated by @polyv/icons-cli + */ + +import { IconBuilder } from '@polyv/icons-vue/icon-builder'; + +export default IconBuilder( + 'close-round', + (data) => ` + + + + +` +); diff --git a/src/components/component-icons/pc/icons/close/index.ts b/src/components/component-icons/pc/icons/close/index.ts new file mode 100644 index 0000000..be2561a --- /dev/null +++ b/src/components/component-icons/pc/icons/close/index.ts @@ -0,0 +1,22 @@ +/** + * @file Close Icon + * @author Auto Generated by @polyv/icons-cli + */ + +import { IconBuilder } from '@polyv/icons-vue/icon-builder'; + +export default IconBuilder( + 'close', + (data) => ` + + + +` +); diff --git a/src/components/component-icons/pc/icons/device-setting/index.ts b/src/components/component-icons/pc/icons/device-setting/index.ts new file mode 100644 index 0000000..1605e91 --- /dev/null +++ b/src/components/component-icons/pc/icons/device-setting/index.ts @@ -0,0 +1,30 @@ +/** + * @file DeviceSetting Icon + * @author Auto Generated by @polyv/icons-cli + */ + +import { IconBuilder } from '@polyv/icons-vue/icon-builder'; + +export default IconBuilder( + 'device-setting', + (data) => ` + + + + + + + + + + + +` +); diff --git a/src/components/component-icons/pc/icons/emotion/index.ts b/src/components/component-icons/pc/icons/emotion/index.ts new file mode 100644 index 0000000..2a2156e --- /dev/null +++ b/src/components/component-icons/pc/icons/emotion/index.ts @@ -0,0 +1,22 @@ +/** + * @file Emotion Icon + * @author Auto Generated by @polyv/icons-cli + */ + +import { IconBuilder } from '@polyv/icons-vue/icon-builder'; + +export default IconBuilder( + 'emotion', + (data) => ` + + + +` +); diff --git a/src/components/component-icons/pc/icons/feedback/index.ts b/src/components/component-icons/pc/icons/feedback/index.ts new file mode 100644 index 0000000..5e5f1a4 --- /dev/null +++ b/src/components/component-icons/pc/icons/feedback/index.ts @@ -0,0 +1,22 @@ +/** + * @file Feedback Icon + * @author Auto Generated by @polyv/icons-cli + */ + +import { IconBuilder } from '@polyv/icons-vue/icon-builder'; + +export default IconBuilder( + 'feedback', + (data) => ` + + + +` +); diff --git a/src/components/component-icons/pc/icons/forbid/index.ts b/src/components/component-icons/pc/icons/forbid/index.ts new file mode 100644 index 0000000..0ae523b --- /dev/null +++ b/src/components/component-icons/pc/icons/forbid/index.ts @@ -0,0 +1,22 @@ +/** + * @file Forbid Icon + * @author Auto Generated by @polyv/icons-cli + */ + +import { IconBuilder } from '@polyv/icons-vue/icon-builder'; + +export default IconBuilder( + 'forbid', + (data) => ` + + + +` +); diff --git a/src/components/component-icons/pc/icons/hang-up/index.ts b/src/components/component-icons/pc/icons/hang-up/index.ts new file mode 100644 index 0000000..1c91329 --- /dev/null +++ b/src/components/component-icons/pc/icons/hang-up/index.ts @@ -0,0 +1,27 @@ +/** + * @file HangUp Icon + * @author Auto Generated by @polyv/icons-cli + */ + +import { IconBuilder } from '@polyv/icons-vue/icon-builder'; + +export default IconBuilder( + 'hang-up', + (data) => ` + + + + + + + +` +); diff --git a/src/components/component-icons/pc/icons/lang/index.ts b/src/components/component-icons/pc/icons/lang/index.ts new file mode 100644 index 0000000..152c8a5 --- /dev/null +++ b/src/components/component-icons/pc/icons/lang/index.ts @@ -0,0 +1,22 @@ +/** + * @file Lang Icon + * @author Auto Generated by @polyv/icons-cli + */ + +import { IconBuilder } from '@polyv/icons-vue/icon-builder'; + +export default IconBuilder( + 'lang', + (data) => ` + + + +` +); diff --git a/src/components/component-icons/pc/icons/media/index.ts b/src/components/component-icons/pc/icons/media/index.ts new file mode 100644 index 0000000..c19cb38 --- /dev/null +++ b/src/components/component-icons/pc/icons/media/index.ts @@ -0,0 +1,22 @@ +/** + * @file Media Icon + * @author Auto Generated by @polyv/icons-cli + */ + +import { IconBuilder } from '@polyv/icons-vue/icon-builder'; + +export default IconBuilder( + 'media', + (data) => ` + + + +` +); diff --git a/src/components/component-icons/pc/icons/people/index.ts b/src/components/component-icons/pc/icons/people/index.ts new file mode 100644 index 0000000..38353b5 --- /dev/null +++ b/src/components/component-icons/pc/icons/people/index.ts @@ -0,0 +1,22 @@ +/** + * @file People Icon + * @author Auto Generated by @polyv/icons-cli + */ + +import { IconBuilder } from '@polyv/icons-vue/icon-builder'; + +export default IconBuilder( + 'people', + (data) => ` + + + +` +); diff --git a/src/components/component-icons/pc/icons/pic/index.ts b/src/components/component-icons/pc/icons/pic/index.ts new file mode 100644 index 0000000..1a90839 --- /dev/null +++ b/src/components/component-icons/pc/icons/pic/index.ts @@ -0,0 +1,22 @@ +/** + * @file Pic Icon + * @author Auto Generated by @polyv/icons-cli + */ + +import { IconBuilder } from '@polyv/icons-vue/icon-builder'; + +export default IconBuilder( + 'pic', + (data) => ` + + + +` +); diff --git a/src/components/component-icons/pc/icons/picture/index.ts b/src/components/component-icons/pc/icons/picture/index.ts new file mode 100644 index 0000000..9790c0f --- /dev/null +++ b/src/components/component-icons/pc/icons/picture/index.ts @@ -0,0 +1,22 @@ +/** + * @file Picture Icon + * @author Auto Generated by @polyv/icons-cli + */ + +import { IconBuilder } from '@polyv/icons-vue/icon-builder'; + +export default IconBuilder( + 'picture', + (data) => ` + + + +` +); diff --git a/src/components/component-icons/pc/icons/play-round/index.ts b/src/components/component-icons/pc/icons/play-round/index.ts new file mode 100644 index 0000000..4ea18d4 --- /dev/null +++ b/src/components/component-icons/pc/icons/play-round/index.ts @@ -0,0 +1,22 @@ +/** + * @file PlayRound Icon + * @author Auto Generated by @polyv/icons-cli + */ + +import { IconBuilder } from '@polyv/icons-vue/icon-builder'; + +export default IconBuilder( + 'play-round', + (data) => ` + + + +` +); diff --git a/src/components/component-icons/pc/icons/set-nick/index.ts b/src/components/component-icons/pc/icons/set-nick/index.ts new file mode 100644 index 0000000..6cd5e52 --- /dev/null +++ b/src/components/component-icons/pc/icons/set-nick/index.ts @@ -0,0 +1,22 @@ +/** + * @file SetNick Icon + * @author Auto Generated by @polyv/icons-cli + */ + +import { IconBuilder } from '@polyv/icons-vue/icon-builder'; + +export default IconBuilder( + 'set-nick', + (data) => ` + + + +` +); diff --git a/src/components/component-icons/pc/icons/share/index.ts b/src/components/component-icons/pc/icons/share/index.ts new file mode 100644 index 0000000..fcf9415 --- /dev/null +++ b/src/components/component-icons/pc/icons/share/index.ts @@ -0,0 +1,22 @@ +/** + * @file Share Icon + * @author Auto Generated by @polyv/icons-cli + */ + +import { IconBuilder } from '@polyv/icons-vue/icon-builder'; + +export default IconBuilder( + 'share', + (data) => ` + + + +` +); diff --git a/src/components/component-icons/pc/icons/tips/index.ts b/src/components/component-icons/pc/icons/tips/index.ts new file mode 100644 index 0000000..4c9b2f0 --- /dev/null +++ b/src/components/component-icons/pc/icons/tips/index.ts @@ -0,0 +1,22 @@ +/** + * @file Tips Icon + * @author Auto Generated by @polyv/icons-cli + */ + +import { IconBuilder } from '@polyv/icons-vue/icon-builder'; + +export default IconBuilder( + 'tips', + (data) => ` + + + +` +); diff --git a/src/components/component-icons/pc/icons/translate/index.ts b/src/components/component-icons/pc/icons/translate/index.ts new file mode 100644 index 0000000..1776759 --- /dev/null +++ b/src/components/component-icons/pc/icons/translate/index.ts @@ -0,0 +1,22 @@ +/** + * @file Translate Icon + * @author Auto Generated by @polyv/icons-cli + */ + +import { IconBuilder } from '@polyv/icons-vue/icon-builder'; + +export default IconBuilder( + 'translate', + (data) => ` + + + +` +); diff --git a/src/components/component-icons/pc/icons/video-call/index.ts b/src/components/component-icons/pc/icons/video-call/index.ts new file mode 100644 index 0000000..066397a --- /dev/null +++ b/src/components/component-icons/pc/icons/video-call/index.ts @@ -0,0 +1,22 @@ +/** + * @file VideoCall Icon + * @author Auto Generated by @polyv/icons-cli + */ + +import { IconBuilder } from '@polyv/icons-vue/icon-builder'; + +export default IconBuilder( + 'video-call', + (data) => ` + + + +` +); diff --git a/src/components/component-icons/pc/icons/voice-call/index.ts b/src/components/component-icons/pc/icons/voice-call/index.ts new file mode 100644 index 0000000..b40bd63 --- /dev/null +++ b/src/components/component-icons/pc/icons/voice-call/index.ts @@ -0,0 +1,22 @@ +/** + * @file VoiceCall Icon + * @author Auto Generated by @polyv/icons-cli + */ + +import { IconBuilder } from '@polyv/icons-vue/icon-builder'; + +export default IconBuilder( + 'voice-call', + (data) => ` + + + +` +); diff --git a/src/components/component-icons/pc/icons/warning-round-fill/index.ts b/src/components/component-icons/pc/icons/warning-round-fill/index.ts new file mode 100644 index 0000000..105675b --- /dev/null +++ b/src/components/component-icons/pc/icons/warning-round-fill/index.ts @@ -0,0 +1,22 @@ +/** + * @file WarningRoundFill Icon + * @author Auto Generated by @polyv/icons-cli + */ + +import { IconBuilder } from '@polyv/icons-vue/icon-builder'; + +export default IconBuilder( + 'warning-round-fill', + (data) => ` + + + +` +); diff --git a/src/components/component-icons/pc/map.ts b/src/components/component-icons/pc/map.ts new file mode 100644 index 0000000..b962723 --- /dev/null +++ b/src/components/component-icons/pc/map.ts @@ -0,0 +1,38 @@ +/** + * @file All Icon Exporter + * @author Auto Generated by @polyv/icons-cli + */ + +export { default as PcIconApplyVideoCall } from './icons/apply-video-call'; +export { default as PcIconArrowDown } from './icons/arrow-down'; +export { default as PcIconArrowLeft } from './icons/arrow-left'; +export { default as PcIconArrowRight } from './icons/arrow-right'; +export { default as PcIconArrowUp } from './icons/arrow-up'; +export { default as PcIconBooking } from './icons/booking'; +export { default as PcIconBulletin } from './icons/bulletin'; +export { default as PcIconCaretDown } from './icons/caret-down'; +export { default as PcIconCaretLeft } from './icons/caret-left'; +export { default as PcIconCaretRight } from './icons/caret-right'; +export { default as PcIconCaretUp } from './icons/caret-up'; +export { default as PcIconCheck } from './icons/check'; +export { default as PcIconCheckRoundFill } from './icons/check-round-fill'; +export { default as PcIconClose } from './icons/close'; +export { default as PcIconCloseRound } from './icons/close-round'; +export { default as PcIconDeviceSetting } from './icons/device-setting'; +export { default as PcIconEmotion } from './icons/emotion'; +export { default as PcIconFeedback } from './icons/feedback'; +export { default as PcIconForbid } from './icons/forbid'; +export { default as PcIconHangUp } from './icons/hang-up'; +export { default as PcIconLang } from './icons/lang'; +export { default as PcIconMedia } from './icons/media'; +export { default as PcIconPeople } from './icons/people'; +export { default as PcIconPic } from './icons/pic'; +export { default as PcIconPicture } from './icons/picture'; +export { default as PcIconPlayRound } from './icons/play-round'; +export { default as PcIconSetNick } from './icons/set-nick'; +export { default as PcIconShare } from './icons/share'; +export { default as PcIconTips } from './icons/tips'; +export { default as PcIconTranslate } from './icons/translate'; +export { default as PcIconVideoCall } from './icons/video-call'; +export { default as PcIconVoiceCall } from './icons/voice-call'; +export { default as PcIconWarningRoundFill } from './icons/warning-round-fill'; diff --git a/src/components/page-splash-common/auth/auth-code/mobile-auth-code.vue b/src/components/page-splash-common/auth/auth-code/mobile-auth-code.vue new file mode 100644 index 0000000..c2327fd --- /dev/null +++ b/src/components/page-splash-common/auth/auth-code/mobile-auth-code.vue @@ -0,0 +1,110 @@ + + + + + + diff --git a/src/components/page-splash-common/auth/auth-code/pc-auth-code.vue b/src/components/page-splash-common/auth/auth-code/pc-auth-code.vue new file mode 100644 index 0000000..b597d29 --- /dev/null +++ b/src/components/page-splash-common/auth/auth-code/pc-auth-code.vue @@ -0,0 +1,132 @@ + + + + + + diff --git a/src/components/page-splash-common/auth/auth-code/use-auth-code.ts b/src/components/page-splash-common/auth/auth-code/use-auth-code.ts new file mode 100644 index 0000000..02961e6 --- /dev/null +++ b/src/components/page-splash-common/auth/auth-code/use-auth-code.ts @@ -0,0 +1,93 @@ +import { translate } from '@/assets/lang'; +import { isFormItemInstance } from '@/components/common-base/form/hooks/use-form-item'; +import { getWatchCore } from '@/core/watch-sdk'; +import { ValidatorRules } from '@/plugins/async-validator'; +import { AuthSettingItemCode } from '@polyv/live-watch-sdk'; +import { computed, reactive, ref, unref } from 'vue'; +import { useAuthButtonInject } from '../hooks/use-auth-button'; +import { useAuthCommon, useAuthProtocol } from '../hooks/use-auth-common'; + +/** 观看条件:验证码 hook */ +export const useAuthCode = () => { + const { authItem } = useAuthButtonInject(onClickAuthButton); + + /** 弹层是否显示 */ + const dialogVisible = ref(false); + + /** 弹层标题 */ + const dialogTitle = computed(() => authItem.codeAuthTips); + + /** 表单对象 */ + const formData = reactive({ + code: '', + checkProtocol: false, + }); + + const { protocolContent, protocolFormRules } = useAuthProtocol({ + authItem, + formData, + }); + + /** 处理点击授权入口按钮 */ + function onClickAuthButton(): void { + dialogVisible.value = true; + formData.code = ''; + formData.checkProtocol = false; + } + + /** 处理点击取消 */ + function onClickCancel(): void { + dialogVisible.value = false; + } + + /** 二维码图片地址 */ + const qrcodeImg = computed(() => authItem.qcodeImg); + + /** 二维码提示文案 */ + const qrcodeTips = computed(() => authItem.qcodeTips); + + const formRules = computed(() => { + return { + code: { type: 'string', message: translate('auth.error.codeEmpty'), required: true }, + ...unref(protocolFormRules), + }; + }); + + const { failMessage, handleAuthVerifySuccess, handleAuthVerifyFail } = useAuthCommon(); + const formItemRef = ref(); + + /** 提交授权表单 */ + async function submitAuth() { + const watchCore = getWatchCore(); + const result = await watchCore.auth.verifyCodeAuth({ + code: formData.code, + }); + + if (result.success) { + dialogVisible.value = false; + handleAuthVerifySuccess(result); + } else { + handleAuthVerifyFail(result); + + // 设置表单的异常提示 + const formItemInstance = unref(formItemRef); + if (failMessage.value && isFormItemInstance(formItemInstance)) { + formItemInstance.setErrorMessage(failMessage.value); + } + } + } + + return { + dialogVisible, + dialogTitle, + qrcodeImg, + qrcodeTips, + protocolContent, + formData, + formRules, + onClickCancel, + submitAuth, + failMessage, + formItemRef, + }; +}; diff --git a/src/components/page-splash-common/auth/auth-custom/auth-custom.vue b/src/components/page-splash-common/auth/auth-custom/auth-custom.vue new file mode 100644 index 0000000..94d0e94 --- /dev/null +++ b/src/components/page-splash-common/auth/auth-custom/auth-custom.vue @@ -0,0 +1,10 @@ + + + + diff --git a/src/components/page-splash-common/auth/auth-custom/use-auth-custom.ts b/src/components/page-splash-common/auth/auth-custom/use-auth-custom.ts new file mode 100644 index 0000000..0ff0f72 --- /dev/null +++ b/src/components/page-splash-common/auth/auth-custom/use-auth-custom.ts @@ -0,0 +1,51 @@ +import { getWatchCore } from '@/core/watch-sdk'; +import { AuthSettingItemCustom } from '@polyv/live-watch-sdk'; +import { useAuthButtonInject } from '../hooks/use-auth-button'; +import { useAuthCommon } from '../hooks/use-auth-common'; + +/** + * 自定义授权操作 hook + */ +export const useAuthCustomAction = () => { + const { handleAuthVerifySuccess, handleAuthVerifyFail } = useAuthCommon(); + + /** 跳转到自定义授权地址 */ + async function redirectCustomAuthUrl() { + const watchCore = getWatchCore(); + await watchCore.auth.redirectCustomAuthUrl(); + } + + /** 允许验证自定义授权 */ + async function allowToVerifyCustomAuth(): Promise { + const watchCore = getWatchCore(); + return watchCore.auth.allowToVerifyCustomAuth(); + } + + /** 验证自定义授权 */ + async function verifyAuthCustom() { + const watchCore = getWatchCore(); + const result = await watchCore.auth.verifyCustomAuth(); + if (result.success) { + await handleAuthVerifySuccess(result); + } else { + await handleAuthVerifyFail(result); + } + } + + return { + redirectCustomAuthUrl, + allowToVerifyCustomAuth, + verifyAuthCustom, + }; +}; + +export const useAuthCustom = () => { + useAuthButtonInject(onClickAuthButton); + + const { redirectCustomAuthUrl } = useAuthCustomAction(); + + /** 处理点击授权入口按钮 */ + function onClickAuthButton() { + redirectCustomAuthUrl(); + } +}; diff --git a/src/components/page-splash-common/auth/auth-direct/use-auth-direct.ts b/src/components/page-splash-common/auth/auth-direct/use-auth-direct.ts new file mode 100644 index 0000000..035cdcd --- /dev/null +++ b/src/components/page-splash-common/auth/auth-direct/use-auth-direct.ts @@ -0,0 +1,62 @@ +import { translate } from '@/assets/lang'; +import { getWatchCore } from '@/core/watch-sdk'; +import { PageErrorType } from '@/app/layout/page-error/page-error-type'; +import { useWatchAppStore } from '@/store/use-watch-app-store'; +import { useAuthCommon } from '../hooks/use-auth-common'; +import { DirectAuthQueryParams } from '@polyv/live-watch-sdk'; +import { paramGetter } from '@/hooks/core/use-query-params'; + +export const useAuthDirectAction = () => { + const watchAppStore = useWatchAppStore(); + + const { handleAuthVerifySuccess, handleAuthVerifyFail } = useAuthCommon(); + + /** + * 获取独立授权需要校验的参数 + */ + function getDirectAuthQueryParams(): DirectAuthQueryParams { + return { + userid: paramGetter.userid() || '', + ts: paramGetter.ts() || '', + sign: paramGetter.sign() || '', + nickname: paramGetter.nickname() || '', + }; + } + + /** + * 允许验证独立授权 + */ + async function allowToVerifyDirectAuth(): Promise { + const watchCore = getWatchCore(); + return watchCore.auth.allowToVerifyDirectAuth(getDirectAuthQueryParams()); + } + + /** + * 重定向到独立授权失败页 + */ + async function redirectDirectFailUrl(): Promise { + watchAppStore.setPageError({ + type: PageErrorType.DirectAuthFail, + title: translate('auth.error.directFail'), + }); + } + + /** + * 验证独立授权 + */ + async function verifyAuthDirect() { + const watchCore = getWatchCore(); + const result = await watchCore.auth.verifyDirectAuth(getDirectAuthQueryParams()); + if (result.success) { + await handleAuthVerifySuccess(result); + } else { + await handleAuthVerifyFail(result); + } + } + + return { + allowToVerifyDirectAuth, + redirectDirectFailUrl, + verifyAuthDirect, + }; +}; diff --git a/src/components/page-splash-common/auth/auth-external/auth-external.vue b/src/components/page-splash-common/auth/auth-external/auth-external.vue new file mode 100644 index 0000000..45922ac --- /dev/null +++ b/src/components/page-splash-common/auth/auth-external/auth-external.vue @@ -0,0 +1,10 @@ + + + + diff --git a/src/components/page-splash-common/auth/auth-external/use-auth-external.ts b/src/components/page-splash-common/auth/auth-external/use-auth-external.ts new file mode 100644 index 0000000..5042318 --- /dev/null +++ b/src/components/page-splash-common/auth/auth-external/use-auth-external.ts @@ -0,0 +1,81 @@ +import { translate } from '@/assets/lang'; +import { getWatchCore } from '@/core/watch-sdk'; +import { PageErrorType } from '@/app/layout/page-error/page-error-type'; +import { useWatchAppStore } from '@/store/use-watch-app-store'; +import { AuthSettingItemExternal, ExternalAuthQueryParams } from '@polyv/live-watch-sdk'; +import { useAuthButtonInject } from '../hooks/use-auth-button'; +import { useAuthCommon } from '../hooks/use-auth-common'; +import { paramGetter } from '@/hooks/core/use-query-params'; + +/** + * 外部授权操作 hook + */ +export const useAuthExternalAction = () => { + const watchAppStore = useWatchAppStore(); + const { handleAuthVerifySuccess, handleAuthVerifyFail } = useAuthCommon(); + + /** + * 获取外部授权需要校验的参数 + */ + function getExternalAuthQueryParams(): ExternalAuthQueryParams { + return { + userid: paramGetter.userid() || '', + ts: paramGetter.ts() || '', + sign: paramGetter.sign() || '', + }; + } + + /** + * 允许验证外部授权 + */ + async function allowToVerifyExternalAuth(): Promise { + const watchCore = getWatchCore(); + return watchCore.auth.allowToVerifyExternalAuth(getExternalAuthQueryParams()); + } + + /** + * 重定向到外部授权地址 + */ + async function redirectExternalFailUrl() { + const watchCore = getWatchCore(); + const result = await watchCore.auth.redirectExternalFailUrl(); + + // 跳转不成功,没有配置错误地址,显示本地的错误页 + if (!result) { + watchAppStore.setPageError({ + type: PageErrorType.ExternalAuthFail, + title: translate('auth.error.externalFail'), + }); + } + } + + /** + * 验证外部授权 + */ + async function verifyAuthExternal() { + const watchCore = getWatchCore(); + const result = await watchCore.auth.verifyExternalAuth(getExternalAuthQueryParams()); + if (result.success) { + await handleAuthVerifySuccess(result); + } else { + await handleAuthVerifyFail(result); + } + } + + return { + allowToVerifyExternalAuth, + redirectExternalFailUrl, + verifyAuthExternal, + }; +}; + +export const useAuthExternal = () => { + useAuthButtonInject(onClickAuthButton); + + const { redirectExternalFailUrl } = useAuthExternalAction(); + + /** 处理点击授权入口按钮 */ + function onClickAuthButton() { + redirectExternalFailUrl(); + } +}; diff --git a/src/components/page-splash-common/auth/auth-info/hooks/use-auth-info-form.ts b/src/components/page-splash-common/auth/auth-info/hooks/use-auth-info-form.ts new file mode 100644 index 0000000..b7a5c2a --- /dev/null +++ b/src/components/page-splash-common/auth/auth-info/hooks/use-auth-info-form.ts @@ -0,0 +1,250 @@ +import { translate } from '@/assets/lang'; +import { validateCnAndEn, validatePhoneNumber } from '@/assets/utils/validate'; +import { emitFunc, VueEmit } from '@/assets/utils/vue-utils/emit-utils'; +import { ImageVerifyInputInstance } from '@/components/common-base/form/form-image-verify-input/type'; +import { SelectOptionItem } from '@/components/common-base/form/form-select/types/form-select-types'; +import { toast } from '@/hooks/components/use-toast'; +import { getWatchCore } from '@/core/watch-sdk'; +import { ValidatorRules } from '@/plugins/async-validator'; +import { useAuthStore } from '@/store/use-auth-store'; +import { + AuthInfoPropValKey, + AuthInfoPropValType, + AuthInfoType, + AuthSettingItemInfo, +} from '@polyv/live-watch-sdk'; +import { storeToRefs } from 'pinia'; +import { computed, reactive, ref, unref } from 'vue'; +import { useAuthButtonInject } from '../../hooks/use-auth-button'; +import { useAuthCommon, useAuthProtocol } from '../../hooks/use-auth-common'; +import { useAuthInfoSetting } from './use-auth-info-setting'; + +export const authInfoFormEmits = () => ({ + /** 关闭窗口 */ + 'close-dialog': emitFunc(), + /** 点击了已登录 */ + 'click-logined': emitFunc(), +}); + +interface BasicFormData { + /** 手机号 */ + phoneNumber: string; + /** 手机区号 */ + areaCode: string; + /** 图片验证码 */ + imageId: string; + imageCaptcha: string; + /** 短信验证码 */ + smsCode: string; + /** 隐私协议勾选 */ + checkProtocol: boolean; +} + +export interface AuthInfoFormInstance { + /** 重置表单 */ + resetFormData(): void; +} + +export const useAuthInfoForm = (options: { emit: VueEmit }) => { + const { emit } = options; + + const authStore = useAuthStore(); + const { authItem } = useAuthButtonInject(); + const { smsVerifyEnabled, hasMobileField } = useAuthInfoSetting(); + + const { authInfoFields } = storeToRefs(authStore); + + /** 提示信息 */ + const infoDesc = computed(() => authItem.infoDesc); + + const imageVerifyInputRef = ref(); + + /** 格式化下拉选项 */ + function formatSelectOptions(options?: string): SelectOptionItem[] { + if (!options) { + return []; + } + + const strs = options.split(',').filter(str => !!str); + return strs.map(str => { + return { + label: str, + value: str, + }; + }); + } + + /** 表单字段前缀 */ + const fieldPrefix = 'propValue' as const; + + function generateFromData(): AuthInfoPropValType & BasicFormData { + function getInitFormData() { + const data: AuthInfoPropValType = {}; + + unref(authInfoFields).forEach((option, index) => { + data[`${fieldPrefix}${index + 1}`] = ''; + }); + + return data; + } + + return { + ...getInitFormData(), + // 手机号 + phoneNumber: '', + // 手机区号 + areaCode: '+86', + // 图片验证码 id + imageId: '', + // 图片验证码 + imageCaptcha: '', + // 短信验证码 + smsCode: '', + // 隐私协议勾选 + checkProtocol: false, + }; + } + + const formData = reactive(generateFromData()); + + function resetFormData() { + const generatedData = generateFromData(); + for (const i in formData) { + const key = i as keyof AuthInfoPropValType; + formData[key] = generatedData[key]; + } + } + + function onPhoneNumberChange(phoneNumber: string) { + formData.phoneNumber = phoneNumber; + } + + const { protocolContent, protocolFormRules } = useAuthProtocol({ + authItem, + formData, + }); + + const formRules = computed(() => { + const rules: ValidatorRules = { + ...unref(protocolFormRules), + }; + + unref(authInfoFields).forEach((option, index) => { + const type = option.type; + const field = `${fieldPrefix}${index + 1}` as AuthInfoPropValKey; + + switch (type) { + case AuthInfoType.Name: + rules[field] = [ + { type: 'string', message: translate('auth.error.improveInfo'), required: true }, + { + validator: () => { + const name = formData[field]; + + if (validateCnAndEn(name)) { + return []; + } + + return [translate('form.error.onlyCnAnEn')]; + }, + }, + ]; + break; + case AuthInfoType.Text: + case AuthInfoType.Option: + rules[field] = [ + { type: 'string', message: translate('auth.error.improveInfo'), required: true }, + ]; + break; + case AuthInfoType.Number: + rules[field] = [ + { type: 'number', message: translate('auth.error.improveInfo'), required: true }, + ]; + break; + case AuthInfoType.Mobile: + rules[field] = [ + { + type: 'string', + message: translate('form.error.phoneNumberRequired'), + required: true, + }, + { + validator: () => { + const phoneNumber = formData[field]; + const areaCode = formData.areaCode; + + if (validatePhoneNumber(phoneNumber, areaCode)) { + return []; + } + + return [translate('form.error.phoneNumberError')]; + }, + }, + ]; + if (unref(smsVerifyEnabled)) { + rules.smsCode = [ + { + type: 'string', + message: translate('form.error.smsVerifyRequired'), + required: true, + }, + ]; + } + break; + } + }); + + return rules; + }); + + const { failMessage, handleAuthVerifySuccess, handleAuthVerifyFail } = useAuthCommon(); + + async function submitAuth() { + const watchCore = getWatchCore(); + const result = await watchCore.auth.verifyInfoAuth(formData); + + if (result.success) { + handleAuthVerifySuccess(result); + } else { + handleAuthVerifyFail(result); + + if (failMessage.value) { + toast.error(failMessage.value); + } + } + } + + /** 处理点击取消 */ + function onClickCancel(): void { + emit('close-dialog'); + } + + function onClickLogined() { + emit('click-logined'); + } + + const authFormInstance: AuthInfoFormInstance = { + resetFormData, + }; + + return { + infoDesc, + authInfoFields, + imageVerifyInputRef, + AuthInfoType, + fieldPrefix, + formData, + formRules, + + protocolContent, + smsVerifyEnabled, + authFormInstance, + hasMobileField, + + onPhoneNumberChange, + formatSelectOptions, + onClickCancel, + submitAuth, + onClickLogined, + }; +}; diff --git a/src/components/page-splash-common/auth/auth-info/hooks/use-auth-info-login.ts b/src/components/page-splash-common/auth/auth-info/hooks/use-auth-info-login.ts new file mode 100644 index 0000000..026b93f --- /dev/null +++ b/src/components/page-splash-common/auth/auth-info/hooks/use-auth-info-login.ts @@ -0,0 +1,97 @@ +import { translate } from '@/assets/lang'; +import { validatePhoneNumber } from '@/assets/utils/validate'; +import { emitFunc, VueEmit } from '@/assets/utils/vue-utils/emit-utils'; +import { toast } from '@/hooks/components/use-toast'; +import { getWatchCore } from '@/core/watch-sdk'; +import { ValidatorRules } from '@/plugins/async-validator'; +import { AuthInfoType } from '@polyv/live-watch-sdk'; +import { computed, reactive } from 'vue'; +import { useAuthCommon } from '../../hooks/use-auth-common'; + +export const authInfoLoginEmits = () => ({ + /** 关闭窗口 */ + 'close-dialog': emitFunc(), +}); + +interface AuthInfoLoginFormData { + /** 手机号 */ + phoneNumber: string; + /** 手机区号 */ + areaCode: string; +} + +export const useAuthInfoLogin = (options: { emit: VueEmit }) => { + const { emit } = options; + + function generateFromData(): AuthInfoLoginFormData { + return { + // 手机号 + phoneNumber: '', + // 手机区号 + areaCode: '+86', + }; + } + + const formData = reactive(generateFromData()); + + const formRules = computed(() => { + const rules: ValidatorRules = { + phoneNumber: [ + { + type: 'string', + message: translate('form.error.phoneNumberRequired'), + required: true, + }, + { + validator: () => { + const phoneNumber = formData.phoneNumber; + const areaCode = formData.areaCode; + + if (validatePhoneNumber(phoneNumber, areaCode)) { + return []; + } + + return [translate('form.error.phoneNumberError')]; + }, + }, + ], + }; + + return rules; + }); + + const { failMessage, handleAuthVerifySuccess, handleAuthVerifyFail } = useAuthCommon(); + + async function submitAuthLogin() { + const watchCore = getWatchCore(); + + const result = await watchCore.auth.loginInfoAuth({ + phoneNumber: formData.phoneNumber, + areaCode: formData.areaCode, + }); + + if (result.success) { + handleAuthVerifySuccess(result); + } else { + handleAuthVerifyFail(result); + + if (failMessage.value) { + toast.error(failMessage.value); + } + } + } + + /** 处理点击取消 */ + function onClickCancel(): void { + emit('close-dialog'); + } + + return { + formData, + formRules, + AuthInfoType, + + onClickCancel, + submitAuthLogin, + }; +}; diff --git a/src/components/page-splash-common/auth/auth-info/hooks/use-auth-info-setting.ts b/src/components/page-splash-common/auth/auth-info/hooks/use-auth-info-setting.ts new file mode 100644 index 0000000..d8817f6 --- /dev/null +++ b/src/components/page-splash-common/auth/auth-info/hooks/use-auth-info-setting.ts @@ -0,0 +1,33 @@ +import { ynToBool } from '@polyv/utils/dist/es/boolean'; +import { computed } from 'vue'; +import { AuthInfoType } from '@polyv/live-watch-sdk'; +import { useAuthStore } from '@/store/use-auth-store'; + +export const useAuthInfoSetting = () => { + const authStore = useAuthStore(); + + /** + * 是否需要短信验证 + */ + const smsVerifyEnabled = computed(() => { + let enabled = false; + authStore.authInfoFields.forEach(option => { + if (option.type === AuthInfoType.Mobile) { + enabled = ynToBool(option.sms); + } + }); + return enabled; + }); + + /** + * 是否具有手机选项 + */ + const hasMobileField = computed(() => { + return authStore.authInfoFields.findIndex(option => option.type === AuthInfoType.Mobile) !== -1; + }); + + return { + smsVerifyEnabled, + hasMobileField, + }; +}; diff --git a/src/components/page-splash-common/auth/auth-info/mobile-auth-info-form.vue b/src/components/page-splash-common/auth/auth-info/mobile-auth-info-form.vue new file mode 100644 index 0000000..bb98784 --- /dev/null +++ b/src/components/page-splash-common/auth/auth-info/mobile-auth-info-form.vue @@ -0,0 +1,222 @@ + + + + + + diff --git a/src/components/page-splash-common/auth/auth-info/mobile-auth-info-login.vue b/src/components/page-splash-common/auth/auth-info/mobile-auth-info-login.vue new file mode 100644 index 0000000..93d2f6c --- /dev/null +++ b/src/components/page-splash-common/auth/auth-info/mobile-auth-info-login.vue @@ -0,0 +1,72 @@ + + + + + + diff --git a/src/components/page-splash-common/auth/auth-info/mobile-auth-info.vue b/src/components/page-splash-common/auth/auth-info/mobile-auth-info.vue new file mode 100644 index 0000000..2e66c0f --- /dev/null +++ b/src/components/page-splash-common/auth/auth-info/mobile-auth-info.vue @@ -0,0 +1,39 @@ + + + + diff --git a/src/components/page-splash-common/auth/auth-info/pc-auth-info-form.vue b/src/components/page-splash-common/auth/auth-info/pc-auth-info-form.vue new file mode 100644 index 0000000..66d5ddf --- /dev/null +++ b/src/components/page-splash-common/auth/auth-info/pc-auth-info-form.vue @@ -0,0 +1,236 @@ + + + + + + diff --git a/src/components/page-splash-common/auth/auth-info/pc-auth-info-login.vue b/src/components/page-splash-common/auth/auth-info/pc-auth-info-login.vue new file mode 100644 index 0000000..4ccbacb --- /dev/null +++ b/src/components/page-splash-common/auth/auth-info/pc-auth-info-login.vue @@ -0,0 +1,83 @@ + + + + + + diff --git a/src/components/page-splash-common/auth/auth-info/pc-auth-info.vue b/src/components/page-splash-common/auth/auth-info/pc-auth-info.vue new file mode 100644 index 0000000..8a7fbe5 --- /dev/null +++ b/src/components/page-splash-common/auth/auth-info/pc-auth-info.vue @@ -0,0 +1,33 @@ + + + + diff --git a/src/components/page-splash-common/auth/auth-info/use-auth-info.ts b/src/components/page-splash-common/auth/auth-info/use-auth-info.ts new file mode 100644 index 0000000..cb341c1 --- /dev/null +++ b/src/components/page-splash-common/auth/auth-info/use-auth-info.ts @@ -0,0 +1,65 @@ +import { translate } from '@/assets/lang'; +import { useSimpleVisible } from '@/hooks/behaviors/use-simple-visible'; +import { DialogInstance } from '@/components/common-base/dialog/pc-dialog/types'; +import { useAuthStore } from '@/store/use-auth-store'; +import { AuthSettingItemInfo } from '@polyv/live-watch-sdk'; +import { storeToRefs } from 'pinia'; +import { computed, nextTick, ref } from 'vue'; +import { useAuthButtonInject } from '../hooks/use-auth-button'; +import { AuthInfoFormInstance } from './hooks/use-auth-info-form'; + +export type AuthInfoDialogModel = 'form' | 'login'; + +export const useAuthInfo = () => { + const authStore = useAuthStore(); + const { authItem } = useAuthButtonInject(onClickAuthButton); + + const { authInfoFields } = storeToRefs(authStore); + + const dialogRef = ref(); + + const dialogModel = ref('form'); + + const { visible: dialogVisible, close: closeDialog } = useSimpleVisible(false); + + const formRef = ref(); + + function onClickAuthButton(): void { + dialogVisible.value = true; + dialogModel.value = 'form'; + formRef.value?.resetFormData(); + } + + /** 弹层标题 */ + const dialogTitle = computed(() => { + if (dialogModel.value === 'form') { + return authItem.infoAuthTips; + } + return translate('auth.info.registered.title'); + }); + + async function openLogined() { + dialogModel.value = 'login'; + await nextTick(); + dialogRef.value?.resetPosition(); + } + + async function openAuthInfoForm() { + dialogModel.value = 'form'; + await nextTick(); + dialogRef.value?.resetPosition(); + } + + return { + dialogVisible, + dialogModel, + dialogTitle, + dialogRef, + formRef, + + authInfoFields, + closeDialog, + openLogined, + openAuthInfoForm, + }; +}; diff --git a/src/components/page-splash-common/auth/auth-none/auth-none.vue b/src/components/page-splash-common/auth/auth-none/auth-none.vue new file mode 100644 index 0000000..cc9d904 --- /dev/null +++ b/src/components/page-splash-common/auth/auth-none/auth-none.vue @@ -0,0 +1,9 @@ + + + diff --git a/src/components/page-splash-common/auth/auth-none/use-auth-none.ts b/src/components/page-splash-common/auth/auth-none/use-auth-none.ts new file mode 100644 index 0000000..5e38948 --- /dev/null +++ b/src/components/page-splash-common/auth/auth-none/use-auth-none.ts @@ -0,0 +1,36 @@ +import { getWatchCore } from '@/core/watch-sdk'; +import { useEnrollStore } from '@/store/use-enroll-store'; +import { AuthSettingItemCode } from '@polyv/live-watch-sdk'; +import { onMounted } from 'vue'; +import { useAuthButtonInject } from '../hooks/use-auth-button'; +import { useAuthCommon } from '../hooks/use-auth-common'; + +export const useAuthNone = () => { + const enrollStore = useEnrollStore(); + useAuthButtonInject(onClickAuthButton); + const { handleAuthVerifySuccess, handleAuthVerifyFail } = useAuthCommon(); + + /** 执行无条件授权 */ + async function toDoAuthNone() { + const watchCore = getWatchCore(); + const result = await watchCore.auth.verifyNoneAuth(); + + if (result.success) { + await handleAuthVerifySuccess(result); + } else { + await handleAuthVerifyFail(result); + } + } + + /** 处理点击授权按钮 */ + async function onClickAuthButton(): Promise { + await toDoAuthNone(); + } + + onMounted(() => { + // 如果显示了无条件授权但又需要报名观看,则渲染授权按钮时自动出发授权 + if (enrollStore.needEnrollByEnter) { + toDoAuthNone(); + } + }); +}; diff --git a/src/components/page-splash-common/auth/auth-pay/mobile-auth-pay.vue b/src/components/page-splash-common/auth/auth-pay/mobile-auth-pay.vue new file mode 100644 index 0000000..ca62927 --- /dev/null +++ b/src/components/page-splash-common/auth/auth-pay/mobile-auth-pay.vue @@ -0,0 +1,73 @@ + + + + + + diff --git a/src/components/page-splash-common/auth/auth-pay/pc-auth-pay.vue b/src/components/page-splash-common/auth/auth-pay/pc-auth-pay.vue new file mode 100644 index 0000000..7dcae4b --- /dev/null +++ b/src/components/page-splash-common/auth/auth-pay/pc-auth-pay.vue @@ -0,0 +1,185 @@ + + + + + + diff --git a/src/components/page-splash-common/auth/auth-pay/use-auth-pay.ts b/src/components/page-splash-common/auth/auth-pay/use-auth-pay.ts new file mode 100644 index 0000000..b655cd6 --- /dev/null +++ b/src/components/page-splash-common/auth/auth-pay/use-auth-pay.ts @@ -0,0 +1,242 @@ +import { useWeixinAuthorize } from '@/hooks/platform/use-weixin/use-weixin-authorize'; +import { useWeixinPay } from '@/hooks/platform/use-weixin/use-weixin-pay'; +import { translate } from '@/assets/lang'; +import { isWeixin } from '@/assets/utils/browser'; +import { toast } from '@/hooks/components/use-toast'; +import { getWatchCore } from '@/core/watch-sdk'; +import { useWeixinStore } from '@/store/use-weixin-store'; +import { AuthSettingItemPay, AuthType } from '@polyv/live-watch-sdk'; +import { computed, onBeforeUnmount, ref, unref, watch } from 'vue'; +import { useAuthButtonInject } from '../hooks/use-auth-button'; +import { useAuthCommon } from '../hooks/use-auth-common'; + +/** + * PC 端付费观看 hook + */ +export const useAuthPayPc = () => { + const weixinStore = useWeixinStore(); + const { redirectWeixinAuthorize } = useWeixinAuthorize(); + const { authItem } = useAuthButtonInject(onClickAuthButton); + const { handleAuthVerifySuccess } = useAuthCommon(); + + /** 弹层是否显示 */ + const dialogVisible = ref(false); + + /** 弹层标题 */ + const dialogTitle = computed(() => authItem.payAuthTips); + + /** 弹层类型 */ + const dialogType = ref<'pay' | 'payCheck'>('pay'); + + /** 支付金额 */ + const payPrice = computed(() => authItem.price); + + /** 打开支付弹层 */ + function openPayDialog() { + const watchCore = getWatchCore(); + watchCore.auth.closeCheckWechatPayStatusPolling(); + dialogType.value = 'pay'; + dialogVisible.value = true; + refreshPayData(); + } + + /** 打开支付检查弹层 */ + function openPayCheckDialog() { + const watchCore = getWatchCore(); + watchCore.auth.closeCheckPayStatusPolling(); + dialogType.value = 'payCheck'; + dialogVisible.value = true; + refreshWechatPayData(); + } + + /** 处理点击授权入口按钮 */ + function onClickAuthButton(): void { + openPayDialog(); + } + + /** 处理点击我已支付 */ + function onClickWechatHasPay() { + openPayCheckDialog(); + } + + /** 支付二维码地址 */ + const payQrcodeUrl = ref(); + + /** 微信扫描二维码地址 */ + const wechatQrcodeUrl = ref(); + + /** + * 处理支付成功 + */ + function onPaySuccess() { + /** + * 针对于 PC 端微信客户端,在付费完后做微信非静默授权 + */ + if (isWeixin && !weixinStore.weixinWatchAuthorized) { + redirectWeixinAuthorize({ + snsApiBase: false, + }); + return; + } + + handleAuthVerifySuccess({ + success: true, + authType: AuthType.Pay, + }); + dialogVisible.value = false; + } + + /** + * 处理支付超时 + */ + function onPayTimeout() { + dialogVisible.value = false; + toast.error(translate('auth.error.payTimeout')); + } + + /** + * 刷新支付数据 + */ + async function refreshPayData() { + const watchCore = getWatchCore(); + const payData = await watchCore.auth.getAuthPayData(); + + payQrcodeUrl.value = payData.qrcodeUrl; + + watchCore.auth.startCheckPayStatusPolling({ + successCallback: () => onPaySuccess(), + timeoutCallback: () => onPayTimeout(), + }); + } + + /** + * 刷新微信扫码数据 + */ + async function refreshWechatPayData() { + const watchCore = getWatchCore(); + const wechatPayData = await watchCore.auth.getWechatPayCheckData(); + wechatQrcodeUrl.value = wechatPayData.qrcodeUrl; + + watchCore.auth.startCheckWechatPayStatusPolling({ + successCallback: () => onPaySuccess(), + timeoutCallback: () => onPayTimeout(), + }); + } + + watch( + () => unref(dialogVisible), + () => { + const watchCore = getWatchCore(); + + if (!unref(dialogVisible)) { + watchCore.auth.closeCheckPayStatusPolling(); + watchCore.auth.closeCheckWechatPayStatusPolling(); + } + }, + ); + + onBeforeUnmount(() => { + const watchCore = getWatchCore(); + watchCore.auth.closeCheckPayStatusPolling(); + watchCore.auth.closeCheckWechatPayStatusPolling(); + }); + + return { + dialogVisible, + dialogTitle, + dialogType, + payPrice, + payQrcodeUrl, + wechatQrcodeUrl, + openPayDialog, + openPayCheckDialog, + onClickWechatHasPay, + }; +}; + +/** + * 移动端付费观看 hook + */ +export const useAuthPayMobile = () => { + const { handleAuthVerifySuccess } = useAuthCommon(); + const { chooseWXPay } = useWeixinPay(); + const { redirectWeixinAuthorize } = useWeixinAuthorize(); + const { authItem } = useAuthButtonInject(onClickAuthButton); + const weixinStore = useWeixinStore(); + + /** 弹层是否显示 */ + const dialogVisible = ref(false); + + /** 弹层标题 */ + const dialogTitle = computed(() => authItem.payAuthTips); + + /** 支付金额 */ + const payPrice = computed(() => authItem.price); + + function onClickAuthButton() { + dialogVisible.value = true; + } + + /** + * 处理支付成功 + */ + async function onPaySuccess() { + // 如果未进行非静默授权,则先进行一次非静默授权 + if (!weixinStore.weixinWatchAuthorized) { + redirectWeixinAuthorize({ + snsApiBase: false, + }); + return; + } + + const watchCore = getWatchCore(); + const payed = await watchCore.auth.checkPayStatus(); + if (payed) { + handleAuthVerifySuccess({ + success: true, + authType: AuthType.Pay, + }); + dialogVisible.value = false; + } + } + + const isLoading = ref(false); + + /** 处理点击支付 */ + async function onClickPay() { + // 非微信中打开 + if (!isWeixin) { + toast.error(translate('weixin.error.toWechatPay')); + return; + } + + if (isLoading.value) { + return; + } + + isLoading.value = true; + try { + const watchCore = getWatchCore(); + const payInfo = await watchCore.auth.getAuthPayData(); + isLoading.value = false; + + if (payInfo.wxPaySignData) { + dialogVisible.value = false; + chooseWXPay(payInfo.wxPaySignData, { + successCb: async () => { + onPaySuccess(); + }, + }); + } + } catch (e) { + isLoading.value = false; + } + } + + return { + dialogVisible, + dialogTitle, + payPrice, + onClickPay, + }; +}; diff --git a/src/components/page-splash-common/auth/auth-phone/mobile-auth-phone.vue b/src/components/page-splash-common/auth/auth-phone/mobile-auth-phone.vue new file mode 100644 index 0000000..7f4e1d7 --- /dev/null +++ b/src/components/page-splash-common/auth/auth-phone/mobile-auth-phone.vue @@ -0,0 +1,74 @@ + + + + + + diff --git a/src/components/page-splash-common/auth/auth-phone/pc-auth-phone.vue b/src/components/page-splash-common/auth/auth-phone/pc-auth-phone.vue new file mode 100644 index 0000000..8bde73a --- /dev/null +++ b/src/components/page-splash-common/auth/auth-phone/pc-auth-phone.vue @@ -0,0 +1,93 @@ + + + + + + diff --git a/src/components/page-splash-common/auth/auth-phone/use-auth-phone.ts b/src/components/page-splash-common/auth/auth-phone/use-auth-phone.ts new file mode 100644 index 0000000..37c9fc9 --- /dev/null +++ b/src/components/page-splash-common/auth/auth-phone/use-auth-phone.ts @@ -0,0 +1,91 @@ +import { translate } from '@/assets/lang'; +import { isFormItemInstance } from '@/components/common-base/form/hooks/use-form-item'; +import { getWatchCore } from '@/core/watch-sdk'; +import { ValidatorRules } from '@/plugins/async-validator'; +import { AuthSettingItemPhone } from '@polyv/live-watch-sdk'; +import { computed, reactive, ref, unref } from 'vue'; +import { useAuthButtonInject } from '../hooks/use-auth-button'; +import { useAuthCommon, useAuthProtocol } from '../hooks/use-auth-common'; + +/** 观看条件:白名单 hook */ +export const useAuthPhone = () => { + const { authItem } = useAuthButtonInject(onClickAuthButton); + + /** 弹层是否显示 */ + const dialogVisible = ref(false); + + /** 弹层标题 */ + const dialogTitle = computed(() => authItem.authTips); + + /** 表单对象 */ + const formData = reactive({ + phone: '', + checkProtocol: false, + }); + + /** 输入框占位文本 */ + const inputPlaceholder = computed(() => { + return authItem.whiteListInputTips || translate('auth.phone.placeholder'); + }); + + const { protocolContent, protocolFormRules } = useAuthProtocol({ + authItem, + formData, + }); + + /** 处理点击授权入口按钮 */ + function onClickAuthButton(): void { + dialogVisible.value = true; + formData.phone = ''; + formData.checkProtocol = false; + } + + /** 处理点击取消 */ + function onClickCancel(): void { + dialogVisible.value = false; + } + + const formRules = computed(() => { + return { + phone: { type: 'string', message: translate('auth.error.phoneEmpty'), required: true }, + ...unref(protocolFormRules), + }; + }); + + const { failMessage, handleAuthVerifySuccess, handleAuthVerifyFail } = useAuthCommon(); + const formItemRef = ref(); + + /** 提交授权表单 */ + async function submitAuth() { + const watchCore = getWatchCore(); + const result = await watchCore.auth.verifyPhoneAuth({ + phone: formData.phone, + }); + + if (result.success) { + dialogVisible.value = false; + handleAuthVerifySuccess(result); + } else { + handleAuthVerifyFail(result); + + // 设置表单的异常提示 + const formItemInstance = unref(formItemRef); + if (failMessage.value && isFormItemInstance(formItemInstance)) { + formItemInstance.setErrorMessage(failMessage.value); + } + } + } + + return { + dialogVisible, + dialogTitle, + protocolContent, + formData, + inputPlaceholder, + formRules, + onClickCancel, + submitAuth, + failMessage, + formItemRef, + }; +}; diff --git a/src/components/page-splash-common/auth/auth-work-weixin/mobile-auth-work-weixin.vue b/src/components/page-splash-common/auth/auth-work-weixin/mobile-auth-work-weixin.vue new file mode 100644 index 0000000..4e5fc56 --- /dev/null +++ b/src/components/page-splash-common/auth/auth-work-weixin/mobile-auth-work-weixin.vue @@ -0,0 +1,9 @@ + + + diff --git a/src/components/page-splash-common/auth/auth-work-weixin/pc-auth-work-weixin.vue b/src/components/page-splash-common/auth/auth-work-weixin/pc-auth-work-weixin.vue new file mode 100644 index 0000000..1c1ca62 --- /dev/null +++ b/src/components/page-splash-common/auth/auth-work-weixin/pc-auth-work-weixin.vue @@ -0,0 +1,32 @@ + + + + + + diff --git a/src/components/page-splash-common/auth/auth-work-weixin/use-auth-work-weixin.ts b/src/components/page-splash-common/auth/auth-work-weixin/use-auth-work-weixin.ts new file mode 100644 index 0000000..0b0a03c --- /dev/null +++ b/src/components/page-splash-common/auth/auth-work-weixin/use-auth-work-weixin.ts @@ -0,0 +1,112 @@ +import { useWorkWeixinAuthorize } from '@/hooks/platform/use-weixin/use-weixin-authorize'; +import { + loadWorkWeixinLoginSdk, + WwLoginInstance, +} from '@/plugins/external-lib-loaders/load-work-weixin-login'; +import { translate } from '@/assets/lang'; +import { toast } from '@/hooks/components/use-toast'; +import { getWatchCore } from '@/core/watch-sdk'; +import { useChannelStore } from '@/store/use-channel-store'; +import { AuthSettingItemEnterpriseWeChat, YN } from '@polyv/live-watch-sdk'; +import { ynToBool } from '@utils-ts/boolean'; +import { onBeforeMount, onBeforeUnmount, onMounted, ref, unref } from 'vue'; +import { useAuthButtonInject } from '../hooks/use-auth-button'; +import { getWwLoginStyle } from './utils'; + +export const useAuthWorkWeixinPc = () => { + const channelStore = useChannelStore(); + useAuthButtonInject(onClickAuthButton); + + const dialogVisible = ref(false); + + async function onClickAuthButton() { + // 企微已过期 + if (ynToBool(channelStore.channelDetail?.channelConfig.enterpriseWechatExpire, YN.N)) { + toast.error(translate('auth.error.workWeixinExpire')); + return; + } + + dialogVisible.value = true; + initWorkWeixinCode(); + } + + let wwloginInstance: WwLoginInstance | undefined; + + /** + * 初始化企微登录二维码 + */ + async function initWorkWeixinCode() { + destroyWwLogin(); + + const watchCore = getWatchCore(); + const data = await watchCore.weixin.getWorkWeixinAuthorizeCode(); + const WwLogin = await loadWorkWeixinLoginSdk(); + + wwloginInstance = new WwLogin({ + id: 'wx_work_code', + appid: data.corpId, + agentid: data.agentId, + redirect_uri: encodeURIComponent(data.redirectUrl), + state: data.state, + lang: 'zh', + href: getWwLoginStyle(), + }); + } + + /** + * 销毁企微登录实例 + */ + function destroyWwLogin() { + if (wwloginInstance) { + wwloginInstance.destroyed(); + wwloginInstance = undefined; + } + } + + onBeforeMount(() => { + loadWorkWeixinLoginSdk(); + }); + + onBeforeUnmount(() => { + destroyWwLogin(); + }); + + return { + dialogVisible, + }; +}; + +export const useAuthWorkWeixinMobile = () => { + const channelStore = useChannelStore(); + useAuthButtonInject(onClickAuthButton); + const { canWorkWeixinAuthorize, redirectWorkWeixinAuthorize } = useWorkWeixinAuthorize(); + + async function onClickAuthButton() { + // 企微已过期 + if (ynToBool(channelStore.channelDetail?.channelConfig.enterpriseWechatExpire, YN.N)) { + toast.error(translate('auth.error.workWeixinExpire')); + return; + } + + // 当前环境不支持企微授权 + if (!unref(canWorkWeixinAuthorize)) { + toast.error(translate('auth.error.workWeixinNotAllow')); + return; + } + + // 如果存在 cpOpenId,则表示非企业成员 + if (channelStore.channelDetail?.wxInfo?.cpOpenId) { + toast.error(translate('auth.error.workWeixinNotStaff')); + return; + } + + redirectWorkWeixinAuthorize({ + snsApiBase: false, + }); + } + + onMounted(() => { + // 企微环境下直接自动执行授权 + onClickAuthButton(); + }); +}; diff --git a/src/components/page-splash-common/auth/auth-work-weixin/utils.ts b/src/components/page-splash-common/auth/auth-work-weixin/utils.ts new file mode 100644 index 0000000..273cf5f --- /dev/null +++ b/src/components/page-splash-common/auth/auth-work-weixin/utils.ts @@ -0,0 +1,15 @@ +/** + * 企微二维码样式转换base64 + */ +import { Base64 } from 'js-base64/base64'; + +export const getWwLoginStyle = () => { + const style = ` + .impowerBox .qrcode {width: 200px;} + .impowerBox .title {display: none;} + .impowerBox .info {width: 200px;} + .status_icon {display: none !important} + .impowerBox .status {text-align: center;} + `; + return `data:text/css;base64,${Base64.encode(style)}`; +}; diff --git a/src/components/page-splash-common/auth/hooks/use-auth-button.ts b/src/components/page-splash-common/auth/hooks/use-auth-button.ts new file mode 100644 index 0000000..aff5d29 --- /dev/null +++ b/src/components/page-splash-common/auth/hooks/use-auth-button.ts @@ -0,0 +1,182 @@ +import { translate } from '@/assets/lang'; +import { PropUtils, VueProps } from '@/assets/utils/vue-utils/props-utils'; +import { useChannelStore } from '@/store/use-channel-store'; +import { useEnrollStore } from '@/store/use-enroll-store'; +import { AuthSettingItem, AuthType, LiveStatus } from '@polyv/live-watch-sdk'; +import { + computed, + getCurrentInstance, + inject, + InjectionKey, + onBeforeUnmount, + provide, + unref, +} from 'vue'; +import { AuthButtonInject } from '../types/auth-type'; + +/** + * 观看页条件按钮 props 配置 + */ +export const authButtonProps = () => ({ + authItem: PropUtils.objectType().isRequired, +}); + +const AUTH_BUTTON_INJECT_KEY: InjectionKey = Symbol('authButtonInjectKey'); + +/** + * 观看条件按钮注入 + * @param data 注入数据 + */ +export const useAuthButtonProvide = (data: AuthButtonInject) => { + provide(AUTH_BUTTON_INJECT_KEY, data); +}; + +/** + * 获取观看条件注入信息 + */ +export const useAuthButtonInject = ( + clickButtonCallback?: AnyFunc, +): AuthButtonInject => { + const injectData = inject(AUTH_BUTTON_INJECT_KEY) as AuthButtonInject; + + if (clickButtonCallback) { + injectData.listenClickAuthButton(clickButtonCallback); + } + + onBeforeUnmount(() => { + if (clickButtonCallback) { + injectData.unlistenClickAuthButton(clickButtonCallback); + } + }); + + return injectData; +}; + +/** + * 观看条件按钮 hook + */ +export const useAuthButton = (options: { props: VueProps }) => { + const { props } = options; + const channelStore = useChannelStore(); + const enrollStore = useEnrollStore(); + + const thisInstance = getCurrentInstance()?.proxy; + + useAuthButtonProvide({ + authItem: props.authItem, + listenClickAuthButton, + unlistenClickAuthButton, + }); + + /** 当前的观看条件类型 */ + const currentAuthType = computed(() => { + return props.authItem.authType; + }); + + /** 默认的按钮文本 */ + const defaultButtonText = computed(() => { + const defaultTexts: Record = { + [AuthType.None]: translate('auth.button.none'), + [AuthType.Phone]: translate('auth.button.phone'), + [AuthType.Pay]: translate('auth.button.pay'), + [AuthType.Info]: translate('auth.button.info'), + [AuthType.Code]: translate('auth.button.code'), + [AuthType.Custom]: translate('auth.button.login'), + [AuthType.External]: translate('auth.button.login'), + [AuthType.Direct]: translate('auth.button.login'), + [AuthType.EnterpriseWeChat]: translate('auth.button.workWx'), + }; + + return defaultTexts[unref(currentAuthType)]; + }); + + /** 按钮文本 */ + const buttonText = computed(() => { + const authItem = props.authItem; + + let text = unref(defaultButtonText); + + // 白名单观看入口文本 + if ( + authItem.authType === AuthType.Phone && + authItem.whiteListEntryText && + !['会员观看', '会员入口'].includes(authItem.whiteListEntryText) + ) { + text = authItem.whiteListEntryText; + } + + // 付费观看入口文本 + if ( + authItem.authType === AuthType.Pay && + authItem.payEntryText && + !['付费观看'].includes(authItem.payEntryText) + ) { + text = authItem.payEntryText; + } + + // 验证码观看入口文本 + if ( + authItem.authType === AuthType.Code && + authItem.codeEntryText && + !['验证码观看'].includes(authItem.codeEntryText) + ) { + text = authItem.codeEntryText; + } + + // 登记观看入口文本 + if ( + authItem.authType === AuthType.Info && + authItem.infoEntryText && + !['登记观看'].includes(authItem.infoEntryText) + ) { + text = authItem.infoEntryText; + } + + // 外部授权入口文本 + if (authItem.authType === AuthType.External && authItem.externalEntryText) { + text = authItem.externalEntryText; + } + + // 无条件入口文本 + if (authItem.authType === AuthType.None && channelStore.liveStatus === LiveStatus.Playback) { + text = translate('auth.button.playback'); + } + + return text; + }); + + /** 按钮是否显示 */ + const buttonVisible = computed(() => { + const authItem = props.authItem; + + // 如果仅无条件且需要在入口处进行报名观看,则不显示按钮 + if (authItem.authType === AuthType.None && enrollStore.needEnrollByEnter) { + return false; + } + + return true; + }); + + /** 点击时回调的事件 */ + const clickCallbackEvent = 'click-auth-button'; + /** 处理点击观看条件按钮 */ + function onClickAuthButton(): void { + thisInstance?.$emit(clickCallbackEvent); + } + /** 监听点击按钮事件 */ + function listenClickAuthButton(callback: AnyFunc): void { + thisInstance?.$on(clickCallbackEvent, callback); + } + /** 取消监听事件 */ + function unlistenClickAuthButton(callback: AnyFunc): void { + thisInstance?.$off(clickCallbackEvent, callback); + } + + return { + currentAuthType, + defaultButtonText, + buttonText, + buttonVisible, + onClickAuthButton, + }; +}; diff --git a/src/components/page-splash-common/auth/hooks/use-auth-common.ts b/src/components/page-splash-common/auth/hooks/use-auth-common.ts new file mode 100644 index 0000000..58cc563 --- /dev/null +++ b/src/components/page-splash-common/auth/hooks/use-auth-common.ts @@ -0,0 +1,126 @@ +import { translate } from '@/assets/lang'; +import { ValidatorRules } from '@/plugins/async-validator'; +import { useWatchAppStore } from '@/store/use-watch-app-store'; +import { + AuthSettingItem, + AuthVerifyError, + AuthVerifyResultFail, + AuthVerifyResultSuccess, + YN, +} from '@polyv/live-watch-sdk'; +import { ynToBool } from '@utils-ts/boolean'; +import { computed, ref, unref } from 'vue'; + +export interface AuthProtocolFormData { + /** 是否勾选了隐私声明 */ + checkProtocol: boolean; +} + +export interface UseAuthProtocolOptions { + authItem: AuthSettingItem; + formData: AuthProtocolFormData; +} + +/** + * 观看条件隐私协议 hook + */ +export const useAuthProtocol = (options: UseAuthProtocolOptions) => { + const { authItem, formData } = options; + + /** 隐私协议内容 */ + const protocolContent = computed(() => { + let privacyStatus = YN.N; + let privacyContent = ''; + + if ('privacyStatus' in authItem && authItem.privacyStatus) { + privacyStatus = authItem.privacyStatus; + } + if ('privacyContent' in authItem && authItem.privacyContent) { + privacyContent = authItem.privacyContent; + } + + if (!ynToBool(privacyStatus)) { + return ''; + } + + return privacyContent; + }); + + /** 隐私协议表单验证规则 */ + const protocolFormRules = computed(() => { + return { + checkProtocol: { + validator: () => { + if (unref(protocolContent) && !formData.checkProtocol) { + return [translate('auth.error.checkProtocol')]; + } + return []; + }, + }, + }; + }); + + return { + protocolContent, + protocolFormRules, + }; +}; + +/** + * 观看条件公用 hook + */ +export const useAuthCommon = () => { + const watchAppStore = useWatchAppStore(); + + /** 失败信息 */ + const failMessage = ref(); + + /** + * 处理观看条件验证成功 + * @param successResult 成功结果 + */ + async function handleAuthVerifySuccess(successResult: AuthVerifyResultSuccess): Promise { + if (!successResult.success) return; + + failMessage.value = undefined; + await watchAppStore.resetUpWatchCore(); + } + + /** + * 处理观看条件验证失败 + * @param failResult 失败结果 + */ + async function handleAuthVerifyFail(failResult: AuthVerifyResultFail): Promise { + failMessage.value = undefined; + + switch (failResult.errorReason) { + case AuthVerifyError.Unknown: + failMessage.value = translate('auth.error.unknown'); + break; + case AuthVerifyError.PhoneNotExist: + failMessage.value = translate('auth.error.phoneNotExistent'); + break; + case AuthVerifyError.CodeError: + failMessage.value = translate('auth.error.codeError'); + break; + case AuthVerifyError.SmsCodeError: + failMessage.value = translate('auth.error.smsCodeError'); + break; + case AuthVerifyError.PhoneNotRegister: + failMessage.value = translate('auth.error.phoneNotRegister'); + break; + case AuthVerifyError.RedirectUrl: + if (failResult.getRedirectUrl) { + const redirectUrl = failResult.getRedirectUrl(); + window.location.href = redirectUrl; + } + break; + } + } + + return { + failMessage, + handleAuthVerifySuccess, + handleAuthVerifyFail, + }; +}; diff --git a/src/components/page-splash-common/auth/hooks/use-auth-special.ts b/src/components/page-splash-common/auth/hooks/use-auth-special.ts new file mode 100644 index 0000000..a422c25 --- /dev/null +++ b/src/components/page-splash-common/auth/hooks/use-auth-special.ts @@ -0,0 +1,101 @@ +import { useAuthStore } from '@/store/use-auth-store'; +import { AuthType, YN } from '@polyv/live-watch-sdk'; +import { useAuthCustomAction } from '../auth-custom/use-auth-custom'; +import { useAuthDirectAction } from '../auth-direct/use-auth-direct'; +import { useAuthExternalAction } from '../auth-external/use-auth-external'; +import { ynToBool } from '@utils-ts/boolean'; +import { useChannelStore } from '@/store/use-channel-store'; + +/** + * 处理在页面进入后的特殊授权 + */ +export const useAuthSpecial = () => { + const authStore = useAuthStore(); + const channelStore = useChannelStore(); + + /** 处理特殊授权 */ + async function handleSpecialAuth() { + // 存在自定义授权 + if (authStore.hasAuth(AuthType.Custom)) { + await doCustomAuth(); + } + + // 存在独立授权 + if (authStore.hasAuth(AuthType.Direct)) { + await doDirectAuth(); + } + + // 存在外部授权 + if (authStore.hasAuth(AuthType.External)) { + await doExternalAuth(); + } + } + + /** 处理自定义授权逻辑 */ + async function doCustomAuth() { + const { allowToVerifyCustomAuth, redirectCustomAuthUrl, verifyAuthCustom } = + useAuthCustomAction(); + + const allowCustomAuth = await allowToVerifyCustomAuth(); + if (allowCustomAuth) { + await verifyAuthCustom(); + } else if ( + !authStore.isAuthorized && + authStore.onlyOneAuth && + !ynToBool(channelStore.channelDetail?.channelConfig.splashEnabled, YN.N) + ) { + /** + * 满足以下条件则自动跳转到自定义授权链接 + * 1. 未授权(没有用户信息) + * 2. 只有自定义授权 + * 3. 关闭了引导页开关 + */ + await redirectCustomAuthUrl(); + } + } + + /** 处理外部授权逻辑 */ + async function doExternalAuth() { + const { allowToVerifyExternalAuth, redirectExternalFailUrl, verifyAuthExternal } = + useAuthExternalAction(); + + const allowExternalAuth = await allowToVerifyExternalAuth(); + if (allowExternalAuth) { + await verifyAuthExternal(); + } else if ( + !authStore.isAuthorized && + authStore.authSettingLength && + (authStore.authSettingLength === 1 || authStore.hasAuth(AuthType.Direct)) + ) { + /** + * 满足以下条件则跳到外部授权失败页 + * 1. 未授权(没有用户信息) + * 2. [没有其他观看条件] 或 [另一个观看条件是独立授权] + */ + await redirectExternalFailUrl(); + } + } + + /** 处理独立授权逻辑 */ + async function doDirectAuth() { + const { allowToVerifyDirectAuth, redirectDirectFailUrl, verifyAuthDirect } = + useAuthDirectAction(); + + const allowDirectAuth = await allowToVerifyDirectAuth(); + if (allowDirectAuth) { + await verifyAuthDirect(); + } else if (!authStore.isAuthorized && authStore.onlyOneAuth) { + /** + * 满足以下条件则显示独立授权失败页 + * 1. 未授权(没有用户信息) + * 2. 只有独立授权 + */ + await redirectDirectFailUrl(); + } + } + + return { + handleSpecialAuth, + doCustomAuth, + }; +}; diff --git a/src/components/page-splash-common/auth/imgs/icon-auth-pay-wechat-green.png b/src/components/page-splash-common/auth/imgs/icon-auth-pay-wechat-green.png new file mode 100644 index 0000000000000000000000000000000000000000..c2f8c8ed3d40d875b2075d5c92fe73570c247040 GIT binary patch literal 2240 zcmV;x2tW6UP)w%gvJo6QTBayUC%YlELuoCP*5P5X*x{jqtw{*U?w()g29hRWcXRLVCT{OP z410gS@B7ZTXYW0~-#H-$@mg_YMfQmc=VxiH=K>fH$~XbX5pt~vhLadBfB2^^!SW5zH!@WO20`N5LObOKlIuN-!+vty1XoP;<9ycHtDQsN+l;1LKLsjxTy zdi84cgzAozFncAZ#en;pyc5Gwl!5vI5sXNexL7y@{|#UVl+*>BwZT-mk~Tm@SQ0Ax zsz6r=umFOjv63AG$-@eGdV=%19aXH-$>1a<+TG|`D8PC^#wSCX?i>=w0rhym<=bu- z+m-Ej#S9WljdcHYlzfF?{OApU?bmxVJL%jdms+nbhE_ zezW`Yo}YmE#J?D6c?-bU%o&b7B?MnmxkhE(oa%q|&nyX+-K0eagfim#tlUW(Zrjjq z#`GBA4tiFL$PevNW=1rDqcl)fUr_r-EJZ~@ua~0N36N{vSBg*6JN-}g7_ju<@=vz3 zwVV=>k(n_hizteB635l`vkp#LcjmA0YT4U5xFTdMwVEG zS^1GhdA+mdwOEl$5B@BxrR~rv0Lw%~B|tmWP*^*iW;3HRs*l|D<1-L*9Z$)%{-pDG8$kqoX`(*syNYOG^Tq6TPDlXo_?t{1`Qli>mR zM;0}fnu~_y7eB=AfYX0BNwdA(bGi3I!_j5^1@A zf92S4xMQn`%u7Y{@!Hg$Bc4xu_<=kD;(H><>dVCrDz3@- z%;?oyK38Q<{kT_g$oqBCvRNScDeAp40T4E4z*&KeNfnU98RTTo2+Vo*Ts$oI{<293 zN1qbmJ?7LU`D(Vqc;r`etKUw<-&MqPUU~*VX{tK=#qOms!d5rF0>B}PcTDrig)T)5fw;~;Q{fn4%VD=q9 zUZFeac}zr}N*6duO(kE6SD9JiiC@H6$+i(gR?#dPqFTo+BW*zS`)T1lF^n1U+E9sb z2P$Hc)f6jF8MuR8#Y5{~PN#jtgJ}AObKX2FzjITZjUpyJ9uOBMIme9Yss@XLr8QdM zO%L+_P)PnX;PU@yAY8ME>5N3o72PcZ#is2(xw*mR|Mq1AnmyBXSbF+o=_7$CsCyEv z<&!F6(jbru(*n-g!@XN#I|pU^i@1=bvS##eT%=OOq&$9NcY~|;E)%E6fF;cpQzDVb zp#ho*$#D}+Bd?i0zq?DDauJi9itena!*JZZt)Ti)9|O$)6a_tNA@YON@Z)3?%@phu z;)@VIlu{9sfWIb3Qm7`LhUaOo1a~Q_b#i-YCxWPw}_LG{F3@ zYw3w-v#rib#tymH8_C=-ad39vcHiH6%Z<4?>TdGfDN!-Y(!uTX4V7_3Ct%#$;Hr70 zKV|&w@sP(n@wItS9*RRX@UEvE+ZENKcwOX#2PBFcOYaq;?&=zTC`XVym)YKxEsB92z3JlpGscJ&}WkPkaXNx@2ozMhZtOY`yjDjgPdbqYA`d{G z01lzFDdEMa;(r{Hb!uzDhO_;*+N=)9Zk%NU+>PE%0$twg{rQH_v8?xrE4$>G5O3Xp zpvPPTECz7MAeYs-{ChHC0I6!QY=C)?>SF7~spDPw%>(WHq$+AC^ZyI=ae9W0>Qz_( O0000 literal 0 HcmV?d00001 diff --git a/src/components/page-splash-common/auth/imgs/icon-auth-pay-wechat-logo.png b/src/components/page-splash-common/auth/imgs/icon-auth-pay-wechat-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..444a457f5ad43686fb4d2ac05848678b2189effe GIT binary patch literal 1286 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 literal 0 HcmV?d00001 diff --git a/src/components/page-splash-common/auth/mobile-auth-button.vue b/src/components/page-splash-common/auth/mobile-auth-button.vue new file mode 100644 index 0000000..913ed59 --- /dev/null +++ b/src/components/page-splash-common/auth/mobile-auth-button.vue @@ -0,0 +1,63 @@ + + + + + diff --git a/src/components/page-splash-common/auth/mobile-auth.vue b/src/components/page-splash-common/auth/mobile-auth.vue new file mode 100644 index 0000000..10f1838 --- /dev/null +++ b/src/components/page-splash-common/auth/mobile-auth.vue @@ -0,0 +1,38 @@ + + + + + diff --git a/src/components/page-splash-common/auth/pc-auth-button.vue b/src/components/page-splash-common/auth/pc-auth-button.vue new file mode 100644 index 0000000..a629928 --- /dev/null +++ b/src/components/page-splash-common/auth/pc-auth-button.vue @@ -0,0 +1,66 @@ + + + + + diff --git a/src/components/page-splash-common/auth/pc-auth.vue b/src/components/page-splash-common/auth/pc-auth.vue new file mode 100644 index 0000000..6a33ff9 --- /dev/null +++ b/src/components/page-splash-common/auth/pc-auth.vue @@ -0,0 +1,34 @@ + + + + + diff --git a/src/components/page-splash-common/auth/types/auth-type.ts b/src/components/page-splash-common/auth/types/auth-type.ts new file mode 100644 index 0000000..14ad675 --- /dev/null +++ b/src/components/page-splash-common/auth/types/auth-type.ts @@ -0,0 +1,10 @@ +import { AuthSettingItem } from '@polyv/live-watch-sdk'; + +export interface AuthButtonInject { + /** 观看条件数据 */ + authItem: ItemType; + /** 监听点击事件 */ + listenClickAuthButton: (callback: AnyFunc) => void; + /** 取消监听点击事件 */ + unlistenClickAuthButton: (callback: AnyFunc) => void; +} diff --git a/src/components/page-splash-common/player-trial/_hooks/use-player-trial-event.ts b/src/components/page-splash-common/player-trial/_hooks/use-player-trial-event.ts new file mode 100644 index 0000000..78f7298 --- /dev/null +++ b/src/components/page-splash-common/player-trial/_hooks/use-player-trial-event.ts @@ -0,0 +1,117 @@ +/** + * @file 试看播放器事件 hook + */ +import { ref } from 'vue'; +import { ChannelTrialInfo, PlayerEvents } from '@polyv/live-watch-sdk'; +import { local } from '@just4/storage'; + +import { getWatchCore } from '@/core/watch-sdk'; +import { usePlayerStore } from '@/store/use-player-store'; +import { appEvents, eventBus } from '@/app/app-events'; +import { getStorageKey } from '@/assets/utils/storage'; + +/** 获取本地存储的"试看剩余时长" key 值 */ +const mergeStorageKey = (sessionId: string) => { + return getStorageKey(`live-trial-remaining-time-${sessionId}`); +}; + +/** @hook 试看播放器事件 hook */ +export const usePlayerTrialEvent = ({ trialInfo }: { trialInfo: ChannelTrialInfo | null }) => { + const playerStore = usePlayerStore(); + + /** 试看剩余时长,秒级别 */ + const trialRemainingTime = ref(0); + + /** 试看时长定时器 */ + const trialWatchTimer = ref(null); + + /** 设置剩余试看时长到本地缓存中 */ + function setLocalTrialRemainingTime(time: number) { + if (!trialInfo) return; + if (time < 0) return; + + local.set(mergeStorageKey(trialInfo.channelSessionId), String(time)); + } + + /** 清除试看时长轮询定时器 */ + function clearTrialWatchTimer() { + if (trialWatchTimer.value !== null) { + clearInterval(trialWatchTimer.value); + } + trialWatchTimer.value = null; + } + + /** 通过定时器轮询,更新本地缓存的试看时长 */ + function setTrialWatchTimer() { + trialWatchTimer.value = window.setInterval(() => { + if (trialRemainingTime.value <= 0) { + clearTrialWatchTimer(); + eventBus.$emit(appEvents.player.TrialPlayEnd); + return; + } + trialRemainingTime.value -= 1; + setLocalTrialRemainingTime(trialRemainingTime.value); + }, 1000); + } + + /** 初始化剩余试看时长 */ + function initTrialRemainingTime() { + if (!trialInfo) { + console.warn('需要频道试看数据'); + return; + } + + /** 后端计算的试看剩余时长 */ + const serverTrialRemainingTime = trialInfo.availableTrial; + /** 频道配置的试看总时长,以秒为单位 */ + const serverTrialConfigTime = trialInfo.trialWatchTime * 60; + + const cachedTime = local.get(mergeStorageKey(trialInfo.channelSessionId)); + /** 本地缓存剩余时长 */ + const localTrialRemainingTime = + cachedTime !== null ? parseInt(cachedTime) : serverTrialConfigTime; + + if (localTrialRemainingTime === 0) { + // 无本地缓存 || 剩余时长确实为 0 的情况 + clearTrialWatchTimer(); + eventBus.$emit(appEvents.player.TrialPlayEnd); + return; + } else { + eventBus.$emit(appEvents.player.TrialPlayStart, { + trialRemainingTime: localTrialRemainingTime, + }); + } + + // 设置剩余时长 + trialRemainingTime.value = + localTrialRemainingTime === serverTrialConfigTime + ? serverTrialConfigTime + : Math.min(localTrialRemainingTime, serverTrialRemainingTime); // 本地缓存剩余时长和服务器记录剩余时长取最小 + setLocalTrialRemainingTime(trialRemainingTime.value); + + setTrialWatchTimer(); + } + + /** 播放器初始化钩子 */ + function onPlayerInited() { + playerStore.$patch({ playerInited: true }); + initTrialRemainingTime(); + } + + function bindPlayerEvents() { + const watchCore = getWatchCore(); + watchCore.player.eventEmitter.on(PlayerEvents.PlayerInited, onPlayerInited); + } + + function unbindPlayerEvents() { + const watchCore = getWatchCore(); + watchCore.player.eventEmitter.off(PlayerEvents.PlayerInited, onPlayerInited); + + clearTrialWatchTimer(); + } + + return { + bindPlayerEvents, + unbindPlayerEvents, + }; +}; diff --git a/src/components/page-splash-common/player-trial/_hooks/use-player-trial-main.ts b/src/components/page-splash-common/player-trial/_hooks/use-player-trial-main.ts new file mode 100644 index 0000000..f2f59d4 --- /dev/null +++ b/src/components/page-splash-common/player-trial/_hooks/use-player-trial-main.ts @@ -0,0 +1,78 @@ +/** + * @file 试看播放器 hook + */ +import { onBeforeUnmount, onMounted, ref, unref } from 'vue'; +import { ChannelTrialInfo, SetupPlayerOptions } from '@polyv/live-watch-sdk'; + +import { getWatchCore } from '@/core/watch-sdk'; +import { useChannelStore } from '@/store/use-channel-store'; +import { usePlayerStore } from '@/store/use-player-store'; + +import { usePlayerTrialEvent } from './use-player-trial-event'; + +export type InitPlayerOptions = Omit; + +/** @hook 试看播放器 Hook */ +export const usePlayerTrialMain = ( + hookOptions: { + initPlayerOptions?: InitPlayerOptions; + trialInfo?: ChannelTrialInfo | null; + } = {}, +) => { + const { initPlayerOptions = {}, trialInfo = null } = hookOptions; + + const { bindPlayerEvents, unbindPlayerEvents } = usePlayerTrialEvent({ trialInfo }); + + const channelStore = useChannelStore(); + const playerStore = usePlayerStore(); + + /** 播放器渲染容器 */ + const playerContainer = ref(); + + /** 初始化播放器 */ + async function initPlayer(): Promise { + const container = unref(playerContainer); + if (!container || !trialInfo) { + return; + } + + playerStore.$patch({ + playerInited: false, + isPlayStarted: false, + }); + + const playerOptions: SetupPlayerOptions = { + container, + barrageEnabled: true, + marqueeName: trialInfo.viewerInfo.marqueeName || undefined, + vrHead: channelStore.channelDetail?.domain.assetsUrlPrefix, + x5FullPage: true, + sessionId: trialInfo.channelSessionId, + ...initPlayerOptions, + }; + const watchCore = getWatchCore(); + await watchCore.player.setupPlayer(playerOptions); + + bindPlayerEvents(); + } + + /** 销毁播放器 */ + function destroyPlayer(): void { + const watchCore = getWatchCore(); + watchCore.player.destroyPlayer(); + + unbindPlayerEvents(); + } + + onMounted(() => { + initPlayer(); + }); + + onBeforeUnmount(() => { + destroyPlayer(); + }); + + return { + playerContainer, + }; +}; diff --git a/src/components/page-splash-common/player-trial/mobile-player-trial/mobile-player-trial.vue b/src/components/page-splash-common/player-trial/mobile-player-trial/mobile-player-trial.vue new file mode 100644 index 0000000..c1f6cbe --- /dev/null +++ b/src/components/page-splash-common/player-trial/mobile-player-trial/mobile-player-trial.vue @@ -0,0 +1,77 @@ + + + + + diff --git a/src/components/page-splash-common/player-trial/use-player-trial.ts b/src/components/page-splash-common/player-trial/use-player-trial.ts new file mode 100644 index 0000000..33c54e3 --- /dev/null +++ b/src/components/page-splash-common/player-trial/use-player-trial.ts @@ -0,0 +1,93 @@ +import { computed, onMounted, ref } from 'vue'; +import { AuthType, LiveStatus, YN, ChannelTrialInfo } from '@polyv/live-watch-sdk'; +import { isWeixin } from '@/assets/utils/browser'; + +import { useAuthStore } from '@/store/use-auth-store'; +import { useChannelStore } from '@/store/use-channel-store'; +import { ynToBool } from '@utils-ts/boolean'; + +import { getWatchCore } from '@/core/watch-sdk'; +import { appEvents, useEventBusListener } from '@/app/app-events'; +import { toast } from '@/hooks/components/use-toast'; + +/** + * @hook 试看-引导页业务逻辑 + * */ +export const usePlayerTrialHook = () => { + const channelStore = useChannelStore(); + const authStore = useAuthStore(); + + /** 频道试看配置数据 */ + const trialInfo = ref(null); + + /** + * 是否启用"试看"功能 + * 微信环境、直播状态、付费观看条件试看开关 + * */ + const trialEnabled = computed(() => { + if (!isWeixin) return false; + if (channelStore.liveStatus !== LiveStatus.Live) return false; + + const payAuthSettingItem = authStore.getAuthSettingItem(AuthType.Pay); + if ( + !payAuthSettingItem || + !ynToBool(payAuthSettingItem.trialWatchEnabled || YN.N) || + !payAuthSettingItem.trialWatchTime + ) { + return false; + } + + return true; + }); + + /** 是否展示试看播放器 */ + const trialPlayerVisible = computed(() => { + return trialEnabled.value && trialInfo.value && trialInfo.value.availableTrial > 0; + }); + + /** 试看结束提示是否显示 */ + const trialPlayFinishTipVisible = computed(() => { + return trialEnabled.value && trialInfo.value && trialInfo.value.availableTrial === 0; + }); + + /** 初始化试看数据 */ + async function initTrialInfo() { + if (!trialEnabled.value) return; + + const watchCore = getWatchCore(); + const result = await watchCore.trial.getTrialInfo(); + if (result.success) { + trialInfo.value = result; + } else { + toast.error(result.failMessage || '未知错误'); + } + } + + /** 更新试看信息 */ + function updateTrialInfo(data: Partial) { + const originData = trialInfo.value; + if (!originData) return; + + trialInfo.value = { + ...originData, + ...data, + }; + } + + onMounted(async () => { + await initTrialInfo(); + }); + + useEventBusListener(appEvents.player.TrialPlayEnd, () => { + updateTrialInfo({ + availableTrial: 0, + }); + }); + + return { + trialEnabled, + trialInfo, + trialPlayerVisible, + trialPlayFinishTipVisible, + }; +}; diff --git a/src/components/page-watch-common/ask/ask-msg-list/mobile-ask-msg-list.vue b/src/components/page-watch-common/ask/ask-msg-list/mobile-ask-msg-list.vue new file mode 100644 index 0000000..3f0e66b --- /dev/null +++ b/src/components/page-watch-common/ask/ask-msg-list/mobile-ask-msg-list.vue @@ -0,0 +1,37 @@ + + + + + + diff --git a/src/components/page-watch-common/ask/ask-msg-list/pc-ask-msg-list.vue b/src/components/page-watch-common/ask/ask-msg-list/pc-ask-msg-list.vue new file mode 100644 index 0000000..a8d2eb0 --- /dev/null +++ b/src/components/page-watch-common/ask/ask-msg-list/pc-ask-msg-list.vue @@ -0,0 +1,39 @@ + + + + + + diff --git a/src/components/page-watch-common/ask/ask-msg-list/use-ask-msg-list.ts b/src/components/page-watch-common/ask/ask-msg-list/use-ask-msg-list.ts new file mode 100644 index 0000000..89dbe30 --- /dev/null +++ b/src/components/page-watch-common/ask/ask-msg-list/use-ask-msg-list.ts @@ -0,0 +1,52 @@ +import { TAB_NAME_ASK } from '@/assets/constants/tab-name'; +import { emitFunc, VueEmit } from '@/assets/utils/vue-utils/emit-utils'; +import { PropUtils } from '@/assets/utils/vue-utils/props-utils'; +import { ScrollListInstance, useScrollList } from '@/hooks/behaviors/use-scroll-list'; +import { useLayoutStore } from '@/store/use-layout-store'; +import { AskMsgType } from '@polyv/live-watch-sdk'; +import { watch } from 'vue'; + +// eslint-disable-next-line @typescript-eslint/no-empty-interface +export interface AskMsgListInstance extends ScrollListInstance {} + +export const askMsgListProps = () => ({ + /** 提问消息列表 */ + askMsgList: PropUtils.array().isRequired, +}); + +export const askMsgListEmits = () => ({ + 'near-top': emitFunc(), +}); + +export const useAskMsgList = (options: { emit: VueEmit }) => { + const { emit } = options; + const layoutStore = useLayoutStore(); + + const { scrollRef, scrollListInstance, onScrollEvent, scrollToBottom } = useScrollList({ + firstElemIndex: 1, + nearTopCallback: () => { + emit('near-top'); + }, + }); + + // 切到提问 Tab 时自动滚到最底部 + watch( + () => [layoutStore.mobileMenuCurrentName, layoutStore.pcAsideTabCurrentName], + () => { + if ( + layoutStore.mobileMenuCurrentName === TAB_NAME_ASK || + layoutStore.pcAsideTabCurrentName === TAB_NAME_ASK + ) { + scrollToBottom(); + } + }, + ); + + const askMsgListInstance: AskMsgListInstance = scrollListInstance; + + return { + scrollRef, + askMsgListInstance, + onScrollEvent, + }; +}; diff --git a/src/components/page-watch-common/ask/hooks/use-ask-send.ts b/src/components/page-watch-common/ask/hooks/use-ask-send.ts new file mode 100644 index 0000000..78b9b1c --- /dev/null +++ b/src/components/page-watch-common/ask/hooks/use-ask-send.ts @@ -0,0 +1,94 @@ +import { ref } from 'vue'; +import { getWatchCore } from '@/core/watch-sdk'; + +import { getImgSize } from '@/assets/utils/image'; +import { changeProtocol } from '@utils-ts/net'; +import { wait } from '@/assets/utils/utils'; + +import { MsgInputWrapInstance } from '@/components/page-watch-common/msg-input-wrap/use-msg-input-wrap'; +import { PlvInputContent } from '@/plugins/polyv-ui/types'; +import { toast } from '@/hooks/components/use-toast'; +import { translate } from '@/assets/lang'; + +export const useAskSend = () => { + /** 消息输入框 */ + const msgInputWrapRef = ref(); + + /** 监听输入框消息发送 */ + async function onSubmitMessage({ contentList }: { contentList: PlvInputContent[] }) { + if (!msgInputWrapRef.value) return; + + msgInputWrapRef.value.clearInput(); + msgInputWrapRef.value.resetStatus(); + + await submitMessageQueue(contentList); + } + + /** 提交消息队列 */ + async function submitMessageQueue(contentList: PlvInputContent[]) { + for await (const message of contentList) { + if (message.type === 'text') { + submitAskMsg(message.content); + } else if (message.type === 'img') { + await sendAskImage(message.file); + } + await wait(200); + } + } + + /** 发送提问的图片消息 */ + async function sendAskImage(file: File | null) { + try { + const watchCore = getWatchCore(); + const { imageId, imageUrl } = await watchCore.utils.directUploadImage(file); + const { width, height } = await getImgSize(imageUrl); + + watchCore.ask.sendAskImage({ + imageId, + imageUrl: changeProtocol(imageUrl, 'https'), + size: { + width, + height, + }, + }); + } catch (error) { + toast.error(translate('watchCore.error.uploadImage')); + } + } + + /** 发送提问的发言消息 - 纯文本 */ + function submitAskMsg(content: string) { + const watchCore = getWatchCore(); + watchCore.ask.sendAskSpeak({ + content, + }); + } + + /** + * 处理点击发送图片 + */ + async function onClickSendImage() { + try { + const watchCore = getWatchCore(); + const { imageId, imageUrl } = await watchCore.utils.uploadImage(); + const { width, height } = await getImgSize(imageUrl); + + watchCore.ask.sendAskImage({ + imageId, + imageUrl: changeProtocol(imageUrl, 'https'), + size: { + width, + height, + }, + }); + } catch (error) { + toast.error(translate('watchCore.error.uploadImage')); + } + } + + return { + msgInputWrapRef, + onSubmitMessage, + onClickSendImage, + }; +}; diff --git a/src/components/page-watch-common/ask/hooks/use-ask.ts b/src/components/page-watch-common/ask/hooks/use-ask.ts new file mode 100644 index 0000000..06ca470 --- /dev/null +++ b/src/components/page-watch-common/ask/hooks/use-ask.ts @@ -0,0 +1,143 @@ +import { computed, nextTick, onBeforeUnmount, onMounted, Ref, ref, unref } from 'vue'; +import { translate } from '@/assets/lang'; +import { getWatchCore } from '@/core/watch-sdk'; +import { useChannelMenuStore } from '@/store/use-channel-menu-store'; +import { useChannelStore } from '@/store/use-channel-store'; +import { useChatStore } from '@/store/use-chat-store'; +import { storeDefinitionToRefs } from '@/plugins/pinia/util'; + +import { + AskEvents, + AskMsgType, + ChannelMenuType, + ChatMsgSource, + ChatMsgSpeakType, + YN, +} from '@polyv/live-watch-sdk'; +import { ynToBool } from '@utils-ts/boolean'; +import { uuidV4 } from '@utils-ts/string'; + +import { AskMsgListInstance } from '../ask-msg-list/use-ask-msg-list'; + +export interface UseAskOptions { + askMsgListRef: Ref; +} + +export const useAsk = (options: UseAskOptions) => { + const { askMsgListRef } = options; + + const channelStore = useChannelStore(); + const channelMenuStore = useChannelMenuStore(); + + const { chatInputPlaceholder, chatRoomIsClosed } = storeDefinitionToRefs(useChatStore); + + const historyStart = ref(0); + const historyLength = 20; + const isNoMore = ref(false); + + /** 提问消息列表 */ + const askMsgList = ref([]); + + /** 默认消息的 id */ + const placeholderMsgId = uuidV4(); + + /** 输入框默认值 */ + const askInputPlaceholder = computed(() => { + if (unref(chatRoomIsClosed)) { + return translate('chat.input.placeholder'); + } else { + return unref(chatInputPlaceholder); + } + }); + + /** 提问是否可以发送图片 */ + const questionImageEnabled = computed(() => { + return ynToBool(channelStore.channelDetail?.channelConfig.questionImageEnabled, YN.N); + }); + + /** 渲染的消息列表 */ + const askMsgRenderList = computed(() => { + // 提问的菜单数据 + const askMenuData = channelMenuStore.getMenuData(ChannelMenuType.Quiz); + const content = askMenuData?.content || translate('ask.placeholderMsg'); + + // 插入默认消息 + const placeholderMsg: ChatMsgSpeakType = { + id: placeholderMsgId, + time: Date.now(), + msgSource: ChatMsgSource.Speak, + user: channelStore.teacherInfo, + content, + }; + + return [placeholderMsg, ...unref(askMsgList)]; + }); + + /** 获取提问消息列表 */ + async function getAskMsgList() { + if (isNoMore.value) { + return; + } + const watchCore = getWatchCore(); + const start = unref(historyStart); + const end = unref(historyStart) + historyLength - 1; + const result = await watchCore.ask.getAskHistory({ + start, + end, + }); + + historyStart.value = end + 1; + isNoMore.value = result.isEnd; + const list = result.askMsgList; + askMsgList.value = [...list, ...askMsgList.value]; + + const askMsgListInstance = unref(askMsgListRef); + if (start === 0) { + askMsgListInstance?.scrollToBottom(); + } else { + await askMsgListInstance?.scrollToFirstRecord(); + } + + await nextTick(); + askMsgListInstance?.recordFirstElem(); + } + + onMounted(() => { + getAskMsgList(); + }); + + /** 处理提问相关事件 */ + function onAskEvent(evt: { askMsg: AskMsgType }) { + askMsgList.value.push(evt.askMsg); + const askMsgListInstance = unref(askMsgListRef); + askMsgListInstance?.checkScrollToBottom(); + } + + function bindAskEvent() { + const watchCore = getWatchCore(); + watchCore.ask.eventEmitter.on(AskEvents.StudentQuestion, onAskEvent); + watchCore.ask.eventEmitter.on(AskEvents.TeacherAnswer, onAskEvent); + } + + function unbindAskEvent() { + const watchCore = getWatchCore(); + watchCore.ask.eventEmitter.off(AskEvents.StudentQuestion, onAskEvent); + watchCore.ask.eventEmitter.off(AskEvents.TeacherAnswer, onAskEvent); + } + + onMounted(() => { + bindAskEvent(); + }); + onBeforeUnmount(() => { + unbindAskEvent(); + }); + + return { + askInputPlaceholder, + askMsgListRef, + askMsgList, + askMsgRenderList, + getAskMsgList, + questionImageEnabled, + }; +}; diff --git a/src/components/page-watch-common/ask/mobile-ask/mobile-ask.vue b/src/components/page-watch-common/ask/mobile-ask/mobile-ask.vue new file mode 100644 index 0000000..eb0d963 --- /dev/null +++ b/src/components/page-watch-common/ask/mobile-ask/mobile-ask.vue @@ -0,0 +1,53 @@ + + + + + + diff --git a/src/components/page-watch-common/ask/pc-ask/pc-ask.vue b/src/components/page-watch-common/ask/pc-ask/pc-ask.vue new file mode 100644 index 0000000..d264beb --- /dev/null +++ b/src/components/page-watch-common/ask/pc-ask/pc-ask.vue @@ -0,0 +1,66 @@ + + + + + + diff --git a/src/components/page-watch-common/barrage/pc-barrage.vue b/src/components/page-watch-common/barrage/pc-barrage.vue new file mode 100644 index 0000000..3c86dc8 --- /dev/null +++ b/src/components/page-watch-common/barrage/pc-barrage.vue @@ -0,0 +1,31 @@ + + + + + + diff --git a/src/components/page-watch-common/barrage/use-barrage.ts b/src/components/page-watch-common/barrage/use-barrage.ts new file mode 100644 index 0000000..4eb392e --- /dev/null +++ b/src/components/page-watch-common/barrage/use-barrage.ts @@ -0,0 +1,62 @@ +/** + * @file 弹幕 hook + */ +import { getWatchCore } from '@/core/watch-sdk'; +import { usePlayerStore } from '@/store/use-player-store'; +import { storeDefinitionToRefs } from '@/plugins/pinia/util'; +import { BarrageTarget } from '@polyv/live-watch-sdk'; +import { isRef, onBeforeUnmount, ref, Ref, unref, watchEffect } from 'vue'; + +export const useBarrage = ( + options: { + containerRef?: HTMLDivElement | Ref; + } = {}, +) => { + const { barrageBackstageEnabled, barrageShow } = storeDefinitionToRefs(usePlayerStore); + const containerRef = isRef(options.containerRef) + ? options.containerRef + : ref(options.containerRef); + let barrageTarget: BarrageTarget | undefined; + + /** 设置弹幕 */ + function setupBarrage(): void { + destroyBarrage(); + + const container = unref(containerRef); + if (!container) { + return; + } + + const watchCore = getWatchCore(); + barrageTarget = watchCore.barrage.setupBarrage({ + container, + }); + } + + /** 销毁弹幕 */ + function destroyBarrage(): void { + if (barrageTarget) { + barrageTarget.destroyTarget(); + barrageTarget = undefined; + } + } + + watchEffect(() => { + if (!unref(barrageBackstageEnabled) || !unref(barrageShow)) { + destroyBarrage(); + return; + } + + setupBarrage(); + }); + + onBeforeUnmount(() => { + destroyBarrage(); + }); + + return { + containerRef, + setupBarrage, + destroyBarrage, + }; +}; diff --git a/src/components/page-watch-common/chapter/hooks/use-chapter.ts b/src/components/page-watch-common/chapter/hooks/use-chapter.ts new file mode 100644 index 0000000..06b99ec --- /dev/null +++ b/src/components/page-watch-common/chapter/hooks/use-chapter.ts @@ -0,0 +1,67 @@ +import { getWatchCore } from '@/core/watch-sdk'; +import { usePlaybackStore } from '@/store/use-playback-store'; +import { usePlayerStore } from '@/store/use-player-store'; +import { ChapterItem } from '@polyv/live-watch-sdk'; +import { ref, watch, watchEffect } from 'vue'; +import { usePlayerAction } from '../../player/hooks/use-player-action'; + +export const useChapter = () => { + const { toPlay, toSeekVideo } = usePlayerAction(); + const playbackStore = usePlaybackStore(); + const playerStore = usePlayerStore(); + + /** 章节列表 */ + const chapterList = ref([]); + + /** + * 获取章节列表 + */ + async function getChapterList() { + chapterList.value = []; + const playbackTarget = playbackStore.currentPlaybackTarget; + if (!playbackTarget) { + return; + } + + const watchCore = getWatchCore(); + const list = await watchCore.playback.getChapterList(playbackTarget.playbackOptions); + chapterList.value = list; + } + + /** + * 处理点击章节 + */ + function onClickChapter(item: ChapterItem) { + toSeekVideo(item.duration); + toPlay(); + } + + watch( + () => playbackStore.currentPlaybackTarget, + () => { + getChapterList(); + }, + { + immediate: true, + }, + ); + + const currentIndex = ref(0); + + watchEffect(() => { + const currentTime = playerStore.currentTime; + // 时间倒叙寻找能当前能匹配到的最后一个章节 + for (let i = chapterList.value.length - 1; i >= 0; i--) { + if (currentTime >= chapterList.value[i].duration) { + currentIndex.value = i; + break; + } + } + }); + + return { + chapterList, + currentIndex, + onClickChapter, + }; +}; diff --git a/src/components/page-watch-common/chapter/mobile-chapter.vue b/src/components/page-watch-common/chapter/mobile-chapter.vue new file mode 100644 index 0000000..97eb16c --- /dev/null +++ b/src/components/page-watch-common/chapter/mobile-chapter.vue @@ -0,0 +1,73 @@ + + + + + + diff --git a/src/components/page-watch-common/chapter/pc-chapter.vue b/src/components/page-watch-common/chapter/pc-chapter.vue new file mode 100644 index 0000000..6d681bf --- /dev/null +++ b/src/components/page-watch-common/chapter/pc-chapter.vue @@ -0,0 +1,76 @@ + + + + + + diff --git a/src/components/page-watch-common/chapter/portrait-chapter.vue b/src/components/page-watch-common/chapter/portrait-chapter.vue new file mode 100644 index 0000000..026fcaa --- /dev/null +++ b/src/components/page-watch-common/chapter/portrait-chapter.vue @@ -0,0 +1,73 @@ + + + + + + diff --git a/src/components/page-watch-common/chat/chat-close-tips/chat-close-tips.vue b/src/components/page-watch-common/chat/chat-close-tips/chat-close-tips.vue new file mode 100644 index 0000000..9884ed3 --- /dev/null +++ b/src/components/page-watch-common/chat/chat-close-tips/chat-close-tips.vue @@ -0,0 +1,35 @@ + + + + + + diff --git a/src/components/page-watch-common/chat/chat-close-tips/imgs/closed_chat_black.png b/src/components/page-watch-common/chat/chat-close-tips/imgs/closed_chat_black.png new file mode 100644 index 0000000000000000000000000000000000000000..e4f68d49955f47e2278e653b1c0d4688d01145a4 GIT binary patch literal 865 zcmeAS@N?(olHy`uVBq!ia0vp^8$g(a8A!&?{Fw`+R04cLT!Az}uq=Yf9jJ(>B*-tA zfkQySH^9L{L&C$Lt$8odP^Jf-E{-7;jBjUdoqorGr@ek3_hXjq_L(br&r}`miJh@Z zU~1xvLm{m*U+|yV9r^l#mF;>P$J)C(HU5VcB-#?e=->n$%LlU`UiG}b`+Ix-G}FDa z&>3!R!1K*&Uqj-SpglZ1+*2QkCRi*Lxqfg%yym$B zADlGTH6G0VnVTd$`^FJ9vyGj;IZ49ry`#lWFa7jLmtlj4)>QH9K@1r;wWfG=zkIMi zKx3--d$$GiW3)8qbvvvEQhtIN6TMZBo|x$U@#x3dN_EeV%IAGl?@04H9^djve|D6Q zOyHki$1JAz)I@Bx*v-K<_eX7)#v^mSz$4i*i#o#ZyU2VDf1JZXKLkFHHZ_ViTsva!H)kZ^ku~Nlzlb`E=LsDz2T`2kI89Nxp8d zyBl_DV@TX8Px;{6fhQCb)T(budG{QjIE(3I|0(PKGv0k}5_vvp)9fFe5Oxt;@5p#) z%CjS%epV^4`g9BUw$5HO!=lgWNoue_zN6tIC;g7iB1b!-CoBA8V#_oZJ(7P=G3S5N zj&}zXWFlBTzS@~Ep)aDTLf@jrd7(lav)oUK)16PX*VcSUJ93;+?&qolUGtqCcHJ>} zq|@3^BAa~Vx#EEsg{AN6xH%u5I?eNUS2Ihs=X1#&^d61ixaGP?q^& d10EoHtiHPJR0_XG_I*%B@pScbS?83{1OU!Mc3%Jh literal 0 HcmV?d00001 diff --git a/src/components/page-watch-common/chat/chat-close-tips/imgs/closed_chat_icon.png b/src/components/page-watch-common/chat/chat-close-tips/imgs/closed_chat_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..d75fa295341857c368452c52750a0054861524bd GIT binary patch literal 867 zcmeAS@N?(olHy`uVBq!ia0vp^8$g(a8A!&?{Fw`+R04cLT!Hj|LSPGL?@ORMo{}KH zU+Rl?9Xc#?6k-n3C0? za$+eLrxusYDy|)?nhu0bVA`hZb#Uof_8kpk7c#1^*6liV+OBBp5YE zc7M;@?ab~63uTUj(4@(_Gu!0-Kd;`q+(`GX_E~l#+vFEIovn%?ab2x^CXSnhBZiq;0ikv%gj7#LmsXIsX$~Jb#zDW|_edDNJU5HNI z!_~hYl`{M|6ZZ9}HY%&80SvRi&IpInZ-?kl5e86AS zDZASuts*g3$?~t-5oLyx^L#Fxd;3U-y+Gst#m(K;Q<-MCjuLcY-49lm0&maVx4sPn0%bce4D(y z-7hCcUVHR`>ERyBLofVqId)78&qol`;+0Qei1GXMYp literal 0 HcmV?d00001 diff --git a/src/components/page-watch-common/chat/chat-connect-error/mobile-chat-connect-error-dialog.vue b/src/components/page-watch-common/chat/chat-connect-error/mobile-chat-connect-error-dialog.vue new file mode 100644 index 0000000..be9b2aa --- /dev/null +++ b/src/components/page-watch-common/chat/chat-connect-error/mobile-chat-connect-error-dialog.vue @@ -0,0 +1,86 @@ + + + + + + diff --git a/src/components/page-watch-common/chat/chat-connect-error/pc-chat-connect-error-dialog.vue b/src/components/page-watch-common/chat/chat-connect-error/pc-chat-connect-error-dialog.vue new file mode 100644 index 0000000..d698b9a --- /dev/null +++ b/src/components/page-watch-common/chat/chat-connect-error/pc-chat-connect-error-dialog.vue @@ -0,0 +1,55 @@ + + + + + + diff --git a/src/components/page-watch-common/chat/chat-connect-error/use-chat-connect-error.ts b/src/components/page-watch-common/chat/chat-connect-error/use-chat-connect-error.ts new file mode 100644 index 0000000..11e2d31 --- /dev/null +++ b/src/components/page-watch-common/chat/chat-connect-error/use-chat-connect-error.ts @@ -0,0 +1,46 @@ +import { translate } from '@/assets/lang'; +import { useChatStore } from '@/store/use-chat-store'; +import { ref, watchEffect } from 'vue'; + +/** + * 聊天室连接失败 hook + */ +export const useChatConnectError = () => { + const chatStore = useChatStore(); + + /** 连接失败提示是否显示 */ + const connectErrorVisible = ref(false); + + watchEffect(() => { + if (chatStore.connectError) { + connectErrorVisible.value = true; + } else { + connectErrorVisible.value = false; + } + }); + + /** 提示文案 */ + const errorTipsText = translate('chat.connectError'); + const confirmText = translate('base.confirm'); + const cancelText = translate('base.ignore'); + + /** 处理确认点击 */ + function onConfirm(): void { + connectErrorVisible.value = false; + window.location.reload(); + } + + /** 处理取消点击 */ + function onCancel(): void { + connectErrorVisible.value = false; + } + + return { + connectErrorVisible, + errorTipsText, + confirmText, + cancelText, + onConfirm, + onCancel, + }; +}; diff --git a/src/components/page-watch-common/chat/chat-emotional-feedback/imgs/icon-no.png b/src/components/page-watch-common/chat/chat-emotional-feedback/imgs/icon-no.png new file mode 100644 index 0000000000000000000000000000000000000000..821f4f32d10a015059a5382d78355a155b9aa058 GIT binary patch literal 5324 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 LUA0;jo3Q@@qg|W+ literal 0 HcmV?d00001 diff --git a/src/components/page-watch-common/chat/chat-emotional-feedback/imgs/icon-yes.png b/src/components/page-watch-common/chat/chat-emotional-feedback/imgs/icon-yes.png new file mode 100644 index 0000000000000000000000000000000000000000..1758975a033778581e64ec1b70f20746652fc9a2 GIT binary patch literal 4989 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 Hu0mjffftvf literal 0 HcmV?d00001 diff --git a/src/components/page-watch-common/chat/chat-emotional-feedback/mobile-emotional-feedback.vue b/src/components/page-watch-common/chat/chat-emotional-feedback/mobile-emotional-feedback.vue new file mode 100644 index 0000000..f8b6b6f --- /dev/null +++ b/src/components/page-watch-common/chat/chat-emotional-feedback/mobile-emotional-feedback.vue @@ -0,0 +1,76 @@ + + + + + + diff --git a/src/components/page-watch-common/chat/chat-emotional-feedback/pc-emotional-feedback.vue b/src/components/page-watch-common/chat/chat-emotional-feedback/pc-emotional-feedback.vue new file mode 100644 index 0000000..ca5c70c --- /dev/null +++ b/src/components/page-watch-common/chat/chat-emotional-feedback/pc-emotional-feedback.vue @@ -0,0 +1,76 @@ + + + + + + diff --git a/src/components/page-watch-common/chat/chat-emotional-feedback/use-emotional-feedback.ts b/src/components/page-watch-common/chat/chat-emotional-feedback/use-emotional-feedback.ts new file mode 100644 index 0000000..29bfa93 --- /dev/null +++ b/src/components/page-watch-common/chat/chat-emotional-feedback/use-emotional-feedback.ts @@ -0,0 +1,190 @@ +import { PlvEmotionalFeedbackInstance } from '@/plugins/polyv-ui/types'; +import { onBeforeUnmount, onMounted, ref, unref } from 'vue'; +import { ChatEvents, EmotionalFeedbackMsgType, EmotionalFeedbackType } from '@polyv/live-watch-sdk'; +import { getWatchCore } from '@/core/watch-sdk'; + +export const useEmotionalFeedback = () => { + /** 明白了实例 */ + const yesRef = ref(); + /** 没听懂实例 */ + const noRef = ref(); + + /** 点击次数 */ + let clickCount = 0; + /** 点击定时器 */ + let clickTimer: number | undefined; + + /** 本地记录待发送的数量 */ + let waitYesCount = 0; + /** 本地记录待发送的数量 */ + let waitNoCount = 0; + + /** 发送定时器 */ + let sendTimer: number | undefined; + + /** + * 开始一个动画 + * @param type 类型 + */ + function startAnimation(type: EmotionalFeedbackType) { + let instance: PlvEmotionalFeedbackInstance | undefined; + if (type === EmotionalFeedbackType.Yes) { + instance = unref(yesRef); + } else { + instance = unref(noRef); + } + + if (!instance) return; + + instance.start(type, true); + } + + /** + * 处理点击图标 + * @param type 类型 + */ + function onClickIcon(type: EmotionalFeedbackType) { + startAnimation(type); + + /** 已经超过 5 次,不再处理 */ + if (clickCount >= 5) return; + + /** 30s 内只能点击 5 次 */ + clickCount += 1; + if (clickCount >= 5) { + clickTimer = window.setTimeout(() => { + clickCount = 0; + clearTimeout(clickTimer); + clickTimer = undefined; + }, 30 * 1000); + } + + if (type === EmotionalFeedbackType.Yes) { + waitYesCount += 1; + } else { + waitNoCount += 1; + } + setSendTimer(); + } + + /** + * 发送反馈数量 + */ + function sendEmotionalCount() { + clearSendTimer(); + const watchCore = getWatchCore(); + + if (waitYesCount) { + watchCore.chat.sendEmotionalFeedback(EmotionalFeedbackType.Yes, waitYesCount); + waitYesCount = 0; + } + if (waitNoCount) { + watchCore.chat.sendEmotionalFeedback(EmotionalFeedbackType.No, waitNoCount); + waitNoCount = 0; + } + } + + /** + * 设置发送定时器 + */ + function setSendTimer() { + clearSendTimer(); + sendTimer = window.setTimeout(() => { + sendEmotionalCount(); + }, 3000); + } + + /** + * 清空发送定时器 + */ + function clearSendTimer() { + if (sendTimer) { + clearTimeout(sendTimer); + sendTimer = undefined; + } + } + + /** 动画定时器 */ + let animationTimer: number | undefined; + + let animationYesCount = 0; + let animationNoCount = 0; + + /** 处理情绪事件 */ + function onEmotionFeedbackMsg(evt: { feedbackMsg: EmotionalFeedbackMsgType }) { + const feedbackMsg = evt.feedbackMsg; + if (feedbackMsg.type === EmotionalFeedbackType.Yes) { + animationYesCount += feedbackMsg.count; + } else { + animationNoCount += feedbackMsg.count; + } + checkAnimationTimer(); + } + + onMounted(() => { + const watchCore = getWatchCore(); + watchCore.chat.eventEmitter.on(ChatEvents.ChatEmotionalFeedback, onEmotionFeedbackMsg); + }); + + onBeforeUnmount(() => { + const watchCore = getWatchCore(); + watchCore.chat.eventEmitter.off(ChatEvents.ChatEmotionalFeedback, onEmotionFeedbackMsg); + }); + + /** 设置动画定时器 */ + function setAnimationTimer() { + animationTimer = window.setInterval(() => { + if (animationYesCount !== 0) { + animationYesCount -= 1; + startAnimation(EmotionalFeedbackType.Yes); + } + + if (animationNoCount !== 0) { + animationNoCount -= 1; + startAnimation(EmotionalFeedbackType.No); + } + + checkAnimationTimer(); + }, 200); + } + + /** 清空动画定时器 */ + function clearAnimationTimer() { + if (animationTimer) { + clearInterval(animationTimer); + animationTimer = undefined; + } + } + + /** 检查动画定时器 */ + function checkAnimationTimer() { + // 动画数为空,清空定时器 + if (animationYesCount === 0 && animationNoCount === 0) { + clearAnimationTimer(); + return; + } + + if (animationTimer) { + return; + } + + setAnimationTimer(); + } + + onBeforeUnmount(() => { + if (clickTimer) { + clearTimeout(clickTimer); + clickTimer = undefined; + } + clearSendTimer(); + clearAnimationTimer(); + }); + + return { + yesRef, + noRef, + startAnimation, + onClickIcon, + sendEmotionalCount, + }; +}; diff --git a/src/components/page-watch-common/chat/chat-error-tips/pc-chat-error-tips.vue b/src/components/page-watch-common/chat/chat-error-tips/pc-chat-error-tips.vue new file mode 100644 index 0000000..e78a5a3 --- /dev/null +++ b/src/components/page-watch-common/chat/chat-error-tips/pc-chat-error-tips.vue @@ -0,0 +1,61 @@ + + + + + + diff --git a/src/components/page-watch-common/chat/chat-error-tips/use-chat-error-tips.ts b/src/components/page-watch-common/chat/chat-error-tips/use-chat-error-tips.ts new file mode 100644 index 0000000..c13de38 --- /dev/null +++ b/src/components/page-watch-common/chat/chat-error-tips/use-chat-error-tips.ts @@ -0,0 +1,24 @@ +import { PropUtils } from '@/assets/utils/vue-utils/props-utils'; +import { ref } from 'vue'; + +export const chatErrorTipsProps = () => ({ + /** 提示内容 */ + content: PropUtils.string.def(''), + /** 是否显示关闭按钮 */ + closable: PropUtils.bool.def(true), +}); + +export const useChatErrorTips = () => { + /** 提示显示状态 */ + const showTips = ref(true); + + /** 处理点击关闭 */ + function onClickClose() { + showTips.value = false; + } + + return { + showTips, + onClickClose, + }; +}; diff --git a/src/components/page-watch-common/chat/chat-full-message/mobile-chat-full-message.vue b/src/components/page-watch-common/chat/chat-full-message/mobile-chat-full-message.vue new file mode 100644 index 0000000..d24b705 --- /dev/null +++ b/src/components/page-watch-common/chat/chat-full-message/mobile-chat-full-message.vue @@ -0,0 +1,116 @@ + + + + + + diff --git a/src/components/page-watch-common/chat/chat-full-message/pc-chat-full-message.vue b/src/components/page-watch-common/chat/chat-full-message/pc-chat-full-message.vue new file mode 100644 index 0000000..49864ed --- /dev/null +++ b/src/components/page-watch-common/chat/chat-full-message/pc-chat-full-message.vue @@ -0,0 +1,99 @@ + + + + + + diff --git a/src/components/page-watch-common/chat/chat-full-message/portrait-chat-full-message.vue b/src/components/page-watch-common/chat/chat-full-message/portrait-chat-full-message.vue new file mode 100644 index 0000000..91d5786 --- /dev/null +++ b/src/components/page-watch-common/chat/chat-full-message/portrait-chat-full-message.vue @@ -0,0 +1,87 @@ + + + + + + diff --git a/src/components/page-watch-common/chat/chat-full-message/type.ts b/src/components/page-watch-common/chat/chat-full-message/type.ts new file mode 100644 index 0000000..a20c4c4 --- /dev/null +++ b/src/components/page-watch-common/chat/chat-full-message/type.ts @@ -0,0 +1,11 @@ +import { ChatMsgSpeakType } from '@polyv/live-watch-sdk'; + +/** + * 完整消息数据类型 + */ +export interface FullMsgData { + /** 完整的内容 */ + fullContent: string; + /** 消息对象 */ + chatMsg: ChatMsgSpeakType; +} diff --git a/src/components/page-watch-common/chat/chat-full-message/use-chat-full-message.ts b/src/components/page-watch-common/chat/chat-full-message/use-chat-full-message.ts new file mode 100644 index 0000000..b5471de --- /dev/null +++ b/src/components/page-watch-common/chat/chat-full-message/use-chat-full-message.ts @@ -0,0 +1,52 @@ +import { appEvents, useEventBusListener } from '@/app/app-events'; +import { translate } from '@/assets/lang'; +import { copyText } from '@/assets/utils/copy'; +import { useSimpleVisible } from '@/hooks/behaviors/use-simple-visible'; +import { toast } from '@/hooks/components/use-toast'; +import { parseEmotions } from '@polyv/emotion-sdk'; +import { ChatMsgSpeakType } from '@polyv/live-watch-sdk'; +import { ref } from 'vue'; +import { useChatMsgUser } from '../chat-msg-list/msg-items/_hooks/chat-msg-user-hook'; +import { FullMsgData } from './type'; +import { nl2br } from '@utils-ts/string'; + +export const useChatFullMessage = () => { + const { visible, setVisible } = useSimpleVisible(); + + const fullContent = ref(''); + + const chatMsg = ref(); + + const { msgUserAvatar, msgUserActor, msgUserNick, msgUserType } = useChatMsgUser({ + chatMsg, + }); + + useEventBusListener(appEvents.chat.ShowFullMessage, (data: FullMsgData) => { + // 将换行符转成
+ const content = nl2br(data.fullContent); + // 表情标签转换 + fullContent.value = parseEmotions(content); + + chatMsg.value = data.chatMsg; + setVisible(true); + }); + + /** + * 复制内容 + */ + async function copyContent() { + await copyText(fullContent.value); + toast.success(translate('copy.success')); + } + + return { + visible, + fullContent, + chatMsg, + msgUserAvatar, + msgUserNick, + msgUserType, + msgUserActor, + copyContent, + }; +}; diff --git a/src/components/page-watch-common/chat/chat-input-controller/hooks/use-chat-input-controller.ts b/src/components/page-watch-common/chat/chat-input-controller/hooks/use-chat-input-controller.ts new file mode 100644 index 0000000..85480fa --- /dev/null +++ b/src/components/page-watch-common/chat/chat-input-controller/hooks/use-chat-input-controller.ts @@ -0,0 +1,111 @@ +import { ref } from 'vue'; +import { getWatchCore } from '@/core/watch-sdk'; +import { wait } from '@/assets/utils/utils'; + +import { useEventBusListener, appEvents, eventBus } from '@/app/app-events'; +import { useChatStore } from '@/store/use-chat-store'; +import { useSendMsg } from '@/components/page-watch-common/chat/chat-msg-list/hooks/send-msg-hook'; + +import { MsgInputWrapInstance } from '@/components/page-watch-common/msg-input-wrap/use-msg-input-wrap'; +import { PlvInputContent } from '@/plugins/polyv-ui/types'; +import { toast } from '@/hooks/components/use-toast'; +import { translate } from '@/assets/lang'; + +/** + * @hook 聊天输入控制器 + */ +export const useChatInputController = () => { + const chatStore = useChatStore(); + const { + // eslint-disable-next-line prettier/prettier + sendSpeakMsg: sendChatSpeakMsg, + sendImageMsg: sendChatImageMsg, + } = useSendMsg(); + + /** 消息输入框 */ + const msgInputWrapRef = ref(); + + /** 聚焦输入框 */ + function focusMsgInput() { + if (!msgInputWrapRef.value) return; + + msgInputWrapRef.value.focusInput(); + } + + /** 监听输入框消息发送 */ + async function onSubmitMessage({ contentList }: { contentList: PlvInputContent[] }) { + if (!msgInputWrapRef.value) return; + + msgInputWrapRef.value.clearInput(); + msgInputWrapRef.value.resetStatus(); + + await submitMessageQueue(contentList); + } + + /** 提交消息队列 */ + async function submitMessageQueue(contentList: PlvInputContent[]) { + for await (const message of contentList) { + if (message.type === 'text') { + submitTextInput(message.content); + } else if (message.type === 'img') { + await submitImageInput(message.file); + } + await wait(200); + } + } + + /** 提交图片文件 */ + async function submitImageInput(file: File | null) { + try { + const watchCore = getWatchCore(); + + const { imageId, imageUrl } = await watchCore.utils.directUploadImage(file); + sendChatImageMsg({ + imageId, + imageUrl, + }); + } catch (error) { + toast.error(translate('watchCore.error.uploadImage')); + } + } + + /** 提交纯文本 */ + function submitTextInput(content: string) { + sendChatSpeakMsg({ + content, + quoteMsg: chatStore.currentQuoteMsg, + }); + + // 回调事件到报名抽奖,判断是否满足评论抽奖的条件 + eventBus.$emit(appEvents.interaction.CheckCommentLotteryComment, content); + + chatStore.$patch({ + currentQuoteMsg: undefined, + }); + } + + /** 点击发送图片 */ + async function onClickSendImage() { + try { + const watchCore = getWatchCore(); + + const { imageId, imageUrl } = await watchCore.utils.uploadImage(); + sendChatImageMsg({ + imageId, + imageUrl, + }); + } catch (error) { + toast.error(translate('watchCore.error.uploadImage')); + } + } + + useEventBusListener(appEvents.chat.ToSendImage, onClickSendImage); + + return { + msgInputWrapRef, + focusMsgInput, + + onSubmitMessage, + onClickSendImage, + }; +}; diff --git a/src/components/page-watch-common/chat/chat-input-controller/imgs/icon-gift.png b/src/components/page-watch-common/chat/chat-input-controller/imgs/icon-gift.png new file mode 100644 index 0000000000000000000000000000000000000000..522c8fd86f6b2aa82480a7cadf1afb7c44e00624 GIT binary patch literal 891 zcmV->1BCpEP)Px#1am@3R0s$N2z&@+hyVZsB}qg(H{6D-T~mq^kx z2&1XUN0hlBy}Xa)*hYbCDE;;ZXQh`rO$*eQYzE$fr0k>(o_Pu6BN2?vIElfY#32Y6-Kb0O1H7rm|><1B>(nfEC>WMuYcr(+_x}S0M?XA$3vMmUF>WGUka6^YXpUd$3 z8Pn{{pdRZU0=)#RjbjG}SHX_uw(WZvMrNZafbSq9^5E62y6&{NqunP#Z#E?E-(fB2 z&5DK!G6E4jx2Td_Ff>>KwNmoki!LaOM1v(zKo?(2KC&hL&+y+1%+5j4D^T1-OZzFr zthkbNfN8I-3yz5;0xMT%eQVvG@KSwOnEQ1VDJKWG=itD=UJCN6PE-{qT0ca}##-U{ z57_?OCYlwvT{L2;uM@#)KRkRx1Tar9ZHAA=+g_qhJ>3rwFY zjy;j!0d6vf&GVh%9?VNnY>D#}1QO{Nn9M)lX1KxY`_)Y6kKYCb28kjL(bOXS>k)xK z5BjpC*29b3^2H7Lh+h&HLuycaV{1>Bn7AwkdJy-RY3vO9a$%8^w5JcvjhVzDw%OAe zH^|laYe=9q@m=B?(B~!6rpL^OWaSmnz&{9DyZzMo3{^JAw0YI?3Y78jZzxYIbkN0umAA|+`o(_&_))@M0+41)&WS!0I_&RV+?kd z$Ovu^WQT3Ci#<>r8B+wYXQ&VyAtM%JzwFeglhx`CY3@rj8$d2=E zG9x09A>4Mg!$&NFFs3^`i45(wiqUrXh}LbV1V;4jRV3DZMoReYlymKNcemWa%lR9K<2AtB8}0bx4i}S{4L7hLJ(& zXoadW*xZ0GbV!VXCtmR94~!1O#2CbcfR{5g*1%&jeCmSYd}wKa#RVuUg3dPR?}fZ{ zn3;wT&G2;`D3746X*+?puc0sp0z4o&4oYZ{k_cVxked$aR0#Ej$*(Zj2Q7_IUk&Lm zV0sc>CO}ahga^Rd8pMXd)HnFp4#R^G`2>EJ%bnEejn{_t%AhWeqV0xC+N zz6w&4;P)~F`#?$pG}XiFT&OICraD;t1HNwH>IA*rkQ4*orywT{8fqXv0}8SrDhQ&3 zATAtMe#7@^$WDdlF_4iApL?LW0jROCv;+a35FY`{%kb_kye)#UQF!$nmY2ZoK7{y! z8v)kWU|}B0-@w3U@O%Uw4`J>HxZekgGx)f`>M9f$z^_Gkg6zK+Ec}G^b?_oWL?Co^ zz{(1&t%AQh__{(*CwPAeG_)-a#zEWekkuShP@i?UA~ei&C@uQI3f`-mvB?984mv_Bt{`L1JYI-3)k zEL_R!DD4`&DhkD}d`Vs93Tfa&;vR`U6snoKd)STcG?M_kv|4O7Dk!bt0 zTh&XDQvf?Rm&b95T`&>nBlS_+!O?}N^iRUjaC<`Kpd;N=NvUMLyg!b7{6wfQRyE3k zW8{40u&J}iFzs`zvc-@7zRHqNq9`^k_RjIBDnse#cAFD8*}_8$=CSRZ(LOlZ)~4I8 z1A=FwNOX@angJ^FriHj9i**EFenW;Cmw>X_=FzSLlpq7%P-o%JrmahFjxuQ*_=n4( zMW`MZO`m2QG#MV5#t|@q3c1!1^&-;X2R*pOB&~;&$cjd>v$BPuS%ahfH0Yt;niRG}ml{&U z?{#o7`*J(KTPwt3eK^q4{u0JdQzM^6G2y~BwZtmb&$1c#XmbnXIk5yiiVWo1k9LvB?!`@JTkRj(4cLTnn2Xv7Sj}>Y_Y)tvBwUyE?!79F1&FJ*`KV8nsxi zk@MD465>}rp2rimi#;RC^_kqSoJx@!mlNuYGRen@UC@p zk?&=n2pxU3#EO0%FMEY8sfsT{+;@5{8l@+gNw zlVS@4D`HvtgskrvD~-J+hG#o}o8vo6WoZ;;DY}De;T6-Ojhh6{^!WaJ z1u154BH11<+R1Z=@pcD@O^peogIxl$iJ6_Gx7Zg<8It1{M-oE0YMGeM?K z5{j=l?s7#Nas71jR!+vY9s1l-gOiPY?h|jF9d;?EJR$o}wo!kFWm-?5u#PdoclTv| zj;jQj{3VottwQ(X*+|*lqaR1(oV1e`Ur=!S<1B8yIC^26L`fQDUC6n0;IFB@1`<)` zp)>M-g4Jv%vAc+Xg97!85&M9(g7o_I@Z{QE5eW z*f*CNniBhx@@n{s{wDwak0MsBHZ07m{+307uWJ79*-T+;qm$%M@n`D@pG=wz#pPqg zuY9wSF}6=%FsKt5|8zEw_}a*D{&^L)R4qeS%ct|_@@NVwJQpt zBit_u0wrJ2MdH|lw-(n*G&RC&qt6H4sgEA|y6j$BIWp)jajhTj}8?S;d<4H z1>868n$YT!T(XUFl@GsMq2hFspJMxL+GS}n<@kb)t0wtkF=BN%rF3Smo0L|=qn~fg zogY;kjB9C@u87#Qp<^1YEuJ4RkF-$~4pz0&XjLF4MD0(`sL@Uw_w?L$i!}uvqA|xqp37T?qb=l{>G#XuRgZ{jZkB)$Lag zMC@;D(5=Pc9}p78nr@jG59q6&sBL_8dbC*OAMG1~r;H<>dvz$T`j9%9sD04+ z)MSgpdf~d8v?Do+Hikr=M-`R5Z_PQa5;XTIR21Zt#q> z%-a@j@Hn>4lgc;vQBKnQW}V>~h6kID1^R4s;hV60fqxmkX~M<@t6-w9mWj(r8YrDP zq#j|_A|-tIQ-sxk{DYgPj86sj=NNpZd1uZHXhoK_M-1hAZBBS_r|QhTzwFu9l-oRh jdee%l#P4Od_!h7Az+p8!)?Nzve?eWkpsSvzYU%wyscU>u literal 0 HcmV?d00001 diff --git a/src/components/page-watch-common/chat/chat-input-controller/imgs/icon-menu-animation-show-mob.png b/src/components/page-watch-common/chat/chat-input-controller/imgs/icon-menu-animation-show-mob.png new file mode 100644 index 0000000000000000000000000000000000000000..3fc74f1a64d78a40c4104c6cfb103f881e70820a GIT binary patch literal 2770 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 L{an^LB{Ts5a(3tb literal 0 HcmV?d00001 diff --git a/src/components/page-watch-common/chat/chat-input-controller/imgs/icon-menu-feed-back.png b/src/components/page-watch-common/chat/chat-input-controller/imgs/icon-menu-feed-back.png new file mode 100644 index 0000000000000000000000000000000000000000..89ceb0bbadeae63bfb1a1c1d739ea28260811d95 GIT binary patch literal 3486 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 literal 0 HcmV?d00001 diff --git a/src/components/page-watch-common/chat/chat-input-controller/imgs/icon-menu-img-mob.png b/src/components/page-watch-common/chat/chat-input-controller/imgs/icon-menu-img-mob.png new file mode 100644 index 0000000000000000000000000000000000000000..ee67c4ffb6a8c74679e783a505f2cdc5c2e72651 GIT binary patch literal 1401 zcmXw23p5mH6#mCNJQ`*Q$x2ErN@Ujd*u{)Tj90{2qP4bEgvJS}#qOjeZOu4TR8t|l zCyI?$hh~QHDzAB%A+In7LkwojFdk#<(Aodo|K9I@=R4m$=bm%31N=R;wT!g@0NQvj z_mip`srqL$psHLzvV^D#>;ldY2S6oxo8nhE0Fdke-(U|wV*%>dU~b~gVE<1tK|KpJ z_W>FQv@eT5Sug;H5LJ^x9zbYC!?)IS!&9d>N%Rj08~^=z{yUb|Sfwyvz7U3fY^ zGq@->WOPBPOf5Q#Ctae=N{+Pk26qkVGdTRE<@wdM+|e(KigodtqDQ))%;CwIm9?LFBOMZ15Nsr*f&|DfrCl;0Y2(R0>ss zik5Q~06@>+-EqOu!_3FYsnhoQAAUeI#n&KraUagish)F+TdMO)%g0bJZf?T-+KA?4 z+k8=cuDPxj#e!3N%62;mAzL4fkV+Ll1k}-khj982c85N}y77jI6SF z6Q&5X&Yd7E=e`j#7Up#wU&xKZazRcS4_hAdyu^^tylyi=D+AA7B5f=@on*vLqv!x< zH%+hexEED;W1`urb>@eHIk}sZ#@hs||Zg;TJ%Xv=(g303IcIkb{vR)XiUTQH^o{XkFI3 z0F6vRg9-2IFzZ;gBcf!YwwO2@*7Q0)7D6o7X%#>w!a6D*RD-HytPbjB62c}7yw8Yy zAR%77P*?^x3x{tL!-yUQ;2BxN5(X8gwMC-c`74hytTgt4%SGiw1I5rOI7XMq$x2OF zG&f)zFscSRJ-bNkE^ya10?J=`a_eJ^F*d@!R6ULo{hLX6At2GF7&vt@ya?p>oCC(x{d92s;AL=*F<&9VvWuCO2R%SAln2P%>@*1pm zkY7p>3(2wRmk5XPgN|Pqff0fmvY--ZR#KE{gk=dtUDNYCE(;z3cVn1o-AM zcAeI1-Fwe=lpBi3t~uFkA-LhK8QyJuzO;s9Yms1gOKdlpVCN;VD>eA>8p{JWch2ua zX1}Q3$~MuCB(ZKO1RZKcSt%x~&J^H1{M{>DBQyR3zo@*+ literal 0 HcmV?d00001 diff --git a/src/components/page-watch-common/chat/chat-input-controller/imgs/icon-menu-lang-mob.png b/src/components/page-watch-common/chat/chat-input-controller/imgs/icon-menu-lang-mob.png new file mode 100644 index 0000000000000000000000000000000000000000..0d3bbdd3f54cfe65de4cd16bdaf6186ff145d387 GIT binary patch literal 1531 zcmXYw3p`X=9LGoU*h+doj3SS++sD$bN+vUgnKIeYU{qpLZKY3J#-KFKn7oFvN`?AZ zZxZQ2B&;H@S|NpAL&F%4L@{&kHLp8!_e|~Q^FQZ*?*H*UzjMy#USxRhG?`~M4~N5< z&^#%=z#jnPps_xfi+G!3ftwpbrjv2F2dVSXLk2jU9>VyINp%Z{U0D!`1rft!z+71} zB1`6V7Nc<>xA0kF7(~>iAXl&e#)gUEv$Sg%_;icGNMZ1|6ll>ExP~F52p#QP3ea>x zdJG1DAV^^=$l>t!N*xmf*^oaQpkx4xVHk-m18ZQk7>s%b0X6=*UI_H+m=XWW^Do0d zBax-s`a1`pfD&+o7@Z`9%u;}Tb=tnE0y8*!X``y3PMLgL(cO;@ebRi9Y5mT_8ZFlJ zTD>nG9{-{ZNk#Sx;3FvrGX@U1j07bj7fR$$U#W{9D?2}+!xP%N4t3RYRnjeaOo6bQOc6E;kMKzckTNYm=kIt3*@FA@h%c)Uj zRw?Q_RIR;gRHN-3)O`A?Id&O-DO5Lft9G1`?c&IU5_EJ@10LeU6-1%J)TmaCVk#6X zd#a*yVey25D4 z_9{^vZ;kI^98P~9jY4J~7gY=8dxeZ;Ml;NNwMNOqBJQ-kC4LIHCvws0zWpn!{VTdO z1TU-7jHH2`;fWQNV7<{J zYb@?cZO_Bi0lPR}{LqC7bnnmxs$Q_TG}ibwn@MT!Hyen#P~Wt|U@-8M(UGY)PqKMW zitx@oUrNWt_tp=kv?q^wsV$S?jN!9cOAC{G6UBrVmM_vzQ^vB$|9(UMB4+oHOK@$@gXp&Le54eUJnn zpenrZ(yD{CK$bI_a*ue`nrO%ntscs}ap^{qyfUEx7u+ng3m4d?-<5IBn2B;XKp)&% zJRWtHFr+^&$-^gT}2Ne!pzR$LCUKw9B)=FFM$lfHOQC+U)0&Z5`YxKfzfWECQMA5#W1s1GkoU z4K&S2;9#V6Yv(#I&WvJ9JB)1jzGgy$8GH-=D*Camu1+I+5PUt6UvSo1)n|C$ zoY)|cH;+hi+|92wx{^qZ+?2FbkHKXlQ}}U-pHI!hiR#y`1l;9a9t6E(jx|o5CIP$( z%T#*KGWkn$g6$=97v9K%vBYfSNK+3?Lh)$-v(#d=&%vs-+^5wcwza&X&tYgvM&?MD z+F87BOC9d9--lLsZEX{j1j&=^w`W}MniOoPI=Qf`DqpT&&6T{Rp7#_*2ffKFf=#HT z%A-=%otus4y8A1iZVAd&AuIEg_@Dnh^SWf~dwo-Pr>^@uEkvT!TOX(&%dA74d~0YI zvmW=^pZIJ@Kwum)VuUfzt!mb2%&OW5z7Rws$j^a>ZN0&x@l`y(#zI561lm_9{m^ literal 0 HcmV?d00001 diff --git a/src/components/page-watch-common/chat/chat-input-controller/imgs/icon-menu-msg.png b/src/components/page-watch-common/chat/chat-input-controller/imgs/icon-menu-msg.png new file mode 100644 index 0000000000000000000000000000000000000000..921c2f24d5798317a5def7b14bcb9de424f926e9 GIT binary patch literal 2109 zcmXw32{_bi7aub;A1-QAy2&!F;zo%U75`y~ZpIjCp&@NVyIfskG-H=0#n{D+r3EQU zj3pt_LUxJlt~EY265jVe_dh+~_de%6=REKEo!@!ibDrmopwsp%DXdn&;c!Ye)>H;& z?@0H52$*h6Al<}_tUJY)g2UxUDFQb+91gEXKX}Lz`kP9mfn84ei#5_Fq4E@NJA`BNwy;flVYN6u#hy- z50QlZ`72RcRN`+1vC_W^Nm%9*wyA`JNH`oRxkQ46Fg7VC2Ef>)4#xHigXKnA{o?%J zm9PiGhGO_OA06%lK?l)qlj!sq+Exuh>1b~gI@k^pJVAyZEKUG-TwrMm+F1uH(oqOO z(4Xk{DR9FQ?R*Q8FQW55K*rzb+;4ya*uh0h#`= z^d79d4-5IQsT?GFp`U8e;m_!JAIuF!`&&TDWwftFI*Yp}(1CWC69Vg=fXKtJEEN?` zgJ4_uDiglWM!V}#u!xTLqhA_8`gOFY5xy$`LSKN5spPxAnh9Pr@;5mLHghDqX?ZCK(Y067M7<$Q6k{%N5^`x zSzw(fU7rlYx=g*spgDMNI2e@uG`B|dCch(aoZX?Sldb_^89#Apz zJ>&yxy5ZiQBc18y+ykzTyjthxmffxGJ6by(24-6i&Fd08_pUg3T*pKIs@+U((p9y@ zATohl;;9FAA7wlQD+-xbxRBhQi~0{QJ~7TTXe?gW{EBQ$T{BoBqqM6!Mex)cQ4{1_ z^OvvS-8!dyx_58Aqle!!rh}k;W1f@k<0P3`r~9HMNiW2nc%#m}mB!7~@0orAd$kTa zY9EVy4YJRBlpgfelVcSs`e(JKkRaz=tn4XI;^NzUj;pmf5_OOrY8|%v>dLJi119fU z!|`olqCAC;QwUq*xVw*-jJyoUD_vj@ATM=xBKB!IbXT*TRLDMw%xZLN`?N;lj6+3k z3OoNH79(S2C^BItY7=*jQCP*?)7+#k_U)k&Yy90fv1rdx z+SlT=vfLwFbEV+X^6lpdUs$OpI+r>T3P^#|E+^G>e`r>=mMj_C09>~J5k*UV!z`B& ze0&Cl&c|F}WJPpIDG4bI9*LCqFq?8t#$~_iHDggZ$^%d8ZptoA?b149ZW8Fen1cv6 z8%>IHS1ny!?USld!wvjz?~F)WrN2w-79p`;btY4%vD>n>YYkC%f6(o1ZtO_E_*!na zN2B}|!S;tmtVj~4L##D`g!MUU&~^Kn{aypedpqG&>`fJ=-5+uAR>>k?*XXo5UW^}i z$!ZmlUDqNN8B@jwwyplQ882Qw?vl$-Cr4=`rS@}-tlyMGp*W`Hm-l>45yy{D6LCyp z$s$fDe}{=e@vBhq(9!q*`^)AoP+RBce zD_*7eK#TQzW_+KRVB1J@L*fyZ9L;Uc4Ov7MyZYDP&?F=gzh1H^qC^?e4Klj4FJ}~U z@EReLwxfp^wD@6L4A!ES^nACDDB@W+?H#Psl(O|+R`0g;meqvcWQXui1uGs_*;=5v zU*T}ohVoS!qkk}(m+SkPS`$rvTd~jbeN}wiqrJo^${Dx*s(EiM|9tZ%uEWv(l&jAL zQDwTyuGj85*3a;j4`|vw+8xu*SXQ_{?T^`o{yj94~7}ic0}x*NV2c{YBJ$aH|!f>rTKVu zk|~YocWeAqNAB=MM62YZ%Axp;O34E&WA@4E_1f<%FsgavpVzZ8(ANw#@`*vlV zvoN1g((W*yqzU@tR?p*@Y+7Owv>mDQ`VDi zd)~d2zzZG>AkD6eD&bmdULdZu*=2a3O6Wwotr2s1YZtG{Cz)#1al!EHwJ-Jk0mGuO u#aQ({-3DyncI8|rZzk+aR!w%T7D_CAOwS6YH<7T99A{%mqvn~P2>cfoEoQm^ literal 0 HcmV?d00001 diff --git a/src/components/page-watch-common/chat/chat-input-controller/imgs/icon-menu-only-sp-mob.png b/src/components/page-watch-common/chat/chat-input-controller/imgs/icon-menu-only-sp-mob.png new file mode 100644 index 0000000000000000000000000000000000000000..ee1b699ffb9e487418fd04dcb0e194bf463707de GIT binary patch literal 2115 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 literal 0 HcmV?d00001 diff --git a/src/components/page-watch-common/chat/chat-input-controller/imgs/icon-reward.png b/src/components/page-watch-common/chat/chat-input-controller/imgs/icon-reward.png new file mode 100644 index 0000000000000000000000000000000000000000..4b56dadb2ee1aea4dca680ad9b04e90c3025c316 GIT binary patch literal 1778 zcmWlZ2{aq%7RRG>qEr`EL}^uDTcsUU^jYc%VuTXAihT)D5t3LEOG@m@#8OjBlUS-x z2OVLi?^QL?R~=PMD6e?6n^vsVsiNA(o%o&q{l0VWx#!&fcfNCOzAMgNNkKyafj}rZ zU@`8}8@n6wveGlu$Tk6ikg0Wb^0bqt5YGZv4~R{GxO9k*hx}4tvB2IDLL$J+2V#@K z*B=~RAd(8+eh^Lu|4?vr0(>CQGr-*w5?O%v17;q?GJwI_m47gh<90>U;1GfIuQdGj?CctAUz&XyQXd6V&|+?(ksvHT?Vlm^nZsfkXoR1Ms2` z+J#V90@-ZH%mYR`kSQ=PhG*UIupL?+LfIXNih;plNXdlwWDqYvaXI19;SlL3*~Yu$ zJP5;!tH$~Hi-Ij4gQH-GmBTn+ z+1ncOT)Fj_-%^9Jl6xxdt&_5pdjaNC@F^-QoGF`wPnOA&Wu2X{D$S!!GWx!mq zqP>raqiHKUq-E?^VrI!@CaA4(^_~CXJ+9JJN1WABpOup>CN(@^qXryCpUcsQCQv#! zZIwpSmT71&OD5O$Ig4_}*iuXJw{kT)F93HY&dK}_Ey7b7UDX1V64$Px?aud2Aq0 zF)_hoe9W2{eLnn6N1Og{E#x%Kwsz8cedbJVWalH<{e*wJF?lh{XDvS%iS8OGy%L-8 zYqpa{l!9rZg$43E0p;DaqOR_da{RVFcX4dQrL(^-D?+Af71QwT(qzl3>C2tQ`$YP* zOIsi6eIeU;?pUgO(v8b=#yed_wTm;g)jtHeIKAVRlsGOj{ExidrvC2L(|NdJ%2g{M zNM-p{O>)usyc=ml_D1v3F>`AMIw`fOmR((4?WIq?|0pr5T1+gf)LKL@2{g^^M#TJa z>TQHF&N#Ws_S#=xe-+GY`hK{!6(B|4yDTG)` zxzOxI4b`jnz#3UEpx^l9(uCvas(s4rtf;Z8OY-t43wcz}3~9dUE<0pzt?Qx24~Cm; zkyW=2b>-x2Uh;Q->S0^_<9mk+tW&46jePbFwg>0+ClvII+4c?1x~gUR|G8d7QND*> z@K>|H%&k@{Id{N;=&$+zDRYWx8CD)k-}7=qrr}v1V#Yn|vR7+{5w{}`* z#e|84x2r1m<~KV&w|^Zes@ZS8?qyndc}Aekue+!^_(h)hXc+U$E$(+y25ra%A8XVc zCryNnaX?<${2G~0WD&&{1aVXU$B!SqZ+|jLvlrMHr)P$lp75cv-8BRI@Cw$iybW + + + + + diff --git a/src/components/page-watch-common/chat/chat-input-controller/mobile-chat-input-controller/mobile-more-item.vue b/src/components/page-watch-common/chat/chat-input-controller/mobile-chat-input-controller/mobile-more-item.vue new file mode 100644 index 0000000..21ddaf5 --- /dev/null +++ b/src/components/page-watch-common/chat/chat-input-controller/mobile-chat-input-controller/mobile-more-item.vue @@ -0,0 +1,116 @@ + + + + + + diff --git a/src/components/page-watch-common/chat/chat-input-controller/mobile-chat-input-controller/mobile-more-panel.vue b/src/components/page-watch-common/chat/chat-input-controller/mobile-chat-input-controller/mobile-more-panel.vue new file mode 100644 index 0000000..b67aff8 --- /dev/null +++ b/src/components/page-watch-common/chat/chat-input-controller/mobile-chat-input-controller/mobile-more-panel.vue @@ -0,0 +1,216 @@ + + + + + + diff --git a/src/components/page-watch-common/chat/chat-input-controller/pc-chat-input-controller/input-more-panel.vue b/src/components/page-watch-common/chat/chat-input-controller/pc-chat-input-controller/input-more-panel.vue new file mode 100644 index 0000000..0b9678f --- /dev/null +++ b/src/components/page-watch-common/chat/chat-input-controller/pc-chat-input-controller/input-more-panel.vue @@ -0,0 +1,119 @@ + + + + + + diff --git a/src/components/page-watch-common/chat/chat-input-controller/pc-chat-input-controller/pc-chat-input-controller.vue b/src/components/page-watch-common/chat/chat-input-controller/pc-chat-input-controller/pc-chat-input-controller.vue new file mode 100644 index 0000000..1299d6c --- /dev/null +++ b/src/components/page-watch-common/chat/chat-input-controller/pc-chat-input-controller/pc-chat-input-controller.vue @@ -0,0 +1,223 @@ + + + + + + diff --git a/src/components/page-watch-common/chat/chat-input-controller/portrait-chat-input-controller/portrait-chat-input-controller.vue b/src/components/page-watch-common/chat/chat-input-controller/portrait-chat-input-controller/portrait-chat-input-controller.vue new file mode 100644 index 0000000..edda9f6 --- /dev/null +++ b/src/components/page-watch-common/chat/chat-input-controller/portrait-chat-input-controller/portrait-chat-input-controller.vue @@ -0,0 +1,74 @@ + + + + + + diff --git a/src/components/page-watch-common/chat/chat-like/_hooks/use-chat-like.ts b/src/components/page-watch-common/chat/chat-like/_hooks/use-chat-like.ts new file mode 100644 index 0000000..64158ad --- /dev/null +++ b/src/components/page-watch-common/chat/chat-like/_hooks/use-chat-like.ts @@ -0,0 +1,109 @@ +/** + * @file 聊天室点赞 hook + */ + +import { PropUtils } from '@/assets/utils/vue-utils/props-utils'; +import { useLikeAnimation } from './use-like-animation'; +import { getWatchCore } from '@/core/watch-sdk'; +import { useChatStore } from '@/store/use-chat-store'; +import { onBeforeMount, onBeforeUnmount, onMounted } from 'vue'; +import { ChatEvents, LikeMsgType } from '@polyv/live-watch-sdk'; + +/** + * 点赞气泡图标列表 + */ +export const likeIcons = [ + require('../imgs/icon-like-crown.png'), + require('../imgs/icon-like-diamond.png'), + require('../imgs/icon-like-donuts.png'), + require('../imgs/icon-like-gift.png'), + require('../imgs/icon-like-heart.png'), + require('../imgs/icon-like-rocket.png'), + require('../imgs/icon-like-star.png'), + require('../imgs/icon-like-thumb.png'), + require('../imgs/icon-like-trophy.png'), + require('../imgs/icon-like-watermelon.png'), +]; + +export const chatLikeProps = () => ({ + /** 点赞按钮上方是否有其他按钮 */ + upperHasIcon: PropUtils.bool.def(false), +}); + +export const useChatLike = () => { + const chatStore = useChatStore(); + + /** 上一刻的点击时间 */ + let lastClickTime = Date.now(); + /** 待发送的点赞数 */ + let waitSendLikes = 0; + + /** 处理点击事件 */ + function onClickLike() { + const now = Date.now(); + + if (now - lastClickTime > 200) { + waitSendLikes += 1; + chatStore.realtimeLikes += 1; + lastClickTime = now; + } + } + + /** 将待发送的点赞数发送到服务端 */ + async function sendLikes() { + if (!waitSendLikes) { + return; + } + + const watchCore = getWatchCore(); + try { + watchCore.chat.sendLike(waitSendLikes); + } finally { + waitSendLikes = 0; + } + } + + /** 发送点赞数计时器 */ + let sendLikeTimer: number | undefined; + onMounted(() => { + sendLikeTimer = window.setInterval(() => { + sendLikes(); + }, 5000); + }); + onBeforeUnmount(() => { + window.clearInterval(sendLikeTimer); + sendLikeTimer = undefined; + }); + + const { likeRef, joinLikeAnimationCount } = useLikeAnimation(); + + /** 处理点赞事件 */ + function onChatLikeEvent(evt: { likeMsg: LikeMsgType }) { + const likeMsg = evt.likeMsg; + if (likeMsg.isSelf) { + return; + } + const count = likeMsg.count; + chatStore.$patch({ + realtimeLikes: chatStore.realtimeLikes + count, + }); + + joinLikeAnimationCount(count); + } + + onMounted(() => { + const watchCore = getWatchCore(); + watchCore.chat.eventEmitter.on(ChatEvents.ChatLike, onChatLikeEvent); + }); + + onBeforeMount(() => { + const watchCore = getWatchCore(); + watchCore.chat.eventEmitter.off(ChatEvents.ChatLike, onChatLikeEvent); + }); + + return { + likeRef, + likeIcons, + onClickLike, + }; +}; diff --git a/src/components/page-watch-common/chat/chat-like/_hooks/use-like-animation.ts b/src/components/page-watch-common/chat/chat-like/_hooks/use-like-animation.ts new file mode 100644 index 0000000..f3ac1e9 --- /dev/null +++ b/src/components/page-watch-common/chat/chat-like/_hooks/use-like-animation.ts @@ -0,0 +1,84 @@ +import { LikeAnimationOptions, PlvLikeInstance } from '@/plugins/polyv-ui/types'; +import { useInteractReceiveStore } from '@/store/use-interact-receive-store'; +import { usePageStore } from '@/store/use-page-store'; +import { onBeforeUnmount, ref, unref } from 'vue'; + +/** + * 点赞动画 hook + */ +export const useLikeAnimation = () => { + const pageStore = usePageStore(); + const interactReceiveStore = useInteractReceiveStore(); + + /** 点赞组件实例 */ + const likeRef = ref(); + + /** 点赞动画队列 */ + const likeAnimationQueue: LikeAnimationOptions[] = []; + + /** + * 插入点赞动画 + * @param count 数量 + */ + function joinLikeAnimationCount(count = 1) { + for (let i = 0; i < count; i++) { + if (likeAnimationQueue.length <= 500) { + likeAnimationQueue.push({}); + checkLikeAnimationTimer(); + } else { + break; + } + } + } + + /** 点赞动画定时器 */ + let likeAnimationTimer: number | undefined; + + /** 设置点赞气泡动画 */ + function setLikeAnimationTimer() { + likeAnimationTimer = window.setInterval(() => { + // 页面正在显示、没进行红包雨 + if (pageStore.visibilityState && !interactReceiveStore.isGoOnRedpackRain) { + const popedLike = likeAnimationQueue.pop(); + const instance = unref(likeRef); + if (popedLike && instance && instance.pushAnimation) { + instance.pushAnimation(popedLike); + } + checkLikeAnimationTimer(); + } + }, 200); + } + + /** + * 清楚动画定时器 + */ + function clearLikeAnimationTimer() { + if (likeAnimationTimer) { + clearInterval(likeAnimationTimer); + likeAnimationTimer = undefined; + } + } + + /** 检查点赞动画 */ + function checkLikeAnimationTimer() { + // 动画队列为空,清空定时器 + if (likeAnimationQueue.length === 0) { + clearLikeAnimationTimer(); + return; + } + + // 动画队列不为空且没有定时器,则设置点赞气泡动画 + if (!likeAnimationTimer) { + setLikeAnimationTimer(); + } + } + + onBeforeUnmount(() => { + clearLikeAnimationTimer(); + }); + + return { + likeRef, + joinLikeAnimationCount, + }; +}; diff --git a/src/components/page-watch-common/chat/chat-like/imgs/icon-chat-like-portrait.png b/src/components/page-watch-common/chat/chat-like/imgs/icon-chat-like-portrait.png new file mode 100644 index 0000000000000000000000000000000000000000..326b11436f065dce92c993ead4a34eeace692ae7 GIT binary patch literal 4205 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 literal 0 HcmV?d00001 diff --git a/src/components/page-watch-common/chat/chat-like/imgs/icon-like-crown.png b/src/components/page-watch-common/chat/chat-like/imgs/icon-like-crown.png new file mode 100644 index 0000000000000000000000000000000000000000..b2a6ed8c7f642f085415537635b36d598c1271f5 GIT binary patch literal 2345 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 literal 0 HcmV?d00001 diff --git a/src/components/page-watch-common/chat/chat-like/imgs/icon-like-diamond.png b/src/components/page-watch-common/chat/chat-like/imgs/icon-like-diamond.png new file mode 100644 index 0000000000000000000000000000000000000000..1c6f18b67ef92ae439e6f46e431f5b11f2bb0898 GIT binary patch literal 2293 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 literal 0 HcmV?d00001 diff --git a/src/components/page-watch-common/chat/chat-like/imgs/icon-like-donuts.png b/src/components/page-watch-common/chat/chat-like/imgs/icon-like-donuts.png new file mode 100644 index 0000000000000000000000000000000000000000..352338549ac5f02fd0f152ea844c6f68a64ed892 GIT binary patch literal 2787 zcmW+%3pkVQ8-GWcQ|TZ{KBrG175+}6XgReJO`Dn=T1rh$>kCa(FR7-`8nPTdt9)5G zEyszpN=`}pzD|oTR+N$QhUTr|`LFM~e$V|pzx%rH`?~J?cVE|&NebApMAJYMf}kZt zg4b^4jsJDjRh71+DQyCRRAxy#Dc(v7gibONb-vXbbP<7w0J?U84qxz?09x@#21)8o zlH#`_OiLt&FrBgmAu(ixFd2pN*`J1xXfhHRFqlX<;cE~T35=Vf&}6=3>Q8wX%ZWKSgEvJh$z5*~mY^#JvjX!=HkN<(O5gh54^q^Sy$JP`-@ zmUCt1XqhsF1zkiRfU`gr3-DMVgZ0aE^}n~0ig2J22L$#&@IN4M_zy~o13hHW zz7q&7fyfpJ9YKp5=%E5}2xxNyUCK5|;IXo00_eagEkcMu@YD%MZ>f_T0&o0&a}z4q zfC_CcKnaB3=5H}a>Fpi_=^3jB| zNMzU)oq@tEl);=ND`!PVvUX1iLQxSN?P8)-<_{V?M}q+^1JIQf*dT!o7+HYH1~3;e zxd7&YRHZEjEFNILivuUzzr1< z(0i_EI|CI)Ah&!`AqDL|tPmdu5*SFB(>xqXibh2tb9sF5XYGQr^0i8k$6w$JKvo%G za{-qJ_}*5N-G+ zy3h^?1wh&hL{!l30J@aG12F+eNI;rVRy**HMDoak_*?$mWj9>Hpx0nbYni*UmsXevRBRKt-7b&H54rlZnQ zw4Hcre3n6#(9lMrwZhr{fUD=TH`y&Vn6f1?^q0l#rqcMV94&{>i3Yy*Ub9v? z!KJF&Y6P7=!D))~`gwdvj%x1%A=w+x%6xJ5j5pNr?kR}X%``2#>oM3?yhV?ftP`o1 z|H)ks!-ZBm_nPh3tz>2C?YhBS^EipZ3wfS*(PHvoa{T5FRWHWCzWFC14y0E0_By+< z;fpyce8siLQ5rv>Cq{u9e$TpXjwe6v?Q$soK7E6hWG+^)eM{mFT7Of)qzP=VbP7n< zZ(wfebV1&HV%Dl(QTv6{o#LT>5iJK+e)-ik8A2*1@G?&J>(R9F4)2L z_um)Gzkk7Es*L;ZT>sh=zWdl<+qKQLdG=nrE+f9Y|e zhFY7gi}EeYzm<9SErM4Hq~)~?LkKHAS&bhwd@tCBo92h~7Uo9wH>isx8L-Fp z>4)Ss7ZpxFPJ1Gk@owKbw{&78!xyar2pX_-bVYv!@ z_A)fGTrI(BU9(QrFmEAdGO=V|!;#31L{|OgyCu%A($BV4=&7h|AFRo#dmGTackZg^ z&x*Wt4>TT`yCVi>S}Sn+_U$J68EbV_i;_oOmwtX8-_)0fCtSL^xlE_YjsJjnp4F4Y5#(S2G=?ltUQl4y7sxT+wsk`5ojzemERQyYQv*ufi6_%P(IkBX z>_=52{A_|l%K^Vt%+PxiRyt8U?Cz3zh#Si`}^lar}l zxs5v7botYvnbl6?YWHWVOsI23r!+S?X{vJHmWn^b*DP3EIPqSwf}`(HHxgf_S#`!Dx4PnlTLs}$7b{#U{Vt~Hzw9-Nx}HVe6_h1vEuw({$}l(^{U zA$_ClY7Tz9LmZmY7wKn)QNipzz58zPx8?TJ(MO!=?V2aw&bo-#oh&t9lH}*{2PgXN zo|MjAcu`{MyCbh`ZG2VUAD`I!O0l;PoA1Wy*I%wN)@OVcZhl~Af2SNz6m;HS#ccE5 zkU1G>8yS+g|8`_O$uAnSh%v2jVW@S8CT>W5MCx{#CYtMG3rN`D_vR1VV;gi%X)z$h zQA~rTMrK^yyDbs7!#Ksc{f`|V3XcE3Yd^n_H-dyeR1XKG^{Aq@ z>J?D_eHT;5%dSyJ)#01}HpRsr<8_vJs^?$Q9b*?4v!mA}hRHJgqvILvqP+iqFl+kQE8Fy zk0_UJqCr&danA7|QFp^_-D)38R^tA&-!XMjcMCHd%o?s*RF~DSGIli6uyS0#w;zae z7M{!fjq3{!ZC0yblZ~+$_2NML@TOf`Ebdg%3|GM+?)qeNmNjGu9o?=NX$}0jW~-hk z`zJ&Dw%xMGjy06m{nn!g-_=Yq4B?E%!Zk0s`u4$_*5^w0HpP$TQFjKV4XZHjyC3ET z9#O#i#Nij;wB2-gaC4!EVFty`eO14*1~$!T-1XKeaBEr5Tn2>tO+1B`8=3h0dwsty wbHl6Gp?|hc6h=42KalrFb8Z*zTZmWK1ivsDk&q5klwUSP^bYW<_MoNzAE>##W&i*H literal 0 HcmV?d00001 diff --git a/src/components/page-watch-common/chat/chat-like/imgs/icon-like-gift.png b/src/components/page-watch-common/chat/chat-like/imgs/icon-like-gift.png new file mode 100644 index 0000000000000000000000000000000000000000..56be74a783e1905769c5a31a58003bd74c37af57 GIT binary patch literal 2225 zcmWlZdpuO>AIHzQPRcgQtv0u=Lu4e3C`U8Hxb87c%x3rvO8i>VR?HT^hAum*U+JP0 zg=wIN*TXYDrs7crjWBsIT-fH$cf?E0G9wP4Kx^ohsL0V3RCB3n=aj0v`l3gEFwSi^@kJN!oZz8ap-C|Om+V>r|u z3vnL`VPIU>VeSSj&>0J)V{H0omg6UQ9p=9d^IQ1|UNzuLVn5(*-_Nu~nRckx3Uspr z3fun)(@|f?0pE2PlaBd1W3a1+wF&2vZGuM;KMmqDG!Jtm)C&t`4umrMxlD}9913*D zIIbAmd6?ro!gU_yGDbt)HC#`!xhTRwxeU~w(c|ZevNx$=hT3O?n(6$WNmqHSedFq& zWYCo!bd*USfY%SOH=tZPCJMw7w&O_xe18;?CIBSjXdo7WOc9WXbo0a#65;%iWbV{u z3U%a=WJFDo(~^V`BJQ||iwjw}044-nLWJNXNnAoA!Vp+Vw}0+vXUSmCk`G|ZL0=V#bz4J`RQj_hlul*9Os=>S6^wp#`=10cvzv)($^84Jik(7qUIBDF{8T*cgy&V_o1q~C+=*{;v zEtLMOT(tF@Ayn8qyGzn1{89o(@4qKiG81nrK2P~lBzC>XVk75!=cu`@&okODn(jN& zl~FtybM!y@%}rnYB~|zLD%rHaSMNUj0P!Lm`R zwQH9gry4VxqU{WMrBe#n<*IKI$3=JucN>A;-9Au#C>}BT;NZ_r;uyP`Kpl^;Y|2YJ zg9Y1+l{<~mhDzIA7VX8gRta0Iqvoa&%TCH!;d8lU_g)uWi~QX8Un4^vbS}MLxZ!xo z=tTF8xXR{Lmm}>O-(QHoWRd=0?@6<-b15$vULMD8{t(2Gm2EC+cx`z%z;R2wxw@UVjT%xilDtTORbLXG{0l;?T@B$omwZhJ@YS_-YLGS zBKh0LE3av(f2*qF)q{(U*g!8T#s`Pixn|uq3k$1CwBD_*xa{dxoE};zIA`{3Y~TJS za>AXHYt=RhuPi1g0Zns-UVoKJ`c0$nj&)SWwf?_%QYqP}8S6=$3kc|$?aDa6&30GL zR>Gc zoRdLpTO-4Z*|*jeQvwuGRvuJ|6U#k6*a3;v4$BnrJd<)by1XCKTuG&zv8p?5VhK^g z_ws-Hwd=9*8VWx@L$*0*ZTy@xDjN!{&M}fiKgz14neSFbv0SZBU-S8#Z?A}3$$4p3j$`PucPE4;dG<_J+aeI(+bJ>&WVcpJOz$aKgZz$Q}Xl}BP15Fcp zvyJmVL*R{TdL@5-?T5LBqqwHhePbL9L)KyRk`mAe)QxF znO;#u@VO4Fi#XpFF4*Jd^I)gKXh{n zTiD0x+u_8qOCKpMzBbTWRbjoszuu|zP<37278BLf;Vt~dJ~u+p@J>bAfRf-bj2rJs2FmKBtCL;QS+{~^75EZP%H8%guPQRa8Ggc?w~?J+2Cejp>Q3+~nCoMY zKGJqaCT<>kyJrte)Ma_+(K-ri6w*m*b3YR^f{!Ej>< zPxCov_x95DHcKrtJPnkC@pThF`gl(jjlMoITes(yx&57XzSP{Za+#ho@4&SK>j!_c zPJh1ACTLfanqjc~;q84zeI@=uGRWqZWb2}P6qo3B?d7nbT=NKC@Oj#%^W|mfiPVBH z_imp5vqoWk5ar5~#zK?j0a=`k2{DxU_1L|@gGX(Q)(DNHN=i_1dC|;Cid@`(EyG{m zUZ7XS2n-H6vAkN>Q)4P=413p5H5M*QVw}%5JH08!H6p-kOstH7C7QWgD%U88kj0%d zDtY;$(6434P_IBZY1mz331!NhREKM~#kTyL`RwW0)N|sTZr6>_Pj%C;UtHK4YLfTY zb!cF``EZX*=ORk|>z_j|&**1wEBP2xy|}gi^Yj4<4(1FtFI&?CbyUufUoRBI31{El HCd&B-BlcV0 literal 0 HcmV?d00001 diff --git a/src/components/page-watch-common/chat/chat-like/imgs/icon-like-heart.png b/src/components/page-watch-common/chat/chat-like/imgs/icon-like-heart.png new file mode 100644 index 0000000000000000000000000000000000000000..1b43efe2464a8743ece6098dcb0edc29b83cfd46 GIT binary patch literal 2572 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 Ef=nEAKL7v# literal 0 HcmV?d00001 diff --git a/src/components/page-watch-common/chat/chat-like/imgs/icon-like-star.png b/src/components/page-watch-common/chat/chat-like/imgs/icon-like-star.png new file mode 100644 index 0000000000000000000000000000000000000000..df5068448927e31528bf7fdd9bcb97c0cb06b578 GIT binary patch literal 2554 zcmZXVdpMM7AIBf(5gMU&wj-*csUD}@QOcyDL2Di_x)V=b)TUJZ8KV8wFE&B zBYzq-SUpqz88|I8 zd@u4*vQVW6RWVSNBUFfDjzB^RuK@}cqb%3uAd}H8S0N)1q1mF{ak3yXx)LBCv z0qPv#o-qiPfxrR;1P~BGfP#Pw0tyICLHH#I9ih=2ntVWH4kDYysvSW@TqBrK35L61B1Y=mBS=p{oh1$wE_OM^ZykgfzN3Q{siDIleS zlm^o6i|*7O86ahXlm*fxkfwu_15zFg1i}D)QK;H169$fgoD6ab$Z3m0Ll#s-W77#A=eVEKR*0aglF6^taq`!pC$hfy|+a$uAT%5+e2K*D`(bV8+6QSul?0ZB~NI^}|j(1w-r zRhUv$Xi-J0lgL==H4{shFh}XGj5;>X<^xiRAiAmk)Ga&HHM%co<&whfPCrb!IqqKh zcvH%J{CnL_*7CS9R>Hei5e9=sFN68NFR$%xABYVN-PK<``FcF_>DU!veb1+uJ)rm$ zFx1n1{;v0A@iX?c^6f8XUY2tucMH~wL7Ag#1egp5kvX`W!K-ui}_3YfpxL{Q{ERytT1@ z!t~Jo)FH~?KK8;)Q%e8wnZ3r0iIrs|E0{(vHDmtl!Lz52|5Y-@|4{>Z>Qs-P9m`{u zn|)P#$4sNL?6Gw#iD~F3OFIP97gm01(9_y=V`4&L*s``EKKBmC+^z&)W7UDCti`ic zzt1G}Hw!ZotXz_0Q_U}1!X(6q7=vwYN1xHB2D`M*9gMigEX(T+?hM=odTvuQVKeKN zyULf*i2b?MXEo0J92^kc-=NF6$eOybaUm+Gu{<@YWOqvrqJ15g%g$oa2iN!-M`~cm z$j7wpofAv1zPfKdw}*;%T+$e3n}_63!!S*JYN(_8)Z?5js28oBw?`Ey%F6CusT6GlZmW`dh0&&l8 zUpJ8_H~wIvIPy9(!xc%GnYe1(T8UZj;@Rr9d9+@g{*_%>anZe?AbGrzra>JM?mCt7 zJjcy@+Sxnoj~=E;U)PFQRsTlWK)EL)dZ%w8n%|tQ#k`qg?1hHxwDSw_5LXrJ9@`N3 z{-v-#;M7T6#L}|PUvfpy9)F{4dWVX!bmJ9ZxHj>$_C%ZkrMvt*l z$KI@Y&U@m@1-Als%fjMJEn6L}hy|OI6~nqOPIXu`MsBRA%Y3bEui+3qKHe4c?V7@m zeSt5!`YuX7H87E<>DBsA<2!nZk*FP^1jprZjZ>Q|XH!4KdI|d<9@n-&)}`Os9sAWc zx4eE`afW104EFFLn3#2cE}cjvS$47CPgp7`oS*i2>}e8()zGXA9Q_FY)$rDB<|U)W z2`9WgVqzn{pIM67BcF%c@7LT7-Nv#ZyWGq}628>Ac5lgEZj!%e$n}BI&VG?R6Lhjql8{MsCYNgs2|{aMrbPx`Kr+rPwS4XRMGgdE&&>UMuA-R81ZuKn{F$;XwqJNpVHD*dG6d4CvOa1h>64tL4@C~1g zx=j}1vJVP+qxKO{4kkWkeDIW|LSe}bx?${aqvdj!L2lmF*;KBpE6G-}4CRyj(DL3`2v<=z_gq)wnC<|RLf0tCUE;x7#WnDf9Vvq;htOMPnrglm3w&E*CR_^$eSekz*h)Xmx z5I0*)QsiaTw{~q?R&Zbk$>s?DG(vjNk9Wv0S7>(mWSyBwJBO!dyx}qE>Pv%d1K+-B zETbW$-m#%E{S?jji3{c~eFp{~q_wm#ONROWyw77t$zvTK*$wZ6cDb1~Z(OssAv<-#3VQ+lP7be*$Pw AQ~&?~ literal 0 HcmV?d00001 diff --git a/src/components/page-watch-common/chat/chat-like/imgs/icon-like-thumb.png b/src/components/page-watch-common/chat/chat-like/imgs/icon-like-thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..ed516d24be8f08a0d35a6212985738135ab36a0c GIT binary patch literal 2358 zcmYL}dpMM7AIGOjCv8H9O(oiD#X7X9cwI{>c1N|EL}p1wDx;w$az4#$rAcCF(m0P( zjTVjb$Y6@mq`@SoQV#p#of`5W>%la?ed;~k*XRD;-}~Rs^}FwzM8{uNsc%%r;c%-Q z2zE}`Y5Qd_UyNmDHDe5i!+$0ob+*T@@W1uG4@4Ot;C`Vz9m?(jpYF@bj-c-Me;74l;t@9J0Rko!AunZTw0mnh(3L;^P)GJ+xF$`{f@AuSX*VZgx> z;|g$Sa4!f_Xe2s9p!M1Z%I#Q)9dp={HVDJLFx&-0oiNx7gEDxFA%(XR=*4J;UNQ8F zpr;ACpF(F7bYdxjS9Q?w1Y{DBi9l8lG9kzwgG>PJLTGyoZ31Yk0%V`&;4{CNEQ*IBOd}>U{;N++CLQvxK|W^h z-wrWvp^zB}8JMM*|GVP&0{b$s{eVpY77bW_z`_a{63;?B8JHOEKqsl1N>ugv;d}@a zs=}&OVGmWIEf6YJg^E-m70M94GK8lL$x#N&RKXHu&=chqq4J7A86Z_%=AbkQ&?HJ) zqlzX%X{9KwaE``BX)N@T0QGyK^cBuiL@1?3NfDqFK1wM>DO{AoK`AVR!bHwi%z2kC zcySQ22qg5A1$%#xkkuE2O%84{Nfh#9)5CTU|U?BvS zoWMi~OgVurC(z`!EV(UHZcCTjhRQAJ!AOL4UB(qjwh~W1|taa#=5pKZr`WauI@BDixLpV*D)41BY8u z?qGMoIdoB7=hft(cfs@_pZJ?~5wo-6^(FfIK5nmaRzF{?3t=7b6)WXJ!Pm88M5r@u8M3aj4K%I;I8&b!U7*-zNTF}y8&0RL@c=uCwPgP@G zRLJBfCC8jH*GlIPjYWXsM<3!ugK9{4vHEtES2!;*OntnuUgdQ)#Y17xX4*fl6Zv8O z_Ox5kiOzP<80kW_S!Qe>Jz+euL0r39cv02xjpF$a4-6V6m)Mj=cL_5rEM6_GIb-wI z0QX_p>8b~h78x~6exNr0K&?Tx>P>ChAK~8f;@l?1%9tfL0}8AoUwYt|X+P8RG}CZy zd!%Ew|CB~XR*CEMzR`0g$~P6yYf@4lJzQ8!uXUbRj;f{~g{8JkwKR@|SFU#)6?c)P zHO>5`eQhi0e>&Eg&7yCzqfU^EUUUVNOU;|z-hS|RwebFCF|M&hx+e8=dJLNFOuC`y zijGWLv#Y3=R@&;7_PzdhK4a4zKaT3&6jx4ImR=>BP|G)cuZBDF^sL(RGJ%&h&bW_M z-B;ggpPXxFn5tt)Z*o1s@NoO(QeJ<>4*}0f4yIZRX`1c^=TpYd(#I(#xI@I*sP%!d z)mk0nB%Z>6u)e5g5s%_>{LI1gKgVibQj?S}UDs{pN4l%47Lc1@6`!&|oUNn>S3gVYftw zUtVl_jC(O?ad6E&hqX)8Od=BR96Gbo=(Lw^%HD1IjH6>Y6LA);Pm@k2yr#BitIUiX z%@nR~S;N*^-+j8_GJe}#D^1hcr8U@g^o{4i>%LXLGNjSh+vhT??haR3CFd^9^|ek2 zdFED}pnmLEk~V&3b#C9R&FKcSg(vB;H{X=Abm}MeA7}jYy5)V10-aXo?!0mH^q==E zcYD!sItD-aVx3Wkws@<<%z7<<&m@0pRZF}rq1<=3+Ya+Bs&&Z^tZyB<78H|w*6?uW z)IW-;*W-H(Umy0}TE02=T*oo}q>pzFu?Z$(Ma9OM)%y*?+xy)LEAMK*)cCxipsUvM zuhVLT4#V9VNw(*mbFS@=kKdxTBYZSxRy(P{zA4AagvC0WAECZC?xDT!;n?nlAy)BS z3)M@Fg(4cQm;h{am2%$yxRG>;QL$v{X3JBzgf4ld7Vdb) z)xv#y%fGFPS+*|MqYr0Lwjn6y!~xGH^|Wv>hB{B5kjukvHip6;ytI2zMw+r#XLkp}uw3qcHVA>l!`uzh yL9}zm2ZuIw&3eCybipChiuu+3u41U`!JEVd_NR4aX<+|9&cWW%uH+#3_rC$+p+E!x literal 0 HcmV?d00001 diff --git a/src/components/page-watch-common/chat/chat-like/imgs/icon-like-trophy.png b/src/components/page-watch-common/chat/chat-like/imgs/icon-like-trophy.png new file mode 100644 index 0000000000000000000000000000000000000000..5c89372048769d96c32144aaf04735bddb86d803 GIT binary patch literal 2279 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 UC%Nfi#7`Rvr!#4HLJ-OS08&JQr~m)} literal 0 HcmV?d00001 diff --git a/src/components/page-watch-common/chat/chat-like/mobile-chat-like.vue b/src/components/page-watch-common/chat/chat-like/mobile-chat-like.vue new file mode 100644 index 0000000..b175df2 --- /dev/null +++ b/src/components/page-watch-common/chat/chat-like/mobile-chat-like.vue @@ -0,0 +1,88 @@ + + + + + + diff --git a/src/components/page-watch-common/chat/chat-like/pc-chat-like.vue b/src/components/page-watch-common/chat/chat-like/pc-chat-like.vue new file mode 100644 index 0000000..b767a05 --- /dev/null +++ b/src/components/page-watch-common/chat/chat-like/pc-chat-like.vue @@ -0,0 +1,86 @@ + + + + + + diff --git a/src/components/page-watch-common/chat/chat-like/portrait-chat-like.vue b/src/components/page-watch-common/chat/chat-like/portrait-chat-like.vue new file mode 100644 index 0000000..0301e58 --- /dev/null +++ b/src/components/page-watch-common/chat/chat-like/portrait-chat-like.vue @@ -0,0 +1,85 @@ + + + + + + diff --git a/src/components/page-watch-common/chat/chat-msg-list/hooks/chat-msg-handle-hook.ts b/src/components/page-watch-common/chat/chat-msg-list/hooks/chat-msg-handle-hook.ts new file mode 100644 index 0000000..702aad9 --- /dev/null +++ b/src/components/page-watch-common/chat/chat-msg-list/hooks/chat-msg-handle-hook.ts @@ -0,0 +1,123 @@ +import { appEvents, eventBus } from '@/app/app-events'; +import { translate } from '@/assets/lang'; +import { getWatchCore } from '@/core/watch-sdk'; +import { useChatMsgStore } from '@/store/use-chat-msg-store'; +import { ChatEvents, ChatMsgImageType, ChatMsgType, SendMsgResult } from '@polyv/live-watch-sdk'; +import { isUndefined } from 'lodash-es'; +import { onBeforeUnmount, onMounted } from 'vue'; +import { useSendMsg } from './send-msg-hook'; +import { ChatMsgListHookOptions } from './types'; + +/** + * 聊天室消息处理 hook + */ +export const useChatMsgHandle = (hookOptions: ChatMsgListHookOptions) => { + const watchCore = getWatchCore(); + const chatMsgStore = useChatMsgStore(); + const { sendSystemMsg } = useSendMsg(); + + /** -------------- 处理聊天室消息更新 -------------- */ + /** + * 处理聊天室消息更新 + * @param msgResult 消息结果 + */ + function onChatMsgResultUpdate(msgResult: SendMsgResult) { + const localId = msgResult.localId; + const chatMsg = msgResult.chatMsg; + + // 替换消息列表 + const historyIndex = chatMsgStore.findHistoryIndex(localId); + if (historyIndex !== -1) { + chatMsgStore.setHistoryData(historyIndex, chatMsg); + } + + // 替换 realIndex + const targetRealIndex = chatMsgStore.getRealIndexById(localId); + if (!isUndefined(targetRealIndex)) { + chatMsgStore.setRealIndexById(chatMsg.id, targetRealIndex); + chatMsgStore.deleteRealIndexById(localId); + } + + // 通知虚拟列表替换消息并重新渲染消息节点,确保消息的 id 为服务端消息 + const virtualList = hookOptions.getVirtualList(); + virtualList.updateItem(chatMsg, localId); + } + + onMounted(() => { + eventBus.$on(appEvents.chat.MsgResultUpdate, onChatMsgResultUpdate); + }); + + onBeforeUnmount(() => { + eventBus.$off(appEvents.chat.MsgResultUpdate, onChatMsgResultUpdate); + }); + + /** -------------- 处理图片违规 -------------- */ + function onImageIllegal(evt: { id: string; chatMsg: ChatMsgImageType }) { + // 替换消息列表 + const historyIndex = chatMsgStore.findHistoryIndex(evt.id); + if (historyIndex !== -1) { + chatMsgStore.setHistoryData(historyIndex, evt.chatMsg); + } + + // 通知虚拟列表替换消息并重新渲染消息节点 + const virtualList = hookOptions.getVirtualList(); + virtualList.updateItem(evt.chatMsg, evt.id); + } + + onMounted(() => { + watchCore.chat.eventEmitter.on(ChatEvents.ImageIllegal, onImageIllegal); + }); + + onBeforeUnmount(() => { + watchCore.chat.eventEmitter.off(ChatEvents.ImageIllegal, onImageIllegal); + }); + + /** -------------- 处理清空聊天室 -------------- */ + function onClearMsgHistory() { + chatMsgStore.resetChatMsgStore(); + const virtualList = hookOptions.getVirtualList(); + virtualList.refresh(); + } + + onMounted(() => { + watchCore.chat.eventEmitter.on(ChatEvents.ClearMsgHistory, onClearMsgHistory); + }); + + onBeforeUnmount(() => { + watchCore.chat.eventEmitter.off(ChatEvents.ClearMsgHistory, onClearMsgHistory); + }); + + /** -------------- 处理删除消息 -------------- */ + function onRemoveChatMsg(evt: { id: string }) { + chatMsgStore.removeHistoryData(evt.id); + const virtualList = hookOptions.getVirtualList(); + virtualList.removeItem(evt.id); + } + + onMounted(() => { + watchCore.chat.eventEmitter.on(ChatEvents.RemoveChatMsg, onRemoveChatMsg); + }); + + onBeforeUnmount(() => { + watchCore.chat.eventEmitter.off(ChatEvents.RemoveChatMsg, onRemoveChatMsg); + }); + + /** -------------- 聊天室开关 -------------- */ + function onOpenChatRoom() { + sendSystemMsg(translate('chat.roomReopened')); + } + + function onCloseChatRoom() { + sendSystemMsg(translate('chat.roomClosed')); + } + + onMounted(() => { + watchCore.chat.eventEmitter.on(ChatEvents.OpenChatRoom, onOpenChatRoom); + watchCore.chat.eventEmitter.on(ChatEvents.CloseChatRoom, onCloseChatRoom); + }); + + onBeforeUnmount(() => { + watchCore.chat.eventEmitter.off(ChatEvents.OpenChatRoom, onOpenChatRoom); + watchCore.chat.eventEmitter.off(ChatEvents.CloseChatRoom, onCloseChatRoom); + }); +}; diff --git a/src/components/page-watch-common/chat/chat-msg-list/hooks/contract-history-hook.ts b/src/components/page-watch-common/chat/chat-msg-list/hooks/contract-history-hook.ts new file mode 100644 index 0000000..0526d5b --- /dev/null +++ b/src/components/page-watch-common/chat/chat-msg-list/hooks/contract-history-hook.ts @@ -0,0 +1,117 @@ +import { isUndefined } from '@/assets/utils/types'; +import { useChatMsgStore } from '@/store/use-chat-msg-store'; +import { ChatMsgListHookOptions } from './types'; + +/** + * 压缩历史消息列表 hook + */ +export const useContractHistory = (hookOptions: ChatMsgListHookOptions) => { + const chatMsgStore = useChatMsgStore(); + + /** 历史消息列表最大数量 */ + const maxHistoryCount = 250; + /** 保留数量 */ + const saveHistoryCount = 200; + + /** + * 压缩历史消息 + */ + function contractHistoryData() { + const length = chatMsgStore.getHistoryData().length; + if (length <= maxHistoryCount) { + return; + } + const virtualList = hookOptions.getVirtualList(); + + let sliceStart = length - saveHistoryCount; + let sliceEnd = length; + + // 从渲染列表的区间前后修改 slice 位置 + const firstRenderItem = virtualList.items.first(); + const lastRenderItem = virtualList.items.last(); + if (firstRenderItem && lastRenderItem) { + const firstRenderItemIndex = chatMsgStore.findHistoryIndex(firstRenderItem.id); + const lastRenderItemIndex = chatMsgStore.findHistoryIndex(lastRenderItem.id); + const renderCount = lastRenderItemIndex - firstRenderItemIndex + 1; + // 剩余数量 + let surplusCount = saveHistoryCount - renderCount; + surplusCount = surplusCount < 0 ? 0 : surplusCount; + + sliceStart = firstRenderItemIndex - Math.round(surplusCount / 2); + sliceEnd = lastRenderItemIndex + Math.round(surplusCount / 2) + 1; + } + + sliceStart = sliceStart < 0 ? 0 : sliceStart; + sliceEnd = sliceEnd > length ? length : sliceEnd; + + const historyData = chatMsgStore.getHistoryData(); + const newHistoryData = historyData.slice(sliceStart, sliceEnd); + const newHistoryDataLength = newHistoryData.length; + const newFirstItem = newHistoryData[0]; + const newLastItem = newHistoryData[newHistoryDataLength - 1]; + + // 重新设置 realStartIndex 为最新的值 + const newRealStartIndex = chatMsgStore.getRealIndexById(newLastItem.id); + if (!isUndefined(newRealStartIndex)) { + chatMsgStore.setRealStartIndex(newRealStartIndex); + } + + // 重新设置 realEndIndex 为最新的值 + const newRealEndIndex = chatMsgStore.getRealIndexById(newFirstItem.id); + if (!isUndefined(newRealEndIndex)) { + chatMsgStore.setRealEndIndex(newRealEndIndex); + } + + // 遍历被移除的节点,删除 msgRealIndex 中的属性 + for (let i = 0; i < historyData.length; i++) { + if (i < sliceStart || i >= sliceEnd) { + chatMsgStore.deleteRealIndexById(historyData[i].id); + } + } + + // 重新赋值 historyData + chatMsgStore.resetHistoryData(newHistoryData); + } + + return { + contractHistoryData, + }; +}; + +/** + * 压缩等待队列 hook + */ +export const useContractQueue = () => { + const chatMsgStore = useChatMsgStore(); + + /** 队列最大数量 */ + const maxQueueCount = 300; + /** 保留数量 */ + const saveQueueCount = 200; + + /** + * 压缩队列消息 + */ + function contractMsgQueue() { + const length = chatMsgStore.getMsgQueue().length; + if (length <= maxQueueCount) { + return; + } + + const sliceStart = length - saveQueueCount; + const sliceEnd = length; + + const msgQueue = chatMsgStore.getMsgQueue(); + const newMsgQueue = msgQueue.slice(sliceStart, sliceEnd); + for (let i = 0; i < sliceStart; i++) { + chatMsgStore.deleteRealIndexById(msgQueue[i].id); + } + + // 重新复制 msgQueue + chatMsgStore.resetMsgQueue(newMsgQueue); + } + + return { + contractMsgQueue, + }; +}; diff --git a/src/components/page-watch-common/chat/chat-msg-list/hooks/hide-chat-msg-hook.ts b/src/components/page-watch-common/chat/chat-msg-list/hooks/hide-chat-msg-hook.ts new file mode 100644 index 0000000..6c2df24 --- /dev/null +++ b/src/components/page-watch-common/chat/chat-msg-list/hooks/hide-chat-msg-hook.ts @@ -0,0 +1,32 @@ +import { useChannelStore } from '@/store/use-channel-store'; +import { useChatMsgStore } from '@/store/use-chat-msg-store'; +import { ynToBool } from '@utils-ts/boolean'; +import { ChatMsgSource, YN } from '@polyv/live-watch-sdk'; + +/** + * 消息隐藏 hook + */ +export const useHideChatMsgHook = () => { + const channelStore = useChannelStore(); + const chatMsgStore = useChatMsgStore(); + + const hideChatMsgSources: ChatMsgSource[] = []; + + /** ---------- 自定义消息是否显示 ---------- */ + const showCustomMessageEnabled = ynToBool( + channelStore.channelDetail?.channelConfig.showCustomMessageEnabled, + YN.N, + ); + if (!showCustomMessageEnabled) { + hideChatMsgSources.push(ChatMsgSource.CustomerMessage); + } + + /** ---------- 竖屏不显示打赏消息 ---------- */ + if (channelStore.isPortraitWatchLayout) { + hideChatMsgSources.push(ChatMsgSource.Reward); + } + + chatMsgStore.$patch({ + hideChatMsgSources, + }); +}; diff --git a/src/components/page-watch-common/chat/chat-msg-list/hooks/msg-queue-hook.ts b/src/components/page-watch-common/chat/chat-msg-list/hooks/msg-queue-hook.ts new file mode 100644 index 0000000..6c94682 --- /dev/null +++ b/src/components/page-watch-common/chat/chat-msg-list/hooks/msg-queue-hook.ts @@ -0,0 +1,160 @@ +import { getWatchCore } from '@/core/watch-sdk'; +import { useChatMsgStore } from '@/store/use-chat-msg-store'; +import { useChatStore } from '@/store/use-chat-store'; +import { RenderPosition } from '@just4/virtual-list/types'; +import { ChatEvents, ChatMsgSource, ChatMsgType } from '@polyv/live-watch-sdk'; +import { onBeforeUnmount, onMounted } from 'vue'; +import { useContractHistory, useContractQueue } from './contract-history-hook'; +import { ChatMsgListHookOptions } from './types'; + +export const useChatMsgQueue = (hookOptions: ChatMsgListHookOptions) => { + const chatStore = useChatStore(); + const chatMsgStore = useChatMsgStore(); + + const { contractHistoryData } = useContractHistory(hookOptions); + const { contractMsgQueue } = useContractQueue(); + + let joinTimer: number | undefined; + + /** + * 插入一条新消息到队列中 + * @param chatMsg 消息 + */ + function pushMsgQueue(chatMsg: ChatMsgType): void { + const virtualList = hookOptions.getVirtualList(); + + if (chatMsgStore.getRealStartIndex() > 0) { + if (chatMsgStore.isChatServiceMsg(chatMsg)) { + chatMsgStore.increaseRealIndex(); + } + chatMsgStore.showMoreMsg(); + virtualList.resetBoundaryState(RenderPosition.Foot); + return; + } + + chatMsgStore.pushMsgQueue(chatMsg); + contractMsgQueue(); + + // 服务端的消息才更新 realIndex + if (chatMsgStore.isChatServiceMsg(chatMsg)) { + chatMsgStore.increaseRealIndex(); + chatMsgStore.setRealIndexById(chatMsg.id, 0); + chatMsgStore.setRealStartIndex(0); + } + + // 插入到是本地消息 + if (chatMsgStore.isLocalMsg(chatMsg)) { + // 直接将队列消息插入,不需要延迟 + const addList = chatMsgStore.concatQueueToHistoryData(true); + contractHistoryData(); + + virtualList.addBoundaryItems(addList, RenderPosition.Foot, true); + } + + checkJoinTimer(); + } + + /** + * 检查定时器 + */ + function checkJoinTimer() { + // 消息队列为空,则关闭定时器 + if (chatMsgStore.getMsgQueue().length === 0) { + removeJoinTimer(); + return; + } + + // 已有定时器则不再创建 + if (joinTimer) { + return; + } + + // 启动定时器用于消息出队进行渲染 + startJoinTimer(); + } + + /** + * 开启插入定时器 + */ + function startJoinTimer() { + removeJoinTimer(); + + joinTimer = window.setInterval(() => { + const virtualList = hookOptions.getVirtualList(); + const container = hookOptions.getContainerElem(); + // 是否在底部(50为误差值) + const isBottom = container.scrollTop + container.clientHeight + 50 >= container.scrollHeight; + + if (chatMsgStore.getRealStartIndex() === 0) { + const renderData = chatMsgStore.concatQueueToHistoryData(true); + if (renderData.length) { + if (isBottom && renderData.length) { + virtualList.addBoundaryItems(renderData, RenderPosition.Foot, true); + } else { + /** + * 重置滚动列表的状态 + * 如果当前在最底部往上滚一点点,此时收到消息时如果不重置,重新滚到下方不会加载新消息 + */ + virtualList.resetBoundaryState(RenderPosition.Foot); + chatMsgStore.showMoreMsg(); + } + } + } else { + chatMsgStore.showMoreMsg(); + } + + contractHistoryData(); + checkJoinTimer(); + }, 300); + } + + /** + * 销毁插入定时器 + */ + function removeJoinTimer() { + if (joinTimer) { + clearInterval(joinTimer); + joinTimer = undefined; + } + } + + function onChatMsg(evt: { chatMsg: ChatMsgType }) { + const chatMsg = evt.chatMsg; + const msgSource = chatMsg.msgSource; + + // 对于仅看主持人,非特殊身份,非自己发言的全部过滤掉 + if ( + chatStore.onlySpecialMsg && + [ChatMsgSource.Speak, ChatMsgSource.Image, ChatMsgSource.Emotion].includes(msgSource) && + !chatMsgStore.isSpecialUserMsg(chatMsg) && + !chatMsgStore.isSelfMsg(chatMsg) + ) { + return; + } + + pushMsgQueue(chatMsg); + } + + /** + * 监听聊天室消息 + */ + function listenChatMsg() { + unlistenChatMsg(); + const watchCore = getWatchCore(); + watchCore.chat.eventEmitter.on(ChatEvents.ChatMessage, onChatMsg); + } + + function unlistenChatMsg() { + const watchCore = getWatchCore(); + watchCore.chat.eventEmitter.off(ChatEvents.ChatMessage, onChatMsg); + } + + onMounted(() => { + listenChatMsg(); + }); + + onBeforeUnmount(() => { + removeJoinTimer(); + unlistenChatMsg(); + }); +}; diff --git a/src/components/page-watch-common/chat/chat-msg-list/hooks/msg-render-hook.ts b/src/components/page-watch-common/chat/chat-msg-list/hooks/msg-render-hook.ts new file mode 100644 index 0000000..50376c3 --- /dev/null +++ b/src/components/page-watch-common/chat/chat-msg-list/hooks/msg-render-hook.ts @@ -0,0 +1,163 @@ +/** + * @file 聊天室消息渲染 hook + */ +import Vue, { ComponentOptions } from 'vue'; +import { ChatMsgItemPropsType } from '../msg-items/use-chat-msg-item'; +import { ChatMsgType } from '@polyv/live-watch-sdk'; +import { RenderPosition } from '@just4/virtual-list/types'; +import { useChatMsgStore } from '@/store/use-chat-msg-store'; +import { translate } from '@/assets/lang'; +import { ChatMsgListHookOptions } from './types'; +import { isUndefined } from '@/assets/utils/types'; +import { pinia } from '@/plugins/pinia'; +import { useChannelStore } from '@/store/use-channel-store'; +import { useWatchAppStore } from '@/store/use-watch-app-store'; + +export type ChatMsgItemComponentOptions = ComponentOptions; + +export const useMsgRender = ( + ChatMsgItemComponent: ChatMsgItemComponentOptions, + hookOptions: ChatMsgListHookOptions, +) => { + const watchAppStore = useWatchAppStore(); + const chatMsgStore = useChatMsgStore(); + const channelStore = useChannelStore(); + + /** + * 渲染消息列表 + * @param data 消息列表 + */ + function renderItems(data: ChatMsgType[]): HTMLElement[] { + const domList: HTMLElement[] = []; + + data.forEach((chatMsg, index) => { + let prevChatMsg: ChatMsgType | undefined = data[index - 1]; + let nextChatMsg: ChatMsgType | undefined = data[index + 1]; + + const historyData = chatMsgStore.getHistoryData(); + let historyIndex = -1; + if (isUndefined(prevChatMsg) || isUndefined(nextChatMsg)) { + historyIndex = chatMsgStore.findHistoryIndex(chatMsg.id); + } + if (historyIndex !== -1 && isUndefined(prevChatMsg)) { + prevChatMsg = historyData[historyIndex - 1]; + } + if (historyIndex !== -1 && isUndefined(nextChatMsg)) { + nextChatMsg = historyData[historyIndex + 1]; + } + + const propsData: ChatMsgItemPropsType = { + containerElem: hookOptions.getContainerElem(), + getVirtualList: hookOptions.getVirtualList, + chatMsg, + prevChatMsg, + nextChatMsg, + }; + + const instance = new Vue({ + render(h) { + return h(ChatMsgItemComponent, { + props: propsData, + }); + }, + pinia, + }); + + instance.$mount(); + + const domElem = instance.$el as HTMLElement; + domElem.__vueVm = instance; + domList.push(domElem); + }); + + return domList; + } + + /** + * 渲染边界节点 + * @param position 位置 + */ + function renderBoundary(position: RenderPosition) { + console.log('>>>renderBoundary:', position); + const virtualList = hookOptions.getVirtualList(); + + // 渲染没有更多 + if ( + !channelStore.isPortraitWatchLayout && + position === RenderPosition.Head && + chatMsgStore.historyEnd && + virtualList.items.length >= chatMsgStore.batchCount + ) { + const instance = new Vue({ + render(h) { + return h( + 'div', + { + class: 'c-chat-msg-list__tips pws-chat-msg-list-tips', + }, + `${translate('chat.norMore')}`, + ); + }, + }); + instance.$mount(); + return instance.$el as HTMLDivElement; + } + } + + /** + * 渲染空数据提示。 + */ + function renderEmpty() { + if (!channelStore.isPortraitWatchLayout && watchAppStore.isWatchBackUrl) { + const instance = new Vue({ + render(h) { + return h( + 'div', + { + class: 'c-chat-msg-list__tips pws-chat-msg-list-tips', + }, + `${translate('chat.empty')}`, + ); + }, + }); + instance.$mount(); + return instance.$el as HTMLDivElement; + } + } + + /** + * 渲染数据加载中 + */ + function renderLoading() { + const div = document.createElement('div'); + div.className = 'c-chat-msg-list__loading'; + return div; + } + + /** + * 渲染数据加载失败 + */ + function renderError() { + const instance = new Vue({ + render(h) { + return h( + 'div', + { + class: 'c-chat-msg-list__tips pws-chat-msg-list-tips', + }, + `${translate('chat.loadError')}`, + ); + }, + }); + instance.$mount(); + return instance.$el as HTMLDivElement; + } + + return { + renderItems, + renderBoundary, + renderLoading, + renderError, + renderEmpty, + }; +}; diff --git a/src/components/page-watch-common/chat/chat-msg-list/hooks/request-history-hook.ts b/src/components/page-watch-common/chat/chat-msg-list/hooks/request-history-hook.ts new file mode 100644 index 0000000..bb5ce1f --- /dev/null +++ b/src/components/page-watch-common/chat/chat-msg-list/hooks/request-history-hook.ts @@ -0,0 +1,179 @@ +/** + * @file 用于请求历史消息 hook + */ + +import { isString } from '@/assets/utils/string'; +import { getWatchCore } from '@/core/watch-sdk'; +import { useChatMsgStore } from '@/store/use-chat-msg-store'; +import { useChatStore } from '@/store/use-chat-store'; +import { InitialResponse } from '@just4/virtual-list/types'; +import { ChatMsgType } from '@polyv/live-watch-sdk'; +import { useContractHistory } from './contract-history-hook'; +import { ChatMsgListHookOptions, RequestHistoryCommonResult } from './types'; + +export const useRequestHistory = ( + hookOptions: ChatMsgListHookOptions, +): RequestHistoryCommonResult => { + const chatStore = useChatStore(); + const chatMsgStore = useChatMsgStore(); + const { contractHistoryData } = useContractHistory(hookOptions); + + /** + * 请求聊天室历史消息 + */ + async function requestChatHistory(start = 0, end?: number) { + const reqStart = start; + const reqEnd = end ?? start + chatMsgStore.batchCount - 1; + const watchCore = getWatchCore(); + + let data = await watchCore.chat.getChatHistory({ + start: reqStart, + end: reqEnd, + getSpecialMessage: chatStore.onlySpecialMsg ? 1 : 0, + }); + + chatMsgStore.historyEnd = data.length < chatMsgStore.batchCount; + + // 存储数据的下标 + data.forEach((chatMsg, index) => { + const realIndex = start + index; + chatMsgStore.setRealIndexById(chatMsg.id, realIndex); + }); + + // 反转列表 + data = data.reverse(); + + return { + data, + realStartIndex: start, + realEndIndex: start + data.length - 1, + }; + } + + /** + * 加载初始数据 + */ + async function loadInitialData(): Promise> { + chatMsgStore.resetChatMsgStore(); + const result = await requestChatHistory(); + const data = result.data; + chatMsgStore.resetHistoryData(data); + + if (data.length) { + chatMsgStore.setRealStartIndex(result.realStartIndex); + chatMsgStore.setRealEndIndex(result.realEndIndex); + } + + return { + data: data, + reachedFootBoundary: true, + reachedHeadBoundary: false, + }; + } + + /** + * 加载最新的数据 + */ + async function loadNextData(ref: unknown): Promise { + if (!isString(ref)) { + throw new Error('loadNextData fail, ref is not string'); + } + console.log('loadNextData', ref); + + const historyLength = chatMsgStore.getHistoryData().length; + if (historyLength === 0) { + return []; + } + + const id = ref; + let data: ChatMsgType[] = []; + + // ref 对应的 historyData 下标 + let refIndex = chatMsgStore.findHistoryIndex(id); + if (refIndex === -1) { + return []; + } + + // 从 historyData 中截取数据返回 + let sliceStart = refIndex + 1; + if (sliceStart > historyLength - 1) { + sliceStart = historyLength - 1; + } + + let sliceEnd = refIndex + chatMsgStore.batchCount + 1; + if (sliceEnd > historyLength - 1) { + sliceEnd = historyLength - 1; + } + + let needRequest = false; + // 此时如果是数组尾部的一批,且 realStartIndex 非 0,则请求接口获取 + if (sliceEnd - sliceStart < chatMsgStore.batchCount && chatMsgStore.getRealStartIndex() !== 0) { + needRequest = true; + } + + if (needRequest && chatMsgStore.getRealStartIndex() !== 0) { + const reqEnd = chatMsgStore.getRealStartIndex() - 1; + let reqStart = reqEnd - chatMsgStore.batchCount; + reqStart = reqStart < 0 ? 0 : reqStart; + const result = await requestChatHistory(reqStart, reqEnd); + chatMsgStore.concatHistoryData(result.data, 'tail'); + chatMsgStore.setRealStartIndex(result.realStartIndex); + // 数据新增,refIndex 需要重新获取 + refIndex = chatMsgStore.findHistoryIndex(id); + } + + sliceStart = refIndex + 1; + sliceEnd = refIndex + chatMsgStore.batchCount + 1; + + data = chatMsgStore.getHistoryData().slice(sliceStart, sliceEnd); + + setTimeout(() => { + contractHistoryData(); + }, 50); + + return data; + } + + /** + * 加载更旧的数据 + */ + async function loadPreviousData(ref: unknown): Promise { + if (!isString(ref)) { + throw new Error('loadPreviousData fail, ref is not string'); + } + console.log('loadPreviousData', ref); + + const batchCount = chatMsgStore.batchCount; + const id = ref; + let data: ChatMsgType[] = []; + + // ref 对应的 historyData 下标 + let refIndex = chatMsgStore.findHistoryIndex(id); + + // ref 下标小于页数,需要请求一批历史消息 + if (refIndex < batchCount) { + const result = await requestChatHistory(chatMsgStore.getRealEndIndex() + 1); + chatMsgStore.concatHistoryData(result.data, 'header'); + chatMsgStore.setRealEndIndex(result.realEndIndex); + // 数据新增,refIndex 需要重新获取 + refIndex = chatMsgStore.findHistoryIndex(id); + } + + // 从 historyData 中截取数据返回 + const sliceStart = refIndex - batchCount < 0 ? 0 : refIndex - batchCount; + const sliceEnd = refIndex; + data = chatMsgStore.getHistoryData().slice(sliceStart, sliceEnd); + + setTimeout(() => { + contractHistoryData(); + }, 50); + + return data; + } + + return { + loadInitialData, + loadNextData, + loadPreviousData, + }; +}; diff --git a/src/components/page-watch-common/chat/chat-msg-list/hooks/request-history-session-hook.ts b/src/components/page-watch-common/chat/chat-msg-list/hooks/request-history-session-hook.ts new file mode 100644 index 0000000..7283eb3 --- /dev/null +++ b/src/components/page-watch-common/chat/chat-msg-list/hooks/request-history-session-hook.ts @@ -0,0 +1,156 @@ +import { ref } from 'vue'; +import { isString } from '@/assets/utils/string'; +import { getWatchCore } from '@/core/watch-sdk'; +import { useChatMsgStore } from '@/store/use-chat-msg-store'; +import { usePlaybackStore } from '@/store/use-playback-store'; +import { InitialResponse } from '@just4/virtual-list/types'; +import { ChatMsgType } from '@polyv/live-watch-sdk'; +import { RequestHistoryCommonResult } from './types'; + +/** + * @hook 请求场次历史消息 + */ +export const useRequestHistorySession = (): RequestHistoryCommonResult => { + const playbackStore = usePlaybackStore(); + const chatMsgStore = useChatMsgStore(); + + /** 当前页码,默认为 1 */ + const curPageNumber = ref(1); + + /** + * 请求聊天室历史消息 + */ + async function requestChatHistory(pageNumber: number, start = 0) { + const watchCore = getWatchCore(); + + try { + let { curPage, totalPage, data } = await watchCore.chat.getChatHistoryBySessionId({ + sessionId: playbackStore.currentPlaybackTarget?.playbackOptions.sessionId || '', + pageNumber: pageNumber, + pageSize: chatMsgStore.batchCount, + }); + + curPageNumber.value = curPage; + chatMsgStore.historyEnd = + totalPage === 0 || curPage === totalPage || data.length < chatMsgStore.batchCount; + + // 存储数据的下标 + data.forEach((chatMsg, index) => { + const realIndex = start + index; + chatMsgStore.setRealIndexById(chatMsg.id, realIndex); + }); + + // 反转列表 + data = data.reverse(); + + return { + data, + realStartIndex: start, + realEndIndex: start + data.length - 1, + }; + } catch (error) { + console.error('error', error); + return { + data: [], + realStartIndex: start, + realEndIndex: start + 0 - 1, + }; + } + } + + /** + * 加载初始数据 + */ + async function loadInitialData(): Promise> { + chatMsgStore.resetChatMsgStore(); + curPageNumber.value = 1; + + const result = await requestChatHistory(curPageNumber.value, 0); + const data = result.data; + chatMsgStore.resetHistoryData(data); + + if (data.length) { + chatMsgStore.setRealStartIndex(result.realStartIndex); + chatMsgStore.setRealEndIndex(result.realEndIndex); + } + + return { + data: data, + reachedFootBoundary: true, + reachedHeadBoundary: false, + }; + } + + /** + * 加载最新的数据 + */ + async function loadNextData(ref: unknown): Promise { + if (!isString(ref)) { + throw new Error('loadNextData fail, ref is not string'); + } + console.log('loadNextData', ref); + + const historyLength = chatMsgStore.getHistoryData().length; + if (historyLength === 0) { + return []; + } + + const id = ref; + let data: ChatMsgType[] = []; + + // ref 对应的 historyData 下标 + const refIndex = chatMsgStore.findHistoryIndex(id); + if (refIndex === -1) { + return []; + } + + // 从 historyData 中截取数据返回 + const sliceStart = refIndex + 1; + const sliceEnd = refIndex + chatMsgStore.batchCount + 1; + data = chatMsgStore.getHistoryData().slice(sliceStart, sliceEnd); + + return data; + } + + /** + * 加载更旧的数据 + */ + async function loadPreviousData(ref: unknown): Promise { + if (!isString(ref)) { + throw new Error('loadPreviousData fail, ref is not string'); + } + console.log('loadPreviousData', ref); + + const batchCount = chatMsgStore.batchCount; + const id = ref; + let data: ChatMsgType[] = []; + + // ref 对应的 historyData 下标 + let refIndex = chatMsgStore.findHistoryIndex(id); + + // ref 下标小于页数,需要请求一批历史消息 + if (refIndex < batchCount) { + const result = await requestChatHistory( + curPageNumber.value + 1, + chatMsgStore.getRealEndIndex() + 1, + ); + chatMsgStore.concatHistoryData(result.data, 'header'); + chatMsgStore.setRealEndIndex(result.realEndIndex); + // 数据新增,refIndex 需要重新获取 + refIndex = chatMsgStore.findHistoryIndex(id); + } + + // 从 historyData 中截取数据返回 + const sliceStart = refIndex - batchCount < 0 ? 0 : refIndex - batchCount; + const sliceEnd = refIndex; + data = chatMsgStore.getHistoryData().slice(sliceStart, sliceEnd); + + return data; + } + + return { + loadInitialData, + loadNextData, + loadPreviousData, + }; +}; diff --git a/src/components/page-watch-common/chat/chat-msg-list/hooks/send-msg-hook.ts b/src/components/page-watch-common/chat/chat-msg-list/hooks/send-msg-hook.ts new file mode 100644 index 0000000..57e16d1 --- /dev/null +++ b/src/components/page-watch-common/chat/chat-msg-list/hooks/send-msg-hook.ts @@ -0,0 +1,58 @@ +import { appEvents, eventBus } from '@/app/app-events'; +import { getWatchCore } from '@/core/watch-sdk'; +import { + SendEmotionImageMsgOptions, + SendSpeakMsgOptions, + SendImageMsgOptions, +} from '@polyv/live-watch-sdk'; + +export const useSendMsg = () => { + /** + * 发送 speak 消息 + */ + function sendSpeakMsg(options: SendSpeakMsgOptions) { + const watchCore = getWatchCore(); + watchCore.chat.sendSpeakMsg(options, msgResult => { + eventBus.$emit(appEvents.chat.MsgResultUpdate, msgResult); + }); + eventBus.$emit(appEvents.chat.ScrollToNew); + } + + /** + * 发送 emotion 图片消息 + */ + async function sendEmotionImageMsg(options: SendEmotionImageMsgOptions) { + const watchCore = getWatchCore(); + watchCore.chat.sendEmotionImageMsg(options, msgResult => { + eventBus.$emit(appEvents.chat.MsgResultUpdate, msgResult); + }); + eventBus.$emit(appEvents.chat.ScrollToNew); + } + + /** + * 发送 system 系统消息 + */ + function sendSystemMsg(content: string) { + const watchCore = getWatchCore(); + watchCore.chat.sendSystemMsg(content); + eventBus.$emit(appEvents.chat.ScrollToNew); + } + + /** + * 发送图片 + */ + function sendImageMsg(options: SendImageMsgOptions) { + const watchCore = getWatchCore(); + watchCore.chat.sendImageMsg(options, msgResult => { + eventBus.$emit(appEvents.chat.MsgResultUpdate, msgResult); + }); + eventBus.$emit(appEvents.chat.ScrollToNew); + } + + return { + sendSpeakMsg, + sendEmotionImageMsg, + sendSystemMsg, + sendImageMsg, + }; +}; diff --git a/src/components/page-watch-common/chat/chat-msg-list/hooks/types.ts b/src/components/page-watch-common/chat/chat-msg-list/hooks/types.ts new file mode 100644 index 0000000..d1f6fb7 --- /dev/null +++ b/src/components/page-watch-common/chat/chat-msg-list/hooks/types.ts @@ -0,0 +1,18 @@ +import { VirtualList } from '@just4/virtual-list'; +import { InitialResponse } from '@just4/virtual-list/types'; +import { ChatMsgType } from '@polyv/live-watch-sdk'; + +export type GetVirtualListFn = () => VirtualList; + +export interface ChatMsgListHookOptions { + /** 获取列表容器节点 */ + getContainerElem: () => HTMLDivElement; + /** 获取虚拟列表实例 */ + getVirtualList: GetVirtualListFn; +} + +export interface RequestHistoryCommonResult { + loadInitialData(): Promise>; + loadNextData(ref: unknown): Promise; + loadPreviousData(ref: unknown): Promise; +} diff --git a/src/components/page-watch-common/chat/chat-msg-list/imgs/loading.png b/src/components/page-watch-common/chat/chat-msg-list/imgs/loading.png new file mode 100644 index 0000000000000000000000000000000000000000..8a2d5b705698d63ce54f18b469b30eab095949b8 GIT binary patch literal 1779 zcmVtB_*hk4cwP8d`PdXK zcGEPrSfRn7SqZw367R!oQUuY)QV}1uDnxRPXMQ>LPMJ<-?w!XuXJ(R<-Q~`mbI*7F z`=9@uJ9mO${( zfW7d#z?DO16<9a8Qs}%OJLoE-TN!lTkX2(FXipAN71c_h^BT=6qgpz2-jP*dONHJj z$SSZCL2oqJZY#_r`8yQ!W&`a89;XKH2yK9)k#~ytKxl&;4Y^xh_k}jd@sK-V8|Y-F zzOVL6AqF}v=&YoTYPA}wBJw&_tJO?=v*L~Fb)CrqbX;TyJqy?!q0>fA3Y@j*c4J=^ z(P==-#tlljX+(Kuprat~*s)^^W9%RzJ|!@T=snK);l;(pzrxOEy0J3>9R*oHmP(~V zh*%|}9`P6v*NCXvXf)mk3oVY*iJdBRRA2|OTrQs@qHS(eL_A-w*SAN3);VGNLhH!S zago~*&HX?djRuPYtt+}6>?@O@YUm`$s-SgXYlTjVtP)x^wl-)P$f}`LVrzkxg{%Ww z6}EC{naH}JRbb}^`s~@WmnZD~`}cqESKb{vcI*!E{P6Iwl+7gBb+%GycQlWVj`p-# zt(}%-l^A1x1Hk9CTJ2i^u)CFI4zf6IVq)SDW9()3f`xPb%FN8nl?6*kY^zeK+ywv+ zaL%u_ZM#t@6wWLxEUc-hv6Vr4Q%12^d<+raM#LKcK-9uNa?al!92|USZf?%EHWnRr zBa6r5FMb+0w^i6)0T6t zsi`Re`~)ICLPX+I<@;w@)}6IlZ8;av-n20?GE(U4>pKSkw{*ZJB3c$7-{Z%Re-br% zI~_kcIr(rqZ4Gr<`To4Ry1IR7X{jYUeJF`&zml#}sXR_ZZxYdsV$&@MhKNqLTCFEf zojUcW4D3C7_FUK7+k4cqtnm)#BSicS5udNsY9DxylaZ&TLkHE(qUzwBKS)Fe5b+_W zYVhfNeQj-R_sNqdf06;cckkX?dwP0K13=mDeC=)4PZ9A5W9&0`)gd#gwLv=-#J+v| zu4jzhZ&}u>M0B^e^C}{`P$;~Qh`YUQA>uc-ZNJ1h|Kh}n6MuB7RFX!uR%mxeM@B|& z?(6G&5fL91lM@kHi1-5lJU2Z(Juf4gopVf0O^pG-TSRm_BHHcA_oLO-)z_AmmVOD- zR&Jr4&XvpMG7*gez%`unFX!jyzrJ+oQrAUH7#!!Afq?;QY;5cv#@KxT@Gl}R)a&(n zlyl@B+DR!SQfW!kTYNXx+%pV8p@BbwnHJ zu%AQMaVB*Hqe;!t?Fl3D)t|bfI!@Zi)MU7kp_Ali;gWhpiv^2q+xH@(*b7m`$cv8%h{c_ZJSHN1W?lQ&N~gn-DvWj z$6VytWtUGDw9`zfRFeK17QZee-P`b~w2pinv{<>EtKCn^UWP}3P=THXuDj2H_v_G|r&TR- z(gt={8%`fHd6%#x(VYe4P|#V4>ZoZaOUIi#IcgdW1D!Q!lRn~)NYFi`&5gR_o349h z5c0Y@I;hRG>uZS?N>0@YIIz5n@=i9}0E7Vz@{6^Twpk)S3GBM%c$5eZbL>Wma+%1X zb95NsEbW;@eZT9XPr<)Ym6|#>0=Dc(mNFT3ik!TrklaD%anYj+Sy_(GV+v7;tOeRZ z&uS`B4XivzXT8?e1)LgmnrTHhuDh?w%DcF=tgIB1CaPcGGY1`afU^EN1FdO<{sUv- VNUUlmd%pkx002ovPDHLkV1kHuU2^~c literal 0 HcmV?d00001 diff --git a/src/components/page-watch-common/chat/chat-msg-list/mobile-chat-msg-list.vue b/src/components/page-watch-common/chat/chat-msg-list/mobile-chat-msg-list.vue new file mode 100644 index 0000000..eb24683 --- /dev/null +++ b/src/components/page-watch-common/chat/chat-msg-list/mobile-chat-msg-list.vue @@ -0,0 +1,80 @@ + + + + + + diff --git a/src/components/page-watch-common/chat/chat-msg-list/msg-items/_hooks/chat-msg-computed-hook.ts b/src/components/page-watch-common/chat/chat-msg-list/msg-items/_hooks/chat-msg-computed-hook.ts new file mode 100644 index 0000000..e1b721a --- /dev/null +++ b/src/components/page-watch-common/chat/chat-msg-list/msg-items/_hooks/chat-msg-computed-hook.ts @@ -0,0 +1,24 @@ +import { VirtualList } from '@just4/virtual-list'; +import { ChatMsgType } from '@polyv/live-watch-sdk'; +import { ComputedRef, inject, InjectionKey, provide } from 'vue'; + +export interface ChatMsgComputedContext { + /** 滚动容器 */ + containerRef: ComputedRef; + /** 是否为同一个人连续发送的消息 */ + isContinuityMsg: ComputedRef; + /** 是否为连续相同的消息来源 */ + isContinuitySourceMsg: ComputedRef; + /** 获取虚拟列表 */ + getVirtualList(): VirtualList | undefined; +} + +const MSG_COMPUTED_INJECT_KEY: InjectionKey = Symbol('MsgComputed'); + +export const useChatMsgComputedProvide = (context: ChatMsgComputedContext) => { + provide(MSG_COMPUTED_INJECT_KEY, context); +}; + +export const useChatMsgComputedInject = () => { + return inject(MSG_COMPUTED_INJECT_KEY) as ChatMsgComputedContext; +}; diff --git a/src/components/page-watch-common/chat/chat-msg-list/msg-items/_hooks/chat-msg-data-hook.ts b/src/components/page-watch-common/chat/chat-msg-list/msg-items/_hooks/chat-msg-data-hook.ts new file mode 100644 index 0000000..0555415 --- /dev/null +++ b/src/components/page-watch-common/chat/chat-msg-list/msg-items/_hooks/chat-msg-data-hook.ts @@ -0,0 +1,76 @@ +import { VueProps } from '@/assets/utils/vue-utils/props-utils'; +import { ChatMsgType, ChatMsgQuoteType } from '@polyv/live-watch-sdk'; +import { computed, ComputedRef, inject, InjectionKey, provide, unref } from 'vue'; +import { chatMsgItemProps } from '../use-chat-msg-item'; + +/** + * 聊天室消息数据上下文 + */ +export interface ChatMsgDataContext { + /** 聊天消息 */ + chatMsg: ComputedRef; + /** 上一条消息 */ + prevChatMsg: ComputedRef; + /** 下一条消息 */ + nextChatMsg: ComputedRef; + /** 消息 id */ + msgId: ComputedRef; + /** 消息引用内容 */ + msgQuote: ComputedRef; +} + +const MSG_DATA_INJECT_KEY: InjectionKey = Symbol('MsgData'); + +/** + * 注入聊天室消息数据 + * @param context + */ +export const useChatMsgDataProvide = (context: ChatMsgDataContext) => { + provide(MSG_DATA_INJECT_KEY, context); +}; + +/** + * 获取聊天室消息数据的注入 + */ +export const useChatMsgDataInject = < + MsgType extends ChatMsgType = ChatMsgType, +>(): ChatMsgDataContext => { + return inject(MSG_DATA_INJECT_KEY) as ChatMsgDataContext; +}; + +/** + * 聊天室消息数据 hook + * @param props + * @param autoProvide + */ +export const useChatMsgData = (props: VueProps, autoProvide = true) => { + const chatMsg = computed(() => props.chatMsg); + const prevChatMsg = computed(() => props.prevChatMsg); + const nextChatMsg = computed(() => props.nextChatMsg); + + /** 消息 id */ + const msgId = computed(() => unref(chatMsg).id); + + /** 引用内容 */ + const msgQuote = computed(() => { + const chatMsgVal = unref(chatMsg); + if ('quote' in chatMsgVal) { + return chatMsgVal.quote; + } + return undefined; + }); + + const chatMsgDataContext: ChatMsgDataContext = { + chatMsg, + prevChatMsg, + nextChatMsg, + msgId, + msgQuote, + }; + + if (autoProvide) { + useChatMsgDataProvide(chatMsgDataContext); + } + + return chatMsgDataContext; +}; diff --git a/src/components/page-watch-common/chat/chat-msg-list/msg-items/_hooks/chat-msg-quote-hook.ts b/src/components/page-watch-common/chat/chat-msg-list/msg-items/_hooks/chat-msg-quote-hook.ts new file mode 100644 index 0000000..4f3d656 --- /dev/null +++ b/src/components/page-watch-common/chat/chat-msg-list/msg-items/_hooks/chat-msg-quote-hook.ts @@ -0,0 +1,67 @@ +import { useChannelStore } from '@/store/use-channel-store'; +import { useChatStore } from '@/store/use-chat-store'; +import { YN, ChatMsgQuoteOriginType } from '@polyv/live-watch-sdk'; +import { computed, unref } from 'vue'; +import { ynToBool } from '@utils-ts/boolean'; +import { useViewerStore } from '@/store/use-viewer-store'; +import { appEvents, eventBus } from '@/app/app-events'; +import { TAB_NAME_ASK } from '@/assets/constants/tab-name'; +import { useLayoutStore } from '@/store/use-layout-store'; +import { useWatchAppStore } from '@/store/use-watch-app-store'; + +/** + * 聊天消息回复 hook + * @param chatMsgRef 聊天消息 + */ +export const useChatMsgQuote = (chatMsgRef: ResponsiveRef) => { + const chatStore = useChatStore(); + const watchAppStore = useWatchAppStore(); + const channelStore = useChannelStore(); + const viewerStore = useViewerStore(); + const layoutStore = useLayoutStore(); + + /** 能否进行引用回复 */ + const canQuoteReply = computed(() => { + if (watchAppStore.isWatchBackUrl) return false; + + // 当前处于提问不需要回复 + if ( + layoutStore.mobileMenuCurrentName === TAB_NAME_ASK || + layoutStore.pcAsideTabCurrentName === TAB_NAME_ASK + ) { + return false; + } + + // 引用回复开关 + const quoteReplyEnabled = ynToBool( + channelStore.channelDetail?.channelConfig.quoteReplyEnabled, + YN.N, + ); + + // 聊天室是否被关闭 + const chatRoomIsClosed = chatStore.chatRoomIsClosed; + + return quoteReplyEnabled && !chatRoomIsClosed; + }); + + /** 点击回复 */ + function onClickQuote() { + // 未设置昵称 + if (!viewerStore.hasNickname) { + eventBus.$emit(appEvents.chat.OpenSetNick, true); + return; + } + + // 设置引用的消息 + chatStore.$patch({ + currentQuoteMsg: unref(chatMsgRef), + }); + // 聚焦输入框 + eventBus.$emit(appEvents.chat.FocusToChatInput); + } + + return { + canQuoteReply, + onClickQuote, + }; +}; diff --git a/src/components/page-watch-common/chat/chat-msg-list/msg-items/_hooks/chat-msg-time-hook.ts b/src/components/page-watch-common/chat/chat-msg-list/msg-items/_hooks/chat-msg-time-hook.ts new file mode 100644 index 0000000..02a1c41 --- /dev/null +++ b/src/components/page-watch-common/chat/chat-msg-list/msg-items/_hooks/chat-msg-time-hook.ts @@ -0,0 +1,91 @@ +/** + * @file 聊天室消息时间相关 hook + */ +import { DATE_FORMAT_HM, DATE_FORMAT_SLASH } from '@/assets/constants/date-format'; +import { formatDate } from '@utils-ts/date'; +import { computed, ComputedRef, inject, InjectionKey, provide, unref } from 'vue'; +import { ChatMsgDataContext } from './chat-msg-data-hook'; + +/** 消息间隔时间 */ +const MSG_TIME_GAP = 2 * 60 * 1000; + +export interface ChatMsgTimeContext { + /** 是否显示消息的时间 */ + showMsgTime: ComputedRef; + /** 消息时间文案 */ + msgTimeText: ComputedRef; +} + +export const MSG_TIME_INJECT_KEY: InjectionKey = Symbol('MsgTime'); + +/** + * 注入聊天室消息时间 + * @param context 聊天室消息用户上下文 + */ +export const useChatMsgTimeProvide = (context: ChatMsgTimeContext) => { + provide(MSG_TIME_INJECT_KEY, context); +}; + +/** + * 获取聊天室消息时间的注入 + */ +export const useChatMsgTimeInject = () => { + return inject(MSG_TIME_INJECT_KEY) as ChatMsgTimeContext; +}; + +/** + * 聊天室消息时间 hook + * @param chatMsgData + * @param autoProvide + */ +export const useChatMsgTime = (chatMsgData: ChatMsgDataContext, autoProvide = true) => { + const { chatMsg, prevChatMsg } = chatMsgData; + + /** + * 是否显示消息的时间 + */ + const showMsgTime = computed(() => { + const prevMsg = unref(prevChatMsg); + const msg = unref(chatMsg); + + if (!prevMsg) { + return true; + } + + if (msg.time - prevMsg.time > MSG_TIME_GAP) { + return true; + } + + return false; + }); + + /** + * 消息时间文案 + */ + const msgTimeText = computed(() => { + const time = unref(chatMsg).time; + const tdtime = new Date().toLocaleDateString(); + const showTime = new Date(time); + const ottime = showTime.toLocaleDateString(); + let timeContent = ''; + + if (tdtime !== ottime) { + timeContent = formatDate(time, DATE_FORMAT_SLASH); + } else { + timeContent = formatDate(time, DATE_FORMAT_HM); + } + + return timeContent; + }); + + const chatMsgTimeContext: ChatMsgTimeContext = { + showMsgTime, + msgTimeText, + }; + + if (autoProvide) { + useChatMsgTimeProvide(chatMsgTimeContext); + } + + return chatMsgTimeContext; +}; diff --git a/src/components/page-watch-common/chat/chat-msg-list/msg-items/_hooks/chat-msg-user-hook.ts b/src/components/page-watch-common/chat/chat-msg-list/msg-items/_hooks/chat-msg-user-hook.ts new file mode 100644 index 0000000..2c48125 --- /dev/null +++ b/src/components/page-watch-common/chat/chat-msg-list/msg-items/_hooks/chat-msg-user-hook.ts @@ -0,0 +1,148 @@ +/** + * @file 聊天消息用户相关 hook + */ +import { DEFAULT_VIEWER_AVATAR } from '@/assets/constants/defaults'; +import { resetImageProtocol } from '@/assets/utils/image'; +import { useChatMsgStore } from '@/store/use-chat-msg-store'; +import { useViewerStore } from '@/store/use-viewer-store'; +import { ChatMessageUser, ChatMsgType, ChatUserTypes } from '@polyv/live-watch-sdk'; +import { computed, ComputedRef, inject, InjectionKey, provide, unref } from 'vue'; + +/** + * 聊天室消息用户上下文 + */ +export interface ChatMsgUserContext { + /** 消息的用户信息 */ + msgUser: ComputedRef; + /** 消息的用户昵称 */ + msgUserNick: ComputedRef; + /** 消息的用户头像 */ + msgUserAvatar: ComputedRef; + /** 消息的用户类型 */ + msgUserType: ComputedRef; + /** 消息的用户头衔 */ + msgUserActor: ComputedRef; + /** 是否为自己发言 */ + isSelfMsg: ComputedRef; + /** 是否为特殊用户 */ + isSpecialUser: ComputedRef; +} + +/** + * 聊天消息用户相关 hook + * @param chatMsgRef 聊天消息响应式对象 + */ +export const useChatMsgUserBasic = (chatMsgRef: ResponsiveRef) => { + const viewerStore = useViewerStore(); + const chatMsgStore = useChatMsgStore(); + + /** + * 消息的用户信息 + */ + const msgUser = computed(() => { + if (!chatMsgRef.value) { + return; + } + return chatMsgStore.getChatMsgUser(chatMsgRef.value); + }); + + /** + * 消息的用户昵称 + */ + const msgUserNick = computed(() => { + const user = unref(msgUser); + return user?.nick ?? ''; + }); + + /** + * 消息的用户头像 + */ + const msgUserAvatar = computed(() => { + const user = unref(msgUser); + return resetImageProtocol(user?.pic ?? DEFAULT_VIEWER_AVATAR); + }); + + /** + * 消息的用户类型 + */ + const msgUserType = computed(() => { + const user = unref(msgUser); + return user?.userType; + }); + + /** + * 消息的用户头衔 + */ + const msgUserActor = computed(() => { + const user = unref(msgUser); + return user?.actor; + }); + + /** + * 是否为自己发言 + */ + const isSelfMsg = computed(() => { + return unref(msgUser)?.userId === viewerStore.viewerId; + }); + + /** + * 是否为特殊用户 + */ + const isSpecialUser = computed(() => { + if (!chatMsgRef.value) { + return false; + } + return chatMsgStore.isSpecialUserMsg(chatMsgRef.value); + }); + + const chatMsgUserContext: ChatMsgUserContext = { + msgUser, + msgUserNick, + msgUserAvatar, + msgUserType, + msgUserActor, + isSelfMsg, + isSpecialUser, + }; + + return chatMsgUserContext; +}; + +export const MSG_USER_INJECT_KEY: InjectionKey = Symbol('MsgUser'); + +/** + * 注入聊天室消息用户 + * @param context + */ +export const useChatMsgUserProvide = (context: ChatMsgUserContext) => { + provide(MSG_USER_INJECT_KEY, context); +}; + +/** + * 获取聊天室消息用户的注入 + */ +export const useChatMsgUserInject = () => { + return inject(MSG_USER_INJECT_KEY) as ChatMsgUserContext; +}; + +type UseChatMsgUserOptions = { + /** 聊天消息响应式对象 */ + chatMsg: ResponsiveRef; +}; + +/** + * 聊天室消息用户 hook + * @param options + * @param autoProvide + */ +export const useChatMsgUser = (options: UseChatMsgUserOptions, autoProvide = true) => { + const { chatMsg } = options; + + const chatMsgUserContext = useChatMsgUserBasic(chatMsg); + + if (autoProvide) { + useChatMsgUserProvide(chatMsgUserContext); + } + + return chatMsgUserContext; +}; diff --git a/src/components/page-watch-common/chat/chat-msg-list/msg-items/_imgs/img-msg-placeholder.png b/src/components/page-watch-common/chat/chat-msg-list/msg-items/_imgs/img-msg-placeholder.png new file mode 100644 index 0000000000000000000000000000000000000000..791f4749c99b94bc47906f352b73782cd8892bfe GIT binary patch literal 2535 zcmd^B`8!l?A3t*(92uM=%42Jc=ZS-@OOZ6B^Wo$FnArGQ>URzVW zvL$-c6Axpl6bfT0S+cZPLuq8Gc+cpk_qyKy;Qis;*Z2C~_h1I{+YY*Oo?gx#TsQpX4le0I`y!I=RT9j{Q;1>+5(a z20OjoGkxpBk<-I^=Q{;inb#QP7(TzCG$+#}aeCm?-0a}P>?BDLsqTTsk*54q^B`4F z6i1^FDFDb}DYF1*5=|FDSU{TCdjKLdD&R~29IWSNBaJOsm!-dA9mLik8(F?OL7V{K zRHa&QFom@n3;{rdUYRZ=`O{E1#a@T?B5kxVHnI#3b|QR zbTQnWpAxTrdYXYZltQ5m7V=L)l?^YIsT<}on9!&z$z&m( z0x75yWUwr4W3AvPskO+4{ge%wO(1?t28nW#XUa-t3(?x_qRfplN*kwzo)e4S@yc zZ614;wr%QhqRcfOd$8BCSZRqLKGffTyspti24$ZE>Z8{S%%Z+uIs_@w!oPkz)*bYG zFvJ!zk6t@iR8(X%+&wp^OJqnJU|(Z3EMSLyerv^C`(AVI`I%DJd20&=9>SKIAr%s1 zNLBc`a#^+*KPxK>ANXb0!ssX=^2e$?x}5mdT@qoRqaai}0i2ha-ej>3(B!E#K&dj+ z%k^H_lcZ$|uIH5n;!MGbYMNZr%1T%l&vkI|qNk*!4H3Fid>a(Arp1ke(T@WSD)5>{TCe?2f{nzcHytYBBpn5L+m4W}@@D#$0?lzE}Oy zkJZo*0u5rz9+@fB_}OpCa1|I59lbv7M3*JC(u0F{^TNK2@2|k2#v00|LcA3;AXg|8 z-19OugH6+0 z*_9s;pO-$7`Jtg_IE^Vvwk>HbRJp3Ct=xc6H#6@yh@&qGRvswoSaEBj^J9x2JDh*Y zF6e)GB#69Vp1S{V40B&G`7pQ6)wfJKiCd~Ftj6%AI@S!gBnl5uxujpe-) zFO(QLw$TT8mTTrjg^Y2AuUgEQ+Xbxv8`OUv_Dlx{x9adXnK2JT{8@oXP<(r4Ba|E7G$e#t;%rRE0x;8xG;TYA0duMs<}un+Z%yq|B=^qLi!_ z2mBl#_7|VoMr=`Y<`8N%t5EjeW2=OK9*4WxB!hrmmT%(Wg%o9B|FEg?&kxFtm&%65 z++Nz#()|S3#(Lx=H=amnoGw3|#~m6o_7W#n-W;y*pz+hZ=Ut6Z>YypaQ!;eK<=FBs zs-=2y=!9yKt+B9}*uY=a0YpBY{T1;KcBndFD$+_9aAh%8IpJmBoQ2`(JE@^^sBk<^m?@X(VgXP=5Ml+E+Y6wZF2`pu=f2(G4Z?8~VyWU;I6!X!`kV zhoYdjbMirL?V$gW6Gh2kPU;|si*B#YEv0dXDXEePtIquKUuS(4=06Z(>Q8=aP(=lP zugl_sQGu5BQr2=d zAg3{5XQ2f_4o5?@JPfvgB + + + + + diff --git a/src/components/page-watch-common/chat/chat-msg-list/msg-items/_msg-container/pc-msg-container.vue b/src/components/page-watch-common/chat/chat-msg-list/msg-items/_msg-container/pc-msg-container.vue new file mode 100644 index 0000000..e69ffaa --- /dev/null +++ b/src/components/page-watch-common/chat/chat-msg-list/msg-items/_msg-container/pc-msg-container.vue @@ -0,0 +1,106 @@ + + + + + + diff --git a/src/components/page-watch-common/chat/chat-msg-list/msg-items/_msg-container/portrait-msg-container.vue b/src/components/page-watch-common/chat/chat-msg-list/msg-items/_msg-container/portrait-msg-container.vue new file mode 100644 index 0000000..13b2c19 --- /dev/null +++ b/src/components/page-watch-common/chat/chat-msg-list/msg-items/_msg-container/portrait-msg-container.vue @@ -0,0 +1,109 @@ + + + + + + diff --git a/src/components/page-watch-common/chat/chat-msg-list/msg-items/_msg-container/use-msg-container.ts b/src/components/page-watch-common/chat/chat-msg-list/msg-items/_msg-container/use-msg-container.ts new file mode 100644 index 0000000..d319949 --- /dev/null +++ b/src/components/page-watch-common/chat/chat-msg-list/msg-items/_msg-container/use-msg-container.ts @@ -0,0 +1,36 @@ +import { PropUtils, VueProps } from '@/assets/utils/vue-utils/props-utils'; +import { computed } from 'vue'; +import { CSSProperties } from 'vue/types/jsx'; + +export const msgContainerProps = () => ({ + /** 气泡模式 */ + bubbleModel: PropUtils.bool.def(true), + /** 气泡最小宽度 */ + minWidth: PropUtils.number, + /** 气泡内边距 */ + bubblePadding: PropUtils.string, + /** 是否渲染另一个内容,默认:false */ + renderOtherContent: PropUtils.bool.def(false), +}); + +export const useMsgContainer = (options: { props: VueProps }) => { + const { props } = options; + + const bubbleStyle = computed(() => { + const style: CSSProperties = {}; + + if (props.minWidth) { + style.minWidth = `${props.minWidth}px`; + } + + if (props.bubblePadding) { + style.padding = props.bubblePadding; + } + + return style; + }); + + return { + bubbleStyle, + }; +}; diff --git a/src/components/page-watch-common/chat/chat-msg-list/msg-items/_msg-container/use-msg-tips-control.ts b/src/components/page-watch-common/chat/chat-msg-list/msg-items/_msg-container/use-msg-tips-control.ts new file mode 100644 index 0000000..b38ffc1 --- /dev/null +++ b/src/components/page-watch-common/chat/chat-msg-list/msg-items/_msg-container/use-msg-tips-control.ts @@ -0,0 +1,66 @@ +import { PropUtils, VueProps } from '@/assets/utils/vue-utils/props-utils'; +import { useClickOutside } from '@/hooks/behaviors/use-click-outside'; +import { useSimpleVisible } from '@/hooks/behaviors/use-simple-visible'; +import { ref, unref, watch } from 'vue'; + +export const msgTipsControlProps = () => ({ + /** 是否禁用提示,默认:true */ + disabledTips: PropUtils.bool.def(true), +}); + +export const useMsgTipsControl = (options: { props: VueProps }) => { + const { props } = options; + + /** 外层节点 */ + const referenceRef = ref(); + + const { listenClickOutSide, removeListenClickOutSide } = useClickOutside( + referenceRef, + onClickOutside, + false, + ); + + /** 提示是否显示 */ + const { + visible: tipsVisible, + toggle: toggleTipsVisible, + close: closeTips, + } = useSimpleVisible(false); + + /** 点击内容 */ + function onClickControl() { + if (props.disabledTips) { + return; + } + + listenClickOutSide(); + toggleTipsVisible(); + } + + /** 点击提示 */ + function onClickTips() { + closeTips(); + } + + /** 处理点击外部 */ + function onClickOutside() { + removeListenClickOutSide(); + closeTips(); + } + + watch( + () => unref(tipsVisible), + () => { + if (!unref(tipsVisible)) { + removeListenClickOutSide(); + } + }, + ); + + return { + referenceRef, + tipsVisible, + onClickControl, + onClickTips, + }; +}; diff --git a/src/components/page-watch-common/chat/chat-msg-list/msg-items/_msg-quote-content/mobile-msg-quote-content.vue b/src/components/page-watch-common/chat/chat-msg-list/msg-items/_msg-quote-content/mobile-msg-quote-content.vue new file mode 100644 index 0000000..b8e9914 --- /dev/null +++ b/src/components/page-watch-common/chat/chat-msg-list/msg-items/_msg-quote-content/mobile-msg-quote-content.vue @@ -0,0 +1,77 @@ + + + + + + diff --git a/src/components/page-watch-common/chat/chat-msg-list/msg-items/_msg-quote-content/pc-msg-quote-content.vue b/src/components/page-watch-common/chat/chat-msg-list/msg-items/_msg-quote-content/pc-msg-quote-content.vue new file mode 100644 index 0000000..14b68f9 --- /dev/null +++ b/src/components/page-watch-common/chat/chat-msg-list/msg-items/_msg-quote-content/pc-msg-quote-content.vue @@ -0,0 +1,78 @@ + + + + + + diff --git a/src/components/page-watch-common/chat/chat-msg-list/msg-items/_msg-quote-content/portrait-msg-quote-content.vue b/src/components/page-watch-common/chat/chat-msg-list/msg-items/_msg-quote-content/portrait-msg-quote-content.vue new file mode 100644 index 0000000..9f48f11 --- /dev/null +++ b/src/components/page-watch-common/chat/chat-msg-list/msg-items/_msg-quote-content/portrait-msg-quote-content.vue @@ -0,0 +1,70 @@ + + + + + + diff --git a/src/components/page-watch-common/chat/chat-msg-list/msg-items/_msg-quote-content/use-msg-quote-content.ts b/src/components/page-watch-common/chat/chat-msg-list/msg-items/_msg-quote-content/use-msg-quote-content.ts new file mode 100644 index 0000000..249ae3e --- /dev/null +++ b/src/components/page-watch-common/chat/chat-msg-list/msg-items/_msg-quote-content/use-msg-quote-content.ts @@ -0,0 +1,25 @@ +import { PropUtils, VueProps } from '@/assets/utils/vue-utils/props-utils'; +import { ChatMsgQuoteType, ChatMsgSource } from '@polyv/live-watch-sdk'; +import { computed } from 'vue'; + +export const msgQuoteContentProps = () => ({ + /** 引用内容 */ + msgQuote: PropUtils.object().isRequired, +}); + +export const useMsgQuoteContent = (options: { props: VueProps }) => { + const { props } = options; + + /** 引用消息的昵称 */ + const quoteNick = computed(() => { + return props.msgQuote.nick; + }); + + /** 引用的消息来源 */ + const quoteMsgSource = computed(() => props.msgQuote.msgSource); + + return { + quoteNick, + quoteMsgSource, + }; +}; diff --git a/src/components/page-watch-common/chat/chat-msg-list/msg-items/_msg-user-actor/msg-user-actor.vue b/src/components/page-watch-common/chat/chat-msg-list/msg-items/_msg-user-actor/msg-user-actor.vue new file mode 100644 index 0000000..7d8ba3d --- /dev/null +++ b/src/components/page-watch-common/chat/chat-msg-list/msg-items/_msg-user-actor/msg-user-actor.vue @@ -0,0 +1,38 @@ + + + + + + diff --git a/src/components/page-watch-common/chat/chat-msg-list/msg-items/_msg-user-actor/use-msg-user-actor.ts b/src/components/page-watch-common/chat/chat-msg-list/msg-items/_msg-user-actor/use-msg-user-actor.ts new file mode 100644 index 0000000..a2086b5 --- /dev/null +++ b/src/components/page-watch-common/chat/chat-msg-list/msg-items/_msg-user-actor/use-msg-user-actor.ts @@ -0,0 +1,41 @@ +import { ChatUserTypes } from '@polyv/live-watch-sdk'; +import { computed, unref } from 'vue'; +import { PropUtils, VueProps } from '@/assets/utils/vue-utils/props-utils'; + +export const msgUserActorProps = () => ({ + actor: PropUtils.string.def(''), + userType: PropUtils.enum().def(ChatUserTypes.Viewer), +}); + +export const useMsgUserActor = (options: { props: VueProps }) => { + const { props } = options; + + /** 头衔的颜色关系 */ + const actorColors = { + [ChatUserTypes.Manager]: '#33BBC5', + [ChatUserTypes.Assistant]: '#598FE5', + [ChatUserTypes.Teacher]: '#F09343', + [ChatUserTypes.Guest]: '#EB6165', + [ChatUserTypes.Dummy]: '#F09343', + }; + + const msgUserType = computed(() => props.userType); + + const msgUserActor = computed(() => props.actor); + + /** 头衔标签的颜色 */ + const actorLabelColor = computed(() => { + const userType = unref(msgUserType); + if (!userType) { + return undefined; + } + + return actorColors[userType as keyof typeof actorColors]; + }); + + return { + msgUserActor, + msgUserType, + actorLabelColor, + }; +}; diff --git a/src/components/page-watch-common/chat/chat-msg-list/msg-items/_msg-user-info/mobile-msg-user-info.vue b/src/components/page-watch-common/chat/chat-msg-list/msg-items/_msg-user-info/mobile-msg-user-info.vue new file mode 100644 index 0000000..4fd449a --- /dev/null +++ b/src/components/page-watch-common/chat/chat-msg-list/msg-items/_msg-user-info/mobile-msg-user-info.vue @@ -0,0 +1,95 @@ + + + + + + diff --git a/src/components/page-watch-common/chat/chat-msg-list/msg-items/_msg-user-info/pc-msg-user-info.vue b/src/components/page-watch-common/chat/chat-msg-list/msg-items/_msg-user-info/pc-msg-user-info.vue new file mode 100644 index 0000000..65d2b2c --- /dev/null +++ b/src/components/page-watch-common/chat/chat-msg-list/msg-items/_msg-user-info/pc-msg-user-info.vue @@ -0,0 +1,116 @@ + + + + + + diff --git a/src/components/page-watch-common/chat/chat-msg-list/msg-items/_msg-user-info/portrait-msg-user-info.vue b/src/components/page-watch-common/chat/chat-msg-list/msg-items/_msg-user-info/portrait-msg-user-info.vue new file mode 100644 index 0000000..ee327f0 --- /dev/null +++ b/src/components/page-watch-common/chat/chat-msg-list/msg-items/_msg-user-info/portrait-msg-user-info.vue @@ -0,0 +1,38 @@ + + + + + + diff --git a/src/components/page-watch-common/chat/chat-msg-list/msg-items/_msg-user-info/use-msg-user-info.ts b/src/components/page-watch-common/chat/chat-msg-list/msg-items/_msg-user-info/use-msg-user-info.ts new file mode 100644 index 0000000..ebc7bc6 --- /dev/null +++ b/src/components/page-watch-common/chat/chat-msg-list/msg-items/_msg-user-info/use-msg-user-info.ts @@ -0,0 +1,9 @@ +import { useChatMsgUserInject } from '../_hooks/chat-msg-user-hook'; + +export const useMsgUserInfo = () => { + const chatMsgUserContext = useChatMsgUserInject(); + + return { + ...chatMsgUserContext, + }; +}; diff --git a/src/components/page-watch-common/chat/chat-msg-list/msg-items/_styles/vars.scss b/src/components/page-watch-common/chat/chat-msg-list/msg-items/_styles/vars.scss new file mode 100644 index 0000000..3a42177 --- /dev/null +++ b/src/components/page-watch-common/chat/chat-msg-list/msg-items/_styles/vars.scss @@ -0,0 +1,14 @@ +// 消息右侧边距(为挂件按钮让路) +$--msg-container-padding-size: 40px; +// 消息水平外边距 +$--margin-horizontal-margin: 16px; +// 消息垂直外边距 +$--margin-vertical-margin: 16px; +// 头像的大小 +$--msg-user-avatar-size: 28px; +// 头像的大小(移动端) +$--msg-user-avatar-size-mobile: 32px; +// 头像的大小距离 +$--msg-user-avatar-padding: $--msg-user-avatar-size + 8px; +// 头像的大小距离(移动端) +$--msg-user-avatar-padding-mobile: $--msg-user-avatar-size-mobile + 8px; diff --git a/src/components/page-watch-common/chat/chat-msg-list/msg-items/customer-msg/mobile-customer-msg.vue b/src/components/page-watch-common/chat/chat-msg-list/msg-items/customer-msg/mobile-customer-msg.vue new file mode 100644 index 0000000..ec02b80 --- /dev/null +++ b/src/components/page-watch-common/chat/chat-msg-list/msg-items/customer-msg/mobile-customer-msg.vue @@ -0,0 +1,20 @@ + + + + + + diff --git a/src/components/page-watch-common/chat/chat-msg-list/msg-items/customer-msg/pc-customer-msg.vue b/src/components/page-watch-common/chat/chat-msg-list/msg-items/customer-msg/pc-customer-msg.vue new file mode 100644 index 0000000..62c3aac --- /dev/null +++ b/src/components/page-watch-common/chat/chat-msg-list/msg-items/customer-msg/pc-customer-msg.vue @@ -0,0 +1,20 @@ + + + + + + diff --git a/src/components/page-watch-common/chat/chat-msg-list/msg-items/customer-msg/portrait-customer-msg.vue b/src/components/page-watch-common/chat/chat-msg-list/msg-items/customer-msg/portrait-customer-msg.vue new file mode 100644 index 0000000..8d794d3 --- /dev/null +++ b/src/components/page-watch-common/chat/chat-msg-list/msg-items/customer-msg/portrait-customer-msg.vue @@ -0,0 +1,16 @@ + + + + diff --git a/src/components/page-watch-common/chat/chat-msg-list/msg-items/customer-msg/use-customer-msg.ts b/src/components/page-watch-common/chat/chat-msg-list/msg-items/customer-msg/use-customer-msg.ts new file mode 100644 index 0000000..93cacbf --- /dev/null +++ b/src/components/page-watch-common/chat/chat-msg-list/msg-items/customer-msg/use-customer-msg.ts @@ -0,0 +1,10 @@ +import { ChatMsgCustomerMessageType } from '@polyv/live-watch-sdk'; +import { useChatMsgDataInject } from '../_hooks/chat-msg-data-hook'; + +export const useCustomerMsg = () => { + const { chatMsg } = useChatMsgDataInject(); + + return { + chatMsg, + }; +}; diff --git a/src/components/page-watch-common/chat/chat-msg-list/msg-items/emotion-msg/mobile-emotion-msg.vue b/src/components/page-watch-common/chat/chat-msg-list/msg-items/emotion-msg/mobile-emotion-msg.vue new file mode 100644 index 0000000..d36bdcb --- /dev/null +++ b/src/components/page-watch-common/chat/chat-msg-list/msg-items/emotion-msg/mobile-emotion-msg.vue @@ -0,0 +1,43 @@ + + + + + + diff --git a/src/components/page-watch-common/chat/chat-msg-list/msg-items/emotion-msg/pc-emotion-msg.vue b/src/components/page-watch-common/chat/chat-msg-list/msg-items/emotion-msg/pc-emotion-msg.vue new file mode 100644 index 0000000..bb09927 --- /dev/null +++ b/src/components/page-watch-common/chat/chat-msg-list/msg-items/emotion-msg/pc-emotion-msg.vue @@ -0,0 +1,43 @@ + + + + + + diff --git a/src/components/page-watch-common/chat/chat-msg-list/msg-items/emotion-msg/portrait-emotion-msg.vue b/src/components/page-watch-common/chat/chat-msg-list/msg-items/emotion-msg/portrait-emotion-msg.vue new file mode 100644 index 0000000..c79154e --- /dev/null +++ b/src/components/page-watch-common/chat/chat-msg-list/msg-items/emotion-msg/portrait-emotion-msg.vue @@ -0,0 +1,43 @@ + + + + + + diff --git a/src/components/page-watch-common/chat/chat-msg-list/msg-items/emotion-msg/use-emotion-msg.ts b/src/components/page-watch-common/chat/chat-msg-list/msg-items/emotion-msg/use-emotion-msg.ts new file mode 100644 index 0000000..a7a0a96 --- /dev/null +++ b/src/components/page-watch-common/chat/chat-msg-list/msg-items/emotion-msg/use-emotion-msg.ts @@ -0,0 +1,31 @@ +import { previewImage } from '@/hooks/components/use-image-preview'; +import { ChatMsgEmotionType } from '@polyv/live-watch-sdk'; +import { computed, ref, unref } from 'vue'; +import { useChatMsgDataInject } from '../_hooks/chat-msg-data-hook'; + +export const useEmotionMsg = () => { + const { chatMsg } = useChatMsgDataInject(); + + /** 表情图片地址 */ + const emotionUrl = computed(() => { + return unref(chatMsg).emotionUrl; + }); + + /** 是否加载完成 */ + const isLoaded = ref(false); + + function onImgLoad() { + isLoaded.value = true; + } + + function onClickEmotion() { + previewImage([unref(emotionUrl)]); + } + + return { + emotionUrl, + isLoaded, + onImgLoad, + onClickEmotion, + }; +}; diff --git a/src/components/page-watch-common/chat/chat-msg-list/msg-items/file-msg/imgs/icon_doc.svg b/src/components/page-watch-common/chat/chat-msg-list/msg-items/file-msg/imgs/icon_doc.svg new file mode 100644 index 0000000..99c4165 --- /dev/null +++ b/src/components/page-watch-common/chat/chat-msg-list/msg-items/file-msg/imgs/icon_doc.svg @@ -0,0 +1,14 @@ + + + 编组备份 + + + + + + w + + + + + \ No newline at end of file diff --git a/src/components/page-watch-common/chat/chat-msg-list/msg-items/file-msg/imgs/icon_pdf.svg b/src/components/page-watch-common/chat/chat-msg-list/msg-items/file-msg/imgs/icon_pdf.svg new file mode 100644 index 0000000..a1ae37a --- /dev/null +++ b/src/components/page-watch-common/chat/chat-msg-list/msg-items/file-msg/imgs/icon_pdf.svg @@ -0,0 +1,14 @@ + + + 编组 19 + + + + + + + + + + + \ No newline at end of file diff --git a/src/components/page-watch-common/chat/chat-msg-list/msg-items/file-msg/imgs/icon_ppt.svg b/src/components/page-watch-common/chat/chat-msg-list/msg-items/file-msg/imgs/icon_ppt.svg new file mode 100644 index 0000000..3185d16 --- /dev/null +++ b/src/components/page-watch-common/chat/chat-msg-list/msg-items/file-msg/imgs/icon_ppt.svg @@ -0,0 +1,15 @@ + + + 编组 2 + + + + + + + + + + + + \ No newline at end of file diff --git a/src/components/page-watch-common/chat/chat-msg-list/msg-items/file-msg/imgs/icon_xls.svg b/src/components/page-watch-common/chat/chat-msg-list/msg-items/file-msg/imgs/icon_xls.svg new file mode 100644 index 0000000..9273a9b --- /dev/null +++ b/src/components/page-watch-common/chat/chat-msg-list/msg-items/file-msg/imgs/icon_xls.svg @@ -0,0 +1,16 @@ + + + icon xls + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/components/page-watch-common/chat/chat-msg-list/msg-items/file-msg/mobile-file-msg.vue b/src/components/page-watch-common/chat/chat-msg-list/msg-items/file-msg/mobile-file-msg.vue new file mode 100644 index 0000000..969235e --- /dev/null +++ b/src/components/page-watch-common/chat/chat-msg-list/msg-items/file-msg/mobile-file-msg.vue @@ -0,0 +1,122 @@ + + + + + + diff --git a/src/components/page-watch-common/chat/chat-msg-list/msg-items/file-msg/pc-file-msg.vue b/src/components/page-watch-common/chat/chat-msg-list/msg-items/file-msg/pc-file-msg.vue new file mode 100644 index 0000000..c53fa31 --- /dev/null +++ b/src/components/page-watch-common/chat/chat-msg-list/msg-items/file-msg/pc-file-msg.vue @@ -0,0 +1,125 @@ + + + + + + diff --git a/src/components/page-watch-common/chat/chat-msg-list/msg-items/file-msg/portrait-file-msg.vue b/src/components/page-watch-common/chat/chat-msg-list/msg-items/file-msg/portrait-file-msg.vue new file mode 100644 index 0000000..6340823 --- /dev/null +++ b/src/components/page-watch-common/chat/chat-msg-list/msg-items/file-msg/portrait-file-msg.vue @@ -0,0 +1,100 @@ + + + + + + diff --git a/src/components/page-watch-common/chat/chat-msg-list/msg-items/file-msg/use-file-msg.ts b/src/components/page-watch-common/chat/chat-msg-list/msg-items/file-msg/use-file-msg.ts new file mode 100644 index 0000000..47ad421 --- /dev/null +++ b/src/components/page-watch-common/chat/chat-msg-list/msg-items/file-msg/use-file-msg.ts @@ -0,0 +1,102 @@ +import { translate } from '@/assets/lang'; +import { isIframe } from '@/assets/utils/browser'; +import { copyText } from '@/assets/utils/copy'; +import { downloadFile, getFileSuffix } from '@/assets/utils/file'; +import { toast } from '@/hooks/components/use-toast'; +import { useWatchAppStore } from '@/store/use-watch-app-store'; +import { ChatMsgFileType } from '@polyv/live-watch-sdk'; +import { computed, nextTick, onMounted, ref, unref } from 'vue'; +import { useChatMsgDataInject } from '../_hooks/chat-msg-data-hook'; + +export const useFileMsg = () => { + const { chatMsg } = useChatMsgDataInject(); + const watchAppStore = useWatchAppStore(); + + /** 文件地址 */ + const fileUrl = computed(() => { + return unref(chatMsg).fileUrl; + }); + + /** 文件名 */ + const fileName = computed(() => { + return unref(chatMsg).fileName; + }); + + /** 文件扩展名 */ + const fileSuffix = computed(() => { + const name = unref(fileName); + return getFileSuffix(name); + }); + + /** 下载文件 */ + function toDownloadFile() { + // 微信小程序 webview 下改为复制下载地址 + if (watchAppStore.isWxMiniProgram) { + copyFileUrl(); + return; + } + + if (isIframe) { + const msg = { + name: 'file', + path: unref(fileUrl), + }; + + window.parent.postMessage(msg, '*'); + return; + } + + const url = unref(fileUrl); + const name = unref(fileName); + + downloadFile(url, name); + } + + /** 复制下载地址 */ + async function copyFileUrl() { + await copyText(unref(fileUrl)); + toast.success(translate('copy.linkSuccess')); + } + + return { + chatMsg, + fileName, + fileSuffix, + toDownloadFile, + copyFileUrl, + }; +}; + +/** + * 文件名截断 hook + */ +export const useFileNameBlock = () => { + const textWrapRef = ref(); + const textContentRef = ref(); + + /** 是否需要截断 */ + const needBlock = ref(false); + + async function checkNeedBlock() { + await nextTick(); + const wrapElem = unref(textWrapRef); + const contentElem = unref(textContentRef); + + if (!wrapElem || !contentElem) { + return; + } + + needBlock.value = contentElem.clientHeight > wrapElem.clientHeight; + } + + onMounted(() => { + checkNeedBlock(); + }); + + return { + textWrapRef, + textContentRef, + needBlock, + checkNeedBlock, + }; +}; diff --git a/src/components/page-watch-common/chat/chat-msg-list/msg-items/image-msg/mobile-image-msg.vue b/src/components/page-watch-common/chat/chat-msg-list/msg-items/image-msg/mobile-image-msg.vue new file mode 100644 index 0000000..0c0180e --- /dev/null +++ b/src/components/page-watch-common/chat/chat-msg-list/msg-items/image-msg/mobile-image-msg.vue @@ -0,0 +1,78 @@ + + + + + + diff --git a/src/components/page-watch-common/chat/chat-msg-list/msg-items/image-msg/pc-image-msg.vue b/src/components/page-watch-common/chat/chat-msg-list/msg-items/image-msg/pc-image-msg.vue new file mode 100644 index 0000000..e83ffd4 --- /dev/null +++ b/src/components/page-watch-common/chat/chat-msg-list/msg-items/image-msg/pc-image-msg.vue @@ -0,0 +1,81 @@ + + + + + + diff --git a/src/components/page-watch-common/chat/chat-msg-list/msg-items/image-msg/portrait-image-msg.vue b/src/components/page-watch-common/chat/chat-msg-list/msg-items/image-msg/portrait-image-msg.vue new file mode 100644 index 0000000..9a6c494 --- /dev/null +++ b/src/components/page-watch-common/chat/chat-msg-list/msg-items/image-msg/portrait-image-msg.vue @@ -0,0 +1,74 @@ + + + + + + diff --git a/src/components/page-watch-common/chat/chat-msg-list/msg-items/image-msg/use-image-msg.ts b/src/components/page-watch-common/chat/chat-msg-list/msg-items/image-msg/use-image-msg.ts new file mode 100644 index 0000000..b440534 --- /dev/null +++ b/src/components/page-watch-common/chat/chat-msg-list/msg-items/image-msg/use-image-msg.ts @@ -0,0 +1,170 @@ +import { isMobile } from '@/assets/utils/browser'; +import { resetImageProtocol } from '@/assets/utils/image'; +import { previewImage } from '@/hooks/components/use-image-preview'; +import { ChatMsgImageType } from '@polyv/live-watch-sdk'; +import { computed, nextTick, ref, unref } from 'vue'; +import { CSSProperties } from 'vue/types/jsx'; +import { useChatMsgComputedInject } from '../_hooks/chat-msg-computed-hook'; +import { useChatMsgDataInject } from '../_hooks/chat-msg-data-hook'; + +export interface ImageSizeType { + width: number; + height: number; +} + +const recordImageSize: UniversalParams = {}; + +// 图片最小显示宽度 +const minPicWidth = isMobile ? 48 : 44; +// 图片最小高度 +const minPicHeight = isMobile ? 48 : 25; +// 图片最大显示宽度 +const maxPicWidth = isMobile ? 250 : 258; +// 图片最大显示高度 +const maxPicHeight = isMobile ? 140 : 144; +// 纵向超长图比例(高/宽) +const portraitLongPicRatio = 2.25; +// 横向超长图比例(高/宽) +const landscapeLongPicRatio = 0.14; + +export const useImageMsg = () => { + const { chatMsg } = useChatMsgDataInject(); + const { containerRef, getVirtualList } = useChatMsgComputedInject(); + + const imageRef = ref(); + + /** 图片地址 */ + const imageUrl = computed(() => { + return resetImageProtocol(unref(chatMsg).imageUrl); + }); + + /** 图片宽高 */ + const imageSize = ref( + recordImageSize[imageUrl.value] ?? chatMsg.value.size, + ); + + /** 图片高宽比 */ + const imageRatio = computed(() => { + if (!imageSize.value) { + return 72 / 128; + } + return imageSize.value.height / imageSize.value.width; + }); + + /** 图片外层样式 */ + const wrapStyle = ref>({}); + /** 图片样式 */ + const imageStyle = ref>({}); + + /** 是否加载完成 */ + const isLoaded = ref(false); + + /** 计算样式 */ + // eslint-disable-next-line sonarjs/cognitive-complexity + function computedStyle() { + if (!imageSize.value) { + return; + } + const { width: imageWidth, height: imageHeight } = imageSize.value; + const ratio = imageHeight / imageWidth; + + const _wrapStyle: CSSProperties = {}; + const _imageStyle: CSSProperties = {}; + + if (ratio > 1) { + // 纵向图片 + if (ratio > portraitLongPicRatio) { + // 图片纵向超长 + if (imageHeight >= minPicHeight && imageHeight <= maxPicHeight) { + _imageStyle.height = `${imageHeight}px`; + } + + if (imageWidth >= minPicWidth && imageWidth <= maxPicWidth) { + _imageStyle.width = `${imageWidth}px`; + } + } + _imageStyle.maxWidth = `${maxPicWidth}px`; + _imageStyle.maxHeight = `${maxPicHeight}px`; + } else { + // 横向图片 + if (ratio < landscapeLongPicRatio) { + // 图片横向超长 + if (imageHeight >= minPicHeight && imageHeight <= maxPicHeight) { + _imageStyle.height = `${imageHeight}px`; + } + + if (imageWidth >= minPicWidth && imageWidth <= maxPicWidth) { + _imageStyle.width = `${imageWidth}px`; + } + + _imageStyle.maxWidth = `${maxPicWidth}px`; + _imageStyle.maxHeight = `${maxPicHeight}px`; + } else { + _imageStyle.maxWidth = '100%'; + _imageStyle.maxHeight = `${maxPicHeight}px`; + } + } + + _wrapStyle.maxWidth = `${maxPicWidth}px`; + _wrapStyle.maxHeight = `${maxPicHeight}px`; + _imageStyle.minWidth = `${minPicWidth}px`; + _imageStyle.minHeight = `${minPicHeight}px`; + + wrapStyle.value = _wrapStyle as UniversalParams; + imageStyle.value = _imageStyle as UniversalParams; + } + computedStyle(); + + /** 处理图片加载完成 */ + async function onImageLoad() { + const imageElem = unref(imageRef); + if (!imageElem) return; + + imageSize.value = { + width: imageElem.width, + height: imageElem.height, + }; + + recordImageSize[unref(imageUrl)] = imageSize.value; + + computedStyle(); + + isLoaded.value = true; + + /** 容器节点 */ + const container = unref(containerRef); + if (container) { + // 是否在底部 + const isBottom = container.scrollTop + container.clientHeight >= container.scrollHeight; + + await nextTick(); + + // 如果在设置图片显示之前滚动容器在最底部,则显示之后手动置底 + const virtualList = getVirtualList(); + if (isBottom && virtualList) { + virtualList.scrollToFoot(); + } + } + } + + function onClickImage() { + previewImage([unref(imageUrl)]); + } + + return { + chatMsg, + minPicWidth, + minPicHeight, + maxPicWidth, + maxPicHeight, + wrapStyle, + imageStyle, + imageRef, + imageSize, + imageUrl, + isLoaded, + imageRatio, + onImageLoad, + onClickImage, + }; +}; diff --git a/src/components/page-watch-common/chat/chat-msg-list/msg-items/mobile-chat-msg-item.vue b/src/components/page-watch-common/chat/chat-msg-list/msg-items/mobile-chat-msg-item.vue new file mode 100644 index 0000000..9341b25 --- /dev/null +++ b/src/components/page-watch-common/chat/chat-msg-list/msg-items/mobile-chat-msg-item.vue @@ -0,0 +1,67 @@ + + + + + + diff --git a/src/components/page-watch-common/chat/chat-msg-list/msg-items/pc-chat-msg-item.vue b/src/components/page-watch-common/chat/chat-msg-list/msg-items/pc-chat-msg-item.vue new file mode 100644 index 0000000..b9fcdfb --- /dev/null +++ b/src/components/page-watch-common/chat/chat-msg-list/msg-items/pc-chat-msg-item.vue @@ -0,0 +1,65 @@ + + + + + + diff --git a/src/components/page-watch-common/chat/chat-msg-list/msg-items/portrait-chat-msg-item.vue b/src/components/page-watch-common/chat/chat-msg-list/msg-items/portrait-chat-msg-item.vue new file mode 100644 index 0000000..3052523 --- /dev/null +++ b/src/components/page-watch-common/chat/chat-msg-list/msg-items/portrait-chat-msg-item.vue @@ -0,0 +1,56 @@ + + + + + + diff --git a/src/components/page-watch-common/chat/chat-msg-list/msg-items/redpaper-msg/imgs/icon_redpack.png b/src/components/page-watch-common/chat/chat-msg-list/msg-items/redpaper-msg/imgs/icon_redpack.png new file mode 100644 index 0000000000000000000000000000000000000000..98329d10802597ce5bdc9db1729f988f2233a972 GIT binary patch literal 2753 zcmV;y3O@CTP)PxWwr5|>w zm#zN400y%#W)}Qu_kAj$K19D#X7^W7y=p5ipUAI|0aQm%)&14KkDf1%eSVFJ&SoJT@{^8RgKM_#=e#n~dAMxpfcio48A3@EE@v$*J z1&jp@0YZQufq4{wYAoIQ(S9a?^APVLE(6jGqQeqEB)r%$6sPxB|MmK#a_EpXM~>)| zKJ@z-;L6v$0Fh9Vb?a?U*{S+Yn3$3D$mD*f zx7Z6nMuGIvscuI@&t-t5g;{eTRW4H%9av31R$*xmiQ~cX&e-YwGe>b!02*n3LB)#$ z?yH7d_U~^7TdE-tu}LG!Ra5h_syI?FRWk~Z0FtSS21b>12I6$?c}VJt`KLqoJwvJi zOFtr?3|rmm*~ZLEXssWx(P-K&wa_48Bz;n!HV6thRY<{fL=40XNjywy^Z6Ns9e^R-1d<9&P=SnB3gGhz zu$;hT3?Wril~gzZGFQNoWyC4DEN=Dda~o4|a^Ee@U{fuGA2K*4RW4UXy)_faas+I< z47h0*`0C5SR@F(s{UPX$1=y!f!MxK2$_7R~K39?nk>B`VS1`n|IML>`OZTvT~_tos{`RD zcyV!&y!Tk>jy&1)Cr*XZSz;I_l!JUl(C|_I`43^Po<@4|G_2i%Qh5xL4!~&-5_ce_ z8eEx>M(@JBy@=B9UdiJpVh8CZpz%7J9n&P&Y;7eIXl!}tA8Q31#lbxY$L~1UtnLg$ zw0rE|IYIvH0;Dql?b(Ie>^(@^^N^lFb!-a5w;o4%+imcPL+{0ZVrX^NkGrsdy@8#Bx6oP+Iy+d{uM-?ZVCVQ~FdxU~Iq zWNZNc)-ljmccXkq1JTL{@wNmRepK)G=v z2FKn+m979JL2~+O^o~A(r0r1Oc?0S@rt{=MzHlqz#pgh;E(1>-gFkr=yqLleF)9I> z7%dl@#?0J00i(P3gejJr1}@|@W*H0!!xVnbqx^#d82{;y5TAS(HZ~yfNY1^E?sHAJ z&Jbg}zJ|(l02-SDZ@&Ra`*q+?FF~F-0Zi6lB+zx6Im*bS(sHiUn3-E%pMudn`$9*Z zrZrh;T*Ms5#8C?08NkfUVAI31a7iE8nKKA9mCCy4zVbYLzmM@RZ3jnf1iQYC#Ps1i zXFJjXPaNqomcU184#_iDqH_2U%+RZM70#3t&IBq?N&f+Lp$a>7u@;odM$p)gj5fPlV(p)#mmM-WtU zI34*Kt{;}TJe$ed9pb(MW*bw`OrROmY-q~FX3(R&rWiV~E?21sYaW;tg;D-;&7c)9 zD8U#Ds|6Lbz$!`t&1CfBe3F7ICC=VoCho_d4bav~p{baG@~L z98vO0F0Z0XvUHzja9;+T4U4e zQeJ>-FF*lDiiub6ER@o;UJD{TH&~WOS~@s?tg=tf~dY{8KY3oDNk|N4_tkVk!HuiKjQSYt0jPhAmgx z2;e=slK7_GR1NK>aW+d`(()KuX6B~VIj7#K!B<^W&AAFJhbhZ_?uHfw09C4@La@7qa3++4ih1RA`DhFXOvz5^qlAQ15>g6pD?IK)& z8r2yqfO=juHh!S2255F_<`iAQl`B+u=>@P6)Q8U(;6*jKG8Y|q?mW2DcPyqN zf@h|8?{1i*N7vRo%1hrvu;vK-;+H>vAB;R=U^u>1)uMgn{Pwod0!0j#>-CEIT+7p%0x=67s8OhWfUFlDs&b^&H&))8ZV zUvA#jCsyDKV1;Fkkxtkc(G2minSOu$4a|>19^bK}TIqDQqACW_#hSJ2IG-3vrZ+F_ zJaJ; + + + diff --git a/src/components/page-watch-common/chat/chat-msg-list/msg-items/redpaper-msg/pc-redpaper-msg.vue b/src/components/page-watch-common/chat/chat-msg-list/msg-items/redpaper-msg/pc-redpaper-msg.vue new file mode 100644 index 0000000..8cc266c --- /dev/null +++ b/src/components/page-watch-common/chat/chat-msg-list/msg-items/redpaper-msg/pc-redpaper-msg.vue @@ -0,0 +1,53 @@ + + + + + + diff --git a/src/components/page-watch-common/chat/chat-msg-list/msg-items/redpaper-msg/portrait-redpaper-msg.vue b/src/components/page-watch-common/chat/chat-msg-list/msg-items/redpaper-msg/portrait-redpaper-msg.vue new file mode 100644 index 0000000..54ae946 --- /dev/null +++ b/src/components/page-watch-common/chat/chat-msg-list/msg-items/redpaper-msg/portrait-redpaper-msg.vue @@ -0,0 +1,47 @@ + + + + + + diff --git a/src/components/page-watch-common/chat/chat-msg-list/msg-items/redpaper-msg/use-redpaper-msg.ts b/src/components/page-watch-common/chat/chat-msg-list/msg-items/redpaper-msg/use-redpaper-msg.ts new file mode 100644 index 0000000..e009252 --- /dev/null +++ b/src/components/page-watch-common/chat/chat-msg-list/msg-items/redpaper-msg/use-redpaper-msg.ts @@ -0,0 +1,87 @@ +/* eslint-disable sonarjs/no-duplicate-string */ +import { computed, onBeforeUnmount, onMounted, ref, unref } from 'vue'; +import { eventBus, appEvents } from '@/app/app-events'; +import { getWatchCore } from '@/core/watch-sdk'; + +import { translate } from '@/assets/lang'; +import { ChatMsgRedpaperType, RedpackType } from '@polyv/live-watch-sdk'; +import { RedpackStatusData } from '@/components/page-watch-common/interactive-receive/redpack-rain/types/redpack-rain-types'; + +import { useChatMsgDataInject } from '../_hooks/chat-msg-data-hook'; + +interface RedpaperEntranceInstance { + /** 更新红包状态 */ + updateStatus(status: string): void; +} + +/** + * @hook 互动-红包-聊天室红包消息 + */ +export const useRedpaperMsg = () => { + const { chatMsg } = useChatMsgDataInject(); + + const watchCore = getWatchCore(); + + /** 红包 SDK 实例 */ + const redpackSdk = watchCore.interactReceive.getRedpack(); + + /** 红包入口实例 */ + const entranceRef = ref(); + + /** 发送者的昵称 */ + const sendNick = computed(() => { + return chatMsg.value.user?.nick; + }); + + /** 红包文案 */ + const redpackText = computed(() => { + const type = chatMsg.value.type || RedpackType.Normal; + const redpackTexts: Record = { + [RedpackType.Normal]: translate('redpack.type.normal'), + [RedpackType.OfficialNormal]: translate('redpack.type.normal'), + [RedpackType.Password]: translate('redpack.type.password'), + [RedpackType.Rain]: translate('redpack.type.rain'), + [RedpackType.ScoreOfficialNormal]: translate('redpack.type.normal'), + [RedpackType.ScorePassword]: translate('redpack.type.password'), + [RedpackType.ScoreRain]: translate('redpack.type.rain'), + [RedpackType.AlipayPasswordOfficialNormal]: translate('redpack.type.alipayPassword'), + }; + + return redpackTexts[type] || translate('redpack.type.normal'); + }); + + /** 更新入口状态 */ + function updateEntranceStatus(data: RedpackStatusData) { + const { redpackId, state } = data; + if (redpackId !== unref(chatMsg).redpackId) { + return; + } + + const instance = unref(entranceRef); + if (instance && instance.updateStatus) { + instance.updateStatus(state); + } + } + + /** 打开红包弹层 */ + function openRedpackDialog() { + eventBus.$emit(appEvents.interaction.OpenRedpack, unref(chatMsg)); + } + + onMounted(() => { + eventBus.$on(appEvents.interaction.SetRedpackStatus, updateEntranceStatus); + }); + + onBeforeUnmount(() => { + eventBus.$off(appEvents.interaction.SetRedpackStatus, updateEntranceStatus); + }); + + return { + chatMsg, + entranceRef, + redpackSdk, + sendNick, + redpackText, + openRedpackDialog, + }; +}; diff --git a/src/components/page-watch-common/chat/chat-msg-list/msg-items/redpaper-receive-msg/imgs/redpaper-msg-ico.png b/src/components/page-watch-common/chat/chat-msg-list/msg-items/redpaper-receive-msg/imgs/redpaper-msg-ico.png new file mode 100644 index 0000000000000000000000000000000000000000..623989bf9f6f430bd25bfe5011d3e1b52f84e641 GIT binary patch literal 790 zcmV+x1L^#UP)%ywKJcmAO^fVyuq>NXRb^R5 zARI>P*jT2dgU!v9Ap{Pq6%LyXR-TJheAQX^@)j0;ERq9{gi5xR}%?DB?&6sIJgBBWjNX1 z0F&R3V-H60z3UcKvw-9GhOyk?#=6UeFOOa$H1F5va|{D3&m-SxgpuQP+qKP-rhuuX zX}yzB6vSm2#a)dsItz4{^WiwavQR7*Fk&2m);8Uq{24-UWD+KhgMneN`4ZU{`0u8e zds+aN0Ur#)IyZ;>skfjki}1xuh*nlXw%Y+&Mf~ow{~oxV0q?YEI>ETK1k1uFSU=1I zghA{~IU;8(k#sr%MMZolM?m3bJxFmLgvCYJX5T~j>WB745nU&+R$GVl(o)csRfywn za#JC9x&(&iYOs+A_;3hCUau}`u&D`BVIdT=1xfD= + + + + + diff --git a/src/components/page-watch-common/chat/chat-msg-list/msg-items/redpaper-receive-msg/pc-redpaper-receive-msg.vue b/src/components/page-watch-common/chat/chat-msg-list/msg-items/redpaper-receive-msg/pc-redpaper-receive-msg.vue new file mode 100644 index 0000000..9e04f8a --- /dev/null +++ b/src/components/page-watch-common/chat/chat-msg-list/msg-items/redpaper-receive-msg/pc-redpaper-receive-msg.vue @@ -0,0 +1,60 @@ + + + + + + diff --git a/src/components/page-watch-common/chat/chat-msg-list/msg-items/redpaper-receive-msg/portrait-redpaper-receive-msg.vue b/src/components/page-watch-common/chat/chat-msg-list/msg-items/redpaper-receive-msg/portrait-redpaper-receive-msg.vue new file mode 100644 index 0000000..caa289f --- /dev/null +++ b/src/components/page-watch-common/chat/chat-msg-list/msg-items/redpaper-receive-msg/portrait-redpaper-receive-msg.vue @@ -0,0 +1,56 @@ + + + + + + diff --git a/src/components/page-watch-common/chat/chat-msg-list/msg-items/redpaper-receive-msg/use-redpaper-receive-msg.ts b/src/components/page-watch-common/chat/chat-msg-list/msg-items/redpaper-receive-msg/use-redpaper-receive-msg.ts new file mode 100644 index 0000000..e73c39c --- /dev/null +++ b/src/components/page-watch-common/chat/chat-msg-list/msg-items/redpaper-receive-msg/use-redpaper-receive-msg.ts @@ -0,0 +1,34 @@ +import { ChatMsgRedpaperReceiveType } from '@polyv/live-watch-sdk'; +import { computed, unref } from 'vue'; +import { useChatMsgDataInject } from '../_hooks/chat-msg-data-hook'; + +export const useRedpaperReceiveMsg = () => { + const { chatMsg } = useChatMsgDataInject(); + + /** 领取人昵称 */ + const receiveNick = computed(() => { + return unref(chatMsg).nick; + }); + + /** 是否红包雨 */ + const isRedpaperRain = computed(() => { + return unref(chatMsg).type.includes('rain'); + }); + + /** 是否口令红包 */ + const isRedpaperPassword = computed(() => { + return unref(chatMsg).type.includes('password'); + }); + + /** 是否领取完 */ + const isOver = computed(() => { + return unref(chatMsg).isOver; + }); + + return { + receiveNick, + isRedpaperRain, + isRedpaperPassword, + isOver, + }; +}; diff --git a/src/components/page-watch-common/chat/chat-msg-list/msg-items/reward-msg/imgs/icon-redpaper.png b/src/components/page-watch-common/chat/chat-msg-list/msg-items/reward-msg/imgs/icon-redpaper.png new file mode 100644 index 0000000000000000000000000000000000000000..08a05c1be55f9333f3028b8d2949f20c64fa6708 GIT binary patch literal 8546 zcmV-oA)VfdP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00006 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 literal 0 HcmV?d00001 diff --git a/src/components/page-watch-common/chat/chat-msg-list/msg-items/reward-msg/mobile-reward-msg.vue b/src/components/page-watch-common/chat/chat-msg-list/msg-items/reward-msg/mobile-reward-msg.vue new file mode 100644 index 0000000..586fb47 --- /dev/null +++ b/src/components/page-watch-common/chat/chat-msg-list/msg-items/reward-msg/mobile-reward-msg.vue @@ -0,0 +1,71 @@ + + + + + + diff --git a/src/components/page-watch-common/chat/chat-msg-list/msg-items/reward-msg/pc-reward-msg.vue b/src/components/page-watch-common/chat/chat-msg-list/msg-items/reward-msg/pc-reward-msg.vue new file mode 100644 index 0000000..393d8aa --- /dev/null +++ b/src/components/page-watch-common/chat/chat-msg-list/msg-items/reward-msg/pc-reward-msg.vue @@ -0,0 +1,72 @@ + + + + + + diff --git a/src/components/page-watch-common/chat/chat-msg-list/msg-items/reward-msg/portrait-reward-msg.vue b/src/components/page-watch-common/chat/chat-msg-list/msg-items/reward-msg/portrait-reward-msg.vue new file mode 100644 index 0000000..0c50eb4 --- /dev/null +++ b/src/components/page-watch-common/chat/chat-msg-list/msg-items/reward-msg/portrait-reward-msg.vue @@ -0,0 +1,32 @@ + + + + + + diff --git a/src/components/page-watch-common/chat/chat-msg-list/msg-items/speak-msg/mobile-speak-msg.vue b/src/components/page-watch-common/chat/chat-msg-list/msg-items/speak-msg/mobile-speak-msg.vue new file mode 100644 index 0000000..75f05a3 --- /dev/null +++ b/src/components/page-watch-common/chat/chat-msg-list/msg-items/speak-msg/mobile-speak-msg.vue @@ -0,0 +1,199 @@ + + + + + + diff --git a/src/components/page-watch-common/chat/chat-msg-list/msg-items/speak-msg/pc-speak-msg.vue b/src/components/page-watch-common/chat/chat-msg-list/msg-items/speak-msg/pc-speak-msg.vue new file mode 100644 index 0000000..8f9356d --- /dev/null +++ b/src/components/page-watch-common/chat/chat-msg-list/msg-items/speak-msg/pc-speak-msg.vue @@ -0,0 +1,182 @@ + + + + + + diff --git a/src/components/page-watch-common/chat/chat-msg-list/msg-items/speak-msg/portrait-speak-msg.vue b/src/components/page-watch-common/chat/chat-msg-list/msg-items/speak-msg/portrait-speak-msg.vue new file mode 100644 index 0000000..bd899cc --- /dev/null +++ b/src/components/page-watch-common/chat/chat-msg-list/msg-items/speak-msg/portrait-speak-msg.vue @@ -0,0 +1,132 @@ + + + + + + diff --git a/src/components/page-watch-common/chat/chat-msg-list/msg-items/speak-msg/use-speak-msg.ts b/src/components/page-watch-common/chat/chat-msg-list/msg-items/speak-msg/use-speak-msg.ts new file mode 100644 index 0000000..c5df62b --- /dev/null +++ b/src/components/page-watch-common/chat/chat-msg-list/msg-items/speak-msg/use-speak-msg.ts @@ -0,0 +1,234 @@ +import { ChatMsgSpeakType, YN } from '@polyv/live-watch-sdk'; +import { computed, ref, unref } from 'vue'; +import { useChatMsgDataInject } from '../_hooks/chat-msg-data-hook'; +import { parseEmotions, removeEmotions } from '@polyv/emotion-sdk'; +import { getWatchCore } from '@/core/watch-sdk'; +import { copyText } from '@/assets/utils/copy'; +import { toast } from '@/hooks/components/use-toast'; +import { translate } from '@/assets/lang'; +import { appEvents, eventBus } from '@/app/app-events'; +import { FullMsgData } from '../../../chat-full-message/type'; +import { useChatMsgUserBasic } from '../_hooks/chat-msg-user-hook'; +import { isString, parseLinkContent } from '@/assets/utils/string'; +import { useChannelStore } from '@/store/use-channel-store'; +import { ynToBool } from '@utils-ts/boolean'; +import { useLayoutStore } from '@/store/use-layout-store'; +import { TAB_NAME_ASK } from '@/assets/constants/tab-name'; +import { useWatchAppStore } from '@/store/use-watch-app-store'; + +/** + * 转换发言消息的内容 + * @param options + */ +export function parseSpeakContent(options: { + /** 消息内容 */ + content: string; + /** 是否转换链接,默认:true */ + parseLink?: boolean; + /** 是否转换表情,默认:true */ + parseEmotion?: boolean; +}) { + const { content, parseLink = true, parseEmotion } = options; + let newContent = content; + + // 转换链接 + if (parseLink) { + newContent = parseLinkContent(newContent); + } + + // 转换表情 + if (parseEmotion) { + newContent = parseEmotions(newContent); + } + + return newContent; +} + +/** 转换引用的 speak 内容 */ +export function parseQuoteSpeakContent(content: string) { + return parseSpeakContent({ + content, + parseLink: false, + parseEmotion: true, + }); +} + +/** + * 发言消息内容 hook + * @param chatMsgRef speak 聊天消息响应式 + */ +export const useSpeakMsgContent = (chatMsgRef: ResponsiveRef) => { + const { isSpecialUser } = useChatMsgUserBasic(chatMsgRef); + + /** 原始的发言内容 */ + const speakContent = computed(() => { + return unref(chatMsgRef).content; + }); + + /** 用于渲染的发言 html 内容 */ + const speakHtmlContent = computed(() => { + const content = unref(chatMsgRef).content; + + return parseSpeakContent({ + content, + parseLink: unref(isSpecialUser), + parseEmotion: true, + }); + }); + + /** 去除掉表情的发言内容 */ + const cleanSpeakContent = computed(() => { + const contentVal = unref(speakContent); + if (contentVal.indexOf('<') < 0) { + return contentVal; + } + return contentVal.replace(/]*>/gi, ''); + }); + + return { + speakContent, + speakHtmlContent, + cleanSpeakContent, + }; +}; + +/** + * 发言消息翻译 hook + * @param chatMsgRef + */ +export const useSpeakMsgTranslate = (chatMsgRef: ResponsiveRef) => { + const channelStore = useChannelStore(); + const layoutStore = useLayoutStore(); + const { isSelfMsg } = useChatMsgUserBasic(chatMsgRef); + + /** 用于翻译的内容 */ + const translateOriginContent = computed(() => { + let content = unref(chatMsgRef).content; + + // 移除 emotion 表情 + content = removeEmotions(content); + + return content; + }); + + /** 能否进行翻译 */ + const canTranslate = computed(() => { + // 翻译开关 + if (!ynToBool(channelStore.channelDetail?.channelConfig.chatTranslateEnabled, YN.N)) { + return false; + } + + // 自己发言不需要翻译 + if (unref(isSelfMsg)) { + return false; + } + + // 长文不需要翻译 + if (unref(chatMsgRef).isOverLength) { + return false; + } + + // 当前处于提问不需要翻译 + if ( + layoutStore.mobileMenuCurrentName === TAB_NAME_ASK || + layoutStore.pcAsideTabCurrentName === TAB_NAME_ASK + ) { + return false; + } + + const content = unref(translateOriginContent); + return /[\u4E00-\u9FA5]|[\uFE30-\uFFA0]/gi.test(content) || content.search(/[a-zA-Z]+/) >= 0; + }); + + /** 翻译后的内容 */ + const translatedContent = ref(); + + /** 是否翻译中 */ + const isTranslating = ref(false); + + /** 翻译当前消息 */ + async function translateCurrentMsg() { + // 防止重复请求 + if (isTranslating.value) { + return; + } + + // 已翻译过,不再翻译 + if (isString(translatedContent.value)) { + return; + } + + const watchCore = getWatchCore(); + + const content = unref(translateOriginContent); + + isTranslating.value = true; + try { + const result = await watchCore.utils.translateText(content); + translatedContent.value = result; + isTranslating.value = false; + } catch (e) { + isTranslating.value = false; + } + } + + return { + translatedContent, + canTranslate, + isTranslating, + translateCurrentMsg, + }; +}; + +export const useSpeakMsg = () => { + const watchAppStore = useWatchAppStore(); + const { chatMsg, msgQuote } = useChatMsgDataInject(); + + const { speakContent, speakHtmlContent } = useSpeakMsgContent(chatMsg); + + /** + * 获取完整的消息内容 + */ + async function getFullSpeakContent() { + if (!unref(chatMsg).isOverLength || watchAppStore.isWatchBackUrl) { + return unref(chatMsg).content; + } + const id = unref(chatMsg).id; + const watchCore = getWatchCore(); + + return watchCore.chat.getFullMessage(id); + } + + /** 复制当前消息 */ + async function copyMsg() { + let copyContent = unref(chatMsg).content; + + // 长文消息 + if (unref(chatMsg).isOverLength) { + copyContent = await getFullSpeakContent(); + } + + await copyText(copyContent); + toast.success(translate('copy.success')); + } + + /** 显示完整的消息 */ + async function showCompleteMsg() { + const fullContent = await getFullSpeakContent(); + const data: FullMsgData = { + fullContent, + chatMsg: chatMsg.value, + }; + eventBus.$emit(appEvents.chat.ShowFullMessage, data); + } + + return { + chatMsg, + msgQuote, + speakContent, + speakHtmlContent, + getFullSpeakContent, + copyMsg, + showCompleteMsg, + }; +}; diff --git a/src/components/page-watch-common/chat/chat-msg-list/msg-items/system-msg/mobile-system-msg.vue b/src/components/page-watch-common/chat/chat-msg-list/msg-items/system-msg/mobile-system-msg.vue new file mode 100644 index 0000000..b938224 --- /dev/null +++ b/src/components/page-watch-common/chat/chat-msg-list/msg-items/system-msg/mobile-system-msg.vue @@ -0,0 +1,20 @@ + + + + + + diff --git a/src/components/page-watch-common/chat/chat-msg-list/msg-items/system-msg/pc-system-msg.vue b/src/components/page-watch-common/chat/chat-msg-list/msg-items/system-msg/pc-system-msg.vue new file mode 100644 index 0000000..90d6296 --- /dev/null +++ b/src/components/page-watch-common/chat/chat-msg-list/msg-items/system-msg/pc-system-msg.vue @@ -0,0 +1,20 @@ + + + + + + diff --git a/src/components/page-watch-common/chat/chat-msg-list/msg-items/system-msg/portrait-system-msg.vue b/src/components/page-watch-common/chat/chat-msg-list/msg-items/system-msg/portrait-system-msg.vue new file mode 100644 index 0000000..52c0a40 --- /dev/null +++ b/src/components/page-watch-common/chat/chat-msg-list/msg-items/system-msg/portrait-system-msg.vue @@ -0,0 +1,16 @@ + + + + diff --git a/src/components/page-watch-common/chat/chat-msg-list/msg-items/system-msg/use-system-msg.ts b/src/components/page-watch-common/chat/chat-msg-list/msg-items/system-msg/use-system-msg.ts new file mode 100644 index 0000000..8bf70bd --- /dev/null +++ b/src/components/page-watch-common/chat/chat-msg-list/msg-items/system-msg/use-system-msg.ts @@ -0,0 +1,10 @@ +import { ChatMsgSystemType } from '@polyv/live-watch-sdk'; +import { useChatMsgDataInject } from '../_hooks/chat-msg-data-hook'; + +export const useSystemMsg = () => { + const { chatMsg } = useChatMsgDataInject(); + + return { + chatMsg, + }; +}; diff --git a/src/components/page-watch-common/chat/chat-msg-list/msg-items/use-chat-msg-item.ts b/src/components/page-watch-common/chat/chat-msg-list/msg-items/use-chat-msg-item.ts new file mode 100644 index 0000000..a62d045 --- /dev/null +++ b/src/components/page-watch-common/chat/chat-msg-list/msg-items/use-chat-msg-item.ts @@ -0,0 +1,105 @@ +import { PropUtils, VueProps } from '@/assets/utils/vue-utils/props-utils'; +import { useChatMsgStore } from '@/store/use-chat-msg-store'; +import { ChatMsgType } from '@polyv/live-watch-sdk'; +import { computed, ExtractPropTypes, unref } from 'vue'; +import { GetVirtualListFn } from '../hooks/types'; +import { useChatMsgComputedProvide } from './_hooks/chat-msg-computed-hook'; +import { useChatMsgData } from './_hooks/chat-msg-data-hook'; +import { useChatMsgTime } from './_hooks/chat-msg-time-hook'; +import { useChatMsgUser } from './_hooks/chat-msg-user-hook'; + +export const chatMsgItemProps = () => ({ + /** 消息滚动容器 */ + containerElem: PropUtils.oneOfType([HTMLDivElement]), + /** 获取虚拟列表方法 */ + getVirtualList: PropUtils.func(), + /** 聊天消息 */ + chatMsg: PropUtils.object().isRequired, + /** 上一条消息 */ + prevChatMsg: PropUtils.object(), + /** 下一条消息 */ + nextChatMsg: PropUtils.object(), +}); + +export type ChatMsgItemPropsType = ExtractPropTypes>; + +export const useChatMsgItem = (options: { props: VueProps }) => { + const { props } = options; + const chatMsgStore = useChatMsgStore(); + + // 消息数据 + const chatMsgDataContext = useChatMsgData(props); + // 消息用户 + const { msgUser } = useChatMsgUser(chatMsgDataContext); + // 消息时间 + const { showMsgTime, msgTimeText } = useChatMsgTime(chatMsgDataContext); + + const { chatMsg, prevChatMsg, nextChatMsg, msgId } = chatMsgDataContext; + + /** 滚动容器 */ + const containerRef = computed(() => props.containerElem); + + /** + * 是否为同一个人连续发送的消息 + */ + const isContinuityMsg = computed(() => { + const prevMsg = unref(prevChatMsg); + const msg = unref(chatMsg); + + // 没有上一条消息 + if (!prevMsg) return false; + // 显示时间 + if (unref(showMsgTime)) return false; + // 与上一条消息类型不同 + if (prevMsg.msgSource !== msg.msgSource) return false; + + // 与上一条消息属于同一个人 + return ( + chatMsgStore.getChatMsgUser(msg)?.userId === chatMsgStore.getChatMsgUser(prevMsg)?.userId + ); + }); + + /** + * 是否为连续相同的消息来源 + */ + const isContinuitySourceMsg = computed(() => { + // 显示时间 + if (unref(showMsgTime)) return false; + + const prevMsg = unref(prevChatMsg); + const msg = unref(chatMsg); + return prevMsg?.msgSource === msg.msgSource; + }); + + /** + * 是否显示当前消息 + */ + const msgVisible = computed(() => { + return !chatMsgStore.hideChatMsgSources.includes(unref(chatMsg).msgSource); + }); + + function getVirtualList() { + if (props.getVirtualList) { + return props.getVirtualList(); + } + } + + useChatMsgComputedProvide({ + containerRef, + isContinuityMsg, + isContinuitySourceMsg, + getVirtualList, + }); + + return { + chatMsg, + prevChatMsg, + nextChatMsg, + msgId, + msgUser, + showMsgTime, + msgTimeText, + isContinuityMsg, + msgVisible, + }; +}; diff --git a/src/components/page-watch-common/chat/chat-msg-list/pc-chat-msg-list.vue b/src/components/page-watch-common/chat/chat-msg-list/pc-chat-msg-list.vue new file mode 100644 index 0000000..981e9c9 --- /dev/null +++ b/src/components/page-watch-common/chat/chat-msg-list/pc-chat-msg-list.vue @@ -0,0 +1,86 @@ + + + + + + diff --git a/src/components/page-watch-common/chat/chat-msg-list/portrait-chat-msg-list.vue b/src/components/page-watch-common/chat/chat-msg-list/portrait-chat-msg-list.vue new file mode 100644 index 0000000..ebb912c --- /dev/null +++ b/src/components/page-watch-common/chat/chat-msg-list/portrait-chat-msg-list.vue @@ -0,0 +1,73 @@ + + + + + + diff --git a/src/components/page-watch-common/chat/chat-msg-list/styles/index.scss b/src/components/page-watch-common/chat/chat-msg-list/styles/index.scss new file mode 100644 index 0000000..5ec7d2d --- /dev/null +++ b/src/components/page-watch-common/chat/chat-msg-list/styles/index.scss @@ -0,0 +1,25 @@ +@import '../msg-items/_styles/vars.scss'; + +// 聊天室列表提示样式 +.c-chat-msg-list__tips { + margin: $--margin-vertical-margin 0; + text-align: center; +} + +// 聊天室列表加载中样式 +.c-chat-msg-list__loading { + width: 100%; + height: 32px; + overflow: hidden; + &::after { + display: block; + width: 32px; + height: 32px; + margin: 0 auto; + content: ''; + background-image: url(../imgs/loading.png); + background-position: center; + background-size: cover; + animation: spin 1s ease infinite; + } +} diff --git a/src/components/page-watch-common/chat/chat-msg-list/use-chat-msg-list.ts b/src/components/page-watch-common/chat/chat-msg-list/use-chat-msg-list.ts new file mode 100644 index 0000000..ba68729 --- /dev/null +++ b/src/components/page-watch-common/chat/chat-msg-list/use-chat-msg-list.ts @@ -0,0 +1,227 @@ +import { appEvents, eventBus, useEventBusListener } from '@/app/app-events'; +import { TAB_NAME_CHAT } from '@/assets/constants/tab-name'; +import { useChatMsgStore } from '@/store/use-chat-msg-store'; +import { useChatStore } from '@/store/use-chat-store'; +import { useLayoutStore } from '@/store/use-layout-store'; +import { useWatchAppStore } from '@/store/use-watch-app-store'; +import { VirtualList } from '@just4/virtual-list'; +import { ItemsRemoveEvent, VirtualListEvent } from '@just4/virtual-list/events'; +import { ChatMsgType } from '@polyv/live-watch-sdk'; +import { onBeforeUnmount, onMounted, ref, unref, watch } from 'vue'; +import { useChatMsgHandle } from './hooks/chat-msg-handle-hook'; +import { useHideChatMsgHook } from './hooks/hide-chat-msg-hook'; +import { useChatMsgQueue } from './hooks/msg-queue-hook'; +import { ChatMsgItemComponentOptions, useMsgRender } from './hooks/msg-render-hook'; +import { useRequestHistory } from './hooks/request-history-hook'; +import { useRequestHistorySession } from './hooks/request-history-session-hook'; +import { ChatMsgListHookOptions } from './hooks/types'; +import { RenderPosition } from '@just4/virtual-list/types'; +import { isMobile } from '@/assets/utils/browser'; + +/** + * 聊天室消息列表 hook + */ +// eslint-disable-next-line sonarjs/cognitive-complexity +export const useChatMsgList = (options: { ChatMsgItemComponent: ChatMsgItemComponentOptions }) => { + const watchAppStore = useWatchAppStore(); + const chatStore = useChatStore(); + const chatMsgStore = useChatMsgStore(); + const layoutStore = useLayoutStore(); + + const { ChatMsgItemComponent } = options; + + const hookOptions: ChatMsgListHookOptions = { + getContainerElem, + getVirtualList, + }; + + // 聊天消息渲染 + const { renderItems, renderBoundary, renderLoading, renderError, renderEmpty } = useMsgRender( + ChatMsgItemComponent, + hookOptions, + ); + + const requestHistoryHookFunc = watchAppStore.isWatchBackUrl + ? useRequestHistorySession + : useRequestHistory; + + // 聊天消息加载 + const { loadInitialData, loadNextData, loadPreviousData } = requestHistoryHookFunc(hookOptions); + // 聊天消息队列 + useChatMsgQueue(hookOptions); + // 聊天消息处理 + useChatMsgHandle(hookOptions); + // 隐藏聊天消息 + useHideChatMsgHook(); + + /** 聊天消息容器节点 */ + const containerRef = ref(); + + /** + * 获取消息容器节点 + */ + function getContainerElem() { + return unref(containerRef) as HTMLDivElement; + } + + /** ---------- 虚拟列表 start ---------- */ + let virtualList: VirtualList | undefined; + + /** + * 获取虚拟列表实例 + */ + function getVirtualList(): VirtualList { + if (!virtualList) { + throw new Error('getVirtualList error'); + } + return virtualList; + } + + /** + * 初始化虚拟列表 + */ + function initVirtualList() { + destroyVirtualList(); + + const containerElem = getContainerElem(); + if (!containerElem) return; + + if (!chatStore.chatMsgListEnabled) return; + + virtualList = new VirtualList({ + container: containerElem, + itemKey: 'id', + prefetchDistance: 1, + defaultView: 'foot', + dataSource: { + loadInitialData, + loadNextData, + loadPreviousData, + }, + renderer: { + renderItems, + renderBoundary, + renderLoading, + renderError, + renderEmpty, + }, + }); + + /** + * dom 节点通过实例化 Vue 来创建 + * 移除时,需要手动销毁实例,否则不会被回收掉,高并发下会占用很高内存 + */ + virtualList.on(VirtualListEvent.ITEM_REMOVE, (data: unknown) => { + const result = data as ItemsRemoveEvent; + const itemNodes = result.itemNodes; + itemNodes.forEach(elem => { + const domElem = elem as unknown as HTMLElement; + const vueVm = domElem.__vueVm; + if (vueVm) { + vueVm.$destroy(); + } + }); + }); + } + + /** + * 销毁虚拟列表 + */ + function destroyVirtualList() { + if (virtualList) { + virtualList.destroy(); + virtualList = undefined; + } + } + + /** + * 重新请求最新消息并渲染 + */ + async function initChatMsgRender() { + if (!virtualList) { + return; + } + + const result = await loadInitialData(); + if (!result.data) { + return; + } + + await virtualList.clear(); + virtualList.addBoundaryItems(result.data, RenderPosition.Foot, true); + virtualList.scrollToFoot(); + + /** clear 之后会变为边界状态,这里要手动重置头部边界,不然不会加载旧消息 */ + virtualList.resetBoundaryState(RenderPosition.Head); + } + + /** 滚动到最新位置 */ + async function scrollToNew() { + console.log('scrollToNew'); + if (!virtualList) { + return; + } + chatMsgStore.hideMoreMsg(); + + const lastItem = virtualList.items.last(); + if (lastItem && chatMsgStore.getRealIndexById(lastItem.id) === 0) { + virtualList.scrollToFoot(); + } else { + /** + * 这里不用 virtualList.refresh() 的原因: + * 该 api 会先清空节点后请求数据,请求期间会有明显的空屏现象,体验不佳 + */ + initChatMsgRender(); + } + } + + useEventBusListener(appEvents.chat.ResetUpChatMsgList, () => { + initVirtualList(); + }); + + onMounted(() => { + initVirtualList(); + eventBus.$on(appEvents.chat.ScrollToNew, scrollToNew); + }); + + onBeforeUnmount(() => { + destroyVirtualList(); + eventBus.$on(appEvents.chat.ScrollToNew, scrollToNew); + }); + /** ---------- 虚拟列表 end ---------- */ + + watch( + () => chatStore.onlySpecialMsg, + () => { + virtualList?.refresh(); + }, + ); + + // 切到聊天室 Tab 时自动滚到最底部 + // 首次打开聊天室时 oldVal 为空,此时不触发,因为会跟虚拟列表初始化冲突,会导致首屏消息重复 + if (isMobile) { + watch( + () => layoutStore.mobileMenuCurrentName, + (newVal, oldVal) => { + if (oldVal && layoutStore.mobileMenuCurrentName === TAB_NAME_CHAT) { + scrollToNew(); + } + }, + ); + } else { + watch( + () => layoutStore.pcAsideTabCurrentName, + (newVal, oldVal) => { + if (oldVal && layoutStore.pcAsideTabCurrentName === TAB_NAME_CHAT) { + scrollToNew(); + } + }, + ); + } + + return { + containerRef, + getVirtualList, + scrollToNew, + }; +}; diff --git a/src/components/page-watch-common/chat/chat-msg-quote/mobile-chat-msg-quote.vue b/src/components/page-watch-common/chat/chat-msg-quote/mobile-chat-msg-quote.vue new file mode 100644 index 0000000..9fa2744 --- /dev/null +++ b/src/components/page-watch-common/chat/chat-msg-quote/mobile-chat-msg-quote.vue @@ -0,0 +1,59 @@ + + + + + + diff --git a/src/components/page-watch-common/chat/chat-msg-quote/pc-chat-msg-quote.vue b/src/components/page-watch-common/chat/chat-msg-quote/pc-chat-msg-quote.vue new file mode 100644 index 0000000..67855ad --- /dev/null +++ b/src/components/page-watch-common/chat/chat-msg-quote/pc-chat-msg-quote.vue @@ -0,0 +1,57 @@ + + + + + + diff --git a/src/components/page-watch-common/chat/chat-msg-quote/use-chat-msg-quote.ts b/src/components/page-watch-common/chat/chat-msg-quote/use-chat-msg-quote.ts new file mode 100644 index 0000000..46e6c83 --- /dev/null +++ b/src/components/page-watch-common/chat/chat-msg-quote/use-chat-msg-quote.ts @@ -0,0 +1,23 @@ +import { useChatStore } from '@/store/use-chat-store'; +import { storeToRefs } from 'pinia'; +import { useChatMsgUserBasic } from '../chat-msg-list/msg-items/_hooks/chat-msg-user-hook'; + +export const useChatMsgQuoteControl = () => { + const chatStore = useChatStore(); + const { currentQuoteMsg } = storeToRefs(chatStore); + + const { msgUserNick } = useChatMsgUserBasic(currentQuoteMsg); + + /** 点击关闭 */ + function onClickClose() { + chatStore.$patch({ + currentQuoteMsg: undefined, + }); + } + + return { + currentQuoteMsg, + msgUserNick, + onClickClose, + }; +}; diff --git a/src/components/page-watch-common/chat/chat-room-pendant/mobile-chat-room-pendant.vue b/src/components/page-watch-common/chat/chat-room-pendant/mobile-chat-room-pendant.vue new file mode 100644 index 0000000..1ff6cd9 --- /dev/null +++ b/src/components/page-watch-common/chat/chat-room-pendant/mobile-chat-room-pendant.vue @@ -0,0 +1,151 @@ + + + + + + diff --git a/src/components/page-watch-common/chat/chat-room-pendant/pc-chat-room-pendant.vue b/src/components/page-watch-common/chat/chat-room-pendant/pc-chat-room-pendant.vue new file mode 100644 index 0000000..93be47e --- /dev/null +++ b/src/components/page-watch-common/chat/chat-room-pendant/pc-chat-room-pendant.vue @@ -0,0 +1,97 @@ + + + + + + diff --git a/src/components/page-watch-common/chat/chat-room-pendant/portrait-chat-room-pendant.vue b/src/components/page-watch-common/chat/chat-room-pendant/portrait-chat-room-pendant.vue new file mode 100644 index 0000000..6d06d16 --- /dev/null +++ b/src/components/page-watch-common/chat/chat-room-pendant/portrait-chat-room-pendant.vue @@ -0,0 +1,108 @@ + + + + + + diff --git a/src/components/page-watch-common/chat/chat-room/mobile-chat-room.vue b/src/components/page-watch-common/chat/chat-room/mobile-chat-room.vue new file mode 100644 index 0000000..3a78ad1 --- /dev/null +++ b/src/components/page-watch-common/chat/chat-room/mobile-chat-room.vue @@ -0,0 +1,109 @@ + + + + + + diff --git a/src/components/page-watch-common/chat/chat-room/pc-chat-room.vue b/src/components/page-watch-common/chat/chat-room/pc-chat-room.vue new file mode 100644 index 0000000..02332f5 --- /dev/null +++ b/src/components/page-watch-common/chat/chat-room/pc-chat-room.vue @@ -0,0 +1,115 @@ + + + + + + diff --git a/src/components/page-watch-common/chat/chat-set-nick/mobile-chat-set-nick.vue b/src/components/page-watch-common/chat/chat-set-nick/mobile-chat-set-nick.vue new file mode 100644 index 0000000..0d92209 --- /dev/null +++ b/src/components/page-watch-common/chat/chat-set-nick/mobile-chat-set-nick.vue @@ -0,0 +1,49 @@ + + + + + + diff --git a/src/components/page-watch-common/chat/chat-set-nick/pc-chat-set-nick.vue b/src/components/page-watch-common/chat/chat-set-nick/pc-chat-set-nick.vue new file mode 100644 index 0000000..5173881 --- /dev/null +++ b/src/components/page-watch-common/chat/chat-set-nick/pc-chat-set-nick.vue @@ -0,0 +1,72 @@ + + + + + + diff --git a/src/components/page-watch-common/chat/chat-set-nick/portrait-chat-set-nick.vue b/src/components/page-watch-common/chat/chat-set-nick/portrait-chat-set-nick.vue new file mode 100644 index 0000000..a344239 --- /dev/null +++ b/src/components/page-watch-common/chat/chat-set-nick/portrait-chat-set-nick.vue @@ -0,0 +1,61 @@ + + + + + + diff --git a/src/components/page-watch-common/chat/chat-set-nick/use-chat-set-nick.ts b/src/components/page-watch-common/chat/chat-set-nick/use-chat-set-nick.ts new file mode 100644 index 0000000..49d89ff --- /dev/null +++ b/src/components/page-watch-common/chat/chat-set-nick/use-chat-set-nick.ts @@ -0,0 +1,94 @@ +import { appEvents, eventBus } from '@/app/app-events'; +import { translate } from '@/assets/lang'; +import { validateSpecialString } from '@/assets/utils/validate'; +import { toast } from '@/hooks/components/use-toast'; +import { getWatchCore } from '@/core/watch-sdk'; +import { ValidatorRules } from '@/plugins/async-validator'; +import { UserEvents } from '@polyv/live-watch-sdk'; +import { computed, onBeforeUnmount, onMounted, reactive, ref } from 'vue'; + +/** + * 设置昵称 hook + */ +export const useChatSetNick = () => { + /** 显示状态 */ + const dialogVisible = ref(false); + + /** 表单 */ + const formData = reactive({ + nickname: '', + }); + + const formRules = computed(() => { + return { + nickname: [ + { type: 'string', message: translate('chat.setNick.error.empty'), required: true }, + { + validator: () => { + if (validateSpecialString(formData.nickname)) { + return [translate('chat.setNick.error.special')]; + } + return []; + }, + }, + ], + }; + }); + + /** 设置弹层状态 */ + function setDialogVisible(visible = true) { + dialogVisible.value = visible; + } + + /** 提交表单 */ + function submitSetNick() { + const watchCore = getWatchCore(); + watchCore.user.setCurrentUserNick(formData.nickname); + listenSetNickEvent(); + } + + /** 处理设置昵称成功 */ + function onSetNickSuccess() { + toast.success(translate('chat.setNick.success')); + setDialogVisible(false); + unlistenSetNickEvent(); + } + + /** 处理设置昵称失败 */ + function onSetNickError(evt: { message: string }) { + toast.error(evt.message); + unlistenSetNickEvent(); + } + + /** 监听设置昵称事件 */ + function listenSetNickEvent() { + unlistenSetNickEvent(); + const watchCore = getWatchCore(); + watchCore.user.eventEmitter.on(UserEvents.CurrentUserSetNick, onSetNickSuccess); + watchCore.user.eventEmitter.on(UserEvents.SetNickError, onSetNickError); + } + + /** 移除事件监听 */ + function unlistenSetNickEvent() { + const watchCore = getWatchCore(); + watchCore.user.eventEmitter.off(UserEvents.CurrentUserSetNick, onSetNickSuccess); + watchCore.user.eventEmitter.off(UserEvents.SetNickError, onSetNickError); + } + + onMounted(() => { + eventBus.$on(appEvents.chat.OpenSetNick, setDialogVisible); + }); + + onBeforeUnmount(() => { + eventBus.$off(appEvents.chat.OpenSetNick, setDialogVisible); + unlistenSetNickEvent(); + }); + + return { + dialogVisible, + setDialogVisible, + formData, + formRules, + submitSetNick, + }; +}; diff --git a/src/components/page-watch-common/chat/chat-welcome/chat-welcome-tips.vue b/src/components/page-watch-common/chat/chat-welcome/chat-welcome-tips.vue new file mode 100644 index 0000000..5affaae --- /dev/null +++ b/src/components/page-watch-common/chat/chat-welcome/chat-welcome-tips.vue @@ -0,0 +1,99 @@ + + + + + + diff --git a/src/components/page-watch-common/chat/chat-welcome/imgs/bg-portrait.png b/src/components/page-watch-common/chat/chat-welcome/imgs/bg-portrait.png new file mode 100644 index 0000000000000000000000000000000000000000..ce0ac202cae02f7ffb00336d2a7e3865af5d3404 GIT binary patch literal 1695 zcmV;Q24MM#P){tc`*!?LMi`DM;ibV^rk)OZ)o61M*xZ}_aCM`*^Zit%CbgKrT|F#jD$@p%L zV}n5i$JnzBjCk!F{c*JUz$bhc`(TT?)n~#QUwO8$8QL^%^P%?< ztIly4OMN#??P#1bF7Ee@5Z;A`ImA)U-KK5rx)*A2Zhc{cKepbpwl?@dJ5T!7cC%|c zCSD8S2zzf|dwb8Ntrco}CT@i~Kd#I5Y|Yf;IA@x#m_Btv^9QCL$9txAC$v~Ht*(V` z-Z1@hCA2(ey7rI7%yKpf?MH)G<5ay>V&Yg;P{`u<*MJ}Y2f z+=(8~&Y1dJQQ+febtAOuguVs|%!MAVgdXNX7ne+Te~Oa8UrV8HE``2-uYaE;f};_> zmxJ=cI}s>Q14y*ZiNHX)7ZC)18${qBp8_?I#|9DD>g+Lskm|Xuz>x?Ps4;Ue6039c z)p;8cI4FI!h5y#Z+d%}rnnxn=3_*zkyiPh{kO`O9Vy+o&`7&MDmD4Ff(9- z7##e*>cbB0ea|!pF&Gha$P&=+LFlX%x^0EdZS|iL!J-rTbSJcQA^-^(8Gr~bI-%Po z(-%94;N4Q_k9SPJ|048L62V?5KFT;|1U2Q~K?K?!Qe+3HZz(i|4=Z>fmSM#%+oa8m zz=2x*>o#P_B7B^V%zq$)ssEUzRPaxTV46i}I&A>ln4^v5^XlRpEe+TBj7&7Gx9!0; zB7j}BF>>*h-w8y)>|_Db2`fM1m|L3e8G(|3XA*r`@plnH%m|cZY%AcT;Ay@R0l>c! zibUX9z?2APt3npY1lExVVn#4Sw!pNS3Ej_yzPu8;JZHLJ$S5QDDv97IOdrv?fbLi# z7-|ax_?0A#Se}9id_P~eHF0a;S%47%;+v9F-B(X)4yCR!-Wq8AX##%Dj6!W8?(er| z1R?wIv7HDG$_TtpU_{W_R^dO%2(}ObGJ@5N>CCnXo)I_^Jem>Agf6Zh&j_$JNFq1_ z%7=E%8bPQ*WQ{;;30WgJ6ip}JFKYx|&EMD>WQ}07HOLyl$%B3S1hPh8|8mP3LHX~1 z{VOnQ1g{kEk54OW1k>*&WQ|~Zu`p`{uaqFNMvygv{2sw81^52b${In|2+9|S@_PjP zqvuuh$QnV`2x3N%HG)?G>q94zHG-@WY{>}ndjy99>h$_$jUa0TStB?-+&)pnStH0A zLDmSK2wbP(Hfsb~Bgh)TX<+pkqRbjW)(Emj@C-nExkF@)AZr9!BY3&^eCEiqMvygv ztPwmj=w8-vStH0ALDmRf7AF74XtG9-HG&shBiL8GG>U_|Oy@-7a||{Y3_U=+6pmcD zRE1KjX9#?hj|-31>navn#8s<~sVefs&u;Nj7aUc=(9lK2Pop*|#7j5STel0TmaL$N zmsasll_wjEmsUA57yEPpQWp%3f~8QuQ8gcEo)j&_779Zu4pPKU2L+)ZUOG}A8ng;a zr?Ggcrt>EG1@SP|Gz_XpJ{K1+8AMcFU(w=ei@50^Jc@D0LZ?-LBuJ~Nu&Qe}29+Zh z6ID?bh?}qwl#L)vS~U+<=FA8<2%f4~$qw;S7FNwi6&(o*MpeAjrPH>Fms%eeFLgB} z$dth!yPyfPe%09J%b;MSVx?=S5Ah&hW+JA$#7k$UU+Chc{hiSKj8(jJv0z%yq>7im pxn{aMlPX@S;v^rKek8`*^Dk#%#Ex4@Q>_31002ovPDHLkV1j5@2X_Df literal 0 HcmV?d00001 diff --git a/src/components/page-watch-common/chat/chat-welcome/imgs/bg.png b/src/components/page-watch-common/chat/chat-welcome/imgs/bg.png new file mode 100644 index 0000000000000000000000000000000000000000..cf3a6df9826a9fc1886d7379986330cb1924fcf6 GIT binary patch literal 3745 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 FV1j(H^GE;y literal 0 HcmV?d00001 diff --git a/src/components/page-watch-common/chat/chat-welcome/imgs/icon-start-right.png b/src/components/page-watch-common/chat/chat-welcome/imgs/icon-start-right.png new file mode 100644 index 0000000000000000000000000000000000000000..ffdc67788ec2638a1f39cafca5ff46fb29f88f3a GIT binary patch literal 478 zcmV<40U`d0P)u>(@q5sWh{py?k>3sh0n*QvV{_K+e?w0=Um;UO3{_&Fj=ydy!QGkN)h8{_2zd^OyeSkN)kG{_&Un=#u~Qnf~XH|Lv6hoPKk0FAo0t`Rm=?+|I_t!^5qqsfv1aaA{~?UPVJY zGa@1t1|=i|c2k7D0002JNklrQqB3-~$w%G&vszC_=&8U9VhMxejZ&WW!>}FPy39&ujN1DVX80)&8 zrU^2`G+UGPwMzK>KtgQ_=9L#oP@4n|Du+f*(6R_xH$ewO@X0ZJv<#m;BZT%3Z#`fa UVNi(iVE_OC07*qoM6N<$f-n#S&j0`b literal 0 HcmV?d00001 diff --git a/src/components/page-watch-common/chat/chat-welcome/portrait-chat-welcome-tips.vue b/src/components/page-watch-common/chat/chat-welcome/portrait-chat-welcome-tips.vue new file mode 100644 index 0000000..361c136 --- /dev/null +++ b/src/components/page-watch-common/chat/chat-welcome/portrait-chat-welcome-tips.vue @@ -0,0 +1,51 @@ + + + + + + diff --git a/src/components/page-watch-common/chat/chat-welcome/use-chat-welcome-tips.ts b/src/components/page-watch-common/chat/chat-welcome/use-chat-welcome-tips.ts new file mode 100644 index 0000000..b179996 --- /dev/null +++ b/src/components/page-watch-common/chat/chat-welcome/use-chat-welcome-tips.ts @@ -0,0 +1,132 @@ +/** + * @file 欢迎语相关 hook + */ +import { translate } from '@/assets/lang'; +import { getWatchCore } from '@/core/watch-sdk'; +import { useChatStore } from '@/store/use-chat-store'; +import { useLangStore } from '@/store/use-lang-store'; +import { ChatEvents, ChatMessageUser, UserLoginMsgType } from '@polyv/live-watch-sdk'; +import { computed, onBeforeUnmount, onMounted, ref, unref } from 'vue'; + +/** 最大显示数量 */ +const maxCount = 10; +/** 文案上最大显示数量 */ +const maxShowCount = 3; + +/** 欢迎语提示 hook */ +export const useChatWelcomeTips = () => { + const chatStore = useChatStore(); + const langStore = useLangStore(); + + /** 当前正在显示的观众 */ + const showingUsers = ref([]); + /** 等待显示的观众 */ + const waitingUsers = ref([]); + + /** 显示的欢迎文案 */ + const welcomeText = ref(''); + + function setWelcomeText() { + let text = ''; + + const len = unref(showingUsers).length; + const nicks: string[] = []; + + unref(showingUsers) + .reverse() + .forEach((user, index) => { + if (index < maxShowCount) { + nicks.push(langStore.translateNick(user.nick)); + } + }); + + text = nicks.join('、'); + + if (len > maxShowCount) { + text = `${text} ${translate('welcome.wait')}${len}${translate('welcome.peopleJoin')}`; + } else { + text = `${text} ${translate('welcome.join')}`; + } + + welcomeText.value = text; + } + + /** 欢迎语是否显示 */ + const welcomeVisible = computed(() => showingUsers.value.length !== 0); + + /** 隐藏定时器 */ + let hideTimer: number | undefined; + + /** 设置隐藏定时器 */ + function setHideTimer() { + hideTimer = window.setTimeout(() => { + showingUsers.value = []; + clearHideTimer(); + resetShowUser(); + }, 3000); + } + /** 清空隐藏定时器 */ + function clearHideTimer() { + clearTimeout(hideTimer); + hideTimer = undefined; + } + + /** 重置显示的用户 */ + function resetShowUser() { + clearHideTimer(); + + const surplusCount = maxCount - showingUsers.value.length; + const joinUsers = waitingUsers.value.splice(0, surplusCount); + + if (joinUsers.length) { + showingUsers.value.push(...joinUsers); + setWelcomeText(); + } + + if (showingUsers.value.length) { + setHideTimer(); + } + } + + /** 处理聊天室登录事件 */ + function onUserLoginEvent(event: { userLoginMsg: UserLoginMsgType }) { + const user = event.userLoginMsg.user; + if (!user) return; + + // 正在两个列表中的用户不再插入 + const showIndex = showingUsers.value.findIndex(_user => _user.userId === user.userId); + const waitIndex = waitingUsers.value.findIndex(_user => _user.userId === user.userId); + if (showIndex !== -1 || waitIndex !== -1) return; + + // 显示中的数量小于 10,直接显示否则进入等待队列 + if (showingUsers.value.length < maxCount) { + showingUsers.value.push(user); + } else { + waitingUsers.value.push(user); + } + + resetShowUser(); + setWelcomeText(); + } + + onMounted(() => { + if (chatStore.welcomeEnabled) { + const watchCore = getWatchCore(); + watchCore.chat.eventEmitter.on(ChatEvents.ChatUserLogin, onUserLoginEvent); + } + }); + + onBeforeUnmount(() => { + if (chatStore.welcomeEnabled) { + const watchCore = getWatchCore(); + watchCore.chat.eventEmitter.off(ChatEvents.ChatUserLogin, onUserLoginEvent); + } + clearHideTimer(); + }); + + return { + showingUsers, + welcomeText, + welcomeVisible, + }; +}; diff --git a/src/components/page-watch-common/connect-mic/common/connect-mic-info.vue b/src/components/page-watch-common/connect-mic/common/connect-mic-info.vue new file mode 100644 index 0000000..7571dbf --- /dev/null +++ b/src/components/page-watch-common/connect-mic/common/connect-mic-info.vue @@ -0,0 +1,62 @@ + + + + + + diff --git a/src/components/page-watch-common/connect-mic/common/connect-mic-network.vue b/src/components/page-watch-common/connect-mic/common/connect-mic-network.vue new file mode 100644 index 0000000..4054783 --- /dev/null +++ b/src/components/page-watch-common/connect-mic/common/connect-mic-network.vue @@ -0,0 +1,69 @@ + + + + + + diff --git a/src/components/page-watch-common/connect-mic/common/connect-microphone.vue b/src/components/page-watch-common/connect-mic/common/connect-microphone.vue new file mode 100644 index 0000000..169b691 --- /dev/null +++ b/src/components/page-watch-common/connect-mic/common/connect-microphone.vue @@ -0,0 +1,58 @@ + + + + + + diff --git a/src/components/page-watch-common/connect-mic/hooks/use-connect-mic-item.ts b/src/components/page-watch-common/connect-mic/hooks/use-connect-mic-item.ts new file mode 100644 index 0000000..f981a77 --- /dev/null +++ b/src/components/page-watch-common/connect-mic/hooks/use-connect-mic-item.ts @@ -0,0 +1,112 @@ +import { translate } from '@/assets/lang'; +import { PropUtils, useProps, VueProps } from '@/assets/utils/vue-utils/props-utils'; +import { ConnectMicItem } from '@polyv/live-watch-sdk'; +import { computed, nextTick, onBeforeUnmount, onMounted, ref, unref } from 'vue'; + +export const connectMicItemProps = () => ({ + micItem: PropUtils.object().isRequired, + /** 连麦信息是否显示 */ + micInfoVisible: PropUtils.bool.def(true), +}); + +/** 连麦节点 hook */ +export const useConnectMicItem = (options: { props: VueProps }) => { + const { props } = options; + const { micInfoVisible } = useProps(props); + + const wrapRef = ref(); + + /** 连麦用户昵称 */ + const micNickname = computed(() => { + const micItem = props.micItem; + if (micItem.isTeacher) { + return translate('connectMic.teacher'); + } + if (micItem.isSelf) { + return translate('connectMic.me'); + } + return micItem.nickname; + }); + + /** 是否关闭麦克风 */ + const isAudioMuted = computed(() => props.micItem.isAudioMuted); + + /** 当前音量,0 ~ 1 */ + const currentVolume = computed(() => props.micItem.currentVolume); + + /** 是否关闭摄像头 */ + const isVideoMuted = computed(() => props.micItem.isVideoMuted); + + /** 是否 sip 电话入座 */ + const isSipUser = computed(() => props.micItem.isSipUser); + + /** 是否本地推流 */ + const isLocal = computed(() => props.micItem.isLocal); + + /** 是否主讲 */ + const isMaster = computed(() => props.micItem.isMaster); + + /** 当前用户的连麦方式 */ + const currentConnectMicType = computed(() => props.micItem.currentConnectMicType); + + /** + * 初始化连麦节点 + */ + async function initMicItem() { + await nextTick(); + const micItem = props.micItem; + const wrapElement = unref(wrapRef); + if (!wrapElement) { + return; + } + wrapElement.innerHTML = ''; + + // 本地流则调用推送方法 + if (micItem.isLocal) { + micItem.publishSteam({ + element: wrapElement, + control: false, + playConfig: { + fit: 'contain', + }, + }); + } else { + micItem.subscribeStream({ + element: wrapElement, + control: false, + playConfig: { + fit: 'contain', + }, + }); + } + } + + /** + * 销毁连麦节点 + */ + function destroyMicItem(): void { + const micItem = props.micItem; + micItem.removeStream(); + } + + onMounted(() => { + initMicItem(); + }); + + onBeforeUnmount(() => { + destroyMicItem(); + }); + + return { + wrapRef, + micInfoVisible, + micNickname, + isAudioMuted, + currentVolume, + isVideoMuted, + isSipUser, + isLocal, + isMaster, + currentConnectMicType, + }; +}; diff --git a/src/components/page-watch-common/connect-mic/hooks/use-connect-mic.ts b/src/components/page-watch-common/connect-mic/hooks/use-connect-mic.ts new file mode 100644 index 0000000..d626afe --- /dev/null +++ b/src/components/page-watch-common/connect-mic/hooks/use-connect-mic.ts @@ -0,0 +1,156 @@ +import { translate } from '@/assets/lang'; +import { toast } from '@/hooks/components/use-toast'; +import { getWatchCore } from '@/core/watch-sdk'; +import { useConnectMicStore } from '@/store/use-connect-mic-store'; +import { ConnectMicError, ConnectMicEvents } from '@polyv/live-watch-sdk'; +import { appEvents, useEventBusListener } from '@/app/app-events'; +import { onBeforeUnmount, onMounted } from 'vue'; + +/** + * 连麦设备设置 hook + */ +export const useConnectMicDevice = () => { + /** 开启设备设置 */ + function openDeviceSetting() { + const watchCore = getWatchCore(); + watchCore.connectMic.openDeviceSetting(); + } + + /** 关闭设备设置 */ + function closeDeviceSetting() { + const watchCore = getWatchCore(); + watchCore.connectMic.closeDeviceSetting(); + } + + return { + openDeviceSetting, + closeDeviceSetting, + }; +}; + +/** + * 连麦申请 hook + */ +export const useConnectMicApply = () => { + const watchCore = getWatchCore(); + + /** 申请连麦 */ + async function applyConnectMic() { + const result = await watchCore.connectMic.applyConnectMic(); + + if (!result.success && result.failReason === ConnectMicError.GetDevicePermissionFail) { + toast.error(translate('connectMic.error.getDeviceFail')); + } + } + + /** 取消连麦申请 */ + function cancelApplyConnectMic() { + watchCore.connectMic.cancelApplyConnectMic(); + } + + return { + applyConnectMic, + cancelApplyConnectMic, + }; +}; + +/** + * 连麦控制 hook + */ +export const useConnectMicControl = () => { + const watchCore = getWatchCore(); + const connectMicStore = useConnectMicStore(); + + /** 开启摄像头 */ + function enabledVideo() { + watchCore.connectMic.enabledVideo(); + } + + /** 关闭摄像头 */ + function disabledVideo() { + watchCore.connectMic.disabledVideo(); + } + + /** 切换摄像头 */ + function toggleVideo() { + if (connectMicStore.localIsVideoMuted) { + enabledVideo(); + } else { + disabledVideo(); + } + } + + /** 开启麦克风 */ + function enabledAudio() { + watchCore.connectMic.enabledAudio(); + } + + /** 关闭麦克风 */ + function disabledAudio() { + watchCore.connectMic.disabledAudio(); + } + + /** 切换麦克风 */ + function toggleAudio() { + if (connectMicStore.localIsAudioMuted) { + enabledAudio(); + } else { + disabledAudio(); + } + } + + /** 结束连麦 */ + function endConnectMic() { + watchCore.connectMic.endConnectMic(); + } + + return { + enabledVideo, + disabledVideo, + toggleVideo, + enabledAudio, + disabledAudio, + toggleAudio, + endConnectMic, + }; +}; + +/** + * 连麦总 hook + * @description 各端仅限注册一次 + */ +export const useConnectMic = () => { + const { openDeviceSetting } = useConnectMicDevice(); + useEventBusListener(appEvents.connectMic.TriggerOpenDeviceSetting, openDeviceSetting); + + const { applyConnectMic, cancelApplyConnectMic } = useConnectMicApply(); + useEventBusListener(appEvents.connectMic.TriggerApplyConnectMic, applyConnectMic); + useEventBusListener(appEvents.connectMic.TriggerCancelApplyConnectMic, cancelApplyConnectMic); + + const { endConnectMic } = useConnectMicControl(); + useEventBusListener(appEvents.connectMic.TriggerEndConnectMic, endConnectMic); + + const watchCore = getWatchCore(); + + // 邀请上麦 + function onInviteConnectMic() { + watchCore.connectMic.openInviting(); + } + onMounted(() => { + watchCore.connectMic.eventEmitter.on(ConnectMicEvents.InviteConnectMic, onInviteConnectMic); + }); + onBeforeUnmount(() => { + watchCore.connectMic.eventEmitter.off(ConnectMicEvents.InviteConnectMic, onInviteConnectMic); + }); + + // 连麦人数达到限制 + function onOverLimit() { + toast.error(translate('connectMic.error.overLimit')); + } + onMounted(() => { + watchCore.connectMic.eventEmitter.on(ConnectMicEvents.ConnectMicOverLimit, onOverLimit); + }); + onBeforeUnmount(() => { + watchCore.connectMic.eventEmitter.off(ConnectMicEvents.ConnectMicOverLimit, onOverLimit); + }); +}; diff --git a/src/components/page-watch-common/connect-mic/imgs/btn-audio-close.png b/src/components/page-watch-common/connect-mic/imgs/btn-audio-close.png new file mode 100644 index 0000000000000000000000000000000000000000..978746694054504809055c0ce093490a7395f410 GIT binary patch literal 1564 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 literal 0 HcmV?d00001 diff --git a/src/components/page-watch-common/connect-mic/imgs/btn-icon-default.png b/src/components/page-watch-common/connect-mic/imgs/btn-icon-default.png new file mode 100644 index 0000000000000000000000000000000000000000..ebbb563e316edbc6e22b1f9336689e71c5d88130 GIT binary patch literal 653 zcmV;80&@L{P)? z`H6U{a421>v9kp(?d#CODzu`=gQ!Ajv$^FSW-vL5$6D++#KX>gUCL~U5H}^ve zEb2Lg%|slJg3urpq{OFz8FkpAoOPULY*pFH;r)mi6!}Z6#{ly5uj4Y1+)!ny&49A0 zvM*=Hpn%_3LZ6|ZInN;G};PBQ_wQDS=lF_**_ErcvcIy{?OHBcQnC{ZsT3S zbq8*p&el#Nd@#Z(5B0qEFU6?V1QV*}$6dfzP^L)M(F(X`fRKf;B-~-VDdO<#vG3F%OukX9=K_>8a%UFw^#;VON~yQEM)bg(S(@f^Ixb&sFudhvCv{ z(sRYKn_cm()9t7fMo1Rvwk~Gsz^satG0Jcl;ta(lsRCz32@0vA5G9cln&y(+ z@p%fPh+2h?@u;AODh@7BFa?B(jZLV75+izvsgvT1&PIqj3PqY-g$3xn?UD3!1hrQ1BNJzG04UT?Nm4p}2KQAo9bbLDJ&!y^di z!qw{Ae>HDiAvlcm{Fo$scgmDqQeP$9ySS{{SFB#rEqL!r&rI%oZxWRIqlbhC5H1aG zah9=ic$s<;Xa#(OVH9Ng;o=Bq0Ty39S~Cpez|>o~Q>bWYguC?`Jg3Sfpion0x&YUDAwdf{tW#N4M`pf-kN>6*qZdtR{IPJ|7@gyyJ z_Kl)mdy)a7Ry}5w-uVk^Q|;C`)5}m49?{+1cI`0IORtXeZ|kdCdL6q>yD+^zq?>jF zm>>AUxZ*CaM(5LFy_&nvSm86!_>59sL!8(6=s&pnkIeqVy8oI0FDQ^|+iFz*?^5Qq a4t@aa8L@1$fABH@0000B}7%>U@<|8a331`x%@ z{?E(=i9p0544@!T0gw$uK=A3)|6jlUS5*8@P5s~A4wBlm>3?J6{}(U*KYH~4&Yl0) zuKmAo;s5E=|G$0vf8fCX!ovUA+5cCp_&;~<|7p{*glF#nS}af!k|RlER`Di~s#s@AJMsfsNZ~ zv;4yL375C{>e|Llvryt$!sGN%WoG)?V`Z%@O(N^|di@e!7Q1;%;;ccGvkw;*|~W7)k{7)xoi60?#P%vF?F7asQ39(2WFh{N@z@D z=Tl)gK}kk+MwgsKo~pzBO!r;#RBahZdF|QDD}H`S5dL(9s{a_ow#7Fe>JIndk-Z zWLwExVt%;f$yzD3DGbTSTy1CW`RLo;=r}=X<+=BJ-ko({Y5VJY`1&OtLP85`ZpAcD ztEy1jv;67Ii-NhVn`5GX-R;?`VmX^JTRJJXVb0p=TVEFUNndk3ZkZI>ZoPc%0~3=u zVO>{`6y9?8dweQmrsY|y=d%v%UGQPO+aGVq*H%B+>jgIXO;i1M1Q>%1p00i_>zopr E0P*QDy8r+H literal 0 HcmV?d00001 diff --git a/src/components/page-watch-common/connect-mic/imgs/btn-set.png b/src/components/page-watch-common/connect-mic/imgs/btn-set.png new file mode 100644 index 0000000000000000000000000000000000000000..26c428d1f2c718f54e617898bc795029e737fe64 GIT binary patch literal 1717 zcmV;m21@yfP)AyYuSl{vv>s{}=_qTWZsa@xM?^@5Z*8hFhGp^S$VDjFt1#AGU3#<*S z1L$vS0Bf4~zkt7iRlpy>N?--B)H$cW4UF6%ID7Bc12zRVvW>S9BOrbQmN@5@w_#K? zw=)2|_j;pS0GoBN>9TzajK#oD&N*pJYibRE_g-qerTzLU-Fjg)40L3E)XzDme`ixG z0KE5l+uPci&R#@|iLwt1opaKPEXo4FdoN?QgBiCh!5vRp3ViFFlksdsjREl9Zvt!| zSnx&y2RK+q;XCKtFHK}L0>FDOb>FIqfH@eu$T_z#Rc;ah-g}Lc%FDHl11+&5;p-M# z3xI8YXY=WG{6^`yVuuCJxk?aH0N8Pi-hBK56g+)X^;RkY7?U$!r*)M!p%ehK_B+*a zACu?PW!|9>0Q2*EjG(K_#ak|Neo>rI2EcA35ac`w9AZ2E7`QBV_cl+N<(Dy!{{i5= z-`oP7mhu`;S27hQIG;ou4hsGsk4+V(K*s${pr~2~-Tg)_{J)ByHww6R5MQH3^g=l7`5y_p{Cy41^}@ zopH|1^e3za!1DQhhHUt>(f5G$o9rMMtNOsv4YfcZf8MVrga9bUSFAs5IvKbp19)xZ zW;+T^*Q^wJktT%z=xnKOmr7>=M*tfG$`JcM)%@-TUQJ}Q3-Ds3_6vXqfe($xQNXo; zLh?T8IGmxFKT%FNY=v{~i`4*F4Nrc*32AYv{T0!)EiQ%M^^uFy<}bE7U^rj(#it_> zo&oMn5mGQlal!JQ24sf3GC;dm2$$cM|1P7@&xd0K$U7yIP5|yNc$O0<^g`r508Q0j zYq$?MsbYh#m|H6w68ri7I2pBNC6i<h}Al%!tNZ4qR6;Pn$SV zwf&MYIRL1?@P0=Ch|QD$knze%diDo&2CL`}GjK&?o&pXocrdIZAkotTAUF6?F!F9q zq2yEGk{Xb1h@!qGMo@O7$R?yJ^o#&#Q}9qIdS;C@J=dnnNb+Sb!ssv64W0vhox0nC zaf=0j++UeHtK)qP@NmT-g{|iSJ)c`bZ33a2fVb)vS@C?i0NC4_mN|U%)?TZ~9^bHN zt&F$k%c?gCz(QU!w8u6Kg~RzP1%Nz&y0y7i3WuURSU7119R3|$5MJ_j4D6S+(PsOP6X ze-|Wg@+ffVn1Ij=gmOdSGQf0A=GlVU;wWlDFBHyAhN?71>Gk7QEegkt8VJ2)NNSst z4%ZzSWqOYkgxLb&>Jr1KMu=?1{5s|xJ)de*5J_3X;a1z*FdD3~v}%6J?f`1XAVJjhj^xQ#RPNC|V~V ze7+si~el#)y)UVYS9|vs6*z=@oszqJ7GER#l=?uqkehnHF>%6xA(A z2J#v}ouAtKO2Ah^Bejlq+4JJ&r~#lvX4vg+(1xX zp!{GiNKvV5gnkDWRI1dDyRyZ?be(qAz2Z^6BBNfQj)o%2{mg|vVXiO-gS0C$rUg>N z$-N|HAPgc&%6W5L%xQK_t}k)GA#xWROW~1sQ8ECbP3I_OfrA{=?y9UE1sTf8y(}Go zFqzloL;V~Ro6!9S6A=iL`^ijT7$^6msYn~t58S3@bG3~ZP;CE0eE+uz!;}oHlHWvs zI2mcfWPUnZq#hIb@pRcai9Vm#HCp{tcPRRNUey{^g7q89=kxyn%Om{tIna6&00000 LNkvXXu0mjfF?}R` literal 0 HcmV?d00001 diff --git a/src/components/page-watch-common/connect-mic/imgs/btn-video-close.png b/src/components/page-watch-common/connect-mic/imgs/btn-video-close.png new file mode 100644 index 0000000000000000000000000000000000000000..4ebb76f8816fd33379f050f175eeb521b9ffffa8 GIT binary patch literal 1250 zcmV<81ReW{P)_!$IKV-pj>R512KC@O-h!n&-wE4uEw zu9p0V9_?*srl*hD_a0-zz~jwKch_&KtE;QJ1sxYvT>)SnfHeSC0ay)y|1ATs+%*3a zz%Kv`0KNm52QUX?Cg7^YpT0~}3Dyn)n8vs@17u^bA za|WU7LOl}_%MrveU{54=Q#zoSbM09EDJ-etygbSDyC zqnLzG1pg-{G~0 zG(uoLHgV_qeir<^K5(09D;$9GzSZ4^usKls?%VS_Hr>Yz`05x9=Jj z*ACC^1(XY52LN8fR!*4?J;~6q2@#nn>-ht~tmlsoq2Z(OH%y1`07!*EgZQkBC)fb! z;}y&M4MMC8RE049dVc|WEs6@XmAmom~X zm@PCQ(dAtV0CmEz1aK0-1pwCrzh2=YmjGhbpKW#xph|egAkP6fV=dIq2LdRDfta}c zvA~z@$6WwF0Ne-g*gSL=z!d=eTA{@io{{Hk08UrTR-pjcm!|~45Le2g#|3Z?z(YsU zO8~A0N?#@XO#r1&;8qs{V2l7#ogWv#WdL8D-mM4lAOJv>+TUsro>j*Hm>_`EfJbfs zbq3F8YhnOQ5dfz@rm|v7&LL2x_GJdB3jnhOaKt1na{-7of^}p5w&_?G0OkpRGXS%- zvBlT1HuW|cyi&D&?Zga$1p+v3yTomJ>pbJ@n6FBoweJ#u4jO<@c-y-BK*wl60bo!= zppEcd11N?-ZX@VZdERd;eAfU9Bba*{^Z^JFzH0#A2!J_1=J{ibZ*1E2h6>*`fWi^V z?F!d{j1j(T0EH`@doff6AXa!Az+C`L($?foVxGZa!6NvZ0Z^Zl@Ga%IbjS>v1nq|_C+QPP5tnmJ18eCoStTV>5qprP#V zW@!sTKex-5)Ei4k9A zy*@bUXhT1b&ep6Y`geG`Zm2lN=XrFV7vm09$LATX;qiH1OLBbvHvrA$^~&}N>Hq)$ M07*qoM6N<$f|AWMe*gdg literal 0 HcmV?d00001 diff --git a/src/components/page-watch-common/connect-mic/imgs/btn-video-open.png b/src/components/page-watch-common/connect-mic/imgs/btn-video-open.png new file mode 100644 index 0000000000000000000000000000000000000000..6dfa26e3009e0fd50014479104449b8904e73d4d GIT binary patch literal 1069 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 P00000NkvXXu0mjf!9g0J literal 0 HcmV?d00001 diff --git a/src/components/page-watch-common/connect-mic/imgs/item-audio-open-hover.png b/src/components/page-watch-common/connect-mic/imgs/item-audio-open-hover.png new file mode 100644 index 0000000000000000000000000000000000000000..348d2fc7f23972550f272387b7a0e534ad9471b6 GIT binary patch literal 3197 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 j_vw_0FXnOaNUNd-0g))Kwor|s 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 literal 0 HcmV?d00001 diff --git a/src/components/page-watch-common/connect-mic/imgs/item-status-audio-closed.png b/src/components/page-watch-common/connect-mic/imgs/item-status-audio-closed.png new file mode 100644 index 0000000000000000000000000000000000000000..6bfeeaefc3e2dc2a4b00aedbad63f080165f11b6 GIT binary patch literal 985 zcmV;~119{5P)I)FE1!A%$u2S=9}5w z+uL^?9aUp>b@g*82G~U&e zwF4-FfO@%!`=pxrxkR5_USTOK1yItJwbJN!$_uNofG4l8f+5*jcX5QE0xrR`zu~VS z*A%ddafM#+tH^C7Fn(l;Urh)(jvPiVB8{cu^jIeLnAt5g$y)X^vj%aY$CAwahSRm3O*74o;3MX$Nif1O^EhIis?ooqjcXh;< zJ$c0PQbm;Lh@~I^u^Ew(Zi{!x5Qws=%0GfXtynbXS<2bSZ*5X&%olH+{MR$+tj$_L zrjZTS0DBY(r_=D9CgB0%E|*AmVT&w$zzFReq@R$sBB$BRk5(WYBm|W)Wcz`E-Fm%R$=rLQ8^l*u60KvN1vGzsAW2|VqgT&cRU82R@|Le1wBsx z;~GxnB%#s{K-PD(Zq(lt+n;1Lz}$*`<2!_P`_?TDT>k~aeo^y);nJxcc<&RsA%^P> z?6t?GN-OqF?h;d@=StE5--i;W@g-ADejyAa_Fg~5cJHyr^eG%Bg{==a`^zxSjkrAV zM~KBv#WC5*djP^EViQqvZmWfpqkCZx=|w&vvuy8Iv>U|xF!a~6H$yrmiED?N4~WfH z+~1t-CU%S(FA-a{KJoWd@xl(MF-ggri`YS8Gl&l7TE`rT6Ri4sO9Bmgkb6k(8K;Qk z>_AQ;`sTD%KE~Gf$nF&9pI|g|pWc2Fboq#~(M zL8=dZQBfkIZ-RXiQIKpRKB=@mY99*zkxevGK?(j8R7Aw$L$TR4_xPQ?JNM4c&dsi9 zX$N-Cne%<;%(-*t%*-W9YdINttXN3dmDZ7=Kq1HEV0Hi*I$y{yIwa$G(;@4=CU1!B|Sk^Yj=-vPZv?WrlTiS{@ z9l#D|>z^-xy}s=cT-~i1JA;|K<^F8fA?fp9sz>z_ZZmc}0KKJmn-#!>RSL(DRJM@x zn?4rARioPhu*u0$1qzg1iZEvL!%PQ92D$rApA^?Bo}sS}snpgQ2_jV3n!iaNYQiC_JBMlM_R9ENq4Eh|wMRaD zGoZ}A0(ZPhi{aXvp2BE@E8R*TTtmyMkV?1mG7?vcJD}TdIsx5XUFWnuD(yfT=GvQ1 z0FLol=mzoho92E@0-kX`-SnR)5btH?S+JKqz+(CWoT?rV+DGQQ zAWj)<8hPqGul(NNAq4|QN9>bEH`2Qi;a<{@r`R8n_!&-xE%s%vPwp;M~&2 z69KjUGRP~QNB!vd31||RMOsv05FZ=j>=}a_=}kbvoQyBTGPsOEzSKU5&qHcCaGpDV z*M3^d%k6bS!Exa8BaVK4WVQ@*$1|T#Y66C=+iyr^oYb<>*qW1k72EQ`M%!}31l+-T zWNbd}7oE6v gud4zd>EE<{03*v=-wuuF{Qv*}07*qoM6N<$g4G)rS^xk5 literal 0 HcmV?d00001 diff --git a/src/components/page-watch-common/connect-mic/imgs/item-status-audio-zero.png b/src/components/page-watch-common/connect-mic/imgs/item-status-audio-zero.png new file mode 100644 index 0000000000000000000000000000000000000000..118aa1148dc4b45c581afd4f9c966e3d187fa8bb GIT binary patch literal 870 zcmV-s1DX7ZP)X{M3=7OJkWXA8!=E_r%Cm2 z;3^fu1Xy+C;(!s)RhcyzM6)ufq5Y#WBhLUmM0%Lwo5tAD0s`F%-3PzX*w2I1F3&f$ zn`N{Ip!2_@huH2cotM+b3k{Sz z>k7reF_LSq1pVhh+zA=|74VNO@jLY$ro|$ja{Zy0fnG)uv?|4pc#o?;jMa-AgfT~w zk#1ML2#h~&&h!7PN3Vm_G}#h;ncN4l(=OR- zaE)u@vpPAy>@8&Q3m7hf)ZiLVwMEBOzxJ2C1DG!3wyoB&L-@`v9M0ip??4}eYuwz4 z{{3~Bv&vqa=nk;mTY8B$Q%iXcmdzlpk{hP|&Hs3?T;EI|ulMK%X@BB*DD;T!fZfOv zgcEoc3TtA|#baE9JHB~)d29kY=k~j60W-f!ob!1!=eQ=lV*zdGU8JMOkXh@C__h=3 zO?U>=b=TK>X(#a%IN)+0Xj^dX174inBvX0U!SC{(@U&>i_@%07*qoM6N<$g4ec}DF6Tf literal 0 HcmV?d00001 diff --git a/src/components/page-watch-common/connect-mic/imgs/item-video-close-hover.png b/src/components/page-watch-common/connect-mic/imgs/item-video-close-hover.png new file mode 100644 index 0000000000000000000000000000000000000000..945352fe7124ca94146998fb268c543c81b899b7 GIT binary patch literal 4799 zcmV;w5WD{8w(NP!%Q50st8Bj)W#04FZMHrkJ z_+*o*h=4kvAPUGL(}C977TP4;(=}d7y!hyUkU&S0U!tf@EQ3pjz9wdTH3$$03Zhd1?`7*`dlIUP>(_YU>E?5 z0D$2DkmlvSl>)%`0B{)q@&TaT%k8_>oWB7;rau4xlL24|0I=K|h3hYw0N^SB90!0e z{RxIY06?0f0U#Fu#sUD>b^dwv4LtyS0|3VW;2Z#$z1q5i#+U>k001Tez>@$VVRDcz z&?*Oje*nNq0O)ezJ-4ee0RS?73IHqwfJC=@%Iu3(0PrsWIO=O4d<_7~_0<3{kXinD zjoNhp*x0>ac&$--L%sq)007Sdz*L{~n)yaQ1%S-}pz=0pUjT3)0K5bMVczbnpW9Od zzFa+unquF z_TSD0_X6a@7w#~@T>y~z8{8rI3w~#fJ0Q3N0E(Tz_0RksQwdkXa#zKXs{r7J`~Gb# z^BpZ<+!KE1%Es&p0H|v2xec`)M@+YUj@r=zXH`^Z0l7Xh5mEMTo3;?`L!Hu`Sc+LUbkkJXCN9hd!yhi-+7QV^y zoMql^0dLkGwRgSQ8vxS)0FT!F#d{n;)6FNg&DjG0XMbK_yg=s)#GHui+2KLrdqX%O zA}%{b$l(MDIRFG0I~ol}O{3A!UZdBPpKeqAcv!7#E;o3Oe;&7l7yY;)TX|d91E5bC z+E^SuAsoFTMv(PzWT0qp5SY!56bFh^y5<`l%~y8SH(YqP$z;$m>hIGFTs;hSwu8aH z5B3GW9fHMz=n+dIW5@kDo*g3Mc{2Zu8l}GByLapA&%V`QHrYR%Mvqt=DY}1M0GNhNeBTed_AtfYlN*ELW}8H^1o~WKpz4dqXHeb_PdR(Qgx}-6vD-C+J!T=@{u*2fnTtPA?BxPJkNb2}7e*B0Kf)&ui z*VLqIHOddoEo&|Pyqz1Kz)qcWSi(;j9!jTW)YR(>Ul;ib0Q5ygUnxtW1AvaQC;aKF z89jVaL_+S?6kEoby9}o0|Nf(1`OOBUUR~|bz=Z?D4Lf$sYGLG%$6^R>5Gody(k?%v zk{_5M-rv`l3!E9fIiq_*M19nV&lUc$zKq z+isj_sXDf_QrBGOmPW%BB(alc>=B2g-WT5Z-R8RL&zIN4jC?LC?pJRl6D+pX3Ng0V z>Es7zm$xgS#7}C=0c1*FRS` zUf$Mht9GJD!i_ypGz7c_2TmfSM;2j?ja@b_d z-Af}ACcl?TuULQfjp~{ctF2}}iyK6U#;uKwx%(Lr!40Nlx;+B8i8fx?Tvva7QzHTq zI$&aO%B+3TfS@R=joob2bya`1OkodbhaLC4!t(&|EeXI20Km9QAs(_apD)Xz>-i}2 z%l15o`Z85`5vd%>qerE#sHIJpchprKUs^33y)ruPfmf4(2(Z%l46Ri<`GHwwnyO29 zkL!ePDRp~jXG2H zXUpWxSNE#KGj}J4XU>YY<*ugUtXjT*rp%yeu$Tn`W74_&_&fP6SNHi!^RWjo#;nal z0PwJL#vfB4L+u!Xa>^5~LkvM(rh(idM&=fw=NI*^$S9bJu=w=2~}d8*Ea zA{}befiZ)4;e%!fR7H6zqo&>{nRi6W6J}W-K# z=3n1A>blu%->xRQZ>>-?{^djo$JvWl1tNeO>Rqd&lmE_;Tk0tm+i|qZPOIbxXUUA(mY-w}t;A1!HC8z0MJjGh{o~;# z+5VXr;LTLog#h@){*%7=QX1U`BilQ*L|t->3Z9lOJSh#8OrTue8_vI7Q~kxtT3gQG z2AVqe6Dcn`9V6#|E_jeTx2d+~KYyqtR}3#w!l4`D@boQt?28QYC2iG(*3zB#;O!Mt z3eg(rRMItcr=c-`Jt1#Dt^gKZ%dkXur3T_qvwy4%xox zWu3|b3z#epj}Xt;ogAJuJKC(*c3s^N@;|ckY+e{E`_C#&k6wVc(Bg9Cyh zDbv99og<6rr_!vIiY!i8l0`&yX`2kiTe5x#2o|za=N^{wBBizwIp+FrH`dgg{F9aW zA|!bff521cP|da!y}F{aXj2L$VuD0Ncxk`S&;I$jqO)jIDw85ejR0VH4dYQRgO-DvKLz)mM|Q&8RrMuv}eq zxXl*!ga_Y>i@E0o^y;>hwz4l<%63np%pBqAxgn|ZKTRi}YpXA}mF~Ek$-|h@Zvdpu zKaxUM8uf0Q zaVW!sUdEFAL9D=VYL(S|wp?C+VRI8nBW}Vgv9aUU{H%tS9Bq>AeTYdl)B=ECL{QxL zmxZz8U#9Fpopo2+i?~x@tttsOTL@0crn15Ym@iN$1B6qs-H_CsrwxXWwjeEI_?h!yXjHxOnT}!cJwOMSBT~8yc80@352`E~Zpf%dpKRv*pls`Y+UKp|gV*Ddi+j z|3Dlp9&5F))qneXbFO=g(KQrlN_N~;V$y4=)si%2dqUKR#Uhe%oyr1D@zx>5ZZgu{*DPu%=EuRA zz<7xp|B^6v{5p#mQWqa-Qsh0Vh@bG+xad*OifkRQkcs7cA1WhF)hK3?rtV0LyyFSV zoy6V%jM@hM^&KONbuBV#X5%W!SXPux1aPQ3;kr{VRn~pI!S1T^A!95DF~681a8N8> z2rKJ(d3NK)&2^2Jwl$^9$x96ukLjTjtBdj)6?qFPOok524CaKy2BgkEA_+>k>!t}o zETDZjrHsyed|$fY3rXmJNz^$4FXM~ek^Vro??Z;$Hf=FQ_{A7U_Jk7}$L5A7vQy^d z4d8?&T6@5myUev;t*xY6D1(zm@>AyINjaf$y?V>xhTCv)OI_WW^-8+fL7EAZ-Vnvy zyVAWZxIu0o|U}s(l#3udGpFzub;3= zH^~l)U`6E26NC+#7Qu^<@HoM-Tp(Cr(AFDtjinuJCCAh)1^ZQWZHJ;Y{HchQ z7jL*qink6fCNF3h2Ek&E_REC~%J9V8EeTP>7f~A_wISABYcJpTP`NiXlK4p*@p31g z&it+pm7#R!UB$Yl8+I>u7y!d^A;b8Uq(z3$J1n7JhLD3*6&z@&_~eO7(yat9X7Ehl ztVf(J({RI0%-xzqm-#B7qFxY zPYvY94ejB@<_V)LYU#dd<$jd;^zK_ZW-;QLn7yhthmBfGcWKGrU0-o@QKi|~^Yl*; z1fWw@?6@@vEMBNb)>_o_m1kb9X}r9>*-zSz?Y!yXnuryA?wl*gemE>~@_S;;4qSI? zU3KH-9S(JGJgmhG|6OF{h($uW`P$)1AP94(vOudU{HVG9+@=OU9I|fK#U9SNSlO@c z=?)o+20GCYUg&^Hp~2#@p}a^5FMuDx2?&f}gV}7xbAYj3Y58d?&bGA_ex%m7$eA>( zIWq*Zj$QY3zXxczGJ;#UZm$6vI3~Z@g>GSny4v+#LzJ+gJ`tqn>WFT!`Zo>IL%q3A zgsI+QOm()q4#QNjA-@M|3$h;xOUm6M4hV{J$|c>|(PQ9-4`YCx>4w8VZEVEvsS4~J z*qj-iGj)6%f_k$qIGw7%?<#5bs=6H8@KI-&>r5R#0^oGA4ssRvEnN+HVDmNzUD_sn z<*{cJs=|Z5NJDTl{9R60gN^kkY;tBvIakN!giU0#{VB_wWAM#txt+2M8%2jG%pJtI z@2KbF?h`F|oU{)|(Vw=`eJnjrTS=1cPu%J{2$l;MN3Zp`G3w=o{?x^eIBEUd>#2*e z`TpeH&Vk^Qq*l6A8@b_0wW)AAW8e(VCS4PV6+xvpD>|=(Ekyi zpS}^m_(y!`;;8>KR(|@76@6pw|B#!T($3j)fTQO7KV|5ML%lrr768~h9@g;Fe!uij zonUe+T=7o%s5-*Mn*fls`afsui0icHz5sxO`Dp|;BR@5H2bsR|PSkR3uGCIY~deIY%5FI+;u9Sqw&Y439* zE^*e$%1i=4b_r>Y27p`u80*hu;oTiVU(Ig-;1~d$qv!T_l7}8u^9KO*4x>Xbrpuq) z?F7&x-MmMm>-}Z)&&RJC9R~pP)ud9T`G{Vx&H5VvTQD$r(unS#w-d>tYsls9ANuF} zjp_73_ay*qX9>o5VOmS_hZz)w7$(pi*-8G3?_n%4#+Q-*V#)zbJENfetm2KCp6R{O Z`#;j6cas9VM7RI|002ovPDHLkV1j*6M6dt= literal 0 HcmV?d00001 diff --git a/src/components/page-watch-common/connect-mic/imgs/item-video-close.png b/src/components/page-watch-common/connect-mic/imgs/item-video-close.png new file mode 100644 index 0000000000000000000000000000000000000000..9a21e5bd0a55eb54b864db2436a9fee0cee88873 GIT binary patch literal 4796 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 DzM&xe literal 0 HcmV?d00001 diff --git a/src/components/page-watch-common/connect-mic/imgs/item-video-open-hover.png b/src/components/page-watch-common/connect-mic/imgs/item-video-open-hover.png new file mode 100644 index 0000000000000000000000000000000000000000..af43634247de77f5cf36b4b2b8a30eb2d17a3b8a GIT binary patch literal 3367 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 literal 0 HcmV?d00001 diff --git a/src/components/page-watch-common/connect-mic/imgs/phone.png b/src/components/page-watch-common/connect-mic/imgs/phone.png new file mode 100644 index 0000000000000000000000000000000000000000..013aab8bd65bc1f04db10e4c7ee563f4554e081d GIT binary patch literal 563 zcmV-30?hr1P)_k*HPv0nyOW zNHp7sjz1tI!mb91LMv+}Vz1|1J2!L3% + + + + + diff --git a/src/components/page-watch-common/connect-mic/mobile-connect-mic/mobile-connect-mic-user-item.vue b/src/components/page-watch-common/connect-mic/mobile-connect-mic/mobile-connect-mic-user-item.vue new file mode 100644 index 0000000..dfeb10a --- /dev/null +++ b/src/components/page-watch-common/connect-mic/mobile-connect-mic/mobile-connect-mic-user-item.vue @@ -0,0 +1,91 @@ + + + + + + diff --git a/src/components/page-watch-common/connect-mic/mobile-connect-mic/mobile-connect-mic-user-list.vue b/src/components/page-watch-common/connect-mic/mobile-connect-mic/mobile-connect-mic-user-list.vue new file mode 100644 index 0000000..74a24d5 --- /dev/null +++ b/src/components/page-watch-common/connect-mic/mobile-connect-mic/mobile-connect-mic-user-list.vue @@ -0,0 +1,63 @@ + + + + + + diff --git a/src/components/page-watch-common/connect-mic/pc-connect-mic/pc-connect-mic-bottom.vue b/src/components/page-watch-common/connect-mic/pc-connect-mic/pc-connect-mic-bottom.vue new file mode 100644 index 0000000..f99eca1 --- /dev/null +++ b/src/components/page-watch-common/connect-mic/pc-connect-mic/pc-connect-mic-bottom.vue @@ -0,0 +1,54 @@ + + + + + + diff --git a/src/components/page-watch-common/connect-mic/pc-connect-mic/pc-connect-mic-button.vue b/src/components/page-watch-common/connect-mic/pc-connect-mic/pc-connect-mic-button.vue new file mode 100644 index 0000000..df86b17 --- /dev/null +++ b/src/components/page-watch-common/connect-mic/pc-connect-mic/pc-connect-mic-button.vue @@ -0,0 +1,84 @@ + + + + + + diff --git a/src/components/page-watch-common/connect-mic/pc-connect-mic/pc-connect-mic-confirm.vue b/src/components/page-watch-common/connect-mic/pc-connect-mic/pc-connect-mic-confirm.vue new file mode 100644 index 0000000..b341319 --- /dev/null +++ b/src/components/page-watch-common/connect-mic/pc-connect-mic/pc-connect-mic-confirm.vue @@ -0,0 +1,93 @@ + + + + + + diff --git a/src/components/page-watch-common/connect-mic/pc-connect-mic/pc-connect-mic-placeholder.vue b/src/components/page-watch-common/connect-mic/pc-connect-mic/pc-connect-mic-placeholder.vue new file mode 100644 index 0000000..b8282d7 --- /dev/null +++ b/src/components/page-watch-common/connect-mic/pc-connect-mic/pc-connect-mic-placeholder.vue @@ -0,0 +1,71 @@ + + + + + + diff --git a/src/components/page-watch-common/connect-mic/pc-connect-mic/pc-connect-mic-user-item-control.vue b/src/components/page-watch-common/connect-mic/pc-connect-mic/pc-connect-mic-user-item-control.vue new file mode 100644 index 0000000..2577117 --- /dev/null +++ b/src/components/page-watch-common/connect-mic/pc-connect-mic/pc-connect-mic-user-item-control.vue @@ -0,0 +1,164 @@ + + + + + + diff --git a/src/components/page-watch-common/connect-mic/pc-connect-mic/pc-connect-mic-user-item.vue b/src/components/page-watch-common/connect-mic/pc-connect-mic/pc-connect-mic-user-item.vue new file mode 100644 index 0000000..70989d9 --- /dev/null +++ b/src/components/page-watch-common/connect-mic/pc-connect-mic/pc-connect-mic-user-item.vue @@ -0,0 +1,109 @@ + + + + + + diff --git a/src/components/page-watch-common/connect-mic/pc-connect-mic/pc-connect-mic-user-list.vue b/src/components/page-watch-common/connect-mic/pc-connect-mic/pc-connect-mic-user-list.vue new file mode 100644 index 0000000..6ac0a6d --- /dev/null +++ b/src/components/page-watch-common/connect-mic/pc-connect-mic/pc-connect-mic-user-list.vue @@ -0,0 +1,56 @@ + + + + + + diff --git a/src/components/page-watch-common/connect-mic/pc-connect-mic/pc-connect-mic.vue b/src/components/page-watch-common/connect-mic/pc-connect-mic/pc-connect-mic.vue new file mode 100644 index 0000000..ee13b64 --- /dev/null +++ b/src/components/page-watch-common/connect-mic/pc-connect-mic/pc-connect-mic.vue @@ -0,0 +1,56 @@ + + + + + + diff --git a/src/components/page-watch-common/count-down-layer/mobile-count-down-layer.vue b/src/components/page-watch-common/count-down-layer/mobile-count-down-layer.vue new file mode 100644 index 0000000..8a26877 --- /dev/null +++ b/src/components/page-watch-common/count-down-layer/mobile-count-down-layer.vue @@ -0,0 +1,115 @@ + + + + + + diff --git a/src/components/page-watch-common/count-down-layer/pc-count-down-layer.vue b/src/components/page-watch-common/count-down-layer/pc-count-down-layer.vue new file mode 100644 index 0000000..f802290 --- /dev/null +++ b/src/components/page-watch-common/count-down-layer/pc-count-down-layer.vue @@ -0,0 +1,113 @@ + + + + + + diff --git a/src/components/page-watch-common/count-down-layer/portrait-count-down-layer.vue b/src/components/page-watch-common/count-down-layer/portrait-count-down-layer.vue new file mode 100644 index 0000000..edbea0b --- /dev/null +++ b/src/components/page-watch-common/count-down-layer/portrait-count-down-layer.vue @@ -0,0 +1,59 @@ + + + + + + diff --git a/src/components/page-watch-common/count-down-layer/use-count-down-layer.ts b/src/components/page-watch-common/count-down-layer/use-count-down-layer.ts new file mode 100644 index 0000000..e3ad6ed --- /dev/null +++ b/src/components/page-watch-common/count-down-layer/use-count-down-layer.ts @@ -0,0 +1,17 @@ +import { useChannelStore } from '@/store/use-channel-store'; +import { computed } from 'vue'; +import { ChannelPlayMode } from '@polyv/live-watch-sdk'; + +export const useCountDownLayer = () => { + const channelStore = useChannelStore(); + + /** 是否显示右上角模式 */ + const isTopRightStyle = computed(() => { + const playMode = channelStore.channelDetail?.playbackInfo?.playMode; + return typeof playMode !== 'undefined' && playMode !== ChannelPlayMode.End; + }); + + return { + isTopRightStyle, + }; +}; diff --git a/src/components/page-watch-common/custom-tuwen-text-menu/mobile-custom-tuwen-text-menu.vue b/src/components/page-watch-common/custom-tuwen-text-menu/mobile-custom-tuwen-text-menu.vue new file mode 100644 index 0000000..45e9833 --- /dev/null +++ b/src/components/page-watch-common/custom-tuwen-text-menu/mobile-custom-tuwen-text-menu.vue @@ -0,0 +1,32 @@ + + + + + + diff --git a/src/components/page-watch-common/doc/_hooks/use-keydown-control.ts b/src/components/page-watch-common/doc/_hooks/use-keydown-control.ts new file mode 100644 index 0000000..3aa5012 --- /dev/null +++ b/src/components/page-watch-common/doc/_hooks/use-keydown-control.ts @@ -0,0 +1,53 @@ +import { KeyCodeMap } from '@/assets/constants/key-code'; +import { getWatchCore } from '@/core/watch-sdk'; +import { useLayoutStore } from '@/store/use-layout-store'; +import { usePlaybackStore } from '@/store/use-playback-store'; +import { MainScreenContent } from '@polyv/live-watch-sdk'; +import { onBeforeUnmount, watchEffect } from 'vue'; + +/** + * 文档键盘控制 hook + */ +export const useDocKeydownControl = () => { + const layoutStore = useLayoutStore(); + const playbackStore = usePlaybackStore(); + + function onKeydownEvent(event: KeyboardEvent) { + const keyCode = event.keyCode; + if (layoutStore.mainScreen !== MainScreenContent.Doc) { + return; + } + + const watchCore = getWatchCore(); + + if (keyCode === KeyCodeMap.ArrowLeft) { + watchCore.doc.gotoPrev(); + return; + } + + if (keyCode === KeyCodeMap.ArrowRight) { + watchCore.doc.gotoNext(); + } + } + + function listenEvent() { + removeListenEvent(); + window.addEventListener('keydown', onKeydownEvent); + } + + function removeListenEvent() { + window.addEventListener('keydown', onKeydownEvent); + } + + watchEffect(() => { + if (playbackStore.isPlaybacking) { + listenEvent(); + } else { + removeListenEvent(); + } + }); + + onBeforeUnmount(() => { + removeListenEvent(); + }); +}; diff --git a/src/components/page-watch-common/doc/doc-side-switch/mobile-doc-side-switch.vue b/src/components/page-watch-common/doc/doc-side-switch/mobile-doc-side-switch.vue new file mode 100644 index 0000000..09254be --- /dev/null +++ b/src/components/page-watch-common/doc/doc-side-switch/mobile-doc-side-switch.vue @@ -0,0 +1,41 @@ + + + + + + diff --git a/src/components/page-watch-common/doc/doc-side-switch/side.png b/src/components/page-watch-common/doc/doc-side-switch/side.png new file mode 100644 index 0000000000000000000000000000000000000000..f0574cac4d60ec62689ccb58f8ab3c9a2c4244d8 GIT binary patch literal 1539 zcmV+e2K@PnP)A8yjJi-1L|Q3Yg+Q|LvmgXSqM%XSM9m^DjD(pn5I0#wnvG~G zXb>SFX#LnE5YSqREg~qoP-~FZqT-~+QX3=U$<<9``1K&oeHwwUQz?J_-xt6~jh@L1pccuGWq6$z z^?hoc_->=cb|ZkAX`jpB4kIeGN_mZg`|54`8UcJfLwnn}p;eZrz4JS@DyauhMgajd z={x}etg_W1(7M6+pQjpGjF6f&wg+N_#syJImJZ#l^*A0|Ns`N~KaLgJ{U- zeZz5?x?7;k^1DJ77+NeSz{>op`1tYTrv?WH4=yb&X^cuE9kJa3;RO}Kv7bur>HHkP$(Q88ynl%-rlY?Y&os2uAc4g?*1^r z$wg6N`vg!SW@F7VSw#h?WlwK!@AkR5xjkK7U2;2ENnjHm4`u3_6u_H+r&4cvc7<^O zR8hHHZrl9){I0&fz8;N({r&xlgGoB=7eG126_(MI6c<28`O(qQ>t<(XPbAoN-JA{x zpx_B&Q&QXjQ+|j;0;uk*ZrqfVaezMv;PZBykTzSn@Bpo?Tq?!{Sxbh7hIUL%P5t85H{;6~%b1XgIcs5IVYg#ya(mG-4$v}Z zC2mm7=kq;nkiAFG>MWD=hPO#?6JY7NdZA%}r3vwE4A3*gSK=nfygo$FAajXoN%KP5p}yWd zr|CI-A9IkV=AcdW`|^Fz#t}6~z0N}neAG*#=CI*8fT0f?O4uBCjd0x6X~5>db%XiK z>%g@{&5{3z03~iNou~uRPYZNJ&9x^rAO-;_aouw&KeD-a$A%dcpv278Pp+022B0%0 zn#;!`o((bA-$exIG-PuDV+?i + + + + + diff --git a/src/components/page-watch-common/doc/imgs/icon-doc-hide.png b/src/components/page-watch-common/doc/imgs/icon-doc-hide.png new file mode 100644 index 0000000000000000000000000000000000000000..8c16e3b82ad7c601cda3491adab229e90e9461e7 GIT binary patch literal 1547 zcmeAS@N?(olHy`uVBq!ia0vp^At21b3?#L;KKKlzSkfJR9T^xl_H+M9WMyDroEqR0 z;tCW$ckbNXyLa8(+<$SiAoua($Jef1`~UwxMC$bE z(;q*6gexP7AuKF>=gyroXU+h1y?*@~NCF+!-rf!|q_wp*H#b*QR20ojp!?n3-O&W$ zTu)C=Ap60C2gr^GIvB11598v+i&w5(fhf3e;R0MGP#n$%GQ7RLfg~`jAmUfAUWLnE zzI+*C!u|XAfr3D1K%`h%fiVCDTwGl2?CfwUU`WnCrXmKEY%2-!3+6s@wbD^f-B?)e zO{bb^>?(0Sk*>_3n`i&pDIR{MYoy7m0Y3HA>q@9*x) zy}IlBywdl9?x6yOA(E#AG%qPN-BH~0z5M$F2i~}MlVs}ZKTfo^^M7>oi7%gO>7#-+NDo~FEqP~mo`k95otfQM zi`xP%B9C6YVD?0@*kaeQX zLS9{PRqOd%hfJ-G=ie$?K27J>oTx7UBb%Sq-TG5Lwbs+VLkebHVq z_t(Y#(|(z^Y?NjS-0)l+d}Xiyi3`p@pD#`Nw=ZaSrbVxr!NTX8Dp$=Y{Ay{?>ee85 zc1Hc9mZ$@Ii~S`7WrY{GxMknGz&*Q9lRtC{&xOVIscSWI|0&HD@K$2H5w$9t$>o9p zd(?`|CV5-tZSR%`6(~M$oL+L9?Nh-5ubL&_`W6_oZDDs_>Kc^T7@^fsUZT6!jd7Y~ z$xhpeXIE=+K;S9ovfaPiM#C877sd#Asf-I0C#$5&_1FFNs?a+m~G-s}9m;p65r z4aYi~>zU+VyybaOZsL}eDcPnbaUscNjkmhj`KK`=8yBZNxxS|^^Kr&YgG({rja~~X zM>S3|HBsZvnsj}I;ii>Wcv@L=UTo~?6MDX6@tLYA3C{aZu86&2*eK|_a?^6JyLa}- z-M@L^SBb9as$?xw7U%cDFZOgtsB4#ctZI6*VBYs8uZy?+jf_j@eqZ_|dWoy;Os^=8 z>{$%+_ZGgow?5rmXy@0Ry%FlKpM9t*|HLRC+WbeYNbD7)~DaW+ptj2 z)9R_w;zMtF-)Fyxx_v->pK3nu{rB?Ek|po*JHn@mvv4FO#o%Gb4~yN literal 0 HcmV?d00001 diff --git a/src/components/page-watch-common/doc/imgs/icon-doc-show.png b/src/components/page-watch-common/doc/imgs/icon-doc-show.png new file mode 100644 index 0000000000000000000000000000000000000000..435b55578c5a76205186f42611a3419b8e72f639 GIT binary patch literal 1671 zcmaJ>2T+qq7>$M|O^QenqzFL_gq(Dc4vCzU5Kt*fZ&D=$DY-+#K@gOFNDM-5r~$-7 z1;L==NQa;Vf=ZJ}PO3muFc2yCD>LXgH}}o#+xOo0W_M?2XVX!RND)CfK@bQeVt3L8 z4a}}zhX5ErXe09zF!2OiI#_~0ce8~ye0f2jJs(l_uC}3}p(-jWX=!N;1_Q|aSX?d_ ziA08kgpkSP_4W0*xVY`@Z6J`7lLO$^))s(jYHDA;d;tiH#R5=DN@`+a0%+;!=>f8^ zurMPd0}KX_jEn#hsI|4V=H}*zhzL(lPaF;hI9Mz;J3HIi*;z?R34uWL_4TpY?DFz* z3k!?k;o-!@L~U*D;^N}*@$uQ&Sz%#eEiEm8d|T{00LR-AzzM6XtG_qCvFPaNpBzBW z%*;@!)E(d2+WMz}q@-kIWaLlgj@;PT_)mYwTv%ABt*x!BtOW3XVmqz6y1L!Wz=1rUS5FqupZ4GkF?ncVsgx&MF(e;pY@vtUzr4_(}w1TCq#+6I@O$>vF zE28cY@g|Q;qJ~PE{$=iUk0|gwQIDQJbF=4oeIsRzd@)RwR3OCdsXZu0>DU)8?&L1( zyg=b6>d-q=NV-dGezlgX03e)WMg_$;A+l)^c3G3aScYU1Wog{q<~ zsxT2G!qR0->>;2L)_qTX5YOmIWsvw@gVKX!-viTQ!xWrwX-<&dXu2VGZjOu+T&mVr zgVI%L9c0m?G2W~E42=Q4ly&<+zB@Jg4{n#G63y>ST@l=@jciO68@*0d;Fo^Fn{Q?9 z8!uwo8&l;{9V}?Je5`kf@OeO6@h>c|-nuZ+m*Rg8vG5`2@At7?XcQ%nF7KriL?Gz% zIBSn?z=~Rvz*15U64YyBgo|g~YgC>Q3zkE!bXGtY)!T3lC6<0w8{B&42eTx}8iBe=oPvPv(&>g+L&>~u zO#I@?XClvHaFn^h6E0d&Dyiy5@?arqJ4@I1j8&K}-7D~NdkIG(R6=jyux)F4&u3=6 zdS=!~(#S`*8bU@VhBP?LPk(77M?KEhR#X}mIN({6dZ~*!W;!;1(t|xfZ?7vTC5j3F%@r~uv9vnGfB@icXN$3WvArtx~qEgm}U}id9Qqh%hDKkC2QNuUQB1y=m)lIJC#A3I> zrFrlfI3+`}J?Jvvst& IW95_lFFq)-jQ{`u literal 0 HcmV?d00001 diff --git a/src/components/page-watch-common/doc/imgs/player-ppt.png b/src/components/page-watch-common/doc/imgs/player-ppt.png new file mode 100644 index 0000000000000000000000000000000000000000..b64ff9a01eb3b742f531033f9247a9412cf7a0dd GIT binary patch literal 55385 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 literal 0 HcmV?d00001 diff --git a/src/components/page-watch-common/doc/mobile-doc.vue b/src/components/page-watch-common/doc/mobile-doc.vue new file mode 100644 index 0000000..48d243f --- /dev/null +++ b/src/components/page-watch-common/doc/mobile-doc.vue @@ -0,0 +1,31 @@ + + + + + + diff --git a/src/components/page-watch-common/doc/pc-doc-empty-placeholder.vue b/src/components/page-watch-common/doc/pc-doc-empty-placeholder.vue new file mode 100644 index 0000000..9e7f0ae --- /dev/null +++ b/src/components/page-watch-common/doc/pc-doc-empty-placeholder.vue @@ -0,0 +1,25 @@ + + + + diff --git a/src/components/page-watch-common/doc/pc-doc.vue b/src/components/page-watch-common/doc/pc-doc.vue new file mode 100644 index 0000000..645ffd7 --- /dev/null +++ b/src/components/page-watch-common/doc/pc-doc.vue @@ -0,0 +1,39 @@ + + + + + + diff --git a/src/components/page-watch-common/doc/portrait-doc.vue b/src/components/page-watch-common/doc/portrait-doc.vue new file mode 100644 index 0000000..4d33b57 --- /dev/null +++ b/src/components/page-watch-common/doc/portrait-doc.vue @@ -0,0 +1,31 @@ + + + + + + diff --git a/src/components/page-watch-common/doc/use-doc.ts b/src/components/page-watch-common/doc/use-doc.ts new file mode 100644 index 0000000..73a9526 --- /dev/null +++ b/src/components/page-watch-common/doc/use-doc.ts @@ -0,0 +1,99 @@ +import { getWatchCore } from '@/core/watch-sdk'; +import { useChannelStore } from '@/store/use-channel-store'; +import { computed, nextTick, onBeforeUnmount, onMounted, ref, unref, watch } from 'vue'; +import { DocEvents, LiveStatus, SetupDocOptions } from '@polyv/live-watch-sdk'; +import { useLayoutStore } from '@/store/use-layout-store'; +// import { useMarquee } from '@/components/common-business/marquee/use-marquee'; +import { appEvents, useEventBusListener } from '@/app/app-events'; +import { useDocStore } from '@/store/use-doc-store'; +import { usePlaybackStore } from '@/store/use-playback-store'; + +export const useDoc = ( + useOptions: { + setupOptions?: Partial; + } = {}, +) => { + const docStore = useDocStore(); + const channelStore = useChannelStore(); + const layoutStore = useLayoutStore(); + const playbackStore = usePlaybackStore(); + + /** 创建文档的外层节点 */ + const wrapRef = ref(); + + // useMarquee({ + // containerRef: wrapRef, + // }); + + /** 初始化文档 */ + function initDoc() { + const { setupOptions = {} } = useOptions; + const wrapElem = unref(wrapRef); + if (!wrapElem) return; + + if (!docStore.docEnabled) return; + + const watchCore = getWatchCore(); + watchCore.doc.setupDoc({ + container: wrapElem, + keyboardEnabled: !playbackStore.isPlaybacking, + ...setupOptions, + }); + + listenDocEvent(); + } + + function listenDocEvent() { + unlistenDocEvent(); + const watchCore = getWatchCore(); + watchCore.doc.eventEmitter.on(DocEvents.FullScreenStateChange, onFullScreenStateChange); + } + + function unlistenDocEvent() { + const watchCore = getWatchCore(); + watchCore.doc.eventEmitter.off(DocEvents.FullScreenStateChange, onFullScreenStateChange); + } + + function onFullScreenStateChange(evt: { isFullScreen: boolean }) { + layoutStore.$patch({ + mobileDocIsPageFullscreen: evt.isFullScreen, + }); + } + + useEventBusListener(appEvents.doc.ResetUpDoc, () => { + initDoc(); + }); + + onMounted(() => { + initDoc(); + }); + + /** 暂无直播状态是否显示 */ + const emptyPlaceholderVisible = computed(() => { + if ( + [LiveStatus.UnStart, LiveStatus.End, LiveStatus.Waiting].includes(channelStore.liveStatus) + ) { + return true; + } + + return false; + }); + + watch( + () => [layoutStore.mainScreen, layoutStore.mobileDocIsPageFullscreen], + async () => { + await nextTick(); + const watchCore = getWatchCore(); + watchCore.doc.resize(); + }, + ); + + onBeforeUnmount(() => { + unlistenDocEvent(); + }); + + return { + wrapRef, + emptyPlaceholderVisible, + }; +}; diff --git a/src/components/page-watch-common/donate/donate-animation/donate-animation-item.vue b/src/components/page-watch-common/donate/donate-animation/donate-animation-item.vue new file mode 100644 index 0000000..53e22a1 --- /dev/null +++ b/src/components/page-watch-common/donate/donate-animation/donate-animation-item.vue @@ -0,0 +1,249 @@ + + + + + + diff --git a/src/components/page-watch-common/donate/donate-animation/donate-animation.vue b/src/components/page-watch-common/donate/donate-animation/donate-animation.vue new file mode 100644 index 0000000..266f6a8 --- /dev/null +++ b/src/components/page-watch-common/donate/donate-animation/donate-animation.vue @@ -0,0 +1,39 @@ + + + + + + diff --git a/src/components/page-watch-common/donate/donate-animation/imgs/donate-float-tips-bg.png b/src/components/page-watch-common/donate/donate-animation/imgs/donate-float-tips-bg.png new file mode 100644 index 0000000000000000000000000000000000000000..5560b0e33affe9a8f4dc6c2b55c782486ef24468 GIT binary patch literal 18875 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 GLge3o1BF}w literal 0 HcmV?d00001 diff --git a/src/components/page-watch-common/donate/donate-animation/imgs/donate-float-tips-redpaper.png b/src/components/page-watch-common/donate/donate-animation/imgs/donate-float-tips-redpaper.png new file mode 100644 index 0000000000000000000000000000000000000000..08a05c1be55f9333f3028b8d2949f20c64fa6708 GIT binary patch literal 8546 zcmV-oA)VfdP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00006 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 literal 0 HcmV?d00001 diff --git a/src/components/page-watch-common/donate/donate-animation/styles/var.scss b/src/components/page-watch-common/donate/donate-animation/styles/var.scss new file mode 100644 index 0000000..350c53f --- /dev/null +++ b/src/components/page-watch-common/donate/donate-animation/styles/var.scss @@ -0,0 +1,6 @@ +// 打赏动画宽度 +$--donate-animation-item-width: 270px; +// 打赏动画高度 +$--donate-animation-item-height: 40px; +// 打赏动画距离 +$--donate-animation-item-margin: 32px; diff --git a/src/components/page-watch-common/donate/donate-animation/use-donate-animation.ts b/src/components/page-watch-common/donate/donate-animation/use-donate-animation.ts new file mode 100644 index 0000000..12f3ec8 --- /dev/null +++ b/src/components/page-watch-common/donate/donate-animation/use-donate-animation.ts @@ -0,0 +1,147 @@ +import { PropUtils, VueProps } from '@/assets/utils/vue-utils/props-utils'; +import { getWatchCore } from '@/core/watch-sdk'; +import { useDonateStore } from '@/store/use-donate-store'; +import { useInteractReceiveStore } from '@/store/use-interact-receive-store'; +import { + ChatEvents, + ChatMsgRewardType, + ChatMsgSource, + ChatMsgType, + DonateType, +} from '@polyv/live-watch-sdk'; +import { uuidV4 } from '@utils-ts/string'; +import { onBeforeUnmount, onMounted, ref, unref } from 'vue'; + +/** 打赏动画轨道节点 */ +export interface AnimationTrackItem { + /** 动画 id */ + animationId: string; + /** 昵称 */ + nick: string; + /** 礼物道具图片 */ + gimg: string; + /** 礼物数量 */ + count: number; + /** 打赏内容 */ + rewardContent: string; + /** 打赏类型 */ + donateType: DonateType; +} + +export const donateAnimationProps = () => ({ + /** 动画轨道数 */ + trackCount: PropUtils.number.def(3), +}); + +export const useDonateAnimation = (options: { props: VueProps }) => { + const interactReceiveStore = useInteractReceiveStore(); + const donateStore = useDonateStore(); + + const { props } = options; + + /** 节点高度(高度+距离) */ + const itemHeight = 40 + 32; + + /** 动画轨道列表 */ + const trackList = ref([]); + + /** 等待队列 */ + const waitQueue: ChatMsgRewardType[] = []; + + /** 检查动画轨道 */ + function checkAnimationTrack() { + if (!waitQueue.length || interactReceiveStore.isGoOnRedpackRain) { + return; + } + + if (unref(trackList).length < props.trackCount) { + // 有空位,则补充空位 + const surplusCount = props.trackCount - unref(trackList).length; + const pushList = waitQueue.splice(0, surplusCount); + + pushList.forEach(chatMsg => { + trackList.value.push({ + animationId: uuidV4(), + nick: chatMsg.user.nick, + gimg: chatMsg.gimg, + count: chatMsg.goodNum ?? 1, + rewardContent: chatMsg.rewardContent, + donateType: chatMsg.donateType, + }); + }); + } + } + + /** + * 处理节点离开完毕 + * @param animationId 动画 id + */ + function onItemLeaved(animationId: string) { + const index = trackList.value.findIndex(item => item.animationId === animationId); + if (index !== -1) { + trackList.value.splice(index, 1); + checkAnimationTrack(); + } + } + + /** + * 打赏道具是否可以插入到队列中 + */ + function canPushInQueue(chatMsg: ChatMsgRewardType) { + const isSelfGood = chatMsg.isSelf; + const isPayGood = !chatMsg.isFree; + + // 自己打赏的必须插入 + if (isSelfGood) { + return true; + } + + // 屏蔽了其他人的打赏动画 + if (!donateStore.donateAnimationVisible) { + return false; + } + + return isPayGood || waitQueue.length < 100; + } + + /** 处理聊天室消息 */ + function onChatMsgEvent(evt: { chatMsg: ChatMsgType }) { + const chatMsg = evt.chatMsg; + // 非打赏消息 + if (chatMsg.msgSource !== ChatMsgSource.Reward) { + return; + } + + /** 是否需要插入到队列中 */ + const pushInQueue = canPushInQueue(chatMsg); + const isSelfGood = chatMsg.isSelf; + + if (!pushInQueue) { + return; + } + + if (isSelfGood) { + // 如果是自己的打赏则优先显示 + waitQueue.unshift(chatMsg); + } else { + waitQueue.push(chatMsg); + } + checkAnimationTrack(); + } + + onMounted(() => { + const watchCore = getWatchCore(); + watchCore.chat.eventEmitter.on(ChatEvents.ChatMessage, onChatMsgEvent); + }); + + onBeforeUnmount(() => { + const watchCore = getWatchCore(); + watchCore.chat.eventEmitter.off(ChatEvents.ChatMessage, onChatMsgEvent); + }); + + return { + trackList, + itemHeight, + onItemLeaved, + }; +}; diff --git a/src/components/page-watch-common/donate/donate-panel/hooks/types.ts b/src/components/page-watch-common/donate/donate-panel/hooks/types.ts new file mode 100644 index 0000000..0391f37 --- /dev/null +++ b/src/components/page-watch-common/donate/donate-panel/hooks/types.ts @@ -0,0 +1,7 @@ +/** + * 打赏选项 + */ +export type DonateOptions = { + /** 打赏成功回调 */ + donateSuccess?: () => void; +}; diff --git a/src/components/page-watch-common/donate/donate-panel/hooks/use-donate-cash.ts b/src/components/page-watch-common/donate/donate-panel/hooks/use-donate-cash.ts new file mode 100644 index 0000000..852d530 --- /dev/null +++ b/src/components/page-watch-common/donate/donate-panel/hooks/use-donate-cash.ts @@ -0,0 +1,68 @@ +/** + * @file 现金打赏 hook + */ + +import { useFormatPrice } from '@/hooks/tools/use-format'; +import { translate } from '@/assets/lang'; +import { toast } from '@/hooks/components/use-toast'; +import { ref, unref } from 'vue'; +import { useDonatePay } from './use-donate-pay'; +import { DonateType } from '@polyv/live-watch-sdk'; +import { useDonateStore } from '@/store/use-donate-store'; +import { storeDefinitionToRefs } from '@/plugins/pinia/util'; +import { DonateOptions } from './types'; + +/** 现金打赏 hook */ +export const useDonateCash = (donateOptions: DonateOptions = {}) => { + // 打赏成功回调 + const donateSuccess = donateOptions.donateSuccess; + + const { donateCashMin } = storeDefinitionToRefs(useDonateStore); + const { payDonate } = useDonatePay(); + + /** 现金金额 */ + const cashAmount = ref('0'); + const { randomPrice } = useFormatPrice(cashAmount); + + /** 处理点击随机 */ + function onClickRandom() { + randomPrice(); + } + + /** 处理点击快捷选项 */ + function onClickQuickOptions(amount: number) { + cashAmount.value = `${amount}`; + } + + /** 打赏现金 */ + async function donateCash() { + const cash = Number(unref(cashAmount)); + if (cash === 0) { + toast.error(translate('donate.error.notZero')); + return; + } + + if (cash < unref(donateCashMin)) { + toast.error( + translate('donate.error.mini', { + price: unref(donateCashMin).toString(), + }), + ); + return; + } + + await payDonate({ + donateType: DonateType.Cash, + amount: `${cash}`, + }); + + donateSuccess && donateSuccess(); + } + + return { + cashAmount, + onClickRandom, + onClickQuickOptions, + donateCash, + }; +}; diff --git a/src/components/page-watch-common/donate/donate-panel/hooks/use-donate-good-point.ts b/src/components/page-watch-common/donate/donate-panel/hooks/use-donate-good-point.ts new file mode 100644 index 0000000..5af62f0 --- /dev/null +++ b/src/components/page-watch-common/donate/donate-panel/hooks/use-donate-good-point.ts @@ -0,0 +1,55 @@ +/** + * @file 礼物打赏(积分)hook + */ +import { translate } from '@/assets/lang'; +import { toast } from '@/hooks/components/use-toast'; +import { getWatchCore } from '@/core/watch-sdk'; +import { DonateGoodInfo, useDonateStore } from '@/store/use-donate-store'; +import { storeDefinitionToRefs } from '@/plugins/pinia/util'; +import { onMounted, ref, unref } from 'vue'; + +/** 礼物打赏(积分)hook */ +export const useDonateGoodPoint = () => { + const { donatePointEnabled } = storeDefinitionToRefs(useDonateStore); + + /** 当前用户剩余的积分总数 */ + const surplusPoint = ref(0); + /** 获取当前用户剩余的积分 */ + async function getSurplusPoint() { + const watchCore = getWatchCore(); + try { + const points = await watchCore.donate.getDonateSurplusPoint(); + surplusPoint.value = points; + } catch (e) { + toast.error(translate('donate.point.getFail')); + } + } + + /** 处理打赏积分礼物 */ + async function donatePointGood(good: DonateGoodInfo, count: number): Promise { + const watchCore = getWatchCore(); + try { + const points = await watchCore.donate.payDonatePoint({ + goodId: good.goodId, + goodCount: count, + }); + surplusPoint.value = points; + } catch (e) { + const err = e as Error; + toast.error(err.message || translate('donate.error.unknown')); + } + } + + onMounted(() => { + if (unref(donatePointEnabled)) { + getSurplusPoint(); + } + }); + + return { + /** 当前剩余积分 */ + surplusPoint, + /** 进行积分礼物打赏 */ + donatePointGood, + }; +}; diff --git a/src/components/page-watch-common/donate/donate-panel/hooks/use-donate-good.ts b/src/components/page-watch-common/donate/donate-panel/hooks/use-donate-good.ts new file mode 100644 index 0000000..96519b9 --- /dev/null +++ b/src/components/page-watch-common/donate/donate-panel/hooks/use-donate-good.ts @@ -0,0 +1,71 @@ +/** + * @file 道具打赏 hook + */ + +import { translate } from '@/assets/lang'; +import { toast } from '@/hooks/components/use-toast'; +import { DonateGoodInfo, useDonateStore } from '@/store/use-donate-store'; +import { storeDefinitionToRefs } from '@/plugins/pinia/util'; +import { DonateType } from '@polyv/live-watch-sdk'; +import { ref, unref } from 'vue'; +import { DonateOptions } from './types'; +import { useDonateGoodPoint } from './use-donate-good-point'; +import { useDonatePay } from './use-donate-pay'; + +/** + * 道具打赏 hook + */ +export const useDonateGood = (donateOptions: DonateOptions = {}) => { + // 打赏成功回调 + const donateSuccess = donateOptions.donateSuccess; + + const { donatePointEnabled, donateGoodEnabled } = storeDefinitionToRefs(useDonateStore); + + /** 打赏数量 */ + const donateCount = ref(1); + /** 打赏数量快捷选项 */ + const quickCounts = [1, 5, 10, 66, 88, 666]; + + /** 当前选择的礼物 */ + const selectedGood = ref(); + /** 设置选中的礼物 */ + function setSelectedGood(good: DonateGoodInfo): void { + selectedGood.value = good; + donateCount.value = 1; + } + + const { surplusPoint, donatePointGood } = useDonateGoodPoint(); + const { payDonate } = useDonatePay(); + + /** 打赏礼物 */ + async function donateGood() { + const good = unref(selectedGood); + const count = unref(donateCount) || 1; + + if (!good) { + toast.error(translate('donate.error.notChoice')); + return; + } + + if (unref(donatePointEnabled)) { + await donatePointGood(good, count); + } else if (unref(donateGoodEnabled)) { + await payDonate({ + donateType: DonateType.Good, + goodId: good.goodId, + }); + } + + donateSuccess && donateSuccess(); + } + + return { + donateCount, + quickCounts, + surplusPoint, + selectedGood, + setSelectedGood, + donateGood, + donatePointGood, + }; +}; diff --git a/src/components/page-watch-common/donate/donate-panel/hooks/use-donate-pay.ts b/src/components/page-watch-common/donate/donate-panel/hooks/use-donate-pay.ts new file mode 100644 index 0000000..eec4fd0 --- /dev/null +++ b/src/components/page-watch-common/donate/donate-panel/hooks/use-donate-pay.ts @@ -0,0 +1,244 @@ +/** + * @file 礼物、现金打赏支付 hook + */ + +import { usePolyvWatchDomain } from '@/hooks/platform/use-polyv-watch-domain'; +import { useWeixinAuthorize } from '@/hooks/platform/use-weixin/use-weixin-authorize'; +import { useWeixinPay } from '@/hooks/platform/use-weixin/use-weixin-pay'; +import { translate } from '@/assets/lang'; +import { isMobile, isWeixin } from '@/assets/utils/browser'; +import { toast } from '@/hooks/components/use-toast'; +import { getWatchCore } from '@/core/watch-sdk'; +import { useDonateStore } from '@/store/use-donate-store'; +import { storeDefinitionToRefs } from '@/plugins/pinia/util'; +import { + DonateType, + PayDonateData, + PayDonateParams, + WatchDomainPayType, +} from '@polyv/live-watch-sdk'; +import { onBeforeUnmount, unref, watch } from 'vue'; + +/** + * 打赏支付状态检查 hook + */ +const useDonatePayCheck = () => { + const { waitPayDonateData } = storeDefinitionToRefs(useDonateStore); + + let checkTimer: number | undefined; + let checkCount = 100; + /** 清空检查支付状态定时器 */ + function clearCheckTimer() { + clearInterval(checkTimer); + checkTimer = undefined; + checkCount = 100; + } + + /** 设置检查支付状态定时器 */ + function setCheckTimer() { + clearCheckTimer(); + checkTimer = window.setInterval(() => { + checkPayStatus(); + }, 1000); + } + + /** 检查支付状态 */ + async function checkPayStatus() { + const watchCore = getWatchCore(); + + const data = unref(waitPayDonateData); + if (!data || !data.logId) { + clearCheckTimer(); + return; + } + // 100 秒未支付则超时 + if (checkCount === 0) { + clearCheckTimer(); + waitPayDonateData.value = undefined; + toast.error(translate('donate.error.payTimeOut')); + return; + } + checkCount -= 1; + + try { + const status = await watchCore.donate.checkDonatePayStatus({ + logId: data.logId, + donateType: data.donateType, + }); + + if (status.paySuccess) { + waitPayDonateData.value = undefined; + clearCheckTimer(); + } + } catch (e) { + toast.error(translate('donate.error.payFail')); + clearCheckTimer(); + } + } + + onBeforeUnmount(() => { + clearCheckTimer(); + }); + + return { + setCheckTimer, + clearCheckTimer, + checkPayStatus, + }; +}; + +export interface DonatePayOptions { + /** 打赏类型 */ + donateType: DonateType; + /** 打赏道具 id */ + goodId?: string; + /** 现金打赏下的打赏金额 */ + amount?: string; +} + +/** PC 端支付逻辑 */ +const useDonatePayPc = () => { + const { waitPayDonateData } = storeDefinitionToRefs(useDonateStore); + + const { setCheckTimer, clearCheckTimer } = useDonatePayCheck(); + + watch( + () => unref(waitPayDonateData), + () => { + if (!unref(waitPayDonateData)) { + clearCheckTimer(); + } + }, + ); + + /** + * 支付打赏(PC 逻辑) + */ + async function payDonate(payOptions: DonatePayOptions): Promise { + const watchCore = getWatchCore(); + + clearCheckTimer(); + const donateType = payOptions.donateType; + const amount = payOptions.amount; + const goodId = payOptions.goodId; + + try { + const params: PayDonateParams = { + donateType, + }; + // 道具打赏 + if (typeof goodId !== 'undefined') { + params.goodId = goodId; + } + // 现金打赏 + if (amount) { + params.amount = amount; + } + const payData = await watchCore.donate.payDonate(params); + + // 免费礼物 + if (payData.isFree) { + return; + } + + waitPayDonateData.value = payData; + setCheckTimer(); + } catch (e) { + clearCheckTimer(); + toast.error(translate('donate.error.payFail')); + throw e; + } + } + + return { + payDonate, + }; +}; + +/** 移动端支付逻辑 */ +const useDonatePayMobile = () => { + const { redirectWeixinAuthorize } = useWeixinAuthorize(); + const { chooseWXPay } = useWeixinPay(); + const { polyvWatchDomainEnabled, skipWatchDomainPay } = usePolyvWatchDomain(); + + /** + * 支付打赏(移动端逻辑) + */ + // eslint-disable-next-line sonarjs/cognitive-complexity + function payDonate(payOptions: DonatePayOptions) { + return new Promise((resolve, reject) => { + (async () => { + const watchCore = getWatchCore(); + + const donateType = payOptions.donateType; + const amount = payOptions.amount; + const goodId = payOptions.goodId; + + let payInfo: PayDonateData; + const params: PayDonateParams = { + donateType, + }; + // 道具打赏 + if (typeof goodId !== 'undefined') { + params.goodId = goodId; + } + // 现金打赏 + if (amount) { + params.amount = amount; + } + + // 泛域名支付 + if (unref(polyvWatchDomainEnabled)) { + await skipWatchDomainPay({ + payType: WatchDomainPayType.Donate, + params, + }); + return; + } + + try { + payInfo = await watchCore.donate.payDonate(params); + } catch (e) { + const err = e as Error; + // 需要跳转授权 + if (err.message === 'authorization') { + redirectWeixinAuthorize(); + } else { + toast.error(translate('donate.error.payFail')); + } + reject(e); + return; + } + + // 免费礼物 + if (payInfo.isFree) { + resolve(); + return; + } + + // 非微信下直接提示 + if (!isWeixin) { + toast.error(translate('weixin.error.toWechatPay')); + reject(new Error('pay fail')); + return; + } + + if (payInfo.wxPaySignData) { + chooseWXPay(payInfo.wxPaySignData, { + successCb: () => resolve(), + cancelCb: () => reject(new Error('pay fail')), + }); + } + })(); + }); + } + + return { + payDonate, + }; +}; + +/** 礼物、现金打赏支付 hook */ +export const useDonatePay = () => { + return isMobile ? useDonatePayMobile() : useDonatePayPc(); +}; diff --git a/src/components/page-watch-common/donate/donate-panel/imgs/redpack-cash.png b/src/components/page-watch-common/donate/donate-panel/imgs/redpack-cash.png new file mode 100644 index 0000000000000000000000000000000000000000..87ae70fc13dc8daf6f93dc5eb0ed33f3b4eee968 GIT binary patch literal 6000 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

S|&Hu zvbk}(@zv+e^RdpPk59-h$q4^QEIHQ=)BF2$KN*9;2a(DEBt^O}R8)@_Rv~~DU%t@O zfX^1fqy0OSOHxsGHH6fJCVj-0gzrpPDr`0%Nj-)%RL{xLgI~i?4W6AizDK#FSH8e_ z9F2I8Crf(KgkRBuSI`sO&??E8@Bbnf?|V~bf-0g|D1Dsp^)6Blj$je%3uSa2T@|3U z9E1~96F#_+Bok~C^du#vA@uB+?pkW%K5agA@&|Q|f4AG6J{d?I^2;|&$oGV3RJyMU zfvw*};LRyh)Tml0-#96aV)Xmk2AE`zm4z4@Na-P{wGVnwL`9_C9Kk-uHd8AZBZ+ zzxFRB9-*w0?HtTdFZE;u6#2K33*gf@PWfILJuj#0IUSz*E@Mq_(&CF!j^$rS5|QKpWCLj>H=w85l$5eVM(s3ZJOnGaS;Z76iEdv@+NpE|1EyBJO^ zal~*C^`3cmqu|3VcF7&JY(Zmc@q*Y}dX=ZsF?TvP2rQJ;fzS#X57dLa`we)g2JJy5 zXGOs0Wa!eqcMHM(Ooy54ZG9`DtAha@;I1kl8t;W*(z)~lefxG@>$_-OSV~?-as$71 zKoMz(s)PmJCsabo8qaIG0F|gzhFjFeVJOVn;!utCqD&}L0#a!MnaHn))3ANcW~!jj z3ct*vdR1r}*;baAc*$+|4F=(An=AuQ#&CP%pwXRI1x7p*j$_h>Jc88zW`tC@zi-!f zJ9gub|0TS>uNY-<6Oy(vmw>3RXB$-=W%n2&A-IQ_suvMl6agEAUj>UI8Rcptch*<4FM6=QZY992-DhJ! zcN7;8jfT?rX7O$f!$#0iN%apGA1pC0Q}wXMYDNqZS(vnqJ-6)dV%X>u#3{mtzf3Yu zJTN1n;Mg)e&w}&|k?uV_;-xOPJw}l#?L6#)S`T5Y*CM$+&E=Ho{cXN%2Js%GOR}tF zlFo!G8TvBNAyzGy{)RE(0X=^$+fX!hvDU;jt_9Uak&fY^5(a%M + + + + + diff --git a/src/components/page-watch-common/donate/donate-panel/mobile-donate-panel/mobile-donate-panel-good.vue b/src/components/page-watch-common/donate/donate-panel/mobile-donate-panel/mobile-donate-panel-good.vue new file mode 100644 index 0000000..4a843e4 --- /dev/null +++ b/src/components/page-watch-common/donate/donate-panel/mobile-donate-panel/mobile-donate-panel-good.vue @@ -0,0 +1,252 @@ + + + + + + diff --git a/src/components/page-watch-common/donate/donate-panel/mobile-donate-panel/mobile-donate-panel.vue b/src/components/page-watch-common/donate/donate-panel/mobile-donate-panel/mobile-donate-panel.vue new file mode 100644 index 0000000..3a66fb7 --- /dev/null +++ b/src/components/page-watch-common/donate/donate-panel/mobile-donate-panel/mobile-donate-panel.vue @@ -0,0 +1,39 @@ + + + + + + diff --git a/src/components/page-watch-common/donate/donate-panel/pc-donate-panel/pc-donate-cash.vue b/src/components/page-watch-common/donate/donate-panel/pc-donate-panel/pc-donate-cash.vue new file mode 100644 index 0000000..f4ec8be --- /dev/null +++ b/src/components/page-watch-common/donate/donate-panel/pc-donate-panel/pc-donate-cash.vue @@ -0,0 +1,158 @@ + + + + + + diff --git a/src/components/page-watch-common/donate/donate-panel/pc-donate-panel/pc-donate-panel.vue b/src/components/page-watch-common/donate/donate-panel/pc-donate-panel/pc-donate-panel.vue new file mode 100644 index 0000000..72b8874 --- /dev/null +++ b/src/components/page-watch-common/donate/donate-panel/pc-donate-panel/pc-donate-panel.vue @@ -0,0 +1,305 @@ + + + + + + diff --git a/src/components/page-watch-common/donate/donate-panel/pc-donate-panel/pc-donate-pay-qrcode.vue b/src/components/page-watch-common/donate/donate-panel/pc-donate-panel/pc-donate-pay-qrcode.vue new file mode 100644 index 0000000..678da5d --- /dev/null +++ b/src/components/page-watch-common/donate/donate-panel/pc-donate-panel/pc-donate-pay-qrcode.vue @@ -0,0 +1,104 @@ + + + + + + diff --git a/src/components/page-watch-common/donate/donate-panel/portrait-donate-popup/portrait-donate-panel-cash.vue b/src/components/page-watch-common/donate/donate-panel/portrait-donate-popup/portrait-donate-panel-cash.vue new file mode 100644 index 0000000..7e745df --- /dev/null +++ b/src/components/page-watch-common/donate/donate-panel/portrait-donate-popup/portrait-donate-panel-cash.vue @@ -0,0 +1,161 @@ + + + + + + diff --git a/src/components/page-watch-common/donate/donate-panel/portrait-donate-popup/portrait-donate-panel-good.vue b/src/components/page-watch-common/donate/donate-panel/portrait-donate-popup/portrait-donate-panel-good.vue new file mode 100644 index 0000000..47affef --- /dev/null +++ b/src/components/page-watch-common/donate/donate-panel/portrait-donate-popup/portrait-donate-panel-good.vue @@ -0,0 +1,270 @@ + + + + + + diff --git a/src/components/page-watch-common/donate/donate-panel/portrait-donate-popup/portrait-donate-popup.vue b/src/components/page-watch-common/donate/donate-panel/portrait-donate-popup/portrait-donate-popup.vue new file mode 100644 index 0000000..71e292b --- /dev/null +++ b/src/components/page-watch-common/donate/donate-panel/portrait-donate-popup/portrait-donate-popup.vue @@ -0,0 +1,63 @@ + + + + diff --git a/src/components/page-watch-common/donate/donate-svga-animation/donate-svga-animation.vue b/src/components/page-watch-common/donate/donate-svga-animation/donate-svga-animation.vue new file mode 100644 index 0000000..f260760 --- /dev/null +++ b/src/components/page-watch-common/donate/donate-svga-animation/donate-svga-animation.vue @@ -0,0 +1,36 @@ + + + + + + diff --git a/src/components/page-watch-common/donate/donate-svga-animation/use-donate-svga-animation.ts b/src/components/page-watch-common/donate/donate-svga-animation/use-donate-svga-animation.ts new file mode 100644 index 0000000..fffb0d8 --- /dev/null +++ b/src/components/page-watch-common/donate/donate-svga-animation/use-donate-svga-animation.ts @@ -0,0 +1,132 @@ +/** + * @file 打赏 svga 特效 hook + */ +import { DEFAULT_SVGA_DIRECTORY } from '@/assets/constants/defaults'; +import { useSvgaPlayer } from '@/hooks/animation/use-svga-player'; +import { getWatchCore } from '@/core/watch-sdk'; +import { useDonateStore } from '@/store/use-donate-store'; +import { useInteractReceiveStore } from '@/store/use-interact-receive-store'; +import { storeDefinitionToRefs } from '@/plugins/pinia/util'; +import { + ChatEvents, + ChatMsgRewardType, + ChatMsgSource, + ChatMsgType, + DonateType, +} from '@polyv/live-watch-sdk'; +import { onBeforeUnmount, onMounted, ref, unref, watch } from 'vue'; + +const svgaMap: UniversalParams = { + coffee: 'coffee.svga', + like: 'like.svga', + handclap: 'handclap.svga', + 666: '666.svga', + star: 'star.svga', + diamond: 'diamond.svga', + car: 'car.svga', + rocket: 'rocket.svga', + bear: 'bear.svga', + crown: 'crown.svga', + cup: 'cup.svga', + microphone: 'microphone.svga', + villa: 'villa.svga', + house: 'villa.svga', // 旧版的house图匹配新版的别墅动画 +}; + +export const useDonateSvgaAnimation = () => { + const donateStore = useDonateStore(); + const { isGoOnRedpackRain } = storeDefinitionToRefs(useInteractReceiveStore); + + /** 用于渲染动画的 ref 节点 */ + const donateRef = ref(); + + const { animationQueue, pushAnimationQueue, pauseAnimationQueue, startAnimationQueue } = + useSvgaPlayer(donateRef); + + /** 根据打赏图片地址获取 svga 地址 */ + function getSvgaUrl(gimg: string): string | undefined { + // 如果后台有上传 svga 特效文件,则优先使用后台配置 + const goodInfo = donateStore.findDonateGoodByImg(gimg); + if (goodInfo && goodInfo.dynamicFile) { + return goodInfo.dynamicFile; + } + + // 如果没有则截取图片文件名来获取默认的 svga 文件 + const a = document.createElement('a'); + a.href = gimg; + const paths = a.pathname.split('/'); + const goodName = paths[paths.length - 1].split('.')[0]; + if (!svgaMap[goodName]) { + return undefined; + } + + return DEFAULT_SVGA_DIRECTORY + svgaMap[goodName]; + } + + // 如果正在显示红包雨不显示打赏特效 + watch( + () => unref(isGoOnRedpackRain), + () => { + if (unref(isGoOnRedpackRain)) { + pauseAnimationQueue(); + } else { + startAnimationQueue(); + } + }, + ); + + function canPushInQueue(chatMsg: ChatMsgRewardType) { + const isSelfGood = chatMsg.isSelf; + const isPayGood = !chatMsg.isFree; + + // 自己打赏的必须插入 + if (isSelfGood) { + return true; + } + + // 屏蔽了其他人的打赏动画 + if (!donateStore.donateAnimationVisible) { + return false; + } + + return isPayGood || unref(animationQueue).length < 100; + } + + /** 处理打赏消息 */ + function onChatMsgEvent(evt: { chatMsg: ChatMsgType }) { + const chatMsg = evt.chatMsg; + // 非打赏消息 + if (chatMsg.msgSource !== ChatMsgSource.Reward) { + return; + } + // 非道具打赏 + if (chatMsg.donateType !== DonateType.Good) { + return; + } + + const isSelfGood = chatMsg.isSelf; + const pushInQueue = canPushInQueue(chatMsg); + + if (!pushInQueue) { + return; + } + + // 如果是自己的打赏则优先显示 + const svgaUrl = getSvgaUrl(chatMsg.gimg); + pushAnimationQueue(svgaUrl || chatMsg.gimg, isSelfGood); + } + + onMounted(() => { + const watchCore = getWatchCore(); + watchCore.chat.eventEmitter.on(ChatEvents.ChatMessage, onChatMsgEvent); + }); + + onBeforeUnmount(() => { + const watchCore = getWatchCore(); + watchCore.chat.eventEmitter.off(ChatEvents.ChatMessage, onChatMsgEvent); + }); + + return { + donateRef, + }; +}; diff --git a/src/components/page-watch-common/emotion-picker/hooks/use-emotion-face-picker.ts b/src/components/page-watch-common/emotion-picker/hooks/use-emotion-face-picker.ts new file mode 100644 index 0000000..8b83dde --- /dev/null +++ b/src/components/page-watch-common/emotion-picker/hooks/use-emotion-face-picker.ts @@ -0,0 +1,45 @@ +import { onMounted, ref, unref } from 'vue'; +import { genDOMList } from '@polyv/emotion-sdk'; +import { emitFunc, VueEmit } from '@/assets/utils/vue-utils/emit-utils'; + +export const emotionFacePickerEmits = () => ({ + /** 点击表情 */ + 'click-face': emitFunc(), +}); + +/** + * face 表情选取 hook + */ +export const useEmotionFacePicker = (options: { emit: VueEmit }) => { + const { emit } = options; + + /** 容器节点 */ + const containerRef = ref(); + + /** 处理点击容器 */ + function onClickContainer(event: Event) { + const target = event.target as HTMLElement; + if (target.tagName !== 'I') { + return; + } + const title = target.getAttribute('data-title'); + if (!title) { + return; + } + + emit('click-face', `[${title}]`); + } + + /** 加载表情节点 */ + onMounted(() => { + const containerElem = unref(containerRef); + if (containerElem) { + containerElem.appendChild(genDOMList()); + } + }); + + return { + containerRef, + onClickContainer, + }; +}; diff --git a/src/components/page-watch-common/emotion-picker/hooks/use-emotion-image-picker.ts b/src/components/page-watch-common/emotion-picker/hooks/use-emotion-image-picker.ts new file mode 100644 index 0000000..bf378f8 --- /dev/null +++ b/src/components/page-watch-common/emotion-picker/hooks/use-emotion-image-picker.ts @@ -0,0 +1,42 @@ +import { emitFunc, VueEmit } from '@/assets/utils/vue-utils/emit-utils'; +import { getWatchCore } from '@/core/watch-sdk'; +import { EmotionImageData } from '@polyv/live-watch-sdk'; +import { onMounted, ref } from 'vue'; +import { useSendMsg } from '../../chat/chat-msg-list/hooks/send-msg-hook'; + +export const emotionImagePickerEmits = () => ({ + /** 点击表情 */ + 'click-image': emitFunc(), +}); + +export const useEmotionImagePicker = (options: { + emit: VueEmit; +}) => { + const { sendEmotionImageMsg } = useSendMsg(); + + const { emit } = options; + + /** 图片表情列表 */ + const emotionList = ref([]); + + /** 处理点击表情 */ + async function onClickItem(data: EmotionImageData) { + emit('click-image', data); + + sendEmotionImageMsg({ + emotionId: data.id, + emotionUrl: data.url, + }); + } + + onMounted(async () => { + const watchCore = getWatchCore(); + const data = await watchCore.chat.getEmotionImages(); + emotionList.value = data; + }); + + return { + emotionList, + onClickItem, + }; +}; diff --git a/src/components/page-watch-common/emotion-picker/hooks/use-emotion-picker.ts b/src/components/page-watch-common/emotion-picker/hooks/use-emotion-picker.ts new file mode 100644 index 0000000..a72a30e --- /dev/null +++ b/src/components/page-watch-common/emotion-picker/hooks/use-emotion-picker.ts @@ -0,0 +1,77 @@ +import { emitFunc, VueEmit } from '@/assets/utils/vue-utils/emit-utils'; +import { PropUtils, VueProps } from '@/assets/utils/vue-utils/props-utils'; +import { ref } from 'vue'; +import { EmotionImageData } from '@polyv/live-watch-sdk'; + +/** + * 表情选择类型,face-普通表情,image-图片表情 + */ +export type EmotionPickerType = 'face' | 'image'; + +export const emotionPickerProps = () => ({ + /** 图片表情开关 */ + imageEmotionEnabled: PropUtils.bool.def(true), + /** 点击 face 表情后关闭,默认:true */ + clickFaceToClose: PropUtils.bool.def(true), +}); + +export const emotionPickerEmits = () => ({ + /** 点击表情 */ + 'click-face': emitFunc(), + /** 点击表情 */ + 'click-image': emitFunc(), + /** 点击删除(仅移动端) */ + 'click-delete': emitFunc(), + /** 点击发送(仅移动端) */ + 'click-send': emitFunc(), + /** 关闭 */ + close: emitFunc(), +}); + +export const useEmotionPicker = (options: { + props: VueProps; + emit: VueEmit; +}) => { + const { props, emit } = options; + + /** 当前面板类型 */ + const currentType = ref('face'); + + /** 切换类型 */ + function switchEmotionTab(type: EmotionPickerType) { + currentType.value = type; + } + + /** 点击 face 表情 */ + function onClickFace(title: string) { + emit('click-face', title); + if (props.clickFaceToClose) { + emit('close'); + } + } + + /** 点击图片表情 */ + function onClickImage(data: EmotionImageData) { + emit('click-image', data); + emit('close'); + } + + /** 点击删除按钮 */ + function onClickDelete() { + emit('click-delete'); + } + + /** 点击发送按钮 */ + function onClickSend() { + emit('click-send'); + } + + return { + currentType, + switchEmotionTab, + onClickFace, + onClickImage, + onClickDelete, + onClickSend, + }; +}; diff --git a/src/components/page-watch-common/emotion-picker/mobile-emotion-picker/mobile-emotion-face-picker.vue b/src/components/page-watch-common/emotion-picker/mobile-emotion-picker/mobile-emotion-face-picker.vue new file mode 100644 index 0000000..02234b0 --- /dev/null +++ b/src/components/page-watch-common/emotion-picker/mobile-emotion-picker/mobile-emotion-face-picker.vue @@ -0,0 +1,44 @@ + + + + + + diff --git a/src/components/page-watch-common/emotion-picker/mobile-emotion-picker/mobile-emotion-image-picker.vue b/src/components/page-watch-common/emotion-picker/mobile-emotion-picker/mobile-emotion-image-picker.vue new file mode 100644 index 0000000..b4ec250 --- /dev/null +++ b/src/components/page-watch-common/emotion-picker/mobile-emotion-picker/mobile-emotion-image-picker.vue @@ -0,0 +1,64 @@ + + + + + + diff --git a/src/components/page-watch-common/emotion-picker/mobile-emotion-picker/mobile-emotion-picker.vue b/src/components/page-watch-common/emotion-picker/mobile-emotion-picker/mobile-emotion-picker.vue new file mode 100644 index 0000000..e41cc14 --- /dev/null +++ b/src/components/page-watch-common/emotion-picker/mobile-emotion-picker/mobile-emotion-picker.vue @@ -0,0 +1,192 @@ + + + + + + diff --git a/src/components/page-watch-common/emotion-picker/pc-emotion-picker/imgs/icon-face-emotion.png b/src/components/page-watch-common/emotion-picker/pc-emotion-picker/imgs/icon-face-emotion.png new file mode 100644 index 0000000000000000000000000000000000000000..6ead6f7ca73d06e919802aa4c5cbbb3ddff5dee8 GIT binary patch literal 2514 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 + + + + + diff --git a/src/components/page-watch-common/emotion-picker/pc-emotion-picker/pc-emotion-image-picker.vue b/src/components/page-watch-common/emotion-picker/pc-emotion-picker/pc-emotion-image-picker.vue new file mode 100644 index 0000000..731a4aa --- /dev/null +++ b/src/components/page-watch-common/emotion-picker/pc-emotion-picker/pc-emotion-image-picker.vue @@ -0,0 +1,70 @@ + + + + + + diff --git a/src/components/page-watch-common/emotion-picker/pc-emotion-picker/pc-emotion-picker.vue b/src/components/page-watch-common/emotion-picker/pc-emotion-picker/pc-emotion-picker.vue new file mode 100644 index 0000000..dd8f003 --- /dev/null +++ b/src/components/page-watch-common/emotion-picker/pc-emotion-picker/pc-emotion-picker.vue @@ -0,0 +1,106 @@ + + + + + + diff --git a/src/components/page-watch-common/emotion-picker/portrait-emotion-picker/portrait-emotion-picker.vue b/src/components/page-watch-common/emotion-picker/portrait-emotion-picker/portrait-emotion-picker.vue new file mode 100644 index 0000000..db7b641 --- /dev/null +++ b/src/components/page-watch-common/emotion-picker/portrait-emotion-picker/portrait-emotion-picker.vue @@ -0,0 +1,201 @@ + + + + + + diff --git a/src/components/page-watch-common/follow/follow-btn/mobile-follow-btn.vue b/src/components/page-watch-common/follow/follow-btn/mobile-follow-btn.vue new file mode 100644 index 0000000..38e3e6c --- /dev/null +++ b/src/components/page-watch-common/follow/follow-btn/mobile-follow-btn.vue @@ -0,0 +1,31 @@ + + + + + + diff --git a/src/components/page-watch-common/follow/follow-btn/portrait-follow-btn.vue b/src/components/page-watch-common/follow/follow-btn/portrait-follow-btn.vue new file mode 100644 index 0000000..e5c4570 --- /dev/null +++ b/src/components/page-watch-common/follow/follow-btn/portrait-follow-btn.vue @@ -0,0 +1,34 @@ + + + + + + diff --git a/src/components/page-watch-common/follow/follow-layer/imgs/mobile-promotion-close-1.png b/src/components/page-watch-common/follow/follow-layer/imgs/mobile-promotion-close-1.png new file mode 100644 index 0000000000000000000000000000000000000000..fab094019acd245d99e88f338a3b92b2c958acf8 GIT binary patch literal 627 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeE3?v1%WpM*3tpJ}8*Z=?j1DO{uUc7tvE|84} z+}rEL2~^5g666c%;C?hmlsP|puluhW@1PV-%Tp(=a z&{$sL#BPz&;`f35pvBLWrm)f_c{8oVF*e%|=$=*Nr?A3j!mW`3l8O6`EzVYg#pE7Q)Doo_re z@#w-88&4lR_u@doq92DFj&dBIutMV0g4G&lH=HYV;ARh(()Eowz2!&Y)+?X7zWzAZ zdx+2Cp`Kl8Ge=9iriL_!qRkbjmkE3)54$p)*IxF;LCLcYm>w8BUHx3vIVCg!0QSTv A`v3p{ literal 0 HcmV?d00001 diff --git a/src/components/page-watch-common/follow/follow-layer/imgs/mobile-promotion-close.png b/src/components/page-watch-common/follow/follow-layer/imgs/mobile-promotion-close.png new file mode 100644 index 0000000000000000000000000000000000000000..1dce0e32b14fc40757a11689a0639671284a5dc8 GIT binary patch literal 2782 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 literal 0 HcmV?d00001 diff --git a/src/components/page-watch-common/follow/follow-layer/mobile-follow-layer.vue b/src/components/page-watch-common/follow/follow-layer/mobile-follow-layer.vue new file mode 100644 index 0000000..fa0733d --- /dev/null +++ b/src/components/page-watch-common/follow/follow-layer/mobile-follow-layer.vue @@ -0,0 +1,86 @@ + + + + + + diff --git a/src/components/page-watch-common/follow/follow-layer/portrait-follow-layer.vue b/src/components/page-watch-common/follow/follow-layer/portrait-follow-layer.vue new file mode 100644 index 0000000..9f64dfe --- /dev/null +++ b/src/components/page-watch-common/follow/follow-layer/portrait-follow-layer.vue @@ -0,0 +1,91 @@ + + + + + + diff --git a/src/components/page-watch-common/follow/hooks/use-follow-btn.ts b/src/components/page-watch-common/follow/hooks/use-follow-btn.ts new file mode 100644 index 0000000..ff8007c --- /dev/null +++ b/src/components/page-watch-common/follow/hooks/use-follow-btn.ts @@ -0,0 +1,11 @@ +import { appEvents, eventBus } from '@/app/app-events'; + +export const useFollowBtn = () => { + function onClickFollowBtn() { + eventBus.$emit(appEvents.global.OpenFollowLayer, true); + } + + return { + onClickFollowBtn, + }; +}; diff --git a/src/components/page-watch-common/follow/hooks/use-follow-layer.ts b/src/components/page-watch-common/follow/hooks/use-follow-layer.ts new file mode 100644 index 0000000..eabf422 --- /dev/null +++ b/src/components/page-watch-common/follow/hooks/use-follow-layer.ts @@ -0,0 +1,40 @@ +import { ref, watchEffect } from 'vue'; +import { PlvPopperManager } from '@/plugins/polyv-ui/admin-import'; + +import { appEvents, useEventBusListener } from '@/app/app-events'; +import { useSimpleVisible } from '@/hooks/behaviors/use-simple-visible'; +import { useFollowSetting } from './use-follow-setting'; + +/** + * 关注弹层 hook + */ +export const useFollowLayer = () => { + const { followAutoShow } = useFollowSetting(); + + const layerRef = ref(); + + const { + visible: layerVisible, + setVisible: setLayerVisible, + show: showLayer, + close: closeLayer, + } = useSimpleVisible(followAutoShow.value); + + watchEffect(() => { + if (layerVisible.value && layerRef.value) { + PlvPopperManager.openPopper(layerRef.value); + } + }); + + useEventBusListener(appEvents.global.OpenFollowLayer, (visible: boolean) => { + setLayerVisible(visible); + }); + + return { + layerRef, + layerVisible, + setLayerVisible, + showLayer, + closeLayer, + }; +}; diff --git a/src/components/page-watch-common/follow/hooks/use-follow-setting.ts b/src/components/page-watch-common/follow/hooks/use-follow-setting.ts new file mode 100644 index 0000000..7dbe7d8 --- /dev/null +++ b/src/components/page-watch-common/follow/hooks/use-follow-setting.ts @@ -0,0 +1,50 @@ +import { computed } from 'vue'; +import { ynToBool } from '@utils-ts/boolean'; +import { YN } from '@polyv/live-watch-sdk'; +import { useChannelStore } from '@/store/use-channel-store'; +import { useWatchAppStore } from '@/store/use-watch-app-store'; + +/** + * 关注设置 hook + */ +export const useFollowSetting = () => { + const watchAppStore = useWatchAppStore(); + const channelStore = useChannelStore(); + + /** 是否自动打开 */ + const followAutoShow = computed(() => { + if (watchAppStore.isWatchBackUrl) return false; + + return ynToBool(channelStore.channelDetail?.channelPromotion?.followAutoShow, YN.N); + }); + + /** 关注开关 */ + const followEnabled = computed(() => { + if (watchAppStore.isWatchBackUrl) return false; + + return ynToBool(channelStore.channelDetail?.channelPromotion?.followEnabled, YN.N); + }); + + /** 关注入口文案 */ + const followEntrance = computed(() => { + return channelStore.channelDetail?.channelPromotion?.followEntrance || ''; + }); + + /** 关注图片 */ + const followImage = computed(() => { + return channelStore.channelDetail?.channelPromotion?.followImage; + }); + + /** 关注提示文案 */ + const followTips = computed(() => { + return channelStore.channelDetail?.channelPromotion?.followTips; + }); + + return { + followAutoShow, + followEnabled, + followEntrance, + followImage, + followTips, + }; +}; diff --git a/src/components/page-watch-common/interactive-receive/_style/cover-mobile-interact-receive.scss b/src/components/page-watch-common/interactive-receive/_style/cover-mobile-interact-receive.scss new file mode 100644 index 0000000..5633fef --- /dev/null +++ b/src/components/page-watch-common/interactive-receive/_style/cover-mobile-interact-receive.scss @@ -0,0 +1,54 @@ +// @file 移动端的互动功能接收端样式覆盖 + +// 加载 +.plv-ia-loading-container { + color: #adadc0; +} + +// 卡片推送 +.plv-iar-push-card, +.plv-iar-push-card__modal { + z-index: 400; +} + +// 图文直播 +.plv-ia-tuwen-message-item { + .plv-ia-tuwen-message-item-content { + .pws-plv-ia-tuwen-message-item-content-name { + font-size: 12px; + color: #78A7ED; + } + + .pws-plv-ia-tuwen-message-item-content-time { + margin-top: 4px; + color: #595A66; + } + + .pws-plv-ia-tuwen-message-item-content-text { + color: #adadc0; + } + } +} + +// 条件抽奖 +.plv-iar-welfare-lottery__modal--normal, +.plv-iar-welfare-lottery__modal--gift-box, +.plv-iar-welfare-lottery__on-lottery-modal { + z-index: 11; +} + +// 商品推送 +.plv-iar-product-bubble { + pointer-events: none; +} +.plv-iar-product-bubble__wrap { + pointer-events: initial; +} + +// 问答 +.plv-ia-qa-ask-emotion { + height: 100%; + margin-top: 0 !important; + margin-bottom: 0 !important; + background-size: 32px; +} diff --git a/src/components/page-watch-common/interactive-receive/_style/cover-pc-interact-receive.scss b/src/components/page-watch-common/interactive-receive/_style/cover-pc-interact-receive.scss new file mode 100644 index 0000000..4e09eeb --- /dev/null +++ b/src/components/page-watch-common/interactive-receive/_style/cover-pc-interact-receive.scss @@ -0,0 +1,70 @@ +// @file PC 端的互动功能接收端样式覆盖 + +// 投票 +.plv-iar-vote__main { + @include scrollbar; +} +@media (max-width: 1280px) { + .plv-iar-vote-item__title { + max-width: 204px !important; + font-size: 12px !important; + } + .plv-iar-vote-item__count { + font-size: 12px !important; + > span { + font-size: 18px !important; + } + } +} + +// 卡片推送 +.plv-iar-push-card, +.plv-iar-push-card__modal { + z-index: 400; +} + +// 问答 +.plv-ia-qa-emotions { + z-index: 500; +} + +// 条件抽奖 +.plv-iar-welfare-lottery__modal--normal, +.plv-iar-welfare-lottery__modal--gift-box, +.plv-iar-welfare-lottery__on-lottery-modal { + z-index: 400; +} + +// 报名抽奖 +.plv-ia-enroll-lottery__pc { + width: 100%; + overflow: hidden; +} + +// 抽奖 +.plv-on-lottery-default { + position: fixed; + top: 50%; + left: 50%; + z-index: 999; + transform: translate(-50%, -50%); +} + +// 商品推送 +.plv-iar-product-bubble { + pointer-events: none; +} +.plv-iar-product-bubble__wrap { + pointer-events: initial; +} + +// 公告 +.plv-iar-bulletin__list__item__content { + cursor: pointer; +} + +// 问答 +.plv-ia-qa-ask-emotion { + color: #adadc0; + background-size: 18px; +} diff --git a/src/components/page-watch-common/interactive-receive/_style/cover-portrait-interact-receive.scss b/src/components/page-watch-common/interactive-receive/_style/cover-portrait-interact-receive.scss new file mode 100644 index 0000000..ff3cf60 --- /dev/null +++ b/src/components/page-watch-common/interactive-receive/_style/cover-portrait-interact-receive.scss @@ -0,0 +1,57 @@ +// @file 竖屏端的互动功能接收端样式覆盖 + +// 按钮 +.plv-iar-default-btn { + background: $--color-primary-portrait !important; + + &:disabled { + opacity: 0.6; + } +} + +// 快速问答 +.plv-iar-quick-answer-default__btn { + background: $--color-primary-portrait !important; +} + +// 商品库 +.pws-iar-product-list-wrap { + padding: 0; +} +.pws-iar-product-list-wrap { + background: none; +} +.plv-iar-product__content { + background-color: initial; + + &::-webkit-scrollbar { + width: 4px; + height: 4px; + } +} +.pws-iar-product-list-number { + border-radius: 6px; +} +.pws-iar-product-list-cover { + border-radius: 10px; +} +.pws-iar-product-list-cover-number { + border-radius: 0 0 6px 0; +} +.pws-iar-product-list-button { + min-width: 72px; + height: 28px; + font-size: 12px; + line-height: 28px; + background: $--color-primary-portrait; +} +.plv-iar-product__buy-button.plv-iar-product__buy-button--disabled { + .pws-iar-product-list-button { + background: $--bg-color-portrait-disabled; + } +} + +// 问答 +.plv-ia-qa-ask-emotion { + margin-bottom: 0 !important; +} diff --git a/src/components/page-watch-common/interactive-receive/_types/index.ts b/src/components/page-watch-common/interactive-receive/_types/index.ts new file mode 100644 index 0000000..ca6187f --- /dev/null +++ b/src/components/page-watch-common/interactive-receive/_types/index.ts @@ -0,0 +1,83 @@ +import Vue, { ComponentOptions } from 'vue'; + +export type PolyvIRSceneComponentOption = ComponentOptions; + +/** + * PC 端入口 + */ +export interface PolyvIRSceneEntrance { + // 共有端 + BulletinTop: PolyvIRSceneComponentOption; + BulletinBubble: PolyvIRSceneComponentOption; + PortraitCheckIn: PolyvIRSceneComponentOption; + EnrollLotteryPendant: PolyvIRSceneComponentOption; + ProductBubble: PolyvIRSceneComponentOption; + ProductJob: PolyvIRSceneComponentOption; + ProductButton: PolyvIRSceneComponentOption; + PushCard: PolyvIRSceneComponentOption; + RedEnvelopePendant: PolyvIRSceneComponentOption; + RedEnvelopeEntrance: PolyvIRSceneComponentOption; + EvaluationPendant: PolyvIRSceneComponentOption; + + // PC 端下才有的 + PcBulletin: PolyvIRSceneComponentOption; + PcAnswerCard: PolyvIRSceneComponentOption; + PcQuickAnswer: PolyvIRSceneComponentOption; + PcCheckIn: PolyvIRSceneComponentOption; + PcEnrollLottery: PolyvIRSceneComponentOption; + PcFeedBack: PolyvIRSceneComponentOption; + PcOnLottery: PolyvIRSceneComponentOption; + PcLotteryRecord: PolyvIRSceneComponentOption; + PcLotteryEnd: PolyvIRSceneComponentOption; + PcProduct: PolyvIRSceneComponentOption; + PcQuestionAnswer: PolyvIRSceneComponentOption; + PcQuestionnarie: PolyvIRSceneComponentOption; + PcRedEnvelope: PolyvIRSceneComponentOption; + PcRedpackRain: PolyvIRSceneComponentOption; + PcEvaluationQuestionnaire: PolyvIRSceneComponentOption; + PcTopic: PolyvIRSceneComponentOption; + PcTuwen: PolyvIRSceneComponentOption; + PcVote: PolyvIRSceneComponentOption; + PcWelfareLottery: PolyvIRSceneComponentOption; + + // 移动端下才有的 + MobileBulletin: PolyvIRSceneComponentOption; + MobileAnnouncementBar: PolyvIRSceneComponentOption; + MobileAnswerCard: PolyvIRSceneComponentOption; + MobileQuickAnswer: PolyvIRSceneComponentOption; + MobileCheckIn: PolyvIRSceneComponentOption; + MobileEnrollLottery: PolyvIRSceneComponentOption; + MobileFeedBack: PolyvIRSceneComponentOption; + MobileOnLottery: PolyvIRSceneComponentOption; + MobileLotteryRecord: PolyvIRSceneComponentOption; + MobileLotteryEnd: PolyvIRSceneComponentOption; + MobileProduct: PolyvIRSceneComponentOption; + MobileQuestionAnswer: PolyvIRSceneComponentOption; + MobileQuestionnarie: PolyvIRSceneComponentOption; + MobileRedEnvelope: PolyvIRSceneComponentOption; + MobileRedpackRain: PolyvIRSceneComponentOption; + MobileEvaluationQuestionnaire: PolyvIRSceneComponentOption; + MobilePointRERecord: PolyvIRSceneComponentOption; + MobileTopic: PolyvIRSceneComponentOption; + MobileTuwen: PolyvIRSceneComponentOption; + MobileVote: PolyvIRSceneComponentOption; + MobileWelfareLottery: PolyvIRSceneComponentOption; +} + +/** + * 互动功能组件标识 + */ +export type PolyvIRSceneKey = keyof PolyvIRSceneEntrance; + +export interface PolyvIRSceneType { + /** PC 端入口 */ + entrancePc?: PolyvIRSceneEntrance; + /** 移动端入口 */ + entranceMobile?: PolyvIRSceneEntrance; +} + +declare global { + interface Window { + PolyvIRScene?: PolyvIRSceneType; + } +} diff --git a/src/components/page-watch-common/interactive-receive/announcement/announcement-top.vue b/src/components/page-watch-common/interactive-receive/announcement/announcement-top.vue new file mode 100644 index 0000000..5ad6040 --- /dev/null +++ b/src/components/page-watch-common/interactive-receive/announcement/announcement-top.vue @@ -0,0 +1,24 @@ + + + + diff --git a/src/components/page-watch-common/interactive-receive/announcement/hooks/use-announcement-tips.ts b/src/components/page-watch-common/interactive-receive/announcement/hooks/use-announcement-tips.ts new file mode 100644 index 0000000..62322b2 --- /dev/null +++ b/src/components/page-watch-common/interactive-receive/announcement/hooks/use-announcement-tips.ts @@ -0,0 +1,82 @@ +import { appEvents, eventBus } from '@/app/app-events'; +import { local } from '@just4/storage'; +import { storeDefinitionToRefs } from '@/plugins/pinia/util'; +import { useInteractReceiveStore } from '@/store/use-interact-receive-store'; +import { getStorageKey } from '@/assets/utils/storage'; + +/** 公告的提示状态 */ +export enum AnnouncementTipsStatus { + /** 显示中、未关闭提示 */ + showing = 'showing', + /** 已显示过、已点击关闭 */ + closed = 'closed', +} + +/** localStorage 记录的 key */ +export const tipsStorageKey = getStorageKey('announcement-tips-status'); + +/** 获取 storage 中的状态值 */ +export const getStorageTipsStatus = (): AnnouncementTipsStatus | undefined => { + return local.get(tipsStorageKey) as AnnouncementTipsStatus; +}; + +/** 设置 storage 中的状态值 */ +export const setStorageTipsStatus = (status: AnnouncementTipsStatus) => { + local.set(tipsStorageKey, status); +}; + +/** + * @hook 互动-公告-公告提示 + */ +export const useAnnouncementTips = () => { + /** 公告提示是否显示 */ + const { announcementTipsVisible } = storeDefinitionToRefs(useInteractReceiveStore); + + /** 设置公告提示显示状态 */ + const setAnnouncementTipsVisible = (visible = true) => { + announcementTipsVisible.value = visible; + }; + + /** 显示公告提示,如果 storage 中记录的是 closed 则不响应 */ + const openAnnouncementTips = () => { + const tipsStatus = getStorageTipsStatus(); + if (tipsStatus !== AnnouncementTipsStatus.closed) { + setAnnouncementTipsVisible(true); + setStorageTipsStatus(AnnouncementTipsStatus.showing); + } + }; + + /** 关闭提示 */ + const closeAnnouncementTips = () => { + // 设为提示关闭 + setStorageTipsStatus(AnnouncementTipsStatus.closed); + setAnnouncementTipsVisible(false); + }; + + /** 处理点击公告提示 */ + const onClickAnnouncementTips = () => { + // 打开公告弹层 + eventBus.$emit(appEvents.interaction.OpenAnnouncementList, true); + closeAnnouncementTips(); + }; + + /** 处理点击公告提示关闭 */ + const onClickAnnouncementTipsClose = () => { + closeAnnouncementTips(); + }; + + return { + AnnouncementTipsStatus, + announcementTipsVisible, + getStorageTipsStatus, + setStorageTipsStatus, + + setAnnouncementTipsVisible, + + openAnnouncementTips, + closeAnnouncementTips, + + onClickAnnouncementTips, + onClickAnnouncementTipsClose, + }; +}; diff --git a/src/components/page-watch-common/interactive-receive/announcement/hooks/use-announcement.ts b/src/components/page-watch-common/interactive-receive/announcement/hooks/use-announcement.ts new file mode 100644 index 0000000..9c31326 --- /dev/null +++ b/src/components/page-watch-common/interactive-receive/announcement/hooks/use-announcement.ts @@ -0,0 +1,118 @@ +import { computed, onBeforeMount, onBeforeUnmount, ref, unref } from 'vue'; +import { getWatchCore } from '@/core/watch-sdk'; +import { appEvents, eventBus } from '@/app/app-events'; + +import { translate } from '@/assets/lang'; +import { IarAnnouncementInstance } from '../types/announcement-types'; +import { useAnnouncementTips } from './use-announcement-tips'; + +/** + * @hook 互动-公告 + */ +export const useAnnouncement = () => { + const { openAnnouncementTips } = useAnnouncementTips(); + + const watchCore = getWatchCore(); + + /** 公告 SDK 实例 */ + const announcementSdk = watchCore.interactReceive.getAnnouncement(); + /** 公告是否显示 */ + const announcementVisible = ref(false); + /** 公告列表按钮是否显示 */ + const listBtnVisible = ref(false); + /** 是否正在显示详情 */ + const isShowDetailing = ref(false); + + const announcementRef = ref(); + + /** 公告标题类型 */ + const announcementTitleType = ref('detail'); + /** 公告标题 */ + const announcementTitle = computed(() => { + if (announcementTitleType.value === 'list') { + return translate('interact.announcement.titleList'); + } + return translate('interact.announcement.titleDetail'); + }); + /** 处理标题更改 */ + function onTitleChange(type: string) { + announcementTitleType.value = type; + } + + /** 设置公告显示状态 */ + function setAnnouncementVisible(visible = true) { + announcementVisible.value = visible; + } + + /** 显示公告列表 */ + function openAnnouncementList() { + listBtnVisible.value = false; + isShowDetailing.value = false; + setAnnouncementVisible(true); + const instance = unref(announcementRef); + instance?.showBulletinList(); + } + + /** 显示某个公告详情 */ + function openAnnouncementDetail(data: unknown) { + setAnnouncementVisible(true); + const instance = unref(announcementRef); + instance?.showBulletinDetail(data); + listBtnVisible.value = true; + isShowDetailing.value = true; + } + + /** 处理显示公告详情(socket 事件) */ + function onShowDetailFromSocket() { + setAnnouncementVisible(true); + listBtnVisible.value = true; + } + + function onLookover() { + isShowDetailing.value = true; + } + + /** 点击返回 */ + function onClickBack() { + openAnnouncementList(); + } + + /** 处理关闭弹层 */ + const onCloseDialog = () => { + // 设为已读 + const instance = unref(announcementRef); + instance?.markAnnounceReaded(); + + listBtnVisible.value = false; + + if (announcementSdk.content) { + // 打开公告提示 + openAnnouncementTips(); + } + }; + + onBeforeMount(() => { + eventBus.$on(appEvents.interaction.OpenAnnouncementList, openAnnouncementList); + eventBus.$on(appEvents.interaction.OpenAnnouncementDetail, openAnnouncementDetail); + }); + + onBeforeUnmount(() => { + eventBus.$off(appEvents.interaction.OpenAnnouncementList, openAnnouncementList); + eventBus.$off(appEvents.interaction.OpenAnnouncementDetail, openAnnouncementDetail); + }); + + return { + listBtnVisible, + isShowDetailing, + announcementSdk, + announcementRef, + announcementVisible, + announcementTitle, + onTitleChange, + setAnnouncementVisible, + onCloseDialog, + onShowDetailFromSocket, + onLookover, + onClickBack, + }; +}; diff --git a/src/components/page-watch-common/interactive-receive/announcement/imgs/icon-bulletin.png b/src/components/page-watch-common/interactive-receive/announcement/imgs/icon-bulletin.png new file mode 100644 index 0000000000000000000000000000000000000000..65ae053b811fdba87f5cad5a4d849cdf4aa2faef GIT binary patch literal 2316 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 m9|`T0Ma#Enl07YtZ{h!3+hqELqW0DR0000 + + + + + diff --git a/src/components/page-watch-common/interactive-receive/announcement/pc-announcement-dialog.vue b/src/components/page-watch-common/interactive-receive/announcement/pc-announcement-dialog.vue new file mode 100644 index 0000000..0e46788 --- /dev/null +++ b/src/components/page-watch-common/interactive-receive/announcement/pc-announcement-dialog.vue @@ -0,0 +1,40 @@ + + + + diff --git a/src/components/page-watch-common/interactive-receive/announcement/portrait-annoucement-bar.vue b/src/components/page-watch-common/interactive-receive/announcement/portrait-annoucement-bar.vue new file mode 100644 index 0000000..dcba6a5 --- /dev/null +++ b/src/components/page-watch-common/interactive-receive/announcement/portrait-annoucement-bar.vue @@ -0,0 +1,22 @@ + + + + diff --git a/src/components/page-watch-common/interactive-receive/announcement/portrait-announcement-entrance.vue b/src/components/page-watch-common/interactive-receive/announcement/portrait-announcement-entrance.vue new file mode 100644 index 0000000..124d868 --- /dev/null +++ b/src/components/page-watch-common/interactive-receive/announcement/portrait-announcement-entrance.vue @@ -0,0 +1,76 @@ + + + + + + diff --git a/src/components/page-watch-common/interactive-receive/announcement/types/announcement-types.ts b/src/components/page-watch-common/interactive-receive/announcement/types/announcement-types.ts new file mode 100644 index 0000000..74d6a80 --- /dev/null +++ b/src/components/page-watch-common/interactive-receive/announcement/types/announcement-types.ts @@ -0,0 +1,11 @@ +/** + * 互动接收端商品列表 vue 实例类型 + */ +export interface IarAnnouncementInstance { + /** 标记公告已读 */ + markAnnounceReaded: () => void; + /** 显示公告列表 */ + showBulletinList: () => void; + /** 显示公告详情 */ + showBulletinDetail: (detail: unknown) => void; +} diff --git a/src/components/page-watch-common/interactive-receive/answer-card/hooks/imgs/icon-answer-card.png b/src/components/page-watch-common/interactive-receive/answer-card/hooks/imgs/icon-answer-card.png new file mode 100644 index 0000000000000000000000000000000000000000..603391fae6af3b226ccd0ae66776f1f3a0a45571 GIT binary patch literal 441 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA3?vioaBc-sX#qYVu0Z2@{C-T} z%VEKgg&xZwp>~BYezMT*TD)@2;$QAf#Ch+}>G{;SSj zuqsg0W3KD&N4gH1{stUUQS(#dbw} zJuP;^X;J+TzK}#!|AYQB4*E+Z#0$(nZn~MNK=xS8+8M343cOdGaf%i1lGOBGCBXOZ aps>Ldtw+Xvvv&YJ%i!ti=d#Wzp$Pyqk;e)E literal 0 HcmV?d00001 diff --git a/src/components/page-watch-common/interactive-receive/answer-card/hooks/imgs/icon-answer-card_p.png b/src/components/page-watch-common/interactive-receive/answer-card/hooks/imgs/icon-answer-card_p.png new file mode 100644 index 0000000000000000000000000000000000000000..ab5e1fcdbd00ffb0053c3806c8e757a2d06998bb GIT binary patch literal 2812 zcmV z#$)-$H1xtE^uinR!4&kv6ZXRt^THYN#u@a&67#|q@WT=E!WQzv8}z~z^T87Gz!mes z67sbq5%a+j@xl}I!V&bt6ZFCm^urMJ!w~et5c9(j z^1>4I!w~et5cR?k^urMJ!VvVr5cIYs5c0tf^TH7S|Nr{tpZD5t{PNHK{rUCI zK=jBe^Tizb;feOrQ1#3<{`~X(`RM)h)BNwi_t#_n_u%{Py8G&`_}zH;-ht9y?F|3` z06=t7PE!B^1P2Kj4-6Cv9u^KE5(^w7DljDxGbb)MJ1jOmH2C?5{O&-YnaJbS&yjG! z=%`(_Qcg@r@vmuD-Mo2pgJWKmii-dM328}0K~#9!+}3GNqfitE;2CEqTeqp=5~CDQ zp`}CB;GSON#Q!I zNk|d2xaikZh%HANB2m!qsl3PKBO@jRQuVbnt9$IWJg3=oyq0_1wa(Ub72%L9Qy4Wx zr0TvEY{RG74y^rZNXt@2QN*NfoCYS$j2WD6s8~i};!(sjZ+Va^o;8nT2$mU2)jDlp zNV}t{3@}dA(v}H~F}IeofW1S_Z#ID=&CU6DFwv;xt__^AyUW60R28BW%Y<*lw3HBr zT%u65y(9Q$j`nI4CPY^*~O)q#xT ztP)qMbq`gF3z^4NLRXr#k5sB$@*#)#C0UJJDOHD%OAd)E%@LLw4&)N2QA%-+c(IIK z$SJ!9Uav1JEay=nt+7mNoL!-G1i9r%A~nt&mRzb@kYlWBNv7jUuFzOFA;*~O2CgxI z6;)V0fLwD>oz#d}iC4H{L$0w`=rtw}OX)(+=_+Jg$@{+8gs*cmxI9mt%fSuIN^_BH zeZsKHhO(JLHJ+dtU}Kn-O~ojqaU~6FDa{#PpEKrq_AxGzaU~7w1XARJm309#bCNVJ zJS@Fk1gov%aV4DL8Wh2Twa(cATL;U~kAykc0M6pjlo zJ!M4?ywZbWSkO}@Pd#D97v3t0Ws#+y>d;UmwF_eSIg&Ry*xZ$#lI~cftBT><)SRKTJ>Fa7X9@Vf3~7uSXsMuv|NZqz8f4rM-PUA2T#qSVDj;pY=l@^yjrL=?s zA3z$dP`aQZpm6`Qpp3zTZCM>6$L|C`&3k!qJ?Sa|7Wx+Gf$^%2V(BDUn{6*F9mTru zfyKL%`+&W=CoHcZE|Xxrgj6rEUzZlkuTz->>%p{r+qT~!+W|u|+Va&R9aamldHy@kIEc+Yic>@g1%IFEA)G4vPGPZ4jBkf>0$G~!#5bOJ>^8_p{OF9O6 zhvrg@lVQD6HE=W*WpHRltga!7St=}g>+m!yx_$_-OmS6biLrLT)LCU}%VIeVu}q1D z)xgx!?Fa8sEEegouo{?J6yAeKS0i2K3!MxLtAQ(Bbcv^{5ij#q!^Dd34GHTB*lH>- z@rXs?s!w`h(cX}-K7g&0nxchRLAa(put<-D^$+-(I??j4bi3yI+jGrHSUai)rpAA| z)^e_NskuzJ>I>+#6ebg2sT!ENs7701OU_vaan;~`hUOGD_pH zoTYHMLdVdLjvno|S;GM@X#IjY7Hr@_g_LEz*&=x#m#l}T89^MW6r-!>kvXF)q8JA7Hk_S^5 zP}2jcY~Gz=#Zuqdh+G;5lm6`HZg$g#f+zs1n?zKVtaf2z2P4wrDv*Q_5XAW*@Bdgm z=iEUfFD$URM5wc3`DxBDC{pfFr3iiATUpH*)6v=f2lZ)`HX?LZdyM=x23LNje*MjZ zir>O!gzc^*jF-kfzdgs(w%c6e9tJCM)xj8T?BV)|z9%LhP}#U2j?mj><7KWo@?PE6 zrV4}Q5q5N~W-(Q>RcDnyKjPS%E6vNNh+n}nPff*f_vc4Pv`b^}u2HeuMhb9Oj9jI0 zw`O&Aaew9O#~7-|bl#o=b~C%JtdFl*m)z^q~A>ZSWpkC#Rc|xBocpVKw%u222eLu=V|{)B3z$ z2b5Z+vBDPZp>mh@JqFAhHYTiGR*U0Ii)vXCHTG6vtgd1_+E5((MuO^DA>u8Ir0 zzEaC53pCiE^MVJWK%z;Fy1I^zlFMO { + const interactReceiveStore = useInteractReceiveStore(); + + /** 答题卡入口数据 */ + const answerCardEntranceData: InteractiveEntranceData = { + type: 'answer-card', + name: 'interact.answerCard.title', + icon: require('./imgs/icon-answer-card.png'), + icon2: require('./imgs/icon-answer-card_p.png'), + onClick: () => eventBus.$emit(appEvents.interaction.OpenAnswerCard, true), + }; + + /** 设置答题卡二次入口 */ + const setAnswerCardEntrance = () => { + interactReceiveStore.setInteractiveEntrance(answerCardEntranceData); + }; + + /** 移除答题卡二次入口 */ + const removeAnswerCardEntrance = () => { + interactReceiveStore.removeInteractiveEntrance(answerCardEntranceData.type); + }; + + return { + answerCardEntranceData, + setAnswerCardEntrance, + removeAnswerCardEntrance, + }; +}; + +/** + * 快速答题卡入口 hooks + */ +export const useQuickAnswerCardEntrance = () => { + const interactReceiveStore = useInteractReceiveStore(); + + /** 快速答题卡入口数据 */ + const quickAnswerCardEntranceData: InteractiveEntranceData = { + type: 'quick-answer-card', + name: 'interact.answerCard.title', + icon: require('./imgs/icon-answer-card.png'), + icon2: require('./imgs/icon-answer-card_p.png'), + onClick: () => eventBus.$emit(appEvents.interaction.OpenQuickAnswerCard, true), + }; + + /** 设置快速答题卡二次入口 */ + const setQuickAnswerCardEntrance = () => { + interactReceiveStore.setInteractiveEntrance(quickAnswerCardEntranceData); + }; + + /** 移除快速答题卡二次入口 */ + const removeQuickAnswerCardEntrance = () => { + interactReceiveStore.removeInteractiveEntrance(quickAnswerCardEntranceData.type); + }; + + return { + quickAnswerCardEntranceData, + setQuickAnswerCardEntrance, + removeQuickAnswerCardEntrance, + }; +}; diff --git a/src/components/page-watch-common/interactive-receive/answer-card/hooks/use-answer-card.ts b/src/components/page-watch-common/interactive-receive/answer-card/hooks/use-answer-card.ts new file mode 100644 index 0000000..610b2c3 --- /dev/null +++ b/src/components/page-watch-common/interactive-receive/answer-card/hooks/use-answer-card.ts @@ -0,0 +1,93 @@ +import { onBeforeMount, onBeforeUnmount, ref, computed, unref } from 'vue'; +import { appEvents, eventBus } from '@/app/app-events'; +import { getWatchCore } from '@/core/watch-sdk'; + +import { translate } from '@/assets/lang'; + +import { AllAnswerCardStatus, IarAnswerCardInstance } from '../types/answer-card-types'; +import { useAnswerCardEntrance } from './use-answer-card-entrance'; + +/** + * @hook 互动-答题卡 + */ +export const useAnswerCard = () => { + const { setAnswerCardEntrance, removeAnswerCardEntrance } = useAnswerCardEntrance(); + + const watchCore = getWatchCore(); + /** 答题卡组件节点 */ + const answerCardRef = ref(); + /** 答题卡 SDK 实例 */ + const answerCardSdk = watchCore.interactReceive.getAnswerCard(); + /** 答题卡是否显示 */ + const answerCardVisible = ref(false); + /** 答题卡状态 */ + const answerCardStatus = ref(AllAnswerCardStatus.isShowQuestion); + + /** 答题卡标题 */ + const answerCardTitle = computed(() => { + let title = ''; + switch (unref(answerCardStatus)) { + case AllAnswerCardStatus.isShowQuestion: + title = translate('interact.answerCard.title'); + break; + case AllAnswerCardStatus.isShowResult: + title = answerCardSdk.curSubmittedAnswer + ? translate('interact.answerCard.checkResultTitle') + : translate('interact.answerCard.notSubmitted'); + break; + case AllAnswerCardStatus.isShowAnswer: + title = answerCardSdk.curSubmittedAnswer + ? translate('interact.answerCard.checkAnswerTitle') + : translate('interact.answerCard.notSubmitted'); + break; + } + return title; + }); + + /** 设置答题卡显示状态 */ + const setAnswerCardVisible = (visible = true) => { + answerCardVisible.value = visible; + + // 显示答题中的状态,设置二次入口 + const answerCardInstance = unref(answerCardRef); + if ( + visible && + answerCardInstance && + answerCardInstance.status === AllAnswerCardStatus.isShowQuestion + ) { + setAnswerCardEntrance(); + } + }; + + /** 处理答题卡状态修改 */ + const onStatusChanged = (status: AllAnswerCardStatus) => { + answerCardStatus.value = status; + }; + + /** 处理提交答题卡 */ + const onSubmitSuccess = () => { + removeAnswerCardEntrance(); + }; + + onBeforeMount(() => { + eventBus.$on(appEvents.interaction.OpenAnswerCard, setAnswerCardVisible); + answerCardSdk.on(answerCardSdk.events.STOP_TEST_QUESTION, removeAnswerCardEntrance); + }); + + onBeforeUnmount(() => { + eventBus.$off(appEvents.interaction.OpenAnswerCard, setAnswerCardVisible); + answerCardSdk.off(answerCardSdk.events.STOP_TEST_QUESTION, removeAnswerCardEntrance); + }); + + return { + AllAnswerCardStatus, + answerCardRef, + answerCardSdk, + answerCardVisible, + answerCardTitle, + answerCardStatus, + setAnswerCardVisible, + onStatusChanged, + onSubmitSuccess, + }; +}; diff --git a/src/components/page-watch-common/interactive-receive/answer-card/hooks/use-quick-answer-card.ts b/src/components/page-watch-common/interactive-receive/answer-card/hooks/use-quick-answer-card.ts new file mode 100644 index 0000000..f7a1737 --- /dev/null +++ b/src/components/page-watch-common/interactive-receive/answer-card/hooks/use-quick-answer-card.ts @@ -0,0 +1,68 @@ +import { computed, onBeforeMount, onBeforeUnmount, ref } from 'vue'; +import { getWatchCore } from '@/core/watch-sdk'; +import { appEvents, eventBus } from '@/app/app-events'; + +import { translate } from '@/assets/lang'; + +import { IarAnswerQuestionTypes } from '@polyv/live-watch-sdk'; +import { QuestionData } from '../types/answer-card-types'; +import { useQuickAnswerCardEntrance } from './use-answer-card-entrance'; + +/** + * @hook 互动-答题卡-快速问答 + */ +export const useQuickAnswerCard = () => { + const { setQuickAnswerCardEntrance, removeQuickAnswerCardEntrance } = + useQuickAnswerCardEntrance(); + + const watchCore = getWatchCore(); + /** 答题卡 SDK 实例 */ + const answerCardSdk = watchCore.interactReceive.getAnswerCard(); + /** 快速问答是否显示 */ + const quickAnswerCardVisible = ref(false); + /** 快速问答类型 */ + const quickAnswerCardType = ref(IarAnswerQuestionTypes.Radio); + + /** 快速问答标题 */ + const quickAnswerCardTitle = computed(() => { + return quickAnswerCardType.value === IarAnswerQuestionTypes.CheckBox + ? translate('interact.answerCard.multiChoice') + : translate('interact.answerCard.singleChoice'); + }); + + /** 设置快速问答显示状态 */ + const setQuickAnswerCardVisible = (visible = true, question?: QuestionData) => { + quickAnswerCardVisible.value = visible; + + // 显示答题中的状态,设置二次入口 + if (visible) { + setQuickAnswerCardEntrance(); + } + + if (question && question.type) { + quickAnswerCardType.value = question.type; + } + }; + + /** 处理提交答题卡 */ + const onSubmitSuccess = () => { + removeQuickAnswerCardEntrance(); + }; + + onBeforeMount(() => { + eventBus.$on(appEvents.interaction.OpenQuickAnswerCard, setQuickAnswerCardVisible); + }); + + onBeforeUnmount(() => { + eventBus.$off(appEvents.interaction.OpenQuickAnswerCard, setQuickAnswerCardVisible); + }); + + return { + answerCardSdk, + quickAnswerCardVisible, + quickAnswerCardTitle, + quickAnswerCardType, + setQuickAnswerCardVisible, + onSubmitSuccess, + }; +}; diff --git a/src/components/page-watch-common/interactive-receive/answer-card/mobile-answer-card-popup.vue b/src/components/page-watch-common/interactive-receive/answer-card/mobile-answer-card-popup.vue new file mode 100644 index 0000000..d2c39fc --- /dev/null +++ b/src/components/page-watch-common/interactive-receive/answer-card/mobile-answer-card-popup.vue @@ -0,0 +1,55 @@ + + + + diff --git a/src/components/page-watch-common/interactive-receive/answer-card/mobile-quick-answer-card.vue b/src/components/page-watch-common/interactive-receive/answer-card/mobile-quick-answer-card.vue new file mode 100644 index 0000000..112f22d --- /dev/null +++ b/src/components/page-watch-common/interactive-receive/answer-card/mobile-quick-answer-card.vue @@ -0,0 +1,69 @@ + + + + + + diff --git a/src/components/page-watch-common/interactive-receive/answer-card/pc-answer-card-dialog.vue b/src/components/page-watch-common/interactive-receive/answer-card/pc-answer-card-dialog.vue new file mode 100644 index 0000000..ab7b84a --- /dev/null +++ b/src/components/page-watch-common/interactive-receive/answer-card/pc-answer-card-dialog.vue @@ -0,0 +1,43 @@ + + + + + + diff --git a/src/components/page-watch-common/interactive-receive/answer-card/pc-quick-answer-card-dialog.vue b/src/components/page-watch-common/interactive-receive/answer-card/pc-quick-answer-card-dialog.vue new file mode 100644 index 0000000..41b9d5e --- /dev/null +++ b/src/components/page-watch-common/interactive-receive/answer-card/pc-quick-answer-card-dialog.vue @@ -0,0 +1,41 @@ + + + + diff --git a/src/components/page-watch-common/interactive-receive/answer-card/types/answer-card-types.ts b/src/components/page-watch-common/interactive-receive/answer-card/types/answer-card-types.ts new file mode 100644 index 0000000..85a3fb3 --- /dev/null +++ b/src/components/page-watch-common/interactive-receive/answer-card/types/answer-card-types.ts @@ -0,0 +1,22 @@ +import { IarAnswerQuestionTypes } from '@polyv/live-watch-sdk'; + +/** 所有答题卡状态 */ +export enum AllAnswerCardStatus { + /** 正在显示答题中的问题 */ + isShowQuestion = 'isShowQuestion', + /** 正在显示问卷结果 */ + isShowResult = 'isShowResult', + /** 正在显示问卷答案 */ + isShowAnswer = 'isShowAnswer', +} + +export interface IarAnswerCardInstance { + status?: AllAnswerCardStatus; + /** 返回到结果 */ + backToResult?: () => void; +} + +export interface QuestionData { + /** 问题类型 */ + type?: IarAnswerQuestionTypes; +} diff --git a/src/components/page-watch-common/interactive-receive/check-in/hooks/imgs/icon-check-in.png b/src/components/page-watch-common/interactive-receive/check-in/hooks/imgs/icon-check-in.png new file mode 100644 index 0000000000000000000000000000000000000000..857b78fc30d955bad45222ffaee3a2718657a264 GIT binary patch literal 696 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 { + const interactReceiveStore = useInteractReceiveStore(); + + /** 问卷入口数据 */ + const checkInEntranceData: InteractiveEntranceData = { + type: 'check-in', + name: 'interact.checkIn.title', + icon: require('./imgs/icon-check-in.png'), + icon2: require('./imgs/icon-check-in_p.png'), + onClick: () => eventBus.$emit(appEvents.interaction.OpenCheckIn, true), + }; + + /** 设置签到二次入口 */ + const setCheckInEntrance = () => { + interactReceiveStore.setInteractiveEntrance(checkInEntranceData); + }; + + /** 移除签到二次入口 */ + const removeCheckInEntrance = () => { + interactReceiveStore.removeInteractiveEntrance(checkInEntranceData.type); + }; + + return { + checkInEntranceData, + setCheckInEntrance, + removeCheckInEntrance, + }; +}; diff --git a/src/components/page-watch-common/interactive-receive/check-in/hooks/use-check-in.ts b/src/components/page-watch-common/interactive-receive/check-in/hooks/use-check-in.ts new file mode 100644 index 0000000..e053221 --- /dev/null +++ b/src/components/page-watch-common/interactive-receive/check-in/hooks/use-check-in.ts @@ -0,0 +1,52 @@ +import { onBeforeMount, onBeforeUnmount, ref } from 'vue'; +import { appEvents, eventBus } from '@/app/app-events'; +import { getWatchCore } from '@/core/watch-sdk'; + +import { translate } from '@/assets/lang'; +import { useCheckInEntrance } from './use-check-in-entrance'; + +/** + * @hook 互动-签到 + */ +export const useCheckIn = () => { + const { setCheckInEntrance, removeCheckInEntrance } = useCheckInEntrance(); + + const watchCore = getWatchCore(); + /** 签到 SDK 实例 */ + const checkInSdk = watchCore.interactReceive.getCheckIn(); + /** 签到是否显示 */ + const checkInVisible = ref(false); + /** 签到标题 */ + const checkInTitle = translate('interact.checkIn.title'); + + /** 设置签到是否显示 */ + const setCheckInVisible = (visible = true) => { + checkInVisible.value = visible; + }; + + onBeforeMount(() => { + eventBus.$on(appEvents.interaction.OpenCheckIn, setCheckInVisible); + checkInSdk.on(checkInSdk.events.SIGN_IN, setCheckInEntrance); + checkInSdk.on(checkInSdk.events.SIGN_IN_SUCCESS, removeCheckInEntrance); + checkInSdk.on(checkInSdk.events.SIGN_IN_FINISH, removeCheckInEntrance); + checkInSdk.on(checkInSdk.events.STOP_SIGN_IN, removeCheckInEntrance); + checkInSdk.on(checkInSdk.events.SIGN_IN_FAIL, removeCheckInEntrance); + }); + + onBeforeUnmount(() => { + eventBus.$off(appEvents.interaction.OpenCheckIn, setCheckInVisible); + checkInSdk.off(checkInSdk.events.SIGN_IN, setCheckInEntrance); + checkInSdk.off(checkInSdk.events.SIGN_IN_SUCCESS, removeCheckInEntrance); + checkInSdk.off(checkInSdk.events.SIGN_IN_FINISH, removeCheckInEntrance); + checkInSdk.off(checkInSdk.events.STOP_SIGN_IN, removeCheckInEntrance); + checkInSdk.off(checkInSdk.events.SIGN_IN_FAIL, removeCheckInEntrance); + }); + + return { + checkInSdk, + checkInVisible, + checkInTitle, + setCheckInVisible, + removeCheckInEntrance, + }; +}; diff --git a/src/components/page-watch-common/interactive-receive/check-in/mobile-check-in-popup.vue b/src/components/page-watch-common/interactive-receive/check-in/mobile-check-in-popup.vue new file mode 100644 index 0000000..7b3a6f4 --- /dev/null +++ b/src/components/page-watch-common/interactive-receive/check-in/mobile-check-in-popup.vue @@ -0,0 +1,34 @@ + + + + diff --git a/src/components/page-watch-common/interactive-receive/check-in/pc-check-in-dialog.vue b/src/components/page-watch-common/interactive-receive/check-in/pc-check-in-dialog.vue new file mode 100644 index 0000000..a0403ef --- /dev/null +++ b/src/components/page-watch-common/interactive-receive/check-in/pc-check-in-dialog.vue @@ -0,0 +1,39 @@ + + + + diff --git a/src/components/page-watch-common/interactive-receive/check-in/portrait-check-in-popup.vue b/src/components/page-watch-common/interactive-receive/check-in/portrait-check-in-popup.vue new file mode 100644 index 0000000..f4a027d --- /dev/null +++ b/src/components/page-watch-common/interactive-receive/check-in/portrait-check-in-popup.vue @@ -0,0 +1,19 @@ + + + + diff --git a/src/components/page-watch-common/interactive-receive/enroll-lottery/enroll-lottery-pendant.vue b/src/components/page-watch-common/interactive-receive/enroll-lottery/enroll-lottery-pendant.vue new file mode 100644 index 0000000..9a0420e --- /dev/null +++ b/src/components/page-watch-common/interactive-receive/enroll-lottery/enroll-lottery-pendant.vue @@ -0,0 +1,46 @@ + + + + diff --git a/src/components/page-watch-common/interactive-receive/enroll-lottery/hooks/use-enroll-lottery.ts b/src/components/page-watch-common/interactive-receive/enroll-lottery/hooks/use-enroll-lottery.ts new file mode 100644 index 0000000..3713532 --- /dev/null +++ b/src/components/page-watch-common/interactive-receive/enroll-lottery/hooks/use-enroll-lottery.ts @@ -0,0 +1,33 @@ +import { onBeforeUnmount, onMounted, ref } from 'vue'; +import { appEvents, eventBus } from '@/app/app-events'; +import { getWatchCore } from '@/core/watch-sdk'; + +/** + * @hook 互动-抽奖-报名抽奖 + */ +export const useEnrollLottery = () => { + const watchCore = getWatchCore(); + /** 报名抽奖实例 */ + const enrollLotterySdk = watchCore.interactReceive.getEnrollLottery(); + + const dialogVisible = ref(false); + + /** 更新弹层显示状态 */ + function updateDialogVisible(visible = true) { + dialogVisible.value = !!visible; + } + + onMounted(() => { + eventBus.$on(appEvents.interaction.OpenEnrollLottery, updateDialogVisible); + }); + + onBeforeUnmount(() => { + eventBus.$off(appEvents.interaction.OpenEnrollLottery, updateDialogVisible); + }); + + return { + enrollLotterySdk, + dialogVisible, + updateDialogVisible, + }; +}; diff --git a/src/components/page-watch-common/interactive-receive/enroll-lottery/mobile-enroll-lottery-popup.vue b/src/components/page-watch-common/interactive-receive/enroll-lottery/mobile-enroll-lottery-popup.vue new file mode 100644 index 0000000..aa36ebf --- /dev/null +++ b/src/components/page-watch-common/interactive-receive/enroll-lottery/mobile-enroll-lottery-popup.vue @@ -0,0 +1,34 @@ + + + + + + diff --git a/src/components/page-watch-common/interactive-receive/enroll-lottery/pc-enroll-lottery-dialog.vue b/src/components/page-watch-common/interactive-receive/enroll-lottery/pc-enroll-lottery-dialog.vue new file mode 100644 index 0000000..4078f02 --- /dev/null +++ b/src/components/page-watch-common/interactive-receive/enroll-lottery/pc-enroll-lottery-dialog.vue @@ -0,0 +1,26 @@ + + + + diff --git a/src/components/page-watch-common/interactive-receive/feed-back/hooks/use-feed-back.ts b/src/components/page-watch-common/interactive-receive/feed-back/hooks/use-feed-back.ts new file mode 100644 index 0000000..dc5640e --- /dev/null +++ b/src/components/page-watch-common/interactive-receive/feed-back/hooks/use-feed-back.ts @@ -0,0 +1,40 @@ +import { computed, onBeforeMount, onBeforeUnmount, ref } from 'vue'; +import { appEvents, eventBus } from '@/app/app-events'; +import { getWatchCore } from '@/core/watch-sdk'; + +import { translate } from '@/assets/lang'; + +/** + * @hook 互动-反馈 + * */ +export const useFeedBack = () => { + const watchCore = getWatchCore(); + /** 反馈 SDK 实例 */ + const feedBackSdk = watchCore.interactReceive.getFeedBack(); + + /** 反馈标题 */ + const feedBackTitle = computed(() => translate('interact.feedBack.title')); + + /** 反馈是否显示 */ + const feedBackVisible = ref(false); + + /** 设置反馈是否显示 */ + const setFeedBackVisible = (visible = true) => { + feedBackVisible.value = visible; + }; + + onBeforeMount(() => { + eventBus.$on(appEvents.interaction.OpenFeedBack, setFeedBackVisible); + }); + + onBeforeUnmount(() => { + eventBus.$off(appEvents.interaction.OpenFeedBack, setFeedBackVisible); + }); + + return { + feedBackSdk, + feedBackTitle, + feedBackVisible, + setFeedBackVisible, + }; +}; diff --git a/src/components/page-watch-common/interactive-receive/feed-back/mobile-feed-back-popup.vue b/src/components/page-watch-common/interactive-receive/feed-back/mobile-feed-back-popup.vue new file mode 100644 index 0000000..f672f1b --- /dev/null +++ b/src/components/page-watch-common/interactive-receive/feed-back/mobile-feed-back-popup.vue @@ -0,0 +1,26 @@ + + + + diff --git a/src/components/page-watch-common/interactive-receive/feed-back/pc-feed-back-dialog.vue b/src/components/page-watch-common/interactive-receive/feed-back/pc-feed-back-dialog.vue new file mode 100644 index 0000000..b9731f3 --- /dev/null +++ b/src/components/page-watch-common/interactive-receive/feed-back/pc-feed-back-dialog.vue @@ -0,0 +1,27 @@ + + + + diff --git a/src/components/page-watch-common/interactive-receive/interactive-entrance/imgs/icon-task.png b/src/components/page-watch-common/interactive-receive/interactive-entrance/imgs/icon-task.png new file mode 100644 index 0000000000000000000000000000000000000000..799e430163730e264bbc811d67091a5ce9edcc5f GIT binary patch literal 395 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA3?vioaBc-su>n3Iu0UF7*MGrX|Alt{7u*dd zf$Y5?5fIw*Uvlq%;XVJ&Z^LAP%76-hQV{h(_8yQf5ikkVD8A>v2t;<*|4T2KRe=`B zl?3?(Go1Od_SLMvy6-Nh$>*?~JGS}fx4lay)|NyETPaELFFo;gDNyBpPZ!4!kK=Er z-sC#0AmC~|%XXvZ_rL%Cr(bJpx}?&_)hbdXceL5K+-34q4u+IIQD@~$1_v*;YFD#u z3I~;Q8xJ_gHx*1%ImTo;dzoh9wEqID{Jpk#9#ydnxaq_>&&ba}_3e#GVsfv00z?uI z39fK%;c+<6xlEvx;g4TNqmQbWQ}L&liTn$8f4?wiZ&234lM6F#lh8xU(1X&Mx^F^WteSS5r*K!~@QS=lA{$ut=G_=1-USQDKAh0ukm}K(8=(y85}S Ib4q9e06Y7zQ~&?~ literal 0 HcmV?d00001 diff --git a/src/components/page-watch-common/interactive-receive/interactive-entrance/mobile-interactive-entrance.vue b/src/components/page-watch-common/interactive-receive/interactive-entrance/mobile-interactive-entrance.vue new file mode 100644 index 0000000..da75626 --- /dev/null +++ b/src/components/page-watch-common/interactive-receive/interactive-entrance/mobile-interactive-entrance.vue @@ -0,0 +1,81 @@ + + + + + + diff --git a/src/components/page-watch-common/interactive-receive/interactive-entrance/pc-interactive-entrance.vue b/src/components/page-watch-common/interactive-receive/interactive-entrance/pc-interactive-entrance.vue new file mode 100644 index 0000000..5521945 --- /dev/null +++ b/src/components/page-watch-common/interactive-receive/interactive-entrance/pc-interactive-entrance.vue @@ -0,0 +1,137 @@ + + + + + + diff --git a/src/components/page-watch-common/interactive-receive/interactive-entrance/portrait-interactive-entrance.vue b/src/components/page-watch-common/interactive-receive/interactive-entrance/portrait-interactive-entrance.vue new file mode 100644 index 0000000..376bd49 --- /dev/null +++ b/src/components/page-watch-common/interactive-receive/interactive-entrance/portrait-interactive-entrance.vue @@ -0,0 +1,153 @@ + + + + + + diff --git a/src/components/page-watch-common/interactive-receive/interactive-entrance/use-interactive-entrance.ts b/src/components/page-watch-common/interactive-receive/interactive-entrance/use-interactive-entrance.ts new file mode 100644 index 0000000..9c067ca --- /dev/null +++ b/src/components/page-watch-common/interactive-receive/interactive-entrance/use-interactive-entrance.ts @@ -0,0 +1,37 @@ +/** + * @file 互动功能二次入口 hook + */ +import { computed } from 'vue'; +import { + InteractiveEntranceData, + useInteractReceiveStore, +} from '@/store/use-interact-receive-store'; +import { isFunction } from '@/assets/utils/function'; + +/** + * @hook 互动二次入口 + */ +export const useInteractiveEntrance = () => { + const interactReceiveStore = useInteractReceiveStore(); + + /** 入口列表是否显示 */ + const entrancesVisible = computed(() => { + return interactReceiveStore.interactiveEntrance.length > 0; + }); + + /** + * 打开互动功能 + * @param entranceData 入口数据 + */ + function openInteractive(entranceData: InteractiveEntranceData) { + // 响应对应的 onClick 回调 + if (isFunction(entranceData.onClick)) { + entranceData.onClick(); + } + } + + return { + entrancesVisible, + openInteractive, + }; +}; diff --git a/src/components/page-watch-common/interactive-receive/load-iar-ui.ts b/src/components/page-watch-common/interactive-receive/load-iar-ui.ts new file mode 100644 index 0000000..c4270a1 --- /dev/null +++ b/src/components/page-watch-common/interactive-receive/load-iar-ui.ts @@ -0,0 +1,89 @@ +import { isMobile } from '@/assets/utils/browser'; +import { getWatchCore } from '@/core/watch-sdk'; +import { loadScript } from '@just4/load-script'; +import { SdkLoaderEnv } from '@polyv/live-watch-sdk'; +import { PolyvIRSceneComponentOption, PolyvIRSceneKey, PolyvIRSceneType } from './_types'; + +// 判断当前加载移动端和PC端互动 +const interactAppEntrance = isMobile ? 'entranceMobile' : 'entrancePc'; + +/** 根据观看页 SDK 环境获取互动 UI 层对应环境的配置 */ +function getIarUIConfigByWatchSdkEnv() { + const watchCore = getWatchCore(); + const env = watchCore.getSdkLoaderEnv(); + const domainInfo = watchCore.domain.getDomainInfo(); + + const results: Record = { + [SdkLoaderEnv.Prod]: { + domain: domainInfo.webSdkDomain, + version: 'rc-20230413', + }, + [SdkLoaderEnv.Rc]: { + domain: domainInfo.webSdkDomain, + version: 'rc-20230413', + }, + [SdkLoaderEnv.Test]: { + domain: domainInfo.webSdkTest1Domain, + version: 'beta-20230413', + }, + }; + + return results[env]; +} + +/** + * 获取互动功能 UI 的加载地址 + */ +function getIarUILoaderUrl() { + const { domain, version } = getIarUIConfigByWatchSdkEnv(); + return `${domain}/interactions-receive-sdk-ui-default/${version}/lib/${interactAppEntrance}/${interactAppEntrance}.umd.min.js`; +} + +let iarUILoader: Promise | undefined; + +/** + * 加载互动功能 UI + */ +export function loadInteractiveReceiveUI(): Promise { + if (window.PolyvIRScene) { + return Promise.resolve(window.PolyvIRScene); + } + + if (!iarUILoader) { + const url = getIarUILoaderUrl(); + iarUILoader = new Promise((resolve, reject) => { + (async () => { + await loadScript(url); + if (window.PolyvIRScene) { + resolve(window.PolyvIRScene); + } else { + reject(new Error('loadInteractiveReceiveUI fail, window.PolyvIRScene is undefined')); + } + })(); + }); + } + + return iarUILoader; +} + +/** + * 获取互动功能 UI 组件配置 + * @param iarKey 互动组件 + */ +export function getIarComponent(iarKey: PolyvIRSceneKey): PolyvIRSceneComponentOption { + if (!window.PolyvIRScene) { + throw new Error('getIarComponent fail, window.PolyvIRScene is undefined'); + } + + const PolyvIRScene = window.PolyvIRScene; + const entranceApp = PolyvIRScene[interactAppEntrance]; + if (!entranceApp) { + throw new Error(`getIarComponent fail, ${interactAppEntrance} is undefined`); + } + + if (!entranceApp[iarKey]) { + throw new Error(`IarEntranceApp not exist ${iarKey}`); + } + + return entranceApp[iarKey]; +} diff --git a/src/components/page-watch-common/interactive-receive/lottery/hooks/imgs/icon-lottery-record.png b/src/components/page-watch-common/interactive-receive/lottery/hooks/imgs/icon-lottery-record.png new file mode 100644 index 0000000000000000000000000000000000000000..42c33a831bc5c87decc3891d2858a826d6fd4507 GIT binary patch literal 330 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA3?vioaBc-s_5nU2u0Z-_tx9^N^+&zSM-gwkkn`IAM_g+Tdbo-U3d9>?EKJ}Y!cfrpJXDC$@8>UY2GR~uJk zB&Q|F9Ir~u|9Qg6;>jh8W`kCzB*BERlRO<>XFjf)6dIctQT1ZF(*|Wb;l{J?a~!@% zUW{Md_v??x+>aU-uXdO#{`BGa*Qz&JFeJC|zkpSF$_uv8a<>&9=O(y&IcW7S$>y)P zdZ9&ajtYmu(zfix$H$`cexx+M`_>vEtaN1YhmLa#+$LpC@_rm{!zjwpP O89ZJ6T-G@yGywpa&ySG+ literal 0 HcmV?d00001 diff --git a/src/components/page-watch-common/interactive-receive/lottery/hooks/imgs/icon-lottery-record_p.png b/src/components/page-watch-common/interactive-receive/lottery/hooks/imgs/icon-lottery-record_p.png new file mode 100644 index 0000000000000000000000000000000000000000..7d81ce1962b0dd5966064a4fd18bffa587d70793 GIT binary patch literal 2536 zcmVP)W5eAf>G>&Rp)3mP=drs$k zPU(G5=X_D=d`{?mPUw72=zUJ3mG-drj$mOzC}1>3mG;d`;U~Y=eNO6qPV0V6>3mG-d`;?oPU(G2>U>SU~V3vM; zd`#+nP3U_}=zL87|Nrv2pY*}2?w))3+|T~{`18G`>yBmn>f-m*#QNgb^~$&Eg<0>X zhwYnp?U{7^@ayrkneVBI5D1Pk0000ubW%=J00aUD2n-4j6c-&5EF&2k5iuqqA2u{P zC@v{H?mzqa$Z+G%e_~BV=)qakuBB2jh# z6oqG)5d`Cs#8_6+BBBO0?n~;Tr6$I#@Bcuf=*5s0Y}vYMzMr&Jes#`i`1SuGIQYd8 zbol)ZUS4S8M!Z%Imp>HtQ9Mp)gDQV1P%926+Xhu~g;uT8(;jqEE))Gh>vd|aLJqZ} zc0!w-jCfgT>na>U)!UUz(UL+ZR0>-MZA7KpX@Dn2?1uv7(!w!`87hH z?Ru^>2o3FOvm{?e0{SEhI)sQ`NT88$wvRO*gFvVd!x|DAo$WIiLdXmUK8$Rix(cDA z)@`G+eFiE-fO^R2Odn$ikuW^$=q#Tb0ue!O&M>m?dr^nT(2Mr%XZA^H5FuKM)d+p0 zF+|E(LZj0GSw1a@nAYA%5Ka$z<8whEV#vkD2#0;DFe#@&TmesBOdq^}ClwiA*K}jaOdC8|_z_xwC+$p<>P!&!lg>22 z6Vn&qNh7nLwII-ql^}j0DAAqmCM_l98k5j;$8xn=P90FsnS^R`QrgX$ZmiEF1P8+S zeV^*gZY-buANruijkqn@|NsBY+{&Q4bP^)%J@WL)_r6E3y(`=R6-Jk$Wu?wL1 z7YH?IJaqw-@~S~YEi4T)`#@PpRSS!od>ZWR1MLEeoBXQGg4jM#9B4(RT@*b&p4kSP zjk)*tqS$bCxatIShPT8{K&y}s^r}~7rd%C$0xIFPwG&XJJgtfhxti_o1D#Nm=bJ!f z;{(jg+5qht^0aoEaZ)_!qIhZtR1mICG99QkQU0i#>qje~ys{7gp-0aF4aodK59jaL z>^SBmpab;isZ0bt8YhV~$6I@z^92T>cZQt_;q*y+7REUfOKFU2*_!7IhDWcr5!OW- zV<}L^w46bmkGr( ze3}{Ljg3l9|KLd!2E@V~7b|TM-EZ^Yt=BIP2kk73po!=R(KTN0iLdY+Cmw)ii+rU`xAxIwXSDJccY;NLrh|TEeM%qc!4z=Md~2 z9;e9TDI&Fj6veZ*9DyTs@x1V6dkFe1Vr?WDQ#ZHwHMgcVh8)%IvDDP<)3da`?<6&L!ta=J;L)u|UBMBy=@-%tiFB@$!{AQzQ@t=)H zlIFxfGjgz=osGwO)`)((xnmUwVJL{AmDLgp6;{~)|IfXd=Vp);7LP#KsnqH)k}{)` z8p$S5ux|N~w>6EUdhE$wZ&yhom9m|e36xaf3W+RWF3q`>B2Luf>+Sgg07z~rOhUnO zL=h%5v|~j#hA%ZXzLDQX{RkrehZ>R8Clg*^gSz z+BjW3*^*46CQKD26|P^9$Wk$AD90SvlNa4dVWKBcQjwzYAPX3}2@RaV+bGRMQ8YyW zwD3wZRMRvMoHWTMP*N!?(E}D?tm!x-NSHuL^}^-wiUkaso-=e1NhnlZ7GV;DNQucP yRB}1`@HiRuzoS|+&W_DE%r@h6-JIioWAX)Lb3 { + const watchCore = getWatchCore(); + /** 抽奖 SDK 实例 */ + const lotterySdk = watchCore.interactReceive.getLottery(); + /** 抽奖动画是否显示 */ + const lotteryAnimationVisible = ref(false); + /** 当前抽奖状态 */ + const currentLotteryStatus = ref(); + + /** 处理抽奖状态改变 */ + function onLotteryStatusChange(status: IarLotteryStatus) { + currentLotteryStatus.value = status; + + switch (status) { + case IarLotteryStatus.running: + lotteryAnimationVisible.value = true; + eventBus.$emit(appEvents.interaction.OpenLotteryResult, { visible: false }); + break; + case IarLotteryStatus.over: + case IarLotteryStatus.end: + lotteryAnimationVisible.value = false; + break; + } + } + + /** 处理抽奖动画显示状态改变 */ + function onVisibleChange(visible = false) { + lotteryAnimationVisible.value = visible; + } + + return { + lotterySdk, + lotteryAnimationVisible, + onLotteryStatusChange, + onVisibleChange, + }; +}; diff --git a/src/components/page-watch-common/interactive-receive/lottery/hooks/use-lottery-record-entrance.ts b/src/components/page-watch-common/interactive-receive/lottery/hooks/use-lottery-record-entrance.ts new file mode 100644 index 0000000..bace70a --- /dev/null +++ b/src/components/page-watch-common/interactive-receive/lottery/hooks/use-lottery-record-entrance.ts @@ -0,0 +1,37 @@ +import { appEvents, eventBus } from '@/app/app-events'; +import { + InteractiveEntranceData, + useInteractReceiveStore, +} from '@/store/use-interact-receive-store'; + +/** + * @hook 互动-抽奖-中奖记录入口 + */ +export const useLotteryRecordEntrance = () => { + const interactReceiveStore = useInteractReceiveStore(); + + /** 中奖记录入口数据 */ + const lotteryRecordEntranceData: InteractiveEntranceData = { + type: 'lottery-record', + name: 'interact.lottery.record', + icon: require('./imgs/icon-lottery-record.png'), + icon2: require('./imgs/icon-lottery-record_p.png'), + onClick: () => eventBus.$emit(appEvents.interaction.OpenLotteryRecord, true), + }; + + /** 设置中奖记录二次入口 */ + const setLotteryRecordEntrance = () => { + interactReceiveStore.setInteractiveEntrance(lotteryRecordEntranceData); + }; + + /** 移除中奖记录二次入口 */ + const removeLotteryRecordEntrance = () => { + interactReceiveStore.removeInteractiveEntrance(lotteryRecordEntranceData.type); + }; + + return { + lotteryRecordEntranceData, + setLotteryRecordEntrance, + removeLotteryRecordEntrance, + }; +}; diff --git a/src/components/page-watch-common/interactive-receive/lottery/hooks/use-lottery-record.ts b/src/components/page-watch-common/interactive-receive/lottery/hooks/use-lottery-record.ts new file mode 100644 index 0000000..9009bf9 --- /dev/null +++ b/src/components/page-watch-common/interactive-receive/lottery/hooks/use-lottery-record.ts @@ -0,0 +1,101 @@ +import { computed, onBeforeMount, onBeforeUnmount, ref, watch } from 'vue'; +import { appEvents, eventBus } from '@/app/app-events'; +import { getWatchCore } from '@/core/watch-sdk'; + +import { useInteractReceiveStore } from '@/store/use-interact-receive-store'; +import { translate } from '@/assets/lang'; +import { updateModelEmit, VueEmit } from '@/assets/utils/vue-utils/emit-utils'; +import { PropUtils, VueProps } from '@/assets/utils/vue-utils/props-utils'; + +import { LotteryRecordData } from '../types/lottery-types'; +import { useLotteryRecordEntrance } from './use-lottery-record-entrance'; + +export const lotteryRecordProps = () => ({ + /** 抽奖记录是否显示,支持 .sync */ + visible: PropUtils.bool.def(false), +}); + +export const lotteryRecordEmits = () => ({ + ...updateModelEmit<'visible', boolean>('visible'), +}); + +/** + * @hook 互动-抽奖-中奖记录 + * */ +export const useLotteryRecord = (options: { + props: VueProps; + emit: VueEmit; +}) => { + const { props, emit } = options; + + const interactReceiveStore = useInteractReceiveStore(); + const { setLotteryRecordEntrance, removeLotteryRecordEntrance } = useLotteryRecordEntrance(); + + const watchCore = getWatchCore(); + /** 抽奖 SDK 实例 */ + const lotterySdk = watchCore.interactReceive.getLottery(); + + /** 中奖记录是否显示 */ + const lotteryRecordVisible = ref(false); + + watch( + () => props.visible, + () => { + lotteryRecordVisible.value = props.visible; + }, + ); + + watch( + () => lotteryRecordVisible.value, + () => { + emit('update:visible', lotteryRecordVisible.value); + }, + ); + + /** 设置中奖记录显示状态 */ + function setLotteryRecordVisible(visibleState = true) { + lotteryRecordVisible.value = visibleState; + } + + onBeforeMount(() => { + eventBus.$on(appEvents.interaction.OpenLotteryRecord, setLotteryRecordVisible); + }); + + onBeforeUnmount(() => { + eventBus.$off(appEvents.interaction.OpenLotteryRecord, setLotteryRecordVisible); + }); + + /** 处理中奖列表改变事件 */ + function onLotteryListChanged(lotteryList: LotteryRecordData[] = []) { + interactReceiveStore.lotteryWinRecords = lotteryList; + + if (lotteryList.length) { + setLotteryRecordEntrance(); + } else { + removeLotteryRecordEntrance(); + } + } + + /** + * 处理显示中奖结果 + * @param record 中奖记录 + */ + function onShowLotteryResult(record: LotteryRecordData) { + eventBus.$emit(appEvents.interaction.OpenLotteryResult, { + visible: true, + record, + }); + setLotteryRecordVisible(false); + } + + const lotteryRecordTitle = computed(() => translate('interact.lottery.record')); + + return { + lotterySdk, + lotteryRecordVisible, + lotteryRecordTitle, + setLotteryRecordVisible, + onLotteryListChanged, + onShowLotteryResult, + }; +}; diff --git a/src/components/page-watch-common/interactive-receive/lottery/hooks/use-lottery-result.ts b/src/components/page-watch-common/interactive-receive/lottery/hooks/use-lottery-result.ts new file mode 100644 index 0000000..b485e16 --- /dev/null +++ b/src/components/page-watch-common/interactive-receive/lottery/hooks/use-lottery-result.ts @@ -0,0 +1,102 @@ +import { computed, onBeforeMount, onBeforeUnmount, ref, unref } from 'vue'; +import { appEvents, eventBus } from '@/app/app-events'; +import { getWatchCore } from '@/core/watch-sdk'; + +import { translate } from '@/assets/lang'; + +import { + AllLotteryResultStatus, + LotteryRecordData, + LotteryResultInstance, +} from '../types/lottery-types'; + +/** + * @hook 互动-抽奖-抽奖结果 + * */ +export const useLotteryResult = () => { + const watchCore = getWatchCore(); + /** 抽奖 SDK 实例 */ + const lotterySdk = watchCore.interactReceive.getLottery(); + + /** 抽奖结果组件实例 */ + const lotteryResultInstance = ref(); + + /** 抽奖结果是否显示 */ + const lotteryResultVisible = ref(false); + /** 设置抽奖显示状态 */ + function setLotteryResultVisible(visible = true) { + lotteryResultVisible.value = visible; + } + + /** 将结果状态返回到上一级 */ + function backLotteryResult() { + const instance = unref(lotteryResultInstance); + if (instance?.toBack) { + instance.toBack(); + } + } + + /** 当前抽奖结果显示状态 */ + const lotteryResultStatus = ref(); + /** 处理结果显示状态改变 */ + function onStatusChanged(status: AllLotteryResultStatus) { + lotteryResultStatus.value = status; + } + + /** + * 处理打开抽奖记录事件 + * @param record 需要显示的抽奖记录 + */ + function onOpenLotteryResult(params: { visible: boolean; record?: LotteryRecordData }) { + const { visible = true, record } = params; + const instance = unref(lotteryResultInstance); + if (record && instance?.setLottery) { + instance.setLottery({ + ...record, + isWinner: true, + }); + } + + lotteryResultStatus.value = AllLotteryResultStatus.isShowLotteryEnd; + backLotteryResult(); + + setLotteryResultVisible(visible); + } + + onBeforeMount(() => { + eventBus.$on(appEvents.interaction.OpenLotteryResult, onOpenLotteryResult); + }); + + onBeforeUnmount(() => { + eventBus.$off(appEvents.interaction.OpenLotteryResult, onOpenLotteryResult); + }); + + /** 抽奖标题 */ + const lotteryResultTitle = computed(() => { + const titles: Record = { + isShowLotteryEnd: translate('interact.lottery.result'), + isShowWinnerList: translate('interact.lottery.checkList'), + isShowSubmitInfo: translate('interact.lottery.submitInfo'), + }; + const status = unref(lotteryResultStatus) ?? AllLotteryResultStatus.isShowLotteryEnd; + return titles[status]; + }); + + const showBackable = computed(() => { + return ( + lotteryResultStatus.value && + lotteryResultStatus.value !== AllLotteryResultStatus.isShowLotteryEnd + ); + }); + + return { + lotterySdk, + lotteryResultTitle, + lotteryResultInstance, + lotteryResultVisible, + showBackable, + setLotteryResultVisible, + backLotteryResult, + onStatusChanged, + }; +}; diff --git a/src/components/page-watch-common/interactive-receive/lottery/mobile-lottery-animation.vue b/src/components/page-watch-common/interactive-receive/lottery/mobile-lottery-animation.vue new file mode 100644 index 0000000..374b1ac --- /dev/null +++ b/src/components/page-watch-common/interactive-receive/lottery/mobile-lottery-animation.vue @@ -0,0 +1,77 @@ + + + + + + diff --git a/src/components/page-watch-common/interactive-receive/lottery/mobile-lottery-record-popup.vue b/src/components/page-watch-common/interactive-receive/lottery/mobile-lottery-record-popup.vue new file mode 100644 index 0000000..6648952 --- /dev/null +++ b/src/components/page-watch-common/interactive-receive/lottery/mobile-lottery-record-popup.vue @@ -0,0 +1,50 @@ + + + + diff --git a/src/components/page-watch-common/interactive-receive/lottery/mobile-lottery-result-popup.vue b/src/components/page-watch-common/interactive-receive/lottery/mobile-lottery-result-popup.vue new file mode 100644 index 0000000..c60fd6b --- /dev/null +++ b/src/components/page-watch-common/interactive-receive/lottery/mobile-lottery-result-popup.vue @@ -0,0 +1,45 @@ + + + + diff --git a/src/components/page-watch-common/interactive-receive/lottery/pc-lottery-animation.vue b/src/components/page-watch-common/interactive-receive/lottery/pc-lottery-animation.vue new file mode 100644 index 0000000..168fd94 --- /dev/null +++ b/src/components/page-watch-common/interactive-receive/lottery/pc-lottery-animation.vue @@ -0,0 +1,28 @@ + + + + diff --git a/src/components/page-watch-common/interactive-receive/lottery/pc-lottery-record.vue b/src/components/page-watch-common/interactive-receive/lottery/pc-lottery-record.vue new file mode 100644 index 0000000..7de7834 --- /dev/null +++ b/src/components/page-watch-common/interactive-receive/lottery/pc-lottery-record.vue @@ -0,0 +1,71 @@ + + + + + + diff --git a/src/components/page-watch-common/interactive-receive/lottery/pc-lottery-result-dialog.vue b/src/components/page-watch-common/interactive-receive/lottery/pc-lottery-result-dialog.vue new file mode 100644 index 0000000..b4c1f5c --- /dev/null +++ b/src/components/page-watch-common/interactive-receive/lottery/pc-lottery-result-dialog.vue @@ -0,0 +1,35 @@ + + + + diff --git a/src/components/page-watch-common/interactive-receive/lottery/types/lottery-types.ts b/src/components/page-watch-common/interactive-receive/lottery/types/lottery-types.ts new file mode 100644 index 0000000..941f6ef --- /dev/null +++ b/src/components/page-watch-common/interactive-receive/lottery/types/lottery-types.ts @@ -0,0 +1,28 @@ +/** + * 抽奖结果状态 + */ +export enum AllLotteryResultStatus { + /** 显示中奖结果 */ + isShowLotteryEnd = 'isShowLotteryEnd', + /** 显示中奖名单 */ + isShowWinnerList = 'isShowWinnerList', + /** 填写中奖信息 */ + isShowSubmitInfo = 'isShowSubmitInfo', +} + +/** + * 中奖记录数据类型 + */ +export interface LotteryRecordData { + /** 是否已提交 */ + received: boolean; + /** 是否中奖 */ + isWinner: boolean; +} + +export interface LotteryResultInstance { + /** 返回到结果 */ + toBack?: () => void; + /** 设置中奖记录 */ + setLottery?: (record: LotteryRecordData) => void; +} diff --git a/src/components/page-watch-common/interactive-receive/mobile-iar-render.vue b/src/components/page-watch-common/interactive-receive/mobile-iar-render.vue new file mode 100644 index 0000000..ff96fc7 --- /dev/null +++ b/src/components/page-watch-common/interactive-receive/mobile-iar-render.vue @@ -0,0 +1,81 @@ + + + + + + diff --git a/src/components/page-watch-common/interactive-receive/pc-iar-render.vue b/src/components/page-watch-common/interactive-receive/pc-iar-render.vue new file mode 100644 index 0000000..18cb8a0 --- /dev/null +++ b/src/components/page-watch-common/interactive-receive/pc-iar-render.vue @@ -0,0 +1,53 @@ + + + + + + diff --git a/src/components/page-watch-common/interactive-receive/portrait-iar-render.vue b/src/components/page-watch-common/interactive-receive/portrait-iar-render.vue new file mode 100644 index 0000000..1223209 --- /dev/null +++ b/src/components/page-watch-common/interactive-receive/portrait-iar-render.vue @@ -0,0 +1,87 @@ + + + + + + + diff --git a/src/components/page-watch-common/interactive-receive/product/hooks/use-product-detail.ts b/src/components/page-watch-common/interactive-receive/product/hooks/use-product-detail.ts new file mode 100644 index 0000000..5ed4f72 --- /dev/null +++ b/src/components/page-watch-common/interactive-receive/product/hooks/use-product-detail.ts @@ -0,0 +1,30 @@ +import { ref } from 'vue'; +import { ProductGoodData } from '../types/product-types'; + +/** + * @hook 商品详情 + * */ +export const useProductDetail = () => { + /** 正在显示的商品详情 */ + const goodDetail = ref(); + /** 商品详情弹层是否可见 */ + const goodDetailVisible = ref(false); + + /** 打开商品详情 */ + const openGoodDetail = (good: ProductGoodData) => { + goodDetail.value = good; + goodDetailVisible.value = true; + }; + + /** 关闭商品详情 */ + const closeGoodDetail = () => { + goodDetailVisible.value = false; + }; + + return { + goodDetail, + goodDetailVisible, + openGoodDetail, + closeGoodDetail, + }; +}; diff --git a/src/components/page-watch-common/interactive-receive/product/hooks/use-product-job-detail.ts b/src/components/page-watch-common/interactive-receive/product/hooks/use-product-job-detail.ts new file mode 100644 index 0000000..ac932b9 --- /dev/null +++ b/src/components/page-watch-common/interactive-receive/product/hooks/use-product-job-detail.ts @@ -0,0 +1,31 @@ +import { appEvents, eventBus, useEventBusListener } from '@/app/app-events'; +import { ref } from 'vue'; +import { ProductGoodData } from '../types/product-types'; + +/** 处理显示职位详情事件 */ +export function onJobDetailEvent(jobDetail: ProductGoodData) { + eventBus.$emit(appEvents.interaction.OpenProductJobDetail, jobDetail); +} + +/** + * @hook 商品库职位详情 + */ +export const useProductJobDetail = () => { + /** 弹层显示状态 */ + const visible = ref(false); + + /** 职位数据 */ + const jobDetail = ref(); + + function onOpenJobDetail(detail: ProductGoodData) { + jobDetail.value = detail; + visible.value = true; + } + + useEventBusListener(appEvents.interaction.OpenProductJobDetail, onOpenJobDetail); + + return { + visible, + jobDetail, + }; +}; diff --git a/src/components/page-watch-common/interactive-receive/product/hooks/use-product-list.ts b/src/components/page-watch-common/interactive-receive/product/hooks/use-product-list.ts new file mode 100644 index 0000000..1eb34ad --- /dev/null +++ b/src/components/page-watch-common/interactive-receive/product/hooks/use-product-list.ts @@ -0,0 +1,57 @@ +import { nextTick, onMounted, ref, unref } from 'vue'; +import { IarProductListInstance } from '../types/product-types'; +import { useProductTrack } from './use-product'; + +/** + * @hook 商品列表 + * */ +export const useProductList = () => { + const { trackOpenProductList } = useProductTrack(); + + /** 互动功能商品列表组件实例 */ + const iarProductListRef = ref(); + /** 是否渲染商品列表,仅在打开 tab 或弹层时请求数据 */ + const renderProductList = ref(false); + /** 商品总数 */ + const goodTotal = ref(0); + + /** 初始化商品列表,并上报打开数据 */ + const initProductList = async () => { + trackOpenProductList(); + + if (!renderProductList.value) { + renderProductList.value = true; + return; + } + + await nextTick(); + + const listInstance = unref(iarProductListRef); + if (!listInstance) { + console.warn('initProductList error, iarProductListRef is undefined'); + return; + } + + // 调用组件的初始化方法,重置到首页 + if (listInstance.init) { + listInstance.init(); + } + }; + + /** 处理商品总数更改事件 */ + const onGoodTotalChange = (total = 0) => { + goodTotal.value = total; + }; + + onMounted(() => { + initProductList(); + }); + + return { + iarProductListRef, + renderProductList, + goodTotal, + onGoodTotalChange, + initProductList, + }; +}; diff --git a/src/components/page-watch-common/interactive-receive/product/hooks/use-product.ts b/src/components/page-watch-common/interactive-receive/product/hooks/use-product.ts new file mode 100644 index 0000000..c9b44e2 --- /dev/null +++ b/src/components/page-watch-common/interactive-receive/product/hooks/use-product.ts @@ -0,0 +1,175 @@ +import { computed, unref } from 'vue'; +import { getWatchCore } from '@/core/watch-sdk'; + +import { useChannelStore } from '@/store/use-channel-store'; +import { useViewerStore } from '@/store/use-viewer-store'; + +import { translate } from '@/assets/lang'; +import { isMobile } from '@/assets/utils/browser'; +import { ynToBool } from '@utils-ts/boolean'; + +import { YN, LiveStatus, RtasTrackEventId, RtasTrackEventType } from '@polyv/live-watch-sdk'; +import { ProductGoodData } from '../types/product-types'; +import { useInviteStore } from '@/store/use-invite-store'; + +/** + * @hook 互动-商品库 + * */ +export const useProduct = () => { + const channelStore = useChannelStore(); + + const watchCore = getWatchCore(); + /** 商品库 SDK 实例 */ + const productSdk = watchCore.interactReceive.getProduct(); + + /** 招聘岗位开关 */ + const recruitmentEnabled = computed(() => + ynToBool(channelStore.channelDetail?.channelConfig.recruitmentEnabled, YN.N), + ); + + /** 招聘标签文本 */ + const jobDescLabel = computed(() => { + if (!unref(recruitmentEnabled)) { + return ''; + } + return translate('interact.product.jobDetail'); + }); + + return { + productSdk, + recruitmentEnabled, + jobDescLabel, + }; +}; + +/** 商品库跳转参数 hook */ +export const useProductLinkParams = () => { + const channelStore = useChannelStore(); + const viewerStore = useViewerStore(); + const inviteStore = useInviteStore(); + + /** 获取链接参数 */ + const getLinkParams = () => { + return { + openId: viewerStore.openId, + unionId: viewerStore.unionId, + userId: viewerStore.viewerId, + // 邀请人 openId + inviteOpenId: inviteStore.inviteUserOpenId, + // 邀请人 unionId + inviteUnionId: inviteStore.inviteUserUnionId, + // 渠道 id + promoteId: channelStore.promoteId, + // 频道号 + channelId: channelStore.channelId, + // 当前场次号 + sessionId: channelStore.currentSessionId, + }; + }; + + return { + getLinkParams, + }; +}; + +/** 商品库数据上报 hook */ +export const useProductTrack = () => { + const channelStore = useChannelStore(); + + /** 商品库数据上报超管开关 */ + const productTrackEnabled = ynToBool( + channelStore.channelDetail?.channelConfig?.productTrackEnabled, + YN.N, + ); + + /** + * 上报商品信息 + * @param good 商品信息 + * @param eventType + * @param eventId + */ + const trackProductItemData = ( + good: ProductGoodData, + eventType: RtasTrackEventType, + eventId: RtasTrackEventId, + ) => { + if (channelStore.liveStatus !== LiveStatus.Live || !productTrackEnabled) { + return; + } + const watchCore = getWatchCore(); + + const { name, productId, realPrice, price, productType } = good; + const data = { + name, // 商品名字 + productId, // 商品Id + price: `${price ?? 0}`, // 价格 + realPrice: `${realPrice}`, // 原价 + productType, // 商品分类 + linkType: isMobile ? 'mobile' : 'pc', + }; + + watchCore.rtas.trackBehaviorEvent({ + eventType, + eventId, + data, + }); + }; + + /** + * 上报商品列表中浏览商品数据 + * @param good 商品信息 + */ + const trackProductListItemView = (good: ProductGoodData) => { + trackProductItemData(good, 'show', 'product_list_item_view'); + }; + + /** + * 上报商品列表中点击商品购买数据 + * @param good 商品信息 + */ + const trackProductListItemClick = (good: ProductGoodData) => { + trackProductItemData(good, 'click', 'product_push_item_click'); + }; + + /** + * 上报商品推送中浏览商品数据 + * @param good 商品信息 + */ + const trackProductPushItemView = (good: ProductGoodData) => { + trackProductItemData(good, 'show', 'product_push_item_view'); + }; + + /** + * 上报商品推送中点击商品购买数据 + * @param good 商品信息 + */ + const trackProductPushItemClick = (good: ProductGoodData) => { + trackProductItemData(good, 'click', 'product_push_item_click'); + }; + + /** 上报打开商品列表数据 */ + const trackOpenProductList = () => { + if (channelStore.liveStatus !== LiveStatus.Live || !productTrackEnabled) { + return; + } + + const watchCore = getWatchCore(); + watchCore.rtas.trackBehaviorEvent({ + eventType: 'click', + eventId: 'product_cart_click', + data: { + shoppingBagId: 'shopping_bag_universal_id', + linkType: isMobile ? 'mobile' : 'pc', + }, + }); + }; + + return { + trackProductItemData, + trackProductListItemView, + trackProductListItemClick, + trackProductPushItemView, + trackProductPushItemClick, + trackOpenProductList, + }; +}; diff --git a/src/components/page-watch-common/interactive-receive/product/imgs/icon-job.png b/src/components/page-watch-common/interactive-receive/product/imgs/icon-job.png new file mode 100644 index 0000000000000000000000000000000000000000..8dbdfb91ca30a17e66b69ceeba827654d97fca42 GIT binary patch literal 3229 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 P00000NkvXXu0mjf`S&NP literal 0 HcmV?d00001 diff --git a/src/components/page-watch-common/interactive-receive/product/imgs/icon-shop-car.svga b/src/components/page-watch-common/interactive-receive/product/imgs/icon-shop-car.svga new file mode 100644 index 0000000000000000000000000000000000000000..3391672384f2c73d5ab295c252280c01249d4d08 GIT binary patch literal 15071 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 AR{#J2 literal 0 HcmV?d00001 diff --git a/src/components/page-watch-common/interactive-receive/product/mobile-product-bubble.vue b/src/components/page-watch-common/interactive-receive/product/mobile-product-bubble.vue new file mode 100644 index 0000000..ec5a435 --- /dev/null +++ b/src/components/page-watch-common/interactive-receive/product/mobile-product-bubble.vue @@ -0,0 +1,40 @@ + + + + + + diff --git a/src/components/page-watch-common/interactive-receive/product/mobile-product-job-detail-popup.vue b/src/components/page-watch-common/interactive-receive/product/mobile-product-job-detail-popup.vue new file mode 100644 index 0000000..d2f6081 --- /dev/null +++ b/src/components/page-watch-common/interactive-receive/product/mobile-product-job-detail-popup.vue @@ -0,0 +1,31 @@ + + + + diff --git a/src/components/page-watch-common/interactive-receive/product/mobile-product-list.vue b/src/components/page-watch-common/interactive-receive/product/mobile-product-list.vue new file mode 100644 index 0000000..d689518 --- /dev/null +++ b/src/components/page-watch-common/interactive-receive/product/mobile-product-list.vue @@ -0,0 +1,114 @@ + + + + + + diff --git a/src/components/page-watch-common/interactive-receive/product/pc-product-bubble.vue b/src/components/page-watch-common/interactive-receive/product/pc-product-bubble.vue new file mode 100644 index 0000000..36ff4c0 --- /dev/null +++ b/src/components/page-watch-common/interactive-receive/product/pc-product-bubble.vue @@ -0,0 +1,39 @@ + + + + + + diff --git a/src/components/page-watch-common/interactive-receive/product/pc-product-job-detail-dialog.vue b/src/components/page-watch-common/interactive-receive/product/pc-product-job-detail-dialog.vue new file mode 100644 index 0000000..65894f7 --- /dev/null +++ b/src/components/page-watch-common/interactive-receive/product/pc-product-job-detail-dialog.vue @@ -0,0 +1,30 @@ + + + + diff --git a/src/components/page-watch-common/interactive-receive/product/pc-product-list.vue b/src/components/page-watch-common/interactive-receive/product/pc-product-list.vue new file mode 100644 index 0000000..69918ed --- /dev/null +++ b/src/components/page-watch-common/interactive-receive/product/pc-product-list.vue @@ -0,0 +1,106 @@ + + + + + + diff --git a/src/components/page-watch-common/interactive-receive/product/portrait-product-bubble.vue b/src/components/page-watch-common/interactive-receive/product/portrait-product-bubble.vue new file mode 100644 index 0000000..f634d9b --- /dev/null +++ b/src/components/page-watch-common/interactive-receive/product/portrait-product-bubble.vue @@ -0,0 +1,50 @@ + + + + + diff --git a/src/components/page-watch-common/interactive-receive/product/portrait-product-job-detail-popup.vue b/src/components/page-watch-common/interactive-receive/product/portrait-product-job-detail-popup.vue new file mode 100644 index 0000000..02b09b7 --- /dev/null +++ b/src/components/page-watch-common/interactive-receive/product/portrait-product-job-detail-popup.vue @@ -0,0 +1,32 @@ + + + + diff --git a/src/components/page-watch-common/interactive-receive/product/portrait-product-list-entrance.vue b/src/components/page-watch-common/interactive-receive/product/portrait-product-list-entrance.vue new file mode 100644 index 0000000..b09f8a6 --- /dev/null +++ b/src/components/page-watch-common/interactive-receive/product/portrait-product-list-entrance.vue @@ -0,0 +1,66 @@ + + + + + + diff --git a/src/components/page-watch-common/interactive-receive/product/portrait-product-list-popup.vue b/src/components/page-watch-common/interactive-receive/product/portrait-product-list-popup.vue new file mode 100644 index 0000000..b35d8d3 --- /dev/null +++ b/src/components/page-watch-common/interactive-receive/product/portrait-product-list-popup.vue @@ -0,0 +1,191 @@ + + + + + + diff --git a/src/components/page-watch-common/interactive-receive/product/types/product-types.ts b/src/components/page-watch-common/interactive-receive/product/types/product-types.ts new file mode 100644 index 0000000..1e36c89 --- /dev/null +++ b/src/components/page-watch-common/interactive-receive/product/types/product-types.ts @@ -0,0 +1,25 @@ +/** + * 商品数据 + */ +export interface ProductGoodData { + /** 商品名称 */ + name: string; + /** 商品 id */ + productId: string; + /** 商品原价 */ + realPrice: number; + /** 商品价格 */ + price: number; + /** 商品类型 */ + productType: string; + /** 商品提示 */ + productDesc: string; +} + +/** + * 互动接收端商品列表实例类型 + */ +export interface IarProductListInstance { + /** 重置列表 */ + init?: () => unknown; +} diff --git a/src/components/page-watch-common/interactive-receive/push-card/hooks/use-push-card.ts b/src/components/page-watch-common/interactive-receive/push-card/hooks/use-push-card.ts new file mode 100644 index 0000000..b97b530 --- /dev/null +++ b/src/components/page-watch-common/interactive-receive/push-card/hooks/use-push-card.ts @@ -0,0 +1,21 @@ +import { getWatchCore } from '@/core/watch-sdk'; +import { useInteractReceiveStore } from '@/store/use-interact-receive-store'; + +/** 卡片推送 hook */ +export const usePushCard = () => { + const interactReceiveStore = useInteractReceiveStore(); + + const watchCore = getWatchCore(); + /** 卡片推送 SDK 实例 */ + const pushCardSdk = watchCore.interactReceive.getPushCard(); + + /** 处理卡片推送入口显示状态改变 */ + const onEntryVisibleChanged = (visible = true) => { + interactReceiveStore.pushCardPendantVisible = visible; + }; + + return { + pushCardSdk, + onEntryVisibleChanged, + }; +}; diff --git a/src/components/page-watch-common/interactive-receive/push-card/mobile-push-card.vue b/src/components/page-watch-common/interactive-receive/push-card/mobile-push-card.vue new file mode 100644 index 0000000..ea5c6d1 --- /dev/null +++ b/src/components/page-watch-common/interactive-receive/push-card/mobile-push-card.vue @@ -0,0 +1,23 @@ + + + + diff --git a/src/components/page-watch-common/interactive-receive/push-card/pc-push-card.vue b/src/components/page-watch-common/interactive-receive/push-card/pc-push-card.vue new file mode 100644 index 0000000..f35c032 --- /dev/null +++ b/src/components/page-watch-common/interactive-receive/push-card/pc-push-card.vue @@ -0,0 +1,23 @@ + + + + diff --git a/src/components/page-watch-common/interactive-receive/question-answer/hooks/use-question-answer.ts b/src/components/page-watch-common/interactive-receive/question-answer/hooks/use-question-answer.ts new file mode 100644 index 0000000..678b052 --- /dev/null +++ b/src/components/page-watch-common/interactive-receive/question-answer/hooks/use-question-answer.ts @@ -0,0 +1,55 @@ +import { onBeforeUnmount, onMounted } from 'vue'; +import { appEvents, eventBus } from '@/app/app-events'; +import { getWatchCore } from '@/core/watch-sdk'; + +import { useInteractReceiveStore } from '@/store/use-interact-receive-store'; +import { TAB_NAME_QA } from '@/assets/constants/tab-name'; +import { previewImage } from '@/hooks/components/use-image-preview'; + +/** + * @hook 互动-问答 + */ +export const useQuestionAnswer = () => { + const interactReceiveStore = useInteractReceiveStore(); + + const watchCore = getWatchCore(); + const questionAnswerSdk = watchCore.interactReceive.getQuestionAnswer(); + + /** + * 处理设置昵称 + */ + function onSetNick() { + eventBus.$emit(appEvents.chat.OpenSetNick, true); + } + + /** + * 处理图片浏览 + * @param data + */ + function onPreviewImage(data: { url: string }) { + previewImage([data.url]); + } + + function onTabSwitch(name: string) { + // 切换到问答 tab,取消红点 + if (name === TAB_NAME_QA) { + interactReceiveStore.qaReminderVisible = false; + } + } + + onMounted(() => { + eventBus.$on(appEvents.global.PcAsideMenuSwitch, onTabSwitch); + eventBus.$on(appEvents.global.MobileBottomMenuSwitch, onTabSwitch); + }); + + onBeforeUnmount(() => { + eventBus.$off(appEvents.global.PcAsideMenuSwitch, onTabSwitch); + eventBus.$off(appEvents.global.MobileBottomMenuSwitch, onTabSwitch); + }); + + return { + questionAnswerSdk, + onSetNick, + onPreviewImage, + }; +}; diff --git a/src/components/page-watch-common/interactive-receive/question-answer/imgs/icon-btn-edit.png b/src/components/page-watch-common/interactive-receive/question-answer/imgs/icon-btn-edit.png new file mode 100644 index 0000000000000000000000000000000000000000..d9fbccc5ce7e9b7dbcae7a77db0757e394c06a7c GIT binary patch literal 2648 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 literal 0 HcmV?d00001 diff --git a/src/components/page-watch-common/interactive-receive/question-answer/imgs/icon-close-black.png b/src/components/page-watch-common/interactive-receive/question-answer/imgs/icon-close-black.png new file mode 100644 index 0000000000000000000000000000000000000000..f0d1997401d5f25933de2798bb23a3dc0e6ee2da GIT binary patch literal 611 zcmV-p0-XJcP)Px%9Z5t%R7gwBR?BYFKomV^N~ys4hvXmZ*>ppIu8>$pLTY*Z6kJ;IfKOSLy(w^Z0SK-2b7Ras0M{f})LI`KV~&(k z->kKffcAR5^E6F=c4X?94Tr;9%jNQ^wRT8yX^go;@+0NLVzD?T`HJJ|E2ATN+t^#&px>ca-fZH;a`!2xwe11am!J0sVr3e9rm|kXCc2){a06l8l zs9CiHKEOt%gTdf@JRS?!vx@W^Mb-oulKF=ss-rTEZQH00u*&p>xCVf)01k>&{Qz)R zDRniOOkTG!iq?SgSdt_s00dNke4AP^zS)2Sx z65Nc;dunR=H%fnYyLgA4E#Pgnkw?eg;M6UJKkl#D{pTCYsri3-eiiB6`WMOY+i2Zd z1_q{!o-U3d5r^MS4^6&pAkeV8GW`% z(eETr_gT{CHHzaIiW}NL|Eh^Q_gS;yhQ}7S58-ZWU7Y_&C`e9Ko3_VfMF^Xay`=ZW zC8-X3?l5Ou%U)-9>G!&*y_^@ckLxmSa$X8q`Sh$|5zpZ{ALl-8QxHGP;QWH?S)Fo8Vg`@Kq2SJ^l}pt%q!>RH zZ9nquZczBS%Zy1}EZX<<9lVw>Zj!wFjwh94rVguugH<~31n+FSP*xi;hWqs|{(b5Z zvVL^)X)VWZW|2ql8B$*?IOv-q)bPCO_h-)xx4a3L8aK&Jcysbb{cVjlbI;$tCby5p z>3*MN<-oIV;X%77PJ2%WZvXe%|Aj6ys;pRakU5UCJnFY~>Nm!hp%Xj~7@HLSiF-Wt zuD0%jRo%^rwAfB(;j2#mdOiOEKJpM9*fjo{(;vYI;cSe8f4m$x)! z@Usm$t<>nt{NdI49$n^w3sNut2c}rO6*|*zyg-%(l zTC$tF_(1EVON-h(zaBXA&%t-qecsEzHs<8$%S$i&S{S3NW0>r4X2}L0@8}m-PW&@T z3A&|rR8%`#a93^0*)2P=PF2^>P1}FZT>rgG^TYdBXTSe7lb7w{Bb|Sbwm$pQ@5-&q zcQb``nsxh$UmG^dY`B*4^0rN0VrFu3X5;32&(7Yrbf13t*@oM)X3wvm{%X(skHN;|+SbCSZGph7#Ng@b K=d#Wzp$PyLxh0DL literal 0 HcmV?d00001 diff --git a/src/components/page-watch-common/interactive-receive/question-answer/mobile-question-answer.vue b/src/components/page-watch-common/interactive-receive/question-answer/mobile-question-answer.vue new file mode 100644 index 0000000..0691952 --- /dev/null +++ b/src/components/page-watch-common/interactive-receive/question-answer/mobile-question-answer.vue @@ -0,0 +1,57 @@ + + + + + + diff --git a/src/components/page-watch-common/interactive-receive/question-answer/pc-question-answer.vue b/src/components/page-watch-common/interactive-receive/question-answer/pc-question-answer.vue new file mode 100644 index 0000000..53a3c54 --- /dev/null +++ b/src/components/page-watch-common/interactive-receive/question-answer/pc-question-answer.vue @@ -0,0 +1,70 @@ + + + + + + diff --git a/src/components/page-watch-common/interactive-receive/question-answer/portrait-question-answer.vue b/src/components/page-watch-common/interactive-receive/question-answer/portrait-question-answer.vue new file mode 100644 index 0000000..b06f2d2 --- /dev/null +++ b/src/components/page-watch-common/interactive-receive/question-answer/portrait-question-answer.vue @@ -0,0 +1,108 @@ + + + + + + diff --git a/src/components/page-watch-common/interactive-receive/questionnaire/hooks/imgs/icon-questionnaire.png b/src/components/page-watch-common/interactive-receive/questionnaire/hooks/imgs/icon-questionnaire.png new file mode 100644 index 0000000000000000000000000000000000000000..816d3255fb42780b38f03a92a89f788e498f3308 GIT binary patch literal 374 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA3?vioaBc-segQrqu0Y!OM4;Kp5R=m(CMN=o zPX<|@4F)kz1e%|ZF*zAzdMX6SHa;F?d?E;U}TPZ!4!kK=EzoaAdV z5OKJ8ZQnK?tp_##|GSGGKIL>-JUQjy%}KNQ`mf~Fopayq(&TArdCMO{EojPaH^n~le7R$NcJur3TFHt?XWilIA_=f`N9&3i{i;PPg za{3RX8l-CboGX2}^_%G8WQ}>w)l7VThC2jSN?lzdpX*`A+3_l#OUY4q&tLTwv+pji z)m!m>X@5$K1z&HZA+ODkr=oj2Ez_T!|M2KcTI;;H8LEX{evYqzK4I{5^>bP0l+XkK D-7MT^7PaY-)6T^*M?>-YPe=l49H@8^9#@B2QV=lTBk$-ucf$N<%V002P75sM)R zkuH3^gr9B~0m;Sx#}x($LhJv<5psfY*T2fo z@n;$RmvsLd7LGp^oN(LE!2j|%<1Y7~oP+=I<45o6aL|W1_x{k$-L0MPJJ|ODgX{d- zxt8od9*%DcdR7Llx_@OYb~envPW}CE{21MwOIq4q<}CA~KHc;lj9|>v-~F@PZ#Y_> zJQ^qbxmg6k)g2%vDY0K(T1HU?dg!?R0T@#2s2aiyVhOh}Fhy^66>bmHyeIQkrt7a? z3F>(DBL4I|ue>Rn=XD>Sk55lHhgP}) zsZ{E@$sd6qyQ`rg+Rn*h<41gZ1uG9*qk>48O>W;8CI^SkJI$Uyn!dK%I(2Q^>+X-e zR_BeeI}CA|0Lqp#qI$Z3ihp27BnI-v9~jIoY{rGZL3~x*P^xtLgz{4g#BX%+n?@yy zSg*hEZAfrp!w6W}wRHOPkmkzpK*S@GnL>#Z#DO?pDlJYns@5g%Vnt~~i%(;rPbOlD zjs3KfN(*(R%JZMR%f8;Xs2yWwRz!0hrCerzuP8R{J!en5OKI}3jf7D{mjr|J3kCKy4yM3 zr>6l5>?vhxh%im86*F}%)k48_S$aCa&fDfm)QCK3TlQYw0p0-3G|DB7mh*WL1R2)r zA(=iA$)@z4(5kA>$l!ACO36Q>y|l%8bod}OwEfu>BX_LV5J(3IqE`nQ8)Lm2PkR!@ z{5Ki}>-t#lx?SF^oN1`Uv0$ZOwe}K}7}ieAiAom*IkP%2mC{3TpdQtW^t`?-kn#JI zXr^*mnWqbzD<-wNm<2V-j+6(BtT{%6gPw$VE4FUw;f@eI&fnpdqV2;#$H)(iqcdIs zwO$6JZtO*9m(pGyoRnbKU}`%-{L34((R&Rs0*B!d&`7YlM0LsotMlCpvT+_S^0_`x zeo6EZ(YdxLvrGt|5}ec|&HXZ4j_OzX7W{Ysf`AEBSz-2Q6=+SA!IVhyesOAjJvg}s z;lYr1-(KCh&iG3^(Y^}PYaCTJ^~U4%T>$wKY{ZoFTbZ-Z3hpZUcSw%OYVXoVD7-sL zjznr$$3dj_h4G?qDOrf13{K2!{%H@Xa{nWKHjD0Qw(tD!K4}9Fwfe)Yr!=lwG>?g% zx1@^3(8bA1M!ZFI3nyY_ln7_&Izs!yi}{I<+!^hEFN;_h_(GLoU=3T{r{#%%&CHgd z`dPIH^e{P6*UJ*?XWrdH;b=6jM8vn)L|GqnC~&DcK@J!D;w?#T$E$bqh8)g7$G)_D zfq6BoMWUa^`+5?bl-Al1v=rOi0ArNSpxm%KS=Ek^xeY(zZbYU)ITgq444=Bwq0Xo1njx7p5xuZf#WdGl8O zX*WdfXrl$JMWyc@V{(Ay1H7>+AN#}xS4MjnV)ziNMDc0ZQ~oBWl6$SHHpMDN`GJY#~9{M8s5 zbx)?fuO#+{<(_&oK<(LyYrGP&7qsO&_RaRbF#yq0GT@2QKCJi`-EX3n;-L9Fz}4Eo z@^jSksr9|66;W28O7NTce3Z)QU`X#lWVG|aep00;bmvBJ0{Eo-tJrHQZ^drLKRonVWE5UOrqY7xC)FkDHcE8=Zi<+g7+r&!%(N&9-mQt@_asulK`A zpNh(4kbK=4ar)FJ_0%fO{Tnm+lb5|H4B1S2OLNrt9vXenk#V+Zf2KrmN@8f#sl}d4 z`U!fH8-E$8Gp6F+H#f0thb6DPZe_D_#bd-E^JB2-SDbXqnk=#QZJ?I^%QW9?T`pqO z(jKAq{G#T{$j+$2#CWnt)qqkS)&3)5%qt?+^NKZ@{Gl$Vb$MEWw^m6nbX{j7!gVIq zVHUOPL1b-m0mY(%LiK)>%l|lscA7_WJrr~JsDMUrC(9_w1Nnr3{R~t;Wzg~Hx!1{A zdgiQ*TF9z`9qppt2y?d$Lg-(Eo-fT+&fy2>J2g2@N!Q5e($kyVGPdb0+x4Q9e5sR# zH>9K&a1Q#jKG4-gn!Vc6+tV#WM`uMs5H6@4!P&>VZBV|BrKBXKSTqCjT)UZi+8Jpd ze^|RvujVm&Li_k_?*$$Deb-<4rL(>)~fUr)5-b zppx!~v<#`S_$lJU#+&=*4a4pO*1DL@&H)#iH6ocV5NOzaY}1u2Aksd@WJ`qN^&un? zxCQvTC@46+ikjk6Y*Sk}63%c=cQB^(~RNlp_mEF_sj?M z-n^&`dQcg<^bG(#Ibdf{vBmmr{Wk_f^-RWw)27zlRqwjFWSwty5@1age4|xy=<8R! z1sBO%mgu&+pgMdfYAKA#DlSyI6wfX)fS_ez$XjYLjf7KIt{_0Xh5U*M^g3-dJu1aU zK~Ugwxu!1$+<~egyj+Qs?bJ-iG_3YkSXU3%tOrQdO;MQVN>mmAS#uz3LPwuOoomX+)G38j2l-s-kY})5EpXYqe~fsN zMd68RaatKIpTiCPaV})vm}g(Ea23$LTDDJ?V|9rw;4?DAkE_zkbV%-3bYd)ySPm7Ow_c2Ov>3&&8{MQ;Zt^DFEIyA?AoWEg6|F@dtmjn@-~ zzhrGM@cn%Yi6GlxY$V+EOz8}G*~uZH$XhW3D$v7M0FC7E=F~Sf3DzOFNO%tXR&){S zcpe;L*X^g(PG!g|&BB5=z8>|rHl*&GnidA++A;(fQC&i=kslm0(=U?dhqTk}+tPtZ zjn!h|6I5wijpJE?c=bkkRhyK@p`9g>ol(^i_C|(;0|MD;xEz(;jbRunwKr6!d%;2avhOlB$K?bE9bkcf;;`l#$!iK}ijo4YIIo+JeUHkf zK9e7HQ!)gmXdpB506B(z-Ru%W6|knj@XpbEu>`5xP9;^Kqq_wiRqCJRv?(?U$MSt@ z4ZrIkwd2zAlM}2TADQlZwjJyC_qGDhdPl)6b4Qamxbt+f;>a;0)G0#IS&s0^0yx^a KV(M*tlm7w0Z2#H- literal 0 HcmV?d00001 diff --git a/src/components/page-watch-common/interactive-receive/questionnaire/hooks/use-questionnaire-entrance.ts b/src/components/page-watch-common/interactive-receive/questionnaire/hooks/use-questionnaire-entrance.ts new file mode 100644 index 0000000..e53292c --- /dev/null +++ b/src/components/page-watch-common/interactive-receive/questionnaire/hooks/use-questionnaire-entrance.ts @@ -0,0 +1,37 @@ +import { appEvents, eventBus } from '@/app/app-events'; +import { + InteractiveEntranceData, + useInteractReceiveStore, +} from '@/store/use-interact-receive-store'; + +/** + * @hook 问卷入口 + */ +export const useQuestionnaireEntrance = () => { + const interactReceiveStore = useInteractReceiveStore(); + + /** 问卷入口数据 */ + const questionnaireEntranceData: InteractiveEntranceData = { + type: 'questionnaire', + name: 'interact.questionnaire.title', + icon: require('./imgs/icon-questionnaire.png'), + icon2: require('./imgs/icon-questionnaire_p.png'), + onClick: () => eventBus.$emit(appEvents.interaction.OpenQuestionnaire, true), + }; + + /** 设置问卷二次入口 */ + const setQuestionnaireEntrance = () => { + interactReceiveStore.setInteractiveEntrance(questionnaireEntranceData); + }; + + /** 移除问卷二次入口 */ + const removeQuestionnaireEntrance = () => { + interactReceiveStore.removeInteractiveEntrance(questionnaireEntranceData.type); + }; + + return { + questionnaireEntranceData, + setQuestionnaireEntrance, + removeQuestionnaireEntrance, + }; +}; diff --git a/src/components/page-watch-common/interactive-receive/questionnaire/hooks/use-questionnaire.ts b/src/components/page-watch-common/interactive-receive/questionnaire/hooks/use-questionnaire.ts new file mode 100644 index 0000000..75c7378 --- /dev/null +++ b/src/components/page-watch-common/interactive-receive/questionnaire/hooks/use-questionnaire.ts @@ -0,0 +1,109 @@ +import { computed, ref } from 'vue'; +import { appEvents, useEventBusListener } from '@/app/app-events'; +import { getWatchCore } from '@/core/watch-sdk'; + +import { translate } from '@/assets/lang'; +import { useQuestionnaireEntrance } from './use-questionnaire-entrance'; +import { AllQuestionnaireStatus, IarQuestionnaireInstance } from '../types/questionnaire-type'; + +/** + * @hook 互动-问卷 + */ +export const useQuestionnaire = () => { + const { setQuestionnaireEntrance, removeQuestionnaireEntrance } = useQuestionnaireEntrance(); + const watchCore = getWatchCore(); + + /** 问卷组件节点 */ + const questionnaireRef = ref(); + /** 问卷 SDK 实例 */ + const questionnaireSdk = watchCore.interactReceive.getQuestionnaire(); + /** 问卷是否显示 */ + const questionnaireVisible = ref(false); + /** 问卷状态 */ + const questionnaireStatus = ref(AllQuestionnaireStatus.isShowQuestion); + + /** 问卷标题 */ + const questionnaireTitle = computed(() => { + let title = ''; + switch (questionnaireStatus.value) { + case AllQuestionnaireStatus.isShowQuestion: + title = translate('interact.questionnaire.title'); + break; + case AllQuestionnaireStatus.isShowResult: + case AllQuestionnaireStatus.isShowAnswer: + title = translate('interact.questionnaire.result'); + break; + case AllQuestionnaireStatus.isShowResultRank: + title = ' '; + break; + case AllQuestionnaireStatus.isShowQuestionnaireList: + title = translate('interact.questionnaire.result.list'); + } + return title; + }); + + /** + * 处理问卷状态修改 + * */ + function onStatusChanged(status: AllQuestionnaireStatus) { + questionnaireStatus.value = status; + } + + /** 问卷状态副作用处理 */ + function questionnaireStatusEffectHandler() { + if (!questionnaireRef.value) { + console.warn('questionnaireRef value is undefined'); + return; + } + + // 需要直接获取组件内部的问卷状态 + const status = questionnaireRef.value.status; + + if (status === null) { + // 空状态下需要手动展示问卷列表 + questionnaireRef.value.showList(); + return; + } + + if ( + status === AllQuestionnaireStatus.isShowQuestion || + status === AllQuestionnaireStatus.isShowQuestionnaireList + ) { + // 设置互动二次入口 + setQuestionnaireEntrance(); + } + } + + /** 设置问卷弹窗显示状态 */ + function setQuestionnaireVisible(visible = true) { + if (visible) { + questionnaireStatusEffectHandler(); + } + + questionnaireVisible.value = visible; + } + + /** + * 处理问卷列表中有无"问卷"的情况 + */ + function onHasQuestionnaire(hasQuestionnaire: boolean) { + if (hasQuestionnaire) { + setQuestionnaireEntrance(); + } else { + removeQuestionnaireEntrance(); + } + } + + useEventBusListener(appEvents.interaction.OpenQuestionnaire, setQuestionnaireVisible); + + return { + questionnaireRef, + questionnaireSdk, + questionnaireVisible, + questionnaireTitle, + questionnaireStatus, + setQuestionnaireVisible, + onStatusChanged, + onHasQuestionnaire, + }; +}; diff --git a/src/components/page-watch-common/interactive-receive/questionnaire/mobile-questionnaire-popup.vue b/src/components/page-watch-common/interactive-receive/questionnaire/mobile-questionnaire-popup.vue new file mode 100644 index 0000000..b7abc31 --- /dev/null +++ b/src/components/page-watch-common/interactive-receive/questionnaire/mobile-questionnaire-popup.vue @@ -0,0 +1,58 @@ + + + + diff --git a/src/components/page-watch-common/interactive-receive/questionnaire/pc-questionnaire-dialog.vue b/src/components/page-watch-common/interactive-receive/questionnaire/pc-questionnaire-dialog.vue new file mode 100644 index 0000000..bad8a58 --- /dev/null +++ b/src/components/page-watch-common/interactive-receive/questionnaire/pc-questionnaire-dialog.vue @@ -0,0 +1,38 @@ + + + + diff --git a/src/components/page-watch-common/interactive-receive/questionnaire/types/questionnaire-type.ts b/src/components/page-watch-common/interactive-receive/questionnaire/types/questionnaire-type.ts new file mode 100644 index 0000000..3a5dd38 --- /dev/null +++ b/src/components/page-watch-common/interactive-receive/questionnaire/types/questionnaire-type.ts @@ -0,0 +1,23 @@ +/** 所有问卷状态 */ +export enum AllQuestionnaireStatus { + /** 正在显示答题中的问卷 */ + isShowQuestion = 'isShowQuestion', + /** 正在显示问卷结果 */ + isShowResult = 'isShowResult', + /** 正在显示问卷答案 */ + isShowAnswer = 'isShowAnswer', + /** 正在显示问卷排行榜 */ + isShowResultRank = 'isShowResultRank', + /** 正在展示问卷列表 */ + isShowQuestionnaireList = 'isShowQuestionnaireList', +} + +/** + * 互动接收端-问卷 vue 实例类型 + */ +export interface IarQuestionnaireInstance { + /** 组件内的问卷状态 */ + status: AllQuestionnaireStatus | null; + /** 显示问卷列表 */ + showList: () => void; +} diff --git a/src/components/page-watch-common/interactive-receive/redpack-rain/hooks/use-redpack-rain.ts b/src/components/page-watch-common/interactive-receive/redpack-rain/hooks/use-redpack-rain.ts new file mode 100644 index 0000000..9aff1f7 --- /dev/null +++ b/src/components/page-watch-common/interactive-receive/redpack-rain/hooks/use-redpack-rain.ts @@ -0,0 +1,92 @@ +import { computed, onBeforeMount, onBeforeUnmount, ref } from 'vue'; +import { appEvents, eventBus } from '@/app/app-events'; +import { getWatchCore } from '@/core/watch-sdk'; + +import { useChannelStore } from '@/store/use-channel-store'; +import { useInteractReceiveStore } from '@/store/use-interact-receive-store'; + +import { useRedpackStatus } from '../../redpack/hooks/use-redpack'; +import { RedpackStatusData } from '../types/redpack-rain-types'; + +/** + * @hook 互动-红包雨 + * */ +export const useRedpackRain = () => { + const interactReceiveStore = useInteractReceiveStore(); + const channelStore = useChannelStore(); + + const watchCore = getWatchCore(); + /** 红包雨 SDK 实例 */ + const redpackRainSdk = watchCore.interactReceive.getRedpackRain(); + + /** 自定义红包雨皮肤 */ + const customImgConfig = computed(() => { + const redpackRainSkin = channelStore.channelDetail?.interactionSetting.redpackRainSkin; + return { + rainThemeBottomBgImg: redpackRainSkin?.backgroundImage, + rainThemeBollImgArray: redpackRainSkin?.images, + }; + }); + + /** 红包雨组件实例 */ + const redpackRainRef = ref(); + + /** + * 打开红包雨 + * @param data 红包雨数据 + * @param source 打开来源,默认:msg + */ + const openRedpackRain = (data: UniversalParams, source = 'msg') => { + if (!redpackRainRef.value) { + console.warn('openRedpackRain fail, redpackRainRef is undefined'); + return; + } + + redpackRainRef.value.showRedpackRain({ + ...data, + source, + }); + }; + + onBeforeMount(() => { + eventBus.$on(appEvents.interaction.OpenRedpackRain, openRedpackRain); + }); + + onBeforeUnmount(() => { + eventBus.$off(appEvents.interaction.OpenRedpackRain, openRedpackRain); + }); + + const { setRedpackStatus } = useRedpackStatus(); + + /** 处理红包雨状态改变 */ + const onStateChange = (data: RedpackStatusData) => { + const { redpackId, state } = data; + setRedpackStatus(redpackId, state); + }; + + /** 处理红包雨显示状态改变 */ + const onVisibleChange = (visible = false) => { + interactReceiveStore.isGoOnRedpackRain = !!visible; + }; + + /** 处理点击提现按钮 */ + const onClickWithdraw = () => { + eventBus.$emit(appEvents.withdraw.OpenWithdrawApply, true); + }; + + /** 处理点击积分记录 */ + const onClickScoreRecord = () => { + eventBus.$emit(appEvents.interaction.OpenScoreRecord, true); + }; + + return { + redpackRainSdk, + customImgConfig, + redpackRainRef, + openRedpackRain, + onStateChange, + onVisibleChange, + onClickWithdraw, + onClickScoreRecord, + }; +}; diff --git a/src/components/page-watch-common/interactive-receive/redpack-rain/mobile-redpack-rain.vue b/src/components/page-watch-common/interactive-receive/redpack-rain/mobile-redpack-rain.vue new file mode 100644 index 0000000..e2092a3 --- /dev/null +++ b/src/components/page-watch-common/interactive-receive/redpack-rain/mobile-redpack-rain.vue @@ -0,0 +1,46 @@ + + + + diff --git a/src/components/page-watch-common/interactive-receive/redpack-rain/pc-redpack-rain.vue b/src/components/page-watch-common/interactive-receive/redpack-rain/pc-redpack-rain.vue new file mode 100644 index 0000000..09be3dd --- /dev/null +++ b/src/components/page-watch-common/interactive-receive/redpack-rain/pc-redpack-rain.vue @@ -0,0 +1,23 @@ + + + + diff --git a/src/components/page-watch-common/interactive-receive/redpack-rain/types/redpack-rain-types.ts b/src/components/page-watch-common/interactive-receive/redpack-rain/types/redpack-rain-types.ts new file mode 100644 index 0000000..a293f0c --- /dev/null +++ b/src/components/page-watch-common/interactive-receive/redpack-rain/types/redpack-rain-types.ts @@ -0,0 +1,4 @@ +export interface RedpackStatusData { + redpackId: string; + state: string; +} diff --git a/src/components/page-watch-common/interactive-receive/redpack/hooks/use-redpack-pendant.ts b/src/components/page-watch-common/interactive-receive/redpack/hooks/use-redpack-pendant.ts new file mode 100644 index 0000000..fd522e3 --- /dev/null +++ b/src/components/page-watch-common/interactive-receive/redpack/hooks/use-redpack-pendant.ts @@ -0,0 +1,36 @@ +import { computed } from 'vue'; +import { getWatchCore } from '@/core/watch-sdk'; + +import { useChannelStore } from '@/store/use-channel-store'; +import { useInteractReceiveStore } from '@/store/use-interact-receive-store'; + +import { ynToBool } from '@utils-ts/boolean'; +import { YN } from '@polyv/live-watch-sdk'; + +/** + * @hook 互动-红包挂件 + * */ +export const useRedpackPendant = () => { + const channelStore = useChannelStore(); + const interactReceiveStore = useInteractReceiveStore(); + + const watchCore = getWatchCore(); + /** 红包 SDK 实例 */ + const redpackSdk = watchCore.interactReceive.getRedpack(); + + /** 自动请求详情 */ + const autoFetchDetail = computed(() => { + return ynToBool(channelStore.channelDetail?.channelConfig.userRedpackEnabled, YN.N); + }); + + /** 处理红包挂件入口显示状态改变 */ + function onEntryVisibleChanged(visible = true) { + interactReceiveStore.redpackPendantVisible = visible; + } + + return { + redpackSdk, + autoFetchDetail, + onEntryVisibleChanged, + }; +}; diff --git a/src/components/page-watch-common/interactive-receive/redpack/hooks/use-redpack.ts b/src/components/page-watch-common/interactive-receive/redpack/hooks/use-redpack.ts new file mode 100644 index 0000000..e2dc872 --- /dev/null +++ b/src/components/page-watch-common/interactive-receive/redpack/hooks/use-redpack.ts @@ -0,0 +1,114 @@ +/** + * @file 红包相关 hook + */ +import { computed, onBeforeMount, onBeforeUnmount, ref } from 'vue'; +import { appEvents, eventBus } from '@/app/app-events'; +import { getWatchCore } from '@/core/watch-sdk'; + +import { useChannelStore } from '@/store/use-channel-store'; + +/** + * @hook 互动-红包状态 + * */ +export const useRedpackStatus = () => { + /** 设置某个红包的状态 */ + const setRedpackStatus = (redpackId: string, status: string) => { + eventBus.$emit(appEvents.interaction.SetRedpackStatus, { + redpackId, + status, + }); + }; + + return { + setRedpackStatus, + }; +}; + +/** + * @hook 互动-红包 + */ +export const useRedpack = () => { + const channelStore = useChannelStore(); + + const watchCore = getWatchCore(); + /** 红包 SDK 实例 */ + const redpackSdk = watchCore.interactReceive.getRedpack(); + + /** 自定义红包皮肤 */ + const customImgConfig = computed(() => { + return { + redpackCoverImg: channelStore.channelDetail?.interactionSetting.redpackSkin?.redpackImage, + }; + }); + + /** 当前显示的红包数据 */ + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const redpackData = ref>(); + + /** 打开某个红包 */ + // eslint-disable-next-line @typescript-eslint/no-explicit-any + function openRedpack(data: UniversalParams) { + if (data.type.includes('rain')) { + // 类型是红包雨,则发送事件打开红包雨 + eventBus.$emit(appEvents.interaction.OpenRedpackRain, { + redCacheId: data.redCacheId, + redpackId: data.redpackId, + avatar: data.user.pic, + nickname: data.user.nick, + greeting: data.content, + type: data.type, + }); + } else { + redpackData.value = data; + } + } + + onBeforeMount(() => { + eventBus.$on(appEvents.interaction.OpenRedpack, openRedpack); + }); + + onBeforeUnmount(() => { + eventBus.$off(appEvents.interaction.OpenRedpack, openRedpack); + }); + + const { setRedpackStatus } = useRedpackStatus(); + /** 处理红包状态改变 */ + function onStatusChange(redpackId: string, status: string) { + setRedpackStatus(redpackId, status); + } + + /** 处理关闭红包 */ + function onCloseRedpack() { + redpackData.value = undefined; + } + + /** 处理点击提现按钮 */ + function onClickWithdraw() { + redpackData.value = undefined; + eventBus.$emit(appEvents.withdraw.OpenWithdrawApply, true); + } + + /** 处理点击积分记录 */ + function onClickScoreRecord() { + redpackData.value = undefined; + eventBus.$emit(appEvents.interaction.OpenScoreRecord, true); + } + + /** 处理口令红包领取 */ + function onPasswordReceived(pwd: string) { + // 发送口令到聊天室 + pwd && eventBus.$emit(appEvents.chat.SendMessageToChat, pwd); + } + + return { + redpackSdk, + redpackData, + customImgConfig, + openRedpack, + onStatusChange, + onCloseRedpack, + onClickWithdraw, + onClickScoreRecord, + onPasswordReceived, + }; +}; diff --git a/src/components/page-watch-common/interactive-receive/redpack/mobile-redpack-popup.vue b/src/components/page-watch-common/interactive-receive/redpack/mobile-redpack-popup.vue new file mode 100644 index 0000000..97e5a78 --- /dev/null +++ b/src/components/page-watch-common/interactive-receive/redpack/mobile-redpack-popup.vue @@ -0,0 +1,56 @@ + + + + diff --git a/src/components/page-watch-common/interactive-receive/redpack/pc-redpack-dialog.vue b/src/components/page-watch-common/interactive-receive/redpack/pc-redpack-dialog.vue new file mode 100644 index 0000000..8bd5a3c --- /dev/null +++ b/src/components/page-watch-common/interactive-receive/redpack/pc-redpack-dialog.vue @@ -0,0 +1,24 @@ + + + + diff --git a/src/components/page-watch-common/interactive-receive/redpack/redpack-pendant.vue b/src/components/page-watch-common/interactive-receive/redpack/redpack-pendant.vue new file mode 100644 index 0000000..17ec98d --- /dev/null +++ b/src/components/page-watch-common/interactive-receive/redpack/redpack-pendant.vue @@ -0,0 +1,19 @@ + + + + diff --git a/src/components/page-watch-common/interactive-receive/risk-evaluation/_hooks/use-risk-evaluation-main.ts b/src/components/page-watch-common/interactive-receive/risk-evaluation/_hooks/use-risk-evaluation-main.ts new file mode 100644 index 0000000..00a040f --- /dev/null +++ b/src/components/page-watch-common/interactive-receive/risk-evaluation/_hooks/use-risk-evaluation-main.ts @@ -0,0 +1,152 @@ +import { ref, computed, watchEffect } from 'vue'; +import { appEvents, useEventBusListener } from '@/app/app-events'; +import { getWatchCore } from '@/core/watch-sdk'; + +import { useWatchAppStore } from '@/store/use-watch-app-store'; +import { useFinanceStore } from '@/store/use-finance-store'; +import { useAuthStore } from '@/store/use-auth-store'; +import { useEnrollStore } from '@/store/use-enroll-store'; +import { storeDefinitionToRefs } from '@/plugins/pinia/util'; + +import { + QuestionnaireEvaluationResult, + RiskEvaluationMainDialogOpenMode, +} from '../types/risk-evaluation-types'; + +/** 风险测评-副作用处理 */ +const useRiskEvaluationMainEffect = ({ + mainDialogShowEventHandler, +}: { + mainDialogShowEventHandler: () => void; +}) => { + const authStore = useAuthStore(); + const enrollStore = useEnrollStore(); + const financeStore = useFinanceStore(); + + // 通过副作用函数来监听主弹窗展示 + watchEffect(() => { + // 需要授权通过获取用户信息后才能展示弹窗 + if (!authStore.isAuthorized || enrollStore.needEnrollByEnter) return; + + if (financeStore.shouldShowSplashByRiskEvaluation) { + mainDialogShowEventHandler(); + } + }); +}; + +/** + * @hook 风险测评-主要弹窗 + */ +export const useRiskEvaluationMainHook = () => { + const watchCore = getWatchCore(); + const watchAppStore = useWatchAppStore(); + + const financeStore = useFinanceStore(); + const { riskEvaluation } = storeDefinitionToRefs(useFinanceStore); + + /** 问卷 SDK 实例 */ + const questionnaireSdk = watchCore.interactReceive.getQuestionnaire(); + + /** 风险测评-问卷结果 */ + const riskEvaluationResult = ref(null); + + /** 控制弹窗显示 */ + const dialogVisible = ref(false); + + /** 是否手动触发 */ + const isManualTrigger = ref(false); + + /** 是否强制开始 */ + const isForceStart = ref(false); + + /** + * 弹窗关闭按钮可见性 + * @desc 仅在“自愿填写”,“测评完成且符合等级要求”才能展示 + * */ + const dialogCloseable = computed(() => { + const isPass = watchCore.financeRiskEvaluation.judgeIsPassRiskEvaluation(riskEvaluation.value); + return isManualTrigger.value || isPass; + }); + + /** 打开弹窗钩子 */ + function handleOpenDialog({ openMode }: { openMode?: RiskEvaluationMainDialogOpenMode }) { + isManualTrigger.value = openMode === RiskEvaluationMainDialogOpenMode.ManualOpen; + isForceStart.value = openMode === RiskEvaluationMainDialogOpenMode.TimeoutAutoOpen; + dialogVisible.value = true; + } + + /** 关闭弹窗钩子 */ + function handleCloseDialog() { + dialogVisible.value = false; + isManualTrigger.value = false; + isForceStart.value = false; + } + + /** 监听问卷结果回调 */ + function onQuestionnaireEvaluationResult(result: QuestionnaireEvaluationResult) { + riskEvaluationResult.value = result; + } + + /** 监听问卷关闭回调 */ + function onQuestionnaireHide() { + if (!riskEvaluationResult.value) { + console.warn('无问卷评测结果'); + return; + } + + const { passEvaluation, score } = riskEvaluationResult.value; + const isPass = watchCore.financeRiskEvaluation.judgeIsPassRiskEvaluation({ + ...riskEvaluation.value, + passEvaluation, + score, + }); + if (!isPass && !dialogCloseable.value) return; + + handleCloseDialog(); + + const isPreLimitType = watchCore.financeRiskEvaluation.judgeIsPreLimitType( + riskEvaluation.value, + ); + if (isPreLimitType) { + watchAppStore.resetUpWatchCore(); + } else { + financeStore.syncRiskEvaluation({ + passEvaluation, + score, + }); + } + } + + /** + * 主要弹窗事件钩子函数 + * @desc 对应 RiskEvaluationMainDialogShow + */ + function mainDialogShowEventHandler({ + openMode, + }: { openMode?: RiskEvaluationMainDialogOpenMode } = {}) { + handleOpenDialog({ openMode }); + } + + // 副作用打开弹窗 + useRiskEvaluationMainEffect({ mainDialogShowEventHandler }); + + // 打开弹窗 + useEventBusListener(appEvents.finance.RiskEvaluationMainDialogShow, mainDialogShowEventHandler); + + // 关闭弹窗 + useEventBusListener(appEvents.finance.RiskEvaluationMainDialogHidden, () => { + handleCloseDialog(); + }); + + return { + questionnaireSdk, + + dialogVisible, + dialogCloseable, + isForceStart, + + handleCloseDialog, + onQuestionnaireEvaluationResult, + onQuestionnaireHide, + }; +}; diff --git a/src/components/page-watch-common/interactive-receive/risk-evaluation/common/risk-evaluation-entrance.vue b/src/components/page-watch-common/interactive-receive/risk-evaluation/common/risk-evaluation-entrance.vue new file mode 100644 index 0000000..25f57e8 --- /dev/null +++ b/src/components/page-watch-common/interactive-receive/risk-evaluation/common/risk-evaluation-entrance.vue @@ -0,0 +1,101 @@ + + + + + diff --git a/src/components/page-watch-common/interactive-receive/risk-evaluation/common/risk-evaluation-icon.svg b/src/components/page-watch-common/interactive-receive/risk-evaluation/common/risk-evaluation-icon.svg new file mode 100644 index 0000000..bdcbb28 --- /dev/null +++ b/src/components/page-watch-common/interactive-receive/risk-evaluation/common/risk-evaluation-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/components/page-watch-common/interactive-receive/risk-evaluation/common/risk-evaluation-redirect-dialog.vue b/src/components/page-watch-common/interactive-receive/risk-evaluation/common/risk-evaluation-redirect-dialog.vue new file mode 100644 index 0000000..520e97e --- /dev/null +++ b/src/components/page-watch-common/interactive-receive/risk-evaluation/common/risk-evaluation-redirect-dialog.vue @@ -0,0 +1,116 @@ + + + + + + diff --git a/src/components/page-watch-common/interactive-receive/risk-evaluation/mobile-risk-evaluation.vue b/src/components/page-watch-common/interactive-receive/risk-evaluation/mobile-risk-evaluation.vue new file mode 100644 index 0000000..d8160c3 --- /dev/null +++ b/src/components/page-watch-common/interactive-receive/risk-evaluation/mobile-risk-evaluation.vue @@ -0,0 +1,65 @@ + + + + + + diff --git a/src/components/page-watch-common/interactive-receive/risk-evaluation/pc-risk-evaluation.vue b/src/components/page-watch-common/interactive-receive/risk-evaluation/pc-risk-evaluation.vue new file mode 100644 index 0000000..d90b422 --- /dev/null +++ b/src/components/page-watch-common/interactive-receive/risk-evaluation/pc-risk-evaluation.vue @@ -0,0 +1,62 @@ + + + + + + diff --git a/src/components/page-watch-common/interactive-receive/risk-evaluation/types/risk-evaluation-types.ts b/src/components/page-watch-common/interactive-receive/risk-evaluation/types/risk-evaluation-types.ts new file mode 100644 index 0000000..9aa7bf0 --- /dev/null +++ b/src/components/page-watch-common/interactive-receive/risk-evaluation/types/risk-evaluation-types.ts @@ -0,0 +1,29 @@ +/** 风险测评-主要弹窗-打开方式 */ +export enum RiskEvaluationMainDialogOpenMode { + /** 手动打开 */ + ManualOpen = 'manual-open', + /** 超时自动打开 */ + TimeoutAutoOpen = 'timeout-auto-open', +} + +/** 风险测评-测评结果 */ +export interface QuestionnaireEvaluationResult { + /** 频道 Id */ + channelId: number; + /** 用户唯一标识 */ + viewerId: string; + /** 场次 Id */ + sessionId: string; + /** 用户昵称 */ + nickname: string; + /** 测评问卷 Id */ + questionnaireId: string; + /** 观众测评得分(-1为未测评) */ + score: number; + /** 当前得分对应的标签描述 */ + scoreLabel: string; + /** 分数限制对应的标签描述 */ + scoreLabelLimit: string; + /** 通过直播间风险测评条件(1:通过,0:不通过) */ + passEvaluation: 0 | 1; +} diff --git a/src/components/page-watch-common/interactive-receive/risk-evaluation/use-risk-evaluation-reset.ts b/src/components/page-watch-common/interactive-receive/risk-evaluation/use-risk-evaluation-reset.ts new file mode 100644 index 0000000..0ba5c41 --- /dev/null +++ b/src/components/page-watch-common/interactive-receive/risk-evaluation/use-risk-evaluation-reset.ts @@ -0,0 +1,183 @@ +import { FinanceRiskEvaluationSocketData } from '@polyv/live-watch-sdk'; +import { getWatchCore } from '@/core/watch-sdk'; + +import { useFinanceStore } from '@/store/use-finance-store'; +import { ynToBool } from '@utils-ts/boolean'; +import { appEvents, eventBus } from '@/app/app-events'; + +/** + * @hooks 风险测评-测评重置 + */ +export const useRiskEvaluationResetHook = () => { + const watchCore = getWatchCore(); + + const financeStore = useFinanceStore(); + + /** + * 风险测评-更改测评开关 + */ + function riskEvaluationResetEnableHandler(socketData: FinanceRiskEvaluationSocketData) { + const riskEvaluation = financeStore.riskEvaluation; + + if (ynToBool(socketData.evaluationEnabled)) { + // 关 -> 开 + financeStore.syncRiskEvaluation({ + evaluationEnabled: socketData.evaluationEnabled, + }); + + const isPass = watchCore.financeRiskEvaluation.judgeIsPassRiskEvaluation(riskEvaluation); + if (isPass) { + // 原本通过测评,则需要继续处理 socketData 中其他数据 + onRiskEvaluationReset({ socketData }); + return; + } + + // 没有通过测评,需要判断当前测评时机 + const isAfterLimitType = watchCore.financeRiskEvaluation.judgeIsAfterLimitType(socketData); + if (isAfterLimitType) { + financeStore.syncRiskEvaluation({ + evaluationLimitType: socketData.evaluationLimitType, + }); + return; + } + const isPreLimitType = watchCore.financeRiskEvaluation.judgeIsPreLimitType(socketData); + if (isPreLimitType) { + eventBus.$emit(appEvents.finance.RiskEvaluationRedirectDialogShow); + } + } else { + // 开 -> 关 + financeStore.syncRiskEvaluation({ + evaluationEnabled: socketData.evaluationEnabled, + }); + } + } + + /** + * 风险测评-更改测评分数标准,只同步更改 riskEvaluation 数据 + */ + function riskEvaluationResetScoreLimitHandler(socketData: FinanceRiskEvaluationSocketData) { + const riskEvaluation = financeStore.riskEvaluation; + const isScorePass = riskEvaluation.score >= socketData.scoreLimit; + financeStore.syncRiskEvaluation({ + scoreLimit: socketData.scoreLimit, + passEvaluation: isScorePass ? 1 : 0, + }); + } + + /** + * 风险测评-更改测评时机 + */ + function riskEvaluationResetLimitTypeHandler(socketData: FinanceRiskEvaluationSocketData) { + const riskEvaluation = financeStore.riskEvaluation; + + const isPass = watchCore.financeRiskEvaluation.judgeIsPassRiskEvaluation(riskEvaluation); + if (isPass) { + financeStore.syncRiskEvaluation({ + evaluationLimitType: socketData.evaluationLimitType, + }); + return; + } + + const { judgeIsPreLimitType, judgeIsAfterLimitType } = watchCore.financeRiskEvaluation; + + // 后置 -> 前置 + const isAfter2Pre = judgeIsAfterLimitType(riskEvaluation) && judgeIsPreLimitType(socketData); + if (isAfter2Pre) { + eventBus.$emit(appEvents.finance.RiskEvaluationPendantTimeoutCacheClear); + eventBus.$emit(appEvents.finance.RiskEvaluationRedirectDialogShow); + return; + } + + // 后置 -> 后置 + const isAfter2After = + judgeIsAfterLimitType(riskEvaluation) && judgeIsAfterLimitType(socketData); + if (isAfter2After) { + financeStore.syncRiskEvaluation({ + evaluationLimitType: socketData.evaluationLimitType, + }); + return; + } + + // 前置 -> 前置 + const isPre2Pre = judgeIsPreLimitType(riskEvaluation) && judgeIsPreLimitType(socketData); + if (isPre2Pre) { + eventBus.$emit(appEvents.finance.RiskEvaluationRedirectDialogShow); + return; + } + + // 前置 -> 后置 + const isPre2After = judgeIsPreLimitType(riskEvaluation) && judgeIsAfterLimitType(socketData); + if (isPre2After) { + riskEvaluationResetScoreLimitHandler(socketData); + riskEvaluationMainModalShowByNotPass(); + } + } + + /** + * 风险测评-不通过测评时展示"去测评"弹窗 + */ + function riskEvaluationRedirectModalShowByNotPass() { + const riskEvaluation = financeStore.riskEvaluation; + + const isPass = watchCore.financeRiskEvaluation.judgeIsPassRiskEvaluation(riskEvaluation); + if (!isPass) { + eventBus.$emit(appEvents.finance.RiskEvaluationRedirectDialogShow); + } + } + + /** + * 风险测评-不通过测评时展示测评弹窗 + */ + function riskEvaluationMainModalShowByNotPass() { + const riskEvaluation = financeStore.riskEvaluation; + + const isPass = watchCore.financeRiskEvaluation.judgeIsPassRiskEvaluation(riskEvaluation); + if (!isPass) { + eventBus.$emit(appEvents.finance.RiskEvaluationMainDialogShow); + } + } + + /** + * 处理"风险测评-测评重置"事件钩子 + */ + function onRiskEvaluationReset({ + socketData, + }: { + socketData: FinanceRiskEvaluationSocketData; + }): void { + const riskEvaluation = financeStore.riskEvaluation; + + // 更改测评开关 + if (socketData.evaluationEnabled !== riskEvaluation.evaluationEnabled) { + return riskEvaluationResetEnableHandler(socketData); + } + + // 测评开关开启时才会响应其他更改 + if (ynToBool(riskEvaluation.evaluationEnabled)) { + // 同时更改:更改测评分数标准 + 更改测评时机 + if ( + socketData.scoreLimit !== riskEvaluation.scoreLimit && + socketData.evaluationLimitType !== riskEvaluation.evaluationLimitType + ) { + riskEvaluationResetScoreLimitHandler(socketData); + return riskEvaluationResetLimitTypeHandler(socketData); + } + + // 只更改测评时机 + if (socketData.evaluationLimitType !== riskEvaluation.evaluationLimitType) { + return riskEvaluationResetLimitTypeHandler(socketData); + } + + // 只更改测评分数标准 + if (socketData.scoreLimit !== riskEvaluation.scoreLimit) { + riskEvaluationResetScoreLimitHandler(socketData); + // 目前只有前置时机有分数限制,不通过测评的话需要展示"去测评"弹窗 + riskEvaluationRedirectModalShowByNotPass(); + } + } + } + + return { + onRiskEvaluationReset, + }; +}; diff --git a/src/components/page-watch-common/interactive-receive/score/hooks/use-score-record.ts b/src/components/page-watch-common/interactive-receive/score/hooks/use-score-record.ts new file mode 100644 index 0000000..fb0940e --- /dev/null +++ b/src/components/page-watch-common/interactive-receive/score/hooks/use-score-record.ts @@ -0,0 +1,51 @@ +import { ref, onBeforeMount, onBeforeUnmount, computed } from 'vue'; +import { appEvents, eventBus } from '@/app/app-events'; +import { getWatchCore } from '@/core/watch-sdk'; + +import { translate } from '@/assets/lang'; + +/** + * @hook 互动-红包-积分记录弹层 + * */ +export const useScoreRecord = () => { + const watchCore = getWatchCore(); + /** 红包 SDK 实例 */ + const redpackSdk = watchCore.interactReceive.getRedpack(); + + /** 积分记录组件是否创建,用于控制刷新数据、在首次没打开时不请求接口 */ + const scoreRecordRender = ref(false); + function setScoreRecordRender(needRender = true) { + scoreRecordRender.value = needRender; + } + + /** 积分记录显示状态 */ + const scoreRecordVisible = ref(false); + /** 设置显示状态 */ + function setScoreRecordVisible(visible = true) { + scoreRecordVisible.value = visible; + + if (visible) { + setScoreRecordRender(true); + } + } + + /** 积分领取记录标题 */ + const scoreRecordTitle = computed(() => translate('interact.scoreRecord.title')); + + onBeforeMount(() => { + eventBus.$on(appEvents.interaction.OpenScoreRecord, setScoreRecordVisible); + }); + + onBeforeUnmount(() => { + eventBus.$off(appEvents.interaction.OpenScoreRecord, setScoreRecordVisible); + }); + + return { + redpackSdk, + scoreRecordRender, + setScoreRecordRender, + scoreRecordVisible, + scoreRecordTitle, + setScoreRecordVisible, + }; +}; diff --git a/src/components/page-watch-common/interactive-receive/score/mobile-score-record-popup.vue b/src/components/page-watch-common/interactive-receive/score/mobile-score-record-popup.vue new file mode 100644 index 0000000..8df529f --- /dev/null +++ b/src/components/page-watch-common/interactive-receive/score/mobile-score-record-popup.vue @@ -0,0 +1,43 @@ + + + + diff --git a/src/components/page-watch-common/interactive-receive/topic-pk/hook/use-topic-pk.ts b/src/components/page-watch-common/interactive-receive/topic-pk/hook/use-topic-pk.ts new file mode 100644 index 0000000..bccff32 --- /dev/null +++ b/src/components/page-watch-common/interactive-receive/topic-pk/hook/use-topic-pk.ts @@ -0,0 +1,11 @@ +import { getWatchCore } from '@/core/watch-sdk'; + +export const useTopicPk = () => { + const watchCore = getWatchCore(); + + const topicPkSdk = watchCore.interactReceive.getTopicPK(); + + return { + topicPkSdk, + }; +}; diff --git a/src/components/page-watch-common/interactive-receive/topic-pk/mobile-topic-pk.vue b/src/components/page-watch-common/interactive-receive/topic-pk/mobile-topic-pk.vue new file mode 100644 index 0000000..c64661f --- /dev/null +++ b/src/components/page-watch-common/interactive-receive/topic-pk/mobile-topic-pk.vue @@ -0,0 +1,16 @@ + + + + diff --git a/src/components/page-watch-common/interactive-receive/topic-pk/pc-topic-pk.vue b/src/components/page-watch-common/interactive-receive/topic-pk/pc-topic-pk.vue new file mode 100644 index 0000000..c4aaba8 --- /dev/null +++ b/src/components/page-watch-common/interactive-receive/topic-pk/pc-topic-pk.vue @@ -0,0 +1,16 @@ + + + + diff --git a/src/components/page-watch-common/interactive-receive/tuwen-live/hooks/use-tuwen-live.ts b/src/components/page-watch-common/interactive-receive/tuwen-live/hooks/use-tuwen-live.ts new file mode 100644 index 0000000..fbb45d9 --- /dev/null +++ b/src/components/page-watch-common/interactive-receive/tuwen-live/hooks/use-tuwen-live.ts @@ -0,0 +1,109 @@ +import { ref, computed, unref } from 'vue'; +import { getWatchCore } from '@/core/watch-sdk'; + +import { translate } from '@/assets/lang'; +import { previewImage } from '@/hooks/components/use-image-preview'; + +import { AllTuwenMode, IarTuwenLiveInstance } from '../types/tuwen-live-types'; + +interface PreviewTuwenImageData { + /** 图片地址列表 */ + images: string[]; + /** 显示的下标 */ + index: number; +} + +/** + * @hook 互动-图文直播 + * */ +export const useTuwenLive = () => { + const watchCore = getWatchCore(); + /** 图文直播 SDK 实例 */ + const tuwenSdk = watchCore.interactReceive.getTuwen(); + + /** 图文总条数 */ + const messageTotal = ref(0); + /** 处理图文总条数改变 */ + const onMessageTotalChange = (total = 0) => { + messageTotal.value = total; + }; + + /** 图文直播组件实例 */ + const tuwenRef = ref(); + /** 设置图文直播组件监听 window 的事件 */ + const setupScrollListen = () => { + const tuwenInstance = unref(tuwenRef); + + if (!tuwenInstance) { + console.warn('setupScrollListen fail, tuwenRef is undefined!'); + return; + } + if (tuwenInstance.initScrollLister) { + tuwenInstance.initScrollLister(); + } + }; + + /** 预览图文直播的图片 */ + const previewTuwenImage = (data: PreviewTuwenImageData) => { + const { images, index } = data; + previewImage(images, { + initialIndex: index, + }); + }; + + return { + tuwenSdk, + + messageTotal, + onMessageTotalChange, + + tuwenRef, + setupScrollListen, + + previewTuwenImage, + }; +}; + +/** 图文直播展示模式 hook */ +export const useTuwenLiveMode = () => { + /** 图文展示模式,1-图文,2-图片 */ + const tuwenMode = ref(AllTuwenMode.Tuwen); + + /** 图文展示模式选项 */ + const tuwenModeOptions = computed(() => [ + { + name: translate('interact.tuwen.tuwenMode'), + value: AllTuwenMode.Tuwen, + isCurrent: tuwenMode.value === AllTuwenMode.Tuwen, + }, + { + name: translate('interact.tuwen.picMode'), + value: AllTuwenMode.Image, + isCurrent: tuwenMode.value === AllTuwenMode.Image, + }, + ]); + + /** 当前图文展示模式文案 */ + const currentTuwenModeText = computed(() => { + const options = tuwenModeOptions.value; + let text = ''; + options.forEach(option => { + if (option.isCurrent) { + text = option.name; + } + }); + return text; + }); + + /** 修改图文展示模式 */ + const changeTuwenMode = (mode = AllTuwenMode.Tuwen) => { + tuwenMode.value = mode; + }; + + return { + tuwenMode, + tuwenModeOptions, + currentTuwenModeText, + changeTuwenMode, + }; +}; diff --git a/src/components/page-watch-common/interactive-receive/tuwen-live/mobile-tuwen-live.vue b/src/components/page-watch-common/interactive-receive/tuwen-live/mobile-tuwen-live.vue new file mode 100644 index 0000000..9d6510c --- /dev/null +++ b/src/components/page-watch-common/interactive-receive/tuwen-live/mobile-tuwen-live.vue @@ -0,0 +1,97 @@ + + + + + + diff --git a/src/components/page-watch-common/interactive-receive/tuwen-live/pc-tuwen-live.vue b/src/components/page-watch-common/interactive-receive/tuwen-live/pc-tuwen-live.vue new file mode 100644 index 0000000..929b1ac --- /dev/null +++ b/src/components/page-watch-common/interactive-receive/tuwen-live/pc-tuwen-live.vue @@ -0,0 +1,109 @@ + + + + + + diff --git a/src/components/page-watch-common/interactive-receive/tuwen-live/types/tuwen-live-types.ts b/src/components/page-watch-common/interactive-receive/tuwen-live/types/tuwen-live-types.ts new file mode 100644 index 0000000..8b15d63 --- /dev/null +++ b/src/components/page-watch-common/interactive-receive/tuwen-live/types/tuwen-live-types.ts @@ -0,0 +1,12 @@ +/** 图文展示模式枚举 */ +export enum AllTuwenMode { + /** 图文模式 */ + Tuwen = 1, + /** 图片模式 */ + Image = 2, +} + +export interface IarTuwenLiveInstance { + /** 设置页面滚动条监听 */ + initScrollLister?: () => void; +} diff --git a/src/components/page-watch-common/interactive-receive/use-iar-global-config.ts b/src/components/page-watch-common/interactive-receive/use-iar-global-config.ts new file mode 100644 index 0000000..9837f10 --- /dev/null +++ b/src/components/page-watch-common/interactive-receive/use-iar-global-config.ts @@ -0,0 +1,28 @@ +import { useLangStore } from '@/store/use-lang-store'; +import { usePlayerStore } from '@/store/use-player-store'; +import { provide, reactive, watchEffect } from 'vue'; + +/** + * 互动功能全局配置注入的 key + */ +const INTERACT_GLOBAL_PROVIDE_KEY = 'interactGlobalConfig'; + +/** + * @hook 互动功能全局配置 + */ +export const useIarGlobalConfigHook = () => { + const langStore = useLangStore(); + const playerStore = usePlayerStore(); + + const provideData = reactive({ + globalLang: langStore.currentLang, + globalDelayTime: playerStore.delayTime, + }); + + watchEffect(() => { + provideData.globalLang = langStore.currentLang; + provideData.globalDelayTime = playerStore.delayTime; + }); + + provide(INTERACT_GLOBAL_PROVIDE_KEY, provideData); +}; diff --git a/src/components/page-watch-common/interactive-receive/vote/hooks/use-vote.ts b/src/components/page-watch-common/interactive-receive/vote/hooks/use-vote.ts new file mode 100644 index 0000000..00df1db --- /dev/null +++ b/src/components/page-watch-common/interactive-receive/vote/hooks/use-vote.ts @@ -0,0 +1,19 @@ +import { getWatchCore } from '@/core/watch-sdk'; +import { useInteractReceiveStore } from '@/store/use-interact-receive-store'; +import { storeDefinitionToRefs } from '@/plugins/pinia/util'; + +/** 投票 hook */ +export const useVote = () => { + const watchCore = getWatchCore(); + + /** 投票 SDK 实例 */ + const voteSdk = watchCore.interactReceive.getVote(); + + /** 当前用户已投票的列表 */ + const { votedList } = storeDefinitionToRefs(useInteractReceiveStore); + + return { + voteSdk, + votedList, + }; +}; diff --git a/src/components/page-watch-common/interactive-receive/vote/mobile-vote-panel.vue b/src/components/page-watch-common/interactive-receive/vote/mobile-vote-panel.vue new file mode 100644 index 0000000..0b8c10d --- /dev/null +++ b/src/components/page-watch-common/interactive-receive/vote/mobile-vote-panel.vue @@ -0,0 +1,22 @@ + + + + diff --git a/src/components/page-watch-common/interactive-receive/vote/pc-vote-panel.vue b/src/components/page-watch-common/interactive-receive/vote/pc-vote-panel.vue new file mode 100644 index 0000000..c5eb09b --- /dev/null +++ b/src/components/page-watch-common/interactive-receive/vote/pc-vote-panel.vue @@ -0,0 +1,22 @@ + + + + diff --git a/src/components/page-watch-common/interactive-receive/welfare-lottery/hooks/use-welfare-lottery.ts b/src/components/page-watch-common/interactive-receive/welfare-lottery/hooks/use-welfare-lottery.ts new file mode 100644 index 0000000..353c65b --- /dev/null +++ b/src/components/page-watch-common/interactive-receive/welfare-lottery/hooks/use-welfare-lottery.ts @@ -0,0 +1,74 @@ +import { computed, onBeforeMount, onBeforeUnmount } from 'vue'; +import { appEvents, eventBus } from '@/app/app-events'; +import { getWatchCore } from '@/core/watch-sdk'; + +import { useChannelStore } from '@/store/use-channel-store'; +import { useInteractReceiveStore } from '@/store/use-interact-receive-store'; + +import { useSendMsg } from '@/components/page-watch-common/chat/chat-msg-list/hooks/send-msg-hook'; +import { YN } from '@polyv/live-watch-sdk'; +import { ynToBool } from '@utils-ts/boolean'; + +/** + * @hook 互动-抽奖-条件抽奖 + * */ +export const useWelfareLottery = () => { + const channelStore = useChannelStore(); + const interactReceiveStore = useInteractReceiveStore(); + const { sendSpeakMsg } = useSendMsg(); + + const watchCore = getWatchCore(); + /** 条件抽奖 SDK 实例 */ + const welfareLotterySdk = watchCore.interactReceive.getWelfareLottery(); + + /** 是否自动弹窗 */ + const conditionLotterySPAutoPopEnabled = computed(() => { + return ynToBool( + channelStore.channelDetail?.channelConfig.conditionLotterySPAutoPopEnabled, + YN.N, + ); + }); + + /** + * 处理抽奖弹窗中的文本发言 + * @param comment 发言的文本 + */ + const onCommentSuccess = (comment: string) => { + sendSpeakMsg({ + content: comment, + onlyLocalMsg: true, + }); + }; + + /** + * 检查发言文本是否符合评论抽奖条件后参与进抽奖中 + * @param comment 发言的文本 + */ + const checkLotteryComment = async (comment: string) => { + const isSatisfy = await welfareLotterySdk.isBooleanToCommentLottery(comment); + if (isSatisfy) { + welfareLotterySdk.finishCommentLottery(); + } + }; + + onBeforeMount(() => { + eventBus.$on(appEvents.interaction.CheckCommentLotteryComment, checkLotteryComment); + }); + + onBeforeUnmount(() => { + eventBus.$off(appEvents.interaction.CheckCommentLotteryComment, checkLotteryComment); + }); + + /** 处理条件抽奖入口显示状态改变 */ + const onEntryVisibleChanged = (visible = true) => { + interactReceiveStore.welfareLotteryPendantVisible = visible; + }; + + return { + welfareLotterySdk, + conditionLotterySPAutoPopEnabled, + onCommentSuccess, + checkLotteryComment, + onEntryVisibleChanged, + }; +}; diff --git a/src/components/page-watch-common/interactive-receive/welfare-lottery/mobile-welfare-lottery.vue b/src/components/page-watch-common/interactive-receive/welfare-lottery/mobile-welfare-lottery.vue new file mode 100644 index 0000000..99cbeb4 --- /dev/null +++ b/src/components/page-watch-common/interactive-receive/welfare-lottery/mobile-welfare-lottery.vue @@ -0,0 +1,40 @@ + + + + diff --git a/src/components/page-watch-common/interactive-receive/welfare-lottery/pc-welfare-lottery.vue b/src/components/page-watch-common/interactive-receive/welfare-lottery/pc-welfare-lottery.vue new file mode 100644 index 0000000..743ae7c --- /dev/null +++ b/src/components/page-watch-common/interactive-receive/welfare-lottery/pc-welfare-lottery.vue @@ -0,0 +1,34 @@ + + + + diff --git a/src/components/page-watch-common/invite/hooks/use-invite-poster-entry.ts b/src/components/page-watch-common/invite/hooks/use-invite-poster-entry.ts new file mode 100644 index 0000000..f1af9df --- /dev/null +++ b/src/components/page-watch-common/invite/hooks/use-invite-poster-entry.ts @@ -0,0 +1,16 @@ +/** @file 邀请海报入口 hook 钩子 */ + +import { getIosVersion } from '@/assets/utils/browser'; +import { useInviteStore } from '@/store/use-invite-store'; +import { toast } from '@/hooks/components/use-toast'; + +export function redirectToPosterPage() { + const { generatePosterUrl } = useInviteStore(); + + const iosVersion = getIosVersion(); + if (iosVersion && iosVersion <= 9) { + toast.error('当前设备系统版本过低,请更新版本后重试'); + } else { + window.location.href = generatePosterUrl; + } +} diff --git a/src/components/page-watch-common/invite/hooks/use-invite-rank.ts b/src/components/page-watch-common/invite/hooks/use-invite-rank.ts new file mode 100644 index 0000000..fa2539d --- /dev/null +++ b/src/components/page-watch-common/invite/hooks/use-invite-rank.ts @@ -0,0 +1,203 @@ +/** @file 邀请榜 hook 钩子 */ + +import debounce from 'lodash-es/debounce'; +import { computed, ref, unref } from 'vue'; + +import { getWatchCore } from '@/core/watch-sdk'; +import { useInviteStore } from '@/store/use-invite-store'; +import { useViewerStore } from '@/store/use-viewer-store'; + +import { translate } from '@/assets/lang'; +import { isWeixin, isWorkWeixin } from '@/assets/utils/browser'; +import { storeDefinitionToRefs } from '@/plugins/pinia/util'; +import { InviteRankCurrentViewer, InviteRankItem } from '@polyv/live-watch-sdk'; + +const isGeneralWeixin = isWeixin && !isWorkWeixin; + +interface InviteRankHookOptions { + /** 需要筛选邀请人数为 0 的邀请者 */ + needFilterZeroInvitee: boolean; +} + +export const useInviteRankHook = ( + hookOptions: InviteRankHookOptions = { + needFilterZeroInvitee: false, + }, +) => { + const page = ref(0); + const isLoading = ref(false); + const isNoMore = ref(false); + /** 接口获取的邀请榜列表 */ + const resRankList = ref([]); + /** 当前可见的邀请榜列表,除去前三名 */ + const rankList = ref([]); + /** 邀请榜前三名 */ + const topThreeRankItems = ref([]); + /** 接口获取的当前用户邀请数据 */ + const currentRankInfo = ref(null); + /** 是否加载接口失败 */ + const isLoadFailed = ref(false); + + const viewerStore = useViewerStore(); + const { invitePosterEnabled } = storeDefinitionToRefs(useInviteStore); + + /** 是否显示底部信息 */ + const showBottomInfo = computed(() => { + return isGeneralWeixin && currentRankInfo.value && invitePosterEnabled.value; + }); + + /** 当前用户与第一名的距离 */ + const currentToFirstNumber = computed(() => { + if (!currentRankInfo.value || !topThreeRankItems.value.length) { + return 0; + } + return Math.abs(topThreeRankItems.value[0].inviteNum - currentRankInfo.value.inviteNum); + }); + + /** 当前用户与第二名的距离 */ + const currentToSecondNumber = computed(() => { + if (!currentRankInfo.value || topThreeRankItems.value.length < 2) { + return 0; + } + return Math.abs(topThreeRankItems.value[1].inviteNum - currentRankInfo.value.inviteNum); + }); + + /** 当前用户的排名文案 */ + const currentDes = computed(() => { + const rankInfo = unref(currentRankInfo); + if (!rankInfo) { + return ''; + } + + // 我是第一名 + if (rankInfo.rank === 1) { + // 只有我一个人 + if (unref(topThreeRankItems).length === 1) { + return translate('invite.rank.desc1'); + } + + // 有第二名 + return translate('invite.rank.desc2', { + number: String(currentToSecondNumber.value), + }); + } + + return translate('invite.rank.desc3', { + number: String(currentToFirstNumber.value), + }); + }); + + /** 判断是否为当前用户 */ + function isCurrentViewer(item: InviteRankItem) { + return item.openId === viewerStore.openId; + } + + /** 初始化邀请榜数据 */ + async function initInviteRank() { + page.value = 0; + isLoading.value = false; + isNoMore.value = false; + await getRankList(true); + if (isGeneralWeixin) { + await getCurrentRankInfo(); + } + } + + const debounceTime = 300; + /** 邀请榜滚动钩子 */ + const handleScroll = debounce(function (e) { + if (isNoMore.value) { + return; + } + // 获取下一页数据 + const target = e.target; + const scrollHeight = parseInt(target.scrollHeight); + const scrollTop = parseInt(target.scrollTop); + const clientHeight = parseInt(target.clientHeight); + if (scrollTop >= scrollHeight - clientHeight - 150) { + if (resRankList.value.length > 0) { + rankList.value.push(...resRankList.value.splice(0, 20)); + } else { + getRankList(); + } + } + }, debounceTime); + + /** 获取邀请榜列表数据 */ + async function getRankList(isFirst = false) { + if (isLoading.value || isNoMore.value) return; + + try { + isLoadFailed.value = false; + isLoading.value = true; + + const watchCore = getWatchCore(); + const data = await watchCore.invite.getRankList({ + pageNumber: page.value + 1, + }); + + isLoading.value = false; + page.value = data.pageNumber; + + let contents = data.contents; + // 过滤掉邀请数为 0 的节点 + if (hookOptions.needFilterZeroInvitee) { + contents = data.contents.filter(item => { + return item.inviteNum !== 0; + }); + } + resRankList.value = contents; + + if (isFirst) { + rankList.value = []; + } + if (resRankList.value.length > 0) { + rankList.value.push(...resRankList.value.splice(0, 20)); + // 单独获取前三名数据 + if (isFirst) { + topThreeRankItems.value = rankList.value.splice(0, 3); + } + } + if (data.totalPages <= page.value) { + isNoMore.value = true; + } + } catch (err) { + isLoadFailed.value = true; + console.error('getRankList', err); + } finally { + isLoading.value = false; + } + } + + /** 获取当前用户的排行信息 */ + async function getCurrentRankInfo() { + try { + const watchCore = getWatchCore(); + const data = await watchCore.invite.getCurrentRankInfo(); + if (!data) { + console.warn('获取当前用户的排行榜信息为空'); + } else { + currentRankInfo.value = { ...data }; + } + } catch (error) { + console.error('getCurrentRankInfo', error); + } + } + + return { + currentRankInfo, + rankList, + topThreeRankItems, + isLoading, + isNoMore, + isLoadFailed, + + showBottomInfo, + currentDes, + invitePosterEnabled, + + isCurrentViewer, + initInviteRank, + handleScroll, + }; +}; diff --git a/src/components/page-watch-common/invite/mobile-invite-poster-entry/imgs/invite-poster-entry.png b/src/components/page-watch-common/invite/mobile-invite-poster-entry/imgs/invite-poster-entry.png new file mode 100644 index 0000000000000000000000000000000000000000..a2b15c2de08600338884c82275cd60e6a7ebb6ad GIT binary patch literal 3904 zcmW-kWmFV;6UGVgN;ilSf|N9ffYRNlw3LL>ASk)O(o1(P4GTy&0#cF^0@5jP1tgYk zmfiio-uJ^i^UOIjzjNlC`7%+jbW}-+9uVQ+;E<}TDe3;rKL5o%{J%=}b#NUA2k+#S zmcH`ek_U>S@ws6R2E3^N-v>|y05X4Y#|JQl0b)Nu695Fm0dE+19&t184&PsUOgY162MXg?@dzWDA z9BiBcju5~a3|3D7V<6bS`fov=P(Tj_|DJ-!!QkWuKuUl@Gf)lUHN2;kO)k__BekHy%0zO*d9c$0f>06!D=LyGz!UFxre zJ@@$CcX?cQ+NMG46o{?^jy2bQ-RSs6V3!U`2eJ7*z`Om{qZMUVaGuiz^wQ5nybd$l z!O0cYw&Kz%48@tMDzjm;?hYf8&n-^Y42cM_(f`UQp>lCa`5;m>#wqq3(kAu8XU>XnX^HG}d zmtHNv5rNiAMGb6$p5LHp3B0Ss8Wm!zW`JEC5Qc&BNg$d4_+cP?7$|1~$#f9h2b@cQ zQx3372KteU-G7h%xreTf9uAcz&p-RNVuOs=2Ww@92FUfnp4Jvb227>&=4>CixG*(5 z*x%dz^(#El&(2CtQmomVP0`m0&eflOw;|P79HGOTw7Zv4m%{UdRH5u zb?YN#ztB7l%gn=~%=Uw#LoAc0QdM%Muef>0acxIQ)w zKPvvj7u1qWLDH|a8?O0F%I(pF6)tIEPQosfn$6^HOymOY)Os9sQ81xq!jhu3-P(iQ zprT%DN(CQ^N|MRe4@nI2HqHeH>+S_)v3U+%ipvgVhZ(NFxE}vTu8+p3D{{i_!LtVG z>Z)?IKIg<3Z;E$GMSecw50M zp_vko?=@QN4CzH=wx5?+2ezqqWjGo^f1FVb(fh6E;OBl~@1Z%A67=QuO+{kh((X&A zS2*2Kc|TVe`)h2e$XJA0DhpM`gtjk+iuLI;14EhXy43k?atDJSkqFY?As{SPQzb}M zYl;jR7j}=0%H?Kt_rdQDGqK|fMQ>g0%Ob~Q z6?zg052gmfE89tGcqsVHCCT46)H>^MQ7@@l;kWNQ)_i4D8iXAsMWd%iHa=$gg>m6o zwXhYYqWYkz_TQfs5qHkd`j{v5^9Iph7TCkL>W)T2HHXQ^A8*@sFJv74WU474zUn&iMw3MueX}qlL^2Bb8e&Us#QlY6 zhVPnYcAnmTJnX5lj)#fQtQI8WT)C`$xOE|A2+Dg`8-$sAo?^Gn@}$)Bai3Mm@vBMt zJ1wcUb|#{&A_P6tOazx=7|Uu>a)yHluiLM&`+VxAem$424uE|+bhziHbu3kWZ-w0=RYfEmI;!k%Z;!+k*zN8V=w$g z6CRGOZDeLV$D?A{IFMd^$atJJ@f}h&-rPqp=e^2Ap+AUwbmPBc_H0mHWKK}XmfwPj zjYQOnBKdT6FXr-syklq^;Z!zfY+3Kqw?6V}XxW-o+rIp%gP%h6LTD-xcSrq_ zXyHRHqK$?_TSAY^yZ^p50!}TcqYrzg-|H)%oI5cZRk22hzB9@lkC0$Hftaf}lMdXb zzfjA1Wi;kDz0x=|nP2pI(V6yPm)JrMM^ClKxSkA)=&bPb(-oTmWKz#&?01phjFlHq z85ZodEYfp&N`+z&*FTzBIhsP5NMX008I5Og$`B@3IIKYOzGO4JDX!r_fHPe*SYb?@ zdoDwln`V!HE;Njw{z=oivMCk5f^HIBSXT}z@bdl2;$rg>D%)-wzWD1#&?kD|gzwwa zWfiBrIU4!)@P-$5M^WtX0OWmKU z&vjSy9i#j14oJ$Mb&7o)0J8B^uqrY z65nvUtaoev(#%UFHkr!9NSabtX2mke0|I%WEkwOk3vnnf*32bI(f(NePGkA%uG)>U z^1^YGYR_(Mhhg(3fkUN2P%3%fzHQGEtZRsQ znarH5cuT89L~vfA$}K&#v?3?PQ6r+nUkejUY6*82$Qt?-1vgML9R9da;O{h>Ix%ts z$3@BK_mCOE)(OX+iahmWu6X`9NR81=f`ScL#zBll`sXh90Yq6B8zYwcMK zug%!Y(5Bh$7x$!gCL(0++BAK+nsHbmo0)rVU_|&}4YAa-y@?i9f!PtdPD=Z^OD=e0 zwAK{khj02~W4G-HZMC>#xme?o%nBD=-^|S z*G^%FtSmJA4I9jF{>}Xa#RCVEH@t|d!(LZGwAN}qi`5tTzBKRB8@GIjNzm%&8#kD2 zVB#X`JIP~L@^%K~=qPd&Nyn#jW@~h|n{|ek=6luai{Ei$gZUv$m2kAb-uo>UISGd{ zHHjvq-yrv|D7iNigyxlUmg_5w`JjAIC0a$keWpMc&-Uut?|#I%N737qyqhnD1d{tY z8DWU&U7A4VL#%}FHH!{(pBame^&(Tr+VjDOi+ezf$LlVL2sdk|x zf3lRGdFMy1=2v#B#&FJLQf&pOnQpQs_-9SaMs(5Kv>tlj=fl(e?126KyHwc3e|Yj$ znc%|d_&+(=Xp`6*eoDP?jJ{u~AUB+p9D3={sz&hrLXZK0N3FXUc+ij_M49F;6qxZC z3``MytomZYf6q9_MD9sdVo{@rOsrwjh|)JVI01VW%gSXEM^WOVuPI}v3NhR%UvM6h zTI03Y8>_dDh#Fwt^z{)u+01?^kj8l$r-B%9DLuUrd#zinHp<54Q7INeX~^kC@!CY& zC|6t|ni!VxiJHy$#^eSiDN|L*@UEKi;+cN>*7$7a0WoY5ufCm!n8?o!8XgfZFYG>k z?D1x1wRO>$-Ef3jdUQKQX;z{(`w*raS$Jp`Hw$9F$&hIu9w9d&(M&~I{&Myz5q&>Cy zjv%qb)_!hXrAX}u(3*~8w@7x%UsTFP;c7{^rhE8|T|U8g>&bqLY8~e+(}Hks@9qQW z!*zV-2$VYy>DPv!3Rey7_nt>}9@!7-X~+U|YY~6Ck2gP&M}!!^4!codaifcPK2b=N z*Xv@9SNww)Vi(x|NiYSQjVy`qkZ+l09bv2P=2uXPSxGw+;g1ZrnyM4CfSjzE(Pu~v zu?hRLYsi@^&T}q}P%GE56Za?AT{t=<(Xq)_g>eYdlge%*CXXhMq>8k*G~@A8XUsP& zj@0xGY$p#ySq9gK?$sNYEA>T-RGd4J{`T#A`RMDuu4=Y1598jDh0KItqR#j9hJ{_Z z-#!C=2G-^H@AEQu`TQd9lDsuCQsEyx$MYppyj+{Dr>GZAWj1l8g + + + + + diff --git a/src/components/page-watch-common/invite/mobile-invite-poster-entry/mobile-invite-poster-entry.vue b/src/components/page-watch-common/invite/mobile-invite-poster-entry/mobile-invite-poster-entry.vue new file mode 100644 index 0000000..d213af0 --- /dev/null +++ b/src/components/page-watch-common/invite/mobile-invite-poster-entry/mobile-invite-poster-entry.vue @@ -0,0 +1,24 @@ + + + + + + diff --git a/src/components/page-watch-common/invite/mobile-invite-rank/imgs/rank-1.png b/src/components/page-watch-common/invite/mobile-invite-rank/imgs/rank-1.png new file mode 100644 index 0000000000000000000000000000000000000000..e32a4d0fc8e6859dc3352ee65765e7c69f3b6f01 GIT binary patch literal 8048 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 literal 0 HcmV?d00001 diff --git a/src/components/page-watch-common/invite/mobile-invite-rank/imgs/rank-3.png b/src/components/page-watch-common/invite/mobile-invite-rank/imgs/rank-3.png new file mode 100644 index 0000000000000000000000000000000000000000..4d643fbee1ceaae2b09b88a0ef21c6e470a08f41 GIT binary patch literal 8451 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 literal 0 HcmV?d00001 diff --git a/src/components/page-watch-common/invite/mobile-invite-rank/mobile-invite-rank-item.vue b/src/components/page-watch-common/invite/mobile-invite-rank/mobile-invite-rank-item.vue new file mode 100644 index 0000000..7aaa324 --- /dev/null +++ b/src/components/page-watch-common/invite/mobile-invite-rank/mobile-invite-rank-item.vue @@ -0,0 +1,140 @@ + + + + + + diff --git a/src/components/page-watch-common/invite/mobile-invite-rank/mobile-invite-rank.vue b/src/components/page-watch-common/invite/mobile-invite-rank/mobile-invite-rank.vue new file mode 100644 index 0000000..d0ddcc6 --- /dev/null +++ b/src/components/page-watch-common/invite/mobile-invite-rank/mobile-invite-rank.vue @@ -0,0 +1,201 @@ + + + + + + diff --git a/src/components/page-watch-common/invite/portrait-invite-poster-entry/portrait-invite-poster-entry.vue b/src/components/page-watch-common/invite/portrait-invite-poster-entry/portrait-invite-poster-entry.vue new file mode 100644 index 0000000..fdb82e6 --- /dev/null +++ b/src/components/page-watch-common/invite/portrait-invite-poster-entry/portrait-invite-poster-entry.vue @@ -0,0 +1,23 @@ + + + + + + diff --git a/src/components/page-watch-common/invite/portrait-invite-rank/fonts/BarlowSemiCondensed-Medium.ttf b/src/components/page-watch-common/invite/portrait-invite-rank/fonts/BarlowSemiCondensed-Medium.ttf new file mode 100644 index 0000000000000000000000000000000000000000..fdcaddecf5ce9223343a26fc0d8ab66be74ba998 GIT binary patch literal 99360 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

=3OQ2_SZq6{nfzQlWu-?IF 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 D8hL%J literal 0 HcmV?d00001 diff --git a/src/components/page-watch-common/invite/portrait-invite-rank/imgs/icon-default-avatar.png b/src/components/page-watch-common/invite/portrait-invite-rank/imgs/icon-default-avatar.png new file mode 100644 index 0000000000000000000000000000000000000000..62cfc4a1321181aec958297bcfc98463db73d3be GIT binary patch literal 897 zcmeAS@N?(olHy`uVBq!ia0vp^0U*r53?z4+XPOVBSkfJR9T^xl_H+M9WCik%1^9%x z{vYB1=ntR|p7rj`2C|$=g8YIx#RLt^l-Pu9)P?0uob~v5q$NaD+_W|Ac*Siw>}3@s zJw&;sECiT+qO@+FMaoN>9MVgu6z7z zTYZRqecz1h_rx#Bt+C^KZz=TTW5&h1^4;|(A8YrlvtWB;ar&0qTBY}OU%t(~zce9h zz1;PW>tpZSJ-*V|r~9D&*{z}*ws7Ct`YC!@FhiU9?e!n7wpD&l{XF69+WTxbHgCCo z=;zP3Mz$v_et%h7_#|VW!JC(kdCq5V#IS$c=k%7PMw&<0;Do^)ru+jM_tY#H4%@76 z&Q0X{C0=Pz&G6W!#qt9WhtPV5GaKXP)%|Av!>6+G-a&7LQ$OoJOyk-U+oY>-`k-{i z<;HJJZPx)F-b&0R9Fe+R$XXZMHHTMcax?qN$gKTmBc1BBtpfgL_{q${yo@O5QJ(KTD1Xv z$&30TLLLOMPl|{wLey3%LZ5uF+G1%9zL-#jQfiE~CP;%#Yf_t7l5TeI_CH|Nak#+d(mljRa%zuwqm!th~ZZMzW@B(ArxhIlLn?D@9l99AEf z$0v@cCFPYWz@BScVSb%I1fVBVVjUsL@mP}MLqO}r&=wf^+_bNKN;aR(CE+CRh%3+M z-bf|)q)HrG5LzQ@!??gX6i^Hv_?|E$(|eQ1X-mw2J=s!Ya)lXetExPZyHa3JKtBa& zTP%UIagHXT%u7Sf8hLPhUJXUBwJD&T-21w%BkGfTeC)5lPgc(6w6yf4=FptQy zm$r+D)e_jFH}Ar_rR17Yq7uacX^(>@8}1u2ja}Wc{;qD>aPLrYIh+_~3_*%f8eb@c zJ%vvi$?5O4gxfiZTSP_!$pNCZ<{V?G+caw0cD8b=t^Ju+sfCSe{lnW3WsQO~-eWmC zZUtI5xu@mx#0g}F2KySKLr$u*X{^|;K0$77F84ims- zplvF25dzA-|f5gvS8}66DR=&1XU0ZWpevbXi$3C+lt<4KJR)%@o2cmuvI8 z2FqL7>gqRT*W@+tiMvDr^xDHsE3L_$2iT3#u3S0bjDWqcNSumMp#*R$u@XI`nBs=I@6Yy54;0(V$NwmRi-XJqeG(e{YsM775I;_YD-V6%?-?NL zP^RvYK0i(ESk{VK{$Rsyki3UuUdtdY2m5kj5nM0n%l1wktOU4X0R*!jx7-lQ>`v7B zMSLlBYBnMkF{cA-J_xe)pULy%e@5oz`hO)L0?U86<}qa8%V^GC0<$f<=gL>bwo1ko z3$TYb)rYe)y(qywsCFxI-&H~&atdH$xFthDy&aGpSFV=$QzjJ&u%9-x6>^2+IB*+N za7xTL{o@&veN=ic|5D;em@In>7?ZzVI8Z4$*W+Baf1Rza!EC*EXM=3hX zZAo+gFIkeS$YxC+eobD+Z+K0SHFby#%wc_h>Vp50<8RCvEa!D9+z9{x002ovPDHLk FV1k5~l$rnl literal 0 HcmV?d00001 diff --git a/src/components/page-watch-common/invite/portrait-invite-rank/imgs/icon-no-invite.png b/src/components/page-watch-common/invite/portrait-invite-rank/imgs/icon-no-invite.png new file mode 100644 index 0000000000000000000000000000000000000000..2865789fa5b72a80b2f3092d6cd4cce5ef17d84a GIT binary patch literal 2326 zcmYjS2{@E%8=fpgKTvY%>9StADjFOucF<@&F`_qx9KS?=e3-ur&O@47zrA(|sXR$UebgCWQy zf(x*WACI&+*tgWT2!W9Zu!HPiu*&OlE54F2nAp)nR5xN@U*GWX@cR1t^z`)9)YQPh zz~JEEy?gg&W@Z3nVPWz9{d)`sV{L6cG&BVE-rinQQ&USzOA`~5{{H^)@o^ANPEHC0 z0-;c7W@ZMU*x1;)xjEoZOiYMGB2fA1(Om85%aJ2T0Ay}%j>Td@D>9i3 zZU+tDy?giJ!v|+)XHXB?f)Mls92^`R00(f^#>QsjAcw;N^gsbXA3b_xWn~3ajEszc zp7ZnbK+XmPP#_R2pcLF*P*AWDc64-r{u@5f3mk9|bhfp%1q8q;pbON4{00i>0UzA> z_s`YX*a#RVBqRWtqobpszM`Vy&|4`gm+Hg=%p*AV#r{{FvaVq#)8 z!uQ)vJJjfMdsw z0Vp~;no6aDse;!8!k(TUCX>0au;An413r?arKOdX74Q-P1ZDz0HgVa4Xkc0+TxhNa ziqc!C);iXdJ-YVB>Z%BHjN)!9vVjwE=RPelMZBE6q$5sMmZ*<~n;WTVN|`F-4?ORj~*hV#Oe^w&MbvuMFuy#qg0}zwk?j>%sAf}?OgrR!yIQ~Lfv<_ zwXrS;Q5I62|2OOV2P#9}u{wf+=s`h!A-Ia*yZ$k}7WTBYTHf?~oNv2T?b;j2p*aLy z@>*}ee68{&Hpi%Hm(Xzw-l#q-m;Q;=Gf4H%ZOG(S)jV@}cAR^n@}gk=nbEs5)`MR(fo_hh~pf#@S5al|4mb zO9q5o`>J5s73X4DOR=vPj)8hCcPUIHe=K>>2)W=AKlfH$a}%=l#EG-~mpj{aWEe`G zsK@a9_{M~k%~3s;p0h;8YT79wF7U!{ikA^_UVFq(CSv+^_$r#DoXw~tjEWBbuDq5l ze2eXEn$zq>>9;g^NHS(zmw#K6l&~4a!rY$eMF(MC=9betzV64>Et^`@nOc`-oq3$f zG~W^A&I)wDaMt5A-Q6Q7D)Y_E%)`Op!_U80My1C3A(|_nmfv3pn|d+dBD5*N>8~@) za(lKT|ET3z;H^BGmfdcd)tA_Oeq>ovUiCjD3-A zH9T1p?(io)g*%j5ex9FiICT3QRy7mVY-hbV>sKR9>Hh3rHXc;PCe_MOkx)Gy0{9%Y(a@m7+-ayC^pebcTNj8wzNFJQ^}(P+qQj%VUw9Re6e6 z4aST=>t5&!KTx;|@4WB+*{MPTbz%}i#)vKu0#D0-O)~y)G5!0>InP;>QgU6bAa$Pe zu_BY(o;znMqKL0mr`+UtYEH2O^}_T_N_W zuEa3AIy{Dxllfp(gSIL3P%BYeGuJ!(I#=*i>Du^!eo%U&us#+Ub4)jT`gC>Kku-DL z?MN^05>=Ft>IdJKmvtG}UiOeRx*afj zO8at{@+`0PEbnU$Vdk#FUkcX})t=b4tMM7odRwV&-b3->-L?3P`(rOeFV2m| zl~N;o9wy(=P%CNwjgTyg!#^Bpadz_lyWR@r?~F8Jh#Thg_D8uD&Q*M(bn2}^pH%2! z5+~!LNpe#-um5l}&PQL0SHGrL`DXZOre{now=3E;gu~5xo7wTD_sWB!3A)e1V=?|J z1A$dFs~*{AmuDYoa?WLqP$b>(tzPz&x0id+{xCE7sfGBO+FEpB=s|rr-SvudL&Wze1do zF<_Z(v-z*kTXLb*KTRp0r+6GU(R;BRfwU;Xv5vf36PIUwGbYb>OM{;dj7+2vp4j`u F{R18CjI{s& literal 0 HcmV?d00001 diff --git a/src/components/page-watch-common/invite/portrait-invite-rank/imgs/icon-no.1.png b/src/components/page-watch-common/invite/portrait-invite-rank/imgs/icon-no.1.png new file mode 100644 index 0000000000000000000000000000000000000000..e9032f12fc39906b5fe1e42aaa7a38404855a36a GIT binary patch literal 4069 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 PH-Q)%nCn;TI>-GF=EX;+ literal 0 HcmV?d00001 diff --git a/src/components/page-watch-common/invite/portrait-invite-rank/imgs/icon-no.2.png b/src/components/page-watch-common/invite/portrait-invite-rank/imgs/icon-no.2.png new file mode 100644 index 0000000000000000000000000000000000000000..7bbbe63f332af767de7be931be77b2082d949bc2 GIT binary patch literal 3430 zcmWkwXCM>|7`}2Odvrygo#G2A84V&Ugswv7S0uY(WMrMa9e4IV^JF{wvRB#VBr9Yj zDw)Z+_tTGe{Cb}EdEWQO8-~`s#msP;0f9g;Yig+8JFGE>Axckkn9m&vz#SH(^-Z0d z2t);zao?O4fuKR4we{43QmNe^A+CUGhy6Xf3ie^t$wip>20fpk_8m-phY!;bN`TQh zsBDMeT<}Yydc+=dQNR^{K&%B{EY$W;7dGJ64*0}_GnR@i-HXiy$`=Sug79?sv;YI+ z&^82b24G#Tx1tJOXEc{@23VfpB+a}Df!69HQ5ylq4Hv#;U;d$giKq~b`6xA;H zprr>~VqsztrkA0*AF#RbB75!YDq!LuG8a0gsJ`*AxC(wa2uufuu!EWAoTDC`FPXmG(%2NwbDcW4pSf(WS%P|^*f^N`aD=J`PE0=ERnZ-V#VAiD)z z;~}qcKeimS+yGC6*3VGZ4>@EgY=w|~$Y=zo7T?bS)g_3pc! z>`E`GPBqIP)-9@eIr`E2q58j~SI$U8TN}%nc9rNGA!+GOxrQYP*oCp7a@mAL**p9= z*ljzIMnXvCNFn4!^AL`U*iPC-Dy%Ln1O;aJEi24ioyV-YHF>VOHCuj45gb_xd)TzL zZ2i1Hsp7?KwwkQ$?LeT#?6%BaBF+58wXMR3pC%REqLEi! zx!8_Ilk0h>j=lUf^JnAh5V7!S zp?B@bk!R2LwmtZ-uyH!i`fq;76MN9HoJ+ysaFaMwJ)WJW&q+9((JNcAA;Bt=bwOmZ z?DoMli}YIi+U+RuH6>i_AekAhdMcNhnfXD7Mfh2<2z(N;xVYHi$Ip)^PLwkk7E33n z=Zw`mTTi#geJE+64cGBl4RG8DVUYH13wgNzQZcwy{K&H{-p`+ZRJ*Nqg{t0b35%k& z#fbbXBZIP>eGwN%m*HO}9rPvcq*mUte!UG!ynmpntB;*)rO~!bf=@c;Ko9B6|H$Wt ztIUlovF4_n!jh84#+sU%ygW5wl%ThU0GeL7r<37dF%uKAOv=%dw7JVaMpm|DP^d!& zhnfigt>V>IgQeNf={v>>SF(=p{l;H>F!y}H8liJvccRhrhg!7&IzppLPSl3;-rMd` zIaGDu;Oz^)*KbOwF!-sSw-#xYwN{{OI3himx#FU5jc8G`{cbK~aR2%=H_uSw-k_lE zm*;-6TfAdqC)k9P8EDT62MPrFyUW`obG(?Jot?dI6ZG*oQi}K#L19!vAvR4%hllT* z>Fetolz9H+-(8xzd2~wA1NDBgDLpnZ#BY3jTq6i`t4j7}o$N`Bmq(KT+pnEnkE3@_ z-=lZeeacCnR?BGltuZ7&w5hq`0FQGt!!@bjF#c_Y$BA()d=*ucii;NgY3d1G=r2f+msOv zV^@&^!e}2KIwm&JxO98~s!d7g(oqK6P@OND`xH&j`E_waPi)%1Bqb2aurzrU_tg%GwUR#2re4XQU zA~%EUXBLwhg{e=K7V;w(RSXIC2lKM6vvB7GuM5TtnB~h= z^|jpBe}Y~b2#8zpR&2@fxwi4x&_z#ARruzc+tuI2z8K-%t{;z6rs_ zz_BE`$rL5D+lLAlLA|~uVc#ZUUrSYHK0opR@#+xQdWs31}BRc>gr;L#?&5^q`2LrUo`0ds#B zIc%+*hEVJ6ML(;z5xx57nG3|9Mu?kbjoL+B4m7cPJ*1-Ei|Nj&c*2sYexqDoWjfZx z3LP3}Q*u#bTwtE|kCs=bonrkYJMU=!WWP;*1v^R)BXM$W*e~jR7TXRw**rK#8EY$G zQ6K+qe8QK*C>$fjEwLiihvr)+$o3S*Dj%m84eXv1{HM)?RfV^ED?7d6RAj@kOoOUz zxg~;Cu|fuc|1CE|M6|HM=7wO=0(+hzVdcQYs^N)7me?cZdrQfxLTj8w-V5s-b=$P2 zr6P1~x)S)OglK!o#%-5g+&c;T+>mSHxN_OcU8vq1Egh4Ook@gqmMXu0qGs)zHAN>G zM{lrUlsmG}?qXGa_};C%2Kglc+*;1Kcm5~_iI+bddtIvT53A@%NLPvb8(Op$KDebG zpTaDY#$qh!6s$y;YHOK7Ag`ZWV{1o;czU=a25Ys>@?84*EUHL*@dQ(KqgI}UsV6Vp zc{x$l!65>@MRezIg|O6k+qiX0^{P!z{&ORVN~&?O4S&+_eI&mgpM|LE?$8B`v6j)#<{tAZmxII?1pghNT$vMzJuaJwe=EqD z6C7KppRgYDjY*A-L`RpR`(29PZbM#JXhCp8A<$Ns2^TD-W=Ub7J#Hz;x5w)2p|$E&UDNPB{V=*yRlwXb@IOGbEW$;*KP`1;Za**XPGbB7>yPGQxvv*Cqc$wxJ&ti4~UyTYY2Vo_6SE zVejP?r)j*Sn!G6J4*03h9|SIFTH20L7xvLJEo?QUuLGuk7AM4tzw`DfBFk%y%^PPP zlj})e&7}pLkG)@B?qOtnk4yea5Y3mA@;k?VC#uW+r=gPf#8hyuYC=Tm`Q+8;yAH5F zkam_t1?*)W1Fx!?x%v%_Qck%)`}6bHh6*0?jjMS*V}E;I%HQ!C3%QfXY2*O&L&L&7 zeOEt5gzUr)?i(?Frv{c|&TpRMS09`bW>sV3H#&M+Q~na)XcIfu3_<5&d!x}|cVgS# z$MdS8WciA4p{}V{N1w`jOZOkgkoksoeJa<_?EJdbPk{fLXA@;4OR3wvze_2y7dK)q zF<-*ub6RtGEPczl<;KSJ`V>PTLsp8;I{HLAPYAcpB|N)%W?jrhNm_cl_E)rLSc5M0 zIdVM>H}BJCZeH;Hx|fKoqNe)JRyk-#va37usHa*yRutGYKwNG_XE9GZyzyLBV&bG% z2p8bd_B)9^U2Qk=x(w|dwaia6$gbRLXGEU9>V(oi;FEDqo?Qgi-P|ArwgkK8!{-p8 Msiv!1s{F|Re~$q(ng9R* literal 0 HcmV?d00001 diff --git a/src/components/page-watch-common/invite/portrait-invite-rank/imgs/icon-no.3.png b/src/components/page-watch-common/invite/portrait-invite-rank/imgs/icon-no.3.png new file mode 100644 index 0000000000000000000000000000000000000000..d67d24201872cf6868524117582a088866e4a92e GIT binary patch literal 3442 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 literal 0 HcmV?d00001 diff --git a/src/components/page-watch-common/invite/portrait-invite-rank/imgs/icon-second-place.png b/src/components/page-watch-common/invite/portrait-invite-rank/imgs/icon-second-place.png new file mode 100644 index 0000000000000000000000000000000000000000..3f2017aff21998a5fefc9a88954af1c398977eaf GIT binary patch literal 2527 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

~61pRQrpV;ZbFgN0n_JNe%-s>kVmOWM z_sI4aF{5uO4YBdxT=QrxpFw(Nk?RS-?uWKRA18pnWOt$*L)Akq$oH&g-pfi%ESVw{ z6$5hTK~vd&MCbKbho13Pd+DgDbeCru7lVsv#n~C=N;<~49c;;HSzvpHip4a$T8rUO z|A*SI#N>}_fBhhf!1`>%KC)DfTek7NtwayHXu@{-qMY%L=~5r84V0ITfN( zbtgt$!Fz#`n2%Um@|44CYmzI|)RQ1haQeSg^q$Ez5ey`pQJ>fka;CqCCcOSJ{LZ*u zLA@azcCYmiUH7l;HFR|Et`G0}aD(XPOf>wiNBUB{BO1)z(w#u>%}mt0z`b147a4VH2@yxe`C#@SVvZO>3ydZWR}mkLZ4ecC z_e1R$A+N7}=>3}dSRCWi`+d!(N|?H^0L_K&d89!{8i998`i&v)l>4L(bZu$11IRBG zIeTO-Ha(`JREQxNKUV`9ZcHqWvG= ze)8N5_lD$UlZT_sG{~(U-jR%=c=hnGA7LK}-m`nk^r+9@4SJ?Y>&*$$T|13Lwo7h_ z#Z7@1Fxc6RTxGbMwyb9MuP#<4Gg8V3;=t~>oqfC`VM+ciNaExw>-WABFz^9>to`J5 z((aFGf3SPsbuoGmT$!t@E08++WalVs3z}i7fP2SBtDIKuRCwhT#`-Q5K0OJY|qMOkp>@1NZss%|G{4WfdSj94%~xXny7|F!=&cT^YU z*eD*NJGz8UMnZ}^9bB42#{JSH&-<@P{I2?am}?6`vgbUxeWaYu6q3v2y&j?@HYKxw zcge1{mM2Wdgxnjrv?aG1-AIMQLQJ@G7V3y~!4Z3qLDwuWtfV-S{a#C8_y0!wxeoBC z_8*U97sIPq%FI%n+PUIU2$uEg58qkWgW9 zX&!k=GbMSfX=P_Q7Z1|a5SC%@k#oBQtRHfGdWfIHJNo$>?Z@q(viqIh-c5FliAV25 z&>Y^KLCOTge@8DoJiEPBVdJ!z4^?FhK(c9=<*r3Yx>GAkv0ct}8HH~A6t^^`o7j$A zo+e|A+Z!@G;5o zWxcV4sp`DkPU@DWGcOBn&5qNYMv0HtX;Eof%<~Ax8Jsk)k-5LH_&NwF}qfK4#)F$xz{Jct)bS!rD z?s7!imTgMF?a;oU?06&sfpCAsm;%}_3GUEy1iou(_8)J*yNbUadOvq9;r71NxRZ2e zv?D_R<)t#Lyd62TTWK&Rb+kPvB=nBSeC?K=1RiC-26s6UjCY*NUR(t+kgYO=7(Rrl z!$9r|ky~c;f1Rn*9zjo9A^gr%91ea_eEd%S)x@D& zBzh;9EpNzF&uvJLYys89-g| zes!f`^-)J650@2A2C-P^-{9(j2DJNf3FzTQO9xuQ?e&}o*g{jM4)TT8j0vS@xsK2U zduy~f)Z(HOwuz8g@`QMJ8@4jD6UYc|LA&3L$3NPBd^6+T@|eTn{$5l$gHh%dHqjw# z_{FoxR&(MHQg`<272~Z@1q)ud93^jGkc3ZDNEJaLSLzp38kwV*fcTwG zi0+OR+c9lBWQ}E+cPukk8;wNBNc!|he-pPKsmtM^p2(RyOlJIVw%?DuA9WvOH9Qk? zzdBkFL31RVbKvdU9d)8xbF^T|W67sBYy{NNv5|ON%d|Eu!9BM_z=CGvp=~Um@stlw z@&xwdakJ*6Ov36*fJlJ-t-}dwQ&_X#2Jw#CFb-7BnEB!MW9@z?hoanTd=KIK@!2>) zD8F-dmyJl-=i6J4>&Wu{Yf%U8FOG*Cjv}K<4W`a6Ox|9pNqfvN%reC)^n2UQr))W3 z>xdjX11POKY0Q|4k>3QEz?fim5(|d;tIHr~o@ut}zt?_uKk|O5-?$@JMhe5QKSvs` z@;)EMZ&3kw74RT-K)u~)w_Q$2I)M&~vhF~!s^o6YLg9v7sw04)FXU|Yk-qRAUPIbx z+$B%w2@TTU-)}{>Q%rcvw9b+0p+NWVv>&ni;GQ+Rc=$?Pnnf~cEEjBd*2c57yZVD zUkmhDOgMR4{ zpM?cUzgQvIQOfN~lW-%6L7{1w+^u=^GEoG9OL zf7EfgR{UO2Ez<^8cS%So;OODH`OVk|X8mk95Ih7q(cmdO1_+K=FVC@*`&CjTz|TlCDGMb6-N zVtB2Q)b8qKJB22RDTy<{a+ssdR0xS<(jGTwMx}Tz&A}&74|;~}nR%;iGH!3kVU+`j zqe@2?XQwL#sz>HnA1U-9X9(*@9$B;z+^_pdOZ;g2#rHkp{rXY#xwDtL7ncJ0qbu-x zj8~78;5B4TiwhPyVT7Y$j(J^%zqaxM+KViicB zAM?_4x5{~ZXUP&vDrH=8t&;kpQ2U)ERsUZ5@vCMg8npb@__y|$dWt1NsnQRb{UBZ25ODASnz+X85 zAN#8pHa0yA_u6L53c}kW;DPyu$iCKmo25*>PLS4fg#+4|I>LoZHp#&J}OSWTfG%McnDqxRu%y&i4hko5cojbCM`H4p{D1Z!@G*VOONZ*^w^@t&C(rN zbA1;PqcG>My5zD?iBS`JG0{6*F7T_Q2%cG_BW z3UxZJ3r6tjW*n6^asZ@=H7`;OIpALUk?(aZfXS*RN1M$bez61^A9?`_ZQZPhRuskY<* z3*5U4Z5ORtY$|syLGCQtMYRWn3DmBH-=E!?po=Xyz5V>5I-KC5s`i%~hWj%yWo9GR zqlTwFzB)<)A4jW%-3M)!>1`$j&8!lyGx$XlhF1vOi@FV{d|Fv<_}m+DG?RWRx-7m9!`r_n2AdyI~ zes=flrvUb65~f}X!CyLpzbv8M2^*_trZm)mTLAqYeBMy7H#A_SuApESNgNQht@hB0&e9x zyOBZ8$PtXGLcM~xFhtA1O}_^&pPHclQf&_LwGCYiuvxh8qayA!xqx6xf$!T9IC z-&rR}LfLfSK4kw(&ZG$zlfO%J%h=xHE zWP1?q2di~+Se&3CiWl^2HdR%QRB#vKLK5CZo7|d3H*x#{ai(>CEnxp$#e%}U)H2iC zZ%X^mO!ST_CZY#^(k`RV{Zs~gtS0y#DW3VBU>~9Fe#f4Dh-{OU6C`Y&sg$St#O!p# zjj#GWJVfax7UvptIc{f+1LTq28y%^a?Q|-5k&&b>q^HzNxqk_I2frUCD)RB|mktQu z`L*u-dc=MT{VIIgN1iealTA_f#bhLt+j}7Sn7OZlZ0}Haq>rS-? z?1SZrYOLv#tcXNe8N3BLhuvb|>zDHJcK{IF5E8)Y-$lp(QqQmOi~s;207*naRGuTI zx1Y52VJcK&`_Is^`tFC@l(zXJCkB$A^m)0%w#@g4cf5-f8M-ZZSutyFeHnp%?L!2s zi{o0Bl^PIsfWbWwd(e>>Se=Te>}q}>a;6=<1xXd+Z%&o-@s&`G>=~&q>6B1%$!HgW zATU>S&9eJG%kKM6cb+8f?rFc+eDRpckr1YGOyu8B4?J^mDv9@5i<`L@9iV zECaqJaz%uxXcu-HgyZEVM62S+TqRiNn@d$PM*=D@mM=-nd?UCE2UELAli%BZer!Cn z_V>i~-M^M~`%i@SZ}geifmsTh8S0nD^vdqj1U%};I@aN3&}(ZdqM-~gx}Jpl!9iV4 z(#`IG!JYrkd6X>=#ByYY89R`RTwGFS_FGHFhy);N|IREA{Cxi&bC|LHxIv};zI&Y` z4}OpBmxi8)hcl6Z?hezQaF>3>ck3-xBLKTHhf!-O!=nJ0b^M_~{=0T+{@N&+fOHEl z>G#Lv>pGi}22DmgAsfu@Wn`Y|2v9#TxNB;O4;@?W;;qq<95mX-ZafpH0w08Kb!G(Y zM=sVEA$?|Kf(QQl83bYzE8C0#0Zc;+_O`-3Bkcn^ih|(+o_{RRb2UI&xhV>s}H=LENZ#(?LA?%tpY0U;A2XuiAUh z^|W)bYa4(4+ckUVm=1sYk86h`7RD*of&h2HVPfRwSK5^ei z{sju>zy6C06QnzvtE6HW;_ef`4g>tYc^CNb0;PZH!kMip36UFe=e8G_$DM*e`Yj2@#RldI0aP*Jw6dRLwk>O`)>~FQk%!N4jTY? zPzB9Zpbk*!|8_ospB3t#RLC&YagfkoKK+-vBVEvwI^Edaj$e23H;S2G_3Vd=_f1*bHw`z zduT2q+R+Dzw@eH5HgU!0+(8fSf5PJf+oWV5tH09B-Ryz||IY^vunX+d?;<1_ z>O9No?-&fc{ZHd}=X=EWj%-o!4pT|)>=evYLJU}d%}{%I@9NFo z`uy9wEB`eA_cT3r;X&g8+c^snwpB(LPL?P5Tc3aQs~o=-KA^V^s(e((QC1aTqqWjEduF1J zokSgv4fx}5ci>=h`ptBm!~?@4xL-+|haS7g?w=U#zsr>ASTeu!!yemaiv6b$eg5$; z!9EuCzjoxSvHLs4{5!@=RLf+io`hu!<$INUvNzNa<^@u96r*`bnVaO_UdTTvFV25* zJyeO?x57!W?rlrUBL)UFMgsMd$nj9EfBn^z49PkQDA-ZRgI&Lq>vrUJ!24Gw6`fd< zt)@@^_q*{tlRZ0%fB%`ryuSggH%iDYl>gq?V_$(&Wtm`o^^OKM=U)|FGob*K-MJLOVFR|Ig$w`x(6N+uOfNIGAV`q;x9Ve-WqCPf#+yz9YN?NrFgc8`aqS4I71o zuy+n~NbVP>xqJtRN~W3pGWPv~n1N~j5hY0J(05IbiK^s;JW(-oVW{6$=rhBk10IDt zU7Q0vNca4v|L518f1!fk!S1GC*$+<@fR=y$iY~}sKAnB~`Kz!BPfbs=c>hjjD@M>L z=G8$D)RXUdPG}F#b#BMiDbx7v+LL|*shx3$_;D`7Dzp3M{6p(@T!!DhF?we7jg{c0 zx>vQDflMPOpszPpWmKb+l}ZKWiG8d-RJogm@jS|PsQes7A@=N;q6t262L|RVWFoi$ zl7%LD%s+S&_})R!2;fD@pk@V>|Bo1I|3ghW;@zotf(jGlyEiJ@-=)mzaCgDb6W-qTz7sT!tg=-+hn|UE!P47-p;~NcCtlqqUZpTXh zuV2*x590lwWTyV&DaG@VutY;zL!#_=lbF%}rJQy5(y0i)$C03OTWXMsCABiUSKq*J$w^rfP8N_vK&{wu*9 zp)P2DM~db|d6USUVRjMaOwR9&cQTZ!+}=@E-;9;#aTR19Q;Idan3rni?n$OX@qv~( zji*#}3%#T3h!qXp1OYv#_Y)H{*rwss$iEV`2Y%lnp_ikbJ?@`=`6LL}3BviyCn=v# z-gea$*ujKuMGkdr0Hraj<=-3B&FDchGDsY_r>YO)@hDP zB$gX#2&+~+2!BUL=6!($_N8r9diZUO+;dY!<$ii$Ey+cK`oedH{E0$d(Ed)FGOYSL zY`^UMi;&Oi{hvD^+|TlC{Q2yw*4ct_U9{?*19%vI7TKa=er!7gZL<*riZQ_e?FOk%G7s{KjK z@I>r8OmsRp*snX}WKmLJ%?>3f}4BfpXq<5 zVM$$)iV>G8|Et>O>R9WLFu(2U7wQ^o@J-O&U|k(IT)oztmCCJb56vCebmwQeb+3*A zRxR@DXXcwT$L*hZPP#LmT6aepYizCmwezbhaPD71)y{+Ay~C%lPejhFT`nTC!z)+T zBxkBIr!4=fW%;)k*T?*ajnH6JLAb+mVy`rFCWUAzl$4CTYMksUm!dM^=o=1&?^#k&+8p=UdR2;0U zd!^9d^GHt0M2if#9R~WE4|}AOBM*^mGj5wpTQYLmCb{J3Q+%qb7x9- zcFyha`xCj}x6xeP5rN8PYRc^h0vhd1+Inw*DYPN`$r*-Ip{N+rt`DbZW`IqDO zuVy_tO%K%mb?;`3{YX-tjcYC0hJWdHZvEl6_^wH-RQJ|k@s9kH1R?!irIgoW-Qem_ z^{3#7$MV!r;Ls+qf(ImzsU9oG>#a6I1~eLGro$+4%Itwpc-`6AS!icv>R6(8n3HbD z8Dsx)Ma-)G&HrEdP9D5Ip@`oUJOy?Kke?9aBKe-?)+)&NYL)Llwu`aFT%UiwUBL3I zf>-ABqJ-ZsPD*J04PNwx@cX+HzMpqCAp@~I%zf~$9db$TP?sD0-lp!QGo4=$G9Cot zFJD#EAf?Eh^+8=S=Fe~t^iZ}9rTFVcpgQGs*_{#7DAMYE@E4iBTKE9CU(3O&YF=K` zyE<-!!&Vbn<4e)4+mpL(NR37O=9nK7-kn3T;TL6r2DmA4!h3Bvzeav{4eT%QJ|n1$ zYw{DCt1MEvI8)V5^iCs+^6UV`>_%CUm>6UHKX-=PCE@OxSQjnn+A7IJlu zh%K)@r`6LfIYU9syeq-G(=*gn2KTeW^ls|SiFlrEjV34guWgbtGEsMqZgGW4K>)4T zx?hx$Nall-x#6xOEYyKhF#eM;0l-G282BBx-w%Jq{Np;2;x~tTqv3ucY+;v1<674@ z#`Il2eSw8_tdVd9GCJLWK;GY`q23v-j^|m=h;KlU4m}_2jrrvlvS7bTPZMfQq@^>O zs0;YrG`jozl?(k1Bb`QD~*UceYa=l7H1}$p1Y|4~N>q zSQ!>G7wDnctl*)BUhu_J@Q*xZyR-d)eP(+WJtJgZP8rGG%cyj&V45NPIO|_ zlG;>|F0ZSE@`kk5^f}P7MtC!?JLq%1$xaW>zcJOblJphUOohXhvXkxW&slOgWKuJL z+3D`#&8D}Srz!Nw(9Yq0{)q@C(mLfZba6}jDKksszF%3;fHyKBGRN%i81FkaX!JW5 z>!@6LQFJ|C1l`VXJU!haHB;R)e&3XTPT0i!BW?$$OwR77rx$)XQI;>-&VqOI)o@Jk z4i883PIQ|r+yy}y^Ny!lJA*ttBeO}Ok$xc-r~E%Nit%m)+!uyAqux|u^1&MWOyF(h zKc-s1Pc}U~|JLKT!Ym|Os3Gy1g*6dY!?%;2tL%s+&g& zrqNwl)JRk?&l|f%O(W0Vh}?hxoR{}mVbq!2>F*c4~;S5eRu2h^g>=NX!QIAhiGt;YDk-oGA06^hPzCf zJyh;EjR6<=Kg@s29|jPeuW2bfsY z#Y_2)l!W?{g*z=c&n}fLPE*9i`sR%mw}K#l)6ih=OveQH2&f#`J?j#=Z|x#VtHjW2 z^RKG;cU{asFx}`VyVX-wN*7$8#3>mR%|$BZ-x%Pn-SUX1>K+#K%1~a~EbEw=UzzR2 zUn6~bCN9xe1Eq6w&b~KCU*0n#KSKGl;7vPZ?t{PUQv8+S7uSK9snRj@Ncjp}SIwJL zCphp;>#BA*Nv{`jO-VtSInN8+5pI@c&`6fC|PV-WQ)<>YEFD4rB-KZYNA`v%_Le^JM#1mNGPprcOg` zE=iG)U-7xIPoG3QBIkViO6KkPnEM!$($(@GH;T(xJ(JwLGmgFofA_)fxKZI0P(f(N zvFrT8tE*}Q)To-)9yb)$itws}*7?t`9k|EB+o6$5mw~GcIpEKEs%Uoik`0AuR~AP% z!kJ7beQsp5^$U&sAMlPHs5?B!>5h=!HnRJ>px#|K5*kX@$PnHG#X-d4jbbfL5Dl# z=FOSTdQ43Jm5_Yq`28z4tZ24k_czoAbU}JgTx`+{qDH_n_M1%b+y{ROc*#nsJVpHG zzbg$b3W51J>GsivrOHI)`h{g5sUu#4H43;MOHB^kzV18zfG2d%&(5fSRSZ(;0AZ+e zZJ^oH&rRH%Z}FsEk=)<#Xd0r}f!p697`FNOes#zMdr+keL0jlukcdp2OKqa}>UD!{ zl4~QP>UEVH?}qn9Q{KtfOe1gQ(rYp>{o2Tb|Sm8yrCXf>0#pu*3NL2 z2AN{;mz{-u)riuUMAr zF4b!WWkWoq`hC!_>M)MplxsU^HFPCt!!~FP@^`551$ajqApH)H^PL%&O9u#MFjM(C z+EQ-G*Wm==GL`x}^+>$gA#UGs<3*E>A#UFmXXHiNeX0%^hd=q;5*}vfJCsd>g{2hF z0N*bA6X#q*B8wF6TX0~mQVHHqoxnLU|77YmC3eSqqkDd1`W=IWXa=5>?XB%!wr+^g zZ|INbTUUNZhClawV=XLfzCo~ad6#h*mVfM16zmQR>(@f#nkVa5(4`Krsra7G(uWxUIy%EHPNEjUR$Gmu5gu5xHqop@uqXLK|g&B>~5-EY5hzs zEs*|O+b7%G;#%jqISAf6By01AUWJSddun}6td9*`BA^}KjqG!J->s6pN^&MbT7A(8 z3$ctxKLXpSr-=4bJA=o2@WzK8fs2dy2*^9G!aE3fHx&uz23CE@A)Jkb(0(HscqTOe z)%-KWFkdm0;OvvZ9h40B5)I0rUSPB9g3`IZE@aCl{9Pvi1ooG0<3?#*RwZ0YdIj1L z4N~9fz;y__^lEhs8c77)Kx?>%{59=6Xbe)KrxjFZgx}qA&cem1b`df%-RTX@WhC>| z@f1dHq|Zf1Z5Nm`w{HvBRlJ}uJ`Hj`FuN=lpgkaT2KXH>pPa0NhQeF(wKV^(iQ8GY z@4~TmPpb_1)8LY%^J^EETqE@|v7*tjm$n)3&PDUargb`@xk!FF=c!`P&Uk7&*LcE) zuRJfi0i0?6j3(SfA)}E41EsBjBd}2Z!t6wGgKHlpJGdKv+I=PYcU{C^bbKSbhngfP z6F3fBqu^LwVj)u2!V53$DRs;}XoO3Mnrt-Us8XM|GS47X#pT$r}lx5Zp7yM2+iEY{mQ= zQvtA+*%fx*V*T#yRXIPuh22lpsMd#^^zKN|*loU1F@J(S8JHMZW`F{MzY$~$t*~Z4 z|H|_5OuPEdKb=$el1H=&n3UlM!AwoW%^>8VUPH zf2-XKPdolotS zYuvP;fBJ=clUcu84tv!e9FXUJW?vvFkTcs`vAms`x*ew&1HdENFEmOFzMZP`I|aNf zM8#En@8*CdxQ~@#Vry2Cf8vj0DYJ`q0CuaMrmabFm4vRHp7@X&cULy+_YTE5i;m}U zjA6dkGo$yLbHTehcFzsq;vGO2G1UQxaEI2(6&?Mfg}-`4!?FucH>daz~h#`h(uaQVvdk3c!; z6tOZ-_zew={w~bTxZ?p%DCd@4Lugftier@5Enp^lZeh{I1Bx0(h;lDL-stS8hl@@Lfy! zUWE3BwsRYxZr;#b&YVf$BLZBpFU~S49mnl7P1sGCXWCG{Bc`dF*$cUyTpAJu9QudUg>?`(m)qxd4YaGMokBN9zie#)h zFBqU5#`e3`R(#P2I>rN?8QqnCYQ8@Le}fI_d2Pipv-6w`HZb{GX5WzhT0Hsry)nF1 z!RI-!klY!RI^zlMV{*@6W9q%_%tPlv%&`8Xwt0_cH9FbeP81DWYVQ~p+d6Iwz@3nP zD(;U{$Ls-dTSUJov-5wuTnVZmXRvl(57si1vA{dWOcGe`WSFNHJ<-MrcW>xNI$)``t{tog0TQFoA(kgTWRm1>R4C)W;;Fve}UOI zrRQ}O2i1YA8Gf`H~S0%U7B=VNfoIKg zE<;a7Y24Ix#9A}yasO?@WI8D)m^a#}H6}epdUTkjC z;E-`+Szla8K%ys8#hjA)DLG~$xdYsV;L8fhIb`7jgbb1UaX40JH(1AuqVa&|C!J0- zKr$IJmkG4rFu-qL87k)l@u<-OPdQ08w*eG@sQjkX=Hf% zlWi3;2zQ&vXl!#-r&*c8{i`aOJ&LhX19H*0Psv--#!&zOAOJ~3K~ypt`2T~K#dqyp zDLq28pwr)XU%{I6Y__wHifU&`Mzr%6yu&d7c%%+ZLyr$lz-ePx2i`+$4Kr7d9FBE zhkR3Fx`ur~_!TOph7iP#@svW^JBd&=ifI zH1k}h^aig3Px)lo55Iiyk4kjgXjJ|V1{c%;A-1V#jkVlU@ zxn<}G$98nU{%NA+)hs?WzdwhuDazwB<@T&L+%?aDe6x4%=U~?{qd5~Lqjd&Shj|_h zG%rPk`M}Drz0frZ|F(56af5)$=jHHMSyOX1)s#(*%bn>1yDwC@r41i{4m?9N)Lh+5 z&8I!j@os^ZATLjCoeAzX#}e_~b}6@?>SzNbU94ZpQ>;R-npmko?;vN6NX}rXmgXPJ zc8rxdR=9gXb4>N>G-+1MlJKtg(x*IJ7pr<)5$`xrnFK}S ziUA#sW1h$8#?7GYr}W*k2{vh#ql=O`#p1XXGR(z=^RXA9Zj|nrouRIfTrj zfOCW2z|?E7Uyj~3myQ>uRALKPe!=bF0!dyLf2npaJ6u^qk?!{$=|RDZh*Lp>R%5_l$5)G5;XaWP#e5c zj5ueo^Gm3Gx4LV{1#hHceURo~gVzs^21mz7E>(UkI?C>`cqY{nE;?$|KVui}p5rSp z{FeIL_x5z!u01E=c|tC?S{;?<2iOCrjAFYTJq}uU?RAc2*Z=f#_^Ui8tkmAz z;lO7e=N|Dp&Qq=P#xgsZc;P}hPa!`ZZ@D>2Pqqroe!(G-26z|r=z(tBetayS;7Qyi zR<8=!^OY@vd$D|_8svCCGAUDKJrwl&@o|dx#6v@P2mJ-3sBWG3$5s=sQBU2=_y6u(imhYvjvdjbOc3zsnQjFNb>zKC}F@y~w~r z;$OO7=JsPSw(|t7eE$r7w_sB{LwL5(t&%6s?6j~Wz3HIswVJ(1_AU>xZ3O>J11Du4 z$KDV>rJw`8&YCO^9Gq{xh=q$2d2UIUEqZc}`Y(6Q!R{b;OrDeD-6*&{y&oO5S^{gU z%x!FBY3%^&NzU&_?jUUI@&TQVz$f%9Z+*SV;HeiydZ&3{!+e-~G6yuz+Uq*#cxLKx zLL@j2q!tg|k1S5OZ|XN}6Lwlyq|c2%-mQYdDg)((yQ0)tv<7*a0fDq#Xpq{p@4x_= z@l6jD+;9l^N&B{C$JT(nj&9#|NHOu83#pC z(+-}Q!uqy_6I}1@xhHT8=VLdIug&GFlLn&dM0<5h@hw2OIEjO3T=*ySoRR3zo&)fx z$mg^ue1YAMklxv|N|}kxIZ}KJq|6aljpO4$@yB!y_0Aj@^%UuMdu01G9W9u_E^i#S zm6?2O>|V$@9(ns_&pRb)M|dcaOV5N%TffJi)OILW2D|xf+Rux>L2JS1$mze*MmV+? z48zufTZ_d&8U@%jKO#01cu6fLYohJeK+-Q-;zb!~dN_yZ7rsS21ob$@E{U~vjoXPt z5D&McUdJ2fXqR3=jSy2t8tW{_Fj48&MR9Ji3(tcuZ_h7KnLE!TU&ULhVd>k4Ur{AULw>TX9iSKwiy~uSt&AaQe zWE|)Cz7Y}QC;cY>7flVF!=2IYRE&AiN?UF1aSg2;A~+W^LIU4~KTN*?e_Wjg+#)c$ zQ<6+<4G~~%l9(uba7)JeTjfQY)D}6R@}F>stlbXBStK=Tnd6Vq39`r#T|Lb8`Ye@S09{eNZq;8+kc?mjObM+j(+FmnUKJ#IeuO zn9Dab>S>7tZKnkoIlisUv!DYJC-_+ac({?cFaAKUD}Duk06>Kw(JiX{HnKaP*_?fF z`b=sLY7kk!ki!lH>#bmpvnigZqnai)x6Rd;j%y}-yTor*&@<&Otp?4z85S$8ym)>a z2Vv@F|HdhGws1x}KTUxtbqRyq)gW8d?Z<4F?h>Cf{>l~+CP%1cju7uHZ0PvrTaXp` zid?q?;vr(D%GIOnaJ$Ox;-on`GLOIOVXfK_G#3u;GVtGNHNYK);omDx6&kWs6}<|^ z>uYwmBwiRVLfc6l@REiEwIEi2&QSRt{IwJOv4$s2L&`(Wf$ZM)Fh?`FO~=>07W$*b z%+0l?Wn1vCwcwh!$heNOvEAlyj>*t zgy+R;*^V6RX%>haaq}JcYqtbrP)9O%0zHlF24aQ}(ZUUx9m5f}o>(!bPABhx%C81B zSbSx2)|SJsGv*iZ(51~`yU-gwpz#S(ZdW1mTbzU~X|8GXbhT5N&P~Z|*%KV6Jid{) z5LHMex zN@#C*xFf}fNsWFR|28g#J99gE+zZs+UZ-fhY^A2&;N$SO$l4D6_rTwx9k59IEwXS) zEmyZHDK-J|4$1C!bgZs<`TZBk<+Q^^F7z6rd};qb&cY8}c1dgoJ-@nFEEXiGIDHki z*gOFWPiPGKox5bhkdGJsnTe{4lQ|6rDq)>57~}_w7eXz{6ht(Bv?x=xu?Kd~_o3ZH z&uD6M@u)C@PpNF)UOn}IPxZUGn{ugBr6H-Wbp}MtH%|vR{JaIy6sGVc7o_X>D|UV- zk$&yqoA;a-;loC&qtZL@7rJDuo|IJvTq;G9E<1QT(IO>R@LlQC9lWG#m%+OoVZUH= zRp#iER@S^Q*Kw9MY_G>W>*XHJZ;}(dn|4E=kT{KxgZfzW<6ZHxi^lfe6#g!7t+rUR z6T1VwXNy4~fh<>-S-$bO#kB(d8{iX9jf4I1k%W$MbF-yklF1`Z9`nrYJonqROo}*0 ztN+^1hjh(ZHg>guJU198!-CB7@1js{ixl>WALpL%c~bmU+8gS^cQ21gA0S`G2(db_ zqPcEd2NO$*$Q50KCwHYu2dRj$I?$-nelUv*dsyi-jgV1emHK;3XSck0DZc@?M?&cc z<0^d52AO!qh`2J?IIv0~!iFWkYI&?if#r8Klt!O0Ikgd(;zLd{7SpcHlcw_`$t-s~ zH>geTrLHVR{2on&nsxyex|r55`rY7JJQ93&rmuYWF&B@l5Q~jykI*g%nT2KHf*kN; zo22?$i$&5^Q~v;mK|H|F3z?&VGB$!aC-PjW zOAF7vec+bSO2Jj*NHHIT%#mwFj$A;^ag3C7t|S`^p6f2ceZW&V>lE#jDZuYK!Q-{$ zrqTy9Jq-idPTJidBg)Eev3O?u+;6G0U(=!y?jhUC_G*iJqrr1tm}`AJ9^0gYRD?Wv zrJD^8ry9V3uH85UqXifi;;^)z>8Rj*@lF`wcKRpe&fju_EMv51i!A?1)j_w@zDG*+ zMmSvaR?#H{yvwh*I6HxG0hpW)%)u378#&NiRneuKgPKFsEPqXi6)Xyg6;L2(7 zXox@IvL5c)eGid6S$gvu72salK%zUcaqXI2w!5xv8d-+BKwPwG1D{O50lN?!YRc^f zxo#M$%4lK0?MKS)PHd=bZ>ebajLlTv!p>~C>0Ha)P{27K$Zk(x>zdC!ZVyH{6WeP$c8 zw*R%^a9RBRROzGN=01XdK)fy8NIGBfSf_^iP4vA?+DXHqz!N0^8)LuSn`Y#BXpv{8HQ?G16Zs>RwIWFHM;1g-r1#V0wS`i~1|GVO^JZQ9 znY1kb8rRzKO1~S6jV5PNcP#D!(wD;@vHP;@xISg(f67|h|7p{INBal6(j?o`MZ#n* z^TzVjR^uvkr7EEfco?JnO>!neqkx@b85)e@!_fD5ybOpB0 zS%-F%?(ok&>v0#}X-W|qhR976AyfC#?9!t9#yU%`c0JLK+(&kA+mQ+~YriCZHl(k( z9hdFp5>m>i9xU_g;=Y-?h9^y5Y#^8GwElp{#4hO3Yw8|HPqQ!>52{83UgSu_Sz%67 zyssU^OQIl;3jIP(rXB6T-6(X%3d>B ze{-fiR|FFE*YfmIDf3Vv`sR7@WARg(zOp8%EdEgOvv`^(O<#WbOS=o(it%D@{!H>L zn2Fk8)|U|(-6Om-!Zgluw~pHVgP|1gYyNiaQu5tI1aNxss!ZPaubtC6ELs;RaE5ly zVq)jVWS+ny@@CKg$0q{Cv+@N;mIez6X5Dn}8m{>gOwY*mi~8y3l3JTe%O zC?R3$B-Fms(uHu&JPy!joDZ}Hv<%weYjjVtsM&3`j`S(NBliqn=_pSc`=En6HEdi( z#=FiuZIin*;>Qio{xam-vRD>|{4{XnN8=~iR^fWeKc!-1`In47{Ptx#Vc)Rs3DfI` zY~SpvcQY6Bl zjG>HQ96#&QSNJeX+A3AS*NV1o2#3`xV0h+-ZnmE?ecLrmclf(_WPF~Z-p9+prynAD zKo7YL_%WgZmH3f#H?7k$#O)SuZg?-i-KiFWsbQDdT@??6%xK+kb;Pt!D(81|c6Uar zL}U6UsPy8Gjs}!RtlQ}U&z21AWwWIC{Bv{dLZhhevZX7X0u{w_{*m}8OJC7Mu@+$s z(Mk$cg)58H3#vc(XQyxT!SM(WPVdhz8~SbeUC!@qa4oP-M}u_D;P)+hW_{7p>464} z_v2I(9EZoR>6s-8I9I=Wp*KmXJ=5Q9{$tRqLx#T43g-MpLHuV0ZKP%cU4uqQ9w$o1 zt{zQ{+%6sr+=LMWHx8$HYiKHCcG2h@*67b#uw!7Y#$3Ki{3PiC?iu~knj=S&l#(t~ zt>v-_8072AxB_Xd)1MDWFXxZHmu-)Br_-pn)n+VYxL5I&;N3mV?#H|tw2ln!$7Ogw zlF)XEAV9Pi;9f*KTA~8zEHegYbCuzqzZU$j>^Kqa*4yf9p#^Nlq5NP^66|4!7jkN4 z+Ro{0zGKjUtOu*)jBG#d+hvUJ<{M85O^% z(~T6H#>-0x6Fx&bz{l}4p8YsH@PAZ%%mPq%OjtJq)4^K!+r!o&{wUCU7Pgb`#(spR zLPK)s{2F6_qyvDkf~Q#cBkUpI5pHzcO&a(|hF5OWASiJ>MHq{7aLuz$^Wz)>cTYG} z1nqX_jKuzO`FilvG_8{(rqaiq`kAx?OU4z{q&}Pm4&6sHfNBY$4sH=(mmfJ_vOc#s z3d#N>(!297F#+s`H`F9^geZTB2ZyvvhP>yeYC24&6)lh5W3iX8J;Tl$qRBWWURj7% zOS+aaQRS*uSedsxqlcyCY}hPoX82DyUUtb^t+YiD%ok$eC5T2M98`+s6(HX+PoD-; z)9^Mj1T8G<2jgCN7AJ@i5b?9$N9Zk=hMzu_^((*+Rlz(tUMNGD6@Zps`wIrdBN7{{)VAXNAnWR~!E|)Apw5uI0J4nkh ze5OIg8XKIpI>$$fcj^8;YPF;TK0M!yVSVzxym;Y1Z2an?pma{utA>f~OBSyuYn{==YZva`8zx0J^S^Z#Yt}A^_ z)5q+rbZRNkKk35{UQoWwgJ0~yQ77yf)E8fZ$n++w=V>&p8XtE%ec^1+<6Y5MSC}(}*Nn&^;Apj|tgSNs=6ci6A|K?NUCu4L%L$Ivy zWi#t9xptB~XxeSHmzhWt}mliq{5&&fFxQX?>G4(_$S>do`ULB*5|gN&q@1y z9FjKDG;B_v^+f^d`FYpA)S#xM)cmDiebG7nrEpX$9YQk`4jcHPY_b?Mib0Cdm9r}< zIE~9XD(y$jJa8l0GZN+^(4%y3MS^e24y6^Rsob7M2ph9|#IxrH0@4bx-&r!s(Ly6+ zc{pCq!n}#Z1SA&>1*{_&^?jB$D4@B-1^3P6ca}fG=85n_Em5DZilAIsF10@ORc|%> zWFgWCQI)x)WzuvkwL#%ew1{PGU(zp^sz=tP=WQ7~T$;Gur_UU*_vxM~TQfNX)ZVrm zmanzo5zBC(5qqLL4C&Wi`1onzcP96!7+S?pU+;cQ#fU??f!+KpM+W!hI(|=%R}xSY z^h|5FwQI5PsCZg1QW@PJDVBu}2h_H)e-7S*2ZrZl-MY(@SG{(U*- zJ7mk{_m{t@lgHsl$(qxvMM|ETOxhq;VSQPoM(a;z@qVVOnpy!7hrC-zy)nJ+Ry=

AiOVS9EoaJvQts2SRH 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 z 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 RA&>%wgRS$~3hQfe{{bi1G6( + + + + + diff --git a/src/components/page-watch-common/invite/portrait-invite-rank/portrait-invite-rank-top3-item.vue b/src/components/page-watch-common/invite/portrait-invite-rank/portrait-invite-rank-top3-item.vue new file mode 100644 index 0000000..a50f263 --- /dev/null +++ b/src/components/page-watch-common/invite/portrait-invite-rank/portrait-invite-rank-top3-item.vue @@ -0,0 +1,166 @@ + + + + + + diff --git a/src/components/page-watch-common/invite/portrait-invite-rank/portrait-invite-rank.vue b/src/components/page-watch-common/invite/portrait-invite-rank/portrait-invite-rank.vue new file mode 100644 index 0000000..13e5f78 --- /dev/null +++ b/src/components/page-watch-common/invite/portrait-invite-rank/portrait-invite-rank.vue @@ -0,0 +1,350 @@ + + + + + + diff --git a/src/components/page-watch-common/live-start-tips/mobile-live-start-tips.vue b/src/components/page-watch-common/live-start-tips/mobile-live-start-tips.vue new file mode 100644 index 0000000..f858ac6 --- /dev/null +++ b/src/components/page-watch-common/live-start-tips/mobile-live-start-tips.vue @@ -0,0 +1,32 @@ + + + + + + diff --git a/src/components/page-watch-common/live-start-tips/pc-live-start-tips.vue b/src/components/page-watch-common/live-start-tips/pc-live-start-tips.vue new file mode 100644 index 0000000..7304e88 --- /dev/null +++ b/src/components/page-watch-common/live-start-tips/pc-live-start-tips.vue @@ -0,0 +1,87 @@ + + + + + + diff --git a/src/components/page-watch-common/live-start-tips/use-live-start-tips.ts b/src/components/page-watch-common/live-start-tips/use-live-start-tips.ts new file mode 100644 index 0000000..a879334 --- /dev/null +++ b/src/components/page-watch-common/live-start-tips/use-live-start-tips.ts @@ -0,0 +1,47 @@ +import { ref, unref, watch } from 'vue'; +import { LiveStatus } from '@polyv/live-watch-sdk'; +import { getWatchCore } from '@/core/watch-sdk'; +import { useChannelStore } from '@/store/use-channel-store'; + +/** + * 直播开始提示 hook + */ +export const useLiveStartTips = () => { + const watchCore = getWatchCore(); + const channelStore = useChannelStore(); + + /** 提示是否显示 */ + const tipsVisible = ref(false); + + /** 打开提示 */ + function openTips() { + tipsVisible.value = true; + } + + /** 关闭提示 */ + function closeTips() { + tipsVisible.value = false; + watchCore.player.play(); + } + + watch( + () => unref(channelStore.liveStatus), + (newStatus, oldStatus) => { + if (!oldStatus) return; + + if (newStatus === LiveStatus.Live) { + openTips(); + } else { + closeTips(); + } + }, + { + immediate: true, + }, + ); + + return { + tipsVisible, + closeTips, + }; +}; diff --git a/src/components/page-watch-common/member-list/imgs/loading.png b/src/components/page-watch-common/member-list/imgs/loading.png new file mode 100644 index 0000000000000000000000000000000000000000..8a2d5b705698d63ce54f18b469b30eab095949b8 GIT binary patch literal 1779 zcmVtB_*hk4cwP8d`PdXK zcGEPrSfRn7SqZw367R!oQUuY)QV}1uDnxRPXMQ>LPMJ<-?w!XuXJ(R<-Q~`mbI*7F z`=9@uJ9mO${( zfW7d#z?DO16<9a8Qs}%OJLoE-TN!lTkX2(FXipAN71c_h^BT=6qgpz2-jP*dONHJj z$SSZCL2oqJZY#_r`8yQ!W&`a89;XKH2yK9)k#~ytKxl&;4Y^xh_k}jd@sK-V8|Y-F zzOVL6AqF}v=&YoTYPA}wBJw&_tJO?=v*L~Fb)CrqbX;TyJqy?!q0>fA3Y@j*c4J=^ z(P==-#tlljX+(Kuprat~*s)^^W9%RzJ|!@T=snK);l;(pzrxOEy0J3>9R*oHmP(~V zh*%|}9`P6v*NCXvXf)mk3oVY*iJdBRRA2|OTrQs@qHS(eL_A-w*SAN3);VGNLhH!S zago~*&HX?djRuPYtt+}6>?@O@YUm`$s-SgXYlTjVtP)x^wl-)P$f}`LVrzkxg{%Ww z6}EC{naH}JRbb}^`s~@WmnZD~`}cqESKb{vcI*!E{P6Iwl+7gBb+%GycQlWVj`p-# zt(}%-l^A1x1Hk9CTJ2i^u)CFI4zf6IVq)SDW9()3f`xPb%FN8nl?6*kY^zeK+ywv+ zaL%u_ZM#t@6wWLxEUc-hv6Vr4Q%12^d<+raM#LKcK-9uNa?al!92|USZf?%EHWnRr zBa6r5FMb+0w^i6)0T6t zsi`Re`~)ICLPX+I<@;w@)}6IlZ8;av-n20?GE(U4>pKSkw{*ZJB3c$7-{Z%Re-br% zI~_kcIr(rqZ4Gr<`To4Ry1IR7X{jYUeJF`&zml#}sXR_ZZxYdsV$&@MhKNqLTCFEf zojUcW4D3C7_FUK7+k4cqtnm)#BSicS5udNsY9DxylaZ&TLkHE(qUzwBKS)Fe5b+_W zYVhfNeQj-R_sNqdf06;cckkX?dwP0K13=mDeC=)4PZ9A5W9&0`)gd#gwLv=-#J+v| zu4jzhZ&}u>M0B^e^C}{`P$;~Qh`YUQA>uc-ZNJ1h|Kh}n6MuB7RFX!uR%mxeM@B|& z?(6G&5fL91lM@kHi1-5lJU2Z(Juf4gopVf0O^pG-TSRm_BHHcA_oLO-)z_AmmVOD- zR&Jr4&XvpMG7*gez%`unFX!jyzrJ+oQrAUH7#!!Afq?;QY;5cv#@KxT@Gl}R)a&(n zlyl@B+DR!SQfW!kTYNXx+%pV8p@BbwnHJ zu%AQMaVB*Hqe;!t?Fl3D)t|bfI!@Zi)MU7kp_Ali;gWhpiv^2q+xH@(*b7m`$cv8%h{c_ZJSHN1W?lQ&N~gn-DvWj z$6VytWtUGDw9`zfRFeK17QZee-P`b~w2pinv{<>EtKCn^UWP}3P=THXuDj2H_v_G|r&TR- z(gt={8%`fHd6%#x(VYe4P|#V4>ZoZaOUIi#IcgdW1D!Q!lRn~)NYFi`&5gR_o349h z5c0Y@I;hRG>uZS?N>0@YIIz5n@=i9}0E7Vz@{6^Twpk)S3GBM%c$5eZbL>Wma+%1X zb95NsEbW;@eZT9XPr<)Ym6|#>0=Dc(mNFT3ik!TrklaD%anYj+Sy_(GV+v7;tOeRZ z&uS`B4XivzXT8?e1)LgmnrTHhuDh?w%DcF=tgIB1CaPcGGY1`afU^EN1FdO<{sUv- VNUUlmd%pkx002ovPDHLkV1kHuU2^~c literal 0 HcmV?d00001 diff --git a/src/components/page-watch-common/member-list/member-list-item.vue b/src/components/page-watch-common/member-list/member-list-item.vue new file mode 100644 index 0000000..6831650 --- /dev/null +++ b/src/components/page-watch-common/member-list/member-list-item.vue @@ -0,0 +1,90 @@ + + + + + + + diff --git a/src/components/page-watch-common/member-list/member-list.vue b/src/components/page-watch-common/member-list/member-list.vue new file mode 100644 index 0000000..8b29995 --- /dev/null +++ b/src/components/page-watch-common/member-list/member-list.vue @@ -0,0 +1,145 @@ + + + + + + diff --git a/src/components/page-watch-common/member-list/use-member-list.ts b/src/components/page-watch-common/member-list/use-member-list.ts new file mode 100644 index 0000000..97e5f76 --- /dev/null +++ b/src/components/page-watch-common/member-list/use-member-list.ts @@ -0,0 +1,262 @@ +import { ref, reactive, unref } from 'vue'; +import { + ChatUserTypes, + ChatMessageUser, + ChatEventsRelations, + ChatEvents, + UserEventsRelations, + UserEvents, +} from '@polyv/live-watch-sdk'; +import { useViewerStore } from '@/store/use-viewer-store'; +import { getWatchCore } from '@/core/watch-sdk'; + +/** 新增的成员组类型 */ +export enum MemberAdditionalGroupTypes { + SELF = 'self', + OTHER = 'other', +} +/** 成员组类型 */ +type MemberGroupType = ChatUserTypes | MemberAdditionalGroupTypes; + +/** 成员信息 */ +export interface MemberInfo extends ChatMessageUser { + groupType: MemberGroupType; +} + +/** 成员组 */ +type MemberGroup = { [groupType in MemberGroupType]: MemberInfo[] }; + +export const useMemberListHook = () => { + const watchCore = getWatchCore(); + + const viewerStore = useViewerStore(); + + /** 页码 */ + const pageNumber = ref(1); + + /** 是否没有更多数据 */ + const isNoMore = ref(false); + + /** 成员组类型(按先后顺序) */ + const memberGroupTypes = ref([ + MemberAdditionalGroupTypes.SELF, + ChatUserTypes.Host, + ChatUserTypes.Manager, + ChatUserTypes.Teacher, + ChatUserTypes.Guest, + ChatUserTypes.Assistant, + ChatUserTypes.Attendee, + ChatUserTypes.Student, + ChatUserTypes.Slice, + MemberAdditionalGroupTypes.OTHER, + ]); + + /** 成员组数据 */ + const memberGroupMap = reactive( + unref(memberGroupTypes).reduce((accu, cur) => { + accu[cur] = []; + return accu; + }, {} as MemberGroup), + ); + + /** 按id记录观众信息,方便移除分类列表中的用户(因为收到的LOGOUT消息只有userId和uid,此处记录整个user信息) */ + const memberIdMap = reactive<{ [userId: string]: MemberInfo }>({}); + + /** 新登录的成员队列 */ + let loginMemberQueue: MemberInfo[] = []; + /** 登出的成员队列 */ + let logoutMemberQueue: MemberInfo[] = []; + /** 队列处理定时器 */ + const memberQueueTimer = ref(undefined); + + /** 获取下一页用户列表 */ + async function getNextUserList() { + try { + /** 首次加载200条 */ + const FIRST_PAGE_SIZE = 200; + const PAGE_SIZE = 100; + const isFirstFetch = pageNumber.value === 1; + const pageSize = isFirstFetch ? FIRST_PAGE_SIZE : PAGE_SIZE; + + const data = await watchCore.chat.getUserList({ + pageNumber: unref(pageNumber), + pageSize, + }); + const userList = data.userlist || []; + + addMembers(userList); + pageNumber.value += isFirstFetch ? 2 : 1; + isNoMore.value = userList.length < PAGE_SIZE; + } catch (error) { + console.error(error); + throw error; + } + } + + /** 将用户转换为成员 */ + function convertUser2Member(user: ChatMessageUser): MemberInfo { + const isExistType = unref(memberGroupTypes).includes(user.userType); + const isSelf = user.userId === viewerStore.viewerId; + + let groupType: MemberGroupType = MemberAdditionalGroupTypes.OTHER; + if (isExistType) { + groupType = user.userType; + } + if (isSelf) { + groupType = MemberAdditionalGroupTypes.SELF; + } + + return { + ...user, + groupType, + }; + } + + /** 将一组成员插入到在线列表进行显示 */ + function addMembers(userList: ChatMessageUser[]) { + userList.forEach(user => { + const member = convertUser2Member(user); + + if (!memberIdMap[member.userId]) { + memberGroupMap[member.groupType].push(member); + memberIdMap[member.userId] = member; + } + }); + } + + /** 移除一组成员 */ + function removeMembers(memberList: MemberInfo[]) { + memberList + .filter(member => memberIdMap[member.userId]) + .forEach(member => { + const targetMemberGroup = memberGroupMap[member.groupType]; + + const targetUserId = member.userId; + const idx = targetMemberGroup.findIndex(item => item.userId === targetUserId); + + delete memberIdMap[targetUserId]; + if (idx > -1) { + // 已进入到显示列表 + targetMemberGroup.splice(idx, 1); + } else { + // 还在待显示队列 + const queueIndex = loginMemberQueue.findIndex(item => item.userId === targetUserId); + queueIndex > -1 && loginMemberQueue.splice(queueIndex, 1); + } + }); + } + + /** + * 成员队列处理函数 + * 通过定时器 memberQueueTimer 来处理登录和登出用户队列 + * */ + function memberQueueHandler() { + const POP_COUNT = 20; + + let popMembers: MemberInfo[] = []; + + // 将队列中一部分新登录用户加入到显示的在线列表(最多同时加入20个) + if (loginMemberQueue.length) { + if (loginMemberQueue.length > POP_COUNT) { + popMembers = loginMemberQueue.splice(0, POP_COUNT); + } else { + popMembers = loginMemberQueue.splice(0, loginMemberQueue.length); + } + addMembers(popMembers); + } + + // 将已离开的用户队列数据,移除展示 + if (logoutMemberQueue.length) { + const leftUsers = logoutMemberQueue.splice(0, logoutMemberQueue.length); + removeMembers(leftUsers); + } + + // 队列无数据,清除定时器 + if (!loginMemberQueue.length && !logoutMemberQueue.length) { + clearMemberQueueTimer(); + } + } + + function clearMemberQueueTimer() { + clearInterval(memberQueueTimer.value); + memberQueueTimer.value = undefined; + } + + function initMemberQueueTimer() { + memberQueueTimer.value = setInterval(memberQueueHandler, 200); + } + + /** 处理用户登录 */ + function onUserLogin(event: ChatEventsRelations[ChatEvents.ChatUserLogin]) { + const user = event.userLoginMsg.user; + if (!user) return; + + const member = convertUser2Member(user); + loginMemberQueue.push(member); + + // 新登入观众,存在于待移除的logout观众队列中,移除该队列对应数据。 + if (logoutMemberQueue.length) { + const index = logoutMemberQueue.findIndex(item => item.userId === member.userId); + logoutMemberQueue.splice(index, 1); + } + if (!memberQueueTimer.value) { + initMemberQueueTimer(); + } + } + + /** 处理用户登出 */ + function onUserLogout(event: ChatEventsRelations[ChatEvents.ChatUserLogout]) { + const userId = event.userLogoutMsg.userId; + const member = memberIdMap[userId]; + if (!member) return; + + logoutMemberQueue.push(member); + + // 如果登出的观众存在于待显示的观众队列中,则先移除该队列对应数据。 + if (loginMemberQueue.length) { + const index = loginMemberQueue.findIndex(item => item.userId === member.userId); + loginMemberQueue.splice(index, 1); + } + if (!memberQueueTimer.value) { + initMemberQueueTimer(); + } + } + + /** 处理用户修改名称 */ + function onSetNick({ userId, nickname }: UserEventsRelations[UserEvents.UserSetNick]) { + let targetMember = memberIdMap[userId]; + + if (targetMember) { + targetMember.nick = nickname; + } else { + // 还在待显示队列中 + const targetQueueUserIndex = loginMemberQueue.findIndex(item => item.userId === userId); + if (targetQueueUserIndex > -1) { + targetMember = { + ...loginMemberQueue[targetQueueUserIndex], + nick: nickname, + }; + } + } + } + + /** 重置成员队列 */ + function resetMemberQueue() { + loginMemberQueue = []; + logoutMemberQueue = []; + clearMemberQueueTimer(); + } + + return { + isNoMore, + memberGroupTypes, + memberGroupMap, + + onUserLogin, + onUserLogout, + onSetNick, + initMemberQueueTimer, + getNextUserList, + resetMemberQueue, + }; +}; diff --git a/src/components/page-watch-common/micro-activity/hooks/use-micro-activity.ts b/src/components/page-watch-common/micro-activity/hooks/use-micro-activity.ts new file mode 100644 index 0000000..09e93d3 --- /dev/null +++ b/src/components/page-watch-common/micro-activity/hooks/use-micro-activity.ts @@ -0,0 +1,127 @@ +import { onMounted, onBeforeUnmount, ref, unref } from 'vue'; +import { + HxcGeneralIframeEventData, + HxcIframeEventData, + HxcRequestDevicePermissionIframeEventData, + LoggerName, + MicroActivityIframeEventType, +} from '@polyv/live-watch-sdk'; + +import { storeDefinitionToRefs } from '@/plugins/pinia/util'; +import { useViewerStore } from '@/store/use-viewer-store'; +import { MicroActivityDeviceMotion } from './window-device-motion'; +import { toast } from '@/hooks/components/use-toast'; +import { getWatchCore } from '@/core/watch-sdk'; + +type IframeMessageHandleCb = (data: T) => void; + +interface MicroActivityHookOption { + /** 全屏消息事件钩子 */ + fullScreenMessageHandler?: IframeMessageHandleCb; + /** 返回首页事件钩子 */ + backHomeMessageHandler?: IframeMessageHandleCb; + /** 不支持 PC 端访问事件钩子 */ + onlyMobileMessageHandler?: IframeMessageHandleCb; + /** 强制全屏事件钩子 */ + forceFullScreenMessageHandler?: IframeMessageHandleCb; +} + +export const useMicroActivityHook = (hookOptions: MicroActivityHookOption) => { + const { + fullScreenMessageHandler = () => {}, + backHomeMessageHandler = () => {}, + onlyMobileMessageHandler = () => {}, + forceFullScreenMessageHandler = () => {}, + } = hookOptions; + + const { nickname } = storeDefinitionToRefs(useViewerStore); + const watchCore = getWatchCore(); + + /** iframe 主体 */ + const microActivityIframeRef = ref(null); + + /** iframe 链接 */ + const iframeUrl = ref(''); + + /** 缓存 nickname */ + let cacheNickName = ''; + + /** 请求设备权限钩子 */ + function requestDevicePermissionHandler( + iframeEventData: HxcRequestDevicePermissionIframeEventData, + ) { + if (!MicroActivityDeviceMotion.$iframe) { + const $iframe = unref(microActivityIframeRef); + MicroActivityDeviceMotion.setIframe($iframe); + } + + const enable = iframeEventData.data.enable === true; + if (enable) { + MicroActivityDeviceMotion.bindDeviceMotionEvent(); + } else { + MicroActivityDeviceMotion.unbindDeviceMotionEvent(); + } + } + + /** + * iframe 消息监听钩子 + */ + function handleIframeMessage(event: MessageEvent) { + if (!/game.polyv/.test(event.origin)) return; + + const watchCore = getWatchCore(); + watchCore.logger.info(LoggerName.MicroActivity, 'iframe-message', JSON.stringify(event.data)); + + const eventData: HxcIframeEventData = event.data; + const eventType = eventData.type; + + switch (eventType) { + case MicroActivityIframeEventType.HXC_FULL_SCREEN: + fullScreenMessageHandler(eventData); + break; + case MicroActivityIframeEventType.HXC_BACK_HOME: + backHomeMessageHandler(eventData); + break; + case MicroActivityIframeEventType.HXC_ONLY_MOBILE: + onlyMobileMessageHandler(eventData); + break; + case MicroActivityIframeEventType.HXC_FORCE_FULL_SCREEN: + forceFullScreenMessageHandler(eventData); + break; + case MicroActivityIframeEventType.HXC_REQUEST_DEVICE_PERMISSION: + requestDevicePermissionHandler(eventData); + break; + default: + break; + } + } + + /** 更新 iframe 链接 */ + async function updateIframeUrl() { + try { + // 当昵称不同时,需要重新获取 iframe 链接 + if (cacheNickName !== nickname.value || !iframeUrl.value) { + const url = await watchCore.microActivity.getMicroActivityUrl(); + iframeUrl.value = url; + cacheNickName = nickname.value; + } + } catch (error) { + toast.error((error as Error).message); + } + } + + onMounted(() => { + window.addEventListener('message', handleIframeMessage, false); + }); + + onBeforeUnmount(() => { + window.removeEventListener('message', handleIframeMessage, false); + }); + + return { + microActivityIframeRef, + iframeUrl, + + updateIframeUrl, + }; +}; diff --git a/src/components/page-watch-common/micro-activity/hooks/window-device-motion.ts b/src/components/page-watch-common/micro-activity/hooks/window-device-motion.ts new file mode 100644 index 0000000..2a1165b --- /dev/null +++ b/src/components/page-watch-common/micro-activity/hooks/window-device-motion.ts @@ -0,0 +1,87 @@ +/* eslint-disable promise/prefer-await-to-then */ +import { + MicroActivityIframeEventType, + PlvDevicemotionSwitchEventMessage, +} from '@polyv/live-watch-sdk'; + +type DeviceMotionEventRequestPermission = () => Promise; + +declare global { + interface Window { + DeviceMotionEvent: { + requestPermission: DeviceMotionEventRequestPermission | undefined; + }; + } +} + +/** + * @class 微活动 iframe 所需设备陀螺仪事件/数据处理逻辑 + */ +export class MicroActivityDeviceMotion { + static $iframe: HTMLIFrameElement | null = null; + + static hasGranted = false; + + static setIframe($iframe: HTMLIFrameElement | null) { + MicroActivityDeviceMotion.$iframe = $iframe; + } + + static bindDeviceMotionEvent() { + if (typeof window.DeviceMotionEvent !== 'function') { + alert('您的手机不支持摇一摇功能~'); + return; + } + + if (typeof window.DeviceMotionEvent.requestPermission === 'function') { + // 该方法在 ios13 及以上才能使用 + window.DeviceMotionEvent.requestPermission() + .then(permissionState => { + if (permissionState === 'granted') { + this.setDeviceMotion(); + } else { + alert('很遗憾,您已拒绝启用摇一摇!'); + } + }) + .catch(error => { + alert(error); + }); + } else { + this.setDeviceMotion(); + } + } + + static setDeviceMotion() { + this.hasGranted = true; + window.addEventListener('devicemotion', this.handleDevicemotionMessage, false); + } + + static unbindDeviceMotionEvent() { + if (this.hasGranted) { + window.removeEventListener('devicemotion', this.handleDevicemotionMessage, false); + this.hasGranted = false; + } + } + + static handleDevicemotionMessage(e: DeviceMotionEvent) { + console.log(e); + const $iframe = MicroActivityDeviceMotion.$iframe; + $iframe && + $iframe.contentWindow && + $iframe.contentWindow.postMessage( + { + type: MicroActivityIframeEventType.PLV_DEVICEMOTION_SWITCH, + data: + e && e.accelerationIncludingGravity + ? { + accelerationIncludingGravity: { + x: e.accelerationIncludingGravity.x, + y: e.accelerationIncludingGravity.y, + z: e.accelerationIncludingGravity.z, + }, + } + : null, + } as PlvDevicemotionSwitchEventMessage, + '*', + ); + } +} diff --git a/src/components/page-watch-common/micro-activity/mobile-micro-activity/mobile-micro-activity.vue b/src/components/page-watch-common/micro-activity/mobile-micro-activity/mobile-micro-activity.vue new file mode 100644 index 0000000..83acb32 --- /dev/null +++ b/src/components/page-watch-common/micro-activity/mobile-micro-activity/mobile-micro-activity.vue @@ -0,0 +1,170 @@ + + + + + + diff --git a/src/components/page-watch-common/micro-activity/pc-micro-activity/imgs/icon_close.png b/src/components/page-watch-common/micro-activity/pc-micro-activity/imgs/icon_close.png new file mode 100644 index 0000000000000000000000000000000000000000..8c03227f8e3fb819459d37129e783d76deab34c9 GIT binary patch literal 1039 zcmeAS@N?(olHy`uVBq!ia0vp^njp-<3?%38`*4JTfiW_`C&U%V{f`&?{P`0o4ux-e*7570FprP;>C-yva-s`%8H5#AX!~qT~$@}=+UEx4UnAo_u_=JR{ zq~wf@%*?Fp?3|pO+`PPkg2JMr;@bL#hK9z*rl#iRmX_Am_6{KE?CR?7?&<02?d|QG zIC1%kmFLgjfAIKU#oA++fVMLxdAqw5nep*P0NKwxT^vI!PEVcsI-1c@pPB|JNIVkJ^$Zt{>-~;`P}w1pA%E2MD&+EUxKW< zZ%Ob@3egu{lk&}`TWo_))uWkS6JClw4GCr!-&gs-^!@2&>LDgK_7^{83wl@M;@z*DXJo6N=+yl;ZRxF>td&QV z-lqA+Ns4+T*Zny@vspCYQr51gV#SQ7P8sz1Dh&*`*|$C(VLm$L7SnRQG#r)~1BhS!-< z65YKc@XEyG8t;$q{r2o`;&(Ov v(~QpjUtAZP%{Z)HuD@M9adVt*%rCZ<%_l^4V*DI{(a+%N>gTe~DWM4f2%ROY literal 0 HcmV?d00001 diff --git a/src/components/page-watch-common/micro-activity/pc-micro-activity/pc-micro-activity.vue b/src/components/page-watch-common/micro-activity/pc-micro-activity/pc-micro-activity.vue new file mode 100644 index 0000000..bf7b0a7 --- /dev/null +++ b/src/components/page-watch-common/micro-activity/pc-micro-activity/pc-micro-activity.vue @@ -0,0 +1,238 @@ + + + + + + diff --git a/src/components/page-watch-common/micro-activity/portrait-micro-activity/portrait-micro-activity-pendant.vue b/src/components/page-watch-common/micro-activity/portrait-micro-activity/portrait-micro-activity-pendant.vue new file mode 100644 index 0000000..1e6371a --- /dev/null +++ b/src/components/page-watch-common/micro-activity/portrait-micro-activity/portrait-micro-activity-pendant.vue @@ -0,0 +1,40 @@ + + + + + + diff --git a/src/components/page-watch-common/micro-activity/portrait-micro-activity/portrait-micro-activity.vue b/src/components/page-watch-common/micro-activity/portrait-micro-activity/portrait-micro-activity.vue new file mode 100644 index 0000000..b574566 --- /dev/null +++ b/src/components/page-watch-common/micro-activity/portrait-micro-activity/portrait-micro-activity.vue @@ -0,0 +1,99 @@ + + + + + + diff --git a/src/components/page-watch-common/msg-input-wrap/auto-textarea/mobile-auto-textarea.vue b/src/components/page-watch-common/msg-input-wrap/auto-textarea/mobile-auto-textarea.vue new file mode 100644 index 0000000..3cb2ceb --- /dev/null +++ b/src/components/page-watch-common/msg-input-wrap/auto-textarea/mobile-auto-textarea.vue @@ -0,0 +1,113 @@ + + + + + + diff --git a/src/components/page-watch-common/msg-input-wrap/auto-textarea/pc-auto-textarea.vue b/src/components/page-watch-common/msg-input-wrap/auto-textarea/pc-auto-textarea.vue new file mode 100644 index 0000000..3303014 --- /dev/null +++ b/src/components/page-watch-common/msg-input-wrap/auto-textarea/pc-auto-textarea.vue @@ -0,0 +1,101 @@ + + + + + + diff --git a/src/components/page-watch-common/msg-input-wrap/auto-textarea/use-auto-textarea.ts b/src/components/page-watch-common/msg-input-wrap/auto-textarea/use-auto-textarea.ts new file mode 100644 index 0000000..e5a34b3 --- /dev/null +++ b/src/components/page-watch-common/msg-input-wrap/auto-textarea/use-auto-textarea.ts @@ -0,0 +1,245 @@ +import { isDesktopIPad } from '@/assets/utils/browser'; +import { emitFunc, updateModelEmit, VueEmit } from '@/assets/utils/vue-utils/emit-utils'; +import { PropUtils, useProps, VueProps } from '@/assets/utils/vue-utils/props-utils'; +import { PlvInputContent } from '@/plugins/polyv-ui/types'; +import { ref, computed, unref, nextTick, onMounted, onBeforeUnmount, watch } from 'vue'; + +export const autoTextareaProps = () => ({ + /** 绑定值 */ + value: PropUtils.string.def(''), + /** 空占位文本 */ + placeholder: PropUtils.string, + /** 最大长度 */ + maxlength: PropUtils.number.def(200), + /** 行高,默认:1.6 */ + lineHeight: PropUtils.number.def(1.6), + /** 字体大小,默认:14 */ + fontSize: PropUtils.number.def(14), + /** 是否禁用 */ + disabled: PropUtils.bool.def(false), + /** 是否文字溢出,.sync */ + isOverflow: PropUtils.bool.def(false), + /** 背景 */ + background: PropUtils.string, +}); + +export const autoTextareaEmits = () => ({ + ...updateModelEmit<'isOverflow', boolean>('isOverflow'), + /** 绑定值更改 */ + input: emitFunc(), + /** 失焦事件 */ + blur: emitFunc(), + /** 聚焦事件 */ + focus: emitFunc(), + /** 回车事件 */ + enter: emitFunc(), + /** 提交事件 */ + submit: emitFunc(), +}); + +export interface AutoTextareaInstance { + /** 失焦输入框 */ + blurTextarea(): void; + /** 聚焦输入框 */ + focusTextarea(): void; + /** 删除一个字符 */ + deleteWord(): void; + /** 清除输入框内容 */ + clearTextarea(): void; + /** 获取内容列表 */ + getContentList(): PlvInputContent[]; +} + +export const useAutoTextarea = (options: { + props: VueProps; + emit: VueEmit; +}) => { + const { props, emit } = options; + const { value, maxlength, lineHeight, fontSize, placeholder } = useProps(props); + + const textareaRef = ref(); + + /** 是否聚焦中 */ + const isFocus = ref(false); + + /** 当前高度 */ + const clientHeight = ref(0); + + const textareaPlaceholder = computed(() => { + if (unref(isFocus)) { + return ''; + } + + return unref(placeholder); + }); + + /** 输入框最大高度 */ + const textareaMaxHeight = computed(() => { + const fontSizeVal = unref(fontSize); + const lineHeightVal = unref(lineHeight); + // 三行文字+两行间距的高度 + return fontSizeVal + fontSizeVal * lineHeightVal * 2; + }); + + /** 输入框真实 value */ + const realValue = computed(() => { + let valueText = unref(value) || ''; + if (unref(maxlength)) { + valueText = valueText.slice(0, unref(maxlength)); + } + return valueText; + }); + + /** + * 重置高度 + */ + async function resetHeight() { + const textareaElem = unref(textareaRef); + if (!textareaElem) return; + + textareaElem.style.height = 'auto'; + await nextTick(); + if (textareaElem.scrollHeight) { + textareaElem.style.height = `${textareaElem.scrollHeight}px`; + } + clientHeight.value = textareaElem.clientHeight; + + if (textareaElem.scrollHeight > textareaElem.clientHeight) { + emit('update:isOverflow', true); + } else { + emit('update:isOverflow', false); + } + } + + watch( + () => unref(value), + () => resetHeight(), + ); + + function onBlur() { + isFocus.value = false; + emit('blur'); + } + + function onFocus() { + isFocus.value = true; + emit('focus'); + } + + function onInput() { + if (props.disabled) { + return; + } + const textareaElem = unref(textareaRef); + if (!textareaElem) return; + const newValue = textareaElem.value; + emit('input', newValue); + } + + function onEnter() { + emit('enter'); + } + + function onSubmit() { + emit('submit', props.value); + } + + /** + * 失焦输入框 + */ + function blurTextarea() { + unref(textareaRef)?.blur(); + } + + /** + * 聚焦输入框 + */ + function focusTextarea() { + unref(textareaRef)?.focus(); + } + + /** 清除输入框内容 */ + function clearTextarea() { + emit('input', ''); + } + + /** + * 删除一个字符 + */ + function deleteWord() { + const length = unref(props.value).length; + const newValue = props.value.substr(0, length - 1); + emit('input', newValue); + } + + /** + * 获取内容列表 + */ + function getContentList(): PlvInputContent[] { + const textareaElem = unref(textareaRef); + if (!textareaElem) return []; + + const newValue = textareaElem.value; + return [ + { + type: 'text', + content: newValue, + }, + ]; + } + + function onOrientationChange() { + blurTextarea(); + } + + onMounted(() => { + resetHeight(); + + if (isDesktopIPad) { + // 兼容ipad横竖屏切换,系统键盘遮挡观看页输入框的问题。 + // 这里监听屏幕方向改变的事件,用于系统横屏时使播放器满屏显示。 + window.addEventListener( + 'onorientationchange' in window ? 'orientationchange' : 'resize', + onOrientationChange, + false, + ); + } + }); + + onBeforeUnmount(() => { + if (isDesktopIPad) { + window.removeEventListener( + 'onorientationchange' in window ? 'orientationchange' : 'resize', + onOrientationChange, + false, + ); + } + }); + + const textareaInstance: AutoTextareaInstance = { + blurTextarea, + focusTextarea, + deleteWord, + clearTextarea, + getContentList, + }; + + return { + textareaPlaceholder, + textareaRef, + textareaMaxHeight, + realValue, + clientHeight, + onBlur, + onFocus, + onInput, + onEnter, + onSubmit, + blurTextarea, + focusTextarea, + deleteWord, + clearTextarea, + getContentList, + textareaInstance, + }; +}; diff --git a/src/components/page-watch-common/msg-input-wrap/mobile-msg-input-wrap/mobile-msg-input-wrap.vue b/src/components/page-watch-common/msg-input-wrap/mobile-msg-input-wrap/mobile-msg-input-wrap.vue new file mode 100644 index 0000000..8d65678 --- /dev/null +++ b/src/components/page-watch-common/msg-input-wrap/mobile-msg-input-wrap/mobile-msg-input-wrap.vue @@ -0,0 +1,285 @@ + + + + + + diff --git a/src/components/page-watch-common/msg-input-wrap/mobile-msg-input-wrap/var.scss b/src/components/page-watch-common/msg-input-wrap/mobile-msg-input-wrap/var.scss new file mode 100644 index 0000000..d7c3837 --- /dev/null +++ b/src/components/page-watch-common/msg-input-wrap/mobile-msg-input-wrap/var.scss @@ -0,0 +1 @@ +$--mobile-msg-input-wrap-base-height: 40px; diff --git a/src/components/page-watch-common/msg-input-wrap/pc-msg-input-wrap/pc-msg-input-wrap.vue b/src/components/page-watch-common/msg-input-wrap/pc-msg-input-wrap/pc-msg-input-wrap.vue new file mode 100644 index 0000000..6ae16ae --- /dev/null +++ b/src/components/page-watch-common/msg-input-wrap/pc-msg-input-wrap/pc-msg-input-wrap.vue @@ -0,0 +1,360 @@ + + + + + + + diff --git a/src/components/page-watch-common/msg-input-wrap/pc-msg-input-wrap/pc-set-nick-placeholder.vue b/src/components/page-watch-common/msg-input-wrap/pc-msg-input-wrap/pc-set-nick-placeholder.vue new file mode 100644 index 0000000..a80eb9c --- /dev/null +++ b/src/components/page-watch-common/msg-input-wrap/pc-msg-input-wrap/pc-set-nick-placeholder.vue @@ -0,0 +1,47 @@ + + + + + + diff --git a/src/components/page-watch-common/msg-input-wrap/portrait-msg-input-wrap/portrait-msg-input-wrap.vue b/src/components/page-watch-common/msg-input-wrap/portrait-msg-input-wrap/portrait-msg-input-wrap.vue new file mode 100644 index 0000000..7355103 --- /dev/null +++ b/src/components/page-watch-common/msg-input-wrap/portrait-msg-input-wrap/portrait-msg-input-wrap.vue @@ -0,0 +1,156 @@ + + + + + + diff --git a/src/components/page-watch-common/msg-input-wrap/use-msg-input-controller.ts b/src/components/page-watch-common/msg-input-wrap/use-msg-input-controller.ts new file mode 100644 index 0000000..867a005 --- /dev/null +++ b/src/components/page-watch-common/msg-input-wrap/use-msg-input-controller.ts @@ -0,0 +1,222 @@ +import { computed, ref, unref } from 'vue'; +import { AutoTextareaInstance } from './auto-textarea/use-auto-textarea'; +import { + PlvInputContent, + PlvInputContentText, + PlvInputImagePasteInstance, +} from '@/plugins/polyv-ui/types'; +import { eventBus, appEvents } from '@/app/app-events'; + +/** + * @hook 对消息输入框的封装,统一提供给到组件外部使用的的方法 + * @desc 内部优先级: imagePasteInputRef > autoTextareaRef > inputElemRef + */ +export const useMsgInputController = () => { + /** 图片粘贴输入框组件实例 */ + const imagePasteInputRef = ref(); + + /** 文本输入框组件实例 */ + const autoTextareaRef = ref(); + /** 文本输入框组件绑定值 */ + const autoTextareaInputValue = ref(''); + + /** HTML 输入框 */ + const inputElemRef = ref(); + /** HTML 输入框绑定值 */ + const inputElmValue = ref(''); + + /** 当前输入框是否聚焦 */ + const isInputFocus = ref(false); + + function onInputFocus() { + isInputFocus.value = true; + eventBus.$emit(appEvents.global.MsgInputFocus); + } + + function onInputBlur() { + /** + * 这里延迟 1 毫秒的原因是如果在输入框没有输入内容时,点击表情, + * 输入框因为长度缩短导致触点无法达到表情入口处,进而无法打开表情 + */ + setTimeout(() => { + isInputFocus.value = false; + }, 1); + } + + /** 聚焦输入框 */ + function focusInput() { + if (imagePasteInputRef.value) { + imagePasteInputRef.value.focus(); + return; + } + + if (autoTextareaRef.value) { + autoTextareaRef.value.focusTextarea(); + return; + } + + if (inputElemRef.value) { + inputElemRef.value.focus(); + } + } + + /** 当前图片粘贴输入框文本长度 */ + const curImagePasteInputTextLength = ref(0); + + /** 最多支持输入的文本长度 */ + const maxInputTextLength = 200; + + /** 当前输入文本长度 */ + const curInputTextLength = computed(() => { + if (imagePasteInputRef.value) { + return curImagePasteInputTextLength.value; + } + + if (autoTextareaRef.value) { + return unref(autoTextareaInputValue).length; + } + + if (inputElemRef.value) { + return unref(inputElmValue).length; + } + + return 0; + }); + + /** 图片粘贴输入框内容区域是否为空 */ + const isEmptyImagePasteInput = ref(true); + + /** 监听图片粘贴输入框输入变更 */ + function onImagePasteInputChange(contents: PlvInputContent[]) { + isEmptyImagePasteInput.value = contents.length === 0; + curImagePasteInputTextLength.value = ( + contents.filter(i => i.type === 'text') as PlvInputContentText[] + ).reduce((accu, cur) => { + if (!accu) { + accu = cur.content.length; + } else { + accu += cur.content.length; + } + return accu; + }, 0); + } + + /** 输入框内容是否为空 */ + const isEmptyInputContent = computed(() => { + if (imagePasteInputRef.value) { + return unref(isEmptyImagePasteInput); + } + + if (autoTextareaRef.value) { + return !unref(autoTextareaInputValue); + } + + if (inputElemRef.value) { + return !unref(inputElmValue); + } + + return true; + }); + + /** 删除单个字符 */ + function deleteWord() { + if (imagePasteInputRef.value) { + console.warn('暂不支持 deleteWord'); + return; + } + + if (autoTextareaRef.value) { + autoTextareaRef.value.deleteWord(); + return; + } + + if (unref(inputElemRef)) { + const length = unref(inputElmValue.value).length; + const newValue = unref(inputElmValue).substr(0, length - 1); + inputElmValue.value = newValue; + } + } + + /** 清除输入框内容 */ + function clearInput() { + if (imagePasteInputRef.value) { + imagePasteInputRef.value.clear(); + return; + } + + if (autoTextareaRef.value) { + autoTextareaInputValue.value = ''; + return; + } + + if (unref(inputElemRef)) { + inputElmValue.value = ''; + } + } + + /** 插入表情 */ + function insertEmotion(title: string) { + if (imagePasteInputRef.value) { + // 插入后会自动聚焦 + imagePasteInputRef.value.insertEmotion(title); + return; + } + + if (autoTextareaRef.value) { + const newValue = (unref(autoTextareaInputValue) + title).slice(0, maxInputTextLength); + autoTextareaInputValue.value = newValue; + return; + } + + if (inputElemRef.value) { + const newValue = (unref(inputElmValue) + title).slice(0, maxInputTextLength); + inputElmValue.value = newValue; + } + } + + /** 获取输入框内容 */ + function getInputContentList(): PlvInputContent[] { + if (imagePasteInputRef.value) { + return imagePasteInputRef.value.getContentList(); + } + + if (autoTextareaRef.value) { + return autoTextareaRef.value.getContentList(); + } + + if (inputElemRef.value) { + return [ + { + type: 'text', + content: inputElmValue.value, + }, + ]; + } + + return []; + } + + return { + imagePasteInputRef, + autoTextareaRef, + inputElemRef, + + autoTextareaInputValue, + inputElmValue, + + isInputFocus, + focusInput, + onInputFocus, + onInputBlur, + + curInputTextLength, + maxInputTextLength, + isEmptyInputContent, + onImagePasteInputChange, + + clearInput, + deleteWord, + insertEmotion, + getInputContentList, + }; +}; diff --git a/src/components/page-watch-common/msg-input-wrap/use-msg-input-wrap.ts b/src/components/page-watch-common/msg-input-wrap/use-msg-input-wrap.ts new file mode 100644 index 0000000..4916c5a --- /dev/null +++ b/src/components/page-watch-common/msg-input-wrap/use-msg-input-wrap.ts @@ -0,0 +1,177 @@ +import { appEvents, eventBus } from '@/app/app-events'; +import { emitFunc, VueEmit } from '@/assets/utils/vue-utils/emit-utils'; +import { PropUtils, VueProps } from '@/assets/utils/vue-utils/props-utils'; +import { usePanelVisible } from '@/hooks/behaviors/use-panel-visible'; +import { useViewerStore } from '@/store/use-viewer-store'; +import { ref, unref, watch } from 'vue'; +import { PlvInputContent } from '@/plugins/polyv-ui/types'; +import { useMsgInputController } from './use-msg-input-controller'; + +export const msgInputWrapProps = () => ({ + /** 占位符 */ + placeholder: PropUtils.string, + /** 是否禁用输入框 */ + disabledInput: PropUtils.bool.def(false), + /** 是否禁用表情选择 */ + disabledEmotionPicker: PropUtils.bool.def(false), + /** 是否显示图片表情发送 */ + imageEmotionEnabled: PropUtils.bool.def(true), + /** 是否显示图片发送(仅 PC) */ + sendImageEnabled: PropUtils.bool.def(true), + /** 是否禁用图片发送(仅 PC) */ + disabledSendImage: PropUtils.bool.def(false), + /** 是否使用图片粘贴输入框(仅 PC) */ + imagePasteInputEnabled: PropUtils.bool.def(false), +}); + +export const msgInputWrapEmits = () => ({ + input: emitFunc(), + /** 提交事件 */ + submit: emitFunc<{ contentList: PlvInputContent[] }>(), + /** 点击发送图片 */ + 'click-send-image': emitFunc(), + /** 关闭 */ + 'click-image-emotion': emitFunc(), +}); + +export interface MsgInputWrapInstance { + /** 聚焦输入框 */ + focusInput(): void; + /** 清除输入框 */ + clearInput(): void; + /** 获取输入内容 */ + getInputContentList(): PlvInputContent[]; + /** 重置状态 */ + resetStatus(): void; +} + +/** + * @hook 消息输入框包装层 + */ +export const useMsgInputWrap = (options: { + /** 点击表情后是否聚焦输入框,默认:true */ + clickFaceToFocus?: boolean; + props: VueProps; + emit: VueEmit; +}) => { + const viewerStore = useViewerStore(); + /** 消息输入框控制器 */ + const msgInputController = useMsgInputController(); + + const { props, emit, clickFaceToFocus = false } = options; + + // 监听是否禁用输入框 + watch( + () => props.disabledInput, + () => { + if (props.disabledInput) { + msgInputController.clearInput(); + } + }, + ); + + /** 是否显示字数统计 */ + const wordLimitVisible = ref(false); + + /** 监听输入框溢出事件 */ + function onInputWidgetOverflow(isOverflow: boolean) { + wordLimitVisible.value = isOverflow; + } + + /** 表情面板节点 */ + const emotionRef = ref(); + + /** 表情面板显示 */ + const { + visible: emotionVisible, + togglePanel: toggleEmotionPanel, + hidePanel: hideEmotionPanel, + } = usePanelVisible([emotionRef, '[data-emotion-picker-btn']); + + /** 处理点击表情面板开关 */ + function onClickEmotionPickerBtn() { + if (props.disabledEmotionPicker) { + return; + } + if (!viewerStore.hasNickname) { + eventBus.$emit(appEvents.chat.OpenSetNick, true); + return; + } + toggleEmotionPanel(); + } + + /** 处理点击 face 表情 */ + function onClickFace(title: string) { + msgInputController.insertEmotion(title); + + if (clickFaceToFocus) { + msgInputController.focusInput(); + } + } + + /** 处理点击图片表情 */ + function onClickImageEmotion() { + emit('click-image-emotion'); + } + + /** 处理点击图片发送 */ + function onClickSendImage() { + if (props.disabledSendImage) { + return; + } + if (!viewerStore.hasNickname) { + eventBus.$emit(appEvents.chat.OpenSetNick, true); + return; + } + emit('click-send-image'); + } + + /** 发送按钮是否禁用 */ + const sendBtnDisabled = msgInputController.isEmptyInputContent; + + /** + * 输入框触发提交/发送按钮点击处理 + * @desc 提交后,由外部自行去重置输入框内容,清空组件状态 + * */ + function submitInput() { + if (unref(sendBtnDisabled)) return; + + emit('submit', { + contentList: msgInputController.getInputContentList(), + }); + } + + /** 重置组件状态 */ + function resetStatus() { + hideEmotionPanel(); + } + + /** 消息包装层组件实例 */ + const msgInputWrapInstance: MsgInputWrapInstance = { + focusInput: msgInputController.focusInput, + clearInput: msgInputController.clearInput, + getInputContentList: msgInputController.getInputContentList, + resetStatus, + }; + + return { + ...msgInputController, + msgInputWrapInstance, + + wordLimitVisible, + onInputWidgetOverflow, + + emotionRef, + emotionVisible, + toggleEmotionPanel, + hideEmotionPanel, + onClickEmotionPickerBtn, + onClickFace, + onClickImageEmotion, + + onClickSendImage, + + sendBtnDisabled, + submitInput, + }; +}; diff --git a/src/components/page-watch-common/multi-meeting/imgs/playing.gif b/src/components/page-watch-common/multi-meeting/imgs/playing.gif new file mode 100644 index 0000000000000000000000000000000000000000..fad2d0fa0f779bf15fdea2f659a69602ad59bd79 GIT binary patch literal 3658 zcmdUxd0f(I8o==iFteSS@oXkSQ%vO$f!=>;3*OIM6&4*u35^H~K%#A|Kp>E5ip`9GQ8_Y>>APg9T+HDn12WiV zAdxR5!=E)>fW!C+WH>8`iDrr^0FNJ@DFLD~S4DF(lexqM_|jn55;;jO5DNeq2PPM! z2&E)B8O})%Z3alDzIhr2hkX!{C6nQy<{vP#Pl`waz=DuCe=a5v4Z{t$;2cSDm^_NnT|z@B#9^t zkw`?L15g10{w4{3X@*e7k^2j!9+MWRfRroYi)DO~5N5W>*(^$xk>MuNe=k8G{$y4t zMSfTgk}DFRygG8H`G%3hr{%=u%;FGjewg&iv*P>x*bcPr}tpTK>R0$U_iF=q` ziAfX*z>$e0(IQdGWE3NKBAH0a6NzCIiaBZo7=p>+@`dI}pATA0CW#@G$~ZzUz@U=h zCOb$zKYY5WmAU1iX0up{2kU*1&1h5YaC-J9d!B1)Lqi({~EQBd_Q6?Cad3*n3yC>UrmgU{XY6~(whQmoHts@N@I|rpAVPbzN;u^-t%{o;m$v z)eomCD^8Z5IDYK=vZH_h+jphkmZ+4)M~V&~`s=|1`wPF>SCFsB%gx!lXZNn1**m`8 zzAY;=L!O?NDw9gKibX;}N^%mPm$(H;;BMw@ir=_leOzn|o3(Cjbkv&2h}El@D_1OM zgwttZRLZi@kfp)oC5uT!0v;C>hz-D?QAmG3-$gzMZ?A=(9`FUQ`ColG&)v<{#o6hL z&*#qh>@Tw&XF1HYheE(J>}+kUO(kN%ge}w-WCijwRSQ!wL4!cnhxhHTY=1KQSZR%+ zp!(kV*Rz*h47V<07xo`Im3*@VHMc|N+gV&#?$UAj$)4sL`(0knDhj)CP!)(g!7R2L zxVWkYkJ#G;VgbG0LB`VZ_9S1!+psOa#bu6dJ6kY!eKYxSZsOV8>-|CFCpRHnLX^(+ z>y%nBG*>Qnp3n}+b&Bq8Hp5E+h2$qCRks<8uk78MVl9Fy{|uV*kZ08gJuoZtltXgk z%+fZfpy%wKc=F31Y`<(_4A+h<+_{2tXgrX1(C^w-+&AmLxJ`E+-T*XkMXuYNShY9P z3}V?Cl{C;kF1PQ&>kws+ce=)jt5zI)}~f+Ipgzw|32RM z!lPje_AZ;$b$VZ~R)XDlp}z}^W9N3Qlha$&2z~fCPpKSZWoTU>Dj(NwP$E&G_rXo9 zm6{RT+AN1rF$JTst7Hg;zc_yl$7@e@yg%{o_48~sY(MANasn&>j~jS&`iIB#mcc_59@PaU|VhuC~)yno1UCu#3& zkegTGobq$^(ZQvW_vVs{zN(p#{5 zqS3;=Je~3oatJ$5ix_iOjo0G`ArOUk14A`v?PiW%zU8gWo(j$YdfM)Wn%5zmrw5%L zsatAugWYUcU3PnWzQQw4A*LPwh1>b+DD52h#}?n-oU0Dv!jz55vJGkN+a2K#lIp(; zrVr^x--_Fdz0*g#oWj|JBQAJlY8MYO(UI@$Xvdf(xzb9>o-1QTeK9S?3 z(HSe2%*YrrWCc^6^@6o)=>v%baBgBws=6<)UXNwO@G}%T%RJLENYgs4ru&(k-WBct T;ZB%_SF7Eh-c-}~sj~QAMQR^W literal 0 HcmV?d00001 diff --git a/src/components/page-watch-common/multi-meeting/mobile-multi-meeting.vue b/src/components/page-watch-common/multi-meeting/mobile-multi-meeting.vue new file mode 100644 index 0000000..511bdaa --- /dev/null +++ b/src/components/page-watch-common/multi-meeting/mobile-multi-meeting.vue @@ -0,0 +1,211 @@ + + + + + + diff --git a/src/components/page-watch-common/multi-meeting/pc-multi-meeting.vue b/src/components/page-watch-common/multi-meeting/pc-multi-meeting.vue new file mode 100644 index 0000000..a828e71 --- /dev/null +++ b/src/components/page-watch-common/multi-meeting/pc-multi-meeting.vue @@ -0,0 +1,242 @@ + + + + + + diff --git a/src/components/page-watch-common/multi-meeting/use-multi-meeting.ts b/src/components/page-watch-common/multi-meeting/use-multi-meeting.ts new file mode 100644 index 0000000..4db4a87 --- /dev/null +++ b/src/components/page-watch-common/multi-meeting/use-multi-meeting.ts @@ -0,0 +1,212 @@ +import { DEFAULT_SPLASH_IMG } from '@/assets/constants/defaults'; +import { getWatchCore } from '@/core/watch-sdk'; +import { useChannelStore } from '@/store/use-channel-store'; +import { + LiveStatus, + ChannelMultiMeetingItem, + MultiMeetingLiveStatusData, + YN, +} from '@polyv/live-watch-sdk'; +import { ynToBool } from '@utils-ts/boolean'; +import { computed, ComputedRef, onBeforeUnmount, ref, unref, watch } from 'vue'; + +export interface MultiMeetingData extends Required { + /** 是否为当前频道 */ + isCurrent: boolean; + /** 直播状态 */ + liveStatus: LiveStatus; + /** 显示图标 */ + showIcon: boolean; + /** 跳转地址 */ + watchUrl: string; +} + +export const useMultiMeeting = () => { + const channelStore = useChannelStore(); + + /** 分会场开关 */ + const multiMeetingEnabled = computed(() => + ynToBool(channelStore.channelDetail?.multiMeetingSetting?.multiMeetingEnabled, YN.N), + ); + + /** 分会场频道状态 */ + const multiMeetingLiveStatus = ref([]); + + /** 根据频道号获取频道的直播状态 */ + function findLiveStatus(channelId: string): LiveStatus { + const statusList = unref(multiMeetingLiveStatus); + const index = statusList.findIndex(item => item.channelId === channelId); + return index === -1 ? LiveStatus.End : statusList[index].liveStatus; + } + + /** 分会场列表 */ + const multiMeetingList = computed(() => { + const watchCore = getWatchCore(); + const multiMeetings = channelStore.channelDetail?.multiMeetingSetting?.multiMeetings || []; + + return multiMeetings.map(item => { + const splashImg = item.splashImg || DEFAULT_SPLASH_IMG; + const meetingChannelId = item.channelId.toString(); + const liveStatus = findLiveStatus(meetingChannelId); + const isCurrent = meetingChannelId === channelStore.channelId; + const showIcon = isCurrent && [LiveStatus.Live, LiveStatus.Playback].includes(liveStatus); + const watchUrl = watchCore.multiMeeting.generateMultiMeetingWatchUrl(meetingChannelId); + + return { + ...item, + splashImg, + isCurrent, + liveStatus, + showIcon, + watchUrl, + }; + }); + }); + + /** 会场总数 */ + const multiMeetingTotal = computed(() => unref(multiMeetingList).length); + + /** 当前频道位置 */ + const currentMultiMeetingSeat = computed(() => { + const index = unref(multiMeetingList).findIndex(item => item.isCurrent); + + return index + 1; + }); + + /** + * 获取分会场的直播状态 + */ + async function getMultiMeetingLiveStatus(): Promise { + const watchCore = getWatchCore(); + const data = await watchCore.multiMeeting.getMultiMeetingLiveStatus(); + multiMeetingLiveStatus.value = data; + } + + let pollingTimer: number | undefined; + /** 开始直播状态轮询 */ + function startLiveStatusPolling(): void { + closeLiveStatusPolling(); + + pollingTimer = window.setInterval(() => getMultiMeetingLiveStatus(), 60 * 1000); + getMultiMeetingLiveStatus(); + } + + /** 关闭直播状态轮询 */ + function closeLiveStatusPolling(): void { + if (pollingTimer) { + window.clearInterval(pollingTimer); + pollingTimer = undefined; + } + } + + watch( + () => unref(multiMeetingTotal), + () => { + if (unref(multiMeetingTotal)) { + startLiveStatusPolling(); + } else { + closeLiveStatusPolling(); + } + }, + { + immediate: true, + }, + ); + + onBeforeUnmount(() => { + closeLiveStatusPolling(); + }); + + return { + multiMeetingEnabled, + multiMeetingList, + multiMeetingTotal, + currentMultiMeetingSeat, + }; +}; + +/** + * 分会场分页 hook + */ +export const useMultiMeetingPage = (options: { + pageSize?: number; + multiMeetingList: ComputedRef; + currentMultiMeetingSeat: ComputedRef; +}) => { + const { pageSize = 5, multiMeetingList, currentMultiMeetingSeat } = options; + + const wrapLeftPercent = ref(0); + + /** 列表外层百分比 */ + const wrapWidthPercent = computed(() => { + const total = unref(multiMeetingList).length; + return Math.ceil(total / pageSize) * 100; + }); + + const wrapStyle = computed(() => { + return { + width: `${unref(wrapWidthPercent)}%`, + left: `-${unref(wrapLeftPercent)}%`, + }; + }); + + const itemWidPercent = computed(() => { + const total = unref(multiMeetingList).length; + return 100 / (pageSize * Math.ceil(total / pageSize)); + }); + + const itemStyle = computed(() => { + return { + width: `${unref(itemWidPercent)}%`, + }; + }); + + /** 是否禁用上一页按钮 */ + const disabledPrev = ref(false); + /** 是否禁用下一个按钮 */ + const disabledNext = ref(false); + + function handlePageChange(toNextGroup = true): void { + if (toNextGroup) { + wrapLeftPercent.value += 100; + } else { + wrapLeftPercent.value -= 100; + } + checkDisabled(); + } + + function checkDisabled() { + disabledPrev.value = unref(wrapLeftPercent) <= 0; + disabledNext.value = unref(wrapLeftPercent) >= unref(wrapWidthPercent) - 100; + } + + watch( + () => unref(currentMultiMeetingSeat), + () => { + // 保持当前会场信息在会场列表中可见 + + checkDisabled(); + const currentSeat = unref(currentMultiMeetingSeat) - 1; + if (currentSeat < pageSize) return; + + const count = Math.floor(currentSeat / pageSize); + for (let i = 0; i < count; i++) { + handlePageChange(true); + } + }, + { + immediate: true, + }, + ); + + return { + pageSize, + wrapWidthPercent, + wrapStyle, + itemWidPercent, + itemStyle, + disabledPrev, + disabledNext, + handlePageChange, + }; +}; diff --git a/src/components/page-watch-common/page-advert/mobile-page-advert.vue b/src/components/page-watch-common/page-advert/mobile-page-advert.vue new file mode 100644 index 0000000..af0e47a --- /dev/null +++ b/src/components/page-watch-common/page-advert/mobile-page-advert.vue @@ -0,0 +1,142 @@ + + + + + + diff --git a/src/components/page-watch-common/page-advert/pc-page-advert.vue b/src/components/page-watch-common/page-advert/pc-page-advert.vue new file mode 100644 index 0000000..f655212 --- /dev/null +++ b/src/components/page-watch-common/page-advert/pc-page-advert.vue @@ -0,0 +1,150 @@ + + + + + + diff --git a/src/components/page-watch-common/page-advert/use-page-advert.ts b/src/components/page-watch-common/page-advert/use-page-advert.ts new file mode 100644 index 0000000..b841359 --- /dev/null +++ b/src/components/page-watch-common/page-advert/use-page-advert.ts @@ -0,0 +1,52 @@ +import { computed, onMounted, ref, unref } from 'vue'; +import { PageAdvertItem, YN } from '@polyv/live-watch-sdk'; +import { getWatchCore } from '@/core/watch-sdk'; +import { useChannelStore } from '@/store/use-channel-store'; +import { ynToBool } from '@utils-ts/boolean'; +import { useSimpleVisible } from '@/hooks/behaviors/use-simple-visible'; + +export const usePageAdvert = () => { + const channelStore = useChannelStore(); + + /** 页面广告开关 */ + const pageAdvertEnabled = computed(() => + ynToBool(channelStore.channelDetail?.channelAdvert?.pageAdvertEnabled, YN.N), + ); + + /** 广告是否显示 */ + const { visible: advertVisible, close: closeAdvert } = useSimpleVisible(true); + + /** 页面广告列表 */ + const pageAdvertList = ref([]); + + /** 关闭按钮是否显示 */ + const closeVisible = computed(() => { + return ynToBool(channelStore.channelDetail?.channelAdvert?.closeAdvertEnabled, YN.N); + }); + + /** 处理点击关闭 */ + function onClickClose() { + closeAdvert(); + } + + /** 打开链接 */ + function openLink(href?: string) { + if (!href) return; + window.open(href, '_blank'); + } + + onMounted(() => { + if (unref(pageAdvertEnabled)) { + const watchCore = getWatchCore(); + pageAdvertList.value = watchCore.channel.getPageAdvertList(); + } + }); + + return { + advertVisible, + pageAdvertList, + closeVisible, + onClickClose, + openLink, + }; +}; diff --git a/src/components/page-watch-common/playback-list/hooks/use-playback-list.ts b/src/components/page-watch-common/playback-list/hooks/use-playback-list.ts new file mode 100644 index 0000000..af804cb --- /dev/null +++ b/src/components/page-watch-common/playback-list/hooks/use-playback-list.ts @@ -0,0 +1,23 @@ +import { getWatchCore } from '@/core/watch-sdk'; +import { usePlaybackStore } from '@/store/use-playback-store'; +import { PlaybackTarget } from '@polyv/live-watch-sdk'; + +export const usePlaybackList = () => { + const playbackStore = usePlaybackStore(); + + /** + * 处理点击回放节点 + */ + async function onClickPlaybackItem(target: PlaybackTarget) { + const watchCore = getWatchCore(); + playbackStore.$patch({ + currentPlaybackTarget: target, + }); + await watchCore.player.changePlayback(target.playbackOptions); + watchCore.player.play(); + } + + return { + onClickPlaybackItem, + }; +}; diff --git a/src/components/page-watch-common/playback-list/mobile-playback-list/mobile-playback-list.vue b/src/components/page-watch-common/playback-list/mobile-playback-list/mobile-playback-list.vue new file mode 100644 index 0000000..3389398 --- /dev/null +++ b/src/components/page-watch-common/playback-list/mobile-playback-list/mobile-playback-list.vue @@ -0,0 +1,214 @@ + + + + + + diff --git a/src/components/page-watch-common/playback-list/pc-playback-list/pc-playback-list.vue b/src/components/page-watch-common/playback-list/pc-playback-list/pc-playback-list.vue new file mode 100644 index 0000000..c763c46 --- /dev/null +++ b/src/components/page-watch-common/playback-list/pc-playback-list/pc-playback-list.vue @@ -0,0 +1,223 @@ + + + + + + + diff --git a/src/components/page-watch-common/playback-list/portrait-playback-list/portrait-playback-list.vue b/src/components/page-watch-common/playback-list/portrait-playback-list/portrait-playback-list.vue new file mode 100644 index 0000000..4dd0acc --- /dev/null +++ b/src/components/page-watch-common/playback-list/portrait-playback-list/portrait-playback-list.vue @@ -0,0 +1,214 @@ + + + + + + diff --git a/src/components/page-watch-common/player/common/audio-panel/imgs/audio-1.png b/src/components/page-watch-common/player/common/audio-panel/imgs/audio-1.png new file mode 100644 index 0000000000000000000000000000000000000000..c15f41792d82a2186c8e2c9812b9012a50994a04 GIT binary patch literal 24190 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 Z@e6z!VM)!w;XeQX002ovPDHLkV1m*B2p|9e literal 0 HcmV?d00001 diff --git a/src/components/page-watch-common/player/common/audio-panel/imgs/audio-2.png b/src/components/page-watch-common/player/common/audio-panel/imgs/audio-2.png new file mode 100644 index 0000000000000000000000000000000000000000..2beb6276085ecbf49788a899ae755f944ab3a198 GIT binary patch literal 24622 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 literal 0 HcmV?d00001 diff --git a/src/components/page-watch-common/player/common/audio-panel/imgs/audio-3.png b/src/components/page-watch-common/player/common/audio-panel/imgs/audio-3.png new file mode 100644 index 0000000000000000000000000000000000000000..6571f63bff361bc33c79a6da3ccd336d7b2f67e3 GIT binary patch literal 25124 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 + + + + + diff --git a/src/components/page-watch-common/player/common/none-live-panel/imgs/portrait-end-placeholder.png b/src/components/page-watch-common/player/common/none-live-panel/imgs/portrait-end-placeholder.png new file mode 100644 index 0000000000000000000000000000000000000000..0fed3839082eeb066191a9ad2bb34405650b2906 GIT binary patch literal 22510 zcmV*`KqA#>U;)mU~yENQp>?IvRDC(%5%~R- zJ;Q|1jt~&t6M@0tMmF)qm)&xgR#cFgD1RoTD?-bJQBrMG2qZvY))e;i7j=_O$N|ZM zB?x;BJ@1|JH)&6@Wz#LcBD8cH5!D`rK#~ZQPuba>g+7(Q&03k(EFlS{i$#-H=uEbrm7u{+$g*SzV4u78t5?expO}${1&Yv|nh8pdLZE{YxMj-Dfe>

c8iqIT^Q3+89bUXq# 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 + + + diff --git a/src/components/page-watch-common/player/common/player-play-button/imgs/play-btn-2.png b/src/components/page-watch-common/player/common/player-play-button/imgs/play-btn-2.png new file mode 100644 index 0000000000000000000000000000000000000000..e7c1c30d02d099489b161c4d88bd37a85127c5d1 GIT binary patch literal 16999 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 OkdnN*T$PM@*#84JbkYX^ literal 0 HcmV?d00001 diff --git a/src/components/page-watch-common/player/common/player-play-button/imgs/play-btn-prefix.gif b/src/components/page-watch-common/player/common/player-play-button/imgs/play-btn-prefix.gif new file mode 100644 index 0000000000000000000000000000000000000000..3656052738248a434817822211050e3ceceadf54 GIT binary patch literal 3647 zcmdUxc|a3a8o-0lt{RLi-ePHt)y0FH5RyPtNVt>$a%cesLNbsD$;3l~4 zgNPUbkqW2Fhc zzYm4VUV~VJsI@`7d|%4KdZ0zd{CjhlMgcgT0AZytNf9heaQ=g3(O2gblwv zHpoP5P9h*d#{mg^AszFy{R{@p=h89TTv>RQhyn2UehM)Vst63@C=xkTE@s1ew1rb$`(`l?gMO_dNu*;u%^%R_m<&)1pk1+KXAZ%If_9@~ z31k;MiM$R?#1p7EJOxJ}IpYa5JelU|hJMp9a5OPDo)*INc@qmB(J?%UL`1{kQc_Z| zDI_c?PQVeURM-a*M~!i1{K39~7d^9@%lAR6@tVq`yx= zAbRUo2w`7O2g?BkI2l`nBVh67DNQM|SpQp9Ab6_{NkV`>cr7}H!sH?V7Xm<_RLlWj z^%dq&A{s*suqB{43Xo zF|ZRXpU2luX%j|F9*z z)7G2~0udaU35fa00M|zh3ec}-P2*c&VY(4qJYC6No@BDOWtQJS}BDoAy=jt=dz$yTVvrR$5YARA|r_(;JW?ew=*D?eI+S&shD z@q=X!OP4HOv~a=vdG>#`n~R!bi<~`c=3m}_&&GNNTpyM{x0z*wutBUdmk@JxL0A|0 zwcUM*zwF=CNg2M{zASbqV&hChIKQ?`-fBW#T04LD%0bjO*TD8@J14bm*dY{5;9+S!MUc*JbSRJj*QcE?dnHgHSHYZ=@98y@Cn_X@wHg1kDs@kcL z=qgQm8!KziI^?0o+0As|{x%_@()=hHB?nt=~&O95!xuAnwHH7~YEsIx@KYdq3`x7~Q<^ccQ(JZ~__?hL|lz&G_V z#{K>eL$OP%ZHMf&Wow#k9xv#w_bTa$JT>toud1K$IXk-U`j&~YX64PNz;mPH;ITW& zpfE!bp^41V<|)$)a@DCtkU_NxW(&{Xt=Z;jFqPC~uB$)T@PS3R{CB`5MWIBK2*Tve z<UKFTYni1`Voh5$yvqB$uiLI}^8OQ-vByo-R|VE-5H1HR!cTWyKX))krH}$lr9J68p)a zMth5VS?}OmitoT7&y9NAAO*UQKY2E{7m1ia$jKc0O0})7XK>*5eqz;4U}0*Xpwo7E zQHR~yE5Px{JNgq1k6WTpgO}6CPC|kWm(HbemFfHpn@mU`Q)Tni`W%B+m#@h}T5YND zs>)es+FxUNPgNGN+H8}W)*OCu@$u%b)%szV4_^>(3U5J(ylVEq?HOrhwmjvrWO=w&%7 z>wp|%vCZy6a`irwgT=Kcj#Xxyi7Yt66fY6)07Dw_Aa|K5g3J2H1ckZ)*fneC|= zrU&)_6acBT#~b_F+G6|y6CM(e^l$6#h#$D?G2wt!8_&f~R$>c(dFHB0&Dg2d2(pw~ tD4&4HCZ*`z%gT-aM+-DflWDr2!D(HOn|2C_9b0dV6tA?LKB0{)PVa#4gpq zfB}HPaJY&LFkpG7Z(K*qkVXn72n-uJTIM>23AV)D%TR<2(lBAbg^eEc7>}__WC7U< zszDkVWcVDQ%=I_9f;}BMp;XzyeV< zGDxB5u4BBR2Iw`oNW-RTkikEJ0RtAyn~o0TVHzx$FhPKU+W?S1`oSeLefkW111w%L zQ#Oci*r3P3a9|^M>u&GlSKgu5gfw_#!Ay@KgJNX(tfBR-E?nf$jZXCNA|eAI0}it2 zLMN?l?L;@a(S>eg;gSJws__Ek(1T8NpaUH^gidtB$=wI`E&vU(|5Q0NxTFg`d(Okx zQybLLT+ZUK7bPo!aFhweKjkgl!>{t!;+#rSC&WY13{bUrh~O&#PE$`MK!*4ndjNsh z*|=}!D=@?>Y}FM*;eg?C6*_6K{}3x^+1c1YH87A8v)&8@6kxb;;dn1v2A5rDf%Qx{ zX~H>WAq5MTcnApz2V6LCz3B)W4xGvn)$_;zlXSZU6Dg#GVww@sS+T9I3k(Mia^hvf zsXn9f9lC@9{p#JE@)Rjgi}U-s_y4OA4sysMhb(NkTuFuj@SAg2f%&nIywyX^9Vy2ntAg$`)(+J`>^NoN@VZ=QR`Xe_0xlbJ|$*3|58Hs7!V1Vd42 z;?@1tA}gxY!f8bI1?DqU4GMG-1qy|QC~@ZTu_<=R3?C6n;v~E+gh*9ro)|fBz}__S zeE|6Z20K&@10*b8*b9jE9U;mNT+_8L_a9;TD%E^c%mYjOm_npE=z;Aw=b*NM8)>9( zn#jHYa7j!fOQ<#rX;?zZrXuf5(6n_J?mf-|0P`8D7Ia(UQqxnab?p^9z+lM-0bCfs z!qx1MA>7Wu$eW`3fle+j;c|fLf)QgdOt|0`2YpE--nVddpi)ioJE|nhA3t8w6d`-b z#F0Koe zo!*2LpdUzmKyNxn^|{!Js7($o(cVm(q$@Z|0!zwU`+)0qQLX1r`w#ffiFn*oA%A}G z)N8j(*4cu|(-l(dg-Of7Mix2bJlhPm0Qx37*KU`*5M>moKF|ja9AR7_li<_khzo4k zv;hECw@@wB`mPP^;C2`8#@Seda2~Kj)k08H;>Q$f&1ahJKiqo=SCJ`#8;@!CObogh z*l6jM6^@PQ0arPTJtCr^3q>YW=%a-MI&k4W@r6q#L^TosGT5bR!5#zb&3Z|t1+Uvr z2yc%$nhRI2XbGgNe-I9fvOm+aO27y76qvPvEa21-VL>4qFIuFRm zPUj7QuPmKAcgX7bfbUl1v%Umy8r`w)b5x|8Z2A2Iip)_S82eAXPWS;oLOo~LSMh$% zfBd<9WW+KbCOrfI_66oM-p4(y*VXz4MR%m>zDd`dELajj(mz-352hwvyQ=Ycc>;KCKQ&z0j7FnGbR<>vt~2pSI+ z@EmO6BYUn^*mN|KHxh>+Y*KxR;ovGDH#5D-?*c_bq2^xr%(_w+*tfv2!9gd2E_hZ^ zSY2}|aO^5+wuf%4#QvS9=Tn*)vu6sIbH!jQxW^0}1PY!<0I;b6aK0aSc6=&u;7~;G z%Yqj;y;Fh{bu%UYERG8&FZx~NoagyeV zF}3HhWGe8tmWcI>zNh{e?u$n_GqlQ^qV7EdXa|N_18?7-ZSFl>@P=R=uxLz7t0VBA zl0$|(hp}nFPQ^w*ZwrWv(8X-j1S-gkU`Ih*$Q6BS`or$BtwJ4zdcdEO4j4R$4lRO9 zmI#ojhe4F4tg1|8jc))uJ0~2Kzv)9x$>xYQj4Ne;!A+L}+0&%xddj0Y^4W=MKrFkSqFoI1Ra^3BLz6&y6TjzYBI4S6%|x&EsVw|ibK*>me~!A zdt!esa6XK{Hc+H_(gYr=FXYPZ2)Oa$5rfc7BcX9fWVd8D%A`z$>Xad&1FUo*V7d3{ z_7iU_2fE6R+SeQO>S=}^Sb+7YBR8hfPTCG2?vg$+<5C=Mh~WURaP^9VF;F_*fq)+yXHOpw0M26T5BY3L zpF%TGZjSYW|JA03Ti;sU62Ekiv1G!vr({y%;~JWuKQ8WXh-x_3@h)vx>hNPdlY4{g zjzr}AnI4DTfzKSEp#EITMYtFXaU#ZH9NN)<2CTz!dh1A`B!T#~kK{l1f{*OCuTs?Y zKp-Rlh#$b!0fAhWdcOb(rOS z@!*ylwrBG^a>20sD~=f=QXCgq&-LB~>g^0agv9{x=7DKzvmDcf(CNaf#w?v9K8>K3 z{GG^)5qZWLczN%f^%3>k8%D&ymrB>1?|Ixbw{V=$Ge*D0%|MSmW z`zHSDnE<%HsN7EK0wp%T8)d+~n}4uFiI4I-WO4++fWg^H(*Q7;w)eFIo#ILutblN33nvo6Cvh|k!Ap-WPfMB=x@>kM zhBF&AF^JAk;JTy^xXNFEZ#?>*v-AT&G3sBz%z%2oVMFo^d+z{CF+jivj|=tbayw5Z z8L%%hS44b4BN8P z&I6eFisOR#r6}2?j(%;!v~>}nCLWkT6PU>Uun$nN0#~xZ&gB4xQ%f{;CLWZXj^TjP zypC=wLa~3&(p;$obT0j7Gk_+UbZH1u8-S`8f(}L59|f8W4TNh%N_*5;Qt<4C9e(0H zCIh)S08rDYKvZfM%qvDTm3K~iY2rT(lOAqFz+FHP9gp8DcRN*X_&UkF|g ze*|DiSludI8K7!&Bn*{73h|(yADiS>%pJm0e=$bkABib!s$SxrR>1y_EQAzuK@AC{ z2!3bGe9qO6kLIZ(EJ;rq3GZ=TEnqGQYcb$_&x4PZR$Ur@z+)V4SWT zD9=$^AP0a8K9@K^Hh>b31HD%uiQ}MMXa^o`O?vu-41k6(VUZ`q3Xi5-VaOcWQ@aqr1{(1@6p9MMK+##_d3?<=kpeIr7x}!FW=A)sR947{H zaLwt!p&KJ^x$_O+u{laTNbDiseplDH?M~WS^hTqt44o33h7#ZnKuL2r1PrnsW0YoM znGdg|Ef}#?pQw%R?LPhORyX35$IBOFo&fyXTmTPAE2?~W9oRTK7G%4T^dnEG_b=~q zZg`(+kJ;Ml#3)tsMXpp&!@wD%0s3A<2*Dtl&(8Gm-h1&FBj5vIdgXoZcGHGl%b46) z*Cp-p@+<)BLxGl6aUHPd{78%&KEeqyp=x1@$|WaOz9I=?hGv%mG+UX5B8NGhowCx& z#cy{3AhR18ES;8%C#~Bc(6_7d$rAa9L1Wr;!0qM~?zV z40>WpgmOoDg$26uyJ!Wl9peHTE(35^w0TYDv~zs%Uf_4B2#vgDEzz=T4MrwP z*)&Cc8k{gU!&)D70g>{xq;kHv7%Ha7tt3Jx4elMN^uW5y&A$Lo?!4@E4OR**2Uv@i zG8k;KeR)zfVG>p>xX{!w@@WO2*29!OU9JjN2PJ&XG)iw#6VY-{7JyTh3%x*E9RQ6H z4?Ba`W><^@uz}7h1g;NZ+mA6E*xPo@N-1ul#QUO{IVwk1&jSEwf%R;%KhaCd#=g>A z3ILn-%~%&pR_IgL00V;YKr=>Czfv|bfVBzb0MOR`wY6(n^WMb(P<>|QMB(Llm6QGM zfDGcT!nxj8-MQawyLD%WW{ux@LzkR7eO%zC%uB5usNA`ji1s4Ra$k<+Tr}_*^gsdi zOyNRYrU^4A9uto=Mg` zV=kuRm_Dy>bFl~Y?o0LyMcXxGGydTY#Z}@Wdl4`1qtfilk>%y~B1yRpppvBly4Ule z=2$=R4OVz`=e9P!^6_&YuW##c`}W{L#;no{Mx8zCw2_%OFuKP6MQUwK68O_)fMO7` z(^9|n+y(z=>t3~c=?B7b=wC|`N#_n(eBAtFOEZ!4b-C-)uN}Vmp~E4c;aq9{(yKJ| zj!g}BZd=iuP-8>Aw9CEPRbDXsr>BJO4uEFoN9G^sFjzqSx|#s{Li3Ly>3iF5uCHm- zT^Emh3mW}6VhjMN9C_E&vQmi+S6I)YU;7PE;n#JJFRsB%|5I(l6?JcS#T*mTW?%X) z0Xn2!u1*2~OfLRoc||A>8@eh*$!q~^pn|TU+;nS&KkiK(-&rq~9L8(ANRue*YkMl8 ztj!z*-z*sR-?K&x3NkPYQk!B-J1hnSB-mBvBR-V%nse0$aLE;Dst~g_ z&B1XAF?re4ODFh|kn=68y06oL`gS%q!&-x*0DyT({mKORs3x z+ywXDe&VfD$$N6AeQs)FU*v##KhrtBcs(o+6f7YnfmqlW$*{+3k^k@8*$D$H+G#Yh4UYAz5@&lW0X-yvQti&W!Bdko5HE zY8#2!`*S0ozIQVKV0dP?eP!~1Qz91jpjScNV^4Wj*m;VLeYhf3SEi$%0@Mp0zzI`8 zm%(*oXXSe^x%l-9i#)rvl&;Z3WR!ry2`F%H+sUg$8MRu;Y{Y7Nb+x{bvO0xZ0R*|? zq*e5CHd(XOKSS@#7an6BO^0TUjg|p^@xCZwM{GR9*{-rdwi83t|l52k~71c=N!SFUE|Vx&j-q#8qVU zPb%7aM*ez3pxv%%x~FklkH#a6`+=O0jfXZXB}vfcFP`D;5b%4tM$Z6$#s62$8ZVw7 zwLHt=+FoU3jo8?0$S*Y;rW|GVJuZ8>?dSVfcWAtU-dNyjQgia8060w_FZA#Pr_y>n zQn(^Bpnb&PeMkYod8^j6DsGNmGLrZh>JWxL%~LL(cN=wh2n_(78TE=zsw*mpsA+vVfl3WfGwGI(YFvw{C8W8{&gQ!Q9fQ!BN_4^~>wF+$| z8AZiOo?C(eKNgR5E4EA?Zs{@+x_a}tq3>|(_Y1pru^J4KSIrHq+@~>+q=^EfNfCuv zW$7c6fjMn()6~tAOUz#Sk?4U2)GdrJB@!ZA+or*GNsIF7*yNX*r*OoMGfFR7Id^2K?{Q9g&MlfXnD|bex3be9%4cq<1;r-buBK_iBI>jv+m)tao6Ay5%u5NN?c-02nsdI@QWFNiFCH3L;+HoMef_A{A8GBS<@jQi2o>iI6`O#35N?Me1w-!L-rpss zCc;trNQ{;0a0Z@gbKHR;ed8ye-%53t>}qwO7KXctHOkPh+qv`9D5VMm%m?rh08AgZ zV3-D)f_7bwt01-Fs&04r!NVneWy=X$sD9=<+k3Pymz!9i&H6m@f?*<+{*n2B$^dbZ zbF0v@6`DCF<1bNYI=W6se1B&{e+h55@7P=PI@MqB{;sTsFjotPg%DV5v5?OWpDO3p zL`V$8|BD5H_*W5#1;y&_XL4S~Q0m%IbHbugg%IxW6U{$vcrT~P5U{dlJ_N?x#0@a%?pcXD^jA!JJ?`N&I-u*kDMMc0_-lrto4&-4oULmR<{1J z>8W;3$_(ieWO7ab64A0OAf}PR`gw0Vhs3;qU+p*7-`Z{7$`{)-De!nI%t!_&hMD&r zb9U+2q8_)++0prC$E$~)JJij2oGn%RB60?2J20qtL75KK34$eW(Dgv`mpIF03M2Wyy}43h8Zur`fUc(oUqEA zIAEs7>-2eHy^rrk)=EMz_TCO#8_yAzzZoY}i@ro6PlX5rYrU=T9rx0|NdUL+Nt43n_V(+A8yTz~I}nmMf&#p%HG!(o6T;F5xj z=!_qf-91xO3N~XlZO=z~0SpkP@hQJfG>`u-%v@-{1;xbfYSu0P%MgZjOgABg<`R*T23th1*6 z0yp{J^w}h>=&$9Z`_*@26~e>Pl2Xg90#r+_CqQ_uJq3LI{9-al$3pL)F9IJs}(i5Kcwq4+dvH<0R#0E0@{Zc zUt)d{^DyQxp8OGBa9-?ss-#&4hp(I~-Sl%ND90NT-xb{s-G z4qyj%U + + + + + diff --git a/src/components/page-watch-common/player/common/player-play-button/use-player-play-button.ts b/src/components/page-watch-common/player/common/player-play-button/use-player-play-button.ts new file mode 100644 index 0000000..3f62fcf --- /dev/null +++ b/src/components/page-watch-common/player/common/player-play-button/use-player-play-button.ts @@ -0,0 +1,12 @@ +import { PropUtils } from '@/assets/utils/vue-utils/props-utils'; + +export enum PlayButtonMode { + /** 三角形的播放按钮 */ + Default = 'default', + /** 文字提示型的播放按钮 */ + Text = 'text', +} + +export const usePlayerPlayButtonProps = () => ({ + mode: PropUtils.enum().def(PlayButtonMode.Default), +}); diff --git a/src/components/page-watch-common/player/hooks/use-player-action.ts b/src/components/page-watch-common/player/hooks/use-player-action.ts new file mode 100644 index 0000000..00b12ac --- /dev/null +++ b/src/components/page-watch-common/player/hooks/use-player-action.ts @@ -0,0 +1,207 @@ +/** + * @file 播放器操作 hook + */ +import { appEvents, eventBus } from '@/app/app-events'; +import { getWatchCore } from '@/core/watch-sdk'; +import { useLayoutStore } from '@/store/use-layout-store'; +import { usePlayerStore } from '@/store/use-player-store'; +import { PlayStatus } from '@polyv/live-watch-sdk'; +import debounce from 'lodash-es/debounce'; + +/** + * 播放器操作 hook + */ +export const usePlayerAction = () => { + const playerStore = usePlayerStore(); + const layoutStore = useLayoutStore(); + + /** + * 是否不允许处理 + */ + function isNotAllowAction(): boolean { + return !playerStore.isPlayMode; + } + + /** 播放 */ + function toPlay(): void { + if (isNotAllowAction()) { + return; + } + + getWatchCore().player.play(); + } + + /** 暂停 */ + function toPause(): void { + if (isNotAllowAction()) { + return; + } + + getWatchCore().player.pause(); + } + + /** 如果当前是暂停则调用播放 */ + function toTryPlay() { + if (playerStore.playStatus === PlayStatus.Pause) { + toPlay(); + } + } + + /** 切换播放状态 */ + function toTogglePlay(): void { + if (playerStore.playStatus === PlayStatus.Pause) { + toPlay(); + } else { + toPause(); + } + } + + /** 刷新 */ + function toRefresh(): void { + if (isNotAllowAction()) { + return; + } + + getWatchCore().player.refresh(); + } + + /** 防抖设置音量 */ + const setVolumeDebounce = debounce((volume: number) => { + getWatchCore().player.setVolume(volume); + }, 300); + + /** 设置音量 */ + function toChangeVolume(volume = 1): void { + if (volume < 0) { + volume = 0; + } + if (volume > 1) { + volume = 1; + } + playerStore.$patch({ + currentVolume: volume, + }); + setVolumeDebounce(volume); + } + + /** + * 递增音量 + * @param diff 增加的音量,默认:0.05 + */ + function toIncreaseVolume(diff = 0.05) { + const currentVolume = playerStore.currentVolume + diff; + toChangeVolume(currentVolume); + } + + /** + * 递减音量 + * @param diff 减少的音量,默认:0.05 + */ + function toReductionVolume(diff = 0.05) { + const currentVolume = playerStore.currentVolume - diff; + toChangeVolume(currentVolume); + } + + /** 切换弹幕显示 */ + function toToggleBarrageShow(): void { + playerStore.barrageShow = !playerStore.barrageShow; + getWatchCore().player.setBarrageShow(playerStore.barrageShow); + } + + /** 切换线路 */ + function toChangeLine(line: number): void { + getWatchCore().player.changeLine(line); + toTryPlay(); + } + + /** 切换清晰度级别 */ + function toChangeQualityLevel(level: number): void { + getWatchCore().player.changeQualityLevel(level); + toTryPlay(); + } + + /** 切换倍速 */ + function toChangeRate(rate: number): void { + getWatchCore().player.changeRate(rate); + toTryPlay(); + } + + /** 设置播放进度 */ + function toSeekVideo(time: number): void { + if (time < 0) { + time = 0; + } + if (time > playerStore.durationTime) { + time = playerStore.durationTime; + } + getWatchCore().player.seekVideo(time); + playerStore.$patch({ + currentTime: time, + }); + } + + /** + * 视频前进 + * @param second 秒数,默认:15 + */ + function toForwardVideo(second = 15) { + const currentTime = playerStore.currentTime + second; + toSeekVideo(currentTime); + playerStore.$patch({ + currentTime, + }); + } + + /** + * 视频后退 + * @param second 秒数,默认:15 + */ + function toBackOffVideo(second = 15) { + const currentTime = playerStore.currentTime - second; + toSeekVideo(currentTime); + playerStore.$patch({ + currentTime, + }); + } + + /** 重新播放 */ + function toRestart(): void { + toSeekVideo(0); + toPlay(); + } + + /** 切换移动端播放器页面全屏 */ + function toToggleMobilePageFullscreen() { + layoutStore.$patch({ + mobilePlayerIsPageFullscreen: !layoutStore.mobilePlayerIsPageFullscreen, + }); + } + + /** 切换无延迟播放 */ + function toSetLowLowLatency(isLowLatency = true) { + playerStore.$patch({ + isLowLatency, + }); + eventBus.$emit(appEvents.player.ResetUpPlayer); + } + + return { + toPlay, + toPause, + toTogglePlay, + toRefresh, + toChangeVolume, + toIncreaseVolume, + toReductionVolume, + toToggleBarrageShow, + toChangeLine, + toChangeQualityLevel, + toChangeRate, + toSeekVideo, + toForwardVideo, + toBackOffVideo, + toRestart, + toToggleMobilePageFullscreen, + toSetLowLowLatency, + }; +}; diff --git a/src/components/page-watch-common/player/hooks/use-player-control.ts b/src/components/page-watch-common/player/hooks/use-player-control.ts new file mode 100644 index 0000000..94122a5 --- /dev/null +++ b/src/components/page-watch-common/player/hooks/use-player-control.ts @@ -0,0 +1,335 @@ +/** + * @file 播放器控制栏 hook + */ +import { translate } from '@/assets/lang'; +import { numberAccuracy } from '@/assets/utils/number'; +import { useChannelStore } from '@/store/use-channel-store'; +import { useConnectMicStore } from '@/store/use-connect-mic-store'; +import { useDocStore } from '@/store/use-doc-store'; +import { usePlaybackStore } from '@/store/use-playback-store'; +import { usePlayerStore } from '@/store/use-player-store'; +import { LiveStatus, PlayStatus, QualityLevelType, YN } from '@polyv/live-watch-sdk'; +import { formatSeconds } from '@utils-ts/date'; +import { ynToBool } from '@utils-ts/boolean'; +import { computed, unref } from 'vue'; + +/** 播放器设置节点 */ +type PlayerSettingItem = { + text: string; + value: V; + active: boolean; +}; + +export const usePlayerControl = () => { + const channelStore = useChannelStore(); + const playerStore = usePlayerStore(); + const playbackStore = usePlaybackStore(); + const connectMicStore = useConnectMicStore(); + const docStore = useDocStore(); + + /** 播放按钮提示文案 */ + const playButtonTips = computed(() => { + let text = ''; + if (playerStore.playStatus === PlayStatus.Pause) { + text = translate('player.play'); + } else { + text = translate('player.pause'); + } + + return text; + }); + + /** 是否显示暂停播放按钮 */ + const playButtonVisible = computed(() => { + return !connectMicStore.isConnectMicing; + }); + + /** + * 是否显示大的暂停播放按钮 + * @desc PC 端是只在第一次播放的时候才要显示,但是移动端无延迟的情况下又需要一直显示。所以这里暂时统一处理为都要展示 + * */ + const bigPlayButtonVisible = computed(() => { + return ( + playerStore.isPlayMode && + playerStore.playerInited && + (!playerStore.isPlayStarted || playerStore.playStatus === PlayStatus.Pause) && + !connectMicStore.isConnectMicing + ); + }); + + /** 常规的播放按钮是否显示 */ + const normalPlayButtonVisible = computed(() => { + return ( + // 播放器初始化完毕 + playerStore.playerInited && + // 暂停中状态 + playerStore.playStatus === PlayStatus.Pause && + // 可以进行播放 + playerStore.isPlayMode + ); + }); + + /** 是否显示手动播放提示 */ + const manualPlayTipsVisible = computed(() => { + return ( + channelStore.liveStatus === LiveStatus.Live && + !playerStore.supportAutoPlay && + !playerStore.isPlayStarted && + !connectMicStore.isConnectMicing + ); + }); + + /** RTC 播放器暂停播放的提示 */ + const rtcPlayerPauseTipVisible = computed(() => { + return ( + channelStore.liveStatus === LiveStatus.Live && + playerStore.isLowLatency && + playerStore.isPlayStarted && + playerStore.playStatus === PlayStatus.Pause + ); + }); + + /** 是否显示刷新按钮 */ + const refreshButtonVisible = computed(() => { + if (connectMicStore.isConnectMicing) { + return false; + } + + return ( + channelStore.liveStatus === LiveStatus.Live && + playerStore.playerInited && + playerStore.supportRefresh + ); + }); + + /** 音量设置是否显示 */ + const volumeSettingVisible = computed(() => { + return !connectMicStore.isConnectMicing; + }); + + /** 倍速设置是否显示 */ + const rateSettingVisible = computed(() => { + return playbackStore.isPlaybacking && playerStore.rateList.length > 0; + }); + + /** 可选的倍速列表 */ + const rateSettingList = computed(() => { + const rates = playerStore.rateList; + const settingList: PlayerSettingItem[] = []; + rates.forEach(rate => { + settingList.push({ + text: `${numberAccuracy(rate)}x`, + value: rate, + active: rate === playerStore.currentRate, + }); + }); + + return settingList; + }); + + /** 线路设置是否显示 */ + const lineSettingVisible = computed(() => { + return ( + playerStore.lineCount > 0 && + channelStore.liveStatus === LiveStatus.Live && + !channelStore.testModeStatus + ); + }); + + /** 线路设置列表 */ + const lineSettingList = computed(() => { + const settingList: PlayerSettingItem[] = []; + + for (let i = 0; i < playerStore.lineCount; i++) { + settingList.push({ + text: `${translate('player.line')}${i + 1}`, + value: i, + active: playerStore.currentLine === i, + }); + } + + return settingList; + }); + + /** 清晰度设置是否显示 */ + const qualitySettingVisible = computed(() => { + return ( + playerStore.qualityLevels.length > 1 && + [LiveStatus.Live, LiveStatus.Playback].includes(channelStore.liveStatus) && + !channelStore.testModeStatus + ); + }); + + /** 过滤清晰度切换文本 */ + function filterQualityText(levelType: QualityLevelType): string { + let text = '未知'; + switch (levelType) { + case QualityLevelType.auto: + text = translate('player.quality.auto'); + break; + case QualityLevelType.sd: + text = translate('player.quality.sd'); + break; + case QualityLevelType.hd: + text = translate('player.quality.hd'); + break; + case QualityLevelType.fhd: + text = translate('player.quality.fhd'); + break; + } + + return text; + } + + /** 清晰度设置列表 */ + const qualitySettingList = computed(() => { + const settingList: PlayerSettingItem[] = []; + + for (let i = 0; i < playerStore.qualityLevels.length; i++) { + const item = playerStore.qualityLevels[i]; + settingList.push({ + text: filterQualityText(item.type), + value: item.level, + active: playerStore.currentQualityLevel === item.level, + }); + } + + return settingList; + }); + + /** 延迟模式切换列表 */ + const latencyModeSettingList = computed[]>(() => { + return [ + { + text: translate('player.latencyMode.low'), + value: true, + active: playerStore.isLowLatency, + }, + { + text: translate('player.latencyMode.normal'), + value: false, + active: !playerStore.isLowLatency, + }, + ]; + }); + + /** 延迟模式切换是否显示 */ + const latencyModeSettingVisible = computed(() => { + return playerStore.supportLowLatency; + }); + + /** 控制栏设置是否显示(PC 端) */ + const playerSettingVisible = computed(() => { + if (connectMicStore.isConnectMicing) { + return false; + } + + return ( + unref(lineSettingVisible) || unref(qualitySettingVisible) || unref(latencyModeSettingVisible) + ); + }); + + /** 是否显示文档视频区域切换按钮 */ + const switchScreenButtonVisible = computed(() => { + return docStore.canRenderDoc; + }); + + /** 回放进度条是否显示 */ + const playbackProgressVisible = computed(() => { + return playbackStore.isPlaybacking && playerStore.durationTime !== 0; + }); + + /** 回放时间是否显示 */ + const playbackTimeVisible = computed(() => { + return playbackStore.isPlaybacking; + }); + + /** 回放时间文案 */ + const currentTimeText = computed(() => { + return formatSeconds(playerStore.currentTime, { segments: 3 }); + }); + + /** 播放总时长文案 */ + const durationTimeText = computed(() => { + return formatSeconds(playerStore.durationTime, { segments: 3 }); + }); + + /** 音视频模式切换是否显示 */ + const playerModeSwitcherVisible = computed(() => { + const isNotOnlyAudio = + !channelStore.isOnlyAudioLive && + ynToBool(channelStore.channelDetail?.channelConfig.isOnlyAudio, 'N') && + ynToBool(channelStore.channelDetail?.channelConfig.mobileAudioEnabled, YN.N); + + const isSupportPlayScene = + channelStore.liveStatus === LiveStatus.Live || playbackStore.isPlaybacking; + + return isNotOnlyAudio && isSupportPlayScene && !playerStore.isLowLatency; + }); + + return { + playButtonTips, + playButtonVisible, + bigPlayButtonVisible, + normalPlayButtonVisible, + manualPlayTipsVisible, + rtcPlayerPauseTipVisible, + refreshButtonVisible, + volumeSettingVisible, + + rateSettingVisible, + rateSettingList, + + lineSettingVisible, + lineSettingList, + + filterQualityText, + qualitySettingVisible, + qualitySettingList, + + latencyModeSettingList, + latencyModeSettingVisible, + + playerSettingVisible, + switchScreenButtonVisible, + playbackProgressVisible, + playbackTimeVisible, + currentTimeText, + durationTimeText, + + playerModeSwitcherVisible, + }; +}; + +/** + * 播放器控制栏连麦控制 hook + */ +export const usePlayerControlConnectMic = () => { + const connectMicStore = useConnectMicStore(); + + /** 主讲头衔 */ + const masterActor = computed(() => { + if (connectMicStore.masterIsSelf) { + return translate('connectMic.me'); + } + if (connectMicStore.masterMicItem?.isTeacher) { + return translate('connectMic.teacher'); + } + + return ''; + }); + + /** + * 主讲昵称 + */ + const masterNickname = computed(() => { + const nickname = connectMicStore.masterMicItem?.nickname || ''; + const actor = unref(masterActor) ? `(${unref(masterActor)})` : ''; + return `${nickname}${actor}`; + }); + + return { + masterActor, + masterNickname, + }; +}; diff --git a/src/components/page-watch-common/player/hooks/use-player-event.ts b/src/components/page-watch-common/player/hooks/use-player-event.ts new file mode 100644 index 0000000..c56b983 --- /dev/null +++ b/src/components/page-watch-common/player/hooks/use-player-event.ts @@ -0,0 +1,123 @@ +import { appEvents, eventBus } from '@/app/app-events'; +import { getWatchCore } from '@/core/watch-sdk'; +import { useChannelStore } from '@/store/use-channel-store'; +import { usePlaybackStore } from '@/store/use-playback-store'; +import { usePlayerStore } from '@/store/use-player-store'; +import { PlaybackMode, PlaybackTarget, PlayerEvents } from '@polyv/live-watch-sdk'; +import { onBeforeUnmount } from 'vue'; + +/** + * 播放器相关事件 hook + */ +export const usePlayerEvent = () => { + const playerStore = usePlayerStore(); + const channelStore = useChannelStore(); + const playbackStore = usePlaybackStore(); + + function onPlayerInited(): void { + playerStore.$patch({ + playerInited: true, + }); + } + + function onPlayerPlaying(): void { + playerStore.$patch({ + isPlayStarted: true, + }); + } + + function onHistoryPlay(evt: { historyTime: number }): void { + eventBus.$emit(appEvents.player.ShowHistoryTips, evt.historyTime); + } + + /** 处理回放播放结束 */ + async function onPlaybackOver() { + const watchCore = getWatchCore(); + const channelDetail = channelStore.channelDetail; + + const toPlayTarget = async (target: PlaybackTarget) => { + playbackStore.$patch({ + currentPlaybackTarget: target, + }); + await watchCore.player.changePlayback(target.playbackOptions); + watchCore.player.play(); + }; + + // 单个回放 + if ( + channelDetail?.playbackInfo?.type === PlaybackMode.Single && + playbackStore.currentPlaybackTarget + ) { + await toPlayTarget(playbackStore.currentPlaybackTarget); + return; + } + + if (playbackStore.playbackList.length === 0) { + return; + } + + let playbackTarget: PlaybackTarget | undefined; + const playbackLength = playbackStore.playbackList.length; + const currentIndex = playbackStore.playbackList.findIndex(target => { + return target.playbackId === playbackStore.currentPlaybackTarget?.playbackId; + }); + + if (currentIndex === playbackLength - 1) { + // 当前播放的是列表的最后一个 + if (playbackStore.isNoMore) { + // 已经拿完了回放列表,则播放第一个 + playbackTarget = playbackStore.playbackList[0]; + } else { + // 加载下一页 + await playbackStore.loadNextPlaybackList(); + const nextTarget = playbackStore.playbackList[currentIndex + 1]; + playbackTarget = nextTarget; + } + } else { + // 下一个是在本页 + const nextTarget = playbackStore.playbackList[currentIndex + 1]; + playbackTarget = nextTarget; + } + + if (playbackTarget) { + await toPlayTarget(playbackTarget); + } + } + + /** 音量修改 */ + function onVolumeChanged() { + const watchCore = getWatchCore(); + const currentVolume = watchCore.player.getCurrentVolume(); + playerStore.$patch({ currentVolume }); + } + + /** 绑定播放器事件 */ + function bindPlayerEvents() { + unbindPlayerEvents(); + const watchCore = getWatchCore(); + watchCore.player.eventEmitter.on(PlayerEvents.PlayerInited, onPlayerInited); + watchCore.player.eventEmitter.on(PlayerEvents.PlayerPlaying, onPlayerPlaying); + watchCore.player.eventEmitter.on(PlayerEvents.HistoryPlay, onHistoryPlay); + watchCore.player.eventEmitter.on(PlayerEvents.PlaybackOver, onPlaybackOver); + watchCore.player.eventEmitter.on(PlayerEvents.VolumeChanged, onVolumeChanged); + } + + /** 解绑播放器事件 */ + function unbindPlayerEvents() { + const watchCore = getWatchCore(); + watchCore.player.eventEmitter.off(PlayerEvents.PlayerInited, onPlayerInited); + watchCore.player.eventEmitter.off(PlayerEvents.PlayerPlaying, onPlayerPlaying); + watchCore.player.eventEmitter.off(PlayerEvents.HistoryPlay, onHistoryPlay); + watchCore.player.eventEmitter.off(PlayerEvents.PlaybackOver, onPlaybackOver); + watchCore.player.eventEmitter.off(PlayerEvents.VolumeChanged, onVolumeChanged); + } + + onBeforeUnmount(() => { + unbindPlayerEvents(); + }); + + return { + bindPlayerEvents, + unbindPlayerEvents, + }; +}; diff --git a/src/components/page-watch-common/player/hooks/use-player-keyboard.ts b/src/components/page-watch-common/player/hooks/use-player-keyboard.ts new file mode 100644 index 0000000..a2b0195 --- /dev/null +++ b/src/components/page-watch-common/player/hooks/use-player-keyboard.ts @@ -0,0 +1,117 @@ +import { isFocusActiveForm } from '@/assets/utils/dom'; +import { useLayoutStore } from '@/store/use-layout-store'; +import { usePlaybackStore } from '@/store/use-playback-store'; +import { onBeforeUnmount, onMounted, ref, Ref, watchEffect } from 'vue'; +import { usePlayerAction } from './use-player-action'; +import { MainScreenContent, WarmUpType } from '@polyv/live-watch-sdk'; +import { KeyCodeMap } from '@/assets/constants/key-code'; +import { usePlayerStore } from '@/store/use-player-store'; + +/** 副作用元素收集数组 */ +let _effectElements: Array> = []; + +/** 收集需要响应播放器键盘事件的元素 */ +export const collectPlayerKeyboardEffectElements = (el: Ref) => { + _effectElements.push(el); +}; + +/** + * PC 端播放器键盘按键 hook + */ +export const usePlayerKeyboard = (playerContainer: Ref) => { + collectPlayerKeyboardEffectElements(playerContainer); + + const { toTogglePlay, toForwardVideo, toBackOffVideo, toIncreaseVolume, toReductionVolume } = + usePlayerAction(); + + const playerStore = usePlayerStore(); + const playbackStore = usePlaybackStore(); + const layoutStore = useLayoutStore(); + + /** 焦点是否在副作用元素 */ + const isFocusOnEffectEl = ref(false); + + watchEffect(() => { + const canPlayWarmVideo = playerStore.warmUpType === WarmUpType.Video; + if (playbackStore.isPlaybacking || canPlayWarmVideo) { + listenKeydownEvent(); + } else { + removeListenKeydownEvent(); + } + }); + + onMounted(() => { + window.addEventListener( + 'click', + event => { + const targetElement = event.target as HTMLElement; + const isContainTarget = _effectElements.find(el => el.value?.contains(targetElement)); + isFocusOnEffectEl.value = !!isContainTarget; + }, + true, + ); + }); + + onBeforeUnmount(() => { + removeListenKeydownEvent(); + _effectElements = []; + }); + + /** 监听键盘事件 */ + function listenKeydownEvent() { + removeListenKeydownEvent(); + window.addEventListener('keydown', onKeydownEvent, false); + } + + /** 移除键盘事件监听 */ + function removeListenKeydownEvent() { + window.removeEventListener('keydown', onKeydownEvent, false); + } + + /** 处理键盘事件 */ + function onKeydownEvent(event: KeyboardEvent) { + // 没有聚焦在副作用元素 || 当前存在被聚焦的输入框 + if (!isFocusOnEffectEl.value || isFocusActiveForm()) { + return; + } + + /** 当前按键 */ + const keyCode = event.keyCode; + /** 文档是否处于主屏 */ + const docInMainScreen = layoutStore.mainScreen === MainScreenContent.Doc; + + // 空格键:播放暂停 + if (keyCode === KeyCodeMap.Space) { + event.preventDefault(); + toTogglePlay(); + return; + } + + // 右箭头:控制视频前进 + if (keyCode === KeyCodeMap.ArrowRight && !docInMainScreen) { + event.preventDefault(); + toForwardVideo(); + return; + } + + // 左箭头:控制视频后退 + if (keyCode === KeyCodeMap.ArrowLeft && !docInMainScreen) { + event.preventDefault(); + toBackOffVideo(); + return; + } + + // 上箭头:控制音量递增 + if (keyCode === KeyCodeMap.ArrowUp && !docInMainScreen) { + event.preventDefault(); + toIncreaseVolume(); + return; + } + + // 下箭头:控制音量递减 + if (keyCode === KeyCodeMap.ArrowDown && !docInMainScreen) { + event.preventDefault(); + toReductionVolume(); + } + } +}; diff --git a/src/components/page-watch-common/player/hooks/use-player-main.ts b/src/components/page-watch-common/player/hooks/use-player-main.ts new file mode 100644 index 0000000..da31a16 --- /dev/null +++ b/src/components/page-watch-common/player/hooks/use-player-main.ts @@ -0,0 +1,203 @@ +/** + * @file 播放器 hook + */ +import { onBeforeUnmount, onMounted, ref, unref, watch } from 'vue'; +import { appEvents, useEventBusListener } from '@/app/app-events'; +import { getImgSize } from '@/assets/utils/image'; +import { getWatchCore } from '@/core/watch-sdk'; +import { useChannelStore } from '@/store/use-channel-store'; +import { usePlaybackStore } from '@/store/use-playback-store'; +import { usePlayerStore } from '@/store/use-player-store'; +import { useLangStore } from '@/store/use-lang-store'; +import { LiveStatus, SetupPlayerOptions } from '@polyv/live-watch-sdk'; +import { usePlayerEvent } from './use-player-event'; +import { LangType } from '@/assets/lang/lang-enum'; +import { storeDefinitionToRefs } from '@/plugins/pinia/util'; + +export type InitPlayerOptions = Omit; + +export type InitPlayerOptionsType = InitPlayerOptions | (() => InitPlayerOptions); + +export const usePlayerMain = ({ + initPlayerOptions = {}, +}: { + initPlayerOptions?: InitPlayerOptionsType; +} = {}) => { + const { bindPlayerEvents, unbindPlayerEvents } = usePlayerEvent(); + + const channelStore = useChannelStore(); + const playerStore = usePlayerStore(); + const playbackStore = usePlaybackStore(); + const { currentPlaybackTarget } = storeDefinitionToRefs(usePlaybackStore); + const langStore = useLangStore(); + + /** 播放器渲染容器 */ + const playerContainer = ref(); + + /** + * 根据图片地址设置流尺寸 + * @param imageUrl 图片地址 + */ + async function setResolutionSizeByImage(imageUrl: string) { + try { + const { width, height } = await getImgSize(imageUrl); + if (width && height) { + playerStore.$patch({ + resolutionWidth: width, + resolutionHeight: height, + }); + } + } catch (e) {} + } + + /** + * 获取播放器的回放参数 + * @warn 副作用:修改回放视频尺寸,非回放状态清空 currentPlaybackTarget + */ + async function getPlayerPaybackOptions() { + if (channelStore.liveStatus !== LiveStatus.Playback) { + playbackStore.$patch({ + currentPlaybackTarget: undefined, + }); + return; + } + + if (!currentPlaybackTarget.value) { + console.error('处于回放状态,但不存在回放对象'); + return; + } + + // 先处理回放的视频尺寸 + if (currentPlaybackTarget.value.width && currentPlaybackTarget.value.height) { + playerStore.$patch({ + resolutionWidth: currentPlaybackTarget.value.width, + resolutionHeight: currentPlaybackTarget.value.height, + }); + } else if (currentPlaybackTarget.value.firstImage) { + // 通过首帧图来设置流的尺寸 + await setResolutionSizeByImage(currentPlaybackTarget.value.firstImage); + } + + return currentPlaybackTarget.value.playbackOptions; + } + + /** + * 获取推流信息 + */ + async function getPushStreamInfo() { + if (channelStore.liveStatus !== LiveStatus.Live) { + return; + } + + const watchCore = getWatchCore(); + const pushInfo = await watchCore.channel.getPushInfo(); + if (pushInfo.resolutionWidth && pushInfo.resolutionHeight) { + playerStore.$patch({ + resolutionWidth: pushInfo.resolutionWidth, + resolutionHeight: pushInfo.resolutionHeight, + }); + } + + channelStore.$patch({ + currentStreamType: pushInfo.streamType, + }); + } + + /** 初始化播放器 */ + async function initPlayer(): Promise { + const container = unref(playerContainer); + if (!container) { + return; + } + + if (!playerStore.playerEnabled) return; + + const watchCore = getWatchCore(); + + playerStore.$patch({ + playerInited: false, + isPlayStarted: false, + }); + playbackStore.$patch({ + isPlaybacking: false, + }); + + let playerOptions: SetupPlayerOptions = { + container, + lowLatency: playerStore.isLowLatency, + language: langStore.currentLang === LangType.Chinese ? 0 : 1, + }; + + // 其他参数 + if (typeof initPlayerOptions === 'function') { + playerOptions = { + ...playerOptions, + ...initPlayerOptions(), + }; + } else { + playerOptions = { + ...playerOptions, + ...initPlayerOptions, + }; + } + + // 获取回放参数 + const playbackOptions = await getPlayerPaybackOptions(); + if (playbackOptions) { + playerOptions.playbackOptions = playbackOptions; + } else { + await getPushStreamInfo(); + } + + await watchCore.player.setupPlayer(playerOptions); + + bindPlayerEvents(); + + if (playerOptions.playbackOptions) { + playbackStore.$patch({ + isPlaybacking: true, + }); + } + } + + /** 销毁播放器 */ + function destroyPlayer(): void { + const watchCore = getWatchCore(); + watchCore.player.destroyPlayer(); + unbindPlayerEvents(); + } + + watch( + () => channelStore.liveStatus, + () => { + const watchCore = getWatchCore(); + const supportLowLatency = watchCore.player.getLowLatencySupport(); + playerStore.$patch({ + supportLowLatency, + }); + if (channelStore.liveStatus === LiveStatus.Live && supportLowLatency) { + playerStore.$patch({ + isLowLatency: true, + }); + } + + initPlayer(); + }, + ); + + useEventBusListener(appEvents.player.ResetUpPlayer, () => { + initPlayer(); + }); + + onMounted(() => { + initPlayer(); + }); + + onBeforeUnmount(() => { + destroyPlayer(); + }); + + return { + playerContainer, + }; +}; diff --git a/src/components/page-watch-common/player/hooks/use-resolution-size.ts b/src/components/page-watch-common/player/hooks/use-resolution-size.ts new file mode 100644 index 0000000..e779b6c --- /dev/null +++ b/src/components/page-watch-common/player/hooks/use-resolution-size.ts @@ -0,0 +1,124 @@ +import { getWatchCore } from '@/core/watch-sdk'; +import { usePlayerStore } from '@/store/use-player-store'; +import { PlayerEvents } from '@polyv/live-watch-sdk'; +import { onBeforeUnmount, onMounted, Ref, unref } from 'vue'; + +/** 获取视频宽度 */ +function getVideoWidth(videoElement: HTMLVideoElement) { + if (typeof videoElement.videoWidth !== 'undefined') { + return videoElement.videoWidth; + } else { + return videoElement.offsetWidth; + } +} + +/** 获取视频高度 */ +function getVideoHeight(videoElement: HTMLVideoElement) { + if (typeof videoElement.videoWidth !== 'undefined') { + return videoElement.videoHeight; + } else { + return videoElement.offsetHeight; + } +} + +/** + * 播放流尺寸 hook + */ +export const useResolutionSize = (options: { + playerContainer: Ref; +}) => { + const { playerContainer } = options; + const playerStore = usePlayerStore(); + + /** 获取 video 节点 */ + function getVideoElement(): HTMLVideoElement | null { + const containerElem = unref(playerContainer); + if (!containerElem) { + return null; + } + + return containerElem.querySelector('video'); + } + + /** 重试定时器 */ + let retryTimer: number | undefined; + /** 重试次数 */ + let retryCount = 0; + + /** 设置重试定时器 */ + function startRetryTimer() { + removeRetryTimer(); + retryTimer = window.setTimeout(() => { + refreshResolution(); + }, 100); + } + + /** 移除重试定时器 */ + function removeRetryTimer() { + retryCount = 0; + if (retryTimer) { + clearTimeout(retryTimer); + retryTimer = undefined; + } + } + + /** + * 刷新 video 标签的 videoWidth、videoHeight,改变视频流尺寸 + */ + function refreshResolutionByVideoSize(videoElem: HTMLVideoElement) { + const videoWidth = getVideoWidth(videoElem); + const videoHeight = getVideoHeight(videoElem); + + const notNeedRefresh = + videoWidth === playerStore.resolutionWidth && videoHeight === playerStore.resolutionHeight; + if (notNeedRefresh) { + removeRetryTimer(); + return; + } + + if (videoWidth > 0 && videoHeight > 0) { + removeRetryTimer(); + playerStore.$patch({ + resolutionWidth: videoWidth, + resolutionHeight: videoHeight, + }); + } else { + // 部分流还是需要通过重试轮询来获取尺寸,设置轮询最大次数为 100 次 + if (retryCount >= 100) { + removeRetryTimer(); + console.error('无法正常获取视频流的尺寸'); + return; + } + retryCount += 1; + startRetryTimer(); + } + } + + function refreshResolution() { + const videoElem = getVideoElement(); + if (!videoElem) { + return; + } + + const isVideoDataLoaded = videoElem.readyState >= 1; + if (isVideoDataLoaded) { + refreshResolutionByVideoSize(videoElem); + } else { + videoElem.addEventListener('loadeddata', () => { + refreshResolutionByVideoSize(videoElem); + }); + } + } + + onMounted(() => { + const watchCore = getWatchCore(); + watchCore.player.eventEmitter.on(PlayerEvents.PlayerPlaying, refreshResolution); + }); + + onBeforeUnmount(() => { + const watchCore = getWatchCore(); + watchCore.player.eventEmitter.off(PlayerEvents.PlayerPlaying, refreshResolution); + + removeRetryTimer(); + }); +}; diff --git a/src/components/page-watch-common/player/imgs/icon-pause.png b/src/components/page-watch-common/player/imgs/icon-pause.png new file mode 100644 index 0000000000000000000000000000000000000000..4134bd114e417ed83bf769aea6173e9aab98de6b GIT binary patch literal 303 zcmV+~0nq-5P)D5Ym^XN^nz4|!qizpRA=sWZ;3oa}RZnDBc4ztJIWHOoT zB$Hnh{-|(%WD$&r6|ew)ffq^N_e?Azo`F3u20kUNQ#eV2SJ1Bp&;@vu^p^r}evgO| za0VV4@8_w><`8@Zb}cebl1@DdPJo|QpQWUaE}R^KZ@{JnGLv-dNpK1rT7BLnZA~yo z$%wFmO`-e`)@sC#30n9NB8nVP5J5rg6bn1S!pa9wL=+K4M2=$X z8+gBL`5*x=nK2nBJ6~a7x`h3k6|yf&IKNcO7ee?0Oagy_7T^L{wx6V@SpO>%7((a( zwt=<`$T2W1=_CfS7H}Wvt^;@krhyqr&t*ct07D2}K;CqYk~B}tLS_L6f%O6dTAKfW z*)r110uBLd1%TH0m=Q-bE|m9+T_ z%sUBxy3hS9cKwmqG}AB1)@)bPjO&To?NaA@v*32S<$A;FcFXVj(B$^m>H6Rvt@`K# zHVQ2G(aWPwAa4N_zkajiLI}1D_0&nRx&ku+epdlom0?wI=~vzoy%n%FU^O`+R$HQ% d9!r4%-T>!D@F{cHFPQ)U002ovPDHLkV1hl-*E|3K literal 0 HcmV?d00001 diff --git a/src/components/page-watch-common/player/imgs/play-btn.png b/src/components/page-watch-common/player/imgs/play-btn.png new file mode 100644 index 0000000000000000000000000000000000000000..fafd0896e24c759f473de6f9cc4664cce6463571 GIT binary patch literal 7531 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 KxBQMx#Qy>6@HgTB literal 0 HcmV?d00001 diff --git a/src/components/page-watch-common/player/imgs/player-no-live.png b/src/components/page-watch-common/player/imgs/player-no-live.png new file mode 100644 index 0000000000000000000000000000000000000000..0634450d7647c55ca7da54a6392dc33d0d83b00d GIT binary patch literal 55165 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 z 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 z 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�(IdCGr9wJcoc~(eB8aSZw1#S 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 literal 0 HcmV?d00001 diff --git a/src/components/page-watch-common/player/imgs/player-stop.png b/src/components/page-watch-common/player/imgs/player-stop.png new file mode 100644 index 0000000000000000000000000000000000000000..da641688bca80b67716894701fa8fb71b42fd2ba GIT binary patch literal 58603 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 LV}J2JzgzzUR8YG7 literal 0 HcmV?d00001 diff --git a/src/components/page-watch-common/player/player-control/mobile-player-control/imgs/low-latency-active.png b/src/components/page-watch-common/player/player-control/mobile-player-control/imgs/low-latency-active.png new file mode 100644 index 0000000000000000000000000000000000000000..66f04849d54be077177ba5609ac7081058fd97c9 GIT binary patch literal 254 zcmeAS@N?(olHy`uVBq!ia0vp^Dj>|l3?zm1T2})ptpJ}8S0MeLIMBBHls-^3Z%L3} zFaygf?n8a5^S9TR>BueHP?QFgDD!l24AD4$^xQ_yh5!NPfTM0}jvTwixTb{np?~6A z4ZSBEW{0+)){C2ZVD8!(MmBokf99K-*iOnmCAfXH)drzMVi&Hmne17txqxlAyZWa6 zB@8FeUUeudzM6FAuZgszTn|jn9?&c0+HjuH zk%g_`{DDbVG(Vhb=x&kw(tq;)rOCUL3MK}yJn~F^pp>exkB6b+`hm@Ca;@uG3vT}L z-pZGtUzF3wd#w7n)Q)Qm0&iUF4n};CSD2+N^5Gc=>l{m`=_h3h<^0$mDQ)LjBPx(@ slD_Qw<0L*c?Y#$%F8eDGy{3jCz-P`WTfWBgKo2o^y85}Sb4q9e028p7EdT%j literal 0 HcmV?d00001 diff --git a/src/components/page-watch-common/player/player-control/mobile-player-control/imgs/mobile-player-ui-fullscreen.png b/src/components/page-watch-common/player/player-control/mobile-player-control/imgs/mobile-player-ui-fullscreen.png new file mode 100644 index 0000000000000000000000000000000000000000..38521a938e135cbe93b68423cb4422bb1e8764eb GIT binary patch literal 178 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|ep#Yx{S0Mc#71#x>wE~K=mIV0) zGpMb7_i@ful@6eQm#2$kh{y5d1PRu~4BQDJoUBX&+%DFf2^s=?u3-XM9Sa>qLmdU$ zn8HI?6(zV7Cf%r1_B^N|;mfa*D$^9%pYTj|#$We?8VpPf)1Dd$&rD=#0-DO;>FVdQ I&MBb@0C6HXPyhe` literal 0 HcmV?d00001 diff --git a/src/components/page-watch-common/player/player-control/mobile-player-control/imgs/mobile-player-ui-pause.png b/src/components/page-watch-common/player/player-control/mobile-player-control/imgs/mobile-player-ui-pause.png new file mode 100644 index 0000000000000000000000000000000000000000..bde8ec6aed37222a4c1c145cf236b9594dcebc5a GIT binary patch literal 644 zcmeAS@N?(olHy`uVBq!ia0vp^0U*r51|<6gKdl8)jKx9jP7LeL$-HD>V6yXcaSW-5 zdpp}P@3w(}>wlILYO&^ydJ{tPFYW$fu-7|(QmCGQN~HB{hIvhGQ@Prdy8p>p=gwz5 z%yz_HMgD(}LMPY9jT|jY-EkgwqN1aHr`*8ldn9=W}bQO|PT%%vaC19k1`=qOFA zoBk#E(%L0o%M8RP$*KPB=!kc|t-7Jj?CQtqeM_%2MyKEL-j%)7tE#@k^iTbSFK+|X z!;Z%@ZDe^6Fx}{L_Y!r_x8>hkF8+%1+|}6;>TkQIZ$HbO3(KS)OkMI^@W8_T2OD`G zl)CJZE%+0Ls zivD%wz`diZ^gdnvSpBSj$M-bT31@9IxK~yUw2=7!|Y2T`AqBk?2j)rX^lR9b-iN9 z@%!nEiW-=YtZe+S=-*xGeB@0zrwJc5o?YTL)5pLBHW0m$jM_37)X~?*@~Qif7afo3(B0wJNtaX zF;rm}I$SOD51Bvv>MZ{%;waKwATIr%3$d}#LFH7rFqEiFA}(4%DFOqwoqcWNBuDt{ z=@G3sU*0~l?IeZ>^X=a7hmuHF;l$T3UPda7-w}U8k#ZT;_+LBL$GO}&u!xRD?97mi z5*_8w+DzT}X{lA+7Rl{2gH&2g$^71hQ;IGs22+y}aby}azrSUD-Ia2H7u0JFzqR(0{Ip;TjpLrt=$4@`G`;EGbE3{tg4;1+s2!*|39o)ozlg zZ4P!F)aN$t(v%@f?97#wxy~bO5wFxIO-jV(jM&LFOi$IiQJ40zSi7lf%GH(iPdNJD zK1IgO1)3oIX`4QqVfc(@0--d?Y7q{Jm_454enCIvgnhtWppU^@Eun+*{MHYTHlnAc zDNRWRtD6gp`cmc*x1l*p0;tohu5ag{EdhVVsJ=ZudE9LMGM`zL*#7YDX6V2SvSb;t zh?oG=5?WV_twK!k_Vvfzu|Lc+31RQ&4Vh->scQkRFXqR4C{eWcD_+it8^{=xF__x; zfXksI<7Z;t4EO(7`)DKZ6sdLfjskP(M(5Bl=kGpmpc*Z@S(5rPfBOk%s4C5o38$b{ qWSh2koM|{V?8~E5ME&3E$FvuO46@Cu-gAfF0kCd3*JfwZy?+7yei6F> literal 0 HcmV?d00001 diff --git a/src/components/page-watch-common/player/player-control/mobile-player-control/imgs/mobile-player-ui-refresh.png b/src/components/page-watch-common/player/player-control/mobile-player-control/imgs/mobile-player-ui-refresh.png new file mode 100644 index 0000000000000000000000000000000000000000..774c19b4850f2d90e0156084689c0220f3bcefbf GIT binary patch literal 979 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 + + + + + diff --git a/src/components/page-watch-common/player/player-control/mobile-player-control/mobile-player-control-setting.vue b/src/components/page-watch-common/player/player-control/mobile-player-control/mobile-player-control-setting.vue new file mode 100644 index 0000000..6f96af2 --- /dev/null +++ b/src/components/page-watch-common/player/player-control/mobile-player-control/mobile-player-control-setting.vue @@ -0,0 +1,101 @@ + + + + + + diff --git a/src/components/page-watch-common/player/player-control/mobile-player-control/mobile-player-control.vue b/src/components/page-watch-common/player/player-control/mobile-player-control/mobile-player-control.vue new file mode 100644 index 0000000..710a939 --- /dev/null +++ b/src/components/page-watch-common/player/player-control/mobile-player-control/mobile-player-control.vue @@ -0,0 +1,280 @@ + + + + + + diff --git a/src/components/page-watch-common/player/player-control/pc-player-control/connect-mic-setting.vue b/src/components/page-watch-common/player/player-control/pc-player-control/connect-mic-setting.vue new file mode 100644 index 0000000..6d53bb9 --- /dev/null +++ b/src/components/page-watch-common/player/player-control/pc-player-control/connect-mic-setting.vue @@ -0,0 +1,106 @@ + + + + + + diff --git a/src/components/page-watch-common/player/player-control/pc-player-control/imgs/icon-call-audio-close-hover.png b/src/components/page-watch-common/player/player-control/pc-player-control/imgs/icon-call-audio-close-hover.png new file mode 100644 index 0000000000000000000000000000000000000000..055fa5156997e6cbafa0a883888cf1df0fc0ec18 GIT binary patch literal 2360 zcmV-83CH${P)4BiJHhHOnw3F_#B=N~FgGf|kY$cmmRK#egAMFJfvk#P!AK zWy|)6Krp6TWa9xqzV3lw6Nrh)FgJEjAKlM^HqWnvCYj5=cL;Pt@=QBj2qZFfp$t?C^#Sn|#E~aUm?5 zPulsw%#(c2#&DA@+z+U%U4{)T$B=wEF?o&rdv;*4pqXiTlJ6zL9N2vVF)f#^@4EmP z@T22l{#$xR_1Rhms??dSOq3|WNV7;JIJ$A^CDcqch@Mj&_FS?8dqPE<| zk`Z6gHr)DEmL{Zt71<{_!2`Y$OscKs_RgGB^x{X0fFxGMFwX`e*@q#)Z9YFPtF7T* zyV}|R34!5DbbM1iej#am4nT7G;31f?b_$!i0^hAN+S464d!bHiZjJZTvr1&Mh})7O zK2iwqZkN%X5U5(9v9^sTB~@f4>j!?~JGCKhEe8B2x&wijs$s**?pz7JQC5yg+vl>b zSn!_+fs5}^pMxLaaY2{msqc?hoQNCKWw>&oM#ii8YB5BPX%bgi8k7P|%l$R)>B$!Q zFgqUNgX#A{OE&>{C=sTsOYNFU4uMKbKXj|b!}L4{EFFUM*|bb~KUQqNh5yc8s>;&E zDd3lG+14%RKYV^nsjcB=^E`Qt%J%HS($?;l4ao>SH@mLz>a6$X^w4c zk!vSYWo0@cUMnM}aOeS%6n zAj!A=z=YZ`_vQgV(H5R^hpKT#BE;+5vcZ_{kgdC1Bv&TFys}dQm6oovr60TEvNjRn zS#BlMh@Jm)l-JkcN0O#y10?uV#R>S{mg#J8|2BGw%Kui6IRa`RwZ}4fgk?BA`%)i_ z>QC;LgW%Legey8FP<6Kkrkb$NePa4c_zibk>)eY!#?yj^dBM}B5A)(RSU}QgyPboq z8E3)92-vtbr{@Q45)%_)ZgAT&hnn4@S6tq2uIP*YTW;s!P6?PF1D2kJbct&hUQI;! zP4iq8(|IZ3SCGEoF+|q;e7Lf


V#CP{biz`cNO%ibYZQX0ayCqi7}mTA-d9iZVZ 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 literal 0 HcmV?d00001 diff --git a/src/components/page-watch-common/player/player-control/pc-player-control/imgs/icon-call-audio-hover.png b/src/components/page-watch-common/player/player-control/pc-player-control/imgs/icon-call-audio-hover.png new file mode 100644 index 0000000000000000000000000000000000000000..579c3f4742457129b55371a1a26702b2b01cc178 GIT binary patch literal 1420 zcmV;71#|j|P)_h2g_T%DS}h4OGg~S8!OcoqDp24{h(;L^9I4tawAdi z4nl*ZKp}7>lOT3t1lHQCc&Sn%6%zs*d-MFc`IEt7*S zfQ<4$(4m3lc7$8YJCE{fAmw@C>ptMgGX}9k1`duLi$7do*RJ7yI+)`Kiy=+P21|#; zi{(b5tO&R{uTGrJP8)U_#EKUp_;?-ZQXy<*GzF5d)#O*#kY;f&ELPO;bUXFo>MvY`!nRNXq` zsij{MQ9j~FS2+aQ0gX-@8Fwegv@GFuKStBCb=x)i>fdVj5V)R*($|Gp1_4K2u!*SQ zTZi|2u&FYAzKvIEFgH?_>Ki67oI=Aj;Isc#T6Dujoa2E$T_|knU9U{sWY+g!lY8+D z-9=UmPagusQe>!~62Q*+UR8&8?np#Avfw-r zY*HJb2h&0Ua&oK5w#*AM=N&(o&*@rAlakVT4}sqjQM&7z%%@KTLQQHBG%G_Oz}c;h zJd*xClmpGp$xVkm&+Vgjly!v(So%WJqRb(KrX69-dnhzSBV{P2h#XlNEaWcR9$d|-eL@hCqpNT7D3#wNRP8B%Yt7@V1i@OT!9 zL0+o_W10a+$2{rNVN~Ou*44aLkbwKokflA67I+S~POibUuNE?ylS+fK*m`BR0_V@- zq@Y?4hCOzaFX!Imd7smv4VtBHwRnXMaz)%^W`51I)j?P-hAl03q|I5Lu40|NhDS>x z&=ZBMVg^#XpZRf<-{&eB$mMR>(zA}RFKcI%r+9lKlZ&S3`-~4X{@;$&_U#T&7x*s# z%spi?D>~j5TgiI;F-vtx;DDstJWb@E+ee}1_)1>M2esft7PhoN!0xP-IeEh%R<}0d zBa&J3aX-E&`e#Y3U5~dNVWYQsxXUgA3*#pD_NS!iNEvF<>mqhQ%9bS$0$7?b`D;;x z1q6bY9s;lp(wr)?*%o zHISb03o@@f`4fl@b|d!tZ4AB%cmaegJuP4f;HHKD-^c(QBCy>y`D3|`sE9z?Xx$N2 zwI9QDN0=;^5T^~|;Fy^>(efm_%LSgfn<`b%-}z#r;6T|OkO<@h zGfbew5Dj7kbOF%Bo(u0{BFemdzeJqG=WO#^l7aoiUZLFz-y5%nPbsK9w~`_rEB|^)WxbtTO=(nnX3zc z?Z8Qyk;RfeFEN?{I0c9mtmI2cCzs6C1weF+gEJ!wB<(CQngNJ;V!ldtN-EkAy8!S& z7m$kQ$j966HD9suz6R?n)px!b0L@ZpRs&@Xuy4`LintbmIbF#1-L*bH@Z0uOH?lT= zh5?v&W3fHeqeNTE4g>I4?VNs~q%l!oRjG+lk{!|Ah@5YTxinG?d{B$t&*0u0eB8rnJL{V z>AuX0|sfS-W8 zSk9L8K@CI@S`(vHY@Y?ZpV^FJK0?xO^8!enW)pCEruYePhNQT7?~zFnTegFq{17-b zGq*|7mAU=+KJ++kJBm1pIhS>kf`uE9Nl=Tn*Cy^Lx3yH#){y|DRj3zpa6c;~y*>oQ z*vMVm7Y2h}+l%HDZ{$ams#zuKiX7ks?+WlM) zTw@AVingN;UZ{~+u`AyOJSu76*fGq&D9>z1Aa4d9s5OtMxvM0-*fdY;mD2XLiL9;b z26-Dq)K{Z8*`#Cp#Kh1A`I}1wXSJlfrO%nB6+lXjVMP^x1&JFS>p@8$mjJPS8gMIc zMFTxQ5@9wHfCS=_^k(I-21kDY-UMRnkF!(cY?ZfBPw|O!%(=k%z|jr!{1R_^B)u|9 zKt=|TKt#9M2n4%42?=(4WeLq*1R#NkF|iBZ4xBzF6dwWi1Di`5LotAXDznc6;&>ft zQA7zQN-@%Hy`;Cg2BH^$tljPhoS9xDEdds$-??Ag(itl#_2^*RB>mmh@oL;y01R`Y z?JC&U@fm=&2>u^dAohj0eunIj)YSLeVlnUkldOSw4fSNQe!Zl4D>-(V7=W>R+A!gN XEGPd!$z=mF00000NkvXXu0mjfzZNAp literal 0 HcmV?d00001 diff --git a/src/components/page-watch-common/player/player-control/pc-player-control/imgs/icon-call-video-close-hover.png b/src/components/page-watch-common/player/player-control/pc-player-control/imgs/icon-call-video-close-hover.png new file mode 100644 index 0000000000000000000000000000000000000000..235386c2522a8aba256467b652246abd27398358 GIT binary patch literal 2626 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 literal 0 HcmV?d00001 diff --git a/src/components/page-watch-common/player/player-control/pc-player-control/imgs/icon-call-video.png b/src/components/page-watch-common/player/player-control/pc-player-control/imgs/icon-call-video.png new file mode 100644 index 0000000000000000000000000000000000000000..be8d0c48b1b8e2ba457922d905b4ec1ecd8b5c70 GIT binary patch literal 1274 zcmVkPN+r^eGu;`jmJc4;9ZYI6%!*g zX-TSt5TXqc6p4w@4luCfFZ;XMclSHz`_6aIxw$vBlAC+Z*{}8A>%F#^=A>!PKSKo& z5i@~{fqB3zz~7Hdm-I963-A-L6?j{czfXuJ3?L#70+s?-0%t<&O9|j3;ALQgq`$f# z=?owu4gjtK?gNhPa(K4pdteQ)QIdhRrcMAN;uv5Pa7OEs+D+U6ESB^`yXo!4J+@y& zoC~}G98q(~Kfs5;TfoOj=dJrD+k$Pvpf3T=0W8Imegzgv`k)Pnfg}(SmjllO2Ns+E z2|Nj`mt+PSDI$CUD}kGUgNp@!1J_D=wP~Z)0MgCBSHrwjX@#U8n+~fRkBFmz$ACpO zAQm)9q7{Io^VZK?ZES37B|XrE@p4T>tWFLg=gHEX+s`H%0VHp;y)alae}$yiY8W{@ z>A3a$5TC1qtYR;E0?yO$ksSSW7zzfA;t0g^{{}vI};}yUiz+nwi z`5k!Jsw2tvlRF7Z;{Ia&5=k%B?b#PV3Q{`@Kfg)R;^I(8-8Vb9ReP#SB{@3hAYLzQ z!f|3wU9f8ca5L~kwzqF{Y)lzu zHGid~^%;QcfM>JKtTw0gy7^KRNfMtI>U6!N=dv@bZjWSZo$OuR7Qp+!1=-~JlD1@< zZ?*@?#_yJNZ=Kro`Yj^v0`AGiH%nTWo#FG%M@3sCjZ?jT60rN6oh`N-vuCJOs2o2{ z(q{t#I2HIbTeC~joa_vL{<_z=fA0stDsf1*c!s3C+2(!6+W?6O@9%vo+AC?yLq&u? z|B;RFk#uNV6`BkHC4)l+Fcnp3r=*kGN?_U>@u=OX>*y~==|;;ywpG&knGsLc%#_E=0ug2CbxnU0iVp1Ag8Hi!G z7HR#N^kSxdT2i*|Rz8o%|=J9pbM@!xl|A@>^~hJ*#~_Yt z+}sIEp!3N?TKGSJAzftWZT3$IM8rkF)4)-kudaTf>x>&Ez0-EzP7;U+Kj;mc`HJV= klKk-3iuPLoQ$~gU1uJA`Pdh{pWdHyG07*qoM6N<$f_m^=TL1t6 literal 0 HcmV?d00001 diff --git a/src/components/page-watch-common/player/player-control/pc-player-control/imgs/pc-player-ui-barrage-close.png b/src/components/page-watch-common/player/player-control/pc-player-control/imgs/pc-player-ui-barrage-close.png new file mode 100644 index 0000000000000000000000000000000000000000..6e8c328042c495a2c72e6f16bc90dc4c21b77a8e GIT binary patch literal 468 zcmV;_0W1EAP)bI$iUKdvb9m{}#z6RRDl53@($0yy?1={g+@VL#x&Jzx-+lC^txlXmSsdu5))*4%EzA zLgAeQUw~?$M$&6C30a|L=I5RB`Xex_{4}trcSOa7LW68&8=QD#<=VXY?+xgdbXEp5*REf!m#DiXA4dV52DX10 z4sN>;y}v1GJUwlED0t{@=ug)1<$XNyZG0sn{htAws=Gh`0zLt7oA8Yi4xWhs0000< KMNUMnLSTaCS<`d? literal 0 HcmV?d00001 diff --git a/src/components/page-watch-common/player/player-control/pc-player-control/imgs/pc-player-ui-barrage-open.png b/src/components/page-watch-common/player/player-control/pc-player-control/imgs/pc-player-ui-barrage-open.png new file mode 100644 index 0000000000000000000000000000000000000000..65e254bfd78f29d82d40b4b20dbee7ab5c2ca9be GIT binary patch literal 274 zcmV+t0qy>YP)x5Y){4jGX|(9Q%!41oc@Cu?OAOS4m@M*W5Su Y1Nq=w6=8p1g8%>k07*qoM6N<$f;fz782|tP literal 0 HcmV?d00001 diff --git a/src/components/page-watch-common/player/player-control/pc-player-control/imgs/pc-player-ui-fullscreen-cancel-hover.png b/src/components/page-watch-common/player/player-control/pc-player-control/imgs/pc-player-ui-fullscreen-cancel-hover.png new file mode 100644 index 0000000000000000000000000000000000000000..71bd930c4faa5df845c4b306edd84067b32f68c5 GIT binary patch literal 625 zcmV-%0*?KOP)kadhDIn5@fE@H|C#Iaw z1i<0!-qMzdvUyOfa>5{@Mm!n{v5)&UmPRQ=s)1;A8mD4Y&AL8=he0338K z#M5P72x|c1l;J+vWV%k9N}=GG%nM;vfgrMZAW8v{^iaUr*v0@j6<9@yQUN3@0dK9Q z+lp(JqyVzWaqlcLJK_IfB@pqw3fsreUi~Z1MkxW7O8D1Rteqw~AKMeR`;!kM*ylz} zhXTRcoF02cflhyRMlc_8A#?(8f@thA$8knw%mzRuYDLajdj)<0iww;`<{F**00000 LNkvXXu0mjfD?kTP literal 0 HcmV?d00001 diff --git a/src/components/page-watch-common/player/player-control/pc-player-control/imgs/pc-player-ui-fullscreen-cancel.png b/src/components/page-watch-common/player/player-control/pc-player-control/imgs/pc-player-ui-fullscreen-cancel.png new file mode 100644 index 0000000000000000000000000000000000000000..7a04fca00452812e92462c547733d4e0223df5f8 GIT binary patch literal 580 zcmV-K0=xZ*P)c^7P;6u*uqU~7 zH<|rNHVb>*-6om&%|ADp%o08Su;>0`0O(r5&J_?5@dRNE;2FRf$x(i69{{F4PXKJ@ zAxZ&6WE;R`Hv5$1V~FjdP{1~OOY+eE!3FRNU_BfB1K^0{ecKQf0mdZP>HwHI!5~~g z$pey{3A#&x9RLpi<}3rzA!-8{r$uBBz_kX#XQ=Mh^R4U6LRtu)q0RubN+b=Sfk+;} z2La%2CcWjdMWBcRaE&=wnEgNUL%|DE#fJu|umQAt%zD9wj7u(quvJa{zN+bc$ zM2TnsniJTe#BSO9iKGA=N{mQusLJV3MVCf_>6ii~DgoR8IM5o@R*l;AEC};{;v)Ng zQg+8K+Ct{F(u=n63I(7AF06$_#6X+_*z(ozNdjo;Qy3Sm8VvI4QZoG(BP_LouCLX|GSePg@{g6p$KbdaJhd=Wsr2%V{ zKUR7Fh61K07!laDue~$xvvX#Z(%k*jKomE}-leQ#t$A9rI9$8s<#&9v__pmIsm=R| zN(u05c@ej+S&s@xb>urqNdZHKMFgr7fI6I#@3AqVptKW^?!vx z;>F9MAF<-y4lGCkQ&S)T5&#`wgg^t~auR?o1ScQ?&_KAH1Yirn3F;#todSS{WtU6+ z@LVX{(#!%9;JHv{WWwQ$kopKo2|xv+7b@aDpiY4LOFs42tWsp=_P)Nq(YZM+^`oA^ Y2mXrEF}Ru@`2YX_07*qoM6N<$g2T~?>Hq)$ literal 0 HcmV?d00001 diff --git a/src/components/page-watch-common/player/player-control/pc-player-control/imgs/pc-player-ui-fullscreen.png b/src/components/page-watch-common/player/player-control/pc-player-control/imgs/pc-player-ui-fullscreen.png new file mode 100644 index 0000000000000000000000000000000000000000..926876608aaf44c05f88f8adc227db00d48aea40 GIT binary patch literal 364 zcmV-y0h9iTP)@CRZCR$vVngdrFN)?fv8K=h9lf`UM5qmo1yxhcW@j$_|DM@nNsBcC*) z114l{PDUMZ&aD9)0c-&*W5tU|k-N@0mw?j&xBxha$Sqv^HThe_6~H2g{sclkWjp|E zLNPHRCjh$~5q`~tLVUWji0u2d#f02b?KId(zqR`5IuTjr3K{flDe+uqzpV?;P*_jQ z5ff5Me=Ob{NfFSX9@{fjkDU>7gd{+>7MZVFSkXnVTGb0000< KMNUMnLSTX{oRy3K literal 0 HcmV?d00001 diff --git a/src/components/page-watch-common/player/player-control/pc-player-control/imgs/pc-player-ui-pause-hover.png b/src/components/page-watch-common/player/player-control/pc-player-control/imgs/pc-player-ui-pause-hover.png new file mode 100644 index 0000000000000000000000000000000000000000..f6b94401fb1c8c9d9493e0f14361fcd13b7723af GIT binary patch literal 283 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpUtN1iT@AsNnZXCCA{@;!W;i**WM(zv!n)Nver@W!tF4dgTe~DWM4fFg9`v literal 0 HcmV?d00001 diff --git a/src/components/page-watch-common/player/player-control/pc-player-control/imgs/pc-player-ui-pause.png b/src/components/page-watch-common/player/player-control/pc-player-control/imgs/pc-player-ui-pause.png new file mode 100644 index 0000000000000000000000000000000000000000..0b0e1fa1ecf98711e3d9cdc1862fff4bd56f4d9f GIT binary patch literal 265 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 Hu0mjfpdKir literal 0 HcmV?d00001 diff --git a/src/components/page-watch-common/player/player-control/pc-player-control/imgs/pc-player-ui-setting-hover.png b/src/components/page-watch-common/player/player-control/pc-player-control/imgs/pc-player-ui-setting-hover.png new file mode 100644 index 0000000000000000000000000000000000000000..e8e09f61852841d4106c17da2471c494fac61400 GIT binary patch literal 1396 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 literal 0 HcmV?d00001 diff --git a/src/components/page-watch-common/player/player-control/pc-player-control/imgs/pc-player-ui-sound-mute.png b/src/components/page-watch-common/player/player-control/pc-player-control/imgs/pc-player-ui-sound-mute.png new file mode 100644 index 0000000000000000000000000000000000000000..64139ad30626031d571271acc3911f4b936b5bb6 GIT binary patch literal 1561 zcmV+!2Il#RP)z4xA>jU9UvGZ8}2)@UmfMOs9N#EAN%5?h1@RkJoVinh@Z#7Gbotx*(_ zYK6?WS zVy^>;h(5qD;A8^;UI7M3`nDAyy#gR2mIRIfh69H{C(Yk0X~=&LKt!wuoCcf$Y}^Hd zb0m3f(^S(yL>va(4$KEGmh?c=CuJKV;(#RWe!$XI&XUxUHPiuoUXalBzy*^2sd9M| z!m7YYiSezw+4nlIXTD}(0n7$AEL{3LaJ;1NyJ99Hc1lbS23G81?Qg(?z%7!dMntp| zfF0~nV7USVp8@?OP0PPWgx4LH81Ep-5&+YITLC-jPxb$81&~Z&7hrsev;7X7B57Pi z*yJt)E-8s5Iq!d^vn=hG%CypU013o8NfY~(TzVxiLel(*=nvcjtW;Px3%CuqL(MT8xBl%#7Cpi}K|z_Nvnp8!WmnjR6W18Ye7v}&}f>H`sBZElp-&vOEl^m6f@ z96(*A4+BFb{T>l}08aoL6gK|ikSXcOW*Ki0fVces>?7%e4$-T@fzu@Im^86I@Hntn zfms8#Lywfy!Jeyts$fF)v&Ra-VhXT(eqWgeYWL@fB_fsqZURm(VeV<*L`gqaVZ5pa zlJL$0oK$lfEa{>8he`mlOV0#uC@BvwrURTgubImBkp03@B&WZD^CgW+ zV24X`IbKQ;;ZQv``#DLHyU3m~p@KQN>G9j;)^lEWm zL^yg4%)YyD+@|GXu92Nq{T>lpq*ipR!X6I-&XMHuq(%|34d97Lp5<+FW9n;i4LCZi zS(OpMaok1L828dm>@#Dl0QUh$mhAI{@N7wcCJ=d+x4G>t$w8n-Ie?<0ROQJT^|{p4 zPiUg4_ucl15hWv<*OFhzTg_ZwaD(_x?*5gsqP&ORtl^DO|fiXHz)OM0Pfe?-(rG(RL;_lTx% zVXdbTXG*%O5f3d*gqs{Kx|_0Nj`ch#b5NU}ea9vD`w_7k;D~c*3A4`D=jOKG$p>1H zay?R19qzh_GlSO3l&qZoHH~P-r)MYEP#2c)f?1kA36MWMIMjr znk@)P3ldyJcyN3-P%D`;^03Rp=C|6Wfd*g}`hg=NwoiVvS>X4$LwBp;y3xK~@qu%6vsbb!p$QS@`$KAQc5I`7+@gEgi!Yi1M(c1`4>=z-UCUb40IVtZploPFc6Ue z7bVF+H=(6<+UK@A_n!0n{mwb}p5Ly!>kLk|!J(9jP12QH6W;PMn1{?)8!!XZZleE8d0A@B9I0zg97B*1u zyQEpA0Wh--!P?t_NqH2L)KoMyHEAS;%xosGFDSkwL+K~L>R6^@0A{v4DBTN8YoPcq z;3jZR(sMJjjscii7qB}hz9z%kuYvP`Z`7Yv*--&7vw6U2U=uJuPwdu_`2*Yu)_znc zeq0QcsCFz2^lfRY~9ekTTKOHAekDG1=p{s7iV z@;!PO#;d)O{649SQUe4C-)B7$#0Q|e>V*^l z76EU7DG|g9zs-~IKpiiflyoX3fCGLxMjp5?$?u8s?}6ZfrNFBQ;H9KxDFJw4^d$lq zkW{(kO23JN2R!?Yi~m7MQ^x`FrVS&>Wu+4FoRBGd?o}P1BvoqcR6;2EO`QBOTANO! zbCH=@+Np$@rJKwZO{beJDKAQTSM*5DI!4W`a6!{bQU5R$^?hwD>f@T&?UPwjdQYg; zwu*c4vi~H-7tb&U8S9o{b#F zbC*WL+aoJufsVD;>tveigI9I}lk07*qoM6N<$f?fE8$p8QV literal 0 HcmV?d00001 diff --git a/src/components/page-watch-common/player/player-control/pc-player-control/imgs/pc-player-ui-switch-screen-hover.png b/src/components/page-watch-common/player/player-control/pc-player-control/imgs/pc-player-ui-switch-screen-hover.png new file mode 100644 index 0000000000000000000000000000000000000000..5a20831e457201f9528f4c397f369137cd98dd19 GIT binary patch literal 1016 zcmV3`sX55!?MFI-qwP<(sL^LX6M8pMA5s4_GAVv`q1PNlMx&qx*6HyUF1rd>e zM2*IM8MA;Q7%wDMed8}s^uj-2uUNj`_B2!Lag&2*Ev5< z3RIE7j;{@dxP0b1{Pf*s4)gT6<{7X(ZIQtqL8p^EGIImw@<^H8-P4J0TsO{@^MR;?`atd3+c`oLu z5M|-*zMe3`Yk;Of{=8uZoyF}umS&hJ(CXfWHo0UY1p$Ec~pmD~ARHjI7WW zxMkcLv4Vg}q-@|?nbwT5@V2k3WN=v0#iIeE#ktVo_c=0I0=!{d>^aNJO>RiG?<$Cn*NI0Wc|N%O2WfwJ&+PaQ)Xf^_~$MWPmgvhc0l z+K9h!5YTxEc=AO^J4T;XE>ISJ*3&hSa8S}rqS}DZhc2IM^|BR_LX)^GyzS{)85|IF z?kKzkE(9*;<7c%Al!b43+63VnNarLXPxiwu-Q{Ps2$Y4NUC{Nz2#Y7cgT2t@u2G@N z1uTmXoNxe-kAWFaQucywG(&t1=9o|O-yU}P>T2H?d7tT&m8Ij3uR9}yj}q{tEMQyE3Wfa~Lo(xv%!G(3c@1D9{r3BKHS zVS%=%`(W_C;(MF_LT?B>9=d$H3HbOw3JJ74-A{ve)9@DXSm1I`Q}BfZI(^+^fc>Kz zJAj539t|D7(A!<&gXMdlw1oDiL@ihAt8xKlpIo|BspXkIfRr@lBDE(J|C}KaN)*{zks;# z4^VhDwRSDz`@TK1zFBMAWnHdsX4dn}yVkt#%qKeerB2Sze}NPcG_w)FXyBcsA2DNg zcm&LBIdBo^3A_PXVkA0LAcMaQbji*7G)ZqmqtIajb>P1NVW3{{&V_x)BQR z+EpHb2JovSU5|mUTp%@kr2=KZS0+#vd?f;9!j~@4EWDX@1%?BkC0VTxyzVMwX7hk^ zS*Hz>p2n;Y3E(#ZrvWGN0hlD|yU)-_;3F_H>+ng^s8E3f@MD4ZUWQ&?D@QaE_#yu10zt6M<-f1n}cC_@RG+)|tR$5l8?(A%h=M^J6VjAOZYD;3Y7) z-gj2-6>d5L3E(GX@PisH5~TAS9>l=60FQw_9_U_42Wu^#WeDV-69YdJ zcm(wJKzBO@7VxkJ{7y+n8zrt30$%~YsEUD~4LksPd7wKa9dEBRH?yE} zzEK|V1!Cam0Qa-w!aVDCNhjKa&+(%DbS&?fSD}?u4U&o zZIAv1te1450861Rg#^rO8E~Zr{5nbQ@1n}CXaO@@oPDtQ!p_b7T1l5GBhMaGL?EBy z-7qf6t&!wP?aHra1swcpNmnZ;Zz2Nu8YL)0mnjz=fihu=jQwAr$gHL8)9EAd8?%zO UK(BVL#sB~S07*qoM6N<$f?z#!^Z)<= literal 0 HcmV?d00001 diff --git a/src/components/page-watch-common/player/player-control/pc-player-control/player-control.vue b/src/components/page-watch-common/player/player-control/pc-player-control/player-control.vue new file mode 100644 index 0000000..9fce0e5 --- /dev/null +++ b/src/components/page-watch-common/player/player-control/pc-player-control/player-control.vue @@ -0,0 +1,524 @@ + + + + + + diff --git a/src/components/page-watch-common/player/player-control/pc-player-control/player-setting.vue b/src/components/page-watch-common/player/player-control/pc-player-control/player-setting.vue new file mode 100644 index 0000000..65d5074 --- /dev/null +++ b/src/components/page-watch-common/player/player-control/pc-player-control/player-setting.vue @@ -0,0 +1,177 @@ + + + + + + diff --git a/src/components/page-watch-common/player/player-control/pc-player-control/rate-setting.vue b/src/components/page-watch-common/player/player-control/pc-player-control/rate-setting.vue new file mode 100644 index 0000000..57d0450 --- /dev/null +++ b/src/components/page-watch-common/player/player-control/pc-player-control/rate-setting.vue @@ -0,0 +1,30 @@ + + + + diff --git a/src/components/page-watch-common/player/player-control/pc-player-control/volume-setting.vue b/src/components/page-watch-common/player/player-control/pc-player-control/volume-setting.vue new file mode 100644 index 0000000..dcc2da9 --- /dev/null +++ b/src/components/page-watch-common/player/player-control/pc-player-control/volume-setting.vue @@ -0,0 +1,174 @@ + + + + + + diff --git a/src/components/page-watch-common/player/player-control/portrait-player-control/_styles/control-select-options.scss b/src/components/page-watch-common/player/player-control/portrait-player-control/_styles/control-select-options.scss new file mode 100644 index 0000000..1f0aac1 --- /dev/null +++ b/src/components/page-watch-common/player/player-control/portrait-player-control/_styles/control-select-options.scss @@ -0,0 +1,48 @@ +.c-portrait-player-control__select-list { + display: flex; + flex-wrap: wrap; + padding: 14px 16px 46px; +} + +.c-portrait-player-control__select-item { + box-sizing: border-box; + flex-shrink: 0; + width: 66px; + height: 26px; + margin-right: 30px; + font-size: 14px; + line-height: 26px; + color: $--color-white; + text-align: center; + border-radius: 13px; + + &:last-of-type { + margin-right: 0; + } +} + +.c-portrait-player-control__select-item--active { + color: #FFC815; + border: 1px solid #FFC815; +} + +.c-portrait-player-control__select-list--large { + .c-portrait-player-control__select-item { + width: 80px; + } +} + +.c-portrait-player-control__select-list--mini { + .c-portrait-player-control__select-item { + width: 56px; + margin-right: 20px; + } +} + +.c-portrait-player-control__select-list--space-between { + display: flex; + justify-content: space-between; + .c-portrait-player-control__select-item { + margin-right: 0; + } +} \ No newline at end of file diff --git a/src/components/page-watch-common/player/player-control/portrait-player-control/portrait-latency-setting-popup.vue b/src/components/page-watch-common/player/player-control/portrait-player-control/portrait-latency-setting-popup.vue new file mode 100644 index 0000000..5e9edd4 --- /dev/null +++ b/src/components/page-watch-common/player/player-control/portrait-player-control/portrait-latency-setting-popup.vue @@ -0,0 +1,57 @@ + + + + + + diff --git a/src/components/page-watch-common/player/player-control/portrait-player-control/portrait-line-setting-popup.vue b/src/components/page-watch-common/player/player-control/portrait-player-control/portrait-line-setting-popup.vue new file mode 100644 index 0000000..1c3d33c --- /dev/null +++ b/src/components/page-watch-common/player/player-control/portrait-player-control/portrait-line-setting-popup.vue @@ -0,0 +1,55 @@ + + + + + + diff --git a/src/components/page-watch-common/player/player-control/portrait-player-control/portrait-player-control-popup.vue b/src/components/page-watch-common/player/player-control/portrait-player-control/portrait-player-control-popup.vue new file mode 100644 index 0000000..347c62c --- /dev/null +++ b/src/components/page-watch-common/player/player-control/portrait-player-control/portrait-player-control-popup.vue @@ -0,0 +1,26 @@ + + + + + + diff --git a/src/components/page-watch-common/player/player-control/portrait-player-control/portrait-player-progress.vue b/src/components/page-watch-common/player/player-control/portrait-player-control/portrait-player-progress.vue new file mode 100644 index 0000000..1e63dff --- /dev/null +++ b/src/components/page-watch-common/player/player-control/portrait-player-control/portrait-player-progress.vue @@ -0,0 +1,75 @@ + + + + + + diff --git a/src/components/page-watch-common/player/player-control/portrait-player-control/portrait-quality-setting-popup.vue b/src/components/page-watch-common/player/player-control/portrait-player-control/portrait-quality-setting-popup.vue new file mode 100644 index 0000000..769c59f --- /dev/null +++ b/src/components/page-watch-common/player/player-control/portrait-player-control/portrait-quality-setting-popup.vue @@ -0,0 +1,55 @@ + + + + + + diff --git a/src/components/page-watch-common/player/player-control/portrait-player-control/portrait-rate-setting-popup.vue b/src/components/page-watch-common/player/player-control/portrait-player-control/portrait-rate-setting-popup.vue new file mode 100644 index 0000000..fb4a7b7 --- /dev/null +++ b/src/components/page-watch-common/player/player-control/portrait-player-control/portrait-rate-setting-popup.vue @@ -0,0 +1,57 @@ + + + + + + diff --git a/src/components/page-watch-common/player/player-control/portrait-player-control/use-portrait-setting-popup.ts b/src/components/page-watch-common/player/player-control/portrait-player-control/use-portrait-setting-popup.ts new file mode 100644 index 0000000..8558206 --- /dev/null +++ b/src/components/page-watch-common/player/player-control/portrait-player-control/use-portrait-setting-popup.ts @@ -0,0 +1,40 @@ +import { appEvents, eventBus, useEventBusListener } from '@/app/app-events'; +import { useSimpleVisible } from '@/hooks/behaviors/use-simple-visible'; +import { ref } from 'vue'; + +export const usePortraitSettingPopup = (event: string) => { + const { visible, setVisible } = useSimpleVisible(); + + const useTransition = ref(false); + + useEventBusListener(event, (params: { _visible?: boolean; _useTransition: boolean }) => { + const { _visible = true, _useTransition = true } = params; + useTransition.value = _useTransition; + setVisible(_visible); + }); + + /** 关闭弹层 */ + function closePopup(_useTransition = true) { + useTransition.value = _useTransition; + setVisible(false); + } + + /** 点击返回 */ + function onClickBack() { + eventBus.$emit(appEvents.portrait.OpenMenuPopup, { + _visible: true, + _useTransition: false, + }); + + useTransition.value = false; + setVisible(false); + } + + return { + visible, + setVisible, + useTransition, + closePopup, + onClickBack, + }; +}; diff --git a/src/components/page-watch-common/player/player-cover-img/mobile-player-cover-img.vue b/src/components/page-watch-common/player/player-cover-img/mobile-player-cover-img.vue new file mode 100644 index 0000000..f5d56f4 --- /dev/null +++ b/src/components/page-watch-common/player/player-cover-img/mobile-player-cover-img.vue @@ -0,0 +1,56 @@ + + + + + + diff --git a/src/components/page-watch-common/player/player-cover-img/pc-player-cover-img.vue b/src/components/page-watch-common/player/player-cover-img/pc-player-cover-img.vue new file mode 100644 index 0000000..44a8c18 --- /dev/null +++ b/src/components/page-watch-common/player/player-cover-img/pc-player-cover-img.vue @@ -0,0 +1,62 @@ + + + + + + diff --git a/src/components/page-watch-common/player/player-cover-img/portrait-player-cover-img.vue b/src/components/page-watch-common/player/player-cover-img/portrait-player-cover-img.vue new file mode 100644 index 0000000..70688f4 --- /dev/null +++ b/src/components/page-watch-common/player/player-cover-img/portrait-player-cover-img.vue @@ -0,0 +1,87 @@ + + + + + + diff --git a/src/components/page-watch-common/player/player-logo/mobile-player-logo.vue b/src/components/page-watch-common/player/player-logo/mobile-player-logo.vue new file mode 100644 index 0000000..8f8e51b --- /dev/null +++ b/src/components/page-watch-common/player/player-logo/mobile-player-logo.vue @@ -0,0 +1,69 @@ + + + + + + diff --git a/src/components/page-watch-common/player/player-logo/pc-player-logo.vue b/src/components/page-watch-common/player/player-logo/pc-player-logo.vue new file mode 100644 index 0000000..9fc7250 --- /dev/null +++ b/src/components/page-watch-common/player/player-logo/pc-player-logo.vue @@ -0,0 +1,69 @@ + + + + + + diff --git a/src/components/page-watch-common/player/player-main/mobile-player-main/mobile-player-main.vue b/src/components/page-watch-common/player/player-main/mobile-player-main/mobile-player-main.vue new file mode 100644 index 0000000..c772d4f --- /dev/null +++ b/src/components/page-watch-common/player/player-main/mobile-player-main/mobile-player-main.vue @@ -0,0 +1,166 @@ + + + + + + diff --git a/src/components/page-watch-common/player/player-main/mobile-player-main/styles/cover-mobile-player.scss b/src/components/page-watch-common/player/player-main/mobile-player-main/styles/cover-mobile-player.scss new file mode 100644 index 0000000..e9eb653 --- /dev/null +++ b/src/components/page-watch-common/player/player-main/mobile-player-main/styles/cover-mobile-player.scss @@ -0,0 +1,5 @@ +// 隐藏播放按钮 +.plv-live-big-play-btn, +.plv-live-cover__btn { + display: none; +} diff --git a/src/components/page-watch-common/player/player-main/pc-player-main/pc-player-main.vue b/src/components/page-watch-common/player/player-main/pc-player-main/pc-player-main.vue new file mode 100644 index 0000000..17b2e76 --- /dev/null +++ b/src/components/page-watch-common/player/player-main/pc-player-main/pc-player-main.vue @@ -0,0 +1,70 @@ + + + + + + diff --git a/src/components/page-watch-common/player/player-main/pc-player-main/styles/cover-pc-player.scss b/src/components/page-watch-common/player/player-main/pc-player-main/styles/cover-pc-player.scss new file mode 100644 index 0000000..8df2aea --- /dev/null +++ b/src/components/page-watch-common/player/player-main/pc-player-main/styles/cover-pc-player.scss @@ -0,0 +1,24 @@ +// @file 覆盖 PC 端播放器样式 + +// 隐藏点播播放器的续播提示 +.pv-start-time { + display: none !important; +} + +// 隐藏直播播放器的一个小图标 +.plv-icon.plv-icon-volume.plv-cutoff-volume { + display: none; +} + +.plv-live-player-password { + z-index: 999 !important; +} + +.plv-live-player-media-pre-volume > .plv-icon.plv-icon-volume { + width: 20px !important; + height: 20px !important; +} + +.plv-live-player-media-pause { + z-index: 999 !important; +} diff --git a/src/components/page-watch-common/player/player-main/portrait-player-main/_hooks/use-portrait-click-player.ts b/src/components/page-watch-common/player/player-main/portrait-player-main/_hooks/use-portrait-click-player.ts new file mode 100644 index 0000000..989b29d --- /dev/null +++ b/src/components/page-watch-common/player/player-main/portrait-player-main/_hooks/use-portrait-click-player.ts @@ -0,0 +1,92 @@ +import { appEvents, useEventBusListener } from '@/app/app-events'; +import { usePlayerStore } from '@/store/use-player-store'; +import { usePlayerAction } from '../../../hooks/use-player-action'; +import { PlayStatus } from '@polyv/live-watch-sdk'; +import { onBeforeUnmount } from 'vue'; + +/** + * 判断是否点击dom区域 + * @param dom 节点 + * @param event 原生事件 + */ +export const checkDomClick = (event: MouseEvent, dom: Element) => { + if (!dom || !event) return; + const clickX = event.clientX; + const clickY = event.clientY; + + const rect = dom.getBoundingClientRect(); + const startX = rect.x; + const endX = startX + rect.width; + const startY = rect.y; + const endY = startY + rect.height; + + return clickX >= startX && clickX <= endX && clickY >= startY && clickY <= endY; +}; + +/** + * 竖屏播放器点击处理 hook + */ +export const usePortraitClickPlayer = () => { + const playerStore = usePlayerStore(); + const { toPlay, toPause } = usePlayerAction(); + + /** 记录点击次数 */ + let clickCount = 0; + /** 清楚点击记录定时器 */ + let clickTimer: number | undefined; + + function clearClickTimer() { + if (clickTimer) { + clearTimeout(clickTimer); + clickTimer = undefined; + } + } + + function openUrl(url?: string) { + if (url) { + window.open(url, '_blank', 'noopenner=true'); + } + } + + /** 处理点击播放器区域 */ + function onClickPlayerRegion(event: MouseEvent) { + // 判断logo点击 + const logoDom = document.querySelector('.plv-live-logo') ?? undefined; + if (logoDom && checkDomClick(event, logoDom)) { + openUrl(playerStore.logoHref); + return; + } + + // 当前处于暂停状态,触发播放 + if (playerStore.isPlayMode && playerStore.playStatus === PlayStatus.Pause) { + toPlay(); + return; + } + + // 点击的是暖场图片的区域 + const warmupImgElem = document.querySelector('[data-warmup-img]') ?? undefined; + if (warmupImgElem && checkDomClick(event, warmupImgElem)) { + openUrl(playerStore.warmUpHref); + return; + } + + clickCount++; + // 双击了播放器区域,暂停播放 + if (clickCount === 2) { + toPause(); + clickCount = 0; + } + + clearClickTimer(); + clickTimer = window.setTimeout(() => { + clearClickTimer(); + clickCount = 0; + }, 200); + } + + onBeforeUnmount(() => { + clearClickTimer(); + }); + + useEventBusListener(appEvents.portrait.ClickPlayerRegion, onClickPlayerRegion); +}; diff --git a/src/components/page-watch-common/player/player-main/portrait-player-main/_styles/cover-player-style.scss b/src/components/page-watch-common/player/player-main/portrait-player-main/_styles/cover-player-style.scss new file mode 100644 index 0000000..a4770a3 --- /dev/null +++ b/src/components/page-watch-common/player/player-main/portrait-player-main/_styles/cover-player-style.scss @@ -0,0 +1,43 @@ +// @file 覆盖播放器的样式 +.c-portrait-player-main__container { + // ------ CDN ------ // + // 覆盖背景图 + .plwrap { + background: none !important; + } + + // 隐藏自带的播放按钮 + .plv-live-big-play-btn, + .plv-live-cover__btn { + display: none !important; + } + + // .plv-cover-box { + // background-color: rgb(33, 33, 33); + // } + + // 隐藏控制栏的渐变背景 + .plv-player-skin { + display: none; + } + + .plv-live-panel { + background-color: rgba(0, 0, 0, 0) !important; + } + + // 隐藏暖场图 + .plv-live-warmUp { + display: none; + } + + // ------ 点播 ------ // + .plv-player-big-play-btn { + display: none !important; + } + + // ------ 快直播 ------ // + // 覆盖快直播背景图 + .vcp-player { + background: none !important; + } +} diff --git a/src/components/page-watch-common/player/player-main/portrait-player-main/portrait-player-main.vue b/src/components/page-watch-common/player/player-main/portrait-player-main/portrait-player-main.vue new file mode 100644 index 0000000..71dd9f3 --- /dev/null +++ b/src/components/page-watch-common/player/player-main/portrait-player-main/portrait-player-main.vue @@ -0,0 +1,189 @@ + + + + + + diff --git a/src/components/page-watch-common/player/player-main/portrait-player-main/use-portrait-player-size.ts b/src/components/page-watch-common/player/player-main/portrait-player-main/use-portrait-player-size.ts new file mode 100644 index 0000000..aa3e4cd --- /dev/null +++ b/src/components/page-watch-common/player/player-main/portrait-player-main/use-portrait-player-size.ts @@ -0,0 +1,156 @@ +import { usePageStore } from '@/store/use-page-store'; +import { usePlayerStore } from '@/store/use-player-store'; +import { usePortraitLayoutStore } from '@/store/use-portrait-layout-store'; +import { computed, unref } from 'vue'; +import { CSSProperties } from 'vue/types/jsx'; + +export interface PlayerContainerSize { + width: number; + height: number; + top: number; + left: number; +} + +export interface PlayerSizeData { + width?: number; + height?: number; +} + +/** + * 获取视频区域高度 + */ +function getVideoAreaHeight() { + const pageStore = usePageStore(); + const topStopHeight = 51; + const bottomStopHeight = 218; + + return { + /** 顶部阻挡区域高度 */ + topStopHeight, + /** 底部阻挡区域高度 */ + bottomStopHeight, + /** 视频区域高度 */ + videoAreaHeight: pageStore.pageClientHeight - topStopHeight - bottomStopHeight, + }; +} + +/** + * 计算纯直播下的播放器的尺寸位置 + */ +export function computedPlayerSize(targetSize: PlayerSizeData): PlayerContainerSize | undefined { + const pageStore = usePageStore(); + + const { width: targetWidth, height: targetHeight } = targetSize; + + const pageClientWidth = pageStore.pageClientWidth; + const pageClientHeight = pageStore.pageClientHeight; + + if (!targetWidth || !targetHeight) { + return; + } + + const { topStopHeight, videoAreaHeight } = getVideoAreaHeight(); + + let sizeData: PlayerContainerSize | undefined; + + // 视频宽度占满屏宽的等比高度 + const _videoHeight = (targetHeight / targetWidth) * pageClientWidth; + // 视频高度占满屏高的等比宽度 + const _videoWidth = (targetWidth / targetHeight) * pageClientHeight; + + // 等比高度超出屏幕高度,宽度占满,上下裁边 + if (_videoHeight >= pageClientHeight) { + sizeData = { + width: pageClientWidth, + height: _videoHeight, + top: (pageClientHeight - _videoHeight) / 2, + left: 0, + }; + return sizeData; + } + + // 等比高度小于视频区域高度,宽度占满,视频区域内上下居中 + if (_videoHeight <= videoAreaHeight) { + sizeData = { + width: pageClientWidth, + height: _videoHeight, + top: (videoAreaHeight - _videoHeight) / 2 + topStopHeight, + left: 0, + }; + return sizeData; + } + + // 高度占满,左右裁边 + sizeData = { + width: _videoWidth, + height: pageClientHeight, + top: 0, + left: (pageClientWidth - _videoWidth) / 2, + }; + + return sizeData; +} + +/** + * 计算显示文档下播放器的尺寸位置 + */ +export function computedDocPlayerSize(targetSize: PlayerSizeData): PlayerContainerSize | undefined { + const pageStore = usePageStore(); + + const { width: targetWidth, height: targetHeight } = targetSize; + + const pageClientWidth = pageStore.pageClientWidth; + + if (!targetWidth || !targetHeight) { + return; + } + + // 视频宽度占满屏宽的等比高度 + const _videoHeight = (targetHeight / targetWidth) * pageClientWidth; + + return { + width: pageClientWidth, + height: _videoHeight, + top: 0, + left: 0, + }; +} + +/** + * 竖屏播放器尺寸 hook + */ +export const usePortraitPlayerSize = (targetSize?: ResponsiveRef) => { + const playerStore = usePlayerStore(); + const portraitLayoutStore = usePortraitLayoutStore(); + + /** 播放器容器样式 */ + const playerContainerStyle = computed(() => { + const styles: CSSProperties = {}; + + let sizeData: PlayerContainerSize | undefined; + + const targetSizeVal: PlayerSizeData = unref(targetSize) || { + width: playerStore.resolutionWidth, + height: playerStore.resolutionHeight, + }; + + if (portraitLayoutStore.portraitDocWrapHeight !== 0) { + sizeData = computedDocPlayerSize(targetSizeVal); + } else { + sizeData = computedPlayerSize(targetSizeVal); + } + + if (sizeData) { + styles.width = `${sizeData.width}px`; + styles.height = `${sizeData.height}px`; + styles.top = `${sizeData.top}px`; + styles.left = `${sizeData.left}px`; + } + + return styles; + }); + + return { + playerContainerStyle, + }; +}; diff --git a/src/components/page-watch-common/send-redpack/_hooks/use-send-redpack.ts b/src/components/page-watch-common/send-redpack/_hooks/use-send-redpack.ts new file mode 100644 index 0000000..0940ad2 --- /dev/null +++ b/src/components/page-watch-common/send-redpack/_hooks/use-send-redpack.ts @@ -0,0 +1,170 @@ +import { useWeixinPay } from '@/hooks/platform/use-weixin/use-weixin-pay'; +import { translate } from '@/assets/lang'; +import { toast } from '@/hooks/components/use-toast'; +import { getWatchCore } from '@/core/watch-sdk'; +import { ValidatorRules } from '@/plugins/async-validator'; +import { useSendRedpackStore } from '@/store/use-send-redpack-store'; +import { storeDefinitionToRefs } from '@/plugins/pinia/util'; +import { computed, reactive, unref } from 'vue'; +import { SubmitSendRedpackParams, WatchDomainPayType } from '@polyv/live-watch-sdk'; +import { usePolyvWatchDomain } from '@/hooks/platform/use-polyv-watch-domain'; + +/** "发送红包"表单类型 */ +interface SendRedpackFormData { + /** 红包金额 */ + amount: number | string; + /** 红包个数 */ + count: number | string; + /** 祝福语 */ + greeting: string; +} + +export const useSendRedpackHook = ( + options: { + successCallback?: () => unknown; + } = {}, +) => { + const { polyvWatchDomainEnabled, skipWatchDomainPay } = usePolyvWatchDomain(); + const { chooseWXPay } = useWeixinPay(); + const watchCore = getWatchCore(); + const { redPackViewerMaxAmount, redPackViewerMaxCount, redPackViewerMinAverage } = + storeDefinitionToRefs(useSendRedpackStore); + + /** "发送红包"表单数据 */ + const formData = reactive({ + amount: '', + count: '', + greeting: '', + }); + + /** 表单规则 */ + // eslint-disable-next-line sonarjs/cognitive-complexity + const formRules = computed(() => { + return { + amount: [ + { + validator: (rule, val: number | string) => { + let errorMsg: string | undefined; + // 必填判断 + if (val === '') { + errorMsg = translate('redpack.send.sum.placeholder'); + } + + // 总金额不得小于 1 + if (val < 1) { + errorMsg = translate('redpack.send.amount.low'); + } + + // 最大值判断 + if (val > unref(redPackViewerMaxAmount)) { + errorMsg = translate('redpack.single.amount.limit', { + amount: `${unref(redPackViewerMaxAmount)}`, + }); + } + + // 均分判断 + const average = getCurrentAverage(); + if (formData.amount && formData.count && average < unref(redPackViewerMinAverage)) { + errorMsg = translate('redpack.equal.amount.limit', { + average: `${unref(redPackViewerMinAverage)}`, + }); + } + + if (errorMsg) { + return [errorMsg]; + } + + return true; + }, + }, + ], + count: [ + { + validator: (rule, val: number | string) => { + let errorMsg: string | undefined; + // 必填判断 + if (val === '') { + errorMsg = translate('redpack.send.num.placeholder'); + } + + // 最大值判断 + if (val > unref(redPackViewerMaxCount)) { + errorMsg = translate('redpack.single.num.limit', { + count: `${unref(redPackViewerMaxCount)}`, + }); + } + + // 均分判断 + const average = getCurrentAverage(); + if (formData.amount && formData.count && average < unref(redPackViewerMinAverage)) { + errorMsg = translate('redpack.equal.amount.limit', { + average: `${unref(redPackViewerMinAverage)}`, + }); + } + + if (errorMsg) { + return [errorMsg]; + } + + return true; + }, + }, + ], + }; + }); + + /** 获取当前的红包均分金额 */ + function getCurrentAverage() { + return Number(formData.amount) / Number(formData.count); + } + + /** 提交表单 */ + async function submitForm() { + const params: SubmitSendRedpackParams = { + amount: Number(formData.amount), + count: Number(formData.count), + greeting: formData.greeting, + }; + + // 泛域名支付 + if (unref(polyvWatchDomainEnabled)) { + skipWatchDomainPay({ + payType: WatchDomainPayType.Redpack, + params, + }); + return; + } + + const result = await watchCore.redpack.submitSendRedpack(params); + + if (result.success) { + chooseWXPay(result.wxPaySignData, { + successCb: () => { + toast.success(translate('weixin.pay.success')); + }, + }); + + options.successCallback && options.successCallback(); + } else { + const failMessage = result.failMessage; + if (failMessage) { + toast.error(failMessage); + } + } + } + + /** 初始化发送红包数据 */ + function initSendRedpackData() { + formData.amount = ''; + formData.count = ''; + formData.greeting = ''; + } + + return { + formData, + formRules, + + submitForm, + initSendRedpackData, + }; +}; diff --git a/src/components/page-watch-common/send-redpack/mobile-send-redpack.vue b/src/components/page-watch-common/send-redpack/mobile-send-redpack.vue new file mode 100644 index 0000000..14780ba --- /dev/null +++ b/src/components/page-watch-common/send-redpack/mobile-send-redpack.vue @@ -0,0 +1,129 @@ + + + + + + diff --git a/src/components/page-watch-common/withdraw/_hooks/use-receive-record.ts b/src/components/page-watch-common/withdraw/_hooks/use-receive-record.ts new file mode 100644 index 0000000..002c2d2 --- /dev/null +++ b/src/components/page-watch-common/withdraw/_hooks/use-receive-record.ts @@ -0,0 +1,109 @@ +import { DefineComponent, ref, shallowRef } from 'vue'; +import { formatDate } from '@utils-ts/date'; +import { PageContent } from '@polyv/live-watch-sdk'; +import { toast } from '@/hooks/components/use-toast'; +import { getWatchCore } from '@/core/watch-sdk'; +import { DATE_FORMAT_SLASH } from '@/assets/constants/date-format'; + +export const useReceiveRecordHook = (hookOption: { + fetchMethod: ({ + pageNumber, + }: { + pageNumber: number; + [key: string]: unknown; + }) => Promise>; + fetchMethodParams?: UniversalParams; + errMsg: string; +}) => { + const { fetchMethod, fetchMethodParams = {}, errMsg = 'ReceiveRecordError' } = hookOption; + + const loadingVisible = ref(false); + + /** 没有更多了/无数据 */ + const isNotMore = ref(false); + + /** 领取记录列表 */ + const receiveRecordList = shallowRef([]); + + /** 总页数 */ + let totalPages = 1; + + /** 当前页数 */ + let pageNumber = 0; + + /** 转换领取日期 */ + function convertReceiveDate(ts: string | number) { + return formatDate(new Date(ts), DATE_FORMAT_SLASH); + } + + /** 转换金额,转成保留 2 位小数的数字字符串 */ + function convertAmount(val: number) { + let amount = String(Math.round(val * 100) / 100); + + const xsd = amount.split('.'); + if (xsd.length === 1) { + return `${amount}.00`; + } + + if (xsd.length > 1) { + if (xsd[1].length < 2) { + amount = `${amount}0`; + } + return amount; + } + + return amount; + } + + /** 获取领取记录 */ + async function getReceiveRecordList() { + if (typeof fetchMethod !== 'function') return; + + if (loadingVisible.value || isNotMore.value) { + return; + } + + if (totalPages <= pageNumber) { + isNotMore.value = true; + return; + } + + loadingVisible.value = true; + try { + const pageResult = await fetchMethod.bind(getWatchCore())({ + pageNumber: pageNumber + 1, + ...fetchMethodParams, + }); + + receiveRecordList.value = receiveRecordList.value.concat(pageResult.contents); + totalPages = pageResult.totalPages; + pageNumber = pageResult.pageNumber; + } catch (e) { + console.error(e); + toast.error(errMsg); + } finally { + loadingVisible.value = false; + } + } + + return { + loadingVisible, + isNotMore, + receiveRecordList, + + convertReceiveDate, + convertAmount, + /** 组件会在 setup 阶段 expose 该方法 */ + getReceiveRecordList, + }; +}; + +type ReceiveRecordInstanceExpose = Pick< + ReturnType, + 'getReceiveRecordList' +>; + +/** 领取记录组件实例类型 */ +export type ReceiveRecordInstance = InstanceType< + DefineComponent, ReceiveRecordInstanceExpose> +>; diff --git a/src/components/page-watch-common/withdraw/_hooks/use-withdraw-apply.ts b/src/components/page-watch-common/withdraw/_hooks/use-withdraw-apply.ts new file mode 100644 index 0000000..2fdf129 --- /dev/null +++ b/src/components/page-watch-common/withdraw/_hooks/use-withdraw-apply.ts @@ -0,0 +1,178 @@ +import { computed, ref, unref, reactive } from 'vue'; +import { translate } from '@/assets/lang'; +import { toast } from '@/hooks/components/use-toast'; +import { useWithdraw } from '@/components/page-watch-common/withdraw/use-withdraw'; +import { getWatchCore } from '@/core/watch-sdk'; +import { ValidatorRules } from '@/plugins/async-validator'; +import { WeixinPayType } from '@polyv/live-watch-sdk'; + +/** 历史提现统计错误响应 */ +export function handleStatisticsErr(e: Error) { + switch (e.message) { + case 'blank_openid': + return translate('weixin.error.openInClient'); + case 'user_not_found': + return translate('withdraw.error.noUser'); + default: + return 'ERROR7: ' + e.message; + } +} + +export const useWithdrawApplyHook = () => { + const watchCore = getWatchCore(); + const { weixinPayType, freePayAmount } = useWithdraw(); + + /** 提现表单数据 */ + const formData = reactive<{ + amount: string | number; + }>({ + amount: '', + }); + + /** 个人可提现金额 */ + const totalAmount = ref(0); + + /** 商家提现是否大于自定义限额 */ + const isMerchantAmount = computed(() => { + return ( + unref(weixinPayType) === WeixinPayType.Merchant && unref(totalAmount) > unref(freePayAmount) + ); + }); + + /** 表单规则 */ + const formRules = computed(() => { + return { + amount: [ + { + required: true, + message: translate('withdraw.apply.rules.amount.required'), + }, + { + validator: (rule, val: number | string) => { + let errorMsg: string | undefined; + + // 最小值判断,总金额不得小于 1 + if (val < 1) { + errorMsg = translate('withdraw.apply.rules.amount.low'); + } + + // 最大值判断 + if (unref(isMerchantAmount)) { + if (Number(formData.amount) > unref(freePayAmount)) { + errorMsg = translate('withdraw.apply.amount.most.merchant', { + amount: String(unref(freePayAmount)), + }); + } + } else { + if (Number(formData.amount) > unref(totalAmount)) { + errorMsg = translate('withdraw.apply.amount.most', { + amount: String(unref(totalAmount)), + }); + } + } + + const reg = /^\d+(\.\d{0,2})?$/; + const matchResult = `${val}`.match(reg); + if (matchResult === null) { + errorMsg = '提现金额为小数位最多两位的数字'; + } + + if (errorMsg) { + return [errorMsg]; + } + + return true; + }, + }, + ], + }; + }); + + /** 提现金额输入框-默认展示 */ + const amountInputPlaceHolder = computed(() => { + if (unref(weixinPayType) === WeixinPayType.Merchant) { + return translate('withdraw.apply.amount.most.merchant', { + amount: String(freePayAmount.value), + }); + } else { + return translate('withdraw.apply.amount.most', { + amount: String(totalAmount.value), + }); + } + }); + + /** 提示语 */ + const withdrawApplyTips = computed(() => + translate('withdraw.apply.tips', { amount: `1`, day: '3' }), + ); + + /** 设置最大提现额 */ + function setMaxAmount() { + formData.amount = unref(isMerchantAmount) ? unref(freePayAmount) : unref(totalAmount); + } + + /** 获取总金额数 */ + async function setTotalAmount() { + try { + const result = await watchCore.withdraw.getUserStatistics(); + totalAmount.value = result.totalAmount; + } catch (error) { + const errMsg = handleStatisticsErr(error as Error); + toast.error(errMsg); + } + } + + /** 提交表单 */ + async function submitForm() { + const result = await watchCore.withdraw.applyWithdraw({ + amount: Number(formData.amount), + }); + if (result.success) { + toast.success(translate('withdraw.apply.success.msg')); + } else { + throw new Error(handleApplyErr(result.failMessage)); + } + } + + /** 提现相关接口错误返回异常时的错误提示 */ + function handleApplyErr(errMessage?: string) { + switch (errMessage) { + case 'user_not_found': + return translate('withdraw.error.noUser'); + case 'amount_over_limit': + return translate('withdraw.error.getCashExceed'); + case 'set_data_fail': + return translate('withdraw.error.getCashFailed'); + case 'blank_openid': + return translate('weixin.error.openInClient'); + case 'invalid_amount': + default: + return errMessage; + // return translate('withdraw.error.getCashFailed'); + } + } + + /** 初始化-申请提现数据 */ + async function initWithdrawApply() { + resetWithdrawApply(); + await setTotalAmount(); + } + + /** 重置-申请提现数据 */ + function resetWithdrawApply() { + formData.amount = ''; + } + + return { + formData, + formRules, + amountInputPlaceHolder, + withdrawApplyTips, + + setMaxAmount, + submitForm, + + initWithdrawApply, + resetWithdrawApply, + }; +}; diff --git a/src/components/page-watch-common/withdraw/_hooks/use-withdraw-detail.ts b/src/components/page-watch-common/withdraw/_hooks/use-withdraw-detail.ts new file mode 100644 index 0000000..0cc53ef --- /dev/null +++ b/src/components/page-watch-common/withdraw/_hooks/use-withdraw-detail.ts @@ -0,0 +1,116 @@ +import debounce from 'lodash-es/debounce'; +import { ref } from 'vue'; +import { getWatchCore } from '@/core/watch-sdk'; +import { translate } from '@/assets/lang'; +import { toast } from '@/hooks/components/use-toast'; +import { handleStatisticsErr } from './use-withdraw-apply'; +import { ReceiveRecordInstance } from './use-receive-record'; + +export enum WithdrawDetailTab { + /** 红包领取记录/历史红包领取 */ + RedpackReceiveRecord = 'redpackReceiveRecord', + /** 提现记录/历史提现 */ + CashReceiveRecord = 'cashReceiveRecord', +} + +export const useWithdrawDetailHook = () => { + /** 个人领取总金额 */ + const totalReceive = ref(0); + + /** 个人提现总金额 */ + const totalWithdraw = ref(0); + + /** 个人可提现金额 */ + const totalAmount = ref(0); + + /** 当前 tab 值 */ + const curTab = ref(''); + + /** 详情页 Tab 数据 */ + const detailTabs = ref([ + { + label: translate('withdraw.redpack.receive.record'), + value: WithdrawDetailTab.RedpackReceiveRecord, + }, + { + label: translate('withdraw.cash.receive.record'), + value: WithdrawDetailTab.CashReceiveRecord, + }, + ]); + + /** 获取历史提现统计 */ + async function getWithdrawStatistics() { + const watchCore = getWatchCore(); + + try { + const statisticsData = await watchCore.withdraw.getUserStatistics(); + + totalReceive.value = statisticsData.totalReceive; + totalWithdraw.value = statisticsData.totalWithdraw; + totalAmount.value = statisticsData.totalAmount; + } catch (error) { + const errMsg = handleStatisticsErr(error as Error); + toast.error(errMsg); + } + } + + /** 初始化-提现详情 */ + async function initWithdrawDetail() { + resetWithdrawDetail(); + + curTab.value = WithdrawDetailTab.RedpackReceiveRecord; + await getWithdrawStatistics(); + } + + /** 重置-提现详情 */ + function resetWithdrawDetail() { + curTab.value = ''; + totalReceive.value = 0; + totalWithdraw.value = 0; + totalAmount.value = 0; + } + + /** 红包领取记录组件实例 */ + const redpackReceiveRecordRef = ref(); + /** 提现领取记录组件实例 */ + const cashReceiveRecordRef = ref(); + + /** 获取当前 Tab 对应的领取记录组件实例 */ + function getCurReceiveRecordRef() { + if (curTab.value === WithdrawDetailTab.RedpackReceiveRecord) { + return redpackReceiveRecordRef; + } + if (curTab.value === WithdrawDetailTab.CashReceiveRecord) { + return cashReceiveRecordRef; + } + } + + /** 提现详情页滚动监听钩子 */ + function handleDetailMainScroll(e: UIEvent) { + const target = e.target as HTMLElement; + const scrollHeight = Math.floor(target.scrollHeight); + const scrollTop = Math.floor(target.scrollTop); + const clientHeight = Math.floor(target.clientHeight); + if (scrollTop >= scrollHeight - clientHeight - 100) { + const curReceiveRecordRef = getCurReceiveRecordRef(); + curReceiveRecordRef?.value?.getReceiveRecordList(); + } + } + const debounceHandleDetailMainScroll = debounce(handleDetailMainScroll, 300); + + return { + totalAmount, + totalReceive, + totalWithdraw, + curTab, + detailTabs, + + getWithdrawStatistics, + initWithdrawDetail, + resetWithdrawDetail, + + redpackReceiveRecordRef, + cashReceiveRecordRef, + debounceHandleDetailMainScroll, + }; +}; diff --git a/src/components/page-watch-common/withdraw/mobile-withdraw-apply/mobile-withdraw-apply.vue b/src/components/page-watch-common/withdraw/mobile-withdraw-apply/mobile-withdraw-apply.vue new file mode 100644 index 0000000..f097466 --- /dev/null +++ b/src/components/page-watch-common/withdraw/mobile-withdraw-apply/mobile-withdraw-apply.vue @@ -0,0 +1,168 @@ + + + + + + diff --git a/src/components/page-watch-common/withdraw/mobile-withdraw-detail/mobile-cash-receive-record.vue b/src/components/page-watch-common/withdraw/mobile-withdraw-detail/mobile-cash-receive-record.vue new file mode 100644 index 0000000..c7c203f --- /dev/null +++ b/src/components/page-watch-common/withdraw/mobile-withdraw-detail/mobile-cash-receive-record.vue @@ -0,0 +1,83 @@ + + + + + + diff --git a/src/components/page-watch-common/withdraw/mobile-withdraw-detail/mobile-redpack-receive-record.vue b/src/components/page-watch-common/withdraw/mobile-withdraw-detail/mobile-redpack-receive-record.vue new file mode 100644 index 0000000..2685152 --- /dev/null +++ b/src/components/page-watch-common/withdraw/mobile-withdraw-detail/mobile-redpack-receive-record.vue @@ -0,0 +1,93 @@ + + + + + + diff --git a/src/components/page-watch-common/withdraw/mobile-withdraw-detail/mobile-withdraw-detail.vue b/src/components/page-watch-common/withdraw/mobile-withdraw-detail/mobile-withdraw-detail.vue new file mode 100644 index 0000000..18ef4c6 --- /dev/null +++ b/src/components/page-watch-common/withdraw/mobile-withdraw-detail/mobile-withdraw-detail.vue @@ -0,0 +1,214 @@ + + + + + + diff --git a/src/components/page-watch-common/withdraw/portrait-withdraw-apply/portrait-withdraw-apply.vue b/src/components/page-watch-common/withdraw/portrait-withdraw-apply/portrait-withdraw-apply.vue new file mode 100644 index 0000000..7d7c95e --- /dev/null +++ b/src/components/page-watch-common/withdraw/portrait-withdraw-apply/portrait-withdraw-apply.vue @@ -0,0 +1,164 @@ + + + + + diff --git a/src/components/page-watch-common/withdraw/portrait-withdraw-detail/portrait-cash-receive-record.vue b/src/components/page-watch-common/withdraw/portrait-withdraw-detail/portrait-cash-receive-record.vue new file mode 100644 index 0000000..3379af5 --- /dev/null +++ b/src/components/page-watch-common/withdraw/portrait-withdraw-detail/portrait-cash-receive-record.vue @@ -0,0 +1,54 @@ + + + diff --git a/src/components/page-watch-common/withdraw/portrait-withdraw-detail/portrait-redpack-receive-record.vue b/src/components/page-watch-common/withdraw/portrait-withdraw-detail/portrait-redpack-receive-record.vue new file mode 100644 index 0000000..cea56ff --- /dev/null +++ b/src/components/page-watch-common/withdraw/portrait-withdraw-detail/portrait-redpack-receive-record.vue @@ -0,0 +1,58 @@ + + + diff --git a/src/components/page-watch-common/withdraw/portrait-withdraw-detail/portrait-withdraw-detail.vue b/src/components/page-watch-common/withdraw/portrait-withdraw-detail/portrait-withdraw-detail.vue new file mode 100644 index 0000000..7a3c890 --- /dev/null +++ b/src/components/page-watch-common/withdraw/portrait-withdraw-detail/portrait-withdraw-detail.vue @@ -0,0 +1,182 @@ + + + + + diff --git a/src/components/page-watch-common/withdraw/use-withdraw.ts b/src/components/page-watch-common/withdraw/use-withdraw.ts new file mode 100644 index 0000000..c62e22b --- /dev/null +++ b/src/components/page-watch-common/withdraw/use-withdraw.ts @@ -0,0 +1,45 @@ +import { computed, unref } from 'vue'; +import { useChannelStore } from '@/store/use-channel-store'; +import { useWeixinStore } from '@/store/use-weixin-store'; +import { storeDefinitionToRefs } from '@/plugins/pinia/util'; +import { ynToBool } from '@utils-ts/boolean'; +import { YN, WeixinPayType } from '@polyv/live-watch-sdk'; + +/** + * @hook 提现 + * */ +export const useWithdraw = () => { + const { channelDetail } = storeDefinitionToRefs(useChannelStore); + const { weixinAccountFunctionEnabled, weixinPayEnabled } = storeDefinitionToRefs(useWeixinStore); + + /** 提现开关 */ + const withdrawEnabled = computed(() => { + // 后台开关 - 是否关闭提现 + const backstageSwitch = ynToBool( + unref(channelDetail)?.channelConfig.closeWithdrawEnabled, + YN.Y, + ); + // 超管微信功能开关 + const superSwitch = unref(weixinAccountFunctionEnabled); + // 超管微信支付开关 + const superPaySwitch = unref(weixinPayEnabled); + + return !backstageSwitch && superSwitch && superPaySwitch; + }); + + /** 微信支付类型 */ + const weixinPayType = computed(() => { + return channelDetail.value?.channelConfig.weixinPayType ?? WeixinPayType.Enterprise; + }); + + /** 最大提现额度 */ + const freePayAmount = computed(() => { + return channelDetail.value?.channelConfig.freePayAmount || 0; + }); + + return { + withdrawEnabled, + weixinPayType, + freePayAmount, + }; +}; diff --git a/src/core/bind-sdk-events/bind-channel-events.ts b/src/core/bind-sdk-events/bind-channel-events.ts new file mode 100644 index 0000000..ce07544 --- /dev/null +++ b/src/core/bind-sdk-events/bind-channel-events.ts @@ -0,0 +1,19 @@ +import { ChannelEvents, MenuEvents } from '@polyv/live-watch-sdk'; +import { getWatchCore } from '@/core/watch-sdk'; + +import { useChannelMenuStore } from '@/store/use-channel-menu-store'; +import { useChannelStore } from '@/store/use-channel-store'; + +export function bindChannelModuleEvents(): void { + const channelStore = useChannelStore(); + const ChannelMenuStore = useChannelMenuStore(); + + const watchCore = getWatchCore(); + const channelEventEmitter = watchCore.channel.eventEmitter; + + channelEventEmitter.on(ChannelEvents.LiveStatusChange, channelStore.syncChannelStore); + channelEventEmitter.on(ChannelEvents.SessionIdChange, channelStore.syncChannelStore); + + const menuEventEmitter = watchCore.menu.eventEmitter; + menuEventEmitter.on(MenuEvents.ChannelMenuChange, ChannelMenuStore.syncChannelMenus); +} diff --git a/src/core/bind-sdk-events/bind-chat-events.ts b/src/core/bind-sdk-events/bind-chat-events.ts new file mode 100644 index 0000000..657ca5a --- /dev/null +++ b/src/core/bind-sdk-events/bind-chat-events.ts @@ -0,0 +1,33 @@ +import { redirectToErrorVerify } from '@/hooks/core/use-error-verify'; +import { useChatStore } from '@/store/use-chat-store'; +import { ChatEvents } from '@polyv/live-watch-sdk'; +import { getWatchCore } from '../watch-sdk'; + +/** + * 监听聊天室模块事件 + */ +export function bindChatModuleEvents(): void { + const watchCore = getWatchCore(); + const chatStore = useChatStore(); + + // 聊天室连接失败 + watchCore.chat.eventEmitter.on(ChatEvents.ChatConnectFail, () => { + chatStore.connectError = true; + }); + + watchCore.chat.eventEmitter.on(ChatEvents.ChatStoreInfoChange, () => { + chatStore.syncChatStore(); + }); + + // 重复登录,页面跳走 + watchCore.chat.eventEmitter.on(ChatEvents.CurrentUserRelogin, () => { + redirectToErrorVerify(); + }); + + // 点赞数修改 + watchCore.chat.eventEmitter.on(ChatEvents.ChatLikeCountChange, data => { + chatStore.$patch({ + realtimeLikes: data.realtimeLikes, + }); + }); +} diff --git a/src/core/bind-sdk-events/bind-connect-mic-events.ts b/src/core/bind-sdk-events/bind-connect-mic-events.ts new file mode 100644 index 0000000..163be98 --- /dev/null +++ b/src/core/bind-sdk-events/bind-connect-mic-events.ts @@ -0,0 +1,16 @@ +import { useConnectMicStore } from '@/store/use-connect-mic-store'; +import { ConnectMicEvents } from '@polyv/live-watch-sdk'; +import { getWatchCore } from '../watch-sdk'; + +export function bindConnectMicModuleEvents(): void { + const watchCore = getWatchCore(); + const connectMicStore = useConnectMicStore(); + + watchCore.connectMic.eventEmitter.on(ConnectMicEvents.ConnectMicStoreInfoChanged, () => { + connectMicStore.syncConnectMicInfo(); + }); + + watchCore.connectMic.eventEmitter.on(ConnectMicEvents.ConnectMicListChange, () => { + connectMicStore.syncConnectMicList(); + }); +} diff --git a/src/core/bind-sdk-events/bind-enroll-events.ts b/src/core/bind-sdk-events/bind-enroll-events.ts new file mode 100644 index 0000000..420dd3d --- /dev/null +++ b/src/core/bind-sdk-events/bind-enroll-events.ts @@ -0,0 +1,12 @@ +import { useEnrollStore } from '@/store/use-enroll-store'; +import { EnrollEvents } from '@polyv/live-watch-sdk'; +import { getWatchCore } from '../watch-sdk'; + +export function bindEnrollModuleEvents(): void { + const watchCore = getWatchCore(); + const enrollStore = useEnrollStore(); + + watchCore.enroll.eventEmitter.on(EnrollEvents.EnrollStoreInfoChanged, () => { + enrollStore.syncEnrollInfo(); + }); +} diff --git a/src/core/bind-sdk-events/bind-finance-risk-evaluation-events.ts b/src/core/bind-sdk-events/bind-finance-risk-evaluation-events.ts new file mode 100644 index 0000000..1e56553 --- /dev/null +++ b/src/core/bind-sdk-events/bind-finance-risk-evaluation-events.ts @@ -0,0 +1,18 @@ +import { FinanceRiskEvaluationEvents } from '@polyv/live-watch-sdk'; +import { getWatchCore } from '@/core/watch-sdk'; +import { useRiskEvaluationResetHook } from '@/components/page-watch-common/interactive-receive/risk-evaluation/use-risk-evaluation-reset'; + +/** + * 绑定金融风险测评模块事件 + */ +export function bindFinanceRiskEvaluationEvents() { + const watchCore = getWatchCore(); + + const { onRiskEvaluationReset } = useRiskEvaluationResetHook(); + + // 金融风险测评-重置 + watchCore.financeRiskEvaluation.eventEmitter.on( + FinanceRiskEvaluationEvents.Reset, + onRiskEvaluationReset, + ); +} diff --git a/src/core/bind-sdk-events/bind-interact-receive-events.ts b/src/core/bind-sdk-events/bind-interact-receive-events.ts new file mode 100644 index 0000000..5823096 --- /dev/null +++ b/src/core/bind-sdk-events/bind-interact-receive-events.ts @@ -0,0 +1,15 @@ +import { useInteractReceiveStore } from '@/store/use-interact-receive-store'; +import { InteractReceiveEvents } from '@polyv/live-watch-sdk'; +import { getWatchCore } from '@/core/watch-sdk'; + +export function bindInteractReceiveEvents() { + const watchCore = getWatchCore(); + const interactReceiveStore = useInteractReceiveStore(); + + /** + * 投票 id 列表 + */ + watchCore.interactReceive.eventEmitter.on(InteractReceiveEvents.VotedListChange, data => { + interactReceiveStore.votedList = data.votedList; + }); +} diff --git a/src/core/bind-sdk-events/bind-invite-events.ts b/src/core/bind-sdk-events/bind-invite-events.ts new file mode 100644 index 0000000..4bcfa22 --- /dev/null +++ b/src/core/bind-sdk-events/bind-invite-events.ts @@ -0,0 +1,10 @@ +import { getWatchCore } from '@/core/watch-sdk'; +import { useInviteStore } from '@/store/use-invite-store'; +import { InviteEvents } from '@polyv/live-watch-sdk'; + +export function bindInviteEvents() { + const inviteStore = useInviteStore(); + const watchCore = getWatchCore(); + + watchCore.invite.eventEmitter.on(InviteEvents.InviteUserInfoUpdate, inviteStore.syncInviteInfo); +} diff --git a/src/core/bind-sdk-events/bind-player-events.ts b/src/core/bind-sdk-events/bind-player-events.ts new file mode 100644 index 0000000..6f8c7d1 --- /dev/null +++ b/src/core/bind-sdk-events/bind-player-events.ts @@ -0,0 +1,37 @@ +import { appEvents, eventBus } from '@/app/app-events'; +import { translate } from '@/assets/lang'; +import { toast } from '@/hooks/components/use-toast'; +import { useChannelStore } from '@/store/use-channel-store'; +import { usePlayerStore } from '@/store/use-player-store'; +import { MarqueeData, PlayerEvents } from '@polyv/live-watch-sdk'; +import { getWatchCore } from '@/core/watch-sdk'; + +export function bindPlayerModuleEvents(): void { + const watchCore = getWatchCore(); + const playerStore = usePlayerStore(); + const channelStore = useChannelStore(); + + watchCore.player.eventEmitter.on(PlayerEvents.PlayerStoreInfoChanged, () => { + playerStore.syncPlayerInfo(); + }); + + /** 无延迟错误,自动切回 CDN 播放器 */ + watchCore.player.eventEmitter.on(PlayerEvents.LowLatencyError, (evt: { errorCode: string }) => { + toast.error(`${evt.errorCode} ${translate('player.latency.error')}`); + + playerStore.$patch({ + isLowLatency: false, + }); + eventBus.$emit(appEvents.player.ResetUpPlayer); + }); + + /** 设置跑马灯数据 */ + watchCore.player.eventEmitter.on( + PlayerEvents.MarqueeDataUpdate, + (evt: { marqueeData: MarqueeData }) => { + channelStore.$patch({ + marqueeData: evt.marqueeData, + }); + }, + ); +} diff --git a/src/core/bind-sdk-events/bind-user-events.ts b/src/core/bind-sdk-events/bind-user-events.ts new file mode 100644 index 0000000..275f41b --- /dev/null +++ b/src/core/bind-sdk-events/bind-user-events.ts @@ -0,0 +1,10 @@ +import { getWatchCore } from '@/core/watch-sdk'; +import { UserEvents } from '@polyv/live-watch-sdk'; +import { useViewerStore } from '@/store/use-viewer-store'; + +export function bindUserEvents() { + const viewerStore = useViewerStore(); + const watchCore = getWatchCore(); + + watchCore.user.eventEmitter.on(UserEvents.UserInfoChange, viewerStore.syncViewerInfo); +} diff --git a/src/core/bind-sdk-events/bind-watch-core-events.ts b/src/core/bind-sdk-events/bind-watch-core-events.ts new file mode 100644 index 0000000..27b2684 --- /dev/null +++ b/src/core/bind-sdk-events/bind-watch-core-events.ts @@ -0,0 +1,30 @@ +import { getWatchCore } from '@/core/watch-sdk'; +import { PolyvWatchCoreEvents } from '@polyv/live-watch-sdk'; + +import { useChannelStore } from '@/store/use-channel-store'; +import { useFinanceStore } from '@/store/use-finance-store'; + +export function bindWatchCoreEvents(): void { + const watchCore = getWatchCore(); + + const channelStore = useChannelStore(); + const financeStore = useFinanceStore(); + + // 观看核心已安装 + watchCore.eventEmitter.on(PolyvWatchCoreEvents.WatchCoreSetuped, () => { + channelStore.syncChannelDetail(); + + financeStore.initRiskConfirm(); + financeStore.initRiskEvaluation(); + }); + + // 观看核心已连接聊天室 + watchCore.eventEmitter.on(PolyvWatchCoreEvents.WatchCoreConnected, () => { + console.log('观看核心已连接聊天室'); + }); + + // 观看核心已销毁 + watchCore.eventEmitter.on(PolyvWatchCoreEvents.WatchCoreDestroyed, () => { + console.log('观看核心已销毁'); + }); +} diff --git a/src/core/watch-sdk.ts b/src/core/watch-sdk.ts new file mode 100644 index 0000000..62920e1 --- /dev/null +++ b/src/core/watch-sdk.ts @@ -0,0 +1,72 @@ +import { AppConfig, PolyvWatchCore, createWatchCore } from '@polyv/live-watch-sdk'; +import { isSpecialUserType } from '@/assets/constants/special-user-types'; +import { useChatStore } from '@/store/use-chat-store'; +import { useViewerStore } from '@/store/use-viewer-store'; + +import { bindWatchCoreEvents } from '@/core/bind-sdk-events/bind-watch-core-events'; +import { bindChannelModuleEvents } from '@/core/bind-sdk-events/bind-channel-events'; +import { bindChatModuleEvents } from '@/core/bind-sdk-events/bind-chat-events'; +import { bindConnectMicModuleEvents } from '@/core/bind-sdk-events/bind-connect-mic-events'; +import { bindEnrollModuleEvents } from '@/core/bind-sdk-events/bind-enroll-events'; +import { bindInteractReceiveEvents } from '@/core/bind-sdk-events/bind-interact-receive-events'; +import { bindInviteEvents } from '@/core/bind-sdk-events/bind-invite-events'; +import { bindPlayerModuleEvents } from '@/core/bind-sdk-events/bind-player-events'; +import { bindUserEvents } from '@/core/bind-sdk-events/bind-user-events'; +import { bindFinanceRiskEvaluationEvents } from '@/core/bind-sdk-events/bind-finance-risk-evaluation-events'; + +/** 观看页核心模块实例 */ +let watchCore: PolyvWatchCore | undefined; + +/** 获取观看页核心模块实例 */ +export function getWatchCore(): PolyvWatchCore { + if (!watchCore) { + throw new Error('watchCore in not define!'); + } + return watchCore; +} + +/** 初始化观看页应用对象 */ +export function initWatchSdk(appConfig: AppConfig): PolyvWatchCore { + if (watchCore) { + return watchCore; + } + const chatStore = useChatStore(); + const viewerStore = useViewerStore(); + + watchCore = createWatchCore(appConfig); + + // 绑定 SDK 相关事件的监听回调 + bindWatchCoreEvents(); + bindChannelModuleEvents(); + bindChatModuleEvents(); + bindConnectMicModuleEvents(); + bindEnrollModuleEvents(); + bindInteractReceiveEvents(); + bindInviteEvents(); + bindPlayerModuleEvents(); + bindUserEvents(); + bindFinanceRiskEvaluationEvents(); + + // 设置弹幕添加拦截器,如果当前只看主持人,则不添加弹幕 + watchCore.barrage.setBarrageAddIntercept(data => { + const userType = data.user?.userType; + const userId = data.user?.userId; + + if ( + chatStore.onlySpecialMsg && + !isSpecialUserType(userType) && + userId !== viewerStore.viewerId + ) { + return true; + } + + return false; + }); + + return watchCore; +} + +window.debugWatchSdk = () => { + window.watchCore = watchCore; + console.info(watchCore); +}; diff --git a/src/hooks/README.md b/src/hooks/README.md new file mode 100644 index 0000000..0006ec2 --- /dev/null +++ b/src/hooks/README.md @@ -0,0 +1,13 @@ +# 说明 + +存放一些公共使用的 `hook`,如果只是用一次,可以考虑放在组件中,而不是放在该目录 + +| 目录 | 说明 | +| :--------- | :----------------------------------------------------------------------------- | +| animation | 存放一些动画相关的 `hook` | +| behaviors | 存放一些 `DOM` 行为交互相关的 `hook` | +| business | 存放一些业务相关的公用 `hook`,比如页面数据上报 | +| components | 存放不需要 `.vue` 组件单独引入 `Vue` 文件就可以直接使用的 `hook`,比如图片预览 | +| core | 存放和项目核心相关的 `hook` | +| platforms | 存放一些和平台相关的 `hook`,比如泛域名,微信环境 | +| tools | 存放一些工具类的 `hook`,比如格式化 | diff --git a/src/hooks/animation/use-svga-animation/index.ts b/src/hooks/animation/use-svga-animation/index.ts new file mode 100644 index 0000000..09759a5 --- /dev/null +++ b/src/hooks/animation/use-svga-animation/index.ts @@ -0,0 +1,109 @@ +import { onBeforeUnmount, onMounted, Ref, unref } from 'vue'; +import { + loadSvgaPlayer, + SVGAParser, + SVGAPlayer, +} from '@/plugins/external-lib-loaders/load-svga-player'; + +export interface UseSvgaAnimationOptions { + /** 容器节点 */ + containerRef: Ref; + /** svga 动画文件地址 */ + svgaUrl: string; + /** 时间间隔,默认:20 * 1000 */ + timeInterval?: number; +} + +/** + * @hook svga 动画 + */ +export const useSvgaAnimation = (options: UseSvgaAnimationOptions) => { + const { containerRef, svgaUrl, timeInterval = 20 * 1000 } = options; + + let svgaPlayer: SVGAPlayer | undefined; + let svgaParser: SVGAParser | undefined; + let intervalTimer: number | undefined; + + /** 创建播放器 */ + async function createPlayer() { + const containerElem = unref(containerRef); + if (!containerElem) { + return; + } + try { + const SVGA = await loadSvgaPlayer(); + svgaPlayer = new SVGA.Player(containerElem); + svgaParser = new SVGA.Parser(); + setupSvgaUrl(svgaUrl); + } catch (e) {} + } + + /** 设置 svga 地址 */ + function setupSvgaUrl(url: string) { + try { + svgaParser?.load(url, videoItem => { + svgaPlayer?.setVideoItem(videoItem); + startAnimation(); + }); + } catch (e) { + console.error(e); + } + } + + /** 开始动画 */ + function startAnimation() { + clearAnimation(); + if (!svgaPlayer) { + return; + } + + try { + // 循环一次 + svgaPlayer.loops = 1; + // 开始播放动画 + svgaPlayer.startAnimation(); + // 播放结束后,停留在100%的状态,并 n 秒后重新播放 + svgaPlayer.onFinished(() => { + svgaPlayer?.stepToPercentage(1, false); + intervalTimer = window.setTimeout(function () { + startAnimation(); + }, timeInterval); + }); + } catch (e) { + console.error(e); + } + } + + /** 清空动画 */ + function clearAnimation() { + try { + clearIntervalTimer(); + if (!svgaPlayer) { + return; + } + svgaPlayer.clear(); + svgaPlayer.clearDynamicObjects(); + } catch (e) { + console.error(e); + } + } + + /** 清空 */ + function clearIntervalTimer() { + clearTimeout(intervalTimer); + intervalTimer = undefined; + } + + onMounted(() => { + createPlayer(); + }); + + onBeforeUnmount(() => { + clearIntervalTimer(); + }); + + return { + setupSvgaUrl, + clearAnimation, + }; +}; diff --git a/src/hooks/animation/use-svga-player/index.ts b/src/hooks/animation/use-svga-player/index.ts new file mode 100644 index 0000000..fb4813e --- /dev/null +++ b/src/hooks/animation/use-svga-player/index.ts @@ -0,0 +1,252 @@ +import { $ } from '@just4/dom'; +import { getFileSuffix } from '@/assets/utils/file'; +import { onBeforeUnmount, onMounted, Ref, ref, unref, watch } from 'vue'; +import { DOMWrap } from '@just4/dom/dom-wrap'; +import { + loadSvgaPlayer, + SVGAParser, + SVGAPlayer, + SVGAVideoEntity, +} from '@/plugins/external-lib-loaders/load-svga-player'; + +// 记录加载的promise,避免重复加载 +const loadSvgaPromises: UniversalParams> = {}; + +/** + * @hook svga 动画播放器 + */ +export const useSvgaPlayer = (wrapRef: Ref) => { + let svgaParser: SVGAParser | undefined; + let svgaPlayer: SVGAPlayer | undefined; + + /** + * 判断是否为 svga 文件地址 + * @param url 目标文件地址 + */ + function isSvgaFileUrl(url: string) { + const suffix = getFileSuffix(url); + return suffix === 'svga'; + } + + /** 是否正在播放动画 */ + const isPlayingAnimation = ref(false); + + /** 创建 svga 播放器 */ + async function createSvgaPlayer() { + if (!wrapRef.value) { + console.warn('createSvgaPlayer fail, wrapRef is undefined'); + return; + } + const SVGA = await loadSvgaPlayer(); + svgaParser = new SVGA.Parser(); + svgaPlayer = new SVGA.Player(wrapRef.value); + } + + /** 清空 svga 动画 */ + function clearSvgaAnimation() { + try { + if (svgaPlayer) { + svgaPlayer.clear(); + svgaPlayer.clearDynamicObjects(); + isPlayingAnimation.value = false; + } + } catch (e) { + console.warn('clearSvgaAnimation 清除动画失败'); + } + } + + /** + * 加载 svga 动画文件地址 + * @param url svga 文件地址 + */ + function loadSvgaFile(url: string) { + if (!loadSvgaPromises[url]) { + loadSvgaPromises[url] = new Promise((resolve, reject) => { + try { + svgaParser?.load(url, videoItem => { + resolve(videoItem); + }); + } catch (e) { + reject(e); + } + }); + } + return loadSvgaPromises[url]; + } + + /** + * 播放 svga 动画文件 + * @param url svga 文件地址 + */ + async function playSvgaAnimation(url: string) { + clearSvgaAnimation(); + + try { + if (!svgaPlayer) { + console.warn('playSvgaAnimation 播放失败,未创建播放器'); + return; + } + + isPlayingAnimation.value = true; + // 加载文件 + const videoItem = await loadSvgaFile(url); + // 设置循环次数 + svgaPlayer.loops = 1; + // 设置播放器文件 + svgaPlayer.setVideoItem(videoItem); + // 开始播放动画 + svgaPlayer.startAnimation(); + // 侦听播放结束,播放下一个动画 + svgaPlayer.onFinished(() => { + isPlayingAnimation.value = false; + checkAnimationQueue(); + }); + } catch (e) { + console.warn('playSvgaAnimation 播放失败'); + isPlayingAnimation.value = false; + checkAnimationQueue(); + } + } + + onMounted(() => { + createSvgaPlayer(); + }); + + onBeforeUnmount(() => { + clearSvgaAnimation(); + }); + + /** 当前显示的图片 */ + const currentImage = ref(); + /** 隐藏图片定时器 */ + let hideImageTimer: number | undefined; + /** 图片节点 */ + let $imageElem: DOMWrap | undefined; + + watch( + () => unref(currentImage), + () => { + const imageUrl = unref(currentImage); + const wrapElem = unref(wrapRef); + if (!wrapElem) return; + + // 没有动画图片,移除节点 + if (!imageUrl) { + $imageElem?.remove(); + $imageElem = undefined; + return; + } + + if (!$imageElem) { + const divElem = document.createElement('div'); + $imageElem = $(divElem); + } + + $imageElem.css({ + width: '61.2%', + height: '80%', + 'background-size': '100% 100%', + 'background-repeat': 'no-repeat', + 'background-image': `url(${imageUrl})`, + position: 'absolute', + left: '50%', + top: '50%', + transform: 'translate(-50%, -50%)', + }); + + $(wrapElem).append($imageElem); + }, + ); + + /** + * 播放图片动画 + * @param url 图片地址 + * @param time 显示时间,默认 2 秒 + */ + function playImageAnimation(url: string, time = 2000) { + clearImageAnimation(); + currentImage.value = url; + isPlayingAnimation.value = true; + hideImageTimer = window.setTimeout(() => { + clearImageAnimation(); + checkAnimationQueue(); + }, time); + } + + /** + * 清空图片动画 + */ + function clearImageAnimation() { + isPlayingAnimation.value = false; + currentImage.value = undefined; + if (hideImageTimer) { + clearTimeout(hideImageTimer); + hideImageTimer = undefined; + } + } + + onBeforeUnmount(() => { + clearImageAnimation(); + }); + + /** 当前动画是否暂停 */ + const isPaused = ref(false); + + /** 暂停当前的动画队列 */ + function pauseAnimationQueue() { + isPaused.value = true; + } + + /** 开始当前的动画队列 */ + function startAnimationQueue() { + isPaused.value = false; + checkAnimationQueue(); + } + + /** svga 动画文件队列 */ + const animationQueue = ref([]); + + /** + * 插入 svga 文件或图片到动画队列中 + * @param url 地址 + * @param inHeader 是否从头部插入 + */ + function pushAnimationQueue(url: string, inHeader = false) { + if (!url) return; + + if (inHeader) { + animationQueue.value.unshift(url); + } else { + animationQueue.value.push(url); + } + checkAnimationQueue(); + } + + /** 检查动画队列 */ + function checkAnimationQueue() { + // 队列为空、正在播放动画、当前暂停播放 + if (animationQueue.value.length === 0 || isPlayingAnimation.value || isPaused.value) { + return; + } + + const url = animationQueue.value.shift(); + if (!url) return; + + if (isSvgaFileUrl(url)) { + playSvgaAnimation(url); + } else { + playImageAnimation(url); + } + } + + return { + animationQueue, + loadSvgaFile, + clearSvgaAnimation, + pushAnimationQueue, + playSvgaAnimation, + playImageAnimation, + pauseAnimationQueue, + startAnimationQueue, + }; +}; diff --git a/src/hooks/behaviors/use-append-to/index.ts b/src/hooks/behaviors/use-append-to/index.ts new file mode 100644 index 0000000..a335f3c --- /dev/null +++ b/src/hooks/behaviors/use-append-to/index.ts @@ -0,0 +1,30 @@ +import { getRefElem } from '@/assets/utils/vue-utils'; +import { onBeforeUnmount, onMounted, Ref } from 'vue'; + +/** + * @hook 处理将节点插入到某个容器中 + * @param elemRef 对应的节点 + * @param parentRef 父节点,默认:document.body + */ +export const useAppendTo = ( + elemRef: Ref | HTMLElement, + parentRef: Ref | HTMLElement = document.body, +) => { + onMounted(() => { + const elem = getRefElem(elemRef); + const parentElem = getRefElem(parentRef); + if (!elem || !parentElem) { + console.warn('useAppendTo fail, elem is undefined'); + return; + } + + parentElem.appendChild(elem); + }); + + onBeforeUnmount(() => { + const elem = getRefElem(elemRef); + if (elem && elem.parentNode) { + elem.parentNode.removeChild(elem); + } + }); +}; diff --git a/src/hooks/behaviors/use-aside-drag/index.ts b/src/hooks/behaviors/use-aside-drag/index.ts new file mode 100644 index 0000000..8569cd0 --- /dev/null +++ b/src/hooks/behaviors/use-aside-drag/index.ts @@ -0,0 +1,92 @@ +import { getRefElem } from '@/assets/utils/vue-utils'; +import { onBeforeUnmount, onMounted, Ref, ref } from 'vue'; + +export interface UseAsideDragOption { + /** 目标元素节点 */ + targetRef: Ref | HTMLElement; + /** 获取初始定位 */ + getInitTop?: () => number; +} + +/** + * @hook 侧边拖拽 + */ +export const useAsideDrag = (options: UseAsideDragOption) => { + const { getInitTop } = options; + + /** top 定位 */ + const top = ref(0); + + let prevPageY: number | undefined; + + /** 初始化定位 */ + function initTop() { + if (getInitTop) { + top.value = getInitTop(); + } + } + + onMounted(() => { + initTop(); + + const targetElem = getRefElem(options.targetRef); + if (!targetElem) { + return; + } + targetElem.addEventListener('touchstart', () => { + prevPageY = undefined; + bindBodyEvent(); + }); + }); + + function bindBodyEvent() { + unbindBodyEvent(); + const body = document.body; + body.addEventListener('touchmove', onBodyTouchMove); + body.addEventListener('touchend', onBodyTouchEnd); + body.addEventListener('touchcancel', onBodyTouchEnd); + } + + function unbindBodyEvent() { + const body = document.body; + body.removeEventListener('touchmove', onBodyTouchMove); + } + + /** 处理 body touchmove 事件 */ + function onBodyTouchMove(event: TouchEvent) { + const pageY = event.touches[0].pageY; + + if (typeof prevPageY === 'undefined') { + prevPageY = pageY; + return; + } + + const diffY = pageY - prevPageY; + + let newTop = top.value + diffY; + if (newTop < 0) { + newTop = 0; + } + + const targetElem = getRefElem(options.targetRef); + if (targetElem && newTop > document.body.clientHeight - targetElem.clientHeight) { + newTop = document.body.clientHeight - targetElem.clientHeight; + } + + top.value = newTop; + prevPageY = pageY; + } + + function onBodyTouchEnd() { + prevPageY = undefined; + unbindBodyEvent(); + } + + onBeforeUnmount(() => { + unbindBodyEvent(); + }); + + return { + top, + }; +}; diff --git a/src/hooks/behaviors/use-click-outside/index.ts b/src/hooks/behaviors/use-click-outside/index.ts new file mode 100644 index 0000000..45d8140 --- /dev/null +++ b/src/hooks/behaviors/use-click-outside/index.ts @@ -0,0 +1,105 @@ +import Vue, { onBeforeUnmount, onMounted, Ref } from 'vue'; +import { getRefElem } from '@/assets/utils/vue-utils'; +import { isFunction } from '@/assets/utils/function'; + +export type ClickOutsideTargetType = RefOrElement | string | Ref; + +export type ClickOutsideTargets = ClickOutsideTargetType | ClickOutsideTargetType[]; + +export type ClickOutsideTargetsFunction = () => ClickOutsideTargets; + +/** + * @hook 点击节点外部事件 hook + * @param targets 响应式节点数组或获取方法 + * @param callback 回调方法 + * @param autoListen 自动监听,默认:true + * @returns + * ``` + * listenClickOutSide - 监听点击外部事件 + * removeListenClickOutSide - 移除点击外部监听事件 + * ``` + */ +export const useClickOutside = ( + targets: ClickOutsideTargets | ClickOutsideTargetsFunction, + callback: EmptyParamsFunc, + autoListen = true, +) => { + /** 获取用于比较的 dom 节点列表 */ + function getCompareElements(): HTMLElement[] { + const targetElements: HTMLElement[] = []; + + const joinElem = (refTarget: ClickOutsideTargetType) => { + // 传入的是 dom 选择器 + if (typeof refTarget === 'string') { + const res = document.querySelectorAll(refTarget); + res && res.forEach(e => targetElements.push(e as HTMLElement)); + return; + } + + const elemVal = getRefElem(refTarget); + // 已经是 dom 节点 + if (elemVal instanceof HTMLElement) { + targetElements.push(elemVal); + } + }; + + const res = isFunction(targets) ? targets() : targets; + const elements = Array.isArray(res) ? res : [res]; + elements.forEach(joinElem); + + return targetElements; + } + + /** 处理 document click 事件 */ + const handleDocumentClick = (event: MouseEvent) => { + const clickTarget = event.target as HTMLElement; + + if (clickTarget) { + let isInTarget = false; + + const compareElements = getCompareElements(); + + compareElements.forEach(targetRef => { + const target = getRefElem(targetRef); + if (target instanceof HTMLElement && target.contains(clickTarget)) { + isInTarget = true; + } + }); + + if (!isInTarget) { + callback(); + } + } + }; + let isListen = false; + + /** 监听点击外层 */ + const listenClickOutSide = () => { + if (isListen) { + return; + } + isListen = true; + document.addEventListener('mouseup', handleDocumentClick); + }; + + /** 取消监听 */ + const removeListenClickOutSide = () => { + document.removeEventListener('mouseup', handleDocumentClick); + isListen = false; + }; + + onMounted(() => { + if (autoListen) { + listenClickOutSide(); + } + }); + + onBeforeUnmount(() => { + removeListenClickOutSide(); + }); + + return { + listenClickOutSide, + removeListenClickOutSide, + }; +}; diff --git a/src/hooks/behaviors/use-panel-visible/index.ts b/src/hooks/behaviors/use-panel-visible/index.ts new file mode 100644 index 0000000..59e8c96 --- /dev/null +++ b/src/hooks/behaviors/use-panel-visible/index.ts @@ -0,0 +1,62 @@ +import { ref, unref, watch } from 'vue'; +import { ClickOutsideTargets, useClickOutside } from '../use-click-outside'; + +/** + * @hook 面板显隐 + * @description 在点击面板外部时自动关闭 + */ +export const usePanelVisible = (target: ClickOutsideTargets) => { + /** 显示状态 */ + const visible = ref(false); + + /** 显示面板 */ + function showPanel() { + visible.value = true; + } + + /** 隐藏面板 */ + function hidePanel() { + visible.value = false; + } + + /** 切换面板显示 */ + function togglePanel() { + if (visible.value) { + hidePanel(); + } else { + showPanel(); + } + } + + /** 处理点击外层 */ + function onClickOutside() { + hidePanel(); + } + + const { listenClickOutSide, removeListenClickOutSide } = useClickOutside( + target, + onClickOutside, + false, + ); + + watch( + () => unref(visible), + () => { + if (unref(visible)) { + listenClickOutSide(); + } else { + removeListenClickOutSide(); + } + }, + { + immediate: true, + }, + ); + + return { + visible, + showPanel, + hidePanel, + togglePanel, + }; +}; diff --git a/src/hooks/behaviors/use-scroll-arrow/index.ts b/src/hooks/behaviors/use-scroll-arrow/index.ts new file mode 100644 index 0000000..bc21abe --- /dev/null +++ b/src/hooks/behaviors/use-scroll-arrow/index.ts @@ -0,0 +1,72 @@ +import { ref, nextTick } from 'vue'; +import { useWindowResizeListener } from '../../core/use-window-resize-listener'; + +/** + * @hook 根据滚动内容处理横向滚动条与箭头显示 + * */ +export const useHorizontalScrollArrow = () => { + /** 滚动节点 */ + const scrollRef = ref(); + /** 左箭头是否显示 */ + const leftArrowVisible = ref(false); + /** 右箭头是否显示 */ + const rightArrowVisible = ref(false); + + /** 重置箭头显示状态 */ + async function resetArrowVisible() { + await nextTick(); + + if (!scrollRef.value) { + return; + } + + const { scrollLeft, scrollWidth, clientWidth } = scrollRef.value; + + if (scrollWidth > clientWidth) { + rightArrowVisible.value = true; + } else { + rightArrowVisible.value = false; + } + + if (scrollLeft > 0) { + leftArrowVisible.value = true; + } else { + leftArrowVisible.value = false; + } + } + + /** 处理节点滚动事件 */ + function onScrollEvent() { + resetArrowVisible(); + } + + /** 处理左箭头点击 */ + function onLeftArrowClick() { + if (!leftArrowVisible.value || !scrollRef.value) { + return; + } + + scrollRef.value.scrollLeft = 0; + } + + /** 处理右箭头点击 */ + function onRightArrowClick() { + if (!rightArrowVisible.value || !scrollRef.value) { + return; + } + + scrollRef.value.scrollLeft = scrollRef.value.scrollWidth; + } + + useWindowResizeListener(resetArrowVisible, true); + + return { + scrollRef, + leftArrowVisible, + rightArrowVisible, + resetArrowVisible, + onScrollEvent, + onLeftArrowClick, + onRightArrowClick, + }; +}; diff --git a/src/hooks/behaviors/use-scroll-list/index.ts b/src/hooks/behaviors/use-scroll-list/index.ts new file mode 100644 index 0000000..77372a6 --- /dev/null +++ b/src/hooks/behaviors/use-scroll-list/index.ts @@ -0,0 +1,122 @@ +import { nextTick, ref, unref } from 'vue'; + +export interface ScrollListInstance { + /** 是否靠近底部 */ + isNearBottom(): boolean; + /** 滚动到最底部 */ + scrollToBottom(): void; + /** 检查当前滚动条是否靠近底部,靠近则滚到底部 */ + checkScrollToBottom(): void; + /** 记录当前的第一个节点 */ + recordFirstElem(): void; + /** 滚动到记录到首个节点 */ + scrollToFirstRecord(): Promise; +} + +export interface UseScrollListOptions { + /** 首个节点的索引,默认:0 */ + firstElemIndex?: number; + /** 靠近顶部回调 */ + nearTopCallback?: () => void; +} + +/** + * @hook 滚动列表 + */ +export const useScrollList = (options: UseScrollListOptions = {}) => { + const { firstElemIndex = 0 } = options; + /** 滚动节点 */ + const scrollRef = ref(); + + /** 是否靠近底部 */ + function isNearBottom(): boolean { + const scrollElem = unref(scrollRef); + if (!scrollElem) { + return false; + } + + const clientRect = Object.assign({}, scrollElem.getBoundingClientRect()); + clientRect.width = clientRect.width || clientRect.right - clientRect.left; + clientRect.height = clientRect.height || clientRect.bottom - clientRect.top; + + // 消息列表处于非可见状态 + if (clientRect.width === 0 && clientRect.height === 0) { + return false; + } + + return scrollElem.scrollHeight - scrollElem.clientHeight - scrollElem.scrollTop < 120; + } + + /** 滚动到最底部 */ + async function scrollToBottom() { + await nextTick(); + const scrollElem = unref(scrollRef); + if (!scrollElem) { + return; + } + scrollElem.scrollTop = scrollElem.scrollHeight; + } + + /** 检查当前滚动条是否靠近底部,靠近则滚到底部 */ + function checkScrollToBottom() { + if (isNearBottom()) { + scrollToBottom(); + } + } + + /** 处理滚动事件 */ + function onScrollEvent() { + const scrollElem = unref(scrollRef); + if (!scrollElem) { + return; + } + + const top = scrollElem.scrollTop; + if (top === 0 && options.nearTopCallback) { + options.nearTopCallback(); + } + } + + let firstElem: HTMLElement | undefined; + + /** 记录当前的第一个节点 */ + function recordFirstElem() { + const scrollElem = unref(scrollRef); + if (!scrollElem) { + return; + } + const childElements = scrollElem.childNodes; + if (childElements.length > 1) { + firstElem = childElements[firstElemIndex] as HTMLElement; + } + } + + /** 滚动到记录到首个节点 */ + async function scrollToFirstRecord() { + const scrollElem = unref(scrollRef); + if (!scrollElem || !firstElem) { + return; + } + await nextTick(); + const scrollTop = firstElem.offsetTop - firstElem.clientHeight + firstElem.clientHeight; + scrollElem.scrollTop = scrollTop; + } + + /** 导出对象 */ + const scrollListInstance: ScrollListInstance = { + isNearBottom, + scrollToBottom, + checkScrollToBottom, + recordFirstElem, + scrollToFirstRecord, + }; + + return { + scrollRef, + isNearBottom, + scrollToBottom, + checkScrollToBottom, + scrollListInstance, + onScrollEvent, + }; +}; diff --git a/src/hooks/behaviors/use-simple-visible/index.ts b/src/hooks/behaviors/use-simple-visible/index.ts new file mode 100644 index 0000000..8a352aa --- /dev/null +++ b/src/hooks/behaviors/use-simple-visible/index.ts @@ -0,0 +1,98 @@ +/** + * @file 简单的显隐 hook + */ + +import { onBeforeUnmount, ref, unref, watch } from 'vue'; + +export interface SimpleVisibleOptions { + /** 是否自动关闭,默认:false */ + autoClose?: boolean; + /** 自动关闭时间,单位:毫秒,默认:5 * 1000 */ + autoCloseTime?: number; +} + +/** + * 简单的显隐 hook + * @param defaultVisible 默认显示状态,默认:false + */ +export const useSimpleVisible = (defaultVisible = false, options: SimpleVisibleOptions = {}) => { + const { autoClose = false, autoCloseTime = 5 * 1000 } = options; + + const visible = ref(defaultVisible); + + /** + * 设置显示状态 + * @param _visible 显示状态,默认:true + */ + function setVisible(_visible = true) { + visible.value = !!_visible; + } + + /** 显示 */ + function show() { + setVisible(true); + } + + /** 关闭 */ + function close() { + setVisible(false); + } + + /** 切换显示状态 */ + function toggle() { + if (unref(visible)) { + close(); + } else { + show(); + } + } + + let closeTimer: number | undefined; + + /** 设置关闭定时器 */ + function setCloseTimer() { + removeCloseTimer(); + closeTimer = window.setTimeout(() => { + close(); + }, autoCloseTime); + } + + /** 移除关闭定时器 */ + function removeCloseTimer() { + if (closeTimer) { + clearTimeout(closeTimer); + closeTimer = undefined; + } + } + + // 自动关闭处理 + watch( + () => unref(visible), + () => { + if (!autoClose) { + return; + } + + if (!visible.value) { + removeCloseTimer(); + return; + } + setCloseTimer(); + }, + { + immediate: true, + }, + ); + + onBeforeUnmount(() => { + removeCloseTimer(); + }); + + return { + visible, + setVisible, + show, + close, + toggle, + }; +}; diff --git a/src/hooks/business/use-pv-track/index.ts b/src/hooks/business/use-pv-track/index.ts new file mode 100644 index 0000000..426982b --- /dev/null +++ b/src/hooks/business/use-pv-track/index.ts @@ -0,0 +1,12 @@ +import { getWatchCore } from '@/core/watch-sdk'; +import { useChannelStore } from '@/store/use-channel-store'; +import { RtasTrackPageType } from '@polyv/live-watch-sdk'; +import { watchEffect } from 'vue'; + +export const usePvTrack = (pageType: RtasTrackPageType) => { + const channelStore = useChannelStore(); + watchEffect(() => { + const watchCore = getWatchCore(); + watchCore.rtas.trackPageUV(pageType, channelStore.liveStatus); + }); +}; diff --git a/src/hooks/components/use-image-preview/index.ts b/src/hooks/components/use-image-preview/index.ts new file mode 100644 index 0000000..a8fb36d --- /dev/null +++ b/src/hooks/components/use-image-preview/index.ts @@ -0,0 +1,23 @@ +import { ImagePreviewOptions } from '@/plugins/polyv-ui/types'; +import { PlvImagePreview } from '@/plugins/polyv-ui/admin-import'; + +/** + * 浏览图片 + * @param images 图片地址 + * @param options 选项 + */ +export const previewImage = (images: string | string[] = [], options: ImagePreviewOptions = {}) => { + return PlvImagePreview(images, options); +}; + +/** + * 点击图片进行预览 + * @param event 事件对象 + */ +export function clickImgToPreview(event: Event) { + const target = event.target; + + if (target instanceof HTMLImageElement) { + previewImage(target.src); + } +} diff --git a/src/hooks/components/use-popper/_components/popper-arrow.vue b/src/hooks/components/use-popper/_components/popper-arrow.vue new file mode 100644 index 0000000..1d30b82 --- /dev/null +++ b/src/hooks/components/use-popper/_components/popper-arrow.vue @@ -0,0 +1,58 @@ + + + + + + diff --git a/src/hooks/components/use-popper/_hooks/use-popper-arrow.ts b/src/hooks/components/use-popper/_hooks/use-popper-arrow.ts new file mode 100644 index 0000000..cb93ff0 --- /dev/null +++ b/src/hooks/components/use-popper/_hooks/use-popper-arrow.ts @@ -0,0 +1,50 @@ +/** + * @file popper 箭头 hook + */ +import Vue, { ComponentOptions, onMounted, unref } from 'vue'; +import { ExtendedVue } from 'vue/types/vue'; + +import PopperArrow from '../_components/popper-arrow.vue'; +import { PopperOptions } from '../_popper-type'; + +export interface PopperArrowOptions { + /** 颜色,默认:#fff */ + color?: string; + /** 尺寸,默认:6 */ + size?: number; +} + +export type PopperArrowComponentOptions = ComponentOptions; +export type PopperArrowCtorType = ExtendedVue< + Vue, + Record, + Record, + Record, + PopperArrowOptions, + Record +>; +const PopperArrowConstructor = Vue.extend(PopperArrow as PopperArrowComponentOptions); + +export const usePopperArrow = (popperOptions: PopperOptions) => { + const { getElement, arrow } = popperOptions; + + /** 创建箭头节点 */ + function createArrowElem() { + const arrowVal = unref(arrow); + const propsData = typeof arrowVal === 'boolean' ? {} : arrowVal; + const instance = new PopperArrowConstructor({ + propsData, + }); + instance.$mount(); + + const { popperElem } = getElement(); + + popperElem && popperElem.appendChild(instance.$el); + } + + onMounted(() => { + if (unref(arrow)) { + createArrowElem(); + } + }); +}; diff --git a/src/hooks/components/use-popper/_hooks/use-popper-core.ts b/src/hooks/components/use-popper/_hooks/use-popper-core.ts new file mode 100644 index 0000000..b1bbfe0 --- /dev/null +++ b/src/hooks/components/use-popper/_hooks/use-popper-core.ts @@ -0,0 +1,192 @@ +/** + * @file @popperjs/core 相关的 hook + */ +import { ref, unref, watch, computed, onMounted, onUnmounted, nextTick } from 'vue'; +import { createPopper, Instance as PopperInstance, OptionsGeneric, Modifier } from '@popperjs/core'; +import type { EventListenersModifier } from '@popperjs/core/lib/modifiers/eventListeners'; +import type { OffsetModifier } from '@popperjs/core/lib/modifiers/offset'; +import type { ComputeStylesModifier } from '@popperjs/core/lib/modifiers/computeStyles'; +import type { ArrowModifier } from '@popperjs/core/lib/modifiers/arrow'; +import { PopperOptions } from '../_popper-type'; + +/** + * 构建 popperjs 的配置 + */ +export const usePopperCoreOptions = ( + popperOptions: PopperOptions, + getPopperCtx: () => PopperInstance | undefined, +) => { + const { onPopperEvent, placement, popperOffset } = popperOptions; + + const popperCoreOptions = computed>>(() => { + // 样式计算,使用 top/left/right/bottom 进行定位 + const computeStylesMod: Pick = { + name: 'computeStyles', + options: { + gpuAcceleration: false, + adaptive: false, + }, + }; + + // 事件监听 + const eventListenersMod: Pick = { + name: 'eventListeners', + fn: ({ state }) => { + const isReferenceHidden = !!state.modifiersData.hide?.isReferenceHidden; + if (typeof onPopperEvent === 'function') { + onPopperEvent({ isReferenceHidden }); + } + }, + }; + + // 偏移量 + const offsetMod: Pick = { + name: 'offset', + options: { + offset: ({ placement }) => { + let skidding = 0; + let distance = 0; + + const offsetVal = unref(popperOffset); + if (offsetVal) { + const offsetValSkidding = offsetVal[0] ?? 0; + const offsetValDistance = offsetVal[1] ?? 0; + skidding += offsetValSkidding; + distance += offsetValDistance; + } + + // 根据箭头的大小自动叠加 offset + const ctx = getPopperCtx(); + const arrowElem = ctx?.state?.elements?.arrow; + if (arrowElem instanceof HTMLElement) { + const width = arrowElem.offsetWidth; + const height = arrowElem.offsetHeight; + + if (placement.includes('top') || placement.includes('bottom')) { + distance += height / 2; + } + + if (placement.includes('left') || placement.includes('right')) { + distance += width / 2; + } + } + + return [skidding, distance]; + }, + }, + }; + + // 箭头 + const arrowMod: Pick = { + name: 'arrow', + options: { + padding: 6, + }, + }; + + return { + placement: unref(placement), + strategy: 'absolute', + modifiers: [computeStylesMod, eventListenersMod, offsetMod, arrowMod], + } as OptionsGeneric>; + }); + + return { + /** 弹层选项 */ + popperCoreOptions, + }; +}; + +export const usePopperCore = (popperOptions: PopperOptions) => { + const { getElement, popperVisible } = popperOptions; + + const { popperCoreOptions } = usePopperCoreOptions(popperOptions, getPopperCtx); + + /** 弹层 sdk 实例 */ + const popperCtx = ref(undefined); + + /** 获取弹层 sdk 实例 */ + function getPopperCtx(): PopperInstance | undefined { + return unref(popperCtx); + } + + /** 更新弹层位置 */ + async function updatePopper() { + await nextTick(); + + const ctx = getPopperCtx(); + if (ctx) { + ctx.update(); + } + } + + /** 创建弹窗 SDK */ + function createPopperCore() { + destroyPopperCore(); + + const { referenceElem, popperElem } = getElement(); + if (referenceElem && popperElem) { + popperCtx.value = createPopper(referenceElem, popperElem, unref(popperCoreOptions)); + } + } + + /** 销毁弹层 SDK */ + function destroyPopperCore() { + const ctx = getPopperCtx(); + if (ctx) { + ctx.destroy(); + } + } + + // 是否第一次 update + let isFirstUpdate = true; + + watch( + () => unref(popperVisible), + () => { + if (unref(popperVisible)) { + updatePopper(); + + /** + * 在 popperjs 中,横向弹层在首次 update 时会不准,垂直方向定位会有一点偏差,第二次之后才准 + * 这里判断在首次 update 且横向弹出时,延迟 10ms 再次进行 update 来解决这个问题 + */ + const ctx = getPopperCtx(); + if (ctx && isFirstUpdate && /left|right/.test(ctx.state.placement)) { + setTimeout(() => { + updatePopper(); + }, 10); + } + isFirstUpdate = false; + } + }, + ); + + watch( + () => unref(popperCoreOptions), + () => { + const ctx = getPopperCtx(); + if (ctx) { + ctx.setOptions(unref(popperCoreOptions)); + } + }, + ); + + watch(getElement, () => createPopperCore()); + + onMounted(() => { + createPopperCore(); + }); + + onUnmounted(() => { + destroyPopperCore(); + }); + + return { + popperCtx, + getPopperCtx, + updatePopper, + createPopperCore, + destroyPopperCore, + }; +}; diff --git a/src/hooks/components/use-popper/_hooks/use-popper-interactive.ts b/src/hooks/components/use-popper/_hooks/use-popper-interactive.ts new file mode 100644 index 0000000..4b615c0 --- /dev/null +++ b/src/hooks/components/use-popper/_hooks/use-popper-interactive.ts @@ -0,0 +1,104 @@ +import { onMounted, unref } from 'vue'; +import { useClickOutside } from '@/hooks/behaviors/use-click-outside'; +import { PopperOptions } from '../_popper-type'; + +/** + * 弹层交互方式 hook + */ +export const usePopperInteractive = (popperOptions: PopperOptions) => { + const { + trigger, + popperDisabled, + getElement, + mouseEnterDelay, + mouseLeaveDelay, + showPopper, + hidePopper, + togglePopper, + delayShowPopper, + delayHidePopper, + forceOutSideClickHide, + outSideClickDelayHide, + } = popperOptions; + + // ============== click 交互 ============== // + useClickOutside( + () => { + const { referenceElem, popperElem } = getElement(); + const elements: HTMLElement[] = []; + referenceElem && elements.push(referenceElem); + popperElem && elements.push(popperElem); + return elements; + }, + () => { + if (unref(forceOutSideClickHide) || unref(trigger).includes('click')) { + unref(outSideClickDelayHide) ? delayHidePopper() : hidePopper(); + } + }, + ); + const listenElemClickEvent = () => { + if (unref(popperDisabled)) { + return; + } + const { referenceElem } = getElement(); + if (referenceElem) { + referenceElem.addEventListener('click', togglePopper); + } + }; + + // ============== hover 交互 ============== // + const mouseEnterToShow = () => { + if (unref(popperDisabled)) { + return; + } + delayShowPopper(unref(mouseEnterDelay)); + }; + const mouseLeaverToHide = () => { + delayHidePopper(unref(mouseLeaveDelay)); + }; + const listenElemHoverEvent = () => { + const { referenceElem, popperElem } = getElement(); + if (referenceElem && popperElem) { + referenceElem.addEventListener('mouseenter', mouseEnterToShow); + referenceElem.addEventListener('mouseleave', mouseLeaverToHide); + popperElem.addEventListener('mouseenter', mouseEnterToShow); + popperElem.addEventListener('mouseleave', mouseLeaverToHide); + } + }; + + // ============== focus 交互 ============== // + const focusToShow = () => { + if (unref(popperDisabled)) { + return; + } + showPopper(); + }; + const blurToHide = () => { + hidePopper(); + }; + const listenElemFocusEvent = () => { + const { inputElem } = getElement(); + if (inputElem) { + inputElem.addEventListener('focus', focusToShow); + inputElem.addEventListener('blur', blurToHide); + } + }; + + /** 设置交互 */ + const setInteractive = () => { + const triggerVal = unref(trigger); + if (triggerVal.includes('click')) { + listenElemClickEvent(); + } + if (triggerVal.includes('hover')) { + listenElemHoverEvent(); + } + if (triggerVal.includes('focus')) { + listenElemFocusEvent(); + } + }; + + onMounted(() => { + setInteractive(); + }); +}; diff --git a/src/hooks/components/use-popper/_hooks/use-popper-visible.ts b/src/hooks/components/use-popper/_hooks/use-popper-visible.ts new file mode 100644 index 0000000..dc27c66 --- /dev/null +++ b/src/hooks/components/use-popper/_hooks/use-popper-visible.ts @@ -0,0 +1,91 @@ +/** + * @file popper 弹层显示状态 hook + */ +import { isRef, onBeforeUnmount, Ref, ref, unref } from 'vue'; +import { PopperVisibleResult } from '../_popper-type'; + +export type UsePopperVisibleOptions = { + popperVisible?: boolean | Ref; +}; + +export const usePopperVisible = (options: UsePopperVisibleOptions = {}): PopperVisibleResult => { + /** 弹层显示状态 */ + const popperVisible = isRef(options.popperVisible) + ? options.popperVisible + : ref(!!options.popperVisible); + + // 设置弹层显示状态 + function setVisible(visible = false) { + destroyDelayShowTimer(); + destroyDelayHideTimer(); + popperVisible.value = visible; + } + + /** 显示弹层 */ + function showPopper() { + setVisible(true); + } + + /** 隐藏弹层 */ + function hidePopper() { + setVisible(false); + } + + /** 切换弹层显示状态 */ + function togglePopper() { + setVisible(!unref(popperVisible)); + } + + /** 显示延迟计时器 */ + let delayShowTimer: number | undefined; + /** 隐藏延迟计时器 */ + let delayHideTimer: number | undefined; + + /** 延迟显示弹层 */ + function delayShowPopper(delay = 100) { + destroyDelayShowTimer(); + destroyDelayHideTimer(); + if (!delay) { + showPopper(); + return; + } + delayShowTimer = window.setTimeout(() => showPopper(), delay); + } + + /** 延迟隐藏弹层 */ + function delayHidePopper(delay = 100) { + destroyDelayShowTimer(); + destroyDelayHideTimer(); + if (!delay) { + hidePopper(); + return; + } + delayHideTimer = window.setTimeout(() => hidePopper(), delay); + } + + /** 销毁显示延迟定时器 */ + function destroyDelayShowTimer() { + clearTimeout(delayShowTimer); + delayShowTimer = undefined; + } + + /** 销毁隐藏延迟定时器 */ + function destroyDelayHideTimer() { + clearTimeout(delayHideTimer); + delayHideTimer = undefined; + } + + onBeforeUnmount(() => { + destroyDelayShowTimer(); + destroyDelayHideTimer(); + }); + + return { + popperVisible, + showPopper, + hidePopper, + togglePopper, + delayShowPopper, + delayHidePopper, + }; +}; diff --git a/src/hooks/components/use-popper/_popper-type.ts b/src/hooks/components/use-popper/_popper-type.ts new file mode 100644 index 0000000..ded3271 --- /dev/null +++ b/src/hooks/components/use-popper/_popper-type.ts @@ -0,0 +1,73 @@ +import { Ref } from 'vue'; +import type { Placement } from '@popperjs/core'; +import { PopperArrowOptions } from './_hooks/use-popper-arrow'; + +export type PopperOffset = [number, number]; + +/** 弹层触发方式 */ +export type PopperTrigger = 'click' | 'hover' | 'focus' | 'custom'; + +export interface UsePopperOptions { + popperVisible?: boolean | Ref; + /** 触发节点 ref */ + referenceRef?: HTMLElement | Ref; + /** 弹层节点 ref */ + popperRef?: HTMLElement | Ref; + /** 输入框节点 ref,用于聚焦显示的交互 */ + inputRef?: HTMLInputElement | Ref; + /** 弹层是否禁用 */ + popperDisabled?: boolean | Ref; + /** 触发方式 */ + trigger?: PopperTrigger | Ref; + /** 鼠标移入延迟显示时间 */ + mouseEnterDelay?: number | Ref; + /** 鼠标移出延迟隐藏时间 */ + mouseLeaveDelay?: number | Ref; + /** 弹层位置 */ + placement?: Placement | Ref; + /** 弹层偏移量 */ + popperOffset?: PopperOffset | Ref; + /** 是否显示箭头,默认:false */ + arrow?: boolean | PopperArrowOptions | Ref; + /** 强制 outSideClick 关闭,默认:false */ + forceOutSideClickHide?: boolean | Ref; + /** outSideClick 关闭时是否延迟,默认:false */ + outSideClickDelayHide?: boolean | Ref; + /** 弹层宽度跟随触发节点,默认:false */ + followReferenceWidth?: boolean | Ref; +} + +export interface PopperVisibleResult { + /** 弹层显示状态 */ + popperVisible: Ref; + /** 显示弹层 */ + showPopper: () => void; + /** 隐藏弹窗 */ + hidePopper: () => void; + /** 切换弹层显示状态 */ + togglePopper: () => void; + /** 延迟显示弹层 */ + delayShowPopper: (delay?: number) => void; + /** 延迟隐藏弹层 */ + delayHidePopper: (delay?: number) => void; +} + +export interface PopperElements { + referenceElem: HTMLElement | undefined; + popperElem: HTMLElement | undefined; + inputElem: HTMLElement | undefined; +} + +export interface OnPopperEventParams { + /** 触发节点是否已隐藏 */ + isReferenceHidden: boolean; +} + +export interface PopperOptions + extends Required>, + PopperVisibleResult { + /** 获取相关 dom 节点 */ + getElement: () => PopperElements; + /** 处理弹层事件 */ + onPopperEvent: (params: OnPopperEventParams) => void; +} diff --git a/src/hooks/components/use-popper/index.ts b/src/hooks/components/use-popper/index.ts new file mode 100644 index 0000000..d36394e --- /dev/null +++ b/src/hooks/components/use-popper/index.ts @@ -0,0 +1,113 @@ +/** + * @file 弹层相关 hook + */ +import { $ } from '@just4/dom'; +import { ref, unref, watchEffect } from 'vue'; + +import { getRefElem } from '@/assets/utils/vue-utils'; +import { useAppendTo } from '@/hooks/behaviors/use-append-to'; +import { useAutoTopmostToShow } from '@/hooks/components/use-popper/use-auto-topmost-show'; + +import { usePopperCore } from './_hooks/use-popper-core'; +import { usePopperInteractive } from './_hooks/use-popper-interactive'; +import { usePopperVisible } from './_hooks/use-popper-visible'; +import { usePopperArrow } from './_hooks/use-popper-arrow'; +import { OnPopperEventParams, PopperOffset, PopperOptions, UsePopperOptions } from './_popper-type'; + +/** + * @hook 弹出层 hook + */ +export const usePopper = (options: UsePopperOptions = {}) => { + /** 触发节点 ref */ + const referenceRef = options.referenceRef ?? ref(); + /** 弹层节点 ref */ + const popperRef = options.popperRef ?? ref(); + /** 输入框节点 ref,用于聚焦显示的交互 */ + const inputRef = options.inputRef ?? ref(); + /** 弹层是否禁用 */ + const popperDisabled = options.popperDisabled ?? ref(false); + /** 触发方式 */ + const trigger = options.trigger ?? ref('click'); + /** hover 触发鼠标移入延迟显示 */ + const mouseEnterDelay = options.mouseEnterDelay ?? ref(100); + /** hover 触发鼠标移入延迟显示 */ + const mouseLeaveDelay = options.mouseLeaveDelay ?? ref(100); + /** 弹层位置 */ + const placement = options.placement ?? ref('bottom'); + /** 弹层偏移量 */ + const popperOffset = options.popperOffset ?? ref([0, 0]); + /** 是否创建箭头 */ + const arrow = options.arrow ?? ref(false); + /** 强制 outSideClick 关闭 */ + const forceOutSideClickHide = options.forceOutSideClickHide ?? ref(false); + /** outSideClick 关闭时是否延迟 */ + const outSideClickDelayHide = options.outSideClickDelayHide ?? ref(false); + /** 弹层宽度跟随触发节点 */ + const followReferenceWidth = options.followReferenceWidth ?? ref(false); + + const { popperVisible, showPopper, hidePopper, togglePopper, delayShowPopper, delayHidePopper } = + usePopperVisible(options); + + // 获取节点信息 + function getElement() { + return { + referenceElem: getRefElem(referenceRef), + popperElem: getRefElem(popperRef), + inputElem: getRefElem(inputRef), + }; + } + + /** 处理弹层 SDK 的事件 */ + function onPopperEvent(params: OnPopperEventParams) { + const { isReferenceHidden } = params; + // 滚动中触发层已隐藏,则将弹层一起隐藏 + if (isReferenceHidden && unref(popperVisible)) { + hidePopper(); + } + } + + watchEffect(() => { + const { referenceElem, popperElem } = getElement(); + if (unref(followReferenceWidth) && unref(popperVisible) && referenceElem && popperElem) { + const clientWidth = referenceElem.clientWidth; + $(popperElem).css({ + width: `${clientWidth}px`, + }); + } + }); + + const popperOptions: PopperOptions = { + referenceRef, + popperRef, + inputRef, + popperDisabled, + trigger, + mouseEnterDelay, + mouseLeaveDelay, + placement, + popperOffset, + arrow, + forceOutSideClickHide, + outSideClickDelayHide, + followReferenceWidth, + popperVisible, + showPopper, + hidePopper, + togglePopper, + delayShowPopper, + delayHidePopper, + getElement, + onPopperEvent, + }; + + useAppendTo(popperRef); + usePopperArrow(popperOptions); + usePopperInteractive(popperOptions); + useAutoTopmostToShow(popperVisible, popperRef); + const { updatePopper } = usePopperCore(popperOptions); + + return { + ...popperOptions, + updatePopper, + }; +}; diff --git a/src/hooks/components/use-popper/use-auto-topmost-show.ts b/src/hooks/components/use-popper/use-auto-topmost-show.ts new file mode 100644 index 0000000..719547a --- /dev/null +++ b/src/hooks/components/use-popper/use-auto-topmost-show.ts @@ -0,0 +1,34 @@ +import { PlvPopperManager } from '@/plugins/polyv-ui/admin-import'; +import { Ref, unref, watch } from 'vue'; +import { getRefElem } from '@/assets/utils/vue-utils'; + +/** 弹出层层叠数 z-index 的 hook */ +const usePopperZIndex = () => { + /** 设置弹出层元素到最顶层 */ + const setTopmostElem = (elemRef: RefOrElement) => { + const elem = getRefElem(elemRef); + elem && PlvPopperManager.openPopper(elem); + }; + + return { + setTopmostElem, + }; +}; + +/** + * 设置根据显隐状态自动将节点层叠数置顶 + * @param visibleRef 显隐响应式 + * @param elemRef 弹出层节点响应式 + */ +export const useAutoTopmostToShow = (visibleRef: Ref, elemRef: RefOrElement) => { + const { setTopmostElem } = usePopperZIndex(); + + watch( + () => unref(visibleRef), + () => { + if (unref(visibleRef)) { + setTopmostElem(elemRef); + } + }, + ); +}; diff --git a/src/hooks/components/use-toast/_components/imgs/toast-error.svg b/src/hooks/components/use-toast/_components/imgs/toast-error.svg new file mode 100644 index 0000000..d109e14 --- /dev/null +++ b/src/hooks/components/use-toast/_components/imgs/toast-error.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/hooks/components/use-toast/_components/imgs/toast-help.svg b/src/hooks/components/use-toast/_components/imgs/toast-help.svg new file mode 100644 index 0000000..8b92a22 --- /dev/null +++ b/src/hooks/components/use-toast/_components/imgs/toast-help.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/hooks/components/use-toast/_components/imgs/toast-info.svg b/src/hooks/components/use-toast/_components/imgs/toast-info.svg new file mode 100644 index 0000000..8b93ea5 --- /dev/null +++ b/src/hooks/components/use-toast/_components/imgs/toast-info.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/hooks/components/use-toast/_components/imgs/toast-loading.svg b/src/hooks/components/use-toast/_components/imgs/toast-loading.svg new file mode 100644 index 0000000..cda1d23 --- /dev/null +++ b/src/hooks/components/use-toast/_components/imgs/toast-loading.svg @@ -0,0 +1,18 @@ + + + icon 加载中 + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/hooks/components/use-toast/_components/imgs/toast-success.svg b/src/hooks/components/use-toast/_components/imgs/toast-success.svg new file mode 100644 index 0000000..291a09d --- /dev/null +++ b/src/hooks/components/use-toast/_components/imgs/toast-success.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/hooks/components/use-toast/_components/imgs/toast-warning.svg b/src/hooks/components/use-toast/_components/imgs/toast-warning.svg new file mode 100644 index 0000000..2e1fa4c --- /dev/null +++ b/src/hooks/components/use-toast/_components/imgs/toast-warning.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/hooks/components/use-toast/_components/mobile-toast.vue b/src/hooks/components/use-toast/_components/mobile-toast.vue new file mode 100644 index 0000000..68f66bf --- /dev/null +++ b/src/hooks/components/use-toast/_components/mobile-toast.vue @@ -0,0 +1,59 @@ + + + + + diff --git a/src/hooks/components/use-toast/_components/pc-toast.vue b/src/hooks/components/use-toast/_components/pc-toast.vue new file mode 100644 index 0000000..296223d --- /dev/null +++ b/src/hooks/components/use-toast/_components/pc-toast.vue @@ -0,0 +1,107 @@ + + + + + diff --git a/src/hooks/components/use-toast/_hooks/use-toast-comp.ts b/src/hooks/components/use-toast/_hooks/use-toast-comp.ts new file mode 100644 index 0000000..6c6ab91 --- /dev/null +++ b/src/hooks/components/use-toast/_hooks/use-toast-comp.ts @@ -0,0 +1,154 @@ +import { useVue } from '@/hooks/core/use-vue'; +import { getElement } from '@/assets/utils/dom'; +import { emitFunc, VueEmit } from '@/assets/utils/vue-utils/emit-utils'; +import { FormatProps, PropUtils, VueProps } from '@/assets/utils/vue-utils/props-utils'; +import { computed, onBeforeUnmount, onMounted, ref } from 'vue'; +import { useAutoTopmostToShow } from '@/hooks/components/use-popper/use-auto-topmost-show'; +import { ToastInstance, ToastType } from '../_toast_type'; + +export const toastProps = () => ({ + /** 提示内容 */ + msg: PropUtils.string.def('提示'), + /** 提示类型,默认:info */ + type: PropUtils.enum().def(ToastType.Info), + /** 关闭时间,默认:3000 */ + duration: PropUtils.number.def(3000), + /** 渲染的父容器节点,默认:document.body */ + mountEl: PropUtils.oneOfType([String, HTMLElement]).def( + () => document.body, + ), +}); + +export type ToastPropsType = FormatProps; + +export const toastEmits = () => ({ + /** toast 打开 */ + open: emitFunc(), + /** toast 关闭 */ + close: emitFunc(), + /** 进入之后 */ + 'after-enter': emitFunc(), + /** 离开之后 */ + 'after-leave': emitFunc(), +}); + +/** + * @hook Toast 组件 hook + */ +export const useToastComp = (options: { + props: VueProps; + emit: VueEmit; + /** class 前缀 */ + prefixCls: string; +}) => { + const { getInstance } = useVue(); + + const { props, emit, prefixCls } = options; + const toastRef = ref(); + + /** 元素的 top 样式值 */ + const top = ref(0); + /** 设置提示元素的 top 样式值 */ + function setToastTop(_top: number) { + top.value = _top; + } + + /** 提示的 class */ + const toastClasses = computed(() => { + const classes: string[] = []; + + if (props.type) { + classes.push(`${prefixCls}--${props.type}`); + } + + return classes; + }); + + /** 提示的样式 */ + const toastStyle = computed(() => { + return { + top: `${top.value}px`, + }; + }); + + /** 提示是否显示 */ + const toastVisible = ref(false); + + /** 显示提示 */ + function openToast() { + toastVisible.value = true; + startCloseTimer(); + emit('open'); + } + + /** 关闭提示 */ + function closeToast() { + toastVisible.value = false; + clearCloseTimer(); + emit('close'); + } + + /** 关闭定时器 */ + let closeTimer: number | undefined; + + /** 开启关闭定时器 */ + function startCloseTimer() { + closeTimer = window.setTimeout(() => { + closeToast(); + }, props.duration); + } + + /** 清空关闭定时器 */ + function clearCloseTimer() { + window.clearTimeout(closeTimer); + closeTimer = undefined; + } + + /** 处理动画进入之后 */ + function onAfterEnter() { + emit('after-enter'); + } + + /** 处理动画离开之后 */ + function onAfterLeave() { + emit('after-leave'); + // 销毁组件 + const instance = getInstance(); + const $el = instance?.$el; + $el?.parentElement?.removeChild($el); + + instance?.$destroy(); + } + + onMounted(() => { + const instance = getInstance(); + const parentEl = getElement(props.mountEl); + if (instance?.$el) { + parentEl?.appendChild(instance.$el); + } + }); + + onBeforeUnmount(() => { + clearCloseTimer(); + }); + + useAutoTopmostToShow(toastVisible, toastRef); + + const toastInstance: ToastInstance = { + setToastTop, + openToast, + closeToast, + }; + + return { + toastRef, + toastVisible, + toastClasses, + toastStyle, + openToast, + closeToast, + onAfterEnter, + onAfterLeave, + toastInstance, + }; +}; diff --git a/src/hooks/components/use-toast/_toast_type.ts b/src/hooks/components/use-toast/_toast_type.ts new file mode 100644 index 0000000..75ae28d --- /dev/null +++ b/src/hooks/components/use-toast/_toast_type.ts @@ -0,0 +1,29 @@ +/** + * 提示类型 + */ +export enum ToastType { + /** 信息类提示 */ + Info = 'info', + /** 成功类提示 */ + Success = 'success', + /** 警告类提示 */ + Warning = 'warning', + /** 异常类提示 */ + Error = 'error', + /** 帮助类提示 */ + Help = 'help', + /** 加载中提示 */ + Loading = 'loading', +} + +/** + * toast 提示实例 + */ +export interface ToastInstance { + /** 打开提示 */ + openToast(): void; + /** 关闭提示 */ + closeToast(): void; + /** 设置提示 top 样式 */ + setToastTop(top: number): void; +} diff --git a/src/hooks/components/use-toast/index.ts b/src/hooks/components/use-toast/index.ts new file mode 100644 index 0000000..06c85df --- /dev/null +++ b/src/hooks/components/use-toast/index.ts @@ -0,0 +1,158 @@ +import Vue from 'vue'; +import { CombinedVueInstance, ExtendedVue } from 'vue/types/vue'; + +import { isMobile } from '@/assets/utils/browser'; + +import PcToast from './_components/pc-toast.vue'; +import MobileToast from './_components/mobile-toast.vue'; +import { ToastPropsType } from './_hooks/use-toast-comp'; +import { ToastInstance, ToastType } from './_toast_type'; + +type ToastConstructorCtorType = ExtendedVue< + Vue, + Record, + ToastInstance, + Record, + Record, + Record +>; + +type ToastManagerOptions = { + /** 提示组件构造器 */ + ToastConstructor: ToastConstructorCtorType; + /** 最大显示数量,默认:5 */ + maxCount?: number; + /** 渲染的父容器 */ + mountEl?: string; +}; + +type ToastInstanceVue = CombinedVueInstance< + Vue, + Record, + ToastInstance, + Record, + Record, + Record +>; +/** 提示管理器 */ +class ToastManager { + /** 用于创建的组件 */ + private __ToastConstructor: ToastConstructorCtorType; + /** 提示队列 */ + private __toastQueue: ToastPropsType[] = []; + /** 当前正在显示的 toast 实例 */ + private __toasts: ToastInstanceVue[] = []; + /** 第一个 toast 的 top */ + private __startTop = 20; + /** 两个 toast 之间的距离 */ + private __instanceSpacing = 16; + /** 最大显示数量 */ + private __maxCount: number; + /** 渲染的父容器 */ + private _mountEl?: string; + + constructor(options: ToastManagerOptions) { + this.__ToastConstructor = options.ToastConstructor; + this.__maxCount = options.maxCount ?? 5; + this._mountEl = options.mountEl; + } + + /** 插入一个提示 */ + private __push(props: ToastPropsType) { + this.__toastQueue.push(props); + this.__checkQueue(); + } + + /** 检查队列 */ + private __checkQueue() { + if (this.__toasts.length >= this.__maxCount || this.__toastQueue.length === 0) { + return; + } + + const joins = this.__toastQueue.splice(0, this.__maxCount - this.__toasts.length); + this.__toastList(joins); + } + + /** + * 提示列表 + */ + private __toastList(list: ToastPropsType[]) { + list.forEach(props => { + const ToastConstructor = this.__ToastConstructor; + + const instance = new ToastConstructor({ + propsData: props, + }); + instance.$mount(); + instance.openToast(); + + this.__toasts.push(instance); + this.__resetTop(); + + instance.$once('close', () => { + this.__remove(instance); + }); + }); + } + + /** 移除提示实例 */ + private __remove(instance: ToastInstance) { + this.__toasts = this.__toasts.filter(_instance => _instance !== instance); + this.__resetTop(); + this.__checkQueue(); + } + + /** 重置提示实例的 top 定位 */ + private __resetTop() { + let toastTop = this.__startTop; + this.__toasts.forEach(instance => { + instance.setToastTop(toastTop); + const elem = instance.$el as HTMLElement; + + toastTop += elem.offsetHeight + this.__instanceSpacing; + }); + } + + /** 信息类提示 */ + public info(msg: string) { + this.__push({ msg, type: ToastType.Info }); + } + + /** 成功类提示 */ + public success(msg: string) { + this.__push({ msg, type: ToastType.Success }); + } + + /** 警告类提示 */ + public warning(msg: string) { + this.__push({ msg, type: ToastType.Warning }); + } + + /** 异常类提示 */ + public error(msg: string) { + this.__push({ msg, type: ToastType.Error }); + } + + /** 帮助类提示 */ + public help(msg: string) { + this.__push({ msg, type: ToastType.Help }); + } + + /** 加载中提示 */ + public loading(msg: string) { + this.__push({ msg, type: ToastType.Loading }); + } +} + +function getToastConstructor() { + if (isMobile) { + return MobileToast; + } + + return PcToast; +} + +/** 主屏消息提示对象 */ +export const toast = new ToastManager({ + ToastConstructor: Vue.extend(getToastConstructor() as unknown as ToastConstructorCtorType), +}); diff --git a/src/hooks/core/use-error-catch/index.ts b/src/hooks/core/use-error-catch/index.ts new file mode 100644 index 0000000..bf247a5 --- /dev/null +++ b/src/hooks/core/use-error-catch/index.ts @@ -0,0 +1,138 @@ +import { VueConstructor } from 'vue'; + +type VueIns = InstanceType; + +interface ErrorCatchModel { + /** 错误名称 */ + name: string; + /** 错误类型 */ + type: string; + /** 错误消息 */ + msg: string | Event; + /** 对应的目标 */ + target: string; + /** 额外信息 */ + ext: string; +} + +/** 处理 Error 对堆栈信息返回为 msg */ +const processStackMsg = (error: Error) => { + let stack = error.stack || ''; + stack = stack + .replace(/\n/gi, '') + .split(/\bat\b/) + .slice(0, 9) + .join('@') + .replace(/\?[^:]+/gi, ''); + const msg = error.toString(); + stack = stack.indexOf(msg) < 0 ? `${msg}@${stack}` : stack; + return stack; +}; + +/** + * @hook 错误捕获钩子 + * @param cb 回调函数 + */ +export const useErrorCatch = (cb: (data: ErrorCatchModel) => void) => { + /** + * 捕获"暴露到全局错误"的钩子函数 + */ + function windowErrorHandler() { + window.onerror = ( + message: string | Event, + target?: string, + row?: number, + col?: number, + error?: Error, + ) => { + const msg = error && error.stack ? processStackMsg(error) : message; + + const data: ErrorCatchModel = { + name: (error && error.name) || 'uncatchErrorName', + type: 'windowError', + msg, + target: target || 'global', + ext: JSON.stringify({ + row, + col, + }), + }; + cb(data); + }; + } + + /** + * 捕获"promise 暴露到全局错误"的钩子函数 + */ + function promiseErrorHandler() { + window.addEventListener('unhandledrejection', event => { + if (event.reason instanceof Error) { + event.preventDefault(); + throw event.reason; + } + const data: ErrorCatchModel = { + name: event.type, + type: 'promiseError', + msg: event.reason, + target: 'global', + ext: '', + }; + cb(data); + }); + } + + /** + * 提供接管 Vue 错误的钩子函数 + */ + function vueErrorHandler(error: Error, vm: VueIns, info: string) { + const msg = error && error.stack ? processStackMsg(error) : error.toString(); + + const target = vm.$options.name || vm.$options.__name || 'notFound'; + + const data: ErrorCatchModel = { + name: error ? error.name : 'uncatchErrorName', + type: 'vueCatchError', + msg, + target: `Component/Tag:${target}`, + ext: JSON.stringify({ + info: `Error In ${info}`, + }), + }; + cb(data); + + throw error; // 抛还给 Vue,这里抛出的错误不会造成重复记错 + } + + /** + * 提供在 try catch 进行错误捕获的钩子函数,,可以挂在 Vue.prototype 上 + * vm 支持用 vue 实例,也可以传一个字符串之类的 + */ + function tryCatchHandler(error: Error, vm: VueIns | string, info: string) { + const msg = error && error.stack ? processStackMsg(error) : error.toString(); + + const target = + typeof vm === 'string' + ? vm + : vm && vm.$options + ? `Component/Tag:${vm.$options.name || vm.$options.__name || 'notFound'}` + : String(vm); + + const data: ErrorCatchModel = { + name: error && error.name, + type: 'tryCatchError', + msg, + target, + ext: JSON.stringify({ + info: `Error In ${info}`, + }), + }; + cb(data); + } + + return { + windowErrorHandler, + promiseErrorHandler, + vueErrorHandler, + tryCatchHandler, + }; +}; diff --git a/src/hooks/core/use-error-verify/index.ts b/src/hooks/core/use-error-verify/index.ts new file mode 100644 index 0000000..65f9eda --- /dev/null +++ b/src/hooks/core/use-error-verify/index.ts @@ -0,0 +1,29 @@ +import { useChannelStore } from '@/store/use-channel-store'; +import { useLangStore } from '@/store/use-lang-store'; +import { appendToURL } from '@just4/querystring'; + +/** 错误页类型 */ +export enum ErrorVerifyType { + /** 超出最大并发数 */ + Restrict = 'restrict', +} + +export interface RedirectErrorParams { + /** 异常类型 */ + errorType?: ErrorVerifyType; +} + +/** + * 跳转到错误页 + */ +export function redirectToErrorVerify(params: RedirectErrorParams = {}) { + const channelStore = useChannelStore(); + const langStore = useLangStore(); + + const errorPageUrl = appendToURL('/error-verify', { + channelId: channelStore.channelId, + lang: langStore.currentLang, + ...params, + }); + window.location.replace(errorPageUrl); +} diff --git a/src/hooks/core/use-query-params/index.ts b/src/hooks/core/use-query-params/index.ts new file mode 100644 index 0000000..ce5e2bf --- /dev/null +++ b/src/hooks/core/use-query-params/index.ts @@ -0,0 +1,116 @@ +/** + * @file 当前观看页地址上的参数 + */ + +import { ChannelWatchPageSkin, PlaybackOrigin, ZoneType } from '@polyv/live-watch-sdk'; +import { parse } from '@just4/querystring'; + +/** 获取默认参数值 */ +const getDefaultQueryParams = (): UniversalParams => ({}); + +/** 地址上所有的参数 */ +export const queryParams: { + [key: string]: string | string[] | undefined; +} = parse(window.location.search && window.location.search.slice(1)) || {}; + +/** + * 获取当前观看页地址上的所有参数的对象 + * @desc 如果从地址上获取不到,会从默认值中获取,如果默认值也获取不到,则返回 undefined + * */ +export function getQueryParam(key: string): string | undefined { + const result = queryParams[key]; + + if (typeof result !== 'undefined') { + if (Array.isArray(result)) { + console.warn(`${key} 的值为数组,当前仅返回数组中的第一个元素`); + return result[0]; + } + return result; + } + + return getDefaultQueryParams()[key]; +} + +const buildGetters = (key: string) => { + return (): T | undefined => { + return getQueryParam(key) as T | undefined; + }; +}; + +/** + * @hook 参数获取器 + * @desc 需要获取地址上的参数都必须通过该获取器获取 + */ +export const paramGetter = { + /** 频道号 */ + channelId: buildGetters('channelId'), + /** 会议模式 */ + polyvMeeting: buildGetters<'true'>('polyvMeeting'), + /** 是否加载 VConsole */ + console: buildGetters<'1'>('console'), + /** 多语言 */ + lang: buildGetters('lang'), + /** 回放 vid */ + vid: buildGetters('vid'), + /** 回放类型 */ + playbackType: buildGetters('playbackType'), + /** 渠道 id */ + promoteId: buildGetters('promoteId'), + /** 企业微信分享海报的企微员工 ID */ + wxInviteId: buildGetters('wxInviteId'), + /** 邀请海报唯一ID */ + invitePosterId: buildGetters('invitePosterId'), + /** 受邀者 ID */ + invitee: buildGetters('invitee'), + /** 测试模式 token */ + testModeToken: buildGetters('testModeToken'), + /** 观众 id */ + viewerid: buildGetters('viewerid'), + /** 观众昵称 */ + name: buildGetters('name'), + /** 观众昵称 */ + nickname: buildGetters('nickname'), + /** 跑马灯名称 */ + marqueeName: buildGetters('marqueeName'), + /** 观众头像 */ + avatar: buildGetters('avatar'), + /** 网络类型 */ + zone: buildGetters('zone'), + /** 是否被 iframe */ + hasFrame: buildGetters<'1'>('hasFrame'), + /** 自定义授权 & 外部授权 & 独立授权中的用户 id */ + userid: buildGetters('userid'), + /** 参与者头衔 */ + actor: buildGetters('actor'), + /** 参与者头衔背景色 */ + actorBgColor: buildGetters('actorBgColor'), + /** 参与者头衔字体颜色 */ + actorFColor: buildGetters('actorFColor'), + /** 自定义授权 & 外部授权 & 独立授权中的时间戳 */ + ts: buildGetters('ts'), + /** 自定义授权 & 外部授权 & 独立授权中的签名 */ + sign: buildGetters('sign'), + /** 微信 openId */ + openid: buildGetters('openid'), + /** 微信 unionId */ + unionid: buildGetters('unionid'), + /** 微信用户 id */ + wechatUserId: buildGetters('wechatUserId'), + /** 播放器 param4 */ + param4: buildGetters('param4'), + /** 播放器 param5 */ + param5: buildGetters('param5'), + /** 真实姓名 */ + realName: buildGetters('realName'), + /** 多皮肤 */ + skin: buildGetters('skin'), +}; + +window.paramGetter = paramGetter; + +export const useQueryParam = () => { + return { + paramGetter, + getQueryParam, + }; +}; diff --git a/src/hooks/core/use-screen-orient/index.ts b/src/hooks/core/use-screen-orient/index.ts new file mode 100644 index 0000000..054b4af --- /dev/null +++ b/src/hooks/core/use-screen-orient/index.ts @@ -0,0 +1,79 @@ +import { computed, onMounted, ref } from 'vue'; + +/** + * 屏幕旋转模式 + * @desc 不使用 portrait 和 landscape 是不想和业务名称重合 + * */ +export enum ScreenOrientationMode { + /** 屏幕纵向 */ + Vertical = 'Vertical', + /** 屏幕横向 */ + Horizontal = 'Horizontal', +} + +/** + * @hook 屏幕旋转 + */ +export const useScreenOrientHook = (params: { + /** 自动监听事件 */ + autoListen?: boolean; + /** 自动监听回调 */ + autoListenCb?: (screenOrientationMode: ScreenOrientationMode) => void; +}) => { + const { autoListen = true, autoListenCb = () => {} } = params; + + /** 屏幕旋转模式 */ + const screenOrientationMode = ref(ScreenOrientationMode.Vertical); + + /** 当前屏幕旋转角度是否为纵向 */ + const isVerticalScreenOrientation = computed(() => { + return screenOrientationMode.value === ScreenOrientationMode.Vertical; + }); + + /** 当前屏幕旋转角度是否为横向 */ + const isHorizontalScreenOrientation = computed(() => { + return screenOrientationMode.value === ScreenOrientationMode.Horizontal; + }); + + /** 手动更新当前屏幕的旋转方向 */ + function updateScreenOrientationModeManually() { + if (window.orientation === 180 || window.orientation === 0) { + screenOrientationMode.value = ScreenOrientationMode.Vertical; + } + if (window.orientation === 90 || window.orientation === -90) { + screenOrientationMode.value = ScreenOrientationMode.Horizontal; + } + } + + /** 监听屏幕旋转方向的改变 */ + function onOrientationChange() { + setTimeout(() => { + const mql = window.matchMedia('(orientation: portrait)'); + if (mql?.matches) { + screenOrientationMode.value = ScreenOrientationMode.Vertical; + } else { + screenOrientationMode.value = ScreenOrientationMode.Horizontal; + } + autoListenCb(screenOrientationMode.value); + }, 200); + } + + onMounted(() => { + if (autoListen) { + // 处理屏幕旋转 + window.addEventListener( + 'onorientationchange' in window ? 'orientationchange' : 'resize', + onOrientationChange, + false, + ); + onOrientationChange(); + } + }); + + return { + screenOrientationMode, + isVerticalScreenOrientation, + isHorizontalScreenOrientation, + updateScreenOrientationModeManually, + }; +}; diff --git a/src/hooks/core/use-vue/index.ts b/src/hooks/core/use-vue/index.ts new file mode 100644 index 0000000..5cfc856 --- /dev/null +++ b/src/hooks/core/use-vue/index.ts @@ -0,0 +1,38 @@ +import { getCurrentInstance, VNode } from 'vue'; + +/** + * @hook 对 Vue 一些方法的简单封装 + */ +export const useVue = () => { + /** 当前 vue 实例 */ + const instanceVm = getCurrentInstance(); + + /** 获取当前 vue 实例对象 */ + function getInstance() { + return instanceVm?.proxy; + } + + /** 获取当前组件的 dom 节点 */ + function getCurrentElem() { + const instance = getInstance(); + return instance?.$el; + } + + /** 获取当前组件的子组件 */ + function getCurrentChildrens() { + return getInstance()?.$children; + } + + /** 获取指定的 slot */ + function getSlot(slotName = 'default'): VNode[] { + const instance = getInstance(); + return (instance?.$slots && instance.$slots[slotName]) || []; + } + + return { + getInstance, + getCurrentElem, + getCurrentChildrens, + getSlot, + }; +}; diff --git a/src/hooks/core/use-window-resize-listener/index.ts b/src/hooks/core/use-window-resize-listener/index.ts new file mode 100644 index 0000000..227c283 --- /dev/null +++ b/src/hooks/core/use-window-resize-listener/index.ts @@ -0,0 +1,39 @@ +import { onBeforeUnmount, onMounted } from 'vue'; +import { debounce } from 'lodash-es'; + +/** + * @hook 监听 windows resize 事件 + */ +export const useWindowResizeListener = ( + callback: () => unknown, + autoListen = false, + debounceTime = 0, +) => { + const debounceFunc = debounceTime === 0 ? callback : debounce(callback, debounceTime); + + /** 监听 resize 事件 */ + function bindWindowResize() { + unbindWindowResize(); + window.addEventListener('resize', debounceFunc); + } + + /** 移除 resize 事件监听 */ + function unbindWindowResize() { + window.removeEventListener('resize', debounceFunc); + } + + if (autoListen) { + onMounted(() => { + bindWindowResize(); + }); + } + + onBeforeUnmount(() => { + unbindWindowResize(); + }); + + return { + bindWindowResize, + unbindWindowResize, + }; +}; diff --git a/src/hooks/platform/use-polyv-watch-domain/index.ts b/src/hooks/platform/use-polyv-watch-domain/index.ts new file mode 100644 index 0000000..9ef804d --- /dev/null +++ b/src/hooks/platform/use-polyv-watch-domain/index.ts @@ -0,0 +1,37 @@ +/** + * @file 泛域名 hook + */ + +import { getWatchCore } from '@/core/watch-sdk'; +import { useChannelStore } from '@/store/use-channel-store'; +import { storeDefinitionToRefs } from '@/plugins/pinia/util'; +import { RedirectWatchDomainPayOptions, WatchDomainPayType, YN } from '@polyv/live-watch-sdk'; +import { ynToBool } from '@utils-ts/boolean'; +import { computed, unref } from 'vue'; + +/** + * @hook 泛域名处理 + * */ +export const usePolyvWatchDomain = () => { + const { channelDetail } = storeDefinitionToRefs(useChannelStore); + + /** 泛域名开关 */ + const polyvWatchDomainEnabled = computed(() => { + return ynToBool(unref(channelDetail)?.channelConfig.polyvWatchDomainEnabled, YN.N); + }); + + /** + * 跳转到泛域名支付 - 仅支持微信支付 + */ + async function skipWatchDomainPay( + options: RedirectWatchDomainPayOptions, + ) { + const watchCore = getWatchCore(); + watchCore.weixin.redirectWatchDomainPay(options); + } + + return { + polyvWatchDomainEnabled, + skipWatchDomainPay, + }; +}; diff --git a/src/hooks/platform/use-weixin/use-weixin-authorize.ts b/src/hooks/platform/use-weixin/use-weixin-authorize.ts new file mode 100644 index 0000000..9490ba3 --- /dev/null +++ b/src/hooks/platform/use-weixin/use-weixin-authorize.ts @@ -0,0 +1,118 @@ +/** + * @file 微信授权 hook + */ +import { isWeixin, isWorkWeixin } from '@/assets/utils/browser'; +import { getWatchCore } from '@/core/watch-sdk'; +import { useChannelStore } from '@/store/use-channel-store'; +import { YN } from '@polyv/live-watch-sdk'; +import { ynToBool } from '@utils-ts/boolean'; +import { computed } from 'vue'; + +export interface WxAuthorizeOptions { + /** 是否使用静默授权,默认:true */ + snsApiBase?: boolean; +} + +/** 微信授权跳转参数 */ +export interface WxAuthorizeParams { + /** 频道号 */ + channelId: string; + /** 授权 token */ + xAuthToken?: string; + /** 是否非静默授权 */ + watch?: 1; +} + +/** + * @hook 微信授权 + */ +export function useWeixinAuthorize() { + const channelStore = useChannelStore(); + + /** 能否进行微信授权 */ + const canWeixinAuthorize = computed(() => { + // 非微信环境 + if (!isWeixin) { + return false; + } + + // 当前是企业微信 + if (isWorkWeixin) { + return false; + } + + // 是否忽略微信授权 + const ignoreWx = ynToBool(channelStore.channelDetail?.channelConfig.ignoreWx, YN.N); + if (ignoreWx) { + return false; + } + + return true; + }); + + /** + * 跳转微信授权地址 + */ + async function redirectWeixinAuthorize(authorizeOptions: WxAuthorizeOptions = {}) { + const watchCore = getWatchCore(); + await watchCore.weixin.redirectWeixinAuthorizeUrl({ + snsApiBase: authorizeOptions.snsApiBase, + }); + } + + return { + /** 能否进行微信授权 */ + canWeixinAuthorize, + /** 跳转微信授权地址 */ + redirectWeixinAuthorize, + }; +} + +/** + * 企业微信授权 hook + */ +export function useWorkWeixinAuthorize() { + const channelStore = useChannelStore(); + + /** 能否进行企业微信授权 */ + const canWorkWeixinAuthorize = computed(() => { + // 非企业微信 + if (!isWorkWeixin) { + return false; + } + + // 没有绑定企微 + if (!ynToBool(channelStore.channelDetail?.channelConfig.wxWorkStatusSwitch, YN.N)) { + return false; + } + + // 没开启企业微信授权开关 + if (!ynToBool(channelStore.channelDetail?.channelConfig.wxWorkAuthSwitch, YN.N)) { + return false; + } + + // 没开启员工邀请 + if (!ynToBool(channelStore.channelDetail?.channelConfig.wxWorkInviteEnabled, YN.N)) { + return false; + } + + return true; + }); + + /** + * 跳转企业微信授权地址 + */ + async function redirectWorkWeixinAuthorize(authorizeOptions: WxAuthorizeOptions = {}) { + const watchCore = getWatchCore(); + await watchCore.weixin.redirectWorkWeixinAuthorizeUrl({ + snsApiBase: authorizeOptions.snsApiBase, + }); + } + + return { + /** 能否进行企业微信授权 */ + canWorkWeixinAuthorize, + /** 跳转企业微信授权地址 */ + redirectWorkWeixinAuthorize, + }; +} diff --git a/src/hooks/platform/use-weixin/use-weixin-pay.ts b/src/hooks/platform/use-weixin/use-weixin-pay.ts new file mode 100644 index 0000000..2803c74 --- /dev/null +++ b/src/hooks/platform/use-weixin/use-weixin-pay.ts @@ -0,0 +1,58 @@ +import { isFunction } from '@/assets/utils/function'; +import { getWatchCore } from '@/core/watch-sdk'; +import { useWeixinSdk } from './use-weixin-sdk'; +import { LoggerName } from '@polyv/live-watch-sdk'; + +/** 微信的回调方法 */ +type WeixinGeneralCallback = (res?: WechatJsSdk.GeneralCallbackResult) => void; + +export interface WxPayCallback { + /** 成功的回调 */ + successCb?: WeixinGeneralCallback; + /** 取消的回调 */ + cancelCb?: WeixinGeneralCallback; +} + +/** + * @hook 微信支付 + */ +export function useWeixinPay() { + const { getWeixinSdk } = useWeixinSdk(); + + /** + * 唤起或监听微信 sdk 初始化完成后唤起微信支付 + * @param payInfo 微信支付相关信息 + * @param callback 支付相关回调 + */ + async function chooseWXPay(payInfo: WechatJsSdk.ChooseWXPayOption, callback: WxPayCallback = {}) { + const { successCb, cancelCb } = callback; + const wx = await getWeixinSdk(); + + wx && + wx.chooseWXPay({ + timestamp: payInfo.timestamp, + nonceStr: payInfo.nonceStr, + package: payInfo.package, + signType: payInfo.signType, + paySign: payInfo.paySign, + success: res => { + if (isFunction(successCb)) { + successCb(res); + } + }, + cancel: res => { + if (isFunction(cancelCb)) { + cancelCb(res); + } + }, + fail: res => { + const watchCore = getWatchCore(); + watchCore.logger.error(LoggerName.Weixin, 'choose-wx-pay-fail', JSON.stringify(res)); + }, + }); + } + + return { + chooseWXPay, + }; +} diff --git a/src/hooks/platform/use-weixin/use-weixin-sdk.ts b/src/hooks/platform/use-weixin/use-weixin-sdk.ts new file mode 100644 index 0000000..03125e4 --- /dev/null +++ b/src/hooks/platform/use-weixin/use-weixin-sdk.ts @@ -0,0 +1,119 @@ +import { isWorkWeixin } from '@/assets/utils/browser'; +import { getWatchCore } from '@/core/watch-sdk'; +import { useChannelStore } from '@/store/use-channel-store'; +import { useWatchAppStore } from '@/store/use-watch-app-store'; +import { useWeixinStore } from '@/store/use-weixin-store'; +import { loadWorkWxSdk, loadWxSdk } from '@/plugins/external-lib-loaders/load-wx-sdk'; +import { LoggerName } from '@polyv/live-watch-sdk'; + +const wxLoaders: Record | undefined> = {}; + +// eslint-disable-next-line sonarjs/cognitive-complexity +export function getWx(channelId: string): Promise { + let promiseTarget = wxLoaders[channelId]; + if (promiseTarget) { + return promiseTarget; + } + + promiseTarget = new Promise(resolve => { + (async () => { + const watchCore = getWatchCore(); + const [wx, signRes] = await Promise.all([ + isWorkWeixin ? loadWorkWxSdk() : loadWxSdk(), + isWorkWeixin ? watchCore.weixin.getWorkWeixinSign() : watchCore.weixin.getWeixinSign(), + ]); + + // 保存微信分享信息 + const weixinStore = useWeixinStore(); + if (signRes) { + weixinStore.saveWxShareInfo({ + isUseWxShareUrl: signRes.isUseWxShareUrl, + wxShareUrl: signRes.wxShareUrl, + shareTitle: signRes.shareTitle, + shareDesc: signRes.shareDesc, + }); + } + + // 配置微信分享 + const { appId, timestamp, nonceStr, signature } = signRes?.wxSign || {}; + + const configData = { + appId, + timestamp, + nonceStr, + signature, + }; + + console.info('wx.config', configData); + + wx.config({ + appId, + timestamp, + nonceStr, + signature, + jsApiList: [ + 'updateAppMessageShareData', + 'updateTimelineShareData', + 'hideAllNonBaseMenuItem', + 'chooseWXPay', + 'previewImage', + 'onMenuShareAppMessage', + 'onMenuShareWechat', + 'shareAppMessage', + 'shareWechatMessage', + 'onMenuShareTimeline', + ], + openTagList: ['wx-open-launch-weapp'], + }); + + wx.error(error => { + console.error('Wx sdk: error', error); + + const watchCore = getWatchCore(); + const logMsg = { + href: location.href, + error: JSON.stringify(error), + configData, + }; + watchCore.logger.error(LoggerName.Weixin, 'config-js-sdk-fail', JSON.stringify(logMsg)); + }); + + wx.ready(() => { + console.info('Wx sdk: success'); + resolve(wx); + + // 获取是否微信小程序环境 + try { + wx.miniProgram?.getEnv(res => { + if (res?.miniprogram === true) { + const watchAppStore = useWatchAppStore(); + watchAppStore.isWxMiniProgram = true; + } + }); + } catch (e) { + console.error('miniProgram error', e); + } + }); + })(); + }); + + wxLoaders[channelId] = promiseTarget; + + return promiseTarget; +} + +/** + * @hook 使用微信 JS-SDK + */ +export const useWeixinSdk = () => { + const channelStore = useChannelStore(); + + /** 获取微信 js-sdk */ + const getWeixinSdk = () => { + return getWx(channelStore.channelId); + }; + + return { + getWeixinSdk, + }; +}; diff --git a/src/hooks/platform/use-weixin/use-weixin-share.ts b/src/hooks/platform/use-weixin/use-weixin-share.ts new file mode 100644 index 0000000..93187dd --- /dev/null +++ b/src/hooks/platform/use-weixin/use-weixin-share.ts @@ -0,0 +1,177 @@ +import { isWeixin, isWorkWeixin } from '@/assets/utils/browser'; +import { fitProtocol } from '@/assets/utils/url'; +import { getWatchCore } from '@/core/watch-sdk'; +import { useChannelInfoStore } from '@/store/use-channel-info-store'; +import { useInviteStore } from '@/store/use-invite-store'; +import { useShareStore } from '@/store/use-share-store'; +import { useWeixinStore } from '@/store/use-weixin-store'; +import { appendToURL } from '@just4/querystring'; +import { YN, LoggerName } from '@polyv/live-watch-sdk'; +import { ynToBool } from '@utils-ts/boolean'; +import { computed, unref } from 'vue'; +import { useWeixinSdk } from './use-weixin-sdk'; + +/** 微信分享地址中附带的参数 */ +interface WxShareUrlParams { + /** 企微邀请的员工 id */ + wxInviteId?: string; + /** 邀请人 id */ + invitePosterId?: string; +} + +/** + * @hook 微信分享 + * */ +export const useWeixinShare = () => { + const { getWeixinSdk } = useWeixinSdk(); + + const channelInfoStore = useChannelInfoStore(); + const shareStore = useShareStore(); + const weixinStore = useWeixinStore(); + const inviteStore = useInviteStore(); + + /** 微信分享地址上需要携带的参数 */ + const wxShareUrlParams = computed(() => { + const params: WxShareUrlParams = {}; + + // 企微邀请的员工 id + if (inviteStore.wxInviteId) { + params.wxInviteId = inviteStore.wxInviteId; + } + + // 针对开启邀请的频道添加邀请参数到微信分享 url + if (inviteStore.invitePosterEnabled && inviteStore.invitePosterId) { + params.invitePosterId = inviteStore.invitePosterId; + } + + return params; + }); + + /** 微信分享中的分享地址 */ + const wxShareUrl = computed(() => { + const shareInfo = weixinStore.wxShareInfo; + // 使用后台设置的自定义分享地址 + if (ynToBool(shareInfo.isUseWxShareUrl, YN.N)) { + return shareInfo.wxShareUrl; + } + + return appendToURL(window.location.href, unref(wxShareUrlParams)); + }); + + /** 隐藏微信分享 */ + async function hideWeixinShare() { + const wx = await getWeixinSdk(); + wx && wx.hideAllNonBaseMenuItem(); + } + + /** 设置微信分享 */ + async function configureWeixinShare() { + // 后台没开启分享开关,隐藏微信分享 + if (!shareStore.shareBtnEnabled) { + return hideWeixinShare(); + } + + const wx = await getWeixinSdk(); + const watchCore = getWatchCore(); + + const shareInfo = weixinStore.wxShareInfo; + const shareOptions = { + title: shareInfo.shareTitle, + desc: shareInfo.shareDesc || '', + link: unref(wxShareUrl), + imgUrl: fitProtocol(channelInfoStore.channelCoverImg), + }; + + console.info('weixin share info', shareOptions); + + if (isWeixin && !isWorkWeixin) { + // 自定义“分享给朋友”及“分享到QQ”按钮的分享内容 + wx && + wx.updateAppMessageShareData({ + ...shareOptions, + success() { + console.info('Wx sdk: updateAppMessageShareData success'); + }, + fail(e) { + watchCore.logger.error( + LoggerName.Weixin, + 'update-app-message-share-fail', + JSON.stringify(e), + ); + }, + }); + + // 自定义“分享到朋友圈”及“分享到 QQ 空间”按钮的分享内容 + wx && + wx.updateTimelineShareData({ + ...shareOptions, + success() { + console.info('Wx sdk: updateTimelineShareData success'); + }, + fail(e) { + watchCore.logger.error( + LoggerName.Weixin, + 'update-timeline-share-fail', + JSON.stringify(e), + ); + }, + }); + } + + if (isWorkWeixin) { + // 自定义转发 + wx.onMenuShareAppMessage && + wx.onMenuShareAppMessage({ + ...shareOptions, + success() { + console.info('Wx sdk: onMenuShareAppMessage success'); + }, + fail(e) { + watchCore.logger.error( + LoggerName.Weixin, + 'on-menu-share-app-message-fail', + JSON.stringify(e), + ); + }, + }); + + wx.onMenuShareWechat && + wx.onMenuShareWechat({ + ...shareOptions, + success() { + console.info('Wx sdk: onMenuShareWechat success'); + }, + fail(e) { + watchCore.logger.error( + LoggerName.Weixin, + 'on-menu-share-share-wechat-fail', + JSON.stringify(e), + ); + }, + }); + + // 自定义分享到微信朋友圈 + wx.onMenuShareTimeline && + wx.onMenuShareTimeline({ + ...shareOptions, + success() { + console.info('Wx sdk: onMenuShareTimeline success'); + }, + fail(e) { + watchCore.logger.error( + LoggerName.Weixin, + 'on-menu-share-timeline-fail', + JSON.stringify(e), + ); + }, + }); + } + } + + return { + wxShareUrlParams, + wxShareUrl, + hideWeixinShare, + configureWeixinShare, + }; +}; diff --git a/src/hooks/tools/use-count-down/index.ts b/src/hooks/tools/use-count-down/index.ts new file mode 100644 index 0000000..4ff6af7 --- /dev/null +++ b/src/hooks/tools/use-count-down/index.ts @@ -0,0 +1,114 @@ +import { SimilarResponsive } from '@/assets/utils/vue-utils'; +import { Countdown, IRemaining as CountDownSurplusData } from '@utils-ts/countdown'; +import { computed, onUnmounted, ref, unref } from 'vue'; + +export interface UseSecondCountDownOptions { + /** 总秒数,单位秒 */ + second?: SimilarResponsive; + /** 结束的时间戳 */ + endTimestamp?: SimilarResponsive; + /** 倒计时剩余时间改变回调 */ + onCountDownChange?: (surplusData: CountDownSurplusData) => void; + /** 倒计时结束回调 */ + onCountDownFinish?: () => void; +} + +/** + * @hook 简单的秒数倒计时 + */ +export const useSecondCountDown = (options: UseSecondCountDownOptions = {}) => { + const second = options.second ?? ref(); + const endTimestamp = options.endTimestamp ?? ref(); + const onCountDownChange = options.onCountDownChange; + const onCountDownFinish = options.onCountDownFinish; + + /** 默认的倒计时数据 */ + const defaultSurplusData: CountDownSurplusData = { + // 天数 + days: 0, + // 小时数 + hours: 0, + // 分钟数 + minutes: 0, + // 秒数 + seconds: 0, + // 剩余总毫秒数 + totalMsecs: 0, + }; + + /** 剩余时间数据 */ + const surplusTime = ref({ ...defaultSurplusData }); + + /** 根据入参选项获取需要计算的秒数 */ + const computedSecond = computed(() => { + const secondVal = unref(second); + const endTimestampVal = unref(endTimestamp); + + if (typeof secondVal === 'number') { + return secondVal; + } else if (typeof endTimestampVal === 'number') { + const diffTime = (endTimestampVal - Date.now()) / 1000; + return diffTime < 0 ? 0 : diffTime; + } + + return 0; + }); + + /** 倒计时对象实例 */ + let countDownInstance: Countdown | undefined; + + /** 初始化倒计时 */ + function initCountDown(): void { + surplusTime.value = { ...defaultSurplusData }; + destroyCountDown(); + countDownInstance = new Countdown(unref(computedSecond), onCountDownCallback); + startCountDown(); + } + + /** 销毁倒计时 */ + function destroyCountDown(): void { + stopCountDown(); + countDownInstance = undefined; + } + + /** 开始倒计时 */ + function startCountDown(): void { + if (countDownInstance) { + countDownInstance.start(); + } else { + // 如果倒计时对象不存在则自动创建一个 + initCountDown(); + } + } + + /** 暂停倒计时 */ + function stopCountDown(): void { + countDownInstance && countDownInstance.stop(); + } + + /** + * 处理倒计时时间改变 + * @param rest 倒计时剩余时间数据 + */ + function onCountDownCallback(rest: CountDownSurplusData) { + surplusTime.value = rest; + onCountDownChange && onCountDownChange(unref(surplusTime)); + + if (rest.totalMsecs === 0) { + onCountDownFinish && onCountDownFinish(); + } + } + + onUnmounted(() => { + destroyCountDown(); + }); + + return { + surplusTime, + computedSecond, + initCountDown, + startCountDown, + stopCountDown, + destroyCountDown, + }; +}; diff --git a/src/hooks/tools/use-format/index.ts b/src/hooks/tools/use-format/index.ts new file mode 100644 index 0000000..c828b84 --- /dev/null +++ b/src/hooks/tools/use-format/index.ts @@ -0,0 +1,37 @@ +/** + * @file 格式化相关的 hook + */ + +import { unref, watch, Ref } from 'vue'; + +/** + * @hook 格式化价格 + * */ +export const useFormatPrice = (priceRef: Ref) => { + /** 监听并格式化成正确的价格格式 */ + watch( + () => unref(priceRef), + val => { + let newVal = `${val}`; + + newVal = newVal && newVal.replace(/[^0-9.]/g, ''); + + if (newVal.indexOf('.') !== newVal.lastIndexOf('.')) { + newVal = + newVal.substring(0, newVal.lastIndexOf('.')) + + newVal.substring(newVal.lastIndexOf('.') + 1); + } + + priceRef.value = newVal; + }, + ); + + /** 将当前价格随机 */ + function randomPrice(): void { + priceRef.value = (Math.random() * 10).toFixed(2); + } + + return { + randomPrice, + }; +}; diff --git a/src/hooks/tools/use-fullscreen/index.ts b/src/hooks/tools/use-fullscreen/index.ts new file mode 100644 index 0000000..10f48ba --- /dev/null +++ b/src/hooks/tools/use-fullscreen/index.ts @@ -0,0 +1,148 @@ +/** + * @file 浏览器全屏 hook + */ +import { useLayoutStore } from '@/store/use-layout-store'; +import { storeDefinitionToRefs } from '@/plugins/pinia/util'; +import { computed, onBeforeUnmount, Ref, unref } from 'vue'; + +export interface FullscreenFieldData { + /** 浏览器是否支持全屏模式的 api 字段 */ + enabledField: 'fullscreenEnabled'; + /** 获取浏览器正在全屏的 dom 节点 api 字段 */ + elementField: 'fullscreenElement'; + /** 浏览器全屏的 api 字段 */ + requestApiField: 'requestFullscreen'; + /** 浏览器退出全屏的 api 字段 */ + exitApiField: 'exitFullscreen'; + /** 浏览器全屏状态改变事件 */ + fullscreenChangeEvent: 'fullscreenchange'; +} + +// 各浏览器全屏接口 +const apis = [ + { + enabledField: 'fullscreenEnabled', + elementField: 'fullscreenElement', + requestApiField: 'requestFullscreen', + exitApiField: 'exitFullscreen', + fullscreenChangeEvent: 'fullscreenchange', + }, + { + enabledField: 'webkitFullscreenEnabled', + elementField: 'webkitCurrentFullScreenElement', + requestApiField: 'webkitRequestFullscreen', + exitApiField: 'webkitExitFullscreen', + fullscreenChangeEvent: 'webkitfullscreenchange', + }, + { + enabledField: 'mozFullScreenEnabled', + elementField: 'mozFullScreenElement', + requestApiField: 'mozRequestFullScreen', + exitApiField: 'mozCancelFullScreen', + fullscreenChangeEvent: 'mozfullscreenchange', + }, + { + enabledField: 'msFullscreenEnabled', + elementField: 'msFullscreenElement', + requestApiField: 'msRequestFullscreen', + exitApiField: 'msExitFullscreen', + fullscreenChangeEvent: 'MSFullscreenChange', + }, +]; + +let fieldData: FullscreenFieldData | undefined; + +// 遍历 apis,获取当前可以用的全屏 api +for (let i = 0; i < apis.length; i++) { + const item = apis[i]; + if (item.enabledField in document) { + fieldData = item as FullscreenFieldData; + break; + } +} + +export type FullscreenElement = Element | Ref; + +export type GetFullscreenElement = () => FullscreenElement; + +/** + * @hook 全屏处理 + */ +export const useFullscreen = ( + elementRef: FullscreenElement | GetFullscreenElement = document.documentElement, + // eslint-disable-next-line sonarjs/cognitive-complexity +) => { + const { isFullscreen } = storeDefinitionToRefs(useLayoutStore); + + /** 是否支持浏览器全屏 */ + const supportFullscreen = computed(() => !!fieldData); + + const fullscreenElement = computed(() => { + if (typeof elementRef === 'function') { + const res = elementRef(); + return unref(res) || document.documentElement; + } + + return unref(elementRef) || document.documentElement; + }); + + /** 全屏 */ + function requestFullscreen() { + const element = unref(fullscreenElement); + if (!fieldData || !element[fieldData.requestApiField]) { + return; + } + element[fieldData.requestApiField](); + } + + /** 退出全屏 */ + function exitFullscreen() { + if (!fieldData) { + return; + } + document[fieldData.exitApiField](); + } + + /** 切换全屏状态 */ + function toggleFullscreen() { + if (!fieldData) { + return; + } + if (!document[fieldData.elementField]) { + requestFullscreen(); + } else { + exitFullscreen(); + } + } + + /** 处理全屏事件 */ + function onFullscreenChange() { + if (!fieldData) { + return; + } + if (document[fieldData.elementField]) { + isFullscreen.value = true; + } else { + isFullscreen.value = false; + } + } + + if (fieldData) { + document.addEventListener(fieldData.fullscreenChangeEvent, onFullscreenChange); + } + + onBeforeUnmount(() => { + if (!fieldData) { + return; + } + document.removeEventListener(fieldData.fullscreenChangeEvent, onFullscreenChange); + }); + + return { + isFullscreen, + supportFullscreen, + requestFullscreen, + exitFullscreen, + toggleFullscreen, + }; +}; diff --git a/src/main.ts b/src/main.ts new file mode 100644 index 0000000..21c26b9 --- /dev/null +++ b/src/main.ts @@ -0,0 +1,44 @@ +import Vue from 'vue'; +import WatchApp from './app/watch-app.vue'; +import { pinia } from '@/plugins/pinia'; + +import { i18nInstall } from '@/assets/lang'; +import { useLangStore } from '@/store/use-lang-store'; + +import '@/assets/styles/animation.scss'; +import '@/plugins/vconsole'; + +console.info( + '%c WatchApp build info: %s, %s', + 'color: white;background-color: #0070ed;padding: 5px 5px', + PROJECT_VERSION, + PROJECT_BUILD_TIME, +); + +/** + * 互动功能通过 umd 引入,需要获取 window 的 Vue 对象 + * dev 环境下 vue 使用 esModule 引入,不会挂载到 window + * 因此在 window 没有 Vue 的情况下手动挂载一次 + */ +if (!window.Vue) { + (window.Vue as unknown) = Vue; +} + +Vue.config.productionTip = false; + +Vue.use(i18nInstall, { + locale: () => { + const langStore = useLangStore(); + return langStore.currentLang; + }, +}); + +new Vue({ + pinia, + components: { + App: WatchApp, + }, + render(createElement) { + return createElement('app'); + }, +}).$mount('#app'); diff --git a/src/pages/splash/mobile-splash/components/mobile-splash-btn.vue b/src/pages/splash/mobile-splash/components/mobile-splash-btn.vue new file mode 100644 index 0000000..3b353be --- /dev/null +++ b/src/pages/splash/mobile-splash/components/mobile-splash-btn.vue @@ -0,0 +1,31 @@ + + + + diff --git a/src/pages/splash/mobile-splash/mobile-splash-full.vue b/src/pages/splash/mobile-splash/mobile-splash-full.vue new file mode 100644 index 0000000..7046c75 --- /dev/null +++ b/src/pages/splash/mobile-splash/mobile-splash-full.vue @@ -0,0 +1,125 @@ + + + + + + diff --git a/src/pages/splash/mobile-splash/mobile-splash.vue b/src/pages/splash/mobile-splash/mobile-splash.vue new file mode 100644 index 0000000..2c11b90 --- /dev/null +++ b/src/pages/splash/mobile-splash/mobile-splash.vue @@ -0,0 +1,150 @@ + + + + + + diff --git a/src/pages/splash/pc-splash/pc-splash.vue b/src/pages/splash/pc-splash/pc-splash.vue new file mode 100644 index 0000000..ca131e0 --- /dev/null +++ b/src/pages/splash/pc-splash/pc-splash.vue @@ -0,0 +1,310 @@ + + + + + + diff --git a/src/pages/watch/_hooks/use-watch-page/_hooks/use-connect-mic-setup.ts b/src/pages/watch/_hooks/use-watch-page/_hooks/use-connect-mic-setup.ts new file mode 100644 index 0000000..fd350fc --- /dev/null +++ b/src/pages/watch/_hooks/use-watch-page/_hooks/use-connect-mic-setup.ts @@ -0,0 +1,30 @@ +import { onMounted } from 'vue'; +import { getWatchCore } from '@/core/watch-sdk'; + +import { useConnectMicStore } from '@/store/use-connect-mic-store'; +import { useEventBusListener, appEvents } from '@/app/app-events'; + +/** + * 连麦 hook + */ +export const useConnectMicSetup = () => { + const connectMicStore = useConnectMicStore(); + + /** + * 初始化连麦 + */ + async function initConnectCall() { + if (!connectMicStore.connectMicEnabled) return; + + const watchCore = getWatchCore(); + await watchCore.connectMic.setupConnectMic(); + } + + onMounted(() => { + initConnectCall(); + }); + + useEventBusListener(appEvents.connectMic.ResetUpConnectMic, () => { + initConnectCall(); + }); +}; diff --git a/src/pages/watch/_hooks/use-watch-page/_hooks/use-main-screen.ts b/src/pages/watch/_hooks/use-watch-page/_hooks/use-main-screen.ts new file mode 100644 index 0000000..cdc4e77 --- /dev/null +++ b/src/pages/watch/_hooks/use-watch-page/_hooks/use-main-screen.ts @@ -0,0 +1,84 @@ +import { isMobile } from '@/assets/utils/browser'; +import { getWatchCore } from '@/core/watch-sdk'; +import { useChannelStore } from '@/store/use-channel-store'; +import { useDocStore } from '@/store/use-doc-store'; +import { useLayoutStore } from '@/store/use-layout-store'; +import { + ChannelDocWatchLayout, + DocEvents, + LiveStatus, + MainScreenContent, +} from '@polyv/live-watch-sdk'; +import { onBeforeUnmount, onMounted } from 'vue'; + +/** + * 主副屏切换响应逻辑 + */ +export const useMainScreen = () => { + const channelStore = useChannelStore(); + const docStore = useDocStore(); + const layoutStore = useLayoutStore(); + + /** ------ 默认位置 ------ */ + /** + * 设置 PC 端默认位置 + */ + function setPcDefaultMainScreen() { + const docWatchLayout = channelStore.channelDetail?.theme.watchLayout; + + if (!docStore.canRenderDoc || !docWatchLayout) { + return; + } + + switch (docWatchLayout) { + case ChannelDocWatchLayout.Video: + case ChannelDocWatchLayout.OnlyVideo: + layoutStore.$patch({ + mainScreen: MainScreenContent.Player, + }); + break; + case ChannelDocWatchLayout.FollowTeacher: + case ChannelDocWatchLayout.Ppt: + layoutStore.$patch({ + mainScreen: MainScreenContent.Doc, + }); + break; + } + } + + if (!isMobile) { + setPcDefaultMainScreen(); + } + + /** ------ 事件响应 ------ */ + function onMainScreenChange(evt: { mainScreen: MainScreenContent }) { + const docWatchLayout = channelStore.channelDetail?.theme.watchLayout; + + if (!docStore.canRenderDoc || !docWatchLayout) { + return; + } + + // 针对移动端,如果后台设置非跟随讲师,则不处理事件 + if ( + isMobile && + docWatchLayout !== ChannelDocWatchLayout.FollowTeacher && + channelStore.liveStatus === LiveStatus.Live + ) { + return; + } + + layoutStore.$patch({ + mainScreen: evt.mainScreen, + }); + } + + onMounted(() => { + const watchCore = getWatchCore(); + watchCore.doc.eventEmitter.on(DocEvents.MainScreenChange, onMainScreenChange); + }); + + onBeforeUnmount(() => { + const watchCore = getWatchCore(); + watchCore.doc.eventEmitter.off(DocEvents.MainScreenChange, onMainScreenChange); + }); +}; diff --git a/src/pages/watch/_hooks/use-watch-page/_hooks/use-online.ts b/src/pages/watch/_hooks/use-watch-page/_hooks/use-online.ts new file mode 100644 index 0000000..96c9b82 --- /dev/null +++ b/src/pages/watch/_hooks/use-watch-page/_hooks/use-online.ts @@ -0,0 +1,92 @@ +import { throttle } from 'lodash-es'; +import { useChatStore } from '@/store/use-chat-store'; +import { onMounted, onBeforeUnmount } from 'vue'; +import { getWatchCore } from '@/core/watch-sdk'; +import { ChatEvents, ChatEventsRelations, YN } from '@polyv/live-watch-sdk'; +import { isNumber } from '@/assets/utils/number'; +import { ynToBool } from '@utils-ts/boolean'; +import { useChannelStore } from '@/store/use-channel-store'; +import { useViewerStore } from '@/store/use-viewer-store'; +import { ErrorVerifyType, redirectToErrorVerify } from '@/hooks/core/use-error-verify'; + +export const useOnlineHook = () => { + const channelStore = useChannelStore(); + const chatStore = useChatStore(); + const viewerStore = useViewerStore(); + + const watchCore = getWatchCore(); + + /** 设置在线人数 */ + const setOnlineUserCount = throttle((onlineUserCount: number) => { + chatStore.$patch({ + onlineUserCount, + }); + }, 1000); + + /** + * 检查登录的人数是否超出了最大在线人数 + * @param onlineUserCount 在线人数 + */ + function checkMaxViewerCount(onlineUserCount: number, userId: string) { + const channelDetail = channelStore.channelDetail; + // 未聊天室并发限制开关 + if (!ynToBool(channelDetail?.channelConfig.restrictChatEnabled, YN.N)) { + return false; + } + + // 如果开启了虚拟人数开关,在线人数是假的,所以不需要踢出 + if (ynToBool(channelDetail?.channelConfig.chatRobotEnabled, YN.N)) { + return false; + } + + // 登录的非当前观众 + if (viewerStore.viewerId !== userId) { + return false; + } + + // 在线人数超出最大并发数则踢出当前用户 + const maxViewers = channelDetail?.channelConfig.maxViewers ?? Infinity; + return onlineUserCount > maxViewers; + } + + /** 处理 login 消息 */ + function onUserLogin(evt: ChatEventsRelations[ChatEvents.ChatUserLogin]) { + const { userLoginMsg } = evt; + const userId = userLoginMsg.user.userId; + + if (isNumber(userLoginMsg.onlineUserNumber)) { + // 非分房间下才通过 Login 消息获取在线人数 + if (!chatStore.isSibRoom) { + setOnlineUserCount(userLoginMsg.onlineUserNumber); + } + + // 是否超出最大并发数,踢出当前用户 + const needKickUser = checkMaxViewerCount(userLoginMsg.onlineUserNumber, userId); + if (needKickUser) { + redirectToErrorVerify({ + errorType: ErrorVerifyType.Restrict, + }); + } + } + } + + /** 处理 logout 消息 */ + function onUserLogout(evt: ChatEventsRelations[ChatEvents.ChatUserLogout]) { + const { userLogoutMsg } = evt; + + // 非分房间下才通过 Login 消息获取在线人数 + if (!chatStore.isSibRoom && isNumber(userLogoutMsg.onlineUserNumber)) { + setOnlineUserCount(userLogoutMsg.onlineUserNumber); + } + } + + onMounted(() => { + watchCore.chat.eventEmitter.on(ChatEvents.ChatUserLogin, onUserLogin); + watchCore.chat.eventEmitter.on(ChatEvents.ChatUserLogout, onUserLogout); + }); + + onBeforeUnmount(() => { + watchCore.chat.eventEmitter.off(ChatEvents.ChatUserLogin, onUserLogin); + watchCore.chat.eventEmitter.off(ChatEvents.ChatUserLogout, onUserLogout); + }); +}; diff --git a/src/pages/watch/_hooks/use-watch-page/_hooks/use-polling.ts b/src/pages/watch/_hooks/use-watch-page/_hooks/use-polling.ts new file mode 100644 index 0000000..255bd8e --- /dev/null +++ b/src/pages/watch/_hooks/use-watch-page/_hooks/use-polling.ts @@ -0,0 +1,37 @@ +/** + * @file 观看页轮询相关的 hook + */ +import { getWatchCore } from '@/core/watch-sdk'; +import { useChannelStore } from '@/store/use-channel-store'; +import { onBeforeUnmount, watchEffect } from 'vue'; +import { LiveStatus } from '@polyv/live-watch-sdk'; +import { useChannelInfoStore } from '@/store/use-channel-info-store'; + +/** + * 根据 liveStatus 设置 pv 轮询 + */ +export const usePageViewPolling = () => { + const channelStore = useChannelStore(); + const channelInfoStore = useChannelInfoStore(); + + watchEffect(() => { + const watchCore = getWatchCore(); + + if (channelStore.liveStatus === LiveStatus.Live) { + watchCore.channel.startPageViewPolling((pageViewCount: number) => { + if (channelInfoStore.pageViewCount !== pageViewCount) { + channelInfoStore.$patch({ + pageViewCount, + }); + } + }); + } else { + watchCore.channel.stopPageViewPolling(); + } + }); + + onBeforeUnmount(() => { + const watchCore = getWatchCore(); + watchCore.channel.stopPageViewPolling(); + }); +}; diff --git a/src/pages/watch/_hooks/use-watch-page/_hooks/use-single-session-verify.ts b/src/pages/watch/_hooks/use-watch-page/_hooks/use-single-session-verify.ts new file mode 100644 index 0000000..d4ce349 --- /dev/null +++ b/src/pages/watch/_hooks/use-watch-page/_hooks/use-single-session-verify.ts @@ -0,0 +1,89 @@ +import { DEFAULT_VERIFY_QUERY_FREQUENCY } from '@/assets/constants/defaults'; +import { getWatchCore } from '@/core/watch-sdk'; +import { useChannelStore } from '@/store/use-channel-store'; +import { useWatchAppStore } from '@/store/use-watch-app-store'; +import { onBeforeUnmount, onMounted } from 'vue'; +import { ynToBool } from '@utils-ts/boolean'; +import { VerifyViewerSessionFail, YN } from '@polyv/live-watch-sdk'; +import { translate } from '@/assets/lang'; +import { toast } from '@/hooks/components/use-toast'; +import { redirectToErrorVerify } from '@/hooks/core/use-error-verify'; + +/** + * 唯一性登录验证 + */ +export const useSingleSessionVerify = () => { + const watchCore = getWatchCore(); + const watchAppStore = useWatchAppStore(); + const channelStore = useChannelStore(); + + function setChannelVerifyQueryFrequency(channelVerifyQueryFrequency?: number) { + channelStore.$patch({ + channelVerifyQueryFrequency: channelVerifyQueryFrequency || DEFAULT_VERIFY_QUERY_FREQUENCY, + }); + } + + let pollingTimer: number | undefined; + + /** 设置轮训器 */ + function setSingleVerifyPolling() { + removeSingleVerifyPolling(); + + pollingTimer = window.setTimeout(() => { + verifySingleSession(); + }, channelStore.channelVerifyQueryFrequency * 1000); + } + + /** 移除轮训器 */ + function removeSingleVerifyPolling() { + if (pollingTimer) { + clearTimeout(pollingTimer); + pollingTimer = undefined; + } + } + + /** 验证观众登录的唯一性 */ + async function verifySingleSession() { + const result = await watchCore.channel.verifyViewerSession(); + + if (result.success) { + setChannelVerifyQueryFrequency(result.channelVerifyQueryFrequency); + setSingleVerifyPolling(); + } else { + const failReason = result.failReason; + let tips = ''; + + if (failReason === VerifyViewerSessionFail.Unknow) { + tips = translate('global.singleSession.error.unknow'); + } + if (failReason === VerifyViewerSessionFail.RemoteLogin) { + tips = translate('global.singleSession.error.relogin'); + } + + if (tips) { + toast.error(tips); + } + + setTimeout(() => { + redirectToErrorVerify(); + }, 5 * 1000); + } + } + + onMounted(() => { + setChannelVerifyQueryFrequency( + channelStore.channelDetail?.channelConfig.channelVerifyQueryFrequency, + ); + + if ( + ynToBool(channelStore.channelDetail?.channelConfig.singleSessionVerify, YN.Y) && + !watchAppStore.isWatchBackUrl + ) { + verifySingleSession(); + } + }); + + onBeforeUnmount(() => { + removeSingleVerifyPolling(); + }); +}; diff --git a/src/pages/watch/_hooks/use-watch-page/index.ts b/src/pages/watch/_hooks/use-watch-page/index.ts new file mode 100644 index 0000000..393b5fa --- /dev/null +++ b/src/pages/watch/_hooks/use-watch-page/index.ts @@ -0,0 +1,27 @@ +import { useIarGlobalConfigHook } from '@/components/page-watch-common/interactive-receive/use-iar-global-config'; + +import { usePageViewPolling } from './_hooks/use-polling'; +import { useConnectMicSetup } from './_hooks/use-connect-mic-setup'; +import { useMainScreen } from './_hooks/use-main-screen'; +import { useOnlineHook } from './_hooks/use-online'; +import { useSingleSessionVerify } from './_hooks/use-single-session-verify'; + +export const useWatchPage = () => { + // 使用 pv 轮训 + usePageViewPolling(); + + // 使用连麦 + useConnectMicSetup(); + + // 设置互动功能全局配置 + useIarGlobalConfigHook(); + + // 主副屏响应切换逻辑 + useMainScreen(); + + // 设置在线数据 + useOnlineHook(); + + // 唯一性登录验证 + useSingleSessionVerify(); +}; diff --git a/src/pages/watch/_hooks/use-watch-tab/index.ts b/src/pages/watch/_hooks/use-watch-tab/index.ts new file mode 100644 index 0000000..ec2777c --- /dev/null +++ b/src/pages/watch/_hooks/use-watch-tab/index.ts @@ -0,0 +1,99 @@ +import { computed, onBeforeUnmount, onMounted, ref, watch } from 'vue'; +import { storeDefinitionToRefs } from '@/plugins/pinia/util'; +import { translate } from '@/assets/lang'; + +import { ChatEvents } from '@polyv/live-watch-sdk'; +import { getWatchCore } from '@/core/watch-sdk'; + +import { useLayoutStore } from '@/store/use-layout-store'; +import { useChannelMenuStore } from '@/store/use-channel-menu-store'; +import { useChatStore } from '@/store/use-chat-store'; + +import { TAB_NAME_CHAT } from '@/assets/constants/tab-name'; +import { TabPaneAdditionalData } from '@/components/common-base/tabs/hooks/types'; + +/** + * Tab/Menu 菜单附加数据 Hook + */ +export const useWatchTabHook = ({ mode = 'pc' }: { mode: 'pc' | 'mobile' }) => { + const layoutStore = useLayoutStore(); + const { chatMenuData } = storeDefinitionToRefs(useChannelMenuStore); + + const { chatOnlineNumberEnable, onlineUserCount } = storeDefinitionToRefs(useChatStore); + + /** 获取默认的附加菜单数据 */ + function getDefaultMenuAdditionData(): TabPaneAdditionalData { + return { + subLabel: '', + showReminder: false, + }; + } + + /** 聊天消息红点提示是否可见 */ + const chatReminderVisible = ref(false); + + /** 当前活动的 Tab Name */ + const curActiveTabName = computed(() => { + if (mode === 'pc') return layoutStore.pcAsideTabCurrentName; + if (mode === 'mobile') return layoutStore.mobileMenuCurrentName; + + return layoutStore.pcAsideTabCurrentName; + }); + + /** 聊天Tab附加菜单数据 */ + const chatMenuAdditionData = computed(() => { + if (!chatMenuData.value.visible) return getDefaultMenuAdditionData(); + + const subLabel = chatOnlineNumberEnable.value + ? `(${onlineUserCount.value}${translate('base.people')})` + : ''; + + const showReminder = chatReminderVisible.value; + + return { + subLabel, + showReminder, + }; + }); + + watch( + () => curActiveTabName.value, + () => { + if (curActiveTabName.value === TAB_NAME_CHAT) { + chatReminderVisible.value = false; + } + }, + ); + + function onChatMsg() { + if (curActiveTabName.value !== TAB_NAME_CHAT) { + chatReminderVisible.value = true; + } + } + + /** + * 监听聊天室消息 + */ + function listenChatMsg() { + unlistenChatMsg(); + const watchCore = getWatchCore(); + watchCore.chat.eventEmitter.on(ChatEvents.ChatMessage, onChatMsg); + } + + function unlistenChatMsg() { + const watchCore = getWatchCore(); + watchCore.chat.eventEmitter.off(ChatEvents.ChatMessage, onChatMsg); + } + + onMounted(() => { + listenChatMsg(); + }); + + onBeforeUnmount(() => { + unlistenChatMsg(); + }); + + return { + chatMenuAdditionData, + }; +}; diff --git a/src/pages/watch/mobile-watch/layout/mobile-watch-layout.vue b/src/pages/watch/mobile-watch/layout/mobile-watch-layout.vue new file mode 100644 index 0000000..392d2ed --- /dev/null +++ b/src/pages/watch/mobile-watch/layout/mobile-watch-layout.vue @@ -0,0 +1,321 @@ + + + + + + diff --git a/src/pages/watch/mobile-watch/layout/mobile-watch-menu.vue b/src/pages/watch/mobile-watch/layout/mobile-watch-menu.vue new file mode 100644 index 0000000..9af4293 --- /dev/null +++ b/src/pages/watch/mobile-watch/layout/mobile-watch-menu.vue @@ -0,0 +1,292 @@ + + + + + + diff --git a/src/pages/watch/mobile-watch/layout/mobile-watch-pendant.vue b/src/pages/watch/mobile-watch/layout/mobile-watch-pendant.vue new file mode 100644 index 0000000..e46f423 --- /dev/null +++ b/src/pages/watch/mobile-watch/layout/mobile-watch-pendant.vue @@ -0,0 +1,44 @@ + + + + + + diff --git a/src/pages/watch/mobile-watch/mobile-watch.vue b/src/pages/watch/mobile-watch/mobile-watch.vue new file mode 100644 index 0000000..440274d --- /dev/null +++ b/src/pages/watch/mobile-watch/mobile-watch.vue @@ -0,0 +1,103 @@ + + + + diff --git a/src/pages/watch/pc-watch/layout/pc-watch-aside-menu.vue b/src/pages/watch/pc-watch/layout/pc-watch-aside-menu.vue new file mode 100644 index 0000000..c3247ba --- /dev/null +++ b/src/pages/watch/pc-watch/layout/pc-watch-aside-menu.vue @@ -0,0 +1,165 @@ + + + + + + diff --git a/src/pages/watch/pc-watch/layout/pc-watch-bottom-menu.vue b/src/pages/watch/pc-watch/layout/pc-watch-bottom-menu.vue new file mode 100644 index 0000000..58f9a83 --- /dev/null +++ b/src/pages/watch/pc-watch/layout/pc-watch-bottom-menu.vue @@ -0,0 +1,114 @@ + + + + diff --git a/src/pages/watch/pc-watch/layout/pc-watch-layout.vue b/src/pages/watch/pc-watch/layout/pc-watch-layout.vue new file mode 100644 index 0000000..9826aa5 --- /dev/null +++ b/src/pages/watch/pc-watch/layout/pc-watch-layout.vue @@ -0,0 +1,391 @@ + + + + + + diff --git a/src/pages/watch/pc-watch/layout/pc-watch-sub-pack-up.vue b/src/pages/watch/pc-watch/layout/pc-watch-sub-pack-up.vue new file mode 100644 index 0000000..432e3f9 --- /dev/null +++ b/src/pages/watch/pc-watch/layout/pc-watch-sub-pack-up.vue @@ -0,0 +1,115 @@ + + + + + + diff --git a/src/pages/watch/pc-watch/pc-watch.vue b/src/pages/watch/pc-watch/pc-watch.vue new file mode 100644 index 0000000..f2224ac --- /dev/null +++ b/src/pages/watch/pc-watch/pc-watch.vue @@ -0,0 +1,60 @@ + + + + + + diff --git a/src/pages/watch/portrait-watch/components/channel-description/images/icon-desc.png b/src/pages/watch/portrait-watch/components/channel-description/images/icon-desc.png new file mode 100644 index 0000000000000000000000000000000000000000..4755ff285ec7ce064721d7514a62d27073a940de GIT binary patch literal 1362 zcmV-Y1+DstP)_F`ERy8=4jjRA_K9j-{hc?mdafF%1kTK{QPBms5 zb^*Eno3%n5O=r;vhq}7dL==!n01X{dmRG=4gf%&CnhGY(8%d97`jo@E3&+%OI*1Ga z2fL&qk)TIw%BQ@k7yIzW!S4v~_#PR`7pgAA)Q>iZ6aePt`2~EF(|B~;qeEkbOoX9? zVpX^0i6j6M^P)+5MYF~tQ)+ze+eNtB-j|IlBJ_OgCOq1g}@Z z(nU~^pB6#GG?NKwuM?9na1XA01%HkBVKVE&Fm-&>!vV&~?1b)3A zEmnm>nQG{e^;)c5r-F2kXt6wwmk!_MU{n`zi5HdKtwARo@|J zv}Rj6`OI%~c+-~f@SESmzhge}d@n4V2Nf@62heoF1CYF+l|2Y&RozkP6Jd2y@hlFM z&xhu%)8jzHaTvUpDc=SV!Y#G?h&&XbG^NP+Y&GoPw{3a=J~-w9utRKR+9OqaSjM%c z(6B046nq*0`?q@lOzhiE!9Sy6v9UqB1QwWG3`grA-`9-#4o?$OWId>)!i1_Z02~Ta zIN&cZ01mtt0%$n}BLM)b1lxztE`nHn2;lvg2f(fy!3BW{wX0noYE7xlfuP2l^qQ^? z)E$Li?q)6Fk5qM=^l8oNWDU29$KnO>VfFMlV1#JkZln&Fu-sBRTI7s|ZBfNzi2<-P z1aRX!7)eV*Ta?Tt3>t~sl=x5|3$a3!ktn-H|_@`We?@9fJIBCF|e ziDsVePMA5v`(E?02f)^WqQlGTuyH?P%5;oKs6byemR21j8(F(A zguVxlsT{oKwdpBM>6;BwRv=+h8daiG`u+&x8GEcXz)(ESs&Bi)_B^94f2&C<5^;L8 zgl)N}5L2|`wyyYI8PbZXo0q0&%Y)b&Pv|&TwXi0bh_Z}e8C`RfpaFgHIP2`2 z2ez_~W`+~96m5=XPmmqC;u{gNxPs2%#~cb`o=)JL!|5B<-f$|KjRM8VlAUEn^g)hk z&1IcO%%s{>Nt_cvu(`5YN@h7!iLh2XtQ1(LgYjH@6MA~PpKd(=AN|+o Uh8i9#P5=M^07*qoM6N<$f+(wx!~g&Q literal 0 HcmV?d00001 diff --git a/src/pages/watch/portrait-watch/components/channel-description/portrait-channel-description.vue b/src/pages/watch/portrait-watch/components/channel-description/portrait-channel-description.vue new file mode 100644 index 0000000..5ad7b87 --- /dev/null +++ b/src/pages/watch/portrait-watch/components/channel-description/portrait-channel-description.vue @@ -0,0 +1,71 @@ + + + + + + diff --git a/src/pages/watch/portrait-watch/components/channel-info/images/icon-eye.png b/src/pages/watch/portrait-watch/components/channel-info/images/icon-eye.png new file mode 100644 index 0000000000000000000000000000000000000000..3a1e138b12f020c57722b5443ad7eed73827716c GIT binary patch literal 575 zcmV-F0>J%=P)37+i z|Mdp8*8!)21#f@?GE5X+Pg35Ug7_G;4!cPXqEJKP7v|2-3UAdT7bQh z0;IBR52a>j`;jD?+f|5*{c+$Oa9Gl825=6z1++^FW#p4b<#&P0lKN6XJwPweDJlNt z<3n)|fb)|2Gk_1kD@pA|&TS6{HIgw;%OYhOAR*Ja;Vcf? zeqa>%kp?XQ>#o9}9g|c!SIsJRCac&1go3V>u!>MpR2;IM$X8U$?3$98EDd62 zcAH|5a%OiExKhgO3cS~|>qo%QKihRJ(wF?fsoUKW0W0fGE>ZA;kUui#=ot)NGlBpB N002ovPDHLkV1ig;1aSZW literal 0 HcmV?d00001 diff --git a/src/pages/watch/portrait-watch/components/channel-info/portrait-channel-info-capsule.vue b/src/pages/watch/portrait-watch/components/channel-info/portrait-channel-info-capsule.vue new file mode 100644 index 0000000..da7ef0d --- /dev/null +++ b/src/pages/watch/portrait-watch/components/channel-info/portrait-channel-info-capsule.vue @@ -0,0 +1,113 @@ + + + + + + diff --git a/src/pages/watch/portrait-watch/components/chat/chat-input-placeholder/images/icon-send-msg.png b/src/pages/watch/portrait-watch/components/chat/chat-input-placeholder/images/icon-send-msg.png new file mode 100644 index 0000000000000000000000000000000000000000..d58748ac425c92c2b6f4beb98c85ead37f36d3f7 GIT binary patch literal 2821 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 Q{q-AHzpsrfKv?4b4S5tYO#lD@ literal 0 HcmV?d00001 diff --git a/src/pages/watch/portrait-watch/components/chat/chat-input-placeholder/portrait-chat-input-placeholder.vue b/src/pages/watch/portrait-watch/components/chat/chat-input-placeholder/portrait-chat-input-placeholder.vue new file mode 100644 index 0000000..916b280 --- /dev/null +++ b/src/pages/watch/portrait-watch/components/chat/chat-input-placeholder/portrait-chat-input-placeholder.vue @@ -0,0 +1,88 @@ + + + + + + diff --git a/src/pages/watch/portrait-watch/components/menu/images/icon-audio.png b/src/pages/watch/portrait-watch/components/menu/images/icon-audio.png new file mode 100644 index 0000000000000000000000000000000000000000..30c79d681d462792fba50b60183d9520ed84d66e GIT binary patch literal 1444 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 literal 0 HcmV?d00001 diff --git a/src/pages/watch/portrait-watch/components/menu/images/icon-donate-show.png b/src/pages/watch/portrait-watch/components/menu/images/icon-donate-show.png new file mode 100644 index 0000000000000000000000000000000000000000..09c6daf8cc178fe7a99afaf5a4bd974be652f3be GIT binary patch literal 1654 zcmV-+28sEJP)Px*FiAu~RCodHnt6y2cxCm0-Is>pWc2CaCu0|N2bkw0gnbY= z7d!|41!<(s7ptN+SiWnR&J+UJTETm!&8hcL865eIrhW^s6X|^8%55|>S2S7QV362g z7`8h<>_fprrroKpQF#RPIzvpk6Z^y9JJa6j#;IxvDVyN+mJmMIfxk@xN$Te~EC8c` z{3cjA$&OPM9ahT>vqe54_?!uTFuqomd;b}54jAO(P`?dm+2Y!&UcyT5Uo9)+Na1uC zct<-&^&cr0gI3!YTNC&UXt~+?RZWN0m6{p#CrXi_eF#_+^?9B0Vz5tKAKFffd|e@{ zWL%to#qE%3bIhW0V;U0p?sm0({qVa#itCD(eSTH5!RidhEGoN0ks+QuMSeB$=Z1Y{GJuC!eT6VRNpHK z5B#E;sQSm$r=$*+!I8MK+N^wmVRVKt`CS?4P_W)Ih;+H?as)mk{|L!FiN7csPZw{Y z1Y2!h77TD1up1CZqMJ%Z-ozM3-UA+U1FKSOOgp6UYy+7CC$kw<-xX0$c>{ z1@f57BeGd~62!je=e=aalu5QCo3I1(#w^*7z;gec50-;2Alu!vGOc9rsF7eY>GA`d z>I)KnD}a?(Fl5?-=elnhWCXlr%X=y~1<39!Zpn8vH8t&aNQ!^I5br3I&A^f0Nqsx` zJt}Qo^c`Rhuq*5V#%sr3IU#`-Fas@%U$~(QIg$!li?;w44a(v z$StAe4V2(N$W@(460+Y44Bu8QL zhG*sZxIQ&!hxq|O?s1=NNFq$9X}*rw+LQX$Ogm)d`@a?Wr&y{34E$Ex&geZL^M4Mj zGAR&U2(0w)36eev6T-o*t5Y@G3(BWM2`mcRa++HhPq28FJY2hC>a}hDQ~>G>qp{)!Dcf7 z%jzzXB7{j^{-?AKdPx#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91K%fHv1ONa40RR91KmY&$07g+lumAuBp-DtRRCodHnq8t-KjgrbEcJwyvE2)yUv_Fd+(V!XAaGVKWDGmYyH=Mtur%cK2A?hHL4C&9jH1` zb)f1%+d42bG;|%<0tUf%;0V|b=C(~lClXO$FL)KW#zq!LcS2vGIVq|JUU5~f*0vNX zrW528_qZz1XZk=VbQY46YR7{gP1XCcXM=HIK9F;P9^Ye(D@0JcNhxHVu8jFfFjeco zz8ahcdOV|jx^hl6)4=b#D&}jGiedY+#_w0`5sgZUEA=)C*ldcDUH$wd(QLl}95ene zCHZ#6HVT;u{xJouaEZrvrSbn8`x;kFY1a_G%M|k^_Bk%Wtd9Z*Ox$~}m{P7$zyec* zn2UVG;&)F%?0lctQurWVE_(KvB0dZeN9@NY{&VbF2uH_!5xUff{}=nl5JC9g3?xpE z2SYeI;)~ib;ILNB{LL6K5@&e6#U2~O)wUP}t~R3o#GVl&fVe*Jhv9oFhN~?x2%QLi zHi9=~Nez)wJrjafJgiACLXV0YIwc_f2(70}}h z##MQ6=f;7cty&@T)DspyawqsGcmhmlC5E-p;2_ZB?Nk`iTrzYkz?9N^sAz+~qCFVj` zA@v4anGiS26^H+vgqX#ym_pYO(+j>ZqIUZvB__B5!b{v+Cf_0KF+MqS_aX5zBSy{x z{XU8Ci*10!{blm5_Q{#64+6#lIn(R0)i()2Q4J7&VxQMZnajo3B;VY*_>pjp5h2$A z(|yVD&C-C$#LGpN9+|EhsxAh4}`NWSdEP7(4i9 zh?qPYAWxq58a%msGb8>1;ThAbbLOwrHj;K`){ z^(MSybbW<=ZfZdx4iGLfNyNM(ghTrhD?ep+Z|c)NzH@lwwVK=_>+zUxe5xO;a>+ZO z*_rQ34NP%><3+{!T8g`K8J+&_ z5jX|(c&@P?{R!K7;D}~rzB!t(z(908ZFI`p=F2jrgkWs~>7|)S3kpVO(wFsmbUFy9 zfRm;H>!JzU5Qx_0Mz5S`;|?(bUod3yFOPgqEHneIejxu2+X-&Xqd)K@J);PEEjO$K zqAP&C?_QOMNa286_Aa@HXpG;On2SQo1dEyLvp4wqfZoI8r`7pT^sGRSiEsh=bA=v{c!Un`p6}`? z=5oW4`_orA7lW_CH{c;JaRE+nz6|s@iZRMbfy2eXc5a?CsHBVaTIAfKN7LoIeHn2* z_2^?|pjNAWRMHxqve11LhwaAcHe>hL2G}>RgEpYc>;pz`(#ry9B*~(-Px&9D5%aGTX~& zN=@>UI?afa^I6kfY*GWJ5;y>+7=ms#&mevQ4cKFgu;+jtoa8u>|Ma`);iIjzRksp=bAaoBs{#F=3z0|6Szrhp-?9||$k>}K!*}@B$gF`y;8S20 zST(DXzLXyT&H`=#4gx#UI38G-v(UkrGq?|T?1x-6Q=!|0-!bfUTax1ZF@V*eFnS_ z2#`(11OOR-*jn4&+AE~@Ujc8rDdYx#++N1-cWbCX-^&x;+e|k%05s<73e-4LwT=TH zWh%TG05V(v6uW31m;k;@XGkUh&IcZJ99D`Q1nm!A1^!GmBpm?y?E&DTVz)X){{`Tf z2>{yY+!8S3ZFAlLzINJ{>H!tNBf#!}0-!_GQDDWkFBJf7aq9zWyls{aPdZ7iixYrd zz@vcv23a%_j@rj)Cjd7BjX}2DVcWY_U?s@|H1CL?%sB+Afcr|sc-zcZ6o9pd zKr?WCi2)D;KCl6JxPYQN`T7p)!$1I>3p|#uUJIxnMU_Vcz!gAi0V$SGRgMXOn}LRW z_F6!F9Tx!l`tpKOlrIH9J8-dA>qDW?j&L};_%receq5$NNouojy9~w!z+J#q#-Be} z1y2e95gZN$%PwPUVgjJX%KRGF3Q)m_08kKAD}h^{FhF*1nDUZsw9;Tf%LKW7FmVx& z+5nW|k@yoJY6Bn^r@~^TB(I5t=^XbD0T-4C0y=LfIg&K-iTrd&i2yKd6RDgYpyRD# z14@tvSwzZy*&=73vGkQfdQ22LdBD1)uKn@?rN~5a527pq$_OoI0zkiC3EUk->n+BZ zm}47~Y4;~;Ty?-e_!-dBmqeb-1b`^;+7|?cDI!LQNK)GUCCO&{|I00sWDw2>8+-sS z0H|ybj>@`WA^_5g$=AIds4dd@KzEIlugFN6HUU6o?kvKn(GQmKn`W&{0I>H9w-ym^ zSYJNkq{I0c0?xYHDJpzs3fy*#9MR<828?c%Wn+k_^9rQu@?#;1lB41P>L!`7WCMU2 z*FHg$qvDB$Air8)U6(99NwxskorqT;g4K4N9kjs_*-6nIBbWEO4=_Pf2PiF*+B4*9 zSjgQ!2R=?mfj3dwF5}k&oP7xh9i#+?XTpV{(xSQQ4zaktx+dpawh{oRGKw*3cxaAL zwAoKTr-AP+!}ZtoCYTpg{3vGHkMa)k2tD@oc`;IS-Byou&}K!C&gqKR>CmF*M?e7N aO#TPD4SZaT9;w0r00009+zwG&khnw8;&PLeTtklgkoY&d)=xwST ze{Xq7-ST#4VIAX{;*7a^wi6Yj-5+SPDoi!|T(Oup_UM7l(*%^hN%9;r-L6^lJB~Bq zM?ceT=6{RU|NMSrouitoc|I4*yElSXF@HY&{pyz{?Qr`2Glt&H2fs5gFc*5dIEG~0 zdpk3=TFFqLp*p-A2zFatSafu&ZrqyG#%Xu||F^k*TBkZD()UDdlAX~fwaq6}gl0vY zx^#uXgn_q#t)aOvde6!Lji+08NV@N3%uF{pAL?oM!soi+gbjNOO+Tf1U*UY9J;gFm zQ@rLYgNVI_=TD7E%t@(!Zl?@`9KLySe5=aTckKzEIO*@F&>tT)z1dE1O^iEqa=*R$ zVf`j0Z>EmWWB=#;TzASQ{F%UEc9EZdocX{E1|`b58Ub)pEk)mwB?;; z;Qq8bjP1t6g|5a2y8n2cY7jE|lEt=ULcEKlfMc8H*#?16##+ohCk$FRcLcG;Br>g7 z-to)5Ej4TTcAwDvE#7B(-S&nA=$BnNZTgqF{ntd#zZaI@-xiR+=f(EEE3@N&y|wu3tKXaM^*&l}{`D0nqqTIUU)U#UYZiv=3Bihv z+G+{KI>%Q|x^qK~Pr*7=_Q^*7>xX#6zpAVMdSq~U(d+6p*ZfjVnZw?%`m_66Sk|l5 zq}27RPd&*Cl}`BLQSh~#->Wxo!)^T;vb|Z1U+#0Sr9PUhWp#Z0y~0hC&g7Ohygs$0J!IeSrR`dB*RvRQEB?E<-uLh0 z4C((F61PIxOqT!n@jPl?{P{|!Rgs(zc0SEM)3A;G9^<~WyHz3#+zHQLUHsK@=P}cH z*2)8RGi;64q$MV}@A#I==xxwbDdzm_V7Vt>!nbbqps63`pUrQzBv!!Ty6iDkVk8`_*ox|r(@oqVpySn*&@t`Mt?)9#Z( zoF<#v7d0?1$yR6HvRHwAQG?);%M%$(G){DAJYae`?Igo#jT5aJ3l>zUhANsmu43S? z*E;!}S#p7z$5%Up`+s&BZf^Nx>+zWXHQNHlAN&pXPyRieWn}Qh7nt`MJYD@<);T3K F0RX4=J>CES literal 0 HcmV?d00001 diff --git a/src/pages/watch/portrait-watch/components/menu/images/icon-qa.png b/src/pages/watch/portrait-watch/components/menu/images/icon-qa.png new file mode 100644 index 0000000000000000000000000000000000000000..b10c01fbfb309b8c11088b18169b1b09b4228415 GIT binary patch literal 1209 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!SkfJR9T^xl_H+M9WMyDr%n0xa zas59EXdD8-kO$hZdQ0**AgjD2$S?SceCom*9=bLkmdKd!Fw|c%Y8wNj_&7ren{dKd>)|!(O^#0CqyKq%j+T!W6pTAQc zW<t`k{r&)oVU(FkC-r2gE|9%$_<5KoF|MGq?v^9&}WME*b z^mK6yi8%ardU*LO1D=MR)$jLypSSmJ_4XbyjSEJn=W(8GnDFPXHfwv&#{tqSWzCk9oa59mH(hm2=QhJn<=$PgPjwmC>J?@* z7=7Elbe2KXotCJT-EyhS6Apj<-EFc_|Cb@3C6mYFKd!s(YCkex!s)=Y(`EO6)q+VJ z3mA)f#R8a@voSvSDVV{?G*5%+K*uhrlMmP5SN5NMeyXjw>PIQIiVKF@Y(Chz@k{Ja zur)1TbfuyGTXFeZu>wwa>->LvrU>u0*2oWJ(mS-^eN6nbeCOwCstimLGYqWy4?JR5 zRS@BsBVS_I=-O}Av2u#0e}n7ne=;-Paz|{jVTgOUzI?uHL8?5@qx~}(AI2~E|G_tv zbrRyvV7uCVTFd&u+Xsw^ECmaGy=HCL ze#%bpLbwqG%;L96VCra-A z?{j3`dyPfPH=h}=EjynS_&4M0{_w3Us@{gR$xnOdZutK4G|^(0$YX+6& z{dPIibpML-=Pq4M$|5e)HEsQ-YEEfZ+|`vTdfz#h@zd_TtW&;)XL`?DYWU^$&9~|v zCslvV$}B$H^ZS;X_ro7(|lVN-f9$L;*b{zB0_;djd< R2Vg#6@O1TaS?83{1OV7X>*xRg literal 0 HcmV?d00001 diff --git a/src/pages/watch/portrait-watch/components/menu/images/icon-rate.png b/src/pages/watch/portrait-watch/components/menu/images/icon-rate.png new file mode 100644 index 0000000000000000000000000000000000000000..203a21f3744171d969b26b6304058a832dad2f2f GIT binary patch literal 417 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD3?#3*wSy#B(j9#r85lP9bN@+X1@i3!d_r9R zlM8?b0JR>qJM#+25-ADt3-03mT&Y`nsaxLvhS85Swz7_Aj0`EeGfIH+Z#`WcLo)8Y zz44N(*+76Lp}Oj}%lE(Yw}xn}HEm0|ZPv++vrLb)C zab{`dFFX7!9?0&Ixja?9>*Xy=`6?mXSZno|`^HNc9<1m1H*vq@LSvhZ>M2|`8xK#< z-sZ!^!XePWd?&X0@LkjL>vv*{%jddooV{bWn!|(r4c5JPR`Z-r=eYy)ID@CFpUXO@ GgeCw)0nD5L literal 0 HcmV?d00001 diff --git a/src/pages/watch/portrait-watch/components/menu/images/icon-score-withdraw.png b/src/pages/watch/portrait-watch/components/menu/images/icon-score-withdraw.png new file mode 100644 index 0000000000000000000000000000000000000000..30ea1dd110cd4e5c72446b638d4664c1a0bf6606 GIT binary patch literal 3199 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 literal 0 HcmV?d00001 diff --git a/src/pages/watch/portrait-watch/components/menu/images/icon-set-level.png b/src/pages/watch/portrait-watch/components/menu/images/icon-set-level.png new file mode 100644 index 0000000000000000000000000000000000000000..56b2e7d8e7809791fbe61737a81eeaf3eb5febec GIT binary patch literal 646 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD3?#3*wSy!o0(?STf%N}@0LNB5Sp&3Ny(Gvl zn4z<*;iu%W_h~Ooxst@TuAO72c>Bt}5_gs_Zyubj2@fzg(igmUX7XkA`lk#GjMF?_ z978hhy}5cbuh~GL^c$Pu-`2j}^Itk_mQ~RT;m|3H;s4fsn0QG4Xb@B1<2|w0 zma`ikR(xw*@p2p21jh}#4jQlGp6Gc)b3+KPQI^(^rFWE8=W;4v=QX+=^U!gd^IE+< zS9#(B7jHX#AmX**{sTGFW$M?QEpt-}PMGMWlD;E*;+%$)oSxjX`dt{L8;@K+-r={A z$xLfmxZ7fFu>&4G>ni=13rS4f}Dd@gwj_^VS*Z@7GzY z{pVCsOqy|{yRuF|{OS`2hyQE8CCzhRBB92nQv2qr(nX;ZVWxV$A1;f<_!7>^edsu` zR8M9n^MX*_NmUQ{Ggv3pZEX0p;9<9Q!V;4jBlb7(|DQ53^A;^^h>U44O(<-9|Lx5K z76*lng&FMM;@640epvQl+Q~^K2Gdg~|M_y@Li#Oc$NOJXEp|?;oL!fdQ`rSud+GkgeRM4{7Ph(nefP?*V(bp)N;nvjG2cEd%yp5Sg0;$EA(=vH-BkG h){*4Q(9qSTOq^mVXgm%8MZ(hQF-XS9Z@g+;h(NrRVnCv)=B#Ywfky|Eyu3z19^&P8xFi z=>X_FV8{{ZLSWDw!1k%YTwo?}0I( zqoiLa3dBGFVEba=L15Pk27Lm|mh@!>nGvjw1CWe=q^1$y04GR_5UE9t0+8JPt-_Nx z@Eq_k@E-6Ba3F9duo5`9U}?zDkQ8#2sc8V-D8&44zye7dN3+ECZV8wLh2KNw$;#G4 zb0@)+?O)F}9ZzuXSjPAGY)?rZa&{)WS<(^P6#(1k0;d4aNP4HLa@%Ww%QLx+l48xi zWIIA)3lJXBqa!7K)>pW|P%8v%M=aiv){3%pw4|uhrOEb3z%iM?EJ-hwUBGtaiE}dk zWs;(jRHDiN*bdi=7~Lt;v|Q4CRW#fF0hpS}OqKLw*)?om2dvKcS4+CStbC8J5&*W3 z0wU|i=`5#9B|T6@x$S=nIcQ3iOm2HIur|}VR?^ZcdkEgr0NCCacz2XC6zeRO^iUP$ zwznx;l1lF-^w?emtjlz+leDDD9!djXJ5Fe?0@KG((0TwK11=l~-Sz@t`x@Yug7JR= zJ7?du69C(DqRsj5oj|2(Q3aUGkA-n!-fI?+Y5o>E%noq=C>XI z+ou7q0J~(yehr)?>AO|~klJ<8r`$U;G^R+ReZHyfN$@G)INDBAhBq>K8UYTF7xG;mLs^v5s)@KwtA(SGksbv+;k5%Ny#5=nWd zc3j1_LvMc1Xi0hZsqe;ZF9Yr`FvdXDbV)HnSBmNaa1*d9)38d?&80N{*H_pF*qZTg zl@#sw(q#LxG%(qdiCgPAl3pmiNR|13d{Nsmh>#CNJTGZ>S;e-`N@K4*kxi1~7P>Uq zJ{0&kn-f|o>8{cXB*wZP5EEISX3AntXqu!LTqt_6P*B;#?DL=ROT_YH5N1t*Y z@V2B_voh5JASsWDto+ast{0=L+w>5MJ4zkr4F&I;DJfwP)fD3>p3OkO^3nhg| zjG$zE@a&%b7>$>h5O0Jg0zk+{`@A?d6J_X5;AJ2}A_l5X3}C`T3Qs=jbY$%h8nM1^ z66|f(_I|+oX_mK+4VOrIw2t6p$<+3M41`0{=xU76m8E#{OPe-6HalSeQbLR=k{f{K zh4IzV0Ew_!(WKkwo0=2=GH-~#xWui?EFkK1gh-su;x8^S7`>sXY(JK3PAULp{eO`7 rIsgXgX*98y&I6i2eUNkxy$AdYGo0678{#CM00000NkvXXu0mjfQ<7k) literal 0 HcmV?d00001 diff --git a/src/pages/watch/portrait-watch/components/menu/images/icon-show-all.png b/src/pages/watch/portrait-watch/components/menu/images/icon-show-all.png new file mode 100644 index 0000000000000000000000000000000000000000..ecb231985a27e4c75850e661596c785938e90cd4 GIT binary patch literal 2469 zcmeHI`8U*!8~qe!j7+kXVR$i?ENLt;+GiRJF(M2_M#ae3vP7xZ7Go(fvhQIuwrpvc z$k_KKjd&S@L?a|gW9{qxGrs4%&pFS%&pG#(d+xdCJh7MXCQu=1ApiiNrZ}wi9uxmv zLB2g?8B_ih_(^CBGyqgTIk4>_008@IE}7dH{rPYHOW^+`fxQmzIjz4H7q)kO39!ar z&glxdN>94pfBJ8t&>FR>pyHZ)S>CIGK!Vy=!IG>OmgK@y3f3_v9+^jxM#67ycw=nhbPXZ38zMl`1tgTTR3L1u- zRDOQ=Na%e7LtoEIe}^}VI^Uaqi1z90J#d?p{mV(@yjhXF_vpL2RP7K@oZkcaC!N2(hK)lTzzU`@x%lmit0q`81Qve`PVTwiDxKA!+%wLc&k!m++_&pi& zUAx`;`l8B+)QNTPBAjG#EU{3-O09m7zX&03^eg~%&+xVQa+t z3^M5I4k2Onx{O*VgN?2}i16<#y@;1NJ@+y*$dga|0Taq`Zs!lE@%Qj{DC_>Nh_<@;EBgf2AsaAibfUGR)LlPj~XOUz1U13`&`ftm3%@{=NpLO2?Z< zlqdVBgqdSCWZ=w()5R&K{9ig}`R~B_1p%62@|1J8A*rMHN zTYTbz$$kh{iQlL;H(Jt8chbPz)X)oAGhX0 zioi+Ox8ZV-d&hcreGo%vRwU^N4VClu7p?u4TF1o|y2g_|9~3hT>_WfE@#x!UeNT*y4-^v+&qHk9B!PP;7W;BtJy?8E)Zicc%7YZqYM=1#CRmH<0;ub)v$SCoeochbnJH27K5UA3&9zsI%5Pb>Jj8>7E_!Oa5>Gr z3V3f{PU*%>9CU=6s><34Rkye#6NwISB$u=WYfd}iu17S9HN{;xE~Uxb@+}f?YgO;O zu`#T~)2y^w0{E6JMw|Z0RwvkfUIlBL_5eJ%6tCI2Hd`}>#`Jekggx(!M$!Mr{NuHiQHzC4Ws%`<-XqOoc<$^121iDhY3DuQD1ib zV$LVDq1Av6^vo8{3v>F|%^dP8Vhco$A&rNy_CNubxsmVO?NnNRpiC zgEr18>O9B9mzjcGILmr-&QNhW&TClo;koT%BT)=QN-^@|xIVnms8g8~} z0@Z@8)q03X`5lRQi3#k}VICbIcG_~B-u3--+!h&Z>rxBIgcy>qnwVsK(fEO1QH*Td*mOMvYKz=y!< zVIG)~%xPe&q|1YJ8c2ZcmB10;p^ShvQRQdgIZ2=Q+til;+fP^KbbpgKW+;0z+*Z<8 zy>#nIfbChpx4@jPP3M69Ks@ZaB+S#t^x}s{nV{*KLXwdUQ2`{ z$h<1);~W6j>0tY1U|&~|{y@^}wFKCn0bB#(v$Nio^lsgYbNb%)PT-wHr{96ulH&8f z^*;-+y#_d*$Xo#yNcuA;fOWdqz7L2KV16RIR?>+&0^S4ON`!ivPMrcdd~dtkm3K+n zQAfZbU{fNrS<>Mg05#RYcHjs+opo5!<~jn7RvBMMZiA#_O<$gayzR(b15al~hPa_6 zpe6{m7BFfTu>Az^BJd>e8*mZ$MAD5r=_*;cfb9St+2g%kU?WeD+~Rr^JqI^FX+U zq+e=dfHdeGq@Q$%YZKuz`sg*pd;%Vz<$xj9aJ3^LyPlPFyi`s==-D zM3%#gfeXbpM5-MBrRtupyp~v!)<#ow3lQb+AHbKu!6KTXjSlV+3*YrTV8nPDKdvQU zidSRBUyc@kJwC|;5^E%#OoK_U36Zi#WUAz)+##uofU?KrDiX>aluT0Caz|wo63QKx zPLGSOart>wqa&wr`It8OVdUfTjT7)O+fe&|fic6=SlyO@#*|IihSmZm><4WOr?r5_ dlug)%e*qg*j$ht-k#qn6002ovPDHLkV1n*c#CHGy literal 0 HcmV?d00001 diff --git a/src/pages/watch/portrait-watch/components/menu/images/icon-withdraw.png b/src/pages/watch/portrait-watch/components/menu/images/icon-withdraw.png new file mode 100644 index 0000000000000000000000000000000000000000..497f2c2da1dd73640b5b541ed15cd56b836c6740 GIT binary patch literal 1165 zcmV;81akX{P);KJL~}P8SoPDyre&B6jdz&GdmM_6S$zpXoE4I0J|l9Q>wd| zfH3nPuMzkKW+&mI(nzQw;5OjtQl@8;zg^NZCAMk^_z<`_GV(TXi=?kh43CvHv$KHb zfGZ+hA4$5TM0X7VKX($|j=8}v00t8FM}QAVI885Y$lHW$aHV15z;QCepGdmf$75Ei+R?=^&HSPD!?AS2wxG?U=zHw`v z1I*0#3>OCH{qs&qKMj#!W+wsfdS4&p_DNcNK4|FL5)d{`zr)g@%OD9W!2cT%z%hNB zoV6t&gz_7}Rh?;DNkR{JAG%l4)tkBmjtAZWE*&Ca0Q?8QE=j*^Bmp4`21y9O;x)g( zngk#8uWuEIc5Oo>xL7yIWr5!q0uqtXjqYsl8%01S2}R(W5MXBK1NQ-!1K!9C?il;d z1I%n!II-E0)BFs`_<@I?IC(Nn_5rIz0B@w;10Ip|X)Ln@&dj`Iz3g>2*XaQQz5>RA zU%0Vf(%F>+#KXKVxn9!V#gG3HU}k3kp97w-vabyzz;Ss=Jy+7V{v{^hLEwRGVSdw|C!E!Ejlg8Jmgwy?Q=n3+%V-N0kfn71VDP7!dYq^EKX zmCDUUK&TXV08gd}=q`c3fEy*fQVK2@ouvw-d^5A_fER%yBiWTp;B?@NP7nBcyxL)_iiH20fFAIUWsjuS4=RI;9|i^%Er+=pp`PAgRoJhb$dz5* zR3s$AbJQ+wpt@v(U#bFKg{?_wQ3Yyz9_;gL6sEFrwA3bzfLdRZkH%^hr-+y`0>=25 zBp_6WqIH!5A9TiLvUjtS(lrMBU=C=V6QU~Nrh2!#6?ML-Y-dHl)Fm=Ct2y__&U|kl zkTO1%;gp@$Gha1v;<-&r*%1A zMZg@@q1DWfN`k9qv4x{8bas88Bm!DQ!W`fy$pJ0a>s;WQ5HPkn%n8030Rtrb4crer zA?eRfUvU(07w|A}M0BsHw=b + + + + + diff --git a/src/pages/watch/portrait-watch/components/menu/portrait-menu-item.vue b/src/pages/watch/portrait-watch/components/menu/portrait-menu-item.vue new file mode 100644 index 0000000..7eadee5 --- /dev/null +++ b/src/pages/watch/portrait-watch/components/menu/portrait-menu-item.vue @@ -0,0 +1,138 @@ + + + + + + diff --git a/src/pages/watch/portrait-watch/components/menu/portrait-menu-popup.vue b/src/pages/watch/portrait-watch/components/menu/portrait-menu-popup.vue new file mode 100644 index 0000000..b428532 --- /dev/null +++ b/src/pages/watch/portrait-watch/components/menu/portrait-menu-popup.vue @@ -0,0 +1,313 @@ + + + + + + diff --git a/src/pages/watch/portrait-watch/components/playback-chapter-popup/portrait-playback-chapter-popup.vue b/src/pages/watch/portrait-watch/components/playback-chapter-popup/portrait-playback-chapter-popup.vue new file mode 100644 index 0000000..51e5073 --- /dev/null +++ b/src/pages/watch/portrait-watch/components/playback-chapter-popup/portrait-playback-chapter-popup.vue @@ -0,0 +1,82 @@ + + + + + + diff --git a/src/pages/watch/portrait-watch/layout/boundary-wrap.vue b/src/pages/watch/portrait-watch/layout/boundary-wrap.vue new file mode 100644 index 0000000..e73fcf1 --- /dev/null +++ b/src/pages/watch/portrait-watch/layout/boundary-wrap.vue @@ -0,0 +1,44 @@ + + + + + diff --git a/src/pages/watch/portrait-watch/layout/carousel-main-screen.vue b/src/pages/watch/portrait-watch/layout/carousel-main-screen.vue new file mode 100644 index 0000000..fd1677a --- /dev/null +++ b/src/pages/watch/portrait-watch/layout/carousel-main-screen.vue @@ -0,0 +1,311 @@ + + + + + + diff --git a/src/pages/watch/portrait-watch/layout/carousel-page-container.vue b/src/pages/watch/portrait-watch/layout/carousel-page-container.vue new file mode 100644 index 0000000..5378dae --- /dev/null +++ b/src/pages/watch/portrait-watch/layout/carousel-page-container.vue @@ -0,0 +1,25 @@ + + + + + + diff --git a/src/pages/watch/portrait-watch/layout/carousel-sub-screen.vue b/src/pages/watch/portrait-watch/layout/carousel-sub-screen.vue new file mode 100644 index 0000000..65e130c --- /dev/null +++ b/src/pages/watch/portrait-watch/layout/carousel-sub-screen.vue @@ -0,0 +1,50 @@ + + + + + + diff --git a/src/pages/watch/portrait-watch/layout/images/icon-donate.png b/src/pages/watch/portrait-watch/layout/images/icon-donate.png new file mode 100644 index 0000000000000000000000000000000000000000..16445fa17efc2968456834d62b2fdd2a9909e21a GIT binary patch literal 2002 zcmbuAc{tSDAIHDbU^H}@>soS!erQs8=rXcoi!fp`nKYIRk!(XWwzy^zLQjq8+GT!d z(9JS8g%GkYS(>bwkX%z^jC~z5_v^WT{{H-(=Q;a1uk(I?&Uv1b;)t<10#}3s0B{6t zYjp*zJrA-t6f8%q9~?}G+_G@6000J6g6|~?0Ec88?Qs_e1_nYyLw9y|&}cLUgBcwi z-QVAzoSZBuC{R{bPEAc!R8)+LiUJ3NgM(*gX1u(-`uqDC493vVkg2KZ^z?K|Nr{Y% z%hSy>q#9?r|l^YHM9kB`^X)SR1}TV7tSs;Xi#nZ3QeU^g%@ z5ahGj?6kBrBO{~6#zuiakei!JBoY@E7Gh#z78e)0y1Lfa*J(5wxW&!Q4RoQeuMdO4 zKt6>+$;il%l$4yBn!@ApC=|-w-5m~xgQs|VdxM1P>S|wKUresJd2?T;&3<<6BABOPUhz3VPRpSqN030zpbqefk1S0bSy0`;cz%GCN3^6Nl8hirKO-d zP^Yf0ZhL$C+S;17w)Xh=IGs)h17c}u2?CKwC>k{tdEaRUtgb4C^R%Q1hI8> zb)b>m-CZz-pq=dO?5wOT&s~D?x%)>YHq^Q%$;pacWOpkBR-jA1Wed20h+O8B1ud?1~(v z2XOu0{vF2Yrp0I6o?yT1eg8Q*YdSZgmS31WP5t(6skrr?WB9EfPxAel6jHq3kAyFk zi9LD26ZeVCxuLkIhqrbc1Kur=H}5?yTb#Yq#0?vyk4JyHy%su{*tQ?OQ!~G{+frEI z^laT|-uJSGtcu=EjKU2wIlS^!SC1p&5LK*_x4`f(tCM9u>I9tFp_S&A)vdUNhk);m zjf(T&ORq#*S>XJ>e8}C3VOlG6Ro%z1gTGUjniP&X(th>p`x3*Gy>MZ3v-5DP!9!`a zvBw(8%rs^pz6og@8q4cJ?mT_KlbUVXh>Lp3WX14O>@T6I3Er+Jvy=vXIy36iio8_JU=hvy{Yz$ifByBp56 z_G6NpdC23pS1QM3J=rJ1EAlK?DNjOwSj?%V18NsdPTlMV#CVQ_Z*}oUhs@0X95N?s zwD_r1*!^BSKnY56F1H^&oc0|4R2FKjdkVCK*AQw}kNg2i;H<&=hd*W^b8}WY#}*5z zoNFpx)(y8eo=LD}O{?TvKTOn~WC;)B&8iZbr-NxEmPvKQVc2HoA<0?6>+qcU`8Cy7 z)1uU6O5`MQjMjLquIs1kP|kn(7nhgX%$IB6Ym7@IS~6b&mW|D3VwgAvcPy2{ zjfj>RA52k$c#F+ccbXi=2pHU?|I8p8_>$w=IQ#~nvnVYLikb=wYtEdQ{sqEuS=o7% zSkpDt-3`=y{iOOVw6b7k z-jhX6Hlme71IvxY9h%o53bRxZr2U{#tBRa7z*-y;`hL@k=UdhI=A9FM4oFjwjqV zYSNi8JBXK08y23d>PEjp!O)HOMMyWi9@?41B^q&uity|*>6QyNrrTFx$rA4)Z&GU5 zK#{nk0makiBnohd6~{qslc@|lK(`D3O|?=aE!3w0Z&Kg^fv$p5_pmA9`a7ZgF9HH%n~eS@L}dx(!vzGC zYlu7bn$V=PIFw~9B|j=4)DO1VKn3JY9VwOI{* literal 0 HcmV?d00001 diff --git a/src/pages/watch/portrait-watch/layout/images/icon-playback.png b/src/pages/watch/portrait-watch/layout/images/icon-playback.png new file mode 100644 index 0000000000000000000000000000000000000000..ab8a84d5ca9161a4bf5d4d81dee7966dc993f781 GIT binary patch literal 4706 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 literal 0 HcmV?d00001 diff --git a/src/pages/watch/portrait-watch/layout/images/portrait-bg.png b/src/pages/watch/portrait-watch/layout/images/portrait-bg.png new file mode 100644 index 0000000000000000000000000000000000000000..27c98c8202a0706e10798fb15df7b493052204af GIT binary patch literal 37212 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

RM5I^t&gWV@1)ez1*G(b9aSR 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 z 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 literal 0 HcmV?d00001 diff --git a/src/skins/black/imgs/pws-product-icon-recruitment.png b/src/skins/black/imgs/pws-product-icon-recruitment.png new file mode 100644 index 0000000000000000000000000000000000000000..f5950ab2bcd011fe8c031ec6d0c45ef801ff228c GIT binary patch literal 6213 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 s&m));?F&1uI4b1f$bzSfMKhD6Uv;Y7A literal 0 HcmV?d00001 diff --git a/src/skins/black/imgs/pws-product-shop-car.png b/src/skins/black/imgs/pws-product-shop-car.png new file mode 100644 index 0000000000000000000000000000000000000000..cbb64ea1f3f8cac9b972a4972d0075f7d2963b7e GIT binary patch literal 4200 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 literal 0 HcmV?d00001 diff --git a/src/skins/black/imgs/pws-qa-no-data-icon.png b/src/skins/black/imgs/pws-qa-no-data-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..8cf9581b90ed3db35e8d50a02908e74bc07e099f GIT binary patch literal 1144 zcmeAS@N?(olHy`uVBq!ia0vp^6(G#P3?%t>9eV(zSkfJR9T^xl_H+M9WCikX2l#}z z{vW0Q=)bi0strKOvn0qbSVGlWRDs*b!9qh=--%yOh{wiUR?NlBKt+Jd)mEENOG#SN zgW1kd%2-_9olQj0N=MPu&BRlgRoC8|gN0q)(aVR4myuJ>m*GQT=PCvUrq7-(jv*QM z-rjmXZIOWp!-JdqtoN==macw(i6wQ#tUdpQ-+D>9yLu|L6sHx}AA3;V;E;D{Z-eGh z)@I2w32eqQ4)UZKK$t&-4_phm?6~H_)|IWiv$-8q#MI<+{1_I_m=W=TNuZmRFNd)y zG4Vj~qz@v@*E|kMv8|chQpzJCz{_SV!7lgY*W;(BbnaZ$a_#zXJ-zz+b-9mI9ytEp zP~E?nar>3W|1POi{zw!pY51a@IU~5aKca~9u=4ujuQav!dDeY7?w^--^3b01ZD?zBB)J*WOR0EN|n|H|EpkB-g2Mo%ZIqdic+h zhjIT?+)EeV7UjFW?rx!9eOXp}%CgRbmCt9WzuGW;V|wP{O~08UrC$_WsQSPrKJDrS z*Yk`rd*r4VJZxY1JAe9#&6hjBDm+`7XTCSnu$f1nfwAJ*a(kO1rG&;G8!mplD^vB# zxR+ns_W!z4!%4Qfc6&Zvp65PCC%B*YyzO_p65rkI%{w+cwB4`Fc%gN#@H*)Rqc>?^ z#ZC#$)7evI^{K(?O-jW!Cs{d*zab8?*XDkGBwH(CvHtXGk%WczI#V3E3a+f>U^BL` z;S~rC4GC&En!A6x$b+SuKYz48sGk{|wRF~{2VTz#jXZX-vBjuxiW@$#^sMM(yzX(x zl;_5@lRG!{vQ*DLG|l0Zs7?pV@4KI5B&VNtHres&yL6b;$D3}c9D<3t-)A0{DK|^} z_&4KE_M_kZb2nDTC=2Y`-5|xj`>3Sm5{rjls?$Wg-yK|GV31Z;GPC{S!}{$jv(_#; zdB{ktrtV^i-@I1w1upaI*PWkJe3Gx-IPl?Z<~8$xd5Xc))z4*}Q$iB}fBbTC literal 0 HcmV?d00001 diff --git a/src/skins/black/imgs/pws-zan.png b/src/skins/black/imgs/pws-zan.png new file mode 100644 index 0000000000000000000000000000000000000000..1452c94d0d8967f552dfef74353a7fd6d4ed10fe GIT binary patch literal 2998 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 literal 0 HcmV?d00001 diff --git a/src/skins/blue/_blue-mobile.scss b/src/skins/blue/_blue-mobile.scss new file mode 100644 index 0000000..87c09f9 --- /dev/null +++ b/src/skins/blue/_blue-mobile.scss @@ -0,0 +1,4 @@ +@import '../_common/basic-mobile-style.scss'; +@import './config.scss'; + +@include generate-skin-basic-mobile-style($--skin-configs); diff --git a/src/skins/blue/_blue-pc.scss b/src/skins/blue/_blue-pc.scss new file mode 100644 index 0000000..8a13764 --- /dev/null +++ b/src/skins/blue/_blue-pc.scss @@ -0,0 +1,4 @@ +@import '../_common/basic-pc-style.scss'; +@import './config.scss'; + +@include generate-skin-basic-pc-style($--skin-configs); diff --git a/src/skins/blue/config-common.scss b/src/skins/blue/config-common.scss new file mode 100644 index 0000000..17451a9 --- /dev/null +++ b/src/skins/blue/config-common.scss @@ -0,0 +1,244 @@ +// 主题名称 +$--skin-type: 'blue'; + +// 主题色 +$--skin-primary-color: #1571d0; +// 次要主题色 +$--skin-sub-primary-color: #269eff; + +// 皮肤基础配置 +$--skin-basic-configs: ( + // 主题名称 + 'skin-type': $--skin-type, + + // 主题色 + 'primary-color': $--skin-primary-color, + // 次要主题色 + 'sub-primary-color': $--skin-sub-primary-color, + // #2c7fd5 + 'primary-light-1': get-opacity-color($--skin-primary-color, 1), + // #448dd9 + 'primary-light-2': get-opacity-color($--skin-primary-color, 2), + // #5b9cde + 'primary-light-3': get-opacity-color($--skin-primary-color, 3), + // #73aae3 + 'primary-light-4': get-opacity-color($--skin-primary-color, 4), + // #8ab8e8 + 'primary-light-5': get-opacity-color($--skin-primary-color, 5), + // #a1c6ec + 'primary-light-6': get-opacity-color($--skin-primary-color, 6), + // #b9d4f1 + 'primary-light-7': get-opacity-color($--skin-primary-color, 7), + // #d0e3f6 + 'primary-light-8': get-opacity-color($--skin-primary-color, 8), + // #e8f1fa + 'primary-light-9': get-opacity-color($--skin-primary-color, 9), + + // ---------- 背景色 ---------- // + // 主要背景色(以侧边栏主体背景色定义) + 'main-bg-color': #bfddff, + // 次要背景色(以侧边栏头部背景色定义) + 'sub-bg-color': #1571d0, + // 面板背景色 + 'panel-bg-color': #1362b4, + // 禁用背景色 + 'disabled-bg-color': #e9ecee, + + // ---------- 字体色 ---------- // + // 正文字体色 + 'main-text-color': #1b3673, + // 正文高亮字体色 + 'main-highlight-text-color': $--skin-primary-color, + // 描述字体色 + 'describe-text-color': rgba(#1b3673, 0.5), + // 禁用字体色 + 'disabled-text-color': #9e9e9e, + // 面板字体色 + 'panel-text-color': rgba($--color-white, 0.8), + // 面板高亮字体色 + 'panel-highlight-text-color': $--color-white, + + // ---------- 边框色 ---------- // + 'main-border-color': rgba(#1b3673, 0.1), + + // ---------- 滚动条 ---------- // + 'panel-scrollbar-color': rgba($--color-white, 0.1), +); + +// 皮肤基础组件配置 +$--skin-component-configs: ( + // 主要 tab 头部背景色 + 'main-tab-header:bg-color': map.get($--skin-basic-configs, 'sub-bg-color'), + // 主要 tab 头部字体色 + 'main-tab-header:text-color': $--color-white, + // 主要 tab 头部 hover 字体色 + 'main-tab-header--hover:text-color': $--color-white, + // 主要 tab 头部激活字体色 + 'main-tab-header--active:text-color': $--color-white, + // 主要 tab 头部激活选项线条背景色 + 'main-tab-header-line--active:bg-color': $--color-white, + // 主要 tab 头部阴影开始颜色 + 'main-tab-header-shadow-start:color': map.get($--skin-basic-configs, 'sub-bg-color'), + // 主要 tab 头部阴影结束颜色 + 'main-tab-header-shadow-end:color': rgba(62, 62, 78, 0), + // 主要 tab 头部红点颜色 + 'main-tab-header-reminder:color': #f24453, + // 主要 tab 主体背景色 + 'main-tab-body:bg-color': map.get($--skin-basic-configs, 'main-bg-color'), + // 主要 tab 主体滚动栏颜色 + 'main-tab-body:scrollbar-color': rgba(map.get($--skin-basic-configs, 'primary-color'), 0.2), + + // 常规 tab 激活项线条背景色 + 'normal-tab-header-line--active:bg-color': map.get($--skin-basic-configs, 'primary-color'), + + // 主题按钮背景色 + 'primary-button:bg-color': map.get($--skin-basic-configs, 'primary-color'), + // 主题按钮字体色 + 'primary-button:text-color': $--color-white, + // 主题按钮 hover 背景色 + 'primary-button--hover:bg-color': map.get($--skin-basic-configs, 'primary-light-2'), + // 主题按钮 hover 字体色 + 'primary-button--hover:text-color': $--color-white, + // 主题按钮 active 背景色 + 'primary-button--active:bg-color': map.get($--skin-basic-configs, 'primary-light-1'), + // 主题按钮 active 字体色 + 'primary-button--active:text-color': $--color-white, + // 主题按钮 disabled 背景色 + 'primary-button--disabled:bg-color': map.get($--skin-basic-configs, 'disabled-bg-color'), + // 主题按钮 disabled 字体色 + 'primary-button--disabled:text-color': map.get($--skin-basic-configs, 'disabled-text-color'), + + // 侧边栏按钮背景色 + 'aside-menu-button:bg-color': rgba($--color-white, 0.6), + // 侧边栏按钮字体则 + 'aside-menu-button:text-color': #333333, + // 侧边栏按钮 hover 背景色 + 'aside-menu-button--hover:bg-color': rgba($--color-white, 0.8), + // 侧边栏按钮 active 背景色 + 'aside-menu-button--active:bg-color': rgba($--color-white, 0.7), + + // pc 端直播状态标签颜色 + 'pc-live-status-tag:color': ( + 'unStart' rgba(#ffffff, .6), + 'waiting' #269eff, + 'live' #f06e6e, + 'end' rgba(#ffffff, .6), + 'playback' #269eff, + 'stop' #f06e6e, + ), + // mobile 端直播状态标签颜色 + 'mobile-live-status-tag:color': ( + 'unStart' rgba(#ffffff, .6), + 'waiting' #269eff, + 'live' #f06e6e, + 'end' rgba(#ffffff, .6), + 'playback' #269eff, + 'stop' #f06e6e, + ), +); + +// 皮肤公用页面配置 +$--skin-page-common-configs: ( + // 聊天消息昵称字体色 + 'chat-msg-user-nickname:text-color': map.get($--skin-basic-configs, 'main-text-color'), + // 聊天消息特殊身份昵称字体色 + 'chat-msg-user-special-nickname:text-color': #2d85e2, + // 聊天消息用户头衔背景色 + 'chat-msg-user-actor:bg-color': map.get($--skin-basic-configs, 'primary-color'), + // 聊天消息用户头衔字体色 + 'chat-msg-user-actor:text-color': #bfddff, + // 聊天消息用户设置昵称图标字体色 + 'chat-msg-user-set-nick-icon:text-color': #1362b4, + // 聊天消息时间字体色 + 'chat-msg-time:text-color': map.get($--skin-basic-configs, 'describe-text-color'), + // 聊天提示文案字体色 + 'chat-msg-list-tips:text-color': map.get($--skin-basic-configs, 'describe-text-color'), + + // 聊天消息气泡背景色 + 'chat-msg-bubble:bg-color': #dfeeff, + // 聊天消息气泡字体色 + 'chat-msg-bubble:text-color': map.get($--skin-basic-configs, 'main-text-color'), + // 聊天消息特殊身份气泡背景色 + 'chat-msg-bubble-special:bg-color': #4092e7, + // 聊天消息特殊身份气泡字体色 + 'chat-msg-bubble-special:text-color': $--color-white, + + // 聊天消息回复内容字体色 + 'chat-msg-quote-content:text-color': rgba(map.get($--skin-basic-configs, 'main-text-color'), 0.6), + // 聊天消息回复内容边框色 + 'chat-msg-quote-content:border-color': rgba(map.get($--skin-basic-configs, 'main-text-color'), 0.1), + // 聊天消息特殊身份回复内容字体色 + 'chat-msg-special-quote-content:text-color': rgba($--color-white, 0.8), + // 聊天消息特殊身份回复内容字体色 + 'chat-msg-special-quote-content:border-color': rgba($--color-white, 0.1), + // 聊天消息回复按钮字体色 + 'chat-msg-quote-button:text-color': map.get($--skin-basic-configs, 'main-text-color'), + // 聊天回复引用背景色 + 'chat-quote-msg:bg-color': #cbe3ff, + // 聊天回复引用字体色 + 'chat-quote-msg:text-color': map.get($--skin-basic-configs, 'main-text-color'), + + // 聊天消息翻译按钮字体色 + 'chat-msg-translate-button:text-color': rgba(map.get($--skin-basic-configs, 'main-text-color'), 0.5), + // 聊天消息翻译按钮 hover 字体色 + 'chat-msg-translate-button--hover:text-color': map.get($--skin-basic-configs, 'main-text-color'), + // 聊天消息翻译成功提示字体色 + 'chat-msg-translate-finish:text-color': rgba(map.get($--skin-basic-configs, 'main-text-color'), 0.5), + // 聊天消息特殊身份翻译成功提示字体色 + 'chat-msg-translate-finish-special:text-color': rgba($--color-white, 0.8), + + // 聊天室更多消息按钮背景色 + 'chat-msg-more-button:bg-color': #A9D2FF, + // 聊天室更多消息按钮字体色 + 'chat-msg-more-button:text-color': map.get($--skin-basic-configs, 'primary-color'), + // 聊天室更多消息按钮 hover 背景色 + 'chat-msg-more-button--hover:bg-color': #A9D2FF, + // 聊天室更多消息按钮 hover 字体色 + 'chat-msg-more-button--hover:text-color': map.get($--skin-basic-configs, 'primary-color'), + + // 打赏消息字体色 + 'chat-reward-msg:text-color': rgba(map.get($--skin-basic-configs, 'main-text-color'), 0.7), + // 自定义消息字体色 + 'chat-customer-msg:text-color': rgba(map.get($--skin-basic-configs, 'main-text-color'), 0.7), + // 红包领取消息背景色 + 'chat-redpaper-receive-msg:bg-color': #a9d2ff, + // 红包领取消息字体色 + 'chat-redpaper-receive-msg:text-color': map.get($--skin-basic-configs, 'main-text-color'), + // 系统消息字体色 + 'chat-system-msg:text-color': rgba(map.get($--skin-basic-configs, 'main-text-color'), 0.6), + + // 章节字体色 + 'chapter-item:text-color': rgba($--color-black, 0.35), + // 章节高亮字体色 + 'chapter-item--active:text-color': map.get($--skin-basic-configs, 'main-highlight-text-color'), + // 章节边框色 + 'chapter-item:border-color': rgba(map.get($--skin-basic-configs, 'main-text-color'), 0.1), + + // 成员列表字体色 + 'member-list-item:text-color': map.get($--skin-basic-configs, 'main-text-color'), + // 成员列表特殊身份字体色 + 'member-list-item-special:text-color': map.get($--skin-basic-configs, 'main-highlight-text-color'), + + // 点赞按钮背景图 + 'like-button:bg-image': './imgs/pws-zan.png', + // 点赞数量字体色 + 'like-count-number:text-color': rgba(map.get($--skin-basic-configs, 'main-text-color'), 0.7), + // 点赞数量背景色 + 'like-count-number:bg-color': rgba(map.get($--skin-basic-configs, 'main-bg-color'), 0.8), + + // 页面广告背景色 + 'page-advert:bg-color': map.get($--skin-basic-configs, 'main-bg-color'), + // 页面广告字体色 + 'page-advert:text-color': map.get($--skin-basic-configs, 'main-text-color'), + // 页面广告箭头字体色 + 'page-advert-arrow:text-color': map.get($--skin-basic-configs, 'main-text-color'), + + // 互动二次入口按钮背景色 + 'interactive-entrance-button:bg-color': rgba($--color-white, 0.4), + // 互动二次入口按钮 hover 背景色 + 'interactive-entrance-button--hover:bg-color': rgba($--color-white, 0.3), + // 互动二次入口按钮字体色 + 'interactive-entrance-button:text-color': map.get($--skin-basic-configs, 'main-text-color'), + // 互动二次入口箭头字体色 + 'interactive-entrance-arrow:text-color': rgba(map.get($--skin-basic-configs, 'main-text-color'), 0.4), +); diff --git a/src/skins/blue/config-iar.scss b/src/skins/blue/config-iar.scss new file mode 100644 index 0000000..50e5cc0 --- /dev/null +++ b/src/skins/blue/config-iar.scss @@ -0,0 +1,111 @@ +@import './config-common.scss'; +@import './config-pc.scss'; + +// 皮肤互动功能公用配置 +$--skin-iar-common-configs: ( + // 挂件字体色 + 'iar-pendant:text-color': rgba(map.get($--skin-basic-configs, 'main-text-color'), 0.7), + + // 商品库内容背景色 + 'iar-product-list-content:bg-color': #e5f1ff, + // 商品库图标图片 + 'iar-product-list-shop:icon-image': './imgs/pws-product-icon.png', + // 商品库图标图片(职位) + 'iar-product-list-recruitment:icon-image': './imgs/pws-product-icon-recruitment.png', + // 商品库标签背景色 + 'iar-product-list-label:bg-color': rgba(#333333, 0.1), + // 商品库标签字体色 + 'iar-product-list-label:text-color': #333333, + // 商品库商品名称序号背景色 + 'iar-product-list-name-number:bg-color': rgba($--color-black, 0.35), + // 商品库空状态图标图片 + 'iar-product-list-empty:icon-image': './imgs/pws-product-shop-car.png', + // 商品库商品下边框颜色 + 'iar-product-list-item:border-color': rgba(#666666, 0.1), + // 商品库商品名称字体色 + 'iar-product-list-good-name:text-color': map.get($--skin-basic-configs, 'main-text-color'), + + // 置顶公告背景色 + 'iar-bulletin-top-banner:bg-color': #dfeeff, + // 置顶公告字体色 + 'iar-bulletin-top-banner:text-color': #1b3673, + + // 问答背景色 + 'iar-qa-body:bg-color': map.get($--skin-component-configs, 'main-tab-body:bg-color'), + // 问答过滤层背景色 + 'iar-qa-filter:bg-color': map.get($--skin-component-configs, 'main-tab-body:bg-color'), + // 问答过滤层边框色 + 'iar-qa-filter:border-color': map.get($--skin-component-configs, 'main-tab-body:bg-color'), + // 问答过滤层文案字体色 + 'iar-qa-filter-desc:text-color': rgba(map.get($--skin-basic-configs, 'main-text-color'), 0.6), + // 问答选择字体色 + 'iar-qa-select:text-color': map.get($--skin-basic-configs, 'main-text-color'), + // 问答选择箭头边框色 + 'iar-qa-select:border-color': rgba(map.get($--skin-basic-configs, 'main-text-color'), 0.8), + // 问答节点背景色 + 'iar-qa-item:bg-color': #D2E7FF, + // 问答节点内容字体色 + 'iar-qa-item-content:text-color': map.get($--skin-basic-configs, 'main-text-color'), + // 问答节点信息字体色 + 'iar-qa-item-info:text-color': map.get($--skin-basic-configs, 'describe-text-color'), + // 问答节点更多字体色 + 'iar-qa-item-more:text-color': map.get($--skin-basic-configs, 'main-highlight-text-color'), + // 问答节点边框色 + 'iar-qa-item:border-color': #BFDDFF, + // 问答新消息按钮背景色 + 'iar-qa-new-msg-button:bg-color': rgba(169, 210, 255, 0.85) , + // 问答新消息按钮字体色 + 'iar-qa-new-msg-button:text-color': map.get($--skin-basic-configs, 'main-text-color'), + // 问答没有更多文案字体色 + 'iar-qa-no-more:text-color': map.get($--skin-basic-configs, 'describe-text-color'), +); + +// 皮肤互动功能 PC 配置 +$--skin-iar-pc-configs: ( + // 问答选择选项背景色 + 'iar-pc-qa-select-option:bg-color': map.get($--skin-component-configs, 'main-tab-header:bg-color'), + // 问答选择选项 hover 背景色 + 'iar-pc-qa-select-option--hover:bg-color': rgba($--color-white, 0.1), + // 问答选择选项字体色 + 'iar-pc-qa-select-option:text-color': rgba(map.get($--skin-component-configs, 'main-tab-header:text-color'), 0.8), + // 问答选择选项激活字体色 + 'iar-pc-qa-select-option--active:text-color': map.get($--skin-component-configs, 'main-tab-header:text-color'), + // 问答选择选项边框色 + 'iar-pc-qa-select-option:border-color': rgba($--color-white, 0.1), + // 问答表情选择图标 + 'iar-pc-qa-ask-emotion:text-color': map.get($--skin-basic-configs, 'main-text-color'), + 'iar-pc-qa-ask-emotion:background-filter': grayscale(0%) brightness(150%), + + // 中奖记录弹层文字颜色 + 'iar-pc-lottery-record-msg:text-color': #e4e4e4, +); + +// 皮肤互动功能 Mobile 配置 +$--skin-iar-mobile-configs: ( + // 问答空数据的图标图片 + 'iar-mobile-qa-no-data:icon-image': './imgs/pws-qa-no-data-icon.png', + // 问答消息发送入口图片 + 'iar-mobile-qa-ask-entry:icon-image': './imgs/pws-qa-entry.png', + // 问答输入框外层背景色 + 'iar-mobile-qa-input-wrap:bg-color': #1571D0, + // 问答输入框背景色 + 'iar-mobile-qa-input:bg-color': #D5E7FB, + // 问答输入框字体色 + 'iar-mobile-qa-input:text-color': map.get($--skin-basic-configs, 'main-text-color'), + // 问答表情选择图标字体色 + 'iar-mobile-qa-ask-emotion:text-color': $--color-white, + 'iar-mobile-qa-ask-emotion:background-filter': grayscale(100%) brightness(200%), + // 问答发送按钮字体色 + 'iar-mobile-qa-ask-send-button:text-color': $--color-white, + + // 图文直播头部字体色 + 'iar-mobile-tuwen-live-header:text-color': rgba(map.get($--skin-basic-configs, 'main-text-color'), 0.8), + // 图文直播名称字体色 + 'iar-mobile-tuwen-live-content-name:text-color': map.get($--skin-basic-configs, 'main-highlight-text-color'), + // 图文直播时间字体色 + 'iar-mobile-tuwen-live-content-time:text-color': map.get($--skin-basic-configs, 'describe-text-color'), + // 图文直播内容字体色 + 'iar-mobile-tuwen-live-content:text-color': map.get($--skin-basic-configs, 'main-text-color'), + // 图文直播暂无更多字体色 + 'iar-mobile-tuwen-live-no-more:text-color': map.get($--skin-basic-configs, 'describe-text-color'), +); diff --git a/src/skins/blue/config-mobile.scss b/src/skins/blue/config-mobile.scss new file mode 100644 index 0000000..42008db --- /dev/null +++ b/src/skins/blue/config-mobile.scss @@ -0,0 +1,154 @@ +@import './config-common.scss'; + +// 皮肤 Mobile 端页面配置 +$--skin-page-mobile-configs: ( + // 富文本字体色 + 'mobile-rich-text-content:text-color': map.get($--skin-basic-configs, 'main-text-color'), + + // 引导页背景色 + 'mobile-splash:bg-color': map.get($--skin-basic-configs, 'main-bg-color'), + // 引导页倒计时外层背景色 + 'mobile-splash-live-count-down-wrap:bg-color': map.get($--skin-basic-configs, 'sub-bg-color'), + + // 页脚字体色 + 'mobile-page-footer:text-color': rgba(map.get($--skin-basic-configs, 'main-text-color'), 0.6), + + // 基础信息频道标题字体色 + 'mobile-basic-info-channel-title:text-color': map.get($--skin-basic-configs, 'main-text-color'), + // 基础信息开始时间字体色 + 'mobile-basic-info-start-time:text-color': map.get($--skin-basic-configs, 'main-text-color'), + // 基础信息页面浏览次数字体色 + 'mobile-basic-info-page-view:text-color': map.get($--skin-basic-configs, 'main-text-color'), + // 基础信息主持人字体色 + 'mobile-basic-info-publisher:text-color': map.get($--skin-basic-configs, 'main-text-color'), + // 基础信息点赞数字体色 + 'mobile-basic-info-like:text-color': map.get($--skin-basic-configs, 'main-text-color'), + + // 倒计时方块背景色 + 'mobile-count-down-square-item:bg-color': #004285, + // 倒计时方块远点背景色 + 'mobile-count-down-square-item-dot:bg-color': #004285, + // 倒计时方块数字字体色 + 'mobile-count-down-square-item:text-color': $--color-white, + // 倒计时方块文案字体色 + 'mobile-count-down-square-item-word:text-color': rgba($--color-white, 0.7), + // 倒计时方块边框色 + 'mobile-count-down-square-item:border-color': #004A95, + + // 直播预约按钮背景色 + 'mobile-live-booking-button:bg-color': map.get($--skin-basic-configs, 'sub-primary-color'), + + // 关注按钮背景色 + 'mobile-follow-button:bg-color': map.get($--skin-basic-configs, 'sub-primary-color'), + // 关注按钮字体颜色 + 'mobile-follow-button:text-color': $--color-white, + + // 聊天消息输入框背景色 + 'mobile-msg-input:bg-color': rgba($--color-white, 0.6), + // 聊天消息输入框字体色 + 'mobile-msg-input:text-color': map.get($--skin-basic-configs, 'main-text-color'), + // 聊天消息输入框占位符字体色 + 'mobile-msg-input-placeholder:text-color': rgba(map.get($--skin-basic-configs, 'main-text-color'), 0.6), + // 聊天消息输入框滚动条颜色 + 'mobile-msg-input:scrollbar-color': rgba(21, 113, 208, 0.2), + // 聊天消息输入框图标字体色 + 'mobile-msg-input-suffix-icon:text-color': rgba(map.get($--skin-basic-configs, 'main-text-color'), 0.7), + + // 聊天消息发送按钮字体颜色 + 'mobile-msg-send-button:text-color': map.get($--skin-basic-configs, 'main-highlight-text-color'), + + // 表情选择面板背景色 + 'mobile-emotion-panel:bg-color': #1362B4, + // 表情选择面板下的发送按钮字体色 + 'mobile-emotion-panel-send-button:bg-color': $--color-white, + // 表情选择面板下的输入框背景色 + 'mobile-emotion-panel-msg-input:bg-color': rgba($--color-white, 0.1), + // 表情选择面板下的输入框字体色 + 'mobile-emotion-panel-msg-input:text-color': $--color-white, + // 表情选择面板下的输入框占位符字体色 + 'mobile-emotion-panel-msg-input-placeholder:text-color': rgba($--color-white, 0.6), + // 表情选择面板下的输入框图标字体色 + 'mobile-emotion-panel-msg-input-suffix-icon:text-color': rgba($--color-white, 0.7), + // 表情选择类型选择背景色 + 'mobile-emotion-panel-type:bg-color': rgba($--color-white, 0.1), + // 表情选择类型选择选中背景色 + 'mobile-emotion-panel-type--active:bg-color': rgba($--color-white, 0.2), + // 表情选择类型选择字体色 + 'mobile-emotion-panel-type:text-color': rgba($--color-white, 0.5), + // 表情选择类型选择选中字体色 + 'mobile-emotion-panel-type--active:text-color': $--color-white, + // 表情选择删除按钮背景色 + 'mobile-emotion-panel-del-button:bg-color': rgba($--color-white, 0.1), + // 表情选择删除按钮字体色 + 'mobile-emotion-panel-del-button:text-color': $--color-white, + + // 更多按钮背景色 + 'mobile-more-button:bg-color': rgba($--color-white, 0.6), + // 更多按钮图标图片 + 'mobile-more-button:icon-image': './imgs/pws-icon-more.png', + // 更多面板背景色 + 'mobile-more-panel:bg-color': #1362B4, + // 更多面板字体色 + 'mobile-more-panel:text-color': $--color-white, + + // 打赏按钮背景色 + 'mobile-donate-button:bg-color': rgba($--color-white, 0.6), + // 打赏面板背景色 + 'mobile-donate-panel:bg-color': #1362B4, + // 打赏面板标题字体色 + 'mobile-donate-panel-header-title:text-color': $--color-white, + // 打赏面板返回字体色 + 'mobile-donate-panel-header-close:text-color': $--color-white, + // 打赏礼物选中背景色 + 'mobile-donate-good--active:bg-color': #1571D0, + // 打赏礼物选中边框色 + 'mobile-donate-good--active:border-color': rgba($--color-white, 0.6), + // 打赏礼物道具名称字体色 + 'mobile-donate-good-name:text-color': $--color-white, + // 打赏礼物道具价格字体色 + 'mobile-donate-good-price:text-color': rgba($--color-white, 0.5), + // 打赏切换指示点颜色 + 'mobile-donate-indicator:bg-color': rgba(map.get($--skin-basic-configs, 'main-text-color'), 0.6), + // 打赏切换指示点选中颜色 + 'mobile-donate-indicator--active:bg-color': #127EF0, + // 打赏面板选项背景色 + 'mobile-donate-panel-option:bg-color': #1571D0, + // 打赏面板选项字体色 + 'mobile-donate-panel-option:text-color': $--color-white, + // 打赏面板选项选中背景色 + 'mobile-donate-panel-option--active:bg-color': #1571D0, + // 打赏面板选项选中字体色 + 'mobile-donate-panel-option--active:text-color': $--color-white, + // 打赏面板选项选中边框色 + 'mobile-donate-panel-option--active:border-color': rgba($--color-white, 0.6), + // 打赏面板发送按钮背景色 + 'mobile-donate-panel-send-button:bg-color': #269EFF, + // 打赏面板发送按钮字体色 + 'mobile-donate-panel-send-button:text-color': $--color-white, + // 打赏面板剩余积分文本字体色 + 'mobile-donate-panel-point:text-color': $--color-white, + // 打赏面板剩余积分数值字体色 + 'mobile-donate-panel-point-count:text-color': $--color-white, + // 打赏自定义金额字体色 + 'mobile-donate-panel-custom-cash:text-color': rgba($--color-white, 0.7), + // 打赏自定义金额输入框背景色 + 'mobile-donate-custom-cash-input:bg-color': rgba($--color-white, 0.1), + // 打赏自定义金额输入框标题字体色 + 'mobile-donate-custom-cash-input-title:text-color': rgba($--color-white, 0.7), + // 打赏自定义金额输入框字体色 + 'mobile-donate-custom-cash-input:text-color': $--color-white, + // 打赏自定义金额随机按钮字体色 + 'mobile-donate-custom-cash-random:text-color': $--color-white, + + // 回放列表播放中按钮背景色 + 'mobile-playback-list-playing:bg-color': map.get($--skin-basic-configs, 'primary-color'), + // 回放列表字体色 + 'mobile-playback-list:text-color': map.get($--skin-basic-configs, 'main-text-color'), + // 回放列表选中时的字体色 + 'mobile-playback-list--active:text-color': map.get($--skin-basic-configs, 'main-highlight-text-color'), + + // 多会场背景色 + 'mobile-multi-meeting:bg-color': #1362B4, + // 多会场字体色 + 'mobile-multi-meeting:text-color': $--color-white, +); diff --git a/src/skins/blue/config-pc.scss b/src/skins/blue/config-pc.scss new file mode 100644 index 0000000..3e460bf --- /dev/null +++ b/src/skins/blue/config-pc.scss @@ -0,0 +1,110 @@ +@import './config-common.scss'; + +// 皮肤 PC 端页面配置 +$--skin-page-pc-configs: ( + // 观看页背景类型 + 'pc-watch-page:bg-type': 'image', + // 观看页背景颜色 + 'pc-watch-page:bg-color': '', + // 观看页背景图 + 'pc-watch-page:bg-image': './imgs/pws-pc-watch-bg.png', + + // 副屏收起字体颜色 + 'pc-sub-pack-up:text-color': map.get($--skin-basic-configs, 'main-text-color'), + + // 倒计时方块背景色 + 'pc-count-down-square-item:bg-color': #141518, + // 倒计时方块远点背景色 + 'pc-count-down-square-item-dot:bg-color': #141518, + // 倒计时方块数字字体色 + 'pc-count-down-square-item:text-color': $--color-white, + // 倒计时方块文案字体色 + 'pc-count-down-square-item-word:text-color': map.get($--skin-basic-configs, 'main-text-color'), + // 倒计时方块边框色 + 'pc-count-down-square-item:border-color': $--color-black, + + // 聊天消息底部输入框背景色 + 'pc-msg-bottom-input-wrap:bg-color': map.get($--skin-basic-configs, 'sub-bg-color'), + // 聊天消息底部输入框节点字体色 + 'pc-msg-bottom-input-wrap-item:text-color': $--color-white, + // 聊天消息底部输入框节点 hover 字体色 + 'pc-msg-bottom-input-wrap-item--hover:text-color': #bfddff, + + // 聊天消息输入框背景色 + 'pc-msg-input:bg-color': map.get($--skin-basic-configs, 'main-bg-color'), + // 聊天消息输入框字体色 + 'pc-msg-input:text-color': map.get($--skin-basic-configs, 'main-text-color'), + // 聊天消息输入框占位符字体色 + 'pc-msg-input-placeholder:text-color': rgba(map.get($--skin-basic-configs, 'main-text-color'), 0.6), + // 聊天消息输入框滚动条颜色 + 'pc-msg-input:scrollbar-color': rgba(21, 113, 208, 0.2), + + // 聊天消息发送按钮背景色 + 'pc-msg-send-button:bg-color': map.get($--skin-basic-configs, 'sub-primary-color'), + // 聊天消息发送按钮禁用状态下的背景色 + 'pc-msg-send-button--disabled:bg-color': map.get($--skin-basic-configs, 'sub-primary-color'), + // 聊天消息发送按钮字体颜色 + 'pc-msg-send-button:text-color': $--color-white, + // 聊天消息发送按钮禁用状态下的字体颜色 + 'pc-msg-send-button--disabled:text-color': rgba($--color-white, 0.5), + + // 图片达到最大数量后的提示框背景色 + 'pws-pc-msg-input-popper__max-image-tips:bg-color': map.get($--skin-basic-configs, 'sub-primary-color'), + // 图片达到最大数量后的提示框字体色 + 'pws-pc-msg-input-popper__max-image-tips:text-color': $--color-white, + + // 聊天输入框设置昵称占位背景色 + 'pc-set-nick-placeholder:bg-color': map.get($--skin-basic-configs, 'sub-primary-color'), + // 聊天输入框设置昵称占位字体色 + 'pc-set-nick-placeholder:text-color': $--color-white, + // 聊天输入框设置昵称占位高亮字体色 + 'pc-set-nick-placeholder-highlight:text-color': map.get($--skin-basic-configs, 'primary-color'), + + // 表情选择面板背景色 + 'pc-emotion-panel:bg-color': map.get($--skin-basic-configs, 'panel-bg-color'), + // 表情选择面板类型选择背景色 + 'pc-emotion-panel-select:bg-color': map.get($--skin-basic-configs, 'sub-bg-color'), + + // 更多面板背景色 + 'pc-more-panel:bg-color': map.get($--skin-basic-configs, 'panel-bg-color'), + // 更多面板字体色 + 'pc-more-panel:text-color': map.get($--skin-basic-configs, 'panel-text-color'), + // 更多面板字体高亮色 + 'pc-more-panel-text--hover:text-color': map.get($--skin-basic-configs, 'panel-highlight-text-color'), + // 更多面板选中框背景色 + 'pc-more-panel-checkbox--checked:bg-color': $--color-white, + // 更多面板选中框图标色 + 'pc-more-panel-checkbox-icon--checked:text-color': map.get($--skin-basic-configs, 'panel-bg-color'), + + // 打赏面板背景色 + 'pc-donate-panel:bg-color': map.get($--skin-basic-configs, 'panel-bg-color'), + // 打赏礼物 hover 背景色 + 'pc-donate-good--hover:bg-color': rgba($--color-white, 0.1), + // 打赏礼物 hover 边框色 + 'pc-donate-good--hover:border-color': rgba($--color-white, 0.4), + // 打赏礼物道具名称字体色 + 'pc-donate-good-name:text-color': map.get($--skin-basic-configs, 'panel-text-color'), + // 打赏礼物道具价格字体色 + 'pc-donate-good-price:text-color': rgba($--color-white, 0.5), + + // 中奖记录面板背景色 + 'pc-lottery-record-panel:bg-color': map.get($--skin-basic-configs, 'panel-bg-color'), + // 中奖记录面板关闭图标字体色 + 'pc-lottery-record-close:text-color': map.get($--skin-basic-configs, 'panel-text-color'), + + // 连麦描述图标字体色 + 'pc-connect-mic-desc-icon:text-color': map.get($--skin-basic-configs, 'describe-text-color'), + // 连麦描述文案字体色 + 'pc-connect-mic-desc:text-color': map.get($--skin-basic-configs, 'describe-text-color'), + // 连麦按钮背景色 + 'pc-connect-mic-button:bg-color': map.get($--skin-basic-configs, 'sub-bg-color'), + // 连麦按钮字体色 + 'pc-connect-mic-button:text-color': $--color-white, + // 连麦按钮高亮字体色 + 'pc-connect-mic-button-highlight:text-color': #ff5b5b, + // 连麦中图标背景图 + 'pc-connect-mic-applying:icon-image': './imgs/pws-pc-connect-mic.gif', + + // 回放列表播放中按钮背景色 + 'pc-playback-list-playing:bg-color': map.get($--skin-basic-configs, 'primary-color'), +); diff --git a/src/skins/blue/config.scss b/src/skins/blue/config.scss new file mode 100644 index 0000000..c2135df --- /dev/null +++ b/src/skins/blue/config.scss @@ -0,0 +1,7 @@ +@import '../_common/functions.scss'; +@import './config-common.scss'; +@import './config-pc.scss'; +@import './config-mobile.scss'; +@import './config-iar.scss'; + +$--skin-configs: generate-skin-setup-configs(); diff --git a/src/skins/blue/imgs/pws-icon-more.png b/src/skins/blue/imgs/pws-icon-more.png new file mode 100644 index 0000000000000000000000000000000000000000..0233f9635c6494aaa9fb152a993b3695267b564f GIT binary patch literal 283 zcmeAS@N?(olHy`uVBq!ia0vp^8X(NV3?%C=ER6$FEa{HEjtmSN`?>!lvI6-k0X`wF zhK7d5#>PfQMrLMa1_lN|HUt30fr2I`CP0Pk^Zp+NQamL=e!=Cds)VDKt*(`7*u)TY zF?0`5yvx(YF+}71-U+LD8yI+4Jtdl04J>TpdoXxgwZ3*P$l1Tfy&ZF zedi}He;3P;elU5*GZ&Hc1J?|SO*njB#&CS8Stk;~F{i=rfs%os1=H38kqWWQKW^>6 z5L)!~?(Fgj-x98Va7z)-Du|BrT{Foly0SJsKZ{-ZiTMkyouA(M^8U;GDf{q(L`|+n S;A)_&7(8A5T-G@yGywqf7GKB! literal 0 HcmV?d00001 diff --git a/src/skins/blue/imgs/pws-pc-connect-mic.gif b/src/skins/blue/imgs/pws-pc-connect-mic.gif new file mode 100644 index 0000000000000000000000000000000000000000..34a5ce6d1b13a0db1621ce12606c72f417b0cc90 GIT binary patch literal 20756 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 literal 0 HcmV?d00001 diff --git a/src/skins/blue/imgs/pws-pc-watch-bg.png b/src/skins/blue/imgs/pws-pc-watch-bg.png new file mode 100644 index 0000000000000000000000000000000000000000..290b12cd91b578039ffedb6d0cf5d7bf00527f94 GIT binary patch literal 198641 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

)ox0uxoP2?Ec4t?>6Lf^MCUTB+Eb7AN@!E%@q>z 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 literal 0 HcmV?d00001 diff --git a/src/skins/blue/imgs/pws-product-icon-recruitment.png b/src/skins/blue/imgs/pws-product-icon-recruitment.png new file mode 100644 index 0000000000000000000000000000000000000000..36b4f6982dadea3018913e370ae05b39fba482a0 GIT binary patch literal 7740 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 literal 0 HcmV?d00001 diff --git a/src/skins/blue/imgs/pws-product-shop-car.png b/src/skins/blue/imgs/pws-product-shop-car.png new file mode 100644 index 0000000000000000000000000000000000000000..55e4c53664b9b4eeec88398a9a40b3a5964bc248 GIT binary patch literal 4458 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 literal 0 HcmV?d00001 diff --git a/src/skins/blue/imgs/pws-qa-entry.png b/src/skins/blue/imgs/pws-qa-entry.png new file mode 100644 index 0000000000000000000000000000000000000000..933e25877fdd5a051444673837780da38f0b4dfd GIT binary patch literal 2671 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 literal 0 HcmV?d00001 diff --git a/src/skins/blue/imgs/pws-qa-no-data-icon.png b/src/skins/blue/imgs/pws-qa-no-data-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..772d92d4cf35a99dd79ffaac0abfb958d0ad2a99 GIT binary patch literal 1143 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 literal 0 HcmV?d00001 diff --git a/src/skins/golden/_golden-mobile.scss b/src/skins/golden/_golden-mobile.scss new file mode 100644 index 0000000..87c09f9 --- /dev/null +++ b/src/skins/golden/_golden-mobile.scss @@ -0,0 +1,4 @@ +@import '../_common/basic-mobile-style.scss'; +@import './config.scss'; + +@include generate-skin-basic-mobile-style($--skin-configs); diff --git a/src/skins/golden/_golden-pc.scss b/src/skins/golden/_golden-pc.scss new file mode 100644 index 0000000..8a13764 --- /dev/null +++ b/src/skins/golden/_golden-pc.scss @@ -0,0 +1,4 @@ +@import '../_common/basic-pc-style.scss'; +@import './config.scss'; + +@include generate-skin-basic-pc-style($--skin-configs); diff --git a/src/skins/golden/config-common.scss b/src/skins/golden/config-common.scss new file mode 100644 index 0000000..4b89b84 --- /dev/null +++ b/src/skins/golden/config-common.scss @@ -0,0 +1,244 @@ +// 主题名称 +$--skin-type: 'golden'; + +// 主题色 +$--skin-primary-color: #CEAE67; +// 次要主题色 +$--skin-sub-primary-color: #FFE4A5; + +// 皮肤基础配置 +$--skin-basic-configs: ( + // 主题名称 + 'skin-type': $--skin-type, + + // 主题色 + 'primary-color': $--skin-primary-color, + // 次要主题色 + 'sub-primary-color': $--skin-sub-primary-color, + // #d3b676 + 'primary-light-1': get-opacity-color($--skin-primary-color, 1), + // #d8be85 + 'primary-light-2': get-opacity-color($--skin-primary-color, 2), + // #ddc695 + 'primary-light-3': get-opacity-color($--skin-primary-color, 3), + // #e2cea4 + 'primary-light-4': get-opacity-color($--skin-primary-color, 4), + // #e7d7b3 + 'primary-light-5': get-opacity-color($--skin-primary-color, 5), + // #ebdfc2 + 'primary-light-6': get-opacity-color($--skin-primary-color, 6), + // #f0e7d1 + 'primary-light-7': get-opacity-color($--skin-primary-color, 7), + // #f5efe1 + 'primary-light-8': get-opacity-color($--skin-primary-color, 8), + // #faf7f0 + 'primary-light-9': get-opacity-color($--skin-primary-color, 9), + + // ---------- 背景色 ---------- // + // 主要背景色(以侧边栏主体背景色定义) + 'main-bg-color': #F4F4F4, + // 次要背景色(以侧边栏头部背景色定义) + 'sub-bg-color': $--color-white, + // 面板背景色 + 'panel-bg-color': #ededed, + // 禁用背景色 + 'disabled-bg-color': #e9ecee, + + // ---------- 字体色 ---------- // + // 正文字体色 + 'main-text-color': #666666, + // 正文高亮字体色 + 'main-highlight-text-color': #C89A2C, + // 描述字体色 + 'describe-text-color': rgba(#666666, 0.6), + // 禁用字体色 + 'disabled-text-color': #9e9e9e, + // 面板字体色 + 'panel-text-color': #666666, + // 面板高亮字体色 + 'panel-highlight-text-color': $--skin-primary-color, + + // ---------- 边框色 ---------- // + 'main-border-color': rgba(#666666, 0.1), + + // ---------- 滚动条 ---------- // + 'panel-scrollbar-color': rgba(#666666, 0.2), +); + +// 皮肤基础组件配置 +$--skin-component-configs: ( + // 主要 tab 头部背景色 + 'main-tab-header:bg-color': map.get($--skin-basic-configs, 'sub-bg-color'), + // 主要 tab 头部字体色 + 'main-tab-header:text-color': #666666, + // 主要 tab 头部 hover 字体色 + 'main-tab-header--hover:text-color': #666666, + // 主要 tab 头部激活字体色 + 'main-tab-header--active:text-color': #666666, + // 主要 tab 头部激活选项线条背景色 + 'main-tab-header-line--active:bg-color': map.get($--skin-basic-configs, 'primary-color'), + // 主要 tab 头部阴影开始颜色 + 'main-tab-header-shadow-start:color': map.get($--skin-basic-configs, 'sub-bg-color'), + // 主要 tab 头部阴影结束颜色 + 'main-tab-header-shadow-end:color': rgba(62, 62, 78, 0), + // 主要 tab 头部红点颜色 + 'main-tab-header-reminder:color': #f24453, + // 主要 tab 主体背景色 + 'main-tab-body:bg-color': map.get($--skin-basic-configs, 'main-bg-color'), + // 主要 tab 主体滚动栏颜色 + 'main-tab-body:scrollbar-color': rgba(#666666, 0.2), + + // 常规 tab 激活项线条背景色 + 'normal-tab-header-line--active:bg-color': map.get($--skin-basic-configs, 'primary-color'), + + // 主题按钮背景色 + 'primary-button:bg-color': map.get($--skin-basic-configs, 'primary-color'), + // 主题按钮字体色 + 'primary-button:text-color': $--color-white, + // 主题按钮 hover 背景色 + 'primary-button--hover:bg-color': map.get($--skin-basic-configs, 'primary-light-2'), + // 主题按钮 hover 字体色 + 'primary-button--hover:text-color': $--color-white, + // 主题按钮 active 背景色 + 'primary-button--active:bg-color': map.get($--skin-basic-configs, 'primary-light-1'), + // 主题按钮 active 字体色 + 'primary-button--active:text-color': $--color-white, + // 主题按钮 disabled 背景色 + 'primary-button--disabled:bg-color': map.get($--skin-basic-configs, 'disabled-bg-color'), + // 主题按钮 disabled 字体色 + 'primary-button--disabled:text-color': map.get($--skin-basic-configs, 'disabled-text-color'), + + // 侧边栏按钮背景色 + 'aside-menu-button:bg-color': rgba($--color-white, 0.6), + // 侧边栏按钮字体则 + 'aside-menu-button:text-color': #333333, + // 侧边栏按钮 hover 背景色 + 'aside-menu-button--hover:bg-color': rgba($--color-white, 0.8), + // 侧边栏按钮 active 背景色 + 'aside-menu-button--active:bg-color': rgba($--color-white, 0.7), + + // pc 端直播状态标签颜色 + 'pc-live-status-tag:color': ( + 'unStart' rgba(#ffffff, .6), + 'waiting' #78A7ED, + 'live' #f06e6e, + 'end' rgba(#ffffff, .6), + 'playback' #78A7ED, + 'stop' #f06e6e, + ), + // mobile 端直播状态标签颜色 + 'mobile-live-status-tag:color': ( + 'unStart' rgba(#ffffff, .6), + 'waiting' #78A7ED, + 'live' #f06e6e, + 'end' rgba(#ffffff, .6), + 'playback' #78A7ED, + 'stop' #f06e6e, + ), +); + +// 皮肤公用页面配置 +$--skin-page-common-configs: ( + // 聊天消息昵称字体色 + 'chat-msg-user-nickname:text-color': map.get($--skin-basic-configs, 'main-text-color'), + // 聊天消息特殊身份昵称字体色 + 'chat-msg-user-special-nickname:text-color': map.get($--skin-basic-configs, 'main-highlight-text-color'), + // 聊天消息用户头衔背景色 + 'chat-msg-user-actor:bg-color': map.get($--skin-basic-configs, 'primary-color'), + // 聊天消息用户头衔字体色 + 'chat-msg-user-actor:text-color': $--color-white, + // 聊天消息用户设置昵称图标字体色 + 'chat-msg-user-set-nick-icon:text-color': map.get($--skin-basic-configs, 'main-text-color'), + // 聊天消息时间字体色 + 'chat-msg-time:text-color': map.get($--skin-basic-configs, 'describe-text-color'), + // 聊天提示文案字体色 + 'chat-msg-list-tips:text-color': map.get($--skin-basic-configs, 'describe-text-color'), + + // 聊天消息气泡背景色 + 'chat-msg-bubble:bg-color': $--color-white, + // 聊天消息气泡字体色 + 'chat-msg-bubble:text-color': map.get($--skin-basic-configs, 'main-text-color'), + // 聊天消息特殊身份气泡背景色 + 'chat-msg-bubble-special:bg-color': map.get($--skin-basic-configs, 'sub-primary-color'), + // 聊天消息特殊身份气泡字体色 + 'chat-msg-bubble-special:text-color': #6C4A4A, + + // 聊天消息回复内容字体色 + 'chat-msg-quote-content:text-color': rgba(map.get($--skin-basic-configs, 'main-text-color'), 0.6), + // 聊天消息回复内容边框色 + 'chat-msg-quote-content:border-color': rgba(map.get($--skin-basic-configs, 'main-text-color'), 0.1), + // 聊天消息特殊身份回复内容字体色 + 'chat-msg-special-quote-content:text-color': rgba(#6C4A4A, 0.8), + // 聊天消息特殊身份回复内容字体色 + 'chat-msg-special-quote-content:border-color': rgba(#6C4A4A, 0.1), + // 聊天消息回复按钮字体色 + 'chat-msg-quote-button:text-color': map.get($--skin-basic-configs, 'main-text-color'), + // 聊天回复引用背景色 + 'chat-quote-msg:bg-color': #FAFAFA, + // 聊天回复引用字体色 + 'chat-quote-msg:text-color': map.get($--skin-basic-configs, 'main-text-color'), + + // 聊天消息翻译按钮字体色 + 'chat-msg-translate-button:text-color': rgba(map.get($--skin-basic-configs, 'main-text-color'), 0.5), + // 聊天消息翻译按钮 hover 字体色 + 'chat-msg-translate-button--hover:text-color': map.get($--skin-basic-configs, 'main-highlight-text-color'), + // 聊天消息翻译成功提示字体色 + 'chat-msg-translate-finish:text-color': rgba(map.get($--skin-basic-configs, 'main-text-color'), 0.5), + // 聊天消息特殊身份翻译成功提示字体色 + 'chat-msg-translate-finish-special:text-color': rgba($--color-white, 0.8), + + // 聊天室更多消息按钮背景色 + 'chat-msg-more-button:bg-color': map.get($--skin-basic-configs, 'primary-color'), + // 聊天室更多消息按钮字体色 + 'chat-msg-more-button:text-color': #ffffff, + // 聊天室更多消息按钮 hover 背景色 + 'chat-msg-more-button--hover:bg-color': map.get($--skin-basic-configs, 'primary-color'), + // 聊天室更多消息按钮 hover 字体色 + 'chat-msg-more-button--hover:text-color': #ffffff, + + // 打赏消息字体色 + 'chat-reward-msg:text-color': rgba(map.get($--skin-basic-configs, 'main-text-color'), 0.7), + // 自定义消息字体色 + 'chat-customer-msg:text-color': rgba(map.get($--skin-basic-configs, 'main-text-color'), 0.7), + // 红包领取消息背景色 + 'chat-redpaper-receive-msg:bg-color': #a9d2ff, + // 红包领取消息字体色 + 'chat-redpaper-receive-msg:text-color': map.get($--skin-basic-configs, 'main-text-color'), + // 系统消息字体色 + 'chat-system-msg:text-color': rgba(map.get($--skin-basic-configs, 'main-text-color'), 0.6), + + // 章节字体色 + 'chapter-item:text-color': map.get($--skin-basic-configs, 'main-text-color'), + // 章节高亮字体色 + 'chapter-item--active:text-color': map.get($--skin-basic-configs, 'main-highlight-text-color'), + // 章节边框色 + 'chapter-item:border-color': rgba(map.get($--skin-basic-configs, 'main-text-color'), 0.1), + + // 成员列表字体色 + 'member-list-item:text-color': map.get($--skin-basic-configs, 'main-text-color'), + // 成员列表特殊身份字体色 + 'member-list-item-special:text-color': map.get($--skin-basic-configs, 'main-highlight-text-color'), + + // 点赞按钮背景图 + 'like-button:bg-image': './imgs/pws-zan.png', + // 点赞数量字体色 + 'like-count-number:text-color': rgba(map.get($--skin-basic-configs, 'main-text-color'), 0.7), + // 点赞数量背景色 + 'like-count-number:bg-color': rgba(map.get($--skin-basic-configs, 'main-bg-color'), 0.8), + + // 页面广告背景色 + 'page-advert:bg-color': map.get($--skin-basic-configs, 'main-bg-color'), + // 页面广告字体色 + 'page-advert:text-color': map.get($--skin-basic-configs, 'main-text-color'), + // 页面广告箭头字体色 + 'page-advert-arrow:text-color': map.get($--skin-basic-configs, 'main-text-color'), + + // 互动二次入口按钮背景色 + 'interactive-entrance-button:bg-color': rgba($--color-white, 0.9), + // 互动二次入口按钮 hover 背景色 + 'interactive-entrance-button--hover:bg-color': rgba($--color-white, 0.8), + // 互动二次入口按钮字体色 + 'interactive-entrance-button:text-color': map.get($--skin-basic-configs, 'main-text-color'), + // 互动二次入口箭头字体色 + 'interactive-entrance-arrow:text-color': rgba(map.get($--skin-basic-configs, 'main-text-color'), 0.4), +); diff --git a/src/skins/golden/config-iar.scss b/src/skins/golden/config-iar.scss new file mode 100644 index 0000000..8df4bb8 --- /dev/null +++ b/src/skins/golden/config-iar.scss @@ -0,0 +1,111 @@ +@import './config-common.scss'; +@import './config-pc.scss'; + +// 皮肤互动功能公用配置 +$--skin-iar-common-configs: ( + // 挂件字体色 + 'iar-pendant:text-color': rgba(map.get($--skin-basic-configs, 'main-text-color'), 0.7), + + // 商品库内容背景色 + 'iar-product-list-content:bg-color': #fefefe, + // 商品库图标图片 + 'iar-product-list-shop:icon-image': './imgs/pws-product-icon.png', + // 商品库图标图片(职位) + 'iar-product-list-recruitment:icon-image': './imgs/pws-product-icon-recruitment.png', + // 商品库标签背景色 + 'iar-product-list-label:bg-color': rgba(#333333, 0.1), + // 商品库标签字体色 + 'iar-product-list-label:text-color': #333333, + // 商品库商品名称序号背景色 + 'iar-product-list-name-number:bg-color': rgba($--color-black, 0.35), + // 商品库空状态图标图片 + 'iar-product-list-empty:icon-image': './imgs/pws-product-shop-car.png', + // 商品库商品下边框颜色 + 'iar-product-list-item:border-color': rgba(#666666, 0.1), + // 商品库商品名称字体色 + 'iar-product-list-good-name:text-color': map.get($--skin-basic-configs, 'main-text-color'), + + // 置顶公告背景色 + 'iar-bulletin-top-banner:bg-color': #FFFAEE, + // 置顶公告字体色 + 'iar-bulletin-top-banner:text-color': map.get($--skin-basic-configs, 'main-text-color'), + + // 问答背景色 + 'iar-qa-body:bg-color': map.get($--skin-component-configs, 'main-tab-body:bg-color'), + // 问答过滤层背景色 + 'iar-qa-filter:bg-color': map.get($--skin-component-configs, 'main-tab-body:bg-color'), + // 问答过滤层边框色 + 'iar-qa-filter:border-color': map.get($--skin-component-configs, 'main-tab-body:bg-color'), + // 问答过滤层文案字体色 + 'iar-qa-filter-desc:text-color': rgba(map.get($--skin-basic-configs, 'main-text-color'), 0.6), + // 问答选择字体色 + 'iar-qa-select:text-color': map.get($--skin-basic-configs, 'main-text-color'), + // 问答选择箭头边框色 + 'iar-qa-select:border-color': rgba(map.get($--skin-basic-configs, 'main-text-color'), 0.8), + // 问答节点背景色 + 'iar-qa-item:bg-color': $--color-white, + // 问答节点内容字体色 + 'iar-qa-item-content:text-color': map.get($--skin-basic-configs, 'main-text-color'), + // 问答节点信息字体色 + 'iar-qa-item-info:text-color': map.get($--skin-basic-configs, 'describe-text-color'), + // 问答节点更多字体色 + 'iar-qa-item-more:text-color': map.get($--skin-basic-configs, 'main-highlight-text-color'), + // 问答节点边框色 + 'iar-qa-item:border-color': #f4f4f4, + // 问答新消息按钮背景色 + 'iar-qa-new-msg-button:bg-color': rgba(map.get($--skin-basic-configs, 'primary-color'), 0.85) , + // 问答新消息按钮字体色 + 'iar-qa-new-msg-button:text-color': $--color-white, + // 问答没有更多文案字体色 + 'iar-qa-no-more:text-color': map.get($--skin-basic-configs, 'describe-text-color'), +); + +// 皮肤互动功能 PC 配置 +$--skin-iar-pc-configs: ( + // 问答选择选项背景色 + 'iar-pc-qa-select-option:bg-color': map.get($--skin-component-configs, 'main-tab-header:bg-color'), + // 问答选择选项 hover 背景色 + 'iar-pc-qa-select-option--hover:bg-color': rgba($--color-white, 0.1), + // 问答选择选项字体色 + 'iar-pc-qa-select-option:text-color': rgba(map.get($--skin-component-configs, 'main-tab-header:text-color'), 0.8), + // 问答选择选项激活字体色 + 'iar-pc-qa-select-option--active:text-color': map.get($--skin-component-configs, 'main-tab-header:text-color'), + // 问答选择选项边框色 + 'iar-pc-qa-select-option:border-color': rgba($--color-white, 0.1), + // 问答表情选择图标 + 'iar-pc-qa-ask-emotion:text-color': map.get($--skin-basic-configs, 'main-text-color'), + 'iar-pc-qa-ask-emotion:background-filter': none, + + // 中奖记录弹层文字颜色 + 'iar-pc-lottery-record-msg:text-color': #666, +); + +// 皮肤互动功能 Mobile 配置 +$--skin-iar-mobile-configs: ( + // 问答空数据的图标图片 + 'iar-mobile-qa-no-data:icon-image': './imgs/pws-qa-no-data-icon.png', + // 问答消息发送入口图片 + 'iar-mobile-qa-ask-entry:icon-image': './imgs/pws-qa-entry.png', + // 问答输入框外层背景色 + 'iar-mobile-qa-input-wrap:bg-color': map.get($--skin-component-configs, 'main-tab-header:bg-color'), + // 问答输入框背景色 + 'iar-mobile-qa-input:bg-color': rgba($--color-black, 0.05), + // 问答输入框字体色 + 'iar-mobile-qa-input:text-color': map.get($--skin-basic-configs, 'main-text-color'), + // 问答表情选择图标字体色 + 'iar-mobile-qa-ask-emotion:text-color': map.get($--skin-basic-configs, 'main-text-color'), + 'iar-mobile-qa-ask-emotion:background-filter': none, + // 问答发送按钮字体色 + 'iar-mobile-qa-ask-send-button:text-color': map.get($--skin-basic-configs, 'main-text-color'), + + // 图文直播头部字体色 + 'iar-mobile-tuwen-live-header:text-color': rgba(map.get($--skin-basic-configs, 'main-text-color'), 0.8), + // 图文直播名称字体色 + 'iar-mobile-tuwen-live-content-name:text-color': map.get($--skin-basic-configs, 'main-highlight-text-color'), + // 图文直播时间字体色 + 'iar-mobile-tuwen-live-content-time:text-color': map.get($--skin-basic-configs, 'describe-text-color'), + // 图文直播内容字体色 + 'iar-mobile-tuwen-live-content:text-color': map.get($--skin-basic-configs, 'main-text-color'), + // 图文直播暂无更多字体色 + 'iar-mobile-tuwen-live-no-more:text-color': map.get($--skin-basic-configs, 'describe-text-color'), +); diff --git a/src/skins/golden/config-mobile.scss b/src/skins/golden/config-mobile.scss new file mode 100644 index 0000000..8afc361 --- /dev/null +++ b/src/skins/golden/config-mobile.scss @@ -0,0 +1,154 @@ +@import './config-common.scss'; + +// 皮肤 Mobile 端页面配置 +$--skin-page-mobile-configs: ( + // 富文本字体色 + 'mobile-rich-text-content:text-color': map.get($--skin-basic-configs, 'main-text-color'), + + // 引导页背景色 + 'mobile-splash:bg-color': map.get($--skin-basic-configs, 'main-bg-color'), + // 引导页倒计时外层背景色 + 'mobile-splash-live-count-down-wrap:bg-color': map.get($--skin-basic-configs, 'sub-bg-color'), + + // 页脚字体色 + 'mobile-page-footer:text-color': rgba(map.get($--skin-basic-configs, 'main-text-color'), 0.6), + + // 基础信息频道标题字体色 + 'mobile-basic-info-channel-title:text-color': map.get($--skin-basic-configs, 'main-text-color'), + // 基础信息开始时间字体色 + 'mobile-basic-info-start-time:text-color': map.get($--skin-basic-configs, 'main-text-color'), + // 基础信息页面浏览次数字体色 + 'mobile-basic-info-page-view:text-color': map.get($--skin-basic-configs, 'main-text-color'), + // 基础信息主持人字体色 + 'mobile-basic-info-publisher:text-color': map.get($--skin-basic-configs, 'main-text-color'), + // 基础信息点赞数字体色 + 'mobile-basic-info-like:text-color': map.get($--skin-basic-configs, 'main-text-color'), + + // 倒计时方块背景色 + 'mobile-count-down-square-item:bg-color': #F4F4F4, + // 倒计时方块远点背景色 + 'mobile-count-down-square-item-dot:bg-color': rgba(map.get($--skin-basic-configs, 'main-text-color'), 0.6), + // 倒计时方块数字字体色 + 'mobile-count-down-square-item:text-color': map.get($--skin-basic-configs, 'main-text-color'), + // 倒计时方块文案字体色 + 'mobile-count-down-square-item-word:text-color': rgba(map.get($--skin-basic-configs, 'main-text-color'), 0.7), + // 倒计时方块边框色 + 'mobile-count-down-square-item:border-color': rgba(map.get($--skin-basic-configs, 'main-text-color'), 0.1), + + // 直播预约按钮背景色 + 'mobile-live-booking-button:bg-color': map.get($--skin-basic-configs, 'primary-color'), + + // 关注按钮背景色 + 'mobile-follow-button:bg-color': map.get($--skin-basic-configs, 'primary-color'), + // 关注按钮字体颜色 + 'mobile-follow-button:text-color': $--color-white, + + // 聊天消息输入框背景色 + 'mobile-msg-input:bg-color': rgba($--color-white, 0.9), + // 聊天消息输入框字体色 + 'mobile-msg-input:text-color': map.get($--skin-basic-configs, 'main-text-color'), + // 聊天消息输入框占位符字体色 + 'mobile-msg-input-placeholder:text-color': rgba(map.get($--skin-basic-configs, 'main-text-color'), 0.6), + // 聊天消息输入框滚动条颜色 + 'mobile-msg-input:scrollbar-color': rgba(21, 113, 208, 0.2), + // 聊天消息输入框图标字体色 + 'mobile-msg-input-suffix-icon:text-color': rgba(map.get($--skin-basic-configs, 'main-text-color'), 0.7), + + // 聊天消息发送按钮字体颜色 + 'mobile-msg-send-button:text-color': map.get($--skin-basic-configs, 'main-highlight-text-color'), + + // 表情选择面板背景色 + 'mobile-emotion-panel:bg-color': #EDEDED, + // 表情选择面板下的发送按钮字体色 + 'mobile-emotion-panel-send-button:bg-color': map.get($--skin-basic-configs, 'main-highlight-text-color'), + // 表情选择面板下的输入框背景色 + 'mobile-emotion-panel-msg-input:bg-color': $--color-white, + // 表情选择面板下的输入框字体色 + 'mobile-emotion-panel-msg-input:text-color': map.get($--skin-basic-configs, 'main-text-color'), + // 表情选择面板下的输入框占位符字体色 + 'mobile-emotion-panel-msg-input-placeholder:text-color': rgba(map.get($--skin-basic-configs, 'main-text-color'), 0.6), + // 表情选择面板下的输入框图标字体色 + 'mobile-emotion-panel-msg-input-suffix-icon:text-color': rgba(map.get($--skin-basic-configs, 'main-text-color'), 0.7), + // 表情选择类型选择背景色 + 'mobile-emotion-panel-type:bg-color': rgba($--color-white, 0.4), + // 表情选择类型选择选中背景色 + 'mobile-emotion-panel-type--active:bg-color': rgba($--color-white, 0.8), + // 表情选择类型选择字体色 + 'mobile-emotion-panel-type:text-color': rgba(map.get($--skin-basic-configs, 'main-text-color'), 0.7), + // 表情选择类型选择选中字体色 + 'mobile-emotion-panel-type--active:text-color': map.get($--skin-basic-configs, 'main-text-color'), + // 表情选择删除按钮背景色 + 'mobile-emotion-panel-del-button:bg-color': rgba($--color-white, 0.4), + // 表情选择删除按钮字体色 + 'mobile-emotion-panel-del-button:text-color': map.get($--skin-basic-configs, 'main-text-color'), + + // 更多按钮背景色 + 'mobile-more-button:bg-color': rgba($--color-white, 0.9), + // 更多按钮图标图片 + 'mobile-more-button:icon-image': './imgs/pws-icon-more.png', + // 更多面板背景色 + 'mobile-more-panel:bg-color': #EDEDED, + // 更多面板字体色 + 'mobile-more-panel:text-color': map.get($--skin-basic-configs, 'main-text-color'), + + // 打赏按钮背景色 + 'mobile-donate-button:bg-color': rgba($--color-white, 0.9), + // 打赏面板背景色 + 'mobile-donate-panel:bg-color': #EDEDED, + // 打赏面板标题字体色 + 'mobile-donate-panel-header-title:text-color': map.get($--skin-basic-configs, 'main-text-color'), + // 打赏面板返回字体色 + 'mobile-donate-panel-header-close:text-color': map.get($--skin-basic-configs, 'main-text-color'), + // 打赏礼物选中背景色 + 'mobile-donate-good--active:bg-color': $--color-white, + // 打赏礼物选中边框色 + 'mobile-donate-good--active:border-color': rgba($--color-black, 0.3), + // 打赏礼物道具名称字体色 + 'mobile-donate-good-name:text-color': map.get($--skin-basic-configs, 'main-text-color'), + // 打赏礼物道具价格字体色 + 'mobile-donate-good-price:text-color': rgba(map.get($--skin-basic-configs, 'main-text-color'), 0.5), + // 打赏切换指示点颜色 + 'mobile-donate-indicator:bg-color': rgba(map.get($--skin-basic-configs, 'main-text-color'), 0.4), + // 打赏切换指示点选中颜色 + 'mobile-donate-indicator--active:bg-color': map.get($--skin-basic-configs, 'main-text-color'), + // 打赏面板选项背景色 + 'mobile-donate-panel-option:bg-color': $--color-white, + // 打赏面板选项字体色 + 'mobile-donate-panel-option:text-color': rgba(map.get($--skin-basic-configs, 'main-text-color'), 0.6), + // 打赏面板选项选中背景色 + 'mobile-donate-panel-option--active:bg-color': $--color-white, + // 打赏面板选项选中字体色 + 'mobile-donate-panel-option--active:text-color': map.get($--skin-basic-configs, 'main-text-color'), + // 打赏面板选项选中边框色 + 'mobile-donate-panel-option--active:border-color': rgba(map.get($--skin-basic-configs, 'main-text-color'), 0.3), + // 打赏面板发送按钮背景色 + 'mobile-donate-panel-send-button:bg-color': map.get($--skin-basic-configs, 'primary-color'), + // 打赏面板发送按钮字体色 + 'mobile-donate-panel-send-button:text-color': $--color-white, + // 打赏面板剩余积分文本字体色 + 'mobile-donate-panel-point:text-color': map.get($--skin-basic-configs, 'main-text-color'), + // 打赏面板剩余积分数值字体色 + 'mobile-donate-panel-point-count:text-color': map.get($--skin-basic-configs, 'main-highlight-text-color'), + // 打赏自定义金额字体色 + 'mobile-donate-panel-custom-cash:text-color': map.get($--skin-basic-configs, 'main-highlight-text-color'), + // 打赏自定义金额输入框背景色 + 'mobile-donate-custom-cash-input:bg-color': $--color-white, + // 打赏自定义金额输入框标题字体色 + 'mobile-donate-custom-cash-input-title:text-color': rgba(map.get($--skin-basic-configs, 'main-text-color'), 0.7), + // 打赏自定义金额输入框字体色 + 'mobile-donate-custom-cash-input:text-color': map.get($--skin-basic-configs, 'main-text-color'), + // 打赏自定义金额随机按钮字体色 + 'mobile-donate-custom-cash-random:text-color': map.get($--skin-basic-configs, 'main-highlight-text-color'), + + // 回放列表播放中按钮背景色 + 'mobile-playback-list-playing:bg-color': map.get($--skin-basic-configs, 'primary-color'), + // 回放列表字体色 + 'mobile-playback-list:text-color': map.get($--skin-basic-configs, 'main-text-color'), + // 回放列表选中时的字体色 + 'mobile-playback-list--active:text-color': map.get($--skin-basic-configs, 'main-highlight-text-color'), + + // 多会场背景色 + 'mobile-multi-meeting:bg-color': #EDEDED, + // 多会场字体色 + 'mobile-multi-meeting:text-color': map.get($--skin-basic-configs, 'main-text-color'), +); diff --git a/src/skins/golden/config-pc.scss b/src/skins/golden/config-pc.scss new file mode 100644 index 0000000..85aa990 --- /dev/null +++ b/src/skins/golden/config-pc.scss @@ -0,0 +1,110 @@ +@import './config-common.scss'; + +// 皮肤 PC 端页面配置 +$--skin-page-pc-configs: ( + // 观看页背景类型 + 'pc-watch-page:bg-type': 'image', + // 观看页背景颜色 + 'pc-watch-page:bg-color': '', + // 观看页背景图 + 'pc-watch-page:bg-image': './imgs/pws-pc-watch-bg.png', + + // 副屏收起字体颜色 + 'pc-sub-pack-up:text-color': #333, + + // 倒计时方块背景色 + 'pc-count-down-square-item:bg-color': #141518, + // 倒计时方块远点背景色 + 'pc-count-down-square-item-dot:bg-color': #141518, + // 倒计时方块数字字体色 + 'pc-count-down-square-item:text-color': $--color-white, + // 倒计时方块文案字体色 + 'pc-count-down-square-item-word:text-color': map.get($--skin-basic-configs, 'main-text-color'), + // 倒计时方块边框色 + 'pc-count-down-square-item:border-color': $--color-black, + + // 聊天消息底部输入框背景色 + 'pc-msg-bottom-input-wrap:bg-color': map.get($--skin-basic-configs, 'sub-bg-color'), + // 聊天消息底部输入框节点字体色 + 'pc-msg-bottom-input-wrap-item:text-color': map.get($--skin-basic-configs, 'main-text-color'), + // 聊天消息底部输入框节点 hover 字体色 + 'pc-msg-bottom-input-wrap-item--hover:text-color': map.get($--skin-basic-configs, 'main-highlight-text-color'), + + // 聊天消息输入框背景色 + 'pc-msg-input:bg-color': map.get($--skin-basic-configs, 'main-bg-color'), + // 聊天消息输入框字体色 + 'pc-msg-input:text-color': map.get($--skin-basic-configs, 'main-text-color'), + // 聊天消息输入框占位符字体色 + 'pc-msg-input-placeholder:text-color': rgba(map.get($--skin-basic-configs, 'main-text-color'), 0.6), + // 聊天消息输入框滚动条颜色 + 'pc-msg-input:scrollbar-color': rgba(map.get($--skin-basic-configs, 'main-text-color'), 0.2), + + // 聊天消息发送按钮背景色 + 'pc-msg-send-button:bg-color': #A70000, + // 聊天消息发送按钮禁用状态下的背景色 + 'pc-msg-send-button--disabled:bg-color': rgba(#A70000, 0.4), + // 聊天消息发送按钮字体颜色 + 'pc-msg-send-button:text-color': $--color-white, + // 聊天消息发送按钮禁用状态下的字体颜色 + 'pc-msg-send-button--disabled:text-color': rgba($--color-white, 0.5), + + // 图片达到最大数量后的提示框背景色 + 'pws-pc-msg-input-popper__max-image-tips:bg-color': map.get($--skin-basic-configs, 'primary-color'), + // 图片达到最大数量后的提示框字体色 + 'pws-pc-msg-input-popper__max-image-tips:text-color': $--color-white, + + // 聊天输入框设置昵称占位背景色 + 'pc-set-nick-placeholder:bg-color': map.get($--skin-basic-configs, 'main-bg-color'), + // 聊天输入框设置昵称占位字体色 + 'pc-set-nick-placeholder:text-color': map.get($--skin-basic-configs, 'main-text-color'), + // 聊天输入框设置昵称占位高亮字体色 + 'pc-set-nick-placeholder-highlight:text-color': map.get($--skin-basic-configs, 'primary-color'), + + // 表情选择面板背景色 + 'pc-emotion-panel:bg-color': map.get($--skin-basic-configs, 'panel-bg-color'), + // 表情选择面板类型选择背景色 + 'pc-emotion-panel-select:bg-color': map.get($--skin-basic-configs, 'sub-bg-color'), + + // 更多面板背景色 + 'pc-more-panel:bg-color': map.get($--skin-basic-configs, 'panel-bg-color'), + // 更多面板字体色 + 'pc-more-panel:text-color': map.get($--skin-basic-configs, 'panel-text-color'), + // 更多面板字体高亮色 + 'pc-more-panel-text--hover:text-color': map.get($--skin-basic-configs, 'panel-highlight-text-color'), + // 更多面板选中框背景色 + 'pc-more-panel-checkbox--checked:bg-color': #666666, + // 更多面板选中框图标色 + 'pc-more-panel-checkbox-icon--checked:text-color': #EDEDED, + + // 打赏面板背景色 + 'pc-donate-panel:bg-color': map.get($--skin-basic-configs, 'panel-bg-color'), + // 打赏礼物 hover 背景色 + 'pc-donate-good--hover:bg-color': $--color-white, + // 打赏礼物 hover 边框色 + 'pc-donate-good--hover:border-color': rgba(map.get($--skin-basic-configs, 'main-text-color'), 0.3), + // 打赏礼物道具名称字体色 + 'pc-donate-good-name:text-color': map.get($--skin-basic-configs, 'panel-text-color'), + // 打赏礼物道具价格字体色 + 'pc-donate-good-price:text-color': map.get($--skin-basic-configs, 'main-text-color'), + + // 中奖记录面板背景色 + 'pc-lottery-record-panel:bg-color': map.get($--skin-basic-configs, 'panel-bg-color'), + // 中奖记录面板关闭图标字体色 + 'pc-lottery-record-close:text-color': map.get($--skin-basic-configs, 'panel-text-color'), + + // 连麦描述图标字体色 + 'pc-connect-mic-desc-icon:text-color': map.get($--skin-basic-configs, 'describe-text-color'), + // 连麦描述文案字体色 + 'pc-connect-mic-desc:text-color': map.get($--skin-basic-configs, 'describe-text-color'), + // 连麦按钮背景色 + 'pc-connect-mic-button:bg-color': map.get($--skin-basic-configs, 'sub-bg-color'), + // 连麦按钮字体色 + 'pc-connect-mic-button:text-color': map.get($--skin-basic-configs, 'main-text-color'), + // 连麦按钮高亮字体色 + 'pc-connect-mic-button-highlight:text-color': #ff5b5b, + // 连麦中图标背景图 + 'pc-connect-mic-applying:icon-image': './imgs/pws-pc-connect-mic.gif', + + // 回放列表播放中按钮背景色 + 'pc-playback-list-playing:bg-color': map.get($--skin-basic-configs, 'primary-color'), +); diff --git a/src/skins/golden/config.scss b/src/skins/golden/config.scss new file mode 100644 index 0000000..c2135df --- /dev/null +++ b/src/skins/golden/config.scss @@ -0,0 +1,7 @@ +@import '../_common/functions.scss'; +@import './config-common.scss'; +@import './config-pc.scss'; +@import './config-mobile.scss'; +@import './config-iar.scss'; + +$--skin-configs: generate-skin-setup-configs(); diff --git a/src/skins/golden/imgs/pws-icon-more.png b/src/skins/golden/imgs/pws-icon-more.png new file mode 100644 index 0000000000000000000000000000000000000000..0233f9635c6494aaa9fb152a993b3695267b564f GIT binary patch literal 283 zcmeAS@N?(olHy`uVBq!ia0vp^8X(NV3?%C=ER6$FEa{HEjtmSN`?>!lvI6-k0X`wF zhK7d5#>PfQMrLMa1_lN|HUt30fr2I`CP0Pk^Zp+NQamL=e!=Cds)VDKt*(`7*u)TY zF?0`5yvx(YF+}71-U+LD8yI+4Jtdl04J>TpdoXxgwZ3*P$l1Tfy&ZF zedi}He;3P;elU5*GZ&Hc1J?|SO*njB#&CS8Stk;~F{i=rfs%os1=H38kqWWQKW^>6 z5L)!~?(Fgj-x98Va7z)-Du|BrT{Foly0SJsKZ{-ZiTMkyouA(M^8U;GDf{q(L`|+n S;A)_&7(8A5T-G@yGywqf7GKB! literal 0 HcmV?d00001 diff --git a/src/skins/golden/imgs/pws-pc-connect-mic.gif b/src/skins/golden/imgs/pws-pc-connect-mic.gif new file mode 100644 index 0000000000000000000000000000000000000000..07571e87781e59628f44c7f8da301de8b4b54c5f GIT binary patch literal 20852 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 literal 0 HcmV?d00001 diff --git a/src/skins/golden/imgs/pws-pc-watch-bg.png b/src/skins/golden/imgs/pws-pc-watch-bg.png new file mode 100644 index 0000000000000000000000000000000000000000..d6623690d13d416fca05ce735de12b5104bb26fc GIT binary patch literal 108707 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

2e5#uP6wwu(1BUiF8);nm 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 Y6RWN?;;Jjz3GUWYEu$xm8cwnQ1KIs@O8@`> literal 0 HcmV?d00001 diff --git a/src/skins/golden/imgs/pws-product-icon-recruitment.png b/src/skins/golden/imgs/pws-product-icon-recruitment.png new file mode 100644 index 0000000000000000000000000000000000000000..86a5a39e61943b070d4350f5edab5c9afe2567fc GIT binary patch literal 7385 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 literal 0 HcmV?d00001 diff --git a/src/skins/golden/imgs/pws-product-icon.png b/src/skins/golden/imgs/pws-product-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..9eaad5cdf3dfacdeb5336c5cd48d8d58fdd900bc GIT binary patch literal 9355 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 F{{iv&&=&vz literal 0 HcmV?d00001 diff --git a/src/skins/golden/imgs/pws-product-shop-car.png b/src/skins/golden/imgs/pws-product-shop-car.png new file mode 100644 index 0000000000000000000000000000000000000000..55e4c53664b9b4eeec88398a9a40b3a5964bc248 GIT binary patch literal 4458 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 literal 0 HcmV?d00001 diff --git a/src/skins/golden/imgs/pws-qa-entry.png b/src/skins/golden/imgs/pws-qa-entry.png new file mode 100644 index 0000000000000000000000000000000000000000..933e25877fdd5a051444673837780da38f0b4dfd GIT binary patch literal 2671 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 literal 0 HcmV?d00001 diff --git a/src/skins/golden/imgs/pws-qa-no-data-icon.png b/src/skins/golden/imgs/pws-qa-no-data-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..772d92d4cf35a99dd79ffaac0abfb958d0ad2a99 GIT binary patch literal 1143 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 literal 0 HcmV?d00001 diff --git a/src/skins/green/imgs/pws-pc-connect-mic.gif b/src/skins/green/imgs/pws-pc-connect-mic.gif new file mode 100644 index 0000000000000000000000000000000000000000..08c5c465014dfc7f6e006c1e6083b8c8df888a90 GIT binary patch literal 21656 zcmeFX_d^ruyEi=Pg*JrVLnkx?f&zjjfj~gi(2IZpf^>+0bTkRQsG%1r0YfhaL_jPX z5EQTh3SwPURBXFgu&uj1xaaKmob$ZrJm(*HCqHCna@V=e|uMX7-e$9EQ` zIhV5OmASTsDU@Rw&OEkj8JAp=PAX21X{(J8RM{1#hVaY0YYOAr>!>G=9O|r(ZmV&x z$~)Ln;ZdExyNu&np6!3K#Nl|BODQL~snqer5gPAkP~!=o+M=+Qis;sweHA%gH3bo; zDigaJ6S^AW+Uq>43-(szxK-tapQ`k&D~@WdW;F5k*B@hbob;2Kwp={VZo zmMIjl2iiDi+7C4HI0NmGg6i1z+Vs<>xPu+3z0FxdL3&?H#_3Z*4adWpD>6?D4)-*< zSLJ8*w`K`j_n#~|I?%SSGB>ojEViw7cPV#QQ5y9`7WMcMubM*Fa&CM_-4S8y!IsJc zjVD6+<$Ee}d~1snyBgB^S{#mLh44#B#cA;!Cw*!QJ*)GbOF690llI3l_EzRb3aX-8 ztD^+fd&+YH>yIBiRS{5s+_SoHcNsUWx5bHf)U7ht@%RyXRo>D5)|4JTxj5rcR|9*X zJ)yHcwXfN$wji#(HmqfHrMO95jjYak+k#ZinGUBz#C%cx0TN*6-(k(ZWYE?X-L>_Yn86?871=Y3T`J9_f2ML(`)}t(jW8 zcH(VQZBk=dv0+KU_|({#xI~*&JFQ@5d`Oth=K0UtTeR?h7fFh?(<1-;0spg4`}l+~ zyrt-kfN*eGAcY3vrtX(aeTuWn*rJ|Mx>{v$q81K^u1m z$A9l@^U6*uA}NVwvt>(4N{VU9R@3-|@GWN6*4A5y=3C6oO*TuIB&NkB1*e+CC2IfE zfPY4T6icj#2 zkB|B1Dbge2lj0L2;#qimd%VG(;LymppVx%HE9}{0;~bZm6dV^C=Imgnwb_JeWF*tZ z+S0(^$cr>;l#S7<0&y5TZ zogF+g&@VjQ*W1(G)!EVB)+#vF(#&saY^Xn3S6fqERasG9R?0hZ{8&kGQDH%TUT#h{ zm%~1KBr7u`JuNjQ`EXKV!XZ|CTx?8qRAfZ>!7yfMNHF6-P+-7*e?MOzZ!b>|cQ^XJ zy?b1DyExOF9H|cW6f$YoPCMHjHr7_#w^>?jH8&$}F*PwZG9(!2>*?xfYiZ&&)YVi~ zl$8_}31S^2f5# zGKK+D!sg5Qptegrt-ocmSaECA!>RsLS5M&Wi&UKl1k>dP9$f*`1FhGpiJ>#~&S%iIDhs{?}2m*pd$tt2}1_?Bn0hHFD%+FzqVe6wFxkwu>oQAl1`tmBf z@0~$i(cI}m$Nv%zxs}`A#qQx+Q?Y> zu4(3mbn2lia<5yrb0lC|0SBM(&qUq=;W~XPPeiZoZj(^$Sld2{xGGHi#Z@T!a33ee zdZT_RVLX4~fCmGA(^fkVX>)T5Ge{m8gUcElCqKGyegbaRD7&F}fL(CRYFI{jWcd%H z$lur0_6ienFJu|JT#4C+=4@M%`eRa`LH@W9-jqeD>8C)^>*05SMF|5w)Vd&rpJh+f zq=uq`XCHg^Ivcc*ur$V#+|NqV4--lLLsBDBT8=BzmCuEms z88iAXI)n?1 z>yktjUX9KxkgSSB&C;nPUtYE+CbGR!HHZGuB_ z?N=oy1v`$}gBEmH->jq2yTLo&(eJt}Ekp(s)LZfdXYZ0Uzs8d~!xKjbbpJN`cIZuC z4|<9RVwpl`b?GaP-@FhH^aO0|??~e{5&T)#`00-l(Hex{<;A-`-0$7wFq&hb5E9m;>JmL6Jgx&xe`YU94I7c10_7>6C!A_M;xP(L8bEFK<8IIz1CT zixn6<2gzwHZ{t*Wx}|~eS5TAnJI30xr>7#4TpMK~-|D}-8fHvb*o|yKGj;HEg<ks)qU3z&ip5hVEcyCVNR5>= z%yk)HsEVM=@)dTU=Ljk^9rf)493$KzNLtc??-a_;HUm)^%!>58MGLSESDJF{p$^Rk zBa4=mhMjs#gSuJ+ch@IM>jQq>mzp?zfWw4x9G;taeUtY7z=Sfy_dAO(&p_z-a_h0@ zhKHwRP|Ue%U9z5ZY$quseWJ$NT0}S*feVr()moMwH0xB_tCfJ#LlU3wh;O+WKk!lS zsd(6)4}}{yrP9x6FZVca{o`9%W2lwF#V)z;y4^(d0K?Kb8025!-gBcnKsnImMVRT+rJ9IEt$Mp@Q2GrIhFKc44@Y|pX#A7UW)kR!$rfo$twfYab=@{bmqpT zEv9GeZe1@^&4zawI?8!<2S_Vl{dPq5#;?2Qe}p!Em+hcPVCrwDKQE~Hs=a@)xaR!F zh!cSC7E)VM)vj^Jom*RP*R>@cKoMW`I*eLZ{#IZa9bJmG#lt`M%0Ve>Y;3^FsDzRT z!vLc%XaY!mMK;C#M(HDeCPbTY7wxMiJ&fB9k(fI3QgN1j9G9UT7rTW52cRhzBehn% zXwV?W1<#B4s=JTTeYykexL?HJ*ORBZ6wHSb+Oe@n=V3>ZNhwn-29A5Oor1)_dum2n zLd>N&UQj8;%3fatHCv9O5}+BUU&FsW{^Vrg8jzh+#W+zQN5mPS}nL`F@iB7u(W0@{!cjDBs=Di)Ztu zQYqkqr zPrZM5{d$DvI5Ss2k@P~W^oaeExY7163V+)B9L>w8ZQ^hEjv}3q>Go8)Ct-<*gJyY0 znJ=ZWLiI&ck>jyI4W

&P)o~f9*jFT* z=RB1UjwP)R7aY7(;EI;@s-P(l9p&FE@f{#HQVL59q+v)CL|bn6QvOK0oR=)EeFZT0 z#bOy$$3YsmAS-+XjI^TEPdPQN=I`%!^i6`G==L&vVC)%%m;~^3Xy?$y4F=La1x9|U z`O2#W{8ZXd0d>XKL5xV#GvlIyb4Iv1OA#djR>kSTG)Xpu;&5D6R3b^D88jb91!te- zW2m-<49?nK7nD(u7EJDW3c?XnN>3^;=;9h0Ww@QXmRfu&J)354aWYznx zWwwVZ_4Ic{VopfTWz<=D4NR9R-j&WVU;Nj-&yv8yMAI2+8EwVX#i z-0kEYZavspb#1!7cN})060ijuh?r{sjV}q4ckAv?8|sQcU7!)CRN9G2c-~q6@|7W; z?T1{BgKIayr0ZZ?>kdXVek?THvJ9?x6TcHuVW(;@Oy?<1*PGr34a%FI+)MwOR#TeR z@YD~h4)VKO_*geS?tbIaxmdX_(*mWY->l74>kRR;K^S@qB#{rFtA72V+OD%+dbFiI z1S(!?C98c3p;`TlPc^Kw9>+h`iGx0>J*ipO@Eaz@YZZ`~skdY3A!lLoFu~UM$(IWS zcCt)GV#%GBR`d7Cvc%Tw&M*^zpaB9Vd|N-8=BqEuTj}vZHkM3fnT&S8h1H&F*j|e& zLkXLYeBYYZ#dAr6{OZ?Xw~^SfMKeo=cdEpt9!73x2yH-W0>Z7G6^5X$evQFPP(ui_ z1={NkiEy_=+`>b+;63oQE}?SwfKB(HfA>&&_lQfk4d2v;*L}&Q8%}1WrLk^kwtXF1SDt=z^o1AJzsSeDpX;5ls;m$0 zGtB9G)n$5QqHj-gpB?8}H3Zw$94W{`>d&vYi70V~efWEk3>B<=j;4B3ce-+hL9ewWk!GtL>O_x>?R zS2^px_YWP+7>YPK6m@kNhq2kkA5fr8D(RIBBxSU^#H$s0UmAA36L?ckdW3=9?1koh{ z+{jyo|rz)M#|?nG%v?fn(DiHhkqL_D`n35mS=NH?7>7eH%f* zG&JF5iR4Jg*B!u0eq+1kHsm?{Z;#OiR#*2H)=-ufr89s3oVNe#zOk`<`-{CxFFB(# zryl1S4aX!2w-^O1esvQa7Gg%B%tPYfp~V(j~8sIQT=>B9w? zJC1b7jQF@gtrkB28ZYfhp9?out&!(QEBb;tH>}ZB46L$+f1W%y|8@pEOD8zr?d;I6 zBuVy)M&T}ml?J)@(bW)N*Zwb0N`j9q@=33$fXZ1w*|FI;*h*4%UBqjVIpt{mTR zM{XAHWh0^Rn?66&dz(SC0>%+ISrGC`37gS>ca>av1o>PbccYLDcMK_-b;5C02o!uQ zPsBSVf9Dj5-{vwK@yEN3%C>GO#*$4s`P*t2#40PSh__|5uH^*GO_$JSc1fAjcj~bf zDD>F-U9}&6F{!iN^@a<*TDsmT;>0IuhsvR2mn;sFAExhrDV)Pi+&Ra-^dJa+2|5}% zyrNsvT8CXudP4<+{&=zby8nbp!vU?kaa56sxX$p^poxm)195Db3rd7FX)&XlR^*gF zqAVbLp*atmuUt#6FPkJh`+A7`8spPvb&>cItD+)oetK# z!oA#2CN2Kb5G;}lo+Ge*5$la@r2TSqc2WQaP=G)TQ?_}#%2uc?z(an?{S^`5Rb}aE za`vn-^4Zw-O4<&HQ{Ws@VM&bx*zQ;rd24wI#{mTraSo1kC30Y>03s0RWlhzE!|2G{ zFSRfv4lK>17Jw`8*C1ktu1<`j3<8!#cY`l>Z;GnH^3RImFm~1p$k`*wWa0-eggj7_pFFO>#GB;S z>~<|gOh@!Aq_~vu`NQPbU}i2RTRN@)Z;mXQKyLR1BcV`c2}b zVblJ7e!yeut;yMYY)@-E?l78w_ed01b}COt$mQAR#yJ~6;*ryz6!XLFhMUQq4YU?N z_1D{Z{<3`$i-&%f&S`>+%~(}t>tP;B+?gqMcYNw@Ah{F=bUIfxVsP6atA ziyf7#HKg>~Y`~}EJOoO~7AwcL1cmI=?Wxpxl5*jczvJ|ShaBbBC!bmM0 zD}L=)1ILCZsa|6%yT&<|KM}@PJX&~R_5j2bN)!ALz==`F(c1eZxo%fBP0W zKgYh((|S+&FRK1_hXW;ZWMOAMt}6hyJ@)XG#Pm*YuSZbNSBhAWLDffys6X>m5Vrk5 zQnU<_tw$D@c{W52IC{&r25Ph>JNCG@bzuq1^fAuOu9ECkCH>*WJ z-Jfb>fM-0D4Ko1uDlNg(L3wAh3Os;4ZzCLot5~r_2m>^o>wEMJe)zZ|n*QDO`n9v% z^XZ0c2-dg)1l}J-(V=1njM?NaOwO(Yr2i!-2cv3i8WS+>{wznzj9KxPWuKFyXr)^)V&;LAgkt@%vCf(#XN)x6bFc%X!ZA8w zHFWDiLkd*O@v#AU>@^@}OMO8K7Ipc_YEqxBMpZ4d6}73t*z+F%&r)60Sv&OD_>^M$ zmyjOf`~-4LUUL~F*pvJw5NZ!^a3JPa5PmyoRx$TvbA@s?;jSQgMWU+!QJ~}IH+TgR zxeLEn(>(7@Rf_%X^#^0)@2W5*$+Wql9NN=gaz8BERj~5W)7>9}%w!RdSH1TX)SrLP zc2!-vLD{${of=A$e)1sidjI_ClGazVqeC4V{NiQA9;J2!Fda)OyqWb7TW&nnT zp-1e_K>!QI#ZeUuak{S3E5|Ok`w&63))J?!KDmg_wK7JwbSTap%9U@$b9$R?@4 zjZBV{F`hcj9m@IwLYMWl@jhPi19I&z{x74+#hfojo_dNo+L;~dZ#2l%nb(E^smikL zC;BM&AW=v;zqMARRc7h9LBWj9xI$#g<+{>1yhpe62WEUTBB*8 zXY*C|JkNUdsGSlE;xIObuS7S!)I{ZI)juvI-Y^No%V22bXfkd4kBF-IJ%2rTg0Q7t zybIBs7RKZ%l#70^pnmplhK@VaEkediMG2|00=d|5jj21F;3aGPLkYQ!BQJmetRvVL zAtPXHm$dsePd=1j@kk!7yR>I~=)EqU?B%Ms#IwE#kwx$X7`okHIDgT%cg4j@k>ao4bA zcn$(e`rWYT`~Q|F(Pn&*-n^OmiQeG#M z7sDE#l)zcVk64-AMqwZ_n;}_9nV@NGckSV)N?$Gl%#XiNBo1~_A*K$E1)P>HC={2P z_f|N*nJ0~s3v|fKZ$)qoT0zp>;yV{{Hqwj`=$I<%cr05i zL0JXoC%ID!C}u3n-s~VW#DuY^h+n~U6?^2s6Ve8+KtlY!TC%lQj`91p$4wc1@8O6F z62%UeJc}veP38{&P@B*364QhkXv|z7=QJBpuG9pbP4}r%V3utx$61a^)PdfH^fxV9 z-@0T-qx4QQ;fb-|yYu4lcG^X}f#=~>Q4)j6rT)(_sotKZ3{P&*D?)@kQqzl7>Uz;R z!aG)fB%Ft_h+JKS+g5H8_~wE7PyJ>aSiC6HzEt@l3Ahyx5@oG_>X3v5Z5Gf>8#?7B zyNv}Qb9Ai)eiiHb;6A8vnm1emFar^qPxQjPz?>WoX?9xp+|REwH7GAs((5D|I{hiI zZYejFL{ky@E!0cItdR?ny>)K`U5{qNz5M#=C*j$WVHF5#3w~&ev6@15fFWfRS71#) z*xYJlM}vmBC5)CvHEk1ib||GOFLZVUed41NYB!b)9b28jn({MRvWk-Uf!c2B%T^Hu zruHLBnx+A~%I-%Iz}=Q*KU_wt59{c)wNwsBc-O!U8$7Bs!bWG z-31VZxLMWR7Wn# zvQQe)iiv#id@$%Q7g`u>2PsA#e$u&v|1m?xYLR?5hcIjKShL&-pcTyJD~aXnUQvS| zZ{Q`wfm5y37{4t;5Xt;f`dO9{@dyPt_~0-}JpUct=Ln%-0l*mjFu4PV)(`t5jvM)M z{58LMlCK&C^0+T5`)AJ=z-X+RNb?EaI7*hmV#81jq6kHpz+e7o;Y>=ZgHH(WxvrjA zfl3+}OT9!I2=HSPJJ_f1N^Ym|pxB06U80TOuI(ZHCn58{1CS_vV_)fJxTGq?#o;UK zpM2WECW$N1tp0w<6;rT6Zw7BdC`Q51C1G_Am^yw^U;PuWbDUaKMdI|WlH4aT7&$|K zPhZWeg)Qcu$c7@~WOk_?t%nXKaRHne^?L{DY)>cFhdK%}s_?~X+8R9(*Am7&Bn@c{ zel%A1)eb_K2girGr?S?o{>!((GX@5%@rbMsn~&7qnu;uPG-MIA|Sa0i`B} z*^4y1PChQ1S^ysiUUxyI>>Ae9{E!#Rcd%X|UfcimcmAX<{g|fvw?ivhd*H|LWfO^A z<_MipUmXaF#?sYHH+#aSyUxc($S2ZNll*hF>eiQ|k%7+x zie&nHX0uddklJ422_y*l0wVR4-%iEtvwL^_>05m|pCm_cYAbCyGDS&O)}QG4ZNAng$8m!1+V9yjLFBaCdQ8Mxlk z^zIOelB$UtozGRXt!!#hQCl7Npi;W#B6nCtMG91zGf&%;oM&qC`5`*@C5|rmbWuCa zM_*H)P&ag*b)!44LLsShbv&Aw6~46(VK&YAiFJ+1H2DaZm9w;LQ zCFAFhUwvxxmXs#xVicb&nN*i{^|wzQg!>8jw!W~g6~v_tZMjnJx#MM&ESNriKEI}=9cDtgwDCK!pGC9 zDDhBFRqPS$Y{2e)>p)Yb*u|x?(Fz%8KzE;-h(J>u!UIPbBWH zAkbY3Q!Qtiw^2kRx%%Fwl4*vXhMHy0J0-#zRX=qySo#JMek`fMAN9a%rKtVbJV;jT z14zje>ib`xJkd2}N)~`sVn-f$lOG$dkk%OrY~6WS%&YM6y;|=WJw*iB<4;Dv6BuOw z)N>5-qLCW|8gQug-C6Nq%Va1<@8PHj0R{*Gh%uZrjyd~`3cViChljp4x76^F{2ez+ z0k+rAQr@T90dNc?lm3bE|D|;PE9^uQHX)(5lO)E<7|kdC6Ojfa2NBy=1(0$CTiW{jMc z(+I=Ol3U!M=~dC;vglce*UIvw(UTcPC@pKxi1THXV&2vOV}3MmT(VTkbnRjd+rd?W zL=<-%5ut)G#S%fQ(p99DVyIP4CTn@1bCb*#uE)5I9pi0jldJ-9?67$yp9^RuhOp#@ zBqKft@XAJyno@pK?A?Eg+oH^@kZ8P+N`Il#RfbNxe2)IYEXN=HYTU*PulcfXLlwN8 z|D`L%3H{g#Vv=9#^q=d25GM;%*rO%{0$`8JBl8;ut;H~U0h4z*ATo0_sMs77| zV|dBtL4eNS4mq;+G4P&D4C7Yyz`Xrc!U0` z_k9=gB@$%Ia(23VH6sl`*#IuJY!mB3-!UoWuqaXsNh7C1rP4DP#37)2^5NCY$f^bc zYn^tGuF;66y9V?UJTY5q2iR2!*u(8eP(TlFq)ZM%qg|mhIB&hok?dx&wIjtX%Dl^s zWhz=|5vc4*frcrBjLv0C(6_a=D@)H1I+g9d0-g;muldNG78`tWQD0D!3V4*@(@i}W zHQG(BLh{MHU*zHLSR<0}Te7AE!-e+Eq&SRb&b8!b>3DkMb&Ug zK~c*+gVRw!1<98>`lbxt?-;T?fIi+_ECCtH`rEuynXD9!NSY_zxC=E^m3M%DC*a3oPWmkm)Ab_a z!n(0n*z!RV6RgjU1~mR3!tbL70LaT1*o&Fc*v1GkRUv>d65u&vG*$UBZ&G3>385CD zcl(=8C*Hn3&ql=tWsix`mS(MM4oQQ{>Vox9_)46 zaLE3j`L8f5~odP)*+MF@;jp7OyfU70x9oxW4Hvy)QYj+B!q|@_;mO7}E>2D^)&?N;1r7 zm!L@JC}hn1waz9Z)7Lb5?;TY&!|lvU2${AqIvpr;!}JD}+*)`gP*jD-T~Z?O{m>s5Y8z2TXL86i z7hawo;#?%3>AzJKd;$G7Mz?f>cC^FGY$SR6(R+p#wiU_0nWFe7eLP1c#cfOKZbok< znDy^h$jq(Jlk|KI0S+E`F@kjd)rUe;|0;Bk#C5zJg9RB41Bvf1#yo)52dz@ZTh#yu zce|Xv0H9_||K@wVXf?A8U&bjUmh4b*YX*M+B zw<4tH8vA7hgayUO3)$m$9!(=HQuFj&UPlfmiv|G+nMa4mSH4jN=IYEo5+qLs=R zi(;!=QpS0VvpodNwoRiPBbm=t)TSIH&UrsaNw}4YcSQ5pMLe6&AI_#iyNVFm(k%c` zmRCH1B&-2STm-Y2P{po4^kje_W1|GTFPTHpKu?(z;MJIUWC?-93n7K9!FV?K3yTG0 z%+y?L2K#M)Mi|JGy8c+N^1@e_CxX4c2krxA7ni*S%U$Mpq7lluw@I46b^$Gm!AuD4?0R^m7#_oR%hFbisEXID@sZ|Q;9u~) z;Gpjuga}D#_8R7ZO=NxEhs*f~$>3rrYD}P36y}B+ha)wuv`fOsfCmS@ps#j3?2$Z$ ztjlI<^1Q-mGg!DL*(IA+g@6$tSV8$dH-B9iL0#MvLK_Y9lSAO8@!(;Xf=vy1OWVul zx?PWuYyw7fN3QWn_kgqvqU3 z-Ngihd>BD3qRYKd)%D7$4n@tc<4oU{y4U4xqZ@V7TJqjU=x_d;9PctG$U02cl3Tbp@VQ|Ncp!Y`??Qz1yAb6 zeG_jrF7*+DC-Jk;heH`A1WEBvt0(S1ZiA80$x3}O?N4{RVD2Y4+1J1>l4k1XpSE(z zurg@h=>ugge6rsmVN5`Yx`P2hbSn zQd9}HBMnQ)nz9i4YmX5m69VmmBh+=QDo_6NyO6&*Kt1+6O5p8xqw8Sp=))Vmq=u zvymoAY6RxXvOmm3qOstTFt#GfY^psx)S|0}64gL&C^lP8Z{)Ws4LvW~F2+ z>eVDx?Q}RlJmoHl27LkY*f{)zqIlu8$>ER3TX7(o)R2yWO5&8k*{Q>O4No)`Z^Zk$ zjOD*xg$b;VvBqSz9UEel_U#J(_VLwR`^fBHSzfM2cl7b(xjoef(v3+h5Zn7)aE}ej zr!tP{8gHf>IfH5$m5*ct1_9+s3{KbMGkDNSQt1O{=cTp6e3;`)5fti63;{G02g&-B zm5Cf>;<)c)sB{U9O@=X-A2~ZYXu0qxdL%LiRfkt0V`)S$$S#T!lc0iTF>(Ek)wNK(FY6HY6y>UIu-xeMNJH$#&T3L zAopJ$L+caACS_EaBIJQ2SIi_n-}u9nPIb(OX@j2@UgP1nAFdIv8h^ZwZRTyR*+Ui# zgIfm20HxdY-U#y!Q8tRE-WIJ_i$UX_`07gC$CmT{*kW0u6E;U#ir^;3WK`)qps zA!J@A;{|M9YoY`;uYdhBFwZ{YD#EFMVgRw^R30bS_@wCRL2&S%6$zuRNQU|jUD7Rx z+omD(|L!gi5m^3iedQzR!`>k)xmo>0?WJF*NpOn0yKx<_oNg3fq8$q(;p%1J;QIFjD3GOj?b0C$ZiGx(h{`+cX%N% zQXTh#14Q6<9eR{m4(V~c5TmpOou|w}l|}Te#ctWx-5omQzYNhEAY{IOrhu|t9<`kl zB2d>sL%ZrVyuJ5%-N{h{kq)xo9i>kzp~hX|ME| zNp%*%wh-^kxw3=?_enWHl>2he5FE>a=@NC|-dxBl&1ZI{As;_NPL3+fWZRXaV#YNr z3CWOH3ZY1S7Coi&YGYb2oek64s;-m`AM*Op-Kf5ND*s0W%!2EhV8?cQkz+l8O<(3b zgS;GexU$_-l9s?TuEp^5Ox_ED$YZj8Zz(QKOOQ`Y{dLikE9J1VwwNPCMM0t|`kms<<0wdW9UNDto!ZP#D;Up{s}7m*{z2?}>)KflMW50~aF zRIul21KIKSjb3|Oy@CM3g#;OX53;VS5~q3t_BykHq{H4NWlQRD^&@@xvE5@1%Y>XV z4)!_<%^56R2hR4%(SV)jbJQl*b!Dx{_bryoAF4Y*bO4okPd02iZUSPq+O(!4Bt0|K zK^2EKU=!%>d8@5a&bK+_-jh76Eq|~FCc@Ad5P3cWP*eo4z6>a?9spL?o1|J?9_Jh2 z5&9#K7LXSI}L@pHBZNA zk_j&d1hbSCaRsqY$^v2NO12o+tgNOJg3g;jD|}ruf((p_+0EjFnQj28R7#Sy&Fe`| z!JJZjLFOU30eC5}?bOYYr@2!=VHmsd1`g^a(f)E2JeNJZTcFGosx?0Ry2%C&l!0lN zt=(Rj75IajY>+oz>*K(ND)DxHN)P7yankhRmViND=*)+|!dd)rh0 z+ZS20(WZS<@_8e2pQ`fA4=z06!Z3JTj&+FTPa??TA&15_uq?cL zMRYK}%;UBu=ed7VSa?yO)e&pYe0{WqjM%{tFK)hA!3yc5!(=A}PDrKcyKU`VQ!dLG zy;F%%lUL~2U0%xetj&+Is25A_Tv~O!-N5t9EswjyfYp*~I~|V(eeZOX*h!LWJ7wO% zk&=jDgmfvq+CVx4&x}P$_g3DIauYxzM5p=?xfSDBNoe#eTuWk^P5Yu`#H&7{qZ;P zvgF=6l(82{ais})qYWEdim06TsvEk$$p)oGE#K*QGjxznsD*rw^ifwC?DKEBBGh$U zzDRs2P-Lu{I7%+*u})>pophTFLH=Ze!Z+CukfuV}fTZk$KSO z5lDg^Ggc{q{8sD$Tr+Zc+~pL49USVWl0U`_E4O`sNRH&gFdN5_9PyHG;JHJ(I(^yV zfnq~!u@ZzdgpFH5)*%vO8I%_uEm%I(?80*&m|6YBQiuVKef~6rxHE(R1>TR)YzCLP z@XPK(5k!nGq+oF)Y})MoH}-MoOp8qF-vpByftM>7yjq$h8xDq0$>*zN>~=Rc~7 z#7|Y_Yy=7Fs{|soFDz>bihv@CkdX(BO%4}63w6#+Lo6xAY&qb{)7B~L%!cK}1p5s- zLh;rWipE+xJc&Lpn-P_4(?Z^M%FD+!e1m+|u%j9prk>|=y38m$!ynrUFwN4GGJcSk z}li_ndq`pQLTU+-AE!Ehd272h1ZUm<~gnJhDr^r#?=n(qKbb}qt7jLW>V z*zjP>z+=pXZ5rgi4vCabc)3kM5b!^%@TFnjgbztOT18AhJ=W|v$si}^L4}vvrV0tA zra-I1g3q?3DU~^U#XhUW-9|-udyxy;0{CI|n>243%y_m?-^)yzuM8e_UjR^qJIVIV z6iaz~w;kp#8YrEb;TC}*X9?nI71A}AZA#K@ZCB|Wg0&0cJ}q|+w0SNA%-G!2}7*-d@lPXdB2Yst<-+cIlo$bJbxXr{F7ZhECe-P1?Oi`Y9g zXlUhf_^??&9)xRZM!xG;1$1YdOC|qMX@+%vCJpa6Tx5!3>FsF8A}tqR2mu=X><=zZiEC^aQ=Kh`qn^&8 zxJo%ptswC0j6+@r@~4Q!@QF^_C%{aG~8YgGaN0AJXN*?pkw8N9wm>Qu6ZHL3` zFrDD59@38W-=uF%eK+Y_*&4tnAn7iREzYq1DYqz||Ic#E^fM~=7E@2iMW4T>b0om} z)3sHk5u9}yW5PUf7e?ZNB9zCQIyUs{GX?Pf=6n9DkrpM#AZhX`g*bv?4~g?no~>c9 z5jc|a-+30q=^}sXpxR=%oi5v~o;*bsp4=W#&wG`f!`{?ETR`&sRS6lRO&xSZi(S%U z{Zj{}vx`ghL-?E23dKjH+c6PCIbZSA@HK8@V$?l^+de!_Q`X z3$lD^_KR1k)&8%d%P=Ps!dxBwu;% zp@Iu$ob?%r6!P$&(M#LtSFEmI0hJzZr$5%~@CTJdUp*g7bNfK0%hq0x4g7-&oX6Ae zsch90Zn(Y~&$x%tycYlCjkfSx=K~dsTLl!Iw_n2Cw)0cX%Oxnd}=zA1K^Z zSnkDIFC@vTsdheYN;fwG-6j|61cS)8pEx8* z!026x1eoN-za)A06rtlC{@q@~y7^dG@Kc)xsXdbLyXU%h%9)VYElF?Nul|-Y>t(%+ zRcJt+y~lQMGQG!+L^|iKwc`$~5dG@BL0!kA4fNA|$+w;lsWNYK;v1F&PnM47FP?jN z*+^p3u#kbn8L*eUEC1_PhOjYtTEbR3>c4kNxuS+IM33P&JD`mzpB%W7Hs;>sOS;a@DdAs=-Sd z*!{7fC|BX;iCDIMu#W7z2iUYGkiC$k2HFSjxV|2Q4YnkWFMIC61F4;9MF*gA0$ulg za>NUB2!i5Hzk5oOcyh2{8nnl1(Ai@UNmce3pdkRW#Yb-GKyK{Ef%XT@sr$;rtR~Lu zV+l0YWy$GhXD>_O1Z>JY_kYc#Qgr+p2O$R0pc}J!|EMY>Y=k6E?Pn$}gGyw3g z52y8l?Q$FOzR$p|dS44&Rkk<|jB0I~TbtabHm$rqR%zQ~{oZl3ezsDKY^TB7s??qK z^q*RerK#`U^FkERnxDZ-eA~a$(=}NOs@V=dLht?EEOdk>A*P0i-ekX*kbEcMQfQ{svrsZja7cgrJimQQp%l7 z57lJeB8jg{XMIeV*lD7OC7j8k=`UbO0F$79hUPQY1%iSuVELi*SRK-jDv~)Lvjprp zq6RlX-brmx9w#nfj6g-9A+0#iow?)aD3F4|5IDkDRG#kWjtVW(rw{f)0AaD=rb z^IR=vaOEJF@%{WOYz@EYKqU=#ow=q9eFy;ks6~<@H$ej3uj_|8siOcz*W5?uKR)wR z-?!ex(d0LF!IO^hE&v=QSZpIj%Y^3}aaV+`UWK!DpdZ5{q7kvW7t7c9A%`)??%0KJ zNF+|USqlO^Cv0fzH>@H3q8omwP^XN^%Uf5P`OZPDC?ui)z5io*R;gV6)oZ+i#)_!? zr5Oj6OJ~CpzC>{Sdow%+^xPH(g%u?T>Bl#&S}gl+-rgOIgqvoo{ErzYZYkJxC4o&g z@VtkEVkcQbA8)_nrF4y@xz>FMmI0(yi$msgMcYgp#Qt!r8aRx$r_jMY{9%wogjYZnANE3E1M-vwgCJz1J0to1*3Z=$A!uPApQUdszsE;T!}b?W(T-KV+Wz39M9s#^a4?t&1FB<3@jD zzgSWx-)OWsLQwS($`SsIv1jENVWF&wL?BKf1O(K#2c(MVZIhq&?rxR@O#-x zum7xCCG+BCT|z?F( znXjo2U2tV>`Kkk)4-`(~g|E+nFba|{;aE0jwmnMx!sCFKv~!T?4DxG&tWcJcL!Kg8y-t(Zht?tdx)C=+of*s9JiWQg zQKr*h9p)xv8Y9r9efcc+Hbv*cL+V^_R2be^I?7ftp!3}Cxj2t9)V1w>(>4@31SUaJ zf&7D6rFr}atu7d0dfHr+GE&$^|R%1xV!Vp^g z=JK&%w+0o4s|hZ{N))e>V0?h@_wA!0bYH5bdZCInu_XK8w_tU6gKX3&MqPP+s!aQ; z6_Knt+c(HCwj4QMskwHUE#Nk^7@fOmz#CINj27RhYE^-IAXU+CKs_o2`Zu?ytSM(a35)ZRAtJ&}%K8iIect3c@ z?s~8ZLldcTx_S(`r6`0Igb%}OLBmWIHQ@~P_2uA98bF9ZcG5_9jvE3KLaSexqhz%n z^ATvw9nn)5W1kS$g^RdRtv4$_H8h zp2Pg>KA<&jHh zQ|X*%nutkwK~*)&u_$-lX3__8zwC>pwqAU67QHKs}9&}T+FIq$qcWQolr3PJV{Zvbe^JZAKWx^ROCEI}ZU1jD^{713@s@$x1etM|Cur z&-e5SpD&;v6wep>GiCERNOB_^f+9|{AX;R}T#+XQ=z^)O!7h{~+;;)NQDlkH&v5Hl zQhA(w_6OslJBafCRU;epOR6OZo)`dh!4DY;C2$0ux(R;Vs$&pd0zXcy)}h1#=OFk- zcJtTMv6EO<^BRgseS3cB9li=;_gC%*Nlux86)tw(mFo z^ltOrtI4u=x0XX^O?8uYMR>SXrdjshe1sZs@wgQbL0;aqKsl3KD0{NVoxA)8%_zuY z2mLu5LIAx93t0Q>>0z8xlWgz@bFA5P9vZbNgO-{i=1k|Q@iuE-fTddWprvtVHMCQC zfph3UrQ(wq!wms%EsUP&7fsFIXu!y)GmZL%TnEs)X%`4hjp|gow<_fge*Ux0nWSXnW9!b9uFZ zjOPS;2}TfyplXdmLbeR(L>K65x}f%^AgKb+xtecM7h87;2*Xk}HUV4^WJwkssqn93 WIv{^Q@)uBm0+fIMjr~`B*!d6QGmVP? literal 0 HcmV?d00001 diff --git a/src/skins/green/imgs/pws-pc-watch-bg.png b/src/skins/green/imgs/pws-pc-watch-bg.png new file mode 100644 index 0000000000000000000000000000000000000000..2e4165bb4e8c2232fdc55ed2a4ff696eb54f86ff GIT binary patch literal 115734 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 s&m));?F&1uI4b1f$bzSfMKhD6Uv;Y7A literal 0 HcmV?d00001 diff --git a/src/skins/green/imgs/pws-product-shop-car.png b/src/skins/green/imgs/pws-product-shop-car.png new file mode 100644 index 0000000000000000000000000000000000000000..cbb64ea1f3f8cac9b972a4972d0075f7d2963b7e GIT binary patch literal 4200 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 literal 0 HcmV?d00001 diff --git a/src/skins/green/imgs/pws-zan.png b/src/skins/green/imgs/pws-zan.png new file mode 100644 index 0000000000000000000000000000000000000000..9075cba3388504d91d0c81224ccd25b07a0fa1d8 GIT binary patch literal 6359 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 Z{})b7j%B~Ick}=N002ovPDHLkV1msi5M}@X literal 0 HcmV?d00001 diff --git a/src/skins/red/_red-mobile.scss b/src/skins/red/_red-mobile.scss new file mode 100644 index 0000000..87c09f9 --- /dev/null +++ b/src/skins/red/_red-mobile.scss @@ -0,0 +1,4 @@ +@import '../_common/basic-mobile-style.scss'; +@import './config.scss'; + +@include generate-skin-basic-mobile-style($--skin-configs); diff --git a/src/skins/red/_red-pc.scss b/src/skins/red/_red-pc.scss new file mode 100644 index 0000000..8a13764 --- /dev/null +++ b/src/skins/red/_red-pc.scss @@ -0,0 +1,4 @@ +@import '../_common/basic-pc-style.scss'; +@import './config.scss'; + +@include generate-skin-basic-pc-style($--skin-configs); diff --git a/src/skins/red/config-common.scss b/src/skins/red/config-common.scss new file mode 100644 index 0000000..38c88ad --- /dev/null +++ b/src/skins/red/config-common.scss @@ -0,0 +1,244 @@ +// 主题名称 +$--skin-type: 'red'; + +// 主题色 +$--skin-primary-color: #d31a34; +// 次要主题色 +$--skin-sub-primary-color: #ffd595; + +// 皮肤基础配置 +$--skin-basic-configs: ( + // 主题名称 + 'skin-type': $--skin-type, + + // 主题色 + 'primary-color': $--skin-primary-color, + // 次要主题色 + 'sub-primary-color': $--skin-sub-primary-color, + // #d73148 + 'primary-light-1': get-opacity-color($--skin-primary-color, 1), + // #dc485d + 'primary-light-2': get-opacity-color($--skin-primary-color, 2), + // #e05f71 + 'primary-light-3': get-opacity-color($--skin-primary-color, 3), + // #e57685 + 'primary-light-4': get-opacity-color($--skin-primary-color, 4), + // #e98d9a + 'primary-light-5': get-opacity-color($--skin-primary-color, 5), + // #eda3ae + 'primary-light-6': get-opacity-color($--skin-primary-color, 6), + // #f2bac2 + 'primary-light-7': get-opacity-color($--skin-primary-color, 7), + // #f6d1d6 + 'primary-light-8': get-opacity-color($--skin-primary-color, 8), + // #fbe8eb + 'primary-light-9': get-opacity-color($--skin-primary-color, 9), + + // ---------- 背景色 ---------- // + // 主要背景色(以侧边栏主体背景色定义) + 'main-bg-color': #a20a1f, + // 次要背景色(以侧边栏头部背景色定义) + 'sub-bg-color': #b60f26, + // 面板背景色 + 'panel-bg-color': #8d0707, + // 禁用背景色 + 'disabled-bg-color': #e9ecee, + + // ---------- 字体色 ---------- // + // 正文字体色 + 'main-text-color': #ffffff, + // 正文高亮字体色 + 'main-highlight-text-color': $--skin-sub-primary-color, + // 描述字体色 + 'describe-text-color': rgba($--color-white, 0.6), + // 禁用字体色 + 'disabled-text-color': #9e9e9e, + // 面板字体色 + 'panel-text-color': $--color-white, + // 面板高亮字体色 + 'panel-highlight-text-color': $--skin-sub-primary-color, + + // ---------- 边框色 ---------- // + 'main-border-color': rgba($--color-white, 0.1), + + // ---------- 滚动条 ---------- // + 'panel-scrollbar-color': rgba($--color-white, 0.1), +); + +// 皮肤基础组件配置 +$--skin-component-configs: ( + // 主要 tab 头部背景色 + 'main-tab-header:bg-color': map.get($--skin-basic-configs, 'sub-bg-color'), + // 主要 tab 头部字体色 + 'main-tab-header:text-color': rgba($--color-white, 0.7), + // 主要 tab 头部 hover 字体色 + 'main-tab-header--hover:text-color': $--color-white, + // 主要 tab 头部激活字体色 + 'main-tab-header--active:text-color': $--color-white, + // 主要 tab 头部激活选项线条背景色 + 'main-tab-header-line--active:bg-color': $--color-white, + // 主要 tab 头部阴影开始颜色 + 'main-tab-header-shadow-start:color': map.get($--skin-basic-configs, 'sub-bg-color'), + // 主要 tab 头部阴影结束颜色 + 'main-tab-header-shadow-end:color': rgba(62, 62, 78, 0), + // 主要 tab 头部红点颜色 + 'main-tab-header-reminder:color': #f24453, + // 主要 tab 主体背景色 + 'main-tab-body:bg-color': map.get($--skin-basic-configs, 'main-bg-color'), + // 主要 tab 主体滚动栏颜色 + 'main-tab-body:scrollbar-color': #d31a34, + + // normal tab 激活项线条背景色 + 'normal-tab-header-line--active:bg-color': map.get($--skin-basic-configs, 'primary-color'), + + // 主题按钮背景色 + 'primary-button:bg-color': map.get($--skin-basic-configs, 'primary-color'), + // 主题按钮字体色 + 'primary-button:text-color': $--color-white, + // 主题按钮 hover 背景色 + 'primary-button--hover:bg-color': map.get($--skin-basic-configs, 'primary-light-2'), + // 主题按钮 hover 字体色 + 'primary-button--hover:text-color': $--color-white, + // 主题按钮 active 背景色 + 'primary-button--active:bg-color': map.get($--skin-basic-configs, 'primary-light-1'), + // 主题按钮 active 字体色 + 'primary-button--active:text-color': $--color-white, + // 主题按钮 disabled 背景色 + 'primary-button--disabled:bg-color': map.get($--skin-basic-configs, 'disabled-bg-color'), + // 主题按钮 disabled 字体色 + 'primary-button--disabled:text-color': map.get($--skin-basic-configs, 'disabled-text-color'), + + // 侧边栏按钮背景色 + 'aside-menu-button:bg-color': rgba($--color-white, 0.1), + // 侧边栏按钮字体则 + 'aside-menu-button:text-color': $--color-white, + // 侧边栏按钮 hover 背景色 + 'aside-menu-button--hover:bg-color': rgba($--color-white, 0.2), + // 侧边栏按钮 active 背景色 + 'aside-menu-button--active:bg-color': rgba($--color-white, 0.15), + + // pc 端直播状态标签颜色 + 'pc-live-status-tag:color': ( + 'unStart' rgba(#ffffff, .6), + 'waiting' #ffd595, + 'live' #f06e6e, + 'end' rgba(#ffffff, .6), + 'playback' #ffd595, + 'stop' #f06e6e, + ), + // mobile 端直播状态标签颜色 + 'mobile-live-status-tag:color': ( + 'unStart' rgba(#ffffff, .6), + 'waiting' #ffd595, + 'live' #f06e6e, + 'end' rgba(#ffffff, .6), + 'playback' #ffd595, + 'stop' #f06e6e, + ), +); + +// 皮肤公用页面配置 +$--skin-page-common-configs: ( + // 聊天消息用户昵称字体色 + 'chat-msg-user-nickname:text-color': map.get($--skin-basic-configs, 'main-text-color'), + // 聊天消息特殊身份昵称字体色 + 'chat-msg-user-special-nickname:text-color': map.get($--skin-basic-configs, 'main-highlight-text-color'), + // 聊天消息用户头衔背景色 + 'chat-msg-user-actor:bg-color': map.get($--skin-basic-configs, 'sub-primary-color'), + // 聊天消息用户头衔字体色 + 'chat-msg-user-actor:text-color': #630000, + // 聊天消息用户设置昵称图标字体色 + 'chat-msg-user-set-nick-icon:text-color': map.get($--skin-basic-configs, 'main-highlight-text-color'), + // 聊天消息时间字体色 + 'chat-msg-time:text-color': map.get($--skin-basic-configs, 'describe-text-color'), + // 聊天提示文案字体色 + 'chat-msg-list-tips:text-color': map.get($--skin-basic-configs, 'describe-text-color'), + + // 聊天消息气泡背景色 + 'chat-msg-bubble:bg-color': #ffefd7, + // 聊天消息气泡字体色 + 'chat-msg-bubble:text-color': #830b0b, + // 聊天消息特殊身份气泡背景色 + 'chat-msg-bubble-special:bg-color': #ffd892, + // 聊天消息特殊身份气泡字体色 + 'chat-msg-bubble-special:text-color': #830b0b, + + // 聊天消息回复内容字体色 + 'chat-msg-quote-content:text-color': rgba(#830b0b, 0.8), + // 聊天消息回复内容边框色 + 'chat-msg-quote-content:border-color': rgba(#830b0b, 0.2), + // 聊天消息特殊身份回复内容字体色 + 'chat-msg-special-quote-content:text-color': rgba(#830b0b, 0.8), + // 聊天消息特殊身份回复内容字体色 + 'chat-msg-special-quote-content:border-color': rgba(#830b0b, 0.2), + // 聊天消息回复按钮字体色 + 'chat-msg-quote-button:text-color': map.get($--skin-basic-configs, 'main-highlight-text-color'), + // 聊天回复引用背景色 + 'chat-quote-msg:bg-color': #721a1a, + // 聊天回复引用字体色 + 'chat-quote-msg:text-color': map.get($--skin-basic-configs, 'main-text-color'), + + // 聊天消息翻译按钮字体色 + 'chat-msg-translate-button:text-color': rgba($--color-white, 0.6), + // 聊天消息翻译按钮 hover 字体色 + 'chat-msg-translate-button--hover:text-color': map.get($--skin-basic-configs, 'main-highlight-text-color'), + // 聊天消息翻译成功提示字体色 + 'chat-msg-translate-finish:text-color': rgba(#830b0b, 0.6), + // 聊天消息特殊身份翻译成功提示字体色 + 'chat-msg-translate-finish-special:text-color': rgba(#830b0b, 0.6), + + // 聊天室更多消息按钮背景色 + 'chat-msg-more-button:bg-color': map.get($--skin-basic-configs, 'primary-color'), + // 聊天室更多消息按钮字体色 + 'chat-msg-more-button:text-color': #ffffff, + // 聊天室更多消息按钮 hover 背景色 + 'chat-msg-more-button--hover:bg-color': map.get($--skin-basic-configs, 'primary-color'), + // 聊天室更多消息按钮 hover 字体色 + 'chat-msg-more-button--hover:text-color': #ffffff, + + // 打赏消息字体色 + 'chat-reward-msg:text-color': rgba($--color-white, 0.6), + // 自定义消息字体色 + 'chat-customer-msg:text-color': rgba($--color-white, 0.6), + // 红包领取消息背景色 + 'chat-redpaper-receive-msg:bg-color': rgba($--color-black, 0.3), + // 红包领取消息字体色 + 'chat-redpaper-receive-msg:text-color': $--color-white, + // 系统消息字体色 + 'chat-system-msg:text-color': rgba($--color-white, 0.6), + + // 章节字体色 + 'chapter-item:text-color': map.get($--skin-basic-configs, 'main-text-color'), + // 章节高亮字体色 + 'chapter-item--active:text-color': map.get($--skin-basic-configs, 'main-highlight-text-color'), + // 章节边框色 + 'chapter-item:border-color': rgba($--color-white, 0.1), + + // 成员列表字体色 + 'member-list-item:text-color': map.get($--skin-basic-configs, 'main-text-color'), + // 成员列表特殊身份字体色 + 'member-list-item-special:text-color': map.get($--skin-basic-configs, 'main-highlight-text-color'), + + // 点赞按钮背景图 + 'like-button:bg-image': './imgs/pws-zan.png', + // 点赞数量字体色 + 'like-count-number:text-color': map.get($--skin-basic-configs, 'main-text-color'), + // 点赞数量背景色 + 'like-count-number:bg-color': rgba(map.get($--skin-basic-configs, 'main-bg-color'), 0.8), + + // 页面广告背景色 + 'page-advert:bg-color': map.get($--skin-basic-configs, 'main-bg-color'), + // 页面广告字体色 + 'page-advert:text-color': map.get($--skin-basic-configs, 'main-text-color'), + // 页面广告箭头字体色 + 'page-advert-arrow:text-color': map.get($--skin-basic-configs, 'main-text-color'), + + // 互动二次入口按钮背景色 + 'interactive-entrance-button:bg-color': rgba($--color-white, 0.1), + // 互动二次入口按钮 hover 背景色 + 'interactive-entrance-button--hover:bg-color': rgba($--color-white, 0.2), + // 互动二次入口按钮字体色 + 'interactive-entrance-button:text-color': $--color-white, + // 互动二次入口箭头字体色 + 'interactive-entrance-arrow:text-color': rgba(map.get($--skin-basic-configs, 'main-text-color'), 0.8), +); diff --git a/src/skins/red/config-iar.scss b/src/skins/red/config-iar.scss new file mode 100644 index 0000000..f05521f --- /dev/null +++ b/src/skins/red/config-iar.scss @@ -0,0 +1,111 @@ +@import './config-common.scss'; +@import './config-pc.scss'; + +// 皮肤互动功能公用配置 +$--skin-iar-common-configs: ( + // 挂件字体色 + 'iar-pendant:text-color': map.get($--skin-basic-configs, 'main-text-color'), + + // 商品库内容背景色 + 'iar-product-list-content:bg-color': #820819, + // 商品库图标图片 + 'iar-product-list-shop:icon-image': './imgs/pws-product-icon.png', + // 商品库图标图片(职位) + 'iar-product-list-recruitment:icon-image': './imgs/pws-product-icon-recruitment.png', + // 商品库标签背景色 + 'iar-product-list-label:bg-color': rgba($--color-white, 0.1), + // 商品库标签字体色 + 'iar-product-list-label:text-color': $--color-white, + // 商品库商品名称序号背景色 + 'iar-product-list-name-number:bg-color': rgba($--color-white, 0.35), + // 商品库空状态图标图片 + 'iar-product-list-empty:icon-image': './imgs/pws-product-shop-car.png', + // 商品库商品下边框颜色 + 'iar-product-list-item:border-color': rgba($--color-white, 0.1), + // 商品库商品名称字体色 + 'iar-product-list-good-name:text-color': map.get($--skin-basic-configs, 'main-text-color'), + + // 置顶公告背景色 + 'iar-bulletin-top-banner:bg-color': #ffefd7, + // 置顶公告字体色 + 'iar-bulletin-top-banner:text-color': #830b0b, + + // 问答背景色 + 'iar-qa-body:bg-color': map.get($--skin-component-configs, 'main-tab-body:bg-color'), + // 问答过滤层背景色 + 'iar-qa-filter:bg-color': map.get($--skin-component-configs, 'main-tab-body:bg-color'), + // 问答过滤层边框色 + 'iar-qa-filter:border-color': map.get($--skin-component-configs, 'main-tab-body:bg-color'), + // 问答过滤层文案字体色 + 'iar-qa-filter-desc:text-color': rgba(map.get($--skin-basic-configs, 'main-text-color'), 0.6), + // 问答选择字体色 + 'iar-qa-select:text-color': map.get($--skin-basic-configs, 'main-text-color'), + // 问答选择箭头边框色 + 'iar-qa-select:border-color': rgba(map.get($--skin-basic-configs, 'main-text-color'), 0.8), + // 问答节点背景色 + 'iar-qa-item:bg-color': #93171d, + // 问答节点内容字体色 + 'iar-qa-item-content:text-color': map.get($--skin-basic-configs, 'main-text-color'), + // 问答节点信息字体色 + 'iar-qa-item-info:text-color': map.get($--skin-basic-configs, 'describe-text-color'), + // 问答节点更多字体色 + 'iar-qa-item-more:text-color': map.get($--skin-basic-configs, 'main-highlight-text-color'), + // 问答节点边框色 + 'iar-qa-item:border-color': #A20A1F, + // 问答新消息按钮背景色 + 'iar-qa-new-msg-button:bg-color': rgba($--color-white, 0.85), + // 问答新消息按钮字体色 + 'iar-qa-new-msg-button:text-color': #830b0b, + // 问答没有更多文案字体色 + 'iar-qa-no-more:text-color': map.get($--skin-basic-configs, 'describe-text-color'), +); + +// 皮肤互动功能 PC 配置 +$--skin-iar-pc-configs: ( + // 问答选择选项背景色 + 'iar-pc-qa-select-option:bg-color': map.get($--skin-component-configs, 'main-tab-header:bg-color'), + // 问答选择选项 hover 背景色 + 'iar-pc-qa-select-option--hover:bg-color': rgba($--color-white, 0.1), + // 问答选择选项字体色 + 'iar-pc-qa-select-option:text-color': rgba(map.get($--skin-component-configs, 'main-tab-header:text-color'), 0.8), + // 问答选择选项激活字体色 + 'iar-pc-qa-select-option--active:text-color': map.get($--skin-component-configs, 'main-tab-header:text-color'), + // 问答选择选项边框色 + 'iar-pc-qa-select-option:border-color': rgba($--color-white, 0.1), + // 问答表情选择图标字体色 + 'iar-pc-qa-ask-emotion:text-color': $--color-white, + 'iar-pc-qa-ask-emotion:background-filter': grayscale(100%) brightness(200%), + + // 中奖记录弹层文字颜色 + 'iar-pc-lottery-record-msg:text-color': #e4e4e4, +); + +// 皮肤互动功能 Mobile 配置 +$--skin-iar-mobile-configs: ( + // 问答空数据的图标图片 + 'iar-mobile-qa-no-data:icon-image': './imgs/pws-qa-no-data-icon.png', + // 问答消息发送入口图片 + 'iar-mobile-qa-ask-entry:icon-image': './imgs/pws-qa-entry.png', + // 问答输入框外层背景色 + 'iar-mobile-qa-input-wrap:bg-color': map.get($--skin-component-configs, 'main-tab-header:bg-color'), + // 问答输入框背景色 + 'iar-mobile-qa-input:bg-color': rgba($--color-black, 0.1), + // 问答输入框字体色 + 'iar-mobile-qa-input:text-color': map.get($--skin-basic-configs, 'main-text-color'), + // 问答表情选择图标字体色 + 'iar-mobile-qa-ask-emotion:text-color': $--color-white, + 'iar-mobile-qa-ask-emotion:background-filter': grayscale(100%) brightness(200%), + // 问答发送按钮字体色 + 'iar-mobile-qa-ask-send-button:text-color': $--color-white, + + // 图文直播头部字体色 + 'iar-mobile-tuwen-live-header:text-color': rgba(map.get($--skin-basic-configs, 'main-text-color'), 0.8), + // 图文直播名称字体色 + 'iar-mobile-tuwen-live-content-name:text-color': map.get($--skin-basic-configs, 'main-highlight-text-color'), + // 图文直播时间字体色 + 'iar-mobile-tuwen-live-content-time:text-color': map.get($--skin-basic-configs, 'describe-text-color'), + // 图文直播内容字体色 + 'iar-mobile-tuwen-live-content:text-color': map.get($--skin-basic-configs, 'main-text-color'), + // 图文直播暂无更多字体色 + 'iar-mobile-tuwen-live-no-more:text-color': map.get($--skin-basic-configs, 'describe-text-color'), +); diff --git a/src/skins/red/config-mobile.scss b/src/skins/red/config-mobile.scss new file mode 100644 index 0000000..787709d --- /dev/null +++ b/src/skins/red/config-mobile.scss @@ -0,0 +1,154 @@ +@import './config-common.scss'; + +// 皮肤 Mobile 端页面配置 +$--skin-page-mobile-configs: ( + // 富文本字体色 + 'mobile-rich-text-content:text-color': map.get($--skin-basic-configs, 'main-text-color'), + + // 引导页背景色 + 'mobile-splash:bg-color': map.get($--skin-basic-configs, 'main-bg-color'), + // 引导页倒计时外层背景色 + 'mobile-splash-live-count-down-wrap:bg-color': map.get($--skin-basic-configs, 'sub-bg-color'), + + // 页脚字体色 + 'mobile-page-footer:text-color': rgba(map.get($--skin-basic-configs, 'main-text-color'), 0.6), + + // 基础信息频道标题字体色 + 'mobile-basic-info-channel-title:text-color': map.get($--skin-basic-configs, 'main-text-color'), + // 基础信息开始时间字体色 + 'mobile-basic-info-start-time:text-color': map.get($--skin-basic-configs, 'main-text-color'), + // 基础信息页面浏览次数字体色 + 'mobile-basic-info-page-view:text-color': map.get($--skin-basic-configs, 'main-text-color'), + // 基础信息主持人字体色 + 'mobile-basic-info-publisher:text-color': map.get($--skin-basic-configs, 'main-text-color'), + // 基础信息点赞数字体色 + 'mobile-basic-info-like:text-color': map.get($--skin-basic-configs, 'main-text-color'), + + // 倒计时方块背景色 + 'mobile-count-down-square-item:bg-color': #a20a1f, + // 倒计时方块远点背景色 + 'mobile-count-down-square-item-dot:bg-color': #a20a1f, + // 倒计时方块数字字体色 + 'mobile-count-down-square-item:text-color': map.get($--skin-basic-configs, 'main-text-color'), + // 倒计时方块文案字体色 + 'mobile-count-down-square-item-word:text-color': map.get($--skin-basic-configs, 'main-text-color'), + // 倒计时方块边框色 + 'mobile-count-down-square-item:border-color': #bb2724, + + // 直播预约按钮背景色 + 'mobile-live-booking-button:bg-color': map.get($--skin-basic-configs, 'primary-color'), + + // 关注按钮背景色 + 'mobile-follow-button:bg-color': map.get($--skin-basic-configs, 'sub-primary-color'), + // 关注按钮字体颜色 + 'mobile-follow-button:text-color': #830b0b, + + // 聊天消息输入框背景色 + 'mobile-msg-input:bg-color': rgba($--color-white, 0.1), + // 聊天消息输入框字体色 + 'mobile-msg-input:text-color': map.get($--skin-basic-configs, 'main-text-color'), + // 聊天消息输入框占位符字体色 + 'mobile-msg-input-placeholder:text-color': rgba(map.get($--skin-basic-configs, 'main-text-color'), 0.6), + // 聊天消息输入框滚动条颜色 + 'mobile-msg-input:scrollbar-color': #d31a34, + // 聊天消息输入框图标字体色 + 'mobile-msg-input-suffix-icon:text-color': rgba(map.get($--skin-basic-configs, 'main-text-color'), 0.7), + + // 聊天消息发送按钮字体颜色 + 'mobile-msg-send-button:text-color': map.get($--skin-basic-configs, 'main-highlight-text-color'), + + // 表情选择面板背景色 + 'mobile-emotion-panel:bg-color': #B60F26, + // 表情选择面板下的发送按钮字体色 + 'mobile-emotion-panel-send-button:bg-color': map.get($--skin-basic-configs, 'main-highlight-text-color'), + // 表情选择面板下的输入框背景色 + 'mobile-emotion-panel-msg-input:bg-color': rgba($--color-white, 0.1), + // 表情选择面板下的输入框字体色 + 'mobile-emotion-panel-msg-input:text-color': $--color-white, + // 表情选择面板下的输入框占位符字体色 + 'mobile-emotion-panel-msg-input-placeholder:text-color': rgba($--color-white, 0.6), + // 表情选择面板下的输入框图标字体色 + 'mobile-emotion-panel-msg-input-suffix-icon:text-color': rgba($--color-white, 0.7), + // 表情选择类型选择背景色 + 'mobile-emotion-panel-type:bg-color': rgba($--color-white, 0.1), + // 表情选择类型选择选中背景色 + 'mobile-emotion-panel-type--active:bg-color': rgba($--color-white, 0.2), + // 表情选择类型选择字体色 + 'mobile-emotion-panel-type:text-color': rgba($--color-white, 0.5), + // 表情选择类型选择选中字体色 + 'mobile-emotion-panel-type--active:text-color': $--color-white, + // 表情选择删除按钮背景色 + 'mobile-emotion-panel-del-button:bg-color': rgba($--color-white, 0.1), + // 表情选择删除按钮字体色 + 'mobile-emotion-panel-del-button:text-color': $--color-white, + + // 更多按钮背景色 + 'mobile-more-button:bg-color': rgba($--color-white, 0.1), + // 更多按钮图标图片 + 'mobile-more-button:icon-image': './imgs/pws-icon-more.png', + // 更多面板背景色 + 'mobile-more-panel:bg-color': #B60F26, + // 更多面板字体色 + 'mobile-more-panel:text-color': $--color-white, + + // 打赏按钮背景色 + 'mobile-donate-button:bg-color': rgba($--color-white, 0.1), + // 打赏面板背景色 + 'mobile-donate-panel:bg-color': #B60F26, + // 打赏面板标题字体色 + 'mobile-donate-panel-header-title:text-color': $--color-white, + // 打赏面板返回字体色 + 'mobile-donate-panel-header-close:text-color': $--color-white, + // 打赏礼物选中背景色 + 'mobile-donate-good--active:bg-color': #CE1F37, + // 打赏礼物选中边框色 + 'mobile-donate-good--active:border-color': rgba($--color-white, 0.6), + // 打赏礼物道具名称字体色 + 'mobile-donate-good-name:text-color': $--color-white, + // 打赏礼物道具价格字体色 + 'mobile-donate-good-price:text-color': rgba($--color-white, 0.5), + // 打赏切换指示点颜色 + 'mobile-donate-indicator:bg-color': rgba($--color-white, 0.5), + // 打赏切换指示点选中颜色 + 'mobile-donate-indicator--active:bg-color': $--color-white, + // 打赏面板选项背景色 + 'mobile-donate-panel-option:bg-color': #D31A34, + // 打赏面板选项字体色 + 'mobile-donate-panel-option:text-color': $--color-white, + // 打赏面板选项选中背景色 + 'mobile-donate-panel-option--active:bg-color': #D31A34, + // 打赏面板选项选中字体色 + 'mobile-donate-panel-option--active:text-color': $--color-white, + // 打赏面板选项选中边框色 + 'mobile-donate-panel-option--active:border-color': #FFD595, + // 打赏面板发送按钮背景色 + 'mobile-donate-panel-send-button:bg-color': #FFD595, + // 打赏面板发送按钮字体色 + 'mobile-donate-panel-send-button:text-color': #830B0B, + // 打赏面板剩余积分文本字体色 + 'mobile-donate-panel-point:text-color': $--color-white, + // 打赏面板剩余积分数值字体色 + 'mobile-donate-panel-point-count:text-color': map.get($--skin-basic-configs, 'main-highlight-text-color'), + // 打赏自定义金额字体色 + 'mobile-donate-panel-custom-cash:text-color': map.get($--skin-basic-configs, 'main-highlight-text-color'), + // 打赏自定义金额输入框背景色 + 'mobile-donate-custom-cash-input:bg-color': rgba($--color-black, 0.1), + // 打赏自定义金额输入框标题字体色 + 'mobile-donate-custom-cash-input-title:text-color': $--color-white, + // 打赏自定义金额输入框字体色 + 'mobile-donate-custom-cash-input:text-color': $--color-white, + // 打赏自定义金额随机按钮字体色 + 'mobile-donate-custom-cash-random:text-color': map.get($--skin-basic-configs, 'main-highlight-text-color'), + + // 回放列表播放中按钮背景色 + 'mobile-playback-list-playing:bg-color': map.get($--skin-basic-configs, 'primary-color'), + // 回放列表字体色 + 'mobile-playback-list:text-color': rgba($--color-white, 0.7), + // 回放列表选中时的字体色 + 'mobile-playback-list--active:text-color': map.get($--skin-basic-configs, 'main-highlight-text-color'), + + // 多会场背景色 + 'mobile-multi-meeting:bg-color': map.get($--skin-basic-configs, 'main-bg-color'), + // 多会场字体色 + 'mobile-multi-meeting:text-color': map.get($--skin-basic-configs, 'main-text-color'), +); diff --git a/src/skins/red/config-pc.scss b/src/skins/red/config-pc.scss new file mode 100644 index 0000000..027e634 --- /dev/null +++ b/src/skins/red/config-pc.scss @@ -0,0 +1,110 @@ +@import './config-common.scss'; + +// 皮肤 PC 端页面配置 +$--skin-page-pc-configs: ( + // 观看页背景类型 + 'pc-watch-page:bg-type': 'image', + // 观看页背景颜色 + 'pc-watch-page:bg-color': '', + // 观看页背景图 + 'pc-watch-page:bg-image': './imgs/pws-pc-watch-bg.png', + + // 副屏收起字体颜色 + 'pc-sub-pack-up:text-color': $--color-white, + + // 倒计时方块背景色 + 'pc-count-down-square-item:bg-color': #141518, + // 倒计时方块远点背景色 + 'pc-count-down-square-item-dot:bg-color': #141518, + // 倒计时方块数字字体色 + 'pc-count-down-square-item:text-color': $--color-white, + // 倒计时方块文案字体色 + 'pc-count-down-square-item-word:text-color': map.get($--skin-basic-configs, 'main-text-color'), + // 倒计时方块边框色 + 'pc-count-down-square-item:border-color': $--color-black, + + // 聊天消息底部输入框背景色 + 'pc-msg-bottom-input-wrap:bg-color': map.get($--skin-basic-configs, 'sub-bg-color'), + // 聊天消息底部输入框节点字体色 + 'pc-msg-bottom-input-wrap-item:text-color': $--color-white, + // 聊天消息底部输入框节点 hover 字体色 + 'pc-msg-bottom-input-wrap-item--hover:text-color': map.get($--skin-basic-configs, 'sub-primary-color'), + + // 聊天消息输入框背景色 + 'pc-msg-input:bg-color': map.get($--skin-basic-configs, 'main-bg-color'), + // 聊天消息输入框字体色 + 'pc-msg-input:text-color': map.get($--skin-basic-configs, 'main-text-color'), + // 聊天消息输入框占位符字体色 + 'pc-msg-input-placeholder:text-color': rgba(map.get($--skin-basic-configs, 'main-text-color'), 0.6), + // 聊天消息输入框滚动条颜色 + 'pc-msg-input:scrollbar-color': #d31a34, + + // 聊天消息发送按钮背景色 + 'pc-msg-send-button:bg-color': map.get($--skin-basic-configs, 'sub-primary-color'), + // 聊天消息发送按钮禁用状态下的背景色 + 'pc-msg-send-button--disabled:bg-color': rgba(map.get($--skin-basic-configs, 'sub-primary-color'), 0.5), + // 聊天消息发送按钮字体颜色 + 'pc-msg-send-button:text-color': #830b0b, + // 聊天消息发送按钮禁用状态下的字体颜色 + 'pc-msg-send-button--disabled:text-color': rgba(#830b0b, 0.8), + + // 图片达到最大数量后的提示框背景色 + 'pws-pc-msg-input-popper__max-image-tips:bg-color': map.get($--skin-basic-configs, 'sub-primary-color'), + // 图片达到最大数量后的提示框字体色 + 'pws-pc-msg-input-popper__max-image-tips:text-color': #830b0b, + + // 聊天输入框设置昵称占位背景色 + 'pc-set-nick-placeholder:bg-color': map.get($--skin-basic-configs, 'main-bg-color'), + // 聊天输入框设置昵称占位字体色 + 'pc-set-nick-placeholder:text-color': $--color-white, + // 聊天输入框设置昵称占位高亮字体色 + 'pc-set-nick-placeholder-highlight:text-color': map.get($--skin-basic-configs, 'main-highlight-text-color'), + + // 表情选择面板背景色 + 'pc-emotion-panel:bg-color': map.get($--skin-basic-configs, 'panel-bg-color'), + // 表情选择面板类型选择背景色 + 'pc-emotion-panel-select:bg-color': map.get($--skin-basic-configs, 'sub-bg-color'), + + // 更多面板背景色 + 'pc-more-panel:bg-color': map.get($--skin-basic-configs, 'panel-bg-color'), + // 更多面板字体色 + 'pc-more-panel:text-color': map.get($--skin-basic-configs, 'panel-text-color'), + // 更多面板字体高亮色 + 'pc-more-panel-text--hover:text-color': map.get($--skin-basic-configs, 'panel-highlight-text-color'), + // 更多面板选中框背景色 + 'pc-more-panel-checkbox--checked:bg-color': $--color-white, + // 更多面板选中框图标色 + 'pc-more-panel-checkbox-icon--checked:text-color': map.get($--skin-basic-configs, 'panel-bg-color'), + + // 打赏面板背景色 + 'pc-donate-panel:bg-color': map.get($--skin-basic-configs, 'panel-bg-color'), + // 打赏礼物 hover 背景色 + 'pc-donate-good--hover:bg-color': rgba($--color-white, 0.1), + // 打赏礼物 hover 边框色 + 'pc-donate-good--hover:border-color': rgba($--color-white, 0.4), + // 打赏礼物道具名称字体色 + 'pc-donate-good-name:text-color': map.get($--skin-basic-configs, 'panel-text-color'), + // 打赏礼物道具价格字体色 + 'pc-donate-good-price:text-color': rgba($--color-white, 0.5), + + // 中奖记录面板背景色 + 'pc-lottery-record-panel:bg-color': map.get($--skin-basic-configs, 'panel-bg-color'), + // 中奖记录面板关闭图标字体色 + 'pc-lottery-record-close:text-color': map.get($--skin-basic-configs, 'panel-text-color'), + + // 连麦描述图标字体色 + 'pc-connect-mic-desc-icon:text-color': map.get($--skin-basic-configs, 'describe-text-color'), + // 连麦描述文案字体色 + 'pc-connect-mic-desc:text-color': map.get($--skin-basic-configs, 'describe-text-color'), + // 连麦按钮背景色 + 'pc-connect-mic-button:bg-color': map.get($--skin-basic-configs, 'sub-bg-color'), + // 连麦按钮字体色 + 'pc-connect-mic-button:text-color': $--color-white, + // 连麦按钮高亮字体色 + 'pc-connect-mic-button-highlight:text-color': $--color-white, + // 连麦中图标背景图 + 'pc-connect-mic-applying:icon-image': './imgs/pws-pc-connect-mic.gif', + + // 回放列表播放中按钮背景色 + 'pc-playback-list-playing:bg-color': map.get($--skin-basic-configs, 'primary-color'), +); diff --git a/src/skins/red/config.scss b/src/skins/red/config.scss new file mode 100644 index 0000000..c2135df --- /dev/null +++ b/src/skins/red/config.scss @@ -0,0 +1,7 @@ +@import '../_common/functions.scss'; +@import './config-common.scss'; +@import './config-pc.scss'; +@import './config-mobile.scss'; +@import './config-iar.scss'; + +$--skin-configs: generate-skin-setup-configs(); diff --git a/src/skins/red/imgs/pws-icon-more.png b/src/skins/red/imgs/pws-icon-more.png new file mode 100644 index 0000000000000000000000000000000000000000..52b15f454c14a10fb8ddce948263649053987419 GIT binary patch literal 283 zcmeAS@N?(olHy`uVBq!ia0vp^8X(NV3?%C=ER6$FEa{HEjtmSN`?>!lvI6-k0X`wF z{|N!0!mB5z-vm-TB|(0{<*TZMqn53%m1@|;5Ogtg4^X_z)5S4F-ud$W%ls+(@Pb55u14T$psN@>UHx3vIVCg!01hE~$N&HU literal 0 HcmV?d00001 diff --git a/src/skins/red/imgs/pws-pc-connect-mic.gif b/src/skins/red/imgs/pws-pc-connect-mic.gif new file mode 100644 index 0000000000000000000000000000000000000000..89c70d3ac6943bb1cc1fc6b398425036a79c5071 GIT binary patch literal 20616 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 literal 0 HcmV?d00001 diff --git a/src/skins/red/imgs/pws-pc-watch-bg.png b/src/skins/red/imgs/pws-pc-watch-bg.png new file mode 100644 index 0000000000000000000000000000000000000000..caf427e0e60f478c3d7d89c086930eb26ef661ab GIT binary patch literal 390919 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

RM5I^t&gWV@1)ez1*G(b9aSR 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 z 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 literal 0 HcmV?d00001 diff --git a/src/skins/red/imgs/pws-product-icon-recruitment.png b/src/skins/red/imgs/pws-product-icon-recruitment.png new file mode 100644 index 0000000000000000000000000000000000000000..f5950ab2bcd011fe8c031ec6d0c45ef801ff228c GIT binary patch literal 6213 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 s&m));?F&1uI4b1f$bzSfMKhD6Uv;Y7A literal 0 HcmV?d00001 diff --git a/src/skins/red/imgs/pws-product-shop-car.png b/src/skins/red/imgs/pws-product-shop-car.png new file mode 100644 index 0000000000000000000000000000000000000000..cbb64ea1f3f8cac9b972a4972d0075f7d2963b7e GIT binary patch literal 4200 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 literal 0 HcmV?d00001 diff --git a/src/skins/red/imgs/pws-qa-no-data-icon.png b/src/skins/red/imgs/pws-qa-no-data-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..8cf9581b90ed3db35e8d50a02908e74bc07e099f GIT binary patch literal 1144 zcmeAS@N?(olHy`uVBq!ia0vp^6(G#P3?%t>9eV(zSkfJR9T^xl_H+M9WCikX2l#}z z{vW0Q=)bi0strKOvn0qbSVGlWRDs*b!9qh=--%yOh{wiUR?NlBKt+Jd)mEENOG#SN zgW1kd%2-_9olQj0N=MPu&BRlgRoC8|gN0q)(aVR4myuJ>m*GQT=PCvUrq7-(jv*QM z-rjmXZIOWp!-JdqtoN==macw(i6wQ#tUdpQ-+D>9yLu|L6sHx}AA3;V;E;D{Z-eGh z)@I2w32eqQ4)UZKK$t&-4_phm?6~H_)|IWiv$-8q#MI<+{1_I_m=W=TNuZmRFNd)y zG4Vj~qz@v@*E|kMv8|chQpzJCz{_SV!7lgY*W;(BbnaZ$a_#zXJ-zz+b-9mI9ytEp zP~E?nar>3W|1POi{zw!pY51a@IU~5aKca~9u=4ujuQav!dDeY7?w^--^3b01ZD?zBB)J*WOR0EN|n|H|EpkB-g2Mo%ZIqdic+h zhjIT?+)EeV7UjFW?rx!9eOXp}%CgRbmCt9WzuGW;V|wP{O~08UrC$_WsQSPrKJDrS z*Yk`rd*r4VJZxY1JAe9#&6hjBDm+`7XTCSnu$f1nfwAJ*a(kO1rG&;G8!mplD^vB# zxR+ns_W!z4!%4Qfc6&Zvp65PCC%B*YyzO_p65rkI%{w+cwB4`Fc%gN#@H*)Rqc>?^ z#ZC#$)7evI^{K(?O-jW!Cs{d*zab8?*XDkGBwH(CvHtXGk%WczI#V3E3a+f>U^BL` z;S~rC4GC&En!A6x$b+SuKYz48sGk{|wRF~{2VTz#jXZX-vBjuxiW@$#^sMM(yzX(x zl;_5@lRG!{vQ*DLG|l0Zs7?pV@4KI5B&VNtHres&yL6b;$D3}c9D<3t-)A0{DK|^} z_&4KE_M_kZb2nDTC=2Y`-5|xj`>3Sm5{rjls?$Wg-yK|GV31Z;GPC{S!}{$jv(_#; zdB{ktrtV^i-@I1w1upaI*PWkJe3Gx-IPl?Z<~8$xd5Xc))z4*}Q$iB}fBbTC literal 0 HcmV?d00001 diff --git a/src/skins/red/imgs/pws-zan.png b/src/skins/red/imgs/pws-zan.png new file mode 100644 index 0000000000000000000000000000000000000000..53f9a7d1e1df78b6929d24fa983fefe43dc7ec40 GIT binary patch literal 4436 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 literal 0 HcmV?d00001 diff --git a/src/skins/use-page-skin.ts b/src/skins/use-page-skin.ts new file mode 100644 index 0000000..0a80e45 --- /dev/null +++ b/src/skins/use-page-skin.ts @@ -0,0 +1,152 @@ +import { paramGetter } from '@/hooks/core/use-query-params'; +import { isMobile } from '@/assets/utils/browser'; +import { useChannelStore } from '@/store/use-channel-store'; +import { usePageStore } from '@/store/use-page-store'; +import { ChannelWatchLayout, ChannelWatchPageSkin } from '@polyv/live-watch-sdk'; +import { $ } from '@just4/dom'; +import { watch } from 'vue'; + +/** + * 页面皮肤 hook + */ +export const usePageSkin = () => { + const channelStore = useChannelStore(); + const pageStore = usePageStore(); + + /** + * 初始化观看页多皮肤 + */ + async function initPageSkin(): Promise { + const watchLayout = channelStore.channelDetail?.channelInfo.watchLayout; + + let pageSkin = channelStore.channelDetail?.theme.newPageSkin; + + // 在非普通直播频道下只加载黑色皮肤 + if (watchLayout !== ChannelWatchLayout.Normal) { + pageSkin = ChannelWatchPageSkin.Black; + } + + const querySkin = paramGetter.skin(); + if (querySkin) { + pageSkin = querySkin; + } + + return setPageSkin(pageSkin); + } + + /** + * 设置页面皮肤 + * @param pageSkin 页面皮肤 + */ + async function setPageSkin(pageSkin: ChannelWatchPageSkin | undefined): Promise { + pageStore.$patch({ + pageSkin, + }); + + return importPageSkin(); + } + + /** + * 加载观看页多皮肤 + */ + async function importPageSkin(): Promise { + const pageSkin = pageStore.pageSkin; + + if (!pageSkin) { + return; + } + + if (isMobile) { + await importMobilePageSkin(pageSkin); + } else { + await importPcPageSkin(pageSkin); + } + } + + /** + * 加载 PC 端观看页多皮肤 + */ + async function importPcPageSkin(pageSkin: ChannelWatchPageSkin): Promise { + switch (pageSkin) { + case ChannelWatchPageSkin.Red: + await import(/* webpackChunkName: "skin-red-pc" */ '@/skins/red/_red-pc.scss'); + break; + case ChannelWatchPageSkin.Blue: + await import(/* webpackChunkName: "skin-blue-pc" */ '@/skins/blue/_blue-pc.scss'); + break; + case ChannelWatchPageSkin.Green: + await import(/* webpackChunkName: "skin-green-pc" */ '@/skins/green/_green-pc.scss'); + break; + case ChannelWatchPageSkin.White: + await import(/* webpackChunkName: "skin-white-pc" */ '@/skins/white/_white-pc.scss'); + break; + case ChannelWatchPageSkin.Golden: + await import(/* webpackChunkName: "skin-golden-pc" */ '@/skins/golden/_golden-pc.scss'); + break; + default: + await import(/* webpackChunkName: "skin-black-pc" */ '@/skins/black/_black-pc.scss'); + break; + } + } + + /** + * 加载 Mobile 端观看页多皮肤 + */ + async function importMobilePageSkin(pageSkin: ChannelWatchPageSkin): Promise { + switch (pageSkin) { + case ChannelWatchPageSkin.Red: + await import(/* webpackChunkName: "skin-red-mobile" */ '@/skins/red/_red-mobile.scss'); + break; + case ChannelWatchPageSkin.Blue: + await import(/* webpackChunkName: "skin-blue-mobile" */ '@/skins/blue/_blue-mobile.scss'); + break; + case ChannelWatchPageSkin.Green: + await import( + /* webpackChunkName: "skin-green-mobile" */ '@/skins/green/_green-mobile.scss' + ); + break; + case ChannelWatchPageSkin.White: + await import( + /* webpackChunkName: "skin-white-mobile" */ '@/skins/white/_white-mobile.scss' + ); + break; + case ChannelWatchPageSkin.Golden: + await import( + /* webpackChunkName: "skin-golden-mobile" */ '@/skins/golden/_golden-mobile.scss' + ); + break; + default: + await import( + /* webpackChunkName: "skin-black-mobile" */ '@/skins/black/_black-mobile.scss' + ); + break; + } + } + + // 设置页面的 class + watch( + () => pageStore.pageSkin, + (pageSkin, oldPageSkin) => { + const skinClassPrefix = 'pws-skin-'; + const $document = $(document.documentElement); + + if (oldPageSkin) { + const oldPageSkinClass = `${skinClassPrefix}${oldPageSkin}`; + if ($document.hasClass(oldPageSkinClass)) { + $document.removeClass(oldPageSkinClass); + } + } + + if (pageSkin) { + const pageSkinClass = `${skinClassPrefix}${pageSkin}`; + $document.addClass(pageSkinClass); + } + }, + ); + + return { + initPageSkin, + setPageSkin, + importPageSkin, + }; +}; diff --git a/src/skins/white/_white-mobile.scss b/src/skins/white/_white-mobile.scss new file mode 100644 index 0000000..87c09f9 --- /dev/null +++ b/src/skins/white/_white-mobile.scss @@ -0,0 +1,4 @@ +@import '../_common/basic-mobile-style.scss'; +@import './config.scss'; + +@include generate-skin-basic-mobile-style($--skin-configs); diff --git a/src/skins/white/_white-pc.scss b/src/skins/white/_white-pc.scss new file mode 100644 index 0000000..8a13764 --- /dev/null +++ b/src/skins/white/_white-pc.scss @@ -0,0 +1,4 @@ +@import '../_common/basic-pc-style.scss'; +@import './config.scss'; + +@include generate-skin-basic-pc-style($--skin-configs); diff --git a/src/skins/white/config-common.scss b/src/skins/white/config-common.scss new file mode 100644 index 0000000..fe2b5eb --- /dev/null +++ b/src/skins/white/config-common.scss @@ -0,0 +1,244 @@ +// 主题名称 +$--skin-type: 'white'; + +// 主题色 +$--skin-primary-color: #3082FE; +// 次要主题色 +$--skin-sub-primary-color: #498CF1; + +// 皮肤基础配置 +$--skin-basic-configs: ( + // 主题名称 + 'skin-type': $--skin-type, + + // 主题色 + 'primary-color': $--skin-primary-color, + // 次要主题色 + 'sub-primary-color': $--skin-sub-primary-color, + // #458ffe + 'primary-light-1': get-opacity-color($--skin-primary-color, 1), + // #599bfe + 'primary-light-2': get-opacity-color($--skin-primary-color, 2), + // #6ea8fe + 'primary-light-3': get-opacity-color($--skin-primary-color, 3), + // #83b4fe + 'primary-light-4': get-opacity-color($--skin-primary-color, 4), + // #98c1ff + 'primary-light-5': get-opacity-color($--skin-primary-color, 5), + // #accdff + 'primary-light-6': get-opacity-color($--skin-primary-color, 6), + // #c1daff + 'primary-light-7': get-opacity-color($--skin-primary-color, 7), + // #d6e6ff + 'primary-light-8': get-opacity-color($--skin-primary-color, 8), + // #eaf3ff + 'primary-light-9': get-opacity-color($--skin-primary-color, 9), + + // ---------- 背景色 ---------- // + // 主要背景色(以侧边栏主体背景色定义) + 'main-bg-color': #F4F4F4, + // 次要背景色(以侧边栏头部背景色定义) + 'sub-bg-color': $--color-white, + // 面板背景色 + 'panel-bg-color': #ededed, + // 禁用背景色 + 'disabled-bg-color': #e9ecee, + + // ---------- 字体色 ---------- // + // 正文字体色 + 'main-text-color': #666666, + // 正文高亮字体色 + 'main-highlight-text-color': $--skin-primary-color, + // 描述字体色 + 'describe-text-color': rgba(#666666, 0.6), + // 禁用字体色 + 'disabled-text-color': #9e9e9e, + // 面板字体色 + 'panel-text-color': #666666, + // 面板高亮字体色 + 'panel-highlight-text-color': $--skin-primary-color, + + // ---------- 边框色 ---------- // + 'main-border-color': rgba(#FFE5D9, 0.1), + + // ---------- 滚动条 ---------- // + 'panel-scrollbar-color': rgba(#666666, 0.2), +); + +// 皮肤基础组件配置 +$--skin-component-configs: ( + // 主要 tab 头部背景色 + 'main-tab-header:bg-color': map.get($--skin-basic-configs, 'sub-bg-color'), + // 主要 tab 头部字体色 + 'main-tab-header:text-color': #666666, + // 主要 tab 头部 hover 字体色 + 'main-tab-header--hover:text-color': #666666, + // 主要 tab 头部激活字体色 + 'main-tab-header--active:text-color': #666666, + // 主要 tab 头部激活选项线条背景色 + 'main-tab-header-line--active:bg-color': map.get($--skin-basic-configs, 'primary-color'), + // 主要 tab 头部阴影开始颜色 + 'main-tab-header-shadow-start:color': map.get($--skin-basic-configs, 'sub-bg-color'), + // 主要 tab 头部阴影结束颜色 + 'main-tab-header-shadow-end:color': rgba(62, 62, 78, 0), + // 主要 tab 头部红点颜色 + 'main-tab-header-reminder:color': #f24453, + // 主要 tab 主体背景色 + 'main-tab-body:bg-color': map.get($--skin-basic-configs, 'main-bg-color'), + // 主要 tab 主体滚动栏颜色 + 'main-tab-body:scrollbar-color': rgba(#666666, 0.2), + + // 常规 tab 激活项线条背景色 + 'normal-tab-header-line--active:bg-color': map.get($--skin-basic-configs, 'primary-color'), + + // 主题按钮背景色 + 'primary-button:bg-color': map.get($--skin-basic-configs, 'primary-color'), + // 主题按钮字体色 + 'primary-button:text-color': $--color-white, + // 主题按钮 hover 背景色 + 'primary-button--hover:bg-color': map.get($--skin-basic-configs, 'primary-light-2'), + // 主题按钮 hover 字体色 + 'primary-button--hover:text-color': $--color-white, + // 主题按钮 active 背景色 + 'primary-button--active:bg-color': map.get($--skin-basic-configs, 'primary-light-1'), + // 主题按钮 active 字体色 + 'primary-button--active:text-color': $--color-white, + // 主题按钮 disabled 背景色 + 'primary-button--disabled:bg-color': map.get($--skin-basic-configs, 'disabled-bg-color'), + // 主题按钮 disabled 字体色 + 'primary-button--disabled:text-color': map.get($--skin-basic-configs, 'disabled-text-color'), + + // 侧边栏按钮背景色 + 'aside-menu-button:bg-color': rgba($--color-white, 0.6), + // 侧边栏按钮字体则 + 'aside-menu-button:text-color': #333333, + // 侧边栏按钮 hover 背景色 + 'aside-menu-button--hover:bg-color': rgba($--color-white, 0.8), + // 侧边栏按钮 active 背景色 + 'aside-menu-button--active:bg-color': rgba($--color-white, 0.7), + + // pc 端直播状态标签颜色 + 'pc-live-status-tag:color': ( + 'unStart' rgba(#ffffff, .6), + 'waiting' #269eff, + 'live' #f06e6e, + 'end' rgba(#ffffff, .6), + 'playback' #269eff, + 'stop' #f06e6e, + ), + // mobile 端直播状态标签颜色 + 'mobile-live-status-tag:color': ( + 'unStart' rgba(#ffffff, .6), + 'waiting' #269eff, + 'live' #f06e6e, + 'end' rgba(#ffffff, .6), + 'playback' #269eff, + 'stop' #f06e6e, + ), +); + +// 皮肤公用页面配置 +$--skin-page-common-configs: ( + // 聊天消息昵称字体色 + 'chat-msg-user-nickname:text-color': map.get($--skin-basic-configs, 'main-text-color'), + // 聊天消息特殊身份昵称字体色 + 'chat-msg-user-special-nickname:text-color': map.get($--skin-basic-configs, 'main-highlight-text-color'), + // 聊天消息用户头衔背景色 + 'chat-msg-user-actor:bg-color': map.get($--skin-basic-configs, 'primary-color'), + // 聊天消息用户头衔字体色 + 'chat-msg-user-actor:text-color': $--color-white, + // 聊天消息用户设置昵称图标字体色 + 'chat-msg-user-set-nick-icon:text-color': map.get($--skin-basic-configs, 'main-text-color'), + // 聊天消息时间字体色 + 'chat-msg-time:text-color': map.get($--skin-basic-configs, 'describe-text-color'), + // 聊天提示文案字体色 + 'chat-msg-list-tips:text-color': map.get($--skin-basic-configs, 'describe-text-color'), + + // 聊天消息气泡背景色 + 'chat-msg-bubble:bg-color': $--color-white, + // 聊天消息气泡字体色 + 'chat-msg-bubble:text-color': map.get($--skin-basic-configs, 'main-text-color'), + // 聊天消息特殊身份气泡背景色 + 'chat-msg-bubble-special:bg-color': map.get($--skin-basic-configs, 'sub-primary-color'), + // 聊天消息特殊身份气泡字体色 + 'chat-msg-bubble-special:text-color': $--color-white, + + // 聊天消息回复内容字体色 + 'chat-msg-quote-content:text-color': rgba(map.get($--skin-basic-configs, 'main-text-color'), 0.6), + // 聊天消息回复内容边框色 + 'chat-msg-quote-content:border-color': rgba(map.get($--skin-basic-configs, 'main-text-color'), 0.1), + // 聊天消息特殊身份回复内容字体色 + 'chat-msg-special-quote-content:text-color': rgba($--color-white, 0.8), + // 聊天消息特殊身份回复内容字体色 + 'chat-msg-special-quote-content:border-color': rgba($--color-white, 0.1), + // 聊天消息回复按钮字体色 + 'chat-msg-quote-button:text-color': map.get($--skin-basic-configs, 'main-text-color'), + // 聊天回复引用背景色 + 'chat-quote-msg:bg-color': #FAFAFA, + // 聊天回复引用字体色 + 'chat-quote-msg:text-color': map.get($--skin-basic-configs, 'main-text-color'), + + // 聊天消息翻译按钮字体色 + 'chat-msg-translate-button:text-color': rgba(map.get($--skin-basic-configs, 'main-text-color'), 0.5), + // 聊天消息翻译按钮 hover 字体色 + 'chat-msg-translate-button--hover:text-color': map.get($--skin-basic-configs, 'main-highlight-text-color'), + // 聊天消息翻译成功提示字体色 + 'chat-msg-translate-finish:text-color': rgba(map.get($--skin-basic-configs, 'main-text-color'), 0.5), + // 聊天消息特殊身份翻译成功提示字体色 + 'chat-msg-translate-finish-special:text-color': rgba($--color-white, 0.8), + + // 聊天室更多消息按钮背景色 + 'chat-msg-more-button:bg-color': map.get($--skin-basic-configs, 'primary-color'), + // 聊天室更多消息按钮字体色 + 'chat-msg-more-button:text-color': #ffffff, + // 聊天室更多消息按钮 hover 背景色 + 'chat-msg-more-button--hover:bg-color': map.get($--skin-basic-configs, 'primary-color'), + // 聊天室更多消息按钮 hover 字体色 + 'chat-msg-more-button--hover:text-color': #ffffff, + + // 打赏消息字体色 + 'chat-reward-msg:text-color': rgba(map.get($--skin-basic-configs, 'main-text-color'), 0.7), + // 自定义消息字体色 + 'chat-customer-msg:text-color': rgba(map.get($--skin-basic-configs, 'main-text-color'), 0.7), + // 红包领取消息背景色 + 'chat-redpaper-receive-msg:bg-color': #a9d2ff, + // 红包领取消息字体色 + 'chat-redpaper-receive-msg:text-color': map.get($--skin-basic-configs, 'main-text-color'), + // 系统消息字体色 + 'chat-system-msg:text-color': rgba(map.get($--skin-basic-configs, 'main-text-color'), 0.6), + + // 章节字体色 + 'chapter-item:text-color': map.get($--skin-basic-configs, 'main-text-color'), + // 章节高亮字体色 + 'chapter-item--active:text-color': map.get($--skin-basic-configs, 'main-highlight-text-color'), + // 章节边框色 + 'chapter-item:border-color': rgba(map.get($--skin-basic-configs, 'main-text-color'), 0.1), + + // 成员列表字体色 + 'member-list-item:text-color': map.get($--skin-basic-configs, 'main-text-color'), + // 成员列表特殊身份字体色 + 'member-list-item-special:text-color': map.get($--skin-basic-configs, 'main-highlight-text-color'), + + // 点赞按钮背景图 + 'like-button:bg-image': './imgs/pws-zan.png', + // 点赞数量字体色 + 'like-count-number:text-color': rgba(map.get($--skin-basic-configs, 'main-text-color'), 0.7), + // 点赞数量背景色 + 'like-count-number:bg-color': rgba(map.get($--skin-basic-configs, 'main-bg-color'), 0.8), + + // 页面广告背景色 + 'page-advert:bg-color': map.get($--skin-basic-configs, 'main-bg-color'), + // 页面广告字体色 + 'page-advert:text-color': map.get($--skin-basic-configs, 'main-text-color'), + // 页面广告箭头字体色 + 'page-advert-arrow:text-color': map.get($--skin-basic-configs, 'main-text-color'), + + // 互动二次入口按钮背景色 + 'interactive-entrance-button:bg-color': rgba($--color-white, 0.9), + // 互动二次入口按钮 hover 背景色 + 'interactive-entrance-button--hover:bg-color': rgba($--color-white, 0.8), + // 互动二次入口按钮字体色 + 'interactive-entrance-button:text-color': map.get($--skin-basic-configs, 'main-text-color'), + // 互动二次入口箭头字体色 + 'interactive-entrance-arrow:text-color': rgba(map.get($--skin-basic-configs, 'main-text-color'), 0.4), +); diff --git a/src/skins/white/config-iar.scss b/src/skins/white/config-iar.scss new file mode 100644 index 0000000..06c84b3 --- /dev/null +++ b/src/skins/white/config-iar.scss @@ -0,0 +1,111 @@ +@import './config-common.scss'; +@import './config-pc.scss'; + +// 皮肤互动功能公用配置 +$--skin-iar-common-configs: ( + // 挂件字体色 + 'iar-pendant:text-color': rgba(map.get($--skin-basic-configs, 'main-text-color'), 0.7), + + // 商品库内容背景色 + 'iar-product-list-content:bg-color': #fefefe, + // 商品库图标图片 + 'iar-product-list-shop:icon-image': './imgs/pws-product-icon.png', + // 商品库图标图片(职位) + 'iar-product-list-recruitment:icon-image': './imgs/pws-product-icon-recruitment.png', + // 商品库标签背景色 + 'iar-product-list-label:bg-color': rgba(#333333, 0.1), + // 商品库标签字体色 + 'iar-product-list-label:text-color': #333333, + // 商品库商品名称序号背景色 + 'iar-product-list-name-number:bg-color': rgba($--color-black, 0.35), + // 商品库空状态图标图片 + 'iar-product-list-empty:icon-image': './imgs/pws-product-shop-car.png', + // 商品库商品下边框颜色 + 'iar-product-list-item:border-color': rgba(#666666, 0.1), + // 商品库商品名称字体色 + 'iar-product-list-good-name:text-color': map.get($--skin-basic-configs, 'main-text-color'), + + // 置顶公告背景色 + 'iar-bulletin-top-banner:bg-color': #F3F7FF, + // 置顶公告字体色 + 'iar-bulletin-top-banner:text-color': map.get($--skin-basic-configs, 'main-text-color'), + + // 问答背景色 + 'iar-qa-body:bg-color': map.get($--skin-component-configs, 'main-tab-body:bg-color'), + // 问答过滤层背景色 + 'iar-qa-filter:bg-color': map.get($--skin-component-configs, 'main-tab-body:bg-color'), + // 问答过滤层边框色 + 'iar-qa-filter:border-color': map.get($--skin-component-configs, 'main-tab-body:bg-color'), + // 问答过滤层文案字体色 + 'iar-qa-filter-desc:text-color': rgba(map.get($--skin-basic-configs, 'main-text-color'), 0.6), + // 问答选择字体色 + 'iar-qa-select:text-color': map.get($--skin-basic-configs, 'main-text-color'), + // 问答选择箭头边框色 + 'iar-qa-select:border-color': rgba(map.get($--skin-basic-configs, 'main-text-color'), 0.8), + // 问答节点背景色 + 'iar-qa-item:bg-color': $--color-white, + // 问答节点内容字体色 + 'iar-qa-item-content:text-color': map.get($--skin-basic-configs, 'main-text-color'), + // 问答节点信息字体色 + 'iar-qa-item-info:text-color': map.get($--skin-basic-configs, 'describe-text-color'), + // 问答节点更多字体色 + 'iar-qa-item-more:text-color': map.get($--skin-basic-configs, 'main-highlight-text-color'), + // 问答节点边框色 + 'iar-qa-item:border-color': #f4f4f4, + // 问答新消息按钮背景色 + 'iar-qa-new-msg-button:bg-color': rgba(map.get($--skin-basic-configs, 'primary-color'), 0.85) , + // 问答新消息按钮字体色 + 'iar-qa-new-msg-button:text-color': $--color-white, + // 问答没有更多文案字体色 + 'iar-qa-no-more:text-color': map.get($--skin-basic-configs, 'describe-text-color'), +); + +// 皮肤互动功能 PC 配置 +$--skin-iar-pc-configs: ( + // 问答选择选项背景色 + 'iar-pc-qa-select-option:bg-color': map.get($--skin-component-configs, 'main-tab-header:bg-color'), + // 问答选择选项 hover 背景色 + 'iar-pc-qa-select-option--hover:bg-color': rgba($--color-white, 0.1), + // 问答选择选项字体色 + 'iar-pc-qa-select-option:text-color': rgba(map.get($--skin-component-configs, 'main-tab-header:text-color'), 0.8), + // 问答选择选项激活字体色 + 'iar-pc-qa-select-option--active:text-color': map.get($--skin-component-configs, 'main-tab-header:text-color'), + // 问答选择选项边框色 + 'iar-pc-qa-select-option:border-color': rgba($--color-white, 0.1), + // 问答表情选择图标 + 'iar-pc-qa-ask-emotion:text-color': map.get($--skin-basic-configs, 'main-text-color'), + 'iar-pc-qa-ask-emotion:background-filter': none, + + // 中奖记录弹层文字颜色 + 'iar-pc-lottery-record-msg:text-color': #666, +); + +// 皮肤互动功能 Mobile 配置 +$--skin-iar-mobile-configs: ( + // 问答空数据的图标图片 + 'iar-mobile-qa-no-data:icon-image': './imgs/pws-qa-no-data-icon.png', + // 问答消息发送入口图片 + 'iar-mobile-qa-ask-entry:icon-image': './imgs/pws-qa-entry.png', + // 问答输入框外层背景色 + 'iar-mobile-qa-input-wrap:bg-color': map.get($--skin-component-configs, 'main-tab-header:bg-color'), + // 问答输入框背景色 + 'iar-mobile-qa-input:bg-color': rgba($--color-black, 0.05), + // 问答输入框字体色 + 'iar-mobile-qa-input:text-color': map.get($--skin-basic-configs, 'main-text-color'), + // 问答表情选择图标字体色 + 'iar-mobile-qa-ask-emotion:text-color': map.get($--skin-basic-configs, 'main-text-color'), + 'iar-mobile-qa-ask-emotion:background-filter': none, + // 问答发送按钮字体色 + 'iar-mobile-qa-ask-send-button:text-color': map.get($--skin-basic-configs, 'main-text-color'), + + // 图文直播头部字体色 + 'iar-mobile-tuwen-live-header:text-color': rgba(map.get($--skin-basic-configs, 'main-text-color'), 0.8), + // 图文直播名称字体色 + 'iar-mobile-tuwen-live-content-name:text-color': map.get($--skin-basic-configs, 'main-highlight-text-color'), + // 图文直播时间字体色 + 'iar-mobile-tuwen-live-content-time:text-color': map.get($--skin-basic-configs, 'describe-text-color'), + // 图文直播内容字体色 + 'iar-mobile-tuwen-live-content:text-color': map.get($--skin-basic-configs, 'main-text-color'), + // 图文直播暂无更多字体色 + 'iar-mobile-tuwen-live-no-more:text-color': map.get($--skin-basic-configs, 'describe-text-color'), +); diff --git a/src/skins/white/config-mobile.scss b/src/skins/white/config-mobile.scss new file mode 100644 index 0000000..72d404b --- /dev/null +++ b/src/skins/white/config-mobile.scss @@ -0,0 +1,154 @@ +@import './config-common.scss'; + +// 皮肤 Mobile 端页面配置 +$--skin-page-mobile-configs: ( + // 富文本字体色 + 'mobile-rich-text-content:text-color': map.get($--skin-basic-configs, 'main-text-color'), + + // 引导页背景色 + 'mobile-splash:bg-color': map.get($--skin-basic-configs, 'main-bg-color'), + // 引导页倒计时外层背景色 + 'mobile-splash-live-count-down-wrap:bg-color': map.get($--skin-basic-configs, 'sub-bg-color'), + + // 页脚字体色 + 'mobile-page-footer:text-color': rgba(map.get($--skin-basic-configs, 'main-text-color'), 0.6), + + // 基础信息频道标题字体色 + 'mobile-basic-info-channel-title:text-color': map.get($--skin-basic-configs, 'main-text-color'), + // 基础信息开始时间字体色 + 'mobile-basic-info-start-time:text-color': map.get($--skin-basic-configs, 'main-text-color'), + // 基础信息页面浏览次数字体色 + 'mobile-basic-info-page-view:text-color': map.get($--skin-basic-configs, 'main-text-color'), + // 基础信息主持人字体色 + 'mobile-basic-info-publisher:text-color': map.get($--skin-basic-configs, 'main-text-color'), + // 基础信息点赞数字体色 + 'mobile-basic-info-like:text-color': map.get($--skin-basic-configs, 'main-text-color'), + + // 倒计时方块背景色 + 'mobile-count-down-square-item:bg-color': #F4F4F4, + // 倒计时方块远点背景色 + 'mobile-count-down-square-item-dot:bg-color': rgba(map.get($--skin-basic-configs, 'main-text-color'), 0.6), + // 倒计时方块数字字体色 + 'mobile-count-down-square-item:text-color': map.get($--skin-basic-configs, 'main-text-color'), + // 倒计时方块文案字体色 + 'mobile-count-down-square-item-word:text-color': rgba(map.get($--skin-basic-configs, 'main-text-color'), 0.7), + // 倒计时方块边框色 + 'mobile-count-down-square-item:border-color': rgba(map.get($--skin-basic-configs, 'main-text-color'), 0.1), + + // 直播预约按钮背景色 + 'mobile-live-booking-button:bg-color': map.get($--skin-basic-configs, 'sub-primary-color'), + + // 关注按钮背景色 + 'mobile-follow-button:bg-color': map.get($--skin-basic-configs, 'sub-primary-color'), + // 关注按钮字体颜色 + 'mobile-follow-button:text-color': $--color-white, + + // 聊天消息输入框背景色 + 'mobile-msg-input:bg-color': rgba($--color-white, 0.9), + // 聊天消息输入框字体色 + 'mobile-msg-input:text-color': map.get($--skin-basic-configs, 'main-text-color'), + // 聊天消息输入框占位符字体色 + 'mobile-msg-input-placeholder:text-color': rgba(map.get($--skin-basic-configs, 'main-text-color'), 0.6), + // 聊天消息输入框滚动条颜色 + 'mobile-msg-input:scrollbar-color': rgba(21, 113, 208, 0.2), + // 聊天消息输入框图标字体色 + 'mobile-msg-input-suffix-icon:text-color': rgba(map.get($--skin-basic-configs, 'main-text-color'), 0.7), + + // 聊天消息发送按钮字体颜色 + 'mobile-msg-send-button:text-color': map.get($--skin-basic-configs, 'main-highlight-text-color'), + + // 表情选择面板背景色 + 'mobile-emotion-panel:bg-color': #EDEDED, + // 表情选择面板下的发送按钮字体色 + 'mobile-emotion-panel-send-button:bg-color': map.get($--skin-basic-configs, 'main-highlight-text-color'), + // 表情选择面板下的输入框背景色 + 'mobile-emotion-panel-msg-input:bg-color': $--color-white, + // 表情选择面板下的输入框字体色 + 'mobile-emotion-panel-msg-input:text-color': map.get($--skin-basic-configs, 'main-text-color'), + // 表情选择面板下的输入框占位符字体色 + 'mobile-emotion-panel-msg-input-placeholder:text-color': rgba(map.get($--skin-basic-configs, 'main-text-color'), 0.6), + // 表情选择面板下的输入框图标字体色 + 'mobile-emotion-panel-msg-input-suffix-icon:text-color': rgba(map.get($--skin-basic-configs, 'main-text-color'), 0.7), + // 表情选择类型选择背景色 + 'mobile-emotion-panel-type:bg-color': rgba($--color-white, 0.4), + // 表情选择类型选择选中背景色 + 'mobile-emotion-panel-type--active:bg-color': rgba($--color-white, 0.8), + // 表情选择类型选择字体色 + 'mobile-emotion-panel-type:text-color': rgba(map.get($--skin-basic-configs, 'main-text-color'), 0.7), + // 表情选择类型选择选中字体色 + 'mobile-emotion-panel-type--active:text-color': map.get($--skin-basic-configs, 'main-text-color'), + // 表情选择删除按钮背景色 + 'mobile-emotion-panel-del-button:bg-color': rgba($--color-white, 0.4), + // 表情选择删除按钮字体色 + 'mobile-emotion-panel-del-button:text-color': map.get($--skin-basic-configs, 'main-text-color'), + + // 更多按钮背景色 + 'mobile-more-button:bg-color': rgba($--color-white, 0.9), + // 更多按钮图标图片 + 'mobile-more-button:icon-image': './imgs/pws-icon-more.png', + // 更多面板背景色 + 'mobile-more-panel:bg-color': #EDEDED, + // 更多面板字体色 + 'mobile-more-panel:text-color': map.get($--skin-basic-configs, 'main-text-color'), + + // 打赏按钮背景色 + 'mobile-donate-button:bg-color': rgba($--color-white, 0.9), + // 打赏面板背景色 + 'mobile-donate-panel:bg-color': #EDEDED, + // 打赏面板标题字体色 + 'mobile-donate-panel-header-title:text-color': map.get($--skin-basic-configs, 'main-text-color'), + // 打赏面板返回字体色 + 'mobile-donate-panel-header-close:text-color': map.get($--skin-basic-configs, 'main-text-color'), + // 打赏礼物选中背景色 + 'mobile-donate-good--active:bg-color': $--color-white, + // 打赏礼物选中边框色 + 'mobile-donate-good--active:border-color': rgba($--color-black, 0.3), + // 打赏礼物道具名称字体色 + 'mobile-donate-good-name:text-color': map.get($--skin-basic-configs, 'main-text-color'), + // 打赏礼物道具价格字体色 + 'mobile-donate-good-price:text-color': rgba(map.get($--skin-basic-configs, 'main-text-color'), 0.5), + // 打赏切换指示点颜色 + 'mobile-donate-indicator:bg-color': rgba(map.get($--skin-basic-configs, 'main-text-color'), 0.4), + // 打赏切换指示点选中颜色 + 'mobile-donate-indicator--active:bg-color': map.get($--skin-basic-configs, 'main-text-color'), + // 打赏面板选项背景色 + 'mobile-donate-panel-option:bg-color': $--color-white, + // 打赏面板选项字体色 + 'mobile-donate-panel-option:text-color': rgba(map.get($--skin-basic-configs, 'main-text-color'), 0.6), + // 打赏面板选项选中背景色 + 'mobile-donate-panel-option--active:bg-color': $--color-white, + // 打赏面板选项选中字体色 + 'mobile-donate-panel-option--active:text-color': map.get($--skin-basic-configs, 'main-text-color'), + // 打赏面板选项选中边框色 + 'mobile-donate-panel-option--active:border-color': rgba(map.get($--skin-basic-configs, 'main-text-color'), 0.3), + // 打赏面板发送按钮背景色 + 'mobile-donate-panel-send-button:bg-color': map.get($--skin-basic-configs, 'primary-color'), + // 打赏面板发送按钮字体色 + 'mobile-donate-panel-send-button:text-color': $--color-white, + // 打赏面板剩余积分文本字体色 + 'mobile-donate-panel-point:text-color': map.get($--skin-basic-configs, 'main-text-color'), + // 打赏面板剩余积分数值字体色 + 'mobile-donate-panel-point-count:text-color': map.get($--skin-basic-configs, 'main-highlight-text-color'), + // 打赏自定义金额字体色 + 'mobile-donate-panel-custom-cash:text-color': map.get($--skin-basic-configs, 'main-highlight-text-color'), + // 打赏自定义金额输入框背景色 + 'mobile-donate-custom-cash-input:bg-color': $--color-white, + // 打赏自定义金额输入框标题字体色 + 'mobile-donate-custom-cash-input-title:text-color': rgba(map.get($--skin-basic-configs, 'main-text-color'), 0.7), + // 打赏自定义金额输入框字体色 + 'mobile-donate-custom-cash-input:text-color': map.get($--skin-basic-configs, 'main-text-color'), + // 打赏自定义金额随机按钮字体色 + 'mobile-donate-custom-cash-random:text-color': map.get($--skin-basic-configs, 'main-highlight-text-color'), + + // 回放列表播放中按钮背景色 + 'mobile-playback-list-playing:bg-color': map.get($--skin-basic-configs, 'primary-color'), + // 回放列表字体色 + 'mobile-playback-list:text-color': map.get($--skin-basic-configs, 'main-text-color'), + // 回放列表选中时的字体色 + 'mobile-playback-list--active:text-color': map.get($--skin-basic-configs, 'main-highlight-text-color'), + + // 多会场背景色 + 'mobile-multi-meeting:bg-color': #EDEDED, + // 多会场字体色 + 'mobile-multi-meeting:text-color': map.get($--skin-basic-configs, 'main-text-color'), +); diff --git a/src/skins/white/config-pc.scss b/src/skins/white/config-pc.scss new file mode 100644 index 0000000..2bc7368 --- /dev/null +++ b/src/skins/white/config-pc.scss @@ -0,0 +1,110 @@ +@import './config-common.scss'; + +// 皮肤 PC 端页面配置 +$--skin-page-pc-configs: ( + // 观看页背景类型 + 'pc-watch-page:bg-type': 'image', + // 观看页背景颜色 + 'pc-watch-page:bg-color': '', + // 观看页背景图 + 'pc-watch-page:bg-image': './imgs/pws-pc-watch-bg.png', + + // 副屏收起字体颜色 + 'pc-sub-pack-up:text-color': #333, + + // 倒计时方块背景色 + 'pc-count-down-square-item:bg-color': #141518, + // 倒计时方块远点背景色 + 'pc-count-down-square-item-dot:bg-color': #141518, + // 倒计时方块数字字体色 + 'pc-count-down-square-item:text-color': $--color-white, + // 倒计时方块文案字体色 + 'pc-count-down-square-item-word:text-color': map.get($--skin-basic-configs, 'main-text-color'), + // 倒计时方块边框色 + 'pc-count-down-square-item:border-color': $--color-black, + + // 聊天消息底部输入框背景色 + 'pc-msg-bottom-input-wrap:bg-color': map.get($--skin-basic-configs, 'sub-bg-color'), + // 聊天消息底部输入框节点字体色 + 'pc-msg-bottom-input-wrap-item:text-color': map.get($--skin-basic-configs, 'main-text-color'), + // 聊天消息底部输入框节点 hover 字体色 + 'pc-msg-bottom-input-wrap-item--hover:text-color': map.get($--skin-basic-configs, 'main-highlight-text-color'), + + // 聊天消息输入框背景色 + 'pc-msg-input:bg-color': map.get($--skin-basic-configs, 'main-bg-color'), + // 聊天消息输入框字体色 + 'pc-msg-input:text-color': map.get($--skin-basic-configs, 'main-text-color'), + // 聊天消息输入框占位符字体色 + 'pc-msg-input-placeholder:text-color': rgba(map.get($--skin-basic-configs, 'main-text-color'), 0.6), + // 聊天消息输入框滚动条颜色 + 'pc-msg-input:scrollbar-color': rgba(map.get($--skin-basic-configs, 'main-text-color'), 0.2), + + // 聊天消息发送按钮背景色 + 'pc-msg-send-button:bg-color': map.get($--skin-basic-configs, 'sub-primary-color'), + // 聊天消息发送按钮禁用状态下的背景色 + 'pc-msg-send-button--disabled:bg-color': rgba(map.get($--skin-basic-configs, 'sub-primary-color'), 0.6), + // 聊天消息发送按钮字体颜色 + 'pc-msg-send-button:text-color': $--color-white, + // 聊天消息发送按钮禁用状态下的字体颜色 + 'pc-msg-send-button--disabled:text-color': rgba($--color-white, 0.5), + + // 图片达到最大数量后的提示框背景色 + 'pws-pc-msg-input-popper__max-image-tips:bg-color': rgb(47, 130, 254), + // 图片达到最大数量后的提示框字体色 + 'pws-pc-msg-input-popper__max-image-tips:text-color': $--color-white, + + // 聊天输入框设置昵称占位背景色 + 'pc-set-nick-placeholder:bg-color': map.get($--skin-basic-configs, 'main-bg-color'), + // 聊天输入框设置昵称占位字体色 + 'pc-set-nick-placeholder:text-color': map.get($--skin-basic-configs, 'main-text-color'), + // 聊天输入框设置昵称占位高亮字体色 + 'pc-set-nick-placeholder-highlight:text-color': map.get($--skin-basic-configs, 'primary-color'), + + // 表情选择面板背景色 + 'pc-emotion-panel:bg-color': map.get($--skin-basic-configs, 'panel-bg-color'), + // 表情选择面板类型选择背景色 + 'pc-emotion-panel-select:bg-color': map.get($--skin-basic-configs, 'sub-bg-color'), + + // 更多面板背景色 + 'pc-more-panel:bg-color': map.get($--skin-basic-configs, 'panel-bg-color'), + // 更多面板字体色 + 'pc-more-panel:text-color': map.get($--skin-basic-configs, 'panel-text-color'), + // 更多面板字体高亮色 + 'pc-more-panel-text--hover:text-color': map.get($--skin-basic-configs, 'panel-highlight-text-color'), + // 更多面板选中框背景色 + 'pc-more-panel-checkbox--checked:bg-color': map.get($--skin-basic-configs, 'sub-primary-color'), + // 更多面板选中框图标色 + 'pc-more-panel-checkbox-icon--checked:text-color': map.get($--skin-basic-configs, 'panel-bg-color'), + + // 打赏面板背景色 + 'pc-donate-panel:bg-color': map.get($--skin-basic-configs, 'panel-bg-color'), + // 打赏礼物 hover 背景色 + 'pc-donate-good--hover:bg-color': $--color-white, + // 打赏礼物 hover 边框色 + 'pc-donate-good--hover:border-color': rgba(map.get($--skin-basic-configs, 'main-text-color'), 0.3), + // 打赏礼物道具名称字体色 + 'pc-donate-good-name:text-color': map.get($--skin-basic-configs, 'panel-text-color'), + // 打赏礼物道具价格字体色 + 'pc-donate-good-price:text-color': map.get($--skin-basic-configs, 'main-text-color'), + + // 中奖记录面板背景色 + 'pc-lottery-record-panel:bg-color': map.get($--skin-basic-configs, 'panel-bg-color'), + // 中奖记录面板关闭图标字体色 + 'pc-lottery-record-close:text-color': map.get($--skin-basic-configs, 'panel-text-color'), + + // 连麦描述图标字体色 + 'pc-connect-mic-desc-icon:text-color': map.get($--skin-basic-configs, 'describe-text-color'), + // 连麦描述文案字体色 + 'pc-connect-mic-desc:text-color': map.get($--skin-basic-configs, 'describe-text-color'), + // 连麦按钮背景色 + 'pc-connect-mic-button:bg-color': map.get($--skin-basic-configs, 'sub-bg-color'), + // 连麦按钮字体色 + 'pc-connect-mic-button:text-color': map.get($--skin-basic-configs, 'main-text-color'), + // 连麦按钮高亮字体色 + 'pc-connect-mic-button-highlight:text-color': #ff5b5b, + // 连麦中图标背景图 + 'pc-connect-mic-applying:icon-image': './imgs/pws-pc-connect-mic.gif', + + // 回放列表播放中按钮背景色 + 'pc-playback-list-playing:bg-color': map.get($--skin-basic-configs, 'primary-color'), +); diff --git a/src/skins/white/config.scss b/src/skins/white/config.scss new file mode 100644 index 0000000..c2135df --- /dev/null +++ b/src/skins/white/config.scss @@ -0,0 +1,7 @@ +@import '../_common/functions.scss'; +@import './config-common.scss'; +@import './config-pc.scss'; +@import './config-mobile.scss'; +@import './config-iar.scss'; + +$--skin-configs: generate-skin-setup-configs(); diff --git a/src/skins/white/imgs/pws-icon-more.png b/src/skins/white/imgs/pws-icon-more.png new file mode 100644 index 0000000000000000000000000000000000000000..0233f9635c6494aaa9fb152a993b3695267b564f GIT binary patch literal 283 zcmeAS@N?(olHy`uVBq!ia0vp^8X(NV3?%C=ER6$FEa{HEjtmSN`?>!lvI6-k0X`wF zhK7d5#>PfQMrLMa1_lN|HUt30fr2I`CP0Pk^Zp+NQamL=e!=Cds)VDKt*(`7*u)TY zF?0`5yvx(YF+}71-U+LD8yI+4Jtdl04J>TpdoXxgwZ3*P$l1Tfy&ZF zedi}He;3P;elU5*GZ&Hc1J?|SO*njB#&CS8Stk;~F{i=rfs%os1=H38kqWWQKW^>6 z5L)!~?(Fgj-x98Va7z)-Du|BrT{Foly0SJsKZ{-ZiTMkyouA(M^8U;GDf{q(L`|+n S;A)_&7(8A5T-G@yGywqf7GKB! literal 0 HcmV?d00001 diff --git a/src/skins/white/imgs/pws-pc-connect-mic.gif b/src/skins/white/imgs/pws-pc-connect-mic.gif new file mode 100644 index 0000000000000000000000000000000000000000..07571e87781e59628f44c7f8da301de8b4b54c5f GIT binary patch literal 20852 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 literal 0 HcmV?d00001 diff --git a/src/skins/white/imgs/pws-pc-watch-bg.png b/src/skins/white/imgs/pws-pc-watch-bg.png new file mode 100644 index 0000000000000000000000000000000000000000..a58a5b29886d36e6eb5e4c56095abecf5af5f6d6 GIT binary patch literal 419940 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

_sql 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

_%r-U)X%G+*+`g3sO&V4oZ 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�SfI! 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

}L6?QCdf?%mC+SmIBzbuYo3Q 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%0Dmt3 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 literal 0 HcmV?d00001 diff --git a/src/skins/white/imgs/pws-product-icon-recruitment.png b/src/skins/white/imgs/pws-product-icon-recruitment.png new file mode 100644 index 0000000000000000000000000000000000000000..86a5a39e61943b070d4350f5edab5c9afe2567fc GIT binary patch literal 7385 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 literal 0 HcmV?d00001 diff --git a/src/skins/white/imgs/pws-product-icon.png b/src/skins/white/imgs/pws-product-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..9eaad5cdf3dfacdeb5336c5cd48d8d58fdd900bc GIT binary patch literal 9355 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 F{{iv&&=&vz literal 0 HcmV?d00001 diff --git a/src/skins/white/imgs/pws-product-shop-car.png b/src/skins/white/imgs/pws-product-shop-car.png new file mode 100644 index 0000000000000000000000000000000000000000..55e4c53664b9b4eeec88398a9a40b3a5964bc248 GIT binary patch literal 4458 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 literal 0 HcmV?d00001 diff --git a/src/skins/white/imgs/pws-qa-entry.png b/src/skins/white/imgs/pws-qa-entry.png new file mode 100644 index 0000000000000000000000000000000000000000..933e25877fdd5a051444673837780da38f0b4dfd GIT binary patch literal 2671 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 literal 0 HcmV?d00001 diff --git a/src/skins/white/imgs/pws-qa-no-data-icon.png b/src/skins/white/imgs/pws-qa-no-data-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..772d92d4cf35a99dd79ffaac0abfb958d0ad2a99 GIT binary patch literal 1143 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 literal 0 HcmV?d00001 diff --git a/src/store/use-auth-store.ts b/src/store/use-auth-store.ts new file mode 100644 index 0000000..50c69b5 --- /dev/null +++ b/src/store/use-auth-store.ts @@ -0,0 +1,88 @@ +import { AuthInfoItem, AuthSettingItem, AuthSettingItemMap, AuthType } from '@polyv/live-watch-sdk'; +import { defineStore } from 'pinia'; +import { computed, ComputedRef, unref } from 'vue'; +import { useChannelStore } from './use-channel-store'; + +export interface AuthStoreState { + /** 观看条件列表 */ + authSettings: ComputedRef; + /** 观看条件数量 */ + authSettingLength: ComputedRef; + /** 是否只有一个观看条件 */ + onlyOneAuth: ComputedRef; + /** 观看条件按钮列表 */ + authButtonList: ComputedRef; + /** 登记观看表单设置 */ + authInfoFields: ComputedRef; + /** 是否已进行观看条件授权 */ + isAuthorized: ComputedRef; +} + +export interface AuthStoreActions { + /** 是否存在某个观看条件 */ + hasAuth(authType: AuthType): boolean; + /** 获取某个观看条件 */ + getAuthSettingItem: (authType: T) => AuthSettingItemMap | undefined; +} + +export interface AuthStore extends AuthStoreState, AuthStoreActions {} + +/** 观看条件 store */ +export const useAuthStore = defineStore<'auth', AuthStore>('auth', () => { + const channelStore = useChannelStore(); + + /** 观看条件列表 */ + const authSettings = computed(() => { + return channelStore.channelDetail?.authSetting?.authSettings ?? []; + }); + + /** 观看条件数量 */ + const authSettingLength = computed(() => { + return unref(authSettings).length; + }); + + /** 是否只有一个观看条件 */ + const onlyOneAuth = computed(() => { + return unref(authSettingLength) === 1; + }); + + /** 观看条件按钮列表 */ + const authButtonList = computed(() => { + return unref(authSettings).filter(authItem => { + return authItem.authType !== AuthType.Direct; + }); + }); + + /** 登记观看表单设置 */ + const authInfoFields = computed(() => { + return channelStore.channelDetail?.authSetting?.authInfoFields ?? []; + }); + + /** 是否已进行观看条件授权 */ + const isAuthorized = computed(() => { + return !!channelStore.channelDetail?.viewerInfo; + }); + + /** 是否存在某个观看条件 */ + function hasAuth(authType: AuthType): boolean { + return unref(authSettings).findIndex(authItem => authItem.authType === authType) !== -1; + } + + /** 获取某个观看条件 */ + function getAuthSettingItem(authType: T): AuthSettingItemMap | undefined { + return unref(authSettings).find(authItem => authItem.authType === authType) as + | AuthSettingItemMap + | undefined; + } + + return { + authSettings, + authSettingLength, + onlyOneAuth, + authButtonList, + authInfoFields, + isAuthorized, + hasAuth, + getAuthSettingItem, + }; +}); diff --git a/src/store/use-channel-info-store.ts b/src/store/use-channel-info-store.ts new file mode 100644 index 0000000..66af12e --- /dev/null +++ b/src/store/use-channel-info-store.ts @@ -0,0 +1,299 @@ +/** + * @file 频道信息 store + */ +import { DATE_FORMAT_SLASH } from '@/assets/constants/date-format'; +import { DEFAULT_CHANNEL_LOGO, DEFAULT_SPLASH_IMG } from '@/assets/constants/defaults'; +import { LangType } from '@/assets/lang/lang-enum'; +import { translate } from '@/assets/lang'; +import { + isAndroid, + isBaiduApp, + isIOS, + isQQBrowser, + isUCBrowser, + isWeixin, + isWorkWeixin, +} from '@/assets/utils/browser'; +import { resizeOSSImg } from '@/assets/utils/image'; +import { htmlStr2Text } from '@/assets/utils/string'; +import { getWatchCore } from '@/core/watch-sdk'; +import { ChannelBasicInfo, LiveStatus, PageViewShowLocation, YN } from '@polyv/live-watch-sdk'; +import { ynToBool } from '@utils-ts/boolean'; +import { formatDate } from '@utils-ts/date'; +import { defineStore } from 'pinia'; +import { computed, ComputedRef, Ref, ref, unref } from 'vue'; +import { useChannelStore } from './use-channel-store'; +import { useLangStore } from './use-lang-store'; + +export interface ChannelInfoStoreState { + /** 频道信息(中文) */ + cnChannelBasicInfo: Ref; + /** 频道信息(英文) */ + enChannelBasicInfo: Ref; + /** 频道信息(根据多语言返回) */ + channelInfo: ComputedRef; + /** 频道标题(根据多语言返回) */ + channelTitle: ComputedRef; + /** 频道主持人(根据多语言返回) */ + channelPublisher: ComputedRef; + /** 频道描述(根据多语言返回) */ + channelDescription: ComputedRef; + /** 频道描述是否为空 */ + channelDescriptionIsEmpty: ComputedRef; + /** 频道图标 */ + channelCoverImg: ComputedRef; + /** 频道引导页封面图 */ + channelSplashImg: ComputedRef; + /** PC 端观看页背景图 */ + pcWatchBackgroundImage: ComputedRef; + /** 观看浏览次数显示开关 */ + pvShowEnabled: ComputedRef; + /** 页面浏览次数 */ + pageViewCount: Ref; + /** 页面浏览次数显示位置 */ + pageViewCountLocation: ComputedRef; + /** 当前频道的点赞数 */ + likeCount: Ref; + /** 直播开始时间 */ + liveStartTime: ComputedRef; + /** 是否直播开始时间倒计时结束 */ + isLiveStartCountDownEnd: Ref; + /** 直播开始时间显示文案 */ + liveStartTimeText: ComputedRef; + /** 是否显示直播倒计时 */ + showLiveCountDown: ComputedRef; +} + +export interface ChannelInfoStoreAction { + /** 刷新频道信息 */ + syncChannelInfo: () => void; +} + +/** 频道信息 store */ +export interface ChannelInfoStore extends ChannelInfoStoreState, ChannelInfoStoreAction {} + +export const useChannelInfoStore = defineStore<'channelInfo', ChannelInfoStore>( + 'channelInfo', + () => { + const langStore = useLangStore(); + const channelStore = useChannelStore(); + + /** 频道信息(中文) */ + const cnChannelBasicInfo = ref({ + title: '', + publisher: '', + description: '', + }); + + /** 频道信息(英文) */ + const enChannelBasicInfo = ref({ + title: '', + publisher: '', + description: '', + }); + + /** 频道信息(根据多语言返回) */ + const channelInfo = computed(() => { + let info: ChannelBasicInfo = unref(cnChannelBasicInfo); + + if (langStore.englishSettingEnabled && langStore.currentLang !== LangType.Chinese) { + info = unref(enChannelBasicInfo); + } + + return info; + }); + + /** 频道标题(根据多语言返回) */ + const channelTitle = computed(() => unref(channelInfo).title); + + /** 频道主持人(根据多语言返回) */ + const channelPublisher = computed(() => { + let publisher = unref(channelInfo).publisher; + + if (!publisher && channelStore.isSeminarChannel) { + publisher = translate('seminar.host'); + } + + return publisher; + }); + + /** 频道描述(根据多语言返回) */ + const channelDescription = computed(() => unref(channelInfo).description); + + /** 频道描述是否为空 */ + const channelDescriptionIsEmpty = computed(() => { + const htmlContent = unref(channelDescription); + if (!htmlContent) { + return true; + } + // 具有以下标签的则不为空 + const labelName = ['img']; + for (let i = 0; i <= labelName.length; i++) { + if (htmlContent.indexOf(labelName[i]) !== -1) { + return false; + } + } + // 纯文本为空 + const htmlText = htmlStr2Text(htmlContent); + if (!htmlText) { + return true; + } + return false; + }); + + /** 频道图标 */ + const channelCoverImg = computed( + () => channelStore.channelDetail?.channelInfo?.coverImg ?? DEFAULT_CHANNEL_LOGO, + ); + + /** 频道引导页封面图 */ + const channelSplashImg = computed(() => { + let splashImg = channelStore.channelDetail?.channelInfo?.splashImg; + + // 由于引导页图片默认是竖状图,这里针对该默认图替换成横屏的 + if ( + !splashImg || + splashImg.replace(/^([a-z]+:)?\/\//, '') === + 'livestatic.videocc.net/assets/wimages/default_guide.png' + ) { + splashImg = DEFAULT_SPLASH_IMG; + } + + return resizeOSSImg(splashImg, 1280, 720); + }); + + /** PC 端观看页背景图 */ + const pcWatchBackgroundImage = computed(() => { + return channelStore.channelDetail?.theme.customPCWatchBackgroundImage ?? undefined; + }); + + /** 观看浏览次数显示开关 */ + const pvShowEnabled = computed(() => + ynToBool(channelStore.channelDetail?.channelConfig.pvShowEnabled || YN.N), + ); + + /** 页面浏览次数 */ + const pageViewCount = ref(0); + + /** 页面浏览次数显示位置,默认显示在频道介绍中 */ + const pageViewCountLocation = computed(() => { + const mobilePvShowLocation = channelStore.channelDetail?.channelConfig.mobilePvShowLocation; + + // 显示在频道介绍中 + if (mobilePvShowLocation === PageViewShowLocation.Desc) { + return PageViewShowLocation.Desc; + } + + // 显示在播放器 + if ( + mobilePvShowLocation === PageViewShowLocation.Player && + channelStore.liveStatus === LiveStatus.Live && + ((isAndroid && (isWeixin || isWorkWeixin)) || + (isIOS && !isQQBrowser && !isUCBrowser && !isBaiduApp)) + ) { + return PageViewShowLocation.Player; + } + + return PageViewShowLocation.Desc; + }); + + /** 当前频道的点赞数 */ + const likeCount = ref(0); + + /** 直播开始时间 */ + const liveStartTime = computed(() => { + return channelStore.channelDetail?.channelInfo.startTime ?? undefined; + }); + + /** 是否直播开始时间倒计时结束 */ + const isLiveStartCountDownEnd = ref(false); + + /** 直播开始时间显示文案 */ + const liveStartTimeText = computed(() => { + const time = unref(liveStartTime); + if (!time) { + return '- -'; + } + + return formatDate(time, DATE_FORMAT_SLASH); + }); + + /** 直播倒计时是否显示 */ + const showLiveCountDown = computed(() => { + const liveStartTimeVal = unref(liveStartTime); + // 后台开关 + if (!ynToBool(channelStore.channelDetail?.channelConfig.countEnabled, YN.N)) { + return false; + } + + // 没有返回开始时间 + if (!liveStartTimeVal) { + return false; + } + + // 直播中和已结束直播 + if ([LiveStatus.Live, LiveStatus.End].includes(channelStore.liveStatus)) { + return false; + } + + // 倒计时结束 + if (isLiveStartCountDownEnd.value) { + return false; + } + + return Date.now() < liveStartTimeVal; + }); + + /** 刷新频道信息 */ + function syncChannelInfo(): void { + const watchCore = getWatchCore(); + const channelDetail = watchCore.channel.getChannelDetail(); + const channelBasicInfo = watchCore.channel.getChannelBasicInfo('zh_CN'); + + cnChannelBasicInfo.value = { + title: channelBasicInfo.title, + publisher: channelBasicInfo.publisher, + description: channelBasicInfo.description, + }; + + const channelBasicEnInfo = watchCore.channel.getChannelBasicInfo('en'); + enChannelBasicInfo.value = { + title: channelBasicEnInfo.title, + publisher: channelBasicEnInfo.publisher, + description: channelBasicEnInfo.description, + }; + + pageViewCount.value = watchCore.channel.getPageViewCount(); + if (channelDetail.watchData.likes > likeCount.value) { + likeCount.value = channelDetail.watchData.likes; + } + } + + return { + cnChannelBasicInfo, + enChannelBasicInfo, + channelInfo, + + channelTitle, + channelPublisher, + channelDescription, + channelDescriptionIsEmpty, + channelCoverImg, + channelSplashImg, + pcWatchBackgroundImage, + + pvShowEnabled, + pageViewCount, + pageViewCountLocation, + + likeCount, + + liveStartTime, + isLiveStartCountDownEnd, + liveStartTimeText, + showLiveCountDown, + + syncChannelInfo, + }; + }, +); diff --git a/src/store/use-channel-menu-store.ts b/src/store/use-channel-menu-store.ts new file mode 100644 index 0000000..8ba8e67 --- /dev/null +++ b/src/store/use-channel-menu-store.ts @@ -0,0 +1,283 @@ +/** + * @file 频道菜单 store + */ +import { computed, ComputedRef, Ref, ref, unref } from 'vue'; +import { defineStore } from 'pinia'; +import { translate } from '@/assets/lang'; +import { getWatchCore } from '@/core/watch-sdk'; +import { ChannelMenuItem, ChannelMenuType } from '@polyv/live-watch-sdk'; +import cloneDeep from 'lodash-es/cloneDeep'; + +import { useInteractReceiveStore } from './use-interact-receive-store'; +import { useLangStore } from './use-lang-store'; +import { useWatchAppStore } from './use-watch-app-store'; + +export interface MenuDataType { + /** 是否创建该菜单节点 */ + visible: boolean; + /** 菜单标题 */ + label: string; +} + +/** 频道菜单 store */ +export interface ChannelMenuStoreState { + /** 中文频道菜单 */ + cnChannelMenus: Ref; + /** 英文频道菜单 */ + enChannelMenus: Ref; + /** 频道菜单(根据多语言返回) */ + channelMenus: ComputedRef; + /** 聊天室菜单信息 */ + chatMenuData: ComputedRef; + /** 商品库菜单信息 */ + productMenuData: ComputedRef; + /** 用户列表菜单信息 */ + membersMenuData: ComputedRef; + /** 提问菜单信息 */ + askMenuData: ComputedRef; + /** 问答菜单信息 */ + qaMenuData: ComputedRef; + /** 投票活动菜单信息 */ + voteActiveMenuData: ComputedRef; + /** 邀请榜菜单信息 */ + inviteRankMenuData: ComputedRef; + /** 微活动菜单信息 */ + microActivityMenuData: ComputedRef; +} + +export interface ChannelMenuStoreAction { + /** 同步频道菜单数据 */ + syncChannelMenus: () => void; + /** 插入菜单 */ + addChannelMenu: (menuData: ChannelMenuItem, onlyType?: boolean) => void; + /** 移除菜单 */ + removeChannelMenu: (menuId: string) => void; + /** 根据菜单类型获取菜单数据 */ + getMenuData: (menuType: ChannelMenuType) => ChannelMenuItem | undefined; + /** 根据菜单类型获取菜单 Tab 名称 */ + filterMenuTabLabel: (menuType: ChannelMenuType, label: string) => string; +} + +/** 频道菜单 store */ +export interface ChannelMenuStore extends ChannelMenuStoreState, ChannelMenuStoreAction {} + +export const useChannelMenuStore = defineStore<'channelMenu', ChannelMenuStore>( + 'channelMenu', + () => { + const watchAppStore = useWatchAppStore(); + const langStore = useLangStore(); + const interactReceiveStore = useInteractReceiveStore(); + + /** 中文频道菜单 */ + const cnChannelMenus = ref([]); + /** 英文频道菜单 */ + const enChannelMenus = ref([]); + + /** 频道菜单(根据多语言返回) */ + const channelMenus = computed(() => { + let menus = unref(cnChannelMenus); + + if (langStore.englishSettingEnabled && !langStore.isChineseLang) { + menus = unref(enChannelMenus); + } + + if (watchAppStore.isWatchBackUrl) { + menus = menus.filter(menu => menu.menuType === ChannelMenuType.Chat); + } + + return menus.map(menu => { + return { + ...menu, + name: filterMenuTabLabel(menu.menuType, menu.name), + }; + }); + }); + + /** 同步频道菜单 */ + function syncChannelMenus(): void { + const watchCore = getWatchCore(); + cnChannelMenus.value = cloneDeep(watchCore.menu.getChannelMenus('zh_CN')); + enChannelMenus.value = cloneDeep(watchCore.menu.getChannelMenus('en')); + + const productMenu = getMenuData(ChannelMenuType.Buy); + interactReceiveStore.productEnabled = !!productMenu; + } + + /** + * 插入菜单 + * @param menuData 菜单数据 + * @param onlyType 是否唯一的 menuType + */ + function addChannelMenu(menuData: ChannelMenuItem, onlyType = false): void { + const findMenuIndex = (menu: ChannelMenuItem) => { + if (onlyType && menu.menuType === menuData.menuType) { + return true; + } + return menu.menuId === menuData.menuId; + }; + + // 插入中文菜单 + const cnIndex = unref(cnChannelMenus).findIndex(findMenuIndex); + if (cnIndex === -1) { + const newCnMenus = [...unref(cnChannelMenus), menuData]; + cnChannelMenus.value = newCnMenus; + } + // 插入英文菜单 + const enIndex = unref(enChannelMenus).findIndex(findMenuIndex); + if (enIndex === -1) { + const newEnMenus = [...unref(enChannelMenus), menuData]; + enChannelMenus.value = newEnMenus; + } + } + + /** + * 移除菜单 + * @param menuId 菜单 id + */ + function removeChannelMenu(menuId: string): void { + // 移除中文菜单 + const newCnMenus = unref(cnChannelMenus).filter(menu => menu.menuId !== menuId); + cnChannelMenus.value = newCnMenus; + // 移除英文菜单 + const newEnMenus = unref(enChannelMenus).filter(menu => menu.menuId !== menuId); + enChannelMenus.value = newEnMenus; + } + + /** + * 根据菜单类型获取菜单数据 + * @param menuType 菜单类型 + */ + function getMenuData(menuType: ChannelMenuType): ChannelMenuItem | undefined { + const menus = unref(channelMenus); + const index = menus.findIndex(menu => menu.menuType === menuType); + return index === -1 ? undefined : menus[index]; + } + + /** 获取菜单栏 */ + function filterMenuTabLabel(menuType: ChannelMenuType, label: string): string { + type TranslateOptionItem = [translateText: string, ...cnTexts: string[]]; + + const translateOptions: Record = { + [ChannelMenuType.Desc]: [translate('menu.tabName.desc'), '直播介绍'], + [ChannelMenuType.Chat]: [translate('menu.tabName.chat'), '聊天', '互动聊天'], + [ChannelMenuType.Text]: [translate('menu.tabName.text'), '图文'], + [ChannelMenuType.Seat]: [translate('menu.tabName.seat'), '云席'], + [ChannelMenuType.Quiz]: [translate('menu.tabName.quiz'), '提问'], + [ChannelMenuType.Iframe]: [translate('menu.tabName.iframe'), '链接'], + [ChannelMenuType.Previous]: [translate('menu.tabName.previous'), '往期'], + [ChannelMenuType.Tuwen]: [translate('menu.tabName.tuwen'), '图文直播'], + [ChannelMenuType.QA]: [translate('menu.tabName.qa'), '问答'], + [ChannelMenuType.Buy]: [translate('menu.tabName.buy'), '边看边买'], + [ChannelMenuType.Invite]: [translate('menu.tabName.invite'), '邀请榜'], + [ChannelMenuType.Members]: [translate('menu.tabName.members'), '成员'], + [ChannelMenuType.Vote]: [translate('menu.tabName.vote'), '投票'], + [ChannelMenuType.MicroActivity]: [translate('menu.tabName.microActivity'), '微活动'], + }; + + const [translateText, ...cnTexts] = translateOptions[menuType]; + if (!label || (!langStore.isChineseLang && cnTexts.includes(label))) { + label = translateText; + } + + return label; + } + + /** 聊天室菜单信息 */ + const chatMenuData = computed(() => { + const menuData = getMenuData(ChannelMenuType.Chat); + + return { + visible: true, + label: menuData?.name ?? translate('menu.tabName.chat'), + }; + }); + + /** 商品库菜单信息 */ + const productMenuData = computed(() => { + const menuData = getMenuData(ChannelMenuType.Buy); + + return { + visible: !!menuData && interactReceiveStore.productEnabled, + label: menuData?.name ?? translate('menu.tabName.buy'), + }; + }); + + /** 用户列表菜单信息 */ + const membersMenuData = computed(() => { + const menuData = getMenuData(ChannelMenuType.Members); + + return { + visible: !!menuData, + label: menuData?.name ?? translate('menu.tabName.members'), + }; + }); + + /** 提问菜单信息 */ + const askMenuData = computed(() => { + const menuData = getMenuData(ChannelMenuType.Quiz); + + return { + visible: !!menuData, + label: menuData?.name ?? translate('menu.tabName.quiz'), + }; + }); + + /** 问答菜单信息 */ + const qaMenuData = computed(() => { + const menuData = getMenuData(ChannelMenuType.QA); + + return { + visible: !!menuData, + label: menuData?.name ?? translate('menu.tabName.qa'), + }; + }); + + /** 投票活动菜单信息 */ + const voteActiveMenuData = computed(() => { + return { + visible: interactReceiveStore.voteActiveEnabled, + label: translate('menu.tabName.vote'), + }; + }); + + /** 邀请榜菜单信息 */ + const inviteRankMenuData = computed(() => { + const menuData = getMenuData(ChannelMenuType.Invite); + + return { + visible: !!menuData, + label: menuData?.name ?? translate('menu.tabName.invite'), + }; + }); + + /** 微活动菜单信息 */ + const microActivityMenuData = computed(() => { + const menuData = getMenuData(ChannelMenuType.MicroActivity); + + return { + visible: !!menuData, + label: menuData?.name ?? translate('menu.tabName.microActivity'), + }; + }); + + return { + cnChannelMenus, + enChannelMenus, + channelMenus, + chatMenuData, + productMenuData, + membersMenuData, + askMenuData, + qaMenuData, + voteActiveMenuData, + inviteRankMenuData, + microActivityMenuData, + + addChannelMenu, + removeChannelMenu, + syncChannelMenus, + getMenuData, + filterMenuTabLabel, + }; + }, +); diff --git a/src/store/use-channel-store.ts b/src/store/use-channel-store.ts new file mode 100644 index 0000000..42968a6 --- /dev/null +++ b/src/store/use-channel-store.ts @@ -0,0 +1,189 @@ +/** + * @file 频道 store + */ +import { DEFAULT_VERIFY_QUERY_FREQUENCY } from '@/assets/constants/defaults'; +import { isMobile } from '@/assets/utils/browser'; +import { getWatchCore } from '@/core/watch-sdk'; +import { + ChannelDetail, + ChannelScene, + ChannelWatchLayout, + ChatMessageUser, + ChatUserTypes, + LiveStatus, + YN, + StreamType, + MarqueeData, +} from '@polyv/live-watch-sdk'; +import { ynToBool } from '@utils-ts/boolean'; +import { defineStore } from 'pinia'; +import { computed, ComputedRef, ref, Ref, unref } from 'vue'; + +export interface ChannelStoreState { + /** 频道详情数据 */ + channelDetail: Ref; + /** 频道号 */ + channelId: ComputedRef; + /** 频道是否处于测试模式 */ + testModeStatus: Ref; + /** 频道直播状态 */ + liveStatus: Ref; + /** 频道直播状态(根据测试模式返回) */ + liveStatusByDebug: ComputedRef; + /** 当前最新的直播场次号 */ + currentSessionId: Ref; + /** 观看页地址 */ + watchUrl: ComputedRef; + /** 是否为普通直播频道 */ + isAloneChannel: ComputedRef; + /** 是否为三分屏频道 */ + isPptChannel: ComputedRef; + /** 是否为研讨会频道 */ + isSeminarChannel: ComputedRef; + /** 渠道 id */ + promoteId: Ref; + /** 当前频道是否为音频直播 */ + isOnlyAudioLive: ComputedRef; + /** 讲师信息 */ + teacherInfo: ComputedRef; + /** 观看页移动端布局 */ + mobileWatchLayout: ComputedRef; + /** 是否为竖屏观看页布局 */ + isPortraitWatchLayout: ComputedRef; + /** 当前直播推流类型 */ + currentStreamType: Ref; + /** 跑马灯数据 */ + marqueeData: Ref; + /** 唯一登录校验轮训频率,单位:秒 */ + channelVerifyQueryFrequency: Ref; +} + +export interface ChannelStoreActions { + /** 同步频道详情 */ + syncChannelDetail: () => void; + /** 同步频道 store */ + syncChannelStore: () => void; +} + +/** 频道 store */ +export interface ChannelStore extends ChannelStoreState, ChannelStoreActions {} + +export const useChannelStore = defineStore<'channel', ChannelStore>('channel', () => { + const channelDetail = ref(); + + /** 频道号 */ + const channelId = computed(() => `${unref(channelDetail)?.channelInfo.channelId || ''}`); + + /** 频道是否处于测试模式 */ + const testModeStatus = ref(false); + + /** 频道直播状态 */ + const liveStatus = ref(LiveStatus.End); + + /** 频道直播状态(根据测试模式返回) */ + const liveStatusByDebug = computed(() => { + // 测试模式为避免暴露直播信息,固定设成暂无直播,testModeStatus 类似于 pageWatch.isDebug,用于判断测试模式。 + if (unref(testModeStatus)) { + return LiveStatus.End; + } + return unref(liveStatus); + }); + + /** 当前直播场次号 */ + const currentSessionId = ref(''); + + /** 观看页地址 */ + const watchUrl = computed(() => unref(channelDetail)?.channelInfo?.watchCodeUrl || ''); + + /** 是否为普通直播频道 */ + const isAloneChannel = computed( + () => unref(channelDetail)?.channelInfo?.scene === ChannelScene.Alone, + ); + + /** 是否为三分屏频道 */ + const isPptChannel = computed( + () => unref(channelDetail)?.channelInfo?.scene === ChannelScene.Ppt, + ); + + /** 是否为研讨会频道 */ + const isSeminarChannel = computed( + () => unref(channelDetail)?.channelInfo?.scene === ChannelScene.Seminar, + ); + + /** 观看页移动端布局 */ + const mobileWatchLayout = computed(() => { + return channelDetail.value?.channelInfo.watchLayout || ChannelWatchLayout.Normal; + // return ChannelWatchLayout.Normal; + }); + + /** 是否为竖屏观看页布局 */ + const isPortraitWatchLayout = computed(() => { + return unref(mobileWatchLayout) === ChannelWatchLayout.Portrait && isMobile; + }); + + /** 渠道 id */ + const promoteId = ref(); + + /** 当前频道是否为音频直播 */ + const isOnlyAudioLive = computed(() => { + return ynToBool(unref(channelDetail)?.channelConfig.audioOnlyEnabled, YN.N); + }); + + /** 当前直播推流类型 */ + const currentStreamType = ref(); + + /** 讲师信息 */ + const teacherInfo = computed(() => { + const detailVal = unref(channelDetail); + return { + userId: unref(channelId), + nick: detailVal?.channelTeacher?.nickName || '', + pic: detailVal?.channelTeacher?.avatar || '', + userType: ChatUserTypes.Teacher, + actor: detailVal?.channelTeacher?.actor, + }; + }); + + /** 跑马灯数据 */ + const marqueeData = ref(); + + const channelVerifyQueryFrequency = ref(DEFAULT_VERIFY_QUERY_FREQUENCY); + + /** 同步频道详情 */ + function syncChannelDetail() { + const watchCore = getWatchCore(); + channelDetail.value = watchCore.channel.getChannelDetail(); + } + + function syncChannelStore(): void { + const watchCore = getWatchCore(); + testModeStatus.value = watchCore.channel.getTestModeStatus(); + liveStatus.value = watchCore.channel.getLiveStatus(); + currentSessionId.value = watchCore.channel.getCurrentSessionId(); + promoteId.value = watchCore.channel.getPromoteId(); + } + + return { + channelDetail, + syncChannelDetail, + syncChannelStore, + + channelId, + testModeStatus, + liveStatus, + liveStatusByDebug, + currentSessionId, + watchUrl, + isAloneChannel, + isPptChannel, + isSeminarChannel, + mobileWatchLayout, + isPortraitWatchLayout, + promoteId, + isOnlyAudioLive, + teacherInfo, + currentStreamType, + marqueeData, + channelVerifyQueryFrequency, + }; +}); diff --git a/src/store/use-chat-msg-store.ts b/src/store/use-chat-msg-store.ts new file mode 100644 index 0000000..37540d1 --- /dev/null +++ b/src/store/use-chat-msg-store.ts @@ -0,0 +1,435 @@ +import { isSpecialUserType } from '@/assets/constants/special-user-types'; +import { isUndefined } from '@/assets/utils/types'; +import { ChatMessageUser, ChatMsgSource, ChatMsgType } from '@polyv/live-watch-sdk'; +import { defineStore } from 'pinia'; +import { ref, Ref, unref } from 'vue'; +import { useChatStore } from './use-chat-store'; +import { useViewerStore } from './use-viewer-store'; + +export type HistoryDataPosition = 'header' | 'tail'; + +export interface ChatMsgStoreState { + /** 不显示的消息来源 */ + hideChatMsgSources: Ref; + /** 一批消息的数量 */ + batchCount: Ref; + /** 是否已加载完聊天历史消息 */ + historyEnd: Ref; + + /** 是否显示更多消息 */ + moreMsgVisible: Ref; + /** 显示更多消息 */ + showMoreMsg(): void; + /** 隐藏更多消息 */ + hideMoreMsg(): void; +} + +export interface ChatMsgStoreAction { + /** 根据 id 获取下标 */ + getRealIndexById(id: string): number | undefined; + /** 根据 id 设置下标 */ + setRealIndexById(id: string, index: number): void; + /** 根据 id 删除下表 */ + deleteRealIndexById(id: string): void; + /** 递增所有的 realIndex */ + increaseRealIndex(): void; + /** 获取服务端最新消息的下标 */ + getRealStartIndex(): number; + /** 设置服务端最新消息的下标 */ + setRealStartIndex(index: number): void; + /** 获取服务端最旧消息的下标 */ + getRealEndIndex(): number; + /** 设置服务端最旧消息的下标 */ + setRealEndIndex(index: number): void; + + /** 获取消息列表 */ + getHistoryData(): ChatMsgType[]; + /** 设置消息列表 */ + resetHistoryData(list: ChatMsgType[]): void; + /** 设置历史列表的消息对象 */ + setHistoryData(index: number, chatMsg: ChatMsgType): void; + /** 从 historyData 中寻找下标索引 */ + findHistoryIndex(id: string): number; + /** 根据 id 从 historyData 中寻找消息对象 */ + findHistoryById( + id: string, + msgSource?: ChatMsgSource, + ): T | undefined; + /** 根据 id 移除历史数据 */ + removeHistoryData(id: string): void; + /** 合并到消息列表 */ + concatHistoryData(data: ChatMsgType[], position: HistoryDataPosition): void; + + /** 合并一批 queue 数据到 historyData 中 */ + concatQueueToHistoryData(isAll?: boolean): ChatMsgType[]; + /** 获取消息等待队列 */ + getMsgQueue(): ChatMsgType[]; + /** 插入消息等待队列 */ + pushMsgQueue(chatMsg: ChatMsgType): void; + /** 设置等待队列 */ + resetMsgQueue(list: ChatMsgType[]): void; + + /** 判断聊天消息是否为服务端中存在的消息 */ + isChatServiceMsg(chatMsg: ChatMsgType): boolean; + /** 获取消息对象中的用户信息 */ + getChatMsgUser(chatMsg: ChatMsgType): ChatMessageUser | undefined; + /** 是否本地发送的消息 */ + isLocalMsg(chatMsg: ChatMsgType): boolean; + /** 是否自己发送到消息 */ + isSelfMsg(chatMsg: ChatMsgType): boolean; + /** 是否为特殊用户发送的消息 */ + isSpecialUserMsg(chatMsg: ChatMsgType): boolean; + + /** 重置聊天消息 store */ + resetChatMsgStore(): void; +} + +export interface ChatMsgStore extends ChatMsgStoreState, ChatMsgStoreAction {} + +/** + * 聊天消息 store + */ +export const useChatMsgStore = defineStore<'chatMsg', ChatMsgStore>('chatMsg', () => { + const chatStore = useChatStore(); + const viewerStore = useViewerStore(); + + /** 不显示的消息来源 */ + const hideChatMsgSources = ref([]); + + /** 一批消息的数量 */ + const batchCount = ref(20); + + /** 是否已加载完聊天历史消息 */ + const historyEnd = ref(false); + + /** 是否显示更多消息 */ + const moreMsgVisible = ref(false); + + /** 显示更多消息 */ + function showMoreMsg() { + moreMsgVisible.value = true; + } + + /** 隐藏更多消息 */ + function hideMoreMsg() { + moreMsgVisible.value = false; + } + + /** ---------- realIndex - start ---------- */ + /** 服务端聊天消息下标 */ + let msgRealIndex: UniversalParams = {}; + + /** 服务端最新消息的下标 */ + let realStartIndex = -1; + + /** 服务端最旧消息的下标 */ + let realEndIndex = -1; + + /** 根据 id 获取下标 */ + function getRealIndexById(id: string): number | undefined { + return msgRealIndex[id]; + } + + /** 根据 id 设置下标 */ + function setRealIndexById(id: string, index: number): void { + msgRealIndex[id] = index; + } + + /** 根据 id 删除下表 */ + function deleteRealIndexById(id: string): void { + delete msgRealIndex[id]; + } + + /** + * 递增所有的 realIndex + */ + function increaseRealIndex() { + realStartIndex += 1; + realEndIndex += 1; + const msgRealIndexVal = msgRealIndex as UniversalParams; + Object.keys(msgRealIndexVal).forEach(key => { + if (!isUndefined(msgRealIndexVal[key])) { + msgRealIndexVal[key] += 1; + } + }); + } + + /** 获取服务端最新消息的下标 */ + function getRealStartIndex(): number { + return realStartIndex; + } + + /** 设置服务端最新消息的下标 */ + function setRealStartIndex(index: number): void { + realStartIndex = index; + } + + /** 获取服务端最旧消息的下标 */ + function getRealEndIndex(): number { + return realEndIndex; + } + + /** 设置服务端最旧消息的下标 */ + function setRealEndIndex(index: number): void { + realEndIndex = index; + } + /** ---------- realIndex - end ---------- */ + + /** ---------- msgQueue - start ---------- */ + /** 等待插入的消息队列 */ + let msgQueue: ChatMsgType[] = []; + + /** 获取消息等待队列 */ + function getMsgQueue(): ChatMsgType[] { + return msgQueue; + } + + /** 插入消息等待队列 */ + function pushMsgQueue(chatMsg: ChatMsgType): void { + msgQueue.push(chatMsg); + } + + /** 设置等待队列 */ + function resetMsgQueue(list: ChatMsgType[]): void { + msgQueue = list; + } + /** ---------- msgQueue - end ---------- */ + + /** ---------- historyData - start ---------- */ + /** 完整的消息列表 */ + let historyData: ChatMsgType[] = []; + + /** 获取消息列表 */ + function getHistoryData(): ChatMsgType[] { + return historyData; + } + + /** 设置消息列表 */ + function resetHistoryData(list: ChatMsgType[]): void { + historyData = list; + } + + /** + * 设置历史列表的消息对象 + * @param index 下标 + * @param chatMsg 消息对象 + */ + function setHistoryData(index: number, chatMsg: ChatMsgType) { + historyData[index] = chatMsg; + } + + /** + * 从 historyData 中寻找下标索引 + * @param id 消息 id + */ + function findHistoryIndex(id: string): number { + return historyData.findIndex(chatMsg => chatMsg.id === id); + } + + /** + * 根据 id 从 historyData 中寻找消息对象 + * @param id 消息 id + * @param msgSource 消息类型 + */ + function findHistoryById( + id: string, + msgSource?: ChatMsgSource, + ): T | undefined { + const historyList = historyData; + const index = historyList.findIndex(chatMsg => { + if (!msgSource) { + return chatMsg.id === id; + } + return chatMsg.id === id && chatMsg.msgSource === msgSource; + }); + return historyList[index] as T; + } + + /** + * 根据 id 移除历史数据 + * @param id 消息 id + */ + function removeHistoryData(id: string) { + // 从 realIndex 记录中删除,并将目标 id 之后的消息递减 + const refRealIndex = msgRealIndex[id]; + if (!isUndefined(refRealIndex)) { + Object.keys(msgRealIndex).forEach(realKey => { + const realIndex = msgRealIndex[realKey]; + if (!isUndefined(realIndex) && realIndex > refRealIndex) { + msgRealIndex[realKey] = realIndex - 1; + } + }); + + deleteRealIndexById(id); + + const _realEndIndex = getRealEndIndex(); + if (_realEndIndex >= refRealIndex) { + setRealEndIndex(_realEndIndex - 1); + } + + const _realStartIndex = getRealStartIndex(); + if (_realStartIndex > refRealIndex) { + setRealStartIndex(_realStartIndex - 1); + } + } + + // 删除消息列表中的值 + const historyIndex = findHistoryIndex(id); + if (historyIndex !== -1) { + historyData.splice(historyIndex, 1); + } + } + + /** + * 合并到消息列表 + * @param data 合并到消息列表 + * @param position 位置 + */ + function concatHistoryData(data: ChatMsgType[], position: HistoryDataPosition) { + if (position === 'header') { + historyData = data.concat(historyData); + } else { + historyData = historyData.concat(data); + } + } + /** ---------- historyData - end ---------- */ + + /** + * 获取消息对象中的用户信息 + * @param chatMsg 消息对象 + */ + function getChatMsgUser(chatMsg: ChatMsgType): ChatMessageUser | undefined { + if ('user' in chatMsg) { + return chatMsg.user; + } + } + + /** + * 是否本地发送的消息 + * @param chatMsg 消息 + */ + function isLocalMsg(chatMsg: ChatMsgType): boolean { + if ('isLocal' in chatMsg) { + return !!chatMsg.isLocal; + } + return false; + } + + /** + * 是否自己发送到消息 + * @param chatMsg 消息 + */ + function isSelfMsg(chatMsg: ChatMsgType): boolean { + return getChatMsgUser(chatMsg)?.userId === viewerStore.viewerId; + } + + /** + * 是否为特殊用户发送的消息 + * @param chatMsg 消息 + */ + function isSpecialUserMsg(chatMsg: ChatMsgType): boolean { + const user = getChatMsgUser(chatMsg); + const userType = user?.userType; + if (!userType) return false; + return isSpecialUserType(userType); + } + + /** + * 合并 queue 数据到 historyData 中 + * @param isAll 是否将所有消息插入 + */ + function concatQueueToHistoryData(isAll = false): ChatMsgType[] { + const queueLength = msgQueue.length; + let spliceCount = unref(batchCount); + + if (isAll) { + spliceCount = queueLength; + } else if (queueLength / 2 > spliceCount) { + spliceCount = Math.round(queueLength / 2); + } + + const concatData = msgQueue.splice(0, spliceCount); + if (concatData.length) { + concatHistoryData(concatData, 'tail'); + } + return concatData; + } + + /** + * 判断聊天消息是否为服务端中存在的消息 + * @param chatMsg 聊天消息 + */ + function isChatServiceMsg(chatMsg: ChatMsgType): boolean { + let isServiceMsg = true; + + const msgSource = chatMsg.msgSource; + // 特殊角色消息 + const isSpecial = isSpecialUserMsg(chatMsg); + + // 系统消息、红包领取消息 + const otherSource = [ChatMsgSource.System, ChatMsgSource.RedpaperReceive]; + if (otherSource.includes(msgSource)) { + isServiceMsg = false; + } + + // 只看我和主持人 + if (chatStore.onlySpecialMsg && !isSpecial) { + isServiceMsg = false; + } + + return isServiceMsg; + } + + /** + * 重置聊天消息 store + */ + function resetChatMsgStore() { + historyEnd.value = false; + msgRealIndex = {}; + resetMsgQueue([]); + resetHistoryData([]); + setRealStartIndex(-1); + setRealEndIndex(-1); + hideMoreMsg(); + } + + return { + hideChatMsgSources, + batchCount, + historyEnd, + + moreMsgVisible, + showMoreMsg, + hideMoreMsg, + + getRealIndexById, + setRealIndexById, + deleteRealIndexById, + increaseRealIndex, + getRealStartIndex, + setRealStartIndex, + getRealEndIndex, + setRealEndIndex, + + getMsgQueue, + pushMsgQueue, + resetMsgQueue, + concatQueueToHistoryData, + + getHistoryData, + resetHistoryData, + findHistoryIndex, + setHistoryData, + findHistoryById, + removeHistoryData, + concatHistoryData, + + isLocalMsg, + getChatMsgUser, + isSelfMsg, + isSpecialUserMsg, + isChatServiceMsg, + + resetChatMsgStore, + }; +}); diff --git a/src/store/use-chat-store.ts b/src/store/use-chat-store.ts new file mode 100644 index 0000000..2caed2e --- /dev/null +++ b/src/store/use-chat-store.ts @@ -0,0 +1,256 @@ +/** + * @file 聊天室 store + */ + +import { translate } from '@/assets/lang'; +import { isMobile } from '@/assets/utils/browser'; +import { getWatchCore } from '@/core/watch-sdk'; +import { PageErrorType } from '@/app/layout/page-error/page-error-type'; +import { ChannelMenuType, YN, ChatMsgQuoteOriginType } from '@polyv/live-watch-sdk'; +import { ynToBool } from '@utils-ts/boolean'; +import { defineStore } from 'pinia'; +import { computed, ComputedRef, ref, Ref, unref, watch } from 'vue'; +import { useChannelMenuStore } from './use-channel-menu-store'; +import { useChannelStore } from './use-channel-store'; +import { useViewerStore } from './use-viewer-store'; +import { useWatchAppStore } from './use-watch-app-store'; + +export interface ChatStoreState { + /** 配置是否启用聊天列表 */ + chatMsgListEnabled: Ref; + /** 聊天室是否连接失败 */ + connectError: Ref; + /** 聊天室是否被退出 */ + chatExited: Ref; + /** 当前聊天室的房间号 */ + channelRoomId: Ref; + /** 当前频道下所有的分房间列表 */ + chatRoomIds: Ref; + /** 当前是否为分房间 */ + isSibRoom: ComputedRef; + /** 聊天室是否已关闭 */ + chatRoomIsClosed: Ref; + /** 当前用户是否被踢出 */ + isKicked: Ref; + /** 当前用户是否被禁言 */ + isShield: Ref; + /** 聊天室点赞开关 */ + likeEnabled: ComputedRef; + /** 实时的点赞数 */ + realtimeLikes: Ref; + /** 是否过滤管理员的信息 */ + filterManagerMsgEnabled: ComputedRef; + /** 观众发送图片开关 */ + viewerSendImgEnabled: ComputedRef; + /** 只看特殊角色的消息(包括我本地发的) */ + onlySpecialMsg: Ref; + /** 聊天室开关 */ + watchChatEnabled: ComputedRef; + /** 欢迎语开关 */ + welcomeEnabled: ComputedRef; + /** 聊天室情绪反馈开关 */ + emotionalFeedbackEnabled: ComputedRef; + /** 聊天室在线人数开关 */ + chatOnlineNumberEnable: ComputedRef; + /** 聊天室在线人数 */ + onlineUserCount: Ref; + /** 聊天室输入框占位符 */ + chatInputPlaceholder: ComputedRef; + /** 是否禁用聊天室输入框 */ + chatInputDisabled: ComputedRef; + /** 当前正在引用的聊天消息 */ + currentQuoteMsg: Ref; +} + +export interface ChatStoreAction { + /** 切换 onlySpecialMsg */ + toggleOnlySpecialMsg(): void; + /** 同步聊天室 store */ + syncChatStore(): void; +} + +export interface ChatStore extends ChatStoreState, ChatStoreAction {} + +export const useChatStore = defineStore<'chat', ChatStore>('chat', () => { + const channelStore = useChannelStore(); + const watchAppStore = useWatchAppStore(); + const channelMenuStore = useChannelMenuStore(); + const viewerStore = useViewerStore(); + + /** 配置是否启用聊天列表 */ + const chatMsgListEnabled = ref(true); + + /** 聊天室是否连接失败 */ + const connectError = ref(false); + + /** 聊天室是否被退出 */ + const chatExited = ref(false); + + /** 当前聊天室的房间号 */ + const channelRoomId = ref(''); + + /** 当前频道下所有的分房间列表 */ + const chatRoomIds = ref([]); + + /** 当前是否为分房间 */ + const isSibRoom = computed(() => unref(chatRoomIds).length !== 0); + + /** 聊天室是否已关闭 */ + const chatRoomIsClosed = ref(false); + + /** 当前用户是否被踢出 */ + const isKicked = ref(false); + + /** 当前用户是否被禁言 */ + const isShield = ref(false); + + /** 聊天室点赞开关 */ + const likeEnabled = computed(() => { + return ynToBool(channelStore.channelDetail?.channelConfig.sendFlowersEnabled, YN.N); + }); + + /** 实时的点赞数 */ + const realtimeLikes = ref(0); + + /** 是否过滤管理员的信息 */ + const filterManagerMsgEnabled = computed(() => { + return ynToBool(channelStore.channelDetail?.channelConfig.filterManagerMsgEnabled, YN.N); + }); + + /** 观众发送图片开关 */ + const viewerSendImgEnabled = computed(() => { + return ynToBool(channelStore.channelDetail?.channelConfig.viewerSendImgEnabled, YN.N); + }); + + /** 只看特殊角色的消息(包括我本地发的) */ + const onlySpecialMsg = ref(false); + + watch( + () => unref(filterManagerMsgEnabled), + () => { + if (unref(filterManagerMsgEnabled)) { + onlySpecialMsg.value = true; + } + }, + { + immediate: true, + }, + ); + + /** 切换 onlySpecialMsg */ + function toggleOnlySpecialMsg() { + onlySpecialMsg.value = !unref(onlySpecialMsg); + } + + /** 聊天室开关 */ + const watchChatEnabled = computed(() => { + return ynToBool(channelStore.channelDetail?.channelConfig.watchChatEnabled, YN.Y); + }); + + /** 欢迎语开关 */ + const welcomeEnabled = computed(() => { + return ynToBool(channelStore.channelDetail?.channelConfig.welcomeEnabled, YN.N); + }); + + /** 聊天室情绪反馈开关 */ + const emotionalFeedbackEnabled = computed(() => { + return ynToBool(channelStore.channelDetail?.channelConfig.emotionEnabled, YN.N); + }); + + /** 聊天室在线人数开关 */ + const chatOnlineNumberEnable = computed(() => { + return ynToBool(channelStore.channelDetail?.channelConfig.chatOnlineNumberEnable, YN.N); + }); + + /** 聊天室在线人数 */ + const onlineUserCount = ref(0); + + /** 聊天室输入框占位符 */ + const chatInputPlaceholder = computed(() => { + // 聊天室被关闭 + if (unref(chatRoomIsClosed)) { + return translate('chat.closeRoom'); + } + + let placeholder = translate('chat.input.placeholder'); + + // 针对移动端在未设置昵称下更改文案 + if (isMobile && !viewerStore.hasNickname) { + placeholder = translate('chat.input.placeholder3'); + } + + // 针对竖屏观看页更改文案 + if (channelStore.isPortraitWatchLayout) { + placeholder = translate('chat.input.placeholder2'); + } + + // 后台中聊天室的占位设置 + const chatMenu = channelMenuStore.getMenuData(ChannelMenuType.Chat); + if (chatMenu && chatMenu.content) { + placeholder = chatMenu.content; + } + return placeholder; + }); + + /** 是否禁用聊天室输入框 */ + const chatInputDisabled = computed(() => { + // 聊天室被关闭 + if (unref(chatRoomIsClosed)) { + return true; + } + return false; + }); + + /** 当前正在引用的聊天消息 */ + const currentQuoteMsg = ref(); + + function syncChatStore(): void { + const watchCore = getWatchCore(); + const chatInfo = watchCore.chat.getChatInfo(); + channelRoomId.value = watchCore.chat.getChatRoomId(); + chatRoomIds.value = chatInfo.chatRoomIds; + chatExited.value = chatInfo.chatExited; + chatRoomIsClosed.value = chatInfo.chatRoomIsClosed; + isKicked.value = chatInfo.isKicked; + isShield.value = chatInfo.isShield; + + if (unref(realtimeLikes) === 0) { + realtimeLikes.value = channelStore.channelDetail?.watchData.likes ?? 0; + } + + // 如果被踢出了则跳走页面 + if (isKicked.value) { + watchAppStore.setPageError({ + type: PageErrorType.NotAuthorized, + title: translate('base.notAuthorized'), + }); + } + } + + return { + chatMsgListEnabled, + connectError, + chatExited, + channelRoomId, + chatRoomIds, + isSibRoom, + chatRoomIsClosed, + isKicked, + isShield, + realtimeLikes, + filterManagerMsgEnabled, + viewerSendImgEnabled, + onlySpecialMsg, + watchChatEnabled, + welcomeEnabled, + likeEnabled, + emotionalFeedbackEnabled, + chatOnlineNumberEnable, + onlineUserCount, + chatInputPlaceholder, + chatInputDisabled, + currentQuoteMsg, + syncChatStore, + toggleOnlySpecialMsg, + }; +}); diff --git a/src/store/use-common-store.ts b/src/store/use-common-store.ts new file mode 100644 index 0000000..d2b27d5 --- /dev/null +++ b/src/store/use-common-store.ts @@ -0,0 +1,17 @@ +import { AreaDataJson } from '@/plugins/polyv-ui/types'; +import { defineStore } from 'pinia'; +import { ref, Ref } from 'vue'; + +export interface CommonStoreState { + /** 中国地区数据 */ + areaData: Ref; +} + +export const useCommonStore = defineStore<'common', CommonStoreState>('common', () => { + /** 中国地区数据 */ + const areaData = ref([]); + + return { + areaData, + }; +}); diff --git a/src/store/use-connect-mic-store.ts b/src/store/use-connect-mic-store.ts new file mode 100644 index 0000000..55cc757 --- /dev/null +++ b/src/store/use-connect-mic-store.ts @@ -0,0 +1,220 @@ +import { translate } from '@/assets/lang'; +import { getWatchCore } from '@/core/watch-sdk'; +import { + ConnectMicItem, + ConnectMicStatus, + ConnectMicType, + NetworkStatus, + UplinkNetworkQuality, +} from '@polyv/live-watch-sdk'; +import { defineStore } from 'pinia'; +import { computed, ComputedRef, ref, Ref, unref } from 'vue'; + +export interface ConnectMicStoreState { + /** 配置是否使用连麦 */ + connectMicEnabled: Ref; + /** 当前环境是否支持连麦 */ + supportConnectMic: Ref; + /** 是否开启了连麦 */ + openMicStatus: Ref; + /** 连麦类型 */ + connectMicType: Ref; + /** 用户连麦状态 */ + connectMicStatus: Ref; + /** 当前用户是否正在连麦中 */ + isConnectMicing: ComputedRef; + /** 连麦列表 */ + connectMicList: Ref; + /** 过滤后的连麦列表(移除主讲流) */ + filterConnectMicList: ComputedRef; + /** 主讲流对象 */ + masterMicItem: ComputedRef; + /** 当前连麦用户是否为主讲 */ + masterIsSelf: ComputedRef; + /** 主讲流是否关闭摄像头 */ + masterIsVideoMuted: ComputedRef; + /** 主讲流是否关闭麦克风 */ + masterIsAudioMuted: ComputedRef; + /** 主讲头衔 */ + masterActor: ComputedRef; + /** 主讲昵称 */ + masterNickname: ComputedRef; + /** 主讲的连麦方式 */ + masterConnectMicType: ComputedRef; + /** 本地流对象 */ + localMicItem: ComputedRef; + /** 本地流是否关闭摄像头 */ + localIsVideoMuted: ComputedRef; + /** 本地流是否关闭麦克风 */ + localIsAudioMuted: ComputedRef; + /** 本地流的连麦方式 */ + localConnectMicType: ComputedRef; + /** 连麦上行网络质量 */ + uplinkNetworkQuality: Ref; + /** 连麦上行网络状态 */ + uplinkNetworkStatus: Ref; +} + +export interface ConnectMicStoreAction { + /** 同步连麦信息 */ + syncConnectMicInfo(): void; + /** 同步连麦列表 */ + syncConnectMicList(): void; +} + +export interface ConnectMicStore extends ConnectMicStoreState, ConnectMicStoreAction {} + +/** + * 连麦 store + */ +export const useConnectMicStore = defineStore<'connectMic', ConnectMicStore>('connectMic', () => { + /** 配置是否使用连麦 */ + const connectMicEnabled = ref(true); + + /** 当前环境是否支持连麦 */ + const supportConnectMic = ref(true); + + /** 是否开启了连麦 */ + const openMicStatus = ref(false); + + /** 连麦类型 */ + const connectMicType = ref(ConnectMicType.Video); + + /** 用户连麦状态 */ + const connectMicStatus = ref(ConnectMicStatus.NotConnect); + + /** 当前用户是否正在连麦中 */ + const isConnectMicing = computed(() => { + const status = unref(connectMicStatus); + return [ConnectMicStatus.Publishing, ConnectMicStatus.Connected].includes(status); + }); + + /** 连麦列表 */ + const connectMicList: Ref = ref([]); + + /** 过滤连麦列表 */ + const filterConnectMicList = computed(() => { + const micList = unref(connectMicList); + const streamList = micList.filter(micItem => { + return !micItem.isMaster; + }); + return streamList.sort((prevMicItem, nextMicItem) => { + if (nextMicItem.isLocal) return 1; + return -1; + }); + }); + + /** 主讲流对象 */ + const masterMicItem = computed(() => { + const micList = unref(connectMicList); + const masterIndex = micList.findIndex(micItem => micItem.isMaster); + return masterIndex === -1 ? undefined : micList[masterIndex]; + }); + + /** 当前连麦用户是否为主讲 */ + const masterIsSelf = computed(() => { + return !!unref(masterMicItem)?.isSelf; + }); + + /** 主讲流是否关闭摄像头 */ + const masterIsVideoMuted = computed(() => { + return unref(masterMicItem)?.isVideoMuted ?? false; + }); + + /** 主讲流是否关闭麦克风 */ + const masterIsAudioMuted = computed(() => { + return unref(masterMicItem)?.isAudioMuted ?? false; + }); + + /** 主讲头衔 */ + const masterActor = computed(() => { + if (unref(masterIsSelf)) { + return translate('connectMic.me'); + } + if (unref(masterMicItem)?.isTeacher) { + return translate('connectMic.teacher'); + } + return undefined; + }); + + /** 主讲昵称 */ + const masterNickname = computed(() => { + return unref(masterMicItem)?.nickname; + }); + + /** 主讲的连麦方式 */ + const masterConnectMicType = computed(() => { + return unref(masterMicItem)?.currentConnectMicType; + }); + + /** 本地流对象 */ + const localMicItem = computed(() => { + const micList = unref(connectMicList); + const localIndex = micList.findIndex(micItem => micItem.isLocal); + return localIndex === -1 ? undefined : micList[localIndex]; + }); + + /** 本地流是否关闭摄像头 */ + const localIsVideoMuted = computed(() => { + return unref(localMicItem)?.isVideoMuted ?? false; + }); + + /** 本地流是否关闭麦克风 */ + const localIsAudioMuted = computed(() => { + return unref(localMicItem)?.isAudioMuted ?? false; + }); + + /** 本地流的连麦方式 */ + const localConnectMicType = computed(() => { + return unref(localMicItem)?.currentConnectMicType; + }); + + /** 连麦上行网络质量 */ + const uplinkNetworkQuality = ref(0); + + /** 连麦上行网络状态 */ + const uplinkNetworkStatus = ref(NetworkStatus.Unknown); + + function syncConnectMicInfo(): void { + const watchCore = getWatchCore(); + const connectMicInfo = watchCore.connectMic.getConnectMicInfo(); + + supportConnectMic.value = connectMicInfo.supportConnectMic; + openMicStatus.value = connectMicInfo.openMicStatus; + connectMicType.value = connectMicInfo.connectMicType; + connectMicStatus.value = connectMicInfo.connectMicStatus; + uplinkNetworkQuality.value = connectMicInfo.uplinkNetworkQuality; + uplinkNetworkStatus.value = connectMicInfo.uplinkNetworkStatus; + } + + function syncConnectMicList(): void { + const watchCore = getWatchCore(); + connectMicList.value = watchCore.connectMic.getConnectMicList(); + } + + return { + connectMicEnabled, + supportConnectMic, + openMicStatus, + connectMicType, + connectMicStatus, + isConnectMicing, + connectMicList, + filterConnectMicList, + masterMicItem, + masterIsSelf, + masterIsVideoMuted, + masterIsAudioMuted, + masterActor, + masterNickname, + masterConnectMicType, + localMicItem, + localIsVideoMuted, + localIsAudioMuted, + localConnectMicType, + uplinkNetworkQuality, + uplinkNetworkStatus, + syncConnectMicInfo, + syncConnectMicList, + }; +}); diff --git a/src/store/use-doc-store.ts b/src/store/use-doc-store.ts new file mode 100644 index 0000000..c846aa0 --- /dev/null +++ b/src/store/use-doc-store.ts @@ -0,0 +1,63 @@ +import { isMobile } from '@/assets/utils/browser'; +import { defineStore } from 'pinia'; +import { computed, ComputedRef, ref, Ref } from 'vue'; +import { useChannelStore } from './use-channel-store'; +import { LiveStatus } from '@polyv/live-watch-sdk'; +import { usePlaybackStore } from './use-playback-store'; + +export interface DocStoreState { + /** 配置是否使用文档 */ + docEnabled: Ref; + /** 能否创建文档 */ + canRenderDoc: ComputedRef; + /** 文档比例 */ + documentProportion: Ref; + /** 文档开关 */ + documentSwitch: Ref; +} + +export interface DocStoreActions { + /** 切换文档开关 */ + toggleDocumentSwitch(): void; +} + +export interface DocStore extends DocStoreState, DocStoreActions {} + +/** + * 文档 store + */ +export const useDocStore = defineStore<'doc', DocStore>('doc', () => { + const channelStore = useChannelStore(); + const playbackStore = usePlaybackStore(); + + /** 配置是否使用文档 */ + const docEnabled = ref(true); + + /** 能否创建文档 */ + const canRenderDoc = computed(() => { + // 移动端下,非直播或回放下不显示 + if (isMobile && !(channelStore.liveStatus === LiveStatus.Live || playbackStore.isPlaybacking)) { + return false; + } + return channelStore.isPptChannel || channelStore.isSeminarChannel; + }); + + /** 文档比例,宽/高 */ + const documentProportion = ref(); + + /** 文档开关 */ + const documentSwitch = ref(true); + + /** 切换文档开关 */ + function toggleDocumentSwitch() { + documentSwitch.value = !documentSwitch.value; + } + + return { + docEnabled, + canRenderDoc, + documentProportion, + documentSwitch, + toggleDocumentSwitch, + }; +}); diff --git a/src/store/use-donate-store.ts b/src/store/use-donate-store.ts new file mode 100644 index 0000000..3855064 --- /dev/null +++ b/src/store/use-donate-store.ts @@ -0,0 +1,341 @@ +/** + * @file 打赏 store + */ +import { translate } from '@/assets/lang'; +import { + DonateSetting, + YN, + DonateType, + DonateGoodData, + PayDonateData, +} from '@polyv/live-watch-sdk'; +import { defineStore } from 'pinia'; +import { computed, ComputedRef, ref, Ref, unref } from 'vue'; +import { useChannelStore } from '@/store/use-channel-store'; +import { useWeixinStore } from '@/store/use-weixin-store'; +import { storeDefinitionToRefs } from '@/plugins/pinia/util'; +import { ynToBool } from '@utils-ts/boolean'; +import { changeProtocol } from '@utils-ts/net'; +import { getWatchCore } from '@/core/watch-sdk'; +import { toast } from '@/hooks/components/use-toast'; +import { useWatchAppStore } from './use-watch-app-store'; + +export interface DonateGoodInfo extends DonateGoodData { + /** 翻译后的礼物名称 */ + goodTranslateName: string; + /** 礼物价格文案 */ + goodPriceText: string; + /** 礼物类型 */ + donateType: DonateType.Good; +} + +type DonatePageItem = + | DonateGoodInfo + | { + donateType: DonateType.Cash; + }; + +export interface DonateStoreState { + /** 打赏设置 */ + donateSetting: ComputedRef; + /** 现金打赏开关 */ + donateCashEnabled: ComputedRef; + /** 现金打赏最低的打赏金额 */ + donateCashMin: ComputedRef; + /** 现金打赏快捷选项 */ + donateCashQuickOptions: ComputedRef; + /** 现金打赏道具开关 */ + donateGoodEnabled: ComputedRef; + /** 积分打赏道具开关 */ + donatePointEnabled: ComputedRef; + /** 是否显示现金打赏 */ + showDonateCash: ComputedRef; + /** 是否显示现金道具打赏 */ + showDonateGood: ComputedRef; + /** 是否显示积分道具打赏 */ + showDonatePoint: ComputedRef; + /** 是否显示道具打赏 */ + showDonateGifts: ComputedRef; + /** 是否显示打赏功能 */ + showDonateFunction: ComputedRef; + /** 积分打赏礼物单位 */ + donatePointUnit: ComputedRef; + /** 所有打赏道具列表 */ + donateItemAll: ComputedRef; + /** 可以显示的打赏道具列表 */ + donateItemList: ComputedRef; + /** 将道具、现金打赏进行分页 */ + donateContentPages: ComputedRef; + /** 付费礼物列表 */ + payDonateGoods: ComputedRef; + /** PC 端下当前待支付的打赏数据 */ + waitPayDonateData: Ref; + /** 是否显示其他人的打赏特效 */ + donateAnimationVisible: Ref; +} + +export interface DonateStoreAction { + /** 切换打赏动画显示状态 */ + toggleDonateAnimationVisible: () => void; + /** 翻译打赏道具的道具名 */ + translateGoodName: (goodName: string) => string; + /** 获取打赏道具的价格文案 */ + getGoodPriceText: (goodPrice: string) => string; + /** 根据道具图片获取打赏道具信息 */ + findDonateGoodByImg: (targetGoodImg: string) => DonateGoodInfo | undefined; +} + +export interface DonateStore extends DonateStoreState, DonateStoreAction {} + +export const useDonateStore = defineStore<'donate', DonateStore>('donate', () => { + const watchAppStore = useWatchAppStore(); + const { channelDetail, isSeminarChannel } = storeDefinitionToRefs(useChannelStore); + const { weixinAccountFunctionEnabled, weixinPayEnabled } = storeDefinitionToRefs(useWeixinStore); + + /** 道具礼物中英文 */ + const goodNamesConfig = computed>(() => { + return { + 666: translate('donate.name.six'), + 小熊: translate('donate.name.bear'), + 麦克风: translate('donate.name.microphone'), + 别墅: translate('donate.name.villa'), + 咖啡: translate('donate.name.coffee'), + 奖杯: translate('donate.name.trophy'), + 小星星: translate('donate.name.star'), + 掌声: translate('donate.name.applause'), + 游艇: translate('donate.name.yacht'), + 火箭: translate('donate.name.rocket'), + 点赞: translate('donate.name.like'), + 烟火: translate('donate.name.fireworks'), + 皇冠: translate('donate.name.crown'), + 跑车: translate('donate.name.cars'), + 金蛋: translate('donate.name.goldenEggs'), + 钻石: translate('donate.name.diamonds'), + 飞机: translate('donate.name.plane'), + 鲜花: translate('donate.name.flower'), + }; + }); + + /** 打赏设置 */ + const donateSetting = computed(() => unref(channelDetail)?.donateSetting ?? undefined); + + /** 现金打赏开关 */ + const donateCashEnabled = computed(() => + ynToBool(unref(donateSetting)?.donateCashEnabled || YN.N), + ); + + /** 现金打赏最低的打赏金额 */ + const donateCashMin = computed(() => unref(donateSetting)?.cashMin || 0); + + /** 现金打赏快捷选项 */ + const donateCashQuickOptions = computed(() => unref(donateSetting)?.cashes || []); + + /** 现金打赏道具开关 */ + const donateGoodEnabled = computed(() => { + return ynToBool(unref(donateSetting)?.donateGoodEnabled || YN.N); + }); + + /** 积分打赏道具开关 */ + const donatePointEnabled = computed(() => { + return ynToBool(unref(donateSetting)?.donatePointEnabled || YN.N); + }); + + /** 是否显示现金打赏 */ + const showDonateCash = computed(() => { + return ( + unref(donateCashEnabled) && unref(weixinAccountFunctionEnabled) && unref(weixinPayEnabled) + ); + }); + + /** 是否显示现金道具打赏 */ + const showDonateGood = computed(() => { + return ( + unref(donateGoodEnabled) && unref(weixinAccountFunctionEnabled) && unref(weixinPayEnabled) + ); + }); + + /** 是否显示积分道具打赏 */ + const showDonatePoint = computed(() => { + return unref(donatePointEnabled); + }); + + /** 是否显示道具打赏 */ + const showDonateGifts = computed(() => { + return unref(showDonateGood) || unref(showDonatePoint); + }); + + /** 是否显示打赏功能 */ + const showDonateFunction = computed(() => { + if (watchAppStore.isWatchBackUrl) return false; + + return (unref(showDonateCash) || unref(showDonateGifts)) && !unref(isSeminarChannel); + }); + + /** 积分打赏礼物单位 */ + const donatePointUnit = computed(() => unref(donateSetting)?.pointUnit); + + /** 所有打赏道具列表 */ + const donateItemAll = computed(() => { + const watchCore = getWatchCore(); + let goods: DonateGoodData[] = []; + const goodData = watchCore.donate.getDonateGoods(); + + if (unref(donatePointEnabled)) { + goods = goodData.pointGoods; + } else { + goods = goodData.goods; + } + + return goods.map(good => { + return { + ...good, + goodTranslateName: translateGoodName(good.goodName), + goodPriceText: getGoodPriceText(good.goodPrice), + donateType: DonateType.Good, + }; + }); + }); + + /** 可以显示的打赏道具列表 */ + const donateItemList = computed(() => { + const goods = unref(donateItemAll); + + return goods.filter(good => { + // 道具的开关 + if (ynToBool(good.goodEnabled || YN.N) === false) { + return false; + } + + // 现金道具 + 付费道具 + 没开启超管后台支付开关和微信公众号功能 + if ( + unref(donateGoodEnabled) && + good.goodPrice !== 0 && + (!unref(weixinPayEnabled) || !unref(weixinAccountFunctionEnabled)) + ) { + return false; + } + + return true; + }); + }); + + /** 将道具、现金打赏进行分页 */ + const donateContentPages = computed(() => { + // 所有打赏种类,道具+现金 + const donateList: DonatePageItem[] = []; + + // 插入礼物打赏节点(含现金、积分礼物) + if (unref(showDonateGifts)) { + donateList.push(...unref(donateItemList)); + } + + // 插入现金打赏节点 + if (unref(showDonateCash)) { + donateList.push({ + donateType: DonateType.Cash, + }); + } + + const pages: DonatePageItem[][] = []; + const totalPages = Math.ceil(donateList.length / 10); + for (let i = 0; i < totalPages; i++) { + pages.push(donateList.slice(i * 10, i * 10 + 10)); + } + + return pages; + }); + + /** 付费礼物列表 */ + const payDonateGoods = computed(() => { + const goods = unref(donateItemAll); + return goods.filter(good => good.goodPrice > 0); + }); + + /** PC 端下当前待支付的打赏数据 */ + const waitPayDonateData = ref(); + + /** 是否显示其他人的打赏特效 */ + const donateAnimationVisible = ref(true); + + /** 切换打赏动画显示状态 */ + function toggleDonateAnimationVisible() { + donateAnimationVisible.value = !unref(donateAnimationVisible); + + if (donateAnimationVisible.value) { + toast.success(translate('donate.showAnimation.tips')); + } else { + toast.success(translate('donate.hideAnimation.tips')); + } + } + + /** 翻译打赏道具的道具名 */ + function translateGoodName(goodName: string): string { + const translateName = unref(goodNamesConfig)[goodName]; + + if (translateName) { + return translateName; + } + + return goodName; + } + + /** 获取打赏道具的价格文案 */ + function getGoodPriceText(goodPrice: string | number): string { + if (!goodPrice) return translate('donate.free'); + + if (unref(donateGoodEnabled)) { + return `¥${goodPrice}`; + } + + return `${goodPrice} ${unref(donatePointUnit) || translate('donate.spot')}`; + } + + /** + * 根据道具图片获取打赏道具信息 + * @param targetGoodImg 道具图片 + */ + function findDonateGoodByImg(targetGoodImg: string): DonateGoodInfo | undefined { + let goodInfo: DonateGoodInfo | undefined; + const list = unref(donateItemAll); + + for (let i = 0; i < list.length; i++) { + const good = list[i]; + const goodImg = changeProtocol(good.goodImg, 'https'); + const dynamicImg = changeProtocol(good.dynamicImg ?? '', 'https'); + const _targetGoodImg = changeProtocol(targetGoodImg, 'https'); + if (_targetGoodImg === goodImg || _targetGoodImg === dynamicImg) { + goodInfo = good; + break; + } + } + + return goodInfo; + } + + return { + donateSetting, + donateCashEnabled, + donateCashMin, + donateCashQuickOptions, + donateGoodEnabled, + donatePointEnabled, + showDonateCash, + showDonateGood, + showDonatePoint, + showDonateGifts, + showDonateFunction, + donatePointUnit, + donateItemAll, + donateItemList, + donateContentPages, + payDonateGoods, + + waitPayDonateData, + donateAnimationVisible, + + toggleDonateAnimationVisible, + translateGoodName, + getGoodPriceText, + findDonateGoodByImg, + }; +}); diff --git a/src/store/use-enroll-store.ts b/src/store/use-enroll-store.ts new file mode 100644 index 0000000..e113b2b --- /dev/null +++ b/src/store/use-enroll-store.ts @@ -0,0 +1,199 @@ +import { translate } from '@/assets/lang'; +import { getWatchCore } from '@/core/watch-sdk'; +import { + EnrollAuthType, + EnrollFieldItem, + EnrollFieldItemMobile, + EnrollFieldType, + EnrollFillTime, +} from '@polyv/live-watch-sdk'; +import { defineStore } from 'pinia'; +import { computed, ComputedRef, ref, Ref, unref } from 'vue'; +import { useChannelStore } from './use-channel-store'; + +export interface EnrollStoreState { + /** 报名观看开关 */ + enrollEnabled: Ref; + /** 报名审核开关 */ + auditEnabled: Ref; + /** 是否已有报名记录 */ + hasEnrolled: Ref; + /** 是否已审核通过 */ + hasAudited: Ref; + /** 填写时机 */ + fillTime: Ref; + /** 报名表单字段 */ + enrollFields: Ref; + /** 验证方式 */ + enrollAuthType: Ref; + /** 是否需要短信验证 */ + smsVerifyEnabled: Ref; + /** 验证字段对象 */ + enrollAuthField: ComputedRef; + /** 验证字段名称 */ + enrollAuthName: ComputedRef; + /** 验证字段提示 */ + enrollAuthTips: ComputedRef; + /** 当前已有报名记录但未通过 */ + auditNotPass: ComputedRef; + /** 需要在入口中进行报名观看 */ + needEnrollByEnter: ComputedRef; + /** 需要在互动前进行报名观看 */ + needEnrollByChat: ComputedRef; + /** 入口文本 */ + entranceText: ComputedRef; + /** 报名观看标题 */ + enrollTitle: ComputedRef; + /** banner 头图片 */ + enrollBanner: ComputedRef; + /** 是否使用报名观看姓名作为昵称 */ + enrollNickEnabled: Ref; +} + +export interface EnrollStoreAction { + /** 同步报名观看信息 */ + syncEnrollInfo: () => void; +} + +export interface EnrollStore extends EnrollStoreState, EnrollStoreAction {} + +/** + * 报名观看 store + */ +export const useEnrollStore = defineStore<'enroll', EnrollStore>('enroll', () => { + const channelStore = useChannelStore(); + + /** 报名观看开关 */ + const enrollEnabled = ref(false); + + /** 报名审核开关 */ + const auditEnabled = ref(false); + + /** 是否已有报名记录 */ + const hasEnrolled = ref(false); + + /** 是否已审核通过 */ + const hasAudited = ref(false); + + /** 填写时机 */ + const fillTime = ref(EnrollFillTime.BeforeEnter); + + /** 报名表单字段 */ + const enrollFields = ref([]); + + /** 验证方式 */ + const enrollAuthType = ref(EnrollAuthType.Mobile); + + /** 是否需要短信验证 */ + const smsVerifyEnabled = ref(false); + + /** 验证字段对象 */ + const enrollAuthField = computed(() => { + const fields = unref(enrollFields); + const mobileIndex = fields.findIndex(fieldItem => fieldItem.type === EnrollFieldType.Mobile); + + return fields[mobileIndex] as EnrollFieldItemMobile; + }); + + /** 验证字段名称 */ + const enrollAuthName = computed(() => { + const fieldItem = unref(enrollAuthField); + + return fieldItem?.name ?? ''; + }); + + /** 验证字段提示 */ + const enrollAuthTips = computed(() => { + const fieldItem = unref(enrollAuthField); + + return fieldItem?.tips ?? ''; + }); + + /** 当前已有报名记录但未通过 */ + const auditNotPass = computed( + () => unref(hasEnrolled) && unref(auditEnabled) && !unref(hasAudited), + ); + + /** 需要在入口中进行报名观看 */ + const needEnrollByEnter = computed(() => { + return ( + // 需要开启报名观看 + unref(enrollEnabled) && + // 填写时间是“进入直播前” + unref(fillTime) === EnrollFillTime.BeforeEnter && + // [没有报名记录]或者[有记录但未通过] + (!unref(hasEnrolled) || unref(auditNotPass)) + ); + }); + + /** 需要在互动前进行报名观看 */ + const needEnrollByChat = computed( + () => + // 需要开启报名观看 + unref(enrollEnabled) && + // 填写时间是“进入直播前” + unref(fillTime) === EnrollFillTime.BeforeChat && + // 没有报名记录 + !unref(hasEnrolled), + ); + + /** 入口文本 */ + const entranceText = computed(() => { + const text = + channelStore.channelDetail?.enrollSetting?.entranceText ?? translate('enroll.text'); + return text === '报名观看' ? translate('enroll.text') : text; + }); + + /** 报名观看标题 */ + const enrollTitle = computed(() => { + return channelStore.channelDetail?.enrollSetting?.title ?? ''; + }); + + /** banner 头部图 */ + const enrollBanner = computed(() => { + return channelStore.channelDetail?.enrollSetting?.banner ?? undefined; + }); + + /** 是否使用报名观看姓名作为昵称 */ + const enrollNickEnabled = ref(false); + + /** 同步信息 */ + function syncEnrollInfo() { + const watchCore = getWatchCore(); + const enrollInfo = watchCore.enroll.getEnrollInfo(); + + enrollEnabled.value = enrollInfo.enrollEnabled; + auditEnabled.value = enrollInfo.auditEnabled; + hasEnrolled.value = enrollInfo.hasEnrolled; + hasAudited.value = enrollInfo.hasAudited; + fillTime.value = enrollInfo.fillTime; + enrollFields.value = enrollInfo.enrollFields; + enrollAuthType.value = enrollInfo.enrollAuthType; + smsVerifyEnabled.value = enrollInfo.smsVerifyEnabled; + enrollNickEnabled.value = enrollInfo.enrollNickEnabled; + } + + return { + enrollEnabled, + auditEnabled, + hasEnrolled, + hasAudited, + fillTime, + enrollFields, + enrollAuthType, + smsVerifyEnabled, + + enrollAuthField, + enrollAuthName, + enrollAuthTips, + auditNotPass, + needEnrollByEnter, + needEnrollByChat, + entranceText, + enrollTitle, + enrollBanner, + enrollNickEnabled, + + syncEnrollInfo, + }; +}); diff --git a/src/store/use-finance-store.ts b/src/store/use-finance-store.ts new file mode 100644 index 0000000..95a18c3 --- /dev/null +++ b/src/store/use-finance-store.ts @@ -0,0 +1,148 @@ +import { computed, ComputedRef, ref, Ref } from 'vue'; +import { defineStore } from 'pinia'; + +import { + YN, + FinanceRiskConfirm, + FinanceRiskEvaluation, + FinanceRiskEvaluationLimitType, +} from '@polyv/live-watch-sdk'; + +import { ynToBool } from '@utils-ts/boolean'; +import { getWatchCore } from '@/core/watch-sdk'; + +/** + * 获取默认风险测评数据 + * @desc 设置一个默认值来走通流程,默认情况为“后置-自愿填写” + */ +function getDefaultRiskEvaluation(): FinanceRiskEvaluation { + return { + evaluationEnabled: YN.N, + questionnaireId: '1', + evaluationLimitType: FinanceRiskEvaluationLimitType.Pendant, + scoreLimit: 0, + score: -1, + passEvaluation: 1, + }; +} + +/** + * 获取默认的风险确认函数据 + */ +function getDefaultRiskConfirm(): FinanceRiskConfirm { + return { + riskConfirmEnabled: YN.N, + riskConfirmStatus: false, + }; +} + +export interface FinanceStoreState { + /** 风险确认函数据 */ + riskConfirm: Ref; + /** 风险确认函开关 */ + riskConfirmEnabled: ComputedRef; + /** 风险测评数据 */ + riskEvaluation: Ref; + /** 风险测评-是否展示引导页 */ + shouldShowSplashByRiskEvaluation: Ref; + /** 风险测评开关 */ + riskEvaluationEnabled: ComputedRef; + /** 风险测评-是否展示挂件入口 */ + riskEvaluationEntranceEnabled: ComputedRef; +} + +export interface FinanceStoreAction { + /** 初始化风险确认函数据 */ + initRiskConfirm: () => void; + /** 同步化风险确认函数据 */ + syncRiskConfirm: (riskEvaluation: Partial) => void; + /** 同步风险测评数据 */ + syncRiskEvaluation: (riskEvaluation: Partial) => void; + /** 初始化风险测评数据 */ + initRiskEvaluation: () => void; +} + +export interface FinanceStore extends FinanceStoreState, FinanceStoreAction {} + +/** @store 金融模块 */ +export const useFinanceStore = defineStore<'finance', FinanceStore>('finance', () => { + /** 风险确认函数据 */ + const riskConfirm = ref(getDefaultRiskConfirm()); + + /** 风险确认函开关 */ + const riskConfirmEnabled = computed(() => { + // 配置开关启用 && 未确认 + return ynToBool(riskConfirm.value.riskConfirmEnabled) && !riskConfirm.value.riskConfirmStatus; + }); + + /** 同步风险测评数据 */ + function syncRiskConfirm(data: Partial) { + const originData = riskConfirm.value; + riskConfirm.value = { + ...originData, + ...data, + }; + } + + /** 初始化风险确认函数据 */ + function initRiskConfirm() { + const watchCore = getWatchCore(); + const data = watchCore.channel.getChannelDetail().riskConfirm || getDefaultRiskConfirm(); + + riskConfirm.value = data; + } + + /** 风险测评数据 */ + const riskEvaluation = ref(getDefaultRiskEvaluation()); + + /** 风险测评-是否展示引导页 */ + const shouldShowSplashByRiskEvaluation = ref(false); + + /** 风险测评开关 */ + const riskEvaluationEnabled = computed(() => { + return ynToBool(riskEvaluation.value.evaluationEnabled); + }); + + /** 风险测评-是否展示挂件入口 */ + const riskEvaluationEntranceEnabled = computed(() => { + const watchCore = getWatchCore(); + + // 风险测评启用,且为后置条件时,需要展示挂件 + return watchCore.financeRiskEvaluation.judgeNeedShowRiskEvaluationInAfter(riskEvaluation.value); + }); + + /** 同步风险测评数据 */ + function syncRiskEvaluation(data: Partial) { + const originData = riskEvaluation.value; + riskEvaluation.value = { + ...originData, + ...data, + }; + } + + /** 初始化风险测评数据 */ + function initRiskEvaluation() { + const watchCore = getWatchCore(); + + const data = watchCore.channel.getChannelDetail().riskEvaluation || getDefaultRiskEvaluation(); + + riskEvaluation.value = data; + // 风险测评启用,且为前置条件时,需要强制展示引导页 + shouldShowSplashByRiskEvaluation.value = + watchCore.financeRiskEvaluation.judgeNeedShowRiskEvaluationInPre(riskEvaluation.value); + } + + return { + riskConfirm, + riskConfirmEnabled, + riskEvaluation, + shouldShowSplashByRiskEvaluation, + riskEvaluationEnabled, + riskEvaluationEntranceEnabled, + + initRiskConfirm, + syncRiskConfirm, + syncRiskEvaluation, + initRiskEvaluation, + }; +}); diff --git a/src/store/use-interact-receive-store.ts b/src/store/use-interact-receive-store.ts new file mode 100644 index 0000000..92bad88 --- /dev/null +++ b/src/store/use-interact-receive-store.ts @@ -0,0 +1,195 @@ +/** + * @file 互动功能接收端 store + */ + +import { computed, ComputedRef, ref, Ref, unref } from 'vue'; +import { defineStore } from 'pinia'; + +import { useChannelStore } from './use-channel-store'; +import { useLayoutStore } from './use-layout-store'; + +import { + AnnouncementTipsStatus, + getStorageTipsStatus, +} from '@/components/page-watch-common/interactive-receive/announcement/hooks/use-announcement-tips'; +import { LotteryRecordData } from '@/components/page-watch-common/interactive-receive/lottery/types/lottery-types'; +import { LangKey } from '@/assets/lang/types'; +import { YN } from '@polyv/live-watch-sdk'; + +import { ynToBool } from '@utils-ts/boolean'; +import { useWatchAppStore } from './use-watch-app-store'; + +/** + * 互动功能二次入口数据 + */ +export interface InteractiveEntranceData { + /** 类型 */ + type: string; + /** 入口名称(多语言 key) */ + name: LangKey; + /** 入口文本 */ + text?: string; + /** 图标(常规模板用) */ + icon: string; + /** 图标(竖屏大图标用) */ + icon2: string; + /** 点击时的回调事件 */ + onClick: () => void; +} + +export interface InteractReceiveStoreState { + /** 互动功能是否全屏处理 */ + isIarFullScreen: ComputedRef; + /** 互动功能二次入口列表 */ + interactiveEntrance: Ref; + /** 投诉反馈开关 */ + watchFeedbackEnabled: ComputedRef; + /** 公告提示是否显示 */ + announcementTipsVisible: Ref; + /** 公告功能是否显示 */ + announcementFunctionVisible: ComputedRef; + /** 当前中奖记录列表 */ + lotteryWinRecords: Ref; + /** 是否存在未提交的中奖记录 */ + hasNotReceivedLottery: ComputedRef; + /** 卡片推送入口是否正在显示 */ + pushCardPendantVisible: Ref; + /** 条件抽奖入口是否显示 */ + welfareLotteryPendantVisible: Ref; + /** 报名抽奖挂件是否显示 */ + enrollLotteryPendantVisible: Ref; + /** 红包挂件是否显示 */ + redpackPendantVisible: Ref; + /** 红包雨是否正在显示 */ + isGoOnRedpackRain: Ref; + /** 商品库开关 */ + productEnabled: Ref; + /** 投票活动开关 */ + voteActiveEnabled: ComputedRef; + /** 已投票的 id 列表 */ + votedList: Ref; + /** 是否显示问答的红点提示 */ + qaReminderVisible: Ref; +} + +export interface InteractReceiveStoreAction { + /** 设置互动二次入口,如果已存在则不生效 */ + setInteractiveEntrance(entranceData: InteractiveEntranceData): void; + /** 根据类型移除互动二次入口 */ + removeInteractiveEntrance(type: string): void; +} + +export interface InteractReceiveStore + extends InteractReceiveStoreState, + InteractReceiveStoreAction {} + +export const useInteractReceiveStore = defineStore<'interactReceive', InteractReceiveStore>( + 'interactReceive', + () => { + const watchAppStore = useWatchAppStore(); + const channelStore = useChannelStore(); + const layoutStore = useLayoutStore(); + + /** 互动功能是否全屏处理 */ + const isIarFullScreen = computed(() => { + return layoutStore.mobilePlayerIsPageFullscreen && !layoutStore.isHorizontalScreenOrientation; + }); + + /** 互动功能二次入口列表 */ + const interactiveEntrance = ref([]); + + /** 设置互动二次入口,如果已存在则不生效 */ + function setInteractiveEntrance(entranceData: InteractiveEntranceData): void { + const entrance = unref(interactiveEntrance); + const index = entrance.findIndex(entrance => entrance.type === entranceData.type); + if (index >= 0) return; + interactiveEntrance.value.push(entranceData); + } + + /** 根据类型移除互动二次入口 */ + function removeInteractiveEntrance(type: string): void { + const entrance = unref(interactiveEntrance); + const index = entrance.findIndex(entrance => entrance.type === type); + if (index >= 0) { + interactiveEntrance.value.splice(index, 1); + } + } + + /** 投诉反馈开关 */ + const watchFeedbackEnabled = computed(() => { + return ynToBool(channelStore.channelDetail?.channelConfig.watchFeedbackEnabled, YN.N); + }); + + /** 公告提示是否显示 */ + const announcementTipsVisible = ref( + getStorageTipsStatus() === AnnouncementTipsStatus.showing && !watchAppStore.isWatchBackUrl, + ); + + /** 公告功能是否显示 */ + const announcementFunctionVisible = computed(() => { + if (watchAppStore.isWatchBackUrl) return false; + + return !channelStore.isSeminarChannel; + }); + + /** 当前中奖记录列表 */ + const lotteryWinRecords = ref([]); + + /** 是否存在未提交的中奖记录 */ + const hasNotReceivedLottery = computed(() => { + return unref(lotteryWinRecords).some(item => !item.received); + }); + + /** 卡片推送入口是否正在显示 */ + const pushCardPendantVisible = ref(false); + + /** 条件抽奖入口是否显示 */ + const welfareLotteryPendantVisible = ref(false); + + /** 报名抽奖挂件是否显示 */ + const enrollLotteryPendantVisible = ref(false); + + /** 红包挂件是否显示 */ + const redpackPendantVisible = ref(false); + + /** 红包雨是否正在显示 */ + const isGoOnRedpackRain = ref(false); + + /** 商品库开关 */ + const productEnabled = ref(false); + + /** 投票活动开关 */ + const voteActiveEnabled = computed(() => { + if (watchAppStore.isWatchBackUrl) return false; + + return ynToBool(channelStore.channelDetail?.channelConfig.voteActiveEnabled, YN.N); + }); + + /** 已投票的 id 列表 */ + const votedList = ref([]); + + /** 是否显示问答的红点提示 */ + const qaReminderVisible = ref(false); + + return { + isIarFullScreen, + interactiveEntrance, + setInteractiveEntrance, + removeInteractiveEntrance, + watchFeedbackEnabled, + announcementTipsVisible, + announcementFunctionVisible, + lotteryWinRecords, + hasNotReceivedLottery, + pushCardPendantVisible, + welfareLotteryPendantVisible, + enrollLotteryPendantVisible, + redpackPendantVisible, + isGoOnRedpackRain, + productEnabled, + voteActiveEnabled, + votedList, + qaReminderVisible, + }; + }, +); diff --git a/src/store/use-invite-store.ts b/src/store/use-invite-store.ts new file mode 100644 index 0000000..397da1c --- /dev/null +++ b/src/store/use-invite-store.ts @@ -0,0 +1,144 @@ +/** + * @file 邀请 store + */ + +import { defineStore } from 'pinia'; +import { computed, ComputedRef, ref, Ref, unref } from 'vue'; + +import { getWatchCore } from '@/core/watch-sdk'; +import { useChannelMenuStore } from '@/store/use-channel-menu-store'; +import { useChannelStore } from '@/store/use-channel-store'; + +import { + TAB_NAME_CHAT, + TAB_NAME_DOC_OR_VIDEO, + TAB_NAME_MICRO_ACTIVITY, + TAB_NAME_SEAT, +} from '@/assets/constants/tab-name'; +import { paramGetter } from '@/hooks/core/use-query-params'; +import { isWeixin } from '@/assets/utils/browser'; +import { YN } from '@polyv/live-watch-sdk'; +import { ynToBool } from '@utils-ts/boolean'; +import { useLayoutStore } from './use-layout-store'; + +export interface InviteStoreState { + /** 企业微信分享海报的企微员工 ID */ + wxInviteId: Ref; + /** 邀请海报唯一ID */ + invitePosterId: Ref; + /** 当前用户邀请者 openId */ + inviteUserOpenId: Ref; + /** 当前用户邀请者 unionId */ + inviteUserUnionId: Ref; + /** 邀请海报开关 */ + invitePosterEnabled: ComputedRef; + /** 邀请榜开关 */ + inviteRankEnabled: ComputedRef; + /** 移动端聊天室 Tab 中邀请挂件是否显示 */ + mobileChatInvitePendantVisible: ComputedRef; + /** 移动端页面中常驻的邀请挂件是否显示 */ + mobileWatchInvitePendantVisible: ComputedRef; + /** 邀请海报选择页地址 */ + generatePosterUrl: ComputedRef; +} + +export interface InviteStoreAction { + /** 同步邀请信息 */ + syncInviteInfo: () => void; +} + +export interface InviteStore extends InviteStoreState, InviteStoreAction {} + +export const useInviteStore = defineStore<'invite', InviteStore>('invite', () => { + const channelStore = useChannelStore(); + const channelMenuStore = useChannelMenuStore(); + const layoutStore = useLayoutStore(); + + /** 企业微信分享海报的企微员工 ID */ + const wxInviteId = ref(paramGetter.wxInviteId()); + + /** 邀请海报唯一ID */ + const invitePosterId = ref(paramGetter.invitePosterId()); + + /** 邀请者 openId */ + const inviteUserOpenId = ref(); + + /** 邀请者 unionId */ + const inviteUserUnionId = ref(); + + /** 邀请海报开关 */ + const invitePosterEnabled = computed(() => { + return isWeixin && ynToBool(channelStore.channelDetail?.channelConfig.showInviteAccess, YN.N); + }); + + /** 邀请榜开关 */ + const inviteRankEnabled = computed(() => { + return channelMenuStore.inviteRankMenuData.visible; + }); + + /** 移动端聊天室 Tab 中邀请挂件是否显示 */ + const mobileChatInvitePendantVisible = computed(() => { + // 如果存在邀请榜的 tab 则不显示邀请榜挂件 + if (channelMenuStore.inviteRankMenuData.visible) { + return false; + } + + return unref(invitePosterEnabled); + }); + + /** 移动端页面中常驻的邀请挂件是否显示 */ + const mobileWatchInvitePendantVisible = computed(() => { + // 如果存在邀请榜的 tab 则不显示邀请榜挂件 + if (channelMenuStore.inviteRankMenuData.visible) { + return false; + } + + if (layoutStore.isPageFullscreenOrHorizontalScreen) { + return false; + } + + // 当前在以下的 tabName 不显示 + const excludeTabName: string[] = [ + TAB_NAME_CHAT, + TAB_NAME_SEAT, + TAB_NAME_MICRO_ACTIVITY, + TAB_NAME_DOC_OR_VIDEO, + ]; + if (excludeTabName.includes(layoutStore.mobileMenuCurrentName)) { + return false; + } + + return unref(invitePosterEnabled); + }); + + /** 邀请海报选择页地址 */ + const generatePosterUrl = computed(() => { + const watchCore = getWatchCore(); + return watchCore.invite.getInviteGeneratePosterUrl(); + }); + + /** 同步邀请信息 */ + function syncInviteInfo() { + const watchCore = getWatchCore(); + + const inviteUserInfo = watchCore.invite.getInviteUserInfo(false); + inviteUserOpenId.value = inviteUserInfo?.inviteOpenId; + inviteUserUnionId.value = inviteUserInfo?.inviteUnionId; + + invitePosterId.value = watchCore.invite.getInvitePosterId(); + wxInviteId.value = watchCore.invite.getWorkWxInviteId(); + } + + return { + wxInviteId, + invitePosterId, + inviteUserOpenId, + inviteUserUnionId, + invitePosterEnabled, + inviteRankEnabled, + mobileChatInvitePendantVisible, + mobileWatchInvitePendantVisible, + generatePosterUrl, + syncInviteInfo, + }; +}); diff --git a/src/store/use-lang-store.ts b/src/store/use-lang-store.ts new file mode 100644 index 0000000..7acf263 --- /dev/null +++ b/src/store/use-lang-store.ts @@ -0,0 +1,210 @@ +import { appEvents, eventBus } from '@/app/app-events'; +import { LangType } from '@/assets/lang/lang-enum'; +import { getWatchCore } from '@/core/watch-sdk'; +import { paramGetter } from '@/hooks/core/use-query-params'; +import { local } from '@just4/storage'; +import { YN } from '@polyv/live-watch-sdk'; +import { ynToBool } from '@utils-ts/boolean'; +import { defineStore } from 'pinia'; +import { computed, ComputedRef, ref, Ref, unref } from 'vue'; +import { useChannelStore } from './use-channel-store'; + +/** 判断目标是否为一个多语言 */ +const isAllowLang = (target: unknown): target is LangType => { + return Object.values(LangType).includes(target as LangType); +}; + +/** local 记录中的 key */ +const LOCAL_STORAGE_KEY = 'language'; + +/** 多语言选择节点类型 */ +export interface LangSwitchItem { + lang: LangType; + /** 文本 */ + text: string; +} + +export interface LangStoreState { + /** 英语设置开关 */ + englishSettingEnabled: ComputedRef; + /** 多语言开关 */ + langSwitchEnabled: ComputedRef; + /** 是否开启七国多语言 */ + isShowSevenLanguage: ComputedRef; + /** 是否显示日文语言切换(仅将英文的 text 换成日文文案) */ + japLangEnabled: ComputedRef; + /** 所有多语言选择列表 */ + allLangSwitchList: ComputedRef; + /** 多语言选择列表 */ + langSwitchList: ComputedRef; + /** 当前多语言 */ + currentLang: Ref; + /** 当前多语言文本 */ + currentLangText: ComputedRef; + /** 当前是否为中文语言 */ + isChineseLang: ComputedRef; +} + +export interface LangStoreAction { + /** 切换当前多语言 */ + switchLang: (lang: LangType) => void; + /** 根据当前语言转换游客名称 */ + translateNick: (nick: string) => string; +} + +/** 多语言 store */ +export interface LangStore extends LangStoreState, LangStoreAction {} + +/** 获取当前页面加载后的默认多语言 */ +function getDefaultLang(): LangType { + // 地址上的 lang 参数 + const queryLang = paramGetter.lang(); + if (isAllowLang(queryLang)) { + return queryLang; + } + + // localStorage 中记录的 + const localLang = local.get(LOCAL_STORAGE_KEY); + if (isAllowLang(localLang)) { + return localLang; + } + + // 系统浏览器的多语言 + const browserLang = (navigator.language || navigator.browserLanguage).toLowerCase(); + if (browserLang) { + // 中文以外的语言均判定为英文(逐一枚举工作量较大) + if (['zh', 'zh-cn'].includes(browserLang)) { + return LangType.Chinese; + } else { + return LangType.English; + } + } + + return LangType.Chinese; +} + +export const useLangStore = defineStore<'lang', LangStore>('lang', () => { + const channelStore = useChannelStore(); + + /** 英语设置开关 */ + const englishSettingEnabled = computed(() => + ynToBool(channelStore.channelDetail?.channelConfig?.englishSettingEnabled, YN.N), + ); + + /** 多语言开关 */ + const langSwitchEnabled = computed(() => + ynToBool(channelStore.channelDetail?.channelConfig.multilingualEnabled, YN.N), + ); + + /** 是否开启七国多语言 */ + const isShowSevenLanguage = computed(() => + ynToBool(channelStore.channelDetail?.customChannelSetting.isShowSevenLanguage, YN.N), + ); + + /** 是否显示日文语言切换(仅将英文的 text 换成日文文案) */ + const japLangEnabled = computed(() => + ynToBool(channelStore.channelDetail?.channelConfig.japLangEnabled, YN.N), + ); + + /** 所有多语言选择列表 */ + const allLangSwitchList = computed(() => { + let englishText = 'English-EN'; + if (unref(japLangEnabled)) { + englishText = 'Japanese - JPN'; + } + + return [ + { text: '简体中文-ZH', lang: LangType.Chinese }, + { text: englishText, lang: LangType.English }, + { text: 'Русский', lang: LangType.Russian }, + { text: 'Português', lang: LangType.Portuguese }, + { text: 'Español', lang: LangType.Spanish }, + { text: 'العربية', lang: LangType.Arabic }, + { text: 'فارسی', lang: LangType.Farsi }, + ]; + }); + + /** 多语言选择列表 */ + const langSwitchList = computed(() => { + return unref(allLangSwitchList).filter(item => { + // 没有开启七国语言,则只显示中文、英文语言 + if ( + !unref(isShowSevenLanguage) && + ![LangType.Chinese, LangType.English].includes(item.lang) + ) { + return false; + } + + return true; + }); + }); + + /** 当前多语言 */ + const currentLang = ref(getDefaultLang()); + + /** 当前多语言的文本 */ + const currentLangText = computed(() => { + const list = unref(allLangSwitchList); + const index = list.findIndex(item => item.lang === unref(currentLang)); + return index === -1 ? '' : list[index].text; + }); + + /** 当前是否为中文语言 */ + const isChineseLang = computed(() => unref(currentLang) === LangType.Chinese); + + /** + * 设置当前多语言 + * @param lang 多语言 + */ + function switchLang(lang: LangType) { + currentLang.value = lang; + local.set(LOCAL_STORAGE_KEY, lang); + + /** + * URL 带有 lang 参数,且参数值与保存的语言不一致时, + * 要删除参数值,否则下次进来还是参数值指定的语言。 + * 注意:IE <= 9 无效,因为不支持 history.replaceState + */ + if (history.replaceState) { + const search = location.search.replace(/([?&]lang=)(\w*)/, (match, $1, $2) => { + return $2 === lang ? match : $1; + }); + if (search !== location.search) { + history.replaceState(null, document.title, location.pathname + search + location.hash); + } + } + + const watchCore = getWatchCore(); + watchCore.updateAppConfig({ + language: lang === LangType.Chinese ? 'zh_CN' : 'en', + }); + + eventBus.$emit(appEvents.player.ResetUpPlayer); + } + + /** 根据当前语言转换游客名称 */ + function translateNick(nick: string): string { + let transNick = nick; + const nickPrefix = '观众'; + const nickPattern = new RegExp(nickPrefix + '/[0-9]+$'); + if (unref(currentLang) !== LangType.Chinese && nickPattern.test(nick)) { + transNick = `Guest/${nick.split('/')[1]}`; + } + return transNick; + } + + return { + englishSettingEnabled, + langSwitchEnabled, + isShowSevenLanguage, + japLangEnabled, + allLangSwitchList, + langSwitchList, + currentLang, + currentLangText, + isChineseLang, + + switchLang, + translateNick, + }; +}); diff --git a/src/store/use-layout-store.ts b/src/store/use-layout-store.ts new file mode 100644 index 0000000..1fe1cc6 --- /dev/null +++ b/src/store/use-layout-store.ts @@ -0,0 +1,160 @@ +/** + * @file 布局 store + */ + +import { defineStore } from 'pinia'; +import { computed, ComputedRef, ref, Ref, unref } from 'vue'; +import { useChannelStore } from './use-channel-store'; +import { ChannelSplashLayout, MainScreenContent } from '@polyv/live-watch-sdk'; +import { ScreenOrientationMode } from '@/hooks/core/use-screen-orient'; + +export interface LayoutStoreState { + /** 屏幕旋转模式 */ + screenOrientationMode: Ref; + /** 当前屏幕旋转角度是否为纵向 */ + isVerticalScreenOrientation: ComputedRef; + /** 当前屏幕旋转角度是否为横向 */ + isHorizontalScreenOrientation: ComputedRef; + /** 移动端下的引导页是否使用大图布局 */ + mobileSplashIsLarge: ComputedRef; + /** 主屏的内容 */ + mainScreen: Ref; + /** 副屏是否被收起 */ + subScreenPackUp: Ref; + /** 当前是否正在系统全屏 */ + isFullscreen: Ref; + /** PC 端下侧边菜单栏的激活 name */ + pcAsideTabCurrentName: Ref; + /** 移动端下底部菜单栏的激活 name */ + mobileMenuCurrentName: Ref; + /** 移动端下菜单栏 header 高度 */ + mobileMenuHeaderHeight: Ref; + /** 移动端布局顶部区域的高度 */ + mobileLayoutTopHeight: Ref; + /** 移动端布局底部区域的高度 */ + mobileLayoutBottomHeight: Ref; + /** 移动端布局底部区域到顶部的距离 */ + mobileLayoutBottomTop: Ref; + /** 移动端下播放器是否正在页面全屏 */ + mobilePlayerIsPageFullscreen: Ref; + /** 文档是否处于页面全屏 */ + mobileDocIsPageFullscreen: Ref; + /** 移动端聊天室背景地址 */ + mobileChatRoomBgUrl: ComputedRef; + /** 当前是页面全屏或者横屏 */ + isPageFullscreenOrHorizontalScreen: ComputedRef; +} + +export interface LayoutStoreActions { + /** 切换文档视频区域 */ + toggleMainScreen(): void; +} + +export interface LayoutStore extends LayoutStoreState, LayoutStoreActions {} + +export const useLayoutStore = defineStore<'layout', LayoutStore>('layout', () => { + const channelStore = useChannelStore(); + + /** 屏幕旋转模式 */ + const screenOrientationMode = ref(ScreenOrientationMode.Vertical); + + /** 当前屏幕旋转角度是否为纵向 */ + const isVerticalScreenOrientation = computed(() => { + return screenOrientationMode.value === ScreenOrientationMode.Vertical; + }); + + /** 当前屏幕旋转角度是否为横向 */ + const isHorizontalScreenOrientation = computed(() => { + return screenOrientationMode.value === ScreenOrientationMode.Horizontal; + }); + + /** 移动端下的引导页是否使用大图布局 */ + const mobileSplashIsLarge = computed(() => { + return channelStore.channelDetail?.channelConfig.splashLayout === ChannelSplashLayout.Large; + }); + + /** 主屏的内容 */ + const mainScreen = ref(MainScreenContent.Player); + + /** 切换文档视频区域 */ + function toggleMainScreen(): void { + if (mainScreen.value === MainScreenContent.Doc) { + mainScreen.value = MainScreenContent.Player; + } else { + mainScreen.value = MainScreenContent.Doc; + } + } + + /** 副屏是否被收起 */ + const subScreenPackUp = ref(false); + + /** 当前是否正在系统全屏 */ + const isFullscreen = ref(false); + + /** PC 端下侧边菜单栏的激活 name */ + const pcAsideTabCurrentName = ref(''); + + /** 移动端下底部菜单栏的激活 name */ + const mobileMenuCurrentName = ref(''); + + /** 移动端下菜单栏 header 高度 */ + const mobileMenuHeaderHeight = ref(40); + + /** 移动端布局顶部区域的高度 */ + const mobileLayoutTopHeight = ref(0); + + /** 移动端布局底部区域的高度 */ + const mobileLayoutBottomHeight = ref(0); + + /** 移动端下是否正在页面全屏 */ + const mobilePlayerIsPageFullscreen = ref(false); + + /** 文档是否处于页面全屏 */ + const mobileDocIsPageFullscreen = ref(false); + + /** 移动端布局底部区域到顶部的距离 */ + const mobileLayoutBottomTop = ref(0); + + /** 移动端聊天室背景地址 */ + const mobileChatRoomBgUrl = computed(() => { + const channelDetail = channelStore.channelDetail; + const chatBackgroundImage = channelDetail?.channelInfo.chatBackgroundImage; + const chatBackgroundImageOpacity = channelDetail?.channelInfo.chatBackgroundImageOpacity; + + if (!chatBackgroundImage) { + return; + } + + return chatBackgroundImageOpacity + ? `${chatBackgroundImage}?x-oss-process=image/blur,r_${chatBackgroundImageOpacity},s_${chatBackgroundImageOpacity}` + : chatBackgroundImage; + }); + + /** 当前是页面全屏或者横屏 */ + const isPageFullscreenOrHorizontalScreen = computed(() => { + return unref(mobilePlayerIsPageFullscreen) || unref(isHorizontalScreenOrientation); + }); + + return { + screenOrientationMode, + isVerticalScreenOrientation, + isHorizontalScreenOrientation, + + mobileSplashIsLarge, + mainScreen, + toggleMainScreen, + subScreenPackUp, + isFullscreen, + pcAsideTabCurrentName, + mobileMenuCurrentName, + mobileMenuHeaderHeight, + mobileLayoutTopHeight, + mobileLayoutBottomHeight, + mobileLayoutBottomTop, + mobilePlayerIsPageFullscreen, + mobileDocIsPageFullscreen, + mobileChatRoomBgUrl, + + isPageFullscreenOrHorizontalScreen, + }; +}); diff --git a/src/store/use-live-booking-store.ts b/src/store/use-live-booking-store.ts new file mode 100644 index 0000000..5e3874d --- /dev/null +++ b/src/store/use-live-booking-store.ts @@ -0,0 +1,138 @@ +/** + * @file 直播预约 store + */ + +import { defineStore } from 'pinia'; +import { computed, ComputedRef, Ref, ref, unref } from 'vue'; +import { useChannelStore } from './use-channel-store'; +import { ynToBool } from '@utils-ts/boolean'; +import { YN } from '@polyv/live-watch-sdk'; +import { isMobile, isWeixin, isWorkWeixin } from '@/assets/utils/browser'; +import { useChannelInfoStore } from './use-channel-info-store'; + +export interface LiveBookingStoreState { + /** 是否开启了短信预约 */ + smsBookingEnabled: ComputedRef; + /** 是否开启了微信预约 */ + wxBookingEnabled: ComputedRef; + /** 微信预约弹层提示文案 */ + bookingTips: ComputedRef; + /** 是否使用微信预约 */ + useWxBooking: ComputedRef; + /** 是否显示直播预约按钮 */ + showLiveBookingButton: ComputedRef; + /** 是否已短信预约 */ + isSmsLiveBooking: Ref; + /** 是否已微信预约 */ + isWxLiveBooking: Ref; + /** 是否已预约直播 */ + isLiveBooking: ComputedRef; + /** 微信预约人数 */ + wxBookingCount: Ref; + /** 是否已关注了微信公众号 */ + isWxSubscribed: ComputedRef; + /** 微信公众号图片 */ + weixinMpImgUrl: ComputedRef; +} + +export interface LiveBookingStoreAction { + /** 初始化直播预约数据 */ + initLiveBookingData(): void; +} + +export interface LiveBookingStore extends LiveBookingStoreState, LiveBookingStoreAction {} + +export const useLiveBookingStore = defineStore<'liveBooking', LiveBookingStore>( + 'liveBooking', + () => { + const channelStore = useChannelStore(); + const channelInfoStore = useChannelInfoStore(); + + /** 是否开启了短信预约 */ + const smsBookingEnabled = computed(() => { + return ynToBool(channelStore.channelDetail?.smsBooking?.bookingEnabled, YN.N); + }); + + /** 是否开启了微信预约 */ + const wxBookingEnabled = computed(() => { + return ynToBool(channelStore.channelDetail?.wxBooking?.bookingEnabled, YN.N); + }); + + /** 微信预约弹层提示文案 */ + const bookingTips = computed(() => { + return channelStore.channelDetail?.channelConfig.bookingTips || ''; + }); + + /** 是否使用微信预约 */ + const useWxBooking = computed(() => { + return isMobile && isWeixin && !isWorkWeixin && unref(wxBookingEnabled); + }); + + /** 是否显示直播预约按钮 */ + const showLiveBookingButton = computed(() => { + // 没有设置开始时间 + if (!channelInfoStore.liveStartTime) { + return false; + } + + // 倒计时结束 + if (channelInfoStore.isLiveStartCountDownEnd) { + return false; + } + + // 微信环境 + if (unref(useWxBooking)) { + return unref(wxBookingEnabled); + } + + // 非微信环境 + return unref(smsBookingEnabled); + }); + + /** 是否已短信预约 */ + const isSmsLiveBooking = ref(false); + + /** 是否已微信预约 */ + const isWxLiveBooking = ref(false); + + /** 是否已预约直播 */ + const isLiveBooking = computed(() => { + return unref(useWxBooking) ? unref(isWxLiveBooking) : unref(isSmsLiveBooking); + }); + + /** 微信预约人数 */ + const wxBookingCount = ref(0); + + /** 是否已关注了微信公众号 */ + const isWxSubscribed = computed(() => { + return ynToBool(channelStore.channelDetail?.wxBooking?.isSubscribed, YN.N); + }); + + /** 微信公众号图片 */ + const weixinMpImgUrl = computed(() => { + return channelStore.channelDetail?.wxBooking?.weixinMpImgUrl || ''; + }); + + /** 初始化直播预约数据 */ + function initLiveBookingData(): void { + isSmsLiveBooking.value = ynToBool(channelStore.channelDetail?.smsBooking?.booking, YN.N); + isWxLiveBooking.value = ynToBool(channelStore.channelDetail?.wxBooking?.isWxBooking, YN.N); + wxBookingCount.value = channelStore.channelDetail?.wxBooking?.bookingCount || 0; + } + + return { + smsBookingEnabled, + wxBookingEnabled, + bookingTips, + useWxBooking, + showLiveBookingButton, + isSmsLiveBooking, + isWxLiveBooking, + isLiveBooking, + wxBookingCount, + isWxSubscribed, + weixinMpImgUrl, + initLiveBookingData, + }; + }, +); diff --git a/src/store/use-micro-activity-store.ts b/src/store/use-micro-activity-store.ts new file mode 100644 index 0000000..db41ed2 --- /dev/null +++ b/src/store/use-micro-activity-store.ts @@ -0,0 +1,52 @@ +import { computed, ComputedRef } from 'vue'; +import { defineStore } from 'pinia'; + +import { useChannelStore } from './use-channel-store'; +import { useChannelMenuStore } from './use-channel-menu-store'; +import { ynToBool } from '@utils-ts/boolean'; +import { YN } from '@polyv/live-watch-sdk'; + +export interface MicroActivityStoreState { + /** 微活动开关 */ + microActivityEnabled: ComputedRef; + /** 微活动名称 */ + microActivityTitle: ComputedRef; + /** 微活动-挂件Icon */ + microActivityPendantIcon: ComputedRef; +} + +export type MicroActivityStore = MicroActivityStoreState; + +export const useMicroActivityStore = defineStore<'microActivity', MicroActivityStore>( + 'microActivity', + () => { + const channelStore = useChannelStore(); + const channelMenuStore = useChannelMenuStore(); + + /** 微活动开关 */ + const microActivityEnabled = computed(() => { + return ( + channelMenuStore.microActivityMenuData.visible || + ynToBool( + channelStore.channelDetail?.interactionSetting.microActivity.microActivityEnabled || YN.N, + ) + ); + }); + + /** 微活动名称 */ + const microActivityTitle = computed(() => { + return channelMenuStore.microActivityMenuData.label; + }); + + /** 微活动-挂件Icon */ + const microActivityPendantIcon = computed(() => { + return channelStore.channelDetail?.interactionSetting.microActivity.pendantIcon || ''; + }); + + return { + microActivityEnabled, + microActivityTitle, + microActivityPendantIcon, + }; + }, +); diff --git a/src/store/use-page-store.ts b/src/store/use-page-store.ts new file mode 100644 index 0000000..ab7d8a2 --- /dev/null +++ b/src/store/use-page-store.ts @@ -0,0 +1,53 @@ +import { defineStore } from 'pinia'; +import { ref, Ref } from 'vue'; +import { ChannelWatchPageSkin } from '@polyv/live-watch-sdk'; + +export interface PageStoreState { + /** 页面显示状态 */ + visibilityState: Ref; + /** 页面宽度 */ + pageClientWidth: Ref; + /** 页面高度 */ + pageClientHeight: Ref; + /** 页面皮肤 */ + pageSkin: Ref; +} + +export interface PageStoreAction { + /** 重新获取页面尺寸 */ + resetUpPageSize: () => void; +} + +export interface PageStore extends PageStoreState, PageStoreAction {} + +/** + * 页面相关的 store + */ +export const usePageStore = defineStore<'page', PageStore>('page', () => { + /** 页面显示状态 */ + const visibilityState = ref(true); + + /** 页面宽度 */ + const pageClientWidth = ref(document.documentElement.clientWidth); + + /** 页面高度 */ + const pageClientHeight = ref(document.documentElement.clientHeight); + + /** 页面皮肤 */ + const pageSkin = ref(); + + /** 重新获取页面尺寸 */ + function resetUpPageSize() { + pageClientWidth.value = document.documentElement.clientWidth; + pageClientHeight.value = document.documentElement.clientHeight; + } + + return { + visibilityState, + pageClientWidth, + pageClientHeight, + pageSkin, + + resetUpPageSize, + }; +}); diff --git a/src/store/use-playback-store.ts b/src/store/use-playback-store.ts new file mode 100644 index 0000000..b8de56c --- /dev/null +++ b/src/store/use-playback-store.ts @@ -0,0 +1,220 @@ +/** + * @file 回放 store + */ + +import { defineStore } from 'pinia'; +import { computed, ComputedRef, ref, Ref, unref } from 'vue'; +import { + LiveStatus, + PlaybackMode, + PlaybackOrigin, + PlaybackTarget, + YN, +} from '@polyv/live-watch-sdk'; +import { getWatchCore } from '@/core/watch-sdk'; +import { useChannelStore } from './use-channel-store'; +import { ynToBool } from '@utils-ts/boolean'; +import { useWatchAppStore } from './use-watch-app-store'; +import { paramGetter } from '@/hooks/core/use-query-params'; + +export interface PlaybackStoreState { + /** 当前是否正在播放回放 */ + isPlaybacking: Ref; + /** 回放方式 */ + playbackMode: ComputedRef; + /** 当前已加载的回放页数,默认:0 */ + pageNumber: Ref; + /** 每页数量 */ + pageSize: Ref; + /** 总页数 */ + totalPages: Ref; + /** 是否正在加载中 */ + isLoading: Ref; + /** 是否已加载完毕 */ + isNoMore: Ref; + /** 已加载的列表 */ + playbackList: Ref; + /** 当前页的回放列表 */ + currentPagePlaybackList: ComputedRef; + /** 当前播放的回放对象 */ + currentPlaybackTarget: Ref; + /** 章节是否显示 */ + chapterEnabled: ComputedRef; + /** 回放列表是否显示 */ + playbackListVisible: ComputedRef; +} + +export interface PlaybackStoreActions { + /** 初始化当前回放对象 */ + initCurrentPlaybackTarget(): Promise; + /** 初始化回放列表 */ + initPlaybackList(): Promise; + /** 加载下一批回放 */ + loadNextPlaybackList(): Promise; + /** 监听分页器切换事件 */ + onPageChange(nextPageNumber: number): Promise; +} + +export interface PlaybackStore extends PlaybackStoreState, PlaybackStoreActions {} + +export const usePlaybackStore = defineStore<'playback', PlaybackStore>('playback', () => { + const watchAppStore = useWatchAppStore(); + const channelStore = useChannelStore(); + + const isPlaybacking = ref(false); + + /** 回放方式 */ + const playbackMode = computed(() => { + if (watchAppStore.isWatchBackUrl) return PlaybackMode.Single; + + const channelDetail = channelStore.channelDetail; + return channelDetail?.playbackInfo?.type; + }); + + /** 当前已加载的回放页数,默认:0 */ + const pageNumber = ref(0); + + /** 每页数量 */ + const pageSize = ref(12); + + /** 总页数 */ + const totalPages = ref(1); + + /** 是否正在加载中 */ + const isLoading = ref(false); + + /** 是否已加载完毕 */ + const isNoMore = ref(false); + + /** 已加载的列表 */ + const playbackList = ref([]); + + /** 当前页的回放列表 */ + const currentPagePlaybackList = computed(() => { + if (pageNumber.value === 0) { + return []; + } + const pageNumberVal = unref(pageNumber); + const pageSizeVal = unref(pageSize); + const start = (pageNumberVal - 1) * pageSizeVal; + const end = start + pageSizeVal; + return playbackList.value.slice(start, end); + }); + + /** 当前播放的回放对象 */ + const currentPlaybackTarget = ref(); + + /** 章节是否显示 */ + const chapterEnabled = computed(() => { + const channelDetail = channelStore.channelDetail; + const sectionEnabled = channelDetail?.playbackInfo?.sectionEnabled; + return isPlaybacking.value && ynToBool(sectionEnabled, YN.N); + }); + + /** 回放列表是否显示 */ + const playbackListVisible = computed(() => { + if (watchAppStore.isWatchBackUrl) return false; + + return unref(isPlaybacking) && playbackMode.value === PlaybackMode.List; + }); + + /** + * 初始化当前回放对象 + * @warn 副作用:如果为列表回放,会初始化一次回放列表数据 + * */ + async function initCurrentPlaybackTarget() { + if (channelStore.liveStatus !== LiveStatus.Playback) { + currentPlaybackTarget.value = undefined; + return; + } + + // 列表回放时,则先获取一次回放列表并设置回放对象 + if (playbackMode.value === PlaybackMode.List) { + await initPlaybackList(); + if (playbackList.value.length) { + currentPlaybackTarget.value = playbackList.value[0]; + } + return; + } + + // 单个回放时使用 detail 中的回放数据 + if (playbackMode.value === PlaybackMode.Single) { + const watchCore = getWatchCore(); + const playbackTarget = watchCore.playback.getTargetPlaybackOption({ + playbackOrigin: watchAppStore.isWatchBackUrl + ? paramGetter.playbackType() || PlaybackOrigin.Playback // 回放地址的回放来源只有“回放列表”和“点播列表” + : undefined, + }); + currentPlaybackTarget.value = playbackTarget; + } + } + + /** 初始化回放列表 */ + async function initPlaybackList() { + pageNumber.value = 0; + isLoading.value = false; + isNoMore.value = false; + playbackList.value = []; + await loadNextPlaybackList(); + } + + /** 加载下一批回放 */ + async function loadNextPlaybackList() { + if (isNoMore.value || isLoading.value) { + return; + } + + isLoading.value = true; + try { + const watchCore = getWatchCore(); + const data = await watchCore.playback.getPlaybackList({ + pageNumber: unref(pageNumber) + 1, + pageSize: unref(pageSize), + }); + + pageNumber.value = data.pageNumber; + isNoMore.value = data.pageNumber >= data.totalPages; + totalPages.value = data.totalPages; + playbackList.value.push(...data.contents); + isLoading.value = false; + } catch (e) { + isLoading.value = false; + } + } + + /** 监听分页器切换事件 */ + async function onPageChange(nextPageNumber: number) { + if (nextPageNumber === pageNumber.value) return; + + if (nextPageNumber < pageNumber.value) { + pageNumber.value = pageNumber.value - 1; + return; + } + + if (isNoMore.value) { + pageNumber.value = pageNumber.value + 1; + } else { + await loadNextPlaybackList(); + } + } + + return { + isPlaybacking, + playbackMode, + pageNumber, + pageSize, + totalPages, + isLoading, + isNoMore, + playbackList, + playbackListVisible, + currentPagePlaybackList, + currentPlaybackTarget, + chapterEnabled, + + initCurrentPlaybackTarget, + initPlaybackList, + loadNextPlaybackList, + onPageChange, + }; +}); diff --git a/src/store/use-player-store.ts b/src/store/use-player-store.ts new file mode 100644 index 0000000..8084ebd --- /dev/null +++ b/src/store/use-player-store.ts @@ -0,0 +1,341 @@ +/** + * @file 播放器 store + */ +import { getWatchCore } from '@/core/watch-sdk'; +import { + PlayStatus, + QualityLevelItem, + LiveStatus, + WarmUpType, + PlayerLogoPosition, +} from '@polyv/live-watch-sdk'; +import { defineStore } from 'pinia'; +import { computed, ComputedRef, ref, Ref, unref } from 'vue'; +import { useChannelStore } from './use-channel-store'; +import { usePlaybackStore } from './use-playback-store'; + +export interface PlayerStoreState { + /** 配置是否使用播放器 */ + playerEnabled: Ref; + /** 是否处于可播放的模式 */ + isPlayMode: ComputedRef; + /** 播放器是否已初始化 */ + playerInited: Ref; + /** 是否已开始播放 */ + isPlayStarted: Ref; + /** 当前播放状态 */ + playStatus: Ref; + /** 暖场类型 */ + warmUpType: Ref; + /** 暖场图片/播放器封面图 */ + warmUpImg: Ref; + /** 暖场图片跳转地址 */ + warmUpHref: Ref; + /** 是否显示播放器暖场图片 */ + showWarmUpImg: ComputedRef; + /** 是否显示播放器在“音频直播”场景下的占位区域 */ + showAudioLivePlaceholder: ComputedRef; + /** 播放器 logo 图片地址 */ + logoImage: ComputedRef; + /** 播放器 logo 跳转地址 */ + logoHref: ComputedRef; + /** 播放器 logo 透明度 */ + logoOpacity: ComputedRef; + /** 播放器 logo 位置 */ + logoPosition: ComputedRef; + /** 观看延迟时间,单位:毫秒 */ + delayTime: Ref; + /** 是否支持无延迟观看 */ + supportLowLatency: Ref; + /** 是否无延迟观看 */ + isLowLatency: Ref; + /** 是否支持刷新 api */ + supportRefresh: Ref; + /** 是否支持自动播放 */ + supportAutoPlay: Ref; + /** 当前音量 */ + currentVolume: Ref; + /** 后台中的弹幕开关 */ + barrageBackstageEnabled: Ref; + /** 弹幕显示状态 */ + barrageShow: Ref; + /** 总线路数 */ + lineCount: Ref; + /** 当前线路索引 */ + currentLine: Ref; + /** 可选的清晰度列表 */ + qualityLevels: Ref; + /** 当前清晰度级别 */ + currentQualityLevel: Ref; + /** 可选的倍速列表 */ + rateList: Ref; + /** 当前倍速 */ + currentRate: Ref; + /** 当前播放时间,单位:秒 */ + currentTime: Ref; + /** 当前播放总时长,单位:秒 */ + durationTime: Ref; + /** 视频流宽度,仅用作比例计算 */ + resolutionWidth: Ref; + /** 视频流高度,仅用作比例计算 */ + resolutionHeight: Ref; + /** 视频流是否为竖状比例 */ + isPortraitResolutionRate: ComputedRef; + /** 暂无直播是否显示 */ + noneLiveVisible: ComputedRef; + /** 播放器控制栏是否显示 */ + playerControlVisible: Ref; + /** 是否为音频播放器模式。注意,目前只有竖屏在使用 */ + isAudioPlayerMode: Ref; +} + +export interface PlayerStoreAction { + /** 同步播放器信息 */ + syncPlayerInfo: () => void; +} + +export interface PlayerStore extends PlayerStoreState, PlayerStoreAction {} + +export const usePlayerStore = defineStore<'player', PlayerStore>('player', () => { + const channelStore = useChannelStore(); + const playbackStore = usePlaybackStore(); + + /** 配置是否使用播放器 */ + const playerEnabled = ref(true); + + /** 播放器是否已初始化 */ + const playerInited = ref(false); + + /** 是否已开始播放 */ + const isPlayStarted = ref(false); + + /** 当前播放状态 */ + const playStatus = ref(PlayStatus.Pause); + + /** 是否支持无延迟观看 */ + const supportLowLatency = ref(false); + + /** 是否无延迟观看 */ + const isLowLatency = ref(false); + + /** 暖场类型 */ + const warmUpType = ref(); + + /** 暖场图片/播放器封面图 */ + const warmUpImg = ref(); + + /** 暖场图片跳转地址 */ + const warmUpHref = ref(); + + /** 是否显示播放器暖场图片 */ + const showWarmUpImg = computed(() => { + if (playbackStore.isPlaybacking || channelStore.liveStatus !== LiveStatus.Live) { + return false; + } + + const isNotPlaying = playStatus.value !== PlayStatus.Playing; + return unref(playerInited) && !!unref(warmUpImg) && (!unref(isPlayStarted) || isNotPlaying); + }); + + /** 是否显示播放器在“音频直播”场景下的占位区域 */ + const showAudioLivePlaceholder = computed(() => { + const isPlaying = playStatus.value === PlayStatus.Playing; + return unref(playerInited) && isPlaying && unref(channelStore.isOnlyAudioLive); + }); + + /** 播放器 logo 图片地址 */ + const logoImage = computed(() => { + return channelStore.channelDetail?.playerSetting?.logoImage ?? undefined; + }); + + /** 播放器 logo 跳转地址 */ + const logoHref = computed(() => { + return channelStore.channelDetail?.playerSetting?.logoHref ?? undefined; + }); + + /** 播放器 logo 透明度 */ + const logoOpacity = computed(() => { + return channelStore.channelDetail?.playerSetting?.logoOpacity ?? 1; + }); + + /** 播放器 logo 位置 */ + const logoPosition = computed(() => { + return channelStore.channelDetail?.playerSetting?.logoPosition ?? 'tl'; + }); + + /** 是否处于一个可播放的模式 */ + const isPlayMode = computed(() => { + if (!playerEnabled.value) return false; + + // 回放中 + if (playbackStore.isPlaybacking) { + return true; + } + + // 直播中 + if (channelStore.liveStatus === LiveStatus.Live) { + return true; + } + + // 没有直播中,但有暖场视频 + if (warmUpType.value === WarmUpType.Video) { + return true; + } + + return false; + }); + + /** 播放器延迟时间 */ + const delayTime = ref(0); + + /** 是否支持刷新 api */ + const supportRefresh = ref(false); + + /** 是否支持自动播放 */ + const supportAutoPlay = ref(false); + + /** 当前音量 */ + const currentVolume = ref(0.5); + + /** 后台中的弹幕开关 */ + const barrageBackstageEnabled = ref(false); + + /** 弹幕显示状态 */ + const barrageShow = ref(true); + + /** 总线路数 */ + const lineCount = ref(0); + + /** 当前线路索引 */ + const currentLine = ref(0); + + /** 可选的清晰度列表 */ + const qualityLevels = ref([]); + + /** 当前清晰度级别 */ + const currentQualityLevel = ref(0); + + /** 可选的倍速列表 */ + const rateList = ref([]); + + /** 当前倍速 */ + const currentRate = ref(0); + + /** 当前播放时间 */ + const currentTime = ref(0); + + /** 当前播放总时长 */ + const durationTime = ref(0); + + /** 视频流宽度,仅用作比例计算 */ + const resolutionWidth = ref(); + + /** 视频流高度,仅用作比例计算 */ + const resolutionHeight = ref(); + + /** 视频流是否为竖状比例 */ + const isPortraitResolutionRate = computed(() => { + const width = unref(resolutionWidth); + const height = unref(resolutionHeight); + if (!width || !height) { + return false; + } + return height > width; + }); + + /** 暂无直播是否显示 */ + const noneLiveVisible = computed(() => { + // 直播中 + if (channelStore.liveStatus === LiveStatus.Live) { + return false; + } + + // 回放中 + if (playbackStore.isPlaybacking) { + return false; + } + + // 非直播中但存在暖场视频 + if (warmUpType.value === WarmUpType.Video) { + return false; + } + + return ( + // 播放器初始化完毕 + unref(playerInited) && + // 没显示暖场 + !unref(showWarmUpImg) + ); + }); + + /** 是否为音频播放器模式 */ + const isAudioPlayerMode = ref(false); + + /** 播放器控制栏是否显示 */ + const playerControlVisible = ref(false); + + /** 同步播放器信息 */ + function syncPlayerInfo(): void { + const watchCore = getWatchCore(); + const playerInfo = watchCore.player.getPlayerInfo(); + + warmUpType.value = playerInfo.warmUpType; + warmUpImg.value = playerInfo.warmUpImg; + warmUpHref.value = playerInfo.warmUpHref; + delayTime.value = playerInfo.delayTime; + supportRefresh.value = playerInfo.supportRefresh; + supportAutoPlay.value = playerInfo.supportAutoPlay; + barrageBackstageEnabled.value = playerInfo.barrageBackstageEnabled; + playStatus.value = playerInfo.playStatus; + lineCount.value = playerInfo.lineCount; + currentLine.value = playerInfo.currentLine; + qualityLevels.value = playerInfo.qualityLevels; + currentQualityLevel.value = playerInfo.currentQualityLevel; + rateList.value = playerInfo.rateList; + currentRate.value = playerInfo.currentRate; + currentTime.value = playerInfo.currentTime; + durationTime.value = playerInfo.durationTime; + supportLowLatency.value = playerInfo.supportLowLatency; + isLowLatency.value = playerInfo.isLowLatency; + } + + return { + playerEnabled, + isAudioPlayerMode, + isPlayMode, + playerInited, + isPlayStarted, + playStatus, + warmUpType, + warmUpImg, + warmUpHref, + showWarmUpImg, + showAudioLivePlaceholder, + logoImage, + logoHref, + logoOpacity, + logoPosition, + delayTime, + supportLowLatency, + isLowLatency, + supportRefresh, + supportAutoPlay, + currentVolume, + barrageBackstageEnabled, + barrageShow, + lineCount, + currentLine, + qualityLevels, + currentQualityLevel, + rateList, + currentRate, + currentTime, + durationTime, + resolutionWidth, + resolutionHeight, + isPortraitResolutionRate, + noneLiveVisible, + playerControlVisible, + syncPlayerInfo, + }; +}); diff --git a/src/store/use-portrait-layout-store.ts b/src/store/use-portrait-layout-store.ts new file mode 100644 index 0000000..14dbddf --- /dev/null +++ b/src/store/use-portrait-layout-store.ts @@ -0,0 +1,103 @@ +import { defineStore } from 'pinia'; +import { computed, ComputedRef, ref, Ref } from 'vue'; +import { LiveStatus } from '@polyv/live-watch-sdk'; +import { useChannelStore } from './use-channel-store'; +import { useDocStore } from './use-doc-store'; +import { usePageStore } from './use-page-store'; +import { usePlaybackStore } from './use-playback-store'; + +export interface PortraitLayoutStoreState { + /** 竖屏轮播屏当前索引 */ + carouselActiveIndex: Ref; + /** 竖屏页面背景地址 */ + portraitPageBgUrl: ComputedRef; + /** 竖屏文档容器内容渲染高度 */ + portraitDocContentHeight: ComputedRef; + /** 竖屏文档容器渲染高度 */ + portraitDocWrapHeight: ComputedRef; + /** 频道信息位置 */ + channelInfoSeat: ComputedRef<0 | 1>; +} + +/** + * 竖屏布局 store + */ +export const usePortraitLayoutStore = defineStore<'portraitLayout', PortraitLayoutStoreState>( + 'portraitLayout', + () => { + const channelStore = useChannelStore(); + const pageStore = usePageStore(); + const playbackStore = usePlaybackStore(); + const docStore = useDocStore(); + + /** 竖屏轮播屏当前索引 */ + const carouselActiveIndex = ref(1); + + /** 竖屏页面背景地址 */ + const portraitPageBgUrl = computed(() => { + const channelDetail = channelStore.channelDetail; + const portraitChatBgImg = channelDetail?.channelInfo.portraitChatBgImg; + const portraitChatBgImgOpacity = channelDetail?.channelInfo.portraitChatBgImgOpacity; + + if (!portraitChatBgImg) { + return; + } + + return portraitChatBgImgOpacity + ? `${portraitChatBgImg}?x-oss-process=image/blur,r_${portraitChatBgImgOpacity},s_${portraitChatBgImgOpacity}` + : portraitChatBgImg; + }); + + /** 竖屏文档容器内容渲染高度 */ + const portraitDocContentHeight = computed(() => { + const pageClientWidth = pageStore.pageClientWidth; + const documentProportion = docStore.documentProportion; + + // 最小高度为 9:16 + const minHeight = pageClientWidth * (9 / 16); + // 最大高度为 3:4 + const maxHeight = pageClientWidth * (3 / 4); + + if (!documentProportion) { + return minHeight; + } + + let wrapHeight = pageClientWidth / documentProportion; + if (wrapHeight >= maxHeight) { + wrapHeight = maxHeight; + } + if (wrapHeight <= minHeight) { + wrapHeight = minHeight; + } + return wrapHeight; + }); + + /** 竖屏文档容器渲染高度 */ + const portraitDocWrapHeight = computed(() => { + if (!docStore.canRenderDoc || !docStore.documentSwitch) { + return 0; + } + + return portraitDocContentHeight.value; + }); + + /** 频道信息位置 */ + const channelInfoSeat = computed<0 | 1>(() => { + if ( + channelStore.isPptChannel && + (channelStore.liveStatus === LiveStatus.Live || playbackStore.isPlaybacking) + ) { + return 0; + } + return 1; + }); + + return { + carouselActiveIndex, + portraitPageBgUrl, + portraitDocContentHeight, + portraitDocWrapHeight, + channelInfoSeat, + }; + }, +); diff --git a/src/store/use-score-store.ts b/src/store/use-score-store.ts new file mode 100644 index 0000000..acd84b7 --- /dev/null +++ b/src/store/use-score-store.ts @@ -0,0 +1,40 @@ +/** + * @file 积分 store + */ +import { RedpackCurrencyType } from '@polyv/live-watch-sdk'; +import { defineStore } from 'pinia'; +import { ComputedRef, computed, unref } from 'vue'; +import { useChannelStore } from './use-channel-store'; +import { useDonateStore } from './use-donate-store'; +import { storeDefinitionToRefs } from '@/plugins/pinia/util'; + +export interface ScoreStore { + /** 积分单位 */ + scoreUnit: ComputedRef; + /** 积分红包是否开启 */ + scoreRedpackEnabled: ComputedRef; +} + +export const useScoreStore = defineStore<'score', ScoreStore>('score', () => { + const { channelDetail } = storeDefinitionToRefs(useChannelStore); + const { donateSetting } = storeDefinitionToRefs(useDonateStore); + + /** 积分单位 */ + const scoreUnit = computed(() => { + return unref(donateSetting)?.scoreUnit || ''; + }); + + /** 积分红包是否开启 */ + const scoreRedpackEnabled = computed(() => { + const redPackCurrencyType = unref(channelDetail)?.channelConfig.redPackCurrencyType; + return ( + redPackCurrencyType === RedpackCurrencyType.Score || + redPackCurrencyType === RedpackCurrencyType.CashAndScore + ); + }); + + return { + scoreUnit, + scoreRedpackEnabled, + }; +}); diff --git a/src/store/use-send-redpack-store.ts b/src/store/use-send-redpack-store.ts new file mode 100644 index 0000000..e3a21e8 --- /dev/null +++ b/src/store/use-send-redpack-store.ts @@ -0,0 +1,73 @@ +import { defineStore } from 'pinia'; +import { computed, ComputedRef, ref, Ref } from 'vue'; +import { ynToBool } from '@utils-ts/boolean'; +import { isWeixin, isWorkWeixin } from '@/assets/utils/browser'; +import { useWeixinStore } from '@/store/use-weixin-store'; +import { useChannelStore } from '@/store/use-channel-store'; +import { storeDefinitionToRefs } from '@/plugins/pinia/util'; +import { YN } from '@polyv/live-watch-sdk'; + +const isGeneralWeixin = isWeixin && !isWorkWeixin; + +export interface SendRedpackStoreState { + /** 是否隐藏"发送红包"功能 */ + sendRedpackHidden: ComputedRef; + /** 是否开启了红包金额、数量限制 */ + redPackCustomAmountEnabled: ComputedRef; + /** 观众发红包最大金额限制 */ + redPackViewerMaxAmount: ComputedRef; + /** 观众发红包最大数量限制 */ + redPackViewerMaxCount: ComputedRef; + /** 观众发红包最低均分 */ + redPackViewerMinAverage: Ref; +} + +export type SendRedpackStore = SendRedpackStoreState; + +export const useSendRedpackStore = defineStore<'sendRedpack', SendRedpackStore>( + 'sendRedpack', + () => { + const { channelDetail } = storeDefinitionToRefs(useChannelStore); + const { weixinPayEnabled, weixinAccountFunctionEnabled } = + storeDefinitionToRefs(useWeixinStore); + + /** "红包"功能是否在配置层面上可用 */ + const redPackEnabled = computed(() => { + return ( + ynToBool(channelDetail.value?.channelConfig.redpackEnabled || YN.N) && + weixinAccountFunctionEnabled.value + ); + }); + + /** 是否隐藏"发送红包"功能 */ + const sendRedpackHidden = computed(() => { + return !weixinPayEnabled.value || !isGeneralWeixin || !redPackEnabled.value; + }); + + /** 是否开启了红包金额、数量限制 */ + const redPackCustomAmountEnabled = computed(() => + ynToBool(channelDetail.value?.channelConfig.redPackCustomAmountEnabled || 'N'), + ); + + /** 观众发红包最大金额限制 */ + const redPackViewerMaxAmount = computed( + () => channelDetail.value?.channelConfig.redPackViewerMaxAmount || 300, + ); + + /** 观众发红包最大数量限制 */ + const redPackViewerMaxCount = computed( + () => channelDetail.value?.channelConfig.redPackViewerMaxCount || 50, + ); + + /** 观众发红包最低均分 */ + const redPackViewerMinAverage = ref(0.3); + + return { + sendRedpackHidden, + redPackCustomAmountEnabled, + redPackViewerMaxAmount, + redPackViewerMaxCount, + redPackViewerMinAverage, + }; + }, +); diff --git a/src/store/use-share-store.ts b/src/store/use-share-store.ts new file mode 100644 index 0000000..7efe2b8 --- /dev/null +++ b/src/store/use-share-store.ts @@ -0,0 +1,245 @@ +/** + * @file 分享 store + */ +import { + DEFAULT_SHARE_QQ_ICON, + DEFAULT_SHARE_QZONE_ICON, + DEFAULT_SHARE_WEIBO_ICON, +} from '@/assets/constants/defaults'; +import { paramGetter } from '@/hooks/core/use-query-params'; +import { translate } from '@/assets/lang'; +import { copyText, toastCopySuccess } from '@/assets/utils/copy'; +import { getWatchCore } from '@/core/watch-sdk'; +import { appendToURL } from '@just4/querystring'; +import { YN } from '@polyv/live-watch-sdk'; +import { ynToBool } from '@utils-ts/boolean'; +import { changeProtocol } from '@utils-ts/net'; +import { defineStore } from 'pinia'; +import { computed, ComputedRef, unref } from 'vue'; +import { useChannelInfoStore } from './use-channel-info-store'; +import { useChannelStore } from './use-channel-store'; + +/** Web 分享平台枚举 */ +enum WebShareType { + /** QQ 分享 */ + QQ = 'qq', + /** QQ 空间分享 */ + Qzone = 'qzone', + /** 微博分享 */ + Weibo = 'weibo', + /** facebook 分享 */ + Facebook = 'facebook', + /** 推特分享 */ + Twitter = 'twitter', +} + +/** Web 分享数据类型 */ +type WebShareData = { + /** 标题 */ + title: string; + /** 类型 */ + type: WebShareType; + /** 分享链接 */ + url: string; + /** 图标地址 */ + icon: string; +}; + +/** 各分享平台需要的参数类型 */ +type WebShareProvideParams = { + [WebShareType.QQ]: Record<'url' | 'title' | 'desc' | 'source' | 'pics', string>; + [WebShareType.Qzone]: Record<'url' | 'title' | 'site', string>; + [WebShareType.Weibo]: Record<'url' | 'title' | 'pic', string>; + [WebShareType.Facebook]: Record<'u', string>; + [WebShareType.Twitter]: Record<'url' | 'text', string>; +}; + +/** 各分享平台的跳转地址 */ +const WebShareRedirectUrl: Record = { + [WebShareType.QQ]: 'http://connect.qq.com/widget/shareqq/index.html', + [WebShareType.Qzone]: 'http://sns.qzone.qq.com/cgi-bin/qzshare/cgi_qzshare_onekey', + [WebShareType.Weibo]: 'https://service.weibo.com/share/share.php', + [WebShareType.Facebook]: 'https://www.facebook.com/sharer/sharer.php', + [WebShareType.Twitter]: 'https://twitter.com/intent/tweet', +}; + +export interface ShareStoreState { + /** 分享按钮开关 */ + shareBtnEnabled: ComputedRef; + /** PC web 自定义分享地址 */ + webShareCustomUrl: ComputedRef; + /** PC web 分享的观看地址 */ + shareWatchUrl: ComputedRef; + /** PC web 分享的观看地址二维码地址 */ + shareQrCodeUrl: ComputedRef; + /** QQ 分享跳转地址 */ + qqShareUrl: ComputedRef; + /** QQ 空间分享跳转地址 */ + qzoneShareUrl: ComputedRef; + /** 微博分享跳转地址 */ + weiboShareUrl: ComputedRef; + /** facebook 分享跳转地址 */ + facebookShareUrl: ComputedRef; + /** 推特分享跳转地址 */ + twitterShareUrl: ComputedRef; + /** PC web 分享列表 */ + webShareList: ComputedRef; +} + +export interface ShareStoreAction { + /** 生成 web 分享地址 */ + composeShareUrl: ( + webShareType: T, + provideParams: WebShareProvideParams[T], + ) => string; + /** 复制分享的观看页地址 */ + copyShareWatchUrl: () => Promise; +} + +/** 分享 store */ +export interface ShareStore extends ShareStoreState, ShareStoreAction {} + +export const useShareStore = defineStore<'share', ShareStore>('share', () => { + const channelStore = useChannelStore(); + + const channelInfoStore = useChannelInfoStore(); + + /** 分享按钮开关 */ + const shareBtnEnabled = computed(() => + ynToBool(channelStore.channelDetail?.channelConfig?.shareBtnEnabled, YN.N), + ); + + /** PC web 自定义分享地址 */ + const webShareCustomUrl = computed( + () => channelStore.channelDetail?.channelInfo.webShareCustomUrl ?? undefined, + ); + + /** PC web 分享的观看地址 */ + const shareWatchUrl = computed(() => { + // 分享时需带上的参数(如果当前访问url存在这些参数的话) + const query = { + promoteId: channelStore.promoteId, + vid: paramGetter.vid(), + playbackType: paramGetter.playbackType(), + }; + + // 优先使用 web 自定义分享地址 + const customUrl = unref(webShareCustomUrl); + if (customUrl) { + return decodeURIComponent(customUrl); + } + + return appendToURL(channelStore.watchUrl, query, { + ignoreEmpty: true, + }); + }); + + /** PC web 分享的观看地址二维码地址 */ + const shareQrCodeUrl = computed(() => { + const watchCore = getWatchCore(); + return watchCore.utils.generateQrcodeUrl(unref(shareWatchUrl)); + }); + + /** QQ 分享跳转地址 */ + const qqShareUrl = computed(() => { + return composeShareUrl(WebShareType.QQ, { + url: unref(shareWatchUrl), + title: channelInfoStore.channelTitle, + source: channelInfoStore.channelTitle, + desc: '', // qq 分享中描述过长会分享失败 + pics: changeProtocol(channelInfoStore.channelCoverImg, 'http'), // qq 分享的图片需要协议头 + }); + }); + + /** QQ 空间分享跳转地址 */ + const qzoneShareUrl = computed(() => { + return composeShareUrl(WebShareType.Qzone, { + url: unref(shareWatchUrl), + title: channelInfoStore.channelTitle, + site: channelInfoStore.channelTitle, + }); + }); + + /** 微博分享跳转地址 */ + const weiboShareUrl = computed(() => { + return composeShareUrl(WebShareType.Weibo, { + url: unref(shareWatchUrl), + title: channelInfoStore.channelTitle, + pic: channelInfoStore.channelCoverImg, + }); + }); + + /** facebook 分享跳转地址 */ + const facebookShareUrl = computed(() => { + return composeShareUrl(WebShareType.Facebook, { + u: unref(shareWatchUrl), + }); + }); + + /** 推特分享跳转地址 */ + const twitterShareUrl = computed(() => { + return composeShareUrl(WebShareType.Twitter, { + url: unref(shareWatchUrl), + text: channelInfoStore.channelTitle, + }); + }); + + /** 分享列表 */ + const webShareList = computed(() => { + return [ + { + title: translate('share.QQ'), + type: WebShareType.QQ, + url: unref(qqShareUrl), + icon: DEFAULT_SHARE_QQ_ICON, + }, + { + title: translate('share.QZone'), + type: WebShareType.Qzone, + url: unref(qzoneShareUrl), + icon: DEFAULT_SHARE_QZONE_ICON, + }, + { + title: translate('share.weibo'), + type: WebShareType.Weibo, + url: unref(weiboShareUrl), + icon: DEFAULT_SHARE_WEIBO_ICON, + }, + ]; + }); + + /** + * 生成分享类型 + * @param webShareType 分享类型 + * @param provideParams 传入参数 + */ + function composeShareUrl( + webShareType: T, + provideParams: WebShareProvideParams[T], + ): string { + const baseUrl = WebShareRedirectUrl[webShareType]; + return appendToURL(baseUrl, provideParams); + } + + /** 复制分享的观看地址 */ + async function copyShareWatchUrl(): Promise { + await copyText(unref(shareWatchUrl)); + toastCopySuccess(); + } + + return { + shareBtnEnabled, + shareWatchUrl, + webShareCustomUrl, + shareQrCodeUrl, + qqShareUrl, + qzoneShareUrl, + weiboShareUrl, + facebookShareUrl, + twitterShareUrl, + webShareList, + + composeShareUrl, + copyShareWatchUrl, + }; +}); diff --git a/src/store/use-viewer-store.ts b/src/store/use-viewer-store.ts new file mode 100644 index 0000000..dbe27e2 --- /dev/null +++ b/src/store/use-viewer-store.ts @@ -0,0 +1,119 @@ +/** + * @file 观众信息 store + */ +import { AuthType } from '@polyv/live-watch-sdk'; +import { DEFAULT_VIEWER_AVATAR } from '@/assets/constants/defaults'; +import { getWatchCore } from '@/core/watch-sdk'; +import { defineStore } from 'pinia'; +import { computed, ComputedRef, ref, Ref, unref } from 'vue'; +import { useEnrollStore } from './use-enroll-store'; +import { isWeixin } from '@/assets/utils/browser'; +import { useWeixinStore } from './use-weixin-store'; + +export interface ViewerStoreState { + /** 用户唯一标识 */ + viewerId: Ref; + /** 用户昵称 */ + nickname: Ref; + /** 用户头像 */ + avatar: Ref; + /** 当前用户的微信 openid */ + openId: Ref; + /** 当前用户的微信 unionId */ + unionId: Ref; + /** 当前用户的授权方式 */ + authType: Ref; + /** 当前能否设置昵称 */ + canSetNick: ComputedRef; + /** 当前是否已设置昵称 */ + hasNickname: ComputedRef; +} + +export interface ViewerStoreAction { + /** 同步观众信息 */ + syncViewerInfo: () => void; +} + +export interface ViewerStore extends ViewerStoreState, ViewerStoreAction {} + +export const useViewerStore = defineStore<'viewer', ViewerStore>('viewer', () => { + const enrollStore = useEnrollStore(); + const weixinStore = useWeixinStore(); + + /** 用户唯一标识 */ + const viewerId = ref(); + /** 用户昵称 */ + const nickname = ref(''); + /** 用户头像 */ + const avatar = ref(DEFAULT_VIEWER_AVATAR); + /** openId */ + const openId = ref(); + /** unionId */ + const unionId = ref(); + /** 授权方式 */ + const authType = ref(AuthType.None); + + /** 当前能否设置昵称 */ + const canSetNick = computed(() => { + // 报名观看使用姓名作为昵称 + if (enrollStore.enrollNickEnabled) { + return false; + } + + // 允许的观看条件 + const allowAuthTypes = [AuthType.None, AuthType.Code, AuthType.Info]; + if (!allowAuthTypes.includes(unref(authType))) { + return false; + } + + // 微信中且微信授权了 + if (isWeixin && weixinStore.weixinAuthorized) { + return false; + } + + return true; + }); + + /** 当前是否已设置昵称 */ + const hasNickname = computed(() => { + // 如果当前不允许设置昵称,则默认已经设置过昵称了 + if (!unref(canSetNick)) { + return true; + } + + // 检测是否为默认用户名 [内网、外网、xx]观众/[数字] + const nicknameVal = unref(nickname); + const nicknamePrefix = '观众'; + const nickNamePattern = new RegExp(nicknamePrefix + '/[0-9]+$'); + + if (!nicknameVal) { + return false; + } + return !nickNamePattern.test(nicknameVal); + }); + + /** 同步观众信息 */ + function syncViewerInfo(): void { + const watchCore = getWatchCore(); + + const userInfo = watchCore.user.getCurrentUserInfo(); + viewerId.value = watchCore.user.getCurrentUserId(false); + nickname.value = watchCore.user.getCurrentUserNick(false) ?? ''; + avatar.value = watchCore.user.getCurrentUserAvatar(); + openId.value = watchCore.user.getCurrentUserOpenId(false); + unionId.value = userInfo.unionId; + authType.value = userInfo.authType ?? AuthType.None; + } + + return { + viewerId, + nickname, + avatar, + openId, + unionId, + authType, + canSetNick, + hasNickname, + syncViewerInfo, + }; +}); diff --git a/src/store/use-watch-app-store.ts b/src/store/use-watch-app-store.ts new file mode 100644 index 0000000..b381a6b --- /dev/null +++ b/src/store/use-watch-app-store.ts @@ -0,0 +1,206 @@ +import { computed, ComputedRef, ref, Ref } from 'vue'; +import { defineStore } from 'pinia'; + +import { paramGetter } from '@/hooks/core/use-query-params'; +import { appEvents, eventBus } from '@/app/app-events'; + +import { getWatchCore } from '@/core/watch-sdk'; +import { PageErrorData } from '@/app/layout/page-error/page-error-type'; + +import { useAuthStore } from './use-auth-store'; +import { useEnrollStore } from './use-enroll-store'; +import { usePlaybackStore } from './use-playback-store'; +import { usePlayerStore } from './use-player-store'; +import { useDocStore } from './use-doc-store'; +import { useChatStore } from './use-chat-store'; +import { useFinanceStore } from './use-finance-store'; +import { useConnectMicStore } from './use-connect-mic-store'; +import { useChannelMenuStore } from '@/store/use-channel-menu-store'; + +export interface WatchAppStoreState { + /** 当前是否处于回放地址 */ + isWatchBackUrl: Ref; + /** 当前是否为微信小程序 webview 环境 */ + isWxMiniProgram: Ref; + /** 是否为会议模式 */ + meetingMode: Ref; + /** 是否 iframe 模式 */ + iframeMode: Ref; + /** 页面异常数据 */ + pageError: Ref; + /** 观看页应用初始化完毕 */ + watchAppInited: Ref; + /** 是否显示引导页 - 引导页渲染标识位 */ + shouldShowSplash: ComputedRef; + /** 直播观看页是否初始化完毕 - 直播观看页渲染标识位 */ + liveWatchInited: Ref; +} + +export interface WatchAppStoreActions { + resetUpWatchCore(): Promise; + setupLiveWatch(): Promise; + /** 设置页面错误数据 */ + setPageError(param: PageErrorData): void; + pauseConnectLiveWatch(): void; + recoverConnectLiveWatch(): void; +} + +export interface WatchAppStore extends WatchAppStoreState, WatchAppStoreActions {} + +export const useWatchAppStore = defineStore<'watchApp', WatchAppStore>('watchApp', () => { + const authStore = useAuthStore(); + const enrollStore = useEnrollStore(); + + const docStore = useDocStore(); + const playbackStore = usePlaybackStore(); + const playerStore = usePlayerStore(); + const chatStore = useChatStore(); + const connectMicStore = useConnectMicStore(); + + const channelMenuStore = useChannelMenuStore(); + const financeStore = useFinanceStore(); + + /** 当前是否处于回放地址 */ + const isWatchBackUrl = ref(false); + + /** 当前是否为微信小程序 webview 环境 */ + const isWxMiniProgram = ref(false); + + /** 是否为会议模式 */ + const meetingMode = ref(paramGetter.polyvMeeting() === 'true'); + + /** 是否 iframe 模式 */ + const iframeMode = ref(paramGetter.hasFrame() === '1'); + + /** 页面异常数据 */ + const pageError = ref(); + + /** 观看页应用初始化完毕 */ + const watchAppInited = ref(false); + + /** 是否显示引导页 */ + const shouldShowSplash = computed(() => { + return ( + !authStore.isAuthorized || + enrollStore.needEnrollByEnter || + financeStore.shouldShowSplashByRiskEvaluation + ); + }); + + /** 直播观看页是否初始化完毕 */ + const liveWatchInited = ref(false); + + /** 设置页面异常数据 */ + function setPageError(param: PageErrorData) { + pageError.value = param; + } + + /** 重置 watchCore */ + async function resetUpWatchCore(): Promise { + const watchCore = getWatchCore(); + await watchCore.setup(); + } + + /** 设置观看页 */ + async function setupLiveWatch(): Promise { + const watchCore = getWatchCore(); + + // 优先判断是否为回放地址进入 + isWatchBackUrl.value = watchCore.getIsWatchBackByVid(); + + // 初始化当前回放对象 + await playbackStore.initCurrentPlaybackTarget(); + + // 播放器配置无延迟 + if (watchCore.player.getLowLatencySupport()) { + playerStore.$patch({ + isLowLatency: true, + }); + } + + // 同步相关 store 的数据 + channelMenuStore.syncChannelMenus(); + chatStore.syncChatStore(); + + // 根据不同场景设置标识位 + await __setLiveWatchInit(); + } + + /** 根据不同场景设置 liveWatchInited */ + async function __setLiveWatchInit() { + // 开启风险确认函时,需要暂停部分功能初始化和 Socket 链接 + // 等到观众同意确认后再进行恢复 + if (financeStore.riskConfirmEnabled) { + pauseConnectLiveWatch(); + liveWatchInited.value = true; + return; + } + + // 回放地址进入观看页,不需要连麦 + if (isWatchBackUrl.value) { + connectMicStore.$patch({ connectMicEnabled: false }); + liveWatchInited.value = true; + return; + } + + // 正常进入观看页,建立 socket 连接 + await setupWatchCoreConnect(); + liveWatchInited.value = true; + } + + /** + * 设置观看核心连接 Socket 处理 + */ + async function setupWatchCoreConnect() { + const watchCore = getWatchCore(); + await watchCore.connect(); + } + + /** + * 暂停直播观看页部分功能的初始化 + * */ + async function pauseConnectLiveWatch() { + playerStore.$patch({ playerEnabled: false }); + docStore.$patch({ docEnabled: false }); + chatStore.$patch({ chatMsgListEnabled: false }); + connectMicStore.$patch({ connectMicEnabled: false }); + } + + /** + * 恢复直播观看页部分功能的初始化 + */ + async function recoverConnectLiveWatch() { + playerStore.$patch({ playerEnabled: true }); + docStore.$patch({ docEnabled: true }); + chatStore.$patch({ chatMsgListEnabled: true }); + + // 回放地址进观看页不需要 socket 和连麦 + if (!isWatchBackUrl.value) { + connectMicStore.$patch({ connectMicEnabled: true }); + await setupWatchCoreConnect(); + } + + eventBus.$emit(appEvents.player.ResetUpPlayer); + eventBus.$emit(appEvents.doc.ResetUpDoc); + eventBus.$emit(appEvents.chat.ResetUpChatMsgList); + eventBus.$emit(appEvents.connectMic.ResetUpConnectMic); + } + + return { + isWatchBackUrl, + isWxMiniProgram, + meetingMode, + iframeMode, + pageError, + watchAppInited, + shouldShowSplash, + liveWatchInited, + + resetUpWatchCore, + setupLiveWatch, + setPageError, + + pauseConnectLiveWatch, + recoverConnectLiveWatch, + }; +}); diff --git a/src/store/use-webview-store.ts b/src/store/use-webview-store.ts new file mode 100644 index 0000000..46f5472 --- /dev/null +++ b/src/store/use-webview-store.ts @@ -0,0 +1,72 @@ +import { defineStore } from 'pinia'; +import { computed, ComputedRef, ref, Ref } from 'vue'; +import type { WebViewBridge } from '@polyv/web-view-bridge'; +import { usePlayerStore } from './use-player-store'; + +export interface WebviewStoreState { + /** 是否基于保利威 webview 协议嵌入的观看页 */ + isPlvWebview: ComputedRef; + /** 是否 webview 内嵌小窗状态 */ + isSmallWindow: Ref; + /** 在 webview 中小窗化时,打开的小窗宽高 */ + plvWebviewDataSize: ComputedRef<{ width: number; height: number }>; +} + +export interface WebviewStoreActions { + /** 初始化桥接器 */ + initWebviewBridge(): Promise; + /** 获取桥接器对象 */ + getPlvWebviewBridge(): WebViewBridge | undefined; +} + +export interface WebviewStore extends WebviewStoreState, WebviewStoreActions {} + +export const useWebviewStore = defineStore<'webview', WebviewStore>('webview', () => { + const playerStore = usePlayerStore(); + + /** webview 敲击诶钱 */ + let webviewBridge: WebViewBridge | undefined; + + /** 是否基于保利威 webview 协议嵌入的观看页 */ + const isPlvWebview = computed(() => { + return false; + }); + + /** 是否 webview 内嵌小窗状态 */ + const isSmallWindow = ref(false); + + /** 在 webview 中小窗化时,打开的小窗宽高 */ + const plvWebviewDataSize = computed(() => ({ + width: playerStore.isPortraitResolutionRate ? 90 : 160, + height: playerStore.isPortraitResolutionRate ? 160 : 90, + })); + + /** 初始化桥接器 */ + async function initWebviewBridge() { + if (webviewBridge) { + return; + } + try { + const { WebViewBridge } = await import( + /* webpackChunkName: "web-view-bridge" */ '@polyv/web-view-bridge' + ); + webviewBridge = new WebViewBridge(); + await webviewBridge.connectWebViewBridge(); + } catch (e) { + console.warn(e); + } + } + + /** 获取桥接器对象 */ + function getPlvWebviewBridge() { + return webviewBridge; + } + + return { + isPlvWebview, + isSmallWindow, + plvWebviewDataSize, + initWebviewBridge, + getPlvWebviewBridge, + }; +}); diff --git a/src/store/use-weixin-store.ts b/src/store/use-weixin-store.ts new file mode 100644 index 0000000..35135c1 --- /dev/null +++ b/src/store/use-weixin-store.ts @@ -0,0 +1,85 @@ +/** + * @file 微信 store + */ +import { WxShareInfo, YN } from '@polyv/live-watch-sdk'; +import { ynToBool } from '@utils-ts/boolean'; +import { defineStore } from 'pinia'; +import { computed, ComputedRef, Ref, ref } from 'vue'; +import { useChannelStore } from './use-channel-store'; + +export interface WeixinStoreState { + /** 是否已进行微信授权(是否存在 openId) */ + weixinAuthorized: ComputedRef; + /** 是否已进行微信非静默授权(是否存在 wxUser) */ + weixinWatchAuthorized: ComputedRef; + /** 是否已进行企业微信授权(是否存在 wxWorkUserId、cpOpenId 其中一个) */ + workWeixinAuthorized: ComputedRef; + /** 微信分享信息 */ + wxShareInfo: Ref; + /** 超管后台微信功能开关 */ + weixinAccountFunctionEnabled: ComputedRef; + /** 超管后台中微信支付开关 */ + weixinPayEnabled: ComputedRef; +} + +export interface WeixinStoreAction { + /** 保存微信分享信息 */ + saveWxShareInfo: (info: WxShareInfo) => void; +} + +export interface WeixinStore extends WeixinStoreState, WeixinStoreAction {} + +export const useWeixinStore = defineStore<'weixin', WeixinStore>('weixin', () => { + const channelStore = useChannelStore(); + + /** 是否已进行微信授权(是否存在 openId) */ + const weixinAuthorized = computed(() => { + return !!channelStore.channelDetail?.wxInfo?.openId; + }); + + /** 是否已进行微信非静默授权(是否存在 wxUser) */ + const weixinWatchAuthorized = computed(() => { + return !!channelStore.channelDetail?.wxInfo?.wxUser; + }); + + /** 是否已进行企业微信授权(是否存在 wxWorkUserId、cpOpenId 其中一个) */ + const workWeixinAuthorized = computed(() => { + return !!( + channelStore.channelDetail?.wxInfo?.wxWorkUserId || + channelStore.channelDetail?.wxInfo?.cpOpenId + ); + }); + + /** 微信分享信息 */ + const wxShareInfo = ref({ + isUseWxShareUrl: YN.N, + wxShareUrl: '', + shareTitle: '', + shareDesc: '', + }); + + /** 保存微信分享信息 */ + function saveWxShareInfo(info: WxShareInfo): void { + wxShareInfo.value = info; + } + + /** 超管后台微信功能开关 */ + const weixinAccountFunctionEnabled = computed(() => + ynToBool(channelStore.channelDetail?.channelConfig.weixinAccountFunctionEnabled ?? YN.N), + ); + + /** 超管后台中微信支付开关 */ + const weixinPayEnabled = computed(() => + ynToBool(channelStore.channelDetail?.channelConfig?.weixinPayEnabled ?? YN.N), + ); + + return { + weixinAuthorized, + weixinWatchAuthorized, + workWeixinAuthorized, + wxShareInfo, + weixinAccountFunctionEnabled, + weixinPayEnabled, + saveWxShareInfo, + }; +}); diff --git a/stylelint.config.js b/stylelint.config.js new file mode 100644 index 0000000..06fad13 --- /dev/null +++ b/stylelint.config.js @@ -0,0 +1,85 @@ +/* eslint-disable sonarjs/no-duplicate-string */ +module.exports = { + extends: [ + 'stylelint-config-recommended', + 'stylelint-config-recommended-scss', + 'stylelint-config-prettier', + 'stylelint-config-recess-order', + ], + rules: { + 'font-family-no-missing-generic-family-keyword': null, + 'no-descending-specificity': null, + 'no-duplicate-selectors': null, // 对 @import 支持不佳,禁用 + 'selector-pseudo-element-no-unknown': null, + 'font-family-name-quotes': 'always-where-recommended', + 'function-comma-newline-after': 'always-multi-line', + 'function-comma-newline-before': 'never-multi-line', + 'function-comma-space-after': 'always-single-line', + 'function-comma-space-before': 'never', + 'function-max-empty-lines': 0, + 'function-name-case': 'lower', + 'function-parentheses-newline-inside': 'always-multi-line', + 'function-parentheses-space-inside': 'never-single-line', + 'number-no-trailing-zeros': true, + 'string-quotes': 'single', + 'length-zero-no-unit': true, + 'value-keyword-case': 'lower', + 'value-list-comma-newline-after': 'always-multi-line', + 'value-list-comma-newline-before': 'never-multi-line', + 'value-list-comma-space-after': 'always-single-line', + 'value-list-comma-space-before': 'never', + 'value-list-max-empty-lines': 1, + 'custom-property-empty-line-before': 'never', + 'property-case': 'lower', + 'declaration-bang-space-after': 'never', + 'declaration-bang-space-before': 'always', + 'declaration-block-semicolon-newline-after': 'always-multi-line', + 'declaration-block-semicolon-newline-before': 'never-multi-line', + 'declaration-colon-space-after': 'always-single-line', + 'declaration-colon-space-before': 'never', + 'block-opening-brace-newline-after': 'always-multi-line', + 'block-opening-brace-space-before': 'always', + 'block-opening-brace-space-after': 'always-single-line', + 'block-closing-brace-empty-line-before': 'never', + 'block-closing-brace-newline-after': [ + 'always', + { + ignoreAtRules: ['if', 'else'], + }, + ], + 'block-closing-brace-newline-before': 'always-multi-line', + // 'block-closing-brace-space-after': 'never', 检查方式有问题,先禁用 + 'block-closing-brace-space-before': 'always-single-line', + 'selector-descendant-combinator-no-non-space': true, + 'selector-pseudo-class-case': 'lower', + 'selector-pseudo-class-parentheses-space-inside': 'never', + 'selector-pseudo-element-case': 'lower', + 'selector-type-case': 'lower', + 'selector-attribute-brackets-space-inside': 'never', + 'selector-attribute-operator-space-after': 'never', + 'selector-attribute-operator-space-before': 'never', + 'selector-list-comma-newline-after': 'always-multi-line', + 'selector-list-comma-newline-before': 'never-multi-line', + 'selector-list-comma-space-after': 'always-single-line', + 'selector-list-comma-space-before': 'never', + 'media-feature-colon-space-after': 'always', + 'media-feature-colon-space-before': 'never', + 'media-feature-name-case': 'lower', + 'media-feature-parentheses-space-inside': 'never', + 'media-feature-range-operator-space-after': 'always', + 'media-feature-range-operator-space-before': 'always', + 'media-query-list-comma-newline-after': 'always-multi-line', + 'media-query-list-comma-newline-before': 'never-multi-line', + 'media-query-list-comma-space-after': 'always-single-line', + 'media-query-list-comma-space-before': 'never', + 'at-rule-name-case': 'lower', + 'at-rule-name-newline-after': null, + 'at-rule-name-space-after': 'always-single-line', + 'at-rule-semicolon-newline-after': 'always', + 'at-rule-semicolon-space-before': 'never', + 'comment-whitespace-inside': 'always', + indentation: 2, + 'max-empty-lines': 2, + 'no-eol-whitespace': true, + }, +}; diff --git a/tsconfig.build.json b/tsconfig.build.json new file mode 100644 index 0000000..ab2b645 --- /dev/null +++ b/tsconfig.build.json @@ -0,0 +1,14 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "target": "es5", + "paths": { + "@/*": [ + "src/*" + ], + "@utils-ts/*": [ + "node_modules/@polyv/utils/dist/es/*" + ] + } + } +} \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..99cc945 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,32 @@ +{ + "compilerOptions": { + "outDir": "./dist", + "baseUrl": "./", + "allowJs": true, + "checkJs": false, + "strict": true, + "alwaysStrict": true, + "moduleResolution": "node", + "module": "ESNext", + "target": "ESNext", + "declaration": false, + "esModuleInterop": true, + "resolveJsonModule": true, + "paths": { + "@/*": [ + "src/*" + ], + "@utils-ts/*": [ + "node_modules/@polyv/utils/dist/es/*" + ] + } + }, + "include": [ + "./src", + "./types" + ], + "vueCompilerOptions": { + "target": 2.7, + "strictTemplates": false + } +} \ No newline at end of file diff --git a/types/ali-awsc.d.ts b/types/ali-awsc.d.ts new file mode 100644 index 0000000..a188f58 --- /dev/null +++ b/types/ali-awsc.d.ts @@ -0,0 +1,17 @@ +/** + * @file 阿里云滑块验证码类型 + */ + +/** + * 阿里云滑块验证数据 + */ +declare interface AliAwscSliceData { + /** 会话 id */ + sessionId: string; + /** 签名串 */ + sig: string; + /** 请求唯一标识 */ + token: string; + /** 场景 */ + scene: string; +} diff --git a/types/alloyfinger.d.ts b/types/alloyfinger.d.ts new file mode 100644 index 0000000..7f57dcb --- /dev/null +++ b/types/alloyfinger.d.ts @@ -0,0 +1,14 @@ +declare module 'alloyfinger' { + export default class AlloyFinger { + constructor($el: HTMLElement, options: AlloyFingerOption); + } +} + +interface AlloyFingerOption { + pressMove: (evt: TouchEvent & WheelEvent) => void; +} + +declare interface AlloyFingerTransformHTMLElement extends HTMLElement { + translateY: number; + translateX: number; +} diff --git a/types/emotion-sdk.d.ts b/types/emotion-sdk.d.ts new file mode 100644 index 0000000..7b36b05 --- /dev/null +++ b/types/emotion-sdk.d.ts @@ -0,0 +1,21 @@ +declare module '@polyv/emotion-sdk' { + /** + * 把指定内容中的表情占位符替换为表情图片。 + * @param content 指定内容。 + * @param mode 解析模式,默认:1: + * 1 为 HTML 模式,即替换为 img 标签; + * 2 为弹幕模式,即替换为两个中括号括起的图片地址。 + */ + export function parseEmotions(content: string, mode?: number): string; + + /** + * 移除表情 + * @param content 指定内容 + */ + export function removeEmotions(content: string): string; + + /** + * 获取 dom 节点列表 + */ + export function genDOMList(): HTMLUListElement; +} diff --git a/types/global.d.ts b/types/global.d.ts new file mode 100644 index 0000000..d2d673e --- /dev/null +++ b/types/global.d.ts @@ -0,0 +1,40 @@ +import type { SdkLoaderEnv } from '@polyv/live-watch-sdk'; +import type { ComputedRef, Ref } from 'vue'; + +declare global { + // eslint-disable-next-line @typescript-eslint/no-empty-interface + interface Window extends Record {} + + interface HTMLElement { + __vueVm?: Vue; + } + + /** 代表任意的函数类型 */ + type AnyFunc = (...arg: unknown[]) => unknown; + + /** 响应式 Ref,包括 ComputedRef 和 Ref */ + type ResponsiveRef = ComputedRef | Ref; + + type RefOrElement = Ref | HTMLElement; + + /** 没有参数的方法类型 */ + type EmptyParamsFunc = () => unknown; + + /** 通用对象定义 */ + type UniversalParams = { + [key: string]: V; + }; + + /** 项目构建时间 */ + const PROJECT_BUILD_TIME: string; + + /** 项目版本号 */ + const PROJECT_VERSION: string; + + /** 观看页 SDK 加载的环境 */ + const WATCH_SDK_ENV: SdkLoaderEnv; + + interface NavigatorLanguage { + readonly browserLanguage: string; + } +} diff --git a/types/polyv-ui-admin.d.ts b/types/polyv-ui-admin.d.ts new file mode 100644 index 0000000..5555ec0 --- /dev/null +++ b/types/polyv-ui-admin.d.ts @@ -0,0 +1,80 @@ +/* eslint-disable no-duplicate-imports */ +/* eslint-disable @typescript-eslint/no-duplicate-imports */ +declare module '@polyv/polyv-ui/lib-admin/popper-manager' { + type PopperManager = { + /** 为元素设置 z-index 属性 */ + openPopper: (elem: HTMLElement) => void; + zIndex: number; + }; + const manager: PopperManager; + export default manager; +} + +/** + * 图片浏览 + */ +declare module '@polyv/polyv-ui/lib-admin/image-preview' { + import { ImagePreviewOptions } from '@/plugins/polyv-ui/types'; + + export interface ImagePreviewInstance { + /** 关闭 */ + close(): void; + } + + function ImagePreview( + images: string | string[], + options: ImagePreviewOptions, + ): ImagePreviewInstance; + + export default ImagePreview; +} + +/** + * 折叠动画 + */ +declare module '@polyv/polyv-ui/lib-admin/collapse-transition' { + import Vue, { ComponentOptions } from 'vue'; + const component: ComponentOptions; + export default component; +} + +/** + * 图标 + */ +declare module '@polyv/polyv-ui/lib-admin/icon' { + import Vue, { ComponentOptions } from 'vue'; + const component: ComponentOptions; + export default component; +} + +/** + * 图片粘贴输入框 + */ +declare module '@polyv/polyv-ui/lib-admin/input-paste-image' { + import Vue, { ComponentOptions } from 'vue'; + const component: ComponentOptions; + export default component; +} + +/** + * 栅格布局 + */ +declare module '@polyv/polyv-ui/lib-admin/row' { + import Vue, { ComponentOptions } from 'vue'; + const component: ComponentOptions; + export default component; +} +declare module '@polyv/polyv-ui/lib-admin/col' { + import Vue, { ComponentOptions } from 'vue'; + const component: ComponentOptions; + export default component; +} + +/** + * 分页器 + */ +declare module '@polyv/polyv-ui/lib-admin/pagination' { + import Vue, { ComponentOptions } from 'vue'; + const component: ComponentOptions; + export default component; +} diff --git a/types/polyv-ui-mobile.d.ts b/types/polyv-ui-mobile.d.ts new file mode 100644 index 0000000..1b91480 --- /dev/null +++ b/types/polyv-ui-mobile.d.ts @@ -0,0 +1,46 @@ +/* eslint-disable no-duplicate-imports */ +/* eslint-disable @typescript-eslint/no-duplicate-imports */ +/** + * 轮播图 + */ +declare module '@polyv/polyv-ui/lib-front-mob/carousel' { + import Vue, { ComponentOptions } from 'vue'; + const component: ComponentOptions; + export default component; +} + +/** + * 轮播图节点 + */ +declare module '@polyv/polyv-ui/lib-front-mob/carousel-item' { + import Vue, { ComponentOptions } from 'vue'; + const component: ComponentOptions; + export default component; +} + +/** + * 点赞 + */ +declare module '@polyv/polyv-ui/lib-front-mob/like' { + import Vue, { ComponentOptions } from 'vue'; + const component: ComponentOptions; + export default component; +} + +/** + * 地区选择 + */ +declare module '@polyv/polyv-ui/lib-front-mob/area-picker' { + import Vue, { ComponentOptions } from 'vue'; + const component: ComponentOptions; + export default component; +} + +/** + * 情绪反馈 + */ +declare module '@polyv/polyv-ui/lib-front-mob/emotional-feedback' { + import Vue, { ComponentOptions } from 'vue'; + const component: ComponentOptions; + export default component; +} diff --git a/types/polyv-ui-pc.d.ts b/types/polyv-ui-pc.d.ts new file mode 100644 index 0000000..e1b189e --- /dev/null +++ b/types/polyv-ui-pc.d.ts @@ -0,0 +1,46 @@ +/* eslint-disable no-duplicate-imports */ +/* eslint-disable @typescript-eslint/no-duplicate-imports */ +/** + * 轮播图 + */ +declare module '@polyv/polyv-ui/lib-front/carousel' { + import Vue, { ComponentOptions } from 'vue'; + const component: ComponentOptions; + export default component; +} + +/** + * 轮播图节点 + */ +declare module '@polyv/polyv-ui/lib-front/carousel-item' { + import Vue, { ComponentOptions } from 'vue'; + const component: ComponentOptions; + export default component; +} + +/** + * 点赞 + */ +declare module '@polyv/polyv-ui/lib-front/like' { + import Vue, { ComponentOptions } from 'vue'; + const component: ComponentOptions; + export default component; +} + +/** + * 地区选择 + */ +declare module '@polyv/polyv-ui/lib-front/area-picker' { + import Vue, { ComponentOptions } from 'vue'; + const component: ComponentOptions; + export default component; +} + +/** + * 情绪反馈 + */ +declare module '@polyv/polyv-ui/lib-front/emotional-feedback' { + import Vue, { ComponentOptions } from 'vue'; + const component: ComponentOptions; + export default component; +} diff --git a/types/shims-scss.d.ts b/types/shims-scss.d.ts new file mode 100644 index 0000000..e80300c --- /dev/null +++ b/types/shims-scss.d.ts @@ -0,0 +1,14 @@ +declare module '*.scss' { + const classes: { readonly [key: string]: string }; + export default classes; +} + +declare module '*.css' { + const classes: { readonly [key: string]: string }; + export default classes; +} + +declare module '*.ico' { + const icoUrl: string; + export default icoUrl; +} diff --git a/types/shims-vue.d.ts b/types/shims-vue.d.ts new file mode 100644 index 0000000..b953a6f --- /dev/null +++ b/types/shims-vue.d.ts @@ -0,0 +1,10 @@ +declare module '*.vue' { + import Vue, { ComponentOptions } from 'vue'; + const component: ComponentOptions; + export default component; +} + +declare module '*.svga' { + const content: string; + export default content; +} diff --git a/types/vue-declare-extend.d.ts b/types/vue-declare-extend.d.ts new file mode 100644 index 0000000..178801f --- /dev/null +++ b/types/vue-declare-extend.d.ts @@ -0,0 +1,12 @@ +import { translate } from '../src/assets/lang'; +import { defineComponent as _defineComponent } from 'vue'; + +declare global { + const defineOptions: typeof _defineComponent; +} + +declare module 'vue/types/vue' { + interface Vue { + $lang: typeof translate; + } +} diff --git a/types/wx-jssdk.d.ts b/types/wx-jssdk.d.ts new file mode 100644 index 0000000..e131020 --- /dev/null +++ b/types/wx-jssdk.d.ts @@ -0,0 +1,1475 @@ +declare namespace WechatJsSdk { + type JsApiNames = + /* 分享接口 */ + | 'updateAppMessageShareData' + | 'updateTimelineShareData' + | 'onMenuShareTimeline' + | 'onMenuShareAppMessage' + | 'onMenuShareQQ' + | 'onMenuShareWeibo' + | 'onMenuShareQZone' + /* 图像接口 */ + | 'chooseImage' + | 'previewImage' + | 'uploadImage' + | 'downloadImage' + | 'getLocalImgData' + /* 音频接口 */ + | 'startRecord' + | 'stopRecord' + | 'onVoiceRecordEnd' + | 'playVoice' + | 'pauseVoice' + | 'stopVoice' + | 'onVoicePlayEnd' + | 'uploadVoice' + | 'downloadVoice' + /* 智能接口 */ + | 'translateVoice' + /* 设备信息 */ + | 'getNetworkType' + /* 地理位置 */ + | 'openLocation' + | 'getLocation' + /* 摇一摇周边 */ + | 'startSearchBeacons' + | 'stopSearchBeacons' + | 'onSearchBeacons' + /* 界面操作 */ + | 'closeWindow' + | 'hideOptionMenu' + | 'showOptionMenu' + | 'hideMenuItems' + | 'showMenuItems' + | 'hideAllNonBaseMenuItem' + | 'showAllNonBaseMenuItem' + /** 旧版的分享 */ + | 'onMenuShareWechat' + | 'shareAppMessage' + | 'shareWechatMessage' + /* 微信扫一扫 */ + | 'scanQRCode' + /* 微信小店 */ + | 'openProductSpecificView' + /* 微信卡券 */ + | 'chooseCard' + | 'addCard' + | 'openCard' + | 'consumeAndShareCard' + /* 微信支付 */ + | 'chooseWXPay' + | 'openBusinessView' + /* 快速输入 */ + | 'openAddress' + /* 小程序 */ + | 'launchMiniProgram' + /* 企业微信 */ + | 'openEnterpriseRedPacket' + | 'openEnterpriseChat'; + + type OpenTagList = + | 'wx-open-launch-weapp' + | 'wx-open-launch-app' + | 'wx-open-subscribe' + | 'wx-open-audio'; + + type MenuNames = + /* 基本类 */ + | 'menuItem:exposeArticle' + | 'menuItem:setFont' + | 'menuItem:dayMode' + | 'menuItem:nightMode' + | 'menuItem:refresh' + | 'menuItem:profile' + | 'menuItem:addContact' + /* 传播类 */ + | 'menuItem:share:appMessage' + | 'menuItem:share:wechat' + | 'menuItem:share:timeline' + | 'menuItem:share:qq' + | 'menuItem:share:weiboApp' + | 'menuItem:share:facebook' + | 'menuItem:share:QZone' + | 'menuItem:share:email' + | 'menuItem:share:brand' + | 'menuItem:favorite' + /* 保护类 */ + | 'menuItem:editTag' + | 'menuItem:delete' + | 'menuItem:copyUrl' + | 'menuItem:originPage' + | 'menuItem:readMode' + | 'menuItem:openWithQQBrowser' + | 'menuItem:openWithSafari'; + + type ShareAppMessageTypes = 'music' | 'video' | 'link'; + + type ImageSizeTypes = 'original' | 'compressed'; + + type ImageSourceTypes = 'album' | 'camera'; + + type LocationTypes = 'wgs84' | 'gcj02'; + + type ScanTypes = 'qrCode' | 'barCode'; + + type ProductSpecificViewTypes = 0 | 1 | 2; + + interface ConfigOption { + /** + * @property {Boolean} 是否开启调试模式。 + */ + debug?: boolean; + /** + * @requires + * @property {Boolean} 公众号的唯一标识。 + */ + appId: string; + /** + * @requires + * @property {Boolean} 生成签名的时间戳。 + */ + timestamp: number; + /** + * @requires + * @property {Boolean} 生成签名的随机串。 + */ + nonceStr: string; + /** + * @requires + * @property {Boolean} 签名。 + */ + signature: string; + /** + * @requires + * @property {Boolean} 需要使用的 JS 接口列表。 + */ + jsApiList: JsApiNames[]; + /** + * @property {Boolean} 需要使用的开放标签列表。 + */ + openTagList?: OpenTagList[]; + } + + interface GeneralCallbackResult { + /** + * @property {String} 错误信息。 + */ + errMsg?: string; + } + + interface CheckJsApiOption { + /** + * @property {Array} 需要检测的 JS 接口列表。 + */ + jsApiList: JsApiNames[]; + + success?: (res?: CheckJsApiSuccessCallbackResult) => void; + fail?: (res?: GeneralCallbackResult) => void; + complete?: (res?: GeneralCallbackResult) => void; + } + + interface CheckJsApiSuccessCallbackResult extends GeneralCallbackResult { + /** + * @property {Object} JS 接口字典。 + */ + checkResult: Record; + } + + interface UpdateAppMessageShareDataOption { + /** + * @property {String} 分享标题。 + */ + title: string; + /** + * @property {String} 分享描述。 + */ + desc: string; + /** + * @property {String} 分享链接。 + */ + link: string; + /** + * @property {String} 分享图标。 + */ + imgUrl: string; + + success?: (res?: GeneralCallbackResult) => void; + fail?: (res?: GeneralCallbackResult) => void; + complete?: (res?: GeneralCallbackResult) => void; + } + + interface UpdateTimelineShareDataOption { + /** + * @property {String} 分享标题。 + */ + title: string; + /** + * @property {String} 分享链接。 + */ + link: string; + /** + * @property {String} 分享图标。 + */ + imgUrl: string; + + success?: (res?: GeneralCallbackResult) => void; + fail?: (res?: GeneralCallbackResult) => void; + complete?: (res?: GeneralCallbackResult) => void; + } + + interface OnMenuShareTimelineOption { + /** + * @property {String} 分享标题。 + */ + title: string; + /** + * @property {String} 分享链接。 + */ + link: string; + /** + * @property {String} 分享图标。 + */ + imgUrl: string; + + trigger?: (res?: GeneralCallbackResult) => void; + success?: (res?: GeneralCallbackResult) => void; + fail?: (res?: GeneralCallbackResult) => void; + complete?: (res?: GeneralCallbackResult) => void; + } + + interface OnMenuShareAppMessageOption { + /** + * @property {String} 分享标题。 + */ + title: string; + /** + * @property {String} 分享描述。 + */ + desc: string; + /** + * @property {String} 分享链接。 + */ + link: string; + /** + * @property {String} 分享图标。 + */ + imgUrl: string; + /** + * @property {String} 分享类型。 + */ + type?: ShareAppMessageTypes; + /** + * @property {String} 分享数据链接。 + */ + dataUrl?: string; + + trigger?: (res?: GeneralCallbackResult) => void; + success?: (res?: GeneralCallbackResult) => void; + fail?: (res?: GeneralCallbackResult) => void; + complete?: (res?: GeneralCallbackResult) => void; + } + + interface OnMenuShareQQOption { + /** + * @property {String} 分享标题。 + */ + title: string; + /** + * @property {String} 分享描述。 + */ + desc: string; + /** + * @property {String} 分享链接。 + */ + link: string; + /** + * @property {String} 分享图标。 + */ + imgUrl: string; + + trigger?: (res?: GeneralCallbackResult) => void; + success?: (res?: GeneralCallbackResult) => void; + fail?: (res?: GeneralCallbackResult) => void; + complete?: (res?: GeneralCallbackResult) => void; + } + + interface OnMenuShareWeiboOption { + /** + * @property {String} 分享标题。 + */ + title: string; + /** + * @property {String} 分享描述。 + */ + desc: string; + /** + * @property {String} 分享链接。 + */ + link: string; + /** + * @property {String} 分享图标。 + */ + imgUrl: string; + + trigger?: (res?: GeneralCallbackResult) => void; + success?: (res?: GeneralCallbackResult) => void; + fail?: (res?: GeneralCallbackResult) => void; + complete?: (res?: GeneralCallbackResult) => void; + } + + interface OnMenuShareQZoneOption { + /** + * @property {String} 分享标题。 + */ + title: string; + /** + * @property {String} 分享描述。 + */ + desc: string; + /** + * @property {String} 分享链接。 + */ + link: string; + /** + * @property {String} 分享图标。 + */ + imgUrl: string; + + trigger?: (res?: GeneralCallbackResult) => void; + success?: (res?: GeneralCallbackResult) => void; + fail?: (res?: GeneralCallbackResult) => void; + complete?: (res?: GeneralCallbackResult) => void; + } + + interface ChooseImageOption { + /** + * @property {Number} 一次可选择图片数量。 + */ + count?: number; + /** + * @property {Array} 指定是原图还是压缩图。 + */ + sizeType?: ImageSizeTypes[]; + /** + * @property {Array} 指定来源是相册还是相机。 + */ + sourceType?: ImageSourceTypes[]; + + cancel?: (res?: GeneralCallbackResult) => void; + success?: (res?: ChooseImageSuccessCallbackResult) => void; + fail?: (res?: GeneralCallbackResult) => void; + complete?: (res?: GeneralCallbackResult) => void; + } + + interface ChooseImageSuccessCallbackResult extends GeneralCallbackResult { + /** + * @property {Array} 选定照片的本地 ID 列表。 + */ + localIds: string[]; + } + + interface PreviewImageOption { + /** + * @property {String} 当前显示图片的链接。 + */ + current: string; + /** + * @property {Array} 需要预览的图片链接列表。 + */ + urls: string[]; + + cancel?: (res?: GeneralCallbackResult) => void; + success?: (res?: GeneralCallbackResult) => void; + fail?: (res?: GeneralCallbackResult) => void; + complete?: (res?: GeneralCallbackResult) => void; + } + + interface UploadImageOption { + /** + * @property {String} 需要上传的图片的本地 ID。 + */ + localId: string; + /** + * @property {Boolean} 是否显示进度提示。 + */ + isShowProgressTips?: boolean; + + cancel?: (res?: GeneralCallbackResult) => void; + success?: (res?: UploadImageSuccessCallbackResult) => void; + fail?: (res?: GeneralCallbackResult) => void; + complete?: (res?: GeneralCallbackResult) => void; + } + + interface UploadImageSuccessCallbackResult extends GeneralCallbackResult { + /** + * @property {String} 图片的服务端 ID。 + */ + serverId: string; + } + + interface DownloadImageOption { + /** + * @property {String} 需要下载的图片的服务端 ID。 + */ + serverId: string; + /** + * @property {Boolean} 是否显示进度提示。 + */ + isShowProgressTips?: boolean; + + cancel?: (res?: GeneralCallbackResult) => void; + success?: (res?: DownloadImageSuccessCallbackResult) => void; + fail?: (res?: GeneralCallbackResult) => void; + complete?: (res?: GeneralCallbackResult) => void; + } + + interface DownloadImageSuccessCallbackResult extends GeneralCallbackResult { + /** + * @property {String} 图片的本地 ID。 + */ + localId: string; + } + + interface GetLocalImgDataOption { + /** + * @property {String} 图片的本地 ID。 + */ + localId: string; + + success?: (res?: GetLocalImgDataSuccessCallbackResult) => void; + fail?: (res?: GeneralCallbackResult) => void; + complete?: (res?: GeneralCallbackResult) => void; + } + + interface GetLocalImgDataSuccessCallbackResult extends GeneralCallbackResult { + /** + * @property {String} 图片的 Base64 数据。 + */ + localData: string; + } + + interface StartRecordOption { + success?: (res?: GeneralCallbackResult) => void; + fail?: (res?: GeneralCallbackResult) => void; + complete?: (res?: GeneralCallbackResult) => void; + } + + interface StopRecordOption { + success?: (res?: StopRecordSuccessCallbackResult) => void; + fail?: (res?: GeneralCallbackResult) => void; + complete?: (res?: GeneralCallbackResult) => void; + } + + interface StopRecordSuccessCallbackResult extends GeneralCallbackResult { + /** + * @property {String} 录音的本地 ID。 + */ + localId: string; + } + + interface OnVoiceRecordEndOption { + complete?: (res?: OnVoiceRecordEndCompleteCallbackResult) => void; + } + + interface OnVoiceRecordEndCompleteCallbackResult extends GeneralCallbackResult { + /** + * @property {String} 录音的本地 ID。 + */ + localId: string; + } + + interface PlayVoiceOption { + /** + * @property {String} 需要播放的音频的本地 ID。 + */ + localId: string; + + success?: (res?: GeneralCallbackResult) => void; + fail?: (res?: GeneralCallbackResult) => void; + complete?: (res?: GeneralCallbackResult) => void; + } + + interface PauseVoiceOption { + /** + * @property {String} 需要暂停的音频的本地 ID。 + */ + localId: string; + + success?: (res?: GeneralCallbackResult) => void; + fail?: (res?: GeneralCallbackResult) => void; + complete?: (res?: GeneralCallbackResult) => void; + } + + interface StopVoiceOption { + /** + * @property {String} 需要停止的音频的本地 ID。 + */ + localId: string; + + success?: (res?: GeneralCallbackResult) => void; + fail?: (res?: GeneralCallbackResult) => void; + complete?: (res?: GeneralCallbackResult) => void; + } + + interface OnVoicePlayEndOption { + complete?: (res?: OnVoicePlayEndSuccessCallbackResult) => void; + } + + interface OnVoicePlayEndSuccessCallbackResult extends GeneralCallbackResult { + /** + * @property {String} 音频的本地 ID。 + */ + localId: string; + } + + interface UploadVoiceOption { + /** + * @property {String} 需要上传的音频的本地 ID。 + */ + localId: string; + /** + * @property {Boolean} 是否显示进度提示。 + */ + isShowProgressTips?: boolean; + + success?: (res?: UploadVoiceSuccessCallbackResult) => void; + fail?: (res?: GeneralCallbackResult) => void; + complete?: (res?: GeneralCallbackResult) => void; + } + + interface UploadVoiceSuccessCallbackResult extends GeneralCallbackResult { + /** + * @property {String} 音频的服务端 ID。 + */ + serverId: string; + } + + interface DownloadVoiceOption { + /** + * @property {String} 需要下载的音频的服务端 ID。 + */ + serverId: string; + /** + * @property {Boolean} 是否显示进度提示。 + */ + isShowProgressTips?: boolean; + + success?: (res?: DownloadVoiceSuccessCallbackResult) => void; + fail?: (res?: GeneralCallbackResult) => void; + complete?: (res?: GeneralCallbackResult) => void; + } + + interface DownloadVoiceSuccessCallbackResult extends GeneralCallbackResult { + /** + * @property {String} 音频的本地 ID。 + */ + localId: string; + } + + interface TranslateVoiceOption { + /** + * @property {String} 需要上传的音频的本地 ID。 + */ + localId: string; + /** + * @property {Boolean} 是否显示进度提示。 + */ + isShowProgressTips?: boolean; + + success?: (res?: TranslateVoiceSuccessCallbackResult) => void; + fail?: (res?: GeneralCallbackResult) => void; + complete?: (res?: GeneralCallbackResult) => void; + } + + interface TranslateVoiceSuccessCallbackResult extends GeneralCallbackResult { + /** + * @property {String} 语音识别的结果。 + */ + translateResult: string; + } + + interface GetNetworkTypeOption { + success?: (res?: GetNetworkTypeSuccessCallbackResult) => void; + fail?: (res?: GeneralCallbackResult) => void; + complete?: (res?: GeneralCallbackResult) => void; + } + + interface GetNetworkTypeSuccessCallbackResult extends GeneralCallbackResult { + /** + * @property {String} 网络类型。 + */ + networkType: string; + } + + interface OpenLocationOption { + /** + * @property {Number} 纬度。 + */ + latitude: number; + /** + * @property {Number} 经度。 + */ + longitude: number; + /** + * @property {String} 位置名。 + */ + name: string; + /** + * @property {String} 地址详情说明。 + */ + address: string; + /** + * @property {String} 地图缩放级别。 + */ + scale?: number; + /** + * @property {String} 在查看位置界面底部显示的超链接。 + */ + infoUrl?: string; + + success?: (res?: GeneralCallbackResult) => void; + fail?: (res?: GeneralCallbackResult) => void; + complete?: (res?: GeneralCallbackResult) => void; + } + + interface GetLocationOption { + /** + * @property {String} 坐标类型。 + */ + type?: LocationTypes; + + success?: (res?: GetLocationSuccessCallbackResult) => void; + fail?: (res?: GeneralCallbackResult) => void; + complete?: (res?: GeneralCallbackResult) => void; + } + + interface GetLocationSuccessCallbackResult extends GeneralCallbackResult { + /** + * @property {Number} 纬度。 + */ + latitude: number; + /** + * @property {Number} 经度。 + */ + longitude: number; + /** + * @property {Number} 速度(单位:米每秒)。 + */ + speed: number; + /** + * @property {Number} 位置精度。 + */ + accuracy: number; + } + + interface StartSearchBeaconsOption { + /** + * @property {String} 摇周边的业务 Ticket。 + */ + ticket: string; + + success?: (res?: GeneralCallbackResult) => void; + fail?: (res?: GeneralCallbackResult) => void; + complete?: (res?: GeneralCallbackResult) => void; + } + + interface StopSearchBeaconsOption { + success?: (res?: GeneralCallbackResult) => void; + fail?: (res?: GeneralCallbackResult) => void; + complete?: (res?: GeneralCallbackResult) => void; + } + + interface OnSearchBeaconsOption { + complete?: (res?: OnSearchBeaconsCompleteCallbackResult) => void; + } + + interface OnSearchBeaconsCompleteCallbackResult extends GeneralCallbackResult { + /** + * @property {Array} 设备列表。 + */ + beacons: Array<{ + /** + * @property {String} UUID。 + */ + uuid: string; + /** + * @property {Number} Major。 + */ + major: number; + /** + * @property {Number} Minor。 + */ + minor: number; + /** + * @property {String} 距离(单位:米)。 + */ + accuracy: string; + /** + * @property {String} 精度。 + */ + proximity: string; + /** + * @property {String} 接收信号的强度指示。 + */ + rssi: string; + /** + * @property {String} 接收信号时设备的方向。 + */ + heading?: string; + }>; + } + + interface HideMenuItemsOption { + /** + * @property {Array} 要隐藏的菜单项。 + */ + menuList: MenuNames[]; + + success?: (res?: GeneralCallbackResult) => void; + fail?: (res?: GeneralCallbackResult) => void; + complete?: (res?: GeneralCallbackResult) => void; + } + + interface ShowMenuItemsOption { + /** + * @property {Array} 要隐藏的菜单项。 + */ + menuList: MenuNames[]; + + success?: (res?: GeneralCallbackResult) => void; + fail?: (res?: GeneralCallbackResult) => void; + complete?: (res?: GeneralCallbackResult) => void; + } + + interface HideAllNonBaseMenuItemOption { + success?: (res?: GeneralCallbackResult) => void; + fail?: (res?: GeneralCallbackResult) => void; + complete?: (res?: GeneralCallbackResult) => void; + } + + interface ShowAllNonBaseMenuItemOption { + success?: (res?: GeneralCallbackResult) => void; + fail?: (res?: GeneralCallbackResult) => void; + complete?: (res?: GeneralCallbackResult) => void; + } + + interface ScanQRCodeOption { + /** + * @property {Number} 是否直接返回扫描结果。 + */ + needResult?: 0 | 1; + /** + * 指定扫二维码还是一维码。 + */ + scanType?: ScanTypes[]; + + cancel?: (res?: GeneralCallbackResult) => void; + success?: (res?: ScanQRCodeSuccessCallbackResult) => void; + fail?: (res?: GeneralCallbackResult) => void; + complete?: (res?: GeneralCallbackResult) => void; + } + + interface ScanQRCodeSuccessCallbackResult extends GeneralCallbackResult { + /** + * @property {String} 扫描结果。 + */ + resultStr?: string; + } + + interface OpenProductSpecificViewOption { + /** + * @property {String} 商品 ID。 + */ + productId: string; + /** + * @property {Number} 页面类型。 + */ + viewType?: ProductSpecificViewTypes; + /** + * @property {Object} 额外信息。 + */ + extInfo?: unknown; + + success?: (res?: GeneralCallbackResult) => void; + fail?: (res?: GeneralCallbackResult) => void; + complete?: (res?: GeneralCallbackResult) => void; + } + + interface ChooseCardOption { + /** + * @property {String} 门店 ID。 + */ + shopId: string; + /** + * @property {String} 卡券类型。 + */ + cardType: string; + /** + * @property {String} 卡券 ID。 + */ + cardId: string; + /** + * @property {String} 卡券签名时间戳。 + */ + timestamp: string; + /** + * @property {String} 卡券签名随机串。 + */ + nonceStr: string; + /** + * @property {String} 签名方式。 + */ + signType: string; + /** + * @property {String} 卡券签名。 + */ + cardSign: string; + + success?: (res?: ChooseCardSuccessCallbackResult) => void; + fail?: (res?: GeneralCallbackResult) => void; + complete?: (res?: GeneralCallbackResult) => void; + } + + interface ChooseCardSuccessCallbackResult extends GeneralCallbackResult { + /** + * @property {String} 卡券列表的 JSON 格式字符串。 + */ + cardList: string; + } + + interface AddCardOption { + /** + * @property {Array} 要添加的卡券列表。 + */ + cardList: Array<{ + /** + * @property {String} 卡券 ID。 + */ + cardId: string; + /** + * @property {String} 卡券扩展参数。 + */ + cardExt?: string; + }>; + + success?: (res?: GeneralCallbackResult) => void; + fail?: (res?: GeneralCallbackResult) => void; + complete?: (res?: GeneralCallbackResult) => void; + } + + interface OpenCardOption { + /** + * @property {Array} 要打开的卡券列表。 + */ + cardList: Array<{ + /** + * @property {String} 卡券 ID。 + */ + cardId: string; + /** + * @property {String} 卡券 Code。 + */ + code: string; + }>; + + success?: (res?: GeneralCallbackResult) => void; + fail?: (res?: GeneralCallbackResult) => void; + complete?: (res?: GeneralCallbackResult) => void; + } + + interface ConsumeAndShareCardOption { + /** + * @property {String} 卡券 ID。 + */ + cardId?: string; + /** + * @property {String} 卡券 Code。 + */ + code?: string; + + success?: (res?: GeneralCallbackResult) => void; + fail?: (res?: GeneralCallbackResult) => void; + complete?: (res?: GeneralCallbackResult) => void; + } + + interface ChooseWXPayOption { + /** + * @property {Number} 支付签名时间戳。 + */ + timestamp: number; + /** + * @property {String} 支付签名随机串。 + */ + nonceStr: string; + /** + * @property {String} 支付参数。 + */ + package: string; + /** + * @property {String} 签名方式。 + */ + signType: string; + /** + * @property {String} 支付签名。 + */ + paySign: string; + + cancel?: (res?: GeneralCallbackResult) => void; + success?: (res?: GeneralCallbackResult) => void; + fail?: (res?: GeneralCallbackResult) => void; + complete?: (res?: GeneralCallbackResult) => void; + } + + interface OpenBusinessViewOption { + /** + * @property {String} 跳转类型。 + */ + businessType: string; + /** + * @property {String} 页面参数。 + */ + queryString: string; + /** + * @property {String} 版本。 + */ + envVersion?: string; + + cancel?: (res?: GeneralCallbackResult) => void; + success?: (res?: OpenAddressSuccessCallbackResult) => void; + fail?: (res?: GeneralCallbackResult) => void; + complete?: (res?: GeneralCallbackResult) => void; + } + + interface OpenAddressOption { + cancel?: (res?: GeneralCallbackResult) => void; + success?: (res?: OpenAddressSuccessCallbackResult) => void; + fail?: (res?: GeneralCallbackResult) => void; + complete?: (res?: GeneralCallbackResult) => void; + } + + interface OpenAddressSuccessCallbackResult extends GeneralCallbackResult { + /** + * @property {String} 收货人姓名。 + */ + userName: string; + /** + * @property {String} 邮编。 + */ + postalCode: string; + /** + * @property {String} 国标收货地址第一级地址(省)。 + */ + provinceName: string; + /** + * @property {String} 国标收货地址第二级地址(市)。 + */ + cityName: string; + /** + * @property {String} 国标收货地址第三级地址(国家)。 + */ + countryName: string; + /** + * @property {String} 详细收货地址信息。 + */ + detailInfo: string; + /** + * @property {String} 收货地址国家码。 + */ + nationalCode?: string; + /** + * @property {String} 收货人手机号码。 + */ + telNumber: string; + } + + interface LaunchMiniProgramOption { + /** + * @property {String} 目标小程序 AppId。 + */ + targetAppId: string; + /** + * @property {String} 小程序页面路径。 + */ + path: string; + /** + * @property {String} 小程序版本。 + */ + envVersion?: string; + + success?: (res?: GeneralCallbackResult) => void; + fail?: (res?: GeneralCallbackResult) => void; + complete?: (res?: GeneralCallbackResult) => void; + } + + interface OpenEnterpriseRedPacketOption { + success?: (res?: GeneralCallbackResult) => void; + fail?: (res?: GeneralCallbackResult) => void; + complete?: (res?: GeneralCallbackResult) => void; + } + + interface OpenEnterpriseChatOption { + /** + * @property {String} 参与会话的企业成员列表,用逗号隔开。 + */ + userIds?: string; + /** + * @property {String} 参与会话的外部联系人列表,用逗号隔开。 + */ + externalUserIds?: string; + /** + * @property {String} 会话名称。 + */ + groupName?: string; + /** + * @property {String} 会话 ID。 + */ + chatId?: string; + + success?: (res?: OpenEnterpriseChatSuccessCallbackResult) => void; + fail?: (res?: GeneralCallbackResult) => void; + complete?: (res?: GeneralCallbackResult) => void; + } + + interface OpenEnterpriseChatSuccessCallbackResult extends GeneralCallbackResult { + /** + * @property {String} 会话 ID。 + */ + chatId: string; + } + + interface MiniProgramNavigateToOption { + /** + * @property {String} 需要跳转的页面路径。 + */ + url: string; + + success?: (res?: GeneralCallbackResult) => void; + fail?: (res?: GeneralCallbackResult) => void; + complete?: (res?: GeneralCallbackResult) => void; + } + + interface MiniProgramNavigateBackOption { + /** + * @property {Number} 返回的页面数。 + */ + delta?: number; + + success?: (res?: GeneralCallbackResult) => void; + fail?: (res?: GeneralCallbackResult) => void; + complete?: (res?: GeneralCallbackResult) => void; + } + + interface MiniProgramSwitchTabOption { + /** + * @property {String} 需要跳转的页面路径。 + */ + url: string; + + success?: (res?: GeneralCallbackResult) => void; + fail?: (res?: GeneralCallbackResult) => void; + complete?: (res?: GeneralCallbackResult) => void; + } + + interface MiniProgramReLaunchOption { + /** + * @property {String} 需要跳转的页面路径。 + */ + url: string; + + success?: (res?: GeneralCallbackResult) => void; + fail?: (res?: GeneralCallbackResult) => void; + complete?: (res?: GeneralCallbackResult) => void; + } + + interface MiniProgramRedirectToOption { + /** + * @property {String} 需要跳转的页面路径。 + */ + url: string; + + success?: (res?: GeneralCallbackResult) => void; + fail?: (res?: GeneralCallbackResult) => void; + complete?: (res?: GeneralCallbackResult) => void; + } + + interface MiniProgramPostMessageOption { + data: unknown; + } + + interface MiniProgramGetEnvCallbackResult extends GeneralCallbackResult { + /** + * @property {Boolean} 是否在小程序环境下。 + */ + miniprogram?: boolean; + } + + export interface Wx { + /** + * 注入权限验证配置。 + * @param {Object} options 配置项。 + */ + config(options: ConfigOption): void; + + /** + * 处理成功的回调方法。 + * @param {Function} callback 回调函数。 + */ + ready(callback: () => void): void; + + /** + * 处理失败的回调方法。 + * @param {Function} callback 回调函数。 + */ + error(callback: (res?: GeneralCallbackResult) => void): void; + + /** + * 判断当前客户端版本是否支持指定 JS 接口。 + * @param {Object} options 配置项。 + */ + checkJsApi(options?: CheckJsApiOption): void; + + /** + * 自定义“分享给朋友”及“分享到 QQ”按钮的分享内容。 + * @param {Object} options 配置项。 + */ + updateAppMessageShareData(options?: UpdateAppMessageShareDataOption): void; + + /** + * 自定义“分享到朋友圈”及“分享到 QQ 空间”按钮的分享内容。 + * @param {Object} options 配置项。 + */ + updateTimelineShareData(options?: UpdateTimelineShareDataOption): void; + + /** + * 获取“分享到朋友圈”按钮点击状态及自定义分享内容。 + * @param {Object} options 配置项。 + * @deprecated + */ + onMenuShareTimeline(options?: OnMenuShareTimelineOption): void; + + /** + * 获取“分享给朋友”按钮点击状态及自定义分享内容。 + * @param {Object} options 配置项。 + * @deprecated + */ + onMenuShareAppMessage(options?: OnMenuShareAppMessageOption): void; + + /** + * 获取“微信”按钮点击状态及自定义分享内容(仅企业微信下支持)。 + * @param {Object} options 配置项。 + */ + onMenuShareWechat?: (options?: OnMenuShareAppMessageOption) => void; + + /** + * 获取“分享到 QQ”按钮点击状态及自定义分享内容。 + * @param {Object} options 配置项。 + * @deprecated + */ + onMenuShareQQ(options?: OnMenuShareQQOption): void; + + /** + * 获取“分享到腾讯微博”按钮点击状态及自定义分享内容。 + * @param {Object} options 配置项。 + * @deprecated + */ + onMenuShareWeibo(options?: OnMenuShareWeiboOption): void; + + /** + * 获取“分享到 QQ 空间”按钮点击状态及自定义分享内容。 + * @param {Object} options 配置项。 + * @deprecated + */ + onMenuShareQZone(options?: OnMenuShareQZoneOption): void; + + /** + * 拍照或从手机相册中选图。 + * @param {Object} options 配置项。 + */ + chooseImage(options?: ChooseImageOption): void; + + /** + * 预览图片。 + * @param {Object} options 配置项。 + */ + previewImage(options?: PreviewImageOption): void; + + /** + * 上传图片。 + * @param {Object} options 配置项。 + */ + uploadImage(options?: UploadImageOption): void; + + /** + * 下载图片。 + * @param {Object} options 配置项。 + */ + downloadImage(options?: DownloadImageOption): void; + + /** + * 获取本地图片。 + * @param {Object} options 配置项。 + */ + getLocalImgData(options?: GetLocalImgDataOption): void; + + /** + * 开始录音。 + * @param {Object} options 配置项。 + */ + startRecord(options?: StartRecordOption): void; + + /** + * 停止录音。 + * @param {Object} options 配置项。 + */ + stopRecord(options?: StopRecordOption): void; + + /** + * 监听录音自动停止。 + * @param {Object} options 配置项。 + */ + onVoiceRecordEnd(options?: OnVoiceRecordEndOption): void; + + /** + * 播放语音。 + * @param {Object} options 配置项。 + */ + playVoice(options?: PlayVoiceOption): void; + + /** + * 暂停播放。 + * @param {Object} options 配置项。 + */ + pauseVoice(options?: PauseVoiceOption): void; + + /** + * 停止播放接口。 + * @param {Object} options 配置项。 + */ + stopVoice(options?: StopVoiceOption): void; + + /** + * 监听语音播放完毕。 + * @param {Object} options 配置项。 + */ + onVoicePlayEnd(options?: OnVoicePlayEndOption): void; + + /** + * 上传语音。 + * @param {Object} options 配置项。 + */ + uploadVoice(options?: UploadVoiceOption): void; + + /** + * 下载语音。 + * @param {Object} options 配置项。 + */ + downloadVoice(options?: DownloadVoiceOption): void; + + /** + * 识别音频并返回识别结果。 + * @param {Object} options 配置项。 + */ + translateVoice(options?: TranslateVoiceOption): void; + + /** + * 获取网络状态。 + * @param {Object} options 配置项。 + */ + getNetworkType(options?: GetNetworkTypeOption): void; + + /** + * 使用微信内置地图查看位置。 + * @param {Object} options 配置项。 + */ + openLocation(options?: OpenLocationOption): void; + + /** + * 获取地理位置。 + * @param {Object} options 配置项。 + */ + getLocation(options?: GetLocationOption): void; + + /** + * 开启查找周边 iBeacon 设备。 + * @param {Object} options 配置项。 + */ + startSearchBeacons(options?: StartSearchBeaconsOption): void; + + /** + * 关闭查找周边 iBeacon 设备。 + * @param {Object} options 配置项。 + */ + stopSearchBeacons(options?: StopSearchBeaconsOption): void; + + /** + * 监听周边 iBeacon 设备。 + * @param {Object} options 配置项。 + */ + onSearchBeacons(options?: OnSearchBeaconsOption): void; + + /** + * 关闭当前网页窗口。 + */ + closeWindow(): void; + + /** + * 隐藏右上角菜单。 + */ + hideOptionMenu(): void; + + /** + * 显示右上角菜单。 + */ + showOptionMenu(): void; + + /** + * 批量隐藏功能按钮。 + * @param {Object} options 配置项。 + */ + hideMenuItems(options?: HideMenuItemsOption): void; + + /** + * 批量显示功能按钮。 + * @param {Object} options 配置项。 + */ + showMenuItems(options?: ShowMenuItemsOption): void; + + /** + * 隐藏所有非基础按钮。 + * @param {Object} options 配置项。 + */ + hideAllNonBaseMenuItem(options?: HideAllNonBaseMenuItemOption): void; + + /** + * 显示所有功能按钮。 + * @param {Object} options 配置项。 + */ + showAllNonBaseMenuItem(options?: ShowAllNonBaseMenuItemOption): void; + + /** + * 调起微信扫一扫。 + * @param {Object} options 配置项。 + */ + scanQRCode(options?: ScanQRCodeOption): void; + + /** + * 跳转微信商品页。 + * @param {Object} options 配置项。 + */ + openProductSpecificView(options?: OpenProductSpecificViewOption): void; + + /** + * 拉取适用卡券列表并获取用户选择信息。 + * @param {Object} options 配置项。 + */ + chooseCard(options?: ChooseCardOption): void; + + /** + * 批量添加卡券。 + * @param {Object} options 配置项。 + */ + addCard(options?: AddCardOption): void; + + /** + * 查看微信卡包中的卡券。 + * @param {Object} options 配置项。 + */ + openCard(options?: OpenCardOption): void; + + /** + * 使用微信卡包中的卡券。 + * @param {Object} options 配置项。 + */ + consumeAndShareCard(options?: ConsumeAndShareCardOption): void; + + /** + * 发起一个微信支付请求。 + * @param {Object} options 配置项。 + */ + chooseWXPay(options?: ChooseWXPayOption): void; + + /** + * 调起微信支付分。 + * @param {Object} options 配置项。 + */ + openBusinessView(options?: OpenBusinessViewOption): void; + + /** + * 共享收货地址。 + * @param {Object} options 配置项。 + */ + openAddress(options?: OpenAddressOption): void; + + /** + * 跳转到小程序。 + * @param {Object} options 配置项。 + */ + launchMiniProgramOption(options?: LaunchMiniProgramOption): void; + + /** + * 打开企业微信红包。 + * @param {Object} options 配置项。 + */ + openEnterpriseRedPacket(options?: OpenEnterpriseRedPacketOption): void; + + /** + * 打开企业微信聊天。 + * @param {Object} options 配置项。 + */ + openEnterpriseChat(options?: OpenEnterpriseChatOption): void; + + /** + * 小程序相关接口。 + */ + miniProgram?: { + /** + * 处理成功的回调方法。 + * @param {Object} options 配置项。 + */ + navigateTo(options?: MiniProgramNavigateToOption): void; + + /** + * 处理成功的回调方法。 + * @param {Object} options 配置项。 + */ + navigateBack(options?: MiniProgramNavigateBackOption): void; + + /** + * 处理成功的回调方法。 + * @param {Object} options 配置项。 + */ + switchTab(options?: MiniProgramSwitchTabOption): void; + + /** + * 处理成功的回调方法。 + * @param {Object} options 配置项。 + */ + reLaunch(options?: MiniProgramReLaunchOption): void; + + /** + * 处理成功的回调方法。 + * @param {Object} options 配置项。 + */ + redirectTo(options?: MiniProgramRedirectToOption): void; + + /** + * 向小程序发送消息。 + * @param {Object} options 配置项。 + */ + postMessage(options?: MiniProgramPostMessageOption): void; + + /** + * 获取当前环境 。 + * @param {Function} callback 回调函数。 + */ + getEnv(callback: (res?: MiniProgramGetEnvCallbackResult) => void): void; + }; + } +} + +interface Window { + /** 微信 sdk 实例 */ + wx: typeof wx; +} + +declare const wx: WechatJsSdk.Wx; diff --git a/vue.config.js b/vue.config.js new file mode 100644 index 0000000..d2c3d6d --- /dev/null +++ b/vue.config.js @@ -0,0 +1,62 @@ +const webpackVueConfig = require('./build/webpack.vue.config'); +const { + devServerPort, + devServerHost, + devServerProxy, + publicPath, + transpileDependencies, + outputDir, +} = require('./build/build-config'); +const { coreJsImports } = require('./build/core-import'); +const path = require('path'); + +/** @type {import('@vue/cli-service').ProjectOptions} */ +module.exports = { + pages: { + index: { + entry: [...coreJsImports, path.resolve(__dirname, './src/main.ts')], + template: path.resolve(__dirname, './public/index.html'), + filename: 'index.html', + }, + }, + + publicPath, + + outputDir, + + assetsDir: 'assets', + + configureWebpack: webpackVueConfig, + + chainWebpack: config => { + // 观看页应用大部分 chunk 是不太需要 prefetch 的,为了减少带宽和请求数,可以去掉 + config.plugins.delete('prefetch-index'); + + // 某些移动端设备对文件编码识别有误,把非 ascii 字符都转成 unicode 编码 + config.optimization.minimizer('terser').tap(item => { + item[0].terserOptions.output = item[0].terserOptions.output || {}; + item[0].terserOptions.output.ascii_only = true; + return item; + }); + }, + + transpileDependencies, + + devServer: { + host: devServerHost, + port: devServerPort, + disableHostCheck: true, + hot: true, + // https: true, + overlay: { + warnings: false, + errors: true, + }, + stats: 'minimal', + + proxy: devServerProxy, + contentBase: path.resolve(__dirname, './map-file/'), + }, + + productionSourceMap: false, +}; -- Gitee

y(gO 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 3Td;y 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 literal 0 HcmV?d00001 diff --git a/src/pages/watch/portrait-watch/layout/portrait-watch-layout-carousel.vue b/src/pages/watch/portrait-watch/layout/portrait-watch-layout-carousel.vue new file mode 100644 index 0000000..dba1688 --- /dev/null +++ b/src/pages/watch/portrait-watch/layout/portrait-watch-layout-carousel.vue @@ -0,0 +1,70 @@ + + + + + + diff --git a/src/pages/watch/portrait-watch/layout/portrait-watch-layout.vue b/src/pages/watch/portrait-watch/layout/portrait-watch-layout.vue new file mode 100644 index 0000000..f8db0a5 --- /dev/null +++ b/src/pages/watch/portrait-watch/layout/portrait-watch-layout.vue @@ -0,0 +1,85 @@ + + + + + + diff --git a/src/pages/watch/portrait-watch/portrait-watch.vue b/src/pages/watch/portrait-watch/portrait-watch.vue new file mode 100644 index 0000000..ab23153 --- /dev/null +++ b/src/pages/watch/portrait-watch/portrait-watch.vue @@ -0,0 +1,167 @@ + + + + + + diff --git a/src/plugins/alloy-finger/transform.js b/src/plugins/alloy-finger/transform.js new file mode 100644 index 0000000..fead4b1 --- /dev/null +++ b/src/plugins/alloy-finger/transform.js @@ -0,0 +1,322 @@ +// eslint-disable-next-line sonarjs/cognitive-complexity +const Matrix3D = function ( + n11, + n12, + n13, + n14, + n21, + n22, + n23, + n24, + n31, + n32, + n33, + n34, + n41, + n42, + n43, + n44, +) { + this.elements = window.Float32Array ? new Float32Array(16) : []; + const te = this.elements; + te[0] = n11 !== undefined ? n11 : 1; + te[4] = n12 || 0; + te[8] = n13 || 0; + te[12] = n14 || 0; + te[1] = n21 || 0; + te[5] = n22 !== undefined ? n22 : 1; + te[9] = n23 || 0; + te[13] = n24 || 0; + te[2] = n31 || 0; + te[6] = n32 || 0; + te[10] = n33 !== undefined ? n33 : 1; + te[14] = n34 || 0; + te[3] = n41 || 0; + te[7] = n42 || 0; + te[11] = n43 || 0; + te[15] = n44 !== undefined ? n44 : 1; +}; + +Matrix3D.DEG_TO_RAD = Math.PI / 180; + +Matrix3D.prototype = { + set: function (n11, n12, n13, n14, n21, n22, n23, n24, n31, n32, n33, n34, n41, n42, n43, n44) { + const te = this.elements; + te[0] = n11; + te[4] = n12; + te[8] = n13; + te[12] = n14; + te[1] = n21; + te[5] = n22; + te[9] = n23; + te[13] = n24; + te[2] = n31; + te[6] = n32; + te[10] = n33; + te[14] = n34; + te[3] = n41; + te[7] = n42; + te[11] = n43; + te[15] = n44; + return this; + }, + identity: function () { + this.set(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); + return this; + }, + multiplyMatrices: function (a, be) { + const ae = a.elements; + const te = this.elements; + const a11 = ae[0]; + const a12 = ae[4]; + const a13 = ae[8]; + const a14 = ae[12]; + const a21 = ae[1]; + const a22 = ae[5]; + const a23 = ae[9]; + const a24 = ae[13]; + const a31 = ae[2]; + const a32 = ae[6]; + const a33 = ae[10]; + const a34 = ae[14]; + const a41 = ae[3]; + const a42 = ae[7]; + const a43 = ae[11]; + const a44 = ae[15]; + + const b11 = be[0]; + const b12 = be[1]; + const b13 = be[2]; + const b14 = be[3]; + const b21 = be[4]; + const b22 = be[5]; + const b23 = be[6]; + const b24 = be[7]; + const b31 = be[8]; + const b32 = be[9]; + const b33 = be[10]; + const b34 = be[11]; + const b41 = be[12]; + const b42 = be[13]; + const b43 = be[14]; + const b44 = be[15]; + + te[0] = a11 * b11 + a12 * b21 + a13 * b31 + a14 * b41; + te[4] = a11 * b12 + a12 * b22 + a13 * b32 + a14 * b42; + te[8] = a11 * b13 + a12 * b23 + a13 * b33 + a14 * b43; + te[12] = a11 * b14 + a12 * b24 + a13 * b34 + a14 * b44; + + te[1] = a21 * b11 + a22 * b21 + a23 * b31 + a24 * b41; + te[5] = a21 * b12 + a22 * b22 + a23 * b32 + a24 * b42; + te[9] = a21 * b13 + a22 * b23 + a23 * b33 + a24 * b43; + te[13] = a21 * b14 + a22 * b24 + a23 * b34 + a24 * b44; + + te[2] = a31 * b11 + a32 * b21 + a33 * b31 + a34 * b41; + te[6] = a31 * b12 + a32 * b22 + a33 * b32 + a34 * b42; + te[10] = a31 * b13 + a32 * b23 + a33 * b33 + a34 * b43; + te[14] = a31 * b14 + a32 * b24 + a33 * b34 + a34 * b44; + + te[3] = a41 * b11 + a42 * b21 + a43 * b31 + a44 * b41; + te[7] = a41 * b12 + a42 * b22 + a43 * b32 + a44 * b42; + te[11] = a41 * b13 + a42 * b23 + a43 * b33 + a44 * b43; + te[15] = a41 * b14 + a42 * b24 + a43 * b34 + a44 * b44; + + return this; + }, + // 解决角度为90的整数倍导致Math.cos得到极小的数,其实是0。导致不渲染 + _rounded: function (value, i) { + i = Math.pow(10, i || 15); + // default + return Math.round(value * i) / i; + }, + appendTransform: function ( + x, + y, + z, + scaleX, + scaleY, + scaleZ, + rotateX, + rotateY, + rotateZ, + skewX, + skewY, + originX, + originY, + originZ, + ) { + const rx = rotateX * Matrix3D.DEG_TO_RAD; + const cosx = this._rounded(Math.cos(rx)); + const sinx = this._rounded(Math.sin(rx)); + const ry = rotateY * Matrix3D.DEG_TO_RAD; + const cosy = this._rounded(Math.cos(ry)); + const siny = this._rounded(Math.sin(ry)); + const rz = rotateZ * Matrix3D.DEG_TO_RAD; + const cosz = this._rounded(Math.cos(rz * -1)); + const sinz = this._rounded(Math.sin(rz * -1)); + + this.multiplyMatrices(this, [1, 0, 0, x, 0, cosx, sinx, y, 0, -sinx, cosx, z, 0, 0, 0, 1]); + + this.multiplyMatrices(this, [cosy, 0, siny, 0, 0, 1, 0, 0, -siny, 0, cosy, 0, 0, 0, 0, 1]); + + this.multiplyMatrices(this, [ + cosz * scaleX, + sinz * scaleY, + 0, + 0, + -sinz * scaleX, + cosz * scaleY, + 0, + 0, + 0, + 0, + 1 * scaleZ, + 0, + 0, + 0, + 0, + 1, + ]); + + if (skewX || skewY) { + this.multiplyMatrices(this, [ + this._rounded(Math.cos(skewX * Matrix3D.DEG_TO_RAD)), + this._rounded(Math.sin(skewX * Matrix3D.DEG_TO_RAD)), + 0, + 0, + -1 * this._rounded(Math.sin(skewY * Matrix3D.DEG_TO_RAD)), + this._rounded(Math.cos(skewY * Matrix3D.DEG_TO_RAD)), + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 1, + ]); + } + + if (originX || originY || originZ) { + this.elements[12] -= + originX * this.elements[0] + originY * this.elements[4] + originZ * this.elements[8]; + this.elements[13] -= + originX * this.elements[1] + originY * this.elements[5] + originZ * this.elements[9]; + this.elements[14] -= + originX * this.elements[2] + originY * this.elements[6] + originZ * this.elements[10]; + } + return this; + }, +}; + +function observe(target, props, callback) { + for (let i = 0, len = props.length; i < len; i++) { + const prop = props[i]; + watch(target, prop, callback); + } +} + +function watch(target, prop, callback) { + Object.defineProperty(target, prop, { + get: function () { + return this['__' + prop]; + }, + set: function (value) { + if (value !== this['__' + prop]) { + this['__' + prop] = value; + callback(); + } + }, + }); +} + +/** + * 在 DOM 元素上增加 css-transform 相关的属性,监听到属性变化时,更改 DOM 的样式 + * @param {HTMLElement} element + * @returns {HTMLElement & AlloyFingerTransformHTMLElement } + */ +export const Transform = function (element) { + observe( + element, + [ + 'translateX', + 'translateY', + 'translateZ', + 'scaleX', + 'scaleY', + 'scaleZ', + 'rotateX', + 'rotateY', + 'rotateZ', + 'skewX', + 'skewY', + 'originX', + 'originY', + 'originZ', + ], + function () { + const mtx = element.matrix3D + .identity() + .appendTransform( + element.translateX, + element.translateY, + element.translateZ, + element.scaleX, + element.scaleY, + element.scaleZ, + element.rotateX, + element.rotateY, + element.rotateZ, + element.skewX, + element.skewY, + element.originX, + element.originY, + element.originZ, + ); + element.style.transform = + element.style.msTransform = + element.style.OTransform = + element.style.MozTransform = + element.style.webkitTransform = + 'perspective(' + + element.perspective + + 'px) matrix3d(' + + Array.prototype.slice.call(mtx.elements).join(',') + + ')'; + }, + ); + + observe(element, ['perspective'], function () { + element.style.transform = + element.style.msTransform = + element.style.OTransform = + element.style.MozTransform = + element.style.webkitTransform = + 'perspective(' + + element.perspective + + 'px) matrix3d(' + + Array.prototype.slice.call(element.matrix3D.elements).join(',') + + ')'; + }); + + element.matrix3D = new Matrix3D(); + element.perspective = 500; + element.scaleX = element.scaleY = element.scaleZ = 1; + // 由于image自带了x\y\z,所有加上translate前缀 + element.translateX = + element.translateY = + element.translateZ = + element.rotateX = + element.rotateY = + element.rotateZ = + element.skewX = + element.skewY = + element.originX = + element.originY = + element.originZ = + 0; + + return element; +}; diff --git a/src/plugins/async-validator/index.ts b/src/plugins/async-validator/index.ts new file mode 100644 index 0000000..8c65100 --- /dev/null +++ b/src/plugins/async-validator/index.ts @@ -0,0 +1,9 @@ +import Schema from 'async-validator'; + +// 将内部的 console.waring 禁用掉 +// eslint-disable-next-line @typescript-eslint/no-empty-function +Schema.warning = () => {}; + +export type { Rules as ValidatorRules, Rule as ValidatorRule } from 'async-validator'; + +export default Schema; diff --git a/src/plugins/external-lib-loaders/load-ali-awsc.ts b/src/plugins/external-lib-loaders/load-ali-awsc.ts new file mode 100644 index 0000000..66a1372 --- /dev/null +++ b/src/plugins/external-lib-loaders/load-ali-awsc.ts @@ -0,0 +1,28 @@ +/** + * @file 加载阿里云 awsc.js + */ +import { loadScript } from '@just4/load-script'; + +// eslint-disable-next-line @typescript-eslint/no-explicit-any +let loadPromise: Promise | undefined; + +/** + * 加载阿里云 awsc.js + */ +export const loadAliAwsc = () => { + if (!loadPromise) { + loadPromise = new Promise((resolve, reject) => { + (async () => { + await loadScript('https://g.alicdn.com/AWSC/AWSC/awsc.js'); + + if (window.AWSC) { + resolve(window.AWSC); + } else { + reject(new Error('loadAliAwsc fail, window.AWSC is undefined')); + } + })(); + }); + } + + return loadPromise; +}; diff --git a/src/plugins/external-lib-loaders/load-svga-player.ts b/src/plugins/external-lib-loaders/load-svga-player.ts new file mode 100644 index 0000000..b81a3c8 --- /dev/null +++ b/src/plugins/external-lib-loaders/load-svga-player.ts @@ -0,0 +1,48 @@ +import { loadScript } from '@just4/load-script'; +import type { + Player as SVGAPlayer, + Parser as SVGAParser, + VideoEntity as SVGAVideoEntity, +} from 'svgaplayerweb'; + +/** svga 加载地址 */ +const SVGA_PLAYER_URL = 'https://s4.videocc.net/library/svgaplayerweb/2.x/svga-2.3.1.min.js'; + +export { SVGAPlayer, SVGAParser, SVGAVideoEntity }; + +export interface SVGASdk { + Player: typeof SVGAPlayer; + Parser: typeof SVGAParser; +} + +declare global { + interface Window { + SVGA?: SVGASdk; + } +} + +let svgaPlayerLoader: Promise | undefined; + +/** + * 加载 svga 播放器 + */ +export function loadSvgaPlayer(): Promise { + if (window.SVGA) { + return Promise.resolve(window.SVGA); + } + + if (!svgaPlayerLoader) { + svgaPlayerLoader = new Promise((resolve, reject) => { + (async () => { + await loadScript(SVGA_PLAYER_URL); + if (window.SVGA) { + resolve(window.SVGA); + } else { + reject(new Error('loadSvgaPlayer fail, window.SVGA is undefined')); + } + })(); + }); + } + + return svgaPlayerLoader; +} diff --git a/src/plugins/external-lib-loaders/load-work-weixin-login.ts b/src/plugins/external-lib-loaders/load-work-weixin-login.ts new file mode 100644 index 0000000..32a69fb --- /dev/null +++ b/src/plugins/external-lib-loaders/load-work-weixin-login.ts @@ -0,0 +1,60 @@ +/** + * @file 加载企业微信扫码授权 js 文件 + */ +import { loadScript } from '@just4/load-script'; + +export interface WwLoginConfig { + /** 渲染的 id 选择器 */ + id: string; + /** 企业微信的 corpId */ + appid: string; + /** 授权方的网页应用 Id */ + agentid: string; + /** 重定向地址 */ + redirect_uri: string; + /** 回调状态 */ + state?: string; + /** 语言 */ + lang?: 'zh' | 'en'; + /** 自定义样式 */ + href?: string; +} + +export interface WwLoginInstance { + /** 销毁 */ + destroyed(): void; +} + +export interface WwLoginCtor { + new (config: WwLoginConfig): WwLoginInstance; +} + +declare global { + interface Window { + WwLogin?: WwLoginCtor; + } +} + +let loadPromise: Promise | undefined; + +export const loadWorkWeixinLoginSdk = (): Promise => { + if (window.WwLogin) { + return Promise.resolve(window.WwLogin); + } + + if (!loadPromise) { + loadPromise = new Promise((resolve, reject) => { + (async () => { + await loadScript('//wwcdn.weixin.qq.com/node/wework/wwopen/js/wwLogin-1.2.7.js'); + + if (window.WwLogin) { + resolve(window.WwLogin); + } else { + reject(new Error('loadWorkWeixinLoginSdk fail, window.WwLogin is undefined')); + } + })(); + }); + } + + return loadPromise; +}; diff --git a/src/plugins/external-lib-loaders/load-wx-sdk.ts b/src/plugins/external-lib-loaders/load-wx-sdk.ts new file mode 100644 index 0000000..2212231 --- /dev/null +++ b/src/plugins/external-lib-loaders/load-wx-sdk.ts @@ -0,0 +1,57 @@ +/** + * @file 加载微信 js-sdk 文件 + */ +import { loadScript } from '@just4/load-script'; + +let loadPromise: Promise | undefined; + +/** + * 加载微信 js-sdk + */ +export const loadWxSdk = () => { + if (window.wx) { + return Promise.resolve(window.wx); + } + + if (!loadPromise) { + loadPromise = new Promise((resolve, reject) => { + (async () => { + await loadScript('//res.wx.qq.com/open/js/jweixin-1.6.0.js'); + + if (window.wx) { + resolve(window.wx); + } else { + reject(new Error('loadWxSdk fail, window.wx is undefined')); + } + })(); + }); + } + + return loadPromise; +}; + +/** + * 加载企业微信的 js-sdk + * https://developer.work.weixin.qq.com/document/path/90514 + */ +export const loadWorkWxSdk = () => { + if (window.wx) { + return Promise.resolve(window.wx); + } + + if (!loadPromise) { + loadPromise = new Promise((resolve, reject) => { + (async () => { + await loadScript('//res.wx.qq.com/open/js/jweixin-1.2.0.js'); + + if (window.wx) { + resolve(window.wx); + } else { + reject(new Error('loadWorkWxSdk fail, window.wx is undefined')); + } + })(); + }); + } + + return loadPromise; +}; diff --git a/src/plugins/pinia/index.ts b/src/plugins/pinia/index.ts new file mode 100644 index 0000000..52a39a9 --- /dev/null +++ b/src/plugins/pinia/index.ts @@ -0,0 +1,5 @@ +import Vue from 'vue'; +import { PiniaVuePlugin, createPinia } from 'pinia'; + +Vue.use(PiniaVuePlugin); +export const pinia = createPinia(); diff --git a/src/plugins/pinia/util.ts b/src/plugins/pinia/util.ts new file mode 100644 index 0000000..d72f267 --- /dev/null +++ b/src/plugins/pinia/util.ts @@ -0,0 +1,23 @@ +import { + PiniaCustomStateProperties, + StoreDefinition, + StoreGetters, + StoreState, + storeToRefs, +} from 'pinia'; +import { ToRefs } from 'vue'; + +type StoreDefinitionToRefsRet> = ToRefs< + StoreState & StoreGetters & PiniaCustomStateProperties> +>; + +/** + * 将 store 定义转成 refs + * @param storeDefinition store 定义 + */ +export const storeDefinitionToRefs = >( + storeDefinition: SD, +): StoreDefinitionToRefsRet => { + const store = storeDefinition(); + return storeToRefs(store) as StoreDefinitionToRefsRet; +}; diff --git a/src/plugins/polyv-ui/admin-import.ts b/src/plugins/polyv-ui/admin-import.ts new file mode 100644 index 0000000..e8fd6fe --- /dev/null +++ b/src/plugins/polyv-ui/admin-import.ts @@ -0,0 +1,19 @@ +/* eslint-disable import/first */ +import '@polyv/polyv-ui/lib-admin/theme/iconfont.css'; +export { default as PlvAdminIcon } from '@polyv/polyv-ui/lib-admin/icon'; + +import '@polyv/polyv-ui/lib-admin/theme/image-preview.css'; +export { default as PlvImagePreview } from '@polyv/polyv-ui/lib-admin/image-preview'; + +import '@polyv/polyv-ui/lib-admin/theme/input-paste-image.css'; +export { default as PlvInputPasteImage } from '@polyv/polyv-ui/lib-admin/input-paste-image'; + +import '@polyv/polyv-ui/lib-admin/theme/collapse-transition.css'; +export { default as PlvCollapseTransition } from '@polyv/polyv-ui/lib-admin/collapse-transition'; + +import PlvPopperManager from '@polyv/polyv-ui/lib-admin/popper-manager'; +PlvPopperManager.zIndex = 3000; +export { PlvPopperManager }; + +import '@polyv/polyv-ui/lib-admin/theme/pagination.css'; +export { default as PlvPagination } from '@polyv/polyv-ui/lib-admin/pagination'; diff --git a/src/plugins/polyv-ui/area-utils.ts b/src/plugins/polyv-ui/area-utils.ts new file mode 100644 index 0000000..0e82cd2 --- /dev/null +++ b/src/plugins/polyv-ui/area-utils.ts @@ -0,0 +1,41 @@ +import { AreaData, AreaDataJson } from './types'; + +/** + * 通过value与级联数据获取选择中的数据 + * @param value 绑定值 + * @param data 地区数据 + */ +export function getSelectData(value: string[], data: AreaDataJson): AreaData[] { + let res: AreaData[] = []; + const [first, ...otherValue] = value; + if (typeof first === 'undefined') { + return res; + } + + const selected = data.find(item => item.code === first); + + if (selected) { + res = [selected]; + } + + if (selected && Array.isArray(selected.childrens)) { + res = [...res, ...getSelectData(otherValue, selected.childrens as AreaDataJson)]; + } + return res; +} + +export function getAreaSelectNames(value: string[], data: AreaDataJson): string[] { + const selectData = getSelectData(value, data); + return selectData.map(item => item.name); +} + +/** + * 判断是否选择完成 + * @param value 已选值数组 + */ +export function isSelectFinish(value: string[], data: AreaDataJson): boolean { + const selectData = getSelectData(value, data); + const lastData = selectData[selectData.length - 1] || {}; + + return !!(selectData.length && (!lastData.childrens || !lastData.childrens.length)); +} diff --git a/src/plugins/polyv-ui/cover-styles.scss b/src/plugins/polyv-ui/cover-styles.scss new file mode 100644 index 0000000..a3b0d13 --- /dev/null +++ b/src/plugins/polyv-ui/cover-styles.scss @@ -0,0 +1,6 @@ +.plv-area-picker__tab__item { + white-space: nowrap; +} +.plv-area-picker__tab__item + .plv-area-picker__tab__item { + margin-left: 20px !important; +} diff --git a/src/plugins/polyv-ui/mobile-import.ts b/src/plugins/polyv-ui/mobile-import.ts new file mode 100644 index 0000000..1e6e22f --- /dev/null +++ b/src/plugins/polyv-ui/mobile-import.ts @@ -0,0 +1,14 @@ +/* eslint-disable import/first */ +import '@polyv/polyv-ui/lib-front-mob/theme/like.css'; +export { default as PlvLike } from '@polyv/polyv-ui/lib-front-mob/like'; + +import '@polyv/polyv-ui/lib-front-mob/theme/carousel.css'; +import '@polyv/polyv-ui/lib-front-mob/theme/carousel-item.css'; +export { default as PlvCarousel } from '@polyv/polyv-ui/lib-front-mob/carousel'; +export { default as PlvCarouselItem } from '@polyv/polyv-ui/lib-front-mob/carousel-item'; + +import '@polyv/polyv-ui/lib-front-mob/theme/area-picker.css'; +export { default as PlvAreaPicker } from '@polyv/polyv-ui/lib-front-mob/area-picker'; + +import '@polyv/polyv-ui/lib-front-mob/theme/emotional-feedback.css'; +export { default as PlvEmotionalFeedback } from '@polyv/polyv-ui/lib-front-mob/emotional-feedback'; diff --git a/src/plugins/polyv-ui/pc-import.ts b/src/plugins/polyv-ui/pc-import.ts new file mode 100644 index 0000000..812847b --- /dev/null +++ b/src/plugins/polyv-ui/pc-import.ts @@ -0,0 +1,19 @@ +/* eslint-disable import/first */ +/** + * @file polyv-ui PC 端组件引入与导出入口 + */ +import './cover-styles.scss'; + +import '@polyv/polyv-ui/lib-front/theme/like.css'; +export { default as PlvLike } from '@polyv/polyv-ui/lib-front/like'; + +import '@polyv/polyv-ui/lib-front/theme/carousel.css'; +import '@polyv/polyv-ui/lib-front/theme/carousel-item.css'; +export { default as PlvCarousel } from '@polyv/polyv-ui/lib-front/carousel'; +export { default as PlvCarouselItem } from '@polyv/polyv-ui/lib-front/carousel-item'; + +import '@polyv/polyv-ui/lib-front/theme/area-picker.css'; +export { default as PlvAreaPicker } from '@polyv/polyv-ui/lib-front/area-picker'; + +import '@polyv/polyv-ui/lib-front/theme/emotional-feedback.css'; +export { default as PlvEmotionalFeedback } from '@polyv/polyv-ui/lib-front/emotional-feedback'; diff --git a/src/plugins/polyv-ui/types.ts b/src/plugins/polyv-ui/types.ts new file mode 100644 index 0000000..f02445b --- /dev/null +++ b/src/plugins/polyv-ui/types.ts @@ -0,0 +1,75 @@ +import type areaData from '@polyv/polyv-ui/resources/china-area.json'; + +export interface ImagePreviewOptions { + /** 模式显示的下标 */ + initialIndex?: number; +} + +export interface AreaData { + name: string; + code: string; + childrens?: AreaData[]; +} + +export type AreaDataJson = typeof areaData; + +export interface AreaPickerComponent { + /** 通过value与级联数据获取选择中的数据 */ + getSelectData: (value: string[], areaData: object) => AreaData[]; + /** 是否已选择完成 */ + isSelectFinish: (value: string[], areaData: object) => boolean; + /** 加载中国地区数据 */ + loadAreaDataUrl: () => Promise; +} + +/** + * 点赞动画选项 + */ +// eslint-disable-next-line @typescript-eslint/no-empty-interface +export interface LikeAnimationOptions {} + +/** + * 点赞组件实例 + */ +export interface PlvLikeInstance { + /** 插入动画 */ + pushAnimation: (options?: LikeAnimationOptions) => void; +} + +/** + * 情绪反馈组件实例 + */ +export interface PlvEmotionalFeedbackInstance { + /** 开始一个动画 */ + start: (type: number, arg: true) => void; +} + +/** + * 轮播组件实例 + */ +export interface PlvCarouselInstance { + handleWindowReszie?: () => void; +} + +export interface PlvInputContentText { + type: 'text'; + content: string; +} + +export interface PlvInputContentImage { + type: 'img'; + file: File; +} + +export type PlvInputContent = PlvInputContentText | PlvInputContentImage; + +export interface PlvInputImagePasteInstance { + /** 输入框聚焦 */ + focus: () => void; + /** 插入表情 */ + insertEmotion: (emotion: string) => void; + /** 获取内容列表 */ + getContentList: () => PlvInputContent[]; + /** 清除输入框内容 */ + clear: () => void; +} diff --git a/src/plugins/vconsole/index.ts b/src/plugins/vconsole/index.ts new file mode 100644 index 0000000..33a0e74 --- /dev/null +++ b/src/plugins/vconsole/index.ts @@ -0,0 +1,21 @@ +/** + * @file 加载 vconsole + */ +import VConsole from 'vconsole'; +import { paramGetter } from '@/hooks/core/use-query-params'; + +let vConsole: VConsole | undefined; + +// 当存在 url 参数 console=1,会自动加载 vConsole 脚本 +export async function createVConsole() { + if (!vConsole) { + vConsole = new VConsole(); + } + return vConsole; +} + +(() => { + if (paramGetter.console()) { + createVConsole(); + } +})(); diff --git a/src/skins/_common/basic-iar-style.scss b/src/skins/_common/basic-iar-style.scss new file mode 100644 index 0000000..b4f4880 --- /dev/null +++ b/src/skins/_common/basic-iar-style.scss @@ -0,0 +1,328 @@ +// 生成皮肤的互动功能样式(公用) +@mixin generate-skin-basic-iar-common-style($--skin-configs) { + // -------- 互动功能 -------- // + .pws-interactive-entrance-button { + color: map.get($--skin-configs, 'interactive-entrance-button:text-color') !important; + background-color: map.get($--skin-configs, 'interactive-entrance-button:bg-color') !important; + &:hover { + background-color: map.get($--skin-configs, 'interactive-entrance-button--hover:bg-color') !important; + } + } + .pws-interactive-entrance-arrow { + color: map.get($--skin-configs, 'interactive-entrance-arrow:text-color') !important; + } + + // --------- 按钮 --------- // + .pws-iar-primary-button { + background-color: map.get($--skin-configs, 'primary-button:bg-color') !important; + &.is-disabled { + opacity: 0.5; + } + } + + // --------- 挂件 --------- // + .pws-iar-pendant-text { + color: map.get($--skin-configs, 'iar-pendant:text-color') !important; + } + + // --------- 商品库 --------- // + .pws-iar-product-list-wrap { + background-color: map.get($--skin-configs, 'main-tab-body:bg-color') !important; + } + .pws-iar-product-list-content { + background-color: map.get($--skin-configs, 'iar-product-list-content:bg-color') !important; + &::-webkit-scrollbar-thumb { + background-color: map.get($--skin-configs, 'main-tab-body:scrollbar-color') !important; + } + } + .pws-iar-product-list-total { + color: map.get($--skin-configs, 'main-text-color') !important; + background-color: inherit !important; + } + .pws-iar-product-list-icon { + background-image: url(map.get($--skin-configs, 'iar-product-list-shop:icon-image')) !important; + } + .pws-iar-product-list-icon-recruitment { + background-image: url(map.get($--skin-configs, 'iar-product-list-recruitment:icon-image')) !important; + } + .pws-iar-product-list-total-highlight { + color: map.get($--skin-configs, 'main-highlight-text-color') !important; + } + .pws-iar-product-list-name { + color: map.get($--skin-configs, 'iar-product-list-good-name:text-color') !important; + } + .pws-iar-product-list-desc-label { + color: map.get($--skin-configs, 'main-text-color') !important; + opacity: 0.8; + } + .pws-iar-product-list-desc { + color: map.get($--skin-configs, 'describe-text-color') !important; + opacity: 1; + } + .pws-iar-product-list-label { + color: map.get($--skin-configs, 'iar-product-list-label:text-color') !important; + background-color: map.get($--skin-configs, 'iar-product-list-label:bg-color') !important; + } + .pws-iar-product-list-number { + background-color: map.get($--skin-configs, 'iar-product-list-name-number:bg-color') !important; + } + .pws-iar-product-list-empty-text { + color: map.get($--skin-configs, 'describe-text-color') !important; + } + .pws-iar-product-list-empty-img { + background-image: url(map.get($--skin-configs, 'iar-product-list-empty:icon-image')) !important; + } + .pws-iar-product-list-item { + border-bottom-color: map.get($--skin-configs, 'iar-product-list-item:border-color') !important; + } + + // ---------- 中奖记录 --------- // + .pws-iar-lottery-record-button { + background-color: map.get($--skin-configs, 'primary-color') !important; + } + .pws-iar-lottery-record-button-received { + color: $--color-white !important; + background-color: rgba(map.get($--skin-configs, 'primary-color'), 0.5) !important; + } + + // --------- 置顶公告 ---------- // + .pws-iar-bulletin-top-banner { + background-color: map.get($--skin-configs, 'iar-bulletin-top-banner:bg-color') !important; + } + .pws-iar-bulletin-top-banner-icon { + fill: map.get($--skin-configs, 'iar-bulletin-top-banner:text-color') !important; + } + .pws-iar-bulletin-top-banner-text, + .pws-iar-bulletin-top-banner-close { + &, + & * { + color: map.get($--skin-configs, 'iar-bulletin-top-banner:text-color') !important; + } + } + + // --------- 快速答题卡 --------- // + .pws-iar-quick-answer-option.is-active { + color: map.get($--skin-configs, 'primary-color') !important; + border-color: map.get($--skin-configs, 'primary-color') !important; + } + + // --------- 问答 --------- // + .pws-iar-qa-filter { + background-color: map.get($--skin-configs, 'iar-qa-filter:bg-color') !important; + border-bottom-color: map.get($--skin-configs, 'iar-qa-filter:border-color') !important; + } + .pws-iar-qa-filter-desc { + color: map.get($--skin-configs, 'iar-qa-filter-desc:text-color') !important; + } + .pws-iar-qa-new-msg-button { + color: map.get($--skin-configs, 'iar-qa-new-msg-button:text-color') !important; + background-color: map.get($--skin-configs, 'iar-qa-new-msg-button:bg-color') !important; + } + .pws-iar-qa-select { + color: map.get($--skin-configs, 'iar-qa-select:text-color') !important; + } + .pws-iar-qa-select-arrow { + border-color: map.get($--skin-configs, 'iar-qa-select:border-color') !important; + } +} + +// 生成皮肤的互动功能样式(PC 端) +@mixin generate-skin-basic-iar-pc-style($--skin-configs) { + @include generate-skin-basic-iar-common-style($--skin-configs); + + // --------- 中奖记录 ---------- // + .pws-iar-pc-lottery-record { + background: none !important; + } + .pws-interactive-msg__content { + color: map.get($--skin-configs, 'iar-pc-lottery-record-msg:text-color') !important; + } + + // --------- 图文直播 ---------- // + .pws-pc-tuwen-live-menu-item:hover, + .pws-pc-tuwen-live-menu-item.is-active { + color: map.get($--skin-configs, 'primary-color') !important; + } + .pws-pc-tuwen-live-menu-item.is-active { + background-color: rgba(map.get($--skin-configs, 'primary-color'), 0.15) !important; + } + .pws-iar-pc-tuwen-live-content-name { + color: map.get($--skin-configs, 'primary-color') !important; + } + + // ---------- 问答 ---------- // + .pws-iar-pc-qa-body { + background-color: map.get($--skin-configs, 'iar-qa-body:bg-color') !important; + } + .pws-iar-pc-qa-body-scroll { + &::-webkit-scrollbar-thumb { + background-color: map.get($--skin-configs, 'main-tab-body:scrollbar-color') !important; + } + } + .pws-iar-pc-qa-empty-text { + color: map.get($--skin-configs, 'describe-text-color') !important; + } + .pws-iar-pc-qa-select-option-popper { + background-color: map.get($--skin-configs, 'iar-pc-qa-select-option:bg-color') !important; + } + .pws-iar-pc-qa-select-option { + color: map.get($--skin-configs, 'iar-pc-qa-select-option:text-color') !important; + background-color: map.get($--skin-configs, 'iar-pc-qa-select-option:bg-color') !important; + border-color: map.get($--skin-configs, 'iar-pc-qa-select-option:border-color') !important; + &:hover { + background-color: map.get($--skin-configs, 'iar-pc-qa-select-option--hover:bg-color') !important; + } + &.is-active { + color: map.get($--skin-configs, 'iar-pc-qa-select-option--active:text-color') !important; + } + } + .pws-iar-pc-qa-ask { + background-color: map.get($--skin-configs, 'pc-msg-bottom-input-wrap:bg-color') !important; + } + .pws-iar-pc-qa-ask-input { + background-color: map.get($--skin-configs, 'pc-msg-input:bg-color') !important; + } + .pws-iar-pc-qa-ask-input-textarea { + color: map.get($--skin-configs, 'pc-msg-input:text-color') !important; + &::placeholder { + color: map.get($--skin-configs, 'pc-msg-input-placeholder:text-color') !important; + } + &::-webkit-scrollbar { + width: 4px; + } + &::-webkit-scrollbar-thumb { + background-color: map.get($--skin-configs, 'pc-msg-input:scrollbar-color') !important; + } + } + .pws-iar-pc-qa-ask-emotion-icon { + color: map.get($--skin-configs, 'iar-pc-qa-ask-emotion:text-color') !important; + filter: map.get($--skin-configs, 'iar-pc-qa-ask-emotion:background-filter') + } + .pws-iar-pc-qa-ask-emotion-popper { + background-color: map.get($--skin-configs, 'pc-emotion-panel:bg-color') !important; + box-shadow: none !important; + &::-webkit-scrollbar-thumb { + background-color: map.get($--skin-configs, 'panel-scrollbar-color') !important; + } + &::-webkit-scrollbar-track { + box-shadow: none; + } + } + .pws-iar-pc-qa-ask-send-button { + color: map.get($--skin-configs, 'pc-msg-send-button:text-color') !important; + background-color: map.get($--skin-configs, 'pc-msg-send-button:bg-color') !important; + &.is-disabled { + color: map.get($--skin-configs, 'pc-msg-send-button--disabled:text-color') !important; + background-color: map.get($--skin-configs, 'pc-msg-send-button--disabled:bg-color') !important; + } + } + .pws-iar-pc-qa-item { + color: map.get($--skin-configs, 'iar-qa-item-content:text-color') !important; + background-color: map.get($--skin-configs, 'iar-qa-item:bg-color') !important; + } + .pws-iar-pc-qa-item-more { + color: map.get($--skin-configs, 'iar-qa-item-content:text-color') !important; + background-color: map.get($--skin-configs, 'iar-qa-item:bg-color') !important; + .pws-iar-multiline-btn-shadow { + background: linear-gradient(270deg, map.get($--skin-configs, 'iar-qa-item:bg-color') 0%, rgba(225, 238, 252, 0) 100%) !important; + } + .pws-iar-multiline-btn-text { + color: map.get($--skin-configs, 'iar-qa-item-more:text-color') !important; + } + .pws-iar-multiline-btn-arrow { + border-color: map.get($--skin-configs, 'iar-qa-item-more:text-color') !important; + } + } + .pws-iar-pc-qa-item-data { + color: map.get($--skin-configs, 'iar-qa-item-info:text-color') !important; + } + .pws-iar-pc-qa-item-answer { + border-color: map.get($--skin-configs, 'iar-qa-item:border-color') !important; + } +} + +// 生成皮肤的互动功能样式(Mobile 端) +@mixin generate-skin-basic-iar-mobile-style($--skin-configs) { + @include generate-skin-basic-iar-common-style($--skin-configs); + + // --------- 问答 --------- // + .pws-iar-mobile-qa-body { + background-color: map.get($--skin-configs, 'iar-qa-body:bg-color') !important; + } + .pws-iar-mobile-qa-no-data { + color: map.get($--skin-configs, 'describe-text-color') !important; + background-color: map.get($--skin-configs, 'main-tab-body:bg-color') !important; + &::before { + background-image: url(map.get($--skin-configs, 'iar-mobile-qa-no-data:icon-image')) !important; + } + } + .pws-iar-mobile-qa-ask-entry { + background-image: url(map.get($--skin-configs, 'iar-mobile-qa-ask-entry:icon-image')) !important; + background-size: 100% 100%; + } + .pws-iar-mobile-qa-item { + color: map.get($--skin-configs, 'iar-qa-item-content:text-color') !important; + background-color: map.get($--skin-configs, 'iar-qa-item:bg-color') !important; + } + .pws-iar-mobile-qa-item-question, + .pws-iar-mobile-qa-item-answer { + background: none !important; + } + .pws-iar-mobile-qa-item-more { + color: map.get($--skin-configs, 'iar-qa-item-content:text-color') !important; + background-color: map.get($--skin-configs, 'iar-qa-item:bg-color') !important; + .pws-iar-multiline-btn-shadow { + background: linear-gradient(270deg, map.get($--skin-configs, 'iar-qa-item:bg-color') 0%, rgba(225, 238, 252, 0) 100%) !important; + } + .pws-iar-multiline-btn-text { + color: map.get($--skin-configs, 'iar-qa-item-more:text-color') !important; + } + .pws-iar-multiline-btn-arrow { + border-color: map.get($--skin-configs, 'iar-qa-item-more:text-color') !important; + } + } + .pws-iar-mobile-qa-item-data { + color: map.get($--skin-configs, 'iar-qa-item-info:text-color') !important; + } + .pws-iar-mobile-qa-item-answer-border { + border-color: map.get($--skin-configs, 'iar-qa-item:border-color') !important; + } + .pws-iar-mobile-no-more { + color: map.get($--skin-configs, 'iar-qa-no-more:text-color') !important; + } + .pws-iar-mobile-qa-ask { + background-color: map.get($--skin-configs, 'iar-mobile-qa-input-wrap:bg-color') !important; + } + .pws-iar-mobile-qa-ask-input-textarea { + color: map.get($--skin-configs, 'iar-mobile-qa-input:text-color') !important; + background-color: map.get($--skin-configs, 'iar-mobile-qa-input:bg-color') !important; + &::placeholder { + color: inherit !important; + opacity: 0.5; + } + } + .pws-iar-mobile-qa-ask-emotion-icon { + color: map.get($--skin-configs, 'iar-mobile-qa-ask-emotion:text-color') !important; + filter: map.get($--skin-configs, 'iar-mobile-qa-ask-emotion:background-filter') + } + .pws-iar-mobile-qa-ask-send-button { + color: map.get($--skin-configs, 'iar-mobile-qa-ask-send-button:text-color') !important; + } + + // ---------- 图文直播 --------- // + .pws-iar-mobile-tuwen-live-header { + color: map.get($--skin-configs, 'iar-mobile-tuwen-live-header:text-color') !important; + } + .pws-iar-mobile-tuwen-live-content-name { + color: map.get($--skin-configs, 'iar-mobile-tuwen-live-content-name:text-color') !important; + } + .pws-iar-mobile-tuwen-live-content-time { + color: map.get($--skin-configs, 'iar-mobile-tuwen-live-content-time:text-color') !important; + } + .pws-iar-mobile-tuwen-live-content-text { + color: map.get($--skin-configs, 'iar-mobile-tuwen-live-content:text-color') !important; + } + .pws-iar-mobile-tuwen-live-no-more { + color: map.get($--skin-configs, 'iar-mobile-tuwen-live-no-more:text-color') !important; + } +} diff --git a/src/skins/_common/basic-mobile-style.scss b/src/skins/_common/basic-mobile-style.scss new file mode 100644 index 0000000..2eaf4bb --- /dev/null +++ b/src/skins/_common/basic-mobile-style.scss @@ -0,0 +1,260 @@ +@import './basic-style.scss'; +@import './basic-iar-style.scss'; + +/** + * 生成皮肤的 basic mobile 端 样式 + * 规则:pws-mobile-* + */ +@mixin generate-skin-basic-mobile-style($--skin-configs) { + .pws-skin-#{map.get($--skin-configs, 'skin-type')} { + @include generate-skin-basic-style($--skin-configs); + @include generate-skin-basic-iar-mobile-style($--skin-configs); + + // 直播状态标签 + @each $status, $color in map.get($--skin-configs, 'mobile-live-status-tag:color') { + .pws-mobile-live-status-tag-#{$status} { + color: $color !important; + border-color: $color !important; + } + } + + // --------- 富文本 --------- // + .pws-mobile-rich-text-content { + color: map.get($--skin-configs, 'mobile-rich-text-content:text-color') !important; + } + + // --------- 引导页 --------- // + .pws-mobile-splash-page { + background-color: map.get($--skin-configs, 'mobile-splash:bg-color') !important; + } + .pws-mobile-splash-page-live-count-down-wrap { + background-color: map.get($--skin-configs, 'mobile-splash-live-count-down-wrap:bg-color') !important; + } + + // --------- 页脚 --------- // + .pws-mobile-page-footer { + color: map.get($--skin-configs, 'mobile-page-footer:text-color') !important; + } + + // --------- 直播预约 ---------- // + .pws-mobile-live-booking-button { + background-color: map.get($--skin-configs, 'mobile-live-booking-button:bg-color') !important; + } + + // --------- 倒计时 ---------- // + .pws-mobile-count-down-square-item { + background-color: map.get($--skin-configs, 'mobile-count-down-square-item:bg-color') !important; + .pws-count-down-square-item-count { + color: map.get($--skin-configs, 'mobile-count-down-square-item:text-color') !important; + border-color: map.get($--skin-configs, 'mobile-count-down-square-item:border-color') !important; + } + .pws-count-down-square-item-word { + color: map.get($--skin-configs, 'mobile-count-down-square-item-word:text-color') !important; + } + &::before, + &::after { + background-color: map.get($--skin-configs, 'mobile-count-down-square-item-dot:bg-color') !important; + } + } + + // --------- 基础信息 ---------- // + .pws-mobile-basic-info-channel-title { + color: map.get($--skin-configs, 'mobile-basic-info-channel-title:text-color') !important; + } + .pws-mobile-basic-info-start-time { + color: map.get($--skin-configs, 'mobile-basic-info-start-time:text-color') !important; + } + .pws-mobile-basic-info-page-view { + color: map.get($--skin-configs, 'mobile-basic-info-page-view:text-color') !important; + border-color: map.get($--skin-configs, 'main-border-color') !important; + } + .pws-mobile-basic-info-author { + border-color: map.get($--skin-configs, 'main-border-color') !important; + } + .pws-mobile-basic-info-publisher { + color: map.get($--skin-configs, 'mobile-basic-info-publisher:text-color') !important; + } + .pws-mobile-basic-info-like { + color: map.get($--skin-configs, 'mobile-basic-info-like:text-color') !important; + } + + // --------- 关注 --------- // + .pws-mobile-follow-button { + color: map.get($--skin-configs, 'mobile-follow-button:text-color') !important; + background-color: map.get($--skin-configs, 'mobile-follow-button:bg-color') !important; + } + + // --------- 消息输入框 --------- // + .pws-mobile-chat-msg-input { + background-color: map.get($--skin-configs, 'mobile-msg-input:bg-color') !important; + } + .pws-mobile-chat-msg-input-textarea { + color: map.get($--skin-configs, 'mobile-msg-input:text-color') !important; + &::placeholder { + color: map.get($--skin-configs, 'mobile-msg-input-placeholder:text-color') !important; + } + &::-webkit-scrollbar-thumb { + background-color: map.get($--skin-configs, 'mobile-msg-input:scrollbar-color') !important; + } + } + .pws-mobile-msg-input-suffix-icon { + color: map.get($--skin-configs, 'mobile-msg-input-suffix-icon:text-color') !important; + } + .pws-mobile-msg-send-button { + color: map.get($--skin-configs, 'mobile-msg-send-button:text-color') !important; + } + + // --------- 表情选择 --------- // + .pws-mobile-msg-input-wrap-emotion-show { + .pws-mobile-msg-input-wrap-main { + background-color: map.get($--skin-configs, 'mobile-emotion-panel:bg-color') !important; + } + .pws-mobile-msg-send-button { + color: map.get($--skin-configs, 'mobile-emotion-panel-send-button:bg-color') !important; + } + .pws-mobile-chat-msg-input { + background-color: map.get($--skin-configs, 'mobile-emotion-panel-msg-input:bg-color') !important; + } + .pws-mobile-chat-msg-input-textarea { + color: map.get($--skin-configs, 'mobile-emotion-panel-msg-input:text-color') !important; + &::placeholder { + color: map.get($--skin-configs, 'mobile-emotion-panel-msg-input-placeholder:text-color') !important; + } + } + .pws-mobile-msg-input-suffix-icon { + color: map.get($--skin-configs, 'mobile-emotion-panel-msg-input-suffix-icon:text-color') !important; + } + } + .pws-mobile-emotion-picker { + background-color: map.get($--skin-configs, 'mobile-emotion-panel:bg-color') !important; + } + .pws-mobile-emotion-picker-tabs { + background-color: map.get($--skin-configs, 'mobile-emotion-panel-type:bg-color') !important; + } + .pws-mobile-emotion-picker-tabs-item { + color: map.get($--skin-configs, 'mobile-emotion-panel-type:text-color') !important; + &.is-active { + color: map.get($--skin-configs, 'mobile-emotion-panel-type--active:text-color') !important; + } + } + .pws-mobile-emotion-picker-tabs-active { + background-color: map.get($--skin-configs, 'mobile-emotion-panel-type--active:bg-color') !important; + } + .pws-mobile-emotion-picker-del-button { + color: map.get($--skin-configs, 'mobile-emotion-panel-del-button:text-color') !important; + background-color: map.get($--skin-configs, 'mobile-emotion-panel-del-button:bg-color') !important; + } + + // --------- 菜单 --------- // + .pws-mobile-more-button { + background-color: map.get($--skin-configs, 'mobile-more-button:bg-color') !important; + &::after { + background-image: url(map.get($--skin-configs, 'mobile-more-button:icon-image')) !important; + } + } + .pws-mobile-more-panel { + background-color: map.get($--skin-configs, 'mobile-more-panel:bg-color') !important; + } + .pws-more-panel-text { + color: map.get($--skin-configs, 'mobile-more-panel:text-color') !important; + } + + // --------- 打赏 --------- // + .pws-mobile-donate-button { + background-color: map.get($--skin-configs, 'mobile-donate-button:bg-color') !important; + } + .pws-mobile-donate-panel { + background-color: map.get($--skin-configs, 'mobile-donate-panel:bg-color') !important; + } + .pws-mobile-panel-header-title { + color: map.get($--skin-configs, 'mobile-donate-panel-header-title:text-color') !important; + } + .pws-mobile-panel-header-close { + color: map.get($--skin-configs, 'mobile-donate-panel-header-close:text-color') !important; + } + .pws-mobile-donate-good-item.is-active { + background-color: map.get($--skin-configs, 'mobile-donate-good--active:bg-color') !important; + border-color: map.get($--skin-configs, 'mobile-donate-good--active:border-color') !important; + } + .pws-mobile-donate-good-name { + color: map.get($--skin-configs, 'mobile-donate-good-name:text-color') !important; + } + .pws-mobile-donate-good-price { + color: map.get($--skin-configs, 'mobile-donate-good-price:text-color') !important; + } + .pws-mobile-donate-carousel-indicator-item { + background-color: map.get($--skin-configs, 'mobile-donate-indicator:bg-color') !important; + &.is-active { + background-color: map.get($--skin-configs, 'mobile-donate-indicator--active:bg-color') !important; + } + } + .pws-mobile-donate-panel-option { + color: map.get($--skin-configs, 'mobile-donate-panel-option:text-color') !important; + background-color: map.get($--skin-configs, 'mobile-donate-panel-option:bg-color') !important; + &.is-active { + color: map.get($--skin-configs, 'mobile-donate-panel-option--active:text-color') !important; + background-color: map.get($--skin-configs, 'mobile-donate-panel-option--active:bg-color') !important; + border-color: map.get($--skin-configs, 'mobile-donate-panel-option--active:border-color') !important; + } + } + .pws-mobile-donate-send-button { + color: map.get($--skin-configs, 'mobile-donate-panel-send-button:text-color') !important; + background-color: map.get($--skin-configs, 'mobile-donate-panel-send-button:bg-color') !important; + } + .pws-mobile-donate-point-data { + color: map.get($--skin-configs, 'mobile-donate-panel-point:text-color') !important; + } + .pws-mobile-donate-point-data-count { + color: map.get($--skin-configs, 'mobile-donate-panel-point-count:text-color') !important; + } + .pws-mobile-donate-cash-custom-cash { + color: map.get($--skin-configs, 'mobile-donate-panel-custom-cash:text-color') !important; + } + .pws-mobile-donate-custom-cash-input { + .pws-mobile-form-input-main { + background-color: map.get($--skin-configs, 'mobile-donate-custom-cash-input:bg-color') !important; + border: none; + } + .pws-mobile-form-input-main-title { + color: map.get($--skin-configs, 'mobile-donate-custom-cash-input-title:text-color') !important; + } + .pws-mobile-form-input-main-input { + color: map.get($--skin-configs, 'mobile-donate-custom-cash-input:text-color') !important; + &::placeholder { + color: inherit; + opacity: 0.7; + } + } + } + .pws-mobile-donate-custom-cash-random { + color: map.get($--skin-configs, 'mobile-donate-custom-cash-random:text-color') !important; + } + + // -------- 回放列表 -------- // + .pws-mobile-playback-list-playing { + background-color: map.get($--skin-configs, 'pc-playback-list-playing:bg-color') !important; + } + .pws-mobile-playback-list-title, + .pws-mobile-playback-list-time { + color: map.get($--skin-configs, 'mobile-playback-list:text-color') !important; + } + .pws-mobile-playback-list-item.is-active { + .pws-mobile-playback-list-title, + .pws-mobile-playback-list-time { + color: map.get($--skin-configs, 'mobile-playback-list--active:text-color') !important; + } + } + + // -------- 多会场 -------- // + .pws-mobile-multi-meeting { + color: map.get($--skin-configs, 'mobile-multi-meeting:text-color'); + background-color: map.get($--skin-configs, 'mobile-multi-meeting:bg-color'); + } + .pws-mobile-multi-meeting-count { + color: rgba(map.get($--skin-configs, 'mobile-multi-meeting:text-color'), 0.6); + } + .pws-mobile-multi-meeting-pack-up { + color: rgba(map.get($--skin-configs, 'mobile-multi-meeting:text-color'), 0.6); + } + } +} diff --git a/src/skins/_common/basic-pc-style.scss b/src/skins/_common/basic-pc-style.scss new file mode 100644 index 0000000..512102a --- /dev/null +++ b/src/skins/_common/basic-pc-style.scss @@ -0,0 +1,216 @@ +@import './basic-style.scss'; +@import './basic-iar-style.scss'; + +@mixin generate-skin-basic-plv-ui-pc-style($--skin-configs) { + .pws-pc-image-paste-input-wrapper { + color: map.get($--skin-configs, 'pc-msg-input:text-color') !important; + background-color: map.get($--skin-configs, 'pc-msg-input:bg-color') !important; + .plv-input-paste-image { + color: inherit; + background: unset; + border: none; + &::-webkit-scrollbar-thumb { + background-color: map.get($--skin-configs, 'pc-msg-input:scrollbar-color') !important; + } + &::before { + color: map.get($--skin-configs, 'pc-msg-input-placeholder:text-color') !important; + } + } + } +} + +/** + * 生成皮肤的 basic pc 端 样式 + * 规则:pws-pc-* + */ +@mixin generate-skin-basic-pc-style($--skin-configs) { + .pws-skin-#{map.get($--skin-configs, 'skin-type')} { + @include generate-skin-basic-style($--skin-configs); + @include generate-skin-basic-iar-pc-style($--skin-configs); + @include generate-skin-basic-plv-ui-pc-style($--skin-configs); + + // 直播状态标签 + @each $status, $color in map.get($--skin-configs, 'pc-live-status-tag:color') { + .pws-pc-live-status-tag-#{$status} { + color: $color !important; + border-color: $color !important; + } + } + + // ---------- 观看页背景 ---------- // + .pws-pc-watch-bg { + @include skin-setup-bg(( + 'bg-type': map.get($--skin-configs, 'pc-watch-page:bg-type'), + 'bg-color': map.get($--skin-configs, 'pc-watch-page:bg-color'), + 'bg-image': map.get($--skin-configs, 'pc-watch-page:bg-image'), + )); + } + + .pws-pc-sub-pack-up-placeholder { + color: map.get($--skin-configs, 'pc-sub-pack-up:text-color'); + background-color: map.get($--skin-configs, 'main-tab-body:bg-color'); + } + + // --------- 倒计时 ---------- // + .pws-pc-count-down-square-item { + background-color: map.get($--skin-configs, 'pc-count-down-square-item:bg-color') !important; + .pws-count-down-square-item-count { + color: map.get($--skin-configs, 'pc-count-down-square-item:text-color') !important; + border-color: map.get($--skin-configs, 'pc-count-down-square-item:border-color') !important; + } + .pws-count-down-square-item-word { + color: map.get($--skin-configs, 'pc-count-down-square-item-word:text-color') !important; + } + &::before, + &::after { + background-color: map.get($--skin-configs, 'pc-count-down-square-item-dot:bg-color') !important; + } + } + + // 聊天消息底部输入框层 + .pws-pc-msg-bottom-input-wrap { + background-color: map.get($--skin-configs, 'pc-msg-bottom-input-wrap:bg-color') !important; + } + .pws-pc-msg-bottom-input-wrap-item { + color: map.get($--skin-configs, 'pc-msg-bottom-input-wrap-item:text-color') !important; + &:not(.is-disabled):hover { + color: map.get($--skin-configs, 'pc-msg-bottom-input-wrap-item--hover:text-color') !important; + } + } + .pws-pc-msg-input-limit { + color: map.get($--skin-configs, 'pc-msg-bottom-input-wrap-item:text-color') !important;; + } + + // ---------- 聊天消息输入框 ---------- // + .pws-pc-chat-msg-input { + background-color: map.get($--skin-configs, 'pc-msg-input:bg-color') !important; + } + .pws-pc-chat-msg-input-textarea { + color: map.get($--skin-configs, 'pc-msg-input:text-color') !important; + &::placeholder { + color: map.get($--skin-configs, 'pc-msg-input-placeholder:text-color') !important; + } + &::-webkit-scrollbar-thumb { + background-color: map.get($--skin-configs, 'pc-msg-input:scrollbar-color') !important; + } + } + + // ---------- 聊天消息发送按钮 ---------- // + .pws-pc-msg-send-button { + color: map.get($--skin-configs, 'pc-msg-send-button:text-color') !important; + background-color: map.get($--skin-configs, 'pc-msg-send-button:bg-color') !important; + &.is-disabled { + color: map.get($--skin-configs, 'pc-msg-send-button--disabled:text-color') !important; + background-color: map.get($--skin-configs, 'pc-msg-send-button--disabled:bg-color') !important; + } + } + + // ------------ 图片达到最大数量后的提示框 ----------- // + .pws-pc-msg-input-popper__max-image-tips { + color: map.get($--skin-configs, 'pws-pc-msg-input-popper__max-image-tips:text-color') !important; + background-color: map.get($--skin-configs, 'pws-pc-msg-input-popper__max-image-tips:bg-color') !important; + } + + // ---------- 设置昵称占位层 ---------- // + .pws-pc-set-nick-placeholder { + color: map.get($--skin-configs, 'pc-set-nick-placeholder:text-color') !important; + background-color: map.get($--skin-configs, 'pc-set-nick-placeholder:bg-color') !important; + } + .pws-pc-set-nick-placeholder-highlight { + color: map.get($--skin-configs, 'pc-set-nick-placeholder-highlight:text-color') !important; + } + + // ---------- 表情选择 ---------- // + .pws-pc-emotion-panel { + background-color: map.get($--skin-configs, 'pc-emotion-panel:bg-color') !important; + } + .pws-pc-emotion-panel-scrollbar { + &::-webkit-scrollbar-thumb { + background-color: map.get($--skin-configs, 'panel-scrollbar-color') !important; + } + } + .pws-pc-emotion-panel-type-tab { + background-color: map.get($--skin-configs, 'pc-emotion-panel-select:bg-color') !important; + + .is-active { + background-color: map.get($--skin-configs, 'pc-emotion-panel:bg-color') !important; + } + } + + // ---------- 更多面板 ---------- // + .pws-pc-more-panel { + background-color: map.get($--skin-configs, 'pc-more-panel:bg-color') !important; + + .pws-pc-checkbox.is-checked { + .pws-pc-checkbox-inner { + background-color: map.get($--skin-configs, 'pc-more-panel-checkbox--checked:bg-color') !important; + } + .pws-pc-checkbox-inner-icon { + color: map.get($--skin-configs, 'pc-more-panel-checkbox-icon--checked:text-color') !important; + } + } + } + .pws-pc-more-panel-item { + color: map.get($--skin-configs, 'pc-more-panel:text-color') !important; + &:hover { + color: map.get($--skin-configs, 'pc-more-panel-text--hover:text-color') !important; + } + } + + // ---------- 中奖记录 ---------- // + .pws-pc-lottery-record { + background-color: map.get($--skin-configs, 'pc-lottery-record-panel:bg-color') !important; + } + .pws-pc-lottery-record-scrollbar { + &::-webkit-scrollbar-thumb { + background-color: map.get($--skin-configs, 'panel-scrollbar-color') !important; + } + } + .pws-pc-lottery-record-close-icon { + color: map.get($--skin-configs, 'pc-lottery-record-close:text-color') !important; + } + + // ---------- 打赏 ---------- // + .pws-pc-donate-panel { + background-color: map.get($--skin-configs, 'pc-donate-panel:bg-color') !important; + } + .pws-pc-donate-panel-scrollbar { + &::-webkit-scrollbar-thumb { + background-color: map.get($--skin-configs, 'panel-scrollbar-color') !important; + } + } + .pws-pc-donate-good-item:hover { + background-color: map.get($--skin-configs, 'pc-donate-good--hover:bg-color') !important; + border-color: map.get($--skin-configs, 'pc-donate-good--hover:border-color'); + } + .pws-pc-donate-good-name { + color: map.get($--skin-configs, 'pc-donate-good-name:text-color') !important; + } + .pws-pc-donate-good-price { + color: map.get($--skin-configs, 'pc-donate-good-price:text-color') !important; + } + + // -------- 连麦 -------- // + .pws-pc-connect-mic-desc-icon { + color: map.get($--skin-configs, 'pc-connect-mic-desc-icon:text-color') !important; + } + .pws-pc-connect-mic-desc-text { + color: map.get($--skin-configs, 'pc-connect-mic-desc:text-color') !important; + } + .pws-pc-connect-mic-button { + color: map.get($--skin-configs, 'pc-connect-mic-button:text-color') !important; + background-color: map.get($--skin-configs, 'pc-connect-mic-button:bg-color') !important; + } + .pws-pc-connect-mic-button-highlight-text { + color: map.get($--skin-configs, 'pc-connect-mic-button-highlight:text-color') !important; + } + .pws-pc-connect-mic-applying-icon { + background-image: url(map.get($--skin-configs, 'pc-connect-mic-applying:icon-image')) !important; + } + + // -------- 回放列表 -------- // + .pws-pc-playback-list-playing { + background-color: map.get($--skin-configs, 'pc-playback-list-playing:bg-color') !important; + } + } +} diff --git a/src/skins/_common/basic-style.scss b/src/skins/_common/basic-style.scss new file mode 100644 index 0000000..cad9d08 --- /dev/null +++ b/src/skins/_common/basic-style.scss @@ -0,0 +1,248 @@ +@import './mixins.scss'; + +// 生成皮肤的 basic 样式 +@mixin generate-skin-basic-style($--skin-configs) { + // 在多皮肤下去除背景 + .pws-bg-none { + background: none !important; + } + + // --------- 按钮:主要 --------- // + .pws-normal-button-primary { + color: map.get($--skin-configs, 'primary-button:text-color'); + background: map.get($--skin-configs, 'primary-button:bg-color') !important; + + &:not(.is-mobile, .is-disabled) { + &:hover { + background: map.get($--skin-configs, 'primary-button--hover:bg-color') !important; + } + &:active { + background: map.get($--skin-configs, 'primary-button--active:bg-color') !important; + } + } + &.is-disabled { + color: map.get($--skin-configs, 'primary-button--disabled:text-color') !important; + background-color: map.get($--skin-configs, 'primary-button--disabled:bg-color') !important; + } + } + + // -------- 按钮:侧边栏 -------- // + .pws-normal-button-aside-menu { + color: map.get($--skin-configs, 'aside-menu-button:text-color') !important; + background-color: map.get($--skin-configs, 'aside-menu-button:bg-color') !important; + &:not(.is-mobile, .is-disabled) { + &:hover { + background-color: map.get($--skin-configs, 'aside-menu-button--hover:bg-color') !important; + } + &:active { + background-color: map.get($--skin-configs, 'aside-menu-button--active:bg-color') !important; + } + } + } + + // --------- 常规 tab --------- // + .pws-normal-tab-current-line { + background-color: map.get($--skin-configs, 'normal-tab-header-line--active:bg-color') !important; + } + + // --------- 主要 tab ---------- // + .pws-main-tab-header { + background-color: map.get($--skin-configs, 'main-tab-header:bg-color') !important; + } + .pws-main-tab-header-item { + color: map.get($--skin-configs, 'main-tab-header:text-color') !important; + &:hover { + color: map.get($--skin-configs, 'main-tab-header--hover:text-color') !important; + } + &.is-active { + color: map.get($--skin-configs, 'main-tab-header--active:text-color') !important; + } + } + .pws-main-tab-header-active-line { + background-color: map.get($--skin-configs, 'main-tab-header-line--active:bg-color') !important; + } + .pws-main-tab-header-shadow-left { + background: linear-gradient(90deg, map.get($--skin-configs, 'main-tab-header-shadow-start:color') 0, map.get($--skin-configs, 'main-tab-header-shadow-end:color') 100%) !important; + } + .pws-main-tab-header-shadow-right { + background: linear-gradient(90deg, map.get($--skin-configs, 'main-tab-header-shadow-end:color') 0, map.get($--skin-configs, 'main-tab-header-shadow-start:color') 100%) !important + } + .pws-main-tab-header-arrow-right, + .pws-main-tab-header-arrow-left { + color: map.get($--skin-configs, 'main-tab-header--active:text-color') !important; + background-color: map.get($--skin-configs, 'main-tab-header:bg-color') !important; + } + .pws-main-tab-header-item-reminder::after { + background-color: map.get($--skin-configs, 'main-tab-header-reminder:color'); + } + .pws-main-tab-body { + background-color: map.get($--skin-configs, 'main-tab-body:bg-color') !important; + } + .pws-main-tab-body-scrollbar { + &::-webkit-scrollbar-thumb { + background-color: map.get($--skin-configs, 'main-tab-body:scrollbar-color') !important; + } + } + + // --------- 聊天消息 ---------- // + // 聊天消息用户昵称 + .pws-chat-msg-user-nickname { + color: map.get($--skin-configs, 'chat-msg-user-nickname:text-color') !important; + } + .pws-msg-user-info-special .pws-chat-msg-user-nickname { + color: map.get($--skin-configs, 'chat-msg-user-special-nickname:text-color') !important; + } + + // 聊天消息用户头衔 + .pws-chat-msg-user-actor { + color: map.get($--skin-configs, 'chat-msg-user-actor:text-color') !important; + background-color: map.get($--skin-configs, 'chat-msg-user-actor:bg-color') !important; + } + + // 聊天消息用户设置昵称图标 + .pws-chat-msg-user-set-nick-icon { + color: map.get($--skin-configs, 'chat-msg-user-set-nick-icon:text-color') !important; + } + + // 聊天消息时间 + .pws-chat-msg-time { + color: map.get($--skin-configs, 'chat-msg-time:text-color') !important; + } + + .pws-chat-msg-list-tips { + color: map.get($--skin-configs, 'chat-msg-list-tips:text-color') !important; + } + + // 聊天消息气泡 + .pws-chat-msg-bubble { + color: map.get($--skin-configs, 'chat-msg-bubble:text-color') !important; + background-color: map.get($--skin-configs, 'chat-msg-bubble:bg-color') !important; + } + .pws-chat-msg-container-special .pws-chat-msg-bubble { + color: map.get($--skin-configs, 'chat-msg-bubble-special:text-color') !important; + background-color: map.get($--skin-configs, 'chat-msg-bubble-special:bg-color') !important; + } + + // 聊天消息回复内容 + .pws-chat-msg-quote-content { + color: map.get($--skin-configs, 'chat-msg-quote-content:text-color') !important; + border-bottom-color: map.get($--skin-configs, 'chat-msg-quote-content:border-color') !important; + } + .pws-chat-msg-container-special .pws-chat-msg-quote-content { + color: map.get($--skin-configs, 'chat-msg-special-quote-content:text-color') !important; + border-bottom-color: map.get($--skin-configs, 'chat-msg-special-quote-content:border-color') !important; + } + + // 聊天消息发送按钮 + .pws-chat-msg-quote-button { + color: map.get($--skin-configs, 'chat-msg-quote-button:text-color') !important; + } + + // 聊天引用回复消息 + .pws-chat-quote-msg { + color: map.get($--skin-configs, 'chat-quote-msg:text-color') !important; + background-color: map.get($--skin-configs, 'chat-quote-msg:bg-color') !important; + } + + // 聊天消息翻译按钮 + .pws-chat-msg-translate-button { + color: map.get($--skin-configs, 'chat-msg-translate-button:text-color') !important; + &:hover { + color: map.get($--skin-configs, 'chat-msg-translate-button--hover:text-color') !important; + } + } + + // 聊天消息翻译完成 + .pws-chat-msg-translate-finish { + color: map.get($--skin-configs, 'chat-msg-translate-finish:text-color') !important; + } + .pws-chat-msg-container-special .pws-chat-msg-translate-finish { + color: map.get($--skin-configs, 'chat-msg-translate-finish-special:text-color') !important; + } + + // 文本消息 + .pws-chat-speak-msg-control { + color: rgba(map.get($--skin-configs, 'chat-msg-bubble:text-color'), 0.8) !important; + } + .pws-chat-speak-msg-control-item::before { + border-color: rgba(map.get($--skin-configs, 'chat-msg-bubble:text-color'), 0.3) !important; + } + .pws-chat-msg-container-special .pws-chat-speak-msg-control { + color: rgba(map.get($--skin-configs, 'chat-msg-bubble-special:text-color'), 0.8) !important; + .pws-chat-speak-msg-control-item::before { + border-color: rgba(map.get($--skin-configs, 'chat-msg-bubble-special:text-color'), 0.3) !important; + } + } + + // 聊天室更多消息 + .pws-chat-msg-more-button { + color: map.get($--skin-configs, 'chat-msg-more-button:text-color'); + background-color: map.get($--skin-configs, 'chat-msg-more-button:bg-color'); + &:hover { + color: map.get($--skin-configs, 'chat-msg-more-button--hover:text-color'); + background-color: map.get($--skin-configs, 'chat-msg-more-button--hover:bg-color'); + } + } + + // 打赏消息 + .pws-chat-reward-msg { + color: map.get($--skin-configs, 'chat-reward-msg:text-color') !important; + } + + // 自定义消息 + .pws-chat-customer-msg { + color: map.get($--skin-configs, 'chat-customer-msg:text-color') !important; + } + + // 红包领取消息 + .pws-chat-redpaper-receive-msg { + color: map.get($--skin-configs, 'chat-redpaper-receive-msg:text-color') !important; + background-color: map.get($--skin-configs, 'chat-redpaper-receive-msg:bg-color') !important; + } + + // 系统消息 + .pws-chat-system-msg { + color: map.get($--skin-configs, 'chat-system-msg:text-color') !important; + } + + // -------- 章节 -------- // + .pws-chapter-item { + color: map.get($--skin-configs, 'chapter-item:text-color') !important; + border-bottom-color: map.get($--skin-configs, 'chapter-item:border-color') !important; + &.is-active { + color: map.get($--skin-configs, 'chapter-item--active:text-color') !important; + } + } + + // -------- 成员列表 ------- // + .pws-member-list-item { + color: map.get($--skin-configs, 'member-list-item:text-color') !important; + } + .pws-member-list-item-special { + color: map.get($--skin-configs, 'member-list-item-special:text-color') !important; + } + .pws-member-list-fail { + color: map.get($--skin-configs, 'describe-text-color') !important; + } + .pws-member-list-fail-highlight { + color: map.get($--skin-configs, 'main-highlight-text-color') !important; + } + + // -------- 点赞 -------- // + .pws-like-button { + background-image: url(map.get($--skin-configs, 'like-button:bg-image')) !important; + } + .pws-like-count-number { + color: map.get($--skin-configs, 'like-count-number:text-color') !important; + background-color: map.get($--skin-configs, 'like-count-number:bg-color') !important; + } + + // -------- 页面广告 -------- // + .pws-page-advert { + color: map.get($--skin-configs, 'page-advert:text-color'); + background-color: map.get($--skin-configs, 'page-advert:bg-color'); + } + .pws-page-advert-arrow { + color: map.get($--skin-configs, 'page-advert-arrow:text-color'); + } +} diff --git a/src/skins/_common/functions.scss b/src/skins/_common/functions.scss new file mode 100644 index 0000000..a973dc1 --- /dev/null +++ b/src/skins/_common/functions.scss @@ -0,0 +1,38 @@ +/** + * 生成皮肤配置 + */ +@function generate-skin-setup-configs() { + $--new-configs: (); + + // 皮肤基础配置 + $--new-configs: map.deep-merge($--new-configs, $--skin-basic-configs); + + // 皮肤组件配置 + $--new-configs: map.deep-merge($--new-configs, $--skin-component-configs); + + // 皮肤公用页面配置 + $--new-configs: map.deep-merge($--new-configs, $--skin-page-common-configs); + // 皮肤 PC 页面配置 + $--new-configs: map.deep-merge($--new-configs, $--skin-page-pc-configs); + // 皮肤 Mobile 页面配置 + $--new-configs: map.deep-merge($--new-configs, $--skin-page-mobile-configs); + + // 皮肤互动功能公用配置 + $--new-configs: map.deep-merge($--new-configs, $--skin-iar-common-configs); + // 皮肤互动功能 PC 配置 + $--new-configs: map.deep-merge($--new-configs, $--skin-iar-pc-configs); + // 皮肤互动功能 Mobile 配置 + $--new-configs: map.deep-merge($--new-configs, $--skin-iar-mobile-configs); + + @return $--new-configs; +} + +// @function merger-skin-configs($--config-1: (), $--config-2: (), $--config-3: ()) { +// $--new-configs: (); + +// $--new-configs: map.deep-merge($--new-configs, $--config-1); +// $--new-configs: map.deep-merge($--new-configs, $--config-2); +// $--new-configs: map.deep-merge($--new-configs, $--config-3); + +// @return $--new-configs; +// } diff --git a/src/skins/_common/mixins.scss b/src/skins/_common/mixins.scss new file mode 100644 index 0000000..715d537 --- /dev/null +++ b/src/skins/_common/mixins.scss @@ -0,0 +1,23 @@ +/** + * 皮肤背景混入 + */ +@mixin skin-setup-bg($options) { + // 背景类型 + $--bg-type: map.get($options, 'bg-type'); + // 背景图片 + $--bg-image: map.get($options, 'bg-image'); + // 背景颜色 + $--bg-color: map.get($options, 'bg-color'); + // 背景渐变色 + $--bg-gradient-color: map.get($options, 'bg-gradient-color'); + + @if ($--bg-type == 'image') { + background-image: url($--bg-image) !important; + } @else if ($--bg-type == 'color') { + background-color: $--bg-color !important; + } @else if ($--bg-type == 'line-gradient') { + background: $--bg-gradient-color; + } @else { + @error '缺少 bg-type'; + } +} diff --git a/src/skins/_debug/skin-select.vue b/src/skins/_debug/skin-select.vue new file mode 100644 index 0000000..0e3cef7 --- /dev/null +++ b/src/skins/_debug/skin-select.vue @@ -0,0 +1,64 @@ + + + + + + diff --git a/src/skins/black/_black-mobile.scss b/src/skins/black/_black-mobile.scss new file mode 100644 index 0000000..87c09f9 --- /dev/null +++ b/src/skins/black/_black-mobile.scss @@ -0,0 +1,4 @@ +@import '../_common/basic-mobile-style.scss'; +@import './config.scss'; + +@include generate-skin-basic-mobile-style($--skin-configs); diff --git a/src/skins/black/_black-pc.scss b/src/skins/black/_black-pc.scss new file mode 100644 index 0000000..8a13764 --- /dev/null +++ b/src/skins/black/_black-pc.scss @@ -0,0 +1,4 @@ +@import '../_common/basic-pc-style.scss'; +@import './config.scss'; + +@include generate-skin-basic-pc-style($--skin-configs); diff --git a/src/skins/black/config-common.scss b/src/skins/black/config-common.scss new file mode 100644 index 0000000..9d03180 --- /dev/null +++ b/src/skins/black/config-common.scss @@ -0,0 +1,244 @@ +// 主题名称 +$--skin-type: 'black'; + +// 主题色 +$--skin-primary-color: #3082FE; +// 次要主题色 +$--skin-sub-primary-color: #498CF1; + +// 皮肤基础配置 +$--skin-basic-configs: ( + // 主题名称 + 'skin-type': $--skin-type, + + // 主题色 + 'primary-color': $--skin-primary-color, + // 次要主题色 + 'sub-primary-color': $--skin-sub-primary-color, + // #458ffe + 'primary-light-1': get-opacity-color($--skin-primary-color, 1), + // #599bfe + 'primary-light-2': get-opacity-color($--skin-primary-color, 2), + // #6ea8fe + 'primary-light-3': get-opacity-color($--skin-primary-color, 3), + // #83b4fe + 'primary-light-4': get-opacity-color($--skin-primary-color, 4), + // #98c1ff + 'primary-light-5': get-opacity-color($--skin-primary-color, 5), + // #accdff + 'primary-light-6': get-opacity-color($--skin-primary-color, 6), + // #c1daff + 'primary-light-7': get-opacity-color($--skin-primary-color, 7), + // #d6e6ff + 'primary-light-8': get-opacity-color($--skin-primary-color, 8), + // #eaf3ff + 'primary-light-9': get-opacity-color($--skin-primary-color, 9), + + // ---------- 背景色 ---------- // + // 主要背景色(以侧边栏主体背景色定义) + 'main-bg-color': #202127, + // 次要背景色(以侧边栏头部背景色定义) + 'sub-bg-color': #3e3e4e, + // 面板背景色 + 'panel-bg-color': #2b2c35, + // 禁用背景色 + 'disabled-bg-color': #e9ecee, + + // ---------- 字体色 ---------- // + // 正文字体色 + 'main-text-color': #adadc0, + // 正文高亮字体色 + 'main-highlight-text-color': #5394f6, + // 描述字体色 + 'describe-text-color': #adadc0, + // 禁用字体色 + 'disabled-text-color': #9e9e9e, + // 面板字体色 + 'panel-text-color': $--color-white, + // 面板高亮字体色 + 'panel-highlight-text-color': $--skin-sub-primary-color, + + // ---------- 边框色 ---------- // + 'main-border-color': rgba($--color-white, 0.1), + + // ---------- 滚动条 ---------- // + 'panel-scrollbar-color': rgba($--color-white, 0.1), +); + +// 皮肤基础组件配置 +$--skin-component-configs: ( + // 主要 tab 头部背景色 + 'main-tab-header:bg-color': map.get($--skin-basic-configs, 'sub-bg-color'), + // 主要 tab 头部字体色 + 'main-tab-header:text-color': #adadc0, + // 主要 tab 头部 hover 字体色 + 'main-tab-header--hover:text-color': $--color-white, + // 主要 tab 头部激活字体色 + 'main-tab-header--active:text-color': $--color-white, + // 主要 tab 头部激活选项线条背景色 + 'main-tab-header-line--active:bg-color': $--color-white, + // 主要 tab 头部阴影开始颜色 + 'main-tab-header-shadow-start:color': map.get($--skin-basic-configs, 'sub-bg-color'), + // 主要 tab 头部阴影结束颜色 + 'main-tab-header-shadow-end:color': rgba(62, 62, 78, 0), + // 主要 tab 头部红点颜色 + 'main-tab-header-reminder:color': #f24453, + // 主要 tab 主体背景色 + 'main-tab-body:bg-color': map.get($--skin-basic-configs, 'main-bg-color'), + // 主要 tab 主体滚动栏颜色 + 'main-tab-body:scrollbar-color': #46464F, + + // normal tab 激活项线条背景色 + 'normal-tab-header-line--active:bg-color': map.get($--skin-basic-configs, 'primary-color'), + + // 主题按钮背景色 + 'primary-button:bg-color': map.get($--skin-basic-configs, 'primary-color'), + // 主题按钮字体色 + 'primary-button:text-color': $--color-white, + // 主题按钮 hover 背景色 + 'primary-button--hover:bg-color': map.get($--skin-basic-configs, 'primary-light-2'), + // 主题按钮 hover 字体色 + 'primary-button--hover:text-color': $--color-white, + // 主题按钮 active 背景色 + 'primary-button--active:bg-color': map.get($--skin-basic-configs, 'primary-light-1'), + // 主题按钮 active 字体色 + 'primary-button--active:text-color': $--color-white, + // 主题按钮 disabled 背景色 + 'primary-button--disabled:bg-color': map.get($--skin-basic-configs, 'disabled-bg-color'), + // 主题按钮 disabled 字体色 + 'primary-button--disabled:text-color': map.get($--skin-basic-configs, 'disabled-text-color'), + + // 侧边栏按钮背景色 + 'aside-menu-button:bg-color': rgba($--color-white, 0.1), + // 侧边栏按钮字体则 + 'aside-menu-button:text-color': $--color-white, + // 侧边栏按钮 hover 背景色 + 'aside-menu-button--hover:bg-color': rgba($--color-white, 0.2), + // 侧边栏按钮 active 背景色 + 'aside-menu-button--active:bg-color': rgba($--color-white, 0.15), + + // pc 端直播状态标签颜色 + 'pc-live-status-tag:color': ( + 'unStart' #ADADC0, + 'waiting' #78A7ED, + 'live' #F06E6E, + 'end' rgba(#ffffff, .6), + 'playback' #78A7ED, + 'stop' #F06E6E, + ), + // mobile 端直播状态标签颜色 + 'mobile-live-status-tag:color': ( + 'unStart' #ADADC0, + 'waiting' #78A7ED, + 'live' #F06E6E, + 'end' rgba(#ffffff, .6), + 'playback' #78A7ED, + 'stop' #F06E6E, + ), +); + +// 皮肤公用页面配置 +$--skin-page-common-configs: ( + // 聊天消息用户昵称字体色 + 'chat-msg-user-nickname:text-color': #adadc0, + // 聊天消息特殊身份昵称字体色 + 'chat-msg-user-special-nickname:text-color': map.get($--skin-basic-configs, 'main-highlight-text-color'), + // 聊天消息用户头衔背景色 + 'chat-msg-user-actor:bg-color': #5394f6, + // 聊天消息用户头衔字体色 + 'chat-msg-user-actor:text-color': $--color-white, + // 聊天消息用户设置昵称图标字体色 + 'chat-msg-user-set-nick-icon:text-color': #78a7ed, + // 聊天消息时间字体色 + 'chat-msg-time:text-color': map.get($--skin-basic-configs, 'describe-text-color'), + // 聊天提示文案字体色 + 'chat-msg-list-tips:text-color': map.get($--skin-basic-configs, 'describe-text-color'), + + // 聊天消息气泡背景色 + 'chat-msg-bubble:bg-color': #2b2c35, + // 聊天消息气泡字体色 + 'chat-msg-bubble:text-color': #e4e4e4, + // 聊天消息特殊身份气泡背景色 + 'chat-msg-bubble-special:bg-color': #5394f6, + // 聊天消息特殊身份气泡字体色 + 'chat-msg-bubble-special:text-color': $--color-white, + + // 聊天消息回复内容字体色 + 'chat-msg-quote-content:text-color': rgba($--color-white, 0.8), + // 聊天消息回复内容边框色 + 'chat-msg-quote-content:border-color': rgba($--color-white, 0.1), + // 聊天消息特殊身份回复内容字体色 + 'chat-msg-special-quote-content:text-color': rgba($--color-white, 0.8), + // 聊天消息特殊身份回复内容字体色 + 'chat-msg-special-quote-content:border-color': rgba($--color-white, 0.2), + // 聊天消息回复按钮字体色 + 'chat-msg-quote-button:text-color': $--color-white, + // 聊天回复引用背景色 + 'chat-quote-msg:bg-color': #36373d, + // 聊天回复引用字体色 + 'chat-quote-msg:text-color': #adadc0, + + // 聊天消息翻译按钮字体色 + 'chat-msg-translate-button:text-color': rgba($--color-white, 0.6), + // 聊天消息翻译按钮 hover 字体色 + 'chat-msg-translate-button--hover:text-color': map.get($--skin-basic-configs, 'main-highlight-text-color'), + // 聊天消息翻译成功提示字体色 + 'chat-msg-translate-finish:text-color': rgba(#adadc0, 0.6), + // 聊天消息特殊身份翻译成功提示字体色 + 'chat-msg-translate-finish-special:text-color': rgba($--color-white, 0.6), + + // 聊天室更多消息按钮背景色 + 'chat-msg-more-button:bg-color': map.get($--skin-basic-configs, 'primary-color'), + // 聊天室更多消息按钮字体色 + 'chat-msg-more-button:text-color': #ffffff, + // 聊天室更多消息按钮 hover 背景色 + 'chat-msg-more-button--hover:bg-color': #4F95FE, + // 聊天室更多消息按钮 hover 字体色 + 'chat-msg-more-button--hover:text-color': #ffffff, + + // 打赏消息字体色 + 'chat-reward-msg:text-color': map.get($--skin-basic-configs, 'describe-text-color'), + // 自定义消息字体色 + 'chat-customer-msg:text-color': map.get($--skin-basic-configs, 'describe-text-color'), + // 红包领取消息背景色 + 'chat-redpaper-receive-msg:bg-color': rgba($--color-black, 0.3), + // 红包领取消息字体色 + 'chat-redpaper-receive-msg:text-color': map.get($--skin-basic-configs, 'main-text-color'), + // 系统消息字体色 + 'chat-system-msg:text-color': map.get($--skin-basic-configs, 'describe-text-color'), + + // 章节字体色 + 'chapter-item:text-color': map.get($--skin-basic-configs, 'main-text-color'), + // 章节高亮字体色 + 'chapter-item--active:text-color': map.get($--skin-basic-configs, 'main-highlight-text-color'), + // 章节边框色 + 'chapter-item:border-color': rgba($--color-white, 0.1), + + // 成员列表字体色 + 'member-list-item:text-color': map.get($--skin-basic-configs, 'main-text-color'), + // 成员列表特殊身份字体色 + 'member-list-item-special:text-color': map.get($--skin-basic-configs, 'main-highlight-text-color'), + + // 点赞按钮背景图 + 'like-button:bg-image': './imgs/pws-zan.png', + // 点赞数量字体色 + 'like-count-number:text-color': map.get($--skin-basic-configs, 'main-text-color'), + // 点赞数量背景色 + 'like-count-number:bg-color': rgba(map.get($--skin-basic-configs, 'main-bg-color'), 0.8), + + // 页面广告背景色 + 'page-advert:bg-color': map.get($--skin-basic-configs, 'main-bg-color'), + // 页面广告字体色 + 'page-advert:text-color': $--color-white, + // 页面广告箭头字体色 + 'page-advert-arrow:text-color': #d6d4d4, + + // 互动二次入口按钮背景色 + 'interactive-entrance-button:bg-color': rgba($--color-white, 0.1), + // 互动二次入口按钮 hover 背景色 + 'interactive-entrance-button--hover:bg-color': rgba($--color-white, 0.2), + // 互动二次入口按钮字体色 + 'interactive-entrance-button:text-color': $--color-white, + // 互动二次入口箭头字体色 + 'interactive-entrance-arrow:text-color': #e4e4e4, +); diff --git a/src/skins/black/config-iar.scss b/src/skins/black/config-iar.scss new file mode 100644 index 0000000..f30c8ed --- /dev/null +++ b/src/skins/black/config-iar.scss @@ -0,0 +1,111 @@ +@import './config-common.scss'; +@import './config-pc.scss'; + +// 皮肤互动功能公用配置 +$--skin-iar-common-configs: ( + // 挂件字体色 + 'iar-pendant:text-color': map.get($--skin-basic-configs, 'main-text-color'), + + // 商品库内容背景色 + 'iar-product-list-content:bg-color': #1a1a1f, + // 商品库图标图片 + 'iar-product-list-shop:icon-image': './imgs/pws-product-icon.png', + // 商品库图标图片(职位) + 'iar-product-list-recruitment:icon-image': './imgs/pws-product-icon-recruitment.png', + // 商品库标签背景色 + 'iar-product-list-label:bg-color': rgba($--color-white, 0.1), + // 商品库标签字体色 + 'iar-product-list-label:text-color': $--color-white, + // 商品库商品名称序号背景色 + 'iar-product-list-name-number:bg-color': rgba($--color-white, 0.35), + // 商品库空状态图标图片 + 'iar-product-list-empty:icon-image': './imgs/pws-product-shop-car.png', + // 商品库商品下边框颜色 + 'iar-product-list-item:border-color': rgba($--color-white, 0.1), + // 商品库商品名称字体色 + 'iar-product-list-good-name:text-color': $--color-white, + + // 置顶公告背景色 + 'iar-bulletin-top-banner:bg-color': #366bee, + // 置顶公告字体色 + 'iar-bulletin-top-banner:text-color': $--color-white, + + // 问答背景色 + 'iar-qa-body:bg-color': #17181c, + // 问答过滤层背景色 + 'iar-qa-filter:bg-color': map.get($--skin-component-configs, 'main-tab-body:bg-color'), + // 问答过滤层边框色 + 'iar-qa-filter:border-color': #17181c, + // 问答过滤层文案字体色 + 'iar-qa-filter-desc:text-color': rgba(map.get($--skin-basic-configs, 'main-text-color'), 0.6), + // 问答选择字体色 + 'iar-qa-select:text-color': map.get($--skin-basic-configs, 'main-text-color'), + // 问答选择箭头边框色 + 'iar-qa-select:border-color': rgba(map.get($--skin-basic-configs, 'main-text-color'), 0.8), + // 问答节点背景色 + 'iar-qa-item:bg-color': #202127, + // 问答节点内容字体色 + 'iar-qa-item-content:text-color': map.get($--skin-basic-configs, 'main-text-color'), + // 问答节点信息字体色 + 'iar-qa-item-info:text-color': map.get($--skin-basic-configs, 'describe-text-color'), + // 问答节点更多字体色 + 'iar-qa-item-more:text-color': map.get($--skin-basic-configs, 'main-highlight-text-color'), + // 问答节点边框色 + 'iar-qa-item:border-color': #17181c, + // 问答新消息按钮背景色 + 'iar-qa-new-msg-button:bg-color': rgba(map.get($--skin-basic-configs, 'primary-color'), 0.85), + // 问答新消息按钮字体色 + 'iar-qa-new-msg-button:text-color': $--color-white, + // 问答没有更多文案字体色 + 'iar-qa-no-more:text-color': map.get($--skin-basic-configs, 'describe-text-color'), +); + +// 皮肤互动功能 PC 配置 +$--skin-iar-pc-configs: ( + // 问答选择选项背景色 + 'iar-pc-qa-select-option:bg-color': map.get($--skin-component-configs, 'main-tab-header:bg-color'), + // 问答选择选项 hover 背景色 + 'iar-pc-qa-select-option--hover:bg-color': rgba($--color-white, 0.1), + // 问答选择选项字体色 + 'iar-pc-qa-select-option:text-color': rgba(map.get($--skin-component-configs, 'main-tab-header:text-color'), 0.8), + // 问答选择选项激活字体色 + 'iar-pc-qa-select-option--active:text-color': map.get($--skin-component-configs, 'main-tab-header:text-color'), + // 问答选择选项边框色 + 'iar-pc-qa-select-option:border-color': rgba($--color-white, 0.1), + // 问答表情选择图标字体色 + 'iar-pc-qa-ask-emotion:text-color': $--color-white, + 'iar-pc-qa-ask-emotion:background-filter': none, + + // 中奖记录弹层文字颜色 + 'iar-pc-lottery-record-msg:text-color': #e4e4e4, +); + +// 皮肤互动功能 Mobile 配置 +$--skin-iar-mobile-configs: ( + // 问答空数据的图标图片 + 'iar-mobile-qa-no-data:icon-image': './imgs/pws-qa-no-data-icon.png', + // 问答消息发送入口图片 + 'iar-mobile-qa-ask-entry:icon-image': './imgs/pws-qa-entry.png', + // 问答输入框外层背景色 + 'iar-mobile-qa-input-wrap:bg-color': #202127, + // 问答输入框背景色 + 'iar-mobile-qa-input:bg-color': #17181c, + // 问答输入框字体色 + 'iar-mobile-qa-input:text-color': map.get($--skin-basic-configs, 'main-text-color'), + // 问答表情选择图标字体色 + 'iar-mobile-qa-ask-emotion:text-color': map.get($--skin-basic-configs, 'main-text-color'), + 'iar-pc-qa-ask-emotion:background-filter': none, + // 问答发送按钮字体色 + 'iar-mobile-qa-ask-send-button:text-color': map.get($--skin-basic-configs, 'main-text-color'), + + // 图文直播头部字体色 + 'iar-mobile-tuwen-live-header:text-color': rgba(map.get($--skin-basic-configs, 'main-text-color'), 0.8), + // 图文直播名称字体色 + 'iar-mobile-tuwen-live-content-name:text-color': map.get($--skin-basic-configs, 'main-highlight-text-color'), + // 图文直播时间字体色 + 'iar-mobile-tuwen-live-content-time:text-color': map.get($--skin-basic-configs, 'describe-text-color'), + // 图文直播内容字体色 + 'iar-mobile-tuwen-live-content:text-color': map.get($--skin-basic-configs, 'main-text-color'), + // 图文直播暂无更多字体色 + 'iar-mobile-tuwen-live-no-more:text-color': map.get($--skin-basic-configs, 'describe-text-color'), +); diff --git a/src/skins/black/config-mobile.scss b/src/skins/black/config-mobile.scss new file mode 100644 index 0000000..af8d53a --- /dev/null +++ b/src/skins/black/config-mobile.scss @@ -0,0 +1,154 @@ +@import './config-common.scss'; + +// 皮肤 Mobile 端页面配置 +$--skin-page-mobile-configs: ( + // 富文本字体色 + 'mobile-rich-text-content:text-color': map.get($--skin-basic-configs, 'main-text-color'), + + // 引导页背景色 + 'mobile-splash:bg-color': map.get($--skin-basic-configs, 'main-bg-color'), + // 引导页倒计时外层背景色 + 'mobile-splash-live-count-down-wrap:bg-color': map.get($--skin-basic-configs, 'sub-bg-color'), + + // 页脚字体色 + 'mobile-page-footer:text-color': rgba(map.get($--skin-basic-configs, 'main-text-color'), 0.6), + + // 基础信息频道标题字体色 + 'mobile-basic-info-channel-title:text-color': map.get($--skin-basic-configs, 'main-text-color'), + // 基础信息开始时间字体色 + 'mobile-basic-info-start-time:text-color': map.get($--skin-basic-configs, 'main-text-color'), + // 基础信息页面浏览次数字体色 + 'mobile-basic-info-page-view:text-color': map.get($--skin-basic-configs, 'main-text-color'), + // 基础信息主持人字体色 + 'mobile-basic-info-publisher:text-color': map.get($--skin-basic-configs, 'main-text-color'), + // 基础信息点赞数字体色 + 'mobile-basic-info-like:text-color': map.get($--skin-basic-configs, 'main-text-color'), + + // 倒计时方块背景色 + 'mobile-count-down-square-item:bg-color': #141518, + // 倒计时方块远点背景色 + 'mobile-count-down-square-item-dot:bg-color': #141518, + // 倒计时方块数字字体色 + 'mobile-count-down-square-item:text-color': $--color-white, + // 倒计时方块文案字体色 + 'mobile-count-down-square-item-word:text-color': map.get($--skin-basic-configs, 'main-text-color'), + // 倒计时方块边框色 + 'mobile-count-down-square-item:border-color': $--color-black, + + // 直播预约按钮背景色 + 'mobile-live-booking-button:bg-color': map.get($--skin-basic-configs, 'primary-color'), + + // 关注按钮背景色 + 'mobile-follow-button:bg-color': map.get($--skin-basic-configs, 'sub-primary-color'), + // 关注按钮字体颜色 + 'mobile-follow-button:text-color': $--color-white, + + // 聊天消息输入框背景色 + 'mobile-msg-input:bg-color': rgba($--color-white, 0.1), + // 聊天消息输入框字体色 + 'mobile-msg-input:text-color': $--color-white, + // 聊天消息输入框占位符字体色 + 'mobile-msg-input-placeholder:text-color': rgba($--color-white, 0.6), + // 聊天消息输入框滚动条颜色 + 'mobile-msg-input:scrollbar-color': rgba($--color-white, 0.1), + // 聊天消息输入框图标字体色 + 'mobile-msg-input-suffix-icon:text-color': map.get($--skin-basic-configs, 'main-text-color'), + + // 聊天消息发送按钮字体颜色 + 'mobile-msg-send-button:text-color': map.get($--skin-basic-configs, 'main-highlight-text-color'), + + // 表情选择面板背景色 + 'mobile-emotion-panel:bg-color': #2b2c35, + // 表情选择面板下的发送按钮字体色 + 'mobile-emotion-panel-send-button:bg-color': map.get($--skin-basic-configs, 'main-highlight-text-color'), + // 表情选择面板下的输入框背景色 + 'mobile-emotion-panel-msg-input:bg-color': rgba($--color-white, 0.1), + // 表情选择面板下的输入框字体色 + 'mobile-emotion-panel-msg-input:text-color': $--color-white, + // 表情选择面板下的输入框占位符字体色 + 'mobile-emotion-panel-msg-input-placeholder:text-color': rgba($--color-white, 0.6), + // 表情选择面板下的输入框图标字体色 + 'mobile-emotion-panel-msg-input-suffix-icon:text-color': map.get($--skin-basic-configs, 'main-text-color'), + // 表情选择类型选择背景色 + 'mobile-emotion-panel-type:bg-color': rgba($--color-white, 0.1), + // 表情选择类型选择选中背景色 + 'mobile-emotion-panel-type--active:bg-color': rgba($--color-white, 0.2), + // 表情选择类型选择字体色 + 'mobile-emotion-panel-type:text-color': rgba($--color-white, 0.5), + // 表情选择类型选择选中字体色 + 'mobile-emotion-panel-type--active:text-color': $--color-white, + // 表情选择删除按钮背景色 + 'mobile-emotion-panel-del-button:bg-color': rgba($--color-white, 0.1), + // 表情选择删除按钮字体色 + 'mobile-emotion-panel-del-button:text-color': $--color-white, + + // 更多按钮背景色 + 'mobile-more-button:bg-color': rgba($--color-white, 0.1), + // 更多按钮图标图片 + 'mobile-more-button:icon-image': './imgs/pws-icon-more.png', + // 更多面板背景色 + 'mobile-more-panel:bg-color': #2b2c35, + // 更多面板字体色 + 'mobile-more-panel:text-color': $--color-white, + + // 打赏按钮背景色 + 'mobile-donate-button:bg-color': rgba($--color-white, 0.1), + // 打赏面板背景色 + 'mobile-donate-panel:bg-color': #2b2c35, + // 打赏面板标题字体色 + 'mobile-donate-panel-header-title:text-color': $--color-white, + // 打赏面板返回字体色 + 'mobile-donate-panel-header-close:text-color': $--color-white, + // 打赏礼物选中背景色 + 'mobile-donate-good--active:bg-color': #3e3e4e, + // 打赏礼物选中边框色 + 'mobile-donate-good--active:border-color': #adadc0, + // 打赏礼物道具名称字体色 + 'mobile-donate-good-name:text-color': $--color-white, + // 打赏礼物道具价格字体色 + 'mobile-donate-good-price:text-color': rgba($--color-white, 0.5), + // 打赏切换指示点颜色 + 'mobile-donate-indicator:bg-color': rgba($--color-white, 0.2), + // 打赏切换指示点选中颜色 + 'mobile-donate-indicator--active:bg-color': $--color-white, + // 打赏面板选项背景色 + 'mobile-donate-panel-option:bg-color': #1a1b1f, + // 打赏面板选项字体色 + 'mobile-donate-panel-option:text-color': #adadc0, + // 打赏面板选项选中背景色 + 'mobile-donate-panel-option--active:bg-color': #3e3e4e, + // 打赏面板选项选中字体色 + 'mobile-donate-panel-option--active:text-color': $--color-white, + // 打赏面板选项选中边框色 + 'mobile-donate-panel-option--active:border-color': #adadc0, + // 打赏面板发送按钮背景色 + 'mobile-donate-panel-send-button:bg-color': #ff5353, + // 打赏面板发送按钮字体色 + 'mobile-donate-panel-send-button:text-color': $--color-white, + // 打赏面板剩余积分文本字体色 + 'mobile-donate-panel-point:text-color': #e4e4e4, + // 打赏面板剩余积分数值字体色 + 'mobile-donate-panel-point-count:text-color': #ff5353, + // 打赏自定义金额字体色 + 'mobile-donate-panel-custom-cash:text-color': #adadc0, + // 打赏自定义金额输入框背景色 + 'mobile-donate-custom-cash-input:bg-color': rgba($--color-white, 0.1), + // 打赏自定义金额输入框标题字体色 + 'mobile-donate-custom-cash-input-title:text-color': rgba($--color-white, 0.6), + // 打赏自定义金额输入框字体色 + 'mobile-donate-custom-cash-input:text-color': $--color-white, + // 打赏自定义金额随机按钮字体色 + 'mobile-donate-custom-cash-random:text-color': map.get($--skin-basic-configs, 'main-highlight-text-color'), + + // 回放列表播放中按钮背景色 + 'mobile-playback-list-playing:bg-color': map.get($--skin-basic-configs, 'primary-color'), + // 回放列表字体色 + 'mobile-playback-list:text-color': rgba($--color-white, 0.7), + // 回放列表选中时的字体色 + 'mobile-playback-list--active:text-color': map.get($--skin-basic-configs, 'main-highlight-text-color'), + + // 多会场背景色 + 'mobile-multi-meeting:bg-color': #191a1f, + // 多会场字体色 + 'mobile-multi-meeting:text-color': $--color-white, +); diff --git a/src/skins/black/config-pc.scss b/src/skins/black/config-pc.scss new file mode 100644 index 0000000..8f0458b --- /dev/null +++ b/src/skins/black/config-pc.scss @@ -0,0 +1,110 @@ +@import './config-common.scss'; + +// 皮肤 PC 端页面配置 +$--skin-page-pc-configs: ( + // 观看页背景类型 + 'pc-watch-page:bg-type': 'color', + // 观看页背景颜色 + 'pc-watch-page:bg-color': #141518, + // 观看页背景图 + 'pc-watch-page:bg-image': '', + + // 副屏收起字体颜色 + 'pc-sub-pack-up:text-color': $--color-white, + + // 倒计时方块背景色 + 'pc-count-down-square-item:bg-color': #141518, + // 倒计时方块远点背景色 + 'pc-count-down-square-item-dot:bg-color': #141518, + // 倒计时方块数字字体色 + 'pc-count-down-square-item:text-color': $--color-white, + // 倒计时方块文案字体色 + 'pc-count-down-square-item-word:text-color': map.get($--skin-basic-configs, 'main-text-color'), + // 倒计时方块边框色 + 'pc-count-down-square-item:border-color': $--color-black, + + // 聊天消息底部输入框背景色 + 'pc-msg-bottom-input-wrap:bg-color': map.get($--skin-basic-configs, 'sub-bg-color'), + // 聊天消息底部输入框节点字体色 + 'pc-msg-bottom-input-wrap-item:text-color': #e4e4e4, + // 聊天消息底部输入框节点 hover 字体色 + 'pc-msg-bottom-input-wrap-item--hover:text-color': map.get($--skin-basic-configs, 'sub-primary-color'), + + // 聊天消息输入框背景色 + 'pc-msg-input:bg-color': map.get($--skin-basic-configs, 'main-bg-color'), + // 聊天消息输入框字体色 + 'pc-msg-input:text-color': #e4e4e4, + // 聊天消息输入框占位符字体色 + 'pc-msg-input-placeholder:text-color': rgba(map.get($--skin-basic-configs, 'main-text-color'), 0.6), + // 聊天消息输入框滚动条颜色 + 'pc-msg-input:scrollbar-color': #46464F, + + // 聊天消息发送按钮背景色 + 'pc-msg-send-button:bg-color': map.get($--skin-basic-configs, 'primary-color'), + // 聊天消息发送按钮禁用状态下的背景色 + 'pc-msg-send-button--disabled:bg-color': #2b2c35, + // 聊天消息发送按钮字体颜色 + 'pc-msg-send-button:text-color': $--color-white, + // 聊天消息发送按钮禁用状态下的字体颜色 + 'pc-msg-send-button--disabled:text-color': rgba($--color-white, 0.5), + + // 图片达到最大数量后的提示框背景色 + 'pws-pc-msg-input-popper__max-image-tips:bg-color': rgb(47, 130, 254), + // 图片达到最大数量后的提示框字体色 + 'pws-pc-msg-input-popper__max-image-tips:text-color': $--color-white, + + // 聊天输入框设置昵称占位背景色 + 'pc-set-nick-placeholder:bg-color': map.get($--skin-basic-configs, 'main-bg-color'), + // 聊天输入框设置昵称占位字体色 + 'pc-set-nick-placeholder:text-color': $--color-white, + // 聊天输入框设置昵称占位高亮字体色 + 'pc-set-nick-placeholder-highlight:text-color': map.get($--skin-basic-configs, 'main-highlight-text-color'), + + // 表情选择面板背景色 + 'pc-emotion-panel:bg-color': map.get($--skin-basic-configs, 'panel-bg-color'), + // 表情选择面板类型选择背景色 + 'pc-emotion-panel-select:bg-color': map.get($--skin-basic-configs, 'sub-bg-color'), + + // 更多面板背景色 + 'pc-more-panel:bg-color': map.get($--skin-basic-configs, 'panel-bg-color'), + // 更多面板字体色 + 'pc-more-panel:text-color': map.get($--skin-basic-configs, 'panel-text-color'), + // 更多面板字体高亮色 + 'pc-more-panel-text--hover:text-color': map.get($--skin-basic-configs, 'panel-highlight-text-color'), + // 更多面板选中框背景色 + 'pc-more-panel-checkbox--checked:bg-color': $--color-white, + // 更多面板选中框图标色 + 'pc-more-panel-checkbox-icon--checked:text-color': map.get($--skin-basic-configs, 'panel-bg-color'), + + // 打赏面板背景色 + 'pc-donate-panel:bg-color': map.get($--skin-basic-configs, 'panel-bg-color'), + // 打赏礼物 hover 背景色 + 'pc-donate-good--hover:bg-color': rgba($--color-white, 0.1), + // 打赏礼物 hover 边框色 + 'pc-donate-good--hover:border-color': rgba($--color-white, 0.4), + // 打赏礼物道具名称字体色 + 'pc-donate-good-name:text-color': map.get($--skin-basic-configs, 'panel-text-color'), + // 打赏礼物道具价格字体色 + 'pc-donate-good-price:text-color': rgba($--color-white, 0.5), + + // 中奖记录面板背景色 + 'pc-lottery-record-panel:bg-color': map.get($--skin-basic-configs, 'panel-bg-color'), + // 中奖记录面板关闭图标字体色 + 'pc-lottery-record-close:text-color': map.get($--skin-basic-configs, 'panel-text-color'), + + // 连麦描述图标字体色 + 'pc-connect-mic-desc-icon:text-color': #3e3e4f, + // 连麦描述文案字体色 + 'pc-connect-mic-desc:text-color': map.get($--skin-basic-configs, 'describe-text-color'), + // 连麦按钮背景色 + 'pc-connect-mic-button:bg-color': map.get($--skin-basic-configs, 'sub-bg-color'), + // 连麦按钮字体色 + 'pc-connect-mic-button:text-color': $--color-white, + // 连麦按钮高亮字体色 + 'pc-connect-mic-button-highlight:text-color': $--color-white, + // 连麦中图标背景图 + 'pc-connect-mic-applying:icon-image': './imgs/pws-pc-connect-mic.gif', + + // 回放列表播放中按钮背景色 + 'pc-playback-list-playing:bg-color': map.get($--skin-basic-configs, 'primary-color'), +); diff --git a/src/skins/black/config.scss b/src/skins/black/config.scss new file mode 100644 index 0000000..c2135df --- /dev/null +++ b/src/skins/black/config.scss @@ -0,0 +1,7 @@ +@import '../_common/functions.scss'; +@import './config-common.scss'; +@import './config-pc.scss'; +@import './config-mobile.scss'; +@import './config-iar.scss'; + +$--skin-configs: generate-skin-setup-configs(); diff --git a/src/skins/black/imgs/pws-icon-more.png b/src/skins/black/imgs/pws-icon-more.png new file mode 100644 index 0000000000000000000000000000000000000000..52b15f454c14a10fb8ddce948263649053987419 GIT binary patch literal 283 zcmeAS@N?(olHy`uVBq!ia0vp^8X(NV3?%C=ER6$FEa{HEjtmSN`?>!lvI6-k0X`wF z{|N!0!mB5z-vm-TB|(0{<*TZMqn53%m1@|;5Ogtg4^X_z)5S4F-ud$W%ls+(@Pb55u14T$psN@>UHx3vIVCg!01hE~$N&HU literal 0 HcmV?d00001 diff --git a/src/skins/black/imgs/pws-pc-connect-mic.gif b/src/skins/black/imgs/pws-pc-connect-mic.gif new file mode 100644 index 0000000000000000000000000000000000000000..5de709033a2c75ddd91af7ad22c9838a3d2ecb40 GIT binary patch literal 18637 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