@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.
Files changed (189) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/dist/module.d.mts +1051 -2
  3. package/dist/module.d.ts +1051 -2
  4. package/dist/module.json +1 -1
  5. package/dist/module.mjs +29 -15
  6. package/dist/runtime/@types/components.d.ts +22 -0
  7. package/dist/runtime/@types/configVariables.d.ts +6 -0
  8. package/dist/runtime/analytics.d.ts +1 -6
  9. package/dist/runtime/assets/scss/_agenda.css +1 -0
  10. package/dist/runtime/assets/scss/_animations.css +1 -0
  11. package/dist/runtime/assets/scss/_container_variants.css +1 -0
  12. package/dist/runtime/assets/scss/_custom.css +3 -0
  13. package/dist/runtime/assets/scss/_forms.css +1 -0
  14. package/dist/runtime/assets/scss/_header.css +0 -0
  15. package/dist/runtime/assets/scss/_index_production.css +1 -0
  16. package/dist/runtime/assets/scss/_transitions.css +1 -0
  17. package/dist/runtime/assets/scss/_variables.css +1 -0
  18. package/dist/runtime/assets/scss/_variables2.css +0 -0
  19. package/dist/runtime/assets/scss/_webcast.css +1 -0
  20. package/dist/runtime/assets/scss/index.css +1 -705
  21. package/dist/runtime/assets/svg/icon-minus.svg +6 -0
  22. package/dist/runtime/assets/svg/icon-video.svg +6 -0
  23. package/dist/runtime/components/affiliates/AffiliateModal.vue +66 -0
  24. package/dist/runtime/components/affiliates/AffiliatePage.vue +329 -159
  25. package/dist/runtime/components/agenda/AgendaList.vue +18 -14
  26. package/dist/runtime/components/agenda/AgendaTabbed.vue +60 -54
  27. package/dist/runtime/components/agenda/components/AgendaListAccordion.vue +8 -3
  28. package/dist/runtime/components/agenda/components/Calendar.vue +23 -18
  29. package/dist/runtime/components/agenda/components/Favorite.vue +46 -0
  30. package/dist/runtime/components/agenda/components/InfoLink.vue +15 -5
  31. package/dist/runtime/components/agenda/components/PlayIcon.vue +3 -5
  32. package/dist/runtime/components/agenda/components/PresentationLink.vue +37 -19
  33. package/dist/runtime/components/agenda/components/Sponsor.vue +31 -24
  34. package/dist/runtime/components/auth/PasswordReset.vue +20 -5
  35. package/dist/runtime/components/auth/Registration.vue +14 -4
  36. package/dist/runtime/components/auth/Ucc.vue +44 -27
  37. package/dist/runtime/components/chat/ChatConversationList.vue +108 -0
  38. package/dist/runtime/components/chat/ChatCreateConversation.vue +199 -0
  39. package/dist/runtime/components/chat/ChatCreateGroupConversation.vue +154 -0
  40. package/dist/runtime/components/chat/ChatHeader.vue +97 -0
  41. package/dist/runtime/components/chat/ChatMessage.vue +40 -0
  42. package/dist/runtime/components/chat/ChatShowConversation.vue +76 -0
  43. package/dist/runtime/components/chat/ChatWidget.vue +40 -0
  44. package/dist/runtime/components/chat/ChatWindow.vue +154 -0
  45. package/dist/runtime/components/chat/ChatWindow.vue.d.ts +6 -0
  46. package/dist/runtime/components/chat/MessageInput.vue +27 -0
  47. package/dist/runtime/components/chat/SearchInput.vue +32 -0
  48. package/dist/runtime/components/core/Accordion.vue +12 -12
  49. package/dist/runtime/components/core/AttendeeList.vue +31 -36
  50. package/dist/runtime/components/core/CountdownTimer.vue +68 -52
  51. package/dist/runtime/components/core/DynamicHtml.vue.d.ts +6 -9
  52. package/dist/runtime/components/core/Modal.vue +24 -22
  53. package/dist/runtime/components/core/ModalButton.vue +43 -0
  54. package/dist/runtime/components/core/Navbar.vue +33 -21
  55. package/dist/runtime/components/core/Navigation.vue +286 -0
  56. package/dist/runtime/components/core/SvgIcon.vue +34 -1
  57. package/dist/runtime/components/core/VButton.vue +35 -0
  58. package/dist/runtime/components/core/ZoomModal.vue +9 -3
  59. package/dist/runtime/components/events/EventHeader.vue +14 -4
  60. package/dist/runtime/components/events/ListEvents.vue +21 -22
  61. package/dist/runtime/components/forms/CheckboxGroup.vue +46 -0
  62. package/dist/runtime/components/forms/ErrorField.vue +11 -2
  63. package/dist/runtime/components/forms/Message.vue +1 -1
  64. package/dist/runtime/components/forms/RadioGroup.vue +50 -0
  65. package/dist/runtime/components/forms/SearchInput.vue +8 -2
  66. package/dist/runtime/components/forms/SelectDropDown.vue +47 -0
  67. package/dist/runtime/components/forms/SupportForm.vue +22 -11
  68. package/dist/runtime/components/forms/SwitchInput.vue +50 -30
  69. package/dist/runtime/components/forms/TextArea.vue +1 -1
  70. package/dist/runtime/components/forms/TextInput.vue +1 -1
  71. package/dist/runtime/components/layouts/Accordion.vue +11 -6
  72. package/dist/runtime/components/media/ArchivePlayerAndContentContainer.vue +24 -5
  73. package/dist/runtime/components/media/ArchiveVideoPlayer.vue +19 -23
  74. package/dist/runtime/components/media/PlayerAndContentContainer.vue +4 -1
  75. package/dist/runtime/components/media/WebcastVideoPlayer.vue +6 -18
  76. package/dist/runtime/components/media/components/AgendaPanel.vue +7 -6
  77. package/dist/runtime/components/media/components/ArchiveMediaContainer.vue +17 -15
  78. package/dist/runtime/components/media/components/CeCreditNotification.vue +8 -8
  79. package/dist/runtime/components/media/components/ContentArea.vue +59 -18
  80. package/dist/runtime/components/media/components/ContentTabs.vue +40 -28
  81. package/dist/runtime/components/media/components/DocumentsPanel.vue +19 -17
  82. package/dist/runtime/components/media/components/MediaContainer.vue +11 -13
  83. package/dist/runtime/components/media/components/OverviewPanel.vue +5 -2
  84. package/dist/runtime/components/media/components/PresentersPanel.vue +74 -55
  85. package/dist/runtime/components/media/components/SessionReporting.vue +5 -4
  86. package/dist/runtime/components/media/components/SponsorsPanel.vue +13 -12
  87. package/dist/runtime/components/presenters/PresenterListing.vue +33 -25
  88. package/dist/runtime/components/presenters/PresenterModal.vue +26 -21
  89. package/dist/runtime/components/presenters/Presenters.vue +139 -0
  90. package/dist/runtime/components/profile/Profile.vue +10 -6
  91. package/dist/runtime/components/profile/components/Sidebar.vue +1 -1
  92. package/dist/runtime/components/profile/components/SidebarNavItem.vue +2 -4
  93. package/dist/runtime/components/profile/tabs/Favorites.vue +5 -4
  94. package/dist/runtime/components/profile/tabs/GeneralInformation.vue +26 -16
  95. package/dist/runtime/components/profile/tabs/ProfileImage.vue +7 -6
  96. package/dist/runtime/components/registration/AlreadyRegisteredModal.vue +102 -0
  97. package/dist/runtime/components/registration/PaymentForm.vue +136 -0
  98. package/dist/runtime/components/registration/RegistrationForm.vue +417 -0
  99. package/dist/runtime/components/registration/RegistrationGroupSelect.vue +146 -0
  100. package/dist/runtime/components/registration/StripePaymentForm.vue +121 -0
  101. package/dist/runtime/components/support/FAQAccordion.vue +8 -7
  102. package/dist/runtime/composables/useAdobeLaunch.d.ts +2 -7
  103. package/dist/runtime/composables/useAdobeLaunch.mjs +2 -2
  104. package/dist/runtime/composables/useAgenda.d.ts +13 -1
  105. package/dist/runtime/composables/useAgenda.mjs +125 -25
  106. package/dist/runtime/composables/useApi.d.ts +1 -1
  107. package/dist/runtime/composables/useAuth.d.ts +1 -1
  108. package/dist/runtime/composables/useAuth.mjs +1 -1
  109. package/dist/runtime/composables/useClassBinding.d.ts +3 -1
  110. package/dist/runtime/composables/useConferenceHelpers.d.ts +7 -3
  111. package/dist/runtime/composables/useConferenceHelpers.mjs +26 -15
  112. package/dist/runtime/composables/useEventHooks.d.ts +29 -0
  113. package/dist/runtime/composables/useEventHooks.mjs +21 -0
  114. package/dist/runtime/composables/useEvents.d.ts +17 -1
  115. package/dist/runtime/composables/useEvents.mjs +35 -9
  116. package/dist/runtime/composables/useLogin.mjs +9 -5
  117. package/dist/runtime/composables/useNavigation.d.ts +1 -1
  118. package/dist/runtime/composables/useNavigation.mjs +4 -2
  119. package/dist/runtime/composables/usePresentation.d.ts +2 -2
  120. package/dist/runtime/composables/usePresentation.mjs +8 -7
  121. package/dist/runtime/composables/usePresenter.d.ts +2 -2
  122. package/dist/runtime/composables/usePresenters.d.ts +2 -2
  123. package/dist/runtime/composables/usePusher.d.ts +4 -0
  124. package/dist/runtime/composables/usePusher.mjs +38 -26
  125. package/dist/runtime/composables/useScripts.mjs +1 -1
  126. package/dist/runtime/composables/useStream.d.ts +2 -3
  127. package/dist/runtime/composables/useStream.mjs +8 -2
  128. package/dist/runtime/composables/useUcc.d.ts +1 -1
  129. package/dist/runtime/composables/useUcc.mjs +29 -23
  130. package/dist/runtime/enums/general.d.ts +4 -1
  131. package/dist/runtime/enums/general.mjs +4 -1
  132. package/dist/runtime/models/adobeLaunch.d.ts +6 -0
  133. package/dist/runtime/models/adobeLaunch.mjs +0 -0
  134. package/dist/runtime/models/analytics.d.ts +6 -0
  135. package/dist/runtime/models/analytics.mjs +0 -0
  136. package/dist/runtime/models/attendeeList.d.ts +1 -1
  137. package/dist/runtime/models/conference.d.ts +122 -91
  138. package/dist/runtime/models/conversation.d.ts +11 -13
  139. package/dist/runtime/models/document.d.ts +5 -5
  140. package/dist/runtime/models/globalConfig.d.ts +9 -3
  141. package/dist/runtime/models/group.d.ts +38 -8
  142. package/dist/runtime/models/icons.d.ts +8 -1
  143. package/dist/runtime/models/index.d.ts +20 -0
  144. package/dist/runtime/models/index.mjs +20 -0
  145. package/dist/runtime/models/link.d.ts +4 -4
  146. package/dist/runtime/models/loginParams.d.ts +5 -0
  147. package/dist/runtime/models/loginParams.mjs +0 -0
  148. package/dist/runtime/models/navigationConfig.d.ts +7 -7
  149. package/dist/runtime/models/pagination.d.ts +11 -11
  150. package/dist/runtime/models/portal.d.ts +15 -10
  151. package/dist/runtime/models/templateConfig.d.ts +13 -7
  152. package/dist/runtime/models/ucc.d.ts +22 -0
  153. package/dist/runtime/models/ucc.mjs +0 -0
  154. package/dist/runtime/models/user.d.ts +25 -12
  155. package/dist/runtime/models/vButton.d.ts +7 -0
  156. package/dist/runtime/models/vButton.mjs +0 -0
  157. package/dist/runtime/models/video.d.ts +5 -4
  158. package/dist/runtime/models/virtualPagesConfig.d.ts +223 -0
  159. package/dist/runtime/models/virtualPagesConfig.mjs +0 -0
  160. package/dist/runtime/plugin.mjs +18 -9
  161. package/dist/runtime/store/affiliates.d.ts +4 -1
  162. package/dist/runtime/store/affiliates.mjs +38 -0
  163. package/dist/runtime/store/attendeeList.d.ts +1 -1
  164. package/dist/runtime/store/auth.d.ts +3 -7
  165. package/dist/runtime/store/auth.mjs +6 -0
  166. package/dist/runtime/store/conferences.d.ts +3 -1
  167. package/dist/runtime/store/conferences.mjs +14 -9
  168. package/dist/runtime/store/conversations.d.ts +78 -10
  169. package/dist/runtime/store/conversations.mjs +255 -22
  170. package/dist/runtime/store/modalPlayerConfig.d.ts +27 -0
  171. package/dist/runtime/store/modalPlayerConfig.mjs +58 -0
  172. package/dist/runtime/store/navigationConfig.d.ts +1 -1
  173. package/dist/runtime/store/presentations.d.ts +2 -2
  174. package/dist/runtime/store/templateConfigs.d.ts +7 -6
  175. package/dist/runtime/store/templateConfigs.mjs +7 -6
  176. package/dist/runtime/store/user.mjs +0 -1
  177. package/dist/runtime/v3plusCommonPlugin.d.ts +1 -1
  178. package/dist/types.d.mts +3 -2
  179. package/dist/types.d.ts +3 -2
  180. package/package.json +12 -9
  181. package/dist/runtime/components/media/components/JsonApi.vue +0 -33
  182. package/dist/runtime/components/media/components/JsonApi.vue.d.ts +0 -16
  183. package/dist/runtime/components/media/components/PresentersPanel.vue.d.ts +0 -32
  184. package/dist/runtime/components/media/components/WindowContent.vue +0 -118
  185. package/dist/runtime/components/media/components/WindowContent.vue.d.ts +0 -50
  186. package/dist/runtime/components/media/components/WindowSlide.vue +0 -92
  187. package/dist/runtime/components/media/components/WindowSlide.vue.d.ts +0 -36
  188. package/dist/runtime/models/authUser.d.ts +0 -16
  189. /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
