-
1
-
2
-
3
-
4
-
5
-
6
-
7
-
8
-
9
-
10
-
11
-
12
-
13
-
14
-
15
-
16
-
17
-
18
-
19
-
20
-
21
-
22
-
23
-
24
-
25
-
26
-
27
-
28
-
29
-
30
-
31
-
32
-
33
-
34
-
35
-
36
-
37
-
38
-
39
-
40
-
41
-
42
import { derived, signal } from "../../src/ef.js";
import { type JSXChildren } from "./jsx/jsx.js";
interface CounterProps {
initialValue?: number;
children: JSXChildren;
}
function Counter({ initialValue = 0, children }: CounterProps) {
const $count = signal(initialValue);
// `class` is attribute, `disabled` is property
return (
<div class="counter">
<p class="counter-label">{children}</p>
<button
class="counter-button"
disabled={derived(() => $count.get() <= 0)}
onClick={() => $count.set($count.once() - 1)}
>
-
</button>
<span>{derived(() => $count.get().toString(10))}</span>
<button
class="counter-button"
disabled={derived(() => $count.get() >= 10)}
onClick={() => $count.set($count.once() + 1)}
>
+
</button>
</div>
);
}
document.body.appendChild(
<div class="root">
<Counter>Counter 1</Counter>
<Counter initialValue={5}>Counter 2</Counter>
</div>,
);