@icvdeveloper/common-module 0.0.93 → 0.0.94

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 (96) hide show
  1. package/README.md +6 -6
  2. package/dist/module.json +1 -1
  3. package/dist/runtime/assets/scss/index.css +0 -705
  4. package/dist/runtime/assets/svg/answer.svg +14 -14
  5. package/dist/runtime/assets/svg/avatar.svg +1 -1
  6. package/dist/runtime/assets/svg/bell-icon.svg +3 -3
  7. package/dist/runtime/assets/svg/checkmark-icon.svg +1 -1
  8. package/dist/runtime/assets/svg/close-icon.svg +1 -1
  9. package/dist/runtime/assets/svg/icon-avatar.svg +1 -1
  10. package/dist/runtime/assets/svg/icon-chevron.svg +4 -4
  11. package/dist/runtime/assets/svg/icon-circle-plus.svg +1 -1
  12. package/dist/runtime/assets/svg/icon-close.svg +1 -1
  13. package/dist/runtime/assets/svg/icon-info.svg +2 -2
  14. package/dist/runtime/assets/svg/icon-new-window.svg +11 -11
  15. package/dist/runtime/assets/svg/icon-offline.svg +3 -3
  16. package/dist/runtime/assets/svg/icon-online.svg +3 -3
  17. package/dist/runtime/assets/svg/icon-person.svg +2 -2
  18. package/dist/runtime/assets/svg/icon-play.svg +2 -2
  19. package/dist/runtime/assets/svg/icon-star-filled.svg +29 -29
  20. package/dist/runtime/assets/svg/icon-star.svg +24 -24
  21. package/dist/runtime/assets/svg/icon-video-chat.svg +14 -14
  22. package/dist/runtime/assets/svg/icon-website.svg +2 -2
  23. package/dist/runtime/assets/svg/icon-zoom.svg +10 -10
  24. package/dist/runtime/assets/svg/notification-icon.svg +32 -32
  25. package/dist/runtime/assets/svg/offline-icon.svg +1 -1
  26. package/dist/runtime/assets/svg/online-icon.svg +3 -3
  27. package/dist/runtime/assets/svg/peer2peer.svg +3 -3
  28. package/dist/runtime/assets/svg/phone.svg +1 -1
  29. package/dist/runtime/assets/svg/plus-icon.svg +1 -1
  30. package/dist/runtime/assets/svg/red-icon.svg +3 -3
  31. package/dist/runtime/assets/svg/reject.svg +14 -14
  32. package/dist/runtime/assets/svg/search-icon.svg +3 -3
  33. package/dist/runtime/components/affiliates/AffiliatePage.vue +17 -17
  34. package/dist/runtime/components/agenda/AgendaList.vue +243 -243
  35. package/dist/runtime/components/agenda/AgendaTabbed.vue +309 -309
  36. package/dist/runtime/components/agenda/components/AgendaListAccordion.vue +53 -53
  37. package/dist/runtime/components/agenda/components/Calendar.vue +89 -89
  38. package/dist/runtime/components/agenda/components/InfoLink.vue +56 -56
  39. package/dist/runtime/components/agenda/components/PlayIcon.vue +49 -49
  40. package/dist/runtime/components/agenda/components/PresentationLink.vue +137 -137
  41. package/dist/runtime/components/agenda/components/Sponsor.vue +132 -132
  42. package/dist/runtime/components/auth/LoginFullWidth.vue +78 -78
  43. package/dist/runtime/components/auth/PasswordReset.vue +60 -60
  44. package/dist/runtime/components/auth/Registration.vue +27 -27
  45. package/dist/runtime/components/auth/Ucc.vue +81 -81
  46. package/dist/runtime/components/core/Accordion.vue +97 -97
  47. package/dist/runtime/components/core/CountdownTimer.vue +357 -357
  48. package/dist/runtime/components/core/DynamicHtml.vue +1 -1
  49. package/dist/runtime/components/core/Modal.vue +111 -111
  50. package/dist/runtime/components/core/Navbar.vue +154 -154
  51. package/dist/runtime/components/core/SvgIcon.vue +151 -151
  52. package/dist/runtime/components/core/ZoomModal.vue +37 -37
  53. package/dist/runtime/components/events/EventHeader.vue +133 -133
  54. package/dist/runtime/components/events/ListEvents.vue +531 -531
  55. package/dist/runtime/components/forms/AlertBox.vue +21 -21
  56. package/dist/runtime/components/forms/ErrorField.vue +17 -17
  57. package/dist/runtime/components/forms/Message.vue +27 -27
  58. package/dist/runtime/components/forms/SearchInput.vue +38 -38
  59. package/dist/runtime/components/forms/SupportForm.vue +112 -112
  60. package/dist/runtime/components/forms/SwitchInput.vue +42 -42
  61. package/dist/runtime/components/forms/TextArea.vue +26 -26
  62. package/dist/runtime/components/forms/TextInput.vue +28 -28
  63. package/dist/runtime/components/layouts/Accordion.vue +78 -78
  64. package/dist/runtime/components/media/ArchivePlayerAndContentContainer.vue +157 -0
  65. package/dist/runtime/components/media/ArchiveVideoPlayer.vue +185 -0
  66. package/dist/runtime/components/media/PlayerAndContentContainer.vue +175 -175
  67. package/dist/runtime/components/media/WebcastVideoPlayer.vue +167 -167
  68. package/dist/runtime/components/media/components/AgendaPanel.vue +43 -43
  69. package/dist/runtime/components/media/components/ArchiveMediaContainer.vue +136 -0
  70. package/dist/runtime/components/media/components/CeCreditNotification.vue +95 -95
  71. package/dist/runtime/components/media/components/ContentAccordion.vue +63 -63
  72. package/dist/runtime/components/media/components/ContentAccordion.vue.d.ts +3 -1
  73. package/dist/runtime/components/media/components/ContentArea.vue +158 -158
  74. package/dist/runtime/components/media/components/ContentTabs.vue +231 -231
  75. package/dist/runtime/components/media/components/DocumentsPanel.vue +31 -31
  76. package/dist/runtime/components/media/components/JsonApi.vue +31 -31
  77. package/dist/runtime/components/media/components/MediaContainer.vue +63 -63
  78. package/dist/runtime/components/media/components/OverviewPanel.vue +52 -52
  79. package/dist/runtime/components/media/components/PresentersPanel.vue +52 -52
  80. package/dist/runtime/components/media/components/SessionReporting.vue +93 -93
  81. package/dist/runtime/components/media/components/SponsorsPanel.vue +71 -71
  82. package/dist/runtime/components/media/components/WindowContent.vue +92 -92
  83. package/dist/runtime/components/media/components/WindowSlide.vue +72 -72
  84. package/dist/runtime/components/presenters/PresenterListing.vue +164 -164
  85. package/dist/runtime/components/presenters/PresenterModal.vue +223 -223
  86. package/dist/runtime/components/profile/Profile.vue +149 -149
  87. package/dist/runtime/components/profile/components/Sidebar.vue +27 -27
  88. package/dist/runtime/components/profile/components/SidebarNavItem.vue +39 -39
  89. package/dist/runtime/components/profile/tabs/Favorites.vue +21 -21
  90. package/dist/runtime/components/profile/tabs/GeneralInformation.vue +122 -122
  91. package/dist/runtime/components/profile/tabs/ProfileImage.vue +75 -75
  92. package/dist/runtime/components/support/FAQAccordion.vue +140 -140
  93. package/dist/runtime/models/conference.d.ts +6 -1
  94. package/dist/runtime/store/presentations.d.ts +4 -1
  95. package/dist/runtime/store/presentations.mjs +14 -1
  96. package/package.json +1 -1
