@zero-library/common 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/File/styles.module.less","../src/components/File/AudioPlayer.tsx","../src/utils/theme.ts","../src/components/File/FileIcon.tsx","../src/components/File/VideoPlayer.tsx","../src/components/LazyComponent/index.tsx","../src/components/RenderMarkdown/index.tsx","../src/components/File/MarkdownPreview.tsx","../src/hooks/createValtioContext.tsx","../src/hooks/iframe/iframeRelay.ts","../src/utils/is.ts","../src/hooks/iframe/useIframeRelayBridge.ts","../src/hooks/useDebounce.ts","../src/utils/common.ts","../src/hooks/useDeepEffect.ts","../src/hooks/useRefState.ts","../src/hooks/useSyncInput.ts","../src/hooks/useThrottle.ts","../src/utils/date.ts","../src/utils/local.ts","../src/utils/math.ts","../src/utils/message.ts","../src/utils/session.ts","../src/utils/request.ts","../src/hooks/useWebSocket.ts","../src/components/File/PdfPreview.tsx","../src/components/File/FilePreview.tsx","../src/components/File/FilePreviewDrawer.tsx","../src/components/Iframe/styles.module.less","../src/components/Iframe/index.tsx","../src/components/RenderWrapper/index.tsx","../src/components/UserAvatar/index.tsx"],"names":["nsPreviewImage","nsPreviewPdf","pdfToolbar","nsPreviewVideo","nsPreviewAudio","jsx","jsxs","useMemo","error","useEffect","useRef","useState","useCallback","token","message","password","pageNo","Result","Flex","styles_module_default","iframe"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAA,qBAAA,GAAA;AAAA,EAAC,cAAA,EAAAA,8BAAAA;AAAA,EAYA,YAAA,EAAAC,4BAAAA;AAAA,EAKc,UAAA,EAAAC,0BAAAA;AAAA,EAiBd,cAAA,EAAAC,8BAAAA;AAAA,EAIA,cAAA,EAAAC;AAAA,CAAA;ACjCD,IAAO,mBAAA,GAAQ,CAAC,EAAE,OAAA,EAAQ,KAAa;AACrC,EAAA,4BACG,OAAA,EAAA,EAAM,QAAA,EAAQ,IAAA,EAAC,SAAA,EAAW,sBAAO,cAAA,EAChC,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,QAAA,EAAA,EAAO,GAAA,EAAK,OAAA,EAAS,IAAA,EAAK,YAAA,EAAa,CAAA;AAAA,IAAE;AAAA,GAAA,EAE5C,CAAA;AAEJ;;;ACXA,IAAM,kBAAkB,MAAM;AAC5B,EAAA,MAAM,YAAA,GAAe,IAAI,eAAA,CAAgB,QAAA,CAAS,MAAM,CAAA;AACxD,EAAA,MAAM,UAAA,GAAa,YAAA,CAAa,GAAA,CAAI,YAAY,CAAA,IAAK,SAAA;AACrD,EAAA,IAAI,eAAe,SAAA,EAAW;AAC5B,IAAA,OAAO,SAAA;AAAA,EACT,CAAA,MAAA,IAAW,eAAe,IAAA,EAAM;AAC9B,IAAA,OAAO,SAAA;AAAA,EACT;AACF,CAAA;AAEO,IAAM,iBAAiB,eAAA;AAEvB,IAAM,WAAA,GAA2B;AAAA,EACtC,KAAA,EAAO,EAAE,YAAA,EAAc,cAAA,EAAgB,WAAW,cAAA,EAAe;AAAA,EACjE,MAAA,EAAQ;AACV;ACKA,IAAO,mBAAQ,CAAC,EAAE,MAAA,EAAQ,QAAA,GAAW,IAAG,KAAa;AACnD,EAAA,MAAM,MAAA,GAAS,EAAE,QAAA,EAAU,KAAA,EAAO,cAAA,EAAe;AACjD,EAAA,MAAM,IAAA,GAAO,QAAQ,MAAM;AACzB,IAAA,QAAQ,MAAA,EAAQ,aAAY;AAAG,MAC7B,KAAK,KAAA;AACH,QAAA,uBAAOC,IAAC,gBAAA,EAAA,EAAiB,CAAA;AAAA,MAC3B,KAAK,KAAA;AACH,QAAA,uBAAOA,IAAC,eAAA,EAAA,EAAgB,CAAA;AAAA,MAC1B,KAAK,KAAA;AAAA,MACL,KAAK,MAAA;AACH,QAAA,uBAAOA,IAAC,gBAAA,EAAA,EAAiB,CAAA;AAAA,MAC3B,KAAK,KAAA;AAAA,MACL,KAAK,MAAA;AACH,QAAA,uBAAOA,IAAC,iBAAA,EAAA,EAAkB,CAAA;AAAA,MAC5B,KAAK,KAAA;AACH,QAAA,uBAAOA,IAAC,eAAA,EAAA,EAAgB,CAAA;AAAA,MAC1B,KAAK,KAAA;AAAA,MACL,KAAK,KAAA;AAAA,MACL,KAAK,KAAA;AAAA,MACL,KAAK,KAAA;AACH,QAAA,uBAAOA,IAAC,mBAAA,EAAA,EAAoB,CAAA;AAAA,MAC9B,KAAK,KAAA;AACH,QAAA,uBAAOA,IAAC,oBAAA,EAAA,EAAqB,CAAA;AAAA,MAC/B,KAAK,KAAA;AAAA,MACL,KAAK,MAAA;AACH,QAAA,uBAAOA,IAAC,eAAA,EAAA,EAAgB,CAAA;AAAA,MAC1B,KAAK,KAAA;AACH,QAAA,uBAAOA,IAAC,iBAAA,EAAA,EAAkB,CAAA;AAAA,MAC5B,KAAK,KAAA;AACH,QAAA,uBAAOA,IAAC,eAAA,EAAA,EAAgB,CAAA;AAAA,MAC1B,KAAK,KAAA;AAAA,MACL,KAAK,KAAA;AAAA,MACL,KAAK,IAAA;AACH,QAAA,uBAAOA,IAAC,eAAA,EAAA,EAAgB,CAAA;AAAA,MAC1B,KAAK,SAAA;AACH,QAAA,uBAAOA,GAAAA,CAAC,GAAA,EAAA,EAAE,KAAA,EAAO,MAAA,EAAQ,WAAU,0BAAA,EAA2B,CAAA;AAAA;AAAA,MAChE;AACE,QAAA,uBAAOA,IAAC,mBAAA,EAAA,EAAoB,CAAA;AAAA;AAChC,EACF,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA;AACX,EAAA,uBAAOA,GAAAA,CAAC,MAAA,EAAA,EAAK,KAAA,EAAO,QAAS,QAAA,EAAA,IAAA,EAAK,CAAA;AACpC;ACRA,IAAO,mBAAA,GAAQ,CAAC,EAAE,OAAA,EAAQ,KAAa;AACrC,EAAA,uBACEC,IAAAA,CAAC,OAAA,EAAA,EAAM,UAAQ,IAAA,EAAC,SAAA,EAAW,sBAAO,cAAA,EAChC,QAAA,EAAA;AAAA,oBAAAD,GAAAA,CAAC,QAAA,EAAA,EAAO,GAAA,EAAK,OAAA,EAAS,MAAK,WAAA,EAAY,CAAA;AAAA,IAAE;AAAA,GAAA,EAE3C,CAAA;AAEJ;ACpDA,IAAM,gBAAA,GAAqC;AAAA;AAE3C,CAAA;AASA,IAAO,wBAAQ,CAAC,EAAE,MAAM,gBAAA,EAAkB,GAAG,MAAK,KAAa;AAC7D,EAAA,MAAM,YAAA,GAAeE,QAAQ,MAAM;AACjC,IAAA,OAAO,EAAE,GAAG,gBAAA,EAAkB,GAAG,gBAAA,EAAiB;AAAA,EACpD,CAAA,EAAG,CAAC,gBAAgB,CAAC,CAAA;AACrB,EAAA,MAAM,aAAA,GAAgBA,QAAQ,MAAM;AAClC,IAAA,MAAM,MAAA,GAAS,aAAa,IAAI,CAAA;AAChC,IAAA,OAAO,MAAA,GAAS,IAAA,CAAK,MAAM,CAAA,GAAI,IAAA;AAAA,EACjC,CAAA,EAAG,CAAC,IAAA,EAAM,YAAY,CAAC,CAAA;AAGvB,EAAA,IAAI,CAAC,aAAA,EAAe,uBAAOD,KAAC,KAAA,EAAA,EAAI,QAAA,EAAA;AAAA,IAAA,gCAAA;AAAA,IAAM;AAAA,GAAA,EAAK,CAAA;AAE3C,EAAA,uBACED,GAAAA,CAAC,QAAA,EAAA,EAAS,QAAA,kBAAUA,GAAAA,CAAC,KAAA,EAAA,EAAI,QAAA,EAAA,uBAAA,EAAM,CAAA,EAC7B,QAAA,kBAAAA,GAAAA,CAAC,aAAA,EAAA,EAAe,GAAG,MAAM,CAAA,EAC3B,CAAA;AAEJ;ACpBA,IAAM,KAAK,UAAA,CAAW,EAAE,MAAM,IAAA,EAAM,MAAA,EAAQ,MAAM,CAAA;AAClD,EAAA,CAAG,QAAA,CAAS,MAAM,SAAA,GAAY,SAAU,QAAQ,GAAA,EAAK,OAAA,EAAS,KAAK,IAAA,EAAM;AACvE,EAAA,MAAM,KAAA,GAAQ,OAAO,GAAG,CAAA;AACxB,EAAA,KAAA,CAAM,QAAA,CAAS,CAAC,QAAA,EAAU,QAAQ,CAAC,CAAA;AACnC,EAAA,OAAO,IAAA,CAAK,WAAA,CAAY,MAAA,EAAQ,GAAA,EAAK,OAAO,CAAA;AAC9C,CAAA;AACA,IAAM,uBAAA,GAA0B,CAAC,GAAA,KAAgB;AAC/C,EAAA,OAAO,IAAI,OAAA,CAAQ,IAAA,EAAM,MAAM,CAAA,CAAE,OAAA,CAAQ,MAAM,MAAM,CAAA;AAIvD,CAAA;AACA,SAAS,YAAY,IAAA,EAAc;AACjC,EAAA,MAAM,SAAiC,EAAC;AACxC,EAAA,MAAM,KAAA,GAAQ,sCAAA;AACd,EAAA,IAAI,KAAA;AAEJ,EAAA,OAAA,CAAQ,KAAA,GAAQ,KAAA,CAAM,IAAA,CAAK,IAAI,OAAO,IAAA,EAAM;AAC1C,IAAA,MAAM,GAAA,GAAM,MAAM,CAAC,CAAA;AACnB,IAAA,MAAM,QAAQ,KAAA,CAAM,CAAC,CAAA,IAAK,KAAA,CAAM,CAAC,CAAA,IAAK,EAAA;AAEtC,IAAA,IAAI,QAAQ,MAAA,EAAQ;AAClB,MAAA,IAAI,MAAM,EAAC;AACX,MAAA,IAAI;AACF,QAAA,GAAA,GAAM,IAAA,CAAK,MAAM,KAAK,CAAA;AAAA,MACxB,CAAA,CAAA,MAAQ;AACN,QAAA,IAAI;AACF,UAAA,GAAA,GAAM,IAAA,CAAK,KAAA,CAAM,UAAA,CAAW,KAAK,CAAC,CAAA;AAAA,QACpC,CAAA,CAAA,MAAQ;AACN,UAAA,GAAA,GAAM,EAAC;AAAA,QACT;AAAA,MACF;AACA,MAAA,MAAA,CAAO,GAAG,CAAA,GAAI,uBAAA,CAAwB,IAAA,CAAK,SAAA,CAAU,GAAG,CAAC,CAAA;AAAA,IAC3D,CAAA,MAAO;AACL,MAAA,MAAA,CAAO,GAAG,CAAA,GAAI,KAAA;AAAA,IAChB;AAAA,EACF;AAEA,EAAA,OAAO,MAAA;AACT;AAIA,EAAA,CAAG,GAAA,CAAI,WAAW,OAAA,EAAS;AAAA,EACzB,UAAU,CAAC,MAAA,KAAmB,SAAS,IAAA,CAAK,MAAA,CAAO,MAAM,CAAA;AAAA,EACzD,MAAA,EAAQ,SAAU,MAAA,EAA4B,GAAA,EAAa;AACzD,IAAA,MAAM,KAAA,GAAQ,OAAO,GAAG,CAAA;AACxB,IAAA,IAAI,KAAA,CAAM,YAAY,CAAA,EAAG;AAEvB,MAAA,MAAM,IAAA,GAAO,KAAA,CAAM,IAAA,CAAK,IAAA,EAAK;AAC7B,MAAA,MAAM,MAAA,GAAS,YAAY,IAAI,CAAA;AAC/B,MAAA,OAAO,mBAAmB,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAA,CAC5C,GAAA,CAAI,CAAC,CAAC,GAAA,EAAK,KAAK,CAAA,KAAM,CAAA,EAAG,GAAG,CAAA,CAAA,EAAI,KAAK,EAAE,CAAA,CACvC,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA,CAAA;AAAA,IACd,CAAA,MAAO;AACL,MAAA,OAAO,mBAAA;AAAA,IACT;AAAA,EACF;AACF,CAAC,CAAA;AAID,SAAS,WAAW,OAAA,EAAiB;AACnC,EAAA,OAAO,OAAA,CAAQ,OAAA;AAAA,IACb,wBAAA;AAAA;AAAA,IACA,CAAC,OAAO,MAAA,KAAW;AACjB,MAAA,OAAO;AAAA,UAAA,EAAe,MAAA,CAAO,MAAM,CAAA;AAAA;AAAA,CAAA;AAAA,IACrC;AAAA,GACF;AACF;AAEA,SAAS,iBAAA,CAAkB,MAAc,QAAA,EAAoB;AAC3D,EAAA,MAAM,OAAA,GAAU,SAAS,GAAA,CAAI,CAAC,MAAM,CAAA,CAAE,OAAA,CAAQ,qBAAA,EAAuB,MAAM,CAAC,CAAA;AAC5E,EAAA,MAAM,KAAA,GAAQ,IAAI,MAAA,CAAO,CAAA,CAAA,EAAI,QAAQ,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA,CAAA,EAAK,IAAI,CAAA;AACvD,EAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,KAAA,EAAO,iCAAiC,CAAA;AAC9D;AAEA,IAAO,sBAAA,GAAQ,CAAC,EAAE,OAAA,GAAU,IAAI,WAAA,EAAa,gBAAA,EAAkB,QAAA,EAAU,eAAA,EAAgB,KAAa;AACpG,EAAA,MAAM,YAAA,GAAeE,QAAQ,MAAM;AACjC,IAAA,IAAI,CAAC,SAAS,OAAO,IAAA;AAErB,IAAA,IAAI,YAAA,GAAe,OAAA;AAEnB,IAAA,MAAM,aAAa,YAAA,CAAa,KAAA,CAAM,aAAa,CAAA,IAAK,EAAC,EAAG,MAAA;AAC5D,IAAA,MAAM,cAAc,YAAA,CAAa,KAAA,CAAM,aAAa,CAAA,IAAK,IAAI,MAAA,GAAS,SAAA;AACtE,IAAA,IAAI,UAAA,GAAa,KAAA;AACjB,IAAA,IAAI,YAAY,UAAA,EAAY;AAC1B,MAAA,UAAA,GAAa,IAAA;AACb,MAAA,YAAA,IAAgB,KAAA;AAAA,IAClB;AAEA,IAAA,YAAA,GAAe,WAAW,YAAY,CAAA;AAGtC,IAAA,IAAI,OAAA,GAAU,EAAA,CAAG,MAAA,CAAO,YAAY,CAAA;AAGpC,IAAA,OAAA,GAAU,cAAc,iBAAA,CAAkB,OAAA,EAAS,CAAC,WAAW,CAAC,CAAA,GAAI,OAAA;AAGpE,IAAA,IAAI,SAAA,GAAY,EAAA;AAChB,IAAA,MAAM,iBAAiB,CAAC,GAAG,OAAA,CAAQ,QAAA,CAAS,mBAAmB,CAAC,CAAA;AAChE,IAAA,MAAM,aAAA,GAAgB,eAAe,MAAA,GAAS,CAAA;AAE9C,IAAA,OAAO,MAAM,OAAA,EAAS;AAAA,MACpB,OAAA,EAAS,CAAC,OAAA,KAAY;AACpB,QAAA,IAAK,OAAA,CAAoB,SAAS,gBAAA,EAAkB;AAClD,UAAA,SAAA,EAAA;AACA,UAAA,MAAM,EAAA,GAAK,OAAA;AAEX,UAAA,MAAM,IAAA,GAAO,GAAG,OAAA,CAAQ,IAAA;AAExB,UAAA,MAAM,OAAO,IAAA,CAAK,KAAA,CAAM,EAAA,CAAG,OAAA,CAAQ,QAAQ,IAAI,CAAA;AAE/C,UAAA,MAAM,OAAA,GAAU,cAAc,SAAA,KAAc,aAAA;AAC5C,UAAA,uBACEF,GAAAA;AAAA,YAAC,qBAAA;AAAA,YAAA;AAAA,cAEC,IAAA;AAAA,cACA,IAAA;AAAA,cACA,OAAA;AAAA,cACA,gBAAA;AAAA,cACA,QAAA;AAAA,cACA;AAAA,aAAA;AAAA,YANK,CAAA,EAAG,IAAI,CAAA,EAAG,SAAS,CAAA;AAAA,WAO1B;AAAA,QAEJ;AAAA,MACF;AAAA,KACD,CAAA;AAAA,EACH,CAAA,EAAG,CAAC,OAAA,EAAS,WAAW,CAAC,CAAA;AAEzB,EAAA,uBAAOA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,eAAe,QAAA,EAAA,YAAA,EAAa,CAAA;AACpD;AC7IA,IAAO,uBAAA,GAAQ,CAAC,EAAE,OAAA,EAAS,aAAY,KAAa;AAClD,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAI,SAAS,EAAE,CAAA;AACzC,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAI,SAAS,EAAE,CAAA;AACrC,EAAA,MAAM,gBAAgB,YAAY;AAChC,IAAA,MAAM,GAAA,GAAM,MAAM,KAAA,CAAM,OAAO,CAAA;AAE/B,IAAA,IAAI,GAAA,CAAI,WAAW,GAAA,EAAK;AACtB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,kDAAA,EAAa,GAAA,CAAI,MAAM,CAAA,CAAE,CAAA;AAAA,IAC3C;AAEA,IAAA,MAAM,YAAA,GAAe,MAAM,GAAA,CAAI,IAAA,EAAK;AAEpC,IAAA,IAAI,CAAC,YAAA,EAAc;AACjB,MAAA,MAAM,IAAI,MAAM,sCAAQ,CAAA;AAAA,IAC1B;AACA,IAAA,UAAA,CAAW,YAAY,CAAA;AAAA,EACzB,CAAA;AACA,EAAA,MAAM,OAAO,YAAY;AACvB,IAAA,UAAA,CAAW,EAAE,CAAA;AACb,IAAA,QAAA,CAAS,EAAE,CAAA;AACX,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,IAAI;AACF,QAAA,MAAM,aAAA,EAAc;AAAA,MACtB,SAASG,MAAAA,EAAO;AAEd,QAAA,QAAA,CAAS,sDAAmB,CAAA;AAAA,MAC9B;AAAA,IACF;AAAA,EACF,CAAA;AAEA,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAA,EAAK;AAAA,EACP,CAAA,EAAG,CAAC,OAAO,CAAC,CAAA;AACZ,EAAA,OAAO,wBACLH,GAAAA,CAAC,UAAO,MAAA,EAAO,OAAA,EAAQ,OAAO,KAAA,EAAO,CAAA,mBAErCA,GAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,aAAA,EACb,QAAA,kBAAAA,IAAC,sBAAA,EAAA,EAAe,OAAA,EAAkB,aAA0B,CAAA,EAC9D,CAAA;AAEJ;ACzCO,SAAS,mBAAA,GAAwC;AACtD,EAAA,MAAM,OAAA,GAAU,cAAwB,IAAI,CAAA;AAE5C,EAAA,MAAM,cAAA,GAAiB,CAAC,EAAE,KAAA,EAAO,QAAA,EAAS,qBAA0CA,GAAAA,CAAC,OAAA,CAAQ,QAAA,EAAR,EAAiB,KAAA,EAAO,OAAQ,QAAA,EAAS,CAAA;AAE9H,EAAA,MAAM,iBAAiB,MAAS;AAC9B,IAAA,MAAM,KAAA,GAAQ,WAAW,OAAO,CAAA;AAChC,IAAA,IAAI,CAAC,KAAA,EAAO,MAAM,IAAI,MAAM,uCAAuC,CAAA;AACnE,IAAA,OAAO,KAAA;AAAA,EACT,CAAA;AAEA,EAAA,OAAO;AAAA,IACL,cAAA;AAAA,IACA;AAAA;AAAA,GAEF;AACF;;;AClBO,SAAS,IAAA,CAAK,IAAA,EAAc,IAAA,EAAe,EAAA,GAAuB,KAAA,EAAO;AAC9E,EAAA,MAAM,OAAA,GAAmB,EAAE,IAAA,EAAM,IAAA,EAAM,EAAA,EAAG;AAC1C,EAAA,IAAI;AACF,IAAA,MAAA,CAAO,MAAA,CAAO,WAAA,CAAY,OAAA,EAAS,GAAG,CAAA;AAAA,EACxC,SAAS,GAAA,EAAK;AACZ,IAAA,OAAA,CAAQ,IAAA,CAAK,sBAAsB,GAAG,CAAA;AAAA,EACxC;AACF;AAIO,SAAS,WAAA,CAAY,YAAA,EAA6B,IAAA,EAAc,IAAA,EAAe,SAAiB,GAAA,EAAK;AAC1G,EAAA,IAAI,CAAC,YAAA,EAAc;AACjB,IAAA,OAAA,CAAQ,KAAK,0CAA0C,CAAA;AACvD,IAAA;AAAA,EACF;AACA,EAAA,MAAM,OAAA,GAAmB,EAAE,IAAA,EAAM,IAAA,EAAM,IAAI,OAAA,EAAQ;AACnD,EAAA,IAAI;AACF,IAAA,YAAA,CAAa,WAAA,CAAY,SAAS,MAAM,CAAA;AAAA,EAC1C,SAAS,GAAA,EAAK;AACZ,IAAA,OAAA,CAAQ,IAAA,CAAK,wBAAwB,GAAG,CAAA;AAAA,EAC1C;AACF;;;AC3BA,IAAM,QAAA,GAAW,OAAO,SAAA,CAAU,QAAA;AAE3B,SAAS,EAAA,CAAG,KAAc,IAAA,EAAc;AAC7C,EAAA,OAAO,QAAA,CAAS,IAAA,CAAK,GAAG,CAAA,KAAM,WAAW,IAAI,CAAA,CAAA,CAAA;AAC/C;AAEO,SAAS,QAAqB,GAAA,EAAmB;AACtD,EAAA,OAAO,EAAA,CAAG,KAAK,WAAW,CAAA;AAC5B;AAEO,SAAS,MAAmB,GAAA,EAAmB;AACpD,EAAA,OAAO,CAAC,QAAQ,GAAG,CAAA;AAErB;AAEO,SAAS,SAAS,GAAA,EAAmC;AAC1D,EAAA,OAAO,EAAA,CAAG,KAAK,QAAQ,CAAA;AACzB;AAEO,SAAS,WAAwB,GAAA,EAAiB;AACvD,EAAA,IAAI,QAAA,CAAS,GAAG,CAAA,EAAG;AACjB,IAAA,OAAO,MAAA,CAAO,IAAA,CAAK,GAAG,CAAA,CAAE,MAAA,KAAW,CAAA;AAAA,EACrC;AACA,EAAA,OAAO,KAAA;AACT;AAEO,SAAS,OAAO,GAAA,EAA2B;AAChD,EAAA,OAAO,EAAA,CAAG,KAAK,MAAM,CAAA;AACvB;AAEO,SAAS,OAAO,GAAA,EAA2B;AAChD,EAAA,OAAO,EAAA,CAAG,KAAK,MAAM,CAAA;AAEvB;AAEO,SAAS,cAAc,GAAA,EAAuC;AACnE,EAAA,OAAO,OAAA,CAAQ,GAAG,CAAA,IAAK,MAAA,CAAO,GAAG,CAAA;AACnC;AAEO,SAAS,SAAS,GAAA,EAA6B;AACpD,EAAA,OAAO,EAAA,CAAG,KAAK,QAAQ,CAAA;AACzB;AAEO,SAAS,cAAc,GAAA,EAA6B;AACzD,EAAA,OAAO,GAAG,GAAA,EAAK,QAAQ,CAAA,IAAK,CAAC,MAAM,GAAa,CAAA;AAClD;AAEO,SAAS,SAAS,GAAA,EAA6B;AACpD,EAAA,OAAO,EAAA,CAAG,KAAK,QAAQ,CAAA;AACzB;AAEO,SAAS,WAAW,GAAA,EAAc;AACvC,EAAA,OAAO,EAAA,CAAG,KAAK,UAAU,CAAA;AAE3B;AAEO,SAAS,UAAmB,GAAA,EAAiC;AAClE,EAAA,OAAO,EAAA,CAAG,GAAA,EAAK,SAAS,CAAA,IAAK,QAAA,CAAS,GAAG,CAAA,IAAK,UAAA,CAAW,GAAA,CAAI,IAAI,CAAA,IAAK,UAAA,CAAW,IAAI,KAAK,CAAA;AAC5F;AAEO,SAAS,UAAU,GAAA,EAA8B;AACtD,EAAA,OAAO,EAAA,CAAG,KAAK,SAAS,CAAA;AAC1B;AAEO,SAAS,SAAS,GAAA,EAA6B;AACpD,EAAA,OAAO,EAAA,CAAG,KAAK,QAAQ,CAAA;AACzB;AAEO,SAAS,QAAQ,GAAA,EAA6B;AACnD,EAAA,OAAO,KAAA,CAAM,QAAQ,GAAG,CAAA;AAC1B;AAEO,SAAS,QAAqB,GAAA,EAAkB;AACrD,EAAA,IAAI,OAAA,CAAQ,GAAG,CAAA,IAAK,QAAA,CAAS,GAAG,CAAA,EAAG;AACjC,IAAA,OAAO,IAAI,MAAA,KAAW,CAAA;AAAA,EACxB;AAEA,EAAA,IAAI,aAAA,CAAc,GAAG,CAAA,EAAG;AACtB,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IAAI,GAAA,YAAe,GAAA,IAAO,GAAA,YAAe,GAAA,EAAK;AAC5C,IAAA,OAAO,IAAI,IAAA,KAAS,CAAA;AAAA,EACtB;AAOA,EAAA,OAAO,WAAW,GAAG,CAAA;AACvB;AAEO,SAAS,SAAS,GAAA,EAAyB;AAChD,EAAA,OAAO,OAAO,MAAA,KAAW,WAAA,IAAe,EAAA,CAAG,KAAK,QAAQ,CAAA;AAC1D;AAEO,SAAS,UAAU,GAAA,EAA8B;AACtD,EAAA,OAAO,QAAA,CAAS,GAAG,CAAA,IAAK,CAAC,CAAC,GAAA,CAAI,OAAA;AAChC;AAEO,SAAS,MAAM,GAAA,EAAoC;AACxD,EAAA,OAAO,EAAA,CAAG,KAAK,KAAK,CAAA;AACtB;AAEO,IAAM,QAAA,GAAW,OAAO,MAAA,KAAW;AAEnC,IAAM,WAAW,CAAC;AAQlB,IAAM,UAAA,GAAa,CAAC,IAAA,KAA0B;AACnD,EAAA,OAAO,yBAAA,CAA0B,KAAK,IAAI,CAAA;AAC5C;AAEO,IAAM,MAAA,GAAS,CAAC,GAAA,KAAiB;AACtC,EAAA,OAAO,EAAA,CAAG,KAAK,MAAM,CAAA;AACvB;;;ACnHO,SAAS,oBAAA,CAAqB,cAAA,GAA2B,CAAC,GAAG,CAAA,EAAG;AACrE,EAAA,MAAM,QAAA,GAAW,MAAA,CAAkC,EAAE,CAAA;AAErD,EAAAI,UAAU,MAAM;AACd,IAAA,MAAM,SAAA,GAAY,CAAC,GAAA,KAAsB;AACvC,MAAA,MAAM,EAAE,IAAA,EAAM,MAAA,EAAQ,MAAA,EAAO,GAAI,GAAA;AACjC,MAAA,IAAI,CAAC,QAAQ,CAAC,QAAA,CAAS,IAAI,CAAA,IAAK,CAAC,KAAK,IAAA,EAAM;AAC5C,MAAA,IAAI,cAAA,CAAe,CAAC,CAAA,KAAM,GAAA,IAAO,CAAC,cAAA,CAAe,QAAA,CAAS,MAAM,CAAA,EAAG;AAEnE,MAAA,MAAM,EAAE,IAAA,EAAM,IAAA,EAAM,MAAA,EAAQ,EAAA,GAAK,UAAS,GAAI,IAAA;AAE9C,MAAA,MAAM,KAAA,GAAQ,OAAO,MAAA,KAAW,MAAA;AAChC,MAAA,IAAI,EAAA,KAAO,KAAA,IAAS,CAAC,KAAA,EAAO;AAC1B,QAAA,MAAA,CAAO,MAAA,CAAO,YAAY,IAAA,EAAM,cAAA,CAAe,CAAC,CAAA,KAAM,GAAA,GAAM,MAAM,MAAM,CAAA;AACxE,QAAA;AAAA,MACF;AAGA,MAAA,MAAM,GAAA,GAAM,QAAA,CAAS,OAAA,CAAQ,IAAI,KAAK,EAAC;AACvC,MAAA,GAAA,CAAI,QAAQ,CAAC,EAAA,KAAO,GAAG,MAAA,EAAQ,MAAA,EAAQ,MAAM,CAAC,CAAA;AAAA,IAChD,CAAA;AACA,IAAA,MAAA,CAAO,gBAAA,CAAiB,WAAW,SAAS,CAAA;AAC5C,IAAA,OAAO,MAAM,MAAA,CAAO,mBAAA,CAAoB,SAAA,EAAW,SAAS,CAAA;AAAA,EAC9D,CAAA,EAAG,CAAC,cAAc,CAAC,CAAA;AAEnB,EAAA,SAAS,EAAA,CAAG,MAAc,OAAA,EAA0B;AAClD,IAAA,QAAA,CAAS,QAAQ,IAAI,CAAA,GAAI,SAAS,OAAA,CAAQ,IAAI,KAAK,EAAC;AACpD,IAAA,QAAA,CAAS,OAAA,CAAQ,IAAI,CAAA,CAAE,IAAA,CAAK,OAAO,CAAA;AAAA,EACrC;AAEA,EAAA,SAAS,GAAA,CAAI,MAAc,OAAA,EAA0B;AACnD,IAAA,QAAA,CAAS,OAAA,CAAQ,IAAI,CAAA,GAAA,CAAK,QAAA,CAAS,OAAA,CAAQ,IAAI,CAAA,IAAK,EAAC,EAAG,MAAA,CAAO,CAAC,EAAA,KAAO,OAAO,OAAO,CAAA;AAAA,EACvF;AAEA,EAAA,OAAO,EAAE,IAAI,GAAA,EAAI;AACnB;ACnCO,SAAS,WAAA,CAA4C,IAAA,EAA0B,IAAA,GAAe,GAAA,EAAK;AACxG,EAAA,MAAM,EAAE,SAAQ,GAAIC,MAAAA,CAAO,EAAE,IAAA,EAAM,OAAA,EAAS,MAAsE,CAAA;AAClH,EAAAD,UAAU,MAAM;AAEd,IAAA,OAAA,CAAQ,IAAA,GAAO,IAAA;AAAA,EACjB,CAAA,EAAG,CAAC,IAAI,CAAC,CAAA;AAET,EAAA,IAAI,IAAA;AAEJ,EAAA,SAAS,YAAY,KAAA,EAAU;AAE7B,IAAA,IAAA,GAAO,KAAA;AACP,IAAA,IAAI,QAAQ,OAAA,EAAS;AACnB,MAAA,YAAA,CAAa,QAAQ,OAAO,CAAA;AAC5B,MAAA,OAAA,CAAQ,OAAA,GAAU,IAAA;AAAA,IACpB;AACA,IAAA,OAAO,IAAI,OAAA,CAAW,CAAC,OAAA,EAAS,MAAA,KAAW;AACzC,MAAA,OAAA,CAAQ,OAAA,GAAU,WAAW,YAAY;AACvC,QAAA,IAAI;AACF,UAAA,MAAM,SAAS,MAAM,OAAA,CAAQ,IAAA,CAAK,KAAA,CAAM,MAAM,IAAI,CAAA;AAClD,UAAA,OAAA,CAAQ,MAAM,CAAA;AAAA,QAChB,SAAS,CAAA,EAAG;AACV,UAAA,MAAA,CAAO,CAAC,CAAA;AAAA,QACV;AAAA,MACF,GAAG,IAAI,CAAA;AAAA,IACT,CAAC,CAAA;AAAA,EACH;AAEA,EAAA,SAAS,MAAA,GAAS;AAChB,IAAA,IAAI,CAAC,QAAQ,OAAA,EAAS;AACtB,IAAA,YAAA,CAAa,QAAQ,OAAO,CAAA;AAC5B,IAAA,OAAA,CAAQ,OAAA,GAAU,IAAA;AAAA,EACpB;AAEA,EAAA,SAAS,KAAA,GAAQ;AACf,IAAA,MAAA,EAAO;AACP,IAAA,OAAO,OAAA,CAAQ,IAAA,CAAK,KAAA,CAAM,IAAA,EAAM,IAAI,CAAA;AAAA,EACtC;AACA,EAAA,QAAA,CAAS,KAAA,GAAQ,KAAA;AACjB,EAAA,QAAA,CAAS,MAAA,GAAS,MAAA;AAClB,EAAA,OAAO,WAAA,CAAY,QAAA,EAAU,EAAE,CAAA;AACjC;;;AC5CO,IAAM,QAAA,GAA+C,CAAC,GAAA,EAAK,MAAA,GAAS,IAAA,KAAS;AAClF,EAAA,IAAI,CAAC,QAAQ,GAAG,CAAA,IAAK,CAAC,QAAA,CAAS,GAAG,GAAG,OAAO,GAAA;AAC5C,EAAA,IAAI,QAAQ,OAAO,IAAA,CAAK,MAAM,IAAA,CAAK,SAAA,CAAU,GAAG,CAAC,CAAA;AACjD,EAAA,MAAM,SAAc,OAAA,CAAQ,GAAG,CAAA,GAAI,KAAK,EAAC;AACzC,EAAA,KAAA,MAAW,OAAO,GAAA,EAAK;AACrB,IAAA,IAAI,OAAO,SAAA,CAAU,cAAA,CAAe,IAAA,CAAK,GAAA,EAAK,GAAG,CAAA,EAAG;AAClD,MAAA,MAAA,CAAO,GAAG,CAAA,GAAI,QAAA,CAAU,GAAA,CAAY,GAAG,GAAG,MAAM,CAAA;AAAA,IAClD;AAAA,EACF;AACA,EAAA,OAAO,MAAA;AACT;AAOO,SAAS,SAAA,CAAU,GAAQ,CAAA,EAAiB;AACjD,EAAA,IAAI,MAAA,CAAO,EAAA,CAAG,CAAA,EAAG,CAAC,GAAG,OAAO,IAAA;AAG5B,EAAA,IAAI,CAAA,YAAa,QAAQ,CAAA,YAAa,IAAA,SAAa,CAAA,CAAE,OAAA,EAAQ,KAAM,CAAA,CAAE,OAAA,EAAQ;AAC7E,EAAA,IAAI,CAAA,YAAa,UAAU,CAAA,YAAa,MAAA,SAAe,CAAA,CAAE,QAAA,EAAS,KAAM,CAAA,CAAE,QAAA,EAAS;AACnF,EAAA,IAAI,CAAA,YAAa,GAAA,IAAO,CAAA,YAAa,GAAA,EAAK;AACxC,IAAA,IAAI,CAAA,CAAE,IAAA,KAAS,CAAA,CAAE,IAAA,EAAM,OAAO,KAAA;AAC9B,IAAA,KAAA,MAAW,CAAC,GAAA,EAAK,GAAG,CAAA,IAAK,CAAA,CAAE,SAAQ,EAAG;AACpC,MAAA,IAAI,CAAC,CAAA,CAAE,GAAA,CAAI,GAAG,CAAA,IAAK,CAAC,SAAA,CAAU,GAAA,EAAK,CAAA,CAAE,GAAA,CAAI,GAAG,CAAC,GAAG,OAAO,KAAA;AAAA,IACzD;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,IAAI,CAAA,YAAa,GAAA,IAAO,CAAA,YAAa,GAAA,EAAK;AACxC,IAAA,IAAI,CAAA,CAAE,IAAA,KAAS,CAAA,CAAE,IAAA,EAAM,OAAO,KAAA;AAC9B,IAAA,KAAA,MAAW,GAAA,IAAO,CAAA,CAAE,MAAA,EAAO,EAAG;AAC5B,MAAA,IAAI,CAAC,CAAA,CAAE,GAAA,CAAI,GAAG,GAAG,OAAO,KAAA;AAAA,IAC1B;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAGA,EAAA,IAAI,MAAM,OAAA,CAAQ,CAAC,KAAK,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA,EAAG;AACxC,IAAA,IAAI,CAAA,CAAE,MAAA,KAAW,CAAA,CAAE,MAAA,EAAQ,OAAO,KAAA;AAClC,IAAA,OAAO,CAAA,CAAE,KAAA,CAAM,CAAC,IAAA,EAAM,CAAA,KAAM,UAAU,IAAA,EAAM,CAAA,CAAE,CAAC,CAAC,CAAC,CAAA;AAAA,EACnD;AAGA,EAAA,IAAI,OAAO,CAAA,KAAM,UAAA,IAAc,OAAO,CAAA,KAAM,UAAA,EAAY,OAAO,CAAA,CAAE,QAAA,EAAS,KAAM,CAAA,CAAE,QAAA,EAAS;AAG3F,EAAA,IAAI,QAAA,CAAS,CAAC,CAAA,IAAK,QAAA,CAAS,CAAC,CAAA,EAAG;AAC9B,IAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA;AAC3B,IAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA;AAC3B,IAAA,IAAI,KAAA,CAAM,MAAA,KAAW,KAAA,CAAM,MAAA,EAAQ,OAAO,KAAA;AAC1C,IAAA,KAAA,MAAW,OAAO,KAAA,EAAO;AACvB,MAAA,IAAI,CAAC,UAAU,CAAA,CAAE,GAAG,GAAG,CAAA,CAAE,GAAG,CAAC,CAAA,EAAG,OAAO,KAAA;AAAA,IACzC;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,OAAO,KAAA;AACT;AACO,IAAM,SAAA,GAAY,CAAgC,IAAA,EAAS,QAAA,KAA4B;AAC5F,EAAA,MAAM,MAAA,GAAS,EAAE,GAAG,IAAA,EAAK;AAEzB,EAAA,MAAA,CAAO,KAAK,QAAA,IAAY,EAAE,CAAA,CAAE,OAAA,CAAQ,CAAC,GAAA,KAAiB;AACpD,IAAA,MAAM,SAAA,GAAY,KAAK,GAAG,CAAA;AAC1B,IAAA,MAAM,aAAA,GAAgB,SAAS,GAAG,CAAA;AAElC,IAAA,IACE,OAAO,SAAA,KAAc,QAAA,IACrB,SAAA,KAAc,IAAA,IACd,CAAC,OAAA,CAAQ,SAAS,CAAA,IAClB,OAAO,kBAAkB,QAAA,IACzB,aAAA,KAAkB,QAClB,CAAC,OAAA,CAAQ,aAAa,CAAA,EACtB;AAEA,MAAA,MAAA,CAAO,GAAG,CAAA,GAAI,SAAA,CAAU,SAAA,EAAW,aAAa,CAAA;AAAA,IAClD,CAAA,MAAA,IAAW,kBAAkB,MAAA,EAAW;AAEtC,MAAA,MAAA,CAAO,GAAG,CAAA,GAAI,aAAA;AAAA,IAChB;AAAA,EACF,CAAC,CAAA;AAED,EAAA,OAAO,MAAA;AACT;AAEO,IAAM,YAAA,GAAe,CAAC,GAAA,KAA4B;AACvD,EAAA,OAAO,OAAO,IAAA,CAAK,GAAG,CAAA,CAAE,GAAA,CAAI,CAAC,GAAA,MAAS;AAAA,IACpC,KAAA,EAAO,IAAI,GAAG,CAAA;AAAA,IACd,KAAA,EAAO,OAAO,GAAG;AAAA,GACnB,CAAE,CAAA;AACJ;AAGO,IAAM,QAAA,GAAW,CAAI,GAAA,GAAW,IAAI,GAAA,KAAgB;AACzD,EAAA,MAAM,MAAM,EAAC;AACb,EAAA,GAAA,EAAK,OAAA,CAAQ,CAAC,IAAA,KAAc;AAC1B,IAAA,GAAA,CAAI,IAAA,CAAK,GAAG,CAAC,CAAA,GAAI,IAAA;AAAA,EACnB,CAAC,CAAA;AACD,EAAA,OAAO,GAAA;AACT;AAOO,IAAM,aAAA,GAAgB,CAAC,EAAA,EAAgB,CAAA,KAAuC;AACnF,EAAA,IAAI,KAAA,GAA+B,IAAA;AACnC,EAAA,IAAI,WAAA,GAAc,KAAA;AAElB,EAAA,MAAM,WAAW,MAAM;AACrB,IAAA,KAAA,GAAQ,WAAW,YAAY;AAC7B,MAAA,IAAI,WAAA,EAAa;AACf,QAAA;AAAA,MACF;AAEA,MAAA,MAAM,EAAA,EAAG;AAET,MAAA,IAAI,CAAC,WAAA,EAAa;AAChB,QAAA,QAAA,EAAS;AAAA,MACX;AAAA,IACF,GAAG,CAAC,CAAA;AAAA,EACN,CAAA;AACA,EAAA,QAAA,EAAS;AACT,EAAA,OAAO;AAAA,IACL,KAAA,EAAO,MAAM,CAAC,CAAC,KAAA;AAAA,IACf,QAAQ,MAAM;AACZ,MAAA,WAAA,GAAc,IAAA;AACd,MAAA,IAAI,KAAA,EAAO;AACT,QAAA,YAAA,CAAa,KAAK,CAAA;AAClB,QAAA,KAAA,GAAQ,IAAA;AAAA,MACV;AAAA,IACF;AAAA,GACF;AACF;AAGO,IAAM,oBAAoB,MAAM;AACrC,EAAA,IAAI,KAAA,GAAQ,IAAA,CAAK,GAAA,EAAI,CAAE,SAAS,EAAE,CAAA;AAClC,EAAA,KAAA,IAAS,KAAK,MAAA,EAAO,CAAE,SAAS,EAAE,CAAA,CAAE,OAAO,CAAC,CAAA;AAC5C,EAAA,OAAO,KAAA;AACT;AAGO,IAAM,QAAA,GAAW,CAAC,IAAA,KAAiB;AAExC,EAAA,IAAI,SAAA,CAAU,SAAA,IAAa,MAAA,CAAO,eAAA,EAAiB;AAEjD,IAAA,OAAO,SAAA,CAAU,SAAA,CAAU,SAAA,CAAU,IAAI,CAAA;AAAA,EAC3C,CAAA,MAAO;AAEL,IAAA,MAAM,QAAA,GAAW,QAAA,CAAS,aAAA,CAAc,UAAU,CAAA;AAClD,IAAA,QAAA,CAAS,KAAA,GAAQ,IAAA;AAEjB,IAAA,QAAA,CAAS,MAAM,QAAA,GAAW,UAAA;AAC1B,IAAA,QAAA,CAAS,MAAM,OAAA,GAAU,GAAA;AACzB,IAAA,QAAA,CAAS,MAAM,IAAA,GAAO,WAAA;AACtB,IAAA,QAAA,CAAS,MAAM,GAAA,GAAM,WAAA;AACrB,IAAA,QAAA,CAAS,IAAA,CAAK,YAAY,QAAQ,CAAA;AAClC,IAAA,QAAA,CAAS,KAAA,EAAM;AACf,IAAA,QAAA,CAAS,MAAA,EAAO;AAChB,IAAA,OAAO,IAAI,OAAA,CAAc,CAAC,GAAA,EAAK,GAAA,KAAQ;AAGrC,MAAA,QAAA,CAAS,WAAA,CAAY,MAAM,CAAA,GAAI,GAAA,KAAQ,GAAA,EAAI;AAC3C,MAAA,QAAA,CAAS,MAAA,EAAO;AAAA,IAClB,CAAC,CAAA;AAAA,EACH;AACF;AAMO,SAAS,uBAAuB,MAAA,EAAyB;AAE9D,EAAA,MAAM,YAAA,GAAe,WAAW,MAAgB,CAAA;AAEhD,EAAA,IAAI,CAAC,KAAA,CAAM,YAAY,CAAA,EAAG;AACxB,IAAA,OAAO,aAAa,cAAA,EAAe;AAAA,EACrC;AACA,EAAA,OAAO,MAAA;AACT;AACO,IAAM,qBAAA,GAAwB,CAAC,GAAA,EAAa,GAAA,EAAa,KAAA,KAAkB;AAChF,EAAA,MAAM,aAAA,uBAAoB,GAAA,EAAI;AAC9B,EAAA,OAAO,aAAA,CAAc,OAAO,KAAA,EAAO;AACjC,IAAA,MAAM,YAAA,GAAe,KAAK,KAAA,CAAM,IAAA,CAAK,QAAO,IAAK,GAAA,GAAM,GAAA,GAAM,CAAA,CAAE,CAAA,GAAI,GAAA;AACnE,IAAA,aAAA,CAAc,IAAI,YAAY,CAAA;AAAA,EAChC;AACA,EAAA,OAAO,KAAA,CAAM,KAAK,aAAa,CAAA;AACjC;AACO,IAAM,WAAA,GAAc,CAAC,QAAA,KAAqB;AAC/C,EAAA,OAAO,QAAA,CAAS,KAAA,CAAM,GAAG,CAAA,CAAE,CAAC,EAAE,KAAA,CAAM,GAAG,CAAA,CAAE,GAAA,EAAI,IAAK,EAAA;AACpD;AAGO,IAAM,YAAA,GAAe,CAAC,GAAA,KAAiB;AAC5C,EAAA,OAAO,GAAA,GAAM,IAAI,OAAA,CAAQ,OAAA,EAAS,IAAI,CAAA,CAAE,OAAA,CAAQ,KAAA,EAAO,OAAO,CAAA,GAAI,EAAA;AACpE;AAQO,IAAM,cAAA,GAAiB,CAAC,GAAA,EAA0B,GAAA,KAAyB;AAChF,EAAA,MAAM,MAAA,GAAS,OAAO,OAAA,CAAQ,GAAG,EAC9B,MAAA,CAAO,CAAC,GAAG,KAAK,MAAM,CAAC,aAAA,CAAc,KAAK,CAAC,CAAA,CAC3C,IAAI,CAAC,CAAC,GAAA,EAAK,KAAK,CAAA,KAAM;AACrB,IAAA,IAAI,OAAA,CAAQ,KAAK,CAAA,EAAG;AAElB,MAAA,OAAO,KAAA,CACJ,OAAO,CAAC,CAAA,KAAM,CAAC,aAAA,CAAc,CAAC,CAAC,CAAA,CAC/B,GAAA,CAAI,CAAC,MAAM,CAAA,EAAG,kBAAA,CAAmB,GAAG,CAAC,CAAA,CAAA,EAAI,kBAAA,CAAmB,CAAC,CAAC,CAAA,CAAE,CAAA,CAChE,IAAA,CAAK,GAAG,CAAA;AAAA,IACb;AACA,IAAA,OAAO,GAAG,kBAAA,CAAmB,GAAG,CAAC,CAAA,CAAA,EAAI,kBAAA,CAAmB,KAAK,CAAC,CAAA,CAAA;AAAA,EAChE,CAAC,CAAA,CACA,IAAA,CAAK,GAAG,CAAA;AAEX,EAAA,IAAI,GAAA,EAAK;AACP,IAAA,MAAM,SAAA,GAAY,GAAA,CAAI,QAAA,CAAS,GAAG,IAAI,GAAA,GAAM,GAAA;AAC5C,IAAA,OAAO,CAAA,EAAG,GAAG,CAAA,EAAG,SAAS,GAAG,MAAM,CAAA,CAAA;AAAA,EACpC;AAEA,EAAA,OAAO,MAAA;AACT;AACO,IAAM,YAAA,GAAe,CAAC,GAAA,EAAa,IAAA,KAAkB;AAC1D,EAAA,MAAM,CAAA,GAAI,QAAA,CAAS,aAAA,CAAc,GAAG,CAAA;AACpC,EAAA,CAAA,CAAE,WAAW,IAAA,IAAQ,0BAAA;AACrB,EAAA,CAAA,CAAE,IAAA,GAAO,GAAA;AACT,EAAA,QAAA,CAAS,IAAA,CAAK,YAAY,CAAC,CAAA;AAC3B,EAAA,CAAA,CAAE,KAAA,EAAM;AACR,EAAA,QAAA,CAAS,IAAA,CAAK,YAAY,CAAC,CAAA;AAC7B;AAKO,IAAM,eAAA,GAAkB,CAAC,GAAA,GAAc,EAAA,KAAO;AAGnD,EAAA,MAAM,CAAA,GAAI,IAAI,GAAA,CAAI,GAAA,EAAK,sBAAsB,CAAA;AAC7C,EAAA,IAAI,WAAW,CAAA,CAAE,QAAA;AAEjB,EAAA,IAAI,CAAC,QAAA,CAAS,QAAA,CAAS,GAAG,CAAA,EAAG;AAC3B,IAAA,QAAA,IAAY,GAAA;AAAA,EACd;AAGA,EAAA,CAAA,CAAE,QAAA,GAAW,QAAA;AAEb,EAAA,OAAO,CAAA,EAAG,UAAA,CAAW,GAAG,CAAA,GAAI,EAAE,MAAA,GAAS,EAAE,CAAA,EAAG,CAAA,CAAE,QAAQ,CAAA,EAAG,CAAA,CAAE,MAAM,CAAA,EAAG,EAAE,IAAI,CAAA,CAAA;AAC5E;AAKO,IAAM,gBAAA,GAAmB,CAAC,GAAA,EAAa,OAAA,KAAqB;AACjE,EAAA,IAAI,CAAC,SAAS,OAAO,GAAA;AACrB,EAAA,IAAI,MAAA,GAAS,EAAA;AACb,EAAA,MAAM,UAAA,GAAa,IAAI,GAAA,CAAI,OAAO,CAAA;AAElC,EAAA,MAAM,QAAA,GAAW,GAAA,CAAI,KAAA,CAAM,GAAG,CAAA;AAC9B,EAAA,MAAM,YAAY,IAAI,eAAA,CAAgB,QAAA,CAAS,CAAC,KAAK,EAAE,CAAA;AAEvD,EAAA,IAAI,SAAA,CAAU,GAAA,CAAI,YAAY,CAAA,EAAG;AAC/B,IAAA,MAAA,GAAS,GAAA;AAAA,EACX,CAAA,MAAO;AACL,IAAA,MAAM,UAAA,GAAa,UAAA,CAAW,YAAA,CAAa,GAAA,CAAI,YAAY,CAAA;AAC3D,IAAA,IAAI,UAAA,EAAY;AACd,MAAA,MAAA,GAAS,cAAA,CAAe,EAAE,UAAA,EAAW,EAAG,GAAG,CAAA;AAAA,IAC7C,CAAA,MAAO;AACL,MAAA,MAAA,GAAS,GAAA;AAAA,IACX;AAAA,EACF;AACA,EAAA,OAAO,MAAA;AACT;AAOO,IAAM,eAAA,GAAkB,CAAC,IAAA,EAAc,UAAA,KAAwB;AAEpE,EAAA,MAAM,QAAA,GAAW,MAAA,CAAO,QAAA,CAAS,QAAA,KAAa,WAAW,MAAA,GAAS,KAAA;AAClE,EAAA,MAAM,IAAA,GAAO,UAAA,IAAc,MAAA,CAAO,QAAA,CAAS,IAAA;AAG3C,EAAA,OAAO,CAAA,EAAG,QAAQ,CAAA,EAAA,EAAK,IAAI,GAAG,IAAI,CAAA,CAAA;AACpC;;;ACjSO,SAAS,aAAA,CAAc,QAA8B,IAAA,EAAa;AACvE,EAAA,MAAM,cAAcC,MAAAA,EAAc;AAElC,EAAA,MAAM,WAAA,GACJ,CAAC,WAAA,CAAY,OAAA,IAAW,KAAK,MAAA,KAAW,WAAA,CAAY,QAAQ,MAAA,IAAU,IAAA,CAAK,KAAK,CAAC,GAAA,EAAK,MAAM,CAAC,SAAA,CAAU,KAAK,WAAA,CAAY,OAAA,CAAS,CAAC,CAAC,CAAC,CAAA;AAEtI,EAAAD,UAAU,MAAM;AACd,IAAA,IAAI,WAAA,EAAa;AACf,MAAA,WAAA,CAAY,OAAA,GAAU,IAAA;AACtB,MAAA,OAAO,MAAA,EAAO;AAAA,IAChB;AAAA,EACF,CAAA,EAAG,CAAC,WAAW,CAAC,CAAA;AAClB;AChBO,SAAS,YAAe,IAAA,EAAS;AACtC,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIE,SAAS,IAAI,CAAA;AACvC,EAAA,MAAM,QAAA,GAAWD,OAAO,IAAI,CAAA;AAC5B,EAAA,MAAM,QAAA,GAAW,CAAC,MAAA,KAAc;AAC9B,IAAA,QAAA,CAAS,OAAA,GAAU,MAAA;AACnB,IAAA,QAAA,CAAS,MAAM,CAAA;AAAA,EACjB,CAAA;AACA,EAAA,MAAM,QAAA,GAAW,MAAM,QAAA,CAAS,OAAA;AAChC,EAAA,OAAO,CAAC,KAAA,EAAO,QAAA,EAAU,QAAQ,CAAA;AACnC;ACRO,IAAM,YAAA,GAAe,CAAI,UAAA,EAAe,aAAA,KAAsC;AACnF,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIC,SAAY,UAAU,CAAA;AAE1D,EAAAF,UAAU,MAAM;AACd,IAAA,IAAI,eAAe,UAAA,EAAY;AAC7B,MAAA,aAAA,CAAc,UAAU,CAAA;AAAA,IAC1B;AAAA,EACF,CAAA,EAAG,CAAC,UAAU,CAAC,CAAA;AAEf,EAAA,MAAM,iBAAA,GAAoB,CAAC,KAAA,KAAa;AACtC,IAAA,aAAA,CAAc,KAAK,CAAA;AACnB,IAAA,aAAA,CAAc,KAAK,CAAA;AAAA,EACrB,CAAA;AAEA,EAAA,OAAO;AAAA,IACL,UAAA;AAAA,IACA,aAAA,EAAe;AAAA,GACjB;AACF;ACfO,SAAS,WAAA,CAA4C,MAA0B,IAAA,EAAc;AAClG,EAAA,MAAM,EAAE,SAAQ,GAAIC,MAAAA,CAAO,EAAE,IAAA,EAAM,OAAA,EAAS,MAAsE,CAAA;AAClH,EAAAD,UAAU,MAAM;AAEd,IAAA,OAAA,CAAQ,IAAA,GAAO,IAAA;AAAA,EACjB,CAAA,EAAG,CAAC,IAAI,CAAC,CAAA;AAET,EAAA,IAAI,IAAA;AAEJ,EAAA,SAAS,YAAY,KAAA,EAAU;AAE7B,IAAA,IAAA,GAAO,KAAA;AACP,IAAA,OAAO,IAAI,OAAA,CAAW,CAAC,OAAA,EAAS,MAAA,KAAW;AAEzC,MAAA,IAAI,CAAC,QAAQ,OAAA,EAAS;AACpB,QAAA,IAAI;AACF,UAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,IAAA,CAAK,KAAA,CAAM,MAAM,IAAI,CAAA;AAC5C,UAAA,OAAA,CAAQ,MAAM,CAAA;AAAA,QAChB,SAAS,CAAA,EAAG;AACV,UAAA,MAAA,CAAO,CAAC,CAAA;AAAA,QACV;AACA,QAAA,OAAA,CAAQ,OAAA,GAAU,WAAW,MAAM;AACjC,UAAA,OAAA,CAAQ,OAAA,GAAU,IAAA;AAAA,QACpB,GAAG,IAAI,CAAA;AAAA,MACT;AAAA,IACF,CAAC,CAAA;AAAA,EACH;AAEA,EAAA,SAAS,MAAA,GAAS;AAChB,IAAA,IAAI,CAAC,QAAQ,OAAA,EAAS;AACtB,IAAA,YAAA,CAAa,QAAQ,OAAO,CAAA;AAC5B,IAAA,OAAA,CAAQ,OAAA,GAAU,IAAA;AAAA,EACpB;AAEA,EAAA,SAAS,KAAA,GAAQ;AACf,IAAA,MAAA,EAAO;AACP,IAAA,OAAO,OAAA,CAAQ,IAAA,CAAK,KAAA,CAAM,IAAA,EAAM,IAAI,CAAA;AAAA,EACtC;AACA,EAAA,QAAA,CAAS,KAAA,GAAQ,KAAA;AACjB,EAAA,QAAA,CAAS,MAAA,GAAS,MAAA;AAClB,EAAA,OAAOG,WAAAA,CAAY,QAAA,EAAU,EAAE,CAAA;AACjC;AC7CA,KAAA,CAAM,OAAO,YAAY,CAAA;AAIlB,IAAM,cAAA,GAAiB;AACvB,IAAM,eAAA,GAAkB;AAE/B,IAAM,IAAA,GAAO,MAAA;AAKN,IAAM,mBAAA,GAAsB,CAAC,IAAA,EAAiB,IAAA,GAAyB,IAAA,KAAS;AACrF,EAAA,OAAO,MAAM,IAAI,CAAA,CAAE,OAAA,CAAQ,IAAI,EAAE,OAAA,EAAQ;AAC3C;AAKO,IAAM,iBAAA,GAAoB,CAAC,IAAA,EAAiB,IAAA,GAAyB,IAAA,KAAS;AACnF,EAAA,OAAO,MAAM,IAAI,CAAA,CAAE,KAAA,CAAM,IAAI,EAAE,OAAA,EAAQ;AACzC;AAGO,IAAM,UAAA,GAAa,CAAC,IAAA,EAA8B,GAAA,GAAc,cAAA,KAAmB;AACxF,EAAA,IAAI,IAAA,EAAM;AACR,IAAA,OAAO,KAAA,CAAM,IAAI,CAAA,CAAE,MAAA,CAAO,GAAG,CAAA;AAAA,EAC/B;AACA,EAAA,OAAO,EAAA;AACT;AAEO,IAAM,YAAA,GAAe,CAAC,IAAA,KAAoB;AAC/C,EAAA,OAAO,KAAA,CAAM,IAAI,CAAA,CAAE,OAAA,EAAQ;AAC7B;AAEO,IAAM,QAAA,GAAW,CAAC,IAAA,KAAoB;AAC3C,EAAA,OAAO,KAAA,CAAM,IAAI,CAAA,CAAE,QAAA,CAAS,qBAAqB,CAAA;AACnD;ACnCA,IAAM,QAAA,GAAW,SAAA;AAEV,SAAS,eAAe,QAAA,EAAe;AAC5C,EAAA,MAAM,UAAA,GAAa,IAAI,OAAA,CAAQ,IAAA,CAAK,UAAU,QAAQ,CAAA,EAAG,SAAS,CAAA,CAAE,QAAA,EAAS;AAC7E,EAAA,cAAA,CAAe,OAAA,CAAQ,UAAU,UAAU,CAAA;AAC7C;AAEO,SAAS,cAAA,GAAiB;AAC/B,EAAA,MAAM,YAAA,GAAe,cAAA,CAAe,OAAA,CAAQ,QAAQ,CAAA;AACpD,EAAA,IAAI,YAAA,EAAc;AAEhB,IAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,OAAA,CAAQ,YAAA,EAAc,SAAS,CAAA;AACjD,IAAA,MAAM,YAAA,GAAe,KAAA,CAAM,QAAA,CAAS,OAAO,CAAA;AAC3C,IAAA,OAAO,IAAA,CAAK,MAAM,YAAY,CAAA;AAAA,EAChC;AACA,EAAA,OAAO,IAAA;AACT;AAEO,SAAS,gBAAA,GAAmB;AACjC,EAAA,cAAA,CAAe,WAAW,QAAQ,CAAA;AACpC;AAEA,IAAM,YAAA,GAAe,cAAA;AAEd,SAAS,WAAA,GAAc;AAC5B,EAAA,IAAI,QAAA,GAAW,YAAA,CAAa,OAAA,CAAQ,YAAY,CAAA;AAChD,EAAA,IAAI,QAAA,EAAU;AACZ,IAAA,OAAO,QAAA;AAAA,EACT;AACA,EAAA,QAAA,GAAW,iBAAA,EAAkB;AAC7B,EAAA,YAAA,CAAa,OAAA,CAAQ,cAAc,QAAQ,CAAA;AAC3C,EAAA,OAAO,QAAA;AACT;AClCA,IAAM,oBAAA,GAAyD;AAAA,EAC7D,GAAA,EAAK,MAAA;AAAA,EACL,GAAA,EAAK,OAAA;AAAA,EACL,GAAA,EAAK,OAAA;AAAA,EACL,GAAA,EAAK;AACP,CAAA;AACO,IAAM,SAAA,GAAY,CAAC,QAAA,EAAA,GAA2B,IAAA,KAA0B;AAC7E,EAAA,IAAI,IAAA,CAAK,MAAA,KAAW,CAAA,EAAG,OAAO,GAAA;AAC9B,EAAA,MAAM,CAAC,GAAA,EAAK,GAAG,OAAO,CAAA,GAAI,IAAA;AAC1B,EAAA,OAAO,OAAA,CAAQ,OAAO,CAAC,GAAA,EAAc,QAAQ,GAAA,CAAI,oBAAA,CAAqB,QAAQ,CAAC,CAAA,CAAE,IAAI,OAAA,CAAQ,GAAG,CAAC,CAAA,EAAG,IAAI,QAAQ,GAAG,CAAC,EAAE,QAAA,EAAS;AACjI;AAIO,IAAM,OAAO,CAAA,GAAI,IAAA,KAA0B,SAAA,CAAU,GAAA,EAAK,GAAG,IAAI;AAIjE,IAAM,QAAQ,CAAA,GAAI,IAAA,KAA0B,SAAA,CAAU,GAAA,EAAK,GAAG,IAAI;AAIlE,IAAM,QAAQ,CAAA,GAAI,IAAA,KAA0B,SAAA,CAAU,GAAA,EAAK,GAAG,IAAI;AAIlE,IAAM,YAAY,CAAA,GAAI,IAAA,KAA0B,SAAA,CAAU,GAAA,EAAK,GAAG,IAAI;AAGtE,IAAM,aAAA,GAAgB,CAAC,IAAA,KAAwB;AACpD,EAAA,OAAO,IAAI,OAAA,CAAQ,IAAI,CAAA,CAAE,aAAA,EAAc;AACzC;AAEO,IAAM,SAAA,GAAY,CAAC,IAAA,KAAwB;AAChD,EAAA,OAAO,IAAI,OAAA,CAAQ,IAAI,CAAA,CAAE,UAAU,IAAI,CAAA;AACzC;AAGO,IAAM,MAAA,GAAS,CAAC,IAAA,KAAwB,IAAI,QAAQ,IAAI,CAAA,CAAE,GAAA,EAAI,CAAE,QAAA;AAEhE,IAAM,UAAA,GAAa,CAAC,IAAA,EAAqB,IAAA,EAAqB,IAAA,KAAiB;AACpF,EAAA,MAAM,CAAA,GAAI,IAAI,OAAA,CAAQ,IAAI,CAAA;AAC1B,EAAA,MAAM,CAAA,GAAI,IAAI,OAAA,CAAQ,IAAI,CAAA;AAC1B,EAAA,QAAQ,IAAA;AAAM,IACZ,KAAK,GAAA;AACH,MAAA,OAAO,CAAA,CAAE,YAAY,CAAC,CAAA;AAAA,IACxB,KAAK,IAAA;AACH,MAAA,OAAO,CAAA,CAAE,qBAAqB,CAAC,CAAA;AAAA,IACjC,KAAK,GAAA;AACH,MAAA,OAAO,CAAA,CAAE,SAAS,CAAC,CAAA;AAAA,IACrB,KAAK,IAAA;AACH,MAAA,OAAO,CAAA,CAAE,kBAAkB,CAAC,CAAA;AAAA,IAC9B,KAAK,IAAA;AACH,MAAA,OAAO,CAAA,CAAE,OAAO,CAAC,CAAA;AAAA;AAEvB;AAGO,IAAM,UAAU,CAAC,GAAA,EAAoB,QAAA,GAAW,CAAA,EAAG,OAAO,IAAA,KAAS;AACxE,EAAA,MAAM,CAAA,GAAI,IAAI,OAAA,CAAQ,GAAG,CAAA;AACzB,EAAA,IAAI,IAAA,EAAM;AACR,IAAA,OAAO,CAAA,CAAE,OAAA,CAAQ,QAAA,EAAU,OAAA,CAAQ,aAAa,CAAA;AAAA,EAClD,CAAA,MAAO;AACL,IAAA,OAAO,EAAE,eAAA,CAAgB,QAAA,EAAU,OAAA,CAAQ,aAAa,EAAE,QAAA,EAAS;AAAA,EACrE;AACF;AAEO,IAAM,SAAA,GAAY,CAAC,GAAA,KAAuB;AAC/C,EAAA,OAAO,IAAI,OAAA,CAAQ,GAAG,CAAA,CAAE,SAAA,EAAU;AACpC;AAEO,IAAM,UAAA,GAAa,CAAC,GAAA,KAAuB;AAChD,EAAA,OAAO,IAAI,OAAA,CAAQ,GAAG,CAAA,CAAE,UAAA,EAAW;AACrC;AC3DA,IAAM,eAAe,MAAM;AACzB,EAAA,MAAM,WAAW,EAAC;AAClB,EAAA,OAAO,CAAC,EAAE,KAAA,GAAQ,cAAA,EAAM,SAAS,IAAA,GAAO,SAAA,EAAW,QAAA,GAAW,CAAA,EAAG,OAAA,EAAS,OAAA,GAAU,IAAA,EAAM,MAAA,GAAS,OAAM,KAAoB;AAC3H,IAAA,IAAI,CAAC,OAAA,EAAS;AACd,IAAA,MAAM,GAAA,GAAM,SAAS,WAAA,GAAc,OAAA;AACnC,IAAA,MAAM,WAAW,MAAM;AACrB,MAAA,OAAO,SAAS,GAAG,CAAA;AACnB,MAAA,OAAA,IAAU;AAAA,IACZ,CAAA;AACA,IAAA,IAAI,OAAA,IAAW,QAAA,CAAS,GAAG,CAAA,EAAG,CAC9B,MAAO;AACL,MAAA,IAAI,OAAA,EAAS;AACX,QAAA,QAAA,CAAS,GAAG,IAAI,YAAA,EAAa;AAAA,MAC/B;AACA,MAAA,IAAI,QAAA,EAAU;AACZ,QAAA,IAAI,OAAA,CAAQ,SAAS,EAAA,EAAI;AACvB,UAAA,YAAA,CAAa,IAAI,CAAA,CAAE;AAAA,YACjB,OAAA,EAAS,KAAA;AAAA,YACT,WAAA,EAAa,OAAA;AAAA,YACb,SAAA,EAAW,KAAA;AAAA,YACX,QAAA;AAAA,YACA,OAAA,EAAS;AAAA,WACV,CAAA;AAAA,QACH,CAAA,MAAO;AACL,UAAA,OAAA,CAAQ,IAAI,CAAA,CAAE;AAAA,YACZ,OAAA;AAAA,YACA,QAAA;AAAA,YACA,OAAA,EAAS;AAAA,WACV,CAAA;AAAA,QACH;AAAA,MACF,CAAA,MAAO;AACL,QAAA,KAAA,CAAM,IAAI,CAAA,CAAE;AAAA,UACV,KAAA;AAAA,UACA,OAAA;AAAA,UACA,aAAA,EAAe,EAAE,KAAA,EAAO,EAAE,YAAY,cAAA,EAAgB,OAAA,EAAS,QAAO,EAAE;AAAA,UACxE,UAAA,EAAY;AAAA,SACb,CAAA;AAAA,MACH;AAAA,IACF;AAAA,EACF,CAAA;AACF,CAAA;AACO,IAAM,cAAc,YAAA,EAAa;;;AC1DjC,IAAM,SAAA,GAAY;AAElB,SAAS,SAAS,WAAA,EAAqB;AAC5C,EAAA,YAAA,CAAa,OAAA,CAAQ,WAAW,WAAW,CAAA;AAC7C;AACO,SAAS,WAAA,GAAc;AAC5B,EAAA,MAAM,YAAA,GAAe,IAAI,eAAA,CAAgB,QAAA,CAAS,MAAM,CAAA;AACxD,EAAA,MAAM,KAAA,GAAQ,YAAA,CAAa,GAAA,CAAI,SAAS,CAAA;AACxC,EAAA,OAAO,KAAA,IAAS,EAAA;AAClB;AACO,SAAS,QAAA,GAAW;AACzB,EAAA,MAAM,QAAQ,WAAA,EAAY;AAC1B,EAAA,IAAI,CAAC,KAAA,EAAO;AACV,IAAA,MAAMC,MAAAA,GAAQ,YAAA,CAAa,OAAA,CAAQ,SAAS,CAAA;AAC5C,IAAA,OAAOA,MAAAA,IAAS,EAAA;AAAA,EAClB,CAAA,MAAO;AACL,IAAA,QAAA,CAAS,KAAK,CAAA;AACd,IAAA,OAAO,KAAA;AAAA,EACT;AACF;AAEO,SAAS,UAAA,GAAa;AAC3B,EAAA,YAAA,CAAa,WAAW,SAAS,CAAA;AACnC;AAEA,IAAM,QAAA,GAAW,UAAA;AAEV,SAAS,WAAA,GAAc;AAC5B,EAAA,MAAM,IAAA,GAAO,YAAA,CAAa,OAAA,CAAQ,QAAQ,CAAA;AAC1C,EAAA,OAAO,CAAA,EAAG,QAAQ,UAAU,CAAA,CAAA;AAC9B;;;ACzBO,IAAM,EAAA,GAAK;AACX,IAAM,GAAA,GAAM;AACZ,IAAM,KAAA,GAAQ;AACd,IAAM,iBAAA,GAAoB;AAC1B,IAAM,YAAA,GAAe;AACrB,IAAM,SAAA,GAAY;AAClB,IAAM,SAAA,GAAY;AAClB,IAAM,iBAAA,GAAoB;AAC1B,IAAM,iBAAA,GAAoB;AAC1B,IAAM,aAAA,GAAgB;AACtB,IAAM,YAAA,GAAe;AACrB,IAAM,QAAA,GAAW;AACjB,IAAM,QAAA,GAAW;AASxB,IAAM,YAAA,GAAe,CAAC,OAAA,KAA0C;AAC9D,EAAA,MAAM,UAAkC,EAAC;AACzC,EAAA,IAAI,OAAA,EAAS,OAAA,IAAW,OAAA,CAAQ,OAAA,KAAY,QAAA,EAAU;AACpD,IAAA,OAAA,CAAQ,cAAc,CAAA,GAAI,mCAAA;AAAA,EAC5B;AACA,EAAA,OAAO,EAAE,OAAA,EAAS,GAAG,OAAA,EAAQ;AAC/B,CAAA;AAEA,IAAM,cAAc,MAAM;AACxB,EAAA,IAAA,CAAK,YAAY,EAAE,GAAA,EAAK,MAAM,WAAA,EAAa,IAAI,CAAA;AACjD,CAAA;AAEA,KAAA,CAAM,aAAa,OAAA,CAAQ,GAAA;AAAA,EACzB,SAAU,MAAA,EAAQ;AAChB,IAAA,MAAA,CAAO,OAAA,CAAQ,SAAS,CAAA,GAAI,QAAA,EAAS;AACrC,IAAA,IAAI,OAAO,GAAA,IAAO,CAAC,OAAO,GAAA,CAAI,UAAA,CAAW,OAAO,CAAA,EAAG;AACjD,MAAA,MAAA,CAAO,OAAA,GAAU,MAAA;AAAA,IACnB;AACA,IAAA,MAAA,CAAO,OAAA,GAAU,OAAO,OAAA,IAAW,GAAA;AACnC,IAAA,OAAO,MAAA;AAAA,EACT,CAAA;AAAA,EACA,SAAU,KAAA,EAAO;AACf,IAAA,OAAO,OAAA,CAAQ,OAAO,KAAK,CAAA;AAAA,EAC7B;AACF,CAAA;AAEA,KAAA,CAAM,aAAa,QAAA,CAAS,GAAA;AAAA,EAC1B,SAAU,QAAA,EAAU;AAClB,IAAA,IAAI,SAAS,IAAA,EAAM,IAAA,KAAS,MAAM,QAAA,CAAS,IAAA,EAAM,SAAS,GAAA,EAAK;AAC7D,MAAA,MAAM,YAAA,GAAe,QAAA,CAAS,IAAA,EAAM,IAAA,KAAS,iBAAA;AAC7C,MAAA,IAAK,QAAA,CAAS,MAAA,EAAgB,SAAA,KAAc,KAAA,EAAO;AACjD,QAAA,WAAA,CAAY;AAAA,UACV,KAAA,EAAO,eAAe,EAAA,GAAK,MAAA;AAAA,UAC3B,OAAA,EAAS,SAAS,IAAA,CAAK,OAAA;AAAA,UACvB,QAAA,EAAU,eAAe,CAAA,GAAI;AAAA,SAC9B,CAAA;AAAA,MACH;AACA,MAAA,OAAO,OAAA,CAAQ,MAAA,CAAO,QAAA,CAAS,IAAI,CAAA;AAAA,IACrC;AACA,IAAA,OAAO,QAAA;AAAA,EACT,CAAA;AAAA,EACA,SAAU,GAAA,EAAK;AACb,IAAA,MAAM,SAAA,GAAY,GAAA,EAAK,MAAA,EAAQ,SAAA,KAAc,KAAA;AAC7C,IAAA,IAAI,CAAC,IAAI,QAAA,EAAU;AACjB,MAAA,IAAI,WAAW,WAAA,CAAY,EAAE,SAAS,8DAAA,EAAc,IAAA,EAAM,SAAS,CAAA;AAAA,IACrE,CAAA,MAAO;AACL,MAAA,QAAQ,GAAA,CAAI,UAAU,MAAA;AAAQ,QAC5B,KAAK,YAAA;AACH,UAAA,IAAI,SAAA,EAAW,WAAA,CAAY,EAAE,OAAA,EAAS,GAAA,CAAI,UAAU,IAAA,CAAK,OAAA,EAAS,IAAA,EAAM,OAAA,EAAS,CAAA;AACjF,UAAA,WAAA,EAAY;AACZ,UAAA;AAAA,QACF,KAAK,SAAA;AAAA,QACL,KAAK,SAAA;AAAA,QACL,KAAK,KAAA;AAAA,QACL,KAAK,iBAAA;AAAA,QACL,KAAK,iBAAA;AACH,UAAA,IAAI,SAAA,EAAW,WAAA,CAAY,EAAE,OAAA,EAAS,GAAA,CAAI,UAAU,IAAA,CAAK,OAAA,EAAS,IAAA,EAAM,OAAA,EAAS,CAAA;AACjF,UAAA;AAAA,QACF;AACE,UAAA,IAAI,WAAW,WAAA,CAAY,EAAE,SAAS,wDAAA,EAAa,IAAA,EAAM,QAAQ,CAAA;AAAA;AACrE,IACF;AAEA,IAAA,OAAO,OAAA,CAAQ,OAAO,GAAG,CAAA;AAAA,EAC3B;AACF,CAAA;AAEA,IAAM,GAAA,GAAM,OAAO,GAAA,EAAa,MAAA,EAAc,OAAA,KAAsB;AAClE,EAAA,MAAM,GAAA,GAAM,MAAM,KAAA,CAAM,EAAE,MAAA,EAAQ,OAAO,GAAA,EAAK,MAAA,EAAQ,GAAG,OAAA,EAAS,CAAA;AAClE,EAAA,OAAO,GAAA,CAAI,IAAA;AACb,CAAA;AAEA,IAAM,IAAA,GAAO,OAAO,GAAA,EAAa,IAAA,EAAY,OAAA,KAAsB;AACjE,EAAA,MAAM,GAAA,GAAM,MAAM,KAAA,CAAM;AAAA,IACtB,MAAA,EAAQ,MAAA;AAAA,IACR,GAAA;AAAA,IACA,IAAA;AAAA,IACA,GAAG,aAAa,OAAO;AAAA,GACxB,CAAA;AACD,EAAA,OAAO,GAAA,CAAI,IAAA;AACb,CAAA;AAEA,IAAM,GAAA,GAAM,OAAO,GAAA,EAAa,IAAA,EAAY,OAAA,KAAsB;AAChE,EAAA,MAAM,GAAA,GAAM,MAAM,KAAA,CAAM,EAAE,MAAA,EAAQ,KAAA,EAAO,GAAA,EAAK,IAAA,EAAM,GAAG,YAAA,CAAa,OAAO,CAAA,EAAG,CAAA;AAC9E,EAAA,OAAO,GAAA,CAAI,IAAA;AACb,CAAA;AAEA,IAAM,GAAA,GAAM,OAAO,GAAA,EAAa,IAAA,EAAY,OAAA,KAAsB;AAChE,EAAA,MAAM,SAAA,GAAgC;AAAA,IACpC,MAAA,EAAQ,QAAA;AAAA,IACR,GAAA;AAAA,IACA,GAAG,aAAa,OAAO;AAAA,GACzB;AACA,EAAA,MAAM,MAAA,GAAS,SAAS,OAAA,KAAY,QAAA,GAAW,EAAE,MAAA,EAAQ,IAAA,EAAK,GAAI,EAAE,IAAA,EAAK;AACzE,EAAA,MAAM,GAAA,GAAM,MAAM,KAAA,CAAM,EAAE,GAAG,SAAA,EAAW,GAAG,QAAQ,CAAA;AACnD,EAAA,OAAO,GAAA,CAAI,IAAA;AACb,CAAA;AAEA,IAAO,eAAA,GAAQ;AAAA,EACb,GAAA;AAAA,EACA,IAAA;AAAA,EACA,GAAA;AAAA,EACA,MAAA,EAAQ;AACV;;;AC3GA,IAAM,eAAe,CAAC;AAAA,EACpB,GAAA;AAAA,EACA,SAAA;AAAA,EACA,OAAA;AAAA,EACA,iBAAA,GAAoB,GAAA;AAAA,EACpB,gBAAA,GAAmB,MAAA;AAAA,EACnB,eAAA,GAAkB,IAAA;AAAA,EAClB,iBAAA,GAAoB,GAAA;AAAA;AAAA,EACpB,oBAAA;AAAA;AAAA,EACA,WAAA,GAAc;AAAA;AAChB,CAAA,KAA8C;AAC5C,EAAA,MAAM,SAAA,GAAYH,OAAyB,IAAI,CAAA;AAC/C,EAAA,MAAM,oBAAA,GAAuBA,OAA4B,IAAI,CAAA;AAC7D,EAAA,MAAM,CAAC,gBAAA,EAAkB,mBAAmB,CAAA,GAAIC,SAAwB,IAAI,CAAA;AAC5E,EAAA,MAAM,oBAAA,GAAuBD,OAA4B,IAAI,CAAA;AAC7D,EAAA,MAAM,iBAAA,GAAoBA,OAAO,CAAC,CAAA;AAClC,EAAA,MAAM,YAAA,GAAeA,MAAAA,CAAO,QAAA,CAAS,eAAA,KAAoB,QAAQ,CAAA;AACjE,EAAA,MAAM,SAAA,GAAYA,OAAO,KAAK,CAAA;AAC9B,EAAA,MAAM,eAAA,GAAkBE,WAAAA,CAAY,SAAA,EAAW,CAAC,SAAS,CAAC,CAAA;AAE1D,EAAA,MAAM,cAAA,GAAiB,CAAC,aAAA,KAA6B;AACnD,IAAA,IAAI,CAAC,eAAA,EAAiB;AACpB,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,UAAA,GAAa,YAAY,MAAM;AACnC,MAAA,IAAI,aAAA,CAAc,UAAA,KAAe,SAAA,CAAU,IAAA,EAAM;AAC/C,QAAA,aAAA,CAAc,KAAK,gBAAgB,CAAA;AAAA,MACrC;AAAA,IACF,GAAG,iBAAiB,CAAA;AACpB,IAAA,oBAAA,CAAqB,OAAA,GAAU,UAAA;AAAA,EACjC,CAAA;AAGA,EAAA,MAAM,gBAAgB,MAAM;AAC1B,IAAA,IAAI,qBAAqB,OAAA,EAAS;AAChC,MAAA,aAAA,CAAc,qBAAqB,OAA4B,CAAA;AAAA,IACjE;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,qBAAqB,MAAM;AAE/B,IAAA,IAAI,qBAAqB,OAAA,EAAS;AAChC,MAAA,YAAA,CAAa,qBAAqB,OAA4B,CAAA;AAC9D,MAAA,oBAAA,CAAqB,OAAA,GAAU,IAAA;AAAA,IACjC;AAAA,EACF,CAAA;AAGA,EAAA,MAAM,eAAe,MAAM;AACzB,IAAA,IAAI,UAAU,OAAA,EAAS;AAEvB,IAAA,IAAI,WAAA,IAAe,CAAC,YAAA,CAAa,OAAA,EAAS;AACxC,MAAA,IAAA,CAAK,CAAC,QAAA,CAAS,oBAAoB,CAAA,IAAK,iBAAA,CAAkB,UAAU,oBAAA,KAAyB,aAAA,CAAc,oBAAA,CAAqB,OAAO,CAAA,EAAG;AACxI,QAAA,oBAAA,CAAqB,OAAA,GAAU,WAAW,MAAM;AAC9C,UAAA,OAAA,CAAQ,IAAI,CAAA,mBAAA,EAAO,iBAAA,CAAkB,OAAA,GAAU,CAAC,0BAAW,GAAG,CAAA;AAC9D,UAAA,iBAAA,CAAkB,OAAA,GAAU,kBAAkB,OAAA,GAAU,CAAA;AAExD,UAAA,wBAAA,EAAyB;AACzB,UAAA,kBAAA,EAAmB;AAAA,QACrB,GAAG,iBAAiB,CAAA;AAAA,MACtB,CAAA,MAAO;AACL,QAAA,IAAI,QAAA,CAAS,oBAAoB,CAAA,EAAG;AAClC,UAAA,OAAA,CAAQ,IAAI,4FAAiB,CAAA;AAAA,QAC/B;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,UAAA,GAAa,CAAC,SAAA,KAAyB;AAC3C,IAAA,OAAA,CAAQ,IAAI,0CAAiB,CAAA;AAC7B,IAAA,mBAAA,CAAoB,UAAU,UAAU,CAAA;AACxC,IAAA,cAAA,CAAe,SAAS,CAAA;AACxB,IAAA,iBAAA,CAAkB,OAAA,GAAU,CAAA;AAAA,EAC9B,CAAA;AAGA,EAAA,MAAM,aAAA,GAAgB,CAAC,KAAA,KAAwB;AAC7C,IAAA,IAAI,QAAA,CAAS,KAAA,CAAM,IAAI,CAAA,EAAG;AACxB,MAAA,IAAI;AACF,QAAA,MAAM,UAAA,GAAa,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,IAAI,CAAA;AACxC,QAAA,eAAA,GAAkB,UAAU,CAAA;AAC5B,QAAA,aAAA,EAAc;AACd,QAAA,cAAA,CAAe,UAAU,OAAoB,CAAA;AAAA,MAC/C,SAAS,KAAA,EAAO;AACd,QAAA,OAAA,CAAQ,KAAA,CAAM,2DAAc,KAAK,CAAA;AAAA,MACnC;AAAA,IACF;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,WAAA,GAAc,CAAC,KAAA,KAAsB;AACzC,IAAA,OAAA,CAAQ,GAAA,CAAI,0CAAA,EAAmB,KAAA,CAAM,IAAA,EAAM,MAAM,MAAM,CAAA;AACvD,IAAA,mBAAA,CAAoB,MAAM,IAAI,CAAA;AAC9B,IAAA,aAAA,EAAc;AACd,IAAA,OAAA,IAAU;AACV,IAAA,YAAA,EAAa;AAAA,EACf,CAAA;AAGA,EAAA,MAAM,WAAA,GAAc,CAAC,KAAA,KAAiB;AACpC,IAAA,OAAA,CAAQ,KAAA,CAAM,uCAAmB,KAAK,CAAA;AACtC,IAAA,mBAAA,CAAoB,IAAI,CAAA;AACxB,IAAA,aAAA,EAAc;AACd,IAAA,YAAA,EAAa;AAAA,EACf,CAAA;AAEA,EAAA,MAAM,2BAA2B,MAAM;AACrC,IAAA,MAAM,SAAA,GAAY,IAAI,SAAA,CAAU,GAAG,CAAA;AACnC,IAAA,SAAA,CAAU,OAAA,GAAU,SAAA;AACpB,IAAA,mBAAA,CAAoB,UAAU,UAAU,CAAA;AAExC,IAAA,SAAA,CAAU,MAAA,GAAS,MAAM,UAAA,CAAW,SAAS,CAAA;AAC7C,IAAA,SAAA,CAAU,SAAA,GAAY,aAAA;AACtB,IAAA,SAAA,CAAU,OAAA,GAAU,WAAA;AACpB,IAAA,SAAA,CAAU,OAAA,GAAU,WAAA;AAAA,EACtB,CAAA;AACA,EAAA,MAAM,yBAAyB,MAAM;AACnC,IAAA,YAAA,CAAa,OAAA,GAAU,SAAS,eAAA,KAAoB,QAAA;AACpD,IAAA,IAAI,SAAA,CAAU,OAAA,EAAS,UAAA,KAAe,SAAA,CAAU,IAAA,EAAM;AACpD,MAAA,YAAA,EAAa;AAAA,IACf;AAAA,EACF,CAAA;AAEA,EAAAH,UAAU,MAAM;AACd,IAAA,SAAA,CAAU,OAAA,GAAU,KAAA;AACpB,IAAA,wBAAA,EAAyB;AACzB,IAAA,MAAA,CAAO,gBAAA,CAAiB,oBAAoB,sBAAsB,CAAA;AAClE,IAAA,OAAO,MAAM;AAEX,MAAA,MAAA,CAAO,mBAAA,CAAoB,oBAAoB,sBAAsB,CAAA;AACrE,MAAA,SAAA,CAAU,OAAA,GAAU,IAAA;AACpB,MAAA,IAAI,UAAU,OAAA,EAAS;AACrB,QAAA,SAAA,CAAU,QAAQ,KAAA,EAAM;AACxB,QAAA;AAAA,MACF;AACA,MAAA,aAAA,EAAc;AACd,MAAA,kBAAA,EAAmB;AAAA,IACrB,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,GAAG,CAAC,CAAA;AAER,EAAA,MAAM,WAAA,GAAc,CAACK,QAAAA,KAAoB;AACvC,IAAA,IAAI,SAAA,CAAU,OAAA,EAAS,UAAA,KAAe,SAAA,CAAU,IAAA,EAAM;AACpD,MAAA,SAAA,CAAU,OAAA,CAAQ,KAAKA,QAAO,CAAA;AAC9B,MAAA,aAAA,EAAc;AACd,MAAA,cAAA,CAAe,UAAU,OAAO,CAAA;AAAA,IAClC;AAAA,EACF,CAAA;AAEA,EAAA,OAAO;AAAA,IACL,WAAA;AAAA,IACA;AAAA,GACF;AACF,CAAA;AAEA,IAAO,oBAAA,GAAQ;AC7If,IAAM,gBAAgB,CAAC;AAAA,EACrB,cAAA;AAAA,EACA,cAAA;AAAA,EACA;AACF,CAAA,KAAsF;AACpF,EAAA,MAAM,CAAC,IAAI,CAAA,GAAI,IAAA,CAAK,OAAA,EAAQ;AAC5B,EAAA,MAAM,WAAW,MAAY;AAC3B,IAAA,IAAA,CAAK,cAAA,EAAe,CAAE,IAAA,CAAK,CAAC,MAAA,KAAW;AACrC,MAAA,IAAI,MAAA,EAAQ;AACV,QAAA,cAAA,CAAe,OAAO,QAAQ,CAAA;AAC9B,QAAA,mBAAA,CAAoB,OAAO,QAAQ,CAAA;AAAA,MACrC;AAAA,IACF,CAAC,CAAA;AAAA,EACH,CAAA;AAEA,EAAA,uBACET,GAAAA,CAAC,IAAA,EAAA,EAAK,OAAA,EAAQ,QAAA,EAAS,OAAM,QAAA,EAAS,SAAA,EAAU,aAAA,EAC9C,QAAA,kBAAAC,KAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,KAAA,EAAO,KAAI,EACtB,QAAA,EAAA;AAAA,IAAA,cAAA,KAAmB,cAAA,CAAe,iCAAiBD,GAAAA,CAAC,SAAM,OAAA,EAAQ,oEAAA,EAAc,MAAK,OAAA,EAAQ,CAAA;AAAA,oBAC9FC,IAAAA,CAAC,IAAA,EAAA,EAAK,MAAY,IAAA,EAAK,OAAA,EAAQ,WAAU,QAAA,EACvC,QAAA,EAAA;AAAA,sBAAAD,GAAAA,CAAC,IAAA,CAAK,IAAA,EAAL,EAAU,IAAA,EAAK,YAAW,KAAA,EAAO,CAAC,EAAE,QAAA,EAAU,IAAA,EAAM,OAAA,EAAS,kCAAS,CAAA,EACrE,QAAA,kBAAAA,GAAAA,CAAC,KAAA,CAAM,QAAA,EAAN,EAAe,YAAA,EAAa,cAAA,EAAe,WAAA,EAAY,gCAAA,EAAQ,CAAA,EAClE,CAAA;AAAA,sBACAA,GAAAA,CAAC,IAAA,EAAA,EAAK,OAAA,EAAQ,QAAA,EACZ,QAAA,kBAAAA,GAAAA,CAAC,MAAA,EAAA,EAAO,IAAA,EAAK,SAAA,EAAU,OAAA,EAAS,QAAA,EAAU,2BAE1C,CAAA,EACF;AAAA,KAAA,EACF;AAAA,GAAA,EACF,CAAA,EACF,CAAA;AAEJ,CAAA;AAUA,IAAO,kBAAA,GAAQ,CAAC,EAAE,QAAA,EAAU,OAAA,EAAS,MAAA,GAAS,CAAA,EAAG,KAAA,GAAQ,CAAA,EAAG,eAAA,GAAkB,IAAA,EAAM,aAAA,EAAe,aAAY,KAAa;AAC1H,EAAA,MAAM,QAAA,GAAWK,OAAuB,IAAI,CAAA;AAC5C,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,IAAIC,QAAAA,CAAmB,CAAC,CAAC,CAAC,CAAA;AAChD,EAAA,MAAM,GAAG,YAAA,EAAc,YAAY,CAAA,GAAI,YAAY,KAAK,CAAA;AACxD,EAAA,MAAM,CAAC,WAAA,EAAa,cAAA,EAAgB,cAAc,CAAA,GAAI,YAAgC,MAAS,CAAA;AAC/F,EAAA,MAAM,CAAC,iBAAA,EAAmB,oBAAoB,CAAA,GAAIA,SAAS,EAAE,CAAA;AAC7D,EAAA,MAAM,eAAeD,MAAAA,EAAe;AACpC,EAAA,MAAM,mBAAA,GAAsB,CAACK,SAAAA,KAAqB;AAChD,IAAA,oBAAA,CAAqBA,SAAQ,CAAA;AAAA,EAC/B,CAAA;AAEA,EAAA,MAAM,4BAAA,GAA+B,oBAAA,CAAqB,EAAE,eAAA,EAAiB,MAAM,CAAA;AACnF,EAAA,MAAM,0BAA0B,eAAA,CAAgB;AAAA,IAC9C,cAAA,EAAgB,KAAA,CAAM,CAAC,CAAA,GAAI;AAAA;AAAA,GAC5B,CAAA;AACD,EAAA,MAAM,qBAAqB,UAAA,EAAW;AAMtC,EAAA,MAAM,EAAE,YAAW,GAAI,uBAAA;AACvB,EAAA,MAAM,EAAE,MAAA,EAAQ,OAAA,EAAQ,GAAI,kBAAA;AAM5B,EAAA,MAAM,OAAA,GAAU,sBACdT,IAAAA,CAAC,IAAA,EAAA,EAAK,GAAA,EAAK,CAAA,EAAG,KAAA,EAAM,QAAA,EAAS,SAAA,EAAW,qBAAA,CAAO,UAAA,EAC7C,QAAA,EAAA;AAAA,oBAAAD,IAAC,MAAA,EAAA,EAAO,CAAA;AAAA,oBACRA,IAAC,OAAA,EAAA,EAAQ;AAAA,GAAA,EAqBX,CAAA;AAEF,EAAA,MAAM,YAAA,GAAe,CAACW,OAAAA,KAAoB;AAExC,IAAA,IAAI,cAAa,EAAG;AAClB,MAAA,IAAIA,OAAAA,IAAUA,OAAAA,GAAS,CAAA,KAAM,cAAA,EAAe,EAAG;AAC7C,QAAA,YAAA,CAAa,UAAUA,OAAAA,GAAS,CAAA;AAChC,QAAA,4BAAA,CAA6B,UAAA,CAAW,aAAa,OAAO,CAAA;AAAA,MAC9D;AAAA,IACF;AAAA,EACF,CAAA;AACA,EAAA,MAAM,qBAAqB,MAAM;AAE/B,IAAA,QAAA,CAAS,CAAC,GAAG,CAAC,CAAA;AACd,IAAA,YAAA,CAAa,IAAI,CAAA;AACjB,IAAA,YAAA,CAAa,MAAM,CAAA;AACnB,IAAA,IAAI,iBAAA,EAAmB;AACrB,MAAA,aAAA,GAAgB,iBAAiB,CAAA;AACjC,MAAA,oBAAA,CAAqB,EAAE,CAAA;AAAA,IACzB;AAAA,EACF,CAAA;AACA,EAAAP,UAAU,MAAM;AAEd,IAAA,cAAA,CAAe,MAAS,CAAA;AACxB,IAAA,YAAA,CAAa,KAAK,CAAA;AAClB,IAAA,QAAA,CAAS,CAAC,CAAC,CAAC,CAAA;AAAA,EACd,CAAA,EAAG,CAAC,OAAO,CAAC,CAAA;AACZ,EAAAA,UAAU,MAAM;AAEd,IAAA,UAAA,CAAW,MAAM;AAEf,MAAA,YAAA,CAAa,MAAM,CAAA;AAAA,IACrB,GAAG,CAAC,CAAA;AAAA,EACN,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA;AACX,EAAA,MAAM,WAAA,GAAc,CAAC,KAAA,KAAqB;AACxC,IAAA,IAAIK,QAAAA,GAAU,EAAA;AACd,IAAA,QAAQ,MAAM,IAAA;AAAM,MAClB,KAAK,qBAAA;AACH,QAAAA,QAAAA,GAAU,kDAAA;AACV,QAAA;AAAA,MACF,KAAK,qBAAA;AACH,QAAAA,QAAAA,GAAU,gCAAA;AACV,QAAA;AAAA,MACF,KAAK,6BAAA;AACH,QAAAA,QAAAA,GAAU,kDAAA;AACV,QAAA;AAAA;AAAA;AAAA;AAAA,MAIF;AACE,QAAAA,QAAAA,GAAU,sCAAA;AACV,QAAA;AAAA;AAGJ,IAAA,uBACET,GAAAA,CAAC,IAAA,EAAA,EAAK,WAAU,aAAA,EAAc,OAAA,EAAQ,UAAS,KAAA,EAAM,QAAA,EACnD,QAAA,kBAAAA,GAAAA,CAAC,SAAM,OAAA,EAASS,QAAAA,EAAS,MAAK,OAAA,EAAQ,QAAA,EAAQ,MAAC,CAAA,EACjD,CAAA;AAAA,EAEJ,CAAA;AACA,EAAA,MAAM,YAAA,GAAe,CAAC,CAAA,KAAuB;AAE3C,IAAA,IAAI,iBAAiB,CAAA,CAAE,WAAA;AACvB,IAAA,IAAI,QAAA,CAAS,YAAA,CAAa,OAAO,CAAA,EAAG;AAElC,MAAA,cAAA,GAAiB,YAAA,CAAa,OAAA;AAC9B,MAAA,UAAA,CAAW,MAAM;AACf,QAAA,YAAA,CAAa,OAAA,GAAU,MAAA;AAAA,MACzB,GAAG,GAAI,CAAA;AAAA,IACT;AACA,IAAA,cAAA,CAAe,cAAc,CAAA;AAAA,EAC/B,CAAA;AACA,EAAAL,UAAU,MAAM;AAEd,IAAA,IAAI,EAAE,QAAA,CAAS,OAAA,IAAW,QAAA,CAAS,WAAW,CAAA,CAAA,EAAI;AAElD,IAAA,UAAA,CAAW,MAAM;AAEf,MAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,OAAA,EAAS,gBAAA,CAAiB,yCAAyC,CAAA;AAC1F,MAAA,KAAA,EAAO,OAAA,CAAQ,CAAC,IAAA,KAAS;AACvB,QAAA,IAAI,OAAO,IAAA,CAAK,YAAA,CAAa,oBAAoB,CAAC,MAAM,WAAA,EAAa;AACnE,UAAA,IAAA,CAAK,SAAA,CAAU,IAAI,wBAAwB,CAAA;AAAA,QAC7C,CAAA,MAAO;AAEL,UAAA,IAAA,CAAK,SAAA,CAAU,OAAO,wBAAwB,CAAA;AAAA,QAChD;AAAA,MACF,CAAC,CAAA;AAAA,IACH,GAAG,GAAG,CAAA;AACN,IAAA,WAAA,GAAc,cAAc,CAAC,CAAA;AAAA,EAC/B,CAAA,EAAG,CAAC,WAAW,CAAC,CAAA;AAchB,EAAA,uBACEJ,GAAAA,CAAC,KAAA,EAAA,EAAI,GAAA,EAAK,QAAA,EAAU,WAAW,qBAAA,CAAO,YAAA,EACpC,QAAA,kBAAAA,GAAAA,CAAC,UAAO,SAAA,EAAW,CAAA,yBAAA,CAAA,EACjB,0BAAAC,IAAAA,CAAC,QAAA,EAAA,EAAS,UAAU,QAAA,EACjB,QAAA,EAAA;AAAA,IAAA,eAAA,oBACCD,IAAC,QAAA,CAAS,KAAA,EAAT,EAAe,SAAA,EAAW,KAAA,EAAO,MAAM,KAAA,CAAM,CAAC,GAAG,GAAA,EAAK,GAAA,EAAK,KAAK,GAAA,EAAK,WAAA,EAAW,MAC/E,QAAA,kBAAAA,GAAAA,CAAC,cAAW,CAAA,EACd,CAAA;AAAA,oBAEFA,IAAC,QAAA,CAAS,KAAA,EAAT,EACC,QAAA,kBAAAC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,aAAA,EACb,QAAA,EAAA;AAAA,sBAAAD,GAAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,YAAA,EAAc,KAAA;AAAA,UACd,eAAA,EAAiB,IAAA;AAAA,UACjB,qBAAA,EAAuB,CAAC,CAAA,KAAM;AAG5B,YAAA,oBAAA,CAAqB,EAAE,CAAA;AACvB,YAAA,CAAA,CAAE,cAAA,CAAe,YAAY,EAAE,CAAA;AAAA,UACjC,CAAA;AAAA,UAEA,0BAAA,EAA4B,CAAC,OAAA,KAAqC;AAChE,YAAA,OAAO,MAAA,CAAO,MAAA,CAAO,EAAC,EAAG,OAAA,EAAS;AAAA;AAAA,cAEhC,aAAA,EAAe,IAAA;AAAA;AAAA,cACf,WAAA,EAAa,EAAE,eAAA,EAAiB,UAAA,EAAW;AAAA;AAAA;AAAA;AAAA,cAI3C,OAAA,EAAS,mCAAA;AAAA;AAAA,cACT,UAAA,EAAY,IAAA;AAAA;AAAA,cAEZ,eAAA,EAAiB,KAAA;AAAA;AAAA,cAEjB,mBAAA,EAAqB,4CAAA;AAAA;AAAA,cAErB,gBAAA,EAAkB;AAAA,aACnB,CAAA;AAAA,UACH,CAAA;AAAA,UACA,OAAA;AAAA,UACA,YAAA,EAAc,KAAA;AAAA,UAEd,OAAA,EAAS;AAAA,YACP,4BAAA;AAAA,YACA,uBAAA;AAAA,YACA;AAAA;AAAA;AAAA;AAAA,WAIF;AAAA,UACA,YAAA;AAAA,UAEA,WAAA;AAAA,UACA,cAAA,EAAgB,kBAAA;AAAA,UAChB,mBAAA,EAAqB,CAAC,WAAA,qBAAgBA,IAAC,aAAA,EAAA,EAAc,mBAAA,EAA2C,GAAG,WAAA,EAAa;AAAA;AAAA,OAClH;AAAA,sBACAA,IAAC,OAAA,EAAA,EAAQ;AAAA,KAAA,EACX,CAAA,EACF;AAAA,GAAA,EACF,GACF,CAAA,EACF,CAAA;AAEJ;AC/QA,IAAO,mBAAA,GAAQ,CAAC,EAAE,MAAA,EAAQ,SAAS,SAAA,EAAW,QAAA,EAAU,aAAY,KAAa;AAgB/E,EAAA,MAAM,OAAA,GAAUE,QAAQ,MAAM;AAC5B,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,uBAAOF,IAAC,KAAA,EAAA,EAAM,CAAA;AAAA,IAChB;AACA,IAAA,QAAQ,MAAA,EAAQ,aAAY;AAAG,MAC7B,KAAK,KAAA;AAAA,MACL,KAAK,KAAA;AAAA,MACL,KAAK,MAAA;AAAA,MACL,KAAK,KAAA;AACH,QAAA,uBAAOA,IAAC,KAAA,EAAA,EAAM,aAAA,EAAe,sBAAO,cAAA,EAAgB,GAAA,EAAK,OAAA,EAAS,GAAA,EAAI,0BAAA,EAAO,CAAA;AAAA,MAE/E,KAAK,KAAA;AACH,QAAA,uBAAOA,GAAAA,CAAC,kBAAA,EAAA,EAAW,OAAA,EAAmB,GAAG,WAAW,QAAA,EAAoB,CAAA;AAAA;AAAA,MAE1E,KAAK,KAAA;AAIH,QAAA,uBAAOA,GAAAA,CAAC,mBAAA,EAAA,EAAY,OAAA,EAAkB,CAAA;AAAA,MAExC,KAAK,KAAA;AACH,QAAA,uBAAOA,GAAAA,CAAC,mBAAA,EAAA,EAAY,OAAA,EAAkB,CAAA;AAAA,MAExC,KAAK,IAAA;AAAA,MACL,KAAK,UAAA;AACH,QAAA,uBAAOA,GAAAA,CAAC,uBAAA,EAAA,EAAgB,OAAA,EAAkB,WAAA,EAA0B,CAAA;AAAA,MAEtE;AACE,QAAA,uBAAOA,IAACY,MAAAA,EAAA,EAAO,UAAU,CAAA,yBAAA,EAAQ,MAAA,IAAU,EAAE,CAAA,+BAAA,CAAA,EAAU,CAAA;AAAA;AAC3D,EACF,CAAA,EAAG,CAAC,MAAA,EAAQ,OAAA,EAAS,SAAS,CAAC,CAAA;AAE/B,EAAA,uBACEZ,GAAAA,CAACa,IAAAA,EAAA,EAAK,OAAA,EAAQ,UAAS,KAAA,EAAM,QAAA,EAAS,SAAA,EAAU,aAAA,EAC7C,QAAA,EAAA,OAAA,EACH,CAAA;AAEJ;AC3DA,IAAO,yBAAA,GAAQ,CAAC,EAAE,IAAA,EAAM,OAAA,EAAS,MAAA,EAAQ,KAAA,GAAQ,0BAAA,EAAQ,OAAA,EAAS,QAAA,EAAU,UAAA,EAAY,SAAA,EAAW,kBAAiB,KAAa;AAC/H,EAAA,uBACEb,GAAAA,CAAC,MAAA,EAAA,EAAO,KAAA,EAAc,IAAA,EAAM,OAAO,KAAA,EAAM,MAAA,EAAO,IAAA,EAAY,OAAA,EAC1D,QAAA,kBAAAA,GAAAA;AAAA,IAAC,mBAAA;AAAA,IAAA;AAAA,MACC,OAAA;AAAA,MACA,MAAA;AAAA,MACA,QAAA;AAAA,MACA,UAAA;AAAA,MACA,SAAA;AAAA,MACA;AAAA;AAAA,GACF,EACF,CAAA;AAEJ;;;AC/BA,IAAAc,sBAAAA,GAAA;AAAA,EAAC,MAAA,EAAAC;AAAA,CAAA;ACaD,IAAO,cAAA,GAAQ,WAA2C,CAAC,EAAE,IAAI,GAAA,EAAK,SAAA,EAAW,MAAA,EAAO,EAAgB,GAAA,KAAQ;AAC9G,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIT,SAAS,KAAK,CAAA;AAC5C,EAAA,MAAM,QAAA,GAAWJ,QAAQ,MAAM;AAC7B,IAAA,OAAO,cAAA,CAAe,EAAE,CAAA,EAAG,IAAA,CAAK,GAAA,EAAI,EAAE,EAAG,eAAA,CAAgB,gBAAA,CAAiB,GAAA,EAAK,QAAA,CAAS,IAAI,CAAC,CAAC,CAAA;AAAA,EAChG,CAAA,EAAG,CAAC,GAAG,CAAC,CAAA;AACR,EAAA,MAAM,eAAe,MAAM;AACzB,IAAA,UAAA,CAAW,KAAK,CAAA;AAChB,IAAA,MAAA,IAAS;AAAA,EACX,CAAA;AACA,EAAAE,UAAU,MAAM;AACd,IAAA,UAAA,CAAW,IAAI,CAAA;AAAA,EACjB,CAAA,EAAG,CAAC,GAAG,CAAC,CAAA;AAER,EAAA,uBACEJ,GAAAA,CAAA,QAAA,EAAA,EACE,QAAA,kBAAAA,GAAAA,CAAC,IAAA,EAAA,EAAK,QAAA,EAAU,OAAA,EAAS,gBAAA,EAAiB,WAAA,EAAY,GAAA,EAAI,uBAAA,EACxD,QAAA,kBAAAA,GAAAA,CAAC,QAAA,EAAA,EAAO,EAAA,EAAQ,GAAA,EAAU,GAAA,EAAK,QAAA,EAAU,SAAA,EAAW,UAAA,CAAWc,sBAAAA,CAAO,MAAA,EAAQ,SAAS,CAAA,EAAG,MAAA,EAAQ,YAAA,EAAc,CAAA,EAClH,CAAA,EACF,CAAA;AAEJ,CAAC;ACjBD,SAAS,WAAc,IAAA,EAAgG;AACrH,EAAA,OAAO,WAAW,IAAI,CAAA,IAAM,QAAA,CAAS,IAAI,KAAK,CAAC,MAAA,CAAO,IAAI,CAAA,IAAK,cAAc,IAAA,IAAQ,IAAA,CAAK,QAAA,KAAa,MAAA,CAAO,IAAI,mBAAmB,CAAA;AACvI;AAEA,SAAS,aAAA,CAAiB,kBAAsE,KAAA,EAAW;AACzG,EAAA,IAAI,CAAC,kBAAkB,OAAO,IAAA;AAC9B,EAAA,OAAO,UAAA,CAAW,gBAAgB,CAAA,mBAAId,IAAC,gBAAA,EAAA,EAAkB,GAAI,OAAa,CAAA,GAAK,gBAAA;AACjF;AAEO,SAAS,cAAgC,EAAE,OAAA,GAAU,IAAA,EAAM,GAAA,EAAK,kBAAiB,EAA6B;AACnH,EAAA,IAAI,OAAA,KAAY,KAAA,IAAS,MAAA,CAAO,OAAO,GAAG,OAAO,IAAA;AAEjD,EAAA,IAAI,OAAA,KAAY,IAAA,IAAQ,OAAA,KAAY,MAAA,EAAW;AAC7C,IAAA,OAAO,cAAc,gBAAgB,CAAA;AAAA,EACvC;AAEA,EAAA,MAAM,EAAE,OAAA,GAAU,IAAA,EAAM,MAAA,EAAQ,OAAM,GAAI,OAAA;AAC1C,EAAA,IAAI,CAAC,SAAS,OAAO,IAAA;AACrB,EAAA,IAAI,MAAA,EAAQ;AACV,IAAA,OAAO,OAAO,MAAA,KAAW,UAAA,GAAa,MAAA,CAAO,GAAI,CAAA,GAAI,MAAA;AAAA,EACvD;AAGA,EAAA,OAAO,aAAA,CAAc,kBAAkB,KAAK,CAAA;AAC9C;AAEO,IAAM,YAAA,GAAe,CAAC,OAAA,KAC3B,OAAA,IAAW,IAAA,KAAS,UAAU,OAAO,CAAA,GAAI,OAAA,GAAU,OAAA,EAAS,OAAA,KAAY,KAAA;AAGnE,SAAS,UAAA,CAAW,SAA0C,KAAA,EAAyB;AAC5F,EAAA,IAAI,OAAA,KAAY,IAAA,IAAQ,OAAA,KAAY,MAAA,EAAW;AAC7C,IAAA,OAAO;AAAA,MACL;AAAA,KACF;AAAA,EACF;AACA,EAAA,IAAI,QAAA,CAAS,OAAO,CAAA,KAAM,OAAA,EAAS,YAAY,IAAA,IAAQ,OAAA,EAAS,YAAY,MAAA,CAAA,EAAY;AACtF,IAAA,OAAO;AAAA,MACL,KAAA,EAAO;AAAA,QACL,GAAG,KAAA;AAAA,QACH,GAAG,OAAA,EAAS;AAAA;AACd,KACF;AAAA,EACF;AACA,EAAA,OAAO,IAAA;AACT;ACrDA,IAAO,qBAAQ,CAAC,EAAE,IAAA,EAAM,SAAA,EAAW,UAAS,KAAa;AACvD,EAAA,OAAO,SAAA,mBACLA,GAAAA,CAAC,MAAA,EAAA,EAAO,IAAA,EAAY,KAAK,SAAA,EAAW,CAAA,mBAEpCA,GAAAA,CAAC,MAAA,EAAA,EAAO,IAAA,EAAY,WAAU,gBAAA,EAAiB,KAAA,EAAO,EAAE,eAAA,EAAiB,cAAA,EAAe,EACrF,QAAA,EAAA,QAAA,EAAU,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA,EAAG,iBAAA,EAAkB,EAC5C,CAAA;AAEJ","file":"index.esm.js","sourcesContent":[".nsPreviewImage {\n width: 100%;\n height: 100%;\n display: flex;\n justify-content: center;\n align-items: center;\n}\n.nsPreviewImage img {\n max-width: 100%;\n max-height: 100%;\n width: auto !important;\n}\n.nsPreviewPdf {\n width: 100%;\n height: 100%;\n overflow: auto;\n}\n.nsPreviewPdf .pdfToolbar {\n position: absolute;\n bottom: 20px;\n left: 50%;\n transform: translateX(-50%);\n background: #fff;\n padding: 8px 16px 6px;\n border-radius: 6px;\n box-shadow: 0 0 15px rgba(1, 1, 1, 0.1);\n}\n.nsPreviewPdf .pdfToolbar :global .rpv-core__tooltip-body {\n display: none;\n}\n.nsPreviewPdf :global .current-page-highlight::after {\n box-shadow: 0 0 10px var(--ant-color-primary);\n transition: box-shadow 0.3s;\n}\n.nsPreviewVideo {\n max-width: 100%;\n max-height: 100%;\n}\n.nsPreviewAudio {\n width: 100%;\n max-width: 400px;\n}\n","import styles from './styles.module.less'\ninterface Props {\n fileUrl: string\n}\n\nexport default ({ fileUrl }: Props) => {\n return (\n <audio controls className={styles.nsPreviewAudio}>\n <source src={fileUrl} type=\"audio/mpeg\" />\n 您的浏览器不支持 audio 标签。\n </audio>\n )\n}\n","import { ThemeConfig } from 'antd/lib'\nconst getPrimaryColor = () => {\n const searchParams = new URLSearchParams(location.search)\n const mainSource = searchParams.get('mainSource') || 'cube-uc'\n if (mainSource === 'cube-uc') {\n return '#34AFBE'\n } else if (mainSource === 'uc') {\n return '#FA541C'\n }\n}\n\nexport const LgPrimaryColor = getPrimaryColor()\n\nexport const themeConfig: ThemeConfig = {\n token: { colorPrimary: LgPrimaryColor, colorLink: LgPrimaryColor },\n cssVar: true\n}\n","import {\n FileExcelOutlined,\n FileGifOutlined,\n FileImageOutlined,\n FileJpgOutlined,\n FilePdfOutlined,\n FilePptOutlined,\n FileTextOutlined,\n FileUnknownOutlined,\n FileWordOutlined,\n FileZipOutlined,\n NotificationOutlined,\n VideoCameraOutlined\n} from '@ant-design/icons'\nimport { useMemo } from 'react'\nimport { LgPrimaryColor } from '../../utils/theme'\n\ninterface Props {\n suffix?: string\n fontSize?: number\n}\nexport default ({ suffix, fontSize = 22 }: Props) => {\n const styles = { fontSize, color: LgPrimaryColor }\n const Icon = useMemo(() => {\n switch (suffix?.toUpperCase()) {\n case 'TXT':\n return <FileTextOutlined />\n case 'PDF':\n return <FilePdfOutlined />\n case 'DOC':\n case 'DOCX':\n return <FileWordOutlined />\n case 'XLS':\n case 'XLSX':\n return <FileExcelOutlined />\n case 'PPT':\n return <FilePptOutlined />\n case 'MP4':\n case 'MOV':\n case 'AVI':\n case 'FLV':\n return <VideoCameraOutlined />\n case 'MP3':\n return <NotificationOutlined />\n case 'JPG':\n case 'JPEG':\n return <FileJpgOutlined />\n case 'PNG':\n return <FileImageOutlined />\n case 'GIF':\n return <FileGifOutlined />\n case 'ZIP':\n case 'RAR':\n case '7Z':\n return <FileZipOutlined />\n case 'CATALOG':\n return <i style={styles} className=\"iconfont icon-wenjianjia\" /> // 文件夹\n default:\n return <FileUnknownOutlined />\n }\n }, [suffix])\n return <span style={styles}>{Icon}</span>\n}\n","// // components/VideoPlayer.tsx\n// import { useEffect, useRef } from 'react'\n// import videojs from 'video.js'\n// import Player from 'video.js/dist/types/player'\n// import 'video.js/dist/video-js.css'\n\n// interface VideoPlayerProps {\n// fileUrl: string // 视频地址\n// poster?: string // 可选封面图\n// }\n\n// export default ({ fileUrl, poster }: VideoPlayerProps) => {\n// const videoRef = useRef<HTMLVideoElement | null>(null)\n// const playerRef = useRef<Player | null>(null)\n\n// useEffect(() => {\n// if (videoRef.current && !playerRef.current) {\n// playerRef.current = videojs(videoRef.current, {\n// controls: true,\n// preload: 'auto',\n// autoplay: false,\n// playbackRates: [0.5, 1, 1.5, 2], // 倍速选项\n// fluid: true,\n// poster,\n// sources: [\n// {\n// src: fileUrl,\n// type: 'video/mp4'\n// }\n// ]\n// })\n// }\n\n// return () => {\n// if (playerRef.current) {\n// playerRef.current.dispose()\n// playerRef.current = null\n// }\n// }\n// }, [fileUrl, poster])\n\n// return (\n// <div data-vjs-player>\n// <video ref={videoRef} className=\"video-js vjs-default-skin\" />\n// </div>\n// )\n// }\n\nimport styles from './styles.module.less'\n\ninterface Props {\n fileUrl: string\n}\n// http://vjs.zencdn.net/v/oceans.mp4\nexport default ({ fileUrl }: Props) => {\n return (\n <video controls className={styles.nsPreviewVideo}>\n <source src={fileUrl} type=\"video/mp4\" />\n 您的浏览器不支持 video 标签。\n </video>\n )\n}\n","import { Suspense, lazy, useMemo } from 'react'\n\nexport type ComponentMapType = Record<\n string,\n () => Promise<{\n default: React.ComponentType<any>\n }>\n>\n\nconst baseComponentMap: ComponentMapType = {\n // renderMarkdown: () => import('@/components/RenderMarkdown')\n}\n\ntype Props = {\n type: string\n customComponents?: ComponentMapType\n [key: string]: any\n}\n// 延时加载组件\n// 例子: <LazyComponent type=renderMarkdown data={} loading={true} />\nexport default ({ type, customComponents, ...rest }: Props) => {\n const componentMap = useMemo(() => {\n return { ...baseComponentMap, ...customComponents }\n }, [customComponents])\n const LazyComponent = useMemo(() => {\n const loader = componentMap[type]\n return loader ? lazy(loader) : null\n }, [type, componentMap])\n\n // {type}-{JSON.stringify(rest.data)}-{String(rest.loading)}\n if (!LazyComponent) return <div>未知类型:{type}</div>\n\n return (\n <Suspense fallback={<div>加载中...</div>}>\n <LazyComponent {...rest} />\n </Suspense>\n )\n}\n","import parse, { Element } from 'html-react-parser'\nimport { jsonrepair } from 'jsonrepair'\nimport markdownit from 'markdown-it'\nimport container from 'markdown-it-container'\nimport MarkdownIt from 'markdown-it/index.js'\nimport { useMemo } from 'react'\nimport LazyComponent, { ComponentMapType } from '../LazyComponent'\nimport './markdown.less'\n\ninterface Props {\n content?: string\n searchValue?: string\n customComponents?: ComponentMapType\n onChange?: (value: string) => void\n onPartialChange?: (oldValue: string, newValue: string) => void\n}\n\nconst md = markdownit({ html: true, breaks: true })\nmd.renderer.rules.link_open = function (tokens, idx, options, env, self) {\n const token = tokens[idx]\n token.attrPush(['target', '_blank'])\n return self.renderToken(tokens, idx, options)\n}\nconst replaceSpecialCharacter = (str: string) => {\n return str.replace(/</g, '&lt;').replace(/>/g, '&gt;')\n // .replace(/&amp;/g, '&')\n // .replace(/&quot;/g, '\"')\n // .replace(/&apos;/g, \"'\")\n}\nfunction parseParams(info: string) {\n const params: Record<string, string> = {}\n const regex = /(\\w+)\\s*=\\s*(?:(['\"])(.*?)\\2|(\\S+))/g\n let match\n\n while ((match = regex.exec(info)) !== null) {\n const key = match[1]\n const value = match[3] ?? match[4] ?? ''\n\n if (key === 'data') {\n let obj = {}\n try {\n obj = JSON.parse(value)\n } catch {\n try {\n obj = JSON.parse(jsonrepair(value))\n } catch {\n obj = {}\n }\n }\n params[key] = replaceSpecialCharacter(JSON.stringify(obj))\n } else {\n params[key] = value\n }\n }\n\n return params\n}\n\n// `:::alert type=info data={data:\"123\"} ::: 你好 :::alert type=info data={data:234} ::: `\n// 支持 ::alert 块\nmd.use(container, 'alert', {\n validate: (params: string) => /^alert/.test(params.trim()),\n render: function (tokens: MarkdownIt.Token[], idx: number) {\n const token = tokens[idx]\n if (token.nesting === 1) {\n // 提取参数\n const info = token.info.trim()\n const params = parseParams(info)\n return `<lazy-component ${Object.entries(params)\n .map(([key, value]) => `${key}=${value}`)\n .join(' ')}>`\n } else {\n return '</lazy-component>'\n }\n }\n})\n\n// ==== 新增:单行 :::alert xxx ::: 解析器 ====\n// 在 markdown-it 渲染之前预处理\nfunction preprocess(content: string) {\n return content.replace(\n /:::alert([\\s\\S]*?):::/g, // 匹配 :::alert ... :::\n (match, params) => {\n return `\\n :::alert ${params.trim()} \\n ::: \\n` // 转换成标准多行写法\n }\n )\n}\n\nfunction highlightKeywords(html: string, keywords: string[]) {\n const escaped = keywords.map((k) => k.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&'))\n const regex = new RegExp(`(${escaped.join('|')})`, 'gi')\n return html.replace(regex, '<span class=\"cube-hl\">$1</span>')\n}\n\nexport default ({ content = '', searchValue, customComponents, onChange, onPartialChange }: Props) => {\n const reactContent = useMemo(() => {\n if (!content) return null\n\n let fixedContent = content\n // === 1. 检查是否缺失结束符 ===\n const openCount = (fixedContent.match(/:::alert\\b/g) || []).length\n const closeCount = (fixedContent.match(/\\s*:::\\s*/gm) || []).length - openCount\n let incomplete = false\n if (openCount > closeCount) {\n incomplete = true\n fixedContent += ':::'\n }\n // === 2. 预处理,确保单行语法也能识别 ===\n fixedContent = preprocess(fixedContent)\n\n // === 3. 渲染 markdown ===\n let rawHtml = md.render(fixedContent)\n\n // === 4. 关键词高亮(可选) ===\n rawHtml = searchValue ? highlightKeywords(rawHtml, [searchValue]) : rawHtml\n\n // === 5. 转换成 React ===\n let lazyIndex = -1\n const allLazyMatches = [...rawHtml.matchAll(/<lazy-component/gi)]\n const lastLazyIndex = allLazyMatches.length - 1\n\n return parse(rawHtml, {\n replace: (domNode) => {\n if ((domNode as Element).name === 'lazy-component') {\n lazyIndex++\n const el = domNode as Element\n // const children = domToReact(el.children as DOMNode[])\n const type = el.attribs.type\n\n const data = JSON.parse(el.attribs.data || '{}')\n\n const loading = incomplete && lazyIndex === lastLazyIndex\n return (\n <LazyComponent\n key={`${type}${lazyIndex}`}\n type={type}\n data={data}\n loading={loading}\n customComponents={customComponents}\n onChange={onChange}\n onPartialChange={onPartialChange}\n />\n )\n }\n }\n })\n }, [content, searchValue])\n\n return <div className=\"ns-markdown\">{reactContent}</div>\n}\n\n// `:::alert type=info data={data:\"123\"} \\n::: \\n你好 \\n:::alert type=info data={data:234} \\n::: `\n// return <RenderMarkdown content={`<think> \\n ### 你好你好你好你好</think> `} />\n","import { Result } from 'antd'\nimport { useEffect, useState } from 'react'\nimport RenderMarkdown from '../RenderMarkdown'\ninterface Props {\n fileUrl: string\n searchValue?: string\n}\n\nexport default ({ fileUrl, searchValue }: Props) => {\n const [content, setContent] = useState('')\n const [error, setError] = useState('')\n const fetchMarkdown = async () => {\n const res = await fetch(fileUrl)\n\n if (res.status !== 200) {\n throw new Error(`请求失败,状态码: ${res.status}`)\n }\n\n const markdownText = await res.text()\n\n if (!markdownText) {\n throw new Error('返回内容为空')\n }\n setContent(markdownText)\n }\n const init = async () => {\n setContent('')\n setError('')\n if (fileUrl) {\n try {\n await fetchMarkdown()\n } catch (error) {\n // console.error('加载或解析 Markdown 失败:', error)\n setError('加载或解析 Markdown 失败')\n }\n }\n }\n\n useEffect(() => {\n init()\n }, [fileUrl])\n return error ? (\n <Result status=\"error\" title={error} />\n ) : (\n <div className=\"height-full\">\n <RenderMarkdown content={content} searchValue={searchValue} />\n </div>\n )\n}\n","import { createContext, ReactNode, useContext } from 'react'\n\n/**\n * 通用的 Valtio Context 工厂\n * 支持:\n * - useStore() 获取 store 实例\n */\nexport function createValtioContext<T extends object>() {\n const Context = createContext<T | null>(null)\n\n const ValtioProvider = ({ store, children }: { store: T; children?: ReactNode }) => <Context.Provider value={store}>{children}</Context.Provider>\n\n const useValtioStore = (): T => {\n const store = useContext(Context)\n if (!store) throw new Error('useStore must be used within Provider')\n return store\n }\n\n return {\n ValtioProvider,\n useValtioStore\n // Context\n }\n}\n","export type Params = Record<string, any>\ntype Payload<P = Params> = { type: string; data?: P; to?: 'parent' | 'top' | 'child' }\n/**\n * 通知当前页面的父页面或者顶级窗口\n */\nexport function emit(type: string, data?: Params, to: 'parent' | 'top' = 'top') {\n const payload: Payload = { type, data, to }\n try {\n window.parent.postMessage(payload, '*')\n } catch (err) {\n console.warn('emit parent failed', err)\n }\n}\n/**\n * 通知某个子 iframe 窗口(必须传入 iframe.contentWindow)\n */\nexport function emitToChild(iframeWindow: Window | null, type: string, data?: Params, origin: string = '*') {\n if (!iframeWindow) {\n console.warn('emitToChild failed: iframeWindow is null')\n return\n }\n const payload: Payload = { type, data, to: 'child' }\n try {\n iframeWindow.postMessage(payload, origin)\n } catch (err) {\n console.warn('emit to child failed', err)\n }\n}\n","const toString = Object.prototype.toString\n\nexport function is(val: unknown, type: string) {\n return toString.call(val) === `[object ${type}]`\n}\n\nexport function isUnDef<T = unknown>(val?: T): val is T {\n return is(val, 'Undefined')\n}\n\nexport function isDef<T = unknown>(val?: T): val is T {\n return !isUnDef(val)\n // return typeof val !== 'undefined'\n}\n// 仅判断为对象时,dete, FormData不算\nexport function isObject(val: any): val is Record<any, any> {\n return is(val, 'Object')\n}\n\nexport function isEmptyObj<T = unknown>(val: T): boolean {\n if (isObject(val)) {\n return Object.keys(val).length === 0\n }\n return false\n}\n\nexport function isDate(val: unknown): val is Date {\n return is(val, 'Date')\n}\n\nexport function isNull(val: unknown): val is null {\n return is(val, 'Null')\n // return val === null\n}\n\nexport function isNullOrUnDef(val: unknown): val is null | undefined {\n return isUnDef(val) || isNull(val)\n}\n\nexport function isNumber(val: unknown): val is number {\n return is(val, 'Number')\n}\n\nexport function isNumberNoNaN(val: unknown): val is number {\n return is(val, 'Number') && !isNaN(val as number)\n}\n\nexport function isString(val: unknown): val is string {\n return is(val, 'String')\n}\n\nexport function isFunction(val: unknown) {\n return is(val, 'Function')\n // return typeof val === 'function'\n}\n\nexport function isPromise<T = any>(val: unknown): val is Promise<T> {\n return is(val, 'Promise') && isObject(val) && isFunction(val.then) && isFunction(val.catch)\n}\n\nexport function isBoolean(val: unknown): val is boolean {\n return is(val, 'Boolean')\n}\n\nexport function isRegExp(val: unknown): val is RegExp {\n return is(val, 'RegExp')\n}\n\nexport function isArray(val: any): val is Array<any> {\n return Array.isArray(val)\n}\n\nexport function isEmpty<T = unknown>(val: T): val is T {\n if (isArray(val) || isString(val)) {\n return val.length === 0\n }\n\n if (isNullOrUnDef(val)) {\n return true\n }\n\n if (val instanceof Map || val instanceof Set) {\n return val.size === 0\n }\n\n // if (isObject(val)) {\n // return Object.keys(val).length === 0\n // }\n\n // return false\n return isEmptyObj(val)\n}\n\nexport function isWindow(val: any): val is Window {\n return typeof window !== 'undefined' && is(val, 'Window')\n}\n\nexport function isElement(val: unknown): val is Element {\n return isObject(val) && !!val.tagName\n}\n\nexport function isMap(val: unknown): val is Map<any, any> {\n return is(val, 'Map')\n}\n\nexport const isServer = typeof window === 'undefined'\n\nexport const isClient = !isServer\n\n/**\n * 判断是否是外链\n * @param {string} path\n * @returns {Boolean}\n * @author LiQingSong\n */\nexport const isExternal = (path: string): boolean => {\n return /^(https?:|mailto:|tel:)/.test(path)\n}\n\nexport const isBlob = (val: unknown) => {\n return is(val, 'Blob')\n}\n","import { useEffect, useRef } from 'react'\nimport { isObject } from '../../utils/is'\nimport { Params } from './iframeRelay'\n\ntype Handler<P = Params> = (params: P, source?: MessageEventSource | null, origin?: string) => void\n\nexport function useIframeRelayBridge(allowedOrigins: string[] = ['*']) {\n const handlers = useRef<Record<string, Handler[]>>({})\n\n useEffect(() => {\n const onMessage = (evt: MessageEvent) => {\n const { data, source, origin } = evt\n if (!data || !isObject(data) || !data.type) return\n if (allowedOrigins[0] !== '*' && !allowedOrigins.includes(origin)) return\n\n const { type, data: params, to = 'parent' } = data\n // 如果目标是顶层 但当前不是顶层,则继续向父级转发\n const isTop = window.parent === window\n if (to === 'top' && !isTop) {\n window.parent.postMessage(data, allowedOrigins[0] === '*' ? '*' : origin)\n return\n }\n\n // 其余消息(包括 to: 'child' | 'parent'),触发本层 handler\n const fns = handlers.current[type] || []\n fns.forEach((fn) => fn(params, source, origin))\n }\n window.addEventListener('message', onMessage)\n return () => window.removeEventListener('message', onMessage)\n }, [allowedOrigins])\n\n function on(type: string, handler: Handler<Params>) {\n handlers.current[type] = handlers.current[type] || []\n handlers.current[type].push(handler)\n }\n\n function off(type: string, handler: Handler<Params>) {\n handlers.current[type] = (handlers.current[type] || []).filter((fn) => fn !== handler)\n }\n\n return { on, off }\n}\n","import { useCallback, useEffect, useRef } from 'react'\n/**\n * 防抖hook\n * @param func 需要执行的函数\n * @param wait 延迟时间\n */\nexport function useDebounce<A extends Array<any>, R = void>(func: (..._args: A) => R, wait: number = 400) {\n const { current } = useRef({ func, timeOut: null } as { func: (..._args: A) => R; timeOut: null | NodeJS.Timeout })\n useEffect(() => {\n // console.log('useDebounce0', current.timeOut)\n current.func = func\n }, [func])\n\n let args: A\n // console.log('useDebounce', timeOut)\n function debounce(..._args: A) {\n // console.log('useDebounce2', timeOut)\n args = _args\n if (current.timeOut) {\n clearTimeout(current.timeOut)\n current.timeOut = null\n }\n return new Promise<R>((resolve, reject) => {\n current.timeOut = setTimeout(async () => {\n try {\n const result = await current.func.apply(null, args)\n resolve(result)\n } catch (e) {\n reject(e)\n }\n }, wait)\n })\n }\n //取消\n function cancel() {\n if (!current.timeOut) return\n clearTimeout(current.timeOut)\n current.timeOut = null\n }\n //立即执行\n function flush() {\n cancel()\n return current.func.apply(null, args)\n }\n debounce.flush = flush\n debounce.cancel = cancel\n return useCallback(debounce, [])\n}\n","import { isArray, isExternal, isNullOrUnDef, isObject } from './is'\n\n// 深拷贝\nexport const deepCopy: <T>(arg: T, isJson?: boolean) => T = (obj, isJson = true) => {\n if (!isArray(obj) && !isObject(obj)) return obj\n if (isJson) return JSON.parse(JSON.stringify(obj))\n const result: any = isArray(obj) ? [] : {}\n for (const key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n result[key] = deepCopy((obj as any)[key], isJson) //递归复制\n }\n }\n return result\n}\n\n// 两对象是否相等\n// function isObject(value: any) {\n// return value !== null && typeof value === 'object'\n// }\n\nexport function deepEqual(a: any, b: any): boolean {\n if (Object.is(a, b)) return true\n\n // === 特殊类型处理 ===\n if (a instanceof Date && b instanceof Date) return a.getTime() === b.getTime()\n if (a instanceof RegExp && b instanceof RegExp) return a.toString() === b.toString()\n if (a instanceof Map && b instanceof Map) {\n if (a.size !== b.size) return false\n for (const [key, val] of a.entries()) {\n if (!b.has(key) || !deepEqual(val, b.get(key))) return false\n }\n return true\n }\n if (a instanceof Set && b instanceof Set) {\n if (a.size !== b.size) return false\n for (const val of a.values()) {\n if (!b.has(val)) return false\n }\n return true\n }\n\n // 数组\n if (Array.isArray(a) && Array.isArray(b)) {\n if (a.length !== b.length) return false\n return a.every((item, i) => deepEqual(item, b[i]))\n }\n\n // 函数(通过字符串比较)\n if (typeof a === 'function' && typeof b === 'function') return a.toString() === b.toString()\n\n // 对象递归\n if (isObject(a) && isObject(b)) {\n const keysA = Object.keys(a)\n const keysB = Object.keys(b)\n if (keysA.length !== keysB.length) return false\n for (const key of keysA) {\n if (!deepEqual(a[key], b[key])) return false\n }\n return true\n }\n\n return false\n}\nexport const deepMerge = <T extends Record<string, any>>(base: T, override: Partial<T>): T => {\n const result = { ...base }\n\n Object.keys(override || {}).forEach((key: keyof T) => {\n const baseValue = base[key]\n const overrideValue = override[key]\n\n if (\n typeof baseValue === 'object' &&\n baseValue !== null &&\n !isArray(baseValue) &&\n typeof overrideValue === 'object' &&\n overrideValue !== null &&\n !isArray(overrideValue)\n ) {\n // 递归合并对象\n result[key] = deepMerge(baseValue, overrideValue)\n } else if (overrideValue !== undefined) {\n // 覆盖简单值\n result[key] = overrideValue as any\n }\n })\n\n return result\n}\n\nexport const objToOptions = (obj: ObjectType<string>) => {\n return Object.keys(obj).map((key) => ({\n label: obj[key],\n value: Number(key)\n }))\n}\n\n// 数组转对象\nexport const arrToObj = <T>(arr: T[] = [], key: string) => {\n const obj = {} as { [key: string]: T }\n arr?.forEach((item: any) => {\n obj[item[key]] = item\n })\n return obj\n}\n// 使用setTimeout模仿setInterval\nexport interface NsSetIntervalReturnType {\n isRun: () => boolean\n cancel: () => void\n}\n\nexport const nsSetInterval = (fn: () => void, t: number): NsSetIntervalReturnType => {\n let timer: NodeJS.Timeout | null = null\n let isCancelled = false\n\n const interval = () => {\n timer = setTimeout(async () => {\n if (isCancelled) {\n return\n }\n\n await fn()\n\n if (!isCancelled) {\n interval()\n }\n }, t)\n }\n interval()\n return {\n isRun: () => !!timer,\n cancel: () => {\n isCancelled = true\n if (timer) {\n clearTimeout(timer)\n timer = null\n }\n }\n }\n}\n\n// 生成唯一值\nexport const genNonDuplicateID = () => {\n let idStr = Date.now().toString(36)\n idStr += Math.random().toString(36).substr(2)\n return idStr\n}\n\n// 复制text到剪切板\nexport const copyText = (text: string) => {\n // navigator clipboard 需要https等安全上下文\n if (navigator.clipboard && window.isSecureContext) {\n // navigator clipboard 向剪贴板写文本\n return navigator.clipboard.writeText(text)\n } else {\n // 创建text area\n const textArea = document.createElement('textarea')\n textArea.value = text\n // 使text area不在viewport,同时设置不可见\n textArea.style.position = 'absolute'\n textArea.style.opacity = '0'\n textArea.style.left = '-999999px'\n textArea.style.top = '-999999px'\n document.body.appendChild(textArea)\n textArea.focus()\n textArea.select()\n return new Promise<void>((res, rej) => {\n // 执行复制命令并移除文本框\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n document.execCommand('copy') ? res() : rej()\n textArea.remove()\n })\n }\n}\n\n/**\n * 把后台接口字段,返回的关于金额的数字,转换为千分符号分隔的数字\n * return string\n */\nexport function formatNumberWithCommas(number: number | string) {\n // 将输入值转换为数字,以处理字符串数字的情况\n const numericValue = parseFloat(number as string)\n\n if (!isNaN(numericValue)) {\n return numericValue.toLocaleString()\n }\n return number\n}\nexport const generateRandomNumbers = (min: number, max: number, count: number) => {\n const randomNumbers = new Set()\n while (randomNumbers.size < count) {\n const randomNumber = Math.floor(Math.random() * (max - min + 1)) + min\n randomNumbers.add(randomNumber)\n }\n return Array.from(randomNumbers) as number[]\n}\nexport const getFileName = (filePath: string) => {\n return filePath.split('?')[0].split('/').pop() || ''\n}\n\n// 将textArea换行处理\nexport const textAreaView = (con?: string) => {\n return con ? con.replace(/\\r\\n/g, '\\n').replace(/\\n/g, '<br/>') : ''\n}\n\n/**\n * 将对象转换为 URL 查询参数字符串\n * @param obj - 要转换的对象\n * @param url - 要拼接的 URL,如果未提供,则返回查询参数字符串\n * @returns URL 查询参数字符串\n */\nexport const buildUrlParams = (obj: Record<string, any>, url?: string): string => {\n const params = Object.entries(obj)\n .filter(([, value]) => !isNullOrUnDef(value)) // 过滤掉 undefined 和 null\n .map(([key, value]) => {\n if (isArray(value)) {\n // 处理数组,例如 { ids: [1, 2] } => 'ids=1&ids=2'\n return value\n .filter((v) => !isNullOrUnDef(v)) // 过滤掉数组中的 undefined 和 null\n .map((v) => `${encodeURIComponent(key)}=${encodeURIComponent(v)}`)\n .join('&')\n }\n return `${encodeURIComponent(key)}=${encodeURIComponent(value)}`\n })\n .join('&')\n\n if (url) {\n const separator = url.includes('?') ? '&' : '?'\n return `${url}${separator}${params}`\n }\n\n return params\n}\nexport const downloadFile = (url: string, name?: string) => {\n const a = document.createElement('a')\n a.download = name || '图片下载'\n a.href = url\n document.body.appendChild(a)\n a.click()\n document.body.removeChild(a)\n}\n\n/**\n * 给URL路径最后加/\n */\nexport const addUrlLastSlash = (url: string = '') => {\n // if (!url) return url\n // 尝试当成完整 URL 解析\n const u = new URL(url, 'https://logosdata.cn') // 如果是相对路径,用个基准域名\n let pathname = u.pathname\n\n if (!pathname.endsWith('/')) {\n pathname += '/'\n }\n\n // 替换 pathname\n u.pathname = pathname\n\n return `${isExternal(url) ? u.origin : ''}${u.pathname}${u.search}${u.hash}`\n}\n\n/**\n * 给url增加mainSource参数\n */\nexport const getUrlMainSource = (url: string, preHref?: string) => {\n if (!preHref) return url\n let newUrl = ''\n const preHrefUrl = new URL(preHref)\n // 解析 url 中已有的参数\n const urlParts = url.split('?')\n const srcParams = new URLSearchParams(urlParts[1] || '')\n // 如果 src 中已经存在 mainSource 参数,则直接返回原始 src\n if (srcParams.has('mainSource')) {\n newUrl = url\n } else {\n const mainSource = preHrefUrl.searchParams.get('mainSource')\n if (mainSource) {\n newUrl = buildUrlParams({ mainSource }, url)\n } else {\n newUrl = url\n }\n }\n return newUrl\n}\n\n/**\n * 获取 WebSocket 地址\n * @param path WebSocket 服务路径,比如 \"/ws\" 或 \"/socket\"\n * @param customHost 可选,指定 host:port;默认取当前 window.location.host\n */\nexport const getWebSocketUrl = (path: string, customHost?: string) => {\n // 根据页面协议决定 ws / wss\n const protocol = window.location.protocol === 'https:' ? 'wss:' : 'ws:'\n const host = customHost || window.location.host\n\n // 统一拼接\n return `${protocol}//${host}${path}`\n}\n","import { useEffect, useRef } from 'react'\nimport { deepEqual } from '../utils/common'\n\n/**\n * useDeepEffect\n * 深层对比依赖项的 useEffect\n */\nexport function useDeepEffect(effect: React.EffectCallback, deps: any[]) {\n const prevDepsRef = useRef<any[]>()\n\n const depsChanged =\n !prevDepsRef.current || deps.length !== prevDepsRef.current.length || deps.some((dep, i) => !deepEqual(dep, prevDepsRef.current![i]))\n\n useEffect(() => {\n if (depsChanged) {\n prevDepsRef.current = deps\n return effect()\n }\n }, [depsChanged]) // 注意:这里用 depsChanged 控制触发\n}\n","import { useRef, useState } from 'react'\n\n// type StateType = number | string | object | any[] | null\nexport function useRefState<T>(init: T) {\n const [state, setState] = useState(init)\n const stateRef = useRef(init)\n const setProxy = (newVal: T) => {\n stateRef.current = newVal\n setState(newVal)\n }\n const getState = () => stateRef.current\n return [state, setProxy, getState] as const\n}\n","import { useEffect, useState } from 'react'\n\n// 不知道什么原因,如果直接使用store中的content,输入中文会因为连续渲染关闭中文输入法\n// 主要用于解决输入中文时的渲染问题。\nexport const useSyncInput = <T>(storeValue: T, setStoreValue: (value: T) => void) => {\n const [inputValue, setInputValue] = useState<T>(storeValue)\n\n useEffect(() => {\n if (storeValue !== inputValue) {\n setInputValue(storeValue)\n }\n }, [storeValue])\n\n const handleValueChange = (value: T) => {\n setStoreValue(value)\n setInputValue(value)\n }\n\n return {\n inputValue,\n setInputValue: handleValueChange\n }\n}\n","import { useCallback, useEffect, useRef } from 'react'\n\n/**\n * 节流hook\n * @param func 需要执行的函数\n * @param wait 延迟时间\n */\nexport function useThrottle<A extends Array<any>, R = void>(func: (..._args: A) => R, wait: number) {\n const { current } = useRef({ func, timeOut: null } as { func: (..._args: A) => R; timeOut: null | NodeJS.Timeout })\n useEffect(() => {\n // console.log('useThrottle0', current.timeOut)\n current.func = func\n }, [func])\n\n let args: A\n // console.log('useThrottle', current.timeOut)\n function throttle(..._args: A) {\n // console.log('useThrottle2', current.timeOut)\n args = _args\n return new Promise<R>((resolve, reject) => {\n // console.log('useThrottle3', current.timeOut)\n if (!current.timeOut) {\n try {\n const result = current.func.apply(null, args) // 未来可能支持异步\n resolve(result)\n } catch (e) {\n reject(e)\n }\n current.timeOut = setTimeout(() => {\n current.timeOut = null\n }, wait)\n }\n })\n }\n //取消\n function cancel() {\n if (!current.timeOut) return\n clearTimeout(current.timeOut)\n current.timeOut = null\n }\n //立即执行\n function flush() {\n cancel()\n return current.func.apply(null, args)\n }\n throttle.flush = flush\n throttle.cancel = cancel\n return useCallback(throttle, [])\n}\n","import dayjs from 'dayjs'\nimport relativeTime from 'dayjs/plugin/relativeTime'\n\ndayjs.extend(relativeTime)\n\ntype DateType = string | number | Date | dayjs.Dayjs | null\n\nexport const DateFormatType = 'YYYY-MM-DD HH:mm:ss'\nexport const DateFormatType2 = 'YYYY-MM-DD'\n\nconst UNIT = 'date'\n\n/**\n * 获取一天的最早时间 '2023/10/17 00:00:00' 的时间戳\n */\nexport const getStartOfTimestamp = (date?: DateType, unit: dayjs.OpUnitType = UNIT) => {\n return dayjs(date).startOf(unit).valueOf()\n}\n\n/**\n * 获取一天的最晚时间 '2023/10/17 23:59:59' 的时间戳\n */\nexport const getEndOfTimestamp = (date?: DateType, unit: dayjs.OpUnitType = UNIT) => {\n return dayjs(date).endOf(unit).valueOf()\n}\n\n// 格式化时间对象为 YYYY-MM-DD HH:mm:ss 格式\nexport const formatDate = (date: Date | number | string, fmt: string = DateFormatType) => {\n if (date) {\n return dayjs(date).format(fmt)\n }\n return ''\n}\n\nexport const getTimestamp = (date?: DateType) => {\n return dayjs(date).valueOf()\n}\n\nexport const isExpire = (date?: DateType) => {\n return dayjs(date).isBefore(getStartOfTimestamp())\n}\n","import AES from 'crypto-js/aes'\nimport encUtf8 from 'crypto-js/enc-utf8'\nimport { genNonDuplicateID } from './common'\n// import { loginUserInfoT } from '@/services/signIn'\n\nconst USER_KEY = 'NS-USER'\n\nexport function setCurrentUser(userInfo: any) {\n const cipherText = AES.encrypt(JSON.stringify(userInfo), '((#II))').toString()\n sessionStorage.setItem(USER_KEY, cipherText)\n}\n\nexport function getCurrentUser() {\n const userInfoJson = sessionStorage.getItem(USER_KEY)\n if (userInfoJson) {\n // 解密\n const bytes = AES.decrypt(userInfoJson, '((#II))')\n const originalText = bytes.toString(encUtf8)\n return JSON.parse(originalText)\n }\n return null\n}\n\nexport function clearCurrentUser() {\n sessionStorage.removeItem(USER_KEY)\n}\n\nconst DEVICEID_KEY = 'NS-DEVICE-ID'\n\nexport function getDeviceId() {\n let deviceId = localStorage.getItem(DEVICEID_KEY)\n if (deviceId) {\n return deviceId\n }\n deviceId = genNonDuplicateID()\n localStorage.setItem(DEVICEID_KEY, deviceId)\n return deviceId\n}\n","import Decimal from 'decimal.js'\ntype MethodType = 'plus' | 'minus' | 'times' | 'dividedBy'\ntype OperatorType = '+' | '-' | '*' | '/'\nconst OperatorToMethodName: Record<OperatorType, MethodType> = {\n '+': 'plus',\n '-': 'minus',\n '*': 'times',\n '/': 'dividedBy'\n}\nexport const calculate = (operator: OperatorType, ...args: Decimal.Value[]) => {\n if (args.length === 0) return '0'\n const [arg, ...newArgs] = args\n return newArgs.reduce((acc: Decimal, val) => acc[OperatorToMethodName[operator]](new Decimal(val)), new Decimal(arg)).toString()\n}\n// 加法\n// 调用:plus(arg1,arg2)\n// 返回值:arg1加arg2的精确结果\nexport const plus = (...args: Decimal.Value[]) => calculate('+', ...args)\n// js 减法计算\n// 调用:minus(arg1,arg2)\n// 返回值:arg1减arg2的精确结果\nexport const minus = (...args: Decimal.Value[]) => calculate('-', ...args)\n// js 乘法函数\n// 调用:times(arg1,arg2)\n// 返回值:arg1乘以arg2的精确结果\nexport const times = (...args: Decimal.Value[]) => calculate('*', ...args)\n// js 除法函数\n// 调用:dividedBy(arg1,arg2)\n// 返回值:arg1除以arg2的精确结果\nexport const dividedBy = (...args: Decimal.Value[]) => calculate('/', ...args)\n\n//查看有几位小数 (注意不计算 小数点 最后 末尾 的 0)\nexport const decimalPlaces = (arg1: Decimal.Value) => {\n return new Decimal(arg1).decimalPlaces()\n}\n//查看有几位\nexport const precision = (arg1: Decimal.Value) => {\n return new Decimal(arg1).precision(true)\n}\n\n// 取绝对值\nexport const absVal = (arg1: Decimal.Value) => new Decimal(arg1).abs().toString()\n// 比较\nexport const compareNum = (arg1: Decimal.Value, arg2: Decimal.Value, type: string) => {\n const x = new Decimal(arg1)\n const y = new Decimal(arg2)\n switch (type) {\n case '>':\n return x.greaterThan(y)\n case '>=':\n return x.greaterThanOrEqualTo(y)\n case '<':\n return x.lessThan(y)\n case '<=':\n return x.lessThanOrEqualTo(y)\n case '==':\n return x.equals(y)\n }\n}\n\n// 四舍五入,fill是否补0\nexport const toFixed = (num: Decimal.Value, decimals = 2, fill = true) => {\n const x = new Decimal(num)\n if (fill) {\n return x.toFixed(decimals, Decimal.ROUND_HALF_UP)\n } else {\n return x.toDecimalPlaces(decimals, Decimal.ROUND_HALF_UP).toString()\n }\n}\n// 是否为整数\nexport const isInteger = (num: Decimal.Value) => {\n return new Decimal(num).isInteger()\n}\n// 是否为负数\nexport const isNegative = (num: Decimal.Value) => {\n return new Decimal(num).isNegative()\n}\n// 整数截取n位,小数四舍五入\n// export const toDigits = (num: Decimal.Value, decimals?: number) => {\n// let x = new Decimal(num)\n// if (decimals) {\n// const y = precision(num) - decimalPlaces(num)\n// if (isInteger(x) || y > decimals) {\n// return x.toString().substring(0, decimals)\n// } else {\n// return toFixed(num, decimals - y, false)\n// // return x.toSignificantDigits(decimals, Decimal.ROUND_HALF_UP).toString()\n// }\n// }\n// return x.toString()\n// }\n","import { Modal, notification } from 'antd'\nimport { message } from 'antd/lib'\nimport { getTimestamp } from './date'\nimport { LgPrimaryColor } from './theme'\n\nexport interface Message {\n title?: string\n content: string\n duration?: number\n type?: 'success' | 'error' | 'warning' | 'info'\n onClose?: () => void\n}\n\nexport interface CacheMessage extends Message {\n isCache?: boolean\n isOnly?: boolean\n}\nconst cacheMessage = () => {\n const contents = {} as ObjectType<number>\n return ({ title = '提示', content, type = 'warning', duration = 3, onClose, isCache = true, isOnly = false }: CacheMessage) => {\n if (!content) return\n const key = isOnly ? 'cache-key' : content\n const onClose2 = () => {\n delete contents[key]\n onClose?.()\n }\n if (isCache && contents[key]) {\n } else {\n if (isCache) {\n contents[key] = getTimestamp()\n }\n if (duration) {\n if (content.length > 30) {\n notification[type]({\n message: title,\n description: content,\n placement: 'top',\n duration,\n onClose: onClose2\n })\n } else {\n message[type]({\n content,\n duration,\n onClose: onClose2\n })\n }\n } else {\n Modal[type]({\n title,\n content,\n okButtonProps: { style: { background: LgPrimaryColor, outline: 'none' } },\n afterClose: onClose2\n })\n }\n }\n }\n}\nexport const showMessage = cacheMessage()\n","export const TOKEN_KEY = 'NS-TOKEN'\n\nexport function setToken(accessToken: string) {\n localStorage.setItem(TOKEN_KEY, accessToken)\n}\nexport function getUrlToken() {\n const searchParams = new URLSearchParams(location.search)\n const token = searchParams.get(TOKEN_KEY)\n return token || ''\n}\nexport function getToken() {\n const token = getUrlToken()\n if (!token) {\n const token = localStorage.getItem(TOKEN_KEY)\n return token || ''\n } else {\n setToken(token)\n return token\n }\n}\n\nexport function clearToken() {\n localStorage.removeItem(TOKEN_KEY)\n}\n\nconst SIGNPATH = 'SIGNPATH'\n\nexport function getSignPath() {\n const path = localStorage.getItem(SIGNPATH)\n return `${path || '/sign-in'}`\n}\n","import axios, { AxiosRequestConfig, RawAxiosRequestHeaders, ResponseType } from 'axios'\nimport { emit } from '../hooks'\nimport { showMessage } from './message'\nimport { getSignPath, getToken, TOKEN_KEY } from './session'\n\nexport const OK = 200\nexport const OK2 = 'S0000'\nexport const ERROR = 500\nexport const MISSING_PARAMETER = 400\nexport const UNAUTHORIZED = 401\nexport const FORBIDDEN = 403\nexport const NOT_FOUND = 404\nexport const ILLEGAL_PARAMETER = 901\nexport const PERMISSION_DENIED = 13001\nexport const LoginPastCode = 11200\nexport const FacePastCode = 11201\nexport const formType = 'form'\nexport const jsonType = 'json'\n\ninterface Options {\n reqType?: 'json' | 'form'\n timeout?: number\n responseType?: ResponseType\n showError?: boolean\n}\n\nconst parseOptions = (options?: Options): AxiosRequestConfig => {\n const headers: RawAxiosRequestHeaders = {}\n if (options?.reqType && options.reqType === formType) {\n headers['Content-Type'] = 'application/x-www-form-urlencoded'\n }\n return { headers, ...options }\n}\n\nconst redirectUrl = () => {\n emit('jumpLink', { url: `/uc${getSignPath()}` })\n}\n\naxios.interceptors.request.use(\n function (config) {\n config.headers[TOKEN_KEY] = getToken()\n if (config.url && !config.url.startsWith('/api/')) {\n config.baseURL = '/api'\n }\n config.timeout = config.timeout || 60000\n return config\n },\n function (error) {\n return Promise.reject(error)\n }\n)\n\naxios.interceptors.response.use(\n function (response) {\n if (response.data?.code !== OK && response.data?.code !== OK2) {\n const isPermission = response.data?.code === PERMISSION_DENIED\n if ((response.config as any)?.showError !== false) {\n showMessage({\n title: isPermission ? '' : undefined,\n content: response.data.message,\n duration: isPermission ? 0 : 3\n })\n }\n return Promise.reject(response.data)\n }\n return response\n },\n function (err) {\n const showError = err?.config?.showError !== false // 默认显示错误\n if (!err.response) {\n if (showError) showMessage({ content: '网络异常,请检查网络', type: 'error' })\n } else {\n switch (err.response?.status) {\n case UNAUTHORIZED:\n if (showError) showMessage({ content: err.response?.data.message, type: 'error' })\n redirectUrl()\n break\n case FORBIDDEN:\n case NOT_FOUND:\n case ERROR:\n case MISSING_PARAMETER:\n case ILLEGAL_PARAMETER:\n if (showError) showMessage({ content: err.response?.data.message, type: 'error' })\n break\n default:\n if (showError) showMessage({ content: '请求数据发生错误!', type: 'info' })\n }\n }\n\n return Promise.reject(err)\n }\n)\n\nconst get = async (url: string, params?: any, options?: Options) => {\n const res = await axios({ method: 'get', url, params, ...options })\n return res.data\n}\n\nconst post = async (url: string, data?: any, options?: Options) => {\n const res = await axios({\n method: 'post',\n url,\n data,\n ...parseOptions(options)\n })\n return res.data\n}\n\nconst put = async (url: string, data?: any, options?: Options) => {\n const res = await axios({ method: 'put', url, data, ...parseOptions(options) })\n return res.data\n}\n\nconst del = async (url: string, data?: any, options?: Options) => {\n const reqConfig: AxiosRequestConfig = {\n method: 'delete',\n url,\n ...parseOptions(options)\n }\n const params = options?.reqType === formType ? { params: data } : { data }\n const res = await axios({ ...reqConfig, ...params })\n return res.data\n}\n\nexport default {\n get: get,\n post: post,\n put: put,\n delete: del\n}\n","import { useCallback, useEffect, useRef, useState } from 'react'\nimport { isNullOrUnDef, isNumber, isString } from '../utils'\n\n// 定义 useWebSocket 的参数类型\ninterface UseWebSocketParams {\n url: string\n onMessage: (message: any) => void\n onClose?: () => void\n heartbeatInterval?: number\n heartbeatMessage?: string\n clientHeartbeat?: boolean // 是否开启客户端心跳\n reconnectInterval?: number // 重连间隔时间,单位为毫秒\n maxReconnectAttempts?: number // 最大重连尝试次数\n isReconnect?: boolean // 是否开启重连机制,默认为 true\n}\n\n// 定义返回值类型\ninterface UseWebSocketReturn {\n sendMessage: (message: string) => void\n socketReadyState: number | null\n}\n\nconst useWebSocket = ({\n url,\n onMessage,\n onClose,\n heartbeatInterval = 30000,\n heartbeatMessage = 'ping',\n clientHeartbeat = true,\n reconnectInterval = 5000, // 默认重连间隔为 5 秒\n maxReconnectAttempts, // 不设置默认值为无限重连\n isReconnect = true // 默认开启重连机制\n}: UseWebSocketParams): UseWebSocketReturn => {\n const socketRef = useRef<WebSocket | null>(null)\n const heartbeatIntervalRef = useRef<NodeJS.Timer | null>(null)\n const [socketReadyState, setSocketReadyState] = useState<number | null>(null)\n const reconnectIntervalRef = useRef<NodeJS.Timer | null>(null)\n const reconnectAttempts = useRef(0)\n const documentHide = useRef(document.visibilityState === 'hidden')\n const isDestroy = useRef(false)\n const onMessageEctype = useCallback(onMessage, [onMessage])\n // 启动心跳定时器\n const startHeartbeat = (currentSocket: WebSocket) => {\n if (!clientHeartbeat) {\n return\n }\n\n const intervalId = setInterval(() => {\n if (currentSocket.readyState === WebSocket.OPEN) {\n currentSocket.send(heartbeatMessage)\n }\n }, heartbeatInterval)\n heartbeatIntervalRef.current = intervalId\n }\n\n // 停止心跳定时器\n const stopHeartbeat = () => {\n if (heartbeatIntervalRef.current) {\n clearInterval(heartbeatIntervalRef.current as unknown as number)\n }\n }\n // 停止重连定时器\n const stopReconnectTimer = () => {\n // console.log('停止重连定时器')\n if (reconnectIntervalRef.current) {\n clearTimeout(reconnectIntervalRef.current as unknown as number)\n reconnectIntervalRef.current = null\n }\n }\n\n // 尝试重连\n const tryReconnect = () => {\n if (isDestroy.current) return\n // console.log('尝试重连...', reconnectIntervalRef.current)\n if (isReconnect && !documentHide.current) {\n if ((!isNumber(maxReconnectAttempts) || reconnectAttempts.current < maxReconnectAttempts) && isNullOrUnDef(reconnectIntervalRef.current)) {\n reconnectIntervalRef.current = setTimeout(() => {\n console.log(`尝试第 ${reconnectAttempts.current + 1} 次重连...`, url)\n reconnectAttempts.current = reconnectAttempts.current + 1\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n createAndListenWebSocket()\n stopReconnectTimer()\n }, reconnectInterval)\n } else {\n if (isNumber(maxReconnectAttempts)) {\n console.log('达到最大重连尝试次数,停止重连')\n }\n }\n }\n }\n // 处理连接打开事件\n const handleOpen = (newSocket: WebSocket) => {\n console.log('WebSocket 连接已打开')\n setSocketReadyState(newSocket.readyState)\n startHeartbeat(newSocket)\n reconnectAttempts.current = 0\n }\n\n // 处理接收到消息事件\n const handleMessage = (event: MessageEvent) => {\n if (isString(event.data)) {\n try {\n const parsedData = JSON.parse(event.data)\n onMessageEctype?.(parsedData)\n stopHeartbeat()\n startHeartbeat(socketRef.current as WebSocket)\n } catch (error) {\n console.error('解析消息数据时出错:', error)\n }\n }\n }\n // 处理连接关闭事件\n const handleClose = (event: CloseEvent) => {\n console.log('WebSocket 连接已关闭', event.code, event.reason)\n setSocketReadyState(event.code)\n stopHeartbeat()\n onClose?.()\n tryReconnect()\n }\n\n // 处理连接错误事件\n const handleError = (error: Event) => {\n console.error('WebSocket 发生错误:', error)\n setSocketReadyState(null)\n stopHeartbeat()\n tryReconnect()\n }\n // 创建并监听 WebSocket 连接\n const createAndListenWebSocket = () => {\n const newSocket = new WebSocket(url)\n socketRef.current = newSocket\n setSocketReadyState(newSocket.readyState)\n\n newSocket.onopen = () => handleOpen(newSocket)\n newSocket.onmessage = handleMessage\n newSocket.onclose = handleClose\n newSocket.onerror = handleError\n }\n const handleVisibilityChange = () => {\n documentHide.current = document.visibilityState === 'hidden'\n if (socketRef.current?.readyState !== WebSocket.OPEN) {\n tryReconnect()\n }\n }\n\n useEffect(() => {\n isDestroy.current = false\n createAndListenWebSocket()\n window.addEventListener('visibilitychange', handleVisibilityChange)\n return () => {\n // 组件卸载时关闭 WebSocket 连接\n window.removeEventListener('visibilitychange', handleVisibilityChange)\n isDestroy.current = true\n if (socketRef.current) {\n socketRef.current.close()\n return\n }\n stopHeartbeat()\n stopReconnectTimer()\n }\n }, [url])\n\n const sendMessage = (message: string) => {\n if (socketRef.current?.readyState === WebSocket.OPEN) {\n socketRef.current.send(message)\n stopHeartbeat()\n startHeartbeat(socketRef.current)\n }\n }\n\n return {\n sendMessage,\n socketReadyState\n }\n}\n\nexport default useWebSocket\n","import { LoadError, PageChangeEvent, PasswordStatus, PdfJs, RenderProtectedViewProps, Viewer, Worker } from '@react-pdf-viewer/core'\nimport { pageNavigationPlugin } from '@react-pdf-viewer/page-navigation'\n// import { printPlugin } from '@react-pdf-viewer/print'\n// import { rotatePlugin } from '@react-pdf-viewer/rotate'\n// import { searchPlugin } from '@react-pdf-viewer/search'\nimport { thumbnailPlugin } from '@react-pdf-viewer/thumbnail'\nimport { zoomPlugin } from '@react-pdf-viewer/zoom'\nimport { useEffect, useRef, useState } from 'react'\n\n// 注意:CMap 字体加载错误通常是由于缺少字体映射文件导致的\n// 解决方案:通过 transformGetDocumentParams 配置 cMapUrl 和 standardFontDataUrl\n//\n// 常见错误:\n// - \"CMapReaderFactory not initialized, see the `useWorkerFetch` parameter\"\n// - \"Error during font loading: CMapReaderFactory not initialized\"\n//\n// 解决步骤:\n// 1. 配置 cMapUrl 指向 CMap 文件目录\n// 2. 配置 standardFontDataUrl 指向标准字体目录\n// 3. 设置 cMapPacked: true 使用压缩文件\n// 4. 禁用字体子集化 (disableFontFace: false)\n\nimport '@react-pdf-viewer/core/lib/styles/index.css'\nimport zh_CN from '@react-pdf-viewer/locales/lib/zh_CN.json'\nimport '@react-pdf-viewer/page-navigation/lib/styles/index.css'\nimport { useRefState } from '../../hooks'\nimport { isNumber } from '../../utils'\n// import '@react-pdf-viewer/print/lib/styles/index.css'\n// import '@react-pdf-viewer/rotate/lib/styles/index.css' // 注释掉,因为rotate包没有这个文件\n// import '@react-pdf-viewer/search/lib/styles/index.css'\nimport '@react-pdf-viewer/thumbnail/lib/styles/index.css'\nimport '@react-pdf-viewer/zoom/lib/styles/index.css'\nimport { Alert, Button, Flex, Form, Input, Splitter } from 'antd'\nimport styles from './styles.module.less'\n\nconst ProtectedView = ({\n passwordStatus,\n verifyPassword,\n onVerifyPasswordEnd\n}: RenderProtectedViewProps & { onVerifyPasswordEnd: (password: string) => void }) => {\n const [form] = Form.useForm()\n const onSubmit = (): void => {\n form.validateFields().then((values) => {\n if (values) {\n verifyPassword(values.password)\n onVerifyPasswordEnd(values.password)\n }\n })\n }\n\n return (\n <Flex justify=\"center\" align=\"center\" className=\"height-full\">\n <div style={{ width: 300 }}>\n {passwordStatus === PasswordStatus.WrongPassword && <Alert message=\"密码无效。请再试一次!\" type=\"error\" />}\n <Form form={form} size=\"large\" className=\"m-t-24\">\n <Form.Item name=\"password\" rules={[{ required: true, message: '请输入密码' }]}>\n <Input.Password autoComplete=\"new-password\" placeholder=\"请输入密码\" />\n </Form.Item>\n <Flex justify=\"center\">\n <Button type=\"primary\" onClick={onSubmit}>\n 提 交\n </Button>\n </Flex>\n </Form>\n </div>\n </Flex>\n )\n}\ninterface Props {\n fileUrl: string\n pageNo?: number\n scale?: number\n isHasThumbnails?: boolean\n password?: string\n onSetPassword?: (password: string) => void\n onSetPageNo?: (pageNo: number) => void\n}\nexport default ({ password, fileUrl, pageNo = 1, scale = 1, isHasThumbnails = true, onSetPassword, onSetPageNo }: Props) => {\n const embedRef = useRef<HTMLDivElement>(null)\n const [sizes, setSizes] = useState<number[]>([0])\n const [, setDocLoaded, getDocLoaded] = useRefState(false)\n const [currentPage, setCurrentPage, getCurrentPage] = useRefState<number | undefined>(undefined)\n const [temporaryPassword, setTemporaryPassword] = useState('')\n const jumpToPageNo = useRef<number>()\n const onVerifyPasswordEnd = (password: string) => {\n setTemporaryPassword(password)\n }\n\n const pageNavigationPluginInstance = pageNavigationPlugin({ enableShortcuts: true })\n const thumbnailPluginInstance = thumbnailPlugin({\n thumbnailWidth: sizes[0] - 70 // 不会自适应\n })\n const zoomPluginInstance = zoomPlugin()\n // const printPluginInstance = printPlugin()\n // const rotatePluginInstance = rotatePlugin()\n // const searchPluginInstance = searchPlugin()\n\n // 获取插件组件\n const { Thumbnails } = thumbnailPluginInstance\n const { ZoomIn, ZoomOut } = zoomPluginInstance // Zoom\n // const { Print } = printPluginInstance\n // const { Rotate } = rotatePluginInstance\n // const { Search } = searchPluginInstance\n\n // 工具栏组件\n const Toolbar = () => (\n <Flex gap={6} align=\"center\" className={styles.pdfToolbar}>\n <ZoomIn />\n <ZoomOut />\n {/* <Print /> */}\n {/* <Rotate /> */}\n {/* <Search /> */}\n {/* <Tooltip title=\"全屏\">\n <Button\n type=\"text\"\n icon={<FullscreenOutlined />}\n onClick={() => {\n const element = embedRef.current?.querySelector('.rpv-core__viewer')\n if (element) {\n if (document.fullscreenElement) {\n document.exitFullscreen()\n } else {\n element.requestFullscreen()\n }\n }\n }}\n size=\"small\"\n />\n </Tooltip> */}\n </Flex>\n )\n const onJumpToPage = (pageNo?: number) => {\n // console.log('跳转页面', jumpToPageNo.current, getCurrentPage(), pageNo)\n if (getDocLoaded()) {\n if (pageNo && pageNo - 1 !== getCurrentPage()) {\n jumpToPageNo.current = pageNo - 1\n pageNavigationPluginInstance.jumpToPage(jumpToPageNo.current)\n }\n }\n }\n const handleDocumentLoad = () => {\n // console.log('文档加载完成', pageNo)\n setSizes([400])\n setDocLoaded(true)\n onJumpToPage(pageNo)\n if (temporaryPassword) {\n onSetPassword?.(temporaryPassword)\n setTemporaryPassword('')\n }\n }\n useEffect(() => {\n // console.log('pdfUrl', fileUrl)\n setCurrentPage(undefined)\n setDocLoaded(false)\n setSizes([0])\n }, [fileUrl])\n useEffect(() => {\n // console.log('pageNo变化', pageNo)\n setTimeout(() => {\n // 要在fileUrl变化之后执行\n onJumpToPage(pageNo)\n }, 0)\n }, [pageNo])\n const renderError = (error: LoadError) => {\n let message = ''\n switch (error.name) {\n case 'InvalidPDFException':\n message = '文件无效或已损坏'\n break\n case 'MissingPDFException':\n message = '文件不存在'\n break\n case 'UnexpectedResponseException':\n message = '意外的服务器响应'\n break\n // case 'CMapReaderFactory not initialized':\n // message = '字体映射文件加载失败,请刷新页面重试'\n // break\n default:\n message = '无法加载文档'\n break\n }\n\n return (\n <Flex className=\"height-full\" justify=\"center\" align=\"center\">\n <Alert message={message} type=\"error\" showIcon />\n </Flex>\n )\n }\n const onPageChange = (e: PageChangeEvent) => {\n // console.log('页面切换', jumpToPageNo.current, e.currentPage)\n let newCurrentPage = e.currentPage\n if (isNumber(jumpToPageNo.current)) {\n // 以方法跳转优先\n newCurrentPage = jumpToPageNo.current\n setTimeout(() => {\n jumpToPageNo.current = undefined\n }, 1000)\n }\n setCurrentPage(newCurrentPage)\n }\n useEffect(() => {\n // console.log('currentPage', currentPage)\n if (!(embedRef.current && isNumber(currentPage))) return\n // 设置当前页高亮\n setTimeout(() => {\n // console.log('设置当前页高亮', currentPage, embedRef.current?.querySelectorAll('.rpv-core__viewer .rpv-core__page-layer'))\n const pages = embedRef.current?.querySelectorAll('.rpv-core__viewer .rpv-core__page-layer')\n pages?.forEach((page) => {\n if (Number(page.getAttribute('data-virtual-index')) === currentPage) {\n page.classList.add('current-page-highlight')\n } else {\n // 移除所有已有高亮\n page.classList.remove('current-page-highlight')\n }\n })\n }, 500)\n onSetPageNo?.(currentPage + 1)\n }, [currentPage])\n\n // 监听 CMap 加载错误\n // useEffect(() => {\n // const handleCMapError = (event: ErrorEvent) => {\n // if (event.error && event.error.message && event.error.message.includes('CMapReaderFactory')) {\n // console.warn('CMap 字体映射文件加载失败,这可能导致中文字体显示异常')\n // console.warn('建议检查网络连接或刷新页面重试')\n // }\n // }\n\n // window.addEventListener('error', handleCMapError)\n // return () => window.removeEventListener('error', handleCMapError)\n // }, [])\n return (\n <div ref={embedRef} className={styles.nsPreviewPdf}>\n <Worker workerUrl={`/uc/pdf/pdf.worker.min.js`}>\n <Splitter onResize={setSizes}>\n {isHasThumbnails && (\n <Splitter.Panel resizable={false} size={sizes[0]} min={250} max={500} collapsible>\n <Thumbnails />\n </Splitter.Panel>\n )}\n <Splitter.Panel>\n <div className=\"height-full\">\n <Viewer\n localization={zh_CN}\n withCredentials={true}\n onDocumentAskPassword={(e) => {\n // 自动执行,失败弹窗renderProtectedView\n // console.log('密码验证', password, e)\n setTemporaryPassword('')\n e.verifyPassword(password || '')\n }}\n // 不加disableStream的情况onDocumentAskPassword有bug,输不了密码\n transformGetDocumentParams={(options: PdfJs.GetDocumentParams) => {\n return Object.assign({}, options, {\n // disableRange: false,\n disableStream: true, // 建议传入是否加密字段来控制\n httpHeaders: { 'Cache-Control': 'no-cache' },\n // 启用 CMap 支持,解决中文字体显示问题\n // cMapUrl: 指定 CMap 文件的 URL,用于处理非拉丁字符(如中文)\n // cMapPacked: 使用压缩的 CMap 文件以提高性能\n cMapUrl: '/uc/pdf/pdfjs-dist@3.2.146/cmaps/', // 使用可用的源\n cMapPacked: true,\n // 禁用字体子集化,确保完整字体加载\n disableFontFace: false,\n // 启用标准字体支持\n standardFontDataUrl: '/uc/pdf/pdfjs-dist@3.2.146/standard_fonts/',\n // 设置字体回退策略\n fallbackFontName: 'Helvetica'\n })\n }}\n fileUrl={fileUrl}\n defaultScale={scale}\n // defaultScale={SpecialZoomLevel.PageFit}\n plugins={[\n pageNavigationPluginInstance,\n thumbnailPluginInstance,\n zoomPluginInstance\n // printPluginInstance,\n // rotatePluginInstance,\n // searchPluginInstance,\n ]}\n onPageChange={onPageChange}\n // renderPage={() => <></>} // 加水印\n renderError={renderError}\n onDocumentLoad={handleDocumentLoad}\n renderProtectedView={(renderProps) => <ProtectedView onVerifyPasswordEnd={onVerifyPasswordEnd} {...renderProps} />}\n />\n <Toolbar />\n </div>\n </Splitter.Panel>\n </Splitter>\n </Worker>\n </div>\n )\n}\n","import { Empty, Flex, Image, Result } from 'antd'\nimport { useMemo } from 'react'\nimport VideoPlayer from './VideoPlayer'\n\nimport AudioPlayer from './AudioPlayer'\nimport MarkdownPreview from './MarkdownPreview'\nimport PdfPreview from './PdfPreview'\nimport styles from './styles.module.less'\n\ninterface Props {\n fileUrl: string\n suffix?: string\n password?: string\n searchValue?: string\n pdfParams?: {\n pageNo?: number\n scale?: number\n isHasThumbnails?: boolean\n onSetPageNo?: (pageNo: number) => void\n }\n fileParams?: ObjectType<string>\n onSetPassSuccess?: () => void\n}\n\nexport default ({ suffix, fileUrl, pdfParams, password, searchValue }: Props) => {\n // const fileUrl = useMemo(() => {\n // return getPreViewFileUrl({ ...extraParams, fileId, preview: true })\n // }, [fileId])\n // const onSetPassword = async (password: string) => {\n // // console.log('onSetPassword', password)\n // try {\n // await updateCaseFile({\n // ...fileParams,\n // filePassword: password,\n // mimeType: suffix\n // } as CaseFileUpdateType)\n // onSetPassSuccess?.()\n // } finally {\n // }\n // }\n const Preview = useMemo(() => {\n if (!fileUrl) {\n return <Empty />\n }\n switch (suffix?.toUpperCase()) {\n case 'PNG':\n case 'JPG':\n case 'JPEG':\n case 'GIF':\n return <Image rootClassName={styles.nsPreviewImage} src={fileUrl} alt=\"预览图片\" />\n\n case 'PDF':\n return <PdfPreview fileUrl={fileUrl} {...pdfParams} password={password} /> // onSetPassword={onSetPassword}\n\n case 'MP4':\n // case 'MOV':\n // case 'AVI':\n // case 'FLV':\n return <VideoPlayer fileUrl={fileUrl} />\n\n case 'MP3':\n return <AudioPlayer fileUrl={fileUrl} />\n\n case 'MD':\n case 'MARKDOWN':\n return <MarkdownPreview fileUrl={fileUrl} searchValue={searchValue} />\n\n default:\n return <Result subTitle={`暂不支持 ${suffix || ''} 文件的预览`} />\n }\n }, [suffix, fileUrl, pdfParams])\n\n return (\n <Flex justify=\"center\" align=\"center\" className=\"height-full\">\n {Preview}\n </Flex>\n )\n}\n","import { Drawer } from 'antd'\nimport FilePreview from './FilePreview'\ninterface Props {\n open: boolean\n onClose: () => void\n title?: string\n fileUrl: string\n suffix?: string\n password?: string\n fileParams?: ObjectType<string>\n pdfParams?: {\n pageNo?: number\n scale?: number\n isHasThumbnails?: boolean\n onSetPageNo?: (pageNo: number) => void\n }\n onSetPassSuccess?: () => void\n}\nexport default ({ open, fileUrl, suffix, title = '文件预览', onClose, password, fileParams, pdfParams, onSetPassSuccess }: Props) => {\n return (\n <Drawer title={title} push={false} width=\"100%\" open={open} onClose={onClose}>\n <FilePreview\n fileUrl={fileUrl}\n suffix={suffix}\n password={password}\n fileParams={fileParams}\n pdfParams={pdfParams}\n onSetPassSuccess={onSetPassSuccess}\n />\n </Drawer>\n )\n}\n",".iframe {\n width: 100%;\n height: 100%;\n border: none;\n overflow: auto;\n display: block;\n}\n","import { Spin } from 'antd'\nimport classNames from 'classnames'\nimport { forwardRef, useEffect, useMemo, useState } from 'react'\nimport { addUrlLastSlash, buildUrlParams, getUrlMainSource } from '../../utils'\nimport styles from './styles.module.less'\n\ninterface IframeProps {\n id?: string\n src: string\n className?: string\n onLoad?: () => void\n}\n\nexport default forwardRef<HTMLIFrameElement, IframeProps>(({ id, src, className, onLoad }: IframeProps, ref) => {\n const [loading, setLoading] = useState(false)\n const finalSrc = useMemo(() => {\n return buildUrlParams({ v: Date.now() }, addUrlLastSlash(getUrlMainSource(src, location.href)))\n }, [src])\n const onHandleLoad = () => {\n setLoading(false)\n onLoad?.()\n }\n useEffect(() => {\n setLoading(true)\n }, [src])\n\n return (\n <>\n <Spin spinning={loading} wrapperClassName=\"full-spin\" tip=\"加载中...\">\n <iframe id={id} ref={ref} src={finalSrc} className={classNames(styles.iframe, className)} onLoad={onHandleLoad}></iframe>\n </Spin>\n </>\n )\n})\n","import { isBoolean, isFunction, isNull, isObject } from '../../utils'\n\nexport type RenderControl<C, P = ObjectType<any>> =\n | boolean\n | {\n visible?: boolean\n render?: (ctx: C) => React.ReactNode\n props?: P\n }\n\ninterface RenderWrapperProps<C, P> {\n control?: RenderControl<C, P> | null\n ctx?: C\n DefaultComponent?: React.ReactNode | ((props: P) => React.ReactNode)\n}\n\nfunction isRenderFn<P>(node: React.ReactNode | ((props: P) => React.ReactNode)): node is (props: P) => React.ReactNode {\n return isFunction(node) || (isObject(node) && !isNull(node) && '$$typeof' in node && node.$$typeof === Symbol.for('react.forward_ref'))\n}\n\nfunction renderDefault<P>(DefaultComponent?: React.ReactNode | ((props: P) => React.ReactNode), props?: P) {\n if (!DefaultComponent) return null\n return isRenderFn(DefaultComponent) ? <DefaultComponent {...(props as P)} /> : DefaultComponent\n}\n\nexport function RenderWrapper<C = any, P = any>({ control = true, ctx, DefaultComponent }: RenderWrapperProps<C, P>) {\n if (control === false || isNull(control)) return null\n\n if (control === true || control === undefined) {\n return renderDefault(DefaultComponent)\n }\n\n const { visible = true, render, props } = control\n if (!visible) return null\n if (render) {\n return typeof render === 'function' ? render(ctx!) : render\n }\n\n // 若 DefaultComponent 是 JSX,props 会被忽略\n return renderDefault(DefaultComponent, props)\n}\n\nexport const shouldRender = (control?: RenderControl<any, any> | null) =>\n control != null && (isBoolean(control) ? control : control?.visible !== false)\n\n// 合并上级传入的props与当前的props\nexport function propsMerge(control?: RenderControl<any, any> | null, props?: ObjectType<any>) {\n if (control === true || control === undefined) {\n return {\n props\n }\n }\n if (isObject(control) && (control?.visible === true || control?.visible === undefined)) {\n return {\n props: {\n ...props,\n ...control?.props\n }\n }\n }\n return null\n}\n","import { Avatar } from 'antd'\nimport { LgPrimaryColor } from '../../utils'\n\ninterface Props {\n avatarSrc?: string\n userName?: string\n size?: number\n}\nexport default ({ size, avatarSrc, userName }: Props) => {\n return avatarSrc ? (\n <Avatar size={size} src={avatarSrc} />\n ) : (\n <Avatar size={size} className=\"cursor-pointer\" style={{ backgroundColor: LgPrimaryColor }}>\n {userName?.slice(0, 1)?.toLocaleUpperCase()}\n </Avatar>\n )\n}\n"]}
package/package.json ADDED
@@ -0,0 +1,78 @@
1
+ {
2
+ "name": "@zero-library/common",
3
+ "version": "1.0.0",
4
+ "description": "npm 公用组件 方法 hooks",
5
+ "publishConfig": {
6
+ "access": "public"
7
+ },
8
+ "repository": {
9
+ "type": "git",
10
+ "url": "git+https://your.git.repo.git"
11
+ },
12
+ "license": "MIT",
13
+ "author": "zhao-bin-zero",
14
+ "main": "dist/index.cjs.js",
15
+ "module": "dist/index.esm.js",
16
+ "types": "dist/index.d.ts",
17
+ "files": [
18
+ "dist"
19
+ ],
20
+ "dependencies": {
21
+ "@react-pdf-viewer/attachment": "3.11.0",
22
+ "@react-pdf-viewer/bookmark": "3.11.0",
23
+ "@react-pdf-viewer/core": "3.11.0",
24
+ "@react-pdf-viewer/default-layout": "3.11.0",
25
+ "@react-pdf-viewer/drop": "3.11.0",
26
+ "@react-pdf-viewer/full-screen": "3.11.0",
27
+ "@react-pdf-viewer/get-file": "3.11.0",
28
+ "@react-pdf-viewer/highlight": "3.11.0",
29
+ "@react-pdf-viewer/locale-switcher": "3.11.0",
30
+ "@react-pdf-viewer/locales": "^1.0.0",
31
+ "@react-pdf-viewer/open": "3.11.0",
32
+ "@react-pdf-viewer/page-navigation": "3.11.0",
33
+ "@react-pdf-viewer/print": "3.11.0",
34
+ "@react-pdf-viewer/properties": "3.11.0",
35
+ "@react-pdf-viewer/rotate": "3.11.0",
36
+ "@react-pdf-viewer/scroll-mode": "3.11.0",
37
+ "@react-pdf-viewer/search": "3.11.0",
38
+ "@react-pdf-viewer/selection-mode": "3.11.0",
39
+ "@react-pdf-viewer/theme": "3.11.0",
40
+ "@react-pdf-viewer/thumbnail": "3.11.0",
41
+ "@react-pdf-viewer/toolbar": "3.11.0",
42
+ "@react-pdf-viewer/zoom": "3.11.0",
43
+ "axios": "^1.5.1",
44
+ "classnames": "^2.3.2",
45
+ "crypto-js": "^4.2.0",
46
+ "dayjs": "^1.11.10",
47
+ "decimal.js": "^10.4.3",
48
+ "html-react-parser": "^5.2.6",
49
+ "jsonrepair": "^3.13.0",
50
+ "markdown-it": "^14.1.0",
51
+ "markdown-it-container": "^4.0.0",
52
+ "pdfjs-dist": "3.2.146",
53
+ "@zero-library/theme": "1.0.0"
54
+ },
55
+ "devDependencies": {
56
+ "@ant-design/icons": "^5.2.6",
57
+ "@types/crypto-js": "^4.2.2",
58
+ "@types/markdown-it": "^14.1.2",
59
+ "@types/markdown-it-container": "^2.0.10",
60
+ "@types/react": "^18",
61
+ "@types/react-dom": "^18",
62
+ "antd": "^5.24.1",
63
+ "esbuild-plugin-less": "^1.3.28",
64
+ "react": "^18.3.1",
65
+ "react-dom": "^18.3.1",
66
+ "tsup": "^8.3.0"
67
+ },
68
+ "peerDependencies": {
69
+ "@ant-design/icons": ">=5",
70
+ "antd": "^5",
71
+ "react": "^18",
72
+ "react-dom": "^18"
73
+ },
74
+ "scripts": {
75
+ "build": "tsup",
76
+ "dev": "tsup --watch"
77
+ }
78
+ }