11<script setup lang="ts">
2- const props = withDefaults (defineProps <{
3- id: string ,
4- alt: string ,
5- title: string ,
6- size: number ,
7- link: string ,
8- linkText? : string ,
9- column? : ' left' | ' right' ,
10- row: ' top' | ' bottom' }>(), { column: ' right' , linkText: ' ' })
2+ const props = withDefaults (
3+ defineProps <{
4+ id: string ;
5+ alt: string ;
6+ title: string ;
7+ size: number ;
8+ link: string ;
9+ linkText? : string ;
10+ column? : " left" | " right" ;
11+ row: " top" | " bottom" ;
12+ }>(),
13+ { column: " right" , linkText: " " },
14+ );
1115
1216// Managing card overlay opacity
1317// - Laptops:
@@ -18,42 +22,55 @@ const props = withDefaults(defineProps<{
1822// (on Chrome: click = mouseenter + click; on Firefox: click = click)
1923// onLeave resets opacity (to 0) and forced mode (to disabled) so that we can hover again
2024
21- const isOpaque = ref (false )
22- const isClick = ref ()
23- const isEnter = ref ()
25+ const isOpaque = ref (false );
26+ const isClick = ref ();
27+ const isEnter = ref ();
2428const onClick = () => {
25- isClick .value = true
29+ isClick .value = true ;
2630 if (isEnter .value ) {
27- isOpaque .value = true
31+ isOpaque .value = true ;
2832 } else {
29- isOpaque .value = ! isOpaque .value
33+ isOpaque .value = ! isOpaque .value ;
3034 }
31- isEnter .value = false
32- }
35+ isEnter .value = false ;
36+ };
3337const onLeave = () => {
34- isClick .value = false
35- isOpaque .value = false
36- }
38+ isClick .value = false ;
39+ isOpaque .value = false ;
40+ };
3741const onEnter = () => {
38- isEnter .value = true
39- isOpaque .value = true
40- }
42+ isEnter .value = true ;
43+ isOpaque .value = true ;
44+ };
4145 </script >
4246
4347<template >
4448 <div
4549 :class =" [
4650 'col-12 md:col-6 flex p-0 card',
4751 props.column === 'left' ? 'md:justify-content-end' : '',
48- props.row === 'top' ? 'md:align-items-end' : 'md:align-items-start']"
52+ props.row === 'top' ? 'md:align-items-end' : 'md:align-items-start',
53+ ]"
4954 >
50- <div class =" card-inner md:mx-2 md:mb-2" @click =" onClick" @mouseenter =" onEnter" @mouseleave =" onLeave" >
55+ <div
56+ class =" card-inner md:mx-2 md:mb-2"
57+ @click =" onClick"
58+ @mouseenter =" onEnter"
59+ @mouseleave =" onLeave"
60+ >
5161 <div >
52- <nuxt-img :src =" `/links/${props.id}.png`" sizes =" sm:100vw md:360px lg:400px" :alt =" props.alt" />
62+ <nuxt-img
63+ :src =" `/links/${props.id}.png`"
64+ sizes =" sm:100vw md:360px lg:400px"
65+ :alt =" props.alt"
66+ />
5367 </div >
5468 <div
5569 class =" card-overlay text-white surface-900 px-4 py-2 absolute top-0 left-0 transition-ease-in-out transition-duration-500"
56- :class =" {'card-opaque' : isOpaque && isClick, 'card-transparent': !isOpaque && isClick}"
70+ :class =" {
71+ 'card-opaque': isOpaque && isClick,
72+ 'card-transparent': !isOpaque && isClick,
73+ }"
5774 >
5875 <div class =" flex h-full flex-column justify-content-between" >
5976 <div >
@@ -62,7 +79,10 @@ const onEnter = () => {
6279 </div >
6380 <div >
6481 <p >
65- <a :href =" props.link" class =" explicit-link" target =" _blank" ><i class =" pi pi-external-link mr-1" /> Go to {{ props.linkText ? props.linkText : props.link }}</a >
82+ <a :href =" props.link" class =" explicit-link" target =" _blank"
83+ ><i class =" pi pi-external-link mr-1" /> Go to
84+ {{ props.linkText ? props.linkText : props.link }}</a
85+ >
6686 </p >
6787 </div >
6888 </div >
@@ -72,7 +92,6 @@ const onEnter = () => {
7292</template >
7393
7494<style lang="postcss">
75-
7695.card {
7796 @media (max-width : 768 px ) {
7897 justify-content : center;
@@ -115,18 +134,18 @@ const onEnter = () => {
115134 }
116135
117136 &:hover {
118- color : #ffffff
137+ color : #ffffff ;
119138 }
120139 }
121140 }
122141 }
123142}
124143
125144.card-opaque {
126- opacity : 1 !important
145+ opacity : 1 !important ;
127146}
128147
129148.card-transparent {
130- opacity : 0 !important
149+ opacity : 0 !important ;
131150}
132151 </style >
0 commit comments