@ai-group/chat-sdk 3.0.5 → 3.0.7

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.
Files changed (66) hide show
  1. package/dist/cjs/components/XAdkChatbot/XAdkChatbot.stories.js +10 -0
  2. package/dist/cjs/components/XAdkChatbot/XAdkChatbot.stories.js.map +2 -2
  3. package/dist/cjs/components/XAdkChatbot/components/MarkdownRender/index.d.ts +1 -0
  4. package/dist/cjs/components/XAdkChatbot/components/MarkdownRender/index.js +2 -0
  5. package/dist/cjs/components/XAdkChatbot/components/MarkdownRender/index.js.map +2 -2
  6. package/dist/cjs/components/XAdkChatbot/components/MarkdownRender/styles.js +7 -1
  7. package/dist/cjs/components/XAdkChatbot/components/MarkdownRender/styles.js.map +2 -2
  8. package/dist/cjs/components/XAdkChatbot/index.js +18 -1
  9. package/dist/cjs/components/XAdkChatbot/index.js.map +2 -2
  10. package/dist/cjs/components/XAdkProvider/XAdkProvider.stories.js +2 -2
  11. package/dist/cjs/components/XAdkProvider/XAdkProvider.stories.js.map +1 -1
  12. package/dist/cjs/components/XAdkProvider/compound/Messages.js +63 -9
  13. package/dist/cjs/components/XAdkProvider/compound/Messages.js.map +3 -3
  14. package/dist/cjs/components/XAdkProvider/context/ChatActionContext.d.ts +5 -0
  15. package/dist/cjs/components/XAdkProvider/context/ChatActionContext.js.map +2 -2
  16. package/dist/cjs/components/XAdkProvider/context/ChatStateContext.d.ts +2 -0
  17. package/dist/cjs/components/XAdkProvider/context/ChatStateContext.js.map +2 -2
  18. package/dist/cjs/components/XAdkProvider/index.d.ts +1 -1
  19. package/dist/cjs/components/XAdkProvider/index.js +13 -7
  20. package/dist/cjs/components/XAdkProvider/index.js.map +2 -2
  21. package/dist/cjs/components/XAdkSender/XAdkSender.stories.d.ts +2 -2
  22. package/dist/cjs/components/XAdkSender/XAdkSender.stories.js.map +2 -2
  23. package/dist/cjs/hooks/useADKChat.d.ts +4 -0
  24. package/dist/cjs/hooks/useADKChat.js +24 -2
  25. package/dist/cjs/hooks/useADKChat.js.map +2 -2
  26. package/dist/cjs/types/ChatHook.d.ts +6 -1
  27. package/dist/cjs/types/ChatHook.js.map +1 -1
  28. package/dist/cjs/types/XAdkChatbot.d.ts +1 -1
  29. package/dist/cjs/types/XAdkChatbot.js.map +1 -1
  30. package/dist/cjs/types/XAdkProvider.d.ts +6 -1
  31. package/dist/cjs/types/XAdkProvider.js.map +1 -1
  32. package/dist/esm/components/XAdkChatbot/XAdkChatbot.stories.js +8 -0
  33. package/dist/esm/components/XAdkChatbot/XAdkChatbot.stories.js.map +1 -1
  34. package/dist/esm/components/XAdkChatbot/components/MarkdownRender/index.d.ts +1 -0
  35. package/dist/esm/components/XAdkChatbot/components/MarkdownRender/index.js +2 -0
  36. package/dist/esm/components/XAdkChatbot/components/MarkdownRender/index.js.map +1 -1
  37. package/dist/esm/components/XAdkChatbot/components/MarkdownRender/styles.js +1 -1
  38. package/dist/esm/components/XAdkChatbot/components/MarkdownRender/styles.js.map +1 -1
  39. package/dist/esm/components/XAdkChatbot/index.js +26 -5
  40. package/dist/esm/components/XAdkChatbot/index.js.map +1 -1
  41. package/dist/esm/components/XAdkProvider/XAdkProvider.stories.js +2 -2
  42. package/dist/esm/components/XAdkProvider/XAdkProvider.stories.js.map +1 -1
  43. package/dist/esm/components/XAdkProvider/compound/Messages.js +124 -11
  44. package/dist/esm/components/XAdkProvider/compound/Messages.js.map +1 -1
  45. package/dist/esm/components/XAdkProvider/context/ChatActionContext.d.ts +5 -0
  46. package/dist/esm/components/XAdkProvider/context/ChatActionContext.js.map +1 -1
  47. package/dist/esm/components/XAdkProvider/context/ChatStateContext.d.ts +2 -0
  48. package/dist/esm/components/XAdkProvider/context/ChatStateContext.js.map +1 -1
  49. package/dist/esm/components/XAdkProvider/index.d.ts +1 -1
  50. package/dist/esm/components/XAdkProvider/index.js +26 -7
  51. package/dist/esm/components/XAdkProvider/index.js.map +1 -1
  52. package/dist/esm/components/XAdkSender/XAdkSender.stories.d.ts +2 -2
  53. package/dist/esm/components/XAdkSender/XAdkSender.stories.js +13 -13
  54. package/dist/esm/components/XAdkSender/XAdkSender.stories.js.map +1 -1
  55. package/dist/esm/hooks/useADKChat.d.ts +4 -0
  56. package/dist/esm/hooks/useADKChat.js +79 -28
  57. package/dist/esm/hooks/useADKChat.js.map +1 -1
  58. package/dist/esm/types/ChatHook.d.ts +6 -1
  59. package/dist/esm/types/ChatHook.js.map +1 -1
  60. package/dist/esm/types/XAdkChatbot.d.ts +1 -1
  61. package/dist/esm/types/XAdkChatbot.js.map +1 -1
  62. package/dist/esm/types/XAdkProvider.d.ts +6 -1
  63. package/dist/esm/types/XAdkProvider.js.map +1 -1
  64. package/dist/umd/chat-sdk.min.css +1 -1
  65. package/dist/umd/chat-sdk.min.js +1 -1
  66. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"names":["useEffect","useCallback","useMemo","useRef","useState","fetchEventSource","EventStreamContentType","message","v4","SESSION_PAGE_SIZE","API_SUCCESS_CODE","SuccessCode","ErrorCode","fetchAppConfig","fetchSessionList","fetchSessionDetail","closeSession","updateSessionTitle","safeJsonParse","combineTextParts","parts","result","combinedTextPart","_iterator","_createForOfIteratorHelper","_step","s","n","done","part","value","text","thought","_objectSpread","push","undefined","err","e","f","useADKChat","_ref","url","token","_ref$config","config","_ref$type","type","_ref$enabled","enabled","onError","onMessage","onSuccess","onStream","_useState","_useState2","_slicedToArray","loading","setLoading","ctrl","_ref2","appNo","showFirstSession","_useState3","_useState4","appInfo","setAppInfo","_useState5","_useState6","initialized","setInitialized","_useState7","_useState8","sessionList","setSessionList","_useState9","_useState10","currentSessionId","setCurrentSessionId","_useState11","total","pageNum","pageSize","_useState12","sessionPagination","setSessionPagination","_useState13","_useState14","prologue","setPrologue","_useState15","_useState16","suggestedQuestions","setSuggestedQuestions","_useState17","_useState18","messages","setMessages","mergedMessages","fnResMap","forEach","msg","functionResponse","_msg$functionResponse","id","map","functionCall","_msg$functionCall","textMsgRef","eventDataRef","Map","insertMessage","prev","lastMessage","length","isLoading","concat","_toConsumableArray","slice","insertSuggestedQuestions","suggested_questions","arguments","insertPrologue","updateMessage","m","storeEvents","event","_event$actions","title","actions","artifactDelta","name","executableCode","_part$executableCode$","code","codeExecutionResult","outcome","errorMessage","updatedEvent","newEventData","current","set","storeMessage","role","author","invocationId","eventId","timestamp","isLike","inlineData","displayName","data","mimeType","_event$groundingMetad","groundingMetadata","searchEntryPoint","renderedContent","fileData","Object","keys","processPart","_event$groundingMetad2","newChunk","newMessage","partial","processFollowupPart","_event$content","content","processErrorMessage","chunkJson","processActionArtifact","sendMessageRequest","values","Promise","resolve","abort","AbortController","requestUrl","method","signal","body","JSON","stringify","openWhenHidden","headers","stream","Authorization","onopen","response","_asyncToGenerator","_regeneratorRuntime","mark","_callee","wrap","_callee$","_context","next","ok","get","status","stop","onmessage","rawData","sessionId","error","warning","_iterator2","_step2","onclose","_textMsgRef$current","onerror","console","startChat","_ref4","_callee2","_ref3","_ref3$text","_ref3$files","files","_callee2$","_context2","abrupt","trim","temp","file","_file$response","_file$response2","fileUri","fileUrl","_file$response3","_file$response4","_file$response5","_file$response6","_file$response7","fileName","fileId","tempUrl","fileType","initAppConversations","_x","apply","reChat","newMessages","lastAIIndex","findLastIndex","splice","lastUserMessage","findLast","_lastUserMessage$text","_lastUserMessage$file","confirmFnCall","fnCall","confirmed","suggestChat","stopChat","_ctrl$current","clearChat","_appInfo$onboardingIn","_appInfo$onboardingIn2","newSessionId","onboardingInfo","formatMessages","isReplace","mapped","item","Array","isArray","toLowerCase","filter","p","Boolean","raw","functionCallMsg","find","_msg$functionCall2","_part$functionRespons","setCurrentSessionDetail","_ref5","_callee3","_yield$fetchSessionDe","_appInfo$onboardingIn3","_appInfo$onboardingIn4","_callee3$","_context3","sent","_x2","_ref6","_callee4","fetchDetail","_yield$fetchSessionLi","_yield$fetchSessionLi2","pagination","formatSessions","_data$","_appInfo$onboardingIn5","_appInfo$onboardingIn6","_args4","_callee4$","_context4","key","label","Date","startTime","getTime","meta","APP_MESSAGES_INIT_SUCCESS","t0","finish","deleteSession","_ref7","_callee5","_yield$closeSession","_callee5$","_context5","_x3","updateSession","_ref8","_callee6","_yield$updateSessionT","_callee6$","_context6","_x4","_x5","initConfig","_ref9","_callee7","_yield$fetchAppConfig","_callee7$","_context7","APP_CONFIG_INIT_SUCCESS","APP_NOT_FOUND","API_ERROR","suggestions"],"sources":["../../../src/hooks/useADKChat.ts"],"sourcesContent":["import { useEffect, useCallback, useMemo, useRef, useState } from \"react\";\nimport {\n fetchEventSource,\n EventStreamContentType,\n} from \"@microsoft/fetch-event-source\";\nimport { message } from \"antd\";\nimport { v4 } from \"uuid\";\nimport { SESSION_PAGE_SIZE, API_SUCCESS_CODE } from \"@/constants\";\nimport {\n SuccessCode,\n ErrorCode,\n DebugOptions,\n FunctionCall,\n SendContent,\n SessionData,\n AgentRunRequest,\n Event,\n FunctionResponse,\n IMessage,\n Part,\n} from \"@/types\";\nimport {\n fetchAppConfig,\n fetchSessionList,\n fetchSessionDetail,\n closeSession,\n updateSessionTitle,\n type ChatConfig,\n} from \"@/services/api\";\nimport { safeJsonParse } from \"@/utils\";\n\nconst combineTextParts = (parts: Part[]) => {\n const result: Part[] = [];\n let combinedTextPart: Part | undefined;\n\n // eslint-disable-next-line no-restricted-syntax\n for (const part of parts) {\n if (part.text) {\n // 如果没有 combined 或 combined 思考类型跟当前 part 不同,则创建新的合并引用\n if (!combinedTextPart || combinedTextPart.thought !== part.thought) {\n combinedTextPart = { ...part };\n result.push(combinedTextPart);\n } else {\n combinedTextPart.text += part.text;\n }\n } else {\n combinedTextPart = undefined;\n result.push(part);\n }\n }\n return result;\n};\n\nfunction useADKChat({\n url,\n token,\n config = {},\n type = \"agentDebug\",\n enabled = true, // ← 新增: 是否启用 Hook\n onError,\n onMessage,\n onSuccess,\n onStream,\n}: DebugOptions) {\n const [loading, setLoading] = useState(false);\n const ctrl = useRef<AbortController | null>(null);\n // 应用配置\n const { appNo, showFirstSession } = config || {};\n const [appInfo, setAppInfo] = useState<ChatConfig | null>(null);\n // 初始化完成\n const [initialized, setInitialized] = useState(false);\n // 会话记录\n const [sessionList, setSessionList] = useState<SessionData[]>([]);\n // 当前会话\n const [currentSessionId, setCurrentSessionId] = useState<string>(() => v4());\n // 会话分页设置\n const [sessionPagination, setSessionPagination] = useState({\n total: 0,\n pageNum: 1,\n pageSize: SESSION_PAGE_SIZE,\n });\n // 开场白\n const [prologue, setPrologue] = useState<string>(\"\");\n // 建议问题\n const [suggestedQuestions, setSuggestedQuestions] = useState<string[]>([]);\n const [messages, setMessages] = useState<IMessage[]>([]);\n const mergedMessages = useMemo(() => {\n const fnResMap: Record<string, FunctionResponse> = {};\n messages.forEach((msg) => {\n if (msg.functionResponse) {\n fnResMap[msg?.functionResponse?.id || \"\"] = msg.functionResponse;\n }\n });\n return messages.map((msg) => {\n if (msg.functionCall) {\n return {\n ...msg,\n functionResponse: fnResMap[msg?.functionCall?.id || \"\"],\n };\n }\n return msg;\n });\n }, [messages]);\n const textMsgRef = useRef<IMessage>(null);\n const eventDataRef = useRef<Map<string, any>>(new Map());\n\n // 插入消息\n const insertMessage = useCallback((msg: IMessage) => {\n setMessages((prev) => {\n const lastMessage = prev[prev.length - 1];\n if (lastMessage?.isLoading) {\n return [...prev.slice(0, -1), msg, lastMessage];\n }\n return [...prev, msg];\n });\n }, []);\n\n // 初始化开场白预设置问题\n const insertSuggestedQuestions = (suggested_questions: string[] = []) => {\n if (!suggested_questions?.length) return;\n // 无消息内容 且 有建议问题时\n if (messages.length === 0 && suggested_questions.length) {\n setSuggestedQuestions(suggested_questions);\n }\n };\n\n // 初始化开场白\n const insertPrologue = (prologue: string) => {\n if (prologue) {\n setPrologue(prologue);\n }\n };\n\n // 更新消息\n const updateMessage = useCallback((msg: IMessage) => {\n setMessages((prev) => {\n return prev.map((m) => {\n if (m.id === msg.id) {\n return msg;\n }\n return m;\n });\n });\n }, []);\n\n // 存储事件\n const storeEvents = useCallback((part: Part | null, event: any) => {\n let title = \"\";\n\n if (part == null && event.actions?.artifactDelta) {\n title += \"eventAction: artifact\";\n } else if (part) {\n if (part.text) {\n title += `text:${part.text}`;\n } else if (part.functionCall) {\n title += `functionCall:${part.functionCall.name}`;\n } else if (part.functionResponse) {\n title += `functionResponse:${part.functionResponse.name}`;\n } else if (part.executableCode) {\n title += `executableCode:${part.executableCode.code?.slice(0, 10)}`;\n } else if (part.codeExecutionResult) {\n title += `codeExecutionResult:${part.codeExecutionResult.outcome}`;\n } else if (part.errorMessage) {\n title += `errorMessage:${part.errorMessage}`;\n }\n }\n\n const updatedEvent = { ...event, title };\n\n const newEventData = new Map(eventDataRef.current);\n newEventData.set(event.id, updatedEvent);\n eventDataRef.current = newEventData;\n }, []);\n\n // 存储消息\n const storeMessage = useCallback(\n (part: Part | null, event: Event, role: \"user\" | \"bot\") => {\n const msg: IMessage = {\n id: v4(),\n author: event.author,\n invocationId: event.invocationId,\n eventId: event.id,\n timestamp: event.timestamp,\n isLike: event.isLike || 0,\n role,\n };\n\n if (part) {\n if (part.inlineData) {\n msg.inlineData = {\n displayName: part.inlineData.displayName,\n data: part.inlineData.data,\n mimeType: part.inlineData.mimeType,\n };\n } else if (part.text) {\n msg.text = part.text;\n msg.thought = part.thought;\n\n if (event?.groundingMetadata?.searchEntryPoint?.renderedContent) {\n msg.renderedContent =\n event.groundingMetadata.searchEntryPoint.renderedContent;\n }\n } else if (part.fileData) {\n msg.fileData = [part.fileData];\n } else if (part.functionCall) {\n msg.functionCall = part.functionCall;\n } else if (part.functionResponse) {\n msg.functionResponse = part.functionResponse;\n } else if (part.executableCode) {\n msg.executableCode = part.executableCode;\n } else if (part.codeExecutionResult) {\n msg.codeExecutionResult = part.codeExecutionResult;\n }\n }\n\n if (part && Object.keys(part).length > 0) {\n insertMessage(msg);\n }\n },\n [insertMessage],\n );\n\n // 处理消息部分(关键更新)\n const processPart = useCallback(\n (event: Event, part: Part) => {\n const renderedContent =\n event.groundingMetadata?.searchEntryPoint?.renderedContent;\n if (part.text) {\n const newChunk = part.text;\n\n if (\n !textMsgRef.current ||\n textMsgRef.current.thought !== part.thought\n ) {\n const newMessage: IMessage = {\n id: v4(),\n author: event.author,\n invocationId: event.invocationId,\n eventId: event.id,\n timestamp: event.timestamp,\n role: \"bot\",\n text: newChunk,\n isLike: event.isLike || 0,\n thought: part.thought,\n };\n\n if (renderedContent) {\n newMessage.renderedContent = renderedContent;\n }\n\n textMsgRef.current = newMessage;\n // 存储原数据\n storeEvents(part, event);\n // 插入消息\n insertMessage(newMessage);\n } else {\n if (event.partial === false) {\n storeEvents(part, event);\n textMsgRef.current = null;\n return;\n }\n if (renderedContent) {\n textMsgRef.current = {\n ...textMsgRef.current,\n renderedContent,\n };\n }\n textMsgRef.current = {\n ...textMsgRef.current,\n text: (textMsgRef.current.text || \"\") + newChunk,\n };\n updateMessage(textMsgRef.current);\n }\n } else {\n textMsgRef.current = null;\n storeEvents(part, event);\n storeMessage(part, event, \"bot\");\n }\n },\n [storeEvents, storeMessage, insertMessage, updateMessage],\n );\n\n // 处理建议类消息\n const processFollowupPart = useCallback(\n (event: Event) => {\n // 获取建议类消息的文本内容\n const part = event?.content?.parts?.[0] || null;\n const text = part?.text || \"\";\n storeEvents(part, event);\n if (text) {\n setSuggestedQuestions((prev) => [...prev, text]);\n }\n },\n [storeEvents, insertMessage],\n );\n\n // 处理错误消息\n const processErrorMessage = useCallback(\n (chunkJson: any) => {\n storeEvents(null, chunkJson);\n insertMessage({\n id: v4(),\n text: chunkJson.errorMessage,\n role: \"bot\",\n });\n },\n [storeEvents, insertMessage],\n );\n\n // 处理动作和制品\n const processActionArtifact = useCallback(\n (event: any) => {\n if (event.actions && event.actions.artifactDelta) {\n storeEvents(null, event);\n storeMessage(null, event, \"bot\");\n }\n },\n [storeEvents, storeMessage],\n );\n\n // 发送消息请求\n const sendMessageRequest = useCallback(\n (values: AgentRunRequest) => {\n return new Promise<void>((resolve) => {\n if (ctrl.current) {\n ctrl.current.abort();\n }\n setLoading(true);\n ctrl.current = new AbortController();\n const requestUrl = `${url}/api/gateway-web/openApi/v1/aizt/app/${appNo}/sendMsgStreaming`;\n\n fetchEventSource(requestUrl, {\n method: \"POST\",\n signal: ctrl.current.signal,\n body: JSON.stringify(values),\n openWhenHidden: true,\n headers: {\n \"Content-Type\": \"application/json\",\n \"Cache-Control\": \"no-cache\",\n stream: \"true\",\n Authorization: `Bearer ${token}`,\n },\n async onopen(response) {\n if (\n response.ok &&\n response.headers.get(\"content-type\") === EventStreamContentType\n ) {\n // everything's good\n } else if (\n response.status >= 400 &&\n response.status < 500 &&\n response.status !== 429\n ) {\n resolve();\n } else {\n resolve();\n }\n },\n onmessage: (event) => {\n const rawData = safeJsonParse(event.data, {});\n\n // 处理新的数据格式: { data: {...}, result: {...} }\n let chunkJson: Event = rawData;\n if (rawData.data && rawData.result) {\n // 转换为旧格式\n chunkJson = {\n ...rawData.data,\n content: rawData.data, // data 本身就是 content\n invocationId: rawData.result.invocationId,\n sessionId: rawData.result.sessionId,\n id: rawData.result.invocationId,\n };\n }\n\n if (chunkJson.error) {\n message.warning(chunkJson.error);\n return;\n }\n onStream?.(chunkJson);\n if (chunkJson.content) {\n // 建议类消息单独处理\n if (chunkJson.content.role === \"followup\") {\n processFollowupPart(chunkJson);\n return;\n }\n // eslint-disable-next-line no-restricted-syntax\n for (const part of combineTextParts(chunkJson.content.parts)) {\n processPart(chunkJson, part);\n }\n } else if (chunkJson.errorMessage) {\n processErrorMessage(chunkJson);\n } else if (chunkJson.actions) {\n processActionArtifact(chunkJson);\n }\n },\n onclose: () => {\n setLoading(false);\n if (textMsgRef.current) {\n onMessage?.(textMsgRef.current?.text || \"\", textMsgRef.current);\n }\n textMsgRef.current = null;\n resolve();\n },\n onerror: (error) => {\n setLoading(false);\n resolve();\n console.error(\"EventSource failed:\", error);\n throw error;\n },\n });\n });\n },\n [\n type,\n currentSessionId,\n processActionArtifact,\n processErrorMessage,\n processPart,\n ],\n );\n\n // 发送会话\n const startChat = async ({\n text = \"\",\n files = [],\n functionResponse,\n }: SendContent) => {\n if (loading) return;\n if (!text.trim() && !functionResponse) return;\n // 清空建议问题\n setSuggestedQuestions([]);\n // 发送消息\n setMessages((prev) => {\n let temp = [...prev];\n // 如果 text 存在\n if (text.trim()) {\n temp.push({\n id: v4(),\n role: \"user\",\n text,\n });\n }\n // 如果file 存在\n if (files.length > 0) {\n temp.push({\n id: v4(),\n role: \"user\",\n fileData: files.map((file) => ({\n displayName: file.name,\n mimeType: file.response?.mimeType,\n fileUri: file.response?.fileUrl,\n })),\n });\n }\n // 如果 functionResponse 存在\n if (functionResponse) {\n temp.push({\n id: v4(),\n role: \"user\",\n functionResponse,\n });\n }\n return temp;\n });\n await sendMessageRequest({\n stream: true,\n sessionId: currentSessionId,\n content: {\n role: \"user\",\n parts: functionResponse ? [{ functionResponse }] : [{ text }],\n },\n files: files.map((file) => ({\n fileName: file.response?.fileName,\n fileId: file.response?.fileId,\n tempUrl: file.response?.fileUrl,\n type: file.response?.fileType,\n mimeType: file.response?.mimeType,\n })),\n });\n // 获取聊天记录\n initAppConversations();\n };\n\n // 重新发送会话\n const reChat = () => {\n if (loading) return;\n if (messages.length === 0) return;\n setMessages((prev) => {\n const newMessages = [...prev];\n // 删除最后一条 AI 消息\n const lastAIIndex = newMessages.findLastIndex(\n (msg) => msg.role === \"bot\",\n );\n if (lastAIIndex !== -1) {\n newMessages.splice(lastAIIndex, 1);\n }\n // 清空建议问题\n setSuggestedQuestions([]);\n // 重新发送最后一条用户消息\n const lastUserMessage = newMessages.findLast(\n (msg) => msg.role === \"user\",\n );\n if (lastUserMessage) {\n const { text = \"\", fileData = [] } = lastUserMessage;\n sendMessageRequest({\n stream: true,\n sessionId: currentSessionId,\n content: {\n role: \"user\",\n parts: [\n {\n text,\n },\n ],\n },\n files: fileData?.map((file) => ({\n fileName: file.displayName,\n tempUrl: file.fileUri,\n mimeType: file.mimeType,\n })),\n });\n }\n\n return newMessages;\n });\n };\n\n // 确认函数调用\n const confirmFnCall = (fnCall: FunctionCall, confirmed: boolean) => {\n const functionResponse = {\n id: fnCall.id,\n name: fnCall.name,\n response: { confirmed },\n };\n startChat({ functionResponse });\n };\n\n // 使用建议问题\n const suggestChat = (text: string) => {\n if (loading) return;\n if (!text.trim()) return;\n setSuggestedQuestions([]);\n startChat({ text });\n };\n\n // 停止会话\n const stopChat = useCallback(() => {\n ctrl.current?.abort();\n setLoading(false);\n textMsgRef.current = null;\n }, [ctrl]);\n\n // 清除/重置会话\n const clearChat = () => {\n const newSessionId = v4();\n setCurrentSessionId(newSessionId);\n // 重置聊天内容\n stopChat();\n setPrologue(appInfo?.onboardingInfo?.prologue || \"\");\n setMessages([]);\n setSuggestedQuestions(appInfo?.onboardingInfo?.suggested_questions || []);\n };\n\n // 格式化会话记录\n const formatMessages = (messages: any[], isReplace = false) => {\n const mapped: IMessage[] = [];\n messages.forEach((item) => {\n if (!item || !item.content || !Array.isArray(item.content.parts)) return;\n\n const role =\n (item.content.role || \"\").toLowerCase() === \"user\" ? \"user\" : \"bot\";\n const parts = Array.isArray(item.content.parts)\n ? item.content.parts.filter((p: any) => {\n if (!p) return false;\n return Boolean(\n p.text ||\n p.inlineData ||\n p.functionCall ||\n p.functionResponse ||\n p.fileData ||\n p.executableCode ||\n p.codeExecutionResult ||\n p.errorMessage,\n );\n })\n : [];\n\n if (parts.length === 0) return;\n parts.forEach((part: any) => {\n const msg: IMessage = {\n id: v4(),\n author: item.author,\n invocationId: item.invocationId,\n eventId: item.id,\n timestamp: item.timestamp,\n isLike: item.isLike,\n role,\n raw: item,\n } as IMessage;\n\n if (part.inlineData) {\n msg.inlineData = {\n displayName: part.inlineData.displayName,\n data: part.inlineData.data,\n mimeType: part.inlineData.mimeType,\n } as any;\n }\n if (part.text) {\n msg.text = part.text;\n if (typeof part.thought !== \"undefined\") msg.thought = part.thought;\n }\n if (part.functionCall) msg.functionCall = part.functionCall;\n if (part.fileData) {\n msg.inlineData = {\n displayName: part.fileData.displayName || \"\",\n data: part.fileData.fileUri,\n mimeType: part.fileData.mimeType,\n } as any;\n }\n if (part.executableCode) msg.executableCode = part.executableCode;\n if (part.codeExecutionResult)\n msg.codeExecutionResult = part.codeExecutionResult;\n if (part.errorMessage) msg.text = part.errorMessage;\n // 补全函数调用结果\n if (part.functionResponse) {\n // 通过 functionCall.id 寻找对应的函数调用消息,在那条消息上添加functionResponse\n const functionCallMsg = mapped.find(\n (msg) => msg.functionCall?.id === part.functionResponse?.id,\n );\n if (functionCallMsg) {\n functionCallMsg.functionResponse = part.functionResponse;\n }\n return;\n }\n mapped.push(msg);\n });\n });\n\n setMessages((prev) => (isReplace ? mapped : [...prev, ...mapped]));\n };\n\n // 设置当前会话详情\n const setCurrentSessionDetail = async (sessionId: string) => {\n if (sessionId) {\n if (sessionId === currentSessionId) {\n return;\n }\n setCurrentSessionId(sessionId); // 设置当前会话 id;\n const { data, result } = await fetchSessionDetail({\n url,\n appNo,\n sessionId,\n token,\n });\n\n if (result?.code === API_SUCCESS_CODE) {\n setPrologue(appInfo?.onboardingInfo?.prologue || \"\");\n // 新接口直接返回按 event/item 结构的数组,传入 formatMessages 处理\n if (Array.isArray(data) && data.length > 0) {\n formatMessages(data, true);\n } else {\n setSuggestedQuestions(\n appInfo?.onboardingInfo?.suggested_questions || [],\n );\n }\n }\n } else {\n // 兼容 无 session异常\n setCurrentSessionId(v4());\n }\n };\n\n // 获取聊天记录\n const initAppConversations = async (fetchDetail = false) => {\n try {\n setLoading(true);\n\n const {\n data = [],\n pagination,\n result,\n } = await fetchSessionList({\n url,\n appNo,\n token,\n pageSize: sessionPagination.pageSize,\n });\n\n if (result?.code === API_SUCCESS_CODE) {\n if (data.length > 0) {\n const formatSessions = data.map((item) => {\n return {\n key: item.sessionId,\n label: item.title || \"新对话\",\n timestamp: new Date(item.startTime).getTime(),\n messages: [],\n meta: {\n ...item,\n },\n };\n });\n\n setSessionList(formatSessions);\n // 设置分页信息\n setSessionPagination({\n pageNum: sessionPagination.pageNum,\n pageSize: sessionPagination.pageSize,\n total: pagination?.total || 0,\n });\n const { sessionId } = data?.[0];\n if (showFirstSession) {\n setCurrentSessionDetail(sessionId);\n } else {\n fetchDetail && setPrologue(appInfo?.onboardingInfo?.prologue || \"\");\n fetchDetail &&\n setSuggestedQuestions(\n appInfo?.onboardingInfo?.suggested_questions || [],\n );\n }\n // 成功回调\n if (!initialized) {\n onSuccess?.({\n code: SuccessCode.APP_MESSAGES_INIT_SUCCESS,\n message: \"初始化聊天记录成功\",\n data: {\n sessionId,\n },\n });\n setInitialized(true);\n }\n } else {\n // 无会话记录时,初始化会话详情\n clearChat();\n }\n } else {\n setSessionList([]);\n setCurrentSessionId(v4());\n setPrologue(\"\");\n setSuggestedQuestions([]);\n }\n } catch {\n //\n } finally {\n setLoading(false);\n }\n };\n\n // 删除会话\n const deleteSession = async (sessionId: string) => {\n if (!sessionId) return;\n const { result } = await closeSession({\n url,\n appNo,\n sessionId,\n token,\n });\n if (result?.code === API_SUCCESS_CODE) {\n // 删除成功后,重新获取会话列表\n initAppConversations(true);\n // 如果删除的是当前会话,则创建新的会话\n if (sessionId === currentSessionId) {\n clearChat();\n }\n } else {\n message.error(\"删除会话失败\");\n }\n };\n\n // 更新会话名称\n const updateSession = async (sessionId: string, title: string) => {\n if (!sessionId && !title) return;\n const { result } = await updateSessionTitle({\n url,\n appNo,\n title,\n sessionId,\n token,\n });\n if (result?.code === API_SUCCESS_CODE) {\n // 编辑成功后,重新获取会话列表\n initAppConversations();\n } else {\n message.error(\"更新会话失败\");\n }\n };\n\n // 初始化应用\n const initConfig = async () => {\n try {\n setLoading(true);\n const { data, result } = await fetchAppConfig({ url, appNo });\n if (result.code === API_SUCCESS_CODE) {\n setAppInfo(data);\n // 成功回调\n onSuccess?.({\n code: SuccessCode.APP_CONFIG_INIT_SUCCESS,\n message: \"初始化配置成功\",\n });\n } else {\n onError?.({\n code: (result.code as ErrorCode) || ErrorCode.APP_NOT_FOUND,\n message: result.message || \"获取应用配置失败\",\n });\n }\n } catch (error) {\n onError?.({\n code: ErrorCode.API_ERROR,\n message: \"获取应用配置失败\",\n });\n } finally {\n setLoading(false);\n }\n };\n\n // 初始化—获取配置 (仅在启用时)\n useEffect(() => {\n if (enabled && url && appNo) {\n initConfig();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [enabled, url, appNo]);\n\n // 初始化-聊天记录\n useEffect(() => {\n if (appInfo) {\n initAppConversations(true);\n }\n }, [appInfo]);\n\n return {\n appInfo,\n startChat,\n reChat,\n stopChat,\n clearChat,\n suggestChat,\n confirmFnCall,\n initialized,\n currentSessionId,\n sessionList,\n sessionPagination,\n prologue,\n suggestions: suggestedQuestions,\n loading,\n messages: mergedMessages,\n insertSuggestedQuestions,\n insertPrologue,\n deleteSession,\n updateSession,\n setSuggestedQuestions,\n setCurrentSessionDetail,\n setMessages,\n storeEvents,\n storeMessage,\n };\n}\n\nexport default useADKChat;\n"],"mappings":"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"}
