@preact/signals-react 3.3.1 → 3.4.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 CHANGED
@@ -1,5 +1,15 @@
1
1
  # @preact/signals-react
2
2
 
3
+ ## 3.4.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [#777](https://github.com/preactjs/signals/pull/777) [`d31738f`](https://github.com/preactjs/signals/commit/d31738f646fda6bd00113b8e6e1dfae46e14f08e) Thanks [@JoviDeCroock](https://github.com/JoviDeCroock)! - Revert the changes to `useComputed`, sincere apologies for the inconvenience we've discussed this at length and are going to side on the perf side.
8
+
9
+ ### Patch Changes
10
+
11
+ - [#783](https://github.com/preactjs/signals/pull/783) [`86575b4`](https://github.com/preactjs/signals/commit/86575b41ec097c3ecdefc7b54a4cabfbe23f7984) Thanks [@JoviDeCroock](https://github.com/JoviDeCroock)! - Ensure `For` and `Show` account for nested reactivity
12
+
3
13
  ## 3.3.1
4
14
 
5
15
  ### Patch Changes
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@preact/signals-react",
3
- "version": "3.3.1",
3
+ "version": "3.4.0",
4
4
  "license": "MIT",
5
5
  "description": "Manage state with style in React",
6
6
  "keywords": [],
@@ -1 +1 @@
1
- var r=require("@preact/signals-react"),n=require("@preact/signals-react/runtime"),t=require("react"),e={configurable:!0,get:function(){return this.value},set:function(r){this.value=r}};exports.For=function(r){n.useSignals();var e=t.useMemo(function(){return new Map},[]),u=("function"==typeof r.each?r.each():r.each).value;if(!u.length)return r.fallback||null;var i=u.map(function(n,t){if(!e.has(n))e.set(n,r.children(n,t));return e.get(n)});return t.createElement(t.Fragment,{children:i})};exports.Show=function(r){n.useSignals();var t=r.when.value;if(!t)return r.fallback||null;else return"function"==typeof r.children?r.children(t):r.children};exports.useLiveSignal=function(n){var t=r.useSignal(n);if(t.peek()!==n)t.value=n;return t};exports.useSignalRef=function(n){var t=r.useSignal(n);if(!("current"in t))Object.defineProperty(t,"current",e);return t};//# sourceMappingURL=utils.js.map
1
+ var r=require("@preact/signals-react"),n=require("@preact/signals-react/runtime"),e=require("react"),t=function(r){n.useSignals();var e="function"==typeof r.children?r.children(r.v,r.i):r.children;if(r.cache)r.cache.set(r.v,e);return e},i={configurable:!0,get:function(){return this.value},set:function(r){this.value=r}};exports.For=function(r){n.useSignals();var i=e.useMemo(function(){return new Map},[]),u=("function"==typeof r.each?r.each():r.each).value;if(!u.length)return r.fallback||null;var c=u.map(function(n,u){if(!i.has(n))return e.createElement(t,{v:n,key:u,i:u,children:r.children,cache:i});else return i.get(n)});return e.createElement(e.Fragment,{children:c})};exports.Show=function(r){n.useSignals();var i=r.when.value;if(!i)return r.fallback||null;else return e.createElement(t,{v:i,children:r.children})};exports.useLiveSignal=function(n){var e=r.useSignal(n);if(e.peek()!==n)e.value=n;return e};exports.useSignalRef=function(n){var e=r.useSignal(n);if(!("current"in e))Object.defineProperty(e,"current",i);return e};//# sourceMappingURL=utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sources":["../src/index.ts"],"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 } from \"react\";\n\ninterface ShowProps<T = boolean> {\n\twhen: Signal<T> | ReadonlySignal<T>;\n\tfallback?: JSX.Element;\n\tchildren: JSX.Element | ((value: NonNullable<T>) => JSX.Element);\n}\n\nexport function Show<T = boolean>(props: ShowProps<T>): JSX.Element | null {\n\tuseSignals();\n\tconst value = props.when.value;\n\tif (!value) return props.fallback || null;\n\treturn typeof props.children === \"function\"\n\t\t? props.children(value)\n\t\t: props.children;\n}\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?: JSX.Element;\n\tchildren: (value: T, index: number) => JSX.Element;\n}\n\nexport function For<T>(props: ForProps<T>): JSX.Element | null {\n\tuseSignals();\n\tconst cache = useMemo(() => new Map(), []);\n\tlet list = (\n\t\t(typeof props.each === \"function\" ? props.each() : props.each) as Signal<\n\t\t\tArray<T>\n\t\t>\n\t).value;\n\n\tif (!list.length) return props.fallback || null;\n\n\tconst items = list.map((value, key) => {\n\t\tif (!cache.has(value)) {\n\t\t\tcache.set(value, props.children(value, key));\n\t\t}\n\t\treturn cache.get(value);\n\t});\n\treturn createElement(Fragment, { children: items });\n}\n\nexport function useLiveSignal<T>(value: Signal<T> | ReadonlySignal<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":["refSignalProto","configurable","get","this","value","set","v","exports","For","props","useSignals","cache","useMemo","Map","list","each","length","fallback","items","map","key","has","children","createElement","Fragment","Show","when","useLiveSignal","s","useSignal","peek","useSignalRef","ref","Object","defineProperty"],"mappings":"qGA6DMA,EAAiB,CACtBC,cAAc,EACdC,eACC,OAAOC,KAAKC,KACb,EACAC,IAAA,SAAkBC,GACjBH,KAAKC,MAAQE,CACd,GACAC,QAAAC,IAxCK,SAAiBC,GACtBC,EAAAA,aACA,IAAMC,EAAQC,EAAAA,QAAQ,WAAA,OAAU,IAAAC,GAAK,EAAE,IACnCC,GACoB,mBAAfL,EAAMM,KAAsBN,EAAMM,OAASN,EAAMM,MAGxDX,MAEF,IAAKU,EAAKE,OAAQ,OAAOP,EAAMQ,UAAY,KAE3C,IAAMC,EAAQJ,EAAKK,IAAI,SAACf,EAAOgB,GAC9B,IAAKT,EAAMU,IAAIjB,GACdO,EAAMN,IAAID,EAAOK,EAAMa,SAASlB,EAAOgB,IAExC,OAAOT,EAAMT,IAAIE,EAClB,GACA,OAAOmB,EAAaA,cAACC,EAAQA,SAAE,CAAEF,SAAUJ,GAC5C,EAsBCX,QAAAkB,cA1DiChB,GACjCC,EAAAA,aACA,IAAMN,EAAQK,EAAMiB,KAAKtB,MACzB,IAAKA,EAAO,OAAOK,EAAMQ,UAAY,UACrC,MAAiC,mBAAnBR,EAAMa,SACjBb,EAAMa,SAASlB,GACfK,EAAMa,QACV,EAmDCf,QAAAoB,uBApBgCvB,GAChC,IAAMwB,EAAIC,EAAAA,UAAUzB,GACpB,GAAIwB,EAAEE,SAAW1B,EAAOwB,EAAExB,MAAQA,EAClC,OAAOwB,CACR,EAgBCrB,QAAAwB,aAde,SAAgB3B,GAC/B,IAAM4B,EAAMH,EAASA,UAACzB,GACtB,KAAM,YAAa4B,GAClBC,OAAOC,eAAeF,EAAK,UAAWhC,GACvC,OAAOgC,CACR"}
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 } from \"react\";\n\ninterface ShowProps<T = boolean> {\n\twhen: Signal<T> | ReadonlySignal<T>;\n\tfallback?: JSX.Element;\n\tchildren: JSX.Element | ((value: NonNullable<T>) => JSX.Element);\n}\n\nconst Item = (props: any) => {\n\tuseSignals();\n\tconst result =\n\t\ttypeof props.children === \"function\"\n\t\t\t? props.children(props.v, props.i)\n\t\t\t: props.children;\n\tif (props.cache) {\n\t\tprops.cache.set(props.v, result);\n\t}\n\treturn result;\n};\n\nexport function Show<T = boolean>(props: ShowProps<T>): JSX.Element | null {\n\tuseSignals();\n\tconst value = props.when.value;\n\tif (!value) return props.fallback || null;\n\treturn <Item v={value} children={props.children} />;\n}\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?: JSX.Element;\n\tchildren: (value: T, index: number) => JSX.Element;\n}\n\nexport function For<T>(props: ForProps<T>): JSX.Element | null {\n\tuseSignals();\n\tconst cache = useMemo(() => new Map(), []);\n\tlet list = (\n\t\t(typeof props.each === \"function\" ? props.each() : props.each) as Signal<\n\t\t\tArray<T>\n\t\t>\n\t).value;\n\n\tif (!list.length) return props.fallback || null;\n\n\tconst items = list.map((value, key) => {\n\t\tif (!cache.has(value)) {\n\t\t\treturn (\n\t\t\t\t<Item\n\t\t\t\t\tv={value}\n\t\t\t\t\tkey={key}\n\t\t\t\t\ti={key}\n\t\t\t\t\tchildren={props.children}\n\t\t\t\t\tcache={cache}\n\t\t\t\t/>\n\t\t\t);\n\t\t}\n\t\treturn cache.get(value);\n\t});\n\treturn createElement(Fragment, { children: items });\n}\n\nexport function useLiveSignal<T>(value: Signal<T> | ReadonlySignal<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":["signalsReact","require","runtime","react","Item","props","useSignals","result","children","v","i","cache","set","refSignalProto","configurable","get","this","value","exports","For","useMemo","Map","list","each","length","fallback","items","map","key","has","createElement","Fragment","Show","when","useLiveSignal","s","useSignal","peek","useSignalRef","ref","Object","defineProperty"],"mappings":"AAWA,IAAAA,EAAAC,QAAA,yBAAAC,EAAAD,QAAA,iCAAAE,EAAAF,QAAA,SAAMG,EAAO,SAACC,GACbC,EAAUA,aACV,IAAMC,EACqB,mBAAnBF,EAAMG,SACVH,EAAMG,SAASH,EAAMI,EAAGJ,EAAMK,GAC9BL,EAAMG,SACV,GAAIH,EAAMM,MACTN,EAAMM,MAAMC,IAAIP,EAAMI,EAAGF,GAE1B,OAAOA,CACR,EA0DMM,EAAiB,CACtBC,cAAc,EACdC,IAAG,WACF,OAAWC,KAACC,KACb,EACAL,IAAA,SAAkBH,GACjBO,KAAKC,MAAQR,CACd,GACAS,QAAAC,aAhDsBd,GACtBC,EAAUA,aACV,IAAMK,EAAQS,EAAAA,QAAQ,WAAM,OAAA,IAAIC,GAAK,EAAE,IACnCC,GACoB,mBAAfjB,EAAMkB,KAAsBlB,EAAMkB,OAASlB,EAAMkB,MAGxDN,MAEF,IAAKK,EAAKE,OAAQ,OAAOnB,EAAMoB,UAAY,KAE3C,IAAMC,EAAQJ,EAAKK,IAAI,SAACV,EAAOW,GAC9B,IAAKjB,EAAMkB,IAAIZ,GACd,OACCa,EAAAA,cAAC1B,EACA,CAAAK,EAAGQ,EACHW,IAAKA,EACLlB,EAAGkB,EACHpB,SAAUH,EAAMG,SAChBG,MAAOA,SAIV,OAAOA,EAAMI,IAAIE,EAClB,GACA,OAAOa,EAAAA,cAAcC,EAAQA,SAAE,CAAEvB,SAAUkB,GAC5C,EAsBCR,QAAAc,cAhEiC3B,GACjCC,eACA,IAAMW,EAAQZ,EAAM4B,KAAKhB,MACzB,IAAKA,EAAO,OAAOZ,EAAMoB,UAAY,UACrC,OAAOK,gBAAC1B,EAAK,CAAAK,EAAGQ,EAAOT,SAAUH,EAAMG,UACxC,EA2DCU,QAAAgB,uBApBgCjB,GAChC,IAAMkB,EAAIC,YAAUnB,GACpB,GAAIkB,EAAEE,SAAWpB,EAAOkB,EAAElB,MAAQA,EAClC,OAAOkB,CACR,EAgBCjB,QAAAoB,aAde,SAAgBrB,GAC/B,IAAMsB,EAAMH,EAAAA,UAAUnB,GACtB,KAAM,YAAasB,GAClBC,OAAOC,eAAeF,EAAK,UAAW1B,GACvC,OAAO0B,CACR"}
@@ -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,t,r){var i={configurable:!0,get:function(){return this.value},set:function(e){this.value=e}};e.For=function(e){t.useSignals();var n=r.useMemo(function(){return new Map},[]),i=("function"==typeof e.each?e.each():e.each).value;if(!i.length)return e.fallback||null;var u=i.map(function(t,r){if(!n.has(t))n.set(t,e.children(t,r));return n.get(t)});return r.createElement(r.Fragment,{children:u})};e.Show=function(e){t.useSignals();var n=e.when.value;if(!n)return e.fallback||null;else return"function"==typeof e.children?e.children(n):e.children};e.useLiveSignal=function(e){var t=n.useSignal(e);if(t.peek()!==e)t.value=e;return t};e.useSignalRef=function(e){var t=n.useSignal(e);if(!("current"in t))Object.defineProperty(t,"current",i);return t}});//# sourceMappingURL=utils.min.js.map
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 i=function(e){r.useSignals();var n="function"==typeof e.children?e.children(e.v,e.i):e.children;if(e.cache)e.cache.set(e.v,n);return n},u={configurable:!0,get:function(){return this.value},set:function(e){this.value=e}};e.For=function(e){r.useSignals();var n=t.useMemo(function(){return new Map},[]),u=("function"==typeof e.each?e.each():e.each).value;if(!u.length)return e.fallback||null;var c=u.map(function(r,u){if(!n.has(r))return t.createElement(i,{v:r,key:u,i:u,children:e.children,cache:n});else return n.get(r)});return t.createElement(t.Fragment,{children:c})};e.Show=function(e){r.useSignals();var n=e.when.value;if(!n)return e.fallback||null;else return t.createElement(i,{v:n,children:e.children})};e.useLiveSignal=function(e){var r=n.useSignal(e);if(r.peek()!==e)r.value=e;return r};e.useSignalRef=function(e){var r=n.useSignal(e);if(!("current"in r))Object.defineProperty(r,"current",u);return r}});//# sourceMappingURL=utils.min.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.min.js","sources":["../src/index.ts"],"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 } from \"react\";\n\ninterface ShowProps<T = boolean> {\n\twhen: Signal<T> | ReadonlySignal<T>;\n\tfallback?: JSX.Element;\n\tchildren: JSX.Element | ((value: NonNullable<T>) => JSX.Element);\n}\n\nexport function Show<T = boolean>(props: ShowProps<T>): JSX.Element | null {\n\tuseSignals();\n\tconst value = props.when.value;\n\tif (!value) return props.fallback || null;\n\treturn typeof props.children === \"function\"\n\t\t? props.children(value)\n\t\t: props.children;\n}\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?: JSX.Element;\n\tchildren: (value: T, index: number) => JSX.Element;\n}\n\nexport function For<T>(props: ForProps<T>): JSX.Element | null {\n\tuseSignals();\n\tconst cache = useMemo(() => new Map(), []);\n\tlet list = (\n\t\t(typeof props.each === \"function\" ? props.each() : props.each) as Signal<\n\t\t\tArray<T>\n\t\t>\n\t).value;\n\n\tif (!list.length) return props.fallback || null;\n\n\tconst items = list.map((value, key) => {\n\t\tif (!cache.has(value)) {\n\t\t\tcache.set(value, props.children(value, key));\n\t\t}\n\t\treturn cache.get(value);\n\t});\n\treturn createElement(Fragment, { children: items });\n}\n\nexport function useLiveSignal<T>(value: Signal<T> | ReadonlySignal<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":["refSignalProto","configurable","get","this","value","set","v","exports","For","props","useSignals","cache","useMemo","Map","list","each","length","fallback","items","map","key","has","children","createElement","Fragment","Show","when","useLiveSignal","s","useSignal","peek","useSignalRef","ref","Object","defineProperty"],"mappings":"ybA6DA,IAAMA,EAAiB,CACtBC,cAAc,EACdC,eACC,OAAOC,KAAKC,KACb,EACAC,IAAA,SAAkBC,GACjBH,KAAKC,MAAQE,CACd,GACAC,EAAAC,IAxCK,SAAiBC,GACtBC,EAAAA,aACA,IAAMC,EAAQC,EAAAA,QAAQ,WAAA,OAAU,IAAAC,GAAK,EAAE,IACnCC,GACoB,mBAAfL,EAAMM,KAAsBN,EAAMM,OAASN,EAAMM,MAGxDX,MAEF,IAAKU,EAAKE,OAAQ,OAAOP,EAAMQ,UAAY,KAE3C,IAAMC,EAAQJ,EAAKK,IAAI,SAACf,EAAOgB,GAC9B,IAAKT,EAAMU,IAAIjB,GACdO,EAAMN,IAAID,EAAOK,EAAMa,SAASlB,EAAOgB,IAExC,OAAOT,EAAMT,IAAIE,EAClB,GACA,OAAOmB,EAAaA,cAACC,EAAQA,SAAE,CAAEF,SAAUJ,GAC5C,EAsBCX,EAAAkB,cA1DiChB,GACjCC,EAAAA,aACA,IAAMN,EAAQK,EAAMiB,KAAKtB,MACzB,IAAKA,EAAO,OAAOK,EAAMQ,UAAY,UACrC,MAAiC,mBAAnBR,EAAMa,SACjBb,EAAMa,SAASlB,GACfK,EAAMa,QACV,EAmDCf,EAAAoB,uBApBgCvB,GAChC,IAAMwB,EAAIC,EAAAA,UAAUzB,GACpB,GAAIwB,EAAEE,SAAW1B,EAAOwB,EAAExB,MAAQA,EAClC,OAAOwB,CACR,EAgBCrB,EAAAwB,aAde,SAAgB3B,GAC/B,IAAM4B,EAAMH,EAASA,UAACzB,GACtB,KAAM,YAAa4B,GAClBC,OAAOC,eAAeF,EAAK,UAAWhC,GACvC,OAAOgC,CACR,CASC"}
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 } from \"react\";\n\ninterface ShowProps<T = boolean> {\n\twhen: Signal<T> | ReadonlySignal<T>;\n\tfallback?: JSX.Element;\n\tchildren: JSX.Element | ((value: NonNullable<T>) => JSX.Element);\n}\n\nconst Item = (props: any) => {\n\tuseSignals();\n\tconst result =\n\t\ttypeof props.children === \"function\"\n\t\t\t? props.children(props.v, props.i)\n\t\t\t: props.children;\n\tif (props.cache) {\n\t\tprops.cache.set(props.v, result);\n\t}\n\treturn result;\n};\n\nexport function Show<T = boolean>(props: ShowProps<T>): JSX.Element | null {\n\tuseSignals();\n\tconst value = props.when.value;\n\tif (!value) return props.fallback || null;\n\treturn <Item v={value} children={props.children} />;\n}\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?: JSX.Element;\n\tchildren: (value: T, index: number) => JSX.Element;\n}\n\nexport function For<T>(props: ForProps<T>): JSX.Element | null {\n\tuseSignals();\n\tconst cache = useMemo(() => new Map(), []);\n\tlet list = (\n\t\t(typeof props.each === \"function\" ? props.each() : props.each) as Signal<\n\t\t\tArray<T>\n\t\t>\n\t).value;\n\n\tif (!list.length) return props.fallback || null;\n\n\tconst items = list.map((value, key) => {\n\t\tif (!cache.has(value)) {\n\t\t\treturn (\n\t\t\t\t<Item\n\t\t\t\t\tv={value}\n\t\t\t\t\tkey={key}\n\t\t\t\t\ti={key}\n\t\t\t\t\tchildren={props.children}\n\t\t\t\t\tcache={cache}\n\t\t\t\t/>\n\t\t\t);\n\t\t}\n\t\treturn cache.get(value);\n\t});\n\treturn createElement(Fragment, { children: items });\n}\n\nexport function useLiveSignal<T>(value: Signal<T> | ReadonlySignal<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":["g","f","exports","module","require","define","amd","globalThis","self","reactSignalsutils","signalsReact","reactSignalsRuntime","react","this","runtime","Item","props","useSignals","result","children","v","i","cache","set","refSignalProto","configurable","get","value","For","useMemo","Map","list","each","length","fallback","items","map","key","has","createElement","Fragment","Show","when","useLiveSignal","s","useSignal","peek","useSignalRef","ref","Object","defineProperty"],"mappings":"CAWA,SAAAA,EAAAC,GAAA,iBAAAC,SAAA,oBAAAC,OAAAF,EAAAC,QAAAE,QAAA,yBAAAA,QAAA,iCAAAA,QAAA,UAAA,mBAAAC,QAAAA,OAAAC,IAAAD,OAAA,CAAA,UAAA,wBAAA,gCAAA,SAAAJ,GAAAA,GAAAD,EAAA,oBAAAO,WAAAA,WAAAP,GAAAQ,MAAAC,kBAAA,CAAA,EAAAT,EAAAU,aAAAV,EAAAW,oBAAAX,EAAAY,MAAA,CAAA,CAAAC,KAAA,SAAAX,EAAAQ,EAAAI,EAAAF,GAAA,IAAMG,EAAO,SAACC,GACbC,EAAUA,aACV,IAAMC,EACqB,mBAAnBF,EAAMG,SACVH,EAAMG,SAASH,EAAMI,EAAGJ,EAAMK,GAC9BL,EAAMG,SACV,GAAIH,EAAMM,MACTN,EAAMM,MAAMC,IAAIP,EAAMI,EAAGF,GAE1B,OAAOA,CACR,EA0DMM,EAAiB,CACtBC,cAAc,EACdC,IAAG,WACF,OAAWb,KAACc,KACb,EACAJ,IAAA,SAAkBH,GACjBP,KAAKc,MAAQP,CACd,GACAlB,EAAA0B,aAhDsBZ,GACtBC,EAAUA,aACV,IAAMK,EAAQO,EAAAA,QAAQ,WAAM,OAAA,IAAIC,GAAK,EAAE,IACnCC,GACoB,mBAAff,EAAMgB,KAAsBhB,EAAMgB,OAAShB,EAAMgB,MAGxDL,MAEF,IAAKI,EAAKE,OAAQ,OAAOjB,EAAMkB,UAAY,KAE3C,IAAMC,EAAQJ,EAAKK,IAAI,SAACT,EAAOU,GAC9B,IAAKf,EAAMgB,IAAIX,GACd,OACCY,EAAAA,cAACxB,EACA,CAAAK,EAAGO,EACHU,IAAKA,EACLhB,EAAGgB,EACHlB,SAAUH,EAAMG,SAChBG,MAAOA,SAIV,OAAOA,EAAMI,IAAIC,EAClB,GACA,OAAOY,EAAAA,cAAcC,EAAQA,SAAE,CAAErB,SAAUgB,GAC5C,EAsBCjC,EAAAuC,cAhEiCzB,GACjCC,eACA,IAAMU,EAAQX,EAAM0B,KAAKf,MACzB,IAAKA,EAAO,OAAOX,EAAMkB,UAAY,UACrC,OAAOK,gBAACxB,EAAK,CAAAK,EAAGO,EAAOR,SAAUH,EAAMG,UACxC,EA2DCjB,EAAAyC,uBApBgChB,GAChC,IAAMiB,EAAIC,YAAUlB,GACpB,GAAIiB,EAAEE,SAAWnB,EAAOiB,EAAEjB,MAAQA,EAClC,OAAOiB,CACR,EAgBC1C,EAAA6C,aAde,SAAgBpB,GAC/B,IAAMqB,EAAMH,EAAAA,UAAUlB,GACtB,KAAM,YAAaqB,GAClBC,OAAOC,eAAeF,EAAK,UAAWxB,GACvC,OAAOwB,CACR,CASC"}
@@ -1 +1 @@
1
- import{useSignal}from"@preact/signals-react";import{useSignals as t}from"@preact/signals-react/runtime";import{useMemo as n,createElement as r,Fragment as e}from"react";function c(n){t();const r=n.when.value;if(!r)return n.fallback||null;else return"function"==typeof n.children?n.children(r):n.children}function i(c){t();const i=n(()=>new Map,[]);let o=("function"==typeof c.each?c.each():c.each).value;if(!o.length)return c.fallback||null;const u=o.map((t,n)=>{if(!i.has(t))i.set(t,c.children(t,n));return i.get(t)});return r(e,{children:u})}function o(t){const n=useSignal(t);if(n.peek()!==t)n.value=t;return n}function u(t){const n=useSignal(t);if(!("current"in n))Object.defineProperty(n,"current",f);return n}const f={configurable:!0,get(){return this.value},set(t){this.value=t}};export{i as For,c as Show,o as useLiveSignal,u as useSignalRef};//# sourceMappingURL=utils.mjs.map
1
+ import{useSignal}from"@preact/signals-react";import{useSignals as t}from"@preact/signals-react/runtime";import{createElement as n,useMemo as r,Fragment as e}from"react";const c=n=>{t();const r="function"==typeof n.children?n.children(n.v,n.i):n.children;if(n.cache)n.cache.set(n.v,r);return r};function i(r){t();const e=r.when.value;if(!e)return r.fallback||null;else return n(c,{v:e,children:r.children})}function o(i){t();const o=r(()=>new Map,[]);let u=("function"==typeof i.each?i.each():i.each).value;if(!u.length)return i.fallback||null;const f=u.map((t,r)=>{if(!o.has(t))return n(c,{v:t,key:r,i:r,children:i.children,cache:o});else return o.get(t)});return n(e,{children:f})}function u(t){const n=useSignal(t);if(n.peek()!==t)n.value=t;return n}function f(t){const n=useSignal(t);if(!("current"in n))Object.defineProperty(n,"current",s);return n}const s={configurable:!0,get(){return this.value},set(t){this.value=t}};export{o as For,i as Show,u as useLiveSignal,f as useSignalRef};//# sourceMappingURL=utils.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.mjs","sources":["../src/index.ts"],"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 } from \"react\";\n\ninterface ShowProps<T = boolean> {\n\twhen: Signal<T> | ReadonlySignal<T>;\n\tfallback?: JSX.Element;\n\tchildren: JSX.Element | ((value: NonNullable<T>) => JSX.Element);\n}\n\nexport function Show<T = boolean>(props: ShowProps<T>): JSX.Element | null {\n\tuseSignals();\n\tconst value = props.when.value;\n\tif (!value) return props.fallback || null;\n\treturn typeof props.children === \"function\"\n\t\t? props.children(value)\n\t\t: props.children;\n}\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?: JSX.Element;\n\tchildren: (value: T, index: number) => JSX.Element;\n}\n\nexport function For<T>(props: ForProps<T>): JSX.Element | null {\n\tuseSignals();\n\tconst cache = useMemo(() => new Map(), []);\n\tlet list = (\n\t\t(typeof props.each === \"function\" ? props.each() : props.each) as Signal<\n\t\t\tArray<T>\n\t\t>\n\t).value;\n\n\tif (!list.length) return props.fallback || null;\n\n\tconst items = list.map((value, key) => {\n\t\tif (!cache.has(value)) {\n\t\t\tcache.set(value, props.children(value, key));\n\t\t}\n\t\treturn cache.get(value);\n\t});\n\treturn createElement(Fragment, { children: items });\n}\n\nexport function useLiveSignal<T>(value: Signal<T> | ReadonlySignal<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":["useSignal","useSignals","useMemo","createElement","Fragment","Show","props","value","when","fallback","children","For","cache","Map","list","each","length","items","map","key","has","set","get","useLiveSignal","s","peek","useSignalRef","ref","Object","defineProperty","refSignalProto","configurable","v","this"],"mappings":"OAWgBA,cAAA,6CAAAC,MAAA,kDAAAC,mBAAAC,cAAAC,MAAA,QAAA,SAAAC,EAAkBC,GACjCL,IACA,MAAMM,EAAQD,EAAME,KAAKD,MACzB,IAAKA,EAAO,OAAOD,EAAMG,UAAY,UACrC,MAAiC,mBAAnBH,EAAMI,SACjBJ,EAAMI,SAASH,GACfD,EAAMI,QACV,CAWgB,SAAAC,EAAOL,GACtBL,IACA,MAAMW,EAAQV,EAAQ,IAAM,IAAIW,IAAO,IACvC,IAAIC,GACoB,mBAAfR,EAAMS,KAAsBT,EAAMS,OAAST,EAAMS,MAGxDR,MAEF,IAAKO,EAAKE,OAAQ,OAAOV,EAAMG,UAAY,KAE3C,MAAMQ,EAAQH,EAAKI,IAAI,CAACX,EAAOY,KAC9B,IAAKP,EAAMQ,IAAIb,GACdK,EAAMS,IAAId,EAAOD,EAAMI,SAASH,EAAOY,IAExC,OAAOP,EAAMU,IAAIf,EAAK,GAEvB,OAAOJ,EAAcC,EAAU,CAAEM,SAAUO,GAC5C,CAEM,SAAUM,EAAiBhB,GAChC,MAAMiB,EAAIxB,UAAUO,GACpB,GAAIiB,EAAEC,SAAWlB,EAAOiB,EAAEjB,MAAQA,EAClC,OAAOiB,CACR,CAEgB,SAAAE,EAAgBnB,GAC/B,MAAMoB,EAAM3B,UAAUO,GACtB,KAAM,YAAaoB,GAClBC,OAAOC,eAAeF,EAAK,UAAWG,GACvC,OAAOH,CACR,CACA,MAAMG,EAAiB,CACtBC,cAAc,EACdT,MACC,YAAYf,KACb,EACAc,IAAkBW,GACjBC,KAAK1B,MAAQyB,CACd,UACArB,SAAAN,UAAAkB,mBAAAG"}
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 } from \"react\";\n\ninterface ShowProps<T = boolean> {\n\twhen: Signal<T> | ReadonlySignal<T>;\n\tfallback?: JSX.Element;\n\tchildren: JSX.Element | ((value: NonNullable<T>) => JSX.Element);\n}\n\nconst Item = (props: any) => {\n\tuseSignals();\n\tconst result =\n\t\ttypeof props.children === \"function\"\n\t\t\t? props.children(props.v, props.i)\n\t\t\t: props.children;\n\tif (props.cache) {\n\t\tprops.cache.set(props.v, result);\n\t}\n\treturn result;\n};\n\nexport function Show<T = boolean>(props: ShowProps<T>): JSX.Element | null {\n\tuseSignals();\n\tconst value = props.when.value;\n\tif (!value) return props.fallback || null;\n\treturn <Item v={value} children={props.children} />;\n}\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?: JSX.Element;\n\tchildren: (value: T, index: number) => JSX.Element;\n}\n\nexport function For<T>(props: ForProps<T>): JSX.Element | null {\n\tuseSignals();\n\tconst cache = useMemo(() => new Map(), []);\n\tlet list = (\n\t\t(typeof props.each === \"function\" ? props.each() : props.each) as Signal<\n\t\t\tArray<T>\n\t\t>\n\t).value;\n\n\tif (!list.length) return props.fallback || null;\n\n\tconst items = list.map((value, key) => {\n\t\tif (!cache.has(value)) {\n\t\t\treturn (\n\t\t\t\t<Item\n\t\t\t\t\tv={value}\n\t\t\t\t\tkey={key}\n\t\t\t\t\ti={key}\n\t\t\t\t\tchildren={props.children}\n\t\t\t\t\tcache={cache}\n\t\t\t\t/>\n\t\t\t);\n\t\t}\n\t\treturn cache.get(value);\n\t});\n\treturn createElement(Fragment, { children: items });\n}\n\nexport function useLiveSignal<T>(value: Signal<T> | ReadonlySignal<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":["useSignal","useSignals","createElement","useMemo","Fragment","Item","props","result","children","v","i","cache","set","Show","value","when","fallback","For","Map","list","each","length","items","map","key","has","get","useLiveSignal","s","peek","useSignalRef","ref","Object","defineProperty","refSignalProto","configurable","this"],"mappings":"OAWAA,cAAA,6CAAAC,MAAA,wDAAAC,aAAAC,cAAAC,MAAA,QAAA,MAAMC,EAAQC,IACbL,IACA,MAAMM,EACqB,mBAAnBD,EAAME,SACVF,EAAME,SAASF,EAAMG,EAAGH,EAAMI,GAC9BJ,EAAME,SACV,GAAIF,EAAMK,MACTL,EAAMK,MAAMC,IAAIN,EAAMG,EAAGF,GAE1B,OAAOA,GAGQ,SAAAM,EAAkBP,GACjCL,IACA,MAAMa,EAAQR,EAAMS,KAAKD,MACzB,IAAKA,EAAO,OAAOR,EAAMU,UAAY,UACrC,OAAOd,EAACG,EAAK,CAAAI,EAAGK,EAAON,SAAUF,EAAME,UACxC,CAWM,SAAUS,EAAOX,GACtBL,IACA,MAAMU,EAAQR,EAAQ,IAAM,IAAIe,IAAO,IACvC,IAAIC,GACoB,mBAAfb,EAAMc,KAAsBd,EAAMc,OAASd,EAAMc,MAGxDN,MAEF,IAAKK,EAAKE,OAAQ,OAAOf,EAAMU,UAAY,KAE3C,MAAMM,EAAQH,EAAKI,IAAI,CAACT,EAAOU,KAC9B,IAAKb,EAAMc,IAAIX,GACd,OACCZ,EAACG,EACA,CAAAI,EAAGK,EACHU,IAAKA,EACLd,EAAGc,EACHhB,SAAUF,EAAME,SAChBG,MAAOA,SAIV,OAAOA,EAAMe,IAAIZ,EAAK,GAEvB,OAAOZ,EAAcE,EAAU,CAAEI,SAAUc,GAC5C,CAEgB,SAAAK,EAAiBb,GAChC,MAAMc,EAAI5B,UAAUc,GACpB,GAAIc,EAAEC,SAAWf,EAAOc,EAAEd,MAAQA,EAClC,OAAOc,CACR,UAEgBE,EAAgBhB,GAC/B,MAAMiB,EAAM/B,UAAUc,GACtB,KAAM,YAAaiB,GAClBC,OAAOC,eAAeF,EAAK,UAAWG,GACvC,OAAOH,CACR,CACA,MAAMG,EAAiB,CACtBC,cAAc,EACdT,MACC,OAAWU,KAACtB,KACb,EACAF,IAAkBH,GACjB2B,KAAKtB,MAAQL,CACd,UACAQ,SAAAJ,UAAAc,mBAAAG"}
@@ -1 +1 @@
1
- import{useSignal}from"@preact/signals-react";import{useSignals as r}from"@preact/signals-react/runtime";import{useMemo as n,createElement as t,Fragment as e}from"react";function i(n){r();var t=n.when.value;if(!t)return n.fallback||null;else return"function"==typeof n.children?n.children(t):n.children}function u(i){r();var u=n(function(){return new Map},[]),f=("function"==typeof i.each?i.each():i.each).value;if(!f.length)return i.fallback||null;var c=f.map(function(r,n){if(!u.has(r))u.set(r,i.children(r,n));return u.get(r)});return t(e,{children:c})}function f(r){var n=useSignal(r);if(n.peek()!==r)n.value=r;return n}function c(r){var n=useSignal(r);if(!("current"in n))Object.defineProperty(n,"current",o);return n}var o={configurable:!0,get:function(){return this.value},set:function(r){this.value=r}};export{u as For,i as Show,f as useLiveSignal,c as useSignalRef};//# sourceMappingURL=utils.module.js.map
1
+ import{useSignal}from"@preact/signals-react";import{useSignals as r}from"@preact/signals-react/runtime";import{createElement as n,useMemo as t,Fragment as e}from"react";var i=function(n){r();var t="function"==typeof n.children?n.children(n.v,n.i):n.children;if(n.cache)n.cache.set(n.v,t);return t};function u(t){r();var e=t.when.value;if(!e)return t.fallback||null;else return n(i,{v:e,children:t.children})}function c(u){r();var c=t(function(){return new Map},[]),f=("function"==typeof u.each?u.each():u.each).value;if(!f.length)return u.fallback||null;var o=f.map(function(r,t){if(!c.has(r))return n(i,{v:r,key:t,i:t,children:u.children,cache:c});else return c.get(r)});return n(e,{children:o})}function f(r){var n=useSignal(r);if(n.peek()!==r)n.value=r;return n}function o(r){var n=useSignal(r);if(!("current"in n))Object.defineProperty(n,"current",a);return n}var a={configurable:!0,get:function(){return this.value},set:function(r){this.value=r}};export{c as For,u as Show,f as useLiveSignal,o as useSignalRef};//# sourceMappingURL=utils.module.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.module.js","sources":["../src/index.ts"],"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 } from \"react\";\n\ninterface ShowProps<T = boolean> {\n\twhen: Signal<T> | ReadonlySignal<T>;\n\tfallback?: JSX.Element;\n\tchildren: JSX.Element | ((value: NonNullable<T>) => JSX.Element);\n}\n\nexport function Show<T = boolean>(props: ShowProps<T>): JSX.Element | null {\n\tuseSignals();\n\tconst value = props.when.value;\n\tif (!value) return props.fallback || null;\n\treturn typeof props.children === \"function\"\n\t\t? props.children(value)\n\t\t: props.children;\n}\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?: JSX.Element;\n\tchildren: (value: T, index: number) => JSX.Element;\n}\n\nexport function For<T>(props: ForProps<T>): JSX.Element | null {\n\tuseSignals();\n\tconst cache = useMemo(() => new Map(), []);\n\tlet list = (\n\t\t(typeof props.each === \"function\" ? props.each() : props.each) as Signal<\n\t\t\tArray<T>\n\t\t>\n\t).value;\n\n\tif (!list.length) return props.fallback || null;\n\n\tconst items = list.map((value, key) => {\n\t\tif (!cache.has(value)) {\n\t\t\tcache.set(value, props.children(value, key));\n\t\t}\n\t\treturn cache.get(value);\n\t});\n\treturn createElement(Fragment, { children: items });\n}\n\nexport function useLiveSignal<T>(value: Signal<T> | ReadonlySignal<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":["Show","props","useSignals","value","when","fallback","children","For","cache","useMemo","Map","list","each","length","items","map","key","has","set","get","createElement","Fragment","useLiveSignal","s","useSignal","peek","useSignalRef","ref","Object","defineProperty","refSignalProto","configurable","this","v"],"mappings":"kLAWgBA,EAAkBC,GACjCC,IACA,IAAMC,EAAQF,EAAMG,KAAKD,MACzB,IAAKA,EAAO,OAAOF,EAAMI,UAAY,UACrC,MAAiC,mBAAnBJ,EAAMK,SACjBL,EAAMK,SAASH,GACfF,EAAMK,QACV,CAWM,SAAUC,EAAON,GACtBC,IACA,IAAMM,EAAQC,EAAQ,WAAA,OAAU,IAAAC,GAAK,EAAE,IACnCC,GACoB,mBAAfV,EAAMW,KAAsBX,EAAMW,OAASX,EAAMW,MAGxDT,MAEF,IAAKQ,EAAKE,OAAQ,OAAOZ,EAAMI,UAAY,KAE3C,IAAMS,EAAQH,EAAKI,IAAI,SAACZ,EAAOa,GAC9B,IAAKR,EAAMS,IAAId,GACdK,EAAMU,IAAIf,EAAOF,EAAMK,SAASH,EAAOa,IAExC,OAAOR,EAAMW,IAAIhB,EAClB,GACA,OAAOiB,EAAcC,EAAU,CAAEf,SAAUQ,GAC5C,UAEgBQ,EAAiBnB,GAChC,IAAMoB,EAAIC,UAAUrB,GACpB,GAAIoB,EAAEE,SAAWtB,EAAOoB,EAAEpB,MAAQA,EAClC,OAAOoB,CACR,CAEgB,SAAAG,EAAgBvB,GAC/B,IAAMwB,EAAMH,UAAUrB,GACtB,KAAM,YAAawB,GAClBC,OAAOC,eAAeF,EAAK,UAAWG,GACvC,OAAOH,CACR,CACA,IAAMG,EAAiB,CACtBC,cAAc,EACdZ,eACC,OAAOa,KAAK7B,KACb,EACAe,IAAA,SAAkBe,GACjBD,KAAK7B,MAAQ8B,CACd,UACA1B,SAAAP,UAAAsB,mBAAAI"}
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 } from \"react\";\n\ninterface ShowProps<T = boolean> {\n\twhen: Signal<T> | ReadonlySignal<T>;\n\tfallback?: JSX.Element;\n\tchildren: JSX.Element | ((value: NonNullable<T>) => JSX.Element);\n}\n\nconst Item = (props: any) => {\n\tuseSignals();\n\tconst result =\n\t\ttypeof props.children === \"function\"\n\t\t\t? props.children(props.v, props.i)\n\t\t\t: props.children;\n\tif (props.cache) {\n\t\tprops.cache.set(props.v, result);\n\t}\n\treturn result;\n};\n\nexport function Show<T = boolean>(props: ShowProps<T>): JSX.Element | null {\n\tuseSignals();\n\tconst value = props.when.value;\n\tif (!value) return props.fallback || null;\n\treturn <Item v={value} children={props.children} />;\n}\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?: JSX.Element;\n\tchildren: (value: T, index: number) => JSX.Element;\n}\n\nexport function For<T>(props: ForProps<T>): JSX.Element | null {\n\tuseSignals();\n\tconst cache = useMemo(() => new Map(), []);\n\tlet list = (\n\t\t(typeof props.each === \"function\" ? props.each() : props.each) as Signal<\n\t\t\tArray<T>\n\t\t>\n\t).value;\n\n\tif (!list.length) return props.fallback || null;\n\n\tconst items = list.map((value, key) => {\n\t\tif (!cache.has(value)) {\n\t\t\treturn (\n\t\t\t\t<Item\n\t\t\t\t\tv={value}\n\t\t\t\t\tkey={key}\n\t\t\t\t\ti={key}\n\t\t\t\t\tchildren={props.children}\n\t\t\t\t\tcache={cache}\n\t\t\t\t/>\n\t\t\t);\n\t\t}\n\t\treturn cache.get(value);\n\t});\n\treturn createElement(Fragment, { children: items });\n}\n\nexport function useLiveSignal<T>(value: Signal<T> | ReadonlySignal<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":["useSignal","useSignals","createElement","useMemo","Fragment","Item","props","result","children","v","i","cache","set","Show","value","when","fallback","For","Map","list","each","length","items","map","key","has","get","useLiveSignal","s","peek","useSignalRef","ref","Object","defineProperty","refSignalProto","configurable","this"],"mappings":"OAWAA,cAAA,6CAAAC,MAAA,wDAAAC,aAAAC,cAAAC,MAAA,QAAA,IAAMC,EAAO,SAACC,GACbL,IACA,IAAMM,EACqB,mBAAnBD,EAAME,SACVF,EAAME,SAASF,EAAMG,EAAGH,EAAMI,GAC9BJ,EAAME,SACV,GAAIF,EAAMK,MACTL,EAAMK,MAAMC,IAAIN,EAAMG,EAAGF,GAE1B,OAAOA,CACR,WAEgBM,EAAkBP,GACjCL,IACA,IAAMa,EAAQR,EAAMS,KAAKD,MACzB,IAAKA,EAAO,OAAOR,EAAMU,UAAY,UACrC,OAAOd,EAACG,EAAK,CAAAI,EAAGK,EAAON,SAAUF,EAAME,UACxC,UAWgBS,EAAOX,GACtBL,IACA,IAAMU,EAAQR,EAAQ,WAAM,OAAA,IAAIe,GAAK,EAAE,IACnCC,GACoB,mBAAfb,EAAMc,KAAsBd,EAAMc,OAASd,EAAMc,MAGxDN,MAEF,IAAKK,EAAKE,OAAQ,OAAOf,EAAMU,UAAY,KAE3C,IAAMM,EAAQH,EAAKI,IAAI,SAACT,EAAOU,GAC9B,IAAKb,EAAMc,IAAIX,GACd,OACCZ,EAACG,EACA,CAAAI,EAAGK,EACHU,IAAKA,EACLd,EAAGc,EACHhB,SAAUF,EAAME,SAChBG,MAAOA,SAIV,OAAOA,EAAMe,IAAIZ,EAClB,GACA,OAAOZ,EAAcE,EAAU,CAAEI,SAAUc,GAC5C,UAEgBK,EAAiBb,GAChC,IAAMc,EAAI5B,UAAUc,GACpB,GAAIc,EAAEC,SAAWf,EAAOc,EAAEd,MAAQA,EAClC,OAAOc,CACR,CAEgB,SAAAE,EAAgBhB,GAC/B,IAAMiB,EAAM/B,UAAUc,GACtB,KAAM,YAAaiB,GAClBC,OAAOC,eAAeF,EAAK,UAAWG,GACvC,OAAOH,CACR,CACA,IAAMG,EAAiB,CACtBC,cAAc,EACdT,IAAG,WACF,OAAWU,KAACtB,KACb,EACAF,IAAA,SAAkBH,GACjB2B,KAAKtB,MAAQL,CACd,UACAQ,SAAAJ,UAAAc,mBAAAG"}
@@ -7,7 +7,7 @@
7
7
  "module": "dist/utils.module.js",
