Skip to content

Commit 1ffa673

Browse files
committed
merge main, resolve lockfile conflict
2 parents 480576f + b1b2cdd commit 1ffa673

File tree

19 files changed

+1721
-1348
lines changed

19 files changed

+1721
-1348
lines changed

.github/workflows/ci.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ jobs:
1212
lint:
1313
runs-on: ubuntu-latest
1414
steps:
15-
- uses: actions/checkout@v5
15+
- uses: actions/checkout@v6
1616
- run: corepack enable
1717
- uses: actions/setup-node@v6
1818
with:
@@ -24,7 +24,7 @@ jobs:
2424
typecheck:
2525
runs-on: ubuntu-latest
2626
steps:
27-
- uses: actions/checkout@v5
27+
- uses: actions/checkout@v6
2828
- run: corepack enable
2929
- uses: actions/setup-node@v6
3030
with:

.github/workflows/e2e.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ jobs:
1717
if: github.event.deployment_status.state == 'success' || github.event_name == 'workflow_dispatch'
1818
runs-on: ubuntu-latest
1919
steps:
20-
- uses: actions/checkout@v5
20+
- uses: actions/checkout@v6
2121
- name: Audit URLs using Lighthouse
2222
uses: treosh/lighthouse-ci-action@v12
2323
with:

.github/workflows/provenance.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ jobs:
1313
check-provenance:
1414
runs-on: ubuntu-latest
1515
steps:
16-
- uses: actions/checkout@v5
16+
- uses: actions/checkout@v6
1717
with:
1818
fetch-depth: 0
1919
- name: Check provenance downgrades

app/components/ads/Ads.vue

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,15 @@
11
<script setup lang="ts">
2-
const { $ads } = useNuxtApp()
2+
// const { $ads } = useNuxtApp()
3+
// const route = useRoute()
4+
// const nuxtApp = useNuxtApp()
35
const route = useRoute()
46
</script>
57

68
<template>
79
<div class="space-y-3">
8-
<AdsFallback v-if="$ads.adBlocked.value" />
9-
<LazyAdsCarbon v-else :key="route.path" />
10+
<AdsMN v-if="route.path.length % 2 === 0" />
11+
<AdsNuxtCertificate v-else />
12+
<!-- <AdsFallback v-if="$ads.adBlocked.value" />
13+
<LazyAdsCarbon v-else :key="route.path" /> -->
1014
</div>
1115
</template>

