diff options
Diffstat (limited to 'examples/framework-preact')
-rw-r--r-- | examples/framework-preact/.gitignore | 18 | ||||
-rw-r--r-- | examples/framework-preact/.npmrc | 2 | ||||
-rw-r--r-- | examples/framework-preact/README.md | 7 | ||||
-rw-r--r-- | examples/framework-preact/package.json | 15 | ||||
-rw-r--r-- | examples/framework-preact/src/components/Counter.tsx | 19 | ||||
-rw-r--r-- | examples/framework-preact/src/pages/index.astro | 38 |
6 files changed, 99 insertions, 0 deletions
diff --git a/examples/framework-preact/.gitignore b/examples/framework-preact/.gitignore new file mode 100644 index 000000000..d436c6dad --- /dev/null +++ b/examples/framework-preact/.gitignore @@ -0,0 +1,18 @@ +# build output +dist + +# dependencies +node_modules/ +.snowpack/ + +# logs +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# environment variables +.env +.env.production + +# macOS-specific files +.DS_Store diff --git a/examples/framework-preact/.npmrc b/examples/framework-preact/.npmrc new file mode 100644 index 000000000..0cc653b2c --- /dev/null +++ b/examples/framework-preact/.npmrc @@ -0,0 +1,2 @@ +## force pnpm to hoist +shamefully-hoist = true
\ No newline at end of file diff --git a/examples/framework-preact/README.md b/examples/framework-preact/README.md new file mode 100644 index 000000000..d948d9a4a --- /dev/null +++ b/examples/framework-preact/README.md @@ -0,0 +1,7 @@ +# Using Preact with Astro + +This example showcases Astro's built-in support for [Preact](https://preactjs.com/). + +No configuration is needed to enable Preact support—just start writing Preact components in `src/components`. + +> **Note**: If used, components _must_ include the JSX factory (ex. `import { h } from "preact"`). Astro is unable to determine which framework is used without having the [JSX factory](https://mariusschulz.com/blog/per-file-jsx-factories-in-typescript#what-is-a-jsx-factory) in scope. diff --git a/examples/framework-preact/package.json b/examples/framework-preact/package.json new file mode 100644 index 000000000..fafeea7af --- /dev/null +++ b/examples/framework-preact/package.json @@ -0,0 +1,15 @@ +{ + "name": "@astrojs/example-framework-preact", + "private": true, + "version": "0.0.1", + "scripts": { + "start": "astro dev", + "build": "astro build" + }, + "devDependencies": { + "astro": "^0.15.1" + }, + "snowpack": { + "workspaceRoot": "../.." + } +} diff --git a/examples/framework-preact/src/components/Counter.tsx b/examples/framework-preact/src/components/Counter.tsx new file mode 100644 index 000000000..7c520b167 --- /dev/null +++ b/examples/framework-preact/src/components/Counter.tsx @@ -0,0 +1,19 @@ +import { h, Fragment } from 'preact'; +import { useState } from 'preact/hooks'; + +export default function Counter({ children }) { + const [count, setCount] = useState(0); + const add = () => setCount((i) => i + 1); + const subtract = () => setCount((i) => i - 1); + + return ( + <> + <div className="counter"> + <button onClick={subtract}>-</button> + <pre>{count}</pre> + <button onClick={add}>+</button> + </div> + <div className="children">{children}</div> + </> + ); +} diff --git a/examples/framework-preact/src/pages/index.astro b/examples/framework-preact/src/pages/index.astro new file mode 100644 index 000000000..66fa9e84b --- /dev/null +++ b/examples/framework-preact/src/pages/index.astro @@ -0,0 +1,38 @@ +--- +import Counter from '../components/Counter.jsx' +--- + +<html> + <head> + <meta charset="utf-8" /> + <meta + name="viewport" + content="width=device-width, initial-scale=1, viewport-fit=cover" + /> + <style> + :global(:root) { + font-family: system-ui; + padding: 2em 0; + } + :global(.counter) { + display: grid; + grid-template-columns: repeat(3, minmax(0, 1fr)); + place-items: center; + font-size: 2em; + margin-top: 2em; + } + :global(.children) { + display: grid; + place-items: center; + margin-bottom: 2em; + } + </style> + </head> + <body> + <main> + <Counter:visible> + <h1>Hello Preact!</h1> + </Counter:visible> + </main> + </body> +</html> |