diff --git a/.gitignore b/.gitignore index a31bd53..d54cfae 100644 --- a/.gitignore +++ b/.gitignore @@ -13,6 +13,7 @@ data/*.csv coverage.xml testResults.xml -# Ignore NodeJS stuff +# docs / vitepress related ignores node_modules docs/.vitepress/cache +docs/.vitepress/dist diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000..f47cb6c --- /dev/null +++ b/.prettierrc @@ -0,0 +1,10 @@ +{ + "arrowParens": "always", + "bracketSpacing": true, + "editorconfig": true, + "printWidth": 116, + "semi": false, + "singleQuote": true, + "trailingComma": "all", + "vueIndentScriptAndStyle": true +} diff --git a/.vscode/settings.json b/.vscode/settings.json index ed6e551..5bdb13c 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -6,9 +6,7 @@ "editor.renderWhitespace": "boundary", "editor.formatOnSave": true, "editor.formatOnType": true, - "editor.rulers": [ - 116 - ], + "editor.rulers": [116], // powershell general "powershell.startAutomatically": true, "powershell.enableProfileLoading": true, @@ -67,5 +65,9 @@ "addWords": true }, "custom": true + }, + "editor.defaultFormatter": "esbenp.prettier-vscode", + "[javascript]": { + "editor.defaultFormatter": "esbenp.prettier-vscode" } } diff --git a/bun.lockb b/bun.lockb new file mode 100755 index 0000000..ee756bd Binary files /dev/null and b/bun.lockb differ diff --git a/docs/.vitepress/config.mjs b/docs/.vitepress/config.mjs new file mode 100644 index 0000000..0a362c6 --- /dev/null +++ b/docs/.vitepress/config.mjs @@ -0,0 +1,26 @@ +import { defineConfig } from 'vitepress' + +import { repository, version } from '../../package.json' +import navbar from './navbar.mjs' +import { SidebarItems } from './sidebar.mjs' + +// https://vitepress.dev/reference/site-config +export default defineConfig({ + title: 'Arkanum', + titleTemplate: '🧙 Arkanum', + description: 'An opinionated Code-Server distribution.', + head: [['link', { rel: 'icon', href: '/favicon.png' }]], + cleanUrls: true, + appearance: 'dark', + markdown: { + image: { + lazyLoading: true, + }, + }, + themeConfig: { + // https://vitepress.dev/reference/default-theme-config + nav: navbar.getItems(version), + sidebar: SidebarItems, + socialLinks: [{ icon: 'github', link: 'https://github.com/vuejs/vitepress' }], + }, +}) diff --git a/docs/.vitepress/navbar.mjs b/docs/.vitepress/navbar.mjs new file mode 100644 index 0000000..3ace41e --- /dev/null +++ b/docs/.vitepress/navbar.mjs @@ -0,0 +1,27 @@ +function getItems(version) { + const ci = process.env.ci + const pr = process.env.CI_COMMIT_PULL_REQUEST + + let nver = undefined + + if (ci === 'woodpecker') { + if (pr !== null) { + nver = `${version}#${pr}` + } + } else { + nver = version + } + + return [ + { text: 'Home', link: '/' }, + { text: 'Examples', link: '/markdown-examples' }, + { + text: nver, + items: [{ text: 'Changelog', link: '/changelog' }], + }, + ] +} + +export default { + getItems, +} diff --git a/docs/.vitepress/sidebar.mjs b/docs/.vitepress/sidebar.mjs new file mode 100644 index 0000000..1936170 --- /dev/null +++ b/docs/.vitepress/sidebar.mjs @@ -0,0 +1,7 @@ +export const SidebarItems = { + text: 'Examples', + items: [ + { text: 'Markdown Examples', link: '/markdown-examples' }, + { text: 'Runtime API Examples', link: '/api-examples' }, + ], +} diff --git a/docs/.vitepress/theme/index.js b/docs/.vitepress/theme/index.js new file mode 100644 index 0000000..8ecf163 --- /dev/null +++ b/docs/.vitepress/theme/index.js @@ -0,0 +1,17 @@ +// https://vitepress.dev/guide/custom-theme +import { h } from 'vue' +import DefaultTheme from 'vitepress/theme' +import './style.css' + +/** @type {import('vitepress').Theme} */ +export default { + extends: DefaultTheme, + Layout: () => { + return h(DefaultTheme.Layout, null, { + // https://vitepress.dev/guide/extending-default-theme#layout-slots + }) + }, + enhanceApp({ app, router, siteData }) { + // ... + } +} diff --git a/docs/.vitepress/theme/style.css b/docs/.vitepress/theme/style.css new file mode 100644 index 0000000..d63aee8 --- /dev/null +++ b/docs/.vitepress/theme/style.css @@ -0,0 +1,139 @@ +/** + * Customize default theme styling by overriding CSS variables: + * https://github.com/vuejs/vitepress/blob/main/src/client/theme-default/styles/vars.css + */ + +/** + * Colors + * + * Each colors have exact same color scale system with 3 levels of solid + * colors with different brightness, and 1 soft color. + * + * - `XXX-1`: The most solid color used mainly for colored text. It must + * satisfy the contrast ratio against when used on top of `XXX-soft`. + * + * - `XXX-2`: The color used mainly for hover state of the button. + * + * - `XXX-3`: The color for solid background, such as bg color of the button. + * It must satisfy the contrast ratio with pure white (#ffffff) text on + * top of it. + * + * - `XXX-soft`: The color used for subtle background such as custom container + * or badges. It must satisfy the contrast ratio when putting `XXX-1` colors + * on top of it. + * + * The soft color must be semi transparent alpha channel. This is crucial + * because it allows adding multiple "soft" colors on top of each other + * to create a accent, such as when having inline code block inside + * custom containers. + * + * - `default`: The color used purely for subtle indication without any + * special meanings attched to it such as bg color for menu hover state. + * + * - `brand`: Used for primary brand colors, such as link text, button with + * brand theme, etc. + * + * - `tip`: Used to indicate useful information. The default theme uses the + * brand color for this by default. + * + * - `warning`: Used to indicate warning to the users. Used in custom + * container, badges, etc. + * + * - `danger`: Used to show error, or dangerous message to the users. Used + * in custom container, badges, etc. + * -------------------------------------------------------------------------- */ + + :root { + --vp-c-default-1: var(--vp-c-gray-1); + --vp-c-default-2: var(--vp-c-gray-2); + --vp-c-default-3: var(--vp-c-gray-3); + --vp-c-default-soft: var(--vp-c-gray-soft); + + --vp-c-brand-1: var(--vp-c-indigo-1); + --vp-c-brand-2: var(--vp-c-indigo-2); + --vp-c-brand-3: var(--vp-c-indigo-3); + --vp-c-brand-soft: var(--vp-c-indigo-soft); + + --vp-c-tip-1: var(--vp-c-brand-1); + --vp-c-tip-2: var(--vp-c-brand-2); + --vp-c-tip-3: var(--vp-c-brand-3); + --vp-c-tip-soft: var(--vp-c-brand-soft); + + --vp-c-warning-1: var(--vp-c-yellow-1); + --vp-c-warning-2: var(--vp-c-yellow-2); + --vp-c-warning-3: var(--vp-c-yellow-3); + --vp-c-warning-soft: var(--vp-c-yellow-soft); + + --vp-c-danger-1: var(--vp-c-red-1); + --vp-c-danger-2: var(--vp-c-red-2); + --vp-c-danger-3: var(--vp-c-red-3); + --vp-c-danger-soft: var(--vp-c-red-soft); +} + +/** + * Component: Button + * -------------------------------------------------------------------------- */ + +:root { + --vp-button-brand-border: transparent; + --vp-button-brand-text: var(--vp-c-white); + --vp-button-brand-bg: var(--vp-c-brand-3); + --vp-button-brand-hover-border: transparent; + --vp-button-brand-hover-text: var(--vp-c-white); + --vp-button-brand-hover-bg: var(--vp-c-brand-2); + --vp-button-brand-active-border: transparent; + --vp-button-brand-active-text: var(--vp-c-white); + --vp-button-brand-active-bg: var(--vp-c-brand-1); +} + +/** + * Component: Home + * -------------------------------------------------------------------------- */ + +:root { + --vp-home-hero-name-color: transparent; + --vp-home-hero-name-background: -webkit-linear-gradient( + 120deg, + #bd34fe 30%, + #41d1ff + ); + + --vp-home-hero-image-background-image: linear-gradient( + -45deg, + #bd34fe 50%, + #47caff 50% + ); + --vp-home-hero-image-filter: blur(44px); +} + +@media (min-width: 640px) { + :root { + --vp-home-hero-image-filter: blur(56px); + } +} + +@media (min-width: 960px) { + :root { + --vp-home-hero-image-filter: blur(68px); + } +} + +/** + * Component: Custom Block + * -------------------------------------------------------------------------- */ + +:root { + --vp-custom-block-tip-border: transparent; + --vp-custom-block-tip-text: var(--vp-c-text-1); + --vp-custom-block-tip-bg: var(--vp-c-brand-soft); + --vp-custom-block-tip-code-bg: var(--vp-c-brand-soft); +} + +/** + * Component: Algolia + * -------------------------------------------------------------------------- */ + +.DocSearch { + --docsearch-primary-color: var(--vp-c-brand-1) !important; +} + diff --git a/docs/api-examples.md b/docs/api-examples.md new file mode 100644 index 0000000..6bd8bb5 --- /dev/null +++ b/docs/api-examples.md @@ -0,0 +1,49 @@ +--- +outline: deep +--- + +# Runtime API Examples + +This page demonstrates usage of some of the runtime APIs provided by VitePress. + +The main `useData()` API can be used to access site, theme, and page data for the current page. It works in both `.md` and `.vue` files: + +```md + + +## Results + +### Theme Data +
{{ theme }}
+ +### Page Data +
{{ page }}
+ +### Page Frontmatter +
{{ frontmatter }}
+``` + + + +## Results + +### Theme Data +
{{ theme }}
+ +### Page Data +
{{ page }}
+ +### Page Frontmatter +
{{ frontmatter }}
+ +## More + +Check out the documentation for the [full list of runtime APIs](https://vitepress.dev/reference/runtime-api#usedata). diff --git a/docs/changelog.md b/docs/changelog.md new file mode 100644 index 0000000..aa35fef --- /dev/null +++ b/docs/changelog.md @@ -0,0 +1,15 @@ +--- +title: 'Changelog' +description: 'Project changelog' +layout: doc +sidebar: false +aside: right +navbar: true +editLink: false +--- + +::: details +Sourced from automatically generated CHANGELOG.md project file. +::: + + diff --git a/docs/index.md b/docs/index.md new file mode 100644 index 0000000..8b950ca --- /dev/null +++ b/docs/index.md @@ -0,0 +1,25 @@ +--- +# https://vitepress.dev/reference/default-theme-home-page +layout: home + +hero: + name: "Arkanum" + text: "An optionionated Code-Server distribution." + tagline: My great project tagline + actions: + - theme: brand + text: Markdown Examples + link: /markdown-examples + - theme: alt + text: API Examples + link: /api-examples + +features: + - title: Feature A + details: Lorem ipsum dolor sit amet, consectetur adipiscing elit + - title: Feature B + details: Lorem ipsum dolor sit amet, consectetur adipiscing elit + - title: Feature C + details: Lorem ipsum dolor sit amet, consectetur adipiscing elit +--- + diff --git a/docs/markdown-examples.md b/docs/markdown-examples.md new file mode 100644 index 0000000..3ea9aa9 --- /dev/null +++ b/docs/markdown-examples.md @@ -0,0 +1,85 @@ +# Markdown Extension Examples + +This page demonstrates some of the built-in markdown extensions provided by VitePress. + +## Syntax Highlighting + +VitePress provides Syntax Highlighting powered by [Shikiji](https://github.com/antfu/shikiji), with additional features like line-highlighting: + +**Input** + +````md +```js{4} +export default { + data () { + return { + msg: 'Highlighted!' + } + } +} +``` +```` + +**Output** + +```js{4} +export default { + data () { + return { + msg: 'Highlighted!' + } + } +} +``` + +## Custom Containers + +**Input** + +```md +::: info +This is an info box. +::: + +::: tip +This is a tip. +::: + +::: warning +This is a warning. +::: + +::: danger +This is a dangerous warning. +::: + +::: details +This is a details block. +::: +``` + +**Output** + +::: info +This is an info box. +::: + +::: tip +This is a tip. +::: + +::: warning +This is a warning. +::: + +::: danger +This is a dangerous warning. +::: + +::: details +This is a details block. +::: + +## More + +Check out the documentation for the [full list of markdown extensions](https://vitepress.dev/guide/markdown). diff --git a/docs/public/favicon.png b/docs/public/favicon.png new file mode 100644 index 0000000..7c9a5ab Binary files /dev/null and b/docs/public/favicon.png differ diff --git a/docs/public/logo.png b/docs/public/logo.png new file mode 100644 index 0000000..7c9a5ab Binary files /dev/null and b/docs/public/logo.png differ diff --git a/index.ts b/index.ts new file mode 100644 index 0000000..f67b2c6 --- /dev/null +++ b/index.ts @@ -0,0 +1 @@ +console.log("Hello via Bun!"); \ No newline at end of file diff --git a/package.json b/package.json new file mode 100644 index 0000000..d34e027 --- /dev/null +++ b/package.json @@ -0,0 +1,24 @@ +{ + "name": "arkanum-docs", + "version": "1.0.0", + "type": "module", + "repository": { + "type": "git", + "url": "https://gitea.ocram85.com/CodeServer/arkanum.git" + }, + "devDependencies": { + "@types/bun": "latest", + "prettier": "^3.1.1", + "rimraf": "^5.0.5", + "vitepress": "^1.0.0-rc.36" + }, + "peerDependencies": { + "typescript": "^5.0.0" + }, + "scripts": { + "docs:clean": "rimraf docs/.vitepress/dist docs/.vitepress/dist", + "docs:dev": "bun run docs:clean && vitepress dev docs --host --port 1313", + "docs:build": "vitepress build docs", + "docs:preview": "vitepress preview docs" + } +} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..dcd8fc5 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,22 @@ +{ + "compilerOptions": { + "lib": ["ESNext"], + "target": "ESNext", + "module": "ESNext", + "moduleDetection": "force", + "jsx": "react-jsx", + "allowJs": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "verbatimModuleSyntax": true, + "noEmit": true, + + /* Linting */ + "skipLibCheck": true, + "strict": true, + "noFallthroughCasesInSwitch": true, + "forceConsistentCasingInFileNames": true + } +}