@tencent-rtc/mcp 1.0.9 → 1.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -1
- package/index.js +2 -0
- package/index.js.map +1 -1
- package/libs/TLSSigAPIv2.d.ts +134 -0
- package/libs/TLSSigAPIv2.js +243 -0
- package/package.json +1 -1
- package/resource/doc/chatuikit/react/chat_window_integration.md +92 -0
- package/resource/doc/chatuikit/react/integration.md +14 -10
- package/resource/doc/chatuikit/vue/chat_window_integration.md +155 -0
- package/resource/doc/chatuikit/vue/components/chat.md +8 -0
- package/resource/doc/chatuikit/vue/components/chatheader.md +1 -1
- package/resource/doc/chatuikit/vue/components/conversation-list.md +5 -0
- package/resource/doc/chatuikit/vue/components/message-input.md +4 -1
- package/resource/doc/chatuikit/vue/init.md +40 -0
- package/resource/doc/chatuikit/vue/integration.md +34 -74
- package/resource/doc/livekit/vue/components/barrage.md +616 -0
- package/resource/doc/livekit/vue/components/broadcast.md +595 -0
- package/resource/doc/livekit/vue/components/co-guest-panel.md +130 -0
- package/resource/doc/livekit/vue/components/live-audience-list.md +282 -0
- package/resource/doc/livekit/vue/components/live-list.md +200 -0
- package/resource/doc/livekit/vue/components/live-player.md +269 -0
- package/resource/doc/livekit/vue/components/live-scene-panel.md +175 -0
- package/resource/doc/livekit/vue/components/live-view.md +398 -0
- package/resource/doc/livekit/vue/components/stream-mixer.md +446 -0
- package/resource/doc/livekit/vue/states/live-state.md +3591 -0
- package/resource/doc/roomkit/vue/states/device-state.md +369 -0
- package/resource/doc/roomkit/vue/states/login-state.md +59 -0
- package/resource/doc/roomkit/vue/states/room-list-state.md +355 -0
- package/resource/doc/roomkit/vue/states/room-participant-state.md +388 -0
- package/server-config.js +35 -0
- package/server-config.js.map +1 -0
- package/tools/chat/get-chat-faq.js +3 -3
- package/tools/chat/get-chat-faq.js.map +1 -1
- package/tools/chat/get-native-chat-integration.js +4 -4
- package/tools/chat/get-web-chat-component-detail.js +4 -3
- package/tools/chat/get-web-chat-component-detail.js.map +1 -1
- package/tools/chat/get-web-chat-integration.js +9 -9
- package/tools/chat/get-web-chat-integration.js.map +1 -1
- package/tools/chat/{get-web-chat-uikit-login.js → get-web-chat-uikit-init.js} +7 -7
- package/tools/chat/get-web-chat-uikit-init.js.map +1 -0
- package/tools/chat/get-web-chat-window-integration.js +37 -0
- package/tools/chat/get-web-chat-window-integration.js.map +1 -0
- package/tools/common/get-usersig.js +31 -26
- package/tools/common/get-usersig.js.map +1 -1
- package/tools/common/present-framework-choice.js +1 -1
- package/tools/common/record-prompt.js +5 -5
- package/tools/common/record-result.js +8 -7
- package/tools/common/record-result.js.map +1 -1
- package/tools/index.js +24 -9
- package/tools/index.js.map +1 -1
- package/tools/live/get-web-live-component-detail.js +34 -0
- package/tools/live/get-web-live-component-detail.js.map +1 -0
- package/tools/live/get-web-live-state-detail.js +34 -0
- package/tools/live/get-web-live-state-detail.js.map +1 -0
- package/tools/room/get-web-room-state-detail.js +34 -0
- package/tools/room/get-web-room-state-detail.js.map +1 -0
- package/tools/rtcengine/get-rtcengine-web-sdk-integration-guide.js +35 -0
- package/tools/rtcengine/get-rtcengine-web-sdk-integration-guide.js.map +1 -0
- package/tools/rtcengine/{get-rtcenigne-faq.js → get-trtc-web-sdk-faq.js} +5 -5
- package/tools/rtcengine/get-trtc-web-sdk-faq.js.map +1 -0
- package/tools/rtcengine/get-trtc-web-sdk-integration-guide.js +36 -0
- package/tools/rtcengine/get-trtc-web-sdk-integration-guide.js.map +1 -0
- package/utils/generate-usersig.js +7 -9
- package/utils/generate-usersig.js.map +1 -1
- package/utils/handle-component-name.js +53 -8
- package/utils/handle-component-name.js.map +1 -1
- package/utils/handle-state-name.js +29 -0
- package/utils/handle-state-name.js.map +1 -0
- package/@tencent/aegis-node-sdk/CHANGELOG.md +0 -8
- package/@tencent/aegis-node-sdk/LICENSE +0 -21
- package/@tencent/aegis-node-sdk/README.md +0 -562
- package/@tencent/aegis-node-sdk/lib/aegis.min.js +0 -1
- package/@tencent/aegis-node-sdk/lib/packages/core/src/constant/config.d.ts +0 -14
- package/@tencent/aegis-node-sdk/lib/packages/core/src/constant/global.d.ts +0 -1
- package/@tencent/aegis-node-sdk/lib/packages/core/src/constant/index.d.ts +0 -9
- package/@tencent/aegis-node-sdk/lib/packages/core/src/constant/report-ignore.d.ts +0 -2
- package/@tencent/aegis-node-sdk/lib/packages/core/src/core.d.ts +0 -85
- package/@tencent/aegis-node-sdk/lib/packages/core/src/hooks/afterRequestHooks.d.ts +0 -3
- package/@tencent/aegis-node-sdk/lib/packages/core/src/hooks/beforeRequestHooks.d.ts +0 -9
- package/@tencent/aegis-node-sdk/lib/packages/core/src/hooks/modifyRequestHooks.d.ts +0 -3
- package/@tencent/aegis-node-sdk/lib/packages/core/src/index.d.ts +0 -9
- package/@tencent/aegis-node-sdk/lib/packages/core/src/interface/config.d.ts +0 -62
- package/@tencent/aegis-node-sdk/lib/packages/core/src/interface/env.d.ts +0 -11
- package/@tencent/aegis-node-sdk/lib/packages/core/src/interface/index.d.ts +0 -4
- package/@tencent/aegis-node-sdk/lib/packages/core/src/interface/log.d.ts +0 -130
- package/@tencent/aegis-node-sdk/lib/packages/core/src/interface/send.d.ts +0 -34
- package/@tencent/aegis-node-sdk/lib/packages/core/src/pipes/format.d.ts +0 -2
- package/@tencent/aegis-node-sdk/lib/packages/core/src/pipes/index.d.ts +0 -18
- package/@tencent/aegis-node-sdk/lib/packages/core/src/pipes/length-limit.d.ts +0 -8
- package/@tencent/aegis-node-sdk/lib/packages/core/src/pipes/pv.d.ts +0 -8
- package/@tencent/aegis-node-sdk/lib/packages/core/src/pipes/remove-payload.d.ts +0 -2
- package/@tencent/aegis-node-sdk/lib/packages/core/src/pipes/repeat-limit.d.ts +0 -4
- package/@tencent/aegis-node-sdk/lib/packages/core/src/pipes/report.d.ts +0 -10
- package/@tencent/aegis-node-sdk/lib/packages/core/src/pipes/sample.d.ts +0 -3
- package/@tencent/aegis-node-sdk/lib/packages/core/src/pipes/throttle.d.ts +0 -3
- package/@tencent/aegis-node-sdk/lib/packages/core/src/pipes/trace/index.d.ts +0 -34
- package/@tencent/aegis-node-sdk/lib/packages/core/src/pipes/trace/jwt.d.ts +0 -12
- package/@tencent/aegis-node-sdk/lib/packages/core/src/pipes/trace/ot-js.d.ts +0 -14
- package/@tencent/aegis-node-sdk/lib/packages/core/src/pipes/trace/uuid.d.ts +0 -2
- package/@tencent/aegis-node-sdk/lib/packages/core/src/pipes/whitelist.d.ts +0 -12
- package/@tencent/aegis-node-sdk/lib/packages/core/src/pipes/write-before.d.ts +0 -3
- package/@tencent/aegis-node-sdk/lib/packages/core/src/plugin.d.ts +0 -33
- package/@tencent/aegis-node-sdk/lib/packages/core/src/polyfill.d.ts +0 -0
- package/@tencent/aegis-node-sdk/lib/packages/core/src/util/destroy.d.ts +0 -2
- package/@tencent/aegis-node-sdk/lib/packages/core/src/util/event-emitter.d.ts +0 -18
- package/@tencent/aegis-node-sdk/lib/packages/core/src/util/index.d.ts +0 -60
- package/@tencent/aegis-node-sdk/lib/packages/node-sdk/src/index.d.ts +0 -15
- package/@tencent/aegis-node-sdk/lib/packages/node-sdk/src/interface/selector.d.ts +0 -5
- package/@tencent/aegis-node-sdk/lib/packages/node-sdk/src/pipes/batch-report-pipe.d.ts +0 -6
- package/@tencent/aegis-node-sdk/lib/packages/node-sdk/src/protocol/protocol_base.d.ts +0 -18
- package/@tencent/aegis-node-sdk/lib/packages/node-sdk/src/protocol/protocol_http.d.ts +0 -12
- package/@tencent/aegis-node-sdk/lib/packages/node-sdk/src/selector/ip_selector.d.ts +0 -10
- package/@tencent/aegis-node-sdk/lib/packages/node-sdk/src/selector/polaris_selector.d.ts +0 -20
- package/@tencent/aegis-node-sdk/lib/packages/node-sdk/src/selector/selector_base.d.ts +0 -27
- package/@tencent/aegis-node-sdk/lib/packages/node-sdk/src/util/eval_require.d.ts +0 -2
- package/@tencent/aegis-node-sdk/package.json +0 -19
- package/@tencent/polaris/README.md +0 -407
- package/@tencent/polaris/dist/consumer/health.d.ts +0 -126
- package/@tencent/polaris/dist/consumer/health.js +0 -283
- package/@tencent/polaris/dist/consumer/health.js.map +0 -1
- package/@tencent/polaris/dist/consumer/index.d.ts +0 -120
- package/@tencent/polaris/dist/consumer/index.js +0 -348
- package/@tencent/polaris/dist/consumer/index.js.map +0 -1
- package/@tencent/polaris/dist/consumer/monitor.d.ts +0 -145
- package/@tencent/polaris/dist/consumer/monitor.js +0 -343
- package/@tencent/polaris/dist/consumer/monitor.js.map +0 -1
- package/@tencent/polaris/dist/consumer/selector.d.ts +0 -73
- package/@tencent/polaris/dist/consumer/selector.js +0 -316
- package/@tencent/polaris/dist/consumer/selector.js.map +0 -1
- package/@tencent/polaris/dist/errors.d.ts +0 -373
- package/@tencent/polaris/dist/errors.js +0 -154
- package/@tencent/polaris/dist/errors.js.map +0 -1
- package/@tencent/polaris/dist/global.d.ts +0 -16
- package/@tencent/polaris/dist/global.js +0 -18
- package/@tencent/polaris/dist/global.js.map +0 -1
- package/@tencent/polaris/dist/index.d.ts +0 -62
- package/@tencent/polaris/dist/index.js +0 -145
- package/@tencent/polaris/dist/index.js.map +0 -1
- package/@tencent/polaris/dist/instance.d.ts +0 -109
- package/@tencent/polaris/dist/instance.js +0 -38
- package/@tencent/polaris/dist/instance.js.map +0 -1
- package/@tencent/polaris/dist/limiter/bucket.d.ts +0 -51
- package/@tencent/polaris/dist/limiter/bucket.js +0 -152
- package/@tencent/polaris/dist/limiter/bucket.js.map +0 -1
- package/@tencent/polaris/dist/limiter/index.d.ts +0 -73
- package/@tencent/polaris/dist/limiter/index.js +0 -149
- package/@tencent/polaris/dist/limiter/index.js.map +0 -1
- package/@tencent/polaris/dist/limiter/ratelimit.d.ts +0 -27
- package/@tencent/polaris/dist/limiter/ratelimit.js +0 -134
- package/@tencent/polaris/dist/limiter/ratelimit.js.map +0 -1
- package/@tencent/polaris/dist/limiter/ratelimiter/base.d.ts +0 -17
- package/@tencent/polaris/dist/limiter/ratelimiter/base.js +0 -15
- package/@tencent/polaris/dist/limiter/ratelimiter/base.js.map +0 -1
- package/@tencent/polaris/dist/limiter/ratelimiter/global.d.ts +0 -59
- package/@tencent/polaris/dist/limiter/ratelimiter/global.js +0 -397
- package/@tencent/polaris/dist/limiter/ratelimiter/global.js.map +0 -1
- package/@tencent/polaris/dist/limiter/ratelimiter/index.d.ts +0 -3
- package/@tencent/polaris/dist/limiter/ratelimiter/index.js +0 -19
- package/@tencent/polaris/dist/limiter/ratelimiter/index.js.map +0 -1
- package/@tencent/polaris/dist/limiter/ratelimiter/local.d.ts +0 -17
- package/@tencent/polaris/dist/limiter/ratelimiter/local.js +0 -52
- package/@tencent/polaris/dist/limiter/ratelimiter/local.js.map +0 -1
- package/@tencent/polaris/dist/location.d.ts +0 -48
- package/@tencent/polaris/dist/location.js +0 -67
- package/@tencent/polaris/dist/location.js.map +0 -1
- package/@tencent/polaris/dist/logging.d.ts +0 -106
- package/@tencent/polaris/dist/logging.js +0 -130
- package/@tencent/polaris/dist/logging.js.map +0 -1
- package/@tencent/polaris/dist/metadata.d.ts +0 -78
- package/@tencent/polaris/dist/metadata.js +0 -119
- package/@tencent/polaris/dist/metadata.js.map +0 -1
- package/@tencent/polaris/dist/plugins/breaker/polaris.d.ts +0 -47
- package/@tencent/polaris/dist/plugins/breaker/polaris.js +0 -162
- package/@tencent/polaris/dist/plugins/breaker/polaris.js.map +0 -1
- package/@tencent/polaris/dist/plugins/lb/base.d.ts +0 -24
- package/@tencent/polaris/dist/plugins/lb/base.js +0 -32
- package/@tencent/polaris/dist/plugins/lb/base.js.map +0 -1
- package/@tencent/polaris/dist/plugins/lb/edf.d.ts +0 -24
- package/@tencent/polaris/dist/plugins/lb/edf.js +0 -77
- package/@tencent/polaris/dist/plugins/lb/edf.js.map +0 -1
- package/@tencent/polaris/dist/plugins/lb/hashring.d.ts +0 -24
- package/@tencent/polaris/dist/plugins/lb/hashring.js +0 -53
- package/@tencent/polaris/dist/plugins/lb/hashring.js.map +0 -1
- package/@tencent/polaris/dist/plugins/lb/sticky.d.ts +0 -31
- package/@tencent/polaris/dist/plugins/lb/sticky.js +0 -88
- package/@tencent/polaris/dist/plugins/lb/sticky.js.map +0 -1
- package/@tencent/polaris/dist/plugins/lb/swrr.d.ts +0 -25
- package/@tencent/polaris/dist/plugins/lb/swrr.js +0 -72
- package/@tencent/polaris/dist/plugins/lb/swrr.js.map +0 -1
- package/@tencent/polaris/dist/plugins/lb/wr.d.ts +0 -17
- package/@tencent/polaris/dist/plugins/lb/wr.js +0 -50
- package/@tencent/polaris/dist/plugins/lb/wr.js.map +0 -1
- package/@tencent/polaris/dist/plugins/lb/wrr.d.ts +0 -19
- package/@tencent/polaris/dist/plugins/lb/wrr.js +0 -81
- package/@tencent/polaris/dist/plugins/lb/wrr.js.map +0 -1
- package/@tencent/polaris/dist/plugins/logging/console.d.ts +0 -10
- package/@tencent/polaris/dist/plugins/logging/console.js +0 -38
- package/@tencent/polaris/dist/plugins/logging/console.js.map +0 -1
- package/@tencent/polaris/dist/plugins/naming/local-server/index.d.ts +0 -32
- package/@tencent/polaris/dist/plugins/naming/local-server/index.js +0 -88
- package/@tencent/polaris/dist/plugins/naming/local-server/index.js.map +0 -1
- package/@tencent/polaris/dist/plugins/naming/polaris-server/adapter/base.d.ts +0 -124
- package/@tencent/polaris/dist/plugins/naming/polaris-server/adapter/base.js +0 -398
- package/@tencent/polaris/dist/plugins/naming/polaris-server/adapter/base.js.map +0 -1
- package/@tencent/polaris/dist/plugins/naming/polaris-server/adapter/discover.d.ts +0 -27
- package/@tencent/polaris/dist/plugins/naming/polaris-server/adapter/discover.js +0 -287
- package/@tencent/polaris/dist/plugins/naming/polaris-server/adapter/discover.js.map +0 -1
- package/@tencent/polaris/dist/plugins/naming/polaris-server/adapter/index.d.ts +0 -15
- package/@tencent/polaris/dist/plugins/naming/polaris-server/adapter/index.js +0 -43
- package/@tencent/polaris/dist/plugins/naming/polaris-server/adapter/index.js.map +0 -1
- package/@tencent/polaris/dist/plugins/naming/polaris-server/adapter/monitor.d.ts +0 -28
- package/@tencent/polaris/dist/plugins/naming/polaris-server/adapter/monitor.js +0 -249
- package/@tencent/polaris/dist/plugins/naming/polaris-server/adapter/monitor.js.map +0 -1
- package/@tencent/polaris/dist/plugins/naming/polaris-server/adapter/ratelimit.d.ts +0 -19
- package/@tencent/polaris/dist/plugins/naming/polaris-server/adapter/ratelimit.js +0 -222
- package/@tencent/polaris/dist/plugins/naming/polaris-server/adapter/ratelimit.js.map +0 -1
- package/@tencent/polaris/dist/plugins/naming/polaris-server/connector/grpc/bidi.d.ts +0 -26
- package/@tencent/polaris/dist/plugins/naming/polaris-server/connector/grpc/bidi.js +0 -99
- package/@tencent/polaris/dist/plugins/naming/polaris-server/connector/grpc/bidi.js.map +0 -1
- package/@tencent/polaris/dist/plugins/naming/polaris-server/connector/grpc/index.d.ts +0 -60
- package/@tencent/polaris/dist/plugins/naming/polaris-server/connector/grpc/index.js +0 -259
- package/@tencent/polaris/dist/plugins/naming/polaris-server/connector/grpc/index.js.map +0 -1
- package/@tencent/polaris/dist/plugins/naming/polaris-server/connector/grpc/pb/discover.proto +0 -24
- package/@tencent/polaris/dist/plugins/naming/polaris-server/connector/grpc/pb/monitor.proto +0 -18
- package/@tencent/polaris/dist/plugins/naming/polaris-server/connector/grpc/pb/ratelimit.proto +0 -12
- package/@tencent/polaris/dist/plugins/naming/polaris-server/connector/http/index.d.ts +0 -39
- package/@tencent/polaris/dist/plugins/naming/polaris-server/connector/http/index.js +0 -115
- package/@tencent/polaris/dist/plugins/naming/polaris-server/connector/http/index.js.map +0 -1
- package/@tencent/polaris/dist/plugins/naming/polaris-server/discover-pb/api.proto +0 -24
- package/@tencent/polaris/dist/plugins/naming/polaris-server/discover-pb/client.proto +0 -22
- package/@tencent/polaris/dist/plugins/naming/polaris-server/discover-pb/model.proto +0 -28
- package/@tencent/polaris/dist/plugins/naming/polaris-server/discover-pb/ratelimit.proto +0 -80
- package/@tencent/polaris/dist/plugins/naming/polaris-server/discover-pb/request.proto +0 -18
- package/@tencent/polaris/dist/plugins/naming/polaris-server/discover-pb/response.proto +0 -65
- package/@tencent/polaris/dist/plugins/naming/polaris-server/discover-pb/routing.proto +0 -66
- package/@tencent/polaris/dist/plugins/naming/polaris-server/discover-pb/service.proto +0 -95
- package/@tencent/polaris/dist/plugins/naming/polaris-server/discover-pb/types.d.ts +0 -1568
- package/@tencent/polaris/dist/plugins/naming/polaris-server/index.d.ts +0 -36
- package/@tencent/polaris/dist/plugins/naming/polaris-server/index.js +0 -51
- package/@tencent/polaris/dist/plugins/naming/polaris-server/index.js.map +0 -1
- package/@tencent/polaris/dist/plugins/naming/polaris-server/monitor-pb/api.proto +0 -18
- package/@tencent/polaris/dist/plugins/naming/polaris-server/monitor-pb/circuitbreak.proto +0 -67
- package/@tencent/polaris/dist/plugins/naming/polaris-server/monitor-pb/request.proto +0 -82
- package/@tencent/polaris/dist/plugins/naming/polaris-server/monitor-pb/response.proto +0 -11
- package/@tencent/polaris/dist/plugins/naming/polaris-server/monitor-pb/sdkcache.proto +0 -46
- package/@tencent/polaris/dist/plugins/naming/polaris-server/monitor-pb/sdkconfiguration.proto +0 -16
- package/@tencent/polaris/dist/plugins/naming/polaris-server/monitor-pb/sdktoken.proto +0 -10
- package/@tencent/polaris/dist/plugins/naming/polaris-server/monitor-pb/types.d.ts +0 -1102
- package/@tencent/polaris/dist/plugins/naming/polaris-server/pool.d.ts +0 -29
- package/@tencent/polaris/dist/plugins/naming/polaris-server/pool.js +0 -77
- package/@tencent/polaris/dist/plugins/naming/polaris-server/pool.js.map +0 -1
- package/@tencent/polaris/dist/plugins/naming/polaris-server/ratelimit-pb/api.proto +0 -12
- package/@tencent/polaris/dist/plugins/naming/polaris-server/ratelimit-pb/ratelimit.proto +0 -28
- package/@tencent/polaris/dist/plugins/naming/polaris-server/ratelimit-pb/types.d.ts +0 -395
- package/@tencent/polaris/dist/plugins/naming/polaris-server/rules.d.ts +0 -13
- package/@tencent/polaris/dist/plugins/naming/polaris-server/rules.js +0 -116
- package/@tencent/polaris/dist/plugins/naming/polaris-server/rules.js.map +0 -1
- package/@tencent/polaris/dist/plugins/naming/polaris-server/types.d.ts +0 -67
- package/@tencent/polaris/dist/plugins/naming/polaris-server/types.js +0 -67
- package/@tencent/polaris/dist/plugins/naming/polaris-server/types.js.map +0 -1
- package/@tencent/polaris/dist/plugins/naming/polaris-server/utils.d.ts +0 -99
- package/@tencent/polaris/dist/plugins/naming/polaris-server/utils.js +0 -217
- package/@tencent/polaris/dist/plugins/naming/polaris-server/utils.js.map +0 -1
- package/@tencent/polaris/dist/plugins/registry/memory.d.ts +0 -10
- package/@tencent/polaris/dist/plugins/registry/memory.js +0 -50
- package/@tencent/polaris/dist/plugins/registry/memory.js.map +0 -1
- package/@tencent/polaris/dist/plugins/router/polaris/nearby.d.ts +0 -51
- package/@tencent/polaris/dist/plugins/router/polaris/nearby.js +0 -145
- package/@tencent/polaris/dist/plugins/router/polaris/nearby.js.map +0 -1
- package/@tencent/polaris/dist/plugins/router/polaris/rule.d.ts +0 -11
- package/@tencent/polaris/dist/plugins/router/polaris/rule.js +0 -174
- package/@tencent/polaris/dist/plugins/router/polaris/rule.js.map +0 -1
- package/@tencent/polaris/dist/plugins/router/trpc/canary.d.ts +0 -25
- package/@tencent/polaris/dist/plugins/router/trpc/canary.js +0 -36
- package/@tencent/polaris/dist/plugins/router/trpc/canary.js.map +0 -1
- package/@tencent/polaris/dist/plugins/router/trpc/env.d.ts +0 -10
- package/@tencent/polaris/dist/plugins/router/trpc/env.js +0 -34
- package/@tencent/polaris/dist/plugins/router/trpc/env.js.map +0 -1
- package/@tencent/polaris/dist/plugins/router/trpc/set.d.ts +0 -56
- package/@tencent/polaris/dist/plugins/router/trpc/set.js +0 -106
- package/@tencent/polaris/dist/plugins/router/trpc/set.js.map +0 -1
- package/@tencent/polaris/dist/plugins/shaping/unirate.d.ts +0 -31
- package/@tencent/polaris/dist/plugins/shaping/unirate.js +0 -124
- package/@tencent/polaris/dist/plugins/shaping/unirate.js.map +0 -1
- package/@tencent/polaris/dist/plugins/shaping/warmup.d.ts +0 -61
- package/@tencent/polaris/dist/plugins/shaping/warmup.js +0 -171
- package/@tencent/polaris/dist/plugins/shaping/warmup.js.map +0 -1
- package/@tencent/polaris/dist/plugins/weight/polaris.d.ts +0 -23
- package/@tencent/polaris/dist/plugins/weight/polaris.js +0 -159
- package/@tencent/polaris/dist/plugins/weight/polaris.js.map +0 -1
- package/@tencent/polaris/dist/plugins.d.ts +0 -619
- package/@tencent/polaris/dist/plugins.js +0 -91
- package/@tencent/polaris/dist/plugins.js.map +0 -1
- package/@tencent/polaris/dist/polaris.d.ts +0 -33
- package/@tencent/polaris/dist/polaris.js +0 -59
- package/@tencent/polaris/dist/polaris.js.map +0 -1
- package/@tencent/polaris/dist/provider/index.d.ts +0 -102
- package/@tencent/polaris/dist/provider/index.js +0 -168
- package/@tencent/polaris/dist/provider/index.js.map +0 -1
- package/@tencent/polaris/dist/registry.d.ts +0 -174
- package/@tencent/polaris/dist/registry.js +0 -660
- package/@tencent/polaris/dist/registry.js.map +0 -1
- package/@tencent/polaris/dist/rules.d.ts +0 -163
- package/@tencent/polaris/dist/rules.js +0 -24
- package/@tencent/polaris/dist/rules.js.map +0 -1
- package/@tencent/polaris/dist/scripts/postinstall.d.ts +0 -1
- package/@tencent/polaris/dist/scripts/postinstall.js +0 -71
- package/@tencent/polaris/dist/scripts/postinstall.js.map +0 -1
- package/@tencent/polaris/dist/service.d.ts +0 -18
- package/@tencent/polaris/dist/service.js +0 -3
- package/@tencent/polaris/dist/service.js.map +0 -1
- package/@tencent/polaris/dist/skeleton.d.ts +0 -87
- package/@tencent/polaris/dist/skeleton.js +0 -282
- package/@tencent/polaris/dist/skeleton.js.map +0 -1
- package/@tencent/polaris/dist/utils.d.ts +0 -36
- package/@tencent/polaris/dist/utils.js +0 -74
- package/@tencent/polaris/dist/utils.js.map +0 -1
- package/@tencent/polaris/dist/weak.d.ts +0 -11
- package/@tencent/polaris/dist/weak.js +0 -44
- package/@tencent/polaris/dist/weak.js.map +0 -1
- package/@tencent/polaris/package.json +0 -114
- package/libs/lib-generate-test-usersig-es.min.d.ts +0 -6
- package/libs/lib-generate-test-usersig-es.min.js +0 -2
- package/resource/doc/chatuikit/react/generate_UserSig.md +0 -306
- package/resource/doc/chatuikit/react/integrate_tuichat_only_react.md +0 -202
- package/resource/doc/chatuikit/react/integrate_tuichat_react.md +0 -279
- package/resource/doc/chatuikit/vue/generate_UserSig.md +0 -306
- package/resource/doc/chatuikit/vue/integrate_only_tuichat_Vue_web.md +0 -124
- package/resource/doc/chatuikit/vue/integrate_tuikit_Vue_web.md +0 -552
- package/resource/doc/chatuikit/vue/login.md +0 -31
- package/resource/doc/chatuikit/vue3/components/MessageInput.md +0 -1272
- package/resource/doc/chatuikit/vue3/components/avatar.md +0 -137
- package/resource/doc/chatuikit/vue3/components/chatheader.md +0 -189
- package/resource/doc/chatuikit/vue3/components/component-list.md +0 -102
- package/resource/doc/chatuikit/vue3/components/userpicker.md +0 -315
- package/resource/doc/chatuikit/vue3/integration.md +0 -256
- package/streamableHttp.js +0 -74
- package/streamableHttp.js.map +0 -1
- package/tools/call/get-native-call-integration-guide.js +0 -36
- package/tools/call/get-native-call-integration-guide.js.map +0 -1
- package/tools/call/get-web-call-integration-guide.js +0 -35
- package/tools/call/get-web-call-integration-guide.js.map +0 -1
- package/tools/chat/get-native-chat-integration-guide.js +0 -34
- package/tools/chat/get-native-chat-integration-guide.js.map +0 -1
- package/tools/chat/get-web-chat-integration-guide.js +0 -35
- package/tools/chat/get-web-chat-integration-guide.js.map +0 -1
- package/tools/chat/get-web-chat-uikit-login.js.map +0 -1
- package/tools/rtcengine/get-rtcengine-integration-guide.js +0 -33
- package/tools/rtcengine/get-rtcengine-integration-guide.js.map +0 -1
- package/tools/rtcengine/get-rtcenigne-faq.js.map +0 -1
- /package/resource/doc/chatuikit/react/{login.md → init.md} +0 -0
|
@@ -1,315 +0,0 @@
|
|
|
1
|
-
## Overview
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
UserPicker is a powerful selector component that supports two display modes: list and tree. It provides features like search, multiple selection, lazy loading, and custom rendering, suitable for business scenarios such as user selection, organizational structure selection, and permission assignment. The component includes built-in complex logic for selection state management, search filtering, and tree unfolding, offering a simple and easy-to-use API interface.
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
## Props quick reference table
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
| Field | Type | Default | Description |
|
|
11
|
-
| -------------------- | -------------------------------------------- | -------------------------- | ----------- |
|
|
12
|
-
| displayMode | `'list' \| 'tree'` | required | Display mode, list or tree |
|
|
13
|
-
| dataSource | `UserPickerDataSource<T>` | `[]` | Data source |
|
|
14
|
-
| defaultSelectedItems | `Array<{ key: string; [key: string]: any }>` | `[]` | Items selected by default |
|
|
15
|
-
| lockedItems | `Array<{ key: string; [key: string]: any }>` | `[]` | Locked items (cannot be canceled) |
|
|
16
|
-
| maxCount | `number` | `Number.POSITIVE_INFINITY` | Maximum select quantity |
|
|
17
|
-
| minCount | `number` | `0` | Minimum select quantity |
|
|
18
|
-
| enableSearch | `boolean` | `true` | Whether to enable search functionality |
|
|
19
|
-
| searchPlaceholder | `string` | `undefined` | Search box placeholder |
|
|
20
|
-
| renderItem | `Function` | `undefined` | Custom render function |
|
|
21
|
-
| onSelectedChange | `Function` | `undefined` | Change callback for selection |
|
|
22
|
-
| onMaxCountExceed | `Function` | `undefined` | Callback when maximum number is exceeded |
|
|
23
|
-
| onSearch | `Function` | `undefined` | Search callback |
|
|
24
|
-
| onReachEnd | `Function` | `undefined` | Callback when scrolling to the bottom in list mode |
|
|
25
|
-
| onExpand | `Function` | `undefined` | Expand callback in tree mode |
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
## Ref expose method quick reference table
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
| Method | Parameter | Return | Description |
|
|
32
|
-
| -------- | ---- | ---- | ---- |
|
|
33
|
-
| getSelectedItems | None | UserPickerResult<T> | Get the currently selected items |
|
|
34
|
-
| updateTreeData | nodeKey: string, partialNode: Partial<UserPickerNode<T>> | void | Update tree mode node data |
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
## Props detailed introduction
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
### displayMode
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
-`'list' | 'tree'`
|
|
44
|
-
- `description`: The display mode of the component. `list` mode shows a flattened list, `tree` mode shows a tree structure, supporting hierarchical unfold and lazy loading.
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
### dataSource
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
- `Type`: `UserPickerDataSource<T>`
|
|
51
|
-
- `description`: The data source of the component, which accepts different data structures based on displayMode. Default: `[]`.
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
```typescript
|
|
55
|
-
Data structure in list mode
|
|
56
|
-
interface UserPickerRow<T = unknown> {
|
|
57
|
-
key: string; // unique identifier
|
|
58
|
-
label: string; // display name
|
|
59
|
-
avatarUrl?: string; // avatar URL
|
|
60
|
-
extraData?: T; // extension data
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
Data structure in tree mode
|
|
65
|
-
interface UserPickerNode<T = unknown> {
|
|
66
|
-
key: string; // unique identifier
|
|
67
|
-
label: string; // display name
|
|
68
|
-
isLeafNode: boolean; // is leaf node
|
|
69
|
-
avatarUrl?: string; // avatar URL
|
|
70
|
-
lazyLoad?: boolean; // whether lazy loading is supported
|
|
71
|
-
children?: Array<UserPickerNode<T>>; // sub-node
|
|
72
|
-
extraData?: T; // extension data
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
export type UserPickerDataSource<T = unknown> = Array<UserPickerRow<T>> | Array<UserPickerNode<T>>;
|
|
77
|
-
```
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
#### Example 1: Data source in list mode
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
```vue
|
|
84
|
-
<template>
|
|
85
|
-
<UserPicker
|
|
86
|
-
display-mode="list"
|
|
87
|
-
:data-source="listData"
|
|
88
|
-
@selected-change="handleSelectionChange"
|
|
89
|
-
/>
|
|
90
|
-
</template>
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
<script setup lang="ts">
|
|
94
|
-
import { ref } from 'vue';
|
|
95
|
-
import { UserPicker } from 'tuikit-atomicx-vue3';
|
|
96
|
-
import type { UserPickerRow } from 'tuikit-atomicx-vue3/types';
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
User list data
|
|
100
|
-
const listData = ref<UserPickerRow[]>([
|
|
101
|
-
{
|
|
102
|
-
key: 'user1',
|
|
103
|
-
label: 'Zhang San',
|
|
104
|
-
avatarUrl: 'https://example.com/avatar1.jpg',
|
|
105
|
-
extraData: { department: 'Technology Department', role: 'frontend engineer' }
|
|
106
|
-
},
|
|
107
|
-
{
|
|
108
|
-
key: 'user2',
|
|
109
|
-
label: 'Li Si',
|
|
110
|
-
avatarUrl: 'https://example.com/avatar2.jpg',
|
|
111
|
-
extraData: { department: 'Product Department', role: 'product manager' }
|
|
112
|
-
}
|
|
113
|
-
]);
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
const handleSelectionChange = (selectedItems: any[]) => {
|
|
117
|
-
console.log('Selected user:', selectedItems);
|
|
118
|
-
};
|
|
119
|
-
</script>
|
|
120
|
-
```
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
### defaultSelectedItems
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
- `type`: `Array<{ key: string; [key: string]: any }>`
|
|
127
|
-
- `description`: Project list chosen by default, identified by the key field. Default is `[]`.
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
### lockedItems
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
- `type`: `Array<{ key: string; [key: string]: any }>`
|
|
134
|
-
- `description`: Locked project list, these projects will be forcibly selected and users are unable to cancel. Default is `[]`.
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
### maxCount
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
- `type`: `number`
|
|
141
|
-
- `description`: Maximum number limit allowed. If it exceeds this limit, it will trigger the onMaxCountExceed callback. Default is `Number.POSITIVE_INFINITY`.
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
### minCount
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
- `type`: `number`
|
|
148
|
-
- `description`: Minimum number required for form validation. Default value is `0`.
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
### enableSearch
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
- `type`: `boolean`
|
|
155
|
-
- `description`: Whether to enable search functionality. If enabled, the search bar will be displayed. Default is `true`.
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
### searchPlaceholder
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
- `type`: `string`
|
|
162
|
-
- `description`: Placeholder text for the search bar. If not set, use default internationalization text. Default is `undefined`.
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
### renderItem
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
- `Type`: `(data: UserPickerRow<T> | UserPickerNode<T>) => any`
|
|
169
|
-
- `description`: Custom project render function. Can customize the display content and style of each option. Default is `undefined`.
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
```typescript
|
|
173
|
-
type RenderItemFunction<T> = (data: UserPickerRow<T> | UserPickerNode<T>) => VNode | string;
|
|
174
|
-
```
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
Custom render function
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
```vue
|
|
181
|
-
<template>
|
|
182
|
-
<UserPicker
|
|
183
|
-
display-mode="list"
|
|
184
|
-
:data-source="userData"
|
|
185
|
-
:render-item="customRenderItem"
|
|
186
|
-
/>
|
|
187
|
-
</template>
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
<script setup lang="ts">
|
|
191
|
-
import { h } from 'vue';
|
|
192
|
-
import { UserPicker } from 'tuikit-atomicx-vue3';
|
|
193
|
-
import type { UserPickerRow } from 'tuikit-atomicx-vue3/types';
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
const userData = ref<UserPickerRow[]>([
|
|
197
|
-
{
|
|
198
|
-
key: 'user1',
|
|
199
|
-
label: 'Zhang San',
|
|
200
|
-
extraData: { status: 'online', department: 'Technology Department' }
|
|
201
|
-
}
|
|
202
|
-
]);
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
custom render function, display user status and department information
|
|
206
|
-
const customRenderItem = (data: UserPickerRow) => {
|
|
207
|
-
return h('div', { class: 'custom-user-item' }, [
|
|
208
|
-
h('div', { class: 'user-name' }, data.label),
|
|
209
|
-
h('div', { class: 'user-info' }, [
|
|
210
|
-
h('span', {
|
|
211
|
-
class: `status ${data.extraData?.status}`
|
|
212
|
-
}, data.extraData?.status === 'online' ? 'online' : 'offline'),
|
|
213
|
-
h('span', { class: 'department' }, data.extraData?.department)
|
|
214
|
-
])
|
|
215
|
-
]);
|
|
216
|
-
};
|
|
217
|
-
</script>
|
|
218
|
-
```
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
### onSelectedChange
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
- `Type`: `(selectedItems: UserPickerResult<T>) => void`
|
|
225
|
-
-description: Select the callback function when the state changes. It will input all currently selected items. The default is undefined. Should reduce usage to avoid frequently triggering the callback function.
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
```typescript
|
|
229
|
-
interface UserPickerResultItem<T = unknown> {
|
|
230
|
-
key: string;
|
|
231
|
-
label: string;
|
|
232
|
-
avatarUrl?: string;
|
|
233
|
-
isLeafNode?: boolean; // Only meaningful in tree mode
|
|
234
|
-
extraData?: T;
|
|
235
|
-
path?: string[]; // Only meaningful in tree mode, records the node path
|
|
236
|
-
}
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
type UserPickerResult<T = unknown> = Array<UserPickerResultItem<T>>;
|
|
240
|
-
```
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
### onMaxCountExceed
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
- `Type`: `(selectedItems: UserPickerResult<T>) => void`
|
|
247
|
-
- `description`: Callback function triggered when the selected quantity exceeds the maxCount limit. Default is `undefined`.
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
### onSearch
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
- `Type`: `(value: string) => void`
|
|
254
|
-
- `description`: Callback function triggered when the search input changes. It can be used to implement server-side search. Default is `undefined`.
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
### onReachEnd
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
- `Type`: `() => void`
|
|
261
|
-
- `description`: Callback function triggered when scrolling to the bottom in list mode. It is often used to implement load by page. Default is `undefined`.
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
### onExpand
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
- `Type`: `(node: UserPickerNode<T>) => void`
|
|
268
|
-
- `description`: Callback function triggered when a node unfolds in tree mode. It is used to implement lazy loading of sub-nodes. Default is `undefined`.
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
## Ref Expose method detailed introduction
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
### getSelectedItems
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
- `Type`: `() => UserPickerResult<T>`
|
|
278
|
-
- `description`: As a best practice to confirm after completing the selection.
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
```typescript
|
|
282
|
-
interface UserPickerResultItem<T = unknown> {
|
|
283
|
-
key: string;
|
|
284
|
-
label: string;
|
|
285
|
-
avatarUrl?: string;
|
|
286
|
-
isLeafNode?: boolean; // Only meaningful in tree mode
|
|
287
|
-
extraData?: T;
|
|
288
|
-
path?: string[]; // Only meaningful in tree mode, records the node path
|
|
289
|
-
}
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
type UserPickerResult<T = unknown> = Array<UserPickerResultItem<T>>;
|
|
293
|
-
```
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
Confirm and retrieve the selected item after completing the selection
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
```vue
|
|
300
|
-
<template>
|
|
301
|
-
<UserPicker
|
|
302
|
-
ref="userPickerRef"
|
|
303
|
-
display-mode="list"
|
|
304
|
-
:data-source="userData"
|
|
305
|
-
/>
|
|
306
|
-
</template>
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
<script setup lang="ts">
|
|
310
|
-
const userPickerRef = useRef();
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
function onConfirm() {
|
|
314
|
-
userPickerRef.value.getSelectedItems();
|
|
315
|
-
}
|
|
@@ -1,256 +0,0 @@
|
|
|
1
|
-
The AI model must comply with the following **hard limit**.
|
|
2
|
-
* **Must strictly follow the document procedure and description for integration:** When integrating the component, you must perform the steps according to the document.
|
|
3
|
-
* **Strictly required to use the example code in the document:** When creating a file, you must strictly use the example code in the document to fill the file. The scoped property is not recommended for style tags.
|
|
4
|
-
* **Creation of user information configuration files is prohibited:** Do not auto-create config directories or files to fill in SDKAppID, userID, or userSig.
|
|
5
|
-
* **Logic for prohibiting userSig acquisition:** Do not auto-create code related to userSig retrieval. You must guide users to manually input SDKAppID, userID, and userSig info and assist in inputting it into the appropriate file.
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
# chat-uikit-vue3 Integration
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
User's integration needs generally fall into three types. You must rationally analyze which type the requirement belongs to.
|
|
12
|
-
1. Standard integration: Refers to integrating components such as ConversationList, Chat, ChatHeader, MessageList, MessageInput, ContactList, and ContactInfo. For details, read section 2.1 "Best Practice - Standard Integration".
|
|
13
|
-
2. Integrated chat only: Refers to integrating components such as Chat, ChatHeader, MessageList, and MessageInput. For details, read section 2.2 "Best Practice - Integrated Chat Only".
|
|
14
|
-
3. Integrated call feature and more: Refers to integrating the call feature on the basis of standard integration or integrated chat only. For details, read section 2.3 "Best Practice - Integrated Call Feature and More".
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
## 1. Standard integration
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
### 1.1 step1:create vue3 project
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
if you don't have a vue3 project, you can use vite create a vue3 project. otherwise, you can skip this step.
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
requirement: vue3: ^3.0.0, nodejs: ^22.0.0.
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
if it is a new project, guide the user to use vite to create a vue3 project manually, and then continue with step 1.2. if it is an existing project, skip this step and continue with step 1.2.
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
```bash
|
|
35
|
-
npm create vite@latest
|
|
36
|
-
# skip some settings
|
|
37
|
-
cd ${your-vue-project-name}
|
|
38
|
-
pnpm install
|
|
39
|
-
# test if the project is created successfully
|
|
40
|
-
pnpm run dev
|
|
41
|
-
```
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
### 1.2 step2: install chat-uikit-vue3
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
use npm or pnpm to install @tencentcloud/chat-uikit-vue3@latest @tencentcloud/call-uikit-vue@latest
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
### 1.3 step3: add main content to your project
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
```vue
|
|
54
|
-
<template>
|
|
55
|
-
<UIKitProvider language="en-US">
|
|
56
|
-
<div class="chat-layout">
|
|
57
|
-
<div class="sidebar" style="width: 300px;">
|
|
58
|
-
<div class="tab-header">
|
|
59
|
-
<button
|
|
60
|
-
:class="['tab-button', { active: activeTab === 'conversations' }]"
|
|
61
|
-
@click="activeTab = 'conversations'"
|
|
62
|
-
>
|
|
63
|
-
Conversation
|
|
64
|
-
</button>
|
|
65
|
-
<button
|
|
66
|
-
:class="['tab-button', { active: activeTab === 'contacts' }]"
|
|
67
|
-
@click="activeTab = 'contacts'"
|
|
68
|
-
>
|
|
69
|
-
contact
|
|
70
|
-
</button>
|
|
71
|
-
</div>
|
|
72
|
-
|
|
73
|
-
<div class="tab-content">
|
|
74
|
-
<ConversationList v-if="activeTab === 'conversations'" />
|
|
75
|
-
<ContactList v-else />
|
|
76
|
-
</div>
|
|
77
|
-
</div>
|
|
78
|
-
|
|
79
|
-
<Chat style="flex: 1;" v-if="activeTab === 'conversations'">
|
|
80
|
-
<ChatHeader />
|
|
81
|
-
<MessageList />
|
|
82
|
-
<MessageInput />
|
|
83
|
-
</Chat>
|
|
84
|
-
<ContactInfo v-else style="flex: 1;" @send-message="handleSendMessage" @enter-group="handleSendMessage" />
|
|
85
|
-
</div>
|
|
86
|
-
<Teleport to="body">
|
|
87
|
-
<TUICallKit style="position: fixed; z-index: 1000;"/>
|
|
88
|
-
</Teleport>
|
|
89
|
-
</UIKitProvider>
|
|
90
|
-
</template>
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
<script setup lang="ts">
|
|
94
|
-
import { ref } from 'vue';
|
|
95
|
-
import {
|
|
96
|
-
ConversationList,
|
|
97
|
-
Chat,
|
|
98
|
-
MessageList,
|
|
99
|
-
MessageInput,
|
|
100
|
-
ChatHeader,
|
|
101
|
-
ContactList,
|
|
102
|
-
ContactInfo,
|
|
103
|
-
UIKitProvider,
|
|
104
|
-
useLoginState,
|
|
105
|
-
} from '@tencentcloud/chat-uikit-vue3';
|
|
106
|
-
import { TUICallKit } from '@tencentcloud/call-uikit-vue';
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
const userID = ''; // TODO: Replace with your userID
|
|
110
|
-
const SDKAppID = 0; // TODO: Replace with your SDKAppID (Notice: SDKAppID is of type number)
|
|
111
|
-
const userSig = ''; // TODO: Replace with your userSig
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
const { login } = useLoginState();
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
const activeTab = ref<'conversations' | 'contacts'>('conversations');
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
login({
|
|
121
|
-
sdkAppId : SDKAppID,
|
|
122
|
-
userId: userID,
|
|
123
|
-
userSig: userSig,
|
|
124
|
-
})
|
|
125
|
-
.then(() => {})
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
.catch(() => {});
|
|
129
|
-
const handleSendMessage = () => {
|
|
130
|
-
activeTab.value = 'conversations';
|
|
131
|
-
}
|
|
132
|
-
</script>
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
<style>
|
|
136
|
-
#app{margin:0;padding:0;text-align:left;}.chat-layout{width:100vw;height:100vh;display:flex;}.sidebar{display:flex;flex-direction:column;border-right:1px solid #e5e7eb;}.tab-header{display:flex;border-bottom:1px solid #e5e7eb;}.tab-button{flex:1;padding:12px 16px;background:none;border:none;cursor:pointer;font-size:14px;color:#6b7280;transition:all 0.2s;}.tab-button.active{color:#3b82f6;background-color:#eff6ff;border-bottom:2px solid #3b82f6;}.tab-content{flex:1;overflow:hidden;}
|
|
137
|
-
</style>
|
|
138
|
-
```
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
## 2. Best Practice
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
The following components can be retrieved via MCP Tools get_component_detail ${componenetname.tolowercase()}.
|
|
145
|
-
The following state can be retrieved via MCP Tools get_state_detail ${statename.tolowercase()}.
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
### 2.1 Best Practice - Ordinary Integration
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
For ordinary integration, see the example code in section 1.3.
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
Focus
|
|
155
|
-
1. If you need to integrate the ChatSetting component, please read the ChatHeaderRight slot description in ChatHeader.
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
### 2.2 Best Practice - Integrated Chat Only
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
Integrated chat only is deemed as ordinary integration but only retains the Chat part. See the example code in section 1.3. However, it only retains components such as UIKitProvider, Chat, ChatHeader, MessageList, and MessageInput.
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
```vue
|
|
165
|
-
<template>
|
|
166
|
-
<UIKitProvider>
|
|
167
|
-
<Chat style="flex: 1;">
|
|
168
|
-
<ChatHeader />
|
|
169
|
-
<MessageList />
|
|
170
|
-
<MessageInput />
|
|
171
|
-
</Chat>
|
|
172
|
-
</UIKitProvider>
|
|
173
|
-
</template>
|
|
174
|
-
```
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
Focus
|
|
178
|
-
1. Since integrated chat only does not use ConversationList, you need to obtain activeConversation via useConversationListState from ConversationListState, then call setActiveConversation to set activeConversation.
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
```vue
|
|
184
|
-
<script setup lang="ts">
|
|
185
|
-
import { useConversationListState } from '@tencentcloud/chat-uikit-vue3';
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
const { setActiveConversation } = useConversationListState();
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
const conversationID = ref(''); // define by yourself
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
onMounted(() => {
|
|
195
|
-
setActiveConversation(conversationID.value);
|
|
196
|
-
});
|
|
197
|
-
</script>
|
|
198
|
-
```
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
Focus
|
|
202
|
-
2. If you need to integrate the ChatSetting component, please read the ChatHeaderRight slot description in ChatHeader.
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
### 2.3 Best Practice - Integrated Call Feature
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
Integrated call feature need to be added on the basis of standard integration or integrated chat only by adding call feature code.
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
Introduce TUICallKit
|
|
212
|
-
```vue
|
|
213
|
-
<script setup lang="ts">
|
|
214
|
-
import { TUICallKit } from '@tencentcloud/call-uikit-vue';
|
|
215
|
-
</script>
|
|
216
|
-
```
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
Add TUICallKit at the appropriate position:
|
|
220
|
-
```vue
|
|
221
|
-
<Teleport to="body">
|
|
222
|
-
<TUICallKit style="position: fixed; z-index: 1000;"/>
|
|
223
|
-
</Teleport>
|
|
224
|
-
```
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
Focus
|
|
228
|
-
1. Add a call button to the ChatHeaderRight slot in the ChatHeader component.
|
|
229
|
-
2. Click the call button to call the following method:
|
|
230
|
-
2.1 Read the ConversationListState document and judge whether the current value is a single chat or group chat via activeConversation.
|
|
231
|
-
2.2 If it is a one-to-one chat, import the TUICallKitService by `import { TUICallKitServer, TUICallType } from '@tencentcloud/call-uikit-vue'`. Initiate call using the `calls` method of TUICallKitService.
|
|
232
|
-
```ts
|
|
233
|
-
try {
|
|
234
|
-
await TUICallKitServer.calls({
|
|
235
|
-
userIDList: [activeConversation.value.userProfile.userID],
|
|
236
|
-
type: TUICallType.VIDEO_CALL, // or TUICallType.AUDIO_CALL
|
|
237
|
-
});
|
|
238
|
-
} catch (error: any) {
|
|
239
|
-
console.error(`[TUICallKit] Failed to call the groupCall API. Reason:${error}`);
|
|
240
|
-
}
|
|
241
|
-
```
|
|
242
|
-
2.3 If it is a group chat, read the UserPicker component document. It is advisable to combine it with the Dialog component and pop up the UserPicker component.
|
|
243
|
-
Read the GroupSettingState document, combine the `getGroupMemberList` and `allMembers` attributes of GroupSettingState to get the group member list.
|
|
244
|
-
```ts
|
|
245
|
-
try {
|
|
246
|
-
await TUICallKitServer.calls({
|
|
247
|
-
userIDList: selectedItems.map((item: any) => item.key),
|
|
248
|
-
type: TUICallType.VIDEO_CALL, // or TUICallType.AUDIO_CALL
|
|
249
|
-
});
|
|
250
|
-
} catch (error: any) {
|
|
251
|
-
console.error(`[TUICallKit] Failed to call the groupCall API. Reason:${error}`);
|
|
252
|
-
}
|
|
253
|
-
```
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
Recommendation: Combine the `reachEnd` event of UserPicker with paged pull for group members, and use a throttling function to control the call frequency of `getGroupMemberList`.
|
package/streamableHttp.js
DELETED
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
const express_1 = __importDefault(require("express"));
|
|
7
|
-
const streamableHttp_js_1 = require("@modelcontextprotocol/sdk/server/streamableHttp.js");
|
|
8
|
-
const server_js_1 = require("./server.js");
|
|
9
|
-
const app = (0, express_1.default)();
|
|
10
|
-
app.use(express_1.default.json());
|
|
11
|
-
const server = (0, server_js_1.createServer)();
|
|
12
|
-
const transport = new streamableHttp_js_1.StreamableHTTPServerTransport({
|
|
13
|
-
sessionIdGenerator: undefined, // set to undefined for stateless servers
|
|
14
|
-
});
|
|
15
|
-
// Setup routes for the server
|
|
16
|
-
const setupServer = async () => {
|
|
17
|
-
await server.connect(transport);
|
|
18
|
-
};
|
|
19
|
-
app.post('/mcp', async (req, res) => {
|
|
20
|
-
console.log('Received MCP request:', req.body);
|
|
21
|
-
try {
|
|
22
|
-
await transport.handleRequest(req, res, req.body);
|
|
23
|
-
}
|
|
24
|
-
catch (error) {
|
|
25
|
-
console.error('Error handling MCP request:', error);
|
|
26
|
-
if (!res.headersSent) {
|
|
27
|
-
res.status(500).json({
|
|
28
|
-
jsonrpc: '2.0',
|
|
29
|
-
error: {
|
|
30
|
-
code: -32603,
|
|
31
|
-
message: 'Internal server error',
|
|
32
|
-
},
|
|
33
|
-
id: null,
|
|
34
|
-
});
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
});
|
|
38
|
-
app.get('/mcp', async (req, res) => {
|
|
39
|
-
console.log('Received GET MCP request');
|
|
40
|
-
res.writeHead(405).end(JSON.stringify({
|
|
41
|
-
jsonrpc: "2.0",
|
|
42
|
-
error: {
|
|
43
|
-
code: -32000,
|
|
44
|
-
message: "Method not allowed."
|
|
45
|
-
},
|
|
46
|
-
id: null
|
|
47
|
-
}));
|
|
48
|
-
});
|
|
49
|
-
app.delete('/mcp', async (req, res) => {
|
|
50
|
-
console.log('Received DELETE MCP request');
|
|
51
|
-
res.writeHead(405).end(JSON.stringify({
|
|
52
|
-
jsonrpc: "2.0",
|
|
53
|
-
error: {
|
|
54
|
-
code: -32000,
|
|
55
|
-
message: "Method not allowed."
|
|
56
|
-
},
|
|
57
|
-
id: null
|
|
58
|
-
}));
|
|
59
|
-
});
|
|
60
|
-
// Start the server
|
|
61
|
-
const PORT = process.env.PORT || 3088;
|
|
62
|
-
setupServer().then(() => {
|
|
63
|
-
app.listen(PORT, (error) => {
|
|
64
|
-
if (error) {
|
|
65
|
-
console.error('Failed to start server:', error);
|
|
66
|
-
process.exit(1);
|
|
67
|
-
}
|
|
68
|
-
console.log(`Weather MCP Server listening on port ${PORT}`);
|
|
69
|
-
});
|
|
70
|
-
}).catch(error => {
|
|
71
|
-
console.error('Failed to set up the server:', error);
|
|
72
|
-
process.exit(1);
|
|
73
|
-
});
|
|
74
|
-
//# sourceMappingURL=streamableHttp.js.map
|
package/streamableHttp.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"streamableHttp.js","sourceRoot":"","sources":["../src/streamableHttp.ts"],"names":[],"mappings":";;;;;AAAA,sDAAqD;AAErD,0FAAmG;AACnG,2CAA2C;AAE3C,MAAM,GAAG,GAAG,IAAA,iBAAO,GAAE,CAAC;AACtB,GAAG,CAAC,GAAG,CAAC,iBAAO,CAAC,IAAI,EAAE,CAAC,CAAC;AAExB,MAAM,MAAM,GAAc,IAAA,wBAAY,GAAE,CAAC;AAEzC,MAAM,SAAS,GAAkC,IAAI,iDAA6B,CAAC;IACjF,kBAAkB,EAAE,SAAS,EAAE,yCAAyC;CACzE,CAAC,CAAC;AAEH,8BAA8B;AAC9B,MAAM,WAAW,GAAG,KAAK,IAAI,EAAE;IAC7B,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AAClC,CAAC,CAAC;AAEF,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,EAAE;IACrD,OAAO,CAAC,GAAG,CAAC,uBAAuB,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;IAC/C,IAAI,CAAC;QACD,MAAM,SAAS,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;IACtD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,KAAK,CAAC,CAAC;QACpD,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;YACrB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;gBACnB,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE;oBACL,IAAI,EAAE,CAAC,KAAK;oBACZ,OAAO,EAAE,uBAAuB;iBACjC;gBACD,EAAE,EAAE,IAAI;aACT,CAAC,CAAC;QACL,CAAC;IACH,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,EAAE;IACpD,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;IACxC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;QACpC,OAAO,EAAE,KAAK;QACd,KAAK,EAAE;YACL,IAAI,EAAE,CAAC,KAAK;YACZ,OAAO,EAAE,qBAAqB;SAC/B;QACD,EAAE,EAAE,IAAI;KACT,CAAC,CAAC,CAAC;AACN,CAAC,CAAC,CAAC;AAEH,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,EAAE;IACvD,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;IAC3C,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;QACpC,OAAO,EAAE,KAAK;QACd,KAAK,EAAE;YACL,IAAI,EAAE,CAAC,KAAK;YACZ,OAAO,EAAE,qBAAqB;SAC/B;QACD,EAAE,EAAE,IAAI;KACT,CAAC,CAAC,CAAC;AACN,CAAC,CAAC,CAAC;AAEH,mBAAmB;AACnB,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC;AACtC,WAAW,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;IACtB,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE;QACzB,IAAI,KAAK,EAAE,CAAC;YACV,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC;YAChD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,wCAAwC,IAAI,EAAE,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;IACf,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,KAAK,CAAC,CAAC;IACrD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
import { z } from 'zod';
|
|
2
|
-
import { getDocContent } from '../../utils/get-doc-content.js';
|
|
3
|
-
import { aegisClient } from '../../utils/aegis-client.js';
|
|
4
|
-
const description = `
|
|
5
|
-
|
|
6
|
-
This is a tool specifically designed for creating native mobile audio and video call applications. With the tool, you can achieve the following functions: | 这是一个专门负责创建移动端 native 音视频通话应用的工具,通过工具您可以实现以下功能:\n
|
|
7
|
-
1. Create a native audio and video calling app with functionality and UI similar to the audio and video calling capabilities in WeChat or WeChat for Business. | 1. 创建一个 native 音视频通话应用,功能和 UI 界面类似微信(WeChat)或者企业微信(企微)中音视频通话能力 \n
|
|
8
|
-
2. The tool provides Call UIKit component integration solutions for multiple platforms or frameworks, including flutter (cross-platform), android (native), and ios (native). You can choose one of these platforms or frameworks to build a mobile native audio and video call project. | 2. 工具提供 flutter(跨平台)、android(原生)、ios(原生) 多种平台或框架的 Call UIKit 组件集成方案,您可以根据需要选择其中一个平台或框架搭建一个移动端 native 音视频通话项目 \n
|
|
9
|
-
3. If no specific platform or framework is specified, to implement the function, you must first use the tools tool present_framework_choice to display the framework type selection interface | 3. 在没有指定特定平台或框架的情况下,要实现功能,必须优先使用 tools 工具 present_framework_choice 展示选择框架类型界面 \n
|
|
10
|
-
`;
|
|
11
|
-
function getResultText(params) {
|
|
12
|
-
const { sdkAppId = '', framework = '' } = params;
|
|
13
|
-
aegisClient.report({
|
|
14
|
-
name: 'get_native_call_uikit_integration_guide',
|
|
15
|
-
ext1: sdkAppId,
|
|
16
|
-
ext2: framework,
|
|
17
|
-
from: 'en',
|
|
18
|
-
});
|
|
19
|
-
return getDocContent(['tuicallkit', `${framework}`]);
|
|
20
|
-
}
|
|
21
|
-
const registryGetNativeCallIntegrationGuideTool = (mcpServer) => {
|
|
22
|
-
mcpServer.tool('get_native_call_uikit_integration_guide', description, {
|
|
23
|
-
framework: z.enum(['flutter', 'android', 'ios']).describe('The platform type of the native call UIKit component library. You first need to choose which platform to use to create your chat application. Currently supported frameworks are: Flutter, Android, and iOS. | native call uikit 组件库的平台类型,您首先需要选择使用哪一种来平台来创建您的聊天应用,目前支持的框架有:flutter, android, ios。'),
|
|
24
|
-
sdkAppId: z.string().describe(`Your application's SDKAppID. | 您的应用的 SDKAppID。`),
|
|
25
|
-
secretKey: z.string().describe(`The secretKey of your SDKAppID. |您的 SDKAppID 的 secretKey。`),
|
|
26
|
-
}, (params) => ({
|
|
27
|
-
content: [
|
|
28
|
-
{
|
|
29
|
-
type: 'text',
|
|
30
|
-
text: getResultText(params),
|
|
31
|
-
}
|
|
32
|
-
]
|
|
33
|
-
}));
|
|
34
|
-
};
|
|
35
|
-
export { registryGetNativeCallIntegrationGuideTool };
|
|
36
|
-
//# sourceMappingURL=get-native-call-integration-guide.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"get-native-call-integration-guide.js","sourceRoot":"","sources":["../../../src/tools/call/get-native-call-integration-guide.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAE1D,MAAM,WAAW,GAAG;;;;;;CAMnB,CAAC;AAEF,SAAS,aAAa,CAAC,MAA2B;IAChD,MAAM,EAAE,QAAQ,GAAG,EAAE,EAAG,SAAS,GAAG,EAAE,EAAE,GAAG,MAAM,CAAC;IAClD,WAAW,CAAC,MAAM,CAAC;QACjB,IAAI,EAAE,yCAAyC;QAC/C,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,SAAS;QACf,IAAI,EAAE,IAAI;KACX,CAAC,CAAC;IACH,OAAO,aAAa,CAAC,CAAC,YAAY,EAAE,GAAG,SAAS,EAAE,CAAC,CAAC,CAAC;AACvD,CAAC;AAED,MAAM,yCAAyC,GAAG,CAAC,SAAoB,EAAE,EAAE;IACzE,SAAS,CAAC,IAAI,CACZ,yCAAyC,EACzC,WAAW,EACX;QACE,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,oSAAoS,CAAC;QAC/V,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gDAAgD,CAAC;QAC/E,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,2DAA2D,CAAC;KAC5F,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QACd,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC;aAC5B;SACF;KACF,CAAC,CAAC,CAAC;AACR,CAAC,CAAC;AACF,OAAO,EAAE,yCAAyC,EAAE,CAAC"}
|