{"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, ComponentChildren } from \"preact\";\nimport { useMemo } from \"preact/hooks\";\n\ninterface ShowProps<T = boolean> {\n\twhen: Signal<T> | ReadonlySignal<T> | (() => T);\n\tfallback?: ComponentChildren;\n\tchildren: ComponentChildren | ((value: NonNullable<T>) => ComponentChildren);\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\nItem.displayName = \"Item\";\n\nexport function Show<T = boolean>(\n\tprops: ShowProps<T>\n): ComponentChildren | 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\nShow.displayName = \"Show\";\n\ninterface ForProps<T> {\n\teach:\n\t\t| Signal<Array<T>>\n\t\t| ReadonlySignal<Array<T>>\n\t\t| (() => Array<T> | Signal<Array<T>> | ReadonlySignal<Array<T>>);\n\tfallback?: ComponentChildren;\n\tgetKey?: (item: T, index: number) => string | number;\n\tchildren: (value: T, index: number) => ComponentChildren;\n}\n\nexport function For<T>(props: ForProps<T>): ComponentChildren | null {\n\tconst cache = useMemo(() => new Map(), []);\n\tconst list = (typeof props.each === \"function\" ? props.each() : props.each) as\n\t\t| Signal<Array<T>>\n\t\t| Array<T>;\n\n\tconst listValue = list instanceof Signal ? list.value : list;\n\n\tif (!listValue.length) return props.fallback || null;\n\n\tconst removed = new Set(cache.keys());\n\n\tconst items = listValue.map((value, index) => {\n\t\tremoved.delete(value);\n\t\tif (!cache.has(value)) {\n\t\t\tconst key = props.getKey ? props.getKey(value, index) : index;\n\t\t\tconst result = (\n\t\t\t\t<Item key={key} v={value} i={index} 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, null, items);\n}\n\nFor.displayName = \"For\";\n\nexport function useLiveSignal<T>(value: T): Signal<T> {\n\tconst s = useSignal(value);\n\tif (s.peek() !== value) s.value = value;\n\treturn s;\n}\n\nexport function useSignalRef<T>(value: T): 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":["Item","props","children","v","i","displayName","Show","value","when","fallback","createElement","For","cache","useMemo","Map","list","each","listValue","Signal","length","removed","Set","keys","items","map","index","delete","has","key","getKey","result","set","get","forEach","Fragment","useLiveSignal","s","useSignal","peek","useSignalRef","ref","Object","defineProperty","refSignalProto","configurable","this"],"mappings":"iLAWA,MAAMA,EAAQC,GACoB,mBAAnBA,EAAMC,SACjBD,EAAMC,SAASD,EAAME,EAAGF,EAAMG,GAC9BH,EAAMC,SAGVF,EAAKK,YAAc,OAEb,SAAUC,EACfL,GAEA,MAAMM,EACiB,mBAAfN,EAAMO,KAAsBP,EAAMO,OAASP,EAAMO,KAAKD,MAC9D,IAAKA,EAAO,OAAON,EAAMQ,UAAY,UACrC,OAAOC,EAACV,EAAK,CAAAG,EAAGI,EAAOL,SAAUD,EAAMC,UACxC,CAEAI,EAAKD,YAAc,OAYH,SAAAM,EAAOV,GACtB,MAAMW,EAAQC,EAAQ,IAAM,IAAIC,IAAO,IACjCC,EAA8B,mBAAfd,EAAMe,KAAsBf,EAAMe,OAASf,EAAMe,KAIhEC,EAAYF,aAAgBG,EAASH,EAAKR,MAAQQ,EAExD,IAAKE,EAAUE,OAAQ,OAAOlB,EAAMQ,UAAY,KAEhD,MAAMW,EAAU,IAAIC,IAAIT,EAAMU,QAExBC,EAAQN,EAAUO,IAAI,CAACjB,EAAOkB,KACnCL,EAAQM,OAAOnB,GACf,IAAKK,EAAMe,IAAIpB,GAAQ,CACtB,MAAMqB,EAAM3B,EAAM4B,OAAS5B,EAAM4B,OAAOtB,EAAOkB,GAASA,EAClDK,EACLpB,EAACV,GAAK4B,IAAKA,EAAKzB,EAAGI,EAAOH,EAAGqB,EAAOvB,SAAUD,EAAMC,WAErDU,EAAMmB,IAAIxB,EAAOuB,GACjB,OAAOA,CACR,CACA,OAAOlB,EAAMoB,IAAIzB,EAAK,GAGvBa,EAAQa,QAAQ1B,IACfK,EAAMc,OAAOnB,EACd,GAEA,OAAOG,EAAcwB,EAAU,KAAMX,EACtC,CAEAZ,EAAIN,YAAc,MAEZ,SAAU8B,EAAiB5B,GAChC,MAAM6B,EAAIC,UAAU9B,GACpB,GAAI6B,EAAEE,SAAW/B,EAAO6B,EAAE7B,MAAQA,EAClC,OAAO6B,CACR,CAEM,SAAUG,EAAgBhC,GAC/B,MAAMiC,EAAMH,UAAU9B,GACtB,KAAM,YAAaiC,GAClBC,OAAOC,eAAeF,EAAK,UAAWG,GACvC,OAAOH,CACR,CACA,MAAMG,EAAiB,CACtBC,cAAc,EACdZ,MACC,OAAOa,KAAKtC,KACb,EACAwB,IAAkB5B,GACjB0C,KAAKtC,MAAQJ,CACd,UACAQ,SAAAL,UAAA6B,mBAAAI"}