@icvdeveloper/common-module 1.4.13 → 2.0.0
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/CHANGELOG.md +4 -0
- package/dist/module.json +1 -1
- package/dist/module.mjs +10 -0
- package/dist/runtime/@types/components.d.ts +22 -0
- package/dist/runtime/@types/configVariables.d.ts +6 -0
- package/dist/runtime/analytics.d.ts +1 -1
- package/dist/runtime/assets/scss/index.css +0 -705
- package/dist/runtime/assets/svg/icon-minus.svg +6 -0
- package/dist/runtime/assets/svg/icon-video.svg +6 -0
- package/dist/runtime/components/affiliates/AffiliateModal.vue +66 -0
- package/dist/runtime/components/affiliates/AffiliatePage.vue +337 -132
- package/dist/runtime/components/agenda/AgendaTabbed.vue +43 -34
- package/dist/runtime/components/agenda/components/Calendar.vue +8 -3
- package/dist/runtime/components/agenda/components/Favorite.vue +44 -0
- package/dist/runtime/components/agenda/components/PlayIcon.vue +1 -1
- package/dist/runtime/components/agenda/components/PresentationLink.vue +26 -15
- package/dist/runtime/components/chat/ChatConversationList.vue +108 -0
- package/dist/runtime/components/chat/ChatCreateConversation.vue +205 -0
- package/dist/runtime/components/chat/ChatCreateGroupConversation.vue +159 -0
- package/dist/runtime/components/chat/ChatHeader.vue +98 -0
- package/dist/runtime/components/chat/ChatMessage.vue +40 -0
- package/dist/runtime/components/chat/ChatShowConversation.vue +77 -0
- package/dist/runtime/components/chat/ChatWidget.vue +65 -0
- package/dist/runtime/components/chat/ChatWindow.vue +211 -0
- package/dist/runtime/components/chat/ChatWindow.vue.d.ts +6 -0
- package/dist/runtime/components/chat/MessageInput.vue +30 -0
- package/dist/runtime/components/chat/SearchInput.vue +32 -0
- package/dist/runtime/components/core/Accordion.vue +1 -1
- package/dist/runtime/components/core/AttendeeList.vue +25 -16
- package/dist/runtime/components/core/CountdownTimer.vue +1 -1
- package/dist/runtime/components/core/Modal.vue +21 -13
- package/dist/runtime/components/core/ModalButton.vue +43 -0
- package/dist/runtime/components/core/Navbar.vue +3 -3
- package/dist/runtime/components/core/Navigation.vue +293 -0
- package/dist/runtime/components/core/SvgIcon.vue +31 -1
- package/dist/runtime/components/core/VButton.vue +41 -0
- package/dist/runtime/components/core/ZoomModal.vue +1 -1
- package/dist/runtime/components/events/ListEvents.vue +3 -4
- package/dist/runtime/components/forms/CheckboxGroup.vue +46 -0
- package/dist/runtime/components/forms/ErrorField.vue +11 -2
- package/dist/runtime/components/forms/RadioGroup.vue +50 -0
- package/dist/runtime/components/forms/SelectDropDown.vue +47 -0
- package/dist/runtime/components/forms/SupportForm.vue +6 -6
- package/dist/runtime/components/layouts/Accordion.vue +2 -2
- package/dist/runtime/components/media/ArchivePlayerAndContentContainer.vue +20 -4
- package/dist/runtime/components/media/ArchiveVideoPlayer.vue +14 -6
- package/dist/runtime/components/media/WebcastVideoPlayer.vue +1 -1
- package/dist/runtime/components/media/components/ArchiveMediaContainer.vue +8 -8
- package/dist/runtime/components/media/components/CeCreditNotification.vue +2 -2
- package/dist/runtime/components/media/components/ContentArea.vue +51 -14
- package/dist/runtime/components/media/components/ContentTabs.vue +2 -2
- package/dist/runtime/components/media/components/DocumentsPanel.vue +2 -2
- package/dist/runtime/components/media/components/MediaContainer.vue +3 -7
- package/dist/runtime/components/media/components/PresentersPanel.vue +69 -50
- package/dist/runtime/components/media/components/SessionReporting.vue +5 -4
- package/dist/runtime/components/media/components/SponsorsPanel.vue +3 -3
- package/dist/runtime/components/presenters/PresenterListing.vue +30 -20
- package/dist/runtime/components/presenters/PresenterModal.vue +26 -21
- package/dist/runtime/components/presenters/Presenters.vue +139 -0
- package/dist/runtime/components/profile/Profile.vue +10 -6
- package/dist/runtime/components/profile/components/Sidebar.vue +1 -1
- package/dist/runtime/components/profile/components/SidebarNavItem.vue +1 -1
- package/dist/runtime/components/profile/tabs/Favorites.vue +5 -4
- package/dist/runtime/components/profile/tabs/GeneralInformation.vue +26 -16
- package/dist/runtime/components/registration/AlreadyRegisteredModal.vue +99 -0
- package/dist/runtime/components/registration/PaymentForm.vue +136 -0
- package/dist/runtime/components/registration/RegistrationForm.vue +417 -0
- package/dist/runtime/components/registration/RegistrationGroupSelect.vue +142 -0
- package/dist/runtime/components/registration/StripePaymentForm.vue +141 -0
- package/dist/runtime/composables/useAgenda.d.ts +12 -0
- package/dist/runtime/composables/useAgenda.mjs +101 -10
- package/dist/runtime/composables/useAuth.mjs +1 -1
- package/dist/runtime/composables/useConferenceHelpers.d.ts +5 -1
- package/dist/runtime/composables/useConferenceHelpers.mjs +15 -1
- package/dist/runtime/composables/useEventHooks.d.ts +26 -0
- package/dist/runtime/composables/useEventHooks.mjs +21 -0
- package/dist/runtime/composables/useEvents.d.ts +17 -1
- package/dist/runtime/composables/useEvents.mjs +29 -1
- package/dist/runtime/composables/useLogin.mjs +7 -3
- package/dist/runtime/composables/usePresentation.mjs +1 -1
- package/dist/runtime/composables/usePusher.d.ts +4 -0
- package/dist/runtime/composables/usePusher.mjs +38 -26
- package/dist/runtime/composables/useStream.mjs +7 -1
- package/dist/runtime/enums/general.d.ts +4 -1
- package/dist/runtime/enums/general.mjs +4 -1
- package/dist/runtime/models/authUser.d.ts +1 -0
- package/dist/runtime/models/conference.d.ts +14 -0
- package/dist/runtime/models/conversation.d.ts +2 -4
- package/dist/runtime/models/globalConfig.d.ts +6 -2
- package/dist/runtime/models/group.d.ts +32 -2
- package/dist/runtime/models/icons.d.ts +7 -0
- package/dist/runtime/models/templateConfig.d.ts +6 -0
- package/dist/runtime/models/user.d.ts +1 -0
- package/dist/runtime/models/virtualPagesConfig.d.ts +335 -0
- package/dist/runtime/models/virtualPagesConfig.mjs +0 -0
- package/dist/runtime/plugin.mjs +11 -1
- package/dist/runtime/store/affiliates.d.ts +3 -0
- package/dist/runtime/store/affiliates.mjs +38 -0
- package/dist/runtime/store/auth.mjs +6 -0
- package/dist/runtime/store/conferences.d.ts +3 -1
- package/dist/runtime/store/conferences.mjs +7 -2
- package/dist/runtime/store/conversations.d.ts +4040 -10
- package/dist/runtime/store/conversations.mjs +255 -22
- package/dist/runtime/store/modalPlayerConfig.d.ts +498 -0
- package/dist/runtime/store/modalPlayerConfig.mjs +58 -0
- package/dist/runtime/store/templateConfigs.d.ts +3 -2
- package/dist/runtime/store/templateConfigs.mjs +2 -1
- package/package.json +5 -2
- package/dist/runtime/components/media/components/PresentersPanel.vue.d.ts +0 -32
|
@@ -0,0 +1,293 @@
|
|
|
1
|
+
<script lang="ts" setup>
|
|
2
|
+
import { ref, toRefs, computed } from "vue";
|
|
3
|
+
import { storeToRefs } from "pinia";
|
|
4
|
+
import { useRoute } from "vue-router";
|
|
5
|
+
import { usePresenters } from '../../composables';
|
|
6
|
+
import { useNavigation } from "../../composables/useNavigation";
|
|
7
|
+
import { useAuth } from "../../composables";
|
|
8
|
+
import { useConferenceHelpers } from "../../composables";
|
|
9
|
+
import { useClassBinding } from "../../composables/useClassBinding";
|
|
10
|
+
import {
|
|
11
|
+
useTemplateConfigsStore,
|
|
12
|
+
useNavigationConfigStore,
|
|
13
|
+
useConferencesStore,
|
|
14
|
+
useAuthStore
|
|
15
|
+
} from "../../store";
|
|
16
|
+
import {
|
|
17
|
+
modalContentEventHook,
|
|
18
|
+
setIsPlayerVisibleEventHook,
|
|
19
|
+
setIsProfileVisibleEventHook,
|
|
20
|
+
setPlayerConferenceEventHook,
|
|
21
|
+
setPlayerPresentationEventHook
|
|
22
|
+
} from "../../composables/useEventHooks";
|
|
23
|
+
import type { Ref } from 'vue';
|
|
24
|
+
import type { PlayerPresentation } from "../../store/modalPlayerConfig";
|
|
25
|
+
import type { NavigationClassObj } from '../../@types/components';
|
|
26
|
+
import type { Conference } from "../../models/conference";
|
|
27
|
+
import type { ContentData } from "./VButton.vue";
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
type Props = {
|
|
31
|
+
classObject?: NavigationClassObj;
|
|
32
|
+
isVirtual?: boolean;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
const props = withDefaults(defineProps<Props>(), {
|
|
36
|
+
classObject: () => {
|
|
37
|
+
return {
|
|
38
|
+
container: '',
|
|
39
|
+
headerToggleContainer: '',
|
|
40
|
+
toggleContainer: '',
|
|
41
|
+
toggleButton: '',
|
|
42
|
+
svgElement: '',
|
|
43
|
+
menuContainer: '',
|
|
44
|
+
navElement: '',
|
|
45
|
+
listElement: '',
|
|
46
|
+
liveEventLink: '',
|
|
47
|
+
eventOverviewLink: '',
|
|
48
|
+
agendaAnchorLink: '',
|
|
49
|
+
presentersAnchorLink: '',
|
|
50
|
+
navigationItemLink: '',
|
|
51
|
+
attendeeListListItem: '',
|
|
52
|
+
attendeeListLink: '',
|
|
53
|
+
logOutListItem: '',
|
|
54
|
+
logOutLink: '',
|
|
55
|
+
profileLink: '',
|
|
56
|
+
profileImg: '',
|
|
57
|
+
loginListItem: '',
|
|
58
|
+
}
|
|
59
|
+
},
|
|
60
|
+
isVirtual: false
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
const { classObject, isVirtual } = toRefs(props);
|
|
64
|
+
const { user, isLoggedIn } = storeToRefs(useAuthStore());
|
|
65
|
+
const { currentConference } = storeToRefs(useConferencesStore());
|
|
66
|
+
|
|
67
|
+
// data
|
|
68
|
+
const showAttendeeList = ref<boolean>(false);
|
|
69
|
+
const showMenu = ref<boolean>(false);
|
|
70
|
+
const profileImg = 'https://v3plus-production.s3.us-west-2.amazonaws.com/users/profile.png';
|
|
71
|
+
|
|
72
|
+
// methods
|
|
73
|
+
const { formatLink, isExternalLink } = useNavigation();
|
|
74
|
+
const { isLoginDisabled } = useAuth();
|
|
75
|
+
const { classBinding } = useClassBinding();
|
|
76
|
+
|
|
77
|
+
const { logout } = useAuthStore();
|
|
78
|
+
const { globalConfigValue } = useTemplateConfigsStore();
|
|
79
|
+
const { getEnabled } = useNavigationConfigStore();
|
|
80
|
+
|
|
81
|
+
const { getPresentersLabel } = usePresenters(currentConference as Ref<Conference>);
|
|
82
|
+
|
|
83
|
+
const route = useRoute();
|
|
84
|
+
|
|
85
|
+
const toggleMenu = () => {
|
|
86
|
+
showMenu.value = !showMenu.value;
|
|
87
|
+
};
|
|
88
|
+
|
|
89
|
+
// computed
|
|
90
|
+
const navigationItems = computed(() => {
|
|
91
|
+
return getEnabled();
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
const htmlHeader = computed(() => {
|
|
95
|
+
return globalConfigValue("html_header");
|
|
96
|
+
});
|
|
97
|
+
|
|
98
|
+
const isVideoEnabled = computed(() => {
|
|
99
|
+
return globalConfigValue("enable_video_chat");
|
|
100
|
+
});
|
|
101
|
+
|
|
102
|
+
const hideUserProfile = computed(() => {
|
|
103
|
+
return globalConfigValue("hide_user_profile");
|
|
104
|
+
});
|
|
105
|
+
|
|
106
|
+
// methods
|
|
107
|
+
const emitLoginModal = (): void => {
|
|
108
|
+
const modalContent: ContentData = {};
|
|
109
|
+
modalContent.contentType = 'registration';
|
|
110
|
+
modalContentEventHook.trigger(modalContent);
|
|
111
|
+
};
|
|
112
|
+
|
|
113
|
+
const emitStreamTest = (): void => {
|
|
114
|
+
const streamPres: PlayerPresentation = {
|
|
115
|
+
player_type: 'live',
|
|
116
|
+
data: {
|
|
117
|
+
id: 0,
|
|
118
|
+
access: true,
|
|
119
|
+
name: 'Stream Test',
|
|
120
|
+
description: 'This is a test stream. Please confirm you can see the video and can hear the audio clearly prior to the event.',
|
|
121
|
+
is_live: true,
|
|
122
|
+
video_url: '',
|
|
123
|
+
track: {
|
|
124
|
+
channel: 'stream-test'
|
|
125
|
+
}
|
|
126
|
+
}};
|
|
127
|
+
setPlayerPresentationEventHook.trigger(streamPres);
|
|
128
|
+
setPlayerConferenceEventHook.trigger(currentConference);
|
|
129
|
+
setIsPlayerVisibleEventHook.trigger(true);
|
|
130
|
+
};
|
|
131
|
+
</script>
|
|
132
|
+
|
|
133
|
+
<template>
|
|
134
|
+
<div
|
|
135
|
+
:class="
|
|
136
|
+
classBinding(
|
|
137
|
+
classObject,
|
|
138
|
+
'container',
|
|
139
|
+
'flex-1 md:items-end lg:flex flex-row justify-between max-w-screen-xl mx-auto bg-white'
|
|
140
|
+
)
|
|
141
|
+
"
|
|
142
|
+
>
|
|
143
|
+
<div :class="classBinding(classObject, 'headerToggleContainer', 'flex-1 flex flex-row justify-between')">
|
|
144
|
+
<!-- adjust -->
|
|
145
|
+
<span
|
|
146
|
+
v-if="htmlHeader && htmlHeader.length"
|
|
147
|
+
v-html="htmlHeader"
|
|
148
|
+
/>
|
|
149
|
+
<div :class="classBinding(classObject, 'toggleContainer', 'md:hidden shrink items-center self-center p-2')">
|
|
150
|
+
<button
|
|
151
|
+
:class="classBinding(classObject, 'toggleButton', 'flex items-center px-3 py-2')"
|
|
152
|
+
@click="toggleMenu"
|
|
153
|
+
>
|
|
154
|
+
<svg
|
|
155
|
+
:class="classBinding(classObject, 'svgElement', 'fill-current h-6 w-6')"
|
|
156
|
+
viewBox="0 0 20 20"
|
|
157
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
158
|
+
>
|
|
159
|
+
<title>Menu</title>
|
|
160
|
+
<path d="M0 3h20v2H0V3zm0 6h20v2H0V9zm0 6h20v2H0v-2z" />
|
|
161
|
+
</svg>
|
|
162
|
+
</button>
|
|
163
|
+
</div>
|
|
164
|
+
</div>
|
|
165
|
+
|
|
166
|
+
<div :class="classBinding(classObject, 'menuContainer', 'flex-1 flex md:flex-initial')">
|
|
167
|
+
<nav
|
|
168
|
+
:class="[showMenu ? 'flex' : 'hidden', classBinding(classObject, 'navElement', 'header w-full md:block md:w-auto md:flex-1')]"
|
|
169
|
+
>
|
|
170
|
+
<ul
|
|
171
|
+
:class="classBinding(classObject, 'listElement', 'self-center mx-auto allsmallcaps text-xs leading-tight text-center md:max-h-min md:h-full md:float-right')"
|
|
172
|
+
>
|
|
173
|
+
<li
|
|
174
|
+
v-if="
|
|
175
|
+
currentConference &&
|
|
176
|
+
currentConference.agenda_enabled &&
|
|
177
|
+
route.name === 'events-id'
|
|
178
|
+
"
|
|
179
|
+
>
|
|
180
|
+
<a
|
|
181
|
+
href="#agenda"
|
|
182
|
+
:class="classBinding(classObject, 'agendaAnchorLink', 'nav-link')"
|
|
183
|
+
>Agenda</a>
|
|
184
|
+
</li>
|
|
185
|
+
<li v-if="currentConference && route.name === 'events-id'">
|
|
186
|
+
<a
|
|
187
|
+
href="#presenters"
|
|
188
|
+
:class="classBinding(classObject, 'presentersAnchorLink', 'nav-link')"
|
|
189
|
+
>
|
|
190
|
+
{{ getPresentersLabel(2) }}
|
|
191
|
+
</a>
|
|
192
|
+
</li>
|
|
193
|
+
<template
|
|
194
|
+
v-for="(item, index) in navigationItems"
|
|
195
|
+
:key="index"
|
|
196
|
+
>
|
|
197
|
+
<li>
|
|
198
|
+
<template v-if="!isExternalLink(item)">
|
|
199
|
+
<nuxt-link
|
|
200
|
+
v-if="isVirtual && item.slug == 'stream-test'"
|
|
201
|
+
:class="['cursor-pointer', classBinding(classObject, 'navigationItemLink', 'nav-link')]"
|
|
202
|
+
@click.enter="emitStreamTest"
|
|
203
|
+
>
|
|
204
|
+
{{ item.label }}
|
|
205
|
+
</nuxt-link>
|
|
206
|
+
<nuxt-link
|
|
207
|
+
v-else
|
|
208
|
+
:to="formatLink(item)"
|
|
209
|
+
exact
|
|
210
|
+
:class="classBinding(classObject, 'navigationItemLink', 'nav-link')"
|
|
211
|
+
@click.enter="toggleMenu"
|
|
212
|
+
>
|
|
213
|
+
{{ item.label }}
|
|
214
|
+
</nuxt-link>
|
|
215
|
+
</template>
|
|
216
|
+
<a
|
|
217
|
+
v-else
|
|
218
|
+
:href="formatLink(item)"
|
|
219
|
+
:target="isExternalLink(item) ? '_blank' : ''"
|
|
220
|
+
@click.enter="toggleMenu"
|
|
221
|
+
>
|
|
222
|
+
{{ item.label }}
|
|
223
|
+
</a>
|
|
224
|
+
</li>
|
|
225
|
+
</template>
|
|
226
|
+
<template v-if="!isLoginDisabled">
|
|
227
|
+
<template v-if="isLoggedIn">
|
|
228
|
+
<li :class="classBinding(classObject, 'logOutListItem', 'md:inline-block')">
|
|
229
|
+
<a
|
|
230
|
+
:class="classBinding(classObject, 'logOutLink', 'block md:inline-block w-auto md:w-full text-center cursor-pointer')"
|
|
231
|
+
@click="logout"
|
|
232
|
+
>Log Out</a>
|
|
233
|
+
</li>
|
|
234
|
+
<li
|
|
235
|
+
v-if="user != null && user.token && !hideUserProfile"
|
|
236
|
+
:class="classBinding(classObject, 'profileLink', 'inline-block')"
|
|
237
|
+
>
|
|
238
|
+
<a @click="setIsProfileVisibleEventHook.trigger(true)">
|
|
239
|
+
<img
|
|
240
|
+
:class="classBinding(classObject, 'profileImg', 'cursor-pointer rounded-full')"
|
|
241
|
+
height="30"
|
|
242
|
+
width="30"
|
|
243
|
+
:src="user?.profile_image as string ?? profileImg"
|
|
244
|
+
alt=""
|
|
245
|
+
>
|
|
246
|
+
</a>
|
|
247
|
+
</li>
|
|
248
|
+
</template>
|
|
249
|
+
<template v-if="!isLoggedIn">
|
|
250
|
+
<li :class="classBinding(classObject, 'loginListItem', 'block md:inline-block')">
|
|
251
|
+
<template v-if="!isVirtual">
|
|
252
|
+
<nuxt-link
|
|
253
|
+
to="/login"
|
|
254
|
+
exact
|
|
255
|
+
>
|
|
256
|
+
Log In
|
|
257
|
+
</nuxt-link>
|
|
258
|
+
</template>
|
|
259
|
+
<template v-else>
|
|
260
|
+
<a @click="emitLoginModal()" class="cursor-pointer">Log In</a>
|
|
261
|
+
</template>
|
|
262
|
+
</li>
|
|
263
|
+
</template>
|
|
264
|
+
</template>
|
|
265
|
+
</ul>
|
|
266
|
+
</nav>
|
|
267
|
+
</div>
|
|
268
|
+
</div>
|
|
269
|
+
</template>
|
|
270
|
+
|
|
271
|
+
<style>
|
|
272
|
+
nav.header ul li {
|
|
273
|
+
@apply border-2 border-transparent text-black cursor-pointer py-1 md:inline-block md:ml-8;
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
nav.header ul li:hover {
|
|
277
|
+
@apply border-b-black;
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
nav.header ul li a.nav-link,
|
|
281
|
+
nav.header ul li a.nav-link:hover {
|
|
282
|
+
@apply cursor-pointer text-black;
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
nav.header ul li.nav-li-color {
|
|
286
|
+
@apply text-red-500;
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
nav.header ul li.nav-li-color a.nav-link,
|
|
290
|
+
nav.header ul li.nav-li-color a.nav-link:hover {
|
|
291
|
+
@apply text-red-500;
|
|
292
|
+
}
|
|
293
|
+
</style>
|
|
@@ -8,12 +8,24 @@ import { useClassBinding } from "../../composables/useClassBinding";
|
|
|
8
8
|
* Delay importing only the icon file that we need
|
|
9
9
|
*/
|
|
10
10
|
const icons: Icons = {
|
|
11
|
+
bell: {
|
|
12
|
+
color: "#000",
|
|
13
|
+
component: defineAsyncComponent(
|
|
14
|
+
() => import("../../assets/svg/bell-icon.svg")
|
|
15
|
+
),
|
|
16
|
+
},
|
|
11
17
|
caret: {
|
|
12
18
|
color: "#000",
|
|
13
19
|
component: defineAsyncComponent(
|
|
14
20
|
() => import("../../assets/svg/icon-caret.svg")
|
|
15
21
|
),
|
|
16
22
|
},
|
|
23
|
+
chat: {
|
|
24
|
+
color: "#000",
|
|
25
|
+
component: defineAsyncComponent(
|
|
26
|
+
() => import("../../assets/svg/chat-icon.svg")
|
|
27
|
+
),
|
|
28
|
+
},
|
|
17
29
|
check: {
|
|
18
30
|
color: "#000",
|
|
19
31
|
component: defineAsyncComponent(
|
|
@@ -80,12 +92,24 @@ const icons: Icons = {
|
|
|
80
92
|
() => import("../../assets/svg/icon-linkedin.svg")
|
|
81
93
|
),
|
|
82
94
|
},
|
|
95
|
+
minus: {
|
|
96
|
+
color: "#000",
|
|
97
|
+
component: defineAsyncComponent(
|
|
98
|
+
() => import("../../assets/svg/icon-minus.svg")
|
|
99
|
+
),
|
|
100
|
+
},
|
|
83
101
|
newwindow: {
|
|
84
102
|
color: "#333",
|
|
85
103
|
component: defineAsyncComponent(
|
|
86
104
|
() => import("../../assets/svg/icon-new-window.svg")
|
|
87
105
|
),
|
|
88
106
|
},
|
|
107
|
+
notification: {
|
|
108
|
+
color: "#22c55e",
|
|
109
|
+
component: defineAsyncComponent(
|
|
110
|
+
() => import("../../assets/svg/notification-icon.svg")
|
|
111
|
+
),
|
|
112
|
+
},
|
|
89
113
|
offline: {
|
|
90
114
|
color: "#696665",
|
|
91
115
|
component: defineAsyncComponent(
|
|
@@ -116,6 +140,12 @@ const icons: Icons = {
|
|
|
116
140
|
() => import("../../assets/svg/icon-twitter.svg")
|
|
117
141
|
),
|
|
118
142
|
},
|
|
143
|
+
video: {
|
|
144
|
+
color: "#FFF",
|
|
145
|
+
component: defineAsyncComponent(
|
|
146
|
+
() => import("../../assets/svg/icon-video.svg")
|
|
147
|
+
),
|
|
148
|
+
},
|
|
119
149
|
website: {
|
|
120
150
|
color: "#4286f4",
|
|
121
151
|
component: defineAsyncComponent(
|
|
@@ -188,7 +218,7 @@ const iconComponent = computed(() => {
|
|
|
188
218
|
</script>
|
|
189
219
|
|
|
190
220
|
<template>
|
|
191
|
-
<div :style="iconDims">
|
|
221
|
+
<div :style="iconDims" :class="classBinding(classObject, 'container', '')">
|
|
192
222
|
<component
|
|
193
223
|
:is="iconComponent"
|
|
194
224
|
:style="iconStyle"
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
<script lang="ts" setup>
|
|
2
|
+
import { toRefs } from "vue";
|
|
3
|
+
import { modalContentEventHook } from "../../composables/useEventHooks";
|
|
4
|
+
export type ContentData = {
|
|
5
|
+
contentObj?: {};
|
|
6
|
+
contentArray?: [];
|
|
7
|
+
contentString?: string;
|
|
8
|
+
contentType?: string;
|
|
9
|
+
modalSize?: number;
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
const props = withDefaults(defineProps<ContentData>(), {
|
|
13
|
+
contentObj: () => { return {} },
|
|
14
|
+
contentArray: () => { return [] },
|
|
15
|
+
contentString: '',
|
|
16
|
+
contentType: '',
|
|
17
|
+
modalSize: 50
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
const { contentObj, contentArray, contentString, contentType, modalSize } = toRefs(props);
|
|
21
|
+
|
|
22
|
+
// methods
|
|
23
|
+
const emitContent = (): void => {
|
|
24
|
+
// only emit if there's something to emit
|
|
25
|
+
if (contentType.value.length > 0) {
|
|
26
|
+
modalContentEventHook.trigger({
|
|
27
|
+
contentObj: contentObj.value,
|
|
28
|
+
contentArray: contentArray.value,
|
|
29
|
+
contentString: contentString.value,
|
|
30
|
+
contentType: contentType.value,
|
|
31
|
+
modalSize: modalSize.value,
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
</script>
|
|
36
|
+
|
|
37
|
+
<template>
|
|
38
|
+
<a @click="emitContent">
|
|
39
|
+
<slot />
|
|
40
|
+
</a>
|
|
41
|
+
</template>
|
|
@@ -30,7 +30,7 @@ const zoomUrl = computed(() => {
|
|
|
30
30
|
<iframe :src="zoomUrl" class="w-full h-full"></iframe>
|
|
31
31
|
</template>
|
|
32
32
|
</CommonModal>
|
|
33
|
-
<a
|
|
33
|
+
<a href="javascript:null" @click="showModal = true">
|
|
34
34
|
<slot name="modal-link"></slot>
|
|
35
35
|
</a>
|
|
36
36
|
</span>
|
|
@@ -259,7 +259,7 @@ const showLoginButton = computed((): boolean => {
|
|
|
259
259
|
>
|
|
260
260
|
<!-- event details -->
|
|
261
261
|
<div
|
|
262
|
-
:class="classBinding(classObject, 'eventDetails', '
|
|
262
|
+
:class="classBinding(classObject, 'eventDetails', 'grow')"
|
|
263
263
|
>
|
|
264
264
|
<template v-if="showBrand && getBrand(conference.affiliates)">
|
|
265
265
|
<a
|
|
@@ -274,7 +274,7 @@ const showLoginButton = computed((): boolean => {
|
|
|
274
274
|
classBinding(
|
|
275
275
|
classObject,
|
|
276
276
|
'eventBrand',
|
|
277
|
-
'text-base font-bold leading-tight tracking-
|
|
277
|
+
'text-base font-bold leading-tight tracking-wider mb-3'
|
|
278
278
|
)
|
|
279
279
|
"
|
|
280
280
|
>
|
|
@@ -290,7 +290,6 @@ const showLoginButton = computed((): boolean => {
|
|
|
290
290
|
conference.id
|
|
291
291
|
}`
|
|
292
292
|
"
|
|
293
|
-
class="no-underline"
|
|
294
293
|
>
|
|
295
294
|
<h2
|
|
296
295
|
:class="
|
|
@@ -309,7 +308,7 @@ const showLoginButton = computed((): boolean => {
|
|
|
309
308
|
classBinding(
|
|
310
309
|
classObject,
|
|
311
310
|
'eventDate',
|
|
312
|
-
'text-base leading-normal tracking-
|
|
311
|
+
'text-base leading-normal tracking-wider font-light uppercase md:text-md lg:text-lg'
|
|
313
312
|
)
|
|
314
313
|
"
|
|
315
314
|
>
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
<script lang="ts" setup>
|
|
2
|
+
import { ref, toRefs } from 'vue';
|
|
3
|
+
|
|
4
|
+
type Props = {
|
|
5
|
+
options: any,
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
const props = defineProps<Props>();
|
|
9
|
+
|
|
10
|
+
const { options } = toRefs(props);
|
|
11
|
+
|
|
12
|
+
// data
|
|
13
|
+
// TODO - set type
|
|
14
|
+
const currentValueArray = ref<any[]>([]);
|
|
15
|
+
|
|
16
|
+
// emits
|
|
17
|
+
// TODO - set value type
|
|
18
|
+
const emit = defineEmits<{
|
|
19
|
+
(event: 'input', value: any): void;
|
|
20
|
+
}>();
|
|
21
|
+
|
|
22
|
+
// methods
|
|
23
|
+
const onChange = (): void => {
|
|
24
|
+
emit('input', currentValueArray.value);
|
|
25
|
+
};
|
|
26
|
+
</script>
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
<template>
|
|
30
|
+
<span>
|
|
31
|
+
<div
|
|
32
|
+
v-for="(option, index) in options"
|
|
33
|
+
:key="index"
|
|
34
|
+
class="mb-2 ml-4"
|
|
35
|
+
>
|
|
36
|
+
<p-check
|
|
37
|
+
v-model="currentValueArray"
|
|
38
|
+
:value="option.value"
|
|
39
|
+
@change="onChange"
|
|
40
|
+
>
|
|
41
|
+
{{ option.name }}
|
|
42
|
+
</p-check>
|
|
43
|
+
</div>
|
|
44
|
+
</span>
|
|
45
|
+
</template>
|
|
46
|
+
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
<script lang="ts" setup>
|
|
2
|
+
import { toRefs } from 'vue';
|
|
2
3
|
type Props = {
|
|
3
4
|
errors: Array<string>;
|
|
4
5
|
};
|
|
@@ -10,8 +11,16 @@ const { errors } = toRefs(props);
|
|
|
10
11
|
|
|
11
12
|
<template>
|
|
12
13
|
<div>
|
|
13
|
-
<div
|
|
14
|
-
|
|
14
|
+
<div
|
|
15
|
+
v-if="errors"
|
|
16
|
+
class="my-1 text-red-500"
|
|
17
|
+
>
|
|
18
|
+
<div
|
|
19
|
+
v-for="(error, index) in errors"
|
|
20
|
+
:key="index"
|
|
21
|
+
>
|
|
22
|
+
{{ error }}
|
|
23
|
+
</div>
|
|
15
24
|
</div>
|
|
16
25
|
</div>
|
|
17
26
|
</template>
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
<script lang="ts" setup>
|
|
2
|
+
import { toRefs } from 'vue';
|
|
3
|
+
|
|
4
|
+
type Props = {
|
|
5
|
+
value: any,
|
|
6
|
+
options: any
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
const props = defineProps<Props>();
|
|
10
|
+
|
|
11
|
+
const { value, options } = toRefs(props);
|
|
12
|
+
|
|
13
|
+
// emits
|
|
14
|
+
// TODO - set value type
|
|
15
|
+
const emit = defineEmits<{
|
|
16
|
+
(event: 'input', value: any): void;
|
|
17
|
+
}>();
|
|
18
|
+
|
|
19
|
+
// computed
|
|
20
|
+
// TODO - what's this for?
|
|
21
|
+
// what is <p-radio> ?
|
|
22
|
+
const guid = () => {
|
|
23
|
+
return crypto.getRandomValues(new Uint32Array(2)).join('-');
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
// methods
|
|
27
|
+
const onChange = (e: any): void => {
|
|
28
|
+
emit('input', e.target.value);
|
|
29
|
+
};
|
|
30
|
+
</script>
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
<template>
|
|
34
|
+
<span>
|
|
35
|
+
<div
|
|
36
|
+
v-for="(option, index) in options"
|
|
37
|
+
:key="index"
|
|
38
|
+
class="mb-2 ml-4"
|
|
39
|
+
>
|
|
40
|
+
<p-radio
|
|
41
|
+
v-model="value"
|
|
42
|
+
color="default"
|
|
43
|
+
:value="option.value"
|
|
44
|
+
@change="onChange"
|
|
45
|
+
>
|
|
46
|
+
{{ option.name }}
|
|
47
|
+
</p-radio>
|
|
48
|
+
</div>
|
|
49
|
+
</span>
|
|
50
|
+
</template>
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
<script lang="ts" setup>
|
|
2
|
+
import { toRefs } from 'vue';
|
|
3
|
+
|
|
4
|
+
type Props = {
|
|
5
|
+
value: any,
|
|
6
|
+
options: any,
|
|
7
|
+
firstDisabled?: boolean
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
const props = withDefaults(defineProps<Props>(), {
|
|
11
|
+
firstDisabled: false
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
const { value, options, firstDisabled } = toRefs(props);
|
|
15
|
+
|
|
16
|
+
// emits
|
|
17
|
+
// TODO - set value type
|
|
18
|
+
const emit = defineEmits<{
|
|
19
|
+
(event: 'input', value: any): void;
|
|
20
|
+
}>();
|
|
21
|
+
|
|
22
|
+
// methods
|
|
23
|
+
const onInput = (e: any): void => {
|
|
24
|
+
emit('input', e.target.value);
|
|
25
|
+
};
|
|
26
|
+
</script>
|
|
27
|
+
|
|
28
|
+
<template>
|
|
29
|
+
<span>
|
|
30
|
+
<select
|
|
31
|
+
class="form-input"
|
|
32
|
+
:value="value"
|
|
33
|
+
@change="onInput"
|
|
34
|
+
>
|
|
35
|
+
<option
|
|
36
|
+
v-for="(option, index) in options"
|
|
37
|
+
:key="index"
|
|
38
|
+
:value="option.value"
|
|
39
|
+
:disabled="index==0 && firstDisabled"
|
|
40
|
+
>
|
|
41
|
+
{{ option.name}}
|
|
42
|
+
</option>
|
|
43
|
+
</select>
|
|
44
|
+
</span>
|
|
45
|
+
</template>
|
|
46
|
+
|
|
47
|
+
|
|
@@ -49,7 +49,7 @@ const acceptNumber = () => {
|
|
|
49
49
|
</div>
|
|
50
50
|
|
|
51
51
|
<div class="mb-3">
|
|
52
|
-
<label class="block font-semibold text-
|
|
52
|
+
<label class="block font-semibold text-gray-800 mb-1">Name</label>
|
|
53
53
|
|
|
54
54
|
<CommonTextInput
|
|
55
55
|
v-model="form.name"
|
|
@@ -62,7 +62,7 @@ const acceptNumber = () => {
|
|
|
62
62
|
</div>
|
|
63
63
|
|
|
64
64
|
<div class="mb-3">
|
|
65
|
-
<label class="block font-semibold text-
|
|
65
|
+
<label class="block font-semibold text-gray-800 mb-1">Email</label>
|
|
66
66
|
|
|
67
67
|
<CommonTextInput
|
|
68
68
|
v-model="form.email"
|
|
@@ -75,7 +75,7 @@ const acceptNumber = () => {
|
|
|
75
75
|
</div>
|
|
76
76
|
|
|
77
77
|
<div class="mb-3">
|
|
78
|
-
<label class="block font-semibold text-
|
|
78
|
+
<label class="block font-semibold text-gray-800 mb-1">Phone</label>
|
|
79
79
|
|
|
80
80
|
<CommonTextInput
|
|
81
81
|
v-model="form.phone"
|
|
@@ -87,7 +87,7 @@ const acceptNumber = () => {
|
|
|
87
87
|
</div>
|
|
88
88
|
|
|
89
89
|
<div class="mb-3">
|
|
90
|
-
<label class="block font-semibold text-
|
|
90
|
+
<label class="block font-semibold text-gray-800 mb-1"
|
|
91
91
|
>Message</label
|
|
92
92
|
>
|
|
93
93
|
|
|
@@ -104,8 +104,8 @@ const acceptNumber = () => {
|
|
|
104
104
|
|
|
105
105
|
<!-- Submitted Message -->
|
|
106
106
|
<div v-if="submitted" class="text-center my-12">
|
|
107
|
-
<div class="text-2xl font-bold text-
|
|
108
|
-
<div class="text-lg font-semibold text-
|
|
107
|
+
<div class="text-2xl font-bold text-gray-800 mb-2">Thank you.</div>
|
|
108
|
+
<div class="text-lg font-semibold text-gray-700">
|
|
109
109
|
Your message has been received.
|
|
110
110
|
</div>
|
|
111
111
|
</div>
|
|
@@ -43,7 +43,7 @@ const tabTitleValues = computed(() => {
|
|
|
43
43
|
v-if="tabContent.type === 'url'"
|
|
44
44
|
:href="tabContent.content"
|
|
45
45
|
target="_blank"
|
|
46
|
-
class="py-3 block
|
|
46
|
+
class="py-3 block w-full font-extralight inline-flex items-center text-md my-1"
|
|
47
47
|
:class="tabTitleValues.classes"
|
|
48
48
|
>
|
|
49
49
|
<span class="flex-initial">
|
|
@@ -53,7 +53,7 @@ const tabTitleValues = computed(() => {
|
|
|
53
53
|
<a
|
|
54
54
|
v-else
|
|
55
55
|
href="#"
|
|
56
|
-
class="py-3 block
|
|
56
|
+
class="py-3 block w-full font-extralight inline-flex items-center text-md my-1"
|
|
57
57
|
:class="tabTitleValues.classes"
|
|
58
58
|
@click.prevent="active = !active"
|
|
59
59
|
>
|