@preact/signals-react 3.8.0 → 3.9.0
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/CHANGELOG.md +6 -0
- package/package.json +1 -1
- package/utils/dist/index.d.ts +1 -1
- package/utils/dist/utils.js +1 -1
- package/utils/dist/utils.js.map +1 -1
- package/utils/dist/utils.min.js +1 -1
- package/utils/dist/utils.min.js.map +1 -1
- package/utils/dist/utils.mjs +1 -1
- package/utils/dist/utils.mjs.map +1 -1
- package/utils/dist/utils.module.js +1 -1
- package/utils/dist/utils.module.js.map +1 -1
- package/utils/src/index.tsx +8 -8
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
# @preact/signals-react
|
|
2
2
|
|
|
3
|
+
## 3.9.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- [#878](https://github.com/preactjs/signals/pull/878) [`4aa565b`](https://github.com/preactjs/signals/commit/4aa565b3b668100b9c7ce09805da67cab8e3f5b2) Thanks [@JoviDeCroock](https://github.com/JoviDeCroock)! - Support returning a plain array in the `when` of a `For` component
|
|
8
|
+
|
|
3
9
|
## 3.8.0
|
|
4
10
|
|
|
5
11
|
### Minor Changes
|
package/package.json
CHANGED
package/utils/dist/index.d.ts
CHANGED
|
@@ -10,7 +10,7 @@ export declare namespace Show {
|
|
|
10
10
|
var displayName: string;
|
|
11
11
|
}
|
|
12
12
|
interface ForProps<T> {
|
|
13
|
-
each: Signal<Array<T>> | ReadonlySignal<Array<T>> | (() => Signal<Array<T>> | ReadonlySignal<Array<T>>);
|
|
13
|
+
each: Signal<Array<T>> | ReadonlySignal<Array<T>> | (() => Array<T> | Signal<Array<T>> | ReadonlySignal<Array<T>>);
|
|
14
14
|
fallback?: ReactNode;
|
|
15
15
|
children: (value: T, index: number) => ReactNode;
|
|
16
16
|
}
|
package/utils/dist/utils.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
var r=require("@preact/signals-
|
|
1
|
+
var r=require("@preact/signals-core"),n=require("@preact/signals-react"),e=require("@preact/signals-react/runtime"),t=require("react"),i=function(r){e.useSignals();return"function"==typeof r.children?r.children(r.v,r.i):r.children};i.displayName="Item";function u(r){e.useSignals();var n="function"==typeof r.when?r.when():r.when.value;if(!n)return r.fallback||null;else return t.createElement(i,{v:n,children:r.children})}u.displayName="Show";function c(n){e.useSignals();var u=t.useMemo(function(){return new Map},[]),c="function"==typeof n.each?n.each():n.each,o=c instanceof r.Signal?c.value:c;if(!o.length)return n.fallback||null;var f=new Set(u.keys()),a=o.map(function(r,e){f.delete(r);if(!u.has(r)){var c=t.createElement(i,{v:r,key:e,i:e,children:n.children});u.set(r,c);return c}return u.get(r)});f.forEach(function(r){u.delete(r)});return t.createElement(t.Fragment,{children:a})}c.displayName="For";var o={configurable:!0,get:function(){return this.value},set:function(r){this.value=r}};exports.For=c;exports.Show=u;exports.useLiveSignal=function(r){var e=n.useSignal(r);if(e.peek()!==r)e.value=r;return e};exports.useSignalRef=function(r){var e=n.useSignal(r);if(!("current"in e))Object.defineProperty(e,"current",o);return e};//# sourceMappingURL=utils.js.map
|
package/utils/dist/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sources":["../src/index.tsx"],"sourcesContent":["import { ReadonlySignal, Signal } from \"@preact/signals-core\";\nimport { useSignal } from \"@preact/signals-react\";\nimport { useSignals } from \"@preact/signals-react/runtime\";\nimport { Fragment, createElement, useMemo, ReactNode } from \"react\";\n\ninterface ShowProps<T = boolean> {\n\twhen: Signal<T> | ReadonlySignal<T> | (() => T);\n\tfallback?: ReactNode;\n\tchildren: ReactNode | ((value: NonNullable<T>) => ReactNode);\n}\n\nconst Item = (props: any) => {\n\tuseSignals();\n\treturn typeof props.children === \"function\"\n\t\t? props.children(props.v, props.i)\n\t\t: props.children;\n};\n\nItem.displayName = \"Item\";\n\nexport function Show<T = boolean>(props: ShowProps<T>): JSX.Element | null {\n\tuseSignals();\n\tconst value =\n\t\ttypeof props.when === \"function\" ? props.when() : props.when.value;\n\tif (!value) return (props.fallback as JSX.Element) || null;\n\treturn <Item v={value} children={props.children} />;\n}\n\nShow.displayName = \"Show\";\n\ninterface ForProps<T> {\n\teach:\n\t\t| Signal<Array<T>>\n\t\t| ReadonlySignal<Array<T>>\n\t\t| (() => Signal<Array<T>> | ReadonlySignal<Array<T>>);\n\tfallback?: ReactNode;\n\tchildren: (value: T, index: number) => ReactNode;\n}\n\nexport function For<T>(props: ForProps<T>): JSX.Element | null {\n\tuseSignals();\n\tconst cache = useMemo(() => new Map(), []);\n\
|
|
1
|
+
{"version":3,"file":"utils.js","sources":["../src/index.tsx"],"sourcesContent":["import { ReadonlySignal, Signal } from \"@preact/signals-core\";\nimport { useSignal } from \"@preact/signals-react\";\nimport { useSignals } from \"@preact/signals-react/runtime\";\nimport { Fragment, createElement, useMemo, ReactNode } from \"react\";\n\ninterface ShowProps<T = boolean> {\n\twhen: Signal<T> | ReadonlySignal<T> | (() => T);\n\tfallback?: ReactNode;\n\tchildren: ReactNode | ((value: NonNullable<T>) => ReactNode);\n}\n\nconst Item = (props: any) => {\n\tuseSignals();\n\treturn typeof props.children === \"function\"\n\t\t? props.children(props.v, props.i)\n\t\t: props.children;\n};\n\nItem.displayName = \"Item\";\n\nexport function Show<T = boolean>(props: ShowProps<T>): JSX.Element | null {\n\tuseSignals();\n\tconst value =\n\t\ttypeof props.when === \"function\" ? props.when() : props.when.value;\n\tif (!value) return (props.fallback as JSX.Element) || null;\n\treturn <Item v={value} children={props.children} />;\n}\n\nShow.displayName = \"Show\";\n\ninterface ForProps<T> {\n\teach:\n\t\t| Signal<Array<T>>\n\t\t| ReadonlySignal<Array<T>>\n\t\t| (() => Array<T> | Signal<Array<T>> | ReadonlySignal<Array<T>>);\n\tfallback?: ReactNode;\n\tchildren: (value: T, index: number) => ReactNode;\n}\n\nexport function For<T>(props: ForProps<T>): JSX.Element | null {\n\tuseSignals();\n\tconst cache = useMemo(() => new Map(), []);\n\tconst list = (\n\t\ttypeof props.each === \"function\" ? props.each() : props.each\n\t) as Signal<Array<T>> | Array<T>;\n\n\tconst listValue = list instanceof Signal ? list.value : list;\n\n\tif (!listValue.length) return (props.fallback as JSX.Element) || null;\n\n\tconst removed = new Set(cache.keys());\n\n\tconst items = listValue.map((value, key) => {\n\t\tremoved.delete(value);\n\t\tif (!cache.has(value)) {\n\t\t\tconst result = (\n\t\t\t\t<Item v={value} key={key} i={key} children={props.children} />\n\t\t\t);\n\t\t\tcache.set(value, result);\n\t\t\treturn result;\n\t\t}\n\t\treturn cache.get(value);\n\t});\n\n\tremoved.forEach(value => {\n\t\tcache.delete(value);\n\t});\n\n\treturn createElement(Fragment, { children: items });\n}\n\nFor.displayName = \"For\";\n\nexport function useLiveSignal<T>(value: T): Signal<T> {\n\tconst s = useSignal(value);\n\tif (s.peek() !== value) s.value = value;\n\treturn s;\n}\n\nexport function useSignalRef<T>(value: T) {\n\tconst ref = useSignal(value) as Signal<T> & { current: T };\n\tif (!(\"current\" in ref))\n\t\tObject.defineProperty(ref, \"current\", refSignalProto);\n\treturn ref;\n}\nconst refSignalProto = {\n\tconfigurable: true,\n\tget(this: Signal) {\n\t\treturn this.value;\n\t},\n\tset(this: Signal, v: any) {\n\t\tthis.value = v;\n\t},\n};\n"],"names":["Item","props","useSignals","children","v","i","displayName","Show","value","when","fallback","createElement","For","cache","useMemo","Map","list","each","listValue","Signal","length","removed","Set","keys","items","map","key","has","result","set","get","forEach","Fragment","refSignalProto","configurable","this","exports","useLiveSignal","s","useSignal","peek","useSignalRef","ref","Object","defineProperty"],"mappings":"uIAWMA,EAAO,SAACC,GACbC,EAAUA,aACV,MAAiC,mBAAnBD,EAAME,SACjBF,EAAME,SAASF,EAAMG,EAAGH,EAAMI,GAC9BJ,EAAME,QACV,EAEAH,EAAKM,YAAc,OAEb,SAAUC,EAAkBN,GACjCC,eACA,IAAMM,EACiB,mBAAfP,EAAMQ,KAAsBR,EAAMQ,OAASR,EAAMQ,KAAKD,MAC9D,IAAKA,EAAO,OAAQP,EAAMS,UAA4B,UACtD,OAAOC,EAACA,cAAAX,EAAK,CAAAI,EAAGI,EAAOL,SAAUF,EAAME,UACxC,CAEAI,EAAKD,YAAc,OAWH,SAAAM,EAAOX,GACtBC,EAAAA,aACA,IAAMW,EAAQC,EAAAA,QAAQ,WAAM,OAAA,IAAIC,GAAK,EAAE,IACjCC,EACiB,mBAAff,EAAMgB,KAAsBhB,EAAMgB,OAAShB,EAAMgB,KAGnDC,EAAYF,aAAgBG,EAAAA,OAASH,EAAKR,MAAQQ,EAExD,IAAKE,EAAUE,OAAQ,OAAQnB,EAAMS,UAA4B,KAEjE,IAAMW,EAAU,IAAIC,IAAIT,EAAMU,QAExBC,EAAQN,EAAUO,IAAI,SAACjB,EAAOkB,GACnCL,EAAO,OAAQb,GACf,IAAKK,EAAMc,IAAInB,GAAQ,CACtB,IAAMoB,EACLjB,EAAAA,cAACX,GAAKI,EAAGI,EAAOkB,IAAKA,EAAKrB,EAAGqB,EAAKvB,SAAUF,EAAME,WAEnDU,EAAMgB,IAAIrB,EAAOoB,GACjB,OAAOA,CACR,CACA,OAAOf,EAAMiB,IAAItB,EAClB,GAEAa,EAAQU,QAAQ,SAAAvB,GACfK,EAAK,OAAQL,EACd,GAEA,OAAOG,EAAAA,cAAcqB,EAAAA,SAAU,CAAE7B,SAAUqB,GAC5C,CAEAZ,EAAIN,YAAc,MAclB,IAAM2B,EAAiB,CACtBC,cAAc,EACdJ,IAAG,WACF,OAAWK,KAAC3B,KACb,EACAqB,aAAkBzB,GACjB+B,KAAK3B,MAAQJ,CACd,GACAgC,QAAAxB,IAAAA,EAAAwB,QAAA7B,KAAAA,EAAA6B,QAAAC,cApBe,SAAiB7B,GAChC,IAAM8B,EAAIC,EAASA,UAAC/B,GACpB,GAAI8B,EAAEE,SAAWhC,EAAO8B,EAAE9B,MAAQA,EAClC,OAAO8B,CACR,EAgBCF,QAAAK,aAdK,SAA0BjC,GAC/B,IAAMkC,EAAMH,YAAU/B,GACtB,KAAM,YAAakC,GAClBC,OAAOC,eAAeF,EAAK,UAAWT,GACvC,OAAOS,CACR"}
|
package/utils/dist/utils.min.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?n(exports,require("@preact/signals-react"),require("@preact/signals-react/runtime"),require("react")):"function"==typeof define&&define.amd?define(["exports","@preact/signals-react","@preact/signals-react/runtime","react"],n):n((e||self).reactSignalsutils={},e.signalsReact,e.reactSignalsRuntime,e.react)}(this,function(e,n,r,t){var
|
|
1
|
+
!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?n(exports,require("@preact/signals-core"),require("@preact/signals-react"),require("@preact/signals-react/runtime"),require("react")):"function"==typeof define&&define.amd?define(["exports","@preact/signals-core","@preact/signals-react","@preact/signals-react/runtime","react"],n):n((e||self).reactSignalsutils={},e.preactSignalsCore,e.signalsReact,e.reactSignalsRuntime,e.react)}(this,function(e,n,r,t,i){var u=function(e){t.useSignals();return"function"==typeof e.children?e.children(e.v,e.i):e.children};u.displayName="Item";function c(e){t.useSignals();var n="function"==typeof e.when?e.when():e.when.value;if(!n)return e.fallback||null;else return i.createElement(u,{v:n,children:e.children})}c.displayName="Show";function f(e){t.useSignals();var r=i.useMemo(function(){return new Map},[]),c="function"==typeof e.each?e.each():e.each,f=c instanceof n.Signal?c.value:c;if(!f.length)return e.fallback||null;var o=new Set(r.keys()),a=f.map(function(n,t){o.delete(n);if(!r.has(n)){var c=i.createElement(u,{v:n,key:t,i:t,children:e.children});r.set(n,c);return c}return r.get(n)});o.forEach(function(e){r.delete(e)});return i.createElement(i.Fragment,{children:a})}f.displayName="For";var o={configurable:!0,get:function(){return this.value},set:function(e){this.value=e}};e.For=f;e.Show=c;e.useLiveSignal=function(e){var n=r.useSignal(e);if(n.peek()!==e)n.value=e;return n};e.useSignalRef=function(e){var n=r.useSignal(e);if(!("current"in n))Object.defineProperty(n,"current",o);return n}});//# sourceMappingURL=utils.min.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.min.js","sources":["../src/index.tsx"],"sourcesContent":["import { ReadonlySignal, Signal } from \"@preact/signals-core\";\nimport { useSignal } from \"@preact/signals-react\";\nimport { useSignals } from \"@preact/signals-react/runtime\";\nimport { Fragment, createElement, useMemo, ReactNode } from \"react\";\n\ninterface ShowProps<T = boolean> {\n\twhen: Signal<T> | ReadonlySignal<T> | (() => T);\n\tfallback?: ReactNode;\n\tchildren: ReactNode | ((value: NonNullable<T>) => ReactNode);\n}\n\nconst Item = (props: any) => {\n\tuseSignals();\n\treturn typeof props.children === \"function\"\n\t\t? props.children(props.v, props.i)\n\t\t: props.children;\n};\n\nItem.displayName = \"Item\";\n\nexport function Show<T = boolean>(props: ShowProps<T>): JSX.Element | null {\n\tuseSignals();\n\tconst value =\n\t\ttypeof props.when === \"function\" ? props.when() : props.when.value;\n\tif (!value) return (props.fallback as JSX.Element) || null;\n\treturn <Item v={value} children={props.children} />;\n}\n\nShow.displayName = \"Show\";\n\ninterface ForProps<T> {\n\teach:\n\t\t| Signal<Array<T>>\n\t\t| ReadonlySignal<Array<T>>\n\t\t| (() => Signal<Array<T>> | ReadonlySignal<Array<T>>);\n\tfallback?: ReactNode;\n\tchildren: (value: T, index: number) => ReactNode;\n}\n\nexport function For<T>(props: ForProps<T>): JSX.Element | null {\n\tuseSignals();\n\tconst cache = useMemo(() => new Map(), []);\n\
|
|
1
|
+
{"version":3,"file":"utils.min.js","sources":["../src/index.tsx"],"sourcesContent":["import { ReadonlySignal, Signal } from \"@preact/signals-core\";\nimport { useSignal } from \"@preact/signals-react\";\nimport { useSignals } from \"@preact/signals-react/runtime\";\nimport { Fragment, createElement, useMemo, ReactNode } from \"react\";\n\ninterface ShowProps<T = boolean> {\n\twhen: Signal<T> | ReadonlySignal<T> | (() => T);\n\tfallback?: ReactNode;\n\tchildren: ReactNode | ((value: NonNullable<T>) => ReactNode);\n}\n\nconst Item = (props: any) => {\n\tuseSignals();\n\treturn typeof props.children === \"function\"\n\t\t? props.children(props.v, props.i)\n\t\t: props.children;\n};\n\nItem.displayName = \"Item\";\n\nexport function Show<T = boolean>(props: ShowProps<T>): JSX.Element | null {\n\tuseSignals();\n\tconst value =\n\t\ttypeof props.when === \"function\" ? props.when() : props.when.value;\n\tif (!value) return (props.fallback as JSX.Element) || null;\n\treturn <Item v={value} children={props.children} />;\n}\n\nShow.displayName = \"Show\";\n\ninterface ForProps<T> {\n\teach:\n\t\t| Signal<Array<T>>\n\t\t| ReadonlySignal<Array<T>>\n\t\t| (() => Array<T> | Signal<Array<T>> | ReadonlySignal<Array<T>>);\n\tfallback?: ReactNode;\n\tchildren: (value: T, index: number) => ReactNode;\n}\n\nexport function For<T>(props: ForProps<T>): JSX.Element | null {\n\tuseSignals();\n\tconst cache = useMemo(() => new Map(), []);\n\tconst list = (\n\t\ttypeof props.each === \"function\" ? props.each() : props.each\n\t) as Signal<Array<T>> | Array<T>;\n\n\tconst listValue = list instanceof Signal ? list.value : list;\n\n\tif (!listValue.length) return (props.fallback as JSX.Element) || null;\n\n\tconst removed = new Set(cache.keys());\n\n\tconst items = listValue.map((value, key) => {\n\t\tremoved.delete(value);\n\t\tif (!cache.has(value)) {\n\t\t\tconst result = (\n\t\t\t\t<Item v={value} key={key} i={key} children={props.children} />\n\t\t\t);\n\t\t\tcache.set(value, result);\n\t\t\treturn result;\n\t\t}\n\t\treturn cache.get(value);\n\t});\n\n\tremoved.forEach(value => {\n\t\tcache.delete(value);\n\t});\n\n\treturn createElement(Fragment, { children: items });\n}\n\nFor.displayName = \"For\";\n\nexport function useLiveSignal<T>(value: T): Signal<T> {\n\tconst s = useSignal(value);\n\tif (s.peek() !== value) s.value = value;\n\treturn s;\n}\n\nexport function useSignalRef<T>(value: T) {\n\tconst ref = useSignal(value) as Signal<T> & { current: T };\n\tif (!(\"current\" in ref))\n\t\tObject.defineProperty(ref, \"current\", refSignalProto);\n\treturn ref;\n}\nconst refSignalProto = {\n\tconfigurable: true,\n\tget(this: Signal) {\n\t\treturn this.value;\n\t},\n\tset(this: Signal, v: any) {\n\t\tthis.value = v;\n\t},\n};\n"],"names":["Item","props","useSignals","children","v","i","displayName","Show","value","when","fallback","createElement","For","cache","useMemo","Map","list","each","listValue","Signal","length","removed","Set","keys","items","map","key","has","result","set","get","forEach","Fragment","refSignalProto","configurable","this","exports","useLiveSignal","s","useSignal","peek","useSignalRef","ref","Object","defineProperty"],"mappings":"sgBAWA,IAAMA,EAAO,SAACC,GACbC,EAAUA,aACV,MAAiC,mBAAnBD,EAAME,SACjBF,EAAME,SAASF,EAAMG,EAAGH,EAAMI,GAC9BJ,EAAME,QACV,EAEAH,EAAKM,YAAc,OAEb,SAAUC,EAAkBN,GACjCC,eACA,IAAMM,EACiB,mBAAfP,EAAMQ,KAAsBR,EAAMQ,OAASR,EAAMQ,KAAKD,MAC9D,IAAKA,EAAO,OAAQP,EAAMS,UAA4B,UACtD,OAAOC,EAACA,cAAAX,EAAK,CAAAI,EAAGI,EAAOL,SAAUF,EAAME,UACxC,CAEAI,EAAKD,YAAc,OAWH,SAAAM,EAAOX,GACtBC,EAAAA,aACA,IAAMW,EAAQC,EAAAA,QAAQ,WAAM,OAAA,IAAIC,GAAK,EAAE,IACjCC,EACiB,mBAAff,EAAMgB,KAAsBhB,EAAMgB,OAAShB,EAAMgB,KAGnDC,EAAYF,aAAgBG,EAAAA,OAASH,EAAKR,MAAQQ,EAExD,IAAKE,EAAUE,OAAQ,OAAQnB,EAAMS,UAA4B,KAEjE,IAAMW,EAAU,IAAIC,IAAIT,EAAMU,QAExBC,EAAQN,EAAUO,IAAI,SAACjB,EAAOkB,GACnCL,EAAO,OAAQb,GACf,IAAKK,EAAMc,IAAInB,GAAQ,CACtB,IAAMoB,EACLjB,EAAAA,cAACX,GAAKI,EAAGI,EAAOkB,IAAKA,EAAKrB,EAAGqB,EAAKvB,SAAUF,EAAME,WAEnDU,EAAMgB,IAAIrB,EAAOoB,GACjB,OAAOA,CACR,CACA,OAAOf,EAAMiB,IAAItB,EAClB,GAEAa,EAAQU,QAAQ,SAAAvB,GACfK,EAAK,OAAQL,EACd,GAEA,OAAOG,EAAAA,cAAcqB,EAAAA,SAAU,CAAE7B,SAAUqB,GAC5C,CAEAZ,EAAIN,YAAc,MAclB,IAAM2B,EAAiB,CACtBC,cAAc,EACdJ,IAAG,WACF,OAAWK,KAAC3B,KACb,EACAqB,aAAkBzB,GACjB+B,KAAK3B,MAAQJ,CACd,GACAgC,EAAAxB,IAAAA,EAAAwB,EAAA7B,KAAAA,EAAA6B,EAAAC,cApBe,SAAiB7B,GAChC,IAAM8B,EAAIC,EAASA,UAAC/B,GACpB,GAAI8B,EAAEE,SAAWhC,EAAO8B,EAAE9B,MAAQA,EAClC,OAAO8B,CACR,EAgBCF,EAAAK,aAdK,SAA0BjC,GAC/B,IAAMkC,EAAMH,YAAU/B,GACtB,KAAM,YAAakC,GAClBC,OAAOC,eAAeF,EAAK,UAAWT,GACvC,OAAOS,CACR,CASC"}
|
package/utils/dist/utils.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{useSignal}from"@preact/signals-react";import{useSignals as
|
|
1
|
+
import{Signal as t}from"@preact/signals-core";import{useSignal}from"@preact/signals-react";import{useSignals as n}from"@preact/signals-react/runtime";import{createElement as r,useMemo as e,Fragment as o}from"react";const c=t=>{n();return"function"==typeof t.children?t.children(t.v,t.i):t.children};c.displayName="Item";function i(t){n();const e="function"==typeof t.when?t.when():t.when.value;if(!e)return t.fallback||null;else return r(c,{v:e,children:t.children})}i.displayName="Show";function u(i){n();const u=e(()=>new Map,[]),f="function"==typeof i.each?i.each():i.each,s=f instanceof t?f.value:f;if(!s.length)return i.fallback||null;const a=new Set(u.keys()),l=s.map((t,n)=>{a.delete(t);if(!u.has(t)){const e=r(c,{v:t,key:n,i:n,children:i.children});u.set(t,e);return e}return u.get(t)});a.forEach(t=>{u.delete(t)});return r(o,{children:l})}u.displayName="For";function f(t){const n=useSignal(t);if(n.peek()!==t)n.value=t;return n}function s(t){const n=useSignal(t);if(!("current"in n))Object.defineProperty(n,"current",a);return n}const a={configurable:!0,get(){return this.value},set(t){this.value=t}};export{u as For,i as Show,f as useLiveSignal,s as useSignalRef};//# sourceMappingURL=utils.mjs.map
|
package/utils/dist/utils.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.mjs","sources":["../src/index.tsx"],"sourcesContent":["import { ReadonlySignal, Signal } from \"@preact/signals-core\";\nimport { useSignal } from \"@preact/signals-react\";\nimport { useSignals } from \"@preact/signals-react/runtime\";\nimport { Fragment, createElement, useMemo, ReactNode } from \"react\";\n\ninterface ShowProps<T = boolean> {\n\twhen: Signal<T> | ReadonlySignal<T> | (() => T);\n\tfallback?: ReactNode;\n\tchildren: ReactNode | ((value: NonNullable<T>) => ReactNode);\n}\n\nconst Item = (props: any) => {\n\tuseSignals();\n\treturn typeof props.children === \"function\"\n\t\t? props.children(props.v, props.i)\n\t\t: props.children;\n};\n\nItem.displayName = \"Item\";\n\nexport function Show<T = boolean>(props: ShowProps<T>): JSX.Element | null {\n\tuseSignals();\n\tconst value =\n\t\ttypeof props.when === \"function\" ? props.when() : props.when.value;\n\tif (!value) return (props.fallback as JSX.Element) || null;\n\treturn <Item v={value} children={props.children} />;\n}\n\nShow.displayName = \"Show\";\n\ninterface ForProps<T> {\n\teach:\n\t\t| Signal<Array<T>>\n\t\t| ReadonlySignal<Array<T>>\n\t\t| (() => Signal<Array<T>> | ReadonlySignal<Array<T>>);\n\tfallback?: ReactNode;\n\tchildren: (value: T, index: number) => ReactNode;\n}\n\nexport function For<T>(props: ForProps<T>): JSX.Element | null {\n\tuseSignals();\n\tconst cache = useMemo(() => new Map(), []);\n\
|
|
1
|
+
{"version":3,"file":"utils.mjs","sources":["../src/index.tsx"],"sourcesContent":["import { ReadonlySignal, Signal } from \"@preact/signals-core\";\nimport { useSignal } from \"@preact/signals-react\";\nimport { useSignals } from \"@preact/signals-react/runtime\";\nimport { Fragment, createElement, useMemo, ReactNode } from \"react\";\n\ninterface ShowProps<T = boolean> {\n\twhen: Signal<T> | ReadonlySignal<T> | (() => T);\n\tfallback?: ReactNode;\n\tchildren: ReactNode | ((value: NonNullable<T>) => ReactNode);\n}\n\nconst Item = (props: any) => {\n\tuseSignals();\n\treturn typeof props.children === \"function\"\n\t\t? props.children(props.v, props.i)\n\t\t: props.children;\n};\n\nItem.displayName = \"Item\";\n\nexport function Show<T = boolean>(props: ShowProps<T>): JSX.Element | null {\n\tuseSignals();\n\tconst value =\n\t\ttypeof props.when === \"function\" ? props.when() : props.when.value;\n\tif (!value) return (props.fallback as JSX.Element) || null;\n\treturn <Item v={value} children={props.children} />;\n}\n\nShow.displayName = \"Show\";\n\ninterface ForProps<T> {\n\teach:\n\t\t| Signal<Array<T>>\n\t\t| ReadonlySignal<Array<T>>\n\t\t| (() => Array<T> | Signal<Array<T>> | ReadonlySignal<Array<T>>);\n\tfallback?: ReactNode;\n\tchildren: (value: T, index: number) => ReactNode;\n}\n\nexport function For<T>(props: ForProps<T>): JSX.Element | null {\n\tuseSignals();\n\tconst cache = useMemo(() => new Map(), []);\n\tconst list = (\n\t\ttypeof props.each === \"function\" ? props.each() : props.each\n\t) as Signal<Array<T>> | Array<T>;\n\n\tconst listValue = list instanceof Signal ? list.value : list;\n\n\tif (!listValue.length) return (props.fallback as JSX.Element) || null;\n\n\tconst removed = new Set(cache.keys());\n\n\tconst items = listValue.map((value, key) => {\n\t\tremoved.delete(value);\n\t\tif (!cache.has(value)) {\n\t\t\tconst result = (\n\t\t\t\t<Item v={value} key={key} i={key} children={props.children} />\n\t\t\t);\n\t\t\tcache.set(value, result);\n\t\t\treturn result;\n\t\t}\n\t\treturn cache.get(value);\n\t});\n\n\tremoved.forEach(value => {\n\t\tcache.delete(value);\n\t});\n\n\treturn createElement(Fragment, { children: items });\n}\n\nFor.displayName = \"For\";\n\nexport function useLiveSignal<T>(value: T): Signal<T> {\n\tconst s = useSignal(value);\n\tif (s.peek() !== value) s.value = value;\n\treturn s;\n}\n\nexport function useSignalRef<T>(value: T) {\n\tconst ref = useSignal(value) as Signal<T> & { current: T };\n\tif (!(\"current\" in ref))\n\t\tObject.defineProperty(ref, \"current\", refSignalProto);\n\treturn ref;\n}\nconst refSignalProto = {\n\tconfigurable: true,\n\tget(this: Signal) {\n\t\treturn this.value;\n\t},\n\tset(this: Signal, v: any) {\n\t\tthis.value = v;\n\t},\n};\n"],"names":["Item","props","useSignals","children","v","i","displayName","Show","value","when","fallback","createElement","For","cache","useMemo","Map","list","each","listValue","Signal","length","removed","Set","keys","items","map","key","delete","has","result","set","get","forEach","Fragment","useLiveSignal","s","useSignal","peek","useSignalRef","ref","Object","defineProperty","refSignalProto","configurable","this"],"mappings":"uNAWA,MAAMA,EAAQC,IACbC,IACA,MAAiC,mBAAnBD,EAAME,SACjBF,EAAME,SAASF,EAAMG,EAAGH,EAAMI,GAC9BJ,EAAME,UAGVH,EAAKM,YAAc,OAEb,SAAUC,EAAkBN,GACjCC,IACA,MAAMM,EACiB,mBAAfP,EAAMQ,KAAsBR,EAAMQ,OAASR,EAAMQ,KAAKD,MAC9D,IAAKA,EAAO,OAAQP,EAAMS,UAA4B,UACtD,OAAOC,EAACX,EAAK,CAAAI,EAAGI,EAAOL,SAAUF,EAAME,UACxC,CAEAI,EAAKD,YAAc,gBAWHM,EAAOX,GACtBC,IACA,MAAMW,EAAQC,EAAQ,IAAM,IAAIC,IAAO,IACjCC,EACiB,mBAAff,EAAMgB,KAAsBhB,EAAMgB,OAAShB,EAAMgB,KAGnDC,EAAYF,aAAgBG,EAASH,EAAKR,MAAQQ,EAExD,IAAKE,EAAUE,OAAQ,OAAQnB,EAAMS,UAA4B,KAEjE,MAAMW,EAAU,IAAIC,IAAIT,EAAMU,QAExBC,EAAQN,EAAUO,IAAI,CAACjB,EAAOkB,KACnCL,EAAQM,OAAOnB,GACf,IAAKK,EAAMe,IAAIpB,GAAQ,CACtB,MAAMqB,EACLlB,EAACX,GAAKI,EAAGI,EAAOkB,IAAKA,EAAKrB,EAAGqB,EAAKvB,SAAUF,EAAME,WAEnDU,EAAMiB,IAAItB,EAAOqB,GACjB,OAAOA,CACR,CACA,OAAOhB,EAAMkB,IAAIvB,EAAK,GAGvBa,EAAQW,QAAQxB,IACfK,EAAMc,OAAOnB,KAGd,OAAOG,EAAcsB,EAAU,CAAE9B,SAAUqB,GAC5C,CAEAZ,EAAIN,YAAc,MAEZ,SAAU4B,EAAiB1B,GAChC,MAAM2B,EAAIC,UAAU5B,GACpB,GAAI2B,EAAEE,SAAW7B,EAAO2B,EAAE3B,MAAQA,EAClC,OAAO2B,CACR,CAEM,SAAUG,EAAgB9B,GAC/B,MAAM+B,EAAMH,UAAU5B,GACtB,KAAM,YAAa+B,GAClBC,OAAOC,eAAeF,EAAK,UAAWG,GACvC,OAAOH,CACR,CACA,MAAMG,EAAiB,CACtBC,cAAc,EACdZ,MACC,OAAOa,KAAKpC,KACb,EACAsB,IAAkB1B,GACjBwC,KAAKpC,MAAQJ,CACd,UACAQ,SAAAL,UAAA2B,mBAAAI"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{useSignal}from"@preact/signals-react";import{useSignals as
|
|
1
|
+
import{Signal as r}from"@preact/signals-core";import{useSignal}from"@preact/signals-react";import{useSignals as n}from"@preact/signals-react/runtime";import{createElement as t,useMemo as e,Fragment as i}from"react";var o=function(r){n();return"function"==typeof r.children?r.children(r.v,r.i):r.children};o.displayName="Item";function u(r){n();var e="function"==typeof r.when?r.when():r.when.value;if(!e)return r.fallback||null;else return t(o,{v:e,children:r.children})}u.displayName="Show";function c(u){n();var c=e(function(){return new Map},[]),f="function"==typeof u.each?u.each():u.each,a=f instanceof r?f.value:f;if(!a.length)return u.fallback||null;var l=new Set(c.keys()),p=a.map(function(r,n){l.delete(r);if(!c.has(r)){var e=t(o,{v:r,key:n,i:n,children:u.children});c.set(r,e);return e}return c.get(r)});l.forEach(function(r){c.delete(r)});return t(i,{children:p})}c.displayName="For";function f(r){var n=useSignal(r);if(n.peek()!==r)n.value=r;return n}function a(r){var n=useSignal(r);if(!("current"in n))Object.defineProperty(n,"current",l);return n}var l={configurable:!0,get:function(){return this.value},set:function(r){this.value=r}};export{c as For,u as Show,f as useLiveSignal,a as useSignalRef};//# sourceMappingURL=utils.module.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.module.js","sources":["../src/index.tsx"],"sourcesContent":["import { ReadonlySignal, Signal } from \"@preact/signals-core\";\nimport { useSignal } from \"@preact/signals-react\";\nimport { useSignals } from \"@preact/signals-react/runtime\";\nimport { Fragment, createElement, useMemo, ReactNode } from \"react\";\n\ninterface ShowProps<T = boolean> {\n\twhen: Signal<T> | ReadonlySignal<T> | (() => T);\n\tfallback?: ReactNode;\n\tchildren: ReactNode | ((value: NonNullable<T>) => ReactNode);\n}\n\nconst Item = (props: any) => {\n\tuseSignals();\n\treturn typeof props.children === \"function\"\n\t\t? props.children(props.v, props.i)\n\t\t: props.children;\n};\n\nItem.displayName = \"Item\";\n\nexport function Show<T = boolean>(props: ShowProps<T>): JSX.Element | null {\n\tuseSignals();\n\tconst value =\n\t\ttypeof props.when === \"function\" ? props.when() : props.when.value;\n\tif (!value) return (props.fallback as JSX.Element) || null;\n\treturn <Item v={value} children={props.children} />;\n}\n\nShow.displayName = \"Show\";\n\ninterface ForProps<T> {\n\teach:\n\t\t| Signal<Array<T>>\n\t\t| ReadonlySignal<Array<T>>\n\t\t| (() => Signal<Array<T>> | ReadonlySignal<Array<T>>);\n\tfallback?: ReactNode;\n\tchildren: (value: T, index: number) => ReactNode;\n}\n\nexport function For<T>(props: ForProps<T>): JSX.Element | null {\n\tuseSignals();\n\tconst cache = useMemo(() => new Map(), []);\n\
|
|
1
|
+
{"version":3,"file":"utils.module.js","sources":["../src/index.tsx"],"sourcesContent":["import { ReadonlySignal, Signal } from \"@preact/signals-core\";\nimport { useSignal } from \"@preact/signals-react\";\nimport { useSignals } from \"@preact/signals-react/runtime\";\nimport { Fragment, createElement, useMemo, ReactNode } from \"react\";\n\ninterface ShowProps<T = boolean> {\n\twhen: Signal<T> | ReadonlySignal<T> | (() => T);\n\tfallback?: ReactNode;\n\tchildren: ReactNode | ((value: NonNullable<T>) => ReactNode);\n}\n\nconst Item = (props: any) => {\n\tuseSignals();\n\treturn typeof props.children === \"function\"\n\t\t? props.children(props.v, props.i)\n\t\t: props.children;\n};\n\nItem.displayName = \"Item\";\n\nexport function Show<T = boolean>(props: ShowProps<T>): JSX.Element | null {\n\tuseSignals();\n\tconst value =\n\t\ttypeof props.when === \"function\" ? props.when() : props.when.value;\n\tif (!value) return (props.fallback as JSX.Element) || null;\n\treturn <Item v={value} children={props.children} />;\n}\n\nShow.displayName = \"Show\";\n\ninterface ForProps<T> {\n\teach:\n\t\t| Signal<Array<T>>\n\t\t| ReadonlySignal<Array<T>>\n\t\t| (() => Array<T> | Signal<Array<T>> | ReadonlySignal<Array<T>>);\n\tfallback?: ReactNode;\n\tchildren: (value: T, index: number) => ReactNode;\n}\n\nexport function For<T>(props: ForProps<T>): JSX.Element | null {\n\tuseSignals();\n\tconst cache = useMemo(() => new Map(), []);\n\tconst list = (\n\t\ttypeof props.each === \"function\" ? props.each() : props.each\n\t) as Signal<Array<T>> | Array<T>;\n\n\tconst listValue = list instanceof Signal ? list.value : list;\n\n\tif (!listValue.length) return (props.fallback as JSX.Element) || null;\n\n\tconst removed = new Set(cache.keys());\n\n\tconst items = listValue.map((value, key) => {\n\t\tremoved.delete(value);\n\t\tif (!cache.has(value)) {\n\t\t\tconst result = (\n\t\t\t\t<Item v={value} key={key} i={key} children={props.children} />\n\t\t\t);\n\t\t\tcache.set(value, result);\n\t\t\treturn result;\n\t\t}\n\t\treturn cache.get(value);\n\t});\n\n\tremoved.forEach(value => {\n\t\tcache.delete(value);\n\t});\n\n\treturn createElement(Fragment, { children: items });\n}\n\nFor.displayName = \"For\";\n\nexport function useLiveSignal<T>(value: T): Signal<T> {\n\tconst s = useSignal(value);\n\tif (s.peek() !== value) s.value = value;\n\treturn s;\n}\n\nexport function useSignalRef<T>(value: T) {\n\tconst ref = useSignal(value) as Signal<T> & { current: T };\n\tif (!(\"current\" in ref))\n\t\tObject.defineProperty(ref, \"current\", refSignalProto);\n\treturn ref;\n}\nconst refSignalProto = {\n\tconfigurable: true,\n\tget(this: Signal) {\n\t\treturn this.value;\n\t},\n\tset(this: Signal, v: any) {\n\t\tthis.value = v;\n\t},\n};\n"],"names":["Item","props","useSignals","children","v","i","displayName","Show","value","when","fallback","createElement","For","cache","useMemo","Map","list","each","listValue","Signal","length","removed","Set","keys","items","map","key","has","result","set","get","forEach","Fragment","useLiveSignal","s","useSignal","peek","useSignalRef","ref","Object","defineProperty","refSignalProto","configurable","this"],"mappings":"uNAWA,IAAMA,EAAO,SAACC,GACbC,IACA,MAAiC,mBAAnBD,EAAME,SACjBF,EAAME,SAASF,EAAMG,EAAGH,EAAMI,GAC9BJ,EAAME,QACV,EAEAH,EAAKM,YAAc,OAEb,SAAUC,EAAkBN,GACjCC,IACA,IAAMM,EACiB,mBAAfP,EAAMQ,KAAsBR,EAAMQ,OAASR,EAAMQ,KAAKD,MAC9D,IAAKA,EAAO,OAAQP,EAAMS,UAA4B,UACtD,OAAOC,EAACX,EAAK,CAAAI,EAAGI,EAAOL,SAAUF,EAAME,UACxC,CAEAI,EAAKD,YAAc,OAWH,SAAAM,EAAOX,GACtBC,IACA,IAAMW,EAAQC,EAAQ,WAAM,OAAA,IAAIC,GAAK,EAAE,IACjCC,EACiB,mBAAff,EAAMgB,KAAsBhB,EAAMgB,OAAShB,EAAMgB,KAGnDC,EAAYF,aAAgBG,EAASH,EAAKR,MAAQQ,EAExD,IAAKE,EAAUE,OAAQ,OAAQnB,EAAMS,UAA4B,KAEjE,IAAMW,EAAU,IAAIC,IAAIT,EAAMU,QAExBC,EAAQN,EAAUO,IAAI,SAACjB,EAAOkB,GACnCL,EAAO,OAAQb,GACf,IAAKK,EAAMc,IAAInB,GAAQ,CACtB,IAAMoB,EACLjB,EAACX,GAAKI,EAAGI,EAAOkB,IAAKA,EAAKrB,EAAGqB,EAAKvB,SAAUF,EAAME,WAEnDU,EAAMgB,IAAIrB,EAAOoB,GACjB,OAAOA,CACR,CACA,OAAOf,EAAMiB,IAAItB,EAClB,GAEAa,EAAQU,QAAQ,SAAAvB,GACfK,EAAK,OAAQL,EACd,GAEA,OAAOG,EAAcqB,EAAU,CAAE7B,SAAUqB,GAC5C,CAEAZ,EAAIN,YAAc,MAEF,SAAA2B,EAAiBzB,GAChC,IAAM0B,EAAIC,UAAU3B,GACpB,GAAI0B,EAAEE,SAAW5B,EAAO0B,EAAE1B,MAAQA,EAClC,OAAO0B,CACR,CAEM,SAAUG,EAAgB7B,GAC/B,IAAM8B,EAAMH,UAAU3B,GACtB,KAAM,YAAa8B,GAClBC,OAAOC,eAAeF,EAAK,UAAWG,GACvC,OAAOH,CACR,CACA,IAAMG,EAAiB,CACtBC,cAAc,EACdZ,IAAG,WACF,OAAWa,KAACnC,KACb,EACAqB,aAAkBzB,GACjBuC,KAAKnC,MAAQJ,CACd,UACAQ,SAAAL,UAAA0B,mBAAAI"}
|
package/utils/src/index.tsx
CHANGED
|
@@ -32,7 +32,7 @@ interface ForProps<T> {
|
|
|
32
32
|
each:
|
|
33
33
|
| Signal<Array<T>>
|
|
34
34
|
| ReadonlySignal<Array<T>>
|
|
35
|
-
| (() => Signal<Array<T>> | ReadonlySignal<Array<T>>);
|
|
35
|
+
| (() => Array<T> | Signal<Array<T>> | ReadonlySignal<Array<T>>);
|
|
36
36
|
fallback?: ReactNode;
|
|
37
37
|
children: (value: T, index: number) => ReactNode;
|
|
38
38
|
}
|
|
@@ -40,17 +40,17 @@ interface ForProps<T> {
|
|
|
40
40
|
export function For<T>(props: ForProps<T>): JSX.Element | null {
|
|
41
41
|
useSignals();
|
|
42
42
|
const cache = useMemo(() => new Map(), []);
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
>
|
|
47
|
-
).value;
|
|
43
|
+
const list = (
|
|
44
|
+
typeof props.each === "function" ? props.each() : props.each
|
|
45
|
+
) as Signal<Array<T>> | Array<T>;
|
|
48
46
|
|
|
49
|
-
|
|
47
|
+
const listValue = list instanceof Signal ? list.value : list;
|
|
48
|
+
|
|
49
|
+
if (!listValue.length) return (props.fallback as JSX.Element) || null;
|
|
50
50
|
|
|
51
51
|
const removed = new Set(cache.keys());
|
|
52
52
|
|
|
53
|
-
const items =
|
|
53
|
+
const items = listValue.map((value, key) => {
|
|
54
54
|
removed.delete(value);
|
|
55
55
|
if (!cache.has(value)) {
|
|
56
56
|
const result = (
|