@sprintup-cms/sdk 1.0.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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/next/revalidate.ts","../../src/next/preview-exit.ts","../../src/client.ts","../../src/react/blocks.tsx","../../src/next/catch-all.tsx"],"names":["POST","NextResponse","revalidatePath","revalidateTag","GET","draftMode","cookies","React","jsx","jsxs","notFound"],"mappings":";;;;;;;;;;;;;;;AA8BO,SAAS,wBAAwB,OAAA,EAAoC;AAC1E,EAAA,OAAO,eAAeA,MAAK,OAAA,EAA6C;AACtE,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAS,OAAA,EAAS,MAAA,IAAU,OAAA,CAAQ,GAAA,CAAI,kBAAA;AAC9C,MAAA,MAAM,cAAA,GAAiB,OAAA,CAAQ,OAAA,CAAQ,GAAA,CAAI,sBAAsB,CAAA;AAEjE,MAAA,IAAI,MAAA,IAAU,mBAAmB,MAAA,EAAQ;AACvC,QAAA,OAAOC,mBAAA,CAAa,KAAK,EAAE,KAAA,EAAO,gBAAe,EAAG,EAAE,MAAA,EAAQ,GAAA,EAAK,CAAA;AAAA,MACrE;AAEA,MAAA,MAAM,IAAA,GAA0B,MAAM,OAAA,CAAQ,IAAA,EAAK;AACnD,MAAA,MAAM,EAAE,IAAA,EAAM,GAAA,EAAI,GAAI,IAAA;AAEtB,MAAA,IAAI,CAAC,IAAA,EAAM;AACT,QAAA,OAAOA,mBAAA,CAAa,KAAK,EAAE,KAAA,EAAO,2BAA0B,EAAG,EAAE,MAAA,EAAQ,GAAA,EAAK,CAAA;AAAA,MAChF;AAGA,MAAAC,oBAAA,CAAe,CAAA,CAAA,EAAI,IAAI,CAAA,CAAE,CAAA;AAGzB,MAAAC,mBAAA,CAAc,CAAA,SAAA,EAAY,IAAI,CAAA,CAAE,CAAA;AAChC,MAAAA,mBAAA,CAAc,WAAW,CAAA;AACzB,MAAA,IAAI,GAAA,sBAAmB,GAAG,CAAA;AAG1B,MAAA,IAAI,KAAK,KAAA,KAAU,WAAA,IAAe,KAAK,GAAA,EAAK,UAAA,CAAW,gBAAgB,CAAA,EAAG;AACxE,QAAAD,oBAAA,CAAe,KAAK,QAAQ,CAAA;AAAA,MAC9B;AAEA,MAAA,MAAM,OAAA,EAAS,eAAe,IAAI,CAAA;AAElC,MAAA,OAAOD,oBAAa,IAAA,CAAK;AAAA,QACvB,WAAA,EAAa,IAAA;AAAA,QACb,IAAA;AAAA,QACA,OAAO,IAAA,CAAK,KAAA;AAAA,QACZ,SAAA,EAAA,iBAAW,IAAI,IAAA,EAAK,EAAE,WAAA;AAAY,OACnC,CAAA;AAAA,IACH,SAAS,GAAA,EAAU;AACjB,MAAA,OAAA,CAAQ,KAAA,CAAM,oCAAoC,GAAG,CAAA;AACrD,MAAA,OAAOA,mBAAA,CAAa,IAAA,CAAK,EAAE,KAAA,EAAO,GAAA,CAAI,SAAQ,EAAG,EAAE,MAAA,EAAQ,GAAA,EAAK,CAAA;AAAA,IAClE;AAAA,EACF,CAAA;AACF;AASO,IAAM,OAAO,uBAAA;AClEb,SAAS,yBAAyB,OAAA,EAA8B;AACrE,EAAA,OAAO,eAAeG,KAAI,OAAA,EAAyC;AACjE,IAAA,MAAM,KAAA,GAAQ,MAAMC,iBAAA,EAAU;AAC9B,IAAA,KAAA,CAAM,OAAA,EAAQ;AAEd,IAAA,MAAM,WAAA,GAAc,MAAMC,eAAA,EAAQ;AAClC,IAAA,WAAA,CAAY,OAAO,mBAAmB,CAAA;AACtC,IAAA,WAAA,CAAY,OAAO,wBAAwB,CAAA;AAE3C,IAAA,MAAM,UAAA,GAAa,SAAS,UAAA,IAAc,GAAA;AAC1C,IAAA,MAAM,GAAA,GAAM,IAAI,GAAA,CAAI,OAAA,CAAQ,GAAG,CAAA;AAC/B,IAAA,OAAOL,oBAAa,QAAA,CAAS,IAAI,IAAI,UAAA,EAAY,GAAA,CAAI,MAAM,CAAC,CAAA;AAAA,EAC9D,CAAA;AACF;AASO,IAAM,MAAM,wBAAA;;;AC4JZ,SAAS,gBAAgB,OAAA,EAA4B;AAK1D,EAAA,SAAS,GAAA,GAAM;AACb,IAAA,OAAO;AAAA,MACL,OAAA,EAAA,CAA8B,OAAA,CAAQ,GAAA,CAAI,mBAAA,IAAuB,OAAA,CAAQ,GAAA,CAAI,YAAA,IAAgB,EAAA,EAAI,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAA;AAAA,MAClH,MAAA,EAA6B,OAAA,CAAQ,IAAI,WAAA,IAAgB,EAAA;AAAA,MACzD,KAAA,EAA6B,OAAA,CAAQ,IAAI,UAAA,IAAgB;AAAA,KAC3D;AAAA,EACF;AAEA,EAAA,SAAS,OAAA,GAAU;AACjB,IAAA,OAAO,EAAE,eAAA,EAAiB,GAAA,EAAI,CAAE,MAAA,EAAQ,gBAAgB,kBAAA,EAAmB;AAAA,EAC7E;AAIA,EAAA,eAAe,SAAS,MAAA,EAAiD;AACvE,IAAA,MAAM,EAAE,OAAA,EAAS,MAAA,EAAQ,KAAA,KAAU,GAAA,EAAI;AACvC,IAAA,IAAI,CAAC,OAAA,IAAW,CAAC,MAAA,IAAU,CAAC,KAAA,EAAO;AACjC,MAAA,OAAA,CAAQ,KAAK,oFAA+E,CAAA;AAC5F,MAAA,OAAO,EAAC;AAAA,IACV;AACA,IAAA,IAAI;AACF,MAAA,MAAM,EAAA,GAAK,IAAI,eAAA,EAAgB;AAC/B,MAAA,IAAI,QAAQ,IAAA,EAAS,EAAA,CAAG,GAAA,CAAI,MAAA,EAAW,OAAO,IAAI,CAAA;AAClD,MAAA,IAAI,QAAQ,KAAA,EAAS,EAAA,CAAG,GAAA,CAAI,OAAA,EAAW,OAAO,KAAK,CAAA;AACnD,MAAA,IAAI,MAAA,EAAQ,MAAS,EAAA,CAAG,GAAA,CAAI,QAAW,MAAA,CAAO,MAAA,CAAO,IAAI,CAAC,CAAA;AAC1D,MAAA,IAAI,MAAA,EAAQ,SAAS,EAAA,CAAG,GAAA,CAAI,WAAW,MAAA,CAAO,MAAA,CAAO,OAAO,CAAC,CAAA;AAC7D,MAAA,MAAM,GAAA,GAAM,CAAA,EAAG,OAAO,CAAA,QAAA,EAAW,KAAK,CAAA,MAAA,EAAS,EAAA,CAAG,IAAA,GAAO,CAAA,CAAA,EAAI,EAAE,CAAA,CAAA,GAAK,EAAE,CAAA,CAAA;AACtE,MAAA,MAAM,GAAA,GAAM,MAAM,KAAA,CAAM,GAAA,EAAK;AAAA,QAC3B,SAAS,OAAA,EAAQ;AAAA,QACjB,IAAA,EAAM,EAAE,UAAA,EAAY,EAAA,EAAI,MAAM,CAAC,CAAA,UAAA,EAAa,KAAK,CAAA,CAAE,CAAA;AAAE,OACvC,CAAA;AAChB,MAAA,IAAI,CAAC,IAAI,EAAA,EAAI;AAAE,QAAA,OAAA,CAAQ,KAAA,CAAM,CAAA,yBAAA,EAA4B,GAAA,CAAI,MAAM,CAAA,CAAA,CAAG,CAAA;AAAG,QAAA,OAAO,EAAC;AAAA,MAAE;AACnF,MAAA,MAAM,IAAA,GAAwB,MAAM,GAAA,CAAI,IAAA,EAAK;AAC7C,MAAA,OAAO,IAAA,CAAK,QAAQ,EAAC;AAAA,IACvB,SAAS,GAAA,EAAK;AACZ,MAAA,OAAA,CAAQ,KAAA,CAAM,kCAAkC,GAAG,CAAA;AACnD,MAAA,OAAO,EAAC;AAAA,IACV;AAAA,EACF;AAEA,EAAA,eAAe,QAAQ,IAAA,EAAuC;AAC5D,IAAA,MAAM,EAAE,OAAA,EAAS,MAAA,EAAQ,KAAA,KAAU,GAAA,EAAI;AACvC,IAAA,IAAI,CAAC,OAAA,IAAW,CAAC,MAAA,IAAU,CAAC,KAAA,EAAO;AACjC,MAAA,OAAA,CAAQ,KAAK,qDAAgD,CAAA;AAC7D,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,IAAI;AACF,MAAA,MAAM,GAAA,GAAM,MAAM,KAAA,CAAM,CAAA,EAAG,OAAO,CAAA,QAAA,EAAW,KAAK,CAAA,OAAA,EAAU,IAAI,CAAA,CAAA,EAAI;AAAA,QAClE,SAAS,OAAA,EAAQ;AAAA,QACjB,IAAA,EAAM,EAAE,UAAA,EAAY,EAAA,EAAI,IAAA,EAAM,CAAC,CAAA,SAAA,EAAY,IAAI,CAAA,CAAA,EAAI,CAAA,UAAA,EAAa,KAAK,CAAA,CAAE,CAAA;AAAE,OAC3D,CAAA;AAChB,MAAA,IAAI,GAAA,CAAI,MAAA,KAAW,GAAA,EAAK,OAAO,IAAA;AAC/B,MAAA,IAAI,CAAC,IAAI,EAAA,EAAI;AAAE,QAAA,OAAA,CAAQ,MAAM,CAAA,wBAAA,EAA2B,IAAI,CAAA,GAAA,EAAM,GAAA,CAAI,MAAM,CAAA,CAAA,CAAG,CAAA;AAAG,QAAA,OAAO,IAAA;AAAA,MAAK;AAC9F,MAAA,MAAM,IAAA,GAA0B,MAAM,GAAA,CAAI,IAAA,EAAK;AAC/C,MAAA,OAAO,KAAK,IAAA,IAAQ,IAAA;AAAA,IACtB,SAAS,GAAA,EAAK;AACZ,MAAA,OAAA,CAAQ,KAAA,CAAM,CAAA,wBAAA,EAA2B,IAAI,CAAA,QAAA,CAAA,EAAY,GAAG,CAAA;AAC5D,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,EACF;AAEA,EAAA,eAAe,YAAA,GAAmC;AAChD,IAAA,OAAO,QAAA,CAAS,EAAE,IAAA,EAAM,WAAA,EAAa,CAAA;AAAA,EACvC;AAEA,EAAA,eAAe,SAAA,GAAgC;AAC7C,IAAA,OAAO,QAAA,CAAS,EAAE,IAAA,EAAM,YAAA,EAAc,CAAA;AAAA,EACxC;AAEA,EAAA,eAAe,gBAAA,GAAuC;AACpD,IAAA,OAAO,QAAA,CAAS,EAAE,IAAA,EAAM,mBAAA,EAAqB,CAAA;AAAA,EAC/C;AAIA,EAAA,eAAe,eAAe,KAAA,EAAwC;AACpE,IAAA,MAAM,EAAE,OAAA,EAAS,KAAA,EAAM,GAAI,GAAA,EAAI;AAC/B,IAAA,IAAI,CAAC,OAAA,IAAW,CAAC,KAAA,EAAO,OAAO,IAAA;AAC/B,IAAA,IAAI;AACF,MAAA,MAAM,GAAA,GAAM,MAAM,KAAA,CAAM,CAAA,EAAG,OAAO,CAAA,QAAA,EAAW,KAAK,CAAA,eAAA,EAAkB,kBAAA,CAAmB,KAAK,CAAC,CAAA,CAAA,EAAI;AAAA,QAC/F,KAAA,EAAO;AAAA,OACR,CAAA;AACD,MAAA,IAAI,CAAC,GAAA,CAAI,EAAA,EAAI,OAAO,IAAA;AACpB,MAAA,MAAM,IAAA,GAAO,MAAM,GAAA,CAAI,IAAA,EAAK;AAC5B,MAAA,OAAO,KAAK,IAAA,IAAQ,IAAA;AAAA,IACtB,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,EACF;AAEA,EAAA,eAAe,kBAAA,CAAmB,MAAc,YAAA,EAAuD;AACrG,IAAA,IAAI,YAAA,EAAc;AAChB,MAAA,MAAM,OAAA,GAAU,MAAM,cAAA,CAAe,YAAY,CAAA;AACjD,MAAA,IAAI,OAAA,EAAS,IAAA,KAAS,IAAA,EAAM,OAAO,OAAA;AAAA,IACrC;AACA,IAAA,OAAO,QAAQ,IAAI,CAAA;AAAA,EACrB;AAIA,EAAA,eAAe,YAAY,UAAA,EAAiD;AAC1E,IAAA,MAAM,EAAE,OAAA,EAAS,MAAA,EAAQ,KAAA,KAAU,GAAA,EAAI;AACvC,IAAA,IAAI,CAAC,WAAW,CAAC,MAAA,IAAU,CAAC,KAAA,IAAS,CAAC,YAAY,OAAO,IAAA;AACzD,IAAA,IAAI;AACF,MAAA,MAAM,GAAA,GAAM,MAAM,KAAA,CAAM,CAAA,EAAG,OAAO,CAAA,QAAA,EAAW,KAAK,CAAA,YAAA,EAAe,UAAU,CAAA,CAAA,EAAI;AAAA,QAC7E,SAAS,OAAA,EAAQ;AAAA,QACjB,IAAA,EAAM,EAAE,UAAA,EAAY,IAAA,EAAM,MAAM,CAAC,CAAA,cAAA,EAAiB,UAAU,CAAA,CAAE,CAAA;AAAE,OAClD,CAAA;AAChB,MAAA,IAAI,CAAC,GAAA,CAAI,EAAA,EAAI,OAAO,IAAA;AACpB,MAAA,MAAM,IAAA,GAAO,MAAM,GAAA,CAAI,IAAA,EAAK;AAC5B,MAAA,OAAO,KAAK,IAAA,IAAQ,IAAA;AAAA,IACtB,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,EACF;AAEA,EAAA,eAAe,YAAA,GAAuC;AACpD,IAAA,MAAM,EAAE,OAAA,EAAS,MAAA,EAAQ,KAAA,KAAU,GAAA,EAAI;AACvC,IAAA,IAAI,CAAC,OAAA,IAAW,CAAC,UAAU,CAAC,KAAA,SAAc,EAAC;AAC3C,IAAA,IAAI;AACF,MAAA,MAAM,MAAM,MAAM,KAAA,CAAM,GAAG,OAAO,CAAA,QAAA,EAAW,KAAK,CAAA,WAAA,CAAA,EAAe;AAAA,QAC/D,SAAS,OAAA,EAAQ;AAAA,QACjB,IAAA,EAAM,EAAE,UAAA,EAAY,IAAA,EAAM,MAAM,CAAC,CAAA,eAAA,EAAkB,KAAK,CAAA,CAAE,CAAA;AAAE,OAC9C,CAAA;AAChB,MAAA,IAAI,CAAC,GAAA,CAAI,EAAA,EAAI,OAAO,EAAC;AACrB,MAAA,MAAM,IAAA,GAAO,MAAM,GAAA,CAAI,IAAA,EAAK;AAC5B,MAAA,OAAO,IAAA,CAAK,QAAQ,EAAC;AAAA,IACvB,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,EAAC;AAAA,IACV;AAAA,EACF;AAIA,EAAA,eAAe,gBAAA,GAAqD;AAClE,IAAA,MAAM,EAAE,OAAA,EAAS,MAAA,EAAQ,KAAA,KAAU,GAAA,EAAI;AACvC,IAAA,IAAI,CAAC,OAAA,IAAW,CAAC,MAAA,IAAU,CAAC,OAAO,OAAO,IAAA;AAC1C,IAAA,IAAI;AACF,MAAA,MAAM,MAAM,MAAM,KAAA,CAAM,GAAG,OAAO,CAAA,QAAA,EAAW,KAAK,CAAA,eAAA,CAAA,EAAmB;AAAA,QACnE,SAAS,OAAA,EAAQ;AAAA,QACjB,IAAA,EAAM;AAAA,UACJ,UAAA,EAAY,GAAA;AAAA,UACZ,IAAA,EAAM,CAAC,CAAA,eAAA,EAAkB,KAAK,CAAA,CAAE;AAAA;AAClC,OACc,CAAA;AAChB,MAAA,IAAI,CAAC,GAAA,CAAI,EAAA,EAAI,OAAO,IAAA;AACpB,MAAA,MAAM,IAAA,GAAO,MAAM,GAAA,CAAI,IAAA,EAAK;AAC5B,MAAA,OAAO,KAAK,IAAA,IAAQ,IAAA;AAAA,IACtB,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,EACF;AAEA,EAAA,OAAO;AAAA,IACL,QAAA;AAAA,IACA,OAAA;AAAA,IACA,YAAA;AAAA,IACA,SAAA;AAAA,IACA,gBAAA;AAAA,IACA,cAAA;AAAA,IACA,kBAAA;AAAA,IACA,WAAA;AAAA,IACA,YAAA;AAAA,IACA;AAAA,GACF;AACF;ACxVA,SAAS,QAAQ,KAAA,EAAsC;AACrD,EAAA,OAAO,KAAA,CAAM,IAAA,IAAQ,KAAA,CAAM,OAAA,IAAW,EAAC;AACzC;AAIA,SAAS,YAAA,CAAa,EAAE,KAAA,EAAM,EAAwB;AACpD,EAAA,MAAM,CAAA,GAAI,QAAQ,KAAK,CAAA;AACvB,EAAA,MAAM,OAAQ,CAAA,CAAE,IAAA,IAAQ,CAAA,CAAE,OAAA,IAAW,EAAE,KAAA,IAAS,EAAA;AAChD,EAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,CAAA,CAAE,KAAK,CAAA,IAAK,CAAA;AACjC,EAAA,MAAM,GAAA,GAAM;AAAA,IACV,CAAA,EAAG,mCAAA;AAAA,IACH,CAAA,EAAG,yBAAA;AAAA,IACH,CAAA,EAAG,4BAAA;AAAA,IACH,CAAA,EAAG;AAAA,GACL,CAAE,KAAK,CAAA,IAAK,oBAAA;AACZ,EAAA,OAAOM,sBAAA,CAAM,cAAc,CAAA,CAAA,EAAI,KAAK,IAAI,EAAE,SAAA,EAAW,GAAA,EAAI,EAAG,IAAI,CAAA;AAClE;AAEA,SAAS,SAAA,CAAU,EAAE,KAAA,EAAM,EAAwB;AACjD,EAAA,MAAM,CAAA,GAAI,QAAQ,KAAK,CAAA;AACvB,EAAA,uBAAOC,cAAA,CAAC,OAAE,SAAA,EAAU,iDAAA,EAAmD,YAAE,IAAA,IAAQ,CAAA,CAAE,WAAW,EAAA,EAAG,CAAA;AACnG;AAEA,SAAS,aAAA,CAAc,EAAE,KAAA,EAAM,EAAwB;AACrD,EAAA,MAAM,CAAA,GAAI,QAAQ,KAAK,CAAA;AACvB,EAAA,MAAM,OAAO,CAAA,CAAE,OAAA,IAAW,CAAA,CAAE,QAAA,IAAY,EAAE,IAAA,IAAQ,EAAA;AAClD,EAAA,IAAI,CAAC,MAAM,OAAO,IAAA;AAClB,EAAA,uBACEA,cAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,kDAAA;AAAA,MACV,uBAAA,EAAyB,EAAE,MAAA,EAAQ,IAAA;AAAK;AAAA,GAC1C;AAEJ;AAEA,SAAS,UAAA,CAAW,EAAE,KAAA,EAAM,EAAwB;AAClD,EAAA,MAAM,CAAA,GAAI,QAAQ,KAAK,CAAA;AACvB,EAAA,MAAM,MAAM,CAAA,CAAE,GAAA,IAAO,CAAA,CAAE,GAAA,IAAO,EAAE,KAAA,IAAS,EAAA;AACzC,EAAA,IAAI,CAAC,KAAK,OAAO,IAAA;AACjB,EAAA,uBACEC,eAAA,CAAC,QAAA,EAAA,EAAO,SAAA,EAAU,MAAA,EAChB,QAAA,EAAA;AAAA,oBAAAD,cAAA,CAAC,SAAI,GAAA,EAAU,GAAA,EAAK,EAAE,GAAA,IAAO,EAAA,EAAI,WAAU,uCAAA,EAAwC,CAAA;AAAA,IAClF,EAAE,OAAA,oBACDA,cAAA,CAAC,gBAAW,SAAA,EAAU,gDAAA,EAAkD,YAAE,OAAA,EAAQ;AAAA,GAAA,EAEtF,CAAA;AAEJ;AAEA,SAAS,SAAA,CAAU,EAAE,KAAA,EAAM,EAAwB;AACjD,EAAA,MAAM,CAAA,GAAI,QAAQ,KAAK,CAAA;AACvB,EAAA,sCACG,SAAA,EAAA,EAAQ,SAAA,EAAU,kBACjB,QAAA,kBAAAC,eAAA,CAAC,KAAA,EAAA,EAAI,WAAU,WAAA,EACZ,QAAA,EAAA;AAAA,IAAA,CAAA,CAAE,yBACDD,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,uGAAA,EACb,YAAE,KAAA,EACL,CAAA;AAAA,oBAEFA,cAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,iEAAA,EAAmE,YAAE,KAAA,EAAM,CAAA;AAAA,IACxF,EAAE,QAAA,oBAAYA,cAAA,CAAC,OAAE,SAAA,EAAU,oCAAA,EAAsC,YAAE,QAAA,EAAS,CAAA;AAAA,IAAA,CAC3E,EAAE,aAAA,IAAiB,CAAA,CAAE,wBACrBC,eAAA,CAAC,KAAA,EAAA,EAAI,WAAU,sBAAA,EACX,QAAA,EAAA;AAAA,MAAA,CAAA,CAAA,CAAE,aAAA,IAAiB,EAAE,GAAA,qBACrBD,cAAA;AAAA,QAAC,GAAA;AAAA,QAAA;AAAA,UAAE,IAAA,EAAM,CAAA,CAAE,UAAA,IAAc,CAAA,CAAE,MAAA,IAAU,GAAA;AAAA,UACnC,SAAA,EAAU,oIAAA;AAAA,UACT,QAAA,EAAA,CAAA,CAAE,iBAAiB,CAAA,CAAE;AAAA;AAAA,OACxB;AAAA,MAED,EAAE,eAAA,oBACDA,cAAA;AAAA,QAAC,GAAA;AAAA,QAAA;AAAA,UAAE,IAAA,EAAM,EAAE,YAAA,IAAgB,GAAA;AAAA,UACzB,SAAA,EAAU,mHAAA;AAAA,UACT,QAAA,EAAA,CAAA,CAAE;AAAA;AAAA;AACL,KAAA,EAEJ;AAAA,GAAA,EAEJ,CAAA,EACF,CAAA;AAEJ;AAEA,SAAS,QAAA,CAAS,EAAE,KAAA,EAAM,EAAwB;AAChD,EAAA,MAAM,CAAA,GAAI,QAAQ,KAAK,CAAA;AACvB,EAAA,uBACEC,eAAA,CAAC,SAAA,EAAA,EAAQ,SAAA,EAAU,sEAAA,EACjB,QAAA,EAAA;AAAA,oBAAAD,cAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,qCAAA,EAAuC,QAAA,EAAA,CAAA,CAAE,KAAA,EAAM,CAAA;AAAA,IAC5D,EAAE,QAAA,oBAAYA,cAAA,CAAC,OAAE,SAAA,EAAU,mDAAA,EAAqD,YAAE,QAAA,EAAS,CAAA;AAAA,oBAC5FC,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qCAAA,EACZ,QAAA,EAAA;AAAA,MAAA,CAAA,CAAE,aAAA,oBACDD,cAAA;AAAA,QAAC,GAAA;AAAA,QAAA;AAAA,UAAE,IAAA,EAAM,EAAE,UAAA,IAAc,GAAA;AAAA,UACvB,SAAA,EAAU,sGAAA;AAAA,UACT,QAAA,EAAA,CAAA,CAAE;AAAA;AAAA,OACL;AAAA,MAED,EAAE,eAAA,oBACDA,cAAA;AAAA,QAAC,GAAA;AAAA,QAAA;AAAA,UAAE,IAAA,EAAM,EAAE,YAAA,IAAgB,GAAA;AAAA,UACzB,SAAA,EAAU,iJAAA;AAAA,UACT,QAAA,EAAA,CAAA,CAAE;AAAA;AAAA;AACL,KAAA,EAEJ;AAAA,GAAA,EACF,CAAA;AAEJ;AAEA,SAAS,QAAA,CAAS,EAAE,KAAA,EAAM,EAAwB;AAChD,EAAA,MAAM,CAAA,GAAI,QAAQ,KAAK,CAAA;AACvB,EAAA,MAAM,KAAA,GAAgD,CAAA,CAAE,KAAA,IAAS,EAAC;AAClE,EAAA,uBACEC,eAAA,CAAC,SAAA,EAAA,EAAQ,SAAA,EAAU,MAAA,EAChB,QAAA,EAAA;AAAA,IAAA,CAAA,CAAE,yBAASD,cAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,yBAAA,EAA2B,YAAE,KAAA,EAAM,CAAA;AAAA,oBAC7DA,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EACZ,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,EAAM,CAAA,qBAChBC,eAAA,CAAC,SAAA,EAAA,EAAgB,SAAA,EAAU,uCAAA,EACzB,QAAA,EAAA;AAAA,sBAAAA,eAAA,CAAC,SAAA,EAAA,EAAQ,WAAU,8EAAA,EAChB,QAAA,EAAA;AAAA,QAAA,IAAA,CAAK,QAAA;AAAA,wBACND,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,gEAAA,EAAiE,QAAA,EAAA,GAAA,EAAC;AAAA,OAAA,EACpF,CAAA;AAAA,sBACAA,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iCAAA,EAAmC,eAAK,MAAA,EAAO;AAAA,KAAA,EAAA,EALlD,CAMd,CACD,CAAA,EACH;AAAA,GAAA,EACF,CAAA;AAEJ;AAEA,SAAS,UAAA,CAAW,EAAE,KAAA,EAAM,EAAwB;AAClD,EAAA,MAAM,CAAA,GAAI,QAAQ,KAAK,CAAA;AACvB,EAAA,MAAM,KAAA,GAA4C,CAAA,CAAE,KAAA,IAAS,CAAA,CAAE,SAAS,EAAC;AACzE,EAAA,uBACEC,eAAA,CAAC,SAAA,EAAA,EAAQ,SAAA,EAAU,MAAA,EAChB,QAAA,EAAA;AAAA,IAAA,CAAA,CAAE,yBAASD,cAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,qCAAA,EAAuC,YAAE,KAAA,EAAM,CAAA;AAAA,mCACxE,KAAA,EAAA,EAAI,SAAA,EAAW,uCAAuC,IAAA,CAAK,GAAA,CAAI,MAAM,MAAA,EAAQ,CAAC,CAAC,CAAA,CAAA,EAC7E,QAAA,EAAA,KAAA,CAAM,IAAI,CAAC,CAAA,EAAG,sBACbC,eAAA,CAAC,KAAA,EAAA,EAAY,WAAU,2CAAA,EACrB,QAAA,EAAA;AAAA,sBAAAD,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iCAAA,EAAmC,QAAA,EAAA,CAAA,CAAE,KAAA,EAAM,CAAA;AAAA,sBAC1DA,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oCAAA,EAAsC,YAAE,KAAA,EAAM;AAAA,KAAA,EAAA,EAFrD,CAGV,CACD,CAAA,EACH;AAAA,GAAA,EACF,CAAA;AAEJ;AAEA,SAAS,gBAAA,CAAiB,EAAE,KAAA,EAAM,EAAwB;AACxD,EAAA,MAAM,CAAA,GAAI,QAAQ,KAAK,CAAA;AACvB,EAAA,uBACEC,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6CAAA,EACb,QAAA,EAAA;AAAA,oBAAAA,eAAA,CAAC,YAAA,EAAA,EAAW,WAAU,qCAAA,EAAsC,QAAA,EAAA;AAAA,MAAA,GAAA;AAAA,MAAE,CAAA,CAAE,KAAA;AAAA,MAAM;AAAA,KAAA,EAAC,CAAA;AAAA,oBACvEA,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACZ,QAAA,EAAA;AAAA,MAAA,CAAA,CAAE,MAAA,mCAAW,KAAA,EAAA,EAAI,GAAA,EAAK,EAAE,MAAA,EAAQ,GAAA,EAAI,EAAA,EAAG,SAAA,EAAU,qCAAA,EAAsC,CAAA;AAAA,sCACvF,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,wBAAAD,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,eAAA,EAAiB,QAAA,EAAA,CAAA,CAAE,MAAA,EAAO,CAAA;AAAA,QACxC,EAAE,IAAA,oBAAQA,cAAA,CAAC,SAAI,SAAA,EAAU,+BAAA,EAAiC,YAAE,IAAA,EAAK;AAAA,OAAA,EACpE;AAAA,KAAA,EACF;AAAA,GAAA,EACF,CAAA;AAEJ;AAEA,SAAS,UAAA,CAAW,EAAE,KAAA,EAAM,EAAwB;AAClD,EAAA,MAAM,CAAA,GAAI,QAAQ,KAAK,CAAA;AACvB,EAAA,uBACEC,eAAA,CAAC,YAAA,EAAA,EAAW,SAAA,EAAU,oDAAA,EACnB,QAAA,EAAA;AAAA,IAAA,CAAA,CAAE,IAAA;AAAA,IACF,CAAA,CAAE,MAAA,oBAAUA,eAAA,CAAC,QAAA,EAAA,EAAO,WAAU,+CAAA,EAAgD,QAAA,EAAA;AAAA,MAAA,SAAA;AAAA,MAAG,CAAA,CAAE;AAAA,KAAA,EAAO;AAAA,GAAA,EAC7F,CAAA;AAEJ;AAEA,SAAS,UAAA,CAAW,EAAE,KAAA,EAAM,EAAwB;AAClD,EAAA,MAAM,CAAA,GAAI,QAAQ,KAAK,CAAA;AACvB,EAAA,MAAM,MAAA,GAAiC;AAAA,IACrC,IAAA,EAAS,mGAAA;AAAA,IACT,OAAA,EAAS,yGAAA;AAAA,IACT,OAAA,EAAS,+GAAA;AAAA,IACT,KAAA,EAAS;AAAA,GACX;AACA,EAAA,MAAM,OAAA,GAAU,CAAA,CAAE,OAAA,IAAW,CAAA,CAAE,IAAA,IAAQ,MAAA;AACvC,EAAA,uBACEA,eAAA,CAAC,SAAI,SAAA,EAAW,CAAA,sBAAA,EAAyB,OAAO,OAAO,CAAA,IAAK,MAAA,CAAO,IAAI,CAAA,CAAA,EACpE,QAAA,EAAA;AAAA,IAAA,CAAA,CAAE,yBAASD,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oBAAA,EAAsB,YAAE,KAAA,EAAM,CAAA;AAAA,mCACxD,GAAA,EAAA,EAAG,QAAA,EAAA,CAAA,CAAE,OAAA,IAAW,CAAA,CAAE,QAAQ,EAAA,EAAG;AAAA,GAAA,EAChC,CAAA;AAEJ;AAEA,SAAS,YAAA,GAAe;AACtB,EAAA,uBAAOA,cAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,oBAAA,EAAqB,CAAA;AAC5C;AAEA,SAAS,WAAA,CAAY,EAAE,KAAA,EAAM,EAAwB;AACnD,EAAA,MAAM,CAAA,GAAI,QAAQ,KAAK,CAAA;AACvB,EAAA,MAAM,KAAA,GAAgC,EAAE,EAAA,EAAI,KAAA,EAAO,IAAI,KAAA,EAAO,EAAA,EAAI,MAAA,EAAQ,EAAA,EAAI,MAAA,EAAO;AACrF,EAAA,sCAAQ,KAAA,EAAA,EAAI,SAAA,EAAW,MAAM,CAAA,CAAE,IAAI,KAAK,KAAA,EAAO,CAAA;AACjD;AAEA,SAAS,UAAA,CAAW,EAAE,KAAA,EAAM,EAAwB;AAClD,EAAA,MAAM,CAAA,GAAI,QAAQ,KAAK,CAAA;AACvB,EAAA,MAAM,GAAA,GAAM,CAAA,CAAE,GAAA,IAAO,CAAA,CAAE,KAAA,IAAS,EAAA;AAChC,EAAA,IAAI,CAAC,KAAK,OAAO,IAAA;AAEjB,EAAA,MAAM,QAAA,GAAW,GAAA,CACd,OAAA,CAAQ,sBAAA,EAAwB,oBAAoB,CAAA,CACpD,OAAA,CAAQ,WAAA,EAAa,oBAAoB,CAAA,CACzC,OAAA,CAAQ,YAAA,EAAc,yBAAyB,CAAA;AAClD,EAAA,sCACG,KAAA,EAAA,EAAI,SAAA,EAAU,2DACb,QAAA,kBAAAA,cAAA,CAAC,QAAA,EAAA,EAAO,KAAK,QAAA,EAAU,KAAA,EAAM,sBAAA,EAAuB,eAAA,EAAe,MAAC,SAAA,EAAU,eAAA,EAAgB,OAAO,CAAA,CAAE,KAAA,IAAS,SAAS,CAAA,EAC3H,CAAA;AAEJ;AAIA,SAAS,YAAA,CAAa,EAAE,KAAA,EAAO,QAAA,EAAS,EAAuD;AAC7F,EAAA,MAAM,CAAA,GAAI,QAAQ,KAAK,CAAA;AACvB,EAAA,MAAM,OAAA,GAAU,UAAU,QAAA,CAAS,IAAA,CAAK,OAAK,CAAA,CAAE,IAAA,KAAS,MAAM,IAAI,CAAA;AAGlE,EAAA,IAAI,OAAA,EAAS;AACX,IAAA,MAAM,eAAe,OAAA,CAAQ,MAAA,CAAO,OAAO,CAAA,CAAA,KAAK,CAAA,CAAE,EAAE,IAAI,CAAA,KAAM,UAAa,CAAA,CAAE,CAAA,CAAE,IAAI,CAAA,KAAM,EAAA,IAAM,EAAE,CAAA,CAAE,IAAI,MAAM,IAAI,CAAA;AACjH,IAAA,IAAI,YAAA,CAAa,MAAA,KAAW,CAAA,EAAG,OAAO,IAAA;AACtC,IAAA,sCACG,SAAA,EAAA,EAAQ,SAAA,EAAU,qDAAA,EAChB,QAAA,EAAA,YAAA,CAAa,IAAI,CAAA,KAAA,KAAS;AACzB,MAAA,MAAM,KAAA,GAAQ,CAAA,CAAE,KAAA,CAAM,IAAI,CAAA;AAC1B,MAAA,IAAI,CAAC,KAAA,IAAS,KAAA,KAAU,CAAA,IAAK,KAAA,KAAU,OAAO,OAAO,IAAA;AACrD,MAAA,IAAI,KAAA,CAAM,cAAc,UAAA,EAAY;AAClC,QAAA,uCACG,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,0BAAAA,cAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,0EAAA,EAA4E,QAAA,EAAA,KAAA,CAAM,KAAA,EAAM,CAAA;AAAA,0BACrGA,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0DAAA,EAA2D,uBAAA,EAAyB,EAAE,MAAA,EAAQ,MAAA,CAAO,KAAK,CAAA,EAAE,EAAG;AAAA,SAAA,EAAA,EAFtH,MAAM,EAGhB,CAAA;AAAA,MAEJ;AACA,MAAA,IAAI,KAAA,CAAM,cAAc,OAAA,EAAS;AAC/B,QAAA,uBACEA,cAAA,CAAC,QAAA,EAAA,EACC,QAAA,kBAAAA,cAAA,CAAC,KAAA,EAAA,EAAI,KAAK,MAAA,CAAO,KAAK,CAAA,EAAG,GAAA,EAAK,MAAM,KAAA,EAAO,SAAA,EAAU,yCAAA,EAA0C,CAAA,EAAA,EADpF,MAAM,EAEnB,CAAA;AAAA,MAEJ;AACA,MAAA,IAAI,KAAA,CAAM,cAAc,SAAA,EAAW;AACjC,QAAA,uBACEC,eAAA,CAAC,GAAA,EAAA,EAAiB,SAAA,EAAU,SAAA,EAC1B,QAAA,EAAA;AAAA,0BAAAA,eAAA,CAAC,MAAA,EAAA,EAAK,WAAU,aAAA,EAAe,QAAA,EAAA;AAAA,YAAA,KAAA,CAAM,KAAA;AAAA,YAAM;AAAA,WAAA,EAAC,CAAA;AAAA,UAAQ,GAAA;AAAA,yCACnD,MAAA,EAAA,EAAK,SAAA,EAAU,uBAAA,EAAyB,QAAA,EAAA,KAAA,GAAQ,QAAQ,IAAA,EAAK;AAAA,SAAA,EAAA,EAFxD,MAAM,EAGd,CAAA;AAAA,MAEJ;AACA,MAAA,IAAI,KAAA,CAAM,cAAc,KAAA,EAAO;AAC7B,QAAA,uBACEA,eAAA,CAAC,GAAA,EAAA,EAAiB,SAAA,EAAU,SAAA,EAC1B,QAAA,EAAA;AAAA,0BAAAA,eAAA,CAAC,MAAA,EAAA,EAAK,WAAU,aAAA,EAAe,QAAA,EAAA;AAAA,YAAA,KAAA,CAAM,KAAA;AAAA,YAAM;AAAA,WAAA,EAAC,CAAA;AAAA,UAAQ,GAAA;AAAA,0BACpDD,cAAA,CAAC,GAAA,EAAA,EAAE,IAAA,EAAM,MAAA,CAAO,KAAK,GAAG,SAAA,EAAU,qDAAA,EAAuD,QAAA,EAAA,MAAA,CAAO,KAAK,CAAA,EAAE;AAAA,SAAA,EAAA,EAFjG,MAAM,EAGd,CAAA;AAAA,MAEJ;AACA,MAAA,uBACEC,eAAA,CAAC,GAAA,EAAA,EAAiB,SAAA,EAAU,SAAA,EAC1B,QAAA,EAAA;AAAA,wBAAAA,eAAA,CAAC,MAAA,EAAA,EAAK,WAAU,aAAA,EAAe,QAAA,EAAA;AAAA,UAAA,KAAA,CAAM,KAAA;AAAA,UAAM;AAAA,SAAA,EAAC,CAAA;AAAA,QAAQ,GAAA;AAAA,uCACnD,MAAA,EAAA,EAAK,SAAA,EAAU,uBAAA,EAAyB,QAAA,EAAA,MAAA,CAAO,KAAK,CAAA,EAAE;AAAA,OAAA,EAAA,EAFjD,MAAM,EAGd,CAAA;AAAA,IAEJ,CAAC,CAAA,EACH,CAAA;AAAA,EAEJ;AAGA,EAAA,MAAM,UAAU,MAAA,CAAO,OAAA,CAAQ,CAAC,CAAA,CAAE,OAAO,CAAC,GAAG,CAAC,MAAM,CAAA,KAAM,EAAA,IAAM,CAAA,KAAM,IAAA,IAAQ,MAAM,MAAS,CAAA;AAC7F,EAAA,IAAI,OAAA,CAAQ,MAAA,KAAW,CAAA,EAAG,OAAO,IAAA;AACjC,EAAA,uBACEA,eAAA,CAAC,SAAA,EAAA,EAAQ,SAAA,EAAU,qDAAA,EAChB,QAAA,EAAA;AAAA,IAAA,KAAA,CAAM,yBAASD,cAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,qEAAA,EAAuE,gBAAM,KAAA,EAAM,CAAA;AAAA,IAChH,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAC,GAAA,EAAK,KAAK,CAAA,qBACvBC,eAAA,CAAC,GAAA,EAAA,EAAY,SAAA,EAAU,SAAA,EACrB,QAAA,EAAA;AAAA,sBAAAA,eAAA,CAAC,MAAA,EAAA,EAAK,WAAU,wBAAA,EAA0B,QAAA,EAAA;AAAA,QAAA,GAAA,CAAI,OAAA,CAAQ,MAAM,GAAG,CAAA;AAAA,QAAE;AAAA,OAAA,EAAC,CAAA;AAAA,MAAQ,GAAA;AAAA,qCACzE,MAAA,EAAA,EAAK,SAAA,EAAU,uBAAA,EAAyB,QAAA,EAAA,MAAA,CAAO,KAAK,CAAA,EAAE;AAAA,KAAA,EAAA,EAFjD,GAGR,CACD;AAAA,GAAA,EACH,CAAA;AAEJ;AAIA,IAAM,QAAA,GAAgG;AAAA,EACpG,SAAc,CAAC,CAAA,qBAAMD,cAAA,CAAC,YAAA,EAAA,EAAa,OAAO,CAAA,EAAG,CAAA;AAAA,EAC7C,MAAc,CAAC,CAAA,qBAAMA,cAAA,CAAC,SAAA,EAAA,EAAU,OAAO,CAAA,EAAG,CAAA;AAAA,EAC1C,UAAc,CAAC,CAAA,qBAAMA,cAAA,CAAC,aAAA,EAAA,EAAc,OAAO,CAAA,EAAG,CAAA;AAAA,EAC9C,OAAc,CAAC,CAAA,qBAAMA,cAAA,CAAC,UAAA,EAAA,EAAW,OAAO,CAAA,EAAG,CAAA;AAAA,EAC3C,MAAc,CAAC,CAAA,qBAAMA,cAAA,CAAC,SAAA,EAAA,EAAU,OAAO,CAAA,EAAG,CAAA;AAAA,EAC1C,gBAAgB,CAAC,CAAA,qBAAMA,cAAA,CAAC,SAAA,EAAA,EAAU,OAAO,CAAA,EAAG,CAAA;AAAA,EAC5C,KAAc,CAAC,CAAA,qBAAMA,cAAA,CAAC,QAAA,EAAA,EAAS,OAAO,CAAA,EAAG,CAAA;AAAA,EACzC,KAAc,CAAC,CAAA,qBAAMA,cAAA,CAAC,QAAA,EAAA,EAAS,OAAO,CAAA,EAAG,CAAA;AAAA,EACzC,OAAc,CAAC,CAAA,qBAAMA,cAAA,CAAC,UAAA,EAAA,EAAW,OAAO,CAAA,EAAG,CAAA;AAAA,EAC3C,aAAc,CAAC,CAAA,qBAAMA,cAAA,CAAC,gBAAA,EAAA,EAAiB,OAAO,CAAA,EAAG,CAAA;AAAA,EACjD,OAAc,CAAC,CAAA,qBAAMA,cAAA,CAAC,UAAA,EAAA,EAAW,OAAO,CAAA,EAAG,CAAA;AAAA,EAC3C,OAAc,CAAC,CAAA,qBAAMA,cAAA,CAAC,UAAA,EAAA,EAAW,OAAO,CAAA,EAAG,CAAA;AAAA,EAC3C,OAAA,EAAc,sBAAMA,cAAA,CAAC,YAAA,EAAA,EAAa,CAAA;AAAA,EAClC,QAAc,CAAC,CAAA,qBAAMA,cAAA,CAAC,WAAA,EAAA,EAAY,OAAO,CAAA,EAAG,CAAA;AAAA,EAC5C,OAAc,CAAC,CAAA,qBAAMA,cAAA,CAAC,UAAA,EAAA,EAAW,OAAO,CAAA,EAAG;AAC7C,CAAA;AAEO,SAAS,SAAA,CAAU,EAAE,MAAA,EAAQ,QAAA,EAAU,YAAY,EAAA,EAAI,MAAA,GAAS,EAAC,EAAE,EAAmB;AAC3F,EAAA,IAAI,CAAC,MAAA,EAAQ,MAAA,EAAQ,OAAO,IAAA;AAE5B,EAAA,uBACEA,cAAA,CAAC,SAAI,SAAA,EAAW,CAAA,UAAA,EAAa,SAAS,CAAA,CAAA,EACnC,QAAA,EAAA,MAAA,CAAO,IAAI,CAAA,KAAA,KAAS;AAEnB,IAAA,IAAI,OAAO,KAAA,CAAM,IAAI,CAAA,EAAG,sCAAQD,sBAAA,CAAM,QAAA,EAAN,EAA+B,QAAA,EAAA,MAAA,CAAO,MAAM,IAAI,CAAA,CAAE,KAAK,CAAA,EAAA,EAAnC,MAAM,EAA+B,CAAA;AAEzF,IAAA,IAAI,SAAS,KAAA,CAAM,IAAI,CAAA,EAAG,sCAAQA,sBAAA,CAAM,QAAA,EAAN,EAA+B,QAAA,EAAA,QAAA,CAAS,MAAM,IAAI,CAAA,CAAE,OAAO,QAAQ,CAAA,EAAA,EAA/C,MAAM,EAA2C,CAAA;AAEvG,IAAA,uBAAOC,cAAA,CAAC,YAAA,EAAA,EAA4B,KAAA,EAAc,QAAA,EAAA,EAAxB,MAAM,EAAsC,CAAA;AAAA,EACxE,CAAC,CAAA,EACH,CAAA;AAEJ;AC5UA,IAAM,SAAS,eAAA,EAAgB;AAI/B,eAAsB,gBAAA,CACpB,EAAE,MAAA,EAAO,EACU;AACnB,EAAA,MAAM,EAAE,IAAA,EAAK,GAAI,MAAM,MAAA;AACvB,EAAA,MAAM,OAAO,MAAM,MAAA,CAAO,QAAQ,IAAA,CAAK,IAAA,CAAK,GAAG,CAAC,CAAA;AAChD,EAAA,IAAI,CAAC,IAAA,EAAM,OAAO,EAAE,OAAO,WAAA,EAAY;AACvC,EAAA,OAAO;AAAA,IACL,KAAA,EAAa,IAAA,CAAK,GAAA,EAAK,KAAA,IAAe,IAAA,CAAK,KAAA;AAAA,IAC3C,WAAA,EAAa,IAAA,CAAK,GAAA,EAAK,WAAA,IAAe,EAAA;AAAA,IACtC,QAAA,EAAa,IAAA,CAAK,GAAA,EAAK,QAAA,EAAU,KAAK,IAAI,CAAA;AAAA,IAC1C,MAAA,EAAa,IAAA,CAAK,GAAA,EAAK,OAAA,GAAU,kBAAA,GAAqB,MAAA;AAAA,IACtD,SAAA,EAAW;AAAA,MACT,KAAA,EAAa,IAAA,CAAK,GAAA,EAAK,KAAA,IAAS,IAAA,CAAK,KAAA;AAAA,MACrC,WAAA,EAAa,KAAK,GAAA,EAAK,WAAA;AAAA,MACvB,MAAA,EAAa,KAAK,GAAA,EAAK,OAAA,GAAU,CAAC,IAAA,CAAK,GAAA,CAAI,OAAO,CAAA,GAAI;AAAA;AACxD,GACF;AACF;AAIA,eAAO,eAAA,CACL,EAAE,MAAA,EAAO,EACT;AACA,EAAA,MAAM,EAAE,IAAA,EAAK,GAAI,MAAM,MAAA;AACvB,EAAA,MAAM,OAAA,GAAU,IAAA,CAAK,IAAA,CAAK,GAAG,CAAA;AAC7B,EAAA,MAAM,KAAA,GAAQ,MAAMH,iBAAAA,EAAU;AAC9B,EAAA,MAAM,WAAA,GAAc,MAAMC,eAAAA,EAAQ;AAElC,EAAA,IAAI,IAAA,GAAO,IAAA;AACX,EAAA,IAAI,SAAA,GAAY,KAAA;AAEhB,EAAA,IAAI,MAAM,SAAA,EAAW;AACnB,IAAA,MAAM,KAAA,GAAQ,WAAA,CAAY,GAAA,CAAI,mBAAmB,CAAA,EAAG,KAAA;AACpD,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,IAAA,GAAO,MAAM,MAAA,CAAO,cAAA,CAAe,KAAK,CAAA;AACxC,MAAA,SAAA,GAAY,CAAC,CAAC,IAAA;AAAA,IAChB;AACA,IAAA,IAAI,CAAC,IAAA,EAAM,IAAA,GAAO,MAAM,MAAA,CAAO,QAAQ,OAAO,CAAA;AAAA,EAChD,CAAA,MAAO;AACL,IAAA,IAAA,GAAO,MAAM,MAAA,CAAO,OAAA,CAAQ,OAAO,CAAA;AAAA,EACrC;AAEA,EAAA,IAAI,CAAC,MAAMI,mBAAA,EAAS;AAEpB,EAAA,IAAI,QAAA,GAAW,IAAA;AACf,EAAA,IAAI,KAAK,UAAA,EAAY;AACnB,IAAA,QAAA,GAAW,MAAM,MAAA,CAAO,WAAA,CAAY,IAAA,CAAK,UAAU,CAAA;AAAA,EACrD;AAEA,EAAA,uBACED,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,4BAAA,EACZ,QAAA,EAAA;AAAA,IAAA,SAAA,oBACCA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oHAAA,EACb,QAAA,EAAA;AAAA,sBAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACb,QAAA,EAAA;AAAA,wBAAAD,cAAAA,CAAC,UAAK,QAAA,EAAA,eAAA,EAAa,CAAA;AAAA,wBACnBA,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,mBAAkB,QAAA,EAAA,MAAA,EAAC,CAAA;AAAA,wBACnCA,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,uBAAA,EAAyB,eAAK,MAAA,EAAO,CAAA;AAAA,wBACrDA,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,mBAAkB,QAAA,EAAA,MAAA,EAAC,CAAA;AAAA,wBACnCC,eAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,wBAAA,EAAyB,QAAA,EAAA;AAAA,UAAA,GAAA;AAAA,UAAE,IAAA,CAAK;AAAA,SAAA,EAAK;AAAA,OAAA,EACvD,CAAA;AAAA,sBACAD,cAAAA;AAAA,QAAC,GAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,uBAAA;AAAA,UACL,SAAA,EAAU,2EAAA;AAAA,UACX,QAAA,EAAA;AAAA;AAAA;AAED,KAAA,EACF,CAAA;AAAA,oBAGFC,eAAAA,CAAC,SAAA,EAAA,EAAQ,SAAA,EAAU,8BAAA,EACjB,QAAA,EAAA;AAAA,sBAAAA,eAAAA,CAAC,QAAA,EAAA,EAAO,SAAA,EAAU,OAAA,EAChB,QAAA,EAAA;AAAA,wBAAAD,cAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,kDAAA,EAAmD,KAAA,EAAO,EAAE,QAAA,EAAU,SAAA,EAAU,EAC3F,QAAA,EAAA,IAAA,CAAK,KAAA,EACR,CAAA;AAAA,QACC,IAAA,CAAK,GAAA,EAAK,WAAA,oBACTA,cAAAA,CAAC,OAAE,SAAA,EAAU,oDAAA,EACV,QAAA,EAAA,IAAA,CAAK,GAAA,CAAI,WAAA,EACZ;AAAA,OAAA,EAEJ,CAAA;AAAA,MAEC,KAAK,MAAA,EAAQ,MAAA,GAAS,CAAA,mBACrBA,eAAC,SAAA,EAAA,EAAU,MAAA,EAAQ,IAAA,CAAK,MAAA,EAAQ,UAAoB,CAAA,mBAEpDC,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,uHAAA,EACb,QAAA,EAAA;AAAA,wBAAAD,cAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,SAAA,EAAU,QAAA,EAAA,uBAAA,EAAqB,CAAA;AAAA,QAC3C,6BACCA,cAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,2BAA0B,QAAA,EAAA,gDAAA,EAA8C;AAAA,OAAA,EAEzF;AAAA,KAAA,EAEJ;AAAA,GAAA,EACF,CAAA;AAEJ","file":"index.cjs","sourcesContent":["import { NextRequest, NextResponse } from 'next/server'\nimport { revalidatePath, revalidateTag } from 'next/cache'\n\nexport interface RevalidateHandlerOptions {\n /**\n * Secret that must match the `x-cms-webhook-secret` header.\n * Defaults to process.env.CMS_WEBHOOK_SECRET\n */\n secret?: string\n /**\n * Called after successful revalidation. Use to add custom logic.\n */\n onRevalidate?: (payload: RevalidatePayload) => void | Promise<void>\n}\n\nexport interface RevalidatePayload {\n slug: string\n appId?: string\n event?: 'published' | 'deleted' | 'archived'\n tag?: string\n}\n\n/**\n * Factory — create a POST handler with custom options.\n *\n * @example\n * // app/api/cms-revalidate/route.ts\n * import { createRevalidateHandler } from '@sprintup-cms/sdk/next'\n * export const POST = createRevalidateHandler({ secret: process.env.CMS_WEBHOOK_SECRET })\n */\nexport function createRevalidateHandler(options?: RevalidateHandlerOptions) {\n return async function POST(request: NextRequest): Promise<NextResponse> {\n try {\n const secret = options?.secret ?? process.env.CMS_WEBHOOK_SECRET\n const incomingSecret = request.headers.get('x-cms-webhook-secret')\n\n if (secret && incomingSecret !== secret) {\n return NextResponse.json({ error: 'Unauthorized' }, { status: 401 })\n }\n\n const body: RevalidatePayload = await request.json()\n const { slug, tag } = body\n\n if (!slug) {\n return NextResponse.json({ error: 'Missing slug in payload' }, { status: 400 })\n }\n\n // Revalidate the specific page\n revalidatePath(`/${slug}`)\n\n // Revalidate by tag (on-demand ISR)\n revalidateTag(`cms-page-${slug}`)\n revalidateTag('cms-pages')\n if (tag) revalidateTag(tag)\n\n // Revalidate layout for site structure changes (nav/footer)\n if (body.event === 'published' || body.tag?.startsWith('site-structure')) {\n revalidatePath('/', 'layout')\n }\n\n await options?.onRevalidate?.(body)\n\n return NextResponse.json({\n revalidated: true,\n slug,\n event: body.event,\n timestamp: new Date().toISOString(),\n })\n } catch (err: any) {\n console.error('[sprintup-cms] revalidate error:', err)\n return NextResponse.json({ error: err.message }, { status: 500 })\n }\n }\n}\n\n/**\n * Default POST handler — zero-config, reads CMS_WEBHOOK_SECRET from env.\n *\n * @example\n * // app/api/cms-revalidate/route.ts\n * export { POST } from '@sprintup-cms/sdk/next'\n */\nexport const POST = createRevalidateHandler()\n","import { NextResponse } from 'next/server'\nimport { cookies, draftMode } from 'next/headers'\n\nexport interface PreviewExitOptions {\n /** Where to redirect after exiting preview. Defaults to \"/\" */\n redirectTo?: string\n}\n\n/**\n * Factory — create a GET handler for exiting preview/draft mode.\n *\n * @example\n * // app/api/cms-preview/exit/route.ts\n * import { createPreviewExitHandler } from '@sprintup-cms/sdk/next'\n * export const GET = createPreviewExitHandler({ redirectTo: '/' })\n */\nexport function createPreviewExitHandler(options?: PreviewExitOptions) {\n return async function GET(request: Request): Promise<NextResponse> {\n const draft = await draftMode()\n draft.disable()\n\n const cookieStore = await cookies()\n cookieStore.delete('cms_preview_token')\n cookieStore.delete('cms_preview_content_id')\n\n const redirectTo = options?.redirectTo ?? '/'\n const url = new URL(request.url)\n return NextResponse.redirect(new URL(redirectTo, url.origin))\n }\n}\n\n/**\n * Default GET handler.\n *\n * @example\n * // app/api/cms-preview/exit/route.ts\n * export { GET } from '@sprintup-cms/sdk/next'\n */\nexport const GET = createPreviewExitHandler()\n","/**\n * @sprintup-cms/sdk — Core Client\n *\n * Zero-dependency, framework-agnostic typed API client for SprintUp Forge CMS.\n *\n * @example\n * import { cmsClient } from '@sprintup-cms/sdk'\n * const page = await cmsClient.getPage('about')\n *\n * @example Custom instance\n * import { createCMSClient } from '@sprintup-cms/sdk'\n * const cms = createCMSClient({ baseUrl: '...', apiKey: '...', appId: '...' })\n */\n\n// ── Types ─────────────────────────────────────────────────────────────────────\n\nexport interface CMSBlock {\n id: string\n type: string\n label?: string\n locked?: boolean\n data?: Record<string, any>\n /** Legacy field — blocks created before v1.1 used `content` instead of `data` */\n content?: Record<string, any>\n order?: number\n}\n\nexport interface CMSPage {\n _id?: string\n slug: string\n title: string\n description?: string\n pageType?: string\n pageTypeId?: string\n variant?: string\n status: 'draft' | 'published' | 'archived'\n visibility?: 'public' | 'private' | 'password'\n blocks: CMSBlock[]\n publishedAt?: string\n updatedAt?: string\n seo?: {\n title?: string\n description?: string\n keywords?: string[]\n ogImage?: string\n noIndex?: boolean\n }\n}\n\nexport interface CMSPageTypeField {\n id: string\n name: string\n label: string\n fieldType:\n | 'text' | 'textarea' | 'richtext' | 'image' | 'url'\n | 'number' | 'boolean' | 'date' | 'select' | 'relation'\n | 'email' | 'phone' | 'slug' | 'color' | 'embed'\n | 'multi-select' | 'repeater' | 'file' | 'code'\n required?: boolean\n options?: string[]\n description?: string\n maxLength?: number\n multiple?: boolean\n targetPageTypeKey?: string\n}\n\nexport interface CMSPageTypeSection {\n id: string\n name: string\n label: string\n order: number\n locked?: boolean\n fields: CMSPageTypeField[]\n}\n\nexport interface CMSPageTypeVariant {\n key: string\n label: string\n description?: string\n visibleSections?: string[]\n}\n\nexport interface CMSPageType {\n _id: string\n name: string\n key: string\n description?: string\n icon?: string\n category: 'singleton' | 'collection' | 'global'\n contentCategory: 'singleton' | 'collection' | 'global'\n allowedRoles?: string[]\n variants: CMSPageTypeVariant[]\n sections: CMSPageTypeSection[]\n}\n\n// ── Site Structure ─────────────────────────────────────────────────────────────\n\nexport type CMSMenuItemType = 'page' | 'url' | 'dynamic'\n\nexport interface CMSMenuItem {\n id: string\n type: CMSMenuItemType\n label: string\n contentId?: string\n url?: string\n /** Resolved href — ready to pass to <a href> or <Link href>. Never null, falls back to \"#\". */\n href: string\n locked: boolean\n openInNewTab: boolean\n children: CMSMenuItem[]\n page?: {\n title?: string\n slug?: string\n seoTitle?: string\n seoDescription?: string\n }\n}\n\nexport interface CMSPageTreeNode {\n id: string\n contentId: string\n parentId: string | null\n order: number\n locked: boolean\n visible?: boolean\n page?: {\n title?: string\n slug?: string\n seoTitle?: string\n seoDescription?: string\n }\n}\n\nexport interface CMSFooterGroup {\n id: string\n heading: string\n headingUrl?: string\n locked: boolean\n links: CMSMenuItem[]\n}\n\nexport interface CMSSiteStructure {\n appId: string\n pageTree: CMSPageTreeNode[]\n menus: {\n header: CMSMenuItem[]\n footer: CMSFooterGroup[]\n footerBottom: CMSMenuItem[]\n sidebar: CMSMenuItem[]\n [slot: string]: CMSMenuItem[] | CMSFooterGroup[]\n }\n updatedAt?: string\n}\n\n// ── Pagination & Responses ─────────────────────────────────────────────────────\n\nexport interface CMSListMeta {\n total: number\n page: number\n perPage: number\n totalPages: number\n}\n\nexport interface CMSListResponse<T = CMSPage> {\n data: T[]\n meta: CMSListMeta\n appId: string\n}\n\nexport interface CMSSingleResponse<T = CMSPage> {\n data: T\n}\n\n// ── Client Options ─────────────────────────────────────────────────────────────\n\nexport interface CMSClientOptions {\n /** Base URL of your Forge CMS instance, e.g. https://cms.yourschool.io */\n baseUrl?: string\n /** API key generated in CMS Admin → API Keys. Server-side only. */\n apiKey?: string\n /** App ID from CMS Admin → Apps, e.g. \"school-website\" */\n appId?: string\n}\n\nexport interface CMSGetPagesOptions {\n type?: string\n group?: string\n page?: number\n perPage?: number\n status?: 'published' | 'draft' | 'archived'\n}\n\n// ── Factory ───────────────────────────────────────────────────────────────────\n\nexport function createCMSClient(options?: CMSClientOptions) {\n /**\n * Resolve config lazily at request time — NOT at module/build time.\n * This prevents static prerendering crashes when env vars are absent during build.\n */\n function cfg() {\n return {\n baseUrl: (options?.baseUrl ?? process.env.NEXT_PUBLIC_CMS_URL ?? process.env.CMS_BASE_URL ?? '').replace(/\\/$/, ''),\n apiKey: options?.apiKey ?? process.env.CMS_API_KEY ?? '',\n appId: options?.appId ?? process.env.CMS_APP_ID ?? '',\n }\n }\n\n function headers() {\n return { 'X-CMS-API-Key': cfg().apiKey, 'Content-Type': 'application/json' }\n }\n\n // ── Pages ──────────────────────────────────────────────────────────────────\n\n async function getPages(params?: CMSGetPagesOptions): Promise<CMSPage[]> {\n const { baseUrl, apiKey, appId } = cfg()\n if (!baseUrl || !apiKey || !appId) {\n console.warn('[sprintup-cms] Missing CMS_BASE_URL / CMS_API_KEY / CMS_APP_ID — returning []')\n return []\n }\n try {\n const qs = new URLSearchParams()\n if (params?.type) qs.set('type', params.type)\n if (params?.group) qs.set('group', params.group)\n if (params?.page) qs.set('page', String(params.page))\n if (params?.perPage) qs.set('perPage', String(params.perPage))\n const url = `${baseUrl}/api/v1/${appId}/pages${qs.size ? `?${qs}` : ''}`\n const res = await fetch(url, {\n headers: headers(),\n next: { revalidate: 60, tags: [`cms-pages-${appId}`] },\n } as RequestInit)\n if (!res.ok) { console.error(`[sprintup-cms] getPages (${res.status})`); return [] }\n const json: CMSListResponse = await res.json()\n return json.data ?? []\n } catch (err) {\n console.error('[sprintup-cms] getPages error:', err)\n return []\n }\n }\n\n async function getPage(slug: string): Promise<CMSPage | null> {\n const { baseUrl, apiKey, appId } = cfg()\n if (!baseUrl || !apiKey || !appId) {\n console.warn('[sprintup-cms] Missing config — returning null')\n return null\n }\n try {\n const res = await fetch(`${baseUrl}/api/v1/${appId}/pages/${slug}`, {\n headers: headers(),\n next: { revalidate: 60, tags: [`cms-page-${slug}`, `cms-pages-${appId}`] },\n } as RequestInit)\n if (res.status === 404) return null\n if (!res.ok) { console.error(`[sprintup-cms] getPage \"${slug}\" (${res.status})`); return null }\n const json: CMSSingleResponse = await res.json()\n return json.data ?? null\n } catch (err) {\n console.error(`[sprintup-cms] getPage \"${slug}\" error:`, err)\n return null\n }\n }\n\n async function getBlogPosts(): Promise<CMSPage[]> {\n return getPages({ type: 'blog-post' })\n }\n\n async function getEvents(): Promise<CMSPage[]> {\n return getPages({ type: 'event-page' })\n }\n\n async function getAnnouncements(): Promise<CMSPage[]> {\n return getPages({ type: 'announcement-page' })\n }\n\n // ── Preview ────────────────────────────────────────────────────────────────\n\n async function getPreviewPage(token: string): Promise<CMSPage | null> {\n const { baseUrl, appId } = cfg()\n if (!baseUrl || !appId) return null\n try {\n const res = await fetch(`${baseUrl}/api/v1/${appId}/preview?token=${encodeURIComponent(token)}`, {\n cache: 'no-store',\n })\n if (!res.ok) return null\n const json = await res.json()\n return json.data ?? null\n } catch {\n return null\n }\n }\n\n async function getPageWithPreview(slug: string, previewToken?: string | null): Promise<CMSPage | null> {\n if (previewToken) {\n const preview = await getPreviewPage(previewToken)\n if (preview?.slug === slug) return preview\n }\n return getPage(slug)\n }\n\n // ── Page Types ─────────────────────────────────────────────────────────────\n\n async function getPageType(pageTypeId: string): Promise<CMSPageType | null> {\n const { baseUrl, apiKey, appId } = cfg()\n if (!baseUrl || !apiKey || !appId || !pageTypeId) return null\n try {\n const res = await fetch(`${baseUrl}/api/v1/${appId}/page-types/${pageTypeId}`, {\n headers: headers(),\n next: { revalidate: 3600, tags: [`cms-page-type-${pageTypeId}`] },\n } as RequestInit)\n if (!res.ok) return null\n const json = await res.json()\n return json.data ?? null\n } catch {\n return null\n }\n }\n\n async function getPageTypes(): Promise<CMSPageType[]> {\n const { baseUrl, apiKey, appId } = cfg()\n if (!baseUrl || !apiKey || !appId) return []\n try {\n const res = await fetch(`${baseUrl}/api/v1/${appId}/page-types`, {\n headers: headers(),\n next: { revalidate: 3600, tags: [`cms-page-types-${appId}`] },\n } as RequestInit)\n if (!res.ok) return []\n const json = await res.json()\n return json.data ?? []\n } catch {\n return []\n }\n }\n\n // ── Site Structure ─────────────────────────────────────────────────────────\n\n async function getSiteStructure(): Promise<CMSSiteStructure | null> {\n const { baseUrl, apiKey, appId } = cfg()\n if (!baseUrl || !apiKey || !appId) return null\n try {\n const res = await fetch(`${baseUrl}/api/v1/${appId}/site-structure`, {\n headers: headers(),\n next: {\n revalidate: 300,\n tags: [`site-structure-${appId}`],\n },\n } as RequestInit)\n if (!res.ok) return null\n const json = await res.json()\n return json.data ?? null\n } catch {\n return null\n }\n }\n\n return {\n getPages,\n getPage,\n getBlogPosts,\n getEvents,\n getAnnouncements,\n getPreviewPage,\n getPageWithPreview,\n getPageType,\n getPageTypes,\n getSiteStructure,\n }\n}\n\n// ── Default singleton ─────────────────────────────────────────────────────────\n\n/** Pre-configured singleton. Reads env vars lazily at request time. */\nexport const cmsClient = createCMSClient()\n","'use client'\n\nimport React from 'react'\nimport type { CMSBlock, CMSPageType } from '../client'\n\nexport interface CMSBlocksProps {\n blocks: CMSBlock[]\n pageType?: CMSPageType | null\n className?: string\n /**\n * Custom block renderers — extend or override built-in blocks.\n * @example\n * <CMSBlocks blocks={blocks} custom={{ 'my-hero': (block) => <MyHero {...block.data} /> }} />\n */\n custom?: Record<string, (block: CMSBlock) => React.ReactNode>\n}\n\n/**\n * Resolves block data from either `data` (v1.1+) or legacy `content` field.\n */\nfunction getData(block: CMSBlock): Record<string, any> {\n return block.data ?? block.content ?? {}\n}\n\n// ── Built-in block renderers ──────────────────────────────────────────────────\n\nfunction HeadingBlock({ block }: { block: CMSBlock }) {\n const d = getData(block)\n const text = d.text || d.heading || d.title || ''\n const level = Number(d.level) || 2\n const cls = {\n 1: 'text-4xl font-bold tracking-tight',\n 2: 'text-2xl font-bold mt-8',\n 3: 'text-xl font-semibold mt-6',\n 4: 'text-lg font-medium mt-4',\n }[level] ?? 'text-2xl font-bold'\n return React.createElement(`h${level}`, { className: cls }, text)\n}\n\nfunction TextBlock({ block }: { block: CMSBlock }) {\n const d = getData(block)\n return <p className=\"text-base leading-relaxed text-muted-foreground\">{d.text || d.content || ''}</p>\n}\n\nfunction RichTextBlock({ block }: { block: CMSBlock }) {\n const d = getData(block)\n const html = d.content || d.richtext || d.text || ''\n if (!html) return null\n return (\n <div\n className=\"prose prose-neutral dark:prose-invert max-w-none\"\n dangerouslySetInnerHTML={{ __html: html }}\n />\n )\n}\n\nfunction ImageBlock({ block }: { block: CMSBlock }) {\n const d = getData(block)\n const src = d.src || d.url || d.image || ''\n if (!src) return null\n return (\n <figure className=\"my-6\">\n <img src={src} alt={d.alt || ''} className=\"w-full rounded-lg border object-cover\" />\n {d.caption && (\n <figcaption className=\"mt-2 text-sm text-muted-foreground text-center\">{d.caption}</figcaption>\n )}\n </figure>\n )\n}\n\nfunction HeroBlock({ block }: { block: CMSBlock }) {\n const d = getData(block)\n return (\n <section className=\"py-12 md:py-20\">\n <div className=\"max-w-3xl\">\n {d.badge && (\n <span className=\"inline-block px-3 py-1 text-xs font-semibold rounded-full bg-secondary text-secondary-foreground mb-4\">\n {d.badge}\n </span>\n )}\n <h1 className=\"text-4xl md:text-5xl font-bold tracking-tight mb-4 text-balance\">{d.title}</h1>\n {d.subtitle && <p className=\"text-xl text-muted-foreground mb-8\">{d.subtitle}</p>}\n {(d.primaryButton || d.cta) && (\n <div className=\"flex gap-4 flex-wrap\">\n {(d.primaryButton || d.cta) && (\n <a href={d.primaryUrl || d.ctaUrl || '#'}\n className=\"inline-flex items-center px-6 py-3 rounded-lg bg-primary text-primary-foreground font-semibold hover:opacity-90 transition-opacity\">\n {d.primaryButton || d.cta}\n </a>\n )}\n {d.secondaryButton && (\n <a href={d.secondaryUrl || '#'}\n className=\"inline-flex items-center px-6 py-3 rounded-lg border border-border font-semibold hover:bg-muted transition-colors\">\n {d.secondaryButton}\n </a>\n )}\n </div>\n )}\n </div>\n </section>\n )\n}\n\nfunction CTABlock({ block }: { block: CMSBlock }) {\n const d = getData(block)\n return (\n <section className=\"py-12 px-8 rounded-xl bg-primary text-primary-foreground text-center\">\n <h2 className=\"text-2xl md:text-3xl font-bold mb-4\">{d.title}</h2>\n {d.subtitle && <p className=\"text-primary-foreground/80 mb-6 max-w-2xl mx-auto\">{d.subtitle}</p>}\n <div className=\"flex gap-4 justify-center flex-wrap\">\n {d.primaryButton && (\n <a href={d.primaryUrl || '#'}\n className=\"px-6 py-3 rounded-lg bg-background text-foreground font-semibold hover:opacity-90 transition-opacity\">\n {d.primaryButton}\n </a>\n )}\n {d.secondaryButton && (\n <a href={d.secondaryUrl || '#'}\n className=\"px-6 py-3 rounded-lg border border-primary-foreground/20 text-primary-foreground font-semibold hover:bg-primary-foreground/10 transition-colors\">\n {d.secondaryButton}\n </a>\n )}\n </div>\n </section>\n )\n}\n\nfunction FAQBlock({ block }: { block: CMSBlock }) {\n const d = getData(block)\n const items: { question: string; answer: string }[] = d.items || []\n return (\n <section className=\"py-8\">\n {d.title && <h2 className=\"text-2xl font-bold mb-6\">{d.title}</h2>}\n <div className=\"space-y-4\">\n {items.map((item, i) => (\n <details key={i} className=\"group border border-border rounded-lg\">\n <summary className=\"flex items-center justify-between p-4 cursor-pointer font-medium select-none\">\n {item.question}\n <span className=\"transition-transform group-open:rotate-45 text-lg leading-none\">+</span>\n </summary>\n <div className=\"px-4 pb-4 text-muted-foreground\">{item.answer}</div>\n </details>\n ))}\n </div>\n </section>\n )\n}\n\nfunction StatsBlock({ block }: { block: CMSBlock }) {\n const d = getData(block)\n const items: { value: string; label: string }[] = d.items || d.stats || []\n return (\n <section className=\"py-8\">\n {d.title && <h2 className=\"text-2xl font-bold mb-6 text-center\">{d.title}</h2>}\n <div className={`grid gap-6 grid-cols-2 md:grid-cols-${Math.min(items.length, 4)}`}>\n {items.map((s, i) => (\n <div key={i} className=\"text-center p-6 rounded-lg border bg-card\">\n <div className=\"text-3xl font-bold text-primary\">{s.value}</div>\n <div className=\"text-sm text-muted-foreground mt-1\">{s.label}</div>\n </div>\n ))}\n </div>\n </section>\n )\n}\n\nfunction TestimonialBlock({ block }: { block: CMSBlock }) {\n const d = getData(block)\n return (\n <div className=\"border border-border rounded-xl p-6 bg-card\">\n <blockquote className=\"text-lg italic mb-4 text-foreground\">\"{d.quote}\"</blockquote>\n <div className=\"flex items-center gap-3\">\n {d.avatar && <img src={d.avatar} alt=\"\" className=\"w-10 h-10 rounded-full object-cover\" />}\n <div>\n <div className=\"font-semibold\">{d.author}</div>\n {d.role && <div className=\"text-sm text-muted-foreground\">{d.role}</div>}\n </div>\n </div>\n </div>\n )\n}\n\nfunction QuoteBlock({ block }: { block: CMSBlock }) {\n const d = getData(block)\n return (\n <blockquote className=\"border-l-4 border-primary pl-6 py-2 italic text-lg\">\n {d.text}\n {d.author && <footer className=\"mt-2 text-sm text-muted-foreground not-italic\">— {d.author}</footer>}\n </blockquote>\n )\n}\n\nfunction AlertBlock({ block }: { block: CMSBlock }) {\n const d = getData(block)\n const colors: Record<string, string> = {\n info: 'bg-blue-50 border-blue-200 text-blue-800 dark:bg-blue-950 dark:border-blue-800 dark:text-blue-200',\n success: 'bg-green-50 border-green-200 text-green-800 dark:bg-green-950 dark:border-green-800 dark:text-green-200',\n warning: 'bg-yellow-50 border-yellow-200 text-yellow-800 dark:bg-yellow-950 dark:border-yellow-800 dark:text-yellow-200',\n error: 'bg-red-50 border-red-200 text-red-800 dark:bg-red-950 dark:border-red-800 dark:text-red-200',\n }\n const variant = d.variant || d.type || 'info'\n return (\n <div className={`p-4 rounded-lg border ${colors[variant] ?? colors.info}`}>\n {d.title && <div className=\"font-semibold mb-1\">{d.title}</div>}\n <p>{d.message || d.text || ''}</p>\n </div>\n )\n}\n\nfunction DividerBlock() {\n return <hr className=\"my-8 border-border\" />\n}\n\nfunction SpacerBlock({ block }: { block: CMSBlock }) {\n const d = getData(block)\n const sizes: Record<string, string> = { sm: 'h-4', md: 'h-8', lg: 'h-16', xl: 'h-24' }\n return <div className={sizes[d.size] ?? 'h-8'} />\n}\n\nfunction VideoBlock({ block }: { block: CMSBlock }) {\n const d = getData(block)\n const url = d.url || d.embed || ''\n if (!url) return null\n // Convert YouTube/Vimeo watch URLs to embed URLs\n const embedUrl = url\n .replace('youtube.com/watch?v=', 'youtube.com/embed/')\n .replace('youtu.be/', 'youtube.com/embed/')\n .replace('vimeo.com/', 'player.vimeo.com/video/')\n return (\n <div className=\"aspect-video rounded-lg overflow-hidden border bg-muted\">\n <iframe src={embedUrl} allow=\"autoplay; fullscreen\" allowFullScreen className=\"w-full h-full\" title={d.title || 'Video'} />\n </div>\n )\n}\n\n// ── Section block (structured page type sections) ─────────────────────────────\n\nfunction SectionBlock({ block, pageType }: { block: CMSBlock; pageType?: CMSPageType | null }) {\n const d = getData(block)\n const section = pageType?.sections.find(s => s.name === block.type)\n\n // If we have schema info, render labelled fields\n if (section) {\n const filledFields = section.fields.filter(f => d[f.name] !== undefined && d[f.name] !== '' && d[f.name] !== null)\n if (filledFields.length === 0) return null\n return (\n <section className=\"py-4 space-y-4 border-b border-border last:border-0\">\n {filledFields.map(field => {\n const value = d[field.name]\n if (!value && value !== 0 && value !== false) return null\n if (field.fieldType === 'richtext') {\n return (\n <div key={field.id}>\n <p className=\"text-xs font-semibold text-muted-foreground uppercase tracking-wide mb-1\">{field.label}</p>\n <div className=\"prose prose-neutral dark:prose-invert max-w-none text-sm\" dangerouslySetInnerHTML={{ __html: String(value) }} />\n </div>\n )\n }\n if (field.fieldType === 'image') {\n return (\n <figure key={field.id}>\n <img src={String(value)} alt={field.label} className=\"rounded-lg border max-h-96 object-cover\" />\n </figure>\n )\n }\n if (field.fieldType === 'boolean') {\n return (\n <p key={field.id} className=\"text-sm\">\n <span className=\"font-medium\">{field.label}:</span>{' '}\n <span className=\"text-muted-foreground\">{value ? 'Yes' : 'No'}</span>\n </p>\n )\n }\n if (field.fieldType === 'url') {\n return (\n <p key={field.id} className=\"text-sm\">\n <span className=\"font-medium\">{field.label}:</span>{' '}\n <a href={String(value)} className=\"text-primary underline underline-offset-2 break-all\">{String(value)}</a>\n </p>\n )\n }\n return (\n <p key={field.id} className=\"text-sm\">\n <span className=\"font-medium\">{field.label}:</span>{' '}\n <span className=\"text-muted-foreground\">{String(value)}</span>\n </p>\n )\n })}\n </section>\n )\n }\n\n // No schema — render raw data as simple key/value pairs\n const entries = Object.entries(d).filter(([, v]) => v !== '' && v !== null && v !== undefined)\n if (entries.length === 0) return null\n return (\n <section className=\"py-4 space-y-2 border-b border-border last:border-0\">\n {block.label && <h3 className=\"font-semibold text-sm text-muted-foreground uppercase tracking-wide\">{block.label}</h3>}\n {entries.map(([key, value]) => (\n <p key={key} className=\"text-sm\">\n <span className=\"font-medium capitalize\">{key.replace(/_/g, ' ')}:</span>{' '}\n <span className=\"text-muted-foreground\">{String(value)}</span>\n </p>\n ))}\n </section>\n )\n}\n\n// ── Main component ────────────────────────────────────────────────────────────\n\nconst BUILT_IN: Record<string, (block: CMSBlock, pageType?: CMSPageType | null) => React.ReactNode> = {\n heading: (b) => <HeadingBlock block={b} />,\n text: (b) => <TextBlock block={b} />,\n richtext: (b) => <RichTextBlock block={b} />,\n image: (b) => <ImageBlock block={b} />,\n hero: (b) => <HeroBlock block={b} />,\n 'hero-section': (b) => <HeroBlock block={b} />,\n cta: (b) => <CTABlock block={b} />,\n faq: (b) => <FAQBlock block={b} />,\n stats: (b) => <StatsBlock block={b} />,\n testimonial: (b) => <TestimonialBlock block={b} />,\n quote: (b) => <QuoteBlock block={b} />,\n alert: (b) => <AlertBlock block={b} />,\n divider: () => <DividerBlock />,\n spacer: (b) => <SpacerBlock block={b} />,\n video: (b) => <VideoBlock block={b} />,\n}\n\nexport function CMSBlocks({ blocks, pageType, className = '', custom = {} }: CMSBlocksProps) {\n if (!blocks?.length) return null\n\n return (\n <div className={`space-y-8 ${className}`}>\n {blocks.map(block => {\n // 1. Custom renderer takes priority\n if (custom[block.type]) return <React.Fragment key={block.id}>{custom[block.type](block)}</React.Fragment>\n // 2. Built-in renderer\n if (BUILT_IN[block.type]) return <React.Fragment key={block.id}>{BUILT_IN[block.type](block, pageType)}</React.Fragment>\n // 3. Structured section block (from page type sections)\n return <SectionBlock key={block.id} block={block} pageType={pageType} />\n })}\n </div>\n )\n}\n","import React from 'react'\nimport { notFound } from 'next/navigation'\nimport { cookies, draftMode } from 'next/headers'\nimport type { Metadata } from 'next'\nimport { createCMSClient } from '../client'\nimport { CMSBlocks } from '../react/blocks'\n\nexport interface CMSCatchAllParams {\n slug: string[]\n}\n\nconst client = createCMSClient()\n\n// ── Metadata ──────────────────────────────────────────────────────────────────\n\nexport async function generateMetadata(\n { params }: { params: Promise<CMSCatchAllParams> }\n): Promise<Metadata> {\n const { slug } = await params\n const page = await client.getPage(slug.join('/'))\n if (!page) return { title: 'Not Found' }\n return {\n title: page.seo?.title || page.title,\n description: page.seo?.description || '',\n keywords: page.seo?.keywords?.join(', '),\n robots: page.seo?.noIndex ? 'noindex,nofollow' : undefined,\n openGraph: {\n title: page.seo?.title || page.title,\n description: page.seo?.description,\n images: page.seo?.ogImage ? [page.seo.ogImage] : undefined,\n },\n }\n}\n\n// ── Page ──────────────────────────────────────────────────────────────────────\n\nexport default async function CMSCatchAllPage(\n { params }: { params: Promise<CMSCatchAllParams> }\n) {\n const { slug } = await params\n const slugStr = slug.join('/')\n const draft = await draftMode()\n const cookieStore = await cookies()\n\n let page = null\n let isPreview = false\n\n if (draft.isEnabled) {\n const token = cookieStore.get('cms_preview_token')?.value\n if (token) {\n page = await client.getPreviewPage(token)\n isPreview = !!page\n }\n if (!page) page = await client.getPage(slugStr)\n } else {\n page = await client.getPage(slugStr)\n }\n\n if (!page) notFound()\n\n let pageType = null\n if (page.pageTypeId) {\n pageType = await client.getPageType(page.pageTypeId)\n }\n\n return (\n <div className=\"min-h-screen bg-background\">\n {isPreview && (\n <div className=\"sticky top-0 z-50 flex items-center justify-between px-4 py-2.5 bg-amber-500 text-white text-sm font-medium shadow\">\n <div className=\"flex items-center gap-2\">\n <span>Draft Preview</span>\n <span className=\"opacity-60 mx-1\">·</span>\n <span className=\"opacity-75 capitalize\">{page.status}</span>\n <span className=\"opacity-60 mx-1\">·</span>\n <span className=\"opacity-75 font-normal\">/{page.slug}</span>\n </div>\n <a\n href=\"/api/cms-preview/exit\"\n className=\"px-3 py-1 rounded bg-white/20 hover:bg-white/30 transition-colors text-xs\"\n >\n Exit Preview\n </a>\n </div>\n )}\n\n <article className=\"max-w-5xl mx-auto px-6 py-12\">\n <header className=\"mb-10\">\n <h1 className=\"text-4xl font-bold text-foreground leading-tight\" style={{ textWrap: 'balance' } as React.CSSProperties}>\n {page.title}\n </h1>\n {page.seo?.description && (\n <p className=\"mt-3 text-lg text-muted-foreground leading-relaxed\">\n {page.seo.description}\n </p>\n )}\n </header>\n\n {page.blocks?.length > 0 ? (\n <CMSBlocks blocks={page.blocks} pageType={pageType} />\n ) : (\n <div className=\"flex flex-col items-center justify-center py-24 text-muted-foreground border-2 border-dashed border-border rounded-xl\">\n <p className=\"text-sm\">No content added yet.</p>\n {isPreview && (\n <p className=\"text-xs mt-1 opacity-60\">Add blocks in the CMS editor to see them here.</p>\n )}\n </div>\n )}\n </article>\n </div>\n )\n}\n\n\n"]}
@@ -0,0 +1,72 @@
1
+ import { NextRequest, NextResponse } from 'next/server';
2
+ import * as react_jsx_runtime from 'react/jsx-runtime';
3
+ import { Metadata } from 'next';
4
+
5
+ interface RevalidateHandlerOptions {
6
+ /**
7
+ * Secret that must match the `x-cms-webhook-secret` header.
8
+ * Defaults to process.env.CMS_WEBHOOK_SECRET
9
+ */
10
+ secret?: string;
11
+ /**
12
+ * Called after successful revalidation. Use to add custom logic.
13
+ */
14
+ onRevalidate?: (payload: RevalidatePayload) => void | Promise<void>;
15
+ }
16
+ interface RevalidatePayload {
17
+ slug: string;
18
+ appId?: string;
19
+ event?: 'published' | 'deleted' | 'archived';
20
+ tag?: string;
21
+ }
22
+ /**
23
+ * Factory — create a POST handler with custom options.
24
+ *
25
+ * @example
26
+ * // app/api/cms-revalidate/route.ts
27
+ * import { createRevalidateHandler } from '@sprintup-cms/sdk/next'
28
+ * export const POST = createRevalidateHandler({ secret: process.env.CMS_WEBHOOK_SECRET })
29
+ */
30
+ declare function createRevalidateHandler(options?: RevalidateHandlerOptions): (request: NextRequest) => Promise<NextResponse>;
31
+ /**
32
+ * Default POST handler — zero-config, reads CMS_WEBHOOK_SECRET from env.
33
+ *
34
+ * @example
35
+ * // app/api/cms-revalidate/route.ts
36
+ * export { POST } from '@sprintup-cms/sdk/next'
37
+ */
38
+ declare const POST: (request: NextRequest) => Promise<NextResponse>;
39
+
40
+ interface PreviewExitOptions {
41
+ /** Where to redirect after exiting preview. Defaults to "/" */
42
+ redirectTo?: string;
43
+ }
44
+ /**
45
+ * Factory — create a GET handler for exiting preview/draft mode.
46
+ *
47
+ * @example
48
+ * // app/api/cms-preview/exit/route.ts
49
+ * import { createPreviewExitHandler } from '@sprintup-cms/sdk/next'
50
+ * export const GET = createPreviewExitHandler({ redirectTo: '/' })
51
+ */
52
+ declare function createPreviewExitHandler(options?: PreviewExitOptions): (request: Request) => Promise<NextResponse>;
53
+ /**
54
+ * Default GET handler.
55
+ *
56
+ * @example
57
+ * // app/api/cms-preview/exit/route.ts
58
+ * export { GET } from '@sprintup-cms/sdk/next'
59
+ */
60
+ declare const GET: (request: Request) => Promise<NextResponse>;
61
+
62
+ interface CMSCatchAllParams {
63
+ slug: string[];
64
+ }
65
+ declare function generateMetadata({ params }: {
66
+ params: Promise<CMSCatchAllParams>;
67
+ }): Promise<Metadata>;
68
+ declare function CMSCatchAllPage({ params }: {
69
+ params: Promise<CMSCatchAllParams>;
70
+ }): Promise<react_jsx_runtime.JSX.Element>;
71
+
72
+ export { CMSCatchAllPage, type CMSCatchAllParams, POST, createPreviewExitHandler, createRevalidateHandler, generateMetadata, GET as previewExitGET };
@@ -0,0 +1,72 @@
1
+ import { NextRequest, NextResponse } from 'next/server';
2
+ import * as react_jsx_runtime from 'react/jsx-runtime';
3
+ import { Metadata } from 'next';
4
+
5
+ interface RevalidateHandlerOptions {
6
+ /**
7
+ * Secret that must match the `x-cms-webhook-secret` header.
8
+ * Defaults to process.env.CMS_WEBHOOK_SECRET
9
+ */
10
+ secret?: string;
11
+ /**
12
+ * Called after successful revalidation. Use to add custom logic.
13
+ */
14
+ onRevalidate?: (payload: RevalidatePayload) => void | Promise<void>;
15
+ }
16
+ interface RevalidatePayload {
17
+ slug: string;
18
+ appId?: string;
19
+ event?: 'published' | 'deleted' | 'archived';
20
+ tag?: string;
21
+ }
22
+ /**
23
+ * Factory — create a POST handler with custom options.
24
+ *
25
+ * @example
26
+ * // app/api/cms-revalidate/route.ts
27
+ * import { createRevalidateHandler } from '@sprintup-cms/sdk/next'
28
+ * export const POST = createRevalidateHandler({ secret: process.env.CMS_WEBHOOK_SECRET })
29
+ */
30
+ declare function createRevalidateHandler(options?: RevalidateHandlerOptions): (request: NextRequest) => Promise<NextResponse>;
31
+ /**
32
+ * Default POST handler — zero-config, reads CMS_WEBHOOK_SECRET from env.
33
+ *
34
+ * @example
35
+ * // app/api/cms-revalidate/route.ts
36
+ * export { POST } from '@sprintup-cms/sdk/next'
37
+ */
38
+ declare const POST: (request: NextRequest) => Promise<NextResponse>;
39
+
40
+ interface PreviewExitOptions {
41
+ /** Where to redirect after exiting preview. Defaults to "/" */
42
+ redirectTo?: string;
43
+ }
44
+ /**
45
+ * Factory — create a GET handler for exiting preview/draft mode.
46
+ *
47
+ * @example
48
+ * // app/api/cms-preview/exit/route.ts
49
+ * import { createPreviewExitHandler } from '@sprintup-cms/sdk/next'
50
+ * export const GET = createPreviewExitHandler({ redirectTo: '/' })
51
+ */
52
+ declare function createPreviewExitHandler(options?: PreviewExitOptions): (request: Request) => Promise<NextResponse>;
53
+ /**
54
+ * Default GET handler.
55
+ *
56
+ * @example
57
+ * // app/api/cms-preview/exit/route.ts
58
+ * export { GET } from '@sprintup-cms/sdk/next'
59
+ */
60
+ declare const GET: (request: Request) => Promise<NextResponse>;
61
+
62
+ interface CMSCatchAllParams {
63
+ slug: string[];
64
+ }
65
+ declare function generateMetadata({ params }: {
66
+ params: Promise<CMSCatchAllParams>;
67
+ }): Promise<Metadata>;
68
+ declare function CMSCatchAllPage({ params }: {
69
+ params: Promise<CMSCatchAllParams>;
70
+ }): Promise<react_jsx_runtime.JSX.Element>;
71
+
72
+ export { CMSCatchAllPage, type CMSCatchAllParams, POST, createPreviewExitHandler, createRevalidateHandler, generateMetadata, GET as previewExitGET };