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 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
- <AppHeader />
65
-
66
- <UMain>
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 gap-2">
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-2 px-1.5 gap-1 hover:bg-neutral-100 dark:hover:bg-neutral-800"
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,5 +2,9 @@
2
2
  <UContentSearchButton
3
3
  :collapsed="false"
4
4
  class="w-full"
5
+ variant="soft"
6
+ :ui="{
7
+ leadingIcon: 'size-4 mr-1',
8
+ }"
5
9
  />
6
10
  </template>
@@ -2,23 +2,17 @@
2
2
  import { useClipboard } from '@vueuse/core'
3
3
 
4
4
  const route = useRoute()
5
- const toast = useToast()
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: 'Copy Markdown link',
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-copy-check' : 'i-lucide-copy'"
48
+ :icon="copied ? 'i-lucide-check' : 'i-lucide-copy'"
55
49
  color="neutral"
56
- variant="outline"
50
+ variant="soft"
57
51
  :ui="{
58
- leadingIcon: [copied ? 'text-primary' : 'text-neutral', 'size-3.5'],
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="outline"
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 = computed(() => findPageHeadline(navigation?.value, page.value?.path))
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}/**/*.md`,
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
+ }
@@ -9,7 +9,7 @@
9
9
  "docs": {
10
10
  "copy": {
11
11
  "page": "Copier la page",
12
- "link": "Copier la page Markdown",
12
+ "link": "Copier le lien Markdown",
13
13
  "view": "Voir en Markdown",
14
14
  "gpt": "Ouvrir dans ChatGPT",
15
15
  "claude": "Ouvrir dans Claude"
@@ -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
@@ -49,10 +49,6 @@ export default defineNuxtModule({
49
49
  branch: getGitBranch(),
50
50
  })
51
51
 
52
- nuxt.options.appConfig.toc = defu(nuxt.options.appConfig.toc, {
53
- title: 'On this page',
54
- })
55
-
56
52
  /*
57
53
  ** I18N
58
54
  */
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.push(cssTemplate.dst)
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.1.3",
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.60",
26
- "@iconify-json/simple-icons": "^1.2.46",
27
- "@iconify-json/vscode-icons": "^1.2.24",
28
- "@nuxt/content": "^3.6.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.0.3",
31
- "@nuxt/ui-pro": "^3.3.0",
32
- "@nuxtjs/i18n": "^10.0.3",
33
- "@nuxtjs/mdc": "^0.17.2",
34
- "@nuxtjs/robots": "^5.4.0",
35
- "@vueuse/core": "^13.6.0",
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.0",
40
+ "motion-v": "^1.7.1",
41
41
  "nuxt-llms": "^0.1.3",
42
- "nuxt-og-image": "^5.1.9",
43
- "pkg-types": "^2.2.0",
42
+ "nuxt-og-image": "^5.1.11",
43
+ "pkg-types": "^2.3.0",
44
44
  "scule": "^1.3.0",
45
- "tailwindcss": "^4.1.11",
45
+ "tailwindcss": "^4.1.13",
46
46
  "ufo": "^1.6.1"
47
47
  },
48
48
  "peerDependencies": {
@@ -1,15 +0,0 @@
1
- <template>
2
- <UContainer>
3
- <UPage>
4
- <template #left>
5
- <UPageAside>
6
- <DocsAsideLeftTop />
7
-
8
- <DocsAsideLeftBody />
9
- </UPageAside>
10
- </template>
11
-
12
- <slot />
13
- </UPage>
14
- </UContainer>
15
- </template>