@@ -86,6 +86,7 @@ const useVSCode = flags.vscode === null
8686await Deno . mkdir ( join ( resolvedDirectory , "routes" , "api" ) , { recursive : true } ) ;
8787await Deno . mkdir ( join ( resolvedDirectory , "islands" ) , { recursive : true } ) ;
8888await Deno . mkdir ( join ( resolvedDirectory , "static" ) , { recursive : true } ) ;
89+ await Deno . mkdir ( join ( resolvedDirectory , "components" ) , { recursive : true } ) ;
8990if ( useVSCode ) {
9091 await Deno . mkdir ( join ( resolvedDirectory , ".vscode" ) , { recursive : true } ) ;
9192}
@@ -140,57 +141,52 @@ await Deno.writeTextFile(
140141 ROUTES_INDEX_TSX ,
141142) ;
142143
143- let ISLANDS_COUNTER_TSX = `/** @jsx h */
144+ const COMPONENTS_BUTTON_TSX = `/** @jsx h */
144145import { h } from "preact";
145- import { useState } from "preact/hooks";
146146import { IS_BROWSER } from "$fresh/runtime.ts";
147147${ useTwind ? 'import { tw } from "@twind";\n' : "" }
148+ export function Button(props: h.JSX.HTMLAttributes<HTMLButtonElement>) {
149+ return (
150+ <button
151+ {...props}
152+ disabled={!IS_BROWSER || props.disabled}
153+ ${
154+ useTwind
155+ ? " class={tw\`px-2 py-1 border(gray-100 2) hover:bg-gray-200\`}\n "
156+ : ""
157+ } />
158+ );
159+ }
160+ ` ;
161+ await Deno . writeTextFile (
162+ join ( resolvedDirectory , "components" , "Button.tsx" ) ,
163+ COMPONENTS_BUTTON_TSX ,
164+ ) ;
165+
166+ const ISLANDS_COUNTER_TSX = `/** @jsx h */
167+ import { h } from "preact";
168+ import { useState } from "preact/hooks";
169+ ${ useTwind ? 'import { tw } from "@twind";\n' : "" }
170+ import { Button } from "../components/Button.tsx";
171+
148172interface CounterProps {
149173 start: number;
150174}
151175
152176export default function Counter(props: CounterProps) {
153177 const [count, setCount] = useState(props.start);
154- ` ;
155-
156- if ( useTwind ) {
157- ISLANDS_COUNTER_TSX +=
158- ` const btn = tw\`px-2 py-1 border(gray-100 1) hover:bg-gray-200\`;\n` ;
159- ISLANDS_COUNTER_TSX += ` return (
160- <div class={tw\`flex gap-2 w-full\`}>
161- <p class={tw\`flex-grow-1 font-bold text-xl\`}>{count}</p>
162- <button
163- class={btn}
164- onClick={() => setCount(count - 1)}
165- disabled={!IS_BROWSER}
166- >
167- -1
168- </button>
169- <button
170- class={btn}
171- onClick={() => setCount(count + 1)}
172- disabled={!IS_BROWSER}
173- >
174- +1
175- </button>
176- </div>
177- );
178- ` ;
179- } else {
180- ISLANDS_COUNTER_TSX += ` return (
181- <div>
182- <p>{count}</p>
183- <button onClick={() => setCount(count - 1)} disabled={!IS_BROWSER}>
184- -1
185- </button>
186- <button onClick={() => setCount(count + 1)} disabled={!IS_BROWSER}>
187- +1
188- </button>
178+ return (
179+ <div${ useTwind ? " class={tw\`flex gap-2 w-full\`}" : "" } >
180+ <p${
181+ useTwind ? " class={tw\`flex-grow-1 font-bold text-xl\`}" : ""
182+ } >{count}</p>
183+ <Button onClick={() => setCount(count - 1)}>-1</Button>
184+ <Button onClick={() => setCount(count + 1)}>+1</Button>
189185 </div>
190186 );
191- ` ;
192187}
193- ISLANDS_COUNTER_TSX += `}\n` ;
188+ ` ;
189+
194190await Deno . writeTextFile (
195191 join ( resolvedDirectory , "islands" , "Counter.tsx" ) ,
196192 ISLANDS_COUNTER_TSX ,
0 commit comments