@zero-library/common 2.1.9 → 2.1.11

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.
@@ -1 +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/iframe/iframeRelay.ts","../src/utils/is.ts","../src/hooks/iframe/useIframeRelayBridge.ts","../src/hooks/useCreateValtioContext.tsx","../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/webSocket/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/MarkdownEditor/components/tiptap-extension/link-extension.ts","../src/components/MarkdownEditor/components/tiptap-extension/selection-extension.ts","../src/components/MarkdownEditor/components/tiptap-extension/trailing-node-extension.ts","../src/components/MarkdownEditor/components/tiptap-ui-primitive/tooltip/tooltip.tsx","../src/components/MarkdownEditor/components/tiptap-ui-primitive/button/button.tsx","../src/components/MarkdownEditor/components/tiptap-ui-primitive/spacer/spacer.tsx","../src/components/MarkdownEditor/components/tiptap-ui-primitive/separator/separator.tsx","../src/components/MarkdownEditor/components/tiptap-ui-primitive/toolbar/toolbar.tsx","../src/components/MarkdownEditor/hooks/use-tiptap-editor.ts","../src/components/MarkdownEditor/components/tiptap-icons/chevron-down-icon.tsx","../src/components/MarkdownEditor/components/tiptap-icons/heading-icon.tsx","../src/components/MarkdownEditor/lib/tiptap-utils.ts","../src/components/MarkdownEditor/components/tiptap-icons/heading-five-icon.tsx","../src/components/MarkdownEditor/components/tiptap-icons/heading-four-icon.tsx","../src/components/MarkdownEditor/components/tiptap-icons/heading-one-icon.tsx","../src/components/MarkdownEditor/components/tiptap-icons/heading-six-icon.tsx","../src/components/MarkdownEditor/components/tiptap-icons/heading-three-icon.tsx","../src/components/MarkdownEditor/components/tiptap-icons/heading-two-icon.tsx","../src/components/MarkdownEditor/components/tiptap-ui/heading-button/heading-button.tsx","../src/components/MarkdownEditor/components/tiptap-ui-primitive/dropdown-menu/dropdown-menu.tsx","../src/components/MarkdownEditor/components/tiptap-ui/heading-dropdown-menu/heading-dropdown-menu.tsx","../src/components/MarkdownEditor/hooks/use-menu-navigation.ts","../src/components/MarkdownEditor/components/tiptap-icons/ban-icon.tsx","../src/components/MarkdownEditor/components/tiptap-icons/highlighter-icon.tsx","../src/components/MarkdownEditor/components/tiptap-ui-primitive/popover/popover.tsx","../src/components/MarkdownEditor/components/tiptap-ui/highlight-button/highlight-button.tsx","../src/components/MarkdownEditor/components/tiptap-ui/highlight-popover/highlight-popover.tsx","../src/components/MarkdownEditor/components/tiptap-icons/corner-down-left-icon.tsx","../src/components/MarkdownEditor/components/tiptap-icons/external-link-icon.tsx","../src/components/MarkdownEditor/components/tiptap-icons/link-icon.tsx","../src/components/MarkdownEditor/components/tiptap-icons/trash-icon.tsx","../src/components/MarkdownEditor/components/tiptap-ui/link-popover/link-popover.tsx","../src/components/MarkdownEditor/components/tiptap-icons/list-icon.tsx","../src/components/MarkdownEditor/components/tiptap-icons/list-ordered-icon.tsx","../src/components/MarkdownEditor/components/tiptap-icons/list-todo-icon.tsx","../src/components/MarkdownEditor/components/tiptap-ui/list-button/list-button.tsx","../src/components/MarkdownEditor/components/tiptap-ui/list-dropdown-menu/list-dropdown-menu.tsx","../src/components/MarkdownEditor/components/tiptap-icons/bold-icon.tsx","../src/components/MarkdownEditor/components/tiptap-icons/code2-icon.tsx","../src/components/MarkdownEditor/components/tiptap-icons/italic-icon.tsx","../src/components/MarkdownEditor/components/tiptap-icons/strike-icon.tsx","../src/components/MarkdownEditor/components/tiptap-icons/subscript-icon.tsx","../src/components/MarkdownEditor/components/tiptap-icons/superscript-icon.tsx","../src/components/MarkdownEditor/components/tiptap-icons/underline-icon.tsx","../src/components/MarkdownEditor/components/tiptap-ui/mark-button/mark-button.tsx","../src/components/MarkdownEditor/components/tiptap-icons/block-quote-icon.tsx","../src/components/MarkdownEditor/components/tiptap-icons/code-block-icon.tsx","../src/components/MarkdownEditor/components/tiptap-ui/node-button/node-button.tsx","../src/components/MarkdownEditor/components/tiptap-icons/quote-icon.tsx","../src/components/MarkdownEditor/components/tiptap-ui/quote-button/quote-button.tsx","../src/components/MarkdownEditor/components/tiptap-icons/align-center-icon.tsx","../src/components/MarkdownEditor/components/tiptap-icons/align-justify-icon.tsx","../src/components/MarkdownEditor/components/tiptap-icons/align-left-icon.tsx","../src/components/MarkdownEditor/components/tiptap-icons/align-right-icon.tsx","../src/components/MarkdownEditor/components/tiptap-ui/text-align-button/text-align-button.tsx","../src/components/MarkdownEditor/components/tiptap-icons/redo2-icon.tsx","../src/components/MarkdownEditor/components/tiptap-icons/undo2-icon.tsx","../src/components/MarkdownEditor/components/tiptap-ui/undo-redo-button/undo-redo-button.tsx","../src/components/MarkdownEditor/components/tiptap-icons/arrow-left-icon.tsx","../src/components/MarkdownEditor/hooks/use-window-size.ts","../src/components/MarkdownEditor/hooks/use-cursor-visibility.ts","../src/components/MarkdownEditor/hooks/use-mobile.ts","../src/components/MarkdownEditor/extensions/pageNoNode.ts","../src/components/MarkdownEditor/extensions/searchAndReplace.ts","../src/components/MarkdownEditor/index.tsx","../src/components/RenderWrapper/index.tsx","../src/components/UserAvatar/index.tsx"],"names":["nsPreviewImage","nsPreviewPdf","pdfToolbar","nsPreviewVideo","nsPreviewAudio","jsx","useMemo","FileTextOutlined","FilePdfOutlined","FileWordOutlined","FileExcelOutlined","FilePptOutlined","VideoCameraOutlined","NotificationOutlined","FileJpgOutlined","FileImageOutlined","FileGifOutlined","FileMarkdownOutlined","FileZipOutlined","FileUnknownOutlined","jsxs","lazy","Suspense","markdownit","jsonrepair","md","parse","useState","error","useEffect","Result","useRef","createContext","useContext","useCallback","dayjs","relativeTime","AES","encUtf8","Decimal","notification","message","Modal","token","axios","Form","Flex","PasswordStatus","Alert","Input","Button","password","pageNavigationPlugin","thumbnailPlugin","zoomPlugin","Toolbar","pageNo","Worker","Splitter","Viewer","zh_CN","Empty","Image","Drawer","styles_module_default","iframe","forwardRef","Fragment","Spin","classNames","TiptapLink","Plugin","getMarkRange","TextSelection","Extension","PluginKey","isNodeSelection","DecorationSet","Decoration","React","useFloating","autoUpdate","offset","flip","shift","useHover","useFocus","useDismiss","useRole","useInteractions","FloatingDelayGroup","TooltipTrigger","useMergeRefs","TooltipContent","FloatingPortal","React2","React3","React4","React5","useCurrentEditor","React6","React7","React8","React9","React10","React11","React12","React13","React14","React15","React16","useClick","useListNavigation","useTypeahead","FloatingList","FloatingFocusManager","useListItem","React17","React18","React19","React20","React21","limitShift","PopoverTrigger","PopoverContent","React22","React23","isDisabled","React24","React25","React26","React27","React28","React29","React30","React31","React32","React33","React34","React35","React36","React37","React38","React39","React40","React41","React42","React43","React44","React45","React46","React47","React48","React49","React50","React51","React52","React53","React54","React55","React56","React57","React58","Node","mergeAttributes","useEditor","Markdown","StarterKit","TextAlign","Underline","TaskList","TaskItem","Highlight","Typography","Superscript","Subscript","Table","TableHeader","TableRow","TableCell","downloadFile","EditorContext","Tag","BubbleMenu","EditorContent","RenderWrapper","Avatar"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAA,qBAAA,GAAA;AAAA,EAAC,cAAA,EAAAA,8BAAAA;AAAA,EAYA,YAAA,EAAAC,4BAAAA;AAAA,EAKc,UAAA,EAAAC,0BAAAA;AAAA,EA+Dd,cAAA,EAAAC,8BAAAA;AAAA,EAIA,cAAA,EAAAC;AAAA,CAAA;ACrED,IAAO,mBAAA,GAAQ,CAAC,EAAE,OAAA,EAAQ,KAAwB;AAChD,EAAA,uCACG,OAAA,EAAA,EAAM,QAAA,EAAQ,IAAA,EAAC,SAAA,EAAW,sBAAO,cAAA,EAChC,QAAA,EAAA;AAAA,oBAAAC,cAAA,CAAC,QAAA,EAAA,EAAO,GAAA,EAAK,OAAA,EAAS,IAAA,EAAK,YAAA,EAAa,CAAA;AAAA,IAAE;AAAA,GAAA,EAE5C,CAAA;AAEJ;;;ACrBA,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;AC0BA,IAAO,mBAAQ,CAAC,EAAE,MAAA,EAAQ,QAAA,GAAW,IAAG,KAAqB;AAE3D,EAAA,MAAM,MAAA,GAAS,EAAE,QAAA,EAAU,KAAA,EAAO,cAAA,EAAe;AAMjD,EAAA,MAAM,IAAA,GAAOC,gBAAQ,MAAM;AACzB,IAAA,QAAQ,MAAA,EAAQ,aAAY;AAAG,MAC7B,KAAK,KAAA;AACH,QAAA,uBAAOD,eAACE,sBAAA,EAAA,EAAiB,CAAA;AAAA,MAC3B,KAAK,KAAA;AACH,QAAA,uBAAOF,eAACG,qBAAA,EAAA,EAAgB,CAAA;AAAA,MAC1B,KAAK,KAAA;AAAA,MACL,KAAK,MAAA;AACH,QAAA,uBAAOH,eAACI,sBAAA,EAAA,EAAiB,CAAA;AAAA,MAC3B,KAAK,KAAA;AAAA,MACL,KAAK,MAAA;AACH,QAAA,uBAAOJ,eAACK,uBAAA,EAAA,EAAkB,CAAA;AAAA,MAC5B,KAAK,KAAA;AACH,QAAA,uBAAOL,eAACM,qBAAA,EAAA,EAAgB,CAAA;AAAA,MAC1B,KAAK,KAAA;AAAA,MACL,KAAK,KAAA;AAAA,MACL,KAAK,KAAA;AAAA,MACL,KAAK,KAAA;AACH,QAAA,uBAAON,eAACO,yBAAA,EAAA,EAAoB,CAAA;AAAA,MAC9B,KAAK,KAAA;AACH,QAAA,uBAAOP,eAACQ,0BAAA,EAAA,EAAqB,CAAA;AAAA,MAC/B,KAAK,KAAA;AAAA,MACL,KAAK,MAAA;AACH,QAAA,uBAAOR,eAACS,qBAAA,EAAA,EAAgB,CAAA;AAAA,MAC1B,KAAK,KAAA;AACH,QAAA,uBAAOT,eAACU,uBAAA,EAAA,EAAkB,CAAA;AAAA,MAC5B,KAAK,KAAA;AACH,QAAA,uBAAOV,eAACW,qBAAA,EAAA,EAAgB,CAAA;AAAA,MAC1B,KAAK,IAAA;AAAA,MACL,KAAK,UAAA;AACH,QAAA,uBAAOX,eAACY,0BAAA,EAAA,EAAqB,CAAA;AAAA,MAC/B,KAAK,KAAA;AAAA,MACL,KAAK,KAAA;AAAA,MACL,KAAK,IAAA;AACH,QAAA,uBAAOZ,eAACa,qBAAA,EAAA,EAAgB,CAAA;AAAA,MAC1B,KAAK,SAAA;AACH,QAAA,uBAAOb,cAAAA,CAAC,GAAA,EAAA,EAAE,KAAA,EAAO,MAAA,EAAQ,WAAU,0BAAA,EAA2B,CAAA;AAAA;AAAA,MAChE;AACE,QAAA,uBAAOA,eAACc,yBAAA,EAAA,EAAoB,CAAA;AAAA;AAChC,EACF,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA;AAEX,EAAA,uBAAOd,cAAAA,CAAC,MAAA,EAAA,EAAK,KAAA,EAAO,QAAS,QAAA,EAAA,IAAA,EAAK,CAAA;AACpC;AC9BA,IAAO,mBAAA,GAAQ,CAAC,EAAE,OAAA,EAAQ,KAAwB;AAChD,EAAA,uBACEe,eAAAA,CAAC,OAAA,EAAA,EAAM,UAAQ,IAAA,EAAC,SAAA,EAAW,sBAAO,cAAA,EAChC,QAAA,EAAA;AAAA,oBAAAf,cAAAA,CAAC,QAAA,EAAA,EAAO,GAAA,EAAK,OAAA,EAAS,MAAK,WAAA,EAAY,CAAA;AAAA,IAAE;AAAA,GAAA,EAE3C,CAAA;AAEJ;ACvDA,IAAM,gBAAA,GAAqC;AAAA;AAE3C,CAAA;AAoBA,IAAO,wBAAQ,CAAC,EAAE,MAAM,gBAAA,EAAkB,GAAG,MAAK,KAA0B;AAC1E,EAAA,MAAM,YAAA,GAAeC,gBAAQ,MAAM;AACjC,IAAA,OAAO,EAAE,GAAG,gBAAA,EAAkB,GAAG,gBAAA,EAAiB;AAAA,EACpD,CAAA,EAAG,CAAC,gBAAgB,CAAC,CAAA;AACrB,EAAA,MAAM,aAAA,GAAgBA,gBAAQ,MAAM;AAClC,IAAA,MAAM,MAAA,GAAS,aAAa,IAAI,CAAA;AAChC,IAAA,OAAO,MAAA,GAASe,YAAA,CAAK,MAAM,CAAA,GAAI,IAAA;AAAA,EACjC,CAAA,EAAG,CAAC,IAAA,EAAM,YAAY,CAAC,CAAA;AAGvB,EAAA,IAAI,CAAC,aAAA,EAAe,uBAAOD,gBAAC,KAAA,EAAA,EAAI,QAAA,EAAA;AAAA,IAAA,gCAAA;AAAA,IAAM;AAAA,GAAA,EAAK,CAAA;AAE3C,EAAA,uBACEf,cAAAA,CAACiB,gBAAA,EAAA,EAAS,QAAA,kBAAUjB,cAAAA,CAAC,KAAA,EAAA,EAAI,QAAA,EAAA,uBAAA,EAAM,CAAA,EAC7B,QAAA,kBAAAA,cAAAA,CAAC,aAAA,EAAA,EAAe,GAAG,MAAM,CAAA,EAC3B,CAAA;AAEJ;AC5BA,IAAM,KAAKkB,2BAAA,CAAW,EAAE,MAAM,IAAA,EAAM,MAAA,EAAQ,MAAM,CAAA;AAGlD,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;AAKA,SAAS,UAAU,GAAA,EAAa;AAC9B,EAAA,IAAI,MAAW,EAAC;AAChB,EAAA,IAAI;AAEF,IAAA,GAAA,GAAM,IAAA,CAAK,MAAM,GAAG,CAAA;AAAA,EACtB,CAAA,CAAA,MAAQ;AACN,IAAA,IAAI;AAEF,MAAA,GAAA,GAAM,IAAA,CAAK,KAAA,CAAMC,qBAAA,CAAW,GAAG,CAAC,CAAA;AAAA,IAClC,CAAA,CAAA,MAAQ;AAEN,MAAA,GAAA,GAAM,EAAE,MAAM,GAAA,EAAI;AAAA,IACpB;AAAA,EACF;AACA,EAAA,OAAO,GAAA;AACT;AAKA,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;AAGA,SAAS,gBAAgB,EAAA,EAAY;AACnC,EAAA,OAAO,gBAAgB,EAAE,CAAA,EAAA,CAAA;AAC3B;AAYA,SAAS,yBAAyB,GAAA,EAAa;AAC7C,EAAA,IAAI,GAAA,GAAM,CAAA;AACV,EAAA,IAAI,EAAA,GAAK,CAAA;AACT,EAAA,IAAI,GAAA,GAAM,EAAA;AACV,EAAA,MAAM,YAAA,uBAAmB,GAAA,EAAoB;AAE7C,EAAA,OAAO,GAAA,GAAM,IAAI,MAAA,EAAQ;AACvB,IAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,OAAA,CAAQ,UAAA,EAAY,GAAG,CAAA;AACzC,IAAA,IAAI,UAAU,EAAA,EAAI;AAEhB,MAAA,GAAA,IAAO,GAAA,CAAI,MAAM,GAAG,CAAA;AACpB,MAAA;AAAA,IACF;AAGA,IAAA,GAAA,IAAO,GAAA,CAAI,KAAA,CAAM,GAAA,EAAK,KAAK,CAAA;AAM3B,IAAA,MAAM,UAAA,GAAa,GAAA,CAAI,KAAA,CAAM,KAAK,CAAA;AAGlC,IAAA,MAAM,QAAA,GAAW,UAAA,CAAW,KAAA,CAAM,UAAA,CAAW,MAAM,CAAA;AACnD,IAAA,MAAM,YAAA,GAAe,QAAA,CAAS,MAAA,CAAO,gBAAgB,CAAA;AACrD,IAAA,IAAI,MAAA,GAAS,EAAA;AAEb,IAAA,IAAI,iBAAiB,EAAA,EAAI;AAEvB,MAAA,MAAA,GAAS,KAAA,GAAQ,UAAA,CAAW,MAAA,GAAS,YAAA,GAAe,CAAA;AAAA,IACtD,CAAA,MAAO;AAEL,MAAA,MAAM,WAAW,GAAA,CAAI,OAAA,CAAQ,KAAA,EAAO,KAAA,GAAQ,WAAW,MAAM,CAAA;AAC7D,MAAA,IAAI,aAAa,EAAA,EAAI;AAEnB,QAAA,GAAA,IAAO,GAAA,CAAI,MAAM,KAAK,CAAA;AACtB,QAAA,GAAA,GAAM,GAAA,CAAI,MAAA;AACV,QAAA;AAAA,MACF,CAAA,MAAO;AACL,QAAA,MAAA,GAAS,QAAA;AAAA,MACX;AAAA,IACF;AAKA,IAAA,MAAM,KAAA,GAAQ,IAAI,KAAA,CAAM,KAAA,GAAQ,WAAW,MAAA,EAAQ,MAAM,EAAE,IAAA,EAAK;AAGhE,IAAA,MAAM,SAAA,GAAY,KAAA,CAAM,KAAA,CAAM,oCAAoC,CAAA;AAClE,IAAA,MAAM,OAAO,SAAA,GAAa,SAAA,CAAU,CAAC,CAAA,IAAK,SAAA,CAAU,CAAC,CAAA,GAAK,MAAA;AAG1D,IAAA,MAAM,OAAA,GAAU,KAAA,CAAM,MAAA,CAAO,YAAY,CAAA;AACzC,IAAA,IAAI,OAAA,GAAU,EAAA;AACd,IAAA,IAAI,YAAY,EAAA,EAAI;AAClB,MAAA,OAAA,GAAU,KAAA,CAAM,KAAA,CAAM,OAAA,GAAU,KAAA,CAAM,MAAM,OAAO,CAAA,CAAE,KAAA,CAAM,YAAY,CAAA,CAAG,CAAC,CAAA,CAAE,MAAM,EAAE,IAAA,EAAK;AAAA,IAC5F;AAGA,IAAA,MAAM,EAAA,GAAK,gBAAgB,EAAA,EAAI,CAAA;AAC/B,IAAA,YAAA,CAAa,GAAA,CAAI,IAAI,OAAO,CAAA;AAG5B,IAAA,MAAM,WAAW,IAAA,GAAO,CAAA,MAAA,EAAS,KAAK,SAAA,CAAU,IAAI,CAAC,CAAA,CAAA,GAAK,EAAA;AAC1D,IAAA,GAAA,IAAO,CAAA,QAAA,EAAW,QAAQ,CAAA,OAAA,EAAU,EAAE,CAAA,KAAA,CAAA;AAGtC,IAAA,MAAM,SAAA,GAAY,GAAA,CAAI,OAAA,CAAQ,KAAA,EAAO,MAAM,CAAA;AAC3C,IAAA,GAAA,GAAM,SAAA,KAAc,EAAA,GAAK,MAAA,GAAS,SAAA,GAAY,CAAA;AAAA,EAChD;AAEA,EAAA,OAAO,EAAE,IAAA,EAAM,GAAA,EAAK,YAAA,EAAa;AACnC;AAMA,SAAS,kBAAkBC,GAAAA,EAAS;AAClC,EAAAA,GAAAA,CAAG,OAAO,KAAA,CAAM,MAAA,CAAO,YAAY,cAAA,EAAgB,SAAU,OAAY,MAAA,EAAiB;AACxF,IAAA,MAAM,MAAM,KAAA,CAAM,GAAA;AAClB,IAAA,MAAM,MAAM,KAAA,CAAM,GAAA;AAClB,IAAA,IAAI,IAAI,KAAA,CAAM,GAAA,EAAK,MAAM,CAAC,CAAA,KAAM,OAAO,OAAO,KAAA;AAG9C,IAAA,MAAM,IAAI,GAAA,CAAI,KAAA,CAAM,GAAG,CAAA,CAAE,MAAM,2BAA2B,CAAA;AAC1D,IAAA,IAAI,CAAC,GAAG,OAAO,KAAA;AACf,IAAA,IAAI,QAAQ,OAAO,KAAA;AAGnB,IAAA,MAAM,GAAA,GAAM,CAAA,CAAE,CAAC,CAAA,CAAE,IAAA,EAAK;AAGtB,IAAA,MAAM,IAAA,GAAO,mBAAmB,GAAG,CAAA,kBAAA,CAAA;AACnC,IAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,IAAA,CAAK,aAAA,EAAe,IAAI,CAAC,CAAA;AAC7C,IAAA,KAAA,CAAM,OAAA,GAAU,IAAA;AAGhB,IAAA,KAAA,CAAM,GAAA,IAAO,CAAA,CAAE,CAAC,CAAA,CAAE,MAAA;AAClB,IAAA,OAAO,IAAA;AAAA,EACT,CAAC,CAAA;AACH;AAGA,IAAI;AACF,EAAA,EAAA,CAAG,IAAI,iBAAiB,CAAA;AAC1B,CAAA,CAAA,MAAQ;AAAC;AAQT,IAAO,sBAAA,GAAQ,CAAC,EAAE,OAAA,GAAU,IAAI,WAAA,EAAa,gBAAA,EAAkB,QAAA,EAAU,eAAA,EAAgB,KAA2B;AAElH,EAAA,MAAM,YAAA,GAAenB,gBAAQ,MAAM;AACjC,IAAA,IAAI,CAAC,SAAS,OAAO,IAAA;AAErB,IAAA,IAAI,YAAA,GAAe,OAAA;AAKnB,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;AAEjB,IAAA,IAAI,YAAY,UAAA,EAAY;AAC1B,MAAA,UAAA,GAAa,IAAA;AACb,MAAA,YAAA,IAAgB,KAAA;AAAA,IAClB;AAGA,IAAA,MAAM,EAAE,IAAA,EAAM,YAAA,EAAc,YAAA,EAAa,GAAI,yBAAyB,YAAY,CAAA;AAGlF,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;AAMpE,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,OAAOoB,uBAAM,OAAA,EAAS;AAAA,MACpB,OAAA,EAAS,CAAC,OAAA,KAAY;AACpB,QAAA,IAAK,OAAA,CAAoB,SAAS,gBAAA,EAAkB;AAClD,UAAA,SAAA,EAAA;AAEA,UAAA,MAAM,EAAA,GAAK,OAAA;AACX,UAAA,MAAM,IAAA,GAAO,GAAG,OAAA,CAAQ,IAAA;AACxB,UAAA,MAAM,QAAA,GAAW,EAAA,CAAG,OAAA,CAAQ,IAAA,IAAQ,EAAA;AACpC,UAAA,IAAI,OAAY,EAAC;AAGjB,UAAA,IAAI,sBAAA,CAAuB,IAAA,CAAK,QAAQ,CAAA,EAAG;AACzC,YAAA,MAAM,GAAA,GAAM,YAAA,CAAa,GAAA,CAAI,QAAQ,CAAA,IAAK,EAAA;AAC1C,YAAA,IAAA,GAAO,UAAU,GAAG,CAAA;AAAA,UAEtB;AAGA,UAAA,MAAM,OAAA,GAAU,cAAc,SAAA,KAAc,aAAA;AAE5C,UAAA,uBACErB,cAAAA;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,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,eAAe,QAAA,EAAA,YAAA,EAAa,CAAA;AACpD;ACzPA,IAAO,uBAAA,GAAQ,CAAC,EAAE,OAAA,EAAS,aAAY,KAA4B;AACjE,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIsB,iBAAS,EAAE,CAAA;AACzC,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,iBAAS,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,SAASC,MAAAA,EAAO;AAEd,QAAA,QAAA,CAAS,sDAAmB,CAAA;AAAA,MAC9B;AAAA,IACF;AAAA,EACF,CAAA;AAEA,EAAAC,iBAAA,CAAU,MAAM;AACd,IAAA,IAAA,EAAK;AAAA,EACP,CAAA,EAAG,CAAC,OAAO,CAAC,CAAA;AACZ,EAAA,OAAO,wBACLxB,cAAAA,CAACyB,eAAO,MAAA,EAAO,OAAA,EAAQ,OAAO,KAAA,EAAO,CAAA,mBAErCzB,cAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,aAAA,EACb,QAAA,kBAAAA,eAAC,sBAAA,EAAA,EAAe,OAAA,EAAkB,aAA0B,CAAA,EAC9D,CAAA;AAEJ;;;ACtDO,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;AAQ3B,SAAS,EAAA,CAAG,KAAc,IAAA,EAAc;AAC7C,EAAA,OAAO,QAAA,CAAS,IAAA,CAAK,GAAG,CAAA,KAAM,WAAW,IAAI,CAAA,CAAA,CAAA;AAC/C;AAOO,SAAS,QAAqB,GAAA,EAAmB;AACtD,EAAA,OAAO,EAAA,CAAG,KAAK,WAAW,CAAA;AAC5B;AAOO,SAAS,MAAmB,GAAA,EAAmB;AACpD,EAAA,OAAO,CAAC,QAAQ,GAAG,CAAA;AAErB;AAMO,SAAS,SAAS,GAAA,EAAmC;AAC1D,EAAA,OAAO,EAAA,CAAG,KAAK,QAAQ,CAAA;AACzB;AAOO,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;AAOO,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;AAEO,IAAM,WAAA,GAAc,CAAC,IAAA,KAA2B;AACrD,EAAA,OAAO,eAAA,CAAgB,IAAA,CAAK,IAAA,IAAQ,QAAA,CAAS,IAAI,CAAA;AACnD;;;ACrJO,SAAS,oBAAA,CAAqB,cAAA,GAA2B,CAAC,GAAG,CAAA,EAAG;AACrE,EAAA,MAAM,QAAA,GAAW0B,cAAA,CAAkC,EAAE,CAAA;AAErD,EAAAF,kBAAU,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;AClCO,SAAS,sBAAA,GAA2C;AACzD,EAAA,MAAM,OAAA,GAAUG,sBAAwB,IAAI,CAAA;AAE5C,EAAA,MAAM,cAAA,GAAiB,CAAC,EAAE,KAAA,EAAO,QAAA,EAAS,qBAA0C3B,cAAAA,CAAC,OAAA,CAAQ,QAAA,EAAR,EAAiB,KAAA,EAAO,OAAQ,QAAA,EAAS,CAAA;AAE9H,EAAA,MAAM,iBAAiB,MAAS;AAC9B,IAAA,MAAM,KAAA,GAAQ4B,mBAAW,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;ACjBO,SAAS,WAAA,CAA4C,IAAA,EAA0B,IAAA,GAAe,GAAA,EAAK;AACxG,EAAA,MAAM,EAAE,SAAQ,GAAIF,cAAAA,CAAO,EAAE,IAAA,EAAM,OAAA,EAAS,MAAsE,CAAA;AAClH,EAAAF,kBAAU,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,OAAOK,mBAAA,CAAY,QAAA,EAAU,EAAE,CAAA;AACjC;;;ACvCO,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;AASO,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;AAOO,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;AAOO,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;AAQO,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;AAcO,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;AAMO,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;AAQO,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;AAMO,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;AAOO,IAAM,iBAAA,GAAoB,CAAC,QAAA,KAAqB;AACrD,EAAA,OAAO,QAAA,CAAS,KAAA,CAAM,GAAG,CAAA,CAAE,KAAI,IAAK,EAAA;AACtC;AAMO,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;AAC3B,EAAA,MAAA,CAAO,GAAA,CAAI,gBAAgB,GAAG,CAAA;AAChC;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;AAGO,SAAS,SAAA,CACd,QACA,QAAA,EAGG;AACH,EAAA,MAAM,SAAS,EAAC;AAChB,EAAA,KAAA,MAAW,CAAC,SAAA,EAAW,OAAO,KAAK,MAAA,CAAO,OAAA,CAAQ,QAAQ,CAAA,EAAG;AAC3D,IAAA,MAAM,GAAA,GAAM,SAAA;AACZ,IAAA,IAAI,OAAO,YAAY,UAAA,EAAY;AACjC,MAAA,MAAA,CAAO,GAAG,CAAA,GAAK,OAAA,CAAsC,MAAM,CAAA;AAAA,IAC7D,WAAW,OAAO,OAAA,KAAY,QAAA,IAAY,MAAA,IAAU,WAAW,MAAA,EAAQ;AACrE,MAAA,MAAA,CAAO,GAAG,CAAA,GAAI,MAAA,CAAO,OAAkB,CAAA;AAAA,IACzC,CAAA,MAAO;AACL,MAAA,MAAA,CAAO,GAAG,CAAA,GAAI,OAAA;AAAA,IAChB;AAAA,EACF;AACA,EAAA,OAAO,MAAA;AACT;AAGO,SAAS,UAAA,CACd,SACA,QAAA,EAGK;AACL,EAAA,OAAO,OAAA,EAAS,IAAI,CAAC,MAAA,KAAW,UAAgB,MAAA,EAAQ,QAAQ,CAAC,CAAA,IAAK,EAAC;AACzE;;;ACxXO,SAAS,aAAA,CAAc,QAA8B,IAAA,EAAa;AACvE,EAAA,MAAM,cAAcH,cAAAA,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,EAAAF,kBAAU,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;ACZO,SAAS,YAAe,IAAA,EAAS;AACtC,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIF,iBAAS,IAAI,CAAA;AACvC,EAAA,MAAM,QAAA,GAAWI,eAAO,IAAI,CAAA;AAM5B,EAAA,MAAM,QAAA,GAAW,CAAC,MAAA,KAAc;AAC9B,IAAA,QAAA,CAAS,OAAA,GAAU,MAAA;AACnB,IAAA,QAAA,CAAS,MAAM,CAAA;AAAA,EACjB,CAAA;AAMA,EAAA,MAAM,QAAA,GAAW,MAAM,QAAA,CAAS,OAAA;AAEhC,EAAA,OAAO,CAAC,KAAA,EAAO,QAAA,EAAU,QAAQ,CAAA;AACnC;AClBO,IAAM,YAAA,GAAe,CAAI,UAAA,EAAe,aAAA,KAAsC;AACnF,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIJ,iBAAY,UAAU,CAAA;AAE1D,EAAAE,kBAAU,MAAM;AACd,IAAA,IAAI,eAAe,UAAA,EAAY;AAC7B,MAAA,aAAA,CAAc,UAAU,CAAA;AAAA,IAC1B;AAAA,EACF,CAAA,EAAG,CAAC,UAAU,CAAC,CAAA;AAMf,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;ACxBO,SAAS,WAAA,CAA4C,MAA0B,IAAA,EAAc;AAClG,EAAA,MAAM,EAAE,SAAQ,GAAIE,cAAAA,CAAO,EAAE,IAAA,EAAM,OAAA,EAAS,MAAsE,CAAA;AAClH,EAAAF,kBAAU,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,OAAOK,mBAAAA,CAAY,QAAA,EAAU,EAAE,CAAA;AACjC;AC7CAC,sBAAA,CAAM,OAAOC,6BAAY,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,OAAOD,uBAAM,IAAI,CAAA,CAAE,OAAA,CAAQ,IAAI,EAAE,OAAA,EAAQ;AAC3C;AAKO,IAAM,iBAAA,GAAoB,CAAC,IAAA,EAAiB,IAAA,GAAyB,IAAA,KAAS;AACnF,EAAA,OAAOA,uBAAM,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,OAAOA,sBAAA,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,OAAOA,sBAAA,CAAM,IAAI,CAAA,CAAE,OAAA,EAAQ;AAC7B;AAEO,IAAM,QAAA,GAAW,CAAC,IAAA,KAAoB;AAC3C,EAAA,OAAOA,sBAAA,CAAM,IAAI,CAAA,CAAE,QAAA,CAAS,qBAAqB,CAAA;AACnD;ACtBA,IAAM,QAAA,GAAW,SAAA;AAEV,SAAS,eAAe,QAAA,EAAe;AAC5C,EAAA,MAAM,UAAA,GAAaE,qBAAI,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,GAAQA,oBAAA,CAAI,OAAA,CAAQ,YAAA,EAAc,SAAS,CAAA;AACjD,IAAA,MAAM,YAAA,GAAe,KAAA,CAAM,QAAA,CAASC,wBAAO,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;AC/CA,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,IAAIC,wBAAA,CAAQ,GAAG,CAAC,CAAA,EAAG,IAAIA,yBAAQ,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,IAAIA,wBAAA,CAAQ,IAAI,CAAA,CAAE,aAAA,EAAc;AACzC;AAEO,IAAM,SAAA,GAAY,CAAC,IAAA,KAAwB;AAChD,EAAA,OAAO,IAAIA,wBAAA,CAAQ,IAAI,CAAA,CAAE,UAAU,IAAI,CAAA;AACzC;AAGO,IAAM,MAAA,GAAS,CAAC,IAAA,KAAwB,IAAIA,yBAAQ,IAAI,CAAA,CAAE,GAAA,EAAI,CAAE,QAAA;AAEhE,IAAM,UAAA,GAAa,CAAC,IAAA,EAAqB,IAAA,EAAqB,IAAA,KAAiB;AACpF,EAAA,MAAM,CAAA,GAAI,IAAIA,wBAAA,CAAQ,IAAI,CAAA;AAC1B,EAAA,MAAM,CAAA,GAAI,IAAIA,wBAAA,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,IAAIA,wBAAA,CAAQ,GAAG,CAAA;AACzB,EAAA,IAAI,IAAA,EAAM;AACR,IAAA,OAAO,CAAA,CAAE,OAAA,CAAQ,QAAA,EAAUA,wBAAA,CAAQ,aAAa,CAAA;AAAA,EAClD,CAAA,MAAO;AACL,IAAA,OAAO,EAAE,eAAA,CAAgB,QAAA,EAAUA,wBAAA,CAAQ,aAAa,EAAE,QAAA,EAAS;AAAA,EACrE;AACF;AAEO,IAAM,SAAA,GAAY,CAAC,GAAA,KAAuB;AAC/C,EAAA,OAAO,IAAIA,wBAAA,CAAQ,GAAG,CAAA,CAAE,SAAA,EAAU;AACpC;AAEO,IAAM,UAAA,GAAa,CAAC,GAAA,KAAuB;AAChD,EAAA,OAAO,IAAIA,wBAAA,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,UAAAC,iBAAA,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,UAAAC,WAAA,CAAQ,IAAI,CAAA,CAAE;AAAA,YACZ,OAAA;AAAA,YACA,QAAA;AAAA,YACA,OAAA,EAAS;AAAA,WACV,CAAA;AAAA,QACH;AAAA,MACF,CAAA,MAAO;AACL,QAAAC,UAAA,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;;;ACxBO,IAAM,EAAA,GAAK;AACX,IAAM,KAAA,GAAQ;AACd,IAAM,iBAAA,GAAoB;AAC1B,IAAM,YAAA,GAAe;AACrB,IAAM,SAAA,GAAY;AAClB,IAAM,SAAA,GAAY;AAClB,IAAM,iBAAA,GAAoB;AAGlB,SAAR,aAAA,CAA+B,UAAkB,MAAA,EAAQ;AAC9D,EAAA,MAAM,cAAc,MAAM;AACxB,IAAA,IAAA,CAAK,YAAY,EAAE,GAAA,EAAK,MAAM,WAAA,EAAa,IAAI,CAAA;AAAA,EACjD,CAAA;AACA,EAAA,MAAM,QAAA,GAAWC,uBAAM,MAAA,CAAO;AAAA,IAC5B,OAAA;AAAA,IACA,OAAA,EAAS;AAAA,GACV,CAAA;AAGD,EAAA,QAAA,CAAS,aAAa,OAAA,CAAQ,GAAA;AAAA,IAC5B,SAAU,MAAA,EAAQ;AAChB,MAAA,MAAA,CAAO,OAAA,CAAQ,SAAS,CAAA,GAAI,QAAA,EAAS;AACrC,MAAA,OAAO,MAAA;AAAA,IACT,CAAA;AAAA,IACA,SAAU,KAAA,EAAO;AACf,MAAA,OAAO,OAAA,CAAQ,OAAO,KAAK,CAAA;AAAA,IAC7B;AAAA,GACF;AAGA,EAAA,QAAA,CAAS,aAAa,QAAA,CAAS,GAAA;AAAA,IAC7B,SAAU,QAAA,EAAU;AAClB,MAAA,IAAI,MAAA,CAAO,QAAA,CAAS,IAAI,CAAA,EAAG,OAAO,QAAA;AAElC,MAAA,IAAI,QAAA,CAAS,IAAA,EAAM,IAAA,KAAS,EAAA,EAAI;AAC9B,QAAA,MAAM,YAAA,GAAe,QAAA,CAAS,IAAA,EAAM,IAAA,KAAS,iBAAA;AAC7C,QAAA,IAAK,QAAA,CAAS,MAAA,EAAgB,SAAA,KAAc,KAAA,EAAO;AACjD,UAAA,WAAA,CAAY;AAAA,YACV,KAAA,EAAO,eAAe,EAAA,GAAK,MAAA;AAAA,YAC3B,OAAA,EAAS,SAAS,IAAA,CAAK,OAAA;AAAA,YACvB,QAAA,EAAU,eAAe,CAAA,GAAI;AAAA,WAC9B,CAAA;AAAA,QACH;AACA,QAAA,OAAO,OAAA,CAAQ,MAAA,CAAO,QAAA,CAAS,IAAI,CAAA;AAAA,MACrC;AACA,MAAA,OAAO,QAAA;AAAA,IACT,CAAA;AAAA,IACA,SAAU,GAAA,EAAK;AACb,MAAA,MAAM,SAAA,GAAY,GAAA,EAAK,MAAA,EAAQ,SAAA,KAAc,KAAA;AAC7C,MAAA,IAAI,CAAC,IAAI,QAAA,EAAU;AACjB,QAAA,IAAI,WAAW,WAAA,CAAY,EAAE,SAAS,8DAAA,EAAc,IAAA,EAAM,SAAS,CAAA;AAAA,MACrE,CAAA,MAAO;AACL,QAAA,QAAQ,GAAA,CAAI,UAAU,MAAA;AAAQ,UAC5B,KAAK,YAAA;AACH,YAAA,IAAI,SAAA,EAAW,WAAA,CAAY,EAAE,OAAA,EAAS,GAAA,CAAI,UAAU,IAAA,CAAK,OAAA,EAAS,IAAA,EAAM,OAAA,EAAS,CAAA;AACjF,YAAA,WAAA,EAAY;AACZ,YAAA;AAAA,UACF;AACE,YAAA,IAAI,SAAA,EAAW,WAAA,CAAY,EAAE,OAAA,EAAS,GAAA,CAAI,QAAA,EAAU,IAAA,CAAK,OAAA,IAAW,gCAAA,EAAS,IAAA,EAAM,OAAA,EAAS,CAAA;AAAA;AAChG,MACF;AAEA,MAAA,OAAO,OAAA,CAAQ,OAAO,GAAG,CAAA;AAAA,IAC3B;AAAA,GACF;AAGA,EAAA,OAAO;AAAA,IACL,GAAA,EAAK,OAAO,GAAA,EAAa,MAAA,EAAc,OAAA,KAAiC;AACtE,MAAA,MAAM,GAAA,GAAM,MAAM,QAAA,CAAS,EAAE,MAAA,EAAQ,OAAO,GAAA,EAAK,MAAA,EAAQ,GAAG,OAAA,EAAS,CAAA;AACrE,MAAA,OAAO,GAAA,CAAI,IAAA;AAAA,IACb,CAAA;AAAA,IAEA,IAAA,EAAM,OAAO,GAAA,EAAa,IAAA,EAAY,OAAA,KAAiC;AACrE,MAAA,MAAM,GAAA,GAAM,MAAM,QAAA,CAAS,EAAE,MAAA,EAAQ,QAAQ,GAAA,EAAK,IAAA,EAAM,GAAG,OAAA,EAAS,CAAA;AACpE,MAAA,OAAO,GAAA,CAAI,IAAA;AAAA,IACb,CAAA;AAAA,IAEA,GAAA,EAAK,OAAO,GAAA,EAAa,IAAA,EAAY,OAAA,KAAiC;AACpE,MAAA,MAAM,GAAA,GAAM,MAAM,QAAA,CAAS,EAAE,MAAA,EAAQ,OAAO,GAAA,EAAK,IAAA,EAAM,GAAG,OAAA,EAAS,CAAA;AACnE,MAAA,OAAO,GAAA,CAAI,IAAA;AAAA,IACb,CAAA;AAAA,IAEA,MAAA,EAAQ,OAAO,GAAA,EAAa,IAAA,EAAY,OAAA,KAAiC;AACvE,MAAA,MAAM,GAAA,GAAM,MAAM,QAAA,CAAS,EAAE,MAAA,EAAQ,UAAU,GAAA,EAAK,IAAA,EAAM,GAAG,OAAA,EAAS,CAAA;AACtE,MAAA,OAAO,GAAA,CAAI,IAAA;AAAA,IACb;AAAA,GACF;AACF;;;ACxEA,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,GAAYb,eAAyB,IAAI,CAAA;AAC/C,EAAA,MAAM,oBAAA,GAAuBA,eAA4B,IAAI,CAAA;AAC7D,EAAA,MAAM,CAAC,gBAAA,EAAkB,mBAAmB,CAAA,GAAIJ,iBAAwB,IAAI,CAAA;AAC5E,EAAA,MAAM,oBAAA,GAAuBI,eAA4B,IAAI,CAAA;AAC7D,EAAA,MAAM,iBAAA,GAAoBA,eAAO,CAAC,CAAA;AAClC,EAAA,MAAM,YAAA,GAAeA,cAAAA,CAAO,QAAA,CAAS,eAAA,KAAoB,QAAQ,CAAA;AACjE,EAAA,MAAM,SAAA,GAAYA,eAAO,KAAK,CAAA;AAC9B,EAAA,MAAM,eAAA,GAAkBG,mBAAAA,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,EAAAL,kBAAU,MAAM;AACd,IAAA,IAAI,CAAC,GAAA,EAAK;AACV,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,CAACY,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;AC9If,IAAM,gBAAgB,CAAC;AAAA,EACrB,cAAA;AAAA,EACA,cAAA;AAAA,EACA;AACF,CAAA,KAAsF;AACpF,EAAA,MAAM,CAAC,IAAI,CAAA,GAAII,SAAA,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,uBACExC,cAAAA,CAACyC,SAAA,EAAA,EAAK,OAAA,EAAQ,QAAA,EAAS,OAAM,QAAA,EAAS,SAAA,EAAU,aAAA,EAC9C,QAAA,kBAAA1B,gBAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,KAAA,EAAO,KAAI,EACtB,QAAA,EAAA;AAAA,IAAA,cAAA,KAAmB2B,qBAAA,CAAe,iCAAiB1C,cAAAA,CAAC2C,cAAM,OAAA,EAAQ,oEAAA,EAAc,MAAK,OAAA,EAAQ,CAAA;AAAA,oBAC9F5B,eAAAA,CAACyB,SAAA,EAAA,EAAK,MAAY,IAAA,EAAK,OAAA,EAAQ,WAAU,QAAA,EACvC,QAAA,EAAA;AAAA,sBAAAxC,cAAAA,CAACwC,SAAA,CAAK,IAAA,EAAL,EAAU,IAAA,EAAK,YAAW,KAAA,EAAO,CAAC,EAAE,QAAA,EAAU,IAAA,EAAM,OAAA,EAAS,kCAAS,CAAA,EACrE,QAAA,kBAAAxC,cAAAA,CAAC4C,UAAA,CAAM,QAAA,EAAN,EAAe,YAAA,EAAa,cAAA,EAAe,WAAA,EAAY,gCAAA,EAAQ,CAAA,EAClE,CAAA;AAAA,sBACA5C,cAAAA,CAACyC,SAAA,EAAA,EAAK,OAAA,EAAQ,QAAA,EACZ,QAAA,kBAAAzC,cAAAA,CAAC6C,WAAA,EAAA,EAAO,IAAA,EAAK,SAAA,EAAU,OAAA,EAAS,QAAA,EAAU,2BAE1C,CAAA,EACF;AAAA,KAAA,EACF;AAAA,GAAA,EACF,CAAA,EACF,CAAA;AAEJ,CAAA;AA2BA,IAAO,kBAAA,GAAQ,CAAC,EAAE,QAAA,EAAU,OAAA,EAAS,MAAA,GAAS,CAAA,EAAG,KAAA,GAAQ,CAAA,EAAG,eAAA,GAAkB,IAAA,EAAM,aAAA,EAAe,aAAY,KAAuB;AACpI,EAAA,MAAM,QAAA,GAAWnB,eAAuB,IAAI,CAAA;AAC5C,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,IAAIJ,gBAAAA,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,iBAAS,EAAE,CAAA;AAC7D,EAAA,MAAM,eAAeI,cAAAA,EAAe;AACpC,EAAA,MAAM,mBAAA,GAAsB,CAACoB,SAAAA,KAAqB;AAChD,IAAA,oBAAA,CAAqBA,SAAQ,CAAA;AAAA,EAC/B,CAAA;AAEA,EAAA,MAAM,4BAAA,GAA+BC,mCAAA,CAAqB,EAAE,eAAA,EAAiB,MAAM,CAAA;AACnF,EAAA,MAAM,0BAA0BC,yBAAA,CAAgB;AAAA,IAC9C,cAAA,EAAgB,KAAA,CAAM,CAAC,CAAA,GAAI;AAAA;AAAA,GAC5B,CAAA;AACD,EAAA,MAAM,qBAAqBC,eAAA,EAAW;AAMtC,EAAA,MAAM,EAAE,YAAW,GAAI,uBAAA;AACvB,EAAA,MAAM,EAAE,MAAA,EAAQ,OAAA,EAAQ,GAAI,kBAAA;AAM5B,EAAA,MAAMC,QAAAA,GAAU,sBACdnC,eAAAA,CAAC0B,SAAA,EAAA,EAAK,GAAA,EAAK,CAAA,EAAG,KAAA,EAAM,QAAA,EAAS,SAAA,EAAW,qBAAA,CAAO,UAAA,EAC7C,QAAA,EAAA;AAAA,oBAAAzC,eAAC,MAAA,EAAA,EAAO,CAAA;AAAA,oBACRA,eAAC,OAAA,EAAA,EAAQ;AAAA,GAAA,EAqBX,CAAA;AAEF,EAAA,MAAM,YAAA,GAAe,CAACmD,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,EAAA3B,kBAAU,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,kBAAU,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,IAAIY,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,uBACEpC,cAAAA,CAACyC,SAAA,EAAA,EAAK,WAAU,aAAA,EAAc,OAAA,EAAQ,UAAS,KAAA,EAAM,QAAA,EACnD,QAAA,kBAAAzC,cAAAA,CAAC2C,cAAM,OAAA,EAASP,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,EAAAZ,kBAAU,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,uBACExB,cAAAA,CAAC,KAAA,EAAA,EAAI,GAAA,EAAK,QAAA,EAAU,WAAW,qBAAA,CAAO,YAAA,EACpC,QAAA,kBAAAA,cAAAA,CAACoD,iBAAO,SAAA,EAAW,CAAA,2CAAA,CAAA,EACjB,0BAAArC,eAAAA,CAACsC,aAAA,EAAA,EAAS,UAAU,QAAA,EACjB,QAAA,EAAA;AAAA,IAAA,eAAA,oBACCrD,eAACqD,aAAA,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,kBAAArD,cAAAA,CAAC,cAAW,CAAA,EACd,CAAA;AAAA,oBAEFA,eAACqD,aAAA,CAAS,KAAA,EAAT,EACC,QAAA,kBAAAtC,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,aAAA,EACb,QAAA,EAAA;AAAA,sBAAAf,cAAAA;AAAA,QAACsD,aAAA;AAAA,QAAA;AAAA,UACC,YAAA,EAAcC,sBAAA;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,qDAAA;AAAA;AAAA,cACT,UAAA,EAAY,IAAA;AAAA;AAAA,cAEZ,eAAA,EAAiB,KAAA;AAAA;AAAA,cAEjB,mBAAA,EAAqB,8DAAA;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,qBAAgBvD,eAAC,aAAA,EAAA,EAAc,mBAAA,EAA2C,GAAG,WAAA,EAAa;AAAA;AAAA,OAClH;AAAA,sBACAA,cAAAA,CAACkD,QAAAA,EAAA,EAAQ;AAAA,KAAA,EACX,CAAA,EACF;AAAA,GAAA,EACF,GACF,CAAA,EACF,CAAA;AAEJ;AC7QA,IAAO,mBAAA,GAAQ,CAAC,EAAE,MAAA,EAAQ,SAAS,SAAA,EAAW,QAAA,EAAU,aAAY,KAAwB;AAgB1F,EAAA,MAAM,OAAA,GAAUjD,gBAAQ,MAAM;AAC5B,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,uBAAOD,eAACwD,UAAA,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,uBAAOxD,eAACyD,UAAA,EAAA,EAAM,aAAA,EAAe,sBAAO,cAAA,EAAgB,GAAA,EAAK,OAAA,EAAS,GAAA,EAAI,0BAAA,EAAO,CAAA;AAAA,MAE/E,KAAK,KAAA;AACH,QAAA,uBAAOzD,cAAAA,CAAC,kBAAA,EAAA,EAAW,OAAA,EAAmB,GAAG,WAAW,QAAA,EAAoB,CAAA;AAAA;AAAA,MAE1E,KAAK,KAAA;AAIH,QAAA,uBAAOA,cAAAA,CAAC,mBAAA,EAAA,EAAY,OAAA,EAAkB,CAAA;AAAA,MAExC,KAAK,KAAA;AACH,QAAA,uBAAOA,cAAAA,CAAC,mBAAA,EAAA,EAAY,OAAA,EAAkB,CAAA;AAAA,MAExC,KAAK,IAAA;AAAA,MACL,KAAK,UAAA;AACH,QAAA,uBAAOA,cAAAA,CAAC,uBAAA,EAAA,EAAgB,OAAA,EAAkB,WAAA,EAA0B,CAAA;AAAA,MAEtE;AACE,QAAA,uBAAOA,eAACyB,WAAAA,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,uBACEzB,cAAAA,CAACyC,SAAAA,EAAA,EAAK,OAAA,EAAQ,UAAS,KAAA,EAAM,QAAA,EAAS,SAAA,EAAU,aAAA,EAC7C,QAAA,EAAA,OAAA,EACH,CAAA;AAEJ;AC3CA,IAAO,4BAAQ,CAAC;AAAA,EACd,IAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA;AAAA,EACA,KAAA,GAAQ,0BAAA;AAAA,EACR,OAAA;AAAA,EACA,QAAA;AAAA,EACA,UAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA,KAA8B;AAC5B,EAAA,uBACEzC,cAAAA;AAAA,IAAC0D,WAAA;AAAA,IAAA;AAAA,MACC,KAAA;AAAA,MACA,IAAA,EAAM,KAAA;AAAA,MACN,KAAA,EAAM,MAAA;AAAA,MACN,IAAA;AAAA,MACA,OAAA;AAAA,MAGA,QAAA,kBAAA1D,cAAAA;AAAA,QAAC,mBAAA;AAAA,QAAA;AAAA,UACC,OAAA;AAAA,UACA,MAAA;AAAA,UACA,QAAA;AAAA,UACA,UAAA;AAAA,UACA,SAAA;AAAA,UACA;AAAA;AAAA;AACF;AAAA,GACF;AAEJ;;;ACnFA,IAAA2D,sBAAAA,GAAA;AAAA,EAAC,MAAA,EAAAC;AAAA,CAAA;ACyBD,IAAO,cAAA,GAAQC,mBAA2C,CAAC,EAAE,IAAI,GAAA,EAAK,SAAA,EAAW,MAAA,EAAO,EAAgB,GAAA,KAAQ;AAC9G,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIvC,iBAAS,KAAK,CAAA;AAC5C,EAAA,MAAM,QAAA,GAAWrB,gBAAQ,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,EAAAuB,kBAAU,MAAM;AACd,IAAA,UAAA,CAAW,IAAI,CAAA;AAAA,EACjB,CAAA,EAAG,CAAC,GAAG,CAAC,CAAA;AAER,EAAA,uBACExB,cAAAA,CAAA8D,mBAAA,EAAA,EACE,QAAA,kBAAA9D,cAAAA,CAAC+D,SAAA,EAAA,EAAK,QAAA,EAAU,OAAA,EAAS,gBAAA,EAAiB,WAAA,EAAY,GAAA,EAAI,uBAAA,EACxD,QAAA,kBAAA/D,cAAAA,CAAC,QAAA,EAAA,EAAO,EAAA,EAAQ,GAAA,EAAU,GAAA,EAAK,QAAA,EAAU,SAAA,EAAWgE,4BAAA,CAAWL,sBAAAA,CAAO,MAAA,EAAQ,SAAS,CAAA,EAAG,MAAA,EAAQ,YAAA,EAAc,CAAA,EAClH,CAAA,EACF,CAAA;AAEJ,CAAC;ACxCM,IAAM,IAAA,GAAOM,4BAAW,MAAA,CAAO;AAAA,EACpC,SAAA,EAAW,KAAA;AAAA,EAEX,SAAA,GAAY;AACV,IAAA,OAAO;AAAA,MACL;AAAA,QACE,GAAA,EAAK;AAAA;AACP,KACF;AAAA,EACF,CAAA;AAAA,EAEA,qBAAA,GAAwB;AACtB,IAAA,MAAM,EAAE,QAAO,GAAI,IAAA;AAEnB,IAAA,OAAO;AAAA,MACL,GAAI,IAAA,CAAK,MAAA,IAAS,IAAK,EAAC;AAAA,MACxB,IAAIC,YAAA,CAAO;AAAA,QACT,KAAA,EAAO;AAAA,UACL,aAAA,EAAe,CAAC,CAAA,EAAe,KAAA,KAAyB;AACtD,YAAA,MAAM,EAAE,SAAA,EAAU,GAAI,MAAA,CAAO,KAAA;AAE7B,YAAA,IAAI,KAAA,CAAM,GAAA,KAAQ,QAAA,IAAY,SAAA,CAAU,UAAU,IAAA,EAAM;AACtD,cAAA,MAAA,CAAO,SAAS,KAAA,CAAM,SAAA,CAAU,IAAI,EAAE,cAAA,EAAgB,OAAO,CAAA;AAAA,YAC/D;AAEA,YAAA,OAAO,KAAA;AAAA,UACT,CAAA;AAAA,UACA,WAAA,CAAY,MAAM,GAAA,EAAK;AACrB,YAAA,MAAM,EAAE,MAAA,EAAQ,GAAA,EAAK,EAAA,KAAO,IAAA,CAAK,KAAA;AACjC,YAAA,IAAI,KAAA;AAEJ,YAAA,IAAI,MAAA,CAAO,MAAM,IAAA,EAAM;AACrB,cAAA,KAAA,GAAQC,mBAAa,GAAA,CAAI,OAAA,CAAQ,GAAG,CAAA,EAAG,MAAA,CAAO,MAAM,IAAI,CAAA;AAAA,YAC1D;AAEA,YAAA,IAAI,CAAC,KAAA,EAAO;AACV,cAAA;AAAA,YACF;AAEA,YAAA,MAAM,EAAE,IAAA,EAAM,EAAA,EAAG,GAAI,KAAA;AACrB,YAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,GAAA,CAAI,IAAA,EAAM,EAAE,CAAA;AAC/B,YAAA,MAAM,GAAA,GAAM,IAAA,CAAK,GAAA,CAAI,IAAA,EAAM,EAAE,CAAA;AAE7B,YAAA,IAAI,GAAA,GAAM,KAAA,IAAS,GAAA,GAAM,GAAA,EAAK;AAC5B,cAAA;AAAA,YACF;AAEA,YAAA,MAAM,MAAA,GAAS,GAAA,CAAI,OAAA,CAAQ,KAAK,CAAA;AAChC,YAAA,MAAM,IAAA,GAAO,GAAA,CAAI,OAAA,CAAQ,GAAG,CAAA;AAC5B,YAAA,MAAM,cAAc,EAAA,CAAG,YAAA,CAAa,IAAIC,mBAAA,CAAc,MAAA,EAAQ,IAAI,CAAC,CAAA;AAEnE,YAAA,IAAA,CAAK,SAAS,WAAW,CAAA;AAAA,UAC3B;AAAA;AACF,OACD;AAAA,KACH;AAAA,EACF;AACF,CAAC,CAAA;AC1DM,IAAM,SAAA,GAAYC,gBAAU,MAAA,CAAO;AAAA,EACxC,IAAA,EAAM,WAAA;AAAA,EAEN,qBAAA,GAAwB;AACtB,IAAA,MAAM,EAAE,QAAO,GAAI,IAAA;AAEnB,IAAA,OAAO;AAAA,MACL,IAAIH,YAAAA,CAAO;AAAA,QACT,GAAA,EAAK,IAAII,eAAA,CAAU,WAAW,CAAA;AAAA,QAC9B,KAAA,EAAO;AAAA,UACL,YAAY,KAAA,EAAO;AACjB,YAAA,IAAI,KAAA,CAAM,UAAU,KAAA,EAAO;AACzB,cAAA,OAAO,IAAA;AAAA,YACT;AAEA,YAAA,IAAI,MAAA,CAAO,SAAA,KAAc,IAAA,IAAQ,CAAC,OAAO,UAAA,EAAY;AACnD,cAAA,OAAO,IAAA;AAAA,YACT;AAEA,YAAA,IAAIC,qBAAA,CAAgB,KAAA,CAAM,SAAS,CAAA,EAAG;AACpC,cAAA,OAAO,IAAA;AAAA,YACT;AAEA,YAAA,OAAOC,kBAAA,CAAc,MAAA,CAAO,KAAA,CAAM,GAAA,EAAK;AAAA,cACrCC,gBAAW,MAAA,CAAO,KAAA,CAAM,UAAU,IAAA,EAAM,KAAA,CAAM,UAAU,EAAA,EAAI;AAAA,gBAC1D,KAAA,EAAO;AAAA,eACR;AAAA,aACF,CAAA;AAAA,UACH;AAAA;AACF,OACD;AAAA,KACH;AAAA,EACF;AACF,CAAC,CAAA;ACjCD,SAAS,cAAA,CAAe,EAAE,KAAA,EAAO,IAAA,EAAK,EAAwD;AAC5F,EAAA,IAAI,CAAC,MAAM,OAAO,KAAA;AAElB,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxB,IAAA,OAAO,KAAA,CAAM,QAAA,CAAS,IAAA,CAAK,IAAI,CAAA;AAAA,EACjC;AAEA,EAAA,OAAO,KAAK,IAAA,KAAS,KAAA;AACvB;AAOO,IAAM,YAAA,GAAeJ,gBAAU,MAAA,CAA4B;AAAA,EAChE,IAAA,EAAM,cAAA;AAAA,EAEN,UAAA,GAAa;AACX,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,WAAA;AAAA,MACN,QAAA,EAAU,CAAC,WAAW;AAAA,KACxB;AAAA,EACF,CAAA;AAAA,EAEA,qBAAA,GAAwB;AACtB,IAAA,MAAM,MAAA,GAAS,IAAIC,eAAAA,CAAU,IAAA,CAAK,IAAI,CAAA;AACtC,IAAA,MAAM,aAAA,GAAgB,MAAA,CAAO,OAAA,CAAQ,IAAA,CAAK,MAAA,CAAO,OAAO,KAAK,CAAA,CAC1D,GAAA,CAAI,CAAC,GAAG,KAAK,CAAA,KAAM,KAAK,CAAA,CACxB,MAAA,CAAO,CAAC,IAAA,KAAS,IAAA,CAAK,OAAA,CAAQ,QAAA,CAAS,QAAA,CAAS,IAAA,CAAK,IAAI,CAAC,CAAA;AAE7D,IAAA,OAAO;AAAA,MACL,IAAIJ,YAAAA,CAAO;AAAA,QACT,GAAA,EAAK,MAAA;AAAA,QACL,iBAAA,EAAmB,CAAC,CAAA,EAAG,EAAA,EAAI,KAAA,KAAU;AACnC,UAAA,MAAM,EAAE,GAAA,EAAK,EAAA,EAAI,MAAA,EAAO,GAAI,KAAA;AAC5B,UAAA,MAAM,qBAAA,GAAwB,MAAA,CAAO,QAAA,CAAS,KAAK,CAAA;AACnD,UAAA,MAAM,WAAA,GAAc,IAAI,OAAA,CAAQ,IAAA;AAChC,UAAA,MAAM,IAAA,GAAO,MAAA,CAAO,KAAA,CAAM,IAAA,CAAK,QAAQ,IAAI,CAAA;AAE3C,UAAA,IAAI,CAAC,qBAAA,EAAuB;AAC1B,YAAA,OAAO,IAAA;AAAA,UACT;AAEA,UAAA,IAAI,IAAA,EAAM;AACR,YAAA,OAAO,EAAA,CAAG,MAAA,CAAO,WAAA,EAAa,IAAA,CAAK,QAAQ,CAAA;AAAA,UAC7C;AAEA,UAAA,OAAO,IAAA;AAAA,QACT,CAAA;AAAA,QACA,KAAA,EAAO;AAAA,UACL,IAAA,EAAM,CAAC,CAAA,EAAG,KAAA,KAAU;AAClB,YAAA,MAAM,QAAA,GAAW,KAAA,CAAM,EAAA,CAAG,GAAA,CAAI,SAAA;AAE9B,YAAA,OAAO,CAAC,cAAA,CAAe,EAAE,MAAM,QAAA,EAAU,KAAA,EAAO,eAAe,CAAA;AAAA,UACjE,CAAA;AAAA,UACA,KAAA,EAAO,CAAC,EAAA,EAAI,KAAA,KAAU;AACpB,YAAA,IAAI,CAAC,GAAG,UAAA,EAAY;AAClB,cAAA,OAAO,KAAA;AAAA,YACT;AAEA,YAAA,MAAM,QAAA,GAAW,GAAG,GAAA,CAAI,SAAA;AAExB,YAAA,OAAO,CAAC,cAAA,CAAe,EAAE,MAAM,QAAA,EAAU,KAAA,EAAO,eAAe,CAAA;AAAA,UACjE;AAAA;AACF,OACD;AAAA,KACH;AAAA,EACF;AACF,CAAC,CAAA;ACtBD,SAAS,UAAA,CAAW;AAAA,EAClB,WAAA,GAAc,KAAA;AAAA,EACd,SAAA,GAAY,KAAA;AAAA,EACZ,IAAA,EAAM,cAAA;AAAA,EACN,YAAA,EAAc,iBAAA;AAAA,EACd,KAAA,GAAQ,GAAA;AAAA,EACR,UAAA,GAAa;AACf,CAAA,GAA4C,EAAC,EAAG;AAC9C,EAAA,MAAM,CAAC,gBAAA,EAAkB,mBAAmB,CAAA,GAAUQ,4BAAkB,WAAW,CAAA;AAEnF,EAAA,MAAM,OAAO,cAAA,IAAkB,gBAAA;AAC/B,EAAA,MAAM,UAAU,iBAAA,IAAqB,mBAAA;AAErC,EAAA,MAAM,OAAOC,mBAAA,CAAY;AAAA,IACvB,SAAA;AAAA,IACA,IAAA;AAAA,IACA,YAAA,EAAc,OAAA;AAAA,IACd,oBAAA,EAAsBC,kBAAA;AAAA,IACtB,UAAA,EAAY;AAAA,MACVC,eAAO,CAAC,CAAA;AAAA,MACRC,YAAA,CAAK;AAAA,QACH,SAAA,EAAW,SAAA,CAAU,QAAA,CAAS,GAAG,CAAA;AAAA,QACjC,yBAAA,EAA2B,OAAA;AAAA,QAC3B,OAAA,EAAS;AAAA,OACV,CAAA;AAAA,MACDC,aAAA,CAAM,EAAE,OAAA,EAAS,CAAA,EAAG;AAAA;AACtB,GACD,CAAA;AAED,EAAA,MAAM,UAAU,IAAA,CAAK,OAAA;AAErB,EAAA,MAAM,KAAA,GAAQC,iBAAS,OAAA,EAAS;AAAA,IAC9B,SAAA,EAAW,IAAA;AAAA,IACX,IAAA,EAAM,KAAA;AAAA,IACN,MAAA,EAAQ,KAAA;AAAA,IACR,SAAS,cAAA,IAAkB,IAAA;AAAA,IAC3B,KAAA,EAAO;AAAA,MACL,KAAA,EAAO;AAAA;AACT,GACD,CAAA;AACD,EAAA,MAAM,KAAA,GAAQC,iBAAS,OAAA,EAAS;AAAA,IAC9B,SAAS,cAAA,IAAkB;AAAA,GAC5B,CAAA;AACD,EAAA,MAAM,OAAA,GAAUC,mBAAW,OAAO,CAAA;AAClC,EAAA,MAAM,OAAOC,eAAA,CAAQ,OAAA,EAAS,EAAE,IAAA,EAAM,WAAW,CAAA;AAEjD,EAAA,MAAM,eAAeC,uBAAA,CAAgB,CAAC,OAAO,KAAA,EAAO,OAAA,EAAS,IAAI,CAAC,CAAA;AAElE,EAAA,OAAaV,kBAAA,CAAA,OAAA;AAAA,IACX,OAAO;AAAA,MACL,IAAA;AAAA,MACA,OAAA;AAAA,MACA,GAAG,YAAA;AAAA,MACH,GAAG;AAAA,KACL,CAAA;AAAA,IACA,CAAC,IAAA,EAAM,OAAA,EAAS,YAAA,EAAc,IAAI;AAAA,GACpC;AACF;AAEA,IAAM,cAAA,GAAuBA,iCAA0C,IAAI,CAAA;AAE3E,SAAS,iBAAA,GAAoB;AAC3B,EAAA,MAAM,OAAA,GAAgBA,8BAAW,cAAc,CAAA;AAE/C,EAAA,IAAI,WAAW,IAAA,EAAM;AACnB,IAAA,MAAM,IAAI,MAAM,2DAA2D,CAAA;AAAA,EAC7E;AAEA,EAAA,OAAO,OAAA;AACT;AAEO,SAAS,OAAA,CAAQ,EAAE,QAAA,EAAU,GAAG,OAAM,EAAyB;AACpE,EAAA,MAAM,OAAA,GAAU,WAAW,KAAK,CAAA;AAEhC,EAAA,IAAI,CAAC,MAAM,aAAA,EAAe;AACxB,IAAA,uBAAO1E,cAAAA,CAAC,cAAA,CAAe,UAAf,EAAwB,KAAA,EAAO,SAAU,QAAA,EAAS,CAAA;AAAA,EAC5D;AAEA,EAAA,uBACEA,cAAAA,CAACqF,0BAAA,EAAA,EAAmB,KAAA,EAAO,EAAE,MAAM,KAAA,CAAM,KAAA,IAAS,CAAA,EAAG,KAAA,EAAO,KAAA,CAAM,UAAA,IAAc,GAAE,EAAG,SAAA,EAAW,KAAA,CAAM,OAAA,EACpG,QAAA,kBAAArF,cAAAA,CAAC,cAAA,CAAe,QAAA,EAAf,EAAwB,KAAA,EAAO,OAAA,EAAU,QAAA,EAAS,CAAA,EACrD,CAAA;AAEJ;AAEO,IAAM,cAAA,GAAuB0E,kBAAA,CAAA,UAAA,CAA6C,SAASY,eAAAA,CACxF,EAAE,QAAA,EAAU,OAAA,GAAU,KAAA,EAAO,GAAG,KAAA,EAAM,EACtC,OAAA,EACA;AACA,EAAA,MAAM,UAAU,iBAAA,EAAkB;AAClC,EAAA,MAAM,cAAoBZ,kBAAA,CAAA,cAAA,CAAe,QAAQ,IAC7C,QAAA,CAAeA,kBAAA,CAAA,OAAA,EAAS,EAAE,CAAA,IAAK,EAAA;AAAA;AAAA,IAE5B,SAAiD,KAAA,CAAM;AAAA;AAAA;AAAA,IAEvD,QAAA,CAAiB;AAAA,GAAA,GACpB,MAAA;AACJ,EAAA,MAAM,GAAA,GAAMa,qBAAa,CAAC,OAAA,CAAQ,KAAK,YAAA,EAAc,OAAA,EAAS,WAAW,CAAC,CAAA;AAE1E,EAAA,IAAI,OAAA,IAAiBb,kBAAA,CAAA,cAAA,CAAe,QAAQ,CAAA,EAAG;AAC7C,IAAA,MAAM,cAAA,GAAiB;AAAA,MACrB,oBAAA,EAAsB,OAAA,CAAQ,IAAA,GAAO,MAAA,GAAS;AAAA,KAChD;AAEA,IAAA,OAAaA,kBAAA,CAAA,YAAA;AAAA,MACX,QAAA;AAAA,MACA,QAAQ,iBAAA,CAAkB;AAAA,QACxB,GAAA;AAAA,QACA,GAAG,KAAA;AAAA,QACH,GAAI,OAAO,QAAA,CAAS,UAAU,QAAA,GAAW,QAAA,CAAS,QAAQ,EAAC;AAAA,QAC3D,GAAG;AAAA,OACJ;AAAA,KACH;AAAA,EACF;AAEA,EAAA,uBACE1E,cAAAA,CAAC,QAAA,EAAA,EAAO,GAAA,EAAU,sBAAoB,OAAA,CAAQ,IAAA,GAAO,MAAA,GAAS,QAAA,EAAW,GAAG,OAAA,CAAQ,iBAAA,CAAkB,KAAK,GACxG,QAAA,EACH,CAAA;AAEJ,CAAC,CAAA;AAEM,IAAM,cAAA,GAAuB0E,kBAAA,CAAA,UAAA,CAAgD,SAASc,eAAAA,CAC3F,EAAE,KAAA,EAAO,QAAA,EAAU,MAAA,GAAS,IAAA,EAAM,cAAc,EAAC,EAAG,GAAG,KAAA,IACvD,OAAA,EACA;AACA,EAAA,MAAM,UAAU,iBAAA,EAAkB;AAClC,EAAA,MAAM,MAAMD,oBAAA,CAAa,CAAC,QAAQ,IAAA,CAAK,WAAA,EAAa,OAAO,CAAC,CAAA;AAE5D,EAAA,IAAI,CAAC,OAAA,CAAQ,IAAA,EAAM,OAAO,IAAA;AAE1B,EAAA,MAAM,0BACJvF,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,KAAA,EAAO;AAAA,QACL,GAAG,OAAA,CAAQ,cAAA;AAAA,QACX,GAAG;AAAA,OACL;AAAA,MACC,GAAG,OAAA,CAAQ,gBAAA,CAAiB,KAAK,CAAA;AAAA,MAClC,SAAA,EAAU,gBAAA;AAAA,MAET;AAAA;AAAA,GACH;AAGF,EAAA,IAAI,MAAA,EAAQ;AACV,IAAA,uBAAOA,cAAAA,CAACyF,sBAAA,EAAA,EAAgB,GAAG,aAAc,QAAA,EAAA,OAAA,EAAQ,CAAA;AAAA,EACnD;AAEA,EAAA,OAAO,OAAA;AACT,CAAC,CAAA;AAED,OAAA,CAAQ,WAAA,GAAc,SAAA;AACtB,cAAA,CAAe,WAAA,GAAc,gBAAA;AAC7B,cAAA,CAAe,WAAA,GAAc,gBAAA;AC7LtB,IAAM,WAAA,GAAiC;AAAA,EAC5C,IAAA,EAAM,QAAA;AAAA,EACN,GAAA,EAAK,QAAA;AAAA,EACL,KAAA,EAAO;AACT,CAAA;AAEO,IAAM,iBAAA,GAAoB,CAAC,GAAA,EAAa,KAAA,KAAmB;AAChE,EAAA,IAAI,KAAA,EAAO;AACT,IAAA,MAAM,QAAA,GAAW,IAAI,WAAA,EAAY;AACjC,IAAA,OAAO,WAAA,CAAY,QAAQ,CAAA,IAAK,GAAA,CAAI,WAAA,EAAY;AAAA,EAClD;AACA,EAAA,OAAO,GAAA,CAAI,OAAO,CAAC,CAAA,CAAE,aAAY,GAAI,GAAA,CAAI,MAAM,CAAC,CAAA;AAClD,CAAA;AAEO,IAAM,iBAAA,GAAoB,CAAC,YAAA,EAAkC,KAAA,KAAmB;AACrF,EAAA,IAAI,CAAC,YAAA,EAAc,OAAO,EAAC;AAE3B,EAAA,OAAO,aACJ,KAAA,CAAM,GAAG,CAAA,CACT,GAAA,CAAI,CAAC,GAAA,KAAQ,GAAA,CAAI,IAAA,EAAM,EACvB,GAAA,CAAI,CAAC,QAAQ,iBAAA,CAAkB,GAAA,EAAK,KAAK,CAAC,CAAA;AAC/C,CAAA;AAEO,IAAM,eAAA,GAAqD,CAAC,EAAE,SAAA,EAAU,KAAM;AACnF,EAAA,IAAI,SAAA,CAAU,MAAA,KAAW,CAAA,EAAG,OAAO,IAAA;AAEnC,EAAA,uBACEzF,cAAAA,CAAC,KAAA,EAAA,EACE,QAAA,EAAA,SAAA,CAAU,GAAA,CAAI,CAAC,GAAA,EAAK,KAAA,qBACnBe,eAAAA,CAAO2E,kBAAA,CAAA,QAAA,EAAN,EACE,QAAA,EAAA;AAAA,IAAA,KAAA,GAAQ,CAAA,oBAAK1F,cAAAA,CAAC,KAAA,EAAA,EAAI,QAAA,EAAA,GAAA,EAAC,CAAA;AAAA,oBACpBA,cAAAA,CAAC,KAAA,EAAA,EAAK,QAAA,EAAA,GAAA,EAAI;AAAA,GAAA,EAAA,EAFS,KAGrB,CACD,CAAA,EACH,CAAA;AAEJ,CAAA;AAEO,IAAM6C,OAAAA,GAAe6C,kBAAA,CAAA,UAAA;AAAA,EAC1B,CAAC,EAAE,SAAA,GAAY,EAAA,EAAI,UAAU,OAAA,EAAS,WAAA,GAAc,IAAA,EAAM,YAAA,EAAc,YAAA,EAAc,SAAA,EAAW,GAAG,KAAA,IAAS,GAAA,KAAQ;AACnH,IAAA,MAAM,KAAA,GAAcA,kBAAA,CAAA,OAAA,CAAQ,MAAM,OAAO,cAAc,WAAA,IAAe,SAAA,CAAU,QAAA,CAAS,WAAA,EAAY,CAAE,QAAA,CAAS,KAAK,CAAA,EAAG,EAAE,CAAA;AAE1H,IAAA,MAAM,SAAA,GAAkBA,kBAAA,CAAA,OAAA,CAAQ,MAAM,iBAAA,CAAkB,YAAA,EAAc,KAAK,CAAA,EAAG,CAAC,YAAA,EAAc,KAAK,CAAC,CAAA;AAEnG,IAAA,IAAI,CAAC,OAAA,IAAW,CAAC,WAAA,EAAa;AAC5B,MAAA,uBACE1F,cAAAA,CAAC,QAAA,EAAA,EAAO,SAAA,EAAW,iBAAiB,SAAS,CAAA,CAAA,CAAG,IAAA,EAAK,EAAG,GAAA,EAAU,YAAA,EAAY,SAAA,EAAY,GAAG,OAC1F,QAAA,EACH,CAAA;AAAA,IAEJ;AAEA,IAAA,uBACEe,eAAAA,CAAC,OAAA,EAAA,EAAQ,KAAA,EAAO,GAAA,EACd,QAAA,EAAA;AAAA,sBAAAf,cAAAA,CAAC,cAAA,EAAA,EAAe,SAAA,EAAW,CAAA,cAAA,EAAiB,SAAS,CAAA,CAAA,CAAG,IAAA,EAAK,EAAG,GAAA,EAAU,YAAA,EAAY,SAAA,EAAY,GAAG,OAClG,QAAA,EACH,CAAA;AAAA,sBACAe,gBAAC,cAAA,EAAA,EACE,QAAA,EAAA;AAAA,QAAA,OAAA;AAAA,wBACDf,cAAAA,CAAC,eAAA,EAAA,EAAgB,SAAA,EAAsB;AAAA,OAAA,EACzC;AAAA,KAAA,EACF,CAAA;AAAA,EAEJ;AACF,CAAA;AAEA6C,OAAAA,CAAO,WAAA,GAAc,QAAA;ACzEd,IAAM,MAAA,GAAe8C,kBAAA,CAAA,UAAA;AAAA,EAC1B,CAAC,EAAE,WAAA,GAAc,YAAA,EAAc,IAAA,EAAM,SAAA,GAAY,EAAA,EAAI,KAAA,GAAQ,EAAC,EAAG,GAAG,KAAA,IAAS,GAAA,KAAQ;AACnF,IAAA,MAAM,aAAA,GAAgB;AAAA,MACpB,GAAG,KAAA;AAAA,MACH,GAAI,WAAA,KAAgB,YAAA,IAAgB,CAAC,IAAA,IAAQ,EAAE,MAAM,CAAA,EAAE;AAAA,MACvD,GAAI,IAAA,IAAQ;AAAA,QACV,KAAA,EAAO,WAAA,KAAgB,UAAA,GAAa,KAAA,GAAQ,IAAA;AAAA,QAC5C,MAAA,EAAQ,WAAA,KAAgB,YAAA,GAAe,KAAA,GAAQ;AAAA;AACjD,KACF;AAEA,IAAA,uBAAO3F,eAAC,KAAA,EAAA,EAAI,GAAA,EAAW,GAAG,KAAA,EAAO,SAAA,EAAsB,OAAO,aAAA,EAAe,CAAA;AAAA,EAC/E;AACF,CAAA;AAEA,MAAA,CAAO,WAAA,GAAc,QAAA;ACdd,IAAM,SAAA,GAAkB4F,kBAAA,CAAA,UAAA;AAAA,EAC7B,CAAC,EAAE,UAAA,EAAY,WAAA,GAAc,UAAA,EAAY,YAAY,EAAA,EAAI,GAAG,QAAA,EAAS,EAAG,GAAA,KAAQ;AAC9E,IAAA,MAAM,eAAA,GAAkB,WAAA,KAAgB,UAAA,GAAa,WAAA,GAAc,MAAA;AACnE,IAAA,MAAM,aAAA,GAAgB,UAAA,GAAa,EAAE,IAAA,EAAM,MAAA,KAAW,EAAE,kBAAA,EAAoB,eAAA,EAAiB,IAAA,EAAM,WAAA,EAAY;AAE/G,IAAA,uBAAO5F,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,oBAAoB,SAAS,CAAA,CAAA,CAAG,IAAA,EAAK,EAAG,oBAAkB,WAAA,EAAc,GAAG,aAAA,EAAgB,GAAG,UAAU,GAAA,EAAU,CAAA;AAAA,EAC3I;AACF,CAAA;AAEA,SAAA,CAAU,WAAA,GAAc,WAAA;ACTxB,IAAM,SAAA,GAAY,CAAK,IAAA,KAA4F;AACjH,EAAA,OAAO,CAAC,KAAA,KAAU;AAChB,IAAA,IAAA,CAAK,OAAA,CAAQ,CAAC,GAAA,KAAQ;AACpB,MAAA,IAAI,OAAO,QAAQ,UAAA,EAAY;AAC7B,QAAA,GAAA,CAAI,KAAK,CAAA;AAAA,MACX,CAAA,MAAA,IAAW,OAAO,IAAA,EAAM;AACrB,QAAC,IAAyC,OAAA,GAAU,KAAA;AAAA,MACvD;AAAA,IACF,CAAC,CAAA;AAAA,EACH,CAAA;AACF,CAAA;AAEA,IAAM,oBAAA,GAAuB,CAAC,GAAA,EAA0C,QAAA,KAA+B;AACrG,EAAM6F,6BAAU,MAAM;AACpB,IAAA,MAAM,UAAU,GAAA,CAAI,OAAA;AACpB,IAAA,IAAI,CAAC,OAAA,EAAS;AAEd,IAAA,IAAI,SAAA,GAAY,IAAA;AAEhB,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,qBAAA,CAAsB,QAAQ,CAAA;AAAA,IAChC;AAEA,IAAA,MAAM,QAAA,GAAW,IAAI,gBAAA,CAAiB,MAAM;AAC1C,MAAA,IAAI,SAAA,EAAW;AACb,QAAA,qBAAA,CAAsB,QAAQ,CAAA;AAAA,MAChC;AAAA,IACF,CAAC,CAAA;AAED,IAAA,QAAA,CAAS,QAAQ,OAAA,EAAS;AAAA,MACxB,SAAA,EAAW,IAAA;AAAA,MACX,OAAA,EAAS,IAAA;AAAA,MACT,UAAA,EAAY;AAAA,KACb,CAAA;AAED,IAAA,OAAO,MAAM;AACX,MAAA,SAAA,GAAY,KAAA;AACZ,MAAA,QAAA,CAAS,UAAA,EAAW;AAAA,IACtB,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,GAAA,EAAK,QAAQ,CAAC,CAAA;AACpB,CAAA;AAEA,IAAM,qBAAA,GAAwB,CAAC,UAAA,KAA6D;AAC1F,EAAMA,6BAAU,MAAM;AACpB,IAAA,MAAM,UAAU,UAAA,CAAW,OAAA;AAC3B,IAAA,IAAI,CAAC,OAAA,EAAS;AAEd,IAAA,MAAM,uBAAuB,MAC3B,KAAA,CAAM,KAAK,OAAA,CAAQ,gBAAA,CAA8B,yFAAyF,CAAC,CAAA;AAE7I,IAAA,MAAM,eAAA,GAAkB,CAAC,CAAA,EAAkB,WAAA,EAAqB,QAAA,KAA4B;AAC1F,MAAA,CAAA,CAAE,cAAA,EAAe;AACjB,MAAA,IAAI,SAAA,GAAY,WAAA;AAEhB,MAAA,IAAI,SAAA,IAAa,SAAS,MAAA,EAAQ;AAChC,QAAA,SAAA,GAAY,CAAA;AAAA,MACd,CAAA,MAAA,IAAW,YAAY,CAAA,EAAG;AACxB,QAAA,SAAA,GAAY,SAAS,MAAA,GAAS,CAAA;AAAA,MAChC;AAEA,MAAA,QAAA,CAAS,SAAS,GAAG,KAAA,EAAM;AAAA,IAC7B,CAAA;AAEA,IAAA,MAAM,aAAA,GAAgB,CAAC,CAAA,KAAqB;AAC1C,MAAA,MAAM,oBAAoB,oBAAA,EAAqB;AAC/C,MAAA,IAAI,CAAC,kBAAkB,MAAA,EAAQ;AAE/B,MAAA,MAAM,iBAAiB,QAAA,CAAS,aAAA;AAChC,MAAA,MAAM,YAAA,GAAe,iBAAA,CAAkB,OAAA,CAAQ,cAAc,CAAA;AAE7D,MAAA,IAAI,CAAC,OAAA,CAAQ,QAAA,CAAS,cAAc,CAAA,EAAG;AAEvC,MAAA,MAAM,UAAA,GAAyC;AAAA,QAC7C,YAAY,MAAM,eAAA,CAAgB,CAAA,EAAG,YAAA,GAAe,GAAG,iBAAiB,CAAA;AAAA,QACxE,WAAW,MAAM,eAAA,CAAgB,CAAA,EAAG,YAAA,GAAe,GAAG,iBAAiB,CAAA;AAAA,QACvE,WAAW,MAAM,eAAA,CAAgB,CAAA,EAAG,YAAA,GAAe,GAAG,iBAAiB,CAAA;AAAA,QACvE,SAAS,MAAM,eAAA,CAAgB,CAAA,EAAG,YAAA,GAAe,GAAG,iBAAiB,CAAA;AAAA,QACrE,IAAA,EAAM,MAAM,eAAA,CAAgB,CAAA,EAAG,GAAG,iBAAiB,CAAA;AAAA,QACnD,KAAK,MAAM,eAAA,CAAgB,GAAG,iBAAA,CAAkB,MAAA,GAAS,GAAG,iBAAiB;AAAA,OAC/E;AAEA,MAAA,MAAM,MAAA,GAAS,UAAA,CAAW,CAAA,CAAE,GAAG,CAAA;AAC/B,MAAA,IAAI,MAAA,EAAQ;AACV,QAAA,MAAA,EAAO;AAAA,MACT;AAAA,IACF,CAAA;AAEA,IAAA,OAAA,CAAQ,gBAAA,CAAiB,WAAW,aAAa,CAAA;AACjD,IAAA,OAAO,MAAM,OAAA,CAAQ,mBAAA,CAAoB,SAAA,EAAW,aAAa,CAAA;AAAA,EACnE,CAAA,EAAG,CAAC,UAAU,CAAC,CAAA;AACjB,CAAA;AAEA,IAAM,oBAAA,GAAuB,CAAC,GAAA,KAAyD;AACrF,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAUA,4BAAS,IAAI,CAAA;AACrD,EAAA,MAAM,YAAA,GAAqBA,0BAAO,KAAK,CAAA;AAEvC,EAAMA,6BAAU,MAAM;AACpB,IAAA,YAAA,CAAa,OAAA,GAAU,IAAA;AACvB,IAAA,OAAO,MAAM;AACX,MAAA,YAAA,CAAa,OAAA,GAAU,KAAA;AAAA,IACzB,CAAA;AAAA,EACF,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,eAAA,GAAwBA,+BAAY,MAAM;AAC9C,IAAA,IAAI,CAAC,aAAa,OAAA,EAAS;AAE3B,IAAA,MAAM,UAAU,GAAA,CAAI,OAAA;AACpB,IAAA,IAAI,CAAC,OAAA,EAAS;AAGd,IAAA,MAAM,kBAAA,GAAqB,MAAM,IAAA,CAAK,OAAA,CAAQ,QAAQ,CAAA,CAAE,IAAA,CAAK,CAAC,KAAA,KAAU;AACtE,MAAA,IAAI,EAAE,KAAA,YAAiB,WAAA,CAAA,EAAc,OAAO,KAAA;AAC5C,MAAA,IAAI,KAAA,CAAM,YAAA,CAAa,MAAM,CAAA,KAAM,OAAA,EAAS;AAC1C,QAAA,OAAO,KAAA,CAAM,SAAS,MAAA,GAAS,CAAA;AAAA,MACjC;AACA,MAAA,OAAO,KAAA;AAAA,IACT,CAAC,CAAA;AAED,IAAA,YAAA,CAAa,kBAAkB,CAAA;AAAA,EACjC,CAAA,EAAG,CAAC,GAAG,CAAC,CAAA;AAER,EAAA,oBAAA,CAAqB,KAAK,eAAe,CAAA;AACzC,EAAA,OAAO,SAAA;AACT,CAAA;AAEA,IAAM,kBAAA,GAAqB,CAAC,GAAA,KAAyD;AACnF,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAUA,4BAAS,IAAI,CAAA;AACrD,EAAA,MAAM,YAAA,GAAqBA,0BAAO,KAAK,CAAA;AAEvC,EAAMA,6BAAU,MAAM;AACpB,IAAA,YAAA,CAAa,OAAA,GAAU,IAAA;AACvB,IAAA,OAAO,MAAM;AACX,MAAA,YAAA,CAAa,OAAA,GAAU,KAAA;AAAA,IACzB,CAAA;AAAA,EACF,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,eAAA,GAAwBA,+BAAY,MAAM;AAC9C,IAAA,IAAI,CAAC,aAAa,OAAA,EAAS;AAE3B,IAAA,MAAM,QAAQ,GAAA,CAAI,OAAA;AAClB,IAAA,IAAI,CAAC,KAAA,EAAO;AAEZ,IAAA,MAAM,kBAAA,GAAqB,MAAM,IAAA,CAAK,KAAA,CAAM,QAAQ,CAAA,CAAE,IAAA,CAAK,CAAC,KAAA,KAAU;AACpE,MAAA,IAAI,EAAE,KAAA,YAAiB,WAAA,CAAA,EAAc,OAAO,KAAA;AAC5C,MAAA,OAAO,IAAA;AAAA,IACT,CAAC,CAAA;AAED,IAAA,YAAA,CAAa,kBAAkB,CAAA;AAAA,EACjC,CAAA,EAAG,CAAC,GAAG,CAAC,CAAA;AAER,EAAA,oBAAA,CAAqB,KAAK,eAAe,CAAA;AACzC,EAAA,OAAO,SAAA;AACT,CAAA;AAEA,IAAM,sBAAA,GAAyB,CAAC,GAAA,KAAyD;AACvF,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAUA,4BAAS,IAAI,CAAA;AACrD,EAAA,MAAM,YAAA,GAAqBA,0BAAO,KAAK,CAAA;AAEvC,EAAMA,6BAAU,MAAM;AACpB,IAAA,YAAA,CAAa,OAAA,GAAU,IAAA;AACvB,IAAA,OAAO,MAAM;AACX,MAAA,YAAA,CAAa,OAAA,GAAU,KAAA;AAAA,IACzB,CAAA;AAAA,EACF,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,eAAA,GAAwBA,+BAAY,MAAM;AAC9C,IAAA,IAAI,CAAC,aAAa,OAAA,EAAS;AAE3B,IAAA,MAAM,YAAY,GAAA,CAAI,OAAA;AACtB,IAAA,IAAI,CAAC,SAAA,EAAW;AAEhB,IAAA,MAAM,cAAc,SAAA,CAAU,sBAAA;AAC9B,IAAA,MAAM,cAAc,SAAA,CAAU,kBAAA;AAE9B,IAAA,IAAI,CAAC,WAAA,IAAe,CAAC,WAAA,EAAa;AAChC,MAAA,YAAA,CAAa,KAAK,CAAA;AAClB,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,aAAA,GAAgB,YAAY,YAAA,CAAa,MAAM,MAAM,OAAA,IAAW,WAAA,CAAY,YAAA,CAAa,MAAM,CAAA,KAAM,OAAA;AAE3G,IAAA,MAAM,mBAAmB,WAAA,CAAY,QAAA,CAAS,SAAS,CAAA,IAAK,WAAA,CAAY,SAAS,MAAA,GAAS,CAAA;AAE1F,IAAA,YAAA,CAAa,iBAAiB,gBAAgB,CAAA;AAAA,EAChD,CAAA,EAAG,CAAC,GAAG,CAAC,CAAA;AAER,EAAA,oBAAA,CAAqB,KAAK,eAAe,CAAA;AACzC,EAAA,OAAO,SAAA;AACT,CAAA;AAEO,IAAM,OAAA,GAAgBA,kBAAA,CAAA,UAAA,CAAyC,CAAC,EAAE,QAAA,EAAU,SAAA,EAAW,OAAA,GAAU,OAAA,EAAS,GAAG,KAAA,EAAM,EAAG,GAAA,KAAQ;AACnI,EAAA,MAAM,UAAA,GAAmBA,0BAAuB,IAAI,CAAA;AACpD,EAAA,MAAM,SAAA,GAAY,qBAAqB,UAAU,CAAA;AAEjD,EAAA,qBAAA,CAAsB,UAAU,CAAA;AAEhC,EAAA,IAAI,CAAC,WAAW,OAAO,IAAA;AAEvB,EAAA,uBACE7F,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA,EAAK,SAAA,CAAU,CAAC,UAAA,EAAY,GAAG,CAAC,CAAA;AAAA,MAChC,IAAA,EAAK,SAAA;AAAA,MACL,YAAA,EAAW,SAAA;AAAA,MACX,cAAA,EAAc,OAAA;AAAA,MACd,SAAA,EAAW,CAAA,eAAA,EAAkB,SAAA,IAAa,EAAE,CAAA,CAAA;AAAA,MAC3C,GAAG,KAAA;AAAA,MAEH;AAAA;AAAA,GACH;AAEJ,CAAC,CAAA;AAED,OAAA,CAAQ,WAAA,GAAc,SAAA;AAEf,IAAM,YAAA,GAAqB6F,8BAAsC,CAAC,EAAE,UAAU,SAAA,EAAW,GAAG,KAAA,EAAM,EAAG,GAAA,KAAQ;AAClH,EAAA,MAAM,QAAA,GAAiBA,0BAAuB,IAAI,CAAA;AAClD,EAAA,MAAM,SAAA,GAAY,mBAAmB,QAAQ,CAAA;AAE7C,EAAA,IAAI,CAAC,WAAW,OAAO,IAAA;AAEvB,EAAA,uBACE7F,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAK,SAAA,CAAU,CAAC,UAAU,GAAG,CAAC,GAAG,IAAA,EAAK,OAAA,EAAQ,WAAW,CAAA,qBAAA,EAAwB,SAAA,IAAa,EAAE,CAAA,CAAA,EAAK,GAAG,OAC1G,QAAA,EACH,CAAA;AAEJ,CAAC,CAAA;AAED,YAAA,CAAa,WAAA,GAAc,cAAA;AAEpB,IAAM,mBAAyB6F,kBAAA,CAAA,UAAA,CAAsC,CAAC,EAAE,GAAG,KAAA,IAAS,GAAA,KAAQ;AACjG,EAAA,MAAM,YAAA,GAAqBA,0BAAuB,IAAI,CAAA;AACtD,EAAA,MAAM,SAAA,GAAY,uBAAuB,YAAY,CAAA;AAErD,EAAA,IAAI,CAAC,WAAW,OAAO,IAAA;AAEvB,EAAA,uBAAO7F,cAAAA,CAAC,SAAA,EAAA,EAAU,GAAA,EAAK,UAAU,CAAC,YAAA,EAAc,GAAG,CAAC,GAAG,WAAA,EAAY,UAAA,EAAW,UAAA,EAAU,IAAA,EAAE,GAAG,KAAA,EAAO,CAAA;AACtG,CAAC,CAAA;AAED,gBAAA,CAAiB,WAAA,GAAc,kBAAA;ACpPxB,SAAS,gBAAgB,cAAA,EAA+C;AAC7E,EAAA,MAAM,EAAE,MAAA,EAAQ,UAAA,EAAW,GAAI8F,sBAAA,EAAiB;AAChD,EAAA,OAAaC,2BAAQ,MAAM,cAAA,IAAkB,YAAY,CAAC,cAAA,EAAgB,UAAU,CAAC,CAAA;AACvF;ACLO,IAAM,kBAAwBC,kBAAA,CAAA,IAAA,CAAK,CAAC,EAAE,SAAA,EAAW,GAAG,OAAM,KAAqC;AACpG,EAAA,uBACEhG,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,IAAA,EAAK,QAAO,IAAA,EAAK,SAAA,EAAsB,OAAA,EAAQ,WAAA,EAAY,MAAK,cAAA,EAAe,KAAA,EAAM,4BAAA,EAA8B,GAAG,OAC/H,QAAA,kBAAAA,cAAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,QAAA,EAAS,SAAA;AAAA,MACT,QAAA,EAAS,SAAA;AAAA,MACT,CAAA,EAAE,8TAAA;AAAA,MACF,IAAA,EAAK;AAAA;AAAA,GACP,EACF,CAAA;AAEJ,CAAC,CAAA;AAED,eAAA,CAAgB,WAAA,GAAc,iBAAA;ACbvB,IAAM,cAAoBiG,kBAAA,CAAA,IAAA,CAAK,CAAC,EAAE,SAAA,EAAW,GAAG,OAAM,KAAqC;AAChG,EAAA,uBACEjG,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,IAAA,EAAK,QAAO,IAAA,EAAK,SAAA,EAAsB,OAAA,EAAQ,WAAA,EAAY,MAAK,cAAA,EAAe,KAAA,EAAM,4BAAA,EAA8B,GAAG,OAC/H,QAAA,kBAAAA,cAAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,CAAA,EAAE,4OAAA;AAAA,MACF,IAAA,EAAK;AAAA;AAAA,GACP,EACF,CAAA;AAEJ,CAAC,CAAA;AAED,WAAA,CAAY,WAAA,GAAc,aAAA;ACFnB,IAAM,cAAA,GAAiB,CAAC,QAAA,EAAkB,MAAA,KAAmC;AAClF,EAAA,IAAI,CAAC,MAAA,EAAQ,MAAA,EAAQ,OAAO,KAAA;AAC5B,EAAA,OAAO,OAAO,MAAA,CAAO,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,QAAQ,CAAA,KAAM,MAAA;AACpD,CAAA;AAQO,IAAM,cAAA,GAAiB,CAAC,QAAA,EAAkB,MAAA,KAAmC;AAClF,EAAA,IAAI,CAAC,MAAA,EAAQ,MAAA,EAAQ,OAAO,KAAA;AAC5B,EAAA,OAAO,OAAO,MAAA,CAAO,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,QAAQ,CAAA,KAAM,MAAA;AACpD,CAAA;AAqBO,SAAS,YAAY,IAAA,EAA6B;AACvD,EAAA,OAAO,CAAC,CAAC,IAAA,IAAQ,IAAA,CAAK,QAAQ,IAAA,KAAS,CAAA;AACzC;AAqBO,SAAS,iBAAiB,KAAA,EAAmH;AAClJ,EAAA,MAAM,EAAE,MAAA,EAAQ,IAAA,EAAM,OAAA,EAAQ,GAAI,KAAA;AAElC,EAAA,IAAI,CAAC,MAAA,IAAU,CAAC,MAAA,CAAO,KAAA,EAAO,KAAK,OAAO,IAAA;AAG1C,EAAA,MAAM,YAAA,GAAe,IAAA,KAAS,MAAA,IAAa,IAAA,KAAS,IAAA;AACpD,EAAA,MAAM,WAAA,GAAc,OAAA,KAAY,MAAA,IAAa,OAAA,KAAY,IAAA;AAEzD,EAAA,IAAI,CAAC,YAAA,IAAgB,CAAC,WAAA,EAAa;AACjC,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IAAI,WAAA,EAAa;AACf,IAAA,IAAI;AACF,MAAA,MAAM,SAAA,GAAY,MAAA,CAAO,KAAA,CAAM,GAAA,CAAI,OAAO,OAAQ,CAAA;AAClD,MAAA,IAAI,SAAA,EAAW;AACb,QAAA,OAAO,EAAE,GAAA,EAAK,OAAA,EAAU,IAAA,EAAM,SAAA,EAAU;AAAA,MAC1C;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,KAAA,CAAM,oCAAoC,KAAK,CAAA;AACvD,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,EACF;AAGA,EAAA,IAAI,QAAA,GAAW,EAAA;AACf,EAAA,IAAI,SAAA,GAAyB,IAAA;AAE7B,EAAA,MAAA,CAAO,KAAA,CAAM,GAAA,CAAI,WAAA,CAAY,CAAC,aAAa,GAAA,KAAQ;AAGjD,IAAA,IAAI,gBAAgB,IAAA,EAAM;AACxB,MAAA,QAAA,GAAW,GAAA;AACX,MAAA,SAAA,GAAY,WAAA;AACZ,MAAA,OAAO,KAAA;AAAA,IACT;AACA,IAAA,OAAO,IAAA;AAAA,EACT,CAAC,CAAA;AAED,EAAA,OAAO,QAAA,KAAa,MAAM,SAAA,KAAc,IAAA,GAAO,EAAE,GAAA,EAAK,QAAA,EAAU,IAAA,EAAM,SAAA,EAAU,GAAI,IAAA;AACtF;AC5GO,IAAM,kBAAwBkG,kBAAA,CAAA,IAAA,CAAK,CAAC,EAAE,SAAA,EAAW,GAAG,OAAM,KAAqC;AACpG,EAAA,uBACEnF,eAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,MAAK,MAAA,EAAO,IAAA,EAAK,SAAA,EAAsB,OAAA,EAAQ,aAAY,IAAA,EAAK,cAAA,EAAe,KAAA,EAAM,4BAAA,EAA8B,GAAG,KAAA,EAC/H,QAAA,EAAA;AAAA,oBAAAf,cAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,CAAA,EAAE,4OAAA;AAAA,QACF,IAAA,EAAK;AAAA;AAAA,KACP;AAAA,oBACAA,cAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,CAAA,EAAE,2bAAA;AAAA,QACF,IAAA,EAAK;AAAA;AAAA;AACP,GAAA,EACF,CAAA;AAEJ,CAAC,CAAA;AAED,eAAA,CAAgB,WAAA,GAAc,iBAAA;ACfvB,IAAM,kBAAwBmG,kBAAA,CAAA,IAAA,CAAK,CAAC,EAAE,SAAA,EAAW,GAAG,OAAM,KAAqC;AACpG,EAAA,uBACEpF,eAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,MAAK,MAAA,EAAO,IAAA,EAAK,SAAA,EAAsB,OAAA,EAAQ,aAAY,IAAA,EAAK,cAAA,EAAe,KAAA,EAAM,4BAAA,EAA8B,GAAG,KAAA,EAC/H,QAAA,EAAA;AAAA,oBAAAf,cAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,CAAA,EAAE,4OAAA;AAAA,QACF,IAAA,EAAK;AAAA;AAAA,KACP;AAAA,oBACAA,cAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,CAAA,EAAE,2NAAA;AAAA,QACF,IAAA,EAAK;AAAA;AAAA;AACP,GAAA,EACF,CAAA;AAEJ,CAAC,CAAA;AAED,eAAA,CAAgB,WAAA,GAAc,iBAAA;ACfvB,IAAM,iBAAuBoG,kBAAA,CAAA,IAAA,CAAK,CAAC,EAAE,SAAA,EAAW,GAAG,OAAM,KAAqC;AACnG,EAAA,uBACErF,eAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,MAAK,MAAA,EAAO,IAAA,EAAK,SAAA,EAAsB,OAAA,EAAQ,aAAY,IAAA,EAAK,cAAA,EAAe,KAAA,EAAM,4BAAA,EAA8B,GAAG,KAAA,EAC/H,QAAA,EAAA;AAAA,oBAAAf,cAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,CAAA,EAAE,4OAAA;AAAA,QACF,IAAA,EAAK;AAAA;AAAA,KACP;AAAA,oBACAA,cAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,CAAA,EAAE,8TAAA;AAAA,QACF,IAAA,EAAK;AAAA;AAAA;AACP,GAAA,EACF,CAAA;AAEJ,CAAC,CAAA;AAED,cAAA,CAAe,WAAA,GAAc,gBAAA;ACftB,IAAM,iBAAuBqG,kBAAA,CAAA,IAAA,CAAK,CAAC,EAAE,SAAA,EAAW,GAAG,OAAM,KAAqC;AACnG,EAAA,uBACEtF,eAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,MAAK,MAAA,EAAO,IAAA,EAAK,SAAA,EAAsB,OAAA,EAAQ,aAAY,IAAA,EAAK,cAAA,EAAe,KAAA,EAAM,4BAAA,EAA8B,GAAG,KAAA,EAC/H,QAAA,EAAA;AAAA,oBAAAf,cAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,CAAA,EAAE,4OAAA;AAAA,QACF,IAAA,EAAK;AAAA;AAAA,KACP;AAAA,oBACAA,cAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,QAAA,EAAS,SAAA;AAAA,QACT,QAAA,EAAS,SAAA;AAAA,QACT,CAAA,EAAE,weAAA;AAAA,QACF,IAAA,EAAK;AAAA;AAAA;AACP,GAAA,EACF,CAAA;AAEJ,CAAC,CAAA;AAED,cAAA,CAAe,WAAA,GAAc,gBAAA;ACjBtB,IAAM,mBAAyBsG,kBAAA,CAAA,IAAA,CAAK,CAAC,EAAE,SAAA,EAAW,GAAG,OAAM,KAAqC;AACrG,EAAA,uBACEvF,eAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,MAAK,MAAA,EAAO,IAAA,EAAK,SAAA,EAAsB,OAAA,EAAQ,aAAY,IAAA,EAAK,cAAA,EAAe,KAAA,EAAM,4BAAA,EAA8B,GAAG,KAAA,EAC/H,QAAA,EAAA;AAAA,oBAAAf,cAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,CAAA,EAAE,4OAAA;AAAA,QACF,IAAA,EAAK;AAAA;AAAA,KACP;AAAA,oBACAA,cAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,QAAA,EAAS,SAAA;AAAA,QACT,QAAA,EAAS,SAAA;AAAA,QACT,CAAA,EAAE,6hBAAA;AAAA,QACF,IAAA,EAAK;AAAA;AAAA,KACP;AAAA,oBACAA,cAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,QAAA,EAAS,SAAA;AAAA,QACT,QAAA,EAAS,SAAA;AAAA,QACT,CAAA,EAAE,khBAAA;AAAA,QACF,IAAA,EAAK;AAAA;AAAA;AACP,GAAA,EACF,CAAA;AAEJ,CAAC,CAAA;AAED,gBAAA,CAAiB,WAAA,GAAc,kBAAA;ACvBxB,IAAM,iBAAuBuG,kBAAA,CAAA,IAAA,CAAK,CAAC,EAAE,SAAA,EAAW,GAAG,OAAM,KAAqC;AACnG,EAAA,uBACExF,eAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,MAAK,MAAA,EAAO,IAAA,EAAK,SAAA,EAAsB,OAAA,EAAQ,aAAY,IAAA,EAAK,cAAA,EAAe,KAAA,EAAM,4BAAA,EAA8B,GAAG,KAAA,EAC/H,QAAA,EAAA;AAAA,oBAAAf,cAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,CAAA,EAAE,4OAAA;AAAA,QACF,IAAA,EAAK;AAAA;AAAA,KACP;AAAA,oBACAA,cAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,CAAA,EAAE,42BAAA;AAAA,QACF,IAAA,EAAK;AAAA;AAAA;AACP,GAAA,EACF,CAAA;AAEJ,CAAC,CAAA;AAED,cAAA,CAAe,WAAA,GAAc,gBAAA;AC0BtB,IAAM,YAAA,GAAe;AAAA,EAC1B,CAAA,EAAG,cAAA;AAAA,EACH,CAAA,EAAG,cAAA;AAAA,EACH,CAAA,EAAG,gBAAA;AAAA,EACH,CAAA,EAAG,eAAA;AAAA,EACH,CAAA,EAAG,eAAA;AAAA,EACH,CAAA,EAAG;AACL,CAAA;AAEO,IAAM,mBAAA,GAAsD;AAAA,EACjE,CAAA,EAAG,YAAA;AAAA,EACH,CAAA,EAAG,YAAA;AAAA,EACH,CAAA,EAAG,YAAA;AAAA,EACH,CAAA,EAAG,YAAA;AAAA,EACH,CAAA,EAAG,YAAA;AAAA,EACH,CAAA,EAAG;AACL,CAAA;AAEO,SAAS,gBAAA,CAAiB,QAAuB,KAAA,EAAuB;AAC7E,EAAA,IAAI,CAAC,QAAQ,OAAO,KAAA;AAEpB,EAAA,IAAI;AACF,IAAA,OAAO,MAAA,CAAO,KAAI,CAAE,UAAA,CAAW,WAAW,WAAA,EAAa,EAAE,OAAO,CAAA;AAAA,EAClE,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,KAAA;AAAA,EACT;AACF;AAEO,SAAS,eAAA,CAAgB,QAAuB,KAAA,EAAuB;AAC5E,EAAA,IAAI,CAAC,QAAQ,OAAO,KAAA;AACpB,EAAA,OAAO,MAAA,CAAO,QAAA,CAAS,SAAA,EAAW,EAAE,OAAO,CAAA;AAC7C;AAEO,SAAS,aAAA,CAAc,QAAuB,KAAA,EAAoB;AACvE,EAAA,IAAI,CAAC,MAAA,EAAQ;AAEb,EAAA,IAAI,OAAO,QAAA,CAAS,SAAA,EAAW,EAAE,KAAA,EAAO,CAAA,EAAG;AACzC,IAAA,MAAA,CAAO,OAAM,CAAE,KAAA,GAAQ,OAAA,CAAQ,WAAW,EAAE,GAAA,EAAI;AAAA,EAClD,CAAA,MAAO;AACL,IAAA,MAAA,CAAO,KAAA,EAAM,CAAE,KAAA,EAAM,CAAE,UAAA,CAAW,SAAA,EAAW,WAAA,EAAa,EAAE,KAAA,EAAO,CAAA,CAAE,GAAA,EAAI;AAAA,EAC3E;AACF;AAEO,SAAS,uBAAA,CAAwB,MAAA,EAAuB,KAAA,EAAc,YAAA,GAAwB,KAAA,EAAgB;AACnH,EAAA,IAAI,CAAC,QAAQ,OAAO,IAAA;AACpB,EAAA,IAAI,cAAc,OAAO,IAAA;AACzB,EAAA,IAAI,CAAC,gBAAA,CAAiB,MAAA,EAAQ,KAAK,GAAG,OAAO,IAAA;AAC7C,EAAA,OAAO,KAAA;AACT;AAEO,SAAS,wBAAwB,MAAA,EAK5B;AACV,EAAA,MAAM,EAAE,MAAA,EAAQ,mBAAA,EAAqB,eAAA,EAAgB,GAAI,MAAA;AAEzD,EAAA,IAAI,CAAC,eAAA,IAAmB,CAAC,MAAA,EAAQ;AAC/B,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,IAAI,mBAAA,EAAqB;AACvB,IAAA,IAAIuE,qBAAAA,CAAgB,MAAA,CAAO,KAAA,CAAM,SAAS,CAAA,EAAG;AAC3C,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,EACF;AAEA,EAAA,OAAO,IAAA;AACT;AAEO,SAAS,wBAAwB,KAAA,EAAsB;AAC5D,EAAA,OAAO,gBAAM,KAAK,CAAA,CAAA;AACpB;AAEO,SAAS,eAAA,CAAgB,MAAA,EAAuB,KAAA,EAAc,QAAA,GAAoB,KAAA,EAAO;AAC9F,EAAA,MAAM,eAAA,GAAkB,cAAA,CAAe,SAAA,EAAW,MAAM,CAAA;AACxD,EAAA,MAAM,UAAA,GAAa,uBAAA,CAAwB,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA;AAClE,EAAA,MAAM,QAAA,GAAW,eAAA,CAAgB,MAAA,EAAQ,KAAK,CAAA;AAE9C,EAAA,MAAM,IAAA,GAAO,aAAa,KAAK,CAAA;AAC/B,EAAA,MAAM,WAAA,GAAc,oBAAoB,KAAK,CAAA;AAC7C,EAAA,MAAM,aAAA,GAAgB,wBAAwB,KAAK,CAAA;AAEnD,EAAA,OAAO;AAAA,IACL,eAAA;AAAA,IACA,UAAA;AAAA,IACA,QAAA;AAAA,IACA,IAAA;AAAA,IACA,WAAA;AAAA,IACA;AAAA,GACF;AACF;AAEO,IAAM,aAAA,GAAsBiC,kBAAA,CAAA,UAAA;AAAA,EACjC,CAAC,EAAE,MAAA,EAAQ,cAAA,EAAgB,KAAA,EAAO,MAAM,mBAAA,GAAsB,KAAA,EAAO,SAAA,GAAY,EAAA,EAAI,UAAU,OAAA,EAAS,QAAA,EAAU,GAAG,WAAA,IAAe,GAAA,KAAQ;AAC1I,IAAA,MAAM,MAAA,GAAS,gBAAgB,cAAc,CAAA;AAE7C,IAAA,MAAM,EAAE,eAAA,EAAiB,UAAA,EAAY,QAAA,EAAU,IAAA,EAAM,WAAA,EAAa,aAAA,EAAc,GAAI,eAAA,CAAgB,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA;AAE3H,IAAA,MAAM,WAAA,GAAoBA,kBAAA,CAAA,WAAA;AAAA,MACxB,CAAC,CAAA,KAA2C;AAC1C,QAAA,OAAA,GAAU,CAAC,CAAA;AAEX,QAAA,IAAI,CAAC,CAAA,CAAE,gBAAA,IAAoB,CAAC,cAAc,MAAA,EAAQ;AAChD,UAAA,aAAA,CAAc,QAAQ,KAAK,CAAA;AAAA,QAC7B;AAAA,MACF,CAAA;AAAA,MACA,CAAC,OAAA,EAAS,UAAA,EAAY,MAAA,EAAQ,KAAK;AAAA,KACrC;AAEA,IAAA,MAAM,IAAA,GAAaA,2BAAQ,MAAM;AAC/B,MAAA,OAAO,uBAAA,CAAwB;AAAA,QAC7B,MAAA;AAAA,QAEA,mBAAA;AAAA,QACA;AAAA,OACD,CAAA;AAAA,IACH,GAAG,CAAC,MAAA,EAAQ,KAAA,EAAO,mBAAA,EAAqB,eAAe,CAAC,CAAA;AAExD,IAAA,IAAI,CAAC,IAAA,IAAQ,CAAC,MAAA,IAAU,CAAC,OAAO,UAAA,EAAY;AAC1C,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,uBACExG,cAAAA;AAAA,MAAC6C,OAAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,QAAA;AAAA,QACL,SAAA,EAAW,UAAU,IAAA,EAAK;AAAA,QAC1B,QAAA,EAAU,UAAA;AAAA,QACV,YAAA,EAAW,OAAA;AAAA,QACX,mBAAA,EAAmB,WAAW,IAAA,GAAO,KAAA;AAAA,QACrC,eAAA,EAAe,UAAA;AAAA,QACf,IAAA,EAAK,QAAA;AAAA,QACL,QAAA,EAAU,EAAA;AAAA,QACV,YAAA,EAAY,aAAA;AAAA,QACZ,cAAA,EAAc,QAAA;AAAA,QACd,OAAA,EAAS,aAAA;AAAA,QACT,YAAA,EAAc,WAAA;AAAA,QACd,OAAA,EAAS,WAAA;AAAA,QACR,GAAG,WAAA;AAAA,QACJ,GAAA;AAAA,QAEC,QAAA,EAAA,QAAA,oBACC9B,eAAAA,CAAA+C,mBAAAA,EAAA,EACE,QAAA,EAAA;AAAA,0BAAA9D,cAAAA,CAAC,IAAA,EAAA,EAAK,SAAA,EAAU,oBAAA,EAAqB,CAAA;AAAA,UACpC,wBAAQA,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,sBAAsB,QAAA,EAAA,IAAA,EAAK;AAAA,SAAA,EACtD;AAAA;AAAA,KAEJ;AAAA,EAEJ;AACF,CAAA;AAEA,aAAA,CAAc,WAAA,GAAc,eAAA;AC7J5B,IAAM,mBAAA,GAA4ByG,iCAAkC,IAAI,CAAA;AAExE,SAAS,sBAAA,GAAyB;AAChC,EAAA,MAAM,OAAA,GAAgBA,8BAAW,mBAAmB,CAAA;AACpD,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,MAAM,IAAI,MAAM,6DAA6D,CAAA;AAAA,EAC/E;AACA,EAAA,OAAO,OAAA;AACT;AAEA,SAAS,eAAA,CAAgB;AAAA,EACvB,WAAA,GAAc,KAAA;AAAA,EACd,IAAA,EAAM,cAAA;AAAA,EACN,YAAA,EAAc,iBAAA;AAAA,EACd,IAAA,GAAO,QAAA;AAAA,EACP,KAAA,GAAQ;AACV,CAAA,EAAwB;AACtB,EAAA,MAAM,CAAC,gBAAA,EAAkB,mBAAmB,CAAA,GAAUA,4BAAS,WAAW,CAAA;AAC1E,EAAA,MAAM,CAAC,kBAAkB,mBAAmB,CAAA,GAAUA,4BAAoB,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,KAAK,CAAA,CAAe,CAAA;AACzG,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAUA,4BAAwB,IAAI,CAAA;AAExE,EAAA,MAAM,OAAO,cAAA,IAAkB,gBAAA;AAC/B,EAAA,MAAM,UAAU,iBAAA,IAAqB,mBAAA;AAErC,EAAA,MAAM,WAAA,GAAoBA,kBAAA,CAAA,MAAA,CAAkC,EAAE,CAAA;AAC9D,EAAA,MAAM,SAAA,GAAkBA,kBAAA,CAAA,MAAA,CAA6B,EAAE,CAAA;AAEvD,EAAA,MAAM,WAAW9B,mBAAAA,CAAY;AAAA,IAC3B,IAAA;AAAA,IACA,YAAA,EAAc,OAAA;AAAA,IACd,SAAA,EAAW,gBAAA;AAAA,IACX,UAAA,EAAY,CAACE,cAAAA,CAAO,EAAE,UAAU,CAAA,EAAG,CAAA,EAAGC,YAAAA,IAAQC,aAAAA,CAAM,EAAE,OAAA,EAAS,CAAA,EAAG,CAAC,CAAA;AAAA,IACnE,oBAAA,EAAsBH;AAAA,GACvB,CAAA;AAED,EAAA,MAAM,EAAE,SAAQ,GAAI,QAAA;AAEpB,EAAA,MAAM,eAAeQ,uBAAAA,CAAgB;AAAA,IACnCsB,iBAAS,OAAA,EAAS;AAAA,MAChB,KAAA,EAAO,WAAA;AAAA,MACP,MAAA,EAAQ,IAAA;AAAA,MACR,WAAA,EAAa;AAAA,KACd,CAAA;AAAA,IACDvB,eAAAA,CAAQ,OAAA,EAAS,EAAE,IAAA,EAAM,QAAQ,CAAA;AAAA,IACjCD,mBAAW,OAAA,EAAS;AAAA,MAClB,YAAA,EAAc,IAAA;AAAA,MACd,iBAAA,EAAmB;AAAA,KACpB,CAAA;AAAA,IACDyB,0BAAkB,OAAA,EAAS;AAAA,MACzB,OAAA,EAAS,WAAA;AAAA,MACT,WAAA;AAAA,MACA,UAAA,EAAY,cAAA;AAAA,MACZ,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,IACDC,qBAAa,OAAA,EAAS;AAAA,MACpB,OAAA,EAAS,SAAA;AAAA,MACT,OAAA,EAAS,OAAO,cAAA,GAAiB,MAAA;AAAA,MACjC;AAAA,KACD;AAAA,GACF,CAAA;AAED,EAAA,MAAM,cAAA,GAAuBH,kBAAA,CAAA,WAAA,CAAY,CAAC,OAAA,EAA8C,QAAA,KAAyC;AAC/H,IAAA,mBAAA,CAAoB,CAAA,EAAG,OAAO,CAAA,CAAA,EAAI,QAAQ,CAAA,CAAe,CAAA;AAAA,EAC3D,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,OAAaA,kBAAA,CAAA,OAAA;AAAA,IACX,OAAO;AAAA,MACL,IAAA;AAAA,MACA,OAAA;AAAA,MACA,WAAA;AAAA,MACA,cAAA;AAAA,MACA,WAAA;AAAA,MACA,SAAA;AAAA,MACA,cAAA;AAAA,MACA,GAAG,YAAA;AAAA,MACH,GAAG;AAAA,KACL,CAAA;AAAA,IACA,CAAC,IAAA,EAAM,OAAA,EAAS,WAAA,EAAa,YAAA,EAAc,UAAU,cAAc;AAAA,GACrE;AACF;AAEO,SAAS,YAAA,CAAa,EAAE,QAAA,EAAU,GAAG,SAAQ,EAAsB;AACxE,EAAA,MAAM,QAAA,GAAW,gBAAgB,OAAO,CAAA;AACxC,EAAA,uBACEzG,cAAAA,CAAC,mBAAA,CAAoB,QAAA,EAApB,EAA6B,OAAO,QAAA,EACnC,QAAA,kBAAAA,cAAAA,CAAC6G,oBAAA,EAAA,EAAa,aAAa,QAAA,CAAS,WAAA,EAAa,WAAW,QAAA,CAAS,SAAA,EAClE,UACH,CAAA,EACF,CAAA;AAEJ;AAMO,IAAM,mBAAA,GAA4BJ,kBAAA,CAAA,UAAA;AAAA,EACvC,CAAC,EAAE,QAAA,EAAU,OAAA,GAAU,OAAO,GAAG,KAAA,IAAS,OAAA,KAAY;AACpD,IAAA,MAAM,UAAU,sBAAA,EAAuB;AACvC,IAAA,MAAM,cAAoBA,kBAAA,CAAA,cAAA,CAAe,QAAQ,IAC7C,QAAA,CAAeA,kBAAA,CAAA,OAAA,EAAS,EAAE,CAAA,IAAK,EAAA;AAAA;AAAA,MAE5B,SAAiD,KAAA,CAAM;AAAA;AAAA;AAAA,MAEvD,QAAA,CAAiB;AAAA,KAAA,GACpB,MAAA;AACJ,IAAA,MAAM,GAAA,GAAMlB,qBAAa,CAAC,OAAA,CAAQ,KAAK,YAAA,EAAc,OAAA,EAAS,WAAW,CAAC,CAAA;AAE1E,IAAA,IAAI,OAAA,IAAiBkB,kBAAA,CAAA,cAAA,CAAe,QAAQ,CAAA,EAAG;AAC7C,MAAA,MAAM,cAAA,GAAiB;AAAA,QACrB,YAAA,EAAc,OAAA,CAAQ,IAAA,GAAO,MAAA,GAAS;AAAA,OACxC;AAEA,MAAA,OAAaA,kBAAA,CAAA,YAAA;AAAA,QACX,QAAA;AAAA,QACA,QAAQ,iBAAA,CAAkB;AAAA,UACxB,GAAA;AAAA,UACA,GAAG,KAAA;AAAA,UACH,GAAI,OAAO,QAAA,CAAS,UAAU,QAAA,GAAW,QAAA,CAAS,QAAQ,EAAC;AAAA,UAC3D,iBAAiB,OAAA,CAAQ,IAAA;AAAA,UACzB,eAAA,EAAiB,MAAA;AAAA,UACjB,GAAG;AAAA,SACJ;AAAA,OACH;AAAA,IACF;AAEA,IAAA,uBACEzG,cAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,iBAAe,OAAA,CAAQ,IAAA;AAAA,QACvB,eAAA,EAAc,MAAA;AAAA,QACd,YAAA,EAAY,OAAA,CAAQ,IAAA,GAAO,MAAA,GAAS,QAAA;AAAA,QACnC,GAAG,OAAA,CAAQ,iBAAA,CAAkB,KAAK,CAAA;AAAA,QAElC;AAAA;AAAA,KACH;AAAA,EAEJ;AACF,CAAA;AAEA,mBAAA,CAAoB,WAAA,GAAc,qBAAA;AAU3B,IAAM,mBAAA,GAA4ByG,kBAAA,CAAA,UAAA;AAAA,EACvC,CAAC,EAAE,KAAA,EAAO,WAAW,WAAA,GAAc,UAAA,EAAY,OAAO,QAAA,EAAU,KAAA,GAAQ,OAAA,EAAS,MAAA,GAAS,MAAM,WAAA,GAAc,IAAI,GAAG,KAAA,IAAS,OAAA,KAAY;AACxI,IAAA,MAAM,UAAU,sBAAA,EAAuB;AACvC,IAAA,MAAM,MAAMlB,oBAAAA,CAAa,CAAC,QAAQ,IAAA,CAAK,WAAA,EAAa,OAAO,CAAC,CAAA;AAE5D,IAAMkB,6BAAU,MAAM;AACpB,MAAA,OAAA,CAAQ,cAAA,CAAe,MAAM,KAAK,CAAA;AAAA,IACpC,CAAA,EAAG,CAAC,OAAA,EAAS,IAAA,EAAM,KAAK,CAAC,CAAA;AAEzB,IAAA,IAAI,CAAC,OAAA,CAAQ,IAAA,EAAM,OAAO,IAAA;AAE1B,IAAA,MAAM,OAAA,mBACJzG,cAAAA,CAAC8G,4BAAA,EAAA,EAAqB,OAAA,EAAS,OAAA,CAAQ,OAAA,EAAS,KAAA,EAAO,KAAA,EAAO,YAAA,EAAc,CAAA,EAAG,WAAA,EAAa,MAC1F,QAAA,kBAAA9G,cAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,SAAA,EAAW,CAAA,qBAAA,EAAwB,SAAA,IAAa,EAAE,CAAA,CAAA;AAAA,QAClD,KAAA,EAAO;AAAA,UACL,UAAU,OAAA,CAAQ,QAAA;AAAA,UAClB,GAAA,EAAK,QAAQ,CAAA,IAAK,CAAA;AAAA,UAClB,IAAA,EAAM,QAAQ,CAAA,IAAK,CAAA;AAAA,UACnB,OAAA,EAAS,MAAA;AAAA,UACT,GAAG;AAAA,SACL;AAAA,QACA,kBAAA,EAAkB,WAAA;AAAA,QAClB,kBAAA,EAAkB,WAAA;AAAA,QAClB,YAAA,EAAY,OAAA,CAAQ,IAAA,GAAO,MAAA,GAAS,QAAA;AAAA,QACpC,WAAA,EAAW,IAAA;AAAA,QACX,YAAA,EAAY,KAAA;AAAA,QACX,GAAG,OAAA,CAAQ,gBAAA,CAAiB,KAAK,CAAA;AAAA,QAEjC,QAAA,EAAA,KAAA,CAAM;AAAA;AAAA,KACT,EACF,CAAA;AAGF,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,uBAAOA,cAAAA,CAACyF,sBAAAA,EAAA,EAAgB,GAAG,aAAc,QAAA,EAAA,OAAA,EAAQ,CAAA;AAAA,IACnD;AAEA,IAAA,OAAO,OAAA;AAAA,EACT;AACF,CAAA;AAEA,mBAAA,CAAoB,WAAA,GAAc,qBAAA;AAQ3B,IAAM,gBAAA,GAAyBgB,kBAAA,CAAA,UAAA;AAAA,EACpC,CAAC,EAAE,QAAA,EAAU,QAAA,EAAU,OAAA,GAAU,KAAA,EAAO,QAAA,EAAU,SAAA,EAAW,GAAG,KAAA,EAAM,EAAG,GAAA,KAAQ;AAC/E,IAAA,MAAM,UAAU,sBAAA,EAAuB;AACvC,IAAA,MAAM,IAAA,GAAOM,oBAAY,EAAE,KAAA,EAAO,WAAW,IAAA,GAAO,QAAA,EAAU,QAAA,EAAS,EAAG,CAAA;AAC1E,IAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,WAAA,KAAgB,IAAA,CAAK,KAAA;AAE9C,IAAA,MAAM,YAAA,GAAqBN,kBAAA,CAAA,WAAA;AAAA,MACzB,CAAC,KAAA,KAA4C;AAC3C,QAAA,IAAI,QAAA,EAAU;AACd,QAAA,QAAA,IAAW;AACX,QAAA,KAAA,CAAM,UAAU,KAAK,CAAA;AACrB,QAAA,OAAA,CAAQ,QAAQ,KAAK,CAAA;AAAA,MACvB,CAAA;AAAA,MACA,CAAC,OAAA,EAAS,QAAA,EAAU,QAAA,EAAU,KAAK;AAAA,KACrC;AAEA,IAAA,MAAM,SAAA,GAMF;AAAA,MACF,KAAKlB,oBAAAA,CAAa,CAAC,IAAA,CAAK,GAAA,EAAK,GAAG,CAAC,CAAA;AAAA,MACjC,IAAA,EAAM,UAAA;AAAA,MACN,SAAA;AAAA,MACA,QAAA,EAAU,WAAW,CAAA,GAAI,EAAA;AAAA,MACzB,kBAAA,EAAoB,QAAA;AAAA,MACpB,eAAA,EAAiB,QAAA;AAAA,MACjB,GAAG,QAAQ,YAAA,CAAa;AAAA,QACtB,GAAG,KAAA;AAAA,QACH,OAAA,EAAS;AAAA,OACV;AAAA,KACH;AAEA,IAAA,IAAI,OAAA,IAAiBkB,kBAAA,CAAA,cAAA,CAAe,QAAQ,CAAA,EAAG;AAC7C,MAAA,MAAM,aAAa,QAAA,CAAS,KAAA;AAK5B,MAAA,MAAM,WAAA,GAAc;AAAA,QAClB,GAAG,SAAA;AAAA,QACH,GAAI,OAAO,QAAA,CAAS,UAAU,QAAA,GAAW,QAAA,CAAS,QAAQ;AAAC,OAC7D;AAGA,MAAA,MAAM,aAAA,GAAgB;AAAA,QACpB,OAAA,EAAS,CAAC,KAAA,KAAyC;AAEjD,UAAA,YAAA,CAAa,KAAoD,CAAA;AACjE,UAAA,UAAA,CAAW,UAAU,KAAK,CAAA;AAAA,QAC5B;AAAA,OACF;AAEA,MAAA,OAAaA,gCAAa,QAAA,EAAU;AAAA,QAClC,GAAG,WAAA;AAAA,QACH,GAAG;AAAA,OACJ,CAAA;AAAA,IACH;AAEA,IAAA,uBAAOzG,cAAAA,CAAC,KAAA,EAAA,EAAK,GAAG,WAAY,QAAA,EAAS,CAAA;AAAA,EACvC;AACF,CAAA;AAEA,gBAAA,CAAiB,WAAA,GAAc,kBAAA;AAMxB,IAAM,iBAAA,GAA0ByG,kBAAA,CAAA,UAAA,CAAmD,CAAC,EAAE,QAAA,EAAU,OAAO,SAAA,EAAW,GAAG,KAAA,EAAM,EAAG,GAAA,KAAQ;AAC3I,EAAA,uBACEzG,cAAAA,CAAC,KAAA,EAAA,EAAK,GAAG,OAAO,GAAA,EAAU,IAAA,EAAK,OAAA,EAAQ,YAAA,EAAY,OAAO,SAAA,EAAW,CAAA,oBAAA,EAAuB,SAAA,IAAa,EAAE,IACxG,QAAA,EACH,CAAA;AAEJ,CAAC,CAAA;AAED,iBAAA,CAAkB,WAAA,GAAc,mBAAA;AAEzB,IAAM,qBAAA,GAA8ByG,kBAAA,CAAA,UAAA;AAAA,EACzC,CAAC,EAAE,SAAA,EAAW,GAAG,KAAA,IAAS,GAAA,qBAAQzG,cAAAA,CAAC,SAAA,EAAA,EAAU,KAAU,SAAA,EAAW,CAAA,+BAAA,EAAkC,aAAa,EAAE,CAAA,CAAA,EAAK,GAAG,KAAA,EAAO;AACpI,CAAA;AACA,qBAAA,CAAsB,cAAc,SAAA,CAAU,WAAA;AC7RvC,SAAS,mBAAA,CAAoB;AAAA,EAClC,MAAA,EAAQ,cAAA;AAAA,EACR,SAAS,CAAC,CAAA,EAAG,GAAG,CAAA,EAAG,CAAA,EAAG,GAAG,CAAC,CAAA;AAAA,EAC1B,mBAAA,GAAsB,KAAA;AAAA,EACtB,YAAA;AAAA,EACA,GAAG;AACL,CAAA,EAA6B;AAC3B,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAUgH,4BAAS,KAAK,CAAA;AAChD,EAAA,MAAM,MAAA,GAAS,gBAAgB,cAAc,CAAA;AAE7C,EAAA,MAAM,eAAA,GAAkB,cAAA,CAAe,SAAA,EAAW,MAAM,CAAA;AAExD,EAAA,MAAM,kBAAA,GAA2BA,kBAAA,CAAA,WAAA;AAAA,IAC/B,CAAC,IAAA,KAAkB;AACjB,MAAA,SAAA,CAAU,IAAI,CAAA;AACd,MAAA,YAAA,GAAe,IAAI,CAAA;AAAA,IACrB,CAAA;AAAA,IACA,CAAC,YAAY;AAAA,GACf;AAEA,EAAA,MAAM,aAAA,GAAsBA,+BAAY,MAAM;AAC5C,IAAA,IAAI,CAAC,MAAA,EAAQ,uBAAOhH,cAAAA,CAAC,WAAA,EAAA,EAAY,WAAU,oBAAA,EAAqB,CAAA;AAEhE,IAAA,MAAM,WAAA,GAAc,MAAA,CAAO,IAAA,CAAK,CAAC,KAAA,KAAU,MAAA,CAAO,QAAA,CAAS,SAAA,EAAW,EAAE,KAAA,EAAO,CAAC,CAAA;AAEhF,IAAA,IAAI,CAAC,WAAA,EAAa,uBAAOA,cAAAA,CAAC,WAAA,EAAA,EAAY,WAAU,oBAAA,EAAqB,CAAA;AAErE,IAAA,MAAM,UAAA,GAAa,aAAa,WAAW,CAAA;AAC3C,IAAA,uBAAOA,cAAAA,CAAC,UAAA,EAAA,EAAW,SAAA,EAAU,oBAAA,EAAqB,CAAA;AAAA,EACpD,CAAA,EAAG,CAAC,MAAA,EAAQ,MAAM,CAAC,CAAA;AAEnB,EAAA,MAAM,mBAAA,GAA4BgH,+BAAY,MAAe;AAC3D,IAAA,IAAI,CAAC,QAAQ,OAAO,KAAA;AACpB,IAAA,OAAO,MAAA,CAAO,IAAA,CAAK,CAAC,KAAA,KAAU,MAAA,CAAO,GAAA,EAAI,CAAE,UAAA,CAAW,SAAA,EAAW,WAAA,EAAa,EAAE,KAAA,EAAO,CAAC,CAAA;AAAA,EAC1F,CAAA,EAAG,CAAC,MAAA,EAAQ,MAAM,CAAC,CAAA;AAEnB,EAAA,MAAM,UAAA,GAAa,CAAC,mBAAA,EAAoB;AACxC,EAAA,MAAM,kBAAA,GAAqB,MAAA,EAAQ,QAAA,CAAS,SAAS,CAAA,IAAK,KAAA;AAE1D,EAAA,MAAM,IAAA,GAAaA,2BAAQ,MAAM;AAC/B,IAAA,IAAI,CAAC,eAAA,IAAmB,CAAC,MAAA,EAAQ;AAC/B,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,IAAI,mBAAA,EAAqB;AACvB,MAAA,IAAIzC,sBAAgB,MAAA,CAAO,KAAA,CAAM,SAAS,CAAA,IAAK,CAAC,qBAAoB,EAAG;AACrE,QAAA,OAAO,KAAA;AAAA,MACT;AAAA,IACF;AAEA,IAAA,OAAO,IAAA;AAAA,EACT,GAAG,CAAC,eAAA,EAAiB,MAAA,EAAQ,mBAAA,EAAqB,mBAAmB,CAAC,CAAA;AAEtE,EAAA,IAAI,CAAC,IAAA,IAAQ,CAAC,MAAA,IAAU,CAAC,OAAO,UAAA,EAAY;AAC1C,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,uBACExD,eAAAA,CAAC,YAAA,EAAA,EAAa,IAAA,EAAM,MAAA,EAAQ,cAAc,kBAAA,EACxC,QAAA,EAAA;AAAA,oBAAAf,cAAAA,CAAC,mBAAA,EAAA,EAAoB,OAAA,EAAO,IAAA,EAC1B,QAAA,kBAAAe,eAAAA;AAAA,MAAC8B,OAAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,QAAA;AAAA,QACL,QAAA,EAAU,UAAA;AAAA,QACV,YAAA,EAAW,OAAA;AAAA,QACX,mBAAA,EAAmB,qBAAqB,IAAA,GAAO,KAAA;AAAA,QAC/C,eAAA,EAAe,UAAA;AAAA,QACf,IAAA,EAAK,QAAA;AAAA,QACL,QAAA,EAAU,EAAA;AAAA,QACV,YAAA,EAAW,wBAAA;AAAA,QACX,cAAA,EAAc,kBAAA;AAAA,QACd,OAAA,EAAQ,cAAA;AAAA,QACP,GAAG,KAAA;AAAA,QAEH,QAAA,EAAA;AAAA,UAAA,aAAA,EAAc;AAAA,0BACf7C,cAAAA,CAAC,eAAA,EAAA,EAAgB,SAAA,EAAU,8BAAA,EAA+B;AAAA;AAAA;AAAA,KAC5D,EACF,CAAA;AAAA,oBAEAA,cAAAA,CAAC,mBAAA,EAAA,EACC,QAAA,kBAAAA,eAAC,iBAAA,EAAA,EACE,QAAA,EAAA,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,qBACXA,cAAAA,CAAC,gBAAA,EAAA,EAA0C,SAAO,IAAA,EAChD,QAAA,kBAAAA,cAAAA,CAAC,aAAA,EAAA,EAAc,MAAA,EAAgB,KAAA,EAAc,IAAA,EAAM,uBAAA,CAAwB,KAAK,CAAA,EAAG,OAAA,EAAS,EAAA,EAAI,CAAA,EAAA,EAD3E,CAAA,QAAA,EAAW,KAAK,CAAA,CAEvC,CACD,GACH,CAAA,EACF;AAAA,GAAA,EACF,CAAA;AAEJ;AChHO,SAAS,iBAAA,CAAqB;AAAA,EACnC,MAAA;AAAA,EACA,YAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA,WAAA,GAAc,UAAA;AAAA,EACd,mBAAA,GAAsB;AACxB,CAAA,EAA6B;AAC3B,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,IAAUiH,kBAAA,CAAA,QAAA,CAAiB,mBAAA,GAAsB,IAAI,EAAE,CAAA;AAE7F,EAAMA,6BAAU,MAAM;AACpB,IAAA,MAAM,wBAAA,GAA2B,CAAC,KAAA,KAAyB;AACzD,MAAA,IAAI,CAAC,KAAA,CAAM,MAAA,EAAQ,OAAO,KAAA;AAE1B,MAAA,MAAM,QAAA,GAAW,MACf,gBAAA,CAAiB,CAAC,YAAA,KAAiB;AACjC,QAAA,IAAI,YAAA,KAAiB,IAAI,OAAO,CAAA;AAChC,QAAA,OAAA,CAAQ,YAAA,GAAe,KAAK,KAAA,CAAM,MAAA;AAAA,MACpC,CAAC,CAAA;AAEH,MAAA,MAAM,QAAA,GAAW,MACf,gBAAA,CAAiB,CAAC,YAAA,KAAiB;AACjC,QAAA,IAAI,YAAA,KAAiB,EAAA,EAAI,OAAO,KAAA,CAAM,MAAA,GAAS,CAAA;AAC/C,QAAA,OAAA,CAAQ,YAAA,GAAe,CAAA,GAAI,KAAA,CAAM,MAAA,IAAU,KAAA,CAAM,MAAA;AAAA,MACnD,CAAC,CAAA;AAEH,MAAA,QAAQ,MAAM,GAAA;AAAK,QACjB,KAAK,SAAA,EAAW;AACd,UAAA,IAAI,WAAA,KAAgB,cAAc,OAAO,KAAA;AACzC,UAAA,KAAA,CAAM,cAAA,EAAe;AACrB,UAAA,QAAA,EAAS;AACT,UAAA,OAAO,IAAA;AAAA,QACT;AAAA,QAEA,KAAK,WAAA,EAAa;AAChB,UAAA,IAAI,WAAA,KAAgB,cAAc,OAAO,KAAA;AACzC,UAAA,KAAA,CAAM,cAAA,EAAe;AACrB,UAAA,QAAA,EAAS;AACT,UAAA,OAAO,IAAA;AAAA,QACT;AAAA,QAEA,KAAK,WAAA,EAAa;AAChB,UAAA,IAAI,WAAA,KAAgB,YAAY,OAAO,KAAA;AACvC,UAAA,KAAA,CAAM,cAAA,EAAe;AACrB,UAAA,QAAA,EAAS;AACT,UAAA,OAAO,IAAA;AAAA,QACT;AAAA,QAEA,KAAK,YAAA,EAAc;AACjB,UAAA,IAAI,WAAA,KAAgB,YAAY,OAAO,KAAA;AACvC,UAAA,KAAA,CAAM,cAAA,EAAe;AACrB,UAAA,QAAA,EAAS;AACT,UAAA,OAAO,IAAA;AAAA,QACT;AAAA,QAEA,KAAK,KAAA,EAAO;AACV,UAAA,KAAA,CAAM,cAAA,EAAe;AACrB,UAAA,IAAI,MAAM,QAAA,EAAU;AAClB,YAAA,QAAA,EAAS;AAAA,UACX,CAAA,MAAO;AACL,YAAA,QAAA,EAAS;AAAA,UACX;AACA,UAAA,OAAO,IAAA;AAAA,QACT;AAAA,QAEA,KAAK,MAAA,EAAQ;AACX,UAAA,KAAA,CAAM,cAAA,EAAe;AACrB,UAAA,gBAAA,CAAiB,CAAC,CAAA;AAClB,UAAA,OAAO,IAAA;AAAA,QACT;AAAA,QAEA,KAAK,KAAA,EAAO;AACV,UAAA,KAAA,CAAM,cAAA,EAAe;AACrB,UAAA,gBAAA,CAAiB,KAAA,CAAM,SAAS,CAAC,CAAA;AACjC,UAAA,OAAO,IAAA;AAAA,QACT;AAAA,QAEA,KAAK,OAAA,EAAS;AACZ,UAAA,IAAI,KAAA,CAAM,aAAa,OAAO,KAAA;AAC9B,UAAA,KAAA,CAAM,cAAA,EAAe;AACrB,UAAA,IAAI,aAAA,KAAkB,EAAA,IAAM,KAAA,CAAM,aAAa,CAAA,EAAG;AAChD,YAAA,QAAA,GAAW,KAAA,CAAM,aAAa,CAAC,CAAA;AAAA,UACjC;AACA,UAAA,OAAO,IAAA;AAAA,QACT;AAAA,QAEA,KAAK,QAAA,EAAU;AACb,UAAA,KAAA,CAAM,cAAA,EAAe;AACrB,UAAA,OAAA,IAAU;AACV,UAAA,OAAO,IAAA;AAAA,QACT;AAAA,QAEA;AACE,UAAA,OAAO,KAAA;AAAA;AACX,IACF,CAAA;AAEA,IAAA,IAAI,aAAA,GAAoC,IAAA;AAExC,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,aAAA,GAAgB,OAAO,IAAA,CAAK,GAAA;AAAA,IAC9B,CAAA,MAAA,IAAW,cAAc,OAAA,EAAS;AAChC,MAAA,aAAA,GAAgB,YAAA,CAAa,OAAA;AAAA,IAC/B;AAEA,IAAA,IAAI,aAAA,EAAe;AACjB,MAAA,aAAA,CAAc,gBAAA,CAAiB,SAAA,EAAW,wBAAA,EAA0B,IAAI,CAAA;AAExE,MAAA,OAAO,MAAM;AACX,QAAA,aAAA,EAAe,mBAAA,CAAoB,SAAA,EAAW,wBAAA,EAA0B,IAAI,CAAA;AAAA,MAC9E,CAAA;AAAA,IACF;AAEA,IAAA,OAAO,MAAA;AAAA,EACT,CAAA,EAAG,CAAC,MAAA,EAAQ,YAAA,EAAc,OAAO,aAAA,EAAe,QAAA,EAAU,OAAA,EAAS,WAAW,CAAC,CAAA;AAE/E,EAAMA,6BAAU,MAAM;AACpB,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,gBAAA,CAAiB,mBAAA,GAAsB,IAAI,EAAE,CAAA;AAAA,IAC/C;AAAA,EACF,CAAA,EAAG,CAAC,KAAA,EAAO,mBAAmB,CAAC,CAAA;AAE/B,EAAA,OAAO;AAAA,IACL,aAAA,EAAe,KAAA,CAAM,MAAA,GAAS,aAAA,GAAgB,MAAA;AAAA,IAC9C;AAAA,GACF;AACF;AC9IO,IAAM,UAAgBC,kBAAA,CAAA,IAAA,CAAK,CAAC,EAAE,SAAA,EAAW,GAAG,OAAM,KAAqC;AAC5F,EAAA,uBACElH,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,IAAA,EAAK,QAAO,IAAA,EAAK,SAAA,EAAsB,OAAA,EAAQ,WAAA,EAAY,MAAK,cAAA,EAAe,KAAA,EAAM,4BAAA,EAA8B,GAAG,OAC/H,QAAA,kBAAAA,cAAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,QAAA,EAAS,SAAA;AAAA,MACT,QAAA,EAAS,SAAA;AAAA,MACT,CAAA,EAAE,8pBAAA;AAAA,MACF,IAAA,EAAK;AAAA;AAAA,GACP,EACF,CAAA;AAEJ,CAAC,CAAA;AAED,OAAA,CAAQ,WAAA,GAAc,SAAA;ACbf,IAAM,kBAAwBmH,kBAAA,CAAA,IAAA,CAAK,CAAC,EAAE,SAAA,EAAW,GAAG,OAAM,KAAqC;AACpG,EAAA,uBACEnH,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,IAAA,EAAK,QAAO,IAAA,EAAK,SAAA,EAAsB,OAAA,EAAQ,WAAA,EAAY,MAAK,cAAA,EAAe,KAAA,EAAM,4BAAA,EAA8B,GAAG,OAC/H,QAAA,kBAAAA,cAAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,QAAA,EAAS,SAAA;AAAA,MACT,QAAA,EAAS,SAAA;AAAA,MACT,CAAA,EAAE,u2BAAA;AAAA,MACF,IAAA,EAAK;AAAA;AAAA,GACP,EACF,CAAA;AAEJ,CAAC,CAAA;AAED,eAAA,CAAgB,WAAA,GAAc,iBAAA;ACuB9B,IAAM,cAAA,GAAuBoH,iCAA0C,IAAI,CAAA;AAE3E,SAAS,iBAAA,GAAoB;AAC3B,EAAA,MAAM,OAAA,GAAgBA,8BAAW,cAAc,CAAA;AAC/C,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,MAAM,IAAI,MAAM,mDAAmD,CAAA;AAAA,EACrE;AACA,EAAA,OAAO,OAAA;AACT;AAEA,SAAS,UAAA,CAAW;AAAA,EAClB,WAAA,GAAc,KAAA;AAAA,EACd,KAAA;AAAA,EACA,IAAA,EAAM,cAAA;AAAA,EACN,YAAA,EAAc,iBAAA;AAAA,EACd,IAAA,GAAO,QAAA;AAAA,EACP,KAAA,GAAQ;AACV,CAAA,GAAoB,EAAC,EAAG;AACtB,EAAA,MAAM,CAAC,gBAAA,EAAkB,mBAAmB,CAAA,GAAUA,4BAAS,WAAW,CAAA;AAC1E,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAUA,kBAAA,CAAA,QAAA,EAAiB;AACrD,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAUA,kBAAA,CAAA,QAAA,EAAiB;AACjE,EAAA,MAAM,CAAC,kBAAkB,mBAAmB,CAAA,GAAUA,4BAAoB,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,KAAK,CAAA,CAAe,CAAA;AAEzG,EAAA,MAAM,OAAO,cAAA,IAAkB,gBAAA;AAC/B,EAAA,MAAM,UAAU,iBAAA,IAAqB,mBAAA;AAErC,EAAA,MAAM,UAAA,GAAmBA,kBAAA,CAAA,OAAA;AAAA,IACvB,MAAM;AAAA,MACJvC,eAAO,CAAC,CAAA;AAAA,MACRC,YAAAA,CAAK;AAAA,QACH,yBAAA,EAA2B,KAAA;AAAA,QAC3B,SAAA,EAAW;AAAA,OACZ,CAAA;AAAA,MACDC,aAAAA,CAAM;AAAA,QACJ,OAAA,EAASsC,kBAAA,CAAW,EAAE,MAAA,EAAQ,GAAG;AAAA,OAClC;AAAA,KACH;AAAA,IACA;AAAC,GACH;AAEA,EAAA,MAAM,WAAW1C,mBAAAA,CAAY;AAAA,IAC3B,SAAA,EAAW,gBAAA;AAAA,IACX,IAAA;AAAA,IACA,YAAA,EAAc,OAAA;AAAA,IACd,oBAAA,EAAsBC,kBAAAA;AAAA,IACtB;AAAA,GACD,CAAA;AAED,EAAA,MAAM,YAAA,GAAeQ,uBAAAA,CAAgB,CAACsB,gBAAAA,CAAS,SAAS,OAAO,CAAA,EAAGxB,kBAAAA,CAAW,QAAA,CAAS,OAAO,CAAA,EAAGC,eAAAA,CAAQ,QAAA,CAAS,OAAO,CAAC,CAAC,CAAA;AAE1H,EAAA,MAAM,cAAA,GAAuBiC,kBAAA,CAAA,WAAA,CAAY,CAAC,OAAA,EAA8C,QAAA,KAAyC;AAC/H,IAAA,mBAAA,CAAoB,CAAA,EAAG,OAAO,CAAA,CAAA,EAAI,QAAQ,CAAA,CAAe,CAAA;AAAA,EAC3D,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,OAAaA,kBAAA,CAAA,OAAA;AAAA,IACX,OAAO;AAAA,MACL,IAAA;AAAA,MACA,OAAA;AAAA,MACA,GAAG,YAAA;AAAA,MACH,GAAG,QAAA;AAAA,MACH,KAAA;AAAA,MACA,OAAA;AAAA,MACA,aAAA;AAAA,MACA,UAAA;AAAA,MACA,gBAAA;AAAA,MACA;AAAA,KACF,CAAA;AAAA,IACA,CAAC,MAAM,OAAA,EAAS,YAAA,EAAc,UAAU,KAAA,EAAO,OAAA,EAAS,eAAe,cAAc;AAAA,GACvF;AACF;AAEA,SAAS,QAAQ,EAAE,QAAA,EAAU,QAAQ,KAAA,EAAO,GAAG,SAAQ,EAAiB;AACtE,EAAA,MAAM,UAAU,UAAA,CAAW,EAAE,KAAA,EAAO,GAAG,SAAS,CAAA;AAChD,EAAA,uBAAOpH,cAAAA,CAAC,cAAA,CAAe,UAAf,EAAwB,KAAA,EAAO,SAAU,QAAA,EAAS,CAAA;AAC5D;AAMA,IAAM,cAAA,GAAuBoH,kBAAA,CAAA,UAAA,CAA6C,SAASE,eAAAA,CAAe,EAAE,QAAA,EAAU,OAAA,GAAU,KAAA,EAAO,GAAG,KAAA,EAAM,EAAG,OAAA,EAAS;AAClJ,EAAA,MAAM,UAAU,iBAAA,EAAkB;AAClC,EAAA,MAAM,WAAA,GAAoBF,kBAAA,CAAA,cAAA,CAAe,QAAQ,CAAA,GAC7C,QAAA,CAAeA,kBAAA,CAAA,OAAA,EAAS,EAAE,CAAA,IAAK,EAAA,GAC5B,QAAA,CAAS,KAAA,CAAc,GAAA,GACvB,SAAiB,GAAA,GACpB,MAAA;AACJ,EAAA,MAAM,GAAA,GAAM7B,qBAAa,CAAC,OAAA,CAAQ,KAAK,YAAA,EAAc,OAAA,EAAS,WAAW,CAAC,CAAA;AAE1E,EAAA,IAAI,OAAA,IAAiB6B,kBAAA,CAAA,cAAA,CAAe,QAAQ,CAAA,EAAG;AAC7C,IAAA,OAAaA,kBAAA,CAAA,YAAA;AAAA,MACX,QAAA;AAAA,MACA,QAAQ,iBAAA,CAAkB;AAAA,QACxB,GAAA;AAAA,QACA,GAAG,KAAA;AAAA,QACH,GAAI,QAAA,CAAS,KAAA;AAAA,QACb,YAAA,EAAc,OAAA,CAAQ,IAAA,GAAO,MAAA,GAAS;AAAA,OACvC;AAAA,KACH;AAAA,EACF;AAEA,EAAA,uBACEpH,cAAAA,CAAC,QAAA,EAAA,EAAO,GAAA,EAAU,cAAY,OAAA,CAAQ,IAAA,GAAO,MAAA,GAAS,QAAA,EAAW,GAAG,OAAA,CAAQ,iBAAA,CAAkB,KAAK,GAChG,QAAA,EACH,CAAA;AAEJ,CAAC,CAAA;AASD,IAAM,iBAAuBoH,kBAAA,CAAA,UAAA,CAAgD,SAASG,gBACpF,EAAE,SAAA,EAAW,OAAO,QAAA,EAAU,KAAA,GAAQ,UAAU,KAAA,EAAO,MAAA,GAAS,MAAM,WAAA,GAAc,IAAI,GAAG,KAAA,IAC3F,OAAA,EACA;AACA,EAAA,MAAM,UAAU,iBAAA,EAAkB;AAClC,EAAA,MAAM,MAAMhC,oBAAAA,CAAa,CAAC,QAAQ,IAAA,CAAK,WAAA,EAAa,OAAO,CAAC,CAAA;AAE5D,EAAM6B,6BAAU,MAAM;AACpB,IAAA,OAAA,CAAQ,cAAA,CAAe,MAAM,KAAK,CAAA;AAAA,EACpC,CAAA,EAAG,CAAC,OAAA,EAAS,IAAA,EAAM,KAAK,CAAC,CAAA;AAEzB,EAAA,IAAI,CAAC,OAAA,CAAQ,OAAA,CAAQ,IAAA,EAAM,OAAO,IAAA;AAElC,EAAA,MAAM,OAAA,mBACJpH,cAAAA,CAAC8G,4BAAAA,EAAA,EAAqB,OAAA,EAAS,OAAA,CAAQ,OAAA,EAAS,KAAA,EAAO,OAAA,CAAQ,KAAA,EAC7D,QAAA,kBAAA9G,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,KAAA,EAAO;AAAA,QACL,UAAU,OAAA,CAAQ,QAAA;AAAA,QAClB,GAAA,EAAK,QAAQ,CAAA,IAAK,CAAA;AAAA,QAClB,IAAA,EAAM,QAAQ,CAAA,IAAK,CAAA;AAAA,QACnB,GAAG;AAAA,OACL;AAAA,MACA,mBAAiB,OAAA,CAAQ,OAAA;AAAA,MACzB,oBAAkB,OAAA,CAAQ,aAAA;AAAA,MAC1B,SAAA,EAAW,CAAA,eAAA,EAAkB,SAAA,IAAa,EAAE,CAAA,CAAA;AAAA,MAC5C,WAAA,EAAW,IAAA;AAAA,MACX,YAAA,EAAY,KAAA;AAAA,MACZ,YAAA,EAAY,OAAA,CAAQ,OAAA,CAAQ,IAAA,GAAO,MAAA,GAAS,QAAA;AAAA,MAC3C,GAAG,OAAA,CAAQ,gBAAA,CAAiB,KAAK,CAAA;AAAA,MAEjC,QAAA,EAAA,KAAA,CAAM;AAAA;AAAA,GACT,EACF,CAAA;AAGF,EAAA,IAAI,MAAA,EAAQ;AACV,IAAA,uBAAOA,cAAAA,CAACyF,sBAAAA,EAAA,EAAgB,GAAG,aAAc,QAAA,EAAA,OAAA,EAAQ,CAAA;AAAA,EACnD;AAEA,EAAA,OAAO,OAAA;AACT,CAAC,CAAA;AAED,cAAA,CAAe,WAAA,GAAc,gBAAA;AAC7B,cAAA,CAAe,WAAA,GAAc,gBAAA;AC3FtB,SAAS,mBAAmB,MAAA,EAAgC;AACjE,EAAA,IAAI,CAAC,QAAQ,OAAO,KAAA;AACpB,EAAA,IAAI;AACF,IAAA,OAAO,MAAA,CAAO,GAAA,EAAI,CAAE,OAAA,CAAQ,WAAW,CAAA;AAAA,EACzC,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,KAAA;AAAA,EACT;AACF;AAKO,SAAS,iBAAA,CAAkB,QAAuB,KAAA,EAAwB;AAC/E,EAAA,IAAI,CAAC,QAAQ,OAAO,KAAA;AACpB,EAAA,OAAO,MAAA,CAAO,QAAA,CAAS,WAAA,EAAa,EAAE,OAAO,CAAA;AAC/C;AAKO,SAAS,eAAA,CAAgB,MAAA,EAAuB,KAAA,EAAe,IAAA,EAAoB,OAAA,EAA+B;AACvH,EAAA,IAAI,CAAC,MAAA,EAAQ;AAEb,EAAA,IAAI;AACF,IAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,KAAA,EAAM,CAAE,KAAA,EAAM;AAEnC,IAAA,IAAI,WAAA,CAAY,IAAI,CAAA,EAAG;AACrB,MAAA,KAAA,CAAM,WAAW,WAAA,EAAa,EAAE,KAAA,EAAO,EAAE,GAAA,EAAI;AAAA,IAC/C,WAAW,OAAA,KAAY,KAAA,CAAA,IAAa,OAAA,KAAY,IAAA,IAAQ,YAAY,CAAA,CAAA,EAAI;AACtE,MAAA,KAAA,CAAM,gBAAA,CAAiB,OAAO,CAAA,CAAE,UAAA,CAAW,aAAa,EAAE,KAAA,EAAO,CAAA,CAAE,GAAA,EAAI;AAAA,IACzE,WAAW,IAAA,EAAM;AACf,MAAA,MAAM,QAAA,GAAW,gBAAA,CAAiB,EAAE,MAAA,EAAQ,MAAM,CAAA;AAClD,MAAA,IAAI,QAAA,EAAU;AACZ,QAAA,KAAA,CAAM,gBAAA,CAAiB,QAAA,CAAS,GAAG,CAAA,CAAE,UAAA,CAAW,aAAa,EAAE,KAAA,EAAO,CAAA,CAAE,GAAA,EAAI;AAAA,MAC9E,CAAA,MAAO;AACL,QAAA,KAAA,CAAM,WAAW,WAAA,EAAa,EAAE,KAAA,EAAO,EAAE,GAAA,EAAI;AAAA,MAC/C;AAAA,IACF,CAAA,MAAO;AACL,MAAA,KAAA,CAAM,WAAW,WAAA,EAAa,EAAE,KAAA,EAAO,EAAE,GAAA,EAAI;AAAA,IAC/C;AAEA,IAAA,MAAA,CAAO,OAAM,CAAE,OAAA,CAAQ,gBAAA,EAAkB,IAAI,EAAE,GAAA,EAAI;AAAA,EACrD,SAAS,KAAA,EAAO;AACd,IAAA,OAAA,CAAQ,KAAA,CAAM,8BAA8B,KAAK,CAAA;AAAA,EACnD;AACF;AAKO,SAAS,yBAAA,CAA0B,MAAA,EAAuB,YAAA,GAAwB,KAAA,EAAgB;AACvG,EAAA,IAAI,CAAC,MAAA,IAAU,YAAA,EAAc,OAAO,IAAA;AAEpC,EAAA,MAAM,qBAAA,GAAwB,MAAA,CAAO,QAAA,CAAS,MAAM,CAAA,IAAK,MAAA,CAAO,QAAA,CAAS,WAAW,CAAA,IAAK,MAAA,CAAO,QAAA,CAAS,aAAa,CAAA;AAEtH,EAAA,OAAO,qBAAA,IAAyB,CAAC,kBAAA,CAAmB,MAAM,CAAA;AAC5D;AAKO,SAAS,yBAAA,CAA0B,MAAA,EAAuB,mBAAA,EAA8B,iBAAA,EAAqC;AAClI,EAAA,IAAI,CAAC,iBAAA,IAAqB,CAAC,MAAA,EAAQ,OAAO,KAAA;AAE1C,EAAA,IAAI,mBAAA,EAAqB;AACvB,IAAA,IAAIlB,qBAAAA,CAAgB,OAAO,KAAA,CAAM,SAAS,KAAK,CAAC,kBAAA,CAAmB,MAAM,CAAA,EAAG;AAC1E,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,EACF;AAEA,EAAA,OAAO,IAAA;AACT;AAKO,SAAS,kBAAkB,MAAA,EAAuB,KAAA,EAAe,QAAA,GAAoB,KAAA,EAAO,sBAA+B,KAAA,EAAO;AACvI,EAAA,MAAM,iBAAA,GAAoB,cAAA,CAAe,WAAA,EAAa,MAAM,CAAA;AAC5D,EAAA,MAAM,UAAA,GAAa,yBAAA,CAA0B,MAAA,EAAQ,QAAQ,CAAA;AAC7D,EAAA,MAAM,QAAA,GAAW,iBAAA,CAAkB,MAAA,EAAQ,KAAK,CAAA;AAEhD,EAAA,MAAM,UAAA,GAAmBiD,kBAAA,CAAA,OAAA;AAAA,IACvB,MAAM,yBAAA,CAA0B,MAAA,EAAQ,mBAAA,EAAqB,iBAAiB,CAAA;AAAA,IAC9E,CAAC,MAAA,EAAQ,mBAAA,EAAqB,iBAAiB;AAAA,GACjD;AAEA,EAAA,OAAO;AAAA,IACL,iBAAA;AAAA,IACA,UAAA;AAAA,IACA,QAAA;AAAA,IACA;AAAA,GACF;AACF;AAKO,IAAM,eAAA,GAAwBA,kBAAA,CAAA,UAAA;AAAA,EACnC,CACE;AAAA,IACE,MAAA,EAAQ,cAAA;AAAA,IACR,IAAA;AAAA,IACA,OAAA;AAAA,IACA,KAAA;AAAA,IACA,IAAA;AAAA,IACA,mBAAA,GAAsB,KAAA;AAAA,IACtB,SAAA,GAAY,EAAA;AAAA,IACZ,QAAA;AAAA,IACA,OAAA;AAAA,IACA,SAAA;AAAA,IACA,QAAA;AAAA,IACA,KAAA;AAAA,IACA,GAAG;AAAA,KAEL,GAAA,KACG;AACH,IAAA,MAAM,MAAA,GAAS,gBAAgB,cAAc,CAAA;AAC7C,IAAA,MAAM,EAAE,YAAY,QAAA,EAAU,UAAA,KAAe,iBAAA,CAAkB,MAAA,EAAQ,KAAA,EAAO,QAAA,EAAU,mBAAmB,CAAA;AAE3G,IAAA,MAAM,WAAA,GAAoBA,kBAAA,CAAA,WAAA;AAAA,MACxB,CAAC,CAAA,KAA2C;AAC1C,QAAA,OAAA,GAAU,CAAC,CAAA;AAEX,QAAA,IAAI,CAAC,CAAA,CAAE,gBAAA,IAAoB,CAAC,cAAc,MAAA,EAAQ;AAChD,UAAA,eAAA,CAAgB,MAAA,EAAQ,KAAA,EAAO,IAAA,EAAM,OAAO,CAAA;AAC5C,UAAA,SAAA,GAAY,KAAK,CAAA;AAAA,QACnB;AAAA,MACF,CAAA;AAAA,MACA,CAAC,KAAA,EAAO,MAAA,EAAQ,YAAY,IAAA,EAAM,OAAA,EAAS,SAAS,SAAS;AAAA,KAC/D;AAEA,IAAA,MAAM,WAAA,GAAoBA,kBAAA,CAAA,OAAA;AAAA,MACxB,OACG;AAAA,QACC,GAAG,KAAA;AAAA,QACH,mBAAA,EAAqB;AAAA,OACvB,CAAA;AAAA,MACF,CAAC,OAAO,KAAK;AAAA,KACf;AAEA,IAAA,IAAI,CAAC,UAAA,IAAc,CAAC,MAAA,IAAU,CAAC,OAAO,UAAA,EAAY;AAChD,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,uBACExH,cAAAA;AAAA,MAAC6C,OAAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,QAAA;AAAA,QACL,SAAA,EAAW,UAAU,IAAA,EAAK;AAAA,QAC1B,QAAA,EAAU,UAAA;AAAA,QACV,YAAA,EAAW,OAAA;AAAA,QACX,mBAAA,EAAmB,WAAW,IAAA,GAAO,KAAA;AAAA,QACrC,eAAA,EAAe,UAAA;AAAA,QACf,IAAA,EAAK,QAAA;AAAA,QACL,QAAA,EAAU,EAAA;AAAA,QACV,YAAA,EAAY,GAAG,KAAK,CAAA,gBAAA,CAAA;AAAA,QACpB,cAAA,EAAc,QAAA;AAAA,QACd,OAAA,EAAS,WAAA;AAAA,QACT,KAAA,EAAO,WAAA;AAAA,QACN,GAAG,WAAA;AAAA,QACJ,GAAA;AAAA,QAEC,QAAA,EAAA,QAAA,oBACC9B,eAAAA,CAAA+C,mBAAAA,EAAA,EACE,QAAA,EAAA;AAAA,0BAAA9D,cAAAA,CAAC,UAAK,SAAA,EAAU,yBAAA,EAA0B,OAAO,EAAE,mBAAA,EAAqB,OAAM,EAA0B,CAAA;AAAA,UACvG,wBAAQA,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,sBAAsB,QAAA,EAAA,IAAA,EAAK;AAAA,SAAA,EACtD;AAAA;AAAA,KAEJ;AAAA,EAEJ;AACF,CAAA;AAEA,eAAA,CAAgB,WAAA,GAAc,iBAAA;ACvOvB,IAAM,wBAAA,GAA6C;AAAA,EACxD;AAAA,IACE,KAAA,EAAO,OAAA;AAAA,IACP,KAAA,EAAO,2BAAA;AAAA,IACP,MAAA,EAAQ;AAAA,GACV;AAAA,EACA;AAAA,IACE,KAAA,EAAO,MAAA;AAAA,IACP,KAAA,EAAO,0BAAA;AAAA,IACP,MAAA,EAAQ;AAAA,GACV;AAAA,EACA;AAAA,IACE,KAAA,EAAO,KAAA;AAAA,IACP,KAAA,EAAO,yBAAA;AAAA,IACP,MAAA,EAAQ;AAAA,GACV;AAAA,EACA;AAAA,IACE,KAAA,EAAO,QAAA;AAAA,IACP,KAAA,EAAO,4BAAA;AAAA,IACP,MAAA,EAAQ;AAAA,GACV;AAAA,EACA;AAAA,IACE,KAAA,EAAO,QAAA;AAAA,IACP,KAAA,EAAO,4BAAA;AAAA,IACP,MAAA,EAAQ;AAAA;AAEZ,CAAA;AAEO,IAAM,iBAAA,GAA0ByH,kBAAA,CAAA,UAAA,CAA2C,CAAC,EAAE,SAAA,EAAW,UAAU,GAAG,KAAA,EAAM,EAAG,GAAA,qBACpHzH,cAAAA;AAAA,EAAC6C,OAAAA;AAAA,EAAA;AAAA,IACC,IAAA,EAAK,QAAA;AAAA,IACL,SAAA;AAAA,IACA,YAAA,EAAW,OAAA;AAAA,IACX,iBAAA,EAAgB,SAAA;AAAA,IAChB,IAAA,EAAK,QAAA;AAAA,IACL,QAAA,EAAU,EAAA;AAAA,IACV,YAAA,EAAW,gBAAA;AAAA,IACX,OAAA,EAAQ,0BAAA;AAAA,IACR,GAAA;AAAA,IACC,GAAG,KAAA;AAAA,IAEH,QAAA,EAAA,QAAA,oBAAY7C,cAAAA,CAAC,eAAA,EAAA,EAAgB,WAAU,oBAAA,EAAqB;AAAA;AAC/D,CACD,CAAA;AAED,iBAAA,CAAkB,WAAA,GAAc,mBAAA;AAEzB,SAAS,iBAAiB,EAAE,MAAA,EAAQ,gBAAgB,MAAA,GAAS,wBAAA,EAA0B,SAAQ,EAA0B;AAC9H,EAAA,MAAM,MAAA,GAAS,gBAAgB,cAAc,CAAA;AAC7C,EAAA,MAAM,YAAA,GAAqByH,0BAAuB,IAAI,CAAA;AAEtD,EAAA,MAAM,eAAA,GAAwBA,+BAAY,MAAM;AAC9C,IAAA,IAAI,CAAC,MAAA,EAAQ;AACb,IAAA,MAAA,CAAO,OAAM,CAAE,KAAA,GAAQ,SAAA,CAAU,WAAW,EAAE,GAAA,EAAI;AAClD,IAAA,OAAA,IAAU;AAAA,EACZ,CAAA,EAAG,CAAC,MAAA,EAAQ,OAAO,CAAC,CAAA;AAEpB,EAAA,MAAM,SAAA,GAAkBA,kBAAA,CAAA,OAAA,CAAQ,MAAM,CAAC,GAAG,MAAA,EAAQ,EAAE,KAAA,EAAO,kBAAA,EAAoB,OAAO,MAAA,EAAQ,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA;AAEzG,EAAA,MAAM,EAAE,aAAA,EAAc,GAAI,iBAAA,CAAkB;AAAA,IAC1C,YAAA;AAAA,IACA,KAAA,EAAO,SAAA;AAAA,IACP,WAAA,EAAa,MAAA;AAAA,IACb,QAAA,EAAU,CAAC,IAAA,KAAS;AAClB,MAAA,IAAI,IAAA,CAAK,UAAU,MAAA,EAAQ;AACzB,QAAA,eAAA,EAAgB;AAAA,MAClB;AACA,MAAA,OAAA,IAAU;AAAA,IACZ,CAAA;AAAA,IACA,OAAA;AAAA,IACA,mBAAA,EAAqB;AAAA,GACtB,CAAA;AAED,EAAA,uBACE1G,gBAAC,KAAA,EAAA,EAAI,GAAA,EAAK,cAAc,SAAA,EAAU,0BAAA,EAA2B,UAAU,CAAA,EACrE,QAAA,EAAA;AAAA,oBAAAf,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qBAAA,EAAsB,kBAAA,EAAiB,YAAA,EACnD,QAAA,EAAA,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,EAAO,KAAA,qBAClBA,cAAAA;AAAA,MAAC,eAAA;AAAA,MAAA;AAAA,QAEC,MAAA;AAAA,QACA,OAAO,KAAA,CAAM,KAAA;AAAA,QACb,YAAA,EAAY,CAAA,EAAG,KAAA,CAAM,KAAK,CAAA,gBAAA,CAAA;AAAA,QAC1B,QAAA,EAAU,KAAA,KAAU,aAAA,GAAgB,CAAA,GAAI,EAAA;AAAA,QACxC,oBAAkB,aAAA,KAAkB,KAAA;AAAA,QACpC,OAAA,EAAS;AAAA,OAAA;AAAA,MANJ,KAAA,CAAM;AAAA,KAQd,CAAA,EACH,CAAA;AAAA,oBAEAA,eAAC,SAAA,EAAA,EAAU,CAAA;AAAA,oBAEXA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uBACb,QAAA,kBAAAA,cAAAA;AAAA,MAAC6C,OAAAA;AAAA,MAAA;AAAA,QACC,OAAA,EAAS,eAAA;AAAA,QACT,YAAA,EAAW,kBAAA;AAAA,QACX,QAAA,EAAU,aAAA,KAAkB,MAAA,CAAO,MAAA,GAAS,CAAA,GAAI,EAAA;AAAA,QAChD,IAAA,EAAK,QAAA;AAAA,QACL,IAAA,EAAK,UAAA;AAAA,QACL,YAAA,EAAW,OAAA;AAAA,QACX,kBAAA,EAAkB,kBAAkB,MAAA,CAAO,MAAA;AAAA,QAE3C,QAAA,kBAAA7C,cAAAA,CAAC,OAAA,EAAA,EAAQ,SAAA,EAAU,oBAAA,EAAqB;AAAA;AAAA,KAC1C,EACF;AAAA,GAAA,EACF,CAAA;AAEJ;AAEO,SAAS,gBAAA,CAAiB;AAAA,EAC/B,MAAA,EAAQ,cAAA;AAAA,EACR,MAAA,GAAS,wBAAA;AAAA,EACT,mBAAA,GAAsB,KAAA;AAAA,EACtB,GAAG;AACL,CAAA,EAA0B;AACxB,EAAA,MAAM,MAAA,GAAS,gBAAgB,cAAc,CAAA;AAC7C,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAUyH,4BAAS,KAAK,CAAA;AAChD,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAUA,4BAAS,KAAK,CAAA;AAExD,EAAA,MAAM,aAAA,GAAgB,cAAA,CAAe,WAAA,EAAa,MAAM,CAAA;AAExD,EAAMA,6BAAU,MAAM;AACpB,IAAA,IAAI,CAAC,MAAA,EAAQ;AAEb,IAAA,MAAM,mBAAmB,MAAM;AAC7B,MAAA,IAAIC,WAAAA,GAAa,KAAA;AAEjB,MAAA,IAAI,CAAC,aAAA,IAAiB,CAAC,MAAA,EAAQ;AAC7B,QAAAA,WAAAA,GAAa,IAAA;AAAA,MACf;AAEA,MAAA,MAAM,qBAAA,GAAwB,MAAA,CAAO,QAAA,CAAS,MAAM,CAAA,IAAK,MAAA,CAAO,QAAA,CAAS,WAAW,CAAA,IAAK,MAAA,CAAO,QAAA,CAAS,aAAa,CAAA;AAEtH,MAAA,IAAI,qBAAA,EAAuB;AACzB,QAAAA,WAAAA,GAAa,IAAA;AAAA,MACf;AAEA,MAAA,aAAA,CAAcA,WAAU,CAAA;AAAA,IAC1B,CAAA;AAEA,IAAA,MAAA,CAAO,EAAA,CAAG,mBAAmB,gBAAgB,CAAA;AAC7C,IAAA,MAAA,CAAO,EAAA,CAAG,UAAU,gBAAgB,CAAA;AAEpC,IAAA,OAAO,MAAM;AACX,MAAA,MAAA,CAAO,GAAA,CAAI,mBAAmB,gBAAgB,CAAA;AAC9C,MAAA,MAAA,CAAO,GAAA,CAAI,UAAU,gBAAgB,CAAA;AAAA,IACvC,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,MAAA,EAAQ,aAAa,CAAC,CAAA;AAE1B,EAAA,MAAM,QAAA,GAAW,MAAA,EAAQ,QAAA,CAAS,WAAW,CAAA,IAAK,KAAA;AAElD,EAAA,MAAM,UAAA,GAAmBD,2BAAQ,MAAM;AACrC,IAAA,IAAI,CAAC,mBAAA,IAAuB,CAAC,MAAA,EAAQ,OAAO,IAAA;AAE5C,IAAA,OAAO,EAAElD,sBAAgB,MAAA,CAAO,KAAA,CAAM,SAAS,CAAA,IAAK,CAAC,mBAAmB,MAAM,CAAA,CAAA;AAAA,EAChF,CAAA,EAAG,CAAC,mBAAA,EAAqB,MAAM,CAAC,CAAA;AAEhC,EAAA,IAAI,CAAC,UAAA,IAAc,CAAC,MAAA,IAAU,CAAC,OAAO,UAAA,EAAY;AAChD,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,uBACExD,eAAAA,CAAC,OAAA,EAAA,EAAQ,IAAA,EAAM,MAAA,EAAQ,cAAc,SAAA,EACnC,QAAA,EAAA;AAAA,oBAAAf,cAAAA,CAAC,cAAA,EAAA,EAAe,OAAA,EAAO,IAAA,EACrB,QAAA,kBAAAA,cAAAA;AAAA,MAAC,iBAAA;AAAA,MAAA;AAAA,QACC,QAAA,EAAU,UAAA;AAAA,QACV,mBAAA,EAAmB,WAAW,IAAA,GAAO,KAAA;AAAA,QACrC,eAAA,EAAe,UAAA;AAAA,QACf,cAAA,EAAc,QAAA;AAAA,QACb,GAAG;AAAA;AAAA,KACN,EACF,CAAA;AAAA,oBAEAA,cAAAA,CAAC,cAAA,EAAA,EAAe,YAAA,EAAW,oBACzB,QAAA,kBAAAA,cAAAA,CAAC,gBAAA,EAAA,EAAiB,MAAA,EAAgB,QAAgB,OAAA,EAAS,MAAM,SAAA,CAAU,KAAK,GAAG,CAAA,EACrF;AAAA,GAAA,EACF,CAAA;AAEJ;AC9NO,IAAM,qBAA2B2H,kBAAA,CAAA,IAAA,CAAK,CAAC,EAAE,SAAA,EAAW,GAAG,OAAM,KAAqC;AACvG,EAAA,uBACE3H,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,IAAA,EAAK,QAAO,IAAA,EAAK,SAAA,EAAsB,OAAA,EAAQ,WAAA,EAAY,MAAK,cAAA,EAAe,KAAA,EAAM,4BAAA,EAA8B,GAAG,OAC/H,QAAA,kBAAAA,cAAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,QAAA,EAAS,SAAA;AAAA,MACT,QAAA,EAAS,SAAA;AAAA,MACT,CAAA,EAAE,+gBAAA;AAAA,MACF,IAAA,EAAK;AAAA;AAAA,GACP,EACF,CAAA;AAEJ,CAAC,CAAA;AAED,kBAAA,CAAmB,WAAA,GAAc,oBAAA;ACb1B,IAAM,mBAAyB4H,kBAAA,CAAA,IAAA,CAAK,CAAC,EAAE,SAAA,EAAW,GAAG,OAAM,KAAqC;AACrG,EAAA,uBACE7G,eAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,MAAK,MAAA,EAAO,IAAA,EAAK,SAAA,EAAsB,OAAA,EAAQ,aAAY,IAAA,EAAK,cAAA,EAAe,KAAA,EAAM,4BAAA,EAA8B,GAAG,KAAA,EAC/H,QAAA,EAAA;AAAA,oBAAAf,cAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,CAAA,EAAE,uRAAA;AAAA,QACF,IAAA,EAAK;AAAA;AAAA,KACP;AAAA,oBACAA,cAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,CAAA,EAAE,glBAAA;AAAA,QACF,IAAA,EAAK;AAAA;AAAA;AACP,GAAA,EACF,CAAA;AAEJ,CAAC,CAAA;AAED,gBAAA,CAAiB,WAAA,GAAc,kBAAA;ACfxB,IAAM,WAAiB6H,kBAAA,CAAA,IAAA,CAAK,CAAC,EAAE,SAAA,EAAW,GAAG,OAAM,KAAqC;AAC7F,EAAA,uBACE9G,eAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,MAAK,MAAA,EAAO,IAAA,EAAK,SAAA,EAAsB,OAAA,EAAQ,aAAY,IAAA,EAAK,cAAA,EAAe,KAAA,EAAM,4BAAA,EAA8B,GAAG,KAAA,EAC/H,QAAA,EAAA;AAAA,oBAAAf,cAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,CAAA,EAAE,iiCAAA;AAAA,QACF,IAAA,EAAK;AAAA;AAAA,KACP;AAAA,oBACAA,cAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,CAAA,EAAE,oiCAAA;AAAA,QACF,IAAA,EAAK;AAAA;AAAA;AACP,GAAA,EACF,CAAA;AAEJ,CAAC,CAAA;AAED,QAAA,CAAS,WAAA,GAAc,UAAA;ACfhB,IAAM,YAAkB8H,kBAAA,CAAA,IAAA,CAAK,CAAC,EAAE,SAAA,EAAW,GAAG,OAAM,KAAqC;AAC9F,EAAA,uBACE9H,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,IAAA,EAAK,QAAO,IAAA,EAAK,SAAA,EAAsB,OAAA,EAAQ,WAAA,EAAY,MAAK,cAAA,EAAe,KAAA,EAAM,4BAAA,EAA8B,GAAG,OAC/H,QAAA,kBAAAA,cAAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,QAAA,EAAS,SAAA;AAAA,MACT,QAAA,EAAS,SAAA;AAAA,MACT,CAAA,EAAE,kvBAAA;AAAA,MACF,IAAA,EAAK;AAAA;AAAA,GACP,EACF,CAAA;AAEJ,CAAC,CAAA;AAED,SAAA,CAAU,WAAA,GAAc,WAAA;ACuBjB,IAAM,cAAA,GAAiB,CAAC,KAAA,KAA4B;AACzD,EAAA,MAAM,EAAE,MAAA,EAAQ,SAAA,EAAW,YAAA,EAAa,GAAI,KAAA;AAC5C,EAAA,MAAM,CAAC,GAAA,EAAK,MAAM,CAAA,GAAU+H,4BAAiB,EAAE,CAAA;AAE/C,EAAMA,6BAAU,MAAM;AACpB,IAAA,IAAI,CAAC,MAAA,EAAQ;AAGb,IAAA,MAAM,EAAE,IAAA,EAAK,GAAI,MAAA,CAAO,cAAc,MAAM,CAAA;AAE5C,IAAA,IAAI,MAAA,CAAO,QAAA,CAAS,MAAM,CAAA,IAAK,CAAC,GAAA,EAAK;AACnC,MAAA,MAAA,CAAO,QAAQ,EAAE,CAAA;AACjB,MAAA,YAAA,IAAe;AAAA,IACjB;AAAA,EACF,CAAA,EAAG,CAAC,MAAA,EAAQ,YAAA,EAAc,GAAG,CAAC,CAAA;AAE9B,EAAMA,6BAAU,MAAM;AACpB,IAAA,IAAI,CAAC,MAAA,EAAQ;AAEb,IAAA,MAAM,kBAAkB,MAAM;AAC5B,MAAA,MAAM,EAAE,IAAA,EAAK,GAAI,MAAA,CAAO,cAAc,MAAM,CAAA;AAC5C,MAAA,MAAA,CAAO,QAAQ,EAAE,CAAA;AAEjB,MAAA,IAAI,MAAA,CAAO,QAAA,CAAS,MAAM,CAAA,IAAK,CAAC,GAAA,EAAK;AACnC,QAAA,YAAA,IAAe;AAAA,MACjB;AAAA,IACF,CAAA;AAEA,IAAA,MAAA,CAAO,EAAA,CAAG,mBAAmB,eAAe,CAAA;AAC5C,IAAA,OAAO,MAAM;AACX,MAAA,MAAA,CAAO,GAAA,CAAI,mBAAmB,eAAe,CAAA;AAAA,IAC/C,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,MAAA,EAAQ,YAAA,EAAc,GAAG,CAAC,CAAA;AAE9B,EAAA,MAAM,OAAA,GAAgBA,+BAAY,MAAM;AACtC,IAAA,IAAI,CAAC,GAAA,IAAO,CAAC,MAAA,EAAQ;AAErB,IAAA,MAAM,EAAE,IAAA,EAAM,EAAA,EAAG,GAAI,OAAO,KAAA,CAAM,SAAA;AAClC,IAAA,MAAM,OAAO,MAAA,CAAO,KAAA,CAAM,GAAA,CAAI,WAAA,CAAY,MAAM,EAAE,CAAA;AAElD,IAAA,MAAA,CACG,OAAM,CACN,KAAA,GACA,eAAA,CAAgB,MAAM,EACtB,aAAA,CAAc;AAAA,MACb,IAAA,EAAM,MAAA;AAAA,MACN,MAAM,IAAA,IAAQ,GAAA;AAAA,MACd,KAAA,EAAO,CAAC,EAAE,IAAA,EAAM,MAAA,EAAQ,OAAO,EAAE,IAAA,EAAM,GAAA,EAAI,EAAG;AAAA,KAC/C,EACA,GAAA,EAAI;AAEP,IAAA,SAAA,IAAY;AAAA,EACd,CAAA,EAAG,CAAC,MAAA,EAAQ,SAAA,EAAW,GAAG,CAAC,CAAA;AAE3B,EAAA,MAAM,UAAA,GAAmBA,+BAAY,MAAM;AACzC,IAAA,IAAI,CAAC,MAAA,EAAQ;AACb,IAAA,MAAA,CAAO,KAAA,EAAM,CAAE,KAAA,EAAM,CAAE,UAAU,MAAA,EAAQ,EAAE,oBAAA,EAAsB,IAAA,EAAM,CAAA,CAAE,OAAA,CAAQ,iBAAA,EAAmB,IAAI,EAAE,GAAA,EAAI;AAC9G,IAAA,MAAA,CAAO,EAAE,CAAA;AAAA,EACX,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA;AAEX,EAAA,OAAO;AAAA,IACL,GAAA;AAAA,IACA,MAAA;AAAA,IACA,OAAA;AAAA,IACA,UAAA;AAAA,IACA,QAAA,EAAU,MAAA,EAAQ,QAAA,CAAS,MAAM,CAAA,IAAK;AAAA,GACxC;AACF,CAAA;AAEO,IAAM,UAAA,GAAmBA,8BAA2C,CAAC,EAAE,WAAW,QAAA,EAAU,GAAG,KAAA,EAAM,EAAG,GAAA,KAAQ;AACrH,EAAA,uBACE/H,cAAAA,CAAC6C,OAAAA,EAAA,EAAO,IAAA,EAAK,QAAA,EAAS,SAAA,EAAsB,YAAA,EAAW,OAAA,EAAQ,IAAA,EAAK,QAAA,EAAS,QAAA,EAAU,EAAA,EAAI,cAAW,MAAA,EAAO,OAAA,EAAQ,cAAA,EAAK,GAAA,EAAW,GAAG,KAAA,EACrI,QAAA,EAAA,QAAA,oBAAY7C,cAAAA,CAAC,QAAA,EAAA,EAAS,SAAA,EAAU,oBAAA,EAAqB,CAAA,EACxD,CAAA;AAEJ,CAAC,CAAA;AAEM,IAAM,WAAA,GAER,CAAC,EAAE,MAAA,EAAQ,gBAAe,KAAM;AACnC,EAAA,MAAM,MAAA,GAAS,gBAAgB,cAAc,CAAA;AAE7C,EAAA,MAAM,cAAc,cAAA,CAAe;AAAA,IACjC;AAAA,GACD,CAAA;AAED,EAAA,uBAAOA,cAAAA,CAAC,QAAA,EAAA,EAAU,GAAG,WAAA,EAAa,CAAA;AACpC,CAAA;AAEA,IAAM,QAAA,GAAoC,CAAC,EAAE,GAAA,EAAK,QAAQ,OAAA,EAAS,UAAA,EAAY,UAAS,KAAM;AAC5F,EAAA,MAAM,aAAA,GAAgB,CAAC,KAAA,KAA+B;AACpD,IAAA,IAAI,KAAA,CAAM,QAAQ,OAAA,EAAS;AACzB,MAAA,KAAA,CAAM,cAAA,EAAe;AACrB,MAAA,OAAA,EAAQ;AAAA,IACV;AAAA,EACF,CAAA;AAEA,EAAA,uBACEe,eAAAA,CAAA+C,mBAAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAA9D,cAAAA;AAAA,MAAC,OAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,KAAA;AAAA,QACL,WAAA,EAAY,0BAAA;AAAA,QACZ,KAAA,EAAO,GAAA;AAAA,QACP,UAAU,CAAC,CAAA,KAAM,MAAA,CAAO,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,QACtC,SAAA,EAAW,aAAA;AAAA,QACX,YAAA,EAAa,KAAA;AAAA,QACb,WAAA,EAAY,KAAA;AAAA,QACZ,cAAA,EAAe,KAAA;AAAA,QACf,SAAA,EAAU;AAAA;AAAA,KACZ;AAAA,oBAEAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qBAAA,EAAsB,kBAAA,EAAiB,YAAA,EACpD,QAAA,kBAAAA,cAAAA,CAAC6C,OAAAA,EAAA,EAAO,IAAA,EAAK,UAAS,OAAA,EAAS,OAAA,EAAS,KAAA,EAAM,cAAA,EAAK,QAAA,EAAU,CAAC,GAAA,IAAO,CAAC,QAAA,EAAU,YAAA,EAAW,OAAA,EACzF,QAAA,kBAAA7C,cAAAA,CAAC,kBAAA,EAAA,EAAmB,SAAA,EAAU,oBAAA,EAAqB,GACrD,CAAA,EACF,CAAA;AAAA,oBAEAA,eAAC,SAAA,EAAA,EAAU,CAAA;AAAA,oBAEXe,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qBAAA,EAAsB,oBAAiB,YAAA,EACpD,QAAA,EAAA;AAAA,sBAAAf,cAAAA,CAAC6C,OAAAA,EAAA,EAAO,IAAA,EAAK,QAAA,EAAS,OAAA,EAAS,MAAM,MAAA,CAAO,IAAA,CAAK,GAAA,EAAK,QAAQ,CAAA,EAAG,KAAA,EAAM,kCAAQ,QAAA,EAAU,CAAC,GAAA,IAAO,CAAC,QAAA,EAAU,YAAA,EAAW,OAAA,EACrH,QAAA,kBAAA7C,cAAAA,CAAC,gBAAA,EAAA,EAAiB,SAAA,EAAU,oBAAA,EAAqB,CAAA,EACnD,CAAA;AAAA,sBAEAA,eAAC6C,OAAAA,EAAA,EAAO,MAAK,QAAA,EAAS,OAAA,EAAS,UAAA,EAAY,KAAA,EAAM,0BAAA,EAAO,QAAA,EAAU,CAAC,GAAA,IAAO,CAAC,UAAU,YAAA,EAAW,OAAA,EAC9F,0BAAA7C,cAAAA,CAAC,SAAA,EAAA,EAAU,SAAA,EAAU,oBAAA,EAAqB,CAAA,EAC5C;AAAA,KAAA,EACF;AAAA,GAAA,EACF,CAAA;AAEJ,CAAA;AAuBO,SAAS,WAAA,CAAY;AAAA,EAC1B,MAAA,EAAQ,cAAA;AAAA,EACR,mBAAA,GAAsB,KAAA;AAAA,EACtB,YAAA;AAAA,EACA,oBAAA,GAAuB,IAAA;AAAA,EACvB,GAAG;AACL,CAAA,EAAqB;AACnB,EAAA,MAAM,MAAA,GAAS,gBAAgB,cAAc,CAAA;AAE7C,EAAA,MAAM,YAAA,GAAe,cAAA,CAAe,MAAA,EAAQ,MAAM,CAAA;AAElD,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAU+H,4BAAS,KAAK,CAAA;AAEhD,EAAA,MAAM,YAAY,MAAM;AACtB,IAAA,SAAA,CAAU,KAAK,CAAA;AAAA,EACjB,CAAA;AAEA,EAAA,MAAM,YAAA,GAAe,MAAM,SAAA,CAAU,oBAAoB,CAAA;AAEzD,EAAA,MAAM,cAAc,cAAA,CAAe;AAAA,IACjC,MAAA;AAAA,IACA,SAAA;AAAA,IACA;AAAA,GACD,CAAA;AAED,EAAA,MAAM,UAAA,GAAmBA,2BAAQ,MAAM;AACrC,IAAA,IAAI,CAAC,QAAQ,OAAO,IAAA;AACpB,IAAA,IAAI,MAAA,CAAO,QAAA,CAAS,WAAW,CAAA,EAAG,OAAO,IAAA;AACzC,IAAA,OAAO,CAAC,OAAO,GAAA,EAAI,CAAE,UAAU,EAAE,IAAA,EAAM,IAAI,CAAA;AAAA,EAC7C,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA;AAEX,EAAA,MAAM,UAAA,GAAmBA,2BAAQ,MAAM;AACrC,IAAA,IAAI,CAAC,QAAQ,OAAO,KAAA;AACpB,IAAA,IAAI;AACF,MAAA,OAAO,MAAA,CAAO,GAAA,EAAI,CAAE,OAAA,CAAQ,MAAM,CAAA;AAAA,IACpC,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,EACF,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA;AAEX,EAAA,MAAM,QAAA,GAAW,MAAA,EAAQ,QAAA,CAAS,MAAM,CAAA,IAAK,KAAA;AAE7C,EAAA,MAAM,kBAAA,GAA2BA,kBAAA,CAAA,WAAA;AAAA,IAC/B,CAAC,UAAA,KAAwB;AACvB,MAAA,SAAA,CAAU,UAAU,CAAA;AACpB,MAAA,YAAA,GAAe,UAAU,CAAA;AAAA,IAC3B,CAAA;AAAA,IACA,CAAC,YAAY;AAAA,GACf;AAEA,EAAA,MAAM,IAAA,GAAaA,2BAAQ,MAAM;AAC/B,IAAA,IAAI,CAAC,YAAA,IAAgB,CAAC,MAAA,EAAQ;AAC5B,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,IAAI,mBAAA,EAAqB;AACvB,MAAA,IAAIxD,sBAAgB,MAAA,CAAO,KAAA,CAAM,SAAS,CAAA,IAAK,CAAC,UAAA,EAAY;AAC1D,QAAA,OAAO,KAAA;AAAA,MACT;AAAA,IACF;AAEA,IAAA,OAAO,IAAA;AAAA,EACT,GAAG,CAAC,YAAA,EAAc,mBAAA,EAAqB,MAAA,EAAQ,UAAU,CAAC,CAAA;AAE1D,EAAA,IAAI,CAAC,IAAA,IAAQ,CAAC,MAAA,IAAU,CAAC,OAAO,UAAA,EAAY;AAC1C,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,uBACExD,eAAAA,CAAC,OAAA,EAAA,EAAQ,IAAA,EAAM,MAAA,EAAQ,cAAc,kBAAA,EACnC,QAAA,EAAA;AAAA,oBAAAf,eAAC,cAAA,EAAA,EAAe,OAAA,EAAO,IAAA,EACrB,QAAA,kBAAAA,eAAC,UAAA,EAAA,EAAW,QAAA,EAAU,UAAA,EAAY,mBAAA,EAAmB,WAAW,IAAA,GAAO,KAAA,EAAO,iBAAe,UAAA,EAAa,GAAG,OAAO,CAAA,EACtH,CAAA;AAAA,oBAEAA,eAAC,cAAA,EAAA,EACC,QAAA,kBAAAA,eAAC,QAAA,EAAA,EAAU,GAAG,aAAa,CAAA,EAC7B;AAAA,GAAA,EACF,CAAA;AAEJ;AAEA,UAAA,CAAW,WAAA,GAAc,YAAA;AC9QlB,IAAM,WAAiBgI,kBAAA,CAAA,IAAA,CAAK,CAAC,EAAE,SAAA,EAAW,GAAG,OAAM,KAAqC;AAC7F,EAAA,uBACEjH,eAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,MAAK,MAAA,EAAO,IAAA,EAAK,SAAA,EAAsB,OAAA,EAAQ,aAAY,IAAA,EAAK,cAAA,EAAe,KAAA,EAAM,4BAAA,EAA8B,GAAG,KAAA,EAC/H,QAAA,EAAA;AAAA,oBAAAf,cAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,QAAA,EAAS,SAAA;AAAA,QACT,QAAA,EAAS,SAAA;AAAA,QACT,CAAA,EAAE,gHAAA;AAAA,QACF,IAAA,EAAK;AAAA;AAAA,KACP;AAAA,oBACAA,cAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,QAAA,EAAS,SAAA;AAAA,QACT,QAAA,EAAS,SAAA;AAAA,QACT,CAAA,EAAE,yHAAA;AAAA,QACF,IAAA,EAAK;AAAA;AAAA,KACP;AAAA,oBACAA,cAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,QAAA,EAAS,SAAA;AAAA,QACT,QAAA,EAAS,SAAA;AAAA,QACT,CAAA,EAAE,yHAAA;AAAA,QACF,IAAA,EAAK;AAAA;AAAA,KACP;AAAA,oBACAA,cAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,QAAA,EAAS,SAAA;AAAA,QACT,QAAA,EAAS,SAAA;AAAA,QACT,CAAA,EAAE,0HAAA;AAAA,QACF,IAAA,EAAK;AAAA;AAAA,KACP;AAAA,oBACAA,cAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,QAAA,EAAS,SAAA;AAAA,QACT,QAAA,EAAS,SAAA;AAAA,QACT,CAAA,EAAE,mIAAA;AAAA,QACF,IAAA,EAAK;AAAA;AAAA,KACP;AAAA,oBACAA,cAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,QAAA,EAAS,SAAA;AAAA,QACT,QAAA,EAAS,SAAA;AAAA,QACT,CAAA,EAAE,mIAAA;AAAA,QACF,IAAA,EAAK;AAAA;AAAA;AACP,GAAA,EACF,CAAA;AAEJ,CAAC,CAAA;AAED,QAAA,CAAS,WAAA,GAAc,UAAA;AC3ChB,IAAM,kBAAwBiI,kBAAA,CAAA,IAAA,CAAK,CAAC,EAAE,SAAA,EAAW,GAAG,OAAM,KAAqC;AACpG,EAAA,uBACElH,eAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,MAAK,MAAA,EAAO,IAAA,EAAK,SAAA,EAAsB,OAAA,EAAQ,aAAY,IAAA,EAAK,cAAA,EAAe,KAAA,EAAM,4BAAA,EAA8B,GAAG,KAAA,EAC/H,QAAA,EAAA;AAAA,oBAAAf,cAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,QAAA,EAAS,SAAA;AAAA,QACT,QAAA,EAAS,SAAA;AAAA,QACT,CAAA,EAAE,kHAAA;AAAA,QACF,IAAA,EAAK;AAAA;AAAA,KACP;AAAA,oBACAA,cAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,QAAA,EAAS,SAAA;AAAA,QACT,QAAA,EAAS,SAAA;AAAA,QACT,CAAA,EAAE,2HAAA;AAAA,QACF,IAAA,EAAK;AAAA;AAAA,KACP;AAAA,oBACAA,cAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,QAAA,EAAS,SAAA;AAAA,QACT,QAAA,EAAS,SAAA;AAAA,QACT,CAAA,EAAE,2HAAA;AAAA,QACF,IAAA,EAAK;AAAA;AAAA,KACP;AAAA,oBACAA,cAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,QAAA,EAAS,SAAA;AAAA,QACT,QAAA,EAAS,SAAA;AAAA,QACT,CAAA,EAAE,0IAAA;AAAA,QACF,IAAA,EAAK;AAAA;AAAA,KACP;AAAA,oBACAA,cAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,QAAA,EAAS,SAAA;AAAA,QACT,QAAA,EAAS,SAAA;AAAA,QACT,CAAA,EAAE,iHAAA;AAAA,QACF,IAAA,EAAK;AAAA;AAAA,KACP;AAAA,oBACAA,cAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,QAAA,EAAS,SAAA;AAAA,QACT,QAAA,EAAS,SAAA;AAAA,QACT,CAAA,EAAE,+xBAAA;AAAA,QACF,IAAA,EAAK;AAAA;AAAA;AACP,GAAA,EACF,CAAA;AAEJ,CAAC,CAAA;AAED,eAAA,CAAgB,WAAA,GAAc,iBAAA;AC3CvB,IAAM,eAAqBkI,kBAAA,CAAA,IAAA,CAAK,CAAC,EAAE,SAAA,EAAW,GAAG,OAAM,KAAqC;AACjG,EAAA,uBACEnH,eAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,MAAK,MAAA,EAAO,IAAA,EAAK,SAAA,EAAsB,OAAA,EAAQ,aAAY,IAAA,EAAK,cAAA,EAAe,KAAA,EAAM,4BAAA,EAA8B,GAAG,KAAA,EAC/H,QAAA,EAAA;AAAA,oBAAAf,cAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,QAAA,EAAS,SAAA;AAAA,QACT,QAAA,EAAS,SAAA;AAAA,QACT,CAAA,EAAE,qIAAA;AAAA,QACF,IAAA,EAAK;AAAA;AAAA,KACP;AAAA,oBACAA,cAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,QAAA,EAAS,SAAA;AAAA,QACT,QAAA,EAAS,SAAA;AAAA,QACT,CAAA,EAAE,6TAAA;AAAA,QACF,IAAA,EAAK;AAAA;AAAA,KACP;AAAA,oBACAA,cAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,QAAA,EAAS,SAAA;AAAA,QACT,QAAA,EAAS,SAAA;AAAA,QACT,CAAA,EAAE,sHAAA;AAAA,QACF,IAAA,EAAK;AAAA;AAAA,KACP;AAAA,oBACAA,cAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,QAAA,EAAS,SAAA;AAAA,QACT,QAAA,EAAS,SAAA;AAAA,QACT,CAAA,EAAE,+HAAA;AAAA,QACF,IAAA,EAAK;AAAA;AAAA,KACP;AAAA,oBACAA,cAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,QAAA,EAAS,SAAA;AAAA,QACT,QAAA,EAAS,SAAA;AAAA,QACT,CAAA,EAAE,+HAAA;AAAA,QACF,IAAA,EAAK;AAAA;AAAA;AACP,GAAA,EACF,CAAA;AAEJ,CAAC,CAAA;AAED,YAAA,CAAa,WAAA,GAAc,cAAA;ACOpB,IAAM,WAAA,GAA4B;AAAA,EACvC;AAAA,IACE,KAAA,EAAO,0BAAA;AAAA,IACP,IAAA,EAAM,YAAA;AAAA,IACN,IAAA,EAAM;AAAA,GACR;AAAA,EACA;AAAA,IACE,KAAA,EAAO,0BAAA;AAAA,IACP,IAAA,EAAM,aAAA;AAAA,IACN,IAAA,EAAM;AAAA,GACR;AAAA,EACA;AAAA,IACE,KAAA,EAAO,0BAAA;AAAA,IACP,IAAA,EAAM,UAAA;AAAA,IACN,IAAA,EAAM;AAAA;AAEV,CAAA;AAEO,IAAM,gBAAA,GAA6C;AAAA,EACxD,UAAA,EAAY,cAAA;AAAA,EACZ,WAAA,EAAa,cAAA;AAAA,EACb,QAAA,EAAU;AACZ,CAAA;AAEO,SAAS,aAAA,CAAc,QAAuB,IAAA,EAAyB;AAC5E,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,QAAQ,IAAA;AAAM,IACZ,KAAK,YAAA;AACH,MAAA,OAAO,MAAA,CAAO,GAAA,EAAI,CAAE,gBAAA,EAAiB;AAAA,IACvC,KAAK,aAAA;AACH,MAAA,OAAO,MAAA,CAAO,GAAA,EAAI,CAAE,iBAAA,EAAkB;AAAA,IACxC,KAAK,UAAA;AACH,MAAA,OAAO,MAAA,CAAO,GAAA,EAAI,CAAE,UAAA,CAAW,YAAY,UAAU,CAAA;AAAA,IACvD;AACE,MAAA,OAAO,KAAA;AAAA;AAEb;AAEO,SAAS,YAAA,CAAa,QAAuB,IAAA,EAAyB;AAC3E,EAAA,IAAI,CAAC,QAAQ,OAAO,KAAA;AAEpB,EAAA,QAAQ,IAAA;AAAM,IACZ,KAAK,YAAA;AACH,MAAA,OAAO,MAAA,CAAO,SAAS,YAAY,CAAA;AAAA,IACrC,KAAK,aAAA;AACH,MAAA,OAAO,MAAA,CAAO,SAAS,aAAa,CAAA;AAAA,IACtC,KAAK,UAAA;AACH,MAAA,OAAO,MAAA,CAAO,SAAS,UAAU,CAAA;AAAA,IACnC;AACE,MAAA,OAAO,KAAA;AAAA;AAEb;AAEO,SAAS,UAAA,CAAW,QAAuB,IAAA,EAAsB;AACtE,EAAA,IAAI,CAAC,MAAA,EAAQ;AAEb,EAAA,QAAQ,IAAA;AAAM,IACZ,KAAK,YAAA;AACH,MAAA,MAAA,CAAO,OAAM,CAAE,KAAA,EAAM,CAAE,gBAAA,GAAmB,GAAA,EAAI;AAC9C,MAAA;AAAA,IACF,KAAK,aAAA;AACH,MAAA,MAAA,CAAO,OAAM,CAAE,KAAA,EAAM,CAAE,iBAAA,GAAoB,GAAA,EAAI;AAC/C,MAAA;AAAA,IACF,KAAK,UAAA;AACH,MAAA,MAAA,CAAO,KAAA,GAAQ,KAAA,EAAM,CAAE,WAAW,UAAA,EAAY,UAAU,EAAE,GAAA,EAAI;AAC9D,MAAA;AAAA;AAEN;AAEO,SAAS,cAAc,IAAA,EAAwC;AACpE,EAAA,OAAO,YAAY,IAAA,CAAK,CAAC,MAAA,KAAW,MAAA,CAAO,SAAS,IAAI,CAAA;AAC1D;AAEO,SAAS,qBAAqB,MAAA,EAKzB;AACV,EAAA,MAAM,EAAE,MAAA,EAAQ,IAAA,EAAM,mBAAA,EAAqB,cAAa,GAAI,MAAA;AAE5D,EAAA,IAAI,CAAC,YAAA,IAAgB,CAAC,MAAA,EAAQ;AAC5B,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,IAAI,mBAAA,EAAqB;AACvB,IAAA,IAAIuE,qBAAAA,CAAgB,OAAO,KAAA,CAAM,SAAS,KAAK,CAAC,aAAA,CAAc,MAAA,EAAQ,IAAI,CAAA,EAAG;AAC3E,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,EACF;AAEA,EAAA,OAAO,IAAA;AACT;AAEO,SAAS,YAAA,CAAa,QAAuB,IAAA,EAAgB;AAClE,EAAA,MAAM,YAAA,GAAe,cAAA,CAAe,IAAA,EAAM,MAAM,CAAA;AAChD,EAAA,MAAM,UAAA,GAAa,cAAc,IAAI,CAAA;AACrC,EAAA,MAAM,QAAA,GAAW,YAAA,CAAa,MAAA,EAAQ,IAAI,CAAA;AAC1C,EAAA,MAAM,WAAA,GAAc,iBAAiB,IAAI,CAAA;AAEzC,EAAA,OAAO;AAAA,IACL,YAAA;AAAA,IACA,UAAA;AAAA,IACA,QAAA;AAAA,IACA;AAAA,GACF;AACF;AAEO,IAAM,UAAA,GAAmB4D,kBAAA,CAAA,UAAA;AAAA,EAC9B,CAAC,EAAE,MAAA,EAAQ,cAAA,EAAgB,MAAM,mBAAA,GAAsB,KAAA,EAAO,SAAA,GAAY,EAAA,EAAI,SAAS,IAAA,EAAM,QAAA,EAAU,GAAG,WAAA,IAAe,GAAA,KAAQ;AAC/H,IAAA,MAAM,MAAA,GAAS,gBAAgB,cAAc,CAAA;AAC7C,IAAA,MAAM,EAAE,cAAc,UAAA,EAAY,QAAA,EAAU,aAAY,GAAI,YAAA,CAAa,QAAQ,IAAI,CAAA;AAErF,IAAA,MAAM,IAAA,GAAO,YAAY,IAAA,IAAQ,QAAA;AAEjC,IAAA,MAAM,WAAA,GAAoBA,kBAAA,CAAA,WAAA;AAAA,MACxB,CAAC,CAAA,KAA2C;AAC1C,QAAA,OAAA,GAAU,CAAC,CAAA;AAEX,QAAA,IAAI,CAAC,CAAA,CAAE,gBAAA,IAAoB,MAAA,EAAQ;AACjC,UAAA,UAAA,CAAW,QAAQ,IAAI,CAAA;AAAA,QACzB;AAAA,MACF,CAAA;AAAA,MACA,CAAC,OAAA,EAAS,MAAA,EAAQ,IAAI;AAAA,KACxB;AAEA,IAAA,MAAM,IAAA,GAAaA,2BAAQ,MAAM;AAC/B,MAAA,OAAO,oBAAA,CAAqB;AAAA,QAC1B,MAAA;AAAA,QACA,IAAA;AAAA,QACA,mBAAA;AAAA,QACA;AAAA,OACD,CAAA;AAAA,IACH,GAAG,CAAC,MAAA,EAAQ,IAAA,EAAM,mBAAA,EAAqB,YAAY,CAAC,CAAA;AAEpD,IAAA,IAAI,CAAC,IAAA,IAAQ,CAAC,MAAA,IAAU,CAAC,OAAO,UAAA,EAAY;AAC1C,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,uBACEnI,cAAAA;AAAA,MAAC6C,OAAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,QAAA;AAAA,QACL,SAAA,EAAW,UAAU,IAAA,EAAK;AAAA,QAC1B,YAAA,EAAW,OAAA;AAAA,QACX,mBAAA,EAAmB,WAAW,IAAA,GAAO,KAAA;AAAA,QACrC,IAAA,EAAK,QAAA;AAAA,QACL,QAAA,EAAU,EAAA;AAAA,QACV,YAAA,EAAY,YAAY,KAAA,IAAS,IAAA;AAAA,QACjC,cAAA,EAAc,QAAA;AAAA,QACd,OAAA,EAAS,YAAY,KAAA,IAAS,IAAA;AAAA,QAC9B,YAAA,EAAc,WAAA;AAAA,QACd,OAAA,EAAS,WAAA;AAAA,QACR,GAAG,WAAA;AAAA,QACJ,GAAA;AAAA,QAEC,QAAA,EAAA,QAAA,oBACC9B,eAAAA,CAAA+C,mBAAAA,EAAA,EACE,QAAA,EAAA;AAAA,0BAAA9D,cAAAA,CAAC,IAAA,EAAA,EAAK,SAAA,EAAU,oBAAA,EAAqB,CAAA;AAAA,UACpC,wBAAQA,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,sBAAsB,QAAA,EAAA,IAAA,EAAK;AAAA,SAAA,EACtD;AAAA;AAAA,KAEJ;AAAA,EAEJ;AACF,CAAA;AAEA,UAAA,CAAW,WAAA,GAAc,YAAA;ACrKlB,SAAS,gBAAA,CAAiB,QAAuB,SAAA,EAAgC;AACtF,EAAA,IAAI,CAAC,QAAQ,OAAO,KAAA;AACpB,EAAA,OAAO,UAAU,IAAA,CAAK,CAAC,SAAS,aAAA,CAAc,MAAA,EAAQ,IAAI,CAAC,CAAA;AAC7D;AAEO,SAAS,eAAA,CAAgB,QAAuB,SAAA,EAAgC;AACrF,EAAA,IAAI,CAAC,QAAQ,OAAO,KAAA;AACpB,EAAA,OAAO,UAAU,IAAA,CAAK,CAAC,SAAS,YAAA,CAAa,MAAA,EAAQ,IAAI,CAAC,CAAA;AAC5D;AAEO,SAAS,uBAAuB,cAAA,EAAgD;AACrF,EAAA,OAAO,WAAA,CAAY,MAAA,CAAO,CAAC,MAAA,KAAW,CAAC,MAAA,CAAO,IAAA,IAAQ,cAAA,CAAe,QAAA,CAAS,MAAA,CAAO,IAAI,CAAC,CAAA;AAC5F;AAEO,SAAS,uBAAuB,MAAA,EAM3B;AACV,EAAA,MAAM,EAAE,MAAA,EAAQ,mBAAA,EAAqB,YAAA,EAAc,cAAa,GAAI,MAAA;AAEpE,EAAA,IAAI,CAAC,YAAA,IAAgB,CAAC,MAAA,EAAQ;AAC5B,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,IAAI,mBAAA,EAAqB;AACvB,IAAA,IAAIuE,sBAAgB,MAAA,CAAO,KAAA,CAAM,SAAS,CAAA,IAAK,CAAC,YAAA,EAAc;AAC5D,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,EACF;AAEA,EAAA,OAAO,IAAA;AACT;AAEO,SAAS,oBAAA,CAAqB,QAAuB,cAAA,EAA4B;AACtF,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAU6D,4BAAS,KAAK,CAAA;AAEhD,EAAA,MAAM,YAAA,GAAe,eAAe,IAAA,CAAK,CAAC,SAAS,cAAA,CAAe,IAAA,EAAM,MAAM,CAAC,CAAA;AAE/E,EAAA,MAAM,aAAA,GAAsBA,2BAAQ,MAAM,sBAAA,CAAuB,cAAc,CAAA,EAAG,CAAC,cAAc,CAAC,CAAA;AAElG,EAAA,MAAM,YAAA,GAAe,gBAAA,CAAiB,MAAA,EAAQ,cAAc,CAAA;AAC5D,EAAA,MAAM,WAAA,GAAc,eAAA,CAAgB,MAAA,EAAQ,cAAc,CAAA;AAE1D,EAAA,MAAM,gBAAA,GAAyBA,kBAAA,CAAA,WAAA,CAAY,CAAC,IAAA,EAAe,QAAA,KAAyC;AAClG,IAAA,SAAA,CAAU,IAAI,CAAA;AACd,IAAA,QAAA,GAAW,IAAI,CAAA;AAAA,EACjB,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,OAAO;AAAA,IACL,MAAA;AAAA,IACA,SAAA;AAAA,IACA,YAAA;AAAA,IACA,aAAA;AAAA,IACA,YAAA;AAAA,IACA,WAAA;AAAA,IACA;AAAA,GACF;AACF;AAEO,SAAS,iBAAA,CAAkB,QAAuB,aAAA,EAAmC;AAC1F,EAAA,OAAaA,+BAAY,MAAM;AAC7B,IAAA,MAAM,YAAA,GAAe,cAAc,IAAA,CAAK,CAAC,WAAW,YAAA,CAAa,MAAA,EAAQ,MAAA,CAAO,IAAI,CAAC,CAAA;AAErF,IAAA,OAAO,YAAA,mBAAepI,cAAAA,CAAC,YAAA,CAAa,IAAA,EAAb,EAAkB,SAAA,EAAU,oBAAA,EAAqB,CAAA,mBAAKA,cAAAA,CAAC,QAAA,EAAA,EAAS,WAAU,oBAAA,EAAqB,CAAA;AAAA,EACxH,CAAA,EAAG,CAAC,MAAA,EAAQ,aAAa,CAAC,CAAA;AAC5B;AAEO,SAAS,gBAAA,CAAiB;AAAA,EAC/B,MAAA,EAAQ,cAAA;AAAA,EACR,KAAA,GAAQ,CAAC,YAAA,EAAc,aAAA,EAAe,UAAU,CAAA;AAAA,EAChD,mBAAA,GAAsB,KAAA;AAAA,EACtB,YAAA;AAAA,EACA,GAAG;AACL,CAAA,EAA0B;AACxB,EAAA,MAAM,MAAA,GAAS,gBAAgB,cAAc,CAAA;AAE7C,EAAA,MAAM,EAAE,MAAA,EAAQ,YAAA,EAAc,aAAA,EAAe,YAAA,EAAc,aAAa,gBAAA,EAAiB,GAAI,oBAAA,CAAqB,MAAA,EAAQ,KAAK,CAAA;AAE/H,EAAA,MAAM,aAAA,GAAgB,iBAAA,CAAkB,MAAA,EAAQ,aAAa,CAAA;AAE7D,EAAA,MAAM,IAAA,GAAaoI,2BAAQ,MAAM;AAC/B,IAAA,OAAO,sBAAA,CAAuB;AAAA,MAC5B,MAAA;AAAA,MAEA,mBAAA;AAAA,MACA,YAAA;AAAA,MACA;AAAA,KACD,CAAA;AAAA,EACH,GAAG,CAAC,MAAA,EAAQ,OAAO,mBAAA,EAAqB,YAAA,EAAc,YAAY,CAAC,CAAA;AAEnE,EAAA,MAAM,kBAAA,GAA2BA,kBAAA,CAAA,WAAA,CAAY,CAAC,IAAA,KAAkB,gBAAA,CAAiB,IAAA,EAAM,YAAY,CAAA,EAAG,CAAC,gBAAA,EAAkB,YAAY,CAAC,CAAA;AAEtI,EAAA,IAAI,CAAC,IAAA,IAAQ,CAAC,MAAA,IAAU,CAAC,OAAO,UAAA,EAAY;AAC1C,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,uBACErH,eAAAA,CAAC,YAAA,EAAA,EAAa,IAAA,EAAM,MAAA,EAAQ,cAAc,kBAAA,EACxC,QAAA,EAAA;AAAA,oBAAAf,cAAAA,CAAC,mBAAA,EAAA,EAAoB,OAAA,EAAO,IAAA,EAC1B,QAAA,kBAAAe,eAAAA;AAAA,MAAC8B,OAAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,QAAA;AAAA,QACL,YAAA,EAAW,OAAA;AAAA,QACX,mBAAA,EAAmB,cAAc,IAAA,GAAO,KAAA;AAAA,QACxC,IAAA,EAAK,QAAA;AAAA,QACL,QAAA,EAAU,EAAA;AAAA,QACV,YAAA,EAAW,cAAA;AAAA,QACX,OAAA,EAAQ,cAAA;AAAA,QACP,GAAG,KAAA;AAAA,QAEH,QAAA,EAAA;AAAA,UAAA,aAAA,EAAc;AAAA,0BACf7C,cAAAA,CAAC,eAAA,EAAA,EAAgB,SAAA,EAAU,8BAAA,EAA+B;AAAA;AAAA;AAAA,KAC5D,EACF,CAAA;AAAA,oBAEAA,cAAAA,CAAC,mBAAA,EAAA,EACC,QAAA,kBAAAA,eAAC,iBAAA,EAAA,EACE,QAAA,EAAA,aAAA,CAAc,GAAA,CAAI,CAAC,MAAA,qBAClBA,cAAAA,CAAC,gBAAA,EAAA,EAAmC,SAAO,IAAA,EACzC,QAAA,kBAAAA,cAAAA,CAAC,UAAA,EAAA,EAAW,MAAA,EAAgB,IAAA,EAAM,MAAA,CAAO,IAAA,EAAM,MAAM,MAAA,CAAO,KAAA,EAAO,mBAAA,EAA0C,OAAA,EAAS,IAAI,CAAA,EAAA,EADrG,MAAA,CAAO,IAE9B,CACD,GACH,CAAA,EACF;AAAA,GAAA,EACF,CAAA;AAEJ;AChLO,IAAM,WAAiBqI,kBAAA,CAAA,IAAA,CAAK,CAAC,EAAE,SAAA,EAAW,GAAG,OAAM,KAAqC;AAC7F,EAAA,uBACErI,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,IAAA,EAAK,QAAO,IAAA,EAAK,SAAA,EAAsB,OAAA,EAAQ,WAAA,EAAY,MAAK,cAAA,EAAe,KAAA,EAAM,4BAAA,EAA8B,GAAG,OAC/H,QAAA,kBAAAA,cAAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,QAAA,EAAS,SAAA;AAAA,MACT,QAAA,EAAS,SAAA;AAAA,MACT,CAAA,EAAE,wtBAAA;AAAA,MACF,IAAA,EAAK;AAAA;AAAA,GACP,EACF,CAAA;AAEJ,CAAC,CAAA;AAED,QAAA,CAAS,WAAA,GAAc,UAAA;ACbhB,IAAM,YAAkBsI,kBAAA,CAAA,IAAA,CAAK,CAAC,EAAE,SAAA,EAAW,GAAG,OAAM,KAAqC;AAC9F,EAAA,uBACEvH,eAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,MAAK,MAAA,EAAO,IAAA,EAAK,SAAA,EAAsB,OAAA,EAAQ,aAAY,IAAA,EAAK,cAAA,EAAe,KAAA,EAAM,4BAAA,EAA8B,GAAG,KAAA,EAC/H,QAAA,EAAA;AAAA,oBAAAf,cAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,CAAA,EAAE,+OAAA;AAAA,QACF,IAAA,EAAK;AAAA;AAAA,KACP;AAAA,oBACAA,cAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,CAAA,EAAE,gUAAA;AAAA,QACF,IAAA,EAAK;AAAA;AAAA,KACP;AAAA,oBACAA,cAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,CAAA,EAAE,8TAAA;AAAA,QACF,IAAA,EAAK;AAAA;AAAA;AACP,GAAA,EACF,CAAA;AAEJ,CAAC,CAAA;AAED,SAAA,CAAU,WAAA,GAAc,WAAA;ACnBjB,IAAM,aAAmBuI,kBAAA,CAAA,IAAA,CAAK,CAAC,EAAE,SAAA,EAAW,GAAG,OAAM,KAAqC;AAC/F,EAAA,uBACEvI,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,IAAA,EAAK,QAAO,IAAA,EAAK,SAAA,EAAsB,OAAA,EAAQ,WAAA,EAAY,MAAK,cAAA,EAAe,KAAA,EAAM,4BAAA,EAA8B,GAAG,OAC/H,QAAA,kBAAAA,cAAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,CAAA,EAAE,gXAAA;AAAA,MACF,IAAA,EAAK;AAAA;AAAA,GACP,EACF,CAAA;AAEJ,CAAC,CAAA;AAED,UAAA,CAAW,WAAA,GAAc,YAAA;ACXlB,IAAM,aAAmBwI,kBAAA,CAAA,IAAA,CAAK,CAAC,EAAE,SAAA,EAAW,GAAG,OAAM,KAAqC;AAC/F,EAAA,uBACEzH,eAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,MAAK,MAAA,EAAO,IAAA,EAAK,SAAA,EAAsB,OAAA,EAAQ,aAAY,IAAA,EAAK,cAAA,EAAe,KAAA,EAAM,4BAAA,EAA8B,GAAG,KAAA,EAC/H,QAAA,EAAA;AAAA,oBAAAf,cAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,CAAA,EAAE,wjBAAA;AAAA,QACF,IAAA,EAAK;AAAA;AAAA,KACP;AAAA,oBACAA,cAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,CAAA,EAAE,2bAAA;AAAA,QACF,IAAA,EAAK;AAAA;AAAA;AACP,GAAA,EACF,CAAA;AAEJ,CAAC,CAAA;AAED,UAAA,CAAW,WAAA,GAAc,YAAA;ACflB,IAAM,gBAAsByI,kBAAA,CAAA,IAAA,CAAK,CAAC,EAAE,SAAA,EAAW,GAAG,OAAM,KAAqC;AAClG,EAAA,uBACE1H,eAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,MAAK,MAAA,EAAO,IAAA,EAAK,SAAA,EAAsB,OAAA,EAAQ,aAAY,IAAA,EAAK,cAAA,EAAe,KAAA,EAAM,4BAAA,EAA8B,GAAG,KAAA,EAC/H,QAAA,EAAA;AAAA,oBAAAf,cAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,QAAA,EAAS,SAAA;AAAA,QACT,QAAA,EAAS,SAAA;AAAA,QACT,CAAA,EAAE,mPAAA;AAAA,QACF,IAAA,EAAK;AAAA;AAAA,KACP;AAAA,oBACAA,cAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,QAAA,EAAS,SAAA;AAAA,QACT,QAAA,EAAS,SAAA;AAAA,QACT,CAAA,EAAE,mPAAA;AAAA,QACF,IAAA,EAAK;AAAA;AAAA,KACP;AAAA,oBACAA,cAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,QAAA,EAAS,SAAA;AAAA,QACT,QAAA,EAAS,SAAA;AAAA,QACT,CAAA,EAAE,6/BAAA;AAAA,QACF,IAAA,EAAK;AAAA;AAAA;AACP,GAAA,EACF,CAAA;AAEJ,CAAC,CAAA;AAED,aAAA,CAAc,WAAA,GAAc,eAAA;ACzBrB,IAAM,kBAAwB0I,kBAAA,CAAA,IAAA,CAAK,CAAC,EAAE,SAAA,EAAW,GAAG,OAAM,KAAqC;AACpG,EAAA,uBACE3H,eAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,MAAK,MAAA,EAAO,IAAA,EAAK,SAAA,EAAsB,OAAA,EAAQ,aAAY,IAAA,EAAK,cAAA,EAAe,KAAA,EAAM,4BAAA,EAA8B,GAAG,KAAA,EAC/H,QAAA,EAAA;AAAA,oBAAAf,cAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,QAAA,EAAS,SAAA;AAAA,QACT,QAAA,EAAS,SAAA;AAAA,QACT,CAAA,EAAE,mPAAA;AAAA,QACF,IAAA,EAAK;AAAA;AAAA,KACP;AAAA,oBACAA,cAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,QAAA,EAAS,SAAA;AAAA,QACT,QAAA,EAAS,SAAA;AAAA,QACT,CAAA,EAAE,mPAAA;AAAA,QACF,IAAA,EAAK;AAAA;AAAA,KACP;AAAA,oBACAA,cAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,QAAA,EAAS,SAAA;AAAA,QACT,QAAA,EAAS,SAAA;AAAA,QACT,CAAA,EAAE,+gCAAA;AAAA,QACF,IAAA,EAAK;AAAA;AAAA;AACP,GAAA,EACF,CAAA;AAEJ,CAAC,CAAA;AAED,eAAA,CAAgB,WAAA,GAAc,iBAAA;ACzBvB,IAAM,gBAAsB2I,kBAAA,CAAA,IAAA,CAAK,CAAC,EAAE,SAAA,EAAW,GAAG,OAAM,KAAqC;AAClG,EAAA,uBACE3I,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,IAAA,EAAK,QAAO,IAAA,EAAK,SAAA,EAAsB,OAAA,EAAQ,WAAA,EAAY,MAAK,cAAA,EAAe,KAAA,EAAM,4BAAA,EAA8B,GAAG,OAC/H,QAAA,kBAAAA,cAAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,QAAA,EAAS,SAAA;AAAA,MACT,QAAA,EAAS,SAAA;AAAA,MACT,CAAA,EAAE,qhBAAA;AAAA,MACF,IAAA,EAAK;AAAA;AAAA,GACP,EACF,CAAA;AAEJ,CAAC,CAAA;AAED,aAAA,CAAc,WAAA,GAAc,eAAA;AC4BrB,IAAM,SAAA,GAAY;AAAA,EACvB,IAAA,EAAM,QAAA;AAAA,EACN,MAAA,EAAQ,UAAA;AAAA,EACR,SAAA,EAAW,aAAA;AAAA,EACX,MAAA,EAAQ,UAAA;AAAA,EACR,IAAA,EAAM,SAAA;AAAA,EACN,WAAA,EAAa,eAAA;AAAA,EACb,SAAA,EAAW;AACb,CAAA;AAEO,IAAM,gBAAA,GAAkD;AAAA,EAC7D,IAAA,EAAM,QAAA;AAAA,EACN,MAAA,EAAQ,QAAA;AAAA,EACR,SAAA,EAAW,QAAA;AAAA,EACX,MAAA,EAAQ,cAAA;AAAA,EACR,IAAA,EAAM,QAAA;AAAA,EACN,WAAA,EAAa,QAAA;AAAA,EACb,SAAA,EAAW;AACb,CAAA;AACO,IAAM,gBAAA,GAAkD;AAAA,EAC7D,IAAA,EAAM,cAAA;AAAA,EACN,MAAA,EAAQ,cAAA;AAAA,EACR,SAAA,EAAW,oBAAA;AAAA,EACX,MAAA,EAAQ,oBAAA;AAAA,EACR,IAAA,EAAM,cAAA;AAAA,EACN,WAAA,EAAa,oBAAA;AAAA,EACb,SAAA,EAAW;AACb,CAAA;AAEO,SAAS,aAAA,CAAc,QAAuB,IAAA,EAAqB;AACxE,EAAA,IAAI,CAAC,QAAQ,OAAO,KAAA;AAEpB,EAAA,IAAI;AACF,IAAA,OAAO,MAAA,CAAO,GAAA,EAAI,CAAE,UAAA,CAAW,IAAI,CAAA;AAAA,EACrC,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,KAAA;AAAA,EACT;AACF;AAEO,SAAS,YAAA,CAAa,QAAuB,IAAA,EAAqB;AACvE,EAAA,IAAI,CAAC,QAAQ,OAAO,KAAA;AACpB,EAAA,OAAO,MAAA,CAAO,SAAS,IAAI,CAAA;AAC7B;AAEO,SAAS,UAAA,CAAW,QAAuB,IAAA,EAAkB;AAClE,EAAA,IAAI,CAAC,MAAA,EAAQ;AACb,EAAA,MAAA,CAAO,OAAM,CAAE,KAAA,GAAQ,UAAA,CAAW,IAAI,EAAE,GAAA,EAAI;AAC9C;AAEO,SAAS,oBAAA,CAAqB,MAAA,EAAuB,IAAA,EAAY,YAAA,GAAwB,KAAA,EAAgB;AAC9G,EAAA,IAAI,CAAC,QAAQ,OAAO,IAAA;AACpB,EAAA,IAAI,cAAc,OAAO,IAAA;AACzB,EAAA,IAAI,MAAA,CAAO,QAAA,CAAS,WAAW,CAAA,EAAG,OAAO,IAAA;AACzC,EAAA,IAAI,CAAC,aAAA,CAAc,MAAA,EAAQ,IAAI,GAAG,OAAO,IAAA;AACzC,EAAA,OAAO,KAAA;AACT;AAEO,SAAS,qBAAqB,MAAA,EAA6G;AAChJ,EAAA,MAAM,EAAE,MAAA,EAAQ,IAAA,EAAM,mBAAA,EAAqB,cAAa,GAAI,MAAA;AAE5D,EAAA,IAAI,CAAC,YAAA,IAAgB,CAAC,MAAA,EAAQ;AAC5B,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,IAAI,mBAAA,EAAqB;AACvB,IAAA,IAAIuE,qBAAAA,CAAgB,OAAO,KAAA,CAAM,SAAS,KAAK,CAAC,aAAA,CAAc,MAAA,EAAQ,IAAI,CAAA,EAAG;AAC3E,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,EACF;AAEA,EAAA,OAAO,IAAA;AACT;AAEO,SAAS,qBAAqB,IAAA,EAAoB;AACvD,EAAA,OAAO,gBAAA,CAAiB,IAAI,CAAA,IAAK,IAAA,CAAK,MAAA,CAAO,CAAC,CAAA,CAAE,WAAA,EAAY,GAAI,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA;AAC9E;AAEO,SAAS,YAAA,CAAa,MAAA,EAAuB,IAAA,EAAY,QAAA,GAAoB,KAAA,EAAO;AACzF,EAAA,MAAM,YAAA,GAAe,cAAA,CAAe,IAAA,EAAM,MAAM,CAAA;AAChD,EAAA,MAAM,UAAA,GAAa,oBAAA,CAAqB,MAAA,EAAQ,IAAA,EAAM,QAAQ,CAAA;AAC9D,EAAA,MAAM,QAAA,GAAW,YAAA,CAAa,MAAA,EAAQ,IAAI,CAAA;AAE1C,EAAA,MAAM,IAAA,GAAO,UAAU,IAAI,CAAA;AAC3B,EAAA,MAAM,WAAA,GAAc,iBAAiB,IAAI,CAAA;AACzC,EAAA,MAAM,aAAA,GAAgB,qBAAqB,IAAI,CAAA;AAE/C,EAAA,OAAO;AAAA,IACL,YAAA;AAAA,IACA,UAAA;AAAA,IACA,QAAA;AAAA,IACA,IAAA;AAAA,IACA,WAAA;AAAA,IACA;AAAA,GACF;AACF;AAEO,IAAM,UAAA,GAAmBqE,kBAAA,CAAA,UAAA;AAAA,EAC9B,CAAC,EAAE,MAAA,EAAQ,cAAA,EAAgB,IAAA,EAAM,MAAM,mBAAA,GAAsB,KAAA,EAAO,SAAA,GAAY,EAAA,EAAI,UAAU,OAAA,EAAS,QAAA,EAAU,GAAG,WAAA,IAAe,GAAA,KAAQ;AACzI,IAAA,MAAM,MAAA,GAAS,gBAAgB,cAAc,CAAA;AAE7C,IAAA,MAAM,EAAE,YAAA,EAAc,UAAA,EAAY,QAAA,EAAU,IAAA,EAAM,WAAA,EAAa,aAAA,EAAc,GAAI,YAAA,CAAa,MAAA,EAAQ,IAAA,EAAM,QAAQ,CAAA;AAEpH,IAAA,MAAM,WAAA,GAAoBA,kBAAA,CAAA,WAAA;AAAA,MACxB,CAAC,CAAA,KAA2C;AAC1C,QAAA,OAAA,GAAU,CAAC,CAAA;AAEX,QAAA,IAAI,CAAC,CAAA,CAAE,gBAAA,IAAoB,CAAC,cAAc,MAAA,EAAQ;AAChD,UAAA,UAAA,CAAW,QAAQ,IAAI,CAAA;AAAA,QACzB;AAAA,MACF,CAAA;AAAA,MACA,CAAC,OAAA,EAAS,UAAA,EAAY,MAAA,EAAQ,IAAI;AAAA,KACpC;AAEA,IAAA,MAAM,IAAA,GAAaA,2BAAQ,MAAM;AAC/B,MAAA,OAAO,oBAAA,CAAqB;AAAA,QAC1B,MAAA;AAAA,QACA,IAAA;AAAA,QACA,mBAAA;AAAA,QACA;AAAA,OACD,CAAA;AAAA,IACH,GAAG,CAAC,MAAA,EAAQ,IAAA,EAAM,mBAAA,EAAqB,YAAY,CAAC,CAAA;AAEpD,IAAA,IAAI,CAAC,IAAA,IAAQ,CAAC,MAAA,IAAU,CAAC,OAAO,UAAA,EAAY;AAC1C,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,uBACE5I,cAAAA;AAAA,MAAC6C,OAAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,QAAA;AAAA,QACL,SAAA,EAAW,UAAU,IAAA,EAAK;AAAA,QAC1B,QAAA,EAAU,UAAA;AAAA,QACV,YAAA,EAAW,OAAA;AAAA,QACX,mBAAA,EAAmB,WAAW,IAAA,GAAO,KAAA;AAAA,QACrC,eAAA,EAAe,UAAA;AAAA,QACf,IAAA,EAAK,QAAA;AAAA,QACL,QAAA,EAAU,EAAA;AAAA,QACV,YAAA,EAAY,IAAA;AAAA,QACZ,cAAA,EAAc,QAAA;AAAA,QACd,OAAA,EAAS,aAAA;AAAA,QACT,YAAA,EAAc,WAAA;AAAA,QACd,OAAA,EAAS,WAAA;AAAA,QACR,GAAG,WAAA;AAAA,QACJ,GAAA;AAAA,QAEC,QAAA,EAAA,QAAA,oBACC9B,eAAAA,CAAA+C,mBAAAA,EAAA,EACE,QAAA,EAAA;AAAA,0BAAA9D,cAAAA,CAAC,IAAA,EAAA,EAAK,SAAA,EAAU,oBAAA,EAAqB,CAAA;AAAA,UACpC,wBAAQA,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,sBAAsB,QAAA,EAAA,IAAA,EAAK;AAAA,SAAA,EACtD;AAAA;AAAA,KAEJ;AAAA,EAEJ;AACF,CAAA;AAEA,UAAA,CAAW,WAAA,GAAc,YAAA;ACpMlB,IAAM,iBAAuB6I,kBAAA,CAAA,IAAA,CAAK,CAAC,EAAE,SAAA,EAAW,GAAG,OAAM,KAAqC;AACnG,EAAA,uBACE9H,eAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,MAAK,MAAA,EAAO,IAAA,EAAK,SAAA,EAAsB,OAAA,EAAQ,aAAY,IAAA,EAAK,cAAA,EAAe,KAAA,EAAM,4BAAA,EAA8B,GAAG,KAAA,EAC/H,QAAA,EAAA;AAAA,oBAAAf,cAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,QAAA,EAAS,SAAA;AAAA,QACT,QAAA,EAAS,SAAA;AAAA,QACT,CAAA,EAAE,gHAAA;AAAA,QACF,IAAA,EAAK;AAAA;AAAA,KACP;AAAA,oBACAA,cAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,QAAA,EAAS,SAAA;AAAA,QACT,QAAA,EAAS,SAAA;AAAA,QACT,CAAA,EAAE,oHAAA;AAAA,QACF,IAAA,EAAK;AAAA;AAAA,KACP;AAAA,oBACAA,cAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,QAAA,EAAS,SAAA;AAAA,QACT,QAAA,EAAS,SAAA;AAAA,QACT,CAAA,EAAE,yHAAA;AAAA,QACF,IAAA,EAAK;AAAA;AAAA,KACP;AAAA,oBACAA,cAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,QAAA,EAAS,SAAA;AAAA,QACT,QAAA,EAAS,SAAA;AAAA,QACT,CAAA,EAAE,yHAAA;AAAA,QACF,IAAA,EAAK;AAAA;AAAA;AACP,GAAA,EACF,CAAA;AAEJ,CAAC,CAAA;AAED,cAAA,CAAe,WAAA,GAAc,gBAAA;AC/BtB,IAAM,gBAAsB8I,kBAAA,CAAA,IAAA,CAAK,CAAC,EAAE,SAAA,EAAW,GAAG,OAAM,KAAqC;AAClG,EAAA,uBACE/H,eAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,MAAK,MAAA,EAAO,IAAA,EAAK,SAAA,EAAsB,OAAA,EAAQ,aAAY,IAAA,EAAK,cAAA,EAAe,KAAA,EAAM,4BAAA,EAA8B,GAAG,KAAA,EAC/H,QAAA,EAAA;AAAA,oBAAAf,cAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,QAAA,EAAS,SAAA;AAAA,QACT,QAAA,EAAS,SAAA;AAAA,QACT,CAAA,EAAE,6TAAA;AAAA,QACF,IAAA,EAAK;AAAA;AAAA,KACP;AAAA,oBACAA,cAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,QAAA,EAAS,SAAA;AAAA,QACT,QAAA,EAAS,SAAA;AAAA,QACT,CAAA,EAAE,6TAAA;AAAA,QACF,IAAA,EAAK;AAAA;AAAA,KACP;AAAA,oBACAA,cAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,QAAA,EAAS,SAAA;AAAA,QACT,QAAA,EAAS,SAAA;AAAA,QACT,CAAA,EAAE,sSAAA;AAAA,QACF,IAAA,EAAK;AAAA;AAAA;AACP,GAAA,EACF,CAAA;AAEJ,CAAC,CAAA;AAED,aAAA,CAAc,WAAA,GAAc,eAAA;ACYrB,IAAM,SAAA,GAAY;AAAA,EACvB,SAAA,EAAW,aAAA;AAAA,EACX,UAAA,EAAY;AACd,CAAA;AAEO,IAAM,gBAAA,GAAsD;AAAA,EACjE,SAAA,EAAW,YAAA;AAAA,EACX,UAAA,EAAY;AACd,CAAA;AAEO,IAAM,UAAA,GAAuC;AAAA,EAClD,SAAA,EAAW,oBAAA;AAAA,EACX,UAAA,EAAY;AACd,CAAA;AAEO,SAAS,aAAA,CAAc,QAAuB,IAAA,EAAyB;AAC5E,EAAA,IAAI,CAAC,QAAQ,OAAO,KAAA;AAEpB,EAAA,IAAI;AACF,IAAA,OAAO,IAAA,KAAS,WAAA,GAAc,MAAA,CAAO,GAAA,EAAI,CAAE,UAAA,CAAW,WAAA,EAAa,WAAW,CAAA,GAAI,MAAA,CAAO,GAAA,EAAI,CAAE,WAAW,YAAY,CAAA;AAAA,EACxH,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,KAAA;AAAA,EACT;AACF;AAEO,SAAS,YAAA,CAAa,QAAuB,IAAA,EAAyB;AAC3E,EAAA,IAAI,CAAC,QAAQ,OAAO,KAAA;AACpB,EAAA,OAAO,MAAA,CAAO,SAAS,IAAI,CAAA;AAC7B;AAEO,SAAS,UAAA,CAAW,QAAuB,IAAA,EAAyB;AACzE,EAAA,IAAI,CAAC,QAAQ,OAAO,KAAA;AAEpB,EAAA,IAAI,SAAS,WAAA,EAAa;AACxB,IAAA,OAAO,MAAA,CAAO,OAAM,CAAE,KAAA,GAAQ,UAAA,CAAW,WAAA,EAAa,WAAW,CAAA,CAAE,GAAA,EAAI;AAAA,EACzE,CAAA,MAAO;AACL,IAAA,OAAO,MAAA,CAAO,OAAM,CAAE,KAAA,GAAQ,UAAA,CAAW,YAAY,EAAE,GAAA,EAAI;AAAA,EAC7D;AACF;AAEO,SAAS,oBAAA,CAAqB,MAAA,EAAuB,SAAA,EAAoB,YAAA,GAAwB,KAAA,EAAgB;AACtH,EAAA,IAAI,CAAC,QAAQ,OAAO,IAAA;AACpB,EAAA,IAAI,cAAc,OAAO,IAAA;AACzB,EAAA,IAAI,CAAC,WAAW,OAAO,IAAA;AACvB,EAAA,OAAO,KAAA;AACT;AAEO,SAAS,qBAAqB,MAAA,EAMzB;AACV,EAAA,MAAM,EAAE,MAAA,EAAQ,mBAAA,EAAqB,YAAA,EAAc,WAAU,GAAI,MAAA;AAEjE,EAAA,IAAI,CAAC,YAAA,IAAgB,CAAC,MAAA,EAAQ;AAC5B,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,IAAI,mBAAA,EAAqB;AACvB,IAAA,IAAIuE,sBAAgB,MAAA,CAAO,KAAA,CAAM,SAAS,CAAA,IAAK,CAAC,SAAA,EAAW;AACzD,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,EACF;AAEA,EAAA,OAAO,OAAA,CAAQ,QAAQ,UAAU,CAAA;AACnC;AAMO,SAAS,aAAa,MAAA,EAAuB,IAAA,EAAgB,QAAA,GAAoB,KAAA,EAAO,sBAA+B,KAAA,EAAO;AACnI,EAAA,MAAM,YAAA,GAAe,cAAA,CAAe,IAAA,EAAM,MAAM,CAAA;AAEhD,EAAA,MAAM,SAAA,GAAY,aAAA,CAAc,MAAA,EAAQ,IAAI,CAAA;AAC5C,EAAA,MAAM,UAAA,GAAa,oBAAA,CAAqB,MAAA,EAAQ,SAAA,EAAW,QAAQ,CAAA;AACnE,EAAA,MAAM,QAAA,GAAW,YAAA,CAAa,MAAA,EAAQ,IAAI,CAAA;AAE1C,EAAA,MAAM,UAAA,GAAmBwE,kBAAA,CAAA,OAAA;AAAA,IACvB,MACE,oBAAA,CAAqB;AAAA,MACnB,MAAA;AAAA,MAEA,mBAAA;AAAA,MACA,YAAA;AAAA,MACA;AAAA,KACD,CAAA;AAAA,IACH,CAAC,MAAA,EAAQ,IAAA,EAAM,mBAAA,EAAqB,cAAc,SAAS;AAAA,GAC7D;AAEA,EAAA,MAAM,YAAA,GAAqBA,+BAAY,MAAM;AAC3C,IAAA,IAAI,CAAC,cAAc,MAAA,EAAQ;AACzB,MAAA,OAAO,UAAA,CAAW,QAAQ,IAAI,CAAA;AAAA,IAChC;AACA,IAAA,OAAO,KAAA;AAAA,EACT,CAAA,EAAG,CAAC,MAAA,EAAQ,IAAA,EAAM,UAAU,CAAC,CAAA;AAE7B,EAAA,MAAM,IAAA,GAAO,UAAU,IAAI,CAAA;AAC3B,EAAA,MAAM,WAAA,GAAc,iBAAiB,IAAI,CAAA;AACzC,EAAA,MAAM,KAAA,GAAQ,WAAW,IAAI,CAAA;AAE7B,EAAA,OAAO;AAAA,IACL,YAAA;AAAA,IACA,SAAA;AAAA,IACA,UAAA;AAAA,IACA,QAAA;AAAA,IACA,UAAA;AAAA,IACA,YAAA;AAAA,IACA,IAAA;AAAA,IACA,WAAA;AAAA,IACA;AAAA,GACF;AACF;AAEO,IAAM,UAAA,GAAmBA,kBAAA,CAAA,UAAA;AAAA,EAC9B,CAAC,EAAE,MAAA,EAAQ,cAAA,EAAgB,IAAA,EAAM,MAAM,mBAAA,GAAsB,KAAA,EAAO,SAAA,GAAY,EAAA,EAAI,UAAU,OAAA,EAAS,QAAA,EAAU,GAAG,WAAA,IAAe,GAAA,KAAQ;AACzI,IAAA,MAAM,MAAA,GAAS,gBAAgB,cAAc,CAAA;AAE7C,IAAA,MAAM,EAAE,UAAA,EAAY,QAAA,EAAU,UAAA,EAAY,YAAA,EAAc,IAAA,EAAM,WAAA,EAAa,KAAA,EAAM,GAAI,YAAA,CAAa,MAAA,EAAQ,IAAA,EAAM,UAAU,mBAAmB,CAAA;AAE7I,IAAA,MAAM,WAAA,GAAoBA,kBAAA,CAAA,WAAA;AAAA,MACxB,CAAC,CAAA,KAA2C;AAC1C,QAAA,OAAA,GAAU,CAAC,CAAA;AAEX,QAAA,IAAI,CAAC,CAAA,CAAE,gBAAA,IAAoB,CAAC,UAAA,EAAY;AACtC,UAAA,YAAA,EAAa;AAAA,QACf;AAAA,MACF,CAAA;AAAA,MACA,CAAC,OAAA,EAAS,UAAA,EAAY,YAAY;AAAA,KACpC;AAEA,IAAA,IAAI,CAAC,UAAA,IAAc,CAAC,MAAA,IAAU,CAAC,OAAO,UAAA,EAAY;AAChD,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,uBACE/I,cAAAA;AAAA,MAAC6C,OAAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,QAAA;AAAA,QACL,SAAA,EAAW,UAAU,IAAA,EAAK;AAAA,QAC1B,QAAA,EAAU,UAAA;AAAA,QACV,YAAA,EAAW,OAAA;AAAA,QACX,mBAAA,EAAmB,WAAW,IAAA,GAAO,KAAA;AAAA,QACrC,eAAA,EAAe,UAAA;AAAA,QACf,IAAA,EAAK,QAAA;AAAA,QACL,QAAA,EAAU,EAAA;AAAA,QACV,YAAA,EAAY,IAAA;AAAA,QACZ,cAAA,EAAc,QAAA;AAAA,QACd,OAAA,EAAS,KAAA;AAAA,QACT,YAAA,EAAc,WAAA;AAAA,QACd,OAAA,EAAS,WAAA;AAAA,QACR,GAAG,WAAA;AAAA,QACJ,GAAA;AAAA,QAEC,QAAA,EAAA,QAAA,oBACC9B,eAAAA,CAAA+C,mBAAAA,EAAA,EACE,QAAA,EAAA;AAAA,0BAAA9D,cAAAA,CAAC,IAAA,EAAA,EAAK,SAAA,EAAU,oBAAA,EAAqB,CAAA;AAAA,UACpC,wBAAQA,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,sBAAsB,QAAA,EAAA,IAAA,EAAK;AAAA,SAAA,EACtD;AAAA;AAAA,KAEJ;AAAA,EAEJ;AACF,CAAA;AAEA,UAAA,CAAW,WAAA,GAAc,YAAA;AC3MlB,IAAM,YAAkBgJ,kBAAA,CAAA,IAAA,CAAK,CAAC,EAAE,SAAA,EAAW,GAAG,OAAM,KAAqC;AAC9F,EAAA,uBACEhJ,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,IAAA,EAAK,QAAO,IAAA,EAAK,SAAA,EAAsB,OAAA,EAAQ,eAAA,EAAgB,MAAK,cAAA,EAAe,KAAA,EAAM,4BAAA,EAA8B,GAAG,OACnI,QAAA,kBAAAA,cAAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MAAK,CAAA,EAAE,sjBAAA;AAAA,MACP,IAAA,EAAK;AAAA;AAAA,GACL,EACH,CAAA;AAEJ,CAAC,CAAA;AAED,SAAA,CAAU,WAAA,GAAc,WAAA;AC2BjB,SAAS,aAAa,MAAA,EAAgC;AAC3D,EAAA,IAAI,CAAC,QAAQ,OAAO,KAAA;AACpB,EAAA,MAAM,SAAA,GAAY,OAAO,KAAA,CAAM,SAAA;AAC/B,EAAA,OAAO,CAAC,CAAC,SAAA,IAAa,CAAC,SAAA,CAAU,KAAA;AACnC;AAKO,SAAS,gBAAgB,MAAA,EAA+B;AAC7D,EAAA,IAAI,CAAC,QAAQ,OAAO,EAAA;AACpB,EAAA,MAAM,EAAE,IAAA,EAAM,EAAA,EAAG,GAAI,OAAO,KAAA,CAAM,SAAA;AAClC,EAAA,OAAO,OAAO,KAAA,CAAM,GAAA,CAAI,WAAA,CAAY,IAAA,EAAM,IAAI,GAAG,CAAA;AACnD;AAKO,SAAS,QAAA,CAAS,MAAA,EAAuB,QAAA,GAAoB,KAAA,EAAO,sBAA+B,KAAA,EAAO;AAC/G,EAAA,MAAM,kBAAA,GAA2BiJ,kBAAA,CAAA,OAAA,CAAQ,MAAM,YAAA,CAAa,MAAM,GAAG,CAAC,MAAA,EAAQ,KAAA,CAAM,SAAS,CAAC,CAAA;AAE9F,EAAA,MAAM,UAAA,GAAmBA,2BAAQ,MAAM,CAAC,sBAAsB,QAAA,EAAU,CAAC,kBAAA,EAAoB,QAAQ,CAAC,CAAA;AACtG,EAAA,MAAM,UAAA,GAAmBA,2BAAQ,MAAM;AACrC,IAAA,IAAI,CAAC,MAAA,EAAQ,UAAA,EAAY,OAAO,KAAA;AAChC,IAAA,IAAI,mBAAA,IAAuB,CAAC,kBAAA,EAAoB,OAAO,KAAA;AACvD,IAAA,OAAO,IAAA;AAAA,EACT,CAAA,EAAG,CAAC,MAAA,EAAQ,mBAAA,EAAqB,kBAAkB,CAAC,CAAA;AAEpD,EAAA,MAAM,OAAA,GAAgBA,+BAAY,MAAM,eAAA,CAAgB,MAAM,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA;AAEzE,EAAA,OAAO;AAAA,IACL,UAAA;AAAA,IACA,UAAA;AAAA,IACA;AAAA,GACF;AACF;AAEO,IAAM,WAAA,GAAoBA,kBAAA,CAAA,UAAA;AAAA,EAC/B,CACE,EAAE,MAAA,EAAQ,cAAA,EAAgB,OAAA,EAAS,MAAM,SAAA,GAAY,EAAA,EAAI,QAAA,GAAW,KAAA,EAAO,sBAAsB,KAAA,EAAO,OAAA,EAAS,UAAU,GAAG,WAAA,IAC9H,GAAA,KACG;AACH,IAAA,MAAM,MAAA,GAAS,gBAAgB,cAAc,CAAA;AAE7C,IAAA,MAAM,EAAE,YAAY,UAAA,EAAY,OAAA,KAAY,QAAA,CAAS,MAAA,EAAQ,UAAU,mBAAmB,CAAA;AAE1F,IAAA,MAAM,WAAA,GAAoBA,kBAAA,CAAA,WAAA;AAAA,MACxB,CAAC,CAAA,KAA2C;AAC1C,QAAA,OAAA,GAAU,CAAC,CAAA;AACX,QAAA,IAAI,CAAA,CAAE,gBAAA,IAAoB,UAAA,IAAc,CAAC,MAAA,EAAQ;AAEjD,QAAA,MAAM,eAAe,OAAA,EAAQ;AAC7B,QAAA,IAAI,YAAA,EAAc;AAChB,UAAA,OAAA,GAAU,YAAY,CAAA;AAAA,QACxB,CAAA,MAAO;AACL,UAAA,OAAA,CAAQ,KAAK,6BAA6B,CAAA;AAAA,QAC5C;AAAA,MACF,CAAA;AAAA,MACA,CAAC,OAAA,EAAS,MAAA,EAAQ,UAAA,EAAY,SAAS,OAAO;AAAA,KAChD;AAEA,IAAA,IAAI,CAAC,UAAA,IAAc,CAAC,UAAU,CAAC,MAAA,CAAO,YAAY,OAAO,IAAA;AAEzD,IAAA,uBACEjJ,cAAAA;AAAA,MAAC6C,OAAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,QAAA;AAAA,QACL,SAAA,EAAW,UAAU,IAAA,EAAK;AAAA,QAC1B,QAAA,EAAU,UAAA;AAAA,QACV,YAAA,EAAW,OAAA;AAAA,QACX,eAAA,EAAe,UAAA;AAAA,QACf,OAAA,EAAQ,sCAAA;AAAA,QAER,OAAA,EAAS,WAAA;AAAA,QACR,GAAG,WAAA;AAAA,QACJ,GAAA;AAAA,QAEC,QAAA,EAAA,QAAA,oBACC9B,eAAAA,CAAA+C,mBAAAA,EAAA,EACE,QAAA,EAAA;AAAA,0BAAA9D,cAAAA,CAAC,SAAA,EAAA,EAAU,SAAA,EAAU,oBAAA,EAAqB,CAAA;AAAA,UACzC,wBAAQA,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,sBAAsB,QAAA,EAAA,IAAA,EAAK;AAAA,SAAA,EACtD;AAAA;AAAA,KAEJ;AAAA,EAEJ;AACF,CAAA;AAEA,WAAA,CAAY,WAAA,GAAc,aAAA;AC5HnB,IAAM,kBAAwBkJ,kBAAA,CAAA,IAAA,CAAK,CAAC,EAAE,SAAA,EAAW,GAAG,OAAM,KAAqC;AACpG,EAAA,uBACEnI,eAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,MAAK,MAAA,EAAO,IAAA,EAAK,SAAA,EAAsB,OAAA,EAAQ,aAAY,IAAA,EAAK,cAAA,EAAe,KAAA,EAAM,4BAAA,EAA8B,GAAG,KAAA,EAC/H,QAAA,EAAA;AAAA,oBAAAf,cAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,QAAA,EAAS,SAAA;AAAA,QACT,QAAA,EAAS,SAAA;AAAA,QACT,CAAA,EAAE,gHAAA;AAAA,QACF,IAAA,EAAK;AAAA;AAAA,KACP;AAAA,oBACAA,cAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,QAAA,EAAS,SAAA;AAAA,QACT,QAAA,EAAS,SAAA;AAAA,QACT,CAAA,EAAE,yHAAA;AAAA,QACF,IAAA,EAAK;AAAA;AAAA,KACP;AAAA,oBACAA,cAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,QAAA,EAAS,SAAA;AAAA,QACT,QAAA,EAAS,SAAA;AAAA,QACT,CAAA,EAAE,yHAAA;AAAA,QACF,IAAA,EAAK;AAAA;AAAA;AACP,GAAA,EACF,CAAA;AAEJ,CAAC,CAAA;AAED,eAAA,CAAgB,WAAA,GAAc,iBAAA;ACzBvB,IAAM,mBAAyBmJ,kBAAA,CAAA,IAAA,CAAK,CAAC,EAAE,SAAA,EAAW,GAAG,OAAM,KAAqC;AACrG,EAAA,uBACEpI,eAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,MAAK,MAAA,EAAO,IAAA,EAAK,SAAA,EAAsB,OAAA,EAAQ,aAAY,IAAA,EAAK,cAAA,EAAe,KAAA,EAAM,4BAAA,EAA8B,GAAG,KAAA,EAC/H,QAAA,EAAA;AAAA,oBAAAf,cAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,QAAA,EAAS,SAAA;AAAA,QACT,QAAA,EAAS,SAAA;AAAA,QACT,CAAA,EAAE,gHAAA;AAAA,QACF,IAAA,EAAK;AAAA;AAAA,KACP;AAAA,oBACAA,cAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,QAAA,EAAS,SAAA;AAAA,QACT,QAAA,EAAS,SAAA;AAAA,QACT,CAAA,EAAE,yHAAA;AAAA,QACF,IAAA,EAAK;AAAA;AAAA,KACP;AAAA,oBACAA,cAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,QAAA,EAAS,SAAA;AAAA,QACT,QAAA,EAAS,SAAA;AAAA,QACT,CAAA,EAAE,yHAAA;AAAA,QACF,IAAA,EAAK;AAAA;AAAA;AACP,GAAA,EACF,CAAA;AAEJ,CAAC,CAAA;AAED,gBAAA,CAAiB,WAAA,GAAc,kBAAA;ACzBxB,IAAM,gBAAsBoJ,kBAAA,CAAA,IAAA,CAAK,CAAC,EAAE,SAAA,EAAW,GAAG,OAAM,KAAqC;AAClG,EAAA,uBACErI,eAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,MAAK,MAAA,EAAO,IAAA,EAAK,SAAA,EAAsB,OAAA,EAAQ,aAAY,IAAA,EAAK,cAAA,EAAe,KAAA,EAAM,4BAAA,EAA8B,GAAG,KAAA,EAC/H,QAAA,EAAA;AAAA,oBAAAf,cAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,QAAA,EAAS,SAAA;AAAA,QACT,QAAA,EAAS,SAAA;AAAA,QACT,CAAA,EAAE,gHAAA;AAAA,QACF,IAAA,EAAK;AAAA;AAAA,KACP;AAAA,oBACAA,cAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,QAAA,EAAS,SAAA;AAAA,QACT,QAAA,EAAS,SAAA;AAAA,QACT,CAAA,EAAE,yHAAA;AAAA,QACF,IAAA,EAAK;AAAA;AAAA,KACP;AAAA,oBACAA,cAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,QAAA,EAAS,SAAA;AAAA,QACT,QAAA,EAAS,SAAA;AAAA,QACT,CAAA,EAAE,yHAAA;AAAA,QACF,IAAA,EAAK;AAAA;AAAA;AACP,GAAA,EACF,CAAA;AAEJ,CAAC,CAAA;AAED,aAAA,CAAc,WAAA,GAAc,eAAA;ACzBrB,IAAM,iBAAuBqJ,kBAAA,CAAA,IAAA,CAAK,CAAC,EAAE,SAAA,EAAW,GAAG,OAAM,KAAqC;AACnG,EAAA,uBACEtI,eAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,MAAK,MAAA,EAAO,IAAA,EAAK,SAAA,EAAsB,OAAA,EAAQ,aAAY,IAAA,EAAK,cAAA,EAAe,KAAA,EAAM,4BAAA,EAA8B,GAAG,KAAA,EAC/H,QAAA,EAAA;AAAA,oBAAAf,cAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,QAAA,EAAS,SAAA;AAAA,QACT,QAAA,EAAS,SAAA;AAAA,QACT,CAAA,EAAE,gHAAA;AAAA,QACF,IAAA,EAAK;AAAA;AAAA,KACP;AAAA,oBACAA,cAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,QAAA,EAAS,SAAA;AAAA,QACT,QAAA,EAAS,SAAA;AAAA,QACT,CAAA,EAAE,yHAAA;AAAA,QACF,IAAA,EAAK;AAAA;AAAA,KACP;AAAA,oBACAA,cAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,QAAA,EAAS,SAAA;AAAA,QACT,QAAA,EAAS,SAAA;AAAA,QACT,CAAA,EAAE,yHAAA;AAAA,QACF,IAAA,EAAK;AAAA;AAAA;AACP,GAAA,EACF,CAAA;AAEJ,CAAC,CAAA;AAED,cAAA,CAAe,WAAA,GAAc,gBAAA;ACWtB,IAAM,cAAA,GAAiB;AAAA,EAC5B,IAAA,EAAM,aAAA;AAAA,EACN,MAAA,EAAQ,eAAA;AAAA,EACR,KAAA,EAAO,cAAA;AAAA,EACP,OAAA,EAAS;AACX,CAAA;AAEO,IAAM,qBAAA,GAA4D;AAAA,EACvE,IAAA,EAAM,cAAA;AAAA,EACN,MAAA,EAAQ,cAAA;AAAA,EACR,KAAA,EAAO,cAAA;AAAA,EACP,OAAA,EAAS;AACX,CAAA;AAEO,IAAM,eAAA,GAA6C;AAAA,EACxD,IAAA,EAAM,oBAAA;AAAA,EACN,MAAA,EAAQ,0BAAA;AAAA,EACR,KAAA,EAAO,oBAAA;AAAA,EACP,OAAA,EAAS;AACX,CAAA;AAEO,SAAS,gBAAgB,QAAA,EAE9B;AACA,EAAA,OAAO,cAAA,IAAkB,QAAA;AAC3B;AAEO,SAAS,wBAAwB,MAAA,EAAgC;AACtE,EAAA,IAAI,CAAC,QAAQ,OAAO,KAAA;AAEpB,EAAA,MAAM,YAAA,GAAe,OAAO,gBAAA,CAAiB,UAAA,CAAW,KAAK,CAAC,SAAA,KAAc,SAAA,CAAU,IAAA,KAAS,WAAW,CAAA;AAE1G,EAAA,IAAI,CAAC,YAAA,EAAc;AACjB,IAAA,OAAA,CAAQ,KAAK,8FAAmG,CAAA;AAAA,EAClH;AAEA,EAAA,OAAO,YAAA;AACT;AAEO,SAAS,eAAA,CAAgB,MAAA,EAAuB,KAAA,EAAkB,cAAA,EAAkC;AACzG,EAAA,IAAI,CAAC,MAAA,IAAU,CAAC,cAAA,EAAgB,OAAO,KAAA;AAEvC,EAAA,IAAI;AACF,IAAA,OAAO,MAAA,CAAO,GAAA,EAAI,CAAE,YAAA,CAAa,KAAK,CAAA;AAAA,EACxC,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,KAAA;AAAA,EACT;AACF;AAEO,SAAS,iBAAA,CAAkB,QAAuB,KAAA,EAA2B;AAClF,EAAA,IAAI,CAAC,QAAQ,OAAO,KAAA;AACpB,EAAA,OAAO,MAAA,CAAO,QAAA,CAAS,EAAE,SAAA,EAAW,OAAO,CAAA;AAC7C;AAEO,SAAS,YAAA,CAAa,QAAuB,KAAA,EAA2B;AAC7E,EAAA,IAAI,CAAC,QAAQ,OAAO,KAAA;AAEpB,EAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,KAAA,EAAM,CAAE,KAAA,EAAM;AACnC,EAAA,IAAI,eAAA,CAAgB,KAAK,CAAA,EAAG;AAC1B,IAAA,OAAO,KAAA,CAAM,YAAA,CAAa,KAAK,CAAA,CAAE,GAAA,EAAI;AAAA,EACvC;AACA,EAAA,OAAO,KAAA;AACT;AAEO,SAAS,yBAAA,CAA0B,MAAA,EAAuB,cAAA,EAAyB,QAAA,EAAmB,eAAwB,KAAA,EAAgB;AACnJ,EAAA,IAAI,CAAC,MAAA,IAAU,CAAC,cAAA,EAAgB,OAAO,IAAA;AACvC,EAAA,IAAI,cAAc,OAAO,IAAA;AACzB,EAAA,IAAI,CAAC,UAAU,OAAO,IAAA;AACtB,EAAA,OAAO,KAAA;AACT;AAEO,SAAS,yBAAA,CAA0B,MAAA,EAAuB,QAAA,EAAmB,mBAAA,EAAuC;AACzH,EAAA,IAAI,CAAC,MAAA,EAAQ,UAAA,EAAY,OAAO,KAAA;AAChC,EAAA,IAAI,mBAAA,IAAuB,CAAC,QAAA,EAAU,OAAO,KAAA;AAC7C,EAAA,OAAO,IAAA;AACT;AAEO,SAAS,aAAa,MAAA,EAAuB,KAAA,EAAkB,QAAA,GAAoB,KAAA,EAAO,sBAA+B,KAAA,EAAO;AACrI,EAAA,MAAM,cAAA,GAAuBsJ,2BAAQ,MAAM,uBAAA,CAAwB,MAAM,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA;AAEpF,EAAA,MAAM,QAAA,GAAiBA,kBAAA,CAAA,OAAA,CAAQ,MAAM,eAAA,CAAgB,MAAA,EAAQ,KAAA,EAAO,cAAc,CAAA,EAAG,CAAC,MAAA,EAAQ,KAAA,EAAO,cAAc,CAAC,CAAA;AAEpH,EAAA,MAAM,UAAA,GAAa,yBAAA,CAA0B,MAAA,EAAQ,cAAA,EAAgB,UAAU,QAAQ,CAAA;AACvF,EAAA,MAAM,QAAA,GAAW,iBAAA,CAAkB,MAAA,EAAQ,KAAK,CAAA;AAEhD,EAAA,MAAM,eAAA,GAAwBA,+BAAY,MAAM;AAC9C,IAAA,IAAI,CAAC,cAAA,IAAkB,CAAC,MAAA,IAAU,YAAY,OAAO,KAAA;AACrD,IAAA,OAAO,YAAA,CAAa,QAAQ,KAAK,CAAA;AAAA,EACnC,GAAG,CAAC,cAAA,EAAgB,MAAA,EAAQ,UAAA,EAAY,KAAK,CAAC,CAAA;AAE9C,EAAA,MAAM,UAAA,GAAmBA,kBAAA,CAAA,OAAA,CAAQ,MAAM,yBAAA,CAA0B,MAAA,EAAQ,QAAA,EAAU,mBAAmB,CAAA,EAAG,CAAC,MAAA,EAAQ,QAAA,EAAU,mBAAmB,CAAC,CAAA;AAEhJ,EAAA,MAAM,IAAA,GAAO,eAAe,KAAK,CAAA;AACjC,EAAA,MAAM,WAAA,GAAc,sBAAsB,KAAK,CAAA;AAC/C,EAAA,MAAM,KAAA,GAAQ,gBAAgB,KAAK,CAAA;AAEnC,EAAA,OAAO;AAAA,IACL,cAAA;AAAA,IACA,QAAA;AAAA,IACA,UAAA;AAAA,IACA,QAAA;AAAA,IACA,eAAA;AAAA,IACA,UAAA;AAAA,IACA,IAAA;AAAA,IACA,WAAA;AAAA,IACA;AAAA,GACF;AACF;AAEO,IAAM,eAAA,GAAwBA,kBAAA,CAAA,UAAA;AAAA,EACnC,CAAC,EAAE,MAAA,EAAQ,cAAA,EAAgB,KAAA,EAAO,MAAM,mBAAA,GAAsB,KAAA,EAAO,SAAA,GAAY,EAAA,EAAI,UAAU,OAAA,EAAS,QAAA,EAAU,GAAG,WAAA,IAAe,GAAA,KAAQ;AAC1I,IAAA,MAAM,MAAA,GAAS,gBAAgB,cAAc,CAAA;AAE7C,IAAA,MAAM,EAAE,UAAA,EAAY,QAAA,EAAU,eAAA,EAAiB,UAAA,EAAY,IAAA,EAAM,WAAA,EAAa,KAAA,EAAM,GAAI,YAAA,CAAa,MAAA,EAAQ,KAAA,EAAO,UAAU,mBAAmB,CAAA;AAEjJ,IAAA,MAAM,WAAA,GAAoBA,kBAAA,CAAA,WAAA;AAAA,MACxB,CAAC,CAAA,KAA2C;AAC1C,QAAA,OAAA,GAAU,CAAC,CAAA;AAEX,QAAA,IAAI,CAAC,CAAA,CAAE,gBAAA,IAAoB,CAAC,QAAA,EAAU;AACpC,UAAA,eAAA,EAAgB;AAAA,QAClB;AAAA,MACF,CAAA;AAAA,MACA,CAAC,OAAA,EAAS,QAAA,EAAU,eAAe;AAAA,KACrC;AAEA,IAAA,IAAI,CAAC,UAAA,IAAc,CAAC,MAAA,IAAU,CAAC,OAAO,UAAA,EAAY;AAChD,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,uBACEtJ,cAAAA;AAAA,MAAC6C,OAAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,QAAA;AAAA,QACL,SAAA,EAAW,UAAU,IAAA,EAAK;AAAA,QAC1B,QAAA,EAAU,UAAA;AAAA,QACV,YAAA,EAAW,OAAA;AAAA,QACX,mBAAA,EAAmB,WAAW,IAAA,GAAO,KAAA;AAAA,QACrC,eAAA,EAAe,UAAA;AAAA,QACf,IAAA,EAAK,QAAA;AAAA,QACL,QAAA,EAAU,EAAA;AAAA,QACV,YAAA,EAAY,KAAA;AAAA,QACZ,cAAA,EAAc,QAAA;AAAA,QACd,OAAA,EAAS,KAAA;AAAA,QACT,YAAA,EAAc,WAAA;AAAA,QACd,OAAA,EAAS,WAAA;AAAA,QACR,GAAG,WAAA;AAAA,QACJ,GAAA;AAAA,QAEC,QAAA,EAAA,QAAA,oBACC9B,eAAAA,CAAA+C,mBAAAA,EAAA,EACE,QAAA,EAAA;AAAA,0BAAA9D,cAAAA,CAAC,IAAA,EAAA,EAAK,SAAA,EAAU,oBAAA,EAAqB,CAAA;AAAA,UACpC,wBAAQA,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,sBAAsB,QAAA,EAAA,IAAA,EAAK;AAAA,SAAA,EACtD;AAAA;AAAA,KAEJ;AAAA,EAEJ;AACF,CAAA;AAEA,eAAA,CAAgB,WAAA,GAAc,iBAAA;ACnMvB,IAAM,YAAkBuJ,kBAAA,CAAA,IAAA,CAAK,CAAC,EAAE,SAAA,EAAW,GAAG,OAAM,KAAqC;AAC9F,EAAA,uBACEvJ,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,IAAA,EAAK,QAAO,IAAA,EAAK,SAAA,EAAsB,OAAA,EAAQ,WAAA,EAAY,MAAK,cAAA,EAAe,KAAA,EAAM,4BAAA,EAA8B,GAAG,OAC/H,QAAA,kBAAAA,cAAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,QAAA,EAAS,SAAA;AAAA,MACT,QAAA,EAAS,SAAA;AAAA,MACT,CAAA,EAAE,ixBAAA;AAAA,MACF,IAAA,EAAK;AAAA;AAAA,GACP,EACF,CAAA;AAEJ,CAAC,CAAA;AAED,SAAA,CAAU,WAAA,GAAc,WAAA;ACbjB,IAAM,YAAkBwJ,kBAAA,CAAA,IAAA,CAAK,CAAC,EAAE,SAAA,EAAW,GAAG,OAAM,KAAqC;AAC9F,EAAA,uBACExJ,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,IAAA,EAAK,QAAO,IAAA,EAAK,SAAA,EAAsB,OAAA,EAAQ,WAAA,EAAY,MAAK,cAAA,EAAe,KAAA,EAAM,4BAAA,EAA8B,GAAG,OAC/H,QAAA,kBAAAA,cAAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,QAAA,EAAS,SAAA;AAAA,MACT,QAAA,EAAS,SAAA;AAAA,MACT,CAAA,EAAE,sjCAAA;AAAA,MACF,IAAA,EAAK;AAAA;AAAA,GACP,EACF,CAAA;AAEJ,CAAC,CAAA;AAED,SAAA,CAAU,WAAA,GAAc,WAAA;ACmBjB,IAAM,YAAA,GAAe;AAAA,EAC1B,IAAA,EAAM,SAAA;AAAA,EACN,IAAA,EAAM;AACR,CAAA;AAEO,IAAM,mBAAA,GAA8D;AAAA,EACzE,IAAA,EAAM,QAAA;AAAA,EACN,IAAA,EAAM;AACR,CAAA;AAEO,IAAM,mBAAA,GAAqD;AAAA,EAChE,IAAA,EAAM,cAAA;AAAA,EACN,IAAA,EAAM;AACR,CAAA;AASO,SAAS,uBAAA,CAAwB,QAAuB,MAAA,EAAgC;AAC7F,EAAA,IAAI,CAAC,QAAQ,OAAO,KAAA;AACpB,EAAA,OAAO,MAAA,KAAW,MAAA,GAAS,MAAA,CAAO,GAAA,EAAI,CAAE,MAAK,GAAI,MAAA,CAAO,GAAA,EAAI,CAAE,IAAA,EAAK;AACrE;AASO,SAAS,oBAAA,CAAqB,QAAuB,MAAA,EAAgC;AAC1F,EAAA,IAAI,CAAC,QAAQ,OAAO,KAAA;AACpB,EAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,KAAA,EAAM,CAAE,KAAA,EAAM;AACnC,EAAA,OAAO,MAAA,KAAW,MAAA,GAAS,KAAA,CAAM,IAAA,EAAK,CAAE,KAAI,GAAI,KAAA,CAAM,IAAA,EAAK,CAAE,GAAA,EAAI;AACnE;AAUO,SAAS,uBAAA,CAAwB,MAAA,EAAuB,MAAA,EAAuB,YAAA,GAAwB,KAAA,EAAgB;AAC5H,EAAA,IAAI,cAAc,OAAO,IAAA;AACzB,EAAA,OAAO,CAAC,uBAAA,CAAwB,MAAA,EAAQ,MAAM,CAAA;AAChD;AAUO,SAAS,gBAAA,CAAiB,MAAA,EAAuB,MAAA,EAAuB,QAAA,GAAoB,KAAA,EAAO;AACxG,EAAA,MAAM,UAAA,GAAmByJ,kBAAA,CAAA,OAAA,CAAQ,MAAM,uBAAA,CAAwB,MAAA,EAAQ,MAAM,CAAA,EAAG,CAAC,MAAA,EAAQ,MAAM,CAAC,CAAA;AAEhG,EAAA,MAAM,UAAA,GAAa,uBAAA,CAAwB,MAAA,EAAQ,MAAA,EAAQ,QAAQ,CAAA;AAEnE,EAAA,MAAM,YAAA,GAAqBA,+BAAY,MAAM;AAC3C,IAAA,IAAI,CAAC,UAAU,UAAA,EAAY;AAC3B,IAAA,oBAAA,CAAqB,QAAQ,MAAM,CAAA;AAAA,EACrC,CAAA,EAAG,CAAC,MAAA,EAAQ,MAAA,EAAQ,UAAU,CAAC,CAAA;AAE/B,EAAA,MAAM,IAAA,GAAO,aAAa,MAAM,CAAA;AAChC,EAAA,MAAM,WAAA,GAAc,oBAAoB,MAAM,CAAA;AAC9C,EAAA,MAAM,WAAA,GAAc,oBAAoB,MAAM,CAAA;AAE9C,EAAA,OAAO;AAAA,IACL,UAAA;AAAA,IACA,UAAA;AAAA,IACA,YAAA;AAAA,IACA,IAAA;AAAA,IACA,WAAA;AAAA,IACA;AAAA,GACF;AACF;AAKO,IAAM,cAAA,GAAuBA,kBAAA,CAAA,UAAA;AAAA,EAClC,CAAC,EAAE,MAAA,EAAQ,cAAA,EAAgB,QAAQ,IAAA,EAAM,SAAA,GAAY,EAAA,EAAI,QAAA,EAAU,OAAA,EAAS,QAAA,EAAU,GAAG,WAAA,IAAe,GAAA,KAAQ;AAC9G,IAAA,MAAM,MAAA,GAAS,gBAAgB,cAAc,CAAA;AAE7C,IAAA,MAAM,EAAE,UAAA,EAAY,YAAA,EAAc,IAAA,EAAM,WAAA,EAAa,aAAY,GAAI,gBAAA,CAAiB,MAAA,EAAQ,MAAA,EAAQ,QAAQ,CAAA;AAE9G,IAAA,MAAM,WAAA,GAAoBA,kBAAA,CAAA,WAAA;AAAA,MACxB,CAAC,CAAA,KAA2C;AAC1C,QAAA,OAAA,GAAU,CAAC,CAAA;AAEX,QAAA,IAAI,CAAC,CAAA,CAAE,gBAAA,IAAoB,CAAC,QAAA,EAAU;AACpC,UAAA,YAAA,EAAa;AAAA,QACf;AAAA,MACF,CAAA;AAAA,MACA,CAAC,OAAA,EAAS,QAAA,EAAU,YAAY;AAAA,KAClC;AAEA,IAAA,IAAI,CAAC,MAAA,IAAU,CAAC,MAAA,CAAO,UAAA,EAAY;AACjC,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,uBACEzJ,cAAAA;AAAA,MAAC6C,OAAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,IAAA,EAAK,QAAA;AAAA,QACL,SAAA,EAAW,UAAU,IAAA,EAAK;AAAA,QAC1B,QAAA,EAAU,UAAA;AAAA,QACV,YAAA,EAAW,OAAA;AAAA,QACX,eAAA,EAAe,UAAA;AAAA,QACf,IAAA,EAAK,QAAA;AAAA,QACL,QAAA,EAAU,EAAA;AAAA,QACV,YAAA,EAAY,WAAA;AAAA,QACZ,OAAA,EAAS,WAAA;AAAA,QACT,YAAA,EAAc,WAAA;AAAA,QACd,OAAA,EAAS,WAAA;AAAA,QACR,GAAG,WAAA;AAAA,QAEH,QAAA,EAAA,QAAA,oBACC9B,eAAAA,CAAA+C,mBAAAA,EAAA,EACE,QAAA,EAAA;AAAA,0BAAA9D,cAAAA,CAAC,IAAA,EAAA,EAAK,SAAA,EAAU,oBAAA,EAAqB,CAAA;AAAA,UACpC,wBAAQA,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,sBAAsB,QAAA,EAAA,IAAA,EAAK;AAAA,SAAA,EACtD;AAAA;AAAA,KAEJ;AAAA,EAEJ;AACF,CAAA;AAEA,cAAA,CAAe,WAAA,GAAc,gBAAA;ACxKtB,IAAM,gBAAsB0J,kBAAA,CAAA,IAAA,CAAK,CAAC,EAAE,SAAA,EAAW,GAAG,OAAM,KAAqC;AAClG,EAAA,uBACE1J,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,IAAA,EAAK,QAAO,IAAA,EAAK,SAAA,EAAsB,OAAA,EAAQ,WAAA,EAAY,MAAK,cAAA,EAAe,KAAA,EAAM,4BAAA,EAA8B,GAAG,OAC/H,QAAA,kBAAAA,cAAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,CAAA,EAAE,uYAAA;AAAA,MACF,IAAA,EAAK;AAAA;AAAA,GACP,EACF,CAAA;AAEJ,CAAC,CAAA;AAED,aAAA,CAAc,WAAA,GAAc,eAAA;ACDrB,SAAS,aAAA,GAAiC;AAC/C,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAU2J,kBAAA,CAAA,QAAA,CAA0B;AAAA,IAClE,KAAA,EAAO,CAAA;AAAA,IACP,MAAA,EAAQ,CAAA;AAAA,IACR,SAAA,EAAW;AAAA,GACZ,CAAA;AAED,EAAA,SAAS,YAAA,GAAe;AACtB,IAAA,IAAI,OAAO,WAAW,WAAA,EAAa;AAEnC,IAAA,MAAM,KAAK,MAAA,CAAO,cAAA;AAClB,IAAA,IAAI,CAAC,EAAA,EAAI;AAET,IAAA,MAAM,EAAE,KAAA,GAAQ,CAAA,EAAG,SAAS,CAAA,EAAG,SAAA,GAAY,GAAE,GAAI,EAAA;AAGjD,IAAA,aAAA,CAAc,CAAC,KAAA,KAAU;AACvB,MAAA,IAAI,KAAA,KAAU,MAAM,KAAA,IAAS,MAAA,KAAW,MAAM,MAAA,IAAU,SAAA,KAAc,MAAM,SAAA,EAAW;AACrF,QAAA,OAAO,KAAA;AAAA,MACT;AAEA,MAAA,OAAO,EAAE,KAAA,EAAO,MAAA,EAAQ,SAAA,EAAU;AAAA,IACpC,CAAC,CAAA;AAAA,EACH;AACA,EAAMA,6BAAU,MAAM;AACpB,IAAA,YAAA,EAAa;AAEb,IAAA,MAAM,iBAAiB,MAAA,CAAO,cAAA;AAC9B,IAAA,IAAI,cAAA,EAAgB;AAClB,MAAA,cAAA,CAAe,gBAAA,CAAiB,UAAU,YAAY,CAAA;AACtD,MAAA,cAAA,CAAe,gBAAA,CAAiB,UAAU,YAAY,CAAA;AAAA,IACxD;AAEA,IAAA,OAAO,MAAM;AACX,MAAA,IAAI,cAAA,EAAgB;AAClB,QAAA,cAAA,CAAe,mBAAA,CAAoB,UAAU,YAAY,CAAA;AACzD,QAAA,cAAA,CAAe,mBAAA,CAAoB,UAAU,YAAY,CAAA;AAAA,MAC3D;AAAA,IACF,CAAA;AAAA,EACF,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,OAAO,UAAA;AACT;;;ACjBO,SAAS,oBAAoB,EAAE,MAAA,EAAQ,gBAAgB,CAAA,EAAG,UAAA,GAAa,MAAK,EAA4B;AAC7G,EAAA,MAAM,EAAE,MAAA,EAAQ,YAAA,EAAa,GAAI,aAAA,EAAc;AAC/C,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAUC,kBAAA,CAAA,QAAA,CAAoB;AAAA,IAChD,CAAA,EAAG,CAAA;AAAA,IACH,CAAA,EAAG,CAAA;AAAA,IACH,KAAA,EAAO,CAAA;AAAA,IACP,MAAA,EAAQ;AAAA,GACT,CAAA;AAED,EAAA,MAAM,UAAA,GAAmBA,+BAAY,MAAM;AACzC,IAAA,MAAM,OAAA,GAAU,UAAA,EAAY,OAAA,IAAW,QAAA,CAAS,IAAA;AAEhD,IAAA,MAAM,EAAE,CAAA,EAAG,CAAA,EAAG,OAAO,MAAA,EAAO,GAAI,QAAQ,qBAAA,EAAsB;AAC9D,IAAA,OAAA,CAAQ,EAAE,CAAA,EAAG,CAAA,EAAG,KAAA,EAAO,QAAQ,CAAA;AAAA,EACjC,CAAA,EAAG,CAAC,UAAU,CAAC,CAAA;AAEf,EAAMA,6BAAU,MAAM;AACpB,IAAA,MAAM,OAAA,GAAU,UAAA,EAAY,OAAA,IAAW,QAAA,CAAS,IAAA;AAEhD,IAAA,UAAA,EAAW;AAEX,IAAA,MAAM,cAAA,GAAiB,IAAI,cAAA,CAAe,MAAM;AAC9C,MAAA,MAAA,CAAO,sBAAsB,UAAU,CAAA;AAAA,IACzC,CAAC,CAAA;AAED,IAAA,cAAA,CAAe,QAAQ,OAAO,CAAA;AAC9B,IAAA,MAAA,CAAO,iBAAiB,QAAA,EAAU,UAAA,EAAY,EAAE,OAAA,EAAS,MAAM,CAAA;AAE/D,IAAA,OAAO,MAAM;AACX,MAAA,cAAA,CAAe,UAAA,EAAW;AAC1B,MAAA,MAAA,CAAO,mBAAA,CAAoB,UAAU,UAAU,CAAA;AAAA,IACjD,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,UAAA,EAAY,UAAU,CAAC,CAAA;AAE3B,EAAMA,6BAAU,MAAM;AACpB,IAAA,MAAM,yBAAyB,MAAM;AACnC,MAAA,IAAI,CAAC,MAAA,EAAQ;AAEb,MAAA,MAAM,EAAE,KAAA,EAAO,IAAA,EAAK,GAAI,MAAA;AAExB,MAAA,IAAI,CAAC,IAAA,CAAK,QAAA,EAAS,EAAG;AAGtB,MAAA,MAAM,EAAE,IAAA,EAAK,GAAI,KAAA,CAAM,SAAA;AACvB,MAAA,MAAM,YAAA,GAAe,IAAA,CAAK,WAAA,CAAY,IAAI,CAAA;AAE1C,MAAA,IAAI,YAAA,GAAe,KAAK,MAAA,EAAQ;AAC9B,QAAA,IAAI,YAAA,EAAc;AAEhB,UAAA,MAAM,cAAA,GAAiB,YAAA,GAAe,YAAA,CAAa,GAAA,GAAM,aAAA,GAAgB,CAAA;AAGzE,UAAA,IAAI,CAAC,cAAA,EAAgB;AACnB,YAAA,MAAM,aAAA;AAAA;AAAA;AAAA,cAGJ,YAAA,CAAa,MAAM,YAAA,GAAe;AAAA,aAAA;AAEpC,YAAA,MAAA,CAAO,QAAA,CAAS;AAAA,cACd,GAAA,EAAK,aAAA;AAAA,cACL,QAAA,EAAU;AAAA,aACX,CAAA;AAAA,UACH;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAEA,IAAA,sBAAA,EAAuB;AAAA,EACzB,GAAG,CAAC,MAAA,EAAQ,eAAe,YAAA,EAAc,IAAA,CAAK,MAAM,CAAC,CAAA;AAErD,EAAA,OAAO,IAAA;AACT;AC1GA,IAAM,iBAAA,GAAoB,GAAA;AAEnB,SAAS,SAAA,GAAY;AAC1B,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAUC,4BAA8B,MAAS,CAAA;AAE7E,EAAMA,6BAAU,MAAM;AACpB,IAAA,MAAM,MAAM,MAAA,CAAO,UAAA,CAAW,CAAA,YAAA,EAAe,iBAAA,GAAoB,CAAC,CAAA,GAAA,CAAK,CAAA;AACvE,IAAA,MAAM,WAAW,MAAM;AACrB,MAAA,WAAA,CAAY,MAAA,CAAO,aAAa,iBAAiB,CAAA;AAAA,IACnD,CAAA;AACA,IAAA,GAAA,CAAI,gBAAA,CAAiB,UAAU,QAAQ,CAAA;AACvC,IAAA,WAAA,CAAY,MAAA,CAAO,aAAa,iBAAiB,CAAA;AACjD,IAAA,OAAO,MAAM,GAAA,CAAI,mBAAA,CAAoB,QAAA,EAAU,QAAQ,CAAA;AAAA,EACzD,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,OAAO,CAAC,CAAC,QAAA;AACX;AChBA,IAAO,kBAAA,GAAQC,UAAK,MAAA,CAAO;AAAA,EACzB,IAAA,EAAM,YAAA;AAAA;AAAA,EAEN,KAAA,EAAO,OAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMP,UAAA,CAAW,EAAE,IAAA,EAAM,cAAA,EAAe,EAAG;AAEnC,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,KAAA,CAAM,SAAA,IAAa,GAAA;AAE1C,IAAA,OAAO;AAAA,MACL,KAAA;AAAA,MACAC,qBAAgB,cAAA,EAAgB;AAAA,QAC9B,KAAA,EAAO,SAAA;AAAA;AAAA,QACP,SAAA,EAAW;AAAA;AAAA,OACZ;AAAA;AAAA,KAEH;AAAA,EACF,CAAA;AAAA;AAAA,EAGA,aAAA,GAAgB;AACd,IAAA,OAAO;AAAA,MACL,SAAA,EAAW;AAAA,QACT,OAAA,EAAS,IAAA;AAAA;AAAA,QACT,UAAA,EAAY,CAAC,UAAA,KAAe;AAC1B,UAAA,OAAO;AAAA,YACL,WAAW,UAAA,CAAW;AAAA,WACxB;AAAA,QACF;AAAA;AACF,KACF;AAAA,EACF,CAAA;AAAA;AAAA,EAGA,SAAA,GAAY;AACV,IAAA,OAAO;AAAA,MACL;AAAA,QACE,GAAA,EAAK,aAAA;AAAA;AAAA,QACL,QAAA,EAAU,CAAC,IAAA,KAAS;AAClB,UAAA,MAAM,SAAA,GAAY,IAAA,CAAK,YAAA,CAAa,SAAS,CAAA;AAC7C,UAAA,OAAO,EAAE,SAAA,EAAU;AAAA,QACrB;AAAA;AACF,KACF;AAAA,EACF;AACF,CAAC,CAAA;ACqBD,IAAM,QAAA,GAAW,CAAC,CAAA,EAAW,YAAA,EAAuB,aAAA,KAAmC;AACrF,EAAA,OAAO,MAAA,CAAO,YAAA,GAAe,CAAA,CAAE,OAAA,CAAQ,qBAAA,EAAuB,MAAM,CAAA,GAAI,CAAA,EAAG,aAAA,GAAgB,IAAA,GAAO,KAAK,CAAA;AACzG,CAAA;AAOA,SAAS,eAAA,CAAgB,GAAA,EAAa,UAAA,EAAoB,iBAAA,EAA2B,WAAA,EAAwC;AAC3H,EAAA,MAAM,cAA4B,EAAC;AACnC,EAAA,MAAM,UAAmB,EAAC;AAE1B,EAAA,IAAI,wBAAiD,EAAC;AACtD,EAAA,IAAI,KAAA,GAAQ,CAAA;AAEZ,EAAA,IAAI,CAAC,UAAA,EAAY;AACf,IAAA,OAAO;AAAA,MACL,qBAAqBvF,kBAAAA,CAAc,KAAA;AAAA,MACnC,SAAS;AAAC,KACZ;AAAA,EACF;AAEA,EAAA,GAAA,EAAK,WAAA,CAAY,CAAC,IAAA,EAAM,GAAA,KAAQ;AAC9B,IAAA,IAAI,KAAK,MAAA,EAAQ;AACf,MAAA,IAAI,qBAAA,CAAsB,KAAK,CAAA,EAAG;AAChC,QAAA,qBAAA,CAAsB,KAAK,CAAA,GAAI;AAAA,UAC7B,IAAA,EAAM,qBAAA,CAAsB,KAAK,CAAA,CAAE,OAAO,IAAA,CAAK,IAAA;AAAA,UAC/C,GAAA,EAAK,qBAAA,CAAsB,KAAK,CAAA,CAAE;AAAA,SACpC;AAAA,MACF,CAAA,MAAO;AACL,QAAA,qBAAA,CAAsB,KAAK,CAAA,GAAI;AAAA,UAC7B,IAAA,EAAM,CAAA,EAAG,IAAA,CAAK,IAAI,CAAA,CAAA;AAAA,UAClB;AAAA,SACF;AAAA,MACF;AAAA,IACF,CAAA,MAAO;AACL,MAAA,KAAA,IAAS,CAAA;AAAA,IACX;AAAA,EACF,CAAC,CAAA;AAED,EAAA,qBAAA,GAAwB,qBAAA,CAAsB,OAAO,OAAO,CAAA;AAE5D,EAAA,KAAA,MAAW,WAAW,qBAAA,EAAuB;AAC3C,IAAA,MAAM,EAAE,IAAA,EAAM,GAAA,EAAI,GAAI,OAAA;AACtB,IAAA,MAAM,OAAA,GAAU,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,SAAS,UAAU,CAAC,CAAA,CAAE,MAAA,CAAO,CAAC,CAAC,SAAS,CAAA,KAAM,SAAA,CAAU,MAAM,CAAA;AAE9F,IAAA,KAAA,MAAW,KAAK,OAAA,EAAS;AACvB,MAAA,IAAI,CAAA,CAAE,CAAC,CAAA,KAAM,EAAA,EAAI;AAEjB,MAAA,IAAI,CAAA,CAAE,UAAU,MAAA,EAAW;AACzB,QAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,UACX,IAAA,EAAM,MAAM,CAAA,CAAE,KAAA;AAAA,UACd,IAAI,GAAA,GAAM,CAAA,CAAE,KAAA,GAAQ,CAAA,CAAE,CAAC,CAAA,CAAE;AAAA,SAC1B,CAAA;AAAA,MACH;AAAA,IACF;AAAA,EACF;AAEA,EAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,OAAA,CAAQ,MAAA,EAAQ,KAAK,CAAA,EAAG;AAC1C,IAAA,MAAM,CAAA,GAAI,QAAQ,CAAC,CAAA;AACnB,IAAA,MAAM,YAAY,CAAA,KAAM,WAAA,GAAc,GAAG,iBAAiB,CAAA,CAAA,EAAI,iBAAiB,CAAA,QAAA,CAAA,GAAa,iBAAA;AAC5F,IAAA,MAAM,aAAyBC,eAAAA,CAAW,MAAA,CAAO,CAAA,CAAE,IAAA,EAAM,EAAE,EAAA,EAAI;AAAA,MAC7D,KAAA,EAAO;AAAA,KACR,CAAA;AAED,IAAA,WAAA,CAAY,KAAK,UAAU,CAAA;AAAA,EAC7B;AAEA,EAAA,OAAO;AAAA,IACL,mBAAA,EAAqBD,kBAAAA,CAAc,MAAA,CAAO,GAAA,EAAK,WAAW,CAAA;AAAA,IAC1D;AAAA,GACF;AACF;AAEA,IAAM,UAAU,CAAC,WAAA,EAAqB,SAAkB,EAAE,KAAA,EAAO,UAAS,KAAkD;AAC1H,EAAA,MAAM,WAAA,GAAc,QAAQ,CAAC,CAAA;AAE7B,EAAA,IAAI,CAAC,WAAA,EAAa;AAElB,EAAA,MAAM,EAAE,IAAA,EAAM,EAAA,EAAG,GAAI,QAAQ,CAAC,CAAA;AAE9B,EAAA,IAAI,QAAA,WAAmB,KAAA,CAAM,EAAA,CAAG,WAAW,WAAA,EAAa,IAAA,EAAM,EAAE,CAAC,CAAA;AACnE,CAAA;AAEA,IAAM,gBAAA,GAAmB,CAAC,WAAA,EAAqB,KAAA,EAAe,YAAoB,OAAA,KAA+C;AAC/H,EAAA,MAAM,YAAY,KAAA,GAAQ,CAAA;AAE1B,EAAA,IAAI,CAAC,OAAA,CAAQ,SAAS,CAAA,EAAG,OAAO,IAAA;AAEhC,EAAA,MAAM,EAAE,IAAA,EAAM,WAAA,EAAa,IAAI,SAAA,EAAU,GAAI,QAAQ,KAAK,CAAA;AAE1D,EAAA,MAAMK,OAAAA,GAAS,SAAA,GAAY,WAAA,GAAc,WAAA,CAAY,MAAA,GAAS,UAAA;AAE9D,EAAA,MAAM,EAAE,IAAA,EAAM,EAAA,EAAG,GAAI,QAAQ,SAAS,CAAA;AAEtC,EAAA,OAAA,CAAQ,SAAS,CAAA,GAAI;AAAA,IACnB,IAAI,EAAA,GAAKA,OAAAA;AAAA,IACT,MAAM,IAAA,GAAOA;AAAA,GACf;AAEA,EAAA,OAAO,CAACA,SAAQ,OAAO,CAAA;AACzB,CAAA;AAEA,IAAM,aAAa,CAAC,WAAA,EAAqB,SAAkB,EAAE,EAAA,EAAI,UAAS,KAA+C;AACvH,EAAA,IAAIA,OAAAA,GAAS,CAAA;AAEb,EAAA,IAAI,WAAA,GAAc,QAAQ,KAAA,EAAM;AAEhC,EAAA,IAAI,CAAC,YAAY,MAAA,EAAQ;AAEzB,EAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,WAAA,CAAY,MAAA,EAAQ,KAAK,CAAA,EAAG;AAC9C,IAAA,MAAM,EAAE,IAAA,EAAM,EAAA,EAAG,GAAI,YAAY,CAAC,CAAA;AAElC,IAAA,EAAA,CAAG,UAAA,CAAW,WAAA,EAAa,IAAA,EAAM,EAAE,CAAA;AAEnC,IAAA,MAAM,wBAAA,GAA2B,gBAAA,CAAiB,WAAA,EAAa,CAAA,EAAGA,SAAQ,WAAW,CAAA;AAErF,IAAA,IAAI,CAAC,wBAAA,EAA0B;AAE/B,IAAAA,OAAAA,GAAS,yBAAyB,CAAC,CAAA;AACnC,IAAA,WAAA,GAAc,yBAAyB,CAAC,CAAA;AAAA,EAC1C;AAEA,EAAA,QAAA,GAAW,EAAE,CAAA;AACf,CAAA;AAEO,IAAM,yBAAA,GAA4B,IAAIP,eAAAA,CAAU,wBAAwB,CAAA;AAkBxE,IAAM,gBAAA,GAAmBD,eAAU,MAAA,CAAyD;AAAA,EACjG,IAAA,EAAM,kBAAA;AAAA,EAEN,UAAA,GAAa;AACX,IAAA,OAAO;AAAA,MACL,iBAAA,EAAmB,eAAA;AAAA,MACnB,YAAA,EAAc;AAAA,KAChB;AAAA,EACF,CAAA;AAAA,EAEA,UAAA,GAAa;AACX,IAAA,OAAO;AAAA,MACL,UAAA,EAAY,EAAA;AAAA,MACZ,WAAA,EAAa,EAAA;AAAA,MACb,SAAS,EAAC;AAAA,MACV,cAAA,EAAgB,EAAA;AAAA,MAChB,aAAA,EAAe,KAAA;AAAA,MACf,iBAAA,EAAmB,KAAA;AAAA,MACnB,WAAA,EAAa,CAAA;AAAA,MACb,eAAA,EAAiB;AAAA,KACnB;AAAA,EACF,CAAA;AAAA,EAEA,WAAA,GAAc;AACZ,IAAA,OAAO;AAAA,MACL,eACE,CAAC,UAAA,KACD,CAAC,EAAE,QAAO,KAAM;AACd,QAAA,MAAA,CAAO,OAAA,CAAQ,iBAAiB,UAAA,GAAa,UAAA;AAE7C,QAAA,OAAO,KAAA;AAAA,MACT,CAAA;AAAA,MACF,gBACE,CAAC,WAAA,KACD,CAAC,EAAE,QAAO,KAAM;AACd,QAAA,MAAA,CAAO,OAAA,CAAQ,iBAAiB,WAAA,GAAc,WAAA;AAE9C,QAAA,OAAO,KAAA;AAAA,MACT,CAAA;AAAA,MACF,kBACE,CAAC,aAAA,KACD,CAAC,EAAE,QAAO,KAAM;AACd,QAAA,MAAA,CAAO,OAAA,CAAQ,iBAAiB,aAAA,GAAgB,aAAA;AAEhD,QAAA,OAAO,KAAA;AAAA,MACT,CAAA;AAAA,MACF,UAAA,EACE,MACA,CAAC,EAAE,QAAO,KAAM;AACd,QAAA,MAAA,CAAO,OAAA,CAAQ,iBAAiB,WAAA,GAAc,CAAA;AAE9C,QAAA,OAAO,KAAA;AAAA,MACT,CAAA;AAAA,MACF,gBAAA,EACE,MACA,CAAC,EAAE,QAAO,KAAM;AACd,QAAA,MAAM,EAAE,OAAA,EAAS,WAAA,EAAY,GAAI,OAAO,OAAA,CAAQ,gBAAA;AAEhD,QAAA,MAAM,YAAY,WAAA,GAAc,CAAA;AAEhC,QAAA,IAAI,OAAA,CAAQ,SAAS,CAAA,EAAG;AACtB,UAAA,MAAA,CAAO,OAAA,CAAQ,iBAAiB,WAAA,GAAc,SAAA;AAAA,QAChD,CAAA,MAAO;AACL,UAAA,MAAA,CAAO,OAAA,CAAQ,iBAAiB,WAAA,GAAc,CAAA;AAAA,QAChD;AAEA,QAAA,OAAO,KAAA;AAAA,MACT,CAAA;AAAA,MACF,oBAAA,EACE,MACA,CAAC,EAAE,QAAO,KAAM;AACd,QAAA,MAAM,EAAE,OAAA,EAAS,WAAA,EAAY,GAAI,OAAO,OAAA,CAAQ,gBAAA;AAEhD,QAAA,MAAM,YAAY,WAAA,GAAc,CAAA;AAEhC,QAAA,IAAI,OAAA,CAAQ,SAAS,CAAA,EAAG;AACtB,UAAA,MAAA,CAAO,OAAA,CAAQ,iBAAiB,WAAA,GAAc,SAAA;AAAA,QAChD,CAAA,MAAO;AACL,UAAA,MAAA,CAAO,OAAA,CAAQ,gBAAA,CAAiB,WAAA,GAAc,OAAA,CAAQ,MAAA,GAAS,CAAA;AAAA,QACjE;AAEA,QAAA,OAAO,KAAA;AAAA,MACT,CAAA;AAAA,MACF,SACE,MACA,CAAC,EAAE,MAAA,EAAQ,KAAA,EAAO,UAAS,KAAM;AAC/B,QAAA,MAAM,EAAE,WAAA,EAAa,OAAA,EAAQ,GAAI,OAAO,OAAA,CAAQ,gBAAA;AAEhD,QAAA,OAAA,CAAQ,WAAA,EAAa,OAAA,EAAS,EAAE,KAAA,EAAO,UAAU,CAAA;AAEjD,QAAA,OAAO,KAAA;AAAA,MACT,CAAA;AAAA,MACF,YACE,MACA,CAAC,EAAE,MAAA,EAAQ,EAAA,EAAI,UAAS,KAAM;AAC5B,QAAA,MAAM,EAAE,WAAA,EAAa,OAAA,EAAQ,GAAI,OAAO,OAAA,CAAQ,gBAAA;AAEhD,QAAA,UAAA,CAAW,WAAA,EAAa,OAAA,EAAS,EAAE,EAAA,EAAI,UAAU,CAAA;AAEjD,QAAA,OAAO,KAAA;AAAA,MACT;AAAA,KACJ;AAAA,EACF,CAAA;AAAA,EAEA,qBAAA,GAAwB;AACtB,IAAA,MAAM,SAAS,IAAA,CAAK,MAAA;AACpB,IAAA,MAAM,EAAE,iBAAA,EAAmB,YAAA,EAAa,GAAI,IAAA,CAAK,OAAA;AAEjD,IAAA,MAAM,oBAAoB,CAAC,CAAA,KAAe,MAAA,CAAO,OAAA,CAAQ,iBAAiB,cAAA,GAAiB,CAAA;AAC3F,IAAA,MAAM,uBAAuB,CAAC,CAAA,KAAgB,MAAA,CAAO,OAAA,CAAQ,iBAAiB,iBAAA,GAAoB,CAAA;AAClG,IAAA,MAAM,qBAAqB,CAAC,CAAA,KAAe,MAAA,CAAO,OAAA,CAAQ,iBAAiB,eAAA,GAAkB,CAAA;AAE7F,IAAA,OAAO;AAAA,MACL,IAAIH,YAAAA,CAAO;AAAA,QACT,GAAA,EAAK,yBAAA;AAAA,QACL,KAAA,EAAO;AAAA,UACL,IAAA,EAAM,MAAMM,kBAAAA,CAAc,KAAA;AAAA,UAC1B,KAAA,CAAM,EAAE,GAAA,EAAK,UAAA,IAAc,QAAA,EAAU;AACnC,YAAA,MAAM,EAAE,YAAY,cAAA,EAAgB,aAAA,EAAe,mBAAmB,WAAA,EAAa,eAAA,EAAgB,GAAI,MAAA,CAAO,OAAA,CAAQ,gBAAA;AAEtH,YAAA,IAAI,CAAC,UAAA,IAAc,cAAA,KAAmB,UAAA,IAAc,iBAAA,KAAsB,iBAAiB,eAAA,KAAoB,WAAA;AAC7G,cAAA,OAAO,QAAA;AAET,YAAA,iBAAA,CAAkB,UAAU,CAAA;AAC5B,YAAA,oBAAA,CAAqB,aAAa,CAAA;AAClC,YAAA,kBAAA,CAAmB,WAAW,CAAA;AAE9B,YAAA,IAAI,CAAC,UAAA,EAAY;AACf,cAAA,MAAA,CAAO,OAAA,CAAQ,gBAAA,CAAiB,OAAA,GAAU,EAAC;AAC3C,cAAA,OAAOA,kBAAAA,CAAc,KAAA;AAAA,YACvB;AAEA,YAAA,MAAM,EAAE,mBAAA,EAAqB,OAAA,EAAQ,GAAI,eAAA;AAAA,cACvC,GAAA;AAAA,cACA,QAAA,CAAS,UAAA,EAAY,YAAA,EAAc,aAAa,CAAA;AAAA,cAChD,iBAAA;AAAA,cACA;AAAA,aACF;AAEA,YAAA,MAAA,CAAO,OAAA,CAAQ,iBAAiB,OAAA,GAAU,OAAA;AAE1C,YAAA,OAAO,mBAAA;AAAA,UACT;AAAA,SACF;AAAA,QACA,KAAA,EAAO;AAAA,UACL,YAAY,KAAA,EAAO;AACjB,YAAA,OAAO,IAAA,CAAK,SAAS,KAAK,CAAA;AAAA,UAC5B;AAAA;AACF,OACD;AAAA,KACH;AAAA,EACF;AACF,CAAC,CAAA;AAED,IAAO,wBAAA,GAAQ,gBAAA;ACxSf,IAAM,qBAAqB,CAAC;AAAA,EAC1B,kBAAA;AAAA,EACA,WAAA;AAAA,EACA,OAAA;AAAA;AAAA,EAEA,QAAA;AAAA,EACA;AACF,CAAA,KAOM;AACJ,EAAA,uBACEzD,eAAAA,CAAA+C,mBAAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAA9D,eAAC,MAAA,EAAA,EAAO,CAAA;AAAA,IACP,OAAA,oBACCA,cAAAA,CAAC,YAAA,EAAA,EACC,0BAAAA,cAAAA,CAAC,WAAA,EAAA,EAAY,SAAkB,CAAA,EACjC,CAAA;AAAA,IAED,CAAC,QAAA,oBACAe,eAAAA,CAAA+C,qBAAA,EACE,QAAA,EAAA;AAAA,sBAAA/C,gBAAC,YAAA,EAAA,EACC,QAAA,EAAA;AAAA,wBAAAf,cAAAA,CAAC,cAAA,EAAA,EAAe,MAAA,EAAO,MAAA,EAAO,CAAA;AAAA,wBAC9BA,cAAAA,CAAC,cAAA,EAAA,EAAe,MAAA,EAAO,MAAA,EAAO;AAAA,OAAA,EAChC,CAAA;AAAA,sBAEAA,eAAC,gBAAA,EAAA,EAAiB;AAAA,KAAA,EACpB,CAAA;AAAA,oBAIFe,gBAAC,YAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAAf,cAAAA,CAAC,uBAAoB,MAAA,EAAQ,CAAC,GAAG,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA,EAAG,CAAA;AAAA,sBAC3CA,eAAC,gBAAA,EAAA,EAAiB,KAAA,EAAO,CAAC,YAAA,EAAc,aAAA,EAAe,UAAU,CAAA,EAAG,CAAA;AAAA,sBACpEA,cAAAA,CAAC,UAAA,EAAA,EAAW,IAAA,EAAK,WAAA,EAAY,CAAA;AAAA,sBAC7BA,cAAAA,CAAC,UAAA,EAAA,EAAW,IAAA,EAAK,YAAA,EAAa;AAAA,KAAA,EAChC,CAAA;AAAA,oBAEAA,eAAC,gBAAA,EAAA,EAAiB,CAAA;AAAA,oBAElBe,gBAAC,YAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAAf,cAAAA,CAAC,UAAA,EAAA,EAAW,IAAA,EAAK,MAAA,EAAO,CAAA;AAAA,sBACxBA,cAAAA,CAAC,UAAA,EAAA,EAAW,IAAA,EAAK,QAAA,EAAS,CAAA;AAAA,sBAC1BA,cAAAA,CAAC,UAAA,EAAA,EAAW,IAAA,EAAK,QAAA,EAAS,CAAA;AAAA,sBAC1BA,cAAAA,CAAC,UAAA,EAAA,EAAW,IAAA,EAAK,MAAA,EAAO,CAAA;AAAA,sBACxBA,cAAAA,CAAC,UAAA,EAAA,EAAW,IAAA,EAAK,WAAA,EAAY,CAAA;AAAA,MAC5B,CAAC,QAAA,mBAAWA,cAAAA,CAAC,gBAAA,EAAA,EAAiB,oBAAKA,cAAAA,CAAC,iBAAA,EAAA,EAAkB,OAAA,EAAS,kBAAA,EAAoB,CAAA;AAAA,MACnF,CAAC,QAAA,mBAAWA,cAAAA,CAAC,WAAA,EAAA,EAAY,oBAAKA,cAAAA,CAAC,UAAA,EAAA,EAAW,OAAA,EAAS,WAAA,EAAa;AAAA,KAAA,EACnE,CAAA;AAAA,oBAEAA,eAAC,gBAAA,EAAA,EAAiB,CAAA;AAAA,oBAElBe,gBAAC,YAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAAf,cAAAA,CAAC,UAAA,EAAA,EAAW,IAAA,EAAK,aAAA,EAAc,CAAA;AAAA,sBAC/BA,cAAAA,CAAC,UAAA,EAAA,EAAW,IAAA,EAAK,WAAA,EAAY;AAAA,KAAA,EAC/B,CAAA;AAAA,oBAEAA,eAAC,gBAAA,EAAA,EAAiB,CAAA;AAAA,oBAElBe,gBAAC,YAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAAf,cAAAA,CAAC,eAAA,EAAA,EAAgB,KAAA,EAAM,MAAA,EAAO,CAAA;AAAA,sBAC9BA,cAAAA,CAAC,eAAA,EAAA,EAAgB,KAAA,EAAM,QAAA,EAAS,CAAA;AAAA,sBAChCA,cAAAA,CAAC,eAAA,EAAA,EAAgB,KAAA,EAAM,OAAA,EAAQ,CAAA;AAAA,sBAC/BA,cAAAA,CAAC,eAAA,EAAA,EAAgB,KAAA,EAAM,SAAA,EAAU;AAAA,KAAA,EACnC,CAAA;AAAA,oBAEAA,eAAC,gBAAA,EAAA,EAAiB,CAAA;AAAA,oBAElBA,eAAC,MAAA,EAAA,EAAO,CAAA;AAAA,IAEP,QAAA,oBAAYA,cAAAA,CAAC,gBAAA,EAAA,EAAiB;AAAA,GAAA,EACjC,CAAA;AAEJ,CAAA;AAEA,IAAM,oBAAA,GAAuB,CAAC,EAAE,IAAA,EAAM,QAAO,qBAC3Ce,eAAAA,CAAA+C,mBAAAA,EAAA,EACE,QAAA,EAAA;AAAA,kBAAA9D,cAAAA,CAAC,gBACC,QAAA,kBAAAe,eAAAA,CAAC8B,SAAA,EAAO,YAAA,EAAW,OAAA,EAAQ,OAAA,EAAS,MAAA,EAClC,QAAA,EAAA;AAAA,oBAAA7C,cAAAA,CAAC,aAAA,EAAA,EAAc,SAAA,EAAU,oBAAA,EAAqB,CAAA;AAAA,IAC7C,IAAA,KAAS,aAAA,mBAAgBA,cAAAA,CAAC,eAAA,EAAA,EAAgB,SAAA,EAAU,oBAAA,EAAqB,CAAA,mBAAKA,cAAAA,CAAC,QAAA,EAAA,EAAS,SAAA,EAAU,oBAAA,EAAqB;AAAA,GAAA,EAC1H,CAAA,EACF,CAAA;AAAA,kBAEAA,eAAC,gBAAA,EAAA,EAAiB,CAAA;AAAA,EAEjB,IAAA,KAAS,gCAAgBA,cAAAA,CAAC,oBAAiB,CAAA,mBAAKA,eAAC,WAAA,EAAA,EAAY;AAAA,CAAA,EAChE,CAAA;AAgCF,IAAO,yBAAQ,CAAC;AAAA,EACd,KAAA,GAAQ,EAAA;AAAA,EACR,QAAA;AAAA,EACA,YAAA;AAAA,EACA,WAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA,GAAc,IAAA;AAAA,EACd,OAAA;AAAA,EACA;AACF,CAAA,KAA2B;AACzB,EAAA,MAAM,WAAW,SAAA,EAAU;AAC3B,EAAA,MAAM,aAAa,aAAA,EAAc;AACjC,EAAA,MAAM,cAAA,GAAiB0B,eAAe,EAAE,CAAA;AACxC,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIJ,iBAA0C,MAAM,CAAA;AACpF,EAAA,MAAM,UAAA,GAAaI,eAAuB,IAAI,CAAA;AAC9C,EAAA,MAAM,SAASsI,eAAA,CAAU;AAAA,IACvB,iBAAA,EAAmB,KAAA;AAAA,IACnB,WAAA,EAAa;AAAA,MACX,UAAA,EAAY;AAAA,QACV,YAAA,EAAc,KAAA;AAAA,QACd,WAAA,EAAa,KAAA;AAAA,QACb,cAAA,EAAgB,KAAA;AAAA,QAChB,YAAA,EAAc;AAAA;AAChB,KACF;AAAA,IACA,UAAA,EAAY;AAAA,MACVC,wBAAS,SAAA,CAAU;AAAA,QACjB,mBAAA,EAAqB,IAAA;AAAA,QACrB,mBAAA,EAAqB,IAAA;AAAA,QACrB,MAAA,EAAQ;AAAA,OACT,CAAA;AAAA,MACDC,qBAAA;AAAA,MACAC,4BAAA,CAAU,UAAU,EAAE,KAAA,EAAO,CAAC,SAAA,EAAW,WAAW,GAAG,CAAA;AAAA,MACvDC,4BAAA;AAAA,MACAC,0BAAA;AAAA,MACAC,0BAAA,CAAS,SAAA,CAAU,EAAE,MAAA,EAAQ,MAAM,CAAA;AAAA,MACnCC,4BAAA,CAAU,SAAA,CAAU,EAAE,UAAA,EAAY,MAAM,CAAA;AAAA,MACxC9G,oBAAAA;AAAA,MACA+G,8BAAA;AAAA,MACAC,gCAAA;AAAA,MACAC,4BAAA;AAAA,MACA,SAAA;AAAA,MACA,YAAA;AAAA,MACA,IAAA,CAAK,SAAA,CAAU,EAAE,WAAA,EAAa,OAAO,CAAA;AAAA,MAErCC,uBAAM,SAAA,CAAU;AAAA,QACd,SAAA,EAAW;AAAA;AAAA,OACZ,CAAA;AAAA,MACDC,4BAAA;AAAA,MACAC,yBAAA;AAAA,MACAC,0BAAA;AAAA;AAAA,MAEA,yBAAiB,SAAA,CAAU;AAAA,QACzB,iBAAA,EAAmB,SAAA;AAAA;AAAA,QACnB,YAAA,EAAc;AAAA;AAAA,OACf,CAAA;AAAA,MACD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAWF;AAAA,IACA,OAAA,EAAS,EAAA;AAAA,IACT,UAAU,MAAM;AAEd,MAAA,MAAM,iBAAiB,WAAA,EAAY;AAEnC,MAAA,IAAI,cAAA,KAAmB,eAAe,OAAA,EAAS;AAC/C,MAAA,cAAA,CAAe,OAAA,GAAU,cAAA;AACzB,MAAA,QAAA,GAAW,cAAc,CAAA;AAAA,IAC3B;AAAA,GACD,CAAA;AAED,EAAA,MAAM,cAAc,MAAM;AACxB,IAAA,IAAI,CAAC,QAAQ,OAAO,EAAA;AACpB,IAAA,OAAO,MAAA,CAAO,OAAA,CAAQ,QAAA,CAAS,WAAA,EAAY;AAAA,EAE7C,CAAA;AAsDA,EAAA,MAAM,WAAW,mBAAA,CAAoB;AAAA,IACnC,MAAA;AAAA,IACA,aAAA,EAAe,UAAA,CAAW,OAAA,EAAS,qBAAA,GAAwB,MAAA,IAAU;AAAA,GACtE,CAAA;AAED,EAAAtJ,kBAAU,MAAM;AACd,IAAA,IAAI,CAAC,QAAA,IAAY,UAAA,KAAe,MAAA,EAAQ;AACtC,MAAA,aAAA,CAAc,MAAM,CAAA;AAAA,IACtB;AAAA,EACF,CAAA,EAAG,CAAC,QAAA,EAAU,UAAU,CAAC,CAAA;AAEzB,EAAAA,kBAAU,MAAM;AAEd,IAAA,IAAI,CAAC,MAAA,EAAQ;AAMb,IAAA,IAAI,cAAA,CAAe,YAAY,KAAA,EAAO;AAEtC,IAAA,MAAA,EAAQ,QAAA,CAAS,WAAW,KAAK,CAAA;AAEjC,IAAA,cAAA,CAAe,OAAA,GAAU,KAAA;AAAA,EAuC3B,CAAA,EAAG,CAAC,KAAA,EAAO,MAAM,CAAC,CAAA;AAElB,EAAA,MAAM,YAAA,GAAe,WAAA,CAAY,CAAC,SAAA,KAAuB;AAEvD,IAAA,YAAA,GAAe,QAAA,CAAS,SAAA,IAAa,GAAG,CAAC,CAAA;AAAA,EAC3C,GAAG,GAAG,CAAA;AACN,EAAAA,kBAAU,MAAM;AACd,IAAA,IAAI,CAAC,MAAA,EAAQ;AACb,IAAA,MAAM,SAAA,GAAY,QAAA,CAAS,aAAA,CAAc,kBAAkB,CAAA;AAC3D,IAAA,IAAI,CAAC,SAAA,EAAW;AAChB,IAAA,MAAM,wBAAwB,MAAM;AAClC,MAAA,MAAM,EAAE,IAAA,EAAK,GAAI,MAAA,CAAO,KAAA,CAAM,SAAA;AAC9B,MAAA,MAAM,QAAA,GAAW,MAAA,CAAO,IAAA,CAAK,QAAA,CAAS,IAAI,CAAA;AAC1C,MAAA,MAAM,UAAU,QAAA,CAAS,IAAA;AAGzB,MAAA,MAAM,WAAA,GAAc,OAAO,IAAA,CAAK,GAAA;AAGhC,MAAA,IAAI,EAAA,GAAyB,OAAA,CAAQ,QAAA,KAAa,CAAA,GAAI,UAAU,OAAA,CAAQ,aAAA;AACxE,MAAA,IAAI,MAAA,GAAwB,IAAA;AAE5B,MAAA,OAAO,EAAA,IAAM,OAAO,WAAA,EAAa;AAC/B,QAAA,IAAI,EAAA,CAAG,SAAA,CAAU,QAAA,CAAS,SAAS,CAAA,EAAG;AACpC,UAAA,MAAA,GAAS,EAAA,CAAG,aAAa,SAAS,CAAA;AAClC,UAAA;AAAA,QACF;AACA,QAAA,EAAA,GAAM,EAAA,CAAG,0BAA0C,EAAA,CAAG,aAAA;AAAA,MACxD;AAEA,MAAA,IAAI,CAAC,UAAU,OAAA,EAAS;AAEtB,QAAA,MAAM,eAAe,KAAA,CAAM,IAAA,CAAK,WAAA,CAAY,gBAAA,CAAiB,UAAU,CAAC,CAAA;AACxE,QAAA,MAAM,SAAA,GAAY,OAAA,CAAQ,qBAAA,IAAwB,EAAG,GAAA;AAErD,QAAA,KAAA,IAAS,IAAI,YAAA,CAAa,MAAA,GAAS,CAAA,EAAG,CAAA,IAAK,GAAG,CAAA,EAAA,EAAK;AACjD,UAAA,MAAM,KAAA,GAAQ,YAAA,CAAa,CAAC,CAAA,CAAE,uBAAsB,CAAE,GAAA;AACtD,UAAA,IAAI,QAAQ,SAAA,EAAW;AACrB,YAAA,MAAA,GAAS,YAAA,CAAa,CAAC,CAAA,CAAE,YAAA,CAAa,SAAS,CAAA;AAC/C,YAAA;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAEA,MAAA,IAAI,MAAA,EAAQ;AAEV,QAAA,YAAA,CAAa,MAAM,CAAA;AAAA,MACrB;AAAA,IACF,CAAA;AAEA,IAAA,MAAM,eAAe,MAAM;AACzB,MAAA,MAAM,UAAU,KAAA,CAAM,IAAA,CAAK,SAAA,CAAU,gBAAA,CAAiB,UAAU,CAAC,CAAA;AACjE,MAAA,IAAI,CAAC,QAAQ,MAAA,EAAQ;AAErB,MAAA,IAAI,WAAA,GAAkC,IAAA;AACtC,MAAA,IAAI,cAAA,GAAiB,CAAA,QAAA;AACrB,MAAA,MAAM,YAAA,GAAe,SAAA,CAAU,qBAAA,EAAsB,CAAE,GAAA;AACvD,MAAA,OAAA,CAAQ,OAAA,CAAQ,CAAC,IAAA,KAAS;AACxB,QAAA,MAAM,IAAA,GAAO,KAAK,qBAAA,EAAsB;AACxC,QAAA,MAAM,GAAA,GAAM,KAAK,GAAA,GAAM,YAAA;AAGvB,QAAA,IAAI,IAAA,CAAK,GAAA,CAAI,GAAG,CAAA,IAAK,EAAA,EAAI;AACvB,UAAA,WAAA,GAAc,IAAA;AACd,UAAA,cAAA,GAAiB,CAAA;AAAA,QACnB,CAAA,MAAA,IAGS,GAAA,GAAM,CAAA,IAAK,GAAA,GAAM,cAAA,EAAgB;AACxC,UAAA,WAAA,GAAc,IAAA;AACd,UAAA,cAAA,GAAiB,GAAA;AAAA,QACnB;AAAA,MACF,CAAC,CAAA;AAED,MAAA,IAAI,WAAA,EAAa;AACf,QAAA,MAAM,MAAA,GAAU,WAAA,CAA4B,YAAA,CAAa,SAAS,CAAA;AAElE,QAAA,YAAA,CAAa,MAAO,CAAA;AAAA,MACtB;AAAA,IACF,CAAA;AAEA,IAAA,MAAA,CAAO,EAAA,CAAG,mBAAmB,qBAAqB,CAAA;AAClD,IAAA,SAAA,CAAU,gBAAA,CAAiB,UAAU,YAAY,CAAA;AAEjD,IAAA,OAAO,MAAM;AACX,MAAA,MAAA,CAAO,GAAA,CAAI,mBAAmB,qBAAqB,CAAA;AACnD,MAAA,SAAA,CAAU,mBAAA,CAAoB,UAAU,YAAY,CAAA;AAAA,IACtD,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA;AAEX,EAAAA,kBAAU,MAAM;AACd,IAAA,MAAA,EAAQ,QAAA,CAAS,aAAA,CAAc,WAAA,IAAe,EAAE,CAAA;AAAA,EAClD,CAAA,EAAG,CAAC,WAAA,EAAa,KAAA,EAAO,MAAM,CAAC,CAAA;AAE/B,EAAAA,kBAAU,MAAM;AACd,IAAA,MAAA,EAAQ,WAAA,CAAY,CAAC,QAAQ,CAAA;AAAA,EAC/B,CAAA,EAAG,CAAC,QAAA,EAAU,MAAM,CAAC,CAAA;AAErB,EAAA,MAAM,SAAA,GAAY,CAAC,EAAE,QAAA,GAAW,IAAA,uBAC9BxB,cAAAA,CAAA8D,mBAAAA,EAAA,EACE,QAAA,kBAAA9D,cAAAA;AAAA,IAAC,OAAA;AAAA,IAAA;AAAA,MACE,GAAI,QAAA,GACD,EAAC,GACD;AAAA,QACE,GAAA,EAAK,UAAA;AAAA,QACL,OAAO,QAAA,GACH;AAAA,UACE,MAAA,EAAQ,CAAA,YAAA,EAAe,UAAA,CAAW,MAAA,GAAS,SAAS,CAAC,CAAA,GAAA;AAAA,YAEvD;AAAC,OACP;AAAA,MAEH,QAAA,EAAA,UAAA,KAAe,yBACdA,cAAAA;AAAA,QAAC,kBAAA;AAAA,QAAA;AAAA,UACC,QAAA;AAAA,UAEA,kBAAA,EAAoB,MAAM,aAAA,CAAc,aAAa,CAAA;AAAA,UACrD,WAAA,EAAa,MAAM,aAAA,CAAc,MAAM,CAAA;AAAA,UACvC,OAAA;AAAA,UACA;AAAA;AAAA,OACF,mBAEAA,cAAAA,CAAC,oBAAA,EAAA,EAAqB,IAAA,EAAM,UAAA,KAAe,aAAA,GAAgB,aAAA,GAAgB,MAAA,EAAQ,MAAA,EAAQ,MAAM,aAAA,CAAc,MAAM,CAAA,EAAG;AAAA;AAAA,GAE5H,EACF,CAAA;AAGF,EAAA,MAAM+K,gBAAe,MAAM;AACzB,IAAA,cAAA,GAAiB,WAAA,IAAe,MAAM,CAAA;AAAA,EACxC,CAAA;AAEA,EAAA,uBACE/K,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAWgE,4BAAAA,CAAW,eAAe,eAAe,CAAA,EACvD,QAAA,kBAAAjD,eAAAA,CAACiK,oBAAc,QAAA,EAAd,EAAuB,KAAA,EAAO,EAAE,QAAO,EACrC,QAAA,EAAA;AAAA,IAAA,WAAA,oBACCjK,eAAAA,CAAA+C,mBAAAA,EAAA,EACE,QAAA,EAAA;AAAA,sBAAA/C,gBAAC0B,SAAAA,EAAA,EAAK,OAAA,EAAQ,KAAA,EAAM,OAAM,QAAA,EACvB,QAAA,EAAA;AAAA,QAAA,SAAA,CAAU,EAAE,QAAA,EAAU,KAAA,EAAO,CAAA;AAAA,QAC7B,QAAA,oBACC1B,eAAAA,CAAC0B,SAAAA,EAAA,EAAK,KAAA,EAAM,QAAA,EAAS,WAAU,eAAA,EAC5B,QAAA,EAAA;AAAA,UAAA,cAAA,oBACCzC,cAAAA,CAACiL,QAAA,EAAA,EAAI,QAAA,EAAU,KAAA,EAAO,KAAA,EAAM,SAAA,EAAU,SAAA,EAAU,gBAAA,EAAiB,OAAA,EAASF,aAAAA,EAAc,QAAA,EAAA,cAAA,EAExF,CAAA;AAAA,UAED;AAAA,SAAA,EACH;AAAA,OAAA,EAEJ,CAAA;AAAA,MACC,CAAC,QAAA,oBAAY/K,cAAAA,CAACkL,gBAAA,EAAA,EAAW,MAAA,EAAiB,QAAA,EAAA,SAAA,CAAU,EAAE,QAAA,EAAU,IAAA,EAAM,CAAA,EAAE;AAAA,KAAA,EAC3E,CAAA;AAAA,oBAEFlL,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kCACb,QAAA,kBAAAA,cAAAA;AAAA,MAACmL,mBAAA;AAAA,MAAA;AAAA,QACC,MAAA;AAAA,QACA,IAAA,EAAK,cAAA;AAAA,QACL,WAAWnH,4BAAAA,CAAW,mCAAA,EAAqC,EAAE,YAAA,EAAc,CAAC,aAAa;AAAA;AAAA,KAC3F,EACF;AAAA,GAAA,EACF,CAAA,EACF,CAAA;AAEJ;ACxgBA,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;AASA,SAAS,aAAA,CAAiB,gBAAA,EAAsE,GAAA,EAAW,KAAA,EAAW;AACpH,EAAA,IAAI,CAAC,kBAAkB,OAAO,IAAA;AAC9B,EAAA,OAAO,UAAA,CAAW,gBAAgB,CAAA,mBAAIhE,eAAC,gBAAA,EAAA,EAAiB,GAAA,EAAW,GAAI,KAAA,EAAa,CAAA,GAAK,gBAAA;AAC3F;AAsBO,IAAM,aAAA,GAAgB6D,kBAAAA,CAAW,SAASuH,cAAAA,CAC/C,EAAE,UAAU,IAAA,EAAM,GAAA,EAAK,gBAAA,EAAiB,EACxC,GAAA,EACA;AACA,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,aAAA,CAAc,kBAAkB,GAAG,CAAA;AAAA,EAC5C;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,gBAAA,EAAkB,GAAA,EAAK,KAAK,CAAA;AACnD,CAAC;AAOM,IAAM,YAAA,GAAe,CAAC,OAAA,KAC3B,OAAA,IAAW,IAAA,KAAS,UAAU,OAAO,CAAA,GAAI,OAAA,GAAU,OAAA,EAAS,OAAA,KAAY,KAAA;AAUnE,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;AC5GA,IAAO,qBAAQ,CAAC,EAAE,IAAA,EAAM,SAAA,EAAW,UAAS,KAAuB;AACjE,EAAA,OAAO,SAAA,mBACLpL,cAAAA,CAACqL,WAAA,EAAA,EAAO,IAAA,EAAY,KAAK,SAAA,EAAW,CAAA,mBAEpCrL,cAAAA,CAACqL,WAAA,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.cjs.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.nsPreviewPdf :global .rpv-core__inner-pages {\n scrollbar-width: thin;\n scrollbar-color: transparent transparent;\n}\n.nsPreviewPdf :global .rpv-core__inner-pages::-webkit-scrollbar {\n width: 8px;\n height: 8px;\n}\n.nsPreviewPdf :global .rpv-core__inner-pages::-webkit-scrollbar-thumb {\n background-color: rgba(0, 0, 0, 0);\n border-radius: 4px;\n transition: background-color 0.3s ease 0.3s;\n}\n.nsPreviewPdf :global .rpv-core__inner-pages::-webkit-scrollbar-track {\n background: transparent;\n}\n.nsPreviewPdf :global .rpv-core__inner-pages:hover {\n scrollbar-color: rgba(0, 0, 0, 0.3) transparent;\n}\n.nsPreviewPdf :global .rpv-core__inner-pages:hover::-webkit-scrollbar-thumb {\n background-color: rgba(0, 0, 0, 0.3);\n transition-delay: 0s;\n}\n.nsPreviewPdf :global .rpv-thumbnail__list {\n scrollbar-width: thin;\n scrollbar-color: transparent transparent;\n}\n.nsPreviewPdf :global .rpv-thumbnail__list::-webkit-scrollbar {\n width: 8px;\n height: 8px;\n}\n.nsPreviewPdf :global .rpv-thumbnail__list::-webkit-scrollbar-thumb {\n background-color: rgba(0, 0, 0, 0);\n border-radius: 4px;\n transition: background-color 0.3s ease 0.3s;\n}\n.nsPreviewPdf :global .rpv-thumbnail__list::-webkit-scrollbar-track {\n background: transparent;\n}\n.nsPreviewPdf :global .rpv-thumbnail__list:hover {\n scrollbar-color: rgba(0, 0, 0, 0.3) transparent;\n}\n.nsPreviewPdf :global .rpv-thumbnail__list:hover::-webkit-scrollbar-thumb {\n background-color: rgba(0, 0, 0, 0.3);\n transition-delay: 0s;\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'\n\n/**\n * 音频播放器组件属性接口\n */\nexport interface AudioPlayerProps {\n /** 音频文件URL地址 */\n fileUrl: string\n}\n\n/**\n * 音频播放器组件\n * 提供基本的音频播放功能\n * @param props - 组件属性\n */\nexport default ({ fileUrl }: AudioPlayerProps) => {\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 FileMarkdownOutlined,\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\n/**\n * 文件图标组件属性接口\n */\nexport interface FileIconProps {\n /** 文件后缀名,不区分大小写 */\n suffix?: string\n /** 图标字体大小,默认为22px */\n fontSize?: number\n}\n/**\n * 文件图标组件\n * 根据文件后缀名显示对应的图标\n * 支持常见的文件类型:文档、图片、音视频、压缩包等\n *\n * 支持的文件类型:\n * - 文档:PDF, DOC/DOCX, XLS/XLSX, PPT, TXT, MD/MARKDOWN\n * - 图片:JPG, JPEG, PNG, GIF\n * - 音视频:MP3, MP4, MOV, AVI, FLV\n * - 压缩包:ZIP, RAR, 7Z\n * - 其他:显示为默认图标或文件夹图标\n *\n * @param props - 组件属性\n * @returns 对应文件类型的图标\n */\nexport default ({ suffix, fontSize = 22 }: FileIconProps) => {\n // 设置图标样式:使用主题色和指定字体大小\n const styles = { fontSize, color: LgPrimaryColor }\n\n /**\n * 根据文件后缀名选择对应的图标\n * 使用 useMemo 优化性能,避免每次渲染都重新计算\n */\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 'MD':\n case 'MARKDOWN':\n return <FileMarkdownOutlined />\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]) // 仅在suffix变化时重新计算\n\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\n/**\n * 视频播放器组件属性接口\n */\nexport interface VideoPlayerProps {\n /** 视频文件URL地址 */\n fileUrl: string\n}\n\n/**\n * 视频播放器组件\n * 提供基本的视频播放功能\n * @param props - 组件属性\n */\nexport default ({ fileUrl }: VideoPlayerProps) => {\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\n/**\n * 组件映射类型,用于延时加载\n */\nexport type ComponentMapType = Record<\n string,\n () => Promise<{\n default: React.ComponentType<any>\n }>\n>\n\n/**\n * 基础组件映射表\n */\nconst baseComponentMap: ComponentMapType = {\n // renderMarkdown: () => import('@/components/RenderMarkdown')\n}\n\n/**\n * LazyComponent组件属性接口\n */\nexport interface LazyComponentProps {\n /** 组件类型名称 */\n type: string\n /** 自定义组件映射 */\n customComponents?: ComponentMapType\n /** 其他属性会透传给组件 */\n [key: string]: any\n}\n\n/**\n * 延时加载组件\n * 根据type动态加载对应的组件,支持自定义组件映射\n * 使用示例:<LazyComponent type=\"renderMarkdown\" data={{}} loading={true} />\n * @param props - 组件属性\n */\nexport default ({ type, customComponents, ...rest }: LazyComponentProps) => {\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 { useMemo } from 'react'\nimport LazyComponent, { ComponentMapType } from '../LazyComponent'\nimport './markdown.less'\n\n/**\n * Markdown渲染组件属性接口\n */\nexport interface RenderMarkdownProps {\n /** Markdown内容 */\n content?: string\n /** 搜索关键字 */\n searchValue?: string\n /** 自定义组件映射 */\n customComponents?: ComponentMapType\n /** 内容变化回调 */\n onChange?: (value: string) => void\n /** 部分内容变化回调 */\n onPartialChange?: (oldValue: string, newValue: string) => void\n}\n\n// ========================\n// MarkdownIt 基础设置\n// ========================\nconst md = markdownit({ html: true, breaks: true })\n\n// 所有 link 默认打开新标签页\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}\n\n// ========================\n// 工具函数:安全解析 data JSON\n// ========================\nfunction parseData(raw: string) {\n let obj: any = {}\n try {\n // 尝试直接 JSON.parse\n obj = JSON.parse(raw)\n } catch {\n try {\n // JSON 修复后再解析\n obj = JSON.parse(jsonrepair(raw))\n } catch {\n // 解析失败就保留原文\n obj = { _raw: raw }\n }\n }\n return obj\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\n// 占位符格式,例如 \"__ALERT_DATA_0__\"\nfunction makePlaceholder(id: number) {\n return `__ALERT_DATA_${id}__`\n}\n\n// ============================================================\n// 抽取 :::alert ... ::: 块,把 data={...} 替换成占位符\n// ============================================================\n//\n// 步骤:\n// 1. 找到所有 :::alert\n// 2. 从中提取 type 和 data 原文\n// 3. 用单行格式替换为 `:::alert type=xx data=\"__PH__\" :::`\n// 4. 返回替换后的字符串 + 占位符映射表\n//\nfunction extractAlertPlaceholders(src: string) {\n let pos = 0\n let id = 0\n let out = ''\n const placeholders = new Map<string, string>()\n\n while (pos < src.length) {\n const start = src.indexOf(':::alert', pos)\n if (start === -1) {\n // 无更多 alert,直接收尾\n out += src.slice(pos)\n break\n }\n\n // 保留 alert 之前的部分\n out += src.slice(pos, start)\n\n // ========================\n // 定位结束 ::: 块\n // ========================\n\n const afterStart = src.slice(start)\n\n // 优先匹配 “换行开始的 :::” 作为块级结束符\n const relAfter = afterStart.slice(':::alert'.length)\n const matchLineEnd = relAfter.search(/\\n:::\\s*(\\n|$)/)\n let endIdx = -1\n\n if (matchLineEnd !== -1) {\n // 找到块级结束符\n endIdx = start + ':::alert'.length + matchLineEnd + 1\n } else {\n // 否则退化为最近的 \":::\"\n const fallback = src.indexOf(':::', start + ':::alert'.length)\n if (fallback === -1) {\n // 没找到闭合符,直接结束\n out += src.slice(start)\n pos = src.length\n break\n } else {\n endIdx = fallback\n }\n }\n\n // ========================\n // 解析 inner(alert 内部内容)\n // ========================\n const inner = src.slice(start + ':::alert'.length, endIdx).trim()\n\n // 解析 type=xxxx\n const typeMatch = inner.match(/type\\s*=\\s*(?:(['\"])(.*?)\\1|(\\S+))/)\n const type = typeMatch ? (typeMatch[2] ?? typeMatch[3]) : undefined\n\n // data= 后面整个都是 data 内容\n const dataIdx = inner.search(/\\bdata\\s*=/)\n let rawData = ''\n if (dataIdx !== -1) {\n rawData = inner.slice(dataIdx + inner.slice(dataIdx).match(/\\bdata\\s*=/)![0].length).trim()\n }\n\n // 生成占位符\n const ph = makePlaceholder(id++)\n placeholders.set(ph, rawData)\n\n // 使用 单行 alert 重写,此格式能被 inline 插件识别\n const typeText = type ? ` type=${JSON.stringify(type)}` : ''\n out += `:::alert${typeText} data=\"${ph}\" :::`\n\n // 跳到结束 ::: 后继续扫描\n const realClose = src.indexOf(':::', endIdx)\n pos = realClose === -1 ? endIdx : realClose + 3\n }\n\n return { text: out, placeholders }\n}\n\n// ============================================================\n// MarkdownIt inline 插件\n// 将单行 `:::alert ... :::` 转成 <lazy-component ... />\n// ============================================================\nfunction alertInlinePlugin(md: any) {\n md.inline.ruler.before('emphasis', 'alert_inline', function (state: any, silent: boolean) {\n const pos = state.pos\n const src = state.src\n if (src.slice(pos, pos + 3) !== ':::') return false\n\n // 匹配“同一行中的 :::alert ... :::”\n const m = src.slice(pos).match(/^:::alert\\b([^\\n\\r]*?):::/)\n if (!m) return false\n if (silent) return false\n\n // m[1] 是 type=xxx data=\"xxx\" ...\n const raw = m[1].trim()\n\n // 构造 HTML inline token\n const html = `<lazy-component ${raw}></lazy-component>`\n const token = state.push('html_inline', '', 0)\n token.content = html\n\n // 移动光标\n state.pos += m[0].length\n return true\n })\n}\n\n// 注册 inline 插件(适配 HMR)\ntry {\n md.use(alertInlinePlugin)\n} catch {}\n\n/**\n * Markdown渲染组件\n * 将Markdown文本转换为HTML并渲染为React组件\n * 支持自定义组件、搜索高亮、内容编辑等功能\n * @param props - 组件属性\n */\nexport default ({ content = '', searchValue, customComponents, onChange, onPartialChange }: RenderMarkdownProps) => {\n // console.log('RenderMarkdown', content)\n const reactContent = useMemo(() => {\n if (!content) return null\n\n let fixedContent = content\n\n // ============================================================\n // 如果有 alert 未闭合,则补上一个 :::(防止 md 崩溃)\n // ============================================================\n const openCount = (fixedContent.match(/:::alert\\b/g) || []).length\n const closeCount = (fixedContent.match(/\\s*:::\\s*/gm) || []).length - openCount\n let incomplete = false\n\n if (openCount > closeCount) {\n incomplete = true\n fixedContent += ':::'\n }\n\n // 1) 抽取 data={...},替换为占位符 alert\n const { text: preprocessed, placeholders } = extractAlertPlaceholders(fixedContent)\n\n // 2) Markdown 渲染\n let rawHtml = md.render(preprocessed)\n\n // 3) 关键词高亮\n rawHtml = searchValue ? highlightKeywords(rawHtml, [searchValue]) : rawHtml\n\n // ============================================================\n // 4) 把 <lazy-component> 转成真正的 React LazyComponent\n // ============================================================\n\n let lazyIndex = -1\n const allLazyMatches = [...rawHtml.matchAll(/<lazy-component/gi)]\n const lastLazyIndex = allLazyMatches.length - 1\n // console.log('allLazyMatches', rawHtml, allLazyMatches)\n return parse(rawHtml, {\n replace: (domNode) => {\n if ((domNode as Element).name === 'lazy-component') {\n lazyIndex++\n\n const el = domNode as Element\n const type = el.attribs.type\n const dataAttr = el.attribs.data || ''\n let data: any = {}\n\n // 用占位符从 Map 中恢复原始 data 文本并解析成对象\n if (/^__ALERT_DATA_\\d+__$/.test(dataAttr)) {\n const raw = placeholders.get(dataAttr) ?? ''\n data = parseData(raw)\n // console.log('__ALERT_DATA_', raw, parseData(raw))\n }\n\n // 如果 alert 未闭合,则最后一个 lazy 标记 loading\n const loading = incomplete && lazyIndex === lastLazyIndex\n\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'\n\n/**\n * Markdown预览组件属性接口\n */\nexport interface MarkdownPreviewProps {\n /** Markdown文件URL地址 */\n fileUrl: string\n /** 搜索关键字 */\n searchValue?: string\n}\n\n/**\n * Markdown预览组件\n * 从指定URL获取Markdown内容并渲染显示\n * @param props - 组件属性\n */\nexport default ({ fileUrl, searchValue }: MarkdownPreviewProps) => {\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","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\n/**\n * 类型判断函数\n * @param val - 要判断的值\n * @param type - 目标类型名\n * @returns 是否为目标类型\n */\nexport function is(val: unknown, type: string) {\n return toString.call(val) === `[object ${type}]`\n}\n\n/**\n * 判断值是否为 undefined\n * @param val - 要判断的值\n * @returns 是否为 undefined\n */\nexport function isUnDef<T = unknown>(val?: T): val is T {\n return is(val, 'Undefined')\n}\n\n/**\n * 判断值是否已定义(非 undefined)\n * @param val - 要判断的值\n * @returns 是否已定义\n */\nexport function isDef<T = unknown>(val?: T): val is T {\n return !isUnDef(val)\n // return typeof val !== 'undefined'\n}\n/**\n * 判断值是否为对象(不包括 FormData 等)\n * @param val - 要判断的值\n * @returns 是否为对象\n */\nexport function isObject(val: any): val is Record<any, any> {\n return is(val, 'Object')\n}\n\n/**\n * 判断对象是否为空对象\n * @param val - 要判断的值\n * @returns 是否为空对象\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\n/**\n * 判断值是否为 Date 对象\n * @param val - 要判断的值\n * @returns 是否为 Date 对象\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\nexport const isLocalhost = (host?: string): boolean => {\n return /^(localhost:)/.test(host || location.host)\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 { createContext, ReactNode, useContext } from 'react'\n\n/**\n * 通用的 Valtio Context 工厂\n * 支持:\n * - useStore() 获取 store 实例\n */\nexport function useCreateValtioContext<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","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/**\n * 深拷贝函数\n * @param obj - 要拷贝的对象\n * @param isJson - 是否使用 JSON 方式深拷贝,默认为 true\n * @returns 拷贝后的新对象\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 * 深度比较两个对象是否相等\n * 支持 Date、RegExp、Map、Set、Array、Function、Object 等类型\n * @param a - 第一个对象\n * @param b - 第二个对象\n * @returns 是否相等\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}\n/**\n * 深度合并两个对象,对于对象类型进行递归合并\n * @param base - 基础对象\n * @param override - 覆盖对象\n * @returns 合并后的新对象\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\n/**\n * 将键值对象转换为选项数组格式\n * @param obj - 键值对象\n * @returns 选项数组,包含 label 和 value 属性\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/**\n * 将数组转换为以指定字段为键的对象\n * @param arr - 要转换的数组\n * @param key - 用作对象键的字段名\n * @returns 转换后的对象\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/**\n * 使用 setTimeout 模拟 setInterval,避免 setInterval 的问题\n * @param fn - 要重复执行的函数\n * @param t - 间隔时间(毫秒)\n * @returns 控制对象,包含 isRun 和 cancel 方法\n */\nexport interface NsSetIntervalReturnType {\n /** 检查是否正在运行 */\n isRun: () => boolean\n /** 取消定时器 */\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/**\n * 生成不重复的唯一ID\n * @returns 唯一ID字符串\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/**\n * 复制文本到剪贴板\n * 优先使用 navigator.clipboard API,降级使用 execCommand\n * @param text - 要复制的文本\n * @returns Promise\n */\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}\n/**\n * 从文件路径中提取文件名\n * @param filePath - 文件路径\n * @returns 文件名\n */\nexport const getFileName = (filePath: string) => {\n return filePath.split('?')[0].split('/').pop() || ''\n}\n\n/**\n * 从文件名中获取文件扩展名\n * @param fileName - 文件名\n * @returns 文件扩展名\n */\nexport const getFileSuffixName = (fileName: string) => {\n return fileName.split('.').pop() || ''\n}\n/**\n * 将文本中的换行符转换为 HTML 换行标签\n * @param con - 要转换的文本\n * @returns 转换后的 HTML 字符串\n */\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 window.URL.revokeObjectURL(url)\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\n// 对象转换函数,将源对象转换为目标对象\nexport function transform<T extends object, U extends object>(\n source: T,\n fieldMap: {\n [K in keyof U]: keyof T | ((source: T) => U[K]) | U[K]\n }\n): U {\n const result = {} as U\n for (const [targetKey, mapping] of Object.entries(fieldMap)) {\n const key = targetKey as keyof U\n if (typeof mapping === 'function') {\n result[key] = (mapping as (src: T) => U[typeof key])(source)\n } else if (typeof mapping === 'string' && source && mapping in source) {\n result[key] = source[mapping as keyof T] as unknown as U[typeof key]\n } else {\n result[key] = mapping as U[typeof key]\n }\n }\n return result\n}\n\n// 批量对象转换函数\nexport function transforms<T extends object, U extends object>(\n sources: T[],\n fieldMap: {\n [K in keyof U]: keyof T | ((source: T) => U[K]) | U[K]\n }\n): U[] {\n return sources?.map((source) => transform<T, U>(source, fieldMap)) || []\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/**\n * 创建同时具有 ref 和 state 特性的状态\n * @param init - 初始值\n * @returns [state, setState, getState] 元组,包含状态值、设置函数和获取函数\n */\nexport function useRefState<T>(init: T) {\n const [state, setState] = useState(init)\n const stateRef = useRef(init)\n\n /**\n * 同时更新 ref 和 state\n * @param newVal - 新值\n */\n const setProxy = (newVal: T) => {\n stateRef.current = newVal\n setState(newVal)\n }\n\n /**\n * 获取当前 ref 值\n * @returns 当前状态值\n */\n const getState = () => stateRef.current\n\n return [state, setProxy, getState] as const\n}\n","import { useEffect, useState } from 'react'\n\n/**\n * 同步输入框组件和外部状态的 Hook\n * 解决输入中文时因连续渲染关闭中文输入法的问题\n * @param storeValue - 外部存储的值\n * @param setStoreValue - 设置外部存储值的函数\n * @returns 包含 inputValue 和 setInputValue 的对象\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 /**\n * 处理输入值变化,同时更新外部存储和内部状态\n * @param value - 新的输入值\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\nexport interface UserInfo {\n id: number\n orgName: string\n name: string\n username: string\n mobile: string\n avatar: string\n myInviteCode: string\n email?: string\n remark?: string\n roles: number[]\n permissions: string[]\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 } from 'axios'\nimport { emit } from '../hooks'\nimport { isBlob } from './is'\nimport { showMessage } from './message'\nimport { getSignPath, getToken, TOKEN_KEY } from './session'\n\nexport const OK = 200\nexport const ERROR = 500\nexport const MISSING_PARAMETER = 400\nexport const UNAUTHORIZED = 401\nexport const FORBIDDEN = 403\nexport const NOT_FOUND = 404\nexport const PERMISSION_DENIED = 13001\n\n// 关键:新增 createRequest\nexport default function createRequest(baseURL: string = '/api') {\n const redirectUrl = () => {\n emit('jumpLink', { url: `/uc${getSignPath()}` })\n }\n const instance = axios.create({\n baseURL,\n timeout: 60000\n })\n\n // ---------- request interceptor ----------\n instance.interceptors.request.use(\n function (config) {\n config.headers[TOKEN_KEY] = getToken()\n return config\n },\n function (error) {\n return Promise.reject(error)\n }\n )\n\n // ---------- response interceptor ----------\n instance.interceptors.response.use(\n function (response) {\n if (isBlob(response.data)) return response\n\n if (response.data?.code !== OK) {\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 default:\n if (showError) showMessage({ content: err.response?.data.message || '请求错误!', type: 'error' })\n }\n }\n\n return Promise.reject(err)\n }\n )\n\n // -------- Export methods --------\n return {\n get: async (url: string, params?: any, options?: AxiosRequestConfig) => {\n const res = await instance({ method: 'get', url, params, ...options })\n return res.data\n },\n\n post: async (url: string, data?: any, options?: AxiosRequestConfig) => {\n const res = await instance({ method: 'post', url, data, ...options })\n return res.data\n },\n\n put: async (url: string, data?: any, options?: AxiosRequestConfig) => {\n const res = await instance({ method: 'put', url, data, ...options })\n return res.data\n },\n\n delete: async (url: string, data?: any, options?: AxiosRequestConfig) => {\n const res = await instance({ method: 'delete', url, data, ...options })\n return res.data\n }\n }\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 if (!url) return\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}\n/**\n * PDF预览组件属性接口\n */\nexport interface PdfPreviewProps {\n /** PDF文件URL地址 */\n fileUrl: string\n /** 当前页码,默认为1 */\n pageNo?: number\n /** 缩放比例,默认为1 */\n scale?: number\n /** 是否显示缩略图,默认为true */\n isHasThumbnails?: boolean\n /** PDF文件密码 */\n password?: string\n /** 密码设置回调 */\n onSetPassword?: (password: string) => void\n /** 页码变化回调 */\n onSetPageNo?: (pageNo: number) => void\n}\n\n/**\n * PDF预览组件\n * 基于react-pdf-viewer实现的PDF文件预览功能\n * 支持密码保护、缩略图、缩放、页面导航等功能\n * @param props - 组件属性\n */\nexport default ({ password, fileUrl, pageNo = 1, scale = 1, isHasThumbnails = true, onSetPassword, onSetPageNo }: PdfPreviewProps) => {\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={`//logosdata.cn/public/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: '//logosdata.cn/public/pdf/pdfjs-dist@3.2.146/cmaps/', // 使用可用的源\n cMapPacked: true,\n // 禁用字体子集化,确保完整字体加载\n disableFontFace: false,\n // 启用标准字体支持\n standardFontDataUrl: '//logosdata.cn/public/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\n/**\n * 文件预览组件属性接口\n */\nexport interface FilePreviewProps {\n /** 文件URL地址 */\n fileUrl: string\n /** 文件后缀名 */\n suffix?: string\n /** PDF文件密码 */\n password?: string\n /** 搜索关键字 */\n searchValue?: string\n /** PDF预览参数 */\n pdfParams?: {\n /** 当前页码 */\n pageNo?: number\n /** 缩放比例 */\n scale?: number\n /** 是否显示缩略图 */\n isHasThumbnails?: boolean\n /** 页码变化回调 */\n onSetPageNo?: (pageNo: number) => void\n }\n /** 文件参数 */\n fileParams?: ObjectType<string>\n /** 密码设置成功回调 */\n onSetPassSuccess?: () => void\n}\n\n/**\n * 文件预览组件\n * 支持图片、PDF、视频、音频、Markdown等文件格式的预览\n * @param props - 组件属性\n */\nexport default ({ suffix, fileUrl, pdfParams, password, searchValue }: FilePreviewProps) => {\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'\n\n/**\n * 文件预览抽屉组件属性接口\n */\nexport interface FilePreviewDrawerProps {\n /** 是否打开抽屉 */\n open: boolean\n /** 关闭抽屉的回调函数 */\n onClose: () => void\n /** 抽屉标题,默认为'文件预览' */\n title?: string\n /** 文件URL地址 */\n fileUrl: string\n /** 文件后缀名 */\n suffix?: string\n /** PDF文件密码 */\n password?: string\n /** 文件参数 */\n fileParams?: ObjectType<string>\n /** PDF预览参数 */\n pdfParams?: {\n /** 当前页码 */\n pageNo?: number\n /** 缩放比例 */\n scale?: number\n /** 是否显示缩略图 */\n isHasThumbnails?: boolean\n /** 页码变化回调 */\n onSetPageNo?: (pageNo: number) => void\n }\n /** 密码设置成功回调 */\n onSetPassSuccess?: () => void\n}\n\n/**\n * 文件预览抽屉组件\n * 在抽屉中显示文件预览,支持各种文件格式\n * 全屏显示,提供更好的文件查看体验\n *\n * @example\n * <FilePreviewDrawer\n * open={isOpen}\n * fileUrl=\"https://example.com/file.pdf\"\n * suffix=\"pdf\"\n * title=\"PDF文件预览\"\n * onClose={() => setIsOpen(false)}\n * />\n *\n * @param props - 组件属性\n * @returns 文件预览抽屉组件\n */\nexport default ({\n open,\n fileUrl,\n suffix,\n title = '文件预览',\n onClose,\n password,\n fileParams,\n pdfParams,\n onSetPassSuccess\n}: FilePreviewDrawerProps) => {\n return (\n <Drawer\n title={title}\n push={false}\n width=\"100%\"\n open={open}\n onClose={onClose}\n // 全屏宽度,提供更好的文件预览体验\n >\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\n/**\n * Iframe组件属性接口\n */\nexport interface IframeProps {\n /** iframe ID */\n id?: string\n /** iframe源地址 */\n src: string\n /** 自定义类名 */\n className?: string\n /** 加载完成回调 */\n onLoad?: () => void\n}\n\n/**\n * Iframe组件\n * 支持加载状态、URL参数处理、防缓存等功能\n * @param props - 组件属性\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 TiptapLink from '@tiptap/extension-link'\nimport { Plugin, TextSelection } from '@tiptap/pm/state'\nimport type { EditorView } from '@tiptap/pm/view'\nimport { getMarkRange } from '@tiptap/react'\n\nexport const Link = TiptapLink.extend({\n inclusive: false,\n\n parseHTML() {\n return [\n {\n tag: 'a[href]:not([data-type=\"button\"]):not([href *= \"javascript:\" i])'\n }\n ]\n },\n\n addProseMirrorPlugins() {\n const { editor } = this\n\n return [\n ...(this.parent?.() || []),\n new Plugin({\n props: {\n handleKeyDown: (_: EditorView, event: KeyboardEvent) => {\n const { selection } = editor.state\n\n if (event.key === 'Escape' && selection.empty !== true) {\n editor.commands.focus(selection.to, { scrollIntoView: false })\n }\n\n return false\n },\n handleClick(view, pos) {\n const { schema, doc, tr } = view.state\n let range: ReturnType<typeof getMarkRange> | undefined\n\n if (schema.marks.link) {\n range = getMarkRange(doc.resolve(pos), schema.marks.link)\n }\n\n if (!range) {\n return\n }\n\n const { from, to } = range\n const start = Math.min(from, to)\n const end = Math.max(from, to)\n\n if (pos < start || pos > end) {\n return\n }\n\n const $start = doc.resolve(start)\n const $end = doc.resolve(end)\n const transaction = tr.setSelection(new TextSelection($start, $end))\n\n view.dispatch(transaction)\n }\n }\n })\n ]\n }\n})\n\nexport default Link\n","import { Plugin, PluginKey } from '@tiptap/pm/state'\nimport { Decoration, DecorationSet } from '@tiptap/pm/view'\nimport { Extension, isNodeSelection } from '@tiptap/react'\n\nexport const Selection = Extension.create({\n name: 'selection',\n\n addProseMirrorPlugins() {\n const { editor } = this\n\n return [\n new Plugin({\n key: new PluginKey('selection'),\n props: {\n decorations(state) {\n if (state.selection.empty) {\n return null\n }\n\n if (editor.isFocused === true || !editor.isEditable) {\n return null\n }\n\n if (isNodeSelection(state.selection)) {\n return null\n }\n\n return DecorationSet.create(state.doc, [\n Decoration.inline(state.selection.from, state.selection.to, {\n class: 'selection'\n })\n ])\n }\n }\n })\n ]\n }\n})\n\nexport default Selection\n","import type { Node, NodeType } from '@tiptap/pm/model'\nimport { Plugin, PluginKey } from '@tiptap/pm/state'\nimport { Extension } from '@tiptap/react'\n\nfunction nodeEqualsType({ types, node }: { types: NodeType | NodeType[]; node: Node | null }) {\n if (!node) return false\n\n if (Array.isArray(types)) {\n return types.includes(node.type)\n }\n\n return node.type === types\n}\n\nexport interface TrailingNodeOptions {\n node: string\n notAfter: string[]\n}\n\nexport const TrailingNode = Extension.create<TrailingNodeOptions>({\n name: 'trailingNode',\n\n addOptions() {\n return {\n node: 'paragraph',\n notAfter: ['paragraph']\n }\n },\n\n addProseMirrorPlugins() {\n const plugin = new PluginKey(this.name)\n const disabledNodes = Object.entries(this.editor.schema.nodes)\n .map(([, value]) => value)\n .filter((node) => this.options.notAfter.includes(node.name))\n\n return [\n new Plugin({\n key: plugin,\n appendTransaction: (_, __, state) => {\n const { doc, tr, schema } = state\n const shouldInsertNodeAtEnd = plugin.getState(state)\n const endPosition = doc.content.size\n const type = schema.nodes[this.options.node]\n\n if (!shouldInsertNodeAtEnd) {\n return null\n }\n\n if (type) {\n return tr.insert(endPosition, type.create())\n }\n\n return null\n },\n state: {\n init: (_, state) => {\n const lastNode = state.tr.doc.lastChild\n\n return !nodeEqualsType({ node: lastNode, types: disabledNodes })\n },\n apply: (tr, value) => {\n if (!tr.docChanged) {\n return value\n }\n\n const lastNode = tr.doc.lastChild\n\n return !nodeEqualsType({ node: lastNode, types: disabledNodes })\n }\n }\n })\n ]\n }\n})\n\nexport default TrailingNode\n","import './tooltip.less'\nimport {\n autoUpdate,\n flip,\n FloatingDelayGroup,\n FloatingPortal,\n offset,\n shift,\n useDismiss,\n useFloating,\n useFocus,\n useHover,\n useInteractions,\n useMergeRefs,\n useRole,\n type Placement,\n type ReferenceType,\n type UseFloatingReturn\n} from '@floating-ui/react'\nimport * as React from 'react'\n\ninterface TooltipProviderProps {\n children: React.ReactNode\n initialOpen?: boolean\n placement?: Placement\n open?: boolean\n onOpenChange?: (open: boolean) => void\n delay?: number\n closeDelay?: number\n timeout?: number\n useDelayGroup?: boolean\n}\n\ninterface TooltipTriggerProps extends Omit<React.HTMLProps<HTMLElement>, 'ref'> {\n asChild?: boolean\n children: React.ReactNode\n}\n\ninterface TooltipContentProps extends Omit<React.HTMLProps<HTMLDivElement>, 'ref'> {\n children?: React.ReactNode\n portal?: boolean\n portalProps?: Omit<React.ComponentProps<typeof FloatingPortal>, 'children'>\n}\n\ninterface TooltipContextValue extends UseFloatingReturn<ReferenceType> {\n open: boolean\n setOpen: (open: boolean) => void\n getReferenceProps: (userProps?: React.HTMLProps<HTMLElement>) => Record<string, unknown>\n getFloatingProps: (userProps?: React.HTMLProps<HTMLDivElement>) => Record<string, unknown>\n}\n\nfunction useTooltip({\n initialOpen = false,\n placement = 'top',\n open: controlledOpen,\n onOpenChange: setControlledOpen,\n delay = 600,\n closeDelay = 0\n}: Omit<TooltipProviderProps, 'children'> = {}) {\n const [uncontrolledOpen, setUncontrolledOpen] = React.useState<boolean>(initialOpen)\n\n const open = controlledOpen ?? uncontrolledOpen\n const setOpen = setControlledOpen ?? setUncontrolledOpen\n\n const data = useFloating({\n placement,\n open,\n onOpenChange: setOpen,\n whileElementsMounted: autoUpdate,\n middleware: [\n offset(4),\n flip({\n crossAxis: placement.includes('-'),\n fallbackAxisSideDirection: 'start',\n padding: 4\n }),\n shift({ padding: 4 })\n ]\n })\n\n const context = data.context\n\n const hover = useHover(context, {\n mouseOnly: true,\n move: false,\n restMs: delay,\n enabled: controlledOpen == null,\n delay: {\n close: closeDelay\n }\n })\n const focus = useFocus(context, {\n enabled: controlledOpen == null\n })\n const dismiss = useDismiss(context)\n const role = useRole(context, { role: 'tooltip' })\n\n const interactions = useInteractions([hover, focus, dismiss, role])\n\n return React.useMemo(\n () => ({\n open,\n setOpen,\n ...interactions,\n ...data\n }),\n [open, setOpen, interactions, data]\n )\n}\n\nconst TooltipContext = React.createContext<TooltipContextValue | null>(null)\n\nfunction useTooltipContext() {\n const context = React.useContext(TooltipContext)\n\n if (context == null) {\n throw new Error('Tooltip components must be wrapped in <TooltipProvider />')\n }\n\n return context\n}\n\nexport function Tooltip({ children, ...props }: TooltipProviderProps) {\n const tooltip = useTooltip(props)\n\n if (!props.useDelayGroup) {\n return <TooltipContext.Provider value={tooltip}>{children}</TooltipContext.Provider>\n }\n\n return (\n <FloatingDelayGroup delay={{ open: props.delay ?? 0, close: props.closeDelay ?? 0 }} timeoutMs={props.timeout}>\n <TooltipContext.Provider value={tooltip}>{children}</TooltipContext.Provider>\n </FloatingDelayGroup>\n )\n}\n\nexport const TooltipTrigger = React.forwardRef<HTMLElement, TooltipTriggerProps>(function TooltipTrigger(\n { children, asChild = false, ...props },\n propRef\n) {\n const context = useTooltipContext()\n const childrenRef = React.isValidElement(children)\n ? parseInt(React.version, 10) >= 19\n ? // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (children as { props: { ref?: React.Ref<any> } }).props.ref\n : // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (children as any).ref\n : undefined\n const ref = useMergeRefs([context.refs.setReference, propRef, childrenRef])\n\n if (asChild && React.isValidElement(children)) {\n const dataAttributes = {\n 'data-tooltip-state': context.open ? 'open' : 'closed'\n }\n\n return React.cloneElement(\n children,\n context.getReferenceProps({\n ref,\n ...props,\n ...(typeof children.props === 'object' ? children.props : {}),\n ...dataAttributes\n })\n )\n }\n\n return (\n <button ref={ref} data-tooltip-state={context.open ? 'open' : 'closed'} {...context.getReferenceProps(props)}>\n {children}\n </button>\n )\n})\n\nexport const TooltipContent = React.forwardRef<HTMLDivElement, TooltipContentProps>(function TooltipContent(\n { style, children, portal = true, portalProps = {}, ...props },\n propRef\n) {\n const context = useTooltipContext()\n const ref = useMergeRefs([context.refs.setFloating, propRef])\n\n if (!context.open) return null\n\n const content = (\n <div\n ref={ref}\n style={{\n ...context.floatingStyles,\n ...style\n }}\n {...context.getFloatingProps(props)}\n className=\"tiptap-tooltip\"\n >\n {children}\n </div>\n )\n\n if (portal) {\n return <FloatingPortal {...portalProps}>{content}</FloatingPortal>\n }\n\n return content\n})\n\nTooltip.displayName = 'Tooltip'\nTooltipTrigger.displayName = 'TooltipTrigger'\nTooltipContent.displayName = 'TooltipContent'\n","import { Tooltip, TooltipContent, TooltipTrigger } from '../tooltip'\nimport * as React from 'react'\n\nimport './button-colors.less'\nimport './button-group.less'\nimport './button.less'\n\ntype PlatformShortcuts = Record<string, string>\n\nexport interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n className?: string\n showTooltip?: boolean\n tooltip?: React.ReactNode\n shortcutKeys?: string\n}\n\nexport const MAC_SYMBOLS: PlatformShortcuts = {\n ctrl: '⌘',\n alt: '⌥',\n shift: '⇧'\n} as const\n\nexport const formatShortcutKey = (key: string, isMac: boolean) => {\n if (isMac) {\n const lowerKey = key.toLowerCase()\n return MAC_SYMBOLS[lowerKey] || key.toUpperCase()\n }\n return key.charAt(0).toUpperCase() + key.slice(1)\n}\n\nexport const parseShortcutKeys = (shortcutKeys: string | undefined, isMac: boolean) => {\n if (!shortcutKeys) return []\n\n return shortcutKeys\n .split('-')\n .map((key) => key.trim())\n .map((key) => formatShortcutKey(key, isMac))\n}\n\nexport const ShortcutDisplay: React.FC<{ shortcuts: string[] }> = ({ shortcuts }) => {\n if (shortcuts.length === 0) return null\n\n return (\n <div>\n {shortcuts.map((key, index) => (\n <React.Fragment key={index}>\n {index > 0 && <kbd>+</kbd>}\n <kbd>{key}</kbd>\n </React.Fragment>\n ))}\n </div>\n )\n}\n\nexport const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({ className = '', children, tooltip, showTooltip = true, shortcutKeys, 'aria-label': ariaLabel, ...props }, ref) => {\n const isMac = React.useMemo(() => typeof navigator !== 'undefined' && navigator.platform.toLowerCase().includes('mac'), [])\n\n const shortcuts = React.useMemo(() => parseShortcutKeys(shortcutKeys, isMac), [shortcutKeys, isMac])\n\n if (!tooltip || !showTooltip) {\n return (\n <button className={`tiptap-button ${className}`.trim()} ref={ref} aria-label={ariaLabel} {...props}>\n {children}\n </button>\n )\n }\n\n return (\n <Tooltip delay={200}>\n <TooltipTrigger className={`tiptap-button ${className}`.trim()} ref={ref} aria-label={ariaLabel} {...props}>\n {children}\n </TooltipTrigger>\n <TooltipContent>\n {tooltip}\n <ShortcutDisplay shortcuts={shortcuts} />\n </TooltipContent>\n </Tooltip>\n )\n }\n)\n\nButton.displayName = 'Button'\n\nexport default Button\n","import * as React from 'react'\n\ntype SpacerOrientation = 'horizontal' | 'vertical'\n\ninterface SpacerProps extends React.HTMLAttributes<HTMLDivElement> {\n orientation?: SpacerOrientation\n size?: string | number\n}\n\nexport const Spacer = React.forwardRef<HTMLDivElement, SpacerProps>(\n ({ orientation = 'horizontal', size, className = '', style = {}, ...props }, ref) => {\n const computedStyle = {\n ...style,\n ...(orientation === 'horizontal' && !size && { flex: 1 }),\n ...(size && {\n width: orientation === 'vertical' ? '1px' : size,\n height: orientation === 'horizontal' ? '1px' : size\n })\n }\n\n return <div ref={ref} {...props} className={className} style={computedStyle} />\n }\n)\n\nSpacer.displayName = 'Spacer'\n","import './separator.less'\nimport * as React from 'react'\n\ntype Orientation = 'horizontal' | 'vertical'\n\nexport interface SeparatorProps extends React.HTMLAttributes<HTMLDivElement> {\n orientation?: Orientation\n decorative?: boolean\n}\n\nexport const Separator = React.forwardRef<HTMLDivElement, SeparatorProps>(\n ({ decorative, orientation = 'vertical', className = '', ...divProps }, ref) => {\n const ariaOrientation = orientation === 'vertical' ? orientation : undefined\n const semanticProps = decorative ? { role: 'none' } : { 'aria-orientation': ariaOrientation, role: 'separator' }\n\n return <div className={`tiptap-separator ${className}`.trim()} data-orientation={orientation} {...semanticProps} {...divProps} ref={ref} />\n }\n)\n\nSeparator.displayName = 'Separator'\n","import { Separator } from '../../tiptap-ui-primitive/separator'\nimport './toolbar.less'\nimport * as React from 'react'\n\ntype BaseProps = React.HTMLAttributes<HTMLDivElement>\n\ninterface ToolbarProps extends BaseProps {\n variant?: 'floating' | 'fixed'\n}\n\nconst mergeRefs = <T,>(refs: Array<React.RefObject<T> | React.Ref<T> | null | undefined>): React.RefCallback<T> => {\n return (value) => {\n refs.forEach((ref) => {\n if (typeof ref === 'function') {\n ref(value)\n } else if (ref != null) {\n ;(ref as React.MutableRefObject<T | null>).current = value\n }\n })\n }\n}\n\nconst useObserveVisibility = (ref: React.RefObject<HTMLElement | null>, callback: () => void): void => {\n React.useEffect(() => {\n const element = ref.current\n if (!element) return\n\n let isMounted = true\n\n if (isMounted) {\n requestAnimationFrame(callback)\n }\n\n const observer = new MutationObserver(() => {\n if (isMounted) {\n requestAnimationFrame(callback)\n }\n })\n\n observer.observe(element, {\n childList: true,\n subtree: true,\n attributes: true\n })\n\n return () => {\n isMounted = false\n observer.disconnect()\n }\n }, [ref, callback])\n}\n\nconst useToolbarKeyboardNav = (toolbarRef: React.RefObject<HTMLDivElement | null>): void => {\n React.useEffect(() => {\n const toolbar = toolbarRef.current\n if (!toolbar) return\n\n const getFocusableElements = () =>\n Array.from(toolbar.querySelectorAll<HTMLElement>('button:not([disabled]), [role=\"button\"]:not([disabled]), [tabindex=\"0\"]:not([disabled])'))\n\n const navigateToIndex = (e: KeyboardEvent, targetIndex: number, elements: HTMLElement[]) => {\n e.preventDefault()\n let nextIndex = targetIndex\n\n if (nextIndex >= elements.length) {\n nextIndex = 0\n } else if (nextIndex < 0) {\n nextIndex = elements.length - 1\n }\n\n elements[nextIndex]?.focus()\n }\n\n const handleKeyDown = (e: KeyboardEvent) => {\n const focusableElements = getFocusableElements()\n if (!focusableElements.length) return\n\n const currentElement = document.activeElement as HTMLElement\n const currentIndex = focusableElements.indexOf(currentElement)\n\n if (!toolbar.contains(currentElement)) return\n\n const keyActions: Record<string, () => void> = {\n ArrowRight: () => navigateToIndex(e, currentIndex + 1, focusableElements),\n ArrowDown: () => navigateToIndex(e, currentIndex + 1, focusableElements),\n ArrowLeft: () => navigateToIndex(e, currentIndex - 1, focusableElements),\n ArrowUp: () => navigateToIndex(e, currentIndex - 1, focusableElements),\n Home: () => navigateToIndex(e, 0, focusableElements),\n End: () => navigateToIndex(e, focusableElements.length - 1, focusableElements)\n }\n\n const action = keyActions[e.key]\n if (action) {\n action()\n }\n }\n\n toolbar.addEventListener('keydown', handleKeyDown)\n return () => toolbar.removeEventListener('keydown', handleKeyDown)\n }, [toolbarRef])\n}\n\nconst useToolbarVisibility = (ref: React.RefObject<HTMLDivElement | null>): boolean => {\n const [isVisible, setIsVisible] = React.useState(true)\n const isMountedRef = React.useRef(false)\n\n React.useEffect(() => {\n isMountedRef.current = true\n return () => {\n isMountedRef.current = false\n }\n }, [])\n\n const checkVisibility = React.useCallback(() => {\n if (!isMountedRef.current) return\n\n const toolbar = ref.current\n if (!toolbar) return\n\n // Check if any group has visible children\n const hasVisibleChildren = Array.from(toolbar.children).some((child) => {\n if (!(child instanceof HTMLElement)) return false\n if (child.getAttribute('role') === 'group') {\n return child.children.length > 0\n }\n return false\n })\n\n setIsVisible(hasVisibleChildren)\n }, [ref])\n\n useObserveVisibility(ref, checkVisibility)\n return isVisible\n}\n\nconst useGroupVisibility = (ref: React.RefObject<HTMLDivElement | null>): boolean => {\n const [isVisible, setIsVisible] = React.useState(true)\n const isMountedRef = React.useRef(false)\n\n React.useEffect(() => {\n isMountedRef.current = true\n return () => {\n isMountedRef.current = false\n }\n }, [])\n\n const checkVisibility = React.useCallback(() => {\n if (!isMountedRef.current) return\n\n const group = ref.current\n if (!group) return\n\n const hasVisibleChildren = Array.from(group.children).some((child) => {\n if (!(child instanceof HTMLElement)) return false\n return true\n })\n\n setIsVisible(hasVisibleChildren)\n }, [ref])\n\n useObserveVisibility(ref, checkVisibility)\n return isVisible\n}\n\nconst useSeparatorVisibility = (ref: React.RefObject<HTMLDivElement | null>): boolean => {\n const [isVisible, setIsVisible] = React.useState(true)\n const isMountedRef = React.useRef(false)\n\n React.useEffect(() => {\n isMountedRef.current = true\n return () => {\n isMountedRef.current = false\n }\n }, [])\n\n const checkVisibility = React.useCallback(() => {\n if (!isMountedRef.current) return\n\n const separator = ref.current\n if (!separator) return\n\n const prevSibling = separator.previousElementSibling as HTMLElement\n const nextSibling = separator.nextElementSibling as HTMLElement\n\n if (!prevSibling || !nextSibling) {\n setIsVisible(false)\n return\n }\n\n const areBothGroups = prevSibling.getAttribute('role') === 'group' && nextSibling.getAttribute('role') === 'group'\n\n const haveBothChildren = prevSibling.children.length > 0 && nextSibling.children.length > 0\n\n setIsVisible(areBothGroups && haveBothChildren)\n }, [ref])\n\n useObserveVisibility(ref, checkVisibility)\n return isVisible\n}\n\nexport const Toolbar = React.forwardRef<HTMLDivElement, ToolbarProps>(({ children, className, variant = 'fixed', ...props }, ref) => {\n const toolbarRef = React.useRef<HTMLDivElement>(null)\n const isVisible = useToolbarVisibility(toolbarRef)\n\n useToolbarKeyboardNav(toolbarRef)\n\n if (!isVisible) return null\n\n return (\n <div\n ref={mergeRefs([toolbarRef, ref])}\n role=\"toolbar\"\n aria-label=\"toolbar\"\n data-variant={variant}\n className={`tiptap-toolbar ${className || ''}`}\n {...props}\n >\n {children}\n </div>\n )\n})\n\nToolbar.displayName = 'Toolbar'\n\nexport const ToolbarGroup = React.forwardRef<HTMLDivElement, BaseProps>(({ children, className, ...props }, ref) => {\n const groupRef = React.useRef<HTMLDivElement>(null)\n const isVisible = useGroupVisibility(groupRef)\n\n if (!isVisible) return null\n\n return (\n <div ref={mergeRefs([groupRef, ref])} role=\"group\" className={`tiptap-toolbar-group ${className || ''}`} {...props}>\n {children}\n </div>\n )\n})\n\nToolbarGroup.displayName = 'ToolbarGroup'\n\nexport const ToolbarSeparator = React.forwardRef<HTMLDivElement, BaseProps>(({ ...props }, ref) => {\n const separatorRef = React.useRef<HTMLDivElement>(null)\n const isVisible = useSeparatorVisibility(separatorRef)\n\n if (!isVisible) return null\n\n return <Separator ref={mergeRefs([separatorRef, ref])} orientation=\"vertical\" decorative {...props} />\n})\n\nToolbarSeparator.displayName = 'ToolbarSeparator'\n","import type { Editor } from '@tiptap/react'\nimport { useCurrentEditor } from '@tiptap/react'\nimport * as React from 'react'\n\nexport function useTiptapEditor(providedEditor?: Editor | null): Editor | null {\n const { editor: coreEditor } = useCurrentEditor()\n return React.useMemo(() => providedEditor || coreEditor, [providedEditor, coreEditor])\n}\n","import * as React from 'react'\n\nexport const ChevronDownIcon = React.memo(({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n return (\n <svg width=\"24\" height=\"24\" className={className} viewBox=\"0 0 24 24\" fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M5.29289 8.29289C5.68342 7.90237 6.31658 7.90237 6.70711 8.29289L12 13.5858L17.2929 8.29289C17.6834 7.90237 18.3166 7.90237 18.7071 8.29289C19.0976 8.68342 19.0976 9.31658 18.7071 9.70711L12.7071 15.7071C12.3166 16.0976 11.6834 16.0976 11.2929 15.7071L5.29289 9.70711C4.90237 9.31658 4.90237 8.68342 5.29289 8.29289Z\"\n fill=\"currentColor\"\n />\n </svg>\n )\n})\n\nChevronDownIcon.displayName = 'ChevronDownIcon'\n","import * as React from 'react'\n\nexport const HeadingIcon = React.memo(({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n return (\n <svg width=\"24\" height=\"24\" className={className} viewBox=\"0 0 24 24\" fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n d=\"M6 3C6.55228 3 7 3.44772 7 4V11H17V4C17 3.44772 17.4477 3 18 3C18.5523 3 19 3.44772 19 4V20C19 20.5523 18.5523 21 18 21C17.4477 21 17 20.5523 17 20V13H7V20C7 20.5523 6.55228 21 6 21C5.44772 21 5 20.5523 5 20V4C5 3.44772 5.44772 3 6 3Z\"\n fill=\"currentColor\"\n />\n </svg>\n )\n})\n\nHeadingIcon.displayName = 'HeadingIcon'\n","import type { Attrs, Node } from '@tiptap/pm/model'\nimport type { Editor } from '@tiptap/react'\n\nexport const MAX_FILE_SIZE = 5 * 1024 * 1024 // 5MB\n\n/**\n * Checks if a mark exists in the editor schema\n * @param markName - The name of the mark to check\n * @param editor - The editor instance\n * @returns boolean indicating if the mark exists in the schema\n */\nexport const isMarkInSchema = (markName: string, editor: Editor | null): boolean => {\n if (!editor?.schema) return false\n return editor.schema.spec.marks.get(markName) !== undefined\n}\n\n/**\n * Checks if a node exists in the editor schema\n * @param nodeName - The name of the node to check\n * @param editor - The editor instance\n * @returns boolean indicating if the node exists in the schema\n */\nexport const isNodeInSchema = (nodeName: string, editor: Editor | null): boolean => {\n if (!editor?.schema) return false\n return editor.schema.spec.nodes.get(nodeName) !== undefined\n}\n\n/**\n * Gets the active attributes of a specific mark in the current editor selection.\n *\n * @param editor - The Tiptap editor instance.\n * @param markName - The name of the mark to look for (e.g., \"highlight\", \"link\").\n * @returns The attributes of the active mark, or `null` if the mark is not active.\n */\nexport function getActiveMarkAttrs(editor: Editor | null, markName: string): Attrs | null {\n if (!editor) return null\n const { state } = editor\n const marks = state.storedMarks || state.selection.$from.marks()\n const mark = marks.find((mark) => mark.type.name === markName)\n\n return mark?.attrs ?? null\n}\n\n/**\n * Checks if a node is empty\n */\nexport function isEmptyNode(node?: Node | null): boolean {\n return !!node && node.content.size === 0\n}\n\n/**\n * Utility function to conditionally join class names into a single string.\n * Filters out falsey values like false, undefined, null, and empty strings.\n *\n * @param classes - List of class name strings or falsey values.\n * @returns A single space-separated string of valid class names.\n */\nexport function cn(...classes: (string | boolean | undefined | null)[]): string {\n return classes.filter(Boolean).join(' ')\n}\n\n/**\n * Finds the position and instance of a node in the document\n * @param props Object containing editor, node (optional), and nodePos (optional)\n * @param props.editor The TipTap editor instance\n * @param props.node The node to find (optional if nodePos is provided)\n * @param props.nodePos The position of the node to find (optional if node is provided)\n * @returns An object with the position and node, or null if not found\n */\nexport function findNodePosition(props: { editor: Editor | null; node?: Node | null; nodePos?: number | null }): { pos: number; node: Node } | null {\n const { editor, node, nodePos } = props\n\n if (!editor || !editor.state?.doc) return null\n\n // Zero is valid position\n const hasValidNode = node !== undefined && node !== null\n const hasValidPos = nodePos !== undefined && nodePos !== null\n\n if (!hasValidNode && !hasValidPos) {\n return null\n }\n\n if (hasValidPos) {\n try {\n const nodeAtPos = editor.state.doc.nodeAt(nodePos!)\n if (nodeAtPos) {\n return { pos: nodePos!, node: nodeAtPos }\n }\n } catch (error) {\n console.error('Error checking node at position:', error)\n return null\n }\n }\n\n // Otherwise search for the node in the document\n let foundPos = -1\n let foundNode: Node | null = null\n\n editor.state.doc.descendants((currentNode, pos) => {\n // TODO: Needed?\n // if (currentNode.type && currentNode.type.name === node!.type.name) {\n if (currentNode === node) {\n foundPos = pos\n foundNode = currentNode\n return false\n }\n return true\n })\n\n return foundPos !== -1 && foundNode !== null ? { pos: foundPos, node: foundNode } : null\n}\n\n/**\n * Handles image upload with progress tracking and abort capability\n * @param file The file to upload\n * @param onProgress Optional callback for tracking upload progress\n * @param abortSignal Optional AbortSignal for cancelling the upload\n * @returns Promise resolving to the URL of the uploaded image\n */\nexport const handleImageUpload = async (\n file: File,\n onProgress?: (event: { progress: number }) => void,\n abortSignal?: AbortSignal\n): Promise<string> => {\n // Validate file\n if (!file) {\n throw new Error('No file provided')\n }\n\n if (file.size > MAX_FILE_SIZE) {\n throw new Error(`File size exceeds maximum allowed (${MAX_FILE_SIZE / (1024 * 1024)}MB)`)\n }\n\n // For demo/testing: Simulate upload progress\n for (let progress = 0; progress <= 100; progress += 10) {\n if (abortSignal?.aborted) {\n throw new Error('Upload cancelled')\n }\n await new Promise((resolve) => {\n setTimeout(resolve, 500)\n })\n onProgress?.({ progress })\n }\n\n return '/images/placeholder-image.png'\n\n // Uncomment for production use:\n // return convertFileToBase64(file, abortSignal);\n}\n\n/**\n * Converts a File to base64 string\n * @param file The file to convert\n * @param abortSignal Optional AbortSignal for cancelling the conversion\n * @returns Promise resolving to the base64 representation of the file\n */\nexport const convertFileToBase64 = (file: File, abortSignal?: AbortSignal): Promise<string> => {\n if (!file) {\n return Promise.reject(new Error('No file provided'))\n }\n\n return new Promise((resolve, reject) => {\n const reader = new FileReader()\n\n const abortHandler = () => {\n reader.abort()\n reject(new Error('Upload cancelled'))\n }\n\n if (abortSignal) {\n abortSignal.addEventListener('abort', abortHandler)\n }\n\n reader.onloadend = () => {\n if (abortSignal) {\n abortSignal.removeEventListener('abort', abortHandler)\n }\n\n if (typeof reader.result === 'string') {\n resolve(reader.result)\n } else {\n reject(new Error('Failed to convert File to base64'))\n }\n }\n\n reader.onerror = (error) => reject(new Error(`File reading error: ${error}`))\n reader.readAsDataURL(file)\n })\n}\n","import * as React from 'react'\n\nexport const HeadingFiveIcon = React.memo(({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n return (\n <svg width=\"24\" height=\"24\" className={className} viewBox=\"0 0 24 24\" fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n d=\"M5 6C5 5.44772 4.55228 5 4 5C3.44772 5 3 5.44772 3 6V18C3 18.5523 3.44772 19 4 19C4.55228 19 5 18.5523 5 18V13H11V18C11 18.5523 11.4477 19 12 19C12.5523 19 13 18.5523 13 18V6C13 5.44772 12.5523 5 12 5C11.4477 5 11 5.44772 11 6V11H5V6Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M16 10C16 9.44772 16.4477 9 17 9H21C21.5523 9 22 9.44772 22 10C22 10.5523 21.5523 11 21 11H18V12H18.3C20.2754 12 22 13.4739 22 15.5C22 17.5261 20.2754 19 18.3 19C17.6457 19 17.0925 18.8643 16.5528 18.5944C16.0588 18.3474 15.8586 17.7468 16.1055 17.2528C16.3525 16.7588 16.9532 16.5586 17.4472 16.8056C17.7074 16.9357 17.9542 17 18.3 17C19.3246 17 20 16.2739 20 15.5C20 14.7261 19.3246 14 18.3 14H17C16.4477 14 16 13.5523 16 13L16 12.9928V10Z\"\n fill=\"currentColor\"\n />\n </svg>\n )\n})\n\nHeadingFiveIcon.displayName = 'HeadingFiveIcon'\n","import * as React from 'react'\n\nexport const HeadingFourIcon = React.memo(({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n return (\n <svg width=\"24\" height=\"24\" className={className} viewBox=\"0 0 24 24\" fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n d=\"M4 5C4.55228 5 5 5.44772 5 6V11H11V6C11 5.44772 11.4477 5 12 5C12.5523 5 13 5.44772 13 6V18C13 18.5523 12.5523 19 12 19C11.4477 19 11 18.5523 11 18V13H5V18C5 18.5523 4.55228 19 4 19C3.44772 19 3 18.5523 3 18V6C3 5.44772 3.44772 5 4 5Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M17 9C17.5523 9 18 9.44772 18 10V13H20V10C20 9.44772 20.4477 9 21 9C21.5523 9 22 9.44772 22 10V18C22 18.5523 21.5523 19 21 19C20.4477 19 20 18.5523 20 18V15H17C16.4477 15 16 14.5523 16 14V10C16 9.44772 16.4477 9 17 9Z\"\n fill=\"currentColor\"\n />\n </svg>\n )\n})\n\nHeadingFourIcon.displayName = 'HeadingFourIcon'\n","import * as React from 'react'\n\nexport const HeadingOneIcon = React.memo(({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n return (\n <svg width=\"24\" height=\"24\" className={className} viewBox=\"0 0 24 24\" fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n d=\"M5 6C5 5.44772 4.55228 5 4 5C3.44772 5 3 5.44772 3 6V18C3 18.5523 3.44772 19 4 19C4.55228 19 5 18.5523 5 18V13H11V18C11 18.5523 11.4477 19 12 19C12.5523 19 13 18.5523 13 18V6C13 5.44772 12.5523 5 12 5C11.4477 5 11 5.44772 11 6V11H5V6Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M21.0001 10C21.0001 9.63121 20.7971 9.29235 20.472 9.11833C20.1468 8.94431 19.7523 8.96338 19.4454 9.16795L16.4454 11.168C15.9859 11.4743 15.8617 12.0952 16.1681 12.5547C16.4744 13.0142 17.0953 13.1384 17.5548 12.8321L19.0001 11.8685V18C19.0001 18.5523 19.4478 19 20.0001 19C20.5524 19 21.0001 18.5523 21.0001 18V10Z\"\n fill=\"currentColor\"\n />\n </svg>\n )\n})\n\nHeadingOneIcon.displayName = 'HeadingOneIcon'\n","import * as React from 'react'\n\nexport const HeadingSixIcon = React.memo(({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n return (\n <svg width=\"24\" height=\"24\" className={className} viewBox=\"0 0 24 24\" fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n d=\"M5 6C5 5.44772 4.55228 5 4 5C3.44772 5 3 5.44772 3 6V18C3 18.5523 3.44772 19 4 19C4.55228 19 5 18.5523 5 18V13H11V18C11 18.5523 11.4477 19 12 19C12.5523 19 13 18.5523 13 18V6C13 5.44772 12.5523 5 12 5C11.4477 5 11 5.44772 11 6V11H5V6Z\"\n fill=\"currentColor\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M20.7071 9.29289C21.0976 9.68342 21.0976 10.3166 20.7071 10.7071C19.8392 11.575 19.2179 12.2949 18.7889 13.0073C18.8587 13.0025 18.929 13 19 13C20.6569 13 22 14.3431 22 16C22 17.6569 20.6569 19 19 19C17.3431 19 16 17.6569 16 16C16 14.6007 16.2837 13.4368 16.8676 12.3419C17.4384 11.2717 18.2728 10.3129 19.2929 9.29289C19.6834 8.90237 20.3166 8.90237 20.7071 9.29289ZM19 17C18.4477 17 18 16.5523 18 16C18 15.4477 18.4477 15 19 15C19.5523 15 20 15.4477 20 16C20 16.5523 19.5523 17 19 17Z\"\n fill=\"currentColor\"\n />\n </svg>\n )\n})\n\nHeadingSixIcon.displayName = 'HeadingSixIcon'\n","import * as React from 'react'\n\nexport const HeadingThreeIcon = React.memo(({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n return (\n <svg width=\"24\" height=\"24\" className={className} viewBox=\"0 0 24 24\" fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n d=\"M4 5C4.55228 5 5 5.44772 5 6V11H11V6C11 5.44772 11.4477 5 12 5C12.5523 5 13 5.44772 13 6V18C13 18.5523 12.5523 19 12 19C11.4477 19 11 18.5523 11 18V13H5V18C5 18.5523 4.55228 19 4 19C3.44772 19 3 18.5523 3 18V6C3 5.44772 3.44772 5 4 5Z\"\n fill=\"currentColor\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M19.4608 11.2169C19.1135 11.0531 18.5876 11.0204 18.0069 11.3619C17.5309 11.642 16.918 11.4831 16.638 11.007C16.358 10.531 16.5169 9.91809 16.9929 9.63807C18.1123 8.97962 19.3364 8.94691 20.314 9.40808C21.2839 9.86558 21.9999 10.818 21.9999 12C21.9999 12.7957 21.6838 13.5587 21.1212 14.1213C20.5586 14.6839 19.7956 15 18.9999 15C18.4476 15 17.9999 14.5523 17.9999 14C17.9999 13.4477 18.4476 13 18.9999 13C19.2651 13 19.5195 12.8947 19.707 12.7071C19.8946 12.5196 19.9999 12.2652 19.9999 12C19.9999 11.6821 19.8159 11.3844 19.4608 11.2169Z\"\n fill=\"currentColor\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M18.0001 14C18.0001 13.4477 18.4478 13 19.0001 13C19.7957 13 20.5588 13.3161 21.1214 13.8787C21.684 14.4413 22.0001 15.2043 22.0001 16C22.0001 17.2853 21.2767 18.3971 20.1604 18.8994C19.0257 19.41 17.642 19.2315 16.4001 18.3C15.9582 17.9686 15.8687 17.3418 16.2001 16.9C16.5314 16.4582 17.1582 16.3686 17.6001 16.7C18.3581 17.2685 18.9744 17.24 19.3397 17.0756C19.7234 16.9029 20.0001 16.5147 20.0001 16C20.0001 15.7348 19.8947 15.4804 19.7072 15.2929C19.5196 15.1054 19.2653 15 19.0001 15C18.4478 15 18.0001 14.5523 18.0001 14Z\"\n fill=\"currentColor\"\n />\n </svg>\n )\n})\n\nHeadingThreeIcon.displayName = 'HeadingThreeIcon'\n","import * as React from 'react'\n\nexport const HeadingTwoIcon = React.memo(({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n return (\n <svg width=\"24\" height=\"24\" className={className} viewBox=\"0 0 24 24\" fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n d=\"M5 6C5 5.44772 4.55228 5 4 5C3.44772 5 3 5.44772 3 6V18C3 18.5523 3.44772 19 4 19C4.55228 19 5 18.5523 5 18V13H11V18C11 18.5523 11.4477 19 12 19C12.5523 19 13 18.5523 13 18V6C13 5.44772 12.5523 5 12 5C11.4477 5 11 5.44772 11 6V11H5V6Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M22.0001 12C22.0001 10.7611 21.1663 9.79297 20.0663 9.42632C18.9547 9.05578 17.6171 9.28724 16.4001 10.2C15.9582 10.5314 15.8687 11.1582 16.2001 11.6C16.5314 12.0418 17.1582 12.1314 17.6001 11.8C18.383 11.2128 19.0455 11.1942 19.4338 11.3237C19.8339 11.457 20.0001 11.7389 20.0001 12C20.0001 12.4839 19.8554 12.7379 19.6537 12.9481C19.4275 13.1837 19.1378 13.363 18.7055 13.6307C18.6313 13.6767 18.553 13.7252 18.4701 13.777C17.9572 14.0975 17.3128 14.5261 16.8163 15.2087C16.3007 15.9177 16.0001 16.8183 16.0001 18C16.0001 18.5523 16.4478 19 17.0001 19H21.0001C21.5523 19 22.0001 18.5523 22.0001 18C22.0001 17.4477 21.5523 17 21.0001 17H18.131C18.21 16.742 18.3176 16.5448 18.4338 16.385C18.6873 16.0364 19.0429 15.7775 19.5301 15.473C19.5898 15.4357 19.6536 15.3966 19.7205 15.3556C20.139 15.0992 20.6783 14.7687 21.0964 14.3332C21.6447 13.7621 22.0001 13.0161 22.0001 12Z\"\n fill=\"currentColor\"\n />\n </svg>\n )\n})\n\nHeadingTwoIcon.displayName = 'HeadingTwoIcon'\n","import { isNodeSelection, type Editor } from '@tiptap/react'\nimport * as React from 'react'\n\n// --- Hooks ---\nimport { useTiptapEditor } from '../../../hooks/use-tiptap-editor'\n\n// --- Icons ---\nimport { HeadingFiveIcon } from '../../tiptap-icons/heading-five-icon'\nimport { HeadingFourIcon } from '../../tiptap-icons/heading-four-icon'\nimport { HeadingOneIcon } from '../../tiptap-icons/heading-one-icon'\nimport { HeadingSixIcon } from '../../tiptap-icons/heading-six-icon'\nimport { HeadingThreeIcon } from '../../tiptap-icons/heading-three-icon'\nimport { HeadingTwoIcon } from '../../tiptap-icons/heading-two-icon'\n\n// --- Lib ---\nimport { isNodeInSchema } from '../../../lib/tiptap-utils'\n\n// --- UI Primitives ---\nimport type { ButtonProps } from '../../tiptap-ui-primitive/button'\nimport { Button } from '../../tiptap-ui-primitive/button'\n\nexport type Level = 1 | 2 | 3 | 4 | 5 | 6\n\nexport interface HeadingButtonProps extends Omit<ButtonProps, 'type'> {\n /**\n * The TipTap editor instance.\n */\n editor?: Editor | null\n /**\n * The heading level.\n */\n level: Level\n /**\n * Optional text to display alongside the icon.\n */\n text?: string\n /**\n * Whether the button should hide when the heading is not available.\n * @default false\n */\n hideWhenUnavailable?: boolean\n}\n\nexport const headingIcons = {\n 1: HeadingOneIcon,\n 2: HeadingTwoIcon,\n 3: HeadingThreeIcon,\n 4: HeadingFourIcon,\n 5: HeadingFiveIcon,\n 6: HeadingSixIcon\n}\n\nexport const headingShortcutKeys: Partial<Record<Level, string>> = {\n 1: 'Ctrl-Alt-1',\n 2: 'Ctrl-Alt-2',\n 3: 'Ctrl-Alt-3',\n 4: 'Ctrl-Alt-4',\n 5: 'Ctrl-Alt-5',\n 6: 'Ctrl-Alt-6'\n}\n\nexport function canToggleHeading(editor: Editor | null, level: Level): boolean {\n if (!editor) return false\n\n try {\n return editor.can().toggleNode('heading', 'paragraph', { level })\n } catch {\n return false\n }\n}\n\nexport function isHeadingActive(editor: Editor | null, level: Level): boolean {\n if (!editor) return false\n return editor.isActive('heading', { level })\n}\n\nexport function toggleHeading(editor: Editor | null, level: Level): void {\n if (!editor) return\n\n if (editor.isActive('heading', { level })) {\n editor.chain().focus().setNode('paragraph').run()\n } else {\n editor.chain().focus().toggleNode('heading', 'paragraph', { level }).run()\n }\n}\n\nexport function isHeadingButtonDisabled(editor: Editor | null, level: Level, userDisabled: boolean = false): boolean {\n if (!editor) return true\n if (userDisabled) return true\n if (!canToggleHeading(editor, level)) return true\n return false\n}\n\nexport function shouldShowHeadingButton(params: {\n editor: Editor | null\n level: Level\n hideWhenUnavailable: boolean\n headingInSchema: boolean\n}): boolean {\n const { editor, hideWhenUnavailable, headingInSchema } = params\n\n if (!headingInSchema || !editor) {\n return false\n }\n\n if (hideWhenUnavailable) {\n if (isNodeSelection(editor.state.selection)) {\n return false\n }\n }\n\n return true\n}\n\nexport function getFormattedHeadingName(level: Level): string {\n return `标题 ${level}`\n}\n\nexport function useHeadingState(editor: Editor | null, level: Level, disabled: boolean = false) {\n const headingInSchema = isNodeInSchema('heading', editor)\n const isDisabled = isHeadingButtonDisabled(editor, level, disabled)\n const isActive = isHeadingActive(editor, level)\n\n const Icon = headingIcons[level]\n const shortcutKey = headingShortcutKeys[level]\n const formattedName = getFormattedHeadingName(level)\n\n return {\n headingInSchema,\n isDisabled,\n isActive,\n Icon,\n shortcutKey,\n formattedName\n }\n}\n\nexport const HeadingButton = React.forwardRef<HTMLButtonElement, HeadingButtonProps>(\n ({ editor: providedEditor, level, text, hideWhenUnavailable = false, className = '', disabled, onClick, children, ...buttonProps }, ref) => {\n const editor = useTiptapEditor(providedEditor)\n\n const { headingInSchema, isDisabled, isActive, Icon, shortcutKey, formattedName } = useHeadingState(editor, level, disabled)\n\n const handleClick = React.useCallback(\n (e: React.MouseEvent<HTMLButtonElement>) => {\n onClick?.(e)\n\n if (!e.defaultPrevented && !isDisabled && editor) {\n toggleHeading(editor, level)\n }\n },\n [onClick, isDisabled, editor, level]\n )\n\n const show = React.useMemo(() => {\n return shouldShowHeadingButton({\n editor,\n level,\n hideWhenUnavailable,\n headingInSchema\n })\n }, [editor, level, hideWhenUnavailable, headingInSchema])\n\n if (!show || !editor || !editor.isEditable) {\n return null\n }\n\n return (\n <Button\n type=\"button\"\n className={className.trim()}\n disabled={isDisabled}\n data-style=\"ghost\"\n data-active-state={isActive ? 'on' : 'off'}\n data-disabled={isDisabled}\n role=\"button\"\n tabIndex={-1}\n aria-label={formattedName}\n aria-pressed={isActive}\n tooltip={formattedName}\n shortcutKeys={shortcutKey}\n onClick={handleClick}\n {...buttonProps}\n ref={ref}\n >\n {children || (\n <>\n <Icon className=\"tiptap-button-icon\" />\n {text && <span className=\"tiptap-button-text\">{text}</span>}\n </>\n )}\n </Button>\n )\n }\n)\n\nHeadingButton.displayName = 'HeadingButton'\n\nexport default HeadingButton\n","import './dropdown-menu.less'\nimport { Separator } from '../../tiptap-ui-primitive/separator'\nimport type { Placement } from '@floating-ui/react'\nimport {\n autoUpdate,\n flip,\n FloatingFocusManager,\n FloatingList,\n FloatingPortal,\n offset,\n shift,\n useClick,\n useDismiss,\n useFloating,\n useInteractions,\n useListItem,\n useListNavigation,\n useMergeRefs,\n useRole,\n useTypeahead\n} from '@floating-ui/react'\nimport * as React from 'react'\n\ninterface DropdownMenuOptions {\n initialOpen?: boolean\n open?: boolean\n onOpenChange?: (open: boolean) => void\n side?: 'top' | 'right' | 'bottom' | 'left'\n align?: 'start' | 'center' | 'end'\n}\n\ninterface DropdownMenuProps extends DropdownMenuOptions {\n children: React.ReactNode\n}\n\ntype ContextType = ReturnType<typeof useDropdownMenu> & {\n updatePosition: (side: 'top' | 'right' | 'bottom' | 'left', align: 'start' | 'center' | 'end') => void\n}\n\nconst DropdownMenuContext = React.createContext<ContextType | null>(null)\n\nfunction useDropdownMenuContext() {\n const context = React.useContext(DropdownMenuContext)\n if (!context) {\n throw new Error('DropdownMenu components must be wrapped in <DropdownMenu />')\n }\n return context\n}\n\nfunction useDropdownMenu({\n initialOpen = false,\n open: controlledOpen,\n onOpenChange: setControlledOpen,\n side = 'bottom',\n align = 'start'\n}: DropdownMenuOptions) {\n const [uncontrolledOpen, setUncontrolledOpen] = React.useState(initialOpen)\n const [currentPlacement, setCurrentPlacement] = React.useState<Placement>(`${side}-${align}` as Placement)\n const [activeIndex, setActiveIndex] = React.useState<number | null>(null)\n\n const open = controlledOpen ?? uncontrolledOpen\n const setOpen = setControlledOpen ?? setUncontrolledOpen\n\n const elementsRef = React.useRef<Array<HTMLElement | null>>([])\n const labelsRef = React.useRef<Array<string | null>>([])\n\n const floating = useFloating({\n open,\n onOpenChange: setOpen,\n placement: currentPlacement,\n middleware: [offset({ mainAxis: 4 }), flip(), shift({ padding: 4 })],\n whileElementsMounted: autoUpdate\n })\n\n const { context } = floating\n\n const interactions = useInteractions([\n useClick(context, {\n event: 'mousedown',\n toggle: true,\n ignoreMouse: false\n }),\n useRole(context, { role: 'menu' }),\n useDismiss(context, {\n outsidePress: true,\n outsidePressEvent: 'mousedown'\n }),\n useListNavigation(context, {\n listRef: elementsRef,\n activeIndex,\n onNavigate: setActiveIndex,\n loop: true\n }),\n useTypeahead(context, {\n listRef: labelsRef,\n onMatch: open ? setActiveIndex : undefined,\n activeIndex\n })\n ])\n\n const updatePosition = React.useCallback((newSide: 'top' | 'right' | 'bottom' | 'left', newAlign: 'start' | 'center' | 'end') => {\n setCurrentPlacement(`${newSide}-${newAlign}` as Placement)\n }, [])\n\n return React.useMemo(\n () => ({\n open,\n setOpen,\n activeIndex,\n setActiveIndex,\n elementsRef,\n labelsRef,\n updatePosition,\n ...interactions,\n ...floating\n }),\n [open, setOpen, activeIndex, interactions, floating, updatePosition]\n )\n}\n\nexport function DropdownMenu({ children, ...options }: DropdownMenuProps) {\n const dropdown = useDropdownMenu(options)\n return (\n <DropdownMenuContext.Provider value={dropdown}>\n <FloatingList elementsRef={dropdown.elementsRef} labelsRef={dropdown.labelsRef}>\n {children}\n </FloatingList>\n </DropdownMenuContext.Provider>\n )\n}\n\ninterface DropdownMenuTriggerProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n asChild?: boolean\n}\n\nexport const DropdownMenuTrigger = React.forwardRef<HTMLButtonElement, DropdownMenuTriggerProps>(\n ({ children, asChild = false, ...props }, propRef) => {\n const context = useDropdownMenuContext()\n const childrenRef = React.isValidElement(children)\n ? parseInt(React.version, 10) >= 19\n ? // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (children as { props: { ref?: React.Ref<any> } }).props.ref\n : // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (children as any).ref\n : undefined\n const ref = useMergeRefs([context.refs.setReference, propRef, childrenRef])\n\n if (asChild && React.isValidElement(children)) {\n const dataAttributes = {\n 'data-state': context.open ? 'open' : 'closed'\n }\n\n return React.cloneElement(\n children,\n context.getReferenceProps({\n ref,\n ...props,\n ...(typeof children.props === 'object' ? children.props : {}),\n 'aria-expanded': context.open,\n 'aria-haspopup': 'menu' as const,\n ...dataAttributes\n })\n )\n }\n\n return (\n <button\n ref={ref}\n aria-expanded={context.open}\n aria-haspopup=\"menu\"\n data-state={context.open ? 'open' : 'closed'}\n {...context.getReferenceProps(props)}\n >\n {children}\n </button>\n )\n }\n)\n\nDropdownMenuTrigger.displayName = 'DropdownMenuTrigger'\n\ninterface DropdownMenuContentProps extends React.HTMLAttributes<HTMLDivElement> {\n orientation?: 'vertical' | 'horizontal'\n side?: 'top' | 'right' | 'bottom' | 'left'\n align?: 'start' | 'center' | 'end'\n portal?: boolean\n portalProps?: Omit<React.ComponentProps<typeof FloatingPortal>, 'children'>\n}\n\nexport const DropdownMenuContent = React.forwardRef<HTMLDivElement, DropdownMenuContentProps>(\n ({ style, className, orientation = 'vertical', side = 'bottom', align = 'start', portal = true, portalProps = {}, ...props }, propRef) => {\n const context = useDropdownMenuContext()\n const ref = useMergeRefs([context.refs.setFloating, propRef])\n\n React.useEffect(() => {\n context.updatePosition(side, align)\n }, [context, side, align])\n\n if (!context.open) return null\n\n const content = (\n <FloatingFocusManager context={context.context} modal={false} initialFocus={0} returnFocus={true}>\n <div\n ref={ref}\n className={`tiptap-dropdown-menu ${className || ''}`}\n style={{\n position: context.strategy,\n top: context.y ?? 0,\n left: context.x ?? 0,\n outline: 'none',\n ...style\n }}\n aria-orientation={orientation}\n data-orientation={orientation}\n data-state={context.open ? 'open' : 'closed'}\n data-side={side}\n data-align={align}\n {...context.getFloatingProps(props)}\n >\n {props.children}\n </div>\n </FloatingFocusManager>\n )\n\n if (portal) {\n return <FloatingPortal {...portalProps}>{content}</FloatingPortal>\n }\n\n return content\n }\n)\n\nDropdownMenuContent.displayName = 'DropdownMenuContent'\n\ninterface DropdownMenuItemProps extends React.HTMLAttributes<HTMLDivElement> {\n asChild?: boolean\n disabled?: boolean\n onSelect?: () => void\n}\n\nexport const DropdownMenuItem = React.forwardRef<HTMLDivElement, DropdownMenuItemProps>(\n ({ children, disabled, asChild = false, onSelect, className, ...props }, ref) => {\n const context = useDropdownMenuContext()\n const item = useListItem({ label: disabled ? null : children?.toString() })\n const isActive = context.activeIndex === item.index\n\n const handleSelect = React.useCallback(\n (event: React.MouseEvent<HTMLDivElement>) => {\n if (disabled) return\n onSelect?.()\n props.onClick?.(event)\n context.setOpen(false)\n },\n [context, disabled, onSelect, props]\n )\n\n const itemProps: React.HTMLAttributes<HTMLDivElement> & {\n ref: React.Ref<HTMLDivElement>\n role: string\n tabIndex: number\n 'aria-disabled'?: boolean\n 'data-highlighted'?: boolean\n } = {\n ref: useMergeRefs([item.ref, ref]),\n role: 'menuitem',\n className,\n tabIndex: isActive ? 0 : -1,\n 'data-highlighted': isActive,\n 'aria-disabled': disabled,\n ...context.getItemProps({\n ...props,\n onClick: handleSelect\n })\n }\n\n if (asChild && React.isValidElement(children)) {\n const childProps = children.props as {\n onClick?: (event: React.MouseEvent<HTMLElement>) => void\n }\n\n // Create merged props without adding onClick directly to the props object\n const mergedProps = {\n ...itemProps,\n ...(typeof children.props === 'object' ? children.props : {})\n }\n\n // Handle onClick separately based on the element type\n const eventHandlers = {\n onClick: (event: React.MouseEvent<HTMLElement>) => {\n // Cast the event to make it compatible with handleSelect\n handleSelect(event as unknown as React.MouseEvent<HTMLDivElement>)\n childProps.onClick?.(event)\n }\n }\n\n return React.cloneElement(children, {\n ...mergedProps,\n ...eventHandlers\n })\n }\n\n return <div {...itemProps}>{children}</div>\n }\n)\n\nDropdownMenuItem.displayName = 'DropdownMenuItem'\n\ninterface DropdownMenuGroupProps extends React.HTMLAttributes<HTMLDivElement> {\n label?: string\n}\n\nexport const DropdownMenuGroup = React.forwardRef<HTMLDivElement, DropdownMenuGroupProps>(({ children, label, className, ...props }, ref) => {\n return (\n <div {...props} ref={ref} role=\"group\" aria-label={label} className={`tiptap-button-group ${className || ''}`}>\n {children}\n </div>\n )\n})\n\nDropdownMenuGroup.displayName = 'DropdownMenuGroup'\n\nexport const DropdownMenuSeparator = React.forwardRef<React.ElementRef<typeof Separator>, React.ComponentPropsWithoutRef<typeof Separator>>(\n ({ className, ...props }, ref) => <Separator ref={ref} className={`tiptap-dropdown-menu-separator ${className || ''}`} {...props} />\n)\nDropdownMenuSeparator.displayName = Separator.displayName\n","import { isNodeSelection, type Editor } from '@tiptap/react'\nimport * as React from 'react'\n\n// --- Hooks ---\nimport { useTiptapEditor } from '../../../hooks/use-tiptap-editor'\n\n// --- Icons ---\nimport { ChevronDownIcon } from '../../tiptap-icons/chevron-down-icon'\nimport { HeadingIcon } from '../../tiptap-icons/heading-icon'\n\n// --- Lib ---\nimport { isNodeInSchema } from '../../../lib/tiptap-utils'\n\n// --- Tiptap UI ---\nimport {\n getFormattedHeadingName,\n HeadingButton,\n headingIcons,\n type Level\n} from '../../tiptap-ui/heading-button/heading-button'\n\n// --- UI Primitives ---\nimport type { ButtonProps } from '../../tiptap-ui-primitive/button'\nimport { Button } from '../../tiptap-ui-primitive/button'\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuTrigger\n} from '../../tiptap-ui-primitive/dropdown-menu'\n\nexport interface HeadingDropdownMenuProps extends Omit<ButtonProps, 'type'> {\n editor?: Editor | null\n levels?: Level[]\n hideWhenUnavailable?: boolean\n onOpenChange?: (isOpen: boolean) => void\n}\n\nexport function HeadingDropdownMenu({\n editor: providedEditor,\n levels = [1, 2, 3, 4, 5, 6],\n hideWhenUnavailable = false,\n onOpenChange,\n ...props\n}: HeadingDropdownMenuProps) {\n const [isOpen, setIsOpen] = React.useState(false)\n const editor = useTiptapEditor(providedEditor)\n\n const headingInSchema = isNodeInSchema('heading', editor)\n\n const handleOnOpenChange = React.useCallback(\n (open: boolean) => {\n setIsOpen(open)\n onOpenChange?.(open)\n },\n [onOpenChange]\n )\n\n const getActiveIcon = React.useCallback(() => {\n if (!editor) return <HeadingIcon className=\"tiptap-button-icon\" />\n\n const activeLevel = levels.find((level) => editor.isActive('heading', { level })) as Level | undefined\n\n if (!activeLevel) return <HeadingIcon className=\"tiptap-button-icon\" />\n\n const ActiveIcon = headingIcons[activeLevel]\n return <ActiveIcon className=\"tiptap-button-icon\" />\n }, [editor, levels])\n\n const canToggleAnyHeading = React.useCallback((): boolean => {\n if (!editor) return false\n return levels.some((level) => editor.can().toggleNode('heading', 'paragraph', { level }))\n }, [editor, levels])\n\n const isDisabled = !canToggleAnyHeading()\n const isAnyHeadingActive = editor?.isActive('heading') ?? false\n\n const show = React.useMemo(() => {\n if (!headingInSchema || !editor) {\n return false\n }\n\n if (hideWhenUnavailable) {\n if (isNodeSelection(editor.state.selection) || !canToggleAnyHeading()) {\n return false\n }\n }\n\n return true\n }, [headingInSchema, editor, hideWhenUnavailable, canToggleAnyHeading])\n\n if (!show || !editor || !editor.isEditable) {\n return null\n }\n\n return (\n <DropdownMenu open={isOpen} onOpenChange={handleOnOpenChange}>\n <DropdownMenuTrigger asChild>\n <Button\n type=\"button\"\n disabled={isDisabled}\n data-style=\"ghost\"\n data-active-state={isAnyHeadingActive ? 'on' : 'off'}\n data-disabled={isDisabled}\n role=\"button\"\n tabIndex={-1}\n aria-label=\"Format text as heading\"\n aria-pressed={isAnyHeadingActive}\n tooltip=\"标题\"\n {...props}\n >\n {getActiveIcon()}\n <ChevronDownIcon className=\"tiptap-button-dropdown-small\" />\n </Button>\n </DropdownMenuTrigger>\n\n <DropdownMenuContent>\n <DropdownMenuGroup>\n {levels.map((level) => (\n <DropdownMenuItem key={`heading-${level}`} asChild>\n <HeadingButton editor={editor} level={level} text={getFormattedHeadingName(level)} tooltip={''} />\n </DropdownMenuItem>\n ))}\n </DropdownMenuGroup>\n </DropdownMenuContent>\n </DropdownMenu>\n )\n}\n\nexport default HeadingDropdownMenu\n","import type { Editor } from '@tiptap/react'\nimport * as React from 'react'\n\ntype Orientation = 'horizontal' | 'vertical' | 'both'\n\ninterface MenuNavigationOptions<T> {\n editor?: Editor | null\n containerRef?: React.RefObject<HTMLElement | null>\n query?: string\n items: T[]\n onSelect?: (item: T) => void\n onClose?: () => void\n orientation?: Orientation\n autoSelectFirstItem?: boolean\n}\n\nexport function useMenuNavigation<T>({\n editor,\n containerRef,\n query,\n items,\n onSelect,\n onClose,\n orientation = 'vertical',\n autoSelectFirstItem = true\n}: MenuNavigationOptions<T>) {\n const [selectedIndex, setSelectedIndex] = React.useState<number>(autoSelectFirstItem ? 0 : -1)\n\n React.useEffect(() => {\n const handleKeyboardNavigation = (event: KeyboardEvent) => {\n if (!items.length) return false\n\n const moveNext = () =>\n setSelectedIndex((currentIndex) => {\n if (currentIndex === -1) return 0\n return (currentIndex + 1) % items.length\n })\n\n const movePrev = () =>\n setSelectedIndex((currentIndex) => {\n if (currentIndex === -1) return items.length - 1\n return (currentIndex - 1 + items.length) % items.length\n })\n\n switch (event.key) {\n case 'ArrowUp': {\n if (orientation === 'horizontal') return false\n event.preventDefault()\n movePrev()\n return true\n }\n\n case 'ArrowDown': {\n if (orientation === 'horizontal') return false\n event.preventDefault()\n moveNext()\n return true\n }\n\n case 'ArrowLeft': {\n if (orientation === 'vertical') return false\n event.preventDefault()\n movePrev()\n return true\n }\n\n case 'ArrowRight': {\n if (orientation === 'vertical') return false\n event.preventDefault()\n moveNext()\n return true\n }\n\n case 'Tab': {\n event.preventDefault()\n if (event.shiftKey) {\n movePrev()\n } else {\n moveNext()\n }\n return true\n }\n\n case 'Home': {\n event.preventDefault()\n setSelectedIndex(0)\n return true\n }\n\n case 'End': {\n event.preventDefault()\n setSelectedIndex(items.length - 1)\n return true\n }\n\n case 'Enter': {\n if (event.isComposing) return false\n event.preventDefault()\n if (selectedIndex !== -1 && items[selectedIndex]) {\n onSelect?.(items[selectedIndex])\n }\n return true\n }\n\n case 'Escape': {\n event.preventDefault()\n onClose?.()\n return true\n }\n\n default:\n return false\n }\n }\n\n let targetElement: HTMLElement | null = null\n\n if (editor) {\n targetElement = editor.view.dom\n } else if (containerRef?.current) {\n targetElement = containerRef.current\n }\n\n if (targetElement) {\n targetElement.addEventListener('keydown', handleKeyboardNavigation, true)\n\n return () => {\n targetElement?.removeEventListener('keydown', handleKeyboardNavigation, true)\n }\n }\n\n return undefined\n }, [editor, containerRef, items, selectedIndex, onSelect, onClose, orientation])\n\n React.useEffect(() => {\n if (query) {\n setSelectedIndex(autoSelectFirstItem ? 0 : -1)\n }\n }, [query, autoSelectFirstItem])\n\n return {\n selectedIndex: items.length ? selectedIndex : undefined,\n setSelectedIndex\n }\n}\n","import * as React from 'react'\n\nexport const BanIcon = React.memo(({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n return (\n <svg width=\"24\" height=\"24\" className={className} viewBox=\"0 0 24 24\" fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M4.43471 4.01458C4.34773 4.06032 4.26607 4.11977 4.19292 4.19292C4.11977 4.26607 4.06032 4.34773 4.01458 4.43471C2.14611 6.40628 1 9.0693 1 12C1 18.0751 5.92487 23 12 23C14.9306 23 17.5936 21.854 19.5651 19.9856C19.6522 19.9398 19.7339 19.8803 19.8071 19.8071C19.8803 19.7339 19.9398 19.6522 19.9856 19.5651C21.854 17.5936 23 14.9306 23 12C23 5.92487 18.0751 1 12 1C9.0693 1 6.40628 2.14611 4.43471 4.01458ZM6.38231 4.9681C7.92199 3.73647 9.87499 3 12 3C16.9706 3 21 7.02944 21 12C21 14.125 20.2635 16.078 19.0319 17.6177L6.38231 4.9681ZM17.6177 19.0319C16.078 20.2635 14.125 21 12 21C7.02944 21 3 16.9706 3 12C3 9.87499 3.73647 7.92199 4.9681 6.38231L17.6177 19.0319Z\"\n fill=\"currentColor\"\n />\n </svg>\n )\n})\n\nBanIcon.displayName = 'BanIcon'\n","import * as React from 'react'\n\nexport const HighlighterIcon = React.memo(({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n return (\n <svg width=\"24\" height=\"24\" className={className} viewBox=\"0 0 24 24\" fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M14.7072 4.70711C15.0977 4.31658 15.0977 3.68342 14.7072 3.29289C14.3167 2.90237 13.6835 2.90237 13.293 3.29289L8.69294 7.89286L8.68594 7.9C8.13626 8.46079 7.82837 9.21474 7.82837 10C7.82837 10.2306 7.85491 10.4584 7.90631 10.6795L2.29289 16.2929C2.10536 16.4804 2 16.7348 2 17V20C2 20.5523 2.44772 21 3 21H12C12.2652 21 12.5196 20.8946 12.7071 20.7071L15.3205 18.0937C15.5416 18.1452 15.7695 18.1717 16.0001 18.1717C16.7853 18.1717 17.5393 17.8639 18.1001 17.3142L22.7072 12.7071C23.0977 12.3166 23.0977 11.6834 22.7072 11.2929C22.3167 10.9024 21.6835 10.9024 21.293 11.2929L16.6971 15.8887C16.5105 16.0702 16.2605 16.1717 16.0001 16.1717C15.7397 16.1717 15.4897 16.0702 15.303 15.8887L10.1113 10.697C9.92992 10.5104 9.82837 10.2604 9.82837 10C9.82837 9.73963 9.92992 9.48958 10.1113 9.30297L14.7072 4.70711ZM13.5858 17L9.00004 12.4142L4 17.4142V19H11.5858L13.5858 17Z\"\n fill=\"currentColor\"\n />\n </svg>\n )\n})\n\nHighlighterIcon.displayName = 'HighlighterIcon'\n","import './popover.less'\nimport type { Placement } from '@floating-ui/react'\nimport {\n autoUpdate,\n flip,\n FloatingFocusManager,\n FloatingPortal,\n limitShift,\n offset,\n shift,\n useClick,\n useDismiss,\n useFloating,\n useInteractions,\n useMergeRefs,\n useRole\n} from '@floating-ui/react'\nimport * as React from 'react'\n\ntype PopoverContextValue = ReturnType<typeof usePopover> & {\n setLabelId: (id: string | undefined) => void\n setDescriptionId: (id: string | undefined) => void\n updatePosition: (side: 'top' | 'right' | 'bottom' | 'left', align: 'start' | 'center' | 'end') => void\n}\n\ninterface PopoverOptions {\n initialOpen?: boolean\n modal?: boolean\n open?: boolean\n onOpenChange?: (open: boolean) => void\n side?: 'top' | 'right' | 'bottom' | 'left'\n align?: 'start' | 'center' | 'end'\n}\n\ninterface PopoverProps extends PopoverOptions {\n children: React.ReactNode\n}\n\nconst PopoverContext = React.createContext<PopoverContextValue | null>(null)\n\nfunction usePopoverContext() {\n const context = React.useContext(PopoverContext)\n if (!context) {\n throw new Error('Popover components must be wrapped in <Popover />')\n }\n return context\n}\n\nfunction usePopover({\n initialOpen = false,\n modal,\n open: controlledOpen,\n onOpenChange: setControlledOpen,\n side = 'bottom',\n align = 'center'\n}: PopoverOptions = {}) {\n const [uncontrolledOpen, setUncontrolledOpen] = React.useState(initialOpen)\n const [labelId, setLabelId] = React.useState<string>()\n const [descriptionId, setDescriptionId] = React.useState<string>()\n const [currentPlacement, setCurrentPlacement] = React.useState<Placement>(`${side}-${align}` as Placement)\n\n const open = controlledOpen ?? uncontrolledOpen\n const setOpen = setControlledOpen ?? setUncontrolledOpen\n\n const middleware = React.useMemo(\n () => [\n offset(4),\n flip({\n fallbackAxisSideDirection: 'end',\n crossAxis: false\n }),\n shift({\n limiter: limitShift({ offset: 4 })\n })\n ],\n []\n )\n\n const floating = useFloating({\n placement: currentPlacement,\n open,\n onOpenChange: setOpen,\n whileElementsMounted: autoUpdate,\n middleware\n })\n\n const interactions = useInteractions([useClick(floating.context), useDismiss(floating.context), useRole(floating.context)])\n\n const updatePosition = React.useCallback((newSide: 'top' | 'right' | 'bottom' | 'left', newAlign: 'start' | 'center' | 'end') => {\n setCurrentPlacement(`${newSide}-${newAlign}` as Placement)\n }, [])\n\n return React.useMemo(\n () => ({\n open,\n setOpen,\n ...interactions,\n ...floating,\n modal,\n labelId,\n descriptionId,\n setLabelId,\n setDescriptionId,\n updatePosition\n }),\n [open, setOpen, interactions, floating, modal, labelId, descriptionId, updatePosition]\n )\n}\n\nfunction Popover({ children, modal = false, ...options }: PopoverProps) {\n const popover = usePopover({ modal, ...options })\n return <PopoverContext.Provider value={popover}>{children}</PopoverContext.Provider>\n}\n\ninterface TriggerElementProps extends React.HTMLProps<HTMLElement> {\n asChild?: boolean\n}\n\nconst PopoverTrigger = React.forwardRef<HTMLElement, TriggerElementProps>(function PopoverTrigger({ children, asChild = false, ...props }, propRef) {\n const context = usePopoverContext()\n const childrenRef = React.isValidElement(children)\n ? parseInt(React.version, 10) >= 19\n ? (children.props as any).ref\n : (children as any).ref\n : undefined\n const ref = useMergeRefs([context.refs.setReference, propRef, childrenRef])\n\n if (asChild && React.isValidElement(children)) {\n return React.cloneElement(\n children,\n context.getReferenceProps({\n ref,\n ...props,\n ...(children.props as any),\n 'data-state': context.open ? 'open' : 'closed'\n })\n )\n }\n\n return (\n <button ref={ref} data-state={context.open ? 'open' : 'closed'} {...context.getReferenceProps(props)}>\n {children}\n </button>\n )\n})\n\ninterface PopoverContentProps extends React.HTMLProps<HTMLDivElement> {\n side?: 'top' | 'right' | 'bottom' | 'left'\n align?: 'start' | 'center' | 'end'\n portal?: boolean\n portalProps?: Omit<React.ComponentProps<typeof FloatingPortal>, 'children'>\n}\n\nconst PopoverContent = React.forwardRef<HTMLDivElement, PopoverContentProps>(function PopoverContent(\n { className, side = 'bottom', align = 'center', style, portal = true, portalProps = {}, ...props },\n propRef\n) {\n const context = usePopoverContext()\n const ref = useMergeRefs([context.refs.setFloating, propRef])\n\n React.useEffect(() => {\n context.updatePosition(side, align)\n }, [context, side, align])\n\n if (!context.context.open) return null\n\n const content = (\n <FloatingFocusManager context={context.context} modal={context.modal}>\n <div\n ref={ref}\n style={{\n position: context.strategy,\n top: context.y ?? 0,\n left: context.x ?? 0,\n ...style\n }}\n aria-labelledby={context.labelId}\n aria-describedby={context.descriptionId}\n className={`tiptap-popover ${className || ''}`}\n data-side={side}\n data-align={align}\n data-state={context.context.open ? 'open' : 'closed'}\n {...context.getFloatingProps(props)}\n >\n {props.children}\n </div>\n </FloatingFocusManager>\n )\n\n if (portal) {\n return <FloatingPortal {...portalProps}>{content}</FloatingPortal>\n }\n\n return content\n})\n\nPopoverTrigger.displayName = 'PopoverTrigger'\nPopoverContent.displayName = 'PopoverContent'\n\nexport { Popover, PopoverContent, PopoverTrigger }\n","import type { Node } from '@tiptap/pm/model'\nimport { isNodeSelection, type Editor } from '@tiptap/react'\nimport * as React from 'react'\n\n// --- Hooks ---\nimport { useTiptapEditor } from '../../../hooks/use-tiptap-editor'\n\n// --- Lib ---\nimport { findNodePosition, isEmptyNode, isMarkInSchema } from '../../../lib/tiptap-utils'\n\n// --- UI Primitives ---\nimport type { ButtonProps } from '../../tiptap-ui-primitive/button'\nimport { Button } from '../../tiptap-ui-primitive/button'\n\n// --- Styles ---\nimport './highlight-button.less'\n\nexport const HIGHLIGHT_COLORS = [\n {\n label: 'Default background',\n value: 'var(--tt-bg-color)',\n border: 'var(--tt-bg-color-contrast)'\n },\n {\n label: 'Gray background',\n value: 'var(--tt-highlight-gray)',\n border: 'var(--tt-highlight-gray-contrast)'\n },\n {\n label: 'Brown background',\n value: 'var(--tt-highlight-brown)',\n border: 'var(--tt-highlight-brown-contrast)'\n },\n {\n label: 'Orange background',\n value: 'var(--tt-highlight-orange)',\n border: 'var(--tt-highlight-orange-contrast)'\n },\n {\n label: 'Yellow background',\n value: 'var(--tt-highlight-yellow)',\n border: 'var(--tt-highlight-yellow-contrast)'\n },\n {\n label: 'Green background',\n value: 'var(--tt-highlight-green)',\n border: 'var(--tt-highlight-green-contrast)'\n },\n {\n label: 'Blue background',\n value: 'var(--tt-highlight-blue)',\n border: 'var(--tt-highlight-blue-contrast)'\n },\n {\n label: 'Purple background',\n value: 'var(--tt-highlight-purple)',\n border: 'var(--tt-highlight-purple-contrast)'\n },\n {\n label: 'Pink background',\n value: 'var(--tt-highlight-pink)',\n border: 'var(--tt-highlight-pink-contrast)'\n },\n {\n label: 'Red background',\n value: 'var(--tt-highlight-red)',\n border: 'var(--tt-highlight-red-contrast)'\n }\n]\n\nexport interface HighlightButtonProps extends Omit<ButtonProps, 'type'> {\n /**\n * The TipTap editor instance.\n */\n editor?: Editor | null\n /**\n * The node to apply highlight to\n */\n node?: Node | null\n /**\n * The position of the node in the document\n */\n nodePos?: number | null\n /**\n * The color to apply when toggling the highlight.\n * If not provided, it will use the default color from the extension.\n */\n color: string\n /**\n * Optional text to display alongside the icon.\n */\n text?: string\n /**\n * Whether the button should hide when the mark is not available.\n * @default false\n */\n hideWhenUnavailable?: boolean\n /**\n * Called when the highlight is applied.\n */\n onApplied?: (color: string) => void\n}\n\n/**\n * Checks if highlight can be toggled in the current editor state\n */\nexport function canToggleHighlight(editor: Editor | null): boolean {\n if (!editor) return false\n try {\n return editor.can().setMark('highlight')\n } catch {\n return false\n }\n}\n\n/**\n * Checks if highlight is active in the current selection\n */\nexport function isHighlightActive(editor: Editor | null, color: string): boolean {\n if (!editor) return false\n return editor.isActive('highlight', { color })\n}\n\n/**\n * Toggles highlight on the current selection or specified node\n */\nexport function toggleHighlight(editor: Editor | null, color: string, node?: Node | null, nodePos?: number | null): void {\n if (!editor) return\n\n try {\n const chain = editor.chain().focus()\n\n if (isEmptyNode(node)) {\n chain.toggleMark('highlight', { color }).run()\n } else if (nodePos !== undefined && nodePos !== null && nodePos !== -1) {\n chain.setNodeSelection(nodePos).toggleMark('highlight', { color }).run()\n } else if (node) {\n const foundPos = findNodePosition({ editor, node })\n if (foundPos) {\n chain.setNodeSelection(foundPos.pos).toggleMark('highlight', { color }).run()\n } else {\n chain.toggleMark('highlight', { color }).run()\n }\n } else {\n chain.toggleMark('highlight', { color }).run()\n }\n\n editor.chain().setMeta('hideDragHandle', true).run()\n } catch (error) {\n console.error('Failed to apply highlight:', error)\n }\n}\n\n/**\n * Determines if the highlight button should be disabled\n */\nexport function isHighlightButtonDisabled(editor: Editor | null, userDisabled: boolean = false): boolean {\n if (!editor || userDisabled) return true\n\n const isIncompatibleContext = editor.isActive('code') || editor.isActive('codeBlock') || editor.isActive('imageUpload')\n\n return isIncompatibleContext || !canToggleHighlight(editor)\n}\n\n/**\n * Determines if the highlight button should be shown\n */\nexport function shouldShowHighlightButton(editor: Editor | null, hideWhenUnavailable: boolean, highlightInSchema: boolean): boolean {\n if (!highlightInSchema || !editor) return false\n\n if (hideWhenUnavailable) {\n if (isNodeSelection(editor.state.selection) || !canToggleHighlight(editor)) {\n return false\n }\n }\n\n return true\n}\n\n/**\n * Custom hook to manage highlight button state\n */\nexport function useHighlightState(editor: Editor | null, color: string, disabled: boolean = false, hideWhenUnavailable: boolean = false) {\n const highlightInSchema = isMarkInSchema('highlight', editor)\n const isDisabled = isHighlightButtonDisabled(editor, disabled)\n const isActive = isHighlightActive(editor, color)\n\n const shouldShow = React.useMemo(\n () => shouldShowHighlightButton(editor, hideWhenUnavailable, highlightInSchema),\n [editor, hideWhenUnavailable, highlightInSchema]\n )\n\n return {\n highlightInSchema,\n isDisabled,\n isActive,\n shouldShow\n }\n}\n\n/**\n * HighlightButton component for TipTap editor\n */\nexport const HighlightButton = React.forwardRef<HTMLButtonElement, HighlightButtonProps>(\n (\n {\n editor: providedEditor,\n node,\n nodePos,\n color,\n text,\n hideWhenUnavailable = false,\n className = '',\n disabled,\n onClick,\n onApplied,\n children,\n style,\n ...buttonProps\n },\n ref\n ) => {\n const editor = useTiptapEditor(providedEditor)\n const { isDisabled, isActive, shouldShow } = useHighlightState(editor, color, disabled, hideWhenUnavailable)\n\n const handleClick = React.useCallback(\n (e: React.MouseEvent<HTMLButtonElement>) => {\n onClick?.(e)\n\n if (!e.defaultPrevented && !isDisabled && editor) {\n toggleHighlight(editor, color, node, nodePos)\n onApplied?.(color)\n }\n },\n [color, editor, isDisabled, node, nodePos, onClick, onApplied]\n )\n\n const buttonStyle = React.useMemo(\n () =>\n ({\n ...style,\n '--highlight-color': color\n }) as React.CSSProperties,\n [color, style]\n )\n\n if (!shouldShow || !editor || !editor.isEditable) {\n return null\n }\n\n return (\n <Button\n type=\"button\"\n className={className.trim()}\n disabled={isDisabled}\n data-style=\"ghost\"\n data-active-state={isActive ? 'on' : 'off'}\n data-disabled={isDisabled}\n role=\"button\"\n tabIndex={-1}\n aria-label={`${color} highlight color`}\n aria-pressed={isActive}\n onClick={handleClick}\n style={buttonStyle}\n {...buttonProps}\n ref={ref}\n >\n {children || (\n <>\n <span className=\"tiptap-button-highlight\" style={{ '--highlight-color': color } as React.CSSProperties} />\n {text && <span className=\"tiptap-button-text\">{text}</span>}\n </>\n )}\n </Button>\n )\n }\n)\n\nHighlightButton.displayName = 'HighlightButton'\n\nexport default HighlightButton\n","import { isNodeSelection, type Editor } from '@tiptap/react'\nimport * as React from 'react'\n\n// --- Hooks ---\nimport { useMenuNavigation } from '../../../hooks/use-menu-navigation'\nimport { useTiptapEditor } from '../../../hooks/use-tiptap-editor'\n\n// --- Icons ---\nimport { BanIcon } from '../../tiptap-icons/ban-icon'\nimport { HighlighterIcon } from '../../tiptap-icons/highlighter-icon'\n\n// --- Lib ---\nimport { isMarkInSchema } from '../../../lib/tiptap-utils'\n\n// --- UI Primitives ---\nimport type { ButtonProps } from '../../tiptap-ui-primitive/button'\nimport { Button } from '../../tiptap-ui-primitive/button'\nimport { Popover, PopoverContent, PopoverTrigger } from '../../tiptap-ui-primitive/popover'\nimport { Separator } from '../../tiptap-ui-primitive/separator'\n\n// --- Tiptap UI ---\nimport { HighlightButton, canToggleHighlight } from '../../tiptap-ui/highlight-button'\n\n// --- Styles ---\nimport './highlight-popover.less'\n\nexport interface HighlightColor {\n label: string\n value: string\n border?: string\n}\n\nexport interface HighlightContentProps {\n editor?: Editor | null\n colors?: HighlightColor[]\n onClose?: () => void\n}\n\nexport interface HighlightPopoverProps extends Omit<ButtonProps, 'type'> {\n /** The TipTap editor instance. */\n editor?: Editor | null\n /** The highlight colors to display in the popover. */\n colors?: HighlightColor[]\n /** Whether to hide the highlight popover when unavailable. */\n hideWhenUnavailable?: boolean\n}\n\nexport const DEFAULT_HIGHLIGHT_COLORS: HighlightColor[] = [\n {\n label: 'Green',\n value: 'var(--tt-highlight-green)',\n border: 'var(--tt-highlight-green-contrast)'\n },\n {\n label: 'Blue',\n value: 'var(--tt-highlight-blue)',\n border: 'var(--tt-highlight-blue-contrast)'\n },\n {\n label: 'Red',\n value: 'var(--tt-highlight-red)',\n border: 'var(--tt-highlight-red-contrast)'\n },\n {\n label: 'Purple',\n value: 'var(--tt-highlight-purple)',\n border: 'var(--tt-highlight-purple-contrast)'\n },\n {\n label: 'Yellow',\n value: 'var(--tt-highlight-yellow)',\n border: 'var(--tt-highlight-yellow-contrast)'\n }\n]\n\nexport const HighlighterButton = React.forwardRef<HTMLButtonElement, ButtonProps>(({ className, children, ...props }, ref) => (\n <Button\n type=\"button\"\n className={className}\n data-style=\"ghost\"\n data-appearance=\"default\"\n role=\"button\"\n tabIndex={-1}\n aria-label=\"Highlight text\"\n tooltip=\"背景颜色\"\n ref={ref}\n {...props}\n >\n {children || <HighlighterIcon className=\"tiptap-button-icon\" />}\n </Button>\n))\n\nHighlighterButton.displayName = 'HighlighterButton'\n\nexport function HighlightContent({ editor: providedEditor, colors = DEFAULT_HIGHLIGHT_COLORS, onClose }: HighlightContentProps) {\n const editor = useTiptapEditor(providedEditor)\n const containerRef = React.useRef<HTMLDivElement>(null)\n\n const removeHighlight = React.useCallback(() => {\n if (!editor) return\n editor.chain().focus().unsetMark('highlight').run()\n onClose?.()\n }, [editor, onClose])\n\n const menuItems = React.useMemo(() => [...colors, { label: 'Remove highlight', value: 'none' }], [colors])\n\n const { selectedIndex } = useMenuNavigation({\n containerRef,\n items: menuItems,\n orientation: 'both',\n onSelect: (item) => {\n if (item.value === 'none') {\n removeHighlight()\n }\n onClose?.()\n },\n onClose,\n autoSelectFirstItem: false\n })\n\n return (\n <div ref={containerRef} className=\"tiptap-highlight-content\" tabIndex={0}>\n <div className=\"tiptap-button-group\" data-orientation=\"horizontal\">\n {colors.map((color, index) => (\n <HighlightButton\n key={color.value}\n editor={editor}\n color={color.value}\n aria-label={`${color.label} highlight color`}\n tabIndex={index === selectedIndex ? 0 : -1}\n data-highlighted={selectedIndex === index}\n onClick={onClose}\n />\n ))}\n </div>\n\n <Separator />\n\n <div className=\"tiptap-button-group\">\n <Button\n onClick={removeHighlight}\n aria-label=\"Remove highlight\"\n tabIndex={selectedIndex === colors.length ? 0 : -1}\n type=\"button\"\n role=\"menuitem\"\n data-style=\"ghost\"\n data-highlighted={selectedIndex === colors.length}\n >\n <BanIcon className=\"tiptap-button-icon\" />\n </Button>\n </div>\n </div>\n )\n}\n\nexport function HighlightPopover({\n editor: providedEditor,\n colors = DEFAULT_HIGHLIGHT_COLORS,\n hideWhenUnavailable = false,\n ...props\n}: HighlightPopoverProps) {\n const editor = useTiptapEditor(providedEditor)\n const [isOpen, setIsOpen] = React.useState(false)\n const [isDisabled, setIsDisabled] = React.useState(false)\n\n const markAvailable = isMarkInSchema('highlight', editor)\n\n React.useEffect(() => {\n if (!editor) return\n\n const updateIsDisabled = () => {\n let isDisabled = false\n\n if (!markAvailable || !editor) {\n isDisabled = true\n }\n\n const isInCompatibleContext = editor.isActive('code') || editor.isActive('codeBlock') || editor.isActive('imageUpload')\n\n if (isInCompatibleContext) {\n isDisabled = true\n }\n\n setIsDisabled(isDisabled)\n }\n\n editor.on('selectionUpdate', updateIsDisabled)\n editor.on('update', updateIsDisabled)\n\n return () => {\n editor.off('selectionUpdate', updateIsDisabled)\n editor.off('update', updateIsDisabled)\n }\n }, [editor, markAvailable])\n\n const isActive = editor?.isActive('highlight') ?? false\n\n const shouldShow = React.useMemo(() => {\n if (!hideWhenUnavailable || !editor) return true\n\n return !(isNodeSelection(editor.state.selection) || !canToggleHighlight(editor))\n }, [hideWhenUnavailable, editor])\n\n if (!shouldShow || !editor || !editor.isEditable) {\n return null\n }\n\n return (\n <Popover open={isOpen} onOpenChange={setIsOpen}>\n <PopoverTrigger asChild>\n <HighlighterButton\n disabled={isDisabled}\n data-active-state={isActive ? 'on' : 'off'}\n data-disabled={isDisabled}\n aria-pressed={isActive}\n {...props}\n />\n </PopoverTrigger>\n\n <PopoverContent aria-label=\"Highlight colors\">\n <HighlightContent editor={editor} colors={colors} onClose={() => setIsOpen(false)} />\n </PopoverContent>\n </Popover>\n )\n}\n\nexport default HighlightPopover\n","import * as React from 'react'\n\nexport const CornerDownLeftIcon = React.memo(({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n return (\n <svg width=\"24\" height=\"24\" className={className} viewBox=\"0 0 24 24\" fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M21 4C21 3.44772 20.5523 3 20 3C19.4477 3 19 3.44772 19 4V11C19 11.7956 18.6839 12.5587 18.1213 13.1213C17.5587 13.6839 16.7956 14 16 14H6.41421L9.70711 10.7071C10.0976 10.3166 10.0976 9.68342 9.70711 9.29289C9.31658 8.90237 8.68342 8.90237 8.29289 9.29289L3.29289 14.2929C2.90237 14.6834 2.90237 15.3166 3.29289 15.7071L8.29289 20.7071C8.68342 21.0976 9.31658 21.0976 9.70711 20.7071C10.0976 20.3166 10.0976 19.6834 9.70711 19.2929L6.41421 16H16C17.3261 16 18.5979 15.4732 19.5355 14.5355C20.4732 13.5979 21 12.3261 21 11V4Z\"\n fill=\"currentColor\"\n />\n </svg>\n )\n})\n\nCornerDownLeftIcon.displayName = 'CornerDownLeftIcon'\n","import * as React from 'react'\n\nexport const ExternalLinkIcon = React.memo(({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n return (\n <svg width=\"24\" height=\"24\" className={className} viewBox=\"0 0 24 24\" fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n d=\"M14 3C14 2.44772 14.4477 2 15 2H21C21.5523 2 22 2.44772 22 3V9C22 9.55228 21.5523 10 21 10C20.4477 10 20 9.55228 20 9V5.41421L10.7071 14.7071C10.3166 15.0976 9.68342 15.0976 9.29289 14.7071C8.90237 14.3166 8.90237 13.6834 9.29289 13.2929L18.5858 4H15C14.4477 4 14 3.55228 14 3Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M4.29289 7.29289C4.48043 7.10536 4.73478 7 5 7H11C11.5523 7 12 6.55228 12 6C12 5.44772 11.5523 5 11 5H5C4.20435 5 3.44129 5.31607 2.87868 5.87868C2.31607 6.44129 2 7.20435 2 8V19C2 19.7957 2.31607 20.5587 2.87868 21.1213C3.44129 21.6839 4.20435 22 5 22H16C16.7957 22 17.5587 21.6839 18.1213 21.1213C18.6839 20.5587 19 19.7957 19 19V13C19 12.4477 18.5523 12 18 12C17.4477 12 17 12.4477 17 13V19C17 19.2652 16.8946 19.5196 16.7071 19.7071C16.5196 19.8946 16.2652 20 16 20H5C4.73478 20 4.48043 19.8946 4.29289 19.7071C4.10536 19.5196 4 19.2652 4 19V8C4 7.73478 4.10536 7.48043 4.29289 7.29289Z\"\n fill=\"currentColor\"\n />\n </svg>\n )\n})\n\nExternalLinkIcon.displayName = 'ExternalLinkIcon'\n","import * as React from 'react'\n\nexport const LinkIcon = React.memo(({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n return (\n <svg width=\"24\" height=\"24\" className={className} viewBox=\"0 0 24 24\" fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n d=\"M16.9958 1.06669C15.4226 1.05302 13.907 1.65779 12.7753 2.75074L12.765 2.76086L11.045 4.47086C10.6534 4.86024 10.6515 5.49341 11.0409 5.88507C11.4303 6.27673 12.0634 6.27858 12.4551 5.88919L14.1697 4.18456C14.9236 3.45893 15.9319 3.05752 16.9784 3.06662C18.0272 3.07573 19.0304 3.49641 19.772 4.23804C20.5137 4.97967 20.9344 5.98292 20.9435 7.03171C20.9526 8.07776 20.5515 9.08563 19.8265 9.83941L16.833 12.8329C16.4274 13.2386 15.9393 13.5524 15.4019 13.7529C14.8645 13.9533 14.2903 14.0359 13.7181 13.9949C13.146 13.9539 12.5894 13.7904 12.0861 13.5154C11.5827 13.2404 11.1444 12.8604 10.8008 12.401C10.47 11.9588 9.84333 11.8685 9.40108 12.1993C8.95883 12.5301 8.86849 13.1568 9.1993 13.599C9.71464 14.288 10.3721 14.858 11.1272 15.2705C11.8822 15.683 12.7171 15.9283 13.5753 15.9898C14.4334 16.0513 15.2948 15.9274 16.1009 15.6267C16.907 15.326 17.639 14.8555 18.2473 14.247L21.2472 11.2471L21.2593 11.2347C22.3523 10.1031 22.9571 8.58751 22.9434 7.01433C22.9297 5.44115 22.2987 3.93628 21.1863 2.82383C20.0738 1.71138 18.5689 1.08036 16.9958 1.06669Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M10.4247 8.0102C9.56657 7.94874 8.70522 8.07256 7.89911 8.37326C7.09305 8.67395 6.36096 9.14458 5.75272 9.753L2.75285 12.7529L2.74067 12.7653C1.64772 13.8969 1.04295 15.4125 1.05662 16.9857C1.07029 18.5589 1.70131 20.0637 2.81376 21.1762C3.9262 22.2886 5.43108 22.9196 7.00426 22.9333C8.57744 22.947 10.0931 22.3422 11.2247 21.2493L11.2371 21.2371L12.9471 19.5271C13.3376 19.1366 13.3376 18.5034 12.9471 18.1129C12.5565 17.7223 11.9234 17.7223 11.5328 18.1129L9.82932 19.8164C9.07555 20.5414 8.06768 20.9425 7.02164 20.9334C5.97285 20.9243 4.9696 20.5036 4.22797 19.762C3.48634 19.0203 3.06566 18.0171 3.05655 16.9683C3.04746 15.9222 3.44851 14.9144 4.17355 14.1606L7.16719 11.167C7.5727 10.7613 8.06071 10.4476 8.59811 10.2471C9.13552 10.0467 9.70976 9.96412 10.2819 10.0051C10.854 10.0461 11.4106 10.2096 11.9139 10.4846C12.4173 10.7596 12.8556 11.1397 13.1992 11.599C13.53 12.0412 14.1567 12.1316 14.5989 11.8007C15.0412 11.4699 15.1315 10.8433 14.8007 10.401C14.2854 9.71205 13.6279 9.14198 12.8729 8.72948C12.1178 8.31697 11.2829 8.07166 10.4247 8.0102Z\"\n fill=\"currentColor\"\n />\n </svg>\n )\n})\n\nLinkIcon.displayName = 'LinkIcon'\n","import * as React from 'react'\n\nexport const TrashIcon = React.memo(({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n return (\n <svg width=\"24\" height=\"24\" className={className} viewBox=\"0 0 24 24\" fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M7 5V4C7 3.17477 7.40255 2.43324 7.91789 1.91789C8.43324 1.40255 9.17477 1 10 1H14C14.8252 1 15.5668 1.40255 16.0821 1.91789C16.5975 2.43324 17 3.17477 17 4V5H21C21.5523 5 22 5.44772 22 6C22 6.55228 21.5523 7 21 7H20V20C20 20.8252 19.5975 21.5668 19.0821 22.0821C18.5668 22.5975 17.8252 23 17 23H7C6.17477 23 5.43324 22.5975 4.91789 22.0821C4.40255 21.5668 4 20.8252 4 20V7H3C2.44772 7 2 6.55228 2 6C2 5.44772 2.44772 5 3 5H7ZM9 4C9 3.82523 9.09745 3.56676 9.33211 3.33211C9.56676 3.09745 9.82523 3 10 3H14C14.1748 3 14.4332 3.09745 14.6679 3.33211C14.9025 3.56676 15 3.82523 15 4V5H9V4ZM6 7V20C6 20.1748 6.09745 20.4332 6.33211 20.6679C6.56676 20.9025 6.82523 21 7 21H17C17.1748 21 17.4332 20.9025 17.6679 20.6679C17.9025 20.4332 18 20.1748 18 20V7H6Z\"\n fill=\"currentColor\"\n />\n </svg>\n )\n})\n\nTrashIcon.displayName = 'TrashIcon'\n","import { isNodeSelection, type Editor } from '@tiptap/react'\nimport * as React from 'react'\n\n// --- Hooks ---\nimport { useTiptapEditor } from '../../../hooks/use-tiptap-editor'\n\n// --- Icons ---\nimport { CornerDownLeftIcon } from '../../tiptap-icons/corner-down-left-icon'\nimport { ExternalLinkIcon } from '../../tiptap-icons/external-link-icon'\nimport { LinkIcon } from '../../tiptap-icons/link-icon'\nimport { TrashIcon } from '../../tiptap-icons/trash-icon'\n\n// --- Lib ---\nimport { isMarkInSchema } from '../../../lib/tiptap-utils'\n\n// --- UI Primitives ---\nimport type { ButtonProps } from '../../tiptap-ui-primitive/button'\nimport { Button } from '../../tiptap-ui-primitive/button'\nimport { Popover, PopoverContent, PopoverTrigger } from '../../tiptap-ui-primitive/popover'\nimport { Separator } from '../../tiptap-ui-primitive/separator'\n\n// --- Styles ---\nimport './link-popover.less'\n\nexport interface LinkHandlerProps {\n editor: Editor | null\n onSetLink?: () => void\n onLinkActive?: () => void\n}\n\nexport interface LinkMainProps {\n url: string\n setUrl: React.Dispatch<React.SetStateAction<string>>\n setLink: () => void\n removeLink: () => void\n isActive: boolean\n}\n\nexport const useLinkHandler = (props: LinkHandlerProps) => {\n const { editor, onSetLink, onLinkActive } = props\n const [url, setUrl] = React.useState<string>('')\n\n React.useEffect(() => {\n if (!editor) return\n\n // Get URL immediately on mount\n const { href } = editor.getAttributes('link')\n\n if (editor.isActive('link') && !url) {\n setUrl(href || '')\n onLinkActive?.()\n }\n }, [editor, onLinkActive, url])\n\n React.useEffect(() => {\n if (!editor) return\n\n const updateLinkState = () => {\n const { href } = editor.getAttributes('link')\n setUrl(href || '')\n\n if (editor.isActive('link') && !url) {\n onLinkActive?.()\n }\n }\n\n editor.on('selectionUpdate', updateLinkState)\n return () => {\n editor.off('selectionUpdate', updateLinkState)\n }\n }, [editor, onLinkActive, url])\n\n const setLink = React.useCallback(() => {\n if (!url || !editor) return\n\n const { from, to } = editor.state.selection\n const text = editor.state.doc.textBetween(from, to)\n\n editor\n .chain()\n .focus()\n .extendMarkRange('link')\n .insertContent({\n type: 'text',\n text: text || url,\n marks: [{ type: 'link', attrs: { href: url } }]\n })\n .run()\n\n onSetLink?.()\n }, [editor, onSetLink, url])\n\n const removeLink = React.useCallback(() => {\n if (!editor) return\n editor.chain().focus().unsetMark('link', { extendEmptyMarkRange: true }).setMeta('preventAutolink', true).run()\n setUrl('')\n }, [editor])\n\n return {\n url,\n setUrl,\n setLink,\n removeLink,\n isActive: editor?.isActive('link') || false\n }\n}\n\nexport const LinkButton = React.forwardRef<HTMLButtonElement, ButtonProps>(({ className, children, ...props }, ref) => {\n return (\n <Button type=\"button\" className={className} data-style=\"ghost\" role=\"button\" tabIndex={-1} aria-label=\"Link\" tooltip=\"链接\" ref={ref} {...props}>\n {children || <LinkIcon className=\"tiptap-button-icon\" />}\n </Button>\n )\n})\n\nexport const LinkContent: React.FC<{\n editor?: Editor | null\n}> = ({ editor: providedEditor }) => {\n const editor = useTiptapEditor(providedEditor)\n\n const linkHandler = useLinkHandler({\n editor: editor\n })\n\n return <LinkMain {...linkHandler} />\n}\n\nconst LinkMain: React.FC<LinkMainProps> = ({ url, setUrl, setLink, removeLink, isActive }) => {\n const handleKeyDown = (event: React.KeyboardEvent) => {\n if (event.key === 'Enter') {\n event.preventDefault()\n setLink()\n }\n }\n\n return (\n <>\n <input\n type=\"url\"\n placeholder=\"输入链接\"\n value={url}\n onChange={(e) => setUrl(e.target.value)}\n onKeyDown={handleKeyDown}\n autoComplete=\"off\"\n autoCorrect=\"off\"\n autoCapitalize=\"off\"\n className=\"tiptap-input tiptap-input-clamp\"\n />\n\n <div className=\"tiptap-button-group\" data-orientation=\"horizontal\">\n <Button type=\"button\" onClick={setLink} title=\"确认\" disabled={!url && !isActive} data-style=\"ghost\">\n <CornerDownLeftIcon className=\"tiptap-button-icon\" />\n </Button>\n </div>\n\n <Separator />\n\n <div className=\"tiptap-button-group\" data-orientation=\"horizontal\">\n <Button type=\"button\" onClick={() => window.open(url, '_blank')} title=\"新窗口打开\" disabled={!url && !isActive} data-style=\"ghost\">\n <ExternalLinkIcon className=\"tiptap-button-icon\" />\n </Button>\n\n <Button type=\"button\" onClick={removeLink} title=\"删除链接\" disabled={!url && !isActive} data-style=\"ghost\">\n <TrashIcon className=\"tiptap-button-icon\" />\n </Button>\n </div>\n </>\n )\n}\n\nexport interface LinkPopoverProps extends Omit<ButtonProps, 'type'> {\n /**\n * The TipTap editor instance.\n */\n editor?: Editor | null\n /**\n * Whether to hide the link popover.\n * @default false\n */\n hideWhenUnavailable?: boolean\n /**\n * Callback for when the popover opens or closes.\n */\n onOpenChange?: (isOpen: boolean) => void\n /**\n * Whether to automatically open the popover when a link is active.\n * @default true\n */\n autoOpenOnLinkActive?: boolean\n}\n\nexport function LinkPopover({\n editor: providedEditor,\n hideWhenUnavailable = false,\n onOpenChange,\n autoOpenOnLinkActive = true,\n ...props\n}: LinkPopoverProps) {\n const editor = useTiptapEditor(providedEditor)\n\n const linkInSchema = isMarkInSchema('link', editor)\n\n const [isOpen, setIsOpen] = React.useState(false)\n\n const onSetLink = () => {\n setIsOpen(false)\n }\n\n const onLinkActive = () => setIsOpen(autoOpenOnLinkActive)\n\n const linkHandler = useLinkHandler({\n editor: editor,\n onSetLink,\n onLinkActive\n })\n\n const isDisabled = React.useMemo(() => {\n if (!editor) return true\n if (editor.isActive('codeBlock')) return true\n return !editor.can().setLink?.({ href: '' })\n }, [editor])\n\n const canSetLink = React.useMemo(() => {\n if (!editor) return false\n try {\n return editor.can().setMark('link')\n } catch {\n return false\n }\n }, [editor])\n\n const isActive = editor?.isActive('link') ?? false\n\n const handleOnOpenChange = React.useCallback(\n (nextIsOpen: boolean) => {\n setIsOpen(nextIsOpen)\n onOpenChange?.(nextIsOpen)\n },\n [onOpenChange]\n )\n\n const show = React.useMemo(() => {\n if (!linkInSchema || !editor) {\n return false\n }\n\n if (hideWhenUnavailable) {\n if (isNodeSelection(editor.state.selection) || !canSetLink) {\n return false\n }\n }\n\n return true\n }, [linkInSchema, hideWhenUnavailable, editor, canSetLink])\n\n if (!show || !editor || !editor.isEditable) {\n return null\n }\n\n return (\n <Popover open={isOpen} onOpenChange={handleOnOpenChange}>\n <PopoverTrigger asChild>\n <LinkButton disabled={isDisabled} data-active-state={isActive ? 'on' : 'off'} data-disabled={isDisabled} {...props} />\n </PopoverTrigger>\n\n <PopoverContent>\n <LinkMain {...linkHandler} />\n </PopoverContent>\n </Popover>\n )\n}\n\nLinkButton.displayName = 'LinkButton'\n","import * as React from 'react'\n\nexport const ListIcon = React.memo(({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n return (\n <svg width=\"24\" height=\"24\" className={className} viewBox=\"0 0 24 24\" fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M7 6C7 5.44772 7.44772 5 8 5H21C21.5523 5 22 5.44772 22 6C22 6.55228 21.5523 7 21 7H8C7.44772 7 7 6.55228 7 6Z\"\n fill=\"currentColor\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M7 12C7 11.4477 7.44772 11 8 11H21C21.5523 11 22 11.4477 22 12C22 12.5523 21.5523 13 21 13H8C7.44772 13 7 12.5523 7 12Z\"\n fill=\"currentColor\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M7 18C7 17.4477 7.44772 17 8 17H21C21.5523 17 22 17.4477 22 18C22 18.5523 21.5523 19 21 19H8C7.44772 19 7 18.5523 7 18Z\"\n fill=\"currentColor\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M2 6C2 5.44772 2.44772 5 3 5H3.01C3.56228 5 4.01 5.44772 4.01 6C4.01 6.55228 3.56228 7 3.01 7H3C2.44772 7 2 6.55228 2 6Z\"\n fill=\"currentColor\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M2 12C2 11.4477 2.44772 11 3 11H3.01C3.56228 11 4.01 11.4477 4.01 12C4.01 12.5523 3.56228 13 3.01 13H3C2.44772 13 2 12.5523 2 12Z\"\n fill=\"currentColor\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M2 18C2 17.4477 2.44772 17 3 17H3.01C3.56228 17 4.01 17.4477 4.01 18C4.01 18.5523 3.56228 19 3.01 19H3C2.44772 19 2 18.5523 2 18Z\"\n fill=\"currentColor\"\n />\n </svg>\n )\n})\n\nListIcon.displayName = 'ListIcon'\n","import * as React from 'react'\n\nexport const ListOrderedIcon = React.memo(({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n return (\n <svg width=\"24\" height=\"24\" className={className} viewBox=\"0 0 24 24\" fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M9 6C9 5.44772 9.44772 5 10 5H21C21.5523 5 22 5.44772 22 6C22 6.55228 21.5523 7 21 7H10C9.44772 7 9 6.55228 9 6Z\"\n fill=\"currentColor\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M9 12C9 11.4477 9.44772 11 10 11H21C21.5523 11 22 11.4477 22 12C22 12.5523 21.5523 13 21 13H10C9.44772 13 9 12.5523 9 12Z\"\n fill=\"currentColor\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M9 18C9 17.4477 9.44772 17 10 17H21C21.5523 17 22 17.4477 22 18C22 18.5523 21.5523 19 21 19H10C9.44772 19 9 18.5523 9 18Z\"\n fill=\"currentColor\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M3 6C3 5.44772 3.44772 5 4 5H5C5.55228 5 6 5.44772 6 6V10C6 10.5523 5.55228 11 5 11C4.44772 11 4 10.5523 4 10V7C3.44772 7 3 6.55228 3 6Z\"\n fill=\"currentColor\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M3 10C3 9.44772 3.44772 9 4 9H6C6.55228 9 7 9.44772 7 10C7 10.5523 6.55228 11 6 11H4C3.44772 11 3 10.5523 3 10Z\"\n fill=\"currentColor\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M5.82219 13.0431C6.54543 13.4047 6.99997 14.1319 6.99997 15C6.99997 15.5763 6.71806 16.0426 6.48747 16.35C6.31395 16.5814 6.1052 16.8044 5.91309 17H5.99997C6.55226 17 6.99997 17.4477 6.99997 18C6.99997 18.5523 6.55226 19 5.99997 19H3.99997C3.44769 19 2.99997 18.5523 2.99997 18C2.99997 17.4237 3.28189 16.9575 3.51247 16.65C3.74323 16.3424 4.03626 16.0494 4.26965 15.8161C4.27745 15.8083 4.2852 15.8006 4.29287 15.7929C4.55594 15.5298 4.75095 15.3321 4.88748 15.15C4.96287 15.0495 4.99021 14.9922 4.99911 14.9714C4.99535 14.9112 4.9803 14.882 4.9739 14.8715C4.96613 14.8588 4.95382 14.845 4.92776 14.8319C4.87723 14.8067 4.71156 14.7623 4.44719 14.8944C3.95321 15.1414 3.35254 14.9412 3.10555 14.4472C2.85856 13.9533 3.05878 13.3526 3.55276 13.1056C4.28839 12.7378 5.12272 12.6934 5.82219 13.0431Z\"\n fill=\"currentColor\"\n />\n </svg>\n )\n})\n\nListOrderedIcon.displayName = 'ListOrderedIcon'\n","import * as React from 'react'\n\nexport const ListTodoIcon = React.memo(({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n return (\n <svg width=\"24\" height=\"24\" className={className} viewBox=\"0 0 24 24\" fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M2 6C2 4.89543 2.89543 4 4 4H8C9.10457 4 10 4.89543 10 6V10C10 11.1046 9.10457 12 8 12H4C2.89543 12 2 11.1046 2 10V6ZM8 6H4V10H8V6Z\"\n fill=\"currentColor\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M9.70711 14.2929C10.0976 14.6834 10.0976 15.3166 9.70711 15.7071L5.70711 19.7071C5.31658 20.0976 4.68342 20.0976 4.29289 19.7071L2.29289 17.7071C1.90237 17.3166 1.90237 16.6834 2.29289 16.2929C2.68342 15.9024 3.31658 15.9024 3.70711 16.2929L5 17.5858L8.29289 14.2929C8.68342 13.9024 9.31658 13.9024 9.70711 14.2929Z\"\n fill=\"currentColor\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M12 6C12 5.44772 12.4477 5 13 5H21C21.5523 5 22 5.44772 22 6C22 6.55228 21.5523 7 21 7H13C12.4477 7 12 6.55228 12 6Z\"\n fill=\"currentColor\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M12 12C12 11.4477 12.4477 11 13 11H21C21.5523 11 22 11.4477 22 12C22 12.5523 21.5523 13 21 13H13C12.4477 13 12 12.5523 12 12Z\"\n fill=\"currentColor\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M12 18C12 17.4477 12.4477 17 13 17H21C21.5523 17 22 17.4477 22 18C22 18.5523 21.5523 19 21 19H13C12.4477 19 12 18.5523 12 18Z\"\n fill=\"currentColor\"\n />\n </svg>\n )\n})\n\nListTodoIcon.displayName = 'ListTodoIcon'\n","import { isNodeSelection, type Editor } from '@tiptap/react'\nimport * as React from 'react'\n\n// --- Hooks ---\nimport { useTiptapEditor } from '../../../hooks/use-tiptap-editor'\n\n// --- Icons ---\nimport { ListIcon } from '../../tiptap-icons/list-icon'\nimport { ListOrderedIcon } from '../../tiptap-icons/list-ordered-icon'\nimport { ListTodoIcon } from '../../tiptap-icons/list-todo-icon'\n\n// --- Lib ---\nimport { isNodeInSchema } from '../../../lib/tiptap-utils'\n\n// --- UI Primitives ---\nimport type { ButtonProps } from '../../tiptap-ui-primitive/button'\nimport { Button } from '../../tiptap-ui-primitive/button'\n\nexport type ListType = 'bulletList' | 'orderedList' | 'taskList'\n\nexport interface ListOption {\n label: string\n type: ListType\n icon: React.ElementType\n}\n\nexport interface ListButtonProps extends Omit<ButtonProps, 'type'> {\n /**\n * The TipTap editor instance.\n */\n editor?: Editor | null\n /**\n * The type of list to toggle.\n */\n type: ListType\n /**\n * Optional text to display alongside the icon.\n */\n text?: string\n /**\n * Whether the button should hide when the list is not available.\n * @default false\n */\n hideWhenUnavailable?: boolean\n}\n\nexport const listOptions: ListOption[] = [\n {\n label: '无序列表',\n type: 'bulletList',\n icon: ListIcon\n },\n {\n label: '有序列表',\n type: 'orderedList',\n icon: ListOrderedIcon\n },\n {\n label: '任务列表',\n type: 'taskList',\n icon: ListTodoIcon\n }\n]\n\nexport const listShortcutKeys: Record<ListType, string> = {\n bulletList: 'Ctrl-Shift-8',\n orderedList: 'Ctrl-Shift-7',\n taskList: 'Ctrl-Shift-9'\n}\n\nexport function canToggleList(editor: Editor | null, type: ListType): boolean {\n if (!editor) {\n return false\n }\n\n switch (type) {\n case 'bulletList':\n return editor.can().toggleBulletList()\n case 'orderedList':\n return editor.can().toggleOrderedList()\n case 'taskList':\n return editor.can().toggleList('taskList', 'taskItem')\n default:\n return false\n }\n}\n\nexport function isListActive(editor: Editor | null, type: ListType): boolean {\n if (!editor) return false\n\n switch (type) {\n case 'bulletList':\n return editor.isActive('bulletList')\n case 'orderedList':\n return editor.isActive('orderedList')\n case 'taskList':\n return editor.isActive('taskList')\n default:\n return false\n }\n}\n\nexport function toggleList(editor: Editor | null, type: ListType): void {\n if (!editor) return\n\n switch (type) {\n case 'bulletList':\n editor.chain().focus().toggleBulletList().run()\n break\n case 'orderedList':\n editor.chain().focus().toggleOrderedList().run()\n break\n case 'taskList':\n editor.chain().focus().toggleList('taskList', 'taskItem').run()\n break\n }\n}\n\nexport function getListOption(type: ListType): ListOption | undefined {\n return listOptions.find((option) => option.type === type)\n}\n\nexport function shouldShowListButton(params: {\n editor: Editor | null\n type: ListType\n hideWhenUnavailable: boolean\n listInSchema: boolean\n}): boolean {\n const { editor, type, hideWhenUnavailable, listInSchema } = params\n\n if (!listInSchema || !editor) {\n return false\n }\n\n if (hideWhenUnavailable) {\n if (isNodeSelection(editor.state.selection) || !canToggleList(editor, type)) {\n return false\n }\n }\n\n return true\n}\n\nexport function useListState(editor: Editor | null, type: ListType) {\n const listInSchema = isNodeInSchema(type, editor)\n const listOption = getListOption(type)\n const isActive = isListActive(editor, type)\n const shortcutKey = listShortcutKeys[type]\n\n return {\n listInSchema,\n listOption,\n isActive,\n shortcutKey\n }\n}\n\nexport const ListButton = React.forwardRef<HTMLButtonElement, ListButtonProps>(\n ({ editor: providedEditor, type, hideWhenUnavailable = false, className = '', onClick, text, children, ...buttonProps }, ref) => {\n const editor = useTiptapEditor(providedEditor)\n const { listInSchema, listOption, isActive, shortcutKey } = useListState(editor, type)\n\n const Icon = listOption?.icon || ListIcon\n\n const handleClick = React.useCallback(\n (e: React.MouseEvent<HTMLButtonElement>) => {\n onClick?.(e)\n\n if (!e.defaultPrevented && editor) {\n toggleList(editor, type)\n }\n },\n [onClick, editor, type]\n )\n\n const show = React.useMemo(() => {\n return shouldShowListButton({\n editor,\n type,\n hideWhenUnavailable,\n listInSchema\n })\n }, [editor, type, hideWhenUnavailable, listInSchema])\n\n if (!show || !editor || !editor.isEditable) {\n return null\n }\n\n return (\n <Button\n type=\"button\"\n className={className.trim()}\n data-style=\"ghost\"\n data-active-state={isActive ? 'on' : 'off'}\n role=\"button\"\n tabIndex={-1}\n aria-label={listOption?.label || type}\n aria-pressed={isActive}\n tooltip={listOption?.label || type}\n shortcutKeys={shortcutKey}\n onClick={handleClick}\n {...buttonProps}\n ref={ref}\n >\n {children || (\n <>\n <Icon className=\"tiptap-button-icon\" />\n {text && <span className=\"tiptap-button-text\">{text}</span>}\n </>\n )}\n </Button>\n )\n }\n)\n\nListButton.displayName = 'ListButton'\n\nexport default ListButton\n","import { isNodeSelection, type Editor } from '@tiptap/react'\nimport * as React from 'react'\n\n// --- Hooks ---\nimport { useTiptapEditor } from '../../../hooks/use-tiptap-editor'\n\n// --- Icons ---\nimport { ChevronDownIcon } from '../../tiptap-icons/chevron-down-icon'\nimport { ListIcon } from '../../tiptap-icons/list-icon'\n\n// --- Lib ---\nimport { isNodeInSchema } from '../../../lib/tiptap-utils'\n\n// --- Tiptap UI ---\nimport {\n ListButton,\n canToggleList,\n isListActive,\n listOptions,\n type ListType\n} from '../../tiptap-ui/list-button/list-button'\n\n// --- UI Primitives ---\nimport type { ButtonProps } from '../../tiptap-ui-primitive/button'\nimport { Button } from '../../tiptap-ui-primitive/button'\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuTrigger\n} from '../../tiptap-ui-primitive/dropdown-menu'\n\nexport interface ListDropdownMenuProps extends Omit<ButtonProps, 'type'> {\n /**\n * The TipTap editor instance.\n */\n editor?: Editor\n /**\n * The list types to display in the dropdown.\n */\n types?: ListType[]\n /**\n * Whether the dropdown should be hidden when no list types are available\n * @default false\n */\n hideWhenUnavailable?: boolean\n onOpenChange?: (isOpen: boolean) => void\n}\n\nexport function canToggleAnyList(editor: Editor | null, listTypes: ListType[]): boolean {\n if (!editor) return false\n return listTypes.some((type) => canToggleList(editor, type))\n}\n\nexport function isAnyListActive(editor: Editor | null, listTypes: ListType[]): boolean {\n if (!editor) return false\n return listTypes.some((type) => isListActive(editor, type))\n}\n\nexport function getFilteredListOptions(availableTypes: ListType[]): typeof listOptions {\n return listOptions.filter((option) => !option.type || availableTypes.includes(option.type))\n}\n\nexport function shouldShowListDropdown(params: {\n editor: Editor | null\n listTypes: ListType[]\n hideWhenUnavailable: boolean\n listInSchema: boolean\n canToggleAny: boolean\n}): boolean {\n const { editor, hideWhenUnavailable, listInSchema, canToggleAny } = params\n\n if (!listInSchema || !editor) {\n return false\n }\n\n if (hideWhenUnavailable) {\n if (isNodeSelection(editor.state.selection) || !canToggleAny) {\n return false\n }\n }\n\n return true\n}\n\nexport function useListDropdownState(editor: Editor | null, availableTypes: ListType[]) {\n const [isOpen, setIsOpen] = React.useState(false)\n\n const listInSchema = availableTypes.some((type) => isNodeInSchema(type, editor))\n\n const filteredLists = React.useMemo(() => getFilteredListOptions(availableTypes), [availableTypes])\n\n const canToggleAny = canToggleAnyList(editor, availableTypes)\n const isAnyActive = isAnyListActive(editor, availableTypes)\n\n const handleOpenChange = React.useCallback((open: boolean, callback?: (isOpen: boolean) => void) => {\n setIsOpen(open)\n callback?.(open)\n }, [])\n\n return {\n isOpen,\n setIsOpen,\n listInSchema,\n filteredLists,\n canToggleAny,\n isAnyActive,\n handleOpenChange\n }\n}\n\nexport function useActiveListIcon(editor: Editor | null, filteredLists: typeof listOptions) {\n return React.useCallback(() => {\n const activeOption = filteredLists.find((option) => isListActive(editor, option.type))\n\n return activeOption ? <activeOption.icon className=\"tiptap-button-icon\" /> : <ListIcon className=\"tiptap-button-icon\" />\n }, [editor, filteredLists])\n}\n\nexport function ListDropdownMenu({\n editor: providedEditor,\n types = ['bulletList', 'orderedList', 'taskList'],\n hideWhenUnavailable = false,\n onOpenChange,\n ...props\n}: ListDropdownMenuProps) {\n const editor = useTiptapEditor(providedEditor)\n\n const { isOpen, listInSchema, filteredLists, canToggleAny, isAnyActive, handleOpenChange } = useListDropdownState(editor, types)\n\n const getActiveIcon = useActiveListIcon(editor, filteredLists)\n\n const show = React.useMemo(() => {\n return shouldShowListDropdown({\n editor,\n listTypes: types,\n hideWhenUnavailable,\n listInSchema,\n canToggleAny\n })\n }, [editor, types, hideWhenUnavailable, listInSchema, canToggleAny])\n\n const handleOnOpenChange = React.useCallback((open: boolean) => handleOpenChange(open, onOpenChange), [handleOpenChange, onOpenChange])\n\n if (!show || !editor || !editor.isEditable) {\n return null\n }\n\n return (\n <DropdownMenu open={isOpen} onOpenChange={handleOnOpenChange}>\n <DropdownMenuTrigger asChild>\n <Button\n type=\"button\"\n data-style=\"ghost\"\n data-active-state={isAnyActive ? 'on' : 'off'}\n role=\"button\"\n tabIndex={-1}\n aria-label=\"List options\"\n tooltip=\"列表\"\n {...props}\n >\n {getActiveIcon()}\n <ChevronDownIcon className=\"tiptap-button-dropdown-small\" />\n </Button>\n </DropdownMenuTrigger>\n\n <DropdownMenuContent>\n <DropdownMenuGroup>\n {filteredLists.map((option) => (\n <DropdownMenuItem key={option.type} asChild>\n <ListButton editor={editor} type={option.type} text={option.label} hideWhenUnavailable={hideWhenUnavailable} tooltip={''} />\n </DropdownMenuItem>\n ))}\n </DropdownMenuGroup>\n </DropdownMenuContent>\n </DropdownMenu>\n )\n}\n\nexport default ListDropdownMenu\n","import * as React from 'react'\n\nexport const BoldIcon = React.memo(({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n return (\n <svg width=\"24\" height=\"24\" className={className} viewBox=\"0 0 24 24\" fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M6 2.5C5.17157 2.5 4.5 3.17157 4.5 4V20C4.5 20.8284 5.17157 21.5 6 21.5H15C16.4587 21.5 17.8576 20.9205 18.8891 19.8891C19.9205 18.8576 20.5 17.4587 20.5 16C20.5 14.5413 19.9205 13.1424 18.8891 12.1109C18.6781 11.9 18.4518 11.7079 18.2128 11.5359C19.041 10.5492 19.5 9.29829 19.5 8C19.5 6.54131 18.9205 5.14236 17.8891 4.11091C16.8576 3.07946 15.4587 2.5 14 2.5H6ZM14 10.5C14.663 10.5 15.2989 10.2366 15.7678 9.76777C16.2366 9.29893 16.5 8.66304 16.5 8C16.5 7.33696 16.2366 6.70107 15.7678 6.23223C15.2989 5.76339 14.663 5.5 14 5.5H7.5V10.5H14ZM7.5 18.5V13.5H15C15.663 13.5 16.2989 13.7634 16.7678 14.2322C17.2366 14.7011 17.5 15.337 17.5 16C17.5 16.663 17.2366 17.2989 16.7678 17.7678C16.2989 18.2366 15.663 18.5 15 18.5H7.5Z\"\n fill=\"currentColor\"\n />\n </svg>\n )\n})\n\nBoldIcon.displayName = 'BoldIcon'\n","import * as React from 'react'\n\nexport const Code2Icon = React.memo(({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n return (\n <svg width=\"24\" height=\"24\" className={className} viewBox=\"0 0 24 24\" fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n d=\"M15.4545 4.2983C15.6192 3.77115 15.3254 3.21028 14.7983 3.04554C14.2712 2.88081 13.7103 3.1746 13.5455 3.70175L8.54554 19.7017C8.38081 20.2289 8.6746 20.7898 9.20175 20.9545C9.72889 21.1192 10.2898 20.8254 10.4545 20.2983L15.4545 4.2983Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M6.70711 7.29289C7.09763 7.68342 7.09763 8.31658 6.70711 8.70711L3.41421 12L6.70711 15.2929C7.09763 15.6834 7.09763 16.3166 6.70711 16.7071C6.31658 17.0976 5.68342 17.0976 5.29289 16.7071L1.29289 12.7071C0.902369 12.3166 0.902369 11.6834 1.29289 11.2929L5.29289 7.29289C5.68342 6.90237 6.31658 6.90237 6.70711 7.29289Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M17.2929 7.29289C17.6834 6.90237 18.3166 6.90237 18.7071 7.29289L22.7071 11.2929C23.0976 11.6834 23.0976 12.3166 22.7071 12.7071L18.7071 16.7071C18.3166 17.0976 17.6834 17.0976 17.2929 16.7071C16.9024 16.3166 16.9024 15.6834 17.2929 15.2929L20.5858 12L17.2929 8.70711C16.9024 8.31658 16.9024 7.68342 17.2929 7.29289Z\"\n fill=\"currentColor\"\n />\n </svg>\n )\n})\n\nCode2Icon.displayName = 'Code2Icon'\n","import * as React from 'react'\n\nexport const ItalicIcon = React.memo(({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n return (\n <svg width=\"24\" height=\"24\" className={className} viewBox=\"0 0 24 24\" fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n d=\"M15.0222 3H19C19.5523 3 20 3.44772 20 4C20 4.55228 19.5523 5 19 5H15.693L10.443 19H14C14.5523 19 15 19.4477 15 20C15 20.5523 14.5523 21 14 21H9.02418C9.00802 21.0004 8.99181 21.0004 8.97557 21H5C4.44772 21 4 20.5523 4 20C4 19.4477 4.44772 19 5 19H8.30704L13.557 5H10C9.44772 5 9 4.55228 9 4C9 3.44772 9.44772 3 10 3H14.9782C14.9928 2.99968 15.0075 2.99967 15.0222 3Z\"\n fill=\"currentColor\"\n />\n </svg>\n )\n})\n\nItalicIcon.displayName = 'ItalicIcon'\n","import * as React from 'react'\n\nexport const StrikeIcon = React.memo(({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n return (\n <svg width=\"24\" height=\"24\" className={className} viewBox=\"0 0 24 24\" fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n d=\"M9.00039 3H16.0001C16.5524 3 17.0001 3.44772 17.0001 4C17.0001 4.55229 16.5524 5 16.0001 5H9.00011C8.68006 4.99983 8.36412 5.07648 8.07983 5.22349C7.79555 5.37051 7.55069 5.5836 7.36585 5.84487C7.181 6.10614 7.06155 6.40796 7.01754 6.72497C6.97352 7.04198 7.00623 7.36492 7.11292 7.66667C7.29701 8.18737 7.02414 8.75872 6.50344 8.94281C5.98274 9.1269 5.4114 8.85403 5.2273 8.33333C5.01393 7.72984 4.94851 7.08396 5.03654 6.44994C5.12456 5.81592 5.36346 5.21229 5.73316 4.68974C6.10285 4.1672 6.59256 3.74101 7.16113 3.44698C7.72955 3.15303 8.36047 2.99975 9.00039 3Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M18 13H20C20.5523 13 21 12.5523 21 12C21 11.4477 20.5523 11 20 11H4C3.44772 11 3 11.4477 3 12C3 12.5523 3.44772 13 4 13H14C14.7956 13 15.5587 13.3161 16.1213 13.8787C16.6839 14.4413 17 15.2044 17 16C17 16.7956 16.6839 17.5587 16.1213 18.1213C15.5587 18.6839 14.7956 19 14 19H6C5.44772 19 5 19.4477 5 20C5 20.5523 5.44772 21 6 21H14C15.3261 21 16.5979 20.4732 17.5355 19.5355C18.4732 18.5979 19 17.3261 19 16C19 14.9119 18.6453 13.8604 18 13Z\"\n fill=\"currentColor\"\n />\n </svg>\n )\n})\n\nStrikeIcon.displayName = 'StrikeIcon'\n","import * as React from 'react'\n\nexport const SubscriptIcon = React.memo(({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n return (\n <svg width=\"24\" height=\"24\" className={className} viewBox=\"0 0 24 24\" fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M3.29289 7.29289C3.68342 6.90237 4.31658 6.90237 4.70711 7.29289L12.7071 15.2929C13.0976 15.6834 13.0976 16.3166 12.7071 16.7071C12.3166 17.0976 11.6834 17.0976 11.2929 16.7071L3.29289 8.70711C2.90237 8.31658 2.90237 7.68342 3.29289 7.29289Z\"\n fill=\"currentColor\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M12.7071 7.29289C13.0976 7.68342 13.0976 8.31658 12.7071 8.70711L4.70711 16.7071C4.31658 17.0976 3.68342 17.0976 3.29289 16.7071C2.90237 16.3166 2.90237 15.6834 3.29289 15.2929L11.2929 7.29289C11.6834 6.90237 12.3166 6.90237 12.7071 7.29289Z\"\n fill=\"currentColor\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M17.4079 14.3995C18.0284 14.0487 18.7506 13.9217 19.4536 14.0397C20.1566 14.1578 20.7977 14.5138 21.2696 15.0481L21.2779 15.0574L21.2778 15.0575C21.7439 15.5988 22 16.2903 22 17C22 18.0823 21.3962 18.8401 20.7744 19.3404C20.194 19.8073 19.4858 20.141 18.9828 20.378C18.9638 20.387 18.9451 20.3958 18.9266 20.4045C18.4473 20.6306 18.2804 20.7817 18.1922 20.918C18.1773 20.9412 18.1619 20.9681 18.1467 21H21C21.5523 21 22 21.4477 22 22C22 22.5523 21.5523 23 21 23H17C16.4477 23 16 22.5523 16 22C16 21.1708 16.1176 20.4431 16.5128 19.832C16.9096 19.2184 17.4928 18.8695 18.0734 18.5956C18.6279 18.334 19.138 18.0901 19.5207 17.7821C19.8838 17.49 20 17.2477 20 17C20 16.7718 19.9176 16.5452 19.7663 16.3672C19.5983 16.1792 19.3712 16.0539 19.1224 16.0121C18.8722 15.9701 18.6152 16.015 18.3942 16.1394C18.1794 16.2628 18.0205 16.4549 17.9422 16.675C17.7572 17.1954 17.1854 17.4673 16.665 17.2822C16.1446 17.0972 15.8728 16.5254 16.0578 16.005C16.2993 15.3259 16.7797 14.7584 17.4039 14.4018L17.4079 14.3995L17.4079 14.3995Z\"\n fill=\"currentColor\"\n />\n </svg>\n )\n})\n\nSubscriptIcon.displayName = 'SubscriptIcon'\n","import * as React from 'react'\n\nexport const SuperscriptIcon = React.memo(({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n return (\n <svg width=\"24\" height=\"24\" className={className} viewBox=\"0 0 24 24\" fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M12.7071 7.29289C13.0976 7.68342 13.0976 8.31658 12.7071 8.70711L4.70711 16.7071C4.31658 17.0976 3.68342 17.0976 3.29289 16.7071C2.90237 16.3166 2.90237 15.6834 3.29289 15.2929L11.2929 7.29289C11.6834 6.90237 12.3166 6.90237 12.7071 7.29289Z\"\n fill=\"currentColor\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M3.29289 7.29289C3.68342 6.90237 4.31658 6.90237 4.70711 7.29289L12.7071 15.2929C13.0976 15.6834 13.0976 16.3166 12.7071 16.7071C12.3166 17.0976 11.6834 17.0976 11.2929 16.7071L3.29289 8.70711C2.90237 8.31658 2.90237 7.68342 3.29289 7.29289Z\"\n fill=\"currentColor\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M17.405 1.40657C18.0246 1.05456 18.7463 0.92634 19.4492 1.04344C20.1521 1.16054 20.7933 1.51583 21.2652 2.0497L21.2697 2.05469L21.2696 2.05471C21.7431 2.5975 22 3.28922 22 4.00203C22 5.08579 21.3952 5.84326 20.7727 6.34289C20.1966 6.80531 19.4941 7.13675 18.9941 7.37261C18.9714 7.38332 18.9491 7.39383 18.9273 7.40415C18.4487 7.63034 18.2814 7.78152 18.1927 7.91844C18.1778 7.94155 18.1625 7.96834 18.1473 8.00003H21C21.5523 8.00003 22 8.44774 22 9.00003C22 9.55231 21.5523 10 21 10H17C16.4477 10 16 9.55231 16 9.00003C16 8.17007 16.1183 7.44255 16.5138 6.83161C16.9107 6.21854 17.4934 5.86971 18.0728 5.59591C18.6281 5.33347 19.1376 5.09075 19.5208 4.78316C19.8838 4.49179 20 4.25026 20 4.00203C20 3.77192 19.9178 3.54865 19.7646 3.37182C19.5968 3.18324 19.3696 3.05774 19.1205 3.01625C18.8705 2.97459 18.6137 3.02017 18.3933 3.14533C18.1762 3.26898 18.0191 3.45826 17.9406 3.67557C17.7531 4.19504 17.18 4.46414 16.6605 4.27662C16.141 4.0891 15.8719 3.51596 16.0594 2.99649C16.303 2.3219 16.7817 1.76125 17.4045 1.40689L17.405 1.40657Z\"\n fill=\"currentColor\"\n />\n </svg>\n )\n})\n\nSuperscriptIcon.displayName = 'SuperscriptIcon'\n","import * as React from 'react'\n\nexport const UnderlineIcon = React.memo(({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n return (\n <svg width=\"24\" height=\"24\" className={className} viewBox=\"0 0 24 24\" fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M7 4C7 3.44772 6.55228 3 6 3C5.44772 3 5 3.44772 5 4V10C5 11.8565 5.7375 13.637 7.05025 14.9497C8.36301 16.2625 10.1435 17 12 17C13.8565 17 15.637 16.2625 16.9497 14.9497C18.2625 13.637 19 11.8565 19 10V4C19 3.44772 18.5523 3 18 3C17.4477 3 17 3.44772 17 4V10C17 11.3261 16.4732 12.5979 15.5355 13.5355C14.5979 14.4732 13.3261 15 12 15C10.6739 15 9.40215 14.4732 8.46447 13.5355C7.52678 12.5979 7 11.3261 7 10V4ZM4 19C3.44772 19 3 19.4477 3 20C3 20.5523 3.44772 21 4 21H20C20.5523 21 21 20.5523 21 20C21 19.4477 20.5523 19 20 19H4Z\"\n fill=\"currentColor\"\n />\n </svg>\n )\n})\n\nUnderlineIcon.displayName = 'UnderlineIcon'\n","import { isNodeSelection, type Editor } from '@tiptap/react'\nimport * as React from 'react'\n\n// --- Hooks ---\nimport { useTiptapEditor } from '../../../hooks/use-tiptap-editor'\n\n// --- Icons ---\nimport { BoldIcon } from '../../tiptap-icons/bold-icon'\nimport { Code2Icon } from '../../tiptap-icons/code2-icon'\nimport { ItalicIcon } from '../../tiptap-icons/italic-icon'\nimport { StrikeIcon } from '../../tiptap-icons/strike-icon'\nimport { SubscriptIcon } from '../../tiptap-icons/subscript-icon'\nimport { SuperscriptIcon } from '../../tiptap-icons/superscript-icon'\nimport { UnderlineIcon } from '../../tiptap-icons/underline-icon'\n\n// --- Lib ---\nimport { isMarkInSchema } from '../../../lib/tiptap-utils'\n\n// --- UI Primitives ---\nimport type { ButtonProps } from '../../tiptap-ui-primitive/button'\nimport { Button } from '../../tiptap-ui-primitive/button'\n\nexport type Mark = 'bold' | 'italic' | 'strike' | 'code' | 'underline' | 'superscript' | 'subscript'\n\nexport interface MarkButtonProps extends Omit<ButtonProps, 'type'> {\n /**\n * The type of mark to toggle\n */\n type: Mark\n /**\n * Optional editor instance. If not provided, will use editor from context\n */\n editor?: Editor | null\n /**\n * Display text for the button (optional)\n */\n text?: string\n /**\n * Whether this button should be hidden when the mark is not available\n */\n hideWhenUnavailable?: boolean\n}\n\nexport const markIcons = {\n bold: BoldIcon,\n italic: ItalicIcon,\n underline: UnderlineIcon,\n strike: StrikeIcon,\n code: Code2Icon,\n superscript: SuperscriptIcon,\n subscript: SubscriptIcon\n}\n\nexport const markShortcutKeys: Partial<Record<Mark, string>> = {\n bold: 'Ctrl-b',\n italic: 'Ctrl-i',\n underline: 'Ctrl-u',\n strike: 'Ctrl-Shift-s',\n code: 'Ctrl-e',\n superscript: 'Ctrl-.',\n subscript: 'Ctrl-,'\n}\nexport const markActionLabels: Partial<Record<Mark, string>> = {\n bold: '粗体',\n italic: '斜体',\n underline: '下划线',\n strike: '删除线',\n code: '代码',\n superscript: '上角标',\n subscript: '下角标'\n}\n\nexport function canToggleMark(editor: Editor | null, type: Mark): boolean {\n if (!editor) return false\n\n try {\n return editor.can().toggleMark(type)\n } catch {\n return false\n }\n}\n\nexport function isMarkActive(editor: Editor | null, type: Mark): boolean {\n if (!editor) return false\n return editor.isActive(type)\n}\n\nexport function toggleMark(editor: Editor | null, type: Mark): void {\n if (!editor) return\n editor.chain().focus().toggleMark(type).run()\n}\n\nexport function isMarkButtonDisabled(editor: Editor | null, type: Mark, userDisabled: boolean = false): boolean {\n if (!editor) return true\n if (userDisabled) return true\n if (editor.isActive('codeBlock')) return true\n if (!canToggleMark(editor, type)) return true\n return false\n}\n\nexport function shouldShowMarkButton(params: { editor: Editor | null; type: Mark; hideWhenUnavailable: boolean; markInSchema: boolean }): boolean {\n const { editor, type, hideWhenUnavailable, markInSchema } = params\n\n if (!markInSchema || !editor) {\n return false\n }\n\n if (hideWhenUnavailable) {\n if (isNodeSelection(editor.state.selection) || !canToggleMark(editor, type)) {\n return false\n }\n }\n\n return true\n}\n\nexport function getFormattedMarkName(type: Mark): string {\n return markActionLabels[type] || type.charAt(0).toUpperCase() + type.slice(1)\n}\n\nexport function useMarkState(editor: Editor | null, type: Mark, disabled: boolean = false) {\n const markInSchema = isMarkInSchema(type, editor)\n const isDisabled = isMarkButtonDisabled(editor, type, disabled)\n const isActive = isMarkActive(editor, type)\n\n const Icon = markIcons[type]\n const shortcutKey = markShortcutKeys[type]\n const formattedName = getFormattedMarkName(type)\n\n return {\n markInSchema,\n isDisabled,\n isActive,\n Icon,\n shortcutKey,\n formattedName\n }\n}\n\nexport const MarkButton = React.forwardRef<HTMLButtonElement, MarkButtonProps>(\n ({ editor: providedEditor, type, text, hideWhenUnavailable = false, className = '', disabled, onClick, children, ...buttonProps }, ref) => {\n const editor = useTiptapEditor(providedEditor)\n\n const { markInSchema, isDisabled, isActive, Icon, shortcutKey, formattedName } = useMarkState(editor, type, disabled)\n\n const handleClick = React.useCallback(\n (e: React.MouseEvent<HTMLButtonElement>) => {\n onClick?.(e)\n\n if (!e.defaultPrevented && !isDisabled && editor) {\n toggleMark(editor, type)\n }\n },\n [onClick, isDisabled, editor, type]\n )\n\n const show = React.useMemo(() => {\n return shouldShowMarkButton({\n editor,\n type,\n hideWhenUnavailable,\n markInSchema\n })\n }, [editor, type, hideWhenUnavailable, markInSchema])\n\n if (!show || !editor || !editor.isEditable) {\n return null\n }\n\n return (\n <Button\n type=\"button\"\n className={className.trim()}\n disabled={isDisabled}\n data-style=\"ghost\"\n data-active-state={isActive ? 'on' : 'off'}\n data-disabled={isDisabled}\n role=\"button\"\n tabIndex={-1}\n aria-label={type}\n aria-pressed={isActive}\n tooltip={formattedName}\n shortcutKeys={shortcutKey}\n onClick={handleClick}\n {...buttonProps}\n ref={ref}\n >\n {children || (\n <>\n <Icon className=\"tiptap-button-icon\" />\n {text && <span className=\"tiptap-button-text\">{text}</span>}\n </>\n )}\n </Button>\n )\n }\n)\n\nMarkButton.displayName = 'MarkButton'\n\nexport default MarkButton\n","import * as React from 'react'\n\nexport const BlockQuoteIcon = React.memo(({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n return (\n <svg width=\"24\" height=\"24\" className={className} viewBox=\"0 0 24 24\" fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M8 6C8 5.44772 8.44772 5 9 5H16C16.5523 5 17 5.44772 17 6C17 6.55228 16.5523 7 16 7H9C8.44772 7 8 6.55228 8 6Z\"\n fill=\"currentColor\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M4 3C4.55228 3 5 3.44772 5 4L5 20C5 20.5523 4.55229 21 4 21C3.44772 21 3 20.5523 3 20L3 4C3 3.44772 3.44772 3 4 3Z\"\n fill=\"currentColor\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M8 12C8 11.4477 8.44772 11 9 11H20C20.5523 11 21 11.4477 21 12C21 12.5523 20.5523 13 20 13H9C8.44772 13 8 12.5523 8 12Z\"\n fill=\"currentColor\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M8 18C8 17.4477 8.44772 17 9 17H16C16.5523 17 17 17.4477 17 18C17 18.5523 16.5523 19 16 19H9C8.44772 19 8 18.5523 8 18Z\"\n fill=\"currentColor\"\n />\n </svg>\n )\n})\n\nBlockQuoteIcon.displayName = 'BlockQuoteIcon'\n","import * as React from 'react'\n\nexport const CodeBlockIcon = React.memo(({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n return (\n <svg width=\"24\" height=\"24\" className={className} viewBox=\"0 0 24 24\" fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M6.70711 2.29289C7.09763 2.68342 7.09763 3.31658 6.70711 3.70711L4.41421 6L6.70711 8.29289C7.09763 8.68342 7.09763 9.31658 6.70711 9.70711C6.31658 10.0976 5.68342 10.0976 5.29289 9.70711L2.29289 6.70711C1.90237 6.31658 1.90237 5.68342 2.29289 5.29289L5.29289 2.29289C5.68342 1.90237 6.31658 1.90237 6.70711 2.29289Z\"\n fill=\"currentColor\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M10.2929 2.29289C10.6834 1.90237 11.3166 1.90237 11.7071 2.29289L14.7071 5.29289C15.0976 5.68342 15.0976 6.31658 14.7071 6.70711L11.7071 9.70711C11.3166 10.0976 10.6834 10.0976 10.2929 9.70711C9.90237 9.31658 9.90237 8.68342 10.2929 8.29289L12.5858 6L10.2929 3.70711C9.90237 3.31658 9.90237 2.68342 10.2929 2.29289Z\"\n fill=\"currentColor\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M17 4C17 3.44772 17.4477 3 18 3H19C20.6569 3 22 4.34315 22 6V18C22 19.6569 20.6569 21 19 21H5C3.34315 21 2 19.6569 2 18V12C2 11.4477 2.44772 11 3 11C3.55228 11 4 11.4477 4 12V18C4 18.5523 4.44772 19 5 19H19C19.5523 19 20 18.5523 20 18V6C20 5.44772 19.5523 5 19 5H18C17.4477 5 17 4.55228 17 4Z\"\n fill=\"currentColor\"\n />\n </svg>\n )\n})\n\nCodeBlockIcon.displayName = 'CodeBlockIcon'\n","import { isNodeSelection, type Editor } from '@tiptap/react'\nimport * as React from 'react'\n\n// --- Hooks ---\nimport { useTiptapEditor } from '../../../hooks/use-tiptap-editor'\n\n// --- Icons ---\nimport { BlockQuoteIcon } from '../../tiptap-icons/block-quote-icon'\nimport { CodeBlockIcon } from '../../tiptap-icons/code-block-icon'\n\n// --- Lib ---\nimport { isNodeInSchema } from '../../../lib/tiptap-utils'\n\n// --- UI Primitives ---\nimport type { ButtonProps } from '../../tiptap-ui-primitive/button'\nimport { Button } from '../../tiptap-ui-primitive/button'\n\nexport type NodeType = 'codeBlock' | 'blockquote'\n\nexport interface NodeButtonProps extends Omit<ButtonProps, 'type'> {\n /**\n * The TipTap editor instance.\n */\n editor?: Editor | null\n /**\n * The type of node to toggle.\n */\n type: NodeType\n /**\n * Optional text to display alongside the icon.\n */\n text?: string\n /**\n * Whether the button should hide when the node is not available.\n * @default false\n */\n hideWhenUnavailable?: boolean\n}\n\nexport const nodeIcons = {\n codeBlock: CodeBlockIcon,\n blockquote: BlockQuoteIcon\n}\n\nexport const nodeShortcutKeys: Partial<Record<NodeType, string>> = {\n codeBlock: 'Ctrl-Alt-c',\n blockquote: 'Ctrl-Shift-b'\n}\n\nexport const nodeLabels: Record<NodeType, string> = {\n codeBlock: '代码块',\n blockquote: '引用块'\n}\n\nexport function canToggleNode(editor: Editor | null, type: NodeType): boolean {\n if (!editor) return false\n\n try {\n return type === 'codeBlock' ? editor.can().toggleNode('codeBlock', 'paragraph') : editor.can().toggleWrap('blockquote')\n } catch {\n return false\n }\n}\n\nexport function isNodeActive(editor: Editor | null, type: NodeType): boolean {\n if (!editor) return false\n return editor.isActive(type)\n}\n\nexport function toggleNode(editor: Editor | null, type: NodeType): boolean {\n if (!editor) return false\n\n if (type === 'codeBlock') {\n return editor.chain().focus().toggleNode('codeBlock', 'paragraph').run()\n } else {\n return editor.chain().focus().toggleWrap('blockquote').run()\n }\n}\n\nexport function isNodeButtonDisabled(editor: Editor | null, canToggle: boolean, userDisabled: boolean = false): boolean {\n if (!editor) return true\n if (userDisabled) return true\n if (!canToggle) return true\n return false\n}\n\nexport function shouldShowNodeButton(params: {\n editor: Editor | null\n type: NodeType\n hideWhenUnavailable: boolean\n nodeInSchema: boolean\n canToggle: boolean\n}): boolean {\n const { editor, hideWhenUnavailable, nodeInSchema, canToggle } = params\n\n if (!nodeInSchema || !editor) {\n return false\n }\n\n if (hideWhenUnavailable) {\n if (isNodeSelection(editor.state.selection) || !canToggle) {\n return false\n }\n }\n\n return Boolean(editor?.isEditable)\n}\n\nexport function formatNodeName(type: NodeType): string {\n return type.charAt(0).toUpperCase() + type.slice(1)\n}\n\nexport function useNodeState(editor: Editor | null, type: NodeType, disabled: boolean = false, hideWhenUnavailable: boolean = false) {\n const nodeInSchema = isNodeInSchema(type, editor)\n\n const canToggle = canToggleNode(editor, type)\n const isDisabled = isNodeButtonDisabled(editor, canToggle, disabled)\n const isActive = isNodeActive(editor, type)\n\n const shouldShow = React.useMemo(\n () =>\n shouldShowNodeButton({\n editor,\n type,\n hideWhenUnavailable,\n nodeInSchema,\n canToggle\n }),\n [editor, type, hideWhenUnavailable, nodeInSchema, canToggle]\n )\n\n const handleToggle = React.useCallback(() => {\n if (!isDisabled && editor) {\n return toggleNode(editor, type)\n }\n return false\n }, [editor, type, isDisabled])\n\n const Icon = nodeIcons[type]\n const shortcutKey = nodeShortcutKeys[type]\n const label = nodeLabels[type]\n\n return {\n nodeInSchema,\n canToggle,\n isDisabled,\n isActive,\n shouldShow,\n handleToggle,\n Icon,\n shortcutKey,\n label\n }\n}\n\nexport const NodeButton = React.forwardRef<HTMLButtonElement, NodeButtonProps>(\n ({ editor: providedEditor, type, text, hideWhenUnavailable = false, className = '', disabled, onClick, children, ...buttonProps }, ref) => {\n const editor = useTiptapEditor(providedEditor)\n\n const { isDisabled, isActive, shouldShow, handleToggle, Icon, shortcutKey, label } = useNodeState(editor, type, disabled, hideWhenUnavailable)\n\n const handleClick = React.useCallback(\n (e: React.MouseEvent<HTMLButtonElement>) => {\n onClick?.(e)\n\n if (!e.defaultPrevented && !isDisabled) {\n handleToggle()\n }\n },\n [onClick, isDisabled, handleToggle]\n )\n\n if (!shouldShow || !editor || !editor.isEditable) {\n return null\n }\n\n return (\n <Button\n type=\"button\"\n className={className.trim()}\n disabled={isDisabled}\n data-style=\"ghost\"\n data-active-state={isActive ? 'on' : 'off'}\n data-disabled={isDisabled}\n role=\"button\"\n tabIndex={-1}\n aria-label={type}\n aria-pressed={isActive}\n tooltip={label}\n shortcutKeys={shortcutKey}\n onClick={handleClick}\n {...buttonProps}\n ref={ref}\n >\n {children || (\n <>\n <Icon className=\"tiptap-button-icon\" />\n {text && <span className=\"tiptap-button-text\">{text}</span>}\n </>\n )}\n </Button>\n )\n }\n)\n\nNodeButton.displayName = 'NodeButton'\n\nexport default NodeButton\n","import * as React from 'react'\n\nexport const QuoteIcon = React.memo(({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n return (\n <svg width=\"24\" height=\"24\" className={className} viewBox=\"0 0 1024 1024\" fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path d=\"M130.16 789.92V500.25q-1.85-62.51 18-117.41T204 286.23a308 308 0 0 1 86.13-69.1A304.32 304.32 0 0 1 386.26 184 11 11 0 0 1 399 194.86v104.52a11 11 0 0 1-7.21 10.29q-66.13 24.5-91.25 70.31-24.41 44.36-26.32 107a11 11 0 0 0 11 11.3h102.84a11 11 0 0 1 11 11V779a11 11 0 0 1-11 11h-257.9z m403.3 0V500.25q-2-62.51 17.95-117.41t55.85-96.61q35.94-41.6 86.13-69.1A304.7 304.7 0 0 1 789.56 184a11 11 0 0 1 12.76 10.82v104.56a11 11 0 0 1-7.21 10.29Q729 334.18 703.86 380q-24.41 44.36-26.32 107a11 11 0 0 0 11 11.3h102.82a11 11 0 0 1 11 11V779a11 11 0 0 1-11 11H533.45z m0 0\"\n fill=\"currentColor\">\n </path>\n </svg>\n )\n})\n\nQuoteIcon.displayName = 'QuoteIcon'\n","import { type Editor } from '@tiptap/react'\nimport * as React from 'react'\n\n// --- Hooks ---\nimport { useTiptapEditor } from '../../../hooks/use-tiptap-editor'\n\n// --- Icons ---\nimport { QuoteIcon } from '../../tiptap-icons/quote-icon'\n\n// --- UI Primitives ---\nimport type { ButtonProps } from '../../tiptap-ui-primitive/button'\nimport { Button } from '../../tiptap-ui-primitive/button'\n\nexport interface QuoteButtonProps extends ButtonProps {\n /**\n * The TipTap editor instance.\n */\n editor?: Editor | null\n\n /**\n * Callback when text is quoted (fires when user clicks while text is selected)\n */\n onQuote?: (text: string) => void\n\n /**\n * Optional label text shown next to the icon.\n */\n text?: string\n\n /**\n * Whether to hide the button if no text is selected.\n * @default false\n */\n hideWhenUnavailable?: boolean\n}\n\n/**\n * 检查是否选中了文本\n */\nexport function hasSelection(editor: Editor | null): boolean {\n if (!editor) return false\n const selection = editor.state.selection\n return !!selection && !selection.empty\n}\n\n/**\n * 获取当前选中文本\n */\nexport function getSelectedText(editor: Editor | null): string {\n if (!editor) return ''\n const { from, to } = editor.state.selection\n return editor.state.doc.textBetween(from, to, ' ')\n}\n\n/**\n * QuoteButton Hook\n */\nexport function useQuote(editor: Editor | null, disabled: boolean = false, hideWhenUnavailable: boolean = false) {\n const selectionAvailable = React.useMemo(() => hasSelection(editor), [editor?.state.selection])\n\n const isDisabled = React.useMemo(() => !selectionAvailable || disabled, [selectionAvailable, disabled])\n const shouldShow = React.useMemo(() => {\n if (!editor?.isEditable) return false\n if (hideWhenUnavailable && !selectionAvailable) return false\n return true\n }, [editor, hideWhenUnavailable, selectionAvailable])\n\n const getText = React.useCallback(() => getSelectedText(editor), [editor])\n\n return {\n isDisabled,\n shouldShow,\n getText\n }\n}\n\nexport const QuoteButton = React.forwardRef<HTMLButtonElement, QuoteButtonProps>(\n (\n { editor: providedEditor, onQuote, text, className = '', disabled = false, hideWhenUnavailable = false, onClick, children, ...buttonProps },\n ref\n ) => {\n const editor = useTiptapEditor(providedEditor)\n\n const { isDisabled, shouldShow, getText } = useQuote(editor, disabled, hideWhenUnavailable)\n\n const handleClick = React.useCallback(\n (e: React.MouseEvent<HTMLButtonElement>) => {\n onClick?.(e)\n if (e.defaultPrevented || isDisabled || !editor) return\n\n const selectedText = getText()\n if (selectedText) {\n onQuote?.(selectedText)\n } else {\n console.warn('No text selected for quote.')\n }\n },\n [onClick, editor, isDisabled, getText, onQuote]\n )\n\n if (!shouldShow || !editor || !editor.isEditable) return null\n\n return (\n <Button\n type=\"button\"\n className={className.trim()}\n disabled={isDisabled}\n data-style=\"ghost\"\n data-disabled={isDisabled}\n tooltip=\"引用选中文本\"\n // shortcutKeys=\"Ctrl-Shift-Q\"\n onClick={handleClick}\n {...buttonProps}\n ref={ref}\n >\n {children || (\n <>\n <QuoteIcon className=\"tiptap-button-icon\" />\n {text && <span className=\"tiptap-button-text\">{text}</span>}\n </>\n )}\n </Button>\n )\n }\n)\n\nQuoteButton.displayName = 'QuoteButton'\n\nexport default QuoteButton\n","import * as React from 'react'\n\nexport const AlignCenterIcon = React.memo(({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n return (\n <svg width=\"24\" height=\"24\" className={className} viewBox=\"0 0 24 24\" fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M2 6C2 5.44772 2.44772 5 3 5H21C21.5523 5 22 5.44772 22 6C22 6.55228 21.5523 7 21 7H3C2.44772 7 2 6.55228 2 6Z\"\n fill=\"currentColor\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M6 12C6 11.4477 6.44772 11 7 11H17C17.5523 11 18 11.4477 18 12C18 12.5523 17.5523 13 17 13H7C6.44772 13 6 12.5523 6 12Z\"\n fill=\"currentColor\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M4 18C4 17.4477 4.44772 17 5 17H19C19.5523 17 20 17.4477 20 18C20 18.5523 19.5523 19 19 19H5C4.44772 19 4 18.5523 4 18Z\"\n fill=\"currentColor\"\n />\n </svg>\n )\n})\n\nAlignCenterIcon.displayName = 'AlignCenterIcon'\n","import * as React from 'react'\n\nexport const AlignJustifyIcon = React.memo(({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n return (\n <svg width=\"24\" height=\"24\" className={className} viewBox=\"0 0 24 24\" fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M2 6C2 5.44772 2.44772 5 3 5H21C21.5523 5 22 5.44772 22 6C22 6.55228 21.5523 7 21 7H3C2.44772 7 2 6.55228 2 6Z\"\n fill=\"currentColor\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M2 12C2 11.4477 2.44772 11 3 11H21C21.5523 11 22 11.4477 22 12C22 12.5523 21.5523 13 21 13H3C2.44772 13 2 12.5523 2 12Z\"\n fill=\"currentColor\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M2 18C2 17.4477 2.44772 17 3 17H21C21.5523 17 22 17.4477 22 18C22 18.5523 21.5523 19 21 19H3C2.44772 19 2 18.5523 2 18Z\"\n fill=\"currentColor\"\n />\n </svg>\n )\n})\n\nAlignJustifyIcon.displayName = 'AlignJustifyIcon'\n","import * as React from 'react'\n\nexport const AlignLeftIcon = React.memo(({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n return (\n <svg width=\"24\" height=\"24\" className={className} viewBox=\"0 0 24 24\" fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M2 6C2 5.44772 2.44772 5 3 5H21C21.5523 5 22 5.44772 22 6C22 6.55228 21.5523 7 21 7H3C2.44772 7 2 6.55228 2 6Z\"\n fill=\"currentColor\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M2 12C2 11.4477 2.44772 11 3 11H15C15.5523 11 16 11.4477 16 12C16 12.5523 15.5523 13 15 13H3C2.44772 13 2 12.5523 2 12Z\"\n fill=\"currentColor\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M2 18C2 17.4477 2.44772 17 3 17H17C17.5523 17 18 17.4477 18 18C18 18.5523 17.5523 19 17 19H3C2.44772 19 2 18.5523 2 18Z\"\n fill=\"currentColor\"\n />\n </svg>\n )\n})\n\nAlignLeftIcon.displayName = 'AlignLeftIcon'\n","import * as React from 'react'\n\nexport const AlignRightIcon = React.memo(({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n return (\n <svg width=\"24\" height=\"24\" className={className} viewBox=\"0 0 24 24\" fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M2 6C2 5.44772 2.44772 5 3 5H21C21.5523 5 22 5.44772 22 6C22 6.55228 21.5523 7 21 7H3C2.44772 7 2 6.55228 2 6Z\"\n fill=\"currentColor\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M8 12C8 11.4477 8.44772 11 9 11H21C21.5523 11 22 11.4477 22 12C22 12.5523 21.5523 13 21 13H9C8.44772 13 8 12.5523 8 12Z\"\n fill=\"currentColor\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M6 18C6 17.4477 6.44772 17 7 17H21C21.5523 17 22 17.4477 22 18C22 18.5523 21.5523 19 21 19H7C6.44772 19 6 18.5523 6 18Z\"\n fill=\"currentColor\"\n />\n </svg>\n )\n})\n\nAlignRightIcon.displayName = 'AlignRightIcon'\n","import { type ChainedCommands, type Editor } from '@tiptap/react'\nimport * as React from 'react'\n\n// --- Hooks ---\nimport { useTiptapEditor } from '../../../hooks/use-tiptap-editor'\n\n// --- Icons ---\nimport { AlignCenterIcon } from '../../tiptap-icons/align-center-icon'\nimport { AlignJustifyIcon } from '../../tiptap-icons/align-justify-icon'\nimport { AlignLeftIcon } from '../../tiptap-icons/align-left-icon'\nimport { AlignRightIcon } from '../../tiptap-icons/align-right-icon'\n\n// --- UI Primitives ---\nimport type { ButtonProps } from '../../tiptap-ui-primitive/button'\nimport { Button } from '../../tiptap-ui-primitive/button'\n\nexport type TextAlign = 'left' | 'center' | 'right' | 'justify'\n\nexport interface TextAlignButtonProps extends ButtonProps {\n /**\n * The TipTap editor instance.\n */\n editor?: Editor | null\n /**\n * The text alignment to apply.\n */\n align: TextAlign\n /**\n * Optional text to display alongside the icon.\n */\n text?: string\n /**\n * Whether the button should hide when the alignment is not available.\n * @default false\n */\n hideWhenUnavailable?: boolean\n}\n\nexport const textAlignIcons = {\n left: AlignLeftIcon,\n center: AlignCenterIcon,\n right: AlignRightIcon,\n justify: AlignJustifyIcon\n}\n\nexport const textAlignShortcutKeys: Partial<Record<TextAlign, string>> = {\n left: 'Ctrl-Shift-l',\n center: 'Ctrl-Shift-e',\n right: 'Ctrl-Shift-r',\n justify: 'Ctrl-Shift-j'\n}\n\nexport const textAlignLabels: Record<TextAlign, string> = {\n left: '左对齐',\n center: '居中对齐',\n right: '右对齐',\n justify: '两端对齐'\n}\n\nexport function hasSetTextAlign(commands: ChainedCommands): commands is ChainedCommands & {\n setTextAlign: (align: TextAlign) => ChainedCommands\n} {\n return 'setTextAlign' in commands\n}\n\nexport function checkTextAlignExtension(editor: Editor | null): boolean {\n if (!editor) return false\n\n const hasExtension = editor.extensionManager.extensions.some((extension) => extension.name === 'textAlign')\n\n if (!hasExtension) {\n console.warn('TextAlign extension is not available. ' + 'Make sure it is included in your editor configuration.')\n }\n\n return hasExtension\n}\n\nexport function canSetTextAlign(editor: Editor | null, align: TextAlign, alignAvailable: boolean): boolean {\n if (!editor || !alignAvailable) return false\n\n try {\n return editor.can().setTextAlign(align)\n } catch {\n return false\n }\n}\n\nexport function isTextAlignActive(editor: Editor | null, align: TextAlign): boolean {\n if (!editor) return false\n return editor.isActive({ textAlign: align })\n}\n\nexport function setTextAlign(editor: Editor | null, align: TextAlign): boolean {\n if (!editor) return false\n\n const chain = editor.chain().focus()\n if (hasSetTextAlign(chain)) {\n return chain.setTextAlign(align).run()\n }\n return false\n}\n\nexport function isTextAlignButtonDisabled(editor: Editor | null, alignAvailable: boolean, canAlign: boolean, userDisabled: boolean = false): boolean {\n if (!editor || !alignAvailable) return true\n if (userDisabled) return true\n if (!canAlign) return true\n return false\n}\n\nexport function shouldShowTextAlignButton(editor: Editor | null, canAlign: boolean, hideWhenUnavailable: boolean): boolean {\n if (!editor?.isEditable) return false\n if (hideWhenUnavailable && !canAlign) return false\n return true\n}\n\nexport function useTextAlign(editor: Editor | null, align: TextAlign, disabled: boolean = false, hideWhenUnavailable: boolean = false) {\n const alignAvailable = React.useMemo(() => checkTextAlignExtension(editor), [editor])\n\n const canAlign = React.useMemo(() => canSetTextAlign(editor, align, alignAvailable), [editor, align, alignAvailable])\n\n const isDisabled = isTextAlignButtonDisabled(editor, alignAvailable, canAlign, disabled)\n const isActive = isTextAlignActive(editor, align)\n\n const handleAlignment = React.useCallback(() => {\n if (!alignAvailable || !editor || isDisabled) return false\n return setTextAlign(editor, align)\n }, [alignAvailable, editor, isDisabled, align])\n\n const shouldShow = React.useMemo(() => shouldShowTextAlignButton(editor, canAlign, hideWhenUnavailable), [editor, canAlign, hideWhenUnavailable])\n\n const Icon = textAlignIcons[align]\n const shortcutKey = textAlignShortcutKeys[align]\n const label = textAlignLabels[align]\n\n return {\n alignAvailable,\n canAlign,\n isDisabled,\n isActive,\n handleAlignment,\n shouldShow,\n Icon,\n shortcutKey,\n label\n }\n}\n\nexport const TextAlignButton = React.forwardRef<HTMLButtonElement, TextAlignButtonProps>(\n ({ editor: providedEditor, align, text, hideWhenUnavailable = false, className = '', disabled, onClick, children, ...buttonProps }, ref) => {\n const editor = useTiptapEditor(providedEditor)\n\n const { isDisabled, isActive, handleAlignment, shouldShow, Icon, shortcutKey, label } = useTextAlign(editor, align, disabled, hideWhenUnavailable)\n\n const handleClick = React.useCallback(\n (e: React.MouseEvent<HTMLButtonElement>) => {\n onClick?.(e)\n\n if (!e.defaultPrevented && !disabled) {\n handleAlignment()\n }\n },\n [onClick, disabled, handleAlignment]\n )\n\n if (!shouldShow || !editor || !editor.isEditable) {\n return null\n }\n\n return (\n <Button\n type=\"button\"\n className={className.trim()}\n disabled={isDisabled}\n data-style=\"ghost\"\n data-active-state={isActive ? 'on' : 'off'}\n data-disabled={isDisabled}\n role=\"button\"\n tabIndex={-1}\n aria-label={label}\n aria-pressed={isActive}\n tooltip={label}\n shortcutKeys={shortcutKey}\n onClick={handleClick}\n {...buttonProps}\n ref={ref}\n >\n {children || (\n <>\n <Icon className=\"tiptap-button-icon\" />\n {text && <span className=\"tiptap-button-text\">{text}</span>}\n </>\n )}\n </Button>\n )\n }\n)\n\nTextAlignButton.displayName = 'TextAlignButton'\n\nexport default TextAlignButton\n","import * as React from 'react'\n\nexport const Redo2Icon = React.memo(({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n return (\n <svg width=\"24\" height=\"24\" className={className} viewBox=\"0 0 24 24\" fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M15.7071 2.29289C15.3166 1.90237 14.6834 1.90237 14.2929 2.29289C13.9024 2.68342 13.9024 3.31658 14.2929 3.70711L17.5858 7H9.5C7.77609 7 6.12279 7.68482 4.90381 8.90381C3.68482 10.1228 3 11.7761 3 13.5C3 14.3536 3.16813 15.1988 3.49478 15.9874C3.82144 16.7761 4.30023 17.4926 4.90381 18.0962C6.12279 19.3152 7.77609 20 9.5 20H13C13.5523 20 14 19.5523 14 19C14 18.4477 13.5523 18 13 18H9.5C8.30653 18 7.16193 17.5259 6.31802 16.682C5.90016 16.2641 5.56869 15.768 5.34254 15.2221C5.1164 14.6761 5 14.0909 5 13.5C5 12.3065 5.47411 11.1619 6.31802 10.318C7.16193 9.47411 8.30653 9 9.5 9H17.5858L14.2929 12.2929C13.9024 12.6834 13.9024 13.3166 14.2929 13.7071C14.6834 14.0976 15.3166 14.0976 15.7071 13.7071L20.7071 8.70711C21.0976 8.31658 21.0976 7.68342 20.7071 7.29289L15.7071 2.29289Z\"\n fill=\"currentColor\"\n />\n </svg>\n )\n})\n\nRedo2Icon.displayName = 'Redo2Icon'\n","import * as React from 'react'\n\nexport const Undo2Icon = React.memo(({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n return (\n <svg width=\"24\" height=\"24\" className={className} viewBox=\"0 0 24 24\" fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M9.70711 3.70711C10.0976 3.31658 10.0976 2.68342 9.70711 2.29289C9.31658 1.90237 8.68342 1.90237 8.29289 2.29289L3.29289 7.29289C2.90237 7.68342 2.90237 8.31658 3.29289 8.70711L8.29289 13.7071C8.68342 14.0976 9.31658 14.0976 9.70711 13.7071C10.0976 13.3166 10.0976 12.6834 9.70711 12.2929L6.41421 9H14.5C15.0909 9 15.6761 9.1164 16.2221 9.34254C16.768 9.56869 17.2641 9.90016 17.682 10.318C18.0998 10.7359 18.4313 11.232 18.6575 11.7779C18.8836 12.3239 19 12.9091 19 13.5C19 14.0909 18.8836 14.6761 18.6575 15.2221C18.4313 15.768 18.0998 16.2641 17.682 16.682C17.2641 17.0998 16.768 17.4313 16.2221 17.6575C15.6761 17.8836 15.0909 18 14.5 18H11C10.4477 18 10 18.4477 10 19C10 19.5523 10.4477 20 11 20H14.5C15.3536 20 16.1988 19.8319 16.9874 19.5052C17.7761 19.1786 18.4926 18.6998 19.0962 18.0962C19.6998 17.4926 20.1786 16.7761 20.5052 15.9874C20.8319 15.1988 21 14.3536 21 13.5C21 12.6464 20.8319 11.8012 20.5052 11.0126C20.1786 10.2239 19.6998 9.50739 19.0962 8.90381C18.4926 8.30022 17.7761 7.82144 16.9874 7.49478C16.1988 7.16813 15.3536 7 14.5 7H6.41421L9.70711 3.70711Z\"\n fill=\"currentColor\"\n />\n </svg>\n )\n})\n\nUndo2Icon.displayName = 'Undo2Icon'\n","import { type Editor } from '@tiptap/react'\nimport * as React from 'react'\n\n// --- Hooks ---\nimport { useTiptapEditor } from '../../../hooks/use-tiptap-editor'\n\n// --- Icons ---\nimport { Redo2Icon } from '../../tiptap-icons/redo2-icon'\nimport { Undo2Icon } from '../../tiptap-icons/undo2-icon'\n\n// --- UI Primitives ---\nimport type { ButtonProps } from '../../tiptap-ui-primitive/button'\nimport { Button } from '../../tiptap-ui-primitive/button'\n\nexport type HistoryAction = 'undo' | 'redo'\n\n/**\n * Props for the UndoRedoButton component.\n */\nexport interface UndoRedoButtonProps extends ButtonProps {\n /**\n * The TipTap editor instance.\n */\n editor?: Editor | null\n /**\n * Optional text to display alongside the icon.\n */\n text?: string\n /**\n * The history action to perform (undo or redo).\n */\n action: HistoryAction\n}\n\nexport const historyIcons = {\n undo: Undo2Icon,\n redo: Redo2Icon\n}\n\nexport const historyShortcutKeys: Partial<Record<HistoryAction, string>> = {\n undo: 'Ctrl-z',\n redo: 'Ctrl-Shift-z'\n}\n\nexport const historyActionLabels: Record<HistoryAction, string> = {\n undo: '撤销',\n redo: '重做'\n}\n\n/**\n * Checks if a history action can be executed.\n *\n * @param editor The TipTap editor instance\n * @param action The history action to check\n * @returns Whether the action can be executed\n */\nexport function canExecuteHistoryAction(editor: Editor | null, action: HistoryAction): boolean {\n if (!editor) return false\n return action === 'undo' ? editor.can().undo() : editor.can().redo()\n}\n\n/**\n * Executes a history action on the editor.\n *\n * @param editor The TipTap editor instance\n * @param action The history action to execute\n * @returns Whether the action was executed successfully\n */\nexport function executeHistoryAction(editor: Editor | null, action: HistoryAction): boolean {\n if (!editor) return false\n const chain = editor.chain().focus()\n return action === 'undo' ? chain.undo().run() : chain.redo().run()\n}\n\n/**\n * Determines if a history action should be disabled.\n *\n * @param editor The TipTap editor instance\n * @param action The history action to check\n * @param userDisabled Whether the action is explicitly disabled by the user\n * @returns Whether the action should be disabled\n */\nexport function isHistoryActionDisabled(editor: Editor | null, action: HistoryAction, userDisabled: boolean = false): boolean {\n if (userDisabled) return true\n return !canExecuteHistoryAction(editor, action)\n}\n\n/**\n * Hook that provides all the necessary state and handlers for a history action.\n *\n * @param editor The TipTap editor instance\n * @param action The history action to handle\n * @param disabled Whether the action is explicitly disabled\n * @returns Object containing state and handlers for the history action\n */\nexport function useHistoryAction(editor: Editor | null, action: HistoryAction, disabled: boolean = false) {\n const canExecute = React.useMemo(() => canExecuteHistoryAction(editor, action), [editor, action])\n\n const isDisabled = isHistoryActionDisabled(editor, action, disabled)\n\n const handleAction = React.useCallback(() => {\n if (!editor || isDisabled) return\n executeHistoryAction(editor, action)\n }, [editor, action, isDisabled])\n\n const Icon = historyIcons[action]\n const actionLabel = historyActionLabels[action]\n const shortcutKey = historyShortcutKeys[action]\n\n return {\n canExecute,\n isDisabled,\n handleAction,\n Icon,\n actionLabel,\n shortcutKey\n }\n}\n\n/**\n * Button component for triggering undo/redo actions in a TipTap editor.\n */\nexport const UndoRedoButton = React.forwardRef<HTMLButtonElement, UndoRedoButtonProps>(\n ({ editor: providedEditor, action, text, className = '', disabled, onClick, children, ...buttonProps }, ref) => {\n const editor = useTiptapEditor(providedEditor)\n\n const { isDisabled, handleAction, Icon, actionLabel, shortcutKey } = useHistoryAction(editor, action, disabled)\n\n const handleClick = React.useCallback(\n (e: React.MouseEvent<HTMLButtonElement>) => {\n onClick?.(e)\n\n if (!e.defaultPrevented && !disabled) {\n handleAction()\n }\n },\n [onClick, disabled, handleAction]\n )\n\n if (!editor || !editor.isEditable) {\n return null\n }\n\n return (\n <Button\n ref={ref}\n type=\"button\"\n className={className.trim()}\n disabled={isDisabled}\n data-style=\"ghost\"\n data-disabled={isDisabled}\n role=\"button\"\n tabIndex={-1}\n aria-label={actionLabel}\n tooltip={actionLabel}\n shortcutKeys={shortcutKey}\n onClick={handleClick}\n {...buttonProps}\n >\n {children || (\n <>\n <Icon className=\"tiptap-button-icon\" />\n {text && <span className=\"tiptap-button-text\">{text}</span>}\n </>\n )}\n </Button>\n )\n }\n)\n\nUndoRedoButton.displayName = 'UndoRedoButton'\n\nexport default UndoRedoButton\n","import * as React from 'react'\n\nexport const ArrowLeftIcon = React.memo(({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n return (\n <svg width=\"24\" height=\"24\" className={className} viewBox=\"0 0 24 24\" fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n d=\"M12.7071 5.70711C13.0976 5.31658 13.0976 4.68342 12.7071 4.29289C12.3166 3.90237 11.6834 3.90237 11.2929 4.29289L4.29289 11.2929C3.90237 11.6834 3.90237 12.3166 4.29289 12.7071L11.2929 19.7071C11.6834 20.0976 12.3166 20.0976 12.7071 19.7071C13.0976 19.3166 13.0976 18.6834 12.7071 18.2929L7.41421 13L19 13C19.5523 13 20 12.5523 20 12C20 11.4477 19.5523 11 19 11L7.41421 11L12.7071 5.70711Z\"\n fill=\"currentColor\"\n />\n </svg>\n )\n})\n\nArrowLeftIcon.displayName = 'ArrowLeftIcon'\n","import * as React from 'react'\n\ninterface WindowSizeState {\n width: number\n height: number\n offsetTop: number\n}\n\n/**\n * Custom hook to track window size and viewport information\n * @returns Current window dimensions and offsetTop\n */\nexport function useWindowSize(): WindowSizeState {\n const [windowSize, setWindowSize] = React.useState<WindowSizeState>({\n width: 0,\n height: 0,\n offsetTop: 0\n })\n\n function handleResize() {\n if (typeof window === 'undefined') return\n\n const vp = window.visualViewport\n if (!vp) return\n\n const { width = 0, height = 0, offsetTop = 0 } = vp\n\n // Only update state if values have changed\n setWindowSize((state) => {\n if (width === state.width && height === state.height && offsetTop === state.offsetTop) {\n return state\n }\n\n return { width, height, offsetTop }\n })\n }\n React.useEffect(() => {\n handleResize()\n\n const visualViewport = window.visualViewport\n if (visualViewport) {\n visualViewport.addEventListener('resize', handleResize)\n visualViewport.addEventListener('scroll', handleResize)\n }\n\n return () => {\n if (visualViewport) {\n visualViewport.removeEventListener('resize', handleResize)\n visualViewport.removeEventListener('scroll', handleResize)\n }\n }\n }, [])\n\n return windowSize\n}\n","import type { Editor } from '@tiptap/react'\nimport * as React from 'react'\nimport { useWindowSize } from './use-window-size'\n\n/**\n * Interface defining required parameters for the cursor visibility hook\n */\nexport interface CursorVisibilityOptions {\n /**\n * The TipTap editor instance\n */\n editor: Editor | null\n /**\n * Reference to the toolbar element that may obscure the cursor\n */\n overlayHeight?: number\n /**\n * Reference to the element to track for cursor visibility\n */\n elementRef?: React.RefObject<HTMLElement> | null\n}\n\n/**\n * Simplified DOMRect type containing only the essential positioning properties\n */\nexport type RectState = Pick<DOMRect, 'x' | 'y' | 'width' | 'height'>\n\n/**\n * Custom hook that ensures the cursor remains visible when typing in a TipTap editor.\n * Automatically scrolls the window when the cursor would be hidden by the toolbar.\n *\n * This is particularly useful for long-form content editing where the cursor\n * might move out of the visible area as the user types.\n *\n * @param options Configuration options for cursor visibility behavior\n * @returns void\n */\nexport function useCursorVisibility({ editor, overlayHeight = 0, elementRef = null }: CursorVisibilityOptions) {\n const { height: windowHeight } = useWindowSize()\n const [rect, setRect] = React.useState<RectState>({\n x: 0,\n y: 0,\n width: 0,\n height: 0\n })\n\n const updateRect = React.useCallback(() => {\n const element = elementRef?.current ?? document.body\n\n const { x, y, width, height } = element.getBoundingClientRect()\n setRect({ x, y, width, height })\n }, [elementRef])\n\n React.useEffect(() => {\n const element = elementRef?.current ?? document.body\n\n updateRect()\n\n const resizeObserver = new ResizeObserver(() => {\n window.requestAnimationFrame(updateRect)\n })\n\n resizeObserver.observe(element)\n window.addEventListener('scroll', updateRect, { passive: true })\n\n return () => {\n resizeObserver.disconnect()\n window.removeEventListener('scroll', updateRect)\n }\n }, [elementRef, updateRect])\n\n React.useEffect(() => {\n const ensureCursorVisibility = () => {\n if (!editor) return\n\n const { state, view } = editor\n\n if (!view.hasFocus()) return\n\n // Get current cursor position coordinates\n const { from } = state.selection\n const cursorCoords = view.coordsAtPos(from)\n\n if (windowHeight < rect.height) {\n if (cursorCoords) {\n // Check if there's enough space between cursor and bottom of window\n const availableSpace = windowHeight - cursorCoords.top - overlayHeight > 0\n\n // If not enough space, scroll to position cursor in the middle of viewport\n if (!availableSpace) {\n const targetScrollY =\n // TODO: Needed?\n // window.scrollY + (cursorCoords.top - windowHeight / 2)\n cursorCoords.top - windowHeight / 2\n\n window.scrollTo({\n top: targetScrollY,\n behavior: 'smooth'\n })\n }\n }\n }\n }\n\n ensureCursorVisibility()\n }, [editor, overlayHeight, windowHeight, rect.height])\n\n return rect\n}\n","import * as React from 'react'\n\nconst MOBILE_BREAKPOINT = 768\n\nexport function useMobile() {\n const [isMobile, setIsMobile] = React.useState<boolean | undefined>(undefined)\n\n React.useEffect(() => {\n const mql = window.matchMedia(`(max-width: ${MOBILE_BREAKPOINT - 1}px)`)\n const onChange = () => {\n setIsMobile(window.innerWidth < MOBILE_BREAKPOINT)\n }\n mql.addEventListener('change', onChange)\n setIsMobile(window.innerWidth < MOBILE_BREAKPOINT)\n return () => mql.removeEventListener('change', onChange)\n }, [])\n\n return !!isMobile\n}\n","import { mergeAttributes, Node } from '@tiptap/core'\n\nexport default Node.create({\n name: 'PageNoNode', // 节点名称\n\n group: 'block', // 可以作为块级元素\n // content: 'block+', // 能嵌套多个块级内容(如 heading, paragraph 等)\n\n // defining: true, // 使其在文档结构中稳定,避免被合并\n\n // 自定义渲染HTML\n renderHTML({ node, HTMLAttributes }) {\n // 获取动态的 pageIndex 属性\n const pageIndex = node.attrs.pageIndex || '1' // 如果没有传值,则默认值为 1\n\n return [\n 'div',\n mergeAttributes(HTMLAttributes, {\n class: 'page-no', // 添加类名\n 'page-no': pageIndex // 设置动态的 page-no 属性\n })\n // 0\n ]\n },\n\n // 自定义节点的可视化表现\n addAttributes() {\n return {\n pageIndex: {\n default: null, // 默认没有值,允许动态传递\n renderHTML: (attributes) => {\n return {\n 'page-no': attributes.pageIndex\n }\n }\n }\n }\n },\n\n // 用于从节点中提取文本内容\n parseHTML() {\n return [\n {\n tag: 'div.page-no', // 匹配 `.page-no` 类的 div\n getAttrs: (node) => {\n const pageIndex = node.getAttribute('page-no')\n return { pageIndex } // 获取 page-no 属性并传递给节点\n }\n }\n ]\n }\n})\n","// MIT License\n// https://github.com/sereneinserenade/tiptap-search-and-replace\n\n// Copyright (c) 2023 - 2024 Jeet Mandaliya (Github Username: sereneinserenade)\n\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n// SOFTWARE.\n\nimport { Extension, Range, type Dispatch } from '@tiptap/core'\nimport { Node as PMNode } from '@tiptap/pm/model'\nimport { Plugin, PluginKey, type EditorState, type Transaction } from '@tiptap/pm/state'\nimport { Decoration, DecorationSet } from '@tiptap/pm/view'\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n search: {\n /**\n * @description Set search term in extension.\n */\n setSearchTerm: (searchTerm: string) => ReturnType\n /**\n * @description Set replace term in extension.\n */\n setReplaceTerm: (replaceTerm: string) => ReturnType\n /**\n * @description Set case sensitivity in extension.\n */\n setCaseSensitive: (caseSensitive: boolean) => ReturnType\n /**\n * @description Reset current search result to first instance.\n */\n resetIndex: () => ReturnType\n /**\n * @description Find next instance of search result.\n */\n nextSearchResult: () => ReturnType\n /**\n * @description Find previous instance of search result.\n */\n previousSearchResult: () => ReturnType\n /**\n * @description Replace first instance of search result with given replace term.\n */\n replace: () => ReturnType\n /**\n * @description Replace all instances of search result with given replace term.\n */\n replaceAll: () => ReturnType\n }\n }\n}\n\ninterface TextNodesWithPosition {\n text: string\n pos: number\n}\n\nconst getRegex = (s: string, disableRegex: boolean, caseSensitive: boolean): RegExp => {\n return RegExp(disableRegex ? s.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&') : s, caseSensitive ? 'gu' : 'gui')\n}\n\ninterface ProcessedSearches {\n decorationsToReturn: DecorationSet\n results: Range[]\n}\n\nfunction processSearches(doc: PMNode, searchTerm: RegExp, searchResultClass: string, resultIndex: number): ProcessedSearches {\n const decorations: Decoration[] = []\n const results: Range[] = []\n\n let textNodesWithPosition: TextNodesWithPosition[] = []\n let index = 0\n\n if (!searchTerm) {\n return {\n decorationsToReturn: DecorationSet.empty,\n results: []\n }\n }\n\n doc?.descendants((node, pos) => {\n if (node.isText) {\n if (textNodesWithPosition[index]) {\n textNodesWithPosition[index] = {\n text: textNodesWithPosition[index].text + node.text,\n pos: textNodesWithPosition[index].pos\n }\n } else {\n textNodesWithPosition[index] = {\n text: `${node.text}`,\n pos\n }\n }\n } else {\n index += 1\n }\n })\n\n textNodesWithPosition = textNodesWithPosition.filter(Boolean)\n\n for (const element of textNodesWithPosition) {\n const { text, pos } = element\n const matches = Array.from(text.matchAll(searchTerm)).filter(([matchText]) => matchText.trim())\n\n for (const m of matches) {\n if (m[0] === '') break\n\n if (m.index !== undefined) {\n results.push({\n from: pos + m.index,\n to: pos + m.index + m[0].length\n })\n }\n }\n }\n\n for (let i = 0; i < results.length; i += 1) {\n const r = results[i]\n const className = i === resultIndex ? `${searchResultClass} ${searchResultClass}-current` : searchResultClass\n const decoration: Decoration = Decoration.inline(r.from, r.to, {\n class: className\n })\n\n decorations.push(decoration)\n }\n\n return {\n decorationsToReturn: DecorationSet.create(doc, decorations),\n results\n }\n}\n\nconst replace = (replaceTerm: string, results: Range[], { state, dispatch }: { state: EditorState; dispatch: Dispatch }) => {\n const firstResult = results[0]\n\n if (!firstResult) return\n\n const { from, to } = results[0]\n\n if (dispatch) dispatch(state.tr.insertText(replaceTerm, from, to))\n}\n\nconst rebaseNextResult = (replaceTerm: string, index: number, lastOffset: number, results: Range[]): [number, Range[]] | null => {\n const nextIndex = index + 1\n\n if (!results[nextIndex]) return null\n\n const { from: currentFrom, to: currentTo } = results[index]\n\n const offset = currentTo - currentFrom - replaceTerm.length + lastOffset\n\n const { from, to } = results[nextIndex]\n\n results[nextIndex] = {\n to: to - offset,\n from: from - offset\n }\n\n return [offset, results]\n}\n\nconst replaceAll = (replaceTerm: string, results: Range[], { tr, dispatch }: { tr: Transaction; dispatch: Dispatch }) => {\n let offset = 0\n\n let resultsCopy = results.slice()\n\n if (!resultsCopy.length) return\n\n for (let i = 0; i < resultsCopy.length; i += 1) {\n const { from, to } = resultsCopy[i]\n\n tr.insertText(replaceTerm, from, to)\n\n const rebaseNextResultResponse = rebaseNextResult(replaceTerm, i, offset, resultsCopy)\n\n if (!rebaseNextResultResponse) continue\n\n offset = rebaseNextResultResponse[0]\n resultsCopy = rebaseNextResultResponse[1]\n }\n\n dispatch?.(tr)\n}\n\nexport const searchAndReplacePluginKey = new PluginKey('searchAndReplacePlugin')\n\nexport interface SearchAndReplaceOptions {\n searchResultClass: string\n disableRegex: boolean\n}\n\nexport interface SearchAndReplaceStorage {\n searchTerm: string\n replaceTerm: string\n results: Range[]\n lastSearchTerm: string\n caseSensitive: boolean\n lastCaseSensitive: boolean\n resultIndex: number\n lastResultIndex: number\n}\n\nexport const SearchAndReplace = Extension.create<SearchAndReplaceOptions, SearchAndReplaceStorage>({\n name: 'searchAndReplace',\n\n addOptions() {\n return {\n searchResultClass: 'search-result',\n disableRegex: true\n }\n },\n\n addStorage() {\n return {\n searchTerm: '',\n replaceTerm: '',\n results: [],\n lastSearchTerm: '',\n caseSensitive: false,\n lastCaseSensitive: false,\n resultIndex: 0,\n lastResultIndex: 0\n }\n },\n\n addCommands() {\n return {\n setSearchTerm:\n (searchTerm: string) =>\n ({ editor }) => {\n editor.storage.searchAndReplace.searchTerm = searchTerm\n\n return false\n },\n setReplaceTerm:\n (replaceTerm: string) =>\n ({ editor }) => {\n editor.storage.searchAndReplace.replaceTerm = replaceTerm\n\n return false\n },\n setCaseSensitive:\n (caseSensitive: boolean) =>\n ({ editor }) => {\n editor.storage.searchAndReplace.caseSensitive = caseSensitive\n\n return false\n },\n resetIndex:\n () =>\n ({ editor }) => {\n editor.storage.searchAndReplace.resultIndex = 0\n\n return false\n },\n nextSearchResult:\n () =>\n ({ editor }) => {\n const { results, resultIndex } = editor.storage.searchAndReplace\n\n const nextIndex = resultIndex + 1\n\n if (results[nextIndex]) {\n editor.storage.searchAndReplace.resultIndex = nextIndex\n } else {\n editor.storage.searchAndReplace.resultIndex = 0\n }\n\n return false\n },\n previousSearchResult:\n () =>\n ({ editor }) => {\n const { results, resultIndex } = editor.storage.searchAndReplace\n\n const prevIndex = resultIndex - 1\n\n if (results[prevIndex]) {\n editor.storage.searchAndReplace.resultIndex = prevIndex\n } else {\n editor.storage.searchAndReplace.resultIndex = results.length - 1\n }\n\n return false\n },\n replace:\n () =>\n ({ editor, state, dispatch }) => {\n const { replaceTerm, results } = editor.storage.searchAndReplace\n\n replace(replaceTerm, results, { state, dispatch })\n\n return false\n },\n replaceAll:\n () =>\n ({ editor, tr, dispatch }) => {\n const { replaceTerm, results } = editor.storage.searchAndReplace\n\n replaceAll(replaceTerm, results, { tr, dispatch })\n\n return false\n }\n }\n },\n\n addProseMirrorPlugins() {\n const editor = this.editor\n const { searchResultClass, disableRegex } = this.options\n\n const setLastSearchTerm = (t: string) => (editor.storage.searchAndReplace.lastSearchTerm = t)\n const setLastCaseSensitive = (t: boolean) => (editor.storage.searchAndReplace.lastCaseSensitive = t)\n const setLastResultIndex = (t: number) => (editor.storage.searchAndReplace.lastResultIndex = t)\n\n return [\n new Plugin({\n key: searchAndReplacePluginKey,\n state: {\n init: () => DecorationSet.empty,\n apply({ doc, docChanged }, oldState) {\n const { searchTerm, lastSearchTerm, caseSensitive, lastCaseSensitive, resultIndex, lastResultIndex } = editor.storage.searchAndReplace\n\n if (!docChanged && lastSearchTerm === searchTerm && lastCaseSensitive === caseSensitive && lastResultIndex === resultIndex)\n return oldState\n\n setLastSearchTerm(searchTerm)\n setLastCaseSensitive(caseSensitive)\n setLastResultIndex(resultIndex)\n\n if (!searchTerm) {\n editor.storage.searchAndReplace.results = []\n return DecorationSet.empty\n }\n\n const { decorationsToReturn, results } = processSearches(\n doc,\n getRegex(searchTerm, disableRegex, caseSensitive),\n searchResultClass,\n resultIndex\n )\n\n editor.storage.searchAndReplace.results = results\n\n return decorationsToReturn\n }\n },\n props: {\n decorations(state) {\n return this.getState(state)\n }\n }\n })\n ]\n }\n})\n\nexport default SearchAndReplace\n","import { EditorContent, EditorContext, useEditor } from '@tiptap/react'\n\n// --- Styles ---\nimport './index.less'\nimport './styles/_keyframe-animations.less'\nimport './styles/_reset.less'\nimport './styles/_variables.less'\n\nimport { Markdown } from 'tiptap-markdown'\n\n// --- Tiptap Core Extensions ---\nimport { Highlight } from '@tiptap/extension-highlight'\nimport { Image } from '@tiptap/extension-image'\nimport { Subscript } from '@tiptap/extension-subscript'\nimport { Superscript } from '@tiptap/extension-superscript'\nimport { TaskItem } from '@tiptap/extension-task-item'\nimport { TaskList } from '@tiptap/extension-task-list'\nimport { TextAlign } from '@tiptap/extension-text-align'\nimport { Typography } from '@tiptap/extension-typography'\nimport { Underline } from '@tiptap/extension-underline'\nimport { StarterKit } from '@tiptap/starter-kit'\n\nimport Table from '@tiptap/extension-table'\nimport TableCell from '@tiptap/extension-table-cell'\nimport TableHeader from '@tiptap/extension-table-header'\nimport TableRow from '@tiptap/extension-table-row'\n// import { Gapcursor } from '@tiptap/extensions'\nimport { BubbleMenu } from '@tiptap/react'\n\n// --- Custom Extensions ---\nimport { Link } from './components/tiptap-extension/link-extension'\nimport { Selection } from './components/tiptap-extension/selection-extension'\nimport { TrailingNode } from './components/tiptap-extension/trailing-node-extension'\n\n// --- UI Primitives ---\nimport { Button } from './components/tiptap-ui-primitive/button'\nimport { Spacer } from './components/tiptap-ui-primitive/spacer'\nimport { Toolbar, ToolbarGroup, ToolbarSeparator } from './components/tiptap-ui-primitive/toolbar'\n\n// --- Tiptap Node ---\nimport './components/tiptap-node/code-block-node/code-block-node.less'\nimport './components/tiptap-node/image-node/image-node.less'\nimport './components/tiptap-node/list-node/list-node.less'\nimport './components/tiptap-node/paragraph-node/paragraph-node.less'\n\n// --- Tiptap UI ---\nimport { HeadingDropdownMenu } from './components/tiptap-ui/heading-dropdown-menu'\nimport { HighlightContent, HighlighterButton, HighlightPopover } from './components/tiptap-ui/highlight-popover'\nimport { LinkButton, LinkContent, LinkPopover } from './components/tiptap-ui/link-popover'\nimport { ListDropdownMenu } from './components/tiptap-ui/list-dropdown-menu'\nimport { MarkButton } from './components/tiptap-ui/mark-button'\nimport { NodeButton } from './components/tiptap-ui/node-button'\nimport { QuoteButton } from './components/tiptap-ui/quote-button'\nimport { TextAlignButton } from './components/tiptap-ui/text-align-button'\nimport { UndoRedoButton } from './components/tiptap-ui/undo-redo-button'\n\n// --- Icons ---\nimport { ArrowLeftIcon } from './components/tiptap-icons/arrow-left-icon'\nimport { HighlighterIcon } from './components/tiptap-icons/highlighter-icon'\nimport { LinkIcon } from './components/tiptap-icons/link-icon'\n\n// --- Hooks ---\nimport classNames from 'classnames'\nimport { ReactNode, useEffect, useRef, useState } from 'react'\nimport { useCursorVisibility } from './hooks/use-cursor-visibility'\nimport { useMobile } from './hooks/use-mobile'\nimport { useWindowSize } from './hooks/use-window-size'\n\nimport { Flex, Tag } from 'antd'\n// import TurndownService from 'turndown'\nimport { useDebounce } from '../../hooks/useDebounce'\nimport PageNoNode from './extensions/pageNoNode'\nimport SearchAndReplace from './extensions/searchAndReplace'\n\n// const turndown = new TurndownService()\nconst MainToolbarContent = ({\n onHighlighterClick,\n onLinkClick,\n onQuote,\n // onSetComment,\n isMobile,\n isBubble\n}: {\n onHighlighterClick: () => void\n onLinkClick: () => void\n onQuote?: MarkdownEditorProps['onQuote']\n // onSetComment: () => void\n isMobile: boolean\n isBubble: boolean\n}) => {\n return (\n <>\n <Spacer />\n {onQuote && (\n <ToolbarGroup>\n <QuoteButton onQuote={onQuote} />\n </ToolbarGroup>\n )}\n {!isBubble && (\n <>\n <ToolbarGroup>\n <UndoRedoButton action=\"undo\" />\n <UndoRedoButton action=\"redo\" />\n </ToolbarGroup>\n\n <ToolbarSeparator />\n </>\n )}\n {/* <Button onClick={onSetComment}>评论</Button> */}\n\n <ToolbarGroup>\n <HeadingDropdownMenu levels={[1, 2, 3, 4]} />\n <ListDropdownMenu types={['bulletList', 'orderedList', 'taskList']} />\n <NodeButton type=\"codeBlock\" />\n <NodeButton type=\"blockquote\" />\n </ToolbarGroup>\n\n <ToolbarSeparator />\n\n <ToolbarGroup>\n <MarkButton type=\"bold\" />\n <MarkButton type=\"italic\" />\n <MarkButton type=\"strike\" />\n <MarkButton type=\"code\" />\n <MarkButton type=\"underline\" />\n {!isMobile ? <HighlightPopover /> : <HighlighterButton onClick={onHighlighterClick} />}\n {!isMobile ? <LinkPopover /> : <LinkButton onClick={onLinkClick} />}\n </ToolbarGroup>\n\n <ToolbarSeparator />\n\n <ToolbarGroup>\n <MarkButton type=\"superscript\" />\n <MarkButton type=\"subscript\" />\n </ToolbarGroup>\n\n <ToolbarSeparator />\n\n <ToolbarGroup>\n <TextAlignButton align=\"left\" />\n <TextAlignButton align=\"center\" />\n <TextAlignButton align=\"right\" />\n <TextAlignButton align=\"justify\" />\n </ToolbarGroup>\n\n <ToolbarSeparator />\n\n <Spacer />\n\n {isMobile && <ToolbarSeparator />}\n </>\n )\n}\n\nconst MobileToolbarContent = ({ type, onBack }: { type: 'highlighter' | 'link'; onBack: () => void }) => (\n <>\n <ToolbarGroup>\n <Button data-style=\"ghost\" onClick={onBack}>\n <ArrowLeftIcon className=\"tiptap-button-icon\" />\n {type === 'highlighter' ? <HighlighterIcon className=\"tiptap-button-icon\" /> : <LinkIcon className=\"tiptap-button-icon\" />}\n </Button>\n </ToolbarGroup>\n\n <ToolbarSeparator />\n\n {type === 'highlighter' ? <HighlightContent /> : <LinkContent />}\n </>\n)\n/**\n * Markdown编辑器组件属性接口\n */\nexport interface MarkdownEditorProps {\n /** 是否禁用编辑器 */\n disabled?: boolean\n /** 搜索关键字 */\n searchValue?: string\n /** 编辑器内容 */\n value?: string\n /** 内容变化回调 */\n onChange?: (value: string) => void\n /** 页面滚动回调 */\n onScrollPage?: (pageIndex: number) => void\n /** 额外导航内容 */\n extraNav?: ReactNode\n /** 是否显示工具栏,默认为true */\n showToolbar?: boolean\n /** 引用文本回调 */\n onQuote?: (text: string) => void\n /** 文件下载回调 */\n onDownloadFile?: (fileContent: string, targetFormat?: string) => Promise<void>\n}\n\n/**\n * Markdown编辑器组件\n * 基于Tiptap构建的富文本编辑器,支持Markdown语法\n * 提供丰富的编辑功能:格式化、链接、图片、表格、高亮等\n * @param props - 组件属性\n */\nexport default ({\n value = '',\n onChange,\n onScrollPage,\n searchValue,\n disabled,\n extraNav,\n showToolbar = true,\n onQuote,\n onDownloadFile\n}: MarkdownEditorProps) => {\n const isMobile = useMobile()\n const windowSize = useWindowSize()\n const lastContentRef = useRef<string>('') // 存储 editor 上一次内容\n const [mobileView, setMobileView] = useState<'main' | 'highlighter' | 'link'>('main')\n const toolbarRef = useRef<HTMLDivElement>(null)\n const editor = useEditor({\n immediatelyRender: false,\n editorProps: {\n attributes: {\n autocomplete: 'off',\n autocorrect: 'off',\n autocapitalize: 'off',\n 'aria-label': 'Main content area, start typing to enter text.'\n }\n },\n extensions: [\n Markdown.configure({\n transformPastedText: true,\n transformCopiedText: true,\n breaks: true\n }),\n StarterKit,\n TextAlign.configure({ types: ['heading', 'paragraph'] }),\n Underline,\n TaskList,\n TaskItem.configure({ nested: true }),\n Highlight.configure({ multicolor: true }),\n Image,\n Typography,\n Superscript,\n Subscript,\n Selection,\n TrailingNode,\n Link.configure({ openOnClick: false }),\n\n Table.configure({\n resizable: true // 可选,允许调整表格大小\n }),\n TableHeader,\n TableRow,\n TableCell,\n // Gapcursor,\n SearchAndReplace.configure({\n searchResultClass: 'cube-hl', // class to give to found items. default 'cube-hl'\n disableRegex: false // also no need to explain\n }),\n PageNoNode\n // Comment.configure({\n // HTMLAttributes: {\n // class: 'my-comment'\n // },\n // onCommentActivated: (commentId) => {\n // setActiveCommentId(commentId)\n\n // if (commentId) setTimeout(() => focusCommentWithActiveId(commentId))\n // }\n // })\n ],\n content: '',\n onUpdate: () => {\n // console.log('update 文本改变')\n const markdownOutput = getMarkdown()\n // ✅ 防抖:与上一次一致则不触发(避免无限循环)\n if (markdownOutput === lastContentRef.current) return\n lastContentRef.current = markdownOutput\n onChange?.(markdownOutput)\n }\n })\n\n const getMarkdown = () => {\n if (!editor) return ''\n return editor.storage.markdown.getMarkdown()\n // return turndown.turndown(editor.getHTML())\n }\n // const [comments, setComments] = useState<Comment[]>([])\n\n // const [activeCommentId, setActiveCommentId] = useState<string | null>(null)\n\n // const commentsSectionRef = useRef<HTMLDivElement | null>(null)\n\n // const focusCommentWithActiveId = (id: string) => {\n // if (!commentsSectionRef.current) return\n\n // const commentInput = commentsSectionRef.current.querySelector<HTMLInputElement>(`input#${id}`)\n\n // if (!commentInput) return\n\n // commentInput.scrollIntoView({\n // behavior: 'smooth',\n // block: 'center',\n // inline: 'center'\n // })\n // }\n\n // useEffect(() => {\n // if (!activeCommentId) return\n\n // focusCommentWithActiveId(activeCommentId)\n // }, [activeCommentId])\n // interface Comment {\n // id: string\n // content: string\n // replies: Comment[]\n // createdAt: Date\n // }\n // const getNewComment = (content: string): Comment => {\n // return {\n // id: genNonDuplicateID(),\n // content,\n // replies: [],\n // createdAt: new Date()\n // }\n // }\n // const onSetComment = () => {\n // const newComment = getNewComment('')\n\n // setComments([...comments, newComment])\n\n // editor?.commands.setComment(newComment.id)\n\n // setActiveCommentId(newComment.id)\n\n // setTimeout(focusCommentWithActiveId)\n\n // console.log('comments', comments)\n // }\n\n const bodyRect = useCursorVisibility({\n editor,\n overlayHeight: toolbarRef.current?.getBoundingClientRect().height ?? 0\n })\n\n useEffect(() => {\n if (!isMobile && mobileView !== 'main') {\n setMobileView('main')\n }\n }, [isMobile, mobileView])\n\n useEffect(() => {\n // console.log('value改变')\n if (!editor) return\n // const current = getMarkdown()\n // // ✅ 如果外部 value 和当前 editor 内容一致 → 不更新\n // if (current === value) return\n\n // ✅ 如果外部 value 和内部记录一致 → 不更新\n if (lastContentRef.current === value) return\n\n editor?.commands.setContent(value)\n // ✅ 同步内部历史,避免 onUpdate 再次触发回调\n lastContentRef.current = value\n\n // 监听滚动\n // if (value) {\n // // 获取所有的 page-no 节点\n // const pageNoNodes = editor.view.dom.querySelectorAll('.page-no')\n // if (!pageNoNodes.length) return\n // // 创建 IntersectionObserver 实例\n // const observer = new IntersectionObserver(\n // (entries) => {\n // entries.forEach((entry) => {\n // if (entry.isIntersecting && entry.intersectionRatio > 0) {\n // // 这里可以执行节点进入视口时的逻辑\n // const boundingTop = entry.boundingClientRect.top\n // const rootTop = entry.rootBounds?.top ?? 0\n // console.log('当前页面索引1:', boundingTop, rootTop)\n // if (Math.abs(boundingTop - rootTop) <= 10) {\n // const pageIndex = entry.target.getAttribute('page-no')\n // console.log('当前页面索引:', pageIndex)\n // // onPageChange(pageIndex) // 调用回调并传递 pageIndex\n // }\n // }\n // })\n // },\n // {\n // root: document.querySelector('.content-wrapper'), // 视口\n // rootMargin: '0px 0px -99% 0px',\n // threshold: 0 // 进入视口时触发\n // }\n // )\n\n // // 为每个 page-no 节点添加观察\n // pageNoNodes.forEach((node) => observer.observe(node))\n\n // // 清理: 在组件卸载时停止观察\n // return () => {\n // pageNoNodes.forEach((node) => observer.unobserve(node))\n // }\n // }\n }, [value, editor])\n\n const onPageChange = useDebounce((pageIndex?: string) => {\n // console.log('onPageChange', pageIndex)\n onScrollPage?.(parseInt(pageIndex ?? '0'))\n }, 300)\n useEffect(() => {\n if (!editor) return\n const container = document.querySelector('.content-wrapper')\n if (!container) return\n const handleSelectionUpdate = () => {\n const { from } = editor.state.selection\n const domAtPos = editor.view.domAtPos(from)\n const domNode = domAtPos.node as HTMLElement\n\n // 获取 content DOM\n const contentRoot = editor.view.dom\n\n // 当前节点或父节点查找 page-no\n let el: HTMLElement | null = domNode.nodeType === 1 ? domNode : domNode.parentElement\n let pageNo: string | null = null\n\n while (el && el !== contentRoot) {\n if (el.classList.contains('page-no')) {\n pageNo = el.getAttribute('page-no')\n break\n }\n el = (el.previousElementSibling as HTMLElement) || el.parentElement\n }\n\n if (!pageNo && domNode) {\n // 如果上面找不到,尝试从当前位置向上寻找最近的 page-no\n const allPageNoEls = Array.from(contentRoot.querySelectorAll('.page-no')) as HTMLElement[]\n const scrollTop = domNode.getBoundingClientRect?.()?.top\n\n for (let i = allPageNoEls.length - 1; i >= 0; i--) {\n const elTop = allPageNoEls[i].getBoundingClientRect().top\n if (elTop < scrollTop) {\n pageNo = allPageNoEls[i].getAttribute('page-no')\n break\n }\n }\n }\n\n if (pageNo) {\n // console.log('最近的上一个 page-no:', pageNo)\n onPageChange(pageNo)\n }\n }\n\n const handleScroll = () => {\n const pageNos = Array.from(container.querySelectorAll('.page-no')) as HTMLElement[]\n if (!pageNos.length) return\n\n let closestNode: HTMLElement | null = null\n let closestTopDiff = -Infinity\n const containerTop = container.getBoundingClientRect().top\n pageNos.forEach((node) => {\n const rect = node.getBoundingClientRect()\n const top = rect.top - containerTop\n\n // 优先找 top ≈ 0 的节点(±5px 容差)\n if (Math.abs(top) <= 80) {\n closestNode = node\n closestTopDiff = 0\n }\n\n // 否则找 top < 0 且最大的(离顶部最近但在视口上方)\n else if (top < 0 && top > closestTopDiff) {\n closestNode = node\n closestTopDiff = top\n }\n })\n\n if (closestNode) {\n const pageNo = (closestNode as HTMLElement).getAttribute('page-no')\n // console.log('当前滚动最近 page-no:', pageNo)\n onPageChange(pageNo!)\n }\n }\n\n editor.on('selectionUpdate', handleSelectionUpdate)\n container.addEventListener('scroll', handleScroll)\n\n return () => {\n editor.off('selectionUpdate', handleSelectionUpdate)\n container.removeEventListener('scroll', handleScroll)\n }\n }, [editor])\n\n useEffect(() => {\n editor?.commands.setSearchTerm(searchValue || '')\n }, [searchValue, value, editor])\n\n useEffect(() => {\n editor?.setEditable(!disabled)\n }, [disabled, editor])\n\n const NsToolBar = ({ isBubble = true }: { isBubble?: boolean }) => (\n <>\n <Toolbar\n {...(isBubble\n ? {}\n : {\n ref: toolbarRef,\n style: isMobile\n ? {\n bottom: `calc(100% - ${windowSize.height - bodyRect.y}px)`\n }\n : {}\n })}\n >\n {mobileView === 'main' ? (\n <MainToolbarContent\n isBubble={isBubble}\n // onSetComment={onSetComment}\n onHighlighterClick={() => setMobileView('highlighter')}\n onLinkClick={() => setMobileView('link')}\n onQuote={onQuote}\n isMobile={isMobile}\n />\n ) : (\n <MobileToolbarContent type={mobileView === 'highlighter' ? 'highlighter' : 'link'} onBack={() => setMobileView('main')} />\n )}\n </Toolbar>\n </>\n )\n\n const downloadFile = () => {\n onDownloadFile?.(getMarkdown(), 'docx')\n }\n\n return (\n <div className={classNames('height-full', 'editor-parent')}>\n <EditorContext.Provider value={{ editor }}>\n {showToolbar && (\n <>\n <Flex justify=\"end\" align=\"center\">\n {NsToolBar({ isBubble: false })}\n {extraNav && (\n <Flex align=\"center\" className=\"m-l-16 m-r-16\">\n {onDownloadFile && (\n <Tag bordered={false} color=\"default\" className=\"cursor-pointer\" onClick={downloadFile}>\n 下载\n </Tag>\n )}\n {extraNav}\n </Flex>\n )}\n </Flex>\n {!isMobile && <BubbleMenu editor={editor}>{NsToolBar({ isBubble: true })}</BubbleMenu>}\n </>\n )}\n <div className=\"content-wrapper scroll-fade-in\">\n <EditorContent\n editor={editor}\n role=\"presentation\"\n className={classNames('simple-editor-content ns-markdown', { 'no-toolbar': !showToolbar })}\n />\n </div>\n </EditorContext.Provider>\n </div>\n )\n}\n","import { forwardRef } from 'react'\nimport { isBoolean, isFunction, isNull, isObject } from '../../utils'\n\n/**\n * 渲染控制对象类型\n * 用于控制组件的显示、渲染函数和属性\n */\nexport type RenderControlObj<C, P = ObjectType<any>> = {\n /** 是否可见 */\n visible?: boolean\n /** 渲染函数 */\n render?: (ctx: C) => React.ReactNode\n /** 传递给组件的属性 */\n props?: P\n}\n\n/**\n * 渲染控制类型\n * 支持布尔值或控制对象\n */\nexport type RenderControl<C, P = ObjectType<any>> = boolean | RenderControlObj<C, P>\n\n/**\n * RenderWrapper组件属性接口\n * @param C - 上下文类型\n * @param P - 属性类型\n */\nexport interface RenderWrapperProps<C, P> {\n /** 渲染控制配置 */\n control?: RenderControl<C, P> | null\n /** 上下文数据 */\n ctx?: C\n /** 默认组件或渲染函数 */\n DefaultComponent?: React.ReactNode | ((props: P) => React.ReactNode)\n}\n\n/**\n * 判断节点是否为渲染函数\n * @param node - 要判断的节点\n * @returns 是否为渲染函数\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\n/**\n * 渲染默认组件\n * @param DefaultComponent - 默认组件\n * @param ref - ref引用\n * @param props - 组件属性\n * @returns 渲染的组件\n */\nfunction renderDefault<P>(DefaultComponent?: React.ReactNode | ((props: P) => React.ReactNode), ref?: any, props?: P) {\n if (!DefaultComponent) return null\n return isRenderFn(DefaultComponent) ? <DefaultComponent ref={ref} {...(props as P)} /> : DefaultComponent\n}\n\n/**\n * 渲染包装器组件\n * 根据控制配置条件性地渲染组件,支持动态渲染函数和属性传递\n *\n * @example\n * // 基本用法\n * <RenderWrapper control={true} DefaultComponent={<div>内容</div>} />\n *\n * // 条件渲染\n * <RenderWrapper control={{ visible: false }} DefaultComponent={<div>不显示</div>} />\n *\n * // 动态渲染\n * <RenderWrapper\n * control={{ render: (ctx) => <div>动态内容: {ctx.value}</div> }}\n * ctx={{ value: 'hello' }}\n * />\n *\n * @param props - 组件属性\n * @returns 渲染的组件或null\n */\nexport const RenderWrapper = forwardRef(function RenderWrapper<C = any, P = any>(\n { control = true, ctx, DefaultComponent }: RenderWrapperProps<C, P>,\n ref\n) {\n if (control === false || isNull(control)) return null\n\n if (control === true || control === undefined) {\n return renderDefault(DefaultComponent, ref)\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, ref, props)\n})\n\n/**\n * 判断是否应该渲染组件\n * @param control - 渲染控制配置\n * @returns 是否应该渲染\n */\nexport const shouldRender = (control?: RenderControl<any, any> | null) =>\n control != null && (isBoolean(control) ? control : control?.visible !== false)\n\n/**\n * 合并上级传入的props与当前的props\n * 用于智能地合并组件属性\n *\n * @param control - 渲染控制配置\n * @param props - 要合并的属性\n * @returns 合并后的属性对象或null\n */\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\n/**\n * 用户头像组件属性接口\n */\nexport interface UserAvatarProps {\n /** 头像图片地址 */\n avatarSrc?: string\n /** 用户名 */\n userName?: string\n /** 头像尺寸 */\n size?: number\n}\n\n/**\n * 用户头像组件\n * 如果没有头像图片,则显示用户名首字母作为头像\n * @param props - 组件属性\n */\nexport default ({ size, avatarSrc, userName }: UserAvatarProps) => {\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"]}
1
+ {"version":3,"sources":["../src/components/File/styles.module.less","../src/components/File/AudioPlayer.tsx","../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/iframe/iframeRelay.ts","../src/utils/is.ts","../src/hooks/iframe/useIframeRelayBridge.ts","../src/hooks/useCreateValtioContext.tsx","../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/theme.ts","../src/utils/message.ts","../src/utils/session.ts","../src/utils/request.ts","../src/hooks/webSocket/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/MarkdownEditor/components/tiptap-extension/link-extension.ts","../src/components/MarkdownEditor/components/tiptap-extension/selection-extension.ts","../src/components/MarkdownEditor/components/tiptap-extension/trailing-node-extension.ts","../src/components/MarkdownEditor/components/tiptap-ui-primitive/tooltip/tooltip.tsx","../src/components/MarkdownEditor/components/tiptap-ui-primitive/button/button.tsx","../src/components/MarkdownEditor/components/tiptap-ui-primitive/spacer/spacer.tsx","../src/components/MarkdownEditor/components/tiptap-ui-primitive/separator/separator.tsx","../src/components/MarkdownEditor/components/tiptap-ui-primitive/toolbar/toolbar.tsx","../src/components/MarkdownEditor/hooks/use-tiptap-editor.ts","../src/components/MarkdownEditor/components/tiptap-icons/chevron-down-icon.tsx","../src/components/MarkdownEditor/components/tiptap-icons/heading-icon.tsx","../src/components/MarkdownEditor/lib/tiptap-utils.ts","../src/components/MarkdownEditor/components/tiptap-icons/heading-five-icon.tsx","../src/components/MarkdownEditor/components/tiptap-icons/heading-four-icon.tsx","../src/components/MarkdownEditor/components/tiptap-icons/heading-one-icon.tsx","../src/components/MarkdownEditor/components/tiptap-icons/heading-six-icon.tsx","../src/components/MarkdownEditor/components/tiptap-icons/heading-three-icon.tsx","../src/components/MarkdownEditor/components/tiptap-icons/heading-two-icon.tsx","../src/components/MarkdownEditor/components/tiptap-ui/heading-button/heading-button.tsx","../src/components/MarkdownEditor/components/tiptap-ui-primitive/dropdown-menu/dropdown-menu.tsx","../src/components/MarkdownEditor/components/tiptap-ui/heading-dropdown-menu/heading-dropdown-menu.tsx","../src/components/MarkdownEditor/hooks/use-menu-navigation.ts","../src/components/MarkdownEditor/components/tiptap-icons/ban-icon.tsx","../src/components/MarkdownEditor/components/tiptap-icons/highlighter-icon.tsx","../src/components/MarkdownEditor/components/tiptap-ui-primitive/popover/popover.tsx","../src/components/MarkdownEditor/components/tiptap-ui/highlight-button/highlight-button.tsx","../src/components/MarkdownEditor/components/tiptap-ui/highlight-popover/highlight-popover.tsx","../src/components/MarkdownEditor/components/tiptap-icons/corner-down-left-icon.tsx","../src/components/MarkdownEditor/components/tiptap-icons/external-link-icon.tsx","../src/components/MarkdownEditor/components/tiptap-icons/link-icon.tsx","../src/components/MarkdownEditor/components/tiptap-icons/trash-icon.tsx","../src/components/MarkdownEditor/components/tiptap-ui/link-popover/link-popover.tsx","../src/components/MarkdownEditor/components/tiptap-icons/list-icon.tsx","../src/components/MarkdownEditor/components/tiptap-icons/list-ordered-icon.tsx","../src/components/MarkdownEditor/components/tiptap-icons/list-todo-icon.tsx","../src/components/MarkdownEditor/components/tiptap-ui/list-button/list-button.tsx","../src/components/MarkdownEditor/components/tiptap-ui/list-dropdown-menu/list-dropdown-menu.tsx","../src/components/MarkdownEditor/components/tiptap-icons/bold-icon.tsx","../src/components/MarkdownEditor/components/tiptap-icons/code2-icon.tsx","../src/components/MarkdownEditor/components/tiptap-icons/italic-icon.tsx","../src/components/MarkdownEditor/components/tiptap-icons/strike-icon.tsx","../src/components/MarkdownEditor/components/tiptap-icons/subscript-icon.tsx","../src/components/MarkdownEditor/components/tiptap-icons/superscript-icon.tsx","../src/components/MarkdownEditor/components/tiptap-icons/underline-icon.tsx","../src/components/MarkdownEditor/components/tiptap-ui/mark-button/mark-button.tsx","../src/components/MarkdownEditor/components/tiptap-icons/block-quote-icon.tsx","../src/components/MarkdownEditor/components/tiptap-icons/code-block-icon.tsx","../src/components/MarkdownEditor/components/tiptap-ui/node-button/node-button.tsx","../src/components/MarkdownEditor/components/tiptap-icons/quote-icon.tsx","../src/components/MarkdownEditor/components/tiptap-ui/quote-button/quote-button.tsx","../src/components/MarkdownEditor/components/tiptap-icons/align-center-icon.tsx","../src/components/MarkdownEditor/components/tiptap-icons/align-justify-icon.tsx","../src/components/MarkdownEditor/components/tiptap-icons/align-left-icon.tsx","../src/components/MarkdownEditor/components/tiptap-icons/align-right-icon.tsx","../src/components/MarkdownEditor/components/tiptap-ui/text-align-button/text-align-button.tsx","../src/components/MarkdownEditor/components/tiptap-icons/redo2-icon.tsx","../src/components/MarkdownEditor/components/tiptap-icons/undo2-icon.tsx","../src/components/MarkdownEditor/components/tiptap-ui/undo-redo-button/undo-redo-button.tsx","../src/components/MarkdownEditor/components/tiptap-icons/arrow-left-icon.tsx","../src/components/MarkdownEditor/hooks/use-window-size.ts","../src/components/MarkdownEditor/hooks/use-cursor-visibility.ts","../src/components/MarkdownEditor/hooks/use-mobile.ts","../src/components/MarkdownEditor/extensions/pageNoNode.ts","../src/components/MarkdownEditor/extensions/searchAndReplace.ts","../src/components/MarkdownEditor/index.tsx","../src/components/RenderWrapper/index.tsx","../src/components/UserAvatar/index.tsx"],"names":["nsPreviewImage","nsPreviewPdf","pdfToolbar","nsPreviewVideo","nsPreviewAudio","jsx","useMemo","FileTextOutlined","FilePdfOutlined","FileWordOutlined","FileExcelOutlined","FilePptOutlined","VideoCameraOutlined","NotificationOutlined","FileJpgOutlined","FileImageOutlined","FileGifOutlined","FileMarkdownOutlined","FileZipOutlined","FileUnknownOutlined","jsxs","lazy","Suspense","markdownit","jsonrepair","md","parse","useState","error","useEffect","Result","useRef","createContext","useContext","useCallback","message","dayjs","relativeTime","AES","encUtf8","Decimal","notification","Modal","token","axios","Form","Flex","PasswordStatus","Alert","Input","Button","password","pageNavigationPlugin","thumbnailPlugin","zoomPlugin","Toolbar","pageNo","Worker","Splitter","Viewer","zh_CN","Empty","Image","Drawer","styles_module_default","iframe","forwardRef","Fragment","Spin","classNames","TiptapLink","Plugin","getMarkRange","TextSelection","Extension","PluginKey","isNodeSelection","DecorationSet","Decoration","React","useFloating","autoUpdate","offset","flip","shift","useHover","useFocus","useDismiss","useRole","useInteractions","FloatingDelayGroup","TooltipTrigger","useMergeRefs","TooltipContent","FloatingPortal","React2","React3","React4","React5","useCurrentEditor","React6","React7","React8","React9","React10","React11","React12","React13","React14","React15","React16","useClick","useListNavigation","useTypeahead","FloatingList","FloatingFocusManager","useListItem","React17","React18","React19","React20","React21","limitShift","PopoverTrigger","PopoverContent","React22","React23","isDisabled","React24","React25","React26","React27","React28","React29","React30","React31","React32","React33","React34","React35","React36","React37","React38","React39","React40","React41","React42","React43","React44","React45","React46","React47","React48","React49","React50","React51","React52","React53","React54","React55","React56","React57","React58","Node","mergeAttributes","useEditor","Markdown","StarterKit","TextAlign","Underline","TaskList","TaskItem","Highlight","Typography","Superscript","Subscript","Table","TableHeader","TableRow","TableCell","downloadFile","EditorContext","Tag","BubbleMenu","EditorContent","RenderWrapper","Avatar"],"mappings":"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","file":"index.cjs.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.nsPreviewPdf :global .rpv-core__inner-pages {\n scrollbar-width: thin;\n scrollbar-color: transparent transparent;\n}\n.nsPreviewPdf :global .rpv-core__inner-pages::-webkit-scrollbar {\n width: 8px;\n height: 8px;\n}\n.nsPreviewPdf :global .rpv-core__inner-pages::-webkit-scrollbar-thumb {\n background-color: rgba(0, 0, 0, 0);\n border-radius: 4px;\n transition: background-color 0.3s ease 0.3s;\n}\n.nsPreviewPdf :global .rpv-core__inner-pages::-webkit-scrollbar-track {\n background: transparent;\n}\n.nsPreviewPdf :global .rpv-core__inner-pages:hover {\n scrollbar-color: rgba(0, 0, 0, 0.3) transparent;\n}\n.nsPreviewPdf :global .rpv-core__inner-pages:hover::-webkit-scrollbar-thumb {\n background-color: rgba(0, 0, 0, 0.3);\n transition-delay: 0s;\n}\n.nsPreviewPdf :global .rpv-thumbnail__list {\n scrollbar-width: thin;\n scrollbar-color: transparent transparent;\n}\n.nsPreviewPdf :global .rpv-thumbnail__list::-webkit-scrollbar {\n width: 8px;\n height: 8px;\n}\n.nsPreviewPdf :global .rpv-thumbnail__list::-webkit-scrollbar-thumb {\n background-color: rgba(0, 0, 0, 0);\n border-radius: 4px;\n transition: background-color 0.3s ease 0.3s;\n}\n.nsPreviewPdf :global .rpv-thumbnail__list::-webkit-scrollbar-track {\n background: transparent;\n}\n.nsPreviewPdf :global .rpv-thumbnail__list:hover {\n scrollbar-color: rgba(0, 0, 0, 0.3) transparent;\n}\n.nsPreviewPdf :global .rpv-thumbnail__list:hover::-webkit-scrollbar-thumb {\n background-color: rgba(0, 0, 0, 0.3);\n transition-delay: 0s;\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'\n\n/**\n * 音频播放器组件属性接口\n */\nexport interface AudioPlayerProps {\n /** 音频文件URL地址 */\n fileUrl: string\n}\n\n/**\n * 音频播放器组件\n * 提供基本的音频播放功能\n * @param props - 组件属性\n */\nexport default ({ fileUrl }: AudioPlayerProps) => {\n return (\n <audio controls className={styles.nsPreviewAudio}>\n <source src={fileUrl} type=\"audio/mpeg\" />\n 您的浏览器不支持 audio 标签。\n </audio>\n )\n}\n","import {\n FileExcelOutlined,\n FileGifOutlined,\n FileImageOutlined,\n FileJpgOutlined,\n FileMarkdownOutlined,\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'\n\n/**\n * 文件图标组件属性接口\n */\nexport interface FileIconProps {\n /** 文件后缀名,不区分大小写 */\n suffix?: string\n /** 图标字体大小,默认为22px */\n fontSize?: number\n}\n/**\n * 文件图标组件\n * 根据文件后缀名显示对应的图标\n * 支持常见的文件类型:文档、图片、音视频、压缩包等\n *\n * 支持的文件类型:\n * - 文档:PDF, DOC/DOCX, XLS/XLSX, PPT, TXT, MD/MARKDOWN\n * - 图片:JPG, JPEG, PNG, GIF\n * - 音视频:MP3, MP4, MOV, AVI, FLV\n * - 压缩包:ZIP, RAR, 7Z\n * - 其他:显示为默认图标或文件夹图标\n *\n * @param props - 组件属性\n * @returns 对应文件类型的图标\n */\nexport default ({ suffix, fontSize = 22 }: FileIconProps) => {\n // 设置图标样式:使用主题色和指定字体大小\n const styles = { fontSize, color: 'var(--ant-color-primary)' }\n\n /**\n * 根据文件后缀名选择对应的图标\n * 使用 useMemo 优化性能,避免每次渲染都重新计算\n */\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 'MD':\n case 'MARKDOWN':\n return <FileMarkdownOutlined />\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]) // 仅在suffix变化时重新计算\n\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\n/**\n * 视频播放器组件属性接口\n */\nexport interface VideoPlayerProps {\n /** 视频文件URL地址 */\n fileUrl: string\n}\n\n/**\n * 视频播放器组件\n * 提供基本的视频播放功能\n * @param props - 组件属性\n */\nexport default ({ fileUrl }: VideoPlayerProps) => {\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\n/**\n * 组件映射类型,用于延时加载\n */\nexport type ComponentMapType = Record<\n string,\n () => Promise<{\n default: React.ComponentType<any>\n }>\n>\n\n/**\n * 基础组件映射表\n */\nconst baseComponentMap: ComponentMapType = {\n // renderMarkdown: () => import('@/components/RenderMarkdown')\n}\n\n/**\n * LazyComponent组件属性接口\n */\nexport interface LazyComponentProps {\n /** 组件类型名称 */\n type: string\n /** 自定义组件映射 */\n customComponents?: ComponentMapType\n /** 其他属性会透传给组件 */\n [key: string]: any\n}\n\n/**\n * 延时加载组件\n * 根据type动态加载对应的组件,支持自定义组件映射\n * 使用示例:<LazyComponent type=\"renderMarkdown\" data={{}} loading={true} />\n * @param props - 组件属性\n */\nexport default ({ type, customComponents, ...rest }: LazyComponentProps) => {\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 { useMemo } from 'react'\nimport LazyComponent, { ComponentMapType } from '../LazyComponent'\nimport './markdown.less'\n\n/**\n * Markdown渲染组件属性接口\n */\nexport interface RenderMarkdownProps {\n /** Markdown内容 */\n content?: string\n /** 搜索关键字 */\n searchValue?: string\n /** 自定义组件映射 */\n customComponents?: ComponentMapType\n /** 内容变化回调 */\n onChange?: (value: string) => void\n /** 部分内容变化回调 */\n onPartialChange?: (oldValue: string, newValue: string) => void\n}\n\n// ========================\n// MarkdownIt 基础设置\n// ========================\nconst md = markdownit({ html: true, breaks: true })\n\n// 所有 link 默认打开新标签页\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}\n\n// ========================\n// 工具函数:安全解析 data JSON\n// ========================\nfunction parseData(raw: string) {\n let obj: any = {}\n try {\n // 尝试直接 JSON.parse\n obj = JSON.parse(raw)\n } catch {\n try {\n // JSON 修复后再解析\n obj = JSON.parse(jsonrepair(raw))\n } catch {\n // 解析失败就保留原文\n obj = { _raw: raw }\n }\n }\n return obj\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\n// 占位符格式,例如 \"__ALERT_DATA_0__\"\nfunction makePlaceholder(id: number) {\n return `__ALERT_DATA_${id}__`\n}\n\n// ============================================================\n// 抽取 :::alert ... ::: 块,把 data={...} 替换成占位符\n// ============================================================\n//\n// 步骤:\n// 1. 找到所有 :::alert\n// 2. 从中提取 type 和 data 原文\n// 3. 用单行格式替换为 `:::alert type=xx data=\"__PH__\" :::`\n// 4. 返回替换后的字符串 + 占位符映射表\nfunction alertMarkClean(src: string) {\n let pos = 0\n let id = 0\n let out = ''\n const placeholders = new Map<string, string>()\n\n while (pos < src.length) {\n const start = src.indexOf(':::alert', pos)\n if (start === -1) {\n // 无更多 alert,直接收尾\n out += src.slice(pos)\n break\n }\n\n // 保留 alert 之前的部分\n out += src.slice(pos, start)\n\n // ========================\n // 定位结束 ::: 块\n // ========================\n\n const afterStart = src.slice(start)\n\n // 优先匹配 “换行开始的 :::” 作为块级结束符\n const relAfter = afterStart.slice(':::alert'.length)\n const matchLineEnd = relAfter.search(/\\s*:::\\s*/)\n let endIdx = -1\n // 判断是否结束\n let isNoEnd = 1\n\n if (matchLineEnd !== -1) {\n // 找到块级结束符\n endIdx = start + ':::alert'.length + matchLineEnd\n isNoEnd = 0\n } else {\n // 没找到闭合符,最后的内容都属于当前标记\n endIdx = src.length\n isNoEnd = 1\n }\n\n // ========================\n // 解析 inner(alert 内部内容)\n // ========================\n const inner = src.slice(start + ':::alert'.length, endIdx).trim()\n\n // 解析 type=xxxx\n const typeMatch = inner.match(/type\\s*=\\s*(?:(['\"])(.*?)\\1|(\\S+))/)\n const type = typeMatch ? (typeMatch[2] ?? typeMatch[3]) : undefined\n\n // data= 后面整个都是 data 内容\n const dataIdx = inner.search(/\\bdata\\s*=/)\n let rawData = ''\n if (dataIdx !== -1) {\n rawData = inner.slice(dataIdx + inner.slice(dataIdx).match(/\\bdata\\s*=/)![0].length).trim()\n }\n\n // 生成占位符\n const ph = makePlaceholder(id++)\n placeholders.set(ph, rawData)\n\n // 使用 单行 alert 重写,此格式能被 inline 插件识别\n const typeText = type ? `type=${JSON.stringify(type)}` : ''\n out += `:::alert ${typeText} data=\"${ph}\" loading=\"${isNoEnd}\" :::`\n\n // 跳到结束 ::: 后继续扫描\n const realClose = src.indexOf(':::', endIdx)\n pos = realClose === -1 ? endIdx : realClose + 3\n }\n\n return { text: out, placeholders }\n}\n\n// ============================================================\n// MarkdownIt inline 插件\n// 将单行 `:::alert ... :::` 转成 <lazy-component ... />\n// ============================================================\nfunction alertInlinePlugin(md: any) {\n md.inline.ruler.before('emphasis', 'alert_inline', function (state: any, silent: boolean) {\n const pos = state.pos\n const src = state.src\n if (src.slice(pos, pos + 3) !== ':::') return false\n\n // 匹配“同一行中的 :::alert ... :::”\n const m = src.slice(pos).match(/^:::alert\\b([^\\n\\r]*?):::/)\n if (!m) return false\n if (silent) return false\n\n // m[1] 是 type=xxx data=\"xxx\" ...\n const raw = m[1].trim()\n\n // 构造 HTML inline token\n const html = `<lazy-component ${raw}></lazy-component>`\n const token = state.push('html_inline', '', 0)\n token.content = html\n\n // 移动光标\n state.pos += m[0].length\n return true\n })\n}\n\n// 注册 inline 插件(适配 HMR)\ntry {\n md.use(alertInlinePlugin)\n} catch {}\n\n/**\n * Markdown渲染组件\n * 将Markdown文本转换为HTML并渲染为React组件\n * 支持自定义组件、搜索高亮、内容编辑等功能\n * @param RenderMarkdownProps - 组件属性\n */\nexport default ({ content = '', searchValue, customComponents, onChange, onPartialChange }: RenderMarkdownProps) => {\n // console.log('RenderMarkdown', content)\n const reactContent = useMemo(() => {\n if (!content) return null\n\n // 1) 抽取 data={...},替换为占位符\n const { text: preprocessed, placeholders } = alertMarkClean(content)\n\n // 2) Markdown 渲染\n let rawHtml = md.render(preprocessed)\n\n // 3) 关键词高亮\n rawHtml = searchValue ? highlightKeywords(rawHtml, [searchValue]) : rawHtml\n\n // ============================================================\n // 4) 把 <lazy-component> 转成真正的 React LazyComponent\n // ============================================================\n let lazyIndex = -1\n return parse(rawHtml, {\n replace: (domNode) => {\n if ((domNode as Element).name === 'lazy-component') {\n lazyIndex++\n\n const el = domNode as Element\n const type = el.attribs.type\n const loading = !!Number(el.attribs.loading)\n const dataAttr = el.attribs.data || ''\n let data: any = {}\n // console.log('el.attribs', placeholders)\n // 用占位符从 Map 中恢复原始 data 文本并解析成对象\n if (/^__ALERT_DATA_\\d+__$/.test(dataAttr)) {\n const raw = placeholders.get(dataAttr) ?? ''\n data = parseData(raw)\n // console.log('__ALERT_DATA_', raw, parseData(raw))\n }\n // console.log('lazyIndex', `${type}${lazyIndex}`)\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'\n\n/**\n * Markdown预览组件属性接口\n */\nexport interface MarkdownPreviewProps {\n /** Markdown文件URL地址 */\n fileUrl: string\n /** 搜索关键字 */\n searchValue?: string\n}\n\n/**\n * Markdown预览组件\n * 从指定URL获取Markdown内容并渲染显示\n * @param props - 组件属性\n */\nexport default ({ fileUrl, searchValue }: MarkdownPreviewProps) => {\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","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\n/**\n * 类型判断函数\n * @param val - 要判断的值\n * @param type - 目标类型名\n * @returns 是否为目标类型\n */\nexport function is(val: unknown, type: string) {\n return toString.call(val) === `[object ${type}]`\n}\n\n/**\n * 判断值是否为 undefined\n * @param val - 要判断的值\n * @returns 是否为 undefined\n */\nexport function isUnDef<T = unknown>(val?: T): val is T {\n return is(val, 'Undefined')\n}\n\n/**\n * 判断值是否已定义(非 undefined)\n * @param val - 要判断的值\n * @returns 是否已定义\n */\nexport function isDef<T = unknown>(val?: T): val is T {\n return !isUnDef(val)\n // return typeof val !== 'undefined'\n}\n/**\n * 判断值是否为对象(不包括 FormData 等)\n * @param val - 要判断的值\n * @returns 是否为对象\n */\nexport function isObject(val: any): val is Record<any, any> {\n return is(val, 'Object')\n}\n\n/**\n * 判断对象是否为空对象\n * @param val - 要判断的值\n * @returns 是否为空对象\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\n/**\n * 判断值是否为 Date 对象\n * @param val - 要判断的值\n * @returns 是否为 Date 对象\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\n/** 判断是否为服务端环境(无 window 对象) */\nexport const isServer = typeof window === 'undefined'\n\n/** 判断是否为客户端环境(有 window 对象) */\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\nexport const isLocalhost = (host?: string): boolean => {\n return /^(localhost:)/.test(host || location.host)\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 { createContext, ReactNode, useContext } from 'react'\n\n/**\n * 通用的 Valtio Context 创建工厂 Hook\n * 创建 Valtio 状态管理的 Context 和 Provider\n *\n * 支持的操作:\n * - ValtioProvider:包裹组件以提供 store 状态\n * - useValtioStore:在组件中获取 store 实例\n *\n * @template T - Store 对象类型\n * @returns Valtio Context 相关的工具函数\n */\nexport function useCreateValtioContext<T extends object>() {\n const Context = createContext<T | null>(null)\n\n /**\n * Valtio Provider 组件\n * @param props - 包含 store 和 children 的属性\n * @returns Provider 组件\n */\n const ValtioProvider = ({ store, children }: { store: T; children?: ReactNode }) => <Context.Provider value={store}>{children}</Context.Provider>\n\n /**\n * 获取 Valtio store 的 Hook\n * @returns store 实例\n * @throws 当在 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 Context\n }\n}\n","import { useCallback, useEffect, useRef } from 'react'\n/**\n * 防抖 Hook\n * 在指定时间内多次调用只执行最后一次,延迟指定时间后执行\n *\n * @param func - 需要防抖的函数\n * @param wait - 延迟时间(毫秒),默认为400ms\n * @returns 防抖处理后的函数,包含 flush 和 cancel 方法\n */\nexport function useDebounce<A extends Array<any>, R = void>(func: (..._args: A) => R, wait: number = 400) {\n /** 保存函数和定时器的引用 */\n const { current } = useRef({ func, timeOut: null } as { func: (..._args: A) => R; timeOut: null | NodeJS.Timeout })\n\n /** 更新最新的函数引用 */\n useEffect(() => {\n current.func = func\n }, [func])\n\n /** 保存最新的参数 */\n let args: A\n\n /**\n * 防抖处理函数\n * @param _args - 函数参数\n * @returns Promise 包装的结果\n */\n function debounce(..._args: A) {\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 /**\n * 取消防抖\n */\n function cancel() {\n if (!current.timeOut) return\n clearTimeout(current.timeOut)\n current.timeOut = null\n }\n\n /**\n * 立即执行防抖函数\n * @returns 函数执行结果\n */\n function flush() {\n cancel()\n return current.func.apply(null, args)\n }\n\n /** 添加额外方法到防抖函数 */\n debounce.flush = flush\n debounce.cancel = cancel\n\n return useCallback(debounce, [])\n}\n","import { message } from 'antd'\nimport { isArray, isExternal, isNullOrUnDef, isObject } from './is'\n\n/**\n * 深拷贝函数\n * @param obj - 要拷贝的对象\n * @param isJson - 是否使用 JSON 方式深拷贝,默认为 true\n * @returns 拷贝后的新对象\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 * 深度比较两个对象是否相等\n * 支持 Date、RegExp、Map、Set、Array、Function、Object 等类型\n * @param a - 第一个对象\n * @param b - 第二个对象\n * @returns 是否相等\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}\n/**\n * 深度合并两个对象,对于对象类型进行递归合并\n * @param base - 基础对象\n * @param override - 覆盖对象\n * @returns 合并后的新对象\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\n/**\n * 将键值对象转换为选项数组格式\n * @param obj - 键值对象\n * @returns 选项数组,包含 label 和 value 属性\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/**\n * 将数组转换为以指定字段为键的对象\n * @param arr - 要转换的数组\n * @param key - 用作对象键的字段名\n * @returns 转换后的对象\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\nexport interface NsSetIntervalReturnType {\n /** 检查是否正在运行 */\n isRun: () => boolean\n /** 取消定时器 */\n cancel: () => void\n}\n/**\n * 使用 setTimeout 模拟 setInterval 的返回类型接口\n * 避免 setInterval 的内存泄漏问题\n * @param fn - 要重复执行的函数\n * @param t - 间隔时间(毫秒)\n * @returns 控制对象,包含 isRun 和 cancel 方法\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/**\n * 生成不重复的唯一ID\n * @returns 唯一ID字符串\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/**\n * 复制文本到剪贴板\n * 优先使用 navigator.clipboard API,降级使用 execCommand\n * @param text - 要复制的文本\n * @param prompt - 提示语\n * @returns void\n */\nexport const copyText = (text: string, prompt = '复制成功') => {\n // navigator clipboard 需要https等安全上下文\n if (navigator.clipboard && window.isSecureContext) {\n // navigator clipboard 向剪贴板写文本\n navigator.clipboard.writeText(text).then(() => {\n if (prompt) {\n message.success(prompt)\n }\n })\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 const bol = document.execCommand('copy')\n if (bol && prompt) {\n message.success(prompt)\n }\n textArea.remove()\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}\n/**\n * 生成指定范围内的不重复随机数\n * @param min - 最小值\n * @param max - 最大值\n * @param count - 生成数量\n * @returns 不重复的随机数数组\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}\n/**\n * 从文件路径中提取文件名\n * @param filePath - 文件路径\n * @returns 文件名\n */\nexport const getFileName = (filePath: string) => {\n return filePath.split('?')[0].split('/').pop() || ''\n}\n\n/**\n * 从文件名中获取文件扩展名\n * @param fileName - 文件名\n * @returns 文件扩展名\n */\nexport const getFileSuffixName = (fileName: string) => {\n return fileName.split('.').pop() || ''\n}\n/**\n * 将文本中的换行符转换为 HTML 换行标签\n * @param con - 要转换的文本\n * @returns 转换后的 HTML 字符串\n */\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}\n/**\n * 下载文件到本地\n * @param url - 文件下载地址\n * @param name - 下载文件名,默认为'图片下载'\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 window.URL.revokeObjectURL(url)\n}\n\n/**\n * 给URL路径最后添加斜杠\n * @param url - 要处理的URL,默认为空字符串\n * @returns 处理后的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 * @param url - 目标URL\n * @param preHref - 参考URL,用于获取mainSource参数\n * @returns 处理后的URL\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 * @returns 完整的 WebSocket URL\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\n/**\n * 对象转换函数,将源对象转换为目标对象\n * @param source - 源对象\n * @param fieldMap - 字段映射配置\n * @returns 转换后的目标对象\n */\nexport function transform<T extends object, U extends object>(\n source: T,\n fieldMap: {\n [K in keyof U]: keyof T | ((source: T) => U[K]) | U[K]\n }\n): U {\n const result = {} as U\n for (const [targetKey, mapping] of Object.entries(fieldMap)) {\n const key = targetKey as keyof U\n if (typeof mapping === 'function') {\n result[key] = (mapping as (src: T) => U[typeof key])(source)\n } else if (typeof mapping === 'string' && source && mapping in source) {\n result[key] = source[mapping as keyof T] as unknown as U[typeof key]\n } else {\n result[key] = mapping as U[typeof key]\n }\n }\n return result\n}\n\n/**\n * 批量对象转换函数\n * @param sources - 源对象数组\n * @param fieldMap - 字段映射配置\n * @returns 转换后的目标对象数组\n */\nexport function transforms<T extends object, U extends object>(\n sources: T[],\n fieldMap: {\n [K in keyof U]: keyof T | ((source: T) => U[K]) | U[K]\n }\n): U[] {\n return sources?.map((source) => transform<T, U>(source, fieldMap)) || []\n}\n","import { useEffect, useRef } from 'react'\nimport { deepEqual } from '../utils/common'\n\n/**\n * 深度比较 useEffect Hook\n * 使用深度比较算法来检测依赖项变化,避免不必要的重新渲染\n *\n * @param effect - 要执行的副作用函数\n * @param deps - 依赖项数组\n */\nexport function useDeepEffect(effect: React.EffectCallback, deps: any[]) {\n /** 保存上一次的依赖项引用 */\n const prevDepsRef = useRef<any[]>()\n\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/**\n * 创建同时具有 ref 和 state 特性的状态 Hook\n * 解决了 useState 在异步闭包中获取不到最新值的问题\n *\n * @param init - 初始值\n * @returns [state, setState, getState] 元组,包含状态值、设置函数和获取函数\n */\nexport function useRefState<T>(init: T) {\n const [state, setState] = useState(init)\n /** 保存状态值的 ref */\n const stateRef = useRef(init)\n\n /**\n * 同时更新 ref 和 state\n * @param newVal - 新值\n */\n const setProxy = (newVal: T) => {\n stateRef.current = newVal\n setState(newVal)\n }\n\n /**\n * 获取当前 ref 值(异步安全的)\n * @returns 当前状态值\n */\n const getState = () => stateRef.current\n\n return [state, setProxy, getState] as const\n}\n","import { useEffect, useState } from 'react'\n\n/**\n * 同步输入框组件和外部状态的 Hook\n * 解决输入中文时因连续渲染关闭中文输入法的问题\n *\n * @template T - 值类型\n * @param storeValue - 外部存储的值\n * @param setStoreValue - 设置外部存储值的函数\n * @returns 包含 inputValue 和 setInputValue 的对象\n */\nexport const useSyncInput = <T>(storeValue: T, setStoreValue: (value: T) => void) => {\n /** 内部输入状态 */\n const [inputValue, setInputValue] = useState<T>(storeValue)\n\n /** 监听外部值变化并同步到内部状态 */\n useEffect(() => {\n if (storeValue !== inputValue) {\n setInputValue(storeValue)\n }\n }, [storeValue])\n\n /**\n * 处理输入值变化,同时更新外部存储和内部状态\n * @param value - 新的输入值\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 * 在指定时间间隔内只执行一次函数,节流控制函数调用频率\n *\n * @template A - 函数参数类型\n * @template R - 返回值类型\n * @param func - 需要节流的函数\n * @param wait - 节流间隔时间(毫秒)\n * @returns 节流处理后的函数,包含 flush 和 cancel 方法\n */\nexport function useThrottle<A extends Array<any>, R = void>(func: (..._args: A) => R, wait: number) {\n /** 保存函数和定时器的引用 */\n const { current } = useRef({ func, timeOut: null } as { func: (..._args: A) => R; timeOut: null | NodeJS.Timeout })\n\n /** 更新最新的函数引用 */\n useEffect(() => {\n current.func = func\n }, [func])\n\n /** 保存最新的参数 */\n let args: A\n\n /**\n * 节流处理函数\n * @param _args - 函数参数\n * @returns Promise 包装的执行结果\n */\n function throttle(..._args: A) {\n args = _args\n return new Promise<R>((resolve, reject) => {\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 /** 设置定时器,在指定时间后允许下次执行 */\n current.timeOut = setTimeout(() => {\n current.timeOut = null\n }, wait)\n }\n })\n }\n\n /**\n * 取消节流\n * 清除定时器,重置状态\n */\n function cancel() {\n if (!current.timeOut) return\n clearTimeout(current.timeOut)\n current.timeOut = null\n }\n\n /**\n * 立即执行节流函数\n * 取消当前节流并立即执行一次\n * @returns 函数执行结果\n */\n function flush() {\n cancel()\n return current.func.apply(null, args)\n }\n\n /** 添加额外方法到节流函数 */\n throttle.flush = flush\n throttle.cancel = cancel\n\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\n/** 默认日期时间格式:年-月-日 时:分:秒 */\nexport const DateFormatType = 'YYYY-MM-DD HH:mm:ss'\n/** 默认日期格式:年-月-日 */\nexport const DateFormatType2 = 'YYYY-MM-DD'\n\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\n/** 用户信息存储键名 */\nconst USER_KEY = 'NS-USER'\n\n/**\n * 设置当前用户信息到 sessionStorage(AES 加密存储)\n * @param userInfo - 用户信息对象\n */\nexport function setCurrentUser(userInfo: any) {\n const cipherText = AES.encrypt(JSON.stringify(userInfo), '((#II))').toString()\n sessionStorage.setItem(USER_KEY, cipherText)\n}\n\n/**\n * 从 sessionStorage 获取当前用户信息(AES 解密)\n * @returns 用户信息对象或 null\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\n/**\n * 清除 sessionStorage 中的用户信息\n */\nexport function clearCurrentUser() {\n sessionStorage.removeItem(USER_KEY)\n}\n\n/** 设备ID存储键名 */\nconst DEVICEID_KEY = 'NS-DEVICE-ID'\n\n/**\n * 获取或生成设备唯一标识\n * @returns 设备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'\n/** Decimal.js 方法类型 */\ntype MethodType = 'plus' | 'minus' | 'times' | 'dividedBy'\n/** 数学运算符类型 */\ntype OperatorType = '+' | '-' | '*' | '/'\n/** 运算符到方法名的映射 */\nconst OperatorToMethodName: Record<OperatorType, MethodType> = {\n '+': 'plus',\n '-': 'minus',\n '*': 'times',\n '/': 'dividedBy'\n}\n\n/**\n * 通用数学计算函数\n * @param operator - 运算符:+、-、*、/\n * @param args - 要计算的数值数组\n * @returns 计算结果字符串\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 * 精确加法运算\n * 调用:plus(arg1,arg2)\n * 返回值:arg1加arg2的精确结果\n */\nexport const plus = (...args: Decimal.Value[]) => calculate('+', ...args)\n\n/**\n * 精确减法运算\n * 调用:minus(arg1,arg2)\n * 返回值:arg1减arg2的精确结果\n */\nexport const minus = (...args: Decimal.Value[]) => calculate('-', ...args)\n\n/**\n * 精确乘法运算\n * 调用:times(arg1,arg2)\n * 返回值:arg1乘以arg2的精确结果\n */\nexport const times = (...args: Decimal.Value[]) => calculate('*', ...args)\n\n/**\n * 精确除法运算\n * 调用:dividedBy(arg1,arg2)\n * 返回值:arg1除以arg2的精确结果\n */\nexport const dividedBy = (...args: Decimal.Value[]) => calculate('/', ...args)\n\n/**\n * 查看小数位数(不计算小数点最后末尾的0)\n * @param arg1 - 要检查的数值\n * @returns 小数位数\n */\nexport const decimalPlaces = (arg1: Decimal.Value) => {\n return new Decimal(arg1).decimalPlaces()\n}\n\n/**\n * 查看数值总位数(包括整数和小数部分)\n * @param arg1 - 要检查的数值\n * @returns 总位数\n */\nexport const precision = (arg1: Decimal.Value) => {\n return new Decimal(arg1).precision(true)\n}\n\n/**\n * 取绝对值\n * @param arg1 - 要处理的数值\n * @returns 绝对值字符串\n */\nexport const absVal = (arg1: Decimal.Value) => new Decimal(arg1).abs().toString()\n\n/**\n * 数值比较函数\n * @param arg1 - 第一个数值\n * @param arg2 - 第二个数值\n * @param type - 比较类型:>、>=、<、<=、==\n * @returns 比较结果布尔值\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/**\n * 四舍五入处理\n * @param num - 要处理的数值\n * @param decimals - 保留小数位数,默认为2\n * @param fill - 是否补0,默认为true\n * @returns 处理后的数字字符串\n */\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\n/**\n * 判断是否为整数\n * @param num - 要判断的数值\n * @returns 是否为整数\n */\nexport const isInteger = (num: Decimal.Value) => {\n return new Decimal(num).isInteger()\n}\n\n/**\n * 判断是否为负数\n * @param num - 要判断的数值\n * @returns 是否为负数\n */\nexport const isNegative = (num: Decimal.Value) => {\n return new Decimal(num).isNegative()\n}\n/**\n * 整数截取n位,小数四舍五入(已注释)\n * @param num - 要处理的数值\n * @param decimals - 截取位数\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 { ThemeConfig } from 'antd/lib'\n\n/**\n * 根据来源获取主色调\n * @returns 主色调十六进制值\n */\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\n/** 项目主色调 */\nexport const LgPrimaryColor = getPrimaryColor()\n\n/** Ant Design 主题配置 */\nexport const themeConfig: ThemeConfig = {\n token: { colorPrimary: LgPrimaryColor, colorLink: LgPrimaryColor },\n cssVar: true\n}\n","import { Modal, notification } from 'antd'\nimport { message } from 'antd/lib'\nimport { getTimestamp } from './date'\nimport { LgPrimaryColor } from './theme'\n\n/**\n * 消息提示配置接口\n */\nexport interface Message {\n /** 消息标题 */\n title?: string\n /** 消息内容 */\n content: string\n /** 显示时长(秒),为0则不自动关闭 */\n duration?: number\n /** 消息类型:成功、错误、警告、信息 */\n type?: 'success' | 'error' | 'warning' | 'info'\n /** 关闭回调 */\n onClose?: () => void\n}\n\n/**\n * 缓存消息配置接口\n * 扩展基础消息接口,增加缓存控制\n */\nexport interface CacheMessage extends Message {\n /** 是否启用缓存机制 */\n isCache?: boolean\n /** 是否为唯一消息 */\n isOnly?: boolean\n}\n/**\n * 创建缓存消息显示函数\n * 防止重复消息的显示,支持消息、通知、弹窗三种形式\n * @returns 缓存消息显示函数\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 // 根据内容长度选择显示方式\n if (content.length > 30) {\n // 长内容使用通知形式\n notification[type]({\n message: title,\n description: content,\n placement: 'top',\n duration,\n onClose: onClose2\n })\n } else {\n // 短内容使用消息形式\n message[type]({\n content,\n duration,\n onClose: onClose2\n })\n }\n } else {\n // 无时长使用弹窗形式\n Modal[type]({\n title,\n content,\n okButtonProps: { style: { background: LgPrimaryColor, outline: 'none' } },\n afterClose: onClose2\n })\n }\n }\n }\n}\n\n/**\n * 导出的缓存消息显示函数\n * 支持防重复显示、自动关闭、多种显示形式\n */\nexport const showMessage = cacheMessage()\n","/** Token 存储键名 */\nexport const TOKEN_KEY = 'NS-TOKEN'\n\n/**\n * 设置访问令牌到 localStorage\n * @param accessToken - 访问令牌\n */\nexport function setToken(accessToken: string) {\n localStorage.setItem(TOKEN_KEY, accessToken)\n}\n\n/**\n * 从 URL 查询参数中获取 Token\n * @returns Token 字符串或空字符串\n */\nexport function getUrlToken() {\n const searchParams = new URLSearchParams(location.search)\n const token = searchParams.get(TOKEN_KEY)\n return token || ''\n}\n\n/**\n * 获取当前有效的访问令牌\n * 优先从 URL 参数获取,其次从 localStorage 获取\n * @returns 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\n/**\n * 清除 localStorage 中的 Token\n */\nexport function clearToken() {\n localStorage.removeItem(TOKEN_KEY)\n}\n\n/** 登录路径存储键名 */\nconst SIGNPATH = 'SIGNPATH'\n\n/**\n * 获取登录页面路径\n * @returns 登录路径,默认为 '/sign-in'\n */\nexport function getSignPath() {\n const path = localStorage.getItem(SIGNPATH)\n return `${path || '/sign-in'}`\n}\n","import axios, { AxiosRequestConfig } from 'axios'\nimport { emit } from '../hooks'\nimport { isBlob } from './is'\nimport { showMessage } from './message'\nimport { getSignPath, getToken, TOKEN_KEY } from './session'\n\n/** HTTP 状态码常量:成功 */\nexport const OK = 200\n/** HTTP 状态码常量:服务器错误 */\nexport const ERROR = 500\n/** HTTP 状态码常量:缺少参数 */\nexport const MISSING_PARAMETER = 400\n/** HTTP 状态码常量:未授权 */\nexport const UNAUTHORIZED = 401\n/** HTTP 状态码常量:禁止访问 */\nexport const FORBIDDEN = 403\n/** HTTP 状态码常量:未找到资源 */\nexport const NOT_FOUND = 404\n/** 业务错误码常量:权限拒绝 */\nexport const PERMISSION_DENIED = 13001\n\n/**\n * 创建 Axios 请求实例\n * @param baseURL - API 基础路径,默认为 '/api'\n * @returns 请求实例对象\n */\nexport default function createRequest(baseURL: string = '/api') {\n /**\n * 跳转到登录页面\n */\n const redirectUrl = () => {\n emit('jumpLink', { url: `/uc${getSignPath()}` })\n }\n const instance = axios.create({\n baseURL,\n timeout: 60000\n })\n\n // ---------- request interceptor ----------\n instance.interceptors.request.use(\n function (config) {\n config.headers[TOKEN_KEY] = getToken()\n return config\n },\n function (error) {\n return Promise.reject(error)\n }\n )\n\n // ---------- response interceptor ----------\n instance.interceptors.response.use(\n function (response) {\n if (isBlob(response.data)) return response\n\n if (response.data?.code !== OK) {\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 default:\n if (showError) showMessage({ content: err.response?.data.message || '请求错误!', type: 'error' })\n }\n }\n\n return Promise.reject(err)\n }\n )\n\n // -------- 导出 HTTP 方法 --------\n return {\n /**\n * GET 请求方法\n * @param url - 请求地址\n * @param params - 查询参数\n * @param options - Axios 配置选项\n * @returns 响应数据\n */\n get: async (url: string, params?: any, options?: AxiosRequestConfig) => {\n const res = await instance({ method: 'get', url, params, ...options })\n return res.data\n },\n\n /**\n * POST 请求方法\n * @param url - 请求地址\n * @param data - 请求数据\n * @param options - Axios 配置选项\n * @returns 响应数据\n */\n post: async (url: string, data?: any, options?: AxiosRequestConfig) => {\n const res = await instance({ method: 'post', url, data, ...options })\n return res.data\n },\n\n /**\n * PUT 请求方法\n * @param url - 请求地址\n * @param data - 请求数据\n * @param options - Axios 配置选项\n * @returns 响应数据\n */\n put: async (url: string, data?: any, options?: AxiosRequestConfig) => {\n const res = await instance({ method: 'put', url, data, ...options })\n return res.data\n },\n\n /**\n * DELETE 请求方法\n * @param url - 请求地址\n * @param data - 请求数据\n * @param options - Axios 配置选项\n * @returns 响应数据\n */\n delete: async (url: string, data?: any, options?: AxiosRequestConfig) => {\n const res = await instance({ method: 'delete', url, data, ...options })\n return res.data\n }\n }\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 if (!url) return\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}\n/**\n * PDF预览组件属性接口\n */\nexport interface PdfPreviewProps {\n /** PDF文件URL地址 */\n fileUrl: string\n /** 当前页码,默认为1 */\n pageNo?: number\n /** 缩放比例,默认为1 */\n scale?: number\n /** 是否显示缩略图,默认为true */\n isHasThumbnails?: boolean\n /** PDF文件密码 */\n password?: string\n /** 密码设置回调 */\n onSetPassword?: (password: string) => void\n /** 页码变化回调 */\n onSetPageNo?: (pageNo: number) => void\n}\n\n/**\n * PDF预览组件\n * 基于react-pdf-viewer实现的PDF文件预览功能\n * 支持密码保护、缩略图、缩放、页面导航等功能\n * @param props - 组件属性\n */\nexport default ({ password, fileUrl, pageNo = 1, scale = 1, isHasThumbnails = true, onSetPassword, onSetPageNo }: PdfPreviewProps) => {\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={`//logosdata.cn/public/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: '//logosdata.cn/public/pdf/pdfjs-dist@3.2.146/cmaps/', // 使用可用的源\n cMapPacked: true,\n // 禁用字体子集化,确保完整字体加载\n disableFontFace: false,\n // 启用标准字体支持\n standardFontDataUrl: '//logosdata.cn/public/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\n/**\n * 文件预览组件属性接口\n */\nexport interface FilePreviewProps {\n /** 文件URL地址 */\n fileUrl: string\n /** 文件后缀名 */\n suffix?: string\n /** PDF文件密码 */\n password?: string\n /** 搜索关键字 */\n searchValue?: string\n /** PDF预览参数 */\n pdfParams?: {\n /** 当前页码 */\n pageNo?: number\n /** 缩放比例 */\n scale?: number\n /** 是否显示缩略图 */\n isHasThumbnails?: boolean\n /** 页码变化回调 */\n onSetPageNo?: (pageNo: number) => void\n }\n /** 文件参数 */\n fileParams?: ObjectType<string>\n /** 密码设置成功回调 */\n onSetPassSuccess?: () => void\n}\n\n/**\n * 文件预览组件\n * 支持图片、PDF、视频、音频、Markdown等文件格式的预览\n * @param props - 组件属性\n */\nexport default ({ suffix, fileUrl, pdfParams, password, searchValue }: FilePreviewProps) => {\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'\n\n/**\n * 文件预览抽屉组件属性接口\n */\nexport interface FilePreviewDrawerProps {\n /** 是否打开抽屉 */\n open: boolean\n /** 关闭抽屉的回调函数 */\n onClose: () => void\n /** 抽屉标题,默认为'文件预览' */\n title?: string\n /** 文件URL地址 */\n fileUrl: string\n /** 文件后缀名 */\n suffix?: string\n /** PDF文件密码 */\n password?: string\n /** 文件参数 */\n fileParams?: ObjectType<string>\n /** PDF预览参数 */\n pdfParams?: {\n /** 当前页码 */\n pageNo?: number\n /** 缩放比例 */\n scale?: number\n /** 是否显示缩略图 */\n isHasThumbnails?: boolean\n /** 页码变化回调 */\n onSetPageNo?: (pageNo: number) => void\n }\n /** 密码设置成功回调 */\n onSetPassSuccess?: () => void\n}\n\n/**\n * 文件预览抽屉组件\n * 在抽屉中显示文件预览,支持各种文件格式\n * 全屏显示,提供更好的文件查看体验\n *\n * @example\n * <FilePreviewDrawer\n * open={isOpen}\n * fileUrl=\"https://example.com/file.pdf\"\n * suffix=\"pdf\"\n * title=\"PDF文件预览\"\n * onClose={() => setIsOpen(false)}\n * />\n *\n * @param props - 组件属性\n * @returns 文件预览抽屉组件\n */\nexport default ({\n open,\n fileUrl,\n suffix,\n title = '文件预览',\n onClose,\n password,\n fileParams,\n pdfParams,\n onSetPassSuccess\n}: FilePreviewDrawerProps) => {\n return (\n <Drawer\n title={title}\n push={false}\n width=\"100%\"\n open={open}\n onClose={onClose}\n // 全屏宽度,提供更好的文件预览体验\n >\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\n/**\n * Iframe组件属性接口\n */\nexport interface IframeProps {\n /** iframe ID */\n id?: string\n /** iframe源地址 */\n src: string\n /** 自定义类名 */\n className?: string\n /** 加载完成回调 */\n onLoad?: () => void\n}\n\n/**\n * Iframe组件\n * 支持加载状态、URL参数处理、防缓存等功能\n * @param props - 组件属性\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 TiptapLink from '@tiptap/extension-link'\nimport { Plugin, TextSelection } from '@tiptap/pm/state'\nimport type { EditorView } from '@tiptap/pm/view'\nimport { getMarkRange } from '@tiptap/react'\n\nexport const Link = TiptapLink.extend({\n inclusive: false,\n\n parseHTML() {\n return [\n {\n tag: 'a[href]:not([data-type=\"button\"]):not([href *= \"javascript:\" i])'\n }\n ]\n },\n\n addProseMirrorPlugins() {\n const { editor } = this\n\n return [\n ...(this.parent?.() || []),\n new Plugin({\n props: {\n handleKeyDown: (_: EditorView, event: KeyboardEvent) => {\n const { selection } = editor.state\n\n if (event.key === 'Escape' && selection.empty !== true) {\n editor.commands.focus(selection.to, { scrollIntoView: false })\n }\n\n return false\n },\n handleClick(view, pos) {\n const { schema, doc, tr } = view.state\n let range: ReturnType<typeof getMarkRange> | undefined\n\n if (schema.marks.link) {\n range = getMarkRange(doc.resolve(pos), schema.marks.link)\n }\n\n if (!range) {\n return\n }\n\n const { from, to } = range\n const start = Math.min(from, to)\n const end = Math.max(from, to)\n\n if (pos < start || pos > end) {\n return\n }\n\n const $start = doc.resolve(start)\n const $end = doc.resolve(end)\n const transaction = tr.setSelection(new TextSelection($start, $end))\n\n view.dispatch(transaction)\n }\n }\n })\n ]\n }\n})\n\nexport default Link\n","import { Plugin, PluginKey } from '@tiptap/pm/state'\nimport { Decoration, DecorationSet } from '@tiptap/pm/view'\nimport { Extension, isNodeSelection } from '@tiptap/react'\n\nexport const Selection = Extension.create({\n name: 'selection',\n\n addProseMirrorPlugins() {\n const { editor } = this\n\n return [\n new Plugin({\n key: new PluginKey('selection'),\n props: {\n decorations(state) {\n if (state.selection.empty) {\n return null\n }\n\n if (editor.isFocused === true || !editor.isEditable) {\n return null\n }\n\n if (isNodeSelection(state.selection)) {\n return null\n }\n\n return DecorationSet.create(state.doc, [\n Decoration.inline(state.selection.from, state.selection.to, {\n class: 'selection'\n })\n ])\n }\n }\n })\n ]\n }\n})\n\nexport default Selection\n","import type { Node, NodeType } from '@tiptap/pm/model'\nimport { Plugin, PluginKey } from '@tiptap/pm/state'\nimport { Extension } from '@tiptap/react'\n\nfunction nodeEqualsType({ types, node }: { types: NodeType | NodeType[]; node: Node | null }) {\n if (!node) return false\n\n if (Array.isArray(types)) {\n return types.includes(node.type)\n }\n\n return node.type === types\n}\n\nexport interface TrailingNodeOptions {\n node: string\n notAfter: string[]\n}\n\nexport const TrailingNode = Extension.create<TrailingNodeOptions>({\n name: 'trailingNode',\n\n addOptions() {\n return {\n node: 'paragraph',\n notAfter: ['paragraph']\n }\n },\n\n addProseMirrorPlugins() {\n const plugin = new PluginKey(this.name)\n const disabledNodes = Object.entries(this.editor.schema.nodes)\n .map(([, value]) => value)\n .filter((node) => this.options.notAfter.includes(node.name))\n\n return [\n new Plugin({\n key: plugin,\n appendTransaction: (_, __, state) => {\n const { doc, tr, schema } = state\n const shouldInsertNodeAtEnd = plugin.getState(state)\n const endPosition = doc.content.size\n const type = schema.nodes[this.options.node]\n\n if (!shouldInsertNodeAtEnd) {\n return null\n }\n\n if (type) {\n return tr.insert(endPosition, type.create())\n }\n\n return null\n },\n state: {\n init: (_, state) => {\n const lastNode = state.tr.doc.lastChild\n\n return !nodeEqualsType({ node: lastNode, types: disabledNodes })\n },\n apply: (tr, value) => {\n if (!tr.docChanged) {\n return value\n }\n\n const lastNode = tr.doc.lastChild\n\n return !nodeEqualsType({ node: lastNode, types: disabledNodes })\n }\n }\n })\n ]\n }\n})\n\nexport default TrailingNode\n","import './tooltip.less'\nimport {\n autoUpdate,\n flip,\n FloatingDelayGroup,\n FloatingPortal,\n offset,\n shift,\n useDismiss,\n useFloating,\n useFocus,\n useHover,\n useInteractions,\n useMergeRefs,\n useRole,\n type Placement,\n type ReferenceType,\n type UseFloatingReturn\n} from '@floating-ui/react'\nimport * as React from 'react'\n\ninterface TooltipProviderProps {\n children: React.ReactNode\n initialOpen?: boolean\n placement?: Placement\n open?: boolean\n onOpenChange?: (open: boolean) => void\n delay?: number\n closeDelay?: number\n timeout?: number\n useDelayGroup?: boolean\n}\n\ninterface TooltipTriggerProps extends Omit<React.HTMLProps<HTMLElement>, 'ref'> {\n asChild?: boolean\n children: React.ReactNode\n}\n\ninterface TooltipContentProps extends Omit<React.HTMLProps<HTMLDivElement>, 'ref'> {\n children?: React.ReactNode\n portal?: boolean\n portalProps?: Omit<React.ComponentProps<typeof FloatingPortal>, 'children'>\n}\n\ninterface TooltipContextValue extends UseFloatingReturn<ReferenceType> {\n open: boolean\n setOpen: (open: boolean) => void\n getReferenceProps: (userProps?: React.HTMLProps<HTMLElement>) => Record<string, unknown>\n getFloatingProps: (userProps?: React.HTMLProps<HTMLDivElement>) => Record<string, unknown>\n}\n\nfunction useTooltip({\n initialOpen = false,\n placement = 'top',\n open: controlledOpen,\n onOpenChange: setControlledOpen,\n delay = 600,\n closeDelay = 0\n}: Omit<TooltipProviderProps, 'children'> = {}) {\n const [uncontrolledOpen, setUncontrolledOpen] = React.useState<boolean>(initialOpen)\n\n const open = controlledOpen ?? uncontrolledOpen\n const setOpen = setControlledOpen ?? setUncontrolledOpen\n\n const data = useFloating({\n placement,\n open,\n onOpenChange: setOpen,\n whileElementsMounted: autoUpdate,\n middleware: [\n offset(4),\n flip({\n crossAxis: placement.includes('-'),\n fallbackAxisSideDirection: 'start',\n padding: 4\n }),\n shift({ padding: 4 })\n ]\n })\n\n const context = data.context\n\n const hover = useHover(context, {\n mouseOnly: true,\n move: false,\n restMs: delay,\n enabled: controlledOpen == null,\n delay: {\n close: closeDelay\n }\n })\n const focus = useFocus(context, {\n enabled: controlledOpen == null\n })\n const dismiss = useDismiss(context)\n const role = useRole(context, { role: 'tooltip' })\n\n const interactions = useInteractions([hover, focus, dismiss, role])\n\n return React.useMemo(\n () => ({\n open,\n setOpen,\n ...interactions,\n ...data\n }),\n [open, setOpen, interactions, data]\n )\n}\n\nconst TooltipContext = React.createContext<TooltipContextValue | null>(null)\n\nfunction useTooltipContext() {\n const context = React.useContext(TooltipContext)\n\n if (context == null) {\n throw new Error('Tooltip components must be wrapped in <TooltipProvider />')\n }\n\n return context\n}\n\nexport function Tooltip({ children, ...props }: TooltipProviderProps) {\n const tooltip = useTooltip(props)\n\n if (!props.useDelayGroup) {\n return <TooltipContext.Provider value={tooltip}>{children}</TooltipContext.Provider>\n }\n\n return (\n <FloatingDelayGroup delay={{ open: props.delay ?? 0, close: props.closeDelay ?? 0 }} timeoutMs={props.timeout}>\n <TooltipContext.Provider value={tooltip}>{children}</TooltipContext.Provider>\n </FloatingDelayGroup>\n )\n}\n\nexport const TooltipTrigger = React.forwardRef<HTMLElement, TooltipTriggerProps>(function TooltipTrigger(\n { children, asChild = false, ...props },\n propRef\n) {\n const context = useTooltipContext()\n const childrenRef = React.isValidElement(children)\n ? parseInt(React.version, 10) >= 19\n ? // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (children as { props: { ref?: React.Ref<any> } }).props.ref\n : // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (children as any).ref\n : undefined\n const ref = useMergeRefs([context.refs.setReference, propRef, childrenRef])\n\n if (asChild && React.isValidElement(children)) {\n const dataAttributes = {\n 'data-tooltip-state': context.open ? 'open' : 'closed'\n }\n\n return React.cloneElement(\n children,\n context.getReferenceProps({\n ref,\n ...props,\n ...(typeof children.props === 'object' ? children.props : {}),\n ...dataAttributes\n })\n )\n }\n\n return (\n <button ref={ref} data-tooltip-state={context.open ? 'open' : 'closed'} {...context.getReferenceProps(props)}>\n {children}\n </button>\n )\n})\n\nexport const TooltipContent = React.forwardRef<HTMLDivElement, TooltipContentProps>(function TooltipContent(\n { style, children, portal = true, portalProps = {}, ...props },\n propRef\n) {\n const context = useTooltipContext()\n const ref = useMergeRefs([context.refs.setFloating, propRef])\n\n if (!context.open) return null\n\n const content = (\n <div\n ref={ref}\n style={{\n ...context.floatingStyles,\n ...style\n }}\n {...context.getFloatingProps(props)}\n className=\"tiptap-tooltip\"\n >\n {children}\n </div>\n )\n\n if (portal) {\n return <FloatingPortal {...portalProps}>{content}</FloatingPortal>\n }\n\n return content\n})\n\nTooltip.displayName = 'Tooltip'\nTooltipTrigger.displayName = 'TooltipTrigger'\nTooltipContent.displayName = 'TooltipContent'\n","import { Tooltip, TooltipContent, TooltipTrigger } from '../tooltip'\nimport * as React from 'react'\n\nimport './button-colors.less'\nimport './button-group.less'\nimport './button.less'\n\ntype PlatformShortcuts = Record<string, string>\n\nexport interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n className?: string\n showTooltip?: boolean\n tooltip?: React.ReactNode\n shortcutKeys?: string\n}\n\nexport const MAC_SYMBOLS: PlatformShortcuts = {\n ctrl: '⌘',\n alt: '⌥',\n shift: '⇧'\n} as const\n\nexport const formatShortcutKey = (key: string, isMac: boolean) => {\n if (isMac) {\n const lowerKey = key.toLowerCase()\n return MAC_SYMBOLS[lowerKey] || key.toUpperCase()\n }\n return key.charAt(0).toUpperCase() + key.slice(1)\n}\n\nexport const parseShortcutKeys = (shortcutKeys: string | undefined, isMac: boolean) => {\n if (!shortcutKeys) return []\n\n return shortcutKeys\n .split('-')\n .map((key) => key.trim())\n .map((key) => formatShortcutKey(key, isMac))\n}\n\nexport const ShortcutDisplay: React.FC<{ shortcuts: string[] }> = ({ shortcuts }) => {\n if (shortcuts.length === 0) return null\n\n return (\n <div>\n {shortcuts.map((key, index) => (\n <React.Fragment key={index}>\n {index > 0 && <kbd>+</kbd>}\n <kbd>{key}</kbd>\n </React.Fragment>\n ))}\n </div>\n )\n}\n\nexport const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({ className = '', children, tooltip, showTooltip = true, shortcutKeys, 'aria-label': ariaLabel, ...props }, ref) => {\n const isMac = React.useMemo(() => typeof navigator !== 'undefined' && navigator.platform.toLowerCase().includes('mac'), [])\n\n const shortcuts = React.useMemo(() => parseShortcutKeys(shortcutKeys, isMac), [shortcutKeys, isMac])\n\n if (!tooltip || !showTooltip) {\n return (\n <button className={`tiptap-button ${className}`.trim()} ref={ref} aria-label={ariaLabel} {...props}>\n {children}\n </button>\n )\n }\n\n return (\n <Tooltip delay={200}>\n <TooltipTrigger className={`tiptap-button ${className}`.trim()} ref={ref} aria-label={ariaLabel} {...props}>\n {children}\n </TooltipTrigger>\n <TooltipContent>\n {tooltip}\n <ShortcutDisplay shortcuts={shortcuts} />\n </TooltipContent>\n </Tooltip>\n )\n }\n)\n\nButton.displayName = 'Button'\n\nexport default Button\n","import * as React from 'react'\n\ntype SpacerOrientation = 'horizontal' | 'vertical'\n\ninterface SpacerProps extends React.HTMLAttributes<HTMLDivElement> {\n orientation?: SpacerOrientation\n size?: string | number\n}\n\nexport const Spacer = React.forwardRef<HTMLDivElement, SpacerProps>(\n ({ orientation = 'horizontal', size, className = '', style = {}, ...props }, ref) => {\n const computedStyle = {\n ...style,\n ...(orientation === 'horizontal' && !size && { flex: 1 }),\n ...(size && {\n width: orientation === 'vertical' ? '1px' : size,\n height: orientation === 'horizontal' ? '1px' : size\n })\n }\n\n return <div ref={ref} {...props} className={className} style={computedStyle} />\n }\n)\n\nSpacer.displayName = 'Spacer'\n","import './separator.less'\nimport * as React from 'react'\n\ntype Orientation = 'horizontal' | 'vertical'\n\nexport interface SeparatorProps extends React.HTMLAttributes<HTMLDivElement> {\n orientation?: Orientation\n decorative?: boolean\n}\n\nexport const Separator = React.forwardRef<HTMLDivElement, SeparatorProps>(\n ({ decorative, orientation = 'vertical', className = '', ...divProps }, ref) => {\n const ariaOrientation = orientation === 'vertical' ? orientation : undefined\n const semanticProps = decorative ? { role: 'none' } : { 'aria-orientation': ariaOrientation, role: 'separator' }\n\n return <div className={`tiptap-separator ${className}`.trim()} data-orientation={orientation} {...semanticProps} {...divProps} ref={ref} />\n }\n)\n\nSeparator.displayName = 'Separator'\n","import { Separator } from '../../tiptap-ui-primitive/separator'\nimport './toolbar.less'\nimport * as React from 'react'\n\ntype BaseProps = React.HTMLAttributes<HTMLDivElement>\n\ninterface ToolbarProps extends BaseProps {\n variant?: 'floating' | 'fixed'\n}\n\nconst mergeRefs = <T,>(refs: Array<React.RefObject<T> | React.Ref<T> | null | undefined>): React.RefCallback<T> => {\n return (value) => {\n refs.forEach((ref) => {\n if (typeof ref === 'function') {\n ref(value)\n } else if (ref != null) {\n ;(ref as React.MutableRefObject<T | null>).current = value\n }\n })\n }\n}\n\nconst useObserveVisibility = (ref: React.RefObject<HTMLElement | null>, callback: () => void): void => {\n React.useEffect(() => {\n const element = ref.current\n if (!element) return\n\n let isMounted = true\n\n if (isMounted) {\n requestAnimationFrame(callback)\n }\n\n const observer = new MutationObserver(() => {\n if (isMounted) {\n requestAnimationFrame(callback)\n }\n })\n\n observer.observe(element, {\n childList: true,\n subtree: true,\n attributes: true\n })\n\n return () => {\n isMounted = false\n observer.disconnect()\n }\n }, [ref, callback])\n}\n\nconst useToolbarKeyboardNav = (toolbarRef: React.RefObject<HTMLDivElement | null>): void => {\n React.useEffect(() => {\n const toolbar = toolbarRef.current\n if (!toolbar) return\n\n const getFocusableElements = () =>\n Array.from(toolbar.querySelectorAll<HTMLElement>('button:not([disabled]), [role=\"button\"]:not([disabled]), [tabindex=\"0\"]:not([disabled])'))\n\n const navigateToIndex = (e: KeyboardEvent, targetIndex: number, elements: HTMLElement[]) => {\n e.preventDefault()\n let nextIndex = targetIndex\n\n if (nextIndex >= elements.length) {\n nextIndex = 0\n } else if (nextIndex < 0) {\n nextIndex = elements.length - 1\n }\n\n elements[nextIndex]?.focus()\n }\n\n const handleKeyDown = (e: KeyboardEvent) => {\n const focusableElements = getFocusableElements()\n if (!focusableElements.length) return\n\n const currentElement = document.activeElement as HTMLElement\n const currentIndex = focusableElements.indexOf(currentElement)\n\n if (!toolbar.contains(currentElement)) return\n\n const keyActions: Record<string, () => void> = {\n ArrowRight: () => navigateToIndex(e, currentIndex + 1, focusableElements),\n ArrowDown: () => navigateToIndex(e, currentIndex + 1, focusableElements),\n ArrowLeft: () => navigateToIndex(e, currentIndex - 1, focusableElements),\n ArrowUp: () => navigateToIndex(e, currentIndex - 1, focusableElements),\n Home: () => navigateToIndex(e, 0, focusableElements),\n End: () => navigateToIndex(e, focusableElements.length - 1, focusableElements)\n }\n\n const action = keyActions[e.key]\n if (action) {\n action()\n }\n }\n\n toolbar.addEventListener('keydown', handleKeyDown)\n return () => toolbar.removeEventListener('keydown', handleKeyDown)\n }, [toolbarRef])\n}\n\nconst useToolbarVisibility = (ref: React.RefObject<HTMLDivElement | null>): boolean => {\n const [isVisible, setIsVisible] = React.useState(true)\n const isMountedRef = React.useRef(false)\n\n React.useEffect(() => {\n isMountedRef.current = true\n return () => {\n isMountedRef.current = false\n }\n }, [])\n\n const checkVisibility = React.useCallback(() => {\n if (!isMountedRef.current) return\n\n const toolbar = ref.current\n if (!toolbar) return\n\n // Check if any group has visible children\n const hasVisibleChildren = Array.from(toolbar.children).some((child) => {\n if (!(child instanceof HTMLElement)) return false\n if (child.getAttribute('role') === 'group') {\n return child.children.length > 0\n }\n return false\n })\n\n setIsVisible(hasVisibleChildren)\n }, [ref])\n\n useObserveVisibility(ref, checkVisibility)\n return isVisible\n}\n\nconst useGroupVisibility = (ref: React.RefObject<HTMLDivElement | null>): boolean => {\n const [isVisible, setIsVisible] = React.useState(true)\n const isMountedRef = React.useRef(false)\n\n React.useEffect(() => {\n isMountedRef.current = true\n return () => {\n isMountedRef.current = false\n }\n }, [])\n\n const checkVisibility = React.useCallback(() => {\n if (!isMountedRef.current) return\n\n const group = ref.current\n if (!group) return\n\n const hasVisibleChildren = Array.from(group.children).some((child) => {\n if (!(child instanceof HTMLElement)) return false\n return true\n })\n\n setIsVisible(hasVisibleChildren)\n }, [ref])\n\n useObserveVisibility(ref, checkVisibility)\n return isVisible\n}\n\nconst useSeparatorVisibility = (ref: React.RefObject<HTMLDivElement | null>): boolean => {\n const [isVisible, setIsVisible] = React.useState(true)\n const isMountedRef = React.useRef(false)\n\n React.useEffect(() => {\n isMountedRef.current = true\n return () => {\n isMountedRef.current = false\n }\n }, [])\n\n const checkVisibility = React.useCallback(() => {\n if (!isMountedRef.current) return\n\n const separator = ref.current\n if (!separator) return\n\n const prevSibling = separator.previousElementSibling as HTMLElement\n const nextSibling = separator.nextElementSibling as HTMLElement\n\n if (!prevSibling || !nextSibling) {\n setIsVisible(false)\n return\n }\n\n const areBothGroups = prevSibling.getAttribute('role') === 'group' && nextSibling.getAttribute('role') === 'group'\n\n const haveBothChildren = prevSibling.children.length > 0 && nextSibling.children.length > 0\n\n setIsVisible(areBothGroups && haveBothChildren)\n }, [ref])\n\n useObserveVisibility(ref, checkVisibility)\n return isVisible\n}\n\nexport const Toolbar = React.forwardRef<HTMLDivElement, ToolbarProps>(({ children, className, variant = 'fixed', ...props }, ref) => {\n const toolbarRef = React.useRef<HTMLDivElement>(null)\n const isVisible = useToolbarVisibility(toolbarRef)\n\n useToolbarKeyboardNav(toolbarRef)\n\n if (!isVisible) return null\n\n return (\n <div\n ref={mergeRefs([toolbarRef, ref])}\n role=\"toolbar\"\n aria-label=\"toolbar\"\n data-variant={variant}\n className={`tiptap-toolbar ${className || ''}`}\n {...props}\n >\n {children}\n </div>\n )\n})\n\nToolbar.displayName = 'Toolbar'\n\nexport const ToolbarGroup = React.forwardRef<HTMLDivElement, BaseProps>(({ children, className, ...props }, ref) => {\n const groupRef = React.useRef<HTMLDivElement>(null)\n const isVisible = useGroupVisibility(groupRef)\n\n if (!isVisible) return null\n\n return (\n <div ref={mergeRefs([groupRef, ref])} role=\"group\" className={`tiptap-toolbar-group ${className || ''}`} {...props}>\n {children}\n </div>\n )\n})\n\nToolbarGroup.displayName = 'ToolbarGroup'\n\nexport const ToolbarSeparator = React.forwardRef<HTMLDivElement, BaseProps>(({ ...props }, ref) => {\n const separatorRef = React.useRef<HTMLDivElement>(null)\n const isVisible = useSeparatorVisibility(separatorRef)\n\n if (!isVisible) return null\n\n return <Separator ref={mergeRefs([separatorRef, ref])} orientation=\"vertical\" decorative {...props} />\n})\n\nToolbarSeparator.displayName = 'ToolbarSeparator'\n","import type { Editor } from '@tiptap/react'\nimport { useCurrentEditor } from '@tiptap/react'\nimport * as React from 'react'\n\nexport function useTiptapEditor(providedEditor?: Editor | null): Editor | null {\n const { editor: coreEditor } = useCurrentEditor()\n return React.useMemo(() => providedEditor || coreEditor, [providedEditor, coreEditor])\n}\n","import * as React from 'react'\n\nexport const ChevronDownIcon = React.memo(({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n return (\n <svg width=\"24\" height=\"24\" className={className} viewBox=\"0 0 24 24\" fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M5.29289 8.29289C5.68342 7.90237 6.31658 7.90237 6.70711 8.29289L12 13.5858L17.2929 8.29289C17.6834 7.90237 18.3166 7.90237 18.7071 8.29289C19.0976 8.68342 19.0976 9.31658 18.7071 9.70711L12.7071 15.7071C12.3166 16.0976 11.6834 16.0976 11.2929 15.7071L5.29289 9.70711C4.90237 9.31658 4.90237 8.68342 5.29289 8.29289Z\"\n fill=\"currentColor\"\n />\n </svg>\n )\n})\n\nChevronDownIcon.displayName = 'ChevronDownIcon'\n","import * as React from 'react'\n\nexport const HeadingIcon = React.memo(({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n return (\n <svg width=\"24\" height=\"24\" className={className} viewBox=\"0 0 24 24\" fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n d=\"M6 3C6.55228 3 7 3.44772 7 4V11H17V4C17 3.44772 17.4477 3 18 3C18.5523 3 19 3.44772 19 4V20C19 20.5523 18.5523 21 18 21C17.4477 21 17 20.5523 17 20V13H7V20C7 20.5523 6.55228 21 6 21C5.44772 21 5 20.5523 5 20V4C5 3.44772 5.44772 3 6 3Z\"\n fill=\"currentColor\"\n />\n </svg>\n )\n})\n\nHeadingIcon.displayName = 'HeadingIcon'\n","import type { Attrs, Node } from '@tiptap/pm/model'\nimport type { Editor } from '@tiptap/react'\n\nexport const MAX_FILE_SIZE = 5 * 1024 * 1024 // 5MB\n\n/**\n * Checks if a mark exists in the editor schema\n * @param markName - The name of the mark to check\n * @param editor - The editor instance\n * @returns boolean indicating if the mark exists in the schema\n */\nexport const isMarkInSchema = (markName: string, editor: Editor | null): boolean => {\n if (!editor?.schema) return false\n return editor.schema.spec.marks.get(markName) !== undefined\n}\n\n/**\n * Checks if a node exists in the editor schema\n * @param nodeName - The name of the node to check\n * @param editor - The editor instance\n * @returns boolean indicating if the node exists in the schema\n */\nexport const isNodeInSchema = (nodeName: string, editor: Editor | null): boolean => {\n if (!editor?.schema) return false\n return editor.schema.spec.nodes.get(nodeName) !== undefined\n}\n\n/**\n * Gets the active attributes of a specific mark in the current editor selection.\n *\n * @param editor - The Tiptap editor instance.\n * @param markName - The name of the mark to look for (e.g., \"highlight\", \"link\").\n * @returns The attributes of the active mark, or `null` if the mark is not active.\n */\nexport function getActiveMarkAttrs(editor: Editor | null, markName: string): Attrs | null {\n if (!editor) return null\n const { state } = editor\n const marks = state.storedMarks || state.selection.$from.marks()\n const mark = marks.find((mark) => mark.type.name === markName)\n\n return mark?.attrs ?? null\n}\n\n/**\n * Checks if a node is empty\n */\nexport function isEmptyNode(node?: Node | null): boolean {\n return !!node && node.content.size === 0\n}\n\n/**\n * Utility function to conditionally join class names into a single string.\n * Filters out falsey values like false, undefined, null, and empty strings.\n *\n * @param classes - List of class name strings or falsey values.\n * @returns A single space-separated string of valid class names.\n */\nexport function cn(...classes: (string | boolean | undefined | null)[]): string {\n return classes.filter(Boolean).join(' ')\n}\n\n/**\n * Finds the position and instance of a node in the document\n * @param props Object containing editor, node (optional), and nodePos (optional)\n * @param props.editor The TipTap editor instance\n * @param props.node The node to find (optional if nodePos is provided)\n * @param props.nodePos The position of the node to find (optional if node is provided)\n * @returns An object with the position and node, or null if not found\n */\nexport function findNodePosition(props: { editor: Editor | null; node?: Node | null; nodePos?: number | null }): { pos: number; node: Node } | null {\n const { editor, node, nodePos } = props\n\n if (!editor || !editor.state?.doc) return null\n\n // Zero is valid position\n const hasValidNode = node !== undefined && node !== null\n const hasValidPos = nodePos !== undefined && nodePos !== null\n\n if (!hasValidNode && !hasValidPos) {\n return null\n }\n\n if (hasValidPos) {\n try {\n const nodeAtPos = editor.state.doc.nodeAt(nodePos!)\n if (nodeAtPos) {\n return { pos: nodePos!, node: nodeAtPos }\n }\n } catch (error) {\n console.error('Error checking node at position:', error)\n return null\n }\n }\n\n // Otherwise search for the node in the document\n let foundPos = -1\n let foundNode: Node | null = null\n\n editor.state.doc.descendants((currentNode, pos) => {\n // TODO: Needed?\n // if (currentNode.type && currentNode.type.name === node!.type.name) {\n if (currentNode === node) {\n foundPos = pos\n foundNode = currentNode\n return false\n }\n return true\n })\n\n return foundPos !== -1 && foundNode !== null ? { pos: foundPos, node: foundNode } : null\n}\n\n/**\n * Handles image upload with progress tracking and abort capability\n * @param file The file to upload\n * @param onProgress Optional callback for tracking upload progress\n * @param abortSignal Optional AbortSignal for cancelling the upload\n * @returns Promise resolving to the URL of the uploaded image\n */\nexport const handleImageUpload = async (\n file: File,\n onProgress?: (event: { progress: number }) => void,\n abortSignal?: AbortSignal\n): Promise<string> => {\n // Validate file\n if (!file) {\n throw new Error('No file provided')\n }\n\n if (file.size > MAX_FILE_SIZE) {\n throw new Error(`File size exceeds maximum allowed (${MAX_FILE_SIZE / (1024 * 1024)}MB)`)\n }\n\n // For demo/testing: Simulate upload progress\n for (let progress = 0; progress <= 100; progress += 10) {\n if (abortSignal?.aborted) {\n throw new Error('Upload cancelled')\n }\n await new Promise((resolve) => {\n setTimeout(resolve, 500)\n })\n onProgress?.({ progress })\n }\n\n return '/images/placeholder-image.png'\n\n // Uncomment for production use:\n // return convertFileToBase64(file, abortSignal);\n}\n\n/**\n * Converts a File to base64 string\n * @param file The file to convert\n * @param abortSignal Optional AbortSignal for cancelling the conversion\n * @returns Promise resolving to the base64 representation of the file\n */\nexport const convertFileToBase64 = (file: File, abortSignal?: AbortSignal): Promise<string> => {\n if (!file) {\n return Promise.reject(new Error('No file provided'))\n }\n\n return new Promise((resolve, reject) => {\n const reader = new FileReader()\n\n const abortHandler = () => {\n reader.abort()\n reject(new Error('Upload cancelled'))\n }\n\n if (abortSignal) {\n abortSignal.addEventListener('abort', abortHandler)\n }\n\n reader.onloadend = () => {\n if (abortSignal) {\n abortSignal.removeEventListener('abort', abortHandler)\n }\n\n if (typeof reader.result === 'string') {\n resolve(reader.result)\n } else {\n reject(new Error('Failed to convert File to base64'))\n }\n }\n\n reader.onerror = (error) => reject(new Error(`File reading error: ${error}`))\n reader.readAsDataURL(file)\n })\n}\n","import * as React from 'react'\n\nexport const HeadingFiveIcon = React.memo(({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n return (\n <svg width=\"24\" height=\"24\" className={className} viewBox=\"0 0 24 24\" fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n d=\"M5 6C5 5.44772 4.55228 5 4 5C3.44772 5 3 5.44772 3 6V18C3 18.5523 3.44772 19 4 19C4.55228 19 5 18.5523 5 18V13H11V18C11 18.5523 11.4477 19 12 19C12.5523 19 13 18.5523 13 18V6C13 5.44772 12.5523 5 12 5C11.4477 5 11 5.44772 11 6V11H5V6Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M16 10C16 9.44772 16.4477 9 17 9H21C21.5523 9 22 9.44772 22 10C22 10.5523 21.5523 11 21 11H18V12H18.3C20.2754 12 22 13.4739 22 15.5C22 17.5261 20.2754 19 18.3 19C17.6457 19 17.0925 18.8643 16.5528 18.5944C16.0588 18.3474 15.8586 17.7468 16.1055 17.2528C16.3525 16.7588 16.9532 16.5586 17.4472 16.8056C17.7074 16.9357 17.9542 17 18.3 17C19.3246 17 20 16.2739 20 15.5C20 14.7261 19.3246 14 18.3 14H17C16.4477 14 16 13.5523 16 13L16 12.9928V10Z\"\n fill=\"currentColor\"\n />\n </svg>\n )\n})\n\nHeadingFiveIcon.displayName = 'HeadingFiveIcon'\n","import * as React from 'react'\n\nexport const HeadingFourIcon = React.memo(({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n return (\n <svg width=\"24\" height=\"24\" className={className} viewBox=\"0 0 24 24\" fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n d=\"M4 5C4.55228 5 5 5.44772 5 6V11H11V6C11 5.44772 11.4477 5 12 5C12.5523 5 13 5.44772 13 6V18C13 18.5523 12.5523 19 12 19C11.4477 19 11 18.5523 11 18V13H5V18C5 18.5523 4.55228 19 4 19C3.44772 19 3 18.5523 3 18V6C3 5.44772 3.44772 5 4 5Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M17 9C17.5523 9 18 9.44772 18 10V13H20V10C20 9.44772 20.4477 9 21 9C21.5523 9 22 9.44772 22 10V18C22 18.5523 21.5523 19 21 19C20.4477 19 20 18.5523 20 18V15H17C16.4477 15 16 14.5523 16 14V10C16 9.44772 16.4477 9 17 9Z\"\n fill=\"currentColor\"\n />\n </svg>\n )\n})\n\nHeadingFourIcon.displayName = 'HeadingFourIcon'\n","import * as React from 'react'\n\nexport const HeadingOneIcon = React.memo(({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n return (\n <svg width=\"24\" height=\"24\" className={className} viewBox=\"0 0 24 24\" fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n d=\"M5 6C5 5.44772 4.55228 5 4 5C3.44772 5 3 5.44772 3 6V18C3 18.5523 3.44772 19 4 19C4.55228 19 5 18.5523 5 18V13H11V18C11 18.5523 11.4477 19 12 19C12.5523 19 13 18.5523 13 18V6C13 5.44772 12.5523 5 12 5C11.4477 5 11 5.44772 11 6V11H5V6Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M21.0001 10C21.0001 9.63121 20.7971 9.29235 20.472 9.11833C20.1468 8.94431 19.7523 8.96338 19.4454 9.16795L16.4454 11.168C15.9859 11.4743 15.8617 12.0952 16.1681 12.5547C16.4744 13.0142 17.0953 13.1384 17.5548 12.8321L19.0001 11.8685V18C19.0001 18.5523 19.4478 19 20.0001 19C20.5524 19 21.0001 18.5523 21.0001 18V10Z\"\n fill=\"currentColor\"\n />\n </svg>\n )\n})\n\nHeadingOneIcon.displayName = 'HeadingOneIcon'\n","import * as React from 'react'\n\nexport const HeadingSixIcon = React.memo(({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n return (\n <svg width=\"24\" height=\"24\" className={className} viewBox=\"0 0 24 24\" fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n d=\"M5 6C5 5.44772 4.55228 5 4 5C3.44772 5 3 5.44772 3 6V18C3 18.5523 3.44772 19 4 19C4.55228 19 5 18.5523 5 18V13H11V18C11 18.5523 11.4477 19 12 19C12.5523 19 13 18.5523 13 18V6C13 5.44772 12.5523 5 12 5C11.4477 5 11 5.44772 11 6V11H5V6Z\"\n fill=\"currentColor\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M20.7071 9.29289C21.0976 9.68342 21.0976 10.3166 20.7071 10.7071C19.8392 11.575 19.2179 12.2949 18.7889 13.0073C18.8587 13.0025 18.929 13 19 13C20.6569 13 22 14.3431 22 16C22 17.6569 20.6569 19 19 19C17.3431 19 16 17.6569 16 16C16 14.6007 16.2837 13.4368 16.8676 12.3419C17.4384 11.2717 18.2728 10.3129 19.2929 9.29289C19.6834 8.90237 20.3166 8.90237 20.7071 9.29289ZM19 17C18.4477 17 18 16.5523 18 16C18 15.4477 18.4477 15 19 15C19.5523 15 20 15.4477 20 16C20 16.5523 19.5523 17 19 17Z\"\n fill=\"currentColor\"\n />\n </svg>\n )\n})\n\nHeadingSixIcon.displayName = 'HeadingSixIcon'\n","import * as React from 'react'\n\nexport const HeadingThreeIcon = React.memo(({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n return (\n <svg width=\"24\" height=\"24\" className={className} viewBox=\"0 0 24 24\" fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n d=\"M4 5C4.55228 5 5 5.44772 5 6V11H11V6C11 5.44772 11.4477 5 12 5C12.5523 5 13 5.44772 13 6V18C13 18.5523 12.5523 19 12 19C11.4477 19 11 18.5523 11 18V13H5V18C5 18.5523 4.55228 19 4 19C3.44772 19 3 18.5523 3 18V6C3 5.44772 3.44772 5 4 5Z\"\n fill=\"currentColor\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M19.4608 11.2169C19.1135 11.0531 18.5876 11.0204 18.0069 11.3619C17.5309 11.642 16.918 11.4831 16.638 11.007C16.358 10.531 16.5169 9.91809 16.9929 9.63807C18.1123 8.97962 19.3364 8.94691 20.314 9.40808C21.2839 9.86558 21.9999 10.818 21.9999 12C21.9999 12.7957 21.6838 13.5587 21.1212 14.1213C20.5586 14.6839 19.7956 15 18.9999 15C18.4476 15 17.9999 14.5523 17.9999 14C17.9999 13.4477 18.4476 13 18.9999 13C19.2651 13 19.5195 12.8947 19.707 12.7071C19.8946 12.5196 19.9999 12.2652 19.9999 12C19.9999 11.6821 19.8159 11.3844 19.4608 11.2169Z\"\n fill=\"currentColor\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M18.0001 14C18.0001 13.4477 18.4478 13 19.0001 13C19.7957 13 20.5588 13.3161 21.1214 13.8787C21.684 14.4413 22.0001 15.2043 22.0001 16C22.0001 17.2853 21.2767 18.3971 20.1604 18.8994C19.0257 19.41 17.642 19.2315 16.4001 18.3C15.9582 17.9686 15.8687 17.3418 16.2001 16.9C16.5314 16.4582 17.1582 16.3686 17.6001 16.7C18.3581 17.2685 18.9744 17.24 19.3397 17.0756C19.7234 16.9029 20.0001 16.5147 20.0001 16C20.0001 15.7348 19.8947 15.4804 19.7072 15.2929C19.5196 15.1054 19.2653 15 19.0001 15C18.4478 15 18.0001 14.5523 18.0001 14Z\"\n fill=\"currentColor\"\n />\n </svg>\n )\n})\n\nHeadingThreeIcon.displayName = 'HeadingThreeIcon'\n","import * as React from 'react'\n\nexport const HeadingTwoIcon = React.memo(({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n return (\n <svg width=\"24\" height=\"24\" className={className} viewBox=\"0 0 24 24\" fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n d=\"M5 6C5 5.44772 4.55228 5 4 5C3.44772 5 3 5.44772 3 6V18C3 18.5523 3.44772 19 4 19C4.55228 19 5 18.5523 5 18V13H11V18C11 18.5523 11.4477 19 12 19C12.5523 19 13 18.5523 13 18V6C13 5.44772 12.5523 5 12 5C11.4477 5 11 5.44772 11 6V11H5V6Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M22.0001 12C22.0001 10.7611 21.1663 9.79297 20.0663 9.42632C18.9547 9.05578 17.6171 9.28724 16.4001 10.2C15.9582 10.5314 15.8687 11.1582 16.2001 11.6C16.5314 12.0418 17.1582 12.1314 17.6001 11.8C18.383 11.2128 19.0455 11.1942 19.4338 11.3237C19.8339 11.457 20.0001 11.7389 20.0001 12C20.0001 12.4839 19.8554 12.7379 19.6537 12.9481C19.4275 13.1837 19.1378 13.363 18.7055 13.6307C18.6313 13.6767 18.553 13.7252 18.4701 13.777C17.9572 14.0975 17.3128 14.5261 16.8163 15.2087C16.3007 15.9177 16.0001 16.8183 16.0001 18C16.0001 18.5523 16.4478 19 17.0001 19H21.0001C21.5523 19 22.0001 18.5523 22.0001 18C22.0001 17.4477 21.5523 17 21.0001 17H18.131C18.21 16.742 18.3176 16.5448 18.4338 16.385C18.6873 16.0364 19.0429 15.7775 19.5301 15.473C19.5898 15.4357 19.6536 15.3966 19.7205 15.3556C20.139 15.0992 20.6783 14.7687 21.0964 14.3332C21.6447 13.7621 22.0001 13.0161 22.0001 12Z\"\n fill=\"currentColor\"\n />\n </svg>\n )\n})\n\nHeadingTwoIcon.displayName = 'HeadingTwoIcon'\n","import { isNodeSelection, type Editor } from '@tiptap/react'\nimport * as React from 'react'\n\n// --- Hooks ---\nimport { useTiptapEditor } from '../../../hooks/use-tiptap-editor'\n\n// --- Icons ---\nimport { HeadingFiveIcon } from '../../tiptap-icons/heading-five-icon'\nimport { HeadingFourIcon } from '../../tiptap-icons/heading-four-icon'\nimport { HeadingOneIcon } from '../../tiptap-icons/heading-one-icon'\nimport { HeadingSixIcon } from '../../tiptap-icons/heading-six-icon'\nimport { HeadingThreeIcon } from '../../tiptap-icons/heading-three-icon'\nimport { HeadingTwoIcon } from '../../tiptap-icons/heading-two-icon'\n\n// --- Lib ---\nimport { isNodeInSchema } from '../../../lib/tiptap-utils'\n\n// --- UI Primitives ---\nimport type { ButtonProps } from '../../tiptap-ui-primitive/button'\nimport { Button } from '../../tiptap-ui-primitive/button'\n\nexport type Level = 1 | 2 | 3 | 4 | 5 | 6\n\nexport interface HeadingButtonProps extends Omit<ButtonProps, 'type'> {\n /**\n * The TipTap editor instance.\n */\n editor?: Editor | null\n /**\n * The heading level.\n */\n level: Level\n /**\n * Optional text to display alongside the icon.\n */\n text?: string\n /**\n * Whether the button should hide when the heading is not available.\n * @default false\n */\n hideWhenUnavailable?: boolean\n}\n\nexport const headingIcons = {\n 1: HeadingOneIcon,\n 2: HeadingTwoIcon,\n 3: HeadingThreeIcon,\n 4: HeadingFourIcon,\n 5: HeadingFiveIcon,\n 6: HeadingSixIcon\n}\n\nexport const headingShortcutKeys: Partial<Record<Level, string>> = {\n 1: 'Ctrl-Alt-1',\n 2: 'Ctrl-Alt-2',\n 3: 'Ctrl-Alt-3',\n 4: 'Ctrl-Alt-4',\n 5: 'Ctrl-Alt-5',\n 6: 'Ctrl-Alt-6'\n}\n\nexport function canToggleHeading(editor: Editor | null, level: Level): boolean {\n if (!editor) return false\n\n try {\n return editor.can().toggleNode('heading', 'paragraph', { level })\n } catch {\n return false\n }\n}\n\nexport function isHeadingActive(editor: Editor | null, level: Level): boolean {\n if (!editor) return false\n return editor.isActive('heading', { level })\n}\n\nexport function toggleHeading(editor: Editor | null, level: Level): void {\n if (!editor) return\n\n if (editor.isActive('heading', { level })) {\n editor.chain().focus().setNode('paragraph').run()\n } else {\n editor.chain().focus().toggleNode('heading', 'paragraph', { level }).run()\n }\n}\n\nexport function isHeadingButtonDisabled(editor: Editor | null, level: Level, userDisabled: boolean = false): boolean {\n if (!editor) return true\n if (userDisabled) return true\n if (!canToggleHeading(editor, level)) return true\n return false\n}\n\nexport function shouldShowHeadingButton(params: {\n editor: Editor | null\n level: Level\n hideWhenUnavailable: boolean\n headingInSchema: boolean\n}): boolean {\n const { editor, hideWhenUnavailable, headingInSchema } = params\n\n if (!headingInSchema || !editor) {\n return false\n }\n\n if (hideWhenUnavailable) {\n if (isNodeSelection(editor.state.selection)) {\n return false\n }\n }\n\n return true\n}\n\nexport function getFormattedHeadingName(level: Level): string {\n return `标题 ${level}`\n}\n\nexport function useHeadingState(editor: Editor | null, level: Level, disabled: boolean = false) {\n const headingInSchema = isNodeInSchema('heading', editor)\n const isDisabled = isHeadingButtonDisabled(editor, level, disabled)\n const isActive = isHeadingActive(editor, level)\n\n const Icon = headingIcons[level]\n const shortcutKey = headingShortcutKeys[level]\n const formattedName = getFormattedHeadingName(level)\n\n return {\n headingInSchema,\n isDisabled,\n isActive,\n Icon,\n shortcutKey,\n formattedName\n }\n}\n\nexport const HeadingButton = React.forwardRef<HTMLButtonElement, HeadingButtonProps>(\n ({ editor: providedEditor, level, text, hideWhenUnavailable = false, className = '', disabled, onClick, children, ...buttonProps }, ref) => {\n const editor = useTiptapEditor(providedEditor)\n\n const { headingInSchema, isDisabled, isActive, Icon, shortcutKey, formattedName } = useHeadingState(editor, level, disabled)\n\n const handleClick = React.useCallback(\n (e: React.MouseEvent<HTMLButtonElement>) => {\n onClick?.(e)\n\n if (!e.defaultPrevented && !isDisabled && editor) {\n toggleHeading(editor, level)\n }\n },\n [onClick, isDisabled, editor, level]\n )\n\n const show = React.useMemo(() => {\n return shouldShowHeadingButton({\n editor,\n level,\n hideWhenUnavailable,\n headingInSchema\n })\n }, [editor, level, hideWhenUnavailable, headingInSchema])\n\n if (!show || !editor || !editor.isEditable) {\n return null\n }\n\n return (\n <Button\n type=\"button\"\n className={className.trim()}\n disabled={isDisabled}\n data-style=\"ghost\"\n data-active-state={isActive ? 'on' : 'off'}\n data-disabled={isDisabled}\n role=\"button\"\n tabIndex={-1}\n aria-label={formattedName}\n aria-pressed={isActive}\n tooltip={formattedName}\n shortcutKeys={shortcutKey}\n onClick={handleClick}\n {...buttonProps}\n ref={ref}\n >\n {children || (\n <>\n <Icon className=\"tiptap-button-icon\" />\n {text && <span className=\"tiptap-button-text\">{text}</span>}\n </>\n )}\n </Button>\n )\n }\n)\n\nHeadingButton.displayName = 'HeadingButton'\n\nexport default HeadingButton\n","import './dropdown-menu.less'\nimport { Separator } from '../../tiptap-ui-primitive/separator'\nimport type { Placement } from '@floating-ui/react'\nimport {\n autoUpdate,\n flip,\n FloatingFocusManager,\n FloatingList,\n FloatingPortal,\n offset,\n shift,\n useClick,\n useDismiss,\n useFloating,\n useInteractions,\n useListItem,\n useListNavigation,\n useMergeRefs,\n useRole,\n useTypeahead\n} from '@floating-ui/react'\nimport * as React from 'react'\n\ninterface DropdownMenuOptions {\n initialOpen?: boolean\n open?: boolean\n onOpenChange?: (open: boolean) => void\n side?: 'top' | 'right' | 'bottom' | 'left'\n align?: 'start' | 'center' | 'end'\n}\n\ninterface DropdownMenuProps extends DropdownMenuOptions {\n children: React.ReactNode\n}\n\ntype ContextType = ReturnType<typeof useDropdownMenu> & {\n updatePosition: (side: 'top' | 'right' | 'bottom' | 'left', align: 'start' | 'center' | 'end') => void\n}\n\nconst DropdownMenuContext = React.createContext<ContextType | null>(null)\n\nfunction useDropdownMenuContext() {\n const context = React.useContext(DropdownMenuContext)\n if (!context) {\n throw new Error('DropdownMenu components must be wrapped in <DropdownMenu />')\n }\n return context\n}\n\nfunction useDropdownMenu({\n initialOpen = false,\n open: controlledOpen,\n onOpenChange: setControlledOpen,\n side = 'bottom',\n align = 'start'\n}: DropdownMenuOptions) {\n const [uncontrolledOpen, setUncontrolledOpen] = React.useState(initialOpen)\n const [currentPlacement, setCurrentPlacement] = React.useState<Placement>(`${side}-${align}` as Placement)\n const [activeIndex, setActiveIndex] = React.useState<number | null>(null)\n\n const open = controlledOpen ?? uncontrolledOpen\n const setOpen = setControlledOpen ?? setUncontrolledOpen\n\n const elementsRef = React.useRef<Array<HTMLElement | null>>([])\n const labelsRef = React.useRef<Array<string | null>>([])\n\n const floating = useFloating({\n open,\n onOpenChange: setOpen,\n placement: currentPlacement,\n middleware: [offset({ mainAxis: 4 }), flip(), shift({ padding: 4 })],\n whileElementsMounted: autoUpdate\n })\n\n const { context } = floating\n\n const interactions = useInteractions([\n useClick(context, {\n event: 'mousedown',\n toggle: true,\n ignoreMouse: false\n }),\n useRole(context, { role: 'menu' }),\n useDismiss(context, {\n outsidePress: true,\n outsidePressEvent: 'mousedown'\n }),\n useListNavigation(context, {\n listRef: elementsRef,\n activeIndex,\n onNavigate: setActiveIndex,\n loop: true\n }),\n useTypeahead(context, {\n listRef: labelsRef,\n onMatch: open ? setActiveIndex : undefined,\n activeIndex\n })\n ])\n\n const updatePosition = React.useCallback((newSide: 'top' | 'right' | 'bottom' | 'left', newAlign: 'start' | 'center' | 'end') => {\n setCurrentPlacement(`${newSide}-${newAlign}` as Placement)\n }, [])\n\n return React.useMemo(\n () => ({\n open,\n setOpen,\n activeIndex,\n setActiveIndex,\n elementsRef,\n labelsRef,\n updatePosition,\n ...interactions,\n ...floating\n }),\n [open, setOpen, activeIndex, interactions, floating, updatePosition]\n )\n}\n\nexport function DropdownMenu({ children, ...options }: DropdownMenuProps) {\n const dropdown = useDropdownMenu(options)\n return (\n <DropdownMenuContext.Provider value={dropdown}>\n <FloatingList elementsRef={dropdown.elementsRef} labelsRef={dropdown.labelsRef}>\n {children}\n </FloatingList>\n </DropdownMenuContext.Provider>\n )\n}\n\ninterface DropdownMenuTriggerProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n asChild?: boolean\n}\n\nexport const DropdownMenuTrigger = React.forwardRef<HTMLButtonElement, DropdownMenuTriggerProps>(\n ({ children, asChild = false, ...props }, propRef) => {\n const context = useDropdownMenuContext()\n const childrenRef = React.isValidElement(children)\n ? parseInt(React.version, 10) >= 19\n ? // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (children as { props: { ref?: React.Ref<any> } }).props.ref\n : // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (children as any).ref\n : undefined\n const ref = useMergeRefs([context.refs.setReference, propRef, childrenRef])\n\n if (asChild && React.isValidElement(children)) {\n const dataAttributes = {\n 'data-state': context.open ? 'open' : 'closed'\n }\n\n return React.cloneElement(\n children,\n context.getReferenceProps({\n ref,\n ...props,\n ...(typeof children.props === 'object' ? children.props : {}),\n 'aria-expanded': context.open,\n 'aria-haspopup': 'menu' as const,\n ...dataAttributes\n })\n )\n }\n\n return (\n <button\n ref={ref}\n aria-expanded={context.open}\n aria-haspopup=\"menu\"\n data-state={context.open ? 'open' : 'closed'}\n {...context.getReferenceProps(props)}\n >\n {children}\n </button>\n )\n }\n)\n\nDropdownMenuTrigger.displayName = 'DropdownMenuTrigger'\n\ninterface DropdownMenuContentProps extends React.HTMLAttributes<HTMLDivElement> {\n orientation?: 'vertical' | 'horizontal'\n side?: 'top' | 'right' | 'bottom' | 'left'\n align?: 'start' | 'center' | 'end'\n portal?: boolean\n portalProps?: Omit<React.ComponentProps<typeof FloatingPortal>, 'children'>\n}\n\nexport const DropdownMenuContent = React.forwardRef<HTMLDivElement, DropdownMenuContentProps>(\n ({ style, className, orientation = 'vertical', side = 'bottom', align = 'start', portal = true, portalProps = {}, ...props }, propRef) => {\n const context = useDropdownMenuContext()\n const ref = useMergeRefs([context.refs.setFloating, propRef])\n\n React.useEffect(() => {\n context.updatePosition(side, align)\n }, [context, side, align])\n\n if (!context.open) return null\n\n const content = (\n <FloatingFocusManager context={context.context} modal={false} initialFocus={0} returnFocus={true}>\n <div\n ref={ref}\n className={`tiptap-dropdown-menu ${className || ''}`}\n style={{\n position: context.strategy,\n top: context.y ?? 0,\n left: context.x ?? 0,\n outline: 'none',\n ...style\n }}\n aria-orientation={orientation}\n data-orientation={orientation}\n data-state={context.open ? 'open' : 'closed'}\n data-side={side}\n data-align={align}\n {...context.getFloatingProps(props)}\n >\n {props.children}\n </div>\n </FloatingFocusManager>\n )\n\n if (portal) {\n return <FloatingPortal {...portalProps}>{content}</FloatingPortal>\n }\n\n return content\n }\n)\n\nDropdownMenuContent.displayName = 'DropdownMenuContent'\n\ninterface DropdownMenuItemProps extends React.HTMLAttributes<HTMLDivElement> {\n asChild?: boolean\n disabled?: boolean\n onSelect?: () => void\n}\n\nexport const DropdownMenuItem = React.forwardRef<HTMLDivElement, DropdownMenuItemProps>(\n ({ children, disabled, asChild = false, onSelect, className, ...props }, ref) => {\n const context = useDropdownMenuContext()\n const item = useListItem({ label: disabled ? null : children?.toString() })\n const isActive = context.activeIndex === item.index\n\n const handleSelect = React.useCallback(\n (event: React.MouseEvent<HTMLDivElement>) => {\n if (disabled) return\n onSelect?.()\n props.onClick?.(event)\n context.setOpen(false)\n },\n [context, disabled, onSelect, props]\n )\n\n const itemProps: React.HTMLAttributes<HTMLDivElement> & {\n ref: React.Ref<HTMLDivElement>\n role: string\n tabIndex: number\n 'aria-disabled'?: boolean\n 'data-highlighted'?: boolean\n } = {\n ref: useMergeRefs([item.ref, ref]),\n role: 'menuitem',\n className,\n tabIndex: isActive ? 0 : -1,\n 'data-highlighted': isActive,\n 'aria-disabled': disabled,\n ...context.getItemProps({\n ...props,\n onClick: handleSelect\n })\n }\n\n if (asChild && React.isValidElement(children)) {\n const childProps = children.props as {\n onClick?: (event: React.MouseEvent<HTMLElement>) => void\n }\n\n // Create merged props without adding onClick directly to the props object\n const mergedProps = {\n ...itemProps,\n ...(typeof children.props === 'object' ? children.props : {})\n }\n\n // Handle onClick separately based on the element type\n const eventHandlers = {\n onClick: (event: React.MouseEvent<HTMLElement>) => {\n // Cast the event to make it compatible with handleSelect\n handleSelect(event as unknown as React.MouseEvent<HTMLDivElement>)\n childProps.onClick?.(event)\n }\n }\n\n return React.cloneElement(children, {\n ...mergedProps,\n ...eventHandlers\n })\n }\n\n return <div {...itemProps}>{children}</div>\n }\n)\n\nDropdownMenuItem.displayName = 'DropdownMenuItem'\n\ninterface DropdownMenuGroupProps extends React.HTMLAttributes<HTMLDivElement> {\n label?: string\n}\n\nexport const DropdownMenuGroup = React.forwardRef<HTMLDivElement, DropdownMenuGroupProps>(({ children, label, className, ...props }, ref) => {\n return (\n <div {...props} ref={ref} role=\"group\" aria-label={label} className={`tiptap-button-group ${className || ''}`}>\n {children}\n </div>\n )\n})\n\nDropdownMenuGroup.displayName = 'DropdownMenuGroup'\n\nexport const DropdownMenuSeparator = React.forwardRef<React.ElementRef<typeof Separator>, React.ComponentPropsWithoutRef<typeof Separator>>(\n ({ className, ...props }, ref) => <Separator ref={ref} className={`tiptap-dropdown-menu-separator ${className || ''}`} {...props} />\n)\nDropdownMenuSeparator.displayName = Separator.displayName\n","import { isNodeSelection, type Editor } from '@tiptap/react'\nimport * as React from 'react'\n\n// --- Hooks ---\nimport { useTiptapEditor } from '../../../hooks/use-tiptap-editor'\n\n// --- Icons ---\nimport { ChevronDownIcon } from '../../tiptap-icons/chevron-down-icon'\nimport { HeadingIcon } from '../../tiptap-icons/heading-icon'\n\n// --- Lib ---\nimport { isNodeInSchema } from '../../../lib/tiptap-utils'\n\n// --- Tiptap UI ---\nimport {\n getFormattedHeadingName,\n HeadingButton,\n headingIcons,\n type Level\n} from '../../tiptap-ui/heading-button/heading-button'\n\n// --- UI Primitives ---\nimport type { ButtonProps } from '../../tiptap-ui-primitive/button'\nimport { Button } from '../../tiptap-ui-primitive/button'\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuTrigger\n} from '../../tiptap-ui-primitive/dropdown-menu'\n\nexport interface HeadingDropdownMenuProps extends Omit<ButtonProps, 'type'> {\n editor?: Editor | null\n levels?: Level[]\n hideWhenUnavailable?: boolean\n onOpenChange?: (isOpen: boolean) => void\n}\n\nexport function HeadingDropdownMenu({\n editor: providedEditor,\n levels = [1, 2, 3, 4, 5, 6],\n hideWhenUnavailable = false,\n onOpenChange,\n ...props\n}: HeadingDropdownMenuProps) {\n const [isOpen, setIsOpen] = React.useState(false)\n const editor = useTiptapEditor(providedEditor)\n\n const headingInSchema = isNodeInSchema('heading', editor)\n\n const handleOnOpenChange = React.useCallback(\n (open: boolean) => {\n setIsOpen(open)\n onOpenChange?.(open)\n },\n [onOpenChange]\n )\n\n const getActiveIcon = React.useCallback(() => {\n if (!editor) return <HeadingIcon className=\"tiptap-button-icon\" />\n\n const activeLevel = levels.find((level) => editor.isActive('heading', { level })) as Level | undefined\n\n if (!activeLevel) return <HeadingIcon className=\"tiptap-button-icon\" />\n\n const ActiveIcon = headingIcons[activeLevel]\n return <ActiveIcon className=\"tiptap-button-icon\" />\n }, [editor, levels])\n\n const canToggleAnyHeading = React.useCallback((): boolean => {\n if (!editor) return false\n return levels.some((level) => editor.can().toggleNode('heading', 'paragraph', { level }))\n }, [editor, levels])\n\n const isDisabled = !canToggleAnyHeading()\n const isAnyHeadingActive = editor?.isActive('heading') ?? false\n\n const show = React.useMemo(() => {\n if (!headingInSchema || !editor) {\n return false\n }\n\n if (hideWhenUnavailable) {\n if (isNodeSelection(editor.state.selection) || !canToggleAnyHeading()) {\n return false\n }\n }\n\n return true\n }, [headingInSchema, editor, hideWhenUnavailable, canToggleAnyHeading])\n\n if (!show || !editor || !editor.isEditable) {\n return null\n }\n\n return (\n <DropdownMenu open={isOpen} onOpenChange={handleOnOpenChange}>\n <DropdownMenuTrigger asChild>\n <Button\n type=\"button\"\n disabled={isDisabled}\n data-style=\"ghost\"\n data-active-state={isAnyHeadingActive ? 'on' : 'off'}\n data-disabled={isDisabled}\n role=\"button\"\n tabIndex={-1}\n aria-label=\"Format text as heading\"\n aria-pressed={isAnyHeadingActive}\n tooltip=\"标题\"\n {...props}\n >\n {getActiveIcon()}\n <ChevronDownIcon className=\"tiptap-button-dropdown-small\" />\n </Button>\n </DropdownMenuTrigger>\n\n <DropdownMenuContent>\n <DropdownMenuGroup>\n {levels.map((level) => (\n <DropdownMenuItem key={`heading-${level}`} asChild>\n <HeadingButton editor={editor} level={level} text={getFormattedHeadingName(level)} tooltip={''} />\n </DropdownMenuItem>\n ))}\n </DropdownMenuGroup>\n </DropdownMenuContent>\n </DropdownMenu>\n )\n}\n\nexport default HeadingDropdownMenu\n","import type { Editor } from '@tiptap/react'\nimport * as React from 'react'\n\ntype Orientation = 'horizontal' | 'vertical' | 'both'\n\ninterface MenuNavigationOptions<T> {\n editor?: Editor | null\n containerRef?: React.RefObject<HTMLElement | null>\n query?: string\n items: T[]\n onSelect?: (item: T) => void\n onClose?: () => void\n orientation?: Orientation\n autoSelectFirstItem?: boolean\n}\n\nexport function useMenuNavigation<T>({\n editor,\n containerRef,\n query,\n items,\n onSelect,\n onClose,\n orientation = 'vertical',\n autoSelectFirstItem = true\n}: MenuNavigationOptions<T>) {\n const [selectedIndex, setSelectedIndex] = React.useState<number>(autoSelectFirstItem ? 0 : -1)\n\n React.useEffect(() => {\n const handleKeyboardNavigation = (event: KeyboardEvent) => {\n if (!items.length) return false\n\n const moveNext = () =>\n setSelectedIndex((currentIndex) => {\n if (currentIndex === -1) return 0\n return (currentIndex + 1) % items.length\n })\n\n const movePrev = () =>\n setSelectedIndex((currentIndex) => {\n if (currentIndex === -1) return items.length - 1\n return (currentIndex - 1 + items.length) % items.length\n })\n\n switch (event.key) {\n case 'ArrowUp': {\n if (orientation === 'horizontal') return false\n event.preventDefault()\n movePrev()\n return true\n }\n\n case 'ArrowDown': {\n if (orientation === 'horizontal') return false\n event.preventDefault()\n moveNext()\n return true\n }\n\n case 'ArrowLeft': {\n if (orientation === 'vertical') return false\n event.preventDefault()\n movePrev()\n return true\n }\n\n case 'ArrowRight': {\n if (orientation === 'vertical') return false\n event.preventDefault()\n moveNext()\n return true\n }\n\n case 'Tab': {\n event.preventDefault()\n if (event.shiftKey) {\n movePrev()\n } else {\n moveNext()\n }\n return true\n }\n\n case 'Home': {\n event.preventDefault()\n setSelectedIndex(0)\n return true\n }\n\n case 'End': {\n event.preventDefault()\n setSelectedIndex(items.length - 1)\n return true\n }\n\n case 'Enter': {\n if (event.isComposing) return false\n event.preventDefault()\n if (selectedIndex !== -1 && items[selectedIndex]) {\n onSelect?.(items[selectedIndex])\n }\n return true\n }\n\n case 'Escape': {\n event.preventDefault()\n onClose?.()\n return true\n }\n\n default:\n return false\n }\n }\n\n let targetElement: HTMLElement | null = null\n\n if (editor) {\n targetElement = editor.view.dom\n } else if (containerRef?.current) {\n targetElement = containerRef.current\n }\n\n if (targetElement) {\n targetElement.addEventListener('keydown', handleKeyboardNavigation, true)\n\n return () => {\n targetElement?.removeEventListener('keydown', handleKeyboardNavigation, true)\n }\n }\n\n return undefined\n }, [editor, containerRef, items, selectedIndex, onSelect, onClose, orientation])\n\n React.useEffect(() => {\n if (query) {\n setSelectedIndex(autoSelectFirstItem ? 0 : -1)\n }\n }, [query, autoSelectFirstItem])\n\n return {\n selectedIndex: items.length ? selectedIndex : undefined,\n setSelectedIndex\n }\n}\n","import * as React from 'react'\n\nexport const BanIcon = React.memo(({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n return (\n <svg width=\"24\" height=\"24\" className={className} viewBox=\"0 0 24 24\" fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M4.43471 4.01458C4.34773 4.06032 4.26607 4.11977 4.19292 4.19292C4.11977 4.26607 4.06032 4.34773 4.01458 4.43471C2.14611 6.40628 1 9.0693 1 12C1 18.0751 5.92487 23 12 23C14.9306 23 17.5936 21.854 19.5651 19.9856C19.6522 19.9398 19.7339 19.8803 19.8071 19.8071C19.8803 19.7339 19.9398 19.6522 19.9856 19.5651C21.854 17.5936 23 14.9306 23 12C23 5.92487 18.0751 1 12 1C9.0693 1 6.40628 2.14611 4.43471 4.01458ZM6.38231 4.9681C7.92199 3.73647 9.87499 3 12 3C16.9706 3 21 7.02944 21 12C21 14.125 20.2635 16.078 19.0319 17.6177L6.38231 4.9681ZM17.6177 19.0319C16.078 20.2635 14.125 21 12 21C7.02944 21 3 16.9706 3 12C3 9.87499 3.73647 7.92199 4.9681 6.38231L17.6177 19.0319Z\"\n fill=\"currentColor\"\n />\n </svg>\n )\n})\n\nBanIcon.displayName = 'BanIcon'\n","import * as React from 'react'\n\nexport const HighlighterIcon = React.memo(({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n return (\n <svg width=\"24\" height=\"24\" className={className} viewBox=\"0 0 24 24\" fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M14.7072 4.70711C15.0977 4.31658 15.0977 3.68342 14.7072 3.29289C14.3167 2.90237 13.6835 2.90237 13.293 3.29289L8.69294 7.89286L8.68594 7.9C8.13626 8.46079 7.82837 9.21474 7.82837 10C7.82837 10.2306 7.85491 10.4584 7.90631 10.6795L2.29289 16.2929C2.10536 16.4804 2 16.7348 2 17V20C2 20.5523 2.44772 21 3 21H12C12.2652 21 12.5196 20.8946 12.7071 20.7071L15.3205 18.0937C15.5416 18.1452 15.7695 18.1717 16.0001 18.1717C16.7853 18.1717 17.5393 17.8639 18.1001 17.3142L22.7072 12.7071C23.0977 12.3166 23.0977 11.6834 22.7072 11.2929C22.3167 10.9024 21.6835 10.9024 21.293 11.2929L16.6971 15.8887C16.5105 16.0702 16.2605 16.1717 16.0001 16.1717C15.7397 16.1717 15.4897 16.0702 15.303 15.8887L10.1113 10.697C9.92992 10.5104 9.82837 10.2604 9.82837 10C9.82837 9.73963 9.92992 9.48958 10.1113 9.30297L14.7072 4.70711ZM13.5858 17L9.00004 12.4142L4 17.4142V19H11.5858L13.5858 17Z\"\n fill=\"currentColor\"\n />\n </svg>\n )\n})\n\nHighlighterIcon.displayName = 'HighlighterIcon'\n","import './popover.less'\nimport type { Placement } from '@floating-ui/react'\nimport {\n autoUpdate,\n flip,\n FloatingFocusManager,\n FloatingPortal,\n limitShift,\n offset,\n shift,\n useClick,\n useDismiss,\n useFloating,\n useInteractions,\n useMergeRefs,\n useRole\n} from '@floating-ui/react'\nimport * as React from 'react'\n\ntype PopoverContextValue = ReturnType<typeof usePopover> & {\n setLabelId: (id: string | undefined) => void\n setDescriptionId: (id: string | undefined) => void\n updatePosition: (side: 'top' | 'right' | 'bottom' | 'left', align: 'start' | 'center' | 'end') => void\n}\n\ninterface PopoverOptions {\n initialOpen?: boolean\n modal?: boolean\n open?: boolean\n onOpenChange?: (open: boolean) => void\n side?: 'top' | 'right' | 'bottom' | 'left'\n align?: 'start' | 'center' | 'end'\n}\n\ninterface PopoverProps extends PopoverOptions {\n children: React.ReactNode\n}\n\nconst PopoverContext = React.createContext<PopoverContextValue | null>(null)\n\nfunction usePopoverContext() {\n const context = React.useContext(PopoverContext)\n if (!context) {\n throw new Error('Popover components must be wrapped in <Popover />')\n }\n return context\n}\n\nfunction usePopover({\n initialOpen = false,\n modal,\n open: controlledOpen,\n onOpenChange: setControlledOpen,\n side = 'bottom',\n align = 'center'\n}: PopoverOptions = {}) {\n const [uncontrolledOpen, setUncontrolledOpen] = React.useState(initialOpen)\n const [labelId, setLabelId] = React.useState<string>()\n const [descriptionId, setDescriptionId] = React.useState<string>()\n const [currentPlacement, setCurrentPlacement] = React.useState<Placement>(`${side}-${align}` as Placement)\n\n const open = controlledOpen ?? uncontrolledOpen\n const setOpen = setControlledOpen ?? setUncontrolledOpen\n\n const middleware = React.useMemo(\n () => [\n offset(4),\n flip({\n fallbackAxisSideDirection: 'end',\n crossAxis: false\n }),\n shift({\n limiter: limitShift({ offset: 4 })\n })\n ],\n []\n )\n\n const floating = useFloating({\n placement: currentPlacement,\n open,\n onOpenChange: setOpen,\n whileElementsMounted: autoUpdate,\n middleware\n })\n\n const interactions = useInteractions([useClick(floating.context), useDismiss(floating.context), useRole(floating.context)])\n\n const updatePosition = React.useCallback((newSide: 'top' | 'right' | 'bottom' | 'left', newAlign: 'start' | 'center' | 'end') => {\n setCurrentPlacement(`${newSide}-${newAlign}` as Placement)\n }, [])\n\n return React.useMemo(\n () => ({\n open,\n setOpen,\n ...interactions,\n ...floating,\n modal,\n labelId,\n descriptionId,\n setLabelId,\n setDescriptionId,\n updatePosition\n }),\n [open, setOpen, interactions, floating, modal, labelId, descriptionId, updatePosition]\n )\n}\n\nfunction Popover({ children, modal = false, ...options }: PopoverProps) {\n const popover = usePopover({ modal, ...options })\n return <PopoverContext.Provider value={popover}>{children}</PopoverContext.Provider>\n}\n\ninterface TriggerElementProps extends React.HTMLProps<HTMLElement> {\n asChild?: boolean\n}\n\nconst PopoverTrigger = React.forwardRef<HTMLElement, TriggerElementProps>(function PopoverTrigger({ children, asChild = false, ...props }, propRef) {\n const context = usePopoverContext()\n const childrenRef = React.isValidElement(children)\n ? parseInt(React.version, 10) >= 19\n ? (children.props as any).ref\n : (children as any).ref\n : undefined\n const ref = useMergeRefs([context.refs.setReference, propRef, childrenRef])\n\n if (asChild && React.isValidElement(children)) {\n return React.cloneElement(\n children,\n context.getReferenceProps({\n ref,\n ...props,\n ...(children.props as any),\n 'data-state': context.open ? 'open' : 'closed'\n })\n )\n }\n\n return (\n <button ref={ref} data-state={context.open ? 'open' : 'closed'} {...context.getReferenceProps(props)}>\n {children}\n </button>\n )\n})\n\ninterface PopoverContentProps extends React.HTMLProps<HTMLDivElement> {\n side?: 'top' | 'right' | 'bottom' | 'left'\n align?: 'start' | 'center' | 'end'\n portal?: boolean\n portalProps?: Omit<React.ComponentProps<typeof FloatingPortal>, 'children'>\n}\n\nconst PopoverContent = React.forwardRef<HTMLDivElement, PopoverContentProps>(function PopoverContent(\n { className, side = 'bottom', align = 'center', style, portal = true, portalProps = {}, ...props },\n propRef\n) {\n const context = usePopoverContext()\n const ref = useMergeRefs([context.refs.setFloating, propRef])\n\n React.useEffect(() => {\n context.updatePosition(side, align)\n }, [context, side, align])\n\n if (!context.context.open) return null\n\n const content = (\n <FloatingFocusManager context={context.context} modal={context.modal}>\n <div\n ref={ref}\n style={{\n position: context.strategy,\n top: context.y ?? 0,\n left: context.x ?? 0,\n ...style\n }}\n aria-labelledby={context.labelId}\n aria-describedby={context.descriptionId}\n className={`tiptap-popover ${className || ''}`}\n data-side={side}\n data-align={align}\n data-state={context.context.open ? 'open' : 'closed'}\n {...context.getFloatingProps(props)}\n >\n {props.children}\n </div>\n </FloatingFocusManager>\n )\n\n if (portal) {\n return <FloatingPortal {...portalProps}>{content}</FloatingPortal>\n }\n\n return content\n})\n\nPopoverTrigger.displayName = 'PopoverTrigger'\nPopoverContent.displayName = 'PopoverContent'\n\nexport { Popover, PopoverContent, PopoverTrigger }\n","import type { Node } from '@tiptap/pm/model'\nimport { isNodeSelection, type Editor } from '@tiptap/react'\nimport * as React from 'react'\n\n// --- Hooks ---\nimport { useTiptapEditor } from '../../../hooks/use-tiptap-editor'\n\n// --- Lib ---\nimport { findNodePosition, isEmptyNode, isMarkInSchema } from '../../../lib/tiptap-utils'\n\n// --- UI Primitives ---\nimport type { ButtonProps } from '../../tiptap-ui-primitive/button'\nimport { Button } from '../../tiptap-ui-primitive/button'\n\n// --- Styles ---\nimport './highlight-button.less'\n\nexport const HIGHLIGHT_COLORS = [\n {\n label: 'Default background',\n value: 'var(--tt-bg-color)',\n border: 'var(--tt-bg-color-contrast)'\n },\n {\n label: 'Gray background',\n value: 'var(--tt-highlight-gray)',\n border: 'var(--tt-highlight-gray-contrast)'\n },\n {\n label: 'Brown background',\n value: 'var(--tt-highlight-brown)',\n border: 'var(--tt-highlight-brown-contrast)'\n },\n {\n label: 'Orange background',\n value: 'var(--tt-highlight-orange)',\n border: 'var(--tt-highlight-orange-contrast)'\n },\n {\n label: 'Yellow background',\n value: 'var(--tt-highlight-yellow)',\n border: 'var(--tt-highlight-yellow-contrast)'\n },\n {\n label: 'Green background',\n value: 'var(--tt-highlight-green)',\n border: 'var(--tt-highlight-green-contrast)'\n },\n {\n label: 'Blue background',\n value: 'var(--tt-highlight-blue)',\n border: 'var(--tt-highlight-blue-contrast)'\n },\n {\n label: 'Purple background',\n value: 'var(--tt-highlight-purple)',\n border: 'var(--tt-highlight-purple-contrast)'\n },\n {\n label: 'Pink background',\n value: 'var(--tt-highlight-pink)',\n border: 'var(--tt-highlight-pink-contrast)'\n },\n {\n label: 'Red background',\n value: 'var(--tt-highlight-red)',\n border: 'var(--tt-highlight-red-contrast)'\n }\n]\n\nexport interface HighlightButtonProps extends Omit<ButtonProps, 'type'> {\n /**\n * The TipTap editor instance.\n */\n editor?: Editor | null\n /**\n * The node to apply highlight to\n */\n node?: Node | null\n /**\n * The position of the node in the document\n */\n nodePos?: number | null\n /**\n * The color to apply when toggling the highlight.\n * If not provided, it will use the default color from the extension.\n */\n color: string\n /**\n * Optional text to display alongside the icon.\n */\n text?: string\n /**\n * Whether the button should hide when the mark is not available.\n * @default false\n */\n hideWhenUnavailable?: boolean\n /**\n * Called when the highlight is applied.\n */\n onApplied?: (color: string) => void\n}\n\n/**\n * Checks if highlight can be toggled in the current editor state\n */\nexport function canToggleHighlight(editor: Editor | null): boolean {\n if (!editor) return false\n try {\n return editor.can().setMark('highlight')\n } catch {\n return false\n }\n}\n\n/**\n * Checks if highlight is active in the current selection\n */\nexport function isHighlightActive(editor: Editor | null, color: string): boolean {\n if (!editor) return false\n return editor.isActive('highlight', { color })\n}\n\n/**\n * Toggles highlight on the current selection or specified node\n */\nexport function toggleHighlight(editor: Editor | null, color: string, node?: Node | null, nodePos?: number | null): void {\n if (!editor) return\n\n try {\n const chain = editor.chain().focus()\n\n if (isEmptyNode(node)) {\n chain.toggleMark('highlight', { color }).run()\n } else if (nodePos !== undefined && nodePos !== null && nodePos !== -1) {\n chain.setNodeSelection(nodePos).toggleMark('highlight', { color }).run()\n } else if (node) {\n const foundPos = findNodePosition({ editor, node })\n if (foundPos) {\n chain.setNodeSelection(foundPos.pos).toggleMark('highlight', { color }).run()\n } else {\n chain.toggleMark('highlight', { color }).run()\n }\n } else {\n chain.toggleMark('highlight', { color }).run()\n }\n\n editor.chain().setMeta('hideDragHandle', true).run()\n } catch (error) {\n console.error('Failed to apply highlight:', error)\n }\n}\n\n/**\n * Determines if the highlight button should be disabled\n */\nexport function isHighlightButtonDisabled(editor: Editor | null, userDisabled: boolean = false): boolean {\n if (!editor || userDisabled) return true\n\n const isIncompatibleContext = editor.isActive('code') || editor.isActive('codeBlock') || editor.isActive('imageUpload')\n\n return isIncompatibleContext || !canToggleHighlight(editor)\n}\n\n/**\n * Determines if the highlight button should be shown\n */\nexport function shouldShowHighlightButton(editor: Editor | null, hideWhenUnavailable: boolean, highlightInSchema: boolean): boolean {\n if (!highlightInSchema || !editor) return false\n\n if (hideWhenUnavailable) {\n if (isNodeSelection(editor.state.selection) || !canToggleHighlight(editor)) {\n return false\n }\n }\n\n return true\n}\n\n/**\n * Custom hook to manage highlight button state\n */\nexport function useHighlightState(editor: Editor | null, color: string, disabled: boolean = false, hideWhenUnavailable: boolean = false) {\n const highlightInSchema = isMarkInSchema('highlight', editor)\n const isDisabled = isHighlightButtonDisabled(editor, disabled)\n const isActive = isHighlightActive(editor, color)\n\n const shouldShow = React.useMemo(\n () => shouldShowHighlightButton(editor, hideWhenUnavailable, highlightInSchema),\n [editor, hideWhenUnavailable, highlightInSchema]\n )\n\n return {\n highlightInSchema,\n isDisabled,\n isActive,\n shouldShow\n }\n}\n\n/**\n * HighlightButton component for TipTap editor\n */\nexport const HighlightButton = React.forwardRef<HTMLButtonElement, HighlightButtonProps>(\n (\n {\n editor: providedEditor,\n node,\n nodePos,\n color,\n text,\n hideWhenUnavailable = false,\n className = '',\n disabled,\n onClick,\n onApplied,\n children,\n style,\n ...buttonProps\n },\n ref\n ) => {\n const editor = useTiptapEditor(providedEditor)\n const { isDisabled, isActive, shouldShow } = useHighlightState(editor, color, disabled, hideWhenUnavailable)\n\n const handleClick = React.useCallback(\n (e: React.MouseEvent<HTMLButtonElement>) => {\n onClick?.(e)\n\n if (!e.defaultPrevented && !isDisabled && editor) {\n toggleHighlight(editor, color, node, nodePos)\n onApplied?.(color)\n }\n },\n [color, editor, isDisabled, node, nodePos, onClick, onApplied]\n )\n\n const buttonStyle = React.useMemo(\n () =>\n ({\n ...style,\n '--highlight-color': color\n }) as React.CSSProperties,\n [color, style]\n )\n\n if (!shouldShow || !editor || !editor.isEditable) {\n return null\n }\n\n return (\n <Button\n type=\"button\"\n className={className.trim()}\n disabled={isDisabled}\n data-style=\"ghost\"\n data-active-state={isActive ? 'on' : 'off'}\n data-disabled={isDisabled}\n role=\"button\"\n tabIndex={-1}\n aria-label={`${color} highlight color`}\n aria-pressed={isActive}\n onClick={handleClick}\n style={buttonStyle}\n {...buttonProps}\n ref={ref}\n >\n {children || (\n <>\n <span className=\"tiptap-button-highlight\" style={{ '--highlight-color': color } as React.CSSProperties} />\n {text && <span className=\"tiptap-button-text\">{text}</span>}\n </>\n )}\n </Button>\n )\n }\n)\n\nHighlightButton.displayName = 'HighlightButton'\n\nexport default HighlightButton\n","import { isNodeSelection, type Editor } from '@tiptap/react'\nimport * as React from 'react'\n\n// --- Hooks ---\nimport { useMenuNavigation } from '../../../hooks/use-menu-navigation'\nimport { useTiptapEditor } from '../../../hooks/use-tiptap-editor'\n\n// --- Icons ---\nimport { BanIcon } from '../../tiptap-icons/ban-icon'\nimport { HighlighterIcon } from '../../tiptap-icons/highlighter-icon'\n\n// --- Lib ---\nimport { isMarkInSchema } from '../../../lib/tiptap-utils'\n\n// --- UI Primitives ---\nimport type { ButtonProps } from '../../tiptap-ui-primitive/button'\nimport { Button } from '../../tiptap-ui-primitive/button'\nimport { Popover, PopoverContent, PopoverTrigger } from '../../tiptap-ui-primitive/popover'\nimport { Separator } from '../../tiptap-ui-primitive/separator'\n\n// --- Tiptap UI ---\nimport { HighlightButton, canToggleHighlight } from '../../tiptap-ui/highlight-button'\n\n// --- Styles ---\nimport './highlight-popover.less'\n\nexport interface HighlightColor {\n label: string\n value: string\n border?: string\n}\n\nexport interface HighlightContentProps {\n editor?: Editor | null\n colors?: HighlightColor[]\n onClose?: () => void\n}\n\nexport interface HighlightPopoverProps extends Omit<ButtonProps, 'type'> {\n /** The TipTap editor instance. */\n editor?: Editor | null\n /** The highlight colors to display in the popover. */\n colors?: HighlightColor[]\n /** Whether to hide the highlight popover when unavailable. */\n hideWhenUnavailable?: boolean\n}\n\nexport const DEFAULT_HIGHLIGHT_COLORS: HighlightColor[] = [\n {\n label: 'Green',\n value: 'var(--tt-highlight-green)',\n border: 'var(--tt-highlight-green-contrast)'\n },\n {\n label: 'Blue',\n value: 'var(--tt-highlight-blue)',\n border: 'var(--tt-highlight-blue-contrast)'\n },\n {\n label: 'Red',\n value: 'var(--tt-highlight-red)',\n border: 'var(--tt-highlight-red-contrast)'\n },\n {\n label: 'Purple',\n value: 'var(--tt-highlight-purple)',\n border: 'var(--tt-highlight-purple-contrast)'\n },\n {\n label: 'Yellow',\n value: 'var(--tt-highlight-yellow)',\n border: 'var(--tt-highlight-yellow-contrast)'\n }\n]\n\nexport const HighlighterButton = React.forwardRef<HTMLButtonElement, ButtonProps>(({ className, children, ...props }, ref) => (\n <Button\n type=\"button\"\n className={className}\n data-style=\"ghost\"\n data-appearance=\"default\"\n role=\"button\"\n tabIndex={-1}\n aria-label=\"Highlight text\"\n tooltip=\"背景颜色\"\n ref={ref}\n {...props}\n >\n {children || <HighlighterIcon className=\"tiptap-button-icon\" />}\n </Button>\n))\n\nHighlighterButton.displayName = 'HighlighterButton'\n\nexport function HighlightContent({ editor: providedEditor, colors = DEFAULT_HIGHLIGHT_COLORS, onClose }: HighlightContentProps) {\n const editor = useTiptapEditor(providedEditor)\n const containerRef = React.useRef<HTMLDivElement>(null)\n\n const removeHighlight = React.useCallback(() => {\n if (!editor) return\n editor.chain().focus().unsetMark('highlight').run()\n onClose?.()\n }, [editor, onClose])\n\n const menuItems = React.useMemo(() => [...colors, { label: 'Remove highlight', value: 'none' }], [colors])\n\n const { selectedIndex } = useMenuNavigation({\n containerRef,\n items: menuItems,\n orientation: 'both',\n onSelect: (item) => {\n if (item.value === 'none') {\n removeHighlight()\n }\n onClose?.()\n },\n onClose,\n autoSelectFirstItem: false\n })\n\n return (\n <div ref={containerRef} className=\"tiptap-highlight-content\" tabIndex={0}>\n <div className=\"tiptap-button-group\" data-orientation=\"horizontal\">\n {colors.map((color, index) => (\n <HighlightButton\n key={color.value}\n editor={editor}\n color={color.value}\n aria-label={`${color.label} highlight color`}\n tabIndex={index === selectedIndex ? 0 : -1}\n data-highlighted={selectedIndex === index}\n onClick={onClose}\n />\n ))}\n </div>\n\n <Separator />\n\n <div className=\"tiptap-button-group\">\n <Button\n onClick={removeHighlight}\n aria-label=\"Remove highlight\"\n tabIndex={selectedIndex === colors.length ? 0 : -1}\n type=\"button\"\n role=\"menuitem\"\n data-style=\"ghost\"\n data-highlighted={selectedIndex === colors.length}\n >\n <BanIcon className=\"tiptap-button-icon\" />\n </Button>\n </div>\n </div>\n )\n}\n\nexport function HighlightPopover({\n editor: providedEditor,\n colors = DEFAULT_HIGHLIGHT_COLORS,\n hideWhenUnavailable = false,\n ...props\n}: HighlightPopoverProps) {\n const editor = useTiptapEditor(providedEditor)\n const [isOpen, setIsOpen] = React.useState(false)\n const [isDisabled, setIsDisabled] = React.useState(false)\n\n const markAvailable = isMarkInSchema('highlight', editor)\n\n React.useEffect(() => {\n if (!editor) return\n\n const updateIsDisabled = () => {\n let isDisabled = false\n\n if (!markAvailable || !editor) {\n isDisabled = true\n }\n\n const isInCompatibleContext = editor.isActive('code') || editor.isActive('codeBlock') || editor.isActive('imageUpload')\n\n if (isInCompatibleContext) {\n isDisabled = true\n }\n\n setIsDisabled(isDisabled)\n }\n\n editor.on('selectionUpdate', updateIsDisabled)\n editor.on('update', updateIsDisabled)\n\n return () => {\n editor.off('selectionUpdate', updateIsDisabled)\n editor.off('update', updateIsDisabled)\n }\n }, [editor, markAvailable])\n\n const isActive = editor?.isActive('highlight') ?? false\n\n const shouldShow = React.useMemo(() => {\n if (!hideWhenUnavailable || !editor) return true\n\n return !(isNodeSelection(editor.state.selection) || !canToggleHighlight(editor))\n }, [hideWhenUnavailable, editor])\n\n if (!shouldShow || !editor || !editor.isEditable) {\n return null\n }\n\n return (\n <Popover open={isOpen} onOpenChange={setIsOpen}>\n <PopoverTrigger asChild>\n <HighlighterButton\n disabled={isDisabled}\n data-active-state={isActive ? 'on' : 'off'}\n data-disabled={isDisabled}\n aria-pressed={isActive}\n {...props}\n />\n </PopoverTrigger>\n\n <PopoverContent aria-label=\"Highlight colors\">\n <HighlightContent editor={editor} colors={colors} onClose={() => setIsOpen(false)} />\n </PopoverContent>\n </Popover>\n )\n}\n\nexport default HighlightPopover\n","import * as React from 'react'\n\nexport const CornerDownLeftIcon = React.memo(({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n return (\n <svg width=\"24\" height=\"24\" className={className} viewBox=\"0 0 24 24\" fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M21 4C21 3.44772 20.5523 3 20 3C19.4477 3 19 3.44772 19 4V11C19 11.7956 18.6839 12.5587 18.1213 13.1213C17.5587 13.6839 16.7956 14 16 14H6.41421L9.70711 10.7071C10.0976 10.3166 10.0976 9.68342 9.70711 9.29289C9.31658 8.90237 8.68342 8.90237 8.29289 9.29289L3.29289 14.2929C2.90237 14.6834 2.90237 15.3166 3.29289 15.7071L8.29289 20.7071C8.68342 21.0976 9.31658 21.0976 9.70711 20.7071C10.0976 20.3166 10.0976 19.6834 9.70711 19.2929L6.41421 16H16C17.3261 16 18.5979 15.4732 19.5355 14.5355C20.4732 13.5979 21 12.3261 21 11V4Z\"\n fill=\"currentColor\"\n />\n </svg>\n )\n})\n\nCornerDownLeftIcon.displayName = 'CornerDownLeftIcon'\n","import * as React from 'react'\n\nexport const ExternalLinkIcon = React.memo(({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n return (\n <svg width=\"24\" height=\"24\" className={className} viewBox=\"0 0 24 24\" fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n d=\"M14 3C14 2.44772 14.4477 2 15 2H21C21.5523 2 22 2.44772 22 3V9C22 9.55228 21.5523 10 21 10C20.4477 10 20 9.55228 20 9V5.41421L10.7071 14.7071C10.3166 15.0976 9.68342 15.0976 9.29289 14.7071C8.90237 14.3166 8.90237 13.6834 9.29289 13.2929L18.5858 4H15C14.4477 4 14 3.55228 14 3Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M4.29289 7.29289C4.48043 7.10536 4.73478 7 5 7H11C11.5523 7 12 6.55228 12 6C12 5.44772 11.5523 5 11 5H5C4.20435 5 3.44129 5.31607 2.87868 5.87868C2.31607 6.44129 2 7.20435 2 8V19C2 19.7957 2.31607 20.5587 2.87868 21.1213C3.44129 21.6839 4.20435 22 5 22H16C16.7957 22 17.5587 21.6839 18.1213 21.1213C18.6839 20.5587 19 19.7957 19 19V13C19 12.4477 18.5523 12 18 12C17.4477 12 17 12.4477 17 13V19C17 19.2652 16.8946 19.5196 16.7071 19.7071C16.5196 19.8946 16.2652 20 16 20H5C4.73478 20 4.48043 19.8946 4.29289 19.7071C4.10536 19.5196 4 19.2652 4 19V8C4 7.73478 4.10536 7.48043 4.29289 7.29289Z\"\n fill=\"currentColor\"\n />\n </svg>\n )\n})\n\nExternalLinkIcon.displayName = 'ExternalLinkIcon'\n","import * as React from 'react'\n\nexport const LinkIcon = React.memo(({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n return (\n <svg width=\"24\" height=\"24\" className={className} viewBox=\"0 0 24 24\" fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n d=\"M16.9958 1.06669C15.4226 1.05302 13.907 1.65779 12.7753 2.75074L12.765 2.76086L11.045 4.47086C10.6534 4.86024 10.6515 5.49341 11.0409 5.88507C11.4303 6.27673 12.0634 6.27858 12.4551 5.88919L14.1697 4.18456C14.9236 3.45893 15.9319 3.05752 16.9784 3.06662C18.0272 3.07573 19.0304 3.49641 19.772 4.23804C20.5137 4.97967 20.9344 5.98292 20.9435 7.03171C20.9526 8.07776 20.5515 9.08563 19.8265 9.83941L16.833 12.8329C16.4274 13.2386 15.9393 13.5524 15.4019 13.7529C14.8645 13.9533 14.2903 14.0359 13.7181 13.9949C13.146 13.9539 12.5894 13.7904 12.0861 13.5154C11.5827 13.2404 11.1444 12.8604 10.8008 12.401C10.47 11.9588 9.84333 11.8685 9.40108 12.1993C8.95883 12.5301 8.86849 13.1568 9.1993 13.599C9.71464 14.288 10.3721 14.858 11.1272 15.2705C11.8822 15.683 12.7171 15.9283 13.5753 15.9898C14.4334 16.0513 15.2948 15.9274 16.1009 15.6267C16.907 15.326 17.639 14.8555 18.2473 14.247L21.2472 11.2471L21.2593 11.2347C22.3523 10.1031 22.9571 8.58751 22.9434 7.01433C22.9297 5.44115 22.2987 3.93628 21.1863 2.82383C20.0738 1.71138 18.5689 1.08036 16.9958 1.06669Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M10.4247 8.0102C9.56657 7.94874 8.70522 8.07256 7.89911 8.37326C7.09305 8.67395 6.36096 9.14458 5.75272 9.753L2.75285 12.7529L2.74067 12.7653C1.64772 13.8969 1.04295 15.4125 1.05662 16.9857C1.07029 18.5589 1.70131 20.0637 2.81376 21.1762C3.9262 22.2886 5.43108 22.9196 7.00426 22.9333C8.57744 22.947 10.0931 22.3422 11.2247 21.2493L11.2371 21.2371L12.9471 19.5271C13.3376 19.1366 13.3376 18.5034 12.9471 18.1129C12.5565 17.7223 11.9234 17.7223 11.5328 18.1129L9.82932 19.8164C9.07555 20.5414 8.06768 20.9425 7.02164 20.9334C5.97285 20.9243 4.9696 20.5036 4.22797 19.762C3.48634 19.0203 3.06566 18.0171 3.05655 16.9683C3.04746 15.9222 3.44851 14.9144 4.17355 14.1606L7.16719 11.167C7.5727 10.7613 8.06071 10.4476 8.59811 10.2471C9.13552 10.0467 9.70976 9.96412 10.2819 10.0051C10.854 10.0461 11.4106 10.2096 11.9139 10.4846C12.4173 10.7596 12.8556 11.1397 13.1992 11.599C13.53 12.0412 14.1567 12.1316 14.5989 11.8007C15.0412 11.4699 15.1315 10.8433 14.8007 10.401C14.2854 9.71205 13.6279 9.14198 12.8729 8.72948C12.1178 8.31697 11.2829 8.07166 10.4247 8.0102Z\"\n fill=\"currentColor\"\n />\n </svg>\n )\n})\n\nLinkIcon.displayName = 'LinkIcon'\n","import * as React from 'react'\n\nexport const TrashIcon = React.memo(({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n return (\n <svg width=\"24\" height=\"24\" className={className} viewBox=\"0 0 24 24\" fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M7 5V4C7 3.17477 7.40255 2.43324 7.91789 1.91789C8.43324 1.40255 9.17477 1 10 1H14C14.8252 1 15.5668 1.40255 16.0821 1.91789C16.5975 2.43324 17 3.17477 17 4V5H21C21.5523 5 22 5.44772 22 6C22 6.55228 21.5523 7 21 7H20V20C20 20.8252 19.5975 21.5668 19.0821 22.0821C18.5668 22.5975 17.8252 23 17 23H7C6.17477 23 5.43324 22.5975 4.91789 22.0821C4.40255 21.5668 4 20.8252 4 20V7H3C2.44772 7 2 6.55228 2 6C2 5.44772 2.44772 5 3 5H7ZM9 4C9 3.82523 9.09745 3.56676 9.33211 3.33211C9.56676 3.09745 9.82523 3 10 3H14C14.1748 3 14.4332 3.09745 14.6679 3.33211C14.9025 3.56676 15 3.82523 15 4V5H9V4ZM6 7V20C6 20.1748 6.09745 20.4332 6.33211 20.6679C6.56676 20.9025 6.82523 21 7 21H17C17.1748 21 17.4332 20.9025 17.6679 20.6679C17.9025 20.4332 18 20.1748 18 20V7H6Z\"\n fill=\"currentColor\"\n />\n </svg>\n )\n})\n\nTrashIcon.displayName = 'TrashIcon'\n","import { isNodeSelection, type Editor } from '@tiptap/react'\nimport * as React from 'react'\n\n// --- Hooks ---\nimport { useTiptapEditor } from '../../../hooks/use-tiptap-editor'\n\n// --- Icons ---\nimport { CornerDownLeftIcon } from '../../tiptap-icons/corner-down-left-icon'\nimport { ExternalLinkIcon } from '../../tiptap-icons/external-link-icon'\nimport { LinkIcon } from '../../tiptap-icons/link-icon'\nimport { TrashIcon } from '../../tiptap-icons/trash-icon'\n\n// --- Lib ---\nimport { isMarkInSchema } from '../../../lib/tiptap-utils'\n\n// --- UI Primitives ---\nimport type { ButtonProps } from '../../tiptap-ui-primitive/button'\nimport { Button } from '../../tiptap-ui-primitive/button'\nimport { Popover, PopoverContent, PopoverTrigger } from '../../tiptap-ui-primitive/popover'\nimport { Separator } from '../../tiptap-ui-primitive/separator'\n\n// --- Styles ---\nimport './link-popover.less'\n\nexport interface LinkHandlerProps {\n editor: Editor | null\n onSetLink?: () => void\n onLinkActive?: () => void\n}\n\nexport interface LinkMainProps {\n url: string\n setUrl: React.Dispatch<React.SetStateAction<string>>\n setLink: () => void\n removeLink: () => void\n isActive: boolean\n}\n\nexport const useLinkHandler = (props: LinkHandlerProps) => {\n const { editor, onSetLink, onLinkActive } = props\n const [url, setUrl] = React.useState<string>('')\n\n React.useEffect(() => {\n if (!editor) return\n\n // Get URL immediately on mount\n const { href } = editor.getAttributes('link')\n\n if (editor.isActive('link') && !url) {\n setUrl(href || '')\n onLinkActive?.()\n }\n }, [editor, onLinkActive, url])\n\n React.useEffect(() => {\n if (!editor) return\n\n const updateLinkState = () => {\n const { href } = editor.getAttributes('link')\n setUrl(href || '')\n\n if (editor.isActive('link') && !url) {\n onLinkActive?.()\n }\n }\n\n editor.on('selectionUpdate', updateLinkState)\n return () => {\n editor.off('selectionUpdate', updateLinkState)\n }\n }, [editor, onLinkActive, url])\n\n const setLink = React.useCallback(() => {\n if (!url || !editor) return\n\n const { from, to } = editor.state.selection\n const text = editor.state.doc.textBetween(from, to)\n\n editor\n .chain()\n .focus()\n .extendMarkRange('link')\n .insertContent({\n type: 'text',\n text: text || url,\n marks: [{ type: 'link', attrs: { href: url } }]\n })\n .run()\n\n onSetLink?.()\n }, [editor, onSetLink, url])\n\n const removeLink = React.useCallback(() => {\n if (!editor) return\n editor.chain().focus().unsetMark('link', { extendEmptyMarkRange: true }).setMeta('preventAutolink', true).run()\n setUrl('')\n }, [editor])\n\n return {\n url,\n setUrl,\n setLink,\n removeLink,\n isActive: editor?.isActive('link') || false\n }\n}\n\nexport const LinkButton = React.forwardRef<HTMLButtonElement, ButtonProps>(({ className, children, ...props }, ref) => {\n return (\n <Button type=\"button\" className={className} data-style=\"ghost\" role=\"button\" tabIndex={-1} aria-label=\"Link\" tooltip=\"链接\" ref={ref} {...props}>\n {children || <LinkIcon className=\"tiptap-button-icon\" />}\n </Button>\n )\n})\n\nexport const LinkContent: React.FC<{\n editor?: Editor | null\n}> = ({ editor: providedEditor }) => {\n const editor = useTiptapEditor(providedEditor)\n\n const linkHandler = useLinkHandler({\n editor: editor\n })\n\n return <LinkMain {...linkHandler} />\n}\n\nconst LinkMain: React.FC<LinkMainProps> = ({ url, setUrl, setLink, removeLink, isActive }) => {\n const handleKeyDown = (event: React.KeyboardEvent) => {\n if (event.key === 'Enter') {\n event.preventDefault()\n setLink()\n }\n }\n\n return (\n <>\n <input\n type=\"url\"\n placeholder=\"输入链接\"\n value={url}\n onChange={(e) => setUrl(e.target.value)}\n onKeyDown={handleKeyDown}\n autoComplete=\"off\"\n autoCorrect=\"off\"\n autoCapitalize=\"off\"\n className=\"tiptap-input tiptap-input-clamp\"\n />\n\n <div className=\"tiptap-button-group\" data-orientation=\"horizontal\">\n <Button type=\"button\" onClick={setLink} title=\"确认\" disabled={!url && !isActive} data-style=\"ghost\">\n <CornerDownLeftIcon className=\"tiptap-button-icon\" />\n </Button>\n </div>\n\n <Separator />\n\n <div className=\"tiptap-button-group\" data-orientation=\"horizontal\">\n <Button type=\"button\" onClick={() => window.open(url, '_blank')} title=\"新窗口打开\" disabled={!url && !isActive} data-style=\"ghost\">\n <ExternalLinkIcon className=\"tiptap-button-icon\" />\n </Button>\n\n <Button type=\"button\" onClick={removeLink} title=\"删除链接\" disabled={!url && !isActive} data-style=\"ghost\">\n <TrashIcon className=\"tiptap-button-icon\" />\n </Button>\n </div>\n </>\n )\n}\n\nexport interface LinkPopoverProps extends Omit<ButtonProps, 'type'> {\n /**\n * The TipTap editor instance.\n */\n editor?: Editor | null\n /**\n * Whether to hide the link popover.\n * @default false\n */\n hideWhenUnavailable?: boolean\n /**\n * Callback for when the popover opens or closes.\n */\n onOpenChange?: (isOpen: boolean) => void\n /**\n * Whether to automatically open the popover when a link is active.\n * @default true\n */\n autoOpenOnLinkActive?: boolean\n}\n\nexport function LinkPopover({\n editor: providedEditor,\n hideWhenUnavailable = false,\n onOpenChange,\n autoOpenOnLinkActive = true,\n ...props\n}: LinkPopoverProps) {\n const editor = useTiptapEditor(providedEditor)\n\n const linkInSchema = isMarkInSchema('link', editor)\n\n const [isOpen, setIsOpen] = React.useState(false)\n\n const onSetLink = () => {\n setIsOpen(false)\n }\n\n const onLinkActive = () => setIsOpen(autoOpenOnLinkActive)\n\n const linkHandler = useLinkHandler({\n editor: editor,\n onSetLink,\n onLinkActive\n })\n\n const isDisabled = React.useMemo(() => {\n if (!editor) return true\n if (editor.isActive('codeBlock')) return true\n return !editor.can().setLink?.({ href: '' })\n }, [editor])\n\n const canSetLink = React.useMemo(() => {\n if (!editor) return false\n try {\n return editor.can().setMark('link')\n } catch {\n return false\n }\n }, [editor])\n\n const isActive = editor?.isActive('link') ?? false\n\n const handleOnOpenChange = React.useCallback(\n (nextIsOpen: boolean) => {\n setIsOpen(nextIsOpen)\n onOpenChange?.(nextIsOpen)\n },\n [onOpenChange]\n )\n\n const show = React.useMemo(() => {\n if (!linkInSchema || !editor) {\n return false\n }\n\n if (hideWhenUnavailable) {\n if (isNodeSelection(editor.state.selection) || !canSetLink) {\n return false\n }\n }\n\n return true\n }, [linkInSchema, hideWhenUnavailable, editor, canSetLink])\n\n if (!show || !editor || !editor.isEditable) {\n return null\n }\n\n return (\n <Popover open={isOpen} onOpenChange={handleOnOpenChange}>\n <PopoverTrigger asChild>\n <LinkButton disabled={isDisabled} data-active-state={isActive ? 'on' : 'off'} data-disabled={isDisabled} {...props} />\n </PopoverTrigger>\n\n <PopoverContent>\n <LinkMain {...linkHandler} />\n </PopoverContent>\n </Popover>\n )\n}\n\nLinkButton.displayName = 'LinkButton'\n","import * as React from 'react'\n\nexport const ListIcon = React.memo(({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n return (\n <svg width=\"24\" height=\"24\" className={className} viewBox=\"0 0 24 24\" fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M7 6C7 5.44772 7.44772 5 8 5H21C21.5523 5 22 5.44772 22 6C22 6.55228 21.5523 7 21 7H8C7.44772 7 7 6.55228 7 6Z\"\n fill=\"currentColor\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M7 12C7 11.4477 7.44772 11 8 11H21C21.5523 11 22 11.4477 22 12C22 12.5523 21.5523 13 21 13H8C7.44772 13 7 12.5523 7 12Z\"\n fill=\"currentColor\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M7 18C7 17.4477 7.44772 17 8 17H21C21.5523 17 22 17.4477 22 18C22 18.5523 21.5523 19 21 19H8C7.44772 19 7 18.5523 7 18Z\"\n fill=\"currentColor\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M2 6C2 5.44772 2.44772 5 3 5H3.01C3.56228 5 4.01 5.44772 4.01 6C4.01 6.55228 3.56228 7 3.01 7H3C2.44772 7 2 6.55228 2 6Z\"\n fill=\"currentColor\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M2 12C2 11.4477 2.44772 11 3 11H3.01C3.56228 11 4.01 11.4477 4.01 12C4.01 12.5523 3.56228 13 3.01 13H3C2.44772 13 2 12.5523 2 12Z\"\n fill=\"currentColor\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M2 18C2 17.4477 2.44772 17 3 17H3.01C3.56228 17 4.01 17.4477 4.01 18C4.01 18.5523 3.56228 19 3.01 19H3C2.44772 19 2 18.5523 2 18Z\"\n fill=\"currentColor\"\n />\n </svg>\n )\n})\n\nListIcon.displayName = 'ListIcon'\n","import * as React from 'react'\n\nexport const ListOrderedIcon = React.memo(({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n return (\n <svg width=\"24\" height=\"24\" className={className} viewBox=\"0 0 24 24\" fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M9 6C9 5.44772 9.44772 5 10 5H21C21.5523 5 22 5.44772 22 6C22 6.55228 21.5523 7 21 7H10C9.44772 7 9 6.55228 9 6Z\"\n fill=\"currentColor\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M9 12C9 11.4477 9.44772 11 10 11H21C21.5523 11 22 11.4477 22 12C22 12.5523 21.5523 13 21 13H10C9.44772 13 9 12.5523 9 12Z\"\n fill=\"currentColor\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M9 18C9 17.4477 9.44772 17 10 17H21C21.5523 17 22 17.4477 22 18C22 18.5523 21.5523 19 21 19H10C9.44772 19 9 18.5523 9 18Z\"\n fill=\"currentColor\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M3 6C3 5.44772 3.44772 5 4 5H5C5.55228 5 6 5.44772 6 6V10C6 10.5523 5.55228 11 5 11C4.44772 11 4 10.5523 4 10V7C3.44772 7 3 6.55228 3 6Z\"\n fill=\"currentColor\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M3 10C3 9.44772 3.44772 9 4 9H6C6.55228 9 7 9.44772 7 10C7 10.5523 6.55228 11 6 11H4C3.44772 11 3 10.5523 3 10Z\"\n fill=\"currentColor\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M5.82219 13.0431C6.54543 13.4047 6.99997 14.1319 6.99997 15C6.99997 15.5763 6.71806 16.0426 6.48747 16.35C6.31395 16.5814 6.1052 16.8044 5.91309 17H5.99997C6.55226 17 6.99997 17.4477 6.99997 18C6.99997 18.5523 6.55226 19 5.99997 19H3.99997C3.44769 19 2.99997 18.5523 2.99997 18C2.99997 17.4237 3.28189 16.9575 3.51247 16.65C3.74323 16.3424 4.03626 16.0494 4.26965 15.8161C4.27745 15.8083 4.2852 15.8006 4.29287 15.7929C4.55594 15.5298 4.75095 15.3321 4.88748 15.15C4.96287 15.0495 4.99021 14.9922 4.99911 14.9714C4.99535 14.9112 4.9803 14.882 4.9739 14.8715C4.96613 14.8588 4.95382 14.845 4.92776 14.8319C4.87723 14.8067 4.71156 14.7623 4.44719 14.8944C3.95321 15.1414 3.35254 14.9412 3.10555 14.4472C2.85856 13.9533 3.05878 13.3526 3.55276 13.1056C4.28839 12.7378 5.12272 12.6934 5.82219 13.0431Z\"\n fill=\"currentColor\"\n />\n </svg>\n )\n})\n\nListOrderedIcon.displayName = 'ListOrderedIcon'\n","import * as React from 'react'\n\nexport const ListTodoIcon = React.memo(({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n return (\n <svg width=\"24\" height=\"24\" className={className} viewBox=\"0 0 24 24\" fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M2 6C2 4.89543 2.89543 4 4 4H8C9.10457 4 10 4.89543 10 6V10C10 11.1046 9.10457 12 8 12H4C2.89543 12 2 11.1046 2 10V6ZM8 6H4V10H8V6Z\"\n fill=\"currentColor\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M9.70711 14.2929C10.0976 14.6834 10.0976 15.3166 9.70711 15.7071L5.70711 19.7071C5.31658 20.0976 4.68342 20.0976 4.29289 19.7071L2.29289 17.7071C1.90237 17.3166 1.90237 16.6834 2.29289 16.2929C2.68342 15.9024 3.31658 15.9024 3.70711 16.2929L5 17.5858L8.29289 14.2929C8.68342 13.9024 9.31658 13.9024 9.70711 14.2929Z\"\n fill=\"currentColor\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M12 6C12 5.44772 12.4477 5 13 5H21C21.5523 5 22 5.44772 22 6C22 6.55228 21.5523 7 21 7H13C12.4477 7 12 6.55228 12 6Z\"\n fill=\"currentColor\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M12 12C12 11.4477 12.4477 11 13 11H21C21.5523 11 22 11.4477 22 12C22 12.5523 21.5523 13 21 13H13C12.4477 13 12 12.5523 12 12Z\"\n fill=\"currentColor\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M12 18C12 17.4477 12.4477 17 13 17H21C21.5523 17 22 17.4477 22 18C22 18.5523 21.5523 19 21 19H13C12.4477 19 12 18.5523 12 18Z\"\n fill=\"currentColor\"\n />\n </svg>\n )\n})\n\nListTodoIcon.displayName = 'ListTodoIcon'\n","import { isNodeSelection, type Editor } from '@tiptap/react'\nimport * as React from 'react'\n\n// --- Hooks ---\nimport { useTiptapEditor } from '../../../hooks/use-tiptap-editor'\n\n// --- Icons ---\nimport { ListIcon } from '../../tiptap-icons/list-icon'\nimport { ListOrderedIcon } from '../../tiptap-icons/list-ordered-icon'\nimport { ListTodoIcon } from '../../tiptap-icons/list-todo-icon'\n\n// --- Lib ---\nimport { isNodeInSchema } from '../../../lib/tiptap-utils'\n\n// --- UI Primitives ---\nimport type { ButtonProps } from '../../tiptap-ui-primitive/button'\nimport { Button } from '../../tiptap-ui-primitive/button'\n\nexport type ListType = 'bulletList' | 'orderedList' | 'taskList'\n\nexport interface ListOption {\n label: string\n type: ListType\n icon: React.ElementType\n}\n\nexport interface ListButtonProps extends Omit<ButtonProps, 'type'> {\n /**\n * The TipTap editor instance.\n */\n editor?: Editor | null\n /**\n * The type of list to toggle.\n */\n type: ListType\n /**\n * Optional text to display alongside the icon.\n */\n text?: string\n /**\n * Whether the button should hide when the list is not available.\n * @default false\n */\n hideWhenUnavailable?: boolean\n}\n\nexport const listOptions: ListOption[] = [\n {\n label: '无序列表',\n type: 'bulletList',\n icon: ListIcon\n },\n {\n label: '有序列表',\n type: 'orderedList',\n icon: ListOrderedIcon\n },\n {\n label: '任务列表',\n type: 'taskList',\n icon: ListTodoIcon\n }\n]\n\nexport const listShortcutKeys: Record<ListType, string> = {\n bulletList: 'Ctrl-Shift-8',\n orderedList: 'Ctrl-Shift-7',\n taskList: 'Ctrl-Shift-9'\n}\n\nexport function canToggleList(editor: Editor | null, type: ListType): boolean {\n if (!editor) {\n return false\n }\n\n switch (type) {\n case 'bulletList':\n return editor.can().toggleBulletList()\n case 'orderedList':\n return editor.can().toggleOrderedList()\n case 'taskList':\n return editor.can().toggleList('taskList', 'taskItem')\n default:\n return false\n }\n}\n\nexport function isListActive(editor: Editor | null, type: ListType): boolean {\n if (!editor) return false\n\n switch (type) {\n case 'bulletList':\n return editor.isActive('bulletList')\n case 'orderedList':\n return editor.isActive('orderedList')\n case 'taskList':\n return editor.isActive('taskList')\n default:\n return false\n }\n}\n\nexport function toggleList(editor: Editor | null, type: ListType): void {\n if (!editor) return\n\n switch (type) {\n case 'bulletList':\n editor.chain().focus().toggleBulletList().run()\n break\n case 'orderedList':\n editor.chain().focus().toggleOrderedList().run()\n break\n case 'taskList':\n editor.chain().focus().toggleList('taskList', 'taskItem').run()\n break\n }\n}\n\nexport function getListOption(type: ListType): ListOption | undefined {\n return listOptions.find((option) => option.type === type)\n}\n\nexport function shouldShowListButton(params: {\n editor: Editor | null\n type: ListType\n hideWhenUnavailable: boolean\n listInSchema: boolean\n}): boolean {\n const { editor, type, hideWhenUnavailable, listInSchema } = params\n\n if (!listInSchema || !editor) {\n return false\n }\n\n if (hideWhenUnavailable) {\n if (isNodeSelection(editor.state.selection) || !canToggleList(editor, type)) {\n return false\n }\n }\n\n return true\n}\n\nexport function useListState(editor: Editor | null, type: ListType) {\n const listInSchema = isNodeInSchema(type, editor)\n const listOption = getListOption(type)\n const isActive = isListActive(editor, type)\n const shortcutKey = listShortcutKeys[type]\n\n return {\n listInSchema,\n listOption,\n isActive,\n shortcutKey\n }\n}\n\nexport const ListButton = React.forwardRef<HTMLButtonElement, ListButtonProps>(\n ({ editor: providedEditor, type, hideWhenUnavailable = false, className = '', onClick, text, children, ...buttonProps }, ref) => {\n const editor = useTiptapEditor(providedEditor)\n const { listInSchema, listOption, isActive, shortcutKey } = useListState(editor, type)\n\n const Icon = listOption?.icon || ListIcon\n\n const handleClick = React.useCallback(\n (e: React.MouseEvent<HTMLButtonElement>) => {\n onClick?.(e)\n\n if (!e.defaultPrevented && editor) {\n toggleList(editor, type)\n }\n },\n [onClick, editor, type]\n )\n\n const show = React.useMemo(() => {\n return shouldShowListButton({\n editor,\n type,\n hideWhenUnavailable,\n listInSchema\n })\n }, [editor, type, hideWhenUnavailable, listInSchema])\n\n if (!show || !editor || !editor.isEditable) {\n return null\n }\n\n return (\n <Button\n type=\"button\"\n className={className.trim()}\n data-style=\"ghost\"\n data-active-state={isActive ? 'on' : 'off'}\n role=\"button\"\n tabIndex={-1}\n aria-label={listOption?.label || type}\n aria-pressed={isActive}\n tooltip={listOption?.label || type}\n shortcutKeys={shortcutKey}\n onClick={handleClick}\n {...buttonProps}\n ref={ref}\n >\n {children || (\n <>\n <Icon className=\"tiptap-button-icon\" />\n {text && <span className=\"tiptap-button-text\">{text}</span>}\n </>\n )}\n </Button>\n )\n }\n)\n\nListButton.displayName = 'ListButton'\n\nexport default ListButton\n","import { isNodeSelection, type Editor } from '@tiptap/react'\nimport * as React from 'react'\n\n// --- Hooks ---\nimport { useTiptapEditor } from '../../../hooks/use-tiptap-editor'\n\n// --- Icons ---\nimport { ChevronDownIcon } from '../../tiptap-icons/chevron-down-icon'\nimport { ListIcon } from '../../tiptap-icons/list-icon'\n\n// --- Lib ---\nimport { isNodeInSchema } from '../../../lib/tiptap-utils'\n\n// --- Tiptap UI ---\nimport {\n ListButton,\n canToggleList,\n isListActive,\n listOptions,\n type ListType\n} from '../../tiptap-ui/list-button/list-button'\n\n// --- UI Primitives ---\nimport type { ButtonProps } from '../../tiptap-ui-primitive/button'\nimport { Button } from '../../tiptap-ui-primitive/button'\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuTrigger\n} from '../../tiptap-ui-primitive/dropdown-menu'\n\nexport interface ListDropdownMenuProps extends Omit<ButtonProps, 'type'> {\n /**\n * The TipTap editor instance.\n */\n editor?: Editor\n /**\n * The list types to display in the dropdown.\n */\n types?: ListType[]\n /**\n * Whether the dropdown should be hidden when no list types are available\n * @default false\n */\n hideWhenUnavailable?: boolean\n onOpenChange?: (isOpen: boolean) => void\n}\n\nexport function canToggleAnyList(editor: Editor | null, listTypes: ListType[]): boolean {\n if (!editor) return false\n return listTypes.some((type) => canToggleList(editor, type))\n}\n\nexport function isAnyListActive(editor: Editor | null, listTypes: ListType[]): boolean {\n if (!editor) return false\n return listTypes.some((type) => isListActive(editor, type))\n}\n\nexport function getFilteredListOptions(availableTypes: ListType[]): typeof listOptions {\n return listOptions.filter((option) => !option.type || availableTypes.includes(option.type))\n}\n\nexport function shouldShowListDropdown(params: {\n editor: Editor | null\n listTypes: ListType[]\n hideWhenUnavailable: boolean\n listInSchema: boolean\n canToggleAny: boolean\n}): boolean {\n const { editor, hideWhenUnavailable, listInSchema, canToggleAny } = params\n\n if (!listInSchema || !editor) {\n return false\n }\n\n if (hideWhenUnavailable) {\n if (isNodeSelection(editor.state.selection) || !canToggleAny) {\n return false\n }\n }\n\n return true\n}\n\nexport function useListDropdownState(editor: Editor | null, availableTypes: ListType[]) {\n const [isOpen, setIsOpen] = React.useState(false)\n\n const listInSchema = availableTypes.some((type) => isNodeInSchema(type, editor))\n\n const filteredLists = React.useMemo(() => getFilteredListOptions(availableTypes), [availableTypes])\n\n const canToggleAny = canToggleAnyList(editor, availableTypes)\n const isAnyActive = isAnyListActive(editor, availableTypes)\n\n const handleOpenChange = React.useCallback((open: boolean, callback?: (isOpen: boolean) => void) => {\n setIsOpen(open)\n callback?.(open)\n }, [])\n\n return {\n isOpen,\n setIsOpen,\n listInSchema,\n filteredLists,\n canToggleAny,\n isAnyActive,\n handleOpenChange\n }\n}\n\nexport function useActiveListIcon(editor: Editor | null, filteredLists: typeof listOptions) {\n return React.useCallback(() => {\n const activeOption = filteredLists.find((option) => isListActive(editor, option.type))\n\n return activeOption ? <activeOption.icon className=\"tiptap-button-icon\" /> : <ListIcon className=\"tiptap-button-icon\" />\n }, [editor, filteredLists])\n}\n\nexport function ListDropdownMenu({\n editor: providedEditor,\n types = ['bulletList', 'orderedList', 'taskList'],\n hideWhenUnavailable = false,\n onOpenChange,\n ...props\n}: ListDropdownMenuProps) {\n const editor = useTiptapEditor(providedEditor)\n\n const { isOpen, listInSchema, filteredLists, canToggleAny, isAnyActive, handleOpenChange } = useListDropdownState(editor, types)\n\n const getActiveIcon = useActiveListIcon(editor, filteredLists)\n\n const show = React.useMemo(() => {\n return shouldShowListDropdown({\n editor,\n listTypes: types,\n hideWhenUnavailable,\n listInSchema,\n canToggleAny\n })\n }, [editor, types, hideWhenUnavailable, listInSchema, canToggleAny])\n\n const handleOnOpenChange = React.useCallback((open: boolean) => handleOpenChange(open, onOpenChange), [handleOpenChange, onOpenChange])\n\n if (!show || !editor || !editor.isEditable) {\n return null\n }\n\n return (\n <DropdownMenu open={isOpen} onOpenChange={handleOnOpenChange}>\n <DropdownMenuTrigger asChild>\n <Button\n type=\"button\"\n data-style=\"ghost\"\n data-active-state={isAnyActive ? 'on' : 'off'}\n role=\"button\"\n tabIndex={-1}\n aria-label=\"List options\"\n tooltip=\"列表\"\n {...props}\n >\n {getActiveIcon()}\n <ChevronDownIcon className=\"tiptap-button-dropdown-small\" />\n </Button>\n </DropdownMenuTrigger>\n\n <DropdownMenuContent>\n <DropdownMenuGroup>\n {filteredLists.map((option) => (\n <DropdownMenuItem key={option.type} asChild>\n <ListButton editor={editor} type={option.type} text={option.label} hideWhenUnavailable={hideWhenUnavailable} tooltip={''} />\n </DropdownMenuItem>\n ))}\n </DropdownMenuGroup>\n </DropdownMenuContent>\n </DropdownMenu>\n )\n}\n\nexport default ListDropdownMenu\n","import * as React from 'react'\n\nexport const BoldIcon = React.memo(({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n return (\n <svg width=\"24\" height=\"24\" className={className} viewBox=\"0 0 24 24\" fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M6 2.5C5.17157 2.5 4.5 3.17157 4.5 4V20C4.5 20.8284 5.17157 21.5 6 21.5H15C16.4587 21.5 17.8576 20.9205 18.8891 19.8891C19.9205 18.8576 20.5 17.4587 20.5 16C20.5 14.5413 19.9205 13.1424 18.8891 12.1109C18.6781 11.9 18.4518 11.7079 18.2128 11.5359C19.041 10.5492 19.5 9.29829 19.5 8C19.5 6.54131 18.9205 5.14236 17.8891 4.11091C16.8576 3.07946 15.4587 2.5 14 2.5H6ZM14 10.5C14.663 10.5 15.2989 10.2366 15.7678 9.76777C16.2366 9.29893 16.5 8.66304 16.5 8C16.5 7.33696 16.2366 6.70107 15.7678 6.23223C15.2989 5.76339 14.663 5.5 14 5.5H7.5V10.5H14ZM7.5 18.5V13.5H15C15.663 13.5 16.2989 13.7634 16.7678 14.2322C17.2366 14.7011 17.5 15.337 17.5 16C17.5 16.663 17.2366 17.2989 16.7678 17.7678C16.2989 18.2366 15.663 18.5 15 18.5H7.5Z\"\n fill=\"currentColor\"\n />\n </svg>\n )\n})\n\nBoldIcon.displayName = 'BoldIcon'\n","import * as React from 'react'\n\nexport const Code2Icon = React.memo(({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n return (\n <svg width=\"24\" height=\"24\" className={className} viewBox=\"0 0 24 24\" fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n d=\"M15.4545 4.2983C15.6192 3.77115 15.3254 3.21028 14.7983 3.04554C14.2712 2.88081 13.7103 3.1746 13.5455 3.70175L8.54554 19.7017C8.38081 20.2289 8.6746 20.7898 9.20175 20.9545C9.72889 21.1192 10.2898 20.8254 10.4545 20.2983L15.4545 4.2983Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M6.70711 7.29289C7.09763 7.68342 7.09763 8.31658 6.70711 8.70711L3.41421 12L6.70711 15.2929C7.09763 15.6834 7.09763 16.3166 6.70711 16.7071C6.31658 17.0976 5.68342 17.0976 5.29289 16.7071L1.29289 12.7071C0.902369 12.3166 0.902369 11.6834 1.29289 11.2929L5.29289 7.29289C5.68342 6.90237 6.31658 6.90237 6.70711 7.29289Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M17.2929 7.29289C17.6834 6.90237 18.3166 6.90237 18.7071 7.29289L22.7071 11.2929C23.0976 11.6834 23.0976 12.3166 22.7071 12.7071L18.7071 16.7071C18.3166 17.0976 17.6834 17.0976 17.2929 16.7071C16.9024 16.3166 16.9024 15.6834 17.2929 15.2929L20.5858 12L17.2929 8.70711C16.9024 8.31658 16.9024 7.68342 17.2929 7.29289Z\"\n fill=\"currentColor\"\n />\n </svg>\n )\n})\n\nCode2Icon.displayName = 'Code2Icon'\n","import * as React from 'react'\n\nexport const ItalicIcon = React.memo(({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n return (\n <svg width=\"24\" height=\"24\" className={className} viewBox=\"0 0 24 24\" fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n d=\"M15.0222 3H19C19.5523 3 20 3.44772 20 4C20 4.55228 19.5523 5 19 5H15.693L10.443 19H14C14.5523 19 15 19.4477 15 20C15 20.5523 14.5523 21 14 21H9.02418C9.00802 21.0004 8.99181 21.0004 8.97557 21H5C4.44772 21 4 20.5523 4 20C4 19.4477 4.44772 19 5 19H8.30704L13.557 5H10C9.44772 5 9 4.55228 9 4C9 3.44772 9.44772 3 10 3H14.9782C14.9928 2.99968 15.0075 2.99967 15.0222 3Z\"\n fill=\"currentColor\"\n />\n </svg>\n )\n})\n\nItalicIcon.displayName = 'ItalicIcon'\n","import * as React from 'react'\n\nexport const StrikeIcon = React.memo(({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n return (\n <svg width=\"24\" height=\"24\" className={className} viewBox=\"0 0 24 24\" fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n d=\"M9.00039 3H16.0001C16.5524 3 17.0001 3.44772 17.0001 4C17.0001 4.55229 16.5524 5 16.0001 5H9.00011C8.68006 4.99983 8.36412 5.07648 8.07983 5.22349C7.79555 5.37051 7.55069 5.5836 7.36585 5.84487C7.181 6.10614 7.06155 6.40796 7.01754 6.72497C6.97352 7.04198 7.00623 7.36492 7.11292 7.66667C7.29701 8.18737 7.02414 8.75872 6.50344 8.94281C5.98274 9.1269 5.4114 8.85403 5.2273 8.33333C5.01393 7.72984 4.94851 7.08396 5.03654 6.44994C5.12456 5.81592 5.36346 5.21229 5.73316 4.68974C6.10285 4.1672 6.59256 3.74101 7.16113 3.44698C7.72955 3.15303 8.36047 2.99975 9.00039 3Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M18 13H20C20.5523 13 21 12.5523 21 12C21 11.4477 20.5523 11 20 11H4C3.44772 11 3 11.4477 3 12C3 12.5523 3.44772 13 4 13H14C14.7956 13 15.5587 13.3161 16.1213 13.8787C16.6839 14.4413 17 15.2044 17 16C17 16.7956 16.6839 17.5587 16.1213 18.1213C15.5587 18.6839 14.7956 19 14 19H6C5.44772 19 5 19.4477 5 20C5 20.5523 5.44772 21 6 21H14C15.3261 21 16.5979 20.4732 17.5355 19.5355C18.4732 18.5979 19 17.3261 19 16C19 14.9119 18.6453 13.8604 18 13Z\"\n fill=\"currentColor\"\n />\n </svg>\n )\n})\n\nStrikeIcon.displayName = 'StrikeIcon'\n","import * as React from 'react'\n\nexport const SubscriptIcon = React.memo(({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n return (\n <svg width=\"24\" height=\"24\" className={className} viewBox=\"0 0 24 24\" fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M3.29289 7.29289C3.68342 6.90237 4.31658 6.90237 4.70711 7.29289L12.7071 15.2929C13.0976 15.6834 13.0976 16.3166 12.7071 16.7071C12.3166 17.0976 11.6834 17.0976 11.2929 16.7071L3.29289 8.70711C2.90237 8.31658 2.90237 7.68342 3.29289 7.29289Z\"\n fill=\"currentColor\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M12.7071 7.29289C13.0976 7.68342 13.0976 8.31658 12.7071 8.70711L4.70711 16.7071C4.31658 17.0976 3.68342 17.0976 3.29289 16.7071C2.90237 16.3166 2.90237 15.6834 3.29289 15.2929L11.2929 7.29289C11.6834 6.90237 12.3166 6.90237 12.7071 7.29289Z\"\n fill=\"currentColor\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M17.4079 14.3995C18.0284 14.0487 18.7506 13.9217 19.4536 14.0397C20.1566 14.1578 20.7977 14.5138 21.2696 15.0481L21.2779 15.0574L21.2778 15.0575C21.7439 15.5988 22 16.2903 22 17C22 18.0823 21.3962 18.8401 20.7744 19.3404C20.194 19.8073 19.4858 20.141 18.9828 20.378C18.9638 20.387 18.9451 20.3958 18.9266 20.4045C18.4473 20.6306 18.2804 20.7817 18.1922 20.918C18.1773 20.9412 18.1619 20.9681 18.1467 21H21C21.5523 21 22 21.4477 22 22C22 22.5523 21.5523 23 21 23H17C16.4477 23 16 22.5523 16 22C16 21.1708 16.1176 20.4431 16.5128 19.832C16.9096 19.2184 17.4928 18.8695 18.0734 18.5956C18.6279 18.334 19.138 18.0901 19.5207 17.7821C19.8838 17.49 20 17.2477 20 17C20 16.7718 19.9176 16.5452 19.7663 16.3672C19.5983 16.1792 19.3712 16.0539 19.1224 16.0121C18.8722 15.9701 18.6152 16.015 18.3942 16.1394C18.1794 16.2628 18.0205 16.4549 17.9422 16.675C17.7572 17.1954 17.1854 17.4673 16.665 17.2822C16.1446 17.0972 15.8728 16.5254 16.0578 16.005C16.2993 15.3259 16.7797 14.7584 17.4039 14.4018L17.4079 14.3995L17.4079 14.3995Z\"\n fill=\"currentColor\"\n />\n </svg>\n )\n})\n\nSubscriptIcon.displayName = 'SubscriptIcon'\n","import * as React from 'react'\n\nexport const SuperscriptIcon = React.memo(({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n return (\n <svg width=\"24\" height=\"24\" className={className} viewBox=\"0 0 24 24\" fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M12.7071 7.29289C13.0976 7.68342 13.0976 8.31658 12.7071 8.70711L4.70711 16.7071C4.31658 17.0976 3.68342 17.0976 3.29289 16.7071C2.90237 16.3166 2.90237 15.6834 3.29289 15.2929L11.2929 7.29289C11.6834 6.90237 12.3166 6.90237 12.7071 7.29289Z\"\n fill=\"currentColor\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M3.29289 7.29289C3.68342 6.90237 4.31658 6.90237 4.70711 7.29289L12.7071 15.2929C13.0976 15.6834 13.0976 16.3166 12.7071 16.7071C12.3166 17.0976 11.6834 17.0976 11.2929 16.7071L3.29289 8.70711C2.90237 8.31658 2.90237 7.68342 3.29289 7.29289Z\"\n fill=\"currentColor\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M17.405 1.40657C18.0246 1.05456 18.7463 0.92634 19.4492 1.04344C20.1521 1.16054 20.7933 1.51583 21.2652 2.0497L21.2697 2.05469L21.2696 2.05471C21.7431 2.5975 22 3.28922 22 4.00203C22 5.08579 21.3952 5.84326 20.7727 6.34289C20.1966 6.80531 19.4941 7.13675 18.9941 7.37261C18.9714 7.38332 18.9491 7.39383 18.9273 7.40415C18.4487 7.63034 18.2814 7.78152 18.1927 7.91844C18.1778 7.94155 18.1625 7.96834 18.1473 8.00003H21C21.5523 8.00003 22 8.44774 22 9.00003C22 9.55231 21.5523 10 21 10H17C16.4477 10 16 9.55231 16 9.00003C16 8.17007 16.1183 7.44255 16.5138 6.83161C16.9107 6.21854 17.4934 5.86971 18.0728 5.59591C18.6281 5.33347 19.1376 5.09075 19.5208 4.78316C19.8838 4.49179 20 4.25026 20 4.00203C20 3.77192 19.9178 3.54865 19.7646 3.37182C19.5968 3.18324 19.3696 3.05774 19.1205 3.01625C18.8705 2.97459 18.6137 3.02017 18.3933 3.14533C18.1762 3.26898 18.0191 3.45826 17.9406 3.67557C17.7531 4.19504 17.18 4.46414 16.6605 4.27662C16.141 4.0891 15.8719 3.51596 16.0594 2.99649C16.303 2.3219 16.7817 1.76125 17.4045 1.40689L17.405 1.40657Z\"\n fill=\"currentColor\"\n />\n </svg>\n )\n})\n\nSuperscriptIcon.displayName = 'SuperscriptIcon'\n","import * as React from 'react'\n\nexport const UnderlineIcon = React.memo(({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n return (\n <svg width=\"24\" height=\"24\" className={className} viewBox=\"0 0 24 24\" fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M7 4C7 3.44772 6.55228 3 6 3C5.44772 3 5 3.44772 5 4V10C5 11.8565 5.7375 13.637 7.05025 14.9497C8.36301 16.2625 10.1435 17 12 17C13.8565 17 15.637 16.2625 16.9497 14.9497C18.2625 13.637 19 11.8565 19 10V4C19 3.44772 18.5523 3 18 3C17.4477 3 17 3.44772 17 4V10C17 11.3261 16.4732 12.5979 15.5355 13.5355C14.5979 14.4732 13.3261 15 12 15C10.6739 15 9.40215 14.4732 8.46447 13.5355C7.52678 12.5979 7 11.3261 7 10V4ZM4 19C3.44772 19 3 19.4477 3 20C3 20.5523 3.44772 21 4 21H20C20.5523 21 21 20.5523 21 20C21 19.4477 20.5523 19 20 19H4Z\"\n fill=\"currentColor\"\n />\n </svg>\n )\n})\n\nUnderlineIcon.displayName = 'UnderlineIcon'\n","import { isNodeSelection, type Editor } from '@tiptap/react'\nimport * as React from 'react'\n\n// --- Hooks ---\nimport { useTiptapEditor } from '../../../hooks/use-tiptap-editor'\n\n// --- Icons ---\nimport { BoldIcon } from '../../tiptap-icons/bold-icon'\nimport { Code2Icon } from '../../tiptap-icons/code2-icon'\nimport { ItalicIcon } from '../../tiptap-icons/italic-icon'\nimport { StrikeIcon } from '../../tiptap-icons/strike-icon'\nimport { SubscriptIcon } from '../../tiptap-icons/subscript-icon'\nimport { SuperscriptIcon } from '../../tiptap-icons/superscript-icon'\nimport { UnderlineIcon } from '../../tiptap-icons/underline-icon'\n\n// --- Lib ---\nimport { isMarkInSchema } from '../../../lib/tiptap-utils'\n\n// --- UI Primitives ---\nimport type { ButtonProps } from '../../tiptap-ui-primitive/button'\nimport { Button } from '../../tiptap-ui-primitive/button'\n\nexport type Mark = 'bold' | 'italic' | 'strike' | 'code' | 'underline' | 'superscript' | 'subscript'\n\nexport interface MarkButtonProps extends Omit<ButtonProps, 'type'> {\n /**\n * The type of mark to toggle\n */\n type: Mark\n /**\n * Optional editor instance. If not provided, will use editor from context\n */\n editor?: Editor | null\n /**\n * Display text for the button (optional)\n */\n text?: string\n /**\n * Whether this button should be hidden when the mark is not available\n */\n hideWhenUnavailable?: boolean\n}\n\nexport const markIcons = {\n bold: BoldIcon,\n italic: ItalicIcon,\n underline: UnderlineIcon,\n strike: StrikeIcon,\n code: Code2Icon,\n superscript: SuperscriptIcon,\n subscript: SubscriptIcon\n}\n\nexport const markShortcutKeys: Partial<Record<Mark, string>> = {\n bold: 'Ctrl-b',\n italic: 'Ctrl-i',\n underline: 'Ctrl-u',\n strike: 'Ctrl-Shift-s',\n code: 'Ctrl-e',\n superscript: 'Ctrl-.',\n subscript: 'Ctrl-,'\n}\nexport const markActionLabels: Partial<Record<Mark, string>> = {\n bold: '粗体',\n italic: '斜体',\n underline: '下划线',\n strike: '删除线',\n code: '代码',\n superscript: '上角标',\n subscript: '下角标'\n}\n\nexport function canToggleMark(editor: Editor | null, type: Mark): boolean {\n if (!editor) return false\n\n try {\n return editor.can().toggleMark(type)\n } catch {\n return false\n }\n}\n\nexport function isMarkActive(editor: Editor | null, type: Mark): boolean {\n if (!editor) return false\n return editor.isActive(type)\n}\n\nexport function toggleMark(editor: Editor | null, type: Mark): void {\n if (!editor) return\n editor.chain().focus().toggleMark(type).run()\n}\n\nexport function isMarkButtonDisabled(editor: Editor | null, type: Mark, userDisabled: boolean = false): boolean {\n if (!editor) return true\n if (userDisabled) return true\n if (editor.isActive('codeBlock')) return true\n if (!canToggleMark(editor, type)) return true\n return false\n}\n\nexport function shouldShowMarkButton(params: { editor: Editor | null; type: Mark; hideWhenUnavailable: boolean; markInSchema: boolean }): boolean {\n const { editor, type, hideWhenUnavailable, markInSchema } = params\n\n if (!markInSchema || !editor) {\n return false\n }\n\n if (hideWhenUnavailable) {\n if (isNodeSelection(editor.state.selection) || !canToggleMark(editor, type)) {\n return false\n }\n }\n\n return true\n}\n\nexport function getFormattedMarkName(type: Mark): string {\n return markActionLabels[type] || type.charAt(0).toUpperCase() + type.slice(1)\n}\n\nexport function useMarkState(editor: Editor | null, type: Mark, disabled: boolean = false) {\n const markInSchema = isMarkInSchema(type, editor)\n const isDisabled = isMarkButtonDisabled(editor, type, disabled)\n const isActive = isMarkActive(editor, type)\n\n const Icon = markIcons[type]\n const shortcutKey = markShortcutKeys[type]\n const formattedName = getFormattedMarkName(type)\n\n return {\n markInSchema,\n isDisabled,\n isActive,\n Icon,\n shortcutKey,\n formattedName\n }\n}\n\nexport const MarkButton = React.forwardRef<HTMLButtonElement, MarkButtonProps>(\n ({ editor: providedEditor, type, text, hideWhenUnavailable = false, className = '', disabled, onClick, children, ...buttonProps }, ref) => {\n const editor = useTiptapEditor(providedEditor)\n\n const { markInSchema, isDisabled, isActive, Icon, shortcutKey, formattedName } = useMarkState(editor, type, disabled)\n\n const handleClick = React.useCallback(\n (e: React.MouseEvent<HTMLButtonElement>) => {\n onClick?.(e)\n\n if (!e.defaultPrevented && !isDisabled && editor) {\n toggleMark(editor, type)\n }\n },\n [onClick, isDisabled, editor, type]\n )\n\n const show = React.useMemo(() => {\n return shouldShowMarkButton({\n editor,\n type,\n hideWhenUnavailable,\n markInSchema\n })\n }, [editor, type, hideWhenUnavailable, markInSchema])\n\n if (!show || !editor || !editor.isEditable) {\n return null\n }\n\n return (\n <Button\n type=\"button\"\n className={className.trim()}\n disabled={isDisabled}\n data-style=\"ghost\"\n data-active-state={isActive ? 'on' : 'off'}\n data-disabled={isDisabled}\n role=\"button\"\n tabIndex={-1}\n aria-label={type}\n aria-pressed={isActive}\n tooltip={formattedName}\n shortcutKeys={shortcutKey}\n onClick={handleClick}\n {...buttonProps}\n ref={ref}\n >\n {children || (\n <>\n <Icon className=\"tiptap-button-icon\" />\n {text && <span className=\"tiptap-button-text\">{text}</span>}\n </>\n )}\n </Button>\n )\n }\n)\n\nMarkButton.displayName = 'MarkButton'\n\nexport default MarkButton\n","import * as React from 'react'\n\nexport const BlockQuoteIcon = React.memo(({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n return (\n <svg width=\"24\" height=\"24\" className={className} viewBox=\"0 0 24 24\" fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M8 6C8 5.44772 8.44772 5 9 5H16C16.5523 5 17 5.44772 17 6C17 6.55228 16.5523 7 16 7H9C8.44772 7 8 6.55228 8 6Z\"\n fill=\"currentColor\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M4 3C4.55228 3 5 3.44772 5 4L5 20C5 20.5523 4.55229 21 4 21C3.44772 21 3 20.5523 3 20L3 4C3 3.44772 3.44772 3 4 3Z\"\n fill=\"currentColor\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M8 12C8 11.4477 8.44772 11 9 11H20C20.5523 11 21 11.4477 21 12C21 12.5523 20.5523 13 20 13H9C8.44772 13 8 12.5523 8 12Z\"\n fill=\"currentColor\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M8 18C8 17.4477 8.44772 17 9 17H16C16.5523 17 17 17.4477 17 18C17 18.5523 16.5523 19 16 19H9C8.44772 19 8 18.5523 8 18Z\"\n fill=\"currentColor\"\n />\n </svg>\n )\n})\n\nBlockQuoteIcon.displayName = 'BlockQuoteIcon'\n","import * as React from 'react'\n\nexport const CodeBlockIcon = React.memo(({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n return (\n <svg width=\"24\" height=\"24\" className={className} viewBox=\"0 0 24 24\" fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M6.70711 2.29289C7.09763 2.68342 7.09763 3.31658 6.70711 3.70711L4.41421 6L6.70711 8.29289C7.09763 8.68342 7.09763 9.31658 6.70711 9.70711C6.31658 10.0976 5.68342 10.0976 5.29289 9.70711L2.29289 6.70711C1.90237 6.31658 1.90237 5.68342 2.29289 5.29289L5.29289 2.29289C5.68342 1.90237 6.31658 1.90237 6.70711 2.29289Z\"\n fill=\"currentColor\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M10.2929 2.29289C10.6834 1.90237 11.3166 1.90237 11.7071 2.29289L14.7071 5.29289C15.0976 5.68342 15.0976 6.31658 14.7071 6.70711L11.7071 9.70711C11.3166 10.0976 10.6834 10.0976 10.2929 9.70711C9.90237 9.31658 9.90237 8.68342 10.2929 8.29289L12.5858 6L10.2929 3.70711C9.90237 3.31658 9.90237 2.68342 10.2929 2.29289Z\"\n fill=\"currentColor\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M17 4C17 3.44772 17.4477 3 18 3H19C20.6569 3 22 4.34315 22 6V18C22 19.6569 20.6569 21 19 21H5C3.34315 21 2 19.6569 2 18V12C2 11.4477 2.44772 11 3 11C3.55228 11 4 11.4477 4 12V18C4 18.5523 4.44772 19 5 19H19C19.5523 19 20 18.5523 20 18V6C20 5.44772 19.5523 5 19 5H18C17.4477 5 17 4.55228 17 4Z\"\n fill=\"currentColor\"\n />\n </svg>\n )\n})\n\nCodeBlockIcon.displayName = 'CodeBlockIcon'\n","import { isNodeSelection, type Editor } from '@tiptap/react'\nimport * as React from 'react'\n\n// --- Hooks ---\nimport { useTiptapEditor } from '../../../hooks/use-tiptap-editor'\n\n// --- Icons ---\nimport { BlockQuoteIcon } from '../../tiptap-icons/block-quote-icon'\nimport { CodeBlockIcon } from '../../tiptap-icons/code-block-icon'\n\n// --- Lib ---\nimport { isNodeInSchema } from '../../../lib/tiptap-utils'\n\n// --- UI Primitives ---\nimport type { ButtonProps } from '../../tiptap-ui-primitive/button'\nimport { Button } from '../../tiptap-ui-primitive/button'\n\nexport type NodeType = 'codeBlock' | 'blockquote'\n\nexport interface NodeButtonProps extends Omit<ButtonProps, 'type'> {\n /**\n * The TipTap editor instance.\n */\n editor?: Editor | null\n /**\n * The type of node to toggle.\n */\n type: NodeType\n /**\n * Optional text to display alongside the icon.\n */\n text?: string\n /**\n * Whether the button should hide when the node is not available.\n * @default false\n */\n hideWhenUnavailable?: boolean\n}\n\nexport const nodeIcons = {\n codeBlock: CodeBlockIcon,\n blockquote: BlockQuoteIcon\n}\n\nexport const nodeShortcutKeys: Partial<Record<NodeType, string>> = {\n codeBlock: 'Ctrl-Alt-c',\n blockquote: 'Ctrl-Shift-b'\n}\n\nexport const nodeLabels: Record<NodeType, string> = {\n codeBlock: '代码块',\n blockquote: '引用块'\n}\n\nexport function canToggleNode(editor: Editor | null, type: NodeType): boolean {\n if (!editor) return false\n\n try {\n return type === 'codeBlock' ? editor.can().toggleNode('codeBlock', 'paragraph') : editor.can().toggleWrap('blockquote')\n } catch {\n return false\n }\n}\n\nexport function isNodeActive(editor: Editor | null, type: NodeType): boolean {\n if (!editor) return false\n return editor.isActive(type)\n}\n\nexport function toggleNode(editor: Editor | null, type: NodeType): boolean {\n if (!editor) return false\n\n if (type === 'codeBlock') {\n return editor.chain().focus().toggleNode('codeBlock', 'paragraph').run()\n } else {\n return editor.chain().focus().toggleWrap('blockquote').run()\n }\n}\n\nexport function isNodeButtonDisabled(editor: Editor | null, canToggle: boolean, userDisabled: boolean = false): boolean {\n if (!editor) return true\n if (userDisabled) return true\n if (!canToggle) return true\n return false\n}\n\nexport function shouldShowNodeButton(params: {\n editor: Editor | null\n type: NodeType\n hideWhenUnavailable: boolean\n nodeInSchema: boolean\n canToggle: boolean\n}): boolean {\n const { editor, hideWhenUnavailable, nodeInSchema, canToggle } = params\n\n if (!nodeInSchema || !editor) {\n return false\n }\n\n if (hideWhenUnavailable) {\n if (isNodeSelection(editor.state.selection) || !canToggle) {\n return false\n }\n }\n\n return Boolean(editor?.isEditable)\n}\n\nexport function formatNodeName(type: NodeType): string {\n return type.charAt(0).toUpperCase() + type.slice(1)\n}\n\nexport function useNodeState(editor: Editor | null, type: NodeType, disabled: boolean = false, hideWhenUnavailable: boolean = false) {\n const nodeInSchema = isNodeInSchema(type, editor)\n\n const canToggle = canToggleNode(editor, type)\n const isDisabled = isNodeButtonDisabled(editor, canToggle, disabled)\n const isActive = isNodeActive(editor, type)\n\n const shouldShow = React.useMemo(\n () =>\n shouldShowNodeButton({\n editor,\n type,\n hideWhenUnavailable,\n nodeInSchema,\n canToggle\n }),\n [editor, type, hideWhenUnavailable, nodeInSchema, canToggle]\n )\n\n const handleToggle = React.useCallback(() => {\n if (!isDisabled && editor) {\n return toggleNode(editor, type)\n }\n return false\n }, [editor, type, isDisabled])\n\n const Icon = nodeIcons[type]\n const shortcutKey = nodeShortcutKeys[type]\n const label = nodeLabels[type]\n\n return {\n nodeInSchema,\n canToggle,\n isDisabled,\n isActive,\n shouldShow,\n handleToggle,\n Icon,\n shortcutKey,\n label\n }\n}\n\nexport const NodeButton = React.forwardRef<HTMLButtonElement, NodeButtonProps>(\n ({ editor: providedEditor, type, text, hideWhenUnavailable = false, className = '', disabled, onClick, children, ...buttonProps }, ref) => {\n const editor = useTiptapEditor(providedEditor)\n\n const { isDisabled, isActive, shouldShow, handleToggle, Icon, shortcutKey, label } = useNodeState(editor, type, disabled, hideWhenUnavailable)\n\n const handleClick = React.useCallback(\n (e: React.MouseEvent<HTMLButtonElement>) => {\n onClick?.(e)\n\n if (!e.defaultPrevented && !isDisabled) {\n handleToggle()\n }\n },\n [onClick, isDisabled, handleToggle]\n )\n\n if (!shouldShow || !editor || !editor.isEditable) {\n return null\n }\n\n return (\n <Button\n type=\"button\"\n className={className.trim()}\n disabled={isDisabled}\n data-style=\"ghost\"\n data-active-state={isActive ? 'on' : 'off'}\n data-disabled={isDisabled}\n role=\"button\"\n tabIndex={-1}\n aria-label={type}\n aria-pressed={isActive}\n tooltip={label}\n shortcutKeys={shortcutKey}\n onClick={handleClick}\n {...buttonProps}\n ref={ref}\n >\n {children || (\n <>\n <Icon className=\"tiptap-button-icon\" />\n {text && <span className=\"tiptap-button-text\">{text}</span>}\n </>\n )}\n </Button>\n )\n }\n)\n\nNodeButton.displayName = 'NodeButton'\n\nexport default NodeButton\n","import * as React from 'react'\n\nexport const QuoteIcon = React.memo(({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n return (\n <svg width=\"24\" height=\"24\" className={className} viewBox=\"0 0 1024 1024\" fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path d=\"M130.16 789.92V500.25q-1.85-62.51 18-117.41T204 286.23a308 308 0 0 1 86.13-69.1A304.32 304.32 0 0 1 386.26 184 11 11 0 0 1 399 194.86v104.52a11 11 0 0 1-7.21 10.29q-66.13 24.5-91.25 70.31-24.41 44.36-26.32 107a11 11 0 0 0 11 11.3h102.84a11 11 0 0 1 11 11V779a11 11 0 0 1-11 11h-257.9z m403.3 0V500.25q-2-62.51 17.95-117.41t55.85-96.61q35.94-41.6 86.13-69.1A304.7 304.7 0 0 1 789.56 184a11 11 0 0 1 12.76 10.82v104.56a11 11 0 0 1-7.21 10.29Q729 334.18 703.86 380q-24.41 44.36-26.32 107a11 11 0 0 0 11 11.3h102.82a11 11 0 0 1 11 11V779a11 11 0 0 1-11 11H533.45z m0 0\"\n fill=\"currentColor\">\n </path>\n </svg>\n )\n})\n\nQuoteIcon.displayName = 'QuoteIcon'\n","import { type Editor } from '@tiptap/react'\nimport * as React from 'react'\n\n// --- Hooks ---\nimport { useTiptapEditor } from '../../../hooks/use-tiptap-editor'\n\n// --- Icons ---\nimport { QuoteIcon } from '../../tiptap-icons/quote-icon'\n\n// --- UI Primitives ---\nimport type { ButtonProps } from '../../tiptap-ui-primitive/button'\nimport { Button } from '../../tiptap-ui-primitive/button'\n\nexport interface QuoteButtonProps extends ButtonProps {\n /**\n * The TipTap editor instance.\n */\n editor?: Editor | null\n\n /**\n * Callback when text is quoted (fires when user clicks while text is selected)\n */\n onQuote?: (text: string) => void\n\n /**\n * Optional label text shown next to the icon.\n */\n text?: string\n\n /**\n * Whether to hide the button if no text is selected.\n * @default false\n */\n hideWhenUnavailable?: boolean\n}\n\n/**\n * 检查是否选中了文本\n */\nexport function hasSelection(editor: Editor | null): boolean {\n if (!editor) return false\n const selection = editor.state.selection\n return !!selection && !selection.empty\n}\n\n/**\n * 获取当前选中文本\n */\nexport function getSelectedText(editor: Editor | null): string {\n if (!editor) return ''\n const { from, to } = editor.state.selection\n return editor.state.doc.textBetween(from, to, ' ')\n}\n\n/**\n * QuoteButton Hook\n */\nexport function useQuote(editor: Editor | null, disabled: boolean = false, hideWhenUnavailable: boolean = false) {\n const selectionAvailable = React.useMemo(() => hasSelection(editor), [editor?.state.selection])\n\n const isDisabled = React.useMemo(() => !selectionAvailable || disabled, [selectionAvailable, disabled])\n const shouldShow = React.useMemo(() => {\n if (!editor?.isEditable) return false\n if (hideWhenUnavailable && !selectionAvailable) return false\n return true\n }, [editor, hideWhenUnavailable, selectionAvailable])\n\n const getText = React.useCallback(() => getSelectedText(editor), [editor])\n\n return {\n isDisabled,\n shouldShow,\n getText\n }\n}\n\nexport const QuoteButton = React.forwardRef<HTMLButtonElement, QuoteButtonProps>(\n (\n { editor: providedEditor, onQuote, text, className = '', disabled = false, hideWhenUnavailable = false, onClick, children, ...buttonProps },\n ref\n ) => {\n const editor = useTiptapEditor(providedEditor)\n\n const { isDisabled, shouldShow, getText } = useQuote(editor, disabled, hideWhenUnavailable)\n\n const handleClick = React.useCallback(\n (e: React.MouseEvent<HTMLButtonElement>) => {\n onClick?.(e)\n if (e.defaultPrevented || isDisabled || !editor) return\n\n const selectedText = getText()\n if (selectedText) {\n onQuote?.(selectedText)\n } else {\n console.warn('No text selected for quote.')\n }\n },\n [onClick, editor, isDisabled, getText, onQuote]\n )\n\n if (!shouldShow || !editor || !editor.isEditable) return null\n\n return (\n <Button\n type=\"button\"\n className={className.trim()}\n disabled={isDisabled}\n data-style=\"ghost\"\n data-disabled={isDisabled}\n tooltip=\"引用选中文本\"\n // shortcutKeys=\"Ctrl-Shift-Q\"\n onClick={handleClick}\n {...buttonProps}\n ref={ref}\n >\n {children || (\n <>\n <QuoteIcon className=\"tiptap-button-icon\" />\n {text && <span className=\"tiptap-button-text\">{text}</span>}\n </>\n )}\n </Button>\n )\n }\n)\n\nQuoteButton.displayName = 'QuoteButton'\n\nexport default QuoteButton\n","import * as React from 'react'\n\nexport const AlignCenterIcon = React.memo(({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n return (\n <svg width=\"24\" height=\"24\" className={className} viewBox=\"0 0 24 24\" fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M2 6C2 5.44772 2.44772 5 3 5H21C21.5523 5 22 5.44772 22 6C22 6.55228 21.5523 7 21 7H3C2.44772 7 2 6.55228 2 6Z\"\n fill=\"currentColor\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M6 12C6 11.4477 6.44772 11 7 11H17C17.5523 11 18 11.4477 18 12C18 12.5523 17.5523 13 17 13H7C6.44772 13 6 12.5523 6 12Z\"\n fill=\"currentColor\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M4 18C4 17.4477 4.44772 17 5 17H19C19.5523 17 20 17.4477 20 18C20 18.5523 19.5523 19 19 19H5C4.44772 19 4 18.5523 4 18Z\"\n fill=\"currentColor\"\n />\n </svg>\n )\n})\n\nAlignCenterIcon.displayName = 'AlignCenterIcon'\n","import * as React from 'react'\n\nexport const AlignJustifyIcon = React.memo(({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n return (\n <svg width=\"24\" height=\"24\" className={className} viewBox=\"0 0 24 24\" fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M2 6C2 5.44772 2.44772 5 3 5H21C21.5523 5 22 5.44772 22 6C22 6.55228 21.5523 7 21 7H3C2.44772 7 2 6.55228 2 6Z\"\n fill=\"currentColor\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M2 12C2 11.4477 2.44772 11 3 11H21C21.5523 11 22 11.4477 22 12C22 12.5523 21.5523 13 21 13H3C2.44772 13 2 12.5523 2 12Z\"\n fill=\"currentColor\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M2 18C2 17.4477 2.44772 17 3 17H21C21.5523 17 22 17.4477 22 18C22 18.5523 21.5523 19 21 19H3C2.44772 19 2 18.5523 2 18Z\"\n fill=\"currentColor\"\n />\n </svg>\n )\n})\n\nAlignJustifyIcon.displayName = 'AlignJustifyIcon'\n","import * as React from 'react'\n\nexport const AlignLeftIcon = React.memo(({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n return (\n <svg width=\"24\" height=\"24\" className={className} viewBox=\"0 0 24 24\" fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M2 6C2 5.44772 2.44772 5 3 5H21C21.5523 5 22 5.44772 22 6C22 6.55228 21.5523 7 21 7H3C2.44772 7 2 6.55228 2 6Z\"\n fill=\"currentColor\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M2 12C2 11.4477 2.44772 11 3 11H15C15.5523 11 16 11.4477 16 12C16 12.5523 15.5523 13 15 13H3C2.44772 13 2 12.5523 2 12Z\"\n fill=\"currentColor\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M2 18C2 17.4477 2.44772 17 3 17H17C17.5523 17 18 17.4477 18 18C18 18.5523 17.5523 19 17 19H3C2.44772 19 2 18.5523 2 18Z\"\n fill=\"currentColor\"\n />\n </svg>\n )\n})\n\nAlignLeftIcon.displayName = 'AlignLeftIcon'\n","import * as React from 'react'\n\nexport const AlignRightIcon = React.memo(({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n return (\n <svg width=\"24\" height=\"24\" className={className} viewBox=\"0 0 24 24\" fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M2 6C2 5.44772 2.44772 5 3 5H21C21.5523 5 22 5.44772 22 6C22 6.55228 21.5523 7 21 7H3C2.44772 7 2 6.55228 2 6Z\"\n fill=\"currentColor\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M8 12C8 11.4477 8.44772 11 9 11H21C21.5523 11 22 11.4477 22 12C22 12.5523 21.5523 13 21 13H9C8.44772 13 8 12.5523 8 12Z\"\n fill=\"currentColor\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M6 18C6 17.4477 6.44772 17 7 17H21C21.5523 17 22 17.4477 22 18C22 18.5523 21.5523 19 21 19H7C6.44772 19 6 18.5523 6 18Z\"\n fill=\"currentColor\"\n />\n </svg>\n )\n})\n\nAlignRightIcon.displayName = 'AlignRightIcon'\n","import { type ChainedCommands, type Editor } from '@tiptap/react'\nimport * as React from 'react'\n\n// --- Hooks ---\nimport { useTiptapEditor } from '../../../hooks/use-tiptap-editor'\n\n// --- Icons ---\nimport { AlignCenterIcon } from '../../tiptap-icons/align-center-icon'\nimport { AlignJustifyIcon } from '../../tiptap-icons/align-justify-icon'\nimport { AlignLeftIcon } from '../../tiptap-icons/align-left-icon'\nimport { AlignRightIcon } from '../../tiptap-icons/align-right-icon'\n\n// --- UI Primitives ---\nimport type { ButtonProps } from '../../tiptap-ui-primitive/button'\nimport { Button } from '../../tiptap-ui-primitive/button'\n\nexport type TextAlign = 'left' | 'center' | 'right' | 'justify'\n\nexport interface TextAlignButtonProps extends ButtonProps {\n /**\n * The TipTap editor instance.\n */\n editor?: Editor | null\n /**\n * The text alignment to apply.\n */\n align: TextAlign\n /**\n * Optional text to display alongside the icon.\n */\n text?: string\n /**\n * Whether the button should hide when the alignment is not available.\n * @default false\n */\n hideWhenUnavailable?: boolean\n}\n\nexport const textAlignIcons = {\n left: AlignLeftIcon,\n center: AlignCenterIcon,\n right: AlignRightIcon,\n justify: AlignJustifyIcon\n}\n\nexport const textAlignShortcutKeys: Partial<Record<TextAlign, string>> = {\n left: 'Ctrl-Shift-l',\n center: 'Ctrl-Shift-e',\n right: 'Ctrl-Shift-r',\n justify: 'Ctrl-Shift-j'\n}\n\nexport const textAlignLabels: Record<TextAlign, string> = {\n left: '左对齐',\n center: '居中对齐',\n right: '右对齐',\n justify: '两端对齐'\n}\n\nexport function hasSetTextAlign(commands: ChainedCommands): commands is ChainedCommands & {\n setTextAlign: (align: TextAlign) => ChainedCommands\n} {\n return 'setTextAlign' in commands\n}\n\nexport function checkTextAlignExtension(editor: Editor | null): boolean {\n if (!editor) return false\n\n const hasExtension = editor.extensionManager.extensions.some((extension) => extension.name === 'textAlign')\n\n if (!hasExtension) {\n console.warn('TextAlign extension is not available. ' + 'Make sure it is included in your editor configuration.')\n }\n\n return hasExtension\n}\n\nexport function canSetTextAlign(editor: Editor | null, align: TextAlign, alignAvailable: boolean): boolean {\n if (!editor || !alignAvailable) return false\n\n try {\n return editor.can().setTextAlign(align)\n } catch {\n return false\n }\n}\n\nexport function isTextAlignActive(editor: Editor | null, align: TextAlign): boolean {\n if (!editor) return false\n return editor.isActive({ textAlign: align })\n}\n\nexport function setTextAlign(editor: Editor | null, align: TextAlign): boolean {\n if (!editor) return false\n\n const chain = editor.chain().focus()\n if (hasSetTextAlign(chain)) {\n return chain.setTextAlign(align).run()\n }\n return false\n}\n\nexport function isTextAlignButtonDisabled(editor: Editor | null, alignAvailable: boolean, canAlign: boolean, userDisabled: boolean = false): boolean {\n if (!editor || !alignAvailable) return true\n if (userDisabled) return true\n if (!canAlign) return true\n return false\n}\n\nexport function shouldShowTextAlignButton(editor: Editor | null, canAlign: boolean, hideWhenUnavailable: boolean): boolean {\n if (!editor?.isEditable) return false\n if (hideWhenUnavailable && !canAlign) return false\n return true\n}\n\nexport function useTextAlign(editor: Editor | null, align: TextAlign, disabled: boolean = false, hideWhenUnavailable: boolean = false) {\n const alignAvailable = React.useMemo(() => checkTextAlignExtension(editor), [editor])\n\n const canAlign = React.useMemo(() => canSetTextAlign(editor, align, alignAvailable), [editor, align, alignAvailable])\n\n const isDisabled = isTextAlignButtonDisabled(editor, alignAvailable, canAlign, disabled)\n const isActive = isTextAlignActive(editor, align)\n\n const handleAlignment = React.useCallback(() => {\n if (!alignAvailable || !editor || isDisabled) return false\n return setTextAlign(editor, align)\n }, [alignAvailable, editor, isDisabled, align])\n\n const shouldShow = React.useMemo(() => shouldShowTextAlignButton(editor, canAlign, hideWhenUnavailable), [editor, canAlign, hideWhenUnavailable])\n\n const Icon = textAlignIcons[align]\n const shortcutKey = textAlignShortcutKeys[align]\n const label = textAlignLabels[align]\n\n return {\n alignAvailable,\n canAlign,\n isDisabled,\n isActive,\n handleAlignment,\n shouldShow,\n Icon,\n shortcutKey,\n label\n }\n}\n\nexport const TextAlignButton = React.forwardRef<HTMLButtonElement, TextAlignButtonProps>(\n ({ editor: providedEditor, align, text, hideWhenUnavailable = false, className = '', disabled, onClick, children, ...buttonProps }, ref) => {\n const editor = useTiptapEditor(providedEditor)\n\n const { isDisabled, isActive, handleAlignment, shouldShow, Icon, shortcutKey, label } = useTextAlign(editor, align, disabled, hideWhenUnavailable)\n\n const handleClick = React.useCallback(\n (e: React.MouseEvent<HTMLButtonElement>) => {\n onClick?.(e)\n\n if (!e.defaultPrevented && !disabled) {\n handleAlignment()\n }\n },\n [onClick, disabled, handleAlignment]\n )\n\n if (!shouldShow || !editor || !editor.isEditable) {\n return null\n }\n\n return (\n <Button\n type=\"button\"\n className={className.trim()}\n disabled={isDisabled}\n data-style=\"ghost\"\n data-active-state={isActive ? 'on' : 'off'}\n data-disabled={isDisabled}\n role=\"button\"\n tabIndex={-1}\n aria-label={label}\n aria-pressed={isActive}\n tooltip={label}\n shortcutKeys={shortcutKey}\n onClick={handleClick}\n {...buttonProps}\n ref={ref}\n >\n {children || (\n <>\n <Icon className=\"tiptap-button-icon\" />\n {text && <span className=\"tiptap-button-text\">{text}</span>}\n </>\n )}\n </Button>\n )\n }\n)\n\nTextAlignButton.displayName = 'TextAlignButton'\n\nexport default TextAlignButton\n","import * as React from 'react'\n\nexport const Redo2Icon = React.memo(({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n return (\n <svg width=\"24\" height=\"24\" className={className} viewBox=\"0 0 24 24\" fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M15.7071 2.29289C15.3166 1.90237 14.6834 1.90237 14.2929 2.29289C13.9024 2.68342 13.9024 3.31658 14.2929 3.70711L17.5858 7H9.5C7.77609 7 6.12279 7.68482 4.90381 8.90381C3.68482 10.1228 3 11.7761 3 13.5C3 14.3536 3.16813 15.1988 3.49478 15.9874C3.82144 16.7761 4.30023 17.4926 4.90381 18.0962C6.12279 19.3152 7.77609 20 9.5 20H13C13.5523 20 14 19.5523 14 19C14 18.4477 13.5523 18 13 18H9.5C8.30653 18 7.16193 17.5259 6.31802 16.682C5.90016 16.2641 5.56869 15.768 5.34254 15.2221C5.1164 14.6761 5 14.0909 5 13.5C5 12.3065 5.47411 11.1619 6.31802 10.318C7.16193 9.47411 8.30653 9 9.5 9H17.5858L14.2929 12.2929C13.9024 12.6834 13.9024 13.3166 14.2929 13.7071C14.6834 14.0976 15.3166 14.0976 15.7071 13.7071L20.7071 8.70711C21.0976 8.31658 21.0976 7.68342 20.7071 7.29289L15.7071 2.29289Z\"\n fill=\"currentColor\"\n />\n </svg>\n )\n})\n\nRedo2Icon.displayName = 'Redo2Icon'\n","import * as React from 'react'\n\nexport const Undo2Icon = React.memo(({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n return (\n <svg width=\"24\" height=\"24\" className={className} viewBox=\"0 0 24 24\" fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M9.70711 3.70711C10.0976 3.31658 10.0976 2.68342 9.70711 2.29289C9.31658 1.90237 8.68342 1.90237 8.29289 2.29289L3.29289 7.29289C2.90237 7.68342 2.90237 8.31658 3.29289 8.70711L8.29289 13.7071C8.68342 14.0976 9.31658 14.0976 9.70711 13.7071C10.0976 13.3166 10.0976 12.6834 9.70711 12.2929L6.41421 9H14.5C15.0909 9 15.6761 9.1164 16.2221 9.34254C16.768 9.56869 17.2641 9.90016 17.682 10.318C18.0998 10.7359 18.4313 11.232 18.6575 11.7779C18.8836 12.3239 19 12.9091 19 13.5C19 14.0909 18.8836 14.6761 18.6575 15.2221C18.4313 15.768 18.0998 16.2641 17.682 16.682C17.2641 17.0998 16.768 17.4313 16.2221 17.6575C15.6761 17.8836 15.0909 18 14.5 18H11C10.4477 18 10 18.4477 10 19C10 19.5523 10.4477 20 11 20H14.5C15.3536 20 16.1988 19.8319 16.9874 19.5052C17.7761 19.1786 18.4926 18.6998 19.0962 18.0962C19.6998 17.4926 20.1786 16.7761 20.5052 15.9874C20.8319 15.1988 21 14.3536 21 13.5C21 12.6464 20.8319 11.8012 20.5052 11.0126C20.1786 10.2239 19.6998 9.50739 19.0962 8.90381C18.4926 8.30022 17.7761 7.82144 16.9874 7.49478C16.1988 7.16813 15.3536 7 14.5 7H6.41421L9.70711 3.70711Z\"\n fill=\"currentColor\"\n />\n </svg>\n )\n})\n\nUndo2Icon.displayName = 'Undo2Icon'\n","import { type Editor } from '@tiptap/react'\nimport * as React from 'react'\n\n// --- Hooks ---\nimport { useTiptapEditor } from '../../../hooks/use-tiptap-editor'\n\n// --- Icons ---\nimport { Redo2Icon } from '../../tiptap-icons/redo2-icon'\nimport { Undo2Icon } from '../../tiptap-icons/undo2-icon'\n\n// --- UI Primitives ---\nimport type { ButtonProps } from '../../tiptap-ui-primitive/button'\nimport { Button } from '../../tiptap-ui-primitive/button'\n\nexport type HistoryAction = 'undo' | 'redo'\n\n/**\n * Props for the UndoRedoButton component.\n */\nexport interface UndoRedoButtonProps extends ButtonProps {\n /**\n * The TipTap editor instance.\n */\n editor?: Editor | null\n /**\n * Optional text to display alongside the icon.\n */\n text?: string\n /**\n * The history action to perform (undo or redo).\n */\n action: HistoryAction\n}\n\nexport const historyIcons = {\n undo: Undo2Icon,\n redo: Redo2Icon\n}\n\nexport const historyShortcutKeys: Partial<Record<HistoryAction, string>> = {\n undo: 'Ctrl-z',\n redo: 'Ctrl-Shift-z'\n}\n\nexport const historyActionLabels: Record<HistoryAction, string> = {\n undo: '撤销',\n redo: '重做'\n}\n\n/**\n * Checks if a history action can be executed.\n *\n * @param editor The TipTap editor instance\n * @param action The history action to check\n * @returns Whether the action can be executed\n */\nexport function canExecuteHistoryAction(editor: Editor | null, action: HistoryAction): boolean {\n if (!editor) return false\n return action === 'undo' ? editor.can().undo() : editor.can().redo()\n}\n\n/**\n * Executes a history action on the editor.\n *\n * @param editor The TipTap editor instance\n * @param action The history action to execute\n * @returns Whether the action was executed successfully\n */\nexport function executeHistoryAction(editor: Editor | null, action: HistoryAction): boolean {\n if (!editor) return false\n const chain = editor.chain().focus()\n return action === 'undo' ? chain.undo().run() : chain.redo().run()\n}\n\n/**\n * Determines if a history action should be disabled.\n *\n * @param editor The TipTap editor instance\n * @param action The history action to check\n * @param userDisabled Whether the action is explicitly disabled by the user\n * @returns Whether the action should be disabled\n */\nexport function isHistoryActionDisabled(editor: Editor | null, action: HistoryAction, userDisabled: boolean = false): boolean {\n if (userDisabled) return true\n return !canExecuteHistoryAction(editor, action)\n}\n\n/**\n * Hook that provides all the necessary state and handlers for a history action.\n *\n * @param editor The TipTap editor instance\n * @param action The history action to handle\n * @param disabled Whether the action is explicitly disabled\n * @returns Object containing state and handlers for the history action\n */\nexport function useHistoryAction(editor: Editor | null, action: HistoryAction, disabled: boolean = false) {\n const canExecute = React.useMemo(() => canExecuteHistoryAction(editor, action), [editor, action])\n\n const isDisabled = isHistoryActionDisabled(editor, action, disabled)\n\n const handleAction = React.useCallback(() => {\n if (!editor || isDisabled) return\n executeHistoryAction(editor, action)\n }, [editor, action, isDisabled])\n\n const Icon = historyIcons[action]\n const actionLabel = historyActionLabels[action]\n const shortcutKey = historyShortcutKeys[action]\n\n return {\n canExecute,\n isDisabled,\n handleAction,\n Icon,\n actionLabel,\n shortcutKey\n }\n}\n\n/**\n * Button component for triggering undo/redo actions in a TipTap editor.\n */\nexport const UndoRedoButton = React.forwardRef<HTMLButtonElement, UndoRedoButtonProps>(\n ({ editor: providedEditor, action, text, className = '', disabled, onClick, children, ...buttonProps }, ref) => {\n const editor = useTiptapEditor(providedEditor)\n\n const { isDisabled, handleAction, Icon, actionLabel, shortcutKey } = useHistoryAction(editor, action, disabled)\n\n const handleClick = React.useCallback(\n (e: React.MouseEvent<HTMLButtonElement>) => {\n onClick?.(e)\n\n if (!e.defaultPrevented && !disabled) {\n handleAction()\n }\n },\n [onClick, disabled, handleAction]\n )\n\n if (!editor || !editor.isEditable) {\n return null\n }\n\n return (\n <Button\n ref={ref}\n type=\"button\"\n className={className.trim()}\n disabled={isDisabled}\n data-style=\"ghost\"\n data-disabled={isDisabled}\n role=\"button\"\n tabIndex={-1}\n aria-label={actionLabel}\n tooltip={actionLabel}\n shortcutKeys={shortcutKey}\n onClick={handleClick}\n {...buttonProps}\n >\n {children || (\n <>\n <Icon className=\"tiptap-button-icon\" />\n {text && <span className=\"tiptap-button-text\">{text}</span>}\n </>\n )}\n </Button>\n )\n }\n)\n\nUndoRedoButton.displayName = 'UndoRedoButton'\n\nexport default UndoRedoButton\n","import * as React from 'react'\n\nexport const ArrowLeftIcon = React.memo(({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n return (\n <svg width=\"24\" height=\"24\" className={className} viewBox=\"0 0 24 24\" fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n d=\"M12.7071 5.70711C13.0976 5.31658 13.0976 4.68342 12.7071 4.29289C12.3166 3.90237 11.6834 3.90237 11.2929 4.29289L4.29289 11.2929C3.90237 11.6834 3.90237 12.3166 4.29289 12.7071L11.2929 19.7071C11.6834 20.0976 12.3166 20.0976 12.7071 19.7071C13.0976 19.3166 13.0976 18.6834 12.7071 18.2929L7.41421 13L19 13C19.5523 13 20 12.5523 20 12C20 11.4477 19.5523 11 19 11L7.41421 11L12.7071 5.70711Z\"\n fill=\"currentColor\"\n />\n </svg>\n )\n})\n\nArrowLeftIcon.displayName = 'ArrowLeftIcon'\n","import * as React from 'react'\n\ninterface WindowSizeState {\n width: number\n height: number\n offsetTop: number\n}\n\n/**\n * Custom hook to track window size and viewport information\n * @returns Current window dimensions and offsetTop\n */\nexport function useWindowSize(): WindowSizeState {\n const [windowSize, setWindowSize] = React.useState<WindowSizeState>({\n width: 0,\n height: 0,\n offsetTop: 0\n })\n\n function handleResize() {\n if (typeof window === 'undefined') return\n\n const vp = window.visualViewport\n if (!vp) return\n\n const { width = 0, height = 0, offsetTop = 0 } = vp\n\n // Only update state if values have changed\n setWindowSize((state) => {\n if (width === state.width && height === state.height && offsetTop === state.offsetTop) {\n return state\n }\n\n return { width, height, offsetTop }\n })\n }\n React.useEffect(() => {\n handleResize()\n\n const visualViewport = window.visualViewport\n if (visualViewport) {\n visualViewport.addEventListener('resize', handleResize)\n visualViewport.addEventListener('scroll', handleResize)\n }\n\n return () => {\n if (visualViewport) {\n visualViewport.removeEventListener('resize', handleResize)\n visualViewport.removeEventListener('scroll', handleResize)\n }\n }\n }, [])\n\n return windowSize\n}\n","import type { Editor } from '@tiptap/react'\nimport * as React from 'react'\nimport { useWindowSize } from './use-window-size'\n\n/**\n * Interface defining required parameters for the cursor visibility hook\n */\nexport interface CursorVisibilityOptions {\n /**\n * The TipTap editor instance\n */\n editor: Editor | null\n /**\n * Reference to the toolbar element that may obscure the cursor\n */\n overlayHeight?: number\n /**\n * Reference to the element to track for cursor visibility\n */\n elementRef?: React.RefObject<HTMLElement> | null\n}\n\n/**\n * Simplified DOMRect type containing only the essential positioning properties\n */\nexport type RectState = Pick<DOMRect, 'x' | 'y' | 'width' | 'height'>\n\n/**\n * Custom hook that ensures the cursor remains visible when typing in a TipTap editor.\n * Automatically scrolls the window when the cursor would be hidden by the toolbar.\n *\n * This is particularly useful for long-form content editing where the cursor\n * might move out of the visible area as the user types.\n *\n * @param options Configuration options for cursor visibility behavior\n * @returns void\n */\nexport function useCursorVisibility({ editor, overlayHeight = 0, elementRef = null }: CursorVisibilityOptions) {\n const { height: windowHeight } = useWindowSize()\n const [rect, setRect] = React.useState<RectState>({\n x: 0,\n y: 0,\n width: 0,\n height: 0\n })\n\n const updateRect = React.useCallback(() => {\n const element = elementRef?.current ?? document.body\n\n const { x, y, width, height } = element.getBoundingClientRect()\n setRect({ x, y, width, height })\n }, [elementRef])\n\n React.useEffect(() => {\n const element = elementRef?.current ?? document.body\n\n updateRect()\n\n const resizeObserver = new ResizeObserver(() => {\n window.requestAnimationFrame(updateRect)\n })\n\n resizeObserver.observe(element)\n window.addEventListener('scroll', updateRect, { passive: true })\n\n return () => {\n resizeObserver.disconnect()\n window.removeEventListener('scroll', updateRect)\n }\n }, [elementRef, updateRect])\n\n React.useEffect(() => {\n const ensureCursorVisibility = () => {\n if (!editor) return\n\n const { state, view } = editor\n\n if (!view.hasFocus()) return\n\n // Get current cursor position coordinates\n const { from } = state.selection\n const cursorCoords = view.coordsAtPos(from)\n\n if (windowHeight < rect.height) {\n if (cursorCoords) {\n // Check if there's enough space between cursor and bottom of window\n const availableSpace = windowHeight - cursorCoords.top - overlayHeight > 0\n\n // If not enough space, scroll to position cursor in the middle of viewport\n if (!availableSpace) {\n const targetScrollY =\n // TODO: Needed?\n // window.scrollY + (cursorCoords.top - windowHeight / 2)\n cursorCoords.top - windowHeight / 2\n\n window.scrollTo({\n top: targetScrollY,\n behavior: 'smooth'\n })\n }\n }\n }\n }\n\n ensureCursorVisibility()\n }, [editor, overlayHeight, windowHeight, rect.height])\n\n return rect\n}\n","import * as React from 'react'\n\nconst MOBILE_BREAKPOINT = 768\n\nexport function useMobile() {\n const [isMobile, setIsMobile] = React.useState<boolean | undefined>(undefined)\n\n React.useEffect(() => {\n const mql = window.matchMedia(`(max-width: ${MOBILE_BREAKPOINT - 1}px)`)\n const onChange = () => {\n setIsMobile(window.innerWidth < MOBILE_BREAKPOINT)\n }\n mql.addEventListener('change', onChange)\n setIsMobile(window.innerWidth < MOBILE_BREAKPOINT)\n return () => mql.removeEventListener('change', onChange)\n }, [])\n\n return !!isMobile\n}\n","import { mergeAttributes, Node } from '@tiptap/core'\n\nexport default Node.create({\n name: 'PageNoNode', // 节点名称\n\n group: 'block', // 可以作为块级元素\n // content: 'block+', // 能嵌套多个块级内容(如 heading, paragraph 等)\n\n // defining: true, // 使其在文档结构中稳定,避免被合并\n\n // 自定义渲染HTML\n renderHTML({ node, HTMLAttributes }) {\n // 获取动态的 pageIndex 属性\n const pageIndex = node.attrs.pageIndex || '1' // 如果没有传值,则默认值为 1\n\n return [\n 'div',\n mergeAttributes(HTMLAttributes, {\n class: 'page-no', // 添加类名\n 'page-no': pageIndex // 设置动态的 page-no 属性\n })\n // 0\n ]\n },\n\n // 自定义节点的可视化表现\n addAttributes() {\n return {\n pageIndex: {\n default: null, // 默认没有值,允许动态传递\n renderHTML: (attributes) => {\n return {\n 'page-no': attributes.pageIndex\n }\n }\n }\n }\n },\n\n // 用于从节点中提取文本内容\n parseHTML() {\n return [\n {\n tag: 'div.page-no', // 匹配 `.page-no` 类的 div\n getAttrs: (node) => {\n const pageIndex = node.getAttribute('page-no')\n return { pageIndex } // 获取 page-no 属性并传递给节点\n }\n }\n ]\n }\n})\n","// MIT License\n// https://github.com/sereneinserenade/tiptap-search-and-replace\n\n// Copyright (c) 2023 - 2024 Jeet Mandaliya (Github Username: sereneinserenade)\n\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n// SOFTWARE.\n\nimport { Extension, Range, type Dispatch } from '@tiptap/core'\nimport { Node as PMNode } from '@tiptap/pm/model'\nimport { Plugin, PluginKey, type EditorState, type Transaction } from '@tiptap/pm/state'\nimport { Decoration, DecorationSet } from '@tiptap/pm/view'\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n search: {\n /**\n * @description Set search term in extension.\n */\n setSearchTerm: (searchTerm: string) => ReturnType\n /**\n * @description Set replace term in extension.\n */\n setReplaceTerm: (replaceTerm: string) => ReturnType\n /**\n * @description Set case sensitivity in extension.\n */\n setCaseSensitive: (caseSensitive: boolean) => ReturnType\n /**\n * @description Reset current search result to first instance.\n */\n resetIndex: () => ReturnType\n /**\n * @description Find next instance of search result.\n */\n nextSearchResult: () => ReturnType\n /**\n * @description Find previous instance of search result.\n */\n previousSearchResult: () => ReturnType\n /**\n * @description Replace first instance of search result with given replace term.\n */\n replace: () => ReturnType\n /**\n * @description Replace all instances of search result with given replace term.\n */\n replaceAll: () => ReturnType\n }\n }\n}\n\ninterface TextNodesWithPosition {\n text: string\n pos: number\n}\n\nconst getRegex = (s: string, disableRegex: boolean, caseSensitive: boolean): RegExp => {\n return RegExp(disableRegex ? s.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&') : s, caseSensitive ? 'gu' : 'gui')\n}\n\ninterface ProcessedSearches {\n decorationsToReturn: DecorationSet\n results: Range[]\n}\n\nfunction processSearches(doc: PMNode, searchTerm: RegExp, searchResultClass: string, resultIndex: number): ProcessedSearches {\n const decorations: Decoration[] = []\n const results: Range[] = []\n\n let textNodesWithPosition: TextNodesWithPosition[] = []\n let index = 0\n\n if (!searchTerm) {\n return {\n decorationsToReturn: DecorationSet.empty,\n results: []\n }\n }\n\n doc?.descendants((node, pos) => {\n if (node.isText) {\n if (textNodesWithPosition[index]) {\n textNodesWithPosition[index] = {\n text: textNodesWithPosition[index].text + node.text,\n pos: textNodesWithPosition[index].pos\n }\n } else {\n textNodesWithPosition[index] = {\n text: `${node.text}`,\n pos\n }\n }\n } else {\n index += 1\n }\n })\n\n textNodesWithPosition = textNodesWithPosition.filter(Boolean)\n\n for (const element of textNodesWithPosition) {\n const { text, pos } = element\n const matches = Array.from(text.matchAll(searchTerm)).filter(([matchText]) => matchText.trim())\n\n for (const m of matches) {\n if (m[0] === '') break\n\n if (m.index !== undefined) {\n results.push({\n from: pos + m.index,\n to: pos + m.index + m[0].length\n })\n }\n }\n }\n\n for (let i = 0; i < results.length; i += 1) {\n const r = results[i]\n const className = i === resultIndex ? `${searchResultClass} ${searchResultClass}-current` : searchResultClass\n const decoration: Decoration = Decoration.inline(r.from, r.to, {\n class: className\n })\n\n decorations.push(decoration)\n }\n\n return {\n decorationsToReturn: DecorationSet.create(doc, decorations),\n results\n }\n}\n\nconst replace = (replaceTerm: string, results: Range[], { state, dispatch }: { state: EditorState; dispatch: Dispatch }) => {\n const firstResult = results[0]\n\n if (!firstResult) return\n\n const { from, to } = results[0]\n\n if (dispatch) dispatch(state.tr.insertText(replaceTerm, from, to))\n}\n\nconst rebaseNextResult = (replaceTerm: string, index: number, lastOffset: number, results: Range[]): [number, Range[]] | null => {\n const nextIndex = index + 1\n\n if (!results[nextIndex]) return null\n\n const { from: currentFrom, to: currentTo } = results[index]\n\n const offset = currentTo - currentFrom - replaceTerm.length + lastOffset\n\n const { from, to } = results[nextIndex]\n\n results[nextIndex] = {\n to: to - offset,\n from: from - offset\n }\n\n return [offset, results]\n}\n\nconst replaceAll = (replaceTerm: string, results: Range[], { tr, dispatch }: { tr: Transaction; dispatch: Dispatch }) => {\n let offset = 0\n\n let resultsCopy = results.slice()\n\n if (!resultsCopy.length) return\n\n for (let i = 0; i < resultsCopy.length; i += 1) {\n const { from, to } = resultsCopy[i]\n\n tr.insertText(replaceTerm, from, to)\n\n const rebaseNextResultResponse = rebaseNextResult(replaceTerm, i, offset, resultsCopy)\n\n if (!rebaseNextResultResponse) continue\n\n offset = rebaseNextResultResponse[0]\n resultsCopy = rebaseNextResultResponse[1]\n }\n\n dispatch?.(tr)\n}\n\nexport const searchAndReplacePluginKey = new PluginKey('searchAndReplacePlugin')\n\nexport interface SearchAndReplaceOptions {\n searchResultClass: string\n disableRegex: boolean\n}\n\nexport interface SearchAndReplaceStorage {\n searchTerm: string\n replaceTerm: string\n results: Range[]\n lastSearchTerm: string\n caseSensitive: boolean\n lastCaseSensitive: boolean\n resultIndex: number\n lastResultIndex: number\n}\n\nexport const SearchAndReplace = Extension.create<SearchAndReplaceOptions, SearchAndReplaceStorage>({\n name: 'searchAndReplace',\n\n addOptions() {\n return {\n searchResultClass: 'search-result',\n disableRegex: true\n }\n },\n\n addStorage() {\n return {\n searchTerm: '',\n replaceTerm: '',\n results: [],\n lastSearchTerm: '',\n caseSensitive: false,\n lastCaseSensitive: false,\n resultIndex: 0,\n lastResultIndex: 0\n }\n },\n\n addCommands() {\n return {\n setSearchTerm:\n (searchTerm: string) =>\n ({ editor }) => {\n editor.storage.searchAndReplace.searchTerm = searchTerm\n\n return false\n },\n setReplaceTerm:\n (replaceTerm: string) =>\n ({ editor }) => {\n editor.storage.searchAndReplace.replaceTerm = replaceTerm\n\n return false\n },\n setCaseSensitive:\n (caseSensitive: boolean) =>\n ({ editor }) => {\n editor.storage.searchAndReplace.caseSensitive = caseSensitive\n\n return false\n },\n resetIndex:\n () =>\n ({ editor }) => {\n editor.storage.searchAndReplace.resultIndex = 0\n\n return false\n },\n nextSearchResult:\n () =>\n ({ editor }) => {\n const { results, resultIndex } = editor.storage.searchAndReplace\n\n const nextIndex = resultIndex + 1\n\n if (results[nextIndex]) {\n editor.storage.searchAndReplace.resultIndex = nextIndex\n } else {\n editor.storage.searchAndReplace.resultIndex = 0\n }\n\n return false\n },\n previousSearchResult:\n () =>\n ({ editor }) => {\n const { results, resultIndex } = editor.storage.searchAndReplace\n\n const prevIndex = resultIndex - 1\n\n if (results[prevIndex]) {\n editor.storage.searchAndReplace.resultIndex = prevIndex\n } else {\n editor.storage.searchAndReplace.resultIndex = results.length - 1\n }\n\n return false\n },\n replace:\n () =>\n ({ editor, state, dispatch }) => {\n const { replaceTerm, results } = editor.storage.searchAndReplace\n\n replace(replaceTerm, results, { state, dispatch })\n\n return false\n },\n replaceAll:\n () =>\n ({ editor, tr, dispatch }) => {\n const { replaceTerm, results } = editor.storage.searchAndReplace\n\n replaceAll(replaceTerm, results, { tr, dispatch })\n\n return false\n }\n }\n },\n\n addProseMirrorPlugins() {\n const editor = this.editor\n const { searchResultClass, disableRegex } = this.options\n\n const setLastSearchTerm = (t: string) => (editor.storage.searchAndReplace.lastSearchTerm = t)\n const setLastCaseSensitive = (t: boolean) => (editor.storage.searchAndReplace.lastCaseSensitive = t)\n const setLastResultIndex = (t: number) => (editor.storage.searchAndReplace.lastResultIndex = t)\n\n return [\n new Plugin({\n key: searchAndReplacePluginKey,\n state: {\n init: () => DecorationSet.empty,\n apply({ doc, docChanged }, oldState) {\n const { searchTerm, lastSearchTerm, caseSensitive, lastCaseSensitive, resultIndex, lastResultIndex } = editor.storage.searchAndReplace\n\n if (!docChanged && lastSearchTerm === searchTerm && lastCaseSensitive === caseSensitive && lastResultIndex === resultIndex)\n return oldState\n\n setLastSearchTerm(searchTerm)\n setLastCaseSensitive(caseSensitive)\n setLastResultIndex(resultIndex)\n\n if (!searchTerm) {\n editor.storage.searchAndReplace.results = []\n return DecorationSet.empty\n }\n\n const { decorationsToReturn, results } = processSearches(\n doc,\n getRegex(searchTerm, disableRegex, caseSensitive),\n searchResultClass,\n resultIndex\n )\n\n editor.storage.searchAndReplace.results = results\n\n return decorationsToReturn\n }\n },\n props: {\n decorations(state) {\n return this.getState(state)\n }\n }\n })\n ]\n }\n})\n\nexport default SearchAndReplace\n","import { EditorContent, EditorContext, useEditor } from '@tiptap/react'\n\n// --- Styles ---\nimport './index.less'\nimport './styles/_keyframe-animations.less'\nimport './styles/_reset.less'\nimport './styles/_variables.less'\n\nimport { Markdown } from 'tiptap-markdown'\n\n// --- Tiptap Core Extensions ---\nimport { Highlight } from '@tiptap/extension-highlight'\nimport { Image } from '@tiptap/extension-image'\nimport { Subscript } from '@tiptap/extension-subscript'\nimport { Superscript } from '@tiptap/extension-superscript'\nimport { TaskItem } from '@tiptap/extension-task-item'\nimport { TaskList } from '@tiptap/extension-task-list'\nimport { TextAlign } from '@tiptap/extension-text-align'\nimport { Typography } from '@tiptap/extension-typography'\nimport { Underline } from '@tiptap/extension-underline'\nimport { StarterKit } from '@tiptap/starter-kit'\n\nimport Table from '@tiptap/extension-table'\nimport TableCell from '@tiptap/extension-table-cell'\nimport TableHeader from '@tiptap/extension-table-header'\nimport TableRow from '@tiptap/extension-table-row'\n// import { Gapcursor } from '@tiptap/extensions'\nimport { BubbleMenu } from '@tiptap/react'\n\n// --- Custom Extensions ---\nimport { Link } from './components/tiptap-extension/link-extension'\nimport { Selection } from './components/tiptap-extension/selection-extension'\nimport { TrailingNode } from './components/tiptap-extension/trailing-node-extension'\n\n// --- UI Primitives ---\nimport { Button } from './components/tiptap-ui-primitive/button'\nimport { Spacer } from './components/tiptap-ui-primitive/spacer'\nimport { Toolbar, ToolbarGroup, ToolbarSeparator } from './components/tiptap-ui-primitive/toolbar'\n\n// --- Tiptap Node ---\nimport './components/tiptap-node/code-block-node/code-block-node.less'\nimport './components/tiptap-node/image-node/image-node.less'\nimport './components/tiptap-node/list-node/list-node.less'\nimport './components/tiptap-node/paragraph-node/paragraph-node.less'\n\n// --- Tiptap UI ---\nimport { HeadingDropdownMenu } from './components/tiptap-ui/heading-dropdown-menu'\nimport { HighlightContent, HighlighterButton, HighlightPopover } from './components/tiptap-ui/highlight-popover'\nimport { LinkButton, LinkContent, LinkPopover } from './components/tiptap-ui/link-popover'\nimport { ListDropdownMenu } from './components/tiptap-ui/list-dropdown-menu'\nimport { MarkButton } from './components/tiptap-ui/mark-button'\nimport { NodeButton } from './components/tiptap-ui/node-button'\nimport { QuoteButton } from './components/tiptap-ui/quote-button'\nimport { TextAlignButton } from './components/tiptap-ui/text-align-button'\nimport { UndoRedoButton } from './components/tiptap-ui/undo-redo-button'\n\n// --- Icons ---\nimport { ArrowLeftIcon } from './components/tiptap-icons/arrow-left-icon'\nimport { HighlighterIcon } from './components/tiptap-icons/highlighter-icon'\nimport { LinkIcon } from './components/tiptap-icons/link-icon'\n\n// --- Hooks ---\nimport classNames from 'classnames'\nimport { ReactNode, useEffect, useRef, useState } from 'react'\nimport { useCursorVisibility } from './hooks/use-cursor-visibility'\nimport { useMobile } from './hooks/use-mobile'\nimport { useWindowSize } from './hooks/use-window-size'\n\nimport { Flex, Tag } from 'antd'\n// import TurndownService from 'turndown'\nimport { useDebounce } from '../../hooks/useDebounce'\nimport PageNoNode from './extensions/pageNoNode'\nimport SearchAndReplace from './extensions/searchAndReplace'\n\n// const turndown = new TurndownService()\nconst MainToolbarContent = ({\n onHighlighterClick,\n onLinkClick,\n onQuote,\n // onSetComment,\n isMobile,\n isBubble\n}: {\n onHighlighterClick: () => void\n onLinkClick: () => void\n onQuote?: MarkdownEditorProps['onQuote']\n // onSetComment: () => void\n isMobile: boolean\n isBubble: boolean\n}) => {\n return (\n <>\n <Spacer />\n {onQuote && (\n <ToolbarGroup>\n <QuoteButton onQuote={onQuote} />\n </ToolbarGroup>\n )}\n {!isBubble && (\n <>\n <ToolbarGroup>\n <UndoRedoButton action=\"undo\" />\n <UndoRedoButton action=\"redo\" />\n </ToolbarGroup>\n\n <ToolbarSeparator />\n </>\n )}\n {/* <Button onClick={onSetComment}>评论</Button> */}\n\n <ToolbarGroup>\n <HeadingDropdownMenu levels={[1, 2, 3, 4]} />\n <ListDropdownMenu types={['bulletList', 'orderedList', 'taskList']} />\n <NodeButton type=\"codeBlock\" />\n <NodeButton type=\"blockquote\" />\n </ToolbarGroup>\n\n <ToolbarSeparator />\n\n <ToolbarGroup>\n <MarkButton type=\"bold\" />\n <MarkButton type=\"italic\" />\n <MarkButton type=\"strike\" />\n <MarkButton type=\"code\" />\n <MarkButton type=\"underline\" />\n {!isMobile ? <HighlightPopover /> : <HighlighterButton onClick={onHighlighterClick} />}\n {!isMobile ? <LinkPopover /> : <LinkButton onClick={onLinkClick} />}\n </ToolbarGroup>\n\n <ToolbarSeparator />\n\n <ToolbarGroup>\n <MarkButton type=\"superscript\" />\n <MarkButton type=\"subscript\" />\n </ToolbarGroup>\n\n <ToolbarSeparator />\n\n <ToolbarGroup>\n <TextAlignButton align=\"left\" />\n <TextAlignButton align=\"center\" />\n <TextAlignButton align=\"right\" />\n <TextAlignButton align=\"justify\" />\n </ToolbarGroup>\n\n <ToolbarSeparator />\n\n <Spacer />\n\n {isMobile && <ToolbarSeparator />}\n </>\n )\n}\n\nconst MobileToolbarContent = ({ type, onBack }: { type: 'highlighter' | 'link'; onBack: () => void }) => (\n <>\n <ToolbarGroup>\n <Button data-style=\"ghost\" onClick={onBack}>\n <ArrowLeftIcon className=\"tiptap-button-icon\" />\n {type === 'highlighter' ? <HighlighterIcon className=\"tiptap-button-icon\" /> : <LinkIcon className=\"tiptap-button-icon\" />}\n </Button>\n </ToolbarGroup>\n\n <ToolbarSeparator />\n\n {type === 'highlighter' ? <HighlightContent /> : <LinkContent />}\n </>\n)\n/**\n * Markdown编辑器组件属性接口\n */\nexport interface MarkdownEditorProps {\n /** 是否禁用编辑器 */\n disabled?: boolean\n /** 搜索关键字 */\n searchValue?: string\n /** 编辑器内容 */\n value?: string\n /** 内容变化回调 */\n onChange?: (value: string) => void\n /** 页面滚动回调 */\n onScrollPage?: (pageIndex: number) => void\n /** 额外导航内容 */\n extraNav?: ReactNode\n /** 是否显示工具栏,默认为true */\n showToolbar?: boolean\n /** 引用文本回调 */\n onQuote?: (text: string) => void\n /** 文件下载回调 */\n onDownloadFile?: (fileContent: string, targetFormat?: string) => Promise<void>\n}\n\n/**\n * Markdown编辑器组件\n * 基于Tiptap构建的富文本编辑器,支持Markdown语法\n * 提供丰富的编辑功能:格式化、链接、图片、表格、高亮等\n * @param props - 组件属性\n */\nexport default ({\n value = '',\n onChange,\n onScrollPage,\n searchValue,\n disabled,\n extraNav,\n showToolbar = true,\n onQuote,\n onDownloadFile\n}: MarkdownEditorProps) => {\n const isMobile = useMobile()\n const windowSize = useWindowSize()\n const lastContentRef = useRef<string>('') // 存储 editor 上一次内容\n const [mobileView, setMobileView] = useState<'main' | 'highlighter' | 'link'>('main')\n const toolbarRef = useRef<HTMLDivElement>(null)\n const editor = useEditor({\n immediatelyRender: false,\n editorProps: {\n attributes: {\n autocomplete: 'off',\n autocorrect: 'off',\n autocapitalize: 'off',\n 'aria-label': 'Main content area, start typing to enter text.'\n }\n },\n extensions: [\n Markdown.configure({\n transformPastedText: true,\n transformCopiedText: true,\n breaks: true\n }),\n StarterKit,\n TextAlign.configure({ types: ['heading', 'paragraph'] }),\n Underline,\n TaskList,\n TaskItem.configure({ nested: true }),\n Highlight.configure({ multicolor: true }),\n Image,\n Typography,\n Superscript,\n Subscript,\n Selection,\n TrailingNode,\n Link.configure({ openOnClick: false }),\n\n Table.configure({\n resizable: true // 可选,允许调整表格大小\n }),\n TableHeader,\n TableRow,\n TableCell,\n // Gapcursor,\n SearchAndReplace.configure({\n searchResultClass: 'cube-hl', // class to give to found items. default 'cube-hl'\n disableRegex: false // also no need to explain\n }),\n PageNoNode\n // Comment.configure({\n // HTMLAttributes: {\n // class: 'my-comment'\n // },\n // onCommentActivated: (commentId) => {\n // setActiveCommentId(commentId)\n\n // if (commentId) setTimeout(() => focusCommentWithActiveId(commentId))\n // }\n // })\n ],\n content: '',\n onUpdate: () => {\n // console.log('update 文本改变')\n const markdownOutput = getMarkdown()\n // ✅ 防抖:与上一次一致则不触发(避免无限循环)\n if (markdownOutput === lastContentRef.current) return\n lastContentRef.current = markdownOutput\n onChange?.(markdownOutput)\n }\n })\n\n const getMarkdown = () => {\n if (!editor) return ''\n return editor.storage.markdown.getMarkdown()\n // return turndown.turndown(editor.getHTML())\n }\n // const [comments, setComments] = useState<Comment[]>([])\n\n // const [activeCommentId, setActiveCommentId] = useState<string | null>(null)\n\n // const commentsSectionRef = useRef<HTMLDivElement | null>(null)\n\n // const focusCommentWithActiveId = (id: string) => {\n // if (!commentsSectionRef.current) return\n\n // const commentInput = commentsSectionRef.current.querySelector<HTMLInputElement>(`input#${id}`)\n\n // if (!commentInput) return\n\n // commentInput.scrollIntoView({\n // behavior: 'smooth',\n // block: 'center',\n // inline: 'center'\n // })\n // }\n\n // useEffect(() => {\n // if (!activeCommentId) return\n\n // focusCommentWithActiveId(activeCommentId)\n // }, [activeCommentId])\n // interface Comment {\n // id: string\n // content: string\n // replies: Comment[]\n // createdAt: Date\n // }\n // const getNewComment = (content: string): Comment => {\n // return {\n // id: genNonDuplicateID(),\n // content,\n // replies: [],\n // createdAt: new Date()\n // }\n // }\n // const onSetComment = () => {\n // const newComment = getNewComment('')\n\n // setComments([...comments, newComment])\n\n // editor?.commands.setComment(newComment.id)\n\n // setActiveCommentId(newComment.id)\n\n // setTimeout(focusCommentWithActiveId)\n\n // console.log('comments', comments)\n // }\n\n const bodyRect = useCursorVisibility({\n editor,\n overlayHeight: toolbarRef.current?.getBoundingClientRect().height ?? 0\n })\n\n useEffect(() => {\n if (!isMobile && mobileView !== 'main') {\n setMobileView('main')\n }\n }, [isMobile, mobileView])\n\n useEffect(() => {\n // console.log('value改变')\n if (!editor) return\n // const current = getMarkdown()\n // // ✅ 如果外部 value 和当前 editor 内容一致 → 不更新\n // if (current === value) return\n\n // ✅ 如果外部 value 和内部记录一致 → 不更新\n if (lastContentRef.current === value) return\n\n editor?.commands.setContent(value)\n // ✅ 同步内部历史,避免 onUpdate 再次触发回调\n lastContentRef.current = value\n\n // 监听滚动\n // if (value) {\n // // 获取所有的 page-no 节点\n // const pageNoNodes = editor.view.dom.querySelectorAll('.page-no')\n // if (!pageNoNodes.length) return\n // // 创建 IntersectionObserver 实例\n // const observer = new IntersectionObserver(\n // (entries) => {\n // entries.forEach((entry) => {\n // if (entry.isIntersecting && entry.intersectionRatio > 0) {\n // // 这里可以执行节点进入视口时的逻辑\n // const boundingTop = entry.boundingClientRect.top\n // const rootTop = entry.rootBounds?.top ?? 0\n // console.log('当前页面索引1:', boundingTop, rootTop)\n // if (Math.abs(boundingTop - rootTop) <= 10) {\n // const pageIndex = entry.target.getAttribute('page-no')\n // console.log('当前页面索引:', pageIndex)\n // // onPageChange(pageIndex) // 调用回调并传递 pageIndex\n // }\n // }\n // })\n // },\n // {\n // root: document.querySelector('.content-wrapper'), // 视口\n // rootMargin: '0px 0px -99% 0px',\n // threshold: 0 // 进入视口时触发\n // }\n // )\n\n // // 为每个 page-no 节点添加观察\n // pageNoNodes.forEach((node) => observer.observe(node))\n\n // // 清理: 在组件卸载时停止观察\n // return () => {\n // pageNoNodes.forEach((node) => observer.unobserve(node))\n // }\n // }\n }, [value, editor])\n\n const onPageChange = useDebounce((pageIndex?: string) => {\n // console.log('onPageChange', pageIndex)\n onScrollPage?.(parseInt(pageIndex ?? '0'))\n }, 300)\n useEffect(() => {\n if (!editor) return\n const container = document.querySelector('.content-wrapper')\n if (!container) return\n const handleSelectionUpdate = () => {\n const { from } = editor.state.selection\n const domAtPos = editor.view.domAtPos(from)\n const domNode = domAtPos.node as HTMLElement\n\n // 获取 content DOM\n const contentRoot = editor.view.dom\n\n // 当前节点或父节点查找 page-no\n let el: HTMLElement | null = domNode.nodeType === 1 ? domNode : domNode.parentElement\n let pageNo: string | null = null\n\n while (el && el !== contentRoot) {\n if (el.classList.contains('page-no')) {\n pageNo = el.getAttribute('page-no')\n break\n }\n el = (el.previousElementSibling as HTMLElement) || el.parentElement\n }\n\n if (!pageNo && domNode) {\n // 如果上面找不到,尝试从当前位置向上寻找最近的 page-no\n const allPageNoEls = Array.from(contentRoot.querySelectorAll('.page-no')) as HTMLElement[]\n const scrollTop = domNode.getBoundingClientRect?.()?.top\n\n for (let i = allPageNoEls.length - 1; i >= 0; i--) {\n const elTop = allPageNoEls[i].getBoundingClientRect().top\n if (elTop < scrollTop) {\n pageNo = allPageNoEls[i].getAttribute('page-no')\n break\n }\n }\n }\n\n if (pageNo) {\n // console.log('最近的上一个 page-no:', pageNo)\n onPageChange(pageNo)\n }\n }\n\n const handleScroll = () => {\n const pageNos = Array.from(container.querySelectorAll('.page-no')) as HTMLElement[]\n if (!pageNos.length) return\n\n let closestNode: HTMLElement | null = null\n let closestTopDiff = -Infinity\n const containerTop = container.getBoundingClientRect().top\n pageNos.forEach((node) => {\n const rect = node.getBoundingClientRect()\n const top = rect.top - containerTop\n\n // 优先找 top ≈ 0 的节点(±5px 容差)\n if (Math.abs(top) <= 80) {\n closestNode = node\n closestTopDiff = 0\n }\n\n // 否则找 top < 0 且最大的(离顶部最近但在视口上方)\n else if (top < 0 && top > closestTopDiff) {\n closestNode = node\n closestTopDiff = top\n }\n })\n\n if (closestNode) {\n const pageNo = (closestNode as HTMLElement).getAttribute('page-no')\n // console.log('当前滚动最近 page-no:', pageNo)\n onPageChange(pageNo!)\n }\n }\n\n editor.on('selectionUpdate', handleSelectionUpdate)\n container.addEventListener('scroll', handleScroll)\n\n return () => {\n editor.off('selectionUpdate', handleSelectionUpdate)\n container.removeEventListener('scroll', handleScroll)\n }\n }, [editor])\n\n useEffect(() => {\n editor?.commands.setSearchTerm(searchValue || '')\n }, [searchValue, value, editor])\n\n useEffect(() => {\n editor?.setEditable(!disabled)\n }, [disabled, editor])\n\n const NsToolBar = ({ isBubble = true }: { isBubble?: boolean }) => (\n <>\n <Toolbar\n {...(isBubble\n ? {}\n : {\n ref: toolbarRef,\n style: isMobile\n ? {\n bottom: `calc(100% - ${windowSize.height - bodyRect.y}px)`\n }\n : {}\n })}\n >\n {mobileView === 'main' ? (\n <MainToolbarContent\n isBubble={isBubble}\n // onSetComment={onSetComment}\n onHighlighterClick={() => setMobileView('highlighter')}\n onLinkClick={() => setMobileView('link')}\n onQuote={onQuote}\n isMobile={isMobile}\n />\n ) : (\n <MobileToolbarContent type={mobileView === 'highlighter' ? 'highlighter' : 'link'} onBack={() => setMobileView('main')} />\n )}\n </Toolbar>\n </>\n )\n\n const downloadFile = () => {\n onDownloadFile?.(getMarkdown(), 'docx')\n }\n\n return (\n <div className={classNames('height-full', 'editor-parent')}>\n <EditorContext.Provider value={{ editor }}>\n {showToolbar && (\n <>\n <Flex justify=\"end\" align=\"center\">\n {NsToolBar({ isBubble: false })}\n {extraNav && (\n <Flex align=\"center\" className=\"m-l-16 m-r-16\">\n {onDownloadFile && (\n <Tag bordered={false} color=\"default\" className=\"cursor-pointer\" onClick={downloadFile}>\n 下载\n </Tag>\n )}\n {extraNav}\n </Flex>\n )}\n </Flex>\n {!isMobile && <BubbleMenu editor={editor}>{NsToolBar({ isBubble: true })}</BubbleMenu>}\n </>\n )}\n <div className=\"content-wrapper scroll-fade-in\">\n <EditorContent\n editor={editor}\n role=\"presentation\"\n className={classNames('simple-editor-content ns-markdown', { 'no-toolbar': !showToolbar })}\n />\n </div>\n </EditorContext.Provider>\n </div>\n )\n}\n","import { forwardRef } from 'react'\nimport { isBoolean, isFunction, isNull, isObject } from '../../utils'\n\n/**\n * 渲染控制对象类型\n * 用于控制组件的显示、渲染函数和属性\n */\nexport type RenderControlObj<C, P = ObjectType<any>> = {\n /** 是否可见 */\n visible?: boolean\n /** 渲染函数 */\n render?: (ctx: C) => React.ReactNode\n /** 传递给组件的属性 */\n props?: P\n}\n\n/**\n * 渲染控制类型\n * 支持布尔值或控制对象\n */\nexport type RenderControl<C, P = ObjectType<any>> = boolean | RenderControlObj<C, P>\n\n/**\n * RenderWrapper组件属性接口\n * @param C - 上下文类型\n * @param P - 属性类型\n */\nexport interface RenderWrapperProps<C, P> {\n /** 渲染控制配置 */\n control?: RenderControl<C, P> | null\n /** 上下文数据 */\n ctx?: C\n /** 默认组件或渲染函数 */\n DefaultComponent?: React.ReactNode | ((props: P) => React.ReactNode)\n}\n\n/**\n * 判断节点是否为渲染函数\n * @param node - 要判断的节点\n * @returns 是否为渲染函数\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\n/**\n * 渲染默认组件\n * @param DefaultComponent - 默认组件\n * @param ref - ref引用\n * @param props - 组件属性\n * @returns 渲染的组件\n */\nfunction renderDefault<P>(DefaultComponent?: React.ReactNode | ((props: P) => React.ReactNode), ref?: any, props?: P) {\n if (!DefaultComponent) return null\n return isRenderFn(DefaultComponent) ? <DefaultComponent ref={ref} {...(props as P)} /> : DefaultComponent\n}\n\n/**\n * 渲染包装器组件\n * 根据控制配置条件性地渲染组件,支持动态渲染函数和属性传递\n *\n * @example\n * // 基本用法\n * <RenderWrapper control={true} DefaultComponent={<div>内容</div>} />\n *\n * // 条件渲染\n * <RenderWrapper control={{ visible: false }} DefaultComponent={<div>不显示</div>} />\n *\n * // 动态渲染\n * <RenderWrapper\n * control={{ render: (ctx) => <div>动态内容: {ctx.value}</div> }}\n * ctx={{ value: 'hello' }}\n * />\n *\n * @param props - 组件属性\n * @returns 渲染的组件或null\n */\nexport const RenderWrapper = forwardRef(function RenderWrapper<C = any, P = any>(\n { control = true, ctx, DefaultComponent }: RenderWrapperProps<C, P>,\n ref\n) {\n if (control === false || isNull(control)) return null\n\n if (control === true || control === undefined) {\n return renderDefault(DefaultComponent, ref)\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, ref, props)\n})\n\n/**\n * 判断是否应该渲染组件\n * @param control - 渲染控制配置\n * @returns 是否应该渲染\n */\nexport const shouldRender = (control?: RenderControl<any, any> | null) =>\n control != null && (isBoolean(control) ? control : control?.visible !== false)\n\n/**\n * 合并上级传入的props与当前的props\n * 用于智能地合并组件属性\n *\n * @param control - 渲染控制配置\n * @param props - 要合并的属性\n * @returns 合并后的属性对象或null\n */\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'\n\n/**\n * 用户头像组件属性接口\n */\nexport interface UserAvatarProps {\n /** 头像图片地址 */\n avatarSrc?: string\n /** 用户名 */\n userName?: string\n /** 头像尺寸 */\n size?: number\n}\n\n/**\n * 用户头像组件\n * 如果没有头像图片,则显示用户名首字母作为头像\n * @param props - 组件属性\n */\nexport default ({ size, avatarSrc, userName }: UserAvatarProps) => {\n return avatarSrc ? (\n <Avatar size={size} src={avatarSrc} />\n ) : (\n <Avatar size={size} className=\"cursor-pointer\" style={{ backgroundColor: 'var(--ant-color-primary)' }}>\n {userName?.slice(0, 1)?.toLocaleUpperCase()}\n </Avatar>\n )\n}\n"]}