summaryrefslogtreecommitdiff
path: root/docs/showcases
diff options
context:
space:
mode:
Diffstat (limited to 'docs/showcases')
-rw-r--r--docs/showcases/Showcase.vue157
-rw-r--r--docs/showcases/Showcases.vue32
-rw-r--r--docs/showcases/showcases.ts39
3 files changed, 190 insertions, 38 deletions
diff --git a/docs/showcases/Showcase.vue b/docs/showcases/Showcase.vue
index a5a1e01..d58986b 100644
--- a/docs/showcases/Showcase.vue
+++ b/docs/showcases/Showcase.vue
@@ -1,38 +1,149 @@
<script setup>
-const props = defineProps({
- src: { type: String, required: true },
- label: { type: String, required: true },
- url: { type: String, required: true }
-});
+import { VPButton } from "vitepress/theme"
+defineProps({
+ image: { type: String, required: true },
+ url: { type: String, required: true },
+ icon: { type: String, required: false, default: "" },
+ title: { type: String, required: false, default: "" },
+ description: { type: String, required: false, default: "" },
+ author: { type: String, required: true },
+})
</script>
<template>
<figure>
- <a :href="url">
- <img :src="src" :alt="label" />
- </a>
- <figcaption>
- <span>{{ label }}</span>
- </figcaption>
+ <div class="image-wrapper">
+ <img :src="image" :alt="title">
+ <div class="overlay">
+ <div class="text-content">
+ <h3 v-if="title.length">
+ {{ title }}
+ </h3>
+ <h3 v-else>
+ {{ author }}'s dotfiles
+ </h3>
+ <p v-if="description">
+ {{ description }}
+ </p>
+ <span class="author">— {{ author }}</span>
+ <VPButton
+ tag
+ :href="url"
+ target="_blank"
+ size="medium"
+ text="View Setup"
+ />
+ </div>
+ </div>
+ <i
+ v-if="icon"
+ :class="icon"
+ class="language-icon"
+ />
+ </div>
</figure>
</template>
<style scoped>
-img {
- border-radius: 4px;
-}
-
-/* same as VPFeature */
figure {
- padding: 0.8rem;
- padding-bottom: 0;
- border-radius: 12px;
+ display: flex;
+ flex-direction: column;
+ align-items: flex-start;
+ padding: 1rem;
+ border-radius: 1rem;
background-color: var(--vp-c-bg-soft);
+ transition:
+ box-shadow 0.3s ease,
+ transform 0.3s ease;
+}
+
+figure:hover {
+ box-shadow: 0 1.5rem 3rem rgba(0, 0, 0, 0.2);
+ transform: translateY(-1rem);
+}
+
+.image-wrapper {
+ position: relative;
+ width: 100%;
+ border-radius: 0.5rem;
+ overflow: hidden;
+}
+
+figure img {
+ width: 100%;
+ transition: filter 0.3s ease;
+}
+
+figure .overlay {
+ position: absolute;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ background-color: rgba(0, 0, 0, 0.5);
+ display: flex;
+ align-items: center;
+ justify-content: flex-start;
+ padding: 1rem;
+ opacity: 0;
+ transition:
+ opacity 0.3s ease,
+ backdrop-filter 0.01s ease;
+}
+
+figure:hover .overlay {
+ opacity: 1;
+ backdrop-filter: blur(1rem);
+}
+
+.text-content {
+ color: white;
+ text-align: left;
+ opacity: 0;
+ transform: translateX(-5rem);
+ transition:
+ transform 0.6s cubic-bezier(0.22, 1, 0.36, 1),
+ opacity 0.6s ease;
+}
+
+figure:hover .text-content {
+ transform: translateX(2.5rem);
+ opacity: 1;
+}
+
+.text-content h3 {
+ margin: 0;
+ font-size: 2rem;
+}
+
+.text-content p {
+ margin: 0.5rem 0;
+ font-size: 1.1rem;
+}
+
+.text-content .author {
+ margin-top: 0.5rem;
+ text-align: left;
+ display: block;
+ position: relative;
+ font-style: italic;
+ font-size: 1rem;
+ color: #f0f0f0;
+}
+
+figure .language-icon {
+ position: absolute;
+ bottom: 0.5rem;
+ right: 0.5rem;
+ padding: 0.5rem;
+ background: var(--vp-c-bg-soft);
+ border-radius: 100%;
+ font-size: 1rem;
+ z-index: 1;
}
-figcaption {
- text-align: center;
- padding-top: .4em;
- padding-bottom: .6em;
+.VPButton {
+ margin-top: 2rem;
+ text-decoration: none;
}
</style>
diff --git a/docs/showcases/Showcases.vue b/docs/showcases/Showcases.vue
index 86a17bf..57cf5fa 100644
--- a/docs/showcases/Showcases.vue
+++ b/docs/showcases/Showcases.vue
@@ -1,18 +1,36 @@
<script setup lang="ts">
-import showcases from './showcases'
-import Showcase from './Showcase.vue'
+import showcases from "./showcases"
+import Showcase from "./Showcase.vue"
</script>
-
<template>
<div class="Showcases">
<template v-for="(showcase, index) in showcases" :key="index">
<div v-if="Array.isArray(showcase)" class="row">
- <div v-for="(elem, elemIndex) in showcase" :key="elemIndex" class="item"
- :class="`grid-${showcase.length}`">
- <Showcase v-bind="elem" />
+ <div
+ v-for="(elem, elemIndex) in showcase"
+ :key="elemIndex"
+ class="item"
+ :class="`grid-${showcase.length}`"
+ >
+ <Showcase
+ :image="elem.image"
+ :url="elem.url"
+ :icon="elem.icon"
+ :title="elem.title"
+ :description="elem.description"
+ :author="elem.author"
+ />
</div>
</div>
- <Showcase v-else v-bind="showcase" />
+ <Showcase
+ v-else
+ :image="showcase.image"
+ :url="showcase.url"
+ :icon="showcase.icon"
+ :title="showcase.title"
+ :description="showcase.description"
+ :author="showcase.author"
+ />
</template>
</div>
</template>
diff --git a/docs/showcases/showcases.ts b/docs/showcases/showcases.ts
index 138ae7f..2aea04a 100644
--- a/docs/showcases/showcases.ts
+++ b/docs/showcases/showcases.ts
@@ -1,15 +1,38 @@
type Showcase = {
- label: string
- src: string
+ image: string
url: string
+ icon?: string // https://devicon.dev/
+ title?: string
+ description?: string
+ author: string
}
-type Grid<T> = T
- | [T, T]
- | [T, T, T]
- | [T, T, T, T]
+// TODO: support more layouts
+type Grid<T> = T | [T, T]
export default [
- { label: "Placeholder (this is an ags v1 screenshot)", src: "/astal/showcase/aylur1.png", url: "https://github.com/Aylur/dotfiles" },
- // add more showcases here
+ {
+ image: "/astal/showcase/aylur.png",
+ url: "https://github.com/Aylur/dotfiles",
+ icon: "devicon-typescript-plain",
+ description: "Placeholder (this is an ags v1 screenshot)",
+ author: "Aylur",
+ },
+ {
+ image: "/astal/showcase/tokyob0t-super-duper-hiper-mega-ultra-contribution.webp",
+ url: "https://github.com/tokyob0t/dotfiles",
+ icon: "devicon-lua-plain",
+ title: "Tokyob0t's Desktop",
+ description: "Abandonad toda esperanza, vosotros que entráis aquí.",
+ author: "tokyob0t",
+ },
+ {
+ image: "/astal/showcase/kotontrion-kompass.webp",
+ url: "https://github.com/kotontrion/kompass",
+ icon: "devicon-vala-plain",
+ title: "kompass",
+ author: "kotontrion",
+ },
+
+ // add more showcases here~
] satisfies Array<Grid<Showcase>>