Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
123 commits
Select commit Hold shift + click to select a range
c706d36
chore(github): deduplicate issue templates
benjamincanac Aug 6, 2025
709e9d3
chore(github): update workflows to use `v4` branch
benjamincanac Aug 6, 2025
9d925e5
chore(readme): update branch to `v4`
benjamincanac Aug 6, 2025
1e0bf6f
chore(renovate): update branch to `v4`
benjamincanac Aug 6, 2025
fa1007a
docs: update branch to `v4`
benjamincanac Aug 6, 2025
d3cb9c1
chore: reorganize under `playgrounds/`
benjamincanac Aug 6, 2025
f6ae153
feat: import `@nuxt/ui-pro` components (#4675)
benjamincanac Aug 11, 2025
9545fdd
feat(components)!: upgrade `ai-sdk` to v5 (#4698)
HugoRCD Aug 11, 2025
9fbe306
chore(vercel): enable deployments
benjamincanac Aug 11, 2025
8aa96d1
feat(FieldGroup)!: rename from `ButtonGroup` (#4596)
J-Michalek Aug 12, 2025
99d3227
fix(ContentSearch/DashboardSearch): make `ui.modal` work
benjamincanac Aug 12, 2025
841c369
fix(ProseImg): ensure unique motion layout id for images (#4720)
HugoRCD Aug 12, 2025
4926c97
chore(deps): update dependency @nuxt/icon to v2
benjamincanac Aug 12, 2025
5d51785
docs(figma): merge free and pro kits (#4707)
HugoRCD Aug 12, 2025
1ef53f6
docs(app): improve navigation links
benjamincanac Aug 12, 2025
96c8306
docs(components): add index page
benjamincanac Aug 12, 2025
d88019e
docs(templates): improve marketing
benjamincanac Aug 12, 2025
7f705a3
chore(deps): remove wrangler dependency
benjamincanac Aug 13, 2025
6606fa3
fix(PageCard): improve keyboard accessibility (#4733)
HugoRCD Aug 13, 2025
f618af5
docs(components): add changelog section
benjamincanac Aug 13, 2025
79ae89a
docs(getting-started): improve categories
benjamincanac Aug 13, 2025
e780a03
docs(app): add `key` on navigation
benjamincanac Aug 13, 2025
314e661
fix(AuthForm): use `error` from form field (#4738)
Barbapapazes Aug 14, 2025
44e0178
fix(BlogPost): ensure date slot renders (#4743)
EvanSchleret Aug 14, 2025
0a4d9b4
feat(Marquee)!: rename from `PageMarquee` (#4741)
HugoRCD Aug 14, 2025
1c63aab
feat(PageAccordion)!: remove in favor of `Accordion` (#4734)
HugoRCD Aug 14, 2025
731e136
docs(nuxt.config): update route rules
benjamincanac Aug 14, 2025
2a5fbc8
docs(app): remove `module` field from content collection
benjamincanac Aug 14, 2025
35c84c5
docs(app): wrong og image on components index page
benjamincanac Aug 14, 2025
abd2584
test: update snapshots
benjamincanac Aug 15, 2025
53c4831
chore: prepare for `alpha`
benjamincanac Aug 15, 2025
f1a0166
chore(release): v4.0.0-alpha.0
benjamincanac Aug 15, 2025
5f3b6d4
docs: use `@nuxt/ui@alpha` package
benjamincanac Aug 16, 2025
e978f0d
docs: use `https://ui4.nuxt.com` url
benjamincanac Aug 16, 2025
9820424
docs(app): hide banner
benjamincanac Aug 16, 2025
a572927
docs(server): fix raw route collection
benjamincanac Aug 16, 2025
9ad9f55
feat(docs): add blocks
HugoRCD Aug 19, 2025
38808e7
docs(ColorMode): fix `framework-only` display (#4780)
HugoRCD Aug 19, 2025
6cc86a2
Merge branch 'v4' into feat/blocks
HugoRCD Aug 19, 2025
674e3dd
fix(docs): never display empty components category (#4792)
HugoRCD Aug 19, 2025
94b7a54
fix(docs): fix `framework-only` display for `ColorModeSwitch` (#4793)
HugoRCD Aug 19, 2025
08cdf0a
Merge branch 'v4' into feat/blocks
HugoRCD Aug 21, 2025
b876b99
update structure
HugoRCD Aug 21, 2025
8d0ab20
up
HugoRCD Aug 21, 2025
7fb3d1d
improve BlockExample
HugoRCD Aug 22, 2025
fcd1919
up
HugoRCD Aug 25, 2025
3ee5424
chore(github): deduplicate issue templates
benjamincanac Aug 6, 2025
5cc883c
chore(github): update workflows to use `v4` branch
benjamincanac Aug 6, 2025
d38f3f2
chore(readme): update branch to `v4`
benjamincanac Aug 6, 2025
674f8b4
chore(renovate): update branch to `v4`
benjamincanac Aug 6, 2025
9edce97
docs: update branch to `v4`
benjamincanac Aug 6, 2025
1765425
chore: reorganize under `playgrounds/`
benjamincanac Aug 6, 2025
ec71baf
feat: import `@nuxt/ui-pro` components (#4675)
benjamincanac Aug 11, 2025
a3be6ad
feat(components)!: upgrade `ai-sdk` to v5 (#4698)
HugoRCD Aug 11, 2025
3105d60
chore(vercel): enable deployments
benjamincanac Aug 11, 2025
c2c1c26
feat(FieldGroup)!: rename from `ButtonGroup` (#4596)
J-Michalek Aug 12, 2025
7f8d919
fix(ContentSearch/DashboardSearch): make `ui.modal` work
benjamincanac Aug 12, 2025
1015430
fix(ProseImg): ensure unique motion layout id for images (#4720)
HugoRCD Aug 12, 2025
0d552cb
chore(deps): update dependency @nuxt/icon to v2
benjamincanac Aug 12, 2025
4aa443c
docs(figma): merge free and pro kits (#4707)
HugoRCD Aug 12, 2025
be8f287
docs(app): improve navigation links
benjamincanac Aug 12, 2025
2a72b32
docs(components): add index page
benjamincanac Aug 12, 2025
0a0ec21
docs(templates): improve marketing
benjamincanac Aug 12, 2025
38a14a4
chore(deps): remove wrangler dependency
benjamincanac Aug 13, 2025
203b59b
fix(PageCard): improve keyboard accessibility (#4733)
HugoRCD Aug 13, 2025
f52f470
docs(components): add changelog section
benjamincanac Aug 13, 2025
343465c
docs(getting-started): improve categories
benjamincanac Aug 13, 2025
be190ae
docs(app): add `key` on navigation
benjamincanac Aug 13, 2025
db44a06
fix(AuthForm): use `error` from form field (#4738)
Barbapapazes Aug 14, 2025
84a78e7
fix(BlogPost): ensure date slot renders (#4743)
EvanSchleret Aug 14, 2025
7a99712
feat(Marquee)!: rename from `PageMarquee` (#4741)
HugoRCD Aug 14, 2025
0d5baae
feat(PageAccordion)!: remove in favor of `Accordion` (#4734)
HugoRCD Aug 14, 2025
9c65b7b
docs(nuxt.config): update route rules
benjamincanac Aug 14, 2025
ee7a26f
docs(app): remove `module` field from content collection
benjamincanac Aug 14, 2025
1887f93
docs(app): wrong og image on components index page
benjamincanac Aug 14, 2025
a055d5d
test: update snapshots
benjamincanac Aug 15, 2025
a756017
chore: prepare for `alpha`
benjamincanac Aug 15, 2025
f204f4d
chore(release): v4.0.0-alpha.0
benjamincanac Aug 15, 2025
677380d
docs: use `@nuxt/ui@alpha` package
benjamincanac Aug 16, 2025
9b364e2
docs: use `https://ui4.nuxt.com` url
benjamincanac Aug 16, 2025
472ddc8
docs(app): hide banner
benjamincanac Aug 16, 2025
b82f53d
docs(server): fix raw route collection
benjamincanac Aug 16, 2025
f9e0148
docs(color-mode): typo in MDC syntax (#4780)
HugoRCD Aug 19, 2025
f34d636
fix(ChangelogVersion/ChangelogVersions): handle RTL mode (#4777)
malik-jouda Aug 25, 2025
c9765ca
docs(app): never display empty components category (#4792)
HugoRCD Aug 19, 2025
c14fccb
docs(typography) : update `@nuxt/content` installation guide link (#4…
maximepvrt Aug 25, 2025
400a8c9
docs(getting-started): add `llms.txt` page (#4799)
HugoRCD Aug 25, 2025
fe66e83
fix(unplugin): handle components overrides in subdirectories (#4781)
HugoRCD Aug 25, 2025
268871d
chore(deps): update dependencies unplugin-auto-import and unplugin-vu…
benjamincanac Aug 25, 2025
3e38fac
feat(module)!: update compatibility to nuxt 4
benjamincanac Aug 25, 2025
2d5d1fa
docs(app): hide empty categories using class
benjamincanac Aug 26, 2025
c14be22
docs(templates): add framework select
benjamincanac Aug 26, 2025
3480408
docs(index): improve page
benjamincanac Aug 26, 2025
75f4ad6
docs(getting-started): rewrite introduction
benjamincanac Aug 26, 2025
b206c99
Merge remote-tracking branch 'origin/v4' into feat/blocks
HugoRCD Aug 27, 2025
e2d6567
fix(module): add `@source` on components
benjamincanac Aug 27, 2025
3545d92
up
HugoRCD Aug 27, 2025
0774748
Merge remote-tracking branch 'origin/v4' into feat/blocks
HugoRCD Aug 27, 2025
1d2e705
up
HugoRCD Aug 27, 2025
8936662
up
HugoRCD Aug 27, 2025
1b2c2dd
docs(migration): write guide from v3 to v4 (#4802)
HugoRCD Aug 27, 2025
e3b7a8d
up
HugoRCD Aug 27, 2025
bfa114a
Merge remote-tracking branch 'origin/v4' into feat/blocks
HugoRCD Aug 27, 2025
606bd31
up
HugoRCD Aug 28, 2025
c3c67c3
Merge remote-tracking branch 'origin/v4' into feat/blocks
HugoRCD Sep 1, 2025
b4f8d65
fix merge
HugoRCD Sep 1, 2025
636902f
up
HugoRCD Sep 1, 2025
14662f2
Merge remote-tracking branch 'origin/v4' into feat/blocks
HugoRCD Sep 1, 2025
9af26fc
Merge remote-tracking branch 'origin/v4' into feat/blocks
HugoRCD Sep 5, 2025
6cc0897
Merge remote-tracking branch 'origin/v4' into feat/blocks
HugoRCD Sep 8, 2025
f112771
Merge remote-tracking branch 'origin/v4' into feat/blocks
HugoRCD Sep 9, 2025
2d83ac6
Merge remote-tracking branch 'origin/v4' into feat/blocks
HugoRCD Sep 12, 2025
defba89
Merge remote-tracking branch 'origin/v4' into feat/blocks
HugoRCD Sep 15, 2025
ab0e464
Merge remote-tracking branch 'origin/v4' into feat/blocks
HugoRCD Sep 16, 2025
1a5ee33
Merge remote-tracking branch 'origin/v4' into feat/blocks
HugoRCD Sep 19, 2025
61b8d72
Merge remote-tracking branch 'origin/v4' into feat/blocks
HugoRCD Sep 23, 2025
140c2f7
Merge remote-tracking branch 'origin/v4' into feat/blocks
HugoRCD Sep 25, 2025
c1412f7
Merge remote-tracking branch 'origin/v4' into feat/blocks
HugoRCD Sep 28, 2025
b7e95aa
Merge remote-tracking branch 'origin/v4' into feat/blocks
HugoRCD Sep 30, 2025
35475cd
Merge remote-tracking branch 'origin/v4' into feat/blocks
HugoRCD Oct 6, 2025
b8054d0
Merge remote-tracking branch 'origin/v4' into feat/blocks
HugoRCD Oct 8, 2025
2330263
Merge remote-tracking branch 'origin/v4' into feat/blocks
HugoRCD Oct 11, 2025
e10f826
add download button
HugoRCD Oct 11, 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
2 changes: 1 addition & 1 deletion docs/app/app.vue
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ provide('navigation', rootNavigation)
<Analytics :debug="false" />
<SpeedInsights :debug="false" />

<div :class="[route.path.startsWith('/docs/') && 'root']">
<div :class="[(route.path.startsWith('/docs/') || route.path.startsWith('/blocks/')) && 'root']">
<template v-if="!route.path.startsWith('/examples')">
<Banner />

Expand Down
322 changes: 322 additions & 0 deletions docs/app/components/content/BlockExample.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,322 @@
<script setup lang="ts">
import { camelCase, pascalCase } from 'scule'
import { SplitterGroup, SplitterPanel, SplitterResizeHandle } from 'reka-ui'
import type { TabsItem } from '@nuxt/ui'

const props = withDefaults(defineProps<{
name: string
/**
* Whether to format the code with Prettier
* @defaultValue false
*/
prettier?: boolean
/**
* Custom height for the iframe container
* @defaultValue '500px'
*/
height?: string
/**
* Whether to collapse the code block
* @defaultValue false
*/
collapse?: boolean
/**
* Whether to show the source code
* @defaultValue true
*/
source?: boolean
/**
* A list of line numbers to highlight in the code block
*/
highlights?: number[]
/**
* Whether to center the example content
* @defaultValue true
*/
centered?: boolean
title?: string
description?: string
hint?: string
}>(), {
source: true,
height: '500px',
centered: true
})

const toast = useToast()
const colorMode = useColorMode()

const { $prettier } = useNuxtApp()
const camelName = camelCase(props.name)

const id = computed(() => props.name ? `block-${props.name}` : undefined)

const localTheme = ref<'light' | 'dark'>()
const effectiveTheme = computed(() => {
return localTheme.value || colorMode.value
})

const toggleTheme = () => {
if (effectiveTheme.value === 'light') {
localTheme.value = 'dark'
} else {
localTheme.value = 'light'
}
}

const themeIcon = computed(() => {
return effectiveTheme.value === 'light' ? 'i-lucide-moon' : 'i-lucide-sun'
})

const themeTooltip = computed(() => {
return effectiveTheme.value === 'light' ? 'Switch to dark mode' : 'Switch to light mode'
})

const data = await fetchComponentExample(camelName)

const code = computed(() => {
let code = ''

if (props.collapse) {
code += `::code-collapse
`
}

code += `\`\`\`vue${props.highlights?.length ? `{${props.highlights.join('-')}}` : ''}
${data?.code ?? ''}
\`\`\``

if (props.collapse) {
code += `
::`
}

return code
})

const { data: ast } = await useAsyncData(`block-example-${camelName}`, async () => {
if (!props.prettier) {
return parseMarkdown(code.value)
}

let formatted = ''
try {
formatted = await $prettier.format(code.value, {
trailingComma: 'none',
semi: false,
singleQuote: true,
printWidth: 100
})
} catch {
formatted = code.value
}

return parseMarkdown(formatted)
}, { watch: [code] })

const items = [
{
label: 'Preview',
slot: 'preview' as const
},
{
label: 'Code',
slot: 'code' as const
}
] satisfies TabsItem[]

const openFullscreen = () => {
const url = `/examples/blocks/${props.name}?centered=${props.centered}&theme=${effectiveTheme.value}`
window.open(url, '_blank', 'width=1200,height=800,scrollbars=yes,resizable=yes')
}

const copyCode = async () => {
if (data?.code) {
try {
await navigator.clipboard.writeText(data.code)
toast.add({
title: 'Code copied to clipboard',
color: 'success'
})
} catch (err) {
console.error('Failed to copy code:', err)
}
}
}

const downloadCode = () => {
if (data?.code) {
try {
const fileName = pascalCase(props.name)
const blob = new Blob([data.code], { type: 'text/plain;charset=utf-8' })
const url = URL.createObjectURL(blob)
const link = document.createElement('a')
link.href = url
link.download = `${fileName}.vue`
document.body.appendChild(link)
link.click()
document.body.removeChild(link)
URL.revokeObjectURL(url)

toast.add({
title: 'Component downloaded',
color: 'success'
})
} catch (err) {
console.error('Failed to download code:', err)
}
}
}
</script>

<template>
<div :id="id" class="relative border border-default mb-10 scroll-mt-[calc(45px+var(--ui-header-height))] lg:scroll-mt-(--ui-header-height)">
<div v-if="title || description" class="flex flex-col gap-1 p-4">
<span v-if="title" class="text-xl font-bold text-highlighted">
<a v-if="id" :href="`#${id}`" class="inline-flex items-center gap-1 group hover:underline underline-offset-2 decoration-1">
{{ title }}
<UIcon
name="i-lucide-link"
class="size-4 hidden group-hover:block"
/>
</a>
<template v-else>
{{ title }}
</template>
</span>
<span v-if="description" class="text-muted">
{{ description }}
</span>
</div>
<div class="border-t border-default overflow-hidden" :style="{ height: props.height }">
<UTabs
:items="items"
class="size-full gap-0"
variant="link"
:ui="{
content: 'relative size-full border-t border-default',
indicator: 'z-10'
}"
>
<template #preview>
<span v-if="hint" class="absolute bottom-2 left-2 bg-muted/50 backdrop-blur-3xl border border-default px-2 py-1 rounded text-xs">
{{ hint }}
</span>
<SplitterGroup
:id="`splitter-${camelName}`"
direction="horizontal"
>
<SplitterPanel
:id="`splitter-${camelName}-panel-1`"
:default-size="70"
:min-size="30"
class="overflow-hidden"
>
<iframe
:src="`/examples/blocks/${name}?centered=${centered}&theme=${effectiveTheme}`"
class="size-full"
/>
</SplitterPanel>
<SplitterResizeHandle
:id="`splitter-${camelName}-handle`"
class="group w-4 flex items-center justify-center bg-default"
>
<div class="w-1 h-8 group-hover:h-16 bg-elevated transition-all rounded-full" />
</SplitterResizeHandle>

<SplitterPanel
:id="`splitter-${camelName}-panel-2`"
class="bg-stripes"
:default-size="0"
:min-size="0"
/>
</SplitterGroup>
</template>

<template #code>
<div
v-if="source"
class="overflow-y-auto h-full"
>
<MDCRenderer v-if="ast" :body="ast.body" :data="ast.data" class="*:my-0 *:*:border-none *:*:rounded-none" />
</div>
</template>

<template #list-trailing>
<div class="flex flex-1 items-center justify-end gap-2">
<UButton
variant="ghost"
size="sm"
square
color="neutral"
icon="i-lucide-copy"
label="Copy code"
@click="copyCode"
/>

<UTooltip
text="Download component"
:delay-duration="0"
:content="{
side: 'top'
}"
>
<UButton
variant="ghost"
size="sm"
square
color="neutral"
icon="i-lucide-download"
@click="downloadCode"
/>
</UTooltip>

<UTooltip
:text="themeTooltip"
:delay-duration="0"
:content="{
side: 'top'
}"
>
<UButton
variant="ghost"
size="sm"
square
color="neutral"
:icon="themeIcon"
@click="toggleTheme"
/>
</UTooltip>

<UTooltip
text="Open in fullscreen"
:delay-duration="0"
:content="{
side: 'top'
}"
>
<UButton
variant="ghost"
size="sm"
square
color="neutral"
icon="i-lucide-maximize"
@click="openFullscreen"
/>
</UTooltip>
</div>
</template>
</UTabs>
</div>
</div>
</template>

<style>
@reference '../../assets/css/main.css';

.bg-stripes {
@apply w-full [background-size:8px_8px];
@apply dark:[background-image:linear-gradient(-45deg,var(--color-neutral-800)_12.50%,transparent_12.50%,transparent_50%,var(--color-neutral-800)_50%,var(--color-neutral-800)_62.50%,transparent_62.50%,transparent_100%)];
@apply not-dark:[background-image:linear-gradient(-45deg,var(--color-neutral-100)_12.50%,transparent_12.50%,transparent_50%,var(--color-neutral-100)_50%,var(--color-neutral-100)_62.50%,transparent_62.50%,transparent_100%)];
}
</style>
61 changes: 61 additions & 0 deletions docs/app/components/content/examples/blocks/LogoContextMenu.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
<script setup lang="ts">
const logo = useTemplateRef('logo')
const { copy } = useClipboard()
const toast = useToast()

const copyLogo = () => {
if (logo.value) {
copy(logo.value.outerHTML)
toast.add({
title: 'Logo copied as SVG',
description: 'You can now paste it into your project',
icon: 'i-lucide-circle-check',
color: 'success'
})
}
}

const logoContextMenuItems = [
[{
label: 'Copy logo as SVG',
icon: 'i-simple-icons-nuxtdotjs',
onSelect() {
copyLogo()
}
}],
[{
label: 'Browse design kit',
icon: 'i-lucide-shapes',
to: 'https://nuxt.com/design-kit',
target: '_blank'
}]
]
</script>

<template>
<UContextMenu :items="logoContextMenuItems">
<NuxtLink
to="/"
class="flex items-end gap-2 font-bold text-xl text-highlighted min-w-0 focus-visible:outline-primary shrink-0"
aria-label="Nuxt UI"
>
<svg
ref="logo"
class="w-auto h-6 shrink-0"
width="1020"
height="200"
viewBox="0 0 1020 200"
fill="none"
xmlns="http://www.w3.org/2000/svg"
>
<path d="M377 200C379.16 200 381 198.209 381 196V103C381 103 386 112 395 127L434 194C435.785 197.74 439.744 200 443 200H470V50H443C441.202 50 439 51.4941 439 54V148L421 116L385 55C383.248 51.8912 379.479 50 376 50H350V200H377Z" fill="currentColor" />
<path d="M726 92H739C742.314 92 745 89.3137 745 86V60H773V92H800V116H773V159C773 169.5 778.057 174 787 174H800V200H783C759.948 200 745 185.071 745 160V116H726V92Z" fill="currentColor" />
<path d="M591 92V154C591 168.004 585.742 179.809 578 188C570.258 196.191 559.566 200 545 200C530.434 200 518.742 196.191 511 188C503.389 179.809 498 168.004 498 154V92H514C517.412 92 520.769 92.622 523 95C525.231 97.2459 526 98.5652 526 102V154C526 162.059 526.457 167.037 530 171C533.543 174.831 537.914 176 545 176C552.217 176 555.457 174.831 559 171C562.543 167.037 563 162.059 563 154V102C563 98.5652 563.769 96.378 566 94C567.96 91.9107 570.028 91.9599 573 92C573.411 92.0055 574.586 92 575 92H591Z" fill="currentColor" />
<path d="M676 144L710 92H684C680.723 92 677.812 93.1758 676 96L660 120L645 97C643.188 94.1758 639.277 92 636 92H611L645 143L608 200H634C637.25 200 640.182 196.787 642 194L660 167L679 195C680.818 197.787 683.75 200 687 200H713L676 144Z" fill="currentColor" />
<path d="M168 200H279C282.542 200 285.932 198.756 289 197C292.068 195.244 295.23 193.041 297 190C298.77 186.959 300.002 183.51 300 179.999C299.998 176.488 298.773 173.04 297 170.001L222 41C220.23 37.96 218.067 35.7552 215 34C211.933 32.2448 207.542 31 204 31C200.458 31 197.067 32.2448 194 34C190.933 35.7552 188.77 37.96 187 41L168 74L130 9.99764C128.228 6.95784 126.068 3.75491 123 2C119.932 0.245087 116.542 0 113 0C109.458 0 106.068 0.245087 103 2C99.9323 3.75491 96.7717 6.95784 95 9.99764L2 170.001C0.226979 173.04 0.00154312 176.488 1.90993e-06 179.999C-0.0015393 183.51 0.229648 186.959 2 190C3.77035 193.04 6.93245 195.244 10 197C13.0675 198.756 16.4578 200 20 200H90C117.737 200 137.925 187.558 152 164L186 105L204 74L259 168H186L168 200ZM89 168H40L113 42L150 105L125.491 147.725C116.144 163.01 105.488 168 89 168Z" fill="var(--ui-primary)" />
<path 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" fill="var(--ui-primary)" />
<path fill-rule="evenodd" clip-rule="evenodd" 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" fill="var(--ui-primary)" />
</svg>
</NuxtLink>
</UContextMenu>
</template>
Loading
Loading