@ndscnj/roomkit-web-vue3 25.12.24162 → 25.12.24164

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.
@@ -1,2 +1,6 @@
1
- declare const _default: import('vue').DefineComponent<{}, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
1
+ declare const _default: import('vue').DefineComponent<{}, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
2
+ "show-overlay": (...args: any[]) => void;
3
+ }, string, import('vue').PublicProps, Readonly<{}> & Readonly<{
4
+ "onShow-overlay"?: ((...args: any[]) => any) | undefined;
5
+ }>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
2
6
  export default _default;
@@ -1,7 +1,7 @@
1
1
  import _sfc_main from "./MoreControlH5.vue2.mjs";
2
2
  /* empty css */
3
3
  import _export_sfc from "../../../_virtual/_plugin-vue_export-helper.mjs";
4
- const MoreControlH5 = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-70cfb5f8"]]);
4
+ const MoreControlH5 = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-c413959d"]]);
5
5
  export {
6
6
  MoreControlH5 as default
7
7
  };
@@ -1,72 +1,102 @@
1
- import { defineComponent, createElementBlock, createCommentVNode, unref, openBlock, createVNode, createElementVNode, withCtx } from "vue";
2
- import _imports_0 from "../../../assets/imgs/vote-icon.png.mjs";
1
+ import { defineComponent, ref, onMounted, onUnmounted, createElementBlock, openBlock, createCommentVNode, unref, withDirectives, createBlock, withCtx, createVNode, createElementVNode, createTextVNode, toDisplayString } from "vue";
2
+ import { IconExtension } from "@tencentcloud/uikit-base-component-vue3";
3
3
  import IconButton from "../../common/base/IconButton.vue.mjs";
4
- import { IconChat } from "@tencentcloud/uikit-base-component-vue3";
5
- import { useBasicStore } from "../../../stores/basic.mjs";
6
- import { useChatStore } from "../../../stores/chat.mjs";
7
- import { storeToRefs } from "pinia";
8
- import { useI18n } from "../../../locales/index.mjs";
9
- import TuiBadge from "../../common/base/Badge.vue.mjs";
4
+ import useControl from "./useMoreControlHooks.mjs";
5
+ import _sfc_main$1 from "../ChatControl.vue.mjs";
6
+ import InviteControl from "../InviteControl.vue.mjs";
7
+ import ContactControl from "../ContactControl.vue.mjs";
8
+ import { useRoomStore } from "../../../stores/room.mjs";
9
+ import bus from "../../../hooks/useMitt.mjs";
10
+ import vTap from "../../../directives/vTap.mjs";
10
11
  import "../../../services/main.mjs";
11
12
  import { roomService } from "../../../services/roomService.mjs";
13
+ import "../../../locales/index.mjs";
12
14
  import "@tencentcloud/tuiroom-engine-js";
13
15
  import "../../../utils/environment.mjs";
14
16
  import "mitt";
15
17
  import "../../../services/manager/roomActionManager.mjs";
16
18
  import "@tencentcloud/tui-core";
17
- import { MetricsKey } from "../../../services/manager/dataReportManager.mjs";
18
19
  const _hoisted_1 = {
19
20
  key: 0,
20
- class: "vote-control-container"
21
+ class: "more-control-container"
21
22
  };