@@ -1,78 +1,78 @@
1
- <script lang="ts" setup>
2
- import { ref, toRefs, computed } from "vue";
3
-
4
- type Props = {
5
- title?: string;
6
- tabContent?: {
7
- content?: string;
8
- label?: string;
9
- type?: string;
10
- };
11
- contentObject?: object;
12
- };
13
-
14
- const props = withDefaults(defineProps<Props>(), {
15
- title: "",
16
- tabContent: () => ({}),
17
- contentObject: () => ({}),
18
- });
19
-
20
- // data
21
- const { title, tabContent, contentObject } = toRefs(props);
22
- const active = ref<boolean>(false);
23
-
24
- // computed
25
- const tabTitleValues = computed(() => {
26
- if (title.value) {
27
- return {
28
- title: title.value,
29
- classes: "",
30
- };
31
- } else {
32
- return {
33
- title: tabContent.value.label,
34
- classes: "pl-4",
35
- };
36
- }
37
- });
38
- </script>
39
-
40
- <template>
41
- <div>
42
- <a
43
- v-if="tabContent.type === 'url'"
44
- :href="tabContent.content"
45
- target="_blank"
46
- class="py-3 block no-underline w-full font-hairline inline-flex items-center text-md my-1"
47
- :class="tabTitleValues.classes"
48
- >
49
- <span class="flex-initial">
50
- {{ tabTitleValues.title }}
51
- </span>
52
- </a>
53
- <a
54
- v-else
55
- href="#"
56
- class="py-3 block no-underline w-full font-hairline inline-flex items-center text-md my-1"
57
- :class="tabTitleValues.classes"
58
- @click.prevent="active = !active"
59
- >
60
- <span class="flex-initial"> {{ tabTitleValues.title }}&nbsp;&nbsp; </span>
61
- <span
62
- v-show="!active"
63
- class="font-black flex-initial"
64
- style="width: 0.75rem"
65
- >
66
- <CommonSvgIcon icon="downarrow"></CommonSvgIcon>
67
- </span>
68
- <span
69
- v-show="active"
70
- class="font-black flex-initial"
71
- style="width: 0.75rem"
72
- >
73
- <CommonSvgIcon class="invert" icon="downarrow"></CommonSvgIcon>
74
- </span>
75
- </a>
76
- <div v-show="active"><slot /></div>
77
- </div>
78
- </template>
1
+ <script lang="ts" setup>
2
+ import { ref, toRefs, computed } from "vue";
3
+
4
+ type Props = {
5
+ title?: string;
6
+ tabContent?: {
7
+ content?: string;
8
+ label?: string;
9
+ type?: string;
10
+ };
11
+ contentObject?: object;
12
+ };
13
+
14
+ const props = withDefaults(defineProps<Props>(), {
15
+ title: "",
16
+ tabContent: () => ({}),
17
+ contentObject: () => ({}),
18
+ });
19
+
20
+ // data
21
+ const { title, tabContent, contentObject } = toRefs(props);
22
+ const active = ref<boolean>(false);
23
+
24
+ // computed
25
+ const tabTitleValues = computed(() => {
26
+ if (title.value) {
27
+ return {
28
+ title: title.value,
29
+ classes: "",
30
+ };
31
+ } else {
32
+ return {
33
+ title: tabContent.value.label,
34
+ classes: "pl-4",
35
+ };
36
+ }
37
+ });
38
+ </script>
39
+
40
+ <template>
41
+ <div>
42
+ <a
43
+ v-if="tabContent.type === 'url'"
44
+ :href="tabContent.content"
45
+ target="_blank"
46
+ class="py-3 block no-underline w-full font-hairline inline-flex items-center text-md my-1"
47
+ :class="tabTitleValues.classes"
48
+ >
49
+ <span class="flex-initial">
50
+ {{ tabTitleValues.title }}
51
+ </span>
52
+ </a>
53
+ <a
54
+ v-else
55
+ href="#"
56
+ class="py-3 block no-underline w-full font-hairline inline-flex items-center text-md my-1"
57
+ :class="tabTitleValues.classes"
58
+ @click.prevent="active = !active"
59
+ >
60
+ <span class="flex-initial"> {{ tabTitleValues.title }}&nbsp;&nbsp; </span>
61
+ <span
62
+ v-show="!active"
63
+ class="font-black flex-initial"
64
+ style="width: 0.75rem"
65
+ >
66
+ <CommonSvgIcon icon="downarrow"></CommonSvgIcon>
67
+ </span>
68
+ <span
69
+ v-show="active"
70
+ class="font-black flex-initial"
71
+ style="width: 0.75rem"
72
+ >
73
+ <CommonSvgIcon class="invert" icon="downarrow"></CommonSvgIcon>
74
+ </span>
75
+ </a>
76
+ <div v-show="active"><slot /></div>
77
+ </div>
78
+ </template>
@@ -0,0 +1,157 @@
1
+ <script lang="ts" setup>
2
+ import { ref, toRefs } from "vue";
3
+ import { storeToRefs } from "pinia";
4
+ import { useClassBinding } from "../../composables/useClassBinding";
5
+ import { Conference, Presentation } from "../../models/conference";
6
+ import { SelectedContent } from "../../enums/general";
7
+ import { usePresentationsStore } from "../../store/presentations";
8
+ import {
9
+ PlayerAndContentClassObj,
10
+ PlayerAndContentCompObj,
11
+ ContentTabsClassObj,
12
+ ContentAreaClassObj,
13
+ MediaContainerClassObj,
14
+ } from "../../@types/components";
15
+
16
+ type Props = {
17
+ conference: Conference;
18
+ presentation: Presentation;
19
+ tabs?: Array<{ label: string; type: SelectedContent; content: string }>;
20
+ classObject?: PlayerAndContentClassObj;
21
+ };
22
+
23
+ const props = withDefaults(defineProps<Props>(), {
24
+ tabs: () => {
25
+ return [
26
+ { label: "Overview", type: SelectedContent.OVERVIEW, content: "string" },
27
+ ];
28
+ },
29
+ classObject: () => {
30
+ return {
31
+ container: "",
32
+ noTabsContainer: "",
33
+ noTabsChild: "",
34
+ withTabsContainer: "",
35
+ withTabsChild: "",
36
+ mediaTabsContainer: "",
37
+ components: ref<PlayerAndContentCompObj>({
38
+ contentTabs: ref<ContentTabsClassObj>({}),
39
+ contentArea: ref<ContentAreaClassObj>({}),
40
+ mediaContainer: ref<MediaContainerClassObj>({}),
41
+ }),
42
+ };
43
+ },
44
+ });
45
+
46
+ const { conference, presentation } = toRefs(props);
47
+
48
+ const { classBinding } = useClassBinding();
49
+
50
+ const { selectedContent } = storeToRefs(usePresentationsStore());
51
+ </script>
52
+
53
+ <template>
54
+ <div :class="classBinding(classObject, 'container', 'flex flex-col w-full')">
55
+ <!-- NO TABS -->
56
+ <div
57
+ v-if="!tabs.length"
58
+ :class="
59
+ classBinding(
60
+ classObject,
61
+ 'noTabsContainer',
62
+ 'container mx-auto flex flex-col text-center pt-6'
63
+ )
64
+ "
65
+ >
66
+ <div :class="classBinding(classObject, 'noTabsChild', 'flex-1')">
67
+ <CommonComponentsArchiveMediaContainer
68
+ :class="
69
+ classBinding(
70
+ classObject,
71
+ 'classObject.components.mediaContainer.container',
72
+ 'flex-1 aspect-video'
73
+ )
74
+ "
75
+ :presentation="presentation"
76
+ :class-object="classObject.components.mediaContainer"
77
+ />
78
+ </div>
79
+ </div>
80
+
81
+ <!-- TABS -->
82
+ <div v-else :class="classBinding(classObject, 'withTabsContainer', '')">
83
+ <CommonComponentsContentTabs
84
+ :class="
85
+ classBinding(
86
+ classObject,
87
+ 'classObject.components.contentTabs.container',
88
+ 'hidden md:block'
89
+ )
90
+ "
91
+ :webcast-conference="conference"
92
+ :items="tabs"
93
+ :class-object="classObject.components.contentTabs"
94
+ />
95
+ <div
96
+ :class="
97
+ classBinding(
98
+ classObject,
99
+ 'withTabsChild',
100
+ 'flex-1 grid grid-cols-7 grid-rows-2 gap-y-4'
101
+ )
102
+ "
103
+ >
104
+ <div
105
+ :class="
106
+ classBinding(
107
+ classObject,
108
+ 'MediaTabsContainer',
109
+ 'col-span-7 row-span-1 md:col-span-4 lg:col-span-5 aspect-video'
110
+ )
111
+ "
112
+ >
113
+ <CommonComponentsArchiveMediaContainer
114
+ class="w-full"
115
+ :presentation="presentation"
116
+ :class-object="classObject.components.mediaContainer"
117
+ />
118
+ <CommonComponentsContentTabs
119
+ class="block md:hidden"
120
+ :webcast-conference="conference"
121
+ :items="tabs"
122
+ :class-object="classObject.components.contentTabs"
123
+ />
124
+ </div>
125
+ <CommonComponentsContentArea
126
+ class="col-span-7 row-span-1 md:col-span-3 lg:col-span-2 border ml-0 md:ml-6"
127
+ :selected-content="selectedContent"
128
+ :webcast-conference="conference"
129
+ :presentation="presentation"
130
+ :class-object="classObject.components.contentArea"
131
+ />
132
+ <!-- sponsor -->
133
+ <figure
134
+ class="col-span-7 md:col-start-5 md:col-span-3 lg:col-start-6 lg:col-span-6 row-span-1 flex flex-col p-6 text-center"
135
+ >
136
+ <h3
137
+ v-if="conference.affiliates.length > 0"
138
+ class="allsmallcaps text-sm pb-4 text-neutral-400 scala"
139
+ >
140
+ Sponsored by:
141
+ </h3>
142
+ <template v-for="affiliate in conference.affiliates">
143
+ <CommonComponentsSponsor
144
+ v-if="affiliate.role == 'sponsor'"
145
+ :key="affiliate.id"
146
+ :sponsor="affiliate"
147
+ :class-object="{
148
+ labelImageContainer: 'block',
149
+ sponsorContainer: 'img-mx-auto',
150
+ }"
151
+ />
152
+ </template>
153
+ </figure>
154
+ </div>
155
+ </div>
156
+ </div>
157
+ </template>
@@ -0,0 +1,185 @@
1
+ <script lang="ts" setup>
2
+ import { toRefs, computed, watch, onMounted, nextTick } from "vue";
3
+ import { get } from "lodash-es";
4
+ import { Presentation, PlayerObj } from "../../models/conference";
5
+ import { WebcastPlayerClassObj } from "../../@types/components";
6
+ import { useClassBinding } from "../../composables/useClassBinding";
7
+
8
+ type Props = {
9
+ presentation: Presentation;
10
+ playing?: boolean;
11
+ classObject?: WebcastPlayerClassObj;
12
+ };
13
+
14
+ const props = withDefaults(defineProps<Props>(), {
15
+ playing: true,
16
+ classObject: () => {
17
+ return {
18
+ container: "",
19
+ playerElement: "",
20
+ embedElement: "",
21
+ };
22
+ },
23
+ });
24
+
25
+ const { presentation, playing } = toRefs(props);
26
+
27
+ const { classBinding } = useClassBinding();
28
+
29
+ // data
30
+ let icvPlayerObj: PlayerObj = {
31
+ autostart: false,
32
+ format: "hls",
33
+ playerDiv: "mediaPlayer",
34
+ };
35
+ let timeInterval: NodeJS.Timer | null = null;
36
+
37
+ // emits
38
+ const emit = defineEmits<{
39
+ (event: "time", value: Number): void;
40
+ }>();
41
+
42
+ // computed
43
+ const isHtml = computed(() => {
44
+ return presentation.value.type === "embed";
45
+ });
46
+
47
+ const isFile = computed(() => {
48
+ const mediaTypeArray = ["video", "audio", "video_slide", "audio_slide"];
49
+ return mediaTypeArray.indexOf(get(presentation.value, "type")) >= 0;
50
+ });
51
+
52
+ // methods
53
+ const playStream = () => {
54
+ if (isFile.value) {
55
+ icvPlayerObj.format = ["audio", "audio_slide"].includes(
56
+ String(presentation.value.type)
57
+ )
58
+ ? "audio"
59
+ : "video";
60
+ icvPlayerObj.loadCustomStream({
61
+ file: get(presentation.value, "video_url"),
62
+ });
63
+ }
64
+ };
65
+
66
+ const setupMediaPlayer = () => {
67
+ if (icvPlayerObj) {
68
+ icvPlayerObj = <PlayerObj>{};
69
+ }
70
+ if (isFile.value) {
71
+ nextTick(() => {
72
+ icvPlayerObj = new window.ICVDMStreamPlayer();
73
+ icvPlayerObj.format = String(presentation.value.type);
74
+ icvPlayerObj.playerDiv = "mediaPlayer";
75
+ icvPlayerObj.addTrack(get(presentation.value, "captions_url"));
76
+ icvPlayerObj.getPosition();
77
+ icvPlayerObj.autostart = true;
78
+ playStream();
79
+ });
80
+ }
81
+ };
82
+
83
+ const checkStreamTime = () => {
84
+ if (icvPlayerObj) {
85
+ if (!playing.value) {
86
+ stop();
87
+ return;
88
+ }
89
+ emit("time", icvPlayerObj.getPosition());
90
+ }
91
+ };
92
+
93
+ const seek = (_time) => {
94
+ if (icvPlayerObj && isFile) {
95
+ icvPlayerObj.seek(_time);
96
+ }
97
+ };
98
+
99
+ const stop = () => {
100
+ if (icvPlayerObj && isFile) {
101
+ icvPlayerObj.stop();
102
+ }
103
+ };
104
+
105
+ const remove = () => {
106
+ if (icvPlayerObj && isFile) {
107
+ icvPlayerObj.remove();
108
+ }
109
+ };
110
+
111
+ const cleanup = () => {
112
+ if (icvPlayerObj) {
113
+ stop();
114
+ remove();
115
+ icvPlayerObj = <PlayerObj>{};
116
+ }
117
+ clearInterval(timeInterval);
118
+ };
119
+
120
+ // watchers
121
+ watch(
122
+ presentation,
123
+ (_oldPresentation: Presentation, _newPresentation: Presentation) => {
124
+ if (_oldPresentation.type !== _newPresentation.type) {
125
+ setupMediaPlayer();
126
+ }
127
+ }
128
+ );
129
+
130
+ // on mount
131
+ // @todo figure out why ICVDMStreamPlayer doesn't load when loadScripts is run asynchroniously
132
+ onMounted(() => {
133
+ const _script = document.createElement("script");
134
+ _script.setAttribute(
135
+ "src",
136
+ "https://cdn.v3mediaportal.com/streaming-player/js/icvdm.player.min.js?_id=75"
137
+ );
138
+ document.head.appendChild(_script);
139
+ _script.onload = () => {
140
+ if (get(window, "ICVDMStreamPlayer", false)) {
141
+ setupMediaPlayer();
142
+ timeInterval = setInterval(checkStreamTime, 1000);
143
+ }
144
+ };
145
+ });
146
+
147
+ onBeforeRouteLeave(() => {
148
+ cleanup();
149
+ });
150
+ </script>
151
+
152
+ <template>
153
+ <div
154
+ id="archive-player-container"
155
+ :class="classBinding(classObject, 'container', 'text-center')"
156
+ >
157
+ <div
158
+ v-if="isFile"
159
+ id="mediaPlayer"
160
+ ref="mediaPlayer"
161
+ :class="classBinding(classObject, 'playerElement', '')"
162
+ ></div>
163
+ <span
164
+ v-if="isHtml"
165
+ :v-html="presentation.embed_html"
166
+ :class="classBinding(classObject, 'embedElement', '')"
167
+ ></span>
168
+ </div>
169
+ </template>
170
+
171
+ <style>
172
+ #archive-player-container > span {
173
+ padding-bottom: 56.25%;
174
+ height: 0;
175
+ position: relative;
176
+ display: block;
177
+ }
178
+ #archive-player-container > span > iframe {
179
+ position: absolute;
180
+ top: 0;
181
+ left: 0;
182
+ height: 100%;
183
+ width: 100%;
184
+ }
185
+ </style>