@e280/strata 0.3.0 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +20 -3
- package/package.json +1 -1
- package/s/tracker/bindings/react.ts +26 -15
- package/x/tracker/bindings/react.d.ts +9 -2
- package/x/tracker/bindings/react.js +18 -11
- package/x/tracker/bindings/react.js.map +1 -1
package/README.md
CHANGED
|
@@ -339,12 +339,18 @@ note, the *items* that the tracker tracks can be any object, or symbol.. the tra
|
|
|
339
339
|
import * as react from "react"
|
|
340
340
|
import {react as strata} from "@e280/strata"
|
|
341
341
|
|
|
342
|
-
export const {
|
|
342
|
+
export const {
|
|
343
|
+
component,
|
|
344
|
+
useStrata,
|
|
345
|
+
useOnce,
|
|
346
|
+
useSignal,
|
|
347
|
+
useDerived,
|
|
348
|
+
} = strata(react)
|
|
343
349
|
```
|
|
344
350
|
|
|
345
351
|
### ⚛️ `component` enables fully automatic reactive re-rendering
|
|
346
352
|
```ts
|
|
347
|
-
import {component
|
|
353
|
+
import {component} from "./strata.js"
|
|
348
354
|
|
|
349
355
|
const $count = signal(0)
|
|
350
356
|
|
|
@@ -356,7 +362,7 @@ export const MyCounter = component(() => {
|
|
|
356
362
|
|
|
357
363
|
### ⚛️ `useStrata` for a manual hands-on approach (plays nicer with hmr)
|
|
358
364
|
```ts
|
|
359
|
-
import {
|
|
365
|
+
import {useStrata} from "./strata.js"
|
|
360
366
|
|
|
361
367
|
const $count = signal(0)
|
|
362
368
|
|
|
@@ -367,6 +373,17 @@ export const MyCounter = () => {
|
|
|
367
373
|
}
|
|
368
374
|
```
|
|
369
375
|
|
|
376
|
+
### ⚛️ `useSignal` for local component state
|
|
377
|
+
```ts
|
|
378
|
+
import {useSignal} from "./strata.js"
|
|
379
|
+
|
|
380
|
+
export const MyCounter = () => {
|
|
381
|
+
const $count = useSignal(0)
|
|
382
|
+
const add = () => $count.value++
|
|
383
|
+
return <button onClick={add}>{$count()}</button>
|
|
384
|
+
}
|
|
385
|
+
```
|
|
386
|
+
|
|
370
387
|
|
|
371
388
|
|
|
372
389
|
<br/><br/>
|
package/package.json
CHANGED
|
@@ -1,9 +1,15 @@
|
|
|
1
1
|
|
|
2
2
|
import {tracker} from "../tracker.js"
|
|
3
|
+
import {signal} from "../../signals/signal/fn.js"
|
|
4
|
+
import {derived} from "../../signals/derived/fn.js"
|
|
5
|
+
import {SignalOptions} from "../../signals/types.js"
|
|
3
6
|
|
|
4
7
|
export function react(react: {
|
|
5
|
-
|
|
6
|
-
|
|
8
|
+
useEffect: (fn: () => void | (() => void), deps?: unknown[]) => void
|
|
9
|
+
useState: <X>(x: X | (() => X)) => [
|
|
10
|
+
value: X,
|
|
11
|
+
set: (value: X | ((x: X) => X)) => void
|
|
12
|
+
]
|
|
7
13
|
}) {
|
|
8
14
|
|
|
9
15
|
const useStrata = <X>(fn: () => X) => {
|
|
@@ -20,23 +26,28 @@ export function react(react: {
|
|
|
20
26
|
}
|
|
21
27
|
|
|
22
28
|
const component = <P extends object, R>(render: (props: P) => R) => {
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
29
|
+
const c = (props: P) => useStrata(() => render(props))
|
|
30
|
+
c.displayName = (render as any).displayName ?? render.name ?? "Component"
|
|
31
|
+
return c
|
|
32
|
+
}
|
|
26
33
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
})
|
|
34
|
+
const useOnce = <X>(fn: () => X) => {
|
|
35
|
+
const [value] = react.useState(fn)
|
|
36
|
+
return value
|
|
37
|
+
}
|
|
32
38
|
|
|
33
|
-
|
|
34
|
-
|
|
39
|
+
const useSignal = <X>(value: X, options?: Partial<SignalOptions>) => {
|
|
40
|
+
const $signal = useOnce(() => signal(value, options))
|
|
41
|
+
void useStrata(() => $signal())
|
|
42
|
+
return $signal
|
|
43
|
+
}
|
|
35
44
|
|
|
36
|
-
|
|
37
|
-
|
|
45
|
+
const useDerived = <X>(formula: () => X, options?: Partial<SignalOptions>) => {
|
|
46
|
+
const $derived = useOnce(() => derived(formula, options))
|
|
47
|
+
void useStrata(() => $derived())
|
|
48
|
+
return $derived
|
|
38
49
|
}
|
|
39
50
|
|
|
40
|
-
return {component, useStrata}
|
|
51
|
+
return {component, useStrata, useOnce, useSignal, useDerived}
|
|
41
52
|
}
|
|
42
53
|
|
|
@@ -1,10 +1,17 @@
|
|
|
1
|
+
import { SignalOptions } from "../../signals/types.js";
|
|
1
2
|
export declare function react(react: {
|
|
2
|
-
|
|
3
|
-
|
|
3
|
+
useEffect: (fn: () => void | (() => void), deps?: unknown[]) => void;
|
|
4
|
+
useState: <X>(x: X | (() => X)) => [
|
|
5
|
+
value: X,
|
|
6
|
+
set: (value: X | ((x: X) => X)) => void
|
|
7
|
+
];
|
|
4
8
|
}): {
|
|
5
9
|
component: <P extends object, R>(render: (props: P) => R) => {
|
|
6
10
|
(props: P): R;
|
|
7
11
|
displayName: any;
|
|
8
12
|
};
|
|
9
13
|
useStrata: <X>(fn: () => X) => X;
|
|
14
|
+
useOnce: <X>(fn: () => X) => X;
|
|
15
|
+
useSignal: <X>(value: X, options?: Partial<SignalOptions>) => import("../../index.js").Signal<X>;
|
|
16
|
+
useDerived: <X>(formula: () => X, options?: Partial<SignalOptions>) => import("../../index.js").Derived<X>;
|
|
10
17
|
};
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { tracker } from "../tracker.js";
|
|
2
|
+
import { signal } from "../../signals/signal/fn.js";
|
|
3
|
+
import { derived } from "../../signals/derived/fn.js";
|
|
2
4
|
export function react(react) {
|
|
3
5
|
const useStrata = (fn) => {
|
|
4
6
|
const [, setTick] = react.useState(0);
|
|
@@ -11,19 +13,24 @@ export function react(react) {
|
|
|
11
13
|
return result;
|
|
12
14
|
};
|
|
13
15
|
const component = (render) => {
|
|
14
|
-
|
|
15
|
-
const [, setTick] = react.useState(0);
|
|
16
|
-
const { seen, result } = tracker.observe(() => render(props));
|
|
17
|
-
react.useEffect(() => {
|
|
18
|
-
const rerender = async () => setTick(tick => tick + 1);
|
|
19
|
-
const stoppers = [...seen].map(item => tracker.subscribe(item, rerender));
|
|
20
|
-
return () => stoppers.forEach(stop => stop());
|
|
21
|
-
});
|
|
22
|
-
return result;
|
|
23
|
-
}
|
|
16
|
+
const c = (props) => useStrata(() => render(props));
|
|
24
17
|
c.displayName = render.displayName ?? render.name ?? "Component";
|
|
25
18
|
return c;
|
|
26
19
|
};
|
|
27
|
-
|
|
20
|
+
const useOnce = (fn) => {
|
|
21
|
+
const [value] = react.useState(fn);
|
|
22
|
+
return value;
|
|
23
|
+
};
|
|
24
|
+
const useSignal = (value, options) => {
|
|
25
|
+
const $signal = useOnce(() => signal(value, options));
|
|
26
|
+
void useStrata(() => $signal());
|
|
27
|
+
return $signal;
|
|
28
|
+
};
|
|
29
|
+
const useDerived = (formula, options) => {
|
|
30
|
+
const $derived = useOnce(() => derived(formula, options));
|
|
31
|
+
void useStrata(() => $derived());
|
|
32
|
+
return $derived;
|
|
33
|
+
};
|
|
34
|
+
return { component, useStrata, useOnce, useSignal, useDerived };
|
|
28
35
|
}
|
|
29
36
|
//# sourceMappingURL=react.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"react.js","sourceRoot":"","sources":["../../../s/tracker/bindings/react.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,OAAO,EAAC,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"react.js","sourceRoot":"","sources":["../../../s/tracker/bindings/react.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,OAAO,EAAC,MAAM,eAAe,CAAA;AACrC,OAAO,EAAC,MAAM,EAAC,MAAM,4BAA4B,CAAA;AACjD,OAAO,EAAC,OAAO,EAAC,MAAM,6BAA6B,CAAA;AAGnD,MAAM,UAAU,KAAK,CAAC,KAMpB;IAED,MAAM,SAAS,GAAG,CAAI,EAAW,EAAE,EAAE;QACpC,MAAM,CAAC,EAAE,OAAO,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;QACrC,MAAM,EAAC,IAAI,EAAE,MAAM,EAAC,GAAG,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;QAE1C,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;YACpB,MAAM,QAAQ,GAAG,KAAK,IAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,GAAG,CAAC,CAAC,CAAA;YACrD,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAA;YACzE,OAAO,GAAG,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAA;QAC9C,CAAC,CAAC,CAAA;QAEF,OAAO,MAAM,CAAA;IACd,CAAC,CAAA;IAED,MAAM,SAAS,GAAG,CAAsB,MAAuB,EAAE,EAAE;QAClE,MAAM,CAAC,GAAG,CAAC,KAAQ,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;QACtD,CAAC,CAAC,WAAW,GAAI,MAAc,CAAC,WAAW,IAAI,MAAM,CAAC,IAAI,IAAI,WAAW,CAAA;QACzE,OAAO,CAAC,CAAA;IACT,CAAC,CAAA;IAED,MAAM,OAAO,GAAG,CAAI,EAAW,EAAE,EAAE;QAClC,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;QAClC,OAAO,KAAK,CAAA;IACb,CAAC,CAAA;IAED,MAAM,SAAS,GAAG,CAAI,KAAQ,EAAE,OAAgC,EAAE,EAAE;QACnE,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAA;QACrD,KAAK,SAAS,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAA;QAC/B,OAAO,OAAO,CAAA;IACf,CAAC,CAAA;IAED,MAAM,UAAU,GAAG,CAAI,OAAgB,EAAE,OAAgC,EAAE,EAAE;QAC5E,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAA;QACzD,KAAK,SAAS,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAA;QAChC,OAAO,QAAQ,CAAA;IAChB,CAAC,CAAA;IAED,OAAO,EAAC,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAC,CAAA;AAC9D,CAAC"}
|