@icvdeveloper/common-module 0.0.75 → 0.0.78

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 (41) hide show
  1. package/dist/module.json +1 -1
  2. package/dist/module.mjs +5 -0
  3. package/dist/runtime/@types/components.d.ts +89 -1
  4. package/dist/runtime/components/agenda/AgendaList.vue +149 -19
  5. package/dist/runtime/components/agenda/AgendaTabbed.vue +9 -0
  6. package/dist/runtime/components/agenda/components/AgendaListAccordion.vue +31 -4
  7. package/dist/runtime/components/agenda/components/Calendar.vue +89 -0
  8. package/dist/runtime/components/media/PlayerAndContentContainer.vue +170 -0
  9. package/dist/runtime/components/media/WebcastVideoPlayer.vue +167 -0
  10. package/dist/runtime/components/media/components/AgendaPanel.vue +53 -0
  11. package/dist/runtime/components/media/components/CeCreditNotification.vue +99 -0
  12. package/dist/runtime/components/media/components/CeCreditNotification.vue.d.ts +28 -0
  13. package/dist/runtime/components/media/components/ContentAccordion.vue +65 -0
  14. package/dist/runtime/components/media/components/ContentAccordion.vue.d.ts +29 -0
  15. package/dist/runtime/components/media/components/ContentArea.vue +175 -0
  16. package/dist/runtime/components/media/components/ContentTabs.vue +263 -0
  17. package/dist/runtime/components/media/components/DocumentsPanel.vue +52 -0
  18. package/dist/runtime/components/media/components/DocumentsPanel.vue.d.ts +7 -0
  19. package/dist/runtime/components/media/components/JsonApi.vue +33 -0
  20. package/dist/runtime/components/media/components/JsonApi.vue.d.ts +16 -0
  21. package/dist/runtime/components/media/components/MediaContainer.vue +104 -0
  22. package/dist/runtime/components/media/components/OverviewPanel.vue +51 -0
  23. package/dist/runtime/components/media/components/PresentersPanel.vue +65 -0
  24. package/dist/runtime/components/media/components/PresentersPanel.vue.d.ts +32 -0
  25. package/dist/runtime/components/media/components/SessionReporting.vue +96 -0
  26. package/dist/runtime/components/media/components/SessionReporting.vue.d.ts +35 -0
  27. package/dist/runtime/components/media/components/SponsorsPanel.vue +85 -0
  28. package/dist/runtime/components/media/components/SponsorsPanel.vue.d.ts +27 -0
  29. package/dist/runtime/components/media/components/WindowContent.vue +118 -0
  30. package/dist/runtime/components/media/components/WindowContent.vue.d.ts +50 -0
  31. package/dist/runtime/components/media/components/WindowSlide.vue +92 -0
  32. package/dist/runtime/components/media/components/WindowSlide.vue.d.ts +36 -0
  33. package/dist/runtime/composables/useStream.d.ts +15 -0
  34. package/dist/runtime/composables/useStream.mjs +89 -0
  35. package/dist/runtime/enums/general.d.ts +7 -0
  36. package/dist/runtime/enums/general.mjs +8 -0
  37. package/dist/runtime/models/conference.d.ts +17 -0
  38. package/dist/runtime/models/pagesConfig.d.ts +2 -0
  39. package/dist/runtime/store/presentations.d.ts +11 -0
  40. package/dist/runtime/store/presentations.mjs +10 -0
  41. package/package.json +3 -1
