{"version":3,"sources":["/home/runner/work/liveblocks/liveblocks/packages/liveblocks-yjs/dist/index.cjs","../src/index.ts","../src/version.ts","../src/provider.ts","../src/awareness.ts","../src/doc.ts","../src/providerContext.ts"],"names":["Observable","applyUpdate","Base64","DerivedSignal","IndexeddbPersistence"],"mappings":"AAAA;ACAA,wCAA4B;ADE5B;AACA;AEAO,IAAM,SAAA,EAAW,iBAAA;AACjB,IAAM,YAAA,EAAiD,QAAA;AACvD,IAAM,WAAA,EAAgD,KAAA;AFE7D;AACA;AGRA;AACE;AAAA;AAKF;AACA,qCAAuB;AACvB,6CAA2B;AAC3B,yCAAqC;AAErC,iEAAkC;AHMlC;AACA;AIhBA;AAGA,IAAM,eAAA,EAAiB,OAAA;AACvB,IAAM,kBAAA,EAAoB,gBAAA;AAanB,IAAM,UAAA,YAAN,MAAA,QAAwB,uBAAoB;AAAA,EACzC;AAAA,EACD;AAAA,iBACA,OAAA,kBAA+B,IAAI,GAAA,CAAI,EAAA;AAAA;AAAA,kBAEvC,iBAAA,kBAAwC,IAAI,GAAA,CAAI,EAAA;AAAA;AAAA;AAAA,kBAGhD,KAAA,kBAAqC,IAAI,GAAA,CAAI,EAAA;AAAA;AAAA;AAAA,kBAG7C,eAAA,EAAyB,EAAA;AAAA,EAExB;AAAA,EACR,WAAA,CAAY,GAAA,EAAY,IAAA,EAAkB;AACxC,IAAA,KAAA,CAAM,iJAAA;AACN,IAAA,IAAA,CAAK,IAAA,EAAM,GAAA;AACX,IAAA,IAAA,CAAK,KAAA,EAAO,IAAA;AAEZ,IAAA,IAAA,CAAK,IAAA,CAAK,cAAA,CAAe;AAAA,MACvB,CAAC,iBAAiB,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI;AAAA,IAChC,CAAC,CAAA;AACD,IAAA,IAAA,CAAK,YAAA,EAAc,IAAA,CAAK,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,SAAA,CAAU,CAAC,KAAA,EAAA,GAAU;AAC9D,MAAA,IAAI,OAAA;AAKJ,MAAA,GAAA,CAAI,KAAA,CAAM,KAAA,IAAS,OAAA,EAAS;AAC1B,QAAA,MAAM,eAAA,EAAiB,IAAA,CAAK,gBAAA,CAAiB,GAAA;AAAA,UAC3C,KAAA,CAAM,IAAA,CAAK;AAAA,QACb,CAAA;AACA,QAAA,GAAA,CAAI,eAAA,IAAmB,KAAA,CAAA,EAAW;AAChC,UAAA,QAAA,EAAU,EAAE,KAAA,EAAO,CAAC,CAAA,EAAG,OAAA,EAAS,CAAC,CAAA,EAAG,OAAA,EAAS,CAAC,cAAc,EAAE,CAAA;AAAA,QAChE;AAEA,QAAA,IAAA,CAAK,uBAAA,CAAwB,KAAA,CAAM,MAAM,CAAA;AAAA,MAC3C;AACA,MAAA,GAAA,CAAI,KAAA,CAAM,KAAA,IAAS,QAAA,GAAW,KAAA,CAAM,KAAA,IAAS,QAAA,EAAU;AACrD,QAAA,IAAA,CAAK,uBAAA,CAAwB,KAAA,CAAM,MAAM,CAAA;AACzC,QAAA,MAAM,eAAA,EAAiB,IAAA,CAAK,gBAAA,CAAiB,GAAA;AAAA,UAC3C,KAAA,CAAM,IAAA,CAAK;AAAA,QACb,CAAA;AACA,QAAA,GAAA,CAAI,eAAA,IAAmB,KAAA,CAAA,EAAW;AAChC,UAAA,QAAA,EAAU;AAAA,YACR,KAAA,EAAO,KAAA,CAAM,KAAA,IAAS,QAAA,EAAU,CAAC,cAAc,EAAA,EAAI,CAAC,CAAA;AAAA,YACpD,OAAA,EAAS,KAAA,CAAM,KAAA,IAAS,SAAA,EAAW,CAAC,cAAc,EAAA,EAAI,CAAC,CAAA;AAAA,YACvD,OAAA,EAAS,CAAC;AAAA,UACZ,CAAA;AAAA,QACF;AAAA,MACF;AACA,MAAA,GAAA,CAAI,KAAA,CAAM,KAAA,IAAS,OAAA,EAAS;AAC1B,QAAA,IAAA,CAAK,uBAAA,CAAwB,KAAA,CAAM,MAAM,CAAA;AAAA,MAC3C;AACA,MAAA,GAAA,CAAI,QAAA,IAAY,KAAA,CAAA,EAAW;AACzB,QAAA,IAAA,CAAK,IAAA,CAAK,QAAA,EAAU,CAAC,OAAA,EAAS,UAAU,CAAC,CAAA;AACzC,QAAA,IAAA,CAAK,IAAA,CAAK,QAAA,EAAU,CAAC,OAAA,EAAS,UAAU,CAAC,CAAA;AAAA,MAC3C;AAAA,IACF,CAAC,CAAA;AAAA,EACH;AAAA,EAEA,uBAAA,CACE,MAAA,EACM;AACN,IAAA,IAAA,CAAK,gBAAA,CAAiB,KAAA,CAAM,CAAA;AAC5B,IAAA,MAAA,CAAO,OAAA,CAAQ,CAAC,IAAA,EAAA,GAAS;AACvB,MAAA,GAAA,CAAI,IAAA,CAAK,QAAA,CAAS,iBAAiB,EAAA,IAAM,KAAA,CAAA,EAAW;AAClD,QAAA,IAAA,CAAK,gBAAA,CAAiB,GAAA;AAAA,UACpB,IAAA,CAAK,YAAA;AAAA,UACL,IAAA,CAAK,QAAA,CAAS,iBAAiB;AAAA,QACjC,CAAA;AAAA,MACF;AAAA,IACF,CAAC,CAAA;AAAA,EACH;AAAA,EAEA,OAAA,CAAA,EAAgB;AACd,IAAA,IAAA,CAAK,IAAA,CAAK,SAAA,EAAW,CAAC,IAAI,CAAC,CAAA;AAC3B,IAAA,IAAA,CAAK,WAAA,CAAY,CAAA;AACjB,IAAA,IAAA,CAAK,aAAA,CAAc,IAAI,CAAA;AACvB,IAAA,KAAA,CAAM,OAAA,CAAQ,CAAA;AAAA,EAChB;AAAA,EAEA,aAAA,CAAA,EAAmC;AACjC,IAAA,MAAM,SAAA,EAAW,IAAA,CAAK,IAAA,CAAK,WAAA,CAAY,CAAA;AACvC,IAAA,GAAA,CACE,MAAA,CAAO,IAAA,CAAK,QAAQ,CAAA,CAAE,OAAA,IAAW,EAAA,GACjC,OAAO,QAAA,CAAS,cAAc,EAAA,IAAM,WAAA,EACpC;AACA,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,OAAO,QAAA,CAAS,cAAc,CAAA;AAAA,EAChC;AAAA,EAEA,aAAA,CAAc,KAAA,EAAyC;AACrD,IAAA,MAAM,SAAA,kBAAW,IAAA,qBAAK,IAAA,qBAAK,OAAA,mBAAQ,CAAA,6BAAG,UAAA;AACtC,IAAA,GAAA,CAAI,MAAA,IAAU,IAAA,EAAM;AAClB,MAAA,GAAA,CAAI,SAAA,IAAa,KAAA,CAAA,EAAW;AAE1B,QAAA,MAAA;AAAA,MACF;AACA,MAAA,IAAA,CAAK,IAAA,CAAK,cAAA,CAAe,EAAE,GAAG,QAAA,EAAU,CAAC,cAAc,CAAA,EAAG,KAAK,CAAC,CAAA;AAChE,MAAA,IAAA,CAAK,IAAA,CAAK,QAAA,EAAU;AAAA,QAClB,EAAE,KAAA,EAAO,CAAC,CAAA,EAAG,OAAA,EAAS,CAAC,CAAA,EAAG,OAAA,EAAS,CAAC,IAAA,CAAK,GAAA,CAAI,QAAQ,EAAE,CAAA;AAAA,QACvD;AAAA,MACF,CAAC,CAAA;AACD,MAAA,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,UAAA,kBAAY,QAAA,4BAAA,CAAW,cAAc,GAAA;AAC3C,IAAA,MAAM,MAAA,EAAQ,UAAA,IAAc,KAAA,EAAA,EAAY,CAAC,IAAA,CAAK,GAAA,CAAI,QAAQ,EAAA,EAAI,CAAC,CAAA;AAC/D,IAAA,MAAM,QAAA,EAAU,UAAA,IAAc,KAAA,EAAA,EAAY,CAAC,EAAA,EAAI,CAAC,IAAA,CAAK,GAAA,CAAI,QAAQ,CAAA;AACjE,IAAA,IAAA,CAAK,IAAA,CAAK,cAAA,CAAe;AAAA,MACvB,CAAC,cAAc,CAAA,EAAG;AAAA,QAChB,GAAK,UAAA,GAA4B,CAAC,CAAA;AAAA,QAClC,GAAI,MAAA,GAAS,CAAC;AAAA,MAChB;AAAA,IACF,CAAC,CAAA;AACD,IAAA,IAAA,CAAK,IAAA,CAAK,QAAA,EAAU,CAAC,EAAE,KAAA,EAAO,OAAA,EAAS,OAAA,EAAS,CAAC,EAAE,CAAA,EAAG,OAAO,CAAC,CAAA;AAAA,EAChE;AAAA,EAEA,kBAAA,CAAmB,KAAA,EAAe,KAAA,EAAgC;AAChE,IAAA,MAAM,SAAA,kBAAW,IAAA,qBAAK,IAAA,qBAAK,OAAA,mBAAQ,CAAA,+BAAG,QAAA,uBAAS,cAAc,GAAA;AAC7D,IAAA,MAAM,OAAA,EAAS,EAAE,CAAC,KAAK,CAAA,EAAG,MAAM,CAAA;AAChC,IAAA,IAAA,CAAK,IAAA,CAAK,cAAA,CAAe;AAAA,MACvB,CAAC,cAAc,CAAA,EAAG,EAAE,GAAK,SAAA,GAA2B,CAAC,CAAA,EAAI,GAAG,OAAO;AAAA,IACrE,CAAC,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,SAAA,CAAA,EAAkC;AAChC,IAAA,MAAM,OAAA,EAAS,IAAA,CAAK,IAAA,CAAK,SAAA,CAAU,CAAA;AACnC,IAAA,MAAM,OAAA,EAAS,MAAA,CAAO,MAAA,CAAO,CAAC,GAAA,EAA2B,SAAA,EAAA,GAAc;AACrE,MAAA,MAAM,cAAA,EAAgB,SAAA,CAAU,QAAA,CAAS,cAAc,CAAA;AACvD,MAAA,MAAM,cAAA,EAAgB,SAAA,CAAU,QAAA,CAAS,iBAAiB,CAAA;AAG1D,MAAA,GAAA,CAAI,cAAA,IAAkB,KAAA,EAAA,GAAa,cAAA,IAAkB,KAAA,CAAA,EAAW;AAE9D,QAAA,GAAA,CAAI,GAAA,CAAI,aAAA,EAAe,cAAA,GAAiB,CAAC,CAAC,CAAA;AAAA,MAC5C;AACA,MAAA,OAAO,GAAA;AAAA,IACT,CAAA,kBAAG,IAAI,GAAA,CAAqB,CAAC,CAAA;AAG7B,IAAA,MAAM,cAAA,kBAAgB,IAAA,uBAAK,IAAA,uBAAK,OAAA,qBAAQ,CAAA,+BAAG,QAAA,uBAAS,cAAc,GAAA;AAClE,IAAA,GAAA,CAAI,cAAA,IAAkB,KAAA,CAAA,EAAW;AAC/B,MAAA,MAAA,CAAO,GAAA,CAAI,IAAA,CAAK,GAAA,CAAI,QAAA,EAAU,aAAa,CAAA;AAAA,IAC7C;AACA,IAAA,OAAO,MAAA;AAAA,EACT;AACF,UAAA;AJrBA;AACA;AKrJA;AACE;AACA;AAAA;AAGF,0CAAuB;AACvB;AACA;AACA;AACA;AAEA,IAAqB,YAAA,aAArB,MAAqB,aAAA,QAAoBA,uBAAoB;AAAA,kBACnD,cAAA,EAAmC,CAAC,EAAA;AAAA,kBAEpC,QAAA,EAAU,MAAA;AAAA,EACV;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,kBAEA,cAAA,EAAsD,KAAA;AAAA,EAC9D,4BAAwB,qBAAA,EAAuB,IAAA;AAAA,EAEvC;AAAA,EAER,WAAA,CAAY;AAAA,IACV,GAAA;AAAA,IACA,MAAA;AAAA,IACA,SAAA;AAAA,IACA,QAAA;AAAA,IACA;AAAA,EACF,CAAA,EAMG;AACD,IAAA,KAAA,CAAM,iOAAA;AACN,IAAA,IAAA,CAAK,IAAA,EAAM,GAAA;AACX,IAAA,IAAA,CAAK,cAAA,EAAgB,aAAA;AAErB,IAAA,IAAA,CAAK,GAAA,CAAI,EAAA,CAAG,cAAA,EAAgB,WAAA,EAAa,QAAA,EAAU,IAAA,CAAK,aAAa,CAAA;AACrE,IAAA,IAAA,CAAK,cAAA,EAAgB,CAAC,MAAA,EAAA,GAAuB;AAC3C,MAAA,SAAA,CAAU,MAAA,EAAQ,OAAA,EAAS,KAAA,EAAA,EAAY,IAAA,CAAK,GAAA,CAAI,IAAI,CAAA;AAAA,IACtD,CAAA;AACA,IAAA,IAAA,CAAK,aAAA,EAAe,CAAC,MAAA,EAAA,GAAmB;AACtC,MAAA,QAAA,CAAS,MAAA,EAAQ,OAAA,EAAS,KAAA,EAAA,EAAY,IAAA,CAAK,GAAA,CAAI,IAAI,CAAA;AAAA,IACrD,CAAA;AAEA,IAAA,IAAA,CAAK,OAAA,CAAQ,CAAA;AAEb,IAAA,MAAM,gBAAA,EAAkB,IAAA,CAAK,cAAA,EACvB,CAAA,CAAA,gBAAA,CAAmB,CAAA,CAAA,QAAA,CAAS,IAAA,CAAK,GAAG,CAAC,EAAA,EACrC,CAAA,CAAA,cAAA,CAAiB,CAAA,CAAA,QAAA,CAAS,IAAA,CAAK,GAAG,CAAC,CAAA;AAEzC,IAAA,IAAA,CAAK,wBAAA,EAAqB,IAAI,iBAAA;AAAA,MAC5B,gBAAA,CAAO,cAAA,CAAe,0BAAA,eAAsB,CAAC;AAAA,IAC/C,CAAA;AACA,IAAA,IAAA,CAAK,yBAAA,EAAsB,IAAI,iBAAA,CAAsB,IAAI,CAAA;AAEzD,IAAA,IAAA,CAAK,oBAAA,EAAiB,IAAI,iBAAA,CAAgB,KAAK,CAAA;AAE/C,IAAA,IAAA,CAAK,oCAAA,EAAiC,mBAAA,CAAc,IAAA,CAAK,CAAA,EAAA,GAAM;AAC7D,MAAA,MAAM,mBAAA,EAAqB,IAAA,CAAK,wBAAA,CAAoB,GAAA,CAAI,CAAA;AACxD,MAAA,GAAA,CAAI,mBAAA,IAAuB,IAAA,EAAM,OAAO,KAAA;AAExC,MAAA,MAAM,kBAAA,EAAoB,IAAA,CAAK,uBAAA,CAAmB,GAAA,CAAI,CAAA;AACtD,MAAA,GAAA,CAAI,kBAAA,IAAsB,kBAAA,EAAoB;AAC5C,QAAA,OAAO,KAAA;AAAA,MACT;AACA,MAAA,OAAO,IAAA;AAAA,IACT,CAAC,CAAA;AAAA,EACH;AAAA,kBAEO,mBAAA,EAAqB,CAAC;AAAA,IAC3B,MAAA;AAAA,IACA,WAAA;AAAA,IACA,QAAA;AAAA,IACA,EAAA;AAAA,IACA;AAAA,EACF,CAAA,EAAA,GAMY;AAEV,IAAA,MAAMC,aAAAA,EAAc,GAAA,EAAO,CAAA,CAAA,cAAA,EAAkB,CAAA,CAAA,WAAA;AAC7C,IAAAA,YAAAA,CAAY,IAAA,CAAK,GAAA,EAAK,MAAA,EAAQ,SAAS,CAAA;AAEvC,IAAA,GAAA,CAAI,WAAA,EAAa;AACf,MAAA,GAAA,CAAI,CAAC,QAAA,EAAU;AAEb,QAAA,IAAI;AAEF,UAAA,MAAM,aAAA,EAAe,IAAA,CAAK,cAAA,EACpB,CAAA,CAAA,sBAAA,EACA,CAAA,CAAA,mBAAA;AACN,UAAA,MAAM,YAAA,EAAc,YAAA;AAAA,YAClB,IAAA,CAAK,GAAA;AAAA,YACL,gBAAA,CAAO,YAAA,CAAa,WAAW;AAAA,UACjC,CAAA;AACA,UAAA,IAAA,CAAK,aAAA,CAAc,WAAW,CAAA;AAAA,QAChC,EAAA,MAAA,CAAS,CAAA,EAAG;AAEV,UAAA,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA;AAAA,QAChB;AAAA,MACF;AAGA,MAAA,IAAA,CAAK,OAAA,EAAS,IAAA;AACd,MAAA,IAAA,CAAK,mBAAA,CAAe,GAAA,CAAI,IAAI,CAAA;AAAA,IAC9B;AAEA,IAAA,IAAA,CAAK,wBAAA,CAAoB,GAAA,CAAI,kBAAkB,CAAA;AAAA,EACjD,EAAA;AAAA,kBAEO,QAAA,EAAU,CAAA,EAAA,GAAY;AAC3B,IAAA,IAAA,CAAK,OAAA,EAAS,KAAA;AAId,IAAA,MAAM,cAAA,EAAgB,gBAAA,CAAO,cAAA,CAAiB,CAAA,CAAA,iBAAA,CAAkB,IAAA,CAAK,GAAG,CAAC,CAAA;AACzE,IAAA,IAAA,CAAK,YAAA,CAAa,aAAa,CAAA;AAAA,EACjC,EAAA;AAAA;AAAA,EAGA,IAAI,MAAA,CAAA,EAAkB;AACpB,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,EACd;AAAA,EAEA,IAAI,MAAA,CAAO,KAAA,EAAgB;AACzB,IAAA,GAAA,CAAI,IAAA,CAAK,QAAA,IAAY,KAAA,EAAO;AAC1B,MAAA,IAAA,CAAK,QAAA,EAAU,KAAA;AACf,MAAA,IAAA,CAAK,IAAA,CAAK,QAAA,EAAU,CAAC,KAAK,CAAC,CAAA;AAC3B,MAAA,IAAA,CAAK,IAAA,CAAK,MAAA,EAAQ,CAAC,KAAK,CAAC,CAAA;AAAA,IAC3B;AAAA,EACF;AAAA,EAEQ,6BAAA,CAAA,EAAgC;AACtC,IAAA,GAAA,CAAI,IAAA,CAAK,aAAA,EAAe,YAAA,CAAa,IAAA,CAAK,aAAa,CAAA;AACvD,IAAA,IAAA,CAAK,cAAA,EAAgB,UAAA,CAAW,CAAA,EAAA,GAAM;AAEpC,MAAA,MAAM,gBAAA,EAAkB,IAAA,CAAK,cAAA,EACvB,CAAA,CAAA,gBAAA,CAAmB,CAAA,CAAA,QAAA,CAAS,IAAA,CAAK,GAAG,CAAC,EAAA,EACrC,CAAA,CAAA,cAAA,CAAiB,CAAA,CAAA,QAAA,CAAS,IAAA,CAAK,GAAG,CAAC,CAAA;AACzC,MAAA,IAAA,CAAK,uBAAA,CAAmB,GAAA;AAAA,QACtB,gBAAA,CAAO,cAAA,CAAe,0BAAA,eAAsB,CAAC;AAAA,MAC/C,CAAA;AACA,MAAA,IAAA,CAAK,cAAA,EAAgB,IAAA;AAAA,IACvB,CAAA,EAAG,YAAA,CAAY,oBAAoB,CAAA;AAAA,EACrC;AAAA,mBAEQ,cAAA,EAAgB,CACtB,MAAA,EACA,MAAA,EAAA,GACG;AACH,IAAA,IAAA,CAAK,6BAAA,CAA8B,CAAA;AAGnC,IAAA,MAAM,YAAA,EAAc,OAAA,WAAkB,gCAAA;AACtC,IAAA,GAAA,CAAI,OAAA,IAAW,UAAA,GAAa,CAAC,WAAA,EAAa;AACxC,MAAA,IAAA,CAAK,aAAA,CAAc,MAAM,CAAA;AAAA,IAC3B;AAAA,EACF,EAAA;AAAA,EAEA,0BAAA,CAAA,EAA4C;AAC1C,IAAA,MAAM,cAAA,EAAgB,IAAA,CAAK,mBAAA,CAAe,GAAA,CAAI,CAAA;AAC9C,IAAA,GAAA,CAAI,CAAC,aAAA,EAAe;AAClB,MAAA,OAAO,SAAA;AAAA,IACT;AACA,IAAA,GAAA,CAAI,CAAC,IAAA,CAAK,mCAAA,CAA+B,GAAA,CAAI,CAAA,EAAG;AAC9C,MAAA,OAAO,eAAA;AAAA,IACT;AACA,IAAA,OAAO,cAAA;AAAA,EACT;AAAA,EAEA,OAAA,CAAA,EAAgB;AACd,IAAA,GAAA,CAAI,IAAA,CAAK,aAAA,EAAe,YAAA,CAAa,IAAA,CAAK,aAAa,CAAA;AACvD,IAAA,IAAA,CAAK,GAAA,CAAI,GAAA,CAAI,QAAA,EAAU,IAAA,CAAK,aAAa,CAAA;AACzC,IAAA,IAAA,CAAK,aAAA,CAAc,OAAA,CAAQ,CAAC,KAAA,EAAA,GAAU,KAAA,CAAM,CAAC,CAAA;AAC7C,IAAA,IAAA,CAAK,WAAA,kBAAa,IAAI,GAAA,CAAI,CAAA;AAC1B,IAAA,IAAA,CAAK,GAAA,CAAI,OAAA,CAAQ,CAAA;AAAA,EACnB;AACF,mCAAA;AL+FA;AACA;AGtQO,IAAM,sBAAA,aAAN,MAAA,QACGD,uBAEV;AAAA,EACmB;AAAA,EACA;AAAA,EACA;AAAA,mBACT,kBAAA,EAAiD,KAAA;AAAA,mBACjD,SAAA,EAAW,MAAA;AAAA,mBAEF,cAAA,EAAmC,CAAC,EAAA;AAAA,EAErC;AAAA,EAEA;AAAA,mBACC,qBAAA,EAAkB,IAAI,wBAAA,iBAErC,IAAI,GAAA,CAAI,CAAC,EAAA;AAAA,EACM;AAAA,EAED;AAAA,EAEhB,WAAA,CAAY,IAAA,EAAkB,GAAA,EAAU,QAAA,EAA2B,CAAC,CAAA,EAAG;AACrE,IAAA,KAAA,CAAM,oaAAA;AACN,IAAA,IAAA,CAAK,QAAA,EAAU,GAAA;AACf,IAAA,IAAA,CAAK,KAAA,EAAO,IAAA;AACZ,IAAA,IAAA,CAAK,QAAA,EAAU,OAAA;AACf,IAAA,IAAA,CAAK,eAAA,EAAiB,IAAI,WAAA,CAAY;AAAA,MACpC,GAAA;AAAA,MACA,MAAA,EAAQ,IAAA;AAAA,MACR,SAAA,EAAW,IAAA,CAAK,SAAA;AAAA,MAChB,QAAA,EAAU,IAAA,CAAK,QAAA;AAAA,MACf,aAAA,mBAAe,IAAA,CAAK,OAAA,CAAQ,0BAAA,UAA8B;AAAA,IAC5D,CAAC,CAAA;AAED,IAAA,GAAA,CAAI,IAAA,CAAK,OAAA,CAAQ,uBAAA,EAAyB;AACxC,MAAA,IAAA,CAAK,kBAAA,EAAoB,IAAI,2BAAA,CAAkB,GAAG,CAAA;AAAA,IACpD;AAGA,IAAA,IAAA,CAAK,eAAS,CAAA,CAAE,cAAA,CAAe,IAAI,CAAA;AAGnC,IAAA,IAAA,CAAK,UAAA,EAAY,IAAI,SAAA,CAAU,IAAA,CAAK,OAAA,EAAS,IAAA,CAAK,IAAI,CAAA;AAEtD,IAAA,IAAA,CAAK,aAAA,CAAc,IAAA;AAAA,MACjB,IAAA,CAAK,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,SAAA,CAAU,CAAC,MAAA,EAAA,GAAW;AAC5C,QAAA,GAAA,CAAI,OAAA,IAAW,WAAA,EAAa;AAC1B,UAAA,IAAA,CAAK,cAAA,CAAe,OAAA,CAAQ,CAAA;AAAA,QAC9B,EAAA,KAAO;AACL,UAAA,IAAA,CAAK,cAAA,CAAe,OAAA,EAAS,KAAA;AAAA,QAC/B;AAAA,MACF,CAAC;AAAA,IACH,CAAA;AAEA,IAAA,IAAA,CAAK,aAAA,CAAc,IAAA;AAAA,MACjB,IAAA,CAAK,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,SAAA,CAAU,CAAC,OAAA,EAAA,GAAY;AAC3C,QAAA,MAAM,EAAE,KAAK,EAAA,EAAI,OAAA;AACjB,QAAA,GAAA,CAAI,KAAA,IAAS,mBAAA,CAAc,WAAA,EAAa;AAEtC,UAAA,MAAA;AAAA,QACF;AACA,QAAA,MAAM;AAAA,UACJ,WAAA;AAAA,UACA,MAAA,EAAQ,SAAA;AAAA,UACR,IAAA;AAAA,UACA,EAAA;AAAA,UACA;AAAA,QACF,EAAA,EAAI,OAAA;AACJ,QAAA,MAAM,SAAA,mCAAW,IAAA,uBAAK,IAAA,uBAAK,OAAA,qBAAQ,CAAA,+BAAG,UAAA,UAAY,MAAA;AAClD,QAAA,MAAM,OAAA,EAASE,gBAAAA,CAAO,YAAA,CAAa,SAAS,CAAA;AAG5C,QAAA,GAAA,CAAI,KAAA,IAAS,KAAA,CAAA,EAAW;AACtB,0BAAA,IAAA,uBAAK,oBAAA,uBAAgB,GAAA,qBAAI,CAAA,uBAAE,GAAA,qBAAI,IAAI,CAAA,+BAAG,kBAAA,qBAAmB;AAAA,YACvD,MAAA;AAAA,YACA,WAAA;AAAA,YACA,QAAA,EAAU,CAAC,QAAA;AAAA,YACX,EAAA;AAAA,YACA;AAAA,UACF,CAAC,GAAA;AAAA,QACH,EAAA,KAAO;AACL,UAAA,IAAA,CAAK,cAAA,CAAe,kBAAA,CAAmB;AAAA,YACrC,MAAA;AAAA,YACA,WAAA;AAAA,YACA,QAAA,EAAU,CAAC,QAAA;AAAA,YACX,EAAA;AAAA,YACA;AAAA,UACF,CAAC,CAAA;AAAA,QACH;AAAA,MACF,CAAC;AAAA,IACH,CAAA;AAEA,IAAA,GAAA,CAAI,OAAA,CAAQ,2BAAA,EAA6B;AACvC,MAAA,IAAA,CAAK,mBAAA,CAAoB,CAAA;AAAA,IAC3B;AAGA,IAAA,IAAA,CAAK,cAAA,CAAe,EAAA,CAAG,QAAA,EAAU,CAAA,EAAA,GAAM;AACrC,MAAA,MAAM,MAAA,EAAQ,IAAA,CAAK,cAAA,CAAe,MAAA;AAClC,MAAA,IAAA,CAAA,MAAW,CAAC,CAAA,EAAG,OAAO,EAAA,GAAK,IAAA,CAAK,oBAAA,CAAgB,GAAA,CAAI,CAAA,EAAG;AACrD,QAAA,OAAA,CAAQ,OAAA,CAAQ,CAAA;AAAA,MAClB;AACA,MAAA,IAAA,CAAK,IAAA,CAAK,QAAA,EAAU,CAAC,KAAK,CAAC,CAAA;AAC3B,MAAA,IAAA,CAAK,IAAA,CAAK,MAAA,EAAQ,CAAC,KAAK,CAAC,CAAA;AAAA,IAC3B,CAAC,CAAA;AACD,IAAA,IAAA,CAAK,OAAA,CAAQ,EAAA,CAAG,SAAA,EAAW,IAAA,CAAK,aAAa,CAAA;AAC7C,IAAA,IAAA,CAAK,OAAA,CAAQ,CAAA;AAEb,IAAA,IAAA,CAAK,iBAAA,EAAcC,mBAAAA,CAAc,IAAA,CAAK,CAAA,EAAA,GAAM;AAE1C,MAAA,MAAM,mBAAA,EACJ,IAAA,CAAK,cAAA,CAAe,0BAAA,CAA2B,CAAA;AACjD,MAAA,GAAA,CACE,mBAAA,IAAuB,UAAA,GACvB,mBAAA,IAAuB,eAAA,EACvB;AACA,QAAA,OAAO,kBAAA;AAAA,MACT;AAGA,MAAA,MAAM,oBAAA,EAAsB,KAAA,CAAM,IAAA;AAAA,QAChC,IAAA,CAAK,oBAAA,CAAgB,GAAA,CAAI,CAAA,CAAE,MAAA,CAAO;AAAA,MACpC,CAAA,CAAE,GAAA,CAAI,CAAC,OAAA,EAAA,GAAY,OAAA,CAAQ,0BAAA,CAA2B,CAAC,CAAA;AACvD,MAAA,GAAA,CAAI,mBAAA,CAAoB,IAAA,CAAK,CAAC,KAAA,EAAA,GAAU,MAAA,IAAU,cAAc,CAAA,EAAG;AACjE,QAAA,OAAO,eAAA;AAAA,MACT;AACA,MAAA,OAAO,cAAA;AAAA,IACT,CAAC,CAAA;AAED,IAAA,IAAA,CAAK,IAAA,CAAK,QAAA,EAAU,CAAC,IAAA,CAAK,SAAA,CAAU,CAAC,CAAC,CAAA;AAEtC,IAAA,IAAA,CAAK,aAAA,CAAc,IAAA;AAAA,MACjB,IAAA,CAAK,gBAAA,CAAY,SAAA,CAAU,CAAA,EAAA,GAAM;AAC/B,QAAA,IAAA,CAAK,IAAA,CAAK,QAAA,EAAU,CAAC,IAAA,CAAK,SAAA,CAAU,CAAC,CAAC,CAAA;AAAA,MACxC,CAAC;AAAA,IACH,CAAA;AAAA,EACF;AAAA,mBAEQ,oBAAA,EAAsB,CAAA,EAAA,GAAM;AAClC,IAAA,IAAA,CAAK,kBAAA,EAAoB,IAAIC,qCAAAA;AAAA,MAC3B,IAAA,CAAK,IAAA,CAAK,EAAA;AAAA,MACV,IAAA,CAAK;AAAA,IACP,CAAA;AACA,IAAA,MAAM,gBAAA,EAAkB,CAAA,EAAA,GAAM;AAC5B,MAAA,IAAA,CAAK,cAAA,CAAe,OAAA,EAAS,IAAA;AAAA,IAC/B,CAAA;AACA,IAAA,IAAA,CAAK,iBAAA,CAAkB,EAAA,CAAG,QAAA,EAAU,eAAe,CAAA;AAEnD,IAAA,IAAA,CAAK,aAAA,CAAc,IAAA,CAAK,CAAA,EAAA,GAAM;AAC5B,sBAAA,IAAA,uBAAK,iBAAA,+BAAmB,GAAA,qBAAI,QAAA,EAAU,eAAe,GAAA;AAAA,IACvD,CAAC,CAAA;AAAA,EACH,EAAA;AAAA,mBAEQ,cAAA,EAAgB,CAAC;AAAA,IACvB,MAAA;AAAA,IACA,OAAA;AAAA,IACA;AAAA,EACF,CAAA,EAAA,GAIM;AACJ,IAAA,MAAA,CAAO,OAAA,CAAQ,IAAA,CAAK,mBAAmB,CAAA;AACvC,IAAA,MAAM,eAAA,EAAiB,IAAA,CAAK,oBAAA,CAAgB,GAAA,CAAI,CAAA;AAChD,IAAA,GAAA,CAAI,IAAA,CAAK,OAAA,CAAQ,eAAA,EAAiB;AAChC,MAAA,IAAA,CAAA,MAAW,OAAA,GAAU,KAAA,EAAO;AAC1B,QAAA,GAAA,CAAI,CAAC,cAAA,CAAe,GAAA,CAAI,MAAA,CAAO,IAAI,CAAA,EAAG;AACpC,UAAA,MAAA,CAAO,IAAA,CAAK,CAAA;AAAA,QACd;AAAA,MACF;AAAA,IACF;AACA,IAAA,IAAA,CAAA,MAAW,OAAA,GAAU,OAAA,EAAS;AAC5B,MAAA,GAAA,CAAI,cAAA,CAAe,GAAA,CAAI,MAAA,CAAO,IAAI,CAAA,EAAG;AACnC,wBAAA,cAAA,uBAAe,GAAA,qBAAI,MAAA,CAAO,IAAI,CAAA,+BAAG,OAAA,qBAAQ,GAAA;AACzC,QAAA,cAAA,CAAe,MAAA,CAAO,MAAA,CAAO,IAAI,CAAA;AAAA,MACnC;AAAA,IACF;AAAA,EACF,EAAA;AAAA,mBAEQ,UAAA,EAAY,CAAC,MAAA,EAAoB,IAAA,EAAA,GAAkB;AACzD,IAAA,MAAM,SAAA,mCAAW,IAAA,uBAAK,IAAA,uBAAK,OAAA,qBAAQ,CAAA,+BAAG,UAAA,UAAY,MAAA;AAClD,IAAA,GAAA,CAAI,SAAA,GAAY,CAAC,IAAA,CAAK,QAAA,EAAU;AAC9B,MAAA,IAAA,CAAK,IAAA,CAAK,UAAA;AAAA,QACRF,gBAAAA,CAAO,cAAA,CAAe,MAAM,CAAA;AAAA,QAC5B,IAAA;AAAA,QACA,IAAA,CAAK;AAAA,MACP,CAAA;AAAA,IACF;AAAA,EACF,EAAA;AAAA,mBAEQ,SAAA,EAAW,CAAC,MAAA,EAAgB,IAAA,EAAA,GAAkB;AACpD,IAAA,IAAA,CAAK,IAAA,CAAK,SAAA,CAAU,MAAA,EAAQ,IAAA,EAAM,IAAA,CAAK,aAAa,CAAA;AAAA,EACtD,EAAA;AAAA,mBAEQ,oBAAA,EAAsB,CAAC,MAAA,EAAA,GAAsB;AACnD,IAAA,MAAM,eAAA,EAAiB,IAAA,CAAK,oBAAA,CAAgB,GAAA,CAAI,CAAA;AAChD,IAAA,GAAA,CAAI,cAAA,CAAe,GAAA,CAAI,MAAA,CAAO,IAAI,CAAA,EAAG;AAEnC,sBAAA,cAAA,uBAAe,GAAA,qBAAI,MAAA,CAAO,IAAI,CAAA,+BAAG,OAAA,qBAAQ,GAAA;AACzC,MAAA,MAAA;AAAA,IACF;AACA,IAAA,MAAM,QAAA,EAAU,IAAI,WAAA,CAAY;AAAA,MAC9B,GAAA,EAAK,MAAA;AAAA,MACL,MAAA,EAAQ,KAAA;AAAA,MACR,SAAA,EAAW,IAAA,CAAK,SAAA;AAAA,MAChB,QAAA,EAAU,IAAA,CAAK,QAAA;AAAA,MACf,aAAA,mBAAe,IAAA,CAAK,OAAA,CAAQ,0BAAA,UAA8B;AAAA,IAC5D,CAAC,CAAA;AACD,IAAA,cAAA,CAAe,GAAA,CAAI,MAAA,CAAO,IAAA,EAAM,OAAO,CAAA;AAAA,EACzC,EAAA;AAAA;AAAA,mBAGO,WAAA,EAAa,CAAC,IAAA,EAAA,GAA0B;AAC7C,IAAA,IAAA,CAAA,MAAW,OAAA,GAAU,IAAA,CAAK,OAAA,CAAQ,OAAA,EAAS;AACzC,MAAA,GAAA,CAAI,MAAA,CAAO,KAAA,IAAS,IAAA,EAAM;AACxB,QAAA,MAAA,CAAO,IAAA,CAAK,CAAA;AACZ,QAAA,OAAO,IAAA;AAAA,MACT;AAAA,IACF;AAEA,IAAA,OAAO,KAAA;AAAA,EACT,EAAA;AAAA,mBAEQ,QAAA,EAAU,CAAA,EAAA,GAAM;AACtB,IAAA,IAAA,CAAK,cAAA,CAAe,OAAA,CAAQ,CAAA;AAC5B,IAAA,IAAA,CAAA,MAAW,CAAC,CAAA,EAAG,OAAO,EAAA,GAAK,IAAA,CAAK,oBAAA,CAAgB,GAAA,CAAI,CAAA,EAAG;AACrD,MAAA,OAAA,CAAQ,OAAA,CAAQ,CAAA;AAAA,IAClB;AAAA,EACF,EAAA;AAAA,EAEA,IAAI,aAAA,CAAA,EAAyB;AAC3B,IAAA,wBAAO,IAAA,CAAK,OAAA,CAAQ,0BAAA,UAA8B,OAAA;AAAA,EACpD;AAAA;AAAA,EAGA,IAAI,MAAA,CAAA,EAAkB;AACpB,IAAA,OAAO,IAAA,CAAK,cAAA,CAAe,MAAA;AAAA,EAC7B;AAAA,EAEA,MAAM,KAAA,CAAA,EAAuB;AAC3B,IAAA,sBAAM,IAAA,uBAAK,iBAAA,+BAAmB,OAAA,qBAAQ,GAAA;AACtC,IAAA,IAAA,CAAK,kBAAA,EAAoB,IAAA;AACzB,IAAA,IAAA,CAAK,SAAA,EAAW,IAAA;AAAA,EAClB;AAAA,EAEA,OAAA,CAAA,EAAgB;AACd,IAAA,IAAA,CAAK,SAAA,EAAW,KAAA;AAChB,IAAA,GAAA,CAAI,IAAA,CAAK,OAAA,CAAQ,2BAAA,EAA6B;AAC5C,MAAA,IAAA,CAAK,mBAAA,CAAoB,CAAA;AAAA,IAC3B;AACA,IAAA,IAAA,CAAK,cAAA,CAAe,OAAA,CAAQ,CAAA;AAAA,EAC9B;AAAA,EAEO,SAAA,CAAA,EAA2B;AAChC,IAAA,OAAO,IAAA,CAAK,gBAAA,CAAY,GAAA,CAAI,CAAA;AAAA,EAC9B;AAAA,EAEA,OAAA,CAAA,EAAgB;AACd,IAAA,IAAA,CAAK,aAAA,CAAc,OAAA,CAAQ,CAAC,KAAA,EAAA,GAAU,KAAA,CAAM,CAAC,CAAA;AAC7C,IAAA,IAAA,CAAK,SAAA,CAAU,OAAA,CAAQ,CAAA;AACvB,IAAA,IAAA,CAAK,cAAA,CAAe,OAAA,CAAQ,CAAA;AAC5B,IAAA,IAAA,CAAK,WAAA,kBAAa,IAAI,GAAA,CAAI,CAAA;AAC1B,IAAA,IAAA,CAAA,MAAW,CAAC,CAAA,EAAG,OAAO,EAAA,GAAK,IAAA,CAAK,oBAAA,CAAgB,GAAA,CAAI,CAAA,EAAG;AACrD,MAAA,OAAA,CAAQ,OAAA,CAAQ,CAAA;AAAA,IAClB;AACA,IAAA,IAAA,CAAK,oBAAA,CAAgB,GAAA,CAAI,CAAA,CAAE,KAAA,CAAM,CAAA;AACjC,IAAA,KAAA,CAAM,OAAA,CAAQ,CAAA;AAAA,EAChB;AAAA,EAEA,MAAM,gBAAA,CAAA,EAAkC;AACtC,IAAA,GAAA,CAAI,CAAC,IAAA,CAAK,iBAAA,EAAmB,MAAA;AAC7B,IAAA,OAAO,IAAA,CAAK,iBAAA,CAAkB,SAAA,CAAU,CAAA;AAAA,EAC1C;AAAA,EAEA,OAAA,CAAA,EAAe;AACb,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,EACd;AAAA;AAAA,EAGA,UAAA,CAAA,EAAmB;AAAA,EAEnB;AAAA,EAEA,OAAA,CAAA,EAAgB;AAAA,EAEhB;AAAA,EAEA,IAAI,cAAA,CAAA,EAA2C;AAC7C,IAAA,OAAO,IAAA,CAAK,oBAAA,CAAgB,GAAA,CAAI,CAAA;AAAA,EAClC;AAAA,EAEA,IAAI,cAAA,CAAe,KAAA,EAAiC;AAClD,IAAA,IAAA,CAAK,oBAAA,CAAgB,MAAA,CAAO,CAAC,GAAA,EAAA,GAAQ;AACnC,MAAA,GAAA,CAAI,KAAA,CAAM,CAAA;AACV,MAAA,IAAA,CAAA,MAAW,CAAC,GAAA,EAAK,OAAO,EAAA,GAAK,KAAA,EAAO;AAClC,QAAA,GAAA,CAAI,GAAA,CAAI,GAAA,EAAK,OAAO,CAAA;AAAA,MACtB;AAAA,IACF,CAAC,CAAA;AAAA,EACH;AACF,WAAA;AH2MA;AACA;AM9gBA;AAUA,IAAM,aAAA,kBAAe,IAAI,OAAA,CAA2C,CAAA;AAQpE,IAAM,sBAAA,EAAwB,CAC5B,IAAA,EACA,QAAA,EAA2B,CAAC,CAAA,EAC5B,iBAAA,EAA4B,KAAA,EAAA,GACF;AAC1B,EAAA,MAAM,SAAA,EAAW,YAAA,CAAa,GAAA,CAAI,IAAI,CAAA;AACtC,EAAA,GAAA,CAAI,SAAA,IAAa,KAAA,CAAA,EAAW;AAC1B,IAAA,GAAA,CAAI,CAAC,gBAAA,EAAkB;AACrB,MAAA,OAAO,QAAA;AAAA,IACT;AAEA,IAAA,QAAA,CAAS,OAAA,CAAQ,CAAA;AACjB,IAAA,YAAA,CAAa,MAAA,CAAO,IAAI,CAAA;AAAA,EAC1B;AACA,EAAA,MAAM,IAAA,EAAM,IAAI,aAAA,CAAI,CAAA;AACpB,EAAA,MAAM,YAAA,EAAc,IAAI,qBAAA,CAAsB,IAAA,EAAM,GAAA,EAAK,OAAO,CAAA;AAEhE,EAAA,IAAA,CAAK,MAAA,CAAO,eAAA,CAAgB,aAAA,CAAc,CAAA,EAAA,GAAM;AAC9C,IAAA,WAAA,CAAY,OAAA,CAAQ,CAAA;AAAA,EACtB,CAAC,CAAA;AACD,EAAA,YAAA,CAAa,GAAA,CAAI,IAAA,EAAM,WAAW,CAAA;AAClC,EAAA,OAAO,WAAA;AACT,CAAA;AN0fA;AACA;AChiBA,+BAAA,QAAY,EAAU,WAAA,EAAa,UAAU,CAAA;ADkiB7C;AACE;AACA;AACF,6GAAC","file":"/home/runner/work/liveblocks/liveblocks/packages/liveblocks-yjs/dist/index.cjs","sourcesContent":[null,"import { detectDupes } from \"@liveblocks/core\";\n\nimport { PKG_FORMAT, PKG_NAME, PKG_VERSION } from \"./version\";\n\ndetectDupes(PKG_NAME, PKG_VERSION, PKG_FORMAT);\n\nexport type { ProviderOptions } from \"./provider\";\nexport { LiveblocksYjsProvider } from \"./provider\";\nexport { getYjsProviderForRoom } from \"./providerContext\";\n","declare const __VERSION__: string;\ndeclare const TSUP_FORMAT: string;\n\nexport const PKG_NAME = \"@liveblocks/yjs\";\nexport const PKG_VERSION = typeof __VERSION__ === \"string\" && __VERSION__;\nexport const PKG_FORMAT = typeof TSUP_FORMAT === \"string\" && TSUP_FORMAT;\n","import {\n  DerivedSignal,\n  type IYjsProvider,\n  type OpaqueRoom,\n  type YjsSyncStatus,\n} from \"@liveblocks/core\";\nimport { ClientMsgCode, kInternal, MutableSignal } from \"@liveblocks/core\";\nimport { Base64 } from \"js-base64\";\nimport { Observable } from \"lib0/observable\";\nimport { IndexeddbPersistence } from \"y-indexeddb\";\nimport type { Doc } from \"yjs\";\nimport { PermanentUserData } from \"yjs\";\n\nimport { Awareness } from \"./awareness\";\nimport yDocHandler from \"./doc\";\n\nexport type ProviderOptions = {\n  enablePermanentUserData?: boolean;\n  autoloadSubdocs?: boolean;\n  offlineSupport_experimental?: boolean;\n  useV2Encoding_experimental?: boolean;\n};\n\nexport class LiveblocksYjsProvider\n  extends Observable<unknown>\n  implements IYjsProvider\n{\n  private readonly room: OpaqueRoom;\n  private readonly rootDoc: Doc;\n  private readonly options: ProviderOptions;\n  private indexeddbProvider: IndexeddbPersistence | null = null;\n  private isPaused = false;\n\n  private readonly unsubscribers: Array<() => void> = [];\n\n  public readonly awareness: Awareness;\n\n  public readonly rootDocHandler: yDocHandler;\n  private readonly subdocHandlersΣ = new MutableSignal<\n    Map<string, yDocHandler>\n  >(new Map());\n  private readonly syncStatusΣ: DerivedSignal<YjsSyncStatus>;\n\n  public readonly permanentUserData?: PermanentUserData;\n\n  constructor(room: OpaqueRoom, doc: Doc, options: ProviderOptions = {}) {\n    super();\n    this.rootDoc = doc;\n    this.room = room;\n    this.options = options;\n    this.rootDocHandler = new yDocHandler({\n      doc,\n      isRoot: true,\n      updateDoc: this.updateDoc,\n      fetchDoc: this.fetchDoc,\n      useV2Encoding: this.options.useV2Encoding_experimental ?? false,\n    });\n\n    if (this.options.enablePermanentUserData) {\n      this.permanentUserData = new PermanentUserData(doc);\n    }\n\n    // TODO: Display a warning if a YjsProvider is already attached to the room\n    room[kInternal].setYjsProvider(this);\n\n    // if we have a connectionId already during construction, use that\n    this.awareness = new Awareness(this.rootDoc, this.room);\n\n    this.unsubscribers.push(\n      this.room.events.status.subscribe((status) => {\n        if (status === \"connected\") {\n          this.rootDocHandler.syncDoc();\n        } else {\n          this.rootDocHandler.synced = false;\n        }\n      })\n    );\n\n    this.unsubscribers.push(\n      this.room.events.ydoc.subscribe((message) => {\n        const { type } = message;\n        if (type === ClientMsgCode.UPDATE_YDOC) {\n          // don't apply updates that came from the client\n          return;\n        }\n        const {\n          stateVector,\n          update: updateStr,\n          guid,\n          v2,\n          remoteSnapshotHash,\n        } = message;\n        const canWrite = this.room.getSelf()?.canWrite ?? true;\n        const update = Base64.toUint8Array(updateStr);\n\n        // find the right doc and update\n        if (guid !== undefined) {\n          this.subdocHandlersΣ.get().get(guid)?.handleServerUpdate({\n            update,\n            stateVector,\n            readOnly: !canWrite,\n            v2,\n            remoteSnapshotHash,\n          });\n        } else {\n          this.rootDocHandler.handleServerUpdate({\n            update,\n            stateVector,\n            readOnly: !canWrite,\n            v2,\n            remoteSnapshotHash,\n          });\n        }\n      })\n    );\n\n    if (options.offlineSupport_experimental) {\n      this.setupOfflineSupport();\n    }\n\n    // different consumers listen to sync and synced\n    this.rootDocHandler.on(\"synced\", () => {\n      const state = this.rootDocHandler.synced;\n      for (const [_, handler] of this.subdocHandlersΣ.get()) {\n        handler.syncDoc();\n      }\n      this.emit(\"synced\", [state]);\n      this.emit(\"sync\", [state]);\n    });\n    this.rootDoc.on(\"subdocs\", this.handleSubdocs);\n    this.syncDoc();\n\n    this.syncStatusΣ = DerivedSignal.from(() => {\n      // If the root document is loading or synchronizing, we infer that the overall status is also loading or synchronizing.\n      const rootDocumentStatus =\n        this.rootDocHandler.experimental_getSyncStatus();\n      if (\n        rootDocumentStatus === \"loading\" ||\n        rootDocumentStatus === \"synchronizing\"\n      ) {\n        return rootDocumentStatus;\n      }\n\n      // If the root document is synchronized, we check if all subdocs are synchronized. If at least one subdoc is not synchronized, we are still synchronizing.\n      const subdocumentStatuses = Array.from(\n        this.subdocHandlersΣ.get().values()\n      ).map((handler) => handler.experimental_getSyncStatus());\n      if (subdocumentStatuses.some((state) => state !== \"synchronized\")) {\n        return \"synchronizing\";\n      }\n      return \"synchronized\";\n    });\n\n    this.emit(\"status\", [this.getStatus()]);\n\n    this.unsubscribers.push(\n      this.syncStatusΣ.subscribe(() => {\n        this.emit(\"status\", [this.getStatus()]);\n      })\n    );\n  }\n\n  private setupOfflineSupport = () => {\n    this.indexeddbProvider = new IndexeddbPersistence(\n      this.room.id,\n      this.rootDoc\n    );\n    const onIndexedDbSync = () => {\n      this.rootDocHandler.synced = true;\n    };\n    this.indexeddbProvider.on(\"synced\", onIndexedDbSync);\n\n    this.unsubscribers.push(() => {\n      this.indexeddbProvider?.off(\"synced\", onIndexedDbSync);\n    });\n  };\n\n  private handleSubdocs = ({\n    loaded,\n    removed,\n    added,\n  }: {\n    loaded: Set<Doc>;\n    removed: Set<Doc>;\n    added: Set<Doc>;\n  }) => {\n    loaded.forEach(this.createSubdocHandler);\n    const subdocHandlers = this.subdocHandlersΣ.get();\n    if (this.options.autoloadSubdocs) {\n      for (const subdoc of added) {\n        if (!subdocHandlers.has(subdoc.guid)) {\n          subdoc.load();\n        }\n      }\n    }\n    for (const subdoc of removed) {\n      if (subdocHandlers.has(subdoc.guid)) {\n        subdocHandlers.get(subdoc.guid)?.destroy();\n        subdocHandlers.delete(subdoc.guid);\n      }\n    }\n  };\n\n  private updateDoc = (update: Uint8Array, guid?: string) => {\n    const canWrite = this.room.getSelf()?.canWrite ?? true;\n    if (canWrite && !this.isPaused) {\n      this.room.updateYDoc(\n        Base64.fromUint8Array(update),\n        guid,\n        this.useV2Encoding\n      );\n    }\n  };\n\n  private fetchDoc = (vector: string, guid?: string) => {\n    this.room.fetchYDoc(vector, guid, this.useV2Encoding);\n  };\n\n  private createSubdocHandler = (subdoc: Doc): void => {\n    const subdocHandlers = this.subdocHandlersΣ.get();\n    if (subdocHandlers.has(subdoc.guid)) {\n      // if we already handle this subdoc, just fetch it again\n      subdocHandlers.get(subdoc.guid)?.syncDoc();\n      return;\n    }\n    const handler = new yDocHandler({\n      doc: subdoc,\n      isRoot: false,\n      updateDoc: this.updateDoc,\n      fetchDoc: this.fetchDoc,\n      useV2Encoding: this.options.useV2Encoding_experimental ?? false,\n    });\n    subdocHandlers.set(subdoc.guid, handler);\n  };\n\n  // attempt to load a subdoc of a given guid\n  public loadSubdoc = (guid: string): boolean => {\n    for (const subdoc of this.rootDoc.subdocs) {\n      if (subdoc.guid === guid) {\n        subdoc.load();\n        return true;\n      }\n    }\n    // should we throw instead?\n    return false;\n  };\n\n  private syncDoc = () => {\n    this.rootDocHandler.syncDoc();\n    for (const [_, handler] of this.subdocHandlersΣ.get()) {\n      handler.syncDoc();\n    }\n  };\n\n  get useV2Encoding(): boolean {\n    return this.options.useV2Encoding_experimental ?? false;\n  }\n\n  // The sync'd property is required by some provider implementations\n  get synced(): boolean {\n    return this.rootDocHandler.synced;\n  }\n\n  async pause(): Promise<void> {\n    await this.indexeddbProvider?.destroy();\n    this.indexeddbProvider = null;\n    this.isPaused = true;\n  }\n\n  unpause(): void {\n    this.isPaused = false;\n    if (this.options.offlineSupport_experimental) {\n      this.setupOfflineSupport();\n    }\n    this.rootDocHandler.syncDoc();\n  }\n\n  public getStatus(): YjsSyncStatus {\n    return this.syncStatusΣ.get();\n  }\n\n  destroy(): void {\n    this.unsubscribers.forEach((unsub) => unsub());\n    this.awareness.destroy();\n    this.rootDocHandler.destroy();\n    this._observers = new Map();\n    for (const [_, handler] of this.subdocHandlersΣ.get()) {\n      handler.destroy();\n    }\n    this.subdocHandlersΣ.get().clear();\n    super.destroy();\n  }\n\n  async clearOfflineData(): Promise<void> {\n    if (!this.indexeddbProvider) return;\n    return this.indexeddbProvider.clearData();\n  }\n\n  getYDoc(): Doc {\n    return this.rootDoc;\n  }\n\n  // Some provider implementations expect to be able to call connect/disconnect, implement as noop\n  disconnect(): void {\n    // This is a noop for liveblocks as connections are managed by the room\n  }\n\n  connect(): void {\n    // This is a noop for liveblocks as connections are managed by the room\n  }\n\n  get subdocHandlers(): Map<string, yDocHandler> {\n    return this.subdocHandlersΣ.get();\n  }\n\n  set subdocHandlers(value: Map<string, yDocHandler>) {\n    this.subdocHandlersΣ.mutate((map) => {\n      map.clear();\n      for (const [key, handler] of value) {\n        map.set(key, handler);\n      }\n    });\n  }\n}\n","import type { BaseUserMeta, JsonObject, User } from \"@liveblocks/client\";\nimport type { OpaqueRoom } from \"@liveblocks/core\";\nimport { Observable } from \"lib0/observable\";\nimport type * as Y from \"yjs\";\n\nconst Y_PRESENCE_KEY = \"__yjs\";\nconst Y_PRESENCE_ID_KEY = \"__yjs_clientid\";\n\ntype MetaClientState = {\n  clock: number;\n  lastUpdated: number;\n};\n\n/**\n * This class will store Yjs awareness in Liveblock's presence under the __yjs key\n * IMPORTANT: The Yjs awareness protocol uses ydoc.clientId to reference users\n * to their respective documents. To avoid mapping Yjs clientIds to liveblock's connectionId,\n * we simply set the clientId of the doc to the connectionId. Then no further mapping is required\n */\nexport class Awareness extends Observable<unknown> {\n  private room: OpaqueRoom;\n  public doc: Y.Doc;\n  public states: Map<number, unknown> = new Map();\n  // used to map liveblock's ActorId to Yjs ClientID, both unique numbers representing a client\n  public actorToClientMap: Map<number, number> = new Map();\n  // Meta is used to keep track and timeout users who disconnect. Liveblocks provides this for us, so we don't need to\n  // manage it here. Unfortunately, it's expected to exist by various integrations, so it's an empty map.\n  public meta: Map<number, MetaClientState> = new Map();\n  // _checkInterval this would hold a timer to remove users, but Liveblock's presence already handles this\n  // unfortunately it's typed by various integrations\n  public _checkInterval: number = 0;\n\n  private othersUnsub: () => void;\n  constructor(doc: Y.Doc, room: OpaqueRoom) {\n    super();\n    this.doc = doc;\n    this.room = room;\n    // Add the clientId to presence so we can map it to connectionId later\n    this.room.updatePresence({\n      [Y_PRESENCE_ID_KEY]: this.doc.clientID,\n    });\n    this.othersUnsub = this.room.events.others.subscribe((event) => {\n      let updates:\n        | { added: number[]; updated: number[]; removed: number[] }\n        | undefined;\n\n      // When others are changed, we emit an event that contains arrays added/updated/removed.\n      if (event.type === \"leave\") {\n        const targetClientId = this.actorToClientMap.get(\n          event.user.connectionId\n        );\n        if (targetClientId !== undefined) {\n          updates = { added: [], updated: [], removed: [targetClientId] };\n        }\n        // rebuild after the user leaves so we can get the ID of the user who left\n        this.rebuildActorToClientMap(event.others);\n      }\n      if (event.type === \"enter\" || event.type === \"update\") {\n        this.rebuildActorToClientMap(event.others);\n        const targetClientId = this.actorToClientMap.get(\n          event.user.connectionId\n        );\n        if (targetClientId !== undefined) {\n          updates = {\n            added: event.type === \"enter\" ? [targetClientId] : [],\n            updated: event.type === \"update\" ? [targetClientId] : [],\n            removed: [],\n          };\n        }\n      }\n      if (event.type === \"reset\") {\n        this.rebuildActorToClientMap(event.others);\n      }\n      if (updates !== undefined) {\n        this.emit(\"change\", [updates, \"presence\"]);\n        this.emit(\"update\", [updates, \"presence\"]);\n      }\n    });\n  }\n\n  rebuildActorToClientMap(\n    others: readonly User<JsonObject, BaseUserMeta>[]\n  ): void {\n    this.actorToClientMap.clear();\n    others.forEach((user) => {\n      if (user.presence[Y_PRESENCE_ID_KEY] !== undefined) {\n        this.actorToClientMap.set(\n          user.connectionId,\n          user.presence[Y_PRESENCE_ID_KEY] as number\n        );\n      }\n    });\n  }\n\n  destroy(): void {\n    this.emit(\"destroy\", [this]);\n    this.othersUnsub();\n    this.setLocalState(null);\n    super.destroy();\n  }\n\n  getLocalState(): JsonObject | null {\n    const presence = this.room.getPresence();\n    if (\n      Object.keys(presence).length === 0 ||\n      typeof presence[Y_PRESENCE_KEY] === \"undefined\"\n    ) {\n      return null;\n    }\n    return presence[Y_PRESENCE_KEY] as JsonObject | null;\n  }\n\n  setLocalState(state: Partial<JsonObject> | null): void {\n    const presence = this.room.getSelf()?.presence;\n    if (state === null) {\n      if (presence === undefined) {\n        // if presence is already undefined, we don't need to change anything here\n        return;\n      }\n      this.room.updatePresence({ ...presence, [Y_PRESENCE_KEY]: null });\n      this.emit(\"update\", [\n        { added: [], updated: [], removed: [this.doc.clientID] },\n        \"local\",\n      ]);\n      return;\n    }\n    // if presence was undefined, it's added, if not, it's updated\n    const yPresence = presence?.[Y_PRESENCE_KEY];\n    const added = yPresence === undefined ? [this.doc.clientID] : [];\n    const updated = yPresence === undefined ? [] : [this.doc.clientID];\n    this.room.updatePresence({\n      [Y_PRESENCE_KEY]: {\n        ...((yPresence as JsonObject) || {}),\n        ...(state || {}),\n      },\n    });\n    this.emit(\"update\", [{ added, updated, removed: [] }, \"local\"]);\n  }\n\n  setLocalStateField(field: string, value: JsonObject | null): void {\n    const presence = this.room.getSelf()?.presence[Y_PRESENCE_KEY];\n    const update = { [field]: value } as Partial<JsonObject>;\n    this.room.updatePresence({\n      [Y_PRESENCE_KEY]: { ...((presence as JsonObject) || {}), ...update },\n    });\n  }\n\n  // Translate liveblocks presence to yjs awareness\n  getStates(): Map<number, unknown> {\n    const others = this.room.getOthers();\n    const states = others.reduce((acc: Map<number, unknown>, otherUser) => {\n      const otherPresence = otherUser.presence[Y_PRESENCE_KEY];\n      const otherClientId = otherUser.presence[Y_PRESENCE_ID_KEY] as\n        | number\n        | undefined;\n      if (otherPresence !== undefined && otherClientId !== undefined) {\n        // set states of map clientId to yjs presence\n        acc.set(otherClientId, otherPresence || {});\n      }\n      return acc;\n    }, new Map<number, unknown>());\n\n    // add this client's yjs presence to states (local client not represented in others)\n    const localPresence = this.room.getSelf()?.presence[Y_PRESENCE_KEY];\n    if (localPresence !== undefined) {\n      states.set(this.doc.clientID, localPresence);\n    }\n    return states;\n  }\n}\n","import {\n  DerivedSignal,\n  Signal as Signal,\n  type YjsSyncStatus,\n} from \"@liveblocks/core\";\nimport { sha256 } from \"@noble/hashes/sha2\";\nimport { Base64 } from \"js-base64\";\nimport { Observable } from \"lib0/observable\";\nimport { IndexeddbPersistence } from \"y-indexeddb\";\nimport * as Y from \"yjs\";\n\nexport default class yDocHandler extends Observable<unknown> {\n  private unsubscribers: Array<() => void> = [];\n\n  private _synced = false;\n  private doc: Y.Doc;\n  private updateRoomDoc: (update: Uint8Array) => void;\n  private fetchRoomDoc: (vector: string) => void;\n  private useV2Encoding: boolean;\n  private localSnapshotHashΣ: Signal<string>;\n  private remoteSnapshotHashΣ: Signal<string | null>;\n  private hasEverSyncedΣ: Signal<boolean>;\n\n  private debounceTimer: ReturnType<typeof setTimeout> | null = null;\n  private static readonly DEBOUNCE_INTERVAL_MS = 200;\n\n  private isLocalAndRemoteSnapshotEqualΣ: DerivedSignal<boolean>;\n\n  constructor({\n    doc,\n    isRoot,\n    updateDoc,\n    fetchDoc,\n    useV2Encoding,\n  }: {\n    doc: Y.Doc;\n    isRoot: boolean;\n    updateDoc: (update: Uint8Array, guid?: string) => void;\n    fetchDoc: (vector: string, guid?: string) => void;\n    useV2Encoding: boolean;\n  }) {\n    super();\n    this.doc = doc;\n    this.useV2Encoding = useV2Encoding;\n    // this.doc.load(); // this just emits a load event, it doesn't actually load anything\n    this.doc.on(useV2Encoding ? \"updateV2\" : \"update\", this.updateHandler);\n    this.updateRoomDoc = (update: Uint8Array) => {\n      updateDoc(update, isRoot ? undefined : this.doc.guid);\n    };\n    this.fetchRoomDoc = (vector: string) => {\n      fetchDoc(vector, isRoot ? undefined : this.doc.guid);\n    };\n\n    this.syncDoc();\n\n    const encodedSnapshot = this.useV2Encoding\n      ? Y.encodeSnapshotV2(Y.snapshot(this.doc))\n      : Y.encodeSnapshot(Y.snapshot(this.doc));\n\n    this.localSnapshotHashΣ = new Signal(\n      Base64.fromUint8Array(sha256(encodedSnapshot))\n    );\n    this.remoteSnapshotHashΣ = new Signal<string | null>(null);\n\n    this.hasEverSyncedΣ = new Signal<boolean>(false);\n\n    this.isLocalAndRemoteSnapshotEqualΣ = DerivedSignal.from(() => {\n      const remoteSnapshotHash = this.remoteSnapshotHashΣ.get();\n      if (remoteSnapshotHash === null) return false;\n\n      const localSnapshotHash = this.localSnapshotHashΣ.get();\n      if (localSnapshotHash !== remoteSnapshotHash) {\n        return false;\n      }\n      return true;\n    });\n  }\n\n  public handleServerUpdate = ({\n    update,\n    stateVector,\n    readOnly,\n    v2,\n    remoteSnapshotHash,\n  }: {\n    update: Uint8Array;\n    stateVector: string | null;\n    readOnly: boolean;\n    v2?: boolean;\n    remoteSnapshotHash: string;\n  }): void => {\n    // apply update from the server, updates from the server can be v1 or v2\n    const applyUpdate = v2 ? Y.applyUpdateV2 : Y.applyUpdate;\n    applyUpdate(this.doc, update, \"backend\");\n    // if this update is the result of a fetch, the state vector is included\n    if (stateVector) {\n      if (!readOnly) {\n        // Use server state to calculate a diff and send it\n        try {\n          // send v1 or v2update according to client option\n          const encodeUpdate = this.useV2Encoding\n            ? Y.encodeStateAsUpdateV2\n            : Y.encodeStateAsUpdate;\n          const localUpdate = encodeUpdate(\n            this.doc,\n            Base64.toUint8Array(stateVector)\n          );\n          this.updateRoomDoc(localUpdate);\n        } catch (e) {\n          // something went wrong encoding local state to send to the server\n          console.warn(e);\n        }\n      }\n      // now that we've sent our local and received from server, we're in sync\n      // calling `syncDoc` again will sync up the documents\n      this.synced = true;\n      this.hasEverSyncedΣ.set(true);\n    }\n\n    this.remoteSnapshotHashΣ.set(remoteSnapshotHash);\n  };\n\n  public syncDoc = (): void => {\n    this.synced = false;\n\n    // The state vector is sent to the server so it knows what to send back\n    // if you don't send it, it returns everything\n    const encodedVector = Base64.fromUint8Array(Y.encodeStateVector(this.doc));\n    this.fetchRoomDoc(encodedVector);\n  };\n\n  // The sync'd property is required by some provider implementations\n  get synced(): boolean {\n    return this._synced;\n  }\n\n  set synced(state: boolean) {\n    if (this._synced !== state) {\n      this._synced = state;\n      this.emit(\"synced\", [state]);\n      this.emit(\"sync\", [state]);\n    }\n  }\n\n  private debounced_updateLocalSnapshot() {\n    if (this.debounceTimer) clearTimeout(this.debounceTimer);\n    this.debounceTimer = setTimeout(() => {\n      // Compute local snapshot and update the local snapshot state\n      const encodedSnapshot = this.useV2Encoding\n        ? Y.encodeSnapshotV2(Y.snapshot(this.doc))\n        : Y.encodeSnapshot(Y.snapshot(this.doc));\n      this.localSnapshotHashΣ.set(\n        Base64.fromUint8Array(sha256(encodedSnapshot))\n      );\n      this.debounceTimer = null;\n    }, yDocHandler.DEBOUNCE_INTERVAL_MS);\n  }\n\n  private updateHandler = (\n    update: Uint8Array,\n    origin: string | IndexeddbPersistence\n  ) => {\n    this.debounced_updateLocalSnapshot();\n\n    // don't send updates from indexedb, those will get handled by sync\n    const isFromLocal = origin instanceof IndexeddbPersistence;\n    if (origin !== \"backend\" && !isFromLocal) {\n      this.updateRoomDoc(update);\n    }\n  };\n\n  experimental_getSyncStatus(): YjsSyncStatus {\n    const hasEverSynced = this.hasEverSyncedΣ.get();\n    if (!hasEverSynced) {\n      return \"loading\";\n    }\n    if (!this.isLocalAndRemoteSnapshotEqualΣ.get()) {\n      return \"synchronizing\";\n    }\n    return \"synchronized\";\n  }\n\n  destroy(): void {\n    if (this.debounceTimer) clearTimeout(this.debounceTimer);\n    this.doc.off(\"update\", this.updateHandler);\n    this.unsubscribers.forEach((unsub) => unsub());\n    this._observers = new Map();\n    this.doc.destroy();\n  }\n}\n","import type { OpaqueRoom } from \"@liveblocks/core\";\nimport { Doc } from \"yjs\";\n\nimport { LiveblocksYjsProvider, type ProviderOptions } from \"./provider\";\n\n/* NOTE:\n      the purpose of the providersMap is to keep the same provider alive across renders\n      re-instantiating the provider when the room hasn't changed can cause the yjs doc state to be out of sync\n      with liveblocks yjs state. In this instance, we can just check if the room has changed, because the instance\n      from useRoom will be referentially equal to the previous instance.\n*/\nconst providersMap = new WeakMap<OpaqueRoom, LiveblocksYjsProvider>();\n\n/**\n * Get a LiveblocksYjsProvider for a room.\n * @param room - The room to get the provider for.\n * @param options - The options for the provider.\n * @returns A LiveblocksYjsProvider for the room.\n */\nconst getYjsProviderForRoom = (\n  room: OpaqueRoom,\n  options: ProviderOptions = {},\n  forceNewProvider: boolean = false\n): LiveblocksYjsProvider => {\n  const provider = providersMap.get(room);\n  if (provider !== undefined) {\n    if (!forceNewProvider) {\n      return provider;\n    }\n    // we're going to get a new provider, so we need to destroy the old one\n    provider.destroy();\n    providersMap.delete(room);\n  }\n  const doc = new Doc();\n  const newProvider = new LiveblocksYjsProvider(room, doc, options);\n\n  room.events.roomWillDestroy.subscribeOnce(() => {\n    newProvider.destroy();\n  });\n  providersMap.set(room, newProvider);\n  return newProvider;\n};\n\nexport { getYjsProviderForRoom };\n"]}