@icvdeveloper/common-module 0.0.76 → 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 (106) hide show
  1. package/README.md +6 -6
  2. package/dist/module.json +1 -1
  3. package/dist/module.mjs +5 -0
  4. package/dist/runtime/@types/components.d.ts +89 -1
  5. package/dist/runtime/assets/svg/answer.svg +14 -14
  6. package/dist/runtime/assets/svg/avatar.svg +1 -1
  7. package/dist/runtime/assets/svg/bell-icon.svg +3 -3
  8. package/dist/runtime/assets/svg/checkmark-icon.svg +1 -1
  9. package/dist/runtime/assets/svg/close-icon.svg +1 -1
  10. package/dist/runtime/assets/svg/icon-avatar.svg +1 -1
  11. package/dist/runtime/assets/svg/icon-chevron.svg +4 -4
  12. package/dist/runtime/assets/svg/icon-circle-plus.svg +1 -1
  13. package/dist/runtime/assets/svg/icon-close.svg +1 -1
  14. package/dist/runtime/assets/svg/icon-info.svg +2 -2
  15. package/dist/runtime/assets/svg/icon-new-window.svg +11 -11
  16. package/dist/runtime/assets/svg/icon-offline.svg +3 -3
  17. package/dist/runtime/assets/svg/icon-online.svg +3 -3
  18. package/dist/runtime/assets/svg/icon-person.svg +2 -2
  19. package/dist/runtime/assets/svg/icon-play.svg +2 -2
  20. package/dist/runtime/assets/svg/icon-star-filled.svg +29 -29
  21. package/dist/runtime/assets/svg/icon-star.svg +24 -24
  22. package/dist/runtime/assets/svg/icon-video-chat.svg +14 -14
  23. package/dist/runtime/assets/svg/icon-website.svg +2 -2
  24. package/dist/runtime/assets/svg/icon-zoom.svg +10 -10
  25. package/dist/runtime/assets/svg/notification-icon.svg +32 -32
  26. package/dist/runtime/assets/svg/offline-icon.svg +1 -1
  27. package/dist/runtime/assets/svg/online-icon.svg +3 -3
  28. package/dist/runtime/assets/svg/peer2peer.svg +3 -3
  29. package/dist/runtime/assets/svg/phone.svg +1 -1
  30. package/dist/runtime/assets/svg/plus-icon.svg +1 -1
  31. package/dist/runtime/assets/svg/red-icon.svg +3 -3
  32. package/dist/runtime/assets/svg/reject.svg +14 -14
  33. package/dist/runtime/assets/svg/search-icon.svg +3 -3
  34. package/dist/runtime/components/affiliates/AffiliatePage.vue +17 -17
  35. package/dist/runtime/components/agenda/AgendaList.vue +234 -112
  36. package/dist/runtime/components/agenda/AgendaTabbed.vue +309 -309
  37. package/dist/runtime/components/agenda/components/AgendaListAccordion.vue +53 -26
  38. package/dist/runtime/components/agenda/components/Calendar.vue +89 -89
  39. package/dist/runtime/components/agenda/components/InfoLink.vue +56 -56
  40. package/dist/runtime/components/agenda/components/PlayIcon.vue +49 -49
  41. package/dist/runtime/components/agenda/components/PresentationLink.vue +137 -137
  42. package/dist/runtime/components/agenda/components/Sponsor.vue +132 -132
  43. package/dist/runtime/components/auth/LoginFullWidth.vue +78 -78
  44. package/dist/runtime/components/auth/PasswordReset.vue +60 -60
  45. package/dist/runtime/components/auth/Registration.vue +27 -27
  46. package/dist/runtime/components/auth/Ucc.vue +52 -52
  47. package/dist/runtime/components/core/Accordion.vue +97 -97
  48. package/dist/runtime/components/core/CountdownTimer.vue +308 -308
  49. package/dist/runtime/components/core/DynamicHtml.vue +1 -1
  50. package/dist/runtime/components/core/Modal.vue +111 -111
  51. package/dist/runtime/components/core/Navbar.vue +154 -154
  52. package/dist/runtime/components/core/SvgIcon.vue +151 -151
  53. package/dist/runtime/components/core/ZoomModal.vue +37 -37
  54. package/dist/runtime/components/events/EventHeader.vue +133 -133
  55. package/dist/runtime/components/events/ListEvents.vue +521 -521
  56. package/dist/runtime/components/forms/AlertBox.vue +21 -21
  57. package/dist/runtime/components/forms/ErrorField.vue +17 -17
  58. package/dist/runtime/components/forms/Message.vue +27 -27
  59. package/dist/runtime/components/forms/SearchInput.vue +38 -38
  60. package/dist/runtime/components/forms/SupportForm.vue +112 -112
  61. package/dist/runtime/components/forms/SwitchInput.vue +42 -42
  62. package/dist/runtime/components/forms/TextArea.vue +26 -26
  63. package/dist/runtime/components/forms/TextInput.vue +28 -28
  64. package/dist/runtime/components/layouts/Accordion.vue +78 -78
  65. package/dist/runtime/components/media/PlayerAndContentContainer.vue +170 -0
  66. package/dist/runtime/components/media/WebcastVideoPlayer.vue +167 -0
  67. package/dist/runtime/components/media/components/AgendaPanel.vue +53 -0
  68. package/dist/runtime/components/media/components/CeCreditNotification.vue +99 -0
  69. package/dist/runtime/components/media/components/CeCreditNotification.vue.d.ts +28 -0
  70. package/dist/runtime/components/media/components/ContentAccordion.vue +65 -0
  71. package/dist/runtime/components/media/components/ContentAccordion.vue.d.ts +29 -0
  72. package/dist/runtime/components/media/components/ContentArea.vue +175 -0
  73. package/dist/runtime/components/media/components/ContentTabs.vue +263 -0
  74. package/dist/runtime/components/media/components/DocumentsPanel.vue +52 -0
  75. package/dist/runtime/components/media/components/DocumentsPanel.vue.d.ts +7 -0
  76. package/dist/runtime/components/media/components/JsonApi.vue +33 -0
  77. package/dist/runtime/components/media/components/JsonApi.vue.d.ts +16 -0
  78. package/dist/runtime/components/media/components/MediaContainer.vue +104 -0
  79. package/dist/runtime/components/media/components/OverviewPanel.vue +51 -0
  80. package/dist/runtime/components/media/components/PresentersPanel.vue +65 -0
  81. package/dist/runtime/components/media/components/PresentersPanel.vue.d.ts +32 -0
  82. package/dist/runtime/components/media/components/SessionReporting.vue +96 -0
  83. package/dist/runtime/components/media/components/SessionReporting.vue.d.ts +35 -0
  84. package/dist/runtime/components/media/components/SponsorsPanel.vue +85 -0
  85. package/dist/runtime/components/media/components/SponsorsPanel.vue.d.ts +27 -0
  86. package/dist/runtime/components/media/components/WindowContent.vue +118 -0
  87. package/dist/runtime/components/media/components/WindowContent.vue.d.ts +50 -0
  88. package/dist/runtime/components/media/components/WindowSlide.vue +92 -0
  89. package/dist/runtime/components/media/components/WindowSlide.vue.d.ts +36 -0
  90. package/dist/runtime/components/presenters/PresenterListing.vue +164 -164
  91. package/dist/runtime/components/presenters/PresenterModal.vue +223 -223
  92. package/dist/runtime/components/profile/Profile.vue +149 -149
  93. package/dist/runtime/components/profile/components/Sidebar.vue +27 -27
  94. package/dist/runtime/components/profile/components/SidebarNavItem.vue +39 -39
  95. package/dist/runtime/components/profile/tabs/Favorites.vue +21 -21
  96. package/dist/runtime/components/profile/tabs/GeneralInformation.vue +122 -122
  97. package/dist/runtime/components/profile/tabs/ProfileImage.vue +75 -75
  98. package/dist/runtime/components/support/FAQAccordion.vue +140 -140
  99. package/dist/runtime/composables/useStream.d.ts +15 -0
  100. package/dist/runtime/composables/useStream.mjs +89 -0
  101. package/dist/runtime/enums/general.d.ts +7 -0
  102. package/dist/runtime/enums/general.mjs +8 -0
  103. package/dist/runtime/models/conference.d.ts +17 -0
  104. package/dist/runtime/store/presentations.d.ts +11 -0
  105. package/dist/runtime/store/presentations.mjs +10 -0
  106. package/package.json +1 -1