@@ -0,0 +1,263 @@
1
+ <script lang="ts" setup>
2
+ import { toRefs } from "vue";
3
+ import { storeToRefs } from "pinia";
4
+ import { find } from "lodash-es";
5
+ import { Conference } from "../../../models/conference";
6
+ import { ContentTabsClassObject } from "../../../@types/components";
7
+ import { SelectedContent } from "../../../enums/general";
8
+ import { useClassBinding } from "../../../composables/useClassBinding";
9
+
10
+ type Props = {
11
+ items?: Array<{ label: string; type: SelectedContent; content: string }>;
12
+ webcastConference: Conference;
13
+ classObject?: ContentTabsClassObject;
14
+ };
15
+
16
+ const props = withDefaults(defineProps<Props>(), {
17
+ items: Array<{
18
+ label: "";
19
+ type: SelectedContent.OVERVIEW;
20
+ content: "";
21
+ }>,
22
+ classObject: () => {
23
+ return {
24
+ container: "",
25
+ fullContainer: "",
26
+ mobileContainer: "",
27
+ mobileButtonContainer: "",
28
+ dropdownContainer: "",
29
+ tabList: "",
30
+ tabItem: "",
31
+ tabLink: "",
32
+ selectedTab: "",
33
+ mobileTabList: "",
34
+ mobileTabItem: "",
35
+ mobileTabLink: "",
36
+ };
37
+ },
38
+ });
39
+
40
+ const { items, webcastConference } = toRefs(props);
41
+
42
+ const { classBinding } = useClassBinding();
43
+
44
+ // reactive data
45
+ const { selectedContent } = storeToRefs(usePresentationsStore());
46
+ const tabOpen = ref<boolean>(false);
47
+
48
+ // computed
49
+ const hasAgendaTab = computed((): boolean => {
50
+ return find(items, { type: SelectedContent.AGENDA }, false);
51
+ });
52
+
53
+ const selectedTabClass = computed((): string => {
54
+ return props.classObject.selectedTab;
55
+ });
56
+
57
+ // methods
58
+ const tabToggle = () => {
59
+ tabOpen.value = !tabOpen.value;
60
+ };
61
+
62
+ const showItem = (_index: number) => {
63
+ let clickedItem = items.value[_index];
64
+
65
+ if (clickedItem.type === SelectedContent.URL) {
66
+ window.open(clickedItem.content);
67
+ } else {
68
+ selectedContent.value = clickedItem;
69
+ }
70
+ };
71
+
72
+ onMounted(() => {
73
+ if (items.value) {
74
+ selectedContent.value = items.value[0];
75
+ }
76
+ });
77
+
78
+ // ...mapState("playerConfig"),
79
+ // ...mapState(["agendaAlias"])
80
+ </script>
81
+
82
+ <template>
83
+ <div :class="classBinding(classObject, 'container', '')">
84
+ <div
85
+ :class="[
86
+ items.length >= 4 ? 'md:block' : 'sm:block',
87
+ classBinding(classObject, 'fullContainer', 'hidden tabs border-0'),
88
+ ]"
89
+ >
90
+ <ul
91
+ :class="
92
+ classBinding(
93
+ classObject,
94
+ 'tabList',
95
+ 'list-reset flex flex-row flex-wrap justify-start'
96
+ )
97
+ "
98
+ >
99
+ <li
100
+ v-for="(item, index) in items"
101
+ :key="index"
102
+ :class="[
103
+ { '-mb-px': selectedContent.label == item.label },
104
+ classBinding(classObject, 'tabItem', 'tab-items'),
105
+ ]"
106
+ >
107
+ <a
108
+ :class="[
109
+ selectedContent.label == item.label ? selectedTabClass : '',
110
+ ,
111
+ classBinding(
112
+ classObject,
113
+ 'tabLink',
114
+ 'primary-link inline-block py-2 px-2 cursor-pointer'
115
+ ),
116
+ ]"
117
+ @click.prevent="showItem(index)"
118
+ >{{ item.label }}</a
119
+ >
120
+ </li>
121
+ <li
122
+ v-if="webcastConference.agenda_enabled && !hasAgendaTab"
123
+ :class="classBinding(classObject, 'tabList', 'tab-items sm:ml-auto')"
124
+ >
125
+ <nuxt-link
126
+ :to="`/agenda/${webcastConference.id}`"
127
+ :class="
128
+ classBinding(
129
+ classObject,
130
+ 'tabItem',
131
+ 'primary-link inline-block py-2 px-1 cursor-pointer'
132
+ )
133
+ "
134
+ >{{ agendaAlias }}</nuxt-link
135
+ >
136
+ </li>
137
+ </ul>
138
+ </div>
139
+
140
+ <div
141
+ :class="[
142
+ items.length >= 4 ? 'md:hidden' : 'sm:hidden',
143
+ classBinding(classObject, 'mobileContainer', 'tabs border-0'),
144
+ ]"
145
+ >
146
+ <div
147
+ :class="classBinding(classObject, 'mobileButtonContainer', 'p-1 block')"
148
+ >
149
+ <button class="flex items-center px-3 py-2 mx-auto" @click="tabToggle">
150
+ <svg
151
+ class="fill-current h-3 w-3"
152
+ viewBox="0 0 20 20"
153
+ xmlns="http://www.w3.org/2000/svg"
154
+ >
155
+ <title>Menu</title>
156
+ <path d="M0 3h20v2H0V3zm0 6h20v2H0V9zm0 6h20v2H0v-2z" />
157
+ </svg>
158
+ </button>
159
+ </div>
160
+ <div
161
+ :class="[
162
+ tabOpen ? 'flex' : 'hidden',
163
+ classBinding(classObject, 'dropdownContainer', 'w-full'),
164
+ ]"
165
+ >
166
+ <ul
167
+ :class="
168
+ classBinding(
169
+ classObject,
170
+ 'mobileTabList',
171
+ 'flex-col self-center list-reset mx-auto'
172
+ )
173
+ "
174
+ >
175
+ <li
176
+ v-for="(item, index) in items"
177
+ :key="index"
178
+ :class="[
179
+ { '-mb-px': selectedContent.label == item.label },
180
+ classBinding(
181
+ classObject,
182
+ 'mobileTabItem',
183
+ 'tab-items text-center'
184
+ ),
185
+ ]"
186
+ >
187
+ <a
188
+ :class="[
189
+ selectedContent.label == item.label ? selectedTabClass : '',
190
+ classBinding(
191
+ classObject,
192
+ 'mobileTabLink',
193
+ 'primary-link inline-block py-2 px-2 cursor-pointer'
194
+ ),
195
+ ]"
196
+ @click.prevent="showItem(index)"
197
+ >{{ item.label }}</a
198
+ >
199
+ </li>
200
+ <li
201
+ v-if="webcastConference.agenda_enabled && !hasAgendaTab"
202
+ :class="
203
+ classBinding(
204
+ classObject,
205
+ 'mobileTabItem',
206
+ 'tab-items text-center'
207
+ )
208
+ "
209
+ >
210
+ <nuxt-link
211
+ :to="`/agenda/${webcastConference.id}`"
212
+ :class="
213
+ classBinding(
214
+ classObject,
215
+ 'mobileTabLink',
216
+ 'primary-link inline-block py-2 px-2 cursor-pointer'
217
+ )
218
+ "
219
+ >{{ agendaAlias }}</nuxt-link
220
+ >
221
+ </li>
222
+ </ul>
223
+ </div>
224
+ </div>
225
+ </div>
226
+ </template>
227
+
228
+ <style scoped>
229
+ .tab-items {
230
+ @apply mr-1 flex-1;
231
+ }
232
+ @screen sm {
233
+ .tab-items {
234
+ @apply flex-initial;
235
+ }
236
+ }
237
+
238
+ .active {
239
+ background: linear-gradient(0deg, rgb(80, 80, 80) 0%, rgb(180, 180, 180) 100%);
240
+ color: white;
241
+ font-weight: bold;
242
+ }
243
+
244
+ .tab-bar {
245
+ @apply flex flex-wrap;
246
+ background: rgb(226, 226, 226);
247
+ background: linear-gradient(0deg, rgb(226, 226, 226) 0%, rgb(244, 244, 244) 100%);
248
+ }
249
+ .tab-bar .close {
250
+ @apply block flex flex-1 justify-end;
251
+ }
252
+ .tab-bar .close:hover {
253
+ filter: opacity(0.7);
254
+ }
255
+
256
+ .tab-bar .item {
257
+ display: block;
258
+ float: left;
259
+ }
260
+ .tab-bar .item:hover {
261
+ background: linear-gradient(0deg, rgb(180, 180, 180) 0%, rgb(220, 220, 220) 100%);
262
+ }
263
+ </style>
@@ -0,0 +1,52 @@
1
+ <template>
2
+ <div v-if="documentArray && documentArray.length > 0" class="py-4 px-4 text-base md:text-md lg:text-lg leading-normal">
3
+ <ul class="list-reset">
4
+ <li v-for="(document, index) in documentArray" :key="index" class="py-2" :class="{'border-b-2 contrast-border' : index !== documentArray.length-1}">
5
+ <!-- fix file image -->
6
+ <!--<img src="/images/pdf.svg" class="inline-block icon" />-->
7
+ <a :href="document.url" class="no-underline font-semibold text-sm md:text-base" target="_blank">
8
+ <p class="leading-tight mb-0">
9
+ {{document.name}}
10
+ </p>
11
+ </a>
12
+ <p v-if="document.description" class="mt-2 mb-6">{{document.description}}</p>
13
+ </li>
14
+ </ul>
15
+ </div>
16
+ <div v-else class="text-grey-800 px-2 py-4">
17
+ <p class="text-base leading-normal font-light">There are no documents associated with this presentation.</p>
18
+ </div>
19
+ </template>
20
+
21
+ <script>
22
+ export default {
23
+ data() {
24
+ return {};
25
+ },
26
+ computed: {
27
+ documentArray() {
28
+ return this.$parent.currentPresentation.documents;
29
+ }
30
+ }
31
+ };
32
+ </script>
33
+
34
+ <style scoped>
35
+ .document-grid {
36
+ display: grid;
37
+ grid-template-columns: 1fr;
38
+ gap: 10px;
39
+ }
40
+ .document-grid .grid-item {
41
+ display: inline-block;
42
+ align-items: center;
43
+ align-self: center;
44
+ }
45
+ .document-grid .grid-item a:hover {
46
+ text-decoration: underline;
47
+ }
48
+
49
+ .icon {
50
+ width: 30px;
51
+ }
52
+ </style>
@@ -0,0 +1,7 @@
1
+ declare namespace _default {
2
+ function data(): {};
3
+ namespace computed {
4
+ function documentArray(): any;
5
+ }
6
+ }
7
+ export default _default;
@@ -0,0 +1,33 @@
1
+ <template functional></template>
2
+
3
+ <script>
4
+ export default {
5
+ props: {
6
+ url: {
7
+ type: String,
8
+ required: true
9
+ },
10
+ ajaxLoadingOptions: () => {
11
+ return {
12
+ progress: false,
13
+ transformRequest: (data, headers) => {
14
+ delete headers.common['Authorization'];
15
+ return data;
16
+ }
17
+ };
18
+ }
19
+ },
20
+ methods: {
21
+ getData() {
22
+ this.$axios
23
+ .get(url, this.ajaxLoadingOptions)
24
+ .then(response => {
25
+ this.$emit("data", response);
26
+ })
27
+ .catch(e => {
28
+ console.log("JSON does not exists.", e);
29
+ });
30
+ }
31
+ }
32
+ };
33
+ </script>
@@ -0,0 +1,16 @@
1
+ declare namespace _default {
2
+ namespace props {
3
+ namespace url {
4
+ const type: StringConstructor;
5
+ const required: boolean;
6
+ }
7
+ function ajaxLoadingOptions(): {
8
+ progress: boolean;
9
+ transformRequest: (data: any, headers: any) => any;
10
+ };
11
+ }
12
+ namespace methods {
13
+ function getData(): void;
14
+ }
15
+ }
16
+ export default _default;
@@ -0,0 +1,104 @@
1
+ <script lang="ts" setup>
2
+ import { toRefs } from "vue";
3
+ import { Conference, Presentation } from "../../../models/conference";
4
+ import {
5
+ MediaContainerClassObj,
6
+ MediaContainerCompObj,
7
+ WebcastPlayerClassObj,
8
+ } from "../../../@types/components";
9
+ import { useV3plusCommonModule } from "../../../composables/useV3plusCommonModule";
10
+ import { useStream } from "../../../composables/useStream";
11
+ import { useClassBinding } from "../../../composables/useClassBinding";
12
+
13
+ const commonModule = useV3plusCommonModule();
14
+
15
+ type Props = {
16
+ webcastConference: Conference;
17
+ classObject?: MediaContainerClassObj;
18
+ };
19
+
20
+ const props = withDefaults(defineProps<Props>(), {
21
+ classObject: () => {
22
+ return {
23
+ container: "",
24
+ components: ref<MediaContainerCompObj>({
25
+ webcastPlayer: ref<WebcastPlayerClassObj>({}),
26
+ }),
27
+ };
28
+ },
29
+ });
30
+
31
+ const { webcastConference } = toRefs(props);
32
+
33
+ const { classBinding } = useClassBinding();
34
+
35
+ // emits
36
+ const emit = defineEmits<{
37
+ (event: string, value: Presentation): void;
38
+ }>();
39
+
40
+ const { currentStreamData, currentPresentation } = useStream(
41
+ "us-west-2",
42
+ "staging",
43
+ Number(webcastConference.value.id),
44
+ emit
45
+ );
46
+ </script>
47
+
48
+ <template>
49
+ <div :class="classBinding(classObject, 'container', 'media-container')">
50
+ <CommonWebcastVideoPlayer
51
+ ref="mediaPlayer"
52
+ :stream="currentStreamData"
53
+ :presentation="currentPresentation"
54
+ :class-object="classObject.components.webcastPlayer"
55
+ ></CommonWebcastVideoPlayer>
56
+ </div>
57
+ </template>
58
+
59
+ <style scoped>
60
+ .media-container {
61
+ display: grid;
62
+ grid-template-columns: var(--media-template-columns-default);
63
+ column-gap: 4px;
64
+ grid-template-rows: auto;
65
+ grid-column: 2;
66
+ grid-row: 2;
67
+ }
68
+
69
+ .media-item {
70
+ display: grid;
71
+ }
72
+
73
+ @screen lg {
74
+ img.normal {
75
+ max-height: 65vh;
76
+ }
77
+ }
78
+
79
+ .expand-overlay {
80
+ display: none;
81
+ font-size: 1em;
82
+ line-height: 1em;
83
+ opacity: 0;
84
+ width: 100%;
85
+ height: 100%;
86
+ z-index: 100;
87
+ position: absolute;
88
+ transition: 0.6s ease;
89
+ text-align: right;
90
+ }
91
+
92
+ @media (min-width: 900px) {
93
+ .media-container {
94
+ grid-template-columns: var(--media-template-columns-large);
95
+ }
96
+ .expand-overlay {
97
+ @apply p-2;
98
+ display: block;
99
+ }
100
+ .expand-overlay:hover {
101
+ opacity: 0.7;
102
+ }
103
+ }
104
+ </style>
@@ -0,0 +1,51 @@
1
+ <script lang="ts" setup>
2
+ import { Presentation } from "../../../models/conference";
3
+ import { OverviewPanelClassObj } from "../../../@types/components";
4
+ import { useClassBinding } from "../../../composables/useClassBinding";
5
+ type Props = {
6
+ presentation: Presentation;
7
+ classObject?: OverviewPanelClassObj;
8
+ };
9
+
10
+ const props = withDefaults(defineProps<Props>(), {
11
+ classObject: () => {
12
+ return {
13
+ container: "",
14
+ htmlElement: "",
15
+ noOverviewElement: "",
16
+ };
17
+ },
18
+ });
19
+
20
+ const { presentation } = toRefs(props);
21
+
22
+ const { classBinding } = useClassBinding();
23
+
24
+ // computed
25
+ const sessionOverview = computed((): string | null => {
26
+ return presentation.value.description ? presentation.value.description : null;
27
+ });
28
+ </script>
29
+
30
+ <template>
31
+ <div
32
+ :class="
33
+ classBinding(
34
+ classObject,
35
+ 'container',
36
+ 'text-grey-800 px-2 py-4 text-base leading-normal font-light'
37
+ )
38
+ "
39
+ >
40
+ <span
41
+ v-if="sessionOverview"
42
+ :class="classBinding(classObject, 'htmlElement', '')"
43
+ v-html="sessionOverview"
44
+ ></span>
45
+ <p v-else :class="classBinding(classObject, 'noOverviewElement', '')">
46
+ There is no overview for this presentation.
47
+ </p>
48
+ </div>
49
+ </template>
50
+
51
+ <style scoped></style>
@@ -0,0 +1,65 @@
1
+ <template>
2
+ <span v-if="presenterLevelArray['presenters_all'].presenters.length > 0">
3
+ <presenters-detail
4
+ :presenters-by-level="presenterLevelArray"
5
+ :pres-format="layoutFormat"
6
+ :item-width="itemWidth"
7
+ :show-levels="false"
8
+ :is-compact="isCompact"
9
+ ></presenters-detail>
10
+ </span>
11
+ <div v-else class="text-grey-800 px-2 py-4">
12
+ <p class="text-base leading-normal font-light">There are no presenters associated with this presentation.</p>
13
+ </div>
14
+ </template>
15
+
16
+ <script>
17
+ import PresentersDetail from '@/components/presenters/PresentersDetail';
18
+
19
+ export default {
20
+ props: {
21
+ itemWidth: {
22
+ type: String,
23
+ default: '120'
24
+ },
25
+ layoutFormat: {
26
+ type: String,
27
+ default: 'PresenterItemGrid'
28
+ },
29
+ isCompact: {
30
+ default: true,
31
+ type: Boolean
32
+ }
33
+ },
34
+ components: {
35
+ PresentersDetail
36
+ },
37
+ provide() {
38
+ return {
39
+ itemWidth: this.itemWidth,
40
+ imageStyle: this.imageStyle,
41
+ };
42
+ },
43
+ computed: {
44
+ presenterLevelArray() {
45
+ let returnArray = [];
46
+ returnArray['presenters_all'] = { 'presenters': _.sortBy(this.$parent.currentPresentation.presenters, function (presenter) {
47
+ return presenter.pivot.order;
48
+ }) };
49
+ return returnArray;
50
+ }
51
+ }
52
+ };
53
+ </script>
54
+
55
+ <style scoped>
56
+ .presenter-grid {
57
+ display: grid;
58
+ grid-template-columns: 100px 1fr;
59
+ gap: 10px;
60
+ }
61
+ .presenter-grid .grid-item {
62
+ align-items: center;
63
+ align-self: center;
64
+ }
65
+ </style>
@@ -0,0 +1,32 @@
1
+ declare namespace _default {
2
+ namespace props {
3
+ namespace itemWidth {
4
+ export const type: StringConstructor;
5
+ const _default: string;
6
+ export { _default as default };
7
+ }
8
+ namespace layoutFormat {
9
+ const type_1: StringConstructor;
10
+ export { type_1 as type };
11
+ const _default_1: string;
12
+ export { _default_1 as default };
13
+ }
14
+ namespace isCompact {
15
+ const _default_2: boolean;
16
+ export { _default_2 as default };
17
+ const type_2: BooleanConstructor;
18
+ export { type_2 as type };
19
+ }
20
+ }
21
+ namespace components {
22
+ export { PresentersDetail };
23
+ }
24
+ function provide(): {
25
+ itemWidth: any;
26
+ imageStyle: any;
27
+ };
28
+ namespace computed {
29
+ function presenterLevelArray(): any[];
30
+ }
31
+ }
32
+ export default _default;