Skip to content

Commit 56aa556

Browse files
authored
Merge pull request #215 from vuejs-jp/enhance/event-page-section
update EventPageSection
2 parents 94b2b8e + 11c74fa commit 56aa556

File tree

12 files changed

+190
-21
lines changed

12 files changed

+190
-21
lines changed
Lines changed: 109 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,111 @@
1+
<script setup lang="ts">
2+
import type { PanelerInfo, SpeakerCategory } from '@vuejs-jp/model'
3+
import EventCard from '~/components/event/EventCard.vue'
4+
import EventAsset from '~/components/event/EventAsset.vue'
5+
import EventMultipleAssets from '~/components/event/EventMultipleAssets.vue'
6+
import PanelerList from '~/components/event/PanelerList.vue'
7+
8+
type _PanelerCategory = Extract<SpeakerCategory, 'panelEventPanelers'>
9+
type Panelers = Record<_PanelerCategory, PanelerInfo>
10+
11+
const data = await $fetch('/api/speakers')
12+
const { panelEventPanelers } = data as Panelers
13+
</script>
14+
115
<template>
2-
Event
16+
<div class="event">
17+
<div class="event-body">
18+
<VFTitle id="event" color="white" class="title">
19+
{{ $t('event.title') }}
20+
</VFTitle>
21+
<EventCard title="nextgen-frontend-crosstalk">
22+
<PanelerList :panelers="panelEventPanelers.list['nextgen-frontend-crosstalk']" />
23+
</EventCard>
24+
<EventCard title="welcome-vuejs-community">
25+
<PanelerList :panelers="panelEventPanelers.list['welcome-vuejs-community']" />
26+
</EventCard>
27+
<EventCard title="vuejs-handson">
28+
<EventMultipleAssets />
29+
</EventCard>
30+
<div class="event-body-column column-2">
31+
<EventCard title="creative-wall" font-class="title-2" padding-class="content-2">
32+
<EventAsset title="creative-wall" />
33+
</EventCard>
34+
<EventCard title="free-drinks-and-snacks" font-class="title-2" padding-class="content-2">
35+
<EventAsset title="free-drinks-and-snacks" />
36+
</EventCard>
37+
<EventCard title="tattoo-booth" font-class="title-2" padding-class="content-2">
38+
<EventAsset title="tattoo-booth" :margin-top="16" />
39+
</EventCard>
40+
<EventCard title="cocktail-bash" font-class="title-2" padding-class="content-2" />
41+
<EventCard title="sponsor-booth-fotolary" font-class="title-2" padding-class="content-2" />
42+
</div>
43+
</div>
44+
</div>
345
</template>
46+
47+
<style scoped>
48+
@import url('~/assets/media.css');
49+
50+
.event {
51+
--event-padding: calc(var(--unit) * 5.25) 0;
52+
--event-body-padding: calc(var(--unit) * 6) calc(var(--unit) * 7.5);
53+
54+
display: flex;
55+
justify-content: center;
56+
background-image: url('/sponsor/sponsor-bg-grid.png'),
57+
linear-gradient(to bottom, #35495e, #353b5e);
58+
background-position: top -1px left -1px;
59+
background-size: 30px;
60+
background-blend-mode: overlay;
61+
padding: var(--event-padding);
62+
color: var(--color-vue-blue);
63+
}
64+
65+
.event-body {
66+
margin: 0 auto;
67+
padding: var(--event-body-padding);
68+
margin: 0 1.5%;
69+
max-width: 960px;
70+
display: grid;
71+
gap: calc(var(--unit) * 3.75);
72+
}
73+
74+
.event-body-column {
75+
display: flex;
76+
flex-wrap: wrap;
77+
justify-content: center;
78+
gap: calc(var(--unit) * 5);
79+
column-gap: calc(var(--unit) * 5);
80+
}
81+
82+
.column-2 div {
83+
width: calc(50% - 20px);
84+
}
85+
86+
.title {
87+
text-align: center;
88+
line-height: 1.2;
89+
}
90+
91+
@media (--tablet) {
92+
.event-root {
93+
--event-padding: calc(var(--unit) * 2) 0;
94+
}
95+
96+
.event-body {
97+
--event-body-padding: calc(var(--unit) * 4) 4.5% calc(var(--unit) * 6);
98+
}
99+
}
100+
101+
@media (--mobile) {
102+
.event-body-column {
103+
flex-direction: column;
104+
gap: calc(var(--unit) * 3.75);
105+
}
106+
107+
.column-2 > div {
108+
width: 100%;
109+
}
110+
}
111+
</style>

apps/web/app/components/event/EventAsset.vue

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,27 +3,22 @@ import type { Event } from '@vuejs-jp/model'
33
44
interface EventAssetProps {
55
title: Extract<Event, 'creative-wall' | 'free-drinks-and-snacks' | 'tattoo-booth'>
6+
marginTop?: number
67
}
78
89
const props = defineProps<EventAssetProps>()
910
</script>
1011

1112
<template>
12-
<div class="eventcard-image">
13-
<img :src="`/event/${title}.png`" alt="" />
14-
</div>
13+
<img :src="`/event/${title}-old.png`" alt="" class="eventcard-image" :style="{ marginTop: `${marginTop}px` }" />
1514
</template>
1615

1716
<style scoped>
1817
.eventcard-image {
19-
--head-img-width: 292px;
20-
}
21-
22-
.eventcard-image ::v-deep(img) {
23-
width: var(--head-img-width);
18+
--head-img-height: 192px;
2419
25-
@media (--mobile) {
26-
--head-img-width: 100%;
27-
}
20+
width: 100%;
21+
height: var(--head-img-height);
22+
object-fit: cover;
2823
}
2924
</style>

apps/web/app/components/event/EventCard.vue

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,25 +3,31 @@ import type { Event } from '@vuejs-jp/model'
33
44
interface EventCardProps {
55
title: Event
6+
fontClass?: string
7+
paddingClass?: string
68
}
79
810
const props = defineProps<EventCardProps>()
911
</script>
1012

1113
<template>
12-
<VFEventFrame :title="$t(`event.${title.replaceAll('-', '_')}`)">
14+
<VFEventFrame :title="$t(`event.${title.replaceAll('-', '_')}`)" :font-class :padding-class>
1315
<template #content>
1416
<div class="eventcard-content">
1517
<MarkDownText :path="title.replaceAll('-', '_')" />
1618
</div>
1719
</template>
1820
<template #default>
19-
<slot />
21+
<div class="eventcard-default">
22+
<slot />
23+
</div>
2024
</template>
2125
</VFEventFrame>
2226
</template>
2327

2428
<style scoped>
29+
@import url('~/assets/media.css');
30+
2531
.eventcard-content {
2632
font-size: 16px;
2733
font-weight: 500;
@@ -39,4 +45,12 @@ const props = defineProps<EventCardProps>()
3945
transition: .2s;
4046
}
4147
48+
.eventcard-default {
49+
border-radius: 0 0 calc(var(--unit) * 3) calc(var(--unit) * 3);
50+
overflow: hidden;
51+
52+
@media (--mobile) {
53+
border-radius: 0 0 calc(var(--unit) * 1.5) calc(var(--unit) * 1.5);
54+
}
55+
}
4256
</style>

apps/web/app/components/event/EventMultipleAssets.vue

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ const props = withDefaults(defineProps<EventMultipleAssetsProps>(), {
2323
.eventcard-images {
2424
display: flex;
2525
gap: calc(var(--unit) * 1.5);
26+
padding: 0 calc(var(--unit) * 2);
2627
2728
@media (--mobile) {
2829
flex-direction: column;
@@ -32,6 +33,7 @@ const props = withDefaults(defineProps<EventMultipleAssetsProps>(), {
3233
.eventcard-images ::v-deep(img) {
3334
--head-img-height: 192px;
3435
36+
padding: 0;
3537
height: var(--head-img-height);
3638
}
3739
</style>

apps/web/app/components/event/PanelerList.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ const currentLocale = useLocaleCurrent().locale
1212
</script>
1313

1414
<template>
15-
<h4>{{ $t('event.scheduled_speakers') }}</h4>
1615
<div class="eventcard-persons">
1716
<VFSpeaker
1817
v-for="paneler in panelers"
@@ -33,6 +32,7 @@ const currentLocale = useLocaleCurrent().locale
3332
3433
display: flex;
3534
gap: calc(var(--unit) * 2);
35+
padding: 0 calc(var(--unit) * 2);
3636
}
3737
3838
.eventcard-persons ::v-deep(img) {
115 KB
Loading
20.2 KB
Loading
113 KB
Loading
76.4 KB
Loading
119 KB
Loading

0 commit comments

Comments
 (0)