8
8
  "unpkg": "dist/utils.min.js",
9
9
  "types": "dist/index.d.ts",
10
- "source": "src/index.ts",
10
+ "source": "src/index.tsx",
11
11
  "mangle": "../../../mangle.json",
12
12
  "exports": {
13
13
  ".": {
@@ -9,13 +9,23 @@ interface ShowProps<T = boolean> {
9
9
  children: JSX.Element | ((value: NonNullable<T>) => JSX.Element);
10
10
  }
11
11
 
12
+ const Item = (props: any) => {
13
+ useSignals();
14
+ const result =
15
+ typeof props.children === "function"
16
+ ? props.children(props.v, props.i)
17
+ : props.children;
18
+ if (props.cache) {
19
+ props.cache.set(props.v, result);
20
+ }
21
+ return result;
22
+ };
23
+
12
24
  export function Show<T = boolean>(props: ShowProps<T>): JSX.Element | null {
13
25
  useSignals();
14
26
  const value = props.when.value;
15
27
  if (!value) return props.fallback || null;
16
- return typeof props.children === "function"
17
- ? props.children(value)
18
- : props.children;
28
+ return <Item v={value} children={props.children} />;
19
29
  }
20
30
 
21
31
  interface ForProps<T> {
@@ -40,7 +50,15 @@ export function For<T>(props: ForProps<T>): JSX.Element | null {
40
50
 
41
51
  const items = list.map((value, key) => {
42
52
  if (!cache.has(value)) {
43
- cache.set(value, props.children(value, key));
53
+ return (
54
+ <Item
55
+ v={value}
56
+ key={key}
57
+ i={key}
58
+ children={props.children}
59
+ cache={cache}
60
+ />
61
+ );
44
62
  }
45
63
  return cache.get(value);
46
64
  });