From 3c0db104878b182fc29c1f5f8851c4fb19a969d5 Mon Sep 17 00:00:00 2001 From: taskylizard <75871323+taskylizard@users.noreply.github.com> Date: Thu, 29 Aug 2024 11:47:35 +0000 Subject: [PATCH] fix(style): scss, linting, fixes --- .stylelintrc.json | 3 + api/routes/single-page.ts | 8 +- docs/.vitepress/theme/index.ts | 2 +- .../theme/{style.css => style.scss} | 170 +++++++++--------- docs/.vitepress/transformer/constants.ts | 8 +- docs/sandbox.md | 25 +++ package.json | 3 + pnpm-lock.yaml | Bin 222515 -> 241755 bytes 8 files changed, 134 insertions(+), 85 deletions(-) create mode 100644 .stylelintrc.json rename docs/.vitepress/theme/{style.css => style.scss} (72%) create mode 100644 docs/sandbox.md diff --git a/.stylelintrc.json b/.stylelintrc.json new file mode 100644 index 000000000..eff256099 --- /dev/null +++ b/.stylelintrc.json @@ -0,0 +1,3 @@ +{ + "extends": "stylelint-config-standard-scss" +} diff --git a/api/routes/single-page.ts b/api/routes/single-page.ts index ca4d74682..09db0ca61 100644 --- a/api/routes/single-page.ts +++ b/api/routes/single-page.ts @@ -18,7 +18,13 @@ import { fetcher } from 'itty-fetcher' // Look inside tbe docs directory const GITHUB_REPO = 'https://api.github.com/repos/fmhy/FMHYEdit/contents/docs/' -const EXCLUDE_FILES = ['README.md', 'index.md', 'feedback.md', 'posts.md'] +const EXCLUDE_FILES = [ + 'README.md', + 'index.md', + 'feedback.md', + 'posts.md', + 'sandbox.md' +] const EXCLUDE_DIRECTORIES = ['posts/'] interface File { diff --git a/docs/.vitepress/theme/index.ts b/docs/.vitepress/theme/index.ts index 21c490d91..34d677d59 100644 --- a/docs/.vitepress/theme/index.ts +++ b/docs/.vitepress/theme/index.ts @@ -20,7 +20,7 @@ import { loadProgress } from './composables/nprogress' import Layout from './Layout.vue' import Post from './PostLayout.vue' -import './style.css' +import './style.scss' import 'uno.css' import Feedback from './components/Feedback.vue' diff --git a/docs/.vitepress/theme/style.css b/docs/.vitepress/theme/style.scss similarity index 72% rename from docs/.vitepress/theme/style.css rename to docs/.vitepress/theme/style.scss index 1e30d5cdd..60e1b0895 100644 --- a/docs/.vitepress/theme/style.css +++ b/docs/.vitepress/theme/style.scss @@ -24,19 +24,22 @@ :root { --vp-c-bg-mark: rgb(232, 232, 232); /* Colors: Custom Block */ + /** Info */ --vp-custom-block-info-bg: theme('colors.swarm.100'); --vp-custom-block-info-border: theme('colors.swarm.800'); --vp-custom-block-info-text: theme('colors.swarm.800'); --vp-custom-block-info-text-deep: theme('colors.swarm.900'); + /** Tip */ --vp-custom-block-tip-bg: theme('colors.meadow.100'); --vp-custom-block-tip-border: theme('colors.meadow.800'); --vp-custom-block-tip-text: theme('colors.meadow.800'); --vp-custom-block-tip-text-deep: theme('colors.meadow.900'); - --vp-custom-block-warning-bg: rgba(253, 224, 71, 0.1); - --vp-custom-block-warning-border: rgba(202, 138, 4, 1); - --vp-custom-block-warning-text: rgba(234, 179, 8, 1); - --vp-custom-block-warning-text-deep: rgba(250, 204, 21, 1); - --vp-custom-block-danger-bg: theme('colors.carnation.100'); + /** Warning */ + --vp-custom-block-warning-bg: theme('colors.merlin.100'), + --vp-custom-block-warning-border: theme('colors.merlin.800'), + --vp-custom-block-warning-text: theme('colors.merlin.800'), + --vp-custom-block-warning-text-deep: theme('colors.merlin.900'), + /** Danger */ --vp-custom-block-danger-bg: theme('colors.carnation.100'); --vp-custom-block-danger-border: theme('colors.carnation.800'); --vp-custom-block-danger-text: theme('colors.carnation.800'); --vp-custom-block-danger-text-deep: theme('colors.carnation.900'); @@ -55,22 +58,26 @@ .dark { --vp-c-bg-elv: rgba(23, 23, 23, 0.8); /* Colors: Custom Block */ + /** Info */ --vp-custom-block-info-bg: theme('colors.swarm.950'); - --vp-custom-block-info-border: theme('colors.swarm.600'); - --vp-custom-block-info-text: theme('colors.swarm.500'); - --vp-custom-block-info-text-deep: theme('colors.swarm.600'); + --vp-custom-block-info-border: theme('colors.swarm.800'); + --vp-custom-block-info-text: theme('colors.swarm.200'); + --vp-custom-block-info-text-deep: theme('colors.swarm.200'); + /** Tip */ --vp-custom-block-tip-bg: theme('colors.meadow.950'); - --vp-custom-block-tip-border: theme('colors.meadow.600'); - --vp-custom-block-tip-text: theme('colors.meadow.500'); - --vp-custom-block-tip-text-deep: theme('colors.meadow.600'); - --vp-custom-block-warning-bg: rgba(253, 224, 71, 0.1); - --vp-custom-block-warning-border: rgba(202, 138, 4, 1); - --vp-custom-block-warning-text: rgba(234, 179, 8, 1); - --vp-custom-block-warning-text-deep: rgba(250, 204, 21, 1); + --vp-custom-block-tip-border: theme('colors.meadow.800'); + --vp-custom-block-tip-text: theme('colors.meadow.200'); + --vp-custom-block-tip-text-deep: theme('colors.meadow.200'); + /** Warning */ + --vp-custom-block-warning-bg: theme('colors.merlin.950'); + --vp-custom-block-warning-border: theme('colors.merlin.800'); + --vp-custom-block-warning-text: theme('colors.merlin.200'); + --vp-custom-block-warning-text-deep: theme('colors.merlin.200'); + /** Danger */ --vp-custom-block-danger-bg: theme('colors.carnation.950'); - --vp-custom-block-danger-border: theme('colors.carnation.600'); - --vp-custom-block-danger-text: theme('colors.carnation.400'); - --vp-custom-block-danger-text-deep: theme('colors.carnation.500'); + --vp-custom-block-danger-border: theme('colors.carnation.800'); + --vp-custom-block-danger-text: theme('colors.carnation.200'); + --vp-custom-block-danger-text-deep: theme('colors.carnation.200'); } .vp-doc a { @@ -81,12 +88,12 @@ .vp-doc a { text-decoration-color: transparent; -webkit-text-decoration-color: transparent; transition: text-decoration-color 0.25s; -} -.vp-doc a:hover { - color: var(--vp-c-brand-1); - text-decoration-color: var(--vp-c-brand-1); - -webkit-text-decoration-color: var(--vp-c-brand-1); + &:hover { + color: var(--vp-c-brand-1); + text-decoration-color: var(--vp-c-brand-1); + -webkit-text-decoration-color: var(--vp-c-brand-1); + } } .vp-doc .custom-block a { @@ -97,10 +104,10 @@ .vp-doc .custom-block a { ::selection { background-color: #5586a6; -} -.dark ::selection { - background-color: #0f2c47; + .dark & { + background-color: #0f2c47; + } } .VPFooter a { @@ -108,13 +115,13 @@ .VPFooter a { text-decoration-style: dashed; text-underline-offset: 5px; transition: 0.3s; -} -.VPFooter a:hover { - color: var(--vp-c-text-1); - text-decoration-line: underline; - text-decoration-style: dashed; - text-underline-offset: 5px; + &:hover { + color: var(--vp-c-text-1); + text-decoration-line: underline; + text-decoration-style: dashed; + text-underline-offset: 5px; + } } /* Custom scrollbar */ @@ -165,57 +172,56 @@ .base64 { /* Make clicks pass-through */ #nprogress { pointer-events: none; + + & .bar { + background: var(--vp-c-brand-1); + position: fixed; + z-index: 1031; + top: 0; + left: 0; + width: 100%; + height: 2px; + } + + /* Fancy blur effect */ + & .peg { + display: block; + position: absolute; + right: 0px; + width: 100px; + height: 100%; + box-shadow: + 0 0 10px var(--vp-c-brand-1), + 0 0 5px var(--vp-c-brand-1); + opacity: 1; + + -webkit-transform: rotate(3deg) translate(0px, -4px); + -ms-transform: rotate(3deg) translate(0px, -4px); + transform: rotate(3deg) translate(0px, -4px); + } + + & .spinner { + display: block; + position: fixed; + z-index: 1031; + top: 15px; + right: 15px; + } + + & .spinner-icon { + width: 18px; + height: 18px; + box-sizing: border-box; + + border: solid 2px transparent; + border-top-color: var(--vp-c-brand); + border-left-color: var(--vp-c-brand); + border-radius: 50%; + + -webkit-animation: nprogress-spinner 400ms linear infinite; + animation: nprogress-spinner 400ms linear infinite; + } } - -#nprogress .bar { - background: var(--vp-c-brand-1); - position: fixed; - z-index: 1031; - top: 0; - left: 0; - width: 100%; - height: 2px; -} - -/* Fancy blur effect */ -#nprogress .peg { - display: block; - position: absolute; - right: 0px; - width: 100px; - height: 100%; - box-shadow: - 0 0 10px var(--vp-c-brand-1), - 0 0 5px var(--vp-c-brand-1); - opacity: 1; - - -webkit-transform: rotate(3deg) translate(0px, -4px); - -ms-transform: rotate(3deg) translate(0px, -4px); - transform: rotate(3deg) translate(0px, -4px); -} - -#nprogress .spinner { - display: block; - position: fixed; - z-index: 1031; - top: 15px; - right: 15px; -} - -#nprogress .spinner-icon { - width: 18px; - height: 18px; - box-sizing: border-box; - - border: solid 2px transparent; - border-top-color: var(--vp-c-brand); - border-left-color: var(--vp-c-brand); - border-radius: 50%; - - -webkit-animation: nprogress-spinner 400ms linear infinite; - animation: nprogress-spinner 400ms linear infinite; -} - .nprogress-custom-parent { overflow: hidden; position: relative; diff --git a/docs/.vitepress/transformer/constants.ts b/docs/.vitepress/transformer/constants.ts index e8e165588..ba58381e8 100644 --- a/docs/.vitepress/transformer/constants.ts +++ b/docs/.vitepress/transformer/constants.ts @@ -132,7 +132,13 @@ export const headers: Header = { } } as const -export const excluded = ['readme.md', 'single-page', 'feedback.md', 'index.md'] +export const excluded = [ + 'readme.md', + 'single-page', + 'feedback.md', + 'index.md', + 'sandbox.md' +] export function getHeader(id: string) { const title = diff --git a/docs/sandbox.md b/docs/sandbox.md new file mode 100644 index 000000000..e87ae9912 --- /dev/null +++ b/docs/sandbox.md @@ -0,0 +1,25 @@ +--- +title: Sandbox +--- + +### Sandbox + +:::info +Testing info +::: + +:::tip +Testing tip +::: + +:::warning +Testing warning +::: + +:::danger +Testing danger +::: + +:::details +Testing details +::: diff --git a/package.json b/package.json index a5d514b5d..9afbd34d3 100644 --- a/package.json +++ b/package.json @@ -52,6 +52,9 @@ "prettier": "^3.3.3", "prettier-plugin-pkgsort": "^0.2.1", "prettier-plugin-tailwindcss": "^0.6.6", + "sass": "^1.77.8", + "stylelint": "^16.9.0", + "stylelint-config-standard-scss": "^13.1.0", "unplugin-auto-import": "^0.18.2", "wrangler": "^3.68.0" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7759830fb5495533e50b030ca3151d3577ca9d15..79818ea82366410e220eaf26094500d78c9f1e7b 100644 GIT binary patch delta 13654 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