@rectify-dev/core 2.0.2 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../../rectify-dom-binding/src/events/RectifyEventRegistry.ts","../../rectify-dom-binding/src/events/__main.ts","../../rectify-dom-binding/src/clients/RectifyDomComponentTree.ts","../../rectify-dom-binding/src/events/SyntheticEvent.ts","../../rectify-dom-binding/src/events/RectifyEventPriority.ts","../../rectify-dom-binding/src/events/RectifyDomEventListener.ts","../../rectify-dom-binding/src/events/RectifyEventListener.ts","../../rectify-dom-binding/src/events/RectifyEvent.ts","../../rectify-dom-binding/src/clients/RectifyDomProperties.ts","../../rectify-reconciler/src/RectifyFiberFlags.ts","../../rectify-reconciler/src/RectifyFiberLanes.ts","../../rectify-reconciler/src/RectifyFiberWorkTags.ts","../../rectify-reconciler/src/RectifyFiberService.ts","../../rectify-reconciler/src/RectifyFiber.ts","../../rectify-reconciler/src/RectifyFiberInstance.ts","../../rectify-hook/src/RectifyHookRenderingFiber.ts","../../rectify-hook/src/RectifyHook.ts","../../rectify-hook/src/RectifyHookUseState.ts","../../rectify-hook/src/RectifyHookDeps.ts","../../rectify-hook/src/RectifyHookUseEffect.ts","../../rectify-hook/src/RectifyHookUseLayoutEffect.ts","../../rectify-hook/src/RectifyHookUseRef.ts","../../rectify-hook/src/RectifyHookUseMemo.ts","../../rectify-hook/src/RectifyHookUseCallback.ts","../../rectify-hook/src/RectifyHookContext.ts","../../rectify-reconciler/src/RectifyFiberRenderPriority.ts","../../rectify-reconciler/src/RectifyFiberScheduler.ts","../../rectify-reconciler/src/RectifyFiberWorkLoop.ts","../../rectify-reconciler/src/RectifyFiberCommitWork.ts","../../rectify-reconciler/src/RectifyFiberConcurrentUpdate.ts","../../rectify-reconciler/src/RectifyFiberReconciler.ts","../../rectify-dom/src/RectifyDomRoot.ts","../src/RectifyMemo.ts"],"names":["isFunction","instance","update","memo","shallowEqual"],"mappings":";;;;;;AAEO,IAAM,eAAA,uBAAgD,GAAA,EAAI;AAM1D,IAAM,wBAAA,uBACP,GAAA,EAAI;AAEH,SAAS,mBAAA,CACd,kBACA,YAAA,EACA;AAGA,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,YAAA,CAAa,QAAQ,CAAA,EAAA,EAAK;AAC5C,IAAA,MAAM,UAAA,GAAa,aAAa,CAAC,CAAA;AAEjC,IAAA,eAAA,CAAgB,IAAI,UAAU,CAAA;AAE9B,IAAA,IAAI,CAAC,wBAAA,CAAyB,GAAA,CAAI,UAAU,CAAA,EAAG;AAC7C,MAAA,wBAAA,CAAyB,GAAA,CAAI,YAAY,gBAAgB,CAAA;AAAA,IAC3D;AAAA,EACF;AACF;AAfgB,MAAA,CAAA,mBAAA,EAAA,qBAAA,CAAA;AAiBT,SAAS,mBAAA,GAAsB;AAEpC,EAAA,mBAAA,CAAoB,SAAA,EAAW,CAAC,OAAO,CAAC,CAAA;AACxC,EAAA,mBAAA,CAAoB,eAAA,EAAiB,CAAC,UAAU,CAAC,CAAA;AACjD,EAAA,mBAAA,CAAoB,aAAA,EAAe,CAAC,WAAW,CAAC,CAAA;AAChD,EAAA,mBAAA,CAAoB,WAAA,EAAa,CAAC,SAAS,CAAC,CAAA;AAC5C,EAAA,mBAAA,CAAoB,aAAA,EAAe,CAAC,WAAW,CAAC,CAAA;AAChD,EAAA,mBAAA,CAAoB,cAAA,EAAgB,CAAC,YAAY,CAAC,CAAA;AAClD,EAAA,mBAAA,CAAoB,cAAA,EAAgB,CAAC,YAAY,CAAC,CAAA;AAClD,EAAA,mBAAA,CAAoB,eAAA,EAAiB,CAAC,aAAa,CAAC,CAAA;AAGpD,EAAA,mBAAA,CAAoB,WAAA,EAAa,CAAC,SAAS,CAAC,CAAA;AAC5C,EAAA,mBAAA,CAAoB,SAAA,EAAW,CAAC,OAAO,CAAC,CAAA;AACxC,EAAA,mBAAA,CAAoB,YAAA,EAAc,CAAC,UAAU,CAAC,CAAA;AAG9C,EAAA,mBAAA,CAAoB,SAAA,EAAW,CAAC,OAAO,CAAC,CAAA;AACxC,EAAA,mBAAA,CAAoB,UAAA,EAAY,CAAC,QAAQ,CAAC,CAAA;AAC1C,EAAA,mBAAA,CAAoB,UAAA,EAAY,CAAC,QAAQ,CAAC,CAAA;AAC1C,EAAA,mBAAA,CAAoB,SAAA,EAAW,CAAC,OAAO,CAAC,CAAA;AAGxC,EAAA,mBAAA,CAAoB,SAAA,EAAW,CAAC,OAAO,CAAC,CAAA;AACxC,EAAA,mBAAA,CAAoB,QAAA,EAAU,CAAC,MAAM,CAAC,CAAA;AAGtC,EAAA,mBAAA,CAAoB,QAAA,EAAU,CAAC,MAAM,CAAC,CAAA;AACtC,EAAA,mBAAA,CAAoB,OAAA,EAAS,CAAC,KAAK,CAAC,CAAA;AACpC,EAAA,mBAAA,CAAoB,SAAA,EAAW,CAAC,OAAO,CAAC,CAAA;AAGxC,EAAA,mBAAA,CAAoB,cAAA,EAAgB,CAAC,YAAY,CAAC,CAAA;AAClD,EAAA,mBAAA,CAAoB,aAAA,EAAe,CAAC,WAAW,CAAC,CAAA;AAChD,EAAA,mBAAA,CAAoB,YAAA,EAAc,CAAC,UAAU,CAAC,CAAA;AAC9C,EAAA,mBAAA,CAAoB,eAAA,EAAiB,CAAC,aAAa,CAAC,CAAA;AAGpD,EAAA,mBAAA,CAAoB,UAAA,EAAY,CAAC,QAAQ,CAAC,CAAA;AAC1C,EAAA,mBAAA,CAAoB,SAAA,EAAW,CAAC,OAAO,CAAC,CAAA;AAGxC,EAAA,mBAAA,CAAoB,QAAA,EAAU,CAAC,MAAM,CAAC,CAAA;AACtC,EAAA,mBAAA,CAAoB,aAAA,EAAe,CAAC,WAAW,CAAC,CAAA;AAChD,EAAA,mBAAA,CAAoB,WAAA,EAAa,CAAC,SAAS,CAAC,CAAA;AAC5C,EAAA,mBAAA,CAAoB,aAAA,EAAe,CAAC,WAAW,CAAC,CAAA;AAChD,EAAA,mBAAA,CAAoB,aAAA,EAAe,CAAC,WAAW,CAAC,CAAA;AAChD,EAAA,mBAAA,CAAoB,YAAA,EAAc,CAAC,UAAU,CAAC,CAAA;AAC9C,EAAA,mBAAA,CAAoB,QAAA,EAAU,CAAC,MAAM,CAAC,CAAA;AACxC;AAjDgB,MAAA,CAAA,mBAAA,EAAA,qBAAA,CAAA;;;ACvBhB,IAAM,uBAAO,MAAA,CAAA,MAAM;AACjB,EAAA,mBAAA,EAAoB;AACtB,CAAA,EAFa,MAAA,CAAA;AAIb,IAAA,EAAK;;;ACLL,IAAM,SAAA,GAAY,KAAK,MAAA,EAAO,CAAE,SAAS,EAAE,CAAA,CAAE,MAAM,CAAC,CAAA;AACpD,IAAM,+BAA+B,qBAAA,GAAwB,SAAA;AAC7D,IAAM,sBAAsB,iBAAA,GAAoB,SAAA;AAChD,IAAM,mCAAmC,qBAAA,GAAwB,SAAA;AAG1D,SAAS,mBAAA,CACd,UACA,IAAA,EACM;AACN,EAAC,IAAA,CAAa,4BAA4B,CAAA,GAAI,QAAA;AAChD;AALgB,MAAA,CAAA,mBAAA,EAAA,qBAAA,CAAA;AAOT,SAAS,sBAAsB,IAAA,EAA4B;AAChE,EAAC,IAAA,CAAa,4BAA4B,CAAA,GAAI,IAAA;AAChD;AAFgB,MAAA,CAAA,qBAAA,EAAA,uBAAA,CAAA;AAQT,IAAM,iBAAA,mBAAoB,MAAA,CAAA,CAAC,KAAA,EAAc,IAAA,KAAe;AAC7D,EAAA,IAAI,CAAC,IAAA,EAAM;AACX,EAAC,IAAA,CAAa,mBAAmB,CAAA,GAAI,KAAA;AACvC,CAAA,EAHiC,mBAAA,CAAA;AAK1B,IAAM,kBAAA,2BAAsB,IAAA,KAA6B;AAC9D,EAAA,IAAI,CAAC,MAAM,OAAO,IAAA;AAClB,EAAA,OAAQ,IAAA,CAAa,mBAAmB,CAAA,IAAK,IAAA;AAC/C,CAAA,EAHkC,oBAAA,CAAA;AAK3B,SAAS,wBAAA,CACd,OACA,SAAA,EACM;AACN,EAAA,IAAI,CAAC,KAAA,EAAO;AACZ,EAAC,KAAA,CAAc,gCAAgC,CAAA,GAAI,SAAA;AACrD;AANgB,MAAA,CAAA,wBAAA,EAAA,0BAAA,CAAA;AAQT,SAAS,yBACd,KAAA,EACmD;AACnD,EAAA,IAAI,CAAC,OAAO,OAAO,IAAA;AACnB,EAAA,OAAQ,KAAA,CAAc,gCAAgC,CAAA,IAAK,IAAA;AAC7D;AALgB,MAAA,CAAA,wBAAA,EAAA,0BAAA,CAAA;;;ACzChB,IAAM,eAAA,GAAN,MAAM,eAAA,CAAe;AAAA,EAOnB,YAAY,WAAA,EAA6B;AALzC,IAAA,IAAA,CAAA,aAAA,GAAgC,IAAA;AAGhC,IAAA,IAAA,CAAQ,kBAAA,GAA8B,KAAA;AAGpC,IAAA,IAAA,CAAK,SAAS,WAAA,CAAY,MAAA;AAC1B,IAAA,IAAA,CAAK,WAAA,GAAc,WAAA;AAAA,EACrB;AAAA,EAEA,eAAA,GAAkB;AAChB,IAAA,IAAA,CAAK,kBAAA,GAAqB,IAAA;AAC1B,IAAA,IAAA,CAAK,YAAY,eAAA,EAAgB;AAAA,EACnC;AAAA,EAEA,oBAAA,GAAuB;AACrB,IAAA,OAAO,IAAA,CAAK,kBAAA;AAAA,EACd;AACF,CAAA;AApBqB,MAAA,CAAA,eAAA,EAAA,gBAAA,CAAA;AAArB,IAAM,cAAA,GAAN,eAAA;AAsBA,IAAO,sBAAA,GAAQ;;;ACPf,IAAI,uBAAmB,MAAA,CAAA,MAAM;AAAC,CAAA,EAAP,MAAA,CAAA;AACvB,IAAI,yBAAkB,MAAA,CAAA,MAAM;AAAC,CAAA,EAAP,QAAA,CAAA;AAGf,IAAM,4BAAA,mBAA+B,MAAA,CAAA,CAC1C,GAAA,EACA,KAAA,KACS;AACT,EAAA,IAAA,GAAO,GAAA;AACP,EAAA,MAAA,GAAS,KAAA;AACX,CAAA,EAN4C,8BAAA,CAAA;AASrC,IAAM,gBAAA,mBAAmB,MAAA,CAAA,CAAC,QAAA,KAA2B,IAAA,CAAK,QAAQ,CAAA,EAAzC,kBAAA,CAAA;AAGzB,IAAM,kBAAA,mBAAqB,MAAA,CAAA,MAAY,MAAA,EAAO,EAAnB,oBAAA,CAAA;AAG3B,IAAM,UAAA,GAAa,CAAA;;;ACpBnB,IAAM,0BAAA,mBAA6B,MAAA,CAAA,CACxC,eAAA,EACA,YAAA,KACG;AACH,EAAA,OAAO,aAAA,CAAc,IAAA,CAAK,IAAA,EAAM,YAAA,EAAc,eAAe,CAAA;AAC/D,CAAA,EAL0C,4BAAA,CAAA;AAO1C,IAAM,cAAA,2BAAkB,WAAA,KAAgC;AACtD,EAAA,OAAQ,WAAA,CAAY,UAAU,WAAA,CAAY,UAAA;AAC5C,CAAA,EAFuB,gBAAA,CAAA;AAIvB,IAAM,aAAA,mBAAgB,MAAA,CAAA,CACpB,YAAA,EACA,eAAA,EACA,WAAA,KACG;AACH,EAAA,MAAM,UAAA,GAAa,eAAe,WAAW,CAAA;AAC7C,EAAA,MAAM,WAAA,GAAc,mBAAmB,UAAU,CAAA;AAEjD,EAAA,IAAI,CAAC,WAAA,EAAa;AAElB,EAAA,MAAM,cAAA,GAAiB,IAAI,sBAAA,CAAe,WAAW,CAAA;AAErD,EAAA,MAAM,OAAgB,EAAC;AACvB,EAAA,IAAI,KAAA,GAAsB,WAAA;AAE1B,EAAA,OAAO,KAAA,EAAO;AACZ,IAAA,IAAA,CAAK,KAAK,KAAK,CAAA;AACf,IAAA,IAAI,KAAA,CAAM,cAAc,eAAA,EAAiB;AACvC,MAAA;AAAA,IACF;AACA,IAAA,KAAA,GAAQ,KAAA,CAAM,MAAA;AAAA,EAChB;AAEA,EAAA,KAAA,MAAW,aAAa,IAAA,EAAM;AAC5B,IAAA,IAAI,cAAA,CAAe,sBAAqB,EAAG;AAE3C,IAAA,MAAM,eAAA,GAAkB,wBAAA;AAAA,MACtB,SAAA,CAAU;AAAA,KACZ;AACA,IAAA,IAAI,CAAC,eAAA,EAAiB;AACtB,IAAA,MAAM,WAAA,GAAc,wBAAA,CAAyB,GAAA,CAAI,YAAY,CAAA;AAC7D,IAAA,IAAI,CAAC,WAAA,EAAa;AAClB,IAAA,MAAM,OAAA,GAAU,eAAA,CAAgB,GAAA,CAAI,WAAW,CAAA;AAE/C,IAAA,IAAI,CAAC,UAAA,CAAW,OAAO,CAAA,EAAG;AAE1B,IAAA,cAAA,CAAe,gBAAgB,SAAA,CAAU,SAAA;AACzC,IAAA,gBAAA,CAAiB,UAAU,CAAA;AAC3B,IAAA,IAAI;AACF,MAAA,OAAA,CAAQ,cAAc,CAAA;AAAA,IACxB,CAAA,SAAE;AACA,MAAA,kBAAA,EAAmB;AAAA,IACrB;AAAA,EACF;AAEA,EAAA,cAAA,CAAe,aAAA,GAAgB,IAAA;AACjC,CAAA,EA9CsB,eAAA,CAAA;;;AClBf,SAAS,uBAAA,CACd,MAAA,EACA,SAAA,EACA,QAAA,EAC2C;AAC3C,EAAA,MAAA,CAAO,gBAAA,CAAiB,SAAA,EAAW,QAAA,EAAU,IAAI,CAAA;AACjD,EAAA,OAAO,QAAA;AACT;AAPgB,MAAA,CAAA,uBAAA,EAAA,yBAAA,CAAA;;;ACJhB,IAAM,eAAA,GACJ,4BAA4B,IAAA,CAAK,MAAA,GAAS,QAAA,CAAS,EAAE,CAAA,CAAE,KAAA,CAAM,CAAC,CAAA;AAEzD,IAAM,yBAAA,2BAA6B,GAAA,KAAqB;AAC7D,EAAA,IAAK,GAAA,CAAY,eAAe,CAAA,EAAG;AACnC,EAAC,GAAA,CAAY,eAAe,CAAA,GAAI,IAAA;AAEhC,EAAA,eAAA,CAAgB,OAAA;AAAA,IAAQ,CAAC,YAAA,KACvB,mBAAA,CAAoB,YAAA,EAAc,GAAG;AAAA,GACvC;AACF,CAAA,EAPyC,2BAAA,CAAA;AASzC,IAAM,mBAAA,mBAAsB,MAAA,CAAA,CAC1B,YAAA,EACA,MAAA,KACG;AACH,EAAA,MAAM,QAAA,GAAW,0BAAA,CAA2B,MAAA,EAAQ,YAAY,CAAA;AAChE,EAAA,uBAAA,CAAwB,MAAA,EAAQ,cAAc,QAAe,CAAA;AAC/D,CAAA,EAN4B,qBAAA,CAAA;;;ACT5B,IAAM,0BAAU,MAAA,CAAA,CAAC,CAAA,KAAc,CAAA,CAAE,UAAA,CAAW,IAAI,CAAA,EAAhC,SAAA,CAAA;AAChB,IAAM,UAAA,mBAAa,MAAA,CAAA,CAAC,CAAA,KAClB,CAAA,KAAM,UAAA,IAAc,MAAM,KAAA,IAAS,CAAC,OAAA,CAAQ,CAAC,CAAA,EAD5B,YAAA,CAAA;AAGnB,IAAM,kBAAA,uBAAyB,GAAA,CAAI;AAAA,EACjC,QAAA;AAAA,EACA,SAAA;AAAA,EACA,YAAA;AAAA,EACA,YAAA;AAAA,EACA,MAAA;AAAA,EACA,UAAA;AAAA,EACA;AACF,CAAC,CAAA;AAED,SAAS,2BAA2B,QAAA,EAAkB;AACpD,EAAA,OAAO,MAAA,CAAO,QAAQ,QAAQ,CAAA,CAC3B,IAAI,CAAC,CAAC,GAAA,EAAK,KAAK,CAAA,KAAM;AACrB,IAAA,MAAM,MAAA,GAAS,IAAI,OAAA,CAAQ,QAAA,EAAU,CAAC,CAAA,KAAM,GAAA,GAAM,CAAA,CAAE,WAAA,EAAa,CAAA;AAEjE,IAAA,IAAI,QAAA,GAAW,KAAA;AAEf,IAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,CAAC,kBAAA,CAAmB,GAAA,CAAI,GAAG,CAAA,EAAG;AAC7D,MAAA,QAAA,GAAW,GAAG,KAAK,CAAA,EAAA,CAAA;AAAA,IACrB;AAEA,IAAA,OAAO,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,QAAQ,CAAA,CAAA;AAAA,EAC9B,CAAC,CAAA,CACA,IAAA,CAAK,IAAI,CAAA;AACd;AAdS,MAAA,CAAA,0BAAA,EAAA,4BAAA,CAAA;AAgBF,IAAM,eAAA,2BACX,IAAA,EACA,SAAA,GAAiB,EAAC,EAClB,SAAA,GAAiB,EAAC,KACf;AACH,EAAA,MAAM,OAAA,GAAU,IAAA;AAEhB,EAAA,MAAM,SAAA,GACJ,wBAAA,CAAyB,OAAO,CAAA,wBAC5B,GAAA,EAAwD;AAE9D,EAAA,KAAA,MAAW,KAAK,SAAA,EAAW;AACzB,IAAA,IAAI,OAAA,CAAQ,CAAC,CAAA,IAAK,EAAE,KAAK,SAAA,CAAA,EAAY;AACnC,MAAA,SAAA,CAAU,OAAO,CAAwB,CAAA;AAAA,IAC3C;AACA,IAAA,IAAI,UAAA,CAAW,CAAC,CAAA,IAAK,EAAE,KAAK,SAAA,CAAA,EAAY;AACtC,MAAC,OAAA,CAAgB,CAAC,CAAA,GAAI,EAAA;AACtB,MAAA,OAAA,CAAQ,gBAAgB,CAAC,CAAA;AAAA,IAC3B;AAAA,EACF;AAEA,EAAA,KAAA,MAAW,KAAK,SAAA,EAAW;AACzB,IAAA,IAAI,CAAA,KAAM,UAAA,IAAc,CAAA,KAAM,KAAA,EAAO;AAErC,IAAA,IAAI,OAAA,CAAQ,CAAC,CAAA,EAAG;AACd,MAAA,IAAI,SAAA,GAAY,CAAC,CAAA,KAAM,SAAA,GAAY,CAAC,CAAA,EAAG;AACrC,QAAA,SAAA,CAAU,GAAA,CAAI,CAAA,EAAG,SAAA,CAAU,CAAC,CAAC,CAAA;AAAA,MAC/B;AAAA,IACF,CAAA,MAAA,IAAW,MAAM,OAAA,EAAS;AACxB,MAAA,OAAA,CAAQ,aAAa,OAAA,EAAS,0BAAA,CAA2B,SAAA,CAAU,CAAC,CAAC,CAAC,CAAA;AAAA,IACxE,CAAA,MAAO;AACL,MAAA,MAAM,CAAA,GAAI,UAAU,CAAC,CAAA;AAErB,MAAA,IAAI,MAAM,WAAA,EAAa,OAAA,CAAQ,YAAA,CAAa,OAAA,EAAS,KAAK,EAAE,CAAA;AAAA,WAAA,IACnD,CAAA,KAAM,KAAA,IAAS,CAAA,KAAM,IAAA,IAAQ,CAAA,KAAM,MAAA;AAC1C,QAAA,OAAA,CAAQ,gBAAgB,CAAC,CAAA;AAAA,WACtB,OAAA,CAAQ,YAAA,CAAa,CAAA,EAAG,MAAA,CAAO,CAAC,CAAC,CAAA;AAAA,IACxC;AAAA,EACF;AAEA,EAAA,wBAAA,CAAyB,SAAS,SAAS,CAAA;AAC7C,CAAA,EAzC+B,iBAAA,CAAA;;;ACtCxB,IAAM,OAAA,GAAwB,CAAA;AAC9B,IAAM,gBAAwB,CAAA,IAAK,CAAA;AACnC,IAAM,aAAwB,CAAA,IAAK,CAAA;AACnC,IAAM,eAAwB,CAAA,IAAK,CAAA;AACnC,IAAM,WAAwB,CAAA,IAAK,CAAA;;;ACDnC,IAAM,OAAA,GAAyB,CAAA;AAC/B,IAAM,QAAA,GAAyB,CAAA;AAC/B,IAAM,SAAA,GAAyB,CAAA;AAC/B,IAAM,WAAA,GAAyB,CAAA;AAC/B,IAAM,cAAA,GAAyB,CAAA;AAC/B,IAAM,QAAA,GAAyB,EAAA;;;ACR/B,IAAM,iBAAA,mBAA4B,MAAA,CAAO,GAAA,CAAI,4BAA4B,CAAA;AACzE,IAAM,aAAA,mBAA4B,MAAA,CAAO,GAAA,CAAI,wBAAwB,CAAA;AACrE,IAAM,QAAA,mBAA4B,MAAA,CAAO,GAAA,CAAI,mBAAmB,CAAA;AAChE,IAAM,QAAA,mBAA4B,MAAA,CAAO,GAAA,CAAI,mBAAmB,CAAA;AAChE,IAAM,iBAAA,mBAA4B,MAAA,CAAO,GAAA,CAAI,4BAA4B,CAAA;AACzE,IAAM,eAAA,mBAA4B,MAAA,CAAO,GAAA,CAAI,0BAA0B,CAAA;AACvE,IAAM,aAAA,mBAA4B,MAAA,CAAO,GAAA,CAAI,wBAAwB,CAAA;ACgB5E,IAAM,cAAA,mBAAiB,MAAA,CAAA,CAAC,KAAA,EAAc,IAAA,KAAuB;AAC3D,EAAA,IAAI,cAAA,CAAe,KAAA,EAAO,IAAI,CAAA,EAAG;AACjC,EAAA,KAAA,CAAM,KAAA,IAAS,IAAA;AACjB,CAAA,EAHuB,gBAAA,CAAA;AAKvB,IAAM,mBAAA,mBAAsB,MAAA,CAAA,CAAC,KAAA,EAAqB,IAAA,KAAuB;AACvE,EAAA,IAAI,CAAC,cAAA,CAAe,KAAA,EAAO,IAAI,CAAA,EAAG;AAClC,EAAA,KAAA,CAAO,SAAS,CAAC,IAAA;AACnB,CAAA,EAH4B,qBAAA,CAAA;AAK5B,IAAM,cAAA,mBAAiB,MAAA,CAAA,CAAC,KAAA,EAAqB,IAAA,KAA0B;AACrE,EAAA,IAAI,CAAC,OAAO,OAAO,KAAA;AACnB,EAAA,OAAA,CAAQ,KAAA,CAAM,QAAQ,IAAA,MAAU,CAAA;AAClC,CAAA,EAHuB,gBAAA,CAAA;AAKvB,IAAM,sBAAA,2BAA0B,OAAA,KAA4B;AAC1D,EAAA,QAAQ,QAAQ,QAAA;AAAU,IACxB,KAAK,oBAAA;AACH,MAAA,IAAIA,UAAAA,CAAW,QAAQ,IAAI,CAAA,IAAM,QAAQ,IAAA,EAAc,QAAA,KAAa,QAAQ,IAAA,EAAM;AAChF,QAAA,OAAO,eAAA;AAAA,MACT;AACA,MAAA,IAAIA,WAAW,OAAA,CAAQ,IAAI,KAAM,OAAA,CAAQ,IAAA,EAAc,YAAY,IAAA,EAAM;AACvE,QAAA,OAAO,aAAA;AAAA,MACT;AACA,MAAA,OAAOA,UAAAA,CAAW,OAAA,CAAQ,IAAI,CAAA,GAAI,iBAAA,GAAoB,aAAA;AAAA,IACxD,KAAK,iBAAA;AACH,MAAA,OAAO,QAAA;AAAA,IACT,KAAK,qBAAA;AACH,MAAA,OAAO,iBAAA;AAAA,IACT;AACE,MAAA,OAAO,IAAA;AAAA;AAEb,CAAA,EAjB+B,wBAAA,CAAA;AAmB/B,IAAM,yBAAA,2BAA6B,KAAA,KAAuB;AACxD,EAAA,QAAQ,MAAM,OAAA;AAAS,IACrB,KAAK,QAAA;AACH,MAAA,OAAO,QAAA,CAAS,cAAA,CAAe,KAAA,CAAM,YAAY,CAAA;AAAA,IACnD;AACE,MAAA,OAAO,QAAA,CAAS,aAAA,CAAc,KAAA,CAAM,IAAc,CAAA;AAAA;AAExD,CAAA,EAPkC,2BAAA,CAAA;AASlC,IAAM,YAAA,2BAAgB,KAAA,KAAuB;AAC3C,EAAA,IAAI,MAAM,OAAA,KAAY,QAAA;AACpB,IAAA,OAAO,KAAA,CAAM,SAAA;AAEf,EAAA,IAAI,IAAI,KAAA,CAAM,MAAA;AACd,EAAA,OAAO,CAAA,EAAG;AACR,IAAA,IAAI,CAAA,CAAE,OAAA,KAAY,aAAA,EAAe,OAAO,CAAA,CAAE,SAAA;AAC1C,IAAA,IAAI,CAAA,CAAE,OAAA,KAAY,QAAA,EAAU,OAAO,CAAA,CAAE,SAAA;AACrC,IAAA,CAAA,GAAI,CAAA,CAAE,MAAA;AAAA,EACR;AAEA,EAAA,MAAM,IAAI,MAAM,sBAAsB,CAAA;AACxC,CAAA,EAZqB,cAAA,CAAA;AAmBrB,SAAS,kBAAkB,KAAA,EAA2B;AACpD,EAAA,IAAI,KAAA,CAAM,OAAA,KAAY,aAAA,IAAiB,KAAA,CAAM,YAAY,QAAA,EAAU;AACjE,IAAA,OAAO,KAAA,CAAM,SAAA;AAAA,EACf;AAEA,EAAA,IAAI,QAAQ,KAAA,CAAM,KAAA;AAClB,EAAA,OAAO,KAAA,EAAO;AACZ,IAAA,MAAM,KAAA,GAAQ,kBAAkB,KAAK,CAAA;AACrC,IAAA,IAAI,OAAO,OAAO,KAAA;AAClB,IAAA,KAAA,GAAQ,KAAA,CAAM,OAAA;AAAA,EAChB;AAEA,EAAA,OAAO,IAAA;AACT;AAbS,MAAA,CAAA,iBAAA,EAAA,mBAAA,CAAA;AAqBT,SAAS,eAAe,KAAA,EAA2B;AACjD,EAAA,IAAI,UAAU,KAAA,CAAM,OAAA;AACpB,EAAA,OAAO,OAAA,EAAS;AACd,IAAA,MAAM,IAAA,GAAO,kBAAkB,OAAO,CAAA;AACtC,IAAA,IAAI,MAAM,OAAO,IAAA;AACjB,IAAA,OAAA,GAAU,OAAA,CAAQ,OAAA;AAAA,EACpB;AAEA,EAAA,OAAO,IAAA;AACT;AATS,MAAA,CAAA,cAAA,EAAA,gBAAA,CAAA;AAWT,IAAM,eAAA,mBAAkB,MAAA,CAAA,CAAC,SAAA,EAAgB,SAAA,KAAmB;AAC1D,EAAA,MAAM,YAAA,GAAe,UAAA;AACrB,EAAA,MAAM,OAAA,GAAU,KAAA;AAChB,EAAA,IAAI,aAAA,CAAc,SAAS,CAAA,IAAK,aAAA,CAAc,SAAS,CAAA,EAAG;AACxD,IAAA,OAAO,CAAC,YAAA;AAAA,MACN,IAAA,CAAK,SAAA,EAAW,CAAC,YAAA,EAAc,OAAO,CAAC,CAAA;AAAA,MACvC,IAAA,CAAK,SAAA,EAAW,CAAC,YAAA,EAAc,OAAO,CAAC;AAAA,KACzC;AAAA,EACF;AAEA,EAAA,OAAO,SAAA,KAAc,SAAA;AACvB,CAAA,EAXwB,iBAAA,CAAA;;;AC9GjB,IAAM,WAAA,mBAAc,MAAA,CAAA,CACzB,OAAA,EACA,YAAA,EACA,MAAkB,IAAA,KACR;AACV,EAAA,OAAO;AAAA,IACL,KAAA,EAAO,CAAA;AAAA,IACP,GAAA;AAAA,IACA,OAAA;AAAA,IACA,IAAA,EAAM,IAAA;AAAA,IACN,YAAA;AAAA,IACA,aAAA,EAAe,IAAA;AAAA,IACf,KAAA,EAAO,IAAA;AAAA,IACP,OAAA,EAAS,IAAA;AAAA,IACT,MAAA,EAAQ,IAAA;AAAA,IACR,SAAA,EAAW,IAAA;AAAA,IACX,SAAA,EAAW,IAAA;AAAA,IACX,SAAA,EAAW,IAAA;AAAA,IAEX,KAAA,EAAO,OAAA;AAAA,IACP,UAAA,EAAY,OAAA;AAAA,IAEZ,YAAA,EAAc,OAAA;AAAA,IACd,KAAA,EAAO,OAAA;AAAA,IAEP,aAAA,EAAe;AAAA,GACjB;AACF,CAAA,EA3B2B,aAAA,CAAA;AA6BpB,IAAM,mBAAA,2BAAuB,YAAA,KAA0B;AAC5D,EAAA,MAAM,IAAA,GAAO,WAAA,CAAY,QAAA,EAAU,IAAI,CAAA;AACvC,EAAA,IAAA,CAAK,SAAA,GAAY,YAAA;AACjB,EAAA,OAAO;AAAA,IACL,YAAA;AAAA,IACA,IAAA;AAAA,IACA,YAAA,EAAc,OAAA;AAAA,IACd,QAAA,EAAU;AAAA,GACZ;AACF,CAAA,EATmC,qBAAA,CAAA;AAW5B,IAAM,oBAAA,mBAAuB,MAAA,CAAA,CAAC,OAAA,EAAgB,YAAA,KAAsB;AACzE,EAAA,IAAI,MAAM,OAAA,CAAQ,SAAA;AAElB,EAAA,IAAI,CAAC,GAAA,EAAK;AACR,IAAA,GAAA,GAAM,WAAA,CAAY,OAAA,CAAQ,OAAA,EAAS,YAAA,EAAc,QAAQ,GAAG,CAAA;AAC5D,IAAA,GAAA,CAAI,OAAO,OAAA,CAAQ,IAAA;AACnB,IAAA,GAAA,CAAI,YAAY,OAAA,CAAQ,SAAA;AAExB,IAAA,GAAA,CAAI,SAAA,GAAY,OAAA;AAChB,IAAA,OAAA,CAAQ,SAAA,GAAY,GAAA;AAAA,EACtB,CAAA,MAAO;AACL,IAAA,GAAA,CAAI,YAAA,GAAe,YAAA;AACnB,IAAA,GAAA,CAAI,SAAA,GAAY,IAAA;AAAA,EAClB;AAEA,EAAA,GAAA,CAAI,gBAAgB,OAAA,CAAQ,aAAA;AAC5B,EAAA,GAAA,CAAI,gBAAgB,OAAA,CAAQ,aAAA;AAC5B,EAAA,GAAA,CAAI,SAAS,OAAA,CAAQ,MAAA;AACrB,EAAA,GAAA,CAAI,QAAQ,OAAA,CAAQ,KAAA;AACpB,EAAA,GAAA,CAAI,UAAU,OAAA,CAAQ,OAAA;AACtB,EAAA,GAAA,CAAI,KAAA,GAAQ,OAAA;AACZ,EAAA,GAAA,CAAI,YAAA,GAAe,OAAA;AACnB,EAAA,GAAA,CAAI,QAAQ,OAAA,CAAQ,KAAA;AACpB,EAAA,GAAA,CAAI,aAAa,OAAA,CAAQ,UAAA;AACzB,EAAA,OAAO,GAAA;AACT,CAAA,EAzBoC,sBAAA,CAAA;AA2B7B,IAAM,6BAAA,2BACX,OAAA,KACU;AACV,EAAA,MAAM,GAAA,GAAM,sBAAA,CAAuB,OAAO,CAAA,IAAK,aAAA;AAC/C,EAAA,OAAO,WAAA,CAAY,GAAA,EAAK,OAAA,CAAQ,KAAA,EAAO,QAAQ,GAAG,CAAA;AACpD,CAAA,EAL6C,+BAAA,CAAA;;;ACnE7C,IAAM,QAAA,GAAqB;AAAA,EACzB,SAAA,EAAW;AACb,CAAA;AAEO,IAAM,qBAAA,2BAAyB,SAAA,KAAsC;AAC1E,EAAA,QAAA,CAAS,SAAA,GAAY,SAAA;AACvB,CAAA,EAFqC,uBAAA,CAAA;AAI9B,IAAM,wCAAwB,MAAA,CAAA,MAAwB;AAC3D,EAAA,OAAO,QAAA,CAAS,SAAA;AAClB,CAAA,EAFqC,uBAAA,CAAA;;;ACJrC,IAAMC,SAAAA,GAAqB;AAAA,EACzB,cAAA,EAAgB,IAAA;AAAA,EAChB,SAAA,EAAW,CAAA;AAAA,EACX,gBAAA,EAAkB;AACpB,CAAA;AAEO,IAAM,iBAAA,mBAAoB,MAAA,CAAA,MAAoBA,SAAAA,CAAS,cAAA,EAA7B,mBAAA,CAAA;AAE1B,IAAM,iBAAA,2BAAqB,KAAA,KAA8B;AAC9D,EAAAA,UAAS,cAAA,GAAiB,KAAA;AAC5B,CAAA,EAFiC,mBAAA,CAAA;AAI1B,IAAM,YAAA,mBAAe,MAAA,CAAA,MAAcA,SAAAA,CAAS,SAAA,EAAvB,cAAA,CAAA;AAErB,IAAM,YAAA,2BAAgB,KAAA,KAAwB;AACnD,EAAAA,UAAS,SAAA,GAAY,KAAA;AACvB,CAAA,EAF4B,cAAA,CAAA;AAIrB,IAAM,gCAAgB,MAAA,CAAA,MAAY;AACvC,EAAAA,UAAS,SAAA,IAAa,CAAA;AACxB,CAAA,EAF6B,eAAA,CAAA;AAItB,IAAM,mBAAA,2BAAuB,EAAA,KAA+B;AACjE,EAAAA,UAAS,gBAAA,GAAmB,EAAA;AAC9B,CAAA,EAFmC,qBAAA,CAAA;AAI5B,IAAM,gBAAA,2BAAoB,KAAA,KAAuB;AACtD,EAAAA,SAAAA,CAAS,mBAAmB,KAAK,CAAA;AACnC,CAAA,EAFgC,kBAAA,CAAA;AAczB,IAAM,WAAA,mBAAc,MAAA,CAAA,CACzB,KAAA,EACA,SAAA,KACiD;AACjD,EAAA,IAAI,OAAoB,KAAA,CAAM,aAAA;AAC9B,EAAA,IAAI,QAAA,GAAwB,IAAA;AAE5B,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,SAAA,EAAW,CAAA,EAAA,EAAK;AAClC,IAAA,QAAA,GAAW,IAAA;AACX,IAAA,IAAA,GAAO,MAAM,IAAA,IAAQ,IAAA;AAAA,EACvB;AAEA,EAAA,OAAO,EAAE,MAAM,QAAA,EAAS;AAC1B,CAAA,EAb2B,aAAA,CAAA;AAmBpB,IAAM,UAAA,mBAAa,MAAA,CAAA,CAAC,KAAA,EAAc,OAAA,EAAe,QAAA,KAAgC;AACtF,EAAA,IAAI,QAAA,WAAmB,IAAA,GAAO,OAAA;AAAA,aACnB,aAAA,GAAgB,OAAA;AAC7B,CAAA,EAH0B,YAAA,CAAA;;;AClE1B,IAAM,iBAAA,2BAAqB,GAAA,KAAe;AACxC,EAAA,iBAAA,CAAkB,GAAG,CAAA;AACrB,EAAA,YAAA,CAAa,CAAC,CAAA;AAChB,CAAA,EAH0B,mBAAA,CAAA;AAK1B,IAAM,mCAAmB,MAAA,CAAA,MAAM;AAC7B,EAAA,iBAAA,CAAkB,IAAI,CAAA;AACxB,CAAA,EAFyB,kBAAA,CAAA;AAIzB,IAAM,SAAA,mBAAY,MAAA,CAAA,CAAC,GAAA,EAAY,SAAA,KAAkB;AAC/C,EAAA,MAAM,YAAA,2BAAgB,KAAA,KAAe;AACnC,IAAA,iBAAA,CAAkB,GAAG,CAAA;AACrB,IAAA,MAAM,MAAA,GAAS,UAAU,KAAK,CAAA;AAC9B,IAAA,gBAAA,EAAiB;AACjB,IAAA,OAAO,MAAA;AAAA,EACT,CAAA,EALqB,cAAA,CAAA;AAOrB,EAAA,OAAO,YAAA;AACT,CAAA,EATkB,WAAA,CAAA;ACDlB,IAAM,eAAA,2BAAsB,YAAA,KAC1BD,UAAAA,CAAW,YAAY,CAAA,GAAI,YAAA,KAAiB,YAAA,EADtB,iBAAA,CAAA;AAGxB,IAAM,QAAA,mBAAW,MAAA,CAAA,CAAI,MAAA,EAAyB,SAAA,KAC5CA,UAAAA,CAAW,MAAM,CAAA,GAAI,MAAA,CAAO,SAAS,CAAA,GAAI,MAAA,EAD1B,UAAA,CAAA;AAMjB,SAAS,SACP,YAAA,EACiD;AACjD,EAAA,MAAM,QAAQ,iBAAA,EAAkB;AAChC,EAAA,IAAI,CAAC,KAAA,EAAO;AACV,IAAA,MAAM,IAAI,MAAM,oDAAoD,CAAA;AAAA,EACtE;AACA,EAAA,MAAM,YAAY,YAAA,EAAa;AAC/B,EAAA,aAAA,EAAc;AAEd,EAAA,IAAI,QAAoC,KAAA,CAAM,aAAA;AAC9C,EAAA,IAAI,QAAA,GAAuC,IAAA;AAE3C,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,SAAA,EAAW,CAAA,EAAA,EAAK;AAClC,IAAA,QAAA,GAAW,KAAA;AACX,IAAA,KAAA,GAAQ,OAAO,IAAA,IAAQ,IAAA;AAAA,EACzB;AAEA,EAAA,IAAI,CAAC,KAAA,EAAO;AACV,IAAA,KAAA,GAAQ;AAAA,MACN,aAAA,EAAe,gBAAgB,YAAY,CAAA;AAAA,MAC3C,KAAA,EAAO,IAAA;AAAA,MACP,IAAA,EAAM;AAAA,KACR;AACA,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,QAAA,CAAS,IAAA,GAAO,KAAA;AAAA,IAClB,CAAA,MAAO;AACL,MAAA,KAAA,CAAM,aAAA,GAAgB,KAAA;AAAA,IACxB;AAAA,EACF;AAEA,EAAA,IAAI,SAAS,KAAA,CAAM,KAAA;AACnB,EAAA,OAAO,MAAA,EAAQ;AACb,IAAA,KAAA,CAAM,aAAA,GAAgB,QAAA,CAAS,MAAA,CAAO,MAAA,EAAQ,MAAM,aAAa,CAAA;AACjE,IAAA,MAAA,GAAS,MAAA,CAAO,IAAA;AAAA,EAClB;AACA,EAAA,KAAA,CAAM,KAAA,GAAQ,IAAA;AAEd,EAAA,MAAM,UAAA,2BAAc,OAAA,KAAyC;AAC3D,IAAA,MAAME,OAAAA,GAAS,EAAE,MAAA,EAAQ,OAAA,EAAS,MAAM,IAAA,EAAK;AAE7C,IAAA,IAAI,CAAC,MAAM,KAAA,EAAO;AAChB,MAAA,KAAA,CAAM,KAAA,GAAQA,OAAAA;AAAA,IAChB,CAAA,MAAO;AACL,MAAA,IAAI,OAAO,KAAA,CAAM,KAAA;AACjB,MAAA,OAAO,KAAK,IAAA,EAAM;AAChB,QAAA,IAAA,GAAO,IAAA,CAAK,IAAA;AAAA,MACd;AACA,MAAA,IAAA,CAAK,IAAA,GAAOA,OAAAA;AAAA,IACd;AACA,IAAA,gBAAA,CAAiB,KAAK,CAAA;AAAA,EACxB,CAAA,EAbmB,YAAA,CAAA;AAenB,EAAA,OAAO,CAAC,KAAA,CAAM,aAAA,EAAe,UAAU,CAAA;AACzC;AAtDS,MAAA,CAAA,QAAA,EAAA,UAAA,CAAA;AAwDT,IAAO,2BAAA,GAAQ;;;ACxER,IAAM,WAAA,mBAAc,MAAA,CAAA,CACzB,IAAA,EACA,IAAA,KACY;AACZ,EAAA,IAAI,CAAC,IAAA,IAAQ,CAAC,IAAA,EAAM,OAAO,IAAA;AAC3B,EAAA,IAAI,IAAA,CAAK,MAAA,KAAW,IAAA,CAAK,MAAA,EAAQ,OAAO,IAAA;AACxC,EAAA,OAAO,IAAA,CAAK,IAAA,CAAK,CAAC,GAAA,EAAK,CAAA,KAAM,CAAC,MAAA,CAAO,EAAA,CAAG,GAAA,EAAK,IAAA,CAAK,CAAC,CAAC,CAAC,CAAA;AACvD,CAAA,EAP2B,aAAA,CAAA;;;ACQ3B,IAAM,iBAAgC,EAAC;AAGvC,IAAM,kBAAiC,EAAC;AAExC,SAAS,SAAA,CACP,QACA,IAAA,EACM;AACN,EAAA,MAAM,QAAQ,iBAAA,EAAkB;AAChC,EAAA,IAAI,CAAC,KAAA,EAAO;AACV,IAAA,MAAM,IAAI,MAAM,qDAAqD,CAAA;AAAA,EACvE;AAEA,EAAA,MAAM,YAAY,YAAA,EAAa;AAC/B,EAAA,aAAA,EAAc;AAEd,EAAA,MAAM,EAAE,IAAA,EAAM,QAAA,EAAS,GAAI,WAAA,CAAY,OAAO,SAAS,CAAA;AAEvD,EAAA,IAAI,CAAC,IAAA,EAAM;AAET,IAAA,MAAM,WAAA,GAA2B,EAAE,MAAA,EAAQ,IAAA,EAAM,SAAS,MAAA,EAAU;AACpE,IAAA,MAAM,UAAgB,EAAE,aAAA,EAAe,aAAa,KAAA,EAAO,IAAA,EAAM,MAAM,IAAA,EAAK;AAC5E,IAAA,UAAA,CAAW,KAAA,EAAO,SAAS,QAAQ,CAAA;AACnC,IAAA,cAAA,CAAe,KAAK,WAAW,CAAA;AAAA,EACjC,CAAA,MAAO;AAEL,IAAA,MAAM,OAAO,IAAA,CAAK,aAAA;AAClB,IAAA,IAAI,WAAA,CAAY,IAAA,CAAK,IAAA,EAAM,IAAI,CAAA,EAAG;AAChC,MAAA,eAAA,CAAgB,KAAK,IAAI,CAAA;AACzB,MAAA,MAAM,WAAA,GAA2B,EAAE,MAAA,EAAQ,IAAA,EAAM,SAAS,MAAA,EAAU;AACpE,MAAA,IAAA,CAAK,aAAA,GAAgB,WAAA;AACrB,MAAA,cAAA,CAAe,KAAK,WAAW,CAAA;AAAA,IACjC;AAAA,EACF;AACF;AA9BS,MAAA,CAAA,SAAA,EAAA,WAAA,CAAA;AAoCF,IAAM,sCAAsB,MAAA,CAAA,MAAY;AAC7C,EAAA,KAAA,MAAW,MAAA,IAAU,eAAA,CAAgB,MAAA,CAAO,CAAC,CAAA,EAAG;AAC9C,IAAA,MAAA,CAAO,OAAA,IAAU;AAAA,EACnB;AACF,CAAA,EAJmC,qBAAA,CAAA;AAO5B,IAAM,+BAAe,MAAA,CAAA,MAAY;AACtC,EAAA,KAAA,MAAW,MAAA,IAAU,cAAA,CAAe,MAAA,CAAO,CAAC,CAAA,EAAG;AAC7C,IAAA,MAAM,OAAA,GAAU,OAAO,MAAA,EAAO;AAC9B,IAAA,IAAI,OAAO,YAAY,UAAA,EAAY;AACjC,MAAA,MAAA,CAAO,OAAA,GAAU,OAAA;AAAA,IACnB;AAAA,EACF;AACF,CAAA,EAP4B,cAAA,CAAA;AAarB,IAAM,iBAAA,2BAAqB,KAAA,KAAuB;AACvD,EAAA,IAAI,OAAO,KAAA,CAAM,aAAA;AACjB,EAAA,OAAO,IAAA,EAAM;AACX,IAAA,MAAM,QAAQ,IAAA,CAAK,aAAA;AACnB,IAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,OAAQ,KAAA,CAAsB,WAAW,UAAA,EAAY;AACzE,MAAC,MAAsB,OAAA,IAAU;AAAA,IACnC;AACA,IAAA,IAAA,GAAO,IAAA,CAAK,IAAA;AAAA,EACd;AACF,CAAA,EATiC,mBAAA,CAAA;AAWjC,IAAO,4BAAA,GAAQ;;;ACxEf,IAAM,uBAAsC,EAAC;AAG7C,IAAM,wBAAuC,EAAC;AAgB9C,SAAS,eAAA,CACP,QACA,IAAA,EACM;AACN,EAAA,MAAM,QAAQ,iBAAA,EAAkB;AAChC,EAAA,IAAI,CAAC,KAAA,EAAO;AACV,IAAA,MAAM,IAAI,MAAM,2DAA2D,CAAA;AAAA,EAC7E;AAEA,EAAA,MAAM,YAAY,YAAA,EAAa;AAC/B,EAAA,aAAA,EAAc;AAEd,EAAA,MAAM,EAAE,IAAA,EAAM,QAAA,EAAS,GAAI,WAAA,CAAY,OAAO,SAAS,CAAA;AAEvD,EAAA,IAAI,CAAC,IAAA,EAAM;AAET,IAAA,MAAM,WAAA,GAA2B,EAAE,MAAA,EAAQ,IAAA,EAAM,SAAS,MAAA,EAAU;AACpE,IAAA,MAAM,UAAgB,EAAE,aAAA,EAAe,aAAa,KAAA,EAAO,IAAA,EAAM,MAAM,IAAA,EAAK;AAC5E,IAAA,UAAA,CAAW,KAAA,EAAO,SAAS,QAAQ,CAAA;AACnC,IAAA,oBAAA,CAAqB,KAAK,WAAW,CAAA;AAAA,EACvC,CAAA,MAAO;AAEL,IAAA,MAAM,OAAO,IAAA,CAAK,aAAA;AAClB,IAAA,IAAI,WAAA,CAAY,IAAA,CAAK,IAAA,EAAM,IAAI,CAAA,EAAG;AAChC,MAAA,qBAAA,CAAsB,KAAK,IAAI,CAAA;AAC/B,MAAA,MAAM,WAAA,GAA2B,EAAE,MAAA,EAAQ,IAAA,EAAM,SAAS,MAAA,EAAU;AACpE,MAAA,IAAA,CAAK,aAAA,GAAgB,WAAA;AACrB,MAAA,oBAAA,CAAqB,KAAK,WAAW,CAAA;AAAA,IACvC;AAAA,EACF;AACF;AA9BS,MAAA,CAAA,eAAA,EAAA,iBAAA,CAAA;AAoCF,IAAM,4CAA4B,MAAA,CAAA,MAAY;AACnD,EAAA,KAAA,MAAW,MAAA,IAAU,qBAAA,CAAsB,MAAA,CAAO,CAAC,CAAA,EAAG;AACpD,IAAA,MAAA,CAAO,OAAA,IAAU;AAAA,EACnB;AACF,CAAA,EAJyC,2BAAA,CAAA;AAUlC,IAAM,qCAAqB,MAAA,CAAA,MAAY;AAC5C,EAAA,KAAA,MAAW,MAAA,IAAU,oBAAA,CAAqB,MAAA,CAAO,CAAC,CAAA,EAAG;AACnD,IAAA,MAAM,OAAA,GAAU,OAAO,MAAA,EAAO;AAC9B,IAAA,IAAI,OAAO,YAAY,UAAA,EAAY;AACjC,MAAA,MAAA,CAAO,OAAA,GAAU,OAAA;AAAA,IACnB;AAAA,EACF;AACF,CAAA,EAPkC,oBAAA,CAAA;AAwBlC,IAAO,kCAAA,GAAQ;;;ACjFf,SAAS,OAAU,YAAA,EAA4C;AAC7D,EAAA,MAAM,QAAQ,iBAAA,EAAkB;AAChC,EAAA,IAAI,CAAC,KAAA,EAAO;AACV,IAAA,MAAM,IAAI,MAAM,kDAAkD,CAAA;AAAA,EACpE;AAEA,EAAA,MAAM,YAAY,YAAA,EAAa;AAC/B,EAAA,aAAA,EAAc;AAGd,EAAA,IAAI,OAAO,KAAA,CAAM,aAAA;AACjB,EAAA,IAAI,QAAA,GAAW,IAAA;AACf,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,SAAA,EAAW,CAAA,EAAA,EAAK;AAClC,IAAA,QAAA,GAAW,IAAA;AACX,IAAA,IAAA,GAAO,MAAM,IAAA,IAAQ,IAAA;AAAA,EACvB;AAEA,EAAA,IAAI,CAAC,IAAA,EAAM;AAET,IAAA,MAAM,GAAA,GAAgC,EAAE,OAAA,EAAS,YAAA,EAAa;AAC9D,IAAA,MAAM,UAAU,EAAE,aAAA,EAAe,KAAK,KAAA,EAAO,IAAA,EAAM,MAAM,IAAA,EAAK;AAE9D,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,QAAA,CAAS,IAAA,GAAO,OAAA;AAAA,IAClB,CAAA,MAAO;AACL,MAAA,KAAA,CAAM,aAAA,GAAgB,OAAA;AAAA,IACxB;AAEA,IAAA,OAAO,GAAA;AAAA,EACT;AAIA,EAAA,OAAO,IAAA,CAAK,aAAA;AACd;AAlCS,MAAA,CAAA,MAAA,EAAA,QAAA,CAAA;AAoCT,IAAO,yBAAA,GAAQ;;;ACpCf,SAAS,OAAA,CAAW,SAAkB,IAAA,EAAgB;AACpD,EAAA,MAAM,QAAQ,iBAAA,EAAkB;AAChC,EAAA,IAAI,CAAC,KAAA,EAAO;AACV,IAAA,MAAM,IAAI,MAAM,mDAAmD,CAAA;AAAA,EACrE;AAEA,EAAA,MAAM,YAAY,YAAA,EAAa;AAC/B,EAAA,aAAA,EAAc;AAEd,EAAA,IAAI,OAAO,KAAA,CAAM,aAAA;AACjB,EAAA,IAAI,QAAA,GAAW,IAAA;AACf,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,SAAA,EAAW,CAAA,EAAA,EAAK;AAClC,IAAA,QAAA,GAAW,IAAA;AACX,IAAA,IAAA,GAAO,MAAM,IAAA,IAAQ,IAAA;AAAA,EACvB;AAEA,EAAA,IAAI,CAAC,IAAA,EAAM;AAET,IAAA,MAAM,KAAA,GAAsB,EAAE,KAAA,EAAO,OAAA,IAAW,IAAA,EAAK;AACrD,IAAA,MAAM,UAAU,EAAE,aAAA,EAAe,OAAO,KAAA,EAAO,IAAA,EAAM,MAAM,IAAA,EAAK;AAEhE,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,QAAA,CAAS,IAAA,GAAO,OAAA;AAAA,IAClB,CAAA,MAAO;AACL,MAAA,KAAA,CAAM,aAAA,GAAgB,OAAA;AAAA,IACxB;AAEA,IAAA,OAAO,KAAA,CAAM,KAAA;AAAA,EACf;AAGA,EAAA,MAAM,OAAO,IAAA,CAAK,aAAA;AAClB,EAAA,IAAI,WAAA,CAAY,IAAA,CAAK,IAAA,EAAM,IAAI,CAAA,EAAG;AAChC,IAAA,MAAM,KAAA,GAAsB,EAAE,KAAA,EAAO,OAAA,IAAW,IAAA,EAAK;AACrD,IAAA,IAAA,CAAK,aAAA,GAAgB,KAAA;AACrB,IAAA,OAAO,KAAA,CAAM,KAAA;AAAA,EACf;AAEA,EAAA,OAAO,IAAA,CAAK,KAAA;AACd;AAvCS,MAAA,CAAA,OAAA,EAAA,SAAA,CAAA;AAyCT,IAAO,0BAAA,GAAQ;;;AChDf,SAAS,WAAA,CACP,UACA,IAAA,EACG;AACH,EAAA,OAAO,0BAAA,CAAQ,MAAM,QAAA,EAAU,IAAI,CAAA;AACrC;AALS,MAAA,CAAA,WAAA,EAAA,aAAA,CAAA;AAOT,IAAO,8BAAA,GAAQ;;;ACQf,IAAI,gBAAA,GAA0C,IAAA;AAGvC,IAAM,iBAAA,2BAAqB,EAAA,KAA6B;AAC7D,EAAA,gBAAA,GAAmB,EAAA;AACrB,CAAA,EAFiC,mBAAA,CAAA;AAYjC,IAAM,kBAAA,uBAAyB,OAAA,EAAyC;AAmBjE,SAAS,cAAiB,YAAA,EAAoC;AAGnE,EAAA,SAAS,WAAW,MAAA,EAA4C;AAC9D,IAAA,OAAO,IAAA;AAAA,EACT;AAFS,EAAA,MAAA,CAAA,UAAA,EAAA,YAAA,CAAA;AAIT,EAAA,MAAM,OAAA,GAAU,UAAA;AAChB,EAAA,OAAA,CAAQ,QAAA,GAAW,OAAA;AACnB,EAAA,OAAA,CAAQ,aAAA,GAAgB,YAAA;AACxB,EAAA,OAAA,CAAQ,YAAA,uBAAmB,GAAA,EAAI;AAC/B,EAAA,OAAA,CAAQ,QAAA,GAAW,OAAA;AAEnB,EAAA,OAAO,OAAA;AACT;AAdgB,MAAA,CAAA,aAAA,EAAA,eAAA,CAAA;AA+BT,SAAS,WAAc,OAAA,EAA+B;AAC3D,EAAA,MAAM,QAAQ,iBAAA,EAAkB;AAChC,EAAA,IAAI,CAAC,KAAA,EAAO;AACV,IAAA,MAAM,IAAI,MAAM,sDAAsD,CAAA;AAAA,EACxE;AAGA,EAAA,IAAI,WAAW,KAAA,CAAM,MAAA;AACrB,EAAA,OAAO,QAAA,EAAU;AACf,IAAA,IAAK,QAAA,CAAS,IAAA,EAAc,QAAA,KAAa,OAAA,EAAS;AAGhD,MAAA,IAAI,MAAM,SAAA,EAAW;AACnB,QAAA,OAAA,CAAQ,YAAA,CAAa,MAAA,CAAO,KAAA,CAAM,SAAS,CAAA;AAC3C,QAAA,MAAM,MAAA,GAAS,kBAAA,CAAmB,GAAA,CAAI,KAAA,CAAM,SAAS,CAAA;AACrD,QAAA,IAAI,MAAA,EAAQ;AACV,UAAA,MAAA,CAAO,OAAO,OAAO,CAAA;AACrB,UAAA,IAAI,OAAO,IAAA,KAAS,CAAA,EAAG,kBAAA,CAAmB,MAAA,CAAO,MAAM,SAAS,CAAA;AAAA,QAClE;AAAA,MACF;AAEA,MAAA,OAAA,CAAQ,YAAA,CAAa,IAAI,KAAK,CAAA;AAC9B,MAAA,IAAI,MAAA,GAAS,kBAAA,CAAmB,GAAA,CAAI,KAAK,CAAA;AACzC,MAAA,IAAI,CAAC,MAAA,EAAQ;AACX,QAAA,MAAA,uBAAa,GAAA,EAAI;AACjB,QAAA,kBAAA,CAAmB,GAAA,CAAI,OAAO,MAAM,CAAA;AAAA,MACtC;AACA,MAAA,MAAA,CAAO,IAAI,OAAO,CAAA;AAMlB,MAAA,OAAO,SAAS,YAAA,CAAa,KAAA;AAAA,IAC/B;AACA,IAAA,QAAA,GAAW,QAAA,CAAS,MAAA;AAAA,EACtB;AAGA,EAAA,OAAO,OAAA,CAAQ,aAAA;AACjB;AAxCgB,MAAA,CAAA,UAAA,EAAA,YAAA,CAAA;AAoDT,SAAS,uBAA0B,OAAA,EAAkC;AAC1E,EAAA,IAAI,CAAC,gBAAA,EAAkB;AACvB,EAAA,KAAA,MAAW,UAAA,IAAc,QAAQ,YAAA,EAAc;AAC7C,IAAA,gBAAA,CAAiB,UAAU,CAAA;AAAA,EAC7B;AACF;AALgB,MAAA,CAAA,sBAAA,EAAA,wBAAA,CAAA;AAWT,SAAS,0BAA0B,KAAA,EAAoB;AAC5D,EAAA,MAAM,MAAA,GAAS,kBAAA,CAAmB,GAAA,CAAI,KAAK,CAAA;AAC3C,EAAA,IAAI,CAAC,MAAA,EAAQ;AAEb,EAAA,KAAA,MAAW,WAAW,MAAA,EAAQ;AAC5B,IAAA,OAAA,CAAQ,YAAA,CAAa,OAAO,KAAK,CAAA;AAAA,EACnC;AAEA,EAAA,kBAAA,CAAmB,OAAO,KAAK,CAAA;AACjC;AATgB,MAAA,CAAA,yBAAA,EAAA,2BAAA,CAAA;;;ACtJhB,IAAI,oBAAA,GAA6B,WAAA;AAE1B,IAAM,uBAAA,2BAA2B,IAAA,KAAqB;AAC3D,EAAA,oBAAA,GAAuB,IAAA;AACzB,CAAA,EAFuC,yBAAA,CAAA;AAIhC,IAAM,4CAA4B,MAAA,CAAA,MAAY;AACnD,EAAA,oBAAA,GAAuB,WAAA;AACzB,CAAA,EAFyC,2BAAA,CAAA;AASlC,IAAM,iBAAA,gCAAgC,oBAAA,EAAZ,mBAAA,CAAA;AAMjC,IAAI,qBAAA,GAA+B,QAAA;AAE5B,IAAM,wBAAA,2BAA4B,KAAA,KAAuB;AAC9D,EAAA,qBAAA,GAAwB,KAAA;AAC1B,CAAA,EAFwC,0BAAA,CAAA;AAIjC,IAAM,sBAAA,gCAAsC,qBAAA,EAAb,wBAAA,CAAA;;;AChBtC,IAAM,eAAA,GAAkB,CAAA;AAExB,IAAI,UAAA,GAAa,CAAA;AAMV,IAAM,8BAAc,MAAA,CAAA,MACzB,WAAA,CAAY,GAAA,EAAI,GAAI,aAAa,eAAA,EADR,aAAA,CAAA;AAS3B,IAAI,MAAA,GAA8B,IAAA;AAG3B,IAAM,eAAA,2BAAmB,EAAA,KAA2B;AACzD,EAAA,MAAA,GAAS,EAAA;AACX,CAAA,EAF+B,iBAAA,CAAA;AAa/B,IAAI,YAAA,GAA6B,IAAA;AAE1B,IAAM,eAAA,2BAAmB,KAAA,KAA8B;AAC5D,EAAA,YAAA,GAAe,KAAA;AACjB,CAAA,EAF+B,iBAAA,CAAA;AAIxB,IAAM,eAAA,gCAAsC,YAAA,EAApB,iBAAA,CAAA;AAExB,IAAM,oCAAoB,MAAA,CAAA,MAAY;AAC3C,EAAA,YAAA,GAAe,IAAA;AACjB,CAAA,EAFiC,mBAAA,CAAA;AASjC,IAAI,YAAA,GAAsB,OAAA;AAOnB,IAAM,kBAAA,2BAAsB,IAAA,KAAqB;AACtD,EAAA,YAAA,IAAgB,IAAA;AAEhB,EAAA,IAAI,IAAA,IAAQ,WAAW,SAAA,CAAA,EAAY;AAEjC,IAAA,iBAAA,EAAkB;AAAA,EACpB,CAAA,MAAA,IAAW,OAAO,WAAA,EAAa;AAE7B,IAAA,mBAAA,EAAoB;AAAA,EACtB,CAAA,MAAA,IAAW,OAAO,cAAA,EAAgB;AAEhC,IAAA,eAAA,EAAgB;AAAA,EAClB,CAAA,MAAA,IAAW,OAAO,QAAA,EAAU;AAE1B,IAAA,YAAA,EAAa;AAAA,EACf;AACF,CAAA,EAhBkC,oBAAA,CAAA;AAsBlC,IAAM,KAAA,2BAAS,IAAA,KAAsB;AACnC,EAAA,MAAM,QAAQ,YAAA,GAAe,IAAA;AAC7B,EAAA,IAAI,CAAC,KAAA,EAAO;AACZ,EAAA,YAAA,IAAgB,CAAC,KAAA;AACjB,EAAA,UAAA,GAAa,YAAY,GAAA,EAAI;AAC7B,EAAA,MAAA,GAAS,KAAK,CAAA;AAChB,CAAA,EANc,OAAA,CAAA;AAYd,IAAM,iBAAiB,QAAA,GAAW,SAAA;AAClC,IAAI,kBAAA,GAAqB,KAAA;AAEzB,IAAM,oCAAoB,MAAA,CAAA,MAAY;AACpC,EAAA,IAAI,kBAAA,EAAoB;AACxB,EAAA,kBAAA,GAAqB,IAAA;AACrB,EAAA,cAAA,CAAe,MAAM;AACnB,IAAA,kBAAA,GAAqB,KAAA;AACrB,IAAA,KAAA,CAAM,cAAc,CAAA;AAAA,EACtB,CAAC,CAAA;AACH,CAAA,EAP0B,mBAAA,CAAA;AAa1B,IAAM,YAAA,GAAe,WAAA;AACrB,IAAM,EAAA,GAAK,IAAI,cAAA,EAAe;AAC9B,IAAI,WAAA,GAAc,KAAA;AAElB,EAAA,CAAG,KAAA,CAAM,YAAY,MAAM;AACzB,EAAA,WAAA,GAAc,KAAA;AACd,EAAA,KAAA,CAAM,YAAY,CAAA;AACpB,CAAA;AAEA,IAAM,sCAAsB,MAAA,CAAA,MAAY;AACtC,EAAA,IAAI,WAAA,EAAa;AACjB,EAAA,WAAA,GAAc,IAAA;AACd,EAAA,EAAA,CAAG,KAAA,CAAM,YAAY,IAAI,CAAA;AAC3B,CAAA,EAJ4B,qBAAA,CAAA;AAU5B,IAAM,eAAA,GAAkB,cAAA;AACxB,IAAI,aAAA,GAAsD,IAAA;AAE1D,IAAM,kCAAkB,MAAA,CAAA,MAAY;AAClC,EAAA,IAAI,kBAAkB,IAAA,EAAM;AAC5B,EAAA,aAAA,GAAgB,WAAW,MAAM;AAC/B,IAAA,aAAA,GAAgB,IAAA;AAChB,IAAA,KAAA,CAAM,eAAe,CAAA;AAAA,EACvB,GAAG,CAAC,CAAA;AACN,CAAA,EANwB,iBAAA,CAAA;AAYxB,IAAM,SAAA,GAAY,QAAA;AAClB,IAAI,UAAA,GAA4B,IAAA;AAEhC,IAAM,+BAAe,MAAA,CAAA,MAAY;AAC/B,EAAA,IAAI,eAAe,IAAA,EAAM;AAEzB,EAAA,MAAM,sBAAM,MAAA,CAAA,MAAM;AAChB,IAAA,UAAA,GAAa,IAAA;AACb,IAAA,KAAA,CAAM,SAAS,CAAA;AAAA,EACjB,CAAA,EAHY,KAAA,CAAA;AAKZ,EAAA,IAAI,OAAO,wBAAwB,WAAA,EAAa;AAC9C,IAAA,UAAA,GAAa,mBAAA,CAAoB,GAAA,EAAK,EAAE,OAAA,EAAS,KAAK,CAAA;AAAA,EACxD,CAAA,MAAO;AACL,IAAA,UAAA,GAAa,UAAA,CAAW,KAAK,GAAG,CAAA;AAAA,EAClC;AACF,CAAA,EAbqB,cAAA,CAAA;;;ACxGrB,IAAM,iBAAA,mBAAoB,MAAA,CAAA,CAAC,OAAA,EAAgB,GAAA,KAAe;AACxD,EAAA,MAAM,SAAS,GAAA,CAAI,MAAA;AACnB,EAAA,IAAI,CAAC,MAAA,EAAQ;AAEb,EAAA,IAAI,MAAA,CAAO,UAAU,OAAA,EAAS;AAC5B,IAAA,MAAA,CAAO,KAAA,GAAQ,GAAA;AACf,IAAA;AAAA,EACF;AAEA,EAAA,IAAI,cAAc,MAAA,CAAO,KAAA;AACzB,EAAA,OAAO,WAAA,IAAe,WAAA,CAAY,OAAA,KAAY,OAAA,EAAS;AACrD,IAAA,WAAA,GAAc,WAAA,CAAY,OAAA;AAAA,EAC5B;AACA,EAAA,IAAI,WAAA,cAAyB,OAAA,GAAU,GAAA;AACzC,CAAA,EAd0B,mBAAA,CAAA;AAgBnB,IAAM,QAAA,2BAAY,OAAA,KAAmB;AAC1C,EAAA,IAAI,cAAA,GAA+B,OAAA;AAEnC,EAAA,OAAO,cAAA,EAAgB;AACrB,IAAA,MAAM,IAAA,GAAO,UAAU,cAAc,CAAA;AAErC,IAAA,IAAI,IAAA,EAAM;AACR,MAAA,cAAA,GAAiB,IAAA;AAAA,IACnB,CAAA,MAAO;AACL,MAAA,cAAA,GAAiB,kBAAA,CAAmB,gBAAgB,OAAO,CAAA;AAAA,IAC7D;AAAA,EACF;AACF,CAAA,EAZwB,UAAA,CAAA;AAmBjB,IAAM,kBAAA,2BAAsB,OAAA,KAA4B;AAG7D,EAAA,IAAI,cAAA,GAA+B,iBAAgB,IAAK,OAAA;AACxD,EAAA,iBAAA,EAAkB;AAElB,EAAA,OAAO,cAAA,IAAkB,CAAC,WAAA,EAAY,EAAG;AACvC,IAAA,MAAM,IAAA,GAAO,UAAU,cAAc,CAAA;AAErC,IAAA,IAAI,IAAA,EAAM;AACR,MAAA,cAAA,GAAiB,IAAA;AAAA,IACnB,CAAA,MAAO;AACL,MAAA,cAAA,GAAiB,kBAAA,CAAmB,gBAAgB,OAAO,CAAA;AAAA,IAC7D;AAAA,EACF;AAEA,EAAA,IAAI,mBAAmB,IAAA,EAAM;AAE3B,IAAA,eAAA,CAAgB,cAAc,CAAA;AAC9B,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,OAAO,IAAA;AACT,CAAA,EAvBkC,oBAAA,CAAA;AA6B3B,IAAM,oBAAA,mBAAuB,MAAA,CAAA,CAClC,OAAA,EACA,WAAA,KACY;AACZ,EAAA,IAAI,OAAA,CAAQ,QAAQ,WAAA,EAAa;AAC/B,IAAA,MAAM,GAAA,GAAM,oBAAA,CAAqB,OAAA,EAAS,OAAA,CAAQ,YAAY,CAAA;AAC9D,IAAA,iBAAA,CAAkB,SAAS,GAAG,CAAA;AAE9B,IAAA,MAAM,MAAA,GAAS,CAAC,EAAE,WAAA,IAAe,QAAA,GAAW,SAAA,CAAA,CAAA;AAC5C,IAAA,IAAI,SAAA;AACJ,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,QAAA,CAAS,GAAG,CAAA;AACZ,MAAA,SAAA,GAAY,IAAA;AAAA,IACd,CAAA,MAAO;AACL,MAAA,SAAA,GAAY,mBAAmB,GAAG,CAAA;AAAA,IACpC;AAEA,IAAA,IAAI,SAAA,oBAA6B,GAAG,CAAA;AACpC,IAAA,OAAO,SAAA;AAAA,EACT;AAEA,EAAA,IAAI,OAAA,CAAQ,aAAa,WAAA,EAAa;AACpC,IAAA,IAAI,QAAsB,OAAA,CAAQ,KAAA;AAClC,IAAA,OAAO,KAAA,EAAO;AACZ,MAAA,MAAM,IAAA,GAAO,oBAAA,CAAqB,KAAA,EAAO,WAAW,CAAA;AACpD,MAAA,IAAI,CAAC,MAAM,OAAO,KAAA;AAClB,MAAA,KAAA,GAAQ,KAAA,CAAM,OAAA;AAAA,IAChB;AAAA,EACF;AAEA,EAAA,OAAO,IAAA;AACT,CAAA,EA/BoC,sBAAA,CAAA;AAuCpC,IAAM,gBAAA,2BAAoB,GAAA,KAA6B;AACrD,EAAA,MAAM,YAAA,GAAe,GAAA,CAAI,SAAA,EAAW,KAAA,IAAS,IAAA;AAC7C,EAAA,IAAI,CAAC,YAAA,EAAc;AACjB,IAAA,GAAA,CAAI,KAAA,GAAQ,IAAA;AACZ,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IAAI,QAAA,GAAyB,YAAA;AAC7B,EAAA,IAAI,YAAA,GAA6B,IAAA;AAEjC,EAAA,OAAO,QAAA,EAAU;AACf,IAAA,MAAM,QAAA,GAAW,oBAAA,CAAqB,QAAA,EAAU,QAAA,CAAS,YAAY,CAAA;AACrE,IAAA,QAAA,CAAS,MAAA,GAAS,GAAA;AAElB,IAAA,IAAI,CAAC,YAAA,EAAc;AACjB,MAAA,GAAA,CAAI,KAAA,GAAQ,QAAA;AAAA,IACd,CAAA,MAAO;AACL,MAAA,YAAA,CAAa,OAAA,GAAU,QAAA;AAAA,IACzB;AAEA,IAAA,YAAA,GAAe,QAAA;AACf,IAAA,QAAA,GAAW,QAAA,CAAS,OAAA;AAAA,EACtB;AAEA,EAAA,IAAI,YAAA,eAA2B,OAAA,GAAU,IAAA;AAEzC,EAAA,OAAO,GAAA,CAAI,KAAA;AACb,CAAA,EA3ByB,kBAAA,CAAA;AAkCzB,IAAM,mCAAmB,MAAA,CAAA,CAAC,GAAA,KACxB,EAAE,GAAA,CAAI,KAAA,GAAQ,wBAAuB,CAAA,EADd,kBAAA,CAAA;AAIzB,IAAM,QAAA,mBAAW,MAAA,CAAA,CAAC,GAAA,KAAwB,GAAA,CAAI,cAAc,IAAA,EAA3C,UAAA,CAAA;AAMjB,IAAM,uBAAA,mBAA0B,MAAA,CAAA,CAAC,GAAA,EAAY,SAAA,KAA8B;AACzE,EAAA,MAAM,kBAAA,GAAqB,SAAA,CAAU,GAAA,EAAK,SAAgB,CAAA;AAC1D,EAAA,MAAM,QAAA,GAAW,kBAAA,CAAmB,GAAA,CAAI,YAAY,CAAA;AACpD,EAAA,iBAAA,CAAkB,KAAK,QAAQ,CAAA;AACjC,CAAA,EAJgC,yBAAA,CAAA;AAOhC,IAAM,kBAAA,mBAAqB,MAAA,CAAA,CAAC,GAAA,KACzB,GAAA,CAAI,KAAsC,QAAA,EADlB,oBAAA,CAAA;AAO3B,IAAM,SAAA,2BAAa,GAAA,KAA6B;AAC9C,EAAA,QAAQ,IAAI,OAAA;AAAS,IACnB,KAAK,aAAA,EAAe;AAClB,MAAA,MAAMC,QAAO,GAAA,CAAI,IAAA;AACjB,MAAA,MAAM,SAASA,KAAAA,CAAK,OAAA;AACpB,MAAA,IAAI,CAACH,UAAAA,CAAW,MAAM,CAAA,EAAG;AAGzB,MAAA,IAAI,QAAA,CAAS,GAAG,CAAA,IAAK,gBAAA,CAAiB,GAAG,CAAA,EAAG;AAC1C,QAAA,MAAM,KAAA,GAAQG,KAAAA,CAAK,QAAA,GACfA,KAAAA,CAAK,SAAS,GAAA,CAAI,aAAA,EAAe,GAAA,CAAI,YAAY,CAAA,GACjDC,YAAAA,CAAa,GAAA,CAAI,aAAA,EAAe,IAAI,YAAY,CAAA;AACpD,QAAA,IAAI,KAAA,EAAO,OAAO,gBAAA,CAAiB,GAAG,CAAA;AAAA,MACxC;AAEA,MAAA,uBAAA,CAAwB,KAAK,MAAM,CAAA;AACnC,MAAA;AAAA,IACF;AAAA,IAEA,KAAK,iBAAA,EAAmB;AACtB,MAAA,MAAM,YAAY,GAAA,CAAI,IAAA;AACtB,MAAA,IAAI,CAACJ,UAAAA,CAAW,SAAS,CAAA,EAAG;AAK5B,MAAA,IACE,QAAA,CAAS,GAAG,CAAA,IACZ,gBAAA,CAAiB,GAAG,CAAA,IACpBI,YAAAA,CAAa,GAAA,CAAI,aAAA,EAAe,GAAA,CAAI,YAAY,CAAA,EAChD;AACA,QAAA,OAAO,iBAAiB,GAAG,CAAA;AAAA,MAC7B;AAEA,MAAA,uBAAA,CAAwB,KAAK,SAAqB,CAAA;AAClD,MAAA;AAAA,IACF;AAAA,IAEA,KAAK,iBAAA;AAAA,IACL,KAAK,QAAA;AAAA,IACL,KAAK,aAAA,EAAe;AAClB,MAAA,iBAAA,CAAkB,GAAA,EAAK,GAAA,CAAI,YAAA,EAAc,QAAQ,CAAA;AACjD,MAAA;AAAA,IACF;AAAA,IAEA,KAAK,eAAA,EAAiB;AAIpB,MAAA,IACE,QAAA,CAAS,GAAG,CAAA,IACZ,gBAAA,CAAiB,GAAG,CAAA,IACpB,MAAA,CAAO,EAAA,CAAG,GAAA,CAAI,UAAW,aAAA,EAAe,KAAA,EAAO,GAAA,CAAI,YAAA,EAAc,KAAK,CAAA,EACtE;AACA,QAAA,OAAO,iBAAiB,GAAG,CAAA;AAAA,MAC7B;AAGA,MAAA,iBAAA,CAAkB,GAAA,EAAK,GAAA,CAAI,YAAA,EAAc,QAAQ,CAAA;AAGjD,MAAA,IAAI,QAAA,CAAS,GAAG,CAAA,EAAG;AACjB,QAAA,MAAM,SAAA,GAAY,GAAA,CAAI,SAAA,CAAW,aAAA,EAAe,KAAA;AAChD,QAAA,MAAM,SAAA,GAAY,IAAI,YAAA,EAAc,KAAA;AACpC,QAAA,IAAI,CAAC,MAAA,CAAO,EAAA,CAAG,SAAA,EAAW,SAAS,CAAA,EAAG;AACpC,UAAA,sBAAA,CAAuB,kBAAA,CAAmB,GAAG,CAAC,CAAA;AAAA,QAChD;AAAA,MACF;AACA,MAAA;AAAA,IACF;AAAA;AAGF,EAAA,OAAO,GAAA,CAAI,KAAA;AACb,CAAA,EAzEkB,WAAA,CAAA;AA2ElB,IAAM,kBAAA,mBAAqB,MAAA,CAAA,CAAC,IAAA,EAAa,MAAA,KAAgC;AACvE,EAAA,IAAI,SAAA,GAA0B,IAAA;AAE9B,EAAA,OAAO,SAAA,EAAW;AAChB,IAAA,gBAAA,CAAiB,SAAS,CAAA;AAE1B,IAAA,IAAI,cAAc,MAAA,EAAQ;AACxB,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,IAAI,UAAU,OAAA,EAAS;AACrB,MAAA,OAAO,SAAA,CAAU,OAAA;AAAA,IACnB;AAEA,IAAA,SAAA,GAAY,SAAA,CAAU,MAAA;AAAA,EACxB;AAEA,EAAA,OAAO,IAAA;AACT,CAAA,EAlB2B,oBAAA,CAAA;AAoB3B,IAAM,iBAAA,2BAAqB,GAAA,KAAe;AACxC,EAAA,IAAI,OAAA,GAAiB,GAAA;AACrB,EAAA,IAAI,SAAS,OAAA,CAAQ,MAAA;AACrB,EAAA,OAAO,MAAA,EAAQ;AACb,IAAA,MAAA,CAAO,YAAA,IAAgB,OAAA,CAAQ,KAAA,GAAQ,OAAA,CAAQ,YAAA;AAC/C,IAAA,MAAA,CAAO,UAAA,IAAc,OAAA,CAAQ,KAAA,GAAQ,OAAA,CAAQ,UAAA;AAC7C,IAAA,OAAA,GAAU,MAAA;AACV,IAAA,MAAA,GAAS,MAAA,CAAO,MAAA;AAAA,EAClB;AACF,CAAA,EAT0B,mBAAA,CAAA;AAW1B,IAAM,gBAAA,2BAAoB,GAAA,KAAe;AACvC,EAAA,GAAA,CAAI,KAAA,IAAS,CAAC,sBAAA,EAAuB;AACrC,EAAA,IAAI,YAAA,GAAe,OAAA;AACnB,EAAA,IAAI,UAAA,GAAa,OAAA;AAEjB,EAAA,IAAI,QAAQ,GAAA,CAAI,KAAA;AAChB,EAAA,OAAO,KAAA,EAAO;AACZ,IAAA,YAAA,IAAgB,KAAA,CAAM,QAAQ,KAAA,CAAM,YAAA;AACpC,IAAA,UAAA,IAAc,KAAA,CAAM,QAAQ,KAAA,CAAM,UAAA;AAElC,IAAA,KAAA,CAAM,MAAA,GAAS,GAAA;AACf,IAAA,KAAA,GAAQ,KAAA,CAAM,OAAA;AAAA,EAChB;AAEA,EAAA,GAAA,CAAI,YAAA,GAAe,YAAA;AACnB,EAAA,GAAA,CAAI,UAAA,GAAa,UAAA;AACnB,CAAA,EAhByB,kBAAA,CAAA;AAuBzB,IAAM,aAAA,mBAAgB,MAAA,CAAA,CAAC,QAAA,EAAiB,OAAA,EAAyB,GAAA,KAAsB;AACrF,EAAA,MAAM,QAAA,GAAW,oBAAA,CAAqB,QAAA,EAAU,OAAA,CAAQ,KAAK,CAAA;AAC7D,EAAA,IAAI,eAAA,CAAgB,QAAA,CAAS,aAAA,EAAe,OAAA,CAAQ,KAAK,CAAA,EAAG;AAC1D,IAAA,cAAA,CAAe,UAAU,UAAU,CAAA;AAAA,EACrC;AACA,EAAA,QAAA,CAAS,MAAA,GAAS,GAAA;AAClB,EAAA,OAAO,QAAA;AACT,CAAA,EAPsB,eAAA,CAAA;AAUtB,IAAM,cAAA,mBAAiB,MAAA,CAAA,CAAC,OAAA,EAAyB,GAAA,KAAsB;AACrE,EAAA,MAAM,QAAA,GAAW,8BAA8B,OAAO,CAAA;AACtD,EAAA,QAAA,CAAS,OAAO,OAAA,CAAQ,IAAA;AACxB,EAAA,cAAA,CAAe,UAAU,aAAa,CAAA;AACtC,EAAA,QAAA,CAAS,MAAA,GAAS,GAAA;AAClB,EAAA,OAAO,QAAA;AACT,CAAA,EANuB,gBAAA,CAAA;AAYvB,IAAM,WAAA,mBAAc,MAAA,CAAA,CAClB,KAAA,EACA,IAAA,EACA,OACA,GAAA,KACU;AACV,EAAA,KAAA,CAAM,KAAA,GAAQ,KAAA;AACd,EAAA,IAAI,CAAC,IAAA,EAAM,GAAA,CAAI,KAAA,GAAQ,KAAA;AAAA,YACb,OAAA,GAAU,KAAA;AACpB,EAAA,OAAO,KAAA;AACT,CAAA,EAVoB,aAAA,CAAA;AAgBpB,IAAM,gBAAA,mBAAmB,MAAA,CAAA,CACvB,cAAA,EACA,UAAA,KACgC;AAChC,EAAA,MAAM,GAAA,uBAAU,GAAA,EAA4B;AAC5C,EAAA,IAAI,KAAA,GAAsB,cAAA;AAC1B,EAAA,IAAI,CAAA,GAAI,UAAA;AACR,EAAA,OAAO,KAAA,EAAO;AACZ,IAAA,GAAA,CAAI,GAAA,CAAI,KAAA,CAAM,GAAA,IAAO,CAAA,EAAG,KAAK,CAAA;AAC7B,IAAA,KAAA,GAAQ,KAAA,CAAM,OAAA;AACd,IAAA,CAAA,EAAA;AAAA,EACF;AACA,EAAA,OAAO,GAAA;AACT,CAAA,EAbyB,kBAAA,CAAA;AAyBzB,IAAM,mBAAA,mBAAsB,MAAA,CAAA,CAC1B,KAAA,EACA,aAAA,KACkD;AAClD,EAAA,IAAI,QAAA,GAAW,aAAA;AACf,EAAA,IAAI,CAAA,GAAI,CAAA;AAER,EAAA,OAAO,CAAA,GAAI,KAAA,CAAM,WAAA,CAAY,MAAA,EAAQ,CAAA,EAAA,EAAK;AACxC,IAAA,MAAM,OAAA,GAAU,KAAA,CAAM,WAAA,CAAY,CAAC,CAAA;AACnC,IAAA,MAAM,EAAE,GAAA,EAAK,UAAA,GAAa,IAAA,EAAM,IAAA,EAAM,aAAY,GAAI,OAAA;AAEtD,IAAA,IAAI,CAAC,QAAA,EAAU;AACf,IAAA,IAAI,QAAA,CAAS,QAAQ,UAAA,EAAY;AAEjC,IAAA,IAAI,QAAA,CAAS,SAAS,WAAA,EAAa;AACjC,MAAA,KAAA,CAAM,IAAA,GAAO,WAAA,CAAY,aAAA,CAAc,QAAA,EAAU,OAAA,EAAS,KAAA,CAAM,GAAG,CAAA,EAAG,KAAA,CAAM,IAAA,EAAM,KAAA,CAAM,KAAA,EAAA,EAAS,MAAM,GAAG,CAAA;AAAA,IAC5G,CAAA,MAAO;AAEL,MAAA,cAAA,CAAe,UAAU,YAAY,CAAA;AACrC,MAAA,KAAA,CAAM,SAAA,CAAU,KAAK,QAAQ,CAAA;AAC7B,MAAA,KAAA,CAAM,IAAA,GAAO,WAAA,CAAY,cAAA,CAAe,OAAA,EAAS,KAAA,CAAM,GAAG,CAAA,EAAG,KAAA,CAAM,IAAA,EAAM,KAAA,CAAM,KAAA,EAAA,EAAS,KAAA,CAAM,GAAG,CAAA;AAAA,IACnG;AAEA,IAAA,QAAA,GAAW,QAAA,CAAS,OAAA;AAAA,EACtB;AAEA,EAAA,OAAO,EAAE,SAAA,EAAW,CAAA,EAAG,QAAA,EAAS;AAClC,CAAA,EA3B4B,qBAAA,CAAA;AAmC5B,IAAM,cAAA,mBAAiB,MAAA,CAAA,CACrB,KAAA,EACA,OAAA,EACA,iBAAA,KACS;AACT,EAAA,MAAM,WAAA,GAAc,gBAAA,CAAiB,iBAAA,EAAmB,OAAO,CAAA;AAI/D,EAAA,IAAI,eAAA,GAAkB,CAAA;AAEtB,EAAA,KAAA,IAAS,IAAI,OAAA,EAAS,CAAA,GAAI,KAAA,CAAM,WAAA,CAAY,QAAQ,CAAA,EAAA,EAAK;AACvD,IAAA,MAAM,OAAA,GAAU,KAAA,CAAM,WAAA,CAAY,CAAC,CAAA;AACnC,IAAA,MAAM,EAAE,GAAA,EAAK,UAAA,GAAa,IAAA,EAAM,IAAA,EAAM,aAAY,GAAI,OAAA;AACtD,IAAA,MAAM,SAAS,UAAA,IAAc,CAAA;AAC7B,IAAA,MAAM,OAAA,GAAU,WAAA,CAAY,GAAA,CAAI,MAAM,CAAA,IAAK,IAAA;AAE3C,IAAA,IAAI,OAAA,IAAW,OAAA,CAAQ,IAAA,KAAS,WAAA,EAAa;AAC3C,MAAA,WAAA,CAAY,OAAO,MAAM,CAAA;AACzB,MAAA,MAAM,QAAA,GAAW,aAAA,CAAc,OAAA,EAAS,OAAA,EAAS,MAAM,GAAG,CAAA;AAE1D,MAAA,IAAI,OAAA,CAAQ,QAAQ,eAAA,EAAiB;AACnC,QAAA,cAAA,CAAe,UAAU,QAAQ,CAAA;AAAA,MACnC,CAAA,MAAO;AACL,QAAA,eAAA,GAAkB,OAAA,CAAQ,KAAA;AAAA,MAC5B;AAEA,MAAA,KAAA,CAAM,IAAA,GAAO,YAAY,QAAA,EAAU,KAAA,CAAM,MAAM,KAAA,CAAM,KAAA,EAAA,EAAS,MAAM,GAAG,CAAA;AAAA,IACzE,CAAA,MAAO;AACL,MAAA,KAAA,CAAM,IAAA,GAAO,WAAA,CAAY,cAAA,CAAe,OAAA,EAAS,KAAA,CAAM,GAAG,CAAA,EAAG,KAAA,CAAM,IAAA,EAAM,KAAA,CAAM,KAAA,EAAA,EAAS,KAAA,CAAM,GAAG,CAAA;AAAA,IACnG;AAAA,EACF;AAGA,EAAA,KAAA,MAAW,MAAA,IAAU,WAAA,CAAY,MAAA,EAAO,EAAG;AACzC,IAAA,cAAA,CAAe,QAAQ,YAAY,CAAA;AACnC,IAAA,KAAA,CAAM,SAAA,CAAU,KAAK,MAAM,CAAA;AAAA,EAC7B;AACF,CAAA,EAtCuB,gBAAA,CAAA;AAqDvB,IAAM,YAAA,2BAAgB,QAAA,KAAyC;AAC7D,EAAA,IAAI,YAAY,IAAA,IAAQ,OAAO,QAAA,KAAa,SAAA,SAAkB,EAAC;AAC/D,EAAA,IAAI,OAAA,CAAQ,QAAQ,CAAA,EAAG,OAAO,QAAA;AAC9B,EAAA,OAAO,CAAC,QAAuB,CAAA;AACjC,CAAA,EAJqB,cAAA,CAAA;AAMrB,IAAM,iBAAA,mBAAoB,MAAA,CAAA,CAAC,GAAA,EAAY,QAAA,KAAgC;AACrE,EAAA,MAAM,WAAA,GAAc,aAAa,QAAQ,CAAA,CACtC,IAAI,4BAA4B,CAAA,CAChC,OAAO,qBAAqB,CAAA;AAE/B,EAAA,MAAM,KAAA,GAAwB,EAAE,GAAA,EAAK,WAAA,EAAa,SAAA,EAAW,EAAC,EAAG,IAAA,EAAM,IAAA,EAAM,KAAA,EAAO,CAAA,EAAE;AACtF,EAAA,MAAM,aAAA,GAA8B,GAAA,CAAI,SAAA,EAAW,KAAA,IAAS,IAAA;AAE5D,EAAA,MAAM,EAAE,SAAA,EAAW,QAAA,EAAS,GAAI,mBAAA,CAAoB,OAAO,aAAa,CAAA;AAExE,EAAA,IAAI,SAAA,GAAY,YAAY,MAAA,EAAQ;AAElC,IAAA,cAAA,CAAe,KAAA,EAAO,WAAW,QAAQ,CAAA;AAAA,EAC3C,CAAA,MAAO;AAEL,IAAA,IAAI,QAAA,GAAyB,QAAA;AAC7B,IAAA,OAAO,QAAA,EAAU;AACf,MAAA,cAAA,CAAe,UAAU,YAAY,CAAA;AACrC,MAAA,KAAA,CAAM,SAAA,CAAU,KAAK,QAAQ,CAAA;AAC7B,MAAA,QAAA,GAAW,QAAA,CAAS,OAAA;AAAA,IACtB;AAAA,EACF;AAEA,EAAA,IAAI,KAAA,CAAM,IAAA,EAAM,KAAA,CAAM,IAAA,CAAK,OAAA,GAAU,IAAA;AACrC,EAAA,IAAI,KAAA,CAAM,SAAA,CAAU,MAAA,EAAQ,GAAA,CAAI,YAAY,KAAA,CAAM,SAAA;AACpD,CAAA,EAzB0B,mBAAA,CAAA;;;AC3e1B,IAAM,YAAA,GAAe,gBAAgB,UAAA,GAAa,QAAA;AAElD,IAAM,UAAA,2BAAc,YAAA,KAAwB;AAC1C,EAAA,IAAI,YAAA,CAAa,WAAW,MAAA,EAAQ;AAClC,IAAA,YAAA,CAAa,SAAA,CAAU,QAAQ,cAAc,CAAA;AAC7C,IAAA,YAAA,CAAa,SAAA,GAAY,IAAA;AAAA,EAC3B;AAEA,EAAA,IAAI,YAAA,CAAa,QAAQ,YAAA,EAAc;AACrC,IAAA,cAAA,CAAe,YAAY,CAAA;AAC3B,IAAA,iBAAA,CAAkB,YAAY,CAAA;AAAA,EAChC;AAEA,EAAA,IAAI,YAAA,CAAa,eAAe,YAAA,EAAc;AAC5C,IAAA,IAAI,QAAQ,YAAA,CAAa,KAAA;AACzB,IAAA,OAAO,KAAA,EAAO;AACZ,MAAA,UAAA,CAAW,KAAK,CAAA;AAChB,MAAA,KAAA,GAAQ,KAAA,CAAM,OAAA;AAAA,IAChB;AAAA,EACF;AAEA,EAAA,YAAA,CAAa,KAAA,GAAQ,OAAA;AACrB,EAAA,YAAA,CAAa,YAAA,GAAe,OAAA;AAC9B,CAAA,EArBmB,YAAA,CAAA;AAuBnB,IAAM,iBAAA,2BAAqB,GAAA,KAAe;AACxC,EAAA,GAAA,CAAI,gBAAgB,GAAA,CAAI,YAAA;AAC1B,CAAA,EAF0B,mBAAA,CAAA;AAK1B,IAAM,SAAA,2BAAa,GAAA,KAAqB;AACtC,EAAA,MAAM,GAAA,GAAM,IAAI,YAAA,EAAc,GAAA;AAC9B,EAAA,IAAI,GAAA,IAAO,OAAO,GAAA,KAAQ,QAAA,IAAY,aAAa,GAAA,EAAK;AACtD,IAAA,GAAA,CAAI,UAAU,GAAA,CAAI,SAAA;AAAA,EACpB;AACF,CAAA,EALkB,WAAA,CAAA;AAQlB,IAAM,SAAA,2BAAa,KAAA,KAAuB;AACxC,EAAA,MAAM,GAAA,GAAM,MAAM,aAAA,EAAe,GAAA;AACjC,EAAA,IAAI,GAAA,IAAO,OAAO,GAAA,KAAQ,QAAA,IAAY,aAAa,GAAA,EAAK;AACtD,IAAA,GAAA,CAAI,OAAA,GAAU,IAAA;AAAA,EAChB;AACF,CAAA,EALkB,WAAA,CAAA;AAOlB,IAAM,gBAAA,mBAAmB,MAAA,CAAA,CAAC,GAAA,EAAY,IAAA,KAAqB;AACzD,EAAA,MAAM,SAAA,GAAY,aAAa,GAAG,CAAA;AAGlC,EAAA,MAAM,MAAA,GAAS,eAAe,GAAG,CAAA,KAAM,IAAI,MAAA,GAAS,cAAA,CAAe,GAAA,CAAI,MAAM,CAAA,GAAI,IAAA,CAAA;AACjF,EAAA,IAAI,MAAA,EAAQ,SAAA,CAAU,YAAA,CAAa,IAAA,EAAM,MAAM,CAAA;AAAA,OAC1C,SAAA,CAAU,YAAY,IAAI,CAAA;AACjC,CAAA,EAPyB,kBAAA,CAAA;AAazB,IAAM,SAAA,mBAAY,MAAA,CAAA,CAAC,GAAA,EAAY,IAAA,KAAqB;AAClD,EAAA,gBAAA,CAAiB,KAAK,IAAI,CAAA;AAC1B,EAAA,iBAAA,CAAkB,KAAK,IAAI,CAAA;AAC3B,EAAA,SAAA,CAAU,GAAG,CAAA;AACf,CAAA,EAJkB,WAAA,CAAA;AAMlB,IAAM,cAAA,2BAAkB,UAAA,KAAsB;AAC5C,EAAA,QAAQ,WAAW,OAAA;AAAS,IAC1B,KAAK,aAAA;AACH,MAAA,2BAAA,CAA4B,UAAU,CAAA;AACtC,MAAA;AAAA,IACF,KAAK,QAAA;AACH,MAAA,sBAAA,CAAuB,UAAU,CAAA;AACjC,MAAA;AAAA;AAEN,CAAA,EATuB,gBAAA,CAAA;AAWvB,IAAM,2BAAA,2BAA+B,GAAA,KAAe;AAClD,EAAA,IAAI,CAAC,IAAI,SAAA,EAAW;AAClB,IAAA,MAAM,IAAA,GAAO,0BAA0B,GAAG,CAAA;AAC1C,IAAA,iBAAA,CAAkB,KAAK,IAAI,CAAA;AAC3B,IAAA,eAAA,CAAgB,IAAA,EAAM,GAAA,CAAI,aAAA,EAAe,GAAA,CAAI,YAAY,CAAA;AACzD,IAAA,GAAA,CAAI,SAAA,GAAY,IAAA;AAAA,EAClB;AAEA,EAAA,IAAI,cAAA,CAAe,GAAA,EAAK,aAAa,CAAA,EAAG;AACtC,IAAA,SAAA,CAAU,GAAA,EAAK,IAAI,SAAU,CAAA;AAC7B,IAAA,mBAAA,CAAoB,KAAK,aAAa,CAAA;AAAA,EACxC;AAEA,EAAA,IAAI,cAAA,CAAe,GAAA,EAAK,QAAQ,CAAA,EAAG;AAEjC,IAAC,GAAA,CAAI,UAAsB,MAAA,EAAO;AAClC,IAAA,SAAA,CAAU,GAAA,EAAK,IAAI,SAAU,CAAA;AAC7B,IAAA,mBAAA,CAAoB,KAAK,QAAQ,CAAA;AAAA,EACnC;AAEA,EAAA,IAAI,cAAA,CAAe,GAAA,EAAK,UAAU,CAAA,EAAG;AACnC,IAAA,eAAA,CAAgB,GAAA,CAAI,SAAA,EAAW,GAAA,CAAI,aAAA,EAAe,IAAI,YAAY,CAAA;AAClE,IAAA,iBAAA,CAAkB,GAAA,EAAK,IAAI,SAAU,CAAA;AACrC,IAAA,SAAA,CAAU,GAAG,CAAA;AACb,IAAA,mBAAA,CAAoB,KAAK,UAAU,CAAA;AAAA,EACrC;AACF,CAAA,EA1BoC,6BAAA,CAAA;AA4BpC,IAAM,sBAAA,2BAA0B,GAAA,KAAe;AAC7C,EAAA,IAAI,CAAC,IAAI,SAAA,EAAW;AAClB,IAAA,MAAM,IAAA,GAAO,0BAA0B,GAAG,CAAA;AAC1C,IAAA,iBAAA,CAAkB,KAAK,IAAI,CAAA;AAC3B,IAAA,GAAA,CAAI,SAAA,GAAY,IAAA;AAAA,EAClB;AAEA,EAAA,IAAI,cAAA,CAAe,GAAA,EAAK,aAAa,CAAA,EAAG;AACtC,IAAA,SAAA,CAAU,GAAA,EAAK,IAAI,SAAU,CAAA;AAC7B,IAAA,mBAAA,CAAoB,KAAK,aAAa,CAAA;AAAA,EACxC;AAEA,EAAA,IAAI,cAAA,CAAe,GAAA,EAAK,QAAQ,CAAA,EAAG;AACjC,IAAC,GAAA,CAAI,UAAmB,MAAA,EAAO;AAC/B,IAAA,SAAA,CAAU,GAAA,EAAK,IAAI,SAAU,CAAA;AAC7B,IAAA,mBAAA,CAAoB,KAAK,QAAQ,CAAA;AAAA,EACnC;AAEA,EAAA,IAAI,cAAA,CAAe,GAAA,EAAK,UAAU,CAAA,EAAG;AACnC,IAAA,IAAI,GAAA,CAAI,aAAA,KAAkB,GAAA,CAAI,YAAA,EAAc;AAC1C,MAAC,GAAA,CAAI,SAAA,CAAmB,SAAA,GAAY,MAAA,CAAO,IAAI,YAAY,CAAA;AAAA,IAC7D;AACA,IAAA,iBAAA,CAAkB,GAAA,EAAK,IAAI,SAAU,CAAA;AACrC,IAAA,mBAAA,CAAoB,KAAK,UAAU,CAAA;AAAA,EACrC;AACF,CAAA,EAzB+B,wBAAA,CAAA;AA2B/B,IAAM,cAAA,2BAAkB,KAAA,KAAiB;AAEvC,EAAA,IAAI,MAAM,aAAA,EAAe;AACvB,IAAA,iBAAA,CAAkB,KAAK,CAAA;AAAA,EACzB;AACA,EAAA,yBAAA,CAA0B,KAAK,CAAA;AAE/B,EAAA,IAAI,KAAA,CAAM,OAAA,KAAY,aAAA,IAAiB,KAAA,CAAM,YAAY,QAAA,EAAU;AACjE,IAAA,SAAA,CAAU,KAAK,CAAA;AACf,IAAC,KAAA,CAAM,WAAuB,MAAA,EAAO;AAAA,EACvC;AAEA,EAAA,IAAI,QAAQ,KAAA,CAAM,KAAA;AAClB,EAAA,OAAO,KAAA,EAAO;AACZ,IAAA,cAAA,CAAe,KAAK,CAAA;AACpB,IAAA,KAAA,GAAQ,KAAA,CAAM,OAAA;AAAA,EAChB;AACF,CAAA,EAjBuB,gBAAA,CAAA;;;ACjIvB,IAAMH,SAAAA,GAAqB;AAAA,EACzB,IAAA,EAAM,IAAA;AAAA,EACN,IAAA,EAAM;AACR,CAAA;AAEA,IAAM,aAAA,2BAAiB,MAAA,KAA8B;AACnD,EAAA,MAAA,CAAO,IAAA,GAAO,IAAA;AAEd,EAAA,IAAIA,SAAAA,CAAS,SAAS,IAAA,EAAM;AAC1B,IAAAA,UAAS,IAAA,GAAO,MAAA;AAChB,IAAAA,UAAS,IAAA,GAAO,MAAA;AAChB,IAAA;AAAA,EACF;AAEA,EAAAA,SAAAA,CAAS,KAAK,IAAA,GAAO,MAAA;AACrB,EAAAA,UAAS,IAAA,GAAO,MAAA;AAClB,CAAA,EAXsB,eAAA,CAAA;AAatB,IAAM,gCAAgB,MAAA,CAAA,MAA0B;AAC9C,EAAA,MAAM,QAAQA,SAAAA,CAAS,IAAA;AACvB,EAAA,IAAI,UAAU,IAAA,EAAM;AAClB,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAAA,SAAAA,CAAS,OAAO,KAAA,CAAM,IAAA;AAEtB,EAAA,IAAIA,SAAAA,CAAS,SAAS,IAAA,EAAM;AAC1B,IAAAA,UAAS,IAAA,GAAO,IAAA;AAAA,EAClB;AAEA,EAAA,KAAA,CAAM,IAAA,GAAO,IAAA;AACb,EAAA,OAAO,KAAA;AACT,CAAA,EAdsB,eAAA,CAAA;AAiBtB,IAAM,SAAA,mBAAY,MAAA,CAAA,MAAeA,SAAAA,CAAS,IAAA,KAAS,IAAA,EAAjC,WAAA,CAAA;;;ACJlB,4BAAA;AAAA,EACE,uBAAA;AAAA,EACA;AACF,CAAA;AAIA,IAAI,uBAAA,GAA0B,KAAA;AAK9B,IAAM,WAAA,2BAAe,KAAA,KAAwB;AAC3C,EAAA,MAAM,YAAY,qBAAA,EAAsB;AACxC,EAAA,IAAI,CAAC,SAAA,EAAW;AAIhB,EAAA,IAAI,CAAC,eAAA,EAAgB,EAAG,mBAAA,EAAoB;AAE5C,EAAA,wBAAA,CAAyB,KAAK,CAAA;AAC9B,EAAA,MAAM,SAAA,GAAY,oBAAA,CAAqB,SAAA,CAAU,IAAA,EAAM,KAAK,CAAA;AAE5D,EAAA,IAAI,CAAC,SAAA,EAAW;AAGd,IAAA,kBAAA,CAAmB,KAAK,CAAA;AACxB,IAAA;AAAA,EACF;AAGA,EAAA,iBAAA,EAAkB;AAClB,EAAA,UAAA,CAAW,UAAU,IAAI,CAAA;AACzB,EAAA,mBAAA,CAAoB,SAAA,CAAU,IAAA,EAAM,SAAA,CAAU,YAAY,CAAA;AAG1D,EAAA,gBAAA,CAAiB,SAAS,CAAA;AAE1B,EAAA,sBAAA,EAAuB;AACzB,CAAA,EA3BoB,aAAA,CAAA;AA6BpB,eAAA,CAAgB,WAAW,CAAA;AAU3B,IAAM,kBAAA,2BAAsB,KAAA,KAAuB;AAGjD,EAAA,MAAM,IAAA,GAAO,uBAAA,GAA0B,QAAA,GAAW,iBAAA,EAAkB;AACpE,EAAA,aAAA,CAAc,EAAE,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,MAAM,CAAA;AAChD,EAAA,IAAI,CAAC,uBAAA,EAAyB;AAC5B,IAAA,kBAAA,CAAmB,IAAI,CAAA;AAAA,EACzB;AACF,CAAA,EAR2B,oBAAA,CAAA;AAmB3B,IAAM,gBAAA,2BAAoB,KAAA,KAAuB;AAC/C,EAAA,MAAM,OAAO,sBAAA,EAAuB;AAGpC,EAAA,KAAA,CAAM,KAAA,IAAS,IAAA;AACf,EAAA,MAAM,MAAM,KAAA,CAAM,SAAA;AAClB,EAAA,IAAI,CAAC,GAAA,EAAK;AAEV,EAAA,GAAA,CAAI,KAAA,IAAS,IAAA;AAEb,EAAA,IAAI,SAAS,GAAA,CAAI,MAAA;AACjB,EAAA,OAAO,MAAA,EAAQ;AACb,IAAA,IAAA,CAAK,MAAA,CAAO,UAAA,GAAa,IAAA,MAAU,IAAA,EAAM;AACzC,IAAA,MAAA,CAAO,UAAA,IAAc,IAAA;AACrB,IAAA,MAAA,GAAS,MAAA,CAAO,MAAA;AAAA,EAClB;AACF,CAAA,EAhByB,kBAAA,CAAA;AAkBzB,mBAAA,CAAoB,kBAAkB,CAAA;AACtC,iBAAA,CAAkB,gBAAgB,CAAA;AAK3B,IAAM,eAAA,2BAAmB,SAAA,KAAkC;AAChE,EAAA,OAAO,oBAAoB,SAAS,CAAA;AACtC,CAAA,EAF+B,iBAAA,CAAA;AAIxB,IAAM,eAAA,mBAAkB,MAAA,CAAA,CAC7B,QAAA,EACA,SAAA,KACS;AACT,EAAA,SAAA,CAAU,QAAA,GAAW,QAAA;AACrB,EAAA,qBAAA,CAAsB,SAAS,CAAA;AAE/B,EAAA,MAAM,UAAU,oBAAA,CAAqB,SAAA,CAAU,IAAA,EAAM,EAAE,UAAU,CAAA;AACjE,EAAA,wBAAA,CAAyB,QAAQ,CAAA;AACjC,EAAA,QAAA,CAAS,OAAO,CAAA;AAChB,EAAA,UAAA,CAAW,OAAO,CAAA;AAClB,EAAA,SAAA,CAAU,IAAA,GAAO,OAAA;AACjB,EAAA,mBAAA,CAAoB,OAAA,EAAS,UAAU,YAAY,CAAA;AACnD,EAAA,qBAAA,CAAsB,SAAS,CAAA;AAG/B,EAAA,gBAAA,CAAiB,SAAS,CAAA;AAE1B,EAAA,sBAAA,EAAuB;AACzB,CAAA,EAnB+B,iBAAA,CAAA;AA2B/B,IAAM,cAAA,GAAiB,IAAI,cAAA,EAAe;AAC1C,IAAM,yCAAyB,MAAA,CAAA,MAAY;AACzC,EAAA,cAAA,CAAe,KAAA,CAAM,YAAY,MAAM;AACrC,IAAA,mBAAA,EAAoB;AACpB,IAAA,YAAA,EAAa;AAAA,EACf,CAAA;AACA,EAAA,cAAA,CAAe,KAAA,CAAM,YAAY,IAAI,CAAA;AACvC,CAAA,EAN+B,wBAAA,CAAA;AAc/B,IAAM,gBAAA,2BAAoB,SAAA,KAA+B;AACvD,EAAA,OAAO,IAAA,EAAM;AACX,IAAA,uBAAA,GAA0B,IAAA;AAC1B,IAAA,yBAAA,EAA0B;AAC1B,IAAA,kBAAA,EAAmB;AACnB,IAAA,uBAAA,GAA0B,KAAA;AAG1B,IAAA,IAAI,CAAC,WAAU,EAAG;AAGlB,IAAA,mBAAA,EAAoB;AACpB,IAAA,wBAAA,CAAyB,QAAQ,CAAA;AACjC,IAAA,MAAM,SAAA,GAAY,oBAAA,CAAqB,SAAA,CAAU,IAAA,EAAM,QAAQ,CAAA;AAC/D,IAAA,IAAI,CAAC,SAAA,EAAW;AAChB,IAAA,iBAAA,EAAkB;AAClB,IAAA,UAAA,CAAW,UAAU,IAAI,CAAA;AACzB,IAAA,mBAAA,CAAoB,SAAA,CAAU,IAAA,EAAM,SAAA,CAAU,YAAY,CAAA;AAAA,EAE5D;AACF,CAAA,EApByB,kBAAA,CAAA;AAsBzB,IAAM,sCAAsB,MAAA,CAAA,MAAY;AACtC,EAAA,IAAI,SAAS,aAAA,EAAc;AAC3B,EAAA,OAAO,MAAA,EAAQ;AACb,IAAA,wBAAA,CAAyB,MAAM,CAAA;AAC/B,IAAA,MAAA,GAAS,aAAA,EAAc;AAAA,EACzB;AACF,CAAA,EAN4B,qBAAA,CAAA;AAY5B,IAAM,wBAAA,2BAA4B,WAAA,KAAmC;AACnE,EAAA,MAAM,OAAO,WAAA,CAAY,KAAA;AACzB,EAAA,IAAI,QAAsB,WAAA,CAAY,KAAA;AAGtC,EAAA,KAAA,CAAM,KAAA,IAAS,IAAA;AACf,EAAA,IAAI,KAAA,CAAM,SAAA,EAAW,KAAA,CAAM,SAAA,CAAU,KAAA,IAAS,IAAA;AAG9C,EAAA,KAAA,GAAQ,KAAA,CAAM,MAAA;AACd,EAAA,OAAO,KAAA,EAAO;AACZ,IAAA,KAAA,CAAM,UAAA,IAAc,IAAA;AACpB,IAAA,IAAI,KAAA,CAAM,SAAA,EAAW,KAAA,CAAM,SAAA,CAAU,UAAA,IAAc,IAAA;AACnD,IAAA,KAAA,GAAQ,KAAA,CAAM,MAAA;AAAA,EAChB;AACF,CAAA,EAfiC,0BAAA,CAAA;;;AC9M1B,IAAM,UAAA,2BAAc,SAAA,KAAuC;AAChE,EAAA,MAAM,QAAA,GAAW,gBAAgB,SAAS,CAAA;AAC1C,EAAA,mBAAA,CAAoB,QAAA,CAAS,MAAM,SAAS,CAAA;AAC5C,EAAA,yBAAA,CAA0B,SAAS,CAAA;AACnC,EAAA,OAAO;AAAA,IACL,MAAA,0BAAS,IAAA,KAAsB;AAC7B,MAAA,eAAA,CAAgB,MAAM,QAAQ,CAAA;AAAA,IAChC,CAAA,EAFQ,QAAA,CAAA;AAAA,IAGR,yBAAS,MAAA,CAAA,MAAM;AACb,MAAA,qBAAA,CAAsB,SAAS,CAAA;AAAA,IACjC,CAAA,EAFS,SAAA;AAAA,GAGX;AACF,CAAA,EAZ0B,YAAA;;;ACYnB,SAAS,IAAA,CACd,WACA,OAAA,EACkB;AAClB,EAAA,MAAM,OAAA,mBAAW,MAAA,EAAA,CAAC,MAAA,KAAc,IAAA,GAAf,SAAA,CAAA;AACjB,EAAA,OAAA,CAAQ,OAAA,GAAU,IAAA;AAClB,EAAA,OAAA,CAAQ,OAAA,GAAU,SAAA;AAClB,EAAA,OAAA,CAAQ,WAAW,OAAA,IAAW,IAAA;AAC9B,EAAA,OAAO,OAAA;AACT;AATgB,MAAA,CAAA,IAAA,EAAA,MAAA,CAAA","file":"index.js","sourcesContent":["import { RectifyDomEventName } from \"./RectifyEventName\";\n\nexport const allNativeEvents: Set<RectifyDomEventName> = new Set();\n\nexport const registrationNameDependencies: {\n [registrationName: string]: Array<RectifyDomEventName>;\n} = {};\n\nexport const nativeEventToRectifyName: Map<RectifyDomEventName, string> =\n new Map();\n\nexport function registerDirectEvent(\n registrationName: string,\n dependencies: Array<RectifyDomEventName>,\n) {\n registrationNameDependencies[registrationName] = dependencies;\n\n for (let i = 0; i < dependencies.length; i++) {\n const dependency = dependencies[i];\n\n allNativeEvents.add(dependency);\n\n if (!nativeEventToRectifyName.has(dependency)) {\n nativeEventToRectifyName.set(dependency, registrationName);\n }\n }\n}\n\nexport function registerNativeEvent() {\n // Mouse\n registerDirectEvent(\"onClick\", [\"click\"]);\n registerDirectEvent(\"onDoubleClick\", [\"dblclick\"]);\n registerDirectEvent(\"onMouseDown\", [\"mousedown\"]);\n registerDirectEvent(\"onMouseUp\", [\"mouseup\"]);\n registerDirectEvent(\"onMouseMove\", [\"mousemove\"]);\n registerDirectEvent(\"onMouseEnter\", [\"mouseenter\"]);\n registerDirectEvent(\"onMouseLeave\", [\"mouseleave\"]);\n registerDirectEvent(\"onContextMenu\", [\"contextmenu\"]);\n\n // Keyboard\n registerDirectEvent(\"onKeyDown\", [\"keydown\"]);\n registerDirectEvent(\"onKeyUp\", [\"keyup\"]);\n registerDirectEvent(\"onKeyPress\", [\"keypress\"]);\n\n // Input / Form\n registerDirectEvent(\"onInput\", [\"input\"]);\n registerDirectEvent(\"onChange\", [\"change\"]);\n registerDirectEvent(\"onSubmit\", [\"submit\"]);\n registerDirectEvent(\"onReset\", [\"reset\"]);\n\n // Focus\n registerDirectEvent(\"onFocus\", [\"focus\"]);\n registerDirectEvent(\"onBlur\", [\"blur\"]);\n\n // Clipboard\n registerDirectEvent(\"onCopy\", [\"copy\"]);\n registerDirectEvent(\"onCut\", [\"cut\"]);\n registerDirectEvent(\"onPaste\", [\"paste\"]);\n\n // Touch\n registerDirectEvent(\"onTouchStart\", [\"touchstart\"]);\n registerDirectEvent(\"onTouchMove\", [\"touchmove\"]);\n registerDirectEvent(\"onTouchEnd\", [\"touchend\"]);\n registerDirectEvent(\"onTouchCancel\", [\"touchcancel\"]);\n\n // Scroll / Wheel\n registerDirectEvent(\"onScroll\", [\"scroll\"]);\n registerDirectEvent(\"onWheel\", [\"wheel\"]);\n\n // Drag\n registerDirectEvent(\"onDrag\", [\"drag\"]);\n registerDirectEvent(\"onDragStart\", [\"dragstart\"]);\n registerDirectEvent(\"onDragEnd\", [\"dragend\"]);\n registerDirectEvent(\"onDragEnter\", [\"dragenter\"]);\n registerDirectEvent(\"onDragLeave\", [\"dragleave\"]);\n registerDirectEvent(\"onDragOver\", [\"dragover\"]);\n registerDirectEvent(\"onDrop\", [\"drop\"]);\n}\n","import { registerNativeEvent } from \"./RectifyEventRegistry\";\n\n/**\n * This function will run immediately when this file mount\n */\nconst main = () => {\n registerNativeEvent();\n};\n\nmain();\n","import { RectifyDOMEventHandleListener } from \"../events/RectifyDomEventTypes\";\nimport { RectifyDomEventName } from \"../events/RectifyEventName\";\nimport { Fiber } from \"@rectify-dev/shared\";\n\nconst randomKey = Math.random().toString(36).slice(2);\nconst internalContainerInstanceKey = \"__rectifyContainer$\" + randomKey;\nconst internalInstanceKey = \"__rectifyFiber$\" + randomKey;\nconst internalEventHandlerListenersKey = \"__rectifyListeners$\" + randomKey;\nconst internalEventHandlesSetKey = \"__rectifyHandles$\" + randomKey;\n\nexport function markContainerAsRoot(\n hostRoot: Fiber,\n node: Element | Node,\n): void {\n (node as any)[internalContainerInstanceKey] = hostRoot;\n}\n\nexport function unmarkContainerAsRoot(node: Element | Node): void {\n (node as any)[internalContainerInstanceKey] = null;\n}\n\nexport function isContainerMarkedAsRoot(node: Element | Node): boolean {\n return !!(node as any)[internalContainerInstanceKey];\n}\n\nexport const precacheFiberNode = (fiber: Fiber, node: Node) => {\n if (!node) return;\n (node as any)[internalInstanceKey] = fiber;\n};\n\nexport const getFiberNodeCached = (node: Node): Fiber | null => {\n if (!node) return null;\n return (node as any)[internalInstanceKey] || null;\n};\n\nexport function setEventHandlerListeners(\n scope: EventTarget | null,\n listeners: Map<string, RectifyDOMEventHandleListener>,\n): void {\n if (!scope) return;\n (scope as any)[internalEventHandlerListenersKey] = listeners;\n}\n\nexport function getEventHandlerListeners(\n scope: EventTarget | null,\n): null | Map<string, RectifyDOMEventHandleListener> {\n if (!scope) return null;\n return (scope as any)[internalEventHandlerListenersKey] || null;\n}\n","import { AnyNativeEvent } from \"./RectifyDomEventListener\";\n\nclass SyntheticEvent {\n target: Element | null;\n currentTarget: Element | null = null;\n nativeEvent: AnyNativeEvent;\n\n private propagationStopped: boolean = false;\n\n constructor(nativeEvent: AnyNativeEvent) {\n this.target = nativeEvent.target as Element;\n this.nativeEvent = nativeEvent;\n }\n\n stopPropagation() {\n this.propagationStopped = true;\n this.nativeEvent.stopPropagation();\n }\n\n isPropagationStopped() {\n return this.propagationStopped;\n }\n}\n\nexport default SyntheticEvent;\n","/**\n * Event priority injection point.\n *\n * @rectify-dev/dom-binding has no dependency on @rectify-dev/reconciler, so the\n * reconciler injects its priority functions here at startup via\n * `injectEventPriorityCallbacks`. The event dispatcher then calls\n * `setEventPriority` / `resetEventPriority` around every handler invocation\n * so that state updates triggered by user events are assigned the correct lane.\n *\n * Lane values are plain numbers (not imported) to keep the dependency graph clean:\n * InputLane = 0b00010 = 2\n * DefaultLane = 0b00100 = 4 (used as the reset value)\n */\n\ntype PriorityFn = (priority: number) => void;\ntype ResetFn = () => void;\n\nlet _set: PriorityFn = () => {};\nlet _reset: ResetFn = () => {};\n\n/** Called once by the reconciler to wire up priority tracking. */\nexport const injectEventPriorityCallbacks = (\n set: PriorityFn,\n reset: ResetFn,\n): void => {\n _set = set;\n _reset = reset;\n};\n\n/** Mark the start of a user-interaction event (sets InputLane). */\nexport const setEventPriority = (priority: number): void => _set(priority);\n\n/** Restore default priority after an event handler returns. */\nexport const resetEventPriority = (): void => _reset();\n\n/** Numeric constant – mirrors InputLane in @rectify-dev/reconciler. */\nexport const INPUT_LANE = 0b00010;\n","import { Fiber, isFunction } from \"@rectify-dev/shared\";\nimport {\n getEventHandlerListeners,\n getFiberNodeCached,\n} from \"../clients/RectifyDomComponentTree\";\nimport { RectifyDomEventName } from \"./RectifyEventName\";\nimport SyntheticEvent from \"./SyntheticEvent\";\nimport { nativeEventToRectifyName } from \"./RectifyEventRegistry\";\nimport {\n INPUT_LANE,\n setEventPriority,\n resetEventPriority,\n} from \"./RectifyEventPriority\";\n\nexport type AnyNativeEvent = Event | KeyboardEvent | MouseEvent | TouchEvent;\n\nexport const createEventListenerWrapper = (\n targetContainer: EventTarget,\n domEventName: RectifyDomEventName,\n) => {\n return dispatchEvent.bind(null, domEventName, targetContainer);\n};\n\nconst getEventTarget = (nativeEvent: AnyNativeEvent) => {\n return (nativeEvent.target || nativeEvent.srcElement) as Node;\n};\n\nconst dispatchEvent = (\n domEventName: RectifyDomEventName,\n targetContainer: EventTarget,\n nativeEvent: AnyNativeEvent,\n) => {\n const targetNode = getEventTarget(nativeEvent);\n const targetFiber = getFiberNodeCached(targetNode);\n\n if (!targetFiber) return;\n\n const syntheticEvent = new SyntheticEvent(nativeEvent);\n\n const path: Fiber[] = [];\n let fiber: Fiber | null = targetFiber;\n\n while (fiber) {\n path.push(fiber);\n if (fiber.stateNode === targetContainer) {\n break;\n }\n fiber = fiber.return;\n }\n\n for (const currFiber of path) {\n if (syntheticEvent.isPropagationStopped()) break;\n\n const eventHandlerMap = getEventHandlerListeners(\n currFiber.stateNode as Node,\n );\n if (!eventHandlerMap) continue;\n const rectifyName = nativeEventToRectifyName.get(domEventName);\n if (!rectifyName) continue;\n const handler = eventHandlerMap.get(rectifyName);\n\n if (!isFunction(handler)) continue;\n\n syntheticEvent.currentTarget = currFiber.stateNode as Element;\n setEventPriority(INPUT_LANE);\n try {\n handler(syntheticEvent);\n } finally {\n resetEventPriority();\n }\n }\n\n syntheticEvent.currentTarget = null;\n};\n","export function addEventBubbleListener(\n target: EventTarget,\n eventType: string,\n listener: EventListenerOrEventListenerObject | null,\n): EventListenerOrEventListenerObject | null {\n target.addEventListener(eventType, listener, false);\n return listener;\n}\n\nexport function addEventCaptureListener(\n target: EventTarget,\n eventType: string,\n listener: EventListenerOrEventListenerObject | null,\n): EventListenerOrEventListenerObject | null {\n target.addEventListener(eventType, listener, true);\n return listener;\n}\n\nexport function addEventCaptureListenerWithPassiveFlag(\n target: EventTarget,\n eventType: string,\n listener: EventListenerOrEventListenerObject | null,\n passive: boolean,\n): EventListenerOrEventListenerObject | null {\n target.addEventListener(eventType, listener, {\n capture: true,\n passive,\n });\n return listener;\n}\n\nexport function addEventBubbleListenerWithPassiveFlag(\n target: EventTarget,\n eventType: string,\n listener: EventListenerOrEventListenerObject | null,\n passive: boolean,\n): EventListenerOrEventListenerObject | null {\n target.addEventListener(eventType, listener, {\n passive,\n });\n return listener;\n}\n\nexport function removeEventListener(\n target: EventTarget,\n eventType: string,\n listener: EventListenerOrEventListenerObject | null,\n capture: boolean,\n): void {\n target.removeEventListener(eventType, listener, capture);\n}\n","import { createEventListenerWrapper } from \"./RectifyDomEventListener\";\nimport { addEventBubbleListener, addEventCaptureListener } from \"./RectifyEventListener\";\nimport { RectifyDomEventName } from \"./RectifyEventName\";\nimport { allNativeEvents } from \"./RectifyEventRegistry\";\n\nconst listeningMarker =\n \"_rectifyEventListening$\" + Math.random().toString(36).slice(2);\n\nexport const listenToAllEventSupported = (dom: EventTarget) => {\n if ((dom as any)[listeningMarker]) return;\n (dom as any)[listeningMarker] = true;\n\n allNativeEvents.forEach((domEventName) =>\n listenToNativeEvent(domEventName, dom),\n );\n};\n\nconst listenToNativeEvent = (\n domEventName: RectifyDomEventName,\n target: EventTarget,\n) => {\n const listener = createEventListenerWrapper(target, domEventName);\n addEventCaptureListener(target, domEventName, listener as any);\n};\n","import { RectifyDomEventName } from \"./../events/RectifyEventName\";\nimport { isPlainObject } from \"@rectify-dev/shared\";\nimport {\n getEventHandlerListeners,\n setEventHandlerListeners,\n} from \"./RectifyDomComponentTree\";\nimport { RectifyDOMEventHandleListener } from \"../events/RectifyDomEventTypes\";\n\nconst isEvent = (k: string) => k.startsWith(\"on\");\nconst isProperty = (k: string) =>\n k !== \"children\" && k !== \"ref\" && !isEvent(k);\n\nconst unitlessProperties = new Set([\n \"zIndex\",\n \"opacity\",\n \"fontWeight\",\n \"lineHeight\",\n \"flex\",\n \"flexGrow\",\n \"flexShrink\",\n]);\n\nfunction convertStyleObjectToString(styleObj: object) {\n return Object.entries(styleObj)\n .map(([key, value]) => {\n const cssKey = key.replace(/[A-Z]/g, (m) => \"-\" + m.toLowerCase());\n\n let cssValue = value;\n\n if (typeof value === \"number\" && !unitlessProperties.has(key)) {\n cssValue = `${value}px`;\n }\n\n return `${cssKey}:${cssValue}`;\n })\n .join(\"; \");\n}\n\nexport const applyPropsToDom = (\n node: Node,\n prevProps: any = {},\n nextProps: any = {},\n) => {\n const element = node as Element;\n\n const eventNode =\n getEventHandlerListeners(element) ||\n new Map<RectifyDomEventName, RectifyDOMEventHandleListener>();\n\n for (const k in prevProps) {\n if (isEvent(k) && !(k in nextProps)) {\n eventNode.delete(k as RectifyDomEventName);\n }\n if (isProperty(k) && !(k in nextProps)) {\n (element as any)[k] = \"\";\n element.removeAttribute(k);\n }\n }\n\n for (const k in nextProps) {\n if (k === \"children\" || k === \"ref\") continue;\n\n if (isEvent(k)) {\n if (prevProps?.[k] !== nextProps?.[k]) {\n eventNode.set(k, nextProps[k]);\n }\n } else if (k === \"style\") {\n element.setAttribute(\"style\", convertStyleObjectToString(nextProps[k]));\n } else {\n const v = nextProps[k];\n // handle className -> class\n if (k === \"className\") element.setAttribute(\"class\", v ?? \"\");\n else if (v === false || v === null || v === undefined)\n element.removeAttribute(k);\n else element.setAttribute(k, String(v));\n }\n }\n\n setEventHandlerListeners(element, eventNode);\n};\n","export const NoFlags /* */ = 0;\nexport const PlacementFlag /* */ = 1 << 0;\nexport const UpdateFlag /* */ = 1 << 1;\nexport const DeletionFlag /* */ = 1 << 2;\nexport const MoveFlag /* */ = 1 << 3; // fiber reused but at a different index\n","export type Lanes = number;\nexport type Lane = number;\n\nexport const NoLanes /* */ = 0b00000;\nexport const SyncLane /* */ = 0b00001; // Immediate / initial render\nexport const InputLane /* */ = 0b00010; // User interactions (click, keyboard …)\nexport const DefaultLane /* */ = 0b00100; // Async / normal state updates\nexport const TransitionLane /* */ = 0b01000; // Deferred (startTransition)\nexport const IdleLane /* */ = 0b10000; // Background / idle work\n","export const FunctionComponent /** */ = Symbol.for(\"rectify.function_component\");\nexport const HostComponent /** */ = Symbol.for(\"rectify.host_component\");\nexport const HostText /** */ = Symbol.for(\"rectify.host_text\");\nexport const HostRoot /** */ = Symbol.for(\"rectify.host_root\");\nexport const FragmentComponent /** */ = Symbol.for(\"rectify.fragment_component\");\nexport const ContextProvider /** */ = Symbol.for(\"rectify.context_provider\");\nexport const MemoComponent /** */ = Symbol.for(\"rectify.memo_component\");","import {\n Fiber,\n isFunction,\n isPlainObject,\n isTextNode,\n omit,\n RECTIFY_ELEMENT_TYPE,\n RECTIFY_FRAGMENT_TYPE,\n RECTIFY_TEXT_TYPE,\n RectifyElement,\n shallowEqual,\n} from \"@rectify-dev/shared\";\nimport {\n FragmentComponent,\n FunctionComponent,\n HostComponent,\n HostRoot,\n HostText,\n ContextProvider,\n MemoComponent,\n} from \"./RectifyFiberWorkTags\";\n\nconst addFlagToFiber = (fiber: Fiber, flag: number): void => {\n if (hasFlagOnFiber(fiber, flag)) return;\n fiber.flags |= flag;\n};\n\nconst removeFlagFromFiber = (fiber: Fiber | null, flag: number): void => {\n if (!hasFlagOnFiber(fiber, flag)) return;\n fiber!.flags &= ~flag;\n};\n\nconst hasFlagOnFiber = (fiber: Fiber | null, flag: number): boolean => {\n if (!fiber) return false;\n return (fiber.flags & flag) !== 0;\n};\n\nconst getFiberTagFromElement = (element: RectifyElement) => {\n switch (element.$$typeof) {\n case RECTIFY_ELEMENT_TYPE:\n if (isFunction(element.type) && (element.type as any)?._context === element.type) {\n return ContextProvider;\n }\n if (isFunction(element.type) && (element.type as any)?._isMemo === true) {\n return MemoComponent;\n }\n return isFunction(element.type) ? FunctionComponent : HostComponent;\n case RECTIFY_TEXT_TYPE:\n return HostText;\n case RECTIFY_FRAGMENT_TYPE:\n return FragmentComponent;\n default:\n return null;\n }\n};\n\nconst createDomElementFromFiber = (fiber: Fiber): Node => {\n switch (fiber.workTag) {\n case HostText:\n return document.createTextNode(fiber.pendingProps);\n default:\n return document.createElement(fiber.type as string);\n }\n};\n\nconst getParentDom = (fiber: Fiber): Node => {\n if (fiber.workTag === HostRoot)\n return fiber.stateNode as Node;\n\n let p = fiber.return;\n while (p) {\n if (p.workTag === HostComponent) return p.stateNode as Node;\n if (p.workTag === HostRoot) return p.stateNode as Node;\n p = p.return;\n }\n\n throw new Error(\"No parent DOM found.\");\n};\n\n/**\n * Returns the first host DOM node (HostComponent or HostText) found by a\n * depth-first pre-order walk of the subtree rooted at `fiber`.\n * Returns null if the subtree contains no host nodes.\n */\nfunction findFirstHostNode(fiber: Fiber): Node | null {\n if (fiber.workTag === HostComponent || fiber.workTag === HostText) {\n return fiber.stateNode as Node;\n }\n\n let child = fiber.child;\n while (child) {\n const found = findFirstHostNode(child);\n if (found) return found;\n child = child.sibling;\n }\n\n return null;\n}\n\n/**\n * Finds the nearest host DOM node that this fiber should be inserted before.\n * Walks the fiber's siblings; for each sibling performs a full depth-first\n * search so arbitrarily nested FunctionComponent / FragmentComponent wrappers\n * are transparent.\n */\nfunction getHostSibling(fiber: Fiber): Node | null {\n let sibling = fiber.sibling;\n while (sibling) {\n const node = findFirstHostNode(sibling);\n if (node) return node;\n sibling = sibling.sibling;\n }\n\n return null;\n}\n\nconst hasPropsChanged = (prevProps: any, nextProps: any) => {\n const CHILDREN_KEY = \"children\";\n const REF_KEY = \"ref\";\n if (isPlainObject(prevProps) && isPlainObject(nextProps)) {\n return !shallowEqual(\n omit(prevProps, [CHILDREN_KEY, REF_KEY]),\n omit(nextProps, [CHILDREN_KEY, REF_KEY]),\n );\n }\n\n return prevProps !== nextProps;\n};\n\nexport {\n addFlagToFiber,\n removeFlagFromFiber,\n hasFlagOnFiber,\n getFiberTagFromElement,\n createDomElementFromFiber,\n getParentDom,\n getHostSibling,\n hasPropsChanged,\n};\n","import { Fiber, RectifyElement, RectifyKey } from \"@rectify-dev/shared\";\nimport { NoFlags } from \"./RectifyFiberFlags\";\nimport { NoLanes } from \"./RectifyFiberLanes\";\nimport { HostComponent, HostRoot } from \"./RectifyFiberWorkTags\";\nimport { getFiberTagFromElement } from \"./RectifyFiberService\";\n\nexport const createFiber = (\n workTag: symbol,\n pendingProps: any,\n key: RectifyKey = null,\n): Fiber => {\n return {\n index: 0,\n key,\n workTag,\n type: null,\n pendingProps,\n memoizedProps: null,\n child: null,\n sibling: null,\n return: null,\n stateNode: null,\n deletions: null,\n alternate: null,\n\n lanes: NoLanes,\n childLanes: NoLanes,\n\n subtreeFlags: NoFlags,\n flags: NoFlags,\n\n memoizedState: null,\n };\n};\n\nexport const createHostRootFiber = (containerDom: Element) => {\n const root = createFiber(HostRoot, null);\n root.stateNode = containerDom; // containerDom lives on the fiber, not the global\n return {\n containerDom,\n root,\n pendingLanes: NoLanes,\n children: null,\n };\n};\n\nexport const createWorkInProgress = (current: Fiber, pendingProps: any) => {\n let wip = current.alternate;\n\n if (!wip) {\n wip = createFiber(current.workTag, pendingProps, current.key);\n wip.type = current.type;\n wip.stateNode = current.stateNode;\n\n wip.alternate = current;\n current.alternate = wip;\n } else {\n wip.pendingProps = pendingProps;\n wip.deletions = null;\n }\n\n wip.memoizedProps = current.memoizedProps;\n wip.memoizedState = current.memoizedState;\n wip.return = current.return;\n wip.child = current.child;\n wip.sibling = current.sibling;\n wip.flags = NoFlags;\n wip.subtreeFlags = NoFlags;\n wip.lanes = current.lanes;\n wip.childLanes = current.childLanes;\n return wip;\n};\n\nexport const createFiberFromRectifyElement = (\n element: RectifyElement,\n): Fiber => {\n const tag = getFiberTagFromElement(element) ?? HostComponent;\n return createFiber(tag, element.props, element.key);\n};\n","import { FiberRoot } from \"./RectifyFiberTypes\";\n\ntype Instance = {\n fiberRoot: FiberRoot | null;\n};\n\nconst instance: Instance = {\n fiberRoot: null,\n};\n\nexport const setScheduledFiberRoot = (fiberRoot: FiberRoot | null): void => {\n instance.fiberRoot = fiberRoot;\n};\n\nexport const getScheduledFiberRoot = (): FiberRoot | null => {\n return instance.fiberRoot;\n};\n","import { Fiber, Hook } from \"@rectify-dev/shared\";\n\ntype ScheduleRerender = (fiber: Fiber) => void;\n\ntype Instance = {\n fiberRendering: Fiber | null;\n hookIndex: number;\n scheduleRerender: ScheduleRerender | null;\n};\n\nconst instance: Instance = {\n fiberRendering: null,\n hookIndex: 0,\n scheduleRerender: null,\n};\n\nexport const getFiberRendering = (): Fiber | null => instance.fiberRendering;\n\nexport const setFiberRendering = (fiber: Fiber | null): void => {\n instance.fiberRendering = fiber;\n};\n\nexport const getHookIndex = (): number => instance.hookIndex;\n\nexport const setHookIndex = (index: number): void => {\n instance.hookIndex = index;\n};\n\nexport const nextHookIndex = (): void => {\n instance.hookIndex += 1;\n};\n\nexport const setScheduleRerender = (fn: ScheduleRerender): void => {\n instance.scheduleRerender = fn;\n};\n\nexport const scheduleRerender = (fiber: Fiber): void => {\n instance.scheduleRerender?.(fiber);\n};\n\n// ---------------------------------------------------------------------------\n// Shared hook-slot utility\n// ---------------------------------------------------------------------------\n\n/**\n * Walks the hook linked list on `fiber` to the slot at `hookIndex`.\n * Returns the existing hook if found, or `null` on mount (slot doesn't exist\n * yet). In the mount case, `prevHook` points to the slot just before the gap\n * so the caller can attach the new hook.\n */\nexport const getHookSlot = (\n fiber: Fiber,\n hookIndex: number,\n): { hook: Hook | null; prevHook: Hook | null } => {\n let hook: Hook | null = fiber.memoizedState;\n let prevHook: Hook | null = null;\n\n for (let i = 0; i < hookIndex; i++) {\n prevHook = hook;\n hook = hook?.next ?? null;\n }\n\n return { hook, prevHook };\n};\n\n/**\n * Attaches `newHook` into `fiber`'s linked list at the position indicated by\n * `prevHook` (null means insert at the head).\n */\nexport const attachHook = (fiber: Fiber, newHook: Hook, prevHook: Hook | null): void => {\n if (prevHook) prevHook.next = newHook;\n else fiber.memoizedState = newHook;\n};\n","import { FC, Fiber } from \"@rectify-dev/shared\";\nimport { setFiberRendering, setHookIndex } from \"./RectifyHookRenderingFiber\";\n\nconst prepareToUseHooks = (wip: Fiber) => {\n setFiberRendering(wip);\n setHookIndex(0);\n};\n\nconst finishUsingHooks = () => {\n setFiberRendering(null);\n};\n\nconst withHooks = (wip: Fiber, Component: FC) => {\n const NewComponent = (props: any) => {\n prepareToUseHooks(wip);\n const result = Component(props);\n finishUsingHooks();\n return result;\n };\n\n return NewComponent;\n};\n\nexport { withHooks };\n","import { Hook, isFunction } from \"@rectify-dev/shared\";\nimport { StateDispatcher, StateUpdater } from \"./RectifyHookTypes\";\nimport {\n getFiberRendering,\n getHookIndex,\n nextHookIndex,\n scheduleRerender,\n} from \"./RectifyHookRenderingFiber\";\n\ntype StateInitializer<S> = S | (() => S);\n\nconst getInitialState = <S>(initialState: S | (() => S)): S =>\n isFunction(initialState) ? initialState() : initialState;\n\nconst getState = <S>(update: StateUpdater<S>, prevState: S) =>\n isFunction(update) ? update(prevState) : update;\n\nfunction useState<S>(): [S | undefined, StateDispatcher<S | undefined>];\nfunction useState<S>(initialState: S): [S, StateDispatcher<S>];\nfunction useState<S>(initialState: () => S): [S, StateDispatcher<S>];\nfunction useState<S>(\n initialState?: StateInitializer<S>,\n): [S | undefined, StateDispatcher<S | undefined>] {\n const fiber = getFiberRendering();\n if (!fiber) {\n throw new Error(\"useState must be used within a function component.\");\n }\n const hookIndex = getHookIndex();\n nextHookIndex();\n\n let state: Hook<S | undefined> | null = fiber.memoizedState;\n let prevHook: Hook<S | undefined> | null = null;\n\n for (let i = 0; i < hookIndex; i++) {\n prevHook = state;\n state = state?.next ?? null;\n }\n\n if (!state) {\n state = {\n memoizedState: getInitialState(initialState),\n queue: null,\n next: null,\n };\n if (prevHook) {\n prevHook.next = state;\n } else {\n fiber.memoizedState = state;\n }\n }\n\n let update = state.queue;\n while (update) {\n state.memoizedState = getState(update.action, state.memoizedState);\n update = update.next;\n }\n state.queue = null;\n\n const dispatcher = (updater: StateUpdater<S | undefined>) => {\n const update = { action: updater, next: null };\n\n if (!state.queue) {\n state.queue = update;\n } else {\n let last = state.queue;\n while (last.next) {\n last = last.next;\n }\n last.next = update;\n }\n scheduleRerender(fiber);\n };\n\n return [state.memoizedState, dispatcher] as const;\n}\n\nexport default useState;\n","/**\n * Returns true when the dependency arrays are different.\n * Used by useEffect, useMemo and useCallback.\n */\nexport const depsChanged = (\n prev: any[] | undefined,\n next: any[] | undefined,\n): boolean => {\n if (!prev || !next) return true;\n if (prev.length !== next.length) return true;\n return next.some((dep, i) => !Object.is(dep, prev[i]));\n};\n","import { Fiber, Hook } from \"@rectify-dev/shared\";\nimport {\n getFiberRendering,\n getHookIndex,\n nextHookIndex,\n getHookSlot,\n attachHook,\n} from \"./RectifyHookRenderingFiber\";\nimport { depsChanged } from \"./RectifyHookDeps\";\nimport type { EffectState } from \"./RectifyHookTypes\";\n\n// Effects collected during render, flushed after commit.\nconst pendingEffects: EffectState[] = [];\n\n// Cleanups deferred from the render phase — fired before new effects run.\nconst pendingCleanups: EffectState[] = [];\n\nfunction useEffect(\n create: () => void | (() => void),\n deps?: any[],\n): void {\n const fiber = getFiberRendering();\n if (!fiber) {\n throw new Error(\"useEffect must be used within a function component.\");\n }\n\n const hookIndex = getHookIndex();\n nextHookIndex();\n\n const { hook, prevHook } = getHookSlot(fiber, hookIndex);\n\n if (!hook) {\n // Mount — always schedule the effect.\n const effectState: EffectState = { create, deps, cleanup: undefined };\n const newHook: Hook = { memoizedState: effectState, queue: null, next: null };\n attachHook(fiber, newHook, prevHook);\n pendingEffects.push(effectState);\n } else {\n // Update — only re-run if deps changed.\n const prev = hook.memoizedState as EffectState;\n if (depsChanged(prev.deps, deps)) {\n pendingCleanups.push(prev); // defer old cleanup to post-commit\n const effectState: EffectState = { create, deps, cleanup: undefined };\n hook.memoizedState = effectState;\n pendingEffects.push(effectState);\n }\n }\n}\n\n/**\n * Run cleanups queued during the render phase (dep-changed effects).\n * Must be called after commit but before flushEffects.\n */\nexport const flushEffectCleanups = (): void => {\n for (const effect of pendingCleanups.splice(0)) {\n effect.cleanup?.();\n }\n};\n\n/** Run all effects collected during the last render. Called after commit. */\nexport const flushEffects = (): void => {\n for (const effect of pendingEffects.splice(0)) {\n const cleanup = effect.create();\n if (typeof cleanup === \"function\") {\n effect.cleanup = cleanup;\n }\n }\n};\n\n/**\n * Called during the commit deletion pass. Walks a fiber's hook linked list\n * and fires the cleanup of every effect hook found on it.\n */\nexport const runEffectCleanups = (fiber: Fiber): void => {\n let hook = fiber.memoizedState;\n while (hook) {\n const state = hook.memoizedState;\n if (state !== null && typeof (state as EffectState).create === \"function\") {\n (state as EffectState).cleanup?.();\n }\n hook = hook.next;\n }\n};\n\nexport default useEffect;\n","import { Fiber, Hook } from \"@rectify-dev/shared\";\nimport {\n getFiberRendering,\n getHookIndex,\n nextHookIndex,\n getHookSlot,\n attachHook,\n} from \"./RectifyHookRenderingFiber\";\nimport { depsChanged } from \"./RectifyHookDeps\";\nimport type { EffectState } from \"./RectifyHookTypes\";\n\n// Layout effects collected during render, flushed synchronously after commit.\nconst pendingLayoutEffects: EffectState[] = [];\n\n// Layout cleanups deferred from the render phase.\nconst pendingLayoutCleanups: EffectState[] = [];\n\n/**\n * Like `useEffect`, but fires **synchronously after every DOM mutation** and\n * before the browser has a chance to paint. Use this when you need to read\n * layout or synchronously re-style the DOM (tooltips, scroll restoration,\n * measuring element sizes, etc.).\n *\n * Prefer `useEffect` for everything else — `useLayoutEffect` blocks the paint.\n *\n * @example\n * useLayoutEffect(() => {\n * const { height } = ref.current.getBoundingClientRect();\n * setTooltipTop(-height);\n * }, []);\n */\nfunction useLayoutEffect(\n create: () => void | (() => void),\n deps?: any[],\n): void {\n const fiber = getFiberRendering();\n if (!fiber) {\n throw new Error(\"useLayoutEffect must be used within a function component.\");\n }\n\n const hookIndex = getHookIndex();\n nextHookIndex();\n\n const { hook, prevHook } = getHookSlot(fiber, hookIndex);\n\n if (!hook) {\n // Mount — always schedule the layout effect.\n const effectState: EffectState = { create, deps, cleanup: undefined };\n const newHook: Hook = { memoizedState: effectState, queue: null, next: null };\n attachHook(fiber, newHook, prevHook);\n pendingLayoutEffects.push(effectState);\n } else {\n // Update — only re-run if deps changed.\n const prev = hook.memoizedState as EffectState;\n if (depsChanged(prev.deps, deps)) {\n pendingLayoutCleanups.push(prev); // defer old cleanup to post-commit\n const effectState: EffectState = { create, deps, cleanup: undefined };\n hook.memoizedState = effectState;\n pendingLayoutEffects.push(effectState);\n }\n }\n}\n\n/**\n * Run layout cleanups queued during render (dep-changed layout effects).\n * Called synchronously after commit, before flushLayoutEffects.\n */\nexport const flushLayoutEffectCleanups = (): void => {\n for (const effect of pendingLayoutCleanups.splice(0)) {\n effect.cleanup?.();\n }\n};\n\n/**\n * Run all layout effects collected during the last render.\n * Called synchronously after commit, before the browser paints.\n */\nexport const flushLayoutEffects = (): void => {\n for (const effect of pendingLayoutEffects.splice(0)) {\n const cleanup = effect.create();\n if (typeof cleanup === \"function\") {\n effect.cleanup = cleanup;\n }\n }\n};\n\n/**\n * Called during the commit deletion pass. Fires layout cleanups on removed\n * fibers so they don't observe a stale DOM.\n */\nexport const runLayoutEffectCleanups = (fiber: Fiber): void => {\n let hook = fiber.memoizedState;\n while (hook) {\n const state = hook.memoizedState;\n if (state !== null && typeof (state as EffectState).create === \"function\") {\n (state as EffectState).cleanup?.();\n }\n hook = hook.next;\n }\n};\n\nexport default useLayoutEffect;\n","import {\n getFiberRendering,\n getHookIndex,\n nextHookIndex,\n} from \"./RectifyHookRenderingFiber\";\n\nexport type RefObject<T> = { current: T };\n\n/**\n * Returns a stable mutable ref object whose `.current` property is initialised\n * to `initialValue`. The same object is returned on every render — updating\n * `.current` does NOT trigger a re-render.\n *\n * Two common uses:\n * 1. Hold a DOM node: const el = useRef<HTMLDivElement>(null)\n * 2. Hold a mutable value across renders without causing re-renders.\n */\nfunction useRef<T>(initialValue: T): RefObject<T>;\nfunction useRef<T>(initialValue: T | null): RefObject<T | null>;\nfunction useRef<T = undefined>(): RefObject<T | undefined>;\nfunction useRef<T>(initialValue?: T): RefObject<T | undefined> {\n const fiber = getFiberRendering();\n if (!fiber) {\n throw new Error(\"useRef must be used within a function component.\");\n }\n\n const hookIndex = getHookIndex();\n nextHookIndex();\n\n // Walk the hook linked list to the slot for this hook call.\n let hook = fiber.memoizedState;\n let prevHook = null;\n for (let i = 0; i < hookIndex; i++) {\n prevHook = hook;\n hook = hook?.next ?? null;\n }\n\n if (!hook) {\n // Mount — create the ref object once and attach it to the linked list.\n const ref: RefObject<T | undefined> = { current: initialValue };\n const newHook = { memoizedState: ref, queue: null, next: null };\n\n if (prevHook) {\n prevHook.next = newHook;\n } else {\n fiber.memoizedState = newHook;\n }\n\n return ref;\n }\n\n // Update — the ref object already exists; return it unchanged.\n // Callers mutate .current directly, which never triggers a re-render.\n return hook.memoizedState as RefObject<T | undefined>;\n}\n\nexport default useRef;\n","import {\n getFiberRendering,\n getHookIndex,\n nextHookIndex,\n} from \"./RectifyHookRenderingFiber\";\nimport { depsChanged } from \"./RectifyHookDeps\";\n\ntype MemoState<T> = {\n value: T;\n deps: any[] | undefined;\n};\n\n/**\n * Returns a memoized value. `factory` is only re-executed when one of the\n * `deps` changes (using `Object.is` comparison), otherwise the cached value\n * from the previous render is returned unchanged.\n *\n * @example\n * const sorted = useMemo(() => [...list].sort(), [list]);\n */\nfunction useMemo<T>(factory: () => T, deps: any[]): T {\n const fiber = getFiberRendering();\n if (!fiber) {\n throw new Error(\"useMemo must be used within a function component.\");\n }\n\n const hookIndex = getHookIndex();\n nextHookIndex();\n\n let hook = fiber.memoizedState;\n let prevHook = null;\n for (let i = 0; i < hookIndex; i++) {\n prevHook = hook;\n hook = hook?.next ?? null;\n }\n\n if (!hook) {\n // Mount – compute and cache the initial value.\n const state: MemoState<T> = { value: factory(), deps };\n const newHook = { memoizedState: state, queue: null, next: null };\n\n if (prevHook) {\n prevHook.next = newHook;\n } else {\n fiber.memoizedState = newHook;\n }\n\n return state.value;\n }\n\n // Update – recompute only when deps changed.\n const prev = hook.memoizedState as MemoState<T>;\n if (depsChanged(prev.deps, deps)) {\n const state: MemoState<T> = { value: factory(), deps };\n hook.memoizedState = state;\n return state.value;\n }\n\n return prev.value;\n}\n\nexport default useMemo;\n","import useMemo from \"./RectifyHookUseMemo\";\n\n/**\n * Returns a memoized callback. The same function reference is returned on\n * every render unless one of the `deps` changes.\n *\n * This is sugar over `useMemo(() => fn, deps)` — it keeps function identity\n * stable so child components that compare props by reference don't re-render\n * unnecessarily.\n *\n * @example\n * const handleClick = useCallback(() => doSomething(id), [id]);\n */\nfunction useCallback<T extends (...args: any[]) => any>(\n callback: T,\n deps: any[],\n): T {\n return useMemo(() => callback, deps);\n}\n\nexport default useCallback;\n","import { Fiber } from \"@rectify-dev/shared\";\nimport { getFiberRendering } from \"./RectifyHookRenderingFiber\";\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\n/**\n * A context object that is also its own Provider component.\n * Both forms are equivalent:\n * jsx(MyContext, { value, children }) // Context as Provider\n * jsx(MyContext.Provider, { value, children }) // Classic Provider form\n */\nexport type RectifyContext<T> = {\n (props: { value: T; children?: any }): null;\n /** Self-reference used by the reconciler to identify Provider fibers. */\n _context: RectifyContext<T>;\n _defaultValue: T;\n _subscribers: Set<Fiber>;\n /** Alias to self — `Context.Provider === Context`. */\n Provider: RectifyContext<T>;\n};\n\n// ---------------------------------------------------------------------------\n// Mark-dirty injection (provided by the reconciler at startup)\n// ---------------------------------------------------------------------------\n\ntype MarkFiberDirty = (fiber: Fiber) => void;\nlet markFiberDirtyFn: MarkFiberDirty | null = null;\n\n/** Injected by the reconciler so context can mark subscriber lanes directly. */\nexport const setMarkFiberDirty = (fn: MarkFiberDirty): void => {\n markFiberDirtyFn = fn;\n};\n\n// ---------------------------------------------------------------------------\n// Per-fiber subscription tracking (for cleanup on unmount)\n// ---------------------------------------------------------------------------\n\n/**\n * Maps each fiber to the contexts it has subscribed to.\n * WeakMap so fibers that become unreachable are GC'd automatically.\n */\nconst fiberSubscriptions = new WeakMap<Fiber, Set<RectifyContext<any>>>();\n\n// ---------------------------------------------------------------------------\n// Public API\n// ---------------------------------------------------------------------------\n\n/**\n * Creates a new context. The returned object is itself a Provider component,\n * so both forms below are equivalent:\n *\n * @example\n * const ThemeCtx = createContext<'light' | 'dark'>('light');\n *\n * // Option A – Context used directly as Provider\n * jsx(ThemeCtx, { value: 'dark', children: ... })\n *\n * // Option B – Classic .Provider form\n * jsx(ThemeCtx.Provider, { value: 'dark', children: ... })\n */\nexport function createContext<T>(defaultValue: T): RectifyContext<T> {\n // The function body is intentionally a no-op — the reconciler gives this\n // fiber a ContextProvider work tag and handles it without calling the fn.\n function ProviderFn(_props: { value: T; children?: any }): null {\n return null;\n }\n\n const context = ProviderFn as unknown as RectifyContext<T>;\n context._context = context; // self-reference: identifies Provider fibers\n context._defaultValue = defaultValue;\n context._subscribers = new Set();\n context.Provider = context; // Provider is an alias to self\n\n return context;\n}\n\n/**\n * Reads the current value of `context` for the calling component.\n *\n * Walks up the fiber tree to the nearest matching Provider and reads its\n * `pendingProps.value` directly — no render-time stack required. This means\n * the correct value is always returned even when the Provider did not\n * re-render in the current pass.\n *\n * The component re-renders whenever the nearest Provider supplies a new value\n * (compared with `Object.is`). Unlike other hooks this does NOT consume a\n * hook slot and may be called conditionally.\n *\n * @example\n * const theme = useContext(ThemeCtx); // 'light' | 'dark'\n */\nexport function useContext<T>(context: RectifyContext<T>): T {\n const fiber = getFiberRendering();\n if (!fiber) {\n throw new Error(\"useContext must be used within a function component.\");\n }\n\n // Walk up the fiber tree to find the nearest Provider for this context.\n let ancestor = fiber.return;\n while (ancestor) {\n if ((ancestor.type as any)?._context === context) {\n // Replace any stale subscription from the previous incarnation of this\n // fiber (its alternate) so the subscriber set never accumulates stale refs.\n if (fiber.alternate) {\n context._subscribers.delete(fiber.alternate);\n const altSet = fiberSubscriptions.get(fiber.alternate);\n if (altSet) {\n altSet.delete(context);\n if (altSet.size === 0) fiberSubscriptions.delete(fiber.alternate);\n }\n }\n\n context._subscribers.add(fiber);\n let ctxSet = fiberSubscriptions.get(fiber);\n if (!ctxSet) {\n ctxSet = new Set();\n fiberSubscriptions.set(fiber, ctxSet);\n }\n ctxSet.add(context);\n\n // Read the value straight from the Provider's pending props.\n // This is always correct: if the Provider re-rendered this pass its\n // pendingProps hold the new value; if it didn't, pendingProps equals\n // the last committed value (copied by createWorkInProgress).\n return ancestor.pendingProps.value as T;\n }\n ancestor = ancestor.return;\n }\n\n // No Provider found — return the default value (no subscription needed).\n return context._defaultValue;\n}\n\n// ---------------------------------------------------------------------------\n// Reconciler helpers\n// ---------------------------------------------------------------------------\n\n/**\n * Mark all subscribers of `context` dirty so they skip the bailout and\n * re-render in the current pass. Called by `beginWork` when a ContextProvider\n * detects that its value has changed. Marks lanes directly instead of\n * scheduling a second render so consumers update in the same render pass.\n */\nexport function notifyContextConsumers<T>(context: RectifyContext<T>): void {\n if (!markFiberDirtyFn) return;\n for (const subscriber of context._subscribers) {\n markFiberDirtyFn(subscriber);\n }\n}\n\n/**\n * Unregister `fiber` from every context it subscribed to.\n * Called during the commit deletion pass.\n */\nexport function clearContextSubscriptions(fiber: Fiber): void {\n const ctxSet = fiberSubscriptions.get(fiber);\n if (!ctxSet) return;\n\n for (const context of ctxSet) {\n context._subscribers.delete(fiber);\n }\n\n fiberSubscriptions.delete(fiber);\n}\n","import { DefaultLane, Lane, Lanes, SyncLane } from \"./RectifyFiberLanes\";\n\n// ---------------------------------------------------------------------------\n// Event priority – updated by the DOM event dispatcher\n// ---------------------------------------------------------------------------\n\nlet currentEventPriority: Lane = DefaultLane;\n\nexport const setCurrentEventPriority = (lane: Lane): void => {\n currentEventPriority = lane;\n};\n\nexport const resetCurrentEventPriority = (): void => {\n currentEventPriority = DefaultLane;\n};\n\n/**\n * Returns the lane that should be assigned to the current state update.\n * Inside a user event handler this will be InputLane; in async callbacks\n * (fetch, timers) it falls back to DefaultLane.\n */\nexport const requestUpdateLane = (): Lane => currentEventPriority;\n\n// ---------------------------------------------------------------------------\n// Rendering lanes – set by the scheduler before each render pass\n// ---------------------------------------------------------------------------\n\nlet currentRenderingLanes: Lanes = SyncLane;\n\nexport const setCurrentRenderingLanes = (lanes: Lanes): void => {\n currentRenderingLanes = lanes;\n};\n\nexport const getCurrentLanePriority = (): Lanes => currentRenderingLanes;\n","import { Fiber } from \"@rectify-dev/shared\";\nimport {\n DefaultLane,\n IdleLane,\n InputLane,\n Lane,\n Lanes,\n NoLanes,\n SyncLane,\n TransitionLane,\n} from \"./RectifyFiberLanes\";\n\n// ---------------------------------------------------------------------------\n// Frame budget / shouldYield\n// ---------------------------------------------------------------------------\n\n/** Max ms of render work to perform per scheduler task (foundation for time-slicing). */\nconst FRAME_BUDGET_MS = 5;\n\nlet frameStart = 0;\n\n/**\n * Returns true when the current work slice has run longer than FRAME_BUDGET_MS.\n * Use this inside tight work loops to yield back to the browser.\n */\nexport const shouldYield = (): boolean =>\n performance.now() - frameStart > FRAME_BUDGET_MS;\n\n// ---------------------------------------------------------------------------\n// Work callback – injected by the reconciler\n// ---------------------------------------------------------------------------\n\ntype WorkCallback = (lanes: Lanes) => void;\n\nlet doWork: WorkCallback | null = null;\n\n/** Inject the render function that the scheduler calls when a task fires. */\nexport const setWorkCallback = (cb: WorkCallback): void => {\n doWork = cb;\n};\n\n// ---------------------------------------------------------------------------\n// Resume cursor – the exact fiber workLoopConcurrent stopped at\n// ---------------------------------------------------------------------------\n\n/**\n * When workLoopConcurrent yields mid-tree this holds the exact fiber it\n * stopped at. The next task passes this back so work truly continues from\n * where it left off rather than restarting from the WIP root.\n */\nlet resumeCursor: Fiber | null = null;\n\nexport const setResumeCursor = (fiber: Fiber | null): void => {\n resumeCursor = fiber;\n};\n\nexport const getResumeCursor = (): Fiber | null => resumeCursor;\n\nexport const clearResumeCursor = (): void => {\n resumeCursor = null;\n};\n\n// ---------------------------------------------------------------------------\n// Pending lanes\n// ---------------------------------------------------------------------------\n\n/** Bitfield of lanes enqueued but not yet processed. */\nlet pendingLanes: Lanes = NoLanes;\n\n/**\n * Enqueue a render for `lane` and ensure the appropriate scheduler task is\n * posted. Multiple calls for the same lane before the task fires are\n * deduplicated – only one task is ever in flight per scheduling tier.\n */\nexport const scheduleRenderLane = (lane: Lane): void => {\n pendingLanes |= lane;\n\n if (lane & (SyncLane | InputLane)) {\n // Highest async priority: runs before the next paint via microtask queue.\n scheduleMicrotask();\n } else if (lane & DefaultLane) {\n // Normal async priority: MessageChannel macrotask, yields to browser.\n scheduleMessageTask();\n } else if (lane & TransitionLane) {\n // Deferred: setTimeout(0) – lower priority than regular tasks.\n scheduleTimeout();\n } else if (lane & IdleLane) {\n // Background: requestIdleCallback when the main thread is idle.\n scheduleIdle();\n }\n};\n\n// ---------------------------------------------------------------------------\n// Internal flush helper\n// ---------------------------------------------------------------------------\n\nconst flush = (mask: Lanes): void => {\n const lanes = pendingLanes & mask;\n if (!lanes) return;\n pendingLanes &= ~lanes;\n frameStart = performance.now();\n doWork?.(lanes);\n};\n\n// ---------------------------------------------------------------------------\n// Microtask scheduler (SyncLane | InputLane)\n// ---------------------------------------------------------------------------\n\nconst MICROTASK_MASK = SyncLane | InputLane;\nlet microtaskScheduled = false;\n\nconst scheduleMicrotask = (): void => {\n if (microtaskScheduled) return;\n microtaskScheduled = true;\n queueMicrotask(() => {\n microtaskScheduled = false;\n flush(MICROTASK_MASK);\n });\n};\n\n// ---------------------------------------------------------------------------\n// MessageChannel scheduler (DefaultLane)\n// ---------------------------------------------------------------------------\n\nconst DEFAULT_MASK = DefaultLane;\nconst mc = new MessageChannel();\nlet mcScheduled = false;\n\nmc.port1.onmessage = () => {\n mcScheduled = false;\n flush(DEFAULT_MASK);\n};\n\nconst scheduleMessageTask = (): void => {\n if (mcScheduled) return;\n mcScheduled = true;\n mc.port2.postMessage(null);\n};\n\n// ---------------------------------------------------------------------------\n// setTimeout scheduler (TransitionLane)\n// ---------------------------------------------------------------------------\n\nconst TRANSITION_MASK = TransitionLane;\nlet timeoutHandle: ReturnType<typeof setTimeout> | null = null;\n\nconst scheduleTimeout = (): void => {\n if (timeoutHandle !== null) return;\n timeoutHandle = setTimeout(() => {\n timeoutHandle = null;\n flush(TRANSITION_MASK);\n }, 0);\n};\n\n// ---------------------------------------------------------------------------\n// requestIdleCallback scheduler (IdleLane)\n// ---------------------------------------------------------------------------\n\nconst IDLE_MASK = IdleLane;\nlet idleHandle: number | null = null;\n\nconst scheduleIdle = (): void => {\n if (idleHandle !== null) return;\n\n const run = () => {\n idleHandle = null;\n flush(IDLE_MASK);\n };\n\n if (typeof requestIdleCallback !== \"undefined\") {\n idleHandle = requestIdleCallback(run, { timeout: 300 }) as unknown as number;\n } else {\n idleHandle = setTimeout(run, 300) as unknown as number;\n }\n};\n","import {\n createElementFromRectifyNode,\n Fiber,\n isArray,\n isFunction,\n isValidRectifyElement,\n RectifyElement,\n RectifyNode,\n shallowEqual,\n} from \"@rectify-dev/shared\";\nimport {\n FunctionComponent,\n HostComponent,\n HostRoot,\n ContextProvider,\n MemoComponent,\n FragmentComponent,\n} from \"./RectifyFiberWorkTags\";\nimport { withHooks, notifyContextConsumers } from \"@rectify-dev/hook\";\nimport { addFlagToFiber, hasPropsChanged } from \"./RectifyFiberService\";\nimport {\n DeletionFlag,\n MoveFlag,\n NoFlags,\n PlacementFlag,\n UpdateFlag,\n} from \"./RectifyFiberFlags\";\nimport { Lanes, NoLanes, SyncLane, InputLane } from \"./RectifyFiberLanes\";\nimport {\n createFiberFromRectifyElement,\n createWorkInProgress,\n} from \"./RectifyFiber\";\nimport { getCurrentLanePriority } from \"./RectifyFiberRenderPriority\";\nimport {\n shouldYield,\n getResumeCursor,\n setResumeCursor,\n clearResumeCursor,\n} from \"./RectifyFiberScheduler\";\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\n/** Mutable state threaded through the reconcileChildren pass functions. */\ntype ReconcileState = {\n wip: Fiber;\n newElements: RectifyElement[];\n deletions: Fiber[];\n prev: Fiber | null;\n index: number;\n};\n\n// ---------------------------------------------------------------------------\n// Implementation\n// ---------------------------------------------------------------------------\n\nconst swapCurrentForWip = (current: Fiber, wip: Fiber) => {\n const parent = wip.return;\n if (!parent) return;\n\n if (parent.child === current) {\n parent.child = wip;\n return;\n }\n\n let prevSibling = parent.child;\n while (prevSibling && prevSibling.sibling !== current) {\n prevSibling = prevSibling.sibling;\n }\n if (prevSibling) prevSibling.sibling = wip;\n};\n\nexport const workLoop = (wipRoot: Fiber) => {\n let workInProgress: Fiber | null = wipRoot;\n\n while (workInProgress) {\n const next = beginWork(workInProgress);\n\n if (next) {\n workInProgress = next;\n } else {\n workInProgress = completeUnitOfWork(workInProgress, wipRoot);\n }\n }\n};\n\n/**\n * Interruptible work loop used for non-urgent lanes (Default / Transition / Idle).\n * Yields back to the browser when the frame budget is exceeded; the scheduler\n * will re-post a task to continue with the remaining pending lanes.\n */\nexport const workLoopConcurrent = (wipRoot: Fiber): boolean => {\n // Resume from the saved cursor if we yielded on a previous task,\n // otherwise start fresh from the WIP root.\n let workInProgress: Fiber | null = getResumeCursor() ?? wipRoot;\n clearResumeCursor();\n\n while (workInProgress && !shouldYield()) {\n const next = beginWork(workInProgress);\n\n if (next) {\n workInProgress = next;\n } else {\n workInProgress = completeUnitOfWork(workInProgress, wipRoot);\n }\n }\n\n if (workInProgress !== null) {\n // Yielded early – save the cursor so the next task resumes here.\n setResumeCursor(workInProgress);\n return false;\n }\n\n return true;\n};\n\n/**\n * Returns true when the subtree rooted at wipRoot was fully processed for the\n * given renderLanes, false when a concurrent work loop yielded early.\n */\nexport const workLoopOnFiberLanes = (\n wipRoot: Fiber,\n renderLanes: Lanes,\n): boolean => {\n if (wipRoot.lanes & renderLanes) {\n const wip = createWorkInProgress(wipRoot, wipRoot.pendingProps);\n swapCurrentForWip(wipRoot, wip);\n\n const isSync = !!(renderLanes & (SyncLane | InputLane));\n let completed: boolean;\n if (isSync) {\n workLoop(wip);\n completed = true;\n } else {\n completed = workLoopConcurrent(wip);\n }\n\n if (completed) bubbleFlagsToRoot(wip);\n return completed;\n }\n\n if (wipRoot.childLanes & renderLanes) {\n let child: Fiber | null = wipRoot.child;\n while (child) {\n const done = workLoopOnFiberLanes(child, renderLanes);\n if (!done) return false; // propagate early-exit upward\n child = child.sibling;\n }\n }\n\n return true;\n};\n\n/**\n * Bailout helper: re-links the current tree's children as WIP nodes under\n * `wip` without calling the component function. Each cloned child will be\n * visited by the work loop and may itself bail out or re-render depending on\n * its own pending lanes.\n */\nconst cloneChildFibers = (wip: Fiber): Fiber | null => {\n const currentChild = wip.alternate?.child ?? null;\n if (!currentChild) {\n wip.child = null;\n return null;\n }\n\n let oldChild: Fiber | null = currentChild;\n let prevNewChild: Fiber | null = null;\n\n while (oldChild) {\n const newChild = createWorkInProgress(oldChild, oldChild.pendingProps);\n newChild.return = wip;\n\n if (!prevNewChild) {\n wip.child = newChild;\n } else {\n prevNewChild.sibling = newChild;\n }\n\n prevNewChild = newChild;\n oldChild = oldChild.sibling;\n }\n\n if (prevNewChild) prevNewChild.sibling = null;\n\n return wip.child;\n};\n\n// ---------------------------------------------------------------------------\n// beginWork helpers\n// ---------------------------------------------------------------------------\n\n/** Returns true when this fiber has no own pending work in the current pass. */\nconst hasNoPendingWork = (wip: Fiber): boolean =>\n !(wip.lanes & getCurrentLanePriority());\n\n/** Returns true when this is an update (not a mount). */\nconst isUpdate = (wip: Fiber): boolean => wip.alternate !== null;\n\n/**\n * Runs a function component (or memo-wrapped component) through hooks,\n * then reconciles the output into children.\n */\nconst renderFunctionComponent = (wip: Fiber, Component: Function): void => {\n const ComponentWithHooks = withHooks(wip, Component as any);\n const children = ComponentWithHooks(wip.pendingProps);\n reconcileChildren(wip, children);\n};\n\n/** Reads the context object off a ContextProvider fiber's type. */\nconst getProviderContext = (wip: Fiber) =>\n (wip.type as unknown as { _context: any })._context;\n\n// ---------------------------------------------------------------------------\n// beginWork\n// ---------------------------------------------------------------------------\n\nconst beginWork = (wip: Fiber): Fiber | null => {\n switch (wip.workTag) {\n case MemoComponent: {\n const memo = wip.type as any;\n const render = memo._render;\n if (!isFunction(render)) break;\n\n // Bailout: use custom comparator when provided, fall back to shallowEqual.\n if (isUpdate(wip) && hasNoPendingWork(wip)) {\n const equal = memo._compare\n ? memo._compare(wip.memoizedProps, wip.pendingProps)\n : shallowEqual(wip.memoizedProps, wip.pendingProps);\n if (equal) return cloneChildFibers(wip);\n }\n\n renderFunctionComponent(wip, render);\n break;\n }\n\n case FunctionComponent: {\n const Component = wip.type;\n if (!isFunction(Component)) break;\n\n // Bailout: props unchanged and no own pending state update.\n // Cloned children let the work loop still descend into any grandchild\n // that does have pending work.\n if (\n isUpdate(wip) &&\n hasNoPendingWork(wip) &&\n shallowEqual(wip.memoizedProps, wip.pendingProps)\n ) {\n return cloneChildFibers(wip);\n }\n\n renderFunctionComponent(wip, Component as Function);\n break;\n }\n\n case FragmentComponent:\n case HostRoot:\n case HostComponent: {\n reconcileChildren(wip, wip.pendingProps?.children);\n break;\n }\n\n case ContextProvider: {\n // Bailout: value unchanged and no own pending work.\n // Children are cloned so the work loop still descends into them —\n // each child manages its own bailout independently.\n if (\n isUpdate(wip) &&\n hasNoPendingWork(wip) &&\n Object.is(wip.alternate!.memoizedProps?.value, wip.pendingProps?.value)\n ) {\n return cloneChildFibers(wip);\n }\n\n // Reconcile first so WIP child fibers exist before we mark subscribers.\n reconcileChildren(wip, wip.pendingProps?.children);\n\n // Notify subscribers when value changed so they re-render in this pass.\n if (isUpdate(wip)) {\n const prevValue = wip.alternate!.memoizedProps?.value;\n const nextValue = wip.pendingProps?.value;\n if (!Object.is(prevValue, nextValue)) {\n notifyContextConsumers(getProviderContext(wip));\n }\n }\n break;\n }\n }\n\n return wip.child;\n};\n\nconst completeUnitOfWork = (unit: Fiber, stopAt: Fiber): Fiber | null => {\n let completed: Fiber | null = unit;\n\n while (completed) {\n bubbleProperties(completed);\n\n if (completed === stopAt) {\n return null;\n }\n\n if (completed.sibling) {\n return completed.sibling;\n }\n\n completed = completed.return;\n }\n\n return null;\n};\n\nconst bubbleFlagsToRoot = (wip: Fiber) => {\n let current: Fiber = wip;\n let parent = current.return;\n while (parent) {\n parent.subtreeFlags |= current.flags | current.subtreeFlags;\n parent.childLanes |= current.lanes | current.childLanes;\n current = parent;\n parent = parent.return;\n }\n};\n\nconst bubbleProperties = (wip: Fiber) => {\n wip.lanes &= ~getCurrentLanePriority();\n let subtreeFlags = NoFlags;\n let childLanes = NoLanes;\n\n let child = wip.child;\n while (child) {\n subtreeFlags |= child.flags | child.subtreeFlags;\n childLanes |= child.lanes | child.childLanes;\n\n child.return = wip;\n child = child.sibling;\n }\n\n wip.subtreeFlags = subtreeFlags;\n wip.childLanes = childLanes;\n};\n\n// ---------------------------------------------------------------------------\n// reconcileChildren — helpers\n// ---------------------------------------------------------------------------\n\n/** Reuse an existing fiber, marking it for update if its props changed. */\nconst reuseOrCreate = (oldFiber: Fiber, element: RectifyElement, wip: Fiber): Fiber => {\n const newFiber = createWorkInProgress(oldFiber, element.props);\n if (hasPropsChanged(oldFiber.memoizedProps, element.props)) {\n addFlagToFiber(newFiber, UpdateFlag);\n }\n newFiber.return = wip;\n return newFiber;\n};\n\n/** Create a brand-new fiber for `element` and mark it for DOM placement. */\nconst createAndPlace = (element: RectifyElement, wip: Fiber): Fiber => {\n const newFiber = createFiberFromRectifyElement(element);\n newFiber.type = element.type; // createFiberFromRectifyElement leaves type null\n addFlagToFiber(newFiber, PlacementFlag);\n newFiber.return = wip;\n return newFiber;\n};\n\n/**\n * Append `fiber` to the WIP child list at `index` and return it.\n * `prev` is the previously appended sibling (null for the first child).\n */\nconst appendFiber = (\n fiber: Fiber,\n prev: Fiber | null,\n index: number,\n wip: Fiber,\n): Fiber => {\n fiber.index = index;\n if (!prev) wip.child = fiber;\n else prev.sibling = fiber;\n return fiber;\n};\n\n/**\n * Build a key→fiber map from the remaining unconsumed old fibers so\n * reconcileKeyed can do O(1) lookups. Keys fall back to positional index when absent.\n */\nconst buildOldFiberMap = (\n firstRemaining: Fiber | null,\n startIndex: number,\n): Map<string | number, Fiber> => {\n const map = new Map<string | number, Fiber>();\n let fiber: Fiber | null = firstRemaining;\n let i = startIndex;\n while (fiber) {\n map.set(fiber.key ?? i, fiber);\n fiber = fiber.sibling;\n i++;\n }\n return map;\n};\n\n// ---------------------------------------------------------------------------\n// reconcileChildren — passes\n// ---------------------------------------------------------------------------\n\n/**\n * Sequential scan — fast path, no reordering.\n * Walks both lists left-to-right by index as long as keys match consecutively.\n * Stops at the first key divergence and hands the remainder to reconcileKeyed.\n * Returns the index at which it stopped and the next unconsumed old fiber.\n */\nconst reconcileSequential = (\n state: ReconcileState,\n firstOldFiber: Fiber | null,\n): { stoppedAt: number; oldFiber: Fiber | null } => {\n let oldFiber = firstOldFiber;\n let i = 0;\n\n for (; i < state.newElements.length; i++) {\n const element = state.newElements[i];\n const { key: elementKey = null, type: elementType } = element;\n\n if (!oldFiber) break; // old list exhausted\n if (oldFiber.key !== elementKey) break; // keys diverged → hand off to pass 2\n\n if (oldFiber.type === elementType) {\n state.prev = appendFiber(reuseOrCreate(oldFiber, element, state.wip), state.prev, state.index++, state.wip);\n } else {\n // Same key, different type — delete old and place new.\n addFlagToFiber(oldFiber, DeletionFlag);\n state.deletions.push(oldFiber);\n state.prev = appendFiber(createAndPlace(element, state.wip), state.prev, state.index++, state.wip);\n }\n\n oldFiber = oldFiber.sibling;\n }\n\n return { stoppedAt: i, oldFiber };\n};\n\n/**\n * Keyed lookup — handles reordering, insertions, and removals.\n * Builds a key→fiber map from the remaining old fibers and resolves each new\n * element by key (falling back to index). Only runs when reconcileSequential\n * stopped before consuming all new elements.\n */\nconst reconcileKeyed = (\n state: ReconcileState,\n startAt: number,\n remainingOldFiber: Fiber | null,\n): void => {\n const oldFiberMap = buildOldFiberMap(remainingOldFiber, startAt);\n\n // lastPlacedIndex tracks the highest committed index we have seen.\n // Any reused fiber whose committed index is below it was moved rightward.\n let lastPlacedIndex = 0;\n\n for (let i = startAt; i < state.newElements.length; i++) {\n const element = state.newElements[i];\n const { key: elementKey = null, type: elementType } = element;\n const mapKey = elementKey ?? i;\n const matched = oldFiberMap.get(mapKey) ?? null;\n\n if (matched && matched.type === elementType) {\n oldFiberMap.delete(mapKey);\n const newFiber = reuseOrCreate(matched, element, state.wip);\n\n if (matched.index < lastPlacedIndex) {\n addFlagToFiber(newFiber, MoveFlag); // moved right — needs re-insertion\n } else {\n lastPlacedIndex = matched.index;\n }\n\n state.prev = appendFiber(newFiber, state.prev, state.index++, state.wip);\n } else {\n state.prev = appendFiber(createAndPlace(element, state.wip), state.prev, state.index++, state.wip);\n }\n }\n\n // Fibers left in the map have no matching new element — delete them.\n for (const orphan of oldFiberMap.values()) {\n addFlagToFiber(orphan, DeletionFlag);\n state.deletions.push(orphan);\n }\n};\n\n// ---------------------------------------------------------------------------\n// reconcileChildren\n// ---------------------------------------------------------------------------\n\n/**\n * Normalise the raw `children` value into a flat array of `RectifyNode` items\n * ready to be mapped through `createElementFromRectifyNode`.\n *\n * Rules:\n * - ignorable (null / undefined / boolean) → empty array (render nothing)\n * - plain array → use as-is\n * - anything else (string, number, RectifyElement) → single-item array\n */\nconst toChildArray = (children: RectifyNode): RectifyNode[] => {\n if (children == null || typeof children === \"boolean\") return [];\n if (isArray(children)) return children as RectifyNode[];\n return [children as RectifyNode];\n};\n\nconst reconcileChildren = (wip: Fiber, children: RectifyNode): void => {\n const newElements = toChildArray(children)\n .map(createElementFromRectifyNode)\n .filter(isValidRectifyElement);\n\n const state: ReconcileState = { wip, newElements, deletions: [], prev: null, index: 0 };\n const firstOldFiber: Fiber | null = wip.alternate?.child ?? null;\n\n const { stoppedAt, oldFiber } = reconcileSequential(state, firstOldFiber);\n\n if (stoppedAt < newElements.length) {\n // Sequential scan stopped early — resolve the remainder by key.\n reconcileKeyed(state, stoppedAt, oldFiber);\n } else {\n // Pass 1 consumed all new elements — delete any leftover old fibers.\n let leftover: Fiber | null = oldFiber;\n while (leftover) {\n addFlagToFiber(leftover, DeletionFlag);\n state.deletions.push(leftover);\n leftover = leftover.sibling;\n }\n }\n\n if (state.prev) state.prev.sibling = null; // terminate the new sibling chain\n if (state.deletions.length) wip.deletions = state.deletions;\n};\n","import { applyPropsToDom, precacheFiberNode } from \"@rectify-dev/dom-binding\";\nimport { Fiber } from \"@rectify-dev/shared\";\nimport { runEffectCleanups, clearContextSubscriptions } from \"@rectify-dev/hook\";\nimport { NoFlags, MoveFlag, PlacementFlag, UpdateFlag } from \"./RectifyFiberFlags\";\nimport {\n createDomElementFromFiber,\n hasFlagOnFiber,\n getParentDom,\n getHostSibling,\n removeFlagFromFiber,\n} from \"./RectifyFiberService\";\nimport { HostComponent, HostText } from \"./RectifyFiberWorkTags\";\n\nconst MutationMask = PlacementFlag | UpdateFlag | MoveFlag;\n\nconst commitWork = (finishedWork: Fiber) => {\n if (finishedWork.deletions?.length) {\n finishedWork.deletions.forEach(removeHostTree);\n finishedWork.deletions = null;\n }\n\n if (finishedWork.flags & MutationMask) {\n commitMutation(finishedWork);\n syncMemoizedProps(finishedWork);\n }\n\n if (finishedWork.subtreeFlags & MutationMask) {\n let child = finishedWork.child;\n while (child) {\n commitWork(child);\n child = child.sibling;\n }\n }\n\n finishedWork.flags = NoFlags;\n finishedWork.subtreeFlags = NoFlags;\n};\n\nconst syncMemoizedProps = (wip: Fiber) => {\n wip.memoizedProps = wip.pendingProps;\n};\n\n/** Set ref.current = DOM node after the node is placed/updated/moved. */\nconst attachRef = (wip: Fiber): void => {\n const ref = wip.pendingProps?.ref;\n if (ref && typeof ref === \"object\" && \"current\" in ref) {\n ref.current = wip.stateNode;\n }\n};\n\n/** Clear ref.current = null when the fiber is removed from the tree. */\nconst detachRef = (fiber: Fiber): void => {\n const ref = fiber.memoizedProps?.ref;\n if (ref && typeof ref === \"object\" && \"current\" in ref) {\n ref.current = null;\n }\n};\n\nconst insertIntoParent = (wip: Fiber, node: Node): void => {\n const parentDom = getParentDom(wip);\n // Look for a host sibling at this level; if none, check the parent level\n // (handles fibers nested inside function components with no host wrapper).\n const before = getHostSibling(wip) ?? (wip.return ? getHostSibling(wip.return) : null);\n if (before) parentDom.insertBefore(node, before);\n else parentDom.appendChild(node);\n};\n\n/**\n * Physically place or re-place `node` in the DOM and attach its ref.\n * Used for both PlacementFlag (new nodes) and MoveFlag (reordered nodes).\n */\nconst placeNode = (wip: Fiber, node: Node): void => {\n insertIntoParent(wip, node);\n precacheFiberNode(wip, node);\n attachRef(wip);\n};\n\nconst commitMutation = (childFiber: Fiber) => {\n switch (childFiber.workTag) {\n case HostComponent:\n commitMutationHostComponent(childFiber);\n break;\n case HostText:\n commitMutationHostText(childFiber);\n break;\n }\n};\n\nconst commitMutationHostComponent = (wip: Fiber) => {\n if (!wip.stateNode) {\n const node = createDomElementFromFiber(wip);\n precacheFiberNode(wip, node);\n applyPropsToDom(node, wip.memoizedProps, wip.pendingProps);\n wip.stateNode = node;\n }\n\n if (hasFlagOnFiber(wip, PlacementFlag)) {\n placeNode(wip, wip.stateNode!);\n removeFlagFromFiber(wip, PlacementFlag);\n }\n\n if (hasFlagOnFiber(wip, MoveFlag)) {\n // Node already exists in the DOM but at the wrong position — re-insert.\n (wip.stateNode as Element).remove();\n placeNode(wip, wip.stateNode!);\n removeFlagFromFiber(wip, MoveFlag);\n }\n\n if (hasFlagOnFiber(wip, UpdateFlag)) {\n applyPropsToDom(wip.stateNode, wip.memoizedProps, wip.pendingProps);\n precacheFiberNode(wip, wip.stateNode!);\n attachRef(wip);\n removeFlagFromFiber(wip, UpdateFlag);\n }\n};\n\nconst commitMutationHostText = (wip: Fiber) => {\n if (!wip.stateNode) {\n const node = createDomElementFromFiber(wip);\n precacheFiberNode(wip, node);\n wip.stateNode = node;\n }\n\n if (hasFlagOnFiber(wip, PlacementFlag)) {\n placeNode(wip, wip.stateNode!);\n removeFlagFromFiber(wip, PlacementFlag);\n }\n\n if (hasFlagOnFiber(wip, MoveFlag)) {\n (wip.stateNode as Text).remove();\n placeNode(wip, wip.stateNode!);\n removeFlagFromFiber(wip, MoveFlag);\n }\n\n if (hasFlagOnFiber(wip, UpdateFlag)) {\n if (wip.memoizedProps !== wip.pendingProps) {\n (wip.stateNode as Text).nodeValue = String(wip.pendingProps);\n }\n precacheFiberNode(wip, wip.stateNode!);\n removeFlagFromFiber(wip, UpdateFlag);\n }\n};\n\nconst removeHostTree = (fiber: Fiber) => {\n // Fire effect cleanups and unsubscribe from contexts before removing.\n if (fiber.memoizedState) {\n runEffectCleanups(fiber);\n }\n clearContextSubscriptions(fiber);\n\n if (fiber.workTag === HostComponent || fiber.workTag === HostText) {\n detachRef(fiber);\n (fiber.stateNode as Element)?.remove();\n }\n\n let child = fiber.child;\n while (child) {\n removeHostTree(child);\n child = child.sibling;\n }\n};\n\nexport { commitWork };\n","import { Fiber } from \"@rectify-dev/shared\";\nimport { Lanes } from \"./RectifyFiberLanes\";\n\nexport type UpdateQueue = {\n lanes: Lanes;\n fiber: Fiber;\n next: UpdateQueue | null;\n};\n\ntype Instance = {\n head: UpdateQueue | null;\n tail: UpdateQueue | null;\n};\n\nconst instance: Instance = {\n head: null,\n tail: null,\n};\n\nconst enqueueUpdate = (update: UpdateQueue): void => {\n update.next = null;\n\n if (instance.tail === null) {\n instance.head = update;\n instance.tail = update;\n return;\n }\n\n instance.tail.next = update;\n instance.tail = update;\n};\n\nconst dequeueUpdate = (): UpdateQueue | null => {\n const first = instance.head;\n if (first === null) {\n return null;\n }\n\n instance.head = first.next;\n\n if (instance.head === null) {\n instance.tail = null;\n }\n\n first.next = null;\n return first;\n};\n\n/** Returns true when there is at least one pending update in the queue. */\nconst hasUpdate = (): boolean => instance.head !== null;\n\nexport { enqueueUpdate, dequeueUpdate, hasUpdate };\n","import { Fiber, RectifyNode } from \"@rectify-dev/shared\";\nimport { FiberRoot } from \"./RectifyFiberTypes\";\nimport { createHostRootFiber, createWorkInProgress } from \"./RectifyFiber\";\nimport {\n setScheduledFiberRoot,\n getScheduledFiberRoot,\n} from \"./RectifyFiberInstance\";\nimport {\n markContainerAsRoot,\n injectEventPriorityCallbacks,\n} from \"@rectify-dev/dom-binding\";\nimport { workLoop, workLoopOnFiberLanes } from \"./RectifyFiberWorkLoop\";\nimport { commitWork } from \"./RectifyFiberCommitWork\";\nimport {\n setScheduleRerender,\n setMarkFiberDirty,\n flushEffects,\n flushEffectCleanups,\n flushLayoutEffects,\n flushLayoutEffectCleanups,\n} from \"@rectify-dev/hook\";\nimport {\n dequeueUpdate,\n enqueueUpdate,\n hasUpdate,\n UpdateQueue,\n} from \"./RectifyFiberConcurrentUpdate\";\nimport {\n requestUpdateLane,\n setCurrentEventPriority,\n resetCurrentEventPriority,\n setCurrentRenderingLanes,\n getCurrentLanePriority,\n} from \"./RectifyFiberRenderPriority\";\nimport {\n scheduleRenderLane,\n setWorkCallback,\n getResumeCursor,\n clearResumeCursor,\n} from \"./RectifyFiberScheduler\";\nimport { SyncLane } from \"./RectifyFiberLanes\";\n\n// ---------------------------------------------------------------------------\n// Wire up event priority into dom-binding\n// ---------------------------------------------------------------------------\ninjectEventPriorityCallbacks(\n setCurrentEventPriority,\n resetCurrentEventPriority,\n);\n\n// When true, setState calls inside useLayoutEffect must NOT schedule async\n// tasks – they will be drained synchronously by flushLayoutPhase instead.\nlet isFlushingLayoutEffects = false;\n\n// ---------------------------------------------------------------------------\n// Work callback – called by the scheduler for each lane tier\n// ---------------------------------------------------------------------------\nconst performWork = (lanes: number): void => {\n const fiberRoot = getScheduledFiberRoot();\n if (!fiberRoot) return;\n\n // Only flush pending updates when starting a fresh render,\n // not when resuming a yielded concurrent work loop.\n if (!getResumeCursor()) flushPendingUpdates();\n\n setCurrentRenderingLanes(lanes);\n const completed = workLoopOnFiberLanes(fiberRoot.root, lanes);\n\n if (!completed) {\n // workLoopConcurrent saved the cursor inside RectifyFiberScheduler.\n // Re-post a task for the same lane so work continues next frame.\n scheduleRenderLane(lanes);\n return;\n }\n\n // Tree fully reconciled – safe to commit.\n clearResumeCursor();\n commitWork(fiberRoot.root);\n markContainerAsRoot(fiberRoot.root, fiberRoot.containerDom);\n // Flush layout effects synchronously, draining any setState they trigger\n // before the browser gets a chance to paint.\n flushLayoutPhase(fiberRoot);\n // Passive effects (useEffect) are deferred so the browser can paint first.\n schedulePassiveEffects();\n};\n\nsetWorkCallback(performWork);\n\n// ---------------------------------------------------------------------------\n// Injected callbacks — wired into the hook layer at startup\n// ---------------------------------------------------------------------------\n\n/**\n * Called by useState's dispatcher when state changes.\n * Enqueues the fiber for re-render on the appropriate lane.\n */\nconst onScheduleRerender = (fiber: Fiber): void => {\n // Inside useLayoutEffect: force SyncLane so the flush loop picks it up\n // synchronously instead of scheduling an async task.\n const lane = isFlushingLayoutEffects ? SyncLane : requestUpdateLane();\n enqueueUpdate({ lanes: lane, fiber, next: null });\n if (!isFlushingLayoutEffects) {\n scheduleRenderLane(lane);\n }\n};\n\n/**\n * Called by notifyContextConsumers when a Provider value changes.\n * Marks the subscriber's WIP fiber dirty so it fails the bailout and\n * re-renders in the current pass — no second render pass needed.\n *\n * The subscriber set holds committed (current) fibers; their WIP is .alternate.\n * We also bubble childLanes up the WIP tree so workLoopOnFiberLanes descends\n * into the subscriber's subtree.\n */\nconst onMarkFiberDirty = (fiber: Fiber): void => {\n const lane = getCurrentLanePriority();\n\n // Mark both sides so the lane survives createWorkInProgress copies.\n fiber.lanes |= lane;\n const wip = fiber.alternate;\n if (!wip) return;\n\n wip.lanes |= lane;\n\n let parent = wip.return;\n while (parent) {\n if ((parent.childLanes & lane) === lane) break; // already covered above\n parent.childLanes |= lane;\n parent = parent.return;\n }\n};\n\nsetScheduleRerender(onScheduleRerender);\nsetMarkFiberDirty(onMarkFiberDirty);\n\n// ---------------------------------------------------------------------------\n// Public API\n// ---------------------------------------------------------------------------\nexport const createContainer = (container: Element): FiberRoot => {\n return createHostRootFiber(container);\n};\n\nexport const updateContainer = (\n children: RectifyNode,\n fiberRoot: FiberRoot,\n): void => {\n fiberRoot.children = children;\n setScheduledFiberRoot(fiberRoot);\n\n const wipRoot = createWorkInProgress(fiberRoot.root, { children });\n setCurrentRenderingLanes(SyncLane);\n workLoop(wipRoot);\n commitWork(wipRoot);\n fiberRoot.root = wipRoot;\n markContainerAsRoot(wipRoot, fiberRoot.containerDom);\n setScheduledFiberRoot(fiberRoot);\n // Flush layout effects synchronously, draining any setState they trigger\n // before the browser gets a chance to paint.\n flushLayoutPhase(fiberRoot);\n // Passive effects (useEffect) are deferred so the browser can paint first.\n schedulePassiveEffects();\n};\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\n// A single reusable channel; the port1 handler is replaced each time so\n// only the most recently scheduled flush ever runs.\nconst passiveChannel = new MessageChannel();\nconst schedulePassiveEffects = (): void => {\n passiveChannel.port1.onmessage = () => {\n flushEffectCleanups();\n flushEffects();\n };\n passiveChannel.port2.postMessage(null);\n};\n\n/**\n * Flush layout effects synchronously, then re-render and re-commit any state\n * updates triggered inside them – looping until stable. This mirrors React's\n * behaviour where setState inside useLayoutEffect causes a synchronous\n * re-render that the browser never sees as an intermediate frame.\n */\nconst flushLayoutPhase = (fiberRoot: FiberRoot): void => {\n while (true) {\n isFlushingLayoutEffects = true;\n flushLayoutEffectCleanups();\n flushLayoutEffects();\n isFlushingLayoutEffects = false;\n\n // No updates were triggered during layout effects – we are done.\n if (!hasUpdate()) break;\n\n // Drain the updates synchronously (they were enqueued with SyncLane).\n flushPendingUpdates();\n setCurrentRenderingLanes(SyncLane);\n const completed = workLoopOnFiberLanes(fiberRoot.root, SyncLane);\n if (!completed) break; // shouldn't happen for sync lanes\n clearResumeCursor();\n commitWork(fiberRoot.root);\n markContainerAsRoot(fiberRoot.root, fiberRoot.containerDom);\n // Loop back to flush any layout effects produced by this new render.\n }\n};\n\nconst flushPendingUpdates = (): void => {\n let update = dequeueUpdate();\n while (update) {\n propagateLaneToAncestors(update);\n update = dequeueUpdate();\n }\n};\n\n/**\n * Stamps `lane` onto the target fiber and bubbles it up as `childLanes` so\n * `workLoopOnFiberLanes` knows to descend into that subtree.\n */\nconst propagateLaneToAncestors = (updateQueue: UpdateQueue): void => {\n const lane = updateQueue.lanes;\n let fiber: Fiber | null = updateQueue.fiber;\n\n // Mark the fiber itself (and its alternate) with the lane.\n fiber.lanes |= lane;\n if (fiber.alternate) fiber.alternate.lanes |= lane;\n\n // Walk up and set childLanes on every ancestor.\n fiber = fiber.return;\n while (fiber) {\n fiber.childLanes |= lane;\n if (fiber.alternate) fiber.alternate.childLanes |= lane;\n fiber = fiber.return;\n }\n};\n","import {\n listenToAllEventSupported,\n markContainerAsRoot,\n unmarkContainerAsRoot,\n} from \"@rectify-dev/dom-binding\";\nimport { createContainer, updateContainer } from \"@rectify-dev/reconciler\";\nimport { RectifyNode } from \"@rectify-dev/shared\";\n\ntype RectifyDomRoot = {\n render: (node: RectifyNode) => void;\n unmount: () => void;\n};\n\nexport const createRoot = (container: Element): RectifyDomRoot => {\n const hostRoot = createContainer(container);\n markContainerAsRoot(hostRoot.root, container);\n listenToAllEventSupported(container);\n return {\n render: (node: RectifyNode) => {\n updateContainer(node, hostRoot);\n },\n unmount: () => {\n unmarkContainerAsRoot(container);\n },\n };\n};\n","import { FC } from \"@rectify-dev/shared\";\n\nexport type MemoComponent<P = any> = FC<P> & {\n /** Marks this as a memo-wrapped component for the reconciler. */\n _isMemo: true;\n /** The wrapped component that will be called on actual renders. */\n _render: FC<P>;\n /** Custom comparator — defaults to shallow equality when absent. */\n _compare: ((prevProps: P, nextProps: P) => boolean) | null;\n};\n\n/**\n * Wraps a component with a custom props comparator.\n *\n * By default every component already bails out automatically when props are\n * shallowly equal. Use `memo` only when you need a **custom** comparison —\n * for example, deep equality on a specific prop, or ignoring certain keys.\n *\n * @example\n * // Ignore the `style` prop when deciding whether to re-render\n * const Chart = memo(\n * ({ data }) => jsx('canvas', { ... }),\n * (prev, next) => Object.is(prev.data, next.data),\n * );\n */\nexport function memo<P = any>(\n Component: FC<P>,\n compare?: (prevProps: P, nextProps: P) => boolean,\n): MemoComponent<P> {\n const wrapper = ((_props: P) => null) as unknown as MemoComponent<P>;\n wrapper._isMemo = true;\n wrapper._render = Component;\n wrapper._compare = compare ?? null;\n return wrapper;\n}\n"]}
1
+ {"version":3,"sources":["../../rectify-dom-binding/src/events/RectifyEventRegistry.ts","../../rectify-dom-binding/src/events/__main.ts","../../rectify-dom-binding/src/clients/RectifyDomComponentTree.ts","../../rectify-dom-binding/src/events/SyntheticEvent.ts","../../rectify-dom-binding/src/events/RectifyEventPriority.ts","../../rectify-dom-binding/src/events/RectifyDomEventListener.ts","../../rectify-dom-binding/src/events/RectifyEventListener.ts","../../rectify-dom-binding/src/events/RectifyEvent.ts","../../rectify-dom-binding/src/clients/RectifyDomProperties.ts","../../rectify-reconciler/src/RectifyFiberFlags.ts","../../rectify-reconciler/src/RectifyFiberLanes.ts","../../rectify-reconciler/src/RectifyFiberWorkTags.ts","../../rectify-reconciler/src/RectifyFiberService.ts","../../rectify-reconciler/src/RectifyFiber.ts","../../rectify-reconciler/src/RectifyFiberInstance.ts","../../rectify-hook/src/RectifyHookRenderingFiber.ts","../../rectify-hook/src/RectifyHook.ts","../../rectify-hook/src/RectifyHookUseState.ts","../../rectify-hook/src/RectifyHookUseReducer.ts","../../rectify-hook/src/RectifyHookDeps.ts","../../rectify-hook/src/RectifyHookUseEffect.ts","../../rectify-hook/src/RectifyHookUseLayoutEffect.ts","../../rectify-hook/src/RectifyHookUseRef.ts","../../rectify-hook/src/RectifyHookUseMemo.ts","../../rectify-hook/src/RectifyHookUseCallback.ts","../../rectify-hook/src/RectifyHookContext.ts","../../rectify-reconciler/src/RectifyFiberRenderPriority.ts","../../rectify-reconciler/src/RectifyFiberScheduler.ts","../../rectify-reconciler/src/RectifyFiberWorkLoop.ts","../../rectify-reconciler/src/RectifyFiberCommitWork.ts","../../rectify-reconciler/src/RectifyFiberConcurrentUpdate.ts","../../rectify-reconciler/src/RectifyFiberReconciler.ts","../../rectify-dom/src/RectifyDomRoot.ts","../src/RectifyMemo.ts"],"names":["isFunction","instance","update","memo","shallowEqual"],"mappings":"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","file":"index.js","sourcesContent":["import { RectifyDomEventName } from \"./RectifyEventName\";\n\nexport const allNativeEvents: Set<RectifyDomEventName> = new Set();\n\nexport const registrationNameDependencies: {\n [registrationName: string]: Array<RectifyDomEventName>;\n} = {};\n\nexport const nativeEventToRectifyName: Map<RectifyDomEventName, string> =\n new Map();\n\nexport function registerDirectEvent(\n registrationName: string,\n dependencies: Array<RectifyDomEventName>,\n) {\n registrationNameDependencies[registrationName] = dependencies;\n\n for (let i = 0; i < dependencies.length; i++) {\n const dependency = dependencies[i];\n\n allNativeEvents.add(dependency);\n\n if (!nativeEventToRectifyName.has(dependency)) {\n nativeEventToRectifyName.set(dependency, registrationName);\n }\n }\n}\n\nexport function registerNativeEvent() {\n // Mouse\n registerDirectEvent(\"onClick\", [\"click\"]);\n registerDirectEvent(\"onDoubleClick\", [\"dblclick\"]);\n registerDirectEvent(\"onMouseDown\", [\"mousedown\"]);\n registerDirectEvent(\"onMouseUp\", [\"mouseup\"]);\n registerDirectEvent(\"onMouseMove\", [\"mousemove\"]);\n registerDirectEvent(\"onMouseEnter\", [\"mouseenter\"]);\n registerDirectEvent(\"onMouseLeave\", [\"mouseleave\"]);\n registerDirectEvent(\"onContextMenu\", [\"contextmenu\"]);\n\n // Keyboard\n registerDirectEvent(\"onKeyDown\", [\"keydown\"]);\n registerDirectEvent(\"onKeyUp\", [\"keyup\"]);\n registerDirectEvent(\"onKeyPress\", [\"keypress\"]);\n\n // Input / Form\n registerDirectEvent(\"onInput\", [\"input\"]);\n registerDirectEvent(\"onChange\", [\"change\"]);\n registerDirectEvent(\"onSubmit\", [\"submit\"]);\n registerDirectEvent(\"onReset\", [\"reset\"]);\n\n // Focus\n registerDirectEvent(\"onFocus\", [\"focus\"]);\n registerDirectEvent(\"onBlur\", [\"blur\"]);\n\n // Clipboard\n registerDirectEvent(\"onCopy\", [\"copy\"]);\n registerDirectEvent(\"onCut\", [\"cut\"]);\n registerDirectEvent(\"onPaste\", [\"paste\"]);\n\n // Touch\n registerDirectEvent(\"onTouchStart\", [\"touchstart\"]);\n registerDirectEvent(\"onTouchMove\", [\"touchmove\"]);\n registerDirectEvent(\"onTouchEnd\", [\"touchend\"]);\n registerDirectEvent(\"onTouchCancel\", [\"touchcancel\"]);\n\n // Scroll / Wheel\n registerDirectEvent(\"onScroll\", [\"scroll\"]);\n registerDirectEvent(\"onWheel\", [\"wheel\"]);\n\n // Drag\n registerDirectEvent(\"onDrag\", [\"drag\"]);\n registerDirectEvent(\"onDragStart\", [\"dragstart\"]);\n registerDirectEvent(\"onDragEnd\", [\"dragend\"]);\n registerDirectEvent(\"onDragEnter\", [\"dragenter\"]);\n registerDirectEvent(\"onDragLeave\", [\"dragleave\"]);\n registerDirectEvent(\"onDragOver\", [\"dragover\"]);\n registerDirectEvent(\"onDrop\", [\"drop\"]);\n}\n","import { registerNativeEvent } from \"./RectifyEventRegistry\";\n\n/**\n * This function will run immediately when this file mount\n */\nconst main = () => {\n registerNativeEvent();\n};\n\nmain();\n","import { RectifyDOMEventHandleListener } from \"../events/RectifyDomEventTypes\";\nimport { RectifyDomEventName } from \"../events/RectifyEventName\";\nimport { Fiber } from \"@rectify-dev/shared\";\n\nconst randomKey = Math.random().toString(36).slice(2);\nconst internalContainerInstanceKey = \"__rectifyContainer$\" + randomKey;\nconst internalInstanceKey = \"__rectifyFiber$\" + randomKey;\nconst internalEventHandlerListenersKey = \"__rectifyListeners$\" + randomKey;\nconst internalEventHandlesSetKey = \"__rectifyHandles$\" + randomKey;\n\nexport function markContainerAsRoot(\n hostRoot: Fiber,\n node: Element | Node,\n): void {\n (node as any)[internalContainerInstanceKey] = hostRoot;\n}\n\nexport function unmarkContainerAsRoot(node: Element | Node): void {\n (node as any)[internalContainerInstanceKey] = null;\n}\n\nexport function isContainerMarkedAsRoot(node: Element | Node): boolean {\n return !!(node as any)[internalContainerInstanceKey];\n}\n\nexport const precacheFiberNode = (fiber: Fiber, node: Node) => {\n if (!node) return;\n (node as any)[internalInstanceKey] = fiber;\n};\n\nexport const getFiberNodeCached = (node: Node): Fiber | null => {\n if (!node) return null;\n return (node as any)[internalInstanceKey] || null;\n};\n\nexport function setEventHandlerListeners(\n scope: EventTarget | null,\n listeners: Map<string, RectifyDOMEventHandleListener>,\n): void {\n if (!scope) return;\n (scope as any)[internalEventHandlerListenersKey] = listeners;\n}\n\nexport function getEventHandlerListeners(\n scope: EventTarget | null,\n): null | Map<string, RectifyDOMEventHandleListener> {\n if (!scope) return null;\n return (scope as any)[internalEventHandlerListenersKey] || null;\n}\n","import { AnyNativeEvent } from \"./RectifyDomEventListener\";\n\nclass SyntheticEvent {\n target: Element | null;\n currentTarget: Element | null = null;\n nativeEvent: AnyNativeEvent;\n\n private propagationStopped: boolean = false;\n\n constructor(nativeEvent: AnyNativeEvent) {\n this.target = nativeEvent.target as Element;\n this.nativeEvent = nativeEvent;\n }\n\n stopPropagation() {\n this.propagationStopped = true;\n this.nativeEvent.stopPropagation();\n }\n\n isPropagationStopped() {\n return this.propagationStopped;\n }\n}\n\nexport default SyntheticEvent;\n","/**\n * Event priority injection point.\n *\n * @rectify-dev/dom-binding has no dependency on @rectify-dev/reconciler, so the\n * reconciler injects its priority functions here at startup via\n * `injectEventPriorityCallbacks`. The event dispatcher then calls\n * `setEventPriority` / `resetEventPriority` around every handler invocation\n * so that state updates triggered by user events are assigned the correct lane.\n *\n * Lane values are plain numbers (not imported) to keep the dependency graph clean:\n * InputLane = 0b00010 = 2\n * DefaultLane = 0b00100 = 4 (used as the reset value)\n */\n\ntype PriorityFn = (priority: number) => void;\ntype ResetFn = () => void;\n\nlet _set: PriorityFn = () => {};\nlet _reset: ResetFn = () => {};\n\n/** Called once by the reconciler to wire up priority tracking. */\nexport const injectEventPriorityCallbacks = (\n set: PriorityFn,\n reset: ResetFn,\n): void => {\n _set = set;\n _reset = reset;\n};\n\n/** Mark the start of a user-interaction event (sets InputLane). */\nexport const setEventPriority = (priority: number): void => _set(priority);\n\n/** Restore default priority after an event handler returns. */\nexport const resetEventPriority = (): void => _reset();\n\n/** Numeric constant – mirrors InputLane in @rectify-dev/reconciler. */\nexport const INPUT_LANE = 0b00010;\n","import { Fiber, isFunction } from \"@rectify-dev/shared\";\nimport {\n getEventHandlerListeners,\n getFiberNodeCached,\n} from \"../clients/RectifyDomComponentTree\";\nimport { RectifyDomEventName } from \"./RectifyEventName\";\nimport SyntheticEvent from \"./SyntheticEvent\";\nimport { nativeEventToRectifyName } from \"./RectifyEventRegistry\";\nimport {\n INPUT_LANE,\n setEventPriority,\n resetEventPriority,\n} from \"./RectifyEventPriority\";\n\nexport type AnyNativeEvent = Event | KeyboardEvent | MouseEvent | TouchEvent;\n\nexport const createEventListenerWrapper = (\n targetContainer: EventTarget,\n domEventName: RectifyDomEventName,\n) => {\n return dispatchEvent.bind(null, domEventName, targetContainer);\n};\n\nconst getEventTarget = (nativeEvent: AnyNativeEvent) => {\n return (nativeEvent.target || nativeEvent.srcElement) as Node;\n};\n\nconst dispatchEvent = (\n domEventName: RectifyDomEventName,\n targetContainer: EventTarget,\n nativeEvent: AnyNativeEvent,\n) => {\n const targetNode = getEventTarget(nativeEvent);\n const targetFiber = getFiberNodeCached(targetNode);\n\n if (!targetFiber) return;\n\n const syntheticEvent = new SyntheticEvent(nativeEvent);\n\n const path: Fiber[] = [];\n let fiber: Fiber | null = targetFiber;\n\n while (fiber) {\n path.push(fiber);\n if (fiber.stateNode === targetContainer) {\n break;\n }\n fiber = fiber.return;\n }\n\n for (const currFiber of path) {\n if (syntheticEvent.isPropagationStopped()) break;\n\n const eventHandlerMap = getEventHandlerListeners(\n currFiber.stateNode as Node,\n );\n if (!eventHandlerMap) continue;\n const rectifyName = nativeEventToRectifyName.get(domEventName);\n if (!rectifyName) continue;\n const handler = eventHandlerMap.get(rectifyName);\n\n if (!isFunction(handler)) continue;\n\n syntheticEvent.currentTarget = currFiber.stateNode as Element;\n setEventPriority(INPUT_LANE);\n try {\n handler(syntheticEvent);\n } finally {\n resetEventPriority();\n }\n }\n\n syntheticEvent.currentTarget = null;\n};\n","export function addEventBubbleListener(\n target: EventTarget,\n eventType: string,\n listener: EventListenerOrEventListenerObject | null,\n): EventListenerOrEventListenerObject | null {\n target.addEventListener(eventType, listener, false);\n return listener;\n}\n\nexport function addEventCaptureListener(\n target: EventTarget,\n eventType: string,\n listener: EventListenerOrEventListenerObject | null,\n): EventListenerOrEventListenerObject | null {\n target.addEventListener(eventType, listener, true);\n return listener;\n}\n\nexport function addEventCaptureListenerWithPassiveFlag(\n target: EventTarget,\n eventType: string,\n listener: EventListenerOrEventListenerObject | null,\n passive: boolean,\n): EventListenerOrEventListenerObject | null {\n target.addEventListener(eventType, listener, {\n capture: true,\n passive,\n });\n return listener;\n}\n\nexport function addEventBubbleListenerWithPassiveFlag(\n target: EventTarget,\n eventType: string,\n listener: EventListenerOrEventListenerObject | null,\n passive: boolean,\n): EventListenerOrEventListenerObject | null {\n target.addEventListener(eventType, listener, {\n passive,\n });\n return listener;\n}\n\nexport function removeEventListener(\n target: EventTarget,\n eventType: string,\n listener: EventListenerOrEventListenerObject | null,\n capture: boolean,\n): void {\n target.removeEventListener(eventType, listener, capture);\n}\n","import { createEventListenerWrapper } from \"./RectifyDomEventListener\";\nimport { addEventBubbleListener, addEventCaptureListener } from \"./RectifyEventListener\";\nimport { RectifyDomEventName } from \"./RectifyEventName\";\nimport { allNativeEvents } from \"./RectifyEventRegistry\";\n\nconst listeningMarker =\n \"_rectifyEventListening$\" + Math.random().toString(36).slice(2);\n\nexport const listenToAllEventSupported = (dom: EventTarget) => {\n if ((dom as any)[listeningMarker]) return;\n (dom as any)[listeningMarker] = true;\n\n allNativeEvents.forEach((domEventName) =>\n listenToNativeEvent(domEventName, dom),\n );\n};\n\nconst listenToNativeEvent = (\n domEventName: RectifyDomEventName,\n target: EventTarget,\n) => {\n const listener = createEventListenerWrapper(target, domEventName);\n addEventCaptureListener(target, domEventName, listener as any);\n};\n","import { RectifyDomEventName } from \"./../events/RectifyEventName\";\nimport { isPlainObject } from \"@rectify-dev/shared\";\nimport {\n getEventHandlerListeners,\n setEventHandlerListeners,\n} from \"./RectifyDomComponentTree\";\nimport { RectifyDOMEventHandleListener } from \"../events/RectifyDomEventTypes\";\n\nconst isEvent = (k: string) => k.startsWith(\"on\");\nconst isProperty = (k: string) =>\n k !== \"children\" && k !== \"ref\" && !isEvent(k);\n\nconst unitlessProperties = new Set([\n \"zIndex\",\n \"opacity\",\n \"fontWeight\",\n \"lineHeight\",\n \"flex\",\n \"flexGrow\",\n \"flexShrink\",\n]);\n\nfunction convertStyleObjectToString(styleObj: object) {\n return Object.entries(styleObj)\n .map(([key, value]) => {\n const cssKey = key.replace(/[A-Z]/g, (m) => \"-\" + m.toLowerCase());\n\n let cssValue = value;\n\n if (typeof value === \"number\" && !unitlessProperties.has(key)) {\n cssValue = `${value}px`;\n }\n\n return `${cssKey}:${cssValue}`;\n })\n .join(\"; \");\n}\n\nexport const applyPropsToDom = (\n node: Node,\n prevProps: any = {},\n nextProps: any = {},\n) => {\n const element = node as Element;\n\n const eventNode =\n getEventHandlerListeners(element) ||\n new Map<RectifyDomEventName, RectifyDOMEventHandleListener>();\n\n for (const k in prevProps) {\n if (isEvent(k) && !(k in nextProps)) {\n eventNode.delete(k as RectifyDomEventName);\n }\n if (isProperty(k) && !(k in nextProps)) {\n (element as any)[k] = \"\";\n element.removeAttribute(k);\n }\n }\n\n for (const k in nextProps) {\n if (k === \"children\" || k === \"ref\") continue;\n\n if (isEvent(k)) {\n if (prevProps?.[k] !== nextProps?.[k]) {\n eventNode.set(k, nextProps[k]);\n }\n } else if (k === \"style\") {\n element.setAttribute(\"style\", convertStyleObjectToString(nextProps[k]));\n } else {\n const v = nextProps[k];\n // handle className -> class\n if (k === \"className\") element.setAttribute(\"class\", v ?? \"\");\n else if (v === false || v === null || v === undefined)\n element.removeAttribute(k);\n else element.setAttribute(k, String(v));\n }\n }\n\n setEventHandlerListeners(element, eventNode);\n};\n","export const NoFlags /* */ = 0;\nexport const PlacementFlag /* */ = 1 << 0;\nexport const UpdateFlag /* */ = 1 << 1;\nexport const DeletionFlag /* */ = 1 << 2;\nexport const MoveFlag /* */ = 1 << 3; // fiber reused but at a different index\nexport const RefFlag /* */ = 1 << 4; // ref prop added, removed, or swapped\n","export type Lanes = number;\nexport type Lane = number;\n\nexport const NoLanes /* */ = 0b00000;\nexport const SyncLane /* */ = 0b00001; // Immediate / initial render\nexport const InputLane /* */ = 0b00010; // User interactions (click, keyboard …)\nexport const DefaultLane /* */ = 0b00100; // Async / normal state updates\nexport const TransitionLane /* */ = 0b01000; // Deferred (startTransition)\nexport const IdleLane /* */ = 0b10000; // Background / idle work\n","export const FunctionComponent /** */ = Symbol.for(\"rectify.function_component\");\nexport const HostComponent /** */ = Symbol.for(\"rectify.host_component\");\nexport const HostText /** */ = Symbol.for(\"rectify.host_text\");\nexport const HostRoot /** */ = Symbol.for(\"rectify.host_root\");\nexport const FragmentComponent /** */ = Symbol.for(\"rectify.fragment_component\");\nexport const ContextProvider /** */ = Symbol.for(\"rectify.context_provider\");\nexport const MemoComponent /** */ = Symbol.for(\"rectify.memo_component\");","import {\n Fiber,\n isFunction,\n isPlainObject,\n isTextNode,\n omit,\n RECTIFY_ELEMENT_TYPE,\n RECTIFY_FRAGMENT_TYPE,\n RECTIFY_TEXT_TYPE,\n RectifyElement,\n shallowEqual,\n} from \"@rectify-dev/shared\";\nimport {\n FragmentComponent,\n FunctionComponent,\n HostComponent,\n HostRoot,\n HostText,\n ContextProvider,\n MemoComponent,\n} from \"./RectifyFiberWorkTags\";\n\nconst addFlagToFiber = (fiber: Fiber, flag: number): void => {\n if (hasFlagOnFiber(fiber, flag)) return;\n fiber.flags |= flag;\n};\n\nconst removeFlagFromFiber = (fiber: Fiber | null, flag: number): void => {\n if (!hasFlagOnFiber(fiber, flag)) return;\n fiber!.flags &= ~flag;\n};\n\nconst hasFlagOnFiber = (fiber: Fiber | null, flag: number): boolean => {\n if (!fiber) return false;\n return (fiber.flags & flag) !== 0;\n};\n\nconst getFiberTagFromElement = (element: RectifyElement) => {\n switch (element.$$typeof) {\n case RECTIFY_ELEMENT_TYPE:\n if (isFunction(element.type) && (element.type as any)?._context === element.type) {\n return ContextProvider;\n }\n if (isFunction(element.type) && (element.type as any)?._isMemo === true) {\n return MemoComponent;\n }\n return isFunction(element.type) ? FunctionComponent : HostComponent;\n case RECTIFY_TEXT_TYPE:\n return HostText;\n case RECTIFY_FRAGMENT_TYPE:\n return FragmentComponent;\n default:\n return null;\n }\n};\n\nconst createDomElementFromFiber = (fiber: Fiber): Node => {\n switch (fiber.workTag) {\n case HostText:\n return document.createTextNode(fiber.pendingProps);\n default:\n return document.createElement(fiber.type as string);\n }\n};\n\nconst getParentDom = (fiber: Fiber): Node => {\n if (fiber.workTag === HostRoot)\n return fiber.stateNode as Node;\n\n let p = fiber.return;\n while (p) {\n if (p.workTag === HostComponent) return p.stateNode as Node;\n if (p.workTag === HostRoot) return p.stateNode as Node;\n p = p.return;\n }\n\n throw new Error(\"No parent DOM found.\");\n};\n\n/**\n * Returns the first host DOM node (HostComponent or HostText) found by a\n * depth-first pre-order walk of the subtree rooted at `fiber`.\n * Returns null if the subtree contains no host nodes.\n */\nfunction findFirstHostNode(fiber: Fiber): Node | null {\n if (fiber.workTag === HostComponent || fiber.workTag === HostText) {\n return fiber.stateNode as Node;\n }\n\n let child = fiber.child;\n while (child) {\n const found = findFirstHostNode(child);\n if (found) return found;\n child = child.sibling;\n }\n\n return null;\n}\n\n/**\n * Finds the nearest host DOM node that this fiber should be inserted before.\n * Walks the fiber's siblings; for each sibling performs a full depth-first\n * search so arbitrarily nested FunctionComponent / FragmentComponent wrappers\n * are transparent.\n */\nfunction getHostSibling(fiber: Fiber): Node | null {\n let sibling = fiber.sibling;\n while (sibling) {\n const node = findFirstHostNode(sibling);\n if (node) return node;\n sibling = sibling.sibling;\n }\n\n return null;\n}\n\nconst hasPropsChanged = (prevProps: any, nextProps: any) => {\n const CHILDREN_KEY = \"children\";\n const REF_KEY = \"ref\";\n if (isPlainObject(prevProps) && isPlainObject(nextProps)) {\n return !shallowEqual(\n omit(prevProps, [CHILDREN_KEY, REF_KEY]),\n omit(nextProps, [CHILDREN_KEY, REF_KEY]),\n );\n }\n\n return prevProps !== nextProps;\n};\n\nexport {\n addFlagToFiber,\n removeFlagFromFiber,\n hasFlagOnFiber,\n getFiberTagFromElement,\n createDomElementFromFiber,\n getParentDom,\n getHostSibling,\n hasPropsChanged,\n};\n","import { Fiber, RectifyElement, RectifyKey } from \"@rectify-dev/shared\";\nimport { NoFlags } from \"./RectifyFiberFlags\";\nimport { NoLanes } from \"./RectifyFiberLanes\";\nimport { HostComponent, HostRoot } from \"./RectifyFiberWorkTags\";\nimport { getFiberTagFromElement } from \"./RectifyFiberService\";\n\nexport const createFiber = (\n workTag: symbol,\n pendingProps: any,\n key: RectifyKey = null,\n): Fiber => {\n return {\n index: 0,\n key,\n workTag,\n type: null,\n pendingProps,\n memoizedProps: null,\n child: null,\n sibling: null,\n return: null,\n stateNode: null,\n deletions: null,\n alternate: null,\n\n lanes: NoLanes,\n childLanes: NoLanes,\n\n subtreeFlags: NoFlags,\n flags: NoFlags,\n\n memoizedState: null,\n refCleanup: null,\n };\n};\n\nexport const createHostRootFiber = (containerDom: Element) => {\n const root = createFiber(HostRoot, null);\n root.stateNode = containerDom; // containerDom lives on the fiber, not the global\n return {\n containerDom,\n root,\n pendingLanes: NoLanes,\n children: null,\n };\n};\n\nexport const createWorkInProgress = (current: Fiber, pendingProps: any) => {\n let wip = current.alternate;\n\n if (!wip) {\n wip = createFiber(current.workTag, pendingProps, current.key);\n wip.type = current.type;\n wip.stateNode = current.stateNode;\n\n wip.alternate = current;\n current.alternate = wip;\n } else {\n wip.pendingProps = pendingProps;\n wip.deletions = null;\n }\n\n wip.memoizedProps = current.memoizedProps;\n wip.memoizedState = current.memoizedState;\n wip.refCleanup = current.refCleanup;\n wip.return = current.return;\n wip.child = current.child;\n wip.sibling = current.sibling;\n wip.flags = NoFlags;\n wip.subtreeFlags = NoFlags;\n wip.lanes = current.lanes;\n wip.childLanes = current.childLanes;\n return wip;\n};\n\nexport const createFiberFromRectifyElement = (\n element: RectifyElement,\n): Fiber => {\n const tag = getFiberTagFromElement(element) ?? HostComponent;\n return createFiber(tag, element.props, element.key);\n};\n","import { FiberRoot } from \"./RectifyFiberTypes\";\n\ntype Instance = {\n fiberRoot: FiberRoot | null;\n};\n\nconst instance: Instance = {\n fiberRoot: null,\n};\n\nexport const setScheduledFiberRoot = (fiberRoot: FiberRoot | null): void => {\n instance.fiberRoot = fiberRoot;\n};\n\nexport const getScheduledFiberRoot = (): FiberRoot | null => {\n return instance.fiberRoot;\n};\n","import { Fiber, Hook } from \"@rectify-dev/shared\";\n\ntype ScheduleRerender = (fiber: Fiber) => void;\n\ntype Instance = {\n fiberRendering: Fiber | null;\n hookIndex: number;\n scheduleRerender: ScheduleRerender | null;\n};\n\nconst instance: Instance = {\n fiberRendering: null,\n hookIndex: 0,\n scheduleRerender: null,\n};\n\nexport const getFiberRendering = (): Fiber | null => instance.fiberRendering;\n\nexport const setFiberRendering = (fiber: Fiber | null): void => {\n instance.fiberRendering = fiber;\n};\n\nexport const getHookIndex = (): number => instance.hookIndex;\n\nexport const setHookIndex = (index: number): void => {\n instance.hookIndex = index;\n};\n\nexport const nextHookIndex = (): void => {\n instance.hookIndex += 1;\n};\n\nexport const setScheduleRerender = (fn: ScheduleRerender): void => {\n instance.scheduleRerender = fn;\n};\n\nexport const scheduleRerender = (fiber: Fiber): void => {\n instance.scheduleRerender?.(fiber);\n};\n\n// ---------------------------------------------------------------------------\n// Shared hook-slot utility\n// ---------------------------------------------------------------------------\n\n/**\n * Walks the hook linked list on `fiber` to the slot at `hookIndex`.\n * Returns the existing hook if found, or `null` on mount (slot doesn't exist\n * yet). In the mount case, `prevHook` points to the slot just before the gap\n * so the caller can attach the new hook.\n */\nexport const getHookSlot = (\n fiber: Fiber,\n hookIndex: number,\n): { hook: Hook | null; prevHook: Hook | null } => {\n let hook: Hook | null = fiber.memoizedState;\n let prevHook: Hook | null = null;\n\n for (let i = 0; i < hookIndex; i++) {\n prevHook = hook;\n hook = hook?.next ?? null;\n }\n\n return { hook, prevHook };\n};\n\n/**\n * Attaches `newHook` into `fiber`'s linked list at the position indicated by\n * `prevHook` (null means insert at the head).\n */\nexport const attachHook = (fiber: Fiber, newHook: Hook, prevHook: Hook | null): void => {\n if (prevHook) prevHook.next = newHook;\n else fiber.memoizedState = newHook;\n};\n","import { FC, Fiber } from \"@rectify-dev/shared\";\nimport { setFiberRendering, setHookIndex } from \"./RectifyHookRenderingFiber\";\n\nconst prepareToUseHooks = (wip: Fiber) => {\n setFiberRendering(wip);\n setHookIndex(0);\n};\n\nconst finishUsingHooks = () => {\n setFiberRendering(null);\n};\n\nconst withHooks = (wip: Fiber, Component: FC) => {\n const NewComponent = (props: any) => {\n prepareToUseHooks(wip);\n const result = Component(props);\n finishUsingHooks();\n return result;\n };\n\n return NewComponent;\n};\n\nexport { withHooks };\n","import { Hook, isFunction } from \"@rectify-dev/shared\";\nimport { StateDispatcher, StateUpdater } from \"./RectifyHookTypes\";\nimport {\n getFiberRendering,\n getHookIndex,\n nextHookIndex,\n getHookSlot,\n attachHook,\n scheduleRerender,\n} from \"./RectifyHookRenderingFiber\";\n\ntype StateInitializer<S> = S | (() => S);\n\nconst getInitialState = <S>(initialState: S | (() => S)): S =>\n isFunction(initialState) ? initialState() : initialState;\n\nconst getState = <S>(update: StateUpdater<S>, prevState: S) =>\n isFunction(update) ? update(prevState) : update;\n\nfunction useState<S>(): [S | undefined, StateDispatcher<S | undefined>];\nfunction useState<S>(initialState: S): [S, StateDispatcher<S>];\nfunction useState<S>(initialState: () => S): [S, StateDispatcher<S>];\nfunction useState<S>(\n initialState?: StateInitializer<S>,\n): [S | undefined, StateDispatcher<S | undefined>] {\n const fiber = getFiberRendering();\n if (!fiber) {\n throw new Error(\"useState must be used within a function component.\");\n }\n const hookIndex = getHookIndex();\n nextHookIndex();\n\n let { hook: state, prevHook } = getHookSlot(fiber, hookIndex) as {\n hook: Hook<S | undefined> | null;\n prevHook: Hook<S | undefined> | null;\n };\n\n if (!state) {\n state = {\n memoizedState: getInitialState(initialState),\n queue: null,\n next: null,\n };\n attachHook(fiber, state, prevHook);\n }\n\n let update = state.queue;\n while (update) {\n state.memoizedState = getState(update.action, state.memoizedState);\n update = update.next;\n }\n state.queue = null;\n\n const dispatcher = (updater: StateUpdater<S | undefined>) => {\n const update = { action: updater, next: null };\n\n if (!state.queue) {\n state.queue = update;\n } else {\n let last = state.queue;\n while (last.next) {\n last = last.next;\n }\n last.next = update;\n }\n scheduleRerender(fiber);\n };\n\n return [state.memoizedState, dispatcher] as const;\n}\n\nexport default useState;\n","import { Hook, isFunction } from \"@rectify-dev/shared\";\nimport {\n getFiberRendering,\n getHookIndex,\n nextHookIndex,\n getHookSlot,\n attachHook,\n scheduleRerender,\n} from \"./RectifyHookRenderingFiber\";\n\nexport type Reducer<S, A> = (state: S, action: A) => S;\nexport type Dispatch<A> = (action: A) => void;\n\nfunction useReducer<S, A>(reducer: Reducer<S, A>, initialState: S): [S, Dispatch<A>];\nfunction useReducer<S, A, I>(\n reducer: Reducer<S, A>,\n initialArg: I,\n init: (arg: I) => S,\n): [S, Dispatch<A>];\nfunction useReducer<S, A, I>(\n reducer: Reducer<S, A>,\n initialArg: S | I,\n init?: (arg: I) => S,\n): [S, Dispatch<A>] {\n const fiber = getFiberRendering();\n if (!fiber) {\n throw new Error(\"useReducer must be used within a function component.\");\n }\n\n const hookIndex = getHookIndex();\n nextHookIndex();\n\n let { hook, prevHook } = getHookSlot(fiber, hookIndex) as {\n hook: Hook<S> | null;\n prevHook: Hook<S> | null;\n };\n\n if (!hook) {\n // Mount — compute initial state once.\n const initialState: S = isFunction(init)\n ? (init as (arg: I) => S)(initialArg as I)\n : (initialArg as S);\n\n hook = { memoizedState: initialState, queue: null, next: null };\n attachHook(fiber, hook, prevHook);\n }\n\n // Drain the update queue, applying each action through the reducer.\n let update = hook.queue;\n while (update) {\n hook.memoizedState = reducer(hook.memoizedState, update.action as A);\n update = update.next;\n }\n hook.queue = null;\n\n const dispatch: Dispatch<A> = (action: A) => {\n // UpdateQueue<S> stores `action` as `S | ((prev: S) => S)`, but for\n // useReducer the action is an arbitrary type A — cast to satisfy the\n // shared queue type while keeping the public API fully typed.\n const update = { action: action as any, next: null };\n\n if (!hook!.queue) {\n hook!.queue = update;\n } else {\n let last = hook!.queue;\n while (last.next) {\n last = last.next;\n }\n last.next = update;\n }\n scheduleRerender(fiber);\n };\n\n return [hook.memoizedState, dispatch];\n}\n\nexport default useReducer;\n","/**\n * Returns true when the dependency arrays are different.\n * Used by useEffect, useMemo and useCallback.\n */\nexport const depsChanged = (\n prev: any[] | undefined,\n next: any[] | undefined,\n): boolean => {\n if (!prev || !next) return true;\n if (prev.length !== next.length) return true;\n return next.some((dep, i) => !Object.is(dep, prev[i]));\n};\n","import { Fiber, Hook } from \"@rectify-dev/shared\";\nimport {\n getFiberRendering,\n getHookIndex,\n nextHookIndex,\n getHookSlot,\n attachHook,\n} from \"./RectifyHookRenderingFiber\";\nimport { depsChanged } from \"./RectifyHookDeps\";\nimport type { EffectState } from \"./RectifyHookTypes\";\n\n// Effects collected during render, flushed after commit.\nconst pendingEffects: EffectState[] = [];\n\n// Cleanups deferred from the render phase — fired before new effects run.\nconst pendingCleanups: EffectState[] = [];\n\nfunction useEffect(\n create: () => void | (() => void),\n deps?: any[],\n): void {\n const fiber = getFiberRendering();\n if (!fiber) {\n throw new Error(\"useEffect must be used within a function component.\");\n }\n\n const hookIndex = getHookIndex();\n nextHookIndex();\n\n const { hook, prevHook } = getHookSlot(fiber, hookIndex);\n\n if (!hook) {\n // Mount — always schedule the effect.\n const effectState: EffectState = { create, deps, cleanup: undefined };\n const newHook: Hook = { memoizedState: effectState, queue: null, next: null };\n attachHook(fiber, newHook, prevHook);\n pendingEffects.push(effectState);\n } else {\n // Update — only re-run if deps changed.\n const prev = hook.memoizedState as EffectState;\n if (depsChanged(prev.deps, deps)) {\n pendingCleanups.push(prev); // defer old cleanup to post-commit\n const effectState: EffectState = { create, deps, cleanup: undefined };\n hook.memoizedState = effectState;\n pendingEffects.push(effectState);\n }\n }\n}\n\n/**\n * Run cleanups queued during the render phase (dep-changed effects).\n * Must be called after commit but before flushEffects.\n */\nexport const flushEffectCleanups = (): void => {\n for (const effect of pendingCleanups.splice(0)) {\n effect.cleanup?.();\n }\n};\n\n/** Run all effects collected during the last render. Called after commit. */\nexport const flushEffects = (): void => {\n for (const effect of pendingEffects.splice(0)) {\n const cleanup = effect.create();\n if (typeof cleanup === \"function\") {\n effect.cleanup = cleanup;\n }\n }\n};\n\n/**\n * Called during the commit deletion pass. Walks a fiber's hook linked list\n * and fires the cleanup of every effect hook found on it.\n */\nexport const runEffectCleanups = (fiber: Fiber): void => {\n let hook = fiber.memoizedState;\n while (hook) {\n const state = hook.memoizedState;\n if (state !== null && typeof (state as EffectState).create === \"function\") {\n (state as EffectState).cleanup?.();\n }\n hook = hook.next;\n }\n};\n\nexport default useEffect;\n","import { Fiber, Hook } from \"@rectify-dev/shared\";\nimport {\n getFiberRendering,\n getHookIndex,\n nextHookIndex,\n getHookSlot,\n attachHook,\n} from \"./RectifyHookRenderingFiber\";\nimport { depsChanged } from \"./RectifyHookDeps\";\nimport type { EffectState } from \"./RectifyHookTypes\";\n\n// Layout effects collected during render, flushed synchronously after commit.\nconst pendingLayoutEffects: EffectState[] = [];\n\n// Layout cleanups deferred from the render phase.\nconst pendingLayoutCleanups: EffectState[] = [];\n\n/**\n * Like `useEffect`, but fires **synchronously after every DOM mutation** and\n * before the browser has a chance to paint. Use this when you need to read\n * layout or synchronously re-style the DOM (tooltips, scroll restoration,\n * measuring element sizes, etc.).\n *\n * Prefer `useEffect` for everything else — `useLayoutEffect` blocks the paint.\n *\n * @example\n * useLayoutEffect(() => {\n * const { height } = ref.current.getBoundingClientRect();\n * setTooltipTop(-height);\n * }, []);\n */\nfunction useLayoutEffect(\n create: () => void | (() => void),\n deps?: any[],\n): void {\n const fiber = getFiberRendering();\n if (!fiber) {\n throw new Error(\"useLayoutEffect must be used within a function component.\");\n }\n\n const hookIndex = getHookIndex();\n nextHookIndex();\n\n const { hook, prevHook } = getHookSlot(fiber, hookIndex);\n\n if (!hook) {\n // Mount — always schedule the layout effect.\n const effectState: EffectState = { create, deps, cleanup: undefined };\n const newHook: Hook = { memoizedState: effectState, queue: null, next: null };\n attachHook(fiber, newHook, prevHook);\n pendingLayoutEffects.push(effectState);\n } else {\n // Update — only re-run if deps changed.\n const prev = hook.memoizedState as EffectState;\n if (depsChanged(prev.deps, deps)) {\n pendingLayoutCleanups.push(prev); // defer old cleanup to post-commit\n const effectState: EffectState = { create, deps, cleanup: undefined };\n hook.memoizedState = effectState;\n pendingLayoutEffects.push(effectState);\n }\n }\n}\n\n/**\n * Run layout cleanups queued during render (dep-changed layout effects).\n * Called synchronously after commit, before flushLayoutEffects.\n */\nexport const flushLayoutEffectCleanups = (): void => {\n for (const effect of pendingLayoutCleanups.splice(0)) {\n effect.cleanup?.();\n }\n};\n\n/**\n * Run all layout effects collected during the last render.\n * Called synchronously after commit, before the browser paints.\n */\nexport const flushLayoutEffects = (): void => {\n for (const effect of pendingLayoutEffects.splice(0)) {\n const cleanup = effect.create();\n if (typeof cleanup === \"function\") {\n effect.cleanup = cleanup;\n }\n }\n};\n\n/**\n * Called during the commit deletion pass. Fires layout cleanups on removed\n * fibers so they don't observe a stale DOM.\n */\nexport const runLayoutEffectCleanups = (fiber: Fiber): void => {\n let hook = fiber.memoizedState;\n while (hook) {\n const state = hook.memoizedState;\n if (state !== null && typeof (state as EffectState).create === \"function\") {\n (state as EffectState).cleanup?.();\n }\n hook = hook.next;\n }\n};\n\nexport default useLayoutEffect;\n","import {\n getFiberRendering,\n getHookIndex,\n nextHookIndex,\n getHookSlot,\n attachHook,\n} from \"./RectifyHookRenderingFiber\";\n\nexport type RefObject<T> = { current: T };\n\n/**\n * Returns a stable mutable ref object whose `.current` property is initialised\n * to `initialValue`. The same object is returned on every render — updating\n * `.current` does NOT trigger a re-render.\n *\n * Two common uses:\n * 1. Hold a DOM node: const el = useRef<HTMLDivElement>(null)\n * 2. Hold a mutable value across renders without causing re-renders.\n */\nfunction useRef<T>(initialValue: T): RefObject<T>;\nfunction useRef<T>(initialValue: T | null): RefObject<T | null>;\nfunction useRef<T = undefined>(): RefObject<T | undefined>;\nfunction useRef<T>(initialValue?: T): RefObject<T | undefined> {\n const fiber = getFiberRendering();\n if (!fiber) {\n throw new Error(\"useRef must be used within a function component.\");\n }\n\n const hookIndex = getHookIndex();\n nextHookIndex();\n\n const { hook, prevHook } = getHookSlot(fiber, hookIndex);\n\n if (!hook) {\n // Mount — create the ref object once and attach it to the linked list.\n const ref: RefObject<T | undefined> = { current: initialValue };\n const newHook = { memoizedState: ref, queue: null, next: null };\n attachHook(fiber, newHook, prevHook);\n return ref;\n }\n\n // Update — the ref object already exists; return it unchanged.\n // Callers mutate .current directly, which never triggers a re-render.\n return hook.memoizedState as RefObject<T | undefined>;\n}\n\nexport default useRef;\n","import {\n getFiberRendering,\n getHookIndex,\n nextHookIndex,\n getHookSlot,\n attachHook,\n} from \"./RectifyHookRenderingFiber\";\nimport { depsChanged } from \"./RectifyHookDeps\";\n\ntype MemoState<T> = {\n value: T;\n deps: any[] | undefined;\n};\n\n/**\n * Returns a memoized value. `factory` is only re-executed when one of the\n * `deps` changes (using `Object.is` comparison), otherwise the cached value\n * from the previous render is returned unchanged.\n *\n * @example\n * const sorted = useMemo(() => [...list].sort(), [list]);\n */\nfunction useMemo<T>(factory: () => T, deps: any[]): T {\n const fiber = getFiberRendering();\n if (!fiber) {\n throw new Error(\"useMemo must be used within a function component.\");\n }\n\n const hookIndex = getHookIndex();\n nextHookIndex();\n\n const { hook, prevHook } = getHookSlot(fiber, hookIndex);\n\n if (!hook) {\n // Mount – compute and cache the initial value.\n const state: MemoState<T> = { value: factory(), deps };\n attachHook(fiber, { memoizedState: state, queue: null, next: null }, prevHook);\n return state.value;\n }\n\n // Update – recompute only when deps changed.\n const prev = hook.memoizedState as MemoState<T>;\n if (depsChanged(prev.deps, deps)) {\n const state: MemoState<T> = { value: factory(), deps };\n hook.memoizedState = state;\n return state.value;\n }\n\n return prev.value;\n}\n\nexport default useMemo;\n","import useMemo from \"./RectifyHookUseMemo\";\n\n/**\n * Returns a memoized callback. The same function reference is returned on\n * every render unless one of the `deps` changes.\n *\n * This is sugar over `useMemo(() => fn, deps)` — it keeps function identity\n * stable so child components that compare props by reference don't re-render\n * unnecessarily.\n *\n * @example\n * const handleClick = useCallback(() => doSomething(id), [id]);\n */\nfunction useCallback<T extends (...args: any[]) => any>(\n callback: T,\n deps: any[],\n): T {\n return useMemo(() => callback, deps);\n}\n\nexport default useCallback;\n","import { Fiber } from \"@rectify-dev/shared\";\nimport { getFiberRendering } from \"./RectifyHookRenderingFiber\";\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\n/**\n * A context object that is also its own Provider component.\n * Both forms are equivalent:\n * jsx(MyContext, { value, children }) // Context as Provider\n * jsx(MyContext.Provider, { value, children }) // Classic Provider form\n */\nexport type RectifyContext<T> = {\n (props: { value: T; children?: any }): null;\n /** Self-reference used by the reconciler to identify Provider fibers. */\n _context: RectifyContext<T>;\n _defaultValue: T;\n _subscribers: Set<Fiber>;\n /** Alias to self — `Context.Provider === Context`. */\n Provider: RectifyContext<T>;\n};\n\n// ---------------------------------------------------------------------------\n// Mark-dirty injection (provided by the reconciler at startup)\n// ---------------------------------------------------------------------------\n\ntype MarkFiberDirty = (fiber: Fiber) => void;\nlet markFiberDirtyFn: MarkFiberDirty | null = null;\n\n/** Injected by the reconciler so context can mark subscriber lanes directly. */\nexport const setMarkFiberDirty = (fn: MarkFiberDirty): void => {\n markFiberDirtyFn = fn;\n};\n\n// ---------------------------------------------------------------------------\n// Per-fiber subscription tracking (for cleanup on unmount)\n// ---------------------------------------------------------------------------\n\n/**\n * Maps each fiber to the contexts it has subscribed to.\n * WeakMap so fibers that become unreachable are GC'd automatically.\n */\nconst fiberSubscriptions = new WeakMap<Fiber, Set<RectifyContext<any>>>();\n\n// ---------------------------------------------------------------------------\n// Public API\n// ---------------------------------------------------------------------------\n\n/**\n * Creates a new context. The returned object is itself a Provider component,\n * so both forms below are equivalent:\n *\n * @example\n * const ThemeCtx = createContext<'light' | 'dark'>('light');\n *\n * // Option A – Context used directly as Provider\n * jsx(ThemeCtx, { value: 'dark', children: ... })\n *\n * // Option B – Classic .Provider form\n * jsx(ThemeCtx.Provider, { value: 'dark', children: ... })\n */\nexport function createContext<T>(defaultValue: T): RectifyContext<T> {\n // The function body is intentionally a no-op — the reconciler gives this\n // fiber a ContextProvider work tag and handles it without calling the fn.\n function ProviderFn(_props: { value: T; children?: any }): null {\n return null;\n }\n\n const context = ProviderFn as unknown as RectifyContext<T>;\n context._context = context; // self-reference: identifies Provider fibers\n context._defaultValue = defaultValue;\n context._subscribers = new Set();\n context.Provider = context; // Provider is an alias to self\n\n return context;\n}\n\n/**\n * Reads the current value of `context` for the calling component.\n *\n * Walks up the fiber tree to the nearest matching Provider and reads its\n * `pendingProps.value` directly — no render-time stack required. This means\n * the correct value is always returned even when the Provider did not\n * re-render in the current pass.\n *\n * The component re-renders whenever the nearest Provider supplies a new value\n * (compared with `Object.is`). Unlike other hooks this does NOT consume a\n * hook slot and may be called conditionally.\n *\n * @example\n * const theme = useContext(ThemeCtx); // 'light' | 'dark'\n */\nexport function useContext<T>(context: RectifyContext<T>): T {\n const fiber = getFiberRendering();\n if (!fiber) {\n throw new Error(\"useContext must be used within a function component.\");\n }\n\n // Walk up the fiber tree to find the nearest Provider for this context.\n let ancestor = fiber.return;\n while (ancestor) {\n if ((ancestor.type as any)?._context === context) {\n // Replace any stale subscription from the previous incarnation of this\n // fiber (its alternate) so the subscriber set never accumulates stale refs.\n if (fiber.alternate) {\n context._subscribers.delete(fiber.alternate);\n const altSet = fiberSubscriptions.get(fiber.alternate);\n if (altSet) {\n altSet.delete(context);\n if (altSet.size === 0) fiberSubscriptions.delete(fiber.alternate);\n }\n }\n\n context._subscribers.add(fiber);\n let ctxSet = fiberSubscriptions.get(fiber);\n if (!ctxSet) {\n ctxSet = new Set();\n fiberSubscriptions.set(fiber, ctxSet);\n }\n ctxSet.add(context);\n\n // Read the value straight from the Provider's pending props.\n // This is always correct: if the Provider re-rendered this pass its\n // pendingProps hold the new value; if it didn't, pendingProps equals\n // the last committed value (copied by createWorkInProgress).\n return ancestor.pendingProps.value as T;\n }\n ancestor = ancestor.return;\n }\n\n // No Provider found — return the default value (no subscription needed).\n return context._defaultValue;\n}\n\n// ---------------------------------------------------------------------------\n// Reconciler helpers\n// ---------------------------------------------------------------------------\n\n/**\n * Mark all subscribers of `context` dirty so they skip the bailout and\n * re-render in the current pass. Called by `beginWork` when a ContextProvider\n * detects that its value has changed. Marks lanes directly instead of\n * scheduling a second render so consumers update in the same render pass.\n */\nexport function notifyContextConsumers<T>(context: RectifyContext<T>): void {\n if (!markFiberDirtyFn) return;\n for (const subscriber of context._subscribers) {\n markFiberDirtyFn(subscriber);\n }\n}\n\n/**\n * Unregister `fiber` from every context it subscribed to.\n * Called during the commit deletion pass.\n */\nexport function clearContextSubscriptions(fiber: Fiber): void {\n const ctxSet = fiberSubscriptions.get(fiber);\n if (!ctxSet) return;\n\n for (const context of ctxSet) {\n context._subscribers.delete(fiber);\n }\n\n fiberSubscriptions.delete(fiber);\n}\n","import { DefaultLane, Lane, Lanes, SyncLane } from \"./RectifyFiberLanes\";\n\n// ---------------------------------------------------------------------------\n// Event priority – updated by the DOM event dispatcher\n// ---------------------------------------------------------------------------\n\nlet currentEventPriority: Lane = DefaultLane;\n\nexport const setCurrentEventPriority = (lane: Lane): void => {\n currentEventPriority = lane;\n};\n\nexport const resetCurrentEventPriority = (): void => {\n currentEventPriority = DefaultLane;\n};\n\n/**\n * Returns the lane that should be assigned to the current state update.\n * Inside a user event handler this will be InputLane; in async callbacks\n * (fetch, timers) it falls back to DefaultLane.\n */\nexport const requestUpdateLane = (): Lane => currentEventPriority;\n\n// ---------------------------------------------------------------------------\n// Rendering lanes – set by the scheduler before each render pass\n// ---------------------------------------------------------------------------\n\nlet currentRenderingLanes: Lanes = SyncLane;\n\nexport const setCurrentRenderingLanes = (lanes: Lanes): void => {\n currentRenderingLanes = lanes;\n};\n\nexport const getCurrentLanePriority = (): Lanes => currentRenderingLanes;\n","import { Fiber } from \"@rectify-dev/shared\";\nimport {\n DefaultLane,\n IdleLane,\n InputLane,\n Lane,\n Lanes,\n NoLanes,\n SyncLane,\n TransitionLane,\n} from \"./RectifyFiberLanes\";\n\n// ---------------------------------------------------------------------------\n// Frame budget / shouldYield\n// ---------------------------------------------------------------------------\n\n/** Max ms of render work to perform per scheduler task (foundation for time-slicing). */\nconst FRAME_BUDGET_MS = 5;\n\nlet frameStart = 0;\n\n/**\n * Returns true when the current work slice has run longer than FRAME_BUDGET_MS.\n * Use this inside tight work loops to yield back to the browser.\n */\nexport const shouldYield = (): boolean =>\n performance.now() - frameStart > FRAME_BUDGET_MS;\n\n// ---------------------------------------------------------------------------\n// Work callback – injected by the reconciler\n// ---------------------------------------------------------------------------\n\ntype WorkCallback = (lanes: Lanes) => void;\n\nlet doWork: WorkCallback | null = null;\n\n/** Inject the render function that the scheduler calls when a task fires. */\nexport const setWorkCallback = (cb: WorkCallback): void => {\n doWork = cb;\n};\n\n// ---------------------------------------------------------------------------\n// Resume cursor – the exact fiber workLoopConcurrent stopped at\n// ---------------------------------------------------------------------------\n\n/**\n * When workLoopConcurrent yields mid-tree this holds the exact fiber it\n * stopped at. The next task passes this back so work truly continues from\n * where it left off rather than restarting from the WIP root.\n */\nlet resumeCursor: Fiber | null = null;\n\nexport const setResumeCursor = (fiber: Fiber | null): void => {\n resumeCursor = fiber;\n};\n\nexport const getResumeCursor = (): Fiber | null => resumeCursor;\n\nexport const clearResumeCursor = (): void => {\n resumeCursor = null;\n};\n\n// ---------------------------------------------------------------------------\n// Pending lanes\n// ---------------------------------------------------------------------------\n\n/** Bitfield of lanes enqueued but not yet processed. */\nlet pendingLanes: Lanes = NoLanes;\n\n/**\n * Enqueue a render for `lane` and ensure the appropriate scheduler task is\n * posted. Multiple calls for the same lane before the task fires are\n * deduplicated – only one task is ever in flight per scheduling tier.\n */\nexport const scheduleRenderLane = (lane: Lane): void => {\n pendingLanes |= lane;\n\n if (lane & (SyncLane | InputLane)) {\n // Highest async priority: runs before the next paint via microtask queue.\n scheduleMicrotask();\n } else if (lane & DefaultLane) {\n // Normal async priority: MessageChannel macrotask, yields to browser.\n scheduleMessageTask();\n } else if (lane & TransitionLane) {\n // Deferred: setTimeout(0) – lower priority than regular tasks.\n scheduleTimeout();\n } else if (lane & IdleLane) {\n // Background: requestIdleCallback when the main thread is idle.\n scheduleIdle();\n }\n};\n\n// ---------------------------------------------------------------------------\n// Internal flush helper\n// ---------------------------------------------------------------------------\n\nconst flush = (mask: Lanes): void => {\n const lanes = pendingLanes & mask;\n if (!lanes) return;\n pendingLanes &= ~lanes;\n frameStart = performance.now();\n doWork?.(lanes);\n};\n\n// ---------------------------------------------------------------------------\n// Microtask scheduler (SyncLane | InputLane)\n// ---------------------------------------------------------------------------\n\nconst MICROTASK_MASK = SyncLane | InputLane;\nlet microtaskScheduled = false;\n\nconst scheduleMicrotask = (): void => {\n if (microtaskScheduled) return;\n microtaskScheduled = true;\n queueMicrotask(() => {\n microtaskScheduled = false;\n flush(MICROTASK_MASK);\n });\n};\n\n// ---------------------------------------------------------------------------\n// MessageChannel scheduler (DefaultLane)\n// ---------------------------------------------------------------------------\n\nconst DEFAULT_MASK = DefaultLane;\nconst mc = new MessageChannel();\nlet mcScheduled = false;\n\nmc.port1.onmessage = () => {\n mcScheduled = false;\n flush(DEFAULT_MASK);\n};\n\nconst scheduleMessageTask = (): void => {\n if (mcScheduled) return;\n mcScheduled = true;\n mc.port2.postMessage(null);\n};\n\n// ---------------------------------------------------------------------------\n// setTimeout scheduler (TransitionLane)\n// ---------------------------------------------------------------------------\n\nconst TRANSITION_MASK = TransitionLane;\nlet timeoutHandle: ReturnType<typeof setTimeout> | null = null;\n\nconst scheduleTimeout = (): void => {\n if (timeoutHandle !== null) return;\n timeoutHandle = setTimeout(() => {\n timeoutHandle = null;\n flush(TRANSITION_MASK);\n }, 0);\n};\n\n// ---------------------------------------------------------------------------\n// requestIdleCallback scheduler (IdleLane)\n// ---------------------------------------------------------------------------\n\nconst IDLE_MASK = IdleLane;\nlet idleHandle: number | null = null;\n\nconst scheduleIdle = (): void => {\n if (idleHandle !== null) return;\n\n const run = () => {\n idleHandle = null;\n flush(IDLE_MASK);\n };\n\n if (typeof requestIdleCallback !== \"undefined\") {\n idleHandle = requestIdleCallback(run, { timeout: 300 }) as unknown as number;\n } else {\n idleHandle = setTimeout(run, 300) as unknown as number;\n }\n};\n","import {\n createElementFromRectifyNode,\n Fiber,\n isArray,\n isFunction,\n isValidRectifyElement,\n RectifyElement,\n RectifyNode,\n shallowEqual,\n} from \"@rectify-dev/shared\";\nimport {\n FunctionComponent,\n HostComponent,\n HostRoot,\n ContextProvider,\n MemoComponent,\n FragmentComponent,\n} from \"./RectifyFiberWorkTags\";\nimport { withHooks, notifyContextConsumers } from \"@rectify-dev/hook\";\nimport { addFlagToFiber, hasPropsChanged } from \"./RectifyFiberService\";\nimport {\n DeletionFlag,\n MoveFlag,\n NoFlags,\n PlacementFlag,\n RefFlag,\n UpdateFlag,\n} from \"./RectifyFiberFlags\";\nimport { Lanes, NoLanes, SyncLane, InputLane } from \"./RectifyFiberLanes\";\nimport {\n createFiberFromRectifyElement,\n createWorkInProgress,\n} from \"./RectifyFiber\";\nimport { getCurrentLanePriority } from \"./RectifyFiberRenderPriority\";\nimport {\n shouldYield,\n getResumeCursor,\n setResumeCursor,\n clearResumeCursor,\n} from \"./RectifyFiberScheduler\";\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\n/** Mutable state threaded through the reconcileChildren pass functions. */\ntype ReconcileState = {\n wip: Fiber;\n newElements: RectifyElement[];\n deletions: Fiber[];\n prev: Fiber | null;\n index: number;\n};\n\n// ---------------------------------------------------------------------------\n// Implementation\n// ---------------------------------------------------------------------------\n\nconst swapCurrentForWip = (current: Fiber, wip: Fiber) => {\n const parent = wip.return;\n if (!parent) return;\n\n if (parent.child === current) {\n parent.child = wip;\n return;\n }\n\n let prevSibling = parent.child;\n while (prevSibling && prevSibling.sibling !== current) {\n prevSibling = prevSibling.sibling;\n }\n if (prevSibling) prevSibling.sibling = wip;\n};\n\nexport const workLoop = (wipRoot: Fiber) => {\n let workInProgress: Fiber | null = wipRoot;\n\n while (workInProgress) {\n const next = beginWork(workInProgress);\n\n if (next) {\n workInProgress = next;\n } else {\n workInProgress = completeUnitOfWork(workInProgress, wipRoot);\n }\n }\n};\n\n/**\n * Interruptible work loop used for non-urgent lanes (Default / Transition / Idle).\n * Yields back to the browser when the frame budget is exceeded; the scheduler\n * will re-post a task to continue with the remaining pending lanes.\n */\nexport const workLoopConcurrent = (wipRoot: Fiber): boolean => {\n // Resume from the saved cursor if we yielded on a previous task,\n // otherwise start fresh from the WIP root.\n let workInProgress: Fiber | null = getResumeCursor() ?? wipRoot;\n clearResumeCursor();\n\n while (workInProgress && !shouldYield()) {\n const next = beginWork(workInProgress);\n\n if (next) {\n workInProgress = next;\n } else {\n workInProgress = completeUnitOfWork(workInProgress, wipRoot);\n }\n }\n\n if (workInProgress !== null) {\n // Yielded early – save the cursor so the next task resumes here.\n setResumeCursor(workInProgress);\n return false;\n }\n\n return true;\n};\n\n/**\n * Returns true when the subtree rooted at wipRoot was fully processed for the\n * given renderLanes, false when a concurrent work loop yielded early.\n */\nexport const workLoopOnFiberLanes = (\n wipRoot: Fiber,\n renderLanes: Lanes,\n): boolean => {\n if (wipRoot.lanes & renderLanes) {\n const wip = createWorkInProgress(wipRoot, wipRoot.pendingProps);\n swapCurrentForWip(wipRoot, wip);\n\n const isSync = !!(renderLanes & (SyncLane | InputLane));\n let completed: boolean;\n if (isSync) {\n workLoop(wip);\n completed = true;\n } else {\n completed = workLoopConcurrent(wip);\n }\n\n if (completed) bubbleFlagsToRoot(wip);\n return completed;\n }\n\n if (wipRoot.childLanes & renderLanes) {\n let child: Fiber | null = wipRoot.child;\n while (child) {\n const done = workLoopOnFiberLanes(child, renderLanes);\n if (!done) return false; // propagate early-exit upward\n child = child.sibling;\n }\n }\n\n return true;\n};\n\n/**\n * Bailout helper: re-links the current tree's children as WIP nodes under\n * `wip` without calling the component function. Each cloned child will be\n * visited by the work loop and may itself bail out or re-render depending on\n * its own pending lanes.\n */\nconst cloneChildFibers = (wip: Fiber): Fiber | null => {\n const currentChild = wip.alternate?.child ?? null;\n if (!currentChild) {\n wip.child = null;\n return null;\n }\n\n let oldChild: Fiber | null = currentChild;\n let prevNewChild: Fiber | null = null;\n\n while (oldChild) {\n const newChild = createWorkInProgress(oldChild, oldChild.pendingProps);\n newChild.return = wip;\n\n if (!prevNewChild) {\n wip.child = newChild;\n } else {\n prevNewChild.sibling = newChild;\n }\n\n prevNewChild = newChild;\n oldChild = oldChild.sibling;\n }\n\n if (prevNewChild) prevNewChild.sibling = null;\n\n return wip.child;\n};\n\n// ---------------------------------------------------------------------------\n// beginWork helpers\n// ---------------------------------------------------------------------------\n\n/** Returns true when this fiber has no own pending work in the current pass. */\nconst hasNoPendingWork = (wip: Fiber): boolean =>\n !(wip.lanes & getCurrentLanePriority());\n\n/** Returns true when this is an update (not a mount). */\nconst isUpdate = (wip: Fiber): boolean => wip.alternate !== null;\n\n/**\n * Runs a function component (or memo-wrapped component) through hooks,\n * then reconciles the output into children.\n */\nconst renderFunctionComponent = (wip: Fiber, Component: Function): void => {\n const ComponentWithHooks = withHooks(wip, Component as any);\n const children = ComponentWithHooks(wip.pendingProps);\n reconcileChildren(wip, children);\n};\n\n/** Reads the context object off a ContextProvider fiber's type. */\nconst getProviderContext = (wip: Fiber) =>\n (wip.type as unknown as { _context: any })._context;\n\n// ---------------------------------------------------------------------------\n// beginWork\n// ---------------------------------------------------------------------------\n\nconst beginWork = (wip: Fiber): Fiber | null => {\n switch (wip.workTag) {\n case MemoComponent: {\n const memo = wip.type as any;\n const render = memo._render;\n if (!isFunction(render)) break;\n\n // Bailout: use custom comparator when provided, fall back to shallowEqual.\n if (isUpdate(wip) && hasNoPendingWork(wip)) {\n const equal = memo._compare\n ? memo._compare(wip.memoizedProps, wip.pendingProps)\n : shallowEqual(wip.memoizedProps, wip.pendingProps);\n if (equal) return cloneChildFibers(wip);\n }\n\n renderFunctionComponent(wip, render);\n break;\n }\n\n case FunctionComponent: {\n const Component = wip.type;\n if (!isFunction(Component)) break;\n\n // Bailout: props unchanged and no own pending state update.\n // Cloned children let the work loop still descend into any grandchild\n // that does have pending work.\n if (\n isUpdate(wip) &&\n hasNoPendingWork(wip) &&\n shallowEqual(wip.memoizedProps, wip.pendingProps)\n ) {\n return cloneChildFibers(wip);\n }\n\n renderFunctionComponent(wip, Component as Function);\n break;\n }\n\n case FragmentComponent:\n case HostRoot:\n case HostComponent: {\n reconcileChildren(wip, wip.pendingProps?.children);\n break;\n }\n\n case ContextProvider: {\n // Bailout: value unchanged and no own pending work.\n // Children are cloned so the work loop still descends into them —\n // each child manages its own bailout independently.\n if (\n isUpdate(wip) &&\n hasNoPendingWork(wip) &&\n Object.is(wip.alternate!.memoizedProps?.value, wip.pendingProps?.value)\n ) {\n return cloneChildFibers(wip);\n }\n\n // Reconcile first so WIP child fibers exist before we mark subscribers.\n reconcileChildren(wip, wip.pendingProps?.children);\n\n // Notify subscribers when value changed so they re-render in this pass.\n if (isUpdate(wip)) {\n const prevValue = wip.alternate!.memoizedProps?.value;\n const nextValue = wip.pendingProps?.value;\n if (!Object.is(prevValue, nextValue)) {\n notifyContextConsumers(getProviderContext(wip));\n }\n }\n break;\n }\n }\n\n return wip.child;\n};\n\nconst completeUnitOfWork = (unit: Fiber, stopAt: Fiber): Fiber | null => {\n let completed: Fiber | null = unit;\n\n while (completed) {\n bubbleProperties(completed);\n\n if (completed === stopAt) {\n return null;\n }\n\n if (completed.sibling) {\n return completed.sibling;\n }\n\n completed = completed.return;\n }\n\n return null;\n};\n\nconst bubbleFlagsToRoot = (wip: Fiber) => {\n let current: Fiber = wip;\n let parent = current.return;\n while (parent) {\n parent.subtreeFlags |= current.flags | current.subtreeFlags;\n parent.childLanes |= current.lanes | current.childLanes;\n current = parent;\n parent = parent.return;\n }\n};\n\nconst bubbleProperties = (wip: Fiber) => {\n wip.lanes &= ~getCurrentLanePriority();\n let subtreeFlags = NoFlags;\n let childLanes = NoLanes;\n\n let child = wip.child;\n while (child) {\n subtreeFlags |= child.flags | child.subtreeFlags;\n childLanes |= child.lanes | child.childLanes;\n\n child.return = wip;\n child = child.sibling;\n }\n\n wip.subtreeFlags = subtreeFlags;\n wip.childLanes = childLanes;\n};\n\n// ---------------------------------------------------------------------------\n// reconcileChildren — helpers\n// ---------------------------------------------------------------------------\n\n/** Reuse an existing fiber, marking it for update if its props changed. */\nconst reuseOrCreate = (oldFiber: Fiber, element: RectifyElement, wip: Fiber): Fiber => {\n const newFiber = createWorkInProgress(oldFiber, element.props);\n if (hasPropsChanged(oldFiber.memoizedProps, element.props)) {\n addFlagToFiber(newFiber, UpdateFlag);\n }\n // Track ref changes independently so refs get attached/detached even when\n // no other props changed.\n if ((oldFiber.memoizedProps?.ref ?? null) !== (element.props?.ref ?? null)) {\n addFlagToFiber(newFiber, RefFlag);\n }\n newFiber.return = wip;\n return newFiber;\n};\n\n/** Create a brand-new fiber for `element` and mark it for DOM placement. */\nconst createAndPlace = (element: RectifyElement, wip: Fiber): Fiber => {\n const newFiber = createFiberFromRectifyElement(element);\n newFiber.type = element.type; // createFiberFromRectifyElement leaves type null\n addFlagToFiber(newFiber, PlacementFlag);\n newFiber.return = wip;\n return newFiber;\n};\n\n/**\n * Append `fiber` to the WIP child list at `index` and return it.\n * `prev` is the previously appended sibling (null for the first child).\n */\nconst appendFiber = (\n fiber: Fiber,\n prev: Fiber | null,\n index: number,\n wip: Fiber,\n): Fiber => {\n fiber.index = index;\n if (!prev) wip.child = fiber;\n else prev.sibling = fiber;\n return fiber;\n};\n\n/**\n * Build a key→fiber map from the remaining unconsumed old fibers so\n * reconcileKeyed can do O(1) lookups. Keys fall back to positional index when absent.\n */\nconst buildOldFiberMap = (\n firstRemaining: Fiber | null,\n startIndex: number,\n): Map<string | number, Fiber> => {\n const map = new Map<string | number, Fiber>();\n let fiber: Fiber | null = firstRemaining;\n let i = startIndex;\n while (fiber) {\n map.set(fiber.key ?? i, fiber);\n fiber = fiber.sibling;\n i++;\n }\n return map;\n};\n\n// ---------------------------------------------------------------------------\n// reconcileChildren — passes\n// ---------------------------------------------------------------------------\n\n/**\n * Sequential scan — fast path, no reordering.\n * Walks both lists left-to-right by index as long as keys match consecutively.\n * Stops at the first key divergence and hands the remainder to reconcileKeyed.\n * Returns the index at which it stopped and the next unconsumed old fiber.\n */\nconst reconcileSequential = (\n state: ReconcileState,\n firstOldFiber: Fiber | null,\n): { stoppedAt: number; oldFiber: Fiber | null } => {\n let oldFiber = firstOldFiber;\n let i = 0;\n\n for (; i < state.newElements.length; i++) {\n const element = state.newElements[i];\n const { key: elementKey = null, type: elementType } = element;\n\n if (!oldFiber) break; // old list exhausted\n if (oldFiber.key !== elementKey) break; // keys diverged → hand off to pass 2\n\n if (oldFiber.type === elementType) {\n state.prev = appendFiber(reuseOrCreate(oldFiber, element, state.wip), state.prev, state.index++, state.wip);\n } else {\n // Same key, different type — delete old and place new.\n addFlagToFiber(oldFiber, DeletionFlag);\n state.deletions.push(oldFiber);\n state.prev = appendFiber(createAndPlace(element, state.wip), state.prev, state.index++, state.wip);\n }\n\n oldFiber = oldFiber.sibling;\n }\n\n return { stoppedAt: i, oldFiber };\n};\n\n/**\n * Keyed lookup — handles reordering, insertions, and removals.\n * Builds a key→fiber map from the remaining old fibers and resolves each new\n * element by key (falling back to index). Only runs when reconcileSequential\n * stopped before consuming all new elements.\n */\nconst reconcileKeyed = (\n state: ReconcileState,\n startAt: number,\n remainingOldFiber: Fiber | null,\n): void => {\n const oldFiberMap = buildOldFiberMap(remainingOldFiber, startAt);\n\n // lastPlacedIndex tracks the highest committed index we have seen.\n // Any reused fiber whose committed index is below it was moved rightward.\n let lastPlacedIndex = 0;\n\n for (let i = startAt; i < state.newElements.length; i++) {\n const element = state.newElements[i];\n const { key: elementKey = null, type: elementType } = element;\n const mapKey = elementKey ?? i;\n const matched = oldFiberMap.get(mapKey) ?? null;\n\n if (matched && matched.type === elementType) {\n oldFiberMap.delete(mapKey);\n const newFiber = reuseOrCreate(matched, element, state.wip);\n\n if (matched.index < lastPlacedIndex) {\n addFlagToFiber(newFiber, MoveFlag); // moved right — needs re-insertion\n } else {\n lastPlacedIndex = matched.index;\n }\n\n state.prev = appendFiber(newFiber, state.prev, state.index++, state.wip);\n } else {\n state.prev = appendFiber(createAndPlace(element, state.wip), state.prev, state.index++, state.wip);\n }\n }\n\n // Fibers left in the map have no matching new element — delete them.\n for (const orphan of oldFiberMap.values()) {\n addFlagToFiber(orphan, DeletionFlag);\n state.deletions.push(orphan);\n }\n};\n\n// ---------------------------------------------------------------------------\n// reconcileChildren\n// ---------------------------------------------------------------------------\n\n/**\n * Normalise the raw `children` value into a flat array of `RectifyNode` items\n * ready to be mapped through `createElementFromRectifyNode`.\n *\n * Rules:\n * - ignorable (null / undefined / boolean) → empty array (render nothing)\n * - plain array → use as-is\n * - anything else (string, number, RectifyElement) → single-item array\n */\nconst toChildArray = (children: RectifyNode): RectifyNode[] => {\n if (children == null || typeof children === \"boolean\") return [];\n if (isArray(children)) return children as RectifyNode[];\n return [children as RectifyNode];\n};\n\nconst reconcileChildren = (wip: Fiber, children: RectifyNode): void => {\n const newElements = toChildArray(children)\n .map(createElementFromRectifyNode)\n .filter(isValidRectifyElement);\n\n const state: ReconcileState = { wip, newElements, deletions: [], prev: null, index: 0 };\n const firstOldFiber: Fiber | null = wip.alternate?.child ?? null;\n\n const { stoppedAt, oldFiber } = reconcileSequential(state, firstOldFiber);\n\n if (stoppedAt < newElements.length) {\n // Sequential scan stopped early — resolve the remainder by key.\n reconcileKeyed(state, stoppedAt, oldFiber);\n } else {\n // Pass 1 consumed all new elements — delete any leftover old fibers.\n let leftover: Fiber | null = oldFiber;\n while (leftover) {\n addFlagToFiber(leftover, DeletionFlag);\n state.deletions.push(leftover);\n leftover = leftover.sibling;\n }\n }\n\n if (state.prev) state.prev.sibling = null; // terminate the new sibling chain\n if (state.deletions.length) wip.deletions = state.deletions;\n};\n","import { applyPropsToDom, precacheFiberNode } from \"@rectify-dev/dom-binding\";\nimport { Fiber } from \"@rectify-dev/shared\";\nimport { runEffectCleanups, clearContextSubscriptions } from \"@rectify-dev/hook\";\nimport { NoFlags, MoveFlag, PlacementFlag, RefFlag, UpdateFlag } from \"./RectifyFiberFlags\";\nimport {\n createDomElementFromFiber,\n hasFlagOnFiber,\n getParentDom,\n getHostSibling,\n removeFlagFromFiber,\n} from \"./RectifyFiberService\";\nimport { HostComponent, HostText } from \"./RectifyFiberWorkTags\";\n\nconst MutationMask = PlacementFlag | UpdateFlag | MoveFlag | RefFlag;\n\nconst commitWork = (finishedWork: Fiber) => {\n if (finishedWork.deletions?.length) {\n finishedWork.deletions.forEach(removeHostTree);\n finishedWork.deletions = null;\n }\n\n if (finishedWork.flags & MutationMask) {\n commitMutation(finishedWork);\n syncMemoizedProps(finishedWork);\n }\n\n if (finishedWork.subtreeFlags & MutationMask) {\n let child = finishedWork.child;\n while (child) {\n commitWork(child);\n child = child.sibling;\n }\n }\n\n finishedWork.flags = NoFlags;\n finishedWork.subtreeFlags = NoFlags;\n};\n\nconst syncMemoizedProps = (wip: Fiber) => {\n wip.memoizedProps = wip.pendingProps;\n};\n\n/** Attach a ref after a node is placed or the ref prop changes.\n * For callback refs, the return value is stored as a cleanup to be called\n * before the next attach or on unmount (React 19-style cleanup refs). */\nconst attachRef = (wip: Fiber): void => {\n const ref = wip.pendingProps?.ref;\n if (!ref) return;\n if (typeof ref === \"function\") {\n const cleanup = ref(wip.stateNode);\n wip.refCleanup = typeof cleanup === \"function\" ? cleanup : null;\n } else if (typeof ref === \"object\" && \"current\" in ref) {\n ref.current = wip.stateNode;\n }\n};\n\n/** Detach a ref when the fiber is removed or the ref prop changes.\n * Calls the stored cleanup (if any), otherwise falls back to `ref(null)` /\n * clearing `.current`. */\nconst detachRef = (fiber: Fiber): void => {\n if (fiber.refCleanup) {\n fiber.refCleanup();\n fiber.refCleanup = null;\n return;\n }\n const ref = fiber.memoizedProps?.ref;\n if (!ref) return;\n if (typeof ref === \"function\") {\n ref(null);\n } else if (typeof ref === \"object\" && \"current\" in ref) {\n ref.current = null;\n }\n};\n\nconst insertIntoParent = (wip: Fiber, node: Node): void => {\n const parentDom = getParentDom(wip);\n // Look for a host sibling at this level; if none, check the parent level\n // (handles fibers nested inside function components with no host wrapper).\n const before = getHostSibling(wip) ?? (wip.return ? getHostSibling(wip.return) : null);\n if (before) parentDom.insertBefore(node, before);\n else parentDom.appendChild(node);\n};\n\n/**\n * Physically place or re-place `node` in the DOM and attach its ref.\n * Used for both PlacementFlag (new nodes) and MoveFlag (reordered nodes).\n */\nconst placeNode = (wip: Fiber, node: Node): void => {\n insertIntoParent(wip, node);\n precacheFiberNode(wip, node);\n attachRef(wip);\n};\n\nconst commitMutation = (childFiber: Fiber) => {\n switch (childFiber.workTag) {\n case HostComponent:\n commitMutationHostComponent(childFiber);\n break;\n case HostText:\n commitMutationHostText(childFiber);\n break;\n }\n};\n\nconst commitMutationHostComponent = (wip: Fiber) => {\n if (!wip.stateNode) {\n const node = createDomElementFromFiber(wip);\n precacheFiberNode(wip, node);\n applyPropsToDom(node, wip.memoizedProps, wip.pendingProps);\n wip.stateNode = node;\n }\n\n if (hasFlagOnFiber(wip, PlacementFlag)) {\n placeNode(wip, wip.stateNode!);\n removeFlagFromFiber(wip, PlacementFlag);\n }\n\n if (hasFlagOnFiber(wip, MoveFlag)) {\n // Node already exists in the DOM but at the wrong position — re-insert.\n (wip.stateNode as Element).remove();\n placeNode(wip, wip.stateNode!);\n removeFlagFromFiber(wip, MoveFlag);\n }\n\n if (hasFlagOnFiber(wip, UpdateFlag)) {\n applyPropsToDom(wip.stateNode, wip.memoizedProps, wip.pendingProps);\n precacheFiberNode(wip, wip.stateNode!);\n removeFlagFromFiber(wip, UpdateFlag);\n // ref attachment is handled exclusively via PlacementFlag/MoveFlag (placeNode)\n // and RefFlag (below) so we never double-invoke callback refs on plain updates.\n }\n\n if (hasFlagOnFiber(wip, RefFlag)) {\n // Detach the previously committed ref, then attach the incoming one.\n detachRef(wip); // reads memoizedProps.ref → sets .current = null\n attachRef(wip); // reads pendingProps.ref → sets .current = stateNode\n removeFlagFromFiber(wip, RefFlag);\n }\n};\n\nconst commitMutationHostText = (wip: Fiber) => {\n if (!wip.stateNode) {\n const node = createDomElementFromFiber(wip);\n precacheFiberNode(wip, node);\n wip.stateNode = node;\n }\n\n if (hasFlagOnFiber(wip, PlacementFlag)) {\n placeNode(wip, wip.stateNode!);\n removeFlagFromFiber(wip, PlacementFlag);\n }\n\n if (hasFlagOnFiber(wip, MoveFlag)) {\n (wip.stateNode as Text).remove();\n placeNode(wip, wip.stateNode!);\n removeFlagFromFiber(wip, MoveFlag);\n }\n\n if (hasFlagOnFiber(wip, UpdateFlag)) {\n if (wip.memoizedProps !== wip.pendingProps) {\n (wip.stateNode as Text).nodeValue = String(wip.pendingProps);\n }\n precacheFiberNode(wip, wip.stateNode!);\n removeFlagFromFiber(wip, UpdateFlag);\n }\n};\n\nconst removeHostTree = (fiber: Fiber) => {\n // Fire effect cleanups and unsubscribe from contexts before removing.\n if (fiber.memoizedState) {\n runEffectCleanups(fiber);\n }\n clearContextSubscriptions(fiber);\n\n if (fiber.workTag === HostComponent || fiber.workTag === HostText) {\n detachRef(fiber);\n (fiber.stateNode as Element)?.remove();\n }\n\n let child = fiber.child;\n while (child) {\n removeHostTree(child);\n child = child.sibling;\n }\n};\n\nexport { commitWork };\n","import { Fiber } from \"@rectify-dev/shared\";\nimport { Lanes } from \"./RectifyFiberLanes\";\n\nexport type UpdateQueue = {\n lanes: Lanes;\n fiber: Fiber;\n next: UpdateQueue | null;\n};\n\ntype Instance = {\n head: UpdateQueue | null;\n tail: UpdateQueue | null;\n};\n\nconst instance: Instance = {\n head: null,\n tail: null,\n};\n\nconst enqueueUpdate = (update: UpdateQueue): void => {\n update.next = null;\n\n if (instance.tail === null) {\n instance.head = update;\n instance.tail = update;\n return;\n }\n\n instance.tail.next = update;\n instance.tail = update;\n};\n\nconst dequeueUpdate = (): UpdateQueue | null => {\n const first = instance.head;\n if (first === null) {\n return null;\n }\n\n instance.head = first.next;\n\n if (instance.head === null) {\n instance.tail = null;\n }\n\n first.next = null;\n return first;\n};\n\n/** Returns true when there is at least one pending update in the queue. */\nconst hasUpdate = (): boolean => instance.head !== null;\n\nexport { enqueueUpdate, dequeueUpdate, hasUpdate };\n","import { Fiber, RectifyNode } from \"@rectify-dev/shared\";\nimport { FiberRoot } from \"./RectifyFiberTypes\";\nimport { createHostRootFiber, createWorkInProgress } from \"./RectifyFiber\";\nimport {\n setScheduledFiberRoot,\n getScheduledFiberRoot,\n} from \"./RectifyFiberInstance\";\nimport {\n markContainerAsRoot,\n injectEventPriorityCallbacks,\n} from \"@rectify-dev/dom-binding\";\nimport { workLoop, workLoopOnFiberLanes } from \"./RectifyFiberWorkLoop\";\nimport { commitWork } from \"./RectifyFiberCommitWork\";\nimport {\n setScheduleRerender,\n setMarkFiberDirty,\n flushEffects,\n flushEffectCleanups,\n flushLayoutEffects,\n flushLayoutEffectCleanups,\n} from \"@rectify-dev/hook\";\nimport {\n dequeueUpdate,\n enqueueUpdate,\n hasUpdate,\n UpdateQueue,\n} from \"./RectifyFiberConcurrentUpdate\";\nimport {\n requestUpdateLane,\n setCurrentEventPriority,\n resetCurrentEventPriority,\n setCurrentRenderingLanes,\n getCurrentLanePriority,\n} from \"./RectifyFiberRenderPriority\";\nimport {\n scheduleRenderLane,\n setWorkCallback,\n getResumeCursor,\n clearResumeCursor,\n} from \"./RectifyFiberScheduler\";\nimport { SyncLane } from \"./RectifyFiberLanes\";\n\n// ---------------------------------------------------------------------------\n// Wire up event priority into dom-binding\n// ---------------------------------------------------------------------------\ninjectEventPriorityCallbacks(\n setCurrentEventPriority,\n resetCurrentEventPriority,\n);\n\n// When true, setState calls inside useLayoutEffect must NOT schedule async\n// tasks – they will be drained synchronously by flushLayoutPhase instead.\nlet isFlushingLayoutEffects = false;\n\n// ---------------------------------------------------------------------------\n// Work callback – called by the scheduler for each lane tier\n// ---------------------------------------------------------------------------\nconst performWork = (lanes: number): void => {\n const fiberRoot = getScheduledFiberRoot();\n if (!fiberRoot) return;\n\n // Only flush pending updates when starting a fresh render,\n // not when resuming a yielded concurrent work loop.\n if (!getResumeCursor()) flushPendingUpdates();\n\n setCurrentRenderingLanes(lanes);\n const completed = workLoopOnFiberLanes(fiberRoot.root, lanes);\n\n if (!completed) {\n // workLoopConcurrent saved the cursor inside RectifyFiberScheduler.\n // Re-post a task for the same lane so work continues next frame.\n scheduleRenderLane(lanes);\n return;\n }\n\n // Tree fully reconciled – safe to commit.\n clearResumeCursor();\n commitWork(fiberRoot.root);\n markContainerAsRoot(fiberRoot.root, fiberRoot.containerDom);\n // Flush layout effects synchronously, draining any setState they trigger\n // before the browser gets a chance to paint.\n flushLayoutPhase(fiberRoot);\n // Passive effects (useEffect) are deferred so the browser can paint first.\n schedulePassiveEffects();\n};\n\nsetWorkCallback(performWork);\n\n// ---------------------------------------------------------------------------\n// Injected callbacks — wired into the hook layer at startup\n// ---------------------------------------------------------------------------\n\n/**\n * Called by useState's dispatcher when state changes.\n * Enqueues the fiber for re-render on the appropriate lane.\n */\nconst onScheduleRerender = (fiber: Fiber): void => {\n // Inside useLayoutEffect: force SyncLane so the flush loop picks it up\n // synchronously instead of scheduling an async task.\n const lane = isFlushingLayoutEffects ? SyncLane : requestUpdateLane();\n enqueueUpdate({ lanes: lane, fiber, next: null });\n if (!isFlushingLayoutEffects) {\n scheduleRenderLane(lane);\n }\n};\n\n/**\n * Called by notifyContextConsumers when a Provider value changes.\n * Marks the subscriber's WIP fiber dirty so it fails the bailout and\n * re-renders in the current pass — no second render pass needed.\n *\n * The subscriber set holds committed (current) fibers; their WIP is .alternate.\n * We also bubble childLanes up the WIP tree so workLoopOnFiberLanes descends\n * into the subscriber's subtree.\n */\nconst onMarkFiberDirty = (fiber: Fiber): void => {\n const lane = getCurrentLanePriority();\n\n // Mark both sides so the lane survives createWorkInProgress copies.\n fiber.lanes |= lane;\n const wip = fiber.alternate;\n if (!wip) return;\n\n wip.lanes |= lane;\n\n let parent = wip.return;\n while (parent) {\n if ((parent.childLanes & lane) === lane) break; // already covered above\n parent.childLanes |= lane;\n parent = parent.return;\n }\n};\n\nsetScheduleRerender(onScheduleRerender);\nsetMarkFiberDirty(onMarkFiberDirty);\n\n// ---------------------------------------------------------------------------\n// Public API\n// ---------------------------------------------------------------------------\nexport const createContainer = (container: Element): FiberRoot => {\n return createHostRootFiber(container);\n};\n\nexport const updateContainer = (\n children: RectifyNode,\n fiberRoot: FiberRoot,\n): void => {\n fiberRoot.children = children;\n setScheduledFiberRoot(fiberRoot);\n\n const wipRoot = createWorkInProgress(fiberRoot.root, { children });\n setCurrentRenderingLanes(SyncLane);\n workLoop(wipRoot);\n commitWork(wipRoot);\n fiberRoot.root = wipRoot;\n markContainerAsRoot(wipRoot, fiberRoot.containerDom);\n setScheduledFiberRoot(fiberRoot);\n // Flush layout effects synchronously, draining any setState they trigger\n // before the browser gets a chance to paint.\n flushLayoutPhase(fiberRoot);\n // Passive effects (useEffect) are deferred so the browser can paint first.\n schedulePassiveEffects();\n};\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\n// A single reusable channel; the port1 handler is replaced each time so\n// only the most recently scheduled flush ever runs.\nconst passiveChannel = new MessageChannel();\nconst schedulePassiveEffects = (): void => {\n passiveChannel.port1.onmessage = () => {\n flushEffectCleanups();\n flushEffects();\n };\n passiveChannel.port2.postMessage(null);\n};\n\n/**\n * Flush layout effects synchronously, then re-render and re-commit any state\n * updates triggered inside them – looping until stable. This mirrors React's\n * behaviour where setState inside useLayoutEffect causes a synchronous\n * re-render that the browser never sees as an intermediate frame.\n */\nconst flushLayoutPhase = (fiberRoot: FiberRoot): void => {\n while (true) {\n isFlushingLayoutEffects = true;\n flushLayoutEffectCleanups();\n flushLayoutEffects();\n isFlushingLayoutEffects = false;\n\n // No updates were triggered during layout effects – we are done.\n if (!hasUpdate()) break;\n\n // Drain the updates synchronously (they were enqueued with SyncLane).\n flushPendingUpdates();\n setCurrentRenderingLanes(SyncLane);\n const completed = workLoopOnFiberLanes(fiberRoot.root, SyncLane);\n if (!completed) break; // shouldn't happen for sync lanes\n clearResumeCursor();\n commitWork(fiberRoot.root);\n markContainerAsRoot(fiberRoot.root, fiberRoot.containerDom);\n // Loop back to flush any layout effects produced by this new render.\n }\n};\n\nconst flushPendingUpdates = (): void => {\n let update = dequeueUpdate();\n while (update) {\n propagateLaneToAncestors(update);\n update = dequeueUpdate();\n }\n};\n\n/**\n * Stamps `lane` onto the target fiber and bubbles it up as `childLanes` so\n * `workLoopOnFiberLanes` knows to descend into that subtree.\n */\nconst propagateLaneToAncestors = (updateQueue: UpdateQueue): void => {\n const lane = updateQueue.lanes;\n let fiber: Fiber | null = updateQueue.fiber;\n\n // Mark the fiber itself (and its alternate) with the lane.\n fiber.lanes |= lane;\n if (fiber.alternate) fiber.alternate.lanes |= lane;\n\n // Walk up and set childLanes on every ancestor.\n fiber = fiber.return;\n while (fiber) {\n fiber.childLanes |= lane;\n if (fiber.alternate) fiber.alternate.childLanes |= lane;\n fiber = fiber.return;\n }\n};\n","import {\n listenToAllEventSupported,\n markContainerAsRoot,\n unmarkContainerAsRoot,\n} from \"@rectify-dev/dom-binding\";\nimport { createContainer, updateContainer } from \"@rectify-dev/reconciler\";\nimport { RectifyNode } from \"@rectify-dev/shared\";\n\ntype RectifyDomRoot = {\n render: (node: RectifyNode) => void;\n unmount: () => void;\n};\n\nexport const createRoot = (container: Element): RectifyDomRoot => {\n const hostRoot = createContainer(container);\n markContainerAsRoot(hostRoot.root, container);\n listenToAllEventSupported(container);\n return {\n render: (node: RectifyNode) => {\n updateContainer(node, hostRoot);\n },\n unmount: () => {\n unmarkContainerAsRoot(container);\n },\n };\n};\n","import { FC } from \"@rectify-dev/shared\";\n\nexport type MemoComponent<P = any> = FC<P> & {\n /** Marks this as a memo-wrapped component for the reconciler. */\n _isMemo: true;\n /** The wrapped component that will be called on actual renders. */\n _render: FC<P>;\n /** Custom comparator — defaults to shallow equality when absent. */\n _compare: ((prevProps: P, nextProps: P) => boolean) | null;\n};\n\n/**\n * Wraps a component with a custom props comparator.\n *\n * By default every component already bails out automatically when props are\n * shallowly equal. Use `memo` only when you need a **custom** comparison —\n * for example, deep equality on a specific prop, or ignoring certain keys.\n *\n * @example\n * // Ignore the `style` prop when deciding whether to re-render\n * const Chart = memo(\n * ({ data }) => jsx('canvas', { ... }),\n * (prev, next) => Object.is(prev.data, next.data),\n * );\n */\nexport function memo<P = any>(\n Component: FC<P>,\n compare?: (prevProps: P, nextProps: P) => boolean,\n): MemoComponent<P> {\n const wrapper = ((_props: P) => null) as unknown as MemoComponent<P>;\n wrapper._isMemo = true;\n wrapper._render = Component;\n wrapper._compare = compare ?? null;\n return wrapper;\n}\n"]}