mirror of
https://github.com/kou029w/_.git
synced 2025-01-30 22:08:02 +00:00
create wmr
This commit is contained in:
parent
4a4a56578c
commit
014d0d133f
13 changed files with 229 additions and 0 deletions
4
wmr/.gitignore
vendored
Normal file
4
wmr/.gitignore
vendored
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
.cache
|
||||||
|
node_modules
|
||||||
|
dist
|
||||||
|
stats.html
|
21
wmr/package.json
Normal file
21
wmr/package.json
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
{
|
||||||
|
"scripts": {
|
||||||
|
"start": "wmr",
|
||||||
|
"build": "wmr build --prerender",
|
||||||
|
"serve": "wmr serve"
|
||||||
|
},
|
||||||
|
"eslintConfig": {
|
||||||
|
"extends": "preact"
|
||||||
|
},
|
||||||
|
"alias": {
|
||||||
|
"react": "preact/compat",
|
||||||
|
"react-dom": "preact/compat"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"preact": "^10.5.12",
|
||||||
|
"preact-iso": "^1.0.0"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"wmr": "^1.2.0"
|
||||||
|
}
|
||||||
|
}
|
22
wmr/public/header.js
Normal file
22
wmr/public/header.js
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
import { useLocation } from "preact-iso/router";
|
||||||
|
|
||||||
|
export default function Header() {
|
||||||
|
const { url } = useLocation();
|
||||||
|
return (
|
||||||
|
<header>
|
||||||
|
<nav>
|
||||||
|
<a href="/">Home</a>
|
||||||
|
<a href="/about">About</a>
|
||||||
|
<a href="/error">Error</a>
|
||||||
|
</nav>
|
||||||
|
<label>
|
||||||
|
URL:
|
||||||
|
<input
|
||||||
|
readonly
|
||||||
|
value={url}
|
||||||
|
ref={(c) => c && (c.size = c.value.length)}
|
||||||
|
/>
|
||||||
|
</label>
|
||||||
|
</header>
|
||||||
|
);
|
||||||
|
}
|
15
wmr/public/index.html
Normal file
15
wmr/public/index.html
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8" />
|
||||||
|
<title>WMR App</title>
|
||||||
|
<meta name="description" content="WMR App" />
|
||||||
|
<meta name="viewport" content="width=device-width,initial-scale=1" />
|
||||||
|
<link rel="icon" href="data:" />
|
||||||
|
<link rel="preload" as="script" href="/index.js" crossorigin />
|
||||||
|
<link rel="stylesheet" href="/style.css" />
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<script type="module" src="/index.js"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
32
wmr/public/index.js
Normal file
32
wmr/public/index.js
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
import hydrate from "preact-iso/hydrate";
|
||||||
|
import { LocationProvider, Router } from "preact-iso/router";
|
||||||
|
import lazy, { ErrorBoundary } from "preact-iso/lazy";
|
||||||
|
import Home from "./pages/home/index.js";
|
||||||
|
import NotFound from "./pages/_404.js";
|
||||||
|
import Header from "./header.js";
|
||||||
|
|
||||||
|
const About = lazy(() => import("./pages/about/index.js"));
|
||||||
|
|
||||||
|
export function App() {
|
||||||
|
return (
|
||||||
|
<LocationProvider>
|
||||||
|
<div class="app">
|
||||||
|
<Header />
|
||||||
|
<ErrorBoundary>
|
||||||
|
<Router>
|
||||||
|
<Home path="/" />
|
||||||
|
<About path="/about" />
|
||||||
|
<NotFound default />
|
||||||
|
</Router>
|
||||||
|
</ErrorBoundary>
|
||||||
|
</div>
|
||||||
|
</LocationProvider>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
hydrate(<App />);
|
||||||
|
|
||||||
|
export async function prerender(data) {
|
||||||
|
const { default: prerender } = await import("preact-iso/prerender");
|
||||||
|
return await prerender(<App {...data} />);
|
||||||
|
}
|
8
wmr/public/pages/_404.js
Normal file
8
wmr/public/pages/_404.js
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
const NotFound = () => (
|
||||||
|
<section>
|
||||||
|
<h1>404: Not Found</h1>
|
||||||
|
<p>It's gone :(</p>
|
||||||
|
</section>
|
||||||
|
);
|
||||||
|
|
||||||
|
export default NotFound;
|
11
wmr/public/pages/about/index.js
Normal file
11
wmr/public/pages/about/index.js
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
import styles from "./style.module.css";
|
||||||
|
|
||||||
|
const About = ({ query }) => (
|
||||||
|
<section class={styles.about}>
|
||||||
|
<h1>About</h1>
|
||||||
|
<p>A page all about this website.</p>
|
||||||
|
<pre>{JSON.stringify(query)}</pre>
|
||||||
|
</section>
|
||||||
|
);
|
||||||
|
|
||||||
|
export default About;
|
3
wmr/public/pages/about/style.module.css
Normal file
3
wmr/public/pages/about/style.module.css
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
.about {
|
||||||
|
background: #dbcfe7;
|
||||||
|
}
|
24
wmr/public/pages/home/index.js
Normal file
24
wmr/public/pages/home/index.js
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
import styles from "./style.module.css";
|
||||||
|
import { useState } from "preact/hooks";
|
||||||
|
|
||||||
|
export default function Home() {
|
||||||
|
const [count, setCount] = useState(0);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
<section class={styles.home}>
|
||||||
|
<h1>Home</h1>
|
||||||
|
<p>This is the home page.</p>
|
||||||
|
<>
|
||||||
|
<button style={{ width: 30 }} onClick={() => setCount(count - 1)}>
|
||||||
|
-
|
||||||
|
</button>
|
||||||
|
<output style={{ padding: 10 }}>Count: {count}</output>
|
||||||
|
<button style={{ width: 30 }} onClick={() => setCount(count + 1)}>
|
||||||
|
+
|
||||||
|
</button>
|
||||||
|
</>
|
||||||
|
</section>
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
}
|
4
wmr/public/pages/home/style.module.css
Normal file
4
wmr/public/pages/home/style.module.css
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
.home {
|
||||||
|
background: #f6f6f6;
|
||||||
|
color: #333;
|
||||||
|
}
|
45
wmr/public/style.css
Normal file
45
wmr/public/style.css
Normal file
|
@ -0,0 +1,45 @@
|
||||||
|
html,
|
||||||
|
body {
|
||||||
|
margin: 0;
|
||||||
|
min-height: 100%;
|
||||||
|
font-family: system-ui, sans-serif;
|
||||||
|
}
|
||||||
|
|
||||||
|
header {
|
||||||
|
display: flex;
|
||||||
|
background: #ddd;
|
||||||
|
}
|
||||||
|
|
||||||
|
header > nav {
|
||||||
|
flex: 1;
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
|
||||||
|
header > nav a {
|
||||||
|
padding: 10px;
|
||||||
|
color: #673ab8;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
header > nav a:hover {
|
||||||
|
background-color: #f1e9ff;
|
||||||
|
}
|
||||||
|
|
||||||
|
header > label {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
padding: 10px;
|
||||||
|
color: #555;
|
||||||
|
font-size: 80%;
|
||||||
|
}
|
||||||
|
|
||||||
|
header input {
|
||||||
|
border: none;
|
||||||
|
border-radius: 3px;
|
||||||
|
padding: 2px 5px;
|
||||||
|
font-size: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.app > section {
|
||||||
|
padding: 20px;
|
||||||
|
}
|
17
wmr/tsconfig.json
Normal file
17
wmr/tsconfig.json
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
{
|
||||||
|
"compilerOptions": {
|
||||||
|
"jsx": "preserve",
|
||||||
|
"jsxFactory": "preact.h",
|
||||||
|
"jsxFragmentFactory": "preact.Fragment",
|
||||||
|
"allowJs": true,
|
||||||
|
"checkJs": true,
|
||||||
|
"strict": true,
|
||||||
|
"noEmit": true,
|
||||||
|
"moduleResolution": "node",
|
||||||
|
"target": "esnext",
|
||||||
|
"module": "esnext",
|
||||||
|
"resolveJsonModule": true,
|
||||||
|
"allowSyntheticDefaultImports": true,
|
||||||
|
"downlevelIteration": true
|
||||||
|
}
|
||||||
|
}
|
23
wmr/yarn.lock
Normal file
23
wmr/yarn.lock
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
|
||||||
|
# yarn lockfile v1
|
||||||
|
|
||||||
|
|
||||||
|
fsevents@^2.1.3:
|
||||||
|
version "2.3.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a"
|
||||||
|
integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==
|
||||||
|
|
||||||
|
preact-iso@^1.0.0:
|
||||||
|
version "1.1.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/preact-iso/-/preact-iso-1.1.1.tgz#959656bfee479e6a8c6707753e84d4342f61c48b"
|
||||||
|
integrity sha512-/iG9YH2nlLf3DAEXxCxka6Mux32t2cZEgfbvkNnR9ZtK0yjDRBEHI1IJS6I1AtelAFuBvoD24Ua0sc7wdZb1vg==
|
||||||
|
|
||||||
|
preact@^10.5.12:
|
||||||
|
version "10.5.13"
|
||||||
|
resolved "https://registry.yarnpkg.com/preact/-/preact-10.5.13.tgz#85f6c9197ecd736ce8e3bec044d08fd1330fa019"
|
||||||
|
integrity sha512-q/vlKIGNwzTLu+jCcvywgGrt+H/1P/oIRSD6mV4ln3hmlC+Aa34C7yfPI4+5bzW8pONyVXYS7SvXosy2dKKtWQ==
|
||||||
|
|
||||||
|
wmr@^1.2.0:
|
||||||
|
version "1.5.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/wmr/-/wmr-1.5.1.tgz#f7630da86ff69eef935c7b8361230482d06bc880"
|
||||||
|
integrity sha512-CW+cMxaTFsCgBmcQXeuvTJ0rM5+IhOOA0f8xAZdfre63TNlEoOw0T3G8bKYRV7N+SaveF3siRFis96rSVnyMuQ==
|
Loading…
Add table
Reference in a new issue