- }, () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
6
+ }>, () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
7
7
  [key: string]: any;
8
- }>, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{
9
- template: {
10
- type: StringConstructor;
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 padding = usePadding.value ? "p-6" : "";
49
- const classes = `relative w-full ${padding} m-auto flex-col flex rounded shadow bg-white modal-box`;
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-if="visible"
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-light p-3'
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 bottom-0 right-0 z-30 max-h-1em'
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-3')"
97
+ :class="classBinding(classObject, 'modalButton', 'p-2')"
96
98
  @click="closeModal()"
97
99
  >
98
- <span :class="classBinding(classObject, 'modalButtonIcon', '')"
99
- ><CommonSvgIcon icon="close" width=".7rem"
100
- /></span>
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: 85%;
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] !== "undefined") {
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 pin-t z-50">
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
- <CommonDynamicHtml
69
+ <div
70
70
  v-if="htmlHeader.length"
71
71
  class="flex-initial mb-0"
72
- :template="htmlHeader"
73
- ></CommonDynamicHtml>
72
+ v-html="htmlHeader"
73
+ />
74
74
 
75
75
  <nav class="flex flex-1 min-h-8 content-center">
76
- <ul class="list-reset h-full">
77
- <li v-for="(item, index) in combinedNavItems" :key="index">
78
- <nuxt-link
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
- </nuxt-link>
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
- <CommonDynamicHtml
107
+ <div
105
108
  v-if="htmlHeader.length"
106
109
  class="flex-1"
107
- :template="htmlHeader"
108
- ></CommonDynamicHtml>
110
+ v-html="htmlHeader"
111
+ />
109
112
 
110
113
  <div class="float-right p-2">
111
- <button class="flex items-center px-3 py-2" @click="toggle">
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 :class="open ? 'flex' : 'hidden'" class="w-full">
126
- <ul class="flex-col self-center list-reset mx-auto">
127
- <li v-for="(item, index) in combinedNavItems" :key="index">
128
- <nuxt-link
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.native="toggle"
145
+ @click="toggle"
134
146
  >
135
147
  {{ item.label || item.name }}
136
- </nuxt-link>
148
+ </NuxtLink>
137
149
 
138
150
  <a
139
151
  v-if="isExternalLink(item)"
140
152
  :href="formatLink(item)"
141
153
  target="_blank"
142
- @click.native="toggle"
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 :style="iconDims">
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>