flexium 0.12.11 → 0.12.16
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/dist/canvas.d.cts +14 -13
- package/dist/canvas.d.ts +14 -13
- package/dist/canvas.js +1 -1
- package/dist/canvas.js.map +1 -1
- package/dist/canvas.mjs +1 -1
- package/dist/canvas.mjs.map +1 -1
- package/dist/chunk-3DKZ2J4D.mjs +2 -0
- package/dist/chunk-3DKZ2J4D.mjs.map +1 -0
- package/dist/chunk-5PNH2ARD.mjs +2 -0
- package/dist/chunk-5PNH2ARD.mjs.map +1 -0
- package/dist/{chunk-7BXR4ZFD.js → chunk-6VIRXD2Y.js} +2 -2
- package/dist/chunk-6VIRXD2Y.js.map +1 -0
- package/dist/chunk-6Z33DLMI.js +2 -0
- package/dist/chunk-6Z33DLMI.js.map +1 -0
- package/dist/chunk-E75BJDOQ.mjs +2 -0
- package/dist/chunk-E75BJDOQ.mjs.map +1 -0
- package/dist/chunk-IWFEXW4F.mjs +2 -0
- package/dist/chunk-IWFEXW4F.mjs.map +1 -0
- package/dist/chunk-JY6CE6RN.mjs +2 -0
- package/dist/chunk-JY6CE6RN.mjs.map +1 -0
- package/dist/chunk-LTT43APF.js +2 -0
- package/dist/chunk-LTT43APF.js.map +1 -0
- package/dist/chunk-PSKDIB7J.js +2 -0
- package/dist/chunk-PSKDIB7J.js.map +1 -0
- package/dist/chunk-UWFVCKRU.js +2 -0
- package/dist/chunk-UWFVCKRU.js.map +1 -0
- package/dist/chunk-WGKD63GN.mjs +2 -0
- package/dist/chunk-WGKD63GN.mjs.map +1 -0
- package/dist/chunk-YWTD32NA.js +2 -0
- package/dist/chunk-YWTD32NA.js.map +1 -0
- package/dist/core.d.cts +91 -15
- package/dist/core.d.ts +91 -15
- package/dist/core.js +1 -1
- package/dist/core.js.map +1 -1
- package/dist/core.mjs +1 -1
- package/dist/core.mjs.map +1 -1
- package/dist/dom.d.cts +154 -9
- package/dist/dom.d.ts +154 -9
- package/dist/dom.js +1 -1
- package/dist/dom.js.map +1 -1
- package/dist/dom.mjs +1 -1
- package/dist/dom.mjs.map +1 -1
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1 -1
- package/dist/index.mjs.map +1 -1
- package/dist/interactive.d.cts +17 -16
- package/dist/interactive.d.ts +17 -16
- package/dist/interactive.js +1 -1
- package/dist/interactive.js.map +1 -1
- package/dist/interactive.mjs +1 -1
- package/dist/interactive.mjs.map +1 -1
- package/dist/jsx-dev-runtime.d.cts +1 -1
- package/dist/jsx-dev-runtime.d.ts +1 -1
- package/dist/jsx-runtime.d.cts +1 -1
- package/dist/jsx-runtime.d.ts +1 -1
- package/dist/metafile-cjs.json +1 -1
- package/dist/metafile-esm.json +1 -1
- package/dist/render-QZAFAGIM.js +2 -0
- package/dist/render-QZAFAGIM.js.map +1 -0
- package/dist/render-UIWHIMS2.mjs +2 -0
- package/dist/render-UIWHIMS2.mjs.map +1 -0
- package/dist/router.d.cts +1 -1
- package/dist/router.d.ts +1 -1
- package/dist/router.js +1 -1
- package/dist/router.js.map +1 -1
- package/dist/router.mjs +1 -1
- package/dist/router.mjs.map +1 -1
- package/dist/server.d.cts +17 -0
- package/dist/server.d.ts +17 -0
- package/dist/server.js +2 -0
- package/dist/server.js.map +1 -0
- package/dist/server.mjs +2 -0
- package/dist/server.mjs.map +1 -0
- package/dist/types-CxlS2F2j.d.cts +19 -0
- package/dist/types-CxlS2F2j.d.ts +19 -0
- package/dist/types-y2GGaXXk.d.cts +9 -0
- package/dist/types-y2GGaXXk.d.ts +9 -0
- package/package.json +6 -1
- package/dist/chunk-44RZHCII.mjs +0 -2
- package/dist/chunk-44RZHCII.mjs.map +0 -1
- package/dist/chunk-7BXR4ZFD.js.map +0 -1
- package/dist/chunk-APAMPY43.js +0 -2
- package/dist/chunk-APAMPY43.js.map +0 -1
- package/dist/chunk-CPJRQL2C.mjs +0 -2
- package/dist/chunk-CPJRQL2C.mjs.map +0 -1
- package/dist/chunk-ECB5HZOQ.mjs +0 -2
- package/dist/chunk-ECB5HZOQ.mjs.map +0 -1
- package/dist/chunk-ENWGYQNU.js +0 -2
- package/dist/chunk-ENWGYQNU.js.map +0 -1
- package/dist/chunk-IA4FEBFE.js +0 -2
- package/dist/chunk-IA4FEBFE.js.map +0 -1
- package/dist/chunk-LUREDEUB.mjs +0 -2
- package/dist/chunk-LUREDEUB.mjs.map +0 -1
- package/dist/chunk-LUW7DIEW.js +0 -2
- package/dist/chunk-LUW7DIEW.js.map +0 -1
- package/dist/chunk-S6WF3XNF.mjs +0 -2
- package/dist/chunk-S6WF3XNF.mjs.map +0 -1
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {b}from'./chunk-5PNH2ARD.mjs';var f,u=class{constructor(n,e){this.fn=n;this.scheduler=e;this.deps=[];this.active=true;}run(){if(!this.active)return this.fn();let n=f;try{return this.cleanup(),f=this,this.fn()}finally{f=n;}}stop(){this.active&&(this.cleanup(),this.active=false);}cleanup(){let{deps:n}=this;if(n.length){for(let e=0;e<n.length;e++)n[e].delete(this);n.length=0;}}};function E(t,n={}){let e=new u(t,n.scheduler);e.run();let i=e.run.bind(e);return i.effect=e,i}function x(t){f&&(t.add(f),f.deps.push(t));}var s=new Set,o=false,d=false;function h(t){s.has(t)||(s.add(t),!o&&!d&&(o=true,Promise.resolve().then(a)));}function a(){o=false;let t=[...s];s.clear();for(let n of t)n.active&&n.run();}function l(t){d=t;}function y(t){let n=[...t];for(let e of n)e!==f&&(e.scheduler?e.scheduler():h(e));}function R(t,n){let e=b(()=>({cleanup:void 0,deps:void 0,effect:void 0,hasRun:false})),i=true;if(e.hasRun&&n&&e.deps&&(i=n.some((c,p)=>c!==e.deps[p])),i){e.cleanup&&(e.cleanup(),e.cleanup=void 0);let c=t();typeof c=="function"&&(e.cleanup=c),e.deps=n,e.hasRun=true;}}function g(t){if(t){l(true);try{t();}finally{l(false),a();}}else a();}export{f as a,E as b,x as c,y as d,R as e,g as f};//# sourceMappingURL=chunk-IWFEXW4F.mjs.map
|
|
2
|
+
//# sourceMappingURL=chunk-IWFEXW4F.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/core/lifecycle.ts"],"names":["activeEffect","ReactiveEffectLike","fn","scheduler","parent","deps","i","unsafeEffect","options","_effect","runner","trackEffect","dep","queue","isFlushPending","isBatching","queueJob","effect","flush","effects","setBatching","value","triggerEffects","state","hook","hasChanged","d","cleanup","sync"],"mappings":"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","file":"chunk-IWFEXW4F.mjs","sourcesContent":["import { hook } from './hook'\n\n// Reactive effect system\nexport let activeEffect: ReactiveEffect | undefined\n\nexport class ReactiveEffectLike {\n deps: Set<any>[] = []\n active = true\n\n constructor(\n public fn: () => void,\n public scheduler?: () => void\n ) { }\n\n run() {\n if (!this.active) {\n return this.fn()\n }\n\n let parent: ReactiveEffect | undefined = activeEffect\n try {\n this.cleanup()\n activeEffect = this\n return this.fn()\n } finally {\n activeEffect = parent\n }\n }\n\n stop() {\n if (this.active) {\n this.cleanup()\n this.active = false\n }\n }\n\n cleanup() {\n const { deps } = this\n if (deps.length) {\n for (let i = 0; i < deps.length; i++) {\n deps[i].delete(this)\n }\n deps.length = 0\n }\n }\n}\n\nexport type ReactiveEffect = ReactiveEffectLike\n\nexport function unsafeEffect(fn: () => void, options: { scheduler?: () => void } = {}) {\n const _effect = new ReactiveEffectLike(fn, options.scheduler)\n _effect.run()\n\n const runner: any = _effect.run.bind(_effect)\n runner.effect = _effect\n return runner\n}\n\nexport function trackEffect(dep: Set<ReactiveEffect>) {\n if (activeEffect) {\n dep.add(activeEffect)\n activeEffect.deps.push(dep)\n }\n}\n\nconst queue = new Set<ReactiveEffect>()\nlet isFlushPending = false\nlet isBatching = false\n\nexport function queueJob(effect: ReactiveEffect) {\n if (!queue.has(effect)) {\n queue.add(effect)\n if (!isFlushPending && !isBatching) {\n isFlushPending = true\n Promise.resolve().then(flush)\n }\n }\n}\n\nexport function flush() {\n isFlushPending = false\n const effects = [...queue]\n queue.clear()\n for (const effect of effects) {\n if (effect.active) {\n effect.run()\n }\n }\n}\n\nexport function setBatching(value: boolean) {\n isBatching = value\n}\n\nexport function triggerEffects(dep: Set<ReactiveEffect>) {\n const effects = [...dep]\n for (const effect of effects) {\n if (effect !== activeEffect) {\n if (effect.scheduler) {\n effect.scheduler()\n } else {\n queueJob(effect)\n }\n }\n }\n}\n\n// Lifecycle hooks\nexport function effect(fn: () => (void | (() => void)), deps?: any[]) {\n const state = hook(() => {\n return {\n cleanup: undefined as undefined | (() => void),\n deps: undefined as undefined | any[],\n effect: undefined as undefined | ReactiveEffect,\n hasRun: false\n }\n })\n\n let hasChanged = true\n if (state.hasRun && deps && state.deps) {\n hasChanged = deps.some((d, i) => d !== state.deps![i])\n }\n\n if (hasChanged) {\n if (state.cleanup) {\n state.cleanup()\n state.cleanup = undefined\n }\n\n const cleanup = fn()\n if (typeof cleanup === 'function') {\n state.cleanup = cleanup\n }\n\n state.deps = deps\n state.hasRun = true\n }\n}\n\n/**\n * Unified sync API\n * - sync(): Force refresh (flush pending effects)\n * - sync(fn): Batch updates (run fn then flush)\n */\nexport function sync(fn?: () => void) {\n if (fn) {\n setBatching(true)\n try {\n fn()\n } finally {\n setBatching(false)\n flush()\n }\n } else {\n flush()\n }\n}\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {a,c,d as d$1}from'./chunk-IWFEXW4F.mjs';var p=Symbol("flexium.reactive"),s=new WeakMap,l=new WeakMap;function M(e){if(e&&e[p])return e;let o=l.get(e);if(o)return o;let t=new Proxy(e,{get(n,r,i){if(r===p)return true;let c=Reflect.get(n,r,i);return b(n,r),c!==null&&typeof c=="object"?M(c):c},set(n,r,i,c){let x=n[r],a=Reflect.set(n,r,i,c);return a&&d(i,x)&&w(n,r),a}});return l.set(e,t),t}function b(e,o){if(!a)return;let t=s.get(e);t||s.set(e,t=new Map);let n=t.get(o);n||t.set(o,n=new Set),c(n);}function w(e,o){let t=s.get(e);if(!t)return;let n=t.get(o);n&&d$1(n);}function d(e,o){return !Object.is(e,o)}function T(e){return !!(e&&e[p])}export{M as a,T as b};//# sourceMappingURL=chunk-JY6CE6RN.mjs.map
|
|
2
|
+
//# sourceMappingURL=chunk-JY6CE6RN.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/core/reactive.ts"],"names":["REACTIVE_SIGNAL","targetMap","reactiveMap","reactive","target","existingProxy","proxy","key","receiver","res","track","value","oldValue","result","hasChanged","trigger","activeEffect","depsMap","dep","trackEffect","triggerEffects","isReactive"],"mappings":"gDAEO,IAAMA,CAAAA,CAAkB,OAAO,kBAAkB,CAAA,CAIlDC,EAAY,IAAI,OAAA,CAGhBC,EAAc,IAAI,OAAA,CAEjB,SAASC,CAAAA,CAA2BC,CAAAA,CAAc,CACrD,GAAIA,CAAAA,EAAWA,EAAeJ,CAAe,CAAA,CACzC,OAAOI,CAAAA,CAGX,IAAMC,CAAAA,CAAgBH,EAAY,GAAA,CAAIE,CAAM,EAC5C,GAAIC,CAAAA,CACA,OAAOA,CAAAA,CAGX,IAAMC,CAAAA,CAAQ,IAAI,KAAA,CAAMF,CAAAA,CAAQ,CAC5B,GAAA,CAAIA,CAAAA,CAAQG,EAAKC,CAAAA,CAAU,CACvB,GAAID,CAAAA,GAAQP,CAAAA,CAAiB,OAAO,KAAA,CAEpC,IAAMS,CAAAA,CAAM,QAAQ,GAAA,CAAIL,CAAAA,CAAQG,EAAKC,CAAQ,CAAA,CAI7C,OAFAE,CAAAA,CAAMN,CAAAA,CAAQG,CAAG,CAAA,CAEbE,CAAAA,GAAQ,MAAQ,OAAOA,CAAAA,EAAQ,SACxBN,CAAAA,CAASM,CAAG,EAGhBA,CACX,CAAA,CACA,GAAA,CAAIL,CAAAA,CAAQG,CAAAA,CAAKI,CAAAA,CAAOH,EAAU,CAC9B,IAAMI,EAAYR,CAAAA,CAAeG,CAAG,EAC9BM,CAAAA,CAAS,OAAA,CAAQ,GAAA,CAAIT,CAAAA,CAAQG,CAAAA,CAAKI,CAAAA,CAAOH,CAAQ,CAAA,CAEvD,OAAIK,GAAUC,CAAAA,CAAWH,CAAAA,CAAOC,CAAQ,CAAA,EACpCG,CAAAA,CAAQX,CAAAA,CAAQG,CAAG,CAAA,CAGhBM,CACX,CACJ,CAAC,CAAA,CAED,OAAAX,CAAAA,CAAY,GAAA,CAAIE,EAAQE,CAAK,CAAA,CACtBA,CACX,CAEO,SAASI,EAAMN,CAAAA,CAAgBG,CAAAA,CAAc,CAChD,GAAI,CAACS,EAAc,OAEnB,IAAIC,CAAAA,CAAUhB,CAAAA,CAAU,GAAA,CAAIG,CAAM,EAC7Ba,CAAAA,EACDhB,CAAAA,CAAU,IAAIG,CAAAA,CAASa,CAAAA,CAAU,IAAI,GAAM,CAAA,CAG/C,IAAIC,CAAAA,CAAMD,CAAAA,CAAQ,GAAA,CAAIV,CAAG,CAAA,CACpBW,CAAAA,EACDD,EAAQ,GAAA,CAAIV,CAAAA,CAAMW,EAAM,IAAI,GAAM,CAAA,CAGtCC,CAAAA,CAAYD,CAAG,EACnB,CAEO,SAASH,CAAAA,CAAQX,EAAgBG,CAAAA,CAAc,CAClD,IAAMU,CAAAA,CAAUhB,CAAAA,CAAU,GAAA,CAAIG,CAAM,CAAA,CACpC,GAAI,CAACa,CAAAA,CAAS,OAEd,IAAMC,CAAAA,CAAMD,CAAAA,CAAQ,IAAIV,CAAG,CAAA,CACvBW,CAAAA,EACAE,GAAAA,CAAeF,CAAG,EAE1B,CAEA,SAASJ,CAAAA,CAAWH,EAAYC,CAAAA,CAAwB,CACpD,OAAO,CAAC,MAAA,CAAO,EAAA,CAAGD,CAAAA,CAAOC,CAAQ,CACrC,CAEO,SAASS,CAAAA,CAAWV,EAAyB,CAChD,OAAO,CAAC,EAAEA,CAAAA,EAAUA,CAAAA,CAAcX,CAAe,CAAA,CACrD","file":"chunk-JY6CE6RN.mjs","sourcesContent":["import { activeEffect, trackEffect, triggerEffects } from './lifecycle'\n\nexport const REACTIVE_SIGNAL = Symbol('flexium.reactive')\n\ntype Dep = Set<any>\ntype KeyToDepMap = Map<any, Dep>\nconst targetMap = new WeakMap<any, KeyToDepMap>()\n\n// WeakMap to store existing proxies to avoid duplicates\nconst reactiveMap = new WeakMap<object, any>()\n\nexport function reactive<T extends object>(target: T): T {\n if (target && (target as any)[REACTIVE_SIGNAL]) {\n return target\n }\n\n const existingProxy = reactiveMap.get(target)\n if (existingProxy) {\n return existingProxy\n }\n\n const proxy = new Proxy(target, {\n get(target, key, receiver) {\n if (key === REACTIVE_SIGNAL) return true\n\n const res = Reflect.get(target, key, receiver)\n\n track(target, key)\n\n if (res !== null && typeof res === 'object') {\n return reactive(res)\n }\n\n return res\n },\n set(target, key, value, receiver) {\n const oldValue = (target as any)[key]\n const result = Reflect.set(target, key, value, receiver)\n\n if (result && hasChanged(value, oldValue)) {\n trigger(target, key)\n }\n\n return result\n }\n })\n\n reactiveMap.set(target, proxy)\n return proxy\n}\n\nexport function track(target: object, key: unknown) {\n if (!activeEffect) return\n\n let depsMap = targetMap.get(target)\n if (!depsMap) {\n targetMap.set(target, (depsMap = new Map()))\n }\n\n let dep = depsMap.get(key)\n if (!dep) {\n depsMap.set(key, (dep = new Set()))\n }\n\n trackEffect(dep)\n}\n\nexport function trigger(target: object, key: unknown) {\n const depsMap = targetMap.get(target)\n if (!depsMap) return\n\n const dep = depsMap.get(key)\n if (dep) {\n triggerEffects(dep)\n }\n}\n\nfunction hasChanged(value: any, oldValue: any): boolean {\n return !Object.is(value, oldValue)\n}\n\nexport function isReactive(value: unknown): boolean {\n return !!(value && (value as any)[REACTIVE_SIGNAL])\n}\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
'use strict';var chunk6VIRXD2Y_js=require('./chunk-6VIRXD2Y.js'),chunkYWTD32NA_js=require('./chunk-YWTD32NA.js'),chunkUWFVCKRU_js=require('./chunk-UWFVCKRU.js');var k=0,v=new Map;function S(){if(typeof window<"u")return window.__FLEXIUM_DEVTOOLS__}function T(t,r){let o=S();if(!o)return -1;let a=++k;v.set(t,a);let u={id:a,name:r||`signal_${a}`,value:t.value,type:t.type||"signal",subscribers:0,createdAt:Date.now()};return o.onSignalCreate(u),a}function b(t,r){let o=S();if(!o)return;let a=v.get(t);a!==void 0&&o.onSignalUpdate(a,r);}var p=new Map;function w(t){return JSON.stringify(t)}function _(t,r){if(r?.key&&!Array.isArray(r.key))throw new Error("State key must be an array");let o=chunkUWFVCKRU_js.b(()=>chunk6VIRXD2Y_js.a({container:void 0,serializedKey:void 0})),a=r?.key,u=a?w(a):void 0,h=u!==o.serializedKey;if(typeof t=="function"&&r?.deps!==void 0){let l=t,n=chunkUWFVCKRU_js.b(()=>({value:void 0,prevDeps:void 0,hasRun:false})),e=true;if(n.hasRun&&n.prevDeps&&(e=r.deps.length!==n.prevDeps.length||r.deps.some((i,c)=>i!==n.prevDeps[c])),e){let i=l();if(i instanceof Promise)throw new Error("deps option is not supported with async functions");n.value=i,n.prevDeps=[...r.deps],n.hasRun=true;}let f={refetch:async()=>{},get loading(){return false},get error(){return null},get status(){return "success"}};return [n.value,f]}if(!o.container||h)if(o.serializedKey=u,u&&p.has(u))o.container=p.get(u);else {let l;if(typeof t=="function"){let n=t,e=chunk6VIRXD2Y_js.a({type:"resource",value:void 0,loading:true,error:null,status:"idle",run:()=>{}}),f=()=>{try{let i=n();i instanceof Promise?(e.loading=!0,e.status="loading",e.error=null,i.then(c=>{e.value=c,e.status="success",e.loading=!1;}).catch(c=>{e.error=c,e.status="error",e.loading=!1;})):(e.value=i,e.status="success",e.loading=!1,e.error=null);}catch(i){e.error=i,e.status="error",e.loading=false;}};e.run=f,chunkYWTD32NA_js.b(f),l=e;}else l=chunk6VIRXD2Y_js.a({type:"signal",value:t}),T(l,r?.name);u&&p.set(u,l),o.container=l;}let s=o.container,y=s.value;return s.type==="signal"?[y,n=>{typeof n=="function"?s.value=n(s.value):s.value=n,b(s,s.value);}]:[y,{refetch:async()=>{s.run();},get loading(){return s.loading},get error(){return s.error},get status(){return s.status}}]}exports.a=_;//# sourceMappingURL=chunk-LTT43APF.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-LTT43APF.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/core/devtools.ts","../src/core/state.ts"],"names":["signalIdCounter","signalRegistry","getDevToolsHook","registerSignal","container","name","hook","id","info","updateSignal","value","globalRegistry","serializeKey","key","state","input","options","stateRef","reactive","currentKey","serializedKey","keyChanged","fn","memoState","hasChanged","d","i","result","control","newContainer","run","data","err","unsafeEffect","currentValue","newValue"],"mappings":"iKAyBA,IAAIA,CAAAA,CAAkB,CAAA,CAChBC,CAAAA,CAAiB,IAAI,GAAA,CAE3B,SAASC,CAAAA,EAA4C,CACnD,GAAI,OAAO,MAAA,CAAW,GAAA,CACpB,OAAO,OAAO,oBAGlB,CAEO,SAASC,CAAAA,CAAeC,CAAAA,CAAmBC,CAAAA,CAAuB,CACvE,IAAMC,CAAAA,CAAOJ,CAAAA,EAAgB,CAC7B,GAAI,CAACI,CAAAA,CAAM,OAAO,GAAA,CAElB,IAAMC,CAAAA,CAAK,EAAEP,CAAAA,CACbC,CAAAA,CAAe,GAAA,CAAIG,CAAAA,CAAWG,CAAE,CAAA,CAEhC,IAAMC,CAAAA,CAAmB,CACvB,EAAA,CAAAD,CAAAA,CACA,IAAA,CAAMF,CAAAA,EAAQ,CAAA,OAAA,EAAUE,CAAE,CAAA,CAAA,CAC1B,KAAA,CAAQH,CAAAA,CAAkB,KAAA,CAC1B,IAAA,CAAOA,CAAAA,CAAkB,IAAA,EAAQ,QAAA,CACjC,WAAA,CAAa,CAAA,CACb,SAAA,CAAW,KAAK,GAAA,EAClB,CAAA,CAEA,OAAAE,CAAAA,CAAK,cAAA,CAAeE,CAAI,CAAA,CACjBD,CACT,CAEO,SAASE,CAAAA,CAAaL,CAAAA,CAAmBM,CAAAA,CAAsB,CACpE,IAAMJ,CAAAA,CAAOJ,CAAAA,EAAgB,CAC7B,GAAI,CAACI,CAAAA,CAAM,OAEX,IAAMC,CAAAA,CAAKN,CAAAA,CAAe,GAAA,CAAIG,CAAS,CAAA,CACnCG,CAAAA,GAAO,QACTD,CAAAA,CAAK,cAAA,CAAeC,CAAAA,CAAIG,CAAK,EAEjC,CCrDA,IAAMC,CAAAA,CAAiB,IAAI,GAAA,CAE3B,SAASC,CAAAA,CAAaC,CAAAA,CAAwB,CAC5C,OAAO,IAAA,CAAK,SAAA,CAAUA,CAAG,CAC3B,CAMO,SAASC,CAAAA,CAASC,CAAAA,CAA2CC,CAAAA,CAA6B,CAE/F,GAAIA,CAAAA,EAAS,GAAA,EAAO,CAAC,KAAA,CAAM,QAAQA,CAAAA,CAAQ,GAAG,CAAA,CAC5C,MAAM,IAAI,KAAA,CAAM,4BAA4B,CAAA,CAI9C,IAAMC,CAAAA,CAAWX,kBAAAA,CAAK,IACbY,kBAAAA,CAAS,CACd,SAAA,CAAW,MAAA,CACX,aAAA,CAAe,MACjB,CAAC,CACF,CAAA,CAGKC,CAAAA,CAAaH,CAAAA,EAAS,GAAA,CACtBI,CAAAA,CAAgBD,CAAAA,CAAaP,CAAAA,CAAaO,CAAU,CAAA,CAAI,MAAA,CAGxDE,EAAaD,CAAAA,GAAkBH,CAAAA,CAAS,aAAA,CAG9C,GAAI,OAAOF,CAAAA,EAAU,UAAA,EAAcC,CAAAA,EAAS,IAAA,GAAS,MAAA,CAAW,CAC9D,IAAMM,CAAAA,CAAKP,CAAAA,CACLQ,CAAAA,CAAYjB,kBAAAA,CAAK,KAAO,CAC5B,KAAA,CAAO,MAAA,CACP,QAAA,CAAU,MAAA,CACV,MAAA,CAAQ,KACV,CAAA,CAAE,CAAA,CAEEkB,CAAAA,CAAa,IAAA,CAMjB,GALID,CAAAA,CAAU,QAAUA,CAAAA,CAAU,QAAA,GAChCC,CAAAA,CAAaR,CAAAA,CAAQ,IAAA,CAAK,MAAA,GAAWO,CAAAA,CAAU,QAAA,CAAS,MAAA,EACtDP,CAAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,CAACS,CAAAA,CAAGC,CAAAA,GAAMD,CAAAA,GAAMF,CAAAA,CAAU,QAAA,CAAUG,CAAC,CAAC,CAAA,CAAA,CAGxDF,CAAAA,CAAY,CACd,IAAMG,CAAAA,CAASL,CAAAA,EAAG,CAClB,GAAIK,CAAAA,YAAkB,OAAA,CACpB,MAAM,IAAI,KAAA,CAAM,mDAAmD,CAAA,CAErEJ,CAAAA,CAAU,KAAA,CAAQI,CAAAA,CAClBJ,CAAAA,CAAU,QAAA,CAAW,CAAC,GAAGP,CAAAA,CAAQ,IAAI,CAAA,CACrCO,CAAAA,CAAU,MAAA,CAAS,KACrB,CAEA,IAAMK,CAAAA,CAA2B,CAC/B,OAAA,CAAS,SAAY,CAAE,CAAA,CACvB,IAAI,OAAA,EAAU,CAAE,OAAO,MAAM,EAC7B,IAAI,KAAA,EAAQ,CAAE,OAAO,IAAK,CAAA,CAC1B,IAAI,MAAA,EAAS,CAAE,OAAO,SAAmB,CAC3C,CAAA,CACA,OAAO,CAACL,CAAAA,CAAU,KAAA,CAAOK,CAAO,CAClC,CAGA,GAAI,CAACX,CAAAA,CAAS,SAAA,EAAaI,CAAAA,CAIzB,GAHAJ,CAAAA,CAAS,aAAA,CAAgBG,CAAAA,CAGrBA,GAAiBT,CAAAA,CAAe,GAAA,CAAIS,CAAa,CAAA,CACnDH,CAAAA,CAAS,SAAA,CAAYN,CAAAA,CAAe,GAAA,CAAIS,CAAa,CAAA,CAAA,KAChD,CACL,IAAIS,CAAAA,CAGJ,GAAI,OAAOd,CAAAA,EAAU,UAAA,CAAY,CAC/B,IAAMO,CAAAA,CAAKP,CAAAA,CAGLD,CAAAA,CAAQI,kBAAAA,CAAS,CACrB,IAAA,CAAM,UAAA,CACN,KAAA,CAAO,MAAA,CACP,OAAA,CAAS,IAAA,CACT,MAAO,IAAA,CACP,MAAA,CAAQ,MAAA,CACR,GAAA,CAAK,IAAM,CAAE,CACf,CAAC,CAAA,CAEKY,CAAAA,CAAM,IAAM,CAChB,GAAI,CACF,IAAMH,CAAAA,CAASL,CAAAA,EAAG,CAEdK,CAAAA,YAAkB,OAAA,EACpBb,CAAAA,CAAM,OAAA,CAAU,CAAA,CAAA,CAChBA,CAAAA,CAAM,MAAA,CAAS,SAAA,CACfA,CAAAA,CAAM,KAAA,CAAQ,IAAA,CAEda,CAAAA,CACG,KAAKI,CAAAA,EAAQ,CACZjB,CAAAA,CAAM,KAAA,CAAQiB,CAAAA,CACdjB,CAAAA,CAAM,MAAA,CAAS,SAAA,CACfA,CAAAA,CAAM,OAAA,CAAU,CAAA,EAClB,CAAC,CAAA,CACA,KAAA,CAAMkB,CAAAA,EAAO,CACZlB,CAAAA,CAAM,KAAA,CAAQkB,CAAAA,CACdlB,CAAAA,CAAM,MAAA,CAAS,OAAA,CACfA,CAAAA,CAAM,OAAA,CAAU,CAAA,EAClB,CAAC,CAAA,GAEHA,CAAAA,CAAM,KAAA,CAAQa,CAAAA,CACdb,EAAM,MAAA,CAAS,SAAA,CACfA,CAAAA,CAAM,OAAA,CAAU,CAAA,CAAA,CAChBA,CAAAA,CAAM,KAAA,CAAQ,IAAA,EAElB,CAAA,MAASkB,CAAAA,CAAK,CACZlB,CAAAA,CAAM,KAAA,CAAQkB,CAAAA,CACdlB,CAAAA,CAAM,MAAA,CAAS,OAAA,CACfA,CAAAA,CAAM,OAAA,CAAU,MAClB,CACF,CAAA,CAEAA,CAAAA,CAAM,GAAA,CAAMgB,CAAAA,CAGZG,kBAAAA,CAAaH,CAAG,CAAA,CAEhBD,CAAAA,CAAef,EACjB,MAGEe,CAAAA,CAAeX,kBAAAA,CAAS,CACtB,IAAA,CAAM,QAAA,CACN,KAAA,CAAOH,CACT,CAAC,CAAA,CAGDZ,CAAAA,CAAe0B,CAAAA,CAAcb,CAAAA,EAAS,IAAI,CAAA,CAIxCI,CAAAA,EACFT,CAAAA,CAAe,GAAA,CAAIS,CAAAA,CAAeS,CAAY,CAAA,CAGhDZ,CAAAA,CAAS,SAAA,CAAYY,EACvB,CAGF,IAAMzB,CAAAA,CAAYa,CAAAA,CAAS,SAAA,CAIrBiB,CAAAA,CAAe9B,CAAAA,CAAU,MAE/B,OAAIA,CAAAA,CAAU,IAAA,GAAS,QAAA,CAUd,CAAC8B,CAAAA,CATQC,CAAAA,EAAmC,CAC7C,OAAOA,CAAAA,EAAa,UAAA,CACtB/B,CAAAA,CAAU,KAAA,CAAS+B,CAAAA,CAAsB/B,CAAAA,CAAU,KAAK,CAAA,CAExDA,CAAAA,CAAU,KAAA,CAAQ+B,CAAAA,CAGpB1B,CAAAA,CAAaL,CAAAA,CAAWA,CAAAA,CAAU,KAAK,EACzC,CAC4B,CAAA,CASrB,CAAC8B,CAAAA,CANQ,CACd,QAAS,SAAY,CAAE9B,CAAAA,CAAU,GAAA,GAAM,CAAA,CACvC,IAAI,OAAA,EAAU,CAAE,OAAOA,CAAAA,CAAU,OAAQ,CAAA,CACzC,IAAI,KAAA,EAAQ,CAAE,OAAOA,CAAAA,CAAU,KAAM,CAAA,CACrC,IAAI,MAAA,EAAS,CAAE,OAAOA,CAAAA,CAAU,MAAO,CACzC,CAC6B,CAEjC","file":"chunk-LTT43APF.js","sourcesContent":["// DevTools integration for Flexium\n// This module provides hooks for browser DevTools extension\n\ninterface SignalInfo {\n id: number\n name: string\n value: unknown\n type: string\n subscribers: number\n createdAt: number\n}\n\ninterface DevToolsHook {\n signals: Map<number, SignalInfo>\n onSignalCreate: (info: SignalInfo) => void\n onSignalUpdate: (id: number, value: unknown) => void\n onRender: (event: { timestamp: number; componentName: string; trigger: string; duration: number }) => void\n}\n\ndeclare global {\n interface Window {\n __FLEXIUM_DEVTOOLS__?: DevToolsHook\n }\n}\n\nlet signalIdCounter = 0\nconst signalRegistry = new Map<object, number>()\n\nfunction getDevToolsHook(): DevToolsHook | undefined {\n if (typeof window !== 'undefined') {\n return window.__FLEXIUM_DEVTOOLS__\n }\n return undefined\n}\n\nexport function registerSignal(container: object, name?: string): number {\n const hook = getDevToolsHook()\n if (!hook) return -1\n\n const id = ++signalIdCounter\n signalRegistry.set(container, id)\n\n const info: SignalInfo = {\n id,\n name: name || `signal_${id}`,\n value: (container as any).value,\n type: (container as any).type || 'signal',\n subscribers: 0,\n createdAt: Date.now(),\n }\n\n hook.onSignalCreate(info)\n return id\n}\n\nexport function updateSignal(container: object, value: unknown): void {\n const hook = getDevToolsHook()\n if (!hook) return\n\n const id = signalRegistry.get(container)\n if (id !== undefined) {\n hook.onSignalUpdate(id, value)\n }\n}\n\nexport function reportRender(componentName: string, trigger: string, duration: number): void {\n const hook = getDevToolsHook()\n if (!hook) return\n\n hook.onRender({\n timestamp: Date.now(),\n componentName,\n trigger,\n duration,\n })\n}\n\nexport function isDevToolsEnabled(): boolean {\n return getDevToolsHook() !== undefined\n}\n","import { reactive } from './reactive'\nimport { unsafeEffect } from './lifecycle'\nimport { hook } from './hook'\nimport { registerSignal, updateSignal } from './devtools'\nimport type { StateSetter, ResourceControl, StateOptions } from './types'\n\nexport type { StateSetter, ResourceControl, StateOptions }\nexport type StateAction<T> = StateSetter<T> | ResourceControl\n\n// Global State Registry\nconst globalRegistry = new Map<string, any>()\n\nfunction serializeKey(key: unknown[]): string {\n return JSON.stringify(key)\n}\n\n// Overloads\nexport function state<T>(fn: () => Promise<T>, options?: StateOptions): [T | undefined, ResourceControl]\nexport function state<T>(fn: () => T, options?: StateOptions): [T, ResourceControl]\nexport function state<T>(initialValue: T extends Function ? never : T, options?: StateOptions): [T, StateSetter<T>]\nexport function state<T>(input: T | (() => T) | (() => Promise<T>), options?: StateOptions): any {\n // 0. Validate key if provided\n if (options?.key && !Array.isArray(options.key)) {\n throw new Error('State key must be an array')\n }\n\n // Hook Wrapper: Store container reference and track key\n const stateRef = hook(() => {\n return reactive({\n container: undefined as any,\n serializedKey: undefined as any\n })\n })\n\n // Compute serialized key\n const currentKey = options?.key\n const serializedKey = currentKey ? serializeKey(currentKey) : undefined\n\n // Check if key has changed by comparing serialized strings\n const keyChanged = serializedKey !== stateRef.serializedKey\n\n // DEPS MODE: Handle separately - always check deps on every render\n if (typeof input === 'function' && options?.deps !== undefined) {\n const fn = input as Function\n const memoState = hook(() => ({\n value: undefined as T | undefined,\n prevDeps: undefined as any[] | undefined,\n hasRun: false\n }))\n\n let hasChanged = true\n if (memoState.hasRun && memoState.prevDeps) {\n hasChanged = options.deps.length !== memoState.prevDeps.length ||\n options.deps.some((d, i) => d !== memoState.prevDeps![i])\n }\n\n if (hasChanged) {\n const result = fn()\n if (result instanceof Promise) {\n throw new Error('deps option is not supported with async functions')\n }\n memoState.value = result\n memoState.prevDeps = [...options.deps]\n memoState.hasRun = true\n }\n\n const control: ResourceControl = {\n refetch: async () => { },\n get loading() { return false },\n get error() { return null },\n get status() { return 'success' as const }\n }\n return [memoState.value, control]\n }\n\n // If key changed or first time, get/create container\n if (!stateRef.container || keyChanged) {\n stateRef.serializedKey = serializedKey\n\n // Check Registry FIRST\n if (serializedKey && globalRegistry.has(serializedKey)) {\n stateRef.container = globalRegistry.get(serializedKey)\n } else {\n let newContainer: any\n\n // 1. Function (Computed or Resource) - only async functions reach here now\n if (typeof input === 'function') {\n const fn = input as Function\n\n // REACTIVE MODE: Automatic tracking for async functions\n const state = reactive({\n type: 'resource',\n value: undefined as T | undefined,\n loading: true,\n error: null as any,\n status: 'idle' as 'idle' | 'loading' | 'success' | 'error',\n run: () => { }\n })\n\n const run = () => {\n try {\n const result = fn()\n\n if (result instanceof Promise) {\n state.loading = true\n state.status = 'loading'\n state.error = null\n\n result\n .then(data => {\n state.value = data\n state.status = 'success'\n state.loading = false\n })\n .catch(err => {\n state.error = err\n state.status = 'error'\n state.loading = false\n })\n } else {\n state.value = result\n state.status = 'success'\n state.loading = false\n state.error = null\n }\n } catch (err) {\n state.error = err\n state.status = 'error'\n state.loading = false\n }\n }\n\n state.run = run\n\n // Make it reactive!\n unsafeEffect(run)\n\n newContainer = state\n } else {\n // 2. Value (Signal)\n // We return the reactive proxy itself as the container\n newContainer = reactive({\n type: 'signal',\n value: input\n })\n\n // Register with DevTools\n registerSignal(newContainer, options?.name)\n }\n\n // Register in global registry if needed\n if (serializedKey) {\n globalRegistry.set(serializedKey, newContainer)\n }\n\n stateRef.container = newContainer\n }\n }\n\n const container = stateRef.container\n\n // --- RETURN LOGIC ---\n // Access container.value to track dependency in the component's effect\n const currentValue = container.value\n\n if (container.type === 'signal') {\n const setter = (newValue: T | ((prev: T) => T)) => {\n if (typeof newValue === 'function') {\n container.value = (newValue as Function)(container.value)\n } else {\n container.value = newValue\n }\n // Notify DevTools of update\n updateSignal(container, container.value)\n }\n return [currentValue, setter]\n } else {\n // Resource / Computed\n const control = {\n refetch: async () => { container.run() },\n get loading() { return container.loading },\n get error() { return container.error },\n get status() { return container.status }\n }\n return [currentValue, control]\n }\n}\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
'use strict';var n=new Map;function a(t){let e=Symbol("context"),o=r=>r.children;return o._contextId=e,{Provider:o,id:e,defaultValue:t}}function p(t){return n.has(t.id)?n.get(t.id):t.defaultValue}function s(t,e){let o=n.get(t);return n.set(t,e),o}function c(t,e){e===void 0?n.delete(t):n.set(t,e);}exports.a=a;exports.b=p;exports.c=s;exports.d=c;//# sourceMappingURL=chunk-PSKDIB7J.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-PSKDIB7J.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/core/context.ts"],"names":["contextMap","createContext","defaultValue","id","Provider","props","context","ctx","pushContext","value","prev","popContext","prevValue"],"mappings":"aAIA,IAAMA,EAAa,IAAI,GAAA,CAEhB,SAASC,CAAAA,CAAiBC,EAA6B,CAC1D,IAAMC,CAAAA,CAAK,MAAA,CAAO,SAAS,CAAA,CACrBC,CAAAA,CAAYC,GAAuCA,CAAAA,CAAM,QAAA,CAC/D,OAACD,CAAAA,CAAiB,UAAA,CAAaD,CAAAA,CACxB,CAAE,SAAAC,CAAAA,CAAU,EAAA,CAAAD,CAAAA,CAAI,YAAA,CAAAD,CAAa,CACxC,CAEO,SAASI,CAAAA,CAAWC,EAAoB,CAC3C,OAAOP,EAAW,GAAA,CAAIO,CAAAA,CAAI,EAAE,CAAA,CAAIP,CAAAA,CAAW,GAAA,CAAIO,CAAAA,CAAI,EAAE,CAAA,CAAIA,CAAAA,CAAI,YACjE,CAGO,SAASC,CAAAA,CAAYL,CAAAA,CAAYM,CAAAA,CAAY,CAChD,IAAMC,CAAAA,CAAOV,CAAAA,CAAW,IAAIG,CAAE,CAAA,CAC9B,OAAAH,CAAAA,CAAW,GAAA,CAAIG,CAAAA,CAAIM,CAAK,EACjBC,CACX,CAGO,SAASC,CAAAA,CAAWR,CAAAA,CAAYS,EAAgB,CAC/CA,CAAAA,GAAc,MAAA,CACdZ,CAAAA,CAAW,OAAOG,CAAE,CAAA,CAEpBH,EAAW,GAAA,CAAIG,CAAAA,CAAIS,CAAS,EAEpC","file":"chunk-PSKDIB7J.js","sourcesContent":["import type { Context } from './types'\n\nexport type { Context }\n\nconst contextMap = new Map<symbol, any>()\n\nexport function createContext<T>(defaultValue: T): Context<T> {\n const id = Symbol('context')\n const Provider = (props: { value: T; children: any }) => props.children;\n (Provider as any)._contextId = id\n return { Provider, id, defaultValue }\n}\n\nexport function context<T>(ctx: Context<T>): T {\n return contextMap.has(ctx.id) ? contextMap.get(ctx.id) : ctx.defaultValue\n}\n\n// Internal helpers for renderer\nexport function pushContext(id: symbol, value: any) {\n const prev = contextMap.get(id)\n contextMap.set(id, value)\n return prev\n}\n\n\nexport function popContext(id: symbol, prevValue: any) {\n if (prevValue === undefined) {\n contextMap.delete(id)\n } else {\n contextMap.set(id, prevValue)\n }\n}\n\nexport function snapshotContext(): Map<symbol, any> {\n return new Map(contextMap)\n}\n\nexport function runWithContext<R>(snapshot: Map<symbol, any>, fn: () => R): R {\n // 1. Save current context\n const prevContext = new Map(contextMap)\n\n // 2. Apply snapshot\n contextMap.clear()\n snapshot.forEach((value, key) => contextMap.set(key, value))\n\n try {\n return fn()\n } finally {\n // 3. Restore previous context\n contextMap.clear()\n prevContext.forEach((value, key) => contextMap.set(key, value))\n }\n}\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
'use strict';var t=null;function s(n,o){let e=t;t=n,n.hookIndex=0;try{return o()}finally{t=e;}}function c(n){if(!t)return n();let o=t,{hooks:e,hookIndex:r}=o;if(r<e.length)return o.hookIndex++,e[r];let u=n();return e.push(u),o.hookIndex++,u}exports.a=s;exports.b=c;//# sourceMappingURL=chunk-UWFVCKRU.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-UWFVCKRU.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/core/hook.ts"],"names":["currentComponent","runWithComponent","component","fn","prev","hook","factory","instance","hooks","hookIndex","value"],"mappings":"aAMA,IAAIA,CAAAA,CAA6C,IAAA,CAM1C,SAASC,CAAAA,CAAoBC,CAAAA,CAA8BC,CAAAA,CAAgB,CAC9E,IAAMC,CAAAA,CAAOJ,CAAAA,CACbA,CAAAA,CAAmBE,CAAAA,CACnBA,EAAU,SAAA,CAAY,CAAA,CACtB,GAAI,CACA,OAAOC,CAAAA,EACX,CAAA,OAAE,CACEH,CAAAA,CAAmBI,EACvB,CACJ,CAEO,SAASC,CAAAA,CAAQC,CAAAA,CAAqB,CACzC,GAAI,CAACN,CAAAA,CAED,OAAOM,CAAAA,EAAQ,CAGnB,IAAMC,CAAAA,CAAWP,CAAAA,CACX,CAAE,KAAA,CAAAQ,CAAAA,CAAO,SAAA,CAAAC,CAAU,CAAA,CAAIF,CAAAA,CAE7B,GAAIE,CAAAA,CAAYD,EAAM,MAAA,CAElB,OAAAD,CAAAA,CAAS,SAAA,EAAA,CACFC,CAAAA,CAAMC,CAAS,CAAA,CAI1B,IAAMC,EAAQJ,CAAAA,EAAQ,CACtB,OAAAE,CAAAA,CAAM,IAAA,CAAKE,CAAK,CAAA,CAChBH,CAAAA,CAAS,YAEFG,CACX","file":"chunk-UWFVCKRU.js","sourcesContent":["\nexport interface ComponentInstance {\n hooks: any[]\n hookIndex: number\n}\n\nlet currentComponent: ComponentInstance | null = null\n\nexport function getComponent(): ComponentInstance | null {\n return currentComponent\n}\n\nexport function runWithComponent<T>(component: ComponentInstance, fn: () => T): T {\n const prev = currentComponent\n currentComponent = component\n component.hookIndex = 0\n try {\n return fn()\n } finally {\n currentComponent = prev\n }\n}\n\nexport function hook<T>(factory: () => T): T {\n if (!currentComponent) {\n // Outside component: just run factory\n return factory()\n }\n\n const instance = currentComponent\n const { hooks, hookIndex } = instance\n\n if (hookIndex < hooks.length) {\n // Return existing hook\n instance.hookIndex++\n return hooks[hookIndex] as T\n }\n\n // Create new hook\n const value = factory()\n hooks.push(value)\n instance.hookIndex++\n\n return value\n}\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {a}from'./chunk-JY6CE6RN.mjs';import {b as b$2}from'./chunk-IWFEXW4F.mjs';import {b as b$1}from'./chunk-5PNH2ARD.mjs';var k=0,v=new Map;function S(){if(typeof window<"u")return window.__FLEXIUM_DEVTOOLS__}function T(t,r){let o=S();if(!o)return -1;let a=++k;v.set(t,a);let u={id:a,name:r||`signal_${a}`,value:t.value,type:t.type||"signal",subscribers:0,createdAt:Date.now()};return o.onSignalCreate(u),a}function b(t,r){let o=S();if(!o)return;let a=v.get(t);a!==void 0&&o.onSignalUpdate(a,r);}var p=new Map;function w(t){return JSON.stringify(t)}function _(t,r){if(r?.key&&!Array.isArray(r.key))throw new Error("State key must be an array");let o=b$1(()=>a({container:void 0,serializedKey:void 0})),a$1=r?.key,u=a$1?w(a$1):void 0,h=u!==o.serializedKey;if(typeof t=="function"&&r?.deps!==void 0){let l=t,n=b$1(()=>({value:void 0,prevDeps:void 0,hasRun:false})),e=true;if(n.hasRun&&n.prevDeps&&(e=r.deps.length!==n.prevDeps.length||r.deps.some((i,c)=>i!==n.prevDeps[c])),e){let i=l();if(i instanceof Promise)throw new Error("deps option is not supported with async functions");n.value=i,n.prevDeps=[...r.deps],n.hasRun=true;}let f={refetch:async()=>{},get loading(){return false},get error(){return null},get status(){return "success"}};return [n.value,f]}if(!o.container||h)if(o.serializedKey=u,u&&p.has(u))o.container=p.get(u);else {let l;if(typeof t=="function"){let n=t,e=a({type:"resource",value:void 0,loading:true,error:null,status:"idle",run:()=>{}}),f=()=>{try{let i=n();i instanceof Promise?(e.loading=!0,e.status="loading",e.error=null,i.then(c=>{e.value=c,e.status="success",e.loading=!1;}).catch(c=>{e.error=c,e.status="error",e.loading=!1;})):(e.value=i,e.status="success",e.loading=!1,e.error=null);}catch(i){e.error=i,e.status="error",e.loading=false;}};e.run=f,b$2(f),l=e;}else l=a({type:"signal",value:t}),T(l,r?.name);u&&p.set(u,l),o.container=l;}let s=o.container,y=s.value;return s.type==="signal"?[y,n=>{typeof n=="function"?s.value=n(s.value):s.value=n,b(s,s.value);}]:[y,{refetch:async()=>{s.run();},get loading(){return s.loading},get error(){return s.error},get status(){return s.status}}]}export{_ as a};//# sourceMappingURL=chunk-WGKD63GN.mjs.map
|
|
2
|
+
//# sourceMappingURL=chunk-WGKD63GN.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/core/devtools.ts","../src/core/state.ts"],"names":["signalIdCounter","signalRegistry","getDevToolsHook","registerSignal","container","name","hook","id","info","updateSignal","value","globalRegistry","serializeKey","key","state","input","options","stateRef","reactive","currentKey","serializedKey","keyChanged","fn","memoState","hasChanged","d","i","result","control","newContainer","run","data","err","unsafeEffect","currentValue","newValue"],"mappings":"6HAyBA,IAAIA,CAAAA,CAAkB,CAAA,CAChBC,CAAAA,CAAiB,IAAI,GAAA,CAE3B,SAASC,CAAAA,EAA4C,CACnD,GAAI,OAAO,MAAA,CAAW,GAAA,CACpB,OAAO,OAAO,oBAGlB,CAEO,SAASC,CAAAA,CAAeC,CAAAA,CAAmBC,CAAAA,CAAuB,CACvE,IAAMC,CAAAA,CAAOJ,CAAAA,EAAgB,CAC7B,GAAI,CAACI,CAAAA,CAAM,OAAO,GAAA,CAElB,IAAMC,CAAAA,CAAK,EAAEP,CAAAA,CACbC,CAAAA,CAAe,GAAA,CAAIG,CAAAA,CAAWG,CAAE,CAAA,CAEhC,IAAMC,CAAAA,CAAmB,CACvB,EAAA,CAAAD,CAAAA,CACA,IAAA,CAAMF,CAAAA,EAAQ,CAAA,OAAA,EAAUE,CAAE,CAAA,CAAA,CAC1B,KAAA,CAAQH,CAAAA,CAAkB,KAAA,CAC1B,IAAA,CAAOA,CAAAA,CAAkB,IAAA,EAAQ,QAAA,CACjC,WAAA,CAAa,CAAA,CACb,SAAA,CAAW,KAAK,GAAA,EAClB,CAAA,CAEA,OAAAE,CAAAA,CAAK,cAAA,CAAeE,CAAI,CAAA,CACjBD,CACT,CAEO,SAASE,CAAAA,CAAaL,CAAAA,CAAmBM,CAAAA,CAAsB,CACpE,IAAMJ,CAAAA,CAAOJ,CAAAA,EAAgB,CAC7B,GAAI,CAACI,CAAAA,CAAM,OAEX,IAAMC,CAAAA,CAAKN,CAAAA,CAAe,GAAA,CAAIG,CAAS,CAAA,CACnCG,CAAAA,GAAO,QACTD,CAAAA,CAAK,cAAA,CAAeC,CAAAA,CAAIG,CAAK,EAEjC,CCrDA,IAAMC,CAAAA,CAAiB,IAAI,GAAA,CAE3B,SAASC,CAAAA,CAAaC,CAAAA,CAAwB,CAC5C,OAAO,IAAA,CAAK,SAAA,CAAUA,CAAG,CAC3B,CAMO,SAASC,CAAAA,CAASC,CAAAA,CAA2CC,CAAAA,CAA6B,CAE/F,GAAIA,CAAAA,EAAS,GAAA,EAAO,CAAC,KAAA,CAAM,QAAQA,CAAAA,CAAQ,GAAG,CAAA,CAC5C,MAAM,IAAI,KAAA,CAAM,4BAA4B,CAAA,CAI9C,IAAMC,CAAAA,CAAWX,GAAAA,CAAK,IACbY,CAAAA,CAAS,CACd,SAAA,CAAW,MAAA,CACX,aAAA,CAAe,MACjB,CAAC,CACF,CAAA,CAGKC,GAAAA,CAAaH,CAAAA,EAAS,GAAA,CACtBI,CAAAA,CAAgBD,GAAAA,CAAaP,CAAAA,CAAaO,GAAU,CAAA,CAAI,MAAA,CAGxDE,EAAaD,CAAAA,GAAkBH,CAAAA,CAAS,aAAA,CAG9C,GAAI,OAAOF,CAAAA,EAAU,UAAA,EAAcC,CAAAA,EAAS,IAAA,GAAS,MAAA,CAAW,CAC9D,IAAMM,CAAAA,CAAKP,CAAAA,CACLQ,CAAAA,CAAYjB,GAAAA,CAAK,KAAO,CAC5B,KAAA,CAAO,MAAA,CACP,QAAA,CAAU,MAAA,CACV,MAAA,CAAQ,KACV,CAAA,CAAE,CAAA,CAEEkB,CAAAA,CAAa,IAAA,CAMjB,GALID,CAAAA,CAAU,QAAUA,CAAAA,CAAU,QAAA,GAChCC,CAAAA,CAAaR,CAAAA,CAAQ,IAAA,CAAK,MAAA,GAAWO,CAAAA,CAAU,QAAA,CAAS,MAAA,EACtDP,CAAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,CAACS,CAAAA,CAAGC,CAAAA,GAAMD,CAAAA,GAAMF,CAAAA,CAAU,QAAA,CAAUG,CAAC,CAAC,CAAA,CAAA,CAGxDF,CAAAA,CAAY,CACd,IAAMG,CAAAA,CAASL,CAAAA,EAAG,CAClB,GAAIK,CAAAA,YAAkB,OAAA,CACpB,MAAM,IAAI,KAAA,CAAM,mDAAmD,CAAA,CAErEJ,CAAAA,CAAU,KAAA,CAAQI,CAAAA,CAClBJ,CAAAA,CAAU,QAAA,CAAW,CAAC,GAAGP,CAAAA,CAAQ,IAAI,CAAA,CACrCO,CAAAA,CAAU,MAAA,CAAS,KACrB,CAEA,IAAMK,CAAAA,CAA2B,CAC/B,OAAA,CAAS,SAAY,CAAE,CAAA,CACvB,IAAI,OAAA,EAAU,CAAE,OAAO,MAAM,EAC7B,IAAI,KAAA,EAAQ,CAAE,OAAO,IAAK,CAAA,CAC1B,IAAI,MAAA,EAAS,CAAE,OAAO,SAAmB,CAC3C,CAAA,CACA,OAAO,CAACL,CAAAA,CAAU,KAAA,CAAOK,CAAO,CAClC,CAGA,GAAI,CAACX,CAAAA,CAAS,SAAA,EAAaI,CAAAA,CAIzB,GAHAJ,CAAAA,CAAS,aAAA,CAAgBG,CAAAA,CAGrBA,GAAiBT,CAAAA,CAAe,GAAA,CAAIS,CAAa,CAAA,CACnDH,CAAAA,CAAS,SAAA,CAAYN,CAAAA,CAAe,GAAA,CAAIS,CAAa,CAAA,CAAA,KAChD,CACL,IAAIS,CAAAA,CAGJ,GAAI,OAAOd,CAAAA,EAAU,UAAA,CAAY,CAC/B,IAAMO,CAAAA,CAAKP,CAAAA,CAGLD,CAAAA,CAAQI,CAAAA,CAAS,CACrB,IAAA,CAAM,UAAA,CACN,KAAA,CAAO,MAAA,CACP,OAAA,CAAS,IAAA,CACT,MAAO,IAAA,CACP,MAAA,CAAQ,MAAA,CACR,GAAA,CAAK,IAAM,CAAE,CACf,CAAC,CAAA,CAEKY,CAAAA,CAAM,IAAM,CAChB,GAAI,CACF,IAAMH,CAAAA,CAASL,CAAAA,EAAG,CAEdK,CAAAA,YAAkB,OAAA,EACpBb,CAAAA,CAAM,OAAA,CAAU,CAAA,CAAA,CAChBA,CAAAA,CAAM,MAAA,CAAS,SAAA,CACfA,CAAAA,CAAM,KAAA,CAAQ,IAAA,CAEda,CAAAA,CACG,KAAKI,CAAAA,EAAQ,CACZjB,CAAAA,CAAM,KAAA,CAAQiB,CAAAA,CACdjB,CAAAA,CAAM,MAAA,CAAS,SAAA,CACfA,CAAAA,CAAM,OAAA,CAAU,CAAA,EAClB,CAAC,CAAA,CACA,KAAA,CAAMkB,CAAAA,EAAO,CACZlB,CAAAA,CAAM,KAAA,CAAQkB,CAAAA,CACdlB,CAAAA,CAAM,MAAA,CAAS,OAAA,CACfA,CAAAA,CAAM,OAAA,CAAU,CAAA,EAClB,CAAC,CAAA,GAEHA,CAAAA,CAAM,KAAA,CAAQa,CAAAA,CACdb,EAAM,MAAA,CAAS,SAAA,CACfA,CAAAA,CAAM,OAAA,CAAU,CAAA,CAAA,CAChBA,CAAAA,CAAM,KAAA,CAAQ,IAAA,EAElB,CAAA,MAASkB,CAAAA,CAAK,CACZlB,CAAAA,CAAM,KAAA,CAAQkB,CAAAA,CACdlB,CAAAA,CAAM,MAAA,CAAS,OAAA,CACfA,CAAAA,CAAM,OAAA,CAAU,MAClB,CACF,CAAA,CAEAA,CAAAA,CAAM,GAAA,CAAMgB,CAAAA,CAGZG,GAAAA,CAAaH,CAAG,CAAA,CAEhBD,CAAAA,CAAef,EACjB,MAGEe,CAAAA,CAAeX,CAAAA,CAAS,CACtB,IAAA,CAAM,QAAA,CACN,KAAA,CAAOH,CACT,CAAC,CAAA,CAGDZ,CAAAA,CAAe0B,CAAAA,CAAcb,CAAAA,EAAS,IAAI,CAAA,CAIxCI,CAAAA,EACFT,CAAAA,CAAe,GAAA,CAAIS,CAAAA,CAAeS,CAAY,CAAA,CAGhDZ,CAAAA,CAAS,SAAA,CAAYY,EACvB,CAGF,IAAMzB,CAAAA,CAAYa,CAAAA,CAAS,SAAA,CAIrBiB,CAAAA,CAAe9B,CAAAA,CAAU,MAE/B,OAAIA,CAAAA,CAAU,IAAA,GAAS,QAAA,CAUd,CAAC8B,CAAAA,CATQC,CAAAA,EAAmC,CAC7C,OAAOA,CAAAA,EAAa,UAAA,CACtB/B,CAAAA,CAAU,KAAA,CAAS+B,CAAAA,CAAsB/B,CAAAA,CAAU,KAAK,CAAA,CAExDA,CAAAA,CAAU,KAAA,CAAQ+B,CAAAA,CAGpB1B,CAAAA,CAAaL,CAAAA,CAAWA,CAAAA,CAAU,KAAK,EACzC,CAC4B,CAAA,CASrB,CAAC8B,CAAAA,CANQ,CACd,QAAS,SAAY,CAAE9B,CAAAA,CAAU,GAAA,GAAM,CAAA,CACvC,IAAI,OAAA,EAAU,CAAE,OAAOA,CAAAA,CAAU,OAAQ,CAAA,CACzC,IAAI,KAAA,EAAQ,CAAE,OAAOA,CAAAA,CAAU,KAAM,CAAA,CACrC,IAAI,MAAA,EAAS,CAAE,OAAOA,CAAAA,CAAU,MAAO,CACzC,CAC6B,CAEjC","file":"chunk-WGKD63GN.mjs","sourcesContent":["// DevTools integration for Flexium\n// This module provides hooks for browser DevTools extension\n\ninterface SignalInfo {\n id: number\n name: string\n value: unknown\n type: string\n subscribers: number\n createdAt: number\n}\n\ninterface DevToolsHook {\n signals: Map<number, SignalInfo>\n onSignalCreate: (info: SignalInfo) => void\n onSignalUpdate: (id: number, value: unknown) => void\n onRender: (event: { timestamp: number; componentName: string; trigger: string; duration: number }) => void\n}\n\ndeclare global {\n interface Window {\n __FLEXIUM_DEVTOOLS__?: DevToolsHook\n }\n}\n\nlet signalIdCounter = 0\nconst signalRegistry = new Map<object, number>()\n\nfunction getDevToolsHook(): DevToolsHook | undefined {\n if (typeof window !== 'undefined') {\n return window.__FLEXIUM_DEVTOOLS__\n }\n return undefined\n}\n\nexport function registerSignal(container: object, name?: string): number {\n const hook = getDevToolsHook()\n if (!hook) return -1\n\n const id = ++signalIdCounter\n signalRegistry.set(container, id)\n\n const info: SignalInfo = {\n id,\n name: name || `signal_${id}`,\n value: (container as any).value,\n type: (container as any).type || 'signal',\n subscribers: 0,\n createdAt: Date.now(),\n }\n\n hook.onSignalCreate(info)\n return id\n}\n\nexport function updateSignal(container: object, value: unknown): void {\n const hook = getDevToolsHook()\n if (!hook) return\n\n const id = signalRegistry.get(container)\n if (id !== undefined) {\n hook.onSignalUpdate(id, value)\n }\n}\n\nexport function reportRender(componentName: string, trigger: string, duration: number): void {\n const hook = getDevToolsHook()\n if (!hook) return\n\n hook.onRender({\n timestamp: Date.now(),\n componentName,\n trigger,\n duration,\n })\n}\n\nexport function isDevToolsEnabled(): boolean {\n return getDevToolsHook() !== undefined\n}\n","import { reactive } from './reactive'\nimport { unsafeEffect } from './lifecycle'\nimport { hook } from './hook'\nimport { registerSignal, updateSignal } from './devtools'\nimport type { StateSetter, ResourceControl, StateOptions } from './types'\n\nexport type { StateSetter, ResourceControl, StateOptions }\nexport type StateAction<T> = StateSetter<T> | ResourceControl\n\n// Global State Registry\nconst globalRegistry = new Map<string, any>()\n\nfunction serializeKey(key: unknown[]): string {\n return JSON.stringify(key)\n}\n\n// Overloads\nexport function state<T>(fn: () => Promise<T>, options?: StateOptions): [T | undefined, ResourceControl]\nexport function state<T>(fn: () => T, options?: StateOptions): [T, ResourceControl]\nexport function state<T>(initialValue: T extends Function ? never : T, options?: StateOptions): [T, StateSetter<T>]\nexport function state<T>(input: T | (() => T) | (() => Promise<T>), options?: StateOptions): any {\n // 0. Validate key if provided\n if (options?.key && !Array.isArray(options.key)) {\n throw new Error('State key must be an array')\n }\n\n // Hook Wrapper: Store container reference and track key\n const stateRef = hook(() => {\n return reactive({\n container: undefined as any,\n serializedKey: undefined as any\n })\n })\n\n // Compute serialized key\n const currentKey = options?.key\n const serializedKey = currentKey ? serializeKey(currentKey) : undefined\n\n // Check if key has changed by comparing serialized strings\n const keyChanged = serializedKey !== stateRef.serializedKey\n\n // DEPS MODE: Handle separately - always check deps on every render\n if (typeof input === 'function' && options?.deps !== undefined) {\n const fn = input as Function\n const memoState = hook(() => ({\n value: undefined as T | undefined,\n prevDeps: undefined as any[] | undefined,\n hasRun: false\n }))\n\n let hasChanged = true\n if (memoState.hasRun && memoState.prevDeps) {\n hasChanged = options.deps.length !== memoState.prevDeps.length ||\n options.deps.some((d, i) => d !== memoState.prevDeps![i])\n }\n\n if (hasChanged) {\n const result = fn()\n if (result instanceof Promise) {\n throw new Error('deps option is not supported with async functions')\n }\n memoState.value = result\n memoState.prevDeps = [...options.deps]\n memoState.hasRun = true\n }\n\n const control: ResourceControl = {\n refetch: async () => { },\n get loading() { return false },\n get error() { return null },\n get status() { return 'success' as const }\n }\n return [memoState.value, control]\n }\n\n // If key changed or first time, get/create container\n if (!stateRef.container || keyChanged) {\n stateRef.serializedKey = serializedKey\n\n // Check Registry FIRST\n if (serializedKey && globalRegistry.has(serializedKey)) {\n stateRef.container = globalRegistry.get(serializedKey)\n } else {\n let newContainer: any\n\n // 1. Function (Computed or Resource) - only async functions reach here now\n if (typeof input === 'function') {\n const fn = input as Function\n\n // REACTIVE MODE: Automatic tracking for async functions\n const state = reactive({\n type: 'resource',\n value: undefined as T | undefined,\n loading: true,\n error: null as any,\n status: 'idle' as 'idle' | 'loading' | 'success' | 'error',\n run: () => { }\n })\n\n const run = () => {\n try {\n const result = fn()\n\n if (result instanceof Promise) {\n state.loading = true\n state.status = 'loading'\n state.error = null\n\n result\n .then(data => {\n state.value = data\n state.status = 'success'\n state.loading = false\n })\n .catch(err => {\n state.error = err\n state.status = 'error'\n state.loading = false\n })\n } else {\n state.value = result\n state.status = 'success'\n state.loading = false\n state.error = null\n }\n } catch (err) {\n state.error = err\n state.status = 'error'\n state.loading = false\n }\n }\n\n state.run = run\n\n // Make it reactive!\n unsafeEffect(run)\n\n newContainer = state\n } else {\n // 2. Value (Signal)\n // We return the reactive proxy itself as the container\n newContainer = reactive({\n type: 'signal',\n value: input\n })\n\n // Register with DevTools\n registerSignal(newContainer, options?.name)\n }\n\n // Register in global registry if needed\n if (serializedKey) {\n globalRegistry.set(serializedKey, newContainer)\n }\n\n stateRef.container = newContainer\n }\n }\n\n const container = stateRef.container\n\n // --- RETURN LOGIC ---\n // Access container.value to track dependency in the component's effect\n const currentValue = container.value\n\n if (container.type === 'signal') {\n const setter = (newValue: T | ((prev: T) => T)) => {\n if (typeof newValue === 'function') {\n container.value = (newValue as Function)(container.value)\n } else {\n container.value = newValue\n }\n // Notify DevTools of update\n updateSignal(container, container.value)\n }\n return [currentValue, setter]\n } else {\n // Resource / Computed\n const control = {\n refetch: async () => { container.run() },\n get loading() { return container.loading },\n get error() { return container.error },\n get status() { return container.status }\n }\n return [currentValue, control]\n }\n}\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
'use strict';var chunkUWFVCKRU_js=require('./chunk-UWFVCKRU.js');exports.a=void 0;var u=class{constructor(n,e){this.fn=n;this.scheduler=e;this.deps=[];this.active=true;}run(){if(!this.active)return this.fn();let n=exports.a;try{return this.cleanup(),exports.a=this,this.fn()}finally{exports.a=n;}}stop(){this.active&&(this.cleanup(),this.active=false);}cleanup(){let{deps:n}=this;if(n.length){for(let e=0;e<n.length;e++)n[e].delete(this);n.length=0;}}};function E(t,n={}){let e=new u(t,n.scheduler);e.run();let i=e.run.bind(e);return i.effect=e,i}function x(t){exports.a&&(t.add(exports.a),exports.a.deps.push(t));}var s=new Set,o=false,d=false;function h(t){s.has(t)||(s.add(t),!o&&!d&&(o=true,Promise.resolve().then(a)));}function a(){o=false;let t=[...s];s.clear();for(let n of t)n.active&&n.run();}function l(t){d=t;}function y(t){let n=[...t];for(let e of n)e!==exports.a&&(e.scheduler?e.scheduler():h(e));}function R(t,n){let e=chunkUWFVCKRU_js.b(()=>({cleanup:void 0,deps:void 0,effect:void 0,hasRun:false})),i=true;if(e.hasRun&&n&&e.deps&&(i=n.some((c,p)=>c!==e.deps[p])),i){e.cleanup&&(e.cleanup(),e.cleanup=void 0);let c=t();typeof c=="function"&&(e.cleanup=c),e.deps=n,e.hasRun=true;}}function g(t){if(t){l(true);try{t();}finally{l(false),a();}}else a();}exports.b=E;exports.c=x;exports.d=y;exports.e=R;exports.f=g;//# sourceMappingURL=chunk-YWTD32NA.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-YWTD32NA.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/core/lifecycle.ts"],"names":["activeEffect","ReactiveEffectLike","fn","scheduler","parent","deps","i","unsafeEffect","options","_effect","runner","trackEffect","dep","queue","isFlushPending","isBatching","queueJob","effect","flush","effects","setBatching","value","triggerEffects","state","hook","hasChanged","d","cleanup","sync"],"mappings":"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","file":"chunk-YWTD32NA.js","sourcesContent":["import { hook } from './hook'\n\n// Reactive effect system\nexport let activeEffect: ReactiveEffect | undefined\n\nexport class ReactiveEffectLike {\n deps: Set<any>[] = []\n active = true\n\n constructor(\n public fn: () => void,\n public scheduler?: () => void\n ) { }\n\n run() {\n if (!this.active) {\n return this.fn()\n }\n\n let parent: ReactiveEffect | undefined = activeEffect\n try {\n this.cleanup()\n activeEffect = this\n return this.fn()\n } finally {\n activeEffect = parent\n }\n }\n\n stop() {\n if (this.active) {\n this.cleanup()\n this.active = false\n }\n }\n\n cleanup() {\n const { deps } = this\n if (deps.length) {\n for (let i = 0; i < deps.length; i++) {\n deps[i].delete(this)\n }\n deps.length = 0\n }\n }\n}\n\nexport type ReactiveEffect = ReactiveEffectLike\n\nexport function unsafeEffect(fn: () => void, options: { scheduler?: () => void } = {}) {\n const _effect = new ReactiveEffectLike(fn, options.scheduler)\n _effect.run()\n\n const runner: any = _effect.run.bind(_effect)\n runner.effect = _effect\n return runner\n}\n\nexport function trackEffect(dep: Set<ReactiveEffect>) {\n if (activeEffect) {\n dep.add(activeEffect)\n activeEffect.deps.push(dep)\n }\n}\n\nconst queue = new Set<ReactiveEffect>()\nlet isFlushPending = false\nlet isBatching = false\n\nexport function queueJob(effect: ReactiveEffect) {\n if (!queue.has(effect)) {\n queue.add(effect)\n if (!isFlushPending && !isBatching) {\n isFlushPending = true\n Promise.resolve().then(flush)\n }\n }\n}\n\nexport function flush() {\n isFlushPending = false\n const effects = [...queue]\n queue.clear()\n for (const effect of effects) {\n if (effect.active) {\n effect.run()\n }\n }\n}\n\nexport function setBatching(value: boolean) {\n isBatching = value\n}\n\nexport function triggerEffects(dep: Set<ReactiveEffect>) {\n const effects = [...dep]\n for (const effect of effects) {\n if (effect !== activeEffect) {\n if (effect.scheduler) {\n effect.scheduler()\n } else {\n queueJob(effect)\n }\n }\n }\n}\n\n// Lifecycle hooks\nexport function effect(fn: () => (void | (() => void)), deps?: any[]) {\n const state = hook(() => {\n return {\n cleanup: undefined as undefined | (() => void),\n deps: undefined as undefined | any[],\n effect: undefined as undefined | ReactiveEffect,\n hasRun: false\n }\n })\n\n let hasChanged = true\n if (state.hasRun && deps && state.deps) {\n hasChanged = deps.some((d, i) => d !== state.deps![i])\n }\n\n if (hasChanged) {\n if (state.cleanup) {\n state.cleanup()\n state.cleanup = undefined\n }\n\n const cleanup = fn()\n if (typeof cleanup === 'function') {\n state.cleanup = cleanup\n }\n\n state.deps = deps\n state.hasRun = true\n }\n}\n\n/**\n * Unified sync API\n * - sync(): Force refresh (flush pending effects)\n * - sync(fn): Batch updates (run fn then flush)\n */\nexport function sync(fn?: () => void) {\n if (fn) {\n setBatching(true)\n try {\n fn()\n } finally {\n setBatching(false)\n flush()\n }\n } else {\n flush()\n }\n}\n"]}
|
package/dist/core.d.cts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { F as FNodeChild } from './types-y2GGaXXk.cjs';
|
|
2
|
+
|
|
1
3
|
type StateSetter<T> = (newValue: T | ((prev: T) => T)) => void;
|
|
2
4
|
type ResourceControl = {
|
|
3
5
|
refetch: () => Promise<void>;
|
|
@@ -5,15 +7,33 @@ type ResourceControl = {
|
|
|
5
7
|
readonly error: unknown;
|
|
6
8
|
readonly status: 'idle' | 'loading' | 'success' | 'error';
|
|
7
9
|
};
|
|
8
|
-
type StateAction<T> = StateSetter<T> | ResourceControl;
|
|
9
10
|
interface StateOptions {
|
|
10
11
|
key?: unknown[];
|
|
11
12
|
deps?: any[];
|
|
13
|
+
/** Debug name for DevTools */
|
|
14
|
+
name?: string;
|
|
12
15
|
}
|
|
16
|
+
interface Context<T> {
|
|
17
|
+
Provider: (props: {
|
|
18
|
+
value: T;
|
|
19
|
+
children: any;
|
|
20
|
+
}) => any;
|
|
21
|
+
id: symbol;
|
|
22
|
+
defaultValue: T;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
type StateAction<T> = StateSetter<T> | ResourceControl;
|
|
13
26
|
declare function state<T>(fn: () => Promise<T>, options?: StateOptions): [T | undefined, ResourceControl];
|
|
14
27
|
declare function state<T>(fn: () => T, options?: StateOptions): [T, ResourceControl];
|
|
15
28
|
declare function state<T>(initialValue: T extends Function ? never : T, options?: StateOptions): [T, StateSetter<T>];
|
|
16
29
|
|
|
30
|
+
interface RefObject<T> {
|
|
31
|
+
current: T | null;
|
|
32
|
+
}
|
|
33
|
+
type RefCallback<T> = (instance: T | null) => void;
|
|
34
|
+
type Ref<T> = RefObject<T> | RefCallback<T> | null;
|
|
35
|
+
type ForwardedRef<T> = RefCallback<T> | RefObject<T> | null;
|
|
36
|
+
|
|
17
37
|
declare function effect(fn: () => (void | (() => void)), deps?: any[]): void;
|
|
18
38
|
/**
|
|
19
39
|
* Unified sync API
|
|
@@ -21,21 +41,77 @@ declare function effect(fn: () => (void | (() => void)), deps?: any[]): void;
|
|
|
21
41
|
* - sync(fn): Batch updates (run fn then flush)
|
|
22
42
|
*/
|
|
23
43
|
declare function sync(fn?: () => void): void;
|
|
24
|
-
declare function batch(fn: () => void): void;
|
|
25
44
|
|
|
26
|
-
interface Context<T> {
|
|
27
|
-
Provider: (props: {
|
|
28
|
-
value: T;
|
|
29
|
-
children: any;
|
|
30
|
-
}) => any;
|
|
31
|
-
id: symbol;
|
|
32
|
-
defaultValue: T;
|
|
33
|
-
}
|
|
34
45
|
declare function createContext<T>(defaultValue: T): Context<T>;
|
|
35
46
|
declare function context<T>(ctx: Context<T>): T;
|
|
36
|
-
declare function pushContext(id: symbol, value: any): any;
|
|
37
|
-
declare function popContext(id: symbol, prevValue: any): void;
|
|
38
|
-
declare function snapshotContext(): Map<symbol, any>;
|
|
39
|
-
declare function runWithContext<R>(snapshot: Map<symbol, any>, fn: () => R): R;
|
|
40
47
|
|
|
41
|
-
|
|
48
|
+
declare const FORWARD_REF_SYMBOL: unique symbol;
|
|
49
|
+
interface ForwardRefRenderFunction<P, T> {
|
|
50
|
+
(props: P, ref: ForwardedRef<T>): FNodeChild;
|
|
51
|
+
}
|
|
52
|
+
interface ForwardRefComponent<P, T> {
|
|
53
|
+
(props: P & {
|
|
54
|
+
ref?: Ref<T>;
|
|
55
|
+
}): FNodeChild;
|
|
56
|
+
$$typeof: typeof FORWARD_REF_SYMBOL;
|
|
57
|
+
render: ForwardRefRenderFunction<P, T>;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Forwards a ref through a component to a child element
|
|
61
|
+
*
|
|
62
|
+
* @example
|
|
63
|
+
* ```tsx
|
|
64
|
+
* const FancyInput = forwardRef<{ placeholder?: string }, HTMLInputElement>(
|
|
65
|
+
* (props, ref) => {
|
|
66
|
+
* return (
|
|
67
|
+
* <input
|
|
68
|
+
* ref={ref}
|
|
69
|
+
* class="fancy-input"
|
|
70
|
+
* placeholder={props.placeholder}
|
|
71
|
+
* />
|
|
72
|
+
* )
|
|
73
|
+
* }
|
|
74
|
+
* )
|
|
75
|
+
*
|
|
76
|
+
* function Parent() {
|
|
77
|
+
* const inputRef = ref<HTMLInputElement>()
|
|
78
|
+
*
|
|
79
|
+
* return (
|
|
80
|
+
* <div>
|
|
81
|
+
* <FancyInput ref={inputRef} placeholder="Type here..." />
|
|
82
|
+
* <button onClick={() => inputRef.current?.select()}>
|
|
83
|
+
* Select All
|
|
84
|
+
* </button>
|
|
85
|
+
* </div>
|
|
86
|
+
* )
|
|
87
|
+
* }
|
|
88
|
+
* ```
|
|
89
|
+
*/
|
|
90
|
+
declare function forwardRef<P = {}, T = HTMLElement>(render: ForwardRefRenderFunction<P, T>): ForwardRefComponent<P, T>;
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* Creates a mutable ref object that persists across renders
|
|
94
|
+
*
|
|
95
|
+
* @example
|
|
96
|
+
* ```tsx
|
|
97
|
+
* function InputWithFocus() {
|
|
98
|
+
* const inputRef = ref<HTMLInputElement>()
|
|
99
|
+
*
|
|
100
|
+
* const focusInput = () => {
|
|
101
|
+
* inputRef.current?.focus()
|
|
102
|
+
* }
|
|
103
|
+
*
|
|
104
|
+
* return (
|
|
105
|
+
* <div>
|
|
106
|
+
* <input ref={inputRef} type="text" />
|
|
107
|
+
* <button onClick={focusInput}>Focus Input</button>
|
|
108
|
+
* </div>
|
|
109
|
+
* )
|
|
110
|
+
* }
|
|
111
|
+
* ```
|
|
112
|
+
*/
|
|
113
|
+
declare function ref<T>(initialValue: T): RefObject<T>;
|
|
114
|
+
declare function ref<T>(initialValue: T | null): RefObject<T | null>;
|
|
115
|
+
declare function ref<T = undefined>(): RefObject<T | undefined>;
|
|
116
|
+
|
|
117
|
+
export { type Context, type ForwardedRef, type Ref, type RefCallback, type RefObject, type ResourceControl, type StateAction, type StateOptions, type StateSetter, context, createContext, effect, forwardRef, ref, state, sync };
|
package/dist/core.d.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { F as FNodeChild } from './types-y2GGaXXk.js';
|
|
2
|
+
|
|
1
3
|
type StateSetter<T> = (newValue: T | ((prev: T) => T)) => void;
|
|
2
4
|
type ResourceControl = {
|
|
3
5
|
refetch: () => Promise<void>;
|
|
@@ -5,15 +7,33 @@ type ResourceControl = {
|
|
|
5
7
|
readonly error: unknown;
|
|
6
8
|
readonly status: 'idle' | 'loading' | 'success' | 'error';
|
|
7
9
|
};
|
|
8
|
-
type StateAction<T> = StateSetter<T> | ResourceControl;
|
|
9
10
|
interface StateOptions {
|
|
10
11
|
key?: unknown[];
|
|
11
12
|
deps?: any[];
|
|
13
|
+
/** Debug name for DevTools */
|
|
14
|
+
name?: string;
|
|
12
15
|
}
|
|
16
|
+
interface Context<T> {
|
|
17
|
+
Provider: (props: {
|
|
18
|
+
value: T;
|
|
19
|
+
children: any;
|
|
20
|
+
}) => any;
|
|
21
|
+
id: symbol;
|
|
22
|
+
defaultValue: T;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
type StateAction<T> = StateSetter<T> | ResourceControl;
|
|
13
26
|
declare function state<T>(fn: () => Promise<T>, options?: StateOptions): [T | undefined, ResourceControl];
|
|
14
27
|
declare function state<T>(fn: () => T, options?: StateOptions): [T, ResourceControl];
|
|
15
28
|
declare function state<T>(initialValue: T extends Function ? never : T, options?: StateOptions): [T, StateSetter<T>];
|
|
16
29
|
|
|
30
|
+
interface RefObject<T> {
|
|
31
|
+
current: T | null;
|
|
32
|
+
}
|
|
33
|
+
type RefCallback<T> = (instance: T | null) => void;
|
|
34
|
+
type Ref<T> = RefObject<T> | RefCallback<T> | null;
|
|
35
|
+
type ForwardedRef<T> = RefCallback<T> | RefObject<T> | null;
|
|
36
|
+
|
|
17
37
|
declare function effect(fn: () => (void | (() => void)), deps?: any[]): void;
|
|
18
38
|
/**
|
|
19
39
|
* Unified sync API
|
|
@@ -21,21 +41,77 @@ declare function effect(fn: () => (void | (() => void)), deps?: any[]): void;
|
|
|
21
41
|
* - sync(fn): Batch updates (run fn then flush)
|
|
22
42
|
*/
|
|
23
43
|
declare function sync(fn?: () => void): void;
|
|
24
|
-
declare function batch(fn: () => void): void;
|
|
25
44
|
|
|
26
|
-
interface Context<T> {
|
|
27
|
-
Provider: (props: {
|
|
28
|
-
value: T;
|
|
29
|
-
children: any;
|
|
30
|
-
}) => any;
|
|
31
|
-
id: symbol;
|
|
32
|
-
defaultValue: T;
|
|
33
|
-
}
|
|
34
45
|
declare function createContext<T>(defaultValue: T): Context<T>;
|
|
35
46
|
declare function context<T>(ctx: Context<T>): T;
|
|
36
|
-
declare function pushContext(id: symbol, value: any): any;
|
|
37
|
-
declare function popContext(id: symbol, prevValue: any): void;
|
|
38
|
-
declare function snapshotContext(): Map<symbol, any>;
|
|
39
|
-
declare function runWithContext<R>(snapshot: Map<symbol, any>, fn: () => R): R;
|
|
40
47
|
|
|
41
|
-
|
|
48
|
+
declare const FORWARD_REF_SYMBOL: unique symbol;
|
|
49
|
+
interface ForwardRefRenderFunction<P, T> {
|
|
50
|
+
(props: P, ref: ForwardedRef<T>): FNodeChild;
|
|
51
|
+
}
|
|
52
|
+
interface ForwardRefComponent<P, T> {
|
|
53
|
+
(props: P & {
|
|
54
|
+
ref?: Ref<T>;
|
|
55
|
+
}): FNodeChild;
|
|
56
|
+
$$typeof: typeof FORWARD_REF_SYMBOL;
|
|
57
|
+
render: ForwardRefRenderFunction<P, T>;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Forwards a ref through a component to a child element
|
|
61
|
+
*
|
|
62
|
+
* @example
|
|
63
|
+
* ```tsx
|
|
64
|
+
* const FancyInput = forwardRef<{ placeholder?: string }, HTMLInputElement>(
|
|
65
|
+
* (props, ref) => {
|
|
66
|
+
* return (
|
|
67
|
+
* <input
|
|
68
|
+
* ref={ref}
|
|
69
|
+
* class="fancy-input"
|
|
70
|
+
* placeholder={props.placeholder}
|
|
71
|
+
* />
|
|
72
|
+
* )
|
|
73
|
+
* }
|
|
74
|
+
* )
|
|
75
|
+
*
|
|
76
|
+
* function Parent() {
|
|
77
|
+
* const inputRef = ref<HTMLInputElement>()
|
|
78
|
+
*
|
|
79
|
+
* return (
|
|
80
|
+
* <div>
|
|
81
|
+
* <FancyInput ref={inputRef} placeholder="Type here..." />
|
|
82
|
+
* <button onClick={() => inputRef.current?.select()}>
|
|
83
|
+
* Select All
|
|
84
|
+
* </button>
|
|
85
|
+
* </div>
|
|
86
|
+
* )
|
|
87
|
+
* }
|
|
88
|
+
* ```
|
|
89
|
+
*/
|
|
90
|
+
declare function forwardRef<P = {}, T = HTMLElement>(render: ForwardRefRenderFunction<P, T>): ForwardRefComponent<P, T>;
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* Creates a mutable ref object that persists across renders
|
|
94
|
+
*
|
|
95
|
+
* @example
|
|
96
|
+
* ```tsx
|
|
97
|
+
* function InputWithFocus() {
|
|
98
|
+
* const inputRef = ref<HTMLInputElement>()
|
|
99
|
+
*
|
|
100
|
+
* const focusInput = () => {
|
|
101
|
+
* inputRef.current?.focus()
|
|
102
|
+
* }
|
|
103
|
+
*
|
|
104
|
+
* return (
|
|
105
|
+
* <div>
|
|
106
|
+
* <input ref={inputRef} type="text" />
|
|
107
|
+
* <button onClick={focusInput}>Focus Input</button>
|
|
108
|
+
* </div>
|
|
109
|
+
* )
|
|
110
|
+
* }
|
|
111
|
+
* ```
|
|
112
|
+
*/
|
|
113
|
+
declare function ref<T>(initialValue: T): RefObject<T>;
|
|
114
|
+
declare function ref<T>(initialValue: T | null): RefObject<T | null>;
|
|
115
|
+
declare function ref<T = undefined>(): RefObject<T | undefined>;
|
|
116
|
+
|
|
117
|
+
export { type Context, type ForwardedRef, type Ref, type RefCallback, type RefObject, type ResourceControl, type StateAction, type StateOptions, type StateSetter, context, createContext, effect, forwardRef, ref, state, sync };
|
package/dist/core.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
'use strict';var
|
|
1
|
+
'use strict';var chunkPSKDIB7J_js=require('./chunk-PSKDIB7J.js'),chunkLTT43APF_js=require('./chunk-LTT43APF.js');require('./chunk-6VIRXD2Y.js');var chunkYWTD32NA_js=require('./chunk-YWTD32NA.js'),chunkUWFVCKRU_js=require('./chunk-UWFVCKRU.js');function t(e){return chunkUWFVCKRU_js.b(()=>({current:e}))}var f=Symbol("flexium.forwardRef");function n(e){let r=p=>{let{ref:R,...d}=p;return e(d,R??null)};return r.$$typeof=f,r.render=e,r}Object.defineProperty(exports,"context",{enumerable:true,get:function(){return chunkPSKDIB7J_js.b}});Object.defineProperty(exports,"createContext",{enumerable:true,get:function(){return chunkPSKDIB7J_js.a}});Object.defineProperty(exports,"state",{enumerable:true,get:function(){return chunkLTT43APF_js.a}});Object.defineProperty(exports,"effect",{enumerable:true,get:function(){return chunkYWTD32NA_js.e}});Object.defineProperty(exports,"sync",{enumerable:true,get:function(){return chunkYWTD32NA_js.f}});exports.forwardRef=n;exports.ref=t;//# sourceMappingURL=core.js.map
|
|
2
2
|
//# sourceMappingURL=core.js.map
|
package/dist/core.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"core.js"}
|
|
1
|
+
{"version":3,"sources":["../src/ref/ref.ts","../src/ref/forwardRef.ts"],"names":["ref","initialValue","hook","FORWARD_REF_SYMBOL","forwardRef","render","ForwardRefComponent","props","otherProps"],"mappings":"oPA2BO,SAASA,CAAAA,CAAOC,EAA4C,CACjE,OAAOC,mBAAK,KAAO,CACjB,QAASD,CACX,CAAA,CAAE,CACJ,CC3BO,IAAME,EAAqB,MAAA,CAAO,oBAAoB,EA2CtD,SAASC,CAAAA,CACdC,CAAAA,CAC2B,CAC3B,IAAMC,CAAAA,CAAuBC,GAA4C,CACvE,GAAM,CAAE,GAAA,CAAAP,CAAAA,CAAK,GAAGQ,CAAW,CAAA,CAAID,CAAAA,CAC/B,OAAOF,CAAAA,CAAOG,CAAAA,CAAiBR,GAAO,IAAI,CAC5C,EAGA,OAAAM,CAAAA,CAAoB,SAAWH,CAAAA,CAC/BG,CAAAA,CAAoB,MAAA,CAASD,CAAAA,CAEtBC,CACT","file":"core.js","sourcesContent":["import { hook } from '../core/hook'\nimport type { RefObject } from './types'\n\n/**\n * Creates a mutable ref object that persists across renders\n *\n * @example\n * ```tsx\n * function InputWithFocus() {\n * const inputRef = ref<HTMLInputElement>()\n *\n * const focusInput = () => {\n * inputRef.current?.focus()\n * }\n *\n * return (\n * <div>\n * <input ref={inputRef} type=\"text\" />\n * <button onClick={focusInput}>Focus Input</button>\n * </div>\n * )\n * }\n * ```\n */\nexport function ref<T>(initialValue: T): RefObject<T>\nexport function ref<T>(initialValue: T | null): RefObject<T | null>\nexport function ref<T = undefined>(): RefObject<T | undefined>\nexport function ref<T>(initialValue?: T): RefObject<T | undefined> {\n return hook(() => ({\n current: initialValue\n }))\n}\n","import type { FNodeChild } from '../dom/types'\nimport type { ForwardedRef, Ref } from './types'\n\n// Symbol to identify forwarded components\nexport const FORWARD_REF_SYMBOL = Symbol('flexium.forwardRef')\n\nexport interface ForwardRefRenderFunction<P, T> {\n (props: P, ref: ForwardedRef<T>): FNodeChild\n}\n\nexport interface ForwardRefComponent<P, T> {\n (props: P & { ref?: Ref<T> }): FNodeChild\n $$typeof: typeof FORWARD_REF_SYMBOL\n render: ForwardRefRenderFunction<P, T>\n}\n\n/**\n * Forwards a ref through a component to a child element\n *\n * @example\n * ```tsx\n * const FancyInput = forwardRef<{ placeholder?: string }, HTMLInputElement>(\n * (props, ref) => {\n * return (\n * <input\n * ref={ref}\n * class=\"fancy-input\"\n * placeholder={props.placeholder}\n * />\n * )\n * }\n * )\n *\n * function Parent() {\n * const inputRef = ref<HTMLInputElement>()\n *\n * return (\n * <div>\n * <FancyInput ref={inputRef} placeholder=\"Type here...\" />\n * <button onClick={() => inputRef.current?.select()}>\n * Select All\n * </button>\n * </div>\n * )\n * }\n * ```\n */\nexport function forwardRef<P = {}, T = HTMLElement>(\n render: ForwardRefRenderFunction<P, T>\n): ForwardRefComponent<P, T> {\n const ForwardRefComponent = (props: P & { ref?: Ref<T> }): FNodeChild => {\n const { ref, ...otherProps } = props as P & { ref?: Ref<T> }\n return render(otherProps as P, ref ?? null)\n }\n\n // Mark as forwarded component\n ForwardRefComponent.$$typeof = FORWARD_REF_SYMBOL\n ForwardRefComponent.render = render\n\n return ForwardRefComponent\n}\n"]}
|
package/dist/core.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export{b as context,a as createContext
|
|
1
|
+
export{b as context,a as createContext}from'./chunk-3DKZ2J4D.mjs';export{a as state}from'./chunk-WGKD63GN.mjs';import'./chunk-JY6CE6RN.mjs';export{e as effect,f as sync}from'./chunk-IWFEXW4F.mjs';import {b}from'./chunk-5PNH2ARD.mjs';function t(e){return b(()=>({current:e}))}var f=Symbol("flexium.forwardRef");function n(e){let r=p=>{let{ref:R,...d}=p;return e(d,R??null)};return r.$$typeof=f,r.render=e,r}export{n as forwardRef,t as ref};//# sourceMappingURL=core.mjs.map
|
|
2
2
|
//# sourceMappingURL=core.mjs.map
|
package/dist/core.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"core.mjs"}
|
|
1
|
+
{"version":3,"sources":["../src/ref/ref.ts","../src/ref/forwardRef.ts"],"names":["ref","initialValue","hook","FORWARD_REF_SYMBOL","forwardRef","render","ForwardRefComponent","props","otherProps"],"mappings":"yOA2BO,SAASA,CAAAA,CAAOC,EAA4C,CACjE,OAAOC,EAAK,KAAO,CACjB,QAASD,CACX,CAAA,CAAE,CACJ,CC3BO,IAAME,EAAqB,MAAA,CAAO,oBAAoB,EA2CtD,SAASC,CAAAA,CACdC,CAAAA,CAC2B,CAC3B,IAAMC,CAAAA,CAAuBC,GAA4C,CACvE,GAAM,CAAE,GAAA,CAAAP,CAAAA,CAAK,GAAGQ,CAAW,CAAA,CAAID,CAAAA,CAC/B,OAAOF,CAAAA,CAAOG,CAAAA,CAAiBR,GAAO,IAAI,CAC5C,EAGA,OAAAM,CAAAA,CAAoB,SAAWH,CAAAA,CAC/BG,CAAAA,CAAoB,MAAA,CAASD,CAAAA,CAEtBC,CACT","file":"core.mjs","sourcesContent":["import { hook } from '../core/hook'\nimport type { RefObject } from './types'\n\n/**\n * Creates a mutable ref object that persists across renders\n *\n * @example\n * ```tsx\n * function InputWithFocus() {\n * const inputRef = ref<HTMLInputElement>()\n *\n * const focusInput = () => {\n * inputRef.current?.focus()\n * }\n *\n * return (\n * <div>\n * <input ref={inputRef} type=\"text\" />\n * <button onClick={focusInput}>Focus Input</button>\n * </div>\n * )\n * }\n * ```\n */\nexport function ref<T>(initialValue: T): RefObject<T>\nexport function ref<T>(initialValue: T | null): RefObject<T | null>\nexport function ref<T = undefined>(): RefObject<T | undefined>\nexport function ref<T>(initialValue?: T): RefObject<T | undefined> {\n return hook(() => ({\n current: initialValue\n }))\n}\n","import type { FNodeChild } from '../dom/types'\nimport type { ForwardedRef, Ref } from './types'\n\n// Symbol to identify forwarded components\nexport const FORWARD_REF_SYMBOL = Symbol('flexium.forwardRef')\n\nexport interface ForwardRefRenderFunction<P, T> {\n (props: P, ref: ForwardedRef<T>): FNodeChild\n}\n\nexport interface ForwardRefComponent<P, T> {\n (props: P & { ref?: Ref<T> }): FNodeChild\n $$typeof: typeof FORWARD_REF_SYMBOL\n render: ForwardRefRenderFunction<P, T>\n}\n\n/**\n * Forwards a ref through a component to a child element\n *\n * @example\n * ```tsx\n * const FancyInput = forwardRef<{ placeholder?: string }, HTMLInputElement>(\n * (props, ref) => {\n * return (\n * <input\n * ref={ref}\n * class=\"fancy-input\"\n * placeholder={props.placeholder}\n * />\n * )\n * }\n * )\n *\n * function Parent() {\n * const inputRef = ref<HTMLInputElement>()\n *\n * return (\n * <div>\n * <FancyInput ref={inputRef} placeholder=\"Type here...\" />\n * <button onClick={() => inputRef.current?.select()}>\n * Select All\n * </button>\n * </div>\n * )\n * }\n * ```\n */\nexport function forwardRef<P = {}, T = HTMLElement>(\n render: ForwardRefRenderFunction<P, T>\n): ForwardRefComponent<P, T> {\n const ForwardRefComponent = (props: P & { ref?: Ref<T> }): FNodeChild => {\n const { ref, ...otherProps } = props as P & { ref?: Ref<T> }\n return render(otherProps as P, ref ?? null)\n }\n\n // Mark as forwarded component\n ForwardRefComponent.$$typeof = FORWARD_REF_SYMBOL\n ForwardRefComponent.render = render\n\n return ForwardRefComponent\n}\n"]}
|