@preact/signals 2.4.0 → 2.5.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,17 @@
1
1
  # @preact/signals
2
2
 
3
+ ## 2.5.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [#792](https://github.com/preactjs/signals/pull/792) [`95dcf41`](https://github.com/preactjs/signals/commit/95dcf41c95baa5d9c6aa8f94c7592722c0cefc3f) Thanks [@JoviDeCroock](https://github.com/JoviDeCroock)! - Allow the `when` property of `Show` to be a function so not everything has to be transformed into a boolean computed
8
+
9
+ ### Patch Changes
10
+
11
+ - [#790](https://github.com/preactjs/signals/pull/790) [`4b143a7`](https://github.com/preactjs/signals/commit/4b143a7164d58edda05a23a482f06afc20543234) Thanks [@JoviDeCroock](https://github.com/JoviDeCroock)! - Ensure the cached and non-cached shape is the same
12
+
13
+ - [#791](https://github.com/preactjs/signals/pull/791) [`358a758`](https://github.com/preactjs/signals/commit/358a7585a27deff6cf0b804f5f02739b893c7a02) Thanks [@JoviDeCroock](https://github.com/JoviDeCroock)! - Prevent `For` cache from expanding infinitely
14
+
3
15
  ## 2.4.0
4
16
 
5
17
  ### Minor Changes
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@preact/signals",
3
- "version": "2.4.0",
3
+ "version": "2.5.0",
4
4
  "license": "MIT",
5
5
  "description": "Manage state with style in Preact",
6
6
  "keywords": [],
@@ -1,7 +1,7 @@
1
1
  import { ReadonlySignal, Signal } from "@preact/signals-core";
2
2
  import { JSX } from "preact";
3
3
  interface ShowProps<T = boolean> {
4
- when: Signal<T> | ReadonlySignal<T>;
4
+ when: Signal<T> | ReadonlySignal<T> | (() => T);
5
5
  fallback?: JSX.Element;
6
6
  children: JSX.Element | ((value: NonNullable<T>) => JSX.Element);
7
7
  }
@@ -1 +1 @@
1
- var r=require("@preact/signals"),n=require("preact"),e=require("preact/hooks"),t=function(r){var n="function"==typeof r.children?r.children(r.v,r.i):r.children;if(r.cache)r.cache.set(r.v,n);return n},u={configurable:!0,get:function(){return this.value},set:function(r){this.value=r}};exports.For=function(r){var u=e.useMemo(function(){return new Map},[]),i=("function"==typeof r.each?r.each():r.each).value;if(!i.length)return r.fallback||null;var c=i.map(function(e,i){if(!u.has(e))return n.createElement(t,{v:e,i:i,children:r.children,cache:u});else return u.get(e)});return n.createElement(n.Fragment,null,c)};exports.Show=function(r){var e=r.when.value;if(!e)return r.fallback||null;else return n.createElement(t,{v:e,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",u);return e};//# sourceMappingURL=utils.js.map
1
+ var n=require("@preact/signals"),r=require("preact"),t=require("preact/hooks"),e=function(n){return"function"==typeof n.children?n.children(n.v,n.i):n.children},u={configurable:!0,get:function(){return this.value},set:function(n){this.value=n}};exports.For=function(n){var u=t.useMemo(function(){return new Map},[]),i=("function"==typeof n.each?n.each():n.each).value;if(!i.length)return n.fallback||null;var o=new Set(u.keys()),c=i.map(function(t,i){o.delete(t);if(!u.has(t)){var c=r.createElement(e,{v:t,i:i,children:n.children});u.set(t,c);return c}return u.get(t)});o.forEach(function(n){u.delete(n)});return r.createElement(r.Fragment,null,c)};exports.Show=function(n){var t="function"==typeof n.when?n.when():n.when.value;if(!t)return n.fallback||null;else return r.createElement(e,{v:t,children:n.children})};exports.useLiveSignal=function(r){var t=n.useSignal(r);if(t.peek()!==r)t.value=r;return t};exports.useSignalRef=function(r){var t=n.useSignal(r);if(!("current"in t))Object.defineProperty(t,"current",u);return t};//# sourceMappingURL=utils.js.map
@@ -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\";\nimport { Fragment, createElement, JSX } from \"preact\";\nimport { useMemo } from \"preact/hooks\";\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\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\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\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 <Item v={value} i={key} children={props.children} cache={cache} />;\n\t\t}\n\t\treturn cache.get(value);\n\t});\n\n\treturn createElement(Fragment, null, items);\n}\n\nexport function useLiveSignal<T>(\n\tvalue: Signal<T> | ReadonlySignal<T>\n): Signal<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): Signal<T> & { current: 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":["signals","require","preact","hooks","Item","props","result","children","v","i","cache","set","refSignalProto","configurable","get","value","this","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,mBAAAC,EAAAD,QAAA,UAAAE,EAAAF,QAAA,gBAAMG,EAAO,SAACC,GACb,IAAMC,EACqB,mBAAnBD,EAAME,SACVF,EAAME,SAASF,EAAMG,EAAGH,EAAMI,GAC9BJ,EAAME,SACV,GAAIF,EAAMK,MACTL,EAAMK,MAAMC,IAAIN,EAAMG,EAAGF,GAE1B,OAAOA,CACR,EAmDMM,EAAiB,CACtBC,cAAc,EACdC,IAAG,WACF,YAAYC,KACb,EACAJ,aAAkBH,GACjBQ,KAAKD,MAAQP,CACd,GACAS,QAAAC,aA1CsBb,GACtB,IAAMK,EAAQS,EAAAA,QAAQ,WAAM,OAAA,IAAIC,GAAK,EAAE,IACnCC,GACoB,mBAAfhB,EAAMiB,KAAsBjB,EAAMiB,OAASjB,EAAMiB,MAGxDP,MAEF,IAAKM,EAAKE,OAAQ,OAAOlB,EAAMmB,UAAY,KAE3C,IAAMC,EAAQJ,EAAKK,IAAI,SAACX,EAAOY,GAC9B,IAAKjB,EAAMkB,IAAIb,GACd,OAAOc,EAAAA,cAACzB,EAAK,CAAAI,EAAGO,EAAON,EAAGkB,EAAKpB,SAAUF,EAAME,SAAUG,MAAOA,SAEjE,OAAOA,EAAMI,IAAIC,EAClB,GAEA,OAAOc,EAAAA,cAAcC,EAAQA,SAAE,KAAML,EACtC,EAwBCR,QAAAc,KAzDe,SAAkB1B,GACjC,IAAMU,EAAQV,EAAM2B,KAAKjB,MACzB,IAAKA,EAAO,OAAOV,EAAMmB,UAAY,UACrC,OAAOK,EAACA,cAAAzB,EAAK,CAAAI,EAAGO,EAAOR,SAAUF,EAAME,UACxC,EAqDCU,QAAAgB,uBArBAlB,GAEA,IAAMmB,EAAIC,EAAAA,UAAUpB,GACpB,GAAImB,EAAEE,SAAWrB,EAAOmB,EAAEnB,MAAQA,EAClC,OAAOmB,CACR,EAgBCjB,QAAAoB,aAde,SAAgBtB,GAC/B,IAAMuB,EAAMH,EAAAA,UAAUpB,GACtB,KAAM,YAAauB,GAClBC,OAAOC,eAAeF,EAAK,UAAW1B,GACvC,OAAO0B,CACR"}
1
+ {"version":3,"file":"utils.js","sources":["../src/index.tsx"],"sourcesContent":["import { ReadonlySignal, Signal } from \"@preact/signals-core\";\nimport { useSignal } from \"@preact/signals\";\nimport { Fragment, createElement, JSX } from \"preact\";\nimport { useMemo } from \"preact/hooks\";\n\ninterface ShowProps<T = boolean> {\n\twhen: Signal<T> | ReadonlySignal<T> | (() => T);\n\tfallback?: JSX.Element;\n\tchildren: JSX.Element | ((value: NonNullable<T>) => JSX.Element);\n}\n\nconst Item = (props: any) => {\n\treturn typeof props.children === \"function\"\n\t\t? props.children(props.v, props.i)\n\t\t: props.children;\n};\n\nexport function Show<T = boolean>(props: ShowProps<T>): JSX.Element | null {\n\tconst value =\n\t\ttypeof props.when === \"function\" ? props.when() : 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\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 removed = new Set(cache.keys());\n\n\tconst items = list.map((value, key) => {\n\t\tremoved.delete(value);\n\t\tif (!cache.has(value)) {\n\t\t\tconst result = <Item v={value} i={key} children={props.children} />;\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, null, items);\n}\n\nexport function useLiveSignal<T>(\n\tvalue: Signal<T> | ReadonlySignal<T>\n): Signal<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): Signal<T> & { current: 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":["signals","require","preact","hooks","Item","props","children","v","i","refSignalProto","configurable","get","this","value","set","exports","For","cache","useMemo","Map","list","each","length","fallback","removed","Set","keys","items","map","key","has","result","createElement","forEach","Fragment","Show","when","useLiveSignal","s","useSignal","peek","useSignalRef","ref","Object","defineProperty"],"mappings":"AAWA,IAAAA,EAAAC,QAAA,mBAAAC,EAAAD,QAAA,UAAAE,EAAAF,QAAA,gBAAMG,EAAO,SAACC,GACb,MAAiC,mBAAnBA,EAAMC,SACjBD,EAAMC,SAASD,EAAME,EAAGF,EAAMG,GAC9BH,EAAMC,QACV,EA6DMG,EAAiB,CACtBC,cAAc,EACdC,IAAA,WACC,OAAOC,KAAKC,KACb,EACAC,IAAA,SAAkBP,GACjBK,KAAKC,MAAQN,CACd,GACAQ,QAAAC,IAnDe,SAAOX,GACtB,IAAMY,EAAQC,EAAAA,QAAQ,WAAM,OAAA,IAAIC,GAAK,EAAE,IACnCC,GACoB,mBAAff,EAAMgB,KAAsBhB,EAAMgB,OAAShB,EAAMgB,MAGxDR,MAEF,IAAKO,EAAKE,OAAQ,OAAOjB,EAAMkB,UAAY,KAE3C,IAAMC,EAAU,IAAIC,IAAIR,EAAMS,QAExBC,EAAQP,EAAKQ,IAAI,SAACf,EAAOgB,GAC9BL,SAAeX,GACf,IAAKI,EAAMa,IAAIjB,GAAQ,CACtB,IAAMkB,EAASC,gBAAC5B,EAAK,CAAAG,EAAGM,EAAOL,EAAGqB,EAAKvB,SAAUD,EAAMC,WACvDW,EAAMH,IAAID,EAAOkB,GACjB,OAAOA,CACR,CACA,OAAOd,EAAMN,IAAIE,EAClB,GAEAW,EAAQS,QAAQ,SAAApB,GACfI,EAAY,OAACJ,EACd,GAEA,OAAOmB,EAAAA,cAAcE,EAAQA,SAAE,KAAMP,EACtC,EAwBCZ,QAAAoB,cAnEiC9B,GACjC,IAAMQ,EACiB,mBAAfR,EAAM+B,KAAsB/B,EAAM+B,OAAS/B,EAAM+B,KAAKvB,MAC9D,IAAKA,EAAO,OAAOR,EAAMkB,UAAY,UACrC,OAAOS,EAAAA,cAAC5B,EAAK,CAAAG,EAAGM,EAAOP,SAAUD,EAAMC,UACxC,EA8DCS,QAAAsB,cAtBe,SACfxB,GAEA,IAAMyB,EAAIC,EAAAA,UAAU1B,GACpB,GAAIyB,EAAEE,SAAW3B,EAAOyB,EAAEzB,MAAQA,EAClC,OAAOyB,CACR,EAgBCvB,QAAA0B,aAde,SAAgB5B,GAC/B,IAAM6B,EAAMH,EAAAA,UAAU1B,GACtB,KAAM,YAAa6B,GAClBC,OAAOC,eAAeF,EAAK,UAAWjC,GACvC,OAAOiC,CACR"}
@@ -1 +1 @@
1
- !function(e,n){"object"==typeof exports&&"undefined"!=typeof module?n(exports,require("@preact/signals"),require("preact"),require("preact/hooks")):"function"==typeof define&&define.amd?define(["exports","@preact/signals","preact","preact/hooks"],n):n((e||self).preactSignalsutils={},e.signals,e.preact,e.preactHooks)}(this,function(e,n,r,t){var i=function(e){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){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 f=u.map(function(t,u){if(!n.has(t))return r.createElement(i,{v:t,i:u,children:e.children,cache:n});else return n.get(t)});return r.createElement(r.Fragment,null,f)};e.Show=function(e){var n=e.when.value;if(!n)return e.fallback||null;else return r.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
+ !function(n,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("@preact/signals"),require("preact"),require("preact/hooks")):"function"==typeof define&&define.amd?define(["exports","@preact/signals","preact","preact/hooks"],e):e((n||self).preactSignalsutils={},n.signals,n.preact,n.preactHooks)}(this,function(n,e,t,r){var i=function(n){return"function"==typeof n.children?n.children(n.v,n.i):n.children},u={configurable:!0,get:function(){return this.value},set:function(n){this.value=n}};n.For=function(n){var e=r.useMemo(function(){return new Map},[]),u=("function"==typeof n.each?n.each():n.each).value;if(!u.length)return n.fallback||null;var f=new Set(e.keys()),o=u.map(function(r,u){f.delete(r);if(!e.has(r)){var o=t.createElement(i,{v:r,i:u,children:n.children});e.set(r,o);return o}return e.get(r)});f.forEach(function(n){e.delete(n)});return t.createElement(t.Fragment,null,o)};n.Show=function(n){var e="function"==typeof n.when?n.when():n.when.value;if(!e)return n.fallback||null;else return t.createElement(i,{v:e,children:n.children})};n.useLiveSignal=function(n){var t=e.useSignal(n);if(t.peek()!==n)t.value=n;return t};n.useSignalRef=function(n){var t=e.useSignal(n);if(!("current"in t))Object.defineProperty(t,"current",u);return t}});//# 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\";\nimport { Fragment, createElement, JSX } from \"preact\";\nimport { useMemo } from \"preact/hooks\";\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\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\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\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 <Item v={value} i={key} children={props.children} cache={cache} />;\n\t\t}\n\t\treturn cache.get(value);\n\t});\n\n\treturn createElement(Fragment, null, items);\n}\n\nexport function useLiveSignal<T>(\n\tvalue: Signal<T> | ReadonlySignal<T>\n): Signal<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): Signal<T> & { current: 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","preactSignalsutils","signals","preact","preactHooks","this","hooks","Item","props","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,mBAAAA,QAAA,UAAAA,QAAA,iBAAA,mBAAAC,QAAAA,OAAAC,IAAAD,OAAA,CAAA,UAAA,kBAAA,SAAA,gBAAAJ,GAAAA,GAAAD,EAAA,oBAAAO,WAAAA,WAAAP,GAAAQ,MAAAC,mBAAA,CAAA,EAAAT,EAAAU,QAAAV,EAAAW,OAAAX,EAAAY,YAAA,CAAA,CAAAC,KAAA,SAAAX,EAAAQ,EAAAC,EAAAG,GAAA,IAAMC,EAAO,SAACC,GACb,IAAMC,EACqB,mBAAnBD,EAAME,SACVF,EAAME,SAASF,EAAMG,EAAGH,EAAMI,GAC9BJ,EAAME,SACV,GAAIF,EAAMK,MACTL,EAAMK,MAAMC,IAAIN,EAAMG,EAAGF,GAE1B,OAAOA,CACR,EAmDMM,EAAiB,CACtBC,cAAc,EACdC,IAAG,WACF,YAAYC,KACb,EACAJ,aAAkBH,GACjBN,KAAKa,MAAQP,CACd,GACAjB,EAAAyB,aA1CsBX,GACtB,IAAMK,EAAQO,EAAAA,QAAQ,WAAM,OAAA,IAAIC,GAAK,EAAE,IACnCC,GACoB,mBAAfd,EAAMe,KAAsBf,EAAMe,OAASf,EAAMe,MAGxDL,MAEF,IAAKI,EAAKE,OAAQ,OAAOhB,EAAMiB,UAAY,KAE3C,IAAMC,EAAQJ,EAAKK,IAAI,SAACT,EAAOU,GAC9B,IAAKf,EAAMgB,IAAIX,GACd,OAAOY,EAAAA,cAACvB,EAAK,CAAAI,EAAGO,EAAON,EAAGgB,EAAKlB,SAAUF,EAAME,SAAUG,MAAOA,SAEjE,OAAOA,EAAMI,IAAIC,EAClB,GAEA,OAAOY,EAAAA,cAAcC,EAAQA,SAAE,KAAML,EACtC,EAwBChC,EAAAsC,KAzDe,SAAkBxB,GACjC,IAAMU,EAAQV,EAAMyB,KAAKf,MACzB,IAAKA,EAAO,OAAOV,EAAMiB,UAAY,UACrC,OAAOK,EAACA,cAAAvB,EAAK,CAAAI,EAAGO,EAAOR,SAAUF,EAAME,UACxC,EAqDChB,EAAAwC,uBArBAhB,GAEA,IAAMiB,EAAIC,EAAAA,UAAUlB,GACpB,GAAIiB,EAAEE,SAAWnB,EAAOiB,EAAEjB,MAAQA,EAClC,OAAOiB,CACR,EAgBCzC,EAAA4C,aAde,SAAgBpB,GAC/B,IAAMqB,EAAMH,EAAAA,UAAUlB,GACtB,KAAM,YAAaqB,GAClBC,OAAOC,eAAeF,EAAK,UAAWxB,GACvC,OAAOwB,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\";\nimport { Fragment, createElement, JSX } from \"preact\";\nimport { useMemo } from \"preact/hooks\";\n\ninterface ShowProps<T = boolean> {\n\twhen: Signal<T> | ReadonlySignal<T> | (() => T);\n\tfallback?: JSX.Element;\n\tchildren: JSX.Element | ((value: NonNullable<T>) => JSX.Element);\n}\n\nconst Item = (props: any) => {\n\treturn typeof props.children === \"function\"\n\t\t? props.children(props.v, props.i)\n\t\t: props.children;\n};\n\nexport function Show<T = boolean>(props: ShowProps<T>): JSX.Element | null {\n\tconst value =\n\t\ttypeof props.when === \"function\" ? props.when() : 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\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 removed = new Set(cache.keys());\n\n\tconst items = list.map((value, key) => {\n\t\tremoved.delete(value);\n\t\tif (!cache.has(value)) {\n\t\t\tconst result = <Item v={value} i={key} children={props.children} />;\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, null, items);\n}\n\nexport function useLiveSignal<T>(\n\tvalue: Signal<T> | ReadonlySignal<T>\n): Signal<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): Signal<T> & { current: 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","preactSignalsutils","signals","preact","preactHooks","this","hooks","Item","props","children","v","i","refSignalProto","configurable","get","value","set","For","cache","useMemo","Map","list","each","length","fallback","removed","Set","keys","items","map","key","has","result","createElement","forEach","Fragment","Show","when","useLiveSignal","s","useSignal","peek","useSignalRef","ref","Object","defineProperty"],"mappings":"CAWA,SAAAA,EAAAC,GAAA,iBAAAC,SAAA,oBAAAC,OAAAF,EAAAC,QAAAE,QAAA,mBAAAA,QAAA,UAAAA,QAAA,iBAAA,mBAAAC,QAAAA,OAAAC,IAAAD,OAAA,CAAA,UAAA,kBAAA,SAAA,gBAAAJ,GAAAA,GAAAD,EAAA,oBAAAO,WAAAA,WAAAP,GAAAQ,MAAAC,mBAAA,CAAA,EAAAT,EAAAU,QAAAV,EAAAW,OAAAX,EAAAY,YAAA,CAAA,CAAAC,KAAA,SAAAX,EAAAQ,EAAAC,EAAAG,GAAA,IAAMC,EAAO,SAACC,GACb,MAAiC,mBAAnBA,EAAMC,SACjBD,EAAMC,SAASD,EAAME,EAAGF,EAAMG,GAC9BH,EAAMC,QACV,EA6DMG,EAAiB,CACtBC,cAAc,EACdC,IAAA,WACC,OAAOT,KAAKU,KACb,EACAC,IAAA,SAAkBN,GACjBL,KAAKU,MAAQL,CACd,GACAhB,EAAAuB,IAnDe,SAAOT,GACtB,IAAMU,EAAQC,EAAAA,QAAQ,WAAM,OAAA,IAAIC,GAAK,EAAE,IACnCC,GACoB,mBAAfb,EAAMc,KAAsBd,EAAMc,OAASd,EAAMc,MAGxDP,MAEF,IAAKM,EAAKE,OAAQ,OAAOf,EAAMgB,UAAY,KAE3C,IAAMC,EAAU,IAAIC,IAAIR,EAAMS,QAExBC,EAAQP,EAAKQ,IAAI,SAACd,EAAOe,GAC9BL,SAAeV,GACf,IAAKG,EAAMa,IAAIhB,GAAQ,CACtB,IAAMiB,EAASC,gBAAC1B,EAAK,CAAAG,EAAGK,EAAOJ,EAAGmB,EAAKrB,SAAUD,EAAMC,WACvDS,EAAMF,IAAID,EAAOiB,GACjB,OAAOA,CACR,CACA,OAAOd,EAAMJ,IAAIC,EAClB,GAEAU,EAAQS,QAAQ,SAAAnB,GACfG,EAAY,OAACH,EACd,GAEA,OAAOkB,EAAAA,cAAcE,EAAQA,SAAE,KAAMP,EACtC,EAwBClC,EAAA0C,cAnEiC5B,GACjC,IAAMO,EACiB,mBAAfP,EAAM6B,KAAsB7B,EAAM6B,OAAS7B,EAAM6B,KAAKtB,MAC9D,IAAKA,EAAO,OAAOP,EAAMgB,UAAY,UACrC,OAAOS,EAAAA,cAAC1B,EAAK,CAAAG,EAAGK,EAAON,SAAUD,EAAMC,UACxC,EA8DCf,EAAA4C,cAtBe,SACfvB,GAEA,IAAMwB,EAAIC,EAAAA,UAAUzB,GACpB,GAAIwB,EAAEE,SAAW1B,EAAOwB,EAAExB,MAAQA,EAClC,OAAOwB,CACR,EAgBC7C,EAAAgD,aAde,SAAgB3B,GAC/B,IAAM4B,EAAMH,EAAAA,UAAUzB,GACtB,KAAM,YAAa4B,GAClBC,OAAOC,eAAeF,EAAK,UAAW/B,GACvC,OAAO+B,CACR,CASC"}
@@ -1 +1 @@
1
- import{useSignal}from"@preact/signals";import{createElement as n,Fragment as t}from"preact";import{useMemo as r}from"preact/hooks";const e=n=>{const 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 o(t){const r=t.when.value;if(!r)return t.fallback||null;else return n(e,{v:r,children:t.children})}function c(o){const c=r(()=>new Map,[]);let i=("function"==typeof o.each?o.each():o.each).value;if(!i.length)return o.fallback||null;const u=i.map((t,r)=>{if(!c.has(t))return n(e,{v:t,i:r,children:o.children,cache:c});else return c.get(t)});return n(t,null,u)}function i(n){const t=useSignal(n);if(t.peek()!==n)t.value=n;return t}function u(n){const t=useSignal(n);if(!("current"in t))Object.defineProperty(t,"current",f);return t}const f={configurable:!0,get(){return this.value},set(n){this.value=n}};export{c as For,o as Show,i as useLiveSignal,u as useSignalRef};//# sourceMappingURL=utils.mjs.map
1
+ import{useSignal}from"@preact/signals";import{createElement as n,Fragment as t}from"preact";import{useMemo as r}from"preact/hooks";const e=n=>"function"==typeof n.children?n.children(n.v,n.i):n.children;function o(t){const r="function"==typeof t.when?t.when():t.when.value;if(!r)return t.fallback||null;else return n(e,{v:r,children:t.children})}function c(o){const c=r(()=>new Map,[]);let i=("function"==typeof o.each?o.each():o.each).value;if(!i.length)return o.fallback||null;const u=new Set(c.keys()),f=i.map((t,r)=>{u.delete(t);if(!c.has(t)){const i=n(e,{v:t,i:r,children:o.children});c.set(t,i);return i}return c.get(t)});u.forEach(n=>{c.delete(n)});return n(t,null,f)}function i(n){const t=useSignal(n);if(t.peek()!==n)t.value=n;return t}function u(n){const t=useSignal(n);if(!("current"in t))Object.defineProperty(t,"current",f);return t}const f={configurable:!0,get(){return this.value},set(n){this.value=n}};export{c as For,o as Show,i as useLiveSignal,u as useSignalRef};//# sourceMappingURL=utils.mjs.map
@@ -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\";\nimport { Fragment, createElement, JSX } from \"preact\";\nimport { useMemo } from \"preact/hooks\";\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\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\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\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 <Item v={value} i={key} children={props.children} cache={cache} />;\n\t\t}\n\t\treturn cache.get(value);\n\t});\n\n\treturn createElement(Fragment, null, items);\n}\n\nexport function useLiveSignal<T>(\n\tvalue: Signal<T> | ReadonlySignal<T>\n): Signal<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): Signal<T> & { current: 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","createElement","Fragment","useMemo","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,0CAAAC,cAAAC,MAAA,2BAAAC,MAAA,eAAA,MAAMC,EAAQC,IACb,MAAMC,EACqB,mBAAnBD,EAAME,SACVF,EAAME,SAASF,EAAMG,EAAGH,EAAMI,GAC9BJ,EAAME,SACV,GAAIF,EAAMK,MACTL,EAAMK,MAAMC,IAAIN,EAAMG,EAAGF,GAE1B,OAAOA,GAGF,SAAUM,EAAkBP,GACjC,MAAMQ,EAAQR,EAAMS,KAAKD,MACzB,IAAKA,EAAO,OAAOR,EAAMU,UAAY,UACrC,OAAOd,EAACG,EAAK,CAAAI,EAAGK,EAAON,SAAUF,EAAME,UACxC,CAWM,SAAUS,EAAOX,GACtB,MAAMK,EAAQP,EAAQ,IAAM,IAAIc,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,OAAOZ,EAACG,EAAK,CAAAI,EAAGK,EAAOJ,EAAGc,EAAKhB,SAAUF,EAAME,SAAUG,MAAOA,SAEjE,OAAOA,EAAMe,IAAIZ,EAAK,GAGvB,OAAOZ,EAAcC,EAAU,KAAMmB,EACtC,CAEgB,SAAAK,EACfb,GAEA,MAAMc,EAAI3B,UAAUa,GACpB,GAAIc,EAAEC,SAAWf,EAAOc,EAAEd,MAAQA,EAClC,OAAOc,CACR,CAEM,SAAUE,EAAgBhB,GAC/B,MAAMiB,EAAM9B,UAAUa,GACtB,KAAM,YAAaiB,GAClBC,OAAOC,eAAeF,EAAK,UAAWG,GACvC,OAAOH,CACR,CACA,MAAMG,EAAiB,CACtBC,cAAc,EACdT,MACC,YAAYZ,KACb,EACAF,IAAkBH,GACjB2B,KAAKtB,MAAQL,CACd,UACAQ,SAAAJ,UAAAc,mBAAAG"}
1
+ {"version":3,"file":"utils.mjs","sources":["../src/index.tsx"],"sourcesContent":["import { ReadonlySignal, Signal } from \"@preact/signals-core\";\nimport { useSignal } from \"@preact/signals\";\nimport { Fragment, createElement, JSX } from \"preact\";\nimport { useMemo } from \"preact/hooks\";\n\ninterface ShowProps<T = boolean> {\n\twhen: Signal<T> | ReadonlySignal<T> | (() => T);\n\tfallback?: JSX.Element;\n\tchildren: JSX.Element | ((value: NonNullable<T>) => JSX.Element);\n}\n\nconst Item = (props: any) => {\n\treturn typeof props.children === \"function\"\n\t\t? props.children(props.v, props.i)\n\t\t: props.children;\n};\n\nexport function Show<T = boolean>(props: ShowProps<T>): JSX.Element | null {\n\tconst value =\n\t\ttypeof props.when === \"function\" ? props.when() : 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\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 removed = new Set(cache.keys());\n\n\tconst items = list.map((value, key) => {\n\t\tremoved.delete(value);\n\t\tif (!cache.has(value)) {\n\t\t\tconst result = <Item v={value} i={key} children={props.children} />;\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, null, items);\n}\n\nexport function useLiveSignal<T>(\n\tvalue: Signal<T> | ReadonlySignal<T>\n): Signal<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): Signal<T> & { current: 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","createElement","Fragment","useMemo","Item","props","children","v","i","Show","value","when","fallback","For","cache","Map","list","each","length","removed","Set","keys","items","map","key","delete","has","result","set","get","forEach","useLiveSignal","s","peek","useSignalRef","ref","Object","defineProperty","refSignalProto","configurable","this"],"mappings":"OAWAA,cAAA,0CAAAC,cAAAC,MAAA,2BAAAC,MAAA,eAAA,MAAMC,EAAQC,GACoB,mBAAnBA,EAAMC,SACjBD,EAAMC,SAASD,EAAME,EAAGF,EAAMG,GAC9BH,EAAMC,kBAGMG,EAAkBJ,GACjC,MAAMK,EACiB,mBAAfL,EAAMM,KAAsBN,EAAMM,OAASN,EAAMM,KAAKD,MAC9D,IAAKA,EAAO,OAAOL,EAAMO,UAAY,UACrC,OAAOX,EAACG,EAAK,CAAAG,EAAGG,EAAOJ,SAAUD,EAAMC,UACxC,UAWgBO,EAAOR,GACtB,MAAMS,EAAQX,EAAQ,IAAM,IAAIY,IAAO,IACvC,IAAIC,GACoB,mBAAfX,EAAMY,KAAsBZ,EAAMY,OAASZ,EAAMY,MAGxDP,MAEF,IAAKM,EAAKE,OAAQ,OAAOb,EAAMO,UAAY,KAE3C,MAAMO,EAAU,IAAIC,IAAIN,EAAMO,QAExBC,EAAQN,EAAKO,IAAI,CAACb,EAAOc,KAC9BL,EAAQM,OAAOf,GACf,IAAKI,EAAMY,IAAIhB,GAAQ,CACtB,MAAMiB,EAAS1B,EAACG,EAAK,CAAAG,EAAGG,EAAOF,EAAGgB,EAAKlB,SAAUD,EAAMC,WACvDQ,EAAMc,IAAIlB,EAAOiB,GACjB,OAAOA,CACR,CACA,OAAOb,EAAMe,IAAInB,EAAK,GAGvBS,EAAQW,QAAQpB,IACfI,EAAMW,OAAOf,EACd,GAEA,OAAOT,EAAcC,EAAU,KAAMoB,EACtC,CAEM,SAAUS,EACfrB,GAEA,MAAMsB,EAAIhC,UAAUU,GACpB,GAAIsB,EAAEC,SAAWvB,EAAOsB,EAAEtB,MAAQA,EAClC,OAAOsB,CACR,UAEgBE,EAAgBxB,GAC/B,MAAMyB,EAAMnC,UAAUU,GACtB,KAAM,YAAayB,GAClBC,OAAOC,eAAeF,EAAK,UAAWG,GACvC,OAAOH,CACR,CACA,MAAMG,EAAiB,CACtBC,cAAc,EACdV,MACC,OAAOW,KAAK9B,KACb,EACAkB,IAAkBrB,GACjBiC,KAAK9B,MAAQH,CACd,UACAM,SAAAJ,UAAAsB,mBAAAG"}
@@ -1 +1 @@
1
- import{useSignal}from"@preact/signals";import{createElement as r,Fragment as n}from"preact";import{useMemo as t}from"preact/hooks";var e=function(r){var n="function"==typeof r.children?r.children(r.v,r.i):r.children;if(r.cache)r.cache.set(r.v,n);return n};function i(n){var t=n.when.value;if(!t)return n.fallback||null;else return r(e,{v:t,children:n.children})}function u(i){var u=t(function(){return new Map},[]),f=("function"==typeof i.each?i.each():i.each).value;if(!f.length)return i.fallback||null;var o=f.map(function(n,t){if(!u.has(n))return r(e,{v:n,i:t,children:i.children,cache:u});else return u.get(n)});return r(n,null,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",c);return n}var c={configurable:!0,get:function(){return this.value},set:function(r){this.value=r}};export{u as For,i as Show,f as useLiveSignal,o as useSignalRef};//# sourceMappingURL=utils.module.js.map
1
+ import{useSignal}from"@preact/signals";import{createElement as n,Fragment as r}from"preact";import{useMemo as t}from"preact/hooks";var e=function(n){return"function"==typeof n.children?n.children(n.v,n.i):n.children};function u(r){var t="function"==typeof r.when?r.when():r.when.value;if(!t)return r.fallback||null;else return n(e,{v:t,children:r.children})}function i(u){var i=t(function(){return new Map},[]),o=("function"==typeof u.each?u.each():u.each).value;if(!o.length)return u.fallback||null;var f=new Set(i.keys()),c=o.map(function(r,t){f.delete(r);if(!i.has(r)){var o=n(e,{v:r,i:t,children:u.children});i.set(r,o);return o}return i.get(r)});f.forEach(function(n){i.delete(n)});return n(r,null,c)}function o(n){var r=useSignal(n);if(r.peek()!==n)r.value=n;return r}function f(n){var r=useSignal(n);if(!("current"in r))Object.defineProperty(r,"current",c);return r}var c={configurable:!0,get:function(){return this.value},set:function(n){this.value=n}};export{i as For,u as Show,o as useLiveSignal,f 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\";\nimport { Fragment, createElement, JSX } from \"preact\";\nimport { useMemo } from \"preact/hooks\";\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\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\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\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 <Item v={value} i={key} children={props.children} cache={cache} />;\n\t\t}\n\t\treturn cache.get(value);\n\t});\n\n\treturn createElement(Fragment, null, items);\n}\n\nexport function useLiveSignal<T>(\n\tvalue: Signal<T> | ReadonlySignal<T>\n): Signal<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): Signal<T> & { current: 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","createElement","Fragment","useMemo","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,0CAAAC,cAAAC,MAAA,2BAAAC,MAAA,eAAA,IAAMC,EAAO,SAACC,GACb,IAAMC,EACqB,mBAAnBD,EAAME,SACVF,EAAME,SAASF,EAAMG,EAAGH,EAAMI,GAC9BJ,EAAME,SACV,GAAIF,EAAMK,MACTL,EAAMK,MAAMC,IAAIN,EAAMG,EAAGF,GAE1B,OAAOA,CACR,EAEgB,SAAAM,EAAkBP,GACjC,IAAMQ,EAAQR,EAAMS,KAAKD,MACzB,IAAKA,EAAO,OAAOR,EAAMU,UAAY,UACrC,OAAOd,EAACG,EAAK,CAAAI,EAAGK,EAAON,SAAUF,EAAME,UACxC,UAWgBS,EAAOX,GACtB,IAAMK,EAAQP,EAAQ,WAAM,OAAA,IAAIc,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,OAAOZ,EAACG,EAAK,CAAAI,EAAGK,EAAOJ,EAAGc,EAAKhB,SAAUF,EAAME,SAAUG,MAAOA,SAEjE,OAAOA,EAAMe,IAAIZ,EAClB,GAEA,OAAOZ,EAAcC,EAAU,KAAMmB,EACtC,UAEgBK,EACfb,GAEA,IAAMc,EAAI3B,UAAUa,GACpB,GAAIc,EAAEC,SAAWf,EAAOc,EAAEd,MAAQA,EAClC,OAAOc,CACR,CAEgB,SAAAE,EAAgBhB,GAC/B,IAAMiB,EAAM9B,UAAUa,GACtB,KAAM,YAAaiB,GAClBC,OAAOC,eAAeF,EAAK,UAAWG,GACvC,OAAOH,CACR,CACA,IAAMG,EAAiB,CACtBC,cAAc,EACdT,IAAG,WACF,YAAYZ,KACb,EACAF,aAAkBH,GACjB2B,KAAKtB,MAAQL,CACd,UACAQ,SAAAJ,UAAAc,mBAAAG"}
1
+ {"version":3,"file":"utils.module.js","sources":["../src/index.tsx"],"sourcesContent":["import { ReadonlySignal, Signal } from \"@preact/signals-core\";\nimport { useSignal } from \"@preact/signals\";\nimport { Fragment, createElement, JSX } from \"preact\";\nimport { useMemo } from \"preact/hooks\";\n\ninterface ShowProps<T = boolean> {\n\twhen: Signal<T> | ReadonlySignal<T> | (() => T);\n\tfallback?: JSX.Element;\n\tchildren: JSX.Element | ((value: NonNullable<T>) => JSX.Element);\n}\n\nconst Item = (props: any) => {\n\treturn typeof props.children === \"function\"\n\t\t? props.children(props.v, props.i)\n\t\t: props.children;\n};\n\nexport function Show<T = boolean>(props: ShowProps<T>): JSX.Element | null {\n\tconst value =\n\t\ttypeof props.when === \"function\" ? props.when() : 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\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 removed = new Set(cache.keys());\n\n\tconst items = list.map((value, key) => {\n\t\tremoved.delete(value);\n\t\tif (!cache.has(value)) {\n\t\t\tconst result = <Item v={value} i={key} children={props.children} />;\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, null, items);\n}\n\nexport function useLiveSignal<T>(\n\tvalue: Signal<T> | ReadonlySignal<T>\n): Signal<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): Signal<T> & { current: 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","createElement","Fragment","useMemo","Item","props","children","v","i","Show","value","when","fallback","For","cache","Map","list","each","length","removed","Set","keys","items","map","key","has","result","set","get","forEach","useLiveSignal","s","peek","useSignalRef","ref","Object","defineProperty","refSignalProto","configurable","this"],"mappings":"OAWAA,cAAA,0CAAAC,cAAAC,MAAA,2BAAAC,MAAA,eAAA,IAAMC,EAAO,SAACC,GACb,MAAiC,mBAAnBA,EAAMC,SACjBD,EAAMC,SAASD,EAAME,EAAGF,EAAMG,GAC9BH,EAAMC,QACV,WAEgBG,EAAkBJ,GACjC,IAAMK,EACiB,mBAAfL,EAAMM,KAAsBN,EAAMM,OAASN,EAAMM,KAAKD,MAC9D,IAAKA,EAAO,OAAOL,EAAMO,UAAY,UACrC,OAAOX,EAACG,EAAK,CAAAG,EAAGG,EAAOJ,SAAUD,EAAMC,UACxC,CAWgB,SAAAO,EAAOR,GACtB,IAAMS,EAAQX,EAAQ,WAAM,OAAA,IAAIY,GAAK,EAAE,IACnCC,GACoB,mBAAfX,EAAMY,KAAsBZ,EAAMY,OAASZ,EAAMY,MAGxDP,MAEF,IAAKM,EAAKE,OAAQ,OAAOb,EAAMO,UAAY,KAE3C,IAAMO,EAAU,IAAIC,IAAIN,EAAMO,QAExBC,EAAQN,EAAKO,IAAI,SAACb,EAAOc,GAC9BL,SAAeT,GACf,IAAKI,EAAMW,IAAIf,GAAQ,CACtB,IAAMgB,EAASzB,EAACG,EAAK,CAAAG,EAAGG,EAAOF,EAAGgB,EAAKlB,SAAUD,EAAMC,WACvDQ,EAAMa,IAAIjB,EAAOgB,GACjB,OAAOA,CACR,CACA,OAAOZ,EAAMc,IAAIlB,EAClB,GAEAS,EAAQU,QAAQ,SAAAnB,GACfI,EAAY,OAACJ,EACd,GAEA,OAAOT,EAAcC,EAAU,KAAMoB,EACtC,CAEgB,SAAAQ,EACfpB,GAEA,IAAMqB,EAAI/B,UAAUU,GACpB,GAAIqB,EAAEC,SAAWtB,EAAOqB,EAAErB,MAAQA,EAClC,OAAOqB,CACR,CAEgB,SAAAE,EAAgBvB,GAC/B,IAAMwB,EAAMlC,UAAUU,GACtB,KAAM,YAAawB,GAClBC,OAAOC,eAAeF,EAAK,UAAWG,GACvC,OAAOH,CACR,CACA,IAAMG,EAAiB,CACtBC,cAAc,EACdV,IAAA,WACC,OAAOW,KAAK7B,KACb,EACAiB,IAAA,SAAkBpB,GACjBgC,KAAK7B,MAAQH,CACd,UACAM,SAAAJ,UAAAqB,mBAAAG"}
@@ -4,24 +4,20 @@ import { Fragment, createElement, JSX } from "preact";
4
4
  import { useMemo } from "preact/hooks";
5
5
 
6
6
  interface ShowProps<T = boolean> {
7
- when: Signal<T> | ReadonlySignal<T>;
7
+ when: Signal<T> | ReadonlySignal<T> | (() => T);
8
8
  fallback?: JSX.Element;
9
9
  children: JSX.Element | ((value: NonNullable<T>) => JSX.Element);
10
10
  }
11
11
 
12
12
  const Item = (props: any) => {
13
- const result =
14
- typeof props.children === "function"
15
- ? props.children(props.v, props.i)
16
- : props.children;
17
- if (props.cache) {
18
- props.cache.set(props.v, result);
19
- }
20
- return result;
13
+ return typeof props.children === "function"
14
+ ? props.children(props.v, props.i)
15
+ : props.children;
21
16
  };
22
17
 
23
18
  export function Show<T = boolean>(props: ShowProps<T>): JSX.Element | null {
24
- const value = props.when.value;
19
+ const value =
20
+ typeof props.when === "function" ? props.when() : props.when.value;
25
21
  if (!value) return props.fallback || null;
26
22
  return <Item v={value} children={props.children} />;
27
23
  }
@@ -45,13 +41,22 @@ export function For<T>(props: ForProps<T>): JSX.Element | null {
45
41
 
46
42
  if (!list.length) return props.fallback || null;
47
43
 
44
+ const removed = new Set(cache.keys());
45
+
48
46
  const items = list.map((value, key) => {
47
+ removed.delete(value);
49
48
  if (!cache.has(value)) {
50
- return <Item v={value} i={key} children={props.children} cache={cache} />;
49
+ const result = <Item v={value} i={key} children={props.children} />;
50
+ cache.set(value, result);
51
+ return result;
51
52
  }
52
53
  return cache.get(value);
53
54
  });
54
55
 
56
+ removed.forEach(value => {
57
+ cache.delete(value);
58
+ });
59
+
55
60
  return createElement(Fragment, null, items);
56
61
  }
57
62