@8btc/office-assistant-mcp 0.0.13 → 0.0.15

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.
Binary file
package/dist/index.cjs CHANGED
@@ -22,6 +22,8 @@ const fs = require("fs");
22
22
  const fsPromises = require("fs/promises");
23
23
  const playwright = require("playwright");
24
24
  const pdfLib = require("pdf-lib");
25
+ const path$2 = require("path");
26
+ const url = require("url");
25
27
  async function startStdioMcpServer(server) {
26
28
  const transport2 = new stdio_js.StdioServerTransport();
27
29
  await server.connect(transport2);
@@ -119,7 +121,7 @@ const Cover = ({ data }) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className:
119
121
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute top-0 left-0 right-0 bottom-0 z-0", children: /* @__PURE__ */ jsxRuntime.jsx("img", { className: "block w-full h-full object-cover", src: bg, alt: "" }) }),
120
122
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "h-full py-[118px] px-[82px] relative z-10 flex flex-col justify-between", children: [
121
123
  /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
122
- !!data.disclaimer && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex mb-[167px]", children: /* @__PURE__ */ jsxRuntime.jsx(AiWarn, { disclaimer: data.disclaimer }) }),
124
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex mb-[167px]", children: /* @__PURE__ */ jsxRuntime.jsx(AiWarn, { disclaimer: "本报告由 Wujie Agent 生成" }) }),
123
125
  /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
124
126
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-[54px] text-[#043C68] font-bold leading-[120%] mb-8 fontsongti", children: data.reportTitle }),
125
127
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-[30px] text-[#043C68] font-bold leading-[120%] fontsongti", children: data.secondaryTitle })
@@ -134,7 +136,7 @@ const Cover = ({ data }) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className:
134
136
  const End = ({ data }) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "full-page relative", children: [
135
137
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute top-0 left-0 right-0 bottom-0 z-0", children: /* @__PURE__ */ jsxRuntime.jsx("img", { className: "block w-full h-full object-cover", src: bg, alt: "" }) }),
136
138
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "h-full py-[118px] px-[82px] relative z-10", children: [
137
- !!data.disclaimer && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex mb-9", children: /* @__PURE__ */ jsxRuntime.jsx(AiWarn, { disclaimer: data.disclaimer }) }),
139
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex mb-9", children: /* @__PURE__ */ jsxRuntime.jsx(AiWarn, { disclaimer: "本报告由 Wujie Agent 生成" }) }),
138
140
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex mb-[25px]", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "bg-white p-3", children: /* @__PURE__ */ jsxRuntime.jsx(qrcode_react.QRCodeSVG, { value: data.qrcodeUrl, size: 126 }) }) }),
139
141
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-black w-[306px] py-2.5 px-2 text-sm leading-[150%]", children: [
140
142
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mb-1", children: "本文内容由大语言模型(LLM)基于截至训练时间节点的知识库生成。尽管我们力求信息的客观与全面,但鉴于生成式 AI 的概率预测特性,文本中涉及的市场规模预测、技术参数及竞争格局分析可能存在误差。" }),
@@ -13341,7 +13343,7 @@ const domain = {
13341
13343
  tokenize: tokenizeDomain,
13342
13344
  partial: true
13343
13345
  };
13344
- const path$2 = {
13346
+ const path$1 = {
13345
13347
  tokenize: tokenizePath,
13346
13348
  partial: true
13347
13349
  };
@@ -13447,7 +13449,7 @@ function tokenizeWwwAutolink(effects, ok2, nok) {
13447
13449
  }
13448
13450
  effects.enter("literalAutolink");
13449
13451
  effects.enter("literalAutolinkWww");
13450
- return effects.check(wwwPrefix, effects.attempt(domain, effects.attempt(path$2, wwwAfter), nok), nok)(code2);
13452
+ return effects.check(wwwPrefix, effects.attempt(domain, effects.attempt(path$1, wwwAfter), nok), nok)(code2);
13451
13453
  }
13452
13454
  function wwwAfter(code2) {
13453
13455
  effects.exit("literalAutolinkWww");
@@ -13497,7 +13499,7 @@ function tokenizeProtocolAutolink(effects, ok2, nok) {
13497
13499
  return nok(code2);
13498
13500
  }
13499
13501
  function afterProtocol(code2) {
13500
- return code2 === null || asciiControl(code2) || markdownLineEndingOrSpace(code2) || unicodeWhitespace(code2) || unicodePunctuation(code2) ? nok(code2) : effects.attempt(domain, effects.attempt(path$2, protocolAfter), nok)(code2);
13502
+ return code2 === null || asciiControl(code2) || markdownLineEndingOrSpace(code2) || unicodeWhitespace(code2) || unicodePunctuation(code2) ? nok(code2) : effects.attempt(domain, effects.attempt(path$1, protocolAfter), nok)(code2);
13501
13503
  }
13502
13504
  function protocolAfter(code2) {
13503
13505
  effects.exit("literalAutolinkHttp");
@@ -51859,7 +51861,7 @@ var innerPath = function innerPath2(name2, height) {
51859
51861
  return "";
51860
51862
  }
51861
51863
  };
51862
- var path$1 = {
51864
+ var path = {
51863
51865
  // The doubleleftarrow geometry is from glyph U+21D0 in the font KaTeX Main
51864
51866
  doubleleftarrow: "M262 157\nl10-10c34-36 62.7-77 86-123 3.3-8 5-13.3 5-16 0-5.3-6.7-8-20-8-7.3\n 0-12.2.5-14.5 1.5-2.3 1-4.8 4.5-7.5 10.5-49.3 97.3-121.7 169.3-217 216-28\n 14-57.3 25-88 33-6.7 2-11 3.8-13 5.5-2 1.7-3 4.2-3 7.5s1 5.8 3 7.5\nc2 1.7 6.3 3.5 13 5.5 68 17.3 128.2 47.8 180.5 91.5 52.3 43.7 93.8 96.2 124.5\n 157.5 9.3 8 15.3 12.3 18 13h6c12-.7 18-4 18-10 0-2-1.7-7-5-15-23.3-46-52-87\n-86-123l-10-10h399738v-40H218c328 0 0 0 0 0l-10-8c-26.7-20-65.7-43-117-69 2.7\n-2 6-3.7 10-5 36.7-16 72.3-37.3 107-64l10-8h399782v-40z\nm8 0v40h399730v-40zm0 194v40h399730v-40z",
51865
51867
  // doublerightarrow is from glyph U+21D2 in font KaTeX Main
@@ -54952,7 +54954,7 @@ class PathNode {
54952
54954
  if (this.alternate) {
54953
54955
  node2.setAttribute("d", this.alternate);
54954
54956
  } else {
54955
- node2.setAttribute("d", path$1[this.pathName]);
54957
+ node2.setAttribute("d", path[this.pathName]);
54956
54958
  }
54957
54959
  return node2;
54958
54960
  }
@@ -54960,7 +54962,7 @@ class PathNode {
54960
54962
  if (this.alternate) {
54961
54963
  return '<path d="' + utils.escape(this.alternate) + '"/>';
54962
54964
  } else {
54963
- return '<path d="' + utils.escape(path$1[this.pathName]) + '"/>';
54965
+ return '<path d="' + utils.escape(path[this.pathName]) + '"/>';
54964
54966
  }
54965
54967
  }
54966
54968
  }
@@ -74954,11 +74956,11 @@ const replaceMarkdown = (mdContent) => {
74954
74956
  const imgRegex = /!\[(.*?)\]\((.*?)\)/g;
74955
74957
  const windowsPattern = /[a-zA-Z]:(?:\\|\/)[^\s"'`<>|?*]*(?:[\\/][^\s"'`<>|?*]*)*/g;
74956
74958
  return mdContent.replace(imgRegex, (m) => {
74957
- let match;
74959
+ let match = imgRegex.exec(m);
74958
74960
  let result = "";
74959
- while ((match = imgRegex.exec(m)) !== null) {
74961
+ if (match) {
74960
74962
  const [, alt, src] = match;
74961
- if (windowsPattern.test(src)) {
74963
+ if (!src?.startsWith("http") && windowsPattern.test(src)) {
74962
74964
  result = `![${alt || ""}](${encodeURIComponent(src)})`;
74963
74965
  }
74964
74966
  }
@@ -75202,9 +75204,6 @@ const style = `/*! tailwindcss v4.1.18 | MIT License | https://tailwindcss.com *
75202
75204
  .relative {
75203
75205
  position: relative;
75204
75206
  }
75205
- .static {
75206
- position: static;
75207
- }
75208
75207
  .top-0 {
75209
75208
  top: calc(var(--spacing) * 0);
75210
75209
  }
@@ -75226,24 +75225,6 @@ const style = `/*! tailwindcss v4.1.18 | MIT License | https://tailwindcss.com *
75226
75225
  .z-50 {
75227
75226
  z-index: 50;
75228
75227
  }
75229
- .container {
75230
- width: 100%;
75231
- @media (width >= 40rem) {
75232
- max-width: 40rem;
75233
- }
75234
- @media (width >= 48rem) {
75235
- max-width: 48rem;
75236
- }
75237
- @media (width >= 64rem) {
75238
- max-width: 64rem;
75239
- }
75240
- @media (width >= 80rem) {
75241
- max-width: 80rem;
75242
- }
75243
- @media (width >= 96rem) {
75244
- max-width: 96rem;
75245
- }
75246
- }
75247
75228
  .mx-2 {
75248
75229
  margin-inline: calc(var(--spacing) * 2);
75249
75230
  }
@@ -75322,21 +75303,9 @@ const style = `/*! tailwindcss v4.1.18 | MIT License | https://tailwindcss.com *
75322
75303
  .grid {
75323
75304
  display: grid;
75324
75305
  }
75325
- .hidden {
75326
- display: none;
75327
- }
75328
- .inline {
75329
- display: inline;
75330
- }
75331
- .inline-block {
75332
- display: inline-block;
75333
- }
75334
75306
  .table {
75335
75307
  display: table;
75336
75308
  }
75337
- .table-cell {
75338
- display: table-cell;
75339
- }
75340
75309
  .h-6 {
75341
75310
  height: calc(var(--spacing) * 6);
75342
75311
  }
@@ -75461,11 +75430,6 @@ const style = `/*! tailwindcss v4.1.18 | MIT License | https://tailwindcss.com *
75461
75430
  margin-inline-end: calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-x-reverse)));
75462
75431
  }
75463
75432
  }
75464
- .truncate {
75465
- overflow: hidden;
75466
- text-overflow: ellipsis;
75467
- white-space: nowrap;
75468
- }
75469
75433
  .overflow-hidden {
75470
75434
  overflow: hidden;
75471
75435
  }
@@ -75650,19 +75614,6 @@ const style = `/*! tailwindcss v4.1.18 | MIT License | https://tailwindcss.com *
75650
75614
  .text-white {
75651
75615
  color: var(--color-white);
75652
75616
  }
75653
- .lowercase {
75654
- text-transform: lowercase;
75655
- }
75656
- .italic {
75657
- font-style: italic;
75658
- }
75659
- .ordinal {
75660
- --tw-ordinal: ordinal;
75661
- font-variant-numeric: var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,);
75662
- }
75663
- .overline {
75664
- text-decoration-line: overline;
75665
- }
75666
75617
  .underline {
75667
75618
  text-decoration-line: underline;
75668
75619
  }
@@ -75686,10 +75637,6 @@ const style = `/*! tailwindcss v4.1.18 | MIT License | https://tailwindcss.com *
75686
75637
  --tw-shadow: 0 10px 15px -3px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 4px 6px -4px var(--tw-shadow-color, rgb(0 0 0 / 0.1));
75687
75638
  box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
75688
75639
  }
75689
- .ring {
75690
- --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);
75691
- box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
75692
- }
75693
75640
  .outline {
75694
75641
  outline-style: var(--tw-outline-style);
75695
75642
  outline-width: 1px;
@@ -75860,6 +75807,7 @@ const style = `/*! tailwindcss v4.1.18 | MIT License | https://tailwindcss.com *
75860
75807
  max-width: 100%;
75861
75808
  box-sizing: content-box;
75862
75809
  break-inside: avoid;
75810
+ margin: var(--base-size-16) 0;
75863
75811
  }
75864
75812
  .markdown-body code, .markdown-body kbd, .markdown-body pre, .markdown-body samp {
75865
75813
  font-family: monospace;
@@ -76673,26 +76621,6 @@ mjx-container:not([display='true']) svg {
76673
76621
  syntax: "*";
76674
76622
  inherits: false;
76675
76623
  }
76676
- @property --tw-ordinal {
76677
- syntax: "*";
76678
- inherits: false;
76679
- }
76680
- @property --tw-slashed-zero {
76681
- syntax: "*";
76682
- inherits: false;
76683
- }
76684
- @property --tw-numeric-figure {
76685
- syntax: "*";
76686
- inherits: false;
76687
- }
76688
- @property --tw-numeric-spacing {
76689
- syntax: "*";
76690
- inherits: false;
76691
- }
76692
- @property --tw-numeric-fraction {
76693
- syntax: "*";
76694
- inherits: false;
76695
- }
76696
76624
  @property --tw-shadow {
76697
76625
  syntax: "*";
76698
76626
  inherits: false;
@@ -76787,11 +76715,6 @@ mjx-container:not([display='true']) svg {
76787
76715
  --tw-border-style: solid;
76788
76716
  --tw-leading: initial;
76789
76717
  --tw-font-weight: initial;
76790
- --tw-ordinal: initial;
76791
- --tw-slashed-zero: initial;
76792
- --tw-numeric-figure: initial;
76793
- --tw-numeric-spacing: initial;
76794
- --tw-numeric-fraction: initial;
76795
76718
  --tw-shadow: 0 0 #0000;
76796
76719
  --tw-shadow-color: initial;
76797
76720
  --tw-shadow-alpha: 100%;
@@ -76847,9 +76770,9 @@ async function generateBasePdf(data) {
76847
76770
  },
76848
76771
  ...data.paragraph.map((it, idx) => ({
76849
76772
  html: renderSegment({ ...it, abstract: idx === 0 ? data.abstract : "" }),
76850
- headerTitle: data.header,
76851
- footerTitle: data.footer
76773
+ headerTitle: data.header
76852
76774
  })),
76775
+ // 暂时先不要
76853
76776
  // data.reference && {
76854
76777
  // html: renderReference(data),
76855
76778
  // headerTitle: data.header,
@@ -76890,10 +76813,8 @@ const basePdfSchema = {
76890
76813
  time: zod.z.string().describe("生成时间"),
76891
76814
  abstract: zod.z.string().describe("报告摘要"),
76892
76815
  header: zod.z.string().describe("报告页眉内容"),
76893
- footer: zod.z.string().describe("报告页脚内容"),
76894
76816
  reference: zod.z.string().describe("报告引用"),
76895
- paragraph: zod.z.array(paragraph).describe("报告内容"),
76896
- disclaimer: zod.z.string().optional().describe("ai生成声明")
76817
+ paragraph: zod.z.array(paragraph).describe("报告内容")
76897
76818
  };
76898
76819
  zod.z.object({
76899
76820
  ...basePdfSchema
@@ -76967,11 +76888,6 @@ function getDateString() {
76967
76888
  const minu = date.getMinutes();
76968
76889
  return `${month}_${d}_${h2}_${minu}`;
76969
76890
  }
76970
- require("https");
76971
- require("http");
76972
- const fsPromise = require("fs/promises");
76973
- const path = require("path");
76974
- const url = require("url");
76975
76891
  const isLocalPath = (inputPath) => {
76976
76892
  if (typeof inputPath !== "string" || inputPath.trim() === "") {
76977
76893
  return false;
@@ -76991,7 +76907,7 @@ const isLocalPath = (inputPath) => {
76991
76907
  }
76992
76908
  } catch (err) {
76993
76909
  }
76994
- const resolvedPath = path.resolve(normalizedPath);
76910
+ const resolvedPath = path$2.resolve(normalizedPath);
76995
76911
  const isWindowsLocal = process.platform === "win32" && /^[a-zA-Z]:[\\/]/i.test(resolvedPath);
76996
76912
  const isUnixLocal = (process.platform === "linux" || process.platform === "darwin") && resolvedPath.startsWith("/");
76997
76913
  return isWindowsLocal || isUnixLocal || normalizedPath.startsWith("./") || normalizedPath.startsWith("../");
@@ -77001,7 +76917,7 @@ const localImageToBase64 = async (imagePath) => {
77001
76917
  if (!imagePath) {
77002
76918
  return null;
77003
76919
  }
77004
- const buffer = await fsPromise.readFile(imagePath);
76920
+ const buffer = await fsPromises.readFile(imagePath);
77005
76921
  const mimeType = require("mime-types").lookup(imagePath) || "image/jpeg";
77006
76922
  return {
77007
76923
  mimeType,
@@ -77021,26 +76937,19 @@ const extractAllImageSrc = (html2) => {
77021
76937
  if (!match[1].startsWith("data:image/")) {
77022
76938
  logger.info("extractAllImageSrc match[0]:" + match[0], match[1]);
77023
76939
  logger.info("extractAllImageSrc match[1]:" + match[1]);
77024
- }
77025
- const decodedSrc = decodeURIComponent(match[1]);
77026
- if (isLocalPath(decodedSrc)) {
77027
- srcs.push({
77028
- src: decodedSrc,
77029
- originSrc: match[1]
77030
- });
76940
+ const decodedSrc = decodeURIComponent(match[1]);
76941
+ if (isLocalPath(decodedSrc)) {
76942
+ srcs.push({
76943
+ src: decodedSrc,
76944
+ originSrc: match[1]
76945
+ });
76946
+ }
77031
76947
  }
77032
76948
  }
77033
76949
  return srcs;
77034
76950
  };
77035
76951
  const createPage = async (page, item) => {
77036
- const {
77037
- tempFileName,
77038
- headerTitle,
77039
- html: html2,
77040
- footerTitle,
77041
- hideHeader,
77042
- hideFooter
77043
- } = item;
76952
+ const { tempFileName, headerTitle, html: html2, hideHeader, hideFooter } = item;
77044
76953
  const headerTemplate = `
77045
76954
  <header style="height: 83px; position: fixed; top: 0; left: 40px; right: 40px; border-bottom: 1px solid #D4D4D4; display: flex; align-items: center;">
77046
76955
  <div style="font-size: 16px; color: #525252; font-family: SimSun, "宋体", "songti", serif;">
@@ -77055,7 +76964,7 @@ const createPage = async (page, item) => {
77055
76964
  localImageToBase64(srcInfo.src).then((fileInfo) => {
77056
76965
  resolve({
77057
76966
  ...fileInfo,
77058
- // 原本没转换的地址
76967
+ // 原本没转换的地址用来base64匹配
77059
76968
  originSrc: srcInfo.originSrc
77060
76969
  });
77061
76970
  }).catch(() => {
@@ -77084,7 +76993,7 @@ const createPage = async (page, item) => {
77084
76993
  headerTemplate: hideHeader ? "" : headerTemplate,
77085
76994
  footerTemplate: hideFooter ? "" : `
77086
76995
  <div style="width: 100%; box-sizing: border-box; height: 67px; display: flex; justify-content: space-between; font-size: 13px; padding: 0 48px; position: fixed; bottom: 0; left: 0; font-family: KaiTi, 楷体, serif;">
77087
- <div>${footerTitle}</div>
76996
+ <div>本报告由 Wujie Agent 生成</div>
77088
76997
  </div>
77089
76998
  `,
77090
76999
  margin: hideHeader && hideFooter ? void 0 : hideFooter ? {
@@ -77201,14 +77110,15 @@ const createPages = async ({
77201
77110
  const pageInfoList = [];
77202
77111
  try {
77203
77112
  for (let i = 0; i < list2.length; i++) {
77113
+ const item = list2[i];
77204
77114
  const tempFileName = `${dirname}/temp_page_${i}.pdf`;
77205
77115
  tempFiles.push(tempFileName);
77206
- const pageRes = list2[i].pdfUrl ? await loadPdf(list2[i].pdfUrl) : await createPage2(page, {
77116
+ const pageRes = item.pdfUrl ? await loadPdf(item.pdfUrl) : await createPage2(page, {
77207
77117
  tempFileName,
77208
- ...list2[i]
77118
+ ...item
77209
77119
  });
77210
77120
  pageInfoList.push({
77211
- ...list2[i],
77121
+ ...item,
77212
77122
  tempFileName,
77213
77123
  pageBytes: pageRes
77214
77124
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@8btc/office-assistant-mcp",
3
- "version": "0.0.13",
3
+ "version": "0.0.15",
4
4
  "description": "办公agent辅助mcp工具",
5
5
  "main": "dist/index.cjs",
6
6
  "type": "module",
Binary file
@@ -1 +0,0 @@
1
- <svg style="vertical-align: -2.063ex;" xmlns="http://www.w3.org/2000/svg" width="28.02ex" height="5.142ex" role="img" focusable="false" viewBox="0 -1361 12384.7 2272.9" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><path id="MJX-1-NCM-LO-222D" d="M1671 1361C1624 1361 1581 1318 1542 1233C1505 1150 1467 1000 1438 882C1365 597 1297 264 1233-117C1197-328 1168-481 1145-574C1104-745 1057-831 1005-831C985-831 968-826 954-815C983-810 997-793 997-763C997-733 975-711 945-711C910-711 892-729 892-764C892-820 949-861 1007-861C1080-861 1140-803 1187-688C1212-627 1246-509 1289-336C1362-39 1427 279 1484 617C1524 854 1560 1034 1592 1157C1621 1273 1648 1331 1672 1331C1693 1331 1710 1326 1723 1315C1693 1310 1678 1293 1678 1263C1678 1234 1701 1211 1730 1211C1765 1211 1783 1229 1783 1264C1783 1319 1729 1361 1671 1361M1252 1361C1205 1361 1163 1318 1124 1233C1105 1191 1085 1129 1062 1046C965 687 892 339 815-117C779-328 750-481 727-574C686-745 639-831 587-831C567-831 550-826 536-815C565-810 579-793 579-763C579-734 556-711 527-711C492-711 474-729 474-764C474-820 530-861 589-861C662-861 722-803 769-688C794-627 828-509 871-336C944-39 1009 279 1066 617C1106 854 1142 1034 1174 1157C1203 1273 1230 1331 1254 1331C1275 1331 1292 1326 1305 1315C1275 1310 1260 1293 1260 1263C1260 1234 1283 1211 1312 1211C1347 1211 1365 1229 1365 1264C1365 1320 1310 1361 1252 1361M834 1361C787 1361 745 1318 706 1233C669 1151 631 1001 602 882C529 597 461 264 396-117C361-328 332-481 309-574C268-745 221-831 168-831C149-831 132-826 118-815C147-810 161-793 161-763C161-734 138-711 109-711C74-711 56-729 56-764C56-820 112-861 170-861C243-861 304-803 351-688C376-627 410-509 453-336C526-39 591 279 648 617C688 854 724 1034 756 1157C785 1273 812 1331 836 1331C856 1331 873 1326 887 1315C857 1310 842 1293 842 1263C842 1233 864 1211 894 1211C929 1211 947 1229 947 1264C947 1320 892 1361 834 1361Z"></path><path id="MJX-1-NCM-I-1D449" d="M671 680C652 680 592 683 573 683C558 683 550 675 550 660C550 650 557 645 570 644C598 643 612 633 612 616C612 607 607 595 598 580L300 107L234 619C234 636 255 644 298 644C318 644 327 651 327 668C327 678 321 683 309 683C287 683 209 680 187 680C167 680 99 683 79 683C64 683 56 675 56 660C56 649 66 644 85 644C102 644 114 642 122 640C138 635 137 633 140 614L218 4C221-13 229-22 242-22C255-22 265-15 273-2L629 564C652 600 674 623 696 632C711 639 730 643 752 644C763 645 768 652 769 667C770 678 764 683 752 683C737 683 686 680 671 680Z"></path><path id="MJX-1-NCM-N-28" d="M318-248C327-248 332-243 332-234C332-231 330-227 327-223C275-183 233-117 202-26C175 53 161 131 161 208L161 292C161 369 175 447 202 526C233 617 275 683 327 723C330 726 332 730 332 734C332 743 327 748 318 748C317 748 314 747 311 745C251 699 201 631 160 540C121 453 101 371 101 292L101 208C101 129 121 47 160-40C201-131 251-199 311-245C314-247 317-248 318-248Z"></path><path id="MJX-1-NCM-N-2207" d="M780 657C783 664 785 669 785 671C785 679 776 683 759 683L73 683C56 683 47 679 47 670L387-13C394-26 403-33 416-33C429-33 438-26 445-13M445 72L179 605L710 605Z"></path><path id="MJX-1-NCM-N-22C5" d="M192 250C192 279 168 303 139 303C110 303 86 279 86 250C86 221 110 197 139 197C168 197 192 221 192 250Z"></path><path id="MJX-1-NCM-B-1D405" d="M675 439L644 680L39 680L39 633L147 633L147 47L39 47L39 0C77 3 178 3 222 3C271 3 380 3 424 0L424 47L289 47L289 317L339 317C435 317 444 274 444 200L491 200L491 481L444 481C444 407 436 364 339 364L289 364L289 633L429 633C590 633 613 556 628 439Z"></path><path id="MJX-1-NCM-N-29" d="M78-245C138-199 188-131 229-40C268 47 288 129 288 208L288 292C288 371 268 453 229 540C188 631 138 699 78 745C75 747 72 748 71 748C62 748 57 743 57 734C57 730 59 726 62 723C114 683 156 617 187 526C214 447 228 369 228 292L228 208C228 131 214 53 187-26C156-117 114-183 62-223C59-227 57-231 57-234C57-243 62-248 71-248C72-248 75-247 78-245Z"></path><path id="MJX-1-NCM-I-1D451" d="M429 632L370 389C349 426 320 445 281 445C216 445 159 412 109 345C63 283 40 218 40 151C40 63 91-11 175-11C218-11 260 12 300 59C311 21 345-11 392-11C461-11 483 71 498 145C498 154 493 159 483 159C474 159 468 152 465 138C445 59 421 19 394 19C377 19 368 33 368 60C368 75 370 91 374 107L516 679L516 683C513 690 507 694 499 694C476 694 434 690 374 683C363 682 357 674 357 660C357 650 366 645 384 645C403 645 429 646 429 632M341 376C351 355 356 341 356 332C355 328 354 323 353 316L304 122C301 111 294 99 285 87C248 42 212 19 177 19C138 19 118 49 118 108C118 132 124 168 136 216C157 301 187 359 224 390C244 407 263 415 282 415C309 415 329 402 341 376Z"></path><path id="MJX-1-NCM-N-3D" d="M698 367L80 367C64 367 56 359 56 344C56 329 64 321 80 321L698 321C714 321 722 329 722 344C722 356 711 367 698 367M698 179L80 179C64 179 56 171 56 156C56 141 64 133 80 133L698 133C714 133 722 141 722 156C722 169 711 179 698 179Z"></path><path id="MJX-1-NCM-LO-222F" d="M1251 1361C1204 1361 1162 1318 1123 1233C1105 1193 1084 1131 1061 1046C1027 922 986 750 938 530C871 547 802 556 731 556C698 556 667 554 636 551L647 617C685 846 721 1026 755 1157C784 1273 811 1331 835 1331C855 1331 872 1326 885 1315C856 1310 841 1293 841 1263C841 1233 863 1211 893 1211C928 1211 946 1229 946 1264C946 1320 891 1361 833 1361C786 1361 744 1318 705 1233C688 1194 667 1131 644 1046C609 919 568 747 521 529C384 493 217 398 217 250C217 133 323 52 417 9L396-117C359-332 330-484 309-574C268-745 221-831 168-831C149-831 132-826 117-815C146-810 160-793 160-763C160-734 138-711 109-711C74-711 56-729 56-764C56-820 112-861 170-861C243-861 304-803 351-688C382-613 415-496 452-336L523-30C590-47 659-56 731-56C763-56 794-54 824-51L813-117C780-320 751-473 726-574C685-745 638-831 586-831C566-831 549-826 535-815C564-810 578-793 578-763C578-733 556-711 526-711C491-711 473-729 473-764C473-820 530-861 588-861C661-861 721-803 768-688C799-614 833-497 870-336L941-29C1077 7 1245 103 1245 250C1245 367 1137 448 1043 492L1065 617C1146 1093 1209 1331 1253 1331C1273 1331 1290 1326 1303 1315C1274 1310 1259 1293 1259 1263C1259 1234 1281 1211 1310 1211C1345 1211 1363 1229 1363 1264C1363 1319 1309 1361 1251 1361M953 29L1034 440C1139 390 1191 327 1191 250C1191 133 1060 61 953 29M731 502C800 502 866 494 927 478L835 4C804 0 769-2 731-2C662-2 597 6 534 22L626 496C657 500 692 502 731 502M508 471L427 59C323 110 271 173 271 250C271 368 401 439 508 471Z"></path><path id="MJX-1-NCM-I-1D446" d="M133 157C133 181 136 201 141 217C141 227 136 232 125 232C120 232 116 230 114 228C109 223 52 8 52-8C52-17 57-22 67-22C72-22 79-17 88-6L133 47C168 1 224-22 300-22C366-22 424 5 476 58C528 111 554 170 554 236C554 283 538 323 505 355C490 368 470 379 445 388C422 393 400 399 378 405L312 423C279 432 254 469 254 509C254 552 271 589 306 621C341 653 380 669 423 669C515 669 561 619 561 520C561 502 557 482 557 465L557 462C560 455 565 451 573 451C582 451 588 459 592 474L645 691C645 700 640 705 630 705C625 705 618 700 609 689L566 637C538 682 491 705 424 705C361 705 304 681 254 634C202 586 176 531 176 468C176 396 223 339 282 323L387 296C441 281 475 262 475 195C475 149 457 108 422 72C387 36 347 17 302 17C204 17 133 60 133 157Z"></path><path id="MJX-1-NCM-B-1D412" d="M574 203C574 314 493 395 402 414L257 445C217 454 161 488 161 549C161 592 189 654 289 654C369 654 470 620 493 484C497 460 497 458 518 458C542 458 542 463 542 486L542 669C542 688 542 697 524 697C516 697 515 696 504 686L459 642C401 688 336 697 288 697C136 697 64 601 64 496C64 431 97 385 118 363C167 314 201 307 310 283C398 264 415 261 437 240C452 225 477 199 477 153C477 105 451 36 347 36C271 36 119 56 111 205C110 223 110 228 88 228C64 228 64 222 64 199L64 17C64-2 64-11 82-11C91-11 93-9 101-2L147 44C213-5 306-11 347-11C512-11 574 102 574 203Z"></path></defs><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math" data-latex="\iiint_V (\nabla \cdot \mathbf{F}) \, dV = \oiint_S \mathbf{F} \cdot d\mathbf{S}"><g data-mml-node="msub" data-latex="\iiint_V"><g data-mml-node="mo" data-latex="\iiint"><use data-c="222D" xlink:href="#MJX-1-NCM-LO-222D"></use></g><g data-mml-node="mi" transform="translate(1542,-896.4) scale(0.707)" data-latex="V"><use data-c="1D449" xlink:href="#MJX-1-NCM-I-1D449"></use></g></g><g data-mml-node="mo" data-latex="(" transform="translate(2136.5,0)"><use data-c="28" xlink:href="#MJX-1-NCM-N-28"></use></g><g data-mml-node="mi" data-latex="\nabla" transform="translate(2525.5,0)"><use data-c="2207" xlink:href="#MJX-1-NCM-N-2207"></use></g><g data-mml-node="mo" data-latex="\cdot" transform="translate(3580.7,0)"><use data-c="22C5" xlink:href="#MJX-1-NCM-N-22C5"></use></g><g data-mml-node="TeXAtom" data-latex="\mathbf{F}" data-mjx-texclass="ORD" transform="translate(4080.9,0)"><g data-mml-node="mi" data-latex="F"><use data-c="1D405" xlink:href="#MJX-1-NCM-B-1D405"></use></g></g><g data-mml-node="mo" data-latex=")" transform="translate(4804.9,0)"><use data-c="29" xlink:href="#MJX-1-NCM-N-29"></use></g><g data-mml-node="mspace" data-latex="\," transform="translate(5193.9,0)"></g><g data-mml-node="mi" data-latex="d" transform="translate(5360.9,0)"><use data-c="1D451" xlink:href="#MJX-1-NCM-I-1D451"></use></g><g data-mml-node="mi" data-latex="V" transform="translate(5880.9,0)"><use data-c="1D449" xlink:href="#MJX-1-NCM-I-1D449"></use></g><g data-mml-node="mo" data-latex="=" transform="translate(6928.7,0)"><use data-c="3D" xlink:href="#MJX-1-NCM-N-3D"></use></g><g data-mml-node="msub" data-latex="\oiint_S" transform="translate(7984.5,0)"><g data-mml-node="mo" data-latex="\oiint"><use data-c="222F" xlink:href="#MJX-1-NCM-LO-222F"></use></g><g data-mml-node="mi" transform="translate(1122,-896.4) scale(0.707)" data-latex="S"><use data-c="1D446" xlink:href="#MJX-1-NCM-I-1D446"></use></g></g><g data-mml-node="TeXAtom" data-latex="\mathbf{F}" data-mjx-texclass="ORD" transform="translate(9779.2,0)"><g data-mml-node="mi" data-latex="F"><use data-c="1D405" xlink:href="#MJX-1-NCM-B-1D405"></use></g></g><g data-mml-node="mo" data-latex="\cdot" transform="translate(10725.4,0)"><use data-c="22C5" xlink:href="#MJX-1-NCM-N-22C5"></use></g><g data-mml-node="mi" data-latex="d" transform="translate(11225.7,0)"><use data-c="1D451" xlink:href="#MJX-1-NCM-I-1D451"></use></g><g data-mml-node="TeXAtom" data-latex="\mathbf{S}" data-mjx-texclass="ORD" transform="translate(11745.7,0)"><g data-mml-node="mi" data-latex="S"><use data-c="1D412" xlink:href="#MJX-1-NCM-B-1D412"></use></g></g></g></g></svg>