From 477c1bf13f6afcfd079991eda70a64e8ef2199ac Mon Sep 17 00:00:00 2001 From: Takuya Matsuyama Date: Thu, 17 Oct 2024 13:00:53 +0900 Subject: [PATCH] feat(dev-server): add --- bun.lockb | Bin 45350 -> 124801 bytes index.html | 16 +++++++++ package.json | 16 ++++++++- src/dev-server.css | 49 ++++++++++++++++++++++++++++ src/dev-server.tsx | 39 ++++++++++++++++++++++ src/dev-server/color-tokens.tsx | 31 ++++++++++++++++++ src/dev-server/get-css-variables.ts | 12 +++++++ src/dev-server/index.tsx | 12 +++++++ src/dev-server/nav.tsx | 10 ++++++ src/dev-server/variables.tsx | 29 ++++++++++++++++ src/generate-palette.ts | 6 ++-- tsconfig.json | 28 ++++++++++++++++ vite.config.ts | 12 +++++++ 13 files changed, 256 insertions(+), 4 deletions(-) create mode 100644 index.html create mode 100644 src/dev-server.css create mode 100644 src/dev-server.tsx create mode 100644 src/dev-server/color-tokens.tsx create mode 100644 src/dev-server/get-css-variables.ts create mode 100644 src/dev-server/index.tsx create mode 100644 src/dev-server/nav.tsx create mode 100644 src/dev-server/variables.tsx create mode 100644 tsconfig.json create mode 100644 vite.config.ts diff --git a/bun.lockb b/bun.lockb index 42b7e6d3c7e169448e90914866299042c7dabb95..be245ee5a1e8204e40977047250907f877f5d968 100755 GIT binary patch literal 124801 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 delta 8574 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 B(hUFr diff --git a/index.html b/index.html new file mode 100644 index 0000000..5f5e7b7 --- /dev/null +++ b/index.html @@ -0,0 +1,16 @@ + + + + + + + + Vite + React + TS + + + +
+ + + + diff --git a/package.json b/package.json index 1323bcf..78ab9fc 100644 --- a/package.json +++ b/package.json @@ -1,12 +1,14 @@ { "name": "@inkdropapp/theme-dev-helpers", "version": "0.2.2", + "type": "module", "description": "A helper module for creating themes for Inkdrop", "keywords": [ "inkdrop", "markdown" ], "scripts": { + "dev-server": "bunx --bun vite", "test": "echo \"Error: no test specified\" && exit 1" }, "repository": { @@ -21,7 +23,19 @@ "dependencies": { "@inkdropapp/base-ui-theme": "^0.3.1", "@inkdropapp/css": "^0.4.2", + "@types/react": "^18.3.10", + "@types/react-dom": "^18.3.0", + "@vitejs/plugin-react": "^4.3.2", "commander": "^12.1.0", - "puppeteer": "^23.5.3" + "puppeteer": "^23.5.3", + "react": "^18.3.1", + "react-dom": "^18.3.1", + "react-router-dom": "^6.27.0", + "typescript": "^5.5.3", + "typescript-eslint": "^8.7.0", + "vite": "^5.4.8" + }, + "devDependencies": { + "prettier": "^3.3.3" } } diff --git a/src/dev-server.css b/src/dev-server.css new file mode 100644 index 0000000..8bfb5cd --- /dev/null +++ b/src/dev-server.css @@ -0,0 +1,49 @@ +body { + background: var(--page-background); + color: var(--text-color); +} + +#root { + padding: 2rem 0; +} + +h2 { + text-align: center; +} + +.variable-list { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); + justify-content: center; + gap: 0.6rem; + + &>.variable-item { + display: flex; + flex-direction: row; + gap: 0.6em; + align-items: center; + + .color-box { + flex: 0 0 30px; + height: 30px; + } + + .data { + display: flex; + flex-direction: column; + flex: 1; + + .variable-name { + font-weight: bold; + } + } + } + +} + +.nav { + display: flex; + justify-content: center; + gap: 1rem; + margin-top: 1rem; +} diff --git a/src/dev-server.tsx b/src/dev-server.tsx new file mode 100644 index 0000000..37e86a5 --- /dev/null +++ b/src/dev-server.tsx @@ -0,0 +1,39 @@ +import { StrictMode } from 'react' +import { createRoot } from 'react-dom/client' +import { + createBrowserRouter, + RouterProvider, +} from "react-router-dom"; +import { Index } from './dev-server/index'; +import './dev-server.css' +import '@inkdropapp/css/reset.css' +import '@inkdropapp/css/tokens.css' +import '@inkdropapp/base-ui-theme/styles/theme.css' +import { ColorTokensPage } from './dev-server/color-tokens'; +import { VariablesPage } from './dev-server/variables'; + +const cssFiles = [ + '/Users/nora/Developments/inkdrop/plugins/solarized-light-ui/styles/tokens.css', + '/Users/nora/Developments/inkdrop/plugins/solarized-light-ui/styles/theme.css' +] + +cssFiles.forEach((file) => { + import( /* @vite-ignore */ file) +}) + +const router = createBrowserRouter([ + { + path: "/", + element: , + children: [ + { path: '', element: }, + { path: 'tokens', element: } + ] + }, +]); + +createRoot(document.getElementById('root')!).render( + + + , +) diff --git a/src/dev-server/color-tokens.tsx b/src/dev-server/color-tokens.tsx new file mode 100644 index 0000000..4e44699 --- /dev/null +++ b/src/dev-server/color-tokens.tsx @@ -0,0 +1,31 @@ +import { getCSSVariables } from './get-css-variables' + +export const ColorTokensPage = () => { + const cssVariables = getCSSVariables() + + return ( + <> +

Color Tokens

+
+ {Object.keys(cssVariables) + .filter(name => name.startsWith('--color') || name.startsWith('--hsl')) + .map(variableName => { + return ( +
+
+
+
{variableName}
+
+ {cssVariables[variableName]} +
+
+
+ ) + })} +
+ + ) +} + diff --git a/src/dev-server/get-css-variables.ts b/src/dev-server/get-css-variables.ts new file mode 100644 index 0000000..a07c54c --- /dev/null +++ b/src/dev-server/get-css-variables.ts @@ -0,0 +1,12 @@ +export function getCSSVariables() { + const computedStyles = document.body.computedStyleMap(); + const variables: Record = {}; + for (const [prop, val] of computedStyles) { + if (prop.startsWith('--')) { + variables[prop] = val.toString(); + } + } + + + return variables +} diff --git a/src/dev-server/index.tsx b/src/dev-server/index.tsx new file mode 100644 index 0000000..57e190b --- /dev/null +++ b/src/dev-server/index.tsx @@ -0,0 +1,12 @@ +import { Outlet } from 'react-router-dom' +import { Nav } from './nav' + +export const Index = () => { + return ( +
+
+ ) +} + diff --git a/src/dev-server/nav.tsx b/src/dev-server/nav.tsx new file mode 100644 index 0000000..179d276 --- /dev/null +++ b/src/dev-server/nav.tsx @@ -0,0 +1,10 @@ +import { Link } from "react-router-dom"; + +export const Nav = () => { + return ( +
+ Variables + Color Tokens +
+ ) +} diff --git a/src/dev-server/variables.tsx b/src/dev-server/variables.tsx new file mode 100644 index 0000000..0663a6f --- /dev/null +++ b/src/dev-server/variables.tsx @@ -0,0 +1,29 @@ +import themeVariableNames from '@inkdropapp/base-ui-theme/lib/variable-names.json' +import { getCSSVariables } from './get-css-variables' + +export const VariablesPage = () => { + const cssVariables = getCSSVariables() + return ( + <> +

Variables

+
+ {themeVariableNames.map(variableName => { + return ( +
+
+
+
{variableName}
+
+ {cssVariables[variableName]} +
+
+
+ ) + })} +
+ + ) +} + diff --git a/src/generate-palette.ts b/src/generate-palette.ts index ca6ff3d..a5824c7 100644 --- a/src/generate-palette.ts +++ b/src/generate-palette.ts @@ -24,7 +24,7 @@ const appearance = options.appearance as 'light' | 'dark' | undefined; // Function to extract theme CSS variables async function extractPalette(outputPath: string) { const themePackageJson = (await import(path.join(process.cwd(), 'package.json'))) - const themeVariableNames = (await import(`@inkdropapp/base-ui-theme/lib/variable-names.json`)).default; + const themeVariableNames: string[] = (await import(`@inkdropapp/base-ui-theme/lib/variable-names.json`)).default; const browser = await puppeteer.launch(); const page = await browser.newPage(); @@ -61,7 +61,7 @@ async function extractPalette(outputPath: string) { // Extract CSS variables const computedCSSVariables = await page.$eval('body', (body) => { const computedStyles = body.computedStyleMap(); - const variables = {}; + const variables: Record = {}; for (const [prop, val] of computedStyles) { if (prop.startsWith('--')) { variables[prop] = val.toString(); @@ -73,7 +73,7 @@ async function extractPalette(outputPath: string) { const themeCSSVariables = themeVariableNames.reduce((variables, name) => { variables[name] = computedCSSVariables[name]; return variables; - }, {}); + }, {} as Record); // Write to the output file const outputFilePath = path.resolve(outputPath); diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..be4f646 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,28 @@ +{ + "compilerOptions": { + "target": "ES2020", + "useDefineForClassFields": true, + "lib": [ + "ES2020", + "DOM", + "DOM.Iterable" + ], + "module": "ESNext", + "skipLibCheck": true, + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "isolatedModules": true, + "moduleDetection": "force", + "noEmit": true, + "jsx": "react-jsx", + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true + }, + "include": [ + "src" + ] +} diff --git a/vite.config.ts b/vite.config.ts new file mode 100644 index 0000000..20c2f7f --- /dev/null +++ b/vite.config.ts @@ -0,0 +1,12 @@ +import { defineConfig } from 'vite' +import react from '@vitejs/plugin-react' + +// https://vitejs.dev/config/ +export default defineConfig({ + plugins: [react()], + server: { + fs: { + allow: ['src', '/Users/nora/'] + } + } +})