@icvdeveloper/common-module 0.0.75 → 0.0.76

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 (73) hide show
  1. package/README.md +6 -6
  2. package/dist/module.json +1 -1
  3. package/dist/runtime/assets/svg/answer.svg +14 -14
  4. package/dist/runtime/assets/svg/avatar.svg +1 -1
  5. package/dist/runtime/assets/svg/bell-icon.svg +3 -3
  6. package/dist/runtime/assets/svg/checkmark-icon.svg +1 -1
  7. package/dist/runtime/assets/svg/close-icon.svg +1 -1
  8. package/dist/runtime/assets/svg/icon-avatar.svg +1 -1
  9. package/dist/runtime/assets/svg/icon-chevron.svg +4 -4
  10. package/dist/runtime/assets/svg/icon-circle-plus.svg +1 -1
  11. package/dist/runtime/assets/svg/icon-close.svg +1 -1
  12. package/dist/runtime/assets/svg/icon-info.svg +2 -2
  13. package/dist/runtime/assets/svg/icon-new-window.svg +11 -11
  14. package/dist/runtime/assets/svg/icon-offline.svg +3 -3
  15. package/dist/runtime/assets/svg/icon-online.svg +3 -3
  16. package/dist/runtime/assets/svg/icon-person.svg +2 -2
  17. package/dist/runtime/assets/svg/icon-play.svg +2 -2
  18. package/dist/runtime/assets/svg/icon-star-filled.svg +29 -29
  19. package/dist/runtime/assets/svg/icon-star.svg +24 -24
  20. package/dist/runtime/assets/svg/icon-video-chat.svg +14 -14
  21. package/dist/runtime/assets/svg/icon-website.svg +2 -2
  22. package/dist/runtime/assets/svg/icon-zoom.svg +10 -10
  23. package/dist/runtime/assets/svg/notification-icon.svg +32 -32
  24. package/dist/runtime/assets/svg/offline-icon.svg +1 -1
  25. package/dist/runtime/assets/svg/online-icon.svg +3 -3
  26. package/dist/runtime/assets/svg/peer2peer.svg +3 -3
  27. package/dist/runtime/assets/svg/phone.svg +1 -1
  28. package/dist/runtime/assets/svg/plus-icon.svg +1 -1
  29. package/dist/runtime/assets/svg/red-icon.svg +3 -3
  30. package/dist/runtime/assets/svg/reject.svg +14 -14
  31. package/dist/runtime/assets/svg/search-icon.svg +3 -3
  32. package/dist/runtime/components/affiliates/AffiliatePage.vue +17 -17
  33. package/dist/runtime/components/agenda/AgendaList.vue +112 -104
  34. package/dist/runtime/components/agenda/AgendaTabbed.vue +309 -300
  35. package/dist/runtime/components/agenda/components/AgendaListAccordion.vue +26 -26
  36. package/dist/runtime/components/agenda/components/Calendar.vue +89 -0
  37. package/dist/runtime/components/agenda/components/InfoLink.vue +56 -56
  38. package/dist/runtime/components/agenda/components/PlayIcon.vue +49 -49
  39. package/dist/runtime/components/agenda/components/PresentationLink.vue +137 -137
  40. package/dist/runtime/components/agenda/components/Sponsor.vue +132 -132
  41. package/dist/runtime/components/auth/LoginFullWidth.vue +78 -78
  42. package/dist/runtime/components/auth/PasswordReset.vue +60 -60
  43. package/dist/runtime/components/auth/Registration.vue +27 -27
  44. package/dist/runtime/components/auth/Ucc.vue +52 -52
  45. package/dist/runtime/components/core/Accordion.vue +97 -97
  46. package/dist/runtime/components/core/CountdownTimer.vue +308 -308
  47. package/dist/runtime/components/core/DynamicHtml.vue +1 -1
  48. package/dist/runtime/components/core/Modal.vue +111 -111
  49. package/dist/runtime/components/core/Navbar.vue +154 -154
  50. package/dist/runtime/components/core/SvgIcon.vue +151 -151
  51. package/dist/runtime/components/core/ZoomModal.vue +37 -37
  52. package/dist/runtime/components/events/EventHeader.vue +133 -133
  53. package/dist/runtime/components/events/ListEvents.vue +521 -521
  54. package/dist/runtime/components/forms/AlertBox.vue +21 -21
  55. package/dist/runtime/components/forms/ErrorField.vue +17 -17
  56. package/dist/runtime/components/forms/Message.vue +27 -27
  57. package/dist/runtime/components/forms/SearchInput.vue +38 -38
  58. package/dist/runtime/components/forms/SupportForm.vue +112 -112
  59. package/dist/runtime/components/forms/SwitchInput.vue +42 -42
  60. package/dist/runtime/components/forms/TextArea.vue +26 -26
  61. package/dist/runtime/components/forms/TextInput.vue +28 -28
  62. package/dist/runtime/components/layouts/Accordion.vue +78 -78
  63. package/dist/runtime/components/presenters/PresenterListing.vue +164 -164
  64. package/dist/runtime/components/presenters/PresenterModal.vue +223 -223
  65. package/dist/runtime/components/profile/Profile.vue +149 -149
  66. package/dist/runtime/components/profile/components/Sidebar.vue +27 -27
  67. package/dist/runtime/components/profile/components/SidebarNavItem.vue +39 -39
  68. package/dist/runtime/components/profile/tabs/Favorites.vue +21 -21
  69. package/dist/runtime/components/profile/tabs/GeneralInformation.vue +122 -122
  70. package/dist/runtime/components/profile/tabs/ProfileImage.vue +75 -75
  71. package/dist/runtime/components/support/FAQAccordion.vue +140 -140
  72. package/dist/runtime/models/pagesConfig.d.ts +2 -0
  73. package/package.json +3 -1
