@icvdeveloper/common-module 0.0.53 → 0.0.54

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 (68) 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-close.svg +1 -1
  11. package/dist/runtime/assets/svg/icon-info.svg +2 -2
  12. package/dist/runtime/assets/svg/icon-new-window.svg +11 -11
  13. package/dist/runtime/assets/svg/icon-offline.svg +3 -3
  14. package/dist/runtime/assets/svg/icon-online.svg +3 -3
  15. package/dist/runtime/assets/svg/icon-person.svg +2 -2
  16. package/dist/runtime/assets/svg/icon-play.svg +2 -2
  17. package/dist/runtime/assets/svg/icon-star-filled.svg +29 -29
  18. package/dist/runtime/assets/svg/icon-star.svg +24 -24
  19. package/dist/runtime/assets/svg/icon-video-chat.svg +14 -14
  20. package/dist/runtime/assets/svg/icon-website.svg +2 -2
  21. package/dist/runtime/assets/svg/icon-zoom.svg +10 -10
  22. package/dist/runtime/assets/svg/notification-icon.svg +32 -32
  23. package/dist/runtime/assets/svg/offline-icon.svg +1 -1
  24. package/dist/runtime/assets/svg/online-icon.svg +3 -3
  25. package/dist/runtime/assets/svg/peer2peer.svg +3 -3
  26. package/dist/runtime/assets/svg/phone.svg +1 -1
  27. package/dist/runtime/assets/svg/plus-icon.svg +1 -1
  28. package/dist/runtime/assets/svg/red-icon.svg +3 -3
  29. package/dist/runtime/assets/svg/reject.svg +14 -14
  30. package/dist/runtime/assets/svg/search-icon.svg +3 -3
  31. package/dist/runtime/components/affiliates/AffiliatePage.vue +17 -17
  32. package/dist/runtime/components/agenda/AgendaTabbed.vue +300 -300
  33. package/dist/runtime/components/agenda/components/InfoLink.vue +56 -56
  34. package/dist/runtime/components/agenda/components/PlayIcon.vue +49 -49
  35. package/dist/runtime/components/agenda/components/PresentationLink.vue +137 -137
  36. package/dist/runtime/components/agenda/components/Sponsor.vue +132 -132
  37. package/dist/runtime/components/auth/LoginFullWidth.vue +78 -78
  38. package/dist/runtime/components/auth/PasswordReset.vue +60 -60
  39. package/dist/runtime/components/auth/Registration.vue +27 -27
  40. package/dist/runtime/components/auth/Ucc.vue +52 -52
  41. package/dist/runtime/components/core/Accordion.vue +97 -97
  42. package/dist/runtime/components/core/CountdownTimer.vue +308 -308
  43. package/dist/runtime/components/core/DynamicHtml.vue +1 -1
  44. package/dist/runtime/components/core/Modal.vue +111 -111
  45. package/dist/runtime/components/core/Navbar.vue +154 -154
  46. package/dist/runtime/components/core/SvgIcon.vue +145 -145
  47. package/dist/runtime/components/core/ZoomModal.vue +37 -37
  48. package/dist/runtime/components/events/EventHeader.vue +133 -133
  49. package/dist/runtime/components/events/ListEvents.vue +477 -477
  50. package/dist/runtime/components/forms/AlertBox.vue +21 -21
  51. package/dist/runtime/components/forms/ErrorField.vue +17 -17
  52. package/dist/runtime/components/forms/Message.vue +27 -27
  53. package/dist/runtime/components/forms/SearchInput.vue +38 -38
  54. package/dist/runtime/components/forms/SupportForm.vue +112 -112
  55. package/dist/runtime/components/forms/SwitchInput.vue +42 -42
  56. package/dist/runtime/components/forms/TextArea.vue +26 -26
  57. package/dist/runtime/components/forms/TextInput.vue +28 -28
  58. package/dist/runtime/components/layouts/Accordion.vue +78 -78
  59. package/dist/runtime/components/presenters/PresenterListing.vue +164 -164
  60. package/dist/runtime/components/presenters/PresenterModal.vue +225 -225
  61. package/dist/runtime/components/profile/Profile.vue +149 -149
  62. package/dist/runtime/components/profile/components/Sidebar.vue +27 -27
  63. package/dist/runtime/components/profile/components/SidebarNavItem.vue +39 -39
  64. package/dist/runtime/components/profile/tabs/Favorites.vue +21 -21
  65. package/dist/runtime/components/profile/tabs/GeneralInformation.vue +122 -122
  66. package/dist/runtime/components/profile/tabs/ProfileImage.vue +75 -75
  67. package/dist/runtime/components/support/FAQAccordion.vue +137 -137
  68. package/package.json +1 -1
