Skip to content

Commit 1638d7a

Browse files
committed
showcase page design update
1 parent 88f2f88 commit 1638d7a

File tree

5 files changed

+1029
-703
lines changed

5 files changed

+1029
-703
lines changed

src/pages/showcase/_components/ShowcaseCard/index.tsx

Lines changed: 65 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
21
import React from 'react';
32
import clsx from 'clsx';
43
import Link from '@docusaurus/Link';
@@ -10,40 +9,46 @@ import { Tag, TagList, Tags, TagType, User } from '@site/src/data/users';
109
import { sortBy } from '@site/src/utils/jsUtils';
1110
import IdealImage from '@theme/IdealImage';
1211

13-
const TagComp = React.forwardRef<HTMLLIElement, Tag>(
14-
({label, color, description}, ref) => (
15-
<li ref={ref} className={styles.tag} title={description}>
16-
<span className={styles.textLabel}>{label.toLowerCase()}</span>
17-
<span className={styles.colorLabel} style={{backgroundColor: color}} />
18-
</li>
19-
),
20-
);
12+
const TagComp = React.forwardRef<
13+
HTMLLIElement,
14+
Tag & {label: string}
15+
>(({label, color, description}, ref) => (
16+
<li
17+
ref={ref}
18+
className={styles.enhancedTag}
19+
style={{
20+
'--tag-color': color,
21+
backgroundColor: `${color}20`,
22+
borderColor: `${color}40`
23+
} as React.CSSProperties}
24+
>
25+
<span className={styles.tagDot} style={{backgroundColor: color}}></span>
26+
{label.toLowerCase()}
27+
</li>
28+
));
2129

2230
function ShowcaseCardTag({tags}: {tags: TagType[]}) {
2331
const tagObjects = tags.map((tag) => ({tag, ...Tags[tag]}));
24-
25-
// Keep same order for all tags
2632
const tagObjectsSorted = sortBy(tagObjects, (tagObject) =>
2733
TagList.indexOf(tagObject.tag),
2834
);
2935

3036
return (
31-
<>
37+
<ul className={styles.enhancedTagsList}>
3238
{tagObjectsSorted.map((tagObject, index) => {
3339
const id = `showcase_card_tag_${tagObject.tag}`;
34-
3540
return (
3641
<Tooltip
3742
key={index}
3843
text={tagObject.description}
39-
anchorEl="#__docusaurus"
44+
anchorEl={`#${id}`}
4045
id={id}
4146
>
4247
<TagComp key={index} {...tagObject} />
4348
</Tooltip>
4449
);
4550
})}
46-
</>
51+
</ul>
4752
);
4853
}
4954

@@ -54,50 +59,59 @@ function ShowcaseCard({user}: {user: User}) {
5459

5560
const handleSourceClick = (e: React.MouseEvent) => {
5661
e.stopPropagation();
57-
// The link will handle the navigation
5862
};
5963

64+
console.log(user.preview)
65+
6066
return (
61-
<li key={user.title} className={clsx('card shadow--md', styles.card)}>
62-
<div className={styles.cardLink} onClick={handleCardClick} />
63-
<div className={clsx('card__image', styles.showcaseCardImage)}>
67+
<div className={styles.enhancedShowcaseCard}>
68+
{/* Image Section */}
69+
<div className={styles.showcaseCardImage}>
6470
<IdealImage img={user.preview} alt={user.title} />
71+
{user.tags.includes('favorite') && (
72+
<div className={styles.favoriteIcon}>
73+
<FavoriteIcon svgClass={styles.svgIconFavorite} size="small" />
74+
</div>
75+
)}
76+
{user.source && (
77+
<a
78+
href={user.source}
79+
target="_blank"
80+
rel="noopener noreferrer"
81+
className={styles.sourceButton}
82+
onClick={handleSourceClick}
83+
title="View Source Code"
84+
>
85+
<span className={styles.sourceIcon}>💻</span>
86+
<span className={styles.sourceText}>source</span>
87+
</a>
88+
)}
6589
</div>
66-
<div className="card__body">
90+
91+
{/* Content Section */}
92+
<div className={styles.showcaseCardContent}>
6793
<div className={styles.showcaseCardHeader}>
68-
<h4 className={styles.showcaseCardTitle}>
69-
<Link
70-
href={user.website}
71-
className={styles.showcaseCardLink}
72-
target="_blank"
73-
>
74-
{user.title}
75-
</Link>
76-
</h4>
77-
{user.tags.includes('favorite') && (
78-
<FavoriteIcon svgClass={styles.svgIconFavorite} size="small" />
79-
)}
80-
{user.source && (
81-
<Link
82-
href={user.source}
83-
className={clsx(
84-
'button button--secondary button--sm',
85-
styles.showcaseCardSrcBtn,
86-
)}
87-
target="_blank"
88-
rel="noopener noreferrer"
89-
onClick={handleSourceClick}
90-
>
91-
<Translate id="showcase.card.sourceLink">source</Translate>
92-
</Link>
93-
)}
94+
<h3 className={styles.showcaseCardTitle}>{user.title}</h3>
9495
</div>
95-
<p className={styles.showcaseCardBody}>{user.description}</p>
96-
</div>
97-
<ul className={clsx('card__footer', styles.cardFooter)}>
96+
97+
<p className={styles.showcaseCardDescription}>{user.description}</p>
98+
99+
{/* Tags */}
98100
<ShowcaseCardTag tags={user.tags} />
99-
</ul>
100-
</li>
101+
102+
{/* Footer */}
103+
<div className={styles.showcaseCardFooter}>
104+
<button className={styles.viewButton} onClick={handleCardClick}>
105+
106+
<span className={styles.viewIcon}>👁️</span>
107+
View Project
108+
</button>
109+
</div>
110+
</div>
111+
112+
{/* Card Effects */}
113+
<div className={styles.cardGlow}></div>
114+
</div>
101115
);
102116
}
103117

0 commit comments

Comments
 (0)