@icvdeveloper/common-module 1.4.14 → 2.1.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.d.mts +1051 -2
- package/dist/module.d.ts +1051 -2
- package/dist/module.json +1 -1
- package/dist/module.mjs +29 -15
- 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 -6
- package/dist/runtime/assets/scss/_agenda.css +1 -0
- package/dist/runtime/assets/scss/_animations.css +1 -0
- package/dist/runtime/assets/scss/_container_variants.css +1 -0
- package/dist/runtime/assets/scss/_custom.css +3 -0
- package/dist/runtime/assets/scss/_forms.css +1 -0
- package/dist/runtime/assets/scss/_header.css +0 -0
- package/dist/runtime/assets/scss/_index_production.css +1 -0
- package/dist/runtime/assets/scss/_transitions.css +1 -0
- package/dist/runtime/assets/scss/_variables.css +1 -0
- package/dist/runtime/assets/scss/_variables2.css +0 -0
- package/dist/runtime/assets/scss/_webcast.css +1 -0
- package/dist/runtime/assets/scss/index.css +1 -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 +329 -159
- package/dist/runtime/components/agenda/AgendaList.vue +18 -14
- package/dist/runtime/components/agenda/AgendaTabbed.vue +60 -54
- package/dist/runtime/components/agenda/components/AgendaListAccordion.vue +8 -3
- package/dist/runtime/components/agenda/components/Calendar.vue +23 -18
- package/dist/runtime/components/agenda/components/Favorite.vue +46 -0
- package/dist/runtime/components/agenda/components/InfoLink.vue +15 -5
- package/dist/runtime/components/agenda/components/PlayIcon.vue +3 -5
- package/dist/runtime/components/agenda/components/PresentationLink.vue +37 -19
- package/dist/runtime/components/agenda/components/Sponsor.vue +31 -24
- package/dist/runtime/components/auth/PasswordReset.vue +20 -5
- package/dist/runtime/components/auth/Registration.vue +14 -4
- package/dist/runtime/components/auth/Ucc.vue +44 -27
- package/dist/runtime/components/chat/ChatConversationList.vue +108 -0
- package/dist/runtime/components/chat/ChatCreateConversation.vue +199 -0
- package/dist/runtime/components/chat/ChatCreateGroupConversation.vue +154 -0
- package/dist/runtime/components/chat/ChatHeader.vue +97 -0
- package/dist/runtime/components/chat/ChatMessage.vue +40 -0
- package/dist/runtime/components/chat/ChatShowConversation.vue +76 -0
- package/dist/runtime/components/chat/ChatWidget.vue +40 -0
- package/dist/runtime/components/chat/ChatWindow.vue +154 -0
- package/dist/runtime/components/chat/ChatWindow.vue.d.ts +6 -0
- package/dist/runtime/components/chat/MessageInput.vue +27 -0
- package/dist/runtime/components/chat/SearchInput.vue +32 -0
- package/dist/runtime/components/core/Accordion.vue +12 -12
- package/dist/runtime/components/core/AttendeeList.vue +31 -36
- package/dist/runtime/components/core/CountdownTimer.vue +68 -52
- package/dist/runtime/components/core/DynamicHtml.vue.d.ts +6 -9
- package/dist/runtime/components/core/Modal.vue +24 -22
- package/dist/runtime/components/core/ModalButton.vue +43 -0
- package/dist/runtime/components/core/Navbar.vue +33 -21
- package/dist/runtime/components/core/Navigation.vue +286 -0
- package/dist/runtime/components/core/SvgIcon.vue +34 -1
- package/dist/runtime/components/core/VButton.vue +35 -0
- package/dist/runtime/components/core/ZoomModal.vue +9 -3
- package/dist/runtime/components/events/EventHeader.vue +14 -4
- package/dist/runtime/components/events/ListEvents.vue +21 -22
- package/dist/runtime/components/forms/CheckboxGroup.vue +46 -0
- package/dist/runtime/components/forms/ErrorField.vue +11 -2
- package/dist/runtime/components/forms/Message.vue +1 -1
- package/dist/runtime/components/forms/RadioGroup.vue +50 -0
- package/dist/runtime/components/forms/SearchInput.vue +8 -2
- package/dist/runtime/components/forms/SelectDropDown.vue +47 -0
- package/dist/runtime/components/forms/SupportForm.vue +22 -11
- package/dist/runtime/components/forms/SwitchInput.vue +50 -30
- package/dist/runtime/components/forms/TextArea.vue +1 -1
- package/dist/runtime/components/forms/TextInput.vue +1 -1
- package/dist/runtime/components/layouts/Accordion.vue +11 -6
- package/dist/runtime/components/media/ArchivePlayerAndContentContainer.vue +24 -5
- package/dist/runtime/components/media/ArchiveVideoPlayer.vue +19 -23
- package/dist/runtime/components/media/PlayerAndContentContainer.vue +4 -1
- package/dist/runtime/components/media/WebcastVideoPlayer.vue +6 -18
- package/dist/runtime/components/media/components/AgendaPanel.vue +7 -6
- package/dist/runtime/components/media/components/ArchiveMediaContainer.vue +17 -15
- package/dist/runtime/components/media/components/CeCreditNotification.vue +8 -8
- package/dist/runtime/components/media/components/ContentArea.vue +59 -18
- package/dist/runtime/components/media/components/ContentTabs.vue +40 -28
- package/dist/runtime/components/media/components/DocumentsPanel.vue +19 -17
- package/dist/runtime/components/media/components/MediaContainer.vue +11 -13
- package/dist/runtime/components/media/components/OverviewPanel.vue +5 -2
- package/dist/runtime/components/media/components/PresentersPanel.vue +74 -55
- package/dist/runtime/components/media/components/SessionReporting.vue +5 -4
- package/dist/runtime/components/media/components/SponsorsPanel.vue +13 -12
- package/dist/runtime/components/presenters/PresenterListing.vue +33 -25
- 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 +2 -4
- package/dist/runtime/components/profile/tabs/Favorites.vue +5 -4
- package/dist/runtime/components/profile/tabs/GeneralInformation.vue +26 -16
- package/dist/runtime/components/profile/tabs/ProfileImage.vue +7 -6
- package/dist/runtime/components/registration/AlreadyRegisteredModal.vue +102 -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 +146 -0
- package/dist/runtime/components/registration/StripePaymentForm.vue +121 -0
- package/dist/runtime/components/support/FAQAccordion.vue +8 -7
- package/dist/runtime/composables/useAdobeLaunch.d.ts +2 -7
- package/dist/runtime/composables/useAdobeLaunch.mjs +2 -2
- package/dist/runtime/composables/useAgenda.d.ts +13 -1
- package/dist/runtime/composables/useAgenda.mjs +125 -25
- package/dist/runtime/composables/useApi.d.ts +1 -1
- package/dist/runtime/composables/useAuth.d.ts +1 -1
- package/dist/runtime/composables/useAuth.mjs +1 -1
- package/dist/runtime/composables/useClassBinding.d.ts +3 -1
- package/dist/runtime/composables/useConferenceHelpers.d.ts +7 -3
- package/dist/runtime/composables/useConferenceHelpers.mjs +26 -15
- package/dist/runtime/composables/useEventHooks.d.ts +29 -0
- package/dist/runtime/composables/useEventHooks.mjs +21 -0
- package/dist/runtime/composables/useEvents.d.ts +17 -1
- package/dist/runtime/composables/useEvents.mjs +35 -9
- package/dist/runtime/composables/useLogin.mjs +9 -5
- package/dist/runtime/composables/useNavigation.d.ts +1 -1
- package/dist/runtime/composables/useNavigation.mjs +4 -2
- package/dist/runtime/composables/usePresentation.d.ts +2 -2
- package/dist/runtime/composables/usePresentation.mjs +8 -7
- package/dist/runtime/composables/usePresenter.d.ts +2 -2
- package/dist/runtime/composables/usePresenters.d.ts +2 -2
- package/dist/runtime/composables/usePusher.d.ts +4 -0
- package/dist/runtime/composables/usePusher.mjs +38 -26
- package/dist/runtime/composables/useScripts.mjs +1 -1
- package/dist/runtime/composables/useStream.d.ts +2 -3
- package/dist/runtime/composables/useStream.mjs +8 -2
- package/dist/runtime/composables/useUcc.d.ts +1 -1
- package/dist/runtime/composables/useUcc.mjs +29 -23
- package/dist/runtime/enums/general.d.ts +4 -1
- package/dist/runtime/enums/general.mjs +4 -1
- package/dist/runtime/models/adobeLaunch.d.ts +6 -0
- package/dist/runtime/models/adobeLaunch.mjs +0 -0
- package/dist/runtime/models/analytics.d.ts +6 -0
- package/dist/runtime/models/analytics.mjs +0 -0
- package/dist/runtime/models/attendeeList.d.ts +1 -1
- package/dist/runtime/models/conference.d.ts +122 -91
- package/dist/runtime/models/conversation.d.ts +11 -13
- package/dist/runtime/models/document.d.ts +5 -5
- package/dist/runtime/models/globalConfig.d.ts +9 -3
- package/dist/runtime/models/group.d.ts +38 -8
- package/dist/runtime/models/icons.d.ts +8 -1
- package/dist/runtime/models/index.d.ts +20 -0
- package/dist/runtime/models/index.mjs +20 -0
- package/dist/runtime/models/link.d.ts +4 -4
- package/dist/runtime/models/loginParams.d.ts +5 -0
- package/dist/runtime/models/loginParams.mjs +0 -0
- package/dist/runtime/models/navigationConfig.d.ts +7 -7
- package/dist/runtime/models/pagination.d.ts +11 -11
- package/dist/runtime/models/portal.d.ts +15 -10
- package/dist/runtime/models/templateConfig.d.ts +13 -7
- package/dist/runtime/models/ucc.d.ts +22 -0
- package/dist/runtime/models/ucc.mjs +0 -0
- package/dist/runtime/models/user.d.ts +25 -12
- package/dist/runtime/models/vButton.d.ts +7 -0
- package/dist/runtime/models/vButton.mjs +0 -0
- package/dist/runtime/models/video.d.ts +5 -4
- package/dist/runtime/models/virtualPagesConfig.d.ts +223 -0
- package/dist/runtime/models/virtualPagesConfig.mjs +0 -0
- package/dist/runtime/plugin.mjs +18 -9
- package/dist/runtime/store/affiliates.d.ts +4 -1
- package/dist/runtime/store/affiliates.mjs +38 -0
- package/dist/runtime/store/attendeeList.d.ts +1 -1
- package/dist/runtime/store/auth.d.ts +3 -7
- package/dist/runtime/store/auth.mjs +6 -0
- package/dist/runtime/store/conferences.d.ts +3 -1
- package/dist/runtime/store/conferences.mjs +14 -9
- package/dist/runtime/store/conversations.d.ts +78 -10
- package/dist/runtime/store/conversations.mjs +255 -22
- package/dist/runtime/store/modalPlayerConfig.d.ts +27 -0
- package/dist/runtime/store/modalPlayerConfig.mjs +58 -0
- package/dist/runtime/store/navigationConfig.d.ts +1 -1
- package/dist/runtime/store/presentations.d.ts +2 -2
- package/dist/runtime/store/templateConfigs.d.ts +7 -6
- package/dist/runtime/store/templateConfigs.mjs +7 -6
- package/dist/runtime/store/user.mjs +0 -1
- package/dist/runtime/v3plusCommonPlugin.d.ts +1 -1
- package/dist/types.d.mts +3 -2
- package/dist/types.d.ts +3 -2
- package/package.json +12 -9
- package/dist/runtime/components/media/components/JsonApi.vue +0 -33
- package/dist/runtime/components/media/components/JsonApi.vue.d.ts +0 -16
- package/dist/runtime/components/media/components/PresentersPanel.vue.d.ts +0 -32
- package/dist/runtime/components/media/components/WindowContent.vue +0 -118
- package/dist/runtime/components/media/components/WindowContent.vue.d.ts +0 -50
- package/dist/runtime/components/media/components/WindowSlide.vue +0 -92
- package/dist/runtime/components/media/components/WindowSlide.vue.d.ts +0 -36
- package/dist/runtime/models/authUser.d.ts +0 -16
- /package/dist/runtime/{models/authUser.mjs → assets/scss/_footer.css} +0 -0
|
@@ -1,16 +1,13 @@
|
|
|
1
|
-
declare const _default: import("vue").DefineComponent<{
|
|
1
|
+
declare const _default: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
|
|
2
2
|
template: {
|
|
3
3
|
type: StringConstructor;
|
|
4
4
|
default: string;
|
|
5
5
|
};
|
|
6
|
-
}
|
|
6
|
+
}>, () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
|
|
7
7
|
[key: string]: any;
|
|
8
|
-
}>,
|
|
9
|
-
template:
|
|
10
|
-
|
|
11
|
-
default: string;
|
|
12
|
-
};
|
|
13
|
-
}>>, {
|
|
8
|
+
}>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{
|
|
9
|
+
template: string;
|
|
10
|
+
} & {} & {}>, {
|
|
14
11
|
template: string;
|
|
15
|
-
}, {}>;
|
|
12
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}>;
|
|
16
13
|
export default _default;
|
|
@@ -16,7 +16,7 @@ type Props = {
|
|
|
16
16
|
classObject?: modalClassObj;
|
|
17
17
|
};
|
|
18
18
|
|
|
19
|
-
// classObject.components.svgIcon is not functioning properly and cannot be passed to svgIcon component
|
|
19
|
+
// TODO - classObject.components.svgIcon is not functioning properly and cannot be passed to svgIcon component
|
|
20
20
|
const props = withDefaults(defineProps<Props>(), {
|
|
21
21
|
visible: false,
|
|
22
22
|
modalSize: "50",
|
|
@@ -45,8 +45,8 @@ const { visible, modalSize, noScroll, showClose, usePadding, classObject } =
|
|
|
45
45
|
const { classBinding } = useClassBinding();
|
|
46
46
|
|
|
47
47
|
const modalClass = computed(() => {
|
|
48
|
-
const
|
|
49
|
-
const classes = `relative w-full ${
|
|
48
|
+
const paddingValue = usePadding.value ? 'sm:p-6 sm:pt-6' : '';
|
|
49
|
+
const classes = `relative w-full ${paddingValue} m-auto flex-col flex border border-white sm:border-none sm:rounded shadow bg-white modal-box`;
|
|
50
50
|
if (noScroll.value) {
|
|
51
51
|
return classes + ` max-h-full overflow-hidden`;
|
|
52
52
|
} else {
|
|
@@ -61,20 +61,22 @@ const closeModal = () => {
|
|
|
61
61
|
const clicked = () => {
|
|
62
62
|
emit("clicked");
|
|
63
63
|
};
|
|
64
|
+
|
|
65
|
+
// NOTE: to properly destroy/unmount this component and its contents, use v-if on this component's tag in the parent component/page
|
|
64
66
|
</script>
|
|
65
67
|
|
|
66
68
|
<template>
|
|
67
69
|
<Transition>
|
|
68
70
|
<div
|
|
69
|
-
v-
|
|
71
|
+
v-show="visible"
|
|
70
72
|
:class="
|
|
71
73
|
classBinding(
|
|
72
74
|
classObject,
|
|
73
75
|
'modalPositionContainer',
|
|
74
|
-
'fixed top-0 bottom-0 left-0 right-0 z-50 flex bg-smoke-
|
|
76
|
+
'fixed top-0 bottom-0 left-0 right-0 z-50 flex bg-smoke-400 md:p-3'
|
|
75
77
|
)
|
|
76
78
|
"
|
|
77
|
-
@click="clicked"
|
|
79
|
+
@click.self="clicked, closeModal()"
|
|
78
80
|
>
|
|
79
81
|
<div
|
|
80
82
|
class="custom-max-width max-h-full"
|
|
@@ -87,17 +89,23 @@ const clicked = () => {
|
|
|
87
89
|
classBinding(
|
|
88
90
|
classObject,
|
|
89
91
|
'modalCloseContainer',
|
|
90
|
-
'absolute top-0
|
|
92
|
+
'absolute top-0 right-0 z-30 max-h-1em'
|
|
91
93
|
)
|
|
92
94
|
"
|
|
93
95
|
>
|
|
94
96
|
<button
|
|
95
|
-
:class="classBinding(classObject, 'modalButton', 'p-
|
|
97
|
+
:class="classBinding(classObject, 'modalButton', 'p-2')"
|
|
96
98
|
@click="closeModal()"
|
|
97
99
|
>
|
|
98
|
-
<span :class="classBinding(classObject, 'modalButtonIcon', '')"
|
|
99
|
-
|
|
100
|
-
|
|
100
|
+
<span :class="classBinding(classObject, 'modalButtonIcon', '')">
|
|
101
|
+
<CommonSvgIcon
|
|
102
|
+
icon="close"
|
|
103
|
+
width=".7rem"
|
|
104
|
+
:class-object="{
|
|
105
|
+
container: 'rounded-full bg-white sm:bg-none p-1 sm:p-0'
|
|
106
|
+
}"
|
|
107
|
+
/>
|
|
108
|
+
</span>
|
|
101
109
|
</button>
|
|
102
110
|
</span>
|
|
103
111
|
|
|
@@ -108,25 +116,19 @@ const clicked = () => {
|
|
|
108
116
|
</Transition>
|
|
109
117
|
</template>
|
|
110
118
|
|
|
111
|
-
<style scoped>
|
|
119
|
+
<style lang="postcss" scoped>
|
|
112
120
|
.max-h-1em {
|
|
113
121
|
max-height: 1em;
|
|
114
122
|
}
|
|
115
|
-
|
|
116
|
-
.bg-smoke-light {
|
|
123
|
+
.bg-smoke-400 {
|
|
117
124
|
background-color: rgba(0, 0, 0, 0.4);
|
|
118
125
|
}
|
|
119
|
-
|
|
120
126
|
.custom-max-width {
|
|
121
|
-
max-width:
|
|
122
|
-
|
|
123
|
-
@screen lg {
|
|
124
|
-
.custom-max-width {
|
|
127
|
+
max-width: 100%;
|
|
128
|
+
@screen lg {
|
|
125
129
|
max-width: calc(var(--maxw) * 1.25);
|
|
126
130
|
}
|
|
127
|
-
|
|
128
|
-
@screen xl {
|
|
129
|
-
.custom-max-width {
|
|
131
|
+
@screen xl {
|
|
130
132
|
max-width: var(--maxw);
|
|
131
133
|
}
|
|
132
134
|
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
<script lang="ts" setup>
|
|
2
|
+
import { ref, toRefs } from "vue";
|
|
3
|
+
|
|
4
|
+
type Props = {
|
|
5
|
+
modalSize: string;
|
|
6
|
+
closeOnClick?: boolean;
|
|
7
|
+
};
|
|
8
|
+
|
|
9
|
+
const props = withDefaults(defineProps<Props>(), {
|
|
10
|
+
closeOnClick: true,
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
const { closeOnClick } = toRefs(props);
|
|
14
|
+
|
|
15
|
+
// data
|
|
16
|
+
const showModal = ref<boolean>(false);
|
|
17
|
+
|
|
18
|
+
// methods
|
|
19
|
+
const closeIfAllowed = () => {
|
|
20
|
+
if (closeOnClick.value) showModal.value = false;
|
|
21
|
+
};
|
|
22
|
+
</script>
|
|
23
|
+
|
|
24
|
+
<template>
|
|
25
|
+
<span>
|
|
26
|
+
<CommonModal
|
|
27
|
+
v-if="showModal"
|
|
28
|
+
@trigger="showModal = false"
|
|
29
|
+
@clicked="closeIfAllowed"
|
|
30
|
+
>
|
|
31
|
+
<div id="modal-title">
|
|
32
|
+
<slot name="title" />
|
|
33
|
+
</div>
|
|
34
|
+
<div id="modal-body">
|
|
35
|
+
<slot name="body" />
|
|
36
|
+
</div>
|
|
37
|
+
</CommonModal>
|
|
38
|
+
|
|
39
|
+
<CommonVButton @click="showModal = true">
|
|
40
|
+
<template #button> Show Modal </template>
|
|
41
|
+
</CommonVButton>
|
|
42
|
+
</span>
|
|
43
|
+
</template>
|
|
@@ -44,8 +44,8 @@ const combinedNavItems = computed(() => {
|
|
|
44
44
|
|
|
45
45
|
if (Object.keys(additionalItems.value).length > 0) {
|
|
46
46
|
// get index to insert items at.
|
|
47
|
-
Object.keys(additionalItems.value).forEach((index) => {
|
|
48
|
-
if (items[index] !==
|
|
47
|
+
Object.keys(additionalItems.value).forEach((value: any, index: number) => {
|
|
48
|
+
if (items[index] !== undefined) {
|
|
49
49
|
for (let i = 0; i < additionalItems.value[index].length; i++) {
|
|
50
50
|
items.splice(index + i, 0, additionalItems.value[index][i]);
|
|
51
51
|
}
|
|
@@ -60,29 +60,32 @@ const combinedNavItems = computed(() => {
|
|
|
60
60
|
<template>
|
|
61
61
|
<div>
|
|
62
62
|
<div class="flex flex-col">
|
|
63
|
-
<header class="min-w-full flex sticky
|
|
63
|
+
<header class="min-w-full flex sticky top-0 z-50">
|
|
64
64
|
<!-- Standard Screen Nav -->
|
|
65
65
|
<div
|
|
66
66
|
class="hidden flex-1 flex-col mx-auto min-w-full"
|
|
67
67
|
:class="combinedNavItems.length < 7 ? 'md:flex' : 'lg:flex'"
|
|
68
68
|
>
|
|
69
|
-
<
|
|
69
|
+
<div
|
|
70
70
|
v-if="htmlHeader.length"
|
|
71
71
|
class="flex-initial mb-0"
|
|
72
|
-
|
|
73
|
-
|
|
72
|
+
v-html="htmlHeader"
|
|
73
|
+
/>
|
|
74
74
|
|
|
75
75
|
<nav class="flex flex-1 min-h-8 content-center">
|
|
76
|
-
<ul class="
|
|
77
|
-
<li
|
|
78
|
-
|
|
76
|
+
<ul class="h-full">
|
|
77
|
+
<li
|
|
78
|
+
v-for="(item, index) in combinedNavItems"
|
|
79
|
+
:key="index"
|
|
80
|
+
>
|
|
81
|
+
<NuxtLink
|
|
79
82
|
v-if="!isExternalLink(item)"
|
|
80
83
|
:to="formatLink(item)"
|
|
81
84
|
exact
|
|
82
85
|
class="inline-block"
|
|
83
86
|
>
|
|
84
87
|
{{ item.label || item.name }}
|
|
85
|
-
</
|
|
88
|
+
</NuxtLink>
|
|
86
89
|
<a
|
|
87
90
|
v-else
|
|
88
91
|
:href="formatLink(item)"
|
|
@@ -101,14 +104,17 @@ const combinedNavItems = computed(() => {
|
|
|
101
104
|
:class="combinedNavItems.length >= 7 ? 'lg:hidden' : 'md:hidden'"
|
|
102
105
|
>
|
|
103
106
|
<div class="mobile-nav flex flex-row justify-between">
|
|
104
|
-
<
|
|
107
|
+
<div
|
|
105
108
|
v-if="htmlHeader.length"
|
|
106
109
|
class="flex-1"
|
|
107
|
-
|
|
108
|
-
|
|
110
|
+
v-html="htmlHeader"
|
|
111
|
+
/>
|
|
109
112
|
|
|
110
113
|
<div class="float-right p-2">
|
|
111
|
-
<button
|
|
114
|
+
<button
|
|
115
|
+
class="flex items-center px-3 py-2"
|
|
116
|
+
@click="toggle"
|
|
117
|
+
>
|
|
112
118
|
<svg
|
|
113
119
|
class="fill-current h-3 w-3"
|
|
114
120
|
viewBox="0 0 20 20"
|
|
@@ -122,24 +128,30 @@ const combinedNavItems = computed(() => {
|
|
|
122
128
|
</div>
|
|
123
129
|
|
|
124
130
|
<div class="flex">
|
|
125
|
-
<nav
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
131
|
+
<nav
|
|
132
|
+
:class="open ? 'flex' : 'hidden'"
|
|
133
|
+
class="w-full"
|
|
134
|
+
>
|
|
135
|
+
<ul class="flex-col self-center mx-auto">
|
|
136
|
+
<li
|
|
137
|
+
v-for="(item, index) in combinedNavItems"
|
|
138
|
+
:key="index"
|
|
139
|
+
>
|
|
140
|
+
<NuxtLink
|
|
129
141
|
v-if="!isExternalLink(item)"
|
|
130
142
|
:to="formatLink(item)"
|
|
131
143
|
exact
|
|
132
144
|
class="block w-full text-center"
|
|
133
|
-
@click
|
|
145
|
+
@click="toggle"
|
|
134
146
|
>
|
|
135
147
|
{{ item.label || item.name }}
|
|
136
|
-
</
|
|
148
|
+
</NuxtLink>
|
|
137
149
|
|
|
138
150
|
<a
|
|
139
151
|
v-if="isExternalLink(item)"
|
|
140
152
|
:href="formatLink(item)"
|
|
141
153
|
target="_blank"
|
|
142
|
-
@click
|
|
154
|
+
@click="toggle"
|
|
143
155
|
>
|
|
144
156
|
{{ item.label || item.name }}
|
|
145
157
|
</a>
|
|
@@ -0,0 +1,286 @@
|
|
|
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/usePresenters';
|
|
6
|
+
import { useNavigation } from '../../composables/useNavigation';
|
|
7
|
+
import { useAuth } from '../../composables/useAuth';
|
|
8
|
+
import { useClassBinding } from '../../composables/useClassBinding';
|
|
9
|
+
import {
|
|
10
|
+
useTemplateConfigsStore,
|
|
11
|
+
useNavigationConfigStore,
|
|
12
|
+
useConferencesStore,
|
|
13
|
+
useAuthStore
|
|
14
|
+
} from '../../store';
|
|
15
|
+
import {
|
|
16
|
+
modalContentEventHook,
|
|
17
|
+
setIsPlayerVisibleEventHook,
|
|
18
|
+
setIsProfileVisibleEventHook,
|
|
19
|
+
setPlayerConferenceEventHook,
|
|
20
|
+
setPlayerPresentationEventHook
|
|
21
|
+
} from '../../composables/useEventHooks';
|
|
22
|
+
import type { Ref } from 'vue';
|
|
23
|
+
import type { PlayerPresentation } from '../../models/conference';
|
|
24
|
+
import type { NavigationClassObj } from '../../@types/components';
|
|
25
|
+
import type { Conference } from '../../models/conference';
|
|
26
|
+
import type { ContentData } from '../../models/vButton';
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
type Props = {
|
|
30
|
+
classObject?: NavigationClassObj;
|
|
31
|
+
isVirtual?: boolean;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
const props = withDefaults(defineProps<Props>(), {
|
|
35
|
+
classObject: () => {
|
|
36
|
+
return {
|
|
37
|
+
container: '',
|
|
38
|
+
headerToggleContainer: '',
|
|
39
|
+
toggleContainer: '',
|
|
40
|
+
toggleButton: '',
|
|
41
|
+
svgElement: '',
|
|
42
|
+
menuContainer: '',
|
|
43
|
+
navElement: '',
|
|
44
|
+
listElement: '',
|
|
45
|
+
liveEventLink: '',
|
|
46
|
+
eventOverviewLink: '',
|
|
47
|
+
agendaAnchorLink: '',
|
|
48
|
+
presentersAnchorLink: '',
|
|
49
|
+
navigationItemLink: '',
|
|
50
|
+
attendeeListListItem: '',
|
|
51
|
+
attendeeListLink: '',
|
|
52
|
+
logOutListItem: '',
|
|
53
|
+
logOutLink: '',
|
|
54
|
+
profileLink: '',
|
|
55
|
+
profileImg: '',
|
|
56
|
+
loginListItem: '',
|
|
57
|
+
}
|
|
58
|
+
},
|
|
59
|
+
isVirtual: false
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
const { classObject, isVirtual } = toRefs(props);
|
|
63
|
+
const { user, isLoggedIn } = storeToRefs(useAuthStore());
|
|
64
|
+
const { currentConference } = storeToRefs(useConferencesStore());
|
|
65
|
+
|
|
66
|
+
// data
|
|
67
|
+
const showMenu = ref<boolean>(false);
|
|
68
|
+
const profileImg = 'https://v3plus-production.s3.us-west-2.amazonaws.com/users/profile.png';
|
|
69
|
+
|
|
70
|
+
// methods
|
|
71
|
+
const { formatLink, isExternalLink } = useNavigation();
|
|
72
|
+
const { isLoginDisabled } = useAuth();
|
|
73
|
+
const { classBinding } = useClassBinding();
|
|
74
|
+
|
|
75
|
+
const { logout } = useAuthStore();
|
|
76
|
+
const { globalConfigValue } = useTemplateConfigsStore();
|
|
77
|
+
const { getEnabled } = useNavigationConfigStore();
|
|
78
|
+
|
|
79
|
+
const { getPresentersLabel } = usePresenters(currentConference as Ref<Conference>);
|
|
80
|
+
|
|
81
|
+
const route = useRoute();
|
|
82
|
+
|
|
83
|
+
const toggleMenu = () => {
|
|
84
|
+
showMenu.value = !showMenu.value;
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
// computed
|
|
88
|
+
const navigationItems = computed(() => {
|
|
89
|
+
return getEnabled();
|
|
90
|
+
});
|
|
91
|
+
|
|
92
|
+
const htmlHeader = computed(() => {
|
|
93
|
+
return globalConfigValue("html_header");
|
|
94
|
+
});
|
|
95
|
+
|
|
96
|
+
const hideUserProfile = computed(() => {
|
|
97
|
+
return globalConfigValue("hide_user_profile");
|
|
98
|
+
});
|
|
99
|
+
|
|
100
|
+
// methods
|
|
101
|
+
const emitLoginModal = (): void => {
|
|
102
|
+
const modalContent: ContentData = {};
|
|
103
|
+
modalContent.contentType = 'registration';
|
|
104
|
+
modalContentEventHook.trigger(modalContent);
|
|
105
|
+
};
|
|
106
|
+
|
|
107
|
+
const emitStreamTest = (): void => {
|
|
108
|
+
const streamPres: PlayerPresentation = {
|
|
109
|
+
player_type: 'live',
|
|
110
|
+
data: {
|
|
111
|
+
id: 0,
|
|
112
|
+
access: true,
|
|
113
|
+
name: 'Stream Test',
|
|
114
|
+
description: 'This is a test stream. Please confirm you can see the video and can hear the audio clearly prior to the event.',
|
|
115
|
+
is_live: true,
|
|
116
|
+
video_url: '',
|
|
117
|
+
track: {
|
|
118
|
+
channel: 'stream-test'
|
|
119
|
+
}
|
|
120
|
+
}};
|
|
121
|
+
setPlayerPresentationEventHook.trigger(streamPres);
|
|
122
|
+
setPlayerConferenceEventHook.trigger(currentConference);
|
|
123
|
+
setIsPlayerVisibleEventHook.trigger(true);
|
|
124
|
+
};
|
|
125
|
+
</script>
|
|
126
|
+
|
|
127
|
+
<template>
|
|
128
|
+
<div
|
|
129
|
+
:class="
|
|
130
|
+
classBinding(
|
|
131
|
+
classObject,
|
|
132
|
+
'container',
|
|
133
|
+
'flex-1 md:items-end lg:flex flex-row justify-between max-w-screen-xl mx-auto bg-white'
|
|
134
|
+
)
|
|
135
|
+
"
|
|
136
|
+
>
|
|
137
|
+
<div :class="classBinding(classObject, 'headerToggleContainer', 'flex-1 flex flex-row justify-between')">
|
|
138
|
+
<!-- adjust -->
|
|
139
|
+
<span
|
|
140
|
+
v-if="htmlHeader && htmlHeader.length"
|
|
141
|
+
v-html="htmlHeader"
|
|
142
|
+
/>
|
|
143
|
+
<div :class="classBinding(classObject, 'toggleContainer', 'md:hidden shrink items-center self-center p-2')">
|
|
144
|
+
<button
|
|
145
|
+
:class="classBinding(classObject, 'toggleButton', 'flex items-center px-3 py-2')"
|
|
146
|
+
@click="toggleMenu"
|
|
147
|
+
>
|
|
148
|
+
<svg
|
|
149
|
+
:class="classBinding(classObject, 'svgElement', 'fill-current h-6 w-6')"
|
|
150
|
+
viewBox="0 0 20 20"
|
|
151
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
152
|
+
>
|
|
153
|
+
<title>Menu</title>
|
|
154
|
+
<path d="M0 3h20v2H0V3zm0 6h20v2H0V9zm0 6h20v2H0v-2z" />
|
|
155
|
+
</svg>
|
|
156
|
+
</button>
|
|
157
|
+
</div>
|
|
158
|
+
</div>
|
|
159
|
+
|
|
160
|
+
<div :class="classBinding(classObject, 'menuContainer', 'flex-1 flex md:flex-initial')">
|
|
161
|
+
<nav
|
|
162
|
+
:class="[showMenu ? 'flex' : 'hidden', classBinding(classObject, 'navElement', 'header w-full md:block md:w-auto md:flex-1')]"
|
|
163
|
+
>
|
|
164
|
+
<ul
|
|
165
|
+
: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')"
|
|
166
|
+
>
|
|
167
|
+
<li
|
|
168
|
+
v-if="
|
|
169
|
+
currentConference &&
|
|
170
|
+
currentConference.agenda_enabled &&
|
|
171
|
+
route.name === 'events-id'
|
|
172
|
+
"
|
|
173
|
+
>
|
|
174
|
+
<a
|
|
175
|
+
href="#agenda"
|
|
176
|
+
:class="classBinding(classObject, 'agendaAnchorLink', 'nav-link')"
|
|
177
|
+
>Agenda</a>
|
|
178
|
+
</li>
|
|
179
|
+
<li v-if="currentConference && route.name === 'events-id'">
|
|
180
|
+
<a
|
|
181
|
+
href="#presenters"
|
|
182
|
+
:class="classBinding(classObject, 'presentersAnchorLink', 'nav-link')"
|
|
183
|
+
>
|
|
184
|
+
{{ getPresentersLabel(2) }}
|
|
185
|
+
</a>
|
|
186
|
+
</li>
|
|
187
|
+
<template
|
|
188
|
+
v-for="(item, index) in navigationItems"
|
|
189
|
+
:key="index"
|
|
190
|
+
>
|
|
191
|
+
<li>
|
|
192
|
+
<template v-if="!isExternalLink(item)">
|
|
193
|
+
<nuxt-link
|
|
194
|
+
v-if="isVirtual && item.slug == 'stream-test'"
|
|
195
|
+
:class="['cursor-pointer', classBinding(classObject, 'navigationItemLink', 'nav-link')]"
|
|
196
|
+
@click.enter="emitStreamTest"
|
|
197
|
+
>
|
|
198
|
+
{{ item.label }}
|
|
199
|
+
</nuxt-link>
|
|
200
|
+
<nuxt-link
|
|
201
|
+
v-else
|
|
202
|
+
:to="formatLink(item)"
|
|
203
|
+
exact
|
|
204
|
+
:class="classBinding(classObject, 'navigationItemLink', 'nav-link')"
|
|
205
|
+
@click.enter="toggleMenu"
|
|
206
|
+
>
|
|
207
|
+
{{ item.label }}
|
|
208
|
+
</nuxt-link>
|
|
209
|
+
</template>
|
|
210
|
+
<a
|
|
211
|
+
v-else
|
|
212
|
+
:href="formatLink(item)"
|
|
213
|
+
:target="isExternalLink(item) ? '_blank' : ''"
|
|
214
|
+
@click.enter="toggleMenu"
|
|
215
|
+
>
|
|
216
|
+
{{ item.label }}
|
|
217
|
+
</a>
|
|
218
|
+
</li>
|
|
219
|
+
</template>
|
|
220
|
+
<template v-if="!isLoginDisabled">
|
|
221
|
+
<template v-if="isLoggedIn">
|
|
222
|
+
<li :class="classBinding(classObject, 'logOutListItem', 'md:inline-block')">
|
|
223
|
+
<a
|
|
224
|
+
:class="classBinding(classObject, 'logOutLink', 'block md:inline-block w-auto md:w-full text-center cursor-pointer')"
|
|
225
|
+
@click="logout"
|
|
226
|
+
>Log Out</a>
|
|
227
|
+
</li>
|
|
228
|
+
<li
|
|
229
|
+
v-if="user != null && user.token && !hideUserProfile"
|
|
230
|
+
:class="classBinding(classObject, 'profileLink', 'inline-block')"
|
|
231
|
+
>
|
|
232
|
+
<a @click="setIsProfileVisibleEventHook.trigger(true)">
|
|
233
|
+
<img
|
|
234
|
+
:class="classBinding(classObject, 'profileImg', 'cursor-pointer rounded-full')"
|
|
235
|
+
height="30"
|
|
236
|
+
width="30"
|
|
237
|
+
:src="user?.profile_image as string ?? profileImg"
|
|
238
|
+
alt=""
|
|
239
|
+
>
|
|
240
|
+
</a>
|
|
241
|
+
</li>
|
|
242
|
+
</template>
|
|
243
|
+
<template v-if="!isLoggedIn">
|
|
244
|
+
<li :class="classBinding(classObject, 'loginListItem', 'block md:inline-block')">
|
|
245
|
+
<template v-if="!isVirtual">
|
|
246
|
+
<nuxt-link
|
|
247
|
+
to="/login"
|
|
248
|
+
exact
|
|
249
|
+
>
|
|
250
|
+
Log In
|
|
251
|
+
</nuxt-link>
|
|
252
|
+
</template>
|
|
253
|
+
<template v-else>
|
|
254
|
+
<a
|
|
255
|
+
class="cursor-pointer"
|
|
256
|
+
@click="emitLoginModal()"
|
|
257
|
+
>Log In</a>
|
|
258
|
+
</template>
|
|
259
|
+
</li>
|
|
260
|
+
</template>
|
|
261
|
+
</template>
|
|
262
|
+
</ul>
|
|
263
|
+
</nav>
|
|
264
|
+
</div>
|
|
265
|
+
</div>
|
|
266
|
+
</template>
|
|
267
|
+
|
|
268
|
+
<style lang="postcss">
|
|
269
|
+
nav.header ul li {
|
|
270
|
+
@apply border-2 border-transparent text-black cursor-pointer py-1 md:inline-block md:ml-8;
|
|
271
|
+
}
|
|
272
|
+
nav.header ul li:hover {
|
|
273
|
+
@apply border-b-black;
|
|
274
|
+
}
|
|
275
|
+
nav.header ul li a.nav-link,
|
|
276
|
+
nav.header ul li a.nav-link:hover {
|
|
277
|
+
@apply cursor-pointer text-black;
|
|
278
|
+
}
|
|
279
|
+
nav.header ul li.nav-li-color {
|
|
280
|
+
@apply text-red-500;
|
|
281
|
+
}
|
|
282
|
+
nav.header ul li.nav-li-color a.nav-link,
|
|
283
|
+
nav.header ul li.nav-li-color a.nav-link:hover {
|
|
284
|
+
@apply text-red-500;
|
|
285
|
+
}
|
|
286
|
+
</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,10 @@ const iconComponent = computed(() => {
|
|
|
188
218
|
</script>
|
|
189
219
|
|
|
190
220
|
<template>
|
|
191
|
-
<div
|
|
221
|
+
<div
|
|
222
|
+
:style="iconDims"
|
|
223
|
+
:class="classBinding(classObject, 'container', '')"
|
|
224
|
+
>
|
|
192
225
|
<component
|
|
193
226
|
:is="iconComponent"
|
|
194
227
|
:style="iconStyle"
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
<script lang="ts" setup>
|
|
2
|
+
import { toRefs } from "vue";
|
|
3
|
+
import { modalContentEventHook } from '../../composables/useEventHooks';
|
|
4
|
+
import type { ContentData } from '../../models/vButton';
|
|
5
|
+
|
|
6
|
+
const props = withDefaults(defineProps<ContentData>(), {
|
|
7
|
+
contentObj: () => { return {} },
|
|
8
|
+
contentArray: () => { return [] },
|
|
9
|
+
contentString: '',
|
|
10
|
+
contentType: '',
|
|
11
|
+
modalSize: 50
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
const { contentObj, contentArray, contentString, contentType, modalSize } = toRefs(props);
|
|
15
|
+
|
|
16
|
+
// methods
|
|
17
|
+
const emitContent = (): void => {
|
|
18
|
+
// only emit if there's something to emit
|
|
19
|
+
if (contentType.value.length > 0) {
|
|
20
|
+
modalContentEventHook.trigger({
|
|
21
|
+
contentObj: contentObj.value,
|
|
22
|
+
contentArray: contentArray.value,
|
|
23
|
+
contentString: contentString.value,
|
|
24
|
+
contentType: contentType.value,
|
|
25
|
+
modalSize: modalSize.value,
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
</script>
|
|
30
|
+
|
|
31
|
+
<template>
|
|
32
|
+
<a @click="emitContent">
|
|
33
|
+
<slot />
|
|
34
|
+
</a>
|
|
35
|
+
</template>
|