Skip to content

Commit 1720f73

Browse files
committed
Merge branch 'dev'
2 parents b7a466b + e333dfe commit 1720f73

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

41 files changed

+396
-76
lines changed

.eslintrc.cjs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ module.exports = {
1313
"vue/multi-word-component-names": ["error", {
1414
"ignores": [
1515
"Layout",
16+
"Container",
1617
]
1718
}]
1819
},

package-lock.json

Lines changed: 13 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,8 @@
2525
"vue": "^3.4.15",
2626
"vue-i18n": "^9.9.1",
2727
"vue-multiselect": "^3.0.0-beta.3",
28-
"vue-router": "^4.2.5"
28+
"vue-router": "^4.2.5",
29+
"vue3-marquee": "^4.2.0"
2930
},
3031
"devDependencies": {
3132
"@rushstack/eslint-patch": "^1.3.3",
170 KB
Loading
139 KB
Loading
Loading
15 KB
Loading
40.2 KB
Loading

src/assets/images/technologies/js.png

10 KB
Loading
80.1 KB
Loading
315 KB
Loading
12.7 KB
Loading
22.7 KB
Loading
136 KB
Loading
91.7 KB
Loading
1.39 KB
Loading
11.3 KB
Loading
81.5 KB
Loading

src/assets/images/technologies/ts.png

56.3 KB
Loading
4.08 KB
Loading
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
<script lang="ts" setup>
2+
import { useI18n } from 'vue-i18n'
3+
import AvatarBox from '@/components/AvatarBox/AvatarBox.vue'
4+
5+
const props = defineProps({
6+
name: {
7+
type: String,
8+
required: false,
9+
default: () => {
10+
const { t } = useI18n()
11+
12+
return t('views.home.author.name')
13+
}
14+
},
15+
role: {
16+
type: String,
17+
required: false,
18+
default: () => {
19+
const { t } = useI18n()
20+
21+
return t('views.home.author.role')
22+
}
23+
}
24+
})
25+
</script>
26+
27+
<template>
28+
<div class="author__info">
29+
<div class="author__info__text">
30+
<h1>
31+
{{ props.name }}
32+
</h1>
33+
<p>
34+
{{ props.role }}
35+
</p>
36+
</div>
37+
<AvatarBox />
38+
</div>
39+
</template>
40+
41+
<style lang="scss" scoped>
42+
@import '@/styles/app.scss';
43+
44+
.author__info {
45+
@include flex(row, center, center, 2rem);
46+
width: 100%;
47+
48+
@media (max-width: 768px) {
49+
@include flex(column-reverse, center, center, 1rem);
50+
}
51+
52+
.author__info__text {
53+
text-align: justify;
54+
55+
> h1 {
56+
font-size: $text-3xl;
57+
}
58+
59+
> p {
60+
font-size: $text-sm;
61+
font-weight: 500;
62+
}
63+
64+
@media (max-width: 768px) {
65+
> h1 {
66+
font-size: $text-2xl;
67+
}
68+
}
69+
}
70+
}
71+
</style>

src/components/Footer/AppFooter.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import IconGmail from '@/components/Icons/IconGmail.vue'
66
import IconGithub from '@/components/Icons/IconGithub.vue'
77
import IconLinkedin from '@/components/Icons/IconLinkedin.vue'
88
import FooterLinkIcon from '@/components/FooterLinkIcon/FooterLinkIcon.vue'
9-
import FooterLink from '@/types/components/FooterLink/FooterLink'
9+
import FooterLink from '@/types/components/FooterLink/FooterLink.type'
1010
1111
const isDark = useDark()
1212

src/components/FooterLinkIcon/FooterLinkIcon.vue

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<script lang="ts" setup>
22
import { useDark } from '@vueuse/core'
3-
import FooterLink from '@/types/components/FooterLink/FooterLink'
3+
import FooterLink from '@/types/components/FooterLink/FooterLink.type'
44
55
const props = defineProps<FooterLink>()
66
const isDark = useDark()
@@ -12,6 +12,7 @@ const resolveLink = (link: string) => {
1212

1313
<template>
1414
<button
15+
type="button"
1516
role="link"
1617
class="footer__link__icon"
1718
:class="isDark ? 'dark__footer__link' : 'light__footer__link'"

src/components/Header/AppHeader.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -228,7 +228,7 @@ watch(
228228
position: absolute;
229229
top: $header-height;
230230
left: 0;
231-
z-index: 2;
231+
z-index: 99;
232232
233233
background-color: rgb(0 0 0 / 85%);
234234
animation: enter 0.5s ease;

src/components/LocaleSelect/LocaleOption/LocaleOption.vue

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
<script setup lang="ts">
2-
import LocaleValueType from '@/types/components/LocaleSelect/LocaleValueType'
2+
import LocaleValue from '@/types/components/LocaleSelect/LocaleValue.type'
33
44
const props = defineProps({
55
option: {
6-
type: Object as () => LocaleValueType,
6+
type: Object as () => LocaleValue,
77
required: true,
88
},
99
})

src/components/LocaleSelect/LocaleSelect.vue

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { useDark } from '@vueuse/core'
44
55
import Locale from '@/types/i18n/Locale'
66
import LocaleOption from '@/components/LocaleSelect/LocaleOption/LocaleOption.vue'
7-
import LocaleValueType from '@/types/components/LocaleSelect/LocaleValueType'
7+
import LocaleValue from '@/types/components/LocaleSelect/LocaleValue.type'
88
99
import ptBRFlag from '@/assets/flags/pt-BR.png'
1010
import enUSFlag from '@/assets/flags/en-US.png'
@@ -24,19 +24,19 @@ export default {
2424
'en-US': enUSFlag,
2525
} as const;
2626
27-
const selectedLocale = ref<LocaleValueType>({
27+
const selectedLocale = ref<LocaleValue>({
2828
value: this.$i18n.locale as Locale,
2929
flag: countryFlags[this.$i18n.locale as Locale],
3030
})
3131
32-
const locales = this.$i18n.availableLocales.map((k): LocaleValueType => {
32+
const locales = this.$i18n.availableLocales.map((k): LocaleValue => {
3333
return {
3434
value: k as Locale,
3535
flag: countryFlags[k as Locale],
3636
}
3737
})
3838
39-
const updateLocale = (locale: LocaleValueType): void => {
39+
const updateLocale = (locale: LocaleValue): void => {
4040
selectedLocale.value = locale
4141
this.$i18n.locale = locale.value
4242
Lines changed: 151 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,151 @@
1+
<script lang="ts" setup>
2+
import { useI18n } from 'vue-i18n'
3+
import { useDark } from '@vueuse/core'
4+
import { mdiTools } from '@mdi/js'
5+
6+
import technologies from '@/components/TechStack/technologies'
7+
import Technology from '@/types/components/TechStack/Technology.type'
8+
9+
const props = defineProps({
10+
stack: {
11+
type: Array<Technology>,
12+
required: false,
13+
default: technologies
14+
},
15+
gradientDark: {
16+
type: Array<Number>,
17+
required: false,
18+
default: () => [18, 18, 18]
19+
},
20+
gradientLight: {
21+
type: Array<Number>,
22+
required: false,
23+
default: () => [227, 224, 226]
24+
},
25+
gradientLength: {
26+
type: String,
27+
required: false,
28+
default: '30%'
29+
},
30+
pauseOnHover: {
31+
type: Boolean,
32+
required: false,
33+
default: true
34+
},
35+
title: {
36+
type: String,
37+
default: () => {
38+
const { t } = useI18n()
39+
40+
return t('components.techStack.title')
41+
}
42+
}
43+
})
44+
45+
const isDark = useDark()
46+
</script>
47+
48+
<template>
49+
<div class="author__stack">
50+
<div class="stack__title">
51+
<SvgIcon
52+
size="40"
53+
type="mdi"
54+
:path="mdiTools"
55+
/>
56+
<h2>
57+
{{ props.title }}
58+
</h2>
59+
</div>
60+
<Marquee
61+
:gradient="true"
62+
:gradient-color="isDark ? props.gradientDark : props.gradientLight"
63+
:gradient-length="props.gradientLength"
64+
:pause-on-hover="props.pauseOnHover"
65+
>
66+
<div
67+
v-for="(technology, index) in props.stack"
68+
v-tooltip="technology.name"
69+
class="marquee__item"
70+
:key="`MarqueeItem[${index}:${technology.name}]`"
71+
>
72+
<img
73+
:src="technology.image"
74+
:alt="technology.name"
75+
class="marquee__img"
76+
:class="isDark ? 'dark' : 'light'"
77+
/>
78+
</div>
79+
</Marquee>
80+
</div>
81+
</template>
82+
83+
<style lang="scss" scoped>
84+
@import '@/styles/app.scss';
85+
86+
.author__stack {
87+
@include flex(column, flex-start, center, 1rem);
88+
padding: 0rem 2dvw;
89+
width: 100%;
90+
91+
&:has(.marquee__img:hover) .marquee__img:not(:hover) {
92+
filter: grayscale(100%);
93+
}
94+
95+
> .stack__title {
96+
@include flex(row, center, center, 0.8rem);
97+
width: 100%;
98+
99+
> h2 {
100+
font-size: $text-md;
101+
font-weight: 500;
102+
text-wrap: pretty;
103+
width: fit-content;
104+
}
105+
106+
@media screen {
107+
@media (max-width: 768px) {
108+
@include flex(column, center, center, 0.8rem);
109+
text-align: center;
110+
111+
> h2 {
112+
font-size: $text-sm;
113+
}
114+
}
115+
}
116+
}
117+
118+
.marquee__item {
119+
padding: 0.8rem;
120+
margin-left: 1rem;
121+
122+
> .marquee__img {
123+
max-width: 5rem;
124+
max-height: 5rem;
125+
transition: all 450ms cubic-bezier(0.23, 1, 0.320, 1);
126+
127+
&:hover {
128+
transform: scale(1.1);
129+
}
130+
131+
&.light {
132+
filter: drop-shadow(0 0.2rem 0.4rem rgb(0 0 0 / 0.3))
133+
}
134+
135+
&.dark {
136+
filter: drop-shadow(0 0.2rem 0.4rem rgb(255 255 255 / 0.3))
137+
}
138+
}
139+
}
140+
141+
@media screen {
142+
@media (max-width: 1024px) {
143+
padding: 0rem 1dvw;
144+
}
145+
146+
@media (max-width: 768px) {
147+
padding: 0rem 0rem;
148+
}
149+
}
150+
}
151+
</style>
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
import Technology from '@/types/components/TechStack/Technology.type'
2+
3+
import javascript from '@/assets/images/technologies/js.png'
4+
import typescript from '@/assets/images/technologies/ts.png'
5+
import python from '@/assets/images/technologies/python.png'
6+
import node from '@/assets/images/technologies/nodejs.png'
7+
import django from '@/assets/images/technologies/django.png'
8+
import vue from '@/assets/images/technologies/vue.png'
9+
import nuxt from '@/assets/images/technologies/nuxt.png'
10+
import angular from '@/assets/images/technologies/angular.png'
11+
import bootstrap from '@/assets/images/technologies/bootstrap.png'
12+
import bootstrapvue from '@/assets/images/technologies/bootstrapvue.png'
13+
import materialui from '@/assets/images/technologies/materialui.png'
14+
import sass from '@/assets/images/technologies/sass.png'
15+
import mysql from '@/assets/images/technologies/mysql.png'
16+
import postgres from '@/assets/images/technologies/postgres.png'
17+
import mongo from '@/assets/images/technologies/mongodb.png'
18+
import redis from '@/assets/images/technologies/redis.png'
19+
import docker from '@/assets/images/technologies/docker.png'
20+
21+
const technologies: Array<Technology> = [
22+
{ name: 'JavaScript', image: javascript },
23+
{ name: 'TypeScript', image: typescript },
24+
{ name: 'NodeJS', image: node },
25+
{ name: 'Python', image: python },
26+
{ name: 'Django', image: django },
27+
{ name: 'Vue', image: vue },
28+
{ name: 'NuxtJS', image: nuxt },
29+
{ name: 'Angular', image: angular },
30+
{ name: 'Sass/Scss', image: sass },
31+
{ name: 'Bootstrap', image: bootstrap },
32+
{ name: 'BootstrapVue', image: bootstrapvue },
33+
{ name: 'Material UI', image: materialui },
34+
{ name: 'Docker', image: docker },
35+
{ name: 'Redis', image: redis },
36+
{ name: 'MySQL', image: mysql },
37+
{ name: 'PostgreSQL', image: postgres },
38+
{ name: 'MongoDB', image: mongo }
39+
]
40+
41+
export default technologies

src/layout/Container/Container.vue

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
<template>
2+
<div class="adaptable__container">
3+
<slot />
4+
</div>
5+
</template>

0 commit comments

Comments
 (0)