@icvdeveloper/common-module 0.0.35 → 0.0.37
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.
- package/dist/module.json +1 -1
- package/dist/runtime/@types/components.d.ts +60 -0
- package/dist/runtime/@types/components.mjs +0 -0
- package/dist/runtime/assets/scss/_footer.scss +16 -16
- package/dist/runtime/assets/scss/_header.scss +28 -29
- package/dist/runtime/components/agenda/components/Sponsor.vue +64 -13
- package/dist/runtime/components/core/CountdownTimer.vue +154 -25
- package/dist/runtime/components/events/ListEvents.vue +283 -51
- package/dist/runtime/components/presenters/PresenterListing.vue +125 -30
- package/dist/runtime/components/presenters/PresenterModal.vue +6 -2
- package/dist/runtime/composables/useClassBinding.d.ts +4 -0
- package/dist/runtime/composables/useClassBinding.mjs +12 -0
- package/dist/runtime/composables/useConferenceHelpers.mjs +1 -2
- package/dist/runtime/composables/useEvents.mjs +3 -2
- package/dist/runtime/enums/general.d.ts +7 -0
- package/dist/runtime/enums/general.mjs +8 -0
- package/package.json +2 -1
package/dist/module.json
CHANGED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
export declare type countdownTimerClassObj = {
|
|
2
|
+
container?: string | null;
|
|
3
|
+
countdownContainer?: string | null;
|
|
4
|
+
beginText?: string | null;
|
|
5
|
+
unitsContainer?: string | null;
|
|
6
|
+
itemContainer?: string | null;
|
|
7
|
+
unitLabel?: string | null;
|
|
8
|
+
unitContainer?: string | null;
|
|
9
|
+
unit?: string | null;
|
|
10
|
+
};
|
|
11
|
+
export declare type sponsorClassObj = {
|
|
12
|
+
container?: string | null;
|
|
13
|
+
sponsorContainer?: string | null;
|
|
14
|
+
labelImageContainer?: string | null;
|
|
15
|
+
labelContainer?: string | null;
|
|
16
|
+
sponsorLabel?: string | null;
|
|
17
|
+
imageContainer?: string | null;
|
|
18
|
+
sponsorImage?: string | null;
|
|
19
|
+
};
|
|
20
|
+
export declare type listEventsCompObj = {
|
|
21
|
+
countdownTimer?: countdownTimerClassObj | null;
|
|
22
|
+
sponsor?: sponsorClassObj | null;
|
|
23
|
+
modal?: string | null;
|
|
24
|
+
login?: string | null;
|
|
25
|
+
};
|
|
26
|
+
export declare type listEventsClassObj = {
|
|
27
|
+
container?: string | null;
|
|
28
|
+
listContainer?: string | null;
|
|
29
|
+
eventContainer?: string | null;
|
|
30
|
+
eventImageContainer?: string | null;
|
|
31
|
+
eventImage?: string | null;
|
|
32
|
+
eventContentContainer?: string | null;
|
|
33
|
+
eventDetailsContainer?: string | null;
|
|
34
|
+
eventDetails?: string | null;
|
|
35
|
+
eventBrand?: string | null;
|
|
36
|
+
eventName?: string | null;
|
|
37
|
+
eventDate?: string | null;
|
|
38
|
+
countdownContainerTop?: string | null;
|
|
39
|
+
countdownContainerRight?: string | null;
|
|
40
|
+
countdownContainerBottom?: string | null;
|
|
41
|
+
buttonCountdownSponsorsContainer?: string | null;
|
|
42
|
+
buttonCountdownContainer?: string | null;
|
|
43
|
+
buttonContainer?: string | null;
|
|
44
|
+
buttonItem?: string | null;
|
|
45
|
+
sponsorsContainer?: string | null;
|
|
46
|
+
components?: listEventsCompObj;
|
|
47
|
+
};
|
|
48
|
+
export declare type presenterListingClassObj = {
|
|
49
|
+
container?: string | null;
|
|
50
|
+
presenterImageContainer?: string | null;
|
|
51
|
+
presenterImage?: string | null;
|
|
52
|
+
presenterContainer?: string | null;
|
|
53
|
+
presenterTextContainer?: string | null;
|
|
54
|
+
presenterNameLink?: string | null;
|
|
55
|
+
presenterName?: string | null;
|
|
56
|
+
presenterRole?: string | null;
|
|
57
|
+
presenterTitle?: string | null;
|
|
58
|
+
presenterBio?: string | null;
|
|
59
|
+
presenterBioLink?: string | null;
|
|
60
|
+
};
|
|
File without changes
|
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
footer {
|
|
2
|
-
@apply bg-color-5;
|
|
3
|
-
nav {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
2
|
+
// @apply bg-color-5;
|
|
3
|
+
// nav {
|
|
4
|
+
// @apply bg-color-4;
|
|
5
|
+
// ul {
|
|
6
|
+
// @apply list-none p-0 inline-flex justify-start content-center;
|
|
7
|
+
// }
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
9
|
+
// ul li {
|
|
10
|
+
// @apply flex-auto flex-grow my-3 mx-6 self-center;
|
|
11
|
+
// a {
|
|
12
|
+
// @apply no-underline text-white uppercase tracking-wide nav-color-3;
|
|
13
13
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
}
|
|
14
|
+
// &:hover {
|
|
15
|
+
// @apply nav-color-4;
|
|
16
|
+
// }
|
|
17
|
+
// }
|
|
18
|
+
// }
|
|
19
|
+
// }
|
|
20
20
|
}
|
|
@@ -1,41 +1,40 @@
|
|
|
1
1
|
header {
|
|
2
|
-
@apply bg-color-2;
|
|
2
|
+
// @apply bg-color-2;
|
|
3
3
|
|
|
4
4
|
nav {
|
|
5
|
-
|
|
6
|
-
ul {
|
|
7
|
-
|
|
8
|
-
}
|
|
5
|
+
// @apply bg-color-3;
|
|
6
|
+
// ul {
|
|
7
|
+
// @apply inline-flex flex-1 justify-start content-around text-center;
|
|
8
|
+
// }
|
|
9
9
|
|
|
10
|
-
ul li {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
&:hover {
|
|
16
|
-
@apply nav-color-2;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
&.active {
|
|
20
|
-
@apply nav-color-2;
|
|
21
|
-
}
|
|
10
|
+
// ul li {
|
|
11
|
+
// @apply flex-auto flex-grow my-3 self-center text-center;
|
|
12
|
+
// a {
|
|
13
|
+
// @apply primary-link nav-color-1;
|
|
22
14
|
|
|
23
|
-
|
|
24
|
-
|
|
15
|
+
// &:hover {
|
|
16
|
+
// @apply nav-color-2;
|
|
17
|
+
// }
|
|
18
|
+
|
|
19
|
+
// &.active {
|
|
20
|
+
// @apply nav-color-2;
|
|
21
|
+
// }
|
|
22
|
+
|
|
23
|
+
// }
|
|
24
|
+
// }
|
|
25
25
|
}
|
|
26
26
|
/* mobile nav */
|
|
27
27
|
.mobile-nav {
|
|
28
|
-
@apply bg-color-3;
|
|
29
|
-
|
|
30
|
-
button {
|
|
31
|
-
@apply border rounded nav-color-1;
|
|
32
|
-
border-color: $nav-color-1;
|
|
28
|
+
// @apply bg-color-3;
|
|
33
29
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
}
|
|
38
|
-
}
|
|
30
|
+
// button {
|
|
31
|
+
// @apply border rounded nav-color-1;
|
|
32
|
+
// border-color: $nav-color-1;
|
|
39
33
|
|
|
34
|
+
// &:hover {
|
|
35
|
+
// @apply nav-color-2;
|
|
36
|
+
// border-color: $nav-color-2;
|
|
37
|
+
// }
|
|
38
|
+
// }
|
|
40
39
|
}
|
|
41
40
|
}
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
import { find } from "lodash-es";
|
|
3
3
|
import { ref, toRefs } from "vue";
|
|
4
4
|
import { Sponsor as SponsorModel } from "../../../models/conference";
|
|
5
|
+
import { sponsorClassObj } from "../../../@types/components";
|
|
6
|
+
import { useClassBinding } from "../../../composables/useClassBinding";
|
|
5
7
|
|
|
6
8
|
type Props = {
|
|
7
9
|
sponsor: SponsorModel;
|
|
@@ -9,18 +11,32 @@ type Props = {
|
|
|
9
11
|
inline?: boolean;
|
|
10
12
|
hideLabel?: boolean;
|
|
11
13
|
enabledSponsors?: SponsorModel[];
|
|
14
|
+
classObject?: sponsorClassObj;
|
|
12
15
|
};
|
|
13
16
|
|
|
14
17
|
const props = withDefaults(defineProps<Props>(), {
|
|
15
18
|
size: "default",
|
|
16
19
|
inline: false,
|
|
17
|
-
hideLabel:
|
|
20
|
+
hideLabel: true,
|
|
18
21
|
enabledSponsors: () => {
|
|
19
22
|
return [];
|
|
20
23
|
},
|
|
24
|
+
classObject: () => {
|
|
25
|
+
return {
|
|
26
|
+
container: "",
|
|
27
|
+
sponsorContainer: "",
|
|
28
|
+
labelImageContainer: "",
|
|
29
|
+
labelContainer: "",
|
|
30
|
+
sponsorLabel: "",
|
|
31
|
+
imageContainer: "",
|
|
32
|
+
sponsorImage: "",
|
|
33
|
+
};
|
|
34
|
+
},
|
|
21
35
|
});
|
|
22
36
|
|
|
23
|
-
const { sponsor, size, inline, hideLabel, enabledSponsors } =
|
|
37
|
+
const { sponsor, size, inline, hideLabel, enabledSponsors, classObject } =
|
|
38
|
+
toRefs(props);
|
|
39
|
+
const { classBinding } = useClassBinding();
|
|
24
40
|
|
|
25
41
|
// data
|
|
26
42
|
const showModal = ref<boolean>(false);
|
|
@@ -43,24 +59,59 @@ const handleClick = () => {
|
|
|
43
59
|
</script>
|
|
44
60
|
|
|
45
61
|
<template>
|
|
46
|
-
<div
|
|
47
|
-
|
|
48
|
-
|
|
62
|
+
<div
|
|
63
|
+
:class="
|
|
64
|
+
classBinding(
|
|
65
|
+
classObject,
|
|
66
|
+
'sponsorContainer',
|
|
67
|
+
'flex flex-col lg:flex-row flex-1 items-center'
|
|
68
|
+
)
|
|
69
|
+
"
|
|
70
|
+
>
|
|
71
|
+
<div :class="classBinding(classObject, 'labelImageContainer', size)">
|
|
72
|
+
<div
|
|
73
|
+
v-if="!hideLabel"
|
|
74
|
+
:class="
|
|
75
|
+
inline
|
|
76
|
+
? classBinding(classObject, 'labelContainer', 'flex-1 items-center')
|
|
77
|
+
: classBinding(classObject, 'labelContainer', 'w-full')
|
|
78
|
+
"
|
|
79
|
+
>
|
|
49
80
|
<h2
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
81
|
+
:class="
|
|
82
|
+
inline
|
|
83
|
+
? classBinding(
|
|
84
|
+
classObject,
|
|
85
|
+
'sponsorLabel',
|
|
86
|
+
'inline-block lg:pr-5 pb-2 lg:pb-0'
|
|
87
|
+
)
|
|
88
|
+
: classBinding(classObject, 'sponsorLabel', 'pb-2')
|
|
89
|
+
"
|
|
55
90
|
class="text-center uppercase font-medium"
|
|
56
91
|
>
|
|
57
92
|
{{ sponsor.label }}
|
|
58
93
|
</h2>
|
|
59
94
|
</div>
|
|
60
|
-
<div
|
|
95
|
+
<div
|
|
96
|
+
:class="
|
|
97
|
+
inline
|
|
98
|
+
? classBinding(
|
|
99
|
+
classObject,
|
|
100
|
+
'imageContainer',
|
|
101
|
+
'flex-1 items-center pb-2 lg:pb-0'
|
|
102
|
+
)
|
|
103
|
+
: classBinding(classObject, 'imageContainer', 'w-full')
|
|
104
|
+
"
|
|
105
|
+
>
|
|
61
106
|
<img
|
|
62
|
-
:class="
|
|
63
|
-
|
|
107
|
+
:class="[
|
|
108
|
+
{ block: !inline },
|
|
109
|
+
classBinding(
|
|
110
|
+
classObject,
|
|
111
|
+
'sponsorImage',
|
|
112
|
+
'sponsor-img m-auto cursor-pointer'
|
|
113
|
+
),
|
|
114
|
+
]"
|
|
64
115
|
:src="sponsor.photo"
|
|
65
116
|
@click="handleClick()"
|
|
66
117
|
/>
|
|
@@ -12,6 +12,8 @@ import {
|
|
|
12
12
|
addMinutes,
|
|
13
13
|
} from "date-fns";
|
|
14
14
|
import { useTemplateConfigsStore } from "../../store";
|
|
15
|
+
import { countdownTimerClassObj } from "../../@types/components";
|
|
16
|
+
import { useClassBinding } from "../../composables/useClassBinding";
|
|
15
17
|
|
|
16
18
|
interface Props {
|
|
17
19
|
date: string;
|
|
@@ -20,6 +22,7 @@ interface Props {
|
|
|
20
22
|
showHours?: boolean;
|
|
21
23
|
showMinutes?: boolean;
|
|
22
24
|
showSeconds?: boolean;
|
|
25
|
+
classObject?: countdownTimerClassObj;
|
|
23
26
|
}
|
|
24
27
|
|
|
25
28
|
const props = withDefaults(defineProps<Props>(), {
|
|
@@ -28,8 +31,31 @@ const props = withDefaults(defineProps<Props>(), {
|
|
|
28
31
|
showHours: true,
|
|
29
32
|
showMinutes: true,
|
|
30
33
|
showSeconds: true,
|
|
34
|
+
classObject: () => {
|
|
35
|
+
return {
|
|
36
|
+
container: "",
|
|
37
|
+
countdownContainer: "",
|
|
38
|
+
beginText: "",
|
|
39
|
+
unitsContainer: "",
|
|
40
|
+
itemContainer: "",
|
|
41
|
+
unitLabel: "",
|
|
42
|
+
unitContainer: "",
|
|
43
|
+
unit: "",
|
|
44
|
+
};
|
|
45
|
+
},
|
|
31
46
|
});
|
|
32
47
|
|
|
48
|
+
const {
|
|
49
|
+
isCompact,
|
|
50
|
+
showDays,
|
|
51
|
+
showHours,
|
|
52
|
+
showMinutes,
|
|
53
|
+
showSeconds,
|
|
54
|
+
classObject,
|
|
55
|
+
} = toRefs(props);
|
|
56
|
+
|
|
57
|
+
const { classBinding } = useClassBinding();
|
|
58
|
+
|
|
33
59
|
// reactive data
|
|
34
60
|
const isCounting = ref<boolean>(true);
|
|
35
61
|
const days = ref<number>(0);
|
|
@@ -104,36 +130,83 @@ onMounted(() => {
|
|
|
104
130
|
|
|
105
131
|
<template>
|
|
106
132
|
<div
|
|
107
|
-
class="
|
|
108
|
-
|
|
133
|
+
:class="[
|
|
134
|
+
{ compact: isCompact, fullsize: !isCompact },
|
|
135
|
+
classBinding(classObject, 'container', 'countdown-timer'),
|
|
136
|
+
]"
|
|
109
137
|
>
|
|
110
138
|
<div
|
|
111
|
-
class="
|
|
139
|
+
:class="
|
|
140
|
+
classBinding(
|
|
141
|
+
classObject,
|
|
142
|
+
'countdownContainer',
|
|
143
|
+
'countdown-container flex flex-col pt-8 mx-4 text-center justify-center items-center content-center'
|
|
144
|
+
)
|
|
145
|
+
"
|
|
112
146
|
>
|
|
113
147
|
<div class="flex-initial">
|
|
114
|
-
<h1
|
|
115
|
-
|
|
116
|
-
|
|
148
|
+
<h1
|
|
149
|
+
:class="
|
|
150
|
+
classBinding(
|
|
151
|
+
classObject,
|
|
152
|
+
'beginText',
|
|
153
|
+
'm-0 p-0 uppercase heading-color-3'
|
|
154
|
+
)
|
|
155
|
+
"
|
|
156
|
+
>
|
|
157
|
+
{{ isCounting ? "event begins" : eventHasBegunText }}
|
|
117
158
|
</h1>
|
|
118
159
|
</div>
|
|
119
160
|
|
|
120
161
|
<div
|
|
121
162
|
v-if="isCounting"
|
|
122
|
-
class="
|
|
163
|
+
:class="
|
|
164
|
+
classBinding(
|
|
165
|
+
classObject,
|
|
166
|
+
'unitsContainer',
|
|
167
|
+
'units-container flex text-center p-6 pt-4 mt-4 items-center border border-color-accent-1 accent-color-3'
|
|
168
|
+
)
|
|
169
|
+
"
|
|
123
170
|
>
|
|
124
171
|
<!-- Days -->
|
|
125
172
|
<div
|
|
126
173
|
v-if="showDays"
|
|
127
|
-
class="
|
|
128
|
-
|
|
174
|
+
:class="[
|
|
175
|
+
{ dropshade: clockStyle == 'dials' },
|
|
176
|
+
classBinding(classObject, 'itemContainer', 'item-container'),
|
|
177
|
+
]"
|
|
129
178
|
>
|
|
130
|
-
<div
|
|
131
|
-
|
|
132
|
-
|
|
179
|
+
<div
|
|
180
|
+
:class="[
|
|
181
|
+
clockStyle,
|
|
182
|
+
classBinding(classObject, 'unitLabel', 'unit-label-container'),
|
|
183
|
+
]"
|
|
184
|
+
>
|
|
185
|
+
days
|
|
186
|
+
</div>
|
|
187
|
+
<div
|
|
188
|
+
:class="[
|
|
189
|
+
clockStyle,
|
|
190
|
+
classBinding(
|
|
191
|
+
classObject,
|
|
192
|
+
'unitContainer',
|
|
193
|
+
'unit-container contrast-border'
|
|
194
|
+
),
|
|
195
|
+
]"
|
|
196
|
+
>
|
|
197
|
+
<div
|
|
198
|
+
v-if="clockStyle == 'windows'"
|
|
199
|
+
:class="[fontClass, classBinding(classObject, 'unit', '')]"
|
|
200
|
+
>
|
|
133
201
|
{{ days }}
|
|
134
202
|
</div>
|
|
135
203
|
<transition v-if="clockStyle == 'dials'" name="slide" mode="out-in">
|
|
136
|
-
<div
|
|
204
|
+
<div
|
|
205
|
+
:key="days"
|
|
206
|
+
:class="[fontClass, classBinding(classObject, 'unit', '')]"
|
|
207
|
+
>
|
|
208
|
+
{{ days }}
|
|
209
|
+
</div>
|
|
137
210
|
</transition>
|
|
138
211
|
</div>
|
|
139
212
|
</div>
|
|
@@ -141,16 +214,42 @@ onMounted(() => {
|
|
|
141
214
|
<!-- Minutes -->
|
|
142
215
|
<div
|
|
143
216
|
v-if="showMinutes"
|
|
144
|
-
class="
|
|
145
|
-
|
|
217
|
+
:class="[
|
|
218
|
+
{ dropshade: clockStyle == 'dials' },
|
|
219
|
+
classBinding(classObject, 'itemContainer', 'item-container'),
|
|
220
|
+
]"
|
|
146
221
|
>
|
|
147
|
-
<div
|
|
148
|
-
|
|
149
|
-
|
|
222
|
+
<div
|
|
223
|
+
:class="[
|
|
224
|
+
clockStyle,
|
|
225
|
+
classBinding(classObject, 'unitLabel', 'unit-label-container'),
|
|
226
|
+
]"
|
|
227
|
+
>
|
|
228
|
+
min
|
|
229
|
+
</div>
|
|
230
|
+
<div
|
|
231
|
+
:class="[
|
|
232
|
+
clockStyle,
|
|
233
|
+
classBinding(
|
|
234
|
+
classObject,
|
|
235
|
+
'unitContainer',
|
|
236
|
+
'unit-container contrast-border'
|
|
237
|
+
),
|
|
238
|
+
]"
|
|
239
|
+
>
|
|
240
|
+
<div
|
|
241
|
+
v-if="clockStyle == 'windows'"
|
|
242
|
+
:class="[fontClass, classBinding(classObject, 'unit', '')]"
|
|
243
|
+
>
|
|
150
244
|
{{ minutes }}
|
|
151
245
|
</div>
|
|
152
246
|
<transition v-if="clockStyle == 'dials'" name="slide" mode="out-in">
|
|
153
|
-
<div
|
|
247
|
+
<div
|
|
248
|
+
:key="minutes"
|
|
249
|
+
:class="[fontClass, classBinding(classObject, 'unit', '')]"
|
|
250
|
+
>
|
|
251
|
+
{{ minutes }}
|
|
252
|
+
</div>
|
|
154
253
|
</transition>
|
|
155
254
|
</div>
|
|
156
255
|
</div>
|
|
@@ -158,16 +257,46 @@ onMounted(() => {
|
|
|
158
257
|
<!-- Seconds -->
|
|
159
258
|
<div
|
|
160
259
|
v-if="showSeconds"
|
|
161
|
-
class="
|
|
162
|
-
|
|
260
|
+
:class="[
|
|
261
|
+
{ dropshade: clockStyle == 'dials' },
|
|
262
|
+
classBinding(classObject, 'itemContainer', 'item-container last'),
|
|
263
|
+
]"
|
|
163
264
|
>
|
|
164
|
-
<div
|
|
165
|
-
|
|
166
|
-
|
|
265
|
+
<div
|
|
266
|
+
:class="[
|
|
267
|
+
clockStyle,
|
|
268
|
+
classBinding(
|
|
269
|
+
classObject,
|
|
270
|
+
'unitLabel',
|
|
271
|
+
'unit-label-container last'
|
|
272
|
+
),
|
|
273
|
+
]"
|
|
274
|
+
>
|
|
275
|
+
sec
|
|
276
|
+
</div>
|
|
277
|
+
<div
|
|
278
|
+
:class="[
|
|
279
|
+
clockStyle,
|
|
280
|
+
classBinding(
|
|
281
|
+
classObject,
|
|
282
|
+
'unitContainer',
|
|
283
|
+
'unit-container contrast-border'
|
|
284
|
+
),
|
|
285
|
+
]"
|
|
286
|
+
>
|
|
287
|
+
<div
|
|
288
|
+
v-if="clockStyle == 'windows'"
|
|
289
|
+
:class="[fontClass, classBinding(classObject, 'unit', '')]"
|
|
290
|
+
>
|
|
167
291
|
{{ seconds }}
|
|
168
292
|
</div>
|
|
169
293
|
<transition v-if="clockStyle == 'dials'" name="slide" mode="out-in">
|
|
170
|
-
<div
|
|
294
|
+
<div
|
|
295
|
+
:key="seconds"
|
|
296
|
+
:class="[fontClass, classBinding(classObject, 'unit', '')]"
|
|
297
|
+
>
|
|
298
|
+
{{ seconds }}
|
|
299
|
+
</div>
|
|
171
300
|
</transition>
|
|
172
301
|
</div>
|
|
173
302
|
</div>
|
|
@@ -3,37 +3,60 @@ import { storeToRefs } from "pinia";
|
|
|
3
3
|
import { useDateFormat } from "../../composables/useDateFormat";
|
|
4
4
|
import { useConferenceHelpers } from "../../composables/useConferenceHelpers";
|
|
5
5
|
import { useEvents } from "../../composables/useEvents";
|
|
6
|
+
import { useClassBinding } from "../../composables/useClassBinding";
|
|
6
7
|
import CommonSponsor from "../agenda/components/Sponsor.vue";
|
|
7
|
-
import { Conference } from "
|
|
8
|
+
import { Conference } from "../../models/conference";
|
|
9
|
+
import { Position } from "../../enums/general";
|
|
10
|
+
import { listEventsClassObj } from "../../@types/components";
|
|
8
11
|
|
|
9
12
|
interface Props {
|
|
10
13
|
showSponsors?: boolean;
|
|
11
14
|
showBrand?: boolean;
|
|
12
|
-
|
|
15
|
+
showCountdown?: boolean;
|
|
16
|
+
mediaButton?: boolean;
|
|
13
17
|
registerButton?: boolean;
|
|
14
18
|
loginButton?: boolean;
|
|
15
19
|
viewInfoButton?: boolean;
|
|
16
20
|
isUpcoming?: boolean;
|
|
21
|
+
showEventImage?: boolean;
|
|
22
|
+
sponsorPosition?: Position;
|
|
23
|
+
borderPosition?: Position;
|
|
24
|
+
countdownPosition?: Position;
|
|
25
|
+
classObject?: listEventsClassObj;
|
|
17
26
|
}
|
|
18
27
|
|
|
19
28
|
const props = withDefaults(defineProps<Props>(), {
|
|
20
29
|
showSponsors: true,
|
|
21
30
|
showBrand: true,
|
|
22
|
-
|
|
31
|
+
showCountdown: true,
|
|
32
|
+
mediaButton: true,
|
|
23
33
|
registerButton: true,
|
|
24
34
|
loginButton: true,
|
|
25
35
|
viewInfoButton: true,
|
|
26
36
|
isUpcoming: true,
|
|
37
|
+
showEventImage: true,
|
|
38
|
+
sponsorPosition: Position.RIGHT,
|
|
39
|
+
borderPosition: Position.MIDDLE,
|
|
40
|
+
countdownPosition: Position.BOTTOM,
|
|
41
|
+
classObject: () => {
|
|
42
|
+
return {};
|
|
43
|
+
},
|
|
27
44
|
});
|
|
28
45
|
|
|
29
46
|
const {
|
|
30
47
|
showSponsors,
|
|
31
48
|
showBrand,
|
|
32
|
-
|
|
49
|
+
showCountdown,
|
|
50
|
+
mediaButton,
|
|
33
51
|
registerButton,
|
|
34
52
|
loginButton,
|
|
35
53
|
viewInfoButton,
|
|
36
54
|
isUpcoming,
|
|
55
|
+
showEventImage,
|
|
56
|
+
sponsorPosition,
|
|
57
|
+
borderPosition,
|
|
58
|
+
countdownPosition,
|
|
59
|
+
classObject,
|
|
37
60
|
} = toRefs(props);
|
|
38
61
|
|
|
39
62
|
// data
|
|
@@ -69,6 +92,8 @@ const {
|
|
|
69
92
|
isHomePage,
|
|
70
93
|
} = useEvents();
|
|
71
94
|
|
|
95
|
+
const { classBinding } = useClassBinding();
|
|
96
|
+
|
|
72
97
|
const showViewButton = (_conference: Conference): boolean => {
|
|
73
98
|
return isUpcoming.value
|
|
74
99
|
? showConferenceViewButton(_conference)
|
|
@@ -88,7 +113,7 @@ const getVideoButtonText = (_conference: Conference): string => {
|
|
|
88
113
|
};
|
|
89
114
|
|
|
90
115
|
// computed
|
|
91
|
-
const eventType = computed((): Conference => {
|
|
116
|
+
const eventType = computed((): Conference[] => {
|
|
92
117
|
return isUpcoming.value ? upcomingEvents.value : pastEvents.value;
|
|
93
118
|
});
|
|
94
119
|
|
|
@@ -105,68 +130,188 @@ const showLoginButton = computed((): boolean => {
|
|
|
105
130
|
</script>
|
|
106
131
|
|
|
107
132
|
<template>
|
|
133
|
+
<!-- list container -->
|
|
108
134
|
<div class="flex w-full flex-col">
|
|
109
|
-
|
|
135
|
+
<!-- list container -->
|
|
136
|
+
<div
|
|
137
|
+
:class="
|
|
138
|
+
classBinding(classObject, 'listContainer', 'container flex-1 mx-auto')
|
|
139
|
+
"
|
|
140
|
+
>
|
|
141
|
+
<!-- individual event container -->
|
|
110
142
|
<div
|
|
111
143
|
v-for="conference in eventType"
|
|
112
144
|
:key="conference.id"
|
|
113
|
-
class="
|
|
145
|
+
:class="[
|
|
146
|
+
{
|
|
147
|
+
'border-1 border-t border-color-accent-2':
|
|
148
|
+
borderPosition === Position.TOP,
|
|
149
|
+
},
|
|
150
|
+
classBinding(
|
|
151
|
+
classObject,
|
|
152
|
+
'eventContainer',
|
|
153
|
+
'flex flex-col items-center md:flex-row py-4'
|
|
154
|
+
),
|
|
155
|
+
]"
|
|
114
156
|
>
|
|
115
|
-
|
|
157
|
+
<!-- event image -->
|
|
158
|
+
<div
|
|
159
|
+
v-if="showEventImage"
|
|
160
|
+
:class="
|
|
161
|
+
classBinding(
|
|
162
|
+
classObject,
|
|
163
|
+
'eventImageContainer',
|
|
164
|
+
'flex w-full md:w-1/3 pb-3 px-3 md:px-6 overflow-hidden'
|
|
165
|
+
)
|
|
166
|
+
"
|
|
167
|
+
>
|
|
116
168
|
<img
|
|
117
|
-
class="
|
|
169
|
+
:class="
|
|
170
|
+
classBinding(
|
|
171
|
+
classObject,
|
|
172
|
+
'eventImage',
|
|
173
|
+
'flex-1 self-center mx-auto w-full'
|
|
174
|
+
)
|
|
175
|
+
"
|
|
118
176
|
:src="conference.photo"
|
|
119
177
|
/>
|
|
120
178
|
</div>
|
|
121
|
-
|
|
179
|
+
<!-- event details container -->
|
|
122
180
|
<div
|
|
123
|
-
class="
|
|
181
|
+
:class="[
|
|
182
|
+
{ 'md:w-2/3': showEventImage },
|
|
183
|
+
classBinding(
|
|
184
|
+
classObject,
|
|
185
|
+
'eventContentContainer',
|
|
186
|
+
'flex flex-col justify-center text-center w-full md:pr-6 md:text-left md:justify-start md:items-start'
|
|
187
|
+
),
|
|
188
|
+
]"
|
|
124
189
|
>
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
190
|
+
<!-- event brand, name, date and countdown container -->
|
|
191
|
+
<div
|
|
192
|
+
:class="[
|
|
193
|
+
{
|
|
194
|
+
'border-1 border-b border-color-accent-2 mb-6':
|
|
195
|
+
borderPosition === Position.MIDDLE,
|
|
196
|
+
},
|
|
197
|
+
classBinding(
|
|
198
|
+
classObject,
|
|
199
|
+
'eventDetailsContainer',
|
|
200
|
+
'w-full flex flex-col lg:flex-row'
|
|
201
|
+
),
|
|
202
|
+
]"
|
|
203
|
+
>
|
|
204
|
+
<!-- event details -->
|
|
205
|
+
<div
|
|
206
|
+
:class="classBinding(classObject, 'eventDetails', 'flex-grow')"
|
|
137
207
|
>
|
|
138
|
-
<
|
|
139
|
-
|
|
208
|
+
<h3
|
|
209
|
+
v-if="showBrand && getBrand(conference.affiliates).length"
|
|
210
|
+
:class="
|
|
211
|
+
classBinding(
|
|
212
|
+
classObject,
|
|
213
|
+
'eventBrand',
|
|
214
|
+
'text-base font-bold leading-tight tracking-wide mb-3'
|
|
215
|
+
)
|
|
216
|
+
"
|
|
140
217
|
>
|
|
141
|
-
{{ conference.
|
|
142
|
-
</
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
218
|
+
{{ getBrand(conference.affiliates) }}
|
|
219
|
+
</h3>
|
|
220
|
+
<nuxt-link
|
|
221
|
+
:to="`/${isUpcoming ? 'upcoming-events' : 'past-events'}/${
|
|
222
|
+
conference.id
|
|
223
|
+
}`"
|
|
224
|
+
class="no-underline"
|
|
225
|
+
>
|
|
226
|
+
<h2
|
|
227
|
+
:class="
|
|
228
|
+
classBinding(
|
|
229
|
+
classObject,
|
|
230
|
+
'eventName',
|
|
231
|
+
'text-2xl lg:text-3xl font-medium mb-2 conf-name-alignment'
|
|
232
|
+
)
|
|
233
|
+
"
|
|
234
|
+
>
|
|
235
|
+
{{ conference.name }}
|
|
236
|
+
</h2>
|
|
237
|
+
</nuxt-link>
|
|
238
|
+
<p
|
|
239
|
+
:class="
|
|
240
|
+
classBinding(
|
|
241
|
+
classObject,
|
|
242
|
+
'eventDate',
|
|
243
|
+
'text-base leading-normal tracking-wide font-light uppercase md:text-md lg:text-lg'
|
|
244
|
+
)
|
|
245
|
+
"
|
|
150
246
|
>
|
|
151
|
-
|
|
247
|
+
{{ formatDate(conference.start_date) }}
|
|
248
|
+
<span v-if="!isSingleDayEvent(conference)">
|
|
249
|
+
- {{ formatDate(conference.end_date) }}</span
|
|
250
|
+
>
|
|
251
|
+
</p>
|
|
252
|
+
</div>
|
|
253
|
+
<!-- countdown timer - top-aligned -->
|
|
254
|
+
<div
|
|
255
|
+
v-if="
|
|
256
|
+
isUpcoming &&
|
|
257
|
+
showCountdown &&
|
|
258
|
+
countdownPosition === Position.TOP &&
|
|
259
|
+
pagesConfigValue('main.countdown_timer')
|
|
260
|
+
"
|
|
261
|
+
:class="
|
|
262
|
+
classBinding(
|
|
263
|
+
classObject,
|
|
264
|
+
'countdownContainerTop',
|
|
265
|
+
'flex-auto flex items-center self-center mb-4 lg:mb-0'
|
|
266
|
+
)
|
|
267
|
+
"
|
|
268
|
+
>
|
|
269
|
+
<CommonCountdownTimer
|
|
270
|
+
:date="conference.start_date"
|
|
271
|
+
:is-compact="true"
|
|
272
|
+
:class-object="classObject.components.countdownTimer"
|
|
273
|
+
></CommonCountdownTimer>
|
|
274
|
+
</div>
|
|
152
275
|
</div>
|
|
153
|
-
|
|
276
|
+
<!-- event button, countdown timer, and sponsors container -->
|
|
277
|
+
<div
|
|
278
|
+
:class="
|
|
279
|
+
classBinding(
|
|
280
|
+
classObject,
|
|
281
|
+
'buttonCountdownSponsorsContainer',
|
|
282
|
+
'flex flex-col w-full'
|
|
283
|
+
)
|
|
284
|
+
"
|
|
285
|
+
>
|
|
154
286
|
<div
|
|
155
|
-
class="
|
|
287
|
+
:class="
|
|
288
|
+
classBinding(
|
|
289
|
+
classObject,
|
|
290
|
+
'buttonCountdownContainer',
|
|
291
|
+
'flex-1 flex flex-col justify-between xl:flex-row w-full'
|
|
292
|
+
)
|
|
293
|
+
"
|
|
156
294
|
>
|
|
157
295
|
<div
|
|
158
|
-
class="
|
|
296
|
+
:class="
|
|
297
|
+
classBinding(
|
|
298
|
+
classObject,
|
|
299
|
+
'buttonContainer',
|
|
300
|
+
'flex-auto mr-0 xl:mr-4'
|
|
301
|
+
)
|
|
302
|
+
"
|
|
159
303
|
>
|
|
304
|
+
<!-- view info button -->
|
|
160
305
|
<button
|
|
161
306
|
v-if="viewInfoButton"
|
|
162
|
-
:class="buttonClass"
|
|
307
|
+
:class="classBinding(classObject, 'buttonItem', buttonClass)"
|
|
163
308
|
@click="goEventPage(conference)"
|
|
164
309
|
>
|
|
165
310
|
View Info
|
|
166
311
|
</button>
|
|
167
|
-
<!-- view
|
|
312
|
+
<!-- view live/preview archive button -->
|
|
168
313
|
<a
|
|
169
|
-
v-if="
|
|
314
|
+
v-if="mediaButton && showViewButton(conference)"
|
|
170
315
|
:href="getVideoUrl(conference)"
|
|
171
316
|
:target="
|
|
172
317
|
/^http/.test(!isUpcoming && getVideoUrl(conference))
|
|
@@ -174,21 +319,25 @@ const showLoginButton = computed((): boolean => {
|
|
|
174
319
|
: '_self'
|
|
175
320
|
"
|
|
176
321
|
>
|
|
177
|
-
<button
|
|
322
|
+
<button
|
|
323
|
+
:class="
|
|
324
|
+
classBinding(classObject, 'buttonItem', buttonClass)
|
|
325
|
+
"
|
|
326
|
+
>
|
|
178
327
|
{{ getVideoButtonText(conference) }}
|
|
179
328
|
</button>
|
|
180
329
|
</a>
|
|
181
330
|
|
|
182
|
-
<!-- login -->
|
|
331
|
+
<!-- login button -->
|
|
183
332
|
<button
|
|
184
333
|
v-if="showLoginButton"
|
|
185
|
-
:class="buttonClass"
|
|
334
|
+
:class="classBinding(classObject, 'buttonItem', buttonClass)"
|
|
186
335
|
@click="setConferenceToLoginTo(conference)"
|
|
187
336
|
>
|
|
188
337
|
Log In
|
|
189
338
|
</button>
|
|
190
339
|
|
|
191
|
-
<!-- register -->
|
|
340
|
+
<!-- register button -->
|
|
192
341
|
<a
|
|
193
342
|
v-if="registerButton && showConferenceRegButton(conference)"
|
|
194
343
|
:href="getConferenceRegUrl(conference)"
|
|
@@ -198,43 +347,126 @@ const showLoginButton = computed((): boolean => {
|
|
|
198
347
|
: '_self'
|
|
199
348
|
"
|
|
200
349
|
>
|
|
201
|
-
<button
|
|
350
|
+
<button
|
|
351
|
+
:class="
|
|
352
|
+
classBinding(classObject, 'buttonItem', buttonClass)
|
|
353
|
+
"
|
|
354
|
+
>
|
|
202
355
|
{{ getConferenceRegText(conference) }}
|
|
203
356
|
</button>
|
|
204
357
|
</a>
|
|
205
358
|
</div>
|
|
359
|
+
<!-- countdown timer - right-aligned -->
|
|
206
360
|
<div
|
|
207
|
-
v-if="
|
|
208
|
-
|
|
361
|
+
v-if="
|
|
362
|
+
isUpcoming &&
|
|
363
|
+
showCountdown &&
|
|
364
|
+
countdownPosition === Position.RIGHT &&
|
|
365
|
+
pagesConfigValue('main.countdown_timer')
|
|
366
|
+
"
|
|
367
|
+
class="flex-auto md:flex mt-3 md:mt-2"
|
|
368
|
+
:class="
|
|
369
|
+
classBinding(
|
|
370
|
+
classObject,
|
|
371
|
+
'countdownContainerRight',
|
|
372
|
+
'flex-auto flex items-center self-center mb-4 lg:mb-0'
|
|
373
|
+
)
|
|
374
|
+
"
|
|
209
375
|
>
|
|
210
376
|
<CommonCountdownTimer
|
|
211
377
|
:date="conference.start_date"
|
|
212
378
|
:is-compact="true"
|
|
379
|
+
:class-object="classObject.components.countdownTimer"
|
|
213
380
|
></CommonCountdownTimer>
|
|
214
381
|
</div>
|
|
215
382
|
</div>
|
|
216
|
-
|
|
383
|
+
<!-- countdown timer - bottom-aligned -->
|
|
384
|
+
<div
|
|
385
|
+
v-if="
|
|
386
|
+
isUpcoming &&
|
|
387
|
+
showCountdown &&
|
|
388
|
+
countdownPosition === Position.BOTTOM &&
|
|
389
|
+
pagesConfigValue('main.countdown_timer')
|
|
390
|
+
"
|
|
391
|
+
:class="
|
|
392
|
+
classBinding(
|
|
393
|
+
classObject,
|
|
394
|
+
'countdownContainerBottom',
|
|
395
|
+
'flex-auto md:flex my-3 md:my-2'
|
|
396
|
+
)
|
|
397
|
+
"
|
|
398
|
+
>
|
|
399
|
+
<CommonCountdownTimer
|
|
400
|
+
:date="conference.start_date"
|
|
401
|
+
:is-compact="true"
|
|
402
|
+
:class-object="classObject.components.countdownTimer"
|
|
403
|
+
></CommonCountdownTimer>
|
|
404
|
+
</div>
|
|
405
|
+
<!-- sponsors container - bottom-aligned -->
|
|
406
|
+
<div
|
|
407
|
+
v-if="showSponsors && sponsorPosition === Position.BOTTOM"
|
|
408
|
+
class=""
|
|
409
|
+
:class="
|
|
410
|
+
classBinding(
|
|
411
|
+
classObject,
|
|
412
|
+
'sponsorsContainer',
|
|
413
|
+
'grid grid-cols-1 md:grid-cols-3 lg:grid-cols-5 gap-y-1.5 gap-x-3'
|
|
414
|
+
)
|
|
415
|
+
"
|
|
416
|
+
>
|
|
417
|
+
<!-- individual sponsor -->
|
|
217
418
|
<template
|
|
218
419
|
v-for="affiliate in orderAffiliates(conference.affiliates)"
|
|
219
|
-
:key="affiliate.id"
|
|
220
420
|
>
|
|
221
421
|
<CommonSponsor
|
|
222
422
|
v-if="affiliate.role == 'sponsor'"
|
|
423
|
+
:key="affiliate.id"
|
|
223
424
|
:sponsor="affiliate"
|
|
425
|
+
:class-object="classObject.components.sponsor"
|
|
224
426
|
></CommonSponsor>
|
|
225
427
|
</template>
|
|
226
428
|
</div>
|
|
227
429
|
</div>
|
|
228
430
|
</div>
|
|
431
|
+
<!-- sponsors container - right-aligned -->
|
|
432
|
+
<div
|
|
433
|
+
v-if="showSponsors && sponsorPosition === Position.RIGHT"
|
|
434
|
+
class="flex flex-col"
|
|
435
|
+
>
|
|
436
|
+
<!-- individual sponsor -->
|
|
437
|
+
<template v-for="affiliate in orderAffiliates(conference.affiliates)">
|
|
438
|
+
<CommonSponsor
|
|
439
|
+
v-if="affiliate.role == 'sponsor'"
|
|
440
|
+
:key="affiliate.id"
|
|
441
|
+
:sponsor="affiliate"
|
|
442
|
+
:class-object="classObject.components.sponsor"
|
|
443
|
+
></CommonSponsor>
|
|
444
|
+
</template>
|
|
445
|
+
</div>
|
|
229
446
|
</div>
|
|
230
447
|
</div>
|
|
448
|
+
<!-- login modal -->
|
|
231
449
|
<CommonModal
|
|
232
450
|
:visible="loginModalVisible"
|
|
451
|
+
:class="classObject.components.modal"
|
|
233
452
|
@trigger="loginModalVisible = false"
|
|
234
453
|
>
|
|
235
454
|
<template #modal-body>
|
|
236
|
-
<CommonLoginFullWidth
|
|
455
|
+
<CommonLoginFullWidth
|
|
456
|
+
:conference="conferenceToLoginTo"
|
|
457
|
+
:class="classObject.components.login"
|
|
458
|
+
/>
|
|
237
459
|
</template>
|
|
238
460
|
</CommonModal>
|
|
239
461
|
</div>
|
|
240
462
|
</template>
|
|
463
|
+
|
|
464
|
+
<style lang="scss" scoped>
|
|
465
|
+
.leading-tight {
|
|
466
|
+
line-height: 1.25rem;
|
|
467
|
+
}
|
|
468
|
+
|
|
469
|
+
.mr-4 {
|
|
470
|
+
margin-right: 1rem;
|
|
471
|
+
}
|
|
472
|
+
</style>
|
|
@@ -2,29 +2,53 @@
|
|
|
2
2
|
import { toRefs } from "vue";
|
|
3
3
|
import { Presenter } from "../../models/conference";
|
|
4
4
|
import { usePresenter } from "../../composables/usePresenter";
|
|
5
|
+
import { useClassBinding } from "../../composables/useClassBinding";
|
|
6
|
+
import { presenterListingClassObj } from "../../@types/components";
|
|
7
|
+
import { Position } from "../../enums/general";
|
|
5
8
|
|
|
6
9
|
type Props = {
|
|
7
10
|
presenter: Presenter;
|
|
8
|
-
textClass?: string;
|
|
9
|
-
linkClass?: string;
|
|
10
11
|
enableBio?: boolean;
|
|
11
12
|
showBio?: boolean;
|
|
12
13
|
isSmallGroupedTrack?: boolean;
|
|
14
|
+
bioLinkOnName?: boolean;
|
|
15
|
+
bioLinkText?: string;
|
|
16
|
+
bioLinkPosition?: Position;
|
|
17
|
+
imagePosition?: Position;
|
|
18
|
+
classObject?: presenterListingClassObj;
|
|
13
19
|
};
|
|
14
20
|
|
|
15
21
|
const props = withDefaults(defineProps<Props>(), {
|
|
16
|
-
textClass: "font-medium text-lg",
|
|
17
|
-
linkClass: "",
|
|
18
22
|
enableBio: true,
|
|
19
23
|
showBio: false,
|
|
20
24
|
isSmallGroupedTrack: false,
|
|
25
|
+
bioLinkOnName: true,
|
|
26
|
+
bioLinkText: "Read More >",
|
|
27
|
+
bioLinkPosition: Position.BOTTOM,
|
|
28
|
+
imagePosition: Position.LEFT,
|
|
29
|
+
classObject: () => {
|
|
30
|
+
return {
|
|
31
|
+
container: "",
|
|
32
|
+
presenterImageContainer: "",
|
|
33
|
+
presenterImage: "",
|
|
34
|
+
presenterContainer: "",
|
|
35
|
+
presenterTextContainer: "",
|
|
36
|
+
presenterNameLink: "",
|
|
37
|
+
presenterName: "",
|
|
38
|
+
presenterRole: "",
|
|
39
|
+
presenterTitle: "",
|
|
40
|
+
presenterBio: "",
|
|
41
|
+
presenterBioLink: "",
|
|
42
|
+
};
|
|
43
|
+
},
|
|
21
44
|
});
|
|
22
45
|
|
|
23
46
|
const emit = defineEmits(["clicked"]);
|
|
24
47
|
|
|
25
|
-
const { presenter,
|
|
48
|
+
const { presenter, enableBio, isSmallGroupedTrack, classObject } =
|
|
26
49
|
toRefs(props);
|
|
27
50
|
const { fullName, titleCompany } = usePresenter(presenter);
|
|
51
|
+
const { classBinding } = useClassBinding();
|
|
28
52
|
|
|
29
53
|
// methods
|
|
30
54
|
const handleClick = () => {
|
|
@@ -35,34 +59,105 @@ const handleClick = () => {
|
|
|
35
59
|
</script>
|
|
36
60
|
|
|
37
61
|
<template>
|
|
38
|
-
<div
|
|
39
|
-
<
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
:
|
|
44
|
-
|
|
45
|
-
|
|
62
|
+
<div>
|
|
63
|
+
<div
|
|
64
|
+
:class="[
|
|
65
|
+
{ 'flex-col': imagePosition !== Position.RIGHT },
|
|
66
|
+
{ 'md:flex-row': imagePosition !== Position.TOP },
|
|
67
|
+
{ 'flex-col-reverse': imagePosition === Position.RIGHT },
|
|
68
|
+
classBinding(
|
|
69
|
+
classObject,
|
|
70
|
+
'presenterContainer',
|
|
71
|
+
'flex-1 flex content-center items-center md:items-start'
|
|
72
|
+
),
|
|
73
|
+
]"
|
|
74
|
+
>
|
|
75
|
+
<div
|
|
76
|
+
v-if="presenter.photo.length && imagePosition !== Position.RIGHT"
|
|
77
|
+
:class="
|
|
78
|
+
classBinding(classObject, 'presenterImageContainer', 'shrink p-2')
|
|
79
|
+
"
|
|
46
80
|
>
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
81
|
+
<img
|
|
82
|
+
:src="presenter.photo"
|
|
83
|
+
:class="classBinding(classObject, 'presenterImage', '')"
|
|
84
|
+
/>
|
|
85
|
+
</div>
|
|
86
|
+
<div
|
|
87
|
+
:class="
|
|
88
|
+
classBinding(
|
|
89
|
+
classObject,
|
|
90
|
+
'presenterTextContainer',
|
|
91
|
+
'flex flex-col text-center md:text-left self-center'
|
|
92
|
+
)
|
|
93
|
+
"
|
|
53
94
|
>
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
95
|
+
<p class="my-1">
|
|
96
|
+
<a
|
|
97
|
+
v-if="enableBio && bioLinkOnName"
|
|
98
|
+
class="cursor-pointer"
|
|
99
|
+
:class="classBinding(classObject, 'presenterNameLink', '')"
|
|
100
|
+
@click="handleClick()"
|
|
101
|
+
><span :class="classBinding(classObject, 'presenterName', '')">
|
|
102
|
+
{{ fullName }}</span
|
|
103
|
+
></a
|
|
104
|
+
>
|
|
105
|
+
<span v-else :class="classBinding(classObject, 'presenterName', '')">
|
|
106
|
+
{{ fullName }}
|
|
107
|
+
</span>
|
|
108
|
+
<span
|
|
109
|
+
v-if="presenter.role == 'moderator'"
|
|
110
|
+
:class="[
|
|
111
|
+
isSmallGroupedTrack ? 'new-line' : 'no-new-line',
|
|
112
|
+
classBinding(classObject, 'presenterRole', 'text-grey-dark'),
|
|
113
|
+
]"
|
|
114
|
+
>Moderator</span
|
|
115
|
+
>
|
|
116
|
+
<span
|
|
117
|
+
v-if="titleCompany"
|
|
118
|
+
:class="[
|
|
119
|
+
isSmallGroupedTrack ? 'new-line' : 'new-line-responsive',
|
|
120
|
+
classBinding(
|
|
121
|
+
classObject,
|
|
122
|
+
'presenterTitle',
|
|
123
|
+
'font-light paragraph-color-1'
|
|
124
|
+
),
|
|
125
|
+
]"
|
|
126
|
+
>{{ titleCompany }}</span
|
|
127
|
+
>
|
|
128
|
+
</p>
|
|
129
|
+
<p
|
|
130
|
+
v-if="showBio && presenter.biography"
|
|
131
|
+
:class="
|
|
132
|
+
classBinding(
|
|
133
|
+
classObject,
|
|
134
|
+
'presenterBio',
|
|
135
|
+
'font-light text-base paragraph-color-1'
|
|
136
|
+
)
|
|
137
|
+
"
|
|
138
|
+
v-html="presenter.biography"
|
|
139
|
+
></p>
|
|
140
|
+
<div v-if="enableBio && !bioLinkOnName" class="shrink">
|
|
141
|
+
<a
|
|
142
|
+
class="cursor-pointer"
|
|
143
|
+
:class="classBinding(classObject, 'presenterBioLink', '')"
|
|
144
|
+
@click="handleClick()"
|
|
145
|
+
>{{ bioLinkText }}
|
|
146
|
+
</a>
|
|
147
|
+
</div>
|
|
148
|
+
</div>
|
|
149
|
+
<div
|
|
150
|
+
v-if="presenter.photo.length && imagePosition === Position.RIGHT"
|
|
151
|
+
:class="
|
|
152
|
+
classBinding(classObject, 'presenterImageContainer', 'shrink p-2')
|
|
153
|
+
"
|
|
59
154
|
>
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
155
|
+
<img
|
|
156
|
+
:src="presenter.photo"
|
|
157
|
+
:class="classBinding(classObject, 'presenterImage', '')"
|
|
158
|
+
/>
|
|
159
|
+
</div>
|
|
160
|
+
</div>
|
|
66
161
|
</div>
|
|
67
162
|
</template>
|
|
68
163
|
|
|
@@ -24,14 +24,18 @@ const { fullName, presenterImageStyle, itemWidthStyle, isGrayScale } =
|
|
|
24
24
|
<template>
|
|
25
25
|
<div>
|
|
26
26
|
<div v-if="useIcon" class="presenter-icon cursor-pointer">
|
|
27
|
-
<CommonSvgIcon
|
|
27
|
+
<CommonSvgIcon
|
|
28
|
+
icon="info"
|
|
29
|
+
:greyscale="isGrayScale"
|
|
30
|
+
@click="modalVisible = true"
|
|
31
|
+
></CommonSvgIcon>
|
|
28
32
|
</div>
|
|
29
33
|
|
|
30
34
|
<CommonPresenterListing
|
|
31
35
|
v-else
|
|
32
36
|
:presenter="presenter"
|
|
33
37
|
:enable-bio="true"
|
|
34
|
-
:show-bio="
|
|
38
|
+
:show-bio="true"
|
|
35
39
|
text-class="font-bold text-base"
|
|
36
40
|
link-class="agenda-presenter-color"
|
|
37
41
|
:is-small-grouped-track="isSmallGroupedTrack"
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export const useClassBinding = () => {
|
|
2
|
+
const classBinding = (_classObject, _element, _defaults) => {
|
|
3
|
+
const key = _element;
|
|
4
|
+
if (_classObject[`${key}`] === void 0 || !_classObject[`${key}`].length) {
|
|
5
|
+
return _defaults;
|
|
6
|
+
}
|
|
7
|
+
return _classObject[`${key}`];
|
|
8
|
+
};
|
|
9
|
+
return {
|
|
10
|
+
classBinding
|
|
11
|
+
};
|
|
12
|
+
};
|
|
@@ -43,8 +43,7 @@ export const useConferenceHelpers = (conference) => {
|
|
|
43
43
|
const isSingleDayEvent = (_conference) => {
|
|
44
44
|
const _selectedConference = _getSelectedConference(_conference);
|
|
45
45
|
const firstDay = new Date(_selectedConference.start_date).getMonth() + "/" + new Date(_selectedConference.start_date).getDate();
|
|
46
|
-
const lastDay = new Date(_selectedConference.end_date).getMonth() + "/" +
|
|
47
|
-
new Date(_selectedConference.end_date).getDate();
|
|
46
|
+
const lastDay = new Date(_selectedConference.end_date).getMonth() + "/" + new Date(_selectedConference.end_date).getDate();
|
|
48
47
|
return firstDay === lastDay;
|
|
49
48
|
};
|
|
50
49
|
const showConferenceWebcastButton = (_conference) => {
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { storeToRefs } from "pinia";
|
|
2
|
-
import { useRouter } from "vue-router";
|
|
2
|
+
import { useRouter, useRoute } from "vue-router";
|
|
3
3
|
import { sortBy } from "lodash-es";
|
|
4
|
+
import { useAuthStore, useTemplateConfigsStore } from "../store/index.mjs";
|
|
4
5
|
export const useEvents = () => {
|
|
5
6
|
const route = useRoute();
|
|
6
7
|
const router = useRouter();
|
|
@@ -32,7 +33,7 @@ export const useEvents = () => {
|
|
|
32
33
|
return brand;
|
|
33
34
|
};
|
|
34
35
|
const buttonClass = computed(() => {
|
|
35
|
-
return pagesConfigValue.value("main.countdown_timer") ? "mx-2 mb-2 w-5/6 sm:
|
|
36
|
+
return pagesConfigValue.value("main.countdown_timer") ? "mx-2 mb-2 w-5/6 sm:w-auto sm:mx-0 sm:mr-4 md:w-full xl:mr-1 xl:w-auto btn btn-secondary" : "mx-2 mb-2 w-5/6 sm:w-auto sm:mx-0 sm:mr-4 btn btn-secondary";
|
|
36
37
|
});
|
|
37
38
|
const isHomePage = computed(() => {
|
|
38
39
|
return route.name === "index";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@icvdeveloper/common-module",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.37",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"exports": {
|
|
@@ -35,6 +35,7 @@
|
|
|
35
35
|
"pinia-plugin-persistedstate": "^2.1.1",
|
|
36
36
|
"sass": "^1.54.2",
|
|
37
37
|
"sass-loader": "^13.0.2",
|
|
38
|
+
"tailwindcss-opentype": "^1.1.0",
|
|
38
39
|
"vite-svg-loader": "^3.4.0"
|
|
39
40
|
},
|
|
40
41
|
"devDependencies": {
|