@sit-onyx/nuxt-docs 1.0.0-beta.12 → 1.0.0-beta.120
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.vue → app/app.vue} +1 -1
- package/app/components/ColorSchemeSwitch.vue +27 -0
- package/app/components/LocaleSwitch.vue +41 -0
- package/app/components/NavBar.vue +47 -0
- package/app/error.vue +78 -0
- package/app/layouts/default.vue +5 -0
- package/app/pages/[...slug].vue +43 -0
- package/content.config.ts +8 -2
- package/nuxt.config.ts +13 -1
- package/package.json +27 -24
- package/app.config.ts +0 -32
- package/components/ErrorSVG.vue +0 -211
- package/components/NavBar.vue +0 -44
- package/components/NavItem.vue +0 -22
- package/error.vue +0 -57
- package/layouts/default.vue +0 -7
- package/pages/[...path].vue +0 -19
- package/tsconfig.json +0 -3
- /package/{components → app/components}/content/ProseA.vue +0 -0
- /package/{components → app/components}/content/ProseH1.vue +0 -0
- /package/{components → app/components}/content/ProseH2.vue +0 -0
- /package/{components → app/components}/content/ProseH3.vue +0 -0
- /package/{components → app/components}/content/ProseH4.vue +0 -0
- /package/{components → app/components}/content/ProseH5.vue +0 -0
- /package/{components → app/components}/content/ProseH6.vue +0 -0
- /package/{components → app/components}/content/ProseImg.vue +0 -0
- /package/{components → app/components}/content/ProseTable.vue +0 -0
package/{app.vue → app/app.vue}
RENAMED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
<script lang="ts" setup>
|
|
2
|
+
import { iconCircleContrast } from "@sit-onyx/icons";
|
|
3
|
+
import type { ColorSchemeValue } from "sit-onyx";
|
|
4
|
+
|
|
5
|
+
const colorMode = useColorMode();
|
|
6
|
+
const isColorSchemeDialogOpen = ref(false);
|
|
7
|
+
|
|
8
|
+
const colorScheme = computed({
|
|
9
|
+
get: () => {
|
|
10
|
+
return colorMode.preference === "system" ? "auto" : (colorMode.preference as ColorSchemeValue);
|
|
11
|
+
},
|
|
12
|
+
set: (newValue) => {
|
|
13
|
+
colorMode.preference = newValue === "auto" ? "system" : newValue;
|
|
14
|
+
},
|
|
15
|
+
});
|
|
16
|
+
</script>
|
|
17
|
+
|
|
18
|
+
<template>
|
|
19
|
+
<OnyxIconButton
|
|
20
|
+
label="Toggle color scheme"
|
|
21
|
+
:icon="iconCircleContrast"
|
|
22
|
+
color="neutral"
|
|
23
|
+
@click="isColorSchemeDialogOpen = true"
|
|
24
|
+
/>
|
|
25
|
+
|
|
26
|
+
<OnyxColorSchemeDialog v-model="colorScheme" v-model:open="isColorSchemeDialogOpen" />
|
|
27
|
+
</template>
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
<script lang="ts" setup>
|
|
2
|
+
import { iconTranslate } from "@sit-onyx/icons";
|
|
3
|
+
import type { SelectDialogOption } from "sit-onyx";
|
|
4
|
+
|
|
5
|
+
const { locale, setLocale, locales } = useI18n();
|
|
6
|
+
const isLanguageDialogOpen = ref(false);
|
|
7
|
+
|
|
8
|
+
const languageOptions = computed(() => {
|
|
9
|
+
return locales.value.map((locale) => {
|
|
10
|
+
return {
|
|
11
|
+
label: locale.name ?? locale.code,
|
|
12
|
+
value: locale.code,
|
|
13
|
+
} satisfies SelectDialogOption;
|
|
14
|
+
});
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
const currentLocaleLabel = computed(() => {
|
|
18
|
+
// using "!" here is safe since splitting a string will always return at least one string in the returned array
|
|
19
|
+
return locale.value.split("-")[0]!.split("_")[0]!.toUpperCase();
|
|
20
|
+
});
|
|
21
|
+
</script>
|
|
22
|
+
|
|
23
|
+
<template>
|
|
24
|
+
<OnyxButton
|
|
25
|
+
:label="currentLocaleLabel"
|
|
26
|
+
:icon="iconTranslate"
|
|
27
|
+
color="neutral"
|
|
28
|
+
mode="plain"
|
|
29
|
+
@click="isLanguageDialogOpen = true"
|
|
30
|
+
/>
|
|
31
|
+
|
|
32
|
+
<OnyxSelectDialog
|
|
33
|
+
v-model:open="isLanguageDialogOpen"
|
|
34
|
+
:label="$t('onyx.languageSelect.headline')"
|
|
35
|
+
:model-value="locale"
|
|
36
|
+
:options="languageOptions"
|
|
37
|
+
@update:model-value="setLocale($event)"
|
|
38
|
+
>
|
|
39
|
+
<template #description> {{ $t("onyx.languageSelect.subtitle") }} </template>
|
|
40
|
+
</OnyxSelectDialog>
|
|
41
|
+
</template>
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import type { OnyxNavBarProps, OnyxNavBarSlots } from "sit-onyx";
|
|
3
|
+
import ColorSchemeSwitch from "./ColorSchemeSwitch.vue";
|
|
4
|
+
|
|
5
|
+
const props = withDefaults(defineProps<OnyxNavBarProps>(), {
|
|
6
|
+
appName: "Documentation",
|
|
7
|
+
withBackButton: true,
|
|
8
|
+
});
|
|
9
|
+
|
|
10
|
+
const slots = defineSlots<OnyxNavBarSlots>();
|
|
11
|
+
|
|
12
|
+
const router = useRouter();
|
|
13
|
+
const { locales } = useI18n();
|
|
14
|
+
const localePath = useLocalePath();
|
|
15
|
+
</script>
|
|
16
|
+
|
|
17
|
+
<template>
|
|
18
|
+
<OnyxNavBar
|
|
19
|
+
v-bind="props"
|
|
20
|
+
:app-area="props.appArea ?? { link: localePath('/') }"
|
|
21
|
+
@navigate-back="router.back"
|
|
22
|
+
>
|
|
23
|
+
<!-- eslint-disable vue/require-explicit-slots -- slots type is imported from onyx but eslint does not seem to be able to handle this -->
|
|
24
|
+
<template v-if="slots.appArea" #appArea>
|
|
25
|
+
<slot name="appArea"></slot>
|
|
26
|
+
</template>
|
|
27
|
+
|
|
28
|
+
<slot></slot>
|
|
29
|
+
|
|
30
|
+
<template v-if="slots.globalContextArea" #globalContextArea>
|
|
31
|
+
<slot name="globalContextArea"></slot>
|
|
32
|
+
</template>
|
|
33
|
+
|
|
34
|
+
<template v-if="slots.mobileActivePage" #mobileActivePage>
|
|
35
|
+
<slot name="mobileActivePage"></slot>
|
|
36
|
+
</template>
|
|
37
|
+
|
|
38
|
+
<template #contextArea>
|
|
39
|
+
<slot name="contextArea">
|
|
40
|
+
<!-- using lazy here so the locale switch code is not loaded when only one locale exists -->
|
|
41
|
+
<LazyLocaleSwitch v-if="locales.length > 1" />
|
|
42
|
+
<ColorSchemeSwitch />
|
|
43
|
+
</slot>
|
|
44
|
+
</template>
|
|
45
|
+
<!-- eslint-enable vue/require-explicit-slots -->
|
|
46
|
+
</OnyxNavBar>
|
|
47
|
+
</template>
|
package/app/error.vue
ADDED
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import type { NuxtError } from "#app";
|
|
3
|
+
import App from "./app.vue";
|
|
4
|
+
|
|
5
|
+
const props = defineProps<{
|
|
6
|
+
error: NuxtError;
|
|
7
|
+
}>();
|
|
8
|
+
|
|
9
|
+
defineSlots<{
|
|
10
|
+
/**
|
|
11
|
+
* Slot to override the default "Back to home" action(s).
|
|
12
|
+
*
|
|
13
|
+
* @params clearError - Function to clear the error and redirect to the home page
|
|
14
|
+
*/
|
|
15
|
+
actions?(props: { clearError: typeof _clearError }): unknown;
|
|
16
|
+
/**
|
|
17
|
+
* Slot to override the error details section.
|
|
18
|
+
* By default, an accordion will be displayed that shows the technical error details.
|
|
19
|
+
*/
|
|
20
|
+
details?(): unknown;
|
|
21
|
+
}>();
|
|
22
|
+
|
|
23
|
+
const localePath = useLocalePath();
|
|
24
|
+
|
|
25
|
+
const _clearError = () => clearError({ redirect: localePath("/") });
|
|
26
|
+
</script>
|
|
27
|
+
|
|
28
|
+
<template>
|
|
29
|
+
<App>
|
|
30
|
+
<div class="error">
|
|
31
|
+
<OnyxErrorSVG class="error__image" />
|
|
32
|
+
|
|
33
|
+
<div class="error__headline">
|
|
34
|
+
<OnyxHeadline is="h1">{{ props.error.message }}</OnyxHeadline>
|
|
35
|
+
|
|
36
|
+
<slot name="actions" :clear-error="_clearError">
|
|
37
|
+
<OnyxButton label="Back to home" @click="_clearError" />
|
|
38
|
+
</slot>
|
|
39
|
+
</div>
|
|
40
|
+
|
|
41
|
+
<slot name="details">
|
|
42
|
+
<OnyxAccordion>
|
|
43
|
+
<OnyxAccordionItem value="details">
|
|
44
|
+
<template #header>Technical error details</template>
|
|
45
|
+
<pre class="error__details">{{ JSON.stringify(props.error, null, 2) }}</pre>
|
|
46
|
+
</OnyxAccordionItem>
|
|
47
|
+
</OnyxAccordion>
|
|
48
|
+
</slot>
|
|
49
|
+
</div>
|
|
50
|
+
</App>
|
|
51
|
+
</template>
|
|
52
|
+
|
|
53
|
+
<style lang="scss" scoped>
|
|
54
|
+
.error {
|
|
55
|
+
display: flex;
|
|
56
|
+
flex-direction: column;
|
|
57
|
+
align-items: center;
|
|
58
|
+
gap: var(--onyx-density-3xl);
|
|
59
|
+
|
|
60
|
+
&__image {
|
|
61
|
+
width: 32rem;
|
|
62
|
+
display: block;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
&__headline {
|
|
66
|
+
display: flex;
|
|
67
|
+
flex-direction: column;
|
|
68
|
+
align-items: center;
|
|
69
|
+
gap: var(--onyx-density-md);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
&__details {
|
|
73
|
+
white-space: pre-wrap;
|
|
74
|
+
overflow-wrap: anywhere;
|
|
75
|
+
font-family: var(--onyx-font-family-mono);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
</style>
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import type { Collections } from "@nuxt/content";
|
|
3
|
+
|
|
4
|
+
const route = useRoute();
|
|
5
|
+
const { locale } = useI18n();
|
|
6
|
+
const slug = computed(() => {
|
|
7
|
+
const value = String(route.params.slug);
|
|
8
|
+
return value.startsWith("/") ? value : `/${value}`;
|
|
9
|
+
});
|
|
10
|
+
|
|
11
|
+
const collection = await useAsyncData(
|
|
12
|
+
() => `page-${slug.value}-${locale.value}`,
|
|
13
|
+
() => {
|
|
14
|
+
const collection = `content_${locale.value}` as keyof Collections;
|
|
15
|
+
return queryCollection(collection).path(slug.value).first();
|
|
16
|
+
},
|
|
17
|
+
);
|
|
18
|
+
|
|
19
|
+
watch(
|
|
20
|
+
() => collection.data.value,
|
|
21
|
+
(data) => {
|
|
22
|
+
// if data is "null", the page content was not found. "undefined" means it is not loaded yet
|
|
23
|
+
if (data !== null) return;
|
|
24
|
+
throw showError({
|
|
25
|
+
message: "Page not found",
|
|
26
|
+
statusCode: 404,
|
|
27
|
+
});
|
|
28
|
+
},
|
|
29
|
+
{ immediate: true },
|
|
30
|
+
);
|
|
31
|
+
|
|
32
|
+
const data = computed(() => collection.data.value);
|
|
33
|
+
|
|
34
|
+
useSeoMeta({
|
|
35
|
+
title: computed(() => collection.data.value?.seo.title),
|
|
36
|
+
description: computed(() => collection.data.value?.seo.description),
|
|
37
|
+
});
|
|
38
|
+
</script>
|
|
39
|
+
|
|
40
|
+
<!-- eslint-disable-next-line vue/no-root-v-if -- the v-if here is theoretically not needed because we throw above it ifs undefined so the user will be redirected to the error page. However, there is still a console warning so we include the v-if here to prevent it. -->
|
|
41
|
+
<template>
|
|
42
|
+
<ContentRenderer v-if="data" :value="data" />
|
|
43
|
+
</template>
|
package/content.config.ts
CHANGED
|
@@ -1,10 +1,16 @@
|
|
|
1
1
|
import { defineCollection, defineContentConfig } from "@nuxt/content";
|
|
2
|
+
import path from "node:path";
|
|
2
3
|
|
|
3
4
|
export default defineContentConfig({
|
|
4
5
|
collections: {
|
|
5
|
-
|
|
6
|
+
content_en: defineCollection({
|
|
6
7
|
type: "page",
|
|
7
|
-
source:
|
|
8
|
+
source: [
|
|
9
|
+
// include files from content folder of the extending app
|
|
10
|
+
{ cwd: path.resolve("content"), include: "en/**", prefix: "" },
|
|
11
|
+
// include files from playground (mainly needed for this monorepo)
|
|
12
|
+
{ cwd: path.resolve("playground/content"), include: "en/**", prefix: "" },
|
|
13
|
+
],
|
|
8
14
|
}),
|
|
9
15
|
},
|
|
10
16
|
});
|
package/nuxt.config.ts
CHANGED
|
@@ -1,11 +1,23 @@
|
|
|
1
1
|
// https://nuxt.com/docs/api/configuration/nuxt-config
|
|
2
2
|
export default defineNuxtConfig({
|
|
3
|
+
$meta: {
|
|
4
|
+
// the name is used to generate import aliases so the user can easily import
|
|
5
|
+
// any component or file from this layer from "#layers/onyx"
|
|
6
|
+
// see: https://nuxt.com/docs/4.x/guide/going-further/layers#named-layer-aliases
|
|
7
|
+
name: "onyx",
|
|
8
|
+
},
|
|
3
9
|
devtools: { enabled: true },
|
|
4
10
|
compatibilityDate: "2025-01-20",
|
|
5
11
|
typescript: { typeCheck: "build" },
|
|
6
|
-
modules: ["@sit-onyx/nuxt", "@nuxt/content", "@nuxtjs/color-mode", "@nuxt/image"],
|
|
12
|
+
modules: ["@sit-onyx/nuxt", "@nuxt/content", "@nuxtjs/color-mode", "@nuxt/image", "@nuxtjs/i18n"],
|
|
7
13
|
css: ["@fontsource-variable/source-code-pro", "@fontsource-variable/source-sans-3"],
|
|
8
14
|
colorMode: {
|
|
9
15
|
classSuffix: "",
|
|
10
16
|
},
|
|
17
|
+
i18n: {
|
|
18
|
+
defaultLocale: "en",
|
|
19
|
+
// we explicitly don't define any default locales here so the project is fully in charge if defining which locales to use.
|
|
20
|
+
// Otherwise if we would e.g. add en here, the project would always be forced to register en, even if it does not plan to add en translations
|
|
21
|
+
// which could conflict with e.g. "const { locales } = useI18n()" to render a language switch which would always include en then
|
|
22
|
+
},
|
|
11
23
|
});
|
package/package.json
CHANGED
|
@@ -1,26 +1,26 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sit-onyx/nuxt-docs",
|
|
3
|
-
"
|
|
4
|
-
"version": "1.0.0-beta.12",
|
|
3
|
+
"version": "1.0.0-beta.120",
|
|
5
4
|
"description": "Nuxt layer/template for creating documentations with the onyx design system",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"author": "Schwarz IT KG",
|
|
6
7
|
"license": "Apache-2.0",
|
|
8
|
+
"engines": {
|
|
9
|
+
"node": ">=20"
|
|
10
|
+
},
|
|
7
11
|
"repository": {
|
|
8
12
|
"type": "git",
|
|
9
|
-
"url": "https://github.com/
|
|
13
|
+
"url": "https://github.com/SchwarzIT/onyx",
|
|
10
14
|
"directory": "packages/nuxt-docs"
|
|
11
15
|
},
|
|
12
16
|
"bugs": {
|
|
13
|
-
"url": "https://github.com/
|
|
17
|
+
"url": "https://github.com/SchwarzIT/onyx/issues"
|
|
14
18
|
},
|
|
15
19
|
"main": "./nuxt.config.ts",
|
|
16
20
|
"files": [
|
|
17
|
-
"
|
|
18
|
-
"
|
|
19
|
-
"
|
|
20
|
-
"pages",
|
|
21
|
-
"*.ts",
|
|
22
|
-
"*.vue",
|
|
23
|
-
"*.json"
|
|
21
|
+
"app",
|
|
22
|
+
"content.config.ts",
|
|
23
|
+
"nuxt.config.ts"
|
|
24
24
|
],
|
|
25
25
|
"peerDependencies": {
|
|
26
26
|
"@fontsource-variable/source-code-pro": ">= 5",
|
|
@@ -28,29 +28,32 @@
|
|
|
28
28
|
"@nuxt/content": ">= 3",
|
|
29
29
|
"@nuxt/image": ">= 1",
|
|
30
30
|
"@nuxtjs/color-mode": ">= 3",
|
|
31
|
+
"@nuxtjs/i18n": ">= 10",
|
|
31
32
|
"sass-embedded": ">= 1",
|
|
32
|
-
"@sit-onyx/icons": "^1.0.0-beta.
|
|
33
|
-
"@sit-onyx/nuxt": "^1.0.0-beta.
|
|
34
|
-
"sit-onyx": "^1.0.0-beta.
|
|
33
|
+
"@sit-onyx/icons": "^1.0.0-beta.26",
|
|
34
|
+
"@sit-onyx/nuxt": "^1.0.0-beta.304",
|
|
35
|
+
"sit-onyx": "^1.0.0-beta.314"
|
|
35
36
|
},
|
|
36
37
|
"devDependencies": {
|
|
37
38
|
"@fontsource-variable/source-code-pro": ">= 5",
|
|
38
39
|
"@fontsource-variable/source-sans-3": ">= 5",
|
|
39
40
|
"@nuxt/content": ">= 3",
|
|
40
41
|
"@nuxt/image": ">= 1",
|
|
41
|
-
"@nuxt/test-utils": "^3.
|
|
42
|
+
"@nuxt/test-utils": "^3.19.2",
|
|
42
43
|
"@nuxtjs/color-mode": ">= 3",
|
|
43
|
-
"
|
|
44
|
-
"
|
|
45
|
-
"
|
|
46
|
-
"
|
|
47
|
-
"
|
|
48
|
-
"
|
|
49
|
-
"@sit-onyx/
|
|
50
|
-
"sit-onyx": "^1.0.0-beta.
|
|
44
|
+
"@playwright/experimental-ct-vue": "1.55.0",
|
|
45
|
+
"@playwright/test": "1.55.0",
|
|
46
|
+
"nuxt": "^4.0.3",
|
|
47
|
+
"sass-embedded": "1.91.0",
|
|
48
|
+
"typescript": "5.9.2",
|
|
49
|
+
"vue": "3.5.20",
|
|
50
|
+
"@sit-onyx/icons": "^1.0.0-beta.26",
|
|
51
|
+
"@sit-onyx/nuxt": "^1.0.0-beta.304",
|
|
52
|
+
"@sit-onyx/shared": "^1.0.0-beta.4",
|
|
53
|
+
"sit-onyx": "^1.0.0-beta.314"
|
|
51
54
|
},
|
|
52
55
|
"scripts": {
|
|
53
|
-
"dev": "nuxi dev playground",
|
|
56
|
+
"dev": "pnpm dev:prepare && nuxi dev playground",
|
|
54
57
|
"dev:prepare": "nuxt prepare playground",
|
|
55
58
|
"build": "nuxt build playground",
|
|
56
59
|
"generate": "nuxt generate playground",
|
package/app.config.ts
DELETED
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import type { OnyxNavBarProps, OnyxNavItemProps } from "sit-onyx";
|
|
2
|
-
|
|
3
|
-
// TYPES
|
|
4
|
-
declare module "@nuxt/schema" {
|
|
5
|
-
interface AppConfigInput {
|
|
6
|
-
onyxDocs?: OnyxAppConfig;
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
interface AppConfig {
|
|
10
|
-
onyxDocs: OnyxAppConfig & typeof defaultAppConfig;
|
|
11
|
-
}
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
export type OnyxAppConfig = {
|
|
15
|
-
nav?: Partial<OnyxNavBarProps> & {
|
|
16
|
-
items?: NavItem[];
|
|
17
|
-
};
|
|
18
|
-
};
|
|
19
|
-
|
|
20
|
-
export type NavItem = OnyxNavItemProps & { children?: NavItem[] };
|
|
21
|
-
|
|
22
|
-
// CONFIG
|
|
23
|
-
const defaultAppConfig = {
|
|
24
|
-
nav: {
|
|
25
|
-
appName: "Documentation",
|
|
26
|
-
withBackButton: true,
|
|
27
|
-
},
|
|
28
|
-
} satisfies OnyxAppConfig;
|
|
29
|
-
|
|
30
|
-
export default defineAppConfig({
|
|
31
|
-
onyxDocs: defaultAppConfig,
|
|
32
|
-
});
|
package/components/ErrorSVG.vue
DELETED
|
@@ -1,211 +0,0 @@
|
|
|
1
|
-
<script lang="ts" setup>
|
|
2
|
-
const props = defineProps<{
|
|
3
|
-
title: string;
|
|
4
|
-
}>();
|
|
5
|
-
</script>
|
|
6
|
-
|
|
7
|
-
<template>
|
|
8
|
-
<svg
|
|
9
|
-
class="error__image"
|
|
10
|
-
xmlns="http://www.w3.org/2000/svg"
|
|
11
|
-
viewBox="0 0 1119.60911 699"
|
|
12
|
-
xmlns:xlink="http://www.w3.org/1999/xlink"
|
|
13
|
-
role="img"
|
|
14
|
-
>
|
|
15
|
-
<title>{{ props.title }}</title>
|
|
16
|
-
<circle cx="292.60911" cy="213" r="213" fill="var(--onyx-color-base-neutral-200)" />
|
|
17
|
-
<path
|
|
18
|
-
d="M31.39089,151.64237c0,77.49789,48.6181,140.20819,108.70073,140.20819"
|
|
19
|
-
transform="translate(-31.39089 -100.5)"
|
|
20
|
-
fill="var(--onyx-color-steel-900)"
|
|
21
|
-
/>
|
|
22
|
-
<path
|
|
23
|
-
d="M140.09162,291.85056c0-78.36865,54.255-141.78356,121.30372-141.78356"
|
|
24
|
-
transform="translate(-31.39089 -100.5)"
|
|
25
|
-
fill="var(--onyx-color-base-primary-500)"
|
|
26
|
-
/>
|
|
27
|
-
<path
|
|
28
|
-
d="M70.77521,158.66768c0,73.61476,31.00285,133.18288,69.31641,133.18288"
|
|
29
|
-
transform="translate(-31.39089 -100.5)"
|
|
30
|
-
fill="var(--onyx-color-base-primary-500)"
|
|
31
|
-
/>
|
|
32
|
-
<path
|
|
33
|
-
d="M140.09162,291.85056c0-100.13772,62.7103-181.16788,140.20819-181.16788"
|
|
34
|
-
transform="translate(-31.39089 -100.5)"
|
|
35
|
-
fill="var(--onyx-color-steel-900)"
|
|
36
|
-
/>
|
|
37
|
-
<ellipse cx="198.60911" cy="424.5" rx="187" ry="25.43993" fill="var(--onyx-color-steel-800)" />
|
|
38
|
-
<ellipse cx="198.60911" cy="424.5" rx="157" ry="21.35866" opacity="0.1" />
|
|
39
|
-
<ellipse cx="836.60911" cy="660.5" rx="283" ry="38.5" fill="var(--onyx-color-steel-800)" />
|
|
40
|
-
<ellipse cx="310.60911" cy="645.5" rx="170" ry="23.12721" fill="var(--onyx-color-steel-800)" />
|
|
41
|
-
<path
|
|
42
|
-
d="M494,726.5c90,23,263-30,282-90"
|
|
43
|
-
transform="translate(-31.39089 -100.5)"
|
|
44
|
-
fill="none"
|
|
45
|
-
stroke="var(--onyx-color-steel-700)"
|
|
46
|
-
stroke-miterlimit="10"
|
|
47
|
-
stroke-width="2"
|
|
48
|
-
/>
|
|
49
|
-
<path
|
|
50
|
-
d="M341,359.5s130-36,138,80-107,149-17,172"
|
|
51
|
-
transform="translate(-31.39089 -100.5)"
|
|
52
|
-
fill="none"
|
|
53
|
-
stroke="var(--onyx-color-steel-700)"
|
|
54
|
-
stroke-miterlimit="10"
|
|
55
|
-
stroke-width="2"
|
|
56
|
-
/>
|
|
57
|
-
<path
|
|
58
|
-
d="M215.40233,637.78332s39.0723-10.82,41.47675,24.04449-32.15951,44.78287-5.10946,51.69566"
|
|
59
|
-
transform="translate(-31.39089 -100.5)"
|
|
60
|
-
fill="none"
|
|
61
|
-
stroke="var(--onyx-color-steel-700)"
|
|
62
|
-
stroke-miterlimit="10"
|
|
63
|
-
stroke-width="2"
|
|
64
|
-
/>
|
|
65
|
-
<path
|
|
66
|
-
d="M810.09554,663.73988,802.218,714.03505s-38.78182,20.60284-11.51335,21.20881,155.73324,0,155.73324,0,24.84461,0-14.54318-21.81478l-7.87756-52.719Z"
|
|
67
|
-
transform="translate(-31.39089 -100.5)"
|
|
68
|
-
fill="var(--onyx-color-steel-900)"
|
|
69
|
-
/>
|
|
70
|
-
<path
|
|
71
|
-
d="M785.21906,734.69812c6.193-5.51039,16.9989-11.252,16.9989-11.252l7.87756-50.2952,113.9216.10717,7.87756,49.582c9.185,5.08711,14.8749,8.987,18.20362,11.97818,5.05882-1.15422,10.58716-5.44353-18.20362-21.38921l-7.87756-52.719-113.9216,3.02983L802.218,714.03506S769.62985,731.34968,785.21906,734.69812Z"
|
|
72
|
-
transform="translate(-31.39089 -100.5)"
|
|
73
|
-
opacity="0.1"
|
|
74
|
-
/>
|
|
75
|
-
<rect
|
|
76
|
-
x="578.43291"
|
|
77
|
-
y="212.68859"
|
|
78
|
-
width="513.25314"
|
|
79
|
-
height="357.51989"
|
|
80
|
-
rx="18.04568"
|
|
81
|
-
fill="var(--onyx-color-steel-900)"
|
|
82
|
-
/>
|
|
83
|
-
<rect
|
|
84
|
-
x="595.70294"
|
|
85
|
-
y="231.77652"
|
|
86
|
-
width="478.71308"
|
|
87
|
-
height="267.83694"
|
|
88
|
-
fill="var(--onyx-color-steel-800)"
|
|
89
|
-
/>
|
|
90
|
-
<circle cx="835.05948" cy="223.29299" r="3.02983" fill="var(--onyx-color-steel-200)" />
|
|
91
|
-
<path
|
|
92
|
-
d="M1123.07694,621.32226V652.6628a18.04341,18.04341,0,0,1-18.04568,18.04568H627.86949A18.04341,18.04341,0,0,1,609.8238,652.6628V621.32226Z"
|
|
93
|
-
transform="translate(-31.39089 -100.5)"
|
|
94
|
-
fill="var(--onyx-color-steel-900)"
|
|
95
|
-
/>
|
|
96
|
-
<polygon
|
|
97
|
-
points="968.978 667.466 968.978 673.526 642.968 673.526 642.968 668.678 643.417 667.466 651.452 645.651 962.312 645.651 968.978 667.466"
|
|
98
|
-
fill="var(--onyx-color-steel-900)"
|
|
99
|
-
/>
|
|
100
|
-
<path
|
|
101
|
-
d="M1125.828,762.03359c-.59383,2.539-2.83591,5.21743-7.90178,7.75032-18.179,9.08949-55.1429-2.42386-55.1429-2.42386s-28.4804-4.84773-28.4804-17.573a22.72457,22.72457,0,0,1,2.49658-1.48459c7.64294-4.04351,32.98449-14.02122,77.9177.42248a18.73921,18.73921,0,0,1,8.54106,5.59715C1125.07908,756.45353,1126.50669,759.15715,1125.828,762.03359Z"
|
|
102
|
-
transform="translate(-31.39089 -100.5)"
|
|
103
|
-
fill="var(--onyx-color-steel-900)"
|
|
104
|
-
/>
|
|
105
|
-
<path
|
|
106
|
-
d="M1125.828,762.03359c-22.251,8.526-42.0843,9.1622-62.43871-4.975-10.26507-7.12617-19.59089-8.88955-26.58979-8.75618,7.64294-4.04351,32.98449-14.02122,77.9177.42248a18.73921,18.73921,0,0,1,8.54106,5.59715C1125.07908,756.45353,1126.50669,759.15715,1125.828,762.03359Z"
|
|
107
|
-
transform="translate(-31.39089 -100.5)"
|
|
108
|
-
opacity="0.1"
|
|
109
|
-
/>
|
|
110
|
-
<ellipse
|
|
111
|
-
cx="1066.53846"
|
|
112
|
-
cy="654.13477"
|
|
113
|
-
rx="7.87756"
|
|
114
|
-
ry="2.42386"
|
|
115
|
-
fill="var(--onyx-color-steel-200)"
|
|
116
|
-
/>
|
|
117
|
-
<circle cx="835.05948" cy="545.66686" r="11.51335" fill="var(--onyx-color-steel-200)" />
|
|
118
|
-
<polygon
|
|
119
|
-
points="968.978 667.466 968.978 673.526 642.968 673.526 642.968 668.678 643.417 667.466 968.978 667.466"
|
|
120
|
-
opacity="0.1"
|
|
121
|
-
/>
|
|
122
|
-
<rect x="108.60911" y="159" width="208" height="242" fill="var(--onyx-color-steel-900)" />
|
|
123
|
-
<rect x="87.60911" y="135" width="250" height="86" fill="var(--onyx-color-steel-800)" />
|
|
124
|
-
<rect x="87.60911" y="237" width="250" height="86" fill="var(--onyx-color-steel-800)" />
|
|
125
|
-
<rect x="87.60911" y="339" width="250" height="86" fill="var(--onyx-color-steel-800)" />
|
|
126
|
-
<rect
|
|
127
|
-
x="271.60911"
|
|
128
|
-
y="150"
|
|
129
|
-
width="16"
|
|
130
|
-
height="16"
|
|
131
|
-
fill="var(--onyx-color-base-primary-500)"
|
|
132
|
-
opacity="0.4"
|
|
133
|
-
/>
|
|
134
|
-
<rect
|
|
135
|
-
x="294.60911"
|
|
136
|
-
y="150"
|
|
137
|
-
width="16"
|
|
138
|
-
height="16"
|
|
139
|
-
fill="var(--onyx-color-base-primary-500)"
|
|
140
|
-
opacity="0.8"
|
|
141
|
-
/>
|
|
142
|
-
<rect x="317.60911" y="150" width="16" height="16" fill="var(--onyx-color-base-primary-500)" />
|
|
143
|
-
<rect
|
|
144
|
-
x="271.60911"
|
|
145
|
-
y="251"
|
|
146
|
-
width="16"
|
|
147
|
-
height="16"
|
|
148
|
-
fill="var(--onyx-color-base-primary-500)"
|
|
149
|
-
opacity="0.4"
|
|
150
|
-
/>
|
|
151
|
-
<rect
|
|
152
|
-
x="294.60911"
|
|
153
|
-
y="251"
|
|
154
|
-
width="16"
|
|
155
|
-
height="16"
|
|
156
|
-
fill="var(--onyx-color-base-primary-500)"
|
|
157
|
-
opacity="0.8"
|
|
158
|
-
/>
|
|
159
|
-
<rect x="317.60911" y="251" width="16" height="16" fill="var(--onyx-color-base-primary-500)" />
|
|
160
|
-
<rect
|
|
161
|
-
x="271.60911"
|
|
162
|
-
y="352"
|
|
163
|
-
width="16"
|
|
164
|
-
height="16"
|
|
165
|
-
fill="var(--onyx-color-base-primary-500)"
|
|
166
|
-
opacity="0.4"
|
|
167
|
-
/>
|
|
168
|
-
<rect
|
|
169
|
-
x="294.60911"
|
|
170
|
-
y="352"
|
|
171
|
-
width="16"
|
|
172
|
-
height="16"
|
|
173
|
-
fill="var(--onyx-color-base-primary-500)"
|
|
174
|
-
opacity="0.8"
|
|
175
|
-
/>
|
|
176
|
-
<rect x="317.60911" y="352" width="16" height="16" fill="var(--onyx-color-base-primary-500)" />
|
|
177
|
-
<circle cx="316.60911" cy="538" r="79" fill="var(--onyx-color-steel-900)" />
|
|
178
|
-
<rect x="280.60911" y="600" width="24" height="43" fill="var(--onyx-color-steel-900)" />
|
|
179
|
-
<rect x="328.60911" y="600" width="24" height="43" fill="var(--onyx-color-steel-900)" />
|
|
180
|
-
<ellipse cx="300.60911" cy="643.5" rx="20" ry="7.5" fill="var(--onyx-color-steel-900)" />
|
|
181
|
-
<ellipse cx="348.60911" cy="642.5" rx="20" ry="7.5" fill="var(--onyx-color-steel-900)" />
|
|
182
|
-
<circle cx="318.60911" cy="518" r="27" fill="#fff" />
|
|
183
|
-
<circle cx="318.60911" cy="518" r="9" fill="var(--onyx-color-steel-800)" />
|
|
184
|
-
<path
|
|
185
|
-
d="M271.36733,565.03228c-6.37889-28.56758,14.01185-57.43392,45.544-64.47477s62.2651,10.41,68.644,38.9776-14.51861,39.10379-46.05075,46.14464S277.74622,593.59986,271.36733,565.03228Z"
|
|
186
|
-
transform="translate(-31.39089 -100.5)"
|
|
187
|
-
fill="var(--onyx-color-base-primary-500)"
|
|
188
|
-
/>
|
|
189
|
-
<ellipse
|
|
190
|
-
cx="417.21511"
|
|
191
|
-
cy="611.34365"
|
|
192
|
-
rx="39.5"
|
|
193
|
-
ry="12.40027"
|
|
194
|
-
transform="translate(-238.28665 112.98044) rotate(-23.17116)"
|
|
195
|
-
fill="var(--onyx-color-steel-900)"
|
|
196
|
-
/>
|
|
197
|
-
<ellipse
|
|
198
|
-
cx="269.21511"
|
|
199
|
-
cy="664.34365"
|
|
200
|
-
rx="39.5"
|
|
201
|
-
ry="12.40027"
|
|
202
|
-
transform="translate(-271.07969 59.02084) rotate(-23.17116)"
|
|
203
|
-
fill="var(--onyx-color-steel-900)"
|
|
204
|
-
/>
|
|
205
|
-
<path
|
|
206
|
-
d="M394,661.5c0,7.732-19.90861,23-42,23s-43-14.268-43-22,20.90861-6,43-6S394,653.768,394,661.5Z"
|
|
207
|
-
transform="translate(-31.39089 -100.5)"
|
|
208
|
-
fill="#fff"
|
|
209
|
-
/>
|
|
210
|
-
</svg>
|
|
211
|
-
</template>
|
package/components/NavBar.vue
DELETED
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
<script setup lang="ts">
|
|
2
|
-
import circleContrast from "@sit-onyx/icons/circle-contrast.svg?raw";
|
|
3
|
-
import { extractLinkProps, type ColorSchemeValue } from "sit-onyx";
|
|
4
|
-
|
|
5
|
-
const { onyxDocs } = useAppConfig();
|
|
6
|
-
const router = useRouter();
|
|
7
|
-
const colorMode = useColorMode();
|
|
8
|
-
|
|
9
|
-
const isColorSchemeDialogOpen = ref(false);
|
|
10
|
-
|
|
11
|
-
const colorScheme = computed({
|
|
12
|
-
get: () => {
|
|
13
|
-
return colorMode.preference === "system" ? "auto" : (colorMode.preference as ColorSchemeValue);
|
|
14
|
-
},
|
|
15
|
-
set: (newValue) => {
|
|
16
|
-
colorMode.preference = newValue === "auto" ? "system" : newValue;
|
|
17
|
-
},
|
|
18
|
-
});
|
|
19
|
-
</script>
|
|
20
|
-
|
|
21
|
-
<template>
|
|
22
|
-
<OnyxNavBar v-bind="onyxDocs.nav" @navigate-back="router.back">
|
|
23
|
-
<NavItem
|
|
24
|
-
v-for="item in onyxDocs.nav?.items"
|
|
25
|
-
:key="extractLinkProps(item.link ?? '').href"
|
|
26
|
-
v-bind="item"
|
|
27
|
-
/>
|
|
28
|
-
|
|
29
|
-
<template #contextArea>
|
|
30
|
-
<OnyxIconButton
|
|
31
|
-
label="Toggle color scheme"
|
|
32
|
-
:icon="circleContrast"
|
|
33
|
-
color="neutral"
|
|
34
|
-
@click="isColorSchemeDialogOpen = true"
|
|
35
|
-
/>
|
|
36
|
-
</template>
|
|
37
|
-
|
|
38
|
-
<OnyxColorSchemeDialog
|
|
39
|
-
v-model="colorScheme"
|
|
40
|
-
:open="isColorSchemeDialogOpen"
|
|
41
|
-
@close="isColorSchemeDialogOpen = false"
|
|
42
|
-
/>
|
|
43
|
-
</OnyxNavBar>
|
|
44
|
-
</template>
|
package/components/NavItem.vue
DELETED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
<script lang="ts" setup>
|
|
2
|
-
import type { NavItem } from "../app.config";
|
|
3
|
-
|
|
4
|
-
const props = defineProps<NavItem>();
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* Same as `props` but without the `children` property to prevent console warnings when using `v-bind`.
|
|
8
|
-
*/
|
|
9
|
-
const navItemProps = computed(() => {
|
|
10
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
11
|
-
const { children, ...rest } = props;
|
|
12
|
-
return rest;
|
|
13
|
-
});
|
|
14
|
-
</script>
|
|
15
|
-
|
|
16
|
-
<template>
|
|
17
|
-
<OnyxNavItem v-bind="navItemProps">
|
|
18
|
-
<template v-if="props.children?.length" #children>
|
|
19
|
-
<NavItem v-for="child in props.children" :key="child.label" v-bind="child" />
|
|
20
|
-
</template>
|
|
21
|
-
</OnyxNavItem>
|
|
22
|
-
</template>
|
package/error.vue
DELETED
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
<script setup lang="ts">
|
|
2
|
-
import type { NuxtError } from "#app";
|
|
3
|
-
import App from "./app.vue";
|
|
4
|
-
|
|
5
|
-
const props = defineProps<{
|
|
6
|
-
error: NuxtError;
|
|
7
|
-
}>();
|
|
8
|
-
|
|
9
|
-
const handleError = () => clearError({ redirect: "/" });
|
|
10
|
-
</script>
|
|
11
|
-
|
|
12
|
-
<template>
|
|
13
|
-
<App>
|
|
14
|
-
<div class="error">
|
|
15
|
-
<ErrorSVG :title="props.error.message" />
|
|
16
|
-
|
|
17
|
-
<div class="error__headline">
|
|
18
|
-
<OnyxHeadline is="h1">{{ props.error.message }}</OnyxHeadline>
|
|
19
|
-
<OnyxButton label="Back to home" @click="handleError" />
|
|
20
|
-
</div>
|
|
21
|
-
|
|
22
|
-
<OnyxAccordion>
|
|
23
|
-
<OnyxAccordionItem value="details">
|
|
24
|
-
<template #header>Technical error details</template>
|
|
25
|
-
<pre class="error__details">{{ props.error }}</pre>
|
|
26
|
-
</OnyxAccordionItem>
|
|
27
|
-
</OnyxAccordion>
|
|
28
|
-
</div>
|
|
29
|
-
</App>
|
|
30
|
-
</template>
|
|
31
|
-
|
|
32
|
-
<style lang="scss" scoped>
|
|
33
|
-
.error {
|
|
34
|
-
display: flex;
|
|
35
|
-
flex-direction: column;
|
|
36
|
-
align-items: center;
|
|
37
|
-
gap: var(--onyx-density-3xl);
|
|
38
|
-
|
|
39
|
-
&__image {
|
|
40
|
-
width: 32rem;
|
|
41
|
-
display: block;
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
&__headline {
|
|
45
|
-
display: flex;
|
|
46
|
-
flex-direction: column;
|
|
47
|
-
align-items: center;
|
|
48
|
-
gap: var(--onyx-density-md);
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
&__details {
|
|
52
|
-
white-space: pre-wrap;
|
|
53
|
-
overflow-wrap: anywhere;
|
|
54
|
-
font-family: var(--onyx-font-family-mono);
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
</style>
|
package/layouts/default.vue
DELETED
package/pages/[...path].vue
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
<script setup lang="ts">
|
|
2
|
-
const route = useRoute();
|
|
3
|
-
const collection = await useAsyncData(() => queryCollection("content").path(route.path).first());
|
|
4
|
-
|
|
5
|
-
if (!collection.data.value) {
|
|
6
|
-
throw createError({
|
|
7
|
-
message: "Page not found",
|
|
8
|
-
statusCode: 404,
|
|
9
|
-
});
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
const data = toRef(() => collection.data.value!);
|
|
13
|
-
useSeoMeta({ ...data.value.seo });
|
|
14
|
-
</script>
|
|
15
|
-
|
|
16
|
-
<!-- eslint-disable-next-line vue/no-root-v-if -- the v-if here is theoretically not needed because we throw above it ifs undefined so the user will be redirected to the error page. However, there is still a console warning so we include the v-if here to prevent it. -->
|
|
17
|
-
<template>
|
|
18
|
-
<ContentRenderer v-if="data" :value="data" />
|
|
19
|
-
</template>
|
package/tsconfig.json
DELETED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|