mirror of
https://github.com/InvoiceShelf/InvoiceShelf.git
synced 2026-04-07 21:44:51 +00:00
- Vite 6 → 8 (Rolldown bundler), laravel-vite-plugin 1 → 3, @vitejs/plugin-vue 5 → 6 - Tailwind CSS 3 → 4 with CSS-based config (@theme, @plugin, @utility) - Add @tailwindcss/vite plugin, remove postcss/autoprefixer/sass - Convert SCSS files to plain CSS (resources/sass → resources/css) - Migrate tailwind.config.js to CSS @theme directives - Rename deprecated utility classes (shadow-sm→shadow-xs, outline-none→outline-hidden, rounded-sm→rounded-xs, bg-gradient-to→bg-linear-to, ring→ring-3) - Migrate opacity utilities to color modifiers (bg-opacity, text-opacity, border-opacity, ring-opacity → color/N syntax) - Update primary color CSS vars to full rgb() values for TW4 color-mix() - Fix border-l color specificity for sidebar navigation (TW4 default border color changed from gray-200 to currentColor) - Fix invalid border color classes (border-grey-light, border-modal-bg, border--200) - Add @reference directive for @apply in Vue component style blocks - Convert Vue component <style lang="scss"> blocks to plain CSS
64 lines
1.5 KiB
Vue
64 lines
1.5 KiB
Vue
<template>
|
|
<router-link class="relative group" :to="`/admin/modules/${data.slug}`">
|
|
<div class="relative group">
|
|
<div class="aspect-w-4 aspect-h-3 rounded-lg overflow-hidden bg-gray-100">
|
|
<img :src="data.cover" class="object-center object-cover" />
|
|
<div
|
|
class="flex items-end opacity-0 p-4 group-hover:opacity-100"
|
|
aria-hidden="true"
|
|
>
|
|
<div
|
|
class="
|
|
w-full
|
|
bg-white/75
|
|
backdrop-filter backdrop-blur
|
|
py-2
|
|
px-4
|
|
rounded-md
|
|
text-sm
|
|
font-medium
|
|
text-primary-500 text-center
|
|
"
|
|
>
|
|
{{ $t('modules.view_module') }}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div
|
|
class="
|
|
mt-4
|
|
flex
|
|
items-center
|
|
justify-between
|
|
text-base
|
|
font-medium
|
|
text-gray-900
|
|
space-x-8
|
|
cursor-pointer
|
|
"
|
|
>
|
|
<h3 class="text-primary-500 font-bold">
|
|
<span aria-hidden="true" class="absolute inset-0"></span>
|
|
{{ data.name }}
|
|
</h3>
|
|
<p class="text-primary-500 font-bold">
|
|
$ {{ data.monthly_price / 100 }}
|
|
</p>
|
|
</div>
|
|
</div>
|
|
</router-link>
|
|
</template>
|
|
|
|
<script setup>
|
|
import { useI18n } from 'vue-i18n'
|
|
|
|
const { t } = useI18n()
|
|
const props = defineProps({
|
|
data: {
|
|
type: Object,
|
|
default: null,
|
|
required: true,
|
|
},
|
|
})
|
|
</script>
|