diff options
author | 2021-06-28 10:46:10 -0500 | |
---|---|---|
committer | 2021-06-28 10:46:10 -0500 | |
commit | 7063c04dec48fcabcda104c42d61642a554f6044 (patch) | |
tree | ccc57515b9609f9a211154e2a783ab324ee1b8ed /examples/framework-multiple/src | |
parent | 13f50564cb8cfece7857c7b08be064d5e9e9853a (diff) | |
download | astro-7063c04dec48fcabcda104c42d61642a554f6044.tar.gz astro-7063c04dec48fcabcda104c42d61642a554f6044.tar.zst astro-7063c04dec48fcabcda104c42d61642a554f6044.zip |
Restructure examples (#568)
* rename kitchen sink, pull out react example
* split out the rest of the examples
* align versions
* chore: rename examples
* chore: normalize gitignore
* chore: update package versions
* chore: move framework examples to `framework` namespace
* docs: add README to examples
Co-authored-by: Austin Crim <crim.austin@principal.com>
Diffstat (limited to 'examples/framework-multiple/src')
8 files changed, 154 insertions, 0 deletions
diff --git a/examples/framework-multiple/src/components/A.astro b/examples/framework-multiple/src/components/A.astro new file mode 100644 index 000000000..702a4be35 --- /dev/null +++ b/examples/framework-multiple/src/components/A.astro @@ -0,0 +1,3 @@ +<div class="children"> + <h1>Hello Astro (A)</h1> +</div> diff --git a/examples/framework-multiple/src/components/B.astro b/examples/framework-multiple/src/components/B.astro new file mode 100644 index 000000000..9022cb372 --- /dev/null +++ b/examples/framework-multiple/src/components/B.astro @@ -0,0 +1,3 @@ +<div class="children"> + <h1>Hello Astro (B)</h1> +</div> diff --git a/examples/framework-multiple/src/components/PreactCounter.tsx b/examples/framework-multiple/src/components/PreactCounter.tsx new file mode 100644 index 000000000..be4ddb6ce --- /dev/null +++ b/examples/framework-multiple/src/components/PreactCounter.tsx @@ -0,0 +1,20 @@ +import { h, Fragment } from 'preact'; +import { useState } from 'preact/hooks'; + +/** a counter written in Preact */ +export function PreactCounter({ 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-multiple/src/components/ReactCounter.jsx b/examples/framework-multiple/src/components/ReactCounter.jsx new file mode 100644 index 000000000..06d8f2513 --- /dev/null +++ b/examples/framework-multiple/src/components/ReactCounter.jsx @@ -0,0 +1,19 @@ +import React, { useState } from 'react'; + +/** a counter written in React */ +export 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-multiple/src/components/SvelteCounter.svelte b/examples/framework-multiple/src/components/SvelteCounter.svelte new file mode 100644 index 000000000..8d6b3f5e1 --- /dev/null +++ b/examples/framework-multiple/src/components/SvelteCounter.svelte @@ -0,0 +1,22 @@ + +<script> + let children; + let count = 0; + + function add() { + count += 1; + } + + function subtract() { + count -= 1; + } +</script> + +<div class="counter"> + <button on:click={subtract}>-</button> + <pre>{ count }</pre> + <button on:click={add}>+</button> +</div> +<div class="children"> + <slot /> +</div> diff --git a/examples/framework-multiple/src/components/VueCounter.vue b/examples/framework-multiple/src/components/VueCounter.vue new file mode 100644 index 000000000..8179fb1d9 --- /dev/null +++ b/examples/framework-multiple/src/components/VueCounter.vue @@ -0,0 +1,27 @@ +<template> + <div class="counter"> + <button @click="subtract()">-</button> + <pre>{{ count }}</pre> + <button @click="add()">+</button> + </div> + <div class="children"> + <slot /> + </div> +</template> + +<script> +import { ref } from 'vue'; +export default { + setup() { + const count = ref(0) + const add = () => count.value = count.value + 1; + const subtract = () => count.value = count.value - 1; + + return { + count, + add, + subtract + } + } +} +</script> diff --git a/examples/framework-multiple/src/components/index.ts b/examples/framework-multiple/src/components/index.ts new file mode 100644 index 000000000..4077dcacd --- /dev/null +++ b/examples/framework-multiple/src/components/index.ts @@ -0,0 +1,2 @@ +export { default as A } from './A.astro'; +export { default as B } from './B.astro'; diff --git a/examples/framework-multiple/src/pages/index.astro b/examples/framework-multiple/src/pages/index.astro new file mode 100644 index 000000000..3fbef72e0 --- /dev/null +++ b/examples/framework-multiple/src/pages/index.astro @@ -0,0 +1,58 @@ +--- +import { A, B as Renamed } from '../components'; +import * as react from '../components/ReactCounter.jsx'; +import { PreactCounter } from '../components/PreactCounter.tsx'; +import VueCounter from '../components/VueCounter.vue'; +import SvelteCounter from '../components/SvelteCounter.svelte'; +--- + +<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> + + <react.Counter:visible> + <h1>Hello React!</h1> + <p>What's up?</p> + </react.Counter:visible> + + <PreactCounter:visible> + <h1>Hello Preact!</h1> + </PreactCounter:visible> + + <VueCounter:visible> + <h1>Hello Vue!</h1> + </VueCounter:visible> + + <SvelteCounter:visible> + <h1>Hello Svelte!</h1> + </SvelteCounter:visible> + + <A /> + + <Renamed /> + + </main> + </body> +</html> |