正在显示
21 个修改的文件
包含
365 行增加
和
37 行删除
app/components/chart/chart.tsx
0 → 100644
app/components/chart/index.ts
0 → 100644
1 | +export * from "./chart"; |
@@ -109,6 +109,10 @@ const PowerPoint = dynamic( | @@ -109,6 +109,10 @@ const PowerPoint = dynamic( | ||
109 | loading: () => <Loading noLogo />, | 109 | loading: () => <Loading noLogo />, |
110 | }, | 110 | }, |
111 | ); | 111 | ); |
112 | +//以下新增图表 页面 20250331 | ||
113 | +const ChartPage = dynamic(async () => (await import("./chart")).ChartPage, { | ||
114 | + loading: () => <Loading noLogo />, | ||
115 | +}); | ||
112 | 116 | ||
113 | export function useSwitchTheme() { | 117 | export function useSwitchTheme() { |
114 | const config = useAppConfig(); | 118 | const config = useAppConfig(); |
@@ -198,6 +202,7 @@ function Screen() { | @@ -198,6 +202,7 @@ function Screen() { | ||
198 | const isBgRemoval = location.pathname === Path.BgRemoval; | 202 | const isBgRemoval = location.pathname === Path.BgRemoval; |
199 | const isWrting = location.pathname === Path.Writing; | 203 | const isWrting = location.pathname === Path.Writing; |
200 | const isPowerpoint = location.pathname === Path.Powerpoint; | 204 | const isPowerpoint = location.pathname === Path.Powerpoint; |
205 | + const isChart = location.pathname === Path.Chart; | ||
201 | 206 | ||
202 | const isMobileScreen = useMobileScreen(); | 207 | const isMobileScreen = useMobileScreen(); |
203 | const shouldTightBorder = | 208 | const shouldTightBorder = |
@@ -226,6 +231,8 @@ function Screen() { | @@ -226,6 +231,8 @@ function Screen() { | ||
226 | if (isWrting) return <WritingPage />; | 231 | if (isWrting) return <WritingPage />; |
227 | //20250328新增ppt制作页面 | 232 | //20250328新增ppt制作页面 |
228 | if (isPowerpoint) return <PowerPoint />; | 233 | if (isPowerpoint) return <PowerPoint />; |
234 | + //20250331新增图标页面 | ||
235 | + if (isChart) return <ChartPage />; | ||
229 | 236 | ||
230 | return ( | 237 | return ( |
231 | <> | 238 | <> |
app/components/mind/mind-elixir.d.ts
0 → 100644
app/components/mind/mind-utils.ts
0 → 100644
1 | +import { MindElixirData } from "mind-elixir"; | ||
2 | +import { useState, useMemo } from "react"; | ||
3 | +import type { ColorPickerProps, GetProp } from "antd"; | ||
4 | + | ||
5 | +export const INITIAL_DATA: MindElixirData = { | ||
6 | + nodeData: { | ||
7 | + id: "root", | ||
8 | + topic: "中心主题", | ||
9 | + }, | ||
10 | +}; | ||
11 | + | ||
12 | +export const LOADING_DATA: MindElixirData = { | ||
13 | + nodeData: { | ||
14 | + id: "root", | ||
15 | + topic: "生成中....", | ||
16 | + }, | ||
17 | +}; | ||
18 | + | ||
19 | +export const FONT_SIZE_OPTIONS = [ | ||
20 | + { value: "10", label: "10" }, | ||
21 | + { value: "12", label: "12" }, | ||
22 | + { value: "16", label: "16" }, | ||
23 | + { value: "18", label: "18" }, | ||
24 | + { value: "24", label: "24" }, | ||
25 | + { value: "32", label: "32" }, | ||
26 | + { value: "48", label: "48" }, | ||
27 | +]; | ||
28 | + | ||
29 | +export const EXPORT_OPTIONS = [ | ||
30 | + { value: "png", label: "导出为PNG" }, | ||
31 | + { value: "svg", label: "导出为SVG" }, | ||
32 | +]; | ||
33 | + | ||
34 | +type Color = Extract< | ||
35 | + GetProp<ColorPickerProps, "value">, | ||
36 | + string | { cleared: any } | ||
37 | +>; | ||
38 | + | ||
39 | +export const useColor = (initialColor: string) => { | ||
40 | + const [color, setColor] = useState<Color>(initialColor); | ||
41 | + | ||
42 | + const hexColor = useMemo(() => { | ||
43 | + if (typeof color === "string") { | ||
44 | + return color; | ||
45 | + } | ||
46 | + if (color && "toHexString" in color) { | ||
47 | + return color.toHexString(); | ||
48 | + } | ||
49 | + return initialColor; | ||
50 | + }, [color, initialColor]); | ||
51 | + | ||
52 | + return [hexColor, setColor] as const; | ||
53 | +}; |
@@ -2,7 +2,11 @@ import chatStyles from "@/app/components/chat.module.scss"; | @@ -2,7 +2,11 @@ import chatStyles from "@/app/components/chat.module.scss"; | ||
2 | import homeStyles from "@/app/components/home.module.scss"; | 2 | import homeStyles from "@/app/components/home.module.scss"; |
3 | 3 | ||
4 | import { MindSiderBar } from "./mind-siderBar"; | 4 | import { MindSiderBar } from "./mind-siderBar"; |
5 | -import MindElixir, { type Options, type MindElixirData } from "mind-elixir"; | 5 | +import MindElixir, { |
6 | + type Options, | ||
7 | + type MindElixirData, | ||
8 | + NodeObj, | ||
9 | +} from "mind-elixir"; | ||
6 | import { WindowContent } from "@/app/components/home"; | 10 | import { WindowContent } from "@/app/components/home"; |
7 | import { useMobileScreen } from "@/app/utils"; | 11 | import { useMobileScreen } from "@/app/utils"; |
8 | import { IconButton } from "../button"; | 12 | import { IconButton } from "../button"; |
@@ -18,22 +22,57 @@ import ReturnIcon from "@/app/icons/return.svg"; | @@ -18,22 +22,57 @@ import ReturnIcon from "@/app/icons/return.svg"; | ||
18 | import MinIcon from "@/app/icons/min.svg"; | 22 | import MinIcon from "@/app/icons/min.svg"; |
19 | import MaxIcon from "@/app/icons/max.svg"; | 23 | import MaxIcon from "@/app/icons/max.svg"; |
20 | import SDIcon from "@/app/icons/sd.svg"; | 24 | import SDIcon from "@/app/icons/sd.svg"; |
25 | +import BoldIcon from "@/app/icons/bold.svg"; | ||
26 | +import FontColorIcon from "@/app/icons/fontColor.svg"; | ||
27 | +import FontBgIcon from "@/app/icons/fontBg.svg"; | ||
28 | +import CenterIcon from "@/app/icons/center.svg"; | ||
29 | +import MindIcon from "@/app/icons/mind.svg"; | ||
30 | +import LeftIcon from "@/app/icons/leftMind.svg"; | ||
31 | +import RightIcon from "@/app/icons/rightMind.svg"; | ||
32 | +import LineIcon from "@/app/icons/line.svg"; | ||
33 | +import InitSideIcon from "@/app/icons/initSide.svg"; | ||
34 | + | ||
21 | import { useChatStore, useMindMapStore } from "@/app/store"; | 35 | import { useChatStore, useMindMapStore } from "@/app/store"; |
22 | -import { message } from "antd"; | ||
23 | - | ||
24 | -// 常量配置抽取 | ||
25 | -const INITIAL_DATA: MindElixirData = { | ||
26 | - nodeData: { | ||
27 | - id: "root", | ||
28 | - topic: "中心主题", | ||
29 | - }, | ||
30 | -}; | ||
31 | -const LOADING_DATA: MindElixirData = { | ||
32 | - nodeData: { | ||
33 | - id: "root", | ||
34 | - topic: "生成中....", | ||
35 | - }, | ||
36 | -}; | 36 | +import { |
37 | + message, | ||
38 | + Select, | ||
39 | + ColorPicker, | ||
40 | + Button, | ||
41 | + Space, | ||
42 | + Slider, | ||
43 | + Popover, | ||
44 | +} from "antd"; | ||
45 | +import type { ColorPickerProps, GetProp } from "antd"; | ||
46 | + | ||
47 | +import { | ||
48 | + INITIAL_DATA, | ||
49 | + LOADING_DATA, | ||
50 | + FONT_SIZE_OPTIONS, | ||
51 | + EXPORT_OPTIONS, | ||
52 | + useColor, | ||
53 | +} from "./mind-utils"; | ||
54 | + | ||
55 | +type Color = Extract< | ||
56 | + GetProp<ColorPickerProps, "value">, | ||
57 | + string | { cleared: any } | ||
58 | +>; | ||
59 | +const ScaleControl = ({ | ||
60 | + value, | ||
61 | + onChange, | ||
62 | +}: { | ||
63 | + value: number; | ||
64 | + onChange: (v: number) => void; | ||
65 | +}) => ( | ||
66 | + <Slider | ||
67 | + vertical | ||
68 | + value={value} | ||
69 | + onChange={onChange} | ||
70 | + style={{ height: "100px" }} | ||
71 | + min={35} | ||
72 | + max={200} | ||
73 | + tooltip={{ formatter: (v) => `${v}%` }} | ||
74 | + /> | ||
75 | +); | ||
37 | 76 | ||
38 | export function MindPage() { | 77 | export function MindPage() { |
39 | const isMobileScreen = useMobileScreen(); | 78 | const isMobileScreen = useMobileScreen(); |
@@ -43,15 +82,21 @@ export function MindPage() { | @@ -43,15 +82,21 @@ export function MindPage() { | ||
43 | const config = useAppConfig(); | 82 | const config = useAppConfig(); |
44 | const scrollRef = useRef<HTMLDivElement>(null); | 83 | const scrollRef = useRef<HTMLDivElement>(null); |
45 | const isMind = location.pathname === Path.Mind; | 84 | const isMind = location.pathname === Path.Mind; |
46 | - const [isLoading, setIsLoading] = useState(false); | ||
47 | - const containerRef = useRef<HTMLDivElement>(null); | ||
48 | - const mindInstance = useRef<InstanceType<typeof MindElixir> | null>(null); | 85 | + const [isLoading, setIsLoading] = useState(false); //加载 辅助 |
86 | + const containerRef = useRef<HTMLDivElement>(null); //思维导图容器 | ||
87 | + const mindInstance = useRef<InstanceType<typeof MindElixir> | null>(null); //思维导图实例 | ||
49 | const chatStore = useChatStore(); | 88 | const chatStore = useChatStore(); |
50 | - const { newMessages, content } = useMindMapStore.getState(); | 89 | + const { newMessages, content } = useMindMapStore.getState(); //聊天页面跳转时要生成的信息 |
51 | const query = useLocation(); | 90 | const query = useLocation(); |
52 | let { msg } = query.state || {}; | 91 | let { msg } = query.state || {}; |
53 | - const [data, setData] = useState<MindElixirData>(INITIAL_DATA); | 92 | + const [data, setData] = useState<MindElixirData>(INITIAL_DATA); //思维导图数据 |
54 | 93 | ||
94 | + const [fontColor, setFontColor] = useColor("#1677ff"); //字体颜色 | ||
95 | + const [nodeBgColor, setNodeBgColor] = useColor("#1677ff"); //节点背景颜色 | ||
96 | + const [lineColor, setLinrColor] = useColor("#1677ff"); //分支颜色 | ||
97 | + const [selectedNode, setSelectedNode] = useState<NodeObj | null>(null); | ||
98 | + const [scaleValue, setScaleValue] = useState(100); | ||
99 | + //如果是在聊天页面跳转过来时需要发起请求 | ||
55 | const fetchData = async () => { | 100 | const fetchData = async () => { |
56 | if (!msg) return; | 101 | if (!msg) return; |
57 | if (!content) return; | 102 | if (!content) return; |
@@ -84,27 +129,73 @@ export function MindPage() { | @@ -84,27 +129,73 @@ export function MindPage() { | ||
84 | const options: Options = { | 129 | const options: Options = { |
85 | el: containerRef.current, | 130 | el: containerRef.current, |
86 | locale: "zh_CN", | 131 | locale: "zh_CN", |
87 | - draggable: false, | 132 | + draggable: true, |
88 | contextMenu: true, | 133 | contextMenu: true, |
89 | - toolBar: true, | ||
90 | - nodeMenu: true, | 134 | + toolBar: false, |
135 | + nodeMenu: false, | ||
91 | }; | 136 | }; |
92 | // 创建实例 | 137 | // 创建实例 |
93 | mindInstance.current = new MindElixir(options); | 138 | mindInstance.current = new MindElixir(options); |
94 | mindInstance.current.init(data); | 139 | mindInstance.current.init(data); |
95 | const el = mindInstance.current?.container.querySelector("me-root"); | 140 | const el = mindInstance.current?.container.querySelector("me-root"); |
141 | + //添加鼠标移入中心主题时鼠标变手的样式 | ||
142 | + const style = document.createElement("style"); | ||
143 | + // 添加 CSS 样式 | ||
144 | + style.textContent = ` | ||
145 | + me-root:hover { | ||
146 | + cursor: pointer; | ||
147 | + } | ||
148 | + `; | ||
149 | + // 将样式插入到文档中 | ||
150 | + document.head.appendChild(style); | ||
151 | + | ||
96 | const handleContainerClick = (e: MouseEvent) => { | 152 | const handleContainerClick = (e: MouseEvent) => { |
97 | const target = e.target as HTMLElement; | 153 | const target = e.target as HTMLElement; |
154 | + // 检查点击的目标是否是某个特定的元素(比如 me-root) | ||
98 | if (target.closest("me-root")) { | 155 | if (target.closest("me-root")) { |
99 | - console.log("Clicked me-root element!", target); | 156 | + // 获取 me-nodes 父元素 |
157 | + const parentElement = target.closest("me-nodes"); | ||
158 | + // 确保父元素存在并且是 HTMLElement 类型 | ||
159 | + if (parentElement && parentElement instanceof HTMLElement) { | ||
160 | + // 鼠标按下时开始跟随 | ||
161 | + const onMouseDown = (e: MouseEvent) => { | ||
162 | + // 记录鼠标按下的初始位置和父元素的初始位置 | ||
163 | + const initialX = e.clientX; | ||
164 | + const initialY = e.clientY; | ||
165 | + const initialElementX = parentElement.offsetLeft; | ||
166 | + const initialElementY = parentElement.offsetTop; | ||
167 | + // 鼠标移动时更新父元素位置 | ||
168 | + const onMouseMove = (moveEvent: MouseEvent) => { | ||
169 | + const deltaX = moveEvent.clientX - initialX; | ||
170 | + const deltaY = moveEvent.clientY - initialY; | ||
171 | + parentElement.style.position = "absolute"; | ||
172 | + parentElement.style.left = `${initialElementX + deltaX}px`; | ||
173 | + parentElement.style.top = `${initialElementY + deltaY}px`; | ||
174 | + }; | ||
175 | + // 鼠标松开时停止跟随 | ||
176 | + const onMouseUp = () => { | ||
177 | + window.removeEventListener("mousemove", onMouseMove); | ||
178 | + window.removeEventListener("mouseup", onMouseUp); | ||
179 | + }; | ||
180 | + // 添加事件监听器 | ||
181 | + window.addEventListener("mousemove", onMouseMove); | ||
182 | + window.addEventListener("mouseup", onMouseUp); | ||
183 | + }; | ||
184 | + // 添加鼠标按下事件监听器 | ||
185 | + target.addEventListener("mousedown", onMouseDown); | ||
186 | + } | ||
100 | } | 187 | } |
101 | }; | 188 | }; |
189 | + //注册点击事件 | ||
102 | mindInstance.current.container.addEventListener( | 190 | mindInstance.current.container.addEventListener( |
103 | "click", | 191 | "click", |
104 | handleContainerClick, | 192 | handleContainerClick, |
105 | ); | 193 | ); |
106 | - | ||
107 | fetchData(); | 194 | fetchData(); |
195 | + //设置选择的节点用于调节样式 | ||
196 | + mindInstance.current?.bus.addListener("selectNode", (node) => { | ||
197 | + setSelectedNode(node); | ||
198 | + }); | ||
108 | 199 | ||
109 | return () => { | 200 | return () => { |
110 | mindInstance.current?.container.removeEventListener( | 201 | mindInstance.current?.container.removeEventListener( |
@@ -117,6 +208,7 @@ export function MindPage() { | @@ -117,6 +208,7 @@ export function MindPage() { | ||
117 | }; | 208 | }; |
118 | }, []); | 209 | }, []); |
119 | 210 | ||
211 | + //data更新思维导图更新数据 | ||
120 | useEffect(() => { | 212 | useEffect(() => { |
121 | mindInstance.current?.refresh(data); | 213 | mindInstance.current?.refresh(data); |
122 | }, [data]); | 214 | }, [data]); |
@@ -127,6 +219,168 @@ export function MindPage() { | @@ -127,6 +219,168 @@ export function MindPage() { | ||
127 | } | 219 | } |
128 | }, [isLoading]); | 220 | }, [isLoading]); |
129 | 221 | ||
222 | + useEffect(() => { | ||
223 | + if (selectedNode) { | ||
224 | + // 更新字体颜色 | ||
225 | + updateNodeStyle({ color: fontColor }); | ||
226 | + } | ||
227 | + }, [fontColor]); | ||
228 | + | ||
229 | + useEffect(() => { | ||
230 | + if (selectedNode) { | ||
231 | + // 更新节点背景颜色 | ||
232 | + updateNodeStyle({ background: nodeBgColor }); | ||
233 | + } | ||
234 | + }, [nodeBgColor]); | ||
235 | + // 导出函数 | ||
236 | + const handleDownload = async (type: "png" | "svg") => { | ||
237 | + try { | ||
238 | + const blob = | ||
239 | + type === "png" | ||
240 | + ? await mindInstance.current?.exportPng(false) | ||
241 | + : await mindInstance.current?.exportSvg(false); | ||
242 | + | ||
243 | + if (!blob) return; | ||
244 | + | ||
245 | + const url = URL.createObjectURL(blob); | ||
246 | + const a = document.createElement("a"); | ||
247 | + a.href = url; | ||
248 | + a.download = `${data.nodeData.topic}.${type}`; | ||
249 | + a.click(); | ||
250 | + URL.revokeObjectURL(url); | ||
251 | + } catch (error) { | ||
252 | + console.error("导出失败:", error); | ||
253 | + message.error("导出失败,请重试"); | ||
254 | + } | ||
255 | + }; | ||
256 | + //思维导图缩放函数 | ||
257 | + const handleScaleChange = (value: number) => { | ||
258 | + setScaleValue(value); | ||
259 | + mindInstance.current?.scale(value / 100); | ||
260 | + }; | ||
261 | + //更新样式 | ||
262 | + const updateNodeStyle = (style: Partial<NodeObj["style"]>) => { | ||
263 | + if (selectedNode) { | ||
264 | + mindInstance.current?.reshapeNode(MindElixir.E(selectedNode.id), { | ||
265 | + style: { ...selectedNode.style, ...style }, | ||
266 | + }); | ||
267 | + } | ||
268 | + }; | ||
269 | + //更新分支颜色 | ||
270 | + const updateBranchColor = (value: string) => { | ||
271 | + if (selectedNode) { | ||
272 | + mindInstance.current?.reshapeNode(MindElixir.E(selectedNode.id), { | ||
273 | + branchColor: value, | ||
274 | + }); | ||
275 | + } | ||
276 | + }; | ||
277 | + | ||
278 | + const mindType = ( | ||
279 | + <div> | ||
280 | + <Button | ||
281 | + icon={<LeftIcon />} | ||
282 | + onClick={() => { | ||
283 | + mindInstance.current?.initLeft(); | ||
284 | + }} | ||
285 | + /> | ||
286 | + <Button | ||
287 | + icon={<RightIcon />} | ||
288 | + onClick={() => { | ||
289 | + mindInstance.current?.initRight(); | ||
290 | + }} | ||
291 | + /> | ||
292 | + <Button | ||
293 | + icon={ | ||
294 | + <InitSideIcon | ||
295 | + onClick={() => { | ||
296 | + mindInstance.current?.initSide(); | ||
297 | + }} | ||
298 | + /> | ||
299 | + } | ||
300 | + /> | ||
301 | + </div> | ||
302 | + ); | ||
303 | + //工具栏 | ||
304 | + const renderToolbar = () => ( | ||
305 | + <Space> | ||
306 | + <Popover | ||
307 | + content={ | ||
308 | + <ScaleControl value={scaleValue} onChange={handleScaleChange} /> | ||
309 | + } | ||
310 | + > | ||
311 | + <Button>{scaleValue}%</Button> | ||
312 | + </Popover> | ||
313 | + <Popover content={mindType}> | ||
314 | + <Button icon={<MindIcon />}></Button> | ||
315 | + </Popover> | ||
316 | + <Select | ||
317 | + options={EXPORT_OPTIONS} | ||
318 | + onSelect={handleDownload} | ||
319 | + placeholder="导出" | ||
320 | + style={{ width: 120 }} | ||
321 | + /> | ||
322 | + | ||
323 | + <Select | ||
324 | + options={FONT_SIZE_OPTIONS} | ||
325 | + onSelect={(v) => updateNodeStyle({ fontSize: v })} | ||
326 | + placeholder="字号" | ||
327 | + style={{ width: 100 }} | ||
328 | + disabled={!selectedNode} | ||
329 | + /> | ||
330 | + | ||
331 | + <Button | ||
332 | + icon={<CenterIcon />} | ||
333 | + onClick={() => mindInstance.current?.toCenter()} | ||
334 | + /> | ||
335 | + | ||
336 | + <Button | ||
337 | + icon={<BoldIcon />} | ||
338 | + onClick={() => | ||
339 | + updateNodeStyle({ | ||
340 | + fontWeight: | ||
341 | + selectedNode?.style?.fontWeight === "bold" ? "normal" : "bold", | ||
342 | + }) | ||
343 | + } | ||
344 | + disabled={!selectedNode} | ||
345 | + /> | ||
346 | + <ColorPicker | ||
347 | + value={fontColor} | ||
348 | + onChange={(value) => { | ||
349 | + setFontColor(value || "#000000"); // 处理可能的空值 | ||
350 | + updateNodeStyle({ color: value?.toHexString() || "#000000" }); | ||
351 | + }} | ||
352 | + disabled={!selectedNode} | ||
353 | + showText | ||
354 | + > | ||
355 | + <Button icon={<FontColorIcon />} /> | ||
356 | + </ColorPicker> | ||
357 | + | ||
358 | + <ColorPicker | ||
359 | + value={nodeBgColor} | ||
360 | + onChange={(value) => { | ||
361 | + setNodeBgColor(value || "#ffffff"); | ||
362 | + updateNodeStyle({ background: value?.toHexString() || "#ffffff" }); | ||
363 | + }} | ||
364 | + disabled={!selectedNode} | ||
365 | + showText | ||
366 | + > | ||
367 | + <Button icon={<FontBgIcon />} /> | ||
368 | + </ColorPicker> | ||
369 | + | ||
370 | + <ColorPicker | ||
371 | + value={lineColor} | ||
372 | + onChange={(value) => { | ||
373 | + setLinrColor(value || "#ffffff"); | ||
374 | + updateBranchColor(value?.toHexString() || "#ffffff"); | ||
375 | + }} | ||
376 | + disabled={!selectedNode} | ||
377 | + showText | ||
378 | + > | ||
379 | + <Button icon={<LineIcon />} /> | ||
380 | + </ColorPicker> | ||
381 | + </Space> | ||
382 | + ); | ||
383 | + | ||
130 | return ( | 384 | return ( |
131 | <> | 385 | <> |
132 | <MindSiderBar | 386 | <MindSiderBar |
@@ -160,12 +414,7 @@ export function MindPage() { | @@ -160,12 +414,7 @@ export function MindPage() { | ||
160 | </div> | 414 | </div> |
161 | <div className={chatStyles["chat-message-actions"]}> | 415 | <div className={chatStyles["chat-message-actions"]}> |
162 | <div className={chatStyles["chat-input-actions"]}> | 416 | <div className={chatStyles["chat-input-actions"]}> |
163 | - {/* <ChatAction | ||
164 | - text={Locale.Chat.Actions.ReWrite} | ||
165 | - icon={<ReloadIcon />} | ||
166 | - onClick={() => { } | ||
167 | - } | ||
168 | - /> */} | 417 | + {renderToolbar()} |
169 | </div> | 418 | </div> |
170 | </div> | 419 | </div> |
171 | <div className="window-actions"> | 420 | <div className="window-actions"> |
@@ -57,6 +57,7 @@ export enum Path { | @@ -57,6 +57,7 @@ export enum Path { | ||
57 | BgRemoval = "/background-removal", | 57 | BgRemoval = "/background-removal", |
58 | Writing = "/aiWriting", | 58 | Writing = "/aiWriting", |
59 | Powerpoint = "/powerpoint", | 59 | Powerpoint = "/powerpoint", |
60 | + Chart = "/chart", | ||
60 | } | 61 | } |
61 | 62 | ||
62 | export enum ApiPath { | 63 | export enum ApiPath { |
app/icons/bold.svg
0 → 100644
1 | +<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1743400745474" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5496" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16"><path d="M768.96 575.072c-22.144-34.112-54.816-56.8-97.984-68.032v-2.176c22.88-10.88 42.112-23.04 57.696-36.48 15.616-12.704 27.584-26.144 35.936-40.288 16.32-29.76 24.128-60.96 23.392-93.632 0-63.872-19.776-115.232-59.328-154.08-39.2-38.464-97.824-58.048-175.84-58.784H215.232v793.728H579.52c62.432 0 114.496-20.864 156.256-62.624 42.112-39.936 63.52-94.176 64.224-162.752 0-41.376-10.336-79.68-31.04-114.88zM344.32 228.832h194.912c43.904 0.736 76.224 11.424 96.896 32.128 21.056 22.144 31.584 49.184 31.584 81.12s-10.528 58.432-31.584 79.488c-20.672 22.848-52.992 34.304-96.896 34.304H344.32V228.832z m304.352 536.256c-20.672 23.584-53.344 35.744-97.984 36.48H344.32v-238.432h206.336c44.64 0.704 77.312 12.512 97.984 35.392 20.672 23.232 31.04 51.168 31.04 83.84 0 31.904-10.336 59.488-31.008 82.72z" p-id="5497"></path></svg> |
app/icons/center.svg
0 → 100644
1 | +<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1743412877101" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2349" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16"><path d="M760.663406 528.093537l0.170892 0.096191L593.303724 815.900451l-1.055029 0.696872c-10.000771 23.754007-33.628912 40.461527-61.217247 40.461527-27.585265 0-51.205219-16.70752-61.20906-40.461527l-1.051959-0.696872L301.240879 528.189727c-73.278957-125.832893-29.797653-286.736537 97.115851-359.385137 126.916575-72.65167 289.208844-29.53364 362.476545 96.296183C809.93253 349.420181 806.383704 449.386964 760.663406 528.093537zM531.032472 297.987788c-54.953589 0-99.497085 44.169989-99.497085 98.658997 0 54.485939 44.543496 98.661044 99.497085 98.661044s99.510388-44.175105 99.510388-98.661044C630.54286 342.157777 585.986061 297.987788 531.032472 297.987788z" fill="#272636" p-id="2350"></path></svg> |
app/icons/fontBg.svg
0 → 100644
1 | +<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1743400875107" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="8289" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16"><path d="M64 0h896v1024h-896z" fill="#D8D8D8" p-id="8290"></path><path d="M454.4 192h115.2l262.4 640h-108.8l-64-166.4h-294.4l-64 166.4h-108.8l262.4-640z m-57.6 396.8h230.4l-115.2-288h-6.4l-108.8 288z" fill="#212121" p-id="8291"></path></svg> |
app/icons/fontColor.svg
0 → 100644
1 | +<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1743400819471" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="6474" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16"><path d="M513.237333 53.333333l0.704 0.021334a53.141333 53.141333 0 0 1 3.52 0.234666l0.810667 0.106667a45.504 45.504 0 0 1 7.466667 1.429333l1.856 0.533334 0.448 0.149333a52.842667 52.842667 0 0 1 20.458666 11.946667 51.2 51.2 0 0 1 7.978667 9.493333c1.557333 2.346667 2.965333 4.864 4.16 7.530667l364.8 810.666666a53.333333 53.333333 0 1 1-97.28 43.776l-101.952-226.517333H297.749333L195.84 939.221333a53.333333 53.333333 0 0 1-97.28-43.776l364.8-810.666666a53.482667 53.482667 0 0 1 16-20.309334 53.333333 53.333333 0 0 1 16.426667-8.618666l0.64-0.192a43.008 43.008 0 0 1 5.056-1.28 84.096 84.096 0 0 1 4.16-0.682667l0.938666-0.085333c0.853333-0.106667 1.706667-0.170667 2.56-0.213334l0.917334-0.042666L512 53.333333l1.237333 0.021334z m164.970667 552.704L512 236.629333l-166.229333 369.408h332.458666z" p-id="6475"></path></svg> |
app/icons/initSide.svg
0 → 100644
1 | +<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1743415911143" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2770" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16"><path d="M512 576m-192 0a192 192 0 1 0 384 0 192 192 0 1 0-384 0Z" fill="#5F6368" p-id="2771"></path><path d="M896 480m-96 0a96 96 0 1 0 192 0 96 96 0 1 0-192 0Z" fill="#5F6368" p-id="2772"></path><path d="M896 608c-70.4 0-128-57.6-128-128s57.6-128 128-128 128 57.6 128 128-57.6 128-128 128z m0-192c-38.4 0-64 25.6-64 64s25.6 64 64 64 64-25.6 64-64-25.6-64-64-64z" fill="#5F6368" p-id="2773"></path><path d="M768 896m-96 0a96 96 0 1 0 192 0 96 96 0 1 0-192 0Z" fill="#5F6368" p-id="2774"></path><path d="M768 1024c-70.4 0-128-57.6-128-128s57.6-128 128-128 128 57.6 128 128-57.6 128-128 128z m0-192c-38.4 0-64 25.6-64 64s25.6 64 64 64 64-25.6 64-64-25.6-64-64-64z" fill="#5F6368" p-id="2775"></path><path d="M256 896m-96 0a96 96 0 1 0 192 0 96 96 0 1 0-192 0Z" fill="#5F6368" p-id="2776"></path><path d="M256 1024c-70.4 0-128-57.6-128-128s57.6-128 128-128 128 57.6 128 128-57.6 128-128 128z m0-192c-38.4 0-64 25.6-64 64s25.6 64 64 64 64-25.6 64-64-25.6-64-64-64z" fill="#5F6368" p-id="2777"></path><path d="M512 128m-96 0a96 96 0 1 0 192 0 96 96 0 1 0-192 0Z" fill="#5F6368" p-id="2778"></path><path d="M512 256c-70.4 0-128-57.6-128-128s57.6-128 128-128 128 57.6 128 128-57.6 128-128 128z m0-192c-38.4 0-64 25.6-64 64s25.6 64 64 64 64-25.6 64-64-25.6-64-64-64z" fill="#5F6368" p-id="2779"></path><path d="M128 480m-96 0a96 96 0 1 0 192 0 96 96 0 1 0-192 0Z" fill="#5F6368" p-id="2780"></path><path d="M128 608c-70.4 0-128-57.6-128-128s57.6-128 128-128 128 57.6 128 128-57.6 128-128 128z m0-192c-38.4 0-64 25.6-64 64s25.6 64 64 64 64-25.6 64-64-25.6-64-64-64zM572.16 745.344l45.184-45.248 90.56 90.56-45.312 45.248zM316.16 790.656l90.432-90.56 45.312 45.248-90.56 90.56zM677.504 508.224l134.08-42.88 19.52 60.992-134.144 42.88z" fill="#5F6368" p-id="2781"></path><path d="M189.568 530.112l18.24-61.312 141.12 42.048-18.304 61.376zM480 230.4h64v166.4h-64z" fill="#5F6368" p-id="2782"></path></svg> |
app/icons/italic.svg
0 → 100644
1 | +<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1743400663399" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4522" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16"><path d="M809.324 142.941v65.194h-99.109l-247.77 607.244h99.109v65.68H214.676v-65.68h99.109l247.769-607.245h-99.109V142.94h346.879z" p-id="4523"></path></svg> |
app/icons/leftMind.svg
0 → 100644
1 | +<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1743415850139" class="icon" viewBox="0 0 1260 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2478" xmlns:xlink="http://www.w3.org/1999/xlink" width="19.6875" height="16"><path d="M696.7684475 549.4167275c0 68.96922656 0.73763906 137.93845313 0 206.90767969l-0.73763906 12.53985937c-1.991625 16.52310844-5.90111063 32.45610656-12.24480375 47.79899344a167.07518531 167.07518531 0 0 1-95.74551469 91.46721c-16.96569187 6.26992969-34.81655062 9.36801281-52.962465 10.0318875-44.47961906 0.36881906-88.88547375 0-133.36509281 0-2.06538844 0-4.05701344-0.44258344-6.04863844-0.73763906l-0.73763813 1.77033281a110.49829031 110.49829031 0 0 1-51.11836781 59.23239469c-14.75277562 7.89273469-30.53824594 11.80222031-47.06135531 13.12997062-51.19213219 1.32774938-102.53179125 0.14752781-153.65015906 0.14752781a115.36670625 115.36670625 0 0 1-52.37235375-13.27749843 112.41615094 112.41615094 0 0 1-54.36397875-69.78062906 109.53936 109.53936 0 0 1 3.31937437-65.64985219 110.49829031 110.49829031 0 0 1 51.11836781-59.15863032c14.75277562-7.96649906 30.53824594-11.80222031 47.06135438-13.27749843a3355.81390031 3355.81390031 0 0 1 158.887395 0 109.17054094 109.17054094 0 0 1 51.70847906 15.93299812c22.12916344 13.49878969 38.65227281 34.44773156 46.98759094 58.27346438 1.03269469 0 2.06538844-0.22129125 2.95055531-0.36882 45.733605-1.991625 91.46721 1.47527719 137.20081407-0.29505563a92.72119594 92.72119594 0 0 0 82.09919718-60.33885281c3.68819437-10.32694312 5.38476281-21.17023312 5.53229063-32.16105094V549.4167275c-75.97679531 0-151.95359063 2.8030275-227.930385 0.95893031v0.22129219a111.75227625 111.75227625 0 0 1-51.19213219 59.23239375c-14.75277562 7.74520688-30.53824594 11.80222031-47.06135437 12.98244281-51.19213219 1.32774938-102.53179125 0.14752781-153.65015907 0.14752782a117.28456687 117.28456687 0 0 1-52.37235375-13.2774975 112.56367875 112.56367875 0 0 1-54.36397875-69.85439344 109.53936 109.53936 0 0 1 3.31937438-65.64985219 110.49829031 110.49829031 0 0 1 51.11836781-59.15863125c14.75277562-7.89273469 30.53824594-11.80222031 47.06135438-13.12996969a3169.41257812 3169.41257812 0 0 1 158.887395 0 111.08840156 111.08840156 0 0 1 51.70847906 15.85923375c21.98163563 13.27749844 38.35721719 34.07891156 46.76629875 57.75711657H623.00456844c0-69.11675437 2.50797187-138.30727312-0.14752782-207.42402657a91.02462656 91.02462656 0 0 0-8.92542937-35.25913406A91.54097344 91.54097344 0 0 0 535.81566406 180.59733406C490.96722594 179.12205594 446.48760687 180.59733406 401.71293219 180.59733406a42.04541063 42.04541063 0 0 1-6.12240188-0.59011125l-0.59011125 1.77033282a112.41615094 112.41615094 0 0 1-51.41342343 59.23239468c-14.75277562 7.74520688-30.53824594 11.80222031-47.06135438 12.98244282-51.19213219 1.32774938-102.53179125 0.14752781-153.65016 0.14752781a117.28456687 117.28456687 0 0 1-52.37235375-13.27749844 112.56367875 112.56367875 0 0 1-54.36397875-69.85439344A109.53936 109.53936 0 0 1 57.9732575 73.41841813C67.26750594 62.2800725 78.40585156 53.20711531 90.8719475 46.34707437c14.75277562-7.89273469 30.53824594-11.80222031 47.06135438-13.12997062a3169.41257812 3169.41257812 0 0 1 158.88739499 0 111.08840156 111.08840156 0 0 1 51.70847907 15.85923375c22.12916344 13.49878969 38.504745 34.44773156 46.84006312 58.42099219 1.03269469-0.44258344 2.06538844-0.59011125 2.95055438-0.73763813 45.733605-1.84409719 91.24591781-0.73763906 136.831995 0 19.39990031 0.73763906 38.504745 4.27830469 56.79818718 11.43340032A167.44400438 167.44400438 0 0 1 688.13807375 219.69218937c5.75358281 17.2607475 8.4090825 35.03784281 8.63037375 53.10999282V475.65284844h153.94521469l0.44258344-1.18022156a111.9735675 111.9735675 0 0 1 51.26589562-59.23239469c14.75277562-7.74520688 30.53824594-11.80222031 47.06135438-12.98244281a3169.41257812 3169.41257812 0 0 1 158.887395 0c5.53229062 0.44258344 11.06458219 0.95893031 16.52310843 2.06538843 12.39233156 2.65549969 24.34207969 7.37638781 35.11160625 13.86760969 34.44773156 20.94894188 55.17538125 60.04379719 53.10999282 100.318875a109.53936 109.53936 0 0 1-57.75711657 91.61473687c-14.75277562 7.89273469-30.53824594 11.80222031-47.06135437 13.12997063-51.33966 1.32774938-102.53179125 0.14752781-153.79768782 0.14752781a115.36670625 115.36670625 0 0 1-52.37235375-13.27749844 112.19485969 112.19485969 0 0 1-51.48718687-60.48638062H696.7684475z m-552.78650719 295.05551531a38.20968937 38.20968937 0 0 0-27.73521844 12.09727594 39.24238313 39.24238313 0 0 0-7.37638875 12.09727594c-5.90111063 16.449345 0.73763906 35.18537062 15.49041469 44.25832687a37.61957812 37.61957812 0 0 0 17.2607475 5.16347157c50.45449312 1.32774938 100.90898625 1.32774938 151.36347938 0a36.14430094 36.14430094 0 0 0 32.75116218-24.04702407 37.54581469 37.54581469 0 0 0-15.49041468-44.25832687 37.61957812 37.61957812 0 0 0-17.2607475-5.16347156C243.341885 843.1444925 193.69879438 844.47224281 143.98194031 844.47224281z m0-368.81939437a38.20968937 38.20968937 0 0 0-27.73521844 12.09727687 39.24238313 39.24238313 0 0 0-7.37638875 12.09727594c-5.90111063 16.449345 0.73763906 35.18537062 15.49041469 44.25832688a37.61957812 37.61957812 0 0 0 17.2607475 5.16347156c50.45449312 1.32774938 100.90898625 1.32774938 151.36347938 0a36.14430094 36.14430094 0 0 0 32.75116218-24.04702406 37.54581469 37.54581469 0 0 0-15.49041468-44.25832782 37.61957812 37.61957812 0 0 0-17.2607475-5.16347156C243.341885 474.32509906 193.69879438 475.65284844 143.98194031 475.65284844z m0-368.81939344a38.20968937 38.20968937 0 0 0-27.73521844 12.09727594 39.24238313 39.24238313 0 0 0-7.37638875 12.09727593c-5.90111063 16.449345 0.73763906 35.18537062 15.49041469 44.25832782a37.61957812 37.61957812 0 0 0 17.2607475 5.16347156c50.45449312 1.32774938 100.90898625 1.32774938 151.36347938 0a36.14430094 36.14430094 0 0 0 32.75116218-24.047025 37.54581469 37.54581469 0 0 0-15.49041468-44.25832687 37.61957812 37.61957812 0 0 0-17.2607475-5.16347157C243.341885 105.50570563 193.69879438 106.833455 143.98194031 106.833455z" fill="" p-id="2479"></path></svg> |
app/icons/line.svg
0 → 100644
1 | +<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1743471096346" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1773" width="16" height="16" xmlns:xlink="http://www.w3.org/1999/xlink"><path d="M214.537 487c-13.178 37.286-48.738 64-90.537 64-53.02 0-96-42.981-96-96s42.98-96 96-96c41.799 0 77.359 26.714 90.537 64h594.926c13.178-37.286 48.738-64 90.537-64 53.019 0 96 42.981 96 96s-42.981 96-96 96c-41.799 0-77.359-26.714-90.537-64H214.537z" fill="#707070" p-id="1774"></path></svg> |
app/icons/rightMind.svg
0 → 100644
1 | +<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1743415877915" class="icon" viewBox="0 0 1262 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2624" xmlns:xlink="http://www.w3.org/1999/xlink" width="19.71875" height="16"><path d="M870.85087 79.486795l0.783893-2.038123a117.427237 117.427237 0 0 1 54.323815-62.946643c15.677869-7.838934 32.453188-12.542295 50.012402-13.326189 56.283549-1.567787 112.567098-1.567787 168.850647 0l17.637602 2.35168c13.16941 3.135574 25.868484 7.838934 37.313328 14.893976 36.607824 22.73291 58.635229 64.279262 56.440327 106.609508-0.548725 11.758402-2.978795 23.516803-7.05504 34.491311-4.468193 12.542295-11.209676 24.300697-19.597336 34.491311-9.641889 11.758402-21.47868 21.949016-34.72648 29.004058-15.677869 8.622828-32.453188 12.542295-50.012401 14.110081-54.402205 1.567787-108.961188 0.783893-163.285004 0.783894-19.597336 0-38.410779-4.703361-55.656434-14.110082-25.554926-14.110082-45.465819-37.626885-54.872541-65.063156l-3.135573 0.783894c-48.601393 2.35168-97.202786-1.567787-145.80418 0.783893a105.825614 105.825614 0 0 0-30.963791 7.055041 99.005741 99.005741 0 0 0-62.711475 91.401975V470.649621h241.439179v-1.254229c4.703361-12.542295 10.974508-24.143918 19.597336-34.334533 9.406721-11.758402 21.165123-21.400291 34.491311-28.612111 15.677869-7.838934 32.139631-12.542295 49.385287-13.326188 56.440328-1.567787 112.880655-1.567787 168.53709 0l17.559213 2.35168c13.326188 3.135574 25.868484 7.838934 37.626885 14.893976 36.451045 22.73291 58.478451 64.279262 56.440327 106.609507-0.783893 11.758402-3.135574 23.516803-7.055041 34.491312a118.916635 118.916635 0 0 1-54.480594 63.495368c-15.677869 8.622828-32.139631 12.542295-49.855622 14.110082-54.480594 1.567787-108.961188 0.783893-163.363393 0.783894-19.597336 0-38.410779-4.703361-55.656434-14.110082a119.151803 119.151803 0 0 1-54.245426-64.279262H629.254912c0 73.685983-2.665238 147.371967 0.156778 220.274056a96.73245 96.73245 0 0 0 9.485111 37.626885c10.504172 21.949016 29.396004 39.978565 52.207303 48.601394 9.406721 3.919467 20.381229 6.271148 30.571844 7.05504 47.033606 2.35168 94.851106 0.783893 141.884713 0.783894 1.567787 0 3.919467 0 6.271147 0.548725l0.783894-1.802955a115.624282 115.624282 0 0 1 54.088647-62.711475c15.677869-8.38766 32.139631-12.542295 50.16918-14.110082 56.440328-1.17584 112.096762-1.17584 168.53709 0 6.271148 0.783893 11.758402 1.25423 17.245655 2.351681 13.326188 2.900406 25.868484 7.838934 36.842992 14.893975a117.740795 117.740795 0 0 1-4.703361 203.812294c-15.677869 8.622828-32.688356 12.542295-50.16918 14.110082-54.480594 1.097451-108.961188 0-163.049835 0a124.639057 124.639057 0 0 1-55.656435-14.110082c-25.868484-14.110082-45.465819-37.626885-54.87254-65.063155l-3.135574 0.783893c-48.601393 1.567787-97.202786 0.783893-145.569012 0-20.381229-0.783893-40.762459-4.703361-60.359795-12.542295a177.630253 177.630253 0 0 1-111.0777-164.304065V549.038965c-54.872541 0-109.431524 1.332619-164.147286 1.567787-4.546582 12.385516-10.974508 23.90875-19.597336 34.020975-9.406721 11.758402-21.165123 21.400291-34.491312 28.612111-15.677869 7.838934-32.531578 12.542295-50.16918 13.326188-54.088647 1.567787-108.961188 0-163.049835 0-19.597336-0.783893-38.410779-5.487254-55.656434-14.110082a120.71959 120.71959 0 0 1-61.300467-109.745081c0.783893-11.758402 3.135574-23.516803 7.055041-34.491312 4.703361-12.542295 11.758402-24.300697 19.597336-34.491311 10.190615-11.758402 21.949016-21.165123 35.275204-29.004057 15.677869-8.622828 32.453188-12.542295 50.169181-14.110082 56.440328-1.567787 112.880655-1.567787 168.772257 0 6.271148 0 11.758402 0.783893 18.029549 1.567787 13.326188 2.35168 25.868484 7.055041 37.626885 14.110082 23.516803 14.110082 40.762459 36.059098 49.620455 61.143688H550.865568c0-73.685983-0.783893-146.588073 0-220.274057L551.649461 235.481589a177.316696 177.316696 0 0 1 114.762-147.999081 178.727704 178.727704 0 0 1 56.283549-10.73934C769.963784 78.467733 817.154169 78.702901 864.422943 78.702901c2.194902 0 4.311414 0.313557 6.427927 0.783894zM982.477295 862.596341a40.60568 40.60568 0 0 0-29.474393 12.855852 41.703131 41.703131 0 0 0-7.838934 12.855853c-6.271148 17.480824 0.783893 37.391717 16.461762 47.033606a39.978565 39.978565 0 0 0 18.343106 5.487254c53.618311 1.411008 107.236623 1.411008 160.854934 0a38.410779 38.410779 0 0 0 34.804869-25.554926 39.900176 39.900176 0 0 0-16.461762-47.033606 39.978565 39.978565 0 0 0-18.343107-5.487255c-52.756028-1.411008-105.512057-0.156779-158.346475-0.156778z m0-391.94672a40.60568 40.60568 0 0 0-29.474393 12.855852 41.703131 41.703131 0 0 0-7.838934 12.855853c-6.271148 17.480824 0.783893 37.391717 16.461762 47.033606a39.978565 39.978565 0 0 0 18.343106 5.487254c53.618311 1.411008 107.236623 1.411008 160.854934 0a38.410779 38.410779 0 0 0 34.804869-25.554926 39.900176 39.900176 0 0 0-16.461762-47.033606 39.978565 39.978565 0 0 0-18.343107-5.487254C1088.067742 469.238613 1035.311713 470.649621 982.477295 470.649621z m0-391.94672a40.60568 40.60568 0 0 0-29.474393 12.855853 41.703131 41.703131 0 0 0-7.838934 12.855852c-6.271148 17.480824 0.783893 37.391717 16.461762 47.033607a39.978565 39.978565 0 0 0 18.343106 5.487254c53.618311 1.411008 107.236623 1.411008 160.854934 0a38.410779 38.410779 0 0 0 34.804869-25.554927 39.900176 39.900176 0 0 0-16.461762-47.033606 39.978565 39.978565 0 0 0-18.343107-5.487254C1088.067742 77.291893 1035.311713 78.702901 982.477295 78.702901z" fill="" p-id="2625"></path></svg> |
app/icons/svg.svg
0 → 100644
1 | +<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1743389839319" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4565" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16"><path d="M332.799002 686.081014m-332.799002 0a332.799002 332.799002 0 1 0 665.598003 0 332.799002 332.799002 0 1 0-665.598003 0Z" fill="#DFDFF2" p-id="4566"></path><path d="M290.559128 595.969284l20.991937-25.599923a87.551737 87.551737 0 0 0 60.15982 25.599923c27.391918 0 42.751872-12.799962 42.751872-31.999904s-15.359954-27.135919-36.351891-36.351891l-31.231907-13.567959a65.023805 65.023805 0 0 1-46.079861-59.135823 67.071799 67.071799 0 0 1 74.239777-62.207813 96.76771 96.76771 0 0 1 68.351795 28.671914l-18.687944 22.783932a71.935784 71.935784 0 0 0-49.663851-20.22394c-23.039931 0-38.143886 11.007967-38.143886 29.183913s18.175945 25.599923 36.60789 34.047897l30.975908 13.311961A62.975811 62.975811 0 0 1 450.302649 563.201382c0 36.351891-29.95191 65.791803-79.615761 65.791803a112.639662 112.639662 0 0 1-80.12776-33.023901zM462.846611 399.105875h37.887887l33.535899 116.991649c7.679977 25.599923 12.543962 47.871856 20.479939 73.983778h1.535995c7.679977-25.599923 13.31196-48.127856 20.479939-73.983778l33.535899-116.991649h36.351891l-70.655788 226.047322h-42.239873zM659.96602 512.001536c0-73.727779 45.567863-118.015646 105.215684-118.015646a90.11173 90.11173 0 0 1 67.327798 28.671914l-19.455941 22.783932a61.183816 61.183816 0 0 0-46.59186-20.22394c-41.983874 0-70.14379 32.511902-70.14379 85.759743s25.599923 86.52774 71.423786 86.52774a56.063832 56.063832 0 0 0 35.583893-11.007966v-52.479843h-44.543866v-29.183913h76.799769v98.047706a102.399693 102.399693 0 0 1-71.423785 25.599924c-60.15982 0.767998-104.191687-41.727875-104.191688-116.479651z" fill="#434260" p-id="4567"></path><path d="M883.19735 1024h-639.99808A141.055577 141.055577 0 0 1 102.399693 883.200422v-742.397772A141.055577 141.055577 0 0 1 243.19927 0.003072h516.350451a89.087733 89.087733 0 0 1 63.231811 25.599923l189.695431 189.695431A38.399885 38.399885 0 0 1 1023.996928 243.202342v639.99808a141.055577 141.055577 0 0 1-140.799578 140.799578zM243.19927 76.802842A63.999808 63.999808 0 0 0 179.199462 140.80265v742.397772A63.999808 63.999808 0 0 0 243.19927 947.20023h639.99808a63.999808 63.999808 0 0 0 63.999808-63.999808V259.074295l-179.199462-179.199463a12.799962 12.799962 0 0 0-8.447975-3.07199z" fill="#434260" p-id="4568"></path></svg> |
@@ -144,6 +144,10 @@ const cn = { | @@ -144,6 +144,10 @@ const cn = { | ||
144 | Title: "分享页面", | 144 | Title: "分享页面", |
145 | Error: "分享失败", | 145 | Error: "分享失败", |
146 | }, | 146 | }, |
147 | + Mind: { | ||
148 | + ExportPng: "导出为PNG图片", | ||
149 | + ExportSvg: "导出为SVG", | ||
150 | + }, | ||
147 | }, | 151 | }, |
148 | Select: { | 152 | Select: { |
149 | Search: "搜索消息", | 153 | Search: "搜索消息", |
@@ -49,7 +49,7 @@ | @@ -49,7 +49,7 @@ | ||
49 | "lucide-react": "^0.484.0", | 49 | "lucide-react": "^0.484.0", |
50 | "markdown-to-txt": "^2.0.1", | 50 | "markdown-to-txt": "^2.0.1", |
51 | "mermaid": "^10.6.1", | 51 | "mermaid": "^10.6.1", |
52 | - "mind-elixir": "^4.4.3", | 52 | + "mind-elixir": "^4.5.0", |
53 | "nanoid": "^5.0.3", | 53 | "nanoid": "^5.0.3", |
54 | "next": "^14.1.1", | 54 | "next": "^14.1.1", |
55 | "node-fetch": "^3.3.1", | 55 | "node-fetch": "^3.3.1", |
@@ -7504,10 +7504,10 @@ min-indent@^1.0.0: | @@ -7504,10 +7504,10 @@ min-indent@^1.0.0: | ||
7504 | resolved "https://registry.npmmirror.com/min-indent/-/min-indent-1.0.1.tgz" | 7504 | resolved "https://registry.npmmirror.com/min-indent/-/min-indent-1.0.1.tgz" |
7505 | integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== | 7505 | integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== |
7506 | 7506 | ||
7507 | -mind-elixir@^4.4.3: | ||
7508 | - version "4.4.3" | ||
7509 | - resolved "https://registry.npmmirror.com/mind-elixir/-/mind-elixir-4.4.3.tgz#bef5650a29276856bef089bc54576048c87eeabd" | ||
7510 | - integrity sha512-i2GBFtZ4Z6pv5z5/QcfQFrbVTNa0OWayfx7OvQpzNn7X62l6xJn0y3dKxQ/KuT50HxgZiyRptY5J0xBc2qeuZw== | 7507 | +mind-elixir@^4.5.0: |
7508 | + version "4.5.0" | ||
7509 | + resolved "https://registry.npmmirror.com/mind-elixir/-/mind-elixir-4.5.0.tgz#e9cc9dca9e93a22777f5bb83096ba40dd0accd37" | ||
7510 | + integrity sha512-EyodIX7CK1d3Rq0urT91suZwVGHz7XegfcRiEVVFQfc952gW0xTU9Z5gaEQ4Iukwte5Sex6lOKgyxH8iGp/Puw== | ||
7511 | 7511 | ||
7512 | minimalistic-assert@^1.0.1: | 7512 | minimalistic-assert@^1.0.1: |
7513 | version "1.0.1" | 7513 | version "1.0.1" |
-
请 注册 或 登录 后发表评论