Skip to content

Commit f610e24

Browse files
chore(deps): upgrade to @nuxt/ui v4 (#201)
Co-authored-by: Benjamin Canac <canacb1@gmail.com>
1 parent 7207fff commit f610e24

27 files changed

+1778
-394
lines changed

.env.example

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,2 @@
1-
# Production license for @nuxt/ui-pro, get one at https://ui.nuxt.com/pro/purchase
2-
NUXT_UI_PRO_LICENSE=
31
# Public URL, used for OG Image when running nuxt generate
42
NUXT_PUBLIC_SITE_URL=

README.md

Lines changed: 7 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,24 @@
11
# Nuxt SaaS Template
22

3-
[![Nuxt UI Pro](https://img.shields.io/badge/Made%20with-Nuxt%20UI%20Pro-00DC82?logo=nuxt&labelColor=020420)](https://ui.nuxt.com/pro)
4-
[![Deploy to NuxtHub](https://img.shields.io/badge/Deploy%20to-NuxtHub-00DC82?logo=nuxt&labelColor=020420)](https://hub.nuxt.com/new?repo=nuxt-ui-pro/saas)
3+
[![Nuxt UI](https://img.shields.io/badge/Made%20with-Nuxt%20UI-00DC82?logo=nuxt&labelColor=020420)](https://ui.nuxt.com)
54

6-
Fully built SaaS application to launch your next project with a landing page, a pricing page, a documentation and a blog powered by [Nuxt UI Pro](https://ui.nuxt.com/pro) components.
5+
Fully built SaaS application to launch your next project with a landing page, a pricing page, a documentation and a blog powered by [Nuxt UI](https://ui.nuxt.com) components.
76

87
- [Live demo](https://saas-template.nuxt.dev/)
9-
- [Documentation](https://ui.nuxt.com/getting-started/installation/pro/nuxt)
8+
- [Documentation](https://ui4.nuxt.com/docs/getting-started/installation/nuxt)
109

1110
<a href="https://saas-template.nuxt.dev/" target="_blank">
1211
<picture>
13-
<source media="(prefers-color-scheme: dark)" srcset="https://assets.hub.nuxt.com/eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1cmwiOiJodHRwczovL3NhYXMtdGVtcGxhdGUubnV4dC5kZXYiLCJpYXQiOjE3Mzk0NjM0NDh9.tgzUQaw6XswUPPVbOXazuWwoTHJODg155CYt1xfzIdM.jpg?theme=dark">
14-
<source media="(prefers-color-scheme: light)" srcset="https://assets.hub.nuxt.com/eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1cmwiOiJodHRwczovL3NhYXMtdGVtcGxhdGUubnV4dC5kZXYiLCJpYXQiOjE3Mzk0NjM0NDh9.tgzUQaw6XswUPPVbOXazuWwoTHJODg155CYt1xfzIdM.jpg?theme=light">
15-
<img alt="Nuxt SaaS Template" src="https://assets.hub.nuxt.com/eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1cmwiOiJodHRwczovL3NhYXMtdGVtcGxhdGUubnV4dC5kZXYiLCJpYXQiOjE3Mzk0NjM0NDh9.tgzUQaw6XswUPPVbOXazuWwoTHJODg155CYt1xfzIdM.jpg">
12+
<source media="(prefers-color-scheme: dark)" srcset="https://ui4.nuxt.com/assets/templates/nuxt/saas-dark.png">
13+
<source media="(prefers-color-scheme: light)" srcset="https://ui4.nuxt.com/assets/templates/nuxt/saas-light.png">
14+
<img alt="Nuxt SaaS Template" src="https://ui4.nuxt.com/assets/templates/nuxt/saas-light.png">
1615
</picture>
1716
</a>
1817

1918
## Quick Start
2019

2120
```bash [Terminal]
22-
npx nuxi init -t github:nuxt-ui-pro/saas
21+
npx nuxi init -t github:nuxt-ui-templates/saas
2322
```
2423

2524
## Setup
@@ -54,28 +53,6 @@ pnpm preview
5453

5554
Check out the [deployment documentation](https://nuxt.com/docs/getting-started/deployment) for more information.
5655

57-
## Nuxt Studio integration
58-
59-
Studio is an intuitive CMS interface to edit your Nuxt Content websites.
60-
61-
It take advantage of the Preview API included in Nuxt Content to propose the best editing experience for your content files. Editors can benefit from a user-friendly interface to edit their Markdown, YAML or JSON files.
62-
63-
You can import your project on the platform without any extra setup.
64-
65-
However to enable the live preview on the platform, you just need to activate studio in the content configuration of your `nuxt.config.ts` file.
66-
67-
```ts [nuxt.config.ts]
68-
export default defineNuxtConfig({
69-
content: {
70-
preview: {
71-
api: 'https://api.nuxt.studio'
72-
}
73-
}
74-
})
75-
```
76-
77-
Read more on [Nuxt Studio docs](https://content.nuxt.com/studio/setup).
78-
7956
## Renovate integration
8057

8158
Install [Renovate GitHub app](https://github.com/apps/renovate/installations/select_target) on your repository and you are good to go.

app/app.vue

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@ useHead({
1919
2020
useSeoMeta({
2121
titleTemplate: '%s - Nuxt SaaS template',
22-
ogImage: 'https://assets.hub.nuxt.com/eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1cmwiOiJodHRwczovL3NhYXMtdGVtcGxhdGUubnV4dC5kZXYiLCJpYXQiOjE3Mzk0NjM0NDh9.tgzUQaw6XswUPPVbOXazuWwoTHJODg155CYt1xfzIdM.jpg?theme=light',
23-
twitterImage: 'https://assets.hub.nuxt.com/eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1cmwiOiJodHRwczovL3NhYXMtdGVtcGxhdGUubnV4dC5kZXYiLCJpYXQiOjE3Mzk0NjM0NDh9.tgzUQaw6XswUPPVbOXazuWwoTHJODg155CYt1xfzIdM.jpg?theme=light',
22+
ogImage: 'https://ui4.nuxt.com/assets/templates/nuxt/saas-light.png',
23+
twitterImage: 'https://ui4.nuxt.com/assets/templates/nuxt/saas-light.png',
2424
twitterCard: 'summary_large_image'
2525
})
2626
@@ -43,6 +43,10 @@ const links = [{
4343
label: 'Blog',
4444
icon: 'i-lucide-pencil',
4545
to: '/blog'
46+
}, {
47+
label: 'Changelog',
48+
icon: 'i-lucide-history',
49+
to: '/changelog'
4650
}]
4751
4852
provide('navigation', navigation)

app/assets/css/main.css

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
@import "tailwindcss";
2-
@import "@nuxt/ui-pro";
2+
@import "@nuxt/ui";
33

44
@source "../../../content/**/*";
55

app/components/AppFooter.vue

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -90,15 +90,29 @@ function onSubmit() {
9090

9191
<template #left>
9292
<p class="text-muted text-sm">
93-
Copyright © {{ new Date().getFullYear() }}. All rights reserved.
93+
Built with Nuxt UI • © {{ new Date().getFullYear() }}
9494
</p>
9595
</template>
9696

9797
<template #right>
98-
<UColorModeButton />
99-
10098
<UButton
101-
to="https://github.com/nuxt-ui-pro/saas"
99+
to="https://go.nuxt.com/discord"
100+
target="_blank"
101+
icon="i-simple-icons-discord"
102+
aria-label="Discord"
103+
color="neutral"
104+
variant="ghost"
105+
/>
106+
<UButton
107+
to="https://go.nuxt.com/x"
108+
target="_blank"
109+
icon="i-simple-icons-x"
110+
aria-label="X"
111+
color="neutral"
112+
variant="ghost"
113+
/>
114+
<UButton
115+
to="https://github.com/nuxt-ui-templates/saas"
102116
target="_blank"
103117
icon="i-simple-icons-github"
104118
aria-label="GitHub"

app/components/AppHeader.vue

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,19 +13,15 @@ const items = computed(() => [{
1313
to: '/blog'
1414
}, {
1515
label: 'Changelog',
16-
to: '/changelog',
17-
badge: {
18-
label: 'New',
19-
color: 'primary' as const
20-
}
16+
to: '/changelog'
2117
}])
2218
</script>
2319

2420
<template>
2521
<UHeader>
2622
<template #left>
2723
<NuxtLink to="/">
28-
<LogoPro class="w-auto h-6 shrink-0" />
24+
<AppLogo class="w-auto h-6 shrink-0" />
2925
</NuxtLink>
3026
<TemplateMenu />
3127
</template>

app/components/LogoPro.vue renamed to app/components/AppLogo.vue

Lines changed: 3 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
<template>
22
<svg
3-
width="1352"
3+
width="1020"
44
height="200"
5-
viewBox="0 0 1352 200"
5+
viewBox="0 0 1020 200"
66
fill="none"
77
xmlns="http://www.w3.org/2000/svg"
88
>
@@ -28,24 +28,12 @@
2828
/>
2929
<path
3030
d="M958 60.0001H938C933.524 60.0001 929.926 59.9395 927 63C924.074 65.8905 925 67.5792 925 72V141C925 151.372 923.648 156.899 919 162C914.352 166.931 908.468 169 899 169C889.705 169 882.648 166.931 878 162C873.352 156.899 873 151.372 873 141V72.0001C873 67.5793 872.926 65.8906 870 63.0001C867.074 59.9396 863.476 60.0001 859 60.0001H840V141C840 159.023 845.016 173.458 855 184C865.156 194.542 879.893 200 899 200C918.107 200 932.844 194.542 943 184C953.156 173.458 958 159.023 958 141V60.0001Z"
31-
fill="currentColor"
31+
fill="var(--ui-primary)"
3232
/>
3333
<path
3434
fill-rule="evenodd"
3535
clip-rule="evenodd"
3636
d="M1000 60.0233L1020 60V77L1020 128V156.007L1020 181L1020 189.004C1020 192.938 1019.98 194.429 1017 197.001C1014.02 199.725 1009.56 200 1005 200H986.001V181.006L986 130.012V70.0215C986 66.1576 986.016 64.5494 989 62.023C991.819 59.6358 995.437 60.0233 1000 60.0233Z"
37-
fill="currentColor"
38-
/>
39-
<path
40-
d="M1060 200V60H1117C1126.67 60 1134.98 61.2896 1142 65C1149.16 68.7104 1155.29 74.3744 1159 81C1162.71 87.6256 1164 95.3867 1164 104C1164 112.481 1162.71 120.374 1159 127C1155.29 133.626 1149.16 138.157 1142 142C1134.98 145.71 1126.67 148 1117 148H1090V200H1060ZM1115 123C1121.63 123 1126.69 121.578 1130 118C1133.31 114.29 1135 109.433 1135 104C1135 98.567 1133.31 93.5778 1130 90C1126.69 86.2896 1121.63 85 1115 85H1090V123H1115Z"
41-
fill="var(--ui-primary)"
42-
/>
43-
<path
44-
d="M1226 123C1219.37 123 1214.31 124.965 1211 130C1207.69 135.035 1206 142.122 1206 151V200H1178V100H1200C1203.31 100 1206 102.686 1206 106V116C1208.65 109.904 1211.16 106.518 1215 104C1218.98 101.482 1224.77 100 1231 100H1242V123H1226Z"
45-
fill="var(--ui-primary)"
46-
/>
47-
<path
48-
d="M1299 200C1288.93 200 1280.08 197.373 1272 193C1263.92 188.495 1257.51 182.818 1253 175C1248.49 167.049 1246 157.806 1246 148C1246 138.194 1248.49 129.818 1253 122C1257.51 114.049 1263.92 107.373 1272 103C1280.08 98.4946 1288.93 97 1299 97C1309.07 97 1318.92 98.4946 1327 103C1335.08 107.373 1340.49 114.049 1345 122C1349.51 129.818 1352 138.194 1352 148C1352 157.806 1349.51 167.049 1345 175C1340.49 182.818 1335.08 188.495 1327 193C1318.92 197.373 1309.07 200 1299 200ZM1299 176C1306.42 176 1312.36 173.168 1317 168C1321.64 162.832 1324 156.216 1324 148C1324 139.652 1321.64 133.168 1317 128C1312.36 122.832 1306.42 120 1299 120C1291.58 120 1285.64 122.832 1281 128C1276.36 133.168 1274 139.652 1274 148C1274 156.216 1276.36 162.832 1281 168C1285.64 173.168 1291.58 176 1299 176Z"
4937
fill="var(--ui-primary)"
5038
/>
5139
</svg>

app/components/HeroBackground.vue

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
<script setup lang="ts">
2+
const { isLoading } = useLoadingIndicator()
3+
4+
const appear = ref(false)
5+
const appeared = ref(false)
6+
7+
onMounted(() => {
8+
setTimeout(() => {
9+
appear.value = true
10+
setTimeout(() => {
11+
appeared.value = true
12+
}, 1000)
13+
}, 0)
14+
})
15+
</script>
16+
17+
<template>
18+
<div
19+
class="absolute w-full -top-px transition-all text-primary shrink-0"
20+
:class="[
21+
isLoading ? 'animate-pulse' : (appear ? '' : 'opacity-0'),
22+
appeared ? 'duration-[400ms]': 'duration-1000'
23+
]"
24+
>
25+
<svg
26+
viewBox="0 0 1440 181"
27+
fill="none"
28+
xmlns="http://www.w3.org/2000/svg"
29+
class="pointer-events-none"
30+
>
31+
<mask
32+
id="path-1-inside-1_414_5526"
33+
fill="white"
34+
>
35+
<path d="M0 0H1440V181H0V0Z" />
36+
</mask>
37+
<path
38+
d="M0 0H1440V181H0V0Z"
39+
fill="url(#paint0_linear_414_5526)"
40+
fill-opacity="0.22"
41+
/>
42+
<path
43+
d="M0 2H1440V-2H0V2Z"
44+
fill="url(#paint1_linear_414_5526)"
45+
mask="url(#path-1-inside-1_414_5526)"
46+
/>
47+
<defs>
48+
<linearGradient
49+
id="paint0_linear_414_5526"
50+
x1="720"
51+
y1="0"
52+
x2="720"
53+
y2="181"
54+
gradientUnits="userSpaceOnUse"
55+
>
56+
<stop stop-color="currentColor" />
57+
<stop
58+
offset="1"
59+
stop-color="currentColor"
60+
stop-opacity="0"
61+
/>
62+
</linearGradient>
63+
<linearGradient
64+
id="paint1_linear_414_5526"
65+
x1="0"
66+
y1="90.5"
67+
x2="1440"
68+
y2="90.5"
69+
gradientUnits="userSpaceOnUse"
70+
>
71+
<stop
72+
stop-color="currentColor"
73+
stop-opacity="0"
74+
/>
75+
<stop
76+
offset="0.395"
77+
stop-color="currentColor"
78+
/>
79+
<stop
80+
offset="1"
81+
stop-color="currentColor"
82+
stop-opacity="0"
83+
/>
84+
</linearGradient>
85+
</defs>
86+
</svg>
87+
</div>
88+
</template>

app/components/StarsBg.vue

Lines changed: 72 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,66 @@ const starLayers = computed(() => [
5757

5858
<template>
5959
<div class="absolute pointer-events-none z-[-1] inset-y-0 inset-x-5 sm:inset-x-7 lg:inset-x-9 overflow-hidden">
60+
<svg
61+
class="absolute inset-0 pointer-events-none"
62+
viewBox="0 0 1017 181"
63+
fill="none"
64+
xmlns="http://www.w3.org/2000/svg"
65+
>
66+
<g opacity="0.5">
67+
<mask
68+
id="path-1-inside-1_846_160841"
69+
fill="white"
70+
>
71+
<path d="M0 0H1017V181H0V0Z" />
72+
</mask>
73+
<path
74+
d="M0 0H1017V181H0V0Z"
75+
fill="url(#paint0_radial_846_160841)"
76+
fill-opacity="0.22"
77+
/>
78+
</g>
79+
<defs>
80+
<radialGradient
81+
id="paint0_radial_846_160841"
82+
cx="0"
83+
cy="0"
84+
r="1"
85+
gradientUnits="userSpaceOnUse"
86+
gradientTransform="translate(508.999 19.5) rotate(90.177) scale(161.501 509.002)"
87+
>
88+
<stop stop-color="var(--ui-primary)" />
89+
<stop
90+
offset="1"
91+
stop-color="var(--ui-primary)"
92+
stop-opacity="0"
93+
/>
94+
</radialGradient>
95+
<linearGradient
96+
id="paint1_linear_846_160841"
97+
x1="10.9784"
98+
y1="91"
99+
x2="1017"
100+
y2="90.502"
101+
gradientUnits="userSpaceOnUse"
102+
>
103+
<stop
104+
stop-color="var(--ui-primary)"
105+
stop-opacity="0"
106+
/>
107+
<stop
108+
offset="0.395"
109+
stop-color="var(--ui-primary)"
110+
/>
111+
<stop
112+
offset="1"
113+
stop-color="var(--ui-primary)"
114+
stop-opacity="0"
115+
/>
116+
</linearGradient>
117+
</defs>
118+
</svg>
119+
60120
<div class="stars size-full absolute inset-x-0 top-0">
61121
<div
62122
v-for="(layer, index) in starLayers"
@@ -90,22 +150,18 @@ const starLayers = computed(() => [
90150
.stars {
91151
left: 50%;
92152
transform: translate(-50%);
93-
-webkit-mask-image: linear-gradient(
94-
180deg,
95-
rgba(217, 217, 217, 0) 0%,
96-
rgba(217, 217, 217, 0.8) 25%,
97-
#d9d9d9 50%,
98-
rgba(217, 217, 217, 0.8) 75%,
99-
rgba(217, 217, 217, 0) 100%
100-
);
101-
mask-image: linear-gradient(
102-
180deg,
103-
rgba(217, 217, 217, 0) 0%,
104-
rgba(217, 217, 217, 0.8) 25%,
105-
#d9d9d9 50%,
106-
rgba(217, 217, 217, 0.8) 75%,
107-
rgba(217, 217, 217, 0) 100%
108-
);
153+
-webkit-mask-image: linear-gradient(180deg,
154+
rgba(217, 217, 217, 0) 0%,
155+
rgba(217, 217, 217, 0.8) 25%,
156+
#d9d9d9 50%,
157+
rgba(217, 217, 217, 0.8) 75%,
158+
rgba(217, 217, 217, 0) 100%);
159+
mask-image: linear-gradient(180deg,
160+
rgba(217, 217, 217, 0) 0%,
161+
rgba(217, 217, 217, 0.8) 25%,
162+
#d9d9d9 50%,
163+
rgba(217, 217, 217, 0.8) 75%,
164+
rgba(217, 217, 217, 0) 100%);
109165
-webkit-mask-size: cover;
110166
mask-size: cover;
111167
}

0 commit comments

Comments
 (0)