Skip to content

Commit 17dffec

Browse files
committed
docs: deduplicate cache logic, transitions, and fix withDefaults
1 parent edb9e08 commit 17dffec

File tree

7 files changed

+35
-74
lines changed

7 files changed

+35
-74
lines changed

apps/docs/src/components/app/AppBrowserIcon.vue

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import AppIcon from '@/components/app/AppIcon.vue'
44
55
// Utilities
6-
import { computed } from 'vue'
6+
import { toRef } from 'vue'
77
88
const browsers = {
99
chrome: { icon: 'chrome', color: 'text-[#34A853]', title: 'Chrome' },
@@ -20,11 +20,9 @@
2020
size?: number
2121
}
2222
23-
const props = withDefaults(defineProps<AppBrowserIconProps>(), {
24-
size: 18,
25-
})
23+
const { browser, size = 18 } = defineProps<AppBrowserIconProps>()
2624
27-
const config = computed(() => browsers[props.browser])
25+
const config = toRef(() => browsers[browser])
2826
</script>
2927

3028
<template>

apps/docs/src/layouts/default.vue

Lines changed: 0 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -91,25 +91,3 @@
9191
</Transition>
9292
</div>
9393
</template>
94-
95-
<style scoped>
96-
.fade-enter-active,
97-
.fade-leave-active {
98-
transition: opacity 0.2s ease;
99-
}
100-
101-
.fade-enter-from,
102-
.fade-leave-to {
103-
opacity: 0;
104-
}
105-
106-
.slide-enter-active,
107-
.slide-leave-active {
108-
transition: transform 0.15s cubic-bezier(0.4, 0, 0.2, 1);
109-
}
110-
111-
.slide-enter-from,
112-
.slide-leave-to {
113-
transform: translateX(100%);
114-
}
115-
</style>

apps/docs/src/layouts/fullscreen.vue

Lines changed: 0 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -84,25 +84,3 @@
8484
<DocsSearch />
8585
</div>
8686
</template>
87-
88-
<style scoped>
89-
.fade-enter-active,
90-
.fade-leave-active {
91-
transition: opacity 0.2s ease;
92-
}
93-
94-
.fade-enter-from,
95-
.fade-leave-to {
96-
opacity: 0;
97-
}
98-
99-
.slide-enter-active,
100-
.slide-leave-active {
101-
transition: transform 0.15s cubic-bezier(0.4, 0, 0.2, 1);
102-
}
103-
104-
.slide-enter-from,
105-
.slide-leave-to {
106-
transform: translateX(100%);
107-
}
108-
</style>

apps/docs/src/stores/releases.ts

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,11 @@
33
import { createStorage, useLogger } from '@vuetify/v0'
44

55
// Utilities
6+
import { isCacheValid } from '@/utilities/cache'
67
import { defineStore } from 'pinia'
78

89
// Types
10+
import type { CacheEntry } from '@/utilities/cache'
911
import type { components as octokitComponents } from '@octokit/openapi-types'
1012

1113
type GitHubRelease = octokitComponents['schemas']['release']
@@ -17,11 +19,6 @@ export interface Release extends GitHubRelease {
1719
}
1820
}
1921

20-
interface CacheEntry<T> {
21-
data: T
22-
timestamp: number
23-
}
24-
2522
interface State {
2623
releases: Release[]
2724
isLoading: boolean
@@ -30,15 +27,9 @@ interface State {
3027
}
3128

3229
const url = import.meta.env.VITE_API_SERVER_URL || 'https://api.vuetifyjs.com'
33-
const CACHE_TTL = import.meta.env.DEV ? 30 * 1000 : 5 * 60 * 1000 // 30s dev, 5min prod
3430
const storage = createStorage({ prefix: 'v0-releases:' })
3531
const logger = useLogger()
3632

37-
function isCacheValid<T> (entry: CacheEntry<T> | null): entry is CacheEntry<T> {
38-
if (!entry) return false
39-
return Date.now() - entry.timestamp < CACHE_TTL
40-
}
41-
4233
export const useReleasesStore = defineStore('releases', {
4334
state: (): State => ({
4435
releases: [],

apps/docs/src/stores/roadmap.ts

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,11 @@
33
import { createStorage, useLogger } from '@vuetify/v0'
44

55
// Utilities
6+
import { isCacheValid } from '@/utilities/cache'
67
import { defineStore } from 'pinia'
78

89
// Types
10+
import type { CacheEntry } from '@/utilities/cache'
911
import type { components as octokitComponents } from '@octokit/openapi-types'
1012

1113
type GitHubMilestone = octokitComponents['schemas']['milestone']
@@ -19,11 +21,6 @@ export interface Milestone extends GitHubMilestone {
1921
issuesLoading?: boolean
2022
}
2123

22-
interface CacheEntry<T> {
23-
data: T
24-
timestamp: number
25-
}
26-
2724
interface State {
2825
milestones: Milestone[]
2926
isLoading: boolean
@@ -32,16 +29,10 @@ interface State {
3229

3330
const GITHUB_API = 'https://api.github.com'
3431
const REPO = 'vuetifyjs/0'
35-
const CACHE_TTL = import.meta.env.DEV ? 30 * 1000 : 5 * 60 * 1000 // 30s dev, 5min prod
3632

3733
const storage = createStorage({ prefix: 'v0-roadmap:' })
3834
const logger = useLogger()
3935

40-
function isCacheValid<T> (entry: CacheEntry<T> | null): entry is CacheEntry<T> {
41-
if (!entry) return false
42-
return Date.now() - entry.timestamp < CACHE_TTL
43-
}
44-
4536
/**
4637
* Assigns horizons based on due date order:
4738
* - 1st by due date = now (actively being worked on)

apps/docs/src/styles/transitions.css

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
/* Fade transition (opacity) */
77
.fade-enter-active,
88
.fade-leave-active {
9-
transition: opacity 0.15s ease;
9+
transition: opacity 0.2s ease;
1010
}
1111

1212
.fade-enter-from,
@@ -17,12 +17,12 @@
1717
/* Slide transition (horizontal) */
1818
.slide-enter-active,
1919
.slide-leave-active {
20-
transition: transform 0.2s ease;
20+
transition: transform 0.15s cubic-bezier(0.4, 0, 0.2, 1);
2121
}
2222

2323
.slide-enter-from,
2424
.slide-leave-to {
25-
transform: translateX(1rem);
25+
transform: translateX(100%);
2626
}
2727

2828
/* Slide-up transition (vertical, for toasts/notifications) */
@@ -52,3 +52,17 @@
5252
.expand-leave-to {
5353
grid-template-rows: 0fr;
5454
}
55+
56+
/* Reduced motion: disable all transitions */
57+
@media (prefers-reduced-motion: reduce) {
58+
.fade-enter-active,
59+
.fade-leave-active,
60+
.slide-enter-active,
61+
.slide-leave-active,
62+
.slide-up-enter-active,
63+
.slide-up-leave-active,
64+
.expand-enter-active,
65+
.expand-leave-active {
66+
transition: none;
67+
}
68+
}

apps/docs/src/utilities/cache.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
export interface CacheEntry<T> {
2+
data: T
3+
timestamp: number
4+
}
5+
6+
const CACHE_TTL = import.meta.env.DEV ? 30 * 1000 : 5 * 60 * 1000 // 30s dev, 5min prod
7+
8+
export function isCacheValid<T> (entry: CacheEntry<T> | null): entry is CacheEntry<T> {
9+
if (!entry) return false
10+
return Date.now() - entry.timestamp < CACHE_TTL
11+
}

0 commit comments

Comments
 (0)