Skip to content
Open
Show file tree
Hide file tree
Changes from 20 commits
Commits
Show all changes
56 commits
Select commit Hold shift + click to select a range
0dd7385
update hero section
ikushum Oct 3, 2025
7ada3e5
create Stats component
ikushum Oct 4, 2025
303dd92
update Features component
ikushum Oct 4, 2025
1df8983
add component gallery section
ikushum Oct 4, 2025
e2ef502
spacign adjustments
ikushum Oct 7, 2025
8b04f4a
add sections to homepage
ikushum Oct 21, 2025
5bbc595
reposition
ikushum Oct 21, 2025
c8ea488
add support for playground in markup
ikushum Oct 22, 2025
eff5d2c
refactors
ikushum Oct 25, 2025
06d7a34
use typescript
ikushum Oct 25, 2025
94fe635
vuetify one cta
ikushum Oct 25, 2025
742f6be
add discord icon
ikushum Oct 25, 2025
df98926
update blog section
ikushum Oct 25, 2025
4c0e0d8
ability to select package managers
ikushum Oct 25, 2025
8cdab47
add support component
ikushum Oct 26, 2025
2a8ef34
update blog section
ikushum Oct 26, 2025
05c1466
seperate out special sponsor section
ikushum Oct 27, 2025
424959a
update vuetify tooling
ikushum Oct 27, 2025
cb0cd80
update Vuetify one
ikushum Oct 30, 2025
7e9c7ab
update component gallery section
ikushum Nov 1, 2025
bf19b0e
improve tooling section
ikushum Nov 9, 2025
1a778c7
ui updates
ikushum Nov 20, 2025
08bad05
make everything clickable
ikushum Nov 20, 2025
be8f45e
bring back to top
ikushum Nov 20, 2025
13c1eac
make store slidable
ikushum Nov 20, 2025
29e8a66
blog with image
ikushum Nov 20, 2025
5da334c
update card color
ikushum Nov 20, 2025
7c2fe3c
style adjustments
ikushum Nov 20, 2025
2aaae55
docs: update roadmap
KaelWD Nov 25, 2025
2c758de
chore(package): bump version to v3.11.1
J-Sek Nov 24, 2025
eb9477c
fix(VTabs): keep slider narrow when used without inset
J-Sek Nov 25, 2025
893eb71
fix(VTabs): consistent padding for `inset`
J-Sek Nov 25, 2025
99a68e5
fix(VStepperVertical): avoid semi-transparent items with `non-linear`
J-Sek Nov 26, 2025
3138c18
docs(VTabs): correct description for `fixed-tabs`
J-Sek Nov 26, 2025
c8ec5a6
chore: update all non-major dependencies
KaelWD Nov 27, 2025
216b872
fix(VHotkey): correct sass variables import order
KaelWD Nov 27, 2025
513e153
fix(VNumberInput): avoid error state when using comma separator
J-Sek Nov 27, 2025
32f5d05
docs(VExpansionPanels): clarify `modelValue` behavior
J-Sek Nov 27, 2025
00f8eb6
chore: update to vitest 4, replace wdio with playwright
KaelWD Nov 28, 2025
7a1ae83
fix(VDataTable): hover icon should match `initial-sort-order`
J-Sek Nov 28, 2025
d297f3f
fix(VDataTable): hide checkbox for `mobile` without `show-select`
J-Sek Nov 28, 2025
63b31e0
chore(test): don't zoom iframe before taking screenshots
KaelWD Nov 28, 2025
0409cde
fix(VTextField): check autofocus intersection on input wrapper element
KaelWD Dec 1, 2025
10c52cb
chore: update @cosmicjs/sdk
KaelWD Dec 1, 2025
9723468
chore(ci): cache crowdin locales for 24h
KaelWD Dec 1, 2025
f98d9db
fix(VDatePicker): correctly render month when using Luxon adapter
J-Sek Dec 1, 2025
b76ffd5
fix(VSlideGroup): provide a way to never show arrows
J-Sek Dec 1, 2025
570c596
chore(release): publish v3.11.2
KaelWD Dec 3, 2025
f39100b
chore: replace percy with vizzly (#22382)
KaelWD Dec 3, 2025
fa1fb4f
fix(VHotkey): avoid build errors when customizing VKbd sass variables
J-Sek Dec 3, 2025
d0c346d
docs(homepage): minor refactor
johnleider Dec 3, 2025
a7b527d
Merge branch 'master' into feat/new-homepage
johnleider Dec 4, 2025
09c6a36
docs(home): lots of refactoring
johnleider Dec 4, 2025
a1a164f
docs: more tweaks
johnleider Dec 4, 2025
17932c7
docs: bunch of style adjustments
ikushum Dec 4, 2025
d82e909
chore: suppress browser autofill in example search fields
J-Sek Dec 4, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions packages/docs/auto-imports.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -172,6 +172,9 @@ declare global {
export type { Component, Slot, Slots, ComponentPublicInstance, ComputedRef, DirectiveBinding, ExtractDefaultPropTypes, ExtractPropTypes, ExtractPublicPropTypes, InjectionKey, PropType, Ref, MaybeRef, MaybeRefOrGetter, VNode, WritableComputedRef } from 'vue'
import('vue')
// @ts-ignore
export type { CodeSection } from './src/composables/playground'
import('./src/composables/playground')
// @ts-ignore
export type { Category } from './src/stores/app'
import('./src/stores/app')
// @ts-ignore
Expand Down
22 changes: 20 additions & 2 deletions packages/docs/components.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,6 @@ declare module 'vue' {
DocMadeWithVueAttribution: typeof import('./src/components/doc/MadeWithVueAttribution.vue')['default']
DocMadeWithVuetifyGallery: typeof import('./src/components/doc/MadeWithVuetifyGallery.vue')['default']
DocMadeWithVuetifyLink: typeof import('./src/components/doc/MadeWithVuetifyLink.vue')['default']
DocPremiumThemesGallery: typeof import('./src/components/doc/PremiumThemesGallery.vue')['default']
DocReadyForMore: typeof import('./src/components/doc/ReadyForMore.vue')['default']
DocRelatedPage: typeof import('./src/components/doc/RelatedPage.vue')['default']
DocRelatedPages: typeof import('./src/components/doc/RelatedPages.vue')['default']
Expand All @@ -119,13 +118,32 @@ declare module 'vue' {
FeaturesSassApi: typeof import('./src/components/features/SassApi.vue')['default']
GettingStartedWireframeExamples: typeof import('./src/components/getting-started/WireframeExamples.vue')['default']
HomeActionBtns: typeof import('./src/components/home/ActionBtns.vue')['default']
HomeBgGradient: typeof import('./src/components/home/BgGradient.vue')['default']
HomeBlogs: typeof import('./src/components/home/Blogs.vue')['default']
HomeComponentGallery: typeof import('./src/components/home/ComponentGallery.vue')['default']
HomeDiscord: typeof import('./src/components/home/Discord.vue')['default']
HomeEcosystem: typeof import('./src/components/home/Ecosystem.vue')['default']
HomeEntry: typeof import('./src/components/home/Entry.vue')['default']
HomeEpicmaxSupport: typeof import('./src/components/home/EpicmaxSupport.vue')['default']
HomeFeatures: typeof import('./src/components/home/Features.vue')['default']
HomeFooter: typeof import('./src/components/home/Footer.vue')['default']
HomeGalleryChatChat: typeof import('./src/components/home/Gallery/Chat/Chat.vue')['default']
HomeGalleryChatDetail: typeof import('./src/components/home/Gallery/Chat/Detail.vue')['default']
HomeGalleryChatInbox: typeof import('./src/components/home/Gallery/Chat/Inbox.vue')['default']
HomeGalleryChatList: typeof import('./src/components/home/Gallery/Chat/List.vue')['default']
HomeGalleryComponentGallery: typeof import('./src/components/home/Gallery/ComponentGallery.vue')['default']
HomeGalleryComponents: typeof import('./src/components/home/Gallery/Components.vue')['default']
HomeGalleryData: typeof import('./src/components/home/Gallery/Data.vue')['default']
HomeGalleryForm: typeof import('./src/components/home/Gallery/Form.vue')['default']
HomeGallerySelection: typeof import('./src/components/home/Gallery/Selection.vue')['default']
HomeLogo: typeof import('./src/components/home/Logo.vue')['default']
HomeMarquee: typeof import('./src/components/home/Marquee.vue')['default']
HomeSnips: typeof import('./src/components/home/Snips.vue')['default']
HomeSpecialSponsor: typeof import('./src/components/home/SpecialSponsor.vue')['default']
HomeSponsors: typeof import('./src/components/home/Sponsors.vue')['default']
HomeStore: typeof import('./src/components/home/Store.vue')['default']
HomeSupport: typeof import('./src/components/home/Support.vue')['default']
HomeTooling: typeof import('./src/components/home/Tooling.vue')['default']
HomeVuetifyOne: typeof import('./src/components/home/VuetifyOne.vue')['default']
IconsChevronDown: typeof import('./src/components/icons/ChevronDown.vue')['default']
IntroductionComparison: typeof import('./src/components/introduction/Comparison.vue')['default']
IntroductionConsultingServices: typeof import('./src/components/introduction/ConsultingServices.vue')['default']
Expand Down
50 changes: 40 additions & 10 deletions packages/docs/src/components/app/Markup.vue
Original file line number Diff line number Diff line change
Expand Up @@ -53,18 +53,18 @@
<v-btn
v-if="isHovering"
:key="icon"
:icon="needsPlaygroundLink ? '$vuetify-play' : '$vuetify-bin'"
class="text-disabled me-12 mt-2 app-markup-btn position-absolute right-0 top-0"
density="comfortable"
icon="$vuetify-bin"
size="small"
v-bind="activatorProps"
variant="text"
@click="bin"
@click="openCode"
/>
</v-fade-transition>
</template>

<span>{{ t('open-in-vuetify-bin') }}</span>
<span>{{ t(needsPlaygroundLink ? 'open-in-playground' : 'open-in-vuetify-bin') }}</span>
</v-tooltip>

<div class="pa-4 pe-12">
Expand Down Expand Up @@ -97,7 +97,10 @@

const props = defineProps({
resource: String,
code: null,
code: {
type: [String, Array] as PropType<string | CodeSection[]>,
default: '',
},
inline: Boolean,
language: {
type: String,
Expand Down Expand Up @@ -130,16 +133,35 @@
const root = ref<ComponentPublicInstance>()

const highlighted = shallowRef('')
watchEffect(async () => {
highlighted.value = props.code && props.language && Prism.highlight(await props.code, Prism.languages[props.language], props.language)
})

const className = computed(() => `language-${props.language}`)
const icon = computed(() => clicked.value ? 'mdi-check' : 'mdi-clipboard-text-outline')

async function bin () {
const needsPlaygroundLink = computed(() => Array.isArray(props.code))

const displayedCode = computed(() => {
if (typeof props.code === 'string') {
return props.code
}

return props.code.map((section: CodeSection) => section.content).join('\n\n')
})

watchEffect(async () => {
highlighted.value = displayedCode.value && props.language && Prism.highlight(await displayedCode.value, Prism.languages[props.language], props.language)
})

function openCode () {
if (needsPlaygroundLink.value) {
openPlayground()
} else {
openBin()
}
}

async function openBin () {
const el = root.value?.$el.querySelector('code')
const code = props.code || el?.innerText || ''
const code = displayedCode.value || el?.innerText || ''
const language = props.language || 'markdown'
const title = props.resource

Expand All @@ -148,10 +170,18 @@
window.open(compressed, '_blank')
}

async function openPlayground () {
if (typeof props.code === 'string') return

const url = usePlayground(props.code)

window.open(url, '_blank')
}

async function copy () {
const el = root.value?.$el.querySelector('code')

navigator.clipboard.writeText(props.code || el?.innerText || '')
navigator.clipboard.writeText(displayedCode.value || el?.innerText || '')

clicked.value = true

Expand Down
90 changes: 0 additions & 90 deletions packages/docs/src/components/doc/PremiumThemesGallery.vue

This file was deleted.

48 changes: 48 additions & 0 deletions packages/docs/src/components/home/BgGradient.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
<template>
<div class="v-bg position-absolute top-0 right-0 left-0 bottom-0">
<div
:class="{
[`bg-${props.color || defaultColor}`]: true,
[props.opacityClass]: true,
}"
aria-hidden="true"
class="overflow-hidden w-100 h-100"
/>
</div>
</template>

<script setup lang="ts">
const theme = useTheme()

const props = defineProps({
color: {
type: String,
},
opacityClass: {
type: String,
default: 'opacity-20',
},
})

const defaultColor = computed(() => {
return theme.current.value.dark ? 'grey-darken-3' : 'blue-grey-lighten-3'
})
</script>

<style scoped>
.v-bg {
filter: blur(100px);
pointer-events: none;
}

.v-bg > div {
background: rgb(var(--v-theme-primary));
z-index: -10;
clip-path: polygon(
0% 0%,
100% 0%,
100% 40%,
0% 40%
)
}
</style>
Loading