Files
shop/components/UseCaseGrid.vue
Michael Czechowski 44107c0734
Some checks failed
Build and publish / build (push) Failing after 19s
feat: extract shop from mp/shop — initial libreshop/shop
Source moved verbatim from mp/shop/ on 2026-04-29; mp was the first
concrete adapter consuming the libreshop toolkit. Builds and publishes
git.librete.ch/libreshop/shop on every main / v* push via the standard
.gitea/workflows/build.yml shared across libreshop components.
2026-04-29 17:48:56 +02:00

42 lines
1.3 KiB
Vue

<template>
<section class="py-16">
<div class="xl:container mx-auto px-6">
<div class="text-center mb-10">
<h3 class="text-2xl font-bold mb-3">Anwendungsbereiche</h3>
<p class="text-gray-600 max-w-2xl mx-auto">Vielseitig einsetzbar für Kreative, Studenten und Berufstätige.</p>
</div>
<div class="grid grid-cols-2 lg:grid-cols-4 gap-4 lg:gap-6">
<div v-for="useCase in useCases" :key="useCase.title" class="text-center p-4 lg:p-6">
<component :is="iconComponents[useCase.icon]" class="w-8 h-8 lg:w-10 lg:h-10 mx-auto mb-3 text-gray-700" />
<h4 class="font-semibold mb-1 lg:mb-2 text-sm lg:text-base">{{ useCase.title }}</h4>
<p class="text-xs lg:text-sm text-gray-600">{{ useCase.description }}</p>
</div>
</div>
</div>
</section>
</template>
<script setup lang="ts">
import IconPen from "~/components/icons/IconPen.vue";
import IconPalette from "~/components/icons/IconPalette.vue";
import IconClipboard from "~/components/icons/IconClipboard.vue";
import IconBriefcase from "~/components/icons/IconBriefcase.vue";
export interface UseCase {
icon: "pen" | "palette" | "clipboard" | "briefcase";
title: string;
description: string;
}
defineProps<{
useCases: UseCase[];
}>();
const iconComponents = {
pen: IconPen,
palette: IconPalette,
clipboard: IconClipboard,
briefcase: IconBriefcase,
};
</script>