@@ -1,26 +1,26 @@
1
- <script lang="ts" setup>
2
- import { ref } from "vue";
3
-
4
- const expanded = ref<boolean>(false);
5
-
6
- // methods
7
- const toggle = () => {
8
- expanded.value = !expanded.value;
9
- };
10
- </script>
11
-
12
- <template>
13
- <div>
14
- <div class="font-bold mt-2">
15
- <button class="outline-none" @click="toggle">
16
- <slot name="header"></slot>
17
- </button>
18
- </div>
19
-
20
- <transition name="slide" mode="out-in">
21
- <div v-show="expanded">
22
- <slot name="body" />
23
- </div>
24
- </transition>
25
- </div>
26
- </template>
1
+ <script lang="ts" setup>
2
+ import { ref } from "vue";
3
+
4
+ const expanded = ref<boolean>(false);
5
+
6
+ // methods
7
+ const toggle = () => {
8
+ expanded.value = !expanded.value;
9
+ };
10
+ </script>
11
+
12
+ <template>
13
+ <div>
14
+ <div class="font-bold mt-2">
15
+ <button class="outline-none" @click="toggle">
16
+ <slot name="header"></slot>
17
+ </button>
18
+ </div>
19
+
20
+ <transition name="slide" mode="out-in">
21
+ <div v-show="expanded">
22
+ <slot name="body" />
23
+ </div>
24
+ </transition>
25
+ </div>
26
+ </template>
@@ -0,0 +1,89 @@
1
+ <script lang="ts" setup>
2
+ import { ref, toRefs, computed } from "vue";
3
+ import { storeToRefs } from "pinia";
4
+ import { get } from "lodash-es";
5
+ import { DateTime } from 'luxon';
6
+ import { useTemplateConfigsStore } from "../../../store";
7
+ import 'add-to-calendar-button';
8
+ import { Conference } from "../../../models/conference";
9
+ import { Presentation } from "../../../models/conference";
10
+
11
+ type Props = {
12
+ conference: Conference;
13
+ presentation: Presentation;
14
+ };
15
+
16
+ const props = defineProps<Props>();
17
+
18
+ const { conference, presentation } = toRefs(props);
19
+
20
+ const { pagesConfigValue } = storeToRefs(useTemplateConfigsStore());
21
+
22
+ // Computed
23
+ const showAddToGoogleCalendar = computed((): boolean => {
24
+ return pagesConfigValue.value("agenda.add_to_google_calendar", false);
25
+ });
26
+
27
+ const showAddToMicrosoftCalendar = computed((): boolean => {
28
+ return pagesConfigValue.value("agenda.add_to_microsoft_calendar", false);
29
+ });
30
+
31
+ const presStartDate = computed((): string => {
32
+ return DateTime.fromSQL(
33
+ presentation.value.date,
34
+ { zone: conference.timezone }
35
+ ).toFormat("yyyy-MM-dd");
36
+ });
37
+
38
+ const presStartTime = computed((): string => {
39
+ return DateTime.fromSQL(
40
+ presentation.value.date,
41
+ { zone: conference.timezone }
42
+ ).toFormat("HH:mm");
43
+ });
44
+
45
+ const presEndTime = computed((): string => {
46
+ let duration: number = get(presentation.value, "duration", 3600) // default to 60 min
47
+ return DateTime.fromSQL(
48
+ presentation.value.date,
49
+ { zone: conference.timezone }
50
+ ).plus(duration * 1000).toFormat("HH:mm");
51
+ });
52
+
53
+ const calendarOptions = computed((): string => {
54
+ let opts = [];
55
+ if (showAddToGoogleCalendar) { opts.push('Google'); }
56
+ if (showAddToMicrosoftCalendar) { opts.push('iCal'); }
57
+ let optsQuoted = opts.map(opt => `'${opt}'`);
58
+ return optsQuoted.join(',');
59
+ });
60
+
61
+ const cssPath = computed((): string => {
62
+ // atcb.css required in template/playground public folder
63
+ return window.location.origin + "/atcb.css";
64
+ });
65
+
66
+ </script>
67
+
68
+ <template>
69
+ <div>
70
+ <add-to-calendar-button
71
+ :name="presentation.name"
72
+ :description="presentation.description"
73
+ :startDate="presStartDate"
74
+ :startTime="presStartTime"
75
+ :endTime="presEndTime"
76
+ :timeZone="conference.timezone"
77
+ :location="conference.location"
78
+ listStyle="dropdown"
79
+ trigger="click"
80
+ lightMode="bodyScheme"
81
+ buttonStyle="custom"
82
+ :customCss="cssPath"
83
+ hideIconButton
84
+ hideBackground
85
+ hideCheckmark
86
+ :options="calendarOptions"
87
+ ></add-to-calendar-button>
88
+ </div>
89
+ </template>
@@ -1,56 +1,56 @@
1
- <script lang="ts" setup>
2
- import { ref, toRefs, computed } from "vue";
3
- import { Presentation } from "../../../models/conference";
4
-
5
- type Props = {
6
- linkText: string;
7
- presentation: Presentation;
8
- useIcon?: boolean;
9
- newLine?: boolean;
10
- };
11
-
12
- const props = withDefaults(defineProps<Props>(), {
13
- useIcon: true,
14
- newLine: false,
15
- });
16
-
17
- // data
18
- const { useIcon, newLine, linkText, presentation } = toRefs(props);
19
- const showDescModal = ref<boolean>(false);
20
-
21
- // computed
22
- const getLinkText = computed(() => {
23
- return linkText.value.length > 0 ? linkText.value : "Session Details";
24
- });
25
- </script>
26
-
27
- <template>
28
- <span>
29
- <a class="cursor-pointer" @click="showDescModal = true">
30
- <CommonSvgIcon
31
- v-if="useIcon"
32
- icon="info"
33
- class="align-middle"
34
- style="display: inline-block; margin-bottom: 2px"
35
- :icon-width="'16px'"
36
- ></CommonSvgIcon>
37
- <span v-else class="text-xs" :class="{ 'new-line': newLine }">{{
38
- getLinkText
39
- }}</span>
40
- </a>
41
-
42
- <CommonModal :visible="showDescModal" @trigger="showDescModal = false">
43
- <template #modal-title>
44
- <div class="text-lg font-bold text-left mb-4 pb-4 border-b">
45
- {{ presentation.name }}
46
- </div>
47
- </template>
48
- <template #modal-body>
49
- <div
50
- class="text-base font-normal text-left"
51
- v-html="presentation.description"
52
- ></div>
53
- </template>
54
- </CommonModal>
55
- </span>
56
- </template>
1
+ <script lang="ts" setup>
2
+ import { ref, toRefs, computed } from "vue";
3
+ import { Presentation } from "../../../models/conference";
4
+
5
+ type Props = {
6
+ linkText: string;
7
+ presentation: Presentation;
8
+ useIcon?: boolean;
9
+ newLine?: boolean;
10
+ };
11
+
12
+ const props = withDefaults(defineProps<Props>(), {
13
+ useIcon: true,
14
+ newLine: false,
15
+ });
16
+
17
+ // data
18
+ const { useIcon, newLine, linkText, presentation } = toRefs(props);
19
+ const showDescModal = ref<boolean>(false);
20
+
21
+ // computed
22
+ const getLinkText = computed(() => {
23
+ return linkText.value.length > 0 ? linkText.value : "Session Details";
24
+ });
25
+ </script>
26
+
27
+ <template>
28
+ <span>
29
+ <a class="cursor-pointer" @click="showDescModal = true">
30
+ <CommonSvgIcon
31
+ v-if="useIcon"
32
+ icon="info"
33
+ class="align-middle"
34
+ style="display: inline-block; margin-bottom: 2px"
35
+ :icon-width="'16px'"
36
+ ></CommonSvgIcon>
37
+ <span v-else class="text-xs" :class="{ 'new-line': newLine }">{{
38
+ getLinkText
39
+ }}</span>
40
+ </a>
41
+
42
+ <CommonModal :visible="showDescModal" @trigger="showDescModal = false">
43
+ <template #modal-title>
44
+ <div class="text-lg font-bold text-left mb-4 pb-4 border-b">
45
+ {{ presentation.name }}
46
+ </div>
47
+ </template>
48
+ <template #modal-body>
49
+ <div
50
+ class="text-base font-normal text-left"
51
+ v-html="presentation.description"
52
+ ></div>
53
+ </template>
54
+ </CommonModal>
55
+ </span>
56
+ </template>
@@ -1,49 +1,49 @@
1
- <script lang="ts" setup>
2
- import { toRefs } from "vue";
3
- import { usePresentation } from "../../../composables/usePresentation";
4
- import { Conference, Presentation } from "../../../models/conference";
5
- import { Icons } from "../../../models/icons";
6
-
7
- type Props = {
8
- icon?: keyof Icons;
9
- conference: Conference;
10
- presentation: Presentation;
11
- };
12
-
13
- const props = withDefaults(defineProps<Props>(), {
14
- icon: "playarrow",
15
- });
16
-
17
- const { icon, conference, presentation } = toRefs(props);
18
-
19
- const {
20
- showPresentationPlayIcon,
21
- getPresentationCustomPlayIcon,
22
- getPresentationStreamingText,
23
- } = usePresentation(conference);
24
- </script>
25
-
26
- <template>
27
- <span class="flex-initial flex flex-row items-center py-2 lg:py-1">
28
- <span v-if="showPresentationPlayIcon(presentation)">
29
- <img
30
- v-if="getPresentationCustomPlayIcon(presentation)"
31
- style="max-width: 15px"
32
- :src="(getPresentationCustomPlayIcon(presentation) as unknown as string)"
33
- alt=""
34
- />
35
- <CommonSvgIcon
36
- v-else
37
- :icon="icon"
38
- class="align-middle mr-1"
39
- style="display: inline-block; margin-bottom: 2px"
40
- :icon-width="'20px'"
41
- >
42
- </CommonSvgIcon
43
- >&nbsp;
44
- </span>
45
- <small class="flex-initial uppercase text-base text-red-darker">{{
46
- getPresentationStreamingText(presentation)
47
- }}</small>
48
- </span>
49
- </template>
1
+ <script lang="ts" setup>
2
+ import { toRefs } from "vue";
3
+ import { usePresentation } from "../../../composables/usePresentation";
4
+ import { Conference, Presentation } from "../../../models/conference";
5
+ import { Icons } from "../../../models/icons";
6
+
7
+ type Props = {
8
+ icon?: keyof Icons;
9
+ conference: Conference;
10
+ presentation: Presentation;
11
+ };
12
+
13
+ const props = withDefaults(defineProps<Props>(), {
14
+ icon: "playarrow",
15
+ });
16
+
17
+ const { icon, conference, presentation } = toRefs(props);
18
+
19
+ const {
20
+ showPresentationPlayIcon,
21
+ getPresentationCustomPlayIcon,
22
+ getPresentationStreamingText,
23
+ } = usePresentation(conference);
24
+ </script>
25
+
26
+ <template>
27
+ <span class="flex-initial flex flex-row items-center py-2 lg:py-1">
28
+ <span v-if="showPresentationPlayIcon(presentation)">
29
+ <img
30
+ v-if="getPresentationCustomPlayIcon(presentation)"
31
+ style="max-width: 15px"
32
+ :src="(getPresentationCustomPlayIcon(presentation) as unknown as string)"
33
+ alt=""
34
+ />
35
+ <CommonSvgIcon
36
+ v-else
37
+ :icon="icon"
38
+ class="align-middle mr-1"
39
+ style="display: inline-block; margin-bottom: 2px"
40
+ :icon-width="'20px'"
41
+ >
42
+ </CommonSvgIcon
43
+ >&nbsp;
44
+ </span>
45
+ <small class="flex-initial uppercase text-base text-red-darker">{{
46
+ getPresentationStreamingText(presentation)
47
+ }}</small>
48
+ </span>
49
+ </template>
@@ -1,137 +1,137 @@
1
- <script lang="ts" setup>
2
- import { toRefs, computed } from "vue";
3
- import { useAgenda } from "../../../composables/useAgenda";
4
- import { useConferenceHelpers } from "../../../composables/useConferenceHelpers";
5
- import { usePresentation } from "../../../composables/usePresentation";
6
- import {
7
- Conference,
8
- Presentation,
9
- Track,
10
- TrackGroup,
11
- } from "../../../models/conference";
12
- import InfoLink from "./InfoLink.vue";
13
- import PlayIcon from "./PlayIcon.vue";
14
-
15
- type Props = {
16
- conference: Conference;
17
- presentation: Presentation;
18
- track: Track | TrackGroup;
19
- showInfoLink?: boolean;
20
- simpleLayout?: boolean;
21
- };
22
-
23
- const props = withDefaults(defineProps<Props>(), {
24
- showInfoLink: true,
25
- simpleLayout: false,
26
- });
27
-
28
- const { conference, track, presentation } = toRefs(props);
29
-
30
- // Methods
31
- const { conferenceIsLiveOrMixed, conferenceIsArchived } =
32
- useConferenceHelpers(conference);
33
- const { isSmallGroupedTrack } = useAgenda(conference);
34
- const {
35
- getPresentationLinkTarget,
36
- getLivePresentationLinkDestination,
37
- showPresentationLinkIcon,
38
- getPresentationLinkText,
39
- presentationIsLiveOrMixed,
40
- getArchivePresentationLinkDestination,
41
- } = usePresentation(conference);
42
-
43
- // Computed
44
- const presentationNameClass = computed(() => {
45
- return isSmallGroupedTrack(track.value) ? "text-base" : "text-lg";
46
- });
47
- </script>
48
-
49
- <template>
50
- <div>
51
- <div v-if="!simpleLayout">
52
- <!-- LIVE AGENDA GO TO WEBCAST PAGE -->
53
- <div>
54
- <h2 class="flex flex-initial flex-row" :class="presentationNameClass">
55
- <!-- zoom text & icon link -->
56
- <CommonZoomModal
57
- v-if="
58
- isAgenda &&
59
- conferenceIsLiveOrMixed(conference) &&
60
- presentation.type == 'zoom'
61
- "
62
- :presentation-id="presentation.id"
63
- modal-size="full"
64
- >
65
- <template #modal-link>
66
- <span class="font-semibold no-underline heading-link"
67
- >{{ presentation.name }}
68
- <PlayIcon
69
- :presentation="presentation"
70
- :conference="conference"
71
- :class="'justify-center md:justify-start'"
72
- icon="zoom"
73
- ></PlayIcon>
74
- </span>
75
- </template>
76
- </CommonZoomModal>
77
-
78
- <!-- live/archive stream text & icon link -->
79
- <a
80
- v-else-if="
81
- (isAgenda && conferenceIsLiveOrMixed(conference)) ||
82
- (conferenceIsArchived(conference) && presentation.type != 'zoom')
83
- "
84
- class="font-semibold no-underline heading-link"
85
- :href="getLivePresentationLinkDestination(presentation, track)"
86
- :target="getPresentationLinkTarget(presentation)"
87
- @click="playPresentation(track, presentation, conference)"
88
- >
89
- {{ presentation.name
90
- }}<transition name="fade">
91
- <PlayIcon
92
- v-if="presentationIsLiveOrMixed(presentation)"
93
- :presentation="presentation"
94
- :conference="conference"
95
- :class="'justify-center md:justify-start'"
96
- icon="playarrow"
97
- ></PlayIcon>
98
- </transition>
99
- </a>
100
-
101
- <!-- text only catchall -->
102
- <span v-else class="font-semibold" :class="presentationNameClass"
103
- >{{ presentation.name }}</span
104
- >
105
-
106
- <!-- session details -->
107
- <InfoLink
108
- v-if="showInfoLink && presentation.description"
109
- :presentation="presentation"
110
- :use-icon="useIcon"
111
- :link-text="infoLinkText"
112
- :new-line="isSmallGroupedTrack"
113
- class="ml-2"
114
- />
115
-
116
- <!-- favorites -->
117
- <favorite
118
- v-if="allowFavorites && currentUser.token"
119
- class="ml-1"
120
- :presentation="presentation"
121
- @click="handleFavoriteClick"
122
- />
123
- </h2>
124
- </div>
125
- </div>
126
-
127
- <!-- SIMPLE LAYOUT -->
128
- <div v-else>
129
- <a
130
- class="underline cursor-pointer"
131
- @click="playPresentation(track, presentation, conference)"
132
- >
133
- {{ presentation.name }}
134
- </a>
135
- </div>
136
- </div>
137
- </template>
1
+ <script lang="ts" setup>
2
+ import { toRefs, computed } from "vue";
3
+ import { useAgenda } from "../../../composables/useAgenda";
4
+ import { useConferenceHelpers } from "../../../composables/useConferenceHelpers";
5
+ import { usePresentation } from "../../../composables/usePresentation";
6
+ import {
7
+ Conference,
8
+ Presentation,
9
+ Track,
10
+ TrackGroup,
11
+ } from "../../../models/conference";
12
+ import InfoLink from "./InfoLink.vue";
13
+ import PlayIcon from "./PlayIcon.vue";
14
+
15
+ type Props = {
16
+ conference: Conference;
17
+ presentation: Presentation;
18
+ track: Track | TrackGroup;
19
+ showInfoLink?: boolean;
20
+ simpleLayout?: boolean;
21
+ };
22
+
23
+ const props = withDefaults(defineProps<Props>(), {
24
+ showInfoLink: true,
25
+ simpleLayout: false,
26
+ });
27
+
28
+ const { conference, track, presentation } = toRefs(props);
29
+
30
+ // Methods
31
+ const { conferenceIsLiveOrMixed, conferenceIsArchived } =
32
+ useConferenceHelpers(conference);
33
+ const { isSmallGroupedTrack } = useAgenda(conference);
34
+ const {
35
+ getPresentationLinkTarget,
36
+ getLivePresentationLinkDestination,
37
+ showPresentationLinkIcon,
38
+ getPresentationLinkText,
39
+ presentationIsLiveOrMixed,
40
+ getArchivePresentationLinkDestination,
41
+ } = usePresentation(conference);
42
+
43
+ // Computed
44
+ const presentationNameClass = computed(() => {
45
+ return isSmallGroupedTrack(track.value) ? "text-base" : "text-lg";
46
+ });
47
+ </script>
48
+
49
+ <template>
50
+ <div>
51
+ <div v-if="!simpleLayout">
52
+ <!-- LIVE AGENDA GO TO WEBCAST PAGE -->
53
+ <div>
54
+ <h2 class="flex flex-initial flex-row" :class="presentationNameClass">
55
+ <!-- zoom text & icon link -->
56
+ <CommonZoomModal
57
+ v-if="
58
+ isAgenda &&
59
+ conferenceIsLiveOrMixed(conference) &&
60
+ presentation.type == 'zoom'
61
+ "
62
+ :presentation-id="presentation.id"
63
+ modal-size="full"
64
+ >
65
+ <template #modal-link>
66
+ <span class="font-semibold no-underline heading-link"
67
+ >{{ presentation.name }}
68
+ <PlayIcon
69
+ :presentation="presentation"
70
+ :conference="conference"
71
+ :class="'justify-center md:justify-start'"
72
+ icon="zoom"
73
+ ></PlayIcon>
74
+ </span>
75
+ </template>
76
+ </CommonZoomModal>
77
+
78
+ <!-- live/archive stream text & icon link -->
79
+ <a
80
+ v-else-if="
81
+ (isAgenda && conferenceIsLiveOrMixed(conference)) ||
82
+ (conferenceIsArchived(conference) && presentation.type != 'zoom')
83
+ "
84
+ class="font-semibold no-underline heading-link"
85
+ :href="getLivePresentationLinkDestination(presentation, track)"
86
+ :target="getPresentationLinkTarget(presentation)"
87
+ @click="playPresentation(track, presentation, conference)"
88
+ >
89
+ {{ presentation.name
90
+ }}<transition name="fade">
91
+ <PlayIcon
92
+ v-if="presentationIsLiveOrMixed(presentation)"
93
+ :presentation="presentation"
94
+ :conference="conference"
95
+ :class="'justify-center md:justify-start'"
96
+ icon="playarrow"
97
+ ></PlayIcon>
98
+ </transition>
99
+ </a>
100
+
101
+ <!-- text only catchall -->
102
+ <span v-else class="font-semibold" :class="presentationNameClass"
103
+ >{{ presentation.name }}</span
104
+ >
105
+
106
+ <!-- session details -->
107
+ <InfoLink
108
+ v-if="showInfoLink && presentation.description"
109
+ :presentation="presentation"
110
+ :use-icon="useIcon"
111
+ :link-text="infoLinkText"
112
+ :new-line="isSmallGroupedTrack"
113
+ class="ml-2"
114
+ />
115
+
116
+ <!-- favorites -->
117
+ <favorite
118
+ v-if="allowFavorites && currentUser.token"
119
+ class="ml-1"
120
+ :presentation="presentation"
121
+ @click="handleFavoriteClick"
122
+ />
123
+ </h2>
124
+ </div>
125
+ </div>
126
+
127
+ <!-- SIMPLE LAYOUT -->
128
+ <div v-else>
129
+ <a
130
+ class="underline cursor-pointer"
131
+ @click="playPresentation(track, presentation, conference)"
132
+ >
133
+ {{ presentation.name }}
134
+ </a>
135
+ </div>
136
+ </div>
137
+ </template>