From dd589f646c84b3a7417a3ed44ac9b042bc7dc711 Mon Sep 17 00:00:00 2001 From: yj <1336058017@qq.com> Date: Wed, 20 Nov 2024 17:29:49 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/form/index.ts | 19 + api/meeting/index.ts | 50 + app.js | 11 +- app.json | 117 +- app.wxss | 27 +- assets/TDesignLogo@2x.png | Bin 10893 -> 0 bytes assets/icon1-active.png | Bin 0 -> 4531 bytes assets/icon1.png | Bin 0 -> 5554 bytes assets/icon2-active.png | Bin 0 -> 12806 bytes assets/icon2.png | Bin 0 -> 7886 bytes assets/icon3-active.png | Bin 0 -> 13221 bytes assets/icon3.png | Bin 0 -> 5193 bytes assets/icon4.png | Bin 0 -> 6950 bytes assets/icon5.png | Bin 0 -> 7315 bytes assets/icon6.png | Bin 0 -> 9242 bytes assets/icon7-active.png | Bin 0 -> 7620 bytes assets/icon7.png | Bin 0 -> 8373 bytes assets/icon8.png | Bin 0 -> 26401 bytes assets/icon9.png | Bin 0 -> 299 bytes components/demo-block/index.d.ts | 1 - components/demo-block/index.js | 27 - components/demo-block/index.json | 3 - components/demo-block/index.wxml | 18 - components/demo-block/index.wxss | 43 - components/header-tab/index.json | 4 + components/header-tab/index.scss | 18 + components/header-tab/index.ts | 43 + components/header-tab/index.wxml | 7 + components/pull-down-list/index.d.ts | 1 - components/pull-down-list/index.js | 41 - components/pull-down-list/index.json | 3 - components/pull-down-list/index.wxml | 12 - components/pull-down-list/index.wxss | 49 - components/status-bar-height/index.json | 4 + .../status-bar-height/index.scss | 0 components/status-bar-height/index.ts | 16 + components/status-bar-height/index.wxml | 1 + demos/radio/basic/basic.d.ts | 1 - demos/radio/basic/basic.js | 1 - demos/radio/basic/basic.json | 3 - demos/radio/basic/basic.wxml | 4 - demos/radio/group/group.d.ts | 1 - demos/radio/group/group.js | 22 - demos/radio/group/group.json | 3 - demos/radio/group/group.wxml | 12 - lib/agora-miniapp-sdk.js | 2 + miniprogram_npm/dayjs/index.js | 13 + miniprogram_npm/dayjs/index.js.map | 1 + miniprogram_npm/fast-deep-equal/index.js | 59 + miniprogram_npm/fast-deep-equal/index.js.map | 1 + miniprogram_npm/miniprogram-computed/index.js | 1 + miniprogram_npm/rfdc/index.js | 211 + miniprogram_npm/rfdc/index.js.map | 1 + .../signalr-for-wx/AbortController.js | 39 + .../signalr-for-wx/DefualtRequest.js | 50 + miniprogram_npm/signalr-for-wx/Errors.js | 114 + .../signalr-for-wx/HandshakeProtocol.js | 67 + .../signalr-for-wx/HttpConnection.js | 479 ++ .../signalr-for-wx/HubConnection.js | 546 ++ .../signalr-for-wx/HubConnectionBuilder.js | 71 + miniprogram_npm/signalr-for-wx/IConnection.js | 2 + .../signalr-for-wx/IHttpConnectionOptions.js | 2 + .../signalr-for-wx/IHubProtocol.js | 34 + miniprogram_npm/signalr-for-wx/ILogger.js | 25 + miniprogram_npm/signalr-for-wx/ITransport.js | 21 + .../signalr-for-wx/JsonHubProtocol.js | 129 + miniprogram_npm/signalr-for-wx/Loggers.js | 17 + .../signalr-for-wx/LongPollingTransport.js | 380 + miniprogram_npm/signalr-for-wx/Polyfills.js | 13 + miniprogram_npm/signalr-for-wx/Stream.js | 2 + .../signalr-for-wx/TextMessageFormat.js | 46 + miniprogram_npm/signalr-for-wx/Utils.js | 324 + .../signalr-for-wx/WechatVersionDiff.js | 33 + .../signalr-for-wx/WxSocketTransport.js | 300 + miniprogram_npm/signalr-for-wx/index.js | 24 + .../signalr-for-wx/wx-request/index.js | 477 ++ .../signalr-for-wx/wx-request/model.js | 2 + .../wx-request/model/RequestConfig.js | 0 .../wx-request/model/RequestMethod.js | 10 + .../wx-request/model/RequestOption.js | 0 .../wx-request/model/ResponseOptions.js | 0 .../wx-request/model/ResponseType.js | 20 + .../tdesign-miniprogram/.wechatide.ib.json | 3895 +++++++++++ .../action-sheet/README.en-US.md | 34 +- .../action-sheet/README.md | 39 +- .../action-sheet/action-sheet.d.ts | 18 + .../action-sheet/action-sheet.js | 14 +- .../action-sheet/action-sheet.json | 4 +- .../action-sheet/action-sheet.wxml | 14 +- .../action-sheet/action-sheet.wxss | 22 +- .../action-sheet/index.d.ts | 11 +- .../tdesign-miniprogram/action-sheet/index.js | 13 +- .../tdesign-miniprogram/action-sheet/props.js | 17 +- .../action-sheet/show.d.ts | 8 +- .../action-sheet/template/grid.wxml | 14 +- .../action-sheet/template/list.wxml | 6 + .../action-sheet/type.d.ts | 18 + .../avatar-group/avatar-group.d.ts | 2 +- .../avatar-group/avatar-group.js | 13 +- .../avatar-group/avatar-group.json | 1 + .../avatar-group/avatar-group.wxml | 3 +- .../avatar-group/avatar-group.wxss | 253 +- .../tdesign-miniprogram/avatar-group/props.js | 8 +- .../avatar-group/type.d.ts | 13 +- .../avatar/README.en-US.md | 76 +- .../tdesign-miniprogram/avatar/README.md | 84 +- .../tdesign-miniprogram/avatar/avatar.d.ts | 2 - .../tdesign-miniprogram/avatar/avatar.js | 9 +- .../tdesign-miniprogram/avatar/avatar.json | 1 + .../tdesign-miniprogram/avatar/avatar.wxml | 16 +- .../tdesign-miniprogram/avatar/avatar.wxs | 6 +- .../tdesign-miniprogram/avatar/avatar.wxss | 12 +- .../tdesign-miniprogram/avatar/props.js | 6 +- .../tdesign-miniprogram/avatar/type.d.ts | 13 +- .../back-top/README.en-US.md | 28 +- .../tdesign-miniprogram/back-top/README.md | 36 +- .../back-top/back-top.d.ts | 2 + .../tdesign-miniprogram/back-top/back-top.js | 6 + .../back-top/back-top.json | 1 + .../back-top/back-top.wxml | 1 + .../back-top/back-top.wxss | 16 +- .../tdesign-miniprogram/back-top/props.js | 15 +- .../tdesign-miniprogram/back-top/type.d.ts | 22 +- .../tdesign-miniprogram/badge/README.en-US.md | 36 +- .../tdesign-miniprogram/badge/README.md | 49 +- .../tdesign-miniprogram/badge/badge.json | 2 +- .../tdesign-miniprogram/badge/badge.wxml | 15 +- .../tdesign-miniprogram/badge/badge.wxs | 16 +- .../tdesign-miniprogram/badge/badge.wxss | 36 +- .../tdesign-miniprogram/badge/type.d.ts | 8 +- .../button/README.en-US.md | 245 +- .../tdesign-miniprogram/button/README.md | 205 +- .../tdesign-miniprogram/button/button.d.ts | 6 +- .../tdesign-miniprogram/button/button.js | 17 +- .../tdesign-miniprogram/button/button.json | 1 + .../tdesign-miniprogram/button/button.wxml | 16 +- .../tdesign-miniprogram/button/button.wxss | 192 +- .../tdesign-miniprogram/button/props.js | 108 +- .../tdesign-miniprogram/button/type.d.ts | 113 +- .../calendar/README.en-US.md | 28 +- .../tdesign-miniprogram/calendar/README.md | 36 +- .../calendar/calendar.d.ts | 10 +- .../tdesign-miniprogram/calendar/calendar.js | 58 +- .../calendar/calendar.json | 1 + .../calendar/calendar.wxml | 5 +- .../tdesign-miniprogram/calendar/calendar.wxs | 13 + .../calendar/calendar.wxss | 21 +- .../tdesign-miniprogram/calendar/props.js | 11 +- .../calendar/template.wxml | 10 +- .../tdesign-miniprogram/calendar/type.d.ts | 19 +- .../cascader/README.en-US.md | 36 +- .../tdesign-miniprogram/cascader/README.md | 42 +- .../cascader/cascader.d.ts | 33 +- .../tdesign-miniprogram/cascader/cascader.js | 180 +- .../cascader/cascader.json | 1 + .../cascader/cascader.wxml | 10 +- .../cascader/cascader.wxss | 44 +- .../tdesign-miniprogram/cascader/props.js | 4 + .../tdesign-miniprogram/cascader/type.d.ts | 4 + .../cell-group/cell-group.d.ts | 3 - .../cell-group/cell-group.js | 6 +- .../cell-group/cell-group.json | 3 +- .../cell-group/cell-group.wxml | 2 +- .../cell-group/cell-group.wxss | 9 +- .../tdesign-miniprogram/cell/README.en-US.md | 76 +- .../tdesign-miniprogram/cell/README.md | 88 +- .../tdesign-miniprogram/cell/cell.d.ts | 6 + .../tdesign-miniprogram/cell/cell.js | 18 + .../tdesign-miniprogram/cell/cell.json | 1 + .../tdesign-miniprogram/cell/cell.wxml | 27 +- .../tdesign-miniprogram/cell/cell.wxss | 17 +- .../tdesign-miniprogram/cell/props.js | 9 +- .../tdesign-miniprogram/cell/type.d.ts | 29 +- .../check-tag/check-tag.d.ts | 1 + .../check-tag/check-tag.js | 8 +- .../check-tag/check-tag.json | 1 + .../check-tag/check-tag.wxml | 9 + .../check-tag/check-tag.wxss | 29 +- .../tdesign-miniprogram/check-tag/props.js | 7 - .../tdesign-miniprogram/check-tag/type.d.ts | 8 - .../checkbox-group/README.md | 59 - .../checkbox-group/checkbox-group.d.ts | 43 +- .../checkbox-group/checkbox-group.js | 49 +- .../checkbox-group/checkbox-group.json | 1 + .../checkbox-group/checkbox-group.wxml | 23 +- .../checkbox-group/props.js | 13 +- .../checkbox-group/type.d.ts | 19 +- .../checkbox/README.en-US.md | 61 +- .../tdesign-miniprogram/checkbox/README.md | 74 +- .../checkbox/checkbox.d.ts | 33 +- .../tdesign-miniprogram/checkbox/checkbox.js | 37 +- .../checkbox/checkbox.json | 2 +- .../checkbox/checkbox.wxml | 31 +- .../checkbox/checkbox.wxss | 32 +- .../tdesign-miniprogram/checkbox/props.js | 17 +- .../tdesign-miniprogram/checkbox/type.d.ts | 20 +- .../tdesign-miniprogram/col/README.en-US.md | 21 + .../tdesign-miniprogram/col/README.md | 59 + .../tdesign-miniprogram/col/col.d.ts | 10 + .../tdesign-miniprogram/col/col.js | 31 + .../tdesign-miniprogram/col/col.json | 5 + .../tdesign-miniprogram/col/col.wxml | 9 + .../tdesign-miniprogram/col/col.wxs | 17 + .../tdesign-miniprogram/col/col.wxss | 176 + .../tdesign-miniprogram/col/props.d.ts | 3 + .../tdesign-miniprogram/col/props.js | 9 + .../tdesign-miniprogram/col/type.d.ts | 10 + .../tdesign-miniprogram/col/type.js | 0 .../collapse-panel/collapse-panel.d.ts | 6 +- .../collapse-panel/collapse-panel.js | 31 +- .../collapse-panel/collapse-panel.json | 1 + .../collapse-panel/collapse-panel.wxml | 6 +- .../collapse-panel/collapse-panel.wxss | 82 +- .../collapse-panel/props.js | 7 +- .../collapse-panel/type.d.ts | 8 +- .../collapse/README.en-US.md | 48 +- .../tdesign-miniprogram/collapse/README.md | 54 +- .../collapse/collapse.d.ts | 3 - .../tdesign-miniprogram/collapse/collapse.js | 6 - .../collapse/collapse.json | 3 +- .../tdesign-miniprogram/collapse/type.d.ts | 4 - .../color-picker/README.en-US.md | 28 + .../color-picker/README.md | 62 + .../color-picker/color-picker.d.ts | 98 + .../color-picker/color-picker.js | 331 + .../color-picker/color-picker.json | 2 +- .../color-picker/color-picker.wxml | 18 + .../color-picker/color-picker.wxss | 299 + .../color-picker/constants.d.ts | 7 + .../color-picker/constants.js | 18 + .../color-picker/interfaces.d.ts | 5 + .../color-picker/interfaces.js | 1 + .../color-picker/props.d.ts | 3 + .../tdesign-miniprogram/color-picker/props.js | 42 + .../color-picker/template.wxml | 93 + .../color-picker/type.d.ts | 44 + .../tdesign-miniprogram/color-picker/type.js | 1 + .../color-picker/utils.d.ts | 1 + .../tdesign-miniprogram/color-picker/utils.js | 1 + .../tdesign-miniprogram/common/bus.d.ts | 1 + .../tdesign-miniprogram/common/bus.js | 6 + .../tdesign-miniprogram/common/common.d.ts | 39 +- .../common/shared/calendar/index.d.ts | 4 +- .../common/shared/calendar/index.js | 7 +- .../common/shared/color-picker/cmyk.d.ts | 7 + .../common/shared/color-picker/cmyk.js | 57 + .../common/shared/color-picker/color.d.ts | 107 + .../common/shared/color-picker/color.js | 334 + .../common/shared/color-picker/gradient.d.ts | 12 + .../common/shared/color-picker/gradient.js | 119 + .../common/shared/color-picker/index.d.ts | 3 + .../common/shared/color-picker/index.js | 3 + .../common/src/instantiationDecorator.js | 5 +- .../common/style/icons.wxss | 0 .../common/style/theme/_components.wxss | 10 + .../common/style/theme/_dark.wxss | 123 + .../common/style/theme/_font.wxss | 33 + .../common/style/theme/_index.wxss | 313 + .../common/style/theme/_light.wxss | 128 + .../common/style/theme/_radius.wxss | 9 + .../common/style/theme/_spacer.wxss | 10 + .../common/template/button.wxml | 7 +- .../common/template/image.wxml | 9 +- .../tdesign-miniprogram/common/utils.d.ts | 17 +- .../tdesign-miniprogram/common/utils.js | 57 +- .../tdesign-miniprogram/common/utils.wxs | 83 +- .../tdesign-miniprogram/common/version.d.ts | 1 + .../tdesign-miniprogram/common/version.js | 8 +- .../tdesign-miniprogram/common/wechat.d.ts | 4 + .../tdesign-miniprogram/common/wechat.js | 19 + .../count-down/README.en-US.md | 30 +- .../tdesign-miniprogram/count-down/README.md | 44 +- .../count-down/count-down.json | 1 + .../count-down/count-down.wxss | 13 +- .../tdesign-miniprogram/count-down/props.js | 2 + .../tdesign-miniprogram/count-down/type.d.ts | 5 +- .../date-time-picker/README.en-US.md | 32 +- .../date-time-picker/README.md | 54 +- .../date-time-picker/date-time-picker.d.ts | 15 +- .../date-time-picker/date-time-picker.js | 41 +- .../date-time-picker/date-time-picker.json | 1 + .../date-time-picker/date-time-picker.wxml | 14 +- .../date-time-picker/locale/dayjs.d.ts | 174 + .../date-time-picker/locale/dayjs.js | 74 + .../date-time-picker/locale/ja.d.ts | 13 + .../date-time-picker/locale/ja.js | 12 + .../date-time-picker/locale/ko.d.ts | 13 + .../date-time-picker/locale/ko.js | 12 + .../date-time-picker/locale/ru.d.ts | 13 + .../date-time-picker/locale/ru.js | 12 + .../date-time-picker/locale/tc.d.ts | 13 + .../date-time-picker/locale/tc.js | 12 + .../date-time-picker/props.js | 26 +- .../date-time-picker/type.d.ts | 30 + .../dialog/README.en-US.md | 45 +- .../tdesign-miniprogram/dialog/README.md | 56 +- .../tdesign-miniprogram/dialog/dialog.d.ts | 2 +- .../tdesign-miniprogram/dialog/dialog.js | 14 +- .../tdesign-miniprogram/dialog/dialog.json | 1 + .../tdesign-miniprogram/dialog/dialog.wxml | 3 +- .../tdesign-miniprogram/dialog/dialog.wxss | 17 +- .../tdesign-miniprogram/dialog/index.d.ts | 4 +- .../tdesign-miniprogram/dialog/index.js | 2 +- .../tdesign-miniprogram/dialog/props.js | 6 +- .../tdesign-miniprogram/dialog/type.d.ts | 17 +- .../divider/README.en-US.md | 27 +- .../tdesign-miniprogram/divider/README.md | 33 +- .../tdesign-miniprogram/divider/divider.d.ts | 1 - .../tdesign-miniprogram/divider/divider.js | 1 - .../tdesign-miniprogram/divider/divider.json | 3 +- .../tdesign-miniprogram/divider/divider.wxml | 4 +- .../tdesign-miniprogram/divider/divider.wxss | 8 +- .../tdesign-miniprogram/divider/props.js | 7 - .../tdesign-miniprogram/divider/type.d.ts | 8 - .../drawer/README.en-US.md | 35 +- .../tdesign-miniprogram/drawer/README.md | 38 +- .../tdesign-miniprogram/drawer/drawer.d.ts | 1 + .../tdesign-miniprogram/drawer/drawer.js | 6 +- .../tdesign-miniprogram/drawer/drawer.json | 1 + .../tdesign-miniprogram/drawer/drawer.wxml | 6 +- .../tdesign-miniprogram/drawer/drawer.wxss | 14 +- .../tdesign-miniprogram/drawer/type.d.ts | 4 + .../dropdown-item/dropdown-item.d.ts | 12 +- .../dropdown-item/dropdown-item.js | 14 +- .../dropdown-item/dropdown-item.json | 1 + .../dropdown-item/dropdown-item.wxml | 96 +- .../dropdown-item/dropdown-item.wxss | 18 +- .../dropdown-item/props.js | 4 - .../dropdown-item/type.d.ts | 8 - .../dropdown-menu/README.en-US.md | 59 +- .../dropdown-menu/README.md | 75 +- .../dropdown-menu/dropdown-menu.d.ts | 8 + .../dropdown-menu/dropdown-menu.js | 18 +- .../dropdown-menu/dropdown-menu.json | 1 + .../dropdown-menu/dropdown-menu.wxml | 15 +- .../dropdown-menu/dropdown-menu.wxss | 9 +- .../dropdown-menu/props.js | 7 +- .../dropdown-menu/type.d.ts | 12 +- .../tdesign-miniprogram/empty/README.en-US.md | 30 +- .../tdesign-miniprogram/empty/README.md | 37 +- .../tdesign-miniprogram/empty/empty.json | 1 + .../tdesign-miniprogram/empty/empty.wxss | 5 +- .../tdesign-miniprogram/empty/type.d.ts | 4 - .../tdesign-miniprogram/fab/README.en-US.md | 18 +- .../tdesign-miniprogram/fab/README.md | 37 +- .../fab/draggable/draggable.d.ts | 21 + .../fab/draggable/draggable.js | 81 + .../fab/draggable/draggable.json | 4 + .../fab/draggable/draggable.wxml | 11 + .../fab/draggable/draggable.wxss | 30 + .../fab/draggable/index.d.ts | 3 + .../fab/draggable/index.js | 3 + .../fab/draggable/props.d.ts | 3 + .../fab/draggable/props.js | 7 + .../fab/draggable/type.d.ts | 6 + .../tdesign-miniprogram/fab/draggable/type.js | 1 + .../tdesign-miniprogram/fab/fab.d.ts | 9 +- .../tdesign-miniprogram/fab/fab.js | 53 +- .../tdesign-miniprogram/fab/fab.json | 4 +- .../tdesign-miniprogram/fab/fab.wxml | 17 +- .../tdesign-miniprogram/fab/fab.wxss | 3 + .../tdesign-miniprogram/fab/props.js | 15 + .../fab/template/draggable.wxml | 13 + .../fab/template/view.wxml | 11 + .../tdesign-miniprogram/fab/type.d.ts | 20 +- .../footer/README.en-US.md | 33 +- .../tdesign-miniprogram/footer/README.md | 44 +- .../tdesign-miniprogram/footer/footer.json | 1 + .../tdesign-miniprogram/footer/footer.wxss | 5 +- .../tdesign-miniprogram/footer/props.js | 14 +- .../tdesign-miniprogram/footer/type.d.ts | 22 +- .../grid-item/grid-item.d.ts | 2 +- .../grid-item/grid-item.js | 4 +- .../grid-item/grid-item.json | 1 + .../grid-item/grid-item.wxml | 13 +- .../grid-item/grid-item.wxss | 36 +- .../tdesign-miniprogram/grid-item/props.js | 3 - .../tdesign-miniprogram/grid-item/type.d.ts | 11 +- .../tdesign-miniprogram/grid/README.en-US.md | 70 +- .../tdesign-miniprogram/grid/README.md | 72 +- .../tdesign-miniprogram/grid/grid.d.ts | 3 +- .../tdesign-miniprogram/grid/grid.js | 5 +- .../tdesign-miniprogram/grid/grid.json | 1 + .../tdesign-miniprogram/grid/props.js | 3 - .../tdesign-miniprogram/grid/type.d.ts | 8 - .../tdesign-miniprogram/guide/README.en-US.md | 106 + .../tdesign-miniprogram/guide/README.md | 154 + .../tdesign-miniprogram/guide/content.wxml | 18 + .../tdesign-miniprogram/guide/guide.d.ts | 98 + .../tdesign-miniprogram/guide/guide.js | 256 + .../tdesign-miniprogram/guide/guide.json | 9 + .../tdesign-miniprogram/guide/guide.wxml | 44 + .../tdesign-miniprogram/guide/guide.wxss | 102 + .../tdesign-miniprogram/guide/props.d.ts | 3 + .../tdesign-miniprogram/guide/props.js | 49 + .../tdesign-miniprogram/guide/type.d.ts | 72 + .../tdesign-miniprogram/guide/type.js | 1 + .../tdesign-miniprogram/icon/README.en-US.md | 26 + .../tdesign-miniprogram/icon/README.md | 47 +- .../tdesign-miniprogram/icon/icon.js | 28 +- .../tdesign-miniprogram/icon/icon.json | 1 + .../tdesign-miniprogram/icon/icon.wxml | 6 +- .../tdesign-miniprogram/icon/icon.wxss | 6111 ++++++++++++++++- .../tdesign-miniprogram/icon/props.js | 7 +- .../tdesign-miniprogram/icon/type.d.ts | 16 +- .../image-viewer/README.en-US.md | 40 + .../image-viewer/README.md | 45 +- .../image-viewer/image-viewer.d.ts | 32 +- .../image-viewer/image-viewer.js | 55 +- .../image-viewer/image-viewer.json | 4 +- .../image-viewer/image-viewer.wxml | 20 +- .../image-viewer/image-viewer.wxss | 12 +- .../tdesign-miniprogram/image-viewer/props.js | 17 +- .../image-viewer/type.d.ts | 25 +- .../tdesign-miniprogram/image/README.en-US.md | 37 +- .../tdesign-miniprogram/image/README.md | 40 +- .../tdesign-miniprogram/image/image.d.ts | 5 +- .../tdesign-miniprogram/image/image.js | 47 +- .../tdesign-miniprogram/image/image.json | 1 + .../tdesign-miniprogram/image/image.wxml | 98 +- .../tdesign-miniprogram/image/image.wxss | 17 +- .../tdesign-miniprogram/image/props.js | 7 +- .../tdesign-miniprogram/image/type.d.ts | 12 +- .../tdesign-miniprogram/index.d.ts | 4 + miniprogram_npm/tdesign-miniprogram/index.js | 4 + .../indexes-anchor/README.md | 6 +- .../indexes-anchor/indexes-anchor.json | 3 +- .../indexes-anchor/indexes-anchor.wxss | 2 +- .../indexes-anchor/props.js | 3 - .../indexes-anchor/type.d.ts | 8 - .../indexes/README.en-US.md | 39 +- .../tdesign-miniprogram/indexes/README.md | 51 +- .../tdesign-miniprogram/indexes/indexes.d.ts | 1 + .../tdesign-miniprogram/indexes/indexes.js | 80 +- .../tdesign-miniprogram/indexes/indexes.json | 1 + .../tdesign-miniprogram/indexes/indexes.wxml | 7 +- .../tdesign-miniprogram/indexes/indexes.wxs | 7 + .../tdesign-miniprogram/indexes/indexes.wxss | 16 +- .../tdesign-miniprogram/indexes/props.js | 6 +- .../tdesign-miniprogram/indexes/type.d.ts | 18 +- .../tdesign-miniprogram/input/README.en-US.md | 121 +- .../tdesign-miniprogram/input/README.md | 132 +- .../tdesign-miniprogram/input/input.d.ts | 5 + .../tdesign-miniprogram/input/input.js | 35 +- .../tdesign-miniprogram/input/input.json | 1 + .../tdesign-miniprogram/input/input.wxml | 25 +- .../tdesign-miniprogram/input/input.wxss | 32 +- .../tdesign-miniprogram/input/props.js | 208 +- .../tdesign-miniprogram/input/type.d.ts | 184 +- .../tdesign-miniprogram/link/README.en-US.md | 49 +- .../tdesign-miniprogram/link/README.md | 55 +- .../tdesign-miniprogram/link/link.d.ts | 3 + .../tdesign-miniprogram/link/link.js | 6 +- .../tdesign-miniprogram/link/link.json | 1 + .../tdesign-miniprogram/link/link.wxml | 2 +- .../tdesign-miniprogram/link/link.wxss | 4 +- .../tdesign-miniprogram/link/props.js | 19 +- .../tdesign-miniprogram/link/type.d.ts | 20 +- .../loading/README.en-US.md | 28 +- .../tdesign-miniprogram/loading/README.md | 35 +- .../tdesign-miniprogram/loading/loading.d.ts | 6 +- .../tdesign-miniprogram/loading/loading.json | 1 + .../tdesign-miniprogram/loading/loading.wxml | 12 +- .../tdesign-miniprogram/loading/loading.wxss | 31 +- .../tdesign-miniprogram/loading/type.d.ts | 6 +- .../message-item/index.d.ts | 17 + .../tdesign-miniprogram/message-item/index.js | 46 + .../message-item/message-item.d.ts | 39 + .../message-item/message-item.js | 187 + .../message-item/message-item.json | 8 + .../message-item/message-item.wxml | 52 + .../message-item.wxs} | 15 +- .../message-item/message-item.wxss | 91 + .../message/README.en-US.md | 49 +- .../tdesign-miniprogram/message/README.md | 53 +- .../tdesign-miniprogram/message/index.js | 7 +- .../tdesign-miniprogram/message/message.d.ts | 45 +- .../message/message.interface.d.ts | 3 + .../tdesign-miniprogram/message/message.js | 254 +- .../tdesign-miniprogram/message/message.json | 4 +- .../tdesign-miniprogram/message/message.wxml | 65 +- .../tdesign-miniprogram/message/message.wxss | 86 - .../tdesign-miniprogram/message/props.js | 18 +- .../tdesign-miniprogram/message/type.d.ts | 34 +- .../miniprogram_npm/dayjs/index.js | 2 +- .../miniprogram_npm/dayjs/locale/en.js | 1 + .../miniprogram_npm/dayjs/locale/ja.js | 1 + .../miniprogram_npm/dayjs/locale/ko.js | 1 + .../miniprogram_npm/dayjs/locale/ru.js | 1 + .../miniprogram_npm/dayjs/locale/zh-cn.js | 1 + .../miniprogram_npm/dayjs/locale/zh-tw.js | 1 + .../dayjs/plugin/localeData.js | 1 + .../miniprogram_npm/lodash/_Symbol.js | 6 + .../miniprogram_npm/lodash/_baseGetTag.js | 28 + .../miniprogram_npm/lodash/_freeGlobal.js | 4 + .../miniprogram_npm/lodash/_getRawTag.js | 46 + .../miniprogram_npm/lodash/_objectToString.js | 22 + .../miniprogram_npm/lodash/_root.js | 9 + .../miniprogram_npm/lodash/isArray.js | 26 + .../miniprogram_npm/lodash/isNull.js | 22 + .../miniprogram_npm/lodash/isObjectLike.js | 29 + .../miniprogram_npm/lodash/isString.js | 30 + .../miniprogram_npm/tinycolor2/index.js | 1188 ++++ .../mixins/page-scroll.d.ts | 6 +- .../tdesign-miniprogram/mixins/page-scroll.js | 12 +- .../mixins/theme-change.d.ts | 2 + .../mixins/theme-change.js | 23 + .../mixins/using-custom-navbar.d.ts | 2 + .../mixins/using-custom-navbar.js | 34 + .../navbar/README.en-US.md | 38 +- .../tdesign-miniprogram/navbar/README.md | 47 +- .../tdesign-miniprogram/navbar/navbar.d.ts | 7 +- .../tdesign-miniprogram/navbar/navbar.js | 93 +- .../tdesign-miniprogram/navbar/navbar.json | 1 + .../tdesign-miniprogram/navbar/navbar.wxml | 14 +- .../tdesign-miniprogram/navbar/navbar.wxss | 48 +- .../tdesign-miniprogram/navbar/props.js | 3 - .../tdesign-miniprogram/navbar/type.d.ts | 8 - .../notice-bar/README.en-US.md | 48 +- .../tdesign-miniprogram/notice-bar/README.md | 52 +- .../notice-bar/notice-bar.d.ts | 2 + .../notice-bar/notice-bar.js | 23 +- .../notice-bar/notice-bar.json | 4 +- .../notice-bar/notice-bar.wxml | 5 +- .../notice-bar/notice-bar.wxss | 9 +- .../tdesign-miniprogram/notice-bar/props.js | 12 +- .../tdesign-miniprogram/notice-bar/type.d.ts | 24 +- .../overlay/README.en-US.md | 31 + .../tdesign-miniprogram/overlay/README.md | 27 +- .../tdesign-miniprogram/overlay/index.d.ts | 3 + .../tdesign-miniprogram/overlay/index.js | 3 + .../tdesign-miniprogram/overlay/overlay.d.ts | 22 +- .../tdesign-miniprogram/overlay/overlay.js | 25 +- .../tdesign-miniprogram/overlay/overlay.json | 3 +- .../tdesign-miniprogram/overlay/overlay.wxml | 2 +- .../tdesign-miniprogram/overlay/overlay.wxss | 4 +- .../tdesign-miniprogram/overlay/props.d.ts | 3 + .../tdesign-miniprogram/overlay/props.js | 19 + .../tdesign-miniprogram/overlay/type.d.ts | 26 + .../tdesign-miniprogram/overlay/type.js | 1 + .../picker-item/picker-item.d.ts | 12 +- .../picker-item/picker-item.js | 60 +- .../picker-item/picker-item.json | 1 + .../picker-item/picker-item.wxml | 4 +- .../picker-item/picker-item.wxss | 11 +- .../picker/README.en-US.md | 43 +- .../tdesign-miniprogram/picker/README.md | 59 +- .../tdesign-miniprogram/picker/picker.d.ts | 12 +- .../tdesign-miniprogram/picker/picker.js | 32 +- .../tdesign-miniprogram/picker/picker.json | 1 + .../tdesign-miniprogram/picker/picker.wxml | 33 +- .../tdesign-miniprogram/picker/picker.wxss | 11 +- .../tdesign-miniprogram/picker/props.js | 24 +- .../tdesign-miniprogram/picker/template.wxml | 21 + .../tdesign-miniprogram/picker/type.d.ts | 33 +- .../tdesign-miniprogram/popup/README.en-US.md | 30 +- .../tdesign-miniprogram/popup/README.md | 39 +- .../tdesign-miniprogram/popup/index.d.ts | 3 + .../tdesign-miniprogram/popup/index.js | 3 + .../tdesign-miniprogram/popup/popup.d.ts | 1 - .../tdesign-miniprogram/popup/popup.js | 8 +- .../tdesign-miniprogram/popup/popup.json | 1 + .../tdesign-miniprogram/popup/popup.wxml | 27 +- .../tdesign-miniprogram/popup/popup.wxs | 12 +- .../tdesign-miniprogram/popup/popup.wxss | 11 +- .../tdesign-miniprogram/popup/props.js | 6 +- .../tdesign-miniprogram/popup/type.d.ts | 17 +- .../progress/README.en-US.md | 31 +- .../tdesign-miniprogram/progress/README.md | 41 +- .../progress/progress.d.ts | 6 +- .../tdesign-miniprogram/progress/progress.js | 28 +- .../progress/progress.json | 1 + .../progress/progress.wxml | 64 +- .../tdesign-miniprogram/progress/progress.wxs | 23 +- .../progress/progress.wxss | 26 +- .../tdesign-miniprogram/progress/props.js | 7 +- .../tdesign-miniprogram/progress/type.d.ts | 20 +- .../pull-down-refresh/README.en-US.md | 32 +- .../pull-down-refresh/README.md | 43 +- .../pull-down-refresh/props.js | 34 +- .../pull-down-refresh/pull-down-refresh.d.ts | 22 +- .../pull-down-refresh/pull-down-refresh.js | 151 +- .../pull-down-refresh/pull-down-refresh.json | 1 + .../pull-down-refresh/pull-down-refresh.wxml | 30 +- .../pull-down-refresh/pull-down-refresh.wxss | 8 +- .../pull-down-refresh/type.d.ts | 36 +- .../tdesign-miniprogram/radio-group/README.md | 60 - .../tdesign-miniprogram/radio-group/props.js | 14 +- .../radio-group/radio-group.d.ts | 5 +- .../radio-group/radio-group.js | 24 +- .../radio-group/radio-group.json | 1 + .../radio-group/radio-group.wxml | 21 +- .../tdesign-miniprogram/radio-group/type.d.ts | 20 +- .../tdesign-miniprogram/radio/README.en-US.md | 67 +- .../tdesign-miniprogram/radio/README.md | 77 +- .../tdesign-miniprogram/radio/props.js | 17 +- .../tdesign-miniprogram/radio/radio.d.ts | 30 +- .../tdesign-miniprogram/radio/radio.js | 38 +- .../tdesign-miniprogram/radio/radio.json | 2 +- .../tdesign-miniprogram/radio/radio.wxml | 28 +- .../tdesign-miniprogram/radio/radio.wxss | 51 +- .../tdesign-miniprogram/radio/type.d.ts | 22 +- .../tdesign-miniprogram/rate/README.en-US.md | 32 +- .../tdesign-miniprogram/rate/README.md | 44 +- .../tdesign-miniprogram/rate/props.js | 18 +- .../tdesign-miniprogram/rate/rate.d.ts | 2 + .../tdesign-miniprogram/rate/rate.js | 16 +- .../tdesign-miniprogram/rate/rate.json | 1 + .../tdesign-miniprogram/rate/rate.wxml | 39 +- .../tdesign-miniprogram/rate/rate.wxs | 4 +- .../tdesign-miniprogram/rate/rate.wxss | 25 +- .../tdesign-miniprogram/rate/type.d.ts | 20 +- .../result/README.en-US.md | 39 +- .../tdesign-miniprogram/result/README.md | 44 +- .../tdesign-miniprogram/result/props.js | 3 - .../tdesign-miniprogram/result/result.json | 1 + .../tdesign-miniprogram/result/result.wxss | 6 +- .../tdesign-miniprogram/result/type.d.ts | 10 +- .../tdesign-miniprogram/row/README.md | 0 .../tdesign-miniprogram/row/props.d.ts | 3 + .../tdesign-miniprogram/row/props.js | 6 + .../tdesign-miniprogram/row/row.d.ts | 15 + .../tdesign-miniprogram/row/row.js | 49 + .../tdesign-miniprogram/row/row.json | 5 + .../tdesign-miniprogram/row/row.wxml | 5 + .../tdesign-miniprogram/row/row.wxs | 17 + .../tdesign-miniprogram/row/row.wxss | 6 + .../tdesign-miniprogram/row/type.d.ts | 6 + .../tdesign-miniprogram/row/type.js | 1 + .../search/README.en-US.md | 76 + .../tdesign-miniprogram/search/README.md | 72 +- .../tdesign-miniprogram/search/props.js | 123 +- .../tdesign-miniprogram/search/search.d.ts | 8 +- .../tdesign-miniprogram/search/search.js | 52 +- .../tdesign-miniprogram/search/search.json | 4 +- .../tdesign-miniprogram/search/search.wxml | 47 +- .../tdesign-miniprogram/search/search.wxs | 6 + .../tdesign-miniprogram/search/search.wxss | 23 +- .../tdesign-miniprogram/search/type.d.ts | 82 +- .../side-bar-item/side-bar-item.json | 1 + .../side-bar-item/side-bar-item.wxml | 3 +- .../side-bar-item/side-bar-item.wxss | 11 +- .../side-bar-item/type.d.ts | 4 +- .../side-bar/README.en-US.md | 28 +- .../tdesign-miniprogram/side-bar/README.md | 38 +- .../side-bar/side-bar.d.ts | 2 +- .../tdesign-miniprogram/side-bar/side-bar.js | 8 +- .../side-bar/side-bar.json | 1 + .../skeleton/README.en-US.md | 33 +- .../tdesign-miniprogram/skeleton/README.md | 39 +- .../tdesign-miniprogram/skeleton/props.js | 3 - .../skeleton/skeleton.d.ts | 2 + .../tdesign-miniprogram/skeleton/skeleton.js | 18 + .../skeleton/skeleton.json | 1 + .../skeleton/skeleton.wxml | 5 +- .../tdesign-miniprogram/skeleton/skeleton.wxs | 30 - .../skeleton/skeleton.wxss | 2 +- .../tdesign-miniprogram/skeleton/type.d.ts | 8 - .../slider/README.en-US.md | 51 +- .../tdesign-miniprogram/slider/README.md | 77 +- .../tdesign-miniprogram/slider/props.js | 11 +- .../tdesign-miniprogram/slider/slider.d.ts | 17 +- .../tdesign-miniprogram/slider/slider.js | 231 +- .../tdesign-miniprogram/slider/slider.json | 1 + .../tdesign-miniprogram/slider/slider.wxml | 33 +- .../tdesign-miniprogram/slider/slider.wxss | 96 +- .../tdesign-miniprogram/slider/tool.js | 3 - .../tdesign-miniprogram/slider/type.d.ts | 12 +- .../tdesign-miniprogram/step-item/props.js | 7 - .../step-item/step-item.d.ts | 14 +- .../step-item/step-item.js | 14 +- .../step-item/step-item.json | 1 + .../step-item/step-item.wxml | 21 +- .../step-item/step-item.wxs | 7 + .../step-item/step-item.wxss | 29 +- .../tdesign-miniprogram/step-item/type.d.ts | 16 - .../stepper/README.en-US.md | 28 +- .../tdesign-miniprogram/stepper/README.md | 36 +- .../tdesign-miniprogram/stepper/props.js | 22 +- .../tdesign-miniprogram/stepper/stepper.d.ts | 53 +- .../tdesign-miniprogram/stepper/stepper.js | 161 +- .../tdesign-miniprogram/stepper/stepper.json | 1 + .../tdesign-miniprogram/stepper/stepper.wxml | 12 +- .../tdesign-miniprogram/stepper/stepper.wxss | 14 +- .../tdesign-miniprogram/stepper/type.d.ts | 23 +- .../tdesign-miniprogram/steps/README.en-US.md | 74 +- .../tdesign-miniprogram/steps/README.md | 76 +- .../tdesign-miniprogram/steps/props.js | 7 +- .../tdesign-miniprogram/steps/steps.js | 3 +- .../tdesign-miniprogram/steps/steps.json | 1 + .../tdesign-miniprogram/steps/steps.wxml | 2 +- .../tdesign-miniprogram/steps/steps.wxss | 6 + .../tdesign-miniprogram/steps/type.d.ts | 12 +- .../sticky/README.en-US.md | 11 +- .../tdesign-miniprogram/sticky/README.md | 21 +- .../tdesign-miniprogram/sticky/props.js | 5 +- .../tdesign-miniprogram/sticky/sticky.js | 10 +- .../tdesign-miniprogram/sticky/sticky.json | 1 + .../tdesign-miniprogram/sticky/sticky.wxml | 4 +- .../tdesign-miniprogram/sticky/sticky.wxss | 3 - .../tdesign-miniprogram/sticky/type.d.ts | 12 +- .../swipe-cell/README.en-US.md | 8 +- .../tdesign-miniprogram/swipe-cell/README.md | 18 +- .../tdesign-miniprogram/swipe-cell/props.js | 7 +- .../swipe-cell/swipe-cell.d.ts | 11 +- .../swipe-cell/swipe-cell.js | 32 +- .../swipe-cell/swipe-cell.json | 1 + .../swipe-cell/swipe-cell.wxs | 7 +- .../swipe-cell/swipe-cell.wxss | 2 +- .../tdesign-miniprogram/swipe-cell/type.d.ts | 15 +- .../swiper-nav/swiper-nav.json | 3 +- .../swiper-nav/swiper-nav.wxml | 5 +- .../swiper-nav/swiper-nav.wxss | 14 +- .../tdesign-miniprogram/swiper-nav/type.d.ts | 4 - .../swiper/README.en-US.md | 52 +- .../tdesign-miniprogram/swiper/README.md | 53 +- .../tdesign-miniprogram/swiper/swiper.d.ts | 1 + .../tdesign-miniprogram/swiper/swiper.js | 3 + .../tdesign-miniprogram/swiper/swiper.json | 1 + .../tdesign-miniprogram/swiper/swiper.wxml | 8 +- .../tdesign-miniprogram/swiper/swiper.wxss | 2 +- .../tdesign-miniprogram/swiper/type.d.ts | 10 +- .../switch/README.en-US.md | 51 +- .../tdesign-miniprogram/switch/README.md | 58 +- .../tdesign-miniprogram/switch/props.js | 4 +- .../tdesign-miniprogram/switch/switch.d.ts | 2 +- .../tdesign-miniprogram/switch/switch.js | 4 +- .../tdesign-miniprogram/switch/switch.json | 1 + .../tdesign-miniprogram/switch/switch.wxml | 6 +- .../tdesign-miniprogram/switch/switch.wxss | 14 +- .../tdesign-miniprogram/switch/type.d.ts | 6 +- .../tab-bar-item/tab-bar-item.json | 1 + .../tab-bar-item/tab-bar-item.wxml | 17 +- .../tab-bar-item/tab-bar-item.wxss | 13 +- .../tab-bar-item/type.d.ts | 8 +- .../tab-bar/README.en-US.md | 37 +- .../tdesign-miniprogram/tab-bar/README.md | 46 +- .../tdesign-miniprogram/tab-bar/props.js | 1 - .../tdesign-miniprogram/tab-bar/tab-bar.json | 1 + .../tdesign-miniprogram/tab-bar/tab-bar.wxss | 7 +- .../tdesign-miniprogram/tab-bar/type.d.ts | 4 - .../tdesign-miniprogram/tab-panel/props.js | 5 - .../tab-panel/tab-panel.d.ts | 6 +- .../tab-panel/tab-panel.js | 6 +- .../tab-panel/tab-panel.json | 1 + .../tab-panel/tab-panel.wxml | 2 +- .../tab-panel/tab-panel.wxss | 13 +- .../tdesign-miniprogram/tab-panel/type.d.ts | 8 - .../tdesign-miniprogram/tabs/README.en-US.md | 50 +- .../tdesign-miniprogram/tabs/README.md | 58 +- .../tdesign-miniprogram/tabs/props.js | 4 + .../tdesign-miniprogram/tabs/tabs.d.ts | 9 +- .../tdesign-miniprogram/tabs/tabs.js | 79 +- .../tdesign-miniprogram/tabs/tabs.json | 1 + .../tdesign-miniprogram/tabs/tabs.wxml | 24 +- .../tdesign-miniprogram/tabs/tabs.wxs | 6 +- .../tdesign-miniprogram/tabs/tabs.wxss | 88 +- .../tdesign-miniprogram/tabs/type.d.ts | 8 +- .../tdesign-miniprogram/tag/README.en-US.md | 81 +- .../tdesign-miniprogram/tag/README.md | 83 +- .../tdesign-miniprogram/tag/props.js | 2 +- .../tdesign-miniprogram/tag/tag.d.ts | 1 + .../tdesign-miniprogram/tag/tag.js | 6 +- .../tdesign-miniprogram/tag/tag.json | 1 + .../tdesign-miniprogram/tag/tag.wxml | 12 +- .../tdesign-miniprogram/tag/tag.wxss | 26 +- .../tdesign-miniprogram/tag/type.d.ts | 11 +- .../textarea/README.en-US.md | 55 +- .../tdesign-miniprogram/textarea/README.md | 77 +- .../tdesign-miniprogram/textarea/props.js | 74 +- .../tdesign-miniprogram/textarea/textarea.js | 11 +- .../textarea/textarea.json | 1 + .../textarea/textarea.wxml | 4 +- .../tdesign-miniprogram/textarea/textarea.wxs | 16 + .../textarea/textarea.wxss | 14 +- .../tdesign-miniprogram/textarea/type.d.ts | 80 +- .../tdesign-miniprogram/toast/README.en-US.md | 36 +- .../tdesign-miniprogram/toast/README.md | 38 +- .../tdesign-miniprogram/toast/index.d.ts | 2 +- .../tdesign-miniprogram/toast/props.js | 8 +- .../tdesign-miniprogram/toast/toast.d.ts | 7 +- .../tdesign-miniprogram/toast/toast.js | 18 +- .../tdesign-miniprogram/toast/toast.json | 1 + .../tdesign-miniprogram/toast/toast.wxml | 10 +- .../tdesign-miniprogram/toast/toast.wxss | 2 +- .../tdesign-miniprogram/toast/type.d.ts | 17 +- .../transition/README.en-US.md | 15 + .../tdesign-miniprogram/transition/README.md | 27 +- .../tdesign-miniprogram/transition/props.js | 10 +- .../transition/transition.json | 1 + .../tdesign-miniprogram/transition/type.d.ts | 12 +- .../tdesign-miniprogram/transition/type.js | 1 - .../tree-select/README.en-US.md | 19 +- .../tdesign-miniprogram/tree-select/README.md | 29 +- .../tree-select/tree-select.d.ts | 8 +- .../tree-select/tree-select.js | 22 +- .../tree-select/tree-select.json | 1 + .../tree-select/tree-select.wxml | 26 +- .../tree-select/tree-select.wxss | 9 +- .../tdesign-miniprogram/tree-select/type.d.ts | 4 - .../upload/README.en-US.md | 35 +- .../tdesign-miniprogram/upload/README.md | 42 +- .../tdesign-miniprogram/upload/drag.wxs | 238 + .../tdesign-miniprogram/upload/props.js | 11 + .../tdesign-miniprogram/upload/type.d.ts | 30 +- .../tdesign-miniprogram/upload/upload.d.ts | 16 +- .../tdesign-miniprogram/upload/upload.js | 177 +- .../tdesign-miniprogram/upload/upload.json | 2 +- .../tdesign-miniprogram/upload/upload.wxml | 281 +- .../tdesign-miniprogram/upload/upload.wxs | 15 + .../tdesign-miniprogram/upload/upload.wxss | 49 +- miniprogram_npm/tinycolor2/index.js | 1201 ++++ miniprogram_npm/tinycolor2/index.js.map | 1 + package-lock.json | 121 + package.json | 17 + pages/action-sheet/action-sheet.d.ts | 1 - pages/action-sheet/action-sheet.js | 1 - pages/action-sheet/action-sheet.json | 11 - pages/action-sheet/action-sheet.wxml | 19 - pages/action-sheet/action-sheet.wxss | 6 - pages/action-sheet/align/index.js | 36 - pages/action-sheet/align/index.json | 7 - pages/action-sheet/align/index.wxml | 3 - pages/action-sheet/grid/index.js | 65 - pages/action-sheet/grid/index.json | 7 - pages/action-sheet/grid/index.wxml | 5 - pages/action-sheet/list/index.js | 74 - pages/action-sheet/list/index.json | 7 - pages/action-sheet/list/index.wxml | 7 - pages/action-sheet/status/index.js | 37 - pages/action-sheet/status/index.json | 7 - pages/action-sheet/status/index.wxml | 3 - pages/avatar/action/index.js | 18 - pages/avatar/action/index.json | 7 - pages/avatar/action/index.wxml | 3 - pages/avatar/action/index.wxss | 0 pages/avatar/avatar.d.ts | 1 - pages/avatar/avatar.js | 1 - pages/avatar/avatar.json | 13 - pages/avatar/avatar.wxml | 27 - pages/avatar/avatar.wxss | 12 - pages/avatar/badge-avatar/index.js | 5 - pages/avatar/badge-avatar/index.json | 6 - pages/avatar/badge-avatar/index.wxml | 8 - pages/avatar/badge-avatar/index.wxss | 9 - pages/avatar/character-avatar/index.js | 5 - pages/avatar/character-avatar/index.json | 6 - pages/avatar/character-avatar/index.wxml | 2 - pages/avatar/character-avatar/index.wxss | 9 - pages/avatar/exhibition/index.js | 12 - pages/avatar/exhibition/index.json | 7 - pages/avatar/exhibition/index.wxml | 3 - pages/avatar/exhibition/index.wxss | 0 pages/avatar/icon-avatar/index.js | 5 - pages/avatar/icon-avatar/index.json | 6 - pages/avatar/icon-avatar/index.wxml | 2 - pages/avatar/icon-avatar/index.wxss | 3 - pages/avatar/image-avatar/index.js | 5 - pages/avatar/image-avatar/index.json | 6 - pages/avatar/image-avatar/index.wxml | 2 - pages/avatar/image-avatar/index.wxss | 3 - pages/avatar/size/index.js | 5 - pages/avatar/size/index.json | 6 - pages/avatar/size/index.wxml | 17 - pages/avatar/size/index.wxss | 22 - pages/back-top/back-top.d.ts | 1 - pages/back-top/back-top.js | 17 - pages/back-top/back-top.json | 10 - pages/back-top/back-top.wxml | 30 - pages/back-top/back-top.wxss | 12 - pages/back-top/base/index.js | 11 - pages/back-top/base/index.json | 6 - pages/back-top/base/index.wxml | 1 - pages/back-top/base/index.wxss | 0 pages/back-top/half-round/index.js | 11 - pages/back-top/half-round/index.json | 6 - pages/back-top/half-round/index.wxml | 1 - pages/back-top/half-round/index.wxss | 0 pages/badge/api.md | 14 - pages/badge/badge.d.ts | 1 - pages/badge/badge.js | 1 - pages/badge/badge.json | 8 - pages/badge/badge.wxml | 11 - pages/badge/badge.wxss | 0 pages/badge/base/index.js | 5 - pages/badge/base/index.json | 8 - pages/badge/base/index.wxml | 28 - pages/badge/base/index.wxss | 11 - pages/badge/size/index.js | 5 - pages/badge/size/index.json | 7 - pages/badge/size/index.wxml | 11 - pages/badge/size/index.wxss | 3 - pages/badge/theme/index.js | 5 - pages/badge/theme/index.json | 8 - pages/badge/theme/index.wxml | 25 - pages/badge/theme/index.wxss | 7 - pages/button/base/index.js | 1 - pages/button/base/index.json | 6 - pages/button/base/index.wxml | 10 - pages/button/base/index.wxss | 10 - pages/button/block-btn/index.js | 1 - pages/button/block-btn/index.json | 6 - pages/button/block-btn/index.wxml | 3 - pages/button/block-btn/index.wxss | 3 - pages/button/button.d.ts | 1 - pages/button/button.js | 1 - pages/button/button.json | 15 - pages/button/button.wxml | 39 - pages/button/button.wxss | 3 - pages/button/disabled/index.js | 1 - pages/button/disabled/index.json | 6 - pages/button/disabled/index.wxml | 10 - pages/button/disabled/index.wxss | 10 - pages/button/ghost-btn/index.js | 1 - pages/button/ghost-btn/index.json | 6 - pages/button/ghost-btn/index.wxml | 5 - pages/button/ghost-btn/index.wxss | 6 - pages/button/group-btn/index.js | 1 - pages/button/group-btn/index.json | 6 - pages/button/group-btn/index.wxml | 4 - pages/button/group-btn/index.wxss | 6 - pages/button/icon-btn/index.js | 1 - pages/button/icon-btn/index.json | 6 - pages/button/icon-btn/index.wxml | 5 - pages/button/icon-btn/index.wxss | 3 - pages/button/shape/index.js | 1 - pages/button/shape/index.json | 6 - pages/button/shape/index.wxml | 8 - pages/button/shape/index.wxss | 9 - pages/button/size/index.js | 1 - pages/button/size/index.json | 6 - pages/button/size/index.wxml | 6 - pages/button/size/index.wxss | 6 - pages/button/theme/index.js | 1 - pages/button/theme/index.json | 6 - pages/button/theme/index.wxml | 23 - pages/button/theme/index.wxss | 10 - pages/calendar/base/index.js | 25 - pages/calendar/base/index.json | 7 - pages/calendar/base/index.wxml | 2 - pages/calendar/base/index.wxss | 0 pages/calendar/calendar.js | 1 - pages/calendar/calendar.json | 12 - pages/calendar/calendar.wxml | 17 - pages/calendar/calendar.wxss | 3 - pages/calendar/custom-button/index.js | 23 - pages/calendar/custom-button/index.json | 7 - pages/calendar/custom-button/index.wxml | 2 - pages/calendar/custom-button/index.wxss | 0 pages/calendar/custom-range/index.js | 19 - pages/calendar/custom-range/index.json | 7 - pages/calendar/custom-range/index.wxml | 8 - pages/calendar/custom-range/index.wxss | 3 - pages/calendar/custom-text/index.js | 43 - pages/calendar/custom-text/index.json | 7 - pages/calendar/custom-text/index.wxml | 9 - pages/calendar/custom-text/index.wxss | 3 - pages/calendar/multiple/index.js | 13 - pages/calendar/multiple/index.json | 7 - pages/calendar/multiple/index.wxml | 2 - pages/calendar/multiple/index.wxss | 0 pages/calendar/range/index.js | 13 - pages/calendar/range/index.json | 7 - pages/calendar/range/index.wxml | 2 - pages/calendar/range/index.wxss | 0 pages/calendar/without-popup/index.js | 13 - pages/calendar/without-popup/index.json | 6 - pages/calendar/without-popup/index.wxml | 2 - pages/calendar/without-popup/index.wxss | 4 - pages/cascader/base/index.js | 80 - pages/cascader/base/index.json | 7 - pages/cascader/base/index.wxml | 3 - pages/cascader/base/index.wxss | 0 pages/cascader/cascader.js | 1 - pages/cascader/cascader.json | 10 - pages/cascader/cascader.wxml | 23 - pages/cascader/cascader.wxss | 0 pages/cascader/keys/index.js | 85 - pages/cascader/keys/index.json | 7 - pages/cascader/keys/index.wxml | 10 - pages/cascader/keys/index.wxss | 3 - pages/cascader/theme-tab/index.js | 80 - pages/cascader/theme-tab/index.json | 7 - pages/cascader/theme-tab/index.wxml | 9 - pages/cascader/theme-tab/index.wxss | 0 pages/cascader/with-title/index.js | 81 - pages/cascader/with-title/index.json | 7 - pages/cascader/with-title/index.wxml | 9 - pages/cascader/with-title/index.wxss | 0 pages/cascader/with-value/index.js | 80 - pages/cascader/with-value/index.json | 7 - pages/cascader/with-value/index.wxml | 9 - pages/cascader/with-value/index.wxss | 0 pages/cell-group/api.md | 7 - pages/cell-group/cell-group.d.ts | 1 - pages/cell-group/cell-group.js | 3 - pages/cell-group/cell-group.json | 4 - pages/cell-group/cell-group.wxml | 13 - pages/cell-group/cell-group.wxss | 4 - pages/cell/base/index.js | 1 - pages/cell/base/index.json | 9 - pages/cell/base/index.wxml | 10 - pages/cell/base/index.wxss | 0 pages/cell/cell.d.ts | 1 - pages/cell/cell.js | 1 - pages/cell/cell.json | 8 - pages/cell/cell.wxml | 13 - pages/cell/cell.wxss | 0 pages/cell/multiple/index.js | 1 - pages/cell/multiple/index.json | 8 - pages/cell/multiple/index.wxml | 24 - pages/cell/multiple/index.wxss | 6 - pages/cell/theme/index.js | 1 - pages/cell/theme/index.json | 8 - pages/cell/theme/index.wxml | 5 - pages/cell/theme/index.wxss | 0 pages/checkbox/all/index.js | 24 - pages/checkbox/all/index.json | 6 - pages/checkbox/all/index.wxml | 5 - pages/checkbox/all/index.wxss | 0 pages/checkbox/base/index.js | 14 - pages/checkbox/base/index.json | 7 - pages/checkbox/base/index.wxml | 15 - pages/checkbox/base/index.wxss | 0 pages/checkbox/card/index.js | 19 - pages/checkbox/card/index.json | 7 - pages/checkbox/card/index.wxml | 5 - pages/checkbox/card/index.wxss | 5 - pages/checkbox/checkbox.d.ts | 1 - pages/checkbox/checkbox.js | 1 - pages/checkbox/checkbox.json | 13 - pages/checkbox/checkbox.wxml | 35 - pages/checkbox/checkbox.wxss | 0 pages/checkbox/horizontal/index.js | 17 - pages/checkbox/horizontal/index.json | 7 - pages/checkbox/horizontal/index.wxml | 5 - pages/checkbox/horizontal/index.wxss | 6 - pages/checkbox/right/index.js | 1 - pages/checkbox/right/index.json | 7 - pages/checkbox/right/index.wxml | 5 - pages/checkbox/right/index.wxss | 0 pages/checkbox/special/index.js | 17 - pages/checkbox/special/index.json | 7 - pages/checkbox/special/index.wxml | 23 - pages/checkbox/special/index.wxss | 57 - pages/checkbox/status/index.js | 1 - pages/checkbox/status/index.json | 7 - pages/checkbox/status/index.wxml | 4 - pages/checkbox/status/index.wxss | 0 pages/checkbox/type/index.js | 19 - pages/checkbox/type/index.json | 7 - pages/checkbox/type/index.wxml | 9 - pages/checkbox/type/index.wxss | 0 pages/collapse/accordion/index.js | 1 - pages/collapse/accordion/index.json | 7 - pages/collapse/accordion/index.wxml | 14 - pages/collapse/accordion/index.wxss | 0 pages/collapse/action/index.js | 12 - pages/collapse/action/index.json | 7 - pages/collapse/action/index.wxml | 13 - pages/collapse/action/index.wxss | 0 pages/collapse/base/index.js | 12 - pages/collapse/base/index.json | 7 - pages/collapse/base/index.wxml | 7 - pages/collapse/base/index.wxss | 0 pages/collapse/collapse.d.ts | 1 - pages/collapse/collapse.js | 10 - pages/collapse/collapse.json | 10 - pages/collapse/collapse.wxml | 24 - pages/collapse/collapse.wxss | 39 - pages/collapse/placement/index.js | 12 - pages/collapse/placement/index.json | 7 - pages/collapse/placement/index.wxml | 7 - pages/collapse/placement/index.wxss | 0 pages/collapse/theme/index.js | 1 - pages/collapse/theme/index.json | 7 - pages/collapse/theme/index.wxml | 14 - pages/collapse/theme/index.wxss | 0 pages/count-down/base/index.js | 5 - pages/count-down/base/index.json | 6 - pages/count-down/base/index.wxml | 47 - pages/count-down/base/index.wxss | 20 - pages/count-down/count-down.d.ts | 1 - pages/count-down/count-down.js | 35 - pages/count-down/count-down.json | 8 - pages/count-down/count-down.wxml | 10 - pages/count-down/count-down.wxss | 41 - pages/count-down/size/index.js | 5 - pages/count-down/size/index.json | 6 - pages/count-down/size/index.wxml | 64 - pages/count-down/size/index.wxss | 12 - pages/date-time-picker/date-all/index.js | 38 - pages/date-time-picker/date-all/index.json | 6 - pages/date-time-picker/date-all/index.wxml | 21 - pages/date-time-picker/date-all/index.wxss | 3 - pages/date-time-picker/date-time-picker.d.ts | 1 - pages/date-time-picker/date-time-picker.js | 1 - pages/date-time-picker/date-time-picker.json | 9 - pages/date-time-picker/date-time-picker.wxml | 15 - pages/date-time-picker/date-time-picker.wxss | 0 pages/date-time-picker/time/index.js | 42 - pages/date-time-picker/time/index.json | 6 - pages/date-time-picker/time/index.wxml | 45 - pages/date-time-picker/time/index.wxss | 3 - .../date-time-picker/year-month-date/index.js | 42 - .../year-month-date/index.json | 6 - .../year-month-date/index.wxml | 24 - .../year-month-date/index.wxss | 7 - pages/date-time-picker/year-month/index.js | 42 - pages/date-time-picker/year-month/index.json | 6 - pages/date-time-picker/year-month/index.wxml | 23 - pages/date-time-picker/year-month/index.wxss | 3 - pages/dialog/base/index.js | 21 - pages/dialog/base/index.json | 7 - pages/dialog/base/index.wxml | 65 - pages/dialog/base/index.wxss | 14 - pages/dialog/button/index.js | 34 - pages/dialog/button/index.json | 7 - pages/dialog/button/index.wxml | 4 - pages/dialog/button/index.wxss | 0 pages/dialog/command/index.js | 20 - pages/dialog/command/index.json | 7 - pages/dialog/command/index.wxml | 2 - pages/dialog/command/index.wxss | 0 pages/dialog/confirm/index.js | 26 - pages/dialog/confirm/index.json | 7 - pages/dialog/confirm/index.wxml | 40 - pages/dialog/confirm/index.wxss | 3 - pages/dialog/dialog.d.ts | 1 - pages/dialog/dialog.js | 1 - pages/dialog/dialog.json | 13 - pages/dialog/dialog.wxml | 31 - pages/dialog/dialog.wxss | 3 - pages/dialog/status/index.js | 29 - pages/dialog/status/index.json | 7 - pages/dialog/status/index.wxml | 109 - pages/dialog/status/index.wxss | 7 - pages/dialog/with-image/index.js | 16 - pages/dialog/with-image/index.json | 8 - pages/dialog/with-image/index.wxml | 49 - pages/dialog/with-image/index.wxss | 13 - pages/dialog/with-input/index.js | 18 - pages/dialog/with-input/index.json | 8 - pages/dialog/with-input/index.wxml | 57 - pages/dialog/with-input/index.wxss | 26 - pages/divider/base/index.js | 1 - pages/divider/base/index.json | 6 - pages/divider/base/index.wxml | 17 - pages/divider/base/index.wxss | 14 - pages/divider/divider.d.ts | 1 - pages/divider/divider.js | 1 - pages/divider/divider.json | 8 - pages/divider/divider.wxml | 10 - pages/divider/divider.wxss | 3 - pages/divider/theme/index.js | 1 - pages/divider/theme/index.json | 6 - pages/divider/theme/index.wxml | 4 - pages/divider/theme/index.wxss | 10 - pages/drawer/base/index.js | 52 - pages/drawer/base/index.json | 7 - pages/drawer/base/index.wxml | 9 - pages/drawer/base/index.wxss | 0 pages/drawer/drawer.d.ts | 1 - pages/drawer/drawer.js | 1 - pages/drawer/drawer.json | 10 - pages/drawer/drawer.wxml | 16 - pages/drawer/drawer.wxss | 3 - pages/drawer/footer/index.js | 65 - pages/drawer/footer/index.json | 7 - pages/drawer/footer/index.wxml | 14 - pages/drawer/footer/index.wxss | 4 - pages/drawer/icon-drawer/index.js | 60 - pages/drawer/icon-drawer/index.json | 7 - pages/drawer/icon-drawer/index.wxml | 9 - pages/drawer/icon-drawer/index.wxss | 0 pages/drawer/title/index.js | 49 - pages/drawer/title/index.json | 7 - pages/drawer/title/index.wxml | 10 - pages/drawer/title/index.wxss | 0 pages/dropdown-menu/dropdown-menu.d.ts | 1 - pages/dropdown-menu/dropdown-menu.js | 1 - pages/dropdown-menu/dropdown-menu.json | 9 - pages/dropdown-menu/dropdown-menu.wxml | 22 - pages/dropdown-menu/dropdown-menu.wxss | 8 - pages/dropdown-menu/multi/index.js | 56 - pages/dropdown-menu/multi/index.json | 7 - pages/dropdown-menu/multi/index.wxml | 23 - pages/dropdown-menu/multi/index.wxss | 0 pages/dropdown-menu/single/index.js | 41 - pages/dropdown-menu/single/index.json | 7 - pages/dropdown-menu/single/index.wxml | 4 - pages/dropdown-menu/single/index.wxss | 0 pages/dropdown-menu/tree/index.js | 41 - pages/dropdown-menu/tree/index.json | 7 - pages/dropdown-menu/tree/index.wxml | 16 - pages/dropdown-menu/tree/index.wxss | 0 pages/empty/base/index.js | 1 - pages/empty/base/index.json | 6 - pages/empty/base/index.wxml | 1 - pages/empty/base/index.wxss | 0 pages/empty/buttonEmpty/index.js | 1 - pages/empty/buttonEmpty/index.json | 7 - pages/empty/buttonEmpty/index.wxml | 3 - pages/empty/buttonEmpty/index.wxss | 0 pages/empty/empty.d.ts | 1 - pages/empty/empty.js | 1 - pages/empty/empty.json | 9 - pages/empty/empty.wxml | 13 - pages/empty/empty.wxss | 3 - pages/empty/imageEmpty/index.js | 5 - pages/empty/imageEmpty/index.json | 6 - pages/empty/imageEmpty/index.wxml | 1 - pages/empty/imageEmpty/index.wxss | 4 - pages/fab/advance/index.js | 13 - pages/fab/advance/index.json | 6 - pages/fab/advance/index.wxml | 1 - pages/fab/advance/index.wxss | 0 pages/fab/base/index.js | 7 - pages/fab/base/index.json | 6 - pages/fab/base/index.wxml | 1 - pages/fab/base/index.wxss | 0 pages/fab/fab.d.ts | 1 - pages/fab/fab.js | 10 - pages/fab/fab.json | 9 - pages/fab/fab.wxml | 19 - pages/fab/fab.wxss | 6 - pages/footer/base/index.js | 5 - pages/footer/base/index.json | 6 - pages/footer/base/index.wxml | 2 - pages/footer/base/index.wxss | 0 pages/footer/footer.d.ts | 1 - pages/footer/footer.js | 1 - pages/footer/footer.json | 9 - pages/footer/footer.wxml | 11 - pages/footer/footer.wxss | 3 - pages/footer/link/index.js | 26 - pages/footer/link/index.json | 6 - pages/footer/link/index.wxml | 8 - pages/footer/link/index.wxss | 7 - pages/footer/logo/index.js | 13 - pages/footer/logo/index.json | 6 - pages/footer/logo/index.wxml | 8 - pages/footer/logo/index.wxss | 7 - pages/form/index.json | 3 + pages/form/index.scss | 13 + pages/form/index.ts | 163 + pages/form/index.wxml | 15 + pages/grid/badge/index.js | 7 - pages/grid/badge/index.json | 7 - pages/grid/badge/index.wxml | 6 - pages/grid/badge/index.wxss | 43 - pages/grid/base/index.js | 7 - pages/grid/base/index.json | 7 - pages/grid/base/index.wxml | 20 - pages/grid/base/index.wxss | 4 - pages/grid/border/index.js | 10 - pages/grid/border/index.json | 7 - pages/grid/border/index.wxml | 14 - pages/grid/border/index.wxss | 4 - pages/grid/card/index.js | 7 - pages/grid/card/index.json | 7 - pages/grid/card/index.wxml | 10 - pages/grid/card/index.wxss | 4 - pages/grid/description/index.js | 7 - pages/grid/description/index.json | 7 - pages/grid/description/index.wxml | 14 - pages/grid/description/index.wxss | 4 - pages/grid/grid.d.ts | 1 - pages/grid/grid.js | 1 - pages/grid/grid.json | 13 - pages/grid/grid.wxml | 28 - pages/grid/grid.wxss | 7 - pages/grid/icon-grid/index.js | 1 - pages/grid/icon-grid/index.json | 7 - pages/grid/icon-grid/index.wxml | 6 - pages/grid/icon-grid/index.wxss | 4 - pages/grid/multiple/index.js | 7 - pages/grid/multiple/index.json | 7 - pages/grid/multiple/index.wxml | 10 - pages/grid/multiple/index.wxss | 4 - pages/grid/scroll/index.js | 30 - pages/grid/scroll/index.json | 7 - pages/grid/scroll/index.wxml | 3 - pages/grid/scroll/index.wxss | 4 - pages/gulp-error/index.d.ts | 1 - pages/gulp-error/index.js | 8 - pages/gulp-error/index.json | 3 - pages/gulp-error/index.wxml | 1 - pages/gulp-error/index.wxss | 0 pages/home/data/base.d.ts | 9 - pages/home/data/base.js | 27 - pages/home/data/display.d.ts | 9 - pages/home/data/display.js | 71 - pages/home/data/form.d.ts | 9 - pages/home/data/form.js | 67 - pages/home/data/index.d.ts | 9 - pages/home/data/index.js | 6 - pages/home/data/nav.d.ts | 9 - pages/home/data/nav.js | 39 - pages/home/data/ux.d.ts | 9 - pages/home/data/ux.js | 51 - pages/home/home.js | 58 - pages/home/home.json | 9 - pages/home/home.wxml | 14 - pages/home/home.wxss | 32 - pages/home/navigateFail/navigateFail.d.ts | 1 - pages/home/navigateFail/navigateFail.js | 10 - pages/home/navigateFail/navigateFail.json | 1 - pages/home/navigateFail/navigateFail.wxml | 7 - pages/home/navigateFail/navigateFail.wxss | 22 - pages/icon/base/index.js | 256 - pages/icon/base/index.json | 6 - pages/icon/base/index.wxml | 6 - pages/icon/base/index.wxss | 16 - pages/icon/custom/index.js | 16 - pages/icon/custom/index.json | 6 - pages/icon/custom/index.wxml | 6 - pages/icon/custom/index.wxss | 48 - pages/icon/data.js | 240 - pages/icon/icon.d.ts | 1 - pages/icon/icon.js | 1 - pages/icon/icon.json | 9 - pages/icon/icon.wxml | 15 - pages/icon/icon.wxss | 27 - pages/icon/iconImage/index.js | 20 - pages/icon/iconImage/index.json | 6 - pages/icon/iconImage/index.wxml | 5 - pages/icon/iconImage/index.wxss | 12 - pages/icon/iconfont.wxss | 31 - pages/image-viewer/base/index.js | 69 - pages/image-viewer/base/index.json | 8 - pages/image-viewer/base/index.wxml | 12 - pages/image-viewer/base/index.wxss | 0 pages/image-viewer/delete/index.js | 72 - pages/image-viewer/delete/index.json | 8 - pages/image-viewer/delete/index.wxml | 12 - pages/image-viewer/delete/index.wxss | 0 pages/image-viewer/image-viewer.d.ts | 1 - pages/image-viewer/image-viewer.js | 1 - pages/image-viewer/image-viewer.json | 8 - pages/image-viewer/image-viewer.wxml | 10 - pages/image-viewer/image-viewer.wxss | 3 - pages/image/base/index.js | 5 - pages/image/base/index.json | 6 - pages/image/base/index.wxml | 29 - pages/image/base/index.wxss | 18 - pages/image/image.d.ts | 1 - pages/image/image.js | 1 - pages/image/image.json | 10 - pages/image/image.wxml | 11 - pages/image/image.wxss | 48 - pages/image/size/index.js | 12 - pages/image/size/index.json | 6 - pages/image/size/index.wxml | 1 - pages/image/size/index.wxss | 29 - pages/image/status/index.js | 21 - pages/image/status/index.json | 7 - pages/image/status/index.wxml | 25 - pages/image/status/index.wxss | 23 - pages/indexes/base/index.js | 104 - pages/indexes/base/index.json | 9 - pages/indexes/base/index.wxml | 8 - pages/indexes/base/index.wxss | 0 pages/indexes/custom/index.js | 49 - pages/indexes/custom/index.json | 9 - pages/indexes/custom/index.wxml | 16 - pages/indexes/custom/index.wxss | 24 - pages/indexes/indexes.d.ts | 1 - pages/indexes/indexes.js | 8 - pages/indexes/indexes.json | 7 - pages/indexes/indexes.wxml | 10 - pages/indexes/indexes.wxss | 6 - pages/input/align/index.js | 1 - pages/input/align/index.json | 6 - pages/input/align/index.wxml | 3 - pages/input/align/index.wxss | 0 pages/input/banner/index.js | 5 - pages/input/banner/index.json | 6 - pages/input/banner/index.wxml | 3 - pages/input/banner/index.wxss | 3 - pages/input/base/index.js | 1 - pages/input/base/index.json | 6 - pages/input/base/index.wxml | 7 - pages/input/base/index.wxss | 0 pages/input/bordered/index.js | 5 - pages/input/bordered/index.json | 6 - pages/input/bordered/index.wxml | 9 - pages/input/bordered/index.wxss | 13 - pages/input/custom/index.js | 1 - pages/input/custom/index.json | 6 - pages/input/custom/index.wxml | 3 - pages/input/custom/index.wxss | 11 - pages/input/input.d.ts | 1 - pages/input/input.js | 28 - pages/input/input.json | 19 - pages/input/input.wxml | 42 - pages/input/input.wxss | 9 - pages/input/label/index.js | 1 - pages/input/label/index.json | 6 - pages/input/label/index.wxml | 1 - pages/input/label/index.wxss | 0 pages/input/layout/index.js | 1 - pages/input/layout/index.json | 6 - pages/input/layout/index.wxml | 6 - pages/input/layout/index.wxss | 0 pages/input/maxlength/index.js | 1 - pages/input/maxlength/index.json | 6 - pages/input/maxlength/index.wxml | 2 - pages/input/maxlength/index.wxss | 0 pages/input/prefix/index.js | 1 - pages/input/prefix/index.json | 6 - pages/input/prefix/index.wxml | 3 - pages/input/prefix/index.wxss | 0 pages/input/size/index.js | 1 - pages/input/size/index.json | 6 - pages/input/size/index.wxml | 2 - pages/input/size/index.wxss | 0 pages/input/special/index.js | 30 - pages/input/special/index.json | 6 - pages/input/special/index.wxml | 41 - pages/input/special/index.wxss | 27 - pages/input/status/index.js | 1 - pages/input/status/index.json | 6 - pages/input/status/index.wxml | 3 - pages/input/status/index.wxss | 0 pages/input/suffix/index.js | 8 - pages/input/suffix/index.json | 7 - pages/input/suffix/index.wxml | 12 - pages/input/suffix/index.wxss | 0 pages/link/content/index.js | 1 - pages/link/content/index.json | 6 - pages/link/content/index.wxml | 4 - pages/link/content/index.wxss | 7 - pages/link/disabled/index.js | 1 - pages/link/disabled/index.json | 6 - pages/link/disabled/index.wxml | 9 - pages/link/disabled/index.wxss | 11 - pages/link/link.d.ts | 1 - pages/link/link.js | 1 - pages/link/link.json | 12 - pages/link/link.wxml | 25 - pages/link/link.wxss | 0 pages/link/prefix/index.js | 1 - pages/link/prefix/index.json | 6 - pages/link/prefix/index.wxml | 4 - pages/link/prefix/index.wxss | 7 - pages/link/size/index.js | 1 - pages/link/size/index.json | 6 - pages/link/size/index.wxml | 5 - pages/link/size/index.wxss | 7 - pages/link/suffix/index.js | 1 - pages/link/suffix/index.json | 6 - pages/link/suffix/index.wxml | 4 - pages/link/suffix/index.wxss | 7 - pages/link/theme/index.js | 1 - pages/link/theme/index.json | 6 - pages/link/theme/index.wxml | 9 - pages/link/theme/index.wxss | 11 - pages/link/underline/index.js | 1 - pages/link/underline/index.json | 6 - pages/link/underline/index.wxml | 4 - pages/link/underline/index.wxss | 7 - pages/loading/base/index.js | 1 - pages/loading/base/index.json | 6 - pages/loading/base/index.wxml | 5 - pages/loading/base/index.wxss | 8 - pages/loading/duration/index.js | 10 - pages/loading/duration/index.json | 7 - pages/loading/duration/index.wxml | 17 - pages/loading/duration/index.wxss | 9 - pages/loading/horizontal/index.js | 1 - pages/loading/horizontal/index.json | 6 - pages/loading/horizontal/index.wxml | 4 - pages/loading/horizontal/index.wxss | 10 - pages/loading/loading.d.ts | 1 - pages/loading/loading.js | 7 - pages/loading/loading.json | 13 - pages/loading/loading.wxml | 30 - pages/loading/loading.wxss | 3 - pages/loading/size/index.js | 5 - pages/loading/size/index.json | 6 - pages/loading/size/index.wxml | 11 - pages/loading/size/index.wxss | 11 - pages/loading/status/index.js | 11 - pages/loading/status/index.json | 7 - pages/loading/status/index.wxml | 5 - pages/loading/status/index.wxss | 11 - pages/loading/text/index.js | 1 - pages/loading/text/index.json | 6 - pages/loading/text/index.wxml | 1 - pages/loading/text/index.wxss | 0 pages/loading/vertical/index.js | 1 - pages/loading/vertical/index.json | 6 - pages/loading/vertical/index.wxml | 4 - pages/loading/vertical/index.wxss | 7 - pages/meeting/index.json | 5 + pages/meeting/index.scss | 292 + pages/meeting/index.ts | 670 ++ pages/meeting/index.wxml | 96 + pages/message/base/index.js | 62 - pages/message/base/index.json | 7 - pages/message/base/index.wxml | 23 - pages/message/base/index.wxss | 7 - pages/message/message.d.ts | 1 - pages/message/message.js | 1 - pages/message/message.json | 8 - pages/message/message.wxml | 10 - pages/message/message.wxss | 6 - pages/message/theme/index.js | 41 - pages/message/theme/index.json | 7 - pages/message/theme/index.wxml | 19 - pages/message/theme/index.wxss | 7 - pages/navbar/back-home/index.js | 12 - pages/navbar/back-home/index.json | 7 - pages/navbar/back-home/index.wxml | 20 - pages/navbar/back-home/index.wxss | 23 - pages/navbar/base/index.js | 10 - pages/navbar/base/index.json | 6 - pages/navbar/base/index.wxml | 7 - pages/navbar/base/index.wxss | 0 pages/navbar/custom-color/index.js | 1 - pages/navbar/custom-color/index.json | 6 - pages/navbar/custom-color/index.wxml | 1 - pages/navbar/custom-color/index.wxss | 4 - pages/navbar/img/index.js | 5 - pages/navbar/img/index.json | 7 - pages/navbar/img/index.wxml | 5 - pages/navbar/img/index.wxss | 4 - pages/navbar/left-title/index.js | 5 - pages/navbar/left-title/index.json | 6 - pages/navbar/left-title/index.wxml | 14 - pages/navbar/left-title/index.wxss | 30 - pages/navbar/navbar.d.ts | 1 - pages/navbar/navbar.js | 1 - pages/navbar/navbar.json | 11 - pages/navbar/navbar.wxml | 20 - pages/navbar/navbar.wxss | 13 - pages/navbar/search/index.js | 1 - pages/navbar/search/index.json | 7 - pages/navbar/search/index.wxml | 5 - pages/navbar/search/index.wxss | 4 - pages/notice-bar/base/index.js | 1 - pages/notice-bar/base/index.json | 6 - pages/notice-bar/base/index.wxml | 1 - pages/notice-bar/base/index.wxss | 1 - pages/notice-bar/custom/index.js | 1 - pages/notice-bar/custom/index.json | 6 - pages/notice-bar/custom/index.wxml | 8 - pages/notice-bar/custom/index.wxss | 8 - pages/notice-bar/customization/index.js | 7 - pages/notice-bar/customization/index.json | 8 - pages/notice-bar/customization/index.wxml | 6 - pages/notice-bar/customization/index.wxss | 3 - pages/notice-bar/event/index.js | 15 - pages/notice-bar/event/index.json | 7 - pages/notice-bar/event/index.wxml | 11 - pages/notice-bar/event/index.wxss | 3 - pages/notice-bar/iconDemo/index.js | 5 - pages/notice-bar/iconDemo/index.json | 7 - pages/notice-bar/iconDemo/index.wxml | 5 - pages/notice-bar/iconDemo/index.wxss | 1 - pages/notice-bar/notice-bar.d.ts | 1 - pages/notice-bar/notice-bar.js | 4 - pages/notice-bar/notice-bar.json | 15 - pages/notice-bar/notice-bar.wxml | 30 - pages/notice-bar/notice-bar.wxss | 6 - pages/notice-bar/scrolling/index.js | 16 - pages/notice-bar/scrolling/index.json | 6 - pages/notice-bar/scrolling/index.wxml | 20 - pages/notice-bar/scrolling/index.wxss | 1 - pages/notice-bar/suffixIcon/index.js | 12 - pages/notice-bar/suffixIcon/index.json | 6 - pages/notice-bar/suffixIcon/index.wxml | 6 - pages/notice-bar/suffixIcon/index.wxss | 0 pages/notice-bar/theme/index.js | 1 - pages/notice-bar/theme/index.json | 6 - pages/notice-bar/theme/index.wxml | 4 - pages/notice-bar/theme/index.wxss | 1 - pages/overlay/base/index.js | 15 - pages/overlay/base/index.json | 7 - pages/overlay/base/index.wxml | 3 - pages/overlay/base/index.wxss | 0 pages/overlay/overlay.d.ts | 1 - pages/overlay/overlay.js | 1 - pages/overlay/overlay.json | 7 - pages/overlay/overlay.wxml | 7 - pages/overlay/overlay.wxss | 3 - pages/picker/area/index.js | 168 - pages/picker/area/index.json | 9 - pages/picker/area/index.wxml | 16 - pages/picker/area/index.wxss | 0 pages/picker/base/index.js | 61 - pages/picker/base/index.json | 9 - pages/picker/base/index.wxml | 32 - pages/picker/base/index.wxss | 3 - pages/picker/picker.d.ts | 1 - pages/picker/picker.js | 1 - pages/picker/picker.json | 8 - pages/picker/picker.wxml | 11 - pages/picker/picker.wxss | 0 pages/picker/with-title/index.js | 52 - pages/picker/with-title/index.json | 9 - pages/picker/with-title/index.wxml | 31 - pages/picker/with-title/index.wxss | 3 - pages/popup/base/index.js | 31 - pages/popup/base/index.json | 7 - pages/popup/base/index.wxml | 16 - pages/popup/base/index.wxss | 28 - pages/popup/custom-close/index.js | 36 - pages/popup/custom-close/index.json | 7 - pages/popup/custom-close/index.wxml | 9 - pages/popup/custom-close/index.wxss | 19 - pages/popup/popup.d.ts | 1 - pages/popup/popup.js | 24 - pages/popup/popup.json | 9 - pages/popup/popup.wxml | 11 - pages/popup/popup.wxss | 4 - pages/popup/with-title/index.js | 31 - pages/popup/with-title/index.json | 7 - pages/popup/with-title/index.wxml | 11 - pages/popup/with-title/index.wxss | 38 - pages/progress/base/index.js | 1 - pages/progress/base/index.json | 6 - pages/progress/base/index.wxml | 3 - pages/progress/base/index.wxss | 0 pages/progress/circle/index.js | 1 - pages/progress/circle/index.json | 6 - pages/progress/circle/index.wxml | 4 - pages/progress/circle/index.wxss | 0 pages/progress/custom/index.js | 1 - pages/progress/custom/index.json | 6 - pages/progress/custom/index.wxml | 2 - pages/progress/custom/index.wxss | 7 - pages/progress/line/index.js | 1 - pages/progress/line/index.json | 6 - pages/progress/line/index.wxml | 4 - pages/progress/line/index.wxss | 0 pages/progress/plump/index.js | 1 - pages/progress/plump/index.json | 6 - pages/progress/plump/index.wxml | 4 - pages/progress/plump/index.wxss | 0 pages/progress/progress.d.ts | 1 - pages/progress/progress.js | 1 - pages/progress/progress.json | 12 - pages/progress/progress.wxml | 22 - pages/progress/progress.wxss | 6 - pages/progress/transition/index.js | 19 - pages/progress/transition/index.json | 7 - pages/progress/transition/index.wxml | 7 - pages/progress/transition/index.wxss | 8 - pages/pull-down-refresh/base/index.js | 28 - pages/pull-down-refresh/base/index.json | 8 - pages/pull-down-refresh/base/index.wxml | 30 - pages/pull-down-refresh/base/index.wxss | 40 - .../pull-down-refresh/pull-down-refresh.d.ts | 1 - pages/pull-down-refresh/pull-down-refresh.js | 1 - .../pull-down-refresh/pull-down-refresh.json | 9 - .../pull-down-refresh/pull-down-refresh.wxml | 1 - .../pull-down-refresh/pull-down-refresh.wxss | 3 - pages/radio/align/index.js | 20 - pages/radio/align/index.json | 6 - pages/radio/align/index.wxml | 5 - pages/radio/align/index.wxss | 3 - pages/radio/base/index.js | 20 - pages/radio/base/index.json | 7 - pages/radio/base/index.wxml | 10 - pages/radio/base/index.wxss | 0 pages/radio/card/index.js | 18 - pages/radio/card/index.json | 7 - pages/radio/card/index.wxml | 5 - pages/radio/card/index.wxss | 5 - pages/radio/horizontal/index.js | 10 - pages/radio/horizontal/index.json | 7 - pages/radio/horizontal/index.wxml | 5 - pages/radio/horizontal/index.wxss | 6 - pages/radio/radio.d.ts | 1 - pages/radio/radio.js | 1 - pages/radio/radio.json | 12 - pages/radio/radio.wxml | 31 - pages/radio/radio.wxss | 9 - pages/radio/special/index.js | 17 - pages/radio/special/index.json | 7 - pages/radio/special/index.wxml | 15 - pages/radio/special/index.wxss | 49 - pages/radio/status/index.js | 16 - pages/radio/status/index.json | 7 - pages/radio/status/index.wxml | 4 - pages/radio/status/index.wxss | 0 pages/radio/theme/index.js | 16 - pages/radio/theme/index.json | 6 - pages/radio/theme/index.wxml | 5 - pages/radio/theme/index.wxss | 0 pages/rate/action/index.js | 16 - pages/rate/action/index.json | 6 - pages/rate/action/index.wxml | 13 - pages/rate/action/index.wxss | 18 - pages/rate/base/index.js | 13 - pages/rate/base/index.json | 6 - pages/rate/base/index.wxml | 5 - pages/rate/base/index.wxss | 22 - pages/rate/color/index.js | 1 - pages/rate/color/index.json | 6 - pages/rate/color/index.wxml | 8 - pages/rate/color/index.wxss | 28 - pages/rate/count/index.js | 14 - pages/rate/count/index.json | 6 - pages/rate/count/index.wxml | 5 - pages/rate/count/index.wxss | 18 - pages/rate/custom/index.js | 13 - pages/rate/custom/index.json | 6 - pages/rate/custom/index.wxml | 4 - pages/rate/custom/index.wxss | 22 - pages/rate/rate.d.ts | 1 - pages/rate/rate.js | 1 - pages/rate/rate.json | 14 - pages/rate/rate.wxml | 32 - pages/rate/rate.wxss | 0 pages/rate/show-text/index.js | 16 - pages/rate/show-text/index.json | 6 - pages/rate/show-text/index.wxml | 15 - pages/rate/show-text/index.wxss | 23 - pages/rate/size/index.js | 14 - pages/rate/size/index.json | 6 - pages/rate/size/index.wxml | 8 - pages/rate/size/index.wxss | 23 - pages/rate/special/index.js | 14 - pages/rate/special/index.json | 6 - pages/rate/special/index.wxml | 6 - pages/rate/special/index.wxss | 23 - pages/rate/un-filled/index.js | 13 - pages/rate/un-filled/index.json | 6 - pages/rate/un-filled/index.wxml | 5 - pages/rate/un-filled/index.wxss | 23 - pages/result/custom/index.js | 1 - pages/result/custom/index.json | 6 - pages/result/custom/index.wxml | 4 - pages/result/custom/index.wxss | 4 - pages/result/description/index.js | 26 - pages/result/description/index.json | 6 - pages/result/description/index.wxml | 5 - pages/result/description/index.wxss | 3 - pages/result/result-page.d.ts | 1 - pages/result/result-page.js | 5 - pages/result/result-page.json | 8 - pages/result/result-page.wxml | 8 - pages/result/result-page.wxss | 6 - pages/result/result.d.ts | 1 - pages/result/result.js | 5 - pages/result/result.json | 10 - pages/result/result.wxml | 18 - pages/result/result.wxss | 6 - pages/result/theme/index.js | 22 - pages/result/theme/index.json | 6 - pages/result/theme/index.wxml | 5 - pages/result/theme/index.wxss | 3 - pages/search/action/index.js | 34 - pages/search/action/index.json | 5 - pages/search/action/index.wxml | 12 - pages/search/action/index.wxss | 4 - pages/search/base/index.js | 5 - pages/search/base/index.json | 5 - pages/search/base/index.wxml | 3 - pages/search/base/index.wxss | 4 - pages/search/other/index.js | 11 - pages/search/other/index.json | 5 - pages/search/other/index.wxml | 3 - pages/search/other/index.wxss | 4 - pages/search/search.d.ts | 1 - pages/search/search.js | 1 - pages/search/search.json | 9 - pages/search/search.wxml | 16 - pages/search/search.wxss | 0 pages/search/shape/index.js | 13 - pages/search/shape/index.json | 5 - pages/search/shape/index.wxml | 7 - pages/search/shape/index.wxss | 8 - pages/side-bar/base/index.js | 78 - pages/side-bar/base/index.json | 9 - pages/side-bar/base/index.wxml | 26 - pages/side-bar/base/index.wxss | 31 - pages/side-bar/custom/index.js | 78 - pages/side-bar/custom/index.json | 9 - pages/side-bar/custom/index.wxml | 26 - pages/side-bar/custom/index.wxss | 36 - pages/side-bar/side-bar.js | 9 - pages/side-bar/side-bar.json | 5 - pages/side-bar/side-bar.wxml | 23 - pages/side-bar/side-bar.wxss | 7 - pages/side-bar/switch/index.js | 52 - pages/side-bar/switch/index.json | 10 - pages/side-bar/switch/index.wxml | 31 - pages/side-bar/switch/index.wxss | 35 - pages/side-bar/with-icon/index.js | 83 - pages/side-bar/with-icon/index.json | 9 - pages/side-bar/with-icon/index.wxml | 27 - pages/side-bar/with-icon/index.wxss | 31 - pages/skeleton/animation/index.js | 16 - pages/skeleton/animation/index.json | 6 - pages/skeleton/animation/index.wxml | 6 - pages/skeleton/animation/index.wxss | 11 - pages/skeleton/cell-group/index.js | 7 - pages/skeleton/cell-group/index.json | 6 - pages/skeleton/cell-group/index.wxml | 9 - pages/skeleton/cell-group/index.wxss | 13 - pages/skeleton/grid/index.js | 20 - pages/skeleton/grid/index.json | 6 - pages/skeleton/grid/index.wxml | 3 - pages/skeleton/grid/index.wxss | 4 - pages/skeleton/image-group/index.js | 5 - pages/skeleton/image-group/index.json | 6 - pages/skeleton/image-group/index.wxml | 4 - pages/skeleton/image-group/index.wxss | 5 - pages/skeleton/skeleton.d.ts | 1 - pages/skeleton/skeleton.js | 26 - pages/skeleton/skeleton.json | 12 - pages/skeleton/skeleton.wxml | 23 - pages/skeleton/skeleton.wxss | 3 - pages/skeleton/theme/index.js | 26 - pages/skeleton/theme/index.json | 6 - pages/skeleton/theme/index.wxml | 6 - pages/skeleton/theme/index.wxss | 11 - pages/slider/base/index.js | 1 - pages/slider/base/index.json | 6 - pages/slider/base/index.wxml | 1 - pages/slider/base/index.wxss | 0 pages/slider/capsule/index.js | 12 - pages/slider/capsule/index.json | 6 - pages/slider/capsule/index.wxml | 9 - pages/slider/capsule/index.wxss | 10 - pages/slider/disabled/index.js | 12 - pages/slider/disabled/index.json | 6 - pages/slider/disabled/index.wxml | 9 - pages/slider/disabled/index.wxss | 5 - pages/slider/label/index.js | 17 - pages/slider/label/index.json | 6 - pages/slider/label/index.wxml | 9 - pages/slider/label/index.wxss | 9 - pages/slider/max/index.js | 6 - pages/slider/max/index.json | 6 - pages/slider/max/index.wxml | 1 - pages/slider/max/index.wxss | 0 pages/slider/range/index.js | 1 - pages/slider/range/index.json | 6 - pages/slider/range/index.wxml | 1 - pages/slider/range/index.wxss | 0 pages/slider/slider.d.ts | 1 - pages/slider/slider.js | 1 - pages/slider/slider.json | 12 - pages/slider/slider.wxml | 31 - pages/slider/slider.wxss | 15 - pages/slider/step/index.js | 20 - pages/slider/step/index.json | 6 - pages/slider/step/index.wxml | 9 - pages/slider/step/index.wxss | 9 - pages/stepper/base/index.js | 1 - pages/stepper/base/index.json | 6 - pages/stepper/base/index.wxml | 3 - pages/stepper/base/index.wxss | 4 - pages/stepper/min-max/index.js | 1 - pages/stepper/min-max/index.json | 6 - pages/stepper/min-max/index.wxml | 5 - pages/stepper/min-max/index.wxss | 7 - pages/stepper/size/index.js | 16 - pages/stepper/size/index.json | 7 - pages/stepper/size/index.wxml | 5 - pages/stepper/size/index.wxss | 7 - pages/stepper/status/index.js | 1 - pages/stepper/status/index.json | 6 - pages/stepper/status/index.wxml | 3 - pages/stepper/status/index.wxss | 4 - pages/stepper/stepper.d.ts | 1 - pages/stepper/stepper.js | 1 - pages/stepper/stepper.json | 10 - pages/stepper/stepper.wxml | 19 - pages/stepper/stepper.wxss | 0 pages/stepper/theme/index.js | 1 - pages/stepper/theme/index.json | 6 - pages/stepper/theme/index.wxml | 5 - pages/stepper/theme/index.wxss | 7 - pages/steps/horizontal/index.js | 23 - pages/steps/horizontal/index.json | 7 - pages/steps/horizontal/index.wxml | 27 - pages/steps/horizontal/index.wxss | 5 - pages/steps/special/index.js | 20 - pages/steps/special/index.json | 8 - pages/steps/special/index.wxml | 24 - pages/steps/special/index.wxss | 5 - pages/steps/status/index.js | 23 - pages/steps/status/index.json | 7 - pages/steps/status/index.wxml | 22 - pages/steps/status/index.wxss | 5 - pages/steps/steps.d.ts | 1 - pages/steps/steps.js | 1 - pages/steps/steps.json | 9 - pages/steps/steps.wxml | 18 - pages/steps/steps.wxss | 10 - pages/steps/vertical/index.js | 23 - pages/steps/vertical/index.json | 7 - pages/steps/vertical/index.wxml | 51 - pages/steps/vertical/index.wxss | 5 - pages/sticky/base/index.js | 1 - pages/sticky/base/index.json | 7 - pages/sticky/base/index.wxml | 3 - pages/sticky/base/index.wxss | 3 - pages/sticky/container/index.js | 13 - pages/sticky/container/index.json | 7 - pages/sticky/container/index.wxml | 5 - pages/sticky/container/index.wxss | 15 - pages/sticky/offset/index.js | 1 - pages/sticky/offset/index.json | 7 - pages/sticky/offset/index.wxml | 3 - pages/sticky/offset/index.wxss | 4 - pages/sticky/sticky.d.ts | 1 - pages/sticky/sticky.js | 1 - pages/sticky/sticky.json | 8 - pages/sticky/sticky.wxml | 13 - pages/sticky/sticky.wxss | 3 - pages/swipe-cell/double/index.js | 22 - pages/swipe-cell/double/index.json | 7 - pages/swipe-cell/double/index.wxml | 3 - pages/swipe-cell/double/index.wxss | 16 - pages/swipe-cell/icon/index.js | 50 - pages/swipe-cell/icon/index.json | 8 - pages/swipe-cell/icon/index.wxml | 27 - pages/swipe-cell/icon/index.wxss | 32 - pages/swipe-cell/left/index.js | 32 - pages/swipe-cell/left/index.json | 7 - pages/swipe-cell/left/index.wxml | 28 - pages/swipe-cell/left/index.wxss | 24 - pages/swipe-cell/right/index.js | 7 - pages/swipe-cell/right/index.json | 7 - pages/swipe-cell/right/index.wxml | 4 - pages/swipe-cell/right/index.wxss | 12 - pages/swipe-cell/swipe-cell.d.ts | 1 - pages/swipe-cell/swipe-cell.js | 29 - pages/swipe-cell/swipe-cell.json | 9 - pages/swipe-cell/swipe-cell.wxml | 16 - pages/swipe-cell/swipe-cell.wxss | 16 - pages/swiper/base/index.js | 31 - pages/swiper/base/index.json | 6 - pages/swiper/base/index.wxml | 11 - pages/swiper/base/index.wxss | 0 pages/swiper/cards/index.js | 27 - pages/swiper/cards/index.json | 6 - pages/swiper/cards/index.wxml | 34 - pages/swiper/cards/index.wxss | 18 - pages/swiper/custom/index.js | 18 - pages/swiper/custom/index.json | 6 - pages/swiper/custom/index.wxml | 8 - pages/swiper/custom/index.wxss | 4 - pages/swiper/fraction/index.js | 20 - pages/swiper/fraction/index.json | 6 - pages/swiper/fraction/index.wxml | 10 - pages/swiper/fraction/index.wxss | 4 - pages/swiper/nav-btn/index.js | 19 - pages/swiper/nav-btn/index.json | 6 - pages/swiper/nav-btn/index.wxml | 10 - pages/swiper/nav-btn/index.wxss | 4 - pages/swiper/swiper.d.ts | 1 - pages/swiper/swiper.js | 1 - pages/swiper/swiper.json | 13 - pages/swiper/swiper.wxml | 30 - pages/swiper/swiper.wxss | 3 - pages/swiper/vertical/index.js | 44 - pages/swiper/vertical/index.json | 8 - pages/swiper/vertical/index.wxml | 55 - pages/swiper/vertical/index.wxss | 63 - pages/switch/base/index.js | 12 - pages/switch/base/index.json | 7 - pages/switch/base/index.wxml | 3 - pages/switch/base/index.wxss | 0 pages/switch/color/index.js | 12 - pages/switch/color/index.json | 7 - pages/switch/color/index.wxml | 14 - pages/switch/color/index.wxss | 3 - pages/switch/label/index.js | 12 - pages/switch/label/index.json | 7 - pages/switch/label/index.wxml | 7 - pages/switch/label/index.wxss | 0 pages/switch/size/index.js | 12 - pages/switch/size/index.json | 7 - pages/switch/size/index.wxml | 9 - pages/switch/size/index.wxss | 0 pages/switch/status/index.js | 5 - pages/switch/status/index.json | 7 - pages/switch/status/index.wxml | 21 - pages/switch/status/index.wxss | 7 - pages/switch/switch.d.ts | 1 - pages/switch/switch.js | 1 - pages/switch/switch.json | 11 - pages/switch/switch.wxml | 24 - pages/switch/switch.wxss | 3 - pages/tab-bar/badge/index.js | 10 - pages/tab-bar/badge/index.json | 7 - pages/tab-bar/badge/index.wxml | 6 - pages/tab-bar/badge/index.wxss | 0 pages/tab-bar/base/index.js | 19 - pages/tab-bar/base/index.json | 7 - pages/tab-bar/base/index.wxml | 5 - pages/tab-bar/base/index.wxss | 0 pages/tab-bar/custom/index.js | 19 - pages/tab-bar/custom/index.json | 7 - pages/tab-bar/custom/index.wxml | 11 - pages/tab-bar/custom/index.wxss | 7 - pages/tab-bar/icon-only/index.js | 19 - pages/tab-bar/icon-only/index.json | 7 - pages/tab-bar/icon-only/index.wxml | 9 - pages/tab-bar/icon-only/index.wxss | 0 pages/tab-bar/round/index.js | 19 - pages/tab-bar/round/index.json | 7 - pages/tab-bar/round/index.wxml | 11 - pages/tab-bar/round/index.wxss | 0 pages/tab-bar/sub/index.js | 38 - pages/tab-bar/sub/index.json | 7 - pages/tab-bar/sub/index.wxml | 5 - pages/tab-bar/sub/index.wxss | 0 pages/tab-bar/tab-bar.d.ts | 1 - pages/tab-bar/tab-bar.js | 8 - pages/tab-bar/tab-bar.json | 12 - pages/tab-bar/tab-bar.wxml | 31 - pages/tab-bar/tab-bar.wxss | 12 - pages/tab-bar/text-only/index.js | 19 - pages/tab-bar/text-only/index.json | 7 - pages/tab-bar/text-only/index.wxml | 3 - pages/tab-bar/text-only/index.wxss | 0 pages/tabs/base/index.js | 20 - pages/tabs/base/index.json | 7 - pages/tabs/base/index.wxml | 33 - pages/tabs/base/index.wxss | 3 - pages/tabs/scroll/index.js | 11 - pages/tabs/scroll/index.json | 7 - pages/tabs/scroll/index.wxml | 3 - pages/tabs/scroll/index.wxss | 0 pages/tabs/size/index.js | 11 - pages/tabs/size/index.json | 7 - pages/tabs/size/index.wxml | 15 - pages/tabs/size/index.wxss | 3 - pages/tabs/status/index.js | 17 - pages/tabs/status/index.json | 7 - pages/tabs/status/index.wxml | 5 - pages/tabs/status/index.wxss | 0 pages/tabs/tabs.d.ts | 1 - pages/tabs/tabs.js | 1 - pages/tabs/tabs.json | 13 - pages/tabs/tabs.wxml | 28 - pages/tabs/tabs.wxss | 0 pages/tabs/theme/index.js | 1 - pages/tabs/theme/index.json | 7 - pages/tabs/theme/index.wxml | 21 - pages/tabs/theme/index.wxss | 0 pages/tabs/with-badge/index.js | 1 - pages/tabs/with-badge/index.json | 7 - pages/tabs/with-badge/index.wxml | 5 - pages/tabs/with-badge/index.wxss | 0 pages/tabs/with-content/index.js | 14 - pages/tabs/with-content/index.json | 7 - pages/tabs/with-content/index.wxml | 6 - pages/tabs/with-content/index.wxss | 3 - pages/tabs/with-icon/index.js | 1 - pages/tabs/with-icon/index.json | 7 - pages/tabs/with-icon/index.wxml | 3 - pages/tabs/with-icon/index.wxss | 0 pages/tag/checkable/index.js | 5 - pages/tag/checkable/index.json | 6 - pages/tag/checkable/index.wxml | 15 - pages/tag/checkable/index.wxss | 34 - pages/tag/closable/index.js | 18 - pages/tag/closable/index.wxml | 4 - pages/tag/closable/index.wxss | 7 - pages/tag/size/index.js | 1 - pages/tag/size/index.json | 6 - pages/tag/size/index.wxml | 13 - pages/tag/size/index.wxss | 20 - pages/tag/tag.d.ts | 1 - pages/tag/tag.js | 1 - pages/tag/tag.json | 11 - pages/tag/tag.wxml | 19 - pages/tag/tag.wxss | 3 - pages/tag/theme/index.js | 1 - pages/tag/theme/index.json | 6 - pages/tag/theme/index.wxml | 31 - pages/tag/theme/index.wxss | 11 - pages/tag/type/index.js | 1 - pages/tag/type/index.json | 6 - pages/tag/type/index.wxml | 27 - pages/tag/type/index.wxss | 17 - pages/textarea/autosize/index.js | 1 - pages/textarea/autosize/index.json | 6 - pages/textarea/autosize/index.wxml | 1 - pages/textarea/autosize/index.wxss | 0 pages/textarea/base/index.js | 1 - pages/textarea/base/index.json | 6 - pages/textarea/base/index.wxml | 1 - pages/textarea/base/index.wxss | 3 - pages/textarea/card/index.js | 5 - pages/textarea/card/index.json | 6 - pages/textarea/card/index.wxml | 11 - pages/textarea/card/index.wxss | 9 - pages/textarea/custom/index.js | 5 - pages/textarea/custom/index.json | 6 - pages/textarea/custom/index.wxml | 12 - pages/textarea/custom/index.wxss | 17 - pages/textarea/disabled/index.js | 1 - pages/textarea/disabled/index.json | 6 - pages/textarea/disabled/index.wxml | 8 - pages/textarea/disabled/index.wxss | 3 - pages/textarea/label/index.js | 1 - pages/textarea/label/index.json | 6 - pages/textarea/label/index.wxml | 1 - pages/textarea/label/index.wxss | 3 - pages/textarea/maxcharacter/index.js | 1 - pages/textarea/maxcharacter/index.json | 6 - pages/textarea/maxcharacter/index.wxml | 8 - pages/textarea/maxcharacter/index.wxss | 3 - pages/textarea/maxlength/index.js | 1 - pages/textarea/maxlength/index.json | 6 - pages/textarea/maxlength/index.wxml | 8 - pages/textarea/maxlength/index.wxss | 3 - pages/textarea/textarea.d.ts | 1 - pages/textarea/textarea.js | 1 - pages/textarea/textarea.json | 13 - pages/textarea/textarea.wxml | 28 - pages/textarea/textarea.wxss | 0 pages/toast/base/index.js | 48 - pages/toast/base/index.json | 7 - pages/toast/base/index.wxml | 7 - pages/toast/base/index.wxss | 0 pages/toast/close/index.js | 18 - pages/toast/close/index.json | 6 - pages/toast/close/index.wxml | 6 - pages/toast/close/index.wxss | 7 - pages/toast/cover/index.js | 15 - pages/toast/cover/index.json | 6 - pages/toast/cover/index.wxml | 3 - pages/toast/cover/index.wxss | 0 pages/toast/display/index.js | 50 - pages/toast/display/index.json | 6 - pages/toast/display/index.wxml | 11 - pages/toast/display/index.wxss | 0 pages/toast/theme/index.js | 33 - pages/toast/theme/index.json | 7 - pages/toast/theme/index.wxml | 5 - pages/toast/theme/index.wxss | 0 pages/toast/toast.d.ts | 1 - pages/toast/toast.js | 1 - pages/toast/toast.json | 11 - pages/toast/toast.wxml | 16 - pages/toast/toast.wxss | 11 - pages/transition/api.md | 10 - pages/transition/appear/index.d.ts | 1 - pages/transition/appear/index.js | 20 - pages/transition/appear/index.json | 7 - pages/transition/appear/index.wxml | 7 - pages/transition/base/index.d.ts | 1 - pages/transition/base/index.js | 22 - pages/transition/base/index.json | 7 - pages/transition/base/index.wxml | 5 - pages/transition/custom/index.d.ts | 1 - pages/transition/custom/index.js | 20 - pages/transition/custom/index.json | 7 - pages/transition/custom/index.wxml | 5 - pages/transition/custom/index.wxss | 18 - pages/transition/destroy/index.d.ts | 1 - pages/transition/destroy/index.js | 20 - pages/transition/destroy/index.json | 7 - pages/transition/destroy/index.wxml | 5 - pages/transition/transition.d.ts | 1 - pages/transition/transition.js | 10 - pages/transition/transition.json | 9 - pages/transition/transition.wxml | 16 - pages/transition/transition.wxss | 24 - pages/tree-select/base/index.js | 35 - pages/tree-select/base/index.json | 6 - pages/tree-select/base/index.wxml | 1 - pages/tree-select/base/index.wxss | 0 pages/tree-select/multiple/index.js | 35 - pages/tree-select/multiple/index.json | 6 - pages/tree-select/multiple/index.wxml | 1 - pages/tree-select/multiple/index.wxss | 0 pages/tree-select/normal/index.js | 134 - pages/tree-select/normal/index.json | 6 - pages/tree-select/normal/index.wxml | 1 - pages/tree-select/normal/index.wxss | 0 pages/tree-select/tree-select.js | 1 - pages/tree-select/tree-select.json | 8 - pages/tree-select/tree-select.wxml | 15 - pages/tree-select/tree-select.wxss | 0 pages/upload/messageFile/index.js | 35 - pages/upload/messageFile/index.json | 6 - pages/upload/messageFile/index.wxml | 12 - pages/upload/messageFile/index.wxss | 0 pages/upload/multiple/index.js | 48 - pages/upload/multiple/index.json | 6 - pages/upload/multiple/index.wxml | 10 - pages/upload/multiple/index.wxss | 0 pages/upload/single/index.js | 53 - pages/upload/single/index.json | 6 - pages/upload/single/index.wxml | 10 - pages/upload/single/index.wxss | 0 pages/upload/status/index.js | 58 - pages/upload/status/index.json | 6 - pages/upload/status/index.wxml | 10 - pages/upload/status/index.wxss | 0 pages/upload/upload.d.ts | 1 - pages/upload/upload.js | 1 - pages/upload/upload.json | 9 - pages/upload/upload.wxml | 28 - pages/upload/upload.wxss | 10 - project.config.json | 347 +- project.private.config.json | 3 +- utils/agora.ts | 69 + utils/gulpError.js | 3 - utils/request.js | 50 + utils/singlr.ts | 259 + utils/utils.ts | 26 + 2215 files changed, 33356 insertions(+), 20836 deletions(-) create mode 100644 api/form/index.ts create mode 100644 api/meeting/index.ts delete mode 100644 assets/TDesignLogo@2x.png create mode 100644 assets/icon1-active.png create mode 100644 assets/icon1.png create mode 100644 assets/icon2-active.png create mode 100644 assets/icon2.png create mode 100644 assets/icon3-active.png create mode 100644 assets/icon3.png create mode 100644 assets/icon4.png create mode 100644 assets/icon5.png create mode 100644 assets/icon6.png create mode 100644 assets/icon7-active.png create mode 100644 assets/icon7.png create mode 100644 assets/icon8.png create mode 100644 assets/icon9.png delete mode 100644 components/demo-block/index.d.ts delete mode 100644 components/demo-block/index.js delete mode 100644 components/demo-block/index.json delete mode 100644 components/demo-block/index.wxml delete mode 100644 components/demo-block/index.wxss create mode 100644 components/header-tab/index.json create mode 100644 components/header-tab/index.scss create mode 100644 components/header-tab/index.ts create mode 100644 components/header-tab/index.wxml delete mode 100644 components/pull-down-list/index.d.ts delete mode 100644 components/pull-down-list/index.js delete mode 100644 components/pull-down-list/index.json delete mode 100644 components/pull-down-list/index.wxml delete mode 100644 components/pull-down-list/index.wxss create mode 100644 components/status-bar-height/index.json rename demos/radio/basic/basic.wxss => components/status-bar-height/index.scss (100%) create mode 100644 components/status-bar-height/index.ts create mode 100644 components/status-bar-height/index.wxml delete mode 100644 demos/radio/basic/basic.d.ts delete mode 100644 demos/radio/basic/basic.js delete mode 100644 demos/radio/basic/basic.json delete mode 100644 demos/radio/basic/basic.wxml delete mode 100644 demos/radio/group/group.d.ts delete mode 100644 demos/radio/group/group.js delete mode 100644 demos/radio/group/group.json delete mode 100644 demos/radio/group/group.wxml create mode 100644 lib/agora-miniapp-sdk.js create mode 100644 miniprogram_npm/dayjs/index.js create mode 100644 miniprogram_npm/dayjs/index.js.map create mode 100644 miniprogram_npm/fast-deep-equal/index.js create mode 100644 miniprogram_npm/fast-deep-equal/index.js.map create mode 100644 miniprogram_npm/miniprogram-computed/index.js create mode 100644 miniprogram_npm/rfdc/index.js create mode 100644 miniprogram_npm/rfdc/index.js.map create mode 100644 miniprogram_npm/signalr-for-wx/AbortController.js create mode 100644 miniprogram_npm/signalr-for-wx/DefualtRequest.js create mode 100644 miniprogram_npm/signalr-for-wx/Errors.js create mode 100644 miniprogram_npm/signalr-for-wx/HandshakeProtocol.js create mode 100644 miniprogram_npm/signalr-for-wx/HttpConnection.js create mode 100644 miniprogram_npm/signalr-for-wx/HubConnection.js create mode 100644 miniprogram_npm/signalr-for-wx/HubConnectionBuilder.js create mode 100644 miniprogram_npm/signalr-for-wx/IConnection.js create mode 100644 miniprogram_npm/signalr-for-wx/IHttpConnectionOptions.js create mode 100644 miniprogram_npm/signalr-for-wx/IHubProtocol.js create mode 100644 miniprogram_npm/signalr-for-wx/ILogger.js create mode 100644 miniprogram_npm/signalr-for-wx/ITransport.js create mode 100644 miniprogram_npm/signalr-for-wx/JsonHubProtocol.js create mode 100644 miniprogram_npm/signalr-for-wx/Loggers.js create mode 100644 miniprogram_npm/signalr-for-wx/LongPollingTransport.js create mode 100644 miniprogram_npm/signalr-for-wx/Polyfills.js create mode 100644 miniprogram_npm/signalr-for-wx/Stream.js create mode 100644 miniprogram_npm/signalr-for-wx/TextMessageFormat.js create mode 100644 miniprogram_npm/signalr-for-wx/Utils.js create mode 100644 miniprogram_npm/signalr-for-wx/WechatVersionDiff.js create mode 100644 miniprogram_npm/signalr-for-wx/WxSocketTransport.js create mode 100644 miniprogram_npm/signalr-for-wx/index.js create mode 100644 miniprogram_npm/signalr-for-wx/wx-request/index.js create mode 100644 miniprogram_npm/signalr-for-wx/wx-request/model.js rename demos/radio/group/group.wxss => miniprogram_npm/signalr-for-wx/wx-request/model/RequestConfig.js (100%) create mode 100644 miniprogram_npm/signalr-for-wx/wx-request/model/RequestMethod.js rename pages/action-sheet/align/index.wxss => miniprogram_npm/signalr-for-wx/wx-request/model/RequestOption.js (100%) rename pages/action-sheet/grid/index.wxss => miniprogram_npm/signalr-for-wx/wx-request/model/ResponseOptions.js (100%) create mode 100644 miniprogram_npm/signalr-for-wx/wx-request/model/ResponseType.js create mode 100644 miniprogram_npm/tdesign-miniprogram/.wechatide.ib.json delete mode 100644 miniprogram_npm/tdesign-miniprogram/checkbox-group/README.md create mode 100644 miniprogram_npm/tdesign-miniprogram/col/README.en-US.md create mode 100644 miniprogram_npm/tdesign-miniprogram/col/README.md create mode 100644 miniprogram_npm/tdesign-miniprogram/col/col.d.ts create mode 100644 miniprogram_npm/tdesign-miniprogram/col/col.js create mode 100644 miniprogram_npm/tdesign-miniprogram/col/col.json create mode 100644 miniprogram_npm/tdesign-miniprogram/col/col.wxml create mode 100644 miniprogram_npm/tdesign-miniprogram/col/col.wxs create mode 100644 miniprogram_npm/tdesign-miniprogram/col/col.wxss create mode 100644 miniprogram_npm/tdesign-miniprogram/col/props.d.ts create mode 100644 miniprogram_npm/tdesign-miniprogram/col/props.js create mode 100644 miniprogram_npm/tdesign-miniprogram/col/type.d.ts rename pages/home/home.d.ts => miniprogram_npm/tdesign-miniprogram/col/type.js (100%) create mode 100644 miniprogram_npm/tdesign-miniprogram/color-picker/README.en-US.md create mode 100644 miniprogram_npm/tdesign-miniprogram/color-picker/README.md create mode 100644 miniprogram_npm/tdesign-miniprogram/color-picker/color-picker.d.ts create mode 100644 miniprogram_npm/tdesign-miniprogram/color-picker/color-picker.js rename pages/tag/closable/index.json => miniprogram_npm/tdesign-miniprogram/color-picker/color-picker.json (54%) create mode 100644 miniprogram_npm/tdesign-miniprogram/color-picker/color-picker.wxml create mode 100644 miniprogram_npm/tdesign-miniprogram/color-picker/color-picker.wxss create mode 100644 miniprogram_npm/tdesign-miniprogram/color-picker/constants.d.ts create mode 100644 miniprogram_npm/tdesign-miniprogram/color-picker/constants.js create mode 100644 miniprogram_npm/tdesign-miniprogram/color-picker/interfaces.d.ts create mode 100644 miniprogram_npm/tdesign-miniprogram/color-picker/interfaces.js create mode 100644 miniprogram_npm/tdesign-miniprogram/color-picker/props.d.ts create mode 100644 miniprogram_npm/tdesign-miniprogram/color-picker/props.js create mode 100644 miniprogram_npm/tdesign-miniprogram/color-picker/template.wxml create mode 100644 miniprogram_npm/tdesign-miniprogram/color-picker/type.d.ts create mode 100644 miniprogram_npm/tdesign-miniprogram/color-picker/type.js create mode 100644 miniprogram_npm/tdesign-miniprogram/color-picker/utils.d.ts create mode 100644 miniprogram_npm/tdesign-miniprogram/color-picker/utils.js create mode 100644 miniprogram_npm/tdesign-miniprogram/common/shared/color-picker/cmyk.d.ts create mode 100644 miniprogram_npm/tdesign-miniprogram/common/shared/color-picker/cmyk.js create mode 100644 miniprogram_npm/tdesign-miniprogram/common/shared/color-picker/color.d.ts create mode 100644 miniprogram_npm/tdesign-miniprogram/common/shared/color-picker/color.js create mode 100644 miniprogram_npm/tdesign-miniprogram/common/shared/color-picker/gradient.d.ts create mode 100644 miniprogram_npm/tdesign-miniprogram/common/shared/color-picker/gradient.js create mode 100644 miniprogram_npm/tdesign-miniprogram/common/shared/color-picker/index.d.ts create mode 100644 miniprogram_npm/tdesign-miniprogram/common/shared/color-picker/index.js rename pages/action-sheet/list/index.wxss => miniprogram_npm/tdesign-miniprogram/common/style/icons.wxss (100%) create mode 100644 miniprogram_npm/tdesign-miniprogram/common/style/theme/_components.wxss create mode 100644 miniprogram_npm/tdesign-miniprogram/common/style/theme/_dark.wxss create mode 100644 miniprogram_npm/tdesign-miniprogram/common/style/theme/_font.wxss create mode 100644 miniprogram_npm/tdesign-miniprogram/common/style/theme/_light.wxss create mode 100644 miniprogram_npm/tdesign-miniprogram/common/style/theme/_radius.wxss create mode 100644 miniprogram_npm/tdesign-miniprogram/common/style/theme/_spacer.wxss create mode 100644 miniprogram_npm/tdesign-miniprogram/common/wechat.d.ts create mode 100644 miniprogram_npm/tdesign-miniprogram/common/wechat.js create mode 100644 miniprogram_npm/tdesign-miniprogram/date-time-picker/locale/dayjs.d.ts create mode 100644 miniprogram_npm/tdesign-miniprogram/date-time-picker/locale/dayjs.js create mode 100644 miniprogram_npm/tdesign-miniprogram/date-time-picker/locale/ja.d.ts create mode 100644 miniprogram_npm/tdesign-miniprogram/date-time-picker/locale/ja.js create mode 100644 miniprogram_npm/tdesign-miniprogram/date-time-picker/locale/ko.d.ts create mode 100644 miniprogram_npm/tdesign-miniprogram/date-time-picker/locale/ko.js create mode 100644 miniprogram_npm/tdesign-miniprogram/date-time-picker/locale/ru.d.ts create mode 100644 miniprogram_npm/tdesign-miniprogram/date-time-picker/locale/ru.js create mode 100644 miniprogram_npm/tdesign-miniprogram/date-time-picker/locale/tc.d.ts create mode 100644 miniprogram_npm/tdesign-miniprogram/date-time-picker/locale/tc.js create mode 100644 miniprogram_npm/tdesign-miniprogram/fab/draggable/draggable.d.ts create mode 100644 miniprogram_npm/tdesign-miniprogram/fab/draggable/draggable.js create mode 100644 miniprogram_npm/tdesign-miniprogram/fab/draggable/draggable.json create mode 100644 miniprogram_npm/tdesign-miniprogram/fab/draggable/draggable.wxml create mode 100644 miniprogram_npm/tdesign-miniprogram/fab/draggable/draggable.wxss create mode 100644 miniprogram_npm/tdesign-miniprogram/fab/draggable/index.d.ts create mode 100644 miniprogram_npm/tdesign-miniprogram/fab/draggable/index.js create mode 100644 miniprogram_npm/tdesign-miniprogram/fab/draggable/props.d.ts create mode 100644 miniprogram_npm/tdesign-miniprogram/fab/draggable/props.js create mode 100644 miniprogram_npm/tdesign-miniprogram/fab/draggable/type.d.ts create mode 100644 miniprogram_npm/tdesign-miniprogram/fab/draggable/type.js create mode 100644 miniprogram_npm/tdesign-miniprogram/fab/template/draggable.wxml create mode 100644 miniprogram_npm/tdesign-miniprogram/fab/template/view.wxml create mode 100644 miniprogram_npm/tdesign-miniprogram/guide/README.en-US.md create mode 100644 miniprogram_npm/tdesign-miniprogram/guide/README.md create mode 100644 miniprogram_npm/tdesign-miniprogram/guide/content.wxml create mode 100644 miniprogram_npm/tdesign-miniprogram/guide/guide.d.ts create mode 100644 miniprogram_npm/tdesign-miniprogram/guide/guide.js create mode 100644 miniprogram_npm/tdesign-miniprogram/guide/guide.json create mode 100644 miniprogram_npm/tdesign-miniprogram/guide/guide.wxml create mode 100644 miniprogram_npm/tdesign-miniprogram/guide/guide.wxss create mode 100644 miniprogram_npm/tdesign-miniprogram/guide/props.d.ts create mode 100644 miniprogram_npm/tdesign-miniprogram/guide/props.js create mode 100644 miniprogram_npm/tdesign-miniprogram/guide/type.d.ts create mode 100644 miniprogram_npm/tdesign-miniprogram/guide/type.js create mode 100644 miniprogram_npm/tdesign-miniprogram/icon/README.en-US.md create mode 100644 miniprogram_npm/tdesign-miniprogram/image-viewer/README.en-US.md create mode 100644 miniprogram_npm/tdesign-miniprogram/index.d.ts create mode 100644 miniprogram_npm/tdesign-miniprogram/index.js create mode 100644 miniprogram_npm/tdesign-miniprogram/indexes/indexes.wxs create mode 100644 miniprogram_npm/tdesign-miniprogram/message-item/index.d.ts create mode 100644 miniprogram_npm/tdesign-miniprogram/message-item/index.js create mode 100644 miniprogram_npm/tdesign-miniprogram/message-item/message-item.d.ts create mode 100644 miniprogram_npm/tdesign-miniprogram/message-item/message-item.js create mode 100644 miniprogram_npm/tdesign-miniprogram/message-item/message-item.json create mode 100644 miniprogram_npm/tdesign-miniprogram/message-item/message-item.wxml rename miniprogram_npm/tdesign-miniprogram/{message/message.wxs => message-item/message-item.wxs} (68%) create mode 100644 miniprogram_npm/tdesign-miniprogram/message-item/message-item.wxss create mode 100644 miniprogram_npm/tdesign-miniprogram/miniprogram_npm/dayjs/locale/en.js create mode 100644 miniprogram_npm/tdesign-miniprogram/miniprogram_npm/dayjs/locale/ja.js create mode 100644 miniprogram_npm/tdesign-miniprogram/miniprogram_npm/dayjs/locale/ko.js create mode 100644 miniprogram_npm/tdesign-miniprogram/miniprogram_npm/dayjs/locale/ru.js create mode 100644 miniprogram_npm/tdesign-miniprogram/miniprogram_npm/dayjs/locale/zh-cn.js create mode 100644 miniprogram_npm/tdesign-miniprogram/miniprogram_npm/dayjs/locale/zh-tw.js create mode 100644 miniprogram_npm/tdesign-miniprogram/miniprogram_npm/dayjs/plugin/localeData.js create mode 100644 miniprogram_npm/tdesign-miniprogram/miniprogram_npm/lodash/_Symbol.js create mode 100644 miniprogram_npm/tdesign-miniprogram/miniprogram_npm/lodash/_baseGetTag.js create mode 100644 miniprogram_npm/tdesign-miniprogram/miniprogram_npm/lodash/_freeGlobal.js create mode 100644 miniprogram_npm/tdesign-miniprogram/miniprogram_npm/lodash/_getRawTag.js create mode 100644 miniprogram_npm/tdesign-miniprogram/miniprogram_npm/lodash/_objectToString.js create mode 100644 miniprogram_npm/tdesign-miniprogram/miniprogram_npm/lodash/_root.js create mode 100644 miniprogram_npm/tdesign-miniprogram/miniprogram_npm/lodash/isArray.js create mode 100644 miniprogram_npm/tdesign-miniprogram/miniprogram_npm/lodash/isNull.js create mode 100644 miniprogram_npm/tdesign-miniprogram/miniprogram_npm/lodash/isObjectLike.js create mode 100644 miniprogram_npm/tdesign-miniprogram/miniprogram_npm/lodash/isString.js create mode 100644 miniprogram_npm/tdesign-miniprogram/miniprogram_npm/tinycolor2/index.js create mode 100644 miniprogram_npm/tdesign-miniprogram/mixins/theme-change.d.ts create mode 100644 miniprogram_npm/tdesign-miniprogram/mixins/theme-change.js create mode 100644 miniprogram_npm/tdesign-miniprogram/mixins/using-custom-navbar.d.ts create mode 100644 miniprogram_npm/tdesign-miniprogram/mixins/using-custom-navbar.js create mode 100644 miniprogram_npm/tdesign-miniprogram/overlay/README.en-US.md create mode 100644 miniprogram_npm/tdesign-miniprogram/overlay/index.d.ts create mode 100644 miniprogram_npm/tdesign-miniprogram/overlay/index.js create mode 100644 miniprogram_npm/tdesign-miniprogram/overlay/props.d.ts create mode 100644 miniprogram_npm/tdesign-miniprogram/overlay/props.js create mode 100644 miniprogram_npm/tdesign-miniprogram/overlay/type.d.ts create mode 100644 miniprogram_npm/tdesign-miniprogram/overlay/type.js create mode 100644 miniprogram_npm/tdesign-miniprogram/picker/template.wxml create mode 100644 miniprogram_npm/tdesign-miniprogram/popup/index.d.ts create mode 100644 miniprogram_npm/tdesign-miniprogram/popup/index.js delete mode 100644 miniprogram_npm/tdesign-miniprogram/radio-group/README.md rename pages/action-sheet/status/index.wxss => miniprogram_npm/tdesign-miniprogram/row/README.md (100%) create mode 100644 miniprogram_npm/tdesign-miniprogram/row/props.d.ts create mode 100644 miniprogram_npm/tdesign-miniprogram/row/props.js create mode 100644 miniprogram_npm/tdesign-miniprogram/row/row.d.ts create mode 100644 miniprogram_npm/tdesign-miniprogram/row/row.js create mode 100644 miniprogram_npm/tdesign-miniprogram/row/row.json create mode 100644 miniprogram_npm/tdesign-miniprogram/row/row.wxml create mode 100644 miniprogram_npm/tdesign-miniprogram/row/row.wxs create mode 100644 miniprogram_npm/tdesign-miniprogram/row/row.wxss create mode 100644 miniprogram_npm/tdesign-miniprogram/row/type.d.ts create mode 100644 miniprogram_npm/tdesign-miniprogram/row/type.js create mode 100644 miniprogram_npm/tdesign-miniprogram/search/README.en-US.md create mode 100644 miniprogram_npm/tdesign-miniprogram/search/search.wxs delete mode 100644 miniprogram_npm/tdesign-miniprogram/skeleton/skeleton.wxs create mode 100644 miniprogram_npm/tdesign-miniprogram/step-item/step-item.wxs create mode 100644 miniprogram_npm/tdesign-miniprogram/textarea/textarea.wxs create mode 100644 miniprogram_npm/tdesign-miniprogram/transition/README.en-US.md create mode 100644 miniprogram_npm/tdesign-miniprogram/upload/drag.wxs create mode 100644 miniprogram_npm/tdesign-miniprogram/upload/upload.wxs create mode 100644 miniprogram_npm/tinycolor2/index.js create mode 100644 miniprogram_npm/tinycolor2/index.js.map create mode 100644 package-lock.json create mode 100644 package.json delete mode 100644 pages/action-sheet/action-sheet.d.ts delete mode 100644 pages/action-sheet/action-sheet.js delete mode 100644 pages/action-sheet/action-sheet.json delete mode 100644 pages/action-sheet/action-sheet.wxml delete mode 100644 pages/action-sheet/action-sheet.wxss delete mode 100644 pages/action-sheet/align/index.js delete mode 100644 pages/action-sheet/align/index.json delete mode 100644 pages/action-sheet/align/index.wxml delete mode 100644 pages/action-sheet/grid/index.js delete mode 100644 pages/action-sheet/grid/index.json delete mode 100644 pages/action-sheet/grid/index.wxml delete mode 100644 pages/action-sheet/list/index.js delete mode 100644 pages/action-sheet/list/index.json delete mode 100644 pages/action-sheet/list/index.wxml delete mode 100644 pages/action-sheet/status/index.js delete mode 100644 pages/action-sheet/status/index.json delete mode 100644 pages/action-sheet/status/index.wxml delete mode 100644 pages/avatar/action/index.js delete mode 100644 pages/avatar/action/index.json delete mode 100644 pages/avatar/action/index.wxml delete mode 100644 pages/avatar/action/index.wxss delete mode 100644 pages/avatar/avatar.d.ts delete mode 100644 pages/avatar/avatar.js delete mode 100644 pages/avatar/avatar.json delete mode 100644 pages/avatar/avatar.wxml delete mode 100644 pages/avatar/avatar.wxss delete mode 100644 pages/avatar/badge-avatar/index.js delete mode 100644 pages/avatar/badge-avatar/index.json delete mode 100644 pages/avatar/badge-avatar/index.wxml delete mode 100644 pages/avatar/badge-avatar/index.wxss delete mode 100644 pages/avatar/character-avatar/index.js delete mode 100644 pages/avatar/character-avatar/index.json delete mode 100644 pages/avatar/character-avatar/index.wxml delete mode 100644 pages/avatar/character-avatar/index.wxss delete mode 100644 pages/avatar/exhibition/index.js delete mode 100644 pages/avatar/exhibition/index.json delete mode 100644 pages/avatar/exhibition/index.wxml delete mode 100644 pages/avatar/exhibition/index.wxss delete mode 100644 pages/avatar/icon-avatar/index.js delete mode 100644 pages/avatar/icon-avatar/index.json delete mode 100644 pages/avatar/icon-avatar/index.wxml delete mode 100644 pages/avatar/icon-avatar/index.wxss delete mode 100644 pages/avatar/image-avatar/index.js delete mode 100644 pages/avatar/image-avatar/index.json delete mode 100644 pages/avatar/image-avatar/index.wxml delete mode 100644 pages/avatar/image-avatar/index.wxss delete mode 100644 pages/avatar/size/index.js delete mode 100644 pages/avatar/size/index.json delete mode 100644 pages/avatar/size/index.wxml delete mode 100644 pages/avatar/size/index.wxss delete mode 100644 pages/back-top/back-top.d.ts delete mode 100644 pages/back-top/back-top.js delete mode 100644 pages/back-top/back-top.json delete mode 100644 pages/back-top/back-top.wxml delete mode 100644 pages/back-top/back-top.wxss delete mode 100644 pages/back-top/base/index.js delete mode 100644 pages/back-top/base/index.json delete mode 100644 pages/back-top/base/index.wxml delete mode 100644 pages/back-top/base/index.wxss delete mode 100644 pages/back-top/half-round/index.js delete mode 100644 pages/back-top/half-round/index.json delete mode 100644 pages/back-top/half-round/index.wxml delete mode 100644 pages/back-top/half-round/index.wxss delete mode 100644 pages/badge/api.md delete mode 100644 pages/badge/badge.d.ts delete mode 100644 pages/badge/badge.js delete mode 100644 pages/badge/badge.json delete mode 100644 pages/badge/badge.wxml delete mode 100644 pages/badge/badge.wxss delete mode 100644 pages/badge/base/index.js delete mode 100644 pages/badge/base/index.json delete mode 100644 pages/badge/base/index.wxml delete mode 100644 pages/badge/base/index.wxss delete mode 100644 pages/badge/size/index.js delete mode 100644 pages/badge/size/index.json delete mode 100644 pages/badge/size/index.wxml delete mode 100644 pages/badge/size/index.wxss delete mode 100644 pages/badge/theme/index.js delete mode 100644 pages/badge/theme/index.json delete mode 100644 pages/badge/theme/index.wxml delete mode 100644 pages/badge/theme/index.wxss delete mode 100644 pages/button/base/index.js delete mode 100644 pages/button/base/index.json delete mode 100644 pages/button/base/index.wxml delete mode 100644 pages/button/base/index.wxss delete mode 100644 pages/button/block-btn/index.js delete mode 100644 pages/button/block-btn/index.json delete mode 100644 pages/button/block-btn/index.wxml delete mode 100644 pages/button/block-btn/index.wxss delete mode 100644 pages/button/button.d.ts delete mode 100644 pages/button/button.js delete mode 100644 pages/button/button.json delete mode 100644 pages/button/button.wxml delete mode 100644 pages/button/button.wxss delete mode 100644 pages/button/disabled/index.js delete mode 100644 pages/button/disabled/index.json delete mode 100644 pages/button/disabled/index.wxml delete mode 100644 pages/button/disabled/index.wxss delete mode 100644 pages/button/ghost-btn/index.js delete mode 100644 pages/button/ghost-btn/index.json delete mode 100644 pages/button/ghost-btn/index.wxml delete mode 100644 pages/button/ghost-btn/index.wxss delete mode 100644 pages/button/group-btn/index.js delete mode 100644 pages/button/group-btn/index.json delete mode 100644 pages/button/group-btn/index.wxml delete mode 100644 pages/button/group-btn/index.wxss delete mode 100644 pages/button/icon-btn/index.js delete mode 100644 pages/button/icon-btn/index.json delete mode 100644 pages/button/icon-btn/index.wxml delete mode 100644 pages/button/icon-btn/index.wxss delete mode 100644 pages/button/shape/index.js delete mode 100644 pages/button/shape/index.json delete mode 100644 pages/button/shape/index.wxml delete mode 100644 pages/button/shape/index.wxss delete mode 100644 pages/button/size/index.js delete mode 100644 pages/button/size/index.json delete mode 100644 pages/button/size/index.wxml delete mode 100644 pages/button/size/index.wxss delete mode 100644 pages/button/theme/index.js delete mode 100644 pages/button/theme/index.json delete mode 100644 pages/button/theme/index.wxml delete mode 100644 pages/button/theme/index.wxss delete mode 100644 pages/calendar/base/index.js delete mode 100644 pages/calendar/base/index.json delete mode 100644 pages/calendar/base/index.wxml delete mode 100644 pages/calendar/base/index.wxss delete mode 100644 pages/calendar/calendar.js delete mode 100644 pages/calendar/calendar.json delete mode 100644 pages/calendar/calendar.wxml delete mode 100644 pages/calendar/calendar.wxss delete mode 100644 pages/calendar/custom-button/index.js delete mode 100644 pages/calendar/custom-button/index.json delete mode 100644 pages/calendar/custom-button/index.wxml delete mode 100644 pages/calendar/custom-button/index.wxss delete mode 100644 pages/calendar/custom-range/index.js delete mode 100644 pages/calendar/custom-range/index.json delete mode 100644 pages/calendar/custom-range/index.wxml delete mode 100644 pages/calendar/custom-range/index.wxss delete mode 100644 pages/calendar/custom-text/index.js delete mode 100644 pages/calendar/custom-text/index.json delete mode 100644 pages/calendar/custom-text/index.wxml delete mode 100644 pages/calendar/custom-text/index.wxss delete mode 100644 pages/calendar/multiple/index.js delete mode 100644 pages/calendar/multiple/index.json delete mode 100644 pages/calendar/multiple/index.wxml delete mode 100644 pages/calendar/multiple/index.wxss delete mode 100644 pages/calendar/range/index.js delete mode 100644 pages/calendar/range/index.json delete mode 100644 pages/calendar/range/index.wxml delete mode 100644 pages/calendar/range/index.wxss delete mode 100644 pages/calendar/without-popup/index.js delete mode 100644 pages/calendar/without-popup/index.json delete mode 100644 pages/calendar/without-popup/index.wxml delete mode 100644 pages/calendar/without-popup/index.wxss delete mode 100644 pages/cascader/base/index.js delete mode 100644 pages/cascader/base/index.json delete mode 100644 pages/cascader/base/index.wxml delete mode 100644 pages/cascader/base/index.wxss delete mode 100644 pages/cascader/cascader.js delete mode 100644 pages/cascader/cascader.json delete mode 100644 pages/cascader/cascader.wxml delete mode 100644 pages/cascader/cascader.wxss delete mode 100644 pages/cascader/keys/index.js delete mode 100644 pages/cascader/keys/index.json delete mode 100644 pages/cascader/keys/index.wxml delete mode 100644 pages/cascader/keys/index.wxss delete mode 100644 pages/cascader/theme-tab/index.js delete mode 100644 pages/cascader/theme-tab/index.json delete mode 100644 pages/cascader/theme-tab/index.wxml delete mode 100644 pages/cascader/theme-tab/index.wxss delete mode 100644 pages/cascader/with-title/index.js delete mode 100644 pages/cascader/with-title/index.json delete mode 100644 pages/cascader/with-title/index.wxml delete mode 100644 pages/cascader/with-title/index.wxss delete mode 100644 pages/cascader/with-value/index.js delete mode 100644 pages/cascader/with-value/index.json delete mode 100644 pages/cascader/with-value/index.wxml delete mode 100644 pages/cascader/with-value/index.wxss delete mode 100644 pages/cell-group/api.md delete mode 100644 pages/cell-group/cell-group.d.ts delete mode 100644 pages/cell-group/cell-group.js delete mode 100644 pages/cell-group/cell-group.json delete mode 100644 pages/cell-group/cell-group.wxml delete mode 100644 pages/cell-group/cell-group.wxss delete mode 100644 pages/cell/base/index.js delete mode 100644 pages/cell/base/index.json delete mode 100644 pages/cell/base/index.wxml delete mode 100644 pages/cell/base/index.wxss delete mode 100644 pages/cell/cell.d.ts delete mode 100644 pages/cell/cell.js delete mode 100644 pages/cell/cell.json delete mode 100644 pages/cell/cell.wxml delete mode 100644 pages/cell/cell.wxss delete mode 100644 pages/cell/multiple/index.js delete mode 100644 pages/cell/multiple/index.json delete mode 100644 pages/cell/multiple/index.wxml delete mode 100644 pages/cell/multiple/index.wxss delete mode 100644 pages/cell/theme/index.js delete mode 100644 pages/cell/theme/index.json delete mode 100644 pages/cell/theme/index.wxml delete mode 100644 pages/cell/theme/index.wxss delete mode 100644 pages/checkbox/all/index.js delete mode 100644 pages/checkbox/all/index.json delete mode 100644 pages/checkbox/all/index.wxml delete mode 100644 pages/checkbox/all/index.wxss delete mode 100644 pages/checkbox/base/index.js delete mode 100644 pages/checkbox/base/index.json delete mode 100644 pages/checkbox/base/index.wxml delete mode 100644 pages/checkbox/base/index.wxss delete mode 100644 pages/checkbox/card/index.js delete mode 100644 pages/checkbox/card/index.json delete mode 100644 pages/checkbox/card/index.wxml delete mode 100644 pages/checkbox/card/index.wxss delete mode 100644 pages/checkbox/checkbox.d.ts delete mode 100644 pages/checkbox/checkbox.js delete mode 100644 pages/checkbox/checkbox.json delete mode 100644 pages/checkbox/checkbox.wxml delete mode 100644 pages/checkbox/checkbox.wxss delete mode 100644 pages/checkbox/horizontal/index.js delete mode 100644 pages/checkbox/horizontal/index.json delete mode 100644 pages/checkbox/horizontal/index.wxml delete mode 100644 pages/checkbox/horizontal/index.wxss delete mode 100644 pages/checkbox/right/index.js delete mode 100644 pages/checkbox/right/index.json delete mode 100644 pages/checkbox/right/index.wxml delete mode 100644 pages/checkbox/right/index.wxss delete mode 100644 pages/checkbox/special/index.js delete mode 100644 pages/checkbox/special/index.json delete mode 100644 pages/checkbox/special/index.wxml delete mode 100644 pages/checkbox/special/index.wxss delete mode 100644 pages/checkbox/status/index.js delete mode 100644 pages/checkbox/status/index.json delete mode 100644 pages/checkbox/status/index.wxml delete mode 100644 pages/checkbox/status/index.wxss delete mode 100644 pages/checkbox/type/index.js delete mode 100644 pages/checkbox/type/index.json delete mode 100644 pages/checkbox/type/index.wxml delete mode 100644 pages/checkbox/type/index.wxss delete mode 100644 pages/collapse/accordion/index.js delete mode 100644 pages/collapse/accordion/index.json delete mode 100644 pages/collapse/accordion/index.wxml delete mode 100644 pages/collapse/accordion/index.wxss delete mode 100644 pages/collapse/action/index.js delete mode 100644 pages/collapse/action/index.json delete mode 100644 pages/collapse/action/index.wxml delete mode 100644 pages/collapse/action/index.wxss delete mode 100644 pages/collapse/base/index.js delete mode 100644 pages/collapse/base/index.json delete mode 100644 pages/collapse/base/index.wxml delete mode 100644 pages/collapse/base/index.wxss delete mode 100644 pages/collapse/collapse.d.ts delete mode 100644 pages/collapse/collapse.js delete mode 100644 pages/collapse/collapse.json delete mode 100644 pages/collapse/collapse.wxml delete mode 100644 pages/collapse/collapse.wxss delete mode 100644 pages/collapse/placement/index.js delete mode 100644 pages/collapse/placement/index.json delete mode 100644 pages/collapse/placement/index.wxml delete mode 100644 pages/collapse/placement/index.wxss delete mode 100644 pages/collapse/theme/index.js delete mode 100644 pages/collapse/theme/index.json delete mode 100644 pages/collapse/theme/index.wxml delete mode 100644 pages/collapse/theme/index.wxss delete mode 100644 pages/count-down/base/index.js delete mode 100644 pages/count-down/base/index.json delete mode 100644 pages/count-down/base/index.wxml delete mode 100644 pages/count-down/base/index.wxss delete mode 100644 pages/count-down/count-down.d.ts delete mode 100644 pages/count-down/count-down.js delete mode 100644 pages/count-down/count-down.json delete mode 100644 pages/count-down/count-down.wxml delete mode 100644 pages/count-down/count-down.wxss delete mode 100644 pages/count-down/size/index.js delete mode 100644 pages/count-down/size/index.json delete mode 100644 pages/count-down/size/index.wxml delete mode 100644 pages/count-down/size/index.wxss delete mode 100644 pages/date-time-picker/date-all/index.js delete mode 100644 pages/date-time-picker/date-all/index.json delete mode 100644 pages/date-time-picker/date-all/index.wxml delete mode 100644 pages/date-time-picker/date-all/index.wxss delete mode 100644 pages/date-time-picker/date-time-picker.d.ts delete mode 100644 pages/date-time-picker/date-time-picker.js delete mode 100644 pages/date-time-picker/date-time-picker.json delete mode 100644 pages/date-time-picker/date-time-picker.wxml delete mode 100644 pages/date-time-picker/date-time-picker.wxss delete mode 100644 pages/date-time-picker/time/index.js delete mode 100644 pages/date-time-picker/time/index.json delete mode 100644 pages/date-time-picker/time/index.wxml delete mode 100644 pages/date-time-picker/time/index.wxss delete mode 100644 pages/date-time-picker/year-month-date/index.js delete mode 100644 pages/date-time-picker/year-month-date/index.json delete mode 100644 pages/date-time-picker/year-month-date/index.wxml delete mode 100644 pages/date-time-picker/year-month-date/index.wxss delete mode 100644 pages/date-time-picker/year-month/index.js delete mode 100644 pages/date-time-picker/year-month/index.json delete mode 100644 pages/date-time-picker/year-month/index.wxml delete mode 100644 pages/date-time-picker/year-month/index.wxss delete mode 100644 pages/dialog/base/index.js delete mode 100644 pages/dialog/base/index.json delete mode 100644 pages/dialog/base/index.wxml delete mode 100644 pages/dialog/base/index.wxss delete mode 100644 pages/dialog/button/index.js delete mode 100644 pages/dialog/button/index.json delete mode 100644 pages/dialog/button/index.wxml delete mode 100644 pages/dialog/button/index.wxss delete mode 100644 pages/dialog/command/index.js delete mode 100644 pages/dialog/command/index.json delete mode 100644 pages/dialog/command/index.wxml delete mode 100644 pages/dialog/command/index.wxss delete mode 100644 pages/dialog/confirm/index.js delete mode 100644 pages/dialog/confirm/index.json delete mode 100644 pages/dialog/confirm/index.wxml delete mode 100644 pages/dialog/confirm/index.wxss delete mode 100644 pages/dialog/dialog.d.ts delete mode 100644 pages/dialog/dialog.js delete mode 100644 pages/dialog/dialog.json delete mode 100644 pages/dialog/dialog.wxml delete mode 100644 pages/dialog/dialog.wxss delete mode 100644 pages/dialog/status/index.js delete mode 100644 pages/dialog/status/index.json delete mode 100644 pages/dialog/status/index.wxml delete mode 100644 pages/dialog/status/index.wxss delete mode 100644 pages/dialog/with-image/index.js delete mode 100644 pages/dialog/with-image/index.json delete mode 100644 pages/dialog/with-image/index.wxml delete mode 100644 pages/dialog/with-image/index.wxss delete mode 100644 pages/dialog/with-input/index.js delete mode 100644 pages/dialog/with-input/index.json delete mode 100644 pages/dialog/with-input/index.wxml delete mode 100644 pages/dialog/with-input/index.wxss delete mode 100644 pages/divider/base/index.js delete mode 100644 pages/divider/base/index.json delete mode 100644 pages/divider/base/index.wxml delete mode 100644 pages/divider/base/index.wxss delete mode 100644 pages/divider/divider.d.ts delete mode 100644 pages/divider/divider.js delete mode 100644 pages/divider/divider.json delete mode 100644 pages/divider/divider.wxml delete mode 100644 pages/divider/divider.wxss delete mode 100644 pages/divider/theme/index.js delete mode 100644 pages/divider/theme/index.json delete mode 100644 pages/divider/theme/index.wxml delete mode 100644 pages/divider/theme/index.wxss delete mode 100644 pages/drawer/base/index.js delete mode 100644 pages/drawer/base/index.json delete mode 100644 pages/drawer/base/index.wxml delete mode 100644 pages/drawer/base/index.wxss delete mode 100644 pages/drawer/drawer.d.ts delete mode 100644 pages/drawer/drawer.js delete mode 100644 pages/drawer/drawer.json delete mode 100644 pages/drawer/drawer.wxml delete mode 100644 pages/drawer/drawer.wxss delete mode 100644 pages/drawer/footer/index.js delete mode 100644 pages/drawer/footer/index.json delete mode 100644 pages/drawer/footer/index.wxml delete mode 100644 pages/drawer/footer/index.wxss delete mode 100644 pages/drawer/icon-drawer/index.js delete mode 100644 pages/drawer/icon-drawer/index.json delete mode 100644 pages/drawer/icon-drawer/index.wxml delete mode 100644 pages/drawer/icon-drawer/index.wxss delete mode 100644 pages/drawer/title/index.js delete mode 100644 pages/drawer/title/index.json delete mode 100644 pages/drawer/title/index.wxml delete mode 100644 pages/drawer/title/index.wxss delete mode 100644 pages/dropdown-menu/dropdown-menu.d.ts delete mode 100644 pages/dropdown-menu/dropdown-menu.js delete mode 100644 pages/dropdown-menu/dropdown-menu.json delete mode 100644 pages/dropdown-menu/dropdown-menu.wxml delete mode 100644 pages/dropdown-menu/dropdown-menu.wxss delete mode 100644 pages/dropdown-menu/multi/index.js delete mode 100644 pages/dropdown-menu/multi/index.json delete mode 100644 pages/dropdown-menu/multi/index.wxml delete mode 100644 pages/dropdown-menu/multi/index.wxss delete mode 100644 pages/dropdown-menu/single/index.js delete mode 100644 pages/dropdown-menu/single/index.json delete mode 100644 pages/dropdown-menu/single/index.wxml delete mode 100644 pages/dropdown-menu/single/index.wxss delete mode 100644 pages/dropdown-menu/tree/index.js delete mode 100644 pages/dropdown-menu/tree/index.json delete mode 100644 pages/dropdown-menu/tree/index.wxml delete mode 100644 pages/dropdown-menu/tree/index.wxss delete mode 100644 pages/empty/base/index.js delete mode 100644 pages/empty/base/index.json delete mode 100644 pages/empty/base/index.wxml delete mode 100644 pages/empty/base/index.wxss delete mode 100644 pages/empty/buttonEmpty/index.js delete mode 100644 pages/empty/buttonEmpty/index.json delete mode 100644 pages/empty/buttonEmpty/index.wxml delete mode 100644 pages/empty/buttonEmpty/index.wxss delete mode 100644 pages/empty/empty.d.ts delete mode 100644 pages/empty/empty.js delete mode 100644 pages/empty/empty.json delete mode 100644 pages/empty/empty.wxml delete mode 100644 pages/empty/empty.wxss delete mode 100644 pages/empty/imageEmpty/index.js delete mode 100644 pages/empty/imageEmpty/index.json delete mode 100644 pages/empty/imageEmpty/index.wxml delete mode 100644 pages/empty/imageEmpty/index.wxss delete mode 100644 pages/fab/advance/index.js delete mode 100644 pages/fab/advance/index.json delete mode 100644 pages/fab/advance/index.wxml delete mode 100644 pages/fab/advance/index.wxss delete mode 100644 pages/fab/base/index.js delete mode 100644 pages/fab/base/index.json delete mode 100644 pages/fab/base/index.wxml delete mode 100644 pages/fab/base/index.wxss delete mode 100644 pages/fab/fab.d.ts delete mode 100644 pages/fab/fab.js delete mode 100644 pages/fab/fab.json delete mode 100644 pages/fab/fab.wxml delete mode 100644 pages/fab/fab.wxss delete mode 100644 pages/footer/base/index.js delete mode 100644 pages/footer/base/index.json delete mode 100644 pages/footer/base/index.wxml delete mode 100644 pages/footer/base/index.wxss delete mode 100644 pages/footer/footer.d.ts delete mode 100644 pages/footer/footer.js delete mode 100644 pages/footer/footer.json delete mode 100644 pages/footer/footer.wxml delete mode 100644 pages/footer/footer.wxss delete mode 100644 pages/footer/link/index.js delete mode 100644 pages/footer/link/index.json delete mode 100644 pages/footer/link/index.wxml delete mode 100644 pages/footer/link/index.wxss delete mode 100644 pages/footer/logo/index.js delete mode 100644 pages/footer/logo/index.json delete mode 100644 pages/footer/logo/index.wxml delete mode 100644 pages/footer/logo/index.wxss create mode 100644 pages/form/index.json create mode 100644 pages/form/index.scss create mode 100644 pages/form/index.ts create mode 100644 pages/form/index.wxml delete mode 100644 pages/grid/badge/index.js delete mode 100644 pages/grid/badge/index.json delete mode 100644 pages/grid/badge/index.wxml delete mode 100644 pages/grid/badge/index.wxss delete mode 100644 pages/grid/base/index.js delete mode 100644 pages/grid/base/index.json delete mode 100644 pages/grid/base/index.wxml delete mode 100644 pages/grid/base/index.wxss delete mode 100644 pages/grid/border/index.js delete mode 100644 pages/grid/border/index.json delete mode 100644 pages/grid/border/index.wxml delete mode 100644 pages/grid/border/index.wxss delete mode 100644 pages/grid/card/index.js delete mode 100644 pages/grid/card/index.json delete mode 100644 pages/grid/card/index.wxml delete mode 100644 pages/grid/card/index.wxss delete mode 100644 pages/grid/description/index.js delete mode 100644 pages/grid/description/index.json delete mode 100644 pages/grid/description/index.wxml delete mode 100644 pages/grid/description/index.wxss delete mode 100644 pages/grid/grid.d.ts delete mode 100644 pages/grid/grid.js delete mode 100644 pages/grid/grid.json delete mode 100644 pages/grid/grid.wxml delete mode 100644 pages/grid/grid.wxss delete mode 100644 pages/grid/icon-grid/index.js delete mode 100644 pages/grid/icon-grid/index.json delete mode 100644 pages/grid/icon-grid/index.wxml delete mode 100644 pages/grid/icon-grid/index.wxss delete mode 100644 pages/grid/multiple/index.js delete mode 100644 pages/grid/multiple/index.json delete mode 100644 pages/grid/multiple/index.wxml delete mode 100644 pages/grid/multiple/index.wxss delete mode 100644 pages/grid/scroll/index.js delete mode 100644 pages/grid/scroll/index.json delete mode 100644 pages/grid/scroll/index.wxml delete mode 100644 pages/grid/scroll/index.wxss delete mode 100644 pages/gulp-error/index.d.ts delete mode 100644 pages/gulp-error/index.js delete mode 100644 pages/gulp-error/index.json delete mode 100644 pages/gulp-error/index.wxml delete mode 100644 pages/gulp-error/index.wxss delete mode 100644 pages/home/data/base.d.ts delete mode 100644 pages/home/data/base.js delete mode 100644 pages/home/data/display.d.ts delete mode 100644 pages/home/data/display.js delete mode 100644 pages/home/data/form.d.ts delete mode 100644 pages/home/data/form.js delete mode 100644 pages/home/data/index.d.ts delete mode 100644 pages/home/data/index.js delete mode 100644 pages/home/data/nav.d.ts delete mode 100644 pages/home/data/nav.js delete mode 100644 pages/home/data/ux.d.ts delete mode 100644 pages/home/data/ux.js delete mode 100644 pages/home/home.js delete mode 100644 pages/home/home.json delete mode 100644 pages/home/home.wxml delete mode 100644 pages/home/home.wxss delete mode 100644 pages/home/navigateFail/navigateFail.d.ts delete mode 100644 pages/home/navigateFail/navigateFail.js delete mode 100644 pages/home/navigateFail/navigateFail.json delete mode 100644 pages/home/navigateFail/navigateFail.wxml delete mode 100644 pages/home/navigateFail/navigateFail.wxss delete mode 100644 pages/icon/base/index.js delete mode 100644 pages/icon/base/index.json delete mode 100644 pages/icon/base/index.wxml delete mode 100644 pages/icon/base/index.wxss delete mode 100644 pages/icon/custom/index.js delete mode 100644 pages/icon/custom/index.json delete mode 100644 pages/icon/custom/index.wxml delete mode 100644 pages/icon/custom/index.wxss delete mode 100644 pages/icon/data.js delete mode 100644 pages/icon/icon.d.ts delete mode 100644 pages/icon/icon.js delete mode 100644 pages/icon/icon.json delete mode 100644 pages/icon/icon.wxml delete mode 100644 pages/icon/icon.wxss delete mode 100644 pages/icon/iconImage/index.js delete mode 100644 pages/icon/iconImage/index.json delete mode 100644 pages/icon/iconImage/index.wxml delete mode 100644 pages/icon/iconImage/index.wxss delete mode 100644 pages/icon/iconfont.wxss delete mode 100644 pages/image-viewer/base/index.js delete mode 100644 pages/image-viewer/base/index.json delete mode 100644 pages/image-viewer/base/index.wxml delete mode 100644 pages/image-viewer/base/index.wxss delete mode 100644 pages/image-viewer/delete/index.js delete mode 100644 pages/image-viewer/delete/index.json delete mode 100644 pages/image-viewer/delete/index.wxml delete mode 100644 pages/image-viewer/delete/index.wxss delete mode 100644 pages/image-viewer/image-viewer.d.ts delete mode 100644 pages/image-viewer/image-viewer.js delete mode 100644 pages/image-viewer/image-viewer.json delete mode 100644 pages/image-viewer/image-viewer.wxml delete mode 100644 pages/image-viewer/image-viewer.wxss delete mode 100644 pages/image/base/index.js delete mode 100644 pages/image/base/index.json delete mode 100644 pages/image/base/index.wxml delete mode 100644 pages/image/base/index.wxss delete mode 100644 pages/image/image.d.ts delete mode 100644 pages/image/image.js delete mode 100644 pages/image/image.json delete mode 100644 pages/image/image.wxml delete mode 100644 pages/image/image.wxss delete mode 100644 pages/image/size/index.js delete mode 100644 pages/image/size/index.json delete mode 100644 pages/image/size/index.wxml delete mode 100644 pages/image/size/index.wxss delete mode 100644 pages/image/status/index.js delete mode 100644 pages/image/status/index.json delete mode 100644 pages/image/status/index.wxml delete mode 100644 pages/image/status/index.wxss delete mode 100644 pages/indexes/base/index.js delete mode 100644 pages/indexes/base/index.json delete mode 100644 pages/indexes/base/index.wxml delete mode 100644 pages/indexes/base/index.wxss delete mode 100644 pages/indexes/custom/index.js delete mode 100644 pages/indexes/custom/index.json delete mode 100644 pages/indexes/custom/index.wxml delete mode 100644 pages/indexes/custom/index.wxss delete mode 100644 pages/indexes/indexes.d.ts delete mode 100644 pages/indexes/indexes.js delete mode 100644 pages/indexes/indexes.json delete mode 100644 pages/indexes/indexes.wxml delete mode 100644 pages/indexes/indexes.wxss delete mode 100644 pages/input/align/index.js delete mode 100644 pages/input/align/index.json delete mode 100644 pages/input/align/index.wxml delete mode 100644 pages/input/align/index.wxss delete mode 100644 pages/input/banner/index.js delete mode 100644 pages/input/banner/index.json delete mode 100644 pages/input/banner/index.wxml delete mode 100644 pages/input/banner/index.wxss delete mode 100644 pages/input/base/index.js delete mode 100644 pages/input/base/index.json delete mode 100644 pages/input/base/index.wxml delete mode 100644 pages/input/base/index.wxss delete mode 100644 pages/input/bordered/index.js delete mode 100644 pages/input/bordered/index.json delete mode 100644 pages/input/bordered/index.wxml delete mode 100644 pages/input/bordered/index.wxss delete mode 100644 pages/input/custom/index.js delete mode 100644 pages/input/custom/index.json delete mode 100644 pages/input/custom/index.wxml delete mode 100644 pages/input/custom/index.wxss delete mode 100644 pages/input/input.d.ts delete mode 100644 pages/input/input.js delete mode 100644 pages/input/input.json delete mode 100644 pages/input/input.wxml delete mode 100644 pages/input/input.wxss delete mode 100644 pages/input/label/index.js delete mode 100644 pages/input/label/index.json delete mode 100644 pages/input/label/index.wxml delete mode 100644 pages/input/label/index.wxss delete mode 100644 pages/input/layout/index.js delete mode 100644 pages/input/layout/index.json delete mode 100644 pages/input/layout/index.wxml delete mode 100644 pages/input/layout/index.wxss delete mode 100644 pages/input/maxlength/index.js delete mode 100644 pages/input/maxlength/index.json delete mode 100644 pages/input/maxlength/index.wxml delete mode 100644 pages/input/maxlength/index.wxss delete mode 100644 pages/input/prefix/index.js delete mode 100644 pages/input/prefix/index.json delete mode 100644 pages/input/prefix/index.wxml delete mode 100644 pages/input/prefix/index.wxss delete mode 100644 pages/input/size/index.js delete mode 100644 pages/input/size/index.json delete mode 100644 pages/input/size/index.wxml delete mode 100644 pages/input/size/index.wxss delete mode 100644 pages/input/special/index.js delete mode 100644 pages/input/special/index.json delete mode 100644 pages/input/special/index.wxml delete mode 100644 pages/input/special/index.wxss delete mode 100644 pages/input/status/index.js delete mode 100644 pages/input/status/index.json delete mode 100644 pages/input/status/index.wxml delete mode 100644 pages/input/status/index.wxss delete mode 100644 pages/input/suffix/index.js delete mode 100644 pages/input/suffix/index.json delete mode 100644 pages/input/suffix/index.wxml delete mode 100644 pages/input/suffix/index.wxss delete mode 100644 pages/link/content/index.js delete mode 100644 pages/link/content/index.json delete mode 100644 pages/link/content/index.wxml delete mode 100644 pages/link/content/index.wxss delete mode 100644 pages/link/disabled/index.js delete mode 100644 pages/link/disabled/index.json delete mode 100644 pages/link/disabled/index.wxml delete mode 100644 pages/link/disabled/index.wxss delete mode 100644 pages/link/link.d.ts delete mode 100644 pages/link/link.js delete mode 100644 pages/link/link.json delete mode 100644 pages/link/link.wxml delete mode 100644 pages/link/link.wxss delete mode 100644 pages/link/prefix/index.js delete mode 100644 pages/link/prefix/index.json delete mode 100644 pages/link/prefix/index.wxml delete mode 100644 pages/link/prefix/index.wxss delete mode 100644 pages/link/size/index.js delete mode 100644 pages/link/size/index.json delete mode 100644 pages/link/size/index.wxml delete mode 100644 pages/link/size/index.wxss delete mode 100644 pages/link/suffix/index.js delete mode 100644 pages/link/suffix/index.json delete mode 100644 pages/link/suffix/index.wxml delete mode 100644 pages/link/suffix/index.wxss delete mode 100644 pages/link/theme/index.js delete mode 100644 pages/link/theme/index.json delete mode 100644 pages/link/theme/index.wxml delete mode 100644 pages/link/theme/index.wxss delete mode 100644 pages/link/underline/index.js delete mode 100644 pages/link/underline/index.json delete mode 100644 pages/link/underline/index.wxml delete mode 100644 pages/link/underline/index.wxss delete mode 100644 pages/loading/base/index.js delete mode 100644 pages/loading/base/index.json delete mode 100644 pages/loading/base/index.wxml delete mode 100644 pages/loading/base/index.wxss delete mode 100644 pages/loading/duration/index.js delete mode 100644 pages/loading/duration/index.json delete mode 100644 pages/loading/duration/index.wxml delete mode 100644 pages/loading/duration/index.wxss delete mode 100644 pages/loading/horizontal/index.js delete mode 100644 pages/loading/horizontal/index.json delete mode 100644 pages/loading/horizontal/index.wxml delete mode 100644 pages/loading/horizontal/index.wxss delete mode 100644 pages/loading/loading.d.ts delete mode 100644 pages/loading/loading.js delete mode 100644 pages/loading/loading.json delete mode 100644 pages/loading/loading.wxml delete mode 100644 pages/loading/loading.wxss delete mode 100644 pages/loading/size/index.js delete mode 100644 pages/loading/size/index.json delete mode 100644 pages/loading/size/index.wxml delete mode 100644 pages/loading/size/index.wxss delete mode 100644 pages/loading/status/index.js delete mode 100644 pages/loading/status/index.json delete mode 100644 pages/loading/status/index.wxml delete mode 100644 pages/loading/status/index.wxss delete mode 100644 pages/loading/text/index.js delete mode 100644 pages/loading/text/index.json delete mode 100644 pages/loading/text/index.wxml delete mode 100644 pages/loading/text/index.wxss delete mode 100644 pages/loading/vertical/index.js delete mode 100644 pages/loading/vertical/index.json delete mode 100644 pages/loading/vertical/index.wxml delete mode 100644 pages/loading/vertical/index.wxss create mode 100644 pages/meeting/index.json create mode 100644 pages/meeting/index.scss create mode 100644 pages/meeting/index.ts create mode 100644 pages/meeting/index.wxml delete mode 100644 pages/message/base/index.js delete mode 100644 pages/message/base/index.json delete mode 100644 pages/message/base/index.wxml delete mode 100644 pages/message/base/index.wxss delete mode 100644 pages/message/message.d.ts delete mode 100644 pages/message/message.js delete mode 100644 pages/message/message.json delete mode 100644 pages/message/message.wxml delete mode 100644 pages/message/message.wxss delete mode 100644 pages/message/theme/index.js delete mode 100644 pages/message/theme/index.json delete mode 100644 pages/message/theme/index.wxml delete mode 100644 pages/message/theme/index.wxss delete mode 100644 pages/navbar/back-home/index.js delete mode 100644 pages/navbar/back-home/index.json delete mode 100644 pages/navbar/back-home/index.wxml delete mode 100644 pages/navbar/back-home/index.wxss delete mode 100644 pages/navbar/base/index.js delete mode 100644 pages/navbar/base/index.json delete mode 100644 pages/navbar/base/index.wxml delete mode 100644 pages/navbar/base/index.wxss delete mode 100644 pages/navbar/custom-color/index.js delete mode 100644 pages/navbar/custom-color/index.json delete mode 100644 pages/navbar/custom-color/index.wxml delete mode 100644 pages/navbar/custom-color/index.wxss delete mode 100644 pages/navbar/img/index.js delete mode 100644 pages/navbar/img/index.json delete mode 100644 pages/navbar/img/index.wxml delete mode 100644 pages/navbar/img/index.wxss delete mode 100644 pages/navbar/left-title/index.js delete mode 100644 pages/navbar/left-title/index.json delete mode 100644 pages/navbar/left-title/index.wxml delete mode 100644 pages/navbar/left-title/index.wxss delete mode 100644 pages/navbar/navbar.d.ts delete mode 100644 pages/navbar/navbar.js delete mode 100644 pages/navbar/navbar.json delete mode 100644 pages/navbar/navbar.wxml delete mode 100644 pages/navbar/navbar.wxss delete mode 100644 pages/navbar/search/index.js delete mode 100644 pages/navbar/search/index.json delete mode 100644 pages/navbar/search/index.wxml delete mode 100644 pages/navbar/search/index.wxss delete mode 100644 pages/notice-bar/base/index.js delete mode 100644 pages/notice-bar/base/index.json delete mode 100644 pages/notice-bar/base/index.wxml delete mode 100644 pages/notice-bar/base/index.wxss delete mode 100644 pages/notice-bar/custom/index.js delete mode 100644 pages/notice-bar/custom/index.json delete mode 100644 pages/notice-bar/custom/index.wxml delete mode 100644 pages/notice-bar/custom/index.wxss delete mode 100644 pages/notice-bar/customization/index.js delete mode 100644 pages/notice-bar/customization/index.json delete mode 100644 pages/notice-bar/customization/index.wxml delete mode 100644 pages/notice-bar/customization/index.wxss delete mode 100644 pages/notice-bar/event/index.js delete mode 100644 pages/notice-bar/event/index.json delete mode 100644 pages/notice-bar/event/index.wxml delete mode 100644 pages/notice-bar/event/index.wxss delete mode 100644 pages/notice-bar/iconDemo/index.js delete mode 100644 pages/notice-bar/iconDemo/index.json delete mode 100644 pages/notice-bar/iconDemo/index.wxml delete mode 100644 pages/notice-bar/iconDemo/index.wxss delete mode 100644 pages/notice-bar/notice-bar.d.ts delete mode 100644 pages/notice-bar/notice-bar.js delete mode 100644 pages/notice-bar/notice-bar.json delete mode 100644 pages/notice-bar/notice-bar.wxml delete mode 100644 pages/notice-bar/notice-bar.wxss delete mode 100644 pages/notice-bar/scrolling/index.js delete mode 100644 pages/notice-bar/scrolling/index.json delete mode 100644 pages/notice-bar/scrolling/index.wxml delete mode 100644 pages/notice-bar/scrolling/index.wxss delete mode 100644 pages/notice-bar/suffixIcon/index.js delete mode 100644 pages/notice-bar/suffixIcon/index.json delete mode 100644 pages/notice-bar/suffixIcon/index.wxml delete mode 100644 pages/notice-bar/suffixIcon/index.wxss delete mode 100644 pages/notice-bar/theme/index.js delete mode 100644 pages/notice-bar/theme/index.json delete mode 100644 pages/notice-bar/theme/index.wxml delete mode 100644 pages/notice-bar/theme/index.wxss delete mode 100644 pages/overlay/base/index.js delete mode 100644 pages/overlay/base/index.json delete mode 100644 pages/overlay/base/index.wxml delete mode 100644 pages/overlay/base/index.wxss delete mode 100644 pages/overlay/overlay.d.ts delete mode 100644 pages/overlay/overlay.js delete mode 100644 pages/overlay/overlay.json delete mode 100644 pages/overlay/overlay.wxml delete mode 100644 pages/overlay/overlay.wxss delete mode 100644 pages/picker/area/index.js delete mode 100644 pages/picker/area/index.json delete mode 100644 pages/picker/area/index.wxml delete mode 100644 pages/picker/area/index.wxss delete mode 100644 pages/picker/base/index.js delete mode 100644 pages/picker/base/index.json delete mode 100644 pages/picker/base/index.wxml delete mode 100644 pages/picker/base/index.wxss delete mode 100644 pages/picker/picker.d.ts delete mode 100644 pages/picker/picker.js delete mode 100644 pages/picker/picker.json delete mode 100644 pages/picker/picker.wxml delete mode 100644 pages/picker/picker.wxss delete mode 100644 pages/picker/with-title/index.js delete mode 100644 pages/picker/with-title/index.json delete mode 100644 pages/picker/with-title/index.wxml delete mode 100644 pages/picker/with-title/index.wxss delete mode 100644 pages/popup/base/index.js delete mode 100644 pages/popup/base/index.json delete mode 100644 pages/popup/base/index.wxml delete mode 100644 pages/popup/base/index.wxss delete mode 100644 pages/popup/custom-close/index.js delete mode 100644 pages/popup/custom-close/index.json delete mode 100644 pages/popup/custom-close/index.wxml delete mode 100644 pages/popup/custom-close/index.wxss delete mode 100644 pages/popup/popup.d.ts delete mode 100644 pages/popup/popup.js delete mode 100644 pages/popup/popup.json delete mode 100644 pages/popup/popup.wxml delete mode 100644 pages/popup/popup.wxss delete mode 100644 pages/popup/with-title/index.js delete mode 100644 pages/popup/with-title/index.json delete mode 100644 pages/popup/with-title/index.wxml delete mode 100644 pages/popup/with-title/index.wxss delete mode 100644 pages/progress/base/index.js delete mode 100644 pages/progress/base/index.json delete mode 100644 pages/progress/base/index.wxml delete mode 100644 pages/progress/base/index.wxss delete mode 100644 pages/progress/circle/index.js delete mode 100644 pages/progress/circle/index.json delete mode 100644 pages/progress/circle/index.wxml delete mode 100644 pages/progress/circle/index.wxss delete mode 100644 pages/progress/custom/index.js delete mode 100644 pages/progress/custom/index.json delete mode 100644 pages/progress/custom/index.wxml delete mode 100644 pages/progress/custom/index.wxss delete mode 100644 pages/progress/line/index.js delete mode 100644 pages/progress/line/index.json delete mode 100644 pages/progress/line/index.wxml delete mode 100644 pages/progress/line/index.wxss delete mode 100644 pages/progress/plump/index.js delete mode 100644 pages/progress/plump/index.json delete mode 100644 pages/progress/plump/index.wxml delete mode 100644 pages/progress/plump/index.wxss delete mode 100644 pages/progress/progress.d.ts delete mode 100644 pages/progress/progress.js delete mode 100644 pages/progress/progress.json delete mode 100644 pages/progress/progress.wxml delete mode 100644 pages/progress/progress.wxss delete mode 100644 pages/progress/transition/index.js delete mode 100644 pages/progress/transition/index.json delete mode 100644 pages/progress/transition/index.wxml delete mode 100644 pages/progress/transition/index.wxss delete mode 100644 pages/pull-down-refresh/base/index.js delete mode 100644 pages/pull-down-refresh/base/index.json delete mode 100644 pages/pull-down-refresh/base/index.wxml delete mode 100644 pages/pull-down-refresh/base/index.wxss delete mode 100644 pages/pull-down-refresh/pull-down-refresh.d.ts delete mode 100644 pages/pull-down-refresh/pull-down-refresh.js delete mode 100644 pages/pull-down-refresh/pull-down-refresh.json delete mode 100644 pages/pull-down-refresh/pull-down-refresh.wxml delete mode 100644 pages/pull-down-refresh/pull-down-refresh.wxss delete mode 100644 pages/radio/align/index.js delete mode 100644 pages/radio/align/index.json delete mode 100644 pages/radio/align/index.wxml delete mode 100644 pages/radio/align/index.wxss delete mode 100644 pages/radio/base/index.js delete mode 100644 pages/radio/base/index.json delete mode 100644 pages/radio/base/index.wxml delete mode 100644 pages/radio/base/index.wxss delete mode 100644 pages/radio/card/index.js delete mode 100644 pages/radio/card/index.json delete mode 100644 pages/radio/card/index.wxml delete mode 100644 pages/radio/card/index.wxss delete mode 100644 pages/radio/horizontal/index.js delete mode 100644 pages/radio/horizontal/index.json delete mode 100644 pages/radio/horizontal/index.wxml delete mode 100644 pages/radio/horizontal/index.wxss delete mode 100644 pages/radio/radio.d.ts delete mode 100644 pages/radio/radio.js delete mode 100644 pages/radio/radio.json delete mode 100644 pages/radio/radio.wxml delete mode 100644 pages/radio/radio.wxss delete mode 100644 pages/radio/special/index.js delete mode 100644 pages/radio/special/index.json delete mode 100644 pages/radio/special/index.wxml delete mode 100644 pages/radio/special/index.wxss delete mode 100644 pages/radio/status/index.js delete mode 100644 pages/radio/status/index.json delete mode 100644 pages/radio/status/index.wxml delete mode 100644 pages/radio/status/index.wxss delete mode 100644 pages/radio/theme/index.js delete mode 100644 pages/radio/theme/index.json delete mode 100644 pages/radio/theme/index.wxml delete mode 100644 pages/radio/theme/index.wxss delete mode 100644 pages/rate/action/index.js delete mode 100644 pages/rate/action/index.json delete mode 100644 pages/rate/action/index.wxml delete mode 100644 pages/rate/action/index.wxss delete mode 100644 pages/rate/base/index.js delete mode 100644 pages/rate/base/index.json delete mode 100644 pages/rate/base/index.wxml delete mode 100644 pages/rate/base/index.wxss delete mode 100644 pages/rate/color/index.js delete mode 100644 pages/rate/color/index.json delete mode 100644 pages/rate/color/index.wxml delete mode 100644 pages/rate/color/index.wxss delete mode 100644 pages/rate/count/index.js delete mode 100644 pages/rate/count/index.json delete mode 100644 pages/rate/count/index.wxml delete mode 100644 pages/rate/count/index.wxss delete mode 100644 pages/rate/custom/index.js delete mode 100644 pages/rate/custom/index.json delete mode 100644 pages/rate/custom/index.wxml delete mode 100644 pages/rate/custom/index.wxss delete mode 100644 pages/rate/rate.d.ts delete mode 100644 pages/rate/rate.js delete mode 100644 pages/rate/rate.json delete mode 100644 pages/rate/rate.wxml delete mode 100644 pages/rate/rate.wxss delete mode 100644 pages/rate/show-text/index.js delete mode 100644 pages/rate/show-text/index.json delete mode 100644 pages/rate/show-text/index.wxml delete mode 100644 pages/rate/show-text/index.wxss delete mode 100644 pages/rate/size/index.js delete mode 100644 pages/rate/size/index.json delete mode 100644 pages/rate/size/index.wxml delete mode 100644 pages/rate/size/index.wxss delete mode 100644 pages/rate/special/index.js delete mode 100644 pages/rate/special/index.json delete mode 100644 pages/rate/special/index.wxml delete mode 100644 pages/rate/special/index.wxss delete mode 100644 pages/rate/un-filled/index.js delete mode 100644 pages/rate/un-filled/index.json delete mode 100644 pages/rate/un-filled/index.wxml delete mode 100644 pages/rate/un-filled/index.wxss delete mode 100644 pages/result/custom/index.js delete mode 100644 pages/result/custom/index.json delete mode 100644 pages/result/custom/index.wxml delete mode 100644 pages/result/custom/index.wxss delete mode 100644 pages/result/description/index.js delete mode 100644 pages/result/description/index.json delete mode 100644 pages/result/description/index.wxml delete mode 100644 pages/result/description/index.wxss delete mode 100644 pages/result/result-page.d.ts delete mode 100644 pages/result/result-page.js delete mode 100644 pages/result/result-page.json delete mode 100644 pages/result/result-page.wxml delete mode 100644 pages/result/result-page.wxss delete mode 100644 pages/result/result.d.ts delete mode 100644 pages/result/result.js delete mode 100644 pages/result/result.json delete mode 100644 pages/result/result.wxml delete mode 100644 pages/result/result.wxss delete mode 100644 pages/result/theme/index.js delete mode 100644 pages/result/theme/index.json delete mode 100644 pages/result/theme/index.wxml delete mode 100644 pages/result/theme/index.wxss delete mode 100644 pages/search/action/index.js delete mode 100644 pages/search/action/index.json delete mode 100644 pages/search/action/index.wxml delete mode 100644 pages/search/action/index.wxss delete mode 100644 pages/search/base/index.js delete mode 100644 pages/search/base/index.json delete mode 100644 pages/search/base/index.wxml delete mode 100644 pages/search/base/index.wxss delete mode 100644 pages/search/other/index.js delete mode 100644 pages/search/other/index.json delete mode 100644 pages/search/other/index.wxml delete mode 100644 pages/search/other/index.wxss delete mode 100644 pages/search/search.d.ts delete mode 100644 pages/search/search.js delete mode 100644 pages/search/search.json delete mode 100644 pages/search/search.wxml delete mode 100644 pages/search/search.wxss delete mode 100644 pages/search/shape/index.js delete mode 100644 pages/search/shape/index.json delete mode 100644 pages/search/shape/index.wxml delete mode 100644 pages/search/shape/index.wxss delete mode 100644 pages/side-bar/base/index.js delete mode 100644 pages/side-bar/base/index.json delete mode 100644 pages/side-bar/base/index.wxml delete mode 100644 pages/side-bar/base/index.wxss delete mode 100644 pages/side-bar/custom/index.js delete mode 100644 pages/side-bar/custom/index.json delete mode 100644 pages/side-bar/custom/index.wxml delete mode 100644 pages/side-bar/custom/index.wxss delete mode 100644 pages/side-bar/side-bar.js delete mode 100644 pages/side-bar/side-bar.json delete mode 100644 pages/side-bar/side-bar.wxml delete mode 100644 pages/side-bar/side-bar.wxss delete mode 100644 pages/side-bar/switch/index.js delete mode 100644 pages/side-bar/switch/index.json delete mode 100644 pages/side-bar/switch/index.wxml delete mode 100644 pages/side-bar/switch/index.wxss delete mode 100644 pages/side-bar/with-icon/index.js delete mode 100644 pages/side-bar/with-icon/index.json delete mode 100644 pages/side-bar/with-icon/index.wxml delete mode 100644 pages/side-bar/with-icon/index.wxss delete mode 100644 pages/skeleton/animation/index.js delete mode 100644 pages/skeleton/animation/index.json delete mode 100644 pages/skeleton/animation/index.wxml delete mode 100644 pages/skeleton/animation/index.wxss delete mode 100644 pages/skeleton/cell-group/index.js delete mode 100644 pages/skeleton/cell-group/index.json delete mode 100644 pages/skeleton/cell-group/index.wxml delete mode 100644 pages/skeleton/cell-group/index.wxss delete mode 100644 pages/skeleton/grid/index.js delete mode 100644 pages/skeleton/grid/index.json delete mode 100644 pages/skeleton/grid/index.wxml delete mode 100644 pages/skeleton/grid/index.wxss delete mode 100644 pages/skeleton/image-group/index.js delete mode 100644 pages/skeleton/image-group/index.json delete mode 100644 pages/skeleton/image-group/index.wxml delete mode 100644 pages/skeleton/image-group/index.wxss delete mode 100644 pages/skeleton/skeleton.d.ts delete mode 100644 pages/skeleton/skeleton.js delete mode 100644 pages/skeleton/skeleton.json delete mode 100644 pages/skeleton/skeleton.wxml delete mode 100644 pages/skeleton/skeleton.wxss delete mode 100644 pages/skeleton/theme/index.js delete mode 100644 pages/skeleton/theme/index.json delete mode 100644 pages/skeleton/theme/index.wxml delete mode 100644 pages/skeleton/theme/index.wxss delete mode 100644 pages/slider/base/index.js delete mode 100644 pages/slider/base/index.json delete mode 100644 pages/slider/base/index.wxml delete mode 100644 pages/slider/base/index.wxss delete mode 100644 pages/slider/capsule/index.js delete mode 100644 pages/slider/capsule/index.json delete mode 100644 pages/slider/capsule/index.wxml delete mode 100644 pages/slider/capsule/index.wxss delete mode 100644 pages/slider/disabled/index.js delete mode 100644 pages/slider/disabled/index.json delete mode 100644 pages/slider/disabled/index.wxml delete mode 100644 pages/slider/disabled/index.wxss delete mode 100644 pages/slider/label/index.js delete mode 100644 pages/slider/label/index.json delete mode 100644 pages/slider/label/index.wxml delete mode 100644 pages/slider/label/index.wxss delete mode 100644 pages/slider/max/index.js delete mode 100644 pages/slider/max/index.json delete mode 100644 pages/slider/max/index.wxml delete mode 100644 pages/slider/max/index.wxss delete mode 100644 pages/slider/range/index.js delete mode 100644 pages/slider/range/index.json delete mode 100644 pages/slider/range/index.wxml delete mode 100644 pages/slider/range/index.wxss delete mode 100644 pages/slider/slider.d.ts delete mode 100644 pages/slider/slider.js delete mode 100644 pages/slider/slider.json delete mode 100644 pages/slider/slider.wxml delete mode 100644 pages/slider/slider.wxss delete mode 100644 pages/slider/step/index.js delete mode 100644 pages/slider/step/index.json delete mode 100644 pages/slider/step/index.wxml delete mode 100644 pages/slider/step/index.wxss delete mode 100644 pages/stepper/base/index.js delete mode 100644 pages/stepper/base/index.json delete mode 100644 pages/stepper/base/index.wxml delete mode 100644 pages/stepper/base/index.wxss delete mode 100644 pages/stepper/min-max/index.js delete mode 100644 pages/stepper/min-max/index.json delete mode 100644 pages/stepper/min-max/index.wxml delete mode 100644 pages/stepper/min-max/index.wxss delete mode 100644 pages/stepper/size/index.js delete mode 100644 pages/stepper/size/index.json delete mode 100644 pages/stepper/size/index.wxml delete mode 100644 pages/stepper/size/index.wxss delete mode 100644 pages/stepper/status/index.js delete mode 100644 pages/stepper/status/index.json delete mode 100644 pages/stepper/status/index.wxml delete mode 100644 pages/stepper/status/index.wxss delete mode 100644 pages/stepper/stepper.d.ts delete mode 100644 pages/stepper/stepper.js delete mode 100644 pages/stepper/stepper.json delete mode 100644 pages/stepper/stepper.wxml delete mode 100644 pages/stepper/stepper.wxss delete mode 100644 pages/stepper/theme/index.js delete mode 100644 pages/stepper/theme/index.json delete mode 100644 pages/stepper/theme/index.wxml delete mode 100644 pages/stepper/theme/index.wxss delete mode 100644 pages/steps/horizontal/index.js delete mode 100644 pages/steps/horizontal/index.json delete mode 100644 pages/steps/horizontal/index.wxml delete mode 100644 pages/steps/horizontal/index.wxss delete mode 100644 pages/steps/special/index.js delete mode 100644 pages/steps/special/index.json delete mode 100644 pages/steps/special/index.wxml delete mode 100644 pages/steps/special/index.wxss delete mode 100644 pages/steps/status/index.js delete mode 100644 pages/steps/status/index.json delete mode 100644 pages/steps/status/index.wxml delete mode 100644 pages/steps/status/index.wxss delete mode 100644 pages/steps/steps.d.ts delete mode 100644 pages/steps/steps.js delete mode 100644 pages/steps/steps.json delete mode 100644 pages/steps/steps.wxml delete mode 100644 pages/steps/steps.wxss delete mode 100644 pages/steps/vertical/index.js delete mode 100644 pages/steps/vertical/index.json delete mode 100644 pages/steps/vertical/index.wxml delete mode 100644 pages/steps/vertical/index.wxss delete mode 100644 pages/sticky/base/index.js delete mode 100644 pages/sticky/base/index.json delete mode 100644 pages/sticky/base/index.wxml delete mode 100644 pages/sticky/base/index.wxss delete mode 100644 pages/sticky/container/index.js delete mode 100644 pages/sticky/container/index.json delete mode 100644 pages/sticky/container/index.wxml delete mode 100644 pages/sticky/container/index.wxss delete mode 100644 pages/sticky/offset/index.js delete mode 100644 pages/sticky/offset/index.json delete mode 100644 pages/sticky/offset/index.wxml delete mode 100644 pages/sticky/offset/index.wxss delete mode 100644 pages/sticky/sticky.d.ts delete mode 100644 pages/sticky/sticky.js delete mode 100644 pages/sticky/sticky.json delete mode 100644 pages/sticky/sticky.wxml delete mode 100644 pages/sticky/sticky.wxss delete mode 100644 pages/swipe-cell/double/index.js delete mode 100644 pages/swipe-cell/double/index.json delete mode 100644 pages/swipe-cell/double/index.wxml delete mode 100644 pages/swipe-cell/double/index.wxss delete mode 100644 pages/swipe-cell/icon/index.js delete mode 100644 pages/swipe-cell/icon/index.json delete mode 100644 pages/swipe-cell/icon/index.wxml delete mode 100644 pages/swipe-cell/icon/index.wxss delete mode 100644 pages/swipe-cell/left/index.js delete mode 100644 pages/swipe-cell/left/index.json delete mode 100644 pages/swipe-cell/left/index.wxml delete mode 100644 pages/swipe-cell/left/index.wxss delete mode 100644 pages/swipe-cell/right/index.js delete mode 100644 pages/swipe-cell/right/index.json delete mode 100644 pages/swipe-cell/right/index.wxml delete mode 100644 pages/swipe-cell/right/index.wxss delete mode 100644 pages/swipe-cell/swipe-cell.d.ts delete mode 100644 pages/swipe-cell/swipe-cell.js delete mode 100644 pages/swipe-cell/swipe-cell.json delete mode 100644 pages/swipe-cell/swipe-cell.wxml delete mode 100644 pages/swipe-cell/swipe-cell.wxss delete mode 100644 pages/swiper/base/index.js delete mode 100644 pages/swiper/base/index.json delete mode 100644 pages/swiper/base/index.wxml delete mode 100644 pages/swiper/base/index.wxss delete mode 100644 pages/swiper/cards/index.js delete mode 100644 pages/swiper/cards/index.json delete mode 100644 pages/swiper/cards/index.wxml delete mode 100644 pages/swiper/cards/index.wxss delete mode 100644 pages/swiper/custom/index.js delete mode 100644 pages/swiper/custom/index.json delete mode 100644 pages/swiper/custom/index.wxml delete mode 100644 pages/swiper/custom/index.wxss delete mode 100644 pages/swiper/fraction/index.js delete mode 100644 pages/swiper/fraction/index.json delete mode 100644 pages/swiper/fraction/index.wxml delete mode 100644 pages/swiper/fraction/index.wxss delete mode 100644 pages/swiper/nav-btn/index.js delete mode 100644 pages/swiper/nav-btn/index.json delete mode 100644 pages/swiper/nav-btn/index.wxml delete mode 100644 pages/swiper/nav-btn/index.wxss delete mode 100644 pages/swiper/swiper.d.ts delete mode 100644 pages/swiper/swiper.js delete mode 100644 pages/swiper/swiper.json delete mode 100644 pages/swiper/swiper.wxml delete mode 100644 pages/swiper/swiper.wxss delete mode 100644 pages/swiper/vertical/index.js delete mode 100644 pages/swiper/vertical/index.json delete mode 100644 pages/swiper/vertical/index.wxml delete mode 100644 pages/swiper/vertical/index.wxss delete mode 100644 pages/switch/base/index.js delete mode 100644 pages/switch/base/index.json delete mode 100644 pages/switch/base/index.wxml delete mode 100644 pages/switch/base/index.wxss delete mode 100644 pages/switch/color/index.js delete mode 100644 pages/switch/color/index.json delete mode 100644 pages/switch/color/index.wxml delete mode 100644 pages/switch/color/index.wxss delete mode 100644 pages/switch/label/index.js delete mode 100644 pages/switch/label/index.json delete mode 100644 pages/switch/label/index.wxml delete mode 100644 pages/switch/label/index.wxss delete mode 100644 pages/switch/size/index.js delete mode 100644 pages/switch/size/index.json delete mode 100644 pages/switch/size/index.wxml delete mode 100644 pages/switch/size/index.wxss delete mode 100644 pages/switch/status/index.js delete mode 100644 pages/switch/status/index.json delete mode 100644 pages/switch/status/index.wxml delete mode 100644 pages/switch/status/index.wxss delete mode 100644 pages/switch/switch.d.ts delete mode 100644 pages/switch/switch.js delete mode 100644 pages/switch/switch.json delete mode 100644 pages/switch/switch.wxml delete mode 100644 pages/switch/switch.wxss delete mode 100644 pages/tab-bar/badge/index.js delete mode 100644 pages/tab-bar/badge/index.json delete mode 100644 pages/tab-bar/badge/index.wxml delete mode 100644 pages/tab-bar/badge/index.wxss delete mode 100644 pages/tab-bar/base/index.js delete mode 100644 pages/tab-bar/base/index.json delete mode 100644 pages/tab-bar/base/index.wxml delete mode 100644 pages/tab-bar/base/index.wxss delete mode 100644 pages/tab-bar/custom/index.js delete mode 100644 pages/tab-bar/custom/index.json delete mode 100644 pages/tab-bar/custom/index.wxml delete mode 100644 pages/tab-bar/custom/index.wxss delete mode 100644 pages/tab-bar/icon-only/index.js delete mode 100644 pages/tab-bar/icon-only/index.json delete mode 100644 pages/tab-bar/icon-only/index.wxml delete mode 100644 pages/tab-bar/icon-only/index.wxss delete mode 100644 pages/tab-bar/round/index.js delete mode 100644 pages/tab-bar/round/index.json delete mode 100644 pages/tab-bar/round/index.wxml delete mode 100644 pages/tab-bar/round/index.wxss delete mode 100644 pages/tab-bar/sub/index.js delete mode 100644 pages/tab-bar/sub/index.json delete mode 100644 pages/tab-bar/sub/index.wxml delete mode 100644 pages/tab-bar/sub/index.wxss delete mode 100644 pages/tab-bar/tab-bar.d.ts delete mode 100644 pages/tab-bar/tab-bar.js delete mode 100644 pages/tab-bar/tab-bar.json delete mode 100644 pages/tab-bar/tab-bar.wxml delete mode 100644 pages/tab-bar/tab-bar.wxss delete mode 100644 pages/tab-bar/text-only/index.js delete mode 100644 pages/tab-bar/text-only/index.json delete mode 100644 pages/tab-bar/text-only/index.wxml delete mode 100644 pages/tab-bar/text-only/index.wxss delete mode 100644 pages/tabs/base/index.js delete mode 100644 pages/tabs/base/index.json delete mode 100644 pages/tabs/base/index.wxml delete mode 100644 pages/tabs/base/index.wxss delete mode 100644 pages/tabs/scroll/index.js delete mode 100644 pages/tabs/scroll/index.json delete mode 100644 pages/tabs/scroll/index.wxml delete mode 100644 pages/tabs/scroll/index.wxss delete mode 100644 pages/tabs/size/index.js delete mode 100644 pages/tabs/size/index.json delete mode 100644 pages/tabs/size/index.wxml delete mode 100644 pages/tabs/size/index.wxss delete mode 100644 pages/tabs/status/index.js delete mode 100644 pages/tabs/status/index.json delete mode 100644 pages/tabs/status/index.wxml delete mode 100644 pages/tabs/status/index.wxss delete mode 100644 pages/tabs/tabs.d.ts delete mode 100644 pages/tabs/tabs.js delete mode 100644 pages/tabs/tabs.json delete mode 100644 pages/tabs/tabs.wxml delete mode 100644 pages/tabs/tabs.wxss delete mode 100644 pages/tabs/theme/index.js delete mode 100644 pages/tabs/theme/index.json delete mode 100644 pages/tabs/theme/index.wxml delete mode 100644 pages/tabs/theme/index.wxss delete mode 100644 pages/tabs/with-badge/index.js delete mode 100644 pages/tabs/with-badge/index.json delete mode 100644 pages/tabs/with-badge/index.wxml delete mode 100644 pages/tabs/with-badge/index.wxss delete mode 100644 pages/tabs/with-content/index.js delete mode 100644 pages/tabs/with-content/index.json delete mode 100644 pages/tabs/with-content/index.wxml delete mode 100644 pages/tabs/with-content/index.wxss delete mode 100644 pages/tabs/with-icon/index.js delete mode 100644 pages/tabs/with-icon/index.json delete mode 100644 pages/tabs/with-icon/index.wxml delete mode 100644 pages/tabs/with-icon/index.wxss delete mode 100644 pages/tag/checkable/index.js delete mode 100644 pages/tag/checkable/index.json delete mode 100644 pages/tag/checkable/index.wxml delete mode 100644 pages/tag/checkable/index.wxss delete mode 100644 pages/tag/closable/index.js delete mode 100644 pages/tag/closable/index.wxml delete mode 100644 pages/tag/closable/index.wxss delete mode 100644 pages/tag/size/index.js delete mode 100644 pages/tag/size/index.json delete mode 100644 pages/tag/size/index.wxml delete mode 100644 pages/tag/size/index.wxss delete mode 100644 pages/tag/tag.d.ts delete mode 100644 pages/tag/tag.js delete mode 100644 pages/tag/tag.json delete mode 100644 pages/tag/tag.wxml delete mode 100644 pages/tag/tag.wxss delete mode 100644 pages/tag/theme/index.js delete mode 100644 pages/tag/theme/index.json delete mode 100644 pages/tag/theme/index.wxml delete mode 100644 pages/tag/theme/index.wxss delete mode 100644 pages/tag/type/index.js delete mode 100644 pages/tag/type/index.json delete mode 100644 pages/tag/type/index.wxml delete mode 100644 pages/tag/type/index.wxss delete mode 100644 pages/textarea/autosize/index.js delete mode 100644 pages/textarea/autosize/index.json delete mode 100644 pages/textarea/autosize/index.wxml delete mode 100644 pages/textarea/autosize/index.wxss delete mode 100644 pages/textarea/base/index.js delete mode 100644 pages/textarea/base/index.json delete mode 100644 pages/textarea/base/index.wxml delete mode 100644 pages/textarea/base/index.wxss delete mode 100644 pages/textarea/card/index.js delete mode 100644 pages/textarea/card/index.json delete mode 100644 pages/textarea/card/index.wxml delete mode 100644 pages/textarea/card/index.wxss delete mode 100644 pages/textarea/custom/index.js delete mode 100644 pages/textarea/custom/index.json delete mode 100644 pages/textarea/custom/index.wxml delete mode 100644 pages/textarea/custom/index.wxss delete mode 100644 pages/textarea/disabled/index.js delete mode 100644 pages/textarea/disabled/index.json delete mode 100644 pages/textarea/disabled/index.wxml delete mode 100644 pages/textarea/disabled/index.wxss delete mode 100644 pages/textarea/label/index.js delete mode 100644 pages/textarea/label/index.json delete mode 100644 pages/textarea/label/index.wxml delete mode 100644 pages/textarea/label/index.wxss delete mode 100644 pages/textarea/maxcharacter/index.js delete mode 100644 pages/textarea/maxcharacter/index.json delete mode 100644 pages/textarea/maxcharacter/index.wxml delete mode 100644 pages/textarea/maxcharacter/index.wxss delete mode 100644 pages/textarea/maxlength/index.js delete mode 100644 pages/textarea/maxlength/index.json delete mode 100644 pages/textarea/maxlength/index.wxml delete mode 100644 pages/textarea/maxlength/index.wxss delete mode 100644 pages/textarea/textarea.d.ts delete mode 100644 pages/textarea/textarea.js delete mode 100644 pages/textarea/textarea.json delete mode 100644 pages/textarea/textarea.wxml delete mode 100644 pages/textarea/textarea.wxss delete mode 100644 pages/toast/base/index.js delete mode 100644 pages/toast/base/index.json delete mode 100644 pages/toast/base/index.wxml delete mode 100644 pages/toast/base/index.wxss delete mode 100644 pages/toast/close/index.js delete mode 100644 pages/toast/close/index.json delete mode 100644 pages/toast/close/index.wxml delete mode 100644 pages/toast/close/index.wxss delete mode 100644 pages/toast/cover/index.js delete mode 100644 pages/toast/cover/index.json delete mode 100644 pages/toast/cover/index.wxml delete mode 100644 pages/toast/cover/index.wxss delete mode 100644 pages/toast/display/index.js delete mode 100644 pages/toast/display/index.json delete mode 100644 pages/toast/display/index.wxml delete mode 100644 pages/toast/display/index.wxss delete mode 100644 pages/toast/theme/index.js delete mode 100644 pages/toast/theme/index.json delete mode 100644 pages/toast/theme/index.wxml delete mode 100644 pages/toast/theme/index.wxss delete mode 100644 pages/toast/toast.d.ts delete mode 100644 pages/toast/toast.js delete mode 100644 pages/toast/toast.json delete mode 100644 pages/toast/toast.wxml delete mode 100644 pages/toast/toast.wxss delete mode 100644 pages/transition/api.md delete mode 100644 pages/transition/appear/index.d.ts delete mode 100644 pages/transition/appear/index.js delete mode 100644 pages/transition/appear/index.json delete mode 100644 pages/transition/appear/index.wxml delete mode 100644 pages/transition/base/index.d.ts delete mode 100644 pages/transition/base/index.js delete mode 100644 pages/transition/base/index.json delete mode 100644 pages/transition/base/index.wxml delete mode 100644 pages/transition/custom/index.d.ts delete mode 100644 pages/transition/custom/index.js delete mode 100644 pages/transition/custom/index.json delete mode 100644 pages/transition/custom/index.wxml delete mode 100644 pages/transition/custom/index.wxss delete mode 100644 pages/transition/destroy/index.d.ts delete mode 100644 pages/transition/destroy/index.js delete mode 100644 pages/transition/destroy/index.json delete mode 100644 pages/transition/destroy/index.wxml delete mode 100644 pages/transition/transition.d.ts delete mode 100644 pages/transition/transition.js delete mode 100644 pages/transition/transition.json delete mode 100644 pages/transition/transition.wxml delete mode 100644 pages/transition/transition.wxss delete mode 100644 pages/tree-select/base/index.js delete mode 100644 pages/tree-select/base/index.json delete mode 100644 pages/tree-select/base/index.wxml delete mode 100644 pages/tree-select/base/index.wxss delete mode 100644 pages/tree-select/multiple/index.js delete mode 100644 pages/tree-select/multiple/index.json delete mode 100644 pages/tree-select/multiple/index.wxml delete mode 100644 pages/tree-select/multiple/index.wxss delete mode 100644 pages/tree-select/normal/index.js delete mode 100644 pages/tree-select/normal/index.json delete mode 100644 pages/tree-select/normal/index.wxml delete mode 100644 pages/tree-select/normal/index.wxss delete mode 100644 pages/tree-select/tree-select.js delete mode 100644 pages/tree-select/tree-select.json delete mode 100644 pages/tree-select/tree-select.wxml delete mode 100644 pages/tree-select/tree-select.wxss delete mode 100644 pages/upload/messageFile/index.js delete mode 100644 pages/upload/messageFile/index.json delete mode 100644 pages/upload/messageFile/index.wxml delete mode 100644 pages/upload/messageFile/index.wxss delete mode 100644 pages/upload/multiple/index.js delete mode 100644 pages/upload/multiple/index.json delete mode 100644 pages/upload/multiple/index.wxml delete mode 100644 pages/upload/multiple/index.wxss delete mode 100644 pages/upload/single/index.js delete mode 100644 pages/upload/single/index.json delete mode 100644 pages/upload/single/index.wxml delete mode 100644 pages/upload/single/index.wxss delete mode 100644 pages/upload/status/index.js delete mode 100644 pages/upload/status/index.json delete mode 100644 pages/upload/status/index.wxml delete mode 100644 pages/upload/status/index.wxss delete mode 100644 pages/upload/upload.d.ts delete mode 100644 pages/upload/upload.js delete mode 100644 pages/upload/upload.json delete mode 100644 pages/upload/upload.wxml delete mode 100644 pages/upload/upload.wxss create mode 100644 utils/agora.ts delete mode 100644 utils/gulpError.js create mode 100644 utils/request.js create mode 100644 utils/singlr.ts create mode 100644 utils/utils.ts diff --git a/api/form/index.ts b/api/form/index.ts new file mode 100644 index 0000000..6ee1e23 --- /dev/null +++ b/api/form/index.ts @@ -0,0 +1,19 @@ +import { Request } from '../../utils/request' + +export const GetCheckoutRoomNum = (roomNum: string) => Request({ + url: `/room/checkout?roomNum=${roomNum}`, + method: 'get' +}) +export const PostAnonLogin = (data: any) => Request({ + url: `/auth/anon-login`, + method: 'post', + data, +}) +export const GetAgoraConf = () => Request({ + url: `/home/agora-conf`, + method: 'get', +}) +export const GetRoomRtcToken = (roomNum: string) => Request({ + url: `/room/tk/rtc?roomNum=${roomNum}`, + method: 'get', +}) diff --git a/api/meeting/index.ts b/api/meeting/index.ts new file mode 100644 index 0000000..de1b195 --- /dev/null +++ b/api/meeting/index.ts @@ -0,0 +1,50 @@ +import { Request } from '../../utils/request' + +export const GetRoomUser = (roomNum: string) => Request({ + url: `/room/user?roomNum=${roomNum}`, + method: 'get' +}) + +export const GetShowUser = (roomNum: string) => Request({ + url: `/room/show-user?roomNum=${roomNum}`, + method: 'get' +}) + +export const GetApplySpeak = (roomNum: string) => Request({ + url: `/room/apply-speak?roomNum=${roomNum}`, + method: 'get' +}) + +export const PostMuteAll = (data: any) => { + return Request({ + url: `/room/mute-all?roomNum=${data.roomNum}&enableMicr=${data.enableMicr}`, + method: 'get', + }) +} + +export const PostOpenMicr = (data: any) => { + return Request({ + url: `/room/oper-micr?roomNum=${data.roomNum}&enableMicr=${data.enableMicr}&uid=${data.uid}`, + method: 'get', + }) +} + +export const PostOpenCamera = (data: any) => + Request({ + url: `/room/oper-camera`, + method: 'get', + data + }) + +export const DeleteRoomManager = (data: any) => + Request({ + url: `/room/manager`, + method: 'delete', + data + }) + +export const GetRoomInfo = (roomNum: string) => + Request({ + url: `/room/${roomNum}`, + method: 'get', + }) diff --git a/app.js b/app.js index 2c70df4..2aff100 100644 --- a/app.js +++ b/app.js @@ -1,10 +1,5 @@ -import gulpError from './utils/gulpError'; App({ - onShow() { - if (gulpError !== 'gulpErrorPlaceHolder') { - wx.redirectTo({ - url: `/pages/gulp-error/index?gulpError=${gulpError}`, - }); - } - }, + onShow() { + + } }); diff --git a/app.json b/app.json index 05c393c..50a56d4 100644 --- a/app.json +++ b/app.json @@ -1,113 +1,24 @@ { "pages": [ - "pages/home/home", - "pages/button/button", - "pages/tabs/tabs", - "pages/icon/icon", - "pages/loading/loading", - "pages/progress/progress", - "pages/cascader/cascader", - "pages/cell/cell", - "pages/cell-group/cell-group", - "pages/collapse/collapse", - "pages/input/input", - "pages/badge/badge", - "pages/textarea/textarea", - "pages/message/message", - "pages/toast/toast", - "pages/stepper/stepper", - "pages/slider/slider", - "pages/radio/radio", - "pages/switch/switch", - "pages/sticky/sticky", - "pages/tag/tag", - "pages/checkbox/checkbox", - "pages/gulp-error/index", - "pages/fab/fab", - "pages/tab-bar/tab-bar", - "pages/transition/transition", - "pages/popup/popup", - "pages/steps/steps", - "pages/dropdown-menu/dropdown-menu", - "pages/drawer/drawer", - "pages/pull-down-refresh/pull-down-refresh", - "pages/skeleton/skeleton", - "pages/footer/footer", - "pages/divider/divider", - "pages/empty/empty", - "pages/back-top/back-top", - "pages/grid/grid", - "pages/upload/upload", - "pages/count-down/count-down", - "pages/overlay/overlay", - "pages/image/image", - "pages/search/search", - "pages/home/navigateFail/navigateFail", - "pages/navbar/navbar", - "pages/date-time-picker/date-time-picker", - "pages/notice-bar/notice-bar", - "pages/image-viewer/image-viewer", - "pages/result/result", - "pages/result/result-page", - "pages/link/link" - ], - "subpackages": [ - { - "root": "pages/side-bar/", - "pages": ["side-bar", "base/index", "switch/index", "custom/index", "with-icon/index"] - }, - { - "root": "pages/action-sheet/", - "pages": ["action-sheet"] - }, - { - "root": "pages/avatar/", - "pages": ["avatar"] - }, - { - "root": "pages/calendar/", - "pages": ["calendar"] - }, - { - "root": "pages/dialog/", - "pages": ["dialog"] - }, - { - "root": "pages/picker/", - "pages": ["picker"] - }, - { - "root": "pages/rate/", - "pages": ["rate"] - }, - { - "root": "pages/swiper/", - "pages": ["swiper"] - }, - { - "root": "pages/swipe-cell/", - "pages": ["swipe-cell"] - }, - { - "root": "pages/tree-select/", - "pages": ["tree-select"] - }, - { - "root": "pages/indexes/", - "pages": ["indexes", "base/index", "custom/index"] - } + "pages/form/index", + "pages/meeting/index" ], + "subpackages": [], "usingComponents": { - "t-demo": "./components/demo-block/index", + "status-bar-height": "components/status-bar-height/index", + "header-tab": "components/header-tab/index", + "t-input": "tdesign-miniprogram/input/input", "t-button": "tdesign-miniprogram/button/button", - "t-icon": "tdesign-miniprogram/icon/icon" + "t-icon": "tdesign-miniprogram/icon/icon", + "t-avatar": "tdesign-miniprogram/avatar/avatar", + "t-message": "tdesign-miniprogram/message/message", + "t-dialog": "tdesign-miniprogram/dialog/dialog", + "t-popup": "tdesign-miniprogram/popup/popup" }, + "entryPagePath": "pages/form/index", "window": { - "backgroundTextStyle": "light", - "navigationBarBackgroundColor": "#f6f6f6", - "backgroundColor": "#f6f6f6", - "navigationBarTitleText": "TDesign", + "navigationStyle": "custom", "navigationBarTextStyle": "black" }, "sitemapLocation": "sitemap.json" -} +} \ No newline at end of file diff --git a/app.wxss b/app.wxss index c397851..382ef28 100644 --- a/app.wxss +++ b/app.wxss @@ -1,19 +1,10 @@ +image { + display: block; +} + page { - background: #f6f6f6; -} -.demo { - padding-bottom: 56rpx; -} -.demo-title { - font-size: 48rpx; - font-weight: 700; - line-height: 64rpx; - margin: 48rpx 32rpx 0; - color: var(--td-font-gray-1, rgba(0, 0, 0, 0.9)); -} -.demo-desc { - font-size: 28rpx; - color: var(--td-font-gray-2, rgba(0, 0, 0, 0.6)); - margin: 16rpx 32rpx 0; - line-height: 44rpx; -} + --td-button-primary-color: white; + --td-button-primary-bg-color: #5575F2; + --td-button-primary-border-color: #5575F2; + --td-switch-checked-color: #5575F2; +} \ No newline at end of file diff --git a/assets/TDesignLogo@2x.png b/assets/TDesignLogo@2x.png deleted file mode 100644 index ab44a89295cd69875cde60d042b56f75b267b9d7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10893 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 diff --git a/assets/icon1-active.png b/assets/icon1-active.png new file mode 100644 index 0000000000000000000000000000000000000000..2451b910ea58dcb6bcd7d870f5ffe0138e0c1ba7 GIT binary patch literal 4531 zcmd5=`9GB1`#&>iEZHVoh%u(J)f3s*p&LVGFp=z$2g$x~HIWRVA<3@nJK;$b5@kZf zWXYN=kq|-%pS#a@{R_UY?+^EVUe`I->s+}C-(PmHmVK0B)*D*%AqfB>1oBkj+_ zdioL2$giom214 z<#qvU@e_haSl$Xa9*VnvN8lCaF8d35y|dCY(ZaF-XVK>PFG33QrObLvVPs_M7AwLI zVfV}8qXf1u%fIk`N%q9JcR=H=W=}o-`?$<-9;;#`m$IS6b~7Bj@RCW zf$8xpFDAhJH;PB#2>`7>$w}@{sEifob5vd7tR6!&@xY~Kw8c%;f)af%>(W%jrQF|=%>L*-9lH`_AHx+ z_$x~i0_2v=rCONsJW3+mqdc?V*mXlUM2s#io?5zESPp;*pI?QSDUTJ(KJ%-3CatYK zOjF4BUhQAP5xfA?issweRHIGYT%_~2T>>D)sPLGfXcLo(L8UW zBF&~{q@!2$wElL?)|xoXmktN>qCyNI_DgwdsmV>2Ao%1p=HT%CU)ej`8u4C74g^dQX733f3vTXbX$s?yR24-20J;9XMg+7>w>yCoffh zSG<7IkW8pxZ};#1_bh|WupQ#8`lh_PzUAzRnunuHqy7F@9TTqt>zIht3q&2UGBWU>P`B1@byA!$LW7o$6$}0eFpONzzf-GbA#HWeaW*eBe zyJKHBDr&vNi2v?X-X-UXk65NxFAk$zyuGznM$B}4`Vsi=P&r-7053I6fBrDFi(ay* zr@&ACsIsy2)`){j3l-$#?h{E*AL$)^_Rx-|F9NP*>TDcn9L49ZxN?P89@w;{ijF+v zB@auP<=CLf&^R5l!^Hi*R#w#4T^x9um51#5vlE!MT!kN(l!U)@9~BL^MB&3Ol?^)E zAkpE($oWw?!*{6x2rAb`>8ed28JeK~Qggauq@R$iHr4cj4?#6%n%=Dv`tymuxx?mf;Y^N><;9$FG)2PMk;6QTQe+GA zU+a}1uvtAN@(N}XhkuT-u5%tO9qXV;c6FLf+lk!{3rA3@d*%{Yy~s zKh4nZ7Hp(*UWwXQ3 z^mrxBtgbG3z0#(|B&LXqkt{(GP`Sg0nN|DQb3e1p?$;W(+U%nr0WZQ_bn-Yre{n#0 zS{xsyzuNTR0yLRtyK-7JO!@0pbA6&`tUDT$^p&4VyBD)<(Ebu?n%IMWp7W@$@-X!* zkmwOh9OAIO(-;HY)W=2#2Ru6>-fNG)=CQn*>=dn$vPlFQ3N zfF1YPCOsZ^yLD&H*5jXN(SxN^e+Az(2+lxoYxu+mO*%W;7R&Z@3QUo^d$sQI@vrz9 zmJfwG%Y4aNEB^GHg-oaqJto_7J)Z|__xN0N;r8d&f=1ktjI#XhE$_08OYeo-5Uq4X z)2@jUrhmy6>K1(}MczLDGqvNw`Wya(p-$UA8f(Il>4zE3?iEuAxV}WZucL6iT1Jp( z0AWwn(js-v=qn|XNG%Z;p0#Lka?D1{&$Bv%+=6`l%tOFOiCd#hcBASrX1hKwr?vql z+~p{9%6%$Jt?S<5Ruo`K`JjbgBJ;e_Qunmn6?FRK*PSyT)b?~N;cKm|*5*n#3lZc# z$#sr{w>lN`a^&ou5G6R>s^V724yQlcooO*ey(NV)0KIs@v3ecVKG*r7I0S0e*1w-J zX|TU+yh)(rl{<%rYGkYWI#Fa7$p!8r4}53x@!l3gsOl%-)~Bd#E4bY2-nzeI_4=I% z*}h#0*gm86kbzuGo9EBxCMO5plDjoA-L=!1>-ogiGu_!)^am+|fJpF}A99@>V!(%~ zm3|&##P5_*IB=84@TU9S9Sbf}!h1~pB}oc#8T~UKRKNZ3ObRfhj%hw`G@CHD_m@A) z0UQQi2kBizLf*$49KHM(x2BWbRE5DcYn1pwlPkGc+jPRAx=vo>+eC%|nSl%)vbX+q z0-4MF?mlH3sW>+=pn8E7Rv$Z@@O!HenR|$(PYj(l7qEM|BR>u_R2*R#GbT<_>8r?6!a~AN3-KO-?ZF{aujwy91Tn&an>E3 zQ?FRj6LpW7A0P<~m=Y!qfR=A+%R0$I6%;FBhb7I9NbChci~`yH71;#aC`(KdA=vO$mIbuLDx(E5E^`uFYu2)$xe-(a$&>)D6mIOHv@;i9+4M7 z02F%iph7keKKb+WlRu{X{;@_L!Zi9$NRHq@E;5>?Mww@0C3=+$|K~0l928bzNbOT< zgQ-eEG~JAq1@vXD8}+3hrl5u06;IencIIm%@tK8nmEI(T$?bF3?v5^LxJfD+PyyGt z$_h_K47vD~w%>7~TF+#G2S^s+o!;O0_96qslHh)$8zEG10)Yk&^mhbBxGb1B66<|m z?1}IOt=*VQND|2Px&)CSmRflz$+Z?9}olEln$UhSYF=i98d$O`VU8Wc8%UEBNOO zxSDS_x0)}eGt0%XFEGZ?RK`3eWfhAHZu4P=j`VG(IGVei@Zpu^ztLS)b}Z<(i$6pE zf!AVy9n@VPPuoOTPB5w~H|GZNF%T-Txl?85?vMgc;VUt@d#f`n3D(&@v(0Kvt$Ca* zAK(^3gcH}~LhQW;A zN_Uy>Z`FTesIr@@2=b*NXfja>(XOPz-_knneG04E`=)m!C7AQnsim)C zqU?35KLc%*)R_A`88S3}1{p7lI83xv3>L{dFmSQ+PQSGXB>yBX#5%D3!Sl`Xv0>Pu z4|myjbv!!}7?Z|4K|dR0je~-UXLb4wGc$LU;g(KzJxdGaS6MwR;a?cIL6<*YNJpVQLpM&6<@&kP5g zA05U>n?GPfmA$*deXXUXrPXEo*F}JS!q6%9fZa;oO&*MA z!5<1SuMS)b{l;(vSe&(=*d~%jL!Nqdjr!P7s@f&55_y#$#IRHmw3Flj37y$oynygUH<`c{K@;3&NQeaPb<&5BI9*YU=H45f>F z3q9GzIii@@uRAOTQz#1QocGGiRmC|IZj!DGFr5@OhW)oaM$D-qKAnq;0?Tz?qn1ni783s-lUvD0<2qX4Tiz z(c#9ay(i|*8q8d9xJiYU^Yip?^II2Uwg})*#Vd2<5=`cY{gQ7~0q}H)HH8KC8hu06@Y!WR9(H5uVuVR4 zi{i24qcDs7{!fHc1nd}NMncjOJilq#DyI#T`G|}9?>1px7+PVU_82Dft%Z5lLSZuh d|H}LU!`j%m9LdVt1ipm<2D(O2rH*~XzW|bX4o?68 literal 0 HcmV?d00001 diff --git a/assets/icon1.png b/assets/icon1.png new file mode 100644 index 0000000000000000000000000000000000000000..6d085447eb3f647d1c83f8d818ae86ec21d47742 GIT binary patch literal 5554 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 literal 0 HcmV?d00001 diff --git a/assets/icon2-active.png b/assets/icon2-active.png new file mode 100644 index 0000000000000000000000000000000000000000..ab927204274a5de84ccb61602667d5cf27d9945c GIT binary patch literal 12806 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 literal 0 HcmV?d00001 diff --git a/assets/icon2.png b/assets/icon2.png new file mode 100644 index 0000000000000000000000000000000000000000..6240217b380a0340eeb1cd3784391d4d593899b5 GIT binary patch literal 7886 zcmeI1_g53$xA4y-fh5u*2ugv-j*X=j=24bN;nBWx}^j zY#RW8@5J#VX8=G!TL+FCk+hEmxFLV|pyLi90PqNH9T3RO+Jy+AkTWJEP|_;#3%S5} z8<`scP=1GJ!;K37DfbgcjI1v~e+Eon%G+e@nVl&P5zMOI85HpFU@9gnEbqt5h;D0_ z+Y$MlYRS)h_n;07U;AA|>Tu83@aIimc$ucq%5&<^Ob$*{>(r?AzDN_q?SI#=Og|C|^{#Xr{g~m_KQ&)hSJ#I2$squ~4E_EYwUGeP@YKKA z!wr3RCI#4di;V zbN=@@sI+sExIr6v_%#l)$Z*nM@sI2?EZW$)zO12^eBp!)yo$8?cW$eZ z!($!xNE2~3P?VCQKI;N12q>}_gTZ;L;c_EvaP5u~gIIFlpmZ_1EQADF$a`0ZY?zwm zF_S|A!TE1znhx&cr3d1mGUKEKPDMFCP)*x7{kvIXkk<`Vox;JAqD}16sejL1nm4?` zi!NoprVw|*s)&nbz1(@j=jGn4E7MmDd!+z8<0^VaPsgOs2$BSs(RaCywS-P+LY3pZFrXM|VO zVIeC#%$HHS$x+0>=bO^fcpYcFZDjrd$!B6Ll^_x84 zjn2}xDC?M=ZI~bx63A-z7~n`VUUOb~%8#XuhR>Y?CSH2r6gizk)$R7@6q%%Y8C<{E zN&5xW@X3PPZ#OvqObEepf+*JYcrg1}gKfe5M)SG?Bw`7`MBNu`M5l9H?>D^H!#U$w z(muRb`v^ef4=va#CSmD3>_kAZlySg(R~+3P>ZgYS2@>$RT?EzqO90g}K+BW><7GkM zIbq_w2Ckpd1t##Y)9Pi>oyNe&W_teaVbsvJi7WyTVw{3s@v!8Ko-(a)Ly8SEnvkRr zimZ--y&1Oj!;Lbt0~!)X&3YCv#Qt{N%7yl%ea)9*D3lozG2tqB?JZASuD`x`BUS*d z=dK63Z@~^Cg94Y6m*3tL%3HFF{?c)w*hJt|(EZuwo+b$^!2c{72b^=kb zgzgU5eZt9&Y;b$)64@! zsEzVOO=!;}F=CQ6%I7TiK){qBILOxpG9L>PJEwT)+(q2&5{RnyH_0GF*23K77oEG! zE%7u5V_}v+c@95p9`pok2~HRrvtn={z&1yb%uvjf#k3dKR!Ix=K6{qKwj#NCcF+lFeY6IL$R}ZiLQH$| zr($>${_`oa;4s==Ul#7J(XHUI#kXVr?&%OmQ^%VlZ_-|B6ZufoR&F{7pVD>4Ol;=W`5wI!m$BVrZNFURhXy zcOCr`PZ@0K&96=P%|kA~3LNvanw_V4w(i>EpqA0w@HIh{&!-rApo2o=Lp=2I9}1JB zO0J%JZH51j{tM}{NLyT)JqbK-)X~s6H+Hut=d6;$Zdo|BX1iwECd?&>vafZ!18l(9 z!+r1v#9C~yN=To8z07}HfRDQ|AS;K^^bcbEoq4+MFFg4k@*Kkoyg_Cp076gV0DKA$ zfp$e%0QBTBfLL%9fQe)R0NH{lK(qQ^rTg5O(hBq|7>ZEdHwRQX>+v6wo-cYXp=z5I�^4w#xQq~x9I8QzsH|Rv%UE_xut4p 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 literal 0 HcmV?d00001 diff --git a/assets/icon3.png b/assets/icon3.png new file mode 100644 index 0000000000000000000000000000000000000000..46d733bccad1a82ae18566270ff1df23ca534b1f GIT binary patch literal 5193 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 literal 0 HcmV?d00001 diff --git a/assets/icon5.png b/assets/icon5.png new file mode 100644 index 0000000000000000000000000000000000000000..bb70c708360ecb7eee28e2845f44a7bae99e6684 GIT binary patch literal 7315 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 literal 0 HcmV?d00001 diff --git a/assets/icon6.png b/assets/icon6.png new file mode 100644 index 0000000000000000000000000000000000000000..bf2539632d66515914711d1141e5360bdf03f35d GIT binary patch literal 9242 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 literal 0 HcmV?d00001 diff --git a/assets/icon8.png b/assets/icon8.png new file mode 100644 index 0000000000000000000000000000000000000000..12d0958461fb9afb3980648dc1d4c1974d441e85 GIT binary patch literal 26401 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 literal 0 HcmV?d00001 diff --git a/assets/icon9.png b/assets/icon9.png new file mode 100644 index 0000000000000000000000000000000000000000..81a987813222936d5c73befa5eb4b033830d1305 GIT binary patch literal 299 zcmeAS@N?(olHy`uVBq!ia0vp^B0wz4!3HGVuAW-~q&N#aB8wRqxP?KOkzv*x37{Zj zage(c!@6@aFM%AEbVpxD28NCO+k#BxA(7&^;|KHJT6NrdNYnroH~7}{o!m!-g_%F z-$Y79Yn*GdJ1CH0C!oG@smh88W%``YeoSGx?_oXR^x3(+e?*#t_GA_nKev9`xZ>fW z_1-y)XGtHPofcR9WNPU(&8IK#bp~Avd9$R*O5{pN{^#VCyJsiwW8>X=d#UM;O-|O5 t8w1zfYq3kQTRzWmVcr+%3zD@m@khH=cOCMy+z0dvgQu&X%Q~loCICN3a<>2g literal 0 HcmV?d00001 diff --git a/components/demo-block/index.d.ts b/components/demo-block/index.d.ts deleted file mode 100644 index 8b13789..0000000 --- a/components/demo-block/index.d.ts +++ /dev/null @@ -1 +0,0 @@ - diff --git a/components/demo-block/index.js b/components/demo-block/index.js deleted file mode 100644 index 007225f..0000000 --- a/components/demo-block/index.js +++ /dev/null @@ -1,27 +0,0 @@ -Component({ - options: { - multipleSlots: true, - addGlobalClass: true, - }, - properties: { - title: { - type: String, - default: '', - }, - desc: { - type: String, - default: '', - }, - operList: Array, - padding: { - type: Boolean, - default: false, - }, - }, - methods: { - clickHandle(e) { - const { type } = e.currentTarget.dataset; - this.triggerEvent('clickoper', type); - }, - }, -}); diff --git a/components/demo-block/index.json b/components/demo-block/index.json deleted file mode 100644 index 467ce29..0000000 --- a/components/demo-block/index.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "component": true -} diff --git a/components/demo-block/index.wxml b/components/demo-block/index.wxml deleted file mode 100644 index ff89daa..0000000 --- a/components/demo-block/index.wxml +++ /dev/null @@ -1,18 +0,0 @@ - - - {{ title }} - {{ desc }} - - - - {{ operItem.title }} - - - {{ btnItem.text }} - - - - - - - diff --git a/components/demo-block/index.wxss b/components/demo-block/index.wxss deleted file mode 100644 index 6553930..0000000 --- a/components/demo-block/index.wxss +++ /dev/null @@ -1,43 +0,0 @@ -.demo-block { - margin: var(--td-spacer-4, 64rpx) 0 0; -} -.demo-block__header { - color: #000; - margin: 0 var(--td-spacer-2, 32rpx); -} -.demo-block__header-title { - font-weight: 700; - font-size: 36rpx; - line-height: 52rpx; -} -.demo-block__header-desc { - margin-top: var(--td-spacer, 16rpx); - font-size: var(--td-font-size-base, 28rpx); - white-space: pre-line; - color: var(--td-font-gray-2, rgba(0, 0, 0, 0.6)); - line-height: 22px; -} -.demo-block__oper { - margin-top: var(--td-spacer, 16rpx); -} -.demo-block__oper-subtitle { - font-size: var(--td-font-size-s, 24rpx); - margin-bottom: var(--td-spacer-2, 32rpx); - opacity: 0.4; -} -.demo-block__oper-btn { - margin: 0 0 var(--td-spacer-2, 32rpx) 0; - height: 96rpx; -} -.demo-block__slot { - margin-top: var(--td-spacer-2, 32rpx); -} -.demo-block__slot.with-padding { - margin: var(--td-spacer-2, 32rpx) var(--td-spacer-2, 32rpx) 0; -} -.demo-block_notitle { - margin-top: 0px; -} -.demo-block_notitle .demo-block_subtitle { - margin-top: var(--td-spacer-3, 48rpx); -} diff --git a/components/header-tab/index.json b/components/header-tab/index.json new file mode 100644 index 0000000..e8cfaaf --- /dev/null +++ b/components/header-tab/index.json @@ -0,0 +1,4 @@ +{ + "component": true, + "usingComponents": {} +} \ No newline at end of file diff --git a/components/header-tab/index.scss b/components/header-tab/index.scss new file mode 100644 index 0000000..8a11a7a --- /dev/null +++ b/components/header-tab/index.scss @@ -0,0 +1,18 @@ +.header-tab { + flex-shrink: 0; + + &-title { + position: relative; + text-align: center; + width: 100%; + padding: 24rpx 0; + + &-back { + position: absolute; + left: 40rpx; + top: 50%; + transform: translate(0, -50%); + } + } + +} \ No newline at end of file diff --git a/components/header-tab/index.ts b/components/header-tab/index.ts new file mode 100644 index 0000000..3fce1fc --- /dev/null +++ b/components/header-tab/index.ts @@ -0,0 +1,43 @@ +Component({ + properties: { + title: { + type: String, + value: '无' + }, + backGround: { + type: String, + value: 'white' + }, + isBack: { + type: Boolean, + value: true + }, + isStatusBarHeight: { + type: Boolean, + value: true + }, + color: { + type: String, + value: 'black' + }, + titleStyle: { + type: String, + }, + iconSize: { + type: String, + value: '48' + }, + }, + data: { + + }, + methods: { + back() { + wx.navigateBack() + }, + }, + ready() { + + + } +}) diff --git a/components/header-tab/index.wxml b/components/header-tab/index.wxml new file mode 100644 index 0000000..cda9fa0 --- /dev/null +++ b/components/header-tab/index.wxml @@ -0,0 +1,7 @@ + + + + {{title}} + + + \ No newline at end of file diff --git a/components/pull-down-list/index.d.ts b/components/pull-down-list/index.d.ts deleted file mode 100644 index 8639a8d..0000000 --- a/components/pull-down-list/index.d.ts +++ /dev/null @@ -1 +0,0 @@ -declare const itemHeight: number; diff --git a/components/pull-down-list/index.js b/components/pull-down-list/index.js deleted file mode 100644 index ef76163..0000000 --- a/components/pull-down-list/index.js +++ /dev/null @@ -1,41 +0,0 @@ -const itemHeight = 56 * 2; -Component({ - data: { - childBoxHeight: 0, - }, - externalClasses: ['t-class'], - properties: { - defaultOpen: { - type: Boolean, - value: false, - }, - name: { - type: String, - value: '', - }, - icon: { - type: String, - value: '', - }, - childArr: { - type: Array, - value: [], - observer(childArr) { - this.setData({ - childBoxHeight: this.data.defaultOpen ? itemHeight * childArr.length : 0, - }); - }, - }, - }, - methods: { - switchHandle() { - const { childArr, childBoxHeight } = this.data; - this.setData({ - childBoxHeight: childBoxHeight > 0 ? 0 : childArr.length * itemHeight, - }); - }, - tapChild(e) { - this.triggerEvent('click', e.target.dataset); - }, - }, -}); diff --git a/components/pull-down-list/index.json b/components/pull-down-list/index.json deleted file mode 100644 index 32640e0..0000000 --- a/components/pull-down-list/index.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "component": true -} \ No newline at end of file diff --git a/components/pull-down-list/index.wxml b/components/pull-down-list/index.wxml deleted file mode 100644 index cf58f3b..0000000 --- a/components/pull-down-list/index.wxml +++ /dev/null @@ -1,12 +0,0 @@ - - - {{ name }} - - - - - {{ item.name }} {{ item.label }} - - - - diff --git a/components/pull-down-list/index.wxss b/components/pull-down-list/index.wxss deleted file mode 100644 index ce6c2f1..0000000 --- a/components/pull-down-list/index.wxss +++ /dev/null @@ -1,49 +0,0 @@ -.pullDownList { - width: 100%; - box-sizing: border-box; - background-color: #fff; - border-radius: 8rpx; - margin-bottom: 24rpx; - overflow: hidden; -} -.pullDownList .switchBox { - height: 120rpx; - display: flex; - justify-content: space-between; - align-items: center; - padding: 0 32rpx; - font-size: 32rpx; - line-height: 48rpx; - color: #333; -} -.pullDownList .name, -.pullDownList .icon { - transition: opacity 0.3s; -} -.pullDownList .name { - opacity: 0.9; -} -.pullDownList.actived .name { - opacity: 0.4; -} -.pullDownList.actived .icon { - opacity: 0.4; -} -.pullDownList .childBox { - transition: height 0.3s; -} -.pullDownList .childBox .child { - box-sizing: border-box; - border-bottom: 1rpx solid #e5e5e5; - height: 112rpx; - display: flex; - justify-content: space-between; - align-items: center; - margin-left: 32rpx; - margin-right: 32rpx; - font-size: 32rpx; - opacity: 0.9; -} -.pullDownList .childBox .child:last-of-type { - border-bottom-color: transparent; -} diff --git a/components/status-bar-height/index.json b/components/status-bar-height/index.json new file mode 100644 index 0000000..e8cfaaf --- /dev/null +++ b/components/status-bar-height/index.json @@ -0,0 +1,4 @@ +{ + "component": true, + "usingComponents": {} +} \ No newline at end of file diff --git a/demos/radio/basic/basic.wxss b/components/status-bar-height/index.scss similarity index 100% rename from demos/radio/basic/basic.wxss rename to components/status-bar-height/index.scss diff --git a/components/status-bar-height/index.ts b/components/status-bar-height/index.ts new file mode 100644 index 0000000..eb3c0b2 --- /dev/null +++ b/components/status-bar-height/index.ts @@ -0,0 +1,16 @@ +Component({ + properties: { + + }, + data: { + height: 0 + }, + methods: { + + }, + ready() { + this.setData({ + height: wx.getWindowInfo().statusBarHeight + }) + } +}) diff --git a/components/status-bar-height/index.wxml b/components/status-bar-height/index.wxml new file mode 100644 index 0000000..d168bae --- /dev/null +++ b/components/status-bar-height/index.wxml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/demos/radio/basic/basic.d.ts b/demos/radio/basic/basic.d.ts deleted file mode 100644 index 8b13789..0000000 --- a/demos/radio/basic/basic.d.ts +++ /dev/null @@ -1 +0,0 @@ - diff --git a/demos/radio/basic/basic.js b/demos/radio/basic/basic.js deleted file mode 100644 index b79c512..0000000 --- a/demos/radio/basic/basic.js +++ /dev/null @@ -1 +0,0 @@ -Component({}); diff --git a/demos/radio/basic/basic.json b/demos/radio/basic/basic.json deleted file mode 100644 index 467ce29..0000000 --- a/demos/radio/basic/basic.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "component": true -} diff --git a/demos/radio/basic/basic.wxml b/demos/radio/basic/basic.wxml deleted file mode 100644 index c1c2a69..0000000 --- a/demos/radio/basic/basic.wxml +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/demos/radio/group/group.d.ts b/demos/radio/group/group.d.ts deleted file mode 100644 index 8b13789..0000000 --- a/demos/radio/group/group.d.ts +++ /dev/null @@ -1 +0,0 @@ - diff --git a/demos/radio/group/group.js b/demos/radio/group/group.js deleted file mode 100644 index 074920b..0000000 --- a/demos/radio/group/group.js +++ /dev/null @@ -1,22 +0,0 @@ -Component({ - properties: { - items: { - type: Array, - value: [], - }, - value: { - type: String, - value: '', - }, - }, - data: { - currentValue: '', - }, - methods: { - onChange(event) { - this.setData({ - currentValue: event.detail.name, - }); - }, - }, -}); diff --git a/demos/radio/group/group.json b/demos/radio/group/group.json deleted file mode 100644 index 467ce29..0000000 --- a/demos/radio/group/group.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "component": true -} diff --git a/demos/radio/group/group.wxml b/demos/radio/group/group.wxml deleted file mode 100644 index 8ff56d4..0000000 --- a/demos/radio/group/group.wxml +++ /dev/null @@ -1,12 +0,0 @@ - - - diff --git a/lib/agora-miniapp-sdk.js b/lib/agora-miniapp-sdk.js new file mode 100644 index 0000000..fec3c9f --- /dev/null +++ b/lib/agora-miniapp-sdk.js @@ -0,0 +1,2 @@ +/*! For license information please see agora-miniapp-sdk.js.LICENSE.txt */ +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("AgoraSDK",[],t):"object"==typeof exports?exports.AgoraSDK=t():e.AgoraSDK=t()}(self,(()=>(()=>{var __webpack_modules__={537:e=>{"use strict";e.exports=function(e,t){for(var n=new Array(arguments.length-1),r=0,i=2,o=!0;i{"use strict";var n=t;n.length=function(e){var t=e.length;if(!t)return 0;for(var n=0;--t%4>1&&"="===e.charAt(t);)++n;return Math.ceil(3*e.length)/4-n};for(var r=new Array(64),i=new Array(123),o=0;o<64;)i[r[o]=o<26?o+65:o<52?o+71:o<62?o-4:o-59|43]=o++;n.encode=function(e,t,n){for(var i,o=null,s=[],a=0,c=0;t>2],i=(3&l)<<4,c=1;break;case 1:s[a++]=r[i|l>>4],i=(15&l)<<2,c=2;break;case 2:s[a++]=r[i|l>>6],s[a++]=r[63&l],c=0}a>8191&&((o||(o=[])).push(String.fromCharCode.apply(String,s)),a=0)}return c&&(s[a++]=r[i],s[a++]=61,1===c&&(s[a++]=61)),o?(a&&o.push(String.fromCharCode.apply(String,s.slice(0,a))),o.join("")):String.fromCharCode.apply(String,s.slice(0,a))};var s="invalid encoding";n.decode=function(e,t,n){for(var r,o=n,a=0,c=0;c1)break;if(void 0===(l=i[l]))throw Error(s);switch(a){case 0:r=l,a=1;break;case 1:t[n++]=r<<2|(48&l)>>4,r=l,a=2;break;case 2:t[n++]=(15&r)<<4|(60&l)>>2,r=l,a=3;break;case 3:t[n++]=(3&r)<<6|l,a=0}}if(1===a)throw Error(s);return n-o},n.test=function(e){return/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(e)}},211:e=>{"use strict";function t(){this._listeners={}}e.exports=t,t.prototype.on=function(e,t,n){return(this._listeners[e]||(this._listeners[e]=[])).push({fn:t,ctx:n||this}),this},t.prototype.off=function(e,t){if(void 0===e)this._listeners={};else if(void 0===t)this._listeners[e]=[];else for(var n=this._listeners[e],r=0;r{"use strict";function t(e){return"undefined"!=typeof Float32Array?function(){var t=new Float32Array([-0]),n=new Uint8Array(t.buffer),r=128===n[3];function i(e,r,i){t[0]=e,r[i]=n[0],r[i+1]=n[1],r[i+2]=n[2],r[i+3]=n[3]}function o(e,r,i){t[0]=e,r[i]=n[3],r[i+1]=n[2],r[i+2]=n[1],r[i+3]=n[0]}function s(e,r){return n[0]=e[r],n[1]=e[r+1],n[2]=e[r+2],n[3]=e[r+3],t[0]}function a(e,r){return n[3]=e[r],n[2]=e[r+1],n[1]=e[r+2],n[0]=e[r+3],t[0]}e.writeFloatLE=r?i:o,e.writeFloatBE=r?o:i,e.readFloatLE=r?s:a,e.readFloatBE=r?a:s}():function(){function t(e,t,n,r){var i=t<0?1:0;if(i&&(t=-t),0===t)e(1/t>0?0:2147483648,n,r);else if(isNaN(t))e(2143289344,n,r);else if(t>34028234663852886e22)e((i<<31|2139095040)>>>0,n,r);else if(t<11754943508222875e-54)e((i<<31|Math.round(t/1401298464324817e-60))>>>0,n,r);else{var o=Math.floor(Math.log(t)/Math.LN2);e((i<<31|o+127<<23|8388607&Math.round(t*Math.pow(2,-o)*8388608))>>>0,n,r)}}function s(e,t,n){var r=e(t,n),i=2*(r>>31)+1,o=r>>>23&255,s=8388607&r;return 255===o?s?NaN:i*(1/0):0===o?1401298464324817e-60*i*s:i*Math.pow(2,o-150)*(s+8388608)}e.writeFloatLE=t.bind(null,n),e.writeFloatBE=t.bind(null,r),e.readFloatLE=s.bind(null,i),e.readFloatBE=s.bind(null,o)}(),"undefined"!=typeof Float64Array?function(){var t=new Float64Array([-0]),n=new Uint8Array(t.buffer),r=128===n[7];function i(e,r,i){t[0]=e,r[i]=n[0],r[i+1]=n[1],r[i+2]=n[2],r[i+3]=n[3],r[i+4]=n[4],r[i+5]=n[5],r[i+6]=n[6],r[i+7]=n[7]}function o(e,r,i){t[0]=e,r[i]=n[7],r[i+1]=n[6],r[i+2]=n[5],r[i+3]=n[4],r[i+4]=n[3],r[i+5]=n[2],r[i+6]=n[1],r[i+7]=n[0]}function s(e,r){return n[0]=e[r],n[1]=e[r+1],n[2]=e[r+2],n[3]=e[r+3],n[4]=e[r+4],n[5]=e[r+5],n[6]=e[r+6],n[7]=e[r+7],t[0]}function a(e,r){return n[7]=e[r],n[6]=e[r+1],n[5]=e[r+2],n[4]=e[r+3],n[3]=e[r+4],n[2]=e[r+5],n[1]=e[r+6],n[0]=e[r+7],t[0]}e.writeDoubleLE=r?i:o,e.writeDoubleBE=r?o:i,e.readDoubleLE=r?s:a,e.readDoubleBE=r?a:s}():function(){function t(e,t,n,r,i,o){var s=r<0?1:0;if(s&&(r=-r),0===r)e(0,i,o+t),e(1/r>0?0:2147483648,i,o+n);else if(isNaN(r))e(0,i,o+t),e(2146959360,i,o+n);else if(r>17976931348623157e292)e(0,i,o+t),e((s<<31|2146435072)>>>0,i,o+n);else{var a;if(r<22250738585072014e-324)e((a=r/5e-324)>>>0,i,o+t),e((s<<31|a/4294967296)>>>0,i,o+n);else{var c=Math.floor(Math.log(r)/Math.LN2);1024===c&&(c=1023),e(4503599627370496*(a=r*Math.pow(2,-c))>>>0,i,o+t),e((s<<31|c+1023<<20|1048576*a&1048575)>>>0,i,o+n)}}}function s(e,t,n,r,i){var o=e(r,i+t),s=e(r,i+n),a=2*(s>>31)+1,c=s>>>20&2047,l=4294967296*(1048575&s)+o;return 2047===c?l?NaN:a*(1/0):0===c?5e-324*a*l:a*Math.pow(2,c-1075)*(l+4503599627370496)}e.writeDoubleLE=t.bind(null,n,0,4),e.writeDoubleBE=t.bind(null,r,4,0),e.readDoubleLE=s.bind(null,i,0,4),e.readDoubleBE=s.bind(null,o,4,0)}(),e}function n(e,t,n){t[n]=255&e,t[n+1]=e>>>8&255,t[n+2]=e>>>16&255,t[n+3]=e>>>24}function r(e,t,n){t[n]=e>>>24,t[n+1]=e>>>16&255,t[n+2]=e>>>8&255,t[n+3]=255&e}function i(e,t){return(e[t]|e[t+1]<<8|e[t+2]<<16|e[t+3]<<24)>>>0}function o(e,t){return(e[t]<<24|e[t+1]<<16|e[t+2]<<8|e[t+3])>>>0}e.exports=t(t)},199:module=>{"use strict";function inquire(moduleName){try{var mod=eval("quire".replace(/^/,"re"))(moduleName);if(mod&&(mod.length||Object.keys(mod).length))return mod}catch(e){}return null}module.exports=inquire},662:e=>{"use strict";e.exports=function(e,t,n){var r=n||8192,i=r>>>1,o=null,s=r;return function(n){if(n<1||n>i)return e(n);s+n>r&&(o=e(r),s=0);var a=t.call(o,s,s+=n);return 7&s&&(s=1+(7|s)),a}}},997:(e,t)=>{"use strict";var n=t;n.length=function(e){for(var t=0,n=0,r=0;r191&&r<224?o[s++]=(31&r)<<6|63&e[t++]:r>239&&r<365?(r=((7&r)<<18|(63&e[t++])<<12|(63&e[t++])<<6|63&e[t++])-65536,o[s++]=55296+(r>>10),o[s++]=56320+(1023&r)):o[s++]=(15&r)<<12|(63&e[t++])<<6|63&e[t++],s>8191&&((i||(i=[])).push(String.fromCharCode.apply(String,o)),s=0);return i?(s&&i.push(String.fromCharCode.apply(String,o.slice(0,s))),i.join("")):String.fromCharCode.apply(String,o.slice(0,s))},n.write=function(e,t,n){for(var r,i,o=n,s=0;s>6|192,t[n++]=63&r|128):55296==(64512&r)&&56320==(64512&(i=e.charCodeAt(s+1)))?(r=65536+((1023&r)<<10)+(1023&i),++s,t[n++]=r>>18|240,t[n++]=r>>12&63|128,t[n++]=r>>6&63|128,t[n++]=63&r|128):(t[n++]=r>>12|224,t[n++]=r>>6&63|128,t[n++]=63&r|128);return n-o}},699:(e,t,n)=>{"use strict";var r,i,o,s,a,c=n(100),l=c.Writer,u=c.util,p=c.roots.default||(c.roots.default={});p.io=((a={}).agora=((s={}).pb=((o={}).CounterCompact=function(){function e(e){if(this.items=[],e)for(var t=Object.keys(e),n=0;n{"use strict";n.r(t),n.d(t,{DOMAIN_NAME:()=>o,SDK_VERSION:()=>i,VERSION:()=>r});var r="1.1.0",i="2.6.4",o="mini-app.broadcastapp.agoraio.cn"},426:(e,t,n)=>{"use strict";n.r(t),n.d(t,{generateSessionId:()=>s,is32Uint:()=>l,isWeiXin:()=>c,random:()=>o,shouldUseHttps:()=>a});var r=n(171),i=n.n(r),o=function(e){isNaN(e)&&(e=1e3);var t=+new Date,n=(t=(9301*t+49297)%233280)/233280;return Math.ceil(n*e)},s=function(){return i()().replace(/-/g,"").toUpperCase()},a=function(){return"https:"==document.location.protocol},c=function(){try{return wx,!0}catch(e){return!1}},l=function(e){return!!(0<=e&&e<=4294967295)}},186:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>u});var r=n(861),i=n(671),o=n(144),s=n(687),a=n.n(s),c=(n(568),n(446)),l=function(){function e(t){var n=t.appId,r=t.content,o=t.ts;(0,i.Z)(this,e),this.appId=n,this.content=r,this.ts=o}return(0,o.Z)(e,[{key:"upload",value:function(){var e=this;return new Promise((function(t,n){wx.request({url:"https://report-ad.agoralab.co/v1/log/report",method:"post",data:{data:e.content,appId:e.appId,ts:e.ts,src:"miniapp",version:c.SDK_VERSION},success:function(){t()},fail:function(e){n(e)}})}))}}]),e}();const u=new(function(){function e(){(0,i.Z)(this,e),this.level=3,this.onLog=null,this.logItems=[],this.appId="",this.sid=""}return(0,o.Z)(e,[{key:"setOptions",value:function(e){var t=e.appId,n=void 0===t?"":t,r=e.sid,i=void 0===r?"":r;this.appId=n,this.sid=i}},{key:"setLogLevel",value:function(e){if("number"!=typeof e||!(e<=4&&e>=-1))throw Error("Invalid level");this.level=e}},{key:"_storeLog",value:function(e){this.logItems.push({msg:e,sid:this.sid}),this.logItems.length>5e4&&this.logItems.shift()}},{key:"_log",value:function(){for(var e="",t=arguments.length,n=new Array(t),r=0;r{"use strict";n.r(t),n.d(t,{checkValidBoolean:()=>l,checkValidEnum:()=>i,checkValidFloatNumber:()=>c,checkValidNumber:()=>a,checkValidObject:()=>o,checkValidString:()=>s,getServerUrlIp:()=>b,isASCII:()=>_,isArray:()=>w,isEmpty:()=>O,isInteger:()=>g,isNumber:()=>v,isString:()=>m,isValidBoolean:()=>d,isValidChannelName:()=>y,isValidNumber:()=>p,isValidString:()=>u,isValidToken:()=>f,stringifyErr:()=>E,throttle:()=>S,transformElapseStr:()=>R});var r=n(2),i=function(e,t,n){for(var r=0;r=t&&e.length<=n},p=function(e,t,n){return g(e)&&e>=t&&e<=n},h=function(e,t,n){return v(e)&&e>=t&&e<=n},d=function(e){return"boolean"==typeof e},f=function(e){return u(e,1,2047)},y=function(e){return m(e)&&/^[a-zA-Z0-9 \!\#\$\%\&\(\)\+\-\:\;\<\=\.\>\?\@\[\]\^\_\{\}\|\~\,]{1,64}$/.test(e)},_=function(e){if("string"==typeof e){for(var t=0;t255)return!1}return!0}},g=function(e){return"number"==typeof e&&e%1==0},v=function(e){return"number"==typeof e},m=function(e){return"string"==typeof e},w=function(e){return e instanceof Array},O=function(e){return null==e},E=function(e){return e instanceof Error||e.message?e.message:JSON.stringify(e)},b=function(e){var t=/wss:\/\/miniapp.agoraio.cn\/(\S+)\/api/g.exec(e);return t instanceof Array&&t[1]||""},R=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;return(e=Number(e))<=0?"<0ms":e>0&&e<=50?"0~50ms":e>50&&e<=100?"50~100ms":e>100&&e<=200?"100~200ms":e>200&&e<=300?"200~300ms":e>300&&e<=500?"300~500ms":e>500&&e<=800?"500~800ms":e>800&&e<=1e3?"800~1000ms":e>1e3&&e<=1500?"1~1.5s":e>1500&&e<=2e3?"1.5~2s":e>2e3&&e<=3e3?"2~3s":e>3e3&&e<=5e3?"3~5s":e>5e3&&e<=8e3?"5~8s":e>8e3&&e<=1e4?"8~10s":">10s"},S=function(e){var t,n,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;return function(){for(var i=arguments.length,o=new Array(i),s=0;s{var t={utf8:{stringToBytes:function(e){return t.bin.stringToBytes(unescape(encodeURIComponent(e)))},bytesToString:function(e){return decodeURIComponent(escape(t.bin.bytesToString(e)))}},bin:{stringToBytes:function(e){for(var t=[],n=0;n{var t,n;t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",n={rotl:function(e,t){return e<>>32-t},rotr:function(e,t){return e<<32-t|e>>>t},endian:function(e){if(e.constructor==Number)return 16711935&n.rotl(e,8)|4278255360&n.rotl(e,24);for(var t=0;t0;e--)t.push(Math.floor(256*Math.random()));return t},bytesToWords:function(e){for(var t=[],n=0,r=0;n>>5]|=e[n]<<24-r%32;return t},wordsToBytes:function(e){for(var t=[],n=0;n<32*e.length;n+=8)t.push(e[n>>>5]>>>24-n%32&255);return t},bytesToHex:function(e){for(var t=[],n=0;n>>4).toString(16)),t.push((15&e[n]).toString(16));return t.join("")},hexToBytes:function(e){for(var t=[],n=0;n>>6*(3-o)&63)):n.push("=");return n.join("")},base64ToBytes:function(e){e=e.replace(/[^A-Z0-9+\/]/gi,"");for(var n=[],r=0,i=0;r>>6-2*i);return n}},e.exports=n},738:e=>{function t(e){return!!e.constructor&&"function"==typeof e.constructor.isBuffer&&e.constructor.isBuffer(e)}e.exports=function(e){return null!=e&&(t(e)||function(e){return"function"==typeof e.readFloatLE&&"function"==typeof e.slice&&t(e.slice(0,0))}(e)||!!e._isBuffer)}},568:(e,t,n)=>{var r,i,o,s,a;r=n(12),i=n(487).utf8,o=n(738),s=n(487).bin,(a=function(e,t){e.constructor==String?e=t&&"binary"===t.encoding?s.stringToBytes(e):i.stringToBytes(e):o(e)?e=Array.prototype.slice.call(e,0):Array.isArray(e)||e.constructor===Uint8Array||(e=e.toString());for(var n=r.bytesToWords(e),c=8*e.length,l=1732584193,u=-271733879,p=-1732584194,h=271733878,d=0;d>>24)|4278255360&(n[d]<<24|n[d]>>>8);n[c>>>5]|=128<>>9<<4)]=c;var f=a._ff,y=a._gg,_=a._hh,g=a._ii;for(d=0;d>>0,u=u+m>>>0,p=p+w>>>0,h=h+O>>>0}return r.endian([l,u,p,h])})._ff=function(e,t,n,r,i,o,s){var a=e+(t&n|~t&r)+(i>>>0)+s;return(a<>>32-o)+t},a._gg=function(e,t,n,r,i,o,s){var a=e+(t&r|n&~r)+(i>>>0)+s;return(a<>>32-o)+t},a._hh=function(e,t,n,r,i,o,s){var a=e+(t^n^r)+(i>>>0)+s;return(a<>>32-o)+t},a._ii=function(e,t,n,r,i,o,s){var a=e+(n^(t|~r))+(i>>>0)+s;return(a<>>32-o)+t},a._blocksize=16,a._digestsize=16,e.exports=function(e,t){if(null==e)throw new Error("Illegal argument "+e);var n=r.wordsToBytes(a(e,t));return t&&t.asBytes?n:t&&t.asString?s.bytesToString(n):r.bytesToHex(n)}},100:(e,t,n)=>{"use strict";e.exports=n(482)},482:(e,t,n)=>{"use strict";var r=t;function i(){r.util._configure(),r.Writer._configure(r.BufferWriter),r.Reader._configure(r.BufferReader)}r.build="minimal",r.Writer=n(173),r.BufferWriter=n(155),r.Reader=n(408),r.BufferReader=n(593),r.util=n(693),r.rpc=n(994),r.roots=n(54),r.configure=i,i()},408:(e,t,n)=>{"use strict";e.exports=c;var r,i=n(693),o=i.LongBits,s=i.utf8;function a(e,t){return RangeError("index out of range: "+e.pos+" + "+(t||1)+" > "+e.len)}function c(e){this.buf=e,this.pos=0,this.len=e.length}var l,u="undefined"!=typeof Uint8Array?function(e){if(e instanceof Uint8Array||Array.isArray(e))return new c(e);throw Error("illegal buffer")}:function(e){if(Array.isArray(e))return new c(e);throw Error("illegal buffer")},p=function(){return i.Buffer?function(e){return(c.create=function(e){return i.Buffer.isBuffer(e)?new r(e):u(e)})(e)}:u};function h(){var e=new o(0,0),t=0;if(!(this.len-this.pos>4)){for(;t<3;++t){if(this.pos>=this.len)throw a(this);if(e.lo=(e.lo|(127&this.buf[this.pos])<<7*t)>>>0,this.buf[this.pos++]<128)return e}return e.lo=(e.lo|(127&this.buf[this.pos++])<<7*t)>>>0,e}for(;t<4;++t)if(e.lo=(e.lo|(127&this.buf[this.pos])<<7*t)>>>0,this.buf[this.pos++]<128)return e;if(e.lo=(e.lo|(127&this.buf[this.pos])<<28)>>>0,e.hi=(e.hi|(127&this.buf[this.pos])>>4)>>>0,this.buf[this.pos++]<128)return e;if(t=0,this.len-this.pos>4){for(;t<5;++t)if(e.hi=(e.hi|(127&this.buf[this.pos])<<7*t+3)>>>0,this.buf[this.pos++]<128)return e}else for(;t<5;++t){if(this.pos>=this.len)throw a(this);if(e.hi=(e.hi|(127&this.buf[this.pos])<<7*t+3)>>>0,this.buf[this.pos++]<128)return e}throw Error("invalid varint encoding")}function d(e,t){return(e[t-4]|e[t-3]<<8|e[t-2]<<16|e[t-1]<<24)>>>0}function f(){if(this.pos+8>this.len)throw a(this,8);return new o(d(this.buf,this.pos+=4),d(this.buf,this.pos+=4))}c.create=p(),c.prototype._slice=i.Array.prototype.subarray||i.Array.prototype.slice,c.prototype.uint32=(l=4294967295,function(){if(l=(127&this.buf[this.pos])>>>0,this.buf[this.pos++]<128)return l;if(l=(l|(127&this.buf[this.pos])<<7)>>>0,this.buf[this.pos++]<128)return l;if(l=(l|(127&this.buf[this.pos])<<14)>>>0,this.buf[this.pos++]<128)return l;if(l=(l|(127&this.buf[this.pos])<<21)>>>0,this.buf[this.pos++]<128)return l;if(l=(l|(15&this.buf[this.pos])<<28)>>>0,this.buf[this.pos++]<128)return l;if((this.pos+=5)>this.len)throw this.pos=this.len,a(this,10);return l}),c.prototype.int32=function(){return 0|this.uint32()},c.prototype.sint32=function(){var e=this.uint32();return e>>>1^-(1&e)|0},c.prototype.bool=function(){return 0!==this.uint32()},c.prototype.fixed32=function(){if(this.pos+4>this.len)throw a(this,4);return d(this.buf,this.pos+=4)},c.prototype.sfixed32=function(){if(this.pos+4>this.len)throw a(this,4);return 0|d(this.buf,this.pos+=4)},c.prototype.float=function(){if(this.pos+4>this.len)throw a(this,4);var e=i.float.readFloatLE(this.buf,this.pos);return this.pos+=4,e},c.prototype.double=function(){if(this.pos+8>this.len)throw a(this,4);var e=i.float.readDoubleLE(this.buf,this.pos);return this.pos+=8,e},c.prototype.bytes=function(){var e=this.uint32(),t=this.pos,n=this.pos+e;if(n>this.len)throw a(this,e);return this.pos+=e,Array.isArray(this.buf)?this.buf.slice(t,n):t===n?new this.buf.constructor(0):this._slice.call(this.buf,t,n)},c.prototype.string=function(){var e=this.bytes();return s.read(e,0,e.length)},c.prototype.skip=function(e){if("number"==typeof e){if(this.pos+e>this.len)throw a(this,e);this.pos+=e}else do{if(this.pos>=this.len)throw a(this)}while(128&this.buf[this.pos++]);return this},c.prototype.skipType=function(e){switch(e){case 0:this.skip();break;case 1:this.skip(8);break;case 2:this.skip(this.uint32());break;case 3:for(;4!=(e=7&this.uint32());)this.skipType(e);break;case 5:this.skip(4);break;default:throw Error("invalid wire type "+e+" at offset "+this.pos)}return this},c._configure=function(e){r=e,c.create=p(),r._configure();var t=i.Long?"toLong":"toNumber";i.merge(c.prototype,{int64:function(){return h.call(this)[t](!1)},uint64:function(){return h.call(this)[t](!0)},sint64:function(){return h.call(this).zzDecode()[t](!1)},fixed64:function(){return f.call(this)[t](!0)},sfixed64:function(){return f.call(this)[t](!1)}})}},593:(e,t,n)=>{"use strict";e.exports=o;var r=n(408);(o.prototype=Object.create(r.prototype)).constructor=o;var i=n(693);function o(e){r.call(this,e)}o._configure=function(){i.Buffer&&(o.prototype._slice=i.Buffer.prototype.slice)},o.prototype.string=function(){var e=this.uint32();return this.buf.utf8Slice?this.buf.utf8Slice(this.pos,this.pos=Math.min(this.pos+e,this.len)):this.buf.toString("utf-8",this.pos,this.pos=Math.min(this.pos+e,this.len))},o._configure()},54:e=>{"use strict";e.exports={}},994:(e,t,n)=>{"use strict";t.Service=n(948)},948:(e,t,n)=>{"use strict";e.exports=i;var r=n(693);function i(e,t,n){if("function"!=typeof e)throw TypeError("rpcImpl must be a function");r.EventEmitter.call(this),this.rpcImpl=e,this.requestDelimited=Boolean(t),this.responseDelimited=Boolean(n)}(i.prototype=Object.create(r.EventEmitter.prototype)).constructor=i,i.prototype.rpcCall=function e(t,n,i,o,s){if(!o)throw TypeError("request must be specified");var a=this;if(!s)return r.asPromise(e,a,t,n,i,o);if(a.rpcImpl)try{return a.rpcImpl(t,n[a.requestDelimited?"encodeDelimited":"encode"](o).finish(),(function(e,n){if(e)return a.emit("error",e,t),s(e);if(null!==n){if(!(n instanceof i))try{n=i[a.responseDelimited?"decodeDelimited":"decode"](n)}catch(e){return a.emit("error",e,t),s(e)}return a.emit("data",n,t),s(null,n)}a.end(!0)}))}catch(e){return a.emit("error",e,t),void setTimeout((function(){s(e)}),0)}else setTimeout((function(){s(Error("already ended"))}),0)},i.prototype.end=function(e){return this.rpcImpl&&(e||this.rpcImpl(null,null,null),this.rpcImpl=null,this.emit("end").off()),this}},630:(e,t,n)=>{"use strict";e.exports=i;var r=n(693);function i(e,t){this.lo=e>>>0,this.hi=t>>>0}var o=i.zero=new i(0,0);o.toNumber=function(){return 0},o.zzEncode=o.zzDecode=function(){return this},o.length=function(){return 1};var s=i.zeroHash="\0\0\0\0\0\0\0\0";i.fromNumber=function(e){if(0===e)return o;var t=e<0;t&&(e=-e);var n=e>>>0,r=(e-n)/4294967296>>>0;return t&&(r=~r>>>0,n=~n>>>0,++n>4294967295&&(n=0,++r>4294967295&&(r=0))),new i(n,r)},i.from=function(e){if("number"==typeof e)return i.fromNumber(e);if(r.isString(e)){if(!r.Long)return i.fromNumber(parseInt(e,10));e=r.Long.fromString(e)}return e.low||e.high?new i(e.low>>>0,e.high>>>0):o},i.prototype.toNumber=function(e){if(!e&&this.hi>>>31){var t=1+~this.lo>>>0,n=~this.hi>>>0;return t||(n=n+1>>>0),-(t+4294967296*n)}return this.lo+4294967296*this.hi},i.prototype.toLong=function(e){return r.Long?new r.Long(0|this.lo,0|this.hi,Boolean(e)):{low:0|this.lo,high:0|this.hi,unsigned:Boolean(e)}};var a=String.prototype.charCodeAt;i.fromHash=function(e){return e===s?o:new i((a.call(e,0)|a.call(e,1)<<8|a.call(e,2)<<16|a.call(e,3)<<24)>>>0,(a.call(e,4)|a.call(e,5)<<8|a.call(e,6)<<16|a.call(e,7)<<24)>>>0)},i.prototype.toHash=function(){return String.fromCharCode(255&this.lo,this.lo>>>8&255,this.lo>>>16&255,this.lo>>>24,255&this.hi,this.hi>>>8&255,this.hi>>>16&255,this.hi>>>24)},i.prototype.zzEncode=function(){var e=this.hi>>31;return this.hi=((this.hi<<1|this.lo>>>31)^e)>>>0,this.lo=(this.lo<<1^e)>>>0,this},i.prototype.zzDecode=function(){var e=-(1&this.lo);return this.lo=((this.lo>>>1|this.hi<<31)^e)>>>0,this.hi=(this.hi>>>1^e)>>>0,this},i.prototype.length=function(){var e=this.lo,t=(this.lo>>>28|this.hi<<4)>>>0,n=this.hi>>>24;return 0===n?0===t?e<16384?e<128?1:2:e<2097152?3:4:t<16384?t<128?5:6:t<2097152?7:8:n<128?9:10}},693:function(e,t,n){"use strict";var r=t;function i(e,t,n){for(var r=Object.keys(t),i=0;i0)},r.Buffer=function(){try{var e=r.inquire("buffer").Buffer;return e.prototype.utf8Write?e:null}catch(e){return null}}(),r._Buffer_from=null,r._Buffer_allocUnsafe=null,r.newBuffer=function(e){return"number"==typeof e?r.Buffer?r._Buffer_allocUnsafe(e):new r.Array(e):r.Buffer?r._Buffer_from(e):"undefined"==typeof Uint8Array?e:new Uint8Array(e)},r.Array="undefined"!=typeof Uint8Array?Uint8Array:Array,r.Long=r.global.dcodeIO&&r.global.dcodeIO.Long||r.global.Long||r.inquire("long"),r.key2Re=/^true|false|0|1$/,r.key32Re=/^-?(?:0|[1-9][0-9]*)$/,r.key64Re=/^(?:[\\x00-\\xff]{8}|-?(?:0|[1-9][0-9]*))$/,r.longToHash=function(e){return e?r.LongBits.from(e).toHash():r.LongBits.zeroHash},r.longFromHash=function(e,t){var n=r.LongBits.fromHash(e);return r.Long?r.Long.fromBits(n.lo,n.hi,t):n.toNumber(Boolean(t))},r.merge=i,r.lcFirst=function(e){return e.charAt(0).toLowerCase()+e.substring(1)},r.newError=o,r.ProtocolError=o("ProtocolError"),r.oneOfGetter=function(e){for(var t={},n=0;n-1;--n)if(1===t[e[n]]&&void 0!==this[e[n]]&&null!==this[e[n]])return e[n]}},r.oneOfSetter=function(e){return function(t){for(var n=0;n{"use strict";e.exports=p;var r,i=n(693),o=i.LongBits,s=i.base64,a=i.utf8;function c(e,t,n){this.fn=e,this.len=t,this.next=void 0,this.val=n}function l(){}function u(e){this.head=e.head,this.tail=e.tail,this.len=e.len,this.next=e.states}function p(){this.len=0,this.head=new c(l,0,0),this.tail=this.head,this.states=null}var h=function(){return i.Buffer?function(){return(p.create=function(){return new r})()}:function(){return new p}};function d(e,t,n){t[n]=255&e}function f(e,t){this.len=e,this.next=void 0,this.val=t}function y(e,t,n){for(;e.hi;)t[n++]=127&e.lo|128,e.lo=(e.lo>>>7|e.hi<<25)>>>0,e.hi>>>=7;for(;e.lo>127;)t[n++]=127&e.lo|128,e.lo=e.lo>>>7;t[n++]=e.lo}function _(e,t,n){t[n]=255&e,t[n+1]=e>>>8&255,t[n+2]=e>>>16&255,t[n+3]=e>>>24}p.create=h(),p.alloc=function(e){return new i.Array(e)},i.Array!==Array&&(p.alloc=i.pool(p.alloc,i.Array.prototype.subarray)),p.prototype._push=function(e,t,n){return this.tail=this.tail.next=new c(e,t,n),this.len+=t,this},f.prototype=Object.create(c.prototype),f.prototype.fn=function(e,t,n){for(;e>127;)t[n++]=127&e|128,e>>>=7;t[n]=e},p.prototype.uint32=function(e){return this.len+=(this.tail=this.tail.next=new f((e>>>=0)<128?1:e<16384?2:e<2097152?3:e<268435456?4:5,e)).len,this},p.prototype.int32=function(e){return e<0?this._push(y,10,o.fromNumber(e)):this.uint32(e)},p.prototype.sint32=function(e){return this.uint32((e<<1^e>>31)>>>0)},p.prototype.uint64=function(e){var t=o.from(e);return this._push(y,t.length(),t)},p.prototype.int64=p.prototype.uint64,p.prototype.sint64=function(e){var t=o.from(e).zzEncode();return this._push(y,t.length(),t)},p.prototype.bool=function(e){return this._push(d,1,e?1:0)},p.prototype.fixed32=function(e){return this._push(_,4,e>>>0)},p.prototype.sfixed32=p.prototype.fixed32,p.prototype.fixed64=function(e){var t=o.from(e);return this._push(_,4,t.lo)._push(_,4,t.hi)},p.prototype.sfixed64=p.prototype.fixed64,p.prototype.float=function(e){return this._push(i.float.writeFloatLE,4,e)},p.prototype.double=function(e){return this._push(i.float.writeDoubleLE,8,e)};var g=i.Array.prototype.set?function(e,t,n){t.set(e,n)}:function(e,t,n){for(var r=0;r>>0;if(!t)return this._push(d,1,0);if(i.isString(e)){var n=p.alloc(t=s.length(e));s.decode(e,n,0),e=n}return this.uint32(t)._push(g,t,e)},p.prototype.string=function(e){var t=a.length(e);return t?this.uint32(t)._push(a.write,t,e):this._push(d,1,0)},p.prototype.fork=function(){return this.states=new u(this),this.head=this.tail=new c(l,0,0),this.len=0,this},p.prototype.reset=function(){return this.states?(this.head=this.states.head,this.tail=this.states.tail,this.len=this.states.len,this.states=this.states.next):(this.head=this.tail=new c(l,0,0),this.len=0),this},p.prototype.ldelim=function(){var e=this.head,t=this.tail,n=this.len;return this.reset().uint32(n),n&&(this.tail.next=e.next,this.tail=t,this.len+=n),this},p.prototype.finish=function(){for(var e=this.head.next,t=this.constructor.alloc(this.len),n=0;e;)e.fn(e.val,t,n),n+=e.len,e=e.next;return t},p._configure=function(e){r=e,p.create=h(),r._configure()}},155:(e,t,n)=>{"use strict";e.exports=o;var r=n(173);(o.prototype=Object.create(r.prototype)).constructor=o;var i=n(693);function o(){r.call(this)}function s(e,t,n){e.length<40?i.utf8.write(e,t,n):t.utf8Write?t.utf8Write(e,n):t.write(e,n)}o._configure=function(){o.alloc=i._Buffer_allocUnsafe,o.writeBytesBuffer=i.Buffer&&i.Buffer.prototype instanceof Uint8Array&&"set"===i.Buffer.prototype.set.name?function(e,t,n){t.set(e,n)}:function(e,t,n){if(e.copy)e.copy(t,n,0,e.length);else for(var r=0;r>>0;return this.uint32(t),t&&this._push(o.writeBytesBuffer,t,e),this},o.prototype.string=function(e){var t=i.Buffer.byteLength(e);return this.uint32(t),t&&this._push(s,t,e),this},o._configure()},500:function(e,t,n){"use strict";var r,i=this&&this.__extends||(r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])},r(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}),o=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(i,o){function s(e){try{c(r.next(e))}catch(e){o(e)}}function a(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(s,a)}c((r=r.apply(e,t||[])).next())}))},s=this&&this.__generator||function(e,t){var n,r,i,o,s={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function a(a){return function(c){return function(a){if(n)throw new TypeError("Generator is already executing.");for(;o&&(o=0,a[0]&&(s=0)),s;)try{if(n=1,r&&(i=2&a[0]?r.return:a[0]?r.throw||((i=r.return)&&i.call(r),0):r.next)&&!(i=i.call(r,a[1])).done)return i;switch(r=0,i&&(a=[2&a[0],i.value]),a[0]){case 0:case 1:i=a;break;case 4:return s.label++,{value:a[1],done:!1};case 5:s.label++,r=a[1],a=[0];continue;case 7:a=s.ops.pop(),s.trys.pop();continue;default:if(!((i=(i=s.trys).length>0&&i[i.length-1])||6!==a[0]&&2!==a[0])){s=0;continue}if(3===a[0]&&(!i||a[1]>i[0]&&a[1]{for(var t=[],n=0;n<256;++n)t[n]=(n+256).toString(16).substr(1);e.exports=function(e,n){var r=n||0,i=t;return[i[e[r++]],i[e[r++]],i[e[r++]],i[e[r++]],"-",i[e[r++]],i[e[r++]],"-",i[e[r++]],i[e[r++]],"-",i[e[r++]],i[e[r++]],"-",i[e[r++]],i[e[r++]],i[e[r++]],i[e[r++]],i[e[r++]],i[e[r++]]].join("")}},217:e=>{var t="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!=typeof msCrypto&&"function"==typeof window.msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto);if(t){var n=new Uint8Array(16);e.exports=function(){return t(n),n}}else{var r=new Array(16);e.exports=function(){for(var e,t=0;t<16;t++)0==(3&t)&&(e=4294967296*Math.random()),r[t]=e>>>((3&t)<<3)&255;return r}}},171:(e,t,n)=>{var r=n(217),i=n(327);e.exports=function(e,t,n){var o=t&&n||0;"string"==typeof e&&(t="binary"===e?new Array(16):null,e=null);var s=(e=e||{}).random||(e.rng||r)();if(s[6]=15&s[6]|64,s[8]=63&s[8]|128,t)for(var a=0;a<16;++a)t[o+a]=s[a];return t||i(s)}},795:function(e,t,n){var r;!function(t){"use strict";function i(){}var o=i.prototype,s=t.EventEmitter;function a(e,t){for(var n=e.length;n--;)if(e[n].listener===t)return n;return-1}function c(e){return function(){return this[e].apply(this,arguments)}}function l(e){return"function"==typeof e||e instanceof RegExp||!(!e||"object"!=typeof e)&&l(e.listener)}o.getListeners=function(e){var t,n,r=this._getEvents();if(e instanceof RegExp)for(n in t={},r)r.hasOwnProperty(n)&&e.test(n)&&(t[n]=r[n]);else t=r[e]||(r[e]=[]);return t},o.flattenListeners=function(e){var t,n=[];for(t=0;t{var r=n(698).default;function i(){"use strict";e.exports=i=function(){return n},e.exports.__esModule=!0,e.exports.default=e.exports;var t,n={},o=Object.prototype,s=o.hasOwnProperty,a=Object.defineProperty||function(e,t,n){e[t]=n.value},c="function"==typeof Symbol?Symbol:{},l=c.iterator||"@@iterator",u=c.asyncIterator||"@@asyncIterator",p=c.toStringTag||"@@toStringTag";function h(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{h({},"")}catch(t){h=function(e,t,n){return e[t]=n}}function d(e,t,n,r){var i=t&&t.prototype instanceof w?t:w,o=Object.create(i.prototype),s=new L(r||[]);return a(o,"_invoke",{value:A(e,n,s)}),o}function f(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}n.wrap=d;var y="suspendedStart",_="suspendedYield",g="executing",v="completed",m={};function w(){}function O(){}function E(){}var b={};h(b,l,(function(){return this}));var R=Object.getPrototypeOf,S=R&&R(R(M([])));S&&S!==o&&s.call(S,l)&&(b=S);var k=E.prototype=w.prototype=Object.create(b);function P(e){["next","throw","return"].forEach((function(t){h(e,t,(function(e){return this._invoke(t,e)}))}))}function I(e,t){function n(i,o,a,c){var l=f(e[i],e,o);if("throw"!==l.type){var u=l.arg,p=u.value;return p&&"object"==r(p)&&s.call(p,"__await")?t.resolve(p.__await).then((function(e){n("next",e,a,c)}),(function(e){n("throw",e,a,c)})):t.resolve(p).then((function(e){u.value=e,a(u)}),(function(e){return n("throw",e,a,c)}))}c(l.arg)}var i;a(this,"_invoke",{value:function(e,r){function o(){return new t((function(t,i){n(e,r,t,i)}))}return i=i?i.then(o,o):o()}})}function A(e,n,r){var i=y;return function(o,s){if(i===g)throw new Error("Generator is already running");if(i===v){if("throw"===o)throw s;return{value:t,done:!0}}for(r.method=o,r.arg=s;;){var a=r.delegate;if(a){var c=T(a,r);if(c){if(c===m)continue;return c}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if(i===y)throw i=v,r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);i=g;var l=f(e,n,r);if("normal"===l.type){if(i=r.done?v:_,l.arg===m)continue;return{value:l.arg,done:r.done}}"throw"===l.type&&(i=v,r.method="throw",r.arg=l.arg)}}}function T(e,n){var r=n.method,i=e.iterator[r];if(i===t)return n.delegate=null,"throw"===r&&e.iterator.return&&(n.method="return",n.arg=t,T(e,n),"throw"===n.method)||"return"!==r&&(n.method="throw",n.arg=new TypeError("The iterator does not provide a '"+r+"' method")),m;var o=f(i,e.iterator,n.arg);if("throw"===o.type)return n.method="throw",n.arg=o.arg,n.delegate=null,m;var s=o.arg;return s?s.done?(n[e.resultName]=s.value,n.next=e.nextLoc,"return"!==n.method&&(n.method="next",n.arg=t),n.delegate=null,m):s:(n.method="throw",n.arg=new TypeError("iterator result is not an object"),n.delegate=null,m)}function C(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function N(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function L(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(C,this),this.reset(!0)}function M(e){if(e||""===e){var n=e[l];if(n)return n.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var i=-1,o=function n(){for(;++i=0;--i){var o=this.tryEntries[i],a=o.completion;if("root"===o.tryLoc)return r("end");if(o.tryLoc<=this.prev){var c=s.call(o,"catchLoc"),l=s.call(o,"finallyLoc");if(c&&l){if(this.prev=0;--n){var r=this.tryEntries[n];if(r.tryLoc<=this.prev&&s.call(r,"finallyLoc")&&this.prev=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),N(n),m}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var i=r.arg;N(n)}return i}}throw new Error("illegal catch attempt")},delegateYield:function(e,n,r){return this.delegate={iterator:M(e),resultName:n,nextLoc:r},"next"===this.method&&(this.arg=t),m}},n}e.exports=i,e.exports.__esModule=!0,e.exports.default=e.exports},698:e=>{function t(n){return e.exports=t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},e.exports.__esModule=!0,e.exports.default=e.exports,t(n)}e.exports=t,e.exports.__esModule=!0,e.exports.default=e.exports},687:(e,t,n)=>{var r=n(61)();e.exports=r;try{regeneratorRuntime=r}catch(e){"object"==typeof globalThis?globalThis.regeneratorRuntime=r:Function("r","regeneratorRuntime = r")(r)}},861:(e,t,n)=>{"use strict";function r(e,t,n,r,i,o,s){try{var a=e[o](s),c=a.value}catch(e){return void n(e)}a.done?t(c):Promise.resolve(c).then(r,i)}function i(e){return function(){var t=this,n=arguments;return new Promise((function(i,o){var s=e.apply(t,n);function a(e){r(s,i,o,a,c,"next",e)}function c(e){r(s,i,o,a,c,"throw",e)}a(void 0)}))}}n.d(t,{Z:()=>i})},671:(e,t,n)=>{"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}n.d(t,{Z:()=>r})},144:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(142);function i(e,t){for(var n=0;n{"use strict";n.d(t,{Z:()=>i});var r=n(2);function i(e){var t=function(e,t){if("object"!=(0,r.Z)(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var i=n.call(e,"string");if("object"!=(0,r.Z)(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==(0,r.Z)(t)?t:String(t)}},2:(e,t,n)=>{"use strict";function r(e){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},r(e)}n.d(t,{Z:()=>r})}},__webpack_module_cache__={};function __webpack_require__(e){var t=__webpack_module_cache__[e];if(void 0!==t)return t.exports;var n=__webpack_module_cache__[e]={exports:{}};return __webpack_modules__[e].call(n.exports,n,n.exports,__webpack_require__),n.exports}__webpack_require__.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return __webpack_require__.d(t,{a:t}),t},__webpack_require__.d=(e,t)=>{for(var n in t)__webpack_require__.o(t,n)&&!__webpack_require__.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},__webpack_require__.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),__webpack_require__.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),__webpack_require__.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var __webpack_exports__={};return(()=>{"use strict";__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{ChannelMediaRelayConfiguration:()=>I.ChannelMediaRelayConfiguration,Client:()=>le,LOG:()=>a.default,SDK_VERSION:()=>s.SDK_VERSION});var e=__webpack_require__(861),t=__webpack_require__(671),n=__webpack_require__(144),r=__webpack_require__(687),i=__webpack_require__.n(r),o=__webpack_require__(426),s=__webpack_require__(446),a=__webpack_require__(186);function c(){return c=Object.assign?Object.assign.bind():function(e){for(var t=1;t0&&void 0!==u[0]?u[0]:0,o=u.length>1&&void 0!==u[1]?u[1]:{},this.vid||(this.vid=O().vid),s={m:"net_status",ls:{type:0===r?"live-pusher":"live-player",vid:String(this.vid),app_id:this.appId,version:this.sdk_version,ip:this.ip,wx_version:null===(t=this.systemInfo)||void 0===t?void 0:t.version,wx_basic_version:null===(n=this.systemInfo)||void 0===n?void 0:n.SDKVersion},vs:{videoBitrate:String(null==o?void 0:o.videoBitrate),audioBitrate:String(null==o?void 0:o.audioBitrate),videoFPS:String(null==o?void 0:o.videoFPS),videoGOP:String(null==o?void 0:o.videoGOP),netSpeed:String(null==o?void 0:o.netSpeed),netQualityLevel:String(null==o?void 0:o.netQualityLevel),netJitter:String(null==o?void 0:o.netJitter)}},this.netStatusPts.push(s),10!==this.netStatusPts.length){e.next=11;break}return a=Date.now(),c=this.netStatusPts.splice(0,10),l={pts:c,sign:h()("src=miniapp_sdk&ts=".concat(a)),src:"miniapp_sdk",ts:a},e.next=11,this.request({body:l,url:this.url});case 11:case"end":return e.stop()}}),e,this)}))),function(){return l.apply(this,arguments)})},{key:"report",value:(o=(0,e.Z)(i().mark((function e(t){var n,r,o,s,a,l,u,p,d,y,_,g=arguments;return i().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(o=g.length>1&&void 0!==g[1]?g[1]:"",s=g.length>2&&void 0!==g[2]?g[2]:"",a=g.length>3&&void 0!==g[3]?g[3]:"",l=g.length>4&&void 0!==g[4]?g[4]:{},this.vid||(this.vid=O().vid),u={m:"online_user"===t?"online_user":"event",ls:f({vid:String(this.vid),app_id:this.appId,version:this.sdk_version,ip:this.ip,wx_version:null===(n=this.systemInfo)||void 0===n?void 0:n.version,wx_basic_version:null===(r=this.systemInfo)||void 0===r?void 0:r.SDKVersion},l),vs:{count:1}},"online_user"!==t&&((p={event:t,result:"success"===o?"1":"0",err_code:s.toString()}).message="string"==typeof a?a:JSON.stringify(a),c(u.ls,p)),this.pts.push(u),10!==this.pts.length){e.next=14;break}return d=this.pts.splice(0,10),y=Date.now(),_={pts:d,sign:h()("src=miniapp_sdk&ts=".concat(y)),src:"miniapp_sdk",ts:y},e.next=14,this.request({body:_,url:this.url});case 14:case"end":return e.stop()}}),e,this)}))),function(e){return o.apply(this,arguments)})},{key:"request",value:function(e){return new Promise((function(t,n){wx.request({url:e.url,data:e.body,header:{"content-type":"application/json"},method:"POST",success:function(e){200===e.statusCode?t(e):a.default.error("grafana report fail: ".concat(e.statusCode))},fail:function(e){a.default.error("grafana report fail",JSON.stringify(e)),n(e)}})}))}}]),r}(),v=function(){function e(){(0,t.Z)(this,e),this.ts=-1}return(0,n.Z)(e,[{key:"start",value:function(){return this.ts=(new Date).getTime(),this}},{key:"elapse",value:function(){if(-1===this.ts)throw new Error("timer not started");return(new Date).getTime()-this.ts}}],[{key:"create",value:function(){return new e}}]),e}(),m=__webpack_require__(483),w={ip:"",vid:""};function O(){return w}var E=["https://uap-ap-web-1.agora.io/api/v1","https://uap-ap-web-3.agora.io/api/v1","https://uap-ap-web-2.agoraio.cn/api/v1","https://uap-ap-web-4.agoraio.cn/api/v1"],b="connected",R="disconnected";const S=function(){function e(n,r){(0,t.Z)(this,e),this.serverlist=[],this.option=n,this.index=0,this.isInit=!0,this.state=R,this.hasInvokeClose=!1,this.emitter=r,this.on=this.emitter.on,this.off=this.emitter.off,this.emit=this.emitter.emit}return(0,n.Z)(e,[{key:"connect",value:function(){var e=this,t=this.option.grafanaReport;this.state!==R&&this.close(),function(e){var t=e.grafanaReport,n=e.argusReport,r={command:"convergeAllocateEdge",sid:e.sid,appId:e.appId,token:e.appId,uid:e.uid+"",cname:e.channel,ts:Math.floor(Date.now()/1e3),version:s.VERSION,seq:0,requestId:1};return new Promise((function(i,o){var s=0,c=v.create().start(),l=function(r,i){n.reportJoinCS(e.channel,e.uid,!1,c.elapse(),JSON.stringify(r),i,null),s++,a.default.error("get server list failed, counter:".concat(s," url:").concat(i," "),JSON.stringify(r)),4===s&&(t&&t.report("get_server_list",_,null==r?void 0:r.code,null==r?void 0:r.reason),o(r))},u=function(o){wx.request({url:o,data:{service_name:"miniapp",json_body:JSON.stringify(r)},header:{"content-type":"application/json","X-Packet-URI":61,"X-Packet-Service-Type":0},method:"POST",success:function(r){var s,u,p=r.data;if(r.profile?(s=r.profile.peerIP,w.ip=s):a.default.info("skip user IP report!"),200!==r.statusCode){var h="choose server fail";l({code:r.statusCode,reason:h},o),t&&t.report("choose_server",_,r.statusCode,h)}else{var d=c.elapse(),f=(0,m.transformElapseStr)(d),g=JSON.parse(p.json_body);u=g.vid,w.vid=u;var v=function(e){if(void 0!==e)return e.map((function(e){var t=e.address.split("."),n=t.length;return"wss://miniapp.agoraio.cn/".concat(t[n-4],"-").concat(t[n-3],"-").concat(t[n-2],"-").concat(t[n-1],"/api")}));a.default.error("miniapp service is not enabled for this AppID")}(g.servers);n.reportJoinCS(e.channel,e.uid,!0,d,null,o,v.join(",")),t.report("choose_server",y,"","",{elapse:f}),a.default.info("get server list request success,url:".concat(o,",time:").concat(d,"ms,elapse:").concat(f,",serverlist:").concat(JSON.stringify(v))),i({serverlist:v,url:o})}},fail:function(e){var n=e.errMsg||"choose server fail";l({code:901,reason:n},o),t&&t.report("choose_server",_,901,n)}})};e.apUrl?u(e.apUrl):E.map((function(e,t){u(e)}))}))}(this.option).then((function(t){var n=t.serverlist,r=t.url;a.default.info("websocket get server list final success, url:".concat(r,",serverlist:").concat(JSON.stringify(n))),e.index=0,e.serverlist=n,e.option&&e.option.servers&&(e.serverlist=e.option.servers),e.connectWorker(e.serverlist[e.index])})).catch((function(n){a.default.error("websocket connect failed in get server list ".concat(JSON.stringify(n))),t&&t.report("wxsocket_connect",_,null==n?void 0:n.code,null==n?void 0:n.reason),e.emit&&e.emit("socketError",n)}))}},{key:"connectWorker",value:function(){var e=this;this.state="connecting";var t=this.serverlist[this.index];a.default.info("websocket connect server: ",t);var n=this.option,r=(n.sid,n.channel),i=n.uid,o=n.argusReport,s=n.grafanaReport,c=v.create().start();this.ws=wx.connectSocket({url:t,fail:function(n){var l=JSON.stringify(n);a.default.error("websocket connect worker failed url:".concat(t," "),l),o&&o.reportConnectWS(r,i,!1,c.elapse(),l,null,t),s&&s.report("wxsocket_connect_worker",_,n.statusCode,l,{retry:String(e.index)})},success:function(n){var l=c.elapse(),u=(0,m.transformElapseStr)(l);if(a.default.info("websocket connect worker success,url:".concat(t,",time:").concat(l,"ms,elapse:").concat(u)),e.option.grafanaReport){var p=(0,m.getServerUrlIp)(t);e.option.grafanaReport.setOptions({ip:p})}o&&o.reportConnectWS(r,i,!0,l,null,null,t),s&&s.report("wxsocket_connect_worker",y,"","".concat(t),{elapse:u,retry:String(e.index)})}}),this.ws.onOpen(this._onopen.bind(this)),this.ws.onMessage(this._onmessage.bind(this)),this.ws.onError((function(e){a.default.error("websocket onerror: "+JSON.stringify(e)),o&&o.reportConnectWS(r,i,!1,c.elapse(),JSON.stringify(e),null,t),s&&s.report("wxsocket_connect_worker_on_error",_,"",JSON.stringify(e))})),this.establishWSTimeoutTimer=setTimeout((function(){e.state!==b&&e.connectNextWorker()}),5e3)}},{key:"connectNextWorker",value:function(){var e=this,t=this.option.grafanaReport;this.close().then((function(n){if(a.default.info("websocket connect next worker current:".concat(e.index," total:").concat(e.serverlist.length)),e.index>=e.serverlist.length-1){var r={code:905,reason:"connect websocket failed"};a.default.error("websocket connect next worker failed, all serverlist tried. ",JSON.stringify(r)),e.emit&&e.emit("socketError",{code:r.code,reason:r.reason,wsurl:JSON.stringify(e.serverlist)}),t&&t.report("wxsocket_connect_next_worker",_,r.code,r.reason)}else e.index++,e.connectWorker()}))}},{key:"_onopen",value:function(){a.default.info("websocket onopen"),clearTimeout(this.establishWSTimeoutTimer),this.state=b,this.isInit=!1,this.hasInvokeClose?a.default.info("websocket already invoke ws.Close, will not throw onopen event"):(this.ws.onClose(this._onclose.bind(this)),this.emit&&this.emit("onopen"))}},{key:"_onclose",value:function(e){a.default.info("websocket onclose:"+JSON.stringify(e)),this.emitter.emit("_wsClose"),clearTimeout(this.establishWSTimeoutTimer),this.state=R,e&&"close"==e.reason||this.hasInvokeClose||(this.isInit?this.connectNextWorker():this.emit&&this.emit("onclose",e))}},{key:"_onmessage",value:function(e){if(!this.hasInvokeClose){var t=JSON.parse(null==e?void 0:e.data)||{};"pong"!==(null==t?void 0:t.command)&&a.default.info("websocket receive message: ",JSON.stringify(e)),this.isConnected()&&this.emit&&this.emit("onmessage",e)}}},{key:"isConnected",value:function(){return this.state===b}},{key:"sendMessage",value:function(e){var t=JSON.parse(e)||{};"ping"!==(null==t?void 0:t.command)&&a.default.info("websocket send message: ",e),this.isConnected()&&this.ws&&this.ws.send({data:e})}},{key:"_checkServerList",value:function(e){return e instanceof Array!=0&&0!=e.length}},{key:"destroy",value:function(e){var t=this;this.state!==R&&this.close(),this.on("_wsClose",(function n(){t.off("_wsClose",n),t.serverlist=null,t.ws=null,t.emitter=null,t.on=null,t.off=null,t.emit=null,e&&e()}))}},{key:"close",value:function(){var e=this;return new Promise((function(t,n){return e.state==R?t():(clearTimeout(e.establishWSTimeoutTimer),e.hasInvokeClose=!0,e.state=R,e.ws?void e.ws.close({reason:"close",success:function(){a.default.info("websocket close success"),t()},fail:function(t){a.default.error("websocket close failed: ",JSON.stringify(t));var r=e.option,i=(r.sid,r.channel),o=r.uid,s=r.argusReport,c=r.grafanaReport;n();var l=e.serverlist[e.index];s&&s.reportConnectWS(i,o,!1,0,JSON.stringify(t),null,l),c&&c.report("wxsocket_close",_,"",JSON.stringify(t))},complete:function(){e.ws=null}}):t())}))}}]),e}(),k=function(){function e(n){(0,t.Z)(this,e),this.appId=n.appId,this.channel=n.channel,this.uid=n.uid+"",this.sid=n.sid,this.seq=1,this.requestId=2}return(0,n.Z)(e,[{key:"setSid",value:function(e){this.sid=e}},{key:"_getWorkerManagerMsg",value:function(){return{appId:this.appId,cname:this.channel,uid:this.uid,sid:this.sid,sdkVersion:s.VERSION,seq:++this.seq,requestId:++this.requestId,ts:Math.floor(Date.now()/1e3)}}},{key:"send",value:function(e){var t=this._getWorkerManagerMsg();return t.clientRequest=e,t}},{key:"updatePushUrl",value:function(){var e=this._getWorkerManagerMsg();return e.clientRequest={action:"update_url",role:"publish",uid:+this.uid},e}},{key:"ping",value:function(){return{command:"ping",requestId:++this.requestId,appId:this.appId,cname:this.channel,uid:this.uid+"",sid:this.sid,ts:Math.floor(Date.now()/1e3)}}},{key:"ping2",value:function(){var e=this._getWorkerManagerMsg();return e.clientRequest={action:"ping"},e}},{key:"setRole",value:function(e){var t=this._getWorkerManagerMsg();return t.clientRequest={action:"set_role",role:e},t}},{key:"rejoin",value:function(e,t,n,r,i,o,s,a,c){var l=this._getWorkerManagerMsg();return l.clientRequest={action:"join",role:o,appId:e,customAudioCodec:a,key_vocs:r||e,key_vos:r||e,channel_name:t,uid:n+"",known_speakers:i,clientType:"undefined"==typeof qq?"wechat":"qq",audio_only:s,uidType:c},l}},{key:"join",value:function(e,t,n,r,i,o,a,c,l,u){var p=this._getWorkerManagerMsg();return p.clientRequest={action:"join",role:i,appId:e,customAudioCodec:l,key_vocs:r||e,key_vos:r||e,channel_name:t,uid:n+"",vid:O().vid.toString(),device:o,os:a,version:s.SDK_VERSION,clientType:"undefined"==typeof qq?"wechat":"qq",audio_only:c,uidType:u},p}},{key:"muteLocal",value:function(e,t){var n=this._getWorkerManagerMsg();return n.clientRequest={action:"mute_local",uid:+e,target:t,mute:!0},n}},{key:"unmuteLocal",value:function(e,t){var n=this._getWorkerManagerMsg();return n.clientRequest={action:"mute_local",uid:+e,target:t,mute:!1},n}},{key:"mute",value:function(e,t){var n=this._getWorkerManagerMsg();return n.clientRequest={action:"mute",uid:+e,target:t},n}},{key:"unmute",value:function(e,t){var n=this._getWorkerManagerMsg();return n.clientRequest={action:"unmute",uid:+e,target:t},n}},{key:"publish",value:function(e){var t=this._getWorkerManagerMsg();return t.clientRequest={action:"publish",uid:+e},t}},{key:"unpublish",value:function(e){var t=this._getWorkerManagerMsg();return t.clientRequest={action:"unpublish",uid:+e},t}},{key:"subscribe",value:function(e,t){var n=this._getWorkerManagerMsg();return n.clientRequest={action:"subscribe",uid:+e,options:{audio:t.audio,video:t.video}},n}},{key:"unsubscribe",value:function(e){var t=this._getWorkerManagerMsg();return t.clientRequest={action:"unsubscribe",uid:[+e]},t}},{key:"setRemoteVideoStreamType",value:function(e,t){var n=this._getWorkerManagerMsg();return n.clientRequest={action:"set_remote_stream_type",uid:+e,type:t},n}},{key:"renewToken",value:function(e){var t=this._getWorkerManagerMsg();return t.clientRequest={action:"update_key",key_vos:e},t}},{key:"leave",value:function(e){var t=this._getWorkerManagerMsg();return t.clientRequest={action:"leave",uid:+e},t}}]),e}();function P(e){return{all:e=e||new Map,on:function(t,n){var r=e.get(t);r?r.push(n):e.set(t,[n])},off:function(t,n){var r=e.get(t);r&&(n?r.splice(r.indexOf(n)>>>0,1):e.set(t,[]))},emit:function(t,n){var r=e.get(t);r&&r.slice().map((function(e){e(n)})),(r=e.get("*"))&&r.slice().map((function(e){e(t,n)}))}}}var I=__webpack_require__(500),A=__webpack_require__.n(I);const T=function(){function r(e,n){(0,t.Z)(this,r),this.appId=e.appId,this.channel=e.channel,this.uid=e.uid,this.sid=e.sid,this.role=e.role,this.channelKey=e.channelKey,this.clientId="client",this.option=e,this.timers=new Set,this.grafanaReport=e.grafanaReport,this.argusReport=e.argusReport,this.audioCodec=e.audioCodec,this.uidType=e.uidType,this.clientEmitter=n,this.emitter=new P,this.on=this.emitter.on,this.off=this.emitter.off,this.emit=this.emitter.emit,this.join=this.join.bind(this),this.msgManager=new k(e)}var o,s,c;return(0,n.Z)(r,[{key:"connect",value:function(){var e=this;return new Promise((function(t,n){e.ws=new S(e.option,e.emitter),e.ws.connect(),e.on("onmessage",e._onMessage.bind(e)),e.on("socketError",(function(t){n(t),a.default.error("worker socket error: ",JSON.stringify(t)),e.grafanaReport&&e.grafanaReport.report("worker_connect_socket_error",_,"",JSON.stringify(t))})),e.on("onopen",(function n(){e.off&&e.off("onopen",n),e._ping(),t()})),e.on("onclose",(function(t){a.default.error("worker on close: ",JSON.stringify(t)),e.ws=null,e.clientEmitter.emit("error",{code:904,reason:"websocket disconnected"}),e.grafanaReport&&e.grafanaReport.report("worker_connect_on_close",_,"",JSON.stringify(t))}))}))}},{key:"_onMessage",value:function(e){if(e&&e.data){var t=JSON.parse(e.data);if(t&&"pong"!==t.command&&(a.default.info("worker onmessage: ",t),this.argusReport.reportServerEvent(this.channel,this.uid,!0,0,"serverEvent",t)),t.requestId&&this.emit(t.requestId,t),"serverStatus"===t.command){if(t.code&&200!==t.code){if(this.grafanaReport&&this.grafanaReport.report("worker_on_message",_,t.code,null==t?void 0:t.reason),503===t.code)return;a.default.error("worker onmessage error: ",JSON.stringify(t)),this.clientEmitter.emit("error",{code:t.code,reason:t.reason||"server error"})}if(t.serverStatus){a.default.info("Receive message from server: ".concat(JSON.stringify(t.serverStatus)));var n=t.serverStatus.action;if("audio-mute"==n)return t.serverStatus.mute?this.clientEmitter.emit("mute-audio",{uid:t.serverStatus.uid}):this.clientEmitter.emit("unmute-audio",{uid:t.serverStatus.uid});if("video-mute"==n)return t.serverStatus.mute?this.clientEmitter.emit("mute-video",{uid:t.serverStatus.uid}):this.clientEmitter.emit("unmute-video",{uid:t.serverStatus.uid});if("key-expired"===n)return this.clientEmitter.emit("token-privilege-did-expire");if("key-will-expire"===n)return this.clientEmitter.emit("token-privilege-will-expire");if("client-is-banned-by-server"===n)return this.clientEmitter.emit("client-banned");this.clientEmitter.emit(n,t.serverStatus)}}}}},{key:"_sendMessage",value:function(e){var t=this;if(this.ws)return new Promise((function(n,r){if(!t.isWSConnected())return r({code:904,reason:"websocket disconnected",wsurl:t.getWSUrl()});"ping"!==e.command&&a.default.info("worker send message: ",e);var i,o=e?e.requestId:null,s=function e(s){if(t.ws)return t.off(o,e),clearTimeout(i),t.timers.delete(i),200==s.code?n(s.serverResponse):r({code:s.code,reason:s.msg||s.reason,serverResponse:s.serverResponse,wsurl:t.getWSUrl()})};if(!o)return r({code:902,reason:"no requestid"});t.ws.sendMessage(JSON.stringify(e)),t.on(o,s),i=setTimeout((function(){return s({code:903,reason:"time out"})}),1e4),t.timers.add(i)}))}},{key:"_ping",value:function(){var e=this;this.pingTimer=setInterval((function(){e.ws.sendMessage(JSON.stringify(e.msgManager.ping()))}),3e3)}},{key:"setRole",value:function(e){return this._sendMessage(this.msgManager.setRole(e))}},{key:"rejoin",value:function(e,t){return this._sendMessage(this.msgManager.rejoin(this.appId,this.channel,this.uid,this.channelKey,e,this.role,t,this.audioCodec,this.uidType))}},{key:"join",value:function(e,t,n){return this._sendMessage(this.msgManager.join(this.appId,this.channel,this.uid,this.channelKey,this.role,e,t,n,this.audioCodec,this.uidType))}},{key:"send",value:function(e){return this._sendMessage(this.msgManager.send(e))}},{key:"updatePushUrl",value:function(){return this._sendMessage(this.msgManager.updatePushUrl())}},{key:"publish",value:function(){return this._sendMessage(this.msgManager.publish(this.uid))}},{key:"unpublish",value:function(){return this._sendMessage(this.msgManager.unpublish(this.uid))}},{key:"subscribe",value:function(e,t){return this._sendMessage(this.msgManager.subscribe(e,t))}},{key:"unsubscribe",value:function(e){return this._sendMessage(this.msgManager.unsubscribe(e))}},{key:"setRemoteVideoStreamType",value:function(e,t){return this._sendMessage(this.msgManager.setRemoteVideoStreamType(e,t))}},{key:"mute",value:function(e,t){return this._sendMessage(this.msgManager.mute(e,t))}},{key:"unmute",value:function(e,t){return this._sendMessage(this.msgManager.unmute(e,t))}},{key:"muteLocal",value:function(e){return this._sendMessage(this.msgManager.muteLocal(this.uid,e))}},{key:"unmuteLocal",value:function(e){return this._sendMessage(this.msgManager.unmuteLocal(this.uid,e))}},{key:"renewToken",value:function(e){return this._sendMessage(this.msgManager.renewToken(e))}},{key:"leave",value:function(){return this._sendMessage(this.msgManager.leave(this.uid))}},{key:"isWSConnected",value:function(){return!!this.ws&&this.ws.isConnected()}},{key:"getWSUrl",value:function(){return this.ws?this.ws.serverlist[this.ws.index]:""}},{key:"destroy",value:function(){var e=this;return new Promise((function(t,n){clearInterval(e.pingTimer),e.timers.size&&(e.timers.forEach((function(e){clearInterval(e)})),e.timers.clear()),e.ws?e.ws.destroy((function(){e.ws=null,e.emitter=null,e.on=null,e.off=null,e.emit=null,t()})):t()}))}},{key:"startChannelMediaRelay",value:(c=(0,e.Z)(i().mark((function e(t){var n,r,o,s,c,l=this;return i().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!this.channelMediaRelayController){e.next=2;break}throw new I.ChannelMediaError("RELAY_ALREADY_START","",I.CHANNEL_MEDIA_RELAY_ERROR.RELAY_ALREADY_START);case 2:return n=function(e){l.clientEmitter.emit("channel-media-relay-event",{code:e})},r=function(e,t,n){e===I.CHANNEL_MEDIA_RELAY_STATE.RELAY_STATE_FAILURE&&t===I.CHANNEL_MEDIA_RELAY_ERROR.SERVER_CONNECTION_LOST&&(l.channelMediaRelayController.dispose(),l.channelMediaRelayController=null),l.clientEmitter.emit("channel-media-relay-state",{state:e,code:t,data:n})},o={token:this.appId,appId:this.appId,cname:this.channel,uid:this.uid,sid:this.sid,clientId:this.clientId},this.channelMediaRelayController=new(A())(o,this.clientId),this.channelMediaRelayController.on("event",n),this.channelMediaRelayController.on("state",r),e.prev=8,e.next=11,this.channelMediaRelayController.startChannelMediaRelay(t);case 11:e.next=23;break;case 13:throw e.prev=13,e.t0=e.catch(8),a.default.error("[".concat(this.clientId,"] startChannelMediaRelay exception: ").concat(JSON.stringify(e.t0))),s=I.CHANNEL_MEDIA_RELAY_STATE.RELAY_STATE_FAILURE,"",c=e.t0 instanceof I.ChannelMediaError?"SetSourceChannelStatus"===e.t0.data||e.t0.data&&e.t0.data.serverResponse&&"SetSourceChannel"===e.t0.data.serverResponse.command?"FAILED_JOIN_SRC":"SetDestChannelStatus"===e.t0.data||e.t0.data&&e.t0.data.serverResponse&&"SetDestChannel"===e.t0.data.serverResponse.command?"FAILED_JOIN_DEST":e.t0.data&&e.t0.data.serverResponse&&"StartPacketTransfer"===e.t0.data.serverResponse.command?"FAILED_PACKET_SENT_TO_DEST":e.t0.message===I.CHANNEL_MEDIA_ERROR.REQUEST_TIMEOUT||e.t0.message===I.CHANNEL_MEDIA_ERROR.WAIT_STATUS_TIMEOUT?"SERVER_NO_RESPONSE":e.t0.message===I.CHANNEL_MEDIA_ERROR.REQUEST_FAILED||e.t0.message===I.CHANNEL_MEDIA_ERROR.WAIT_STATUS_ERROR?"SERVER_ERROR_RESPONSE":e.t0.message===I.CHANNEL_MEDIA_ERROR.AP_REQUEST_TIMEOUT?"NO_RESOURCE_AVAILABLE":e.t0.message===I.CHANNEL_MEDIA_ERROR.WS_ABORT||e.t0.message===I.CHANNEL_MEDIA_ERROR.AP_REQUEST_ABORT?"OPERATION_ABORT":"INTERNAL_ERROR":"INTERNAL_ERROR",this.clientEmitter.emit("channel-media-relay-state",{state:s,code:I.CHANNEL_MEDIA_RELAY_ERROR[c]}),this.channelMediaRelayController&&(this.channelMediaRelayController.dispose(),this.channelMediaConfig=null,this.channelMediaRelayController=null),this.clientEmitter.emit("channel-media-relay-state",{state:I.CHANNEL_MEDIA_RELAY_STATE.RELAY_STATE_IDLE}),new I.ChannelMediaError(c,null,I.CHANNEL_MEDIA_RELAY_ERROR[c]);case 23:this.clientEmitter.emit("channel-media-relay-state",{state:I.CHANNEL_MEDIA_RELAY_STATE.RELAY_STATE_RUNNING,code:I.CHANNEL_MEDIA_RELAY_ERROR.RELAY_OK}),this.channelMediaConfig=t;case 25:case"end":return e.stop()}}),e,this,[[8,13]])}))),function(e){return c.apply(this,arguments)})},{key:"updateChannelMediaRelay",value:(s=(0,e.Z)(i().mark((function e(t){var n,r;return i().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(this.channelMediaRelayController){e.next=2;break}throw new I.ChannelMediaError("RELAY_NOT_START",null,I.CHANNEL_MEDIA_RELAY_ERROR.RELAY_NOT_START);case 2:return e.prev=2,e.next=5,this.channelMediaRelayController.updateChannelMediaRelay(t);case 5:e.next=18;break;case 7:throw e.prev=7,e.t0=e.catch(2),a.default.debug("[".concat(this.clientId,"] updateChannelMediaRelay exception: ").concat(JSON.stringify(e.t0))),n=I.CHANNEL_MEDIA_RELAY_STATE.RELAY_STATE_FAILURE,"",r=e.t0 instanceof I.ChannelMediaError?e.t0.message===I.CHANNEL_MEDIA_ERROR.REQUEST_TIMEOUT||e.t0.message===I.CHANNEL_MEDIA_ERROR.WAIT_STATUS_TIMEOUT?"SERVER_NO_RESPONSE":e.t0.message===I.CHANNEL_MEDIA_ERROR.REQUEST_FAILED||e.t0.message===I.CHANNEL_MEDIA_ERROR.WAIT_STATUS_ERROR?"SERVER_ERROR_RESPONSE":e.t0.message===I.CHANNEL_MEDIA_ERROR.WS_ABORT||e.t0.message===I.CHANNEL_MEDIA_ERROR.AP_REQUEST_ABORT?"OPERATION_ABORT":"INTERNAL_ERROR":"INTERNAL_ERROR",this.clientEmitter.emit("channel-media-relay-event",{code:I.CHANNEL_MEDIA_RELAY_EVENT.PACKET_UPDATE_DEST_CHANNEL_REFUSED}),this.clientEmitter.emit("channel-media-relay-state",{state:n,code:I.CHANNEL_MEDIA_RELAY_ERROR[r]}),this.channelMediaRelayController&&(this.channelMediaRelayController.dispose(),this.channelMediaConfig=null,this.channelMediaRelayController=null),this.clientEmitter.emit("channel-media-relay-state",{state:I.CHANNEL_MEDIA_RELAY_STATE.RELAY_STATE_IDLE}),new I.ChannelMediaError(r,null,I.CHANNEL_MEDIA_RELAY_ERROR[r]);case 18:this.channelMediaConfig=t;case 19:case"end":return e.stop()}}),e,this,[[2,7]])}))),function(e){return s.apply(this,arguments)})},{key:"stopChannelMediaRelay",value:(o=(0,e.Z)(i().mark((function e(){var t,n;return i().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(this.channelMediaRelayController){e.next=2;break}throw new I.ChannelMediaError("RELAY_NOT_START",null,I.CHANNEL_MEDIA_RELAY_ERROR.RELAY_NOT_START);case 2:return e.prev=2,e.next=5,this.channelMediaRelayController.stopChannelMediaRelay();case 5:e.next=17;break;case 7:throw e.prev=7,e.t0=e.catch(2),a.default.debug("[".concat(this.clientId,"] stopChannelMediaRelay exception: ").concat(JSON.stringify(e.t0))),t=I.CHANNEL_MEDIA_RELAY_STATE.RELAY_STATE_FAILURE,"",n=e.t0 instanceof I.ChannelMediaError?e.t0.message===I.CHANNEL_MEDIA_ERROR.REQUEST_TIMEOUT||e.t0.message===I.CHANNEL_MEDIA_ERROR.WAIT_STATUS_TIMEOUT?"SERVER_NO_RESPONSE":e.t0.message===I.CHANNEL_MEDIA_ERROR.REQUEST_FAILED||e.t0.message===I.CHANNEL_MEDIA_ERROR.WAIT_STATUS_ERROR?"SERVER_ERROR_RESPONSE":"INTERNAL_ERROR":"INTERNAL_ERROR",this.clientEmitter.emit("channel-media-relay-state",{state:t,code:I.CHANNEL_MEDIA_RELAY_ERROR[n]}),this.channelMediaRelayController&&(this.channelMediaRelayController.dispose(),this.channelMediaConfig=null,this.channelMediaRelayController=null),this.emit("channel-media-relay-state",{state:I.CHANNEL_MEDIA_RELAY_STATE.RELAY_STATE_IDLE}),new I.ChannelMediaError(n,null,I.CHANNEL_MEDIA_RELAY_ERROR[n]);case 17:this.channelMediaConfig=null,this.channelMediaRelayController=null;case 19:case"end":return e.stop()}}),e,this,[[2,7]])}))),function(){return o.apply(this,arguments)})}]),r}();var C={videoBitrate:"Miniapp_SDK_Pusher_Video_Bitrate",audioBitrate:"Miniapp_SDK_Pusher_Audio_Bitrate",videoFPS:"Miniapp_SDK_Pusher_Video_FPS",videoGOP:"Miniapp_SDK_Pusher_Video_GOP",netSpeed:"Miniapp_SDK_Pusher_Net_Speed",videoCache:"Miniapp_SDK_Pusher_Video_Cache",audioCache:"Miniapp_SDK_Pusher_Audio_Cache",videoWidth:"Miniapp_SDK_Pusher_Video_Width",videoHeight:"Miniapp_SDK_Pusher_Video_Height",netJitter:"Miniapp_SDK_Pusher_Net_Jitter",netQualityLevel:"Miniapp_SDK_Pusher_Net_QualityLevel"},N={videoBitrate:"Miniapp_SDK_Player_Video_Bitrate",audioBitrate:"Miniapp_SDK_Player_Audio_Bitrate",videoFPS:"Miniapp_SDK_Player_Video_FPS",videoGOP:"Miniapp_SDK_Player_Video_GOP",netSpeed:"Miniapp_SDK_Player_Net_Speed",videoCache:"Miniapp_SDK_Player_Video_Cache",audioCache:"Miniapp_SDK_Player_Audio_Cache",vDecCacheSize:"Miniapp_SDK_Player_V_Dec_Cache_Size",vSumCacheSize:"Miniapp_SDK_Player_V_Sum_Cache_Size",avPlayInterval:"Miniapp_SDK_Player_AV_Play_Interval",avRecvInterval:"Miniapp_SDK_Player_AV_Recv_Interval",audioCacheThreshold:"Miniapp_SDK_Player_Audio_Cache_Threshold",videoWidth:"Miniapp_SDK_Player_Video_Width",videoHeight:"Miniapp_SDK_Player_Video_Height",netJitter:"Miniapp_SDK_Player_Net_Jitter",netQualityLevel:"Miniapp_SDK_Player_Net_QualityLevel"},L=__webpack_require__(699),M=__webpack_require__.n(L),j=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:10;if("function"!=typeof e)throw Error("request must be function");var n=function(e,t){!function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1;if(null==e)e=1;else if(0===e)throw new Error("Concurrency must not be zero")}(t);var n=[],r=[];return{concurrency:t,push:function(e,t){var r=this;n.push({task:e,callback:t}),setTimeout((function(){r.process()}),0)},process:function(){for(var e=this,t=function(){var t,i=n.shift();r.push(i),function(e,t){e(t)}(i.task,(t=function(){e.pull(i),"function"==typeof i.callback&&i.callback.apply(i,arguments),e.process()},function(){if(null===t)throw new Error("Callback was already called");var e=t;return t=null,e.apply(void 0,arguments)}))};this.concurrency>r.length&&n.length;)t()},pull:function(e){var t=r.indexOf(e);-1!==t&&r.splice(t,1)}}}(0,t);return function(t){n.push((function(n){var r=t.complete;t.complete=function(){n(),"function"==typeof r&&r.apply(void 0,arguments)},e(t)}))}}(wx.request,2);function D(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function x(e){for(var t=1;t4&&void 0!==arguments[4]&&arguments[4],c=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0,l=arguments.length>6?arguments[6]:void 0,u=arguments.length>7?arguments[7]:void 0;if("function"==typeof s){var p=l,h=u;l=s,u=c,s=p||!1,c=h||0}return new Promise((function(p,h){if(i._dealSid(),i.grafanaReport.onlineUser(),i.worker)return i._startNetworkJudge(),l&&l(),p();if(e){if("string"!=typeof e||"null"===e.toLowerCase()){var d=new Error("Invalid channelKey");return a.default.error("client rejoin channel failed: ".concat(d.message)),u&&u(d),void h(d)}}else e=i.appId;if(!t||"string"!=typeof t||"null"===t.toLowerCase()||t.length>128){var f=new Error("Invalid channel");return a.default.error("client rejoin channel failed: ".concat(f.message)),u&&u(f),void h(f)}if("boolean"!=typeof s){var g=new Error("isAudioOnly should be boolean");return a.default.error("client rejoin channel failed: ".concat(g.message)),u&&u(g),h(g),void i.grafanaReport.report("join",_,"",g.message)}if(1==c){if(!n.trim()){var w=new Error("uid empty");return a.default.error("client rejoin channel failed: ".concat(w.message)),u&&u(w),void h(w)}i.uid=n}else if(i.uid=n||(0,o.random)(1e7),i.uid=Number.parseInt(i.uid),!(0,o.is32Uint)(i.uid)){var O=new Error("Invalid uid type");return a.default.error("client rejoin channel failed: ".concat(O.message)),u&&u(O),void h(O)}i.channel=t,i.worker=new T({appId:i.appId,channel:i.channel,uid:i.uid,sid:i.sid,role:i.role,servers:i.servers,apUrl:i.apUrl,channelKey:e,grafanaReport:i.grafanaReport,argusReport:i.argusReport,audioCodec:i.audioCodec,uidType:c},i.emitter);var E=v.create().start();i.worker.connect().then((function(){return i.worker.rejoin(r,s)})).then((function(e){setTimeout((function(){a.default.info("client rejoin channel success"),l&&l(i.uid),p(i.uid),i.argusReport.reportRejoin(i.channel,i.uid,!0,E.elapse(),null,i.appId,i.worker&&i.worker.getWSUrl()),i.grafanaReport.report("join",y),i._startNetworkJudge()}),1),e&&e.uid&&(i.uid=e.uid,i.worker.uid=e.uid)})).catch((function(e){i.destroy(),a.default.error("client rejoin channel failed: ".concat((0,m.stringifyErr)(e))),u&&u(e),h(e),i.argusReport.reportRejoin(i.channel,i.uid,!1,E.elapse(),JSON.stringify(e),i.appId,i.worker&&i.worker.getWSUrl()),i.grafanaReport.report("join",_,e.code,null==e?void 0:e.reason)}))}))}},{key:"join",value:function(e,t,n){var r=this,i=arguments.length>3&&void 0!==arguments[3]&&arguments[3],s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:0,c=arguments.length>5?arguments[5]:void 0,l=arguments.length>6?arguments[6]:void 0;if("function"==typeof i){var u=c,p=l;c=i,l=s,i=u||!1,s=p||0}return new Promise((function(u,p){if(r._dealSid(),r.grafanaReport.onlineUser(),r.worker)return a.default.info("client join channel success"),c&&c(),r._startNetworkJudge(),u();if(e){if("string"!=typeof e||"null"===e.toLowerCase()){var h=new Error("Invalid channelKey");return a.default.error("client join channel failed: ".concat(h.message)),l&&l(h),p(h),void r.grafanaReport.report("join",_,"",h.message)}}else e=r.appId;if(!t||"string"!=typeof t||"null"===t.toLowerCase()||t.length>128){var d=new Error("Invalid channel");return a.default.error("client join channel failed: ".concat(d.message)),l&&l(d),p(d),void r.grafanaReport.report("join",_,"",d.message)}if("boolean"!=typeof i){var f=new Error("isAudioOnly should be boolean");return a.default.error("client join channel failed: ".concat(f.message)),l&&l(f),p(f),void r.grafanaReport.report("join",_,"",f.message)}if(1==s){if(!n.trim()){var g=new Error("uid empty");return a.default.error("client join channel failed: ".concat(g.message)),l&&l(g),p(g),void r.grafanaReport.report("join",_,"",g.message)}r.uid=n}else if(r.uid=n||(0,o.random)(1e7),r.uid=Number.parseInt(r.uid),!(0,o.is32Uint)(r.uid)){var w=new Error("Invalid uid type");return a.default.error("client join channel failed: ".concat(w.message)),l&&l(w),p(w),void r.grafanaReport.report("join",_,"",w.message)}r.channel=t,r.worker=new T({appId:r.appId,channel:r.channel,uid:r.uid,sid:r.sid,role:r.role,servers:r.servers,apUrl:r.apUrl,channelKey:e,grafanaReport:r.grafanaReport,argusReport:r.argusReport,audioCodec:r.audioCodec,uidType:s},r.emitter);var O=v.create().start();r.worker.connect().then((function(){return r.worker.join(r.systemInfo.model,r.systemInfo.system,i)})).then((function(e){var t=O.elapse(),n=(0,m.transformElapseStr)(t);setTimeout((function(){a.default.info("client join channel success,time:".concat(t,"ms,elapse:").concat(n)),c&&c(r.uid),u(r.uid),r._startNetworkJudge(),r.argusReport.reportJoin(r.channel,r.uid,!0,t),r.grafanaReport.report("join",y,"","",{elapse:n})}),1),e&&e.uid&&(r.uid=e.uid,r.worker.uid=e.uid)})).catch((function(e){r.destroy(),a.default.error("client join channel failed: ".concat((0,m.stringifyErr)(e))),l&&l(e),p(e),r.argusReport.reportJoin(r.channel,r.uid,!1,O.elapse(),JSON.stringify(e)),r.grafanaReport.report("join",_,null==e?void 0:e.code,null==e?void 0:e.reason)}))}))}},{key:"publish",value:function(e,t){var n=this;return new Promise((function(r,i){n._checkWorker();var o=v.create().start();n.worker.publish().then((function(t){n.pushUrl=t.url,setTimeout((function(){a.default.info("client publish url: ".concat(t.url," success")),e&&e(t.url),r(t.url),n.argusReport.reportPublish(t.url,n.channel,n.uid,!0,o.elapse()),n.grafanaReport.report("publish",y)}),1)})).catch((function(e){a.default.error("client publish failed: ".concat((0,m.stringifyErr)(e))),t&&t(e),i(e),n.argusReport.reportPublish(null,n.channel,n.uid,!1,o.elapse(),JSON.stringify(e)),n.grafanaReport.report("publish",_,e.code,null==e?void 0:e.reason)}))}))}},{key:"unpublish",value:function(e,t){var n=this;return new Promise((function(r,i){n._checkWorker();var o=v.create().start();n.worker.unpublish().then((function(t){n.pushUrl=null,setTimeout((function(){a.default.info("client unpublish success"),e&&e(),r(),n.argusReport.reportUnPublish(n.channel,n.uid,!0,o.elapse()),n.grafanaReport.report("unpublish",y)}),1)})).catch((function(e){a.default.error("client unpublish failed: ".concat((0,m.stringifyErr)(e))),t&&t(e),i(e),n.argusReport.reportUnPublish(n.channel,n.uid,!1,o.elapse(),JSON.stringify(e)),n.grafanaReport.report("unpublish",_,e.code,null==e?void 0:e.reason)}))}))}},{key:"subscribe",value:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{audio:!0,video:!0},r=arguments.length>2?arguments[2]:void 0,i=arguments.length>3?arguments[3]:void 0;if("function"==typeof n){var o=i;i=r,r=n,n=o||{audio:!0,video:!0}}return new Promise((function(o,s){t._checkUid(e),t._checkWorker();var c=v.create().start();t.worker.subscribe(e,n).then((function(n){t.playUrls.set(e,n.url),setTimeout((function(){a.default.info("client stream ".concat(e," subscribed successful")),r&&r(n.url,n.rotation),o({url:n.url,rotation:n.rotation}),t.argusReport.reportSubscribe(n.url,e,t.channel,t.uid,!0,c.elapse()),t.grafanaReport.report("subscribe",y)}),1)})).catch((function(n){a.default.error("client stream ".concat(e," subscribed failed: ").concat((0,m.stringifyErr)(n))),i&&i(n),s(n),t.argusReport.reportSubscribe(null,e,t.channel,t.uid,!1,c.elapse(),JSON.stringify(n)),t.grafanaReport.report("subscribe",_,n.code,null==n?void 0:n.reason)}))}))}},{key:"unsubscribe",value:function(e,t,n){var r=this;return new Promise((function(i,o){r._checkUid(e),r._checkWorker();var s=v.create().start();r.worker.unsubscribe(e).then((function(n){r.playUrls.delete(e),setTimeout((function(){a.default.info("client unsubscribe ".concat(e," successful")),t&&t(),i(),r.argusReport.reportUnSubscribe(e,r.channel,r.uid,!0,s.elapse(),null),r.grafanaReport.report("unsubscribe",y)}),1)})).catch((function(t){a.default.error("client unsubscribe ".concat(e," failed: ").concat((0,m.stringifyErr)(t))),n&&n(t),o(t),r.argusReport.reportUnSubscribe(e,r.channel,r.uid,!1,s.elapse(),JSON.stringify(t)),r.grafanaReport.report("unsubscribe",_,t.code,null==t?void 0:t.reason)}))}))}},{key:"mute",value:function(e,t,n,r){var i=this;return new Promise((function(o,s){if(i._checkUid(e),i._checkWorker(),"video"!==t&&"audio"!==t&&"all"!==t){var c=new Error('target should be "video", "audio" or "all"');return a.default.error("client mute ".concat(e," failed: ").concat(c.message)),r&&r(c),void s(c)}var l=v.create().start();i.worker.mute(e,t).then((function(r){setTimeout((function(){a.default.info("client mute ".concat(e," ").concat(t," success")),n&&n(),o(),i.argusReport.reportMuteRemote(i.channel,i.uid,!0,l.elapse(),null,e,i.targetMap[t],1),i.grafanaReport.report("mute",y)}),1)})).catch((function(n){a.default.error("client mute ".concat(e," ").concat(t," failed: ").concat((0,m.stringifyErr)(n))),r&&r(n),s(n),i.argusReport.reportMuteRemote(i.channel,i.uid,!1,l.elapse(),JSON.stringify(n),e,i.targetMap[t],1),i.grafanaReport.report("mute",_,n.code,null==n?void 0:n.reason)}))}))}},{key:"unmute",value:function(e,t,n,r){var i=this;return new Promise((function(o,s){if(i._checkUid(e),i._checkWorker(),"video"!==t&&"audio"!==t&&"all"!==t){var c=new Error('target should be "video", "audio" or "all"');return a.default.error("client unmute ".concat(e," ").concat(t," failed: ").concat(c.message)),r&&r(c),void s(c)}var l=v.create().start();i.worker.unmute(e,t).then((function(r){setTimeout((function(){a.default.info("client unmute ".concat(e," ").concat(t," success")),n&&n(),o(),i.argusReport.reportMuteRemote(i.channel,i.uid,!0,l.elapse(),null,e,i.targetMap[t],-1),i.grafanaReport.report("unmute",y)}),1)})).catch((function(n){a.default.error("client unmute ".concat(e," ").concat(t," failed: ").concat((0,m.stringifyErr)(n))),r&&r(n),s(n),i.argusReport.reportMuteRemote(i.channel,i.uid,!1,l.elapse(),JSON.stringify(n),e,i.targetMap[t],-1),i.grafanaReport.report("unmute",_,n.code,null==n?void 0:n.reason)}))}))}},{key:"setRemoteVideoStreamType",value:function(e,t,n,r){var i=this;return new Promise((function(o,s){i._checkUid(e),i._checkWorker();var c=v.create().start();i.worker.setRemoteVideoStreamType(e,t).then((function(r){setTimeout((function(){a.default.info("client set remoteVideoStreamType ".concat(e," ").concat(t," success")),n&&n(),o(),i.argusReport.reportSetRemoteStreamType(i.channel,i.uid,!0,c.elapse(),null,t),i.grafanaReport.report("set_remote_stream_type",y)}),1)})).catch((function(n){a.default.error("client set remoteVideoStreamType ".concat(e," ").concat(t," failed: ").concat((0,m.stringifyErr)(n))),r&&r(n),s(n),i.argusReport.reportSetRemoteStreamType(i.channel,i.uid,!1,c.elapse(),JSON.stringify(n),t),i.grafanaReport.report("set_remote_stream_type",_,n.code,null==n?void 0:n.reason)}))}))}},{key:"renewToken",value:function(e,t,n){var r=this;return new Promise((function(i,o){r._checkWorker();var s=v.create().start();r.worker.renewToken(e).then((function(e){setTimeout((function(){a.default.info("client renew token success"),t&&t(),i(),r.argusReport.reportRenewToken(r.channel,r.uid,!0,s.elapse(),null),r.grafanaReport.report("renew_token",y)}),1)})).catch((function(e){a.default.error("client renew token failed: ".concat((0,m.stringifyErr)(e))),n&&n(e),o(e),r.argusReport.reportRenewToken(r.channel,r.uid,!1,s.elapse(),JSON.stringify(e)),r.grafanaReport.report("renew_token",_,e.code,null==e?void 0:e.reason)}))}))}},{key:"muteLocal",value:function(e,t,n){var r=this;return new Promise((function(i,o){if(r._checkWorker(),"video"!==e&&"audio"!==e&&"all"!==e){var s=new Error('target should be "video", "audio" or "all"');return a.default.error("client muteLocal failed: ".concat(s.message)),n&&n(s),void o(s)}var c=v.create().start();r.worker.muteLocal(e).then((function(n){setTimeout((function(){a.default.info("client muteLocal ".concat(e," success")),t&&t(),i(),r.argusReport.reportMuteLocal(r.channel,r.uid,!0,c.elapse(),null,r.targetMap[e],1),r.grafanaReport.report("mute_local",y)}),1)})).catch((function(t){a.default.error("client muteLocal ".concat(e," failed: ").concat((0,m.stringifyErr)(t))),n&&n(t),o(t),r.argusReport.reportMuteLocal(r.channel,r.uid,!1,c.elapse(),JSON.stringify(t),r.targetMap[e],1),r.grafanaReport.report("mute_local",_,t.code,null==t?void 0:t.reason)}))}))}},{key:"unmuteLocal",value:function(e,t,n){var r=this;return new Promise((function(i,o){if(r._checkWorker(),"video"!==e&&"audio"!==e&&"all"!==e){var s=new Error('target should be "video", "audio" or "all"');return a.default.error("client unmuteLocal failed: ".concat(s.message)),n&&n(s),void o(s)}var c=v.create().start();r.worker.unmuteLocal(e).then((function(n){setTimeout((function(){a.default.info("client unmuteLocal ".concat(e," success")),t&&t(),i(),r.argusReport.reportMuteLocal(r.channel,r.uid,!0,c.elapse(),null,r.targetMap[e],-1),r.grafanaReport.report("unmute_local",y)}),1)})).catch((function(t){a.default.error("client unmuteLocal ".concat(e," failed: ").concat((0,m.stringifyErr)(t))),n&&n(t),o(t),r.argusReport.reportMuteLocal(r.channel,r.uid,!1,c.elapse(),JSON.stringify(t),r.targetMap[e],-1),r.grafanaReport.report("unmute_local",_,t.code,null==t?void 0:t.reason)}))}))}},{key:"leave",value:function(t,n){var r=this;return new Promise((function(o,s){if(r.worker&&r.worker.isWSConnected()){var c=v.create().start();r.worker.leave().then(function(){var n=(0,e.Z)(i().mark((function e(n){return i().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return r.argusReport.reportLeave(r.channel,r.uid,!0,c.elapse()),r.grafanaReport.report("leave",y),e.next=4,r.destroy();case 4:setTimeout((function(){a.default.info("client leave success"),t&&t(),o()}),1);case 5:case"end":return e.stop()}}),e)})));return function(e){return n.apply(this,arguments)}}()).catch((function(e){a.default.error("client leave failed: ".concat((0,m.stringifyErr)(e))),n&&n(e),s(e),r.argusReport.reportLeave(r.channel,r.uid,!1,c.elapse(),JSON.stringify(e)),r.grafanaReport.report("leave",_,e.code,null==e?void 0:e.reason)}))}else a.default.info("client leave success without worker"),t&&t(),o(),r._stopNetworkJudge(),r._resetData()}))}},{key:"isConnected",value:function(){return!(!this.worker||!this.worker.isWSConnected())}},{key:"updatePusherStateChange",value:function(e){if(this.pushUrl){var t=e.detail.code,n=e.detail.message;a.default.info("client update pusher state, code:".concat(t," message:").concat(n)),this.argusReport.reportPusherStateChange(this.channel,this.uid,t>=1002,0,this.pushUrl,t,{message:n}),1002===t?this.grafanaReport.report("pusher_state_change",y,t,n):-1307===t&&this.grafanaReport.report("pusher_state_change",_,t,n)}}},{key:"updatePlayerStateChange",value:function(e,t){var n=this.playUrls.get(Number(e));if(n){var r=t.detail.code,i=t.detail.message;if(a.default.info("client update player state, uid:".concat(e," code:").concat(r," message:").concat(i)),this.argusReport.reportPlayerStateChange(e,this.channel,this.uid,r>=2002,0,n,r,{message:i}),2003===r||-2301===r){var o=2003===r?y:_;this.grafanaReport.report("player_state_change",o,r,i)}}}},{key:"updatePusherNetStatus",value:function(e){if(this.pushUrl){var t=e.detail.info;this.argusReport.setPusherNetData(t),oe(this.grafanaReport,0,t)}}},{key:"updatePlayerNetStatus",value:function(e,t){if(this.playUrls.get(Number(e))){var n=t.detail.info;this.argusReport.setPlayerNetData(e,n),se(this.grafanaReport,1,n,e)}}},{key:"send",value:function(e,t,n){var r=this;return new Promise((function(i,o){r._checkWorker(),r.worker.send(e).then((function(e){t&&t(e),i(e)})).catch((function(e){n&&n(e),o(e)}))}))}},{key:"updatePushUrl",value:function(e,t){var n=this;return new Promise((function(r,i){n._checkWorker(),n.worker.updatePushUrl().then((function(t){setTimeout((function(){a.default.info("client updatePushUrl success"),e&&e(t),r(t),n.grafanaReport.report("update_url",y)}),1)})).catch((function(e){a.default.error("client updatePushUrl failed: ".concat((0,m.stringifyErr)(e))),t&&t(e),i(e),n.grafanaReport.report("update_url",_,e.code,null==e?void 0:e.reason)}))}))}},{key:"destroy",value:function(e,t){var n=this;return new Promise((function(r,i){n.worker?n.worker.destroy().then((function(){n.pushUrl=null,n.playUrls.clear(),a.default.info("client destroy success"),e&&e(),r()})).catch((function(e){a.default.error("client destroy failed: ".concat((0,m.stringifyErr)(e))),t&&t(e),i(e)})).finally((function(){n.worker=null,n._stopNetworkJudge(),n._resetData()})):(n.pushUrl=null,n.playUrls.clear(),a.default.info("client destroy success without worker"),e&&e(),r(),n._stopNetworkJudge(),n._resetData()),n.grafanaReport.destroy(),n.argusReport.destroy()}))}},{key:"startChannelMediaRelay",value:function(e,t){if(!(e instanceof I.ChannelMediaRelayConfiguration))throw"Configration should be instance of [ChannelMediaRelayConfiguration]";var n=e.getSrcChannelMediaInfo(),r=e.getDestChannelMediaInfos();if((0,m.isEmpty)(n))throw"srcChannelMediaInfo should not be empty";if((0,m.isEmpty)(r)||0===r.length)throw"destChannelMediaInfos should not be empty";if(a.default.info("[startChannelMediaRelay]: srcInfo: ",n," destInfo: ",r),!(0,o.is32Uint)(n.uid))throw"Invalid uid in srcChannelMediaInfo";if(!(0,m.isValidChannelName)(n.channelName))throw"Invalid channelName in srcChannelMediaInfo";if(n.token&&!(0,m.isValidToken)(n.token))throw"Invalid token in srcChannelMediaInfo";if(r.forEach((function(e){if(!(0,o.is32Uint)(e.uid))throw"Invalid uid in destChannelMediaInfo";if(!(0,m.isValidChannelName)(e.channelName))throw"Invalid channelName in destChannelMediaInfo";if(e.token&&!(0,m.isValidToken)(e.token))throw"Invalid token in destChannelMediaInfo"})),!this.worker)throw"startChannelMediaRelay should be used after join";this.worker.startChannelMediaRelay(e).then((function(){a.default.info("client startChannelMediaRelay success"),t&&t()})).catch((function(e){a.default.error("client startChannelMediaRelay failed: ".concat((0,m.stringifyErr)(e))),t&&t(e)}))}},{key:"updateChannelMediaRelay",value:function(e,t){if(!(e instanceof I.ChannelMediaRelayConfiguration))throw"Configration should be instance of [ChannelMediaRelayConfiguration]";var n=e.getSrcChannelMediaInfo(),r=e.getDestChannelMediaInfos();if((0,m.isEmpty)(n))throw"srcChannelMediaInfo should not be empty";if((0,m.isEmpty)(r)||0===r.length)throw"destChannelMediaInfos should not be empty";if(a.default.info("[updateChannelMediaRelay]: srcInfo: ",n," destInfo: ",r),!(0,o.is32Uint)(n.uid))throw"Invalid uid in srcChannelMediaInfo";if(!(0,m.isValidChannelName)(n.channelName))throw"Invalid channelName in srcChannelMediaInfo";if(n.token&&!(0,m.isValidToken)(n.token))throw"Invalid token in srcChannelMediaInfo";if(r.forEach((function(e){if(!(0,o.is32Uint)(e.uid))throw"Invalid uid in destChannelMediaInfo";if(!(0,m.isValidChannelName)(e.channelName))throw"Invalid channelName in destChannelMediaInfo";if(e.token&&!(0,m.isValidToken)(e.token))throw"Invalid token in destChannelMediaInfo"})),!this.worker)throw"updateChannelMediaRelay should be used after join";this.worker.updateChannelMediaRelay(e).then((function(){a.default.info("client updateChannelMediaRelay success"),t&&t()})).catch((function(e){a.default.error("client updateChannelMediaRelay failed: ".concat((0,m.stringifyErr)(e))),t&&t(e)}))}},{key:"stopChannelMediaRelay",value:function(e){a.default.info("[stopChannelMediaRelay]"),this.worker.stopChannelMediaRelay().then((function(){a.default.info("client stopChannelMediaRelay success"),e&&e()})).catch((function(t){a.default.error("client stopChannelMediaRelay failed: ".concat((0,m.stringifyErr)(t))),e&&e(t)}))}},{key:"_checkUid",value:function(e){if(!e||"number"!=typeof e||!(0,o.is32Uint)(e)){var t=new Error("Invalid uid type");throw a.default.error("client ".concat(t.message)),t}}},{key:"_checkWorker",value:function(){if(!this.worker||!this.worker.isWSConnected()){var e=new Error("Disconnected from server");throw a.default.error("client ".concat(e.message)),e}}},{key:"_dealSid",value:function(){this.sid||(this.sid=(0,o.generateSessionId)(),this.argusReport.sid=this.sid,a.default.setOptions({appId:this.appId,sid:this.sid}),a.default.info("client sid: ".concat(this.sid)))}},{key:"_startNetworkJudge",value:function(){this.networkJudge||(this.networkJudge=!0,a.default.info("client start network judge"),wx.onNetworkStatusChange(ae),wx.onNetworkWeakChange(ce))}},{key:"_stopNetworkJudge",value:function(){this.networkJudge&&(this.networkJudge=!1,a.default.info("client stop network judge"),wx.offNetworkStatusChange(ae),wx.offNetworkWeakChange(ce))}},{key:"_resetData",value:function(){this.sid=""}}]),r}()})(),__webpack_exports__})())); diff --git a/miniprogram_npm/dayjs/index.js b/miniprogram_npm/dayjs/index.js new file mode 100644 index 0000000..3fa8603 --- /dev/null +++ b/miniprogram_npm/dayjs/index.js @@ -0,0 +1,13 @@ +module.exports = (function() { +var __MODS__ = {}; +var __DEFINE__ = function(modId, func, req) { var m = { exports: {}, _tempexports: {} }; __MODS__[modId] = { status: 0, func: func, req: req, m: m }; }; +var __REQUIRE__ = function(modId, source) { if(!__MODS__[modId]) return require(source); if(!__MODS__[modId].status) { var m = __MODS__[modId].m; m._exports = m._tempexports; var desp = Object.getOwnPropertyDescriptor(m, "exports"); if (desp && desp.configurable) Object.defineProperty(m, "exports", { set: function (val) { if(typeof val === "object" && val !== m._exports) { m._exports.__proto__ = val.__proto__; Object.keys(val).forEach(function (k) { m._exports[k] = val[k]; }); } m._tempexports = val }, get: function () { return m._tempexports; } }); __MODS__[modId].status = 1; __MODS__[modId].func(__MODS__[modId].req, m, m.exports); } return __MODS__[modId].m.exports; }; +var __REQUIRE_WILDCARD__ = function(obj) { if(obj && obj.__esModule) { return obj; } else { var newObj = {}; if(obj != null) { for(var k in obj) { if (Object.prototype.hasOwnProperty.call(obj, k)) newObj[k] = obj[k]; } } newObj.default = obj; return newObj; } }; +var __REQUIRE_DEFAULT__ = function(obj) { return obj && obj.__esModule ? obj.default : obj; }; +__DEFINE__(1731653753936, function(require, module, exports) { +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).dayjs=e()}(this,(function(){var t=1e3,e=6e4,n=36e5,r="millisecond",i="second",s="minute",u="hour",a="day",o="week",c="month",f="quarter",h="year",d="date",l="Invalid Date",$=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,y=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,M={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:function(t){var e=["th","st","nd","rd"],n=t%100;return"["+t+(e[(n-20)%10]||e[n]||e[0])+"]"}},m=function(t,e,n){var r=String(t);return!r||r.length>=e?t:""+Array(e+1-r.length).join(n)+t},v={s:m,z:function(t){var e=-t.utcOffset(),n=Math.abs(e),r=Math.floor(n/60),i=n%60;return(e<=0?"+":"-")+m(r,2,"0")+":"+m(i,2,"0")},m:function t(e,n){if(e.date()1)return t(u[0])}else{var a=e.name;D[a]=e,i=a}return!r&&i&&(g=i),i||!r&&g},O=function(t,e){if(S(t))return t.clone();var n="object"==typeof e?e:{};return n.date=t,n.args=arguments,new _(n)},b=v;b.l=w,b.i=S,b.w=function(t,e){return O(t,{locale:e.$L,utc:e.$u,x:e.$x,$offset:e.$offset})};var _=function(){function M(t){this.$L=w(t.locale,null,!0),this.parse(t),this.$x=this.$x||t.x||{},this[p]=!0}var m=M.prototype;return m.parse=function(t){this.$d=function(t){var e=t.date,n=t.utc;if(null===e)return new Date(NaN);if(b.u(e))return new Date;if(e instanceof Date)return new Date(e);if("string"==typeof e&&!/Z$/i.test(e)){var r=e.match($);if(r){var i=r[2]-1||0,s=(r[7]||"0").substring(0,3);return n?new Date(Date.UTC(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)):new Date(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)}}return new Date(e)}(t),this.init()},m.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},m.$utils=function(){return b},m.isValid=function(){return!(this.$d.toString()===l)},m.isSame=function(t,e){var n=O(t);return this.startOf(e)<=n&&n<=this.endOf(e)},m.isAfter=function(t,e){return O(t)=e?t:\"\"+Array(e+1-r.length).join(n)+t},v={s:m,z:function(t){var e=-t.utcOffset(),n=Math.abs(e),r=Math.floor(n/60),i=n%60;return(e<=0?\"+\":\"-\")+m(r,2,\"0\")+\":\"+m(i,2,\"0\")},m:function t(e,n){if(e.date()1)return t(u[0])}else{var a=e.name;D[a]=e,i=a}return!r&&i&&(g=i),i||!r&&g},O=function(t,e){if(S(t))return t.clone();var n=\"object\"==typeof e?e:{};return n.date=t,n.args=arguments,new _(n)},b=v;b.l=w,b.i=S,b.w=function(t,e){return O(t,{locale:e.$L,utc:e.$u,x:e.$x,$offset:e.$offset})};var _=function(){function M(t){this.$L=w(t.locale,null,!0),this.parse(t),this.$x=this.$x||t.x||{},this[p]=!0}var m=M.prototype;return m.parse=function(t){this.$d=function(t){var e=t.date,n=t.utc;if(null===e)return new Date(NaN);if(b.u(e))return new Date;if(e instanceof Date)return new Date(e);if(\"string\"==typeof e&&!/Z$/i.test(e)){var r=e.match($);if(r){var i=r[2]-1||0,s=(r[7]||\"0\").substring(0,3);return n?new Date(Date.UTC(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)):new Date(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)}}return new Date(e)}(t),this.init()},m.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},m.$utils=function(){return b},m.isValid=function(){return!(this.$d.toString()===l)},m.isSame=function(t,e){var n=O(t);return this.startOf(e)<=n&&n<=this.endOf(e)},m.isAfter=function(t,e){return O(t)()=>(t||e((t={exports:{}}).exports,t),t.exports);var U=W(L=>{"use strict";Object.defineProperty(L,"__esModule",{value:!0}),function(e,t){for(var r in t)Object.defineProperty(e,r,{enumerable:!0,get:t[r]})}(L,{getDataOnPath:function(){return se},parseMultiDataPaths:function(){return ce}});var N=/^\s/,k=function(e,t){throw Error('Parsing data path "'+e+'" failed at char "'+e[t]+'" (index '+t+")")},ae=function(e,t){for(var r=t.index;t.index{z.exports=function(){let t=null,r;function n(i){return i?typeof i=="object"||typeof i=="function":!1}function a(i){if(i!==null&&!n(i))throw new TypeError("Object prototype may only be an Object or null: "+i)}let o=Object,u=!!o.create||!({__proto__:null}instanceof o),c=o.create||(u?function(s){return a(s),{__proto__:s}}:function(s){if(a(s),s===null)throw new SyntaxError("Native Object.create is required to create objects with null prototype");var l=function(){};return l.prototype=s,new l}),d=function(){return null},g=o.getPrototypeOf||([].__proto__===Array.prototype?function(s){let l=s.__proto__;return n(l)?l:null}:d);return r=function(i,s){if((this&&this instanceof r?this.constructor:void 0)===void 0)throw new TypeError("Constructor Proxy requires 'new'");if(!n(i)||!n(s))throw new TypeError("Cannot create proxy with a non-object as target or handler");let h=function(){};t=function(){i=null,h=function(f){throw new TypeError(`Cannot perform '${f}' on a proxy that has been revoked`)}},setTimeout(function(){t=null},0);let b=s;s={get:null,set:null,apply:null,construct:null};for(let f in b){if(!(f in s))throw new TypeError(`Proxy polyfill does not support trap '${f}'`);s[f]=b[f]}typeof b=="function"&&(s.apply=b.apply.bind(b));let v=g(i),p,_=!1,w=!1;typeof i=="function"?(p=function(){let m=this&&this.constructor===p,y=Array.prototype.slice.call(arguments);if(h(m?"construct":"apply"),m&&s.construct)return s.construct.call(this,i,y);if(!m&&s.apply)return s.apply(i,this,y);if(m){y.unshift(i);let j=i.bind.apply(i,y);return new j}return i.apply(this,y)},_=!0):i instanceof Array?(p=[],w=!0):p=u||v!==null?c(v):{};let O=s.get?function(f){return h("get"),s.get(this,f,p)}:function(f){return h("get"),this[f]},x=s.set?function(f,m){h("set");let y=s.set(this,f,m,p)}:function(f,m){h("set"),this[f]=m},q=o.getOwnPropertyNames(i),A={};q.forEach(function(f){if((_||w)&&f in p)return;let y={enumerable:!!o.getOwnPropertyDescriptor(i,f).enumerable,get:O.bind(i,f),set:x.bind(i,f)};o.defineProperty(p,f,y),A[f]=!0});let P=!0;if(_||w){let f=o.setPrototypeOf||([].__proto__===Array.prototype?function(y,j){return a(j),y.__proto__=j,y}:d);v&&f(p,v)||(P=!1)}if(s.get||!P)for(let f in i)A[f]||o.defineProperty(p,f,{get:O.bind(i,f)});return o.seal(i),o.seal(p),p},r.revocable=function(i,s){return{proxy:new r(i,s),revoke:t}},r}});var G=W(R=>{"use strict";function D(e){return e&&typeof Symbol<"u"&&e.constructor===Symbol?"symbol":typeof e}Object.defineProperty(R,"__esModule",{value:!0}),function(e,t){for(var r in t)Object.defineProperty(e,r,{enumerable:!0,get:t[r]})}(R,{create:function(){return de},unwrap:function(){return function e(t){if(t!==null&&(t===void 0?"undefined":D(t))==="object"&&D(t.__rawObject__)!=="object"){if(Array.isArray(t))return t.map(function(n){return e(n)});var r={};return Object.keys(t).forEach(function(n){r[n]=e(t[n])}),r}return(t===void 0?"undefined":D(t))!=="object"||t===null||D(t.__rawObject__)!=="object"?t:t.__rawObject__}}});var T,fe=(0,((T=Z())&&T.__esModule?T:{default:T}).default)(),K=function(e,t,r){if((e===void 0?"undefined":D(e))!=="object"||e===null)return e;var n={get:function(a,o){if(o==="__rawObject__")return a;var u=r.concat(o),c=a[o];return t.push({kind:"value",path:u,value:c}),K(c,t,u)},ownKeys:function(a){var o=r.slice(),u=Object.keys(a).sort();return t.push({kind:"keys",path:o,keys:u}),u}};try{return new Proxy(e,n)}catch{return new fe(e,n)}};function de(e,t){return K(e,t,[])}});var ne=W(V=>{"use strict";Object.defineProperty(V,"__esModule",{value:!0}),function(e,t){for(var r in t)Object.defineProperty(e,r,{enumerable:!0,get:t[r]})}(V,{behavior:function(){return ve},computed:function(){return ye},watch:function(){return be}});var M,J,pe=Y(require("rfdc")),le=Y(require("fast-deep-equal")),E=te(U()),F=te(G());function Y(e){return e&&e.__esModule?e:{default:e}}function ee(e){if(typeof WeakMap!="function")return null;var t=new WeakMap,r=new WeakMap;return(ee=function(n){return n?r:t})(e)}function te(e,t){if(!t&&e&&e.__esModule)return e;if(e===null||typeof e!="object"&&typeof e!="function")return{default:e};var r=ee(t);if(r&&r.has(e))return r.get(e);var n={__proto__:null},a=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in e)if(o!=="default"&&Object.prototype.hasOwnProperty.call(e,o)){var u=a?Object.getOwnPropertyDescriptor(e,o):null;u&&(u.get||u.set)?Object.defineProperty(n,o,u):n[o]=e[o]}return n.default=e,r&&r.set(e,n),n}var Q=(0,pe.default)({proto:!0});(M=J||(J={}))[M.CREATED=0]="CREATED",M[M.ATTACHED=1]="ATTACHED";var he=0;function X(e,t){return e===t||e!=e&&t!=t}var S=function(){"use strict";function e(){this.observersItems=[],this.computedWatchDefId=he++,this.computedList=[],this.watchList=[];var r=this.computedWatchDefId,n=this.computedList,a=this.watchList;this.observersItems.push({fields:"_computedWatchInit",observer:function(){var o=this,u=this.data._computedWatchInit;if(u===0){var c={computedUpdaters:[],computedRelatedPathValues:Array(n.length),watchCurVal:Array(a.length),_triggerFromComputedAttached:Object.create(null)};this._computedWatchInfo||(this._computedWatchInfo={}),this._computedWatchInfo[r]=c,a.forEach(function(g,i){var s=g.map(function(l){var h=l.path,b=l.options,v=E.getDataOnPath(o.data,h);return b.deepCmp?Q(v):v});c.watchCurVal[i]=s})}else if(u===1){var d=this._computedWatchInfo[r];n.forEach(function(g,i){var s,l=g[0],h=g[1],b=[],v=h(F.create(o.data,b));o.setData(((s={})[l]=F.unwrap(v),s)),d._triggerFromComputedAttached[l]=!0,d.computedRelatedPathValues[i]=b,d.computedUpdaters.push(function(){for(var p,_=d.computedRelatedPathValues[i],w=!1,O=0;O<_.length;O++){var x=_[O];if(x.kind==="keys"){var q=x.path,A=x.keys,P=Object.keys(E.getDataOnPath(o.data,q)).sort();if(P.length!==A.length){w=!0;break}for(var f=0;f new Date(o)) + constructorHandlers.set(Map, (o, fn) => new Map(cloneArray(Array.from(o), fn))) + constructorHandlers.set(Set, (o, fn) => new Set(cloneArray(Array.from(o), fn))) + if (opts.constructorHandlers) { + for (const handler of opts.constructorHandlers) { + constructorHandlers.set(handler[0], handler[1]) + } + } + + let handler = null + + return opts.proto ? cloneProto : clone + + function cloneArray (a, fn) { + const keys = Object.keys(a) + const a2 = new Array(keys.length) + for (let i = 0; i < keys.length; i++) { + const k = keys[i] + const cur = a[k] + if (typeof cur !== 'object' || cur === null) { + a2[k] = cur + } else if (cur.constructor !== Object && (handler = constructorHandlers.get(cur.constructor))) { + a2[k] = handler(cur, fn) + } else if (ArrayBuffer.isView(cur)) { + a2[k] = copyBuffer(cur) + } else { + a2[k] = fn(cur) + } + } + return a2 + } + + function clone (o) { + if (typeof o !== 'object' || o === null) return o + if (Array.isArray(o)) return cloneArray(o, clone) + if (o.constructor !== Object && (handler = constructorHandlers.get(o.constructor))) { + return handler(o, clone) + } + const o2 = {} + for (const k in o) { + if (Object.hasOwnProperty.call(o, k) === false) continue + const cur = o[k] + if (typeof cur !== 'object' || cur === null) { + o2[k] = cur + } else if (cur.constructor !== Object && (handler = constructorHandlers.get(cur.constructor))) { + o2[k] = handler(cur, clone) + } else if (ArrayBuffer.isView(cur)) { + o2[k] = copyBuffer(cur) + } else { + o2[k] = clone(cur) + } + } + return o2 + } + + function cloneProto (o) { + if (typeof o !== 'object' || o === null) return o + if (Array.isArray(o)) return cloneArray(o, cloneProto) + if (o.constructor !== Object && (handler = constructorHandlers.get(o.constructor))) { + return handler(o, cloneProto) + } + const o2 = {} + for (const k in o) { + const cur = o[k] + if (typeof cur !== 'object' || cur === null) { + o2[k] = cur + } else if (cur.constructor !== Object && (handler = constructorHandlers.get(cur.constructor))) { + o2[k] = handler(cur, cloneProto) + } else if (ArrayBuffer.isView(cur)) { + o2[k] = copyBuffer(cur) + } else { + o2[k] = cloneProto(cur) + } + } + return o2 + } +} + +function rfdcCircles (opts) { + const refs = [] + const refsNew = [] + + const constructorHandlers = new Map() + constructorHandlers.set(Date, (o) => new Date(o)) + constructorHandlers.set(Map, (o, fn) => new Map(cloneArray(Array.from(o), fn))) + constructorHandlers.set(Set, (o, fn) => new Set(cloneArray(Array.from(o), fn))) + if (opts.constructorHandlers) { + for (const handler of opts.constructorHandlers) { + constructorHandlers.set(handler[0], handler[1]) + } + } + + let handler = null + return opts.proto ? cloneProto : clone + + function cloneArray (a, fn) { + const keys = Object.keys(a) + const a2 = new Array(keys.length) + for (let i = 0; i < keys.length; i++) { + const k = keys[i] + const cur = a[k] + if (typeof cur !== 'object' || cur === null) { + a2[k] = cur + } else if (cur.constructor !== Object && (handler = constructorHandlers.get(cur.constructor))) { + a2[k] = handler(cur, fn) + } else if (ArrayBuffer.isView(cur)) { + a2[k] = copyBuffer(cur) + } else { + const index = refs.indexOf(cur) + if (index !== -1) { + a2[k] = refsNew[index] + } else { + a2[k] = fn(cur) + } + } + } + return a2 + } + + function clone (o) { + if (typeof o !== 'object' || o === null) return o + if (Array.isArray(o)) return cloneArray(o, clone) + if (o.constructor !== Object && (handler = constructorHandlers.get(o.constructor))) { + return handler(o, clone) + } + const o2 = {} + refs.push(o) + refsNew.push(o2) + for (const k in o) { + if (Object.hasOwnProperty.call(o, k) === false) continue + const cur = o[k] + if (typeof cur !== 'object' || cur === null) { + o2[k] = cur + } else if (cur.constructor !== Object && (handler = constructorHandlers.get(cur.constructor))) { + o2[k] = handler(cur, clone) + } else if (ArrayBuffer.isView(cur)) { + o2[k] = copyBuffer(cur) + } else { + const i = refs.indexOf(cur) + if (i !== -1) { + o2[k] = refsNew[i] + } else { + o2[k] = clone(cur) + } + } + } + refs.pop() + refsNew.pop() + return o2 + } + + function cloneProto (o) { + if (typeof o !== 'object' || o === null) return o + if (Array.isArray(o)) return cloneArray(o, cloneProto) + if (o.constructor !== Object && (handler = constructorHandlers.get(o.constructor))) { + return handler(o, cloneProto) + } + const o2 = {} + refs.push(o) + refsNew.push(o2) + for (const k in o) { + const cur = o[k] + if (typeof cur !== 'object' || cur === null) { + o2[k] = cur + } else if (cur.constructor !== Object && (handler = constructorHandlers.get(cur.constructor))) { + o2[k] = handler(cur, cloneProto) + } else if (ArrayBuffer.isView(cur)) { + o2[k] = copyBuffer(cur) + } else { + const i = refs.indexOf(cur) + if (i !== -1) { + o2[k] = refsNew[i] + } else { + o2[k] = cloneProto(cur) + } + } + } + refs.pop() + refsNew.pop() + return o2 + } +} + +}, function(modId) {var map = {}; return __REQUIRE__(map[modId], modId); }) +return __REQUIRE__(1731653753938); +})() +//miniprogram-npm-outsideDeps=[] +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/miniprogram_npm/rfdc/index.js.map b/miniprogram_npm/rfdc/index.js.map new file mode 100644 index 0000000..a6fba6a --- /dev/null +++ b/miniprogram_npm/rfdc/index.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["index.js"],"names":[],"mappings":";;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"index.js","sourcesContent":["\nmodule.exports = rfdc\n\nfunction copyBuffer (cur) {\n if (cur instanceof Buffer) {\n return Buffer.from(cur)\n }\n\n return new cur.constructor(cur.buffer.slice(), cur.byteOffset, cur.length)\n}\n\nfunction rfdc (opts) {\n opts = opts || {}\n if (opts.circles) return rfdcCircles(opts)\n\n const constructorHandlers = new Map()\n constructorHandlers.set(Date, (o) => new Date(o))\n constructorHandlers.set(Map, (o, fn) => new Map(cloneArray(Array.from(o), fn)))\n constructorHandlers.set(Set, (o, fn) => new Set(cloneArray(Array.from(o), fn)))\n if (opts.constructorHandlers) {\n for (const handler of opts.constructorHandlers) {\n constructorHandlers.set(handler[0], handler[1])\n }\n }\n\n let handler = null\n\n return opts.proto ? cloneProto : clone\n\n function cloneArray (a, fn) {\n const keys = Object.keys(a)\n const a2 = new Array(keys.length)\n for (let i = 0; i < keys.length; i++) {\n const k = keys[i]\n const cur = a[k]\n if (typeof cur !== 'object' || cur === null) {\n a2[k] = cur\n } else if (cur.constructor !== Object && (handler = constructorHandlers.get(cur.constructor))) {\n a2[k] = handler(cur, fn)\n } else if (ArrayBuffer.isView(cur)) {\n a2[k] = copyBuffer(cur)\n } else {\n a2[k] = fn(cur)\n }\n }\n return a2\n }\n\n function clone (o) {\n if (typeof o !== 'object' || o === null) return o\n if (Array.isArray(o)) return cloneArray(o, clone)\n if (o.constructor !== Object && (handler = constructorHandlers.get(o.constructor))) {\n return handler(o, clone)\n }\n const o2 = {}\n for (const k in o) {\n if (Object.hasOwnProperty.call(o, k) === false) continue\n const cur = o[k]\n if (typeof cur !== 'object' || cur === null) {\n o2[k] = cur\n } else if (cur.constructor !== Object && (handler = constructorHandlers.get(cur.constructor))) {\n o2[k] = handler(cur, clone)\n } else if (ArrayBuffer.isView(cur)) {\n o2[k] = copyBuffer(cur)\n } else {\n o2[k] = clone(cur)\n }\n }\n return o2\n }\n\n function cloneProto (o) {\n if (typeof o !== 'object' || o === null) return o\n if (Array.isArray(o)) return cloneArray(o, cloneProto)\n if (o.constructor !== Object && (handler = constructorHandlers.get(o.constructor))) {\n return handler(o, cloneProto)\n }\n const o2 = {}\n for (const k in o) {\n const cur = o[k]\n if (typeof cur !== 'object' || cur === null) {\n o2[k] = cur\n } else if (cur.constructor !== Object && (handler = constructorHandlers.get(cur.constructor))) {\n o2[k] = handler(cur, cloneProto)\n } else if (ArrayBuffer.isView(cur)) {\n o2[k] = copyBuffer(cur)\n } else {\n o2[k] = cloneProto(cur)\n }\n }\n return o2\n }\n}\n\nfunction rfdcCircles (opts) {\n const refs = []\n const refsNew = []\n\n const constructorHandlers = new Map()\n constructorHandlers.set(Date, (o) => new Date(o))\n constructorHandlers.set(Map, (o, fn) => new Map(cloneArray(Array.from(o), fn)))\n constructorHandlers.set(Set, (o, fn) => new Set(cloneArray(Array.from(o), fn)))\n if (opts.constructorHandlers) {\n for (const handler of opts.constructorHandlers) {\n constructorHandlers.set(handler[0], handler[1])\n }\n }\n\n let handler = null\n return opts.proto ? cloneProto : clone\n\n function cloneArray (a, fn) {\n const keys = Object.keys(a)\n const a2 = new Array(keys.length)\n for (let i = 0; i < keys.length; i++) {\n const k = keys[i]\n const cur = a[k]\n if (typeof cur !== 'object' || cur === null) {\n a2[k] = cur\n } else if (cur.constructor !== Object && (handler = constructorHandlers.get(cur.constructor))) {\n a2[k] = handler(cur, fn)\n } else if (ArrayBuffer.isView(cur)) {\n a2[k] = copyBuffer(cur)\n } else {\n const index = refs.indexOf(cur)\n if (index !== -1) {\n a2[k] = refsNew[index]\n } else {\n a2[k] = fn(cur)\n }\n }\n }\n return a2\n }\n\n function clone (o) {\n if (typeof o !== 'object' || o === null) return o\n if (Array.isArray(o)) return cloneArray(o, clone)\n if (o.constructor !== Object && (handler = constructorHandlers.get(o.constructor))) {\n return handler(o, clone)\n }\n const o2 = {}\n refs.push(o)\n refsNew.push(o2)\n for (const k in o) {\n if (Object.hasOwnProperty.call(o, k) === false) continue\n const cur = o[k]\n if (typeof cur !== 'object' || cur === null) {\n o2[k] = cur\n } else if (cur.constructor !== Object && (handler = constructorHandlers.get(cur.constructor))) {\n o2[k] = handler(cur, clone)\n } else if (ArrayBuffer.isView(cur)) {\n o2[k] = copyBuffer(cur)\n } else {\n const i = refs.indexOf(cur)\n if (i !== -1) {\n o2[k] = refsNew[i]\n } else {\n o2[k] = clone(cur)\n }\n }\n }\n refs.pop()\n refsNew.pop()\n return o2\n }\n\n function cloneProto (o) {\n if (typeof o !== 'object' || o === null) return o\n if (Array.isArray(o)) return cloneArray(o, cloneProto)\n if (o.constructor !== Object && (handler = constructorHandlers.get(o.constructor))) {\n return handler(o, cloneProto)\n }\n const o2 = {}\n refs.push(o)\n refsNew.push(o2)\n for (const k in o) {\n const cur = o[k]\n if (typeof cur !== 'object' || cur === null) {\n o2[k] = cur\n } else if (cur.constructor !== Object && (handler = constructorHandlers.get(cur.constructor))) {\n o2[k] = handler(cur, cloneProto)\n } else if (ArrayBuffer.isView(cur)) {\n o2[k] = copyBuffer(cur)\n } else {\n const i = refs.indexOf(cur)\n if (i !== -1) {\n o2[k] = refsNew[i]\n } else {\n o2[k] = cloneProto(cur)\n }\n }\n }\n refs.pop()\n refsNew.pop()\n return o2\n }\n}\n"]} \ No newline at end of file diff --git a/miniprogram_npm/signalr-for-wx/AbortController.js b/miniprogram_npm/signalr-for-wx/AbortController.js new file mode 100644 index 0000000..7944488 --- /dev/null +++ b/miniprogram_npm/signalr-for-wx/AbortController.js @@ -0,0 +1,39 @@ +// 版权所有(c).NET基金会。保留所有权利。 +// 在2.0版Apache许可下授权。有关许可证信息,请参见项目根目录中的License.txt。 +//粗略填写 https://developer.mozilla.org/en-US/docs/Web/API/AbortController +//实际上,我们从来没有使用被polyfill填充的API,我们总是使用polyfill,因为 +//它现在还是一个非常新的API。 +/** + * + * @private + */ +var AbortController = /** @class */ (function () { + function AbortController() { + this.isAborted = false; + this.onabort = null; + } + AbortController.prototype.abort = function () { + if (!this.isAborted) { + this.isAborted = true; + if (this.onabort) { + this.onabort(); + } + } + }; + Object.defineProperty(AbortController.prototype, "signal", { + get: function () { + return this; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(AbortController.prototype, "aborted", { + get: function () { + return this.isAborted; + }, + enumerable: true, + configurable: true + }); + return AbortController; +}()); +export { AbortController }; diff --git a/miniprogram_npm/signalr-for-wx/DefualtRequest.js b/miniprogram_npm/signalr-for-wx/DefualtRequest.js new file mode 100644 index 0000000..48571b7 --- /dev/null +++ b/miniprogram_npm/signalr-for-wx/DefualtRequest.js @@ -0,0 +1,50 @@ +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +var __assign = (this && this.__assign) || function () { + __assign = Object.assign || function(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) + t[p] = s[p]; + } + return t; + }; + return __assign.apply(this, arguments); +}; +import { Request } from "./wx-request/index"; +import { RequestMethod, ResponseType } from "./wx-request/model"; +/** + * 生成默认请求库 + * + * @export + * @class DefaultRequest + */ +var DefaultRequest = /** @class */ (function (_super) { + __extends(DefaultRequest, _super); + function DefaultRequest(config, logger) { + var _this = _super.call(this) || this; + _this.logger = logger + ? logger + : { + log: function (logLevel, message) { + /* 屏蔽打印 */ + } + }; + // default config + _this.setConfig(__assign({ about: false, forceEnableHttps: false, headers: {}, method: RequestMethod.GET, responseEncoding: ResponseType.JSON, timeout: 2 * 60 * 1000, transformRequest: [], transformResponse: [] }, config)); + return _this; + } + return DefaultRequest; +}(Request)); +export default DefaultRequest; diff --git a/miniprogram_npm/signalr-for-wx/Errors.js b/miniprogram_npm/signalr-for-wx/Errors.js new file mode 100644 index 0000000..d9a5f9b --- /dev/null +++ b/miniprogram_npm/signalr-for-wx/Errors.js @@ -0,0 +1,114 @@ +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +// 版权所有(c).NET基金会。保留所有权利。 +// 在2.0版Apache许可下授权。有关许可证信息,请参见项目根目录中的License.txt。 +/** + * Error thrown when an HTTP request fails. + * HTTP请求失败时引发错误。 + */ +var HttpError = /** @class */ (function (_super) { + __extends(HttpError, _super); + /** Constructs a new instance of {@link @aspnet/signalr.HttpError}. + * + * @param {string} errorMessage A descriptive error message. + * @param {number} statusCode The HTTP status code represented by this error. + */ + function HttpError(errorMessage, statusCode) { + var _newTarget = this.constructor; + var _this = this; + var trueProto = _newTarget.prototype; + _this = _super.call(this, errorMessage) || this; + _this.statusCode = statusCode; + // Workaround issue in Typescript compiler + // https://github.com/Microsoft/TypeScript/issues/13965#issuecomment-278570200 + _this.__proto__ = trueProto; + return _this; + } + return HttpError; +}(Error)); +export { HttpError }; +/** + * Error thrown when a timeout elapses. + * 超时错误 + */ +var TimeoutError = /** @class */ (function (_super) { + __extends(TimeoutError, _super); + /** Constructs a new instance of {@link @aspnet/signalr.TimeoutError}. + * + * @param {string} errorMessage A descriptive error message. + */ + function TimeoutError(errorMessage) { + var _newTarget = this.constructor; + if (errorMessage === void 0) { errorMessage = "A timeout occurred."; } + var _this = this; + var trueProto = _newTarget.prototype; + _this = _super.call(this, errorMessage) || this; + // Workaround issue in Typescript compiler + // https://github.com/Microsoft/TypeScript/issues/13965#issuecomment-278570200 + _this.__proto__ = trueProto; + return _this; + } + return TimeoutError; +}(Error)); +export { TimeoutError }; +/** + * Error thrown when an action is aborted. + * 连接错误 + */ +var AbortError = /** @class */ (function (_super) { + __extends(AbortError, _super); + /** Constructs a new instance of {@link AbortError}. + * + * @param {string} errorMessage A descriptive error message. + */ + function AbortError(errorMessage) { + var _newTarget = this.constructor; + if (errorMessage === void 0) { errorMessage = "An abort occurred."; } + var _this = this; + var trueProto = _newTarget.prototype; + _this = _super.call(this, errorMessage) || this; + // Workaround issue in Typescript compiler + // https://github.com/Microsoft/TypeScript/issues/13965#issuecomment-278570200 + _this.__proto__ = trueProto; + return _this; + } + return AbortError; +}(Error)); +export { AbortError }; +/** + * Error thrown when message event is not found. + * 事件未定义 + */ +var EventNotFoundError = /** @class */ (function (_super) { + __extends(EventNotFoundError, _super); + /** Constructs a new instance of {@link AbortError}. + * + * @param {string} errorMessage A descriptive error message. + */ + function EventNotFoundError(invocationMessage, errorMessage) { + var _newTarget = this.constructor; + if (errorMessage === void 0) { errorMessage = "message event not found."; } + var _this = this; + var trueProto = _newTarget.prototype; + _this = _super.call(this, errorMessage) || this; + _this.methodName = invocationMessage.target; + _this.invocationMessage = invocationMessage; + // Workaround issue in Typescript compiler + // https://github.com/Microsoft/TypeScript/issues/13965#issuecomment-278570200 + _this.__proto__ = trueProto; + return _this; + } + return EventNotFoundError; +}(Error)); +export { EventNotFoundError }; diff --git a/miniprogram_npm/signalr-for-wx/HandshakeProtocol.js b/miniprogram_npm/signalr-for-wx/HandshakeProtocol.js new file mode 100644 index 0000000..1ec667c --- /dev/null +++ b/miniprogram_npm/signalr-for-wx/HandshakeProtocol.js @@ -0,0 +1,67 @@ +// 版权所有(c).NET基金会。保留所有权利。 +// 在2.0版Apache许可下授权。有关许可证信息,请参见项目根目录中的License.txt。 +import { TextMessageFormat } from "./TextMessageFormat"; +import { isArrayBuffer } from "./Utils"; +/** + * 握手协议 + * @private + */ +var HandshakeProtocol = /** @class */ (function () { + function HandshakeProtocol() { + } + // Handshake request is always JSON - 握手请求总是JSON + HandshakeProtocol.prototype.writeHandshakeRequest = function (handshakeRequest) { + // commond + return TextMessageFormat.write(JSON.stringify(handshakeRequest)); + }; + /** + * 解析握手协议 response + * + * @param {*} data + * @returns {[any, HandshakeResponseMessage]} + * @memberof HandshakeProtocol + */ + HandshakeProtocol.prototype.parseHandshakeResponse = function (data) { + var responseMessage; + var messageData; + var remainingData; + // ! 删除了 @aspnet/signlaR 原有的 Buffer(仅适用 nodejs)判断 + if (isArrayBuffer(data)) { + // Format is binary but still need to read JSON text from handshake response - fy: 格式是二进制的,但仍然需要从握手响应中读取JSON文本 + var binaryData = new Uint8Array(data); + var separatorIndex = binaryData.indexOf(TextMessageFormat.RecordSeparatorCode); + if (separatorIndex === -1) { + throw new Error("Message is incomplete."); + } + // content before separator is handshake response - fy:分隔符前的内容是握手响应 + // optional content after is additional messages - fy:后面是附加消息的可选内容 + var responseLength = separatorIndex + 1; + messageData = String.fromCharCode.apply(null, binaryData.slice(0, responseLength)); + remainingData = (binaryData.byteLength > responseLength) ? binaryData.slice(responseLength).buffer : null; + } + else { + var textData = data; + var separatorIndex = textData.indexOf(TextMessageFormat.RecordSeparator); + if (separatorIndex === -1) { + throw new Error("Message is incomplete."); + } + // content before separator is handshake response - fy:分隔符前的内容是握手响应 + // optional content after is additional messages - fy:后面是附加消息的可选内容 + var responseLength = separatorIndex + 1; + messageData = textData.substring(0, responseLength); + remainingData = (textData.length > responseLength) ? textData.substring(responseLength) : null; + } + // At this point we should have just the single handshake message - fy: 在这一点上,我们应该只有一个握手信息 + var messages = TextMessageFormat.parse(messageData); + var response = JSON.parse(messages[0]); + if (response.type) { + throw new Error("Expected a handshake response from the server. -(fy: 需要来自服务器的握手响应)"); + } + responseMessage = response; + // multiple messages could have arrived with handshake - fy: 握手时可能会收到多条消息 + // return additional data to be parsed as usual, or null if all parsed - fy: 返回要像往常一样分析的其他数据,如果所有数据都已分析,则返回null + return [remainingData, responseMessage]; + }; + return HandshakeProtocol; +}()); +export { HandshakeProtocol }; diff --git a/miniprogram_npm/signalr-for-wx/HttpConnection.js b/miniprogram_npm/signalr-for-wx/HttpConnection.js new file mode 100644 index 0000000..db4235a --- /dev/null +++ b/miniprogram_npm/signalr-for-wx/HttpConnection.js @@ -0,0 +1,479 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __generator = (this && this.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (_) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; +import { LogLevel } from "./ILogger"; +import { HttpTransportType, TransferFormat } from "./ITransport"; +import { LongPollingTransport } from "./LongPollingTransport"; +import { Arg, createLogger } from "./Utils"; +import DefaultRequest from "./DefualtRequest"; +import { ResponseType } from "./wx-request/model/ResponseType"; +import { WxSocketTransport } from "./WxSocketTransport"; +var MAX_REDIRECTS = 100; +var WxSocketModule = WxSocketTransport; +var LongPollingModule = LongPollingTransport; +/** @private */ +var HttpConnection = /** @class */ (function () { + function HttpConnection(url, options) { + if (options === void 0) { options = {}; } + this.features = {}; + Arg.isRequired(url, "url"); + this.logger = createLogger(options.logger); + options = options || {}; + // ! 这里修改为自定义解析 和 默认传入 全路径方式 + this.baseUrl = options.resolveUrl ? options.resolveUrl(url) : this.resolveUrl(url); + options.logMessageContent = options.logMessageContent || false; + // ! 修改 options 参数赋值方式 + if (!options.WxSocket && wx) { + options.WxSocket = WxSocketModule; + } + if (!options.LongPolling) { + options.LongPolling = LongPollingModule; + } + this.request = options.request || new DefaultRequest({}, this.logger); + this.connectionState = 2 /* Disconnected */; + this.options = options; + this.onreceive = null; + this.onclose = null; + } + HttpConnection.prototype.start = function (transferFormat) { + transferFormat = transferFormat || TransferFormat.Binary; + Arg.isIn(transferFormat, TransferFormat, "transferFormat"); + this.logger.log(LogLevel.Debug, "Starting connection with transfer format '" + TransferFormat[transferFormat] + "'.", TransferFormat); + if (this.connectionState !== 2 /* Disconnected */) { + return Promise.reject(new Error("Cannot start a connection that is not in the 'Disconnected' state. state is " + this.connectionState)); + } + this.connectionState = 0 /* Connecting */; + this.startPromise = this.startInternal(transferFormat); + return this.startPromise; + }; + HttpConnection.prototype.send = function (data) { + if (this.connectionState !== 1 /* Connected */) { + throw new Error("Cannot send data if the connection is not in the 'Connected' State."); + } + // Transport will not be null if state is connected + return this.transport.send(data); + }; + HttpConnection.prototype.stop = function (error) { + return __awaiter(this, void 0, void 0, function () { + var e_1; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + this.connectionState = 2 /* Disconnected */; + // Set error as soon as possible otherwise there is a race between + // the transport closing and providing an error and the error from a close message + // We would prefer the close message error. + this.stopError = error; + _a.label = 1; + case 1: + _a.trys.push([1, 3, , 4]); + return [4 /*yield*/, this.startPromise]; + case 2: + _a.sent(); + return [3 /*break*/, 4]; + case 3: + e_1 = _a.sent(); + return [3 /*break*/, 4]; + case 4: + if (!this.transport) return [3 /*break*/, 6]; + return [4 /*yield*/, this.transport.stop()]; + case 5: + _a.sent(); + this.transport = undefined; + _a.label = 6; + case 6: return [2 /*return*/]; + } + }); + }); + }; + HttpConnection.prototype.startInternal = function (transferFormat) { + return __awaiter(this, void 0, void 0, function () { + var url, negotiateResponse, redirects, _loop_1, this_1, state_1, e_2; + var _this = this; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + url = this.baseUrl; + this.accessTokenFactory = this.options.accessTokenFactory; + this.socketUrlFactory = this.options.socketUrlFactory; + _a.label = 1; + case 1: + _a.trys.push([1, 12, , 13]); + if (!this.options.skipNegotiation) return [3 /*break*/, 5]; + if (!(this.options.transport === HttpTransportType.WebSockets)) return [3 /*break*/, 3]; + // No need to add a connection ID in this case + this.transport = this.constructTransport(HttpTransportType.WebSockets); + // We should just call connect directly in this case. + // No fallback or negotiate in this case. + return [4 /*yield*/, this.transport.connect({ + url: url, + header: {}, + protocols: [], + tcpNoDelay: true, + transferFormat: transferFormat + })]; + case 2: + // We should just call connect directly in this case. + // No fallback or negotiate in this case. + _a.sent(); + return [3 /*break*/, 4]; + case 3: throw Error("Negotiation can only be skipped when using the WxSocket transport directly."); + case 4: return [3 /*break*/, 11]; + case 5: + negotiateResponse = null; + redirects = 0; + _loop_1 = function () { + var accessToken_1; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, this_1.getNegotiationResponse(url)]; + case 1: + negotiateResponse = _a.sent(); + // the user tries to stop the connection when it is being started + if (this_1.connectionState === 2 /* Disconnected */) { + return [2 /*return*/, { value: void 0 }]; + } + if (negotiateResponse.error) { + throw Error(negotiateResponse.error); + } + if (negotiateResponse.ProtocolVersion) { + throw Error("检测到尝试连接到一个 非 ASP.NET Core 服务器。此客户端仅支持连接到ASP.NET Core 服务器。. See https://aka.ms/signalr-core-differences for details."); + } + if (negotiateResponse.url) { + url = negotiateResponse.url; + } + if (negotiateResponse.accessToken) { + accessToken_1 = negotiateResponse.accessToken; + // ! 通过 /negotiate 接口返回的assessToken 仅支持 accessTokenFactory(),如果实现了 socketUrlFactory(),会忽略掉这个token + this_1.accessTokenFactory = function () { return accessToken_1; }; + } + redirects++; + return [2 /*return*/]; + } + }); + }; + this_1 = this; + _a.label = 6; + case 6: return [5 /*yield**/, _loop_1()]; + case 7: + state_1 = _a.sent(); + if (typeof state_1 === "object") + return [2 /*return*/, state_1.value]; + _a.label = 8; + case 8: + if (negotiateResponse.url && redirects < MAX_REDIRECTS) return [3 /*break*/, 6]; + _a.label = 9; + case 9: + if (redirects === MAX_REDIRECTS && negotiateResponse.url) { + throw Error("Negotiate redirection limit exceeded. -fy : 超出协商重定向限制"); + } + return [4 /*yield*/, this.createTransport(url, this.options.transport, negotiateResponse, transferFormat)]; + case 10: + _a.sent(); + _a.label = 11; + case 11: + if (this.transport instanceof LongPollingTransport) { + this.features.inherentKeepAlive = true; + } + this.transport.onreceive = this.onreceive; + this.transport.onclose = function (e) { return _this.stopConnection(e); }; + // only change the state if we were connecting to not overwrite + // the state if the connection is already marked as Disconnected + this.changeState(0 /* Connecting */, 1 /* Connected */); + return [2 /*return*/]; + case 12: + e_2 = _a.sent(); + this.logger.log(LogLevel.Error, "Failed to start the connection: ", e_2); + this.connectionState = 2 /* Disconnected */; + this.transport = undefined; + throw e_2; + case 13: return [2 /*return*/]; + } + }); + }); + }; + HttpConnection.prototype.getNegotiationResponse = function (url) { + return __awaiter(this, void 0, void 0, function () { + var headers, token, negotiateUrl, response, e_3; + var _a; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + if (!this.accessTokenFactory) return [3 /*break*/, 2]; + return [4 /*yield*/, this.accessTokenFactory()]; + case 1: + token = _b.sent(); + if (token) { + headers = (_a = {}, + _a["Authorization"] = "Bearer " + token, + _a); + } + _b.label = 2; + case 2: + negotiateUrl = this.resolveNegotiateUrl(url); + this.logger.log(LogLevel.Debug, "Sending negotiation request: " + negotiateUrl + "."); + _b.label = 3; + case 3: + _b.trys.push([3, 5, , 6]); + return [4 /*yield*/, this.request.post(negotiateUrl, {}, { + headers: headers, + responseType: ResponseType.TEXT + })]; + case 4: + response = _b.sent(); + if (response.statusCode !== 200) { + throw Error("Unexpected status code returned from negotiate " + response.statusCode); + } + return [2 /*return*/, JSON.parse(response.data)]; + case 5: + e_3 = _b.sent(); + this.logger.log(LogLevel.Error, "Failed to complete negotiation with the server: ", e_3); + throw e_3; + case 6: return [2 /*return*/]; + } + }); + }); + }; + HttpConnection.prototype.createConnectUrl = function (url, connectionId) { + if (!connectionId) { + return url; + } + return url + (url.indexOf("?") === -1 ? "?" : "&") + ("id=" + connectionId); + }; + HttpConnection.prototype.createTransport = function (url, requestedTransport, negotiateResponse, requestedTransferFormat) { + return __awaiter(this, void 0, void 0, function () { + var connectUrl, transports, _i, transports_1, endpoint, transport, ex_1; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + connectUrl = this.createConnectUrl(url, negotiateResponse.connectionId); + if (!this.isITransport(requestedTransport)) return [3 /*break*/, 2]; + this.logger.log(LogLevel.Debug, "Connection was provided an instance of ITransport, using that directly."); + this.transport = requestedTransport; + return [4 /*yield*/, this.transport.connect({ + url: connectUrl, + transferFormat: requestedTransferFormat + })]; + case 1: + _a.sent(); + // only change the state if we were connecting to not overwrite + // the state if the connection is already marked as Disconnected + this.changeState(0 /* Connecting */, 1 /* Connected */); + return [2 /*return*/]; + case 2: + transports = negotiateResponse.availableTransports || []; + _i = 0, transports_1 = transports; + _a.label = 3; + case 3: + if (!(_i < transports_1.length)) return [3 /*break*/, 9]; + endpoint = transports_1[_i]; + this.connectionState = 0 /* Connecting */; + transport = this.resolveTransport(endpoint, requestedTransport, requestedTransferFormat); + if (!(typeof transport === "number")) return [3 /*break*/, 8]; + this.transport = this.constructTransport(transport); + if (!!negotiateResponse.connectionId) return [3 /*break*/, 5]; + return [4 /*yield*/, this.getNegotiationResponse(url)]; + case 4: + negotiateResponse = _a.sent(); + connectUrl = this.createConnectUrl(url, negotiateResponse.connectionId); + _a.label = 5; + case 5: + _a.trys.push([5, 7, , 8]); + return [4 /*yield*/, this.transport.connect({ + url: connectUrl, + transferFormat: requestedTransferFormat + })]; + case 6: + _a.sent(); + this.changeState(0 /* Connecting */, 1 /* Connected */); + return [2 /*return*/]; + case 7: + ex_1 = _a.sent(); + this.logger.log(LogLevel.Error, "Failed to start the transport '" + HttpTransportType[transport] + "':", ex_1); + this.connectionState = 2 /* Disconnected */; + negotiateResponse.connectionId = undefined; + return [3 /*break*/, 8]; + case 8: + _i++; + return [3 /*break*/, 3]; + case 9: throw new Error("Unable to initialize any of the available transports."); + } + }); + }); + }; + /** + * + * @description 这里对原来的实例化方式进行了改写,如果传入的是实例化完成的 Transport ,将直接返回 + * 如果是传入继承 Transport的 class,将执行 new Transport(options) + * - 这里对原生的多项入参合并成了options(这点差异需要注意) + * @private + * @param {HttpTransportType} transport + * @returns + * @memberof HttpConnection + */ + HttpConnection.prototype.constructTransport = function (transport) { + var _a = this.options, WxSocket = _a.WxSocket, LongPolling = _a.LongPolling, wxSocketTransportOptions = _a.wxSocketTransportOptions, longPollingTransportOptions = _a.longPollingTransportOptions; + switch (transport) { + case HttpTransportType.WebSockets: // wx socket 方式 + if (WxSocket instanceof WxSocketTransport) { + return WxSocket; + } + else { + return new WxSocket(wxSocketTransportOptions + ? wxSocketTransportOptions + : { + // token 工厂 + accessTokenFactory: this.accessTokenFactory, + // socket 单独实现一个socket url factory(用于后端改了 accecc_token 参数名的场景) + socketUrlFactory: this.socketUrlFactory, + // logger + logger: this.logger, + logMessageContent: this.options.logMessageContent || false, + /** 是否允许替换socket连接 + * + * 小程序 版本 < 1.7.0 时, 最多允许存在一个socket连接, 此参数用于是否允许在这个情况下,替换这个打开的socket + */ + allowReplaceSocket: true, + /** 是否启用消息队列缓存连接建立前消息,并在建立连接后发送 */ + enableMessageQueue: this.options.enableMessageQueue == undefined ? true : this.options.enableMessageQueue, + /** 重连设置 */ + reconnect: { + enable: true, + max: 3 + } + }); + } + case HttpTransportType.LongPolling: // 长轮询方式 + if (LongPolling instanceof LongPollingTransport) { + return LongPolling; + } + else { + return new LongPolling(longPollingTransportOptions + ? longPollingTransportOptions + : { + request: this.request, + accessTokenFactory: this.accessTokenFactory, + logger: this.logger, + logMessageContent: this.options.logMessageContent || false + }); + } + default: + throw new Error("Unknown transport: " + transport + "."); + } + }; + HttpConnection.prototype.resolveTransport = function (endpoint, requestedTransport, requestedTransferFormat) { + var transport = HttpTransportType[endpoint.transport]; + if (transport === null || transport === undefined) { + this.logger.log(LogLevel.Debug, "Skipping transport '" + endpoint.transport + "' because it is not supported by this client."); + } + else { + var transferFormats = endpoint.transferFormats.map(function (s) { return TransferFormat[s]; }); + if (transportMatches(requestedTransport, transport)) { + if (transferFormats.indexOf(requestedTransferFormat) >= 0) { + if (transport === HttpTransportType.WebSockets && !this.options.WxSocket) { + this.logger.log(LogLevel.Debug, "Skipping transport '" + HttpTransportType[transport] + "' because it is not supported in your environment.'"); + } + else { + this.logger.log(LogLevel.Debug, "Selecting transport '" + HttpTransportType[transport] + "'."); + return transport; + } + } + else { + this.logger.log(LogLevel.Debug, "Skipping transport '" + HttpTransportType[transport] + "' because it does not support the requested transfer format '" + TransferFormat[requestedTransferFormat] + "'."); + } + } + else { + this.logger.log(LogLevel.Debug, "Skipping transport '" + HttpTransportType[transport] + "' because it was disabled by the client."); + } + } + return null; + }; + HttpConnection.prototype.isITransport = function (transport) { + return transport && typeof transport === "object" && "connect" in transport; + }; + HttpConnection.prototype.changeState = function (from, to) { + if (this.connectionState === from) { + this.connectionState = to; + return true; + } + return false; + }; + HttpConnection.prototype.stopConnection = function (error) { + this.transport = undefined; + // If we have a stopError, it takes precedence over the error from the transport + error = this.stopError || error; + if (error) { + this.logger.log(LogLevel.Error, "Connection disconnected with error '" + error + "'."); + } + else { + this.logger.log(LogLevel.Information, "Connection disconnected."); + } + this.connectionState = 2 /* Disconnected */; + if (this.onclose) { + this.onclose(error); + } + }; + /** + * ! 由于小程序内必须指定 BaseUrl 关系,这里如果不是全路径的话,暂时直接抛出异常 + * @param url + */ + HttpConnection.prototype.resolveUrl = function (url) { + // startsWith is not supported in IE + if (url.lastIndexOf("https://", 0) === 0 || url.lastIndexOf("http://", 0) === 0) { + return url; + } + else { + throw new Error("HttpConnection. \u89E3\u6790url\u9519\u8BEF,\u5C0F\u7A0B\u5E8F\u5185\u9700\u8981\u4F20\u5165\u5168\u8DEF\u5F84 ->link: " + url); + } + }; + HttpConnection.prototype.resolveNegotiateUrl = function (url) { + var index = url.indexOf("?"); + var negotiateUrl = url.substring(0, index === -1 ? url.length : index); + if (negotiateUrl[negotiateUrl.length - 1] !== "/") { + negotiateUrl += "/"; + } + negotiateUrl += "negotiate"; + negotiateUrl += index === -1 ? "" : url.substring(index); + return negotiateUrl; + }; + return HttpConnection; +}()); +export { HttpConnection }; +function transportMatches(requestedTransport, actualTransport) { + return !requestedTransport || (actualTransport & requestedTransport) !== 0; +} diff --git a/miniprogram_npm/signalr-for-wx/HubConnection.js b/miniprogram_npm/signalr-for-wx/HubConnection.js new file mode 100644 index 0000000..2b56bbb --- /dev/null +++ b/miniprogram_npm/signalr-for-wx/HubConnection.js @@ -0,0 +1,546 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __generator = (this && this.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (_) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; +import { HandshakeProtocol } from "./HandshakeProtocol"; +import { MessageType } from "./IHubProtocol"; +import { LogLevel } from "./ILogger"; +import { Arg, Subject } from "./Utils"; +import { EventNotFoundError } from "./Errors"; +var DEFAULT_TIMEOUT_IN_MS = 30 * 1000; +var DEFAULT_PING_INTERVAL_IN_MS = 15 * 1000; +/** Describes the current state of the {@link HubConnection} to the server. */ +export var HubConnectionState; +(function (HubConnectionState) { + /** The hub connection is disconnected. */ + HubConnectionState[HubConnectionState["Disconnected"] = 0] = "Disconnected"; + /** The hub connection is connected. */ + HubConnectionState[HubConnectionState["Connected"] = 1] = "Connected"; +})(HubConnectionState || (HubConnectionState = {})); +/** Represents a connection to a SignalR Hub. */ +var HubConnection = /** @class */ (function () { + function HubConnection(connection, logger, protocol) { + var _this = this; + Arg.isRequired(connection, "connection"); + Arg.isRequired(logger, "logger"); + Arg.isRequired(protocol, "protocol"); + this.serverTimeoutInMilliseconds = DEFAULT_TIMEOUT_IN_MS; + this.keepAliveIntervalInMilliseconds = DEFAULT_PING_INTERVAL_IN_MS; + this.logger = logger; + this.protocol = protocol; + this.connection = connection; + this.handshakeProtocol = new HandshakeProtocol(); + this.connection.onreceive = function (data) { return _this.processIncomingData(data); }; + this.connection.onclose = function (error) { return _this.connectionClosed(error); }; + this.callbacks = {}; + this.methods = {}; + this.closedCallbacks = []; + this.id = 0; + this.receivedHandshakeResponse = false; + this.connectionState = HubConnectionState.Disconnected; + this.cachedPingMessage = this.protocol.writeMessage({ type: MessageType.Ping }); + } + /** @internal */ + // Using a public static factory method means we can have a private constructor and an _internal_ + // create method that can be used by HubConnectionBuilder. An "internal" constructor would just + // be stripped away and the '.d.ts' file would have no constructor, which is interpreted as a + // public parameter-less constructor. + HubConnection.create = function (connection, logger, protocol) { + return new HubConnection(connection, logger, protocol); + }; + Object.defineProperty(HubConnection.prototype, "state", { + /** Indicates the state of the {@link HubConnection} to the server. */ + get: function () { + return this.connectionState; + }, + enumerable: true, + configurable: true + }); + /** Starts the connection. + * + * @returns {Promise} A Promise that resolves when the connection has been successfully established, or rejects with an error. + */ + HubConnection.prototype.start = function () { + return __awaiter(this, void 0, void 0, function () { + var handshakeRequest, handshakePromise; + var _this = this; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + handshakeRequest = { + protocol: this.protocol.name, + version: this.protocol.version + }; + this.logger.log(LogLevel.Debug, "Starting HubConnection."); + this.receivedHandshakeResponse = false; + handshakePromise = new Promise(function (resolve, reject) { + _this.handshakeResolver = resolve; + _this.handshakeRejecter = reject; + }); + return [4 /*yield*/, this.connection.start(this.protocol.transferFormat)]; + case 1: + _a.sent(); + this.logger.log(LogLevel.Debug, "Sending handshake request."); + return [4 /*yield*/, this.sendMessage(this.handshakeProtocol.writeHandshakeRequest(handshakeRequest))]; + case 2: + _a.sent(); + this.logger.log(LogLevel.Information, "Using HubProtocol '" + this.protocol.name + "'.", this.protocol); + // defensively cleanup timeout in case we receive a message from the server before we finish start + this.cleanupTimeout(); + this.resetTimeoutPeriod(); + this.resetKeepAliveInterval(); + // Wait for the handshake to complete before marking connection as connected + return [4 /*yield*/, handshakePromise]; + case 3: + // Wait for the handshake to complete before marking connection as connected + _a.sent(); + this.connectionState = HubConnectionState.Connected; + return [2 /*return*/]; + } + }); + }); + }; + /** Stops the connection. + * + * @returns {Promise} A Promise that resolves when the connection has been successfully terminated, or rejects with an error. + */ + HubConnection.prototype.stop = function () { + this.logger.log(LogLevel.Debug, "Stopping HubConnection."); + this.cleanupTimeout(); + this.cleanupPingTimer(); + return this.connection.stop(); + }; + /** Invokes a streaming hub method on the server using the specified name and arguments. + * + * @typeparam T The type of the items returned by the server. + * @param {string} methodName The name of the server method to invoke. + * @param {any[]} args The arguments used to invoke the server method. + * @returns {IStreamResult} An object that yields results from the server as they are received. + */ + HubConnection.prototype.stream = function (methodName) { + var _this = this; + var args = []; + for (var _i = 1; _i < arguments.length; _i++) { + args[_i - 1] = arguments[_i]; + } + var invocationDescriptor = this.createStreamInvocation(methodName, args); + var subject = new Subject(function () { + var cancelInvocation = _this.createCancelInvocation(invocationDescriptor.invocationId); + var cancelMessage = _this.protocol.writeMessage(cancelInvocation); + delete _this.callbacks[invocationDescriptor.invocationId]; + return _this.sendMessage(cancelMessage); + }); + this.callbacks[invocationDescriptor.invocationId] = function (invocationEvent, error) { + if (error) { + subject.error(error); + return; + } + else if (invocationEvent) { + // invocationEvent will not be null when an error is not passed to the callback + if (invocationEvent.type === MessageType.Completion) { + if (invocationEvent.error) { + subject.error(new Error(invocationEvent.error)); + } + else { + subject.complete(); + } + } + else { + subject.next(invocationEvent.item); + } + } + }; + var message = this.protocol.writeMessage(invocationDescriptor); + this.sendMessage(message).catch(function (e) { + subject.error(e); + delete _this.callbacks[invocationDescriptor.invocationId]; + }); + return subject; + }; + HubConnection.prototype.sendMessage = function (message) { + this.resetKeepAliveInterval(); + return this.connection.send(message); + }; + /** Invokes a hub method on the server using the specified name and arguments. Does not wait for a response from the receiver. + * + * The Promise returned by this method resolves when the client has sent the invocation to the server. The server may still + * be processing the invocation. + * + * @param {string} methodName The name of the server method to invoke. + * @param {any[]} args The arguments used to invoke the server method. + * @returns {Promise} A Promise that resolves when the invocation has been successfully sent, or rejects with an error. + */ + HubConnection.prototype.send = function (methodName) { + var args = []; + for (var _i = 1; _i < arguments.length; _i++) { + args[_i - 1] = arguments[_i]; + } + var invocationDescriptor = this.createInvocation(methodName, args, true); + var message = this.protocol.writeMessage(invocationDescriptor); + return this.sendMessage(message); + }; + /** Invokes a hub method on the server using the specified name and arguments. + * + * The Promise returned by this method resolves when the server indicates it has finished invoking the method. When the promise + * resolves, the server has finished invoking the method. If the server method returns a result, it is produced as the result of + * resolving the Promise. + * + * @typeparam T The expected return type. + * @param {string} methodName The name of the server method to invoke. + * @param {any[]} args The arguments used to invoke the server method. + * @returns {Promise} A Promise that resolves with the result of the server method (if any), or rejects with an error. + */ + HubConnection.prototype.invoke = function (methodName) { + var _this = this; + var args = []; + for (var _i = 1; _i < arguments.length; _i++) { + args[_i - 1] = arguments[_i]; + } + var invocationDescriptor = this.createInvocation(methodName, args, false); + var p = new Promise(function (resolve, reject) { + // invocationId will always have a value for a non-blocking invocation + _this.callbacks[invocationDescriptor.invocationId] = function (invocationEvent, error) { + if (error) { + reject(error); + return; + } + else if (invocationEvent) { + // invocationEvent will not be null when an error is not passed to the callback + if (invocationEvent.type === MessageType.Completion) { + if (invocationEvent.error) { + reject(new Error(invocationEvent.error)); + } + else { + resolve(invocationEvent.result); + } + } + else { + reject(new Error("Unexpected message type: " + invocationEvent.type)); + } + } + }; + var message = _this.protocol.writeMessage(invocationDescriptor); + _this.sendMessage(message).catch(function (e) { + reject(e); + // invocationId will always have a value for a non-blocking invocation + delete _this.callbacks[invocationDescriptor.invocationId]; + }); + }); + return p; + }; + HubConnection.prototype.on = function (methodName, newMethod, only) { + if (!methodName || !newMethod) { + return; + } + methodName = methodName.toLowerCase(); + if (only) { + this.methods[methodName] = [newMethod]; + return; + } + if (!this.methods[methodName]) { + this.methods[methodName] = []; + } + // Preventing adding the same handler multiple times. + if (this.methods[methodName].indexOf(newMethod) !== -1) { + return; + } + this.methods[methodName].push(newMethod); + }; + HubConnection.prototype.off = function (methodName, method) { + if (!methodName) { + return; + } + methodName = methodName.toLowerCase(); + var handlers = this.methods[methodName]; + if (!handlers) { + return; + } + if (method) { + var removeIdx = handlers.indexOf(method); + if (removeIdx !== -1) { + handlers.splice(removeIdx, 1); + if (handlers.length === 0) { + delete this.methods[methodName]; + } + } + } + else { + delete this.methods[methodName]; + } + }; + /** Registers a handler that will be invoked when the connection is closed. + * + * @param {Function} callback The handler that will be invoked when the connection is closed. Optionally receives a single argument containing the error that caused the connection to close (if any). + */ + HubConnection.prototype.onclose = function (callback) { + if (callback) { + this.closedCallbacks.push(callback); + } + }; + HubConnection.prototype.onEventNotFound = function (callback) { + if (callback) { + this.eventNotFoundCallback = callback; + } + }; + HubConnection.prototype.processIncomingData = function (data) { + this.cleanupTimeout(); + if (!this.receivedHandshakeResponse) { + data = this.processHandshakeResponse(data); + this.receivedHandshakeResponse = true; + } + // Data may have all been read when processing handshake response + if (data) { + // Parse the messages + var messages = this.protocol.parseMessages(data, this.logger); + for (var _i = 0, messages_1 = messages; _i < messages_1.length; _i++) { + var message = messages_1[_i]; + switch (message.type) { + case MessageType.Invocation: + this.invokeClientMethod(message); + break; + case MessageType.StreamItem: + case MessageType.Completion: + var callback = this.callbacks[message.invocationId]; + if (callback != null) { + if (message.type === MessageType.Completion) { + delete this.callbacks[message.invocationId]; + } + callback(message); + } + break; + case MessageType.Ping: + // Don't care about pings + break; + case MessageType.Close: + this.logger.log(LogLevel.Information, "Close message received from server."); + // We don't want to wait on the stop itself. + // tslint:disable-next-line:no-floating-promises + this.connection.stop(message.error ? new Error("Server returned an error on close: " + message.error) : undefined); + break; + default: + this.logger.log(LogLevel.Warning, "Invalid message type: " + message.type + ".", message); + break; + } + } + } + this.resetTimeoutPeriod(); + }; + HubConnection.prototype.processHandshakeResponse = function (data) { + var _a; + var responseMessage; + var remainingData; + try { + _a = this.handshakeProtocol.parseHandshakeResponse(data), remainingData = _a[0], responseMessage = _a[1]; + } + catch (e) { + var message = "Error parsing handshake response: " + e; + this.logger.log(LogLevel.Error, message); + var error = new Error(message); + // We don't want to wait on the stop itself. + // tslint:disable-next-line:no-floating-promises + this.connection.stop(error); + this.handshakeRejecter(error); + throw error; + } + if (responseMessage.error) { + var message = "Server returned handshake error: " + responseMessage.error; + this.logger.log(LogLevel.Error, message); + this.handshakeRejecter(message); + // We don't want to wait on the stop itself. + // tslint:disable-next-line:no-floating-promises + this.connection.stop(new Error(message)); + throw new Error(message); + } + else { + this.logger.log(LogLevel.Debug, "Server handshake complete."); + } + this.handshakeResolver(); + return remainingData; + }; + HubConnection.prototype.resetKeepAliveInterval = function () { + var _this = this; + this.cleanupPingTimer(); + this.pingServerHandle = setTimeout(function () { return __awaiter(_this, void 0, void 0, function () { + var _a; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + if (!(this.connectionState === HubConnectionState.Connected)) return [3 /*break*/, 4]; + _b.label = 1; + case 1: + _b.trys.push([1, 3, , 4]); + return [4 /*yield*/, this.sendMessage(this.cachedPingMessage)]; + case 2: + _b.sent(); + return [3 /*break*/, 4]; + case 3: + _a = _b.sent(); + // We don't care about the error. It should be seen elsewhere in the client. + // The connection is probably in a bad or closed state now, cleanup the timer so it stops triggering + this.cleanupPingTimer(); + return [3 /*break*/, 4]; + case 4: return [2 /*return*/]; + } + }); + }); }, this.keepAliveIntervalInMilliseconds); + }; + HubConnection.prototype.resetTimeoutPeriod = function () { + var _this = this; + if (!this.connection.features || !this.connection.features.inherentKeepAlive) { + // Set the timeout timer + this.timeoutHandle = setTimeout(function () { return _this.serverTimeout(); }, this.serverTimeoutInMilliseconds); + } + }; + HubConnection.prototype.serverTimeout = function () { + // The server hasn't talked to us in a while. It doesn't like us anymore ... :( + // Terminate the connection, but we don't need to wait on the promise. + // tslint:disable-next-line:no-floating-promises + this.connection.stop(new Error("Server timeout elapsed without receiving a message from the server.")); + }; + HubConnection.prototype.invokeClientMethod = function (invocationMessage) { + var _this = this; + var methods = this.methods[invocationMessage.target.toLowerCase()]; + if (methods) { + try { + // Time:2020年1月1日 22:30:30 增加一个 try cache, 获取 signalr 在特定场景下,处理事件失败会关闭问题. + methods.forEach(function (m) { return m.apply(_this, invocationMessage.arguments); }); + } + catch (error) { + console.error(error); + } + if (invocationMessage.invocationId) { + // This is not supported in v1. So we return an error to avoid blocking the server waiting for the response. + var message = "Server requested a response, which is not supported in this version of the client."; + this.logger.log(LogLevel.Error, message); + // We don't need to wait on this Promise. + // tslint:disable-next-line:no-floating-promises + this.connection.stop(new Error(message)); + } + } + else { + var message = "No client method with the name '" + invocationMessage.target + "' found."; + this.logger.log(LogLevel.Warning, message); + this.logger.log(LogLevel.Information, "Current Event Methods:" + Object.keys(this.methods)); + this.eventNotFound(new EventNotFoundError(invocationMessage, message)); + } + }; + HubConnection.prototype.connectionClosed = function (error) { + var _this = this; + var callbacks = this.callbacks; + this.callbacks = {}; + this.connectionState = HubConnectionState.Disconnected; + // if handshake is in progress start will be waiting for the handshake promise, so we complete it + // if it has already completed this should just noop + if (this.handshakeRejecter) { + this.handshakeRejecter(error); + } + Object.keys(callbacks).forEach(function (key) { + var callback = callbacks[key]; + callback(null, error ? error : new Error("Invocation canceled due to connection being closed.")); + }); + this.cleanupTimeout(); + this.cleanupPingTimer(); + this.closedCallbacks.forEach(function (c) { return c.apply(_this, [error]); }); + }; + HubConnection.prototype.eventNotFound = function (error) { + return __awaiter(this, void 0, void 0, function () { + var r; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + if (!this.eventNotFoundCallback) return [3 /*break*/, 2]; + return [4 /*yield*/, this.eventNotFoundCallback(error)]; + case 1: + r = _a.sent(); + if (r === true) { + this.logger.log(LogLevel.Information, "retry invoke local message callback."); + this.invokeClientMethod(error.invocationMessage); + } + _a.label = 2; + case 2: return [2 /*return*/]; + } + }); + }); + }; + HubConnection.prototype.cleanupPingTimer = function () { + if (this.pingServerHandle) { + clearTimeout(this.pingServerHandle); + } + }; + HubConnection.prototype.cleanupTimeout = function () { + if (this.timeoutHandle) { + clearTimeout(this.timeoutHandle); + } + }; + HubConnection.prototype.createInvocation = function (methodName, args, nonblocking) { + if (nonblocking) { + return { + arguments: args, + target: methodName, + type: MessageType.Invocation + }; + } + else { + var id = this.id; + this.id++; + return { + arguments: args, + invocationId: id.toString(), + target: methodName, + type: MessageType.Invocation + }; + } + }; + HubConnection.prototype.createStreamInvocation = function (methodName, args) { + var id = this.id; + this.id++; + return { + arguments: args, + invocationId: id.toString(), + target: methodName, + type: MessageType.StreamInvocation + }; + }; + HubConnection.prototype.createCancelInvocation = function (id) { + return { + invocationId: id, + type: MessageType.CancelInvocation + }; + }; + return HubConnection; +}()); +export { HubConnection }; diff --git a/miniprogram_npm/signalr-for-wx/HubConnectionBuilder.js b/miniprogram_npm/signalr-for-wx/HubConnectionBuilder.js new file mode 100644 index 0000000..0406f21 --- /dev/null +++ b/miniprogram_npm/signalr-for-wx/HubConnectionBuilder.js @@ -0,0 +1,71 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +import { HttpConnection } from "./HttpConnection"; +import { HubConnection } from "./HubConnection"; +import { JsonHubProtocol } from "./JsonHubProtocol"; +import { NullLogger } from "./Loggers"; +import { Arg, ConsoleLogger } from "./Utils"; +/** A builder for configuring {@link @aspnet/signalr.HubConnection} instances. */ +var HubConnectionBuilder = /** @class */ (function () { + function HubConnectionBuilder() { + } + HubConnectionBuilder.prototype.configureLogging = function (logging) { + Arg.isRequired(logging, "logging"); + if (isLogger(logging)) { + this.logger = logging; + } + else { + this.logger = new ConsoleLogger(logging); + } + return this; + }; + HubConnectionBuilder.prototype.withUrl = function (url, transportTypeOrOptions) { + Arg.isRequired(url, "url"); + this.url = url; + // Flow-typing knows where it's at. Since HttpTransportType is a number and IHttpConnectionOptions is guaranteed + // to be an object, we know (as does TypeScript) this comparison is all we need to figure out which overload was called. + if (typeof transportTypeOrOptions === "object") { + this.httpConnectionOptions = transportTypeOrOptions; + } + else { + this.httpConnectionOptions = { + transport: transportTypeOrOptions, + }; + } + return this; + }; + /** Configures the {@link @aspnet/signalr.HubConnection} to use the specified Hub Protocol. + * + * @param {IHubProtocol} protocol The {@link @aspnet/signalr.IHubProtocol} implementation to use. + */ + HubConnectionBuilder.prototype.withHubProtocol = function (protocol) { + Arg.isRequired(protocol, "protocol"); + this.protocol = protocol; + return this; + }; + /** Creates a {@link @aspnet/signalr.HubConnection} from the configuration options specified in this builder. + * + * @returns {HubConnection} The configured {@link @aspnet/signalr.HubConnection}. + */ + HubConnectionBuilder.prototype.build = function () { + // If httpConnectionOptions has a logger, use it. Otherwise, override it with the one + // provided to configureLogger + var httpConnectionOptions = this.httpConnectionOptions || {}; + // If it's 'null', the user **explicitly** asked for null, don't mess with it. + if (httpConnectionOptions.logger === undefined) { + // If our logger is undefined or null, that's OK, the HttpConnection constructor will handle it. + httpConnectionOptions.logger = this.logger; + } + // Now create the connection + if (!this.url) { + throw new Error("The 'HubConnectionBuilder.withUrl' method must be called before building the connection."); + } + var connection = new HttpConnection(this.url, httpConnectionOptions); + return HubConnection.create(connection, this.logger || NullLogger.instance, this.protocol || new JsonHubProtocol()); + }; + return HubConnectionBuilder; +}()); +export { HubConnectionBuilder }; +function isLogger(logger) { + return logger.log !== undefined; +} diff --git a/miniprogram_npm/signalr-for-wx/IConnection.js b/miniprogram_npm/signalr-for-wx/IConnection.js new file mode 100644 index 0000000..95328c3 --- /dev/null +++ b/miniprogram_npm/signalr-for-wx/IConnection.js @@ -0,0 +1,2 @@ +// 版权所有(c).NET基金会。保留所有权利。 +// 在2.0版Apache许可下授权。有关许可证信息,请参见项目根目录中的License.txt。 diff --git a/miniprogram_npm/signalr-for-wx/IHttpConnectionOptions.js b/miniprogram_npm/signalr-for-wx/IHttpConnectionOptions.js new file mode 100644 index 0000000..95328c3 --- /dev/null +++ b/miniprogram_npm/signalr-for-wx/IHttpConnectionOptions.js @@ -0,0 +1,2 @@ +// 版权所有(c).NET基金会。保留所有权利。 +// 在2.0版Apache许可下授权。有关许可证信息,请参见项目根目录中的License.txt。 diff --git a/miniprogram_npm/signalr-for-wx/IHubProtocol.js b/miniprogram_npm/signalr-for-wx/IHubProtocol.js new file mode 100644 index 0000000..d04194b --- /dev/null +++ b/miniprogram_npm/signalr-for-wx/IHubProtocol.js @@ -0,0 +1,34 @@ +// 版权所有(c).NET基金会。保留所有权利。 +// 在2.0版Apache许可下授权。有关许可证信息,请参见项目根目录中的License.txt。 +/* 定义消息的类型[枚举] */ +export var MessageType; +(function (MessageType) { + /** + * - 指示消息是一个 `调用消息` 并实现 {@link @aspnet/signalr.InvocationMessage} 接口。 + */ + MessageType[MessageType["Invocation"] = 1] = "Invocation"; + /** + * - 指示消息是一个 `流消息` 并实现 {@link @aspnet/signalr.StreamItemMessage} 接口。 + */ + MessageType[MessageType["StreamItem"] = 2] = "StreamItem"; + /** + * - 指示消息是一个 `完成消息` 并实现 {@link @aspnet/signalr.CompletionMessage} 接口。 + */ + MessageType[MessageType["Completion"] = 3] = "Completion"; + /** + * - 指示消息是一个 `流调用消息` 并实现 {@link @aspnet/signalr.StreamInvocationMessage} 接口。 + */ + MessageType[MessageType["StreamInvocation"] = 4] = "StreamInvocation"; + /** + * - 指示消息是一个 `取消调用消息` 并实现 {@link @aspnet/signalr.CancelInvocationMessage} 接口。 + */ + MessageType[MessageType["CancelInvocation"] = 5] = "CancelInvocation"; + /** + * - 指示消息是一个 `Ping消息` 并实现 {@link @aspnet/signalr.PingMessage} 接口。 + */ + MessageType[MessageType["Ping"] = 6] = "Ping"; + /** + * - 指示消息是一个 `关闭消息` 并实现 {@link @aspnet/signalr.CloseMessage} 接口。 + */ + MessageType[MessageType["Close"] = 7] = "Close"; +})(MessageType || (MessageType = {})); diff --git a/miniprogram_npm/signalr-for-wx/ILogger.js b/miniprogram_npm/signalr-for-wx/ILogger.js new file mode 100644 index 0000000..67bdc07 --- /dev/null +++ b/miniprogram_npm/signalr-for-wx/ILogger.js @@ -0,0 +1,25 @@ +// 版权所有(c).NET基金会。保留所有权利。 +// 在2.0版Apache许可下授权。有关许可证信息,请参见项目根目录中的License.txt。 +//这些值被设计为与ASP.NET日志级别匹配,因为这是我们在这里模拟的模式。 +/** + * 指示日志消息的严重性。 + * 日志级别按严重性递增的顺序排列。所以“Debug”比“Trace”等更严重。 + * + */ +export var LogLevel; +(function (LogLevel) { + /** 极低严重性诊断消息的日志级别. */ + LogLevel[LogLevel["Trace"] = 0] = "Trace"; + /** 调试错误. */ + LogLevel[LogLevel["Debug"] = 1] = "Debug"; + /** 消息. */ + LogLevel[LogLevel["Information"] = 2] = "Information"; + /** 警告. */ + LogLevel[LogLevel["Warning"] = 3] = "Warning"; + /** 错误. */ + LogLevel[LogLevel["Error"] = 4] = "Error"; + /** 严重错误. */ + LogLevel[LogLevel["Critical"] = 5] = "Critical"; + /** 最高日志级别。在配置日志记录以指示不应发出日志消息时使用. */ + LogLevel[LogLevel["None"] = 6] = "None"; +})(LogLevel || (LogLevel = {})); diff --git a/miniprogram_npm/signalr-for-wx/ITransport.js b/miniprogram_npm/signalr-for-wx/ITransport.js new file mode 100644 index 0000000..606fed1 --- /dev/null +++ b/miniprogram_npm/signalr-for-wx/ITransport.js @@ -0,0 +1,21 @@ +// 版权所有(c).NET基金会。保留所有权利。 +// 在2.0版Apache许可下授权。有关许可证信息,请参见项目根目录中的License.txt。 +//这在将来会被当作一个位标志,所以我们使用两个值的幂来保持它。 +/**指定特定的HTTP传输类型。*/ +export var HttpTransportType; +(function (HttpTransportType) { + /**未指定传输首选项。*/ + HttpTransportType[HttpTransportType["None"] = 0] = "None"; + /**指定WebSocket传输。*/ + HttpTransportType[HttpTransportType["WebSockets"] = 1] = "WebSockets"; + /**指定长轮询传输。*/ + HttpTransportType[HttpTransportType["LongPolling"] = 4] = "LongPolling"; +})(HttpTransportType || (HttpTransportType = {})); +/**指定连接的传输格式。*/ +export var TransferFormat; +(function (TransferFormat) { + /**指定仅通过连接传输文本数据。*/ + TransferFormat[TransferFormat["Text"] = 1] = "Text"; + /**指定将通过连接传输二进制数据。*/ + TransferFormat[TransferFormat["Binary"] = 2] = "Binary"; +})(TransferFormat || (TransferFormat = {})); diff --git a/miniprogram_npm/signalr-for-wx/JsonHubProtocol.js b/miniprogram_npm/signalr-for-wx/JsonHubProtocol.js new file mode 100644 index 0000000..518aaae --- /dev/null +++ b/miniprogram_npm/signalr-for-wx/JsonHubProtocol.js @@ -0,0 +1,129 @@ +// 版权所有(c).NET基金会。保留所有权利。 +// 在2.0版Apache许可下授权。有关许可证信息,请参见项目根目录中的License.txt。 +import { MessageType } from "./IHubProtocol"; +import { LogLevel } from "./ILogger"; +import { TransferFormat } from "./ITransport"; +import { NullLogger } from "./Loggers"; +import { TextMessageFormat } from "./TextMessageFormat"; +var JSON_HUB_PROTOCOL_NAME = "json"; +/** Implements the JSON Hub Protocol. */ +var JsonHubProtocol = /** @class */ (function () { + function JsonHubProtocol() { + /** @inheritDoc */ + this.name = JSON_HUB_PROTOCOL_NAME; + /** @inheritDoc */ + this.version = 1; + /** @inheritDoc */ + this.transferFormat = TransferFormat.Text; + } + /** + * Creates an array of {@link @aspnet/signalr.HubMessage} objects from the specified serialized representation. + * 从指定的序列化表示创建{@link@aspnet/signaler.HubMessage}对象数组 + * + * @param {string} input 包含序列化表示的字符串 A string containing the serialized representation. + * @param {ILogger} logger + */ + JsonHubProtocol.prototype.parseMessages = function (input, logger) { + // 接口允许传入“ArrayBuffer”,但此实现不允许。所以让我们抛出一个有用的错误 + if (typeof input !== "string") { + throw new Error("Invalid input for JSON hub protocol. Expected a string. (fy:包含一个无效的JSON协议输入,但是这里需要输入string 消息)"); + } + // fixed + if (!input) { + return []; + } + // fixed + if (logger === null) { + logger = NullLogger.instance; + } + // string 类型消息格式化转换 + var messages = TextMessageFormat.parse(input); + var hubMessages = []; + for (var _i = 0, messages_1 = messages; _i < messages_1.length; _i++) { + var message = messages_1[_i]; + // 转换消息 + var parsedMessage = JSON.parse(message); + if (typeof parsedMessage.type !== "number") { + throw new Error("Invalid payload. (fy: 无效的消息)"); + } + switch (parsedMessage.type) { + case MessageType.Invocation: // 调用命令 + this.isInvocationMessage(parsedMessage); + break; + case MessageType.StreamItem: // 流消息 + this.isStreamItemMessage(parsedMessage); + break; + case MessageType.Completion: // 完成消息 + this.isCompletionMessage(parsedMessage); + break; + case MessageType.Ping: // ping 命令 + // Single value, no need to validate + break; + case MessageType.Close: // 关闭命令 + // All optional values, no need to validate + break; + default: // 未定义命令,抛出异常 + // Future protocol changes can add message types, old clients can ignore them + logger.log(LogLevel.Information, "Unknown message type '" + parsedMessage.type + "' ignored."); + continue; + } + hubMessages.push(parsedMessage); + } + return hubMessages; + }; + /** + * Writes the specified {@link @aspnet/signalr.HubMessage} to a string and returns it. + * 将指定的{@link@aspnet/signalr.HubMessage}写入字符串并返回 + * + * @param {HubMessage} message The message to write. 消息内容 + * @returns {string} 包含消息的序列化表示形式的字符串。 + */ + JsonHubProtocol.prototype.writeMessage = function (message) { + return TextMessageFormat.write(JSON.stringify(message)); + }; + /** + * 判断是否是一个正常的调用消息 + * @param message + */ + JsonHubProtocol.prototype.isInvocationMessage = function (message) { + this.assertNotEmptyString(message.target, "Invalid payload for Invocation message."); + if (message.invocationId !== undefined) { + this.assertNotEmptyString(message.invocationId, "Invalid payload for Invocation message. (fy:无效的 [调用] 消息)"); + } + }; + /** + * 判断是否是一个流消息子项 + * @param message + */ + JsonHubProtocol.prototype.isStreamItemMessage = function (message) { + this.assertNotEmptyString(message.invocationId, "Invalid payload for StreamItem message. (fy:无效的 [StreamItem] 消息)"); + if (message.item === undefined) { + throw new Error("Invalid payload for StreamItem message. (fy:无效的 [StreamItem] 消息)"); + } + }; + /** + * 判断是否是一个完整的消息 + * @param message + */ + JsonHubProtocol.prototype.isCompletionMessage = function (message) { + if (message.result && message.error) { + throw new Error("Invalid payload for Completion message (fy:消息不完整)."); + } + if (!message.result && message.error) { + this.assertNotEmptyString(message.error, "Invalid payload for Completion message (fy:消息不完整)."); + } + this.assertNotEmptyString(message.invocationId, "Invalid payload for Completion message (fy:消息不完整)."); + }; + /** + * 断言非空字符串 + * @param value + * @param errorMessage + */ + JsonHubProtocol.prototype.assertNotEmptyString = function (value, errorMessage) { + if (typeof value !== "string" || value === "") { + throw new Error(errorMessage); + } + }; + return JsonHubProtocol; +}()); +export { JsonHubProtocol }; diff --git a/miniprogram_npm/signalr-for-wx/Loggers.js b/miniprogram_npm/signalr-for-wx/Loggers.js new file mode 100644 index 0000000..59fc6f5 --- /dev/null +++ b/miniprogram_npm/signalr-for-wx/Loggers.js @@ -0,0 +1,17 @@ +// 版权所有(c).NET基金会。保留所有权利。 +// 在2.0版Apache许可下授权。有关许可证信息,请参见项目根目录中的License.txt。 +/** 未定义 logger 时使用的 空输出实现. */ +var NullLogger = /** @class */ (function () { + function NullLogger() { + } + NullLogger.prototype.log = function (logLevel) { + var msg = []; + for (var _i = 1; _i < arguments.length; _i++) { + msg[_i - 1] = arguments[_i]; + } + }; + /** The singleton instance of the {@link @aspnet/signalr.NullLogger}. */ + NullLogger.instance = new NullLogger(); + return NullLogger; +}()); +export { NullLogger }; diff --git a/miniprogram_npm/signalr-for-wx/LongPollingTransport.js b/miniprogram_npm/signalr-for-wx/LongPollingTransport.js new file mode 100644 index 0000000..c3adad2 --- /dev/null +++ b/miniprogram_npm/signalr-for-wx/LongPollingTransport.js @@ -0,0 +1,380 @@ +// 版权所有(c).NET基金会。保留所有权利。 +// 在2.0版Apache许可下授权。有关许可证信息,请参见项目根目录中的License.txt。 +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __generator = (this && this.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (_) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; +import { AbortController } from "./AbortController"; +import { HttpError, TimeoutError } from "./Errors"; +import { LogLevel } from "./ILogger"; +import { TransferFormat } from "./ITransport"; +import { Arg, getDataDetail, sendMessage } from "./Utils"; +import { ResponseType } from "./wx-request/model/ResponseType"; +import { NullLogger } from './Loggers'; +import DefaultRequest from "./DefualtRequest"; +// Not exported from 'index', this type is internal. +/** + * 长轮询 + * @private + */ +var LongPollingTransport = /** @class */ (function () { + /** + * 导出 request 工具 + * @param {Request} request + * @param {((() => string | Promise) | undefined)} accessTokenFactory access-token-factory + * @param {ILogger} logger + * @param {boolean} logMessageContent + * @memberof LongPollingTransport + */ + function LongPollingTransport(options) { + this.accessTokenFactory = options.accessTokenFactory ? options.accessTokenFactory : undefined; + this.logger = options.logger ? options.logger : new NullLogger(); + this.pollAbort = new AbortController(); + this.logMessageContent = options.logMessageContent ? options.logMessageContent : false; + this.request = options.request ? options.request : new DefaultRequest({}, this.logger); + this.running = false; + this.onreceive = null; + this.onclose = null; + } + Object.defineProperty(LongPollingTransport.prototype, "pollAborted", { + // This is an internal type, not exported from 'index' so this is really just internal. + get: function () { + return this.pollAbort.aborted; + }, + enumerable: true, + configurable: true + }); + /** + * 连接 - 这里理解为请求 + * + * @param {string} url + * @param {TransferFormat} transferFormat + * @returns {Promise} + * @memberof LongPollingTransport + */ + LongPollingTransport.prototype.connect = function (options) { + return __awaiter(this, void 0, void 0, function () { + var pollOptions, token, response; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + /* 验证参数完整性,不完整抛出异常 */ + Arg.isRequired(options, "options"); + Arg.isRequired(options.transferFormat, "transferFormat"); + Arg.isIn(options.transferFormat, TransferFormat, "transferFormat"); + // update options + this.url = options.url; + // print log + this.logger.log(LogLevel.Trace, "(LongPolling transport) Connecting."); + pollOptions = { + config: { + // 中断信号 + about: this.pollAbort.signal.aborted, + timeout: 120 * 1000 // 超时时间 2 min + }, + // origin header 头 + headers: {} + }; + if (options.transferFormat === TransferFormat.Binary) { + pollOptions.responseType = ResponseType.ARRAY_BUFFER; + } + return [4 /*yield*/, this.getAccessToken()]; + case 1: + token = _a.sent(); + this.updateHeaderToken(pollOptions, token); + // Make initial long polling request + // Server uses first long polling request to finish initializing connection and it returns without data + //发出初始长轮询请求 + //服务器使用第一个长轮询请求完成连接初始化,它返回时不带数据 + this.logger.log(LogLevel.Trace, "(LongPolling transport) polling: [url]" + this.url); + return [4 /*yield*/, this.request.get(this.url, { + _: Date.now() + }, pollOptions)]; + case 2: + response = _a.sent(); + if (response.statusCode !== 200) { + this.logger.log(LogLevel.Error, "(LongPolling transport) Unexpected response code: " + response.statusCode + "."); + // Mark running as false so that the poll immediately ends and runs the close logic + // ! 重写了 内置 的 创建 `HttpError` 方法 + this.closeError = new HttpError(response.errMsg || "", response.statusCode); + this.running = false; + } + else { + this.running = true; + } + this.receiving = this.poll(this.url, pollOptions); + return [2 /*return*/, Promise.resolve({ + errMsg: "connect success" + })]; + } + }); + }); + }; + /** + * 获取 access-token + * + * @private + * @returns {(Promise)} + * @memberof LongPollingTransport + */ + LongPollingTransport.prototype.getAccessToken = function () { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + if (!this.accessTokenFactory) return [3 /*break*/, 2]; + return [4 /*yield*/, this.accessTokenFactory()]; + case 1: return [2 /*return*/, _a.sent()]; + case 2: return [2 /*return*/, null]; + } + }); + }); + }; + /** + * 更新 access-token + * + * @private + * @param {RequestOption} request + * @param {(string | null)} token + * @returns + * @memberof LongPollingTransport + */ + LongPollingTransport.prototype.updateHeaderToken = function (request, token) { + /** + * fix header + */ + if (!request.headers) { + request.headers = {}; + } + /** + * push token to headers + */ + if (token) { + // tslint:disable-next-line:no-string-literal + request.headers["Authorization"] = "Bearer " + token; + return; + } + // tslint:disable-next-line:no-string-literal + if (request.headers["Authorization"]) { + // tslint:disable-next-line:no-string-literal + delete request.headers["Authorization"]; + } + }; + /** + * 异步计数? + * + * @private + * @param {string} url + * @param {RequestOption} pollOptions + * @returns {Promise} + * @memberof LongPollingTransport + */ + LongPollingTransport.prototype.poll = function (url, pollOptions) { + return __awaiter(this, void 0, void 0, function () { + var token, pollUrl, response, e_1; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + _a.trys.push([0, , 8, 9]); + _a.label = 1; + case 1: + if (!this.running) return [3 /*break*/, 7]; + return [4 /*yield*/, this.getAccessToken()]; + case 2: + token = _a.sent(); + this.updateHeaderToken(pollOptions, token); + _a.label = 3; + case 3: + _a.trys.push([3, 5, , 6]); + pollUrl = url + "&_=" + Date.now(); + this.logger.log(LogLevel.Trace, "(LongPolling transport) polling: " + pollUrl + ". - (fy:\u957F\u8F6E\u8BE2\u4F20\u8F93 - polling)"); + return [4 /*yield*/, this.request.get(this.url, { + _: Date.now() + }, pollOptions)]; + case 4: + response = _a.sent(); + if (response.statusCode === 204) { + this.logger.log(LogLevel.Information, "(LongPolling transport) Poll terminated by server. - (fy:长轮询传输 - 由服务器终止轮询。)"); + this.running = false; + } + else if (response.statusCode !== 200) { + this.logger.log(LogLevel.Error, "(LongPolling transport) Unexpected response code: " + response.statusCode + ". - (fy:\u957F\u8F6E\u8BE2\u4F20\u8F93 - \u610F\u5916\u7684\u54CD\u5E94\u4EE3\u7801)"); + // Unexpected status code + this.closeError = new HttpError(response.errMsg || "", response.statusCode); + this.running = false; + } + else { + // Process the response + if (response.data) { + this.logger.log(LogLevel.Trace, "(LongPolling transport) data received. " + getDataDetail(response.data, this.logMessageContent) + "."); + if (this.onreceive) { + this.onreceive(response.data); + } + } + else { + // This is another way timeout manifest. + this.logger.log(LogLevel.Trace, "(LongPolling transport) Poll timed out, reissuing."); + } + } + return [3 /*break*/, 6]; + case 5: + e_1 = _a.sent(); + if (!this.running) { + // Log but disregard errors that occur after stopping - fy: 记录但忽略停止后发生的错误 + this.logger.log(LogLevel.Trace, "(LongPolling transport) Poll errored after shutdown: " + e_1.message); + } + else { + if (e_1 instanceof TimeoutError) { + // Ignore timeouts and reissue the poll. - 忽略超时并重新发出投票 + this.logger.log(LogLevel.Trace, "(LongPolling transport) Poll timed out, reissuing. - (fy:长轮询传输 - 请求超时)"); + } + else { + // Close the connection with the error as the result. + this.closeError = e_1; + this.running = false; + } + } + return [3 /*break*/, 6]; + case 6: return [3 /*break*/, 1]; + case 7: return [3 /*break*/, 9]; + case 8: + this.logger.log(LogLevel.Trace, "(LongPolling transport) Polling complete. - (fy:长轮询传输 - 请求完成)"); + // We will reach here with pollAborted==false when the server returned a response causing the transport to stop. + // If pollAborted==true then client initiated the stop and the stop method will raise the close event after DELETE is sent. + //当服务器返回导致传输停止的响应时,我们将使用pollAborted==false到达这里。 + //如果pollAborted==true,则客户端启动了stop,stop方法将在发送DELETE后引发close事件。 + if (!this.pollAborted) { + this.raiseOnClose(); + } + return [7 /*endfinally*/]; + case 9: return [2 /*return*/]; + } + }); + }); + }; + /** + * 发送轮询包 + * + * @param {*} data + * @returns {Promise} + * @memberof LongPollingTransport + */ + LongPollingTransport.prototype.send = function (data) { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + if (!this.running) { + return [2 /*return*/, Promise.reject(new Error("Cannot send until the transport is connected"))]; + } + return [2 /*return*/, sendMessage(this.logger, "LongPolling", this.request, this.url, this.accessTokenFactory, data, this.logMessageContent)]; + }); + }); + }; + /** + * 停止 + * + * @returns {Promise} + * @memberof LongPollingTransport + */ + LongPollingTransport.prototype.stop = function () { + return __awaiter(this, void 0, void 0, function () { + var deleteOptions, token, e_2; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + this.logger.log(LogLevel.Trace, "(LongPolling transport) Stopping polling."); + // Tell receiving loop to stop, abort any current request, and then wait for it to finish + this.running = false; + this.pollAbort.abort(); + _a.label = 1; + case 1: + _a.trys.push([1, 5, 6, 7]); + return [4 /*yield*/, this.receiving]; + case 2: + _a.sent(); // 这里 receiving 本身是一个 promise result, 用这个对象来监控请求未完成 + // Send DELETE to clean up long polling on the server + // 发送DELETE以清除服务器上的长轮询 + this.logger.log(LogLevel.Trace, "(LongPolling transport) sending DELETE request to " + this.url + "."); + deleteOptions = { + headers: {} + }; + return [4 /*yield*/, this.getAccessToken()]; + case 3: + token = _a.sent(); + this.updateHeaderToken(deleteOptions, token); + return [4 /*yield*/, this.request.delete(this.url, {}, deleteOptions)]; + case 4: + _a.sent(); + this.logger.log(LogLevel.Trace, "(LongPolling transport) DELETE request sent."); + return [2 /*return*/, Promise.resolve({ + errMsg: "stop success" + })]; + case 5: + e_2 = _a.sent(); + this.logger.log(LogLevel.Error, "(LongPolling transport) Stop error.", e_2); + return [2 /*return*/, Promise.reject({ + errMsg: "stop fail" + })]; + case 6: + this.logger.log(LogLevel.Trace, "(LongPolling transport) Stop finished."); + // Raise close event here instead of in polling + // It needs to happen after the DELETE request is sent + //在此处引发关闭事件,而不是在轮询中 + //它需要在发送删除请求后发生 + this.raiseOnClose(); + return [7 /*endfinally*/]; + case 7: return [2 /*return*/]; + } + }); + }); + }; + /** + * 调用关闭回调 + * + * @private + * @memberof LongPollingTransport + */ + LongPollingTransport.prototype.raiseOnClose = function () { + if (this.onclose) { + var logMessage = "(LongPolling transport) Firing onclose event."; + if (this.closeError) { + logMessage += " Error: " + this.closeError; + } + this.logger.log(LogLevel.Trace, logMessage); + this.onclose(this.closeError); + } + }; + return LongPollingTransport; +}()); +export { LongPollingTransport }; diff --git a/miniprogram_npm/signalr-for-wx/Polyfills.js b/miniprogram_npm/signalr-for-wx/Polyfills.js new file mode 100644 index 0000000..5f1c2d6 --- /dev/null +++ b/miniprogram_npm/signalr-for-wx/Polyfills.js @@ -0,0 +1,13 @@ +// 版权所有(c).NET基金会。保留所有权利。 +// 在2.0版Apache许可下授权。有关许可证信息,请参见项目根目录中的License.txt +// Not exported from index +/** + * 小程序socket连接状态[枚举] + */ +export var WxSocketReadyState; +(function (WxSocketReadyState) { + WxSocketReadyState[WxSocketReadyState["CONNECTING"] = 0] = "CONNECTING"; + WxSocketReadyState[WxSocketReadyState["OPEN"] = 1] = "OPEN"; + WxSocketReadyState[WxSocketReadyState["CLOSING"] = 2] = "CLOSING"; + WxSocketReadyState[WxSocketReadyState["CLOSED"] = 3] = "CLOSED"; +})(WxSocketReadyState || (WxSocketReadyState = {})); diff --git a/miniprogram_npm/signalr-for-wx/Stream.js b/miniprogram_npm/signalr-for-wx/Stream.js new file mode 100644 index 0000000..95328c3 --- /dev/null +++ b/miniprogram_npm/signalr-for-wx/Stream.js @@ -0,0 +1,2 @@ +// 版权所有(c).NET基金会。保留所有权利。 +// 在2.0版Apache许可下授权。有关许可证信息,请参见项目根目录中的License.txt。 diff --git a/miniprogram_npm/signalr-for-wx/TextMessageFormat.js b/miniprogram_npm/signalr-for-wx/TextMessageFormat.js new file mode 100644 index 0000000..4252522 --- /dev/null +++ b/miniprogram_npm/signalr-for-wx/TextMessageFormat.js @@ -0,0 +1,46 @@ +// 版权所有(c).NET基金会。保留所有权利。 +// 在2.0版Apache许可下授权。有关许可证信息,请参见项目根目录中的License.txt。 +// 未从索引导出 +/** + * 文本类型消息格式化 + * @private + */ +var TextMessageFormat = /** @class */ (function () { + function TextMessageFormat() { + } + /** + * 输出一个格式化过的消息 + * @param output + */ + TextMessageFormat.write = function (output) { + return "" + output + TextMessageFormat.RecordSeparator; + }; + /** + * 解析 + * @param input + */ + TextMessageFormat.parse = function (input) { + if (input[input.length - 1] !== TextMessageFormat.RecordSeparator) { + throw new Error("Message is incomplete."); + } + var messages = input.split(TextMessageFormat.RecordSeparator); + messages.pop(); + return messages; + }; + /** + * 记录分隔符 code + * + * @static + * @memberof TextMessageFormat + */ + TextMessageFormat.RecordSeparatorCode = 0x1e; + /** + * 记录分隔符(string) + * + * @static + * @memberof TextMessageFormat + */ + TextMessageFormat.RecordSeparator = String.fromCharCode(TextMessageFormat.RecordSeparatorCode); + return TextMessageFormat; +}()); +export { TextMessageFormat }; diff --git a/miniprogram_npm/signalr-for-wx/Utils.js b/miniprogram_npm/signalr-for-wx/Utils.js new file mode 100644 index 0000000..84004d4 --- /dev/null +++ b/miniprogram_npm/signalr-for-wx/Utils.js @@ -0,0 +1,324 @@ +// 版权所有(c).NET基金会。保留所有权利。 +// 在2.0版Apache许可下授权。有关许可证信息,请参见项目根目录中的License.txt。 +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __generator = (this && this.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (_) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; +var __spreadArrays = (this && this.__spreadArrays) || function () { + for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length; + for (var r = Array(s), k = 0, i = 0; i < il; i++) + for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) + r[k] = a[j]; + return r; +}; +import { LogLevel } from "./ILogger"; +import { NullLogger } from "./Loggers"; +import { ResponseType } from "./wx-request/model/ResponseType"; +/** + * 参数处理方法 + * @private + */ +var Arg = /** @class */ (function () { + function Arg() { + } + /** + * 是否存在 + * + * @static + * @param {*} val + * @param {string} name + * @memberof Arg + */ + Arg.isRequired = function (val, name) { + if (val === null || val === undefined) { + throw new Error("The '" + name + "' argument is required."); + } + }; + /** + * 是否包含 + * + * @static + * @param {*} val + * @param {*} values + * @param {string} name + * @memberof Arg + */ + Arg.isIn = function (val, values, name) { + // TypeScript enums have keys for **both** the name and the value of each enum member on the type itself. + if (!(val in values)) { + throw new Error("Unknown " + name + " value: " + val + "."); + } + }; + /** + * 验证url是否被微信支持 + */ + Arg.validationUrlIsSupportByWechat = function (url) { + if (!url) { + throw new Error("Url is undefined."); + } + else if (!/^(ws|wws):\/\//.test(url)) { + if (/^http/.test(url)) { + return url.replace(/^http/, "wx"); + } + throw new Error("error: instantiation [url](" + url + ") not supported by wechat miniprogram."); + } + else { + return url; + } + }; + return Arg; +}()); +export { Arg }; +/** + * 获取data details + * @param data origin data + * @param includeContent 是否导出上下文? + */ +export function getDataDetail(data, includeContent) { + var detail = ""; + if (isArrayBuffer(data)) { + detail = "Binary data of length " + data.byteLength; + if (includeContent) { + detail += ". Content: '" + formatArrayBuffer(data) + "'"; + } + } + else if (typeof data === "string") { + detail = "String data of length " + data.length; + if (includeContent) { + detail += ". Content: '" + data + "'"; + } + } + return detail; +} +/** + * 格式化 array buffer + * @private + */ +export function formatArrayBuffer(data) { + var view = new Uint8Array(data); + // Uint8Array.map only supports returning another Uint8Array? + var str = ""; + view.forEach(function (num) { + var pad = num < 16 ? "0" : ""; + str += "0x" + pad + num.toString(16) + " "; + }); + // Trim of trailing space. + return str.substr(0, str.length - 1); +} +// Also in signalr-protocol-msgpack/Utils.ts +/** + * 判断是不是 ArrayBuffer + * @private + */ +export function isArrayBuffer(val) { + return (val && + typeof ArrayBuffer !== "undefined" && + (val instanceof ArrayBuffer || + // Sometimes we get an ArrayBuffer that doesn't satisfy instanceof + (val.constructor && val.constructor.name === "ArrayBuffer"))); +} +/** + * 发送消息 + * @param logger 日志工具 + * @param transportName + * @param request - 注: 原版代码为 httpClient,这里使用 wx-request. + * @param url + * @param accessTokenFactory + * @param content + * @param logMessageContent + */ +export function sendMessage(logger, transportName, request, url, accessTokenFactory, content, logMessageContent) { + return __awaiter(this, void 0, void 0, function () { + var headers, token, responseType, response; + var _a; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + if (!accessTokenFactory) return [3 /*break*/, 2]; + return [4 /*yield*/, accessTokenFactory()]; + case 1: + token = _b.sent(); + if (token) { + headers = (_a = {}, + _a["Authorization"] = "Bearer " + token, + _a); + } + _b.label = 2; + case 2: + logger.log(LogLevel.Trace, "(" + transportName + " transport) sending data. " + getDataDetail(content, logMessageContent) + "."); + responseType = isArrayBuffer(content) ? ResponseType.ARRAY_BUFFER : ResponseType.TEXT; + return [4 /*yield*/, request.post(url, content, { + headers: headers, + responseType: responseType + })]; + case 3: + response = _b.sent(); + logger.log(LogLevel.Trace, "(" + transportName + " transport) request complete. Response status: " + response.statusCode + "."); + return [2 /*return*/]; + } + }); + }); +} +/** + * 创建一个 logger + * @private + */ +export function createLogger(logger) { + if (logger === undefined) { + return new ConsoleLogger(LogLevel.Information); + } + if (logger === null) { + return NullLogger.instance; + } + if (logger.log) { + return logger; + } + return new ConsoleLogger(logger); +} +/** + * 订阅接口实现 + * @private + */ +var Subject = /** @class */ (function () { + function Subject(cancelCallback) { + this.observers = []; + this.cancelCallback = cancelCallback; + } + Subject.prototype.next = function (item) { + for (var _i = 0, _a = this.observers; _i < _a.length; _i++) { + var observer = _a[_i]; + observer.next(item); + } + }; + Subject.prototype.error = function (err) { + for (var _i = 0, _a = this.observers; _i < _a.length; _i++) { + var observer = _a[_i]; + if (observer.error) { + observer.error(err); + } + } + }; + Subject.prototype.complete = function () { + for (var _i = 0, _a = this.observers; _i < _a.length; _i++) { + var observer = _a[_i]; + if (observer.complete) { + observer.complete(); + } + } + }; + Subject.prototype.subscribe = function (observer) { + this.observers.push(observer); + return new SubjectSubscription(this, observer); + }; + return Subject; +}()); +export { Subject }; +/** + * 主题订阅?? + * 应该时定制 断开流 的 实现吧. + * @private + */ +var SubjectSubscription = /** @class */ (function () { + function SubjectSubscription(subject, observer) { + this.subject = subject; + this.observer = observer; + } + SubjectSubscription.prototype.dispose = function () { + var index = this.subject.observers.indexOf(this.observer); + if (index > -1) { + this.subject.observers.splice(index, 1); + } + if (this.subject.observers.length === 0) { + this.subject.cancelCallback().catch(function (_) { }); + } + }; + return SubjectSubscription; +}()); +export { SubjectSubscription }; +/** + * console logger 内置实现 + * @private + */ +var ConsoleLogger = /** @class */ (function () { + /** + * 构造方法 定义 最小输出日志等级 + * @param {LogLevel} minimumLogLevel + * @memberof ConsoleLogger + */ + function ConsoleLogger(minimumLogLevel) { + this.minimumLogLevel = minimumLogLevel; + } + /** + * 日志输出 + * + * @param {LogLevel} logLevel + * @param {string} message + * @memberof ConsoleLogger + */ + ConsoleLogger.prototype.log = function () { + var msg = []; + for (var _i = 0; _i < arguments.length; _i++) { + msg[_i] = arguments[_i]; + } + var logLevel = LogLevel.Information; + for (var _a = 0, _b = arguments; _a < _b.length; _a++) { + var ll = _b[_a]; + if (Object.values(LogLevel).indexOf(ll) != -1) { + logLevel = ll; + break; + } + } + if (logLevel >= this.minimumLogLevel) { + switch (logLevel) { + case LogLevel.Critical: + case LogLevel.Error: + console.error.apply(console, __spreadArrays(["[" + new Date().toISOString() + "] " + LogLevel[logLevel] + " =>"], msg.slice(1, msg.length))); + break; + case LogLevel.Warning: + console.warn.apply(console, __spreadArrays(["[" + new Date().toISOString() + "] " + LogLevel[logLevel] + " =>"], msg)); + break; + case LogLevel.Information: + console.info.apply(console, __spreadArrays(["[" + new Date().toISOString() + "] " + LogLevel[logLevel] + " =>"], msg)); + break; + default: + // console.debug only goes to attached debuggers in Node, so we use console.log for Trace and Debug + console.log.apply(console, __spreadArrays(["[" + new Date().toISOString() + "] " + LogLevel[logLevel] + " =>"], msg)); + break; + } + } + }; + return ConsoleLogger; +}()); +export { ConsoleLogger }; diff --git a/miniprogram_npm/signalr-for-wx/WechatVersionDiff.js b/miniprogram_npm/signalr-for-wx/WechatVersionDiff.js new file mode 100644 index 0000000..5cec6f8 --- /dev/null +++ b/miniprogram_npm/signalr-for-wx/WechatVersionDiff.js @@ -0,0 +1,33 @@ +/** + * 小程序版本支持 + * @param minimumVersion 最小支持版本号 + */ +export var isVersionSupport = function (minimumVersion) { + // diff + var compareVersion = function (v1, v2) { + v1 = v1.split("."); + v2 = v2.split("."); + var len = Math.max(v1.length, v2.length); + while (v1.length < len) { + v1.push("0"); + } + while (v2.length < len) { + v2.push("0"); + } + for (var i = 0; i < len; i++) { + var num1 = parseInt(v1[i]); + var num2 = parseInt(v2[i]); + if (num1 > num2) { + return 1; + } + else if (num1 < num2) { + return -1; + } + } + return 0; + }; + // 获取当前小程序 版本号 + var SDKVersion = wx.getSystemInfoSync().SDKVersion; + // check + return compareVersion(SDKVersion, minimumVersion) >= 0; +}; diff --git a/miniprogram_npm/signalr-for-wx/WxSocketTransport.js b/miniprogram_npm/signalr-for-wx/WxSocketTransport.js new file mode 100644 index 0000000..908c636 --- /dev/null +++ b/miniprogram_npm/signalr-for-wx/WxSocketTransport.js @@ -0,0 +1,300 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +var __assign = (this && this.__assign) || function () { + __assign = Object.assign || function(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) + t[p] = s[p]; + } + return t; + }; + return __assign.apply(this, arguments); +}; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __generator = (this && this.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (_) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; +import { LogLevel } from "./ILogger"; +import { Arg, getDataDetail } from "./Utils"; +import { WxSocketReadyState } from "./Polyfills"; +import { isVersionSupport } from "./WechatVersionDiff"; +/** + * 微信 sosocket 数据传输 + * @description 整体重写了这部分websocket支持,逻辑这样看起来合理一些 + */ +var WxSocketTransport = /** @class */ (function () { + function WxSocketTransport(options) { + this.readyState = WxSocketReadyState.CONNECTING; + this.logger = options.logger; + this.accessTokenFactory = options.accessTokenFactory; + this.socketUrlFactory = options.socketUrlFactory; + this.logMessageContent = options.logMessageContent; + this.onreceive = null; + this.onclose = null; + this.allowReplaceSocket = options.allowReplaceSocket; + this.timeout = options.timeout ? options.timeout : 60 * 1000; + this.delayTime = options.delayTime ? options.delayTime : 100; + if (options.enableMessageQueue) { + this.enableMessageQueue = true; + this.messageQueue = []; + } + else { + this.enableMessageQueue = false; + } + if (options.reconnect) { + this.reconnect = { + enable: options.reconnect.enable == true ? true : false, + max: options.reconnect.max ? options.reconnect.max : 3, + val: 0 + }; + } + else { + this.reconnect = { + enable: false, + max: 3, + val: 0 + }; + } + } + WxSocketTransport.prototype.connect = function (options) { + return __awaiter(this, void 0, void 0, function () { + var replacedUrl, token; + var _this = this; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + // vali is exists + Arg.isRequired(options, "options"); + // vali url is support by wechat + Arg.validationUrlIsSupportByWechat(options.url); + this.connectOptions = options; // 连接参数缓存 + this.logger.log(LogLevel.Trace, "(WebSockets transport) Connecting."); + if (!this.socketUrlFactory) return [3 /*break*/, 2]; + return [4 /*yield*/, this.socketUrlFactory(options.url)]; + case 1: + replacedUrl = _a.sent(); + if (replacedUrl) { + options.url = replacedUrl; + } + return [3 /*break*/, 4]; + case 2: + if (!this.accessTokenFactory) return [3 /*break*/, 4]; + return [4 /*yield*/, this.accessTokenFactory()]; + case 3: + token = _a.sent(); + this.logger.log(LogLevel.Debug, "getted token:", token); + if (token) { + options.url += (options.url.indexOf("?") < 0 ? "?" : "&") + ("access_token=" + encodeURIComponent(token)); + } + _a.label = 4; + case 4: return [2 /*return*/, new Promise(function (resolve, reject) { + // 忽略url修正,因为传入错误url的话,将直接抛出异常 + options.url = options.url.replace(/^http/, "ws"); + // 这里执行的是连接操socket的逻辑 + var socketTask; + // 1.7.0 及以上版本,最多可以同时存在 5 个 WebSocket 连接, 以下版本,一个小程序同时只能有一个 WebSocket 连接,如果当前已存在一个 WebSocket 连接,会自动关闭该连接,并重新创建一个 WebSocket 连接 + var supportCount = isVersionSupport("1.7.0") ? 5 : 1; + if (supportCount <= WxSocketTransport.count && !_this.allowReplaceSocket) { + // 抛出异常, 并return + reject({ + errMsg: "Maximum connections|" + WxSocketTransport.count + }); + return; + } + else if (WxSocketTransport.count == 5) { + // 抛出异常, 并return + reject({ + errMsg: "Maximum connections|" + WxSocketTransport.count + }); + return; + } + if (!socketTask) { + socketTask = wx.connectSocket(__assign({ + // 传入 两个默认的 回调,当然也可以在 options 里面覆盖 使用自定义回调. + success: function (res) { + _this.logger.log(LogLevel.Debug, "wx.connectSocket():success"); + }, fail: function (res) { + _this.logger.log(LogLevel.Debug, "wx.connectSocket():fail"); + reject(res); + } }, options)); + } + // ! 因为小程序两种协议都支持,所以不需要指定特定的 binaryType + /** 连接成功处理 */ + socketTask.onOpen(function (result) { return __awaiter(_this, void 0, void 0, function () { + var _i, _a, msg; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + this.logger.log(LogLevel.Information, "websocket\u8FDE\u63A5\u5EFA\u7ACB " + (this.logMessageContent ? "wx api:[" + options.url + "]" : "")); + this.logger.log(LogLevel.Debug, "wx.connectSocket success message:", result); + WxSocketTransport.count += 1; + this.readyState = WxSocketReadyState.OPEN; + this.socketTask = socketTask; + // 等待回调执行完成后,再重新队列中消息 + return [4 /*yield*/, resolve()]; + case 1: + // 等待回调执行完成后,再重新队列中消息 + _b.sent(); + if (!(this.enableMessageQueue && this.messageQueue.length > 0)) return [3 /*break*/, 5]; + _i = 0, _a = this.messageQueue; + _b.label = 2; + case 2: + if (!(_i < _a.length)) return [3 /*break*/, 5]; + msg = _a[_i]; + this.logger.log(LogLevel.Debug, "\u63A8\u9001\u79BB\u7EBF\u6D88\u606F", this.logMessageContent ? msg : ""); + return [4 /*yield*/, this.send(msg)]; + case 3: + _b.sent(); + _b.label = 4; + case 4: + _i++; + return [3 /*break*/, 2]; + case 5: return [2 /*return*/]; + } + }); + }); }); + /** 建立连接出错处理 */ + socketTask.onError(function (res) { + _this.readyState = WxSocketReadyState.CLOSED; + reject(res); + }); + /** 接收到消息处理 */ + socketTask.onMessage(function (res) { + _this.logger.log(LogLevel.Trace, "(WebSockets transport) data received.", getDataDetail(res.data, _this.logMessageContent)); + if (_this.onreceive) { + _this.onreceive(res.data); + } + }); + socketTask.onClose(function (res) { return _this.close(res); }); + })]; + } + }); + }); + }; + /** 休眠 */ + WxSocketTransport.prototype.delay = function () { + var _this = this; + return new Promise(function (resolve) { + // ! 由于小程序机制,所以需要手工清理timer + var timer = setTimeout(function () { + clearTimeout(timer); + resolve(); + }, _this.delayTime); + }); + }; + /** 发送 */ + WxSocketTransport.prototype.send = function (data) { + return __awaiter(this, void 0, void 0, function () { + var loop; + var _this = this; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + if (!(this.socketTask && this.readyState === WxSocketReadyState.OPEN)) return [3 /*break*/, 1]; + this.logger.log(LogLevel.Trace, "[WxSocket] \u63A8\u9001\u6570\u636E.", getDataDetail(data, this.logMessageContent)); + return [2 /*return*/, new Promise(function (resolve, reject) { + _this.socketTask.send({ + data: data, + success: function () { return resolve(); }, + fail: function () { return reject(); } + }); + })]; + case 1: + if (!this.enableMessageQueue) return [3 /*break*/, 5]; + this.messageQueue.push(data); + loop = 0; + _a.label = 2; + case 2: + if (!(this.socketTask && this.readyState !== WxSocketReadyState.OPEN)) return [3 /*break*/, 4]; + return [4 /*yield*/, this.delay()]; + case 3: + _a.sent(); + loop += this.delayTime; + if (loop >= this.timeout) { + // 超时设置 + return [2 /*return*/, Promise.reject({ + errMsg: "WebSocket connect timeout." + })]; + } + return [3 /*break*/, 2]; + case 4: + // 回调 + return [2 /*return*/, this.send(data)]; + case 5: return [2 /*return*/, Promise.reject({ + errMsg: "WebSocket is not in the OPEN state" + })]; + } + }); + }); + }; + /** 停止 */ + WxSocketTransport.prototype.stop = function (msg) { + var _this = this; + return new Promise(function (resolve, reject) { + if (_this.socketTask) { + _this.socketTask.close({ + code: 1000, + reason: "stop socket", + success: function (res) { return resolve(msg || res); }, + fail: function (res) { return reject(res); } + }); + } + }); + }; + /** + * 连接断开处理 + * @param res + */ + WxSocketTransport.prototype.close = function (res) { + // webSocket will be null if the transport did not start successfully + this.logger.log(LogLevel.Trace, "(WebSockets transport) socket closed."); + WxSocketTransport.count = WxSocketTransport.count > 0 ? WxSocketTransport.count - 1 : 0; + if (this.onclose) { + if (res && res.code !== 1000) { + this.onclose(new Error("WebSocket closed with status code: " + res.code + " (" + res.reason + ").")); + } + else { + this.onclose(); + } + } + }; + /** + * 静态变量 - 表示当前是否有正在连接中的socket + */ + WxSocketTransport.count = 0; + return WxSocketTransport; +}()); +export { WxSocketTransport }; diff --git a/miniprogram_npm/signalr-for-wx/index.js b/miniprogram_npm/signalr-for-wx/index.js new file mode 100644 index 0000000..39f0d5e --- /dev/null +++ b/miniprogram_npm/signalr-for-wx/index.js @@ -0,0 +1,24 @@ +// 版权所有(c).NET基金会。保留所有权利。 +// 在2.0版Apache许可下授权。有关许可证信息,请参见项目根目录中的License.txt。 +// 版本号模板 - builder 自动更新,无需手动 +/** The version of the SignalR client. */ +export var VERSION = "1.1.6"; +// 协议|类型参数 导出 +export { MessageType } from "./IHubProtocol"; +// json格式传输协议 +export { JsonHubProtocol } from "./JsonHubProtocol"; +export { HubConnectionBuilder } from "./HubConnectionBuilder"; +export { HubConnection, HubConnectionState } from "./HubConnection"; +// 微信最低版本支持检查 +export { isVersionSupport } from "./WechatVersionDiff"; +// 微信socket传输实现 +export { WxSocketTransport } from "./WxSocketTransport"; +// 微信 request 请求实现(封装 wx.request) +export { Request } from "./wx-request/index"; +export { RequestMethod, ResponseType } from "./wx-request/model"; +// Error 接口 +export { AbortError, HttpError, TimeoutError } from "./Errors"; +// logger 接口 +export { LogLevel } from "./ILogger"; +// Transport 接口 +export { HttpTransportType, TransferFormat } from "./ITransport"; diff --git a/miniprogram_npm/signalr-for-wx/wx-request/index.js b/miniprogram_npm/signalr-for-wx/wx-request/index.js new file mode 100644 index 0000000..a7cda3a --- /dev/null +++ b/miniprogram_npm/signalr-for-wx/wx-request/index.js @@ -0,0 +1,477 @@ +var __assign = (this && this.__assign) || function () { + __assign = Object.assign || function(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) + t[p] = s[p]; + } + return t; + }; + return __assign.apply(this, arguments); +}; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __generator = (this && this.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (_) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; +import { RequestMethod } from "./model/RequestMethod"; +import { ResponseType } from "./model/ResponseType"; +import { LogLevel } from "../ILogger"; +import { TimeoutError, HttpError } from "../Errors"; +import { NullLogger } from "../Loggers"; +/** + * 封装微信ajax请求工具 + * @author halo + */ +var Request = /** @class */ (function () { + /** + * Creates an instance of Request. + * 实例化配置 + * @param {*} [config] + * @memberof Request + */ + function Request(config, logger) { + if (config === void 0) { config = {}; } + // 写入配置 + if (wx) { + // Time: 继承 signalR logger. 日志统一维护 + this.logger = logger ? logger : new NullLogger(); + } + else { + throw new Error("当前运行环境不是微信运行环境"); + } + // custom wx request promise library. + this.setConfig(config); + } + /** + * merge config + * @param config + */ + Request.prototype.setConfig = function (config) { + if (config === void 0) { config = {}; } + // 合并默认配置和 + this.config = __assign({ baseUrl: "http://", headers: { "Content-Type": "application/json" }, forceEnableHttps: false, method: RequestMethod.GET, responseType: ResponseType.JSON, responseEncoding: "utf8", timeout: 60 * 1000, transformRequest: [], transformResponse: [] }, config); + // 请求头默认附加response 解析器 + if (!this.config.transformResponse) { + this.config.transformResponse = []; + } + this.logger.log(LogLevel.Information, "set config success."); + }; + /** + * 请求参数序列化 + * + * @param {RequestOptions} options + * @memberof Request + * + * @description 只支持普通get请求,和content-type = json 的 其他请求(post,put,delete,patch) + */ + Request.prototype.handleRequestOptions = function (options) { + return __awaiter(this, void 0, void 0, function () { + var _i, _a, fun, e_1; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + // 请求地址处理,对于非:// 请求,附加baseUrl + if (options.url && !/:\/\/.+?/.test(options.url)) { + options.url = ((options.config ? options.config.baseUrl : "") + "/" + options.url).replace(/([^:])(\/\/)/g, "$1/"); + } + this.logger.log(LogLevel.Trace, "checked request url"); + // https 处理 + if (options.config && options.config.forceEnableHttps) { + options.url = options.url.replace(/http:/, "https:"); + this.logger.log(LogLevel.Trace, "execute fix [request.config.forceEnableHttps] " + options.url); + } + // header 合并 + options.headers = Object.assign({}, options.config ? options.config.headers : {}, options.headers); + this.logger.log(LogLevel.Trace, "merge headers ", options.headers); + // 移除微信封锁参数 + delete options.headers["Referer"]; + this.logger.log(LogLevel.Trace, "try delete headers Referer."); + // 替换请求内的ResponseType + options.responseType = options.responseType + ? options.responseType + : options.config + ? options.config.responseType + : ResponseType.TEXT; + this.logger.log(LogLevel.Trace, "checked responseType [" + options.responseType + "]"); + if (!(options.config && options.config.transformRequest)) return [3 /*break*/, 6]; + this.logger.log(LogLevel.Trace, "execute transform request list. -result\n", options.config); + _i = 0, _a = options.config.transformRequest; + _b.label = 1; + case 1: + if (!(_i < _a.length)) return [3 /*break*/, 6]; + fun = _a[_i]; + _b.label = 2; + case 2: + _b.trys.push([2, 4, , 5]); + return [4 /*yield*/, fun(options)]; + case 3: + _b.sent(); + return [3 /*break*/, 5]; + case 4: + e_1 = _b.sent(); + throw e_1; + case 5: + _i++; + return [3 /*break*/, 1]; + case 6: + // debug print handled request options + this.logger.log(LogLevel.Debug, "handled request options \n", options); + return [2 /*return*/]; + } + }); + }); + }; + /** + * 验证响应结果,执行回调 + * + * @param {*} resolve + * @param {*} reject + * @param {*} response + * @memberof Request + */ + Request.prototype.handleResponse = function (response) { + return __awaiter(this, void 0, void 0, function () { + var _i, _a, fun, res_1; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + if (!(response.options.config && + response.options.config.responseType == "json" && + response.options.config.transformResponse)) return [3 /*break*/, 6]; + _i = 0, _a = response.options.config.transformResponse; + _b.label = 1; + case 1: + if (!(_i < _a.length)) return [3 /*break*/, 6]; + fun = _a[_i]; + _b.label = 2; + case 2: + _b.trys.push([2, 4, , 5]); + // handler response + return [4 /*yield*/, fun(response)]; + case 3: + // handler response + _b.sent(); + return [3 /*break*/, 5]; + case 4: + res_1 = _b.sent(); + this.logger.log(LogLevel.Trace, "execute transform request list. -result \n ", res_1); + throw res_1; + case 5: + _i++; + return [3 /*break*/, 1]; + case 6: + // debug print handled response context + this.logger.log(LogLevel.Debug, "handled response context \n", response); + return [2 /*return*/, Promise.resolve(response)]; + } + }); + }); + }; + /** + * 执行请求 + * + * @param {RequestOptions} [options={ + * url: this.config.baseUrl + * }] + * @returns {Promise} + * @memberof Request + */ + Request.prototype.executeRequest = function (options) { + var _this = this; + return new Promise(function (resolve, reject) { return __awaiter(_this, void 0, void 0, function () { + var error_1, task; + var _this = this; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + this.logger.log(LogLevel.Trace, "execute request -options \n", options); + // 合并 baseConfig + options.config = options.config ? __assign(__assign({}, this.config), options.config) : __assign({}, this.config); + if (this.checkAbout(options.config, reject)) + return [2 /*return*/]; + _a.label = 1; + case 1: + _a.trys.push([1, 3, , 4]); + // 序列化请求参数 + return [4 /*yield*/, this.handleRequestOptions(options)]; + case 2: + // 序列化请求参数 + _a.sent(); + return [3 /*break*/, 4]; + case 3: + error_1 = _a.sent(); + // 抛出异常. + return [2 /*return*/, reject(__assign({ data: null, header: null, statusCode: -1, options: options }, error_1))]; + case 4: + if (this.checkAbout(options.config, reject)) + return [2 /*return*/]; + // print fixed options + this.logger.log(LogLevel.Debug, "fixed options \n", options); + // execute request + this.logger.log(LogLevel.Trace, "invoke wx.request"); + task = wx.request({ + url: options.url, + data: options.data, + dataType: options.responseType, + header: options.headers, + method: options.method, + responseType: (function () { + switch (options.responseType) { + case "json": + case "text": + return "text"; + case "arraybuffer": + return "arraybuffer"; + } + })(), + success: function (res) { return __awaiter(_this, void 0, void 0, function () { + var data, header, statusCode, errMsg, responseOptions; + var _this = this; + return __generator(this, function (_a) { + if (this.checkAbout(options.config, reject)) + return [2 /*return*/]; + this.logger.log(LogLevel.Debug, "origin response context \n", res); + data = res.data, header = res.header, statusCode = res.statusCode, errMsg = res.errMsg; + responseOptions = { + data: data, + header: header, + statusCode: statusCode, + options: options, + errMsg: errMsg + }; + // 调用响应处理链(并返回结果) + this.handleResponse(responseOptions) + .then(function (res) { + // print debug + _this.logger.log(LogLevel.Debug, "handle response context is success. \n", res); + /** + * check and cache cookie (if has) | + * @description 这里因为 signalR的原因,内置了一个 cookies.js [library](https://github.com/jshttp/cookie/index.js) + * 略有改写,暂时将cookie 扔到内存中维护(毕竟就signalr使用,不考虑扔到 localStore 中占地方). + */ + if (options.config.cookie) + options.config.cookie.set(options.url, header); + // callback + resolve(res); + }) + .catch(function (res) { + // print log + _this.logger.log(LogLevel.Error, "handle response context is fail. \n ", res); + // ! 这里为了兼容 signalR的错误格式,抛出继承了HttpError异常. + var httpError = new HttpError(res.errMsg, res.statusCode); + // callback - 合并后,返回,可以被认定为 继承 HttpError对象. + reject(__assign(__assign({}, res), httpError)); + }); + return [2 /*return*/]; + }); + }); }, + fail: function (res) { + var responseOptions = null; + if (res && /request:fail socket time out timeout/.test(res.errMsg)) { + // ! 这里为了兼容 signalR的错误格式,抛出继承了TimeoutError异常. + responseOptions = __assign({ data: null, status: -1, errMsg: res.errMsg }, new TimeoutError(res.errMsg)); + } + else { + // ! 这里为了兼容 signalR的错误格式,抛出继承了HttpError异常. + responseOptions = __assign({ data: null, status: -1, errMsg: res.errMsg }, new HttpError(res.errMsg, 500)); + } + /** + * @date 2019年12月11日 13:14:25 + * ! 修复bug,wx.request fail 情况下, 未调用 response 处理链. + */ + // 调用响应处理链(并返回结果) + _this.handleResponse(responseOptions) + .then(function (res) { + // print debug + _this.logger.log(LogLevel.Debug, "handle response context is success. \n", res); + /** + * check and cache cookie (if has) | + * @description 这里因为 signalR的原因,内置了一个 cookies.js [library](https://github.com/jshttp/cookie/index.js) + * 略有改写,暂时将cookie 扔到内存中维护(毕竟就signalr使用,不考虑扔到 localStore 中占地方). + */ + if (options.config.cookie) + options.config.cookie.set(options.url, {}); + // callback + resolve(res); + }) + .catch(function (res) { + // print log + _this.logger.log(LogLevel.Error, "handle response context is fail. \n ", res); + // ! 这里为了兼容 signalR的错误格式,抛出继承了HttpError异常. + var httpError = new HttpError(res.errMsg, res.statusCode); + // callback - 合并后,返回,可以被认定为 继承 HttpError对象. + reject(__assign(__assign({}, res), httpError)); + }); + } + }); + // 监听 headers 变化 + task.onHeadersReceived(function () { + // 当检查到 about() 状态,中断请求 + if (_this.checkAbout(options.config, reject)) { + // 中断请求 + task.abort(); + return; + } + }); + return [2 /*return*/]; + } + }); + }); }); + }; + /** + * 检查中断 + * + * @memberof Request + */ + Request.prototype.checkAbout = function (options, reject) { + if (options.config && options.config.about) { + reject({ + data: null, + header: options.headers, + statusCode: 412, + options: options, + errMsg: "网络异常" // 直接自定义错误了. + }); + return true; + } + else { + return false; + } + }; + /** + * GET 请求 + * @description 封装调用 + * @param url 请求地址 + * @param data 请求参数 + * @param options 请求配置 + */ + Request.prototype.get = function (url, data, options) { + if (data === void 0) { data = {}; } + // print execute step + this.logger.log(LogLevel.Trace, "invoke request.get()"); + // merge config + var requestOptions = __assign(__assign({}, (function () { return (options ? options : {}); })()), { method: RequestMethod.GET, url: url, + data: data }); + // execute and response + return this.executeRequest(requestOptions); + }; + /** + * POST 请求 + * @description 封装调用 + * @param url 请求地址 + * @param data 请求参数 + * @param options 请求配置 + */ + Request.prototype.post = function (url, data, options) { + if (data === void 0) { data = {}; } + // print execute step + this.logger.log(LogLevel.Trace, "invoke request.post()"); + // merge config + var requestOptions = __assign(__assign({}, (function () { return (options ? options : {}); })()), { method: RequestMethod.POST, url: url, + data: data }); + // execute and response + return this.executeRequest(requestOptions); + }; + /** + * PUT 请求 + * @description 封装调用 + * @param url 请求地址 + * @param data 请求参数 + * @param options 请求配置 + */ + Request.prototype.put = function (url, data, options) { + if (data === void 0) { data = {}; } + // print execute step + this.logger.log(LogLevel.Trace, "invoke request.put()"); + // merge config + var requestOptions = __assign(__assign({}, (function () { return (options ? options : {}); })()), { method: RequestMethod.PUT, url: url, + data: data }); + // execute and response + return this.executeRequest(requestOptions); + }; + /** + * DELETE 请求 + * @description 封装调用 + * @param url 请求地址 + * @param data 请求参数 + * @param options 请求配置 + */ + Request.prototype.delete = function (url, data, options) { + if (data === void 0) { data = {}; } + // print execute step + this.logger.log(LogLevel.Trace, "invoke request.delete()"); + // merge config + var requestOptions = __assign(__assign({}, (function () { return (options ? options : {}); })()), { method: RequestMethod.DELETE, url: url, + data: data }); + // execute and response + return this.executeRequest(requestOptions); + }; + /** + * 多请求同步执行 + * @param taskQueue + */ + Request.prototype.all = function (taskQueue) { + // print execute step + this.logger.log(LogLevel.Trace, "invoke request.all()"); + // merge config + return Promise.all(taskQueue); + }; + /** + * 用于兼容 @aspnet/signalR 的 获取 cookie 方法 + * + * @description 这里用内存对象来维护一个 在线 cookies + * @param {string} url + * @returns + * @memberof Request + */ + Request.prototype.getCookieString = function (url) { + if (this.config && this.config.cookie) { + return this.config.cookie.origin(url); + } + else { + return ""; + } + }; + Request.prototype.cookie = function (url, key) { + if (this.config && this.config.cookie) { + return this.config.cookie.get(url, key); + } + else { + return ""; + } + }; + return Request; +}()); +export { Request }; diff --git a/miniprogram_npm/signalr-for-wx/wx-request/model.js b/miniprogram_npm/signalr-for-wx/wx-request/model.js new file mode 100644 index 0000000..88ca256 --- /dev/null +++ b/miniprogram_npm/signalr-for-wx/wx-request/model.js @@ -0,0 +1,2 @@ +export { RequestMethod } from "./model/RequestMethod"; +export { ResponseType } from "./model/ResponseType"; diff --git a/demos/radio/group/group.wxss b/miniprogram_npm/signalr-for-wx/wx-request/model/RequestConfig.js similarity index 100% rename from demos/radio/group/group.wxss rename to miniprogram_npm/signalr-for-wx/wx-request/model/RequestConfig.js diff --git a/miniprogram_npm/signalr-for-wx/wx-request/model/RequestMethod.js b/miniprogram_npm/signalr-for-wx/wx-request/model/RequestMethod.js new file mode 100644 index 0000000..9f89dfe --- /dev/null +++ b/miniprogram_npm/signalr-for-wx/wx-request/model/RequestMethod.js @@ -0,0 +1,10 @@ +/** + * 请求类型 + */ +export var RequestMethod; +(function (RequestMethod) { + RequestMethod["GET"] = "GET"; + RequestMethod["POST"] = "POST"; + RequestMethod["PUT"] = "PUT"; + RequestMethod["DELETE"] = "DELETE"; +})(RequestMethod || (RequestMethod = {})); diff --git a/pages/action-sheet/align/index.wxss b/miniprogram_npm/signalr-for-wx/wx-request/model/RequestOption.js similarity index 100% rename from pages/action-sheet/align/index.wxss rename to miniprogram_npm/signalr-for-wx/wx-request/model/RequestOption.js diff --git a/pages/action-sheet/grid/index.wxss b/miniprogram_npm/signalr-for-wx/wx-request/model/ResponseOptions.js similarity index 100% rename from pages/action-sheet/grid/index.wxss rename to miniprogram_npm/signalr-for-wx/wx-request/model/ResponseOptions.js diff --git a/miniprogram_npm/signalr-for-wx/wx-request/model/ResponseType.js b/miniprogram_npm/signalr-for-wx/wx-request/model/ResponseType.js new file mode 100644 index 0000000..4d0b601 --- /dev/null +++ b/miniprogram_npm/signalr-for-wx/wx-request/model/ResponseType.js @@ -0,0 +1,20 @@ +/** + * 响应数据类型 + * + * @interface ResponseType + */ +export var ResponseType; +(function (ResponseType) { + /** + * JSON 类型 + */ + ResponseType["JSON"] = "json"; + /** + * 文本类型(跳过返回数据处理链,直接返回) + */ + ResponseType["TEXT"] = "text"; + /** + * 二进制数据 + */ + ResponseType["ARRAY_BUFFER"] = "arraybuffer"; +})(ResponseType || (ResponseType = {})); diff --git a/miniprogram_npm/tdesign-miniprogram/.wechatide.ib.json b/miniprogram_npm/tdesign-miniprogram/.wechatide.ib.json new file mode 100644 index 0000000..461d4e1 --- /dev/null +++ b/miniprogram_npm/tdesign-miniprogram/.wechatide.ib.json @@ -0,0 +1,3895 @@ +{ + "key": "TDesign", + "label": "Tdesign", + "components": { + "t-action-sheet": { + "key": "t-action-sheet", + "label": "动作面板", + "icon": "https://tdesign.gtimg.com/site/miniprogram-doc/doc-actionsheet.png", + "properties": [ + { + "key": "cancelText", + "type": ["String"], + "desc": "设置取消按钮的文本", + "label": "" + }, + { + "key": "count", + "type": ["Number"], + "desc": "设置每页展示菜单的数量,仅当 type=grid 时有效", + "label": "" + }, + { + "key": "items", + "type": ["Array"], + "desc": "菜单项", + "label": "" + }, + { + "key": "showCancel", + "type": ["Boolean"], + "desc": "是否显示取消按钮", + "label": "" + }, + { + "key": "theme", + "type": ["String"], + "desc": "展示类型,列表和表格形式展示", + "label": "" + }, + { + "key": "visible", + "type": ["Boolean"], + "desc": "显示与隐藏", + "label": "" + } + ], + "events": [ + { + "key": "bind:cancel", + "desc": "点击取消按钮时触发", + "label": "" + }, + { + "key": "bind:close", + "desc": "关闭时触发", + "label": "" + }, + { + "key": "bind:selected", + "desc": "选择菜单项时触发", + "label": "" + } + ], + "tpl": "", + "path": "./action-sheet/action-sheet" + }, + "t-avatar-group": { + "key": "t-avatar-group", + "label": "头像组", + "icon": "https://tdesign.gtimg.com/site/miniprogram-doc/doc-avatar.png", + "properties": [ + { + "key": "cascading", + "type": ["String"], + "desc": "图片之间的层叠关系,可选值:左侧图片在上和右侧图片在上", + "label": "" + }, + { + "key": "collapseAvatar", + "type": ["String"], + "desc": "头像数量超出时,会出现一个头像折叠元素。该元素内容可自定义。默认为 `+N`。示例:`+5`,`...`, `更多`", + "label": "" + }, + { + "key": "max", + "type": ["Number"], + "desc": "能够同时显示的最多头像数量", + "label": "" + }, + { + "key": "size", + "type": ["String"], + "desc": "尺寸,示例值:small/medium/large/24px/38px 等。优先级低于 Avatar.size", + "label": "" + } + ], + "externalClasses": ["t-class", "t-class-image", "t-class-content"], + "tpl": "", + "require": { + "t-avatar": "./avatar/avatar" + }, + "path": "./avatar/avatar-group" + }, + "t-avatar": { + "key": "t-avatar", + "label": "头像", + "icon": "https://tdesign.gtimg.com/site/miniprogram-doc/doc-avatar.png", + "properties": [ + { + "key": "alt", + "type": ["String"], + "desc": "头像替换文本,仅当图片加载失败时有效", + "label": "" + }, + { + "key": "badgeProps", + "type": ["Object"], + "desc": "头像右上角提示信息,继承 Badge 组件的全部特性。如:小红点,或者数字", + "label": "" + }, + { + "key": "hideOnLoadFailed", + "type": ["Boolean"], + "desc": "加载失败时隐藏图片", + "label": "" + }, + { + "key": "icon", + "type": ["String"], + "desc": "图标", + "label": "" + }, + { + "key": "image", + "type": ["String"], + "desc": "图片地址", + "label": "" + }, + { + "key": "shape", + "type": ["String"], + "desc": "形状", + "label": "" + }, + { + "key": "size", + "type": ["String"], + "desc": "尺寸,示例值:small/medium/large/24px/38px 等,默认为 large", + "label": "" + } + ], + "externalClasses": ["t-class"], + "events": [ + { + "key": "bind:error", + "desc": "图片加载失败时触发", + "label": "" + } + ], + "tpl": "", + "path": "./avatar/avatar" + }, + "t-back-top": { + "key": "t-back-top", + "label": "回到顶部", + "icon": "https://tdesign.gtimg.com/site/miniprogram-doc/doc-backtop.png", + "properties": [ + { + "key": "fixed", + "type": ["Boolean"], + "desc": "是否绝对定位固定到屏幕右下方", + "label": "" + }, + { + "key": "icon", + "type": ["String"], + "desc": "图标", + "label": "" + }, + { + "key": "text", + "type": ["String"], + "desc": "文案", + "label": "" + }, + { + "key": "theme", + "type": ["String"], + "desc": "预设的样式类型", + "label": "" + } + ], + "externalClasses": ["t-class", "t-class-icon", "t-class-text"], + "events": [ + { + "key": "bind:to-top", + "desc": "点击触发", + "label": "" + } + ], + "tpl": "", + "path": "./back-top/back-top" + }, + "t-badge": { + "key": "t-badge", + "label": "徽标数", + "icon": "https://tdesign.gtimg.com/site/miniprogram-doc/doc-badge.png", + "properties": [ + { + "key": "color", + "type": ["String"], + "desc": "颜色", + "label": "" + }, + { + "key": "content", + "type": ["String"], + "desc": "徽标内容,示例:`content='自定义内容'`。也可以使用默认插槽定义", + "label": "" + }, + { + "key": "count", + "type": ["String", "Number"], + "desc": "徽标右上角内容。可以是数字,也可以是文字。如:'new'/3/99+。特殊:值为空表示使用插槽渲染", + "label": "" + }, + { + "key": "dot", + "type": ["Boolean"], + "desc": "是否为红点", + "label": "" + }, + { + "key": "maxCount", + "type": ["Number"], + "desc": "封顶的数字值", + "label": "" + }, + { + "key": "offset", + "type": ["Array"], + "desc": "设置状态点的位置偏移,示例:[-10, 20] 或 ['10em', '8rem']", + "label": "" + }, + { + "key": "shape", + "type": ["String"], + "desc": "形状", + "label": "" + }, + { + "key": "showZero", + "type": ["Boolean"], + "desc": "当数值为 0 时,是否展示徽标", + "label": "" + }, + { + "key": "size", + "type": ["String"], + "desc": "尺寸", + "label": "" + } + ], + "externalClasses": ["t-class", "t-class-content", "t-class-count"], + "tpl": "", + "path": "./badge/badge" + }, + "t-button": { + "key": "t-button", + "label": "按钮", + "icon": "https://tdesign.gtimg.com/site/miniprogram-doc/doc-button.png", + "properties": [ + { + "key": "block", + "type": ["Boolean"], + "desc": "是否为块级元素", + "label": "" + }, + { + "key": "content", + "type": ["String"], + "desc": "按钮内容", + "label": "" + }, + { + "key": "customDataset", + "type": ["Object"], + "desc": "自定义 dataset,可通过 event.currentTarget.dataset.custom 获取", + "label": "" + }, + { + "key": "disabled", + "type": ["Boolean"], + "desc": "是否禁用按钮", + "label": "" + }, + { + "key": "ghost", + "type": ["Boolean"], + "desc": "是否为幽灵按钮(镂空按钮)", + "label": "" + }, + { + "key": "icon", + "type": ["String"], + "desc": "图标名称", + "label": "" + }, + { + "key": "loading", + "type": ["Boolean"], + "desc": "是否显示为加载状态", + "label": "" + }, + { + "key": "shape", + "type": ["String"], + "desc": "按钮形状,有 4 种:长方形、正方形、圆角长方形、圆形", + "label": "" + }, + { + "key": "size", + "type": ["String"], + "desc": "组件尺寸", + "label": "" + }, + { + "key": "theme", + "type": ["String"], + "desc": "组件风格,依次为品牌色、危险色", + "label": "" + }, + { + "key": "type", + "type": ["String"], + "desc": "同小程序的 formType", + "label": "" + }, + { + "key": "variant", + "type": ["String"], + "desc": "按钮形式,基础、线框、文字", + "label": "" + } + ], + "externalClasses": ["t-class", "t-class-icon"], + "events": [ + { + "key": "bind:click", + "desc": "点击时触发", + "label": "" + } + ], + "tpl": "", + "path": "./button/button" + }, + "t-cell-group": { + "key": "t-cell-group", + "label": "单元格组", + "icon": "https://tdesign.gtimg.com/site/miniprogram-doc/doc-cell.png", + "properties": [ + { + "key": "bordered", + "type": ["Boolean"], + "desc": "是否显示组边框", + "label": "" + }, + { + "key": "title", + "type": ["String"], + "desc": "单元格组标题", + "label": "" + } + ], + "externalClasses": ["t-class"], + "tpl": "", + "require": { + "t-cell": "./cell/cell" + }, + "path": "./cell-group/cell-group" + }, + "t-cell": { + "key": "t-cell", + "label": "单元格", + "icon": "https://tdesign.gtimg.com/site/miniprogram-doc/doc-cell.png", + "properties": [ + { + "key": "align", + "type": ["String"], + "desc": "内容的对齐方式,默认居中对齐", + "label": "" + }, + { + "key": "arrow", + "type": ["Boolean"], + "desc": "是否显示右侧箭头", + "label": "" + }, + { + "key": "bordered", + "type": ["Boolean"], + "desc": "是否显示下边框", + "label": "" + }, + { + "key": "description", + "type": ["String"], + "desc": "下方内容描述", + "label": "" + }, + { + "key": "hover", + "type": ["Boolean"], + "desc": "是否开启点击反馈", + "label": "" + }, + { + "key": "image", + "type": ["String"], + "desc": "主图", + "label": "" + }, + { + "key": "jumpType", + "type": ["String"], + "desc": "链接跳转类型", + "label": "" + }, + { + "key": "leftIcon", + "type": ["String"], + "desc": "左侧图标,出现在单元格标题的左侧", + "label": "" + }, + { + "key": "note", + "type": ["String"], + "desc": "和标题同行的说明文字", + "label": "" + }, + { + "key": "required", + "type": ["Boolean"], + "desc": "是否显示表单必填星号", + "label": "" + }, + { + "key": "rightIcon", + "type": ["String"], + "desc": "最右侧图标", + "label": "" + }, + { + "key": "title", + "type": ["String"], + "desc": "标题", + "label": "" + }, + { + "key": "url", + "type": ["String"], + "desc": "点击后跳转链接地址。如果值为空,则表示不需要跳转", + "label": "" + } + ], + "externalClasses": [ + "t-class", + "t-class-title", + "t-class-note", + "t-class-description", + "t-class-thumb", + "t-class-hover", + "t-class-left", + "t-class-right" + ], + "events": [ + { + "key": "bind:click", + "desc": "右侧内容", + "label": "" + } + ], + "tpl": "", + "path": "./cell/cell" + }, + "t-check-tag": { + "key": "t-check-tag", + "label": "可选标签", + "icon": "", + "properties": [ + { + "key": "checked", + "type": ["Boolean"], + "desc": "标签选中的状态,默认风格(theme=default)才有选中态", + "label": "" + }, + { + "key": "closable", + "type": ["Boolean"], + "desc": "标签是否可关闭", + "label": "" + }, + { + "key": "content", + "type": ["String", "Number"], + "desc": "组件子元素", + "label": "" + }, + { + "key": "disabled", + "type": ["Boolean"], + "desc": "标签禁用态,失效标签不能触发事件。默认风格(theme=default)才有禁用态", + "label": "" + }, + { + "key": "icon", + "type": ["String"], + "desc": "标签中的图标,可自定义图标呈现", + "label": "" + }, + { + "key": "shape", + "type": ["String"], + "desc": "标签类型,有三种:方形、圆角方形、标记型", + "label": "" + }, + { + "key": "size", + "type": ["String"], + "desc": "标签尺寸", + "label": "" + } + ], + "events": [ + { + "key": "bind:change", + "desc": "组件子元素", + "label": "" + }, + { + "key": "bind:click", + "desc": "点击标签时触发", + "label": "" + } + ], + "tpl": "check tag", + "path": "./check-tag/check-tag" + }, + "t-checkbox-group": { + "key": "t-checkbox-group", + "label": "多选框组", + "icon": "https://tdesign.gtimg.com/site/miniprogram-doc/doc-checkbox.png", + "properties": [ + { + "key": "disabled", + "type": ["Boolean"], + "desc": "是否禁用组件", + "label": "" + }, + { + "key": "max", + "type": ["Number"], + "desc": "支持最多选中的数量", + "label": "" + }, + { + "key": "name", + "type": ["String"], + "desc": "统一设置内部复选框 HTML 属性", + "label": "" + }, + { + "key": "options", + "type": ["Array"], + "desc": "以配置形式设置子元素。示例1:`['北京', '上海']` ,示例2: `[{ label: '全选', checkAll: true }, { label: '上海', value: 'shanghai' }]`。checkAll 值为 true 表示当前选项为「全选选项」", + "label": "" + }, + { + "key": "value", + "type": ["Array"], + "desc": "选中值", + "label": "" + } + ], + "events": [ + { + "key": "bind:change", + "desc": "值变化时触发。`context.current` 表示当前变化的数据项,如果是全选则为空;`context.type` 表示引起选中数据变化的是选中或是取消选中,`context.option` 表示当前变化的数据项", + "label": "" + } + ], + "tpl": "", + "require": { + "t-checkbox": "./checkbox/checkbox" + }, + "path": "./checkbox-group/checkbox-group" + }, + "t-checkbox": { + "key": "t-checkbox", + "label": "多选框", + "icon": "https://tdesign.gtimg.com/site/miniprogram-doc/doc-checkbox.png", + "properties": [ + { + "key": "align", + "type": ["String"], + "desc": "多选框和内容相对位置", + "label": "" + }, + { + "key": "checkAll", + "type": ["Boolean"], + "desc": "用于标识是否为「全选选项」。单独使用无效,需在 CheckboxGroup 中使用", + "label": "" + }, + { + "key": "checked", + "type": ["Boolean"], + "desc": "是否选中", + "label": "" + }, + { + "key": "color", + "type": ["String"], + "desc": "多选框颜色", + "label": "" + }, + { + "key": "content", + "type": ["String"], + "desc": "多选框内容", + "label": "" + }, + { + "key": "contentDisabled", + "type": ["Boolean"], + "desc": "是否禁用组件内容(content)触发选中", + "label": "" + }, + { + "key": "disabled", + "type": ["Boolean"], + "desc": "是否禁用组件", + "label": "" + }, + { + "key": "icon", + "type": ["Array"], + "desc": "自定义选中图标和非选中图标。示例:[选中态图标地址,非选中态图标地址]", + "label": "" + }, + { + "key": "indeterminate", + "type": ["Boolean"], + "desc": "是否为半选", + "label": "" + }, + { + "key": "label", + "type": ["String"], + "desc": "主文案", + "label": "" + }, + { + "key": "maxContentRow", + "type": ["Number"], + "desc": "内容最大行数限制", + "label": "" + }, + { + "key": "maxLabelRow", + "type": ["Number"], + "desc": "主文案最大行数限制", + "label": "" + }, + { + "key": "name", + "type": ["String"], + "desc": "HTML 元素原生属性", + "label": "" + }, + { + "key": "readonly", + "type": ["Boolean"], + "desc": "只读状态", + "label": "" + }, + { + "key": "value", + "type": ["String", "Number"], + "desc": "多选框的值", + "label": "" + } + ], + "externalClasses": ["t-class", "t-class-icon", "t-class-label", "t-class-content", "t-class-border"], + "events": [ + { + "key": "bind:change", + "desc": "值变化时触发", + "label": "" + } + ], + "tpl": "", + "path": "./checkbox/checkbox" + }, + "t-collapse-panel": { + "key": "t-collapse-panel", + "label": "折叠面板", + "icon": "", + "properties": [ + { + "key": "content", + "type": ["String"], + "desc": "折叠面板内容", + "label": "" + }, + { + "key": "disabled", + "type": ["Boolean"], + "desc": "禁止当前面板展开,优先级大于 Collapse 的同名属性", + "label": "" + }, + { + "key": "expandIcon", + "type": ["Boolean"], + "desc": "当前折叠面板展开图标,优先级大于 Collapse 的同名属性", + "label": "" + }, + { + "key": "header", + "type": ["String"], + "desc": "面板头内容", + "label": "" + }, + { + "key": "headerRightContent", + "type": ["String"], + "desc": "面板头的右侧区域,一般用于呈现面板操作", + "label": "" + }, + { + "key": "value", + "type": ["String", "Number"], + "desc": "当前面板唯一标识,如果值为空则取当前面下标兜底作为唯一标识", + "label": "" + } + ], + "tpl": "此处可自定义内容", + "path": "./collapse/collapse-panel" + }, + "t-collapse": { + "key": "t-collapse", + "label": "折叠", + "icon": "https://tdesign.gtimg.com/site/miniprogram-doc/doc-collapse.png", + "properties": [ + { + "key": "defaultExpandAll", + "type": ["Boolean"], + "desc": "默认是否展开全部", + "label": "" + }, + { + "key": "disabled", + "type": ["Boolean"], + "desc": "是否禁用面板展开/收起操作", + "label": "" + }, + { + "key": "expandIcon", + "type": ["Boolean"], + "desc": "展开图标。值为 undefined 或 false 则不显示展开图标;值为 true 显示默认图标;值类型为函数,则表示完全自定义展开图标", + "label": "" + }, + { + "key": "expandMutex", + "type": ["Boolean"], + "desc": "每个面板互斥展开,每次只展开一个面板", + "label": "" + }, + { + "key": "value", + "type": ["Array"], + "desc": "展开的面板集合", + "label": "" + } + ], + "events": [ + { + "key": "bind:change", + "desc": "切换面板时触发,返回变化的值", + "label": "" + } + ], + "tpl": "此处可自定义内容", + "require": { + "t-collapse-panel": "./collapse/collapse-panel" + }, + "path": "./collapse/collapse" + }, + "t-date-time-picker": { + "key": "t-date-time-picker", + "label": "日期时间选择器", + "icon": "https://tdesign.gtimg.com/site/miniprogram-doc/doc-datetimepicker.png", + "properties": [ + { + "key": "cancelBtn", + "type": ["String"], + "desc": "取消按钮文字", + "label": "" + }, + { + "key": "confirmBtn", + "type": ["String"], + "desc": "确定按钮文字", + "label": "" + }, + { + "key": "end", + "type": ["String", "Number"], + "desc": "选择器的结束时间", + "label": "" + }, + { + "key": "footer", + "type": ["String"], + "desc": "底部内容", + "label": "" + }, + { + "key": "format", + "type": ["String"], + "desc": "用于格式化日期,[详细文档](https://day.js.org/docs/en/display/format)", + "label": "" + }, + { + "key": "header", + "type": ["Boolean"], + "desc": "头部内容。值为 true 显示空白头部,值为 false 不显示任何内容,值类型为 TNode 表示自定义头部内容", + "label": "" + }, + { + "key": "mode", + "type": ["String", "Array"], + "desc": "选择器模式,用于表示可以选择到哪一个层级。【示例一】year 或者 ['year'] 表示纯日期选择器,只能选择到年份,只显示年份。【示例二】'hour' 或 ['hour'] 表示纯时间选择器,只能选择到小时维度。【示例三】['year', 'month', 'date', 'hour', 'minute'] 表示,日期和时间 混合选择器,可以选择到具体哪一分钟,显示全部时间:年/月/日/时/分", + "label": "" + }, + { + "key": "showWeek", + "type": ["Boolean"], + "desc": "【开发中】是否在日期旁边显示周几(如周一,周二,周日等)", + "label": "" + }, + { + "key": "start", + "type": ["String", "Number"], + "desc": "选择器的开始时间", + "label": "" + }, + { + "key": "title", + "type": ["String"], + "desc": "标题", + "label": "" + }, + { + "key": "value", + "type": ["String", "Number"], + "desc": "选中值", + "label": "" + }, + { + "key": "visible", + "type": ["Boolean"], + "desc": "是否显示", + "label": "" + } + ], + "externalClasses": ["t-class", "t-class-confirm", "t-class-cancel", "t-class-title"], + "events": [ + { + "key": "bind:cancel", + "desc": "取消按钮点击时触发", + "label": "" + }, + { + "key": "bind:change", + "desc": "选中值发生变化时触发", + "label": "" + }, + { + "key": "bind:column-change", + "desc": "每一列选中数据变化时触发", + "label": "" + }, + { + "key": "bind:confirm", + "desc": "确认按钮点击时触发", + "label": "" + } + ], + "tpl": "", + "path": "./date-time-picker/date-time-picker" + }, + "t-dialog": { + "key": "t-dialog", + "label": "对话框", + "icon": "https://tdesign.gtimg.com/site/miniprogram-doc/doc-dialog.png", + "properties": [ + { + "key": "actions", + "type": ["Array"], + "desc": "操作栏", + "label": "" + }, + { + "key": "buttonLayout", + "type": ["String"], + "desc": "多按钮排列方式", + "label": "" + }, + { + "key": "cancelBtn", + "type": ["String", "Object"], + "desc": "取消按钮,可自定义。值为 null 则不显示取消按钮。值类型为字符串,则表示自定义按钮文本,值类型为 Object 则表示透传 Button 组件属性。使用 TNode 自定义按钮时,需自行控制取消事件", + "label": "" + }, + { + "key": "closeOnOverlayClick", + "type": ["Boolean"], + "desc": "点击蒙层时是否触发关闭事件", + "label": "" + }, + { + "key": "confirmBtn", + "type": ["String", "Object"], + "desc": "确认按钮。值为 null 则不显示确认按钮。值类型为字符串,则表示自定义按钮文本,值类型为 Object 则表示透传 Button 组件属性。使用 TNode 自定义按钮时,需自行控制确认事件", + "label": "" + }, + { + "key": "content", + "type": ["String"], + "desc": "内容", + "label": "" + }, + { + "key": "preventScrollThrough", + "type": ["Boolean"], + "desc": "防止滚动穿透", + "label": "" + }, + { + "key": "showInAttachedElement", + "type": ["Boolean"], + "desc": "【开发中】仅在挂载元素中显示抽屉,默认在浏览器可视区域显示。父元素需要有定位属性,如:position: relative", + "label": "" + }, + { + "key": "showOverlay", + "type": ["Boolean"], + "desc": "是否显示遮罩层", + "label": "" + }, + { + "key": "title", + "type": ["String"], + "desc": "标题", + "label": "" + }, + { + "key": "visible", + "type": ["Boolean"], + "desc": "控制对话框是否显示", + "label": "" + }, + { + "key": "zIndex", + "type": ["Number"], + "desc": "对话框层级,Web 侧样式默认为 2500,移动端和小程序样式默认为 1500", + "label": "" + } + ], + "externalClasses": ["t-class", "t-class-content", "t-class-confirm", "t-class-cancel"], + "events": [ + { + "key": "bind:cancel", + "desc": "如果“取消”按钮存在,则点击“取消”按钮时触发,同时触发关闭事件", + "label": "" + }, + { + "key": "bind:close", + "desc": "关闭事件,点击 取消按钮 或 点击蒙层 时触发", + "label": "" + }, + { + "key": "bind:overlay-click", + "desc": "如果蒙层存在,点击蒙层时触发", + "label": "" + } + ], + "tpl": "", + "path": "./dialog/dialog" + }, + "t-divider": { + "key": "t-divider", + "label": "分割线", + "icon": "https://tdesign.gtimg.com/site/miniprogram-doc/doc-divider.png", + "properties": [ + { + "key": "align", + "type": ["String"], + "desc": "文本位置(仅在水平分割线有效)", + "label": "" + }, + { + "key": "content", + "type": ["String"], + "desc": "子元素", + "label": "" + }, + { + "key": "dashed", + "type": ["Boolean"], + "desc": "是否虚线(仅在水平分割线有效)", + "label": "" + }, + { + "key": "layout", + "type": ["String"], + "desc": "分隔线类型有两种:水平和垂直", + "label": "" + }, + { + "key": "lineColor", + "type": ["String"], + "desc": "分隔线颜色", + "label": "" + } + ], + "externalClasses": ["t-class", "t-class-line", "t-class-content"], + "tpl": "", + "path": "./divider/divider" + }, + "t-drawer": { + "key": "t-drawer", + "label": "模态抽屉", + "icon": "https://tdesign.gtimg.com/site/miniprogram-doc/doc-drawer.png", + "properties": [ + { + "key": "closeOnOverlayClick", + "type": ["Boolean"], + "desc": "点击蒙层时是否触发抽屉关闭事件", + "label": "" + }, + { + "key": "destroyOnClose", + "type": ["Boolean"], + "desc": "抽屉关闭时是否销毁节点", + "label": "" + }, + { + "key": "items", + "type": ["Array"], + "desc": "抽屉里的列表项", + "label": "" + }, + { + "key": "placement", + "type": ["String"], + "desc": "抽屉方向", + "label": "" + }, + { + "key": "showOverlay", + "type": ["Boolean"], + "desc": "是否显示遮罩层", + "label": "" + }, + { + "key": "visible", + "type": ["Boolean"], + "desc": "组件是否可见", + "label": "" + }, + { + "key": "zIndex", + "type": ["Number"], + "desc": "抽屉层级,样式默认为 1500", + "label": "" + } + ], + "events": [ + { + "key": "bind:close", + "desc": "关闭事件,取消按钮点击时、关闭按钮点击时、点击蒙层时均会触发", + "label": "" + }, + { + "key": "bind:item-click", + "desc": "点击抽屉里的列表项", + "label": "" + }, + { + "key": "bind:overlay-click", + "desc": "如果蒙层存在,点击蒙层时触发", + "label": "" + } + ], + "tpl": "", + "path": "./drawer/drawer" + }, + "t-dropdown-item": { + "key": "t-dropdown-item", + "label": "下拉菜单子项", + "icon": "https://tdesign.gtimg.com/site/miniprogram-doc/doc-dropdownmenu.png", + "properties": [ + { + "key": "disabled", + "type": ["Boolean"], + "desc": "是否禁用", + "label": "" + }, + { + "key": "label", + "type": ["String"], + "desc": "标题", + "label": "" + }, + { + "key": "multiple", + "type": ["Boolean"], + "desc": "是否多选", + "label": "" + }, + { + "key": "options", + "type": ["Array"], + "desc": "选项数据", + "label": "" + } + ], + "tpl": "", + "path": "./dropdown-menu/dropdown-item" + }, + "t-dropdown-menu": { + "key": "t-dropdown-menu", + "label": "下拉菜单", + "icon": "https://tdesign.gtimg.com/site/miniprogram-doc/doc-dropdownmenu.png", + "properties": [ + { + "key": "activeColor", + "type": ["String"], + "desc": "【讨论中】菜单标题和选项的选中态颜色", + "label": "" + }, + { + "key": "closeOnClickOverlay", + "type": ["Boolean"], + "desc": "是否在点击遮罩层后关闭菜单", + "label": "" + }, + { + "key": "duration", + "type": ["String", "Number"], + "desc": "动画时长", + "label": "" + }, + { + "key": "showOverlay", + "type": ["Boolean"], + "desc": "是否显示遮罩层", + "label": "" + }, + { + "key": "zIndex", + "type": ["Number"], + "desc": "菜单栏 z-index 层级", + "label": "" + } + ], + "tpl": "", + "require": { + "t-dropdown-item": "./dropdown-menu/dropdown-item" + }, + "path": "./dropdown-menu/dropdown-menu" + }, + "t-empty": { + "key": "t-empty", + "label": "空状态", + "icon": "https://tdesign.gtimg.com/site/miniprogram-doc/doc-empty.png", + "properties": [ + { + "key": "action", + "type": ["String"], + "desc": "操作按钮", + "label": "" + }, + { + "key": "description", + "type": ["String"], + "desc": "描述文字", + "label": "" + }, + { + "key": "icon", + "type": ["String"], + "desc": "图标名称", + "label": "" + }, + { + "key": "image", + "type": ["String"], + "desc": "图片地址", + "label": "" + } + ], + "externalClasses": ["t-class", "t-class-description", "t-class-image", "t-class-actions"], + "tpl": "", + "path": "./empty/empty" + }, + "t-fab": { + "key": "t-fab", + "label": "悬浮按钮", + "icon": "https://tdesign.gtimg.com/site/miniprogram-doc/doc-fab.png", + "properties": [ + { + "key": "buttonProps", + "type": ["Object"], + "desc": "透传至 Button 组件", + "label": "" + }, + { + "key": "icon", + "type": ["String"], + "desc": "图标", + "label": "" + }, + { + "key": "style", + "type": ["String"], + "desc": "悬浮按钮的样式,常用于调整位置", + "label": "" + }, + { + "key": "text", + "type": ["String"], + "desc": "文本内容", + "label": "" + } + ], + "events": [ + { + "key": "bind:click", + "desc": "悬浮按钮点击事件", + "label": "" + } + ], + "tpl": "", + "path": "./fab/fab" + }, + "t-footer": { + "key": "t-footer", + "label": "布局-底部内容", + "icon": "https://tdesign.gtimg.com/site/miniprogram-doc/doc-footer.png", + "properties": [ + { + "key": "copyright", + "type": ["String"], + "desc": "版权信息,type 为`text`生效", + "label": "" + }, + { + "key": "logo", + "type": ["Object"], + "desc": "图标配置,type 为`logo`生效。`logo.icon` 表示图标链接地址,`logo.title` 表示标题文本,`logo.url` 表示链接跳转地址", + "label": "" + }, + { + "key": "textLinkList", + "type": ["Array"], + "desc": "链接列表,type 为`text`生效。name 表示链接名称, url 表示链接 page 路径,目前只支持小程序内部跳转,openType 表示跳转方式", + "label": "" + }, + { + "key": "theme", + "type": ["String"], + "desc": "页脚展示类型", + "label": "" + } + ], + "tpl": "", + "path": "./footer/footer" + }, + "t-grid-item": { + "key": "t-grid-item", + "label": "宫格子项", + "icon": "https://tdesign.gtimg.com/site/miniprogram-doc/doc-grid.png", + "properties": [ + { + "key": "badgeProps", + "type": ["Object"], + "desc": "头像右上角提示信息,继承 Badge 组件的全部特性。如:小红点,或者数字", + "label": "" + }, + { + "key": "description", + "type": ["String"], + "desc": "文本以外的更多描述,辅助信息。可以通过 Props 传入文本,也可以自定义标题节点", + "label": "" + }, + { + "key": "image", + "type": ["String"], + "desc": "图片,可以是图片地址,也可以自定义图片节点", + "label": "" + }, + { + "key": "jumpType", + "type": ["String"], + "desc": "链接跳转类型", + "label": "" + }, + { + "key": "layout", + "type": ["String"], + "desc": "内容布局方式", + "label": "" + }, + { + "key": "text", + "type": ["String"], + "desc": "文本,可以通过 Props 传入文本,也可以自定义标题节点", + "label": "" + }, + { + "key": "url", + "type": ["String"], + "desc": "点击后的跳转链接", + "label": "" + } + ], + "externalClasses": ["t-class", "t-class-image", "t-class-text", "t-class-description"], + "tpl": "", + "path": "./grid-item/grid-item" + }, + "t-grid": { + "key": "t-grid", + "label": "栅格", + "icon": "https://tdesign.gtimg.com/site/miniprogram-doc/doc-grid.png", + "properties": [ + { + "key": "align", + "type": ["String"], + "desc": "内容对齐方式", + "label": "" + }, + { + "key": "border", + "type": ["Boolean", "Object"], + "desc": "边框,默认不显示。值为 true 则显示默认边框,值类型为 object 则表示自定义边框样式", + "label": "" + }, + { + "key": "column", + "type": ["Number"], + "desc": "每一行的列数量", + "label": "" + }, + { + "key": "gutter", + "type": ["Number"], + "desc": "间隔大小", + "label": "" + }, + { + "key": "hover", + "type": ["Boolean"], + "desc": "是否开启点击反馈", + "label": "" + } + ], + "externalClasses": ["t-class"], + "tpl": "", + "require": { + "t-grid-item": "./grid-item/grid-item" + }, + "path": "./grid/grid" + }, + "t-icon": { + "key": "t-icon", + "label": "图标", + "icon": "https://tdesign.gtimg.com/site/miniprogram-doc/doc-icon.png", + "properties": [ + { + "key": "classPrefix", + "type": ["String"], + "desc": "自定义icon前缀", + "label": "" + }, + { + "key": "color", + "type": ["String"], + "desc": "图标颜色", + "label": "" + }, + { + "key": "style", + "type": ["String"], + "desc": "自定义样式", + "label": "" + }, + { + "key": "name", + "type": ["String"], + "desc": "图标名称", + "label": "" + }, + { + "key": "size", + "type": ["String", "Number"], + "desc": "图标名称", + "label": "" + } + ], + "tpl": "", + "path": "./icon/icon" + }, + "t-image": { + "key": "t-image", + "label": "图片", + "icon": "https://tdesign.gtimg.com/site/miniprogram-doc/doc-image.png", + "properties": [ + { + "key": "error", + "type": ["String"], + "desc": "加载失败时显示的内容。值为 `default` 则表示使用默认加载失败风格;值为空或者 `slot` 表示使用插槽渲染,插槽名称为 `error`;值为其他则表示普通文本内容,如“加载失败”", + "label": "" + }, + { + "key": "lazy", + "type": ["Boolean"], + "desc": "是否开启图片懒加载", + "label": "" + }, + { + "key": "loading", + "type": ["String"], + "desc": "加载态内容。值为 `default` 则表示使用默认加载中风格;值为空或者 `slot` 表示使用插槽渲染,插槽名称为 `loading`;值为其他则表示普通文本内容,如“加载中”", + "label": "" + }, + { + "key": "shape", + "type": ["String"], + "desc": "图片圆角类型", + "label": "" + }, + { + "key": "src", + "type": ["String"], + "desc": "图片链接", + "label": "" + } + ], + "externalClasses": ["t-class", "t-class-load"], + "events": [ + { + "key": "bind:error", + "desc": "图片加载失败时触发", + "label": "" + }, + { + "key": "bind:load", + "desc": "图片加载完成时触发", + "label": "" + } + ], + "tpl": "", + "path": "./image/image" + }, + "t-indexes": { + "key": "t-indexes", + "label": "索引", + "icon": "https://tdesign.gtimg.com/site/miniprogram-doc/doc-indexes.png", + "properties": [ + { + "key": "height", + "type": ["Number"], + "desc": "列表高度,未设置默认占满设备高度", + "label": "" + }, + { + "key": "list", + "type": ["Array"], + "desc": "索引列表的列表数据。每个元素包含三个子元素,index(string):索引值,例如1,2,3,...或A,B,C等;title(string): 索引标题,可不填将默认设为索引值;children(Array<{title: string}>): 子元素列表,title为子元素的展示文案。", + "label": "" + }, + { + "key": "sticky", + "type": ["Boolean"], + "desc": "索引是否吸顶,默认为true", + "label": "" + } + ], + "events": [ + { + "key": "bind:select", + "desc": "点击行元素时触发事件", + "label": "" + } + ], + "tpl": "", + "path": "./indexes/indexes" + }, + "t-input": { + "key": "t-input", + "label": "输入框", + "icon": "https://tdesign.gtimg.com/site/miniprogram-doc/doc-input.png", + "properties": [ + { + "key": "align", + "type": ["String"], + "desc": "文本内容位置,居左/居中/居右", + "label": "" + }, + { + "key": "borderless", + "type": ["Boolean"], + "desc": "【讨论中】是否开启无边框模式", + "label": "" + }, + { + "key": "clearable", + "type": ["Boolean"], + "desc": "是否可清空", + "label": "" + }, + { + "key": "disabled", + "type": ["Boolean"], + "desc": "是否禁用输入框", + "label": "" + }, + { + "key": "errorMessage", + "type": ["String"], + "desc": "错误提示文本,值为空不显示(废弃属性,如果需要,请更为使用 status 和 tips)", + "label": "" + }, + { + "key": "format", + "type": ["String"], + "desc": "【开发中】指定输入框展示值的格式", + "label": "" + }, + { + "key": "label", + "type": ["String"], + "desc": "左侧文本", + "label": "" + }, + { + "key": "maxcharacter", + "type": ["Number"], + "desc": "用户最多可以输入的字符个数,一个中文汉字表示两个字符长度。`maxcharacter` 和 `maxlength` 二选一使用", + "label": "" + }, + { + "key": "maxlength", + "type": ["Number"], + "desc": "用户最多可以输入的文本长度,一个中文等于一个计数长度。值小于等于 0 的时候,则表示不限制输入长度。`maxcharacter` 和 `maxlength` 二选一使用", + "label": "" + }, + { + "key": "placeholder", + "type": ["String"], + "desc": "占位符", + "label": "" + }, + { + "key": "prefixIcon", + "type": ["String"], + "desc": "组件前置图标,值为字符串则表示图标名称", + "label": "" + }, + { + "key": "readonly", + "type": ["Boolean"], + "desc": "只读状态", + "label": "" + }, + { + "key": "size", + "type": ["String"], + "desc": "输入框尺寸", + "label": "" + }, + { + "key": "status", + "type": ["String"], + "desc": "输入框状态", + "label": "" + }, + { + "key": "suffix", + "type": ["String"], + "desc": "后置图标前的后置内容", + "label": "" + }, + { + "key": "suffixIcon", + "type": ["String"], + "desc": "后置文本内容,值为字符串则表示图标名称", + "label": "" + }, + { + "key": "tips", + "type": ["String"], + "desc": "输入框下方提示文本,会根据不同的 `status` 呈现不同的样式", + "label": "" + }, + { + "key": "value", + "type": ["String", "Number"], + "desc": "输入框的值", + "label": "" + } + ], + "externalClasses": ["t-class", "t-class-input", "t-class-placeholder", "t-class-error-msg"], + "events": [ + { + "key": "bind:blur", + "desc": "失去焦点时触发", + "label": "" + }, + { + "key": "bind:change", + "desc": "输入框值发生变化时触发", + "label": "" + }, + { + "key": "bind:clear", + "desc": "清空按钮点击时触发", + "label": "" + }, + { + "key": "bind:enter", + "desc": "回车键按下时触发", + "label": "" + }, + { + "key": "bind:focus", + "desc": "获得焦点时触发", + "label": "" + } + ], + "tpl": "", + "path": "./input/input" + }, + "t-loading": { + "key": "t-loading", + "label": "加载中", + "icon": "https://tdesign.gtimg.com/site/miniprogram-doc/doc-loading.png", + "properties": [ + { + "key": "delay", + "type": ["Number"], + "desc": "延迟显示加载效果的时间,用于防止请求速度过快引起的加载闪烁,单位:毫秒", + "label": "" + }, + { + "key": "duration", + "type": ["Number"], + "desc": "加载动画执行完成一次的时间,单位:毫秒", + "label": "" + }, + { + "key": "indicator", + "type": ["Boolean"], + "desc": "是否显示加载指示符", + "label": "" + }, + { + "key": "inheritColor", + "type": ["Boolean"], + "desc": "是否继承父元素颜色", + "label": "" + }, + { + "key": "layout", + "type": ["String"], + "desc": "对齐方式", + "label": "" + }, + { + "key": "loading", + "type": ["Boolean"], + "desc": "是否处于加载状态", + "label": "" + }, + { + "key": "pause", + "type": ["Boolean"], + "desc": "是否暂停动画", + "label": "" + }, + { + "key": "progress", + "type": ["Number"], + "desc": "加载进度", + "label": "" + }, + { + "key": "reverse", + "type": ["Boolean"], + "desc": "加载动画是否反向", + "label": "" + }, + { + "key": "size", + "type": ["String"], + "desc": "尺寸,示例:40rpx/20px", + "label": "" + }, + { + "key": "text", + "type": ["String"], + "desc": "加载提示文案", + "label": "" + }, + { + "key": "theme", + "type": ["String"], + "desc": "加载组件类型", + "label": "" + } + ], + "externalClasses": ["t-class", "t-class-text", "t-class-indicator"], + "tpl": "", + "path": "./loading/loading" + }, + "t-message": { + "key": "t-message", + "label": "全局提醒", + "icon": "https://tdesign.gtimg.com/site/miniprogram-doc/doc-message.png", + "properties": [ + { + "key": "action", + "type": ["String"], + "desc": "操作", + "label": "" + }, + { + "key": "align", + "type": ["String"], + "desc": "文本对齐方式", + "label": "" + }, + { + "key": "closeBtn", + "type": ["String", "Boolean"], + "desc": "关闭按钮,可以自定义。值为 true 显示默认关闭按钮,值为 false 不显示关闭按钮。值类型为 string 则直接显示值,如:“关闭”。也可以完全自定义按钮", + "label": "" + }, + { + "key": "content", + "type": ["String"], + "desc": "用于自定义消息弹出内容", + "label": "" + }, + { + "key": "duration", + "type": ["Number"], + "desc": "消息内置计时器,计时到达时会触发 duration-end 事件。单位:毫秒。值为 0 则表示没有计时器。", + "label": "" + }, + { + "key": "icon", + "type": ["String", "Boolean"], + "desc": "消息提醒前面的图标。值为 true 则根据 theme 显示对应的图标,值为 false 则不显示图标。值为 'info' 或 'bell' 则显示组件内置图标。也可以完全自定义图标节点", + "label": "" + }, + { + "key": "marquee", + "type": ["Boolean", "Object"], + "desc": "跑马灯效果。speed 指速度控制;loop 指循环播放次数,值为 -1 表示循环播放,值为 0 表示不循环播放;delay 表示延迟多久开始播放", + "label": "" + }, + { + "key": "offset", + "type": ["Array"], + "desc": "相对于 placement 的偏移量,示例:[-10, 20] 或 ['10rpx', '8rpx']", + "label": "" + }, + { + "key": "theme", + "type": ["String"], + "desc": "消息组件风格", + "label": "" + }, + { + "key": "visible", + "type": ["Boolean"], + "desc": "是否显示,隐藏时默认销毁组件", + "label": "" + }, + { + "key": "zIndex", + "type": ["Number"], + "desc": "元素层级,样式默认为 5000", + "label": "" + } + ], + "externalClasses": ["t-class", "t-class-content", "t-class-icon", "t-class-action", "t-class-close-btn"], + "events": [ + { + "key": "bind:action-btn-click", + "desc": "当操作按钮存在时,用户点击操作按钮时触发", + "label": "" + }, + { + "key": "bind:close-btn-click", + "desc": "当关闭按钮存在时,用户点击关闭按钮触发", + "label": "" + }, + { + "key": "bind:duration-end", + "desc": "计时结束后触发", + "label": "" + } + ], + "tpl": "", + "path": "./message/message" + }, + "t-navbar": { + "key": "t-navbar", + "label": "导航条", + "icon": "https://tdesign.gtimg.com/site/miniprogram-doc/doc-navbar.png", + "properties": [ + { + "key": "animation", + "type": ["Boolean"], + "desc": "是否添加动画效果", + "label": "" + }, + { + "key": "background", + "type": ["String"], + "desc": "背景", + "label": "" + }, + { + "key": "delta", + "type": ["Number"], + "desc": "后退按钮后退层数,含义参考 [wx.navigateBack](https://developers.weixin.qq.com/miniprogram/dev/api/route/wx.navigateBack.html),特殊的,传入 0 不会发生执行 wx.navigateBack,只会触发一个 goback 事件供自行处理。", + "label": "" + }, + { + "key": "fixed", + "type": ["Boolean"], + "desc": "是否固定在顶部", + "label": "" + }, + { + "key": "homeIcon", + "type": ["String"], + "desc": "首页图标地址。值为 '' 或者 undefiend 则表示不显示返回图标,值为 'circle' 表示显示默认图标,值为 'slot' 表示使用插槽渲染,值为其他则表示图标地址", + "label": "" + }, + { + "key": "leftIcon", + "type": ["String"], + "desc": "左侧图标地址,值为 '' 或者 undefiend 则表示不显示返回图标,值为 'arrow-left' 表示显示返回图标,值为 'slot' 表示使用插槽渲染,值为其他则表示图标地址", + "label": "" + }, + { + "key": "title", + "type": ["String"], + "desc": "页面标题", + "label": "" + }, + { + "key": "titleMaxLength", + "type": ["Number"], + "desc": "标题文字最大长度,超出的范围使用 `...` 表示", + "label": "" + }, + { + "key": "visible", + "type": ["Boolean"], + "desc": "是否显示", + "label": "" + } + ], + "externalClasses": ["t-class", "t-class-title", "t-class-left-icon", "t-class-home-icon", "t-class-capsule"], + "events": [ + { + "key": "bind:complete", + "desc": "navigateBack 执行完成后触发(失败或成功均会触发)", + "label": "" + }, + { + "key": "bind:fail", + "desc": "navigateBack 执行失败后触发", + "label": "" + }, + { + "key": "bind:go-back", + "desc": "delta 值为 0 时,点击返回,触发该事件", + "label": "" + }, + { + "key": "bind:go-home", + "desc": "点击 Home 触发", + "label": "" + }, + { + "key": "bind:success", + "desc": "navigateBack 执行成功后触发", + "label": "" + } + ], + "tpl": "", + "path": "./navbar/navbar" + }, + "t-picker-item": { + "key": "t-picker-item", + "label": "选择器子项", + "icon": "https://tdesign.gtimg.com/site/miniprogram-doc/doc-picker.png", + "properties": [ + { + "key": "format", + "type": ["String"], + "desc": "格式化标签", + "label": "" + }, + { + "key": "options", + "type": ["Array"], + "desc": "数据源", + "label": "" + } + ], + "tpl": "", + "path": "./picker-item/picker-item" + }, + "t-picker": { + "key": "t-picker", + "label": "选择器", + "icon": "https://tdesign.gtimg.com/site/miniprogram-doc/doc-picker.png", + "properties": [ + { + "key": "cancelBtn", + "type": ["String", "Object"], + "desc": "取消按钮文字", + "label": "" + }, + { + "key": "confirmBtn", + "type": ["String", "Object"], + "desc": "确定按钮文字", + "label": "" + }, + { + "key": "footer", + "type": ["String"], + "desc": "底部内容", + "label": "" + }, + { + "key": "header", + "type": ["Boolean"], + "desc": "头部内容。值为 true 显示空白头部,值为 false 不显示任何内容,值类型为 TNode 表示自定义头部内容", + "label": "" + }, + { + "key": "title", + "type": ["String"], + "desc": "标题", + "label": "" + }, + { + "key": "value", + "type": ["Array"], + "desc": "选中值", + "label": "" + }, + { + "key": "visible", + "type": ["Boolean"], + "desc": "是否显示", + "label": "" + } + ], + "events": [ + { + "key": "bind:cancel", + "desc": "点击取消按钮时触发", + "label": "" + }, + { + "key": "bind:change", + "desc": "选中变化时候触发", + "label": "" + }, + { + "key": "bind:pick", + "desc": "任何一列选中都会触发,不同的列参数不同。`context.column` 表示第几列变化,`context.index` 表示变化那一列的选中项下标", + "label": "" + } + ], + "tpl": "", + "require": { + "t-picker-item": "./picker-item/picker-item" + }, + "path": "./picker/picker" + }, + "t-popup": { + "key": "t-popup", + "label": "气泡框", + "icon": "https://tdesign.gtimg.com/site/miniprogram-doc/doc-popup.png", + "properties": [ + { + "key": "closeBtn", + "type": ["Boolean"], + "desc": "关闭按钮,值类型为 Boolean 时表示是否显示关闭按钮。也可以自定义关闭按钮", + "label": "" + }, + { + "key": "closeOnOverlayClick", + "type": ["Boolean"], + "desc": "点击遮罩层是否关闭", + "label": "" + }, + { + "key": "content", + "type": ["String"], + "desc": "浮层里面的内容", + "label": "" + }, + { + "key": "placement", + "type": ["String"], + "desc": "浮层出现位置", + "label": "" + }, + { + "key": "preventScrollThrough", + "type": ["Boolean"], + "desc": "防止滚动穿透", + "label": "" + }, + { + "key": "showOverlay", + "type": ["Boolean"], + "desc": "是否显示遮罩层", + "label": "" + }, + { + "key": "transitionProps", + "type": ["Object"], + "desc": "动画效果定义", + "label": "" + }, + { + "key": "visible", + "type": ["Boolean"], + "desc": "是否显示浮层", + "label": "" + }, + { + "key": "zIndex", + "type": ["Number"], + "desc": "组件层级,Web 侧样式默认为 5500,移动端和小程序样式默认为 1500", + "label": "" + } + ], + "externalClasses": ["t-class", "t-class-overlay", "t-class-content"], + "events": [ + { + "key": "bind:visible-change", + "desc": "当浮层隐藏或显示时触发", + "label": "" + } + ], + "tpl": "", + "path": "./popup/popup" + }, + "t-progress": { + "key": "t-progress", + "label": "进度条", + "icon": "https://tdesign.gtimg.com/site/miniprogram-doc/doc-progress.png", + "properties": [ + { + "key": "color", + "type": ["String", "Object", "Array"], + "desc": "进度条颜色。示例:'#ED7B2F' 或 'orange' 或 `['#f00', '#0ff', '#f0f']` 或 `{ '0%': '#f00', '100%': '#0ff' }` 或 `{ from: '#000', to: '#000' }` 等", + "label": "" + }, + { + "key": "label", + "type": ["String", "Boolean"], + "desc": "进度百分比,可自定义", + "label": "" + }, + { + "key": "percentage", + "type": ["Number"], + "desc": "进度条百分比", + "label": "" + }, + { + "key": "size", + "type": ["String", "Number"], + "desc": "进度条尺寸,示例:small/medium/large/240。small 值为 72; medium 值为 112;large 值为 160", + "label": "" + }, + { + "key": "status", + "type": ["String"], + "desc": "进度条状态", + "label": "" + }, + { + "key": "strokeWidth", + "type": ["String", "Number"], + "desc": "进度条线宽。宽度数值不能超过 size 的一半,否则不能输出环形进度", + "label": "" + }, + { + "key": "theme", + "type": ["String"], + "desc": "进度条风格。值为 line,标签(label)显示在进度条右侧;值为 plump,标签(label)显示在进度条里面;值为 circle,标签(label)显示在进度条正中间", + "label": "" + }, + { + "key": "trackColor", + "type": ["String"], + "desc": "进度条未完成部分颜色", + "label": "" + } + ], + "tpl": "", + "path": "./progress/progress" + }, + "t-pull-down-refresh": { + "key": "t-pull-down-refresh", + "label": "下拉刷新", + "icon": "https://tdesign.gtimg.com/site/miniprogram-doc/doc-pulldownrefresh.png", + "properties": [ + { + "key": "loadingBarHeight", + "type": ["String", "Number"], + "desc": "加载中下拉高度,如果值为数字则单位是:'px'", + "label": "" + }, + { + "key": "loadingProps", + "type": ["Object"], + "desc": "加载loading样式", + "label": "" + }, + { + "key": "loadingTexts", + "type": ["Array"], + "desc": "提示语,组件内部默认值为 ['下拉刷新', '松手刷新', '正在刷新', '刷新完成']", + "label": "" + }, + { + "key": "maxBarHeight", + "type": ["String", "Number"], + "desc": "最大下拉高度,如果值为数字则单位是:'px'", + "label": "" + }, + { + "key": "refreshTimeout", + "type": ["Number"], + "desc": "刷新超时时间", + "label": "" + }, + { + "key": "value", + "type": ["Boolean"], + "desc": "组件状态,值为 `true` 表示下拉状态,值为 `false` 表示收起状态", + "label": "" + } + ], + "externalClasses": ["t-class", "t-class-loading", "t-class-text", "t-class-indicator"], + "events": [ + { + "key": "bind:change", + "desc": "下拉或收起时触发,用户手势往下滑动触发下拉状态,手势松开触发收起状态", + "label": "" + }, + { + "key": "bind:refresh", + "desc": "结束下拉时触发", + "label": "" + }, + { + "key": "bind:timeout", + "desc": "刷新超时触发", + "label": "" + } + ], + "tpl": "拖拽该区域演示 中间下拉刷新", + "path": "./pull-down-refresh/pull-down-refresh" + }, + "t-radio-group": { + "key": "t-radio-group", + "label": "单选框组", + "icon": "", + "properties": [ + { + "key": "disabled", + "type": ["Boolean"], + "desc": "是否禁用全部子单选框", + "label": "" + }, + { + "key": "name", + "type": ["String"], + "desc": "HTML 元素原生属性", + "label": "" + }, + { + "key": "options", + "type": ["Array"], + "desc": "单选组件按钮形式。RadioOption 数据类型为 string 或 number 时,表示 label 和 value 值相同", + "label": "" + }, + { + "key": "value", + "type": ["String", "Number", "Boolean"], + "desc": "选中的值", + "label": "" + } + ], + "events": [ + { + "key": "bind:change", + "desc": "选中值发生变化时触发", + "label": "" + } + ], + "tpl": "", + "require": { + "t-radio": "./radio/radio" + }, + "path": "./radio-group/radio-group" + }, + "t-radio": { + "key": "t-radio", + "label": "单选框", + "icon": "https://tdesign.gtimg.com/site/miniprogram-doc/doc-radio.png", + "properties": [ + { + "key": "align", + "type": ["String"], + "desc": "复选框和内容相对位置", + "label": "" + }, + { + "key": "allowUncheck", + "type": ["Boolean"], + "desc": "是否允许取消选中", + "label": "" + }, + { + "key": "checked", + "type": ["Boolean"], + "desc": "是否选中", + "label": "" + }, + { + "key": "color", + "type": ["String"], + "desc": "单选按钮颜色", + "label": "" + }, + { + "key": "content", + "type": ["String"], + "desc": "单选内容", + "label": "" + }, + { + "key": "contentDisabled", + "type": ["Boolean"], + "desc": "是否禁用组件内容(content)触发选中", + "label": "" + }, + { + "key": "disabled", + "type": ["Boolean"], + "desc": "是否为禁用态", + "label": "" + }, + { + "key": "icon", + "type": ["String", "Array"], + "desc": "自定义选中图标和非选中图标。示例:[选中态图标,非选中态图标]。值为 fill-circle 表示图标为填充型图标,值为 stroke-line 表示图标为描边型图标", + "label": "" + }, + { + "key": "label", + "type": ["String"], + "desc": "主文案", + "label": "" + }, + { + "key": "maxContentRow", + "type": ["Number"], + "desc": "内容最大行数限制", + "label": "" + }, + { + "key": "maxLabelRow", + "type": ["Number"], + "desc": "主文案最大行数限制", + "label": "" + }, + { + "key": "name", + "type": ["String"], + "desc": "HTML 元素原生属性", + "label": "" + }, + { + "key": "value", + "type": ["String", "Number", "Boolean"], + "desc": "单选按钮的值", + "label": "" + } + ], + "externalClasses": ["t-class", "t-class-icon", "t-class-label", "t-class-content", "t-class-border"], + "events": [ + { + "key": "bind:change", + "desc": "值变化时触发", + "label": "" + } + ], + "tpl": "", + "path": "./radio/radio" + }, + "t-rate": { + "key": "t-rate", + "label": "评分", + "icon": "https://tdesign.gtimg.com/site/miniprogram-doc/doc-rate.png", + "properties": [ + { + "key": "allowHalf", + "type": ["Boolean"], + "desc": "是否允许半选", + "label": "" + }, + { + "key": "color", + "type": ["String", "Array"], + "desc": "评分图标的颜色,样式中默认为 #ED7B2F。一个值表示设置选中高亮的五角星颜色,示例:[选中颜色]。数组则表示分别设置 选中高亮的五角星颜色 和 未选中暗灰的五角星颜色,[选中颜色,未选中颜色]。示例:['#ED7B2F', '#E3E6EB']", + "label": "" + }, + { + "key": "count", + "type": ["Number"], + "desc": "评分的数量", + "label": "" + }, + { + "key": "disabled", + "type": ["Boolean"], + "desc": "是否禁用评分", + "label": "" + }, + { + "key": "gap", + "type": ["Number"], + "desc": "评分图标的间距", + "label": "" + }, + { + "key": "showText", + "type": ["Boolean"], + "desc": "是否显示对应的辅助文字", + "label": "" + }, + { + "key": "size", + "type": ["String"], + "desc": "评分图标的大小,示例:`20`", + "label": "" + }, + { + "key": "texts", + "type": ["Array"], + "desc": "评分等级对应的辅助文字。组件内置默认值为:['极差', '失望', '一般', '满意', '惊喜']。自定义值示例:['1分', '2分', '3分', '4分', '5分']", + "label": "" + }, + { + "key": "value", + "type": ["Number"], + "desc": "选择评分的值", + "label": "" + }, + { + "key": "variant", + "type": ["String"], + "desc": "形状类型,有描边类型和填充类型两种", + "label": "" + } + ], + "events": [ + { + "key": "bind:change", + "desc": "评分数改变时触发", + "label": "" + } + ], + "tpl": "", + "path": "./rate/rate" + }, + "t-search": { + "key": "t-search", + "label": "搜索", + "icon": "https://tdesign.gtimg.com/site/miniprogram-doc/doc-search.png", + "properties": [ + { + "key": "action", + "type": ["String"], + "desc": "自定义右侧操作按钮文字", + "label": "" + }, + { + "key": "center", + "type": ["Boolean"], + "desc": "是否居中", + "label": "" + }, + { + "key": "disabled", + "type": ["Boolean"], + "desc": "是否禁用", + "label": "" + }, + { + "key": "focus", + "type": ["Boolean"], + "desc": "是否聚焦", + "label": "" + }, + { + "key": "label", + "type": ["String"], + "desc": "左侧文本", + "label": "" + }, + { + "key": "leftIcon", + "type": ["String"], + "desc": "左侧图标", + "label": "" + }, + { + "key": "placeholder", + "type": ["String"], + "desc": "占位符", + "label": "" + }, + { + "key": "rightIcon", + "type": ["String"], + "desc": "右侧图标", + "label": "" + }, + { + "key": "shape", + "type": ["String"], + "desc": "搜索框形状", + "label": "" + }, + { + "key": "value", + "type": ["String"], + "desc": "值", + "label": "" + } + ], + "externalClasses": [ + "t-class", + "t-class-input", + "t-class-input-container", + "t-class-cancel", + "t-class-left", + "t-class-right" + ], + "events": [ + { + "key": "bind:action-click", + "desc": "点击右侧操作按钮文字时触发", + "label": "" + }, + { + "key": "bind:blur", + "desc": "失去焦点时触发", + "label": "" + }, + { + "key": "bind:change", + "desc": "值发生变化时触发", + "label": "" + }, + { + "key": "bind:clear", + "desc": "点击清除时触发", + "label": "" + }, + { + "key": "bind:focus", + "desc": "聚焦时触发", + "label": "" + }, + { + "key": "bind:submit", + "desc": "提交时触发", + "label": "" + } + ], + "tpl": "", + "path": "./search/search" + }, + "t-skeleton": { + "key": "t-skeleton", + "label": "骨架屏", + "icon": "https://tdesign.gtimg.com/site/miniprogram-doc/doc-skeleton.png", + "properties": [ + { + "key": "animation", + "type": ["String"], + "desc": "动画效果,有「渐变加载动画」和「闪烁加载动画」两种。值为 'none' 则表示没有动画", + "label": "" + }, + { + "key": "delay", + "type": ["Number"], + "desc": "【开发中】延迟显示加载效果的时间,用于防止请求速度过快引起的加载闪烁,单位:毫秒", + "label": "" + }, + { + "key": "loading", + "type": ["Boolean"], + "desc": "是否为加载状态,如果是则显示骨架图,如果不是则显示加载完成的内容", + "label": "" + }, + { + "key": "rowCol", + "type": ["Array"], + "desc": "用于设置行列数量、宽度高度、间距等。【示例一】,`[1, 1, 2]` 表示输出三行骨架图,第一行一列,第二行一列,第三行两列。【示例二】,`[1, 1, { width: '100px' }]` 表示自定义第三行的宽度为 `100px`。【示例三】,`[1, 2, [{ width, height }, { width, height, marginLeft }]]` 表示第三行有两列,且自定义宽度、高度和间距", + "label": "" + }, + { + "key": "theme", + "type": ["String"], + "desc": "骨架图风格,有基础、头像组合等两大类", + "label": "" + } + ], + "externalClasses": ["t-class", "t-class-avatar", "t-class-image", "t-class-text"], + "tpl": "", + "path": "./skeleton/skeleton" + }, + "t-slider": { + "key": "t-slider", + "label": "滑块", + "icon": "https://tdesign.gtimg.com/site/miniprogram-doc/doc-slider.png", + "properties": [ + { + "key": "colors", + "type": ["Array"], + "desc": "颜色,[已选择, 未选择]", + "label": "" + }, + { + "key": "disabled", + "type": ["Boolean"], + "desc": "是否禁用组件", + "label": "" + }, + { + "key": "disabledColor", + "type": ["Array"], + "desc": "禁用状态滑动条的颜色,[已选, 未选]", + "label": "" + }, + { + "key": "label", + "type": ["String", "Boolean"], + "desc": "滑块当前值文本。
值为 true 显示默认文案;值为 false 不显示滑块当前值文本;
值为 `${value}%` 则表示组件会根据占位符渲染文案;
值类型为函数时,参数 `value` 标识滑块值,参数 `position=start` 表示范围滑块的起始值,参数 `position=end` 表示范围滑块的终点值", + "label": "" + }, + { + "key": "marks", + "type": ["Object", "Array"], + "desc": "刻度标记,示例:`[0, 10, 40, 200]` 或者 `{ 5: '5¥', 10: '10%' }`", + "label": "" + }, + { + "key": "max", + "type": ["Number"], + "desc": "滑块范围最大值", + "label": "" + }, + { + "key": "min", + "type": ["Number"], + "desc": "滑块范围最小值", + "label": "" + }, + { + "key": "range", + "type": ["Boolean"], + "desc": "双游标滑块", + "label": "" + }, + { + "key": "showExtremeValue", + "type": ["Boolean"], + "desc": "是否边界值", + "label": "" + }, + { + "key": "step", + "type": ["Number"], + "desc": "步长", + "label": "" + }, + { + "key": "value", + "type": ["Number", "Array"], + "desc": "滑块值", + "label": "" + } + ], + "externalClasses": ["t-class", "t-class-bar", "t-class-bar-active", "t-class-bar-disabled", "t-class-cursor"], + "events": [ + { + "key": "bind:change", + "desc": "滑块值变化时触发", + "label": "" + }, + { + "key": "bind:dragend", + "desc": "结束拖动时触发", + "label": "" + }, + { + "key": "bind:dragstart", + "desc": "开始拖动时触发", + "label": "" + } + ], + "tpl": "", + "path": "./slider/slider" + }, + "t-step-item": { + "key": "t-step-item", + "label": "步骤", + "icon": "https://tdesign.gtimg.com/site/miniprogram-doc/doc-steps.png", + "properties": [ + { + "key": "content", + "type": ["String"], + "desc": "步骤描述", + "label": "" + }, + { + "key": "icon", + "type": ["String"], + "desc": "图标。传入 slot 代表使用插槽,其他字符串代表使用内置图标", + "label": "" + }, + { + "key": "status", + "type": ["String"], + "desc": "当前步骤的状态", + "label": "" + }, + { + "key": "subStepItems", + "type": ["Array"], + "desc": "子步骤条,仅支持 layout = 'vertical' 时", + "label": "" + }, + { + "key": "title", + "type": ["String"], + "desc": "标题", + "label": "" + } + ], + "externalClasses": ["t-class", "t-class-content", "t-class-title", "t-class-description", "t-class-extra"], + "tpl": "", + "path": "./step-item/step-item" + }, + "t-stepper": { + "key": "t-stepper", + "label": "步进器", + "icon": "https://tdesign.gtimg.com/site/miniprogram-doc/doc-stepper.png", + "properties": [ + { + "key": "disabled", + "type": ["Boolean"], + "desc": "禁用全部操作", + "label": "" + }, + { + "key": "disableInput", + "type": ["Boolean"], + "desc": "禁用输入框", + "label": "" + }, + { + "key": "inputWidth", + "type": ["Number"], + "desc": "输入框宽度", + "label": "" + }, + { + "key": "max", + "type": ["Number"], + "desc": "最大值", + "label": "" + }, + { + "key": "min", + "type": ["Number"], + "desc": "最小值", + "label": "" + }, + { + "key": "step", + "type": ["Number"], + "desc": "步长", + "label": "" + }, + { + "key": "theme", + "type": ["String"], + "desc": "组件风格", + "label": "" + }, + { + "key": "value", + "type": ["String", "Number"], + "desc": "值", + "label": "" + } + ], + "externalClasses": ["t-class", "t-class-input", "t-class-add", "t-class-minus"], + "events": [ + { + "key": "bind:blur", + "desc": "输入框失去焦点时触发", + "label": "" + }, + { + "key": "bind:change", + "desc": "数值发生变更时触发", + "label": "" + }, + { + "key": "bind:overlimit", + "desc": "数值超出限制时触发", + "label": "" + } + ], + "tpl": "", + "path": "./stepper/stepper" + }, + "t-steps": { + "key": "t-steps", + "label": "步骤条", + "icon": "https://tdesign.gtimg.com/site/miniprogram-doc/doc-steps.png", + "properties": [ + { + "key": "current", + "type": ["String", "Number"], + "desc": "当前步骤,即整个步骤条进度。默认根据步骤下标判断步骤的完成状态,当前步骤为进行中,当前步骤之前的步骤为已完成,当前步骤之后的步骤为未开始。如果每个步骤没有设置 value,current 值为步骤长度则表示所有步骤已完成。如果每个步骤设置了自定义 value,则 current = 'FINISH' 表示所有状态完成", + "label": "" + }, + { + "key": "currentStatus", + "type": ["String"], + "desc": "用于控制 current 指向的步骤条的状态", + "label": "" + }, + { + "key": "layout", + "type": ["String"], + "desc": "步骤条方向,有两种:横向和纵向", + "label": "" + }, + { + "key": "readonly", + "type": ["Boolean"], + "desc": "只读状态", + "label": "" + }, + { + "key": "separator", + "type": ["String"], + "desc": "步骤条分割符", + "label": "" + }, + { + "key": "theme", + "type": ["String"], + "desc": "步骤条风格", + "label": "" + } + ], + "externalClasses": ["t-class"], + "events": [ + { + "key": "bind:change", + "desc": "当前步骤发生变化时触发", + "label": "" + } + ], + "tpl": "", + "require": { + "t-step-item": "./step-item/step-item" + }, + "path": "./steps/steps" + }, + "t-sticky": { + "key": "t-sticky", + "label": "吸顶容器", + "icon": "https://tdesign.gtimg.com/site/miniprogram-doc/doc-sticky.png", + "properties": [ + { + "key": "container", + "type": ["String"], + "desc": "函数返回容器对应的 NodesRef 节点,将对应节点指定为组件的外部容器,滚动时组件会始终保持在容器范围内,当组件即将超出容器底部时,会返回原位置。", + "label": "" + }, + { + "key": "disabled", + "type": ["Boolean"], + "desc": "是否禁用组件", + "label": "" + }, + { + "key": "offsetTop", + "type": ["String", "Number"], + "desc": "吸顶时与顶部的距离,单位`px`", + "label": "" + }, + { + "key": "zIndex", + "type": ["Number"], + "desc": "吸顶时的 z-index", + "label": "" + } + ], + "externalClasses": ["t-class"], + "events": [ + { + "key": "bind:scroll", + "desc": "滚动时触发,scrollTop: 距离顶部位置,isFixed: 是否吸顶", + "label": "" + } + ], + "tpl": "", + "path": "./sticky/sticky" + }, + "t-swipe-cell": { + "key": "t-swipe-cell", + "label": "滑动操作", + "icon": "https://tdesign.gtimg.com/site/miniprogram-doc/doc-swipecell.png", + "properties": [ + { + "key": "disabled", + "type": ["Boolean"], + "desc": "是否禁用滑动", + "label": "" + }, + { + "key": "expanded", + "type": ["String"], + "desc": "操作项是否呈现为打开态", + "label": "" + }, + { + "key": "left", + "type": ["Array"], + "desc": "左侧滑动操作项。所有行为同 `right`", + "label": "" + }, + { + "key": "right", + "type": ["Array"], + "desc": "右侧滑动操作项。有两种定义方式,一种是使用数组,二种是使用插槽。`right.text` 表示操作文本,`right.className` 表示操作项类名,`right.style` 表示操作项样式,`right.onClick` 表示点击操作项后执行的回调函数。示例:`[{ text: '删除', style: 'background-color: red', onClick: () => {} }]`", + "label": "" + } + ], + "events": [ + { + "key": "bind:click", + "desc": "操作项点击时触发(插槽写法组件不触发,业务侧自定义内容和事件)", + "label": "" + } + ], + "tpl": "删除", + "require": { + "t-cell": "./cell/cell" + }, + "path": "./swipe-cell/swipe-cell" + }, + "t-swiper": { + "key": "t-swiper", + "label": "轮播", + "icon": "https://tdesign.gtimg.com/site/miniprogram-doc/doc-swiper.png", + "properties": [ + { + "key": "animation", + "type": ["String"], + "desc": "轮播切换动画效果类型", + "label": "" + }, + { + "key": "autoplay", + "type": ["Boolean"], + "desc": "是否自动播放", + "label": "" + }, + { + "key": "current", + "type": ["Number"], + "desc": "当前轮播在哪一项(下标)", + "label": "" + }, + { + "key": "direction", + "type": ["String"], + "desc": "轮播滑动方向,包括横向滑动和纵向滑动两个方向", + "label": "" + }, + { + "key": "duration", + "type": ["Number"], + "desc": "滑动动画时长", + "label": "" + }, + { + "key": "height", + "type": ["Number"], + "desc": "当使用垂直方向滚动时的高度", + "label": "" + }, + { + "key": "interval", + "type": ["Number"], + "desc": "轮播间隔时间", + "label": "" + }, + { + "key": "loop", + "type": ["Boolean"], + "desc": "是否循环播放", + "label": "" + }, + { + "key": "navigation", + "type": ["Object"], + "desc": "导航器全部配置", + "label": "" + } + ], + "events": [ + { + "key": "bind:change", + "desc": "轮播切换时触发", + "label": "" + } + ], + "tpl": "", + "require": { + "t-swiper-item": "./swiper/swiper-item" + }, + "path": "./swiper/swiper" + }, + "t-switch": { + "key": "t-switch", + "label": "开关", + "icon": "https://tdesign.gtimg.com/site/miniprogram-doc/doc-switch.png", + "properties": [ + { + "key": "colors", + "type": ["Array"], + "desc": "自定义颜色,[打开时的颜色,关闭时的颜色]。组件默认颜色为 ['#0052d9', 'rgba(0, 0, 0, .26']。示例:[blue, gray]", + "label": "" + }, + { + "key": "customValue", + "type": ["Array"], + "desc": "开关内容,[打开时的值,关闭时的值]。默认为 [true, false]。示例:[1, 0]", + "label": "" + }, + { + "key": "disabled", + "type": ["Boolean"], + "desc": "是否禁用组件", + "label": "" + }, + { + "key": "label", + "type": ["String"], + "desc": "开关的标签", + "label": "" + }, + { + "key": "loading", + "type": ["Boolean"], + "desc": "是否处于加载中状态", + "label": "" + }, + { + "key": "size", + "type": ["String"], + "desc": "开关尺寸", + "label": "" + }, + { + "key": "value", + "type": ["String", "Number", "Boolean"], + "desc": "开关值", + "label": "" + } + ], + "events": [ + { + "key": "bind:change", + "desc": "数据发生变化时触发", + "label": "" + } + ], + "tpl": "", + "path": "./switch/switch" + }, + "t-tab-bar-item": { + "key": "t-tab-bar-item", + "label": "标签栏选项", + "icon": "https://tdesign.gtimg.com/site/miniprogram-doc/doc-tabbar.png", + "properties": [ + { + "key": "badgeProps", + "type": ["Object"], + "desc": "图标右上角提示信息", + "label": "" + }, + { + "key": "icon", + "type": ["String"], + "desc": "图标名称", + "label": "" + }, + { + "key": "subTabBar", + "type": ["Array"], + "desc": "二级菜单", + "label": "" + }, + { + "key": "value", + "type": ["String", "Number"], + "desc": "标识符", + "label": "" + } + ], + "tpl": "{{item.label}}", + "path": "./tab-bar-item/tab-bar-item" + }, + "t-tab-bar": { + "key": "t-tab-bar", + "label": "标签栏", + "icon": "https://tdesign.gtimg.com/site/miniprogram-doc/doc-tabbar.png", + "properties": [ + { + "key": "bordered", + "type": ["Boolean"], + "desc": "是否显示外边框", + "label": "" + }, + { + "key": "color", + "type": ["Array"], + "desc": "标签颜色设置。示例:[选中标签的颜色, 未选中的标签颜色]", + "label": "" + }, + { + "key": "fixed", + "type": ["Boolean"], + "desc": "是否固定在底部", + "label": "" + }, + { + "key": "safeAreaInsetBottom", + "type": ["Boolean"], + "desc": "是否为 iPhoneX 留出底部安全距离", + "label": "" + }, + { + "key": "split", + "type": ["Boolean"], + "desc": "是否需要分割线", + "label": "" + }, + { + "key": "value", + "type": ["String", "Number", "Array"], + "desc": "当前选中标签的索引", + "label": "" + } + ], + "externalClasses": ["t-class"], + "events": [ + { + "key": "bind:change", + "desc": "选中标签切换时触发", + "label": "" + } + ], + "tpl": "{{item.label}}", + "require": { + "t-tab-bar-item": "./tab-bar-item/tab-bar-item" + }, + "path": "./tab-bar/tab-bar" + }, + "t-tab-panel": { + "key": "t-tab-panel", + "label": "选项卡面板", + "icon": "https://tdesign.gtimg.com/site/miniprogram-doc/doc-tabs.png", + "properties": [ + { + "key": "destroyOnHide", + "type": ["Boolean"], + "desc": "选项卡内容隐藏时是否销毁", + "label": "" + }, + { + "key": "disabled", + "type": ["Boolean"], + "desc": "是否禁用当前选项卡", + "label": "" + }, + { + "key": "label", + "type": ["String"], + "desc": "选项卡名称", + "label": "" + }, + { + "key": "panel", + "type": ["String"], + "desc": "用于自定义选项卡面板内容", + "label": "" + }, + { + "key": "value", + "type": ["String", "Number"], + "desc": "选项卡的值,唯一标识", + "label": "" + } + ], + "tpl": "标签一内容", + "path": "./tab-panel/tab-panel" + }, + "t-tabs": { + "key": "t-tabs", + "label": "选项卡", + "icon": "https://tdesign.gtimg.com/site/miniprogram-doc/doc-tabs.png", + "properties": [ + { + "key": "animation", + "type": ["Object"], + "desc": "动画效果设置。其中 duration 表示动画时长", + "label": "" + }, + { + "key": "placement", + "type": ["String"], + "desc": "选项卡位置", + "label": "" + }, + { + "key": "showBottomLine", + "type": ["Boolean"], + "desc": "是否展示底部激活线条", + "label": "" + }, + { + "key": "stickyProps", + "type": ["Object"], + "desc": "是否支持吸顶", + "label": "" + }, + { + "key": "value", + "type": ["String", "Number"], + "desc": "激活的选项卡值", + "label": "" + } + ], + "externalClasses": ["t-class", "t-class-item", "t-class-active", "t-class-track"], + "events": [ + { + "key": "bind:change", + "desc": "激活的选项卡发生变化时触发", + "label": "" + } + ], + "tpl": "标签一内容标签二内容", + "require": { + "t-tab-panel": "./tab-panel/tab-panel" + }, + "path": "./tabs/tabs" + }, + "t-tag": { + "key": "t-tag", + "label": "标签", + "icon": "https://tdesign.gtimg.com/site/miniprogram-doc/doc-tag.png", + "properties": [ + { + "key": "closable", + "type": ["Boolean"], + "desc": "标签是否可关闭", + "label": "" + }, + { + "key": "disabled", + "type": ["Boolean"], + "desc": "标签禁用态,失效标签不能触发事件。默认风格(theme=default)才有禁用态", + "label": "" + }, + { + "key": "icon", + "type": ["String"], + "desc": "标签中的图标,可自定义图标呈现", + "label": "" + }, + { + "key": "maxWidth", + "type": ["String", "Number"], + "desc": "标签最大宽度,宽度超出后会出现省略号。示例:'50px' / 80", + "label": "" + }, + { + "key": "shape", + "type": ["String"], + "desc": "标签类型,有三种:方形、圆角方形、标记型", + "label": "" + }, + { + "key": "size", + "type": ["String"], + "desc": "标签尺寸", + "label": "" + }, + { + "key": "theme", + "type": ["String"], + "desc": "组件风格,用于描述组件不同的应用场景", + "label": "" + }, + { + "key": "variant", + "type": ["String"], + "desc": "标签风格变体", + "label": "" + } + ], + "externalClasses": ["t-class"], + "events": [ + { + "key": "bind:click", + "desc": "点击时触发", + "label": "" + }, + { + "key": "bind:close", + "desc": "如果关闭按钮存在,点击关闭按钮时触发", + "label": "" + } + ], + "tpl": "重要", + "path": "./tag/tag" + }, + "t-textarea": { + "key": "t-textarea", + "label": "文本输入框", + "icon": "https://tdesign.gtimg.com/site/miniprogram-doc/doc-textarea.png", + "properties": [ + { + "key": "adjustPosition", + "type": ["Boolean"], + "desc": "键盘弹起时,是否自动上推页面", + "label": "" + }, + { + "key": "autofocus", + "type": ["Boolean"], + "desc": "自动聚焦,拉起键盘", + "label": "" + }, + { + "key": "autosize", + "type": ["Boolean"], + "desc": "是否自动增高,值为 autosize 时,style.height 不生效", + "label": "" + }, + { + "key": "confirmHold", + "type": ["Boolean"], + "desc": "点击键盘右下角按钮时是否保持键盘不收起点", + "label": "" + }, + { + "key": "confirmType", + "type": ["String"], + "desc": "设置键盘右下角按钮的文字,仅在 type='text'时生效", + "label": "" + }, + { + "key": "disabled", + "type": ["Boolean"], + "desc": "是否禁用文本框", + "label": "" + }, + { + "key": "focus", + "type": ["Boolean"], + "desc": "自动聚焦", + "label": "" + }, + { + "key": "label", + "type": ["String"], + "desc": "左侧文本", + "label": "" + }, + { + "key": "maxcharacter", + "type": ["Number"], + "desc": "用户最多可以输入的字符个数,一个中文汉字表示两个字符长度", + "label": "" + }, + { + "key": "maxlength", + "type": ["Number"], + "desc": "用户最多可以输入的字符个数", + "label": "" + }, + { + "key": "placeholder", + "type": ["String"], + "desc": "占位符", + "label": "" + }, + { + "key": "value", + "type": ["String"], + "desc": "文本框值", + "label": "" + } + ], + "externalClasses": ["t-class", "t-class-textarea", "t-class-placeholder", "t-class-name"], + "events": [ + { + "key": "bind:blur", + "desc": "失去焦点时触发", + "label": "" + }, + { + "key": "bind:change", + "desc": "输入内容变化时触发", + "label": "" + }, + { + "key": "bind:enter", + "desc": "点击完成时触发", + "label": "" + }, + { + "key": "bind:focus", + "desc": "获得焦点时触发", + "label": "" + }, + { + "key": "bind:line-change", + "desc": "行高发生变化时触发", + "label": "" + } + ], + "tpl": "", + "path": "./textarea/textarea" + }, + "t-toast": { + "key": "t-toast", + "label": "轻提示", + "icon": "https://tdesign.gtimg.com/site/miniprogram-doc/doc-toast.png", + "properties": [ + { + "key": "direction", + "type": ["String"], + "desc": "图标排列方式", + "label": "" + }, + { + "key": "duration", + "type": ["Number"], + "desc": "弹窗显示毫秒数", + "label": "" + }, + { + "key": "icon", + "type": ["String"], + "desc": "自定义图标", + "label": "" + }, + { + "key": "message", + "type": ["String"], + "desc": "弹窗显示文字", + "label": "" + }, + { + "key": "overlayProps", + "type": ["Object"], + "desc": "遮罩层属性,透传至 Overlay", + "label": "" + }, + { + "key": "placement", + "type": ["String"], + "desc": "弹窗展示位置", + "label": "" + }, + { + "key": "preventScrollThrough", + "type": ["Boolean"], + "desc": "防止滚动穿透,即不允许点击和滚动", + "label": "" + }, + { + "key": "showOverlay", + "type": ["Boolean"], + "desc": "是否显示遮罩层", + "label": "" + }, + { + "key": "theme", + "type": ["String"], + "desc": "提示类型", + "label": "" + } + ], + "externalClasses": ["t-class"], + "tpl": "", + "path": "./toast/toast" + }, + "t-transition": { + "key": "t-transition", + "label": "动画", + "icon": "", + "properties": [ + { + "key": "appear", + "type": ["Boolean"], + "desc": "首次出现是否展示动画", + "label": "" + }, + { + "key": "customClass", + "type": ["String"], + "desc": "自定义容器类名", + "label": "" + }, + { + "key": "destoryOnClose", + "type": ["Boolean"], + "desc": "隐藏时是否销毁内容", + "label": "" + }, + { + "key": "duration", + "type": ["Number"], + "desc": "指定过渡时间", + "label": "" + }, + { + "key": "name", + "type": ["String"], + "desc": "过渡类名", + "label": "" + }, + { + "key": "visible", + "type": ["Boolean"], + "desc": "是否显示", + "label": "" + } + ], + "tpl": "", + "path": "./transition/transition" + }, + "t-upload": { + "key": "t-upload", + "label": "上传", + "icon": "https://tdesign.gtimg.com/site/miniprogram-doc/doc-upload.png", + "properties": [ + { + "key": "addContent", + "type": ["String"], + "desc": "添加按钮内容。值为空,使用默认图标渲染;值为 slot 则表示使用插槽渲染;其他值无效。", + "label": "" + }, + { + "key": "allowUploadDuplicateFile", + "type": ["Boolean"], + "desc": "是否允许重复上传相同文件名的文件", + "label": "" + }, + { + "key": "config", + "type": ["Object"], + "desc": "图片上传配置,视频上传配置,文件上传配置等,包含图片尺寸、图片来源、视频来源、视频拍摄最长时间等。更多细节查看小程序官网。[图片上传](https://developers.weixin.qq.com/miniprogram/dev/api/media/image/wx.chooseImage.html)。[视频上传](https://developers.weixin.qq.com/miniprogram/dev/api/media/video/wx.chooseVideo.html)", + "label": "" + }, + { + "key": "deleteBtn", + "type": ["String"], + "desc": "删除图标。值为空,使用默认图标渲染;值为 slot 则表示使用插槽渲染;其他值无效。", + "label": "" + }, + { + "key": "fileListDisplay", + "type": ["String"], + "desc": "用于完全自定义文件列表内容", + "label": "" + }, + { + "key": "files", + "type": ["Array"], + "desc": "已上传文件列表", + "label": "" + }, + { + "key": "gridConfig", + "type": ["Object"], + "desc": "upload组件每行上传图片列数以及图片的宽度和高度", + "label": "" + }, + { + "key": "gutter", + "type": ["Number"], + "desc": "预览窗格的 `gutter` 大小,单位 rpx", + "label": "" + }, + { + "key": "imageProps", + "type": ["Object"], + "desc": "透传 Image 组件全部属性", + "label": "" + }, + { + "key": "max", + "type": ["Number"], + "desc": "用于控制文件上传数量,值为 0 则不限制", + "label": "" + }, + { + "key": "mediaType", + "type": ["Array"], + "desc": "支持上传的文件类型,图片或视频", + "label": "" + }, + { + "key": "requestMethod", + "type": ["String"], + "desc": "自定义上传方法", + "label": "" + }, + { + "key": "sizeLimit", + "type": ["Number", "Object"], + "desc": "图片文件大小限制,单位 KB。可选单位有:`'B' | 'KB' | 'MB' | 'GB'`。示例一:`1000`。示例二:`{ size: 2, unit: 'MB', message: '图片大小不超过 {sizeLimit} MB' }`", + "label": "" + } + ], + "events": [ + { + "key": "bind:add", + "desc": "上传成功后触发,仅包含本次选择的照片;`url` 表示选定视频的临时文件路径 (本地路径)。`duration` 表示选定视频的时间长度。`size`选定视频的数据量大小。更多描述参考 wx.chooseMedia 小程序官网描述", + "label": "" + }, + { + "key": "bind:complete", + "desc": "上传成功或失败后触发", + "label": "" + }, + { + "key": "bind:fail", + "desc": "上传失败后触发", + "label": "" + }, + { + "key": "bind:remove", + "desc": "移除文件时触发", + "label": "" + }, + { + "key": "bind:select-change", + "desc": "选择文件或图片之后,上传之前,触发该事件。
`files` 表示之前已经上传完成的文件列表。
`currentSelectedFiles` 表示本次上传选中的文件列表", + "label": "" + }, + { + "key": "bind:success", + "desc": "上传成功后触发,包含所有上传的文件;`url` 表示选定视频的临时文件路径 (本地路径)。`duration` 表示选定视频的时间长度。`size`选定视频的数据量大小。更多描述参考 wx.chooseMedia 小程序官网描述", + "label": "" + } + ], + "tpl": "", + "path": "./upload/upload" + } + }, + "common": { + "properties": {}, + "events": {} + }, + "menu": [ + { + "key": "menu-basic", + "label": "基础", + "submenu": [ + { + "key": "subMenu-button", + "label": "Button 按钮", + "components": ["t-button"] + }, + { + "key": "subMenu-divider", + "label": "Divider 分割线", + "components": ["t-divider"] + }, + { + "key": "subMenu-fab", + "label": "Fab 悬浮按钮", + "components": ["t-fab"] + }, + { + "key": "subMenu-icon", + "label": "Icon 图标", + "components": ["t-icon"] + } + ] + }, + { + "key": "menu-nav", + "label": "导航", + "submenu": [ + { + "key": "subMenu-drawer", + "label": "Drawer 抽屉", + "components": ["t-drawer"] + }, + { + "key": "subMenu-indexes", + "label": "Indexes 索引", + "components": ["t-indexes"] + }, + { + "key": "subMenu-navbar", + "label": "Navbar 导航条", + "components": ["t-navbar"] + }, + { + "key": "subMenu-steps", + "label": "Steps 步骤条", + "components": ["t-steps"] + }, + { + "key": "subMenu-tabbar", + "label": "TabBar 标签栏", + "components": ["t-tab-bar"] + }, + { + "key": "subMenu-tabs", + "label": "Tabs 选项卡", + "components": ["t-tabs"] + } + ] + }, + { + "key": "menu-input", + "label": "输入", + "submenu": [ + { + "key": "subMenu-checkbox", + "label": "CheckBox 复选框", + "components": ["t-checkbox"] + }, + { + "key": "subMenu-dateTimePicker", + "label": "DateTimePicker 时间选择器", + "components": ["t-date-time-picker"] + }, + { + "key": "subMenu-input", + "label": "Input 输入框", + "components": ["t-input"] + }, + { + "key": "subMenu-picker", + "label": "Picker 选择器", + "components": ["t-picker"] + }, + { + "key": "subMenu-radio", + "label": "Radio 单选框", + "components": ["t-radio"] + }, + { + "key": "subMenu-rate", + "label": "Rate 评分", + "components": ["t-rate"] + }, + { + "key": "subMenu-search", + "label": "Search 搜索框", + "components": ["t-search"] + }, + { + "key": "subMenu-slider", + "label": "Slider 滑动选择器", + "components": ["t-slider"] + }, + { + "key": "subMenu-stepper", + "label": "Stepper 步进器", + "components": ["t-stepper"] + }, + { + "key": "subMenu-switch", + "label": "Switch 开关", + "components": ["t-switch"] + }, + { + "key": "subMenu-textarea", + "label": "Textarea 多行文本框", + "components": ["t-textarea"] + }, + { + "key": "subMenu-upload", + "label": "UpLoad 上传", + "components": ["t-upload"] + } + ] + }, + { + "key": "menu-data", + "label": "数据展示", + "submenu": [ + { + "key": "subMenu-avatar", + "label": "Avatar 头像", + "components": ["t-avatar"] + }, + { + "key": "subMenu-badge", + "label": "Badge 徽标", + "components": ["t-badge"] + }, + { + "key": "subMenu-cell", + "label": "Cell 单元格", + "components": ["t-cell"] + }, + { + "key": "subMenu-collapse", + "label": "Collapse 折叠面板", + "components": ["t-collapse"] + }, + { + "key": "subMenu-dropdown-menu", + "label": "DropdownMenu 下拉菜单", + "components": ["t-dropdown-menu"] + }, + { + "key": "subMenu-empty", + "label": "Empty 空状态", + "components": ["t-empty"] + }, + { + "key": "subMenu-footer", + "label": "Footer 页脚", + "components": ["t-footer"] + }, + { + "key": "subMenu-grid", + "label": "Grid 宫格", + "components": ["t-grid"] + }, + { + "key": "subMenu-image", + "label": "Image 图片", + "components": ["t-image"] + }, + { + "key": "subMenu-skeleton", + "label": "Skeleton 骨架屏", + "components": ["t-skeleton"] + }, + { + "key": "subMenu-sticky", + "label": "Sticky 吸顶容器", + "components": ["t-sticky"] + }, + { + "key": "subMenu-swiper", + "label": "Swiper 轮播图", + "components": ["t-swiper"] + }, + { + "key": "subMenu-tag", + "label": "Tag 标签", + "components": ["t-tag"] + } + ] + }, + { + "key": "menu-info", + "label": "消息提醒", + "submenu": [ + { + "key": "subMenu-actionsheet", + "label": "ActionSheet 动作面板", + "components": ["t-action-sheet"] + }, + { + "key": "subMenu-back-top", + "label": "BackTop 返回顶部", + "components": ["t-back-top"] + }, + { + "key": "subMenu-dialog", + "label": "Dialog 弹出框", + "components": ["t-dialog"] + }, + { + "key": "subMenu-loading", + "label": "Loading 加载", + "components": ["t-loading"] + }, + { + "key": "subMenu-message", + "label": "Message 消息通知", + "components": ["t-message"] + }, + { + "key": "subMenu-popup", + "label": "Popup 弹出层", + "components": ["t-popup"] + }, + { + "key": "subMenu-progress", + "label": "Progress 进度条", + "components": ["t-progress"] + }, + { + "key": "subMenu-pullDownRefresh", + "label": "PullDownRefresh 下拉刷新", + "components": ["t-pull-down-refresh"] + }, + { + "key": "subMenu-swipeCell", + "label": "SwipeCell 滑动操作", + "components": ["t-swipe-cell"] + }, + { + "key": "subMenu-toast", + "label": "Toast 轻提示", + "components": ["t-toast"] + } + ] + } + ] +} diff --git a/miniprogram_npm/tdesign-miniprogram/action-sheet/README.en-US.md b/miniprogram_npm/tdesign-miniprogram/action-sheet/README.en-US.md index 0c84067..c2e750e 100644 --- a/miniprogram_npm/tdesign-miniprogram/action-sheet/README.en-US.md +++ b/miniprogram_npm/tdesign-miniprogram/action-sheet/README.en-US.md @@ -1,17 +1,23 @@ :: BASE_DOC :: ## API + ### ActionSheet Props name | type | default | description | required -- | -- | -- | -- | -- -align | String | center | `0.29.0`。options:center/left | N +style | Object | - | CSS(Cascading Style Sheets) | N +custom-style | Object | - | CSS(Cascading Style Sheets),used to set style on virtual component | N +align | String | center | `0.29.0`。options: center/left | N cancel-text | String | - | \- | N count | Number | 8 | \- | N description | String | - | `0.29.0` | N -items | Array | - | required。Typescript:`Array` `interface ActionSheetItem {label: string; color?: string; disabled?: boolean }`。[see more ts definition](https://github.com/Tencent/tdesign-miniprogram/tree/develop/src/action-sheet/type.ts) | Y +items | Array | - | required。Typescript:`Array` `interface ActionSheetItem {label: string; color?: string; disabled?: boolean;icon?: string;suffixIcon?: string; }`。[see more ts definition](https://github.com/Tencent/tdesign-miniprogram/tree/develop/src/action-sheet/type.ts) | Y +popup-props | Object | {} | Typescript:`PopupProps`,[Popup API Documents](./popup?tab=api)。[see more ts definition](https://github.com/Tencent/tdesign-miniprogram/tree/develop/src/action-sheet/type.ts) | N show-cancel | Boolean | true | \- | N -theme | String | list | options:list/grid | N +show-overlay | Boolean | true | \- | N +theme | String | list | options: list/grid | N +using-custom-navbar | Boolean | false | \- | N visible | Boolean | false | required | Y default-visible | Boolean | undefined | required。uncontrolled property | Y @@ -22,3 +28,25 @@ name | params | description cancel | \- | \- close | `(trigger: TriggerSource)` | [see more ts definition](https://github.com/Tencent/tdesign-miniprogram/tree/develop/src/action-sheet/type.ts)。
`type TriggerSource = 'overlay' \| 'command' \| 'select' `
selected | `(selected: ActionSheetItem \| string, index: number)` | \- +### ActionSheet External Classes + +className | Description +-- | -- +t-class | \- +t-class-cancel | \- +t-class-content | \- + +### CSS Variables + +The component provides the following CSS variables, which can be used to customize styles. +Name | Default Value | Description +-- | -- | -- +--td-action-sheet-border-color | @gray-color-1 | - +--td-action-sheet-border-radius | @radius-extra-large | - +--td-action-sheet-cancel-color | @font-gray-1 | - +--td-action-sheet-cancel-height | 96rpx | - +--td-action-sheet-color | @font-gray-1 | - +--td-action-sheet-description-color | @font-gray-3 | - +--td-action-sheet-list-item-disabled-color | @font-gray-4 | - +--td-action-sheet-list-item-height | 112rpx | - +--td-action-sheet-text-align | center | - \ No newline at end of file diff --git a/miniprogram_npm/tdesign-miniprogram/action-sheet/README.md b/miniprogram_npm/tdesign-miniprogram/action-sheet/README.md index 1ba2bab..97d176a 100644 --- a/miniprogram_npm/tdesign-miniprogram/action-sheet/README.md +++ b/miniprogram_npm/tdesign-miniprogram/action-sheet/README.md @@ -26,6 +26,12 @@ isComponent: true ## 代码演示 +
在开发者工具中预览效果 + +
+

Tips: 请确保开发者工具为打开状态。导入开发者工具后,依次执行:npm i > 构建npm包 > 勾选 "将JS编译成ES5"

+
+ ### 组件类型 列表型动作面板 @@ -83,20 +89,25 @@ handler.close(); ## API + ### ActionSheet Props -名称 | 类型 | 默认值 | 说明 | 必传 +名称 | 类型 | 默认值 | 描述 | 必传 -- | -- | -- | -- | -- +style | Object | - | 样式 | N +custom-style | Object | - | 样式,一般用于开启虚拟化组件节点场景 | N align | String | center | `0.29.0`。水平对齐方式。可选项:center/left | N cancel-text | String | - | 设置取消按钮的文本 | N count | Number | 8 | 设置每页展示菜单的数量,仅当 type=grid 时有效 | N description | String | - | `0.29.0`。动作面板描述文字 | N -items | Array | - | 必需。菜单项。TS 类型:`Array` `interface ActionSheetItem {label: string; color?: string; disabled?: boolean }`。[详细类型定义](https://github.com/Tencent/tdesign-miniprogram/tree/develop/src/action-sheet/type.ts) | Y +items | Array | - | 必需。菜单项。TS 类型:`Array` `interface ActionSheetItem {label: string; color?: string; disabled?: boolean;icon?: string;suffixIcon?: string; }`。[详细类型定义](https://github.com/Tencent/tdesign-miniprogram/tree/develop/src/action-sheet/type.ts) | Y +popup-props | Object | {} | popupProps透传。TS 类型:`PopupProps`,[Popup API Documents](./popup?tab=api)。[详细类型定义](https://github.com/Tencent/tdesign-miniprogram/tree/develop/src/action-sheet/type.ts) | N show-cancel | Boolean | true | 是否显示取消按钮 | N +show-overlay | Boolean | true | 是否显示遮罩层 | N theme | String | list | 展示类型,列表和表格形式展示。可选项:list/grid | N +using-custom-navbar | Boolean | false | 是否使用了自定义导航栏 | N visible | Boolean | false | 必需。显示与隐藏 | Y default-visible | Boolean | undefined | 必需。显示与隐藏。非受控属性 | Y -external-classes | Array | - | 组件类名,用于设置组件外层元素类名。`['t-class', 't-class-content', 't-class-cancel']` | N ### ActionSheet Events @@ -105,3 +116,25 @@ external-classes | Array | - | 组件类名,用于设置组件外层元素类 cancel | \- | 点击取消按钮时触发 close | `(trigger: TriggerSource)` | 关闭时触发。[详细类型定义](https://github.com/Tencent/tdesign-miniprogram/tree/develop/src/action-sheet/type.ts)。
`type TriggerSource = 'overlay' \| 'command' \| 'select' `
selected | `(selected: ActionSheetItem \| string, index: number)` | 选择菜单项时触发 +### ActionSheet External Classes + +类名 | 描述 +-- | -- +t-class | 根节点样式类 +t-class-cancel | 取消样式类 +t-class-content | 内容样式类 + +### CSS Variables + +组件提供了下列 CSS 变量,可用于自定义样式。 +名称 | 默认值 | 描述 +-- | -- | -- +--td-action-sheet-border-color | @gray-color-1 | - +--td-action-sheet-border-radius | @radius-extra-large | - +--td-action-sheet-cancel-color | @font-gray-1 | - +--td-action-sheet-cancel-height | 96rpx | - +--td-action-sheet-color | @font-gray-1 | - +--td-action-sheet-description-color | @font-gray-3 | - +--td-action-sheet-list-item-disabled-color | @font-gray-4 | - +--td-action-sheet-list-item-height | 112rpx | - +--td-action-sheet-text-align | center | - \ No newline at end of file diff --git a/miniprogram_npm/tdesign-miniprogram/action-sheet/action-sheet.d.ts b/miniprogram_npm/tdesign-miniprogram/action-sheet/action-sheet.d.ts index dd4d4bf..924dfe5 100644 --- a/miniprogram_npm/tdesign-miniprogram/action-sheet/action-sheet.d.ts +++ b/miniprogram_npm/tdesign-miniprogram/action-sheet/action-sheet.d.ts @@ -1,6 +1,7 @@ import { SuperComponent } from '../common/src/index'; export default class ActionSheet extends SuperComponent { static show: (options: import("./show").ActionSheetShowOption) => WechatMiniprogram.Component.TrivialInstance; + behaviors: string[]; externalClasses: string[]; properties: { align?: { @@ -22,22 +23,37 @@ export default class ActionSheet extends SuperComponent { items: { type: ArrayConstructor; value?: (string | import("./type").ActionSheetItem)[]; + required?: boolean; + }; + popupProps?: { + type: ObjectConstructor; + value?: import("../popup").TdPopupProps; }; showCancel?: { type: BooleanConstructor; value?: boolean; }; + showOverlay?: { + type: BooleanConstructor; + value?: boolean; + }; theme?: { type: StringConstructor; value?: "list" | "grid"; }; + usingCustomNavbar?: { + type: BooleanConstructor; + value?: boolean; + }; visible: { type: BooleanConstructor; value?: boolean; + required?: boolean; }; defaultVisible: { type: BooleanConstructor; value?: boolean; + required?: boolean; }; }; data: { @@ -45,6 +61,8 @@ export default class ActionSheet extends SuperComponent { classPrefix: string; gridThemeItems: any[]; currentSwiperIndex: number; + defaultPopUpProps: {}; + defaultPopUpzIndex: number; }; controlledProps: { key: string; diff --git a/miniprogram_npm/tdesign-miniprogram/action-sheet/action-sheet.js b/miniprogram_npm/tdesign-miniprogram/action-sheet/action-sheet.js index aa8ba4d..c20b865 100644 --- a/miniprogram_npm/tdesign-miniprogram/action-sheet/action-sheet.js +++ b/miniprogram_npm/tdesign-miniprogram/action-sheet/action-sheet.js @@ -9,11 +9,13 @@ import { SuperComponent, wxComponent } from '../common/src/index'; import config from '../common/config'; import { ActionSheetTheme, show } from './show'; import props from './props'; +import useCustomNavbar from '../mixins/using-custom-navbar'; const { prefix } = config; const name = `${prefix}-action-sheet`; let ActionSheet = class ActionSheet extends SuperComponent { constructor() { super(...arguments); + this.behaviors = [useCustomNavbar]; this.externalClasses = [`${prefix}-class`, `${prefix}-class-content`, `${prefix}-class-cancel`]; this.properties = Object.assign({}, props); this.data = { @@ -21,6 +23,8 @@ let ActionSheet = class ActionSheet extends SuperComponent { classPrefix: name, gridThemeItems: [], currentSwiperIndex: 0, + defaultPopUpProps: {}, + defaultPopUpzIndex: 11500, }; this.controlledProps = [ { @@ -73,12 +77,18 @@ let ActionSheet = class ActionSheet extends SuperComponent { const realIndex = isSwiperMode ? index + currentSwiperIndex * count : index; if (item) { this.triggerEvent('selected', { selected: item, index: realIndex }); - this.trigger('close', { trigger: 'select' }); - this._trigger('visible-change', { visible: false }); + if (!item.disabled) { + this.triggerEvent('close', { trigger: 'select' }); + this._trigger('visible-change', { visible: false }); + } } }, onCancel() { this.triggerEvent('cancel'); + if (this.autoClose) { + this.setData({ visible: false }); + this.autoClose = false; + } }, }; } diff --git a/miniprogram_npm/tdesign-miniprogram/action-sheet/action-sheet.json b/miniprogram_npm/tdesign-miniprogram/action-sheet/action-sheet.json index c1eb33e..70f0a29 100644 --- a/miniprogram_npm/tdesign-miniprogram/action-sheet/action-sheet.json +++ b/miniprogram_npm/tdesign-miniprogram/action-sheet/action-sheet.json @@ -1,10 +1,10 @@ { "component": true, + "styleIsolation": "apply-shared", "usingComponents": { "t-icon": "../icon/icon", "t-popup": "../popup/popup", "t-grid": "../grid/grid", - "t-grid-item": "../grid-item/grid-item", - "t-swiper-nav": "../swiper-nav/swiper-nav" + "t-grid-item": "../grid-item/grid-item" } } diff --git a/miniprogram_npm/tdesign-miniprogram/action-sheet/action-sheet.wxml b/miniprogram_npm/tdesign-miniprogram/action-sheet/action-sheet.wxml index bf8d757..3928217 100644 --- a/miniprogram_npm/tdesign-miniprogram/action-sheet/action-sheet.wxml +++ b/miniprogram_npm/tdesign-miniprogram/action-sheet/action-sheet.wxml @@ -4,7 +4,15 @@ - + - + - {{ cancelText }} + {{ cancelText || '取消' }} diff --git a/miniprogram_npm/tdesign-miniprogram/action-sheet/action-sheet.wxss b/miniprogram_npm/tdesign-miniprogram/action-sheet/action-sheet.wxss index e9ad6bb..c647d5a 100644 --- a/miniprogram_npm/tdesign-miniprogram/action-sheet/action-sheet.wxss +++ b/miniprogram_npm/tdesign-miniprogram/action-sheet/action-sheet.wxss @@ -26,7 +26,7 @@ transform: scale(1.5); } .t-action-sheet__content { - color: var(--td-action-sheet-color, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))); + color: var(--td-action-sheet-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9)))); border-top-left-radius: var(--td-action-sheet-border-radius, var(--td-radius-extra-large, 24rpx)); border-top-right-radius: var(--td-action-sheet-border-radius, var(--td-radius-extra-large, 24rpx)); background-color: var(--td-bg-color-container, var(--td-font-white-1, #ffffff)); @@ -45,7 +45,7 @@ padding-bottom: 48rpx; } .t-action-sheet__description { - color: var(--td-action-sheet-description-color, var(--td-font-gray-3, rgba(0, 0, 0, 0.4))); + color: var(--td-action-sheet-description-color, var(--td-text-color-placeholder, var(--td-font-gray-3, rgba(0, 0, 0, 0.4)))); line-height: 44rpx; font-size: 28rpx; text-align: var(--td-action-sheet-text-align, center); @@ -63,7 +63,7 @@ bottom: 0; left: unset; right: unset; - background-color: var(--td-action-sheet-border-color, var(--td-gray-color-1, #f3f3f3)); + background-color: var(--td-action-sheet-border-color, var(--td-border-level-1-color, var(--td-gray-color-3, #e7e7e7))); } .t-action-sheet__description::after { height: 1px; @@ -93,7 +93,7 @@ bottom: 0; left: unset; right: unset; - background-color: var(--td-action-sheet-border-color, var(--td-gray-color-1, #f3f3f3)); + background-color: var(--td-action-sheet-border-color, var(--td-border-level-1-color, var(--td-gray-color-3, #e7e7e7))); } .t-action-sheet__list-item::after { height: 1px; @@ -111,7 +111,7 @@ left: 32rpx; } .t-action-sheet__list-item--disabled { - color: var(--td-action-sheet-list-item-disabled-color, var(--td-font-gray-4, rgba(0, 0, 0, 0.26))); + color: var(--td-action-sheet-list-item-disabled-color, var(--td-text-color-disabled, var(--td-font-gray-4, rgba(0, 0, 0, 0.26)))); } .t-action-sheet__list-item-text { font-size: var(--td-font-size-m, 32rpx); @@ -123,6 +123,9 @@ .t-action-sheet__list-item-icon { margin-right: 16rpx; } +.t-action-sheet__list-item-icon--suffix { + margin-left: auto; +} .t-action-sheet__swiper-wrap { margin-top: 8rpx; position: relative; @@ -132,16 +135,17 @@ } .t-action-sheet__gap-list { height: 16rpx; - background-color: var(--td-action-sheet-border-color, var(--td-gray-color-1, #f3f3f3)); + background-color: var(--td-action-sheet-gap-color, var(--td-bg-color-page, var(--td-gray-color-1, #f3f3f3))); } .t-action-sheet__gap-grid { height: 1rpx; - background-color: var(--td-action-sheet-border-color, var(--td-gray-color-1, #f3f3f3)); + background-color: var(--td-action-sheet-border-color, var(--td-border-level-1-color, var(--td-gray-color-3, #e7e7e7))); } .t-action-sheet__cancel { display: flex; align-items: center; justify-content: center; + color: var(--td-action-sheet-cancel-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9)))); height: var(--td-action-sheet-cancel-height, 96rpx); } .t-action-sheet__dots { @@ -163,7 +167,3 @@ .t-action-sheet__dots-item.t-is-active { background-color: #0052d9; } -.t-action-sheet__safe { - padding-bottom: constant(safe-area-inset-bottom); - padding-bottom: env(safe-area-inset-bottom); -} diff --git a/miniprogram_npm/tdesign-miniprogram/action-sheet/index.d.ts b/miniprogram_npm/tdesign-miniprogram/action-sheet/index.d.ts index de46874..5c41389 100644 --- a/miniprogram_npm/tdesign-miniprogram/action-sheet/index.d.ts +++ b/miniprogram_npm/tdesign-miniprogram/action-sheet/index.d.ts @@ -1,3 +1,8 @@ -import ActionSheet from './action-sheet'; -export * from './show'; -export default ActionSheet; +/// +import { ActionSheetItem, ActionSheetTheme, ActionSheetShowOption } from './show'; +export { ActionSheetItem, ActionSheetTheme, ActionSheetShowOption }; +declare const _default: { + show(options: ActionSheetShowOption): WechatMiniprogram.Component.TrivialInstance; + close(options: ActionSheetShowOption): void; +}; +export default _default; diff --git a/miniprogram_npm/tdesign-miniprogram/action-sheet/index.js b/miniprogram_npm/tdesign-miniprogram/action-sheet/index.js index de46874..7fcdd3c 100644 --- a/miniprogram_npm/tdesign-miniprogram/action-sheet/index.js +++ b/miniprogram_npm/tdesign-miniprogram/action-sheet/index.js @@ -1,3 +1,10 @@ -import ActionSheet from './action-sheet'; -export * from './show'; -export default ActionSheet; +import { show, close, ActionSheetTheme } from './show'; +export { ActionSheetTheme }; +export default { + show(options) { + return show(options); + }, + close(options) { + return close(options); + }, +}; diff --git a/miniprogram_npm/tdesign-miniprogram/action-sheet/props.js b/miniprogram_npm/tdesign-miniprogram/action-sheet/props.js index c89fa9e..5a86e41 100644 --- a/miniprogram_npm/tdesign-miniprogram/action-sheet/props.js +++ b/miniprogram_npm/tdesign-miniprogram/action-sheet/props.js @@ -5,7 +5,7 @@ const props = { }, cancelText: { type: String, - value: '取消', + value: '', }, count: { type: Number, @@ -17,22 +17,37 @@ const props = { }, items: { type: Array, + required: true, + }, + popupProps: { + type: Object, + value: {}, }, showCancel: { type: Boolean, value: true, }, + showOverlay: { + type: Boolean, + value: true, + }, theme: { type: String, value: 'list', }, + usingCustomNavbar: { + type: Boolean, + value: false, + }, visible: { type: Boolean, value: null, + required: true, }, defaultVisible: { type: Boolean, value: false, + required: true, }, }; export default props; diff --git a/miniprogram_npm/tdesign-miniprogram/action-sheet/show.d.ts b/miniprogram_npm/tdesign-miniprogram/action-sheet/show.d.ts index e0d8eae..824502a 100644 --- a/miniprogram_npm/tdesign-miniprogram/action-sheet/show.d.ts +++ b/miniprogram_npm/tdesign-miniprogram/action-sheet/show.d.ts @@ -12,13 +12,15 @@ export declare enum ActionSheetTheme { Grid = "grid" } interface ActionSheetProps { - visible: boolean; - items: Array; - defaultVisible?: boolean; + align: 'center' | 'left'; cancelText?: string; count?: number; + description: string; + items: Array; showCancel?: boolean; theme?: ActionSheetTheme; + visible: boolean; + defaultVisible?: boolean; } export interface ActionSheetShowOption extends Omit { context?: Context; diff --git a/miniprogram_npm/tdesign-miniprogram/action-sheet/template/grid.wxml b/miniprogram_npm/tdesign-miniprogram/action-sheet/template/grid.wxml index bdc595e..8f6f20d 100644 --- a/miniprogram_npm/tdesign-miniprogram/action-sheet/template/grid.wxml +++ b/miniprogram_npm/tdesign-miniprogram/action-sheet/template/grid.wxml @@ -8,9 +8,10 @@ wx:key="index" bind:tap="onSelect" data-index="{{index}}" - icon="{{item.icon}}" - text="{{item.label}}" - image="{{item.image}}" + icon="{{ { name: item.icon, color: item.color } }}" + text="{{item.label || ''}}" + image="{{item.image || ''}}" + style="--td-grid-item-text-color: {{item.color}}" > @@ -27,9 +28,10 @@ wx:key="index" data-index="{{index}}" bind:tap="onSelect" - icon="{{item.icon}}" - text="{{item.label}}" - image="{{item.image}}" + icon="{{ { name: item.icon, color: item.color } }}" + text="{{item.label || ''}}" + image="{{item.image || ''}}" + style="--td-grid-item-text-color: {{item.color}}" > diff --git a/miniprogram_npm/tdesign-miniprogram/action-sheet/template/list.wxml b/miniprogram_npm/tdesign-miniprogram/action-sheet/template/list.wxml index 37e5dcf..04f2e34 100644 --- a/miniprogram_npm/tdesign-miniprogram/action-sheet/template/list.wxml +++ b/miniprogram_npm/tdesign-miniprogram/action-sheet/template/list.wxml @@ -10,5 +10,11 @@ > {{item.label || item}} + diff --git a/miniprogram_npm/tdesign-miniprogram/action-sheet/type.d.ts b/miniprogram_npm/tdesign-miniprogram/action-sheet/type.d.ts index f77a8fb..3fb8bdc 100644 --- a/miniprogram_npm/tdesign-miniprogram/action-sheet/type.d.ts +++ b/miniprogram_npm/tdesign-miniprogram/action-sheet/type.d.ts @@ -1,3 +1,4 @@ +import { PopupProps } from '../popup/index'; export interface TdActionSheetProps { align?: { type: StringConstructor; @@ -18,26 +19,43 @@ export interface TdActionSheetProps { items: { type: ArrayConstructor; value?: Array; + required?: boolean; + }; + popupProps?: { + type: ObjectConstructor; + value?: PopupProps; }; showCancel?: { type: BooleanConstructor; value?: boolean; }; + showOverlay?: { + type: BooleanConstructor; + value?: boolean; + }; theme?: { type: StringConstructor; value?: 'list' | 'grid'; }; + usingCustomNavbar?: { + type: BooleanConstructor; + value?: boolean; + }; visible: { type: BooleanConstructor; value?: boolean; + required?: boolean; }; defaultVisible: { type: BooleanConstructor; value?: boolean; + required?: boolean; }; } export interface ActionSheetItem { label: string; color?: string; disabled?: boolean; + icon?: string; + suffixIcon?: string; } diff --git a/miniprogram_npm/tdesign-miniprogram/avatar-group/avatar-group.d.ts b/miniprogram_npm/tdesign-miniprogram/avatar-group/avatar-group.d.ts index c9f9ba6..e131442 100644 --- a/miniprogram_npm/tdesign-miniprogram/avatar-group/avatar-group.d.ts +++ b/miniprogram_npm/tdesign-miniprogram/avatar-group/avatar-group.d.ts @@ -23,6 +23,6 @@ export default class AvatarGroup extends SuperComponent { methods: { setClass(): void; handleMax(): void; - handleChildCascading(): void; + onCollapsedItemClick(e: WechatMiniprogram.CustomEvent): void; }; } diff --git a/miniprogram_npm/tdesign-miniprogram/avatar-group/avatar-group.js b/miniprogram_npm/tdesign-miniprogram/avatar-group/avatar-group.js index b1d4563..f85c574 100644 --- a/miniprogram_npm/tdesign-miniprogram/avatar-group/avatar-group.js +++ b/miniprogram_npm/tdesign-miniprogram/avatar-group/avatar-group.js @@ -38,7 +38,6 @@ let AvatarGroup = class AvatarGroup extends SuperComponent { length: this.$children.length, }); this.handleMax(); - this.handleChildCascading(); }, }; this.observers = { @@ -53,7 +52,8 @@ let AvatarGroup = class AvatarGroup extends SuperComponent { const classList = [ name, `${prefix}-class`, - `${name}-offset-${direction}-${size.indexOf('px') > -1 ? 'medium' : size}`, + `${name}-offset-${direction}`, + `${name}-offset-${direction}-${size.indexOf('px') > -1 ? 'medium' : size || 'medium'}`, ]; this.setData({ className: classList.join(' '), @@ -69,13 +69,8 @@ let AvatarGroup = class AvatarGroup extends SuperComponent { child.hide(); }); }, - handleChildCascading() { - if (this.properties.cascading === 'right-up') - return; - const defaultZIndex = 100; - this.$children.forEach((child, index) => { - child.updateCascading(defaultZIndex - index * 10); - }); + onCollapsedItemClick(e) { + this.triggerEvent('collapsed-item-click', e.detail); }, }; } diff --git a/miniprogram_npm/tdesign-miniprogram/avatar-group/avatar-group.json b/miniprogram_npm/tdesign-miniprogram/avatar-group/avatar-group.json index 9f58d25..9b5763d 100644 --- a/miniprogram_npm/tdesign-miniprogram/avatar-group/avatar-group.json +++ b/miniprogram_npm/tdesign-miniprogram/avatar-group/avatar-group.json @@ -1,5 +1,6 @@ { "component": true, + "styleIsolation": "shared", "usingComponents": { "t-avatar": "../avatar/avatar" } diff --git a/miniprogram_npm/tdesign-miniprogram/avatar-group/avatar-group.wxml b/miniprogram_npm/tdesign-miniprogram/avatar-group/avatar-group.wxml index 26929f2..1e2f6cd 100644 --- a/miniprogram_npm/tdesign-miniprogram/avatar-group/avatar-group.wxml +++ b/miniprogram_npm/tdesign-miniprogram/avatar-group/avatar-group.wxml @@ -7,11 +7,12 @@ - + {{collapseAvatar}} 在开发者工具中预览效果 + +
+

Tips: 请确保开发者工具为打开状态。导入开发者工具后,依次执行:npm i > 构建npm包 > 勾选 "将JS编译成ES5"

+
+ ### 头像类型 图片头像 @@ -55,33 +61,91 @@ isComponent: true {{ size }} ## API + ### Avatar Props -名称 | 类型 | 默认值 | 说明 | 必传 +名称 | 类型 | 默认值 | 描述 | 必传 -- | -- | -- | -- | -- +style | Object | - | 样式 | N +custom-style | Object | - | 样式,一般用于开启虚拟化组件节点场景 | N alt | String | - | 头像替换文本,仅当图片加载失败时有效 | N badge-props | Object | - | 头像右上角提示信息,继承 Badge 组件的全部特性。如:小红点,或者数字。TS 类型:`BadgeProps`,[Badge API Documents](./badge?tab=api)。[详细类型定义](https://github.com/Tencent/tdesign-miniprogram/tree/develop/src/avatar/type.ts) | N bordered | Boolean | false | 已废弃。是否显示外边框 | N -external-classes | Array | - | 组件类名,用于设置组件外层元素类名。`['t-class', 't-class-image', 't-class-icon', 't-class-alt', 't-class-content']` | N hide-on-load-failed | Boolean | false | 加载失败时隐藏图片 | N icon | String / Object | - | 图标。值为字符串表示图标名称,值为 `Object` 类型,表示透传至 `icon`。 | N image | String | - | 图片地址 | N -image-props | Object | - | 透传至 Image 组件 | N -shape | String | circle | 形状。可选项:circle/round。TS 类型:`ShapeEnum ` `type ShapeEnum = 'circle' \| 'round'`。[详细类型定义](https://github.com/Tencent/tdesign-miniprogram/tree/develop/src/avatar/type.ts) | N -size | String | medium | 尺寸,示例值:small/medium/large/24px/38px 等 | N +image-props | Object | - | 透传至 Image 组件。TS 类型:`ImageProps`,[Image API Documents](./image?tab=api)。[详细类型定义](https://github.com/Tencent/tdesign-miniprogram/tree/develop/src/avatar/type.ts) | N +shape | String | - | 形状。优先级高于 AvatarGroup.shape 。Avatar 单独存在时,默认值为 circle。如果父组件 AvatarGroup 存在,默认值便由 AvatarGroup.shape 决定。可选项:circle/round。TS 类型:`ShapeEnum`。[通用类型定义](https://github.com/Tencent/tdesign-miniprogram/blob/develop/src/common/common.ts) | N +size | String | - | 尺寸,示例值:small/medium/large/24px/38px 等。优先级高于 AvatarGroup.size 。Avatar 单独存在时,默认值为 medium。如果父组件 AvatarGroup 存在,默认值便由 AvatarGroup.size 决定 | N ### Avatar Events 名称 | 参数 | 描述 -- | -- | -- -error | \- | 图片加载失败时触发 +error | - | 图片加载失败时触发 + +### Avatar External Classes + +类名 | 描述 +-- | -- +t-class | 根节点样式类 +t-class-alt | 替代文本样式类 +t-class-content | 内容样式类 +t-class-icon | 图标样式类 +t-class-image | 图片样式类 + ### AvatarGroup Props -名称 | 类型 | 默认值 | 说明 | 必传 +名称 | 类型 | 默认值 | 描述 | 必传 -- | -- | -- | -- | -- +style | Object | - | 样式 | N +custom-style | Object | - | 样式,一般用于开启虚拟化组件节点场景 | N cascading | String | 'left-up' | 图片之间的层叠关系,可选值:左侧图片在上和右侧图片在上。可选项:left-up/right-up。TS 类型:`CascadingValue` `type CascadingValue = 'left-up' \| 'right-up'`。[详细类型定义](https://github.com/Tencent/tdesign-miniprogram/tree/develop/src/avatar-group/type.ts) | N -collapse-avatar | String / Slot | - | 头像数量超出时,会出现一个头像折叠元素。该元素内容可自定义。默认为 `+N`。示例:`+5`,`...`, `更多` | N -external-classes | Array | - | 组件类名,用于设置组件外层元素类名。`['t-class', 't-class-image', 't-class-content']` | N +collapse-avatar | String / Slot | - | 头像数量超出时,会出现一个头像折叠元素。该元素内容可自定义。默认为 `+N`。示例:`+5`,`...`, `更多`。[通用类型定义](https://github.com/Tencent/tdesign-miniprogram/blob/develop/src/common/common.ts) | N max | Number | - | 能够同时显示的最多头像数量 | N -size | String | medium | 尺寸,示例值:small/medium/large/24px/38px 等。优先级低于 Avatar.size | N +shape | String | - | 形状。优先级低于 Avatar.shape。可选项:circle/round。TS 类型:`ShapeEnum`。[通用类型定义](https://github.com/Tencent/tdesign-miniprogram/blob/develop/src/common/common.ts) | N +size | String | - | 尺寸,示例值:small/medium/large/24px/38px 等。优先级低于 Avatar.size | N + +### AvatarGroup Events + +名称 | 参数 | 描述 +-- | -- | -- +collapsed-item-click | - | 点击头像折叠元素触发 + +### AvatarGroup External Classes + +类名 | 描述 +-- | -- +t-class | 根节点样式类 +t-class-content | 内容样式类 +t-class-image | 图片样式类 + +### CSS Variables + +组件提供了下列 CSS 变量,可用于自定义样式。 +名称 | 默认值 | 描述 +-- | -- | -- +--td-avatar-group-init-z-index | @avatar-group-init-zIndex) - @i | - +--td-avatar-group-line-spacing | 4rpx | - +--td-avatar-group-margin-left-large | -16rpx | - +--td-avatar-group-margin-left-medium | -16rpx | - +--td-avatar-group-margin-left-small | -16rpx | - +--td-avatar-bg-color | @brand-color-light-active | - +--td-avatar-border-color | #fff | - +--td-avatar-border-width-large | 6rpx | - +--td-avatar-border-width-medium | 4rpx | - +--td-avatar-border-width-small | 2rpx | - +--td-avatar-circle-border-radius | @radius-circle | - +--td-avatar-content-color | @brand-color | - +--td-avatar-icon-large-font-size | 64rpx | - +--td-avatar-icon-medium-font-size | 48rpx | - +--td-avatar-icon-small-font-size | 40rpx | - +--td-avatar-large-width | 128rpx | - +--td-avatar-margin-left | 0 | - +--td-avatar-medium-width | 96rpx | - +--td-avatar-round-border-radius | @radius-default | - +--td-avatar-small-width | 80rpx | - +--td-avatar-text-large-font-size | @font-size-xl | - +--td-avatar-text-medium-font-size | @font-size-m | - +--td-avatar-text-small-font-size | @font-size-base | - \ No newline at end of file diff --git a/miniprogram_npm/tdesign-miniprogram/avatar/avatar.d.ts b/miniprogram_npm/tdesign-miniprogram/avatar/avatar.d.ts index f25f03d..b4536dc 100644 --- a/miniprogram_npm/tdesign-miniprogram/avatar/avatar.d.ts +++ b/miniprogram_npm/tdesign-miniprogram/avatar/avatar.d.ts @@ -9,7 +9,6 @@ export default class Avatar extends SuperComponent { classPrefix: string; isShow: boolean; zIndex: number; - bordered: boolean; }; relations: RelationsOptions; observers: { @@ -17,7 +16,6 @@ export default class Avatar extends SuperComponent { }; methods: { hide(): void; - updateCascading(zIndex: any): void; onLoadError(e: WechatMiniprogram.CustomEvent): void; }; } diff --git a/miniprogram_npm/tdesign-miniprogram/avatar/avatar.js b/miniprogram_npm/tdesign-miniprogram/avatar/avatar.js index 29f7288..9f5c7c1 100644 --- a/miniprogram_npm/tdesign-miniprogram/avatar/avatar.js +++ b/miniprogram_npm/tdesign-miniprogram/avatar/avatar.js @@ -15,7 +15,6 @@ let Avatar = class Avatar extends SuperComponent { super(...arguments); this.options = { multipleSlots: true, - styleIsolation: 'apply-shared', }; this.externalClasses = [ `${prefix}-class`, @@ -30,16 +29,15 @@ let Avatar = class Avatar extends SuperComponent { classPrefix: name, isShow: true, zIndex: 0, - bordered: false, }; this.relations = { '../avatar-group/avatar-group': { type: 'ancestor', linked(parent) { - var _a; this.parent = parent; this.setData({ - size: (_a = this.data.size) !== null && _a !== void 0 ? _a : parent.data.size, + shape: this.data.shape || parent.data.shape || 'circle', + size: this.data.size || parent.data.size, bordered: true, }); }, @@ -57,9 +55,6 @@ let Avatar = class Avatar extends SuperComponent { isShow: false, }); }, - updateCascading(zIndex) { - this.setData({ zIndex }); - }, onLoadError(e) { if (this.properties.hideOnLoadFailed) { this.setData({ diff --git a/miniprogram_npm/tdesign-miniprogram/avatar/avatar.json b/miniprogram_npm/tdesign-miniprogram/avatar/avatar.json index 4461d94..15361c2 100644 --- a/miniprogram_npm/tdesign-miniprogram/avatar/avatar.json +++ b/miniprogram_npm/tdesign-miniprogram/avatar/avatar.json @@ -1,5 +1,6 @@ { "component": true, + "styleIsolation": "shared", "usingComponents": { "t-icon": "../icon/icon", "t-badge": "../badge/badge", diff --git a/miniprogram_npm/tdesign-miniprogram/avatar/avatar.wxml b/miniprogram_npm/tdesign-miniprogram/avatar/avatar.wxml index e908f5a..3f6e679 100644 --- a/miniprogram_npm/tdesign-miniprogram/avatar/avatar.wxml +++ b/miniprogram_npm/tdesign-miniprogram/avatar/avatar.wxml @@ -4,7 +4,7 @@ diff --git a/miniprogram_npm/tdesign-miniprogram/avatar/avatar.wxs b/miniprogram_npm/tdesign-miniprogram/avatar/avatar.wxs index d67e5d8..50476e4 100644 --- a/miniprogram_npm/tdesign-miniprogram/avatar/avatar.wxs +++ b/miniprogram_npm/tdesign-miniprogram/avatar/avatar.wxs @@ -18,9 +18,7 @@ module.exports = { } }, - getStyles: function (isShow, zIndex) { - var displayStyle = isShow ? '' : 'display: none;'; - var zIndexStyle = zIndex ? 'z-index:' + zIndex + ';' : ''; - return displayStyle + zIndexStyle; + getStyles: function (isShow) { + return isShow ? '' : 'display: none;'; }, }; diff --git a/miniprogram_npm/tdesign-miniprogram/avatar/avatar.wxss b/miniprogram_npm/tdesign-miniprogram/avatar/avatar.wxss index b1c3697..5d1b506 100644 --- a/miniprogram_npm/tdesign-miniprogram/avatar/avatar.wxss +++ b/miniprogram_npm/tdesign-miniprogram/avatar/avatar.wxss @@ -42,7 +42,7 @@ .t-avatar--large { width: var(--td-avatar-large-width, 128rpx); height: var(--td-avatar-large-width, 128rpx); - font-size: var(--td-avatar-text-large-font-size, 16px); + font-size: var(--td-avatar-text-large-font-size, var(--td-font-size-xl, 40rpx)); } .t-avatar--large .t-avatar__icon { font-size: var(--td-avatar-icon-large-font-size, 64rpx); @@ -50,7 +50,7 @@ .t-avatar--medium { width: var(--td-avatar-medium-width, 96rpx); height: var(--td-avatar-medium-width, 96rpx); - font-size: var(--td-avatar-text-medium-font-size, var(--td-font-size-base, 28rpx)); + font-size: var(--td-avatar-text-medium-font-size, var(--td-font-size-m, 32rpx)); } .t-avatar--medium .t-avatar__icon { font-size: var(--td-avatar-icon-medium-font-size, 48rpx); @@ -58,7 +58,7 @@ .t-avatar--small { width: var(--td-avatar-small-width, 80rpx); height: var(--td-avatar-small-width, 80rpx); - font-size: var(--td-avatar-text-small-font-size, var(--td-font-size-s, 24rpx)); + font-size: var(--td-avatar-text-small-font-size, var(--td-font-size-base, 28rpx)); } .t-avatar--small .t-avatar__icon { font-size: var(--td-avatar-icon-small-font-size, 40rpx); @@ -94,11 +94,11 @@ border-style: solid; } .t-avatar--border-small { - border-width: var(--td-avatar-border-width-small, 4rpx); + border-width: var(--td-avatar-border-width-small, 2rpx); } .t-avatar--border-medium { - border-width: var(--td-avatar-border-width-medium, 6rpx); + border-width: var(--td-avatar-border-width-medium, 4rpx); } .t-avatar--border-large { - border-width: var(--td-avatar-border-width-large, 8rpx); + border-width: var(--td-avatar-border-width-large, 6rpx); } diff --git a/miniprogram_npm/tdesign-miniprogram/avatar/props.js b/miniprogram_npm/tdesign-miniprogram/avatar/props.js index bd83025..9aba4c5 100644 --- a/miniprogram_npm/tdesign-miniprogram/avatar/props.js +++ b/miniprogram_npm/tdesign-miniprogram/avatar/props.js @@ -10,9 +10,6 @@ const props = { type: Boolean, value: false, }, - externalClasses: { - type: Array, - }, hideOnLoadFailed: { type: Boolean, value: false, @@ -29,11 +26,10 @@ const props = { }, shape: { type: String, - value: 'circle', }, size: { type: String, - value: 'medium', + value: '', }, }; export default props; diff --git a/miniprogram_npm/tdesign-miniprogram/avatar/type.d.ts b/miniprogram_npm/tdesign-miniprogram/avatar/type.d.ts index 07dfe75..79cac9d 100644 --- a/miniprogram_npm/tdesign-miniprogram/avatar/type.d.ts +++ b/miniprogram_npm/tdesign-miniprogram/avatar/type.d.ts @@ -1,4 +1,6 @@ import { BadgeProps } from '../badge/index'; +import { ImageProps } from '../image/index'; +import { ShapeEnum } from '../common/common'; export interface TdAvatarProps { alt?: { type: StringConstructor; @@ -12,14 +14,6 @@ export interface TdAvatarProps { type: BooleanConstructor; value?: boolean; }; - style?: { - type: StringConstructor; - value?: string; - }; - externalClasses?: { - type: ArrayConstructor; - value?: ['t-class', 't-class-image', 't-class-icon', 't-class-alt', 't-class-content']; - }; hideOnLoadFailed?: { type: BooleanConstructor; value?: boolean; @@ -34,7 +28,7 @@ export interface TdAvatarProps { }; imageProps?: { type: ObjectConstructor; - value?: object; + value?: ImageProps; }; shape?: { type: StringConstructor; @@ -45,4 +39,3 @@ export interface TdAvatarProps { value?: string; }; } -export declare type ShapeEnum = 'circle' | 'round'; diff --git a/miniprogram_npm/tdesign-miniprogram/back-top/README.en-US.md b/miniprogram_npm/tdesign-miniprogram/back-top/README.en-US.md index c75a4b5..558178c 100644 --- a/miniprogram_npm/tdesign-miniprogram/back-top/README.en-US.md +++ b/miniprogram_npm/tdesign-miniprogram/back-top/README.en-US.md @@ -6,14 +6,36 @@ name | type | default | description | required -- | -- | -- | -- | -- -external-classes | Array | - | `['t-class', 't-class-icon', 't-class-text']` | N +style | Object | - | CSS(Cascading Style Sheets) | N +custom-style | Object | - | CSS(Cascading Style Sheets),used to set style on virtual component | N fixed | Boolean | true | \- | N -icon | String / Boolean / Object / Slot | - | \- | N +icon | String / Boolean / Object / Slot | true | [see more ts definition](https://github.com/Tencent/tdesign-miniprogram/blob/develop/src/common/common.ts) | N +scroll-top | Number | 0 | \- | N text | String | '' | \- | N -theme | String | round | options:round/half-round/round-dark/half-round-dark | N +theme | String | round | options: round/half-round/round-dark/half-round-dark | N +visibility-height | Number | 200 | \- | N ### BackTop Events name | params | description -- | -- | -- to-top | \- | \- +### BackTop External Classes + +className | Description +-- | -- +t-class | \- +t-class-icon | \- +t-class-text | \- + +### CSS Variables + +The component provides the following CSS variables, which can be used to customize styles. +Name | Default Value | Description +-- | -- | -- +--td-back-top-round-bg-color | @font-white-1 | - +--td-back-top-round-border-color | @component-border | - +--td-back-top-round-border-radius | @radius-circle | - +--td-back-top-round-color | @font-gray-1 | - +--td-back-top-round-dark-bg-color | @gray-color-14 | - +--td-back-top-round-dark-color | @font-white-1 | - \ No newline at end of file diff --git a/miniprogram_npm/tdesign-miniprogram/back-top/README.md b/miniprogram_npm/tdesign-miniprogram/back-top/README.md index 7e220e4..50b2c28 100644 --- a/miniprogram_npm/tdesign-miniprogram/back-top/README.md +++ b/miniprogram_npm/tdesign-miniprogram/back-top/README.md @@ -18,6 +18,13 @@ isComponent: true ## 代码演示 + 在开发者工具中预览效果 + +
+

Tips: 请确保开发者工具为打开状态。导入开发者工具后,依次执行:npm i > 构建npm包 > 勾选 "将JS编译成ES5"

+
+ + ### 基础返回顶部 @@ -25,18 +32,41 @@ isComponent: true {{ base }} ## API + ### BackTop Props -名称 | 类型 | 默认值 | 说明 | 必传 +名称 | 类型 | 默认值 | 描述 | 必传 -- | -- | -- | -- | -- -external-classes | Array | - | 组件类名,分别用于设置外层元素、图标、文本内容等元素类名。`['t-class', 't-class-icon', 't-class-text']` | N +style | Object | - | 样式 | N +custom-style | Object | - | 样式,一般用于开启虚拟化组件节点场景 | N fixed | Boolean | true | 是否绝对定位固定到屏幕右下方 | N -icon | String / Boolean / Object / Slot | true | 图标。值为 `false` 表示不显示图标。不传表示使用默认图标 `'backtop'` | N +icon | String / Boolean / Object / Slot | true | 图标。值为 `false` 表示不显示图标。不传表示使用默认图标 `'backtop'`。[通用类型定义](https://github.com/Tencent/tdesign-miniprogram/blob/develop/src/common/common.ts) | N +scroll-top | Number | 0 | 页面滚动距离 | N text | String | '' | 文案 | N theme | String | round | 预设的样式类型。可选项:round/half-round/round-dark/half-round-dark | N +visibility-height | Number | 200 | 滚动高度达到此参数值才出现 | N ### BackTop Events 名称 | 参数 | 描述 -- | -- | -- to-top | \- | 点击触发 +### BackTop External Classes + +类名 | 描述 +-- | -- +t-class | 根节点样式类 +t-class-icon | 图标样式类 +t-class-text | 文本样式类 + +### CSS Variables + +组件提供了下列 CSS 变量,可用于自定义样式。 +名称 | 默认值 | 描述 +-- | -- | -- +--td-back-top-round-bg-color | @font-white-1 | - +--td-back-top-round-border-color | @component-border | - +--td-back-top-round-border-radius | @radius-circle | - +--td-back-top-round-color | @font-gray-1 | - +--td-back-top-round-dark-bg-color | @gray-color-14 | - +--td-back-top-round-dark-color | @font-white-1 | - \ No newline at end of file diff --git a/miniprogram_npm/tdesign-miniprogram/back-top/back-top.d.ts b/miniprogram_npm/tdesign-miniprogram/back-top/back-top.d.ts index 90e8f03..ced948c 100644 --- a/miniprogram_npm/tdesign-miniprogram/back-top/back-top.d.ts +++ b/miniprogram_npm/tdesign-miniprogram/back-top/back-top.d.ts @@ -10,9 +10,11 @@ export default class BackTop extends SuperComponent { prefix: string; classPrefix: string; _icon: any; + hidden: boolean; }; observers: { icon(): void; + scrollTop(value: number): void; }; lifetimes: { ready(): void; diff --git a/miniprogram_npm/tdesign-miniprogram/back-top/back-top.js b/miniprogram_npm/tdesign-miniprogram/back-top/back-top.js index 8c2ce59..a14d94c 100644 --- a/miniprogram_npm/tdesign-miniprogram/back-top/back-top.js +++ b/miniprogram_npm/tdesign-miniprogram/back-top/back-top.js @@ -27,11 +27,16 @@ let BackTop = class BackTop extends SuperComponent { prefix, classPrefix: name, _icon: null, + hidden: true, }; this.observers = { icon() { this.setIcon(); }, + scrollTop(value) { + const { visibilityHeight } = this.properties; + this.setData({ hidden: value < visibilityHeight }); + }, }; this.lifetimes = { ready() { @@ -50,6 +55,7 @@ let BackTop = class BackTop extends SuperComponent { this.triggerEvent('to-top'); if (this.$parent) { (_a = this.$parent) === null || _a === void 0 ? void 0 : _a.setScrollTop(0); + this.setData({ hidden: true }); } else { wx.pageScrollTo({ diff --git a/miniprogram_npm/tdesign-miniprogram/back-top/back-top.json b/miniprogram_npm/tdesign-miniprogram/back-top/back-top.json index 049940c..f783dae 100644 --- a/miniprogram_npm/tdesign-miniprogram/back-top/back-top.json +++ b/miniprogram_npm/tdesign-miniprogram/back-top/back-top.json @@ -1,5 +1,6 @@ { "component": true, + "styleIsolation": "apply-shared", "usingComponents": { "t-icon": "../icon/icon" } diff --git a/miniprogram_npm/tdesign-miniprogram/back-top/back-top.wxml b/miniprogram_npm/tdesign-miniprogram/back-top/back-top.wxml index 1d02278..3d119aa 100644 --- a/miniprogram_npm/tdesign-miniprogram/back-top/back-top.wxml +++ b/miniprogram_npm/tdesign-miniprogram/back-top/back-top.wxml @@ -6,6 +6,7 @@ class="class {{prefix}}-class {{_.cls(classPrefix, [['fixed', fixed], theme])}}" bindtap="toTop" aria-role="button" + hidden="{{hidden}}" > diff --git a/miniprogram_npm/tdesign-miniprogram/back-top/back-top.wxss b/miniprogram_npm/tdesign-miniprogram/back-top/back-top.wxss index 3ec2469..7907024 100644 --- a/miniprogram_npm/tdesign-miniprogram/back-top/back-top.wxss +++ b/miniprogram_npm/tdesign-miniprogram/back-top/back-top.wxss @@ -39,7 +39,7 @@ .t-back-top--fixed { position: fixed; right: var(--td-spacer, 16rpx); - bottom: var(--td-spacer-2, 32rpx); + bottom: calc(var(--td-spacer-2, 32rpx) + env(safe-area-inset-bottom)); } .t-back-top--round, .t-back-top--round-dark { @@ -49,20 +49,22 @@ } .t-back-top--round, .t-back-top--half-round { - color: var(--td-back-top-round-color, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))); + color: var(--td-back-top-round-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9)))); border: 1rpx solid var(--td-back-top-round-border-color, var(--td-component-border, var(--td-gray-color-4, #dcdcdc))); - background-color: var(--td-back-top-round-bg-color, var(--td-font-white-1, #ffffff)); + background-color: var(--td-back-top-round-bg-color, var(--td-bg-color-container, var(--td-font-white-1, #ffffff))); } .t-back-top--round-dark, .t-back-top--half-round-dark { - color: var(--td-back-top-round-dark-color, var(--td-font-white-1, #ffffff)); - background-color: var(--td-back-top-round-dark-bg-color, var(--td-gray-color-14, #181818)); + color: var(--td-back-top-round-dark-color, var(--td-text-color-anti, var(--td-font-white-1, #ffffff))); + background-color: var(--td-back-top-round-dark-bg-color, var(--td-gray-color-13, #242424)); } .t-back-top--half-round, .t-back-top--half-round-dark { width: 120rpx; height: 80rpx; - border-radius: var(--td-back-top-half-round-border-radius, var(--td-radius-round, 999px)) 0 0 var(--td-back-top-half-round-border-radius, var(--td-radius-round, 999px)); + border-radius: 0; + border-top-left-radius: var(--td-back-top-half-round-border-radius, var(--td-radius-round, 999px)); + border-bottom-left-radius: var(--td-back-top-half-round-border-radius, var(--td-radius-round, 999px)); flex-direction: row; right: 0; } @@ -75,7 +77,7 @@ } .t-back-top__text--half-round, .t-back-top__text--half-round-dark { - width: 2em; + width: 48rpx; } .t-back-top__icon:not(:empty) + .t-back-top__text--half-round, .t-back-top__icon:not(:empty) + .t-back-top__text--half-round-dark { diff --git a/miniprogram_npm/tdesign-miniprogram/back-top/props.js b/miniprogram_npm/tdesign-miniprogram/back-top/props.js index 7becbe4..d6d8121 100644 --- a/miniprogram_npm/tdesign-miniprogram/back-top/props.js +++ b/miniprogram_npm/tdesign-miniprogram/back-top/props.js @@ -1,7 +1,4 @@ const props = { - externalClasses: { - type: Array, - }, fixed: { type: Boolean, value: true, @@ -10,6 +7,14 @@ const props = { type: null, value: true, }, + scrollTop: { + type: Number, + value: 0, + }, + style: { + type: String, + value: '', + }, text: { type: String, value: '', @@ -18,5 +23,9 @@ const props = { type: String, value: 'round', }, + visibilityHeight: { + type: Number, + value: 200, + }, }; export default props; diff --git a/miniprogram_npm/tdesign-miniprogram/back-top/type.d.ts b/miniprogram_npm/tdesign-miniprogram/back-top/type.d.ts index 45b6bae..9071651 100644 --- a/miniprogram_npm/tdesign-miniprogram/back-top/type.d.ts +++ b/miniprogram_npm/tdesign-miniprogram/back-top/type.d.ts @@ -1,19 +1,19 @@ export interface TdBackTopProps { - style?: { - type: StringConstructor; - value?: string; - }; - externalClasses?: { - type: ArrayConstructor; - value?: ['t-class', 't-class-icon', 't-class-text']; - }; fixed?: { type: BooleanConstructor; value?: boolean; }; icon?: { type: null; - value?: boolean | string | object; + value?: string | boolean | object; + }; + scrollTop?: { + type: NumberConstructor; + value?: number; + }; + style?: { + type: StringConstructor; + value?: string; }; text?: { type: StringConstructor; @@ -23,4 +23,8 @@ export interface TdBackTopProps { type: StringConstructor; value?: 'round' | 'half-round' | 'round-dark' | 'half-round-dark'; }; + visibilityHeight?: { + type: NumberConstructor; + value?: number; + }; } diff --git a/miniprogram_npm/tdesign-miniprogram/badge/README.en-US.md b/miniprogram_npm/tdesign-miniprogram/badge/README.en-US.md index f592805..05103dc 100644 --- a/miniprogram_npm/tdesign-miniprogram/badge/README.en-US.md +++ b/miniprogram_npm/tdesign-miniprogram/badge/README.en-US.md @@ -1,17 +1,45 @@ :: BASE_DOC :: ## API + ### Badge Props name | type | default | description | required -- | -- | -- | -- | -- +style | Object | - | CSS(Cascading Style Sheets) | N +custom-style | Object | - | CSS(Cascading Style Sheets),used to set style on virtual component | N color | String | - | \- | N content | String | - | \- | N -count | String / Number / Slot | 0 | \- | N +count | String / Number / Slot | 0 | [see more ts definition](https://github.com/Tencent/tdesign-miniprogram/blob/develop/src/common/common.ts) | N dot | Boolean | false | \- | N -external-classes | Array | - | `['t-class', 't-class-content', 't-class-count']` | N max-count | Number | 99 | \- | N offset | Array | - | Typescript:`Array` | N -shape | String | circle | options:circle/round/ribbon/bubble | N +shape | String | circle | options: circle/square/bubble/ribbon | N show-zero | Boolean | false | \- | N -size | String | medium | options:small/medium | N +size | String | medium | options: medium/large | N +### Badge External Classes + +className | Description +-- | -- +t-class | \- +t-class-content | \- +t-class-count | \- + +### CSS Variables + +The component provides the following CSS variables, which can be used to customize styles. +Name | Default Value | Description +-- | -- | -- +--td-badge-basic-height | 32rpx | - +--td-badge-basic-padding | 8rpx | - +--td-badge-basic-width | 32rpx | - +--td-badge-bg-color | @error-color | - +--td-badge-border-radius | 4rpx | - +--td-badge-bubble-border-radius | 20rpx 20rpx 20rpx 1px | - +--td-badge-dot-size | 16rpx | - +--td-badge-font-size | @font-size-xs | - +--td-badge-font-weight | 600 | - +--td-badge-large-font-size | @font-size-s | - +--td-badge-large-height | 40rpx | - +--td-badge-large-padding | 10rpx | - +--td-badge-text-color | @font-white-1 | - \ No newline at end of file diff --git a/miniprogram_npm/tdesign-miniprogram/badge/README.md b/miniprogram_npm/tdesign-miniprogram/badge/README.md index 7d1bf08..a253b93 100644 --- a/miniprogram_npm/tdesign-miniprogram/badge/README.md +++ b/miniprogram_npm/tdesign-miniprogram/badge/README.md @@ -18,6 +18,12 @@ isComponent: true ## 代码演示 + 在开发者工具中预览效果 + +
+

Tips: 请确保开发者工具为打开状态。导入开发者工具后,依次执行:npm i > 构建npm包 > 勾选 "将JS编译成ES5"

+
+ ### 组件类型 {{ base }} @@ -30,18 +36,51 @@ isComponent: true {{ size }} +## FAQ + +### 如何处理由 ribbon 徽标溢出导致页面出现横向滚动? +角标溢出问题建议从父容器组件处理。如 #3063 ,可以给父容器 `cell` 组件添加 `overflow: hidden`,处理溢出造成页面出现横向滚动的问题。 + ## API + ### Badge Props -名称 | 类型 | 默认值 | 说明 | 必传 +名称 | 类型 | 默认值 | 描述 | 必传 -- | -- | -- | -- | -- +style | Object | - | 样式 | N +custom-style | Object | - | 样式,一般用于开启虚拟化组件节点场景 | N color | String | - | 颜色 | N content | String | - | 徽标内容,示例:`content='自定义内容'`。也可以使用默认插槽定义 | N -count | String / Number / Slot | 0 | 徽标右上角内容。可以是数字,也可以是文字。如:'new'/3/99+。特殊:值为空表示使用插槽渲染 | N +count | String / Number / Slot | 0 | 徽标右上角内容。可以是数字,也可以是文字。如:'new'/3/99+。特殊:值为空表示使用插槽渲染。[通用类型定义](https://github.com/Tencent/tdesign-miniprogram/blob/develop/src/common/common.ts) | N dot | Boolean | false | 是否为红点 | N -external-classes | Array | - | 组件类名,分别用于设置外层元素、默认内容、右上角内容等元素类名。`['t-class', 't-class-content', 't-class-count']` | N max-count | Number | 99 | 封顶的数字值 | N offset | Array | - | 设置状态点的位置偏移,示例:[-10, 20] 或 ['10em', '8rem']。TS 类型:`Array` | N -shape | String | circle | 形状。可选项:circle/round/ribbon/bubble | N +shape | String | circle | 形状。可选项:circle/square/bubble/ribbon | N show-zero | Boolean | false | 当数值为 0 时,是否展示徽标 | N -size | String | medium | 尺寸。可选项:small/medium | N +size | String | medium | 尺寸。可选项:medium/large | N +### Badge External Classes + +类名 | 描述 +-- | -- +t-class | 根节点样式类 +t-class-content | 内容样式类 +t-class-count | 计数样式类 + +### CSS Variables + +组件提供了下列 CSS 变量,可用于自定义样式。 +名称 | 默认值 | 描述 +-- | -- | -- +--td-badge-basic-height | 32rpx | - +--td-badge-basic-padding | 8rpx | - +--td-badge-basic-width | 32rpx | - +--td-badge-bg-color | @error-color | - +--td-badge-border-radius | 4rpx | - +--td-badge-bubble-border-radius | 20rpx 20rpx 20rpx 1px | - +--td-badge-dot-size | 16rpx | - +--td-badge-font-size | @font-size-xs | - +--td-badge-font-weight | 600 | - +--td-badge-large-font-size | @font-size-s | - +--td-badge-large-height | 40rpx | - +--td-badge-large-padding | 10rpx | - +--td-badge-text-color | @font-white-1 | - \ No newline at end of file diff --git a/miniprogram_npm/tdesign-miniprogram/badge/badge.json b/miniprogram_npm/tdesign-miniprogram/badge/badge.json index a7a3e7a..4f0a3f0 100644 --- a/miniprogram_npm/tdesign-miniprogram/badge/badge.json +++ b/miniprogram_npm/tdesign-miniprogram/badge/badge.json @@ -1,5 +1,5 @@ { "component": true, + "styleIsolation": "apply-shared", "usingComponents": {} } - diff --git a/miniprogram_npm/tdesign-miniprogram/badge/badge.wxml b/miniprogram_npm/tdesign-miniprogram/badge/badge.wxml index 51fea40..abc57b7 100644 --- a/miniprogram_npm/tdesign-miniprogram/badge/badge.wxml +++ b/miniprogram_npm/tdesign-miniprogram/badge/badge.wxml @@ -1,6 +1,12 @@ + + {{content}}
diff --git a/miniprogram_npm/tdesign-miniprogram/badge/badge.wxs b/miniprogram_npm/tdesign-miniprogram/badge/badge.wxs index c2aaad9..b3064d8 100644 --- a/miniprogram_npm/tdesign-miniprogram/badge/badge.wxs +++ b/miniprogram_npm/tdesign-miniprogram/badge/badge.wxs @@ -26,7 +26,7 @@ var getBadgeStyles = function (props) { styleStr += 'background:' + props.color + ';'; } if (props.offset[0]) { - styleStr += 'right:' + (hasUnit(props.offset[0].toString()) ? props.offset[0] : props.offset[0] + 'px') + ';'; + styleStr += 'left: calc(100% + ' + (hasUnit(props.offset[0].toString()) ? props.offset[0] : props.offset[0] + 'px') + ');'; } if (props.offset[1]) { styleStr += 'top:' + (hasUnit(props.offset[1].toString()) ? props.offset[1] : props.offset[1] + 'px') + ';'; @@ -63,22 +63,8 @@ var isShowBadge = function (props) { return true; }; -var getBadgeAriaLabel = function (props) { - if (props.dot) { - return '有新的消息'; - } - if (isNaN(props.count) || isNaN(props.maxCount)) { - var str = '有' + props.count + '通知'; - return str; - } - var str1 = '有' + props.maxCount + '+条消息'; - var str2 = '有' + props.count + '条消息'; - return parseInt(props.count) > props.maxCount ? str1 : str2; -}; - module.exports.getBadgeValue = getBadgeValue; module.exports.getBadgeStyles = getBadgeStyles; module.exports.getBadgeOuterClass = getBadgeOuterClass; module.exports.getBadgeInnerClass = getBadgeInnerClass; -module.exports.getBadgeAriaLabel = getBadgeAriaLabel; module.exports.isShowBadge = isShowBadge; diff --git a/miniprogram_npm/tdesign-miniprogram/badge/badge.wxss b/miniprogram_npm/tdesign-miniprogram/badge/badge.wxss index 5d4ba33..5398f03 100644 --- a/miniprogram_npm/tdesign-miniprogram/badge/badge.wxss +++ b/miniprogram_npm/tdesign-miniprogram/badge/badge.wxss @@ -27,14 +27,14 @@ } .t-badge { position: relative; - display: inline-block; - vertical-align: top; + display: inline-flex; + align-items: start; } .t-badge--basic { z-index: 100; padding: 0 var(--td-badge-basic-padding, 8rpx); font-size: var(--td-badge-font-size, var(--td-font-size-xs, var(--td-font-size, 20rpx))); - color: var(--td-badge-text-color, var(--td-font-white-1, #ffffff)); + color: var(--td-badge-text-color, var(--td-text-color-anti, var(--td-font-white-1, #ffffff))); background-color: var(--td-badge-bg-color, var(--td-error-color, var(--td-error-color-6, #d54941))); text-align: center; height: var(--td-badge-basic-height, 32rpx); @@ -62,28 +62,28 @@ right: 0; } .t-badge--ribbon { + position: relative; display: inline-block; - transform: rotate(45deg); + transform-origin: center center; + transform: translate(calc(50% - var(--td-badge-basic-height, 32rpx) + 1rpx), calc(-50% + var(--td-badge-basic-height, 32rpx) - 1rpx)) rotate(45deg); border-radius: 0; } -.t-badge--ribbon::before { - content: ''; - position: absolute; - width: 0; - height: 0; - bottom: 0; - left: calc(-1 * var(--td-badge-basic-height, 32rpx) + 1rpx); - border-bottom: var(--td-badge-basic-height, 32rpx) solid var(--td-badge-bg-color, var(--td-error-color, var(--td-error-color-6, #d54941))); - border-left: var(--td-badge-basic-height, 32rpx) solid transparent; -} +.t-badge--ribbon::before, .t-badge--ribbon::after { content: ''; position: absolute; width: 0; height: 0; bottom: 0; - right: calc(-1 * var(--td-badge-basic-height, 32rpx) + 1rpx); border-bottom: var(--td-badge-basic-height, 32rpx) solid var(--td-badge-bg-color, var(--td-error-color, var(--td-error-color-6, #d54941))); + font-size: 0; +} +.t-badge--ribbon::before { + left: calc(-1 * var(--td-badge-basic-height, 32rpx) + 1rpx); + border-left: var(--td-badge-basic-height, 32rpx) solid transparent; +} +.t-badge--ribbon::after { + right: calc(-1 * var(--td-badge-basic-height, 32rpx) + 1rpx); border-right: var(--td-badge-basic-height, 32rpx) solid transparent; } .t-badge--bubble { @@ -100,12 +100,14 @@ border-radius: calc(var(--td-badge-large-height, 40rpx) / 2); } .t-badge__content:not(:empty) + .t-has-count { - transform: translate(50%, -50%); + transform-origin: center center; + transform: translate(-50%, -50%); position: absolute; - right: 0; + left: 100%; top: 0; } .t-badge__content-text { display: block; line-height: 48rpx; + color: var(--td-badge-content-text-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9)))); } diff --git a/miniprogram_npm/tdesign-miniprogram/badge/type.d.ts b/miniprogram_npm/tdesign-miniprogram/badge/type.d.ts index 30f00d0..2029271 100644 --- a/miniprogram_npm/tdesign-miniprogram/badge/type.d.ts +++ b/miniprogram_npm/tdesign-miniprogram/badge/type.d.ts @@ -11,10 +11,6 @@ export interface TdBadgeProps { type: null; value?: string | number; }; - style?: { - type: StringConstructor; - value?: string; - }; dot?: { type: BooleanConstructor; value?: boolean; @@ -33,7 +29,7 @@ export interface TdBadgeProps { }; shape?: { type: StringConstructor; - value?: 'circle' | 'round' | 'ribbon' | 'bubble'; + value?: 'circle' | 'square' | 'bubble' | 'ribbon'; }; showZero?: { type: BooleanConstructor; @@ -41,6 +37,6 @@ export interface TdBadgeProps { }; size?: { type: StringConstructor; - value?: 'small' | 'medium'; + value?: 'medium' | 'large'; }; } diff --git a/miniprogram_npm/tdesign-miniprogram/button/README.en-US.md b/miniprogram_npm/tdesign-miniprogram/button/README.en-US.md index ee2b1d7..fbd8440 100644 --- a/miniprogram_npm/tdesign-miniprogram/button/README.en-US.md +++ b/miniprogram_npm/tdesign-miniprogram/button/README.en-US.md @@ -1,46 +1,233 @@ -:: BASE_DOC :: +--- +title: Button +description: Buttons are used to open a closed-loop task, such as "delete" an object, "buy" an item, etc. +spline: base +isComponent: true +--- + + + + +## Usage + +For global import, configure it in `app.json` in the root directory of the miniprogram. For local import, configure it in `index.json` of the page or component that needs to be imported. + +```json +"usingComponents": { + "t-button": "tdesign-miniprogram/button/button" +} +``` + + +## Code Demo + +### 01 Component Type + +#### Basic Buttons + +{{ base }} + +#### Icon Button + +{{ icon-btn }} + +#### Ghost Button + +{{ ghost-btn }} + +#### Combination Button + +{{ group-btn }} + +#### Banner Button + +{{ block-btn }} + +### 02 Component State + +#### Buttons for different states + +{{ disabled }} + +### 03 Component Style + +#### Different sizes of buttons + +{{ size }} + +#### Different shaped buttons + +{{ shape }} + +#### Different color theme buttons + +{{ theme }} + + ## API + ### Button Props name | type | default | description | required -- | -- | -- | -- | -- +style | Object | - | CSS(Cascading Style Sheets) | N +custom-style | Object | - | CSS(Cascading Style Sheets),used to set style on virtual component | N +app-parameter | String | - | \- | N block | Boolean | false | make button to be a block-level element | N -content | String / Slot | - | button's children elements | N -custom-dataset | Object | - | Typescript:`any` | N -disabled | Boolean | false | disable the button, make it can not be clicked | N -external-classes | Array | - | `['t-class', 't-class-icon', 't-class-loading']` | N +content | String / Slot | - | button's children elements。[see more ts definition](https://github.com/Tencent/tdesign-miniprogram/blob/develop/src/common/common.ts) | N +custom-dataset | any | - | \- | N +disabled | Boolean | undefined | disable the button, make it can not be clicked | N ghost | Boolean | false | make background-color to be transparent | N -icon | String / Object | - | icon name | N -loading | Boolean | false | set button to be loading state | N -loading-props | Object | - | Typescript:`LoadingProps`,[Loading API Documents](./loading?tab=api)。[see more ts definition](https://github.com/Tencent/tdesign-miniprogram/tree/develop/src/button/type.ts) | N -shape | String | rectangle | button shape。options:rectangle/square/round/circle | N -size | String | medium | a button has three size。options:small/medium/large。Typescript:`SizeEnum` | N -suffix | Slot | - | \- | N -theme | String | default | button theme。options:default/primary/danger | N -type | String | - | type of button element, same as formType of Miniprogram。options:submit/reset | N -variant | String | base | button variant。options:base/outline/text | N -open-type | String | - | options:contact/share/getPhoneNumber/getUserInfo/launchApp/openSetting/feedback/chooseAvatar | N -hover-stop-propagation | Boolean | false | \- | N +hover-class | String | - | \- | N hover-start-time | Number | 20 | \- | N hover-stay-time | Number | 70 | \- | N -lang | String | en | options:en/zh_CN/zh_TW | N -session-from | String | - | \- | N -send-message-title | String | 当前标题 | \- | N -send-message-path | String | 当前分享路径 | \- | N +hover-stop-propagation | Boolean | false | \- | N +icon | String / Object | - | icon name | N +lang | String | - | message language。options: en/zh_CN/zh_TW | N +loading | Boolean | false | set button to be loading state | N +loading-props | Object | - | Typescript:`LoadingProps`,[Loading API Documents](./loading?tab=api)。[see more ts definition](https://github.com/Tencent/tdesign-miniprogram/tree/develop/src/button/type.ts) | N +open-type | String | - | open type of button, [Miniprogram Button](https://developers.weixin.qq.com/miniprogram/dev/component/button.html)。options: contact/share/getPhoneNumber/getUserInfo/launchApp/openSetting/feedback/chooseAvatar/agreePrivacyAuthorization | N +phone-number-no-quota-toast | Boolean | true | \- | N send-message-img | String | 截图 | \- | N -app-parameter | String | - | \- | N +send-message-path | String | 当前分享路径 | \- | N +send-message-title | String | 当前标题 | \- | N +session-from | String | - | \- | N +shape | String | rectangle | button shape。options: rectangle/square/round/circle | N show-message-card | Boolean | false | \- | N -bindgetuserinfo | Eventhandle | - | \- | N -bindcontact | Eventhandle | - | \- | N -bindgetphonenumber | Eventhandle | - | \- | N -binderror | Eventhandle | - | \- | N -bindopensetting | Eventhandle | - | \- | N -bindlaunchapp | Eventhandle | - | \- | N -bindchooseavatar | Eventhandle | - | \- | N +size | String | medium | a button has four size。options: extra-small/small/medium/large | N +suffix | Slot | - | [see more ts definition](https://github.com/Tencent/tdesign-miniprogram/blob/develop/src/common/common.ts) | N +t-id | String | - | id | N +theme | String | default | button theme。options: default/primary/danger/light | N +type | String | - | type of button element, same as formType of Miniprogram。options: submit/reset | N +variant | String | base | variant of button。options: base/outline/dashed/text | N ### Button Events name | params | description -- | -- | -- -tap | `(e: MouseEvent)` | trigger on click +agreeprivacyauthorization | \- | \- +chooseavatar | \- | \- +click | `(e: MouseEvent)` | trigger on click +contact | \- | \- +createliveactivity | \- | \- +error | \- | \- +getphonenumber | \- | \- +getrealtimephonenumber | \- | \- +getuserinfo | \- | \- +launchapp | \- | \- +opensetting | \- | \- +tap | `event` | \- + +### Button External Classes + +className | Description +-- | -- +t-class | \- +t-class-icon | class name of icon +t-class-loading | class name of loading + +### CSS Variables + +The component provides the following CSS variables, which can be used to customize styles. +Name | Default Value | Description +-- | -- | -- +--td-button-border-radius | @radius-default | - +--td-button-border-width | 4rpx | - +--td-button-danger-active-bg-color | @error-color-7 | - +--td-button-danger-active-border-color | @error-color-7 | - +--td-button-danger-bg-color | @error-color | - +--td-button-danger-border-color | @error-color | - +--td-button-danger-color | @font-white-1 | - +--td-button-danger-dashed-border-color | @button-danger-dashed-color | - +--td-button-danger-dashed-color | @error-color | - +--td-button-danger-dashed-disabled-color | @button-danger-disabled-color | - +--td-button-danger-disabled-bg | @error-color-3 | - +--td-button-danger-disabled-border-color | @error-color-3 | - +--td-button-danger-disabled-color | @error-color-disabled | - +--td-button-danger-outline-active-bg-color | @bg-color-container-active | - +--td-button-danger-outline-active-border-color | @error-color-7 | - +--td-button-danger-outline-border-color | @button-danger-outline-color | - +--td-button-danger-outline-color | @error-color | - +--td-button-danger-outline-disabled-color | @error-color-3 | - +--td-button-danger-text-active-bg-color | @bg-color-container-active | - +--td-button-danger-text-color | @error-color | - +--td-button-danger-text-disabled-color | @button-danger-disabled-color | - +--td-button-default-active-bg-color | @bg-color-component-active | - +--td-button-default-active-border-color | @bg-color-component-active | - +--td-button-default-bg-color | @bg-color-component | - +--td-button-default-border-color | @bg-color-component | - +--td-button-default-color | @text-color-primary | - +--td-button-default-disabled-bg | @bg-color-component-disabled | - +--td-button-default-disabled-border-color | @bg-color-component-disabled | - +--td-button-default-disabled-color | @text-color-disabled | - +--td-button-default-outline-active-bg-color | @bg-color-container-active | - +--td-button-default-outline-active-border-color | @component-border | - +--td-button-default-outline-border-color | @component-border | - +--td-button-default-outline-color | @text-color-primary | - +--td-button-default-outline-disabled-color | @component-border | - +--td-button-default-text-active-bg-color | @bg-color-container-active | - +--td-button-extra-small-font-size | @font-size-base | - +--td-button-extra-small-height | 56rpx | - +--td-button-extra-small-icon-font-size | 36rpx | - +--td-button-extra-small-padding-horizontal | 16rpx | - +--td-button-font-weight | 600 | - +--td-button-ghost-border-color | @button-ghost-color | - +--td-button-ghost-color | @bg-color-container | - +--td-button-ghost-danger-border-color | @error-color | - +--td-button-ghost-danger-color | @error-color | - +--td-button-ghost-danger-hover-color | @error-color-active | - +--td-button-ghost-disabled-color | @font-white-4 | - +--td-button-ghost-hover-color | @font-white-2 | - +--td-button-ghost-primary-border-color | @brand-color | - +--td-button-ghost-primary-color | @brand-color | - +--td-button-ghost-primary-hover-color | @brand-color-active | - +--td-button-icon-border-radius | 8rpx | - +--td-button-icon-spacer | @spacer | - +--td-button-large-font-size | @font-size-m | - +--td-button-large-height | 96rpx | - +--td-button-large-icon-font-size | 48rpx | - +--td-button-large-padding-horizontal | 40rpx | - +--td-button-light-active-bg-color | @brand-color-light-active | - +--td-button-light-active-border-color | @brand-color-light-active | - +--td-button-light-bg-color | @brand-color-light | - +--td-button-light-border-color | @brand-color-light | - +--td-button-light-color | @brand-color | - +--td-button-light-disabled-bg | @brand-color-light | - +--td-button-light-disabled-border-color | @brand-color-light | - +--td-button-light-disabled-color | @brand-color-disabled | - +--td-button-light-outline-active-bg-color | @brand-color-light-active | - +--td-button-light-outline-active-border-color | @brand-color-active | - +--td-button-light-outline-bg-color | @brand-color-light | - +--td-button-light-outline-border-color | @button-light-outline-color | - +--td-button-light-outline-color | @brand-color | - +--td-button-light-outline-disabled-color | @brand-color-disabled | - +--td-button-light-text-active-bg-color | @bg-color-container-active | - +--td-button-light-text-color | @brand-color | - +--td-button-medium-font-size | @font-size-m | - +--td-button-medium-height | 80rpx | - +--td-button-medium-icon-font-size | 40rpx | - +--td-button-medium-padding-horizontal | 32rpx | - +--td-button-primary-active-bg-color | @brand-color-active | - +--td-button-primary-active-border-color | @brand-color-active | - +--td-button-primary-bg-color | @brand-color | - +--td-button-primary-border-color | @brand-color | - +--td-button-primary-color | @font-white-1 | - +--td-button-primary-dashed-border-color | @button-primary-dashed-color | - +--td-button-primary-dashed-color | @brand-color | - +--td-button-primary-dashed-disabled-color | @brand-color-disabled | - +--td-button-primary-disabled-bg | @brand-color-disabled | - +--td-button-primary-disabled-border-color | @brand-color-disabled | - +--td-button-primary-disabled-color | @font-white-1 | - +--td-button-primary-outline-active-bg-color | @bg-color-container-active | - +--td-button-primary-outline-active-border-color | @brand-color-active | - +--td-button-primary-outline-border-color | @button-primary-outline-color | - +--td-button-primary-outline-color | @brand-color | - +--td-button-primary-outline-disabled-color | @brand-color-disabled | - +--td-button-primary-text-active-bg-color | @bg-color-container-active | - +--td-button-primary-text-color | @brand-color | - +--td-button-primary-text-disabled-color | @brand-color-disabled | - +--td-button-small-font-size | @font-size-base | - +--td-button-small-height | 64rpx | - +--td-button-small-icon-font-size | 36rpx | - +--td-button-small-padding-horizontal | 24rpx | - \ No newline at end of file diff --git a/miniprogram_npm/tdesign-miniprogram/button/README.md b/miniprogram_npm/tdesign-miniprogram/button/README.md index f318844..ac4fc02 100644 --- a/miniprogram_npm/tdesign-miniprogram/button/README.md +++ b/miniprogram_npm/tdesign-miniprogram/button/README.md @@ -18,89 +18,218 @@ isComponent: true ## 代码演示 + 在开发者工具中预览效果 + +
+

Tips: 请确保开发者工具为打开状态。导入开发者工具后,依次执行:npm i > 构建npm包 > 勾选 "将JS编译成ES5"

+
+ + ### 01 组件类型 -基础按钮 +#### 基础按钮 {{ base }} -图标按钮 +#### 图标按钮 {{ icon-btn }} -幽灵按钮 +#### 幽灵按钮 {{ ghost-btn }} -组合按钮 +#### 组合按钮 {{ group-btn }} -通栏按钮 +#### 通栏按钮 {{ block-btn }} ### 02 组件状态 -按钮禁用态 +#### 按钮禁用态 {{ disabled }} ### 03 组件样式 -按钮尺寸 +#### 按钮尺寸 {{ size }} -按钮形状 +#### 按钮形状 {{ shape }} -按钮主题 +#### 按钮主题 {{ theme }} ## API + ### Button Props -名称 | 类型 | 默认值 | 说明 | 必传 +名称 | 类型 | 默认值 | 描述 | 必传 -- | -- | -- | -- | -- +style | Object | - | 样式 | N +custom-style | Object | - | 样式,一般用于开启虚拟化组件节点场景 | N +app-parameter | String | - | 打开 APP 时,向 APP 传递的参数,open-type=launchApp时有效 | N block | Boolean | false | 是否为块级元素 | N -content | String / Slot | - | 按钮内容 | N -custom-dataset | Object | - | 自定义 dataset,可通过 event.currentTarget.dataset.custom 获取。TS 类型:`any` | N -disabled | Boolean | false | 禁用状态 | N -external-classes | Array | - | 组件类名。`['t-class', 't-class-icon', 't-class-loading']` | N +content | String / Slot | - | 按钮内容。[通用类型定义](https://github.com/Tencent/tdesign-miniprogram/blob/develop/src/common/common.ts) | N +custom-dataset | any | - | 自定义 dataset,可通过 event.currentTarget.dataset.custom 获取 | N +disabled | Boolean | undefined | 禁用状态。优先级:Button.disabled > Form.disabled | N ghost | Boolean | false | 是否为幽灵按钮(镂空按钮) | N -icon | String / Object | - | 图标名称。值为字符串表示图标名称,值为 `Object` 类型,表示透传至 `icon`。 | N -loading | Boolean | false | 是否显示为加载状态 | N -loading-props | Object | - | 透传至 Loading 组件。TS 类型:`LoadingProps`,[Loading API Documents](./loading?tab=api)。[详细类型定义](https://github.com/Tencent/tdesign-miniprogram/tree/develop/src/button/type.ts) | N -shape | String | rectangle | 按钮形状,有 4 种:长方形、正方形、圆角长方形、圆形。可选项:rectangle/square/round/circle | N -size | String | medium | 组件尺寸。可选项:extra-small/small/medium/large。TS 类型:`SizeEnum` | N -suffix | Slot | - | 右侧内容,可用于定义右侧图标 | N -theme | String | default | 组件风格,依次为品牌色、危险色。可选项:default/primary/danger/light | N -type | String | - | 同小程序的 formType。可选项:submit/reset | N -variant | String | base | 按钮形式,基础、线框、文字。可选项:base/outline/dashed/text | N -open-type | String | - | 微信开放能力。
具体释义:
`contact` 打开客服会话,如果用户在会话中点击消息卡片后返回小程序,可以从 bindcontact 回调中获得具体信息,具体说明 (*小程序插件中不能使用*);
`share` 触发用户转发,使用前建议先阅读使用指引
`getPhoneNumber` 获取用户手机号,可以从 bindgetphonenumber 回调中获取到用户信息,具体说明 (*小程序插件中不能使用*);
`getUserInfo` 获取用户信息,可以从 bindgetuserinfo 回调中获取到用户信息 (*小程序插件中不能使用*);
`launchApp` 打开APP,可以通过 app-parameter 属性设定向 APP 传的参数具体说明
`openSetting` 打开授权设置页;
`feedback` 打开“意见反馈”页面,用户可提交反馈内容并上传日志,开发者可以登录小程序管理后台后进入左侧菜单“客服反馈”页面获取到反馈内容;
`chooseAvatar` 获取用户头像,可以从 bindchooseavatar 回调中获取到头像信息。
[小程序官方文档](https://developers.weixin.qq.com/miniprogram/dev/component/button.html)。可选项:contact/share/getPhoneNumber/getUserInfo/launchApp/openSetting/feedback/chooseAvatar | N -hover-stop-propagation | Boolean | false | 指定是否阻止本节点的祖先节点出现点击态 | N +hover-class | String | - | 指定按钮按下去的样式类,按钮不为加载或禁用状态时有效。当 `hover-class="none"` 时,没有点击态效果 | N hover-start-time | Number | 20 | 按住后多久出现点击态,单位毫秒 | N hover-stay-time | Number | 70 | 手指松开后点击态保留时间,单位毫秒 | N -lang | String | en | 指定返回用户信息的语言,zh_CN 简体中文,zh_TW 繁体中文,en 英文。。
具体释义:
`en` 英文;
`zh_CN` 简体中文;
`zh_TW` 繁体中文。
[小程序官方文档](https://developers.weixin.qq.com/miniprogram/dev/component/button.html)。可选项:en/zh_CN/zh_TW | N -session-from | String | - | 会话来源,open-type="contact"时有效 | N -send-message-title | String | 当前标题 | 会话内消息卡片标题,open-type="contact"时有效 | N -send-message-path | String | 当前分享路径 | 会话内消息卡片点击跳转小程序路径,open-type="contact"时有效 | N +hover-stop-propagation | Boolean | false | 指定是否阻止本节点的祖先节点出现点击态 | N +icon | String / Object | - | 图标名称。值为字符串表示图标名称,值为 `Object` 类型,表示透传至 `icon`。 | N +lang | String | - | 指定返回用户信息的语言,zh_CN 简体中文,zh_TW 繁体中文,en 英文。。
具体释义:
`en` 英文;
`zh_CN` 简体中文;
`zh_TW` 繁体中文。
[小程序官方文档](https://developers.weixin.qq.com/miniprogram/dev/component/button.html)。。可选项:en/zh_CN/zh_TW | N +loading | Boolean | false | 是否显示为加载状态 | N +loading-props | Object | - | 透传 Loading 组件全部属性。TS 类型:`LoadingProps`,[Loading API Documents](./loading?tab=api)。[详细类型定义](https://github.com/Tencent/tdesign-miniprogram/tree/develop/src/button/type.ts) | N +open-type | String | - | 微信开放能力。
具体释义:
`contact` 打开客服会话,如果用户在会话中点击消息卡片后返回小程序,可以从 bindcontact 回调中获得具体信息,具体说明 (*小程序插件中不能使用*);
`share` 触发用户转发,使用前建议先阅读使用指引
`getPhoneNumber` 获取用户手机号,可以从 bindgetphonenumber 回调中获取到用户信息,具体说明 (*小程序插件中不能使用*);
`getUserInfo` 获取用户信息,可以从 bindgetuserinfo 回调中获取到用户信息 (*小程序插件中不能使用*);
`launchApp` 打开APP,可以通过 app-parameter 属性设定向 APP 传的参数具体说明
`openSetting` 打开授权设置页;
`feedback` 打开“意见反馈”页面,用户可提交反馈内容并上传日志,开发者可以登录小程序管理后台后进入左侧菜单“客服反馈”页面获取到反馈内容;
`chooseAvatar` 获取用户头像,可以从 bindchooseavatar 回调中获取到头像信息;
`agreePrivacyAuthorization`用户同意隐私协议按钮。用户点击一次此按钮后,所有隐私接口可以正常调用。可通过`bindagreeprivacyauthorization`监听用户同意隐私协议事件。隐私合规开发指南详情可见《小程序隐私协议开发指南》。
[小程序官方文档](https://developers.weixin.qq.com/miniprogram/dev/component/button.html)。。可选项:contact/share/getPhoneNumber/getUserInfo/launchApp/openSetting/feedback/chooseAvatar/agreePrivacyAuthorization | N +phone-number-no-quota-toast | Boolean | true | 原生按钮属性,当手机号快速验证或手机号实时验证额度用尽时,是否对用户展示“申请获取你的手机号,但该功能使用次数已达当前小程序上限,暂时无法使用”的提示,默认展示,open-type="getPhoneNumber" 或 open-type="getRealtimePhoneNumber" 时有效 | N send-message-img | String | 截图 | 会话内消息卡片图片,open-type="contact"时有效 | N -app-parameter | String | - | 打开 APP 时,向 APP 传递的参数,open-type=launchApp时有效 | N +send-message-path | String | 当前分享路径 | 会话内消息卡片点击跳转小程序路径,open-type="contact"时有效 | N +send-message-title | String | 当前标题 | 会话内消息卡片标题,open-type="contact"时有效 | N +session-from | String | - | 会话来源,open-type="contact"时有效 | N +shape | String | rectangle | 按钮形状,有 4 种:长方形、正方形、圆角长方形、圆形。可选项:rectangle/square/round/circle | N show-message-card | Boolean | false | 是否显示会话内消息卡片,设置此参数为 true,用户进入客服会话会在右下角显示"可能要发送的小程序"提示,用户点击后可以快速发送小程序消息,open-type="contact"时有效 | N -bindgetuserinfo | Eventhandle | - | 用户点击该按钮时,会返回获取到的用户信息,回调的 detail 数据与wx.getUserInfo返回的一致,open-type="getUserInfo"时有效 | N -bindcontact | Eventhandle | - | 客服消息回调,open-type="contact"时有效 | N -bindgetphonenumber | Eventhandle | - | 获取用户手机号回调,open-type=getPhoneNumber时有效 | N -binderror | Eventhandle | - | 当使用开放能力时,发生错误的回调,open-type=launchApp时有效 | N -bindopensetting | Eventhandle | - | 在打开授权设置页后回调,open-type=openSetting时有效 | N -bindlaunchapp | Eventhandle | - | 打开 APP 成功的回调,open-type=launchApp时有效 | N -bindchooseavatar | Eventhandle | - | 获取用户头像回调,open-type=chooseAvatar时有效 | N +size | String | medium | 组件尺寸。可选项:extra-small/small/medium/large | N +suffix | Slot | - | 右侧内容,可用于定义右侧图标。[通用类型定义](https://github.com/Tencent/tdesign-miniprogram/blob/develop/src/common/common.ts) | N +t-id | String | - | 按钮标签id | N +theme | String | default | 组件风格,依次为品牌色、危险色。可选项:default/primary/danger/light | N +type | String | - | 同小程序的 formType。。可选项:submit/reset | N +variant | String | base | 按钮形式,基础、线框、虚线、文字。可选项:base/outline/dashed/text | N ### Button Events 名称 | 参数 | 描述 -- | -- | -- -tap | `event` | 点击时触发 +agreeprivacyauthorization | \- | 原生按钮属性,用户同意隐私协议事件回调,open-type=agreePrivacyAuthorization时有效 (Tips: 如果使用 onNeedPrivacyAuthorization 接口,需要在 bindagreeprivacyauthorization 触发后再调用 resolve({ event: "agree", buttonId })) +chooseavatar | \- | 原生按钮属性,获取用户头像回调,`open-type=chooseAvatar` 时有效。返回 `e.detail.avatarUrl` 为头像临时文件链接 +click | `(e: MouseEvent)` | 点击时触发 +contact | \- | 原生按钮属性,客服消息回调,`open-type="contact"` 时有效 +createliveactivity | \- | 新的一次性订阅消息下发机制回调,`open-type=liveActivity` 时有效 +error | \- | 原生按钮属性,当使用开放能力时,发生错误的回调,`open-type=launchApp` 时有效 +getphonenumber | \- | 原生按钮属性,手机号快速验证回调,open-type=getPhoneNumber时有效。Tips:在触发 bindgetphonenumber 回调后应立即隐藏手机号按钮组件,或置为 disabled 状态,避免用户重复授权手机号产生额外费用 +getrealtimephonenumber | \- | 原生按钮属性,手机号实时验证回调,open-type=getRealtimePhoneNumber 时有效。Tips:在触发 bindgetrealtimephonenumber 回调后应立即隐藏手机号按钮组件,或置为 disabled 状态,避免用户重复授权手机号产生额外费用 +getuserinfo | \- | 原生按钮属性,用户点击该按钮时,会返回获取到的用户信息,回调的detail数据与wx.getUserInfo返回的一致,open-type="getUserInfo"时有效 +launchapp | \- | 打开 APP 成功的回调,`open-type=launchApp` 时有效 +opensetting | \- | 原生按钮属性,在打开授权设置页后回调,open-type=openSetting时有效 +tap | `event` | 点击按钮,当按钮不为加载或禁用状态时触发 + +### Button External Classes + +类名 | 描述 +-- | -- +t-class | 根节点样式类 +t-class-icon | 图标样式类 +t-class-loading | 加载样式类 + +### CSS Variables + +组件提供了下列 CSS 变量,可用于自定义样式。 +名称 | 默认值 | 描述 +-- | -- | -- +--td-button-border-radius | @radius-default | - +--td-button-border-width | 4rpx | - +--td-button-danger-active-bg-color | @error-color-7 | - +--td-button-danger-active-border-color | @error-color-7 | - +--td-button-danger-bg-color | @error-color | - +--td-button-danger-border-color | @error-color | - +--td-button-danger-color | @font-white-1 | - +--td-button-danger-dashed-border-color | @button-danger-dashed-color | - +--td-button-danger-dashed-color | @error-color | - +--td-button-danger-dashed-disabled-color | @button-danger-disabled-color | - +--td-button-danger-disabled-bg | @error-color-3 | - +--td-button-danger-disabled-border-color | @error-color-3 | - +--td-button-danger-disabled-color | @error-color-disabled | - +--td-button-danger-outline-active-bg-color | @bg-color-container-active | - +--td-button-danger-outline-active-border-color | @error-color-7 | - +--td-button-danger-outline-border-color | @button-danger-outline-color | - +--td-button-danger-outline-color | @error-color | - +--td-button-danger-outline-disabled-color | @error-color-3 | - +--td-button-danger-text-active-bg-color | @bg-color-container-active | - +--td-button-danger-text-color | @error-color | - +--td-button-danger-text-disabled-color | @button-danger-disabled-color | - +--td-button-default-active-bg-color | @bg-color-component-active | - +--td-button-default-active-border-color | @bg-color-component-active | - +--td-button-default-bg-color | @bg-color-component | - +--td-button-default-border-color | @bg-color-component | - +--td-button-default-color | @text-color-primary | - +--td-button-default-disabled-bg | @bg-color-component-disabled | - +--td-button-default-disabled-border-color | @bg-color-component-disabled | - +--td-button-default-disabled-color | @text-color-disabled | - +--td-button-default-outline-active-bg-color | @bg-color-container-active | - +--td-button-default-outline-active-border-color | @component-border | - +--td-button-default-outline-border-color | @component-border | - +--td-button-default-outline-color | @text-color-primary | - +--td-button-default-outline-disabled-color | @component-border | - +--td-button-default-text-active-bg-color | @bg-color-container-active | - +--td-button-extra-small-font-size | @font-size-base | - +--td-button-extra-small-height | 56rpx | - +--td-button-extra-small-icon-font-size | 36rpx | - +--td-button-extra-small-padding-horizontal | 16rpx | - +--td-button-font-weight | 600 | - +--td-button-ghost-border-color | @button-ghost-color | - +--td-button-ghost-color | @bg-color-container | - +--td-button-ghost-danger-border-color | @error-color | - +--td-button-ghost-danger-color | @error-color | - +--td-button-ghost-danger-hover-color | @error-color-active | - +--td-button-ghost-disabled-color | @font-white-4 | - +--td-button-ghost-hover-color | @font-white-2 | - +--td-button-ghost-primary-border-color | @brand-color | - +--td-button-ghost-primary-color | @brand-color | - +--td-button-ghost-primary-hover-color | @brand-color-active | - +--td-button-icon-border-radius | 8rpx | - +--td-button-icon-spacer | @spacer | - +--td-button-large-font-size | @font-size-m | - +--td-button-large-height | 96rpx | - +--td-button-large-icon-font-size | 48rpx | - +--td-button-large-padding-horizontal | 40rpx | - +--td-button-light-active-bg-color | @brand-color-light-active | - +--td-button-light-active-border-color | @brand-color-light-active | - +--td-button-light-bg-color | @brand-color-light | - +--td-button-light-border-color | @brand-color-light | - +--td-button-light-color | @brand-color | - +--td-button-light-disabled-bg | @brand-color-light | - +--td-button-light-disabled-border-color | @brand-color-light | - +--td-button-light-disabled-color | @brand-color-disabled | - +--td-button-light-outline-active-bg-color | @brand-color-light-active | - +--td-button-light-outline-active-border-color | @brand-color-active | - +--td-button-light-outline-bg-color | @brand-color-light | - +--td-button-light-outline-border-color | @button-light-outline-color | - +--td-button-light-outline-color | @brand-color | - +--td-button-light-outline-disabled-color | @brand-color-disabled | - +--td-button-light-text-active-bg-color | @bg-color-container-active | - +--td-button-light-text-color | @brand-color | - +--td-button-medium-font-size | @font-size-m | - +--td-button-medium-height | 80rpx | - +--td-button-medium-icon-font-size | 40rpx | - +--td-button-medium-padding-horizontal | 32rpx | - +--td-button-primary-active-bg-color | @brand-color-active | - +--td-button-primary-active-border-color | @brand-color-active | - +--td-button-primary-bg-color | @brand-color | - +--td-button-primary-border-color | @brand-color | - +--td-button-primary-color | @font-white-1 | - +--td-button-primary-dashed-border-color | @button-primary-dashed-color | - +--td-button-primary-dashed-color | @brand-color | - +--td-button-primary-dashed-disabled-color | @brand-color-disabled | - +--td-button-primary-disabled-bg | @brand-color-disabled | - +--td-button-primary-disabled-border-color | @brand-color-disabled | - +--td-button-primary-disabled-color | @font-white-1 | - +--td-button-primary-outline-active-bg-color | @bg-color-container-active | - +--td-button-primary-outline-active-border-color | @brand-color-active | - +--td-button-primary-outline-border-color | @button-primary-outline-color | - +--td-button-primary-outline-color | @brand-color | - +--td-button-primary-outline-disabled-color | @brand-color-disabled | - +--td-button-primary-text-active-bg-color | @bg-color-container-active | - +--td-button-primary-text-color | @brand-color | - +--td-button-primary-text-disabled-color | @brand-color-disabled | - +--td-button-small-font-size | @font-size-base | - +--td-button-small-height | 64rpx | - +--td-button-small-icon-font-size | 36rpx | - +--td-button-small-padding-horizontal | 24rpx | - \ No newline at end of file diff --git a/miniprogram_npm/tdesign-miniprogram/button/button.d.ts b/miniprogram_npm/tdesign-miniprogram/button/button.d.ts index a55a5a2..4e88efd 100644 --- a/miniprogram_npm/tdesign-miniprogram/button/button.d.ts +++ b/miniprogram_npm/tdesign-miniprogram/button/button.d.ts @@ -6,13 +6,16 @@ export default class Button extends SuperComponent { externalClasses: string[]; behaviors: string[]; properties: TdButtonProps; + options: { + multipleSlots: boolean; + }; data: { prefix: string; className: string; classPrefix: string; }; observers: { - 'theme, size, plain, block, shape, disabled, loading'(): void; + 'theme, size, plain, block, shape, disabled, loading, variant'(): void; icon(icon: any): void; }; lifetimes: { @@ -27,6 +30,7 @@ export default class Button extends SuperComponent { opensetting(e: any): void; launchapp(e: any): void; chooseavatar(e: any): void; + agreeprivacyauthorization(e: any): void; handleTap(e: any): void; }; } diff --git a/miniprogram_npm/tdesign-miniprogram/button/button.js b/miniprogram_npm/tdesign-miniprogram/button/button.js index a457c41..5449818 100644 --- a/miniprogram_npm/tdesign-miniprogram/button/button.js +++ b/miniprogram_npm/tdesign-miniprogram/button/button.js @@ -8,7 +8,7 @@ import { SuperComponent, wxComponent } from '../common/src/index'; import config from '../common/config'; import props from './props'; import { canIUseFormFieldButton } from '../common/version'; -import { setIcon } from '../common/utils'; +import { calcIcon } from '../common/utils'; const { prefix } = config; const name = `${prefix}-button`; let Button = class Button extends SuperComponent { @@ -17,18 +17,22 @@ let Button = class Button extends SuperComponent { this.externalClasses = [`${prefix}-class`, `${prefix}-class-icon`, `${prefix}-class-loading`]; this.behaviors = canIUseFormFieldButton() ? ['wx://form-field-button'] : []; this.properties = props; + this.options = { + multipleSlots: true, + }; this.data = { prefix, className: '', classPrefix: name, }; this.observers = { - 'theme, size, plain, block, shape, disabled, loading'() { + 'theme, size, plain, block, shape, disabled, loading, variant'() { this.setClass(); }, icon(icon) { - const obj = setIcon('icon', icon, ''); - this.setData(Object.assign({}, obj)); + this.setData({ + _icon: calcIcon(icon, ''), + }); }, }; this.lifetimes = { @@ -80,8 +84,11 @@ let Button = class Button extends SuperComponent { chooseavatar(e) { this.triggerEvent('chooseavatar', e.detail); }, + agreeprivacyauthorization(e) { + this.triggerEvent('agreeprivacyauthorization', e.detail); + }, handleTap(e) { - if (this.data.disabled) + if (this.data.disabled || this.data.loading) return; this.triggerEvent('tap', e); }, diff --git a/miniprogram_npm/tdesign-miniprogram/button/button.json b/miniprogram_npm/tdesign-miniprogram/button/button.json index 708bd1b..a32e8cd 100644 --- a/miniprogram_npm/tdesign-miniprogram/button/button.json +++ b/miniprogram_npm/tdesign-miniprogram/button/button.json @@ -1,5 +1,6 @@ { "component": true, + "styleIsolation": "apply-shared", "usingComponents": { "t-icon": "../icon/icon", "t-loading": "../loading/loading" diff --git a/miniprogram_npm/tdesign-miniprogram/button/button.wxml b/miniprogram_npm/tdesign-miniprogram/button/button.wxml index b238985..895b227 100644 --- a/miniprogram_npm/tdesign-miniprogram/button/button.wxml +++ b/miniprogram_npm/tdesign-miniprogram/button/button.wxml @@ -2,17 +2,18 @@