Skip to content

Commit 10dea6f

Browse files
committed
feat: add AppCredits component
1 parent 1a2ee9f commit 10dea6f

File tree

3 files changed

+102
-0
lines changed

3 files changed

+102
-0
lines changed

playground/app.vue

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,16 @@ const clickToast = () => {
8686
</v-col>
8787
</v-row>
8888

89+
<!-- App credits -->
90+
<v-row>
91+
<v-col cols="12">
92+
<v-card class="pa-4">
93+
<h2>AppCredits</h2>
94+
<AppCredits :brand-opacity="0.8" />
95+
</v-card>
96+
</v-col>
97+
</v-row>
98+
8999
<!-- App loading -->
90100
<v-row>
91101
<v-col cols="12">

playground/nuxt.config.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,30 @@ export default defineNuxtConfig({
33
devtools: { enabled: true },
44
compatibilityDate: '2025-05-13',
55
nuxtifyCore: {
6+
// Logs
67
verboseLogs: true,
8+
9+
// Brand
710
brand: {
811
tagline: 'Catchy tagline',
912
},
13+
14+
// Announcement
1015
announcement: {
1116
show: true,
1217
message: 'This is the announcement bar for the @nuxtify/core playground!',
1318
buttonText: 'Click me',
1419
buttonUrl: 'https://nuxtify.dev/',
1520
},
21+
22+
// Credits
23+
credits: {
24+
creator: {
25+
name: 'Nuxtify',
26+
domain: 'nuxtify.dev',
27+
},
28+
prependText: 'Made with love by',
29+
appendText: ' Ship weirdly fast.',
30+
},
1631
},
1732
})
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
<script setup lang="ts">
2+
import { useNuxtifyConfig } from '#imports'
3+
4+
// Props
5+
defineProps({
6+
brandOpacity: {
7+
type: Number,
8+
default: 1,
9+
},
10+
})
11+
12+
// App state
13+
const nuxtifyConfig = useNuxtifyConfig()
14+
</script>
15+
16+
<template>
17+
<div v-if="nuxtifyConfig.credits?.prependText || nuxtifyConfig.credits?.creator?.name || nuxtifyConfig.credits?.appendText || nuxtifyConfig.credits?.showPoweredBy">
18+
<small>
19+
<!-- Prepend text -->
20+
<span
21+
v-if="nuxtifyConfig.credits.prependText"
22+
>
23+
{{ nuxtifyConfig.credits.prependText + ' ' }}
24+
</span>
25+
26+
<!-- Creator name -->
27+
<span v-if="nuxtifyConfig.credits.creator?.name">
28+
<a
29+
v-if="nuxtifyConfig.credits.creator.domain"
30+
id="brand-name"
31+
:href="`https://${nuxtifyConfig.credits.creator.domain}/?utm_source=${nuxtifyConfig.brand?.domain}&utm_medium=referral`"
32+
target="_blank"
33+
rel="noopener noreferrer"
34+
class="font-weight-bold"
35+
>{{ nuxtifyConfig.credits.creator.name }}</a><span v-else>{{ nuxtifyConfig.credits.creator.name }}</span>.
36+
</span>
37+
38+
<!-- Append text -->
39+
<span
40+
v-if="nuxtifyConfig.credits.appendText"
41+
>
42+
{{ nuxtifyConfig.credits.appendText + ' ' }}
43+
</span>
44+
45+
<!-- Powered by -->
46+
<span v-if="nuxtifyConfig.credits.showPoweredBy">
47+
<a
48+
:href="`https://nuxtify.dev/?utm_source=${nuxtifyConfig.brand?.domain}&utm_medium=referral&utm_campaign=poweredby`"
49+
target="_blank"
50+
rel="noopener nofollow"
51+
>Powered by Nuxtify</a>.
52+
</span>
53+
</small>
54+
</div>
55+
</template>
56+
57+
<style scoped>
58+
/* Links */
59+
a {
60+
color: inherit;
61+
text-decoration: none;
62+
justify-content: start;
63+
}
64+
.v-btn:hover,
65+
a:hover {
66+
text-decoration: underline;
67+
text-underline-offset: 4px;
68+
}
69+
70+
/* Brand name */
71+
#brand-name {
72+
opacity: v-bind(brandOpacity);
73+
}
74+
#brand-name:hover {
75+
opacity: 1;
76+
}
77+
</style>

0 commit comments

Comments
 (0)