@@ -1,145 +1,145 @@
1
- <script lang="ts" setup>
2
- import { find, get } from "lodash-es";
3
- import { toRefs, computed, defineAsyncComponent } from "vue";
4
- import { Icon, Icons } from "../../models/icons";
5
- import { svgIconClassObj } from "../../@types/components";
6
- import { useClassBinding } from "../../composables/useClassBinding";
7
-
8
- /**
9
- * Delay importing only the icon file that we need
10
- */
11
- const icons: Icons = {
12
- person: {
13
- color: "#333",
14
- component: defineAsyncComponent(
15
- () => import("../../assets/svg/icon-person.svg")
16
- ),
17
- },
18
- info: {
19
- color: "#4286f4",
20
- component: defineAsyncComponent(
21
- () => import("../../assets/svg/icon-info.svg")
22
- ),
23
- },
24
- twitter: {
25
- color: "#1CB7EB",
26
- component: defineAsyncComponent(
27
- () => import("../../assets/svg/icon-twitter.svg")
28
- ),
29
- },
30
- facebook: {
31
- color: "#4E71A8",
32
- component: defineAsyncComponent(
33
- () => import("../../assets/svg/icon-facebook.svg")
34
- ),
35
- },
36
- linkedin: {
37
- color: "#4E71A8",
38
- component: defineAsyncComponent(
39
- () => import("../../assets/svg/icon-linkedin.svg")
40
- ),
41
- },
42
- youtube: {
43
- color: "#CA3737",
44
- component: defineAsyncComponent(
45
- () => import("../../assets/svg/icon-youtube.svg")
46
- ),
47
- },
48
- website: {
49
- color: "#4286f4",
50
- component: defineAsyncComponent(
51
- () => import("../../assets/svg/icon-website.svg")
52
- ),
53
- },
54
- newwindow: {
55
- color: "#333",
56
- component: defineAsyncComponent(
57
- () => import("../../assets/svg/icon-new-window.svg")
58
- ),
59
- },
60
- playarrow: {
61
- color: "#CA3737",
62
- component: defineAsyncComponent(
63
- () => import("../../assets/svg/icon-play.svg")
64
- ),
65
- },
66
- zoom: {
67
- color: "#333",
68
- component: defineAsyncComponent(
69
- () => import("../../assets/svg/icon-zoom.svg")
70
- ),
71
- },
72
- downarrow: {
73
- color: "#333",
74
- component: defineAsyncComponent(
75
- () => import("../../assets/svg/icon-down-arrow.svg")
76
- ),
77
- },
78
- close: {
79
- color: "#000",
80
- component: defineAsyncComponent(
81
- () => import("../../assets/svg/icon-close.svg")
82
- ),
83
- },
84
- chevron: {
85
- color: "#000",
86
- component: defineAsyncComponent(
87
- () => import("../../assets/svg/icon-chevron.svg")
88
- ),
89
- },
90
- };
91
-
92
- type Props = {
93
- icon?: keyof Icons;
94
- grayScale?: boolean;
95
- width?: string;
96
- classObject?: svgIconClassObj;
97
- };
98
-
99
- const props = withDefaults(defineProps<Props>(), {
100
- icon: "info",
101
- grayScale: false,
102
- width: "20px",
103
- classObject: () => {
104
- return {
105
- container: "",
106
- svgElement: "",
107
- };
108
- },
109
- });
110
-
111
- const { icon, grayScale, width } = toRefs(props);
112
- const { classBinding } = useClassBinding();
113
-
114
- // computed
115
- const iconDims = computed(() => ({
116
- width: width.value,
117
- height: width.value,
118
- }));
119
-
120
- const iconStyle = computed(() => {
121
- if (!grayScale.value) {
122
- return {
123
- fill: icons[icon.value].color,
124
- };
125
- }
126
-
127
- return {
128
- fill: "#666",
129
- };
130
- });
131
-
132
- const iconComponent = computed(() => {
133
- return icons[icon.value].component;
134
- });
135
- </script>
136
-
137
- <template>
138
- <div :style="iconDims">
139
- <component
140
- :is="iconComponent"
141
- :style="iconStyle"
142
- :class="classBinding(classObject, 'svgElement', '')"
143
- />
144
- </div>
145
- </template>
1
+ <script lang="ts" setup>
2
+ import { find, get } from "lodash-es";
3
+ import { toRefs, computed, defineAsyncComponent } from "vue";
4
+ import { Icon, Icons } from "../../models/icons";
5
+ import { svgIconClassObj } from "../../@types/components";
6
+ import { useClassBinding } from "../../composables/useClassBinding";
7
+
8
+ /**
9
+ * Delay importing only the icon file that we need
10
+ */
11
+ const icons: Icons = {
12
+ person: {
13
+ color: "#333",
14
+ component: defineAsyncComponent(
15
+ () => import("../../assets/svg/icon-person.svg")
16
+ ),
17
+ },
18
+ info: {
19
+ color: "#4286f4",
20
+ component: defineAsyncComponent(
21
+ () => import("../../assets/svg/icon-info.svg")
22
+ ),
23
+ },
24
+ twitter: {
25
+ color: "#1CB7EB",
26
+ component: defineAsyncComponent(
27
+ () => import("../../assets/svg/icon-twitter.svg")
28
+ ),
29
+ },
30
+ facebook: {
31
+ color: "#4E71A8",
32
+ component: defineAsyncComponent(
33
+ () => import("../../assets/svg/icon-facebook.svg")
34
+ ),
35
+ },
36
+ linkedin: {
37
+ color: "#4E71A8",
38
+ component: defineAsyncComponent(
39
+ () => import("../../assets/svg/icon-linkedin.svg")
40
+ ),
41
+ },
42
+ youtube: {
43
+ color: "#CA3737",
44
+ component: defineAsyncComponent(
45
+ () => import("../../assets/svg/icon-youtube.svg")
46
+ ),
47
+ },
48
+ website: {
49
+ color: "#4286f4",
50
+ component: defineAsyncComponent(
51
+ () => import("../../assets/svg/icon-website.svg")
52
+ ),
53
+ },
54
+ newwindow: {
55
+ color: "#333",
56
+ component: defineAsyncComponent(
57
+ () => import("../../assets/svg/icon-new-window.svg")
58
+ ),
59
+ },
60
+ playarrow: {
61
+ color: "#CA3737",
62
+ component: defineAsyncComponent(
63
+ () => import("../../assets/svg/icon-play.svg")
64
+ ),
65
+ },
66
+ zoom: {
67
+ color: "#333",
68
+ component: defineAsyncComponent(
69
+ () => import("../../assets/svg/icon-zoom.svg")
70
+ ),
71
+ },
72
+ downarrow: {
73
+ color: "#333",
74
+ component: defineAsyncComponent(
75
+ () => import("../../assets/svg/icon-down-arrow.svg")
76
+ ),
77
+ },
78
+ close: {
79
+ color: "#000",
80
+ component: defineAsyncComponent(
81
+ () => import("../../assets/svg/icon-close.svg")
82
+ ),
83
+ },
84
+ chevron: {
85
+ color: "#000",
86
+ component: defineAsyncComponent(
87
+ () => import("../../assets/svg/icon-chevron.svg")
88
+ ),
89
+ },
90
+ };
91
+
92
+ type Props = {
93
+ icon?: keyof Icons;
94
+ grayScale?: boolean;
95
+ width?: string;
96
+ classObject?: svgIconClassObj;
97
+ };
98
+
99
+ const props = withDefaults(defineProps<Props>(), {
100
+ icon: "info",
101
+ grayScale: false,
102
+ width: "20px",
103
+ classObject: () => {
104
+ return {
105
+ container: "",
106
+ svgElement: "",
107
+ };
108
+ },
109
+ });
110
+
111
+ const { icon, grayScale, width } = toRefs(props);
112
+ const { classBinding } = useClassBinding();
113
+
114
+ // computed
115
+ const iconDims = computed(() => ({
116
+ width: width.value,
117
+ height: width.value,
118
+ }));
119
+
120
+ const iconStyle = computed(() => {
121
+ if (!grayScale.value) {
122
+ return {
123
+ fill: icons[icon.value].color,
124
+ };
125
+ }
126
+
127
+ return {
128
+ fill: "#666",
129
+ };
130
+ });
131
+
132
+ const iconComponent = computed(() => {
133
+ return icons[icon.value].component;
134
+ });
135
+ </script>
136
+
137
+ <template>
138
+ <div :style="iconDims">
139
+ <component
140
+ :is="iconComponent"
141
+ :style="iconStyle"
142
+ :class="classBinding(classObject, 'svgElement', '')"
143
+ />
144
+ </div>
145
+ </template>
@@ -1,37 +1,37 @@
1
- <script lang="ts" setup>
2
- import { ref, toRefs, computed } from "vue";
3
-
4
- interface Props {
5
- presentationId: number | string;
6
- modalSize?: string;
7
- }
8
-
9
- const props = withDefaults(defineProps<Props>(), {
10
- modalSize: "full",
11
- });
12
-
13
- const { modalSize, presentationId } = toRefs(props);
14
-
15
- const showModal = ref<boolean>(false);
16
-
17
- const zoomUrl = computed(() => {
18
- return `/zoom/${presentationId.value}/meeting`;
19
- });
20
- </script>
21
-
22
- <template>
23
- <span>
24
- <CommonModal
25
- :visible="showModal"
26
- :modal-size="modalSize"
27
- @trigger="showModal = false"
28
- >
29
- <template #modal-body>
30
- <iframe :src="zoomUrl" class="w-full h-full"></iframe>
31
- </template>
32
- </CommonModal>
33
- <a class="no-underline" href="javascript:null" @click="showModal = true">
34
- <slot name="modal-link"></slot>
35
- </a>
36
- </span>
37
- </template>
1
+ <script lang="ts" setup>
2
+ import { ref, toRefs, computed } from "vue";
3
+
4
+ interface Props {
5
+ presentationId: number | string;
6
+ modalSize?: string;
7
+ }
8
+
9
+ const props = withDefaults(defineProps<Props>(), {
10
+ modalSize: "full",
11
+ });
12
+
13
+ const { modalSize, presentationId } = toRefs(props);
14
+
15
+ const showModal = ref<boolean>(false);
16
+
17
+ const zoomUrl = computed(() => {
18
+ return `/zoom/${presentationId.value}/meeting`;
19
+ });
20
+ </script>
21
+
22
+ <template>
23
+ <span>
24
+ <CommonModal
25
+ :visible="showModal"
26
+ :modal-size="modalSize"
27
+ @trigger="showModal = false"
28
+ >
29
+ <template #modal-body>
30
+ <iframe :src="zoomUrl" class="w-full h-full"></iframe>
31
+ </template>
32
+ </CommonModal>
33
+ <a class="no-underline" href="javascript:null" @click="showModal = true">
34
+ <slot name="modal-link"></slot>
35
+ </a>
36
+ </span>
37
+ </template>
@@ -1,133 +1,133 @@
1
- <script lang="ts" setup>
2
- import { toRefs, computed } from "vue";
3
- import { Conference } from "../../models/conference";
4
- import { useTemplateConfigsStore } from "../../store/templateConfigs";
5
- import { useConferencesStore } from "../../store/conferences";
6
- import { useConferenceHelpers } from "../../composables/useConferenceHelpers";
7
-
8
- interface Props {
9
- conference?: Conference | null;
10
- useEventText?: boolean;
11
- }
12
-
13
- // Component Props
14
- const props = withDefaults(defineProps<Props>(), {
15
- useEventText: () =>
16
- useTemplateConfigsStore().pagesConfigValue("main.use_event_text"),
17
- conference: () => useConferencesStore().currentConference,
18
- });
19
-
20
- // stores
21
- const conferenceStore = useConferencesStore();
22
- const { globalConfigValue, pagesConfigValue } = useTemplateConfigsStore();
23
-
24
- // reactive data
25
- const { useEventText, conference } = toRefs(props);
26
-
27
- // helper functions
28
- const {
29
- getConferenceDisplayDate,
30
- showConferenceWebcastButton,
31
- getConferenceWebcastUrl,
32
- getConferenceWebcastButtonText,
33
- showViewArchiveButton,
34
- getViewArchiveUrl,
35
- getViewArchiveButtonText,
36
- showConferenceRegButton,
37
- getConferenceRegUrl,
38
- getConferenceRegText,
39
- } = useConferenceHelpers(conference);
40
-
41
- // computed properties
42
- const mainStyles = computed(() => {
43
- if (useEventText.value) {
44
- return {
45
- "background-image": `url(${conference.value.photo_large})`,
46
- "background-repeat": "no-repeat",
47
- "background-size": "cover",
48
- "background-position": "center",
49
- };
50
- } else {
51
- return {};
52
- }
53
- });
54
-
55
- const mutedHeaderStyle = computed(() => {
56
- const muted = globalConfigValue("muted_photo_headers");
57
- if (muted === "lighten") return "background-color: rgb(255, 255, 255, .4)";
58
- if (muted === "darken") return "background-color: rgb(0, 0, 0, .4)";
59
- return "";
60
- });
61
-
62
- const hasOtherButton = computed(() => {
63
- return showViewArchiveButton() || showConferenceWebcastButton();
64
- });
65
-
66
- const mainBodyImage = computed(() => {
67
- return conference.value.photo_large;
68
- });
69
- </script>
70
-
71
- <template>
72
- <div :style="mainStyles" class="flex bg-color-2">
73
- <div
74
- v-if="useEventText"
75
- class="text-center flex flex-1 flex-col items-center justify-center h-auto p-12"
76
- :style="mutedHeaderStyle"
77
- >
78
- <h1
79
- class="text-shadow font-bold heading-color-1 mt-4 mb-4 text-2xl sm:text-2xl md:text-3xl lg:text-4xl xl:text-5xl"
80
- >
81
- {{ conference.name }}
82
- </h1>
83
- <h1
84
- v-if="conference.location"
85
- class="text-shadow font-light heading-color-2 mb-2 text-2xl sm:text-l md:text-xl lg:text-2xl xl:text-3xl"
86
- >
87
- {{ conference.location }}
88
- </h1>
89
- <h3
90
- v-if="pagesConfigValue('main.use_event_text_date')"
91
- class="text-shadow font-light heading-color-2 mb-2 text-l sm:text-l md:text-xl lg:text-2xl xl:text-3xl"
92
- >
93
- {{ getConferenceDisplayDate() }}
94
- </h3>
95
-
96
- <div class="flex-row mt-6">
97
- <!-- view test stream or webcast -->
98
- <a
99
- v-if="showConferenceWebcastButton()"
100
- :href="getConferenceWebcastUrl()"
101
- :target="/^http/.test(getConferenceWebcastUrl()) ? '_blank' : '_self'"
102
- >
103
- <button class="btn">
104
- {{ getConferenceWebcastButtonText() }}
105
- </button>
106
- </a>
107
-
108
- <!-- view archive -->
109
- <a
110
- v-if="showViewArchiveButton()"
111
- :href="getViewArchiveUrl()"
112
- :target="/^http/.test(getViewArchiveUrl()) ? '_blank' : '_self'"
113
- >
114
- <button class="btn">
115
- {{ getViewArchiveButtonText() }}
116
- </button>
117
- </a>
118
-
119
- <!-- register -->
120
- <a
121
- v-if="showConferenceRegButton()"
122
- :href="getConferenceRegUrl()"
123
- :target="/^http/.test(getConferenceRegUrl()) ? '_blank' : '_self'"
124
- >
125
- <button class="btn" :class="hasOtherButton ? 'md:ml-4' : ''">
126
- {{ getConferenceRegText() }}
127
- </button>
128
- </a>
129
- </div>
130
- </div>
131
- <img v-else :src="mainBodyImage" class="w-full h-auto" />
132
- </div>
133
- </template>
1
+ <script lang="ts" setup>
2
+ import { toRefs, computed } from "vue";
3
+ import { Conference } from "../../models/conference";
4
+ import { useTemplateConfigsStore } from "../../store/templateConfigs";
5
+ import { useConferencesStore } from "../../store/conferences";
6
+ import { useConferenceHelpers } from "../../composables/useConferenceHelpers";
7
+
8
+ interface Props {
9
+ conference?: Conference | null;
10
+ useEventText?: boolean;
11
+ }
12
+
13
+ // Component Props
14
+ const props = withDefaults(defineProps<Props>(), {
15
+ useEventText: () =>
16
+ useTemplateConfigsStore().pagesConfigValue("main.use_event_text"),
17
+ conference: () => useConferencesStore().currentConference,
18
+ });
19
+
20
+ // stores
21
+ const conferenceStore = useConferencesStore();
22
+ const { globalConfigValue, pagesConfigValue } = useTemplateConfigsStore();
23
+
24
+ // reactive data
25
+ const { useEventText, conference } = toRefs(props);
26
+
27
+ // helper functions
28
+ const {
29
+ getConferenceDisplayDate,
30
+ showConferenceWebcastButton,
31
+ getConferenceWebcastUrl,
32
+ getConferenceWebcastButtonText,
33
+ showViewArchiveButton,
34
+ getViewArchiveUrl,
35
+ getViewArchiveButtonText,
36
+ showConferenceRegButton,
37
+ getConferenceRegUrl,
38
+ getConferenceRegText,
39
+ } = useConferenceHelpers(conference);
40
+
41
+ // computed properties
42
+ const mainStyles = computed(() => {
43
+ if (useEventText.value) {
44
+ return {
45
+ "background-image": `url(${conference.value.photo_large})`,
46
+ "background-repeat": "no-repeat",
47
+ "background-size": "cover",
48
+ "background-position": "center",
49
+ };
50
+ } else {
51
+ return {};
52
+ }
53
+ });
54
+
55
+ const mutedHeaderStyle = computed(() => {
56
+ const muted = globalConfigValue("muted_photo_headers");
57
+ if (muted === "lighten") return "background-color: rgb(255, 255, 255, .4)";
58
+ if (muted === "darken") return "background-color: rgb(0, 0, 0, .4)";
59
+ return "";
60
+ });
61
+
62
+ const hasOtherButton = computed(() => {
63
+ return showViewArchiveButton() || showConferenceWebcastButton();
64
+ });
65
+
66
+ const mainBodyImage = computed(() => {
67
+ return conference.value.photo_large;
68
+ });
69
+ </script>
70
+
71
+ <template>
72
+ <div :style="mainStyles" class="flex bg-color-2">
73
+ <div
74
+ v-if="useEventText"
75
+ class="text-center flex flex-1 flex-col items-center justify-center h-auto p-12"
76
+ :style="mutedHeaderStyle"
77
+ >
78
+ <h1
79
+ class="text-shadow font-bold heading-color-1 mt-4 mb-4 text-2xl sm:text-2xl md:text-3xl lg:text-4xl xl:text-5xl"
80
+ >
81
+ {{ conference.name }}
82
+ </h1>
83
+ <h1
84
+ v-if="conference.location"
85
+ class="text-shadow font-light heading-color-2 mb-2 text-2xl sm:text-l md:text-xl lg:text-2xl xl:text-3xl"
86
+ >
87
+ {{ conference.location }}
88
+ </h1>
89
+ <h3
90
+ v-if="pagesConfigValue('main.use_event_text_date')"
91
+ class="text-shadow font-light heading-color-2 mb-2 text-l sm:text-l md:text-xl lg:text-2xl xl:text-3xl"
92
+ >
93
+ {{ getConferenceDisplayDate() }}
94
+ </h3>
95
+
96
+ <div class="flex-row mt-6">
97
+ <!-- view test stream or webcast -->
98
+ <a
99
+ v-if="showConferenceWebcastButton()"
100
+ :href="getConferenceWebcastUrl()"
101
+ :target="/^http/.test(getConferenceWebcastUrl()) ? '_blank' : '_self'"
102
+ >
103
+ <button class="btn">
104
+ {{ getConferenceWebcastButtonText() }}
105
+ </button>
106
+ </a>
107
+
108
+ <!-- view archive -->
109
+ <a
110
+ v-if="showViewArchiveButton()"
111
+ :href="getViewArchiveUrl()"
112
+ :target="/^http/.test(getViewArchiveUrl()) ? '_blank' : '_self'"
113
+ >
114
+ <button class="btn">
115
+ {{ getViewArchiveButtonText() }}
116
+ </button>
117
+ </a>
118
+
119
+ <!-- register -->
120
+ <a
121
+ v-if="showConferenceRegButton()"
122
+ :href="getConferenceRegUrl()"
123
+ :target="/^http/.test(getConferenceRegUrl()) ? '_blank' : '_self'"
124
+ >
125
+ <button class="btn" :class="hasOtherButton ? 'md:ml-4' : ''">
126
+ {{ getConferenceRegText() }}
127
+ </button>
128
+ </a>
129
+ </div>
130
+ </div>
131
+ <img v-else :src="mainBodyImage" class="w-full h-auto" />
132
+ </div>
133
+ </template>