@preact/signals-react 3.6.0 → 3.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
# @preact/signals-react
|
|
2
2
|
|
|
3
|
+
## 3.6.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [#795](https://github.com/preactjs/signals/pull/795) [`80712b1`](https://github.com/preactjs/signals/commit/80712b188b11b43efe9e95e09b78f57f0551f6eb) Thanks [@rschristian](https://github.com/rschristian)! - Widen utility component types to accept ComponentChildren/ReactNodes as children and fallbacks
|
|
8
|
+
|
|
9
|
+
- [#800](https://github.com/preactjs/signals/pull/800) [`bc5b573`](https://github.com/preactjs/signals/commit/bc5b573d3e24d1da2b1f91c051f70e57d7be6bc7) Thanks [@JoviDeCroock](https://github.com/JoviDeCroock)! - Allow useLiveSignal to accept plain values
|
|
10
|
+
|
|
3
11
|
## 3.6.0
|
|
4
12
|
|
|
5
13
|
### Minor Changes
|
package/package.json
CHANGED
package/utils/dist/index.d.ts
CHANGED
|
@@ -1,17 +1,18 @@
|
|
|
1
1
|
import { ReadonlySignal, Signal } from "@preact/signals-core";
|
|
2
|
+
import { ReactNode } from "react";
|
|
2
3
|
interface ShowProps<T = boolean> {
|
|
3
4
|
when: Signal<T> | ReadonlySignal<T> | (() => T);
|
|
4
|
-
fallback?:
|
|
5
|
-
children:
|
|
5
|
+
fallback?: ReactNode;
|
|
6
|
+
children: ReactNode | ((value: NonNullable<T>) => ReactNode);
|
|
6
7
|
}
|
|
7
8
|
export declare function Show<T = boolean>(props: ShowProps<T>): JSX.Element | null;
|
|
8
9
|
interface ForProps<T> {
|
|
9
10
|
each: Signal<Array<T>> | ReadonlySignal<Array<T>> | (() => Signal<Array<T>> | ReadonlySignal<Array<T>>);
|
|
10
|
-
fallback?:
|
|
11
|
-
children: (value: T, index: number) =>
|
|
11
|
+
fallback?: ReactNode;
|
|
12
|
+
children: (value: T, index: number) => ReactNode;
|
|
12
13
|
}
|
|
13
14
|
export declare function For<T>(props: ForProps<T>): JSX.Element | null;
|
|
14
|
-
export declare function useLiveSignal<T>(value:
|
|
15
|
+
export declare function useLiveSignal<T>(value: T): Signal<T>;
|
|
15
16
|
export declare function useSignalRef<T>(value: T): Signal<T> & {
|
|
16
17
|
current: T;
|
|
17
18
|
};
|
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 } from \"react\";\n\ninterface ShowProps<T = boolean> {\n\twhen: Signal<T> | ReadonlySignal<T> | (() => T);\n\tfallback?:
|
|
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\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\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\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 as JSX.Element) || 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 = (\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\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":["signalsReact","require","runtime","react","Item","props","useSignals","children","v","i","refSignalProto","configurable","get","value","set","this","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,yBAAAC,EAAAD,QAAA,iCAAAE,EAAAF,QAAA,SAAMG,EAAO,SAACC,GACbC,EAAAA,aACA,MAAiC,mBAAnBD,EAAME,SACjBF,EAAME,SAASF,EAAMG,EAAGH,EAAMI,GAC9BJ,EAAME,QACV,EA+DMG,EAAiB,CACtBC,cAAc,EACdC,eACC,YAAYC,KACb,EACAC,IAAG,SAAeN,GACjBO,KAAKF,MAAQL,CACd,GACAQ,QAAAC,IApDK,SAAiBZ,GACtBC,eACA,IAAMY,EAAQC,UAAQ,WAAA,WAAUC,GAAK,EAAE,IACnCC,GACoB,mBAAfhB,EAAMiB,KAAsBjB,EAAMiB,OAASjB,EAAMiB,MAGxDT,MAEF,IAAKQ,EAAKE,OAAQ,OAAQlB,EAAMmB,UAA4B,KAE5D,IAAMC,EAAU,IAAIC,IAAIR,EAAMS,QAExBC,EAAQP,EAAKQ,IAAI,SAAChB,EAAOiB,GAC9BL,EAAc,OAACZ,GACf,IAAKK,EAAMa,IAAIlB,GAAQ,CACtB,IAAMmB,EACLC,EAACA,cAAA7B,GAAKI,EAAGK,EAAOiB,IAAKA,EAAKrB,EAAGqB,EAAKvB,SAAUF,EAAME,WAEnDW,EAAMJ,IAAID,EAAOmB,GACjB,OAAOA,CACR,CACA,OAAOd,EAAMN,IAAIC,EAClB,GAEAY,EAAQS,QAAQ,SAAArB,GACfK,EAAY,OAACL,EACd,GAEA,OAAOoB,EAAaA,cAACE,WAAU,CAAE5B,SAAUqB,GAC5C,EAsBCZ,QAAAoB,KArEe,SAAkB/B,GACjCC,EAAUA,aACV,IAAMO,EACiB,mBAAfR,EAAMgC,KAAsBhC,EAAMgC,OAAShC,EAAMgC,KAAKxB,MAC9D,IAAKA,EAAO,OAAQR,EAAMmB,UAA4B,UACtD,OAAOS,EAACA,cAAA7B,EAAK,CAAAI,EAAGK,EAAON,SAAUF,EAAME,UACxC,EA+DCS,QAAAsB,cApBe,SAAiBzB,GAChC,IAAM0B,EAAIC,YAAU3B,GACpB,GAAI0B,EAAEE,SAAW5B,EAAO0B,EAAE1B,MAAQA,EAClC,OAAO0B,CACR,EAgBCvB,QAAA0B,aAdK,SAA0B7B,GAC/B,IAAM8B,EAAMH,EAASA,UAAC3B,GACtB,KAAM,YAAa8B,GAClBC,OAAOC,eAAeF,EAAK,UAAWjC,GACvC,OAAOiC,CACR"}
|
|
@@ -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 } from \"react\";\n\ninterface ShowProps<T = boolean> {\n\twhen: Signal<T> | ReadonlySignal<T> | (() => T);\n\tfallback?:
|
|
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\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\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\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 as JSX.Element) || 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 = (\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\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":["g","f","exports","module","require","define","amd","globalThis","self","reactSignalsutils","signalsReact","reactSignalsRuntime","react","this","runtime","Item","props","useSignals","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,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,EAAAA,aACA,MAAiC,mBAAnBD,EAAME,SACjBF,EAAME,SAASF,EAAMG,EAAGH,EAAMI,GAC9BJ,EAAME,QACV,EA+DMG,EAAiB,CACtBC,cAAc,EACdC,eACC,YAAYC,KACb,EACAC,IAAG,SAAeN,GACjBN,KAAKW,MAAQL,CACd,GACAjB,EAAAwB,IApDK,SAAiBV,GACtBC,eACA,IAAMU,EAAQC,UAAQ,WAAA,WAAUC,GAAK,EAAE,IACnCC,GACoB,mBAAfd,EAAMe,KAAsBf,EAAMe,OAASf,EAAMe,MAGxDP,MAEF,IAAKM,EAAKE,OAAQ,OAAQhB,EAAMiB,UAA4B,KAE5D,IAAMC,EAAU,IAAIC,IAAIR,EAAMS,QAExBC,EAAQP,EAAKQ,IAAI,SAACd,EAAOe,GAC9BL,EAAc,OAACV,GACf,IAAKG,EAAMa,IAAIhB,GAAQ,CACtB,IAAMiB,EACLC,EAACA,cAAA3B,GAAKI,EAAGK,EAAOe,IAAKA,EAAKnB,EAAGmB,EAAKrB,SAAUF,EAAME,WAEnDS,EAAMF,IAAID,EAAOiB,GACjB,OAAOA,CACR,CACA,OAAOd,EAAMJ,IAAIC,EAClB,GAEAU,EAAQS,QAAQ,SAAAnB,GACfG,EAAY,OAACH,EACd,GAEA,OAAOkB,EAAaA,cAACE,WAAU,CAAE1B,SAAUmB,GAC5C,EAsBCnC,EAAA2C,KArEe,SAAkB7B,GACjCC,EAAUA,aACV,IAAMO,EACiB,mBAAfR,EAAM8B,KAAsB9B,EAAM8B,OAAS9B,EAAM8B,KAAKtB,MAC9D,IAAKA,EAAO,OAAQR,EAAMiB,UAA4B,UACtD,OAAOS,EAACA,cAAA3B,EAAK,CAAAI,EAAGK,EAAON,SAAUF,EAAME,UACxC,EA+DChB,EAAA6C,cApBe,SAAiBvB,GAChC,IAAMwB,EAAIC,YAAUzB,GACpB,GAAIwB,EAAEE,SAAW1B,EAAOwB,EAAExB,MAAQA,EAClC,OAAOwB,CACR,EAgBC9C,EAAAiD,aAdK,SAA0B3B,GAC/B,IAAM4B,EAAMH,EAASA,UAACzB,GACtB,KAAM,YAAa4B,GAClBC,OAAOC,eAAeF,EAAK,UAAW/B,GACvC,OAAO+B,CACR,CASC"}
|
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 } from \"react\";\n\ninterface ShowProps<T = boolean> {\n\twhen: Signal<T> | ReadonlySignal<T> | (() => T);\n\tfallback?:
|
|
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\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\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\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 as JSX.Element) || 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 = (\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\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":["useSignal","useSignals","createElement","useMemo","Fragment","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,6CAAAC,MAAA,wDAAAC,aAAAC,cAAAC,MAAA,QAAA,MAAMC,EAAQC,IACbL,IACA,MAAiC,mBAAnBK,EAAMC,SACjBD,EAAMC,SAASD,EAAME,EAAGF,EAAMG,GAC9BH,EAAMC,mBAGMG,EAAkBJ,GACjCL,IACA,MAAMU,EACiB,mBAAfL,EAAMM,KAAsBN,EAAMM,OAASN,EAAMM,KAAKD,MAC9D,IAAKA,EAAO,OAAQL,EAAMO,UAA4B,UACtD,OAAOX,EAACG,EAAK,CAAAG,EAAGG,EAAOJ,SAAUD,EAAMC,UACxC,CAWgB,SAAAO,EAAOR,GACtBL,IACA,MAAMc,EAAQZ,EAAQ,IAAM,IAAIa,IAAO,IACvC,IAAIC,GACoB,mBAAfX,EAAMY,KAAsBZ,EAAMY,OAASZ,EAAMY,MAGxDP,MAEF,IAAKM,EAAKE,OAAQ,OAAQb,EAAMO,UAA4B,KAE5D,MAAMO,EAAU,IAAIC,IAAIN,EAAMO,QAExBC,EAAQN,EAAKO,IAAI,CAACb,EAAOc,KAC9BL,EAAQM,OAAOf,GACf,IAAKI,EAAMY,IAAIhB,GAAQ,CACtB,MAAMiB,EACL1B,EAACG,GAAKG,EAAGG,EAAOc,IAAKA,EAAKhB,EAAGgB,EAAKlB,SAAUD,EAAMC,WAEnDQ,EAAMc,IAAIlB,EAAOiB,GACjB,OAAOA,CACR,CACA,OAAOb,EAAMe,IAAInB,EAAK,GAGvBS,EAAQW,QAAQpB,IACfI,EAAMW,OAAOf,EACd,GAEA,OAAOT,EAAcE,EAAU,CAAEG,SAAUgB,GAC5C,UAEgBS,EAAiBrB,GAChC,MAAMsB,EAAIjC,UAAUW,GACpB,GAAIsB,EAAEC,SAAWvB,EAAOsB,EAAEtB,MAAQA,EAClC,OAAOsB,CACR,CAEM,SAAUE,EAAgBxB,GAC/B,MAAMyB,EAAMpC,UAAUW,GACtB,KAAM,YAAayB,GAClBC,OAAOC,eAAeF,EAAK,UAAWG,GACvC,OAAOH,CACR,CACA,MAAMG,EAAiB,CACtBC,cAAc,EACdV,MACC,OAAWW,KAAC9B,KACb,EACAkB,IAAkBrB,GACjBiC,KAAK9B,MAAQH,CACd,UACAM,SAAAJ,UAAAsB,mBAAAG"}
|
|
@@ -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 } from \"react\";\n\ninterface ShowProps<T = boolean> {\n\twhen: Signal<T> | ReadonlySignal<T> | (() => T);\n\tfallback?:
|
|
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\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\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\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 as JSX.Element) || 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 = (\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\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":["useSignal","useSignals","createElement","useMemo","Fragment","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,6CAAAC,MAAA,wDAAAC,aAAAC,cAAAC,MAAA,QAAA,IAAMC,EAAO,SAACC,GACbL,IACA,MAAiC,mBAAnBK,EAAMC,SACjBD,EAAMC,SAASD,EAAME,EAAGF,EAAMG,GAC9BH,EAAMC,QACV,EAEgB,SAAAG,EAAkBJ,GACjCL,IACA,IAAMU,EACiB,mBAAfL,EAAMM,KAAsBN,EAAMM,OAASN,EAAMM,KAAKD,MAC9D,IAAKA,EAAO,OAAQL,EAAMO,UAA4B,UACtD,OAAOX,EAACG,EAAK,CAAAG,EAAGG,EAAOJ,SAAUD,EAAMC,UACxC,CAWM,SAAUO,EAAOR,GACtBL,IACA,IAAMc,EAAQZ,EAAQ,WAAA,WAAUa,GAAK,EAAE,IACnCC,GACoB,mBAAfX,EAAMY,KAAsBZ,EAAMY,OAASZ,EAAMY,MAGxDP,MAEF,IAAKM,EAAKE,OAAQ,OAAQb,EAAMO,UAA4B,KAE5D,IAAMO,EAAU,IAAIC,IAAIN,EAAMO,QAExBC,EAAQN,EAAKO,IAAI,SAACb,EAAOc,GAC9BL,EAAc,OAACT,GACf,IAAKI,EAAMW,IAAIf,GAAQ,CACtB,IAAMgB,EACLzB,EAACG,GAAKG,EAAGG,EAAOc,IAAKA,EAAKhB,EAAGgB,EAAKlB,SAAUD,EAAMC,WAEnDQ,EAAMa,IAAIjB,EAAOgB,GACjB,OAAOA,CACR,CACA,OAAOZ,EAAMc,IAAIlB,EAClB,GAEAS,EAAQU,QAAQ,SAAAnB,GACfI,EAAY,OAACJ,EACd,GAEA,OAAOT,EAAcE,EAAU,CAAEG,SAAUgB,GAC5C,CAEgB,SAAAQ,EAAiBpB,GAChC,IAAMqB,EAAIhC,UAAUW,GACpB,GAAIqB,EAAEC,SAAWtB,EAAOqB,EAAErB,MAAQA,EAClC,OAAOqB,CACR,CAEM,SAAUE,EAAgBvB,GAC/B,IAAMwB,EAAMnC,UAAUW,GACtB,KAAM,YAAawB,GAClBC,OAAOC,eAAeF,EAAK,UAAWG,GACvC,OAAOH,CACR,CACA,IAAMG,EAAiB,CACtBC,cAAc,EACdV,eACC,YAAYlB,KACb,EACAiB,IAAG,SAAepB,GACjBgC,KAAK7B,MAAQH,CACd,UACAM,SAAAJ,UAAAqB,mBAAAG"}
|
package/utils/src/index.tsx
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { ReadonlySignal, Signal } from "@preact/signals-core";
|
|
2
2
|
import { useSignal } from "@preact/signals-react";
|
|
3
3
|
import { useSignals } from "@preact/signals-react/runtime";
|
|
4
|
-
import { Fragment, createElement, useMemo } from "react";
|
|
4
|
+
import { Fragment, createElement, useMemo, ReactNode } from "react";
|
|
5
5
|
|
|
6
6
|
interface ShowProps<T = boolean> {
|
|
7
7
|
when: Signal<T> | ReadonlySignal<T> | (() => T);
|
|
8
|
-
fallback?:
|
|
9
|
-
children:
|
|
8
|
+
fallback?: ReactNode;
|
|
9
|
+
children: ReactNode | ((value: NonNullable<T>) => ReactNode);
|
|
10
10
|
}
|
|
11
11
|
|
|
12
12
|
const Item = (props: any) => {
|
|
@@ -20,7 +20,7 @@ export function Show<T = boolean>(props: ShowProps<T>): JSX.Element | null {
|
|
|
20
20
|
useSignals();
|
|
21
21
|
const value =
|
|
22
22
|
typeof props.when === "function" ? props.when() : props.when.value;
|
|
23
|
-
if (!value) return props.fallback || null;
|
|
23
|
+
if (!value) return (props.fallback as JSX.Element) || null;
|
|
24
24
|
return <Item v={value} children={props.children} />;
|
|
25
25
|
}
|
|
26
26
|
|
|
@@ -29,8 +29,8 @@ interface ForProps<T> {
|
|
|
29
29
|
| Signal<Array<T>>
|
|
30
30
|
| ReadonlySignal<Array<T>>
|
|
31
31
|
| (() => Signal<Array<T>> | ReadonlySignal<Array<T>>);
|
|
32
|
-
fallback?:
|
|
33
|
-
children: (value: T, index: number) =>
|
|
32
|
+
fallback?: ReactNode;
|
|
33
|
+
children: (value: T, index: number) => ReactNode;
|
|
34
34
|
}
|
|
35
35
|
|
|
36
36
|
export function For<T>(props: ForProps<T>): JSX.Element | null {
|
|
@@ -42,7 +42,7 @@ export function For<T>(props: ForProps<T>): JSX.Element | null {
|
|
|
42
42
|
>
|
|
43
43
|
).value;
|
|
44
44
|
|
|
45
|
-
if (!list.length) return props.fallback || null;
|
|
45
|
+
if (!list.length) return (props.fallback as JSX.Element) || null;
|
|
46
46
|
|
|
47
47
|
const removed = new Set(cache.keys());
|
|
48
48
|
|
|
@@ -65,7 +65,7 @@ export function For<T>(props: ForProps<T>): JSX.Element | null {
|
|
|
65
65
|
return createElement(Fragment, { children: items });
|
|
66
66
|
}
|
|
67
67
|
|
|
68
|
-
export function useLiveSignal<T>(value:
|
|
68
|
+
export function useLiveSignal<T>(value: T): Signal<T> {
|
|
69
69
|
const s = useSignal(value);
|
|
70
70
|
if (s.peek() !== value) s.value = value;
|
|
71
71
|
return s;
|