diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 0e613f1..3ff05e6 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -68,6 +68,12 @@ jobs: - name: Build Awesome Mac image run: docker image build -t wxmp . + - uses: actions/upload-artifact@v3 + with: + name: webiste + path: | + website/build/** + - name: Tags & Push image (latest) run: | echo "outputs.tag - ${{ steps.changelog.outputs.version }}" @@ -96,4 +102,35 @@ jobs: run: | echo "version: v${{ steps.changelog.outputs.version }}" docker tag ghcr.io/jaywcjlove/wxmp:latest ghcr.io/jaywcjlove/wxmp:${{steps.changelog.outputs.version}} - docker push ghcr.io/jaywcjlove/wxmp:${{steps.changelog.outputs.version}} \ No newline at end of file + docker push ghcr.io/jaywcjlove/wxmp:${{steps.changelog.outputs.version}} + + build_macos: + needs: [build-deploy] + runs-on: macos-latest + timeout-minutes: 30 + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-node@v3 + with: + node-version: 16 + + - run: npm install + - run: npm run hoist + - run: npm run build + + - uses: actions/download-artifact@v3 + with: + name: webiste + path: website/build + + - name: electron-builder install-app-deps + working-directory: electron/app + run: npm run deps + + - run: npm run build:app + + - uses: actions/upload-artifact@v3 + with: + name: tools-macos-zip + path: | + electron/app/dist/*.zip \ No newline at end of file diff --git a/README.md b/README.md index efa0168..4522e71 100644 --- a/README.md +++ b/README.md @@ -19,6 +19,7 @@ - [ ] 支持色盘取色,快速替换文章整体色调 - [x] 支持 URL 参数加载 Markdown 内容。 - [x] 支持 URL 参数选择预览主题。 +- [ ] 使用 electron 生成桌面应用。 ### 支持代码块样式 diff --git a/electron/app/.gitignore b/electron/app/.gitignore new file mode 100644 index 0000000..f7a95c7 --- /dev/null +++ b/electron/app/.gitignore @@ -0,0 +1,2 @@ +dist +website \ No newline at end of file diff --git a/electron/app/assets/entitlements.mac.plist b/electron/app/assets/entitlements.mac.plist new file mode 100644 index 0000000..bb87459 --- /dev/null +++ b/electron/app/assets/entitlements.mac.plist @@ -0,0 +1,8 @@ + + + + + com.apple.security.cs.allow-unsigned-executable-memory + + + \ No newline at end of file diff --git a/electron/app/config.json b/electron/app/config.json new file mode 100644 index 0000000..127e0e9 --- /dev/null +++ b/electron/app/config.json @@ -0,0 +1,35 @@ +{ + "productName": "wxmp", + "appId": "com.wangchujiang.wxmp", + "asar": true, + "directories": { + "output": "dist" + }, + "mac": { + "icon": "tools.icns", + "target": { + "target": "default", + "arch": ["arm64", "x64"] + }, + "category": "public.app-category.developer-tools", + "type": "distribution", + "entitlements": "assets/entitlements.mac.plist", + "entitlementsInherit": "assets/entitlements.mac.plist" + }, + "linux": { + "icon": "tools.icns", + "description": "微信公众号 Markdown 编辑器", + "category": "Development", + "target": ["deb", "rpm"], + "desktop": { + "Name": "Web Tools" + } + }, + "win": { + "icon": "tools.ico", + "target": { + "target": "nsis", + "arch": ["x64", "ia32"] + } + } +} diff --git a/electron/app/icon.icns b/electron/app/icon.icns new file mode 100644 index 0000000..dc203d6 Binary files /dev/null and b/electron/app/icon.icns differ diff --git a/electron/app/icons.iconset/icon_128x128.png b/electron/app/icons.iconset/icon_128x128.png new file mode 100644 index 0000000..84943b2 Binary files /dev/null and b/electron/app/icons.iconset/icon_128x128.png differ diff --git a/electron/app/icons.iconset/icon_128x128@2x.png b/electron/app/icons.iconset/icon_128x128@2x.png new file mode 100644 index 0000000..0e35702 Binary files /dev/null and b/electron/app/icons.iconset/icon_128x128@2x.png differ diff --git a/electron/app/icons.iconset/icon_16x16.png b/electron/app/icons.iconset/icon_16x16.png new file mode 100644 index 0000000..9dc5a2e Binary files /dev/null and b/electron/app/icons.iconset/icon_16x16.png differ diff --git a/electron/app/icons.iconset/icon_16x16@2x.png b/electron/app/icons.iconset/icon_16x16@2x.png new file mode 100644 index 0000000..54d9889 Binary files /dev/null and b/electron/app/icons.iconset/icon_16x16@2x.png differ diff --git a/electron/app/icons.iconset/icon_256x256.png b/electron/app/icons.iconset/icon_256x256.png new file mode 100644 index 0000000..0e35702 Binary files /dev/null and b/electron/app/icons.iconset/icon_256x256.png differ diff --git a/electron/app/icons.iconset/icon_256x256@2x.png b/electron/app/icons.iconset/icon_256x256@2x.png new file mode 100644 index 0000000..fed7da8 Binary files /dev/null and b/electron/app/icons.iconset/icon_256x256@2x.png differ diff --git a/electron/app/icons.iconset/icon_32x32.png b/electron/app/icons.iconset/icon_32x32.png new file mode 100644 index 0000000..54d9889 Binary files /dev/null and b/electron/app/icons.iconset/icon_32x32.png differ diff --git a/electron/app/icons.iconset/icon_32x32@2x.png b/electron/app/icons.iconset/icon_32x32@2x.png new file mode 100644 index 0000000..bee588d Binary files /dev/null and b/electron/app/icons.iconset/icon_32x32@2x.png differ diff --git a/electron/app/icons.iconset/icon_512x512.png b/electron/app/icons.iconset/icon_512x512.png new file mode 100644 index 0000000..fed7da8 Binary files /dev/null and b/electron/app/icons.iconset/icon_512x512.png differ diff --git a/electron/app/icons.iconset/icon_512x512@2x.png b/electron/app/icons.iconset/icon_512x512@2x.png new file mode 100644 index 0000000..8ac194c Binary files /dev/null and b/electron/app/icons.iconset/icon_512x512@2x.png differ diff --git a/electron/app/logo.png b/electron/app/logo.png new file mode 100644 index 0000000..fed7da8 Binary files /dev/null and b/electron/app/logo.png differ diff --git a/electron/app/main.js b/electron/app/main.js new file mode 100644 index 0000000..721418a --- /dev/null +++ b/electron/app/main.js @@ -0,0 +1,15 @@ +const path = require('path'); +const { App } = require('@wcj/wxmp-main'); + +(async () => { + const options = {}; + if (process.env.NODE_ENV === 'development') { + options.preload = require.resolve('@wcj/wxmp-preload'); + options.webpath = require.resolve('website/build/index.html'); + } else { + options.preload = path.resolve(__dirname, 'website/index.js'); + options.webpath = 'website/index.html'; + } + const app = new App(); + await app.createWindow(options); +})(); diff --git a/electron/app/package.json b/electron/app/package.json new file mode 100644 index 0000000..9fc91ea --- /dev/null +++ b/electron/app/package.json @@ -0,0 +1,30 @@ +{ + "name": "wxmp", + "description": "微信公众号 Markdown 编辑器", + "homepage": "https://github.com/jaywcjlove/wxmp.git", + "version": "2.1.0", + "main": "main.js", + "author": "Kenny Wong <398188662@qq.com>", + "private": true, + "scripts": { + "deps": "electron-builder install-app-deps", + "start": "cross-env NODE_ENV=development ELECTRON_DISABLE_SECURITY_WARNINGS=true electron .", + "start:production": "cross-env NODE_ENV=production ELECTRON_DISABLE_SECURITY_WARNINGS=true electron .", + "dist-win32": "electron-builder --win --ia32 --config config.json", + "dist-win64": "electron-builder --win --x64 --config config.json", + "dist-mac": "electron-builder --mac --universal --config config.json", + "dist-linux": "electron-builder --linux --config config.json", + "copy": "cpy './node_modules/@wcj/wxmp-preload/lib/*.js' './node_modules/website/build/**' website", + "build": "npm run copy && cross-env NODE_ENV=production electron-builder build --publish=never --config config.json" + }, + "dependencies": { + "@wcj/wxmp-main": "2.1.0" + }, + "devDependencies": { + "@wcj/wxmp-preload": "2.1.0", + "cpy-cli": "4.1.0", + "electron": "19.0.5", + "electron-builder": "23.1.0", + "website": "2.1.0" + } +} diff --git a/electron/main/.gitignore b/electron/main/.gitignore new file mode 100644 index 0000000..7951405 --- /dev/null +++ b/electron/main/.gitignore @@ -0,0 +1 @@ +lib \ No newline at end of file diff --git a/electron/main/package.json b/electron/main/package.json new file mode 100644 index 0000000..f8937f5 --- /dev/null +++ b/electron/main/package.json @@ -0,0 +1,16 @@ +{ + "name": "@wcj/wxmp-main", + "version": "2.1.0", + "main": "./lib/index.js", + "private": true, + "scripts": { + "build": "tsbb build --disable-babel --file-names src/index.ts", + "watch": "tsbb watch --disable-babel --file-names src/index.ts" + }, + "files": [ + "lib" + ], + "devDependencies": { + "electron": "19.0.5" + } +} diff --git a/electron/main/src/Menu.ts b/electron/main/src/Menu.ts new file mode 100644 index 0000000..cab5a9d --- /dev/null +++ b/electron/main/src/Menu.ts @@ -0,0 +1,56 @@ +import { app, Menu, MenuItem, MenuItemConstructorOptions } from 'electron'; +const isMac = process.platform === 'darwin'; +const template = [ + // { role: 'appMenu' } + ...(isMac + ? [ + { + label: app.name, + submenu: [ + { role: 'about' }, + { type: 'separator' }, + { role: 'services' }, + { type: 'separator' }, + { role: 'hide' }, + { role: 'hideOthers' }, + { role: 'unhide' }, + { type: 'separator' }, + { role: 'quit' }, + ], + }, + ] + : []), + { role: 'editMenu' }, + { + label: 'Window', + submenu: [ + { role: 'minimize' }, + { role: 'zoom' }, + ...(isMac + ? [{ type: 'separator' }, { role: 'front' }, { type: 'separator' }, { role: 'window' }] + : [{ role: 'close' }]), + ], + }, + { + role: 'help', + submenu: [ + { + label: 'Open Source for Github', + click: async () => { + const { shell } = require('electron'); + await shell.openExternal('https://github.com/jaywcjlove/wxmp'); + }, + }, + { + label: 'Online Website', + click: async () => { + const { shell } = require('electron'); + await shell.openExternal('https://jaywcjlove.github.io/wxmp'); + }, + }, + ], + }, +]; + +const menu = Menu.buildFromTemplate(template as Array); +Menu.setApplicationMenu(menu); diff --git a/electron/main/src/app.ts b/electron/main/src/app.ts new file mode 100644 index 0000000..a57c214 --- /dev/null +++ b/electron/main/src/app.ts @@ -0,0 +1,60 @@ +import { app, shell, BrowserWindow } from 'electron'; +import './Menu'; + +export interface Options extends Electron.BrowserWindowConstructorOptions { + preload?: string; + webpath?: string; +} + +export class App { + app = app; + win?: BrowserWindow; + isLogin: boolean = false; + /** 创建主进程窗口 */ + async createWindow(options: Options = {}, loadURL?: string) { + await app.whenReady(); + const opts: Options = { + titleBarStyle: 'hidden', // 无标题栏 + frame: false, // 创建无边窗口 + width: 800, + height: 600, + minWidth: 850, + center: true, + maximizable: true, + minimizable: true, + resizable: true, + webPreferences: { + // 多线程 + nodeIntegrationInWorker: true, + nodeIntegration: true, + contextIsolation: false, + }, + ...options, + }; + if (options.preload) { + opts.webPreferences.preload = options.preload; + } + + this.win = new BrowserWindow(opts); + if (process.env.NODE_ENV === 'development') { + this.win.loadURL(loadURL || 'http://localhost:3000/'); + // 打开开发者工具,默认不打开 + this.win.webContents.openDevTools(); + } else { + this.win.loadFile(options.webpath); + } + this.win.webContents.setWindowOpenHandler(({ url }) => { + if (/^https?:\/\//.test(url)) { + shell.openExternal(url); + return { action: 'deny' }; + } + return { + action: 'allow', + overrideBrowserWindowOptions: { + modal: true, + }, + }; + }); + return this.win; + } +} diff --git a/electron/main/src/index.ts b/electron/main/src/index.ts new file mode 100644 index 0000000..665a3d9 --- /dev/null +++ b/electron/main/src/index.ts @@ -0,0 +1 @@ +export * from './app'; diff --git a/electron/main/tsconfig.json b/electron/main/tsconfig.json new file mode 100644 index 0000000..8cf0e02 --- /dev/null +++ b/electron/main/tsconfig.json @@ -0,0 +1,19 @@ +{ + "compilerOptions": { + "module": "commonjs", + "esModuleInterop": true, + "declaration": true, + "target": "es2017", + "noImplicitAny": true, + "resolveJsonModule": true, + "moduleResolution": "node", + "emitDecoratorMetadata": true, + "experimentalDecorators": true, + "sourceMap": false, + "strict": false, + "skipLibCheck": true, + "outDir": "lib", + "baseUrl": "." + }, + "include": ["src"] +} diff --git a/electron/preload/.gitignore b/electron/preload/.gitignore new file mode 100644 index 0000000..7951405 --- /dev/null +++ b/electron/preload/.gitignore @@ -0,0 +1 @@ +lib \ No newline at end of file diff --git a/electron/preload/package.json b/electron/preload/package.json new file mode 100644 index 0000000..162b366 --- /dev/null +++ b/electron/preload/package.json @@ -0,0 +1,16 @@ +{ + "name": "@wcj/wxmp-preload", + "version": "2.1.0", + "main": "./lib/index.js", + "private": true, + "scripts": { + "build": "tsbb build --disable-babel --file-names src/index.ts", + "watch": "tsbb watch --disable-babel --file-names src/index.ts" + }, + "files": [ + "lib" + ], + "devDependencies": { + "electron": "19.0.5" + } +} diff --git a/electron/preload/src/index.ts b/electron/preload/src/index.ts new file mode 100644 index 0000000..250951f --- /dev/null +++ b/electron/preload/src/index.ts @@ -0,0 +1,24 @@ +const styleStr = `.siderbar { + -webkit-app-region: drag; +} +.siderbar header h1 a, github-corners { + display: none; +} +article.content:before { + -webkit-app-region: drag; + position: absolute; + content: ' '; + display: block; + height: 41px; + width: 100%; + z-index: -1; +}`; + +document.addEventListener('DOMContentLoaded', () => { + const head = document.querySelector('head'); + const style = document.createElement('style'); + style.textContent = styleStr; + if (head) { + head.append(style); + } +}); diff --git a/electron/preload/tsconfig.json b/electron/preload/tsconfig.json new file mode 100644 index 0000000..019cf69 --- /dev/null +++ b/electron/preload/tsconfig.json @@ -0,0 +1,27 @@ +{ + "compilerOptions": { + "module": "commonjs", + "esModuleInterop": true, + "declaration": true, + "target": "es5", + "lib": ["dom", "dom.iterable", "esnext"], + "allowJs": true, + "skipLibCheck": true, + "sourceMap": false, + "noImplicitAny": true, + "resolveJsonModule": true, + "moduleResolution": "node", + "emitDecoratorMetadata": true, + "experimentalDecorators": true, + "allowSyntheticDefaultImports": true, + "strict": true, + "outDir": "lib", + "baseUrl": "." + // "esModuleInterop": true, + // "allowSyntheticDefaultImports": true, + // "forceConsistentCasingInFileNames": true, + // "noFallthroughCasesInSwitch": true, + // "isolatedModules": false, + }, + "include": ["src"] +} diff --git a/lerna.json b/lerna.json new file mode 100644 index 0000000..4e74fe0 --- /dev/null +++ b/lerna.json @@ -0,0 +1,4 @@ +{ + "version": "2.1.0", + "packages": ["website", "electron/*"] +} diff --git a/package.json b/package.json index 381b890..72d0030 100644 --- a/package.json +++ b/package.json @@ -1,82 +1,34 @@ { - "name": "website", - "version": "2.1.0", "private": true, "scripts": { - "start": "kkt start", - "build": "kkt build", + "build": "lerna exec --scope @wcj/* --ignore wxmp -- npm run build", + "doc": "npm run-script build --workspace website", + "start": "npm run-script start --workspace website", + "build:app": "npm run-script build --workspace wxmp", + "⬆️⬆️⬆️⬆️⬆️ package ⬆️⬆️⬆️⬆️⬆️": "▲▲▲▲▲ package ▲▲▲▲▲", + "version": "lerna version --exact --force-publish --no-push --no-git-tag-version", "prepare": "husky install", "prettier": "prettier --write '**/*.{js,jsx,tsx,ts,less,md,json}'", - "pretty-quick": "pretty-quick --staged" + "pretty-quick": "pretty-quick --staged", + "hoist": "lerna bootstrap --hoist", + "clean": "lerna clean --yes" }, "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.18.9", - "@tanstack/react-query": "^4.2.3", - "@uiw/codemirror-theme-abcdef": "^4.11.6", - "@uiw/codemirror-theme-androidstudio": "^4.11.6", - "@uiw/codemirror-theme-atomone": "^4.11.6", - "@uiw/codemirror-theme-bbedit": "^4.11.6", - "@uiw/codemirror-theme-bespin": "^4.11.6", - "@uiw/codemirror-theme-darcula": "^4.11.6", - "@uiw/codemirror-theme-dracula": "^4.11.6", - "@uiw/codemirror-theme-duotone": "^4.11.6", - "@uiw/codemirror-theme-eclipse": "^4.11.6", - "@uiw/codemirror-theme-github": "^4.11.6", - "@uiw/codemirror-theme-okaidia": "^4.11.6", - "@uiw/codemirror-theme-sublime": "^4.11.6", - "@uiw/codemirror-theme-xcode": "^4.11.6", - "@uiw/react-back-to-top": "^1.2.0", - "@uiw/react-github-corners": "^1.5.15", - "@uiw/react-markdown-editor": "^5.6.0", - "@wcj/dark-mode": "^1.0.15", - "css-tree": "^2.2.1", - "react": "^18.2.0", - "react-code-preview-layout": "^2.0.4", - "react-dom": "^18.2.0", - "react-hot-toast": "^2.3.0", - "react-router-dom": "^6.3.0", - "rehype-attr": "^2.0.8", - "rehype-ignore": "^1.0.1", - "rehype-prism-plus": "^1.5.0", - "rehype-raw": "^6.1.1", - "rehype-stringify": "^9.0.3", - "remark-gfm": "^3.0.1", - "remark-parse": "^10.0.1", - "remark-rehype": "^10.1.0", - "styled-components": "^5.3.5", - "unified": "^10.1.2" - }, "devDependencies": { - "@kkt/less-modules": "^7.2.0", - "@kkt/raw-modules": "^7.2.0", - "@kkt/scope-plugin-options": "^7.2.0", - "@types/css-tree": "^1.0.7", - "@types/react": "^18.0.17", - "@types/react-dom": "^18.0.6", - "@types/styled-components": "^5.1.25", + "cross-env": "^7.0.3", "husky": "^8.0.1", - "kkt": "^7.2.0", - "markdown-react-code-preview-loader": "^2.1.2", + "lerna": "5.3.0", "prettier": "^2.7.1", - "pretty-quick": "~3.1.3" + "pretty-quick": "~3.1.3", + "tsbb": "^3.7.5" }, - "eslintConfig": { - "extends": [ - "react-app", - "react-app/jest" + "workspaces": { + "packages": [ + "electron/**", + "website" ] }, - "browserslist": { - "production": [ - ">0.2%", - "not dead", - "not op_mini all" - ], - "development": [ - "last 1 chrome version", - "last 1 firefox version", - "last 1 safari version" - ] + "engines": { + "node": ">=16.0.0" } } diff --git a/.kktrc.ts b/website/.kktrc.ts similarity index 83% rename from .kktrc.ts rename to website/.kktrc.ts index e08e83f..2a1c057 100644 --- a/.kktrc.ts +++ b/website/.kktrc.ts @@ -1,8 +1,7 @@ -import path from 'path'; import webpack, { Configuration } from 'webpack'; import lessModules from '@kkt/less-modules'; import { mdCodeModulesLoader } from 'markdown-react-code-preview-loader'; -import scopePluginOptions from '@kkt/scope-plugin-options'; +import { disableScopePlugin } from '@kkt/scope-plugin-options'; import { LoaderConfOptions } from 'kkt'; import raw from '@kkt/raw-modules'; import pkg from './package.json'; @@ -14,10 +13,7 @@ export default (conf: Configuration, env: 'development' | 'production', options: ...options, test: /\.(md.css)$/i, }); - conf = scopePluginOptions(conf, env, { - ...options, - allowedFiles: [path.resolve(process.cwd(), 'README.md'), path.resolve(process.cwd(), 'src')], - }); + conf = disableScopePlugin(conf); conf.plugins!.push( new webpack.DefinePlugin({ VERSION: JSON.stringify(pkg.version), diff --git a/website/package.json b/website/package.json new file mode 100644 index 0000000..c144c3b --- /dev/null +++ b/website/package.json @@ -0,0 +1,76 @@ +{ + "name": "website", + "version": "2.1.0", + "private": true, + "scripts": { + "start": "kkt start", + "build": "kkt build" + }, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.18.9", + "@tanstack/react-query": "^4.2.3", + "@uiw/codemirror-theme-abcdef": "^4.11.6", + "@uiw/codemirror-theme-androidstudio": "^4.11.6", + "@uiw/codemirror-theme-atomone": "^4.11.6", + "@uiw/codemirror-theme-bbedit": "^4.11.6", + "@uiw/codemirror-theme-bespin": "^4.11.6", + "@uiw/codemirror-theme-darcula": "^4.11.6", + "@uiw/codemirror-theme-dracula": "^4.11.6", + "@uiw/codemirror-theme-duotone": "^4.11.6", + "@uiw/codemirror-theme-eclipse": "^4.11.6", + "@uiw/codemirror-theme-github": "^4.11.6", + "@uiw/codemirror-theme-okaidia": "^4.11.6", + "@uiw/codemirror-theme-sublime": "^4.11.6", + "@uiw/codemirror-theme-xcode": "^4.11.6", + "@uiw/react-back-to-top": "^1.2.0", + "@uiw/react-github-corners": "^1.5.15", + "@uiw/react-markdown-editor": "^5.6.2", + "@wcj/dark-mode": "^1.0.15", + "css-tree": "^2.2.1", + "react": "^18.2.0", + "react-code-preview-layout": "^2.0.4", + "react-dom": "^18.2.0", + "react-hot-toast": "^2.3.0", + "react-router-dom": "^6.3.0", + "rehype-attr": "^2.0.8", + "rehype-ignore": "^1.0.1", + "rehype-prism-plus": "^1.5.0", + "rehype-raw": "^6.1.1", + "rehype-stringify": "^9.0.3", + "remark-gfm": "^3.0.1", + "remark-parse": "^10.0.1", + "remark-rehype": "^10.1.0", + "styled-components": "^5.3.5", + "unified": "^10.1.2" + }, + "devDependencies": { + "@kkt/less-modules": "^7.2.0", + "@kkt/raw-modules": "^7.2.0", + "@kkt/scope-plugin-options": "^7.2.0", + "@types/css-tree": "^1.0.7", + "@types/react": "^18.0.17", + "@types/react-dom": "^18.0.6", + "@types/styled-components": "^5.1.25", + "kkt": "^7.2.0", + "markdown-react-code-preview-loader": "^2.1.2" + }, + "eslintConfig": { + "extends": [ + "react-app", + "react-app/jest" + ] + }, + "browserslist": { + "production": [ + ">0.2%", + "not dead", + "not op_mini all" + ], + "development": [ + "last 1 chrome version", + "last 1 firefox version", + "last 1 safari version" + ] + } +} diff --git a/public/favicon.ico b/website/public/favicon.ico similarity index 100% rename from public/favicon.ico rename to website/public/favicon.ico diff --git a/public/index.html b/website/public/index.html similarity index 100% rename from public/index.html rename to website/public/index.html diff --git a/src/App.tsx b/website/src/App.tsx similarity index 100% rename from src/App.tsx rename to website/src/App.tsx diff --git a/src/assets/color.svg b/website/src/assets/color.svg similarity index 100% rename from src/assets/color.svg rename to website/src/assets/color.svg diff --git a/src/assets/github.svg b/website/src/assets/github.svg similarity index 100% rename from src/assets/github.svg rename to website/src/assets/github.svg diff --git a/src/assets/logo.svg b/website/src/assets/logo.svg similarity index 100% rename from src/assets/logo.svg rename to website/src/assets/logo.svg diff --git a/src/assets/tail-spin.svg b/website/src/assets/tail-spin.svg similarity index 100% rename from src/assets/tail-spin.svg rename to website/src/assets/tail-spin.svg diff --git a/src/commands/copy.tsx b/website/src/commands/copy.tsx similarity index 100% rename from src/commands/copy.tsx rename to website/src/commands/copy.tsx diff --git a/src/commands/css.tsx b/website/src/commands/css.tsx similarity index 100% rename from src/commands/css.tsx rename to website/src/commands/css.tsx diff --git a/src/commands/theme.tsx b/website/src/commands/theme.tsx similarity index 99% rename from src/commands/theme.tsx rename to website/src/commands/theme.tsx index 60482fd..90c7e3e 100644 --- a/src/commands/theme.tsx +++ b/website/src/commands/theme.tsx @@ -12,7 +12,7 @@ const Select = styled.select` padding: 0 0.2rem 0 0.2rem; margin: 0; font-family: inherit; - font-size: 0.3rem; + font-size: 0.8rem; outline: none; height: 1.15rem; cursor: inherit; diff --git a/src/commands/title.tsx b/website/src/commands/title.tsx similarity index 100% rename from src/commands/title.tsx rename to website/src/commands/title.tsx diff --git a/src/components/Layout.tsx b/website/src/components/Layout.tsx similarity index 96% rename from src/components/Layout.tsx rename to website/src/components/Layout.tsx index 8e4050b..7672f84 100644 --- a/src/components/Layout.tsx +++ b/website/src/components/Layout.tsx @@ -10,6 +10,7 @@ import { Context } from '../store/context'; const Warpper = styled.div``; const Header = styled.header` + -webkit-app-region: drag; display: flex; flex-direction: row; justify-content: space-between; @@ -39,9 +40,9 @@ const Title = styled.h1` margin-left: 0.4rem; background-color: var(--color-border-muted); border-radius: 0.1rem; - padding: 0 0.2rem; + padding: 0 0.2rem 0 0.1rem; font-weight: normal; - font-size: 0.1rem; + font-size: 0.7rem; letter-spacing: -0.1rem; } `; diff --git a/src/index.tsx b/website/src/index.tsx similarity index 100% rename from src/index.tsx rename to website/src/index.tsx diff --git a/src/pages/docs/index.tsx b/website/src/pages/docs/index.tsx similarity index 71% rename from src/pages/docs/index.tsx rename to website/src/pages/docs/index.tsx index ef1812d..3bc51c0 100644 --- a/src/pages/docs/index.tsx +++ b/website/src/pages/docs/index.tsx @@ -1,6 +1,6 @@ import MarkdownEditor from '@uiw/react-markdown-editor'; import styled from 'styled-components'; -import data from '../../../README.md'; +import { markdownString } from '../../store/context'; const Warpper = styled.div` max-width: 59rem; @@ -11,7 +11,7 @@ const Warpper = styled.div` export const DocsPage = () => { return ( - + ); }; diff --git a/src/pages/home/Preview.tsx b/website/src/pages/home/Preview.tsx similarity index 100% rename from src/pages/home/Preview.tsx rename to website/src/pages/home/Preview.tsx diff --git a/src/pages/home/index.tsx b/website/src/pages/home/index.tsx similarity index 94% rename from src/pages/home/index.tsx rename to website/src/pages/home/index.tsx index e20b3e9..fbe608a 100644 --- a/src/pages/home/index.tsx +++ b/website/src/pages/home/index.tsx @@ -17,7 +17,6 @@ export const HomePage = () => { const { theme, markdown, isLoading, setMarkdown } = useContext(Context); const themeValue = themes[theme].value; const handleChange = (value: string) => setMarkdown(value); - console.log(isLoading); return ( { renderPreview={Preview} onChange={handleChange} visible={true} - height="calc(100vh - 4.92rem)" + height="calc(100vh - 4.70rem)" /> ); diff --git a/src/pages/theme/Preview.tsx b/website/src/pages/theme/Preview.tsx similarity index 100% rename from src/pages/theme/Preview.tsx rename to website/src/pages/theme/Preview.tsx diff --git a/src/pages/theme/editor.tsx b/website/src/pages/theme/editor.tsx similarity index 100% rename from src/pages/theme/editor.tsx rename to website/src/pages/theme/editor.tsx diff --git a/src/react-app-env.d.ts b/website/src/react-app-env.d.ts similarity index 100% rename from src/react-app-env.d.ts rename to website/src/react-app-env.d.ts diff --git a/src/store/Provider.tsx b/website/src/store/Provider.tsx similarity index 91% rename from src/store/Provider.tsx rename to website/src/store/Provider.tsx index 0c3bdde..1e2b32a 100644 --- a/src/store/Provider.tsx +++ b/website/src/store/Provider.tsx @@ -1,16 +1,14 @@ import React, { useEffect } from 'react'; import { useSearchParams } from 'react-router-dom'; -import { PreviewThemeValue, previewThemes, ThemeValue, Context } from './context'; +import { PreviewThemeValue, previewThemes, ThemeValue, Context, markdownString } from './context'; import { useMdSource } from './getMdSource'; -import data from '../../README.md'; - export const Provider: React.FC = ({ children }) => { const [searchParams, setSearchParams] = useSearchParams(); const paramPreviewTheme = searchParams.get('theme') as PreviewThemeValue; const initPreviewTheme = paramPreviewTheme || 'underscore'; const mdurl = searchParams.get('md'); - const [markdown, setMarkdown] = React.useState(mdurl ? '' : data.source); + const [markdown, setMarkdown] = React.useState(mdurl ? '' : markdownString); const [css, setCss] = React.useState(previewThemes[initPreviewTheme].value); const [previewTheme, setPreviewTheme] = React.useState(initPreviewTheme); const [theme, setTheme] = React.useState('default'); diff --git a/src/store/context.tsx b/website/src/store/context.tsx similarity index 97% rename from src/store/context.tsx rename to website/src/store/context.tsx index 3617719..0f85bbb 100644 --- a/src/store/context.tsx +++ b/website/src/store/context.tsx @@ -18,7 +18,9 @@ import simpleStyle from '../themes/simple.md.css'; import underscoreStyle from '../themes/underscore.md.css'; import baseStyle from '../themes/base.md.css'; -import data from '../../README.md'; +import data from '../../../README.md'; + +export const markdownString = data.source; export const themes = { default: { diff --git a/src/store/getMdSource.tsx b/website/src/store/getMdSource.tsx similarity index 100% rename from src/store/getMdSource.tsx rename to website/src/store/getMdSource.tsx diff --git a/src/themes/base.md.css b/website/src/themes/base.md.css similarity index 95% rename from src/themes/base.md.css rename to website/src/themes/base.md.css index fd410bf..0a0c913 100644 --- a/src/themes/base.md.css +++ b/website/src/themes/base.md.css @@ -105,10 +105,12 @@ th { line-height: 1; white-space: initial; background: rgba(27, 31, 35, 0.05); - padding: 0.2em 0.6em; - border-radius: 0.6em; + padding: 0.1em 0.3em; + border-radius: 0.3em; font-weight: bold; - font-size: 0.45em; + font-size: 1em; + top: -0.1em; + position: relative; } .footnotes-title { diff --git a/src/themes/default.md.css b/website/src/themes/default.md.css similarity index 97% rename from src/themes/default.md.css rename to website/src/themes/default.md.css index 4011c66..38e2cb6 100644 --- a/src/themes/default.md.css +++ b/website/src/themes/default.md.css @@ -145,10 +145,12 @@ th { white-space: initial; color: #009874; background: rgba(27, 31, 35, 0.05); - padding: 0.2em 0.6em; - border-radius: 0.6em; + padding: 0.1em 0.3em; + border-radius: 0.3em; font-weight: bold; - font-size: 0.45em; + font-size: 1em; + top: -0.1em; + position: relative; } .footnotes-title { diff --git a/src/themes/simple.md.css b/website/src/themes/simple.md.css similarity index 97% rename from src/themes/simple.md.css rename to website/src/themes/simple.md.css index 855d631..bde6246 100644 --- a/src/themes/simple.md.css +++ b/website/src/themes/simple.md.css @@ -145,10 +145,12 @@ th { white-space: initial; color: #0f4c81; background: rgba(27, 31, 35, 0.05); - padding: 0.2em 0.6em; - border-radius: 0.6em; + padding: 0.1em 0.3em; + border-radius: 0.3em; font-weight: bold; - font-size: 0.45em; + font-size: 1em; + top: -0.1em; + position: relative; } .footnotes-title { diff --git a/src/themes/underscore.md.css b/website/src/themes/underscore.md.css similarity index 97% rename from src/themes/underscore.md.css rename to website/src/themes/underscore.md.css index 2b0b564..609db58 100644 --- a/src/themes/underscore.md.css +++ b/website/src/themes/underscore.md.css @@ -142,10 +142,12 @@ th { white-space: initial; color: #ffb11b; background: rgba(27, 31, 35, 0.05); - padding: 0.2em 0.6em; - border-radius: 0.6em; + padding: 0.1em 0.3em; + border-radius: 0.3em; font-weight: bold; - font-size: 0.45em; + font-size: 1em; + top: -0.1em; + position: relative; } .footnotes-title { diff --git a/src/utils/css.ts b/website/src/utils/css.ts similarity index 100% rename from src/utils/css.ts rename to website/src/utils/css.ts diff --git a/src/utils/markdownToHTML.ts b/website/src/utils/markdownToHTML.ts similarity index 100% rename from src/utils/markdownToHTML.ts rename to website/src/utils/markdownToHTML.ts diff --git a/tsconfig.json b/website/tsconfig.json similarity index 100% rename from tsconfig.json rename to website/tsconfig.json