docus 4.1.3 → 4.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/app/app.config.ts +6 -7
- package/app/app.vue +5 -11
- package/app/components/LanguageSelect.vue +2 -2
- package/app/components/app/AppHeaderCenter.vue +4 -0
- package/app/components/docs/DocsPageHeaderLinks.vue +7 -15
- package/app/error.vue +1 -1
- package/app/layouts/default.vue +29 -0
- package/app/pages/[[lang]]/[...slug].vue +5 -9
- package/content.config.ts +1 -2
- package/i18n/locales/be.json +23 -0
- package/i18n/locales/de.json +22 -0
- package/i18n/locales/fr.json +1 -1
- package/i18n/locales/pl.json +23 -0
- package/i18n/locales/ru.json +23 -0
- package/modules/config.ts +0 -4
- package/modules/css.ts +5 -2
- package/package.json +15 -15
- package/app/layouts/docs.vue +0 -15
package/app/app.config.ts
CHANGED
|
@@ -4,6 +4,12 @@ export default defineAppConfig({
|
|
|
4
4
|
primary: 'emerald',
|
|
5
5
|
neutral: 'zinc',
|
|
6
6
|
},
|
|
7
|
+
commandPalette: {
|
|
8
|
+
slots: {
|
|
9
|
+
input: '[&_.iconify]:size-4 [&_.iconify]:mx-0.5',
|
|
10
|
+
itemLeadingIcon: 'size-4 mx-0.5',
|
|
11
|
+
},
|
|
12
|
+
},
|
|
7
13
|
},
|
|
8
14
|
uiPro: {
|
|
9
15
|
contentNavigation: {
|
|
@@ -11,13 +17,6 @@ export default defineAppConfig({
|
|
|
11
17
|
linkLeadingIcon: 'size-4 mr-1',
|
|
12
18
|
linkTrailing: 'hidden',
|
|
13
19
|
},
|
|
14
|
-
variants: {
|
|
15
|
-
active: {
|
|
16
|
-
false: {
|
|
17
|
-
link: 'text-toned hover:after:bg-accented',
|
|
18
|
-
},
|
|
19
|
-
},
|
|
20
|
-
},
|
|
21
20
|
defaultVariants: {
|
|
22
21
|
variant: 'link',
|
|
23
22
|
},
|
package/app/app.vue
CHANGED
|
@@ -33,7 +33,7 @@ useSeoMeta({
|
|
|
33
33
|
|
|
34
34
|
if (isEnabled.value) {
|
|
35
35
|
const route = useRoute()
|
|
36
|
-
const defaultLocale = useRuntimeConfig().public.i18n.defaultLocale
|
|
36
|
+
const defaultLocale = useRuntimeConfig().public.i18n.defaultLocale!
|
|
37
37
|
onMounted(() => {
|
|
38
38
|
const currentLocale = route.path.split('/')[1]
|
|
39
39
|
if (!locales.some(locale => locale.code === currentLocale)) {
|
|
@@ -42,7 +42,7 @@ if (isEnabled.value) {
|
|
|
42
42
|
})
|
|
43
43
|
}
|
|
44
44
|
|
|
45
|
-
const { data: navigation } = await useAsyncData(`navigation_${collectionName.value}`, () => queryCollectionNavigation(collectionName.value as keyof PageCollections), {
|
|
45
|
+
const { data: navigation } = await useAsyncData(() => `navigation_${collectionName.value}`, () => queryCollectionNavigation(collectionName.value as keyof PageCollections), {
|
|
46
46
|
transform: (data) => {
|
|
47
47
|
const rootResult = data.find(item => item.path === '/docs')?.children || data || []
|
|
48
48
|
|
|
@@ -61,15 +61,9 @@ provide('navigation', navigation)
|
|
|
61
61
|
<UApp :locale="nuxtUiProLocales[locale as keyof typeof nuxtUiProLocales]">
|
|
62
62
|
<NuxtLoadingIndicator color="var(--ui-primary)" />
|
|
63
63
|
|
|
64
|
-
<
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
<NuxtLayout>
|
|
68
|
-
<NuxtPage />
|
|
69
|
-
</NuxtLayout>
|
|
70
|
-
</UMain>
|
|
71
|
-
|
|
72
|
-
<AppFooter />
|
|
64
|
+
<NuxtLayout>
|
|
65
|
+
<NuxtPage />
|
|
66
|
+
</NuxtLayout>
|
|
73
67
|
|
|
74
68
|
<ClientOnly>
|
|
75
69
|
<LazyUContentSearch
|
|
@@ -58,13 +58,13 @@ function getEmojiFlag(locale: string): string {
|
|
|
58
58
|
</UButton>
|
|
59
59
|
|
|
60
60
|
<template #content>
|
|
61
|
-
<ul class="flex flex-col
|
|
61
|
+
<ul class="flex flex-col">
|
|
62
62
|
<li
|
|
63
63
|
v-for="localeItem in locales"
|
|
64
64
|
:key="localeItem.code"
|
|
65
65
|
>
|
|
66
66
|
<NuxtLink
|
|
67
|
-
class="flex justify-between py-
|
|
67
|
+
class="flex justify-between py-1.5 px-2 gap-1 hover:bg-muted"
|
|
68
68
|
:to="switchLocalePath(localeItem.code) as string"
|
|
69
69
|
:aria-label="localeItem.name"
|
|
70
70
|
>
|
|
@@ -2,23 +2,17 @@
|
|
|
2
2
|
import { useClipboard } from '@vueuse/core'
|
|
3
3
|
|
|
4
4
|
const route = useRoute()
|
|
5
|
-
|
|
5
|
+
|
|
6
6
|
const { copy, copied } = useClipboard()
|
|
7
7
|
const { t } = useDocusI18n()
|
|
8
8
|
|
|
9
9
|
const markdownLink = computed(() => `${window?.location?.origin}/raw${route.path}.md`)
|
|
10
10
|
const items = [
|
|
11
11
|
{
|
|
12
|
-
label: '
|
|
12
|
+
label: t('docs.copy.link'),
|
|
13
13
|
icon: 'i-lucide-link',
|
|
14
14
|
onSelect() {
|
|
15
15
|
copy(markdownLink.value)
|
|
16
|
-
|
|
17
|
-
toast.add({
|
|
18
|
-
title: t('docs.copy.link'),
|
|
19
|
-
icon: 'i-lucide-check-circle',
|
|
20
|
-
color: 'success',
|
|
21
|
-
})
|
|
22
16
|
},
|
|
23
17
|
},
|
|
24
18
|
{
|
|
@@ -51,11 +45,11 @@ async function copyPage() {
|
|
|
51
45
|
<UButtonGroup size="sm">
|
|
52
46
|
<UButton
|
|
53
47
|
:label="t('docs.copy.page')"
|
|
54
|
-
:icon="copied ? 'i-lucide-
|
|
48
|
+
:icon="copied ? 'i-lucide-check' : 'i-lucide-copy'"
|
|
55
49
|
color="neutral"
|
|
56
|
-
variant="
|
|
50
|
+
variant="soft"
|
|
57
51
|
:ui="{
|
|
58
|
-
leadingIcon:
|
|
52
|
+
leadingIcon: 'text-neutral size-3.5',
|
|
59
53
|
}"
|
|
60
54
|
@click="copyPage"
|
|
61
55
|
/>
|
|
@@ -68,14 +62,12 @@ async function copyPage() {
|
|
|
68
62
|
side: 'bottom',
|
|
69
63
|
sideOffset: 8,
|
|
70
64
|
}"
|
|
71
|
-
:ui="{
|
|
72
|
-
content: 'w-48',
|
|
73
|
-
}"
|
|
74
65
|
>
|
|
75
66
|
<UButton
|
|
76
67
|
icon="i-lucide-chevron-down"
|
|
77
68
|
color="neutral"
|
|
78
|
-
variant="
|
|
69
|
+
variant="soft"
|
|
70
|
+
class="border-l border-muted"
|
|
79
71
|
/>
|
|
80
72
|
</UDropdownMenu>
|
|
81
73
|
</UButtonGroup>
|
package/app/error.vue
CHANGED
|
@@ -32,7 +32,7 @@ useSeoMeta({
|
|
|
32
32
|
|
|
33
33
|
if (isEnabled.value) {
|
|
34
34
|
const route = useRoute()
|
|
35
|
-
const defaultLocale = useRuntimeConfig().public.i18n.defaultLocale
|
|
35
|
+
const defaultLocale = useRuntimeConfig().public.i18n.defaultLocale!
|
|
36
36
|
onMounted(() => {
|
|
37
37
|
const currentLocale = route.path.split('/')[1]
|
|
38
38
|
if (!locales.some(locale => locale.code === currentLocale)) {
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import type { ContentNavigationItem } from '@nuxt/content'
|
|
3
|
+
|
|
4
|
+
const route = useRoute()
|
|
5
|
+
const docsNavigation = inject<Ref<ContentNavigationItem[]>>('navigation')
|
|
6
|
+
const docsLink = computed(() => docsNavigation?.value.flatMap(item => item.children || [item]) || [])
|
|
7
|
+
const isDocs = computed(() => docsLink.value.findIndex(item => item.path === route.path) !== -1)
|
|
8
|
+
</script>
|
|
9
|
+
|
|
10
|
+
<template>
|
|
11
|
+
<AppHeader />
|
|
12
|
+
<UMain>
|
|
13
|
+
<slot v-if="!isDocs" />
|
|
14
|
+
<UContainer v-else>
|
|
15
|
+
<UPage>
|
|
16
|
+
<template #left>
|
|
17
|
+
<UPageAside>
|
|
18
|
+
<DocsAsideLeftTop />
|
|
19
|
+
|
|
20
|
+
<DocsAsideLeftBody />
|
|
21
|
+
</UPageAside>
|
|
22
|
+
</template>
|
|
23
|
+
|
|
24
|
+
<slot />
|
|
25
|
+
</UPage>
|
|
26
|
+
</UContainer>
|
|
27
|
+
</UMain>
|
|
28
|
+
<AppFooter />
|
|
29
|
+
</template>
|
|
@@ -4,10 +4,6 @@ import type { ContentNavigationItem, Collections, DocsCollectionItem } from '@nu
|
|
|
4
4
|
import { findPageHeadline } from '@nuxt/content/utils'
|
|
5
5
|
import { addPrerenderPath } from '../../utils/prerender'
|
|
6
6
|
|
|
7
|
-
definePageMeta({
|
|
8
|
-
layout: 'docs',
|
|
9
|
-
})
|
|
10
|
-
|
|
11
7
|
const route = useRoute()
|
|
12
8
|
const { locale, isEnabled, t } = useDocusI18n()
|
|
13
9
|
const appConfig = useAppConfig()
|
|
@@ -28,10 +24,6 @@ if (!page.value) {
|
|
|
28
24
|
throw createError({ statusCode: 404, statusMessage: 'Page not found', fatal: true })
|
|
29
25
|
}
|
|
30
26
|
|
|
31
|
-
if (page.value.layout) {
|
|
32
|
-
setPageLayout(page.value.layout as never)
|
|
33
|
-
}
|
|
34
|
-
|
|
35
27
|
// Add the page path to the prerender list
|
|
36
28
|
addPrerenderPath(`/raw${route.path}.md`)
|
|
37
29
|
|
|
@@ -45,7 +37,11 @@ useSeoMeta({
|
|
|
45
37
|
ogDescription: description,
|
|
46
38
|
})
|
|
47
39
|
|
|
48
|
-
const headline =
|
|
40
|
+
const headline = ref(findPageHeadline(navigation?.value, page.value?.path))
|
|
41
|
+
watch(() => navigation?.value, () => {
|
|
42
|
+
headline.value = findPageHeadline(navigation?.value, page.value?.path) || headline.value
|
|
43
|
+
})
|
|
44
|
+
|
|
49
45
|
defineOgImageComponent('Docs', {
|
|
50
46
|
headline: headline.value,
|
|
51
47
|
})
|
package/content.config.ts
CHANGED
|
@@ -8,7 +8,6 @@ const cwd = joinURL(options.rootDir, 'content')
|
|
|
8
8
|
const locales = options.i18n?.locales
|
|
9
9
|
|
|
10
10
|
const createDocsSchema = () => z.object({
|
|
11
|
-
layout: z.string().optional(),
|
|
12
11
|
links: z.array(z.object({
|
|
13
12
|
label: z.string(),
|
|
14
13
|
icon: z.string(),
|
|
@@ -36,7 +35,7 @@ if (locales && Array.isArray(locales)) {
|
|
|
36
35
|
type: 'page',
|
|
37
36
|
source: {
|
|
38
37
|
cwd,
|
|
39
|
-
include: `${code}
|
|
38
|
+
include: `${code}/**/*`,
|
|
40
39
|
prefix: `/${code}`,
|
|
41
40
|
exclude: [`${code}/index.md`],
|
|
42
41
|
},
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
{
|
|
2
|
+
"common": {
|
|
3
|
+
"or": "або",
|
|
4
|
+
"error": {
|
|
5
|
+
"title": "Старонка не знойдзена",
|
|
6
|
+
"description": "Прабачце, але старонка, якую вы шукаеце, не знойдзена."
|
|
7
|
+
}
|
|
8
|
+
},
|
|
9
|
+
"docs": {
|
|
10
|
+
"copy": {
|
|
11
|
+
"page": "Скапіраваць старонку",
|
|
12
|
+
"link": "Скапіраваць Markdown-старонку",
|
|
13
|
+
"view": "Праглядзець як Markdown",
|
|
14
|
+
"gpt": "Адкрыць у ChatGPT",
|
|
15
|
+
"claude": "Адкрыць у Claude"
|
|
16
|
+
},
|
|
17
|
+
"links": "Супольнасць",
|
|
18
|
+
"toc": "На гэтай старонцы",
|
|
19
|
+
"report": "Паведаміць пра праблему",
|
|
20
|
+
"edit": "Рэдагаваць гэтую старонку"
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
{
|
|
2
|
+
"common": {
|
|
3
|
+
"or": "oder",
|
|
4
|
+
"error": {
|
|
5
|
+
"title": "Seite nicht gefunden",
|
|
6
|
+
"description": "Es tut uns leid, aber diese Seite konnte nicht gefunden werden."
|
|
7
|
+
}
|
|
8
|
+
},
|
|
9
|
+
"docs": {
|
|
10
|
+
"copy": {
|
|
11
|
+
"page": "Seite kopieren",
|
|
12
|
+
"link": "Markdown-Seite kopieren",
|
|
13
|
+
"view": "Als Markdown anzeigen",
|
|
14
|
+
"gpt": "In ChatGPT öffnen",
|
|
15
|
+
"claude": "In Claude öffnen"
|
|
16
|
+
},
|
|
17
|
+
"links": "Community",
|
|
18
|
+
"toc": "Auf dieser Seite",
|
|
19
|
+
"report": "Problem melden",
|
|
20
|
+
"edit": "Diese Seite bearbeiten"
|
|
21
|
+
}
|
|
22
|
+
}
|
package/i18n/locales/fr.json
CHANGED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
{
|
|
2
|
+
"common": {
|
|
3
|
+
"or": "lub",
|
|
4
|
+
"error": {
|
|
5
|
+
"title": "Nie znaleziono strony",
|
|
6
|
+
"description": "Przepraszamy, ale nie znaleziono tej strony."
|
|
7
|
+
}
|
|
8
|
+
},
|
|
9
|
+
"docs": {
|
|
10
|
+
"copy": {
|
|
11
|
+
"page": "Skopiuj stronę",
|
|
12
|
+
"link": "Skopiuj stronę Markdown",
|
|
13
|
+
"view": "Wyświetl jako Markdown",
|
|
14
|
+
"gpt": "Otwórz w ChatGPT",
|
|
15
|
+
"claude": "Otwórz w Claude"
|
|
16
|
+
},
|
|
17
|
+
"links": "Społeczność",
|
|
18
|
+
"toc": "Na tej stronie",
|
|
19
|
+
"report": "Zgłoś problem",
|
|
20
|
+
"edit": "Edytuj tę stronę"
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
{
|
|
2
|
+
"common": {
|
|
3
|
+
"or": "или",
|
|
4
|
+
"error": {
|
|
5
|
+
"title": "Страница не найдена",
|
|
6
|
+
"description": "Извините, но запрашиваемая страница не найдена."
|
|
7
|
+
}
|
|
8
|
+
},
|
|
9
|
+
"docs": {
|
|
10
|
+
"copy": {
|
|
11
|
+
"page": "Копировать страницу",
|
|
12
|
+
"link": "Копировать Markdown-страницу",
|
|
13
|
+
"view": "Просмотреть как Markdown",
|
|
14
|
+
"gpt": "Открыть в ChatGPT",
|
|
15
|
+
"claude": "Открыть в Claude"
|
|
16
|
+
},
|
|
17
|
+
"links": "Сообщество",
|
|
18
|
+
"toc": "На этой странице",
|
|
19
|
+
"report": "Сообщить о проблеме",
|
|
20
|
+
"edit": "Редактировать эту страницу"
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
|
package/modules/config.ts
CHANGED
package/modules/css.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { defineNuxtModule, addTemplate } from '@nuxt/kit'
|
|
1
|
+
import { defineNuxtModule, addTemplate, createResolver } from '@nuxt/kit'
|
|
2
2
|
import { joinURL } from 'ufo'
|
|
3
3
|
import { resolveModulePath } from 'exsolve'
|
|
4
4
|
|
|
@@ -8,10 +8,12 @@ export default defineNuxtModule({
|
|
|
8
8
|
},
|
|
9
9
|
async setup(_options, nuxt) {
|
|
10
10
|
const dir = nuxt.options.rootDir
|
|
11
|
+
const resolver = createResolver(import.meta.url)
|
|
11
12
|
|
|
12
13
|
const contentDir = joinURL(dir, 'content')
|
|
13
14
|
const uiProPath = resolveModulePath('@nuxt/ui-pro', { from: import.meta.url, conditions: ['style'] })
|
|
14
15
|
const tailwindPath = resolveModulePath('tailwindcss', { from: import.meta.url, conditions: ['style'] })
|
|
16
|
+
const layerDir = resolver.resolve('../app')
|
|
15
17
|
|
|
16
18
|
const cssTemplate = addTemplate({
|
|
17
19
|
filename: 'docus.css',
|
|
@@ -20,10 +22,11 @@ export default defineNuxtModule({
|
|
|
20
22
|
@import ${JSON.stringify(uiProPath)};
|
|
21
23
|
|
|
22
24
|
@source "${contentDir.replace(/\\/g, '/')}/**/*";
|
|
25
|
+
@source "${layerDir.replace(/\\/g, '/')}/**/*";
|
|
23
26
|
@source "../../app.config.ts";`
|
|
24
27
|
},
|
|
25
28
|
})
|
|
26
29
|
|
|
27
|
-
nuxt.options.css.
|
|
30
|
+
nuxt.options.css.unshift(cssTemplate.dst)
|
|
28
31
|
},
|
|
29
32
|
})
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "docus",
|
|
3
3
|
"description": "Nuxt layer for Docus documentation theme",
|
|
4
|
-
"version": "4.
|
|
4
|
+
"version": "4.2.0",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./nuxt.config.ts",
|
|
7
7
|
"repository": {
|
|
@@ -22,27 +22,27 @@
|
|
|
22
22
|
"README.md"
|
|
23
23
|
],
|
|
24
24
|
"dependencies": {
|
|
25
|
-
"@iconify-json/lucide": "^1.2.
|
|
26
|
-
"@iconify-json/simple-icons": "^1.2.
|
|
27
|
-
"@iconify-json/vscode-icons": "^1.2.
|
|
28
|
-
"@nuxt/content": "^3.
|
|
25
|
+
"@iconify-json/lucide": "^1.2.68",
|
|
26
|
+
"@iconify-json/simple-icons": "^1.2.52",
|
|
27
|
+
"@iconify-json/vscode-icons": "^1.2.30",
|
|
28
|
+
"@nuxt/content": "^3.7.1",
|
|
29
29
|
"@nuxt/image": "^1.11.0",
|
|
30
|
-
"@nuxt/kit": "^4.
|
|
31
|
-
"@nuxt/ui-pro": "^3.3.
|
|
32
|
-
"@nuxtjs/i18n": "^10.0
|
|
33
|
-
"@nuxtjs/mdc": "^0.17.
|
|
34
|
-
"@nuxtjs/robots": "^5.
|
|
35
|
-
"@vueuse/core": "^13.
|
|
30
|
+
"@nuxt/kit": "^4.1.2",
|
|
31
|
+
"@nuxt/ui-pro": "^3.3.4",
|
|
32
|
+
"@nuxtjs/i18n": "^10.1.0",
|
|
33
|
+
"@nuxtjs/mdc": "^0.17.4",
|
|
34
|
+
"@nuxtjs/robots": "^5.5.5",
|
|
35
|
+
"@vueuse/core": "^13.9.0",
|
|
36
36
|
"defu": "^6.1.4",
|
|
37
37
|
"exsolve": "^1.0.7",
|
|
38
38
|
"git-url-parse": "^16.1.0",
|
|
39
39
|
"minimark": "^0.2.0",
|
|
40
|
-
"motion-v": "^1.7.
|
|
40
|
+
"motion-v": "^1.7.1",
|
|
41
41
|
"nuxt-llms": "^0.1.3",
|
|
42
|
-
"nuxt-og-image": "^5.1.
|
|
43
|
-
"pkg-types": "^2.
|
|
42
|
+
"nuxt-og-image": "^5.1.11",
|
|
43
|
+
"pkg-types": "^2.3.0",
|
|
44
44
|
"scule": "^1.3.0",
|
|
45
|
-
"tailwindcss": "^4.1.
|
|
45
|
+
"tailwindcss": "^4.1.13",
|
|
46
46
|
"ufo": "^1.6.1"
|
|
47
47
|
},
|
|
48
48
|
"peerDependencies": {
|