1
+ {"version":3,"names":["useEffect","useCallback","useMemo","useRef","useState","fetchEventSource","EventStreamContentType","message","v4","SESSION_PAGE_SIZE","API_SUCCESS_CODE","SuccessCode","ErrorCode","fetchAppConfig","fetchSessionList","fetchSessionDetail","closeSession","updateSessionTitle","addFeedback","safeJsonParse","combineTextParts","parts","result","combinedTextPart","_iterator","_createForOfIteratorHelper","_step","s","n","done","part","value","text","thought","_objectSpread","push","undefined","err","e","f","useADKChat","_ref","_ref$url","url","window","location","origin","token","_ref$config","config","_ref$type","type","_ref$enabled","enabled","onError","onMessage","onSuccess","onStream","_useState","_useState2","_slicedToArray","loading","setLoading","ctrl","_ref2","appNo","showFirstSession","_useState3","_useState4","appInfo","setAppInfo","_useState5","_useState6","initialized","setInitialized","_useState7","_useState8","sessionList","setSessionList","_useState9","_useState10","currentSessionId","setCurrentSessionId","_useState11","total","pageNum","pageSize","_useState12","sessionPagination","setSessionPagination","_useState13","_useState14","prologue","setPrologue","_useState15","_useState16","suggestedQuestions","setSuggestedQuestions","_useState17","_useState18","messages","setMessages","mergedMessages","fnResMap","forEach","msg","functionResponse","_msg$functionResponse","id","map","functionCall","_msg$functionCall","textMsgRef","eventDataRef","Map","insertMessage","prev","lastMessage","length","isLoading","concat","_toConsumableArray","slice","insertSuggestedQuestions","suggested_questions","arguments","insertPrologue","updateMessage","m","storeEvents","event","_event$actions","title","actions","artifactDelta","name","executableCode","_part$executableCode$","code","codeExecutionResult","outcome","errorMessage","updatedEvent","newEventData","current","set","storeMessage","role","author","invocationId","eventId","timestamp","isLike","inlineData","displayName","data","mimeType","_event$groundingMetad","groundingMetadata","searchEntryPoint","renderedContent","fileData","Object","keys","processPart","_event$groundingMetad2","newChunk","newMessage","partial","processFollowupPart","_event$content","content","processErrorMessage","chunkJson","processActionArtifact","sendMessageRequest","values","Promise","resolve","abort","AbortController","requestUrl","method","signal","body","JSON","stringify","openWhenHidden","headers","stream","Authorization","onopen","response","_asyncToGenerator","_regeneratorRuntime","mark","_callee","wrap","_callee$","_context","next","ok","get","status","stop","onmessage","rawData","sessionId","error","warning","_iterator2","_step2","onclose","_textMsgRef$current","onerror","console","startChat","_ref4","_callee2","_ref3","_ref3$text","_ref3$files","files","_callee2$","_context2","abrupt","trim","temp","file","_file$response","_file$response2","fileUri","fileUrl","_file$response3","_file$response4","_file$response5","_file$response6","_file$response7","fileName","fileId","tempUrl","fileType","initAppConversations","_x","apply","reChat","newMessages","lastAIIndex","findLastIndex","splice","lastUserMessage","findLast","_lastUserMessage$text","_lastUserMessage$file","confirmFnCall","fnCall","confirmed","suggestChat","stopChat","_ctrl$current","clearChat","_appInfo$onboardingIn","_appInfo$onboardingIn2","newSessionId","onboardingInfo","formatMessages","isReplace","mapped","item","Array","isArray","toLowerCase","filter","p","Boolean","raw","functionCallMsg","find","_msg$functionCall2","_part$functionRespons","setCurrentSessionDetail","_ref5","_callee3","_yield$fetchSessionDe","_appInfo$onboardingIn3","_appInfo$onboardingIn4","_callee3$","_context3","sent","_x2","_ref6","_callee4","fetchDetail","_yield$fetchSessionLi","_yield$fetchSessionLi2","pagination","formatSessions","_data$","_appInfo$onboardingIn5","_appInfo$onboardingIn6","_args4","_callee4$","_context4","key","label","Date","startTime","getTime","meta","APP_MESSAGES_INIT_SUCCESS","t0","finish","deleteSession","_ref7","_callee5","_yield$closeSession","_callee5$","_context5","_x3","likeMessage","_ref8","_callee6","feedbackData","_yield$addFeedback","_callee6$","_context6","requestId","_x4","_x5","_x6","updateSession","_ref9","_callee7","_yield$updateSessionT","_callee7$","_context7","_x7","_x8","initConfig","_ref10","_callee8","_yield$fetchAppConfig","_callee8$","_context8","APP_CONFIG_INIT_SUCCESS","APP_NOT_FOUND","API_ERROR","suggestions"],"sources":["../../../src/hooks/useADKChat.ts"],"sourcesContent":["import { useEffect, useCallback, useMemo, useRef, useState } from \"react\";\nimport {\n fetchEventSource,\n EventStreamContentType,\n} from \"@microsoft/fetch-event-source\";\nimport { message } from \"antd\";\nimport { v4 } from \"uuid\";\nimport { SESSION_PAGE_SIZE, API_SUCCESS_CODE } from \"@/constants\";\nimport {\n SuccessCode,\n ErrorCode,\n DebugOptions,\n FunctionCall,\n SendContent,\n SessionData,\n AgentRunRequest,\n Event,\n FunctionResponse,\n IMessage,\n Part,\n} from \"@/types\";\nimport {\n fetchAppConfig,\n fetchSessionList,\n fetchSessionDetail,\n closeSession,\n updateSessionTitle,\n addFeedback,\n type ChatConfig,\n} from \"@/services/api\";\nimport { safeJsonParse } from \"@/utils\";\n\nconst combineTextParts = (parts: Part[]) => {\n const result: Part[] = [];\n let combinedTextPart: Part | undefined;\n\n // eslint-disable-next-line no-restricted-syntax\n for (const part of parts) {\n if (part.text) {\n // 如果没有 combined 或 combined 思考类型跟当前 part 不同,则创建新的合并引用\n if (!combinedTextPart || combinedTextPart.thought !== part.thought) {\n combinedTextPart = { ...part };\n result.push(combinedTextPart);\n } else {\n combinedTextPart.text += part.text;\n }\n } else {\n combinedTextPart = undefined;\n result.push(part);\n }\n }\n return result;\n};\n\nfunction useADKChat({\n url = window.location.origin,\n token,\n config = {},\n type = \"agentDebug\",\n enabled = true, // ← 新增: 是否启用 Hook\n onError,\n onMessage,\n onSuccess,\n onStream,\n}: DebugOptions) {\n const [loading, setLoading] = useState(false);\n const ctrl = useRef<AbortController | null>(null);\n // 应用配置\n const { appNo, showFirstSession } = config || {};\n const [appInfo, setAppInfo] = useState<ChatConfig | null>(null);\n // 初始化完成\n const [initialized, setInitialized] = useState(false);\n // 会话记录\n const [sessionList, setSessionList] = useState<SessionData[]>([]);\n // 当前会话\n const [currentSessionId, setCurrentSessionId] = useState<string>(() => v4());\n // 会话分页设置\n const [sessionPagination, setSessionPagination] = useState({\n total: 0,\n pageNum: 1,\n pageSize: SESSION_PAGE_SIZE,\n });\n // 开场白\n const [prologue, setPrologue] = useState<string>(\"\");\n // 建议问题\n const [suggestedQuestions, setSuggestedQuestions] = useState<string[]>([]);\n const [messages, setMessages] = useState<IMessage[]>([]);\n const mergedMessages = useMemo(() => {\n const fnResMap: Record<string, FunctionResponse> = {};\n messages.forEach((msg) => {\n if (msg.functionResponse) {\n fnResMap[msg?.functionResponse?.id || \"\"] = msg.functionResponse;\n }\n });\n return messages.map((msg) => {\n if (msg.functionCall) {\n return {\n ...msg,\n functionResponse: fnResMap[msg?.functionCall?.id || \"\"],\n };\n }\n return msg;\n });\n }, [messages]);\n const textMsgRef = useRef<IMessage>(null);\n const eventDataRef = useRef<Map<string, any>>(new Map());\n\n // 插入消息\n const insertMessage = useCallback((msg: IMessage) => {\n setMessages((prev) => {\n const lastMessage = prev[prev.length - 1];\n if (lastMessage?.isLoading) {\n return [...prev.slice(0, -1), msg, lastMessage];\n }\n return [...prev, msg];\n });\n }, []);\n\n // 初始化开场白预设置问题\n const insertSuggestedQuestions = (suggested_questions: string[] = []) => {\n if (!suggested_questions?.length) return;\n // 无消息内容 且 有建议问题时\n if (messages.length === 0 && suggested_questions.length) {\n setSuggestedQuestions(suggested_questions);\n }\n };\n\n // 初始化开场白\n const insertPrologue = (prologue: string) => {\n if (prologue) {\n setPrologue(prologue);\n }\n };\n\n // 更新消息\n const updateMessage = useCallback((msg: IMessage) => {\n setMessages((prev) => {\n return prev.map((m) => {\n if (m.id === msg.id) {\n return msg;\n }\n return m;\n });\n });\n }, []);\n\n // 存储事件\n const storeEvents = useCallback((part: Part | null, event: any) => {\n let title = \"\";\n\n if (part == null && event.actions?.artifactDelta) {\n title += \"eventAction: artifact\";\n } else if (part) {\n if (part.text) {\n title += `text:${part.text}`;\n } else if (part.functionCall) {\n title += `functionCall:${part.functionCall.name}`;\n } else if (part.functionResponse) {\n title += `functionResponse:${part.functionResponse.name}`;\n } else if (part.executableCode) {\n title += `executableCode:${part.executableCode.code?.slice(0, 10)}`;\n } else if (part.codeExecutionResult) {\n title += `codeExecutionResult:${part.codeExecutionResult.outcome}`;\n } else if (part.errorMessage) {\n title += `errorMessage:${part.errorMessage}`;\n }\n }\n\n const updatedEvent = { ...event, title };\n\n const newEventData = new Map(eventDataRef.current);\n newEventData.set(event.id, updatedEvent);\n eventDataRef.current = newEventData;\n }, []);\n\n // 存储消息\n const storeMessage = useCallback(\n (part: Part | null, event: Event, role: \"user\" | \"bot\") => {\n const msg: IMessage = {\n id: v4(),\n author: event.author,\n invocationId: event.invocationId,\n eventId: event.id,\n timestamp: event.timestamp,\n isLike: event.isLike || 0,\n role,\n };\n\n if (part) {\n if (part.inlineData) {\n msg.inlineData = {\n displayName: part.inlineData.displayName,\n data: part.inlineData.data,\n mimeType: part.inlineData.mimeType,\n };\n } else if (part.text) {\n msg.text = part.text;\n msg.thought = part.thought;\n\n if (event?.groundingMetadata?.searchEntryPoint?.renderedContent) {\n msg.renderedContent =\n event.groundingMetadata.searchEntryPoint.renderedContent;\n }\n } else if (part.fileData) {\n msg.fileData = [part.fileData];\n } else if (part.functionCall) {\n msg.functionCall = part.functionCall;\n } else if (part.functionResponse) {\n msg.functionResponse = part.functionResponse;\n } else if (part.executableCode) {\n msg.executableCode = part.executableCode;\n } else if (part.codeExecutionResult) {\n msg.codeExecutionResult = part.codeExecutionResult;\n }\n }\n\n if (part && Object.keys(part).length > 0) {\n insertMessage(msg);\n }\n },\n [insertMessage],\n );\n\n // 处理消息部分(关键更新)\n const processPart = useCallback(\n (event: Event, part: Part) => {\n const renderedContent =\n event.groundingMetadata?.searchEntryPoint?.renderedContent;\n if (part.text) {\n const newChunk = part.text;\n\n if (\n !textMsgRef.current ||\n textMsgRef.current.thought !== part.thought\n ) {\n const newMessage: IMessage = {\n id: v4(),\n author: event.author,\n invocationId: event.invocationId,\n eventId: event.id,\n timestamp: event.timestamp,\n role: \"bot\",\n text: newChunk,\n isLike: event.isLike || 0,\n thought: part.thought,\n };\n\n if (renderedContent) {\n newMessage.renderedContent = renderedContent;\n }\n\n textMsgRef.current = newMessage;\n // 存储原数据\n storeEvents(part, event);\n // 插入消息\n insertMessage(newMessage);\n } else {\n if (event.partial === false) {\n storeEvents(part, event);\n textMsgRef.current = null;\n return;\n }\n if (renderedContent) {\n textMsgRef.current = {\n ...textMsgRef.current,\n renderedContent,\n };\n }\n textMsgRef.current = {\n ...textMsgRef.current,\n text: (textMsgRef.current.text || \"\") + newChunk,\n };\n updateMessage(textMsgRef.current);\n }\n } else {\n textMsgRef.current = null;\n storeEvents(part, event);\n storeMessage(part, event, \"bot\");\n }\n },\n [storeEvents, storeMessage, insertMessage, updateMessage],\n );\n\n // 处理建议类消息\n const processFollowupPart = useCallback(\n (event: Event) => {\n // 获取建议类消息的文本内容\n const part = event?.content?.parts?.[0] || null;\n const text = part?.text || \"\";\n storeEvents(part, event);\n if (text) {\n setSuggestedQuestions((prev) => [...prev, text]);\n }\n },\n [storeEvents, insertMessage],\n );\n\n // 处理错误消息\n const processErrorMessage = useCallback(\n (chunkJson: any) => {\n storeEvents(null, chunkJson);\n insertMessage({\n id: v4(),\n text: chunkJson.errorMessage,\n role: \"bot\",\n });\n },\n [storeEvents, insertMessage],\n );\n\n // 处理动作和制品\n const processActionArtifact = useCallback(\n (event: any) => {\n if (event.actions && event.actions.artifactDelta) {\n storeEvents(null, event);\n storeMessage(null, event, \"bot\");\n }\n },\n [storeEvents, storeMessage],\n );\n\n // 发送消息请求\n const sendMessageRequest = useCallback(\n (values: AgentRunRequest) => {\n return new Promise<void>((resolve) => {\n if (ctrl.current) {\n ctrl.current.abort();\n }\n setLoading(true);\n ctrl.current = new AbortController();\n const requestUrl = `${url}/api/gateway-web/openApi/v1/aizt/app/${appNo}/sendMsgStreaming`;\n\n fetchEventSource(requestUrl, {\n method: \"POST\",\n signal: ctrl.current.signal,\n body: JSON.stringify(values),\n openWhenHidden: true,\n headers: {\n \"Content-Type\": \"application/json\",\n \"Cache-Control\": \"no-cache\",\n stream: \"true\",\n Authorization: `Bearer ${token}`,\n },\n async onopen(response) {\n if (\n response.ok &&\n response.headers.get(\"content-type\") === EventStreamContentType\n ) {\n // everything's good\n } else if (\n response.status >= 400 &&\n response.status < 500 &&\n response.status !== 429\n ) {\n resolve();\n } else {\n resolve();\n }\n },\n onmessage: (event) => {\n const rawData = safeJsonParse(event.data, {});\n\n // 处理新的数据格式: { data: {...}, result: {...} }\n let chunkJson: Event = rawData;\n if (rawData.data && rawData.result) {\n // 转换为旧格式\n chunkJson = {\n ...rawData.data,\n content: rawData.data, // data 本身就是 content\n invocationId: rawData.result.invocationId,\n sessionId: rawData.result.sessionId,\n id: rawData.result.invocationId,\n };\n }\n\n if (chunkJson.error) {\n message.warning(chunkJson.error);\n return;\n }\n onStream?.(chunkJson);\n if (chunkJson.content) {\n // 建议类消息单独处理\n if (chunkJson.content.role === \"followup\") {\n processFollowupPart(chunkJson);\n return;\n }\n // eslint-disable-next-line no-restricted-syntax\n for (const part of combineTextParts(chunkJson.content.parts)) {\n processPart(chunkJson, part);\n }\n } else if (chunkJson.errorMessage) {\n processErrorMessage(chunkJson);\n } else if (chunkJson.actions) {\n processActionArtifact(chunkJson);\n }\n },\n onclose: () => {\n setLoading(false);\n if (textMsgRef.current) {\n onMessage?.(textMsgRef.current?.text || \"\", textMsgRef.current);\n }\n textMsgRef.current = null;\n resolve();\n },\n onerror: (error) => {\n setLoading(false);\n resolve();\n console.error(\"EventSource failed:\", error);\n throw error;\n },\n });\n });\n },\n [\n type,\n currentSessionId,\n processActionArtifact,\n processErrorMessage,\n processPart,\n ],\n );\n\n // 发送会话\n const startChat = async ({\n text = \"\",\n files = [],\n functionResponse,\n }: SendContent) => {\n if (loading) return;\n if (!text.trim() && !functionResponse) return;\n // 清空建议问题\n setSuggestedQuestions([]);\n // 发送消息\n setMessages((prev) => {\n let temp = [...prev];\n // 如果 text 存在\n if (text.trim()) {\n temp.push({\n id: v4(),\n role: \"user\",\n text,\n });\n }\n // 如果file 存在\n if (files.length > 0) {\n temp.push({\n id: v4(),\n role: \"user\",\n fileData: files.map((file) => ({\n displayName: file.name,\n mimeType: file.response?.mimeType,\n fileUri: file.response?.fileUrl,\n })),\n });\n }\n // 如果 functionResponse 存在\n if (functionResponse) {\n temp.push({\n id: v4(),\n role: \"user\",\n functionResponse,\n });\n }\n return temp;\n });\n await sendMessageRequest({\n stream: true,\n sessionId: currentSessionId,\n content: {\n role: \"user\",\n parts: functionResponse ? [{ functionResponse }] : [{ text }],\n },\n files: files.map((file) => ({\n fileName: file.response?.fileName,\n fileId: file.response?.fileId,\n tempUrl: file.response?.fileUrl,\n type: file.response?.fileType,\n mimeType: file.response?.mimeType,\n })),\n });\n // 获取聊天记录\n initAppConversations();\n };\n\n // 重新发送会话\n const reChat = () => {\n if (loading) return;\n if (messages.length === 0) return;\n setMessages((prev) => {\n const newMessages = [...prev];\n // 删除最后一条 AI 消息\n const lastAIIndex = newMessages.findLastIndex(\n (msg) => msg.role === \"bot\",\n );\n if (lastAIIndex !== -1) {\n newMessages.splice(lastAIIndex, 1);\n }\n // 清空建议问题\n setSuggestedQuestions([]);\n // 重新发送最后一条用户消息\n const lastUserMessage = newMessages.findLast(\n (msg) => msg.role === \"user\",\n );\n if (lastUserMessage) {\n const { text = \"\", fileData = [] } = lastUserMessage;\n sendMessageRequest({\n stream: true,\n sessionId: currentSessionId,\n content: {\n role: \"user\",\n parts: [\n {\n text,\n },\n ],\n },\n files: fileData?.map((file) => ({\n fileName: file.displayName,\n tempUrl: file.fileUri,\n mimeType: file.mimeType,\n })),\n });\n }\n\n return newMessages;\n });\n };\n\n // 确认函数调用\n const confirmFnCall = (fnCall: FunctionCall, confirmed: boolean) => {\n const functionResponse = {\n id: fnCall.id,\n name: fnCall.name,\n response: { confirmed },\n };\n startChat({ functionResponse });\n };\n\n // 使用建议问题\n const suggestChat = (text: string) => {\n if (loading) return;\n if (!text.trim()) return;\n setSuggestedQuestions([]);\n startChat({ text });\n };\n\n // 停止会话\n const stopChat = useCallback(() => {\n ctrl.current?.abort();\n setLoading(false);\n textMsgRef.current = null;\n }, [ctrl]);\n\n // 清除/重置会话\n const clearChat = () => {\n const newSessionId = v4();\n setCurrentSessionId(newSessionId);\n // 重置聊天内容\n stopChat();\n setPrologue(appInfo?.onboardingInfo?.prologue || \"\");\n setMessages([]);\n setSuggestedQuestions(appInfo?.onboardingInfo?.suggested_questions || []);\n };\n\n // 格式化会话记录\n const formatMessages = (messages: any[], isReplace = false) => {\n const mapped: IMessage[] = [];\n messages.forEach((item) => {\n if (!item || !item.content || !Array.isArray(item.content.parts)) return;\n\n const role =\n (item.content.role || \"\").toLowerCase() === \"user\" ? \"user\" : \"bot\";\n const parts = Array.isArray(item.content.parts)\n ? item.content.parts.filter((p: any) => {\n if (!p) return false;\n return Boolean(\n p.text ||\n p.inlineData ||\n p.functionCall ||\n p.functionResponse ||\n p.fileData ||\n p.executableCode ||\n p.codeExecutionResult ||\n p.errorMessage,\n );\n })\n : [];\n\n if (parts.length === 0) return;\n parts.forEach((part: any) => {\n const msg: IMessage = {\n id: v4(),\n author: item.author,\n invocationId: item.invocationId,\n eventId: item.id,\n timestamp: item.timestamp,\n isLike: item.isLike,\n role,\n raw: item,\n } as IMessage;\n\n if (part.inlineData) {\n msg.inlineData = {\n displayName: part.inlineData.displayName,\n data: part.inlineData.data,\n mimeType: part.inlineData.mimeType,\n } as any;\n }\n if (part.text) {\n msg.text = part.text;\n if (typeof part.thought !== \"undefined\") msg.thought = part.thought;\n }\n if (part.functionCall) msg.functionCall = part.functionCall;\n if (part.fileData) {\n msg.inlineData = {\n displayName: part.fileData.displayName || \"\",\n data: part.fileData.fileUri,\n mimeType: part.fileData.mimeType,\n } as any;\n }\n if (part.executableCode) msg.executableCode = part.executableCode;\n if (part.codeExecutionResult)\n msg.codeExecutionResult = part.codeExecutionResult;\n if (part.errorMessage) msg.text = part.errorMessage;\n // 补全函数调用结果\n if (part.functionResponse) {\n // 通过 functionCall.id 寻找对应的函数调用消息,在那条消息上添加functionResponse\n const functionCallMsg = mapped.find(\n (msg) => msg.functionCall?.id === part.functionResponse?.id,\n );\n if (functionCallMsg) {\n functionCallMsg.functionResponse = part.functionResponse;\n }\n return;\n }\n mapped.push(msg);\n });\n });\n\n setMessages((prev) => (isReplace ? mapped : [...prev, ...mapped]));\n };\n\n // 设置当前会话详情\n const setCurrentSessionDetail = async (sessionId: string) => {\n if (sessionId) {\n if (sessionId === currentSessionId) {\n return;\n }\n setCurrentSessionId(sessionId); // 设置当前会话 id;\n const { data, result } = await fetchSessionDetail({\n url,\n appNo,\n sessionId,\n token,\n });\n\n if (result?.code === API_SUCCESS_CODE) {\n setPrologue(appInfo?.onboardingInfo?.prologue || \"\");\n // 新接口直接返回按 event/item 结构的数组,传入 formatMessages 处理\n if (Array.isArray(data) && data.length > 0) {\n formatMessages(data, true);\n } else {\n setSuggestedQuestions(\n appInfo?.onboardingInfo?.suggested_questions || [],\n );\n }\n }\n } else {\n // 兼容 无 session异常\n setCurrentSessionId(v4());\n }\n };\n\n // 获取聊天记录\n const initAppConversations = async (fetchDetail = false) => {\n try {\n setLoading(true);\n\n const {\n data = [],\n pagination,\n result,\n } = await fetchSessionList({\n url,\n appNo,\n token,\n pageSize: sessionPagination.pageSize,\n });\n\n if (result?.code === API_SUCCESS_CODE) {\n if (data.length > 0) {\n const formatSessions = data.map((item) => {\n return {\n key: item.sessionId,\n label: item.title || \"新对话\",\n timestamp: new Date(item.startTime).getTime(),\n messages: [],\n meta: {\n ...item,\n },\n };\n });\n\n setSessionList(formatSessions);\n // 设置分页信息\n setSessionPagination({\n pageNum: sessionPagination.pageNum,\n pageSize: sessionPagination.pageSize,\n total: pagination?.total || 0,\n });\n const { sessionId } = data?.[0];\n if (showFirstSession) {\n setCurrentSessionDetail(sessionId);\n } else {\n fetchDetail && setPrologue(appInfo?.onboardingInfo?.prologue || \"\");\n fetchDetail &&\n setSuggestedQuestions(\n appInfo?.onboardingInfo?.suggested_questions || [],\n );\n }\n // 成功回调\n if (!initialized) {\n onSuccess?.({\n code: SuccessCode.APP_MESSAGES_INIT_SUCCESS,\n message: \"初始化聊天记录成功\",\n data: {\n sessionId,\n },\n });\n setInitialized(true);\n }\n } else {\n // 无会话记录时,初始化会话详情\n clearChat();\n }\n } else {\n setSessionList([]);\n setCurrentSessionId(v4());\n setPrologue(\"\");\n setSuggestedQuestions([]);\n }\n } catch {\n //\n } finally {\n setLoading(false);\n }\n };\n\n // 删除会话\n const deleteSession = async (sessionId: string) => {\n if (!sessionId) return;\n const { result } = await closeSession({\n url,\n appNo,\n sessionId,\n token,\n });\n if (result?.code === API_SUCCESS_CODE) {\n // 删除成功后,重新获取会话列表\n initAppConversations(true);\n // 如果删除的是当前会话,则创建新的会话\n if (sessionId === currentSessionId) {\n clearChat();\n }\n } else {\n message.error(\"删除会话失败\");\n }\n };\n\n // 点赞/点踩\n const likeMessage = async (\n invocationId: string,\n isLike: 1 | -1,\n feedbackData?: { feedbackTags?: string; feedbackDescription?: string },\n ) => {\n if (!appNo || !invocationId) return false;\n const { result } = await addFeedback({\n url,\n appNo,\n token,\n requestId: invocationId,\n isLike,\n ...feedbackData,\n });\n if (result?.code === API_SUCCESS_CODE) {\n setMessages((prev) =>\n prev.map((m) =>\n m.invocationId === invocationId ? { ...m, isLike } : m,\n ),\n );\n return true;\n }\n return false;\n };\n\n // 更新会话名称\n const updateSession = async (sessionId: string, title: string) => {\n if (!sessionId && !title) return;\n const { result } = await updateSessionTitle({\n url,\n appNo,\n title,\n sessionId,\n token,\n });\n if (result?.code === API_SUCCESS_CODE) {\n // 编辑成功后,重新获取会话列表\n initAppConversations();\n } else {\n message.error(\"更新会话失败\");\n }\n };\n\n // 初始化应用\n const initConfig = async () => {\n try {\n setLoading(true);\n const { data, result } = await fetchAppConfig({ url, appNo });\n if (result.code === API_SUCCESS_CODE) {\n setAppInfo(data);\n // 成功回调\n onSuccess?.({\n code: SuccessCode.APP_CONFIG_INIT_SUCCESS,\n message: \"初始化配置成功\",\n });\n } else {\n onError?.({\n code: (result.code as ErrorCode) || ErrorCode.APP_NOT_FOUND,\n message: result.message || \"获取应用配置失败\",\n });\n }\n } catch (error) {\n onError?.({\n code: ErrorCode.API_ERROR,\n message: \"获取应用配置失败\",\n });\n } finally {\n setLoading(false);\n }\n };\n\n // 初始化—获取配置 (仅在启用时)\n useEffect(() => {\n if (enabled && url && appNo) {\n initConfig();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [enabled, url, appNo]);\n\n // 初始化-聊天记录\n useEffect(() => {\n if (appInfo) {\n initAppConversations(true);\n }\n }, [appInfo]);\n\n return {\n appInfo,\n startChat,\n reChat,\n stopChat,\n clearChat,\n suggestChat,\n confirmFnCall,\n initialized,\n currentSessionId,\n sessionList,\n sessionPagination,\n prologue,\n suggestions: suggestedQuestions,\n loading,\n messages: mergedMessages,\n insertSuggestedQuestions,\n insertPrologue,\n deleteSession,\n updateSession,\n setSuggestedQuestions,\n setCurrentSessionDetail,\n setMessages,\n storeEvents,\n storeMessage,\n likeMessage,\n };\n}\n\nexport default useADKChat;\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { IMessage, SendContent } from './index';
1
+ import { IMessage, SendContent } from "./index";
2
2
  /**
3
3
  * 聊天 Hook 标准接口
4
4
  * 所有自定义 Hook 必须实现这个接口
@@ -63,6 +63,11 @@ export interface ChatHookResult {
63
63
  setCurrentSessionDetail: (id: string) => void;
64
64
  /** 直接设置消息列表 */
65
65
  setMessages: (msgs: IMessage[] | ((prev: IMessage[]) => IMessage[])) => void;
66
+ /** 点赞/点踩消息(可选,自定义 Hook 可不实现) */
67
+ likeMessage?: (invocationId: string, isLike: 1 | -1, feedbackData?: {
68
+ feedbackTags?: string;
69
+ feedbackDescription?: string;
70
+ }) => Promise<boolean>;
66
71
  }
67
72
  /**
68
73
  * Hook 工厂函数类型
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["../../../src/types/ChatHook.ts"],"sourcesContent":["import { IMessage, SendContent } from './index';\n\n/**\n * 聊天 Hook 标准接口\n * 所有自定义 Hook 必须实现这个接口\n *\n * @example\n * // 使用内置标准协议\n * <XAdkProvider url=\"...\" token=\"...\" config={...}>\n * <XAdkProvider.DefaultLayout />\n * </XAdkProvider>\n *\n * @example\n * // 使用自定义 Hook (GraphQL)\n * function MyApp() {\n * const chatData = useMyGraphQLChat({ endpoint: '...' });\n * return (\n * <XAdkProvider chatData={chatData}>\n * <XAdkProvider.DefaultLayout />\n * </XAdkProvider>\n * );\n * }\n */\nexport interface ChatHookResult {\n // ========== 状态 ==========\n\n /** 消息列表 */\n messages: IMessage[];\n\n /** 加载状态 */\n loading: boolean;\n\n /** 当前会话ID */\n currentSessionId: string;\n\n /** 开场白 */\n prologue: string;\n\n /** 建议问题列表 */\n suggestions: string[];\n\n /** 应用信息 */\n appInfo: any | null;\n\n /** 是否已初始化 */\n initialized: boolean;\n\n // ========== 会话列表 ==========\n\n /** 会话列表 */\n sessionList: any[];\n\n /** 会话分页信息 */\n sessionPagination: {\n total: number;\n pageNum: number;\n pageSize: number;\n };\n\n // ========== 操作方法 ==========\n\n /** 发送消息 */\n startChat: (content: SendContent) => void;\n\n /** 停止当前对话 */\n stopChat: () => void;\n\n /** 清空当前会话消息 */\n clearChat: () => void;\n\n /** 重新生成最后一条回复 */\n reChat: () => void;\n\n /** 发送建议问题 */\n suggestChat: (suggestion: string) => void;\n\n /** 确认函数调用 */\n confirmFnCall: (response: any) => void;\n\n /** 删除会话 */\n deleteSession: (id: string) => void;\n\n /** 更新会话标题 */\n updateSession: (id: string, title: string) => void;\n\n /** 切换会话 */\n setCurrentSessionDetail: (id: string) => void;\n\n /** 直接设置消息列表 */\n setMessages: (msgs: IMessage[] | ((prev: IMessage[]) => IMessage[])) => void;\n}\n\n/**\n * Hook 工厂函数类型\n *\n * @example\n * const useMyCustomChat: ChatHookFactory = (options) => {\n * // 实现自定义协议逻辑\n * return {\n * messages: [...],\n * loading: false,\n * startChat: (content) => { ... },\n * // ... 其他方法\n * };\n * };\n */\nexport type ChatHookFactory = (options: any) => ChatHookResult;\n"],"mappings":""}
1
+ {"version":3,"names":[],"sources":["../../../src/types/ChatHook.ts"],"sourcesContent":["import { IMessage, SendContent } from \"./index\";\n\n/**\n * 聊天 Hook 标准接口\n * 所有自定义 Hook 必须实现这个接口\n *\n * @example\n * // 使用内置标准协议\n * <XAdkProvider url=\"...\" token=\"...\" config={...}>\n * <XAdkProvider.DefaultLayout />\n * </XAdkProvider>\n *\n * @example\n * // 使用自定义 Hook (GraphQL)\n * function MyApp() {\n * const chatData = useMyGraphQLChat({ endpoint: '...' });\n * return (\n * <XAdkProvider chatData={chatData}>\n * <XAdkProvider.DefaultLayout />\n * </XAdkProvider>\n * );\n * }\n */\nexport interface ChatHookResult {\n // ========== 状态 ==========\n\n /** 消息列表 */\n messages: IMessage[];\n\n /** 加载状态 */\n loading: boolean;\n\n /** 当前会话ID */\n currentSessionId: string;\n\n /** 开场白 */\n prologue: string;\n\n /** 建议问题列表 */\n suggestions: string[];\n\n /** 应用信息 */\n appInfo: any | null;\n\n /** 是否已初始化 */\n initialized: boolean;\n\n // ========== 会话列表 ==========\n\n /** 会话列表 */\n sessionList: any[];\n\n /** 会话分页信息 */\n sessionPagination: {\n total: number;\n pageNum: number;\n pageSize: number;\n };\n\n // ========== 操作方法 ==========\n\n /** 发送消息 */\n startChat: (content: SendContent) => void;\n\n /** 停止当前对话 */\n stopChat: () => void;\n\n /** 清空当前会话消息 */\n clearChat: () => void;\n\n /** 重新生成最后一条回复 */\n reChat: () => void;\n\n /** 发送建议问题 */\n suggestChat: (suggestion: string) => void;\n\n /** 确认函数调用 */\n confirmFnCall: (response: any) => void;\n\n /** 删除会话 */\n deleteSession: (id: string) => void;\n\n /** 更新会话标题 */\n updateSession: (id: string, title: string) => void;\n\n /** 切换会话 */\n setCurrentSessionDetail: (id: string) => void;\n\n /** 直接设置消息列表 */\n setMessages: (msgs: IMessage[] | ((prev: IMessage[]) => IMessage[])) => void;\n\n /** 点赞/点踩消息(可选,自定义 Hook 可不实现) */\n likeMessage?: (\n invocationId: string,\n isLike: 1 | -1,\n feedbackData?: { feedbackTags?: string; feedbackDescription?: string },\n ) => Promise<boolean>;\n}\n\n/**\n * Hook 工厂函数类型\n *\n * @example\n * const useMyCustomChat: ChatHookFactory = (options) => {\n * // 实现自定义协议逻辑\n * return {\n * messages: [...],\n * loading: false,\n * startChat: (content) => { ... },\n * // ... 其他方法\n * };\n * };\n */\nexport type ChatHookFactory = (options: any) => ChatHookResult;\n"],"mappings":""}
@@ -214,7 +214,7 @@ export interface XAdkChatbotProps extends Partial<XAdkSenderProps> {
214
214
  welcome?: React.ReactNode;
215
215
  /** 显示函数调用详情 */
216
216
  showFnCallDetail?: boolean;
217
- /** 是否初始化 */
217
+ /** 是否初始化完成,初始化完成后自动滚动到最新消息 */
218
218
  initialized?: boolean;
219
219
  /** 提交回调 */
220
220
  onSubmit?: ({ text, files }: SendContent) => void;
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["../../../src/types/XAdkChatbot.ts"],"sourcesContent":["import { JSX, ReactNode } from \"react\";\nimport { type XAdkSenderProps } from \"./XAdkSender\";\nimport { type SendContent } from \"./XAiSender\";\n\n/**\n * 消息分组接口\n */\nexport interface ChatGroup {\n id: string;\n role: \"user\" | \"bot\";\n msgs: IMessage[];\n invocationId?: string;\n allFiles: any[];\n /** 点赞状态: 1=赞, -1=踩, 0=未反馈 */\n isLike?: number;\n}\n\nexport interface IInvocation {\n id: string;\n name: string;\n spanId: string;\n traceId: string;\n parentSpanId: string;\n startTime: number;\n endTime: number;\n sessionId: string;\n invocationId: string;\n duration: number;\n attributes: Record<string, string>;\n botName: string;\n workspaceNo: string;\n status: number;\n agentName: string;\n agentNo: string;\n agentVersionNo: string;\n userId: string;\n}\n\nexport interface AgentRunRequest {\n stream?: boolean;\n sessionId: string | undefined;\n content: {\n parts: Array<{\n text?: string;\n functionResponse?: {\n id?: string;\n name?: string;\n response?: any;\n };\n }>;\n role: string;\n };\n files?: Array<{\n fileName: string;\n fileId?: string;\n tempUrl: string;\n type?: string;\n mimeType: string;\n }>;\n stateDelta?: any;\n}\nexport interface Blob {\n displayName?: string;\n mimeType?: string;\n data: string;\n}\n\nexport interface FunctionCall {\n id?: string;\n name: string;\n args: { [key: string]: any };\n}\n\nexport interface FunctionResponse {\n id?: string;\n name: string;\n response: { [key: string]: any };\n}\n\nexport interface FileData {\n displayName: string;\n mimeType: string;\n fileUri: string;\n}\n\nexport interface ExecutableCode {\n language: \"UNKNOWN\" | \"PYTHON\";\n code: string;\n}\n\nexport interface CodeExecutionResult {\n outcome: \"UNKNOWN\" | \"OK\" | \"FAILED\" | \"DEADLINE_EXCEEDED\";\n output: string;\n}\n\nexport interface Part {\n text?: string;\n inlineData?: Blob;\n functionCall?: FunctionCall;\n functionResponse?: FunctionResponse;\n thought?: boolean;\n fileData?: FileData;\n executableCode?: ExecutableCode;\n codeExecutionResult?: CodeExecutionResult;\n errorMessage?: string;\n}\n\nexport interface GenAiContent {\n role: string;\n parts: Part[];\n}\n\nexport interface LlmRequest {\n contents: GenAiContent[];\n}\n\nexport interface LlmResponse {\n partial?: boolean;\n content: GenAiContent;\n error?: string;\n errorMessage?: string;\n errorCode?: string;\n longRunningToolIds?: string[];\n}\n\nexport interface EventActions {\n message?: string;\n artifactDelta?: any;\n functionCall?: FunctionCall;\n functionResponse?: FunctionResponse;\n finishReason?: string;\n}\n\nexport interface Event extends LlmResponse {\n id?: string;\n author?: string;\n invocationId?: string;\n actions?: EventActions;\n longRunningToolIds?: string[];\n branch?: string;\n timestamp?: number;\n evalStatus?: any;\n failedMetric?: any;\n evalScore?: any;\n evalThreshold?: any;\n groundingMetadata?: {\n searchEntryPoint?: {\n renderedContent?: any;\n };\n };\n isLike?: number;\n sessionId?: string;\n}\n\nexport interface SessionState {\n [key: string]: unknown;\n}\n\nexport interface Session {\n id?: string;\n appName?: string;\n userId?: string;\n state?: SessionState;\n events?: Event[];\n lastUpdateTime?: number;\n}\n\nexport interface TimeTick {\n position: number;\n label: string;\n}\n\nexport interface IMessage {\n /** 前端生成的唯一标识 */\n id: string;\n /** 单次请求的唯一标识 */\n invocationId?: string;\n /** 单个Event的唯一标识,一个event里有可能有多个parts的消息 */\n eventId?: string;\n /** 消息发起人:智能体名称、user */\n author?: string;\n role: \"bot\" | \"user\";\n /** 时间戳 */\n timestamp?: number;\n isLoading?: boolean;\n /** 函数调用 */\n functionCall?: FunctionCall;\n /** 函数调用结果 */\n functionResponse?: FunctionResponse;\n /** 文件上传 */\n inlineData?: Blob;\n /** 文本消息 */\n text?: string;\n /** 文件信息 */\n fileData?: FileData[];\n /** 思考 */\n thought?: boolean;\n executableCode?: ExecutableCode;\n codeExecutionResult?: CodeExecutionResult;\n renderedContent?: any;\n /** 原始数据 */\n raw?: any;\n // 下面暂时没有用到\n evalStatus?: any;\n failedMetric?: any;\n evalScore?: any;\n evalThreshold?: any;\n invocationIndex?: any;\n finalResponsePartIndex?: any;\n toolUseIndex?: any;\n /** 是否赞/踩 */\n isLike?: number;\n}\n\nexport type ActionProps = (data: {\n message: ChatGroup;\n isLastBotMsg: boolean;\n}) => JSX.Element | null;\n\nexport interface XAdkChatbotProps extends Partial<XAdkSenderProps> {\n className?: string;\n style?: React.CSSProperties;\n // 加载状态\n loading?: boolean;\n /** 消息列表 */\n messages: IMessage[];\n /** 开场白 */\n prologue?: string;\n /** 建议回复 */\n suggestions?: string[];\n /** 欢迎页面 */\n welcome?: React.ReactNode;\n /** 显示函数调用详情 */\n showFnCallDetail?: boolean;\n /** 是否初始化 */\n initialized?: boolean;\n /** 提交回调 */\n onSubmit?: ({ text, files }: SendContent) => void;\n /** 函数调用确认回调 */\n onConfirm?: (fnCall: FunctionCall, confirmed: boolean) => void;\n /** 停止回调 */\n onStop?: () => void;\n /** 清除回调 */\n onClear?: () => void;\n /** 建议回复回调 */\n onSuggest?: (text: string) => void;\n\n // ========== 新增功能 ==========\n\n /** Agent 名称 (欢迎页面) */\n agentName?: string;\n /** Agent 图标 (欢迎页面) */\n agentIcon?: string;\n /** Agent 描述 (欢迎页面) */\n description?: string;\n\n /** 是否显示重试按钮 */\n showRetry?: boolean;\n /** 是否显示复制按钮 */\n showCopy?: boolean;\n /** 是否显示日志按钮 */\n showLog?: boolean;\n\n /** 重试回调 */\n onRetry?: () => void;\n /** 复制回调 */\n onCopy?: (text: string) => void;\n /** 查看日志回调 */\n onShowLog?: (invocationId: string, timestamp?: number) => void;\n\n /** 是否启用消息分组 (默认 true) */\n enableGrouping?: boolean;\n\n /** 是否自动解析 process 内容并展示思维链 (默认 true) */\n enableProcessParsing?: boolean;\n\n /** 消息功能区 */\n actions?: ActionProps;\n\n /**\n * Process 解析选项\n * @example\n * // 业务项目格式 (注释模式)\n * parseOptions={{ mode: 'comment' }}\n *\n * @example\n * // 自定义格式\n * parseOptions={{\n * mode: 'custom',\n * customPatterns: [\n * { regex: /\\[REASONING\\]([\\s\\S]*?)\\[\\/REASONING\\]/g, type: 'reasoning' }\n * ]\n * }}\n */\n parseOptions?: {\n mode?: \"xml\" | \"comment\" | \"custom\";\n customPatterns?: Array<{ regex: RegExp; type: string }>;\n finalMarker?: string;\n };\n\n /** 是否禁用输入 */\n disabled?: boolean;\n\n /** 是否流式响应 */\n stream?: boolean;\n}\n"],"mappings":""}
1
+ {"version":3,"names":[],"sources":["../../../src/types/XAdkChatbot.ts"],"sourcesContent":["import { JSX } from \"react\";\nimport { type XAdkSenderProps } from \"./XAdkSender\";\nimport { type SendContent } from \"./XAiSender\";\n\n/**\n * 消息分组接口\n */\nexport interface ChatGroup {\n id: string;\n role: \"user\" | \"bot\";\n msgs: IMessage[];\n invocationId?: string;\n allFiles: any[];\n /** 点赞状态: 1=赞, -1=踩, 0=未反馈 */\n isLike?: number;\n}\n\nexport interface IInvocation {\n id: string;\n name: string;\n spanId: string;\n traceId: string;\n parentSpanId: string;\n startTime: number;\n endTime: number;\n sessionId: string;\n invocationId: string;\n duration: number;\n attributes: Record<string, string>;\n botName: string;\n workspaceNo: string;\n status: number;\n agentName: string;\n agentNo: string;\n agentVersionNo: string;\n userId: string;\n}\n\nexport interface AgentRunRequest {\n stream?: boolean;\n sessionId: string | undefined;\n content: {\n parts: Array<{\n text?: string;\n functionResponse?: {\n id?: string;\n name?: string;\n response?: any;\n };\n }>;\n role: string;\n };\n files?: Array<{\n fileName: string;\n fileId?: string;\n tempUrl: string;\n type?: string;\n mimeType: string;\n }>;\n stateDelta?: any;\n}\nexport interface Blob {\n displayName?: string;\n mimeType?: string;\n data: string;\n}\n\nexport interface FunctionCall {\n id?: string;\n name: string;\n args: { [key: string]: any };\n}\n\nexport interface FunctionResponse {\n id?: string;\n name: string;\n response: { [key: string]: any };\n}\n\nexport interface FileData {\n displayName: string;\n mimeType: string;\n fileUri: string;\n}\n\nexport interface ExecutableCode {\n language: \"UNKNOWN\" | \"PYTHON\";\n code: string;\n}\n\nexport interface CodeExecutionResult {\n outcome: \"UNKNOWN\" | \"OK\" | \"FAILED\" | \"DEADLINE_EXCEEDED\";\n output: string;\n}\n\nexport interface Part {\n text?: string;\n inlineData?: Blob;\n functionCall?: FunctionCall;\n functionResponse?: FunctionResponse;\n thought?: boolean;\n fileData?: FileData;\n executableCode?: ExecutableCode;\n codeExecutionResult?: CodeExecutionResult;\n errorMessage?: string;\n}\n\nexport interface GenAiContent {\n role: string;\n parts: Part[];\n}\n\nexport interface LlmRequest {\n contents: GenAiContent[];\n}\n\nexport interface LlmResponse {\n partial?: boolean;\n content: GenAiContent;\n error?: string;\n errorMessage?: string;\n errorCode?: string;\n longRunningToolIds?: string[];\n}\n\nexport interface EventActions {\n message?: string;\n artifactDelta?: any;\n functionCall?: FunctionCall;\n functionResponse?: FunctionResponse;\n finishReason?: string;\n}\n\nexport interface Event extends LlmResponse {\n id?: string;\n author?: string;\n invocationId?: string;\n actions?: EventActions;\n longRunningToolIds?: string[];\n branch?: string;\n timestamp?: number;\n evalStatus?: any;\n failedMetric?: any;\n evalScore?: any;\n evalThreshold?: any;\n groundingMetadata?: {\n searchEntryPoint?: {\n renderedContent?: any;\n };\n };\n isLike?: number;\n sessionId?: string;\n}\n\nexport interface SessionState {\n [key: string]: unknown;\n}\n\nexport interface Session {\n id?: string;\n appName?: string;\n userId?: string;\n state?: SessionState;\n events?: Event[];\n lastUpdateTime?: number;\n}\n\nexport interface TimeTick {\n position: number;\n label: string;\n}\n\nexport interface IMessage {\n /** 前端生成的唯一标识 */\n id: string;\n /** 单次请求的唯一标识 */\n invocationId?: string;\n /** 单个Event的唯一标识,一个event里有可能有多个parts的消息 */\n eventId?: string;\n /** 消息发起人:智能体名称、user */\n author?: string;\n role: \"bot\" | \"user\";\n /** 时间戳 */\n timestamp?: number;\n isLoading?: boolean;\n /** 函数调用 */\n functionCall?: FunctionCall;\n /** 函数调用结果 */\n functionResponse?: FunctionResponse;\n /** 文件上传 */\n inlineData?: Blob;\n /** 文本消息 */\n text?: string;\n /** 文件信息 */\n fileData?: FileData[];\n /** 思考 */\n thought?: boolean;\n executableCode?: ExecutableCode;\n codeExecutionResult?: CodeExecutionResult;\n renderedContent?: any;\n /** 原始数据 */\n raw?: any;\n // 下面暂时没有用到\n evalStatus?: any;\n failedMetric?: any;\n evalScore?: any;\n evalThreshold?: any;\n invocationIndex?: any;\n finalResponsePartIndex?: any;\n toolUseIndex?: any;\n /** 是否赞/踩 */\n isLike?: number;\n}\n\nexport type ActionProps = (data: {\n message: ChatGroup;\n isLastBotMsg: boolean;\n}) => JSX.Element | null;\n\nexport interface XAdkChatbotProps extends Partial<XAdkSenderProps> {\n className?: string;\n style?: React.CSSProperties;\n // 加载状态\n loading?: boolean;\n /** 消息列表 */\n messages: IMessage[];\n /** 开场白 */\n prologue?: string;\n /** 建议回复 */\n suggestions?: string[];\n /** 欢迎页面 */\n welcome?: React.ReactNode;\n /** 显示函数调用详情 */\n showFnCallDetail?: boolean;\n /** 是否初始化完成,初始化完成后自动滚动到最新消息 */\n initialized?: boolean;\n /** 提交回调 */\n onSubmit?: ({ text, files }: SendContent) => void;\n /** 函数调用确认回调 */\n onConfirm?: (fnCall: FunctionCall, confirmed: boolean) => void;\n /** 停止回调 */\n onStop?: () => void;\n /** 清除回调 */\n onClear?: () => void;\n /** 建议回复回调 */\n onSuggest?: (text: string) => void;\n\n // ========== 新增功能 ==========\n\n /** Agent 名称 (欢迎页面) */\n agentName?: string;\n /** Agent 图标 (欢迎页面) */\n agentIcon?: string;\n /** Agent 描述 (欢迎页面) */\n description?: string;\n\n /** 是否显示重试按钮 */\n showRetry?: boolean;\n /** 是否显示复制按钮 */\n showCopy?: boolean;\n /** 是否显示日志按钮 */\n showLog?: boolean;\n\n /** 重试回调 */\n onRetry?: () => void;\n /** 复制回调 */\n onCopy?: (text: string) => void;\n /** 查看日志回调 */\n onShowLog?: (invocationId: string, timestamp?: number) => void;\n\n /** 是否启用消息分组 (默认 true) */\n enableGrouping?: boolean;\n\n /** 是否自动解析 process 内容并展示思维链 (默认 true) */\n enableProcessParsing?: boolean;\n\n /** 消息功能区 */\n actions?: ActionProps;\n\n /**\n * Process 解析选项\n * @example\n * // 业务项目格式 (注释模式)\n * parseOptions={{ mode: 'comment' }}\n *\n * @example\n * // 自定义格式\n * parseOptions={{\n * mode: 'custom',\n * customPatterns: [\n * { regex: /\\[REASONING\\]([\\s\\S]*?)\\[\\/REASONING\\]/g, type: 'reasoning' }\n * ]\n * }}\n */\n parseOptions?: {\n mode?: \"xml\" | \"comment\" | \"custom\";\n customPatterns?: Array<{ regex: RegExp; type: string }>;\n finalMarker?: string;\n };\n\n /** 是否禁用输入 */\n disabled?: boolean;\n\n /** 是否流式响应 */\n stream?: boolean;\n}\n"],"mappings":""}
@@ -97,6 +97,11 @@ export interface XAdkProviderConfig {
97
97
  appNo?: string;
98
98
  chatProps?: ChatConfig;
99
99
  debug?: boolean;
100
+ /**
101
+ * 是否展示点赞/点踩按钮
102
+ * @default true
103
+ */
104
+ showFeedback?: boolean;
100
105
  }
101
106
  /**
102
107
  * XAdkProvider Props
@@ -105,7 +110,7 @@ export interface XAdkProviderProps {
105
110
  /**
106
111
  * AI 服务基础地址
107
112
  */
108
- url: string;
113
+ url?: string;
109
114
  /**
110
115
  * 认证 token
111
116
  */
@@ -1 +1 @@
1
- {"version":3,"names":["EventCode"],"sources":["../../../src/types/XAdkProvider.ts"],"sourcesContent":["import { ReactNode } from \"react\";\nimport {\n IMessage,\n Success,\n Event,\n Error,\n SendContent,\n ThemeType,\n} from \"@/types\";\n\nexport interface DebugOptions {\n url: string;\n sessionId?: string;\n config: any;\n token: string;\n type?: \"agentDebug\" | \"appDebug\";\n /**\n * 是否启用 Hook\n * 当使用自定义 chatData 时,应设置为 false 以避免内部 Hook 初始化\n * @default true\n */\n enabled?: boolean;\n onError?: (error: Error) => void;\n onSuccess?: (data: Success) => void;\n onStream?: (data: Event) => void;\n onMessage?: (content: string, data: IMessage) => void;\n}\n\n/**\n * 事件状态码枚举\n * @enum {string}\n * @version 1.0.0\n */\nexport enum EventCode {\n /** 切换会话 */\n SESSION_SWITCH = \"SESSION_SWITCH\",\n /** 开启新会话 */\n SESSION_CREATE = \"SESSION_CREATE\",\n}\n\nexport type handleEvent = {\n code: EventCode;\n message: string;\n data?: any;\n};\n/**\n * renderFooter insert 参数说明\n */\nexport interface FooterRenderArgs {\n message: IMessage;\n isLastBotMsg: boolean;\n isLastMsg: boolean;\n}\n\n/**\n * Provider 可通过 ref 暴露的方法句柄\n */\nexport interface XAdkProviderHandle {\n startChat: (content: SendContent) => void;\n stopChat: () => void;\n clearChat: () => void;\n deleteSession: (id: string) => void;\n updateSession: (id: string, title: string) => void;\n getAppInfo: () => any;\n getMessages: () => IMessage[];\n getSessions: () => any[];\n setMessages: (msgs: IMessage[]) => void;\n setCurrentSessionDetail: (id: string) => void;\n}\n\n/**\n * config.chatProps 中的配置\n */\nexport interface ChatConfig {\n /**\n * 是否展示清空按钮\n * @type {boolean}\n * @default false\n */\n clearBtnShow?: boolean;\n /**\n * 是否展示输入框\n * @type {boolean}\n * @default true\n */\n inputShow?: boolean;\n /**\n * 打字机效果速度(单位:毫秒)\n * @type {number}\n * @default 60\n * @version 1.0.0\n */\n textSpeed?: number;\n}\n\n/**\n * Provider config 整体配置结构\n */\nexport interface XAdkProviderConfig {\n session?: {\n showSessionList?: boolean;\n };\n /**\n * 初始化后是否默认展示第一条会话内容\n * @type {boolean}\n * @default false\n */\n showFirstSession?: boolean;\n allowUpload?: boolean;\n appNo?: string;\n chatProps?: ChatConfig;\n debug?: boolean;\n}\n\n/**\n * XAdkProvider Props\n */\nexport interface XAdkProviderProps {\n /**\n * AI 服务基础地址\n */\n url: string;\n /**\n * 认证 token\n */\n token: string;\n /**\n * 组件功能配置\n */\n config?: XAdkProviderConfig;\n /**\n * Provider 唯一标识\n */\n providerId?: string;\n /**\n * 消息成功回调\n */\n onSuccess?: (success: any) => void;\n /**\n * 流式消息回调\n */\n onStream?: (data: Event) => void;\n /**\n * 错误回调\n */\n onError?: (err: any) => void;\n /**\n * 每条消息回调\n */\n onMessage?: (content: string, data: IMessage) => void;\n /**\n * 事件回调\n */\n onEvent?: (event: handleEvent) => void;\n /**\n * React 子元素 - 支持 Compound Components\n */\n children?: ReactNode;\n}\n\n// XAiSDKProps 继承 XAdkProviderProps\nexport interface XAdkSDKProps extends XAdkProviderProps {\n /**\n * 主题类型\n * @type {ThemeType}\n * @default 'default'\n * @version 1.0.0\n */\n theme?: ThemeType;\n\n /**\n * 组件属性配置\n * @type {object}\n * @default undefined\n * @version 1.0.0\n */\n componentProps?: {\n /**\n * 组件ID\n * @type {string}\n * @default undefined\n * @version 1.0.0\n */\n id?: string;\n /** 支持任意 CSS 属性 */\n [key: string]: any;\n };\n}\n"],"mappings":"AA4BA;AACA;AACA;AACA;AACA;AACA,WAAYA,SAAS,0BAATA,SAAS;EAATA,SAAS;EAATA,SAAS;EAAA,OAATA,SAAS;AAAA;;AAYrB;AACA;AACA;;AAOA;AACA;AACA;;AAcA;AACA;AACA;;AAuBA;AACA;AACA;;AAiBA;AACA;AACA;;AA4CA"}
1
+ {"version":3,"names":["EventCode"],"sources":["../../../src/types/XAdkProvider.ts"],"sourcesContent":["import { ReactNode } from \"react\";\nimport {\n IMessage,\n Success,\n Event,\n Error,\n SendContent,\n ThemeType,\n} from \"@/types\";\n\nexport interface DebugOptions {\n url: string;\n sessionId?: string;\n config: any;\n token: string;\n type?: \"agentDebug\" | \"appDebug\";\n /**\n * 是否启用 Hook\n * 当使用自定义 chatData 时,应设置为 false 以避免内部 Hook 初始化\n * @default true\n */\n enabled?: boolean;\n onError?: (error: Error) => void;\n onSuccess?: (data: Success) => void;\n onStream?: (data: Event) => void;\n onMessage?: (content: string, data: IMessage) => void;\n}\n\n/**\n * 事件状态码枚举\n * @enum {string}\n * @version 1.0.0\n */\nexport enum EventCode {\n /** 切换会话 */\n SESSION_SWITCH = \"SESSION_SWITCH\",\n /** 开启新会话 */\n SESSION_CREATE = \"SESSION_CREATE\",\n}\n\nexport type handleEvent = {\n code: EventCode;\n message: string;\n data?: any;\n};\n/**\n * renderFooter insert 参数说明\n */\nexport interface FooterRenderArgs {\n message: IMessage;\n isLastBotMsg: boolean;\n isLastMsg: boolean;\n}\n\n/**\n * Provider 可通过 ref 暴露的方法句柄\n */\nexport interface XAdkProviderHandle {\n startChat: (content: SendContent) => void;\n stopChat: () => void;\n clearChat: () => void;\n deleteSession: (id: string) => void;\n updateSession: (id: string, title: string) => void;\n getAppInfo: () => any;\n getMessages: () => IMessage[];\n getSessions: () => any[];\n setMessages: (msgs: IMessage[]) => void;\n setCurrentSessionDetail: (id: string) => void;\n}\n\n/**\n * config.chatProps 中的配置\n */\nexport interface ChatConfig {\n /**\n * 是否展示清空按钮\n * @type {boolean}\n * @default false\n */\n clearBtnShow?: boolean;\n /**\n * 是否展示输入框\n * @type {boolean}\n * @default true\n */\n inputShow?: boolean;\n /**\n * 打字机效果速度(单位:毫秒)\n * @type {number}\n * @default 60\n * @version 1.0.0\n */\n textSpeed?: number;\n}\n\n/**\n * Provider config 整体配置结构\n */\nexport interface XAdkProviderConfig {\n session?: {\n showSessionList?: boolean;\n };\n /**\n * 初始化后是否默认展示第一条会话内容\n * @type {boolean}\n * @default false\n */\n showFirstSession?: boolean;\n allowUpload?: boolean;\n appNo?: string;\n chatProps?: ChatConfig;\n debug?: boolean;\n /**\n * 是否展示点赞/点踩按钮\n * @default true\n */\n showFeedback?: boolean;\n}\n\n/**\n * XAdkProvider Props\n */\nexport interface XAdkProviderProps {\n /**\n * AI 服务基础地址\n */\n url?: string;\n /**\n * 认证 token\n */\n token: string;\n /**\n * 组件功能配置\n */\n config?: XAdkProviderConfig;\n /**\n * Provider 唯一标识\n */\n providerId?: string;\n /**\n * 消息成功回调\n */\n onSuccess?: (success: any) => void;\n /**\n * 流式消息回调\n */\n onStream?: (data: Event) => void;\n /**\n * 错误回调\n */\n onError?: (err: any) => void;\n /**\n * 每条消息回调\n */\n onMessage?: (content: string, data: IMessage) => void;\n /**\n * 事件回调\n */\n onEvent?: (event: handleEvent) => void;\n /**\n * React 子元素 - 支持 Compound Components\n */\n children?: ReactNode;\n}\n\n// XAiSDKProps 继承 XAdkProviderProps\nexport interface XAdkSDKProps extends XAdkProviderProps {\n /**\n * 主题类型\n * @type {ThemeType}\n * @default 'default'\n * @version 1.0.0\n */\n theme?: ThemeType;\n\n /**\n * 组件属性配置\n * @type {object}\n * @default undefined\n * @version 1.0.0\n */\n componentProps?: {\n /**\n * 组件ID\n * @type {string}\n * @default undefined\n * @version 1.0.0\n */\n id?: string;\n /** 支持任意 CSS 属性 */\n [key: string]: any;\n };\n}\n"],"mappings":"AA4BA;AACA;AACA;AACA;AACA;AACA,WAAYA,SAAS,0BAATA,SAAS;EAATA,SAAS;EAATA,SAAS;EAAA,OAATA,SAAS;AAAA;;AAYrB;AACA;AACA;;AAOA;AACA;AACA;;AAcA;AACA;AACA;;AAuBA;AACA;AACA;;AAsBA;AACA;AACA;;AA4CA"}
@@ -1 +1 @@
1
- @keyframes x-markdown-fade-in{0%{opacity:0}to{opacity:1}}.x-markdown{--text-color:inherit;--font-size:inherit;--margin-block:0 0 1em 0;--td-th-padding:0.85em 1em;--pre-th-td-padding:2px 0;--border-font-weight:600;--padding-ul-ol:0 0 0 1em;--margin-ul-ol:0 0 1em 1.8em;--margin-li:0.25em 0;--margin-pre:1em 0;--padding-code-inline:0.2em 0.4em;--margin-code-inline:0 0.2em;--code-inline-text:0.85em;--small-border-radius:2px;--image-margin:0.5em 0;--hr-margin:1.5em 0;--table-margin:1em 0;color:var(--text-color);font-size:var(--font-size);line-height:1.5714285714285714;width:100%}.x-markdown code,.x-markdown div,.x-markdown li,.x-markdown p,.x-markdown pre,.x-markdown span{overflow-wrap:break-word;word-break:break-word}.x-markdown code,.x-markdown pre{white-space:pre-wrap}.x-markdown td,.x-markdown th{padding:var(--td-th-padding)}.x-markdown th{font-weight:var(--border-font-weight)}.x-markdown pre table{box-shadow:none}.x-markdown pre td,.x-markdown pre th{border:none;padding:var(--pre-th-td-padding);text-align:left}.x-markdown p{margin:var(--margin-block)}.x-markdown p:first-child{margin-top:0}.x-markdown p:last-child{margin-bottom:0}.x-markdown ol,.x-markdown ul{margin:var(--margin-ul-ol);padding:var(--padding-ul-ol)}.x-markdown ol:first-child,.x-markdown ul:first-child{margin-top:0}.x-markdown ol:last-child,.x-markdown ul:last-child{margin-bottom:0}.x-markdown ol>li{list-style:decimal}.x-markdown ul>li{list-style:disc}.x-markdown li{margin:var(--margin-li)}.x-markdown li:first-child{margin-top:0}.x-markdown li:last-child{margin-bottom:0}.x-markdown pre{margin:var(--margin-pre);overflow-x:auto}.x-markdown pre:first-child{margin-top:0}.x-markdown pre:last-child{margin-bottom:0}.x-markdown code{border-radius:var(--small-border-radius);font-size:var(--code-inline-text);margin:var(--margin-code-inline);padding:var(--padding-code-inline)}.x-markdown pre code{border-radius:0;font-size:inherit;line-height:2;margin:0;padding:0}.x-markdown img{height:auto;margin:var(--image-margin);max-width:100%}.x-markdown hr{margin:var(--hr-margin)}.x-markdown table:not(pre){border-collapse:collapse;display:block;margin:var(--table-margin);max-width:100%;overflow:auto;width:max-content}.x-markdown table:not(pre):first-child{margin-top:0}.x-markdown table:not(pre):last-child{margin-bottom:0}.x-markdown .inline-katex .katex-display{display:inline-block;margin:0;text-align:left;text-align:initial;vertical-align:middle}.x-markdown .inline-katex .katex-display>.katex{display:inline-block;text-align:left;text-align:initial;white-space:normal}.x-markdown .inline-katex .katex-display>.katex>.katex-html{display:inline-block;position:static}.x-markdown .inline-katex .katex-display>.katex>.katex-html>.tag{position:static}.x-markdown-debug-panel{backdrop-filter:blur(8px);background:rgba(0,0,0,.85);border-radius:8px;box-shadow:0 2px 8px rgba(0,0,0,.15);color:#fff;font-family:SF Mono,Monaco,Inconsolata,Fira Mono,Droid Sans Mono,Source Code Pro,monospace;font-size:12px;padding:12px;position:fixed;right:0;transition:box-shadow .2s;-ms-user-select:none;user-select:none;width:180px;z-index:9999}.x-markdown-debug-panel:hover{box-shadow:0 4px 12px rgba(0,0,0,.25)}.x-markdown-debug-row{align-items:center;display:flex;gap:8px;margin-bottom:8px}.x-markdown-debug-row:last-child{margin-bottom:0}.x-markdown-debug-label{color:hsla(0,0%,100%,.65);font-weight:500;min-width:60px}.x-markdown-debug-value{font-weight:600;min-width:50px;text-align:right}.x-markdown-debug-chart{margin-left:auto}.x-markdown-debug-actions{border-top:1px solid hsla(0,0%,100%,.1);display:flex;gap:8px;margin-top:12px;padding-top:12px}.x-markdown-debug-action{background:hsla(0,0%,100%,.1);border:1px solid hsla(0,0%,100%,.2);border-radius:4px;color:#fff;cursor:pointer;flex:1 1;font-family:inherit;font-size:11px;font-weight:500;padding:6px 12px;transition:all .2s}.x-markdown-debug-action:hover{background:hsla(0,0%,100%,.15);border-color:hsla(0,0%,100%,.3)}.x-markdown-debug-action:active{transform:scale(.98)}.x-markdown-debug-record-btn.recording{animation:recording-pulse 1.5s ease-in-out infinite;background:rgba(255,77,79,.2);border-color:#ff4d4f}@keyframes recording-pulse{0%,to{box-shadow:0 0 0 0 rgba(255,77,79,.4)}50%{box-shadow:0 0 0 8px rgba(255,77,79,0)}}.x-markdown-debug-modal-overlay{align-items:center;animation:fadeIn .2s ease-out;backdrop-filter:blur(4px);background:rgba(0,0,0,.75);bottom:0;display:flex;justify-content:center;left:0;position:fixed;right:0;top:0;z-index:10000}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.x-markdown-debug-modal{animation:slideIn .3s ease-out;background:rgba(30,30,30,.95);border:1px solid hsla(0,0%,100%,.1);border-radius:12px;box-shadow:0 8px 32px rgba(0,0,0,.4);max-height:90vh;max-width:90vw;overflow:auto}@keyframes slideIn{0%{opacity:0;transform:translateY(-20px)}to{opacity:1;transform:translateY(0)}}.x-markdown-debug-modal-header{align-items:center;border-bottom:1px solid hsla(0,0%,100%,.1);display:flex;justify-content:space-between;padding:20px 24px}.x-markdown-debug-close-btn{align-items:center;background:hsla(0,0%,100%,.1);border:none;border-radius:6px;color:#fff;cursor:pointer;display:flex;font-size:18px;height:32px;justify-content:center;transition:all .2s;width:32px}.x-markdown-debug-close-btn:hover{background:rgba(255,77,79,.3)}.x-markdown-debug-modal-content{padding:24px}.x-markdown-debug-stats-summary{grid-gap:16px;display:grid;gap:16px;grid-template-columns:repeat(4,1fr);margin-bottom:24px}.x-markdown-debug-stat-item{background:hsla(0,0%,100%,.05);border:1px solid hsla(0,0%,100%,.1);border-radius:8px;padding:16px}.x-markdown-debug-stat-label{color:hsla(0,0%,100%,.6);font-size:11px;letter-spacing:.5px;margin-bottom:8px;text-transform:uppercase}.x-markdown-debug-stat-value{color:#fff;font-size:20px;font-weight:700}.x-markdown-debug-chart-full{background:hsla(0,0%,100%,.02);border:1px solid hsla(0,0%,100%,.1);border-radius:8px}.x-markdown-debug-chart-full .fps-line,.x-markdown-debug-chart-full .memory-line{filter:drop-shadow(0 0 4px currentColor)}.x-markdown-debug-legend{display:flex;gap:24px;justify-content:center;margin-top:16px}.x-markdown-debug-legend-item{align-items:center;color:hsla(0,0%,100%,.8);display:flex;font-size:13px;gap:8px}.x-markdown-debug-legend-color{border-radius:2px;height:12px;width:12px}@media (max-width:768px){.x-markdown-debug-stats-summary{grid-template-columns:repeat(2,1fr)}}@font-face{font-display:block;font-family:KaTeX_AMS;font-style:normal;font-weight:400;src:url(static/KaTeX_AMS-Regular.a79f1c31.woff2) format("woff2"),url(static/KaTeX_AMS-Regular.1608a09b.woff) format("woff"),url(static/KaTeX_AMS-Regular.4aafdb68.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Caligraphic;font-style:normal;font-weight:700;src:url(static/KaTeX_Caligraphic-Bold.ec17d132.woff2) format("woff2"),url(static/KaTeX_Caligraphic-Bold.b6770918.woff) format("woff"),url(static/KaTeX_Caligraphic-Bold.cce5b8ec.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Caligraphic;font-style:normal;font-weight:400;src:url(static/KaTeX_Caligraphic-Regular.55fac258.woff2) format("woff2"),url(static/KaTeX_Caligraphic-Regular.dad44a7f.woff) format("woff"),url(static/KaTeX_Caligraphic-Regular.07ef19e7.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Fraktur;font-style:normal;font-weight:700;src:url(static/KaTeX_Fraktur-Bold.d42a5579.woff2) format("woff2"),url(static/KaTeX_Fraktur-Bold.9f256b85.woff) format("woff"),url(static/KaTeX_Fraktur-Bold.b18f59e1.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Fraktur;font-style:normal;font-weight:400;src:url(static/KaTeX_Fraktur-Regular.d3c882a6.woff2) format("woff2"),url(static/KaTeX_Fraktur-Regular.7c187121.woff) format("woff"),url(static/KaTeX_Fraktur-Regular.ed38e79f.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Main;font-style:normal;font-weight:700;src:url(static/KaTeX_Main-Bold.c3fb5ac2.woff2) format("woff2"),url(static/KaTeX_Main-Bold.d181c465.woff) format("woff"),url(static/KaTeX_Main-Bold.b74a1a8b.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Main;font-style:italic;font-weight:700;src:url(static/KaTeX_Main-BoldItalic.6f2bb1df.woff2) format("woff2"),url(static/KaTeX_Main-BoldItalic.e3f82f9d.woff) format("woff"),url(static/KaTeX_Main-BoldItalic.70d8b0a5.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Main;font-style:italic;font-weight:400;src:url(static/KaTeX_Main-Italic.8916142b.woff2) format("woff2"),url(static/KaTeX_Main-Italic.9024d815.woff) format("woff"),url(static/KaTeX_Main-Italic.47373d1e.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Main;font-style:normal;font-weight:400;src:url(static/KaTeX_Main-Regular.0462f03b.woff2) format("woff2"),url(static/KaTeX_Main-Regular.7f51fe03.woff) format("woff"),url(static/KaTeX_Main-Regular.b7f8fe9b.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Math;font-style:italic;font-weight:700;src:url(static/KaTeX_Math-BoldItalic.572d331f.woff2) format("woff2"),url(static/KaTeX_Math-BoldItalic.f1035d8d.woff) format("woff"),url(static/KaTeX_Math-BoldItalic.a879cf83.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Math;font-style:italic;font-weight:400;src:url(static/KaTeX_Math-Italic.f28c23ac.woff2) format("woff2"),url(static/KaTeX_Math-Italic.5295ba48.woff) format("woff"),url(static/KaTeX_Math-Italic.939bc644.ttf) format("truetype")}@font-face{font-display:block;font-family:"KaTeX_SansSerif";font-style:normal;font-weight:700;src:url(static/KaTeX_SansSerif-Bold.8c5b5494.woff2) format("woff2"),url(static/KaTeX_SansSerif-Bold.bf59d231.woff) format("woff"),url(static/KaTeX_SansSerif-Bold.94e1e8dc.ttf) format("truetype")}@font-face{font-display:block;font-family:"KaTeX_SansSerif";font-style:italic;font-weight:400;src:url(static/KaTeX_SansSerif-Italic.3b1e59b3.woff2) format("woff2"),url(static/KaTeX_SansSerif-Italic.7c9bc82b.woff) format("woff"),url(static/KaTeX_SansSerif-Italic.b4c20c84.ttf) format("truetype")}@font-face{font-display:block;font-family:"KaTeX_SansSerif";font-style:normal;font-weight:400;src:url(static/KaTeX_SansSerif-Regular.ba21ed5f.woff2) format("woff2"),url(static/KaTeX_SansSerif-Regular.74048478.woff) format("woff"),url(static/KaTeX_SansSerif-Regular.d4d7ba48.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Script;font-style:normal;font-weight:400;src:url(static/KaTeX_Script-Regular.03e9641d.woff2) format("woff2"),url(static/KaTeX_Script-Regular.07505710.woff) format("woff"),url(static/KaTeX_Script-Regular.fe9cbbe1.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Size1;font-style:normal;font-weight:400;src:url(static/KaTeX_Size1-Regular.eae34984.woff2) format("woff2"),url(static/KaTeX_Size1-Regular.e1e279cb.woff) format("woff"),url(static/KaTeX_Size1-Regular.fabc004a.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Size2;font-style:normal;font-weight:400;src:url(static/KaTeX_Size2-Regular.5916a24f.woff2) format("woff2"),url(static/KaTeX_Size2-Regular.57727022.woff) format("woff"),url(static/KaTeX_Size2-Regular.d6b476ec.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Size3;font-style:normal;font-weight:400;src:url(static/KaTeX_Size3-Regular.b4230e7e.woff2) format("woff2"),url(static/KaTeX_Size3-Regular.9acaf01c.woff) format("woff"),url(static/KaTeX_Size3-Regular.a144ef58.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Size4;font-style:normal;font-weight:400;src:url(static/KaTeX_Size4-Regular.10d95fd3.woff2) format("woff2"),url(static/KaTeX_Size4-Regular.7a996c9d.woff) format("woff"),url(static/KaTeX_Size4-Regular.fbccdabe.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Typewriter;font-style:normal;font-weight:400;src:url(static/KaTeX_Typewriter-Regular.a8709e36.woff2) format("woff2"),url(static/KaTeX_Typewriter-Regular.6258592b.woff) format("woff"),url(static/KaTeX_Typewriter-Regular.d97aaf4a.ttf) format("truetype")}.katex{text-rendering:auto;font:normal 1.21em KaTeX_Main,Times New Roman,serif;line-height:1.2;text-indent:0}.katex *{-ms-high-contrast-adjust:none!important;border-color:currentColor}.katex .katex-version:after{content:"0.16.38"}.katex .katex-mathml{clip:rect(1px,1px,1px,1px);border:0;height:1px;overflow:hidden;padding:0;position:absolute;width:1px}.katex .katex-html>.newline{display:block}.katex .base{position:relative;white-space:nowrap;width:min-content}.katex .base,.katex .strut{display:inline-block}.katex .textbf{font-weight:700}.katex .textit{font-style:italic}.katex .textrm{font-family:KaTeX_Main}.katex .textsf{font-family:KaTeX_SansSerif}.katex .texttt{font-family:KaTeX_Typewriter}.katex .mathnormal{font-family:KaTeX_Math;font-style:italic}.katex .mathit{font-family:KaTeX_Main;font-style:italic}.katex .mathrm{font-style:normal}.katex .mathbf{font-family:KaTeX_Main;font-weight:700}.katex .boldsymbol{font-family:KaTeX_Math;font-style:italic;font-weight:700}.katex .amsrm,.katex .mathbb,.katex .textbb{font-family:KaTeX_AMS}.katex .mathcal{font-family:KaTeX_Caligraphic}.katex .mathfrak,.katex .textfrak{font-family:KaTeX_Fraktur}.katex .mathboldfrak,.katex .textboldfrak{font-family:KaTeX_Fraktur;font-weight:700}.katex .mathtt{font-family:KaTeX_Typewriter}.katex .mathscr,.katex .textscr{font-family:KaTeX_Script}.katex .mathsf,.katex .textsf{font-family:KaTeX_SansSerif}.katex .mathboldsf,.katex .textboldsf{font-family:KaTeX_SansSerif;font-weight:700}.katex .mathitsf,.katex .mathsfit,.katex .textitsf{font-family:KaTeX_SansSerif;font-style:italic}.katex .mainrm{font-family:KaTeX_Main;font-style:normal}.katex .vlist-t{border-collapse:collapse;display:inline-table;table-layout:fixed}.katex .vlist-r{display:table-row}.katex .vlist{display:table-cell;position:relative;vertical-align:bottom}.katex .vlist>span{display:block;height:0;position:relative}.katex .vlist>span>span{display:inline-block}.katex .vlist>span>.pstrut{overflow:hidden;width:0}.katex .vlist-t2{margin-right:-2px}.katex .vlist-s{display:table-cell;font-size:1px;min-width:2px;vertical-align:bottom;width:2px}.katex .vbox{align-items:baseline;display:inline-flex;flex-direction:column}.katex .hbox{width:100%}.katex .hbox,.katex .thinbox{display:inline-flex;flex-direction:row}.katex .thinbox{max-width:0;width:0}.katex .msupsub{text-align:left}.katex .mfrac>span>span{text-align:center}.katex .mfrac .frac-line{border-bottom-style:solid;display:inline-block;width:100%}.katex .hdashline,.katex .hline,.katex .mfrac .frac-line,.katex .overline .overline-line,.katex .rule,.katex .underline .underline-line{min-height:1px}.katex .mspace{display:inline-block}.katex .smash{display:inline;line-height:0}.katex .clap,.katex .llap,.katex .rlap{position:relative;width:0}.katex .clap>.inner,.katex .llap>.inner,.katex .rlap>.inner{position:absolute}.katex .clap>.fix,.katex .llap>.fix,.katex .rlap>.fix{display:inline-block}.katex .llap>.inner{right:0}.katex .clap>.inner,.katex .rlap>.inner{left:0}.katex .clap>.inner>span{margin-left:-50%;margin-right:50%}.katex .rule{border:0 solid;display:inline-block;position:relative}.katex .hline,.katex .overline .overline-line,.katex .underline .underline-line{border-bottom-style:solid;display:inline-block;width:100%}.katex .hdashline{border-bottom-style:dashed;display:inline-block;width:100%}.katex .sqrt>.root{margin-left:.2777777778em;margin-right:-.5555555556em}.katex .fontsize-ensurer.reset-size1.size1,.katex .sizing.reset-size1.size1{font-size:1em}.katex .fontsize-ensurer.reset-size1.size2,.katex .sizing.reset-size1.size2{font-size:1.2em}.katex .fontsize-ensurer.reset-size1.size3,.katex .sizing.reset-size1.size3{font-size:1.4em}.katex .fontsize-ensurer.reset-size1.size4,.katex .sizing.reset-size1.size4{font-size:1.6em}.katex .fontsize-ensurer.reset-size1.size5,.katex .sizing.reset-size1.size5{font-size:1.8em}.katex .fontsize-ensurer.reset-size1.size6,.katex .sizing.reset-size1.size6{font-size:2em}.katex .fontsize-ensurer.reset-size1.size7,.katex .sizing.reset-size1.size7{font-size:2.4em}.katex .fontsize-ensurer.reset-size1.size8,.katex .sizing.reset-size1.size8{font-size:2.88em}.katex .fontsize-ensurer.reset-size1.size9,.katex .sizing.reset-size1.size9{font-size:3.456em}.katex .fontsize-ensurer.reset-size1.size10,.katex .sizing.reset-size1.size10{font-size:4.148em}.katex .fontsize-ensurer.reset-size1.size11,.katex .sizing.reset-size1.size11{font-size:4.976em}.katex .fontsize-ensurer.reset-size2.size1,.katex .sizing.reset-size2.size1{font-size:.8333333333em}.katex .fontsize-ensurer.reset-size2.size2,.katex .sizing.reset-size2.size2{font-size:1em}.katex .fontsize-ensurer.reset-size2.size3,.katex .sizing.reset-size2.size3{font-size:1.1666666667em}.katex .fontsize-ensurer.reset-size2.size4,.katex .sizing.reset-size2.size4{font-size:1.3333333333em}.katex .fontsize-ensurer.reset-size2.size5,.katex .sizing.reset-size2.size5{font-size:1.5em}.katex .fontsize-ensurer.reset-size2.size6,.katex .sizing.reset-size2.size6{font-size:1.6666666667em}.katex .fontsize-ensurer.reset-size2.size7,.katex .sizing.reset-size2.size7{font-size:2em}.katex .fontsize-ensurer.reset-size2.size8,.katex .sizing.reset-size2.size8{font-size:2.4em}.katex .fontsize-ensurer.reset-size2.size9,.katex .sizing.reset-size2.size9{font-size:2.88em}.katex .fontsize-ensurer.reset-size2.size10,.katex .sizing.reset-size2.size10{font-size:3.4566666667em}.katex .fontsize-ensurer.reset-size2.size11,.katex .sizing.reset-size2.size11{font-size:4.1466666667em}.katex .fontsize-ensurer.reset-size3.size1,.katex .sizing.reset-size3.size1{font-size:.7142857143em}.katex .fontsize-ensurer.reset-size3.size2,.katex .sizing.reset-size3.size2{font-size:.8571428571em}.katex .fontsize-ensurer.reset-size3.size3,.katex .sizing.reset-size3.size3{font-size:1em}.katex .fontsize-ensurer.reset-size3.size4,.katex .sizing.reset-size3.size4{font-size:1.1428571429em}.katex .fontsize-ensurer.reset-size3.size5,.katex .sizing.reset-size3.size5{font-size:1.2857142857em}.katex .fontsize-ensurer.reset-size3.size6,.katex .sizing.reset-size3.size6{font-size:1.4285714286em}.katex .fontsize-ensurer.reset-size3.size7,.katex .sizing.reset-size3.size7{font-size:1.7142857143em}.katex .fontsize-ensurer.reset-size3.size8,.katex .sizing.reset-size3.size8{font-size:2.0571428571em}.katex .fontsize-ensurer.reset-size3.size9,.katex .sizing.reset-size3.size9{font-size:2.4685714286em}.katex .fontsize-ensurer.reset-size3.size10,.katex .sizing.reset-size3.size10{font-size:2.9628571429em}.katex .fontsize-ensurer.reset-size3.size11,.katex .sizing.reset-size3.size11{font-size:3.5542857143em}.katex .fontsize-ensurer.reset-size4.size1,.katex .sizing.reset-size4.size1{font-size:.625em}.katex .fontsize-ensurer.reset-size4.size2,.katex .sizing.reset-size4.size2{font-size:.75em}.katex .fontsize-ensurer.reset-size4.size3,.katex .sizing.reset-size4.size3{font-size:.875em}.katex .fontsize-ensurer.reset-size4.size4,.katex .sizing.reset-size4.size4{font-size:1em}.katex .fontsize-ensurer.reset-size4.size5,.katex .sizing.reset-size4.size5{font-size:1.125em}.katex .fontsize-ensurer.reset-size4.size6,.katex .sizing.reset-size4.size6{font-size:1.25em}.katex .fontsize-ensurer.reset-size4.size7,.katex .sizing.reset-size4.size7{font-size:1.5em}.katex .fontsize-ensurer.reset-size4.size8,.katex .sizing.reset-size4.size8{font-size:1.8em}.katex .fontsize-ensurer.reset-size4.size9,.katex .sizing.reset-size4.size9{font-size:2.16em}.katex .fontsize-ensurer.reset-size4.size10,.katex .sizing.reset-size4.size10{font-size:2.5925em}.katex .fontsize-ensurer.reset-size4.size11,.katex .sizing.reset-size4.size11{font-size:3.11em}.katex .fontsize-ensurer.reset-size5.size1,.katex .sizing.reset-size5.size1{font-size:.5555555556em}.katex .fontsize-ensurer.reset-size5.size2,.katex .sizing.reset-size5.size2{font-size:.6666666667em}.katex .fontsize-ensurer.reset-size5.size3,.katex .sizing.reset-size5.size3{font-size:.7777777778em}.katex .fontsize-ensurer.reset-size5.size4,.katex .sizing.reset-size5.size4{font-size:.8888888889em}.katex .fontsize-ensurer.reset-size5.size5,.katex .sizing.reset-size5.size5{font-size:1em}.katex .fontsize-ensurer.reset-size5.size6,.katex .sizing.reset-size5.size6{font-size:1.1111111111em}.katex .fontsize-ensurer.reset-size5.size7,.katex .sizing.reset-size5.size7{font-size:1.3333333333em}.katex .fontsize-ensurer.reset-size5.size8,.katex .sizing.reset-size5.size8{font-size:1.6em}.katex .fontsize-ensurer.reset-size5.size9,.katex .sizing.reset-size5.size9{font-size:1.92em}.katex .fontsize-ensurer.reset-size5.size10,.katex .sizing.reset-size5.size10{font-size:2.3044444444em}.katex .fontsize-ensurer.reset-size5.size11,.katex .sizing.reset-size5.size11{font-size:2.7644444444em}.katex .fontsize-ensurer.reset-size6.size1,.katex .sizing.reset-size6.size1{font-size:.5em}.katex .fontsize-ensurer.reset-size6.size2,.katex .sizing.reset-size6.size2{font-size:.6em}.katex .fontsize-ensurer.reset-size6.size3,.katex .sizing.reset-size6.size3{font-size:.7em}.katex .fontsize-ensurer.reset-size6.size4,.katex .sizing.reset-size6.size4{font-size:.8em}.katex .fontsize-ensurer.reset-size6.size5,.katex .sizing.reset-size6.size5{font-size:.9em}.katex .fontsize-ensurer.reset-size6.size6,.katex .sizing.reset-size6.size6{font-size:1em}.katex .fontsize-ensurer.reset-size6.size7,.katex .sizing.reset-size6.size7{font-size:1.2em}.katex .fontsize-ensurer.reset-size6.size8,.katex .sizing.reset-size6.size8{font-size:1.44em}.katex .fontsize-ensurer.reset-size6.size9,.katex .sizing.reset-size6.size9{font-size:1.728em}.katex .fontsize-ensurer.reset-size6.size10,.katex .sizing.reset-size6.size10{font-size:2.074em}.katex .fontsize-ensurer.reset-size6.size11,.katex .sizing.reset-size6.size11{font-size:2.488em}.katex .fontsize-ensurer.reset-size7.size1,.katex .sizing.reset-size7.size1{font-size:.4166666667em}.katex .fontsize-ensurer.reset-size7.size2,.katex .sizing.reset-size7.size2{font-size:.5em}.katex .fontsize-ensurer.reset-size7.size3,.katex .sizing.reset-size7.size3{font-size:.5833333333em}.katex .fontsize-ensurer.reset-size7.size4,.katex .sizing.reset-size7.size4{font-size:.6666666667em}.katex .fontsize-ensurer.reset-size7.size5,.katex .sizing.reset-size7.size5{font-size:.75em}.katex .fontsize-ensurer.reset-size7.size6,.katex .sizing.reset-size7.size6{font-size:.8333333333em}.katex .fontsize-ensurer.reset-size7.size7,.katex .sizing.reset-size7.size7{font-size:1em}.katex .fontsize-ensurer.reset-size7.size8,.katex .sizing.reset-size7.size8{font-size:1.2em}.katex .fontsize-ensurer.reset-size7.size9,.katex .sizing.reset-size7.size9{font-size:1.44em}.katex .fontsize-ensurer.reset-size7.size10,.katex .sizing.reset-size7.size10{font-size:1.7283333333em}.katex .fontsize-ensurer.reset-size7.size11,.katex .sizing.reset-size7.size11{font-size:2.0733333333em}.katex .fontsize-ensurer.reset-size8.size1,.katex .sizing.reset-size8.size1{font-size:.3472222222em}.katex .fontsize-ensurer.reset-size8.size2,.katex .sizing.reset-size8.size2{font-size:.4166666667em}.katex .fontsize-ensurer.reset-size8.size3,.katex .sizing.reset-size8.size3{font-size:.4861111111em}.katex .fontsize-ensurer.reset-size8.size4,.katex .sizing.reset-size8.size4{font-size:.5555555556em}.katex .fontsize-ensurer.reset-size8.size5,.katex .sizing.reset-size8.size5{font-size:.625em}.katex .fontsize-ensurer.reset-size8.size6,.katex .sizing.reset-size8.size6{font-size:.6944444444em}.katex .fontsize-ensurer.reset-size8.size7,.katex .sizing.reset-size8.size7{font-size:.8333333333em}.katex .fontsize-ensurer.reset-size8.size8,.katex .sizing.reset-size8.size8{font-size:1em}.katex .fontsize-ensurer.reset-size8.size9,.katex .sizing.reset-size8.size9{font-size:1.2em}.katex .fontsize-ensurer.reset-size8.size10,.katex .sizing.reset-size8.size10{font-size:1.4402777778em}.katex .fontsize-ensurer.reset-size8.size11,.katex .sizing.reset-size8.size11{font-size:1.7277777778em}.katex .fontsize-ensurer.reset-size9.size1,.katex .sizing.reset-size9.size1{font-size:.2893518519em}.katex .fontsize-ensurer.reset-size9.size2,.katex .sizing.reset-size9.size2{font-size:.3472222222em}.katex .fontsize-ensurer.reset-size9.size3,.katex .sizing.reset-size9.size3{font-size:.4050925926em}.katex .fontsize-ensurer.reset-size9.size4,.katex .sizing.reset-size9.size4{font-size:.462962963em}.katex .fontsize-ensurer.reset-size9.size5,.katex .sizing.reset-size9.size5{font-size:.5208333333em}.katex .fontsize-ensurer.reset-size9.size6,.katex .sizing.reset-size9.size6{font-size:.5787037037em}.katex .fontsize-ensurer.reset-size9.size7,.katex .sizing.reset-size9.size7{font-size:.6944444444em}.katex .fontsize-ensurer.reset-size9.size8,.katex .sizing.reset-size9.size8{font-size:.8333333333em}.katex .fontsize-ensurer.reset-size9.size9,.katex .sizing.reset-size9.size9{font-size:1em}.katex .fontsize-ensurer.reset-size9.size10,.katex .sizing.reset-size9.size10{font-size:1.2002314815em}.katex .fontsize-ensurer.reset-size9.size11,.katex .sizing.reset-size9.size11{font-size:1.4398148148em}.katex .fontsize-ensurer.reset-size10.size1,.katex .sizing.reset-size10.size1{font-size:.2410800386em}.katex .fontsize-ensurer.reset-size10.size2,.katex .sizing.reset-size10.size2{font-size:.2892960463em}.katex .fontsize-ensurer.reset-size10.size3,.katex .sizing.reset-size10.size3{font-size:.337512054em}.katex .fontsize-ensurer.reset-size10.size4,.katex .sizing.reset-size10.size4{font-size:.3857280617em}.katex .fontsize-ensurer.reset-size10.size5,.katex .sizing.reset-size10.size5{font-size:.4339440694em}.katex .fontsize-ensurer.reset-size10.size6,.katex .sizing.reset-size10.size6{font-size:.4821600771em}.katex .fontsize-ensurer.reset-size10.size7,.katex .sizing.reset-size10.size7{font-size:.5785920926em}.katex .fontsize-ensurer.reset-size10.size8,.katex .sizing.reset-size10.size8{font-size:.6943105111em}.katex .fontsize-ensurer.reset-size10.size9,.katex .sizing.reset-size10.size9{font-size:.8331726133em}.katex .fontsize-ensurer.reset-size10.size10,.katex .sizing.reset-size10.size10{font-size:1em}.katex .fontsize-ensurer.reset-size10.size11,.katex .sizing.reset-size10.size11{font-size:1.1996142719em}.katex .fontsize-ensurer.reset-size11.size1,.katex .sizing.reset-size11.size1{font-size:.2009646302em}.katex .fontsize-ensurer.reset-size11.size2,.katex .sizing.reset-size11.size2{font-size:.2411575563em}.katex .fontsize-ensurer.reset-size11.size3,.katex .sizing.reset-size11.size3{font-size:.2813504823em}.katex .fontsize-ensurer.reset-size11.size4,.katex .sizing.reset-size11.size4{font-size:.3215434084em}.katex .fontsize-ensurer.reset-size11.size5,.katex .sizing.reset-size11.size5{font-size:.3617363344em}.katex .fontsize-ensurer.reset-size11.size6,.katex .sizing.reset-size11.size6{font-size:.4019292605em}.katex .fontsize-ensurer.reset-size11.size7,.katex .sizing.reset-size11.size7{font-size:.4823151125em}.katex .fontsize-ensurer.reset-size11.size8,.katex .sizing.reset-size11.size8{font-size:.578778135em}.katex .fontsize-ensurer.reset-size11.size9,.katex .sizing.reset-size11.size9{font-size:.6945337621em}.katex .fontsize-ensurer.reset-size11.size10,.katex .sizing.reset-size11.size10{font-size:.8336012862em}.katex .fontsize-ensurer.reset-size11.size11,.katex .sizing.reset-size11.size11{font-size:1em}.katex .delimsizing.size1{font-family:KaTeX_Size1}.katex .delimsizing.size2{font-family:KaTeX_Size2}.katex .delimsizing.size3{font-family:KaTeX_Size3}.katex .delimsizing.size4{font-family:KaTeX_Size4}.katex .delimsizing.mult .delim-size1>span{font-family:KaTeX_Size1}.katex .delimsizing.mult .delim-size4>span{font-family:KaTeX_Size4}.katex .nulldelimiter{display:inline-block;width:.12em}.katex .delimcenter,.katex .op-symbol{position:relative}.katex .op-symbol.small-op{font-family:KaTeX_Size1}.katex .op-symbol.large-op{font-family:KaTeX_Size2}.katex .accent>.vlist-t,.katex .op-limits>.vlist-t{text-align:center}.katex .accent .accent-body{position:relative}.katex .accent .accent-body:not(.accent-full){width:0}.katex .overlay{display:block}.katex .mtable .vertical-separator{display:inline-block;min-width:1px}.katex .mtable .arraycolsep{display:inline-block}.katex .mtable .col-align-c>.vlist-t{text-align:center}.katex .mtable .col-align-l>.vlist-t{text-align:left}.katex .mtable .col-align-r>.vlist-t{text-align:right}.katex .svg-align{text-align:left}.katex svg{fill:currentColor;stroke:currentColor;display:block;height:inherit;position:absolute;width:100%}.katex svg path{stroke:none}.katex svg{fill-rule:nonzero;fill-opacity:1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1}.katex img{border-style:none;max-height:none;max-width:none;min-height:0;min-width:0}.katex .stretchy{display:block;overflow:hidden;position:relative;width:100%}.katex .stretchy:after,.katex .stretchy:before{content:""}.katex .hide-tail{overflow:hidden;position:relative;width:100%}.katex .halfarrow-left{left:0;overflow:hidden;position:absolute;width:50.2%}.katex .halfarrow-right{overflow:hidden;position:absolute;right:0;width:50.2%}.katex .brace-left{left:0;overflow:hidden;position:absolute;width:25.1%}.katex .brace-center{left:25%;overflow:hidden;position:absolute;width:50%}.katex .brace-right{overflow:hidden;position:absolute;right:0;width:25.1%}.katex .x-arrow-pad{padding:0 .5em}.katex .cd-arrow-pad{padding:0 .55556em 0 .27778em}.katex .mover,.katex .munder,.katex .x-arrow{text-align:center}.katex .boxpad{padding:0 .3em}.katex .fbox,.katex .fcolorbox{border:.04em solid;box-sizing:border-box}.katex .cancel-pad{padding:0 .2em}.katex .cancel-lap{margin-left:-.2em;margin-right:-.2em}.katex .sout{border-bottom-style:solid;border-bottom-width:.08em}.katex .angl{border-right:.049em solid;border-top:.049em solid;box-sizing:border-box;margin-right:.03889em}.katex .anglpad{padding:0 .03889em}.katex .eqn-num:before{content:"(" counter(katexEqnNo) ")";counter-increment:katexEqnNo}.katex .mml-eqn-num:before{content:"(" counter(mmlEqnNo) ")";counter-increment:mmlEqnNo}.katex .mtr-glue{width:50%}.katex .cd-vert-arrow{display:inline-block;position:relative}.katex .cd-label-left{display:inline-block;position:absolute;right:calc(50% + .3em);text-align:left}.katex .cd-label-right{display:inline-block;left:calc(50% + .3em);position:absolute;text-align:right}.katex-display{display:block;margin:1em 0;text-align:center}.katex-display>.katex{display:block;text-align:center;white-space:nowrap}.katex-display>.katex>.katex-html{display:block;position:relative}.katex-display>.katex>.katex-html>.tag{position:absolute;right:0}.katex-display.leqno>.katex>.katex-html>.tag{left:0;right:auto}.katex-display.fleqn>.katex{padding-left:2em;text-align:left}body{counter-reset:katexEqnNo mmlEqnNo}
1
+ .x-markdown-light{--font-size:14px;--primary-color:#1677ff;--primary-color-hover:#4096ff;--heading-color:#000;--text-color:rgba(0,0,0,.85);--border-color:#f0f0f0;--line-color:rgba(5,5,5,.06);--light-bg:rgba(0,0,0,.04);--table-head-bg:#fafafa;--table-body-bg:#fff;--cite-bg:rgba(0,0,0,.1);--cite-hover-bg:rgba(0,0,0,.2);--border-radius-middle:6px;--border-radius-small:4px;--td-th-padding:10px 12px;--border-font-weight:600;--margin-block:0 0 16px 0;--padding-ul-ol:0 0 0 16px;--margin-ul-ol:0 0 16px 28px;--margin-li:0 0 14px 0;--hr-margin:24px 0;--table-margin:0 0 24px 0;--margin-pre:0 0 16px 0;--padding-code:16px}.x-markdown-light h1,.x-markdown-light h2,.x-markdown-light h3,.x-markdown-light h4{color:var(--heading-color);font-weight:var(--border-font-weight);margin:var(--margin-block)}.x-markdown-light h1{font-size:24px;line-height:36px}.x-markdown-light h2{font-size:20px;line-height:32px}.x-markdown-light h3{font-size:18px;line-height:30px}.x-markdown-light h4{font-size:16px}.x-markdown-light li,.x-markdown-light p{color:var(--text-color);margin:var(--margin-block)}.x-markdown-light li{position:relative}.x-markdown-light li::marker{color:var(--heading-color);font-size:16px;font-weight:400;line-height:28px}.x-markdown-light ul>li ol>li,.x-markdown-light ul>li ul>li{list-style:circle}.x-markdown-light ul>li ol>li ol>li,.x-markdown-light ul>li ol>li ul>li,.x-markdown-light ul>li ul>li ol>li,.x-markdown-light ul>li ul>li ul>li{list-style:square}.x-markdown-light ol>li ol>li,.x-markdown-light ol>li ul>li{list-style:lower-alpha}.x-markdown-light ol>li ol>li ol>li,.x-markdown-light ol>li ol>li ul>li,.x-markdown-light ol>li ul>li ol>li,.x-markdown-light ol>li ul>li ul>li{list-style:lower-roman}.x-markdown-light hr{border:0;border-top:1px solid var(--line-color);margin:var(--hr-margin)}.x-markdown-light table{border-collapse:collapse;box-shadow:0 1px 3px rgba(0,0,0,.05);margin:var(--table-margin);overflow:hidden}.x-markdown-light thead{background-color:var(--table-head-bg)}.x-markdown-light tbody,.x-markdown-light tbody tr{background-color:var(--table-body-bg)}.x-markdown-light tbody tr{transition:background-color .2s linear;&:hover{background-color:var(--table-head-bg)}}.x-markdown-light td,.x-markdown-light th{border:1px solid var(--border-color);padding:var(--td-th-padding)}.x-markdown-light th{color:var(--heading-color)}.x-markdown-light td{color:var(--text-color)}.x-markdown-light blockquote{background-color:var(--cite-bg);border-left:4px solid var(--border-color);border-radius:0 var(--border-radius-middle) var(--border-radius-middle) 0;margin:16px 0;padding:4px 12px;transition:background-color .2s ease}.x-markdown-light blockquote:hover{background-color:var(--cite-hover-bg)}.x-markdown-light pre code:not([class$=-highlightCode-code] pre code){background:var(--light-bg)!important;border-radius:var(--border-radius-middle);color:var(--text-color)!important;display:block;font-size:var(--font-size);line-height:1.3;margin:var(--margin-pre);padding:var(--padding-code)}.x-markdown-light code:not([class$=-highlightCode-code] code):not(pre code){background-color:var(--light-bg)!important;border:1px solid var(--border-color);border-radius:var(--border-radius-small);color:var(--text-color)!important;font-size:var(--font-size);margin-inline:3px;padding:2px 6px}.x-markdown-light img{max-width:100%}.x-markdown-light a{color:var(--primary-color);position:relative;text-decoration:none;transition:color .2s ease}.x-markdown-light a:hover{color:var(--primary-color-hover);text-decoration:underline}.x-markdown-light a:after{content:"↗";margin-left:4px;opacity:.7;vertical-align:super}@keyframes x-markdown-fade-in{0%{opacity:0}to{opacity:1}}.x-markdown{--text-color:inherit;--font-size:inherit;--margin-block:0 0 1em 0;--td-th-padding:0.85em 1em;--pre-th-td-padding:2px 0;--border-font-weight:600;--padding-ul-ol:0 0 0 1em;--margin-ul-ol:0 0 1em 1.8em;--margin-li:0.25em 0;--margin-pre:1em 0;--padding-code-inline:0.2em 0.4em;--margin-code-inline:0 0.2em;--code-inline-text:0.85em;--small-border-radius:2px;--image-margin:0.5em 0;--hr-margin:1.5em 0;--table-margin:1em 0;color:var(--text-color);font-size:var(--font-size);line-height:1.5714285714285714;width:100%}.x-markdown code,.x-markdown div,.x-markdown li,.x-markdown p,.x-markdown pre,.x-markdown span{overflow-wrap:break-word;word-break:break-word}.x-markdown code,.x-markdown pre{white-space:pre-wrap}.x-markdown td,.x-markdown th{padding:var(--td-th-padding)}.x-markdown th{font-weight:var(--border-font-weight)}.x-markdown pre table{box-shadow:none}.x-markdown pre td,.x-markdown pre th{border:none;padding:var(--pre-th-td-padding);text-align:left}.x-markdown p{margin:var(--margin-block)}.x-markdown p:first-child{margin-top:0}.x-markdown p:last-child{margin-bottom:0}.x-markdown ol,.x-markdown ul{margin:var(--margin-ul-ol);padding:var(--padding-ul-ol)}.x-markdown ol:first-child,.x-markdown ul:first-child{margin-top:0}.x-markdown ol:last-child,.x-markdown ul:last-child{margin-bottom:0}.x-markdown ol>li{list-style:decimal}.x-markdown ul>li{list-style:disc}.x-markdown li{margin:var(--margin-li)}.x-markdown li:first-child{margin-top:0}.x-markdown li:last-child{margin-bottom:0}.x-markdown pre{margin:var(--margin-pre);overflow-x:auto}.x-markdown pre:first-child{margin-top:0}.x-markdown pre:last-child{margin-bottom:0}.x-markdown code{border-radius:var(--small-border-radius);font-size:var(--code-inline-text);margin:var(--margin-code-inline);padding:var(--padding-code-inline)}.x-markdown pre code{border-radius:0;font-size:inherit;line-height:2;margin:0;padding:0}.x-markdown img{height:auto;margin:var(--image-margin);max-width:100%}.x-markdown hr{margin:var(--hr-margin)}.x-markdown table:not(pre){border-collapse:collapse;display:block;margin:var(--table-margin);max-width:100%;overflow:auto;width:max-content}.x-markdown table:not(pre):first-child{margin-top:0}.x-markdown table:not(pre):last-child{margin-bottom:0}.x-markdown .inline-katex .katex-display{display:inline-block;margin:0;text-align:left;text-align:initial;vertical-align:middle}.x-markdown .inline-katex .katex-display>.katex{display:inline-block;text-align:left;text-align:initial;white-space:normal}.x-markdown .inline-katex .katex-display>.katex>.katex-html{display:inline-block;position:static}.x-markdown .inline-katex .katex-display>.katex>.katex-html>.tag{position:static}.x-markdown-debug-panel{backdrop-filter:blur(8px);background:rgba(0,0,0,.85);border-radius:8px;box-shadow:0 2px 8px rgba(0,0,0,.15);color:#fff;font-family:SF Mono,Monaco,Inconsolata,Fira Mono,Droid Sans Mono,Source Code Pro,monospace;font-size:12px;padding:12px;position:fixed;right:0;transition:box-shadow .2s;-ms-user-select:none;user-select:none;width:180px;z-index:9999}.x-markdown-debug-panel:hover{box-shadow:0 4px 12px rgba(0,0,0,.25)}.x-markdown-debug-row{align-items:center;display:flex;gap:8px;margin-bottom:8px}.x-markdown-debug-row:last-child{margin-bottom:0}.x-markdown-debug-label{color:hsla(0,0%,100%,.65);font-weight:500;min-width:60px}.x-markdown-debug-value{font-weight:600;min-width:50px;text-align:right}.x-markdown-debug-chart{margin-left:auto}.x-markdown-debug-actions{border-top:1px solid hsla(0,0%,100%,.1);display:flex;gap:8px;margin-top:12px;padding-top:12px}.x-markdown-debug-action{background:hsla(0,0%,100%,.1);border:1px solid hsla(0,0%,100%,.2);border-radius:4px;color:#fff;cursor:pointer;flex:1 1;font-family:inherit;font-size:11px;font-weight:500;padding:6px 12px;transition:all .2s}.x-markdown-debug-action:hover{background:hsla(0,0%,100%,.15);border-color:hsla(0,0%,100%,.3)}.x-markdown-debug-action:active{transform:scale(.98)}.x-markdown-debug-record-btn.recording{animation:recording-pulse 1.5s ease-in-out infinite;background:rgba(255,77,79,.2);border-color:#ff4d4f}@keyframes recording-pulse{0%,to{box-shadow:0 0 0 0 rgba(255,77,79,.4)}50%{box-shadow:0 0 0 8px rgba(255,77,79,0)}}.x-markdown-debug-modal-overlay{align-items:center;animation:fadeIn .2s ease-out;backdrop-filter:blur(4px);background:rgba(0,0,0,.75);bottom:0;display:flex;justify-content:center;left:0;position:fixed;right:0;top:0;z-index:10000}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.x-markdown-debug-modal{animation:slideIn .3s ease-out;background:rgba(30,30,30,.95);border:1px solid hsla(0,0%,100%,.1);border-radius:12px;box-shadow:0 8px 32px rgba(0,0,0,.4);max-height:90vh;max-width:90vw;overflow:auto}@keyframes slideIn{0%{opacity:0;transform:translateY(-20px)}to{opacity:1;transform:translateY(0)}}.x-markdown-debug-modal-header{align-items:center;border-bottom:1px solid hsla(0,0%,100%,.1);display:flex;justify-content:space-between;padding:20px 24px}.x-markdown-debug-close-btn{align-items:center;background:hsla(0,0%,100%,.1);border:none;border-radius:6px;color:#fff;cursor:pointer;display:flex;font-size:18px;height:32px;justify-content:center;transition:all .2s;width:32px}.x-markdown-debug-close-btn:hover{background:rgba(255,77,79,.3)}.x-markdown-debug-modal-content{padding:24px}.x-markdown-debug-stats-summary{grid-gap:16px;display:grid;gap:16px;grid-template-columns:repeat(4,1fr);margin-bottom:24px}.x-markdown-debug-stat-item{background:hsla(0,0%,100%,.05);border:1px solid hsla(0,0%,100%,.1);border-radius:8px;padding:16px}.x-markdown-debug-stat-label{color:hsla(0,0%,100%,.6);font-size:11px;letter-spacing:.5px;margin-bottom:8px;text-transform:uppercase}.x-markdown-debug-stat-value{color:#fff;font-size:20px;font-weight:700}.x-markdown-debug-chart-full{background:hsla(0,0%,100%,.02);border:1px solid hsla(0,0%,100%,.1);border-radius:8px}.x-markdown-debug-chart-full .fps-line,.x-markdown-debug-chart-full .memory-line{filter:drop-shadow(0 0 4px currentColor)}.x-markdown-debug-legend{display:flex;gap:24px;justify-content:center;margin-top:16px}.x-markdown-debug-legend-item{align-items:center;color:hsla(0,0%,100%,.8);display:flex;font-size:13px;gap:8px}.x-markdown-debug-legend-color{border-radius:2px;height:12px;width:12px}@media (max-width:768px){.x-markdown-debug-stats-summary{grid-template-columns:repeat(2,1fr)}}@font-face{font-display:block;font-family:KaTeX_AMS;font-style:normal;font-weight:400;src:url(static/KaTeX_AMS-Regular.a79f1c31.woff2) format("woff2"),url(static/KaTeX_AMS-Regular.1608a09b.woff) format("woff"),url(static/KaTeX_AMS-Regular.4aafdb68.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Caligraphic;font-style:normal;font-weight:700;src:url(static/KaTeX_Caligraphic-Bold.ec17d132.woff2) format("woff2"),url(static/KaTeX_Caligraphic-Bold.b6770918.woff) format("woff"),url(static/KaTeX_Caligraphic-Bold.cce5b8ec.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Caligraphic;font-style:normal;font-weight:400;src:url(static/KaTeX_Caligraphic-Regular.55fac258.woff2) format("woff2"),url(static/KaTeX_Caligraphic-Regular.dad44a7f.woff) format("woff"),url(static/KaTeX_Caligraphic-Regular.07ef19e7.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Fraktur;font-style:normal;font-weight:700;src:url(static/KaTeX_Fraktur-Bold.d42a5579.woff2) format("woff2"),url(static/KaTeX_Fraktur-Bold.9f256b85.woff) format("woff"),url(static/KaTeX_Fraktur-Bold.b18f59e1.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Fraktur;font-style:normal;font-weight:400;src:url(static/KaTeX_Fraktur-Regular.d3c882a6.woff2) format("woff2"),url(static/KaTeX_Fraktur-Regular.7c187121.woff) format("woff"),url(static/KaTeX_Fraktur-Regular.ed38e79f.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Main;font-style:normal;font-weight:700;src:url(static/KaTeX_Main-Bold.c3fb5ac2.woff2) format("woff2"),url(static/KaTeX_Main-Bold.d181c465.woff) format("woff"),url(static/KaTeX_Main-Bold.b74a1a8b.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Main;font-style:italic;font-weight:700;src:url(static/KaTeX_Main-BoldItalic.6f2bb1df.woff2) format("woff2"),url(static/KaTeX_Main-BoldItalic.e3f82f9d.woff) format("woff"),url(static/KaTeX_Main-BoldItalic.70d8b0a5.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Main;font-style:italic;font-weight:400;src:url(static/KaTeX_Main-Italic.8916142b.woff2) format("woff2"),url(static/KaTeX_Main-Italic.9024d815.woff) format("woff"),url(static/KaTeX_Main-Italic.47373d1e.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Main;font-style:normal;font-weight:400;src:url(static/KaTeX_Main-Regular.0462f03b.woff2) format("woff2"),url(static/KaTeX_Main-Regular.7f51fe03.woff) format("woff"),url(static/KaTeX_Main-Regular.b7f8fe9b.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Math;font-style:italic;font-weight:700;src:url(static/KaTeX_Math-BoldItalic.572d331f.woff2) format("woff2"),url(static/KaTeX_Math-BoldItalic.f1035d8d.woff) format("woff"),url(static/KaTeX_Math-BoldItalic.a879cf83.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Math;font-style:italic;font-weight:400;src:url(static/KaTeX_Math-Italic.f28c23ac.woff2) format("woff2"),url(static/KaTeX_Math-Italic.5295ba48.woff) format("woff"),url(static/KaTeX_Math-Italic.939bc644.ttf) format("truetype")}@font-face{font-display:block;font-family:"KaTeX_SansSerif";font-style:normal;font-weight:700;src:url(static/KaTeX_SansSerif-Bold.8c5b5494.woff2) format("woff2"),url(static/KaTeX_SansSerif-Bold.bf59d231.woff) format("woff"),url(static/KaTeX_SansSerif-Bold.94e1e8dc.ttf) format("truetype")}@font-face{font-display:block;font-family:"KaTeX_SansSerif";font-style:italic;font-weight:400;src:url(static/KaTeX_SansSerif-Italic.3b1e59b3.woff2) format("woff2"),url(static/KaTeX_SansSerif-Italic.7c9bc82b.woff) format("woff"),url(static/KaTeX_SansSerif-Italic.b4c20c84.ttf) format("truetype")}@font-face{font-display:block;font-family:"KaTeX_SansSerif";font-style:normal;font-weight:400;src:url(static/KaTeX_SansSerif-Regular.ba21ed5f.woff2) format("woff2"),url(static/KaTeX_SansSerif-Regular.74048478.woff) format("woff"),url(static/KaTeX_SansSerif-Regular.d4d7ba48.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Script;font-style:normal;font-weight:400;src:url(static/KaTeX_Script-Regular.03e9641d.woff2) format("woff2"),url(static/KaTeX_Script-Regular.07505710.woff) format("woff"),url(static/KaTeX_Script-Regular.fe9cbbe1.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Size1;font-style:normal;font-weight:400;src:url(static/KaTeX_Size1-Regular.eae34984.woff2) format("woff2"),url(static/KaTeX_Size1-Regular.e1e279cb.woff) format("woff"),url(static/KaTeX_Size1-Regular.fabc004a.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Size2;font-style:normal;font-weight:400;src:url(static/KaTeX_Size2-Regular.5916a24f.woff2) format("woff2"),url(static/KaTeX_Size2-Regular.57727022.woff) format("woff"),url(static/KaTeX_Size2-Regular.d6b476ec.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Size3;font-style:normal;font-weight:400;src:url(static/KaTeX_Size3-Regular.b4230e7e.woff2) format("woff2"),url(static/KaTeX_Size3-Regular.9acaf01c.woff) format("woff"),url(static/KaTeX_Size3-Regular.a144ef58.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Size4;font-style:normal;font-weight:400;src:url(static/KaTeX_Size4-Regular.10d95fd3.woff2) format("woff2"),url(static/KaTeX_Size4-Regular.7a996c9d.woff) format("woff"),url(static/KaTeX_Size4-Regular.fbccdabe.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Typewriter;font-style:normal;font-weight:400;src:url(static/KaTeX_Typewriter-Regular.a8709e36.woff2) format("woff2"),url(static/KaTeX_Typewriter-Regular.6258592b.woff) format("woff"),url(static/KaTeX_Typewriter-Regular.d97aaf4a.ttf) format("truetype")}.katex{text-rendering:auto;font:normal 1.21em KaTeX_Main,Times New Roman,serif;line-height:1.2;text-indent:0}.katex *{-ms-high-contrast-adjust:none!important;border-color:currentColor}.katex .katex-version:after{content:"0.16.38"}.katex .katex-mathml{clip:rect(1px,1px,1px,1px);border:0;height:1px;overflow:hidden;padding:0;position:absolute;width:1px}.katex .katex-html>.newline{display:block}.katex .base{position:relative;white-space:nowrap;width:min-content}.katex .base,.katex .strut{display:inline-block}.katex .textbf{font-weight:700}.katex .textit{font-style:italic}.katex .textrm{font-family:KaTeX_Main}.katex .textsf{font-family:KaTeX_SansSerif}.katex .texttt{font-family:KaTeX_Typewriter}.katex .mathnormal{font-family:KaTeX_Math;font-style:italic}.katex .mathit{font-family:KaTeX_Main;font-style:italic}.katex .mathrm{font-style:normal}.katex .mathbf{font-family:KaTeX_Main;font-weight:700}.katex .boldsymbol{font-family:KaTeX_Math;font-style:italic;font-weight:700}.katex .amsrm,.katex .mathbb,.katex .textbb{font-family:KaTeX_AMS}.katex .mathcal{font-family:KaTeX_Caligraphic}.katex .mathfrak,.katex .textfrak{font-family:KaTeX_Fraktur}.katex .mathboldfrak,.katex .textboldfrak{font-family:KaTeX_Fraktur;font-weight:700}.katex .mathtt{font-family:KaTeX_Typewriter}.katex .mathscr,.katex .textscr{font-family:KaTeX_Script}.katex .mathsf,.katex .textsf{font-family:KaTeX_SansSerif}.katex .mathboldsf,.katex .textboldsf{font-family:KaTeX_SansSerif;font-weight:700}.katex .mathitsf,.katex .mathsfit,.katex .textitsf{font-family:KaTeX_SansSerif;font-style:italic}.katex .mainrm{font-family:KaTeX_Main;font-style:normal}.katex .vlist-t{border-collapse:collapse;display:inline-table;table-layout:fixed}.katex .vlist-r{display:table-row}.katex .vlist{display:table-cell;position:relative;vertical-align:bottom}.katex .vlist>span{display:block;height:0;position:relative}.katex .vlist>span>span{display:inline-block}.katex .vlist>span>.pstrut{overflow:hidden;width:0}.katex .vlist-t2{margin-right:-2px}.katex .vlist-s{display:table-cell;font-size:1px;min-width:2px;vertical-align:bottom;width:2px}.katex .vbox{align-items:baseline;display:inline-flex;flex-direction:column}.katex .hbox{width:100%}.katex .hbox,.katex .thinbox{display:inline-flex;flex-direction:row}.katex .thinbox{max-width:0;width:0}.katex .msupsub{text-align:left}.katex .mfrac>span>span{text-align:center}.katex .mfrac .frac-line{border-bottom-style:solid;display:inline-block;width:100%}.katex .hdashline,.katex .hline,.katex .mfrac .frac-line,.katex .overline .overline-line,.katex .rule,.katex .underline .underline-line{min-height:1px}.katex .mspace{display:inline-block}.katex .smash{display:inline;line-height:0}.katex .clap,.katex .llap,.katex .rlap{position:relative;width:0}.katex .clap>.inner,.katex .llap>.inner,.katex .rlap>.inner{position:absolute}.katex .clap>.fix,.katex .llap>.fix,.katex .rlap>.fix{display:inline-block}.katex .llap>.inner{right:0}.katex .clap>.inner,.katex .rlap>.inner{left:0}.katex .clap>.inner>span{margin-left:-50%;margin-right:50%}.katex .rule{border:0 solid;display:inline-block;position:relative}.katex .hline,.katex .overline .overline-line,.katex .underline .underline-line{border-bottom-style:solid;display:inline-block;width:100%}.katex .hdashline{border-bottom-style:dashed;display:inline-block;width:100%}.katex .sqrt>.root{margin-left:.2777777778em;margin-right:-.5555555556em}.katex .fontsize-ensurer.reset-size1.size1,.katex .sizing.reset-size1.size1{font-size:1em}.katex .fontsize-ensurer.reset-size1.size2,.katex .sizing.reset-size1.size2{font-size:1.2em}.katex .fontsize-ensurer.reset-size1.size3,.katex .sizing.reset-size1.size3{font-size:1.4em}.katex .fontsize-ensurer.reset-size1.size4,.katex .sizing.reset-size1.size4{font-size:1.6em}.katex .fontsize-ensurer.reset-size1.size5,.katex .sizing.reset-size1.size5{font-size:1.8em}.katex .fontsize-ensurer.reset-size1.size6,.katex .sizing.reset-size1.size6{font-size:2em}.katex .fontsize-ensurer.reset-size1.size7,.katex .sizing.reset-size1.size7{font-size:2.4em}.katex .fontsize-ensurer.reset-size1.size8,.katex .sizing.reset-size1.size8{font-size:2.88em}.katex .fontsize-ensurer.reset-size1.size9,.katex .sizing.reset-size1.size9{font-size:3.456em}.katex .fontsize-ensurer.reset-size1.size10,.katex .sizing.reset-size1.size10{font-size:4.148em}.katex .fontsize-ensurer.reset-size1.size11,.katex .sizing.reset-size1.size11{font-size:4.976em}.katex .fontsize-ensurer.reset-size2.size1,.katex .sizing.reset-size2.size1{font-size:.8333333333em}.katex .fontsize-ensurer.reset-size2.size2,.katex .sizing.reset-size2.size2{font-size:1em}.katex .fontsize-ensurer.reset-size2.size3,.katex .sizing.reset-size2.size3{font-size:1.1666666667em}.katex .fontsize-ensurer.reset-size2.size4,.katex .sizing.reset-size2.size4{font-size:1.3333333333em}.katex .fontsize-ensurer.reset-size2.size5,.katex .sizing.reset-size2.size5{font-size:1.5em}.katex .fontsize-ensurer.reset-size2.size6,.katex .sizing.reset-size2.size6{font-size:1.6666666667em}.katex .fontsize-ensurer.reset-size2.size7,.katex .sizing.reset-size2.size7{font-size:2em}.katex .fontsize-ensurer.reset-size2.size8,.katex .sizing.reset-size2.size8{font-size:2.4em}.katex .fontsize-ensurer.reset-size2.size9,.katex .sizing.reset-size2.size9{font-size:2.88em}.katex .fontsize-ensurer.reset-size2.size10,.katex .sizing.reset-size2.size10{font-size:3.4566666667em}.katex .fontsize-ensurer.reset-size2.size11,.katex .sizing.reset-size2.size11{font-size:4.1466666667em}.katex .fontsize-ensurer.reset-size3.size1,.katex .sizing.reset-size3.size1{font-size:.7142857143em}.katex .fontsize-ensurer.reset-size3.size2,.katex .sizing.reset-size3.size2{font-size:.8571428571em}.katex .fontsize-ensurer.reset-size3.size3,.katex .sizing.reset-size3.size3{font-size:1em}.katex .fontsize-ensurer.reset-size3.size4,.katex .sizing.reset-size3.size4{font-size:1.1428571429em}.katex .fontsize-ensurer.reset-size3.size5,.katex .sizing.reset-size3.size5{font-size:1.2857142857em}.katex .fontsize-ensurer.reset-size3.size6,.katex .sizing.reset-size3.size6{font-size:1.4285714286em}.katex .fontsize-ensurer.reset-size3.size7,.katex .sizing.reset-size3.size7{font-size:1.7142857143em}.katex .fontsize-ensurer.reset-size3.size8,.katex .sizing.reset-size3.size8{font-size:2.0571428571em}.katex .fontsize-ensurer.reset-size3.size9,.katex .sizing.reset-size3.size9{font-size:2.4685714286em}.katex .fontsize-ensurer.reset-size3.size10,.katex .sizing.reset-size3.size10{font-size:2.9628571429em}.katex .fontsize-ensurer.reset-size3.size11,.katex .sizing.reset-size3.size11{font-size:3.5542857143em}.katex .fontsize-ensurer.reset-size4.size1,.katex .sizing.reset-size4.size1{font-size:.625em}.katex .fontsize-ensurer.reset-size4.size2,.katex .sizing.reset-size4.size2{font-size:.75em}.katex .fontsize-ensurer.reset-size4.size3,.katex .sizing.reset-size4.size3{font-size:.875em}.katex .fontsize-ensurer.reset-size4.size4,.katex .sizing.reset-size4.size4{font-size:1em}.katex .fontsize-ensurer.reset-size4.size5,.katex .sizing.reset-size4.size5{font-size:1.125em}.katex .fontsize-ensurer.reset-size4.size6,.katex .sizing.reset-size4.size6{font-size:1.25em}.katex .fontsize-ensurer.reset-size4.size7,.katex .sizing.reset-size4.size7{font-size:1.5em}.katex .fontsize-ensurer.reset-size4.size8,.katex .sizing.reset-size4.size8{font-size:1.8em}.katex .fontsize-ensurer.reset-size4.size9,.katex .sizing.reset-size4.size9{font-size:2.16em}.katex .fontsize-ensurer.reset-size4.size10,.katex .sizing.reset-size4.size10{font-size:2.5925em}.katex .fontsize-ensurer.reset-size4.size11,.katex .sizing.reset-size4.size11{font-size:3.11em}.katex .fontsize-ensurer.reset-size5.size1,.katex .sizing.reset-size5.size1{font-size:.5555555556em}.katex .fontsize-ensurer.reset-size5.size2,.katex .sizing.reset-size5.size2{font-size:.6666666667em}.katex .fontsize-ensurer.reset-size5.size3,.katex .sizing.reset-size5.size3{font-size:.7777777778em}.katex .fontsize-ensurer.reset-size5.size4,.katex .sizing.reset-size5.size4{font-size:.8888888889em}.katex .fontsize-ensurer.reset-size5.size5,.katex .sizing.reset-size5.size5{font-size:1em}.katex .fontsize-ensurer.reset-size5.size6,.katex .sizing.reset-size5.size6{font-size:1.1111111111em}.katex .fontsize-ensurer.reset-size5.size7,.katex .sizing.reset-size5.size7{font-size:1.3333333333em}.katex .fontsize-ensurer.reset-size5.size8,.katex .sizing.reset-size5.size8{font-size:1.6em}.katex .fontsize-ensurer.reset-size5.size9,.katex .sizing.reset-size5.size9{font-size:1.92em}.katex .fontsize-ensurer.reset-size5.size10,.katex .sizing.reset-size5.size10{font-size:2.3044444444em}.katex .fontsize-ensurer.reset-size5.size11,.katex .sizing.reset-size5.size11{font-size:2.7644444444em}.katex .fontsize-ensurer.reset-size6.size1,.katex .sizing.reset-size6.size1{font-size:.5em}.katex .fontsize-ensurer.reset-size6.size2,.katex .sizing.reset-size6.size2{font-size:.6em}.katex .fontsize-ensurer.reset-size6.size3,.katex .sizing.reset-size6.size3{font-size:.7em}.katex .fontsize-ensurer.reset-size6.size4,.katex .sizing.reset-size6.size4{font-size:.8em}.katex .fontsize-ensurer.reset-size6.size5,.katex .sizing.reset-size6.size5{font-size:.9em}.katex .fontsize-ensurer.reset-size6.size6,.katex .sizing.reset-size6.size6{font-size:1em}.katex .fontsize-ensurer.reset-size6.size7,.katex .sizing.reset-size6.size7{font-size:1.2em}.katex .fontsize-ensurer.reset-size6.size8,.katex .sizing.reset-size6.size8{font-size:1.44em}.katex .fontsize-ensurer.reset-size6.size9,.katex .sizing.reset-size6.size9{font-size:1.728em}.katex .fontsize-ensurer.reset-size6.size10,.katex .sizing.reset-size6.size10{font-size:2.074em}.katex .fontsize-ensurer.reset-size6.size11,.katex .sizing.reset-size6.size11{font-size:2.488em}.katex .fontsize-ensurer.reset-size7.size1,.katex .sizing.reset-size7.size1{font-size:.4166666667em}.katex .fontsize-ensurer.reset-size7.size2,.katex .sizing.reset-size7.size2{font-size:.5em}.katex .fontsize-ensurer.reset-size7.size3,.katex .sizing.reset-size7.size3{font-size:.5833333333em}.katex .fontsize-ensurer.reset-size7.size4,.katex .sizing.reset-size7.size4{font-size:.6666666667em}.katex .fontsize-ensurer.reset-size7.size5,.katex .sizing.reset-size7.size5{font-size:.75em}.katex .fontsize-ensurer.reset-size7.size6,.katex .sizing.reset-size7.size6{font-size:.8333333333em}.katex .fontsize-ensurer.reset-size7.size7,.katex .sizing.reset-size7.size7{font-size:1em}.katex .fontsize-ensurer.reset-size7.size8,.katex .sizing.reset-size7.size8{font-size:1.2em}.katex .fontsize-ensurer.reset-size7.size9,.katex .sizing.reset-size7.size9{font-size:1.44em}.katex .fontsize-ensurer.reset-size7.size10,.katex .sizing.reset-size7.size10{font-size:1.7283333333em}.katex .fontsize-ensurer.reset-size7.size11,.katex .sizing.reset-size7.size11{font-size:2.0733333333em}.katex .fontsize-ensurer.reset-size8.size1,.katex .sizing.reset-size8.size1{font-size:.3472222222em}.katex .fontsize-ensurer.reset-size8.size2,.katex .sizing.reset-size8.size2{font-size:.4166666667em}.katex .fontsize-ensurer.reset-size8.size3,.katex .sizing.reset-size8.size3{font-size:.4861111111em}.katex .fontsize-ensurer.reset-size8.size4,.katex .sizing.reset-size8.size4{font-size:.5555555556em}.katex .fontsize-ensurer.reset-size8.size5,.katex .sizing.reset-size8.size5{font-size:.625em}.katex .fontsize-ensurer.reset-size8.size6,.katex .sizing.reset-size8.size6{font-size:.6944444444em}.katex .fontsize-ensurer.reset-size8.size7,.katex .sizing.reset-size8.size7{font-size:.8333333333em}.katex .fontsize-ensurer.reset-size8.size8,.katex .sizing.reset-size8.size8{font-size:1em}.katex .fontsize-ensurer.reset-size8.size9,.katex .sizing.reset-size8.size9{font-size:1.2em}.katex .fontsize-ensurer.reset-size8.size10,.katex .sizing.reset-size8.size10{font-size:1.4402777778em}.katex .fontsize-ensurer.reset-size8.size11,.katex .sizing.reset-size8.size11{font-size:1.7277777778em}.katex .fontsize-ensurer.reset-size9.size1,.katex .sizing.reset-size9.size1{font-size:.2893518519em}.katex .fontsize-ensurer.reset-size9.size2,.katex .sizing.reset-size9.size2{font-size:.3472222222em}.katex .fontsize-ensurer.reset-size9.size3,.katex .sizing.reset-size9.size3{font-size:.4050925926em}.katex .fontsize-ensurer.reset-size9.size4,.katex .sizing.reset-size9.size4{font-size:.462962963em}.katex .fontsize-ensurer.reset-size9.size5,.katex .sizing.reset-size9.size5{font-size:.5208333333em}.katex .fontsize-ensurer.reset-size9.size6,.katex .sizing.reset-size9.size6{font-size:.5787037037em}.katex .fontsize-ensurer.reset-size9.size7,.katex .sizing.reset-size9.size7{font-size:.6944444444em}.katex .fontsize-ensurer.reset-size9.size8,.katex .sizing.reset-size9.size8{font-size:.8333333333em}.katex .fontsize-ensurer.reset-size9.size9,.katex .sizing.reset-size9.size9{font-size:1em}.katex .fontsize-ensurer.reset-size9.size10,.katex .sizing.reset-size9.size10{font-size:1.2002314815em}.katex .fontsize-ensurer.reset-size9.size11,.katex .sizing.reset-size9.size11{font-size:1.4398148148em}.katex .fontsize-ensurer.reset-size10.size1,.katex .sizing.reset-size10.size1{font-size:.2410800386em}.katex .fontsize-ensurer.reset-size10.size2,.katex .sizing.reset-size10.size2{font-size:.2892960463em}.katex .fontsize-ensurer.reset-size10.size3,.katex .sizing.reset-size10.size3{font-size:.337512054em}.katex .fontsize-ensurer.reset-size10.size4,.katex .sizing.reset-size10.size4{font-size:.3857280617em}.katex .fontsize-ensurer.reset-size10.size5,.katex .sizing.reset-size10.size5{font-size:.4339440694em}.katex .fontsize-ensurer.reset-size10.size6,.katex .sizing.reset-size10.size6{font-size:.4821600771em}.katex .fontsize-ensurer.reset-size10.size7,.katex .sizing.reset-size10.size7{font-size:.5785920926em}.katex .fontsize-ensurer.reset-size10.size8,.katex .sizing.reset-size10.size8{font-size:.6943105111em}.katex .fontsize-ensurer.reset-size10.size9,.katex .sizing.reset-size10.size9{font-size:.8331726133em}.katex .fontsize-ensurer.reset-size10.size10,.katex .sizing.reset-size10.size10{font-size:1em}.katex .fontsize-ensurer.reset-size10.size11,.katex .sizing.reset-size10.size11{font-size:1.1996142719em}.katex .fontsize-ensurer.reset-size11.size1,.katex .sizing.reset-size11.size1{font-size:.2009646302em}.katex .fontsize-ensurer.reset-size11.size2,.katex .sizing.reset-size11.size2{font-size:.2411575563em}.katex .fontsize-ensurer.reset-size11.size3,.katex .sizing.reset-size11.size3{font-size:.2813504823em}.katex .fontsize-ensurer.reset-size11.size4,.katex .sizing.reset-size11.size4{font-size:.3215434084em}.katex .fontsize-ensurer.reset-size11.size5,.katex .sizing.reset-size11.size5{font-size:.3617363344em}.katex .fontsize-ensurer.reset-size11.size6,.katex .sizing.reset-size11.size6{font-size:.4019292605em}.katex .fontsize-ensurer.reset-size11.size7,.katex .sizing.reset-size11.size7{font-size:.4823151125em}.katex .fontsize-ensurer.reset-size11.size8,.katex .sizing.reset-size11.size8{font-size:.578778135em}.katex .fontsize-ensurer.reset-size11.size9,.katex .sizing.reset-size11.size9{font-size:.6945337621em}.katex .fontsize-ensurer.reset-size11.size10,.katex .sizing.reset-size11.size10{font-size:.8336012862em}.katex .fontsize-ensurer.reset-size11.size11,.katex .sizing.reset-size11.size11{font-size:1em}.katex .delimsizing.size1{font-family:KaTeX_Size1}.katex .delimsizing.size2{font-family:KaTeX_Size2}.katex .delimsizing.size3{font-family:KaTeX_Size3}.katex .delimsizing.size4{font-family:KaTeX_Size4}.katex .delimsizing.mult .delim-size1>span{font-family:KaTeX_Size1}.katex .delimsizing.mult .delim-size4>span{font-family:KaTeX_Size4}.katex .nulldelimiter{display:inline-block;width:.12em}.katex .delimcenter,.katex .op-symbol{position:relative}.katex .op-symbol.small-op{font-family:KaTeX_Size1}.katex .op-symbol.large-op{font-family:KaTeX_Size2}.katex .accent>.vlist-t,.katex .op-limits>.vlist-t{text-align:center}.katex .accent .accent-body{position:relative}.katex .accent .accent-body:not(.accent-full){width:0}.katex .overlay{display:block}.katex .mtable .vertical-separator{display:inline-block;min-width:1px}.katex .mtable .arraycolsep{display:inline-block}.katex .mtable .col-align-c>.vlist-t{text-align:center}.katex .mtable .col-align-l>.vlist-t{text-align:left}.katex .mtable .col-align-r>.vlist-t{text-align:right}.katex .svg-align{text-align:left}.katex svg{fill:currentColor;stroke:currentColor;display:block;height:inherit;position:absolute;width:100%}.katex svg path{stroke:none}.katex svg{fill-rule:nonzero;fill-opacity:1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1}.katex img{border-style:none;max-height:none;max-width:none;min-height:0;min-width:0}.katex .stretchy{display:block;overflow:hidden;position:relative;width:100%}.katex .stretchy:after,.katex .stretchy:before{content:""}.katex .hide-tail{overflow:hidden;position:relative;width:100%}.katex .halfarrow-left{left:0;overflow:hidden;position:absolute;width:50.2%}.katex .halfarrow-right{overflow:hidden;position:absolute;right:0;width:50.2%}.katex .brace-left{left:0;overflow:hidden;position:absolute;width:25.1%}.katex .brace-center{left:25%;overflow:hidden;position:absolute;width:50%}.katex .brace-right{overflow:hidden;position:absolute;right:0;width:25.1%}.katex .x-arrow-pad{padding:0 .5em}.katex .cd-arrow-pad{padding:0 .55556em 0 .27778em}.katex .mover,.katex .munder,.katex .x-arrow{text-align:center}.katex .boxpad{padding:0 .3em}.katex .fbox,.katex .fcolorbox{border:.04em solid;box-sizing:border-box}.katex .cancel-pad{padding:0 .2em}.katex .cancel-lap{margin-left:-.2em;margin-right:-.2em}.katex .sout{border-bottom-style:solid;border-bottom-width:.08em}.katex .angl{border-right:.049em solid;border-top:.049em solid;box-sizing:border-box;margin-right:.03889em}.katex .anglpad{padding:0 .03889em}.katex .eqn-num:before{content:"(" counter(katexEqnNo) ")";counter-increment:katexEqnNo}.katex .mml-eqn-num:before{content:"(" counter(mmlEqnNo) ")";counter-increment:mmlEqnNo}.katex .mtr-glue{width:50%}.katex .cd-vert-arrow{display:inline-block;position:relative}.katex .cd-label-left{display:inline-block;position:absolute;right:calc(50% + .3em);text-align:left}.katex .cd-label-right{display:inline-block;left:calc(50% + .3em);position:absolute;text-align:right}.katex-display{display:block;margin:1em 0;text-align:center}.katex-display>.katex{display:block;text-align:center;white-space:nowrap}.katex-display>.katex>.katex-html{display:block;position:relative}.katex-display>.katex>.katex-html>.tag{position:absolute;right:0}.katex-display.leqno>.katex>.katex-html>.tag{left:0;right:auto}.katex-display.fleqn>.katex{padding-left:2em;text-align:left}body{counter-reset:katexEqnNo mmlEqnNo}