app/components/ads/AdsMN.vue

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
<script setup lang="ts">
2+
const video = ref<HTMLVideoElement>()
3+
const isHovered = ref(false)
4+
const hasPlayedTeaser = useState('hasPlayedMNTeaser', () => false)
5+
6+
onMounted(() => {
7+
if (!video.value || hasPlayedTeaser.value) return
8+
video.value.currentTime = 0
9+
hasPlayedTeaser.value = true
10+
video.value.play()
11+
12+
setTimeout(() => {
13+
if (!video.value || isHovered.value) return
14+
reverseVideoToZero()
15+
}, 800)
16+
})
17+
18+
// Reverse the video to the beginning with a smooth transition
19+
let interval
20+
function reverseVideoToZero() {
21+
if (!video.value) return
22+
if (interval) {
23+
clearInterval(interval)
24+
interval = null
25+
}
26+
if (video.value.currentTime <= 0) return
27+
video.value.pause()
28+
interval = setInterval(() => {
29+
if (isHovered.value) return
30+
video.value.currentTime = Math.max(0, video.value.currentTime - 0.05)
31+
if (video.value.currentTime <= 0) {
32+
clearInterval(interval)
33+
interval = null
34+
}
35+
}, 50)
36+
}
37+
38+
const handleMouseEnter = () => {
39+
isHovered.value = true
40+
if (!video.value) return
41+
if (interval) {
42+
clearInterval(interval)
43+
interval = null
44+
}
45+
video.value.play()
46+
}
47+
48+
const handleMouseLeave = () => {
49+
isHovered.value = false
50+
if (!video.value) return
51+
reverseVideoToZero()
52+
}
53+
</script>
54+
55+
<template>
56+
<div class="group relative border border-default rounded-md hover:bg-elevated/50 w-full transition-colors p-2">
57+
<ULink
58+
to="https://masteringnuxt.com?ref=nuxt"
59+
target="_blank"
60+
class="absolute inset-0 z-10"
61+
@mouseenter="handleMouseEnter"
62+
@mouseleave="handleMouseLeave"
63+
/>
64+
<div class="flex justify-center w-full aspect-video">
65+
<video
66+
ref="video"
67+
class="w-full rounded-sm"
68+
poster="https://res.cloudinary.com/nuxt/video/upload/so_0/v1763561035/mn-black-friday-2025_jnywbp.jpg"
69+
muted
70+
loop
71+
playsinline
72+
>
73+
<source src="https://res.cloudinary.com/nuxt/video/upload/v1763561035/mn-black-friday-2025_jnywbp.mp4" type="video/mp4">
74+
</video>
75+
</div>
76+
77+
<div class="font-bold text-sm text-muted transition-colors group-hover:text-default pt-2">
78+
<UBadge color="warning" variant="soft" label="Black Friday Week" />
79+
</div>
80+
81+
<div class="text-xs text-muted py-1 transition-colors group-hover:text-default">
82+
Get 50% off the complete Mastering Nuxt course.
83+
</div>
84+
</div>
85+
</template>
Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
<script setup lang="ts">
2+
const video = ref<HTMLVideoElement>()
3+
const isHovered = ref(false)
4+
const hasPlayedTeaser = useState('hasPlayedCertificateTeaser', () => false)
5+
6+
onMounted(() => {
7+
if (!video.value || hasPlayedTeaser.value) return
8+
video.value.currentTime = 0
9+
hasPlayedTeaser.value = true
10+
video.value.play()
11+
12+
setTimeout(() => {
13+
if (!video.value || isHovered.value) return
14+
reverseVideoToZero()
15+
}, 600)
16+
})
17+
18+
// Reverse the video to the beginning with a smooth transition
19+
let interval
20+
function reverseVideoToZero() {
21+
if (!video.value) return
22+
if (interval) {
23+
clearInterval(interval)
24+
interval = null
25+
}
26+
if (video.value.currentTime <= 0) return
27+
video.value.pause()
28+
interval = setInterval(() => {
29+
if (isHovered.value) return
30+
video.value.currentTime = Math.max(0, video.value.currentTime - 0.05)
31+
if (video.value.currentTime <= 0) {
32+
clearInterval(interval)
33+
interval = null
34+
}
35+
}, 50)
36+
}
37+
38+
const handleMouseEnter = () => {
39+
isHovered.value = true
40+
if (!video.value) return
41+
if (interval) {
42+
clearInterval(interval)
43+
interval = null
44+
}
45+
video.value.play()
46+
}
47+
48+
const handleMouseLeave = () => {
49+
isHovered.value = false
50+
if (!video.value) return
51+
reverseVideoToZero()
52+
}
53+
</script>
54+
55+
<template>
56+
<div class="group relative border border-default rounded-md hover:bg-elevated/50 w-full transition-colors p-2">
57+
<ULink
58+
to="https://certification.nuxt.com"
59+
target="_blank"
60+
class="absolute inset-0 z-10"
61+
@mouseenter="handleMouseEnter"
62+
@mouseleave="handleMouseLeave"
63+
/>
64+
<div class="flex justify-center w-full aspect-video">
65+
<video
66+
ref="video"
67+
class="w-full rounded-sm"
68+
poster="https://res.cloudinary.com/nuxt/video/upload/so_0/v1763564406/nuxt-certificate-black-friday-2025_hfskaj.jpg"
69+
muted
70+
playsinline
71+
>
72+
<source src="https://res.cloudinary.com/nuxt/video/upload/v1763564406/nuxt-certificate-black-friday-2025_hfskaj.mp4" type="video/mp4">
73+
</video>
74+
</div>
75+
76+
<div class="font-bold text-sm text-muted transition-colors group-hover:text-default pt-2">
77+
<UBadge color="warning" variant="soft" label="Black Friday Week" />
78+
</div>
79+
80+
<div class="text-xs text-muted py-1 transition-colors group-hover:text-default">
81+
Get 60% off and bonuses on all Official Nuxt Certifications.
82+
</div>
83+
</div>
84+
</template>

content/blog/32.nuxt-ui-v3.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ authors:
1616
- name: Hugo Richard
1717
avatar:
1818
src: https://github.com/hugorcd.png
19-
to: https://x.com/hugorcd__
19+
to: https://x.com/hugorcd
2020
date: 2025-03-12T10:00:00.000Z
2121
category: Release
2222
---

content/blog/35.building-a-feedback-widget.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ authors:
77
- name: Hugo Richard
88
avatar:
99
src: https://github.com/hugorcd.png
10-
to: https://x.com/hugorcd__
10+
to: https://x.com/hugorcd
1111
- name: Sébastien Chopin
1212
avatar:
1313
src: https://github.com/Atinux.png

content/blog/39.nuxt-ui-v4.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ authors:
1515
- name: Hugo Richard
1616
avatar:
1717
src: https://github.com/hugorcd.png
18-
to: https://x.com/hugorcd__
18+
to: https://x.com/hugorcd
1919
date: 2025-09-22T10:00:00.000Z
2020
category: Release
2121
---

content/blog/40.building-nuxt-mcp.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ authors:
77
- name: Hugo Richard
88
avatar:
99
src: https://github.com/hugorcd.png
10-
to: https://x.com/hugorcd__
10+
to: https://x.com/hugorcd
1111
- name: Sébastien Chopin
1212
avatar:
1313
src: https://github.com/Atinux.png

0 commit comments

Comments
 (0)