23
+ const _hoisted_2 = { class: "control-compent" };
24
+ const _hoisted_3 = { class: "close" };
22
25
  const _sfc_main = /* @__PURE__ */ defineComponent({
23
26
  __name: "MoreControlH5",
24
- setup(__props) {
25
- const { t } = useI18n();
26
- const chatControlConfig = roomService.getComponentConfig("MoreControl");
27
- const basicStore = useBasicStore();
28
- const chatStore = useChatStore();
29
- const { sidebarName } = storeToRefs(basicStore);
30
- async function toggleChatSidebar() {
31
- if (basicStore.isSidebarOpen && basicStore.sidebarName === "vote") {
32
- basicStore.setSidebarOpenStatus(false);
33
- basicStore.setSidebarName("");
34
- return;
27
+ emits: ["show-overlay"],
28
+ setup(__props, { emit: __emit }) {
29
+ const moreControlConfig = roomService.getComponentConfig("MoreControl");
30
+ const showMoreContent = ref(false);
31
+ const moreContentRef = ref();
32
+ const { t, sidebarName } = useControl();
33
+ const roomStore = useRoomStore();
34
+ const emit = __emit;
35
+ function showMore() {
36
+ showMoreContent.value = true;
37
+ }
38
+ function handleCancelControl() {
39
+ showMoreContent.value = false;
40
+ }
41
+ function handleControlClick(name) {
42
+ bus.emit("experience-communication", name);
43
+ }
44
+ function handleShowOverlay(data) {
45
+ showMoreContent.value = false;
46
+ emit("show-overlay", data);
47
+ }
48
+ function handleDocumentClick(event) {
49
+ if (showMoreContent.value && !moreContentRef.value.contains(event.target)) {
50
+ showMoreContent.value = false;
35
51
  }
36
- basicStore.setSidebarOpenStatus(true);
37
- basicStore.setSidebarName("vote");
38
- chatStore.updateUnReadCount(0);
39
- roomService.dataReportManager.reportCount(MetricsKey.openChat);
40
- roomService.trackingManager.sendMessage("experience-vote");
41
52
  }
53
+ onMounted(() => {
54
+ document == null ? void 0 : document.addEventListener("click", handleDocumentClick, true);
55
+ });
56
+ onUnmounted(() => {
57
+ document == null ? void 0 : document.removeEventListener("click", handleDocumentClick, true);
58
+ });
42
59
  return (_ctx, _cache) => {
43
- return unref(chatControlConfig).visible ? (openBlock(), createElementBlock("div", _hoisted_1, [
44
- createVNode(TuiBadge, {
45
- hidden: unref(chatStore).unReadCount === 0,
46
- value: unref(chatStore).unReadCount,
47
- max: 10
48
- }, {
49
- default: withCtx(() => [
50
- createVNode(IconButton, {
51
- title: unref(t)("Vote"),
52
- "is-active": unref(sidebarName) === "vote",
53
- onClickIcon: toggleChatSidebar
54
- }, {
55
- default: withCtx(() => [
56
- createVNode(unref(IconChat), { size: "24" })
57
- ]),
58
- _: 1
59
- }, 8, ["title", "is-active"])
60
+ return openBlock(), createElementBlock("div", null, [
61
+ unref(moreControlConfig).visible ? (openBlock(), createElementBlock("div", _hoisted_1, [
62
+ withDirectives((openBlock(), createBlock(IconButton, {
63
+ "is-active": unref(sidebarName) === "more",
64
+ title: unref(t)("More")
65
+ }, {
66
+ default: withCtx(() => [
67
+ createVNode(unref(IconExtension), { size: "24" })
68
+ ]),
69
+ _: 1
70
+ }, 8, ["is-active", "title"])), [
71
+ [unref(vTap), showMore]
72
+ ])
73
+ ])) : createCommentVNode("", true),
74
+ showMoreContent.value ? (openBlock(), createElementBlock("div", {
75
+ key: 1,
76
+ ref_key: "moreContentRef",
77
+ ref: moreContentRef,
78
+ class: "show-more-content"
79
+ }, [
80
+ createElementVNode("div", _hoisted_2, [
81
+ unref(roomStore).isSpeakAfterTakingSeatMode ? (openBlock(), createBlock(_sfc_main$1, {
82
+ key: 0,
83
+ onClick: _cache[0] || (_cache[0] = ($event) => handleControlClick("chatControl"))
84
+ })) : createCommentVNode("", true),
85
+ createVNode(ContactControl, {
86
+ onClick: _cache[1] || (_cache[1] = ($event) => handleControlClick("contactControl"))
87
+ }),
88
+ createVNode(InviteControl, {
89
+ onShowOverlay: handleShowOverlay,
90
+ onClick: _cache[2] || (_cache[2] = ($event) => handleControlClick("inviteControl"))
91
+ })
60
92
  ]),
61
- _: 1
62
- }, 8, ["hidden", "value"]),
63
- _cache[0] || (_cache[0] = createElementVNode("img", {
64
- class: "ndsc-img-box",
65
- src: _imports_0,
66
- alt: "",
67
- click: "toggleChatSidebar"
68
- }, null, -1))
69
- ])) : createCommentVNode("", true);
93
+ withDirectives((openBlock(), createElementBlock("div", _hoisted_3, [
94
+ createTextVNode(toDisplayString(unref(t)("Cancel")), 1)
95
+ ])), [
96
+ [unref(vTap), handleCancelControl]
97
+ ])
98
+ ], 512)) : createCommentVNode("", true)
99
+ ]);
70
100
  };
71
101
  }
72
102
  });
@@ -1,4 +1,8 @@
1
- declare const MoreControl: import('vue').DefineComponent<{}, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any> | import('vue').DefineComponent<{}, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
1
+ declare const MoreControl: import('vue').DefineComponent<{}, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
2
+ "show-overlay": (...args: any[]) => void;
3
+ }, string, import('vue').PublicProps, Readonly<{}> & Readonly<{
4
+ "onShow-overlay"?: ((...args: any[]) => any) | undefined;
5
+ }>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any> | import('vue').DefineComponent<{}, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
2
6
  "on-vote": (...args: any[]) => void;
3
7
  }, string, import('vue').PublicProps, Readonly<{}> & Readonly<{
4
8
  "onOn-vote"?: ((...args: any[]) => any) | undefined;
@@ -1,7 +1,7 @@
1
1
  import _sfc_main from "./indexH5.vue2.mjs";
2
2
  /* empty css */
3
3
  import _export_sfc from "../../../_virtual/_plugin-vue_export-helper.mjs";
4
- const indexH5 = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-253a50f0"]]);
4
+ const indexH5 = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-4905d960"]]);
5
5
  export {
6
6
  indexH5 as default
7
7
  };
@@ -16,6 +16,7 @@ declare function enterRoom(options: {
16
16
  declare function resetStore(): void;
17
17
  declare function __VLS_template(): {
18
18
  content?(_: {}): any;
19
+ contentH5?(_: {}): any;
19
20
  };
20
21
  declare const __VLS_component: import('vue').DefineComponent<import('vue').ExtractPropTypes<__VLS_WithDefaults<__VLS_TypePropsToRuntimeProps<{
21
22
  displayMode: "permanent" | "wake-up";
@@ -2,7 +2,7 @@ import _sfc_main from "./conference.vue2.mjs";
2
2
  /* empty css */
3
3
  /* empty css */
4
4
  import _export_sfc from "./_virtual/_plugin-vue_export-helper.mjs";
5
- const ConferenceMainView = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-4dd66a12"]]);
5
+ const ConferenceMainView = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-14e58a3b"]]);
6
6
  export {
7
7
  ConferenceMainView as default
8
8
  };
@@ -278,6 +278,9 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
278
278
  content: withCtx(() => [
279
279
  renderSlot(_ctx.$slots, "content", {}, void 0, true)
280
280
  ]),
281
+ contentH5: withCtx(() => [
282
+ renderSlot(_ctx.$slots, "contentH5", {}, void 0, true)
283
+ ]),
281
284
  _: 3
282
285
  }, 512), [
283
286
  [vShow, unref(showRoomTool)]
package/es/index.mjs CHANGED
@@ -3664,7 +3664,7 @@ to {
3664
3664
  .tool-box .tool-box-item[data-v-34681937]:hover {
3665
3665
  border-radius: 8px;
3666
3666
  background-color: var(--list-color-hover);
3667
- }.footer-container[data-v-253a50f0] {
3667
+ }.footer-container[data-v-4905d960] {
3668
3668
  position: absolute;
3669
3669
  bottom: 0;
3670
3670
  display: flex;
@@ -3928,9 +3928,44 @@ to {
3928
3928
  }
3929
3929
  .footer .mirror-container .mirror-text[data-v-21a63691] {
3930
3930
  margin-left: 4px;
3931
- }.ndsc-img-box[data-v-70cfb5f8] {
3932
- width: 50px;
3933
- height: 50px;
3931
+ }.show-more-content[data-v-c413959d] {
3932
+ position: absolute;
3933
+ bottom: 15px;
3934
+ left: 5%;
3935
+ width: 90%;
3936
+ height: 17vh;
3937
+ padding: 10px;
3938
+ border-radius: 13px;
3939
+ animation-name: popup-c413959d;
3940
+ animation-duration: 200ms;
3941
+ background-color: var(--bg-color-operate);
3942
+ }
3943
+ @keyframes popup-c413959d {
3944
+ from {
3945
+ bottom: 0;
3946
+ }
3947
+ to {
3948
+ bottom: 15px;
3949
+ }
3950
+ }
3951
+ .control-compent[data-v-c413959d] {
3952
+ display: flex;
3953
+ }
3954
+ .close[data-v-c413959d] {
3955
+ position: relative;
3956
+ top: 10%;
3957
+ display: flex;
3958
+ align-items: center;
3959
+ justify-content: center;
3960
+ width: 100%;
3961
+ padding: 10px;
3962
+ font-style: normal;
3963
+ font-weight: 400;
3964
+ line-height: 24px;
3965
+ text-align: center;
3966
+ border-radius: 8px;
3967
+ color: var(--text-color-primary);
3968
+ background-color: var(--button-color-secondary-default);
3934
3969
  }.ndsc-img-box[data-v-50420946] {
3935
3970
  width: 50px;
3936
3971
  height: 50px;
@@ -9136,7 +9171,7 @@ body, html {
9136
9171
  }
9137
9172
  .tui-room :not([class|=el]) {
9138
9173
  transition: background-color 0.3s, color 0.3s, box-shadow 0.3s;
9139
- }.tui-room[data-v-4dd66a12] {
9174
+ }.tui-room[data-v-14e58a3b] {
9140
9175
  position: relative;
9141
9176
  display: flex;
9142
9177
  flex-direction: column;
@@ -9148,7 +9183,7 @@ body, html {
9148
9183
  text-align: left;
9149
9184
  background-color: var(--bg-color-topbar);
9150
9185
  }
9151
- .tui-room .header[data-v-4dd66a12] {
9186
+ .tui-room .header[data-v-14e58a3b] {
9152
9187
  position: absolute;
9153
9188
  top: 0;
9154
9189
  left: 0;
@@ -9159,20 +9194,20 @@ body, html {
9159
9194
  border-bottom: 1px solid var(--stroke-color-primary);
9160
9195
  box-shadow: 0 1px 0 var(--uikit-color-black-8);
9161
9196
  }
9162
- .tui-room .content[data-v-4dd66a12] {
9197
+ .tui-room .content[data-v-14e58a3b] {
9163
9198
  position: absolute;
9164
9199
  top: 0;
9165
9200
  width: 100%;
9166
9201
  height: 100%;
9167
9202
  background-color: var(--bg-color-topbar);
9168
9203
  }
9169
- .tui-room.tui-room-h5[data-v-4dd66a12] {
9204
+ .tui-room.tui-room-h5[data-v-14e58a3b] {
9170
9205
  width: 100%;
9171
9206
  min-width: 350px;
9172
9207
  height: 100%;
9173
9208
  min-height: 525px;
9174
9209
  }
9175
- #roomContainer.chat-room[data-v-4dd66a12] {
9210
+ #roomContainer.chat-room[data-v-14e58a3b] {
9176
9211
  position: absolute;
9177
9212
  top: 0;
9178
9213
  right: 0;
@@ -9184,8 +9219,8 @@ body, html {
9184
9219
  margin: auto;
9185
9220
  border-radius: 10px;
9186
9221
  }
9187
- #roomContainer.tui-room-h5[data-v-4dd66a12],
9188
- #roomContainer .chat-room[data-v-4dd66a12] {
9222
+ #roomContainer.tui-room-h5[data-v-14e58a3b],
9223
+ #roomContainer .chat-room[data-v-14e58a3b] {
9189
9224
  width: 100%;
9190
9225
  height: 100%;
9191
9226
  }.user-info-container[data-v-9e9aff53] {
@@ -1,2 +1,6 @@
1
- declare const _default: import('vue').DefineComponent<{}, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
1
+ declare const _default: import('vue').DefineComponent<{}, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
2
+ "show-overlay": (...args: any[]) => void;
3
+ }, string, import('vue').PublicProps, Readonly<{}> & Readonly<{
4
+ "onShow-overlay"?: ((...args: any[]) => any) | undefined;
5
+ }>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
2
6
  export default _default;
@@ -3,5 +3,5 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
3
3
  const MoreControlH5_vue_vue_type_script_setup_true_lang = require("./MoreControlH5.vue2.js");
4
4
  ;/* empty css */
5
5
  const _pluginVue_exportHelper = require("../../../_virtual/_plugin-vue_export-helper.js");
6
- const MoreControlH5 = /* @__PURE__ */ _pluginVue_exportHelper.default(MoreControlH5_vue_vue_type_script_setup_true_lang.default, [["__scopeId", "data-v-70cfb5f8"]]);
6
+ const MoreControlH5 = /* @__PURE__ */ _pluginVue_exportHelper.default(MoreControlH5_vue_vue_type_script_setup_true_lang.default, [["__scopeId", "data-v-c413959d"]]);
7
7
  exports.default = MoreControlH5;
@@ -1,74 +1,104 @@
1
1
  "use strict";
2
2
  Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
3
3
  const Vue = require("vue");
4
- const voteIcon = require("../../../assets/imgs/vote-icon.png.js");
5
- const IconButton = require("../../common/base/IconButton.vue.js");
6
4
  const uikitBaseComponentVue3 = require("@tencentcloud/uikit-base-component-vue3");
7
- const basic = require("../../../stores/basic.js");
8
- const chat = require("../../../stores/chat.js");
9
- const pinia = require("pinia");
10
- const index = require("../../../locales/index.js");
11
- const Badge = require("../../common/base/Badge.vue.js");
5
+ const IconButton = require("../../common/base/IconButton.vue.js");
6
+ const useMoreControlHooks = require("./useMoreControlHooks.js");
7
+ const ChatControl_vue_vue_type_script_setup_true_lang = require("../ChatControl.vue.js");
8
+ const InviteControl = require("../InviteControl.vue.js");
9
+ const ContactControl = require("../ContactControl.vue.js");
10
+ const room = require("../../../stores/room.js");
11
+ const useMitt = require("../../../hooks/useMitt.js");
12
+ const vTap = require("../../../directives/vTap.js");
12
13
  require("../../../services/main.js");
13
14
  const roomService = require("../../../services/roomService.js");
15
+ require("../../../locales/index.js");
14
16
  require("@tencentcloud/tuiroom-engine-js");
15
17
  require("../../../utils/environment.js");
16
18
  require("mitt");
17
19
  require("../../../services/manager/roomActionManager.js");
18
20
  require("@tencentcloud/tui-core");
19
- const dataReportManager = require("../../../services/manager/dataReportManager.js");
20
21
  const _hoisted_1 = {
21
22
  key: 0,
22
- class: "vote-control-container"
23
+ class: "more-control-container"
23
24
  };
25
+ const _hoisted_2 = { class: "control-compent" };
26
+ const _hoisted_3 = { class: "close" };
24
27
  const _sfc_main = /* @__PURE__ */ Vue.defineComponent({
25
28
  __name: "MoreControlH5",
26
- setup(__props) {
27
- const { t } = index.useI18n();
28
- const chatControlConfig = roomService.roomService.getComponentConfig("MoreControl");
29
- const basicStore = basic.useBasicStore();
30
- const chatStore = chat.useChatStore();
31
- const { sidebarName } = pinia.storeToRefs(basicStore);
32
- async function toggleChatSidebar() {
33
- if (basicStore.isSidebarOpen && basicStore.sidebarName === "vote") {
34
- basicStore.setSidebarOpenStatus(false);
35
- basicStore.setSidebarName("");
36
- return;
29
+ emits: ["show-overlay"],
30
+ setup(__props, { emit: __emit }) {
31
+ const moreControlConfig = roomService.roomService.getComponentConfig("MoreControl");
32
+ const showMoreContent = Vue.ref(false);
33
+ const moreContentRef = Vue.ref();
34
+ const { t, sidebarName } = useMoreControlHooks.default();
35
+ const roomStore = room.useRoomStore();
36
+ const emit = __emit;
37
+ function showMore() {
38
+ showMoreContent.value = true;
39
+ }
40
+ function handleCancelControl() {
41
+ showMoreContent.value = false;
42
+ }
43
+ function handleControlClick(name) {
44
+ useMitt.default.emit("experience-communication", name);
45
+ }
46
+ function handleShowOverlay(data) {
47
+ showMoreContent.value = false;
48
+ emit("show-overlay", data);
49
+ }
50
+ function handleDocumentClick(event) {
51
+ if (showMoreContent.value && !moreContentRef.value.contains(event.target)) {
52
+ showMoreContent.value = false;
37
53
  }
38
- basicStore.setSidebarOpenStatus(true);
39
- basicStore.setSidebarName("vote");
40
- chatStore.updateUnReadCount(0);
41
- roomService.roomService.dataReportManager.reportCount(dataReportManager.MetricsKey.openChat);
42
- roomService.roomService.trackingManager.sendMessage("experience-vote");
43
54
  }
55
+ Vue.onMounted(() => {
56
+ document == null ? void 0 : document.addEventListener("click", handleDocumentClick, true);
57
+ });
58
+ Vue.onUnmounted(() => {
59
+ document == null ? void 0 : document.removeEventListener("click", handleDocumentClick, true);
60
+ });
44
61
  return (_ctx, _cache) => {
45
- return Vue.unref(chatControlConfig).visible ? (Vue.openBlock(), Vue.createElementBlock("div", _hoisted_1, [
46
- Vue.createVNode(Badge.default, {
47
- hidden: Vue.unref(chatStore).unReadCount === 0,
48
- value: Vue.unref(chatStore).unReadCount,
49
- max: 10
50
- }, {
51
- default: Vue.withCtx(() => [
52
- Vue.createVNode(IconButton.default, {
53
- title: Vue.unref(t)("Vote"),
54
- "is-active": Vue.unref(sidebarName) === "vote",
55
- onClickIcon: toggleChatSidebar
56
- }, {
57
- default: Vue.withCtx(() => [
58
- Vue.createVNode(Vue.unref(uikitBaseComponentVue3.IconChat), { size: "24" })
59
- ]),
60
- _: 1
61
- }, 8, ["title", "is-active"])
62
+ return Vue.openBlock(), Vue.createElementBlock("div", null, [
63
+ Vue.unref(moreControlConfig).visible ? (Vue.openBlock(), Vue.createElementBlock("div", _hoisted_1, [
64
+ Vue.withDirectives((Vue.openBlock(), Vue.createBlock(IconButton.default, {
65
+ "is-active": Vue.unref(sidebarName) === "more",
66
+ title: Vue.unref(t)("More")
67
+ }, {
68
+ default: Vue.withCtx(() => [
69
+ Vue.createVNode(Vue.unref(uikitBaseComponentVue3.IconExtension), { size: "24" })
70
+ ]),
71
+ _: 1
72
+ }, 8, ["is-active", "title"])), [
73
+ [Vue.unref(vTap.default), showMore]
74
+ ])
75
+ ])) : Vue.createCommentVNode("", true),
76
+ showMoreContent.value ? (Vue.openBlock(), Vue.createElementBlock("div", {
77
+ key: 1,
78
+ ref_key: "moreContentRef",
79
+ ref: moreContentRef,
80
+ class: "show-more-content"
81
+ }, [
82
+ Vue.createElementVNode("div", _hoisted_2, [
83
+ Vue.unref(roomStore).isSpeakAfterTakingSeatMode ? (Vue.openBlock(), Vue.createBlock(ChatControl_vue_vue_type_script_setup_true_lang.default, {
84
+ key: 0,
85
+ onClick: _cache[0] || (_cache[0] = ($event) => handleControlClick("chatControl"))
86
+ })) : Vue.createCommentVNode("", true),
87
+ Vue.createVNode(ContactControl.default, {
88
+ onClick: _cache[1] || (_cache[1] = ($event) => handleControlClick("contactControl"))
89
+ }),
90
+ Vue.createVNode(InviteControl.default, {
91
+ onShowOverlay: handleShowOverlay,
92
+ onClick: _cache[2] || (_cache[2] = ($event) => handleControlClick("inviteControl"))
93
+ })
62
94
  ]),
63
- _: 1
64
- }, 8, ["hidden", "value"]),
65
- _cache[0] || (_cache[0] = Vue.createElementVNode("img", {
66
- class: "ndsc-img-box",
67
- src: voteIcon.default,
68
- alt: "",
69
- click: "toggleChatSidebar"
70
- }, null, -1))
71
- ])) : Vue.createCommentVNode("", true);
95
+ Vue.withDirectives((Vue.openBlock(), Vue.createElementBlock("div", _hoisted_3, [
96
+ Vue.createTextVNode(Vue.toDisplayString(Vue.unref(t)("Cancel")), 1)
97
+ ])), [
98
+ [Vue.unref(vTap.default), handleCancelControl]
99
+ ])
100
+ ], 512)) : Vue.createCommentVNode("", true)
101
+ ]);
72
102
  };
73
103
  }
74
104
  });
@@ -1,4 +1,8 @@
1
- declare const MoreControl: import('vue').DefineComponent<{}, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any> | import('vue').DefineComponent<{}, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
1
+ declare const MoreControl: import('vue').DefineComponent<{}, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
2
+ "show-overlay": (...args: any[]) => void;
3
+ }, string, import('vue').PublicProps, Readonly<{}> & Readonly<{
4
+ "onShow-overlay"?: ((...args: any[]) => any) | undefined;
5
+ }>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any> | import('vue').DefineComponent<{}, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
2
6
  "on-vote": (...args: any[]) => void;
3
7
  }, string, import('vue').PublicProps, Readonly<{}> & Readonly<{
4
8
  "onOn-vote"?: ((...args: any[]) => any) | undefined;
@@ -3,5 +3,5 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
3
3
  const indexH5_vue_vue_type_script_setup_true_lang = ;/* empty css */
4
4
  ;/* empty css */
5
5
  const _pluginVue_exportHelper = require("../../../_virtual/_plugin-vue_export-helper.js");
6
- const indexH5 = /* @__PURE__ */ _pluginVue_exportHelper.default(indexH5_vue_vue_type_script_setup_true_lang.default, [["__scopeId", "data-v-253a50f0"]]);
6
+ const indexH5 = /* @__PURE__ */ _pluginVue_exportHelper.default(indexH5_vue_vue_type_script_setup_true_lang.default, [["__scopeId", "data-v-4905d960"]]);
7
7
  exports.default = indexH5;
@@ -16,6 +16,7 @@ declare function enterRoom(options: {
16
16
  declare function resetStore(): void;
17
17
  declare function __VLS_template(): {
18
18
  content?(_: {}): any;
19
+ contentH5?(_: {}): any;
19
20
  };
20
21
  declare const __VLS_component: import('vue').DefineComponent<import('vue').ExtractPropTypes<__VLS_WithDefaults<__VLS_TypePropsToRuntimeProps<{
21
22
  displayMode: "permanent" | "wake-up";
@@ -4,5 +4,5 @@ const conference_vue_vue_type_script_setup_true_lang = require("./conference.vue
4
4
  ;/* empty css */
5
5
  ;/* empty css */
6
6
  const _pluginVue_exportHelper = require("./_virtual/_plugin-vue_export-helper.js");
7
- const ConferenceMainView = /* @__PURE__ */ _pluginVue_exportHelper.default(conference_vue_vue_type_script_setup_true_lang.default, [["__scopeId", "data-v-4dd66a12"]]);
7
+ const ConferenceMainView = /* @__PURE__ */ _pluginVue_exportHelper.default(conference_vue_vue_type_script_setup_true_lang.default, [["__scopeId", "data-v-14e58a3b"]]);
8
8
  exports.default = ConferenceMainView;
@@ -280,6 +280,9 @@ const _sfc_main = /* @__PURE__ */ Vue.defineComponent({
280
280
  content: Vue.withCtx(() => [
281
281
  Vue.renderSlot(_ctx.$slots, "content", {}, void 0, true)
282
282
  ]),
283
+ contentH5: Vue.withCtx(() => [
284
+ Vue.renderSlot(_ctx.$slots, "contentH5", {}, void 0, true)
285
+ ]),
283
286
  _: 3
284
287
  }, 512), [
285
288
  [Vue.vShow, Vue.unref(showRoomTool)]
package/lib/index.js CHANGED
@@ -3664,7 +3664,7 @@ to {
3664
3664
  .tool-box .tool-box-item[data-v-34681937]:hover {
3665
3665
  border-radius: 8px;
3666
3666
  background-color: var(--list-color-hover);
3667
- }.footer-container[data-v-253a50f0] {
3667
+ }.footer-container[data-v-4905d960] {
3668
3668
  position: absolute;
3669
3669
  bottom: 0;
3670
3670
  display: flex;
@@ -3928,9 +3928,44 @@ to {
3928
3928
  }
3929
3929
  .footer .mirror-container .mirror-text[data-v-21a63691] {
3930
3930
  margin-left: 4px;
3931
- }.ndsc-img-box[data-v-70cfb5f8] {
3932
- width: 50px;
3933
- height: 50px;
3931
+ }.show-more-content[data-v-c413959d] {
3932
+ position: absolute;
3933
+ bottom: 15px;
3934
+ left: 5%;
3935
+ width: 90%;
3936
+ height: 17vh;
3937
+ padding: 10px;
3938
+ border-radius: 13px;
3939
+ animation-name: popup-c413959d;
3940
+ animation-duration: 200ms;
3941
+ background-color: var(--bg-color-operate);
3942
+ }
3943
+ @keyframes popup-c413959d {
3944
+ from {
3945
+ bottom: 0;
3946
+ }
3947
+ to {
3948
+ bottom: 15px;
3949
+ }
3950
+ }
3951
+ .control-compent[data-v-c413959d] {
3952
+ display: flex;
3953
+ }
3954
+ .close[data-v-c413959d] {
3955
+ position: relative;
3956
+ top: 10%;
3957
+ display: flex;
3958
+ align-items: center;
3959
+ justify-content: center;
3960
+ width: 100%;
3961
+ padding: 10px;
3962
+ font-style: normal;
3963
+ font-weight: 400;
3964
+ line-height: 24px;
3965
+ text-align: center;
3966
+ border-radius: 8px;
3967
+ color: var(--text-color-primary);
3968
+ background-color: var(--button-color-secondary-default);
3934
3969
  }.ndsc-img-box[data-v-50420946] {
3935
3970
  width: 50px;
3936
3971
  height: 50px;
@@ -9136,7 +9171,7 @@ body, html {
9136
9171
  }
9137
9172
  .tui-room :not([class|=el]) {
9138
9173
  transition: background-color 0.3s, color 0.3s, box-shadow 0.3s;
9139
- }.tui-room[data-v-4dd66a12] {
9174
+ }.tui-room[data-v-14e58a3b] {
9140
9175
  position: relative;
9141
9176
  display: flex;
9142
9177
  flex-direction: column;
@@ -9148,7 +9183,7 @@ body, html {
9148
9183
  text-align: left;
9149
9184
  background-color: var(--bg-color-topbar);
9150
9185
  }
9151
- .tui-room .header[data-v-4dd66a12] {
9186
+ .tui-room .header[data-v-14e58a3b] {
9152
9187
  position: absolute;
9153
9188
  top: 0;
9154
9189
  left: 0;
@@ -9159,20 +9194,20 @@ body, html {
9159
9194
  border-bottom: 1px solid var(--stroke-color-primary);
9160
9195
  box-shadow: 0 1px 0 var(--uikit-color-black-8);
9161
9196
  }
9162
- .tui-room .content[data-v-4dd66a12] {
9197
+ .tui-room .content[data-v-14e58a3b] {
9163
9198
  position: absolute;
9164
9199
  top: 0;
9165
9200
  width: 100%;
9166
9201
  height: 100%;
9167
9202
  background-color: var(--bg-color-topbar);
9168
9203
  }
9169
- .tui-room.tui-room-h5[data-v-4dd66a12] {
9204
+ .tui-room.tui-room-h5[data-v-14e58a3b] {
9170
9205
  width: 100%;
9171
9206
  min-width: 350px;
9172
9207
  height: 100%;
9173
9208
  min-height: 525px;
9174
9209
  }
9175
- #roomContainer.chat-room[data-v-4dd66a12] {
9210
+ #roomContainer.chat-room[data-v-14e58a3b] {
9176
9211
  position: absolute;
9177
9212
  top: 0;
9178
9213
  right: 0;
@@ -9184,8 +9219,8 @@ body, html {
9184
9219
  margin: auto;
9185
9220
  border-radius: 10px;
9186
9221
  }
9187
- #roomContainer.tui-room-h5[data-v-4dd66a12],
9188
- #roomContainer .chat-room[data-v-4dd66a12] {
9222
+ #roomContainer.tui-room-h5[data-v-14e58a3b],
9223
+ #roomContainer .chat-room[data-v-14e58a3b] {
9189
9224
  width: 100%;
9190
9225
  height: 100%;
9191
9226
  }.user-info-container[data-v-9e9aff53] {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ndscnj/roomkit-web-vue3",
3
- "version": "25.12.24162",
3
+ "version": "25.12.24164",
4
4
  "main": "./lib/index.js",
5
5
  "module": "./es/index.mjs",
6
6
  "types": "./es/index.d.ts",
@@ -1,53 +1,122 @@
1
1
  <template>
2
- <div v-if="chatControlConfig.visible" class="vote-control-container">
3
- <tui-badge
4
- :hidden="chatStore.unReadCount === 0"
5
- :value="chatStore.unReadCount"
6
- :max="10"
7
- >
2
+ <div>
3
+ <div v-if="moreControlConfig.visible" class="more-control-container">
8
4
  <icon-button
9
- :title="t('Vote')"
10
- :is-active="sidebarName === 'vote'"
11
- @click-icon="toggleChatSidebar"
5
+ v-tap="showMore"
6
+ :is-active="sidebarName === 'more'"
7
+ :title="t('More')"
12
8
  >
13
- <IconChat size="24" />
9
+ <IconExtension size="24" />
14
10
  </icon-button>
15
- </tui-badge>
16
- <img class="ndsc-img-box" src="../../../assets/imgs/vote-icon.png" alt="" click="toggleChatSidebar"/>
11
+ </div>
12
+ <div v-if="showMoreContent" ref="moreContentRef" class="show-more-content">
13
+ <div class="control-compent">
14
+ <chat-control
15
+ v-if="roomStore.isSpeakAfterTakingSeatMode"
16
+ @click="handleControlClick('chatControl')"
17
+ />
18
+ <contact-control @click="handleControlClick('contactControl')" />
19
+ <invite-control
20
+ @show-overlay="handleShowOverlay"
21
+ @click="handleControlClick('inviteControl')"
22
+ />
23
+ </div>
24
+ <div v-tap="handleCancelControl" class="close">{{ t('Cancel') }}</div>
25
+ </div>
17
26
  </div>
18
27
  </template>
19
-
20
28
  <script setup lang="ts">
29
+ import { ref, onMounted, onUnmounted, defineEmits } from 'vue';
30
+ import { IconExtension } from '@tencentcloud/uikit-base-component-vue3';
21
31
  import IconButton from '../../common/base/IconButton.vue';
22
- import { IconChat } from '@tencentcloud/uikit-base-component-vue3';
23
- import { useBasicStore } from '../../../stores/basic';
24
- import { useChatStore } from '../../../stores/chat';
25
- import { storeToRefs } from 'pinia';
26
- import { useI18n } from '../../../locales';
27
- import TuiBadge from '../../common/base/Badge.vue';
28
- import { roomService, MetricsKey } from '../../../services';
29
- const { t } = useI18n();
30
- const chatControlConfig = roomService.getComponentConfig('MoreControl');
31
- const basicStore = useBasicStore();
32
- const chatStore = useChatStore();
33
- const { sidebarName } = storeToRefs(basicStore);
34
-
35
- async function toggleChatSidebar() {
36
- if (basicStore.isSidebarOpen && basicStore.sidebarName === 'vote') {
37
- basicStore.setSidebarOpenStatus(false);
38
- basicStore.setSidebarName('');
39
- return;
32
+ import userMoreControl from './useMoreControlHooks';
33
+ import ChatControl from '../ChatControl.vue';
34
+ import InviteControl from '../InviteControl.vue';
35
+ import ContactControl from '../ContactControl.vue';
36
+ import { useRoomStore } from '../../../stores/room';
37
+ import bus from '../../../hooks/useMitt';
38
+ import vTap from '../../../directives/vTap';
39
+ import { roomService } from '../../../services';
40
+
41
+ const moreControlConfig = roomService.getComponentConfig('MoreControl');
42
+ const showMoreContent = ref(false);
43
+ const moreContentRef = ref();
44
+
45
+ const { t, sidebarName } = userMoreControl();
46
+ const roomStore = useRoomStore();
47
+ const emit = defineEmits(['show-overlay']);
48
+ function showMore() {
49
+ showMoreContent.value = true;
50
+ }
51
+
52
+ function handleCancelControl() {
53
+ showMoreContent.value = false;
54
+ }
55
+ function handleControlClick(name: string) {
56
+ bus.emit('experience-communication', name);
57
+ }
58
+
59
+ function handleShowOverlay(data: { name: string; visible: boolean }) {
60
+ showMoreContent.value = false;
61
+ emit('show-overlay', data);
62
+ }
63
+
64
+ function handleDocumentClick(event: MouseEvent) {
65
+ if (showMoreContent.value && !moreContentRef.value.contains(event.target)) {
66
+ showMoreContent.value = false;
40
67
  }
41
- basicStore.setSidebarOpenStatus(true);
42
- basicStore.setSidebarName('vote');
43
- chatStore.updateUnReadCount(0);
44
- roomService.dataReportManager.reportCount(MetricsKey.openChat);
45
- roomService.trackingManager.sendMessage('experience-vote');
46
68
  }
69
+
70
+ onMounted(() => {
71
+ document?.addEventListener('click', handleDocumentClick, true);
72
+ });
73
+
74
+ onUnmounted(() => {
75
+ document?.removeEventListener('click', handleDocumentClick, true);
76
+ });
47
77
  </script>
48
78
  <style lang="scss" scoped>
49
- .ndsc-img-box{
50
- width: 50px;
51
- height: 50px
79
+ .show-more-content {
80
+ position: absolute;
81
+ bottom: 15px;
82
+ left: 5%;
83
+ width: 90%;
84
+ height: 17vh;
85
+ padding: 10px;
86
+ border-radius: 13px;
87
+ animation-name: popup;
88
+ animation-duration: 200ms;
89
+ background-color: var(--bg-color-operate);
90
+ }
91
+
92
+ @keyframes popup {
93
+ from {
94
+ bottom: 0;
95
+ }
96
+
97
+ to {
98
+ bottom: 15px;
99
+ }
100
+ }
101
+
102
+ .control-compent {
103
+ display: flex;
104
+ }
105
+
106
+ .close {
107
+ position: relative;
108
+ top: 10%;
109
+ display: flex;
110
+ align-items: center;
111
+ justify-content: center;
112
+ width: 100%;
113
+ padding: 10px;
114
+ font-style: normal;
115
+ font-weight: 400;
116
+ line-height: 24px;
117
+ text-align: center;
118
+ border-radius: 8px;
119
+ color: var(--text-color-primary);
120
+ background-color: var(--button-color-secondary-default);
52
121
  }
53
122
  </style>
@@ -47,7 +47,6 @@ import ChatControl from '../ChatControl.vue';
47
47
  import MasterApplyControl from '../ManageStageControl.vue';
48
48
  import MemberApplyControl from '../ApplyControl/MemberApplyControl.vue';
49
49
  import MoreControl from '../MoreControl/index';
50
- import VoteControl from '../VoteControl/index.ts';
51
50
  import AIControl from '../AIControl.vue';
52
51
  import bus from '../../../hooks/useMitt';
53
52
  import vTap from '../../../directives/vTap';
@@ -57,6 +56,7 @@ import useRoomFooter from './useRoomFooterHooks';
57
56
  const { roomStore, isMaster, isAdmin, isAudience } = useRoomFooter();
58
57
 
59
58
  const emit = defineEmits(['show-overlay']);
59
+
60
60
  function handleControlClick(name: string) {
61
61
  bus.emit('experience-communication', name);
62
62
  }
@@ -21,11 +21,14 @@
21
21
  <template #content>
22
22
  <slot name="content"></slot>
23
23
  </template>
24
+ <template #contentH5>
25
+ <slot name="contentH5"></slot>
26
+ </template>
24
27
  </room-footer>
25
28
  <room-sidebar @on-vote="onVote">
26
29
  <template #content>
27
- <slot name="content"></slot>
28
- </template>
30
+ <slot name="content"></slot>
31
+ </template>
29
32
  </room-sidebar>
30
33
  <room-setting />
31
34
  <room-overlay />