{"version":3,"sources":["../src/presets/icons.tsx","../src/presets/Blobs.tsx","../src/presets/Card.tsx","../src/utils/shuffle.ts","../src/presets/gradient.ts","../src/presets/CardSlider.tsx","../src/context/CarouselContext.tsx","../src/utils/clamp.ts","../src/core/carouselReducer.ts","../src/core/useAutoplay.ts","../src/core/useBreakpoints.ts","../src/core/useKeyboard.ts","../src/core/useSwipe.ts","../src/core/useCarousel.ts","../src/utils/cx.ts","../src/components/Carousel.tsx","../src/components/Track.tsx","../src/components/Slide.tsx","../src/components/Button.tsx","../src/components/Dots.tsx","../src/components/PlayPause.tsx","../src/components/index.ts","../src/presets/ImageSlider.tsx","../src/presets/SlicerSlider.tsx","../src/presets/CubeSlider.tsx"],"names":["jsx","jsxs","useMemo","motion","useRef","palettes","createContext","useContext","useEffect","useState","onPrev","onNext","onFirst","onLast","useReducer","useCallback","forwardRef","Carousel","useImperativeHandle","Icon","Fragment"],"mappings":";;;;;;;;;AAgBA,SAAS,IAAA,CAAK;AAAA,EACZ,IAAA,GAAO,EAAA;AAAA,EACP,IAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAiC;AAC/B,EAAA,uBACEA,cAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAM,4BAAA;AAAA,MACN,KAAA,EAAO,IAAA;AAAA,MACP,MAAA,EAAQ,IAAA;AAAA,MACR,OAAA,EAAQ,WAAA;AAAA,MACR,IAAA,EAAK,MAAA;AAAA,MACL,MAAA,EAAO,cAAA;AAAA,MACP,WAAA,EAAa,CAAA;AAAA,MACb,aAAA,EAAc,OAAA;AAAA,MACd,cAAA,EAAe,OAAA;AAAA,MACf,SAAA,EAAW,iBAAiB,IAAI,CAAA,CAAA;AAAA,MAC/B,GAAG,IAAA;AAAA,MAEH;AAAA;AAAA,GACH;AAEJ;AAEO,SAAS,YAAY,KAAA,EAAkB;AAC5C,EAAA,uBACEA,cAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAK,cAAA,EAAgB,GAAG,OAC5B,QAAA,kBAAAA,cAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,gBAAA,EAAiB,CAAA,EAC3B,CAAA;AAEJ;AAEO,SAAS,aAAa,KAAA,EAAkB;AAC7C,EAAA,uBACEA,cAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAK,eAAA,EAAiB,GAAG,OAC7B,QAAA,kBAAAA,cAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,eAAA,EAAgB,CAAA,EAC1B,CAAA;AAEJ;AAEO,SAAS,aAAa,KAAA,EAAkB;AAC7C,EAAA,uBACEC,eAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAK,gBAAA,EAAkB,GAAG,KAAA,EAC9B,QAAA,EAAA;AAAA,oBAAAD,cAAA,CAAC,MAAA,EAAA,EAAK,GAAE,YAAA,EAAa,CAAA;AAAA,oBACrBA,cAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,YAAA,EAAa;AAAA,GAAA,EACvB,CAAA;AAEJ;AC/CA,IAAM,UAAA,GAA4C;AAAA,EAChD,IAAA,EAAM;AAAA,IACJ,mQAAA;AAAA,IACA,oUAAA;AAAA,IACA,2TAAA;AAAA,IACA;AAAA,GACF;AAAA,EACA,KAAA,EAAO;AAAA,IACL;AAAA,GACF;AAAA,EACA,IAAA,EAAM;AAAA,IACJ;AAAA,GACF;AAAA,EACA,IAAA,EAAM;AAAA,IACJ;AAAA,GACF;AAAA,EACA,KAAA,EAAO;AAAA,IACL;AAAA,GACF;AAAA,EACA,MAAA,EAAQ;AAAA,IACN;AAAA,GACF;AAAA,EACA,IAAA,EAAM;AAAA,IACJ;AAAA;AAEJ,CAAA;AAGe,SAAR,KAAA,CAAuB,EAAE,IAAA,EAAM,KAAA,GAAQ,QAAO,EAAc;AACjE,EAAA,MAAM,UAAA,GAAa,WAAW,KAAK,CAAA;AAEnC,EAAA,MAAM,aAAA,GAAgBE,aAAA;AAAA,IACpB,MAAM;AAAA,MACJ,EAAE,OAAO,UAAA,CAAW,IAAA,CAAK,MAAM,IAAA,CAAK,MAAA,EAAO,GAAI,UAAA,CAAW,MAAM,CAAC,GAAG,GAAA,EAAK,CAAC,IAAA,CAAK,MAAA,EAAO,GAAI,EAAA,EAAI,MAAM,IAAA,CAAK,MAAA,EAAO,EAAG,OAAA,EAAS,EAAA,EAAG;AAAA,MAC/H,EAAE,KAAA,EAAO,UAAA,CAAW,IAAA,CAAK,KAAA,CAAM,KAAK,MAAA,EAAO,GAAI,UAAA,CAAW,MAAM,CAAC,CAAA,EAAG,KAAK,IAAA,CAAK,MAAA,EAAO,GAAI,EAAA,EAAI,IAAA,EAAM,EAAA,GAAK,KAAK,MAAA,EAAO,GAAI,EAAA,EAAI,OAAA,EAAS,EAAA;AAAG,KAC1I;AAAA;AAAA,IAEA,CAAC,MAAM,KAAK;AAAA,GACd;AAEA,EAAA,uBACEF,eAAC,KAAA,EAAA,EACE,QAAA,EAAA,aAAA,CAAc,IAAI,CAAC,IAAA,EAAM,0BACxBA,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MAEC,SAAA,EAAU,eAAA;AAAA,MACV,OAAA,EAAQ,aAAA;AAAA,MACR,KAAA,EAAM,4BAAA;AAAA,MACN,OAAO,EAAE,GAAA,EAAK,CAAA,EAAG,IAAA,CAAK,GAAG,CAAA,CAAA,CAAA,EAAK,IAAA,EAAM,CAAA,EAAG,IAAA,CAAK,IAAI,CAAA,CAAA,CAAA,EAAK,OAAA,EAAS,CAAA,EAAG,IAAA,CAAK,OAAO,CAAA,CAAA,CAAA,EAAI;AAAA,MACjF,aAAA,EAAY,MAAA;AAAA,MAEZ,QAAA,kBAAAA,cAAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,8BAAA;AAAA,UACL,GAAG,IAAA,CAAK,KAAA;AAAA,UACR,SAAA,EAAU;AAAA;AAAA;AACZ,KAAA;AAAA,IAXK;AAAA,GAaR,CAAA,EACH,CAAA;AAEJ;AC3Ce,SAAR,IAAA,CAAsB;AAAA,EAC3B,KAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA;AAAA,EACA,IAAA;AAAA,EACA,EAAA;AAAA,EACA,KAAA;AAAA,EACA,OAAA,GAAU;AACZ,CAAA,EAAc;AACZ,EAAA,MAAM,OAAOE,aAAAA,CAAQ,MAAM,KAAK,MAAA,EAAO,EAAG,EAAE,CAAA;AAE5C,EAAA,uBACED,eAAAA;AAAA,IAACE,mBAAA,CAAO,GAAA;AAAA,IAAP;AAAA,MACC,SAAA,EAAW,oBAAoB,OAAO,CAAA,CAAA;AAAA,MACtC,KAAA,EAAO,EAAE,WAAA,EAAa,IAAA,EAAM,WAAW,EAAA,EAAG;AAAA,MAC1C,QAAA,EAAU,EAAE,KAAA,EAAO,IAAA,EAAK;AAAA,MACxB,UAAA,EAAY,EAAE,KAAA,EAAO,IAAA,EAAM,WAAW,mCAAA,EAAoC;AAAA,MAC1E,UAAA,EAAY,EAAE,IAAA,EAAM,QAAA,EAAU,WAAW,GAAA,EAAI;AAAA,MAE7C,QAAA,EAAA;AAAA,wBAAAH,cAAAA,CAAC,KAAA,EAAA,EAAM,IAAA,EAAY,KAAA,EAAc,CAAA;AAAA,wBAEjCA,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,gBAAgB,QAAA,EAAA,QAAA,EAAS,CAAA;AAAA,wBACzCA,cAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,kBAAkB,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,wBAEtCA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mBAAA,EACb,0BAAAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wBAAA,EAAyB,CAAA,EAC1C,CAAA;AAAA,wBAEAA,cAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,iBAAiB,QAAA,EAAA,WAAA,EAAY,CAAA;AAAA,wBAE1CA,cAAAA;AAAA,UAACG,mBAAA,CAAO,MAAA;AAAA,UAAP;AAAA,YACC,IAAA,EAAK,QAAA;AAAA,YACL,SAAA,EAAU,iBAAA;AAAA,YACV,UAAA,EAAY,EAAE,KAAA,EAAO,GAAA,EAAI;AAAA,YACzB,aAAA,EAAY,MAAA;AAAA,YACZ,QAAA,EAAU,EAAA;AAAA,YAEV,QAAA,kBAAAH,cAAAA,CAAC,YAAA,EAAA,EAAa,IAAA,EAAM,EAAA,EAAI;AAAA;AAAA;AAC1B;AAAA;AAAA,GACF;AAEJ;;;ACpEO,SAAS,QAAW,KAAA,EAA0B;AACnD,EAAA,MAAM,MAAA,GAAS,MAAM,KAAA,EAAM;AAC3B,EAAA,KAAA,IAAS,IAAI,MAAA,CAAO,MAAA,GAAS,CAAA,EAAG,CAAA,GAAI,GAAG,CAAA,EAAA,EAAK;AAC1C,IAAA,MAAM,IAAI,IAAA,CAAK,KAAA,CAAM,KAAK,MAAA,EAAO,IAAK,IAAI,CAAA,CAAE,CAAA;AAC5C,IAAA,CAAC,MAAA,CAAO,CAAC,CAAA,EAAG,MAAA,CAAO,CAAC,CAAC,CAAA,GAAI,CAAC,MAAA,CAAO,CAAC,CAAA,EAAG,MAAA,CAAO,CAAC,CAAC,CAAA;AAAA,EAChD;AACA,EAAA,OAAO,MAAA;AACT;;;ACLO,IAAM,QAAA,GAAsB;AAAA,EACjC,EAAE,IAAA,EAAM,SAAA,EAAW,EAAA,EAAI,SAAA,EAAU;AAAA,EACjC,EAAE,IAAA,EAAM,SAAA,EAAW,EAAA,EAAI,SAAA,EAAU;AAAA,EACjC,EAAE,IAAA,EAAM,SAAA,EAAW,EAAA,EAAI,SAAA,EAAU;AAAA,EACjC,EAAE,IAAA,EAAM,SAAA,EAAW,EAAA,EAAI,SAAA,EAAU;AAAA,EACjC,EAAE,IAAA,EAAM,SAAA,EAAW,EAAA,EAAI,SAAA,EAAU;AAAA,EACjC,EAAE,IAAA,EAAM,SAAA,EAAW,EAAA,EAAI,SAAA,EAAU;AAAA,EACjC,EAAE,IAAA,EAAM,SAAA,EAAW,EAAA,EAAI,SAAA,EAAU;AAAA,EACjC,EAAE,IAAA,EAAM,SAAA,EAAW,EAAA,EAAI,SAAA,EAAU;AAAA,EACjC,EAAE,IAAA,EAAM,SAAA,EAAW,EAAA,EAAI,SAAA,EAAU;AAAA,EACjC,EAAE,IAAA,EAAM,SAAA,EAAW,EAAA,EAAI,SAAA,EAAU;AAAA,EACjC,EAAE,IAAA,EAAM,SAAA,EAAW,EAAA,EAAI,SAAA,EAAU;AAAA,EACjC,EAAE,IAAA,EAAM,SAAA,EAAW,EAAA,EAAI,SAAA,EAAU;AAAA,EACjC,EAAE,IAAA,EAAM,SAAA,EAAW,EAAA,EAAI,SAAA,EAAU;AAAA,EACjC,EAAE,IAAA,EAAM,SAAA,EAAW,EAAA,EAAI,SAAA;AACzB;AAGO,SAAS,WAAA,CAAY,EAAE,IAAA,EAAM,EAAA,EAAG,EAAoB;AACzD,EAAA,OAAO,CAAA,wBAAA,EAA2B,IAAI,CAAA,EAAA,EAAK,EAAE,CAAA,CAAA,CAAA;AAC/C;AAGO,SAAS,YAAY,gBAAA,EAAsC;AAChE,EAAA,OAAO,gBAAA,GAAmB,OAAA,CAAQ,QAAQ,CAAA,GAAI,SAAS,KAAA,EAAM;AAC/D;AAGO,SAAS,cAAc,gBAAA,EAAqC;AACjE,EAAA,OAAO,WAAA,CAAY,gBAAgB,CAAA,CAAE,GAAA,CAAI,WAAW,CAAA;AACtD;AAGO,IAAM,SAAA,GAAY,QAAA,CAAS,GAAA,CAAI,WAAW;ACdlC,SAAR,UAAA,CAA4B;AAAA,EACjC,MAAA;AAAA,EACA,KAAA;AAAA,EACA,gBAAA,GAAmB,KAAA;AAAA,EACnB,OAAA,GAAU;AACZ,CAAA,EAAoB;AAClB,EAAA,MAAM,SAAA,GAAYI,aAAuB,IAAI,CAAA;AAE7C,EAAA,MAAM,YAAA,GAAe,CAAC,SAAA,KAAsB;AAC1C,IAAA,MAAM,KAAK,SAAA,CAAU,OAAA;AACrB,IAAA,IAAI,EAAA,EAAI;AACN,MAAA,EAAA,CAAG,QAAA,CAAS,EAAE,IAAA,EAAO,SAAA,GAAY,GAAG,WAAA,GAAe,CAAA,EAAG,QAAA,EAAU,QAAA,EAAU,CAAA;AAAA,IAC5E;AAAA,EACF,CAAA;AAEA,EAAA,MAAMC,SAAAA,GAAW,YAAY,gBAAgB,CAAA;AAE7C,EAAA,uBACEJ,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,eAAA,EACb,QAAA,EAAA;AAAA,oBAAAD,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qDAAA,EAAsD,CAAA;AAAA,oBACrEA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sDAAA,EAAuD,CAAA;AAAA,oBAEtEA,cAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,QAAA;AAAA,QACL,SAAA,EAAU,iDAAA;AAAA,QACV,YAAA,EAAW,aAAA;AAAA,QACX,OAAA,EAAS,MAAM,YAAA,CAAa,EAAE,CAAA;AAAA,QAE9B,QAAA,kBAAAA,eAAC,WAAA,EAAA,EAAY;AAAA;AAAA,KACf;AAAA,oBAEAA,cAAAA,CAAC,KAAA,EAAA,EAAI,GAAA,EAAK,SAAA,EAAW,SAAA,EAAU,sBAAA,EAC5B,QAAA,EAAA,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,EAAO,KAAA,KAAU;AAC5B,MAAA,MAAM,OAAA,GAAUK,SAAAA,CAAS,KAAA,GAAQA,SAAAA,CAAS,MAAM,CAAA;AAChD,MAAA,MAAM,uBACJL,cAAAA;AAAA,QAAC,IAAA;AAAA,QAAA;AAAA,UACC,OAAO,KAAA,CAAM,KAAA;AAAA,UACb,UAAU,KAAA,CAAM,QAAA;AAAA,UAChB,aAAa,KAAA,CAAM,WAAA;AAAA,UACnB,MAAM,OAAA,CAAQ,IAAA;AAAA,UACd,IAAI,OAAA,CAAQ,EAAA;AAAA,UACZ,KAAA;AAAA,UACA;AAAA;AAAA,OACF;AAEF,MAAA,uBACEA,eAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uBACZ,QAAA,EAAA,KAAA,CAAM,IAAA,mBACLA,cAAAA,CAAC,GAAA,EAAA,EAAE,IAAA,EAAM,MAAM,IAAA,EAAM,MAAA,EAAO,UAAS,GAAA,EAAI,YAAA,EACtC,gBACH,CAAA,GAEA,IAAA,EAAA,EANsC,KAAA,CAAM,KAAA,GAAQ,KAQxD,CAAA;AAAA,IAEJ,CAAC,CAAA,EACH,CAAA;AAAA,oBAEAA,cAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,QAAA;AAAA,QACL,SAAA,EAAU,kDAAA;AAAA,QACV,YAAA,EAAW,cAAA;AAAA,QACX,OAAA,EAAS,MAAM,YAAA,CAAa,CAAC,CAAA;AAAA,QAE7B,QAAA,kBAAAA,eAAC,YAAA,EAAA,EAAa;AAAA;AAAA;AAChB,GAAA,EACF,CAAA;AAEJ;AC1FO,IAAM,eAAA,GAAkBM,oBAAkC,IAAI,CAAA;AAM9D,SAAS,kBAAA,GAAkC;AAChD,EAAA,MAAM,GAAA,GAAMC,iBAAW,eAAe,CAAA;AACtC,EAAA,IAAI,QAAQ,IAAA,EAAM;AAChB,IAAA,MAAM,IAAI,KAAA;AAAA,MACR;AAAA,KAEF;AAAA,EACF;AACA,EAAA,OAAO,GAAA;AACT;;;ACrBO,SAAS,KAAA,CAAM,KAAA,EAAe,GAAA,EAAa,GAAA,EAAqB;AACrE,EAAA,IAAI,GAAA,GAAM,KAAK,OAAO,GAAA;AACtB,EAAA,OAAO,KAAK,GAAA,CAAI,IAAA,CAAK,IAAI,KAAA,EAAO,GAAG,GAAG,GAAG,CAAA;AAC3C;AAMO,SAAS,SAAA,CAAU,OAAe,KAAA,EAAuB;AAC9D,EAAA,IAAI,KAAA,IAAS,GAAG,OAAO,CAAA;AACvB,EAAA,OAAA,CAAS,KAAA,GAAQ,QAAS,KAAA,IAAS,KAAA;AACrC;;;ACLO,SAAS,eAAA,CACd,OACA,MAAA,EACe;AAGf,EAAA,MAAM,WAAW,IAAA,CAAK,GAAA,CAAI,GAAG,KAAA,CAAM,WAAA,GAAc,MAAM,aAAa,CAAA;AAEpE,EAAA,QAAQ,OAAO,IAAA;AAAM,IACnB,KAAK,MAAA,EAAQ;AACX,MAAA,MAAM,MAAA,GAAS,KAAA,CAAM,WAAA,GAAc,MAAA,CAAO,IAAA;AAC1C,MAAA,MAAM,IAAA,GAAO,MAAA,CAAO,IAAA,GAChB,SAAA,CAAU,MAAA,EAAQ,KAAA,CAAM,WAAW,CAAA,GACnC,KAAA,CAAM,MAAA,EAAQ,CAAA,EAAG,QAAQ,CAAA;AAC7B,MAAA,OAAO,IAAA,KAAS,MAAM,WAAA,GAAc,KAAA,GAAQ,EAAE,GAAG,KAAA,EAAO,aAAa,IAAA,EAAK;AAAA,IAC5E;AAAA,IACA,KAAK,MAAA,EAAQ;AACX,MAAA,MAAM,MAAA,GAAS,KAAA,CAAM,WAAA,GAAc,MAAA,CAAO,IAAA;AAC1C,MAAA,MAAM,IAAA,GAAO,MAAA,CAAO,IAAA,GAChB,SAAA,CAAU,MAAA,EAAQ,KAAA,CAAM,WAAW,CAAA,GACnC,KAAA,CAAM,MAAA,EAAQ,CAAA,EAAG,QAAQ,CAAA;AAC7B,MAAA,OAAO,IAAA,KAAS,MAAM,WAAA,GAAc,KAAA,GAAQ,EAAE,GAAG,KAAA,EAAO,aAAa,IAAA,EAAK;AAAA,IAC5E;AAAA,IACA,KAAK,OAAA,EAAS;AACZ,MAAA,MAAM,IAAA,GAAO,KAAA,CAAM,MAAA,CAAO,KAAA,EAAO,GAAG,QAAQ,CAAA;AAC5C,MAAA,OAAO,IAAA,KAAS,MAAM,WAAA,GAAc,KAAA,GAAQ,EAAE,GAAG,KAAA,EAAO,aAAa,IAAA,EAAK;AAAA,IAC5E;AAAA,IACA,KAAK,WAAA,EAAa;AAChB,MAAA,IAAI,MAAA,CAAO,WAAA,KAAgB,KAAA,CAAM,WAAA,EAAa,OAAO,KAAA;AAErD,MAAA,MAAM,WAAA,GAAc,KAAA,CAAM,KAAA,CAAM,WAAA,EAAa,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,MAAA,CAAO,WAAA,GAAc,KAAA,CAAM,aAAa,CAAC,CAAA;AACrG,MAAA,OAAO,EAAE,GAAG,KAAA,EAAO,WAAA,EAAa,MAAA,CAAO,aAAa,WAAA,EAAY;AAAA,IAClE;AAAA,IACA,KAAK,qBAAA,EAAuB;AAC1B,MAAA,IAAI,MAAA,CAAO,aAAA,KAAkB,KAAA,CAAM,aAAA,EAAe,OAAO,KAAA;AACzD,MAAA,MAAM,WAAA,GAAc,KAAA,CAAM,KAAA,CAAM,WAAA,EAAa,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,KAAA,CAAM,WAAA,GAAc,MAAA,CAAO,aAAa,CAAC,CAAA;AACrG,MAAA,OAAO,EAAE,GAAG,KAAA,EAAO,aAAA,EAAe,MAAA,CAAO,eAAe,WAAA,EAAY;AAAA,IACtE;AAAA,IACA,KAAK,aAAA,EAAe;AAClB,MAAA,OAAO,MAAA,CAAO,SAAA,KAAc,KAAA,CAAM,SAAA,GAC9B,KAAA,GACA,EAAE,GAAG,KAAA,EAAO,SAAA,EAAW,MAAA,CAAO,SAAA,EAAU;AAAA,IAC9C;AAAA,IACA;AACE,MAAA,OAAO,KAAA;AAAA;AAEb;ACrCO,SAAS,YAAY,EAAE,OAAA,EAAS,QAAA,EAAU,MAAA,EAAQ,SAAQ,EAAyB;AAExF,EAAA,MAAM,SAAA,GAAYH,aAAO,MAAM,CAAA;AAC/B,EAAA,SAAA,CAAU,OAAA,GAAU,MAAA;AAEpB,EAAAI,eAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,OAAA,IAAW,OAAO,MAAA,KAAW,WAAA,EAAa;AAE/C,IAAA,MAAM,uBAAuB,MAAA,CAAO,UAAA;AAAA,MAClC;AAAA,KACF,CAAE,OAAA;AACF,IAAA,IAAI,oBAAA,EAAsB;AAE1B,IAAA,MAAM,OAAO,OAAA,CAAQ,OAAA;AACrB,IAAA,IAAI,MAAA,GAAS,KAAA;AACb,IAAA,MAAM,KAAA,GAAQ,MAAO,MAAA,GAAS,IAAA;AAC9B,IAAA,MAAM,MAAA,GAAS,MAAO,MAAA,GAAS,KAAA;AAE/B,IAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,WAAA,CAAY,MAAM;AACrC,MAAA,IAAI,CAAC,MAAA,IAAU,CAAC,QAAA,CAAS,MAAA,YAAkB,OAAA,EAAQ;AAAA,IACrD,GAAG,QAAQ,CAAA;AAEX,IAAA,IAAA,EAAM,gBAAA,CAAiB,gBAAgB,KAAK,CAAA;AAC5C,IAAA,IAAA,EAAM,gBAAA,CAAiB,gBAAgB,MAAM,CAAA;AAC7C,IAAA,IAAA,EAAM,gBAAA,CAAiB,WAAW,KAAK,CAAA;AACvC,IAAA,IAAA,EAAM,gBAAA,CAAiB,YAAY,MAAM,CAAA;AAEzC,IAAA,OAAO,MAAM;AACX,MAAA,MAAA,CAAO,cAAc,KAAK,CAAA;AAC1B,MAAA,IAAA,EAAM,mBAAA,CAAoB,gBAAgB,KAAK,CAAA;AAC/C,MAAA,IAAA,EAAM,mBAAA,CAAoB,gBAAgB,MAAM,CAAA;AAChD,MAAA,IAAA,EAAM,mBAAA,CAAoB,WAAW,KAAK,CAAA;AAC1C,MAAA,IAAA,EAAM,mBAAA,CAAoB,YAAY,MAAM,CAAA;AAAA,IAC9C,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,OAAA,EAAS,QAAA,EAAU,OAAO,CAAC,CAAA;AACjC;ACvCO,SAAS,cAAA,CACd,MACA,WAAA,EACU;AACV,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIC,eAAmB,IAAI,CAAA;AAGvD,EAAA,MAAM,KAAA,GAAQ,WAAA,GAAc,IAAA,CAAK,SAAA,CAAU,WAAW,CAAA,GAAI,EAAA;AAE1D,EAAAD,gBAAU,MAAM;AACd,IAAA,IAAI,CAAC,WAAA,IAAe,OAAO,MAAA,KAAW,WAAA,EAAa;AAEnD,IAAA,MAAM,UAAU,MAAgB;AAC9B,MAAA,MAAM,IAAA,GAAO,EAAE,GAAG,IAAA,EAAK;AACvB,MAAA,KAAA,MAAW,KAAA,IAAS,MAAA,CAAO,IAAA,CAAK,WAAW,EAAE,GAAA,CAAI,MAAM,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,GAAI,CAAC,CAAA,EAAG;AAC9E,QAAA,IAAI,OAAO,UAAA,CAAW,CAAA,YAAA,EAAe,KAAK,CAAA,GAAA,CAAK,EAAE,OAAA,EAAS;AACxD,UAAA,MAAM,IAAA,GAAO,YAAY,KAAK,CAAA;AAC9B,UAAA,IAAI,IAAA,CAAK,aAAA,IAAiB,IAAA,EAAM,IAAA,CAAK,gBAAgB,IAAA,CAAK,aAAA;AAC1D,UAAA,IAAI,IAAA,CAAK,cAAA,IAAkB,IAAA,EAAM,IAAA,CAAK,iBAAiB,IAAA,CAAK,cAAA;AAAA,QAC9D;AAAA,MACF;AACA,MAAA,OAAO,IAAA;AAAA,IACT,CAAA;AAEA,IAAA,MAAM,MAAA,GAAS,MAAM,WAAA,CAAY,OAAA,EAAS,CAAA;AAC1C,IAAA,MAAA,EAAO;AACP,IAAA,MAAA,CAAO,gBAAA,CAAiB,UAAU,MAAM,CAAA;AACxC,IAAA,OAAO,MAAM,MAAA,CAAO,mBAAA,CAAoB,QAAA,EAAU,MAAM,CAAA;AAAA,EAE1D,GAAG,CAAC,KAAA,EAAO,KAAK,aAAA,EAAe,IAAA,CAAK,cAAc,CAAC,CAAA;AAEnD,EAAA,OAAO,cAAc,QAAA,GAAW,IAAA;AAClC;AC7BO,SAAS,WAAA,CAAY;AAAA,EAC1B,OAAA;AAAA,EACA,WAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAAA,EAAyB;AAEvB,EAAA,MAAM,WAAWJ,YAAAA,CAAO,EAAE,QAAQ,MAAA,EAAQ,OAAA,EAAS,QAAQ,CAAA;AAC3D,EAAA,QAAA,CAAS,OAAA,GAAU,EAAE,MAAA,EAAQ,MAAA,EAAQ,SAAS,MAAA,EAAO;AAErD,EAAAI,gBAAU,MAAM;AACd,IAAA,MAAM,OAAO,OAAA,CAAQ,OAAA;AACrB,IAAA,IAAI,CAAC,IAAA,EAAM;AAEX,IAAA,MAAM,OAAA,GAAU,WAAA,KAAgB,YAAA,GAAe,WAAA,GAAc,SAAA;AAC7D,IAAA,MAAM,OAAA,GAAU,WAAA,KAAgB,YAAA,GAAe,YAAA,GAAe,WAAA;AAE9D,IAAA,MAAM,SAAA,GAAY,CAAC,KAAA,KAAyB;AAC1C,MAAA,MAAM,EAAE,MAAA,EAAAE,OAAAA,EAAQ,MAAA,EAAAC,OAAAA,EAAQ,SAAAC,QAAAA,EAAS,MAAA,EAAAC,OAAAA,EAAO,GAAI,QAAA,CAAS,OAAA;AACrD,MAAA,QAAQ,MAAM,GAAA;AAAK,QACjB,KAAK,OAAA;AACH,UAAA,KAAA,CAAM,cAAA,EAAe;AACrB,UAAAH,OAAAA,EAAO;AACP,UAAA;AAAA,QACF,KAAK,OAAA;AACH,UAAA,KAAA,CAAM,cAAA,EAAe;AACrB,UAAAC,OAAAA,EAAO;AACP,UAAA;AAAA,QACF,KAAK,MAAA;AACH,UAAA,KAAA,CAAM,cAAA,EAAe;AACrB,UAAAC,QAAAA,EAAQ;AACR,UAAA;AAAA,QACF,KAAK,KAAA;AACH,UAAA,KAAA,CAAM,cAAA,EAAe;AACrB,UAAAC,OAAAA,EAAO;AACP,UAAA;AAAA;AACJ,IACF,CAAA;AAEA,IAAA,IAAA,CAAK,gBAAA,CAAiB,WAAW,SAAS,CAAA;AAC1C,IAAA,OAAO,MAAM,IAAA,CAAK,mBAAA,CAAoB,SAAA,EAAW,SAAS,CAAA;AAAA,EAC5D,CAAA,EAAG,CAAC,OAAA,EAAS,WAAW,CAAC,CAAA;AAC3B;ACnCO,SAAS,QAAA,CAAS;AAAA,EACvB,QAAA;AAAA,EACA,WAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA,GAAY,EAAA;AAAA,EACZ,YAAA;AAAA,EACA;AACF,CAAA,EAAsB;AACpB,EAAA,MAAM,WAAWT,YAAAA,CAAO,EAAE,QAAQ,MAAA,EAAQ,YAAA,EAAc,YAAY,CAAA;AACpE,EAAA,QAAA,CAAS,OAAA,GAAU,EAAE,MAAA,EAAQ,MAAA,EAAQ,cAAc,UAAA,EAAW;AAE9D,EAAAI,gBAAU,MAAM;AACd,IAAA,MAAM,QAAQ,QAAA,CAAS,OAAA;AACvB,IAAA,IAAI,CAAC,KAAA,EAAO;AAEZ,IAAA,MAAM,eAAe,WAAA,KAAgB,YAAA;AACrC,IAAA,IAAI,QAAA,GAAW,CAAA;AACf,IAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,IAAA,IAAI,QAAA,GAAW,KAAA;AACf,IAAA,IAAI,KAAA,GAAQ,CAAA;AAEZ,IAAA,MAAM,OAAO,CAAC,KAAA,KAAyB,YAAA,GAAe,KAAA,CAAM,UAAU,KAAA,CAAM,OAAA;AAE5E,IAAA,MAAM,QAAQ,MAAM;AAClB,MAAA,KAAA,GAAQ,CAAA;AACR,MAAA,KAAA,CAAM,KAAA,CAAM,WAAA,CAAY,WAAA,EAAa,CAAA,EAAG,KAAK,CAAA,EAAA,CAAI,CAAA;AAAA,IACnD,CAAA;AAEA,IAAA,MAAM,aAAA,GAAgB,CAAC,KAAA,KAAwB;AAE7C,MAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACxB,MAAA,QAAA,GAAW,IAAA;AACX,MAAA,QAAA,GAAW,KAAK,KAAK,CAAA;AACrB,MAAA,KAAA,GAAQ,CAAA;AACR,MAAA,KAAA,CAAM,YAAA,CAAa,iBAAiB,MAAM,CAAA;AAC1C,MAAA,KAAA,CAAM,iBAAA,CAAkB,MAAM,SAAS,CAAA;AACvC,MAAA,QAAA,CAAS,QAAQ,YAAA,IAAe;AAAA,IAClC,CAAA;AAEA,IAAA,MAAM,aAAA,GAAgB,CAAC,KAAA,KAAwB;AAC7C,MAAA,IAAI,CAAC,QAAA,EAAU;AACf,MAAA,KAAA,GAAQ,IAAA,CAAK,KAAK,CAAA,GAAI,QAAA;AACtB,MAAA,IAAI,CAAC,KAAA,EAAO,KAAA,GAAQ,MAAA,CAAO,sBAAsB,KAAK,CAAA;AAAA,IACxD,CAAA;AAEA,IAAA,MAAM,WAAA,GAAc,CAAC,KAAA,KAAwB;AAC3C,MAAA,IAAI,CAAC,QAAA,EAAU;AACf,MAAA,QAAA,GAAW,KAAA;AACX,MAAA,IAAI,KAAA,EAAO,MAAA,CAAO,oBAAA,CAAqB,KAAK,GAAI,KAAA,GAAQ,CAAA;AACxD,MAAA,KAAA,CAAM,gBAAgB,eAAe,CAAA;AACrC,MAAA,KAAA,CAAM,KAAA,CAAM,WAAA,CAAY,WAAA,EAAa,KAAK,CAAA;AAC1C,MAAA,IAAI,KAAA,CAAM,iBAAA,CAAkB,KAAA,CAAM,SAAS,CAAA,EAAG;AAC5C,QAAA,KAAA,CAAM,qBAAA,CAAsB,MAAM,SAAS,CAAA;AAAA,MAC7C;AACA,MAAA,MAAM,SAAA,GAAY,IAAA,CAAK,GAAA,CAAI,KAAK,CAAA,GAAI,SAAA;AAEpC,MAAA,QAAA,CAAS,QAAQ,UAAA,GAAa;AAAA,QAC5B,KAAA;AAAA,QACA,SAAA,EAAW,SAAA,GAAa,KAAA,GAAQ,CAAA,GAAI,SAAS,MAAA,GAAU;AAAA,OACxD,CAAA;AACD,MAAA,IAAI,SAAA,EAAW;AACb,QAAA,KAAA,GAAQ,IAAI,QAAA,CAAS,OAAA,CAAQ,QAAO,GAAI,QAAA,CAAS,QAAQ,MAAA,EAAO;AAAA,MAClE;AAAA,IACF,CAAA;AAEA,IAAA,KAAA,CAAM,gBAAA,CAAiB,eAAe,aAAa,CAAA;AACnD,IAAA,KAAA,CAAM,gBAAA,CAAiB,eAAe,aAAa,CAAA;AACnD,IAAA,KAAA,CAAM,gBAAA,CAAiB,aAAa,WAAW,CAAA;AAC/C,IAAA,KAAA,CAAM,gBAAA,CAAiB,iBAAiB,WAAW,CAAA;AAEnD,IAAA,OAAO,MAAM;AACX,MAAA,IAAI,KAAA,EAAO,MAAA,CAAO,oBAAA,CAAqB,KAAK,CAAA;AAC5C,MAAA,KAAA,CAAM,mBAAA,CAAoB,eAAe,aAAa,CAAA;AACtD,MAAA,KAAA,CAAM,mBAAA,CAAoB,eAAe,aAAa,CAAA;AACtD,MAAA,KAAA,CAAM,mBAAA,CAAoB,aAAa,WAAW,CAAA;AAClD,MAAA,KAAA,CAAM,mBAAA,CAAoB,iBAAiB,WAAW,CAAA;AAAA,IACxD,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,QAAA,EAAU,WAAA,EAAa,SAAS,CAAC,CAAA;AACvC;;;ACxFO,SAAS,YAAY,OAAA,EAAuC;AACjE,EAAA,MAAM;AAAA,IACJ,WAAA;AAAA,IACA,YAAA,GAAe,CAAA;AAAA,IACf,IAAA,GAAO,KAAA;AAAA,IACP,QAAA,GAAW,KAAA;AAAA,IACX,gBAAA,GAAmB,GAAA;AAAA,IACnB,cAAA,GAAiB,CAAA;AAAA,IACjB,aAAA,GAAgB,CAAA;AAAA,IAChB,WAAA;AAAA,IACA,WAAA,GAAc,YAAA;AAAA,IACd,aAAA;AAAA,IACA,QAAA;AAAA,IACA,YAAA;AAAA,IACA;AAAA,GACF,GAAI,OAAA;AAGJ,EAAA,MAAM,YAAY,cAAA,CAAe,EAAE,aAAA,EAAe,cAAA,IAAkB,WAAW,CAAA;AAE/E,EAAA,MAAM,QAAA,GAAWJ,aAAuB,IAAI,CAAA;AAC5C,EAAA,MAAM,OAAA,GAAUA,aAAuB,IAAI,CAAA;AAE3C,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIU,gBAAA;AAAA,IACxB,eAAA;AAAA,IACA,MAAA;AAAA,IACA,OAAsB;AAAA,MACpB,WAAA,EAAa,MAAM,YAAA,EAAc,CAAA,EAAG,KAAK,GAAA,CAAI,CAAA,EAAG,WAAA,GAAc,aAAa,CAAC,CAAA;AAAA,MAC5E,WAAA;AAAA,MACA,aAAA;AAAA,MACA,SAAA,EAAW;AAAA,KACb;AAAA,GACF;AAGA,EAAAN,gBAAU,MAAM;AACd,IAAA,QAAA,CAAS,EAAE,IAAA,EAAM,WAAA,EAAa,WAAA,EAAa,CAAA;AAAA,EAC7C,CAAA,EAAG,CAAC,WAAW,CAAC,CAAA;AAGhB,EAAAA,gBAAU,MAAM;AACd,IAAA,QAAA,CAAS,EAAE,IAAA,EAAM,qBAAA,EAAuB,aAAA,EAAe,SAAA,CAAU,eAAe,CAAA;AAAA,EAClF,CAAA,EAAG,CAAC,SAAA,CAAU,aAAa,CAAC,CAAA;AAG5B,EAAA,MAAM,gBAAA,GAAmBJ,aAAO,aAAa,CAAA;AAC7C,EAAA,gBAAA,CAAiB,OAAA,GAAU,aAAA;AAC3B,EAAAI,gBAAU,MAAM;AACd,IAAA,gBAAA,CAAiB,OAAA,GAAU,MAAM,WAAW,CAAA;AAAA,EAC9C,CAAA,EAAG,CAAC,KAAA,CAAM,WAAW,CAAC,CAAA;AAGtB,EAAA,MAAM,WAAA,GAAcJ,aAAO,QAAQ,CAAA;AACnC,EAAA,WAAA,CAAY,OAAA,GAAU,QAAA;AACtB,EAAA,MAAM,QAAA,GAAWA,YAAAA,CAAO,KAAA,CAAM,WAAW,CAAA;AACzC,EAAA,QAAA,CAAS,UAAU,KAAA,CAAM,WAAA;AACzB,EAAAI,gBAAU,MAAM;AACd,IAAA,MAAM,QAAQ,QAAA,CAAS,OAAA;AACvB,IAAA,IAAI,CAAC,KAAA,EAAO;AACZ,IAAA,MAAM,MAAA,GAAS,CAAC,KAAA,KAA2B;AACzC,MAAA,IAAI,KAAA,CAAM,MAAA,KAAW,KAAA,IAAS,KAAA,CAAM,iBAAiB,WAAA,EAAa;AAChE,QAAA,WAAA,CAAY,OAAA,GAAU,SAAS,OAAO,CAAA;AAAA,MACxC;AAAA,IACF,CAAA;AACA,IAAA,KAAA,CAAM,gBAAA,CAAiB,iBAAiB,MAAM,CAAA;AAC9C,IAAA,OAAO,MAAM,KAAA,CAAM,mBAAA,CAAoB,eAAA,EAAiB,MAAM,CAAA;AAAA,EAChE,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,OAAO,SAAA,CAAU,cAAA;AACvB,EAAA,MAAM,IAAA,GAAOO,iBAAA;AAAA,IACX,MAAM,QAAA,CAAS,EAAE,MAAM,MAAA,EAAQ,IAAA,EAAM,MAAM,CAAA;AAAA,IAC3C,CAAC,MAAM,IAAI;AAAA,GACb;AACA,EAAA,MAAM,IAAA,GAAOA,iBAAA;AAAA,IACX,MAAM,QAAA,CAAS,EAAE,MAAM,MAAA,EAAQ,IAAA,EAAM,MAAM,CAAA;AAAA,IAC3C,CAAC,MAAM,IAAI;AAAA,GACb;AACA,EAAA,MAAM,IAAA,GAAOA,iBAAA,CAAY,CAAC,KAAA,KAAkB,QAAA,CAAS,EAAE,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,CAAA,EAAG,EAAE,CAAA;AAClF,EAAA,MAAM,IAAA,GAAOA,iBAAA,CAAY,MAAM,QAAA,CAAS,EAAE,IAAA,EAAM,aAAA,EAAe,SAAA,EAAW,IAAA,EAAM,CAAA,EAAG,EAAE,CAAA;AACrF,EAAA,MAAM,KAAA,GAAQA,iBAAA,CAAY,MAAM,QAAA,CAAS,EAAE,IAAA,EAAM,aAAA,EAAe,SAAA,EAAW,KAAA,EAAO,CAAA,EAAG,EAAE,CAAA;AACvF,EAAA,MAAM,KAAA,GAAQA,iBAAA,CAAY,MAAM,QAAA,CAAS,EAAE,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,CAAA,EAAG,CAAA,EAAG,EAAE,CAAA;AACzE,EAAA,MAAM,IAAA,GAAOA,iBAAA;AAAA,IACX,MAAM,SAAS,EAAE,IAAA,EAAM,SAAS,KAAA,EAAO,WAAA,GAAc,GAAG,CAAA;AAAA,IACxD,CAAC,WAAW;AAAA,GACd;AAEA,EAAA,WAAA,CAAY,EAAE,OAAA,EAAS,WAAA,EAAa,MAAA,EAAQ,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,MAAA,EAAQ,IAAA,EAAM,CAAA;AAC9F,EAAA,QAAA,CAAS,EAAE,UAAU,WAAA,EAAa,MAAA,EAAQ,MAAM,MAAA,EAAQ,IAAA,EAAM,YAAA,EAAc,UAAA,EAAY,CAAA;AACxF,EAAA,WAAA,CAAY;AAAA,IACV,SAAS,KAAA,CAAM,SAAA;AAAA,IACf,QAAA,EAAU,gBAAA;AAAA,IACV,MAAA,EAAQ,IAAA;AAAA,IACR;AAAA,GACD,CAAA;AAED,EAAA,MAAM,WAAW,IAAA,CAAK,GAAA,CAAI,GAAG,KAAA,CAAM,WAAA,GAAc,MAAM,aAAa,CAAA;AACpE,EAAA,MAAM,OAAA,GAAU,IAAA,IAAQ,KAAA,CAAM,WAAA,GAAc,CAAA;AAC5C,EAAA,MAAM,OAAA,GAAU,IAAA,IAAQ,KAAA,CAAM,WAAA,GAAc,QAAA;AAE5C,EAAA,OAAOb,aAAAA;AAAA,IACL,OAAO;AAAA,MACL,aAAa,KAAA,CAAM,WAAA;AAAA,MACnB,aAAa,KAAA,CAAM,WAAA;AAAA,MACnB,eAAe,KAAA,CAAM,aAAA;AAAA,MACrB,WAAW,KAAA,CAAM,SAAA;AAAA,MACjB,OAAA;AAAA,MACA,OAAA;AAAA,MACA,WAAA;AAAA,MACA,IAAA;AAAA,MACA,IAAA;AAAA,MACA,IAAA;AAAA,MACA,IAAA;AAAA,MACA,KAAA;AAAA,MACA,QAAA;AAAA,MACA;AAAA,KACF,CAAA;AAAA,IACA,CAAC,OAAO,OAAA,EAAS,OAAA,EAAS,aAAa,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM,KAAK;AAAA,GACtE;AACF;;;ACrIO,SAAS,MAAM,KAAA,EAAyD;AAC7E,EAAA,OAAO,KAAA,CAAM,MAAA,CAAO,OAAO,CAAA,CAAE,KAAK,GAAG,CAAA;AACvC;ACoBO,IAAM,QAAA,GAAWc,gBAAA,CAA0C,SAASC,SAAAA,CACzE;AAAA,EACE,WAAA;AAAA,EACA,YAAA;AAAA,EACA,IAAA;AAAA,EACA,QAAA;AAAA,EACA,gBAAA;AAAA,EACA,cAAA;AAAA,EACA,aAAA;AAAA,EACA,WAAA;AAAA,EACA,WAAA,GAAc,YAAA;AAAA,EACd,aAAA;AAAA,EACA,QAAA;AAAA,EACA,YAAA;AAAA,EACA,UAAA;AAAA,EACA,KAAA,GAAQ,UAAA;AAAA,EACR,SAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAG;AACL,CAAA,EACA,GAAA,EACA;AACA,EAAA,MAAM,MAAM,WAAA,CAAY;AAAA,IACtB,WAAA;AAAA,IACA,YAAA;AAAA,IACA,IAAA;AAAA,IACA,QAAA;AAAA,IACA,gBAAA;AAAA,IACA,cAAA;AAAA,IACA,aAAA;AAAA,IACA,WAAA;AAAA,IACA,WAAA;AAAA,IACA,aAAA;AAAA,IACA,QAAA;AAAA,IACA,YAAA;AAAA,IACA;AAAA,GACD,CAAA;AAED,EAAAC,yBAAA;AAAA,IACE,GAAA;AAAA,IACA,OAAuB;AAAA,MACrB,aAAa,GAAA,CAAI,WAAA;AAAA,MACjB,SAAS,GAAA,CAAI,OAAA;AAAA,MACb,SAAS,GAAA,CAAI,OAAA;AAAA,MACb,MAAM,GAAA,CAAI,IAAA;AAAA,MACV,MAAM,GAAA,CAAI,IAAA;AAAA,MACV,MAAM,GAAA,CAAI,IAAA;AAAA,MACV,MAAM,GAAA,CAAI,IAAA;AAAA,MACV,OAAO,GAAA,CAAI;AAAA,KACb,CAAA;AAAA,IACA,CAAC,GAAG;AAAA,GACN;AAIA,EAAA,MAAM,UAAA,GACJ,GAAA,CAAI,aAAA,GAAgB,CAAA,GACf;AAAA,IACC,GAAG,KAAA;AAAA,IACH,mBAAmB,CAAA,aAAA,EAAgB,GAAA,CAAI,gBAAgB,CAAC,CAAA,0BAAA,EAA6B,IAAI,aAAa,CAAA,CAAA;AAAA,GACxG,GACA,KAAA;AAEN,EAAA,uBACElB,cAAAA,CAAC,eAAA,CAAgB,UAAhB,EAAyB,KAAA,EAAO,KAC/B,QAAA,kBAAAA,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,KAAK,GAAA,CAAI,OAAA;AAAA,MACT,SAAA,EAAW,EAAA,CAAG,SAAA,EAAW,SAAS,CAAA;AAAA,MAClC,IAAA,EAAK,QAAA;AAAA,MACL,sBAAA,EAAqB,UAAA;AAAA,MACrB,YAAA,EAAY,KAAA;AAAA,MACZ,kBAAA,EAAkB,WAAA;AAAA,MAClB,QAAA,EAAU,CAAA;AAAA,MACV,KAAA,EAAO,UAAA;AAAA,MACN,GAAG,IAAA;AAAA,MAEH;AAAA;AAAA,GACH,EACF,CAAA;AAEJ,CAAC,CAAA;AC3FM,SAAS,MAAM,EAAE,QAAA,EAAU,WAAW,KAAA,EAAO,GAAG,MAAK,EAAe;AACzE,EAAA,MAAM,EAAE,WAAA,EAAa,SAAA,EAAW,WAAA,EAAa,QAAA,KAAa,kBAAA,EAAmB;AAE7E,EAAA,uBACEA,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,aAAA;AAAA,MACV,kBAAA,EAAkB,WAAA;AAAA,MAElB,WAAA,EAAW,YAAY,KAAA,GAAQ,QAAA;AAAA,MAE/B,QAAA,kBAAAA,cAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,GAAA,EAAK,QAAA;AAAA,UACL,SAAA,EAAW,EAAA,CAAG,UAAA,EAAY,SAAS,CAAA;AAAA,UACnC,kBAAA,EAAkB,WAAA;AAAA,UAClB,KAAA,EAAO,EAAE,mBAAA,EAAqB,WAAA,EAAa,GAAG,KAAA,EAAM;AAAA,UACnD,GAAG,IAAA;AAAA,UAEH;AAAA;AAAA;AACH;AAAA,GACF;AAEJ;ACrBO,SAAS,MAAM,EAAE,KAAA,EAAO,UAAU,SAAA,EAAW,GAAG,MAAK,EAAe;AACzE,EAAA,MAAM,EAAE,WAAA,EAAa,WAAA,EAAY,GAAI,kBAAA,EAAmB;AACxD,EAAA,MAAM,WAAW,KAAA,KAAU,WAAA;AAE3B,EAAA,uBACEA,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA,CAAG,UAAA,EAAY,QAAA,IAAY,oBAAoB,SAAS,CAAA;AAAA,MACnE,IAAA,EAAK,OAAA;AAAA,MACL,sBAAA,EAAqB,OAAA;AAAA,MACrB,YAAA,EAAY,CAAA,EAAG,KAAA,GAAQ,CAAC,OAAO,WAAW,CAAA,CAAA;AAAA,MAC1C,aAAA,EAAa,CAAC,QAAA,IAAY,MAAA;AAAA,MAC1B,eAAa,QAAA,IAAY,MAAA;AAAA,MACxB,GAAG,IAAA;AAAA,MAEH;AAAA;AAAA,GACH;AAEJ;ACnBA,IAAM,cAAA,GAAkD;AAAA,EACtD,IAAA,EAAM,gBAAA;AAAA,EACN,IAAA,EAAM,YAAA;AAAA,EACN,KAAA,EAAO,aAAA;AAAA,EACP,IAAA,EAAM;AACR,CAAA;AAGA,SAASmB,KAAAA,CAAK,EAAE,GAAA,EAAI,EAA6B;AAE/C,EAAA,MAAM,KAAA,GAA2C;AAAA,IAC/C,IAAA,EAAM,CAAC,iBAAiB,CAAA;AAAA,IACxB,IAAA,EAAM,CAAC,gBAAgB,CAAA;AAAA,IACvB,KAAA,EAAO,CAAC,kBAAA,EAAoB,iBAAiB,CAAA;AAAA,IAC7C,IAAA,EAAM,CAAC,kBAAA,EAAoB,gBAAgB;AAAA,GAC7C;AACA,EAAA,uBACEnB,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,iBAAA;AAAA,MACV,OAAA,EAAQ,WAAA;AAAA,MACR,KAAA,EAAM,KAAA;AAAA,MACN,MAAA,EAAO,KAAA;AAAA,MACP,IAAA,EAAK,MAAA;AAAA,MACL,MAAA,EAAO,cAAA;AAAA,MACP,WAAA,EAAa,CAAA;AAAA,MACb,aAAA,EAAc,OAAA;AAAA,MACd,cAAA,EAAe,OAAA;AAAA,MACf,aAAA,EAAY,MAAA;AAAA,MACZ,SAAA,EAAU,OAAA;AAAA,MAET,QAAA,EAAA,KAAA,CAAM,GAAG,CAAA,CAAE,GAAA,CAAI,CAAC,MAAA,qBACfA,cAAAA,CAAC,UAAA,EAAA,EAAsB,MAAA,EAAA,EAAR,MAAwB,CACxC;AAAA;AAAA,GACH;AAEJ;AAOO,SAAS,MAAA,CAAO;AAAA,EACrB,GAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,YAAA,EAAc,SAAA;AAAA,EACd,GAAG;AACL,CAAA,EAAgB;AACd,EAAA,MAAM,EAAE,MAAM,IAAA,EAAM,IAAA,EAAM,aAAa,OAAA,EAAS,OAAA,KAAY,kBAAA,EAAmB;AAE/E,EAAA,MAAM,OAAA,GAA+C;AAAA,IACnD,IAAA;AAAA,IACA,IAAA;AAAA,IACA,KAAA,EAAO,MAAM,IAAA,CAAK,CAAC,CAAA;AAAA,IACnB,IAAA,EAAM,MAAM,IAAA,CAAK,WAAA,GAAc,CAAC;AAAA,GAClC;AAEA,EAAA,MAAM,OAAA,GAAU,GAAA,KAAQ,MAAA,IAAU,GAAA,KAAQ,UAAU,OAAA,GAAU,OAAA;AAE9D,EAAA,uBACEA,cAAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,QAAA;AAAA,MACL,WAAW,EAAA,CAAG,WAAA,EAAa,CAAA,WAAA,EAAc,GAAG,IAAI,SAAS,CAAA;AAAA,MACzD,YAAA,EAAY,SAAA,IAAa,cAAA,CAAe,GAAG,CAAA;AAAA,MAC3C,OAAA,EAAS,QAAQ,GAAG,CAAA;AAAA,MACpB,QAAA,EAAU,YAAY,CAAC,OAAA;AAAA,MACtB,GAAG,IAAA;AAAA,MAEH,QAAA,EAAA,QAAA,oBAAYA,cAAAA,CAACmB,KAAAA,EAAA,EAAK,GAAA,EAAU;AAAA;AAAA,GAC/B;AAEJ;AC3EO,SAAS,KAAK,EAAE,SAAA,EAAW,QAAA,EAAU,GAAG,MAAK,EAAc;AAChE,EAAA,MAAM,EAAE,WAAA,EAAa,WAAA,EAAa,IAAA,KAAS,kBAAA,EAAmB;AAE9D,EAAA,uBACEnB,eAAC,KAAA,EAAA,EAAI,SAAA,EAAW,GAAG,SAAA,EAAW,SAAS,GAAG,IAAA,EAAK,SAAA,EAAW,GAAG,IAAA,EAC1D,QAAA,EAAA,KAAA,CAAM,KAAK,EAAE,MAAA,EAAQ,aAAY,EAAG,CAAC,GAAG,KAAA,KAAU;AACjD,IAAA,MAAM,WAAW,KAAA,KAAU,WAAA;AAC3B,IAAA,uBACEA,cAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QAEC,IAAA,EAAK,QAAA;AAAA,QACL,IAAA,EAAK,KAAA;AAAA,QACL,eAAA,EAAe,QAAA;AAAA,QACf,gBAAc,QAAA,IAAY,MAAA;AAAA,QAC1B,cAAY,QAAA,GAAW,QAAA,CAAS,KAAK,CAAA,GAAI,CAAA,YAAA,EAAe,QAAQ,CAAC,CAAA,CAAA;AAAA,QACjE,SAAA,EAAW,EAAA,CAAG,QAAA,EAAU,QAAA,IAAY,gBAAgB,CAAA;AAAA,QACpD,OAAA,EAAS,MAAM,IAAA,CAAK,KAAK;AAAA,OAAA;AAAA,MAPpB;AAAA,KAQP;AAAA,EAEJ,CAAC,CAAA,EACH,CAAA;AAEJ;ACxBA,SAASmB,KAAAA,CAAK,EAAE,OAAA,EAAQ,EAAyB;AAC/C,EAAA,uBACEnB,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,iBAAA;AAAA,MACV,OAAA,EAAQ,WAAA;AAAA,MACR,KAAA,EAAM,KAAA;AAAA,MACN,MAAA,EAAO,KAAA;AAAA,MACP,IAAA,EAAK,cAAA;AAAA,MACL,aAAA,EAAY,MAAA;AAAA,MACZ,SAAA,EAAU,OAAA;AAAA,MAET,QAAA,EAAA,OAAA,mBACCC,eAAAA,CAAAmB,mBAAA,EAAA,EACE,QAAA,EAAA;AAAA,wBAAApB,cAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,GAAA,EAAI,CAAA,EAAE,GAAA,EAAI,KAAA,EAAM,GAAA,EAAI,MAAA,EAAO,IAAA,EAAK,EAAA,EAAG,GAAA,EAAI,CAAA;AAAA,wBAC/CA,cAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,IAAA,EAAK,CAAA,EAAE,GAAA,EAAI,KAAA,EAAM,GAAA,EAAI,MAAA,EAAO,IAAA,EAAK,EAAA,EAAG,GAAA,EAAI;AAAA,OAAA,EAClD,CAAA,mBAEAA,cAAAA,CAAC,SAAA,EAAA,EAAQ,QAAO,oBAAA,EAAqB;AAAA;AAAA,GAEzC;AAEJ;AAMO,SAAS,SAAA,CAAU,EAAE,SAAA,EAAW,QAAA,EAAU,cAAc,SAAA,EAAW,GAAG,MAAK,EAAmB;AACnG,EAAA,MAAM,EAAE,SAAA,EAAW,IAAA,EAAM,KAAA,KAAU,kBAAA,EAAmB;AAEtD,EAAA,uBACEA,cAAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,QAAA;AAAA,MACL,SAAA,EAAW,EAAA,CAAG,WAAA,EAAa,sBAAA,EAAwB,SAAS,CAAA;AAAA,MAC5D,YAAA,EAAY,SAAA,KAAc,SAAA,GAAY,OAAA,GAAU,MAAA,CAAA;AAAA,MAChD,cAAA,EAAc,SAAA;AAAA,MACd,OAAA,EAAS,YAAY,KAAA,GAAQ,IAAA;AAAA,MAC5B,GAAG,IAAA;AAAA,MAEH,sCAAYA,cAAAA,CAACmB,KAAAA,EAAA,EAAK,SAAS,SAAA,EAAW;AAAA;AAAA,GACzC;AAEJ;;;ACnBO,IAAMF,SAAAA,GAAW,MAAA,CAAO,MAAA,CAAO,QAAA,EAAc;AAAA,EAClD,KAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,IAAA;AAAA,EACA;AACF,CAAC,CAAA;ACAc,SAAR,WAAA,CAA6B;AAAA,EAClC,MAAA;AAAA,EACA,IAAA,GAAO,IAAA;AAAA,EACP,QAAA,GAAW,KAAA;AAAA,EACX,gBAAA;AAAA,EACA,MAAA,GAAS,GAAA;AAAA,EACT,UAAA,GAAa,IAAA;AAAA,EACb,QAAA,GAAW,IAAA;AAAA,EACX,SAAA;AAAA,EACA,KAAA,GAAQ;AACV,CAAA,EAAqB;AACnB,EAAA,uBACEhB,eAAAA;AAAA,IAACgB,SAAAA;AAAA,IAAA;AAAA,MACC,aAAa,MAAA,CAAO,MAAA;AAAA,MACpB,IAAA;AAAA,MACA,QAAA;AAAA,MACA,gBAAA;AAAA,MACA,KAAA;AAAA,MACA,SAAA,EAAW,EAAA,CAAG,UAAA,EAAY,SAAS,CAAA;AAAA,MACnC,KAAA,EACE;AAAA,QACE,qBAAqB,OAAO,MAAA,KAAW,QAAA,GAAW,CAAA,EAAG,MAAM,CAAA,EAAA,CAAA,GAAO;AAAA,OACpE;AAAA,MAGD,QAAA,EAAA;AAAA,QAAA,UAAA,oBAAcjB,cAAAA,CAACiB,SAAAA,CAAS,MAAA,EAAT,EAAgB,KAAI,MAAA,EAAO,CAAA;AAAA,wBAC3CjB,eAACiB,SAAAA,CAAS,KAAA,EAAT,EACE,QAAA,EAAA,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,EAAO,CAAA,KAAM;AACxB,UAAA,MAAM,wBACJjB,cAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAU,iBAAA;AAAA,cACV,OAAO,EAAE,eAAA,EAAiB,CAAA,IAAA,EAAO,KAAA,CAAM,GAAG,CAAA,CAAA,CAAA,EAAI;AAAA,cAC9C,IAAA,EAAK,KAAA;AAAA,cACL,cAAY,KAAA,CAAM,GAAA;AAAA,cAEjB,QAAA,EAAA,KAAA,CAAM,WAAW,IAAA,oBAAQA,eAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mBAAA,EAAqB,QAAA,EAAA,KAAA,CAAM,OAAA,EAAQ;AAAA;AAAA,WAC9E;AAEF,UAAA,uBACEA,cAAAA,CAACiB,SAAAA,CAAS,KAAA,EAAT,EAAuB,OAAO,CAAA,EAC5B,QAAA,EAAA,KAAA,CAAM,IAAA,mBACLjB,cAAAA,CAAC,GAAA,EAAA,EAAE,WAAU,gBAAA,EAAiB,IAAA,EAAM,KAAA,CAAM,IAAA,EAAM,MAAA,EAAO,QAAA,EAAS,KAAI,YAAA,EACjE,QAAA,EAAA,KAAA,EACH,CAAA,GAEA,KAAA,EAAA,EANiB,CAQrB,CAAA;AAAA,QAEJ,CAAC,CAAA,EACH,CAAA;AAAA,QACC,8BAAcA,cAAAA,CAACiB,UAAS,MAAA,EAAT,EAAgB,KAAI,MAAA,EAAO,CAAA;AAAA,QAC1C,QAAA,oBAAYjB,cAAAA,CAACiB,SAAAA,CAAS,MAAT,EAAc;AAAA;AAAA;AAAA,GAC9B;AAEJ;ACtDe,SAAR,YAAA,CAA8B;AAAA,EACnC,MAAA;AAAA,EACA,IAAA,GAAO,IAAA;AAAA,EACP,QAAA,GAAW,KAAA;AAAA,EACX,gBAAA;AAAA,EACA,MAAA,GAAS,GAAA;AAAA,EACT,MAAA,GAAS,CAAA;AAAA,EACT,UAAA,GAAa,IAAA;AAAA,EACb,QAAA,GAAW,IAAA;AAAA,EACX,SAAA;AAAA,EACA,KAAA,GAAQ;AACV,CAAA,EAAsB;AACpB,EAAA,MAAM,GAAA,GAAM,YAAY,EAAE,WAAA,EAAa,OAAO,MAAA,EAAQ,IAAA,EAAM,QAAA,EAAU,gBAAA,EAAkB,CAAA;AACxF,EAAA,MAAM,MAAA,GAAS,KAAA,CAAM,IAAA,CAAK,EAAE,MAAA,EAAQ,QAAO,EAAG,CAAC,CAAA,EAAG,CAAA,KAAM,CAAC,CAAA;AAEzD,EAAA,uBACEjB,cAAAA,CAAC,eAAA,CAAgB,UAAhB,EAAyB,KAAA,EAAO,KAC/B,QAAA,kBAAAC,eAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,KAAK,GAAA,CAAI,OAAA;AAAA,MACT,SAAA,EAAW,EAAA,CAAG,WAAA,EAAa,SAAS,CAAA;AAAA,MACpC,IAAA,EAAK,QAAA;AAAA,MACL,sBAAA,EAAqB,UAAA;AAAA,MACrB,YAAA,EAAY,KAAA;AAAA,MACZ,QAAA,EAAU,CAAA;AAAA,MACV,OACE,EAAE,mBAAA,EAAqB,GAAG,MAAM,CAAA,EAAA,CAAA,EAAM,eAAe,MAAA,EAAO;AAAA,MAG9D,QAAA,EAAA;AAAA,wBAAAD,cAAAA,CAAC,KAAA,EAAA,EAAI,GAAA,EAAK,GAAA,CAAI,QAAA,EAAU,SAAA,EAAU,qBAAA,EAC/B,QAAA,EAAA,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,EAAO,CAAA,KAAM;AACxB,UAAA,MAAM,MAAA,GAAS,MAAM,GAAA,CAAI,WAAA;AACzB,UAAA,uBACEC,eAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cAEC,SAAA,EAAU,kBAAA;AAAA,cACV,eAAa,MAAA,IAAU,MAAA;AAAA,cACvB,aAAA,EAAa,CAAC,MAAA,IAAU,MAAA;AAAA,cACxB,IAAA,EAAK,OAAA;AAAA,cACL,sBAAA,EAAqB,OAAA;AAAA,cACrB,cAAY,CAAA,EAAG,CAAA,GAAI,CAAC,CAAA,IAAA,EAAO,OAAO,MAAM,CAAA,CAAA;AAAA,cAEvC,QAAA,EAAA;AAAA,gBAAA,MAAA,CAAO,GAAA,CAAI,CAAC,CAAA,qBACXD,cAAAA;AAAA,kBAAC,MAAA;AAAA,kBAAA;AAAA,oBAEC,SAAA,EAAU,kBAAA;AAAA,oBACV,KAAA,EAAO,EAAE,KAAA,EAAO,CAAA,EAAG,iBAAiB,CAAA,IAAA,EAAO,KAAA,CAAM,GAAG,CAAA,CAAA,CAAA;AAAI,mBAAA;AAAA,kBAFnD;AAAA,iBAIR,CAAA;AAAA,gBACA,KAAA,CAAM,WAAW,IAAA,oBAAQA,eAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oBAAA,EAAsB,QAAA,EAAA,KAAA,CAAM,OAAA,EAAQ;AAAA;AAAA,aAAA;AAAA,YAfxE;AAAA,WAgBP;AAAA,QAEJ,CAAC,CAAA,EACH,CAAA;AAAA,QAEC,UAAA,oBAAcA,cAAAA,CAAC,MAAA,EAAA,EAAO,KAAI,MAAA,EAAO,CAAA;AAAA,QACjC,UAAA,oBAAcA,cAAAA,CAAC,MAAA,EAAA,EAAO,KAAI,MAAA,EAAO,CAAA;AAAA,QACjC,QAAA,oBAAYA,cAAAA,CAAC,IAAA,EAAA,EAAK;AAAA;AAAA;AAAA,GACrB,EACF,CAAA;AAEJ;ACpDe,SAAR,UAAA,CAA4B;AAAA,EACjC,MAAA;AAAA,EACA,IAAA,GAAO,IAAA;AAAA,EACP,QAAA,GAAW,KAAA;AAAA,EACX,gBAAA;AAAA,EACA,MAAA,GAAS,GAAA;AAAA,EACT,QAAA,GAAW,KAAA;AAAA,EACX,MAAA,GAAS,IAAA;AAAA,EACT,UAAA,GAAa,IAAA;AAAA,EACb,QAAA,GAAW,IAAA;AAAA,EACX,SAAA;AAAA,EACA,KAAA,GAAQ;AACV,CAAA,EAAoB;AAClB,EAAA,MAAM,MAAM,WAAA,CAAY;AAAA,IACtB,aAAa,MAAA,CAAO,MAAA;AAAA,IACpB,IAAA;AAAA,IACA,QAAA;AAAA,IACA,gBAAA;AAAA,IACA,WAAA,EAAa,WAAW,UAAA,GAAa;AAAA,GACtC,CAAA;AACD,EAAA,MAAM,QAAQ,MAAA,CAAO,MAAA;AAKrB,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIS,eAAS,CAAC,CAAA;AACpC,EAAAD,gBAAU,MAAM;AACd,IAAA,MAAM,EAAA,GAAK,IAAI,QAAA,CAAS,OAAA;AACxB,IAAA,IAAI,CAAC,EAAA,EAAI;AACT,IAAA,MAAM,OAAA,GAAU,MAAM,QAAA,CAAA,CAAU,QAAA,GAAW,GAAG,YAAA,GAAe,EAAA,CAAG,eAAe,CAAC,CAAA;AAChF,IAAA,OAAA,EAAQ;AACR,IAAA,IAAI,OAAO,mBAAmB,WAAA,EAAa;AAC3C,IAAA,MAAM,QAAA,GAAW,IAAI,cAAA,CAAe,OAAO,CAAA;AAC3C,IAAA,QAAA,CAAS,QAAQ,EAAE,CAAA;AACnB,IAAA,OAAO,MAAM,SAAS,UAAA,EAAW;AAAA,EACnC,CAAA,EAAG,CAAC,GAAA,CAAI,QAAA,EAAU,QAAQ,CAAC,CAAA;AAI3B,EAAA,MAAM,QAAA,GAAW,CAAC,CAAA,KAAc;AAC9B,IAAA,IAAI,GAAA,GAAM,IAAI,GAAA,CAAI,WAAA;AAClB,IAAA,IAAI,IAAA,IAAQ,QAAQ,CAAA,EAAG;AACrB,MAAA,IAAI,GAAA,GAAM,KAAA,GAAQ,CAAA,EAAG,GAAA,IAAO,KAAA;AAAA,WAAA,IACnB,GAAA,GAAM,CAAC,KAAA,GAAQ,CAAA,EAAG,GAAA,IAAO,KAAA;AAAA,IACpC;AACA,IAAA,OAAO,GAAA;AAAA,EACT,CAAA;AAEA,EAAA,uBACER,cAAAA,CAAC,eAAA,CAAgB,UAAhB,EAAyB,KAAA,EAAO,KAC/B,QAAA,kBAAAC,eAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,KAAK,GAAA,CAAI,OAAA;AAAA,MACT,SAAA,EAAW,EAAA,CAAG,SAAA,EAAW,SAAS,CAAA;AAAA,MAClC,IAAA,EAAK,QAAA;AAAA,MACL,sBAAA,EAAqB,UAAA;AAAA,MACrB,YAAA,EAAY,KAAA;AAAA,MACZ,QAAA,EAAU,CAAA;AAAA,MACV,kBAAA,EAAkB,WAAW,UAAA,GAAa,YAAA;AAAA,MAC1C,eAAa,MAAA,IAAU,MAAA;AAAA,MACvB,KAAA,EACE;AAAA,QACE,mBAAA,EAAqB,GAAG,MAAM,CAAA,EAAA,CAAA;AAAA,QAC9B,iBAAA,EAAmB,GAAG,KAAK,CAAA,EAAA;AAAA,OAC7B;AAAA,MAGF,QAAA,EAAA;AAAA,wBAAAD,eAAC,KAAA,EAAA,EAAI,GAAA,EAAK,GAAA,CAAI,QAAA,EAAU,WAAU,mBAAA,EAChC,QAAA,kBAAAA,cAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,eAAA,EACZ,QAAA,EAAA,MAAA,CAAO,GAAA,CAAI,CAAC,OAAO,CAAA,KAAM;AACxB,UAAA,MAAM,GAAA,GAAM,SAAS,CAAC,CAAA;AACtB,UAAA,MAAM,SAAS,GAAA,KAAQ,CAAA;AACvB,UAAA,uBACEA,cAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cAEC,SAAA,EAAU,eAAA;AAAA,cACV,eAAa,MAAA,IAAU,MAAA;AAAA,cACvB,aAAA,EAAa,CAAC,MAAA,IAAU,MAAA;AAAA,cACxB,IAAA,EAAK,OAAA;AAAA,cACL,sBAAA,EAAqB,OAAA;AAAA,cACrB,YAAA,EAAY,CAAA,EAAG,CAAA,GAAI,CAAC,OAAO,KAAK,CAAA,CAAA;AAAA,cAChC,KAAA,EACE;AAAA,gBACE,OAAA,EAAS,GAAA;AAAA;AAAA,gBAET,YAAY,IAAA,CAAK,GAAA,CAAI,GAAG,CAAA,IAAK,IAAI,MAAA,GAAY,QAAA;AAAA,gBAC7C,eAAA,EAAiB,CAAA,IAAA,EAAO,KAAA,CAAM,GAAG,CAAA,CAAA;AAAA,eACnC;AAAA,cAGD,QAAA,EAAA,KAAA,CAAM,WAAW,IAAA,oBAAQA,eAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kBAAA,EAAoB,QAAA,EAAA,KAAA,CAAM,OAAA,EAAQ;AAAA,aAAA;AAAA,YAhBtE;AAAA,WAiBP;AAAA,QAEJ,CAAC,GACH,CAAA,EACF,CAAA;AAAA,QAEC,0BAAUA,cAAAA,CAAC,SAAI,SAAA,EAAU,iBAAA,EAAkB,eAAY,MAAA,EAAO,CAAA;AAAA,QAC9D,UAAA,oBAAcA,cAAAA,CAAC,MAAA,EAAA,EAAO,KAAI,MAAA,EAAO,CAAA;AAAA,QACjC,UAAA,oBAAcA,cAAAA,CAAC,MAAA,EAAA,EAAO,KAAI,MAAA,EAAO,CAAA;AAAA,QACjC,QAAA,oBAAYA,cAAAA,CAAC,IAAA,EAAA,EAAK;AAAA;AAAA;AAAA,GACrB,EACF,CAAA;AAEJ","file":"presets.cjs","sourcesContent":["import type { SVGProps } from \"react\";\n\n/**\n * Minimal inline replacements for the three lucide-react icons used by the\n * presets. The rendered SVG (attributes, class names, and paths) is identical\n * to lucide-react v0.487.0 so the UI is unchanged — this just drops the\n * 40 MB `lucide-react` install footprint that every consumer inherited.\n *\n * Icon paths are from lucide (ISC licensed).\n */\n\nexport interface IconProps extends Omit<SVGProps<SVGSVGElement>, \"ref\"> {\n  /** Width and height in pixels. Default `24`, matching lucide. */\n  size?: number;\n}\n\nfunction Icon({\n  size = 24,\n  name,\n  children,\n  ...rest\n}: IconProps & { name: string }) {\n  return (\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      width={size}\n      height={size}\n      viewBox=\"0 0 24 24\"\n      fill=\"none\"\n      stroke=\"currentColor\"\n      strokeWidth={2}\n      strokeLinecap=\"round\"\n      strokeLinejoin=\"round\"\n      className={`lucide lucide-${name}`}\n      {...rest}\n    >\n      {children}\n    </svg>\n  );\n}\n\nexport function ChevronLeft(props: IconProps) {\n  return (\n    <Icon name=\"chevron-left\" {...props}>\n      <path d=\"m15 18-6-6 6-6\" />\n    </Icon>\n  );\n}\n\nexport function ChevronRight(props: IconProps) {\n  return (\n    <Icon name=\"chevron-right\" {...props}>\n      <path d=\"m9 18 6-6-6-6\" />\n    </Icon>\n  );\n}\n\nexport function ArrowUpRight(props: IconProps) {\n  return (\n    <Icon name=\"arrow-up-right\" {...props}>\n      <path d=\"M7 7h10v10\" />\n      <path d=\"M7 17 17 7\" />\n    </Icon>\n  );\n}\n","import { useMemo } from \"react\";\n\nexport type ShapeOption =\n  | \"blob\"\n  | \"heart\"\n  | \"star\"\n  | \"bear\"\n  | \"music\"\n  | \"trophy\"\n  | \"ring\";\n\ntype BlobProps = {\n  /** Seed used to pick blob shapes/positions deterministically per card. */\n  seed: number;\n  shape?: ShapeOption;\n};\n\nconst shapePaths: Record<ShapeOption, string[]> = {\n  blob: [\n    \"M53.3,-56.6C68.8,-42.1,81.5,-21.1,78.6,-4.5C75.6,12.1,57,24.2,41.5,38C26,51.8,13,67.3,-1,68.6C-15,69.8,-30,56.8,-41.3,42.7C-52.6,28.6,-60.2,13.3,-61.8,-3.4C-63.3,-20.1,-58.9,-38.2,-47.3,-52.6C-35.7,-67.1,-17.9,-77.9,2,-80.3C21.9,-82.7,43.8,-76.8,53.3,-56.6Z\",\n    \"M40.6,-64.2C50.5,-51.2,55.3,-38,61.2,-26C67.2,-14,74.3,-3.1,74.8,8.7C75.3,20.6,69.2,33.4,60.1,41.8C50.9,50.3,38.7,54.5,26.1,63.4C13.4,72.3,0.3,86,-16.3,89.5C-32.8,93,-52.9,86.3,-60.6,71.8C-68.2,57.2,-63.4,34.8,-58,16.6C-52.7,-1.7,-46.7,-15.7,-39.3,-29.6C-31.9,-43.5,-23.1,-57.3,-10.2,-66.4C2.7,-75.5,27.8,-79.8,40.6,-64.2Z\",\n    \"M44.7,-61.6C55.7,-52,61.7,-38.4,64.4,-24.9C67.1,-11.4,66.5,2,62.3,14.5C58.2,27,50.6,38.6,40.8,49.2C31,59.8,19,69.3,5.3,71.5C-8.5,73.7,-17,68.7,-29.2,62.5C-41.3,56.2,-57.1,48.7,-65.3,36.2C-73.6,23.6,-74.3,6.1,-68.9,-8.1C-63.5,-22.3,-52,-33.3,-40.3,-43.7C-28.6,-54,-16.8,-63.6,-2.9,-61.3C11,-59,22,-44.9,44.7,-61.6Z\",\n    \"M62.1,-47.5C75.2,-32.4,78.7,-8.5,75.7,13.8C72.7,36.1,63.3,56.7,47.3,65.8C31.3,74.9,8.8,72.5,-11.8,66.2C-32.5,60,-51.2,49.8,-61.6,34.5C-72,19.1,-74.1,-1.5,-66.9,-17.5C-59.7,-33.5,-43.3,-44.8,-27.7,-58.2C-12.2,-71.6,2.5,-87.2,20.1,-87.4C37.8,-87.6,58.3,-72.5,62.1,-47.5Z\",\n  ],\n  heart: [\n    \"M60.83,17.18c8-8.35,13.62-15.57,26-17C110-2.46,131.27,21.26,119.57,44.61c-3.33,6.65-10.11,14.56-17.61,22.32-8.23,8.52-17.34,16.87-23.72,23.2l-17.4,17.26L46.46,93.55C29.16,76.89,1,55.92,0,29.94-.63,11.74,13.73.08,30.25.29c14.76.2,21,7.54,30.58,16.89Z\",\n  ],\n  star: [\n    \"M63.09,1.11l16,39.1l42.14,3.13c0.98,0.07,1.72,0.92,1.65,1.9c-0.04,0.52-0.3,0.98-0.68,1.28L90,73.79l10.04,41.05 c0.23,0.95-0.36,1.92-1.31,2.15c-0.5,0.12-1,0.02-1.39-0.24l-35.9-22.21L25.5,116.77c-0.84,0.52-1.93,0.26-2.45-0.58 c-0.26-0.42-0.32-0.91-0.22-1.35l0,0l10.04-41.05L0.63,46.48c-0.75-0.63-0.84-1.76-0.21-2.51c0.32-0.38,0.77-0.59,1.23-0.63v0 l42.14-3.13l16-39.1c0.37-0.91,1.41-1.35,2.31-0.98C62.57,0.32,62.91,0.68,63.09,1.11L63.09,1.11L63.09,1.11z M64.1,39.66 l5.71,13.96l15.05,1.12c0.27,0.02,0.52,0.08,0.76,0.17l29.73-8.43l-37.62-2.8l0-0.01c-0.65-0.05-1.26-0.45-1.52-1.1L63.16,10.66 l0.3,28.08C63.74,39,63.96,39.31,64.1,39.66L64.1,39.66L64.1,39.66z M111.1,51.25l-23.95,6.79c-0.15,0.52-0.47,0.97-0.88,1.29 l-11.45,9.7l3.59,14.67c0.07,0.29,0.09,0.58,0.06,0.86l15.86,21.9L86.3,73.65c-0.2-0.66,0-1.4,0.56-1.87L111.1,51.25L111.1,51.25z M92.21,109.39l-16.3-22.51c-0.51,0-0.99-0.15-1.4-0.42L63.6,79.7v11.17c0,0.25-0.05,0.49-0.15,0.71L92.21,109.39L92.21,109.39z M60.18,91.13c-0.01-0.08-0.02-0.17-0.02-0.25V79.51l-11.28,6.98c-0.34,0.21-0.71,0.33-1.09,0.37L30.65,109.4L60.18,91.13 L60.18,91.13z M28.53,106.54l16.49-21.68c-0.08-0.38-0.08-0.78,0.01-1.15l0,0l3.59-14.67L37.1,59.27c-0.43-0.36-0.7-0.83-0.83-1.33 L8.71,48.66l27.31,23.12l0,0c0.5,0.42,0.74,1.1,0.58,1.78L28.53,106.54L28.53,106.54z M12,46.15l25.65,8.65 c0.08,0.03,0.16,0.06,0.23,0.1c0.22-0.08,0.46-0.13,0.7-0.15l0,0l15.06-1.12l5.71-13.96c0.16-0.39,0.4-0.71,0.69-0.97l-0.3-28.05 l-13.01,31.8c-0.21,0.68-0.82,1.19-1.58,1.25L12,46.15L12,46.15z M60.1,44.59l-4.7,11.48l-16.64,1.24l12.74,10.79l-3.97,16.21 l0.61-0.38l2.88-1.78l10.7-6.62l4.71,2.92l9.11,5.64l0.37,0.23l-3.97-16.21l12.74-10.79l-0.26-0.02v0l-16.38-1.22l-4.51-11.03v0 l-1.81-4.42L60.1,44.59L60.1,44.59z\",\n  ],\n  bear: [\n    \"M101.1,19.08c-0.82,0.09-1.56-0.51-1.64-1.33c-0.09-0.82,0.51-1.56,1.33-1.64c0.8-0.09,1.6-0.06,2.4,0.07 c0.78,0.13,1.56,0.37,2.34,0.71c0.76,0.33,1.1,1.2,0.78,1.96c-0.33,0.76-1.2,1.1-1.96,0.78c-0.55-0.24-1.1-0.4-1.65-0.49 C102.16,19.04,101.63,19.03,101.1,19.08L101.1,19.08z M115.43,17.02c-1.16,0.44-1.55,1.27-1.31,3.62c0.24,2.36,0.36,4.57,2.91,5.48 c0.22,0.08,0.45,0.14,0.69,0.19c-1.2,0.84-2.7,1.21-4.31,1.6c-0.73,0.18-1.47,0.36-2.27,0.6c-0.06,0.01-0.12,0.03-0.18,0.06 L80.61,40.06c0.04-1.42,0-2.75-0.15-3.92c-0.13-1.02-0.31-1.98-0.55-2.89c-0.24-0.92-0.54-1.8-0.89-2.63 c-0.32-0.76-1.2-1.12-1.96-0.8c-0.76,0.32-1.12,1.2-0.8,1.96c0.29,0.7,0.54,1.44,0.75,2.22c0.21,0.8,0.37,1.64,0.48,2.51 c0.18,1.4,0.18,3.08,0.06,4.91c-0.33,0.4-0.44,0.96-0.24,1.47c0.03,0.08,0.06,0.15,0.1,0.22c-0.48,4.95-1.68,10.79-2.7,15.77 c-0.47,2.29-0.9,4.42-1.19,6.02l0,0c-0.01,0.07-0.02,0.15-0.02,0.23c-0.03,1.32,0.03,2.48,0.2,3.49c0.18,1.1,0.48,2.03,0.9,2.78 c0.88,1.55,2.13,1.94,3.4,2.34c0.83,0.26,1.68,0.53,2.06,1.46c0.06,0.15,0.08,0.31,0.05,0.47c-0.03,0.19-0.12,0.4-0.27,0.63 c-2.4,1.55-4.8,2.45-7.03,2.67c-2.19,0.22-4.23-0.21-5.95-1.33c-2.04-1.33-3.14-2.87-3.76-4.6c-0.65-1.84-0.8-3.98-0.91-6.34 l-0.1-2.09c0-0.04,0-0.08,0-0.12c-0.22-2.8-1.08-4.6-2.35-5.76c-0.84-0.77-1.82-1.22-2.88-1.48c0.18-0.74,0.33-1.45,0.43-2.16 c0.18-1.24,0.25-2.43,0.19-3.6c-0.09-1.7-0.43-3.31-1.04-4.85c-0.6-1.52-1.47-3-2.6-4.45c-0.51-0.65-1.45-0.77-2.1-0.26 c-0.65,0.51-0.77,1.45-0.26,2.1c0.94,1.21,1.67,2.43,2.17,3.71c0.37,0.94,0.62,1.91,0.75,2.9c-4.52,2.23-7.53,3.49-10.63,4.3 c-0.64,0.17-1.29,0.31-1.96,0.45c-0.21,0-0.41,0.04-0.61,0.12c-1.71,0.31-3.59,0.55-5.86,0.78c1.43-1.71,2.58-3.59,3.44-5.65 c1.79-4.31,2.29-9.37,1.4-15.24c-0.12-0.82-0.89-1.38-1.7-1.26c-0.82,0.12-1.38,0.89-1.26,1.7c0.81,5.32,0.38,9.85-1.2,13.65 c-1.2,2.88-3.06,5.36-5.56,7.47c-0.05,0.04-0.09,0.07-0.14,0.11c-0.72,0.6-1.49,1.17-2.31,1.71c-0.12,0.07-0.23,0.16-0.33,0.26 c-1.23,1.31-2.31,2.69-3.23,4.16c-0.9,1.45-1.64,2.98-2.2,4.62c-0.11,0.26-0.15,0.56-0.09,0.86c0.36,1.83,1.1,3.1,2.15,3.88 c1.03,0.77,2.29,1.03,3.72,0.88c1.26,0.22,2.07,0.88,2.38,1.64c0.12,0.29,0.16,0.6,0.12,0.91c-0.04,0.29-0.15,0.59-0.35,0.85 c-0.45,0.59-1.29,1.05-2.59,1.2h-3.18c-0.07,0-0.13,0-0.19,0.01H14.08L7.02,64.93c-0.14-1.3-0.04-2.35,0.26-3.21 c0.29-0.86,0.79-1.55,1.43-2.12l0,0c0.18-0.17,0.33-0.38,0.41-0.63c0.71-2.14,0.99-4.78,0.83-7.92c-0.15-3.02-0.71-6.54-1.66-10.53 c-0.03-0.18-0.1-0.36-0.21-0.53c-0.44-0.7-1.36-0.91-2.06-0.47c-1.23,0.77-2.04,1.06-2.4,0.84c-0.43-0.27-0.64-1.27-0.63-3.05 l0-0.01c0.18-4.42,1.2-8.16,2.91-11.32c1.71-3.15,4.12-5.75,7.09-7.89v0c0.04-0.03,0.08-0.06,0.12-0.09 c3.87-3.42,8.86-6,14.87-7.78c6.08-1.8,13.2-2.78,21.29-3.01c0.25,0.01,0.51-0.05,0.75-0.18c4.59-2.49,8.94-4.27,12.58-4 c3.39,0.25,6.28,2.44,8.34,7.82c0.29,0.77,1.16,1.16,1.93,0.87c0.77-0.29,1.16-1.16,0.87-1.93c-0.24-0.64-0.5-1.24-0.77-1.8 l15.8,1.51c0.76,0.11,1.5-0.38,1.67-1.15c0.43-1.9,1.56-3.26,2.89-3.95c0.69-0.36,1.43-0.54,2.14-0.52 c0.68,0.02,1.36,0.22,1.95,0.63c1.04,0.71,1.85,2.08,2.12,4.23h0c0.07,0.58,0.48,1.09,1.08,1.26c3.44,0.99,6.61,2.15,9.38,3.55 C112.04,14.55,113.86,15.71,115.43,17.02L115.43,17.02z M71.43,5.23c0.29-0.23,0.66-0.35,1.06-0.31L87.92,6.4 c0.81-2.16,2.31-3.76,4.04-4.66c1.13-0.59,2.37-0.89,3.6-0.86c1.25,0.03,2.49,0.4,3.56,1.14c1.52,1.04,2.73,2.8,3.24,5.35 c3.25,0.98,6.28,2.12,8.99,3.49c2.97,1.5,5.56,3.28,7.67,5.4c1.85,1.38,2.98,2.86,3.51,4.38c0.61,1.77,0.4,3.51-0.5,5.18 c-1.9,3.54-4.73,4.23-7.91,5c-0.7,0.17-1.43,0.35-2.12,0.55L80.4,43.33c-0.5,5.15-1.71,11.09-2.75,16.15 c-0.43,2.09-0.82,4.02-1.15,5.85c-0.02,1.08,0.04,2.02,0.16,2.82c0.12,0.74,0.3,1.34,0.55,1.77c0.3,0.52,0.99,0.74,1.69,0.96 c1.49,0.47,3.03,0.95,3.94,3.19c0.28,0.68,0.35,1.4,0.21,2.15c-0.12,0.66-0.41,1.32-0.88,1.98c-0.11,0.17-0.25,0.31-0.43,0.43 c-2.89,1.91-5.84,3.03-8.64,3.31c-2.87,0.29-5.56-0.3-7.87-1.8c-2.68-1.75-4.13-3.79-4.95-6.11c-0.78-2.21-0.95-4.59-1.08-7.19 l-0.1-2.08l0-0.05c-0.15-1.94-0.65-3.1-1.38-3.77c-0.7-0.64-1.7-0.89-2.84-0.97c-0.12-0.01-0.25-0.03-0.37-0.07 c-0.79-0.25-1.23-1.08-0.98-1.87c0.37-1.18,0.63-2.3,0.79-3.37c0.03-0.23,0.06-0.46,0.09-0.69c-3.99,1.92-6.86,3.08-9.9,3.86 c-0.67,0.17-1.34,0.33-2.03,0.47l-4.88,5.14c-0.28,0.34-0.5,0.59-0.7,0.83c-1.22,1.4-2.19,2.53-2.04,4.5 c0.03,0.34,0.1,0.66,0.21,0.95c0.02,0.06,0.05,0.12,0.08,0.18c2.88-0.22,5.13,0.91,6.4,2.5c0.7,0.87,1.11,1.88,1.2,2.9 c0.09,1.07-0.17,2.14-0.83,3.09c-1.17,1.66-3.59,2.85-7.53,2.64v0h-6.73c-0.6,0.05-1.24,0.06-1.94,0.01H13.18v0 c-0.53,0-1.05-0.29-1.32-0.79L4.25,66.1l0,0c-0.08-0.16-0.14-0.33-0.17-0.51c-0.26-1.92-0.1-3.5,0.35-4.83 c0.43-1.24,1.1-2.25,1.95-3.09c0.51-1.73,0.7-3.89,0.57-6.49c-0.12-2.39-0.51-5.13-1.18-8.2c-1.48,0.57-2.74,0.55-3.77-0.11 c-1.35-0.86-2.03-2.7-2.01-5.6c0-0.03,0-0.07,0-0.1c0.2-4.92,1.34-9.09,3.26-12.63c1.92-3.53,4.61-6.44,7.92-8.85 c4.21-3.7,9.55-6.46,15.95-8.36c6.25-1.85,13.53-2.87,21.78-3.12c4.92-2.64,9.67-4.5,13.9-4.19C66.15,0.28,69.09,1.81,71.43,5.23 L71.43,5.23z M31.93,59.63c-0.69,0.56-1.42,1.09-2.19,1.6c-1.05,1.13-1.97,2.31-2.75,3.57c-0.73,1.18-1.34,2.41-1.81,3.7 c0.21,0.84,0.52,1.39,0.92,1.68c0.41,0.3,0.99,0.39,1.71,0.3c0.15-0.02,0.3-0.03,0.45-0.01c2.53,0.35,4.21,1.8,4.91,3.51 c0.32,0.77,0.43,1.59,0.34,2.39c-0.07,0.58-0.25,1.16-0.54,1.7h1.43v0c0.03,0,0.06,0,0.09,0c2.79,0.16,4.36-0.47,4.99-1.37 c0.24-0.33,0.33-0.72,0.29-1.11c-0.04-0.44-0.23-0.89-0.55-1.28c-0.81-1-2.38-1.68-4.48-1.32c-0.55,0.13-1.15-0.05-1.52-0.52 c-0.4-0.5-0.72-1.05-0.94-1.62c-0.23-0.58-0.36-1.18-0.41-1.82c-0.25-3.2,1.09-4.75,2.77-6.68c0.24-0.27,0.49-0.56,0.67-0.78 c0.04-0.05,0.08-0.1,0.12-0.14l2.23-2.34C35.98,59.27,34.11,59.44,31.93,59.63L31.93,59.63z\",\n  ],\n  music: [\n    \"M11.7,0h6.19V2.07c15.49,3.54,17.26,11,8.28,22.7.95-11.63-.22-14.12-8.28-14.66v29.4a3.62,3.62,0,0,1,0,.47c0,3.82-4,7.61-8.95,8.47S0,46.9,0,43.07c0-5.21,7.16-9.74,11.7-8.14V0ZM103,0h6.19V2.07c15.48,3.54,17.25,11,8.27,22.7,1-11.63-.22-14.12-8.27-14.66v29.4c0,.15,0,.31,0,.47,0,3.82-4,7.61-9,8.47s-9-1.55-9-5.38c0-5.21,7.16-9.74,11.7-8.14V0ZM70.51,68.64a11.26,11.26,0,0,1,4.5.08V37.13L41.58,46.72q0,18.66,0,37.3c0,5.82-6.42,10.06-11.57,11-6.39,1.1-11.58-2-11.58-7S23.65,78.18,30,77.08a13,13,0,0,1,6.49.42V32.34l43.54-9.91V73.31c.48,5.4-5,9.49-9.56,10.28-5.34.92-9.66-1.68-9.66-5.81s4.32-8.22,9.66-9.14Z\",\n  ],\n  trophy: [\n    \"M89.43,45.54c3.38-1,6.39-2.61,8.84-4.65c4.02-3.35,6.5-7.9,6.5-12.87c0-2.78-0.77-5.42-2.15-7.78l0.01,0 c-0.62-1.06-1.36-2.07-2.21-3.01c-0.44,6.2-1.96,12.08-4.34,17.43C94.32,38.61,92.07,42.27,89.43,45.54L89.43,45.54L89.43,45.54z M56.4,91.21l2.83,7.93l8.42,0.24l-6.67,5.14l2.37,8.08l-6.95-4.76l-6.95,4.76l2.37-8.08l-6.67-5.14l8.42-0.24L56.4,91.21 L56.4,91.21z M20.63,80.94h71.55v41.94H20.63V80.94L20.63,80.94z M60.73,60.07v6.55h0.49v4.58l-12.42,0v-4.58l0.49,0v-6.59 c-7.57-1.17-14.49-4.59-20.14-9.59l-0.67,1.85c-7.79-0.13-14.84-2.82-19.95-7.08C3.26,40.83,0,34.75,0,28.01 c0-3.8,1.05-7.4,2.93-10.63l-0.01-0.01c1.9-3.27,4.66-6.13,8.03-8.37L14,6.97l-3.53,0V0h88.61v6.97h-2.82L99.31,9 c3.36,2.24,6.11,5.1,8.02,8.37h0.01c1.87,3.22,2.92,6.82,2.92,10.64c0,6.74-3.26,12.81-8.54,17.21 c-5.11,4.26-12.16,6.95-19.95,7.08l-0.67-1.86C75.39,55.5,68.39,58.94,60.73,60.07L60.73,60.07L60.73,60.07z M42.16,75.79h25.71 v4.58H42.16V75.79L42.16,75.79z M46.08,71.2h17.87v4.58H46.08V71.2L46.08,71.2z M11.99,40.89c2.45,2.05,5.47,3.65,8.85,4.66 c-2.64-3.27-4.89-6.93-6.66-10.9c-2.38-5.34-3.9-11.23-4.34-17.43c-0.83,0.92-1.57,1.94-2.2,3.01l-0.01,0 c-1.37,2.35-2.14,5-2.14,7.78C5.49,32.99,7.97,37.53,11.99,40.89L11.99,40.89z\",\n  ],\n  ring: [\n    \"M10.94,31.01c-0.05-0.25-0.03-0.51,0.05-0.74l3.48-11.06c0.16-0.53,0.6-0.9,1.1-1l18.7-5.39c0.5-0.14,1.01-0.01,1.37,0.31 l0,0l8.52,7.54c0.15,0.11,0.27,0.26,0.37,0.42c0.23,0.39,0.26,0.86,0.1,1.28l-4.76,13.26c6.32-0.29,12.49,1,18.02,3.61 c2.1-2.01,4.44-3.8,6.99-5.31c2.73-1.61,5.72-2.92,8.93-3.84c10.19-2.94,20.61-1.47,29.2,3.28c8.6,4.75,15.39,12.79,18.33,22.99 c2.94,10.19,1.47,20.61-3.28,29.2c-4.75,8.6-12.79,15.39-22.99,18.33c-9.32,2.69-18.82,1.69-26.95-2.13 c-2.11,2.02-4.46,3.81-7.02,5.32c-2.72,1.61-5.7,2.9-8.9,3.83c-10.19,2.94-20.61,1.47-29.2-3.28c-8.6-4.75-15.39-12.79-18.33-22.99 c-2.94-10.19-1.47-20.61,3.28-29.2c3.4-6.16,8.48-11.39,14.84-14.94l-11.31-8.6C11.19,31.68,11,31.35,10.94,31.01L10.94,31.01z M6.69,31.24l-0.16,0.05C6.13,29.94,5.29,28.92,4,28.2c-1.29-0.71-2.61-0.88-3.95-0.49L0,27.55c1.34-0.39,2.37-1.23,3.09-2.52 c0.71-1.3,0.88-2.61,0.49-3.95l0.16-0.05c0.39,1.34,1.23,2.37,2.52,3.09c1.29,0.71,2.61,0.88,3.95,0.49l0.05,0.16 c-1.34,0.39-2.37,1.23-3.09,2.52C6.46,28.58,6.3,29.9,6.69,31.24L6.69,31.24L6.69,31.24z M17.03,12l-0.16,0.05 c-0.39-1.34-1.23-2.37-2.52-3.09c-1.29-0.71-2.61-0.88-3.95-0.49l-0.05-0.16c1.34-0.39,2.37-1.23,3.09-2.52 c0.71-1.3,0.88-2.61,0.49-3.95l0.16-0.05c0.39,1.34,1.23,2.37,2.52,3.09s2.61,0.88,3.95,0.49l0.05,0.16 c-1.34,0.39-2.37,1.23-3.09,2.52C16.8,9.34,16.64,10.66,17.03,12L17.03,12L17.03,12z M40.83,10.22l-0.16,0.05 c-0.39-1.34-1.23-2.37-2.52-3.09c-1.29-0.71-2.61-0.88-3.95-0.49l-0.05-0.16c1.34-0.39,2.37-1.23,3.09-2.52 c0.71-1.3,0.88-2.61,0.49-3.95L37.89,0c0.39,1.34,1.23,2.37,2.52,3.09c1.29,0.71,2.61,0.88,3.95,0.49l0.05,0.16 c-1.34,0.39-2.37,1.23-3.09,2.52C40.61,7.55,40.45,8.87,40.83,10.22L40.83,10.22L40.83,10.22z M60.66,40.68 c2.31,1.32,4.48,2.88,6.48,4.66c1.26-1,2.61-1.91,4.05-2.69c1.74-0.95,3.61-1.72,5.6-2.29c7.36-2.12,14.88-1.06,21.09,2.37 c6.21,3.43,11.12,9.24,13.24,16.6c2.12,7.36,1.06,14.88-2.37,21.09c-3.43,6.21-9.24,11.12-16.6,13.24 c-3.08,0.89-6.19,1.22-9.22,1.05c-3.14-0.17-6.2-0.89-9.05-2.07c-1.79-0.74-3.5-1.67-5.09-2.75c-1.59-1.09-3.06-2.34-4.41-3.74 c-1.52-1.59-2.86-3.37-3.97-5.32c-1.08-1.88-1.95-3.93-2.59-6.14c-0.93-3.24-1.25-6.5-1.03-9.67c0.22-3.05,0.94-6.01,2.11-8.77 c-1.59-1.55-3.38-2.87-5.31-3.94c-0.37-0.21-0.75-0.4-1.14-0.59c-1.77,3.7-2.9,7.71-3.31,11.86c-0.42,4.34-0.05,8.82,1.23,13.26 c2.71,9.41,8.99,16.83,16.94,21.22c7.95,4.39,17.58,5.75,26.99,3.04c9.41-2.71,16.83-8.99,21.22-16.94 c4.39-7.95,5.75-17.58,3.04-26.99c-2.71-9.41-8.99-16.83-16.94-21.22c-7.95-4.39-17.58-5.75-26.99-3.04 c-2.94,0.85-5.7,2.05-8.24,3.55C64.32,37.68,62.4,39.1,60.66,40.68L60.66,40.68z M69.27,47.38c4.2,4.36,7.43,9.78,9.22,16 c1.39,4.82,1.79,9.68,1.33,14.38c-0.44,4.43-1.64,8.71-3.51,12.67c2.16,0.75,4.44,1.21,6.78,1.34c2.72,0.15,5.5-0.14,8.26-0.94 c6.58-1.9,11.76-6.28,14.83-11.84c3.07-5.56,4.02-12.29,2.13-18.88c-1.9-6.58-6.28-11.76-11.84-14.84 c-5.56-3.07-12.29-4.02-18.88-2.13c-1.77,0.51-3.44,1.2-5,2.05C71.41,45.85,70.3,46.58,69.27,47.38L69.27,47.38z M73.6,89.3 c1.76-3.69,2.9-7.69,3.3-11.83c0.43-4.35,0.05-8.85-1.23-13.3c-2.71-9.41-8.99-16.83-16.94-21.22c-7.07-3.9-15.46-5.41-23.84-3.8 c-1.04,0.23-2.05,0.48-3.05,0.77c-1.34,0.39-2.67,0.84-3.96,1.34c-7.58,3.16-13.59,8.75-17.36,15.58 c-4.39,7.95-5.75,17.58-3.04,26.99c2.71,9.41,8.99,16.83,16.94,21.22c7.95,4.39,17.58,5.75,26.99,3.04 c2.93-0.85,5.68-2.05,8.22-3.54c2.08-1.23,4.01-2.65,5.76-4.23c-2.31-1.32-4.48-2.88-6.48-4.66c-1.27,1.02-2.63,1.93-4.07,2.71 c-1.72,0.93-3.58,1.7-5.57,2.27c-7.36,2.12-14.88,1.06-21.09-2.37c-6.21-3.43-11.12-9.24-13.24-16.6l0-0.01 c-2.12-7.36-1.06-14.87,2.37-21.08c3.43-6.21,9.24-11.12,16.6-13.24l0.01,0c7.36-2.12,14.87-1.06,21.08,2.37 c6.21,3.43,11.12,9.24,13.24,16.6l0,0c0.94,3.25,1.25,6.53,1.02,9.7c-0.22,3.03-0.94,5.98-2.11,8.73c1.02,0.99,2.12,1.89,3.29,2.69 C71.45,88.15,72.51,88.77,73.6,89.3L73.6,89.3z M56.78,93.63c-4.2-4.36-7.43-9.78-9.22-16c-1.38-4.8-1.79-9.65-1.34-14.34 c0.43-4.45,1.64-8.74,3.51-12.71c-4.64-1.62-9.81-1.88-14.9-0.45c-0.08,0.03-0.17,0.06-0.26,0.08c-6.52,1.92-11.66,6.28-14.71,11.8 c-3.05,5.52-4.01,12.2-2.16,18.74c0.03,0.08,0.06,0.17,0.08,0.26c1.92,6.52,6.28,11.66,11.8,14.71c5.56,3.07,12.29,4.02,18.88,2.13 c1.74-0.5,3.41-1.19,4.98-2.04C54.63,95.17,55.74,94.44,56.78,93.63L56.78,93.63z M61.09,58.68c-0.75,2.09-1.22,4.29-1.38,6.54 c-0.2,2.85,0.08,5.77,0.91,8.66c0.56,1.94,1.35,3.78,2.33,5.48c0.6,1.05,1.28,2.05,2.01,2.98c0.74-2.08,1.21-4.26,1.37-6.5 c0.21-2.81-0.06-5.7-0.87-8.56c-0.03-0.08-0.06-0.17-0.08-0.26C64.47,63.89,62.99,61.09,61.09,58.68L61.09,58.68z M27.02,38.48 c1.27-0.52,2.58-0.98,3.93-1.37c1.03-0.3,2.05-0.55,3.08-0.75c0.89-0.2,1.78-0.38,2.68-0.53l4.24-11.81l-25.38,7.32l10.11,7.68 C26.11,38.83,26.56,38.65,27.02,38.48L27.02,38.48z M14.59,28.58l25.72-7.42l-6-5.31l-17.27,4.98L14.59,28.58L14.59,28.58z\",\n  ],\n};\n\n/** Decorative background SVG shapes for the {@link Card} preset. */\nexport default function Blobs({ seed, shape = \"blob\" }: BlobProps) {\n  const blobShapes = shapePaths[shape];\n\n  const selectedBlobs = useMemo(\n    () => [\n      { shape: blobShapes[Math.floor(Math.random() * blobShapes.length)], top: -Math.random() * 50, left: Math.random(), opacity: 20 },\n      { shape: blobShapes[Math.floor(Math.random() * blobShapes.length)], top: Math.random() * 50, left: 50 + Math.random() * 20, opacity: 30 },\n    ],\n    // Recompute only when the seed (per-card) changes.\n    [seed, shape],\n  );\n\n  return (\n    <div>\n      {selectedBlobs.map((blob, index) => (\n        <svg\n          key={index}\n          className=\"rc-card__blob\"\n          viewBox=\"0 0 300 200\"\n          xmlns=\"http://www.w3.org/2000/svg\"\n          style={{ top: `${blob.top}%`, left: `${blob.left}%`, opacity: `${blob.opacity}%` }}\n          aria-hidden=\"true\"\n        >\n          <path\n            fill=\"var(--rc-blob-fill, #ffffff)\"\n            d={blob.shape}\n            transform=\"translate(100 100)\"\n          />\n        </svg>\n      ))}\n    </div>\n  );\n}\n","import { motion } from \"framer-motion\";\nimport { useMemo } from \"react\";\nimport Blobs, { type ShapeOption } from \"./Blobs\";\nimport { ArrowUpRight } from \"./icons\";\nimport type { CSSProperties } from \"react\";\n\n/** Visual design presets for {@link Card}. */\nexport type CardVariant =\n  | \"gradient\"\n  | \"glass\"\n  | \"solid\"\n  | \"outline\"\n  | \"dark\"\n  | \"minimal\";\n\nexport interface CardProps {\n  title: string;\n  category: string;\n  description: string;\n  /** Palette start colour (exposed to CSS as `--rc-from`). */\n  from: string;\n  /** Palette end colour (exposed to CSS as `--rc-to`). */\n  to: string;\n  shape: ShapeOption;\n  /** Visual design. Default `\"gradient\"`. */\n  variant?: CardVariant;\n}\n\n/**\n * The opinionated card. Its palette is published as CSS custom properties\n * (`--rc-from` / `--rc-to`) so each `variant` class can build backgrounds,\n * borders, and accents from the same two colours. Styling lives in\n * `presets.css` — no Tailwind required.\n */\nexport default function Card({\n  title,\n  category,\n  description,\n  from,\n  to,\n  shape,\n  variant = \"gradient\",\n}: CardProps) {\n  const seed = useMemo(() => Math.random(), []);\n\n  return (\n    <motion.div\n      className={`rc-card rc-card--${variant}`}\n      style={{ \"--rc-from\": from, \"--rc-to\": to } as CSSProperties}\n      whileTap={{ scale: 0.95 }}\n      whileHover={{ scale: 1.05, boxShadow: \"10px 8px 20px rgba(0, 0, 0, 0.35)\" }}\n      transition={{ type: \"spring\", stiffness: 200 }}\n    >\n      <Blobs seed={seed} shape={shape} />\n\n      <span className=\"rc-card__tag\">{category}</span>\n      <h2 className=\"rc-card__title\">{title}</h2>\n\n      <div className=\"rc-card__progress\">\n        <div className=\"rc-card__progress-fill\" />\n      </div>\n\n      <p className=\"rc-card__desc\">{description}</p>\n\n      <motion.button\n        type=\"button\"\n        className=\"rc-card__button\"\n        whileHover={{ scale: 1.2 }}\n        aria-hidden=\"true\"\n        tabIndex={-1}\n      >\n        <ArrowUpRight size={18} />\n      </motion.button>\n    </motion.div>\n  );\n}\n","/**\n * Return a new array shuffled with the Fisher–Yates algorithm.\n *\n * Replaces the legacy `array.sort(() => Math.random() - 0.5)` approach, which\n * produces a biased, non-uniform ordering (and, with a constant comparator,\n * no shuffle at all).\n */\nexport function shuffle<T>(input: readonly T[]): T[] {\n  const result = input.slice();\n  for (let i = result.length - 1; i > 0; i--) {\n    const j = Math.floor(Math.random() * (i + 1));\n    [result[i], result[j]] = [result[j], result[i]];\n  }\n  return result;\n}\n","import { shuffle } from \"../utils/shuffle\";\n\n/** A two-stop colour palette used to render a card in any design variant. */\nexport interface Palette {\n  from: string;\n  to: string;\n}\n\n/** Built-in colour palettes (the 1.x gradient set, as colour pairs). */\nexport const palettes: Palette[] = [\n  { from: \"#4A90E2\", to: \"#5F9EE7\" },\n  { from: \"#D35400\", to: \"#E67E22\" },\n  { from: \"#8E44AD\", to: \"#9B59B6\" },\n  { from: \"#27AE60\", to: \"#2ECC71\" },\n  { from: \"#F39C12\", to: \"#F1C40F\" },\n  { from: \"#E74C3C\", to: \"#EC7063\" },\n  { from: \"#9B59B6\", to: \"#8E44AD\" },\n  { from: \"#16A085\", to: \"#1ABC9C\" },\n  { from: \"#00C9A7\", to: \"#02AABD\" },\n  { from: \"#FF4E50\", to: \"#FC913A\" },\n  { from: \"#6A0572\", to: \"#AB83A1\" },\n  { from: \"#D946EF\", to: \"#F472B6\" },\n  { from: \"#8E2DE2\", to: \"#4A00E0\" },\n  { from: \"#FFD700\", to: \"#FFA500\" },\n];\n\n/** Build a CSS gradient string from a palette. */\nexport function gradientCss({ from, to }: Palette): string {\n  return `linear-gradient(135deg, ${from}, ${to})`;\n}\n\n/** Palettes (optionally shuffled) for assigning one per card. */\nexport function getPalettes(randomBackground: boolean): Palette[] {\n  return randomBackground ? shuffle(palettes) : palettes.slice();\n}\n\n/** Gradient strings, optionally shuffled (convenience over {@link getPalettes}). */\nexport function getBackground(randomBackground: boolean): string[] {\n  return getPalettes(randomBackground).map(gradientCss);\n}\n\n/** All palettes as ready-made gradient strings. */\nexport const gradients = palettes.map(gradientCss);\n","import { useRef } from \"react\";\nimport { ChevronLeft, ChevronRight } from \"./icons\";\nimport Card, { type CardVariant } from \"./Card\";\nimport { getPalettes } from \"./gradient\";\nimport type { ShapeOption } from \"./Blobs\";\n\nexport interface CardSliderSlide {\n  title: string;\n  category: string;\n  description: string;\n  /** When provided, the card becomes a link opened on click. */\n  link?: string;\n}\n\nexport interface CardSliderProps {\n  slides: CardSliderSlide[];\n  shape: ShapeOption;\n  /** Randomise palette assignment across cards. Default `false`. */\n  randomBackground?: boolean;\n  /** Card design preset. Default `\"gradient\"`. */\n  variant?: CardVariant;\n}\n\n/**\n * Card preset — a horizontal, native-scroll row of decorated cards. Also the\n * default export of the package. Styling is framework-free (no Tailwind), and\n * the `variant` prop selects a card design.\n */\nexport default function CardSlider({\n  slides,\n  shape,\n  randomBackground = false,\n  variant = \"gradient\",\n}: CardSliderProps) {\n  const sliderRef = useRef<HTMLDivElement>(null);\n\n  const scrollByHalf = (direction: 1 | -1) => {\n    const el = sliderRef.current;\n    if (el) {\n      el.scrollBy({ left: (direction * el.clientWidth) / 2, behavior: \"smooth\" });\n    }\n  };\n\n  const palettes = getPalettes(randomBackground);\n\n  return (\n    <div className=\"rc-cardslider\">\n      <div className=\"rc-cardslider__overlay rc-cardslider__overlay--left\" />\n      <div className=\"rc-cardslider__overlay rc-cardslider__overlay--right\" />\n\n      <button\n        type=\"button\"\n        className=\"rc-cardslider__arrow rc-cardslider__arrow--left\"\n        aria-label=\"Scroll left\"\n        onClick={() => scrollByHalf(-1)}\n      >\n        <ChevronLeft />\n      </button>\n\n      <div ref={sliderRef} className=\"rc-cardslider__track\">\n        {slides.map((slide, index) => {\n          const palette = palettes[index % palettes.length];\n          const card = (\n            <Card\n              title={slide.title}\n              category={slide.category}\n              description={slide.description}\n              from={palette.from}\n              to={palette.to}\n              shape={shape}\n              variant={variant}\n            />\n          );\n          return (\n            <div className=\"rc-cardslider__item\" key={slide.title + index}>\n              {slide.link ? (\n                <a href={slide.link} target=\"_blank\" rel=\"noreferrer\">\n                  {card}\n                </a>\n              ) : (\n                card\n              )}\n            </div>\n          );\n        })}\n      </div>\n\n      <button\n        type=\"button\"\n        className=\"rc-cardslider__arrow rc-cardslider__arrow--right\"\n        aria-label=\"Scroll right\"\n        onClick={() => scrollByHalf(1)}\n      >\n        <ChevronRight />\n      </button>\n    </div>\n  );\n}\n","import { createContext, useContext } from \"react\";\nimport type { CarouselApi } from \"../core/types\";\n\n/**\n * Holds the live {@link CarouselApi} for the compound components. `null` is the\n * default so we can detect (and loudly reject) usage outside `<Carousel>`.\n */\nexport const CarouselContext = createContext<CarouselApi | null>(null);\n\n/**\n * Read the carousel API from context. Throws a descriptive error when a part\n * (`Carousel.Track`, `Carousel.Slide`, …) is rendered outside a `<Carousel>`.\n */\nexport function useCarouselContext(): CarouselApi {\n  const api = useContext(CarouselContext);\n  if (api === null) {\n    throw new Error(\n      \"Carousel compound components must be rendered inside <Carousel>. \" +\n        \"Did you forget to wrap them, or import the part from a different package version?\",\n    );\n  }\n  return api;\n}\n","/** Constrain `value` to the inclusive `[min, max]` range. */\nexport function clamp(value: number, min: number, max: number): number {\n  if (max < min) return min;\n  return Math.min(Math.max(value, min), max);\n}\n\n/**\n * Wrap `index` into `[0, count)` using modulo arithmetic that also handles\n * negative inputs (e.g. wrapping past the first slide to the last).\n */\nexport function wrapIndex(index: number, count: number): number {\n  if (count <= 0) return 0;\n  return ((index % count) + count) % count;\n}\n","import type { CarouselAction, CarouselState } from \"./types\";\nimport { clamp, wrapIndex } from \"../utils/clamp\";\n\n/**\n * Pure reducer for carousel navigation. All index math (clamping, looping,\n * step size) lives here so the behaviour is deterministic and unit-testable\n * in isolation from React.\n */\nexport function carouselReducer(\n  state: CarouselState,\n  action: CarouselAction,\n): CarouselState {\n  // Furthest index that still keeps a full view on screen. With\n  // slidesPerView > 1 this stops the last slide being scrolled past alone.\n  const maxIndex = Math.max(0, state.slidesCount - state.slidesPerView);\n\n  switch (action.type) {\n    case \"NEXT\": {\n      const target = state.activeIndex + action.step;\n      const next = action.loop\n        ? wrapIndex(target, state.slidesCount)\n        : clamp(target, 0, maxIndex);\n      return next === state.activeIndex ? state : { ...state, activeIndex: next };\n    }\n    case \"PREV\": {\n      const target = state.activeIndex - action.step;\n      const next = action.loop\n        ? wrapIndex(target, state.slidesCount)\n        : clamp(target, 0, maxIndex);\n      return next === state.activeIndex ? state : { ...state, activeIndex: next };\n    }\n    case \"GO_TO\": {\n      const next = clamp(action.index, 0, maxIndex);\n      return next === state.activeIndex ? state : { ...state, activeIndex: next };\n    }\n    case \"SET_COUNT\": {\n      if (action.slidesCount === state.slidesCount) return state;\n      // Keep the active slide valid if the collection shrank.\n      const activeIndex = clamp(state.activeIndex, 0, Math.max(0, action.slidesCount - state.slidesPerView));\n      return { ...state, slidesCount: action.slidesCount, activeIndex };\n    }\n    case \"SET_SLIDES_PER_VIEW\": {\n      if (action.slidesPerView === state.slidesPerView) return state;\n      const activeIndex = clamp(state.activeIndex, 0, Math.max(0, state.slidesCount - action.slidesPerView));\n      return { ...state, slidesPerView: action.slidesPerView, activeIndex };\n    }\n    case \"SET_PLAYING\": {\n      return action.isPlaying === state.isPlaying\n        ? state\n        : { ...state, isPlaying: action.isPlaying };\n    }\n    default:\n      return state;\n  }\n}\n","import { useEffect, useRef } from \"react\";\n\ninterface AutoplayParams {\n  /** Whether the timer should be active. */\n  enabled: boolean;\n  /** Tick interval in milliseconds. */\n  interval: number;\n  /** Called on each tick (typically advances to the next slide). */\n  onTick: () => void;\n  /** Region element; autoplay pauses while it is hovered or focused. */\n  rootRef: React.RefObject<HTMLElement | null>;\n}\n\n/**\n * Drives autoplay. Pauses on pointer hover, keyboard focus, and tab\n * backgrounding, and never starts when the user prefers reduced motion.\n */\nexport function useAutoplay({ enabled, interval, onTick, rootRef }: AutoplayParams): void {\n  // Keep the latest callback without re-arming the interval every render.\n  const onTickRef = useRef(onTick);\n  onTickRef.current = onTick;\n\n  useEffect(() => {\n    if (!enabled || typeof window === \"undefined\") return;\n\n    const prefersReducedMotion = window.matchMedia?.(\n      \"(prefers-reduced-motion: reduce)\",\n    ).matches;\n    if (prefersReducedMotion) return;\n\n    const root = rootRef.current;\n    let paused = false;\n    const pause = () => (paused = true);\n    const resume = () => (paused = false);\n\n    const timer = window.setInterval(() => {\n      if (!paused && !document.hidden) onTickRef.current();\n    }, interval);\n\n    root?.addEventListener(\"pointerenter\", pause);\n    root?.addEventListener(\"pointerleave\", resume);\n    root?.addEventListener(\"focusin\", pause);\n    root?.addEventListener(\"focusout\", resume);\n\n    return () => {\n      window.clearInterval(timer);\n      root?.removeEventListener(\"pointerenter\", pause);\n      root?.removeEventListener(\"pointerleave\", resume);\n      root?.removeEventListener(\"focusin\", pause);\n      root?.removeEventListener(\"focusout\", resume);\n    };\n  }, [enabled, interval, rootRef]);\n}\n","import { useEffect, useState } from \"react\";\nimport type { ResponsiveOptions } from \"./types\";\n\ntype Resolved = Required<ResponsiveOptions>;\n\n/**\n * Resolves the active responsive config from a `breakpoints` map keyed by\n * min-width (px) — the largest matching breakpoint wins, merged over `base`.\n *\n * SSR-safe: returns `base` on the server and until mounted, then reconciles on\n * the client and updates on viewport resize. When no breakpoints are given it\n * returns `base` unchanged (no listeners attached).\n */\nexport function useBreakpoints(\n  base: Resolved,\n  breakpoints?: Record<number, ResponsiveOptions>,\n): Resolved {\n  const [resolved, setResolved] = useState<Resolved>(base);\n\n  // Stable dependency for an object that's often passed inline.\n  const bpKey = breakpoints ? JSON.stringify(breakpoints) : \"\";\n\n  useEffect(() => {\n    if (!breakpoints || typeof window === \"undefined\") return;\n\n    const resolve = (): Resolved => {\n      const next = { ...base };\n      for (const width of Object.keys(breakpoints).map(Number).sort((a, b) => a - b)) {\n        if (window.matchMedia(`(min-width: ${width}px)`).matches) {\n          const over = breakpoints[width];\n          if (over.slidesPerView != null) next.slidesPerView = over.slidesPerView;\n          if (over.slidesToScroll != null) next.slidesToScroll = over.slidesToScroll;\n        }\n      }\n      return next;\n    };\n\n    const update = () => setResolved(resolve());\n    update();\n    window.addEventListener(\"resize\", update);\n    return () => window.removeEventListener(\"resize\", update);\n    // base is read via its primitive fields; bpKey captures breakpoints.\n  }, [bpKey, base.slidesPerView, base.slidesToScroll]);\n\n  return breakpoints ? resolved : base;\n}\n","import { useEffect, useRef } from \"react\";\nimport type { Orientation } from \"./types\";\n\ninterface KeyboardParams {\n  rootRef: React.RefObject<HTMLElement | null>;\n  orientation: Orientation;\n  onPrev: () => void;\n  onNext: () => void;\n  onFirst: () => void;\n  onLast: () => void;\n}\n\n/**\n * Wires arrow-key navigation (plus Home/End) onto the region element. The axis\n * of the relevant arrow keys follows {@link Orientation}.\n */\nexport function useKeyboard({\n  rootRef,\n  orientation,\n  onPrev,\n  onNext,\n  onFirst,\n  onLast,\n}: KeyboardParams): void {\n  // Stash handlers in a ref so the listener is attached only once per element.\n  const handlers = useRef({ onPrev, onNext, onFirst, onLast });\n  handlers.current = { onPrev, onNext, onFirst, onLast };\n\n  useEffect(() => {\n    const root = rootRef.current;\n    if (!root) return;\n\n    const prevKey = orientation === \"horizontal\" ? \"ArrowLeft\" : \"ArrowUp\";\n    const nextKey = orientation === \"horizontal\" ? \"ArrowRight\" : \"ArrowDown\";\n\n    const onKeyDown = (event: KeyboardEvent) => {\n      const { onPrev, onNext, onFirst, onLast } = handlers.current;\n      switch (event.key) {\n        case prevKey:\n          event.preventDefault();\n          onPrev();\n          break;\n        case nextKey:\n          event.preventDefault();\n          onNext();\n          break;\n        case \"Home\":\n          event.preventDefault();\n          onFirst();\n          break;\n        case \"End\":\n          event.preventDefault();\n          onLast();\n          break;\n      }\n    };\n\n    root.addEventListener(\"keydown\", onKeyDown);\n    return () => root.removeEventListener(\"keydown\", onKeyDown);\n  }, [rootRef, orientation]);\n}\n","import { useEffect, useRef } from \"react\";\nimport type { DragInfo, Orientation } from \"./types\";\n\ninterface SwipeParams {\n  trackRef: React.RefObject<HTMLElement | null>;\n  orientation: Orientation;\n  onPrev: () => void;\n  onNext: () => void;\n  /** Minimum drag distance (px) to commit a slide change. Default `50`. */\n  threshold?: number;\n  /** Called when a pointer swipe begins. */\n  onSwipeStart?: () => void;\n  /** Called when a pointer swipe ends, with the resolved drag info. */\n  onSwipeEnd?: (info: DragInfo) => void;\n}\n\n/**\n * Pointer-based swipe/drag navigation.\n *\n * While dragging we write the live offset to the `--rc-drag` custom property\n * and flag `data-dragging` on the track, so the content follows the finger\n * without React re-renders (the stylesheet disables the transition during a\n * drag). On release we reset the offset and, if the threshold was crossed,\n * commit a navigation — React then animates to the new index.\n */\nexport function useSwipe({\n  trackRef,\n  orientation,\n  onPrev,\n  onNext,\n  threshold = 50,\n  onSwipeStart,\n  onSwipeEnd,\n}: SwipeParams): void {\n  const handlers = useRef({ onPrev, onNext, onSwipeStart, onSwipeEnd });\n  handlers.current = { onPrev, onNext, onSwipeStart, onSwipeEnd };\n\n  useEffect(() => {\n    const track = trackRef.current;\n    if (!track) return;\n\n    const isHorizontal = orientation === \"horizontal\";\n    let startPos = 0;\n    let delta = 0;\n    let dragging = false;\n    let frame = 0;\n\n    const axis = (event: PointerEvent) => (isHorizontal ? event.clientX : event.clientY);\n\n    const paint = () => {\n      frame = 0;\n      track.style.setProperty(\"--rc-drag\", `${delta}px`);\n    };\n\n    const onPointerDown = (event: PointerEvent) => {\n      // Ignore secondary buttons; only start on primary pointer.\n      if (event.button !== 0) return;\n      dragging = true;\n      startPos = axis(event);\n      delta = 0;\n      track.setAttribute(\"data-dragging\", \"true\");\n      track.setPointerCapture(event.pointerId);\n      handlers.current.onSwipeStart?.();\n    };\n\n    const onPointerMove = (event: PointerEvent) => {\n      if (!dragging) return;\n      delta = axis(event) - startPos;\n      if (!frame) frame = window.requestAnimationFrame(paint);\n    };\n\n    const onPointerUp = (event: PointerEvent) => {\n      if (!dragging) return;\n      dragging = false;\n      if (frame) window.cancelAnimationFrame(frame), (frame = 0);\n      track.removeAttribute(\"data-dragging\");\n      track.style.setProperty(\"--rc-drag\", \"0px\");\n      if (track.hasPointerCapture(event.pointerId)) {\n        track.releasePointerCapture(event.pointerId);\n      }\n      const committed = Math.abs(delta) > threshold;\n      // Dragging the content toward the start reveals the next slide.\n      handlers.current.onSwipeEnd?.({\n        delta,\n        direction: committed ? (delta < 0 ? \"next\" : \"prev\") : \"none\",\n      });\n      if (committed) {\n        delta < 0 ? handlers.current.onNext() : handlers.current.onPrev();\n      }\n    };\n\n    track.addEventListener(\"pointerdown\", onPointerDown);\n    track.addEventListener(\"pointermove\", onPointerMove);\n    track.addEventListener(\"pointerup\", onPointerUp);\n    track.addEventListener(\"pointercancel\", onPointerUp);\n\n    return () => {\n      if (frame) window.cancelAnimationFrame(frame);\n      track.removeEventListener(\"pointerdown\", onPointerDown);\n      track.removeEventListener(\"pointermove\", onPointerMove);\n      track.removeEventListener(\"pointerup\", onPointerUp);\n      track.removeEventListener(\"pointercancel\", onPointerUp);\n    };\n  }, [trackRef, orientation, threshold]);\n}\n","import { useCallback, useEffect, useMemo, useReducer, useRef } from \"react\";\nimport { carouselReducer } from \"./carouselReducer\";\nimport { useAutoplay } from \"./useAutoplay\";\nimport { useBreakpoints } from \"./useBreakpoints\";\nimport { useKeyboard } from \"./useKeyboard\";\nimport { useSwipe } from \"./useSwipe\";\nimport { clamp } from \"../utils/clamp\";\nimport type { CarouselApi, CarouselOptions, CarouselState } from \"./types\";\n\n/**\n * The headless heart of the library: owns navigation state and composes the\n * keyboard, swipe, and autoplay behaviours into a single {@link CarouselApi}.\n *\n * Use it directly to build a fully custom UI, or let `<Carousel>` call it and\n * expose the result through context to the compound components.\n */\nexport function useCarousel(options: CarouselOptions): CarouselApi {\n  const {\n    slidesCount,\n    initialIndex = 0,\n    loop = false,\n    autoplay = false,\n    autoplayInterval = 4000,\n    slidesToScroll = 1,\n    slidesPerView = 1,\n    breakpoints,\n    orientation = \"horizontal\",\n    onIndexChange,\n    onSettle,\n    onSwipeStart,\n    onSwipeEnd,\n  } = options;\n\n  // Resolve responsive slidesPerView / slidesToScroll for the current viewport.\n  const effective = useBreakpoints({ slidesPerView, slidesToScroll }, breakpoints);\n\n  const trackRef = useRef<HTMLDivElement>(null);\n  const rootRef = useRef<HTMLDivElement>(null);\n\n  const [state, dispatch] = useReducer(\n    carouselReducer,\n    undefined,\n    (): CarouselState => ({\n      activeIndex: clamp(initialIndex, 0, Math.max(0, slidesCount - slidesPerView)),\n      slidesCount,\n      slidesPerView,\n      isPlaying: autoplay,\n    }),\n  );\n\n  // Keep the active index valid when the slide collection changes size.\n  useEffect(() => {\n    dispatch({ type: \"SET_COUNT\", slidesCount });\n  }, [slidesCount]);\n\n  // Sync the resolved slides-per-view (breakpoint changes) into the reducer.\n  useEffect(() => {\n    dispatch({ type: \"SET_SLIDES_PER_VIEW\", slidesPerView: effective.slidesPerView });\n  }, [effective.slidesPerView]);\n\n  // Notify consumers of index changes without re-arming on every render.\n  const onIndexChangeRef = useRef(onIndexChange);\n  onIndexChangeRef.current = onIndexChange;\n  useEffect(() => {\n    onIndexChangeRef.current?.(state.activeIndex);\n  }, [state.activeIndex]);\n\n  // Fire onSettle when the track's transform transition finishes.\n  const onSettleRef = useRef(onSettle);\n  onSettleRef.current = onSettle;\n  const indexRef = useRef(state.activeIndex);\n  indexRef.current = state.activeIndex;\n  useEffect(() => {\n    const track = trackRef.current;\n    if (!track) return;\n    const handle = (event: TransitionEvent) => {\n      if (event.target === track && event.propertyName === \"transform\") {\n        onSettleRef.current?.(indexRef.current);\n      }\n    };\n    track.addEventListener(\"transitionend\", handle);\n    return () => track.removeEventListener(\"transitionend\", handle);\n  }, []);\n\n  const step = effective.slidesToScroll;\n  const next = useCallback(\n    () => dispatch({ type: \"NEXT\", step, loop }),\n    [step, loop],\n  );\n  const prev = useCallback(\n    () => dispatch({ type: \"PREV\", step, loop }),\n    [step, loop],\n  );\n  const goTo = useCallback((index: number) => dispatch({ type: \"GO_TO\", index }), []);\n  const play = useCallback(() => dispatch({ type: \"SET_PLAYING\", isPlaying: true }), []);\n  const pause = useCallback(() => dispatch({ type: \"SET_PLAYING\", isPlaying: false }), []);\n  const first = useCallback(() => dispatch({ type: \"GO_TO\", index: 0 }), []);\n  const last = useCallback(\n    () => dispatch({ type: \"GO_TO\", index: slidesCount - 1 }),\n    [slidesCount],\n  );\n\n  useKeyboard({ rootRef, orientation, onPrev: prev, onNext: next, onFirst: first, onLast: last });\n  useSwipe({ trackRef, orientation, onPrev: prev, onNext: next, onSwipeStart, onSwipeEnd });\n  useAutoplay({\n    enabled: state.isPlaying,\n    interval: autoplayInterval,\n    onTick: next,\n    rootRef,\n  });\n\n  const maxIndex = Math.max(0, state.slidesCount - state.slidesPerView);\n  const canPrev = loop || state.activeIndex > 0;\n  const canNext = loop || state.activeIndex < maxIndex;\n\n  return useMemo<CarouselApi>(\n    () => ({\n      activeIndex: state.activeIndex,\n      slidesCount: state.slidesCount,\n      slidesPerView: state.slidesPerView,\n      isPlaying: state.isPlaying,\n      canPrev,\n      canNext,\n      orientation,\n      next,\n      prev,\n      goTo,\n      play,\n      pause,\n      trackRef,\n      rootRef,\n    }),\n    [state, canPrev, canNext, orientation, next, prev, goTo, play, pause],\n  );\n}\n","/** Join truthy class-name fragments into a single string. */\nexport function cx(...parts: Array<string | false | null | undefined>): string {\n  return parts.filter(Boolean).join(\" \");\n}\n","import { forwardRef, useImperativeHandle } from \"react\";\nimport { CarouselContext } from \"../context/CarouselContext\";\nimport { useCarousel } from \"../core/useCarousel\";\nimport { cx } from \"../utils/cx\";\nimport type { CSSProperties } from \"react\";\nimport type { CarouselHandle, CarouselOptions } from \"../core/types\";\n\nexport interface CarouselProps\n  extends CarouselOptions,\n    Omit<React.HTMLAttributes<HTMLDivElement>, \"onChange\"> {\n  /** Accessible name for the carousel region. Default `\"Carousel\"`. */\n  label?: string;\n  children: React.ReactNode;\n}\n\n/**\n * Root of the compound carousel. Owns navigation state via {@link useCarousel}\n * and exposes it to `Carousel.Track`, `Carousel.Slide`, `Carousel.Button`, and\n * `Carousel.Dots` through context.\n *\n * A `ref` exposes an imperative {@link CarouselHandle} (`next`/`prev`/`goTo`/\n * `play`/`pause`) for driving the carousel from a parent.\n */\nexport const Carousel = forwardRef<CarouselHandle, CarouselProps>(function Carousel(\n  {\n    slidesCount,\n    initialIndex,\n    loop,\n    autoplay,\n    autoplayInterval,\n    slidesToScroll,\n    slidesPerView,\n    breakpoints,\n    orientation = \"horizontal\",\n    onIndexChange,\n    onSettle,\n    onSwipeStart,\n    onSwipeEnd,\n    label = \"Carousel\",\n    className,\n    style,\n    children,\n    ...rest\n  },\n  ref,\n) {\n  const api = useCarousel({\n    slidesCount,\n    initialIndex,\n    loop,\n    autoplay,\n    autoplayInterval,\n    slidesToScroll,\n    slidesPerView,\n    breakpoints,\n    orientation,\n    onIndexChange,\n    onSettle,\n    onSwipeStart,\n    onSwipeEnd,\n  });\n\n  useImperativeHandle(\n    ref,\n    (): CarouselHandle => ({\n      activeIndex: api.activeIndex,\n      canPrev: api.canPrev,\n      canNext: api.canNext,\n      next: api.next,\n      prev: api.prev,\n      goTo: api.goTo,\n      play: api.play,\n      pause: api.pause,\n    }),\n    [api],\n  );\n\n  // Size each slide to fit `slidesPerView` per view. The explicit value wins\n  // over any themed --rc-slide-size; other consumer style props are preserved.\n  const sizedStyle: CSSProperties | undefined =\n    api.slidesPerView > 1\n      ? ({\n          ...style,\n          \"--rc-slide-size\": `calc((100% - ${api.slidesPerView - 1} * var(--rc-slide-gap)) / ${api.slidesPerView})`,\n        } as CSSProperties)\n      : style;\n\n  return (\n    <CarouselContext.Provider value={api}>\n      <div\n        ref={api.rootRef}\n        className={cx(\"rc-root\", className)}\n        role=\"region\"\n        aria-roledescription=\"carousel\"\n        aria-label={label}\n        data-orientation={orientation}\n        tabIndex={0}\n        style={sizedStyle}\n        {...rest}\n      >\n        {children}\n      </div>\n    </CarouselContext.Provider>\n  );\n});\n","import { useCarouselContext } from \"../context/CarouselContext\";\nimport { cx } from \"../utils/cx\";\nimport type { CSSProperties } from \"react\";\n\nexport interface TrackProps extends React.HTMLAttributes<HTMLDivElement> {\n  children: React.ReactNode;\n}\n\n/**\n * The clipping viewport plus the moving track. The track is translated by\n * `--rc-active-index` (set here) combined with the live `--rc-drag` offset that\n * {@link useSwipe} writes during a gesture — all resolved in CSS.\n */\nexport function Track({ children, className, style, ...rest }: TrackProps) {\n  const { activeIndex, isPlaying, orientation, trackRef } = useCarouselContext();\n\n  return (\n    <div\n      className=\"rc-viewport\"\n      data-orientation={orientation}\n      // Pause announcements while autoplaying; announce on manual navigation.\n      aria-live={isPlaying ? \"off\" : \"polite\"}\n    >\n      <div\n        ref={trackRef}\n        className={cx(\"rc-track\", className)}\n        data-orientation={orientation}\n        style={{ \"--rc-active-index\": activeIndex, ...style } as CSSProperties}\n        {...rest}\n      >\n        {children}\n      </div>\n    </div>\n  );\n}\n","import { useCarouselContext } from \"../context/CarouselContext\";\nimport { cx } from \"../utils/cx\";\n\nexport interface SlideProps extends React.HTMLAttributes<HTMLDivElement> {\n  /**\n   * Zero-based position of this slide. Required so the slide can label itself\n   * for assistive tech and report whether it is the active one.\n   */\n  index: number;\n  children: React.ReactNode;\n}\n\n/** A single slide. Sizing is governed by the `--rc-slide-size` CSS variable. */\nexport function Slide({ index, children, className, ...rest }: SlideProps) {\n  const { activeIndex, slidesCount } = useCarouselContext();\n  const isActive = index === activeIndex;\n\n  return (\n    <div\n      className={cx(\"rc-slide\", isActive && \"rc-slide--active\", className)}\n      role=\"group\"\n      aria-roledescription=\"slide\"\n      aria-label={`${index + 1} of ${slidesCount}`}\n      aria-hidden={!isActive || undefined}\n      data-active={isActive || undefined}\n      {...rest}\n    >\n      {children}\n    </div>\n  );\n}\n","import { useCarouselContext } from \"../context/CarouselContext\";\nimport { cx } from \"../utils/cx\";\n\nexport type ButtonDirection = \"prev\" | \"next\" | \"first\" | \"last\";\n\nexport interface ButtonProps\n  extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, \"onClick\"> {\n  /** Navigation action this button controls. */\n  dir: ButtonDirection;\n}\n\nconst DEFAULT_LABELS: Record<ButtonDirection, string> = {\n  prev: \"Previous slide\",\n  next: \"Next slide\",\n  first: \"First slide\",\n  last: \"Last slide\",\n};\n\n/** Inline chevron icon so the core ships with zero icon dependencies. */\nfunction Icon({ dir }: { dir: ButtonDirection }) {\n  // first/last render a doubled chevron to read as \"jump to end\".\n  const lines: Record<ButtonDirection, string[]> = {\n    prev: [\"15 18 9 12 15 6\"],\n    next: [\"9 18 15 12 9 6\"],\n    first: [\"18 18 12 12 18 6\", \"11 18 5 12 11 6\"],\n    last: [\"13 18 19 12 13 6\", \"6 18 12 12 6 6\"],\n  };\n  return (\n    <svg\n      className=\"rc-button__icon\"\n      viewBox=\"0 0 24 24\"\n      width=\"1em\"\n      height=\"1em\"\n      fill=\"none\"\n      stroke=\"currentColor\"\n      strokeWidth={2}\n      strokeLinecap=\"round\"\n      strokeLinejoin=\"round\"\n      aria-hidden=\"true\"\n      focusable=\"false\"\n    >\n      {lines[dir].map((points) => (\n        <polyline key={points} points={points} />\n      ))}\n    </svg>\n  );\n}\n\n/**\n * Navigation control. `prev`/`next` step one (overlaying the track edges);\n * `first`/`last` jump to the ends. Disables itself at the bounds when the\n * carousel is not looping, and falls back to a built-in icon + ARIA label.\n */\nexport function Button({\n  dir,\n  className,\n  children,\n  disabled,\n  \"aria-label\": ariaLabel,\n  ...rest\n}: ButtonProps) {\n  const { prev, next, goTo, slidesCount, canPrev, canNext } = useCarouselContext();\n\n  const actions: Record<ButtonDirection, () => void> = {\n    prev,\n    next,\n    first: () => goTo(0),\n    last: () => goTo(slidesCount - 1),\n  };\n  // prev/first are blocked at the start; next/last at the end.\n  const enabled = dir === \"prev\" || dir === \"first\" ? canPrev : canNext;\n\n  return (\n    <button\n      type=\"button\"\n      className={cx(\"rc-button\", `rc-button--${dir}`, className)}\n      aria-label={ariaLabel ?? DEFAULT_LABELS[dir]}\n      onClick={actions[dir]}\n      disabled={disabled ?? !enabled}\n      {...rest}\n    >\n      {children ?? <Icon dir={dir} />}\n    </button>\n  );\n}\n","import { useCarouselContext } from \"../context/CarouselContext\";\nimport { cx } from \"../utils/cx\";\n\nexport interface DotsProps extends React.HTMLAttributes<HTMLDivElement> {\n  /** Accessible label for a given dot. Default `\"Go to slide N\"`. */\n  dotLabel?: (index: number) => string;\n}\n\n/** Clickable pagination indicators, one per slide. */\nexport function Dots({ className, dotLabel, ...rest }: DotsProps) {\n  const { slidesCount, activeIndex, goTo } = useCarouselContext();\n\n  return (\n    <div className={cx(\"rc-dots\", className)} role=\"tablist\" {...rest}>\n      {Array.from({ length: slidesCount }, (_, index) => {\n        const isActive = index === activeIndex;\n        return (\n          <button\n            key={index}\n            type=\"button\"\n            role=\"tab\"\n            aria-selected={isActive}\n            aria-current={isActive || undefined}\n            aria-label={dotLabel ? dotLabel(index) : `Go to slide ${index + 1}`}\n            className={cx(\"rc-dot\", isActive && \"rc-dot--active\")}\n            onClick={() => goTo(index)}\n          />\n        );\n      })}\n    </div>\n  );\n}\n","import { useCarouselContext } from \"../context/CarouselContext\";\nimport { cx } from \"../utils/cx\";\n\nexport interface PlayPauseProps\n  extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, \"onClick\"> {}\n\n/** Inline play (triangle) / pause (bars) icon — no icon dependency. */\nfunction Icon({ playing }: { playing: boolean }) {\n  return (\n    <svg\n      className=\"rc-button__icon\"\n      viewBox=\"0 0 24 24\"\n      width=\"1em\"\n      height=\"1em\"\n      fill=\"currentColor\"\n      aria-hidden=\"true\"\n      focusable=\"false\"\n    >\n      {playing ? (\n        <>\n          <rect x=\"6\" y=\"5\" width=\"4\" height=\"14\" rx=\"1\" />\n          <rect x=\"14\" y=\"5\" width=\"4\" height=\"14\" rx=\"1\" />\n        </>\n      ) : (\n        <polygon points=\"7 4 20 12 7 20 7 4\" />\n      )}\n    </svg>\n  );\n}\n\n/**\n * Toggles autoplay. Reflects state via `aria-pressed` and swaps the label\n * between \"Play\"/\"Pause\".\n */\nexport function PlayPause({ className, children, \"aria-label\": ariaLabel, ...rest }: PlayPauseProps) {\n  const { isPlaying, play, pause } = useCarouselContext();\n\n  return (\n    <button\n      type=\"button\"\n      className={cx(\"rc-button\", \"rc-button--playpause\", className)}\n      aria-label={ariaLabel ?? (isPlaying ? \"Pause\" : \"Play\")}\n      aria-pressed={isPlaying}\n      onClick={isPlaying ? pause : play}\n      {...rest}\n    >\n      {children ?? <Icon playing={isPlaying} />}\n    </button>\n  );\n}\n","import { Carousel as CarouselRoot } from \"./Carousel\";\nimport { Track } from \"./Track\";\nimport { Slide } from \"./Slide\";\nimport { Button } from \"./Button\";\nimport { Dots } from \"./Dots\";\nimport { PlayPause } from \"./PlayPause\";\n\n/**\n * The compound carousel. Use the namespaced parts for the common case:\n *\n * ```tsx\n * <Carousel slidesCount={items.length} loop autoplay>\n *   <Carousel.Button dir=\"prev\" />\n *   <Carousel.Track>\n *     {items.map((item, i) => (\n *       <Carousel.Slide key={item.id} index={i}>{item.content}</Carousel.Slide>\n *     ))}\n *   </Carousel.Track>\n *   <Carousel.Button dir=\"next\" />\n *   <div className=\"rc-controls\">\n *     <Carousel.Button dir=\"first\" />\n *     <Carousel.PlayPause />\n *     <Carousel.Button dir=\"last\" />\n *   </div>\n *   <Carousel.Dots />\n * </Carousel>\n * ```\n *\n * The parts are also exported individually for tree-shaking or custom layouts.\n */\nexport const Carousel = Object.assign(CarouselRoot, {\n  Track,\n  Slide,\n  Button,\n  Dots,\n  PlayPause,\n});\n\nexport { Track, Slide, Button, Dots, PlayPause };\nexport type { CarouselProps } from \"./Carousel\";\nexport type { TrackProps } from \"./Track\";\nexport type { SlideProps } from \"./Slide\";\nexport type { ButtonProps, ButtonDirection } from \"./Button\";\nexport type { DotsProps } from \"./Dots\";\nexport type { PlayPauseProps } from \"./PlayPause\";\n","import { Carousel } from \"../components\";\nimport { cx } from \"../utils/cx\";\nimport type { CSSProperties, ReactNode } from \"react\";\n\nexport interface ImageSlide {\n  /** Image URL (used as a full-bleed background). */\n  src: string;\n  /** Accessible description of the image. */\n  alt?: string;\n  /** Optional overlay caption, centered on the slide. */\n  caption?: ReactNode;\n  /** When set, the slide links out. */\n  href?: string;\n}\n\nexport interface ImageSliderProps {\n  slides: ImageSlide[];\n  loop?: boolean;\n  autoplay?: boolean;\n  autoplayInterval?: number;\n  /** Slide height (px number or any CSS length). Default `460`. */\n  height?: number | string;\n  showArrows?: boolean;\n  showDots?: boolean;\n  className?: string;\n  label?: string;\n}\n\n/**\n * Image preset — a full-bleed image carousel with an optional centered caption,\n * thin overlaid arrows, and overlaid pagination dots. Built on the headless\n * `Carousel`, so keyboard / swipe / autoplay come for free.\n *\n * Needs both stylesheets: `react-carousel-latest/styles.css` and\n * `react-carousel-latest/presets.css`.\n */\nexport default function ImageSlider({\n  slides,\n  loop = true,\n  autoplay = false,\n  autoplayInterval,\n  height = 460,\n  showArrows = true,\n  showDots = true,\n  className,\n  label = \"Image carousel\",\n}: ImageSliderProps) {\n  return (\n    <Carousel\n      slidesCount={slides.length}\n      loop={loop}\n      autoplay={autoplay}\n      autoplayInterval={autoplayInterval}\n      label={label}\n      className={cx(\"rc-image\", className)}\n      style={\n        {\n          \"--rc-image-height\": typeof height === \"number\" ? `${height}px` : height,\n        } as CSSProperties\n      }\n    >\n      {showArrows && <Carousel.Button dir=\"prev\" />}\n      <Carousel.Track>\n        {slides.map((slide, i) => {\n          const inner = (\n            <div\n              className=\"rc-image__slide\"\n              style={{ backgroundImage: `url(${slide.src})` }}\n              role=\"img\"\n              aria-label={slide.alt}\n            >\n              {slide.caption != null && <div className=\"rc-image__caption\">{slide.caption}</div>}\n            </div>\n          );\n          return (\n            <Carousel.Slide key={i} index={i}>\n              {slide.href ? (\n                <a className=\"rc-image__link\" href={slide.href} target=\"_blank\" rel=\"noreferrer\">\n                  {inner}\n                </a>\n              ) : (\n                inner\n              )}\n            </Carousel.Slide>\n          );\n        })}\n      </Carousel.Track>\n      {showArrows && <Carousel.Button dir=\"next\" />}\n      {showDots && <Carousel.Dots />}\n    </Carousel>\n  );\n}\n","import { CarouselContext } from \"../context/CarouselContext\";\nimport { useCarousel } from \"../core/useCarousel\";\nimport { Button } from \"../components/Button\";\nimport { Dots } from \"../components/Dots\";\nimport { cx } from \"../utils/cx\";\nimport type { CSSProperties, ReactNode } from \"react\";\n\nexport interface SlicerSlide {\n  src: string;\n  alt?: string;\n  caption?: ReactNode;\n}\n\nexport interface SlicerSliderProps {\n  slides: SlicerSlide[];\n  loop?: boolean;\n  autoplay?: boolean;\n  autoplayInterval?: number;\n  /** Slide height in px (the slice maths needs a fixed height). Default `460`. */\n  height?: number;\n  /** Number of horizontal strips the image is sliced into. Default `6`. */\n  slices?: number;\n  showArrows?: boolean;\n  showDots?: boolean;\n  className?: string;\n  label?: string;\n}\n\n/**\n * Slicer preset — transitions between slides with a staggered horizontal-slice\n * wipe. Uses the headless `useCarousel` hook directly (the transition isn't a\n * sliding track) and re-exposes it through context so the standard\n * `Carousel.Button` / `Carousel.Dots` work unchanged.\n *\n * Needs both stylesheets: `react-carousel-latest/styles.css` and\n * `react-carousel-latest/presets.css`.\n */\nexport default function SlicerSlider({\n  slides,\n  loop = true,\n  autoplay = false,\n  autoplayInterval,\n  height = 460,\n  slices = 6,\n  showArrows = true,\n  showDots = true,\n  className,\n  label = \"Slicer carousel\",\n}: SlicerSliderProps) {\n  const api = useCarousel({ slidesCount: slides.length, loop, autoplay, autoplayInterval });\n  const strips = Array.from({ length: slices }, (_, k) => k);\n\n  return (\n    <CarouselContext.Provider value={api}>\n      <div\n        ref={api.rootRef}\n        className={cx(\"rc-slicer\", className)}\n        role=\"region\"\n        aria-roledescription=\"carousel\"\n        aria-label={label}\n        tabIndex={0}\n        style={\n          { \"--rc-image-height\": `${height}px`, \"--rc-slices\": slices } as CSSProperties\n        }\n      >\n        <div ref={api.trackRef} className=\"rc-slicer__viewport\">\n          {slides.map((slide, i) => {\n            const active = i === api.activeIndex;\n            return (\n              <div\n                key={i}\n                className=\"rc-slicer__slide\"\n                data-active={active || undefined}\n                aria-hidden={!active || undefined}\n                role=\"group\"\n                aria-roledescription=\"slide\"\n                aria-label={`${i + 1} of ${slides.length}`}\n              >\n                {strips.map((k) => (\n                  <span\n                    key={k}\n                    className=\"rc-slicer__strip\"\n                    style={{ \"--k\": k, backgroundImage: `url(${slide.src})` } as CSSProperties}\n                  />\n                ))}\n                {slide.caption != null && <div className=\"rc-slicer__caption\">{slide.caption}</div>}\n              </div>\n            );\n          })}\n        </div>\n\n        {showArrows && <Button dir=\"prev\" />}\n        {showArrows && <Button dir=\"next\" />}\n        {showDots && <Dots />}\n      </div>\n    </CarouselContext.Provider>\n  );\n}\n","import { useEffect, useState } from \"react\";\nimport { CarouselContext } from \"../context/CarouselContext\";\nimport { useCarousel } from \"../core/useCarousel\";\nimport { Button } from \"../components/Button\";\nimport { Dots } from \"../components/Dots\";\nimport { cx } from \"../utils/cx\";\nimport type { CSSProperties, ReactNode } from \"react\";\n\nexport interface CubeSlide {\n  src: string;\n  alt?: string;\n  caption?: ReactNode;\n}\n\nexport interface CubeSliderProps {\n  slides: CubeSlide[];\n  loop?: boolean;\n  autoplay?: boolean;\n  autoplayInterval?: number;\n  /** Slide height in px. Default `460`. */\n  height?: number;\n  /** Spin on the vertical axis (rotateX) instead of horizontal (rotateY). */\n  vertical?: boolean;\n  /** Darken the side faces + cast a soft ground shadow. Default `true`. */\n  shadow?: boolean;\n  showArrows?: boolean;\n  showDots?: boolean;\n  className?: string;\n  label?: string;\n}\n\n/**\n * Cube preset — slides are the faces of a 3D cube; navigating rotates the cube\n * 90° to the next face. Like {@link SlicerSlider} it drives the headless\n * `useCarousel` directly and re-exposes it through context so the standard\n * `Carousel.Button` / `Carousel.Dots` work unchanged.\n *\n * Each face is transformed by its offset from the active slide\n * (`rotate(offset·90°) translateZ(depth)`); all faces share one transition, so\n * they orbit together as a rigid cube. `depth` is half the rotation-axis size,\n * measured from the viewport so the cube stays responsive.\n *\n * Needs both stylesheets: `react-carousel-latest/styles.css` and\n * `react-carousel-latest/presets.css`.\n */\nexport default function CubeSlider({\n  slides,\n  loop = true,\n  autoplay = false,\n  autoplayInterval,\n  height = 460,\n  vertical = false,\n  shadow = true,\n  showArrows = true,\n  showDots = true,\n  className,\n  label = \"Cube carousel\",\n}: CubeSliderProps) {\n  const api = useCarousel({\n    slidesCount: slides.length,\n    loop,\n    autoplay,\n    autoplayInterval,\n    orientation: vertical ? \"vertical\" : \"horizontal\",\n  });\n  const count = slides.length;\n\n  // translateZ depth = half the rotation-axis extent: width for a horizontal\n  // (rotateY) cube, height for a vertical (rotateX) one. Width is responsive,\n  // so measure the viewport and feed it to CSS as --rc-cube-depth.\n  const [depth, setDepth] = useState(0);\n  useEffect(() => {\n    const el = api.trackRef.current;\n    if (!el) return;\n    const measure = () => setDepth((vertical ? el.clientHeight : el.clientWidth) / 2);\n    measure();\n    if (typeof ResizeObserver === \"undefined\") return;\n    const observer = new ResizeObserver(measure);\n    observer.observe(el);\n    return () => observer.disconnect();\n  }, [api.trackRef, vertical]);\n\n  // Signed distance from the active face, taking the shorter way around a loop\n  // so the wrap-around neighbour is treated as adjacent.\n  const offsetOf = (i: number) => {\n    let off = i - api.activeIndex;\n    if (loop && count > 1) {\n      if (off > count / 2) off -= count;\n      else if (off < -count / 2) off += count;\n    }\n    return off;\n  };\n\n  return (\n    <CarouselContext.Provider value={api}>\n      <div\n        ref={api.rootRef}\n        className={cx(\"rc-cube\", className)}\n        role=\"region\"\n        aria-roledescription=\"carousel\"\n        aria-label={label}\n        tabIndex={0}\n        data-orientation={vertical ? \"vertical\" : \"horizontal\"}\n        data-shadow={shadow || undefined}\n        style={\n          {\n            \"--rc-image-height\": `${height}px`,\n            \"--rc-cube-depth\": `${depth}px`,\n          } as CSSProperties\n        }\n      >\n        <div ref={api.trackRef} className=\"rc-cube__viewport\">\n          <div className=\"rc-cube__cage\">\n            {slides.map((slide, i) => {\n              const off = offsetOf(i);\n              const active = off === 0;\n              return (\n                <div\n                  key={i}\n                  className=\"rc-cube__face\"\n                  data-active={active || undefined}\n                  aria-hidden={!active || undefined}\n                  role=\"group\"\n                  aria-roledescription=\"slide\"\n                  aria-label={`${i + 1} of ${count}`}\n                  style={\n                    {\n                      \"--off\": off,\n                      // Only the active face and its two neighbours form the cube.\n                      visibility: Math.abs(off) <= 1 ? undefined : \"hidden\",\n                      backgroundImage: `url(${slide.src})`,\n                    } as CSSProperties\n                  }\n                >\n                  {slide.caption != null && <div className=\"rc-cube__caption\">{slide.caption}</div>}\n                </div>\n              );\n            })}\n          </div>\n        </div>\n\n        {shadow && <div className=\"rc-cube__shadow\" aria-hidden=\"true\" />}\n        {showArrows && <Button dir=\"prev\" />}\n        {showArrows && <Button dir=\"next\" />}\n        {showDots && <Dots />}\n      </div>\n    </CarouselContext.Provider>\n  );\n}\n"]}