@@ -0,0 +1,65 @@
1
+ <template>
2
+ <div>
3
+ <accordion :content-object="currentPresentation" v-for="item in tabArray" :tab-content="item">
4
+ <div class="content flex flex-1 accordion-slot overflow-x-hidden">
5
+ <overview-panel v-if="item.type == 'overview'"></overview-panel>
6
+ <presenters-panel v-if="item.type == 'presenters'" layout-format="PresenterItemCard" item-width="90"></presenters-panel>
7
+ <documents-panel v-if="item.type == 'documents'"></documents-panel>
8
+ <sponsors-panel v-if="item.type == 'sponsors'"></sponsors-panel>
9
+ <chat v-if="item.type == 'chatroom'"></chat>
10
+ <dynamic-html v-if="item.type == 'html'" :template="item.content"></dynamic-html>
11
+ </div>
12
+ </accordion>
13
+ </div>
14
+ </template>
15
+
16
+ <script>
17
+ import { mapState } from "vuex";
18
+
19
+ import Accordion from '@/components/common/Accordion';
20
+ import OverviewPanel from "./OverviewPanel";
21
+ import PresentersPanel from "./PresentersPanel";
22
+ import DocumentsPanel from "./DocumentsPanel";
23
+ import SponsorsPanel from "./SponsorsPanel";
24
+ import Chat from "@/components/common/Chat";
25
+
26
+ export default {
27
+ components: {
28
+ Accordion,
29
+ OverviewPanel,
30
+ PresentersPanel,
31
+ DocumentsPanel,
32
+ SponsorsPanel,
33
+ Chat
34
+ },
35
+ data() {
36
+ return {};
37
+ },
38
+ props: {
39
+ currentPresentation: {
40
+ type: Object,
41
+ default: () => {
42
+ return {};
43
+ }
44
+ },
45
+ tabArray: {
46
+ type: Array,
47
+ default: () => {
48
+ return [];
49
+ }
50
+ }
51
+ },
52
+ computed: {
53
+ ...mapState("playerConfig", ["selectedContent"])
54
+ },
55
+ methods: {
56
+ }
57
+ };
58
+ </script>
59
+
60
+ <style>
61
+ .accordion-slot {
62
+ max-height: 32rem;
63
+ overflow-y: scroll;
64
+ }
65
+ </style>
@@ -0,0 +1,29 @@
1
+ declare namespace _default {
2
+ namespace components {
3
+ export { Accordion };
4
+ export { OverviewPanel };
5
+ export { PresentersPanel };
6
+ export { DocumentsPanel };
7
+ export { SponsorsPanel };
8
+ export { Chat };
9
+ }
10
+ function data(): {};
11
+ namespace props {
12
+ namespace currentPresentation {
13
+ export const type: ObjectConstructor;
14
+ function _default(): {};
15
+ export { _default as default };
16
+ }
17
+ namespace tabArray {
18
+ const type_1: ArrayConstructor;
19
+ export { type_1 as type };
20
+ function _default_1(): never[];
21
+ export { _default_1 as default };
22
+ }
23
+ }
24
+ namespace computed {
25
+ const selectedContent: import("vuex").Computed;
26
+ }
27
+ const methods: {};
28
+ }
29
+ export default _default;
@@ -0,0 +1,175 @@
1
+ <script lang="ts" setup>
2
+ import { toRefs } from "vue";
3
+ import { storeToRefs } from "pinia";
4
+ import { get, filter } from "lodash-es";
5
+ import { SelectedContent } from "../../../enums/general";
6
+ import {
7
+ ContentAreaClassObj,
8
+ ContentAreaCompObj,
9
+ OverviewPanelClassObj,
10
+ AgendaPanelClassObj,
11
+ } from "../../../@types/components";
12
+ import { Conference, Presentation, Sponsor } from "../../../models/conference";
13
+ import { useClassBinding } from "../../../composables/useClassBinding";
14
+ import { useTemplateConfigsStore } from "../../../store";
15
+
16
+ type Props = {
17
+ selectedContent?: { label: string; type: SelectedContent; content: string };
18
+ expandEnabled?: boolean;
19
+ presentation: Presentation;
20
+ webcastConference: Conference;
21
+ classObject?: ContentAreaClassObj;
22
+ };
23
+
24
+ const props = withDefaults(defineProps<Props>(), {
25
+ selectedContent: () => {
26
+ return { label: "Overview", type: SelectedContent.OVERVIEW, content: "" };
27
+ },
28
+ expandEnabled: false,
29
+ classObject: () => {
30
+ return {
31
+ container: "",
32
+ htmlElement: "",
33
+ trackHtmlElement: "",
34
+ noTrackHtmlElement: "",
35
+ noTrackHtmlText: "",
36
+ components: ref<ContentAreaCompObj>({
37
+ overviewPanel: ref<OverviewPanelClassObj>({}),
38
+ agendaPanel: ref<AgendaPanelClassObj>({}),
39
+ }),
40
+ };
41
+ },
42
+ });
43
+
44
+ const { expandEnabled, presentation, webcastConference } = toRefs(props);
45
+
46
+ const { classBinding } = useClassBinding();
47
+
48
+ const { pagesConfigValue } = storeToRefs(useTemplateConfigsStore());
49
+
50
+ // reactive data
51
+ let sponsors = ref<Array<Sponsor>>([]);
52
+
53
+ // computed
54
+ const trackEmbedHtml = computed((): string | null => {
55
+ get(presentation, "tracks[0].embed_html", null);
56
+ });
57
+
58
+ // methods
59
+ const getFeaturedSponsors = () => {
60
+ const featuredSponsorLevel = get(
61
+ pagesConfigValue,
62
+ "webcast.featured_sponsor_level.value",
63
+ 0
64
+ );
65
+ if (featuredSponsorLevel != 0) {
66
+ const url = `conferences/${webcastConference.value.id}/affiliates?filters[level]=${featuredSponsorLevel}`;
67
+ fetch(url)
68
+ .then((response) => {
69
+ return response.json();
70
+ })
71
+ .then((data) => {
72
+ sponsors = filter(data, { role: "sponsor" });
73
+ });
74
+ }
75
+ };
76
+
77
+ // mounted
78
+ onMounted(() => {
79
+ getFeaturedSponsors();
80
+ });
81
+ </script>
82
+
83
+ <template>
84
+ <div :class="classBinding(classObject, 'container', 'flex flex-col')">
85
+ <CommonComponentsOverviewPanel
86
+ v-if="selectedContent.type == 'overview'"
87
+ :class="
88
+ classBinding(
89
+ classObject.components.overviewPanel,
90
+ 'container',
91
+ 'overflow-y-scroll no-scrollbar h-full'
92
+ )
93
+ "
94
+ :presentation="presentation"
95
+ :class-object="classObject.components.overviewPanel"
96
+ ></CommonComponentsOverviewPanel>
97
+ <CommonComponentsAgendaPanel
98
+ v-if="selectedContent.type == 'agenda'"
99
+ :class="
100
+ classBinding(
101
+ classObject.components.agendaPanel,
102
+ 'container',
103
+ 'overflow-y-scroll no-scrollbar h-full'
104
+ )
105
+ "
106
+ :conference="webcastConference"
107
+ :class-object="classObject.components.agendaPanel"
108
+ ></CommonComponentsAgendaPanel>
109
+ <span
110
+ v-if="selectedContent.type == 'html'"
111
+ :class="
112
+ classBinding(
113
+ classObject,
114
+ 'htmlElement',
115
+ 'overflow-y-scroll no-scrollbar h-full'
116
+ )
117
+ "
118
+ v-html="selectedContent.content"
119
+ ></span>
120
+ <template v-if="selectedContent.type == 'track_html'">
121
+ <span
122
+ v-if="trackEmbedHtml != null"
123
+ :class="
124
+ classBinding(
125
+ classObject,
126
+ 'trackHtmlElement',
127
+ 'overflow-y-scroll no-scrollbar h-full'
128
+ )
129
+ "
130
+ v-html="trackEmbedHtml"
131
+ ></span>
132
+ <div
133
+ v-if="trackEmbedHtml === null"
134
+ :class="
135
+ classBinding(
136
+ classObject,
137
+ 'noTrackHtmlElement',
138
+ 'text-grey-800 px-2 py-4'
139
+ )
140
+ "
141
+ >
142
+ <p
143
+ :class="
144
+ classBinding(
145
+ classObject,
146
+ 'noTrackHtmlText',
147
+ 'text-base leading-normal font-light'
148
+ )
149
+ "
150
+ >
151
+ There is no additional content for this track.
152
+ </p>
153
+ </div>
154
+ </template>
155
+ </div>
156
+ </template>
157
+
158
+ <style scoped>
159
+ .content {
160
+ position: relative;
161
+ }
162
+
163
+ .content-expand-overlay {
164
+ justify-content: flex-end;
165
+ align-items: flex-start;
166
+ font-size: 1em;
167
+ line-height: 1em;
168
+ z-index: 40;
169
+ position: absolute;
170
+ transition: 0.4s ease;
171
+ }
172
+ .content-expand-overlay:hover {
173
+ opacity: 0.7;
174
+ }
175
+ </style>
@@ -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;