From 4cb0fa14a22849455e038624dc70b24b8c40949e Mon Sep 17 00:00:00 2001 From: Padreug Date: Tue, 9 Jun 2026 17:01:51 +0200 Subject: [PATCH] feat(ui): install shadcn Card; sweep card patterns site-wide MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add the shadcn-vue Card primitive (Card / CardHeader / CardTitle / CardDescription / CardContent / CardFooter) at src/components/ui/card. Replace ~20 hand-rolled "rounded-lg border border-border bg-card …" patterns across nine views with : - ConceptView (slow-farming pillars) - VisionValuesView (philosophy + pillars + team) - GalleryView (image figure cards) - EventsView (program cards) - SymposiumView (included items + apply steps) - LongStaysView (path cards) - OpportunitiesView (group cards + apply explainers) - AccommodationView (rooms + cabins + exterior items) - ReservationsView (kind cards + contact card) - MarketplaceView (category cards) - HomeView (featured events) For image-bearing cards (events / rooms), use Card + CardContent so the image stays flush at the top of the card and the inner padding lives on the content slot. For clickable cards, the RouterLink wraps the Card so the whole card is the link target. Variants where the card sits on a tinted section (philosophy items on bg-card section, cabins on bg-card section) override Card's default bg-card with bg-background via the class prop. Co-Authored-By: Claude Opus 4.7 (1M context) --- src/components/ui/card/Card.vue | 21 ++++ src/components/ui/card/CardContent.vue | 14 +++ src/components/ui/card/CardDescription.vue | 14 +++ src/components/ui/card/CardFooter.vue | 14 +++ src/components/ui/card/CardHeader.vue | 14 +++ src/components/ui/card/CardTitle.vue | 18 ++++ src/components/ui/card/index.ts | 6 ++ src/views/AccommodationView.vue | 119 ++++++++++----------- src/views/ConceptView.vue | 9 +- src/views/EventsView.vue | 45 ++++---- src/views/GalleryView.vue | 35 +++--- src/views/HomeView.vue | 39 +++---- src/views/LongStaysView.vue | 9 +- src/views/MarketplaceView.vue | 9 +- src/views/OpportunitiesView.vue | 29 +++-- src/views/ReservationsView.vue | 13 +-- src/views/SymposiumView.vue | 29 +++-- src/views/VisionValuesView.vue | 25 ++--- 18 files changed, 265 insertions(+), 197 deletions(-) create mode 100644 src/components/ui/card/Card.vue create mode 100644 src/components/ui/card/CardContent.vue create mode 100644 src/components/ui/card/CardDescription.vue create mode 100644 src/components/ui/card/CardFooter.vue create mode 100644 src/components/ui/card/CardHeader.vue create mode 100644 src/components/ui/card/CardTitle.vue create mode 100644 src/components/ui/card/index.ts diff --git a/src/components/ui/card/Card.vue b/src/components/ui/card/Card.vue new file mode 100644 index 0000000..db8c07a --- /dev/null +++ b/src/components/ui/card/Card.vue @@ -0,0 +1,21 @@ + + + diff --git a/src/components/ui/card/CardContent.vue b/src/components/ui/card/CardContent.vue new file mode 100644 index 0000000..4c4dfc7 --- /dev/null +++ b/src/components/ui/card/CardContent.vue @@ -0,0 +1,14 @@ + + + diff --git a/src/components/ui/card/CardDescription.vue b/src/components/ui/card/CardDescription.vue new file mode 100644 index 0000000..02bddba --- /dev/null +++ b/src/components/ui/card/CardDescription.vue @@ -0,0 +1,14 @@ + + + diff --git a/src/components/ui/card/CardFooter.vue b/src/components/ui/card/CardFooter.vue new file mode 100644 index 0000000..fad3928 --- /dev/null +++ b/src/components/ui/card/CardFooter.vue @@ -0,0 +1,14 @@ + + + diff --git a/src/components/ui/card/CardHeader.vue b/src/components/ui/card/CardHeader.vue new file mode 100644 index 0000000..119700c --- /dev/null +++ b/src/components/ui/card/CardHeader.vue @@ -0,0 +1,14 @@ + + + diff --git a/src/components/ui/card/CardTitle.vue b/src/components/ui/card/CardTitle.vue new file mode 100644 index 0000000..d0c0ea7 --- /dev/null +++ b/src/components/ui/card/CardTitle.vue @@ -0,0 +1,18 @@ + + + diff --git a/src/components/ui/card/index.ts b/src/components/ui/card/index.ts new file mode 100644 index 0000000..e5c7cb2 --- /dev/null +++ b/src/components/ui/card/index.ts @@ -0,0 +1,6 @@ +export { default as Card } from "./Card.vue" +export { default as CardContent } from "./CardContent.vue" +export { default as CardDescription } from "./CardDescription.vue" +export { default as CardFooter } from "./CardFooter.vue" +export { default as CardHeader } from "./CardHeader.vue" +export { default as CardTitle } from "./CardTitle.vue" diff --git a/src/views/AccommodationView.vue b/src/views/AccommodationView.vue index 73f1b8f..f0bab13 100644 --- a/src/views/AccommodationView.vue +++ b/src/views/AccommodationView.vue @@ -2,6 +2,7 @@ import { useI18n } from 'vue-i18n' import { RouterLink } from 'vue-router' import { Button } from '@/components/ui/button' +import { Card, CardContent } from '@/components/ui/card' const { t, tm, rt } = useI18n() @@ -82,41 +83,39 @@ const exteriorItems = tm('accommodation.exterior.items') as string[]

{{ t('accommodation.rooms.subtitle') }}

    -
  • - -
    -
    -

    - {{ t(`accommodation.rooms.${room.key}.name`) }} -

    - - {{ - room.open - ? t('accommodation.statusOpen') - : t('accommodation.statusComingSoon') - }} - -
    -

    - {{ t(`accommodation.rooms.${room.key}.summary`) }} -

    -
    +
  • + + + +
    +

    + {{ t(`accommodation.rooms.${room.key}.name`) }} +

    + + {{ + room.open + ? t('accommodation.statusOpen') + : t('accommodation.statusComingSoon') + }} + +
    +

    + {{ t(`accommodation.rooms.${room.key}.summary`) }} +

    +
    +
@@ -131,27 +130,25 @@ const exteriorItems = tm('accommodation.exterior.items') as string[]

{{ t('accommodation.cabins.subtitle') }}

    -
  • - -
    -

    - {{ t(`accommodation.cabins.${cabin.key}`) }} -

    - - {{ t('accommodation.statusComingSoon') }} - -
    +
  • + + +
    +

    + {{ t(`accommodation.cabins.${cabin.key}`) }} +

    + + {{ t('accommodation.statusComingSoon') }} + +
    +
@@ -166,12 +163,10 @@ const exteriorItems = tm('accommodation.exterior.items') as string[]

{{ t('accommodation.exterior.subtitle') }}

    -
  • - {{ rt(item) }} +
  • + + {{ rt(item) }} +
diff --git a/src/views/ConceptView.vue b/src/views/ConceptView.vue index 50d04d6..d099c19 100644 --- a/src/views/ConceptView.vue +++ b/src/views/ConceptView.vue @@ -1,6 +1,7 @@