w-flowchart 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (135) hide show
  1. package/.editorconfig +9 -0
  2. package/.eslintignore +3 -0
  3. package/.eslintrc.js +55 -0
  4. package/.jsdoc +25 -0
  5. package/LICENSE +21 -0
  6. package/README.md +49 -0
  7. package/SECURITY.md +5 -0
  8. package/babel.config.js +16 -0
  9. package/dist/w-flowchart.umd.js +7 -0
  10. package/dist/w-flowchart.umd.js.map +1 -0
  11. package/docs/fonts/Montserrat/Montserrat-Bold.eot +0 -0
  12. package/docs/fonts/Montserrat/Montserrat-Bold.ttf +0 -0
  13. package/docs/fonts/Montserrat/Montserrat-Bold.woff +0 -0
  14. package/docs/fonts/Montserrat/Montserrat-Bold.woff2 +0 -0
  15. package/docs/fonts/Montserrat/Montserrat-Regular.eot +0 -0
  16. package/docs/fonts/Montserrat/Montserrat-Regular.ttf +0 -0
  17. package/docs/fonts/Montserrat/Montserrat-Regular.woff +0 -0
  18. package/docs/fonts/Montserrat/Montserrat-Regular.woff2 +0 -0
  19. package/docs/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.eot +0 -0
  20. package/docs/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.svg +978 -0
  21. package/docs/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.ttf +0 -0
  22. package/docs/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.woff +0 -0
  23. package/docs/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.woff2 +0 -0
  24. package/docs/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.eot +0 -0
  25. package/docs/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.svg +1049 -0
  26. package/docs/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.ttf +0 -0
  27. package/docs/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.woff +0 -0
  28. package/docs/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.woff2 +0 -0
  29. package/docs/index.html +84 -0
  30. package/docs/scripts/collapse.js +39 -0
  31. package/docs/scripts/commonNav.js +28 -0
  32. package/docs/scripts/linenumber.js +25 -0
  33. package/docs/scripts/nav.js +12 -0
  34. package/docs/scripts/polyfill.js +4 -0
  35. package/docs/scripts/prettify/Apache-License-2.0.txt +202 -0
  36. package/docs/scripts/prettify/lang-css.js +2 -0
  37. package/docs/scripts/prettify/prettify.js +28 -0
  38. package/docs/scripts/search.js +99 -0
  39. package/docs/styles/jsdoc.css +776 -0
  40. package/docs/styles/prettify.css +80 -0
  41. package/package.json +49 -0
  42. package/script.txt +17 -0
  43. package/src/WFlowchart.mjs +0 -0
  44. package/src/common/derive.mjs +7 -0
  45. package/src/common/palette.mjs +34 -0
  46. package/src/common/pkg.mjs +31 -0
  47. package/src/p1/README.md +65 -0
  48. package/src/p1/gen.mjs +203 -0
  49. package/src/p10/README.md +31 -0
  50. package/src/p10/gen.mjs +228 -0
  51. package/src/p2/README.md +87 -0
  52. package/src/p2/gen.mjs +210 -0
  53. package/src/p3/README.md +99 -0
  54. package/src/p3/gen.mjs +188 -0
  55. package/src/p4/README.md +84 -0
  56. package/src/p4/gen.mjs +82 -0
  57. package/src/p5/README.md +90 -0
  58. package/src/p5/gen.mjs +182 -0
  59. package/src/p6/README.md +87 -0
  60. package/src/p6/gen.mjs +186 -0
  61. package/src/p7/README.md +84 -0
  62. package/src/p7/gen.mjs +386 -0
  63. package/src/p8/README.md +92 -0
  64. package/src/p8/gen.mjs +416 -0
  65. package/src/p9/README.md +90 -0
  66. package/src/p9/gen.mjs +63 -0
  67. package/src/p9/page9.html +420 -0
  68. package/test/cases.mjs +349 -0
  69. package/test/data//344/275/234/346/245/255/346/265/201/347/250/213/345/234/226.json +92 -0
  70. package/test/data//345/211/215/347/253/257/346/236/266/346/247/213/350/210/207/350/263/207/346/226/231/346/265/201/345/234/226.json +112 -0
  71. package/test/data//345/276/214/347/253/257/346/234/215/345/213/231/347/265/204/346/210/220/345/234/226.json +116 -0
  72. package/test/data//346/211/271/346/254/241/344/270/212/345/202/263/350/231/225/347/220/206/346/265/201/347/250/213/345/234/226.json +251 -0
  73. package/test/data//347/250/213/345/274/217/345/205/203/344/273/266/347/265/204/346/210/220/345/234/226.json +126 -0
  74. package/test/data//347/250/213/345/274/217/345/210/206/345/261/244/346/236/266/346/247/213/345/234/226.json +133 -0
  75. package/test/data//347/263/273/347/265/261/346/236/266/346/247/213/345/234/226.json +102 -0
  76. package/test/data//347/263/273/347/265/261/351/227/234/350/201/257/345/234/226.json +117 -0
  77. package/test/data//347/267/232/344/270/212/347/225/253/351/235/242/351/227/234/350/201/257/345/234/226.json +162 -0
  78. package/test/figures.mjs +10 -0
  79. package/test/lib.mjs +116 -0
  80. package/test/p10.test.mjs +89 -0
  81. package/test/pics/cycle.png +0 -0
  82. package/test/pics/cycle.svg +1 -0
  83. package/test/pics/deep-nest.png +0 -0
  84. package/test/pics/deep-nest.svg +1 -0
  85. package/test/pics/diamond.png +0 -0
  86. package/test/pics/diamond.svg +1 -0
  87. package/test/pics/edges-mix.png +0 -0
  88. package/test/pics/edges-mix.svg +1 -0
  89. package/test/pics/english.png +0 -0
  90. package/test/pics/english.svg +1 -0
  91. package/test/pics/flat-tb.png +0 -0
  92. package/test/pics/flat-tb.svg +1 -0
  93. package/test/pics/fold-tall.png +0 -0
  94. package/test/pics/fold-tall.svg +1 -0
  95. package/test/pics/fold-wide.png +0 -0
  96. package/test/pics/fold-wide.svg +1 -0
  97. package/test/pics/group-edge.png +0 -0
  98. package/test/pics/group-edge.svg +1 -0
  99. package/test/pics/items-node.png +0 -0
  100. package/test/pics/items-node.svg +1 -0
  101. package/test/pics/long-label.png +0 -0
  102. package/test/pics/long-label.svg +1 -0
  103. package/test/pics/lr-flat.png +0 -0
  104. package/test/pics/lr-flat.svg +1 -0
  105. package/test/pics/nested-group.png +0 -0
  106. package/test/pics/nested-group.svg +1 -0
  107. package/test/pics/no-edges.png +0 -0
  108. package/test/pics/no-edges.svg +1 -0
  109. package/test/pics/title-overflow.png +0 -0
  110. package/test/pics/title-overflow.svg +1 -0
  111. package/test/pics/valign.png +0 -0
  112. package/test/pics/valign.svg +1 -0
  113. package/test/pics//344/275/234/346/245/255/346/265/201/347/250/213/345/234/226.png +0 -0
  114. package/test/pics//344/275/234/346/245/255/346/265/201/347/250/213/345/234/226.svg +1 -0
  115. package/test/pics//345/211/215/347/253/257/346/236/266/346/247/213/350/210/207/350/263/207/346/226/231/346/265/201/345/234/226.png +0 -0
  116. package/test/pics//345/211/215/347/253/257/346/236/266/346/247/213/350/210/207/350/263/207/346/226/231/346/265/201/345/234/226.svg +1 -0
  117. package/test/pics//345/276/214/347/253/257/346/234/215/345/213/231/347/265/204/346/210/220/345/234/226.png +0 -0
  118. package/test/pics//345/276/214/347/253/257/346/234/215/345/213/231/347/265/204/346/210/220/345/234/226.svg +1 -0
  119. package/test/pics//346/211/271/346/254/241/344/270/212/345/202/263/350/231/225/347/220/206/346/265/201/347/250/213/345/234/226.png +0 -0
  120. package/test/pics//346/211/271/346/254/241/344/270/212/345/202/263/350/231/225/347/220/206/346/265/201/347/250/213/345/234/226.svg +1 -0
  121. package/test/pics//347/250/213/345/274/217/345/205/203/344/273/266/347/265/204/346/210/220/345/234/226.png +0 -0
  122. package/test/pics//347/250/213/345/274/217/345/205/203/344/273/266/347/265/204/346/210/220/345/234/226.svg +1 -0
  123. package/test/pics//347/250/213/345/274/217/345/210/206/345/261/244/346/236/266/346/247/213/345/234/226.png +0 -0
  124. package/test/pics//347/250/213/345/274/217/345/210/206/345/261/244/346/236/266/346/247/213/345/234/226.svg +1 -0
  125. package/test/pics//347/263/273/347/265/261/346/236/266/346/247/213/345/234/226.png +0 -0
  126. package/test/pics//347/263/273/347/265/261/346/236/266/346/247/213/345/234/226.svg +1 -0
  127. package/test/pics//347/263/273/347/265/261/351/227/234/350/201/257/345/234/226.png +0 -0
  128. package/test/pics//347/263/273/347/265/261/351/227/234/350/201/257/345/234/226.svg +1 -0
  129. package/test/pics//347/267/232/344/270/212/347/225/253/351/235/242/351/227/234/350/201/257/345/234/226.png +0 -0
  130. package/test/pics//347/267/232/344/270/212/347/225/253/351/235/242/351/227/234/350/201/257/345/234/226.svg +1 -0
  131. package/test/wflowchart.test.mjs +41 -0
  132. package/toolg/addVersion.mjs +4 -0
  133. package/toolg/cleanFolder.mjs +4 -0
  134. package/toolg/gDistRollup.mjs +51 -0
  135. package/toolg/modifyReadme.mjs +4 -0
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="284" height="205" viewBox="-18 -18 284 205" style="background:#fff"><path d="M 124 87 L 124 121" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 124 121 L 128 112 L 120 112 Z" fill="#44505a"></path><rect x="12" y="12" width="224" height="75" rx="7" fill="#f4f0fa" stroke="#8163ad" stroke-width="1.6"></rect><foreignObject x="12" y="12" width="224" height="75"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-size:14px;color:#23303a;line-height:1.4;padding:0 4px;box-sizing:border-box">這是一段非常非常長的節點標籤文字用於驗證自動折行機制與框寬上限行為</div></foreignObject><rect x="98" y="121" width="52" height="36" rx="7" fill="#eef4fb" stroke="#3f6fb0" stroke-width="1.6"></rect><foreignObject x="98" y="121" width="52" height="36"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-size:14px;color:#1c2b36;line-height:1.4;padding:0 4px;box-sizing:border-box">下游</div></foreignObject></svg>
Binary file
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="444" height="152" viewBox="-18 -18 444 152" style="background:#fff"><rect x="109" y="12" width="190" height="92" rx="8" fill="#f0f7f3" fill-opacity="0.38" stroke="#348a5c" stroke-width="2"></rect><foreignObject x="162" y="17" width="84" height="33"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="text-align:center;font-weight:bold;font-size:15px;color:#348a5c;line-height:1.3">處理群組</div></foreignObject><path d="M 189 72 L 219 72" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 219 72 L 210 68 L 210 76 Z" fill="#44505a"></path><path d="M 64 72 L 123 72" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 123 72 L 114 68 L 114 76 Z" fill="#44505a"></path><path d="M 285 72 L 344 72" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 344 72 L 335 68 L 335 76 Z" fill="#44505a"></path><rect x="123" y="54" width="66" height="36" rx="7" fill="#eaf4ef" stroke="#348a5c" stroke-width="1.6"></rect><foreignObject x="123" y="54" width="66" height="36"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-size:14px;color:#1c2b36;line-height:1.4;padding:0 4px;box-sizing:border-box">處理一</div></foreignObject><rect x="219" y="54" width="66" height="36" rx="7" fill="#eaf4ef" stroke="#348a5c" stroke-width="1.6"></rect><foreignObject x="219" y="54" width="66" height="36"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-size:14px;color:#1c2b36;line-height:1.4;padding:0 4px;box-sizing:border-box">處理二</div></foreignObject><rect x="12" y="54" width="52" height="36" rx="7" fill="#eef4fb" stroke="#3f6fb0" stroke-width="1.6"></rect><foreignObject x="12" y="54" width="52" height="36"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-size:14px;color:#1c2b36;line-height:1.4;padding:0 4px;box-sizing:border-box">入口</div></foreignObject><rect x="344" y="54" width="52" height="36" rx="7" fill="#fcf0e2" stroke="#c46e1a" stroke-width="1.6"></rect><foreignObject x="344" y="54" width="52" height="36"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-size:14px;color:#1c2b36;line-height:1.4;padding:0 4px;box-sizing:border-box">出口</div></foreignObject></svg>
Binary file
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="175" height="466" viewBox="-18 -18 175 466" style="background:#fff"><rect x="12" y="12" width="114.5" height="406" rx="8" fill="#f5f9fe" fill-opacity="0.38" stroke="#3f6fb0" stroke-width="2"></rect><foreignObject x="27.25" y="17" width="84" height="33"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="text-align:center;font-weight:bold;font-size:15px;color:#3f6fb0;line-height:1.3">外層容器</div></foreignObject><rect x="26" y="54" width="72" height="158" rx="8" fill="#f0f7f3" fill-opacity="0.38" stroke="#348a5c" stroke-width="2"></rect><foreignObject x="27.5" y="59" width="69" height="33"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="text-align:center;font-weight:bold;font-size:15px;color:#348a5c;line-height:1.3">內層 A</div></foreignObject><rect x="53.5" y="312" width="59" height="92" rx="8" fill="#f0f7f3" fill-opacity="0.38" stroke="#348a5c" stroke-width="2"></rect><foreignObject x="53.5" y="317" width="67" height="33"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="text-align:center;font-weight:bold;font-size:15px;color:#348a5c;line-height:1.3">內層 B</div></foreignObject><path d="M 56.5 132 L 56.5 162" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 56.5 162 L 60.5 153 L 52.5 153 Z" fill="#44505a"></path><path d="M 67.16666666666666 132 L 67.16666666666666 150 L 83 150 L 83 354" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 83 354 L 87 345 L 79 345 Z" fill="#44505a"></path><foreignObject x="56" y="253" width="31" height="22"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="font-size:12.5px;color:#4a5560;text-shadow:0 0 3px #ffffff,0 0 3px #ffffff,0 0 3px #ffffff,0 0 3px #ffffff;white-space:nowrap">跨層</div></foreignObject><rect x="45.833333333333336" y="96" width="32" height="36" rx="7" fill="#eaf4ef" stroke="#348a5c" stroke-width="1.6"></rect><foreignObject x="45.833333333333336" y="96" width="32" height="36"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-size:14px;color:#1c2b36;line-height:1.4;padding:0 4px;box-sizing:border-box">a</div></foreignObject><rect x="40" y="162" width="33" height="36" rx="7" fill="#eaf4ef" stroke="#348a5c" stroke-width="1.6"></rect><foreignObject x="40" y="162" width="33" height="36"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-size:14px;color:#1c2b36;line-height:1.4;padding:0 4px;box-sizing:border-box">b</div></foreignObject><rect x="67.5" y="354" width="31" height="36" rx="7" fill="#eaf4ef" stroke="#348a5c" stroke-width="1.6"></rect><foreignObject x="67.5" y="354" width="31" height="36"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-size:14px;color:#1c2b36;line-height:1.4;padding:0 4px;box-sizing:border-box">c</div></foreignObject></svg>
Binary file
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="302" height="152" viewBox="-18 -18 302 152" style="background:#fff"><rect x="12" y="12" width="132" height="92" rx="8" fill="#f0f7f3" fill-opacity="0.38" stroke="#348a5c" stroke-width="2"></rect><foreignObject x="51" y="17" width="54" height="33"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="text-align:center;font-weight:bold;font-size:15px;color:#348a5c;line-height:1.3">群組</div></foreignObject><rect x="26" y="54" width="38" height="36" rx="7" fill="#eaf4ef" stroke="#348a5c" stroke-width="1.6"></rect><foreignObject x="26" y="54" width="38" height="36"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-size:14px;color:#1c2b36;line-height:1.4;padding:0 4px;box-sizing:border-box">甲</div></foreignObject><rect x="92" y="54" width="38" height="36" rx="7" fill="#eaf4ef" stroke="#348a5c" stroke-width="1.6"></rect><foreignObject x="92" y="54" width="38" height="36"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-size:14px;color:#1c2b36;line-height:1.4;padding:0 4px;box-sizing:border-box">乙</div></foreignObject><rect x="174" y="12" width="80" height="36" rx="7" fill="#eef4fb" stroke="#3f6fb0" stroke-width="1.6"></rect><foreignObject x="174" y="12" width="80" height="36"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-size:14px;color:#1c2b36;line-height:1.4;padding:0 4px;box-sizing:border-box">獨立節點</div></foreignObject></svg>
Binary file
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="384" height="218" viewBox="-18 -18 384 218" style="background:#fff"><rect x="12" y="12" width="324" height="158" rx="8" fill="#faf7fd" fill-opacity="0.38" stroke="#8163ad" stroke-width="2"></rect><foreignObject x="12" y="17" width="324" height="33"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="text-align:center;font-weight:bold;font-size:15px;color:#8163ad;line-height:1.3">這是一個相當長的容器標題用於測試自動撐寬</div></foreignObject><path d="M 174 90 L 174 120" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 174 120 L 178 111 L 170 111 Z" fill="#44505a"></path><rect x="155" y="54" width="38" height="36" rx="7" fill="#f4f0fa" stroke="#8163ad" stroke-width="1.6"></rect><foreignObject x="155" y="54" width="38" height="36"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-size:14px;color:#23303a;line-height:1.4;padding:0 4px;box-sizing:border-box">短</div></foreignObject><rect x="157" y="120" width="34" height="36" rx="7" fill="#f4f0fa" stroke="#8163ad" stroke-width="1.6"></rect><foreignObject x="157" y="120" width="34" height="36"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-size:14px;color:#23303a;line-height:1.4;padding:0 4px;box-sizing:border-box">A</div></foreignObject></svg>
Binary file
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="576" height="259" viewBox="-18 -18 576 259" style="background:#fff"><rect x="12" y="12" width="152" height="199" rx="8" fill="#f5f9fe" fill-opacity="0.38" stroke="#3f6fb0" stroke-width="2"></rect><foreignObject x="46.5" y="17" width="83" height="33"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="text-align:center;font-weight:bold;font-size:15px;color:#3f6fb0;line-height:1.3">top 對齊</div></foreignObject><rect x="194" y="12" width="152" height="199" rx="8" fill="#f5f9fe" fill-opacity="0.38" stroke="#3f6fb0" stroke-width="2"></rect><foreignObject x="218.5" y="17" width="103" height="33"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="text-align:center;font-weight:bold;font-size:15px;color:#3f6fb0;line-height:1.3">center 對齊</div></foreignObject><rect x="376" y="12" width="152" height="199" rx="8" fill="#f5f9fe" fill-opacity="0.38" stroke="#3f6fb0" stroke-width="2"></rect><foreignObject x="396.5" y="17" width="111" height="33"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="text-align:center;font-weight:bold;font-size:15px;color:#3f6fb0;line-height:1.3">bottom 對齊</div></foreignObject><rect x="26" y="54" width="58" height="143" rx="7" fill="#eef4fb"></rect><path d="M 33 54 H 77 A 7 7 0 0 1 84 61 V 86 H 26 V 61 A 7 7 0 0 1 33 54 Z" fill="#d2dfef"></path><rect x="26" y="54" width="58" height="143" rx="7" fill="none" stroke="#3f6fb0" stroke-width="1.6"></rect><line x1="26" y1="86" x2="84" y2="86" stroke="#3f6fb0" stroke-width="1"></line><foreignObject x="26" y="54" width="58" height="32"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-weight:bold;font-size:14px;color:#1c2b36">高框</div></foreignObject><foreignObject x="26" y="86" width="58" height="111"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="font-size:13px;line-height:1.55;padding:6px 9px 4px;text-align:left;color:#1c2b36"><div style="white-space:nowrap">•&nbsp;一</div><div style="white-space:nowrap">•&nbsp;二</div><div style="white-space:nowrap">•&nbsp;三</div><div style="white-space:nowrap">•&nbsp;四</div><div style="white-space:nowrap">•&nbsp;五</div></div></foreignObject><rect x="112" y="54" width="38" height="36" rx="7" fill="#eaf4ef" stroke="#348a5c" stroke-width="1.6"></rect><foreignObject x="112" y="54" width="38" height="36"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-size:14px;color:#1c2b36;line-height:1.4;padding:0 4px;box-sizing:border-box">矮</div></foreignObject><rect x="208" y="54" width="58" height="143" rx="7" fill="#eef4fb"></rect><path d="M 215 54 H 259 A 7 7 0 0 1 266 61 V 86 H 208 V 61 A 7 7 0 0 1 215 54 Z" fill="#d2dfef"></path><rect x="208" y="54" width="58" height="143" rx="7" fill="none" stroke="#3f6fb0" stroke-width="1.6"></rect><line x1="208" y1="86" x2="266" y2="86" stroke="#3f6fb0" stroke-width="1"></line><foreignObject x="208" y="54" width="58" height="32"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-weight:bold;font-size:14px;color:#1c2b36">高框</div></foreignObject><foreignObject x="208" y="86" width="58" height="111"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="font-size:13px;line-height:1.55;padding:6px 9px 4px;text-align:left;color:#1c2b36"><div style="white-space:nowrap">•&nbsp;一</div><div style="white-space:nowrap">•&nbsp;二</div><div style="white-space:nowrap">•&nbsp;三</div><div style="white-space:nowrap">•&nbsp;四</div><div style="white-space:nowrap">•&nbsp;五</div></div></foreignObject><rect x="294" y="107.5" width="38" height="36" rx="7" fill="#eaf4ef" stroke="#348a5c" stroke-width="1.6"></rect><foreignObject x="294" y="107.5" width="38" height="36"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-size:14px;color:#1c2b36;line-height:1.4;padding:0 4px;box-sizing:border-box">矮</div></foreignObject><rect x="390" y="54" width="58" height="143" rx="7" fill="#eef4fb"></rect><path d="M 397 54 H 441 A 7 7 0 0 1 448 61 V 86 H 390 V 61 A 7 7 0 0 1 397 54 Z" fill="#d2dfef"></path><rect x="390" y="54" width="58" height="143" rx="7" fill="none" stroke="#3f6fb0" stroke-width="1.6"></rect><line x1="390" y1="86" x2="448" y2="86" stroke="#3f6fb0" stroke-width="1"></line><foreignObject x="390" y="54" width="58" height="32"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-weight:bold;font-size:14px;color:#1c2b36">高框</div></foreignObject><foreignObject x="390" y="86" width="58" height="111"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="font-size:13px;line-height:1.55;padding:6px 9px 4px;text-align:left;color:#1c2b36"><div style="white-space:nowrap">•&nbsp;一</div><div style="white-space:nowrap">•&nbsp;二</div><div style="white-space:nowrap">•&nbsp;三</div><div style="white-space:nowrap">•&nbsp;四</div><div style="white-space:nowrap">•&nbsp;五</div></div></foreignObject><rect x="476" y="161" width="38" height="36" rx="7" fill="#eaf4ef" stroke="#348a5c" stroke-width="1.6"></rect><foreignObject x="476" y="161" width="38" height="36"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-size:14px;color:#1c2b36;line-height:1.4;padding:0 4px;box-sizing:border-box">矮</div></foreignObject></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="235" height="911" viewBox="-18 -18 235 911" style="background:#fff"><path d="M 125.33333333333333 75 L 125.33333333333333 127" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 125.33333333333333 127 L 129.33333333333331 118 L 121.33333333333333 118 Z" fill="#44505a"></path><path d="M 125.33333333333333 163 L 125.33333333333333 197" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 125.33333333333333 197 L 129.33333333333331 188 L 121.33333333333333 188 Z" fill="#44505a"></path><path d="M 125.33333333333333 233 L 125.33333333333333 267" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 125.33333333333333 267 L 129.33333333333331 258 L 121.33333333333333 258 Z" fill="#44505a"></path><path d="M 125.33333333333333 410 L 125.33333333333333 444" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 125.33333333333333 444 L 129.33333333333331 435 L 121.33333333333333 435 Z" fill="#44505a"></path><path d="M 125.33333333333333 480 L 125.33333333333333 532" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 125.33333333333333 532 L 129.33333333333331 523 L 121.33333333333333 523 Z" fill="#44505a"></path><path d="M 102.16666666666666 671 L 102.16666666666666 757" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 102.16666666666666 757 L 106.16666666666666 748 L 98.16666666666666 748 Z" fill="#44505a"></path><foreignObject x="75.16666666666666" y="705" width="31" height="22"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="font-size:12.5px;color:#4a5560;text-shadow:0 0 3px #ffffff,0 0 3px #ffffff,0 0 3px #ffffff,0 0 3px #ffffff;white-space:nowrap">通過</div></foreignObject><path d="M 102.16666666666666 793 L 102.16666666666666 827" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 102.16666666666666 827 L 106.16666666666666 818 L 98.16666666666666 818 Z" fill="#44505a"></path><path d="M 79 532 L 79 506 L 39.33333333333333 506 L 39.33333333333333 101 L 68.66666666666666 101 L 68.66666666666666 75" fill="none" stroke="#44505a" stroke-width="2" stroke-dasharray="6 4"></path><path d="M 68.66666666666666 75 L 64.66666666666666 84 L 72.66666666666666 84 Z" fill="#44505a"></path><foreignObject x="12.333333333333329" y="206" width="31" height="22"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="font-size:12.5px;color:#4a5560;text-shadow:0 0 3px #ffffff,0 0 3px #ffffff,0 0 3px #ffffff,0 0 3px #ffffff;white-space:nowrap">退回</div></foreignObject><rect x="12" y="12" width="170" height="63" rx="7" fill="#eef4fb"></rect><path d="M 19 12 H 175 A 7 7 0 0 1 182 19 V 44 H 12 V 19 A 7 7 0 0 1 19 12 Z" fill="#d2dfef"></path><rect x="12" y="12" width="170" height="63" rx="7" fill="none" stroke="#3f6fb0" stroke-width="1.6"></rect><line x1="12" y1="44" x2="182" y2="44" stroke="#3f6fb0" stroke-width="1"></line><foreignObject x="12" y="12" width="170" height="32"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-weight:bold;font-size:14px;color:#1c2b36">執行單位產製詮釋資料</div></foreignObject><foreignObject x="12" y="44" width="170" height="31"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="font-size:13px;line-height:1.55;padding:6px 9px 4px;text-align:left;color:#1c2b36"><div style="white-space:nowrap">•&nbsp;Excel 模板+附件</div></div></foreignObject><rect x="71.33333333333333" y="127" width="108" height="36" rx="7" fill="#eef4fb" stroke="#3f6fb0" stroke-width="1.6"></rect><foreignObject x="71.33333333333333" y="127" width="108" height="36"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-size:14px;color:#1c2b36;line-height:1.4;padding:0 4px;box-sizing:border-box">上傳(分片)</div></foreignObject><rect x="78.33333333333333" y="197" width="94" height="36" rx="7" fill="#eef4fb" stroke="#3f6fb0" stroke-width="1.6"></rect><foreignObject x="78.33333333333333" y="197" width="94" height="36"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-size:14px;color:#1c2b36;line-height:1.4;padding:0 4px;box-sizing:border-box">移至批次區</div></foreignObject><rect x="64.33333333333333" y="267" width="122" height="143" rx="7" fill="#eef4fb"></rect><path d="M 71.33333333333333 267 H 179.33333333333331 A 7 7 0 0 1 186.33333333333331 274 V 299 H 64.33333333333333 V 274 A 7 7 0 0 1 71.33333333333333 267 Z" fill="#d2dfef"></path><rect x="64.33333333333333" y="267" width="122" height="143" rx="7" fill="none" stroke="#3f6fb0" stroke-width="1.6"></rect><line x1="64.33333333333333" y1="299" x2="186.33333333333331" y2="299" stroke="#3f6fb0" stroke-width="1"></line><foreignObject x="64.33333333333333" y="267" width="122" height="32"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-weight:bold;font-size:14px;color:#1c2b36">格式檢測</div></foreignObject><foreignObject x="64.33333333333333" y="299" width="122" height="111"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="font-size:13px;line-height:1.55;padding:6px 9px 4px;text-align:left;color:#1c2b36"><div style="white-space:nowrap">•&nbsp;欄位</div><div style="white-space:nowrap">•&nbsp;必填</div><div style="white-space:nowrap">•&nbsp;重複編號</div><div style="white-space:nowrap">•&nbsp;重複檔案 SHA</div><div style="white-space:nowrap">•&nbsp;引用關聯</div></div></foreignObject><rect x="71.33333333333333" y="444" width="108" height="36" rx="7" fill="#eef4fb" stroke="#3f6fb0" stroke-width="1.6"></rect><foreignObject x="71.33333333333333" y="444" width="108" height="36"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-size:14px;color:#1c2b36;line-height:1.4;padding:0 4px;box-sizing:border-box">檢測摘要報告</div></foreignObject><polygon points="102.16666666666666,532 171.66666666666666,601.5 102.16666666666666,671 32.66666666666666,601.5" fill="#fcf0e2" stroke="#c46e1a" stroke-width="1.8"></polygon><foreignObject x="32.66666666666666" y="532" width="139" height="139"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-size:14px;color:#23303a;line-height:1.4;padding:0 4px;box-sizing:border-box">管理員確認</div></foreignObject><rect x="55.16666666666666" y="757" width="94" height="36" rx="7" fill="#eaf4ef" stroke="#256046" stroke-width="1.6"></rect><foreignObject x="55.16666666666666" y="757" width="94" height="36"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-size:14px;color:#256046;line-height:1.4;padding:0 4px;box-sizing:border-box">寫入資料庫</div></foreignObject><rect x="20.166666666666657" y="827" width="164" height="36" rx="7" fill="#eaf4ef" stroke="#256046" stroke-width="1.6"></rect><foreignObject x="20.166666666666657" y="827" width="164" height="36"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-size:14px;color:#256046;line-height:1.4;padding:0 4px;box-sizing:border-box">查詢/展示/報表輸出</div></foreignObject></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="732" height="752" viewBox="-18 -18 732 752" style="background:#fff"><rect x="306.99999999999994" y="73" width="377" height="159" rx="8" fill="#f0f7f3" fill-opacity="0.38" stroke="#348a5c" stroke-width="2"></rect><foreignObject x="440.99999999999994" y="78" width="109" height="33"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="text-align:center;font-weight:bold;font-size:15px;color:#348a5c;line-height:1.3">$fapi 兩通道</div></foreignObject><path d="M 211.49999999999994 136 L 211.49999999999994 295" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 211.49999999999994 295 L 215.49999999999994 286 L 207.49999999999994 286 Z" fill="#44505a"></path><path d="M 211.49999999999994 358 L 211.49999999999994 434" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 211.49999999999994 434 L 215.49999999999994 425 L 207.49999999999994 425 Z" fill="#44505a"></path><path d="M 165.74999999999994 434 L 165.74999999999994 384 L 74.99999999999994 384 L 74.99999999999994 36 L 408.99999999999994 36 L 408.99999999999994 115" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 408.99999999999994 115 L 412.99999999999994 106 L 404.99999999999994 106 Z" fill="#44505a"></path><foreignObject x="77.99999999999994" y="143.5" width="44" height="22"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="font-size:12.5px;color:#4a5560;text-shadow:0 0 3px #ffffff,0 0 3px #ffffff,0 0 3px #ffffff,0 0 3px #ffffff;white-space:nowrap">通道一</div></foreignObject><path d="M 119.99999999999994 434 L 119.99999999999994 408 L 51.99999999999994 408 L 51.99999999999994 12 L 597.5 12 L 597.5 115" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 597.5 115 L 601.5 106 L 593.5 106 Z" fill="#44505a"></path><foreignObject x="11.999999999999943" y="143.5" width="44" height="22"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="font-size:12.5px;color:#4a5560;text-shadow:0 0 3px #ffffff,0 0 3px #ffffff,0 0 3px #ffffff,0 0 3px #ffffff;white-space:nowrap">通道二</div></foreignObject><path d="M 379.6666666666667 178 L 379.66666666666663 269 L 368.8333333333333 269 L 368.8333333333333 601" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 368.8333333333333 601 L 372.8333333333333 592 L 364.8333333333333 592 Z" fill="#44505a"></path><foreignObject x="371.8333333333333" y="456.5" width="31" height="22"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="font-size:12.5px;color:#4a5560;text-shadow:0 0 3px #ffffff,0 0 3px #ffffff,0 0 3px #ffffff,0 0 3px #ffffff;white-space:nowrap">推播</div></foreignObject><path d="M 335.49999999999994 601 L 335.49999999999994 575 L 165.74999999999994 575 L 165.74999999999994 497" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 165.74999999999994 497 L 161.74999999999994 506 L 169.74999999999994 506 Z" fill="#44505a"></path><foreignObject x="138.74999999999994" y="531" width="31" height="22"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="font-size:12.5px;color:#4a5560;text-shadow:0 0 3px #ffffff,0 0 3px #ffffff,0 0 3px #ffffff,0 0 3px #ffffff;white-space:nowrap">讀取</div></foreignObject><path d="M 438.3333333333333 178 L 438.3333333333333 295" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 438.3333333333333 295 L 442.3333333333333 286 L 434.3333333333333 286 Z" fill="#44505a"></path><path d="M 597.5 218 L 597.5 295" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 597.5 295 L 601.5 286 L 593.5 286 Z" fill="#44505a"></path><rect x="320.99999999999994" y="115" width="176" height="63" rx="7" fill="#eaf4ef"></rect><path d="M 327.99999999999994 115 H 489.99999999999994 A 7 7 0 0 1 496.99999999999994 122 V 147 H 320.99999999999994 V 122 A 7 7 0 0 1 327.99999999999994 115 Z" fill="#cde3d7"></path><rect x="320.99999999999994" y="115" width="176" height="63" rx="7" fill="none" stroke="#348a5c" stroke-width="1.6"></rect><line x1="320.99999999999994" y1="147" x2="496.99999999999994" y2="147" stroke="#348a5c" stroke-width="1"></line><foreignObject x="320.99999999999994" y="115" width="176" height="32"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-weight:bold;font-size:14px;color:#1c2b36">即時資料介接</div></foreignObject><foreignObject x="320.99999999999994" y="147" width="176" height="31"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="font-size:13px;line-height:1.55;padding:6px 9px 4px;text-align:left;color:#1c2b36"><div style="white-space:nowrap">•&nbsp;全表推播 → Vuex Store</div></div></foreignObject><rect x="525" y="115" width="145" height="103" rx="7" fill="#eaf4ef"></rect><path d="M 532 115 H 663 A 7 7 0 0 1 670 122 V 147 H 525 V 122 A 7 7 0 0 1 532 115 Z" fill="#cde3d7"></path><rect x="525" y="115" width="145" height="103" rx="7" fill="none" stroke="#348a5c" stroke-width="1.6"></rect><line x1="525" y1="147" x2="670" y2="147" stroke="#348a5c" stroke-width="1"></line><foreignObject x="525" y="115" width="145" height="32"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-weight:bold;font-size:14px;color:#1c2b36">HTTP 檔案/批次</div></foreignObject><foreignObject x="525" y="147" width="145" height="71"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="font-size:13px;line-height:1.55;padding:6px 9px 4px;text-align:left;color:#1c2b36"><div style="white-space:nowrap">•&nbsp;upload</div><div style="white-space:nowrap">•&nbsp;download</div><div style="white-space:nowrap">•&nbsp;batchUploadCntr</div></div></foreignObject><rect x="145.99999999999994" y="73" width="131" height="63" rx="7" fill="#eef4fb"></rect><path d="M 152.99999999999994 73 H 269.99999999999994 A 7 7 0 0 1 276.99999999999994 80 V 105 H 145.99999999999994 V 80 A 7 7 0 0 1 152.99999999999994 73 Z" fill="#d2dfef"></path><rect x="145.99999999999994" y="73" width="131" height="63" rx="7" fill="none" stroke="#3f6fb0" stroke-width="1.6"></rect><line x1="145.99999999999994" y1="105" x2="276.99999999999994" y2="105" stroke="#3f6fb0" stroke-width="1"></line><foreignObject x="145.99999999999994" y="73" width="131" height="32"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-weight:bold;font-size:14px;color:#1c2b36">App/AppMod</div></foreignObject><foreignObject x="145.99999999999994" y="105" width="131" height="31"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="font-size:13px;line-height:1.55;padding:6px 9px 4px;text-align:left;color:#1c2b36"><div style="white-space:nowrap">•&nbsp;前端入口</div></div></foreignObject><rect x="137.99999999999994" y="295" width="147" height="63" rx="7" fill="#fbecea"></rect><path d="M 144.99999999999994 295 H 277.99999999999994 A 7 7 0 0 1 284.99999999999994 302 V 327 H 137.99999999999994 V 302 A 7 7 0 0 1 144.99999999999994 295 Z" fill="#f2cfcb"></path><rect x="137.99999999999994" y="295" width="147" height="63" rx="7" fill="none" stroke="#c0392b" stroke-width="1.6"></rect><line x1="137.99999999999994" y1="327" x2="284.99999999999994" y2="327" stroke="#c0392b" stroke-width="1"></line><foreignObject x="137.99999999999994" y="295" width="147" height="32"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-weight:bold;font-size:14px;color:#23303a">登入</div></foreignObject><foreignObject x="137.99999999999994" y="327" width="147" height="31"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="font-size:13px;line-height:1.55;padding:6px 9px 4px;text-align:left;color:#23303a"><div style="white-space:nowrap">•&nbsp;SSO 驗證+取權限</div></div></foreignObject><rect x="74.24999999999994" y="434" width="183" height="63" rx="7" fill="#eef4fb"></rect><path d="M 81.24999999999994 434 H 250.24999999999994 A 7 7 0 0 1 257.24999999999994 441 V 466 H 74.24999999999994 V 441 A 7 7 0 0 1 81.24999999999994 434 Z" fill="#d2dfef"></path><rect x="74.24999999999994" y="434" width="183" height="63" rx="7" fill="none" stroke="#3f6fb0" stroke-width="1.6"></rect><line x1="74.24999999999994" y1="466" x2="257.24999999999994" y2="466" stroke="#3f6fb0" stroke-width="1"></line><foreignObject x="74.24999999999994" y="434" width="183" height="32"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-weight:bold;font-size:14px;color:#1c2b36">Layout</div></foreignObject><foreignObject x="74.24999999999994" y="466" width="183" height="31"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="font-size:13px;line-height:1.55;padding:6px 9px 4px;text-align:left;color:#1c2b36"><div style="white-space:nowrap">•&nbsp;主畫面選單+各頁面元件</div></div></foreignObject><rect x="302.16666666666663" y="601" width="100" height="103" rx="7" fill="#f4f0fa"></rect><path d="M 309.16666666666663 601 H 395.16666666666663 A 7 7 0 0 1 402.16666666666663 608 V 633 H 302.16666666666663 V 608 A 7 7 0 0 1 309.16666666666663 601 Z" fill="#e2d9ee"></path><rect x="302.16666666666663" y="601" width="100" height="103" rx="7" fill="none" stroke="#8163ad" stroke-width="1.6"></rect><line x1="302.16666666666663" y1="633" x2="402.16666666666663" y2="633" stroke="#8163ad" stroke-width="1"></line><foreignObject x="302.16666666666663" y="601" width="100" height="32"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-weight:bold;font-size:14px;color:#23303a">Vuex Store</div></foreignObject><foreignObject x="302.16666666666663" y="633" width="100" height="71"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="font-size:13px;line-height:1.55;padding:6px 9px 4px;text-align:left;color:#23303a"><div style="white-space:nowrap">•&nbsp;keyTable</div><div style="white-space:nowrap">•&nbsp;syncState</div><div style="white-space:nowrap">•&nbsp;loading</div></div></foreignObject><rect x="393.83333333333326" y="295" width="89" height="36" rx="7" fill="#fcf0e2" stroke="#c46e1a" stroke-width="1.6"></rect><foreignObject x="393.83333333333326" y="295" width="89" height="36"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-size:14px;color:#1c2b36;line-height:1.4;padding:0 4px;box-sizing:border-box">srv 主服務</div></foreignObject><rect x="527.5" y="295" width="140" height="36" rx="7" fill="#fcf0e2" stroke="#c46e1a" stroke-width="1.6"></rect><foreignObject x="527.5" y="295" width="140" height="36"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-size:14px;color:#1c2b36;line-height:1.4;padding:0 4px;box-sizing:border-box">srvBatch 批次服務</div></foreignObject></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="1019" height="492" viewBox="-18 -18 1019 492" style="background:#fff"><rect x="343" y="12" width="234" height="432" rx="8" fill="#fdf6ec" fill-opacity="0.38" stroke="#c46e1a" stroke-width="2"></rect><foreignObject x="403" y="17" width="114" height="33"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="text-align:center;font-weight:bold;font-size:15px;color:#c46e1a;line-height:1.3">後端服務程式</div></foreignObject><path d="M 120 93.5 L 146 93.5 L 146 82.5 L 306 82.5 L 306 95.5 L 391.5 95.5" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 391.5 95.5 L 382.5 91.5 L 382.5 99.5 Z" fill="#44505a"></path><foreignObject x="188.5" y="61.5" width="81" height="22"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="font-size:12.5px;color:#4a5560;text-shadow:0 0 3px #ffffff,0 0 3px #ffffff,0 0 3px #ffffff,0 0 3px #ffffff;white-space:nowrap">即時資料介接</div></foreignObject><path d="M 120 105.5 L 367 105.5 L 367 297.5 L 397 297.5" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 397 297.5 L 388 293.5 L 388 301.5 Z" fill="#44505a"></path><foreignObject x="196" y="108.5" width="66" height="22"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="font-size:12.5px;color:#4a5560;text-shadow:0 0 3px #ffffff,0 0 3px #ffffff,0 0 3px #ffffff,0 0 3px #ffffff;white-space:nowrap">HTTP 分片</div></foreignObject><path d="M 120 196.5 L 377 196.5" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 377 196.5 L 368 192.5 L 368 200.5 Z" fill="#44505a"></path><foreignObject x="172" y="199.5" width="114" height="22"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="font-size:12.5px;color:#4a5560;text-shadow:0 0 3px #ffffff,0 0 3px #ffffff,0 0 3px #ffffff,0 0 3px #ffffff;white-space:nowrap">REST 取用詮釋資料</div></foreignObject><path d="M 548.5 95.5 L 638 95.5 L 638 268.45 L 688 268.45" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 688 268.45 L 679 264.45 L 679 272.45 Z" fill="#44505a"></path><path d="M 563 196.5 L 614 196.5 L 614 275.65 L 688 275.65" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 688 275.65 L 679 271.65 L 679 279.65 Z" fill="#44505a"></path><path d="M 543 297.5 L 614 297.5 L 614 282.85 L 688 282.85" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 688 282.85 L 679 278.85 L 679 286.85 Z" fill="#44505a"></path><path d="M 563 382.75 L 638 382.75 L 638 290.05 L 688 290.05" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 688 290.05 L 679 286.05 L 679 294.05 Z" fill="#44505a"></path><path d="M 563 398.5 L 662 398.5 L 662 348.25 L 863 348.25" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 863 348.25 L 854 344.25 L 854 352.25 Z" fill="#44505a"></path><foreignObject x="688" y="327.25" width="147" height="22"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="font-size:12.5px;color:#4a5560;text-shadow:0 0 3px #ffffff,0 0 3px #ffffff,0 0 3px #ffffff,0 0 3px #ffffff;white-space:nowrap">providePerm 推權限目標</div></foreignObject><path d="M 563 414.25 L 863 414.25" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 863 414.25 L 854 410.25 L 854 418.25 Z" fill="#44505a"></path><foreignObject x="692.5" y="417.25" width="138" height="22"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="font-size:12.5px;color:#4a5560;text-shadow:0 0 3px #ffffff,0 0 3px #ffffff,0 0 3px #ffffff,0 0 3px #ffffff;white-space:nowrap">provideApi 推 API 說明</div></foreignObject><rect x="391.5" y="54" width="157" height="83" rx="7" fill="#fcf0e2"></rect><path d="M 398.5 54 H 541.5 A 7 7 0 0 1 548.5 61 V 86 H 391.5 V 61 A 7 7 0 0 1 398.5 54 Z" fill="#f3dbc2"></path><rect x="391.5" y="54" width="157" height="83" rx="7" fill="none" stroke="#c46e1a" stroke-width="1.6"></rect><line x1="391.5" y1="86" x2="548.5" y2="86" stroke="#c46e1a" stroke-width="1"></line><foreignObject x="391.5" y="54" width="157" height="32"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-weight:bold;font-size:14px;color:#1c2b36">srv 主服務</div></foreignObject><foreignObject x="391.5" y="86" width="157" height="51"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="font-size:13px;line-height:1.55;padding:6px 9px 4px;text-align:left;color:#1c2b36"><div style="white-space:nowrap">•&nbsp;ORM CRUD</div><div style="white-space:nowrap">•&nbsp;全表推播+擴充函數</div></div></foreignObject><rect x="377" y="165" width="186" height="63" rx="7" fill="#fcf0e2"></rect><path d="M 384 165 H 556 A 7 7 0 0 1 563 172 V 197 H 377 V 172 A 7 7 0 0 1 384 165 Z" fill="#f3dbc2"></path><rect x="377" y="165" width="186" height="63" rx="7" fill="none" stroke="#c46e1a" stroke-width="1.6"></rect><line x1="377" y1="197" x2="563" y2="197" stroke="#c46e1a" stroke-width="1"></line><foreignObject x="377" y="165" width="186" height="32"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-weight:bold;font-size:14px;color:#1c2b36">srvApi 對外服務</div></foreignObject><foreignObject x="377" y="197" width="186" height="31"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="font-size:13px;line-height:1.55;padding:6px 9px 4px;text-align:left;color:#1c2b36"><div style="white-space:nowrap">•&nbsp;REST 每表 GET /api/表名</div></div></foreignObject><rect x="397" y="256" width="146" height="83" rx="7" fill="#fcf0e2"></rect><path d="M 404 256 H 536 A 7 7 0 0 1 543 263 V 288 H 397 V 263 A 7 7 0 0 1 404 256 Z" fill="#f3dbc2"></path><rect x="397" y="256" width="146" height="83" rx="7" fill="none" stroke="#c46e1a" stroke-width="1.6"></rect><line x1="397" y1="288" x2="543" y2="288" stroke="#c46e1a" stroke-width="1"></line><foreignObject x="397" y="256" width="146" height="32"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-weight:bold;font-size:14px;color:#1c2b36">srvBatch 批次服務</div></foreignObject><foreignObject x="397" y="288" width="146" height="51"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="font-size:13px;line-height:1.55;padding:6px 9px 4px;text-align:left;color:#1c2b36"><div style="white-space:nowrap">•&nbsp;批次任務</div><div style="white-space:nowrap">•&nbsp;大檔分片</div></div></foreignObject><rect x="404" y="367" width="159" height="63" rx="7" fill="#fcf0e2"></rect><path d="M 411 367 H 556 A 7 7 0 0 1 563 374 V 399 H 404 V 374 A 7 7 0 0 1 411 367 Z" fill="#f3dbc2"></path><rect x="404" y="367" width="159" height="63" rx="7" fill="none" stroke="#c46e1a" stroke-width="1.6"></rect><line x1="404" y1="399" x2="563" y2="399" stroke="#c46e1a" stroke-width="1"></line><foreignObject x="404" y="367" width="159" height="32"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-weight:bold;font-size:14px;color:#1c2b36">srvProvide 推送服務</div></foreignObject><foreignObject x="404" y="399" width="159" height="31"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="font-size:13px;line-height:1.55;padding:6px 9px 4px;text-align:left;color:#1c2b36"><div style="white-space:nowrap">•&nbsp;排程每 30 秒推送</div></div></foreignObject><rect x="40" y="81.5" width="80" height="36" rx="7" fill="#eef4fb" stroke="#3f6fb0" stroke-width="1.6"></rect><foreignObject x="40" y="81.5" width="80" height="36"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-size:14px;color:#1c2b36;line-height:1.4;padding:0 4px;box-sizing:border-box">前端應用</div></foreignObject><rect x="12" y="178.5" width="108" height="36" rx="7" fill="#f4f0fa" stroke="#8163ad" stroke-width="1.6"></rect><foreignObject x="12" y="178.5" width="108" height="36"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-size:14px;color:#23303a;line-height:1.4;padding:0 4px;box-sizing:border-box">外部應用系統</div></foreignObject><rect x="688" y="261.25" width="134" height="36" rx="7" fill="#eaf4ef" stroke="#348a5c" stroke-width="1.6"></rect><foreignObject x="688" y="261.25" width="134" height="36"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-size:14px;color:#1c2b36;line-height:1.4;padding:0 4px;box-sizing:border-box">資料庫(LMDB)</div></foreignObject><rect x="863" y="330.25" width="108" height="36" rx="7" fill="#f4f0fa" stroke="#8163ad" stroke-width="1.6"></rect><foreignObject x="863" y="330.25" width="108" height="36"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-size:14px;color:#23303a;line-height:1.4;padding:0 4px;box-sizing:border-box">權限管理系統</div></foreignObject><rect x="863" y="396.25" width="106" height="36" rx="7" fill="#f4f0fa" stroke="#8163ad" stroke-width="1.6"></rect><foreignObject x="863" y="396.25" width="106" height="36"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-size:14px;color:#23303a;line-height:1.4;padding:0 4px;box-sizing:border-box">API 管理系統</div></foreignObject></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="1032" height="1423" viewBox="-18 -18 1032 1423" style="background:#fff"><rect x="12" y="352" width="829.5" height="660" rx="8" fill="#fdf6ec" fill-opacity="0.38" stroke="#c46e1a" stroke-width="2"></rect><foreignObject x="382.25" y="357" width="89" height="33"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="text-align:center;font-weight:bold;font-size:15px;color:#c46e1a;line-height:1.3">core 流程</div></foreignObject><rect x="228" y="415" width="411" height="376" rx="8" fill="#eaf4ef" fill-opacity="0.38" stroke="#348a5c" stroke-width="2"></rect><foreignObject x="315" y="420" width="237" height="33"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="text-align:center;font-weight:bold;font-size:15px;color:#348a5c;line-height:1.3">格式偵測(kpFun 依欄位路由)</div></foreignObject><path d="M 345.5 569 L 345.5 599" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 345.5 599 L 349.5 590 L 341.5 590 Z" fill="#44505a"></path><path d="M 345.5 635 L 345.5 665" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 345.5 665 L 349.5 656 L 341.5 656 Z" fill="#44505a"></path><path d="M 345.5 701 L 345.5 731" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 345.5 731 L 349.5 722 L 341.5 722 Z" fill="#44505a"></path><path d="M 345.5 767 L 345.5 785 L 432 785 L 432 449 L 520.5 449 L 520.5 467" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 520.5 467 L 524.5 458 L 516.5 458 Z" fill="#44505a"></path><path d="M 520.5 503 L 520.5 533" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 520.5 533 L 524.5 524 L 516.5 524 Z" fill="#44505a"></path><path d="M 520.5 569 L 520.5 599" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 520.5 599 L 524.5 590 L 516.5 590 Z" fill="#44505a"></path><path d="M 520.5 635 L 520.5 665" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 520.5 665 L 524.5 656 L 516.5 656 Z" fill="#44505a"></path><path d="M 106.5 895 L 106.5 925" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 106.5 925 L 110.5 916 L 102.5 916 Z" fill="#44505a"></path><path d="M 106.5 988 L 106.5 1006 L 207 1006 L 207 394 L 345.5 394 L 345.5 533" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 345.5 533 L 349.5 524 L 341.5 524 Z" fill="#44505a"></path><path d="M 520.5 701 L 520.5 812 L 659 812 L 659 394 L 747 394 L 747 415" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 747 415 L 751 406 L 743 406 Z" fill="#44505a"></path><path d="M 747 478 L 747 832" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 747 832 L 751 823 L 743 823 Z" fill="#44505a"></path><path d="M 850.1666666666666 95 L 850.1666666666666 129" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 850.1666666666666 129 L 854.1666666666666 120 L 846.1666666666666 120 Z" fill="#44505a"></path><path d="M 850.1666666666666 192 L 850.1666666666666 226" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 850.1666666666666 226 L 854.1666666666666 217 L 846.1666666666666 217 Z" fill="#44505a"></path><path d="M 828.8333333333334 289 L 828.8333333333334 315 L 106.5 315 L 106.5 832" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 106.5 832 L 110.5 823 L 102.5 823 Z" fill="#44505a"></path><path d="M 871.5 289 L 871.5 1046" fill="none" stroke="#44505a" stroke-width="2" stroke-dasharray="6 4"></path><path d="M 871.5 1046 L 875.5 1037 L 867.5 1037 Z" fill="#44505a"></path><foreignObject x="874.5" y="667.5" width="56" height="22"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="font-size:12.5px;color:#4a5560;text-shadow:0 0 3px #ffffff,0 0 3px #ffffff,0 0 3px #ffffff,0 0 3px #ffffff;white-space:nowrap">進度回報</div></foreignObject><path d="M 871.5 1102 L 871.5 1136" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 871.5 1136 L 875.5 1127 L 867.5 1127 Z" fill="#44505a"></path><path d="M 848.7 1212 L 848.7 1238 L 564.8 1238 L 564.8 1312" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 564.8 1312 L 568.8 1303 L 560.8 1303 Z" fill="#44505a"></path><path d="M 863.9 1212 L 863.9 1262 L 675.3 1262 L 675.3 1312" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 675.3 1312 L 679.3 1303 L 671.3 1303 Z" fill="#44505a"></path><path d="M 879.1 1212 L 879.1 1286 L 786.3 1286 L 786.3 1312" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 786.3 1312 L 790.3 1303 L 782.3 1303 Z" fill="#44505a"></path><path d="M 894.3 1212 L 894.3 1312" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 894.3 1312 L 898.3 1303 L 890.3 1303 Z" fill="#44505a"></path><rect x="300" y="533" width="91" height="36" rx="7" fill="#eaf4ef" stroke="#348a5c" stroke-width="1.6"></rect><foreignObject x="300" y="533" width="91" height="36"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-size:14px;color:#1c2b36;line-height:1.4;padding:0 4px;box-sizing:border-box">kpSetFiles</div></foreignObject><rect x="290.5" y="599" width="110" height="36" rx="7" fill="#eaf4ef" stroke="#348a5c" stroke-width="1.6"></rect><foreignObject x="290.5" y="599" width="110" height="36"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-size:14px;color:#1c2b36;line-height:1.4;padding:0 4px;box-sizing:border-box">kpSetParams</div></foreignObject><rect x="279" y="665" width="133" height="36" rx="7" fill="#eaf4ef" stroke="#348a5c" stroke-width="1.6"></rect><foreignObject x="279" y="665" width="133" height="36"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-size:14px;color:#1c2b36;line-height:1.4;padding:0 4px;box-sizing:border-box">kpCheckProjects</div></foreignObject><rect x="290.5" y="731" width="110" height="36" rx="7" fill="#eaf4ef" stroke="#348a5c" stroke-width="1.6"></rect><foreignObject x="290.5" y="731" width="110" height="36"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-size:14px;color:#1c2b36;line-height:1.4;padding:0 4px;box-sizing:border-box">kpCheckMds</div></foreignObject><rect x="465.5" y="467" width="110" height="36" rx="7" fill="#eaf4ef" stroke="#348a5c" stroke-width="1.6"></rect><foreignObject x="465.5" y="467" width="110" height="36"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-size:14px;color:#1c2b36;line-height:1.4;padding:0 4px;box-sizing:border-box">kpCheckTabs</div></foreignObject><rect x="460" y="533" width="121" height="36" rx="7" fill="#eaf4ef" stroke="#348a5c" stroke-width="1.6"></rect><foreignObject x="460" y="533" width="121" height="36"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-size:14px;color:#1c2b36;line-height:1.4;padding:0 4px;box-sizing:border-box">kpCheckHashs</div></foreignObject><rect x="453" y="599" width="135" height="36" rx="7" fill="#eaf4ef" stroke="#348a5c" stroke-width="1.6"></rect><foreignObject x="453" y="599" width="135" height="36"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-size:14px;color:#1c2b36;line-height:1.4;padding:0 4px;box-sizing:border-box">kpCheckRelation</div></foreignObject><rect x="462" y="665" width="117" height="36" rx="7" fill="#eaf4ef" stroke="#348a5c" stroke-width="1.6"></rect><foreignObject x="462" y="665" width="117" height="36"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-size:14px;color:#1c2b36;line-height:1.4;padding:0 4px;box-sizing:border-box">kpCheckValue</div></foreignObject><rect x="33.5" y="832" width="146" height="63" rx="7" fill="#eaf4ef"></rect><path d="M 40.5 832 H 172.5 A 7 7 0 0 1 179.5 839 V 864 H 33.5 V 839 A 7 7 0 0 1 40.5 832 Z" fill="#cde3d7"></path><rect x="33.5" y="832" width="146" height="63" rx="7" fill="none" stroke="#348a5c" stroke-width="1.6"></rect><line x1="33.5" y1="864" x2="179.5" y2="864" stroke="#348a5c" stroke-width="1"></line><foreignObject x="33.5" y="832" width="146" height="32"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-weight:bold;font-size:14px;color:#1c2b36">readSys</div></foreignObject><foreignObject x="33.5" y="864" width="146" height="31"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="font-size:13px;line-height:1.55;padding:6px 9px 4px;text-align:left;color:#1c2b36"><div style="white-space:nowrap">•&nbsp;讀現有全表 kpOld</div></div></foreignObject><rect x="26" y="925" width="161" height="63" rx="7" fill="#eaf4ef"></rect><path d="M 33 925 H 180 A 7 7 0 0 1 187 932 V 957 H 26 V 932 A 7 7 0 0 1 33 925 Z" fill="#cde3d7"></path><rect x="26" y="925" width="161" height="63" rx="7" fill="none" stroke="#348a5c" stroke-width="1.6"></rect><line x1="26" y1="957" x2="187" y2="957" stroke="#348a5c" stroke-width="1"></line><foreignObject x="26" y="925" width="161" height="32"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-weight:bold;font-size:14px;color:#1c2b36">readXlsx</div></foreignObject><foreignObject x="26" y="957" width="161" height="31"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="font-size:13px;line-height:1.55;padding:6px 9px 4px;text-align:left;color:#1c2b36"><div style="white-space:nowrap">•&nbsp;解析+keyTable 識別</div></div></foreignObject><rect x="680" y="415" width="134" height="63" rx="7" fill="#eaf4ef"></rect><path d="M 687 415 H 807 A 7 7 0 0 1 814 422 V 447 H 680 V 422 A 7 7 0 0 1 687 415 Z" fill="#cde3d7"></path><rect x="680" y="415" width="134" height="63" rx="7" fill="none" stroke="#348a5c" stroke-width="1.6"></rect><line x1="680" y1="447" x2="814" y2="447" stroke="#348a5c" stroke-width="1"></line><foreignObject x="680" y="415" width="134" height="32"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-weight:bold;font-size:14px;color:#1c2b36">generateReport</div></foreignObject><foreignObject x="680" y="447" width="134" height="31"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="font-size:13px;line-height:1.55;padding:6px 9px 4px;text-align:left;color:#1c2b36"><div style="white-space:nowrap">•&nbsp;HTML 檢測報告</div></div></foreignObject><rect x="666.5" y="832" width="161" height="63" rx="7" fill="#eaf4ef"></rect><path d="M 673.5 832 H 820.5 A 7 7 0 0 1 827.5 839 V 864 H 666.5 V 839 A 7 7 0 0 1 673.5 832 Z" fill="#cde3d7"></path><rect x="666.5" y="832" width="161" height="63" rx="7" fill="none" stroke="#348a5c" stroke-width="1.6"></rect><line x1="666.5" y1="864" x2="827.5" y2="864" stroke="#348a5c" stroke-width="1"></line><foreignObject x="666.5" y="832" width="161" height="32"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-weight:bold;font-size:14px;color:#1c2b36">save</div></foreignObject><foreignObject x="666.5" y="864" width="161" height="31"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="font-size:13px;line-height:1.55;padding:6px 9px 4px;text-align:left;color:#1c2b36"><div style="white-space:nowrap">•&nbsp;以預產 id 直接 insert</div></div></foreignObject><rect x="765.6666666666666" y="12" width="169" height="83" rx="7" fill="#eef4fb"></rect><path d="M 772.6666666666666 12 H 927.6666666666666 A 7 7 0 0 1 934.6666666666666 19 V 44 H 765.6666666666666 V 19 A 7 7 0 0 1 772.6666666666666 12 Z" fill="#d2dfef"></path><rect x="765.6666666666666" y="12" width="169" height="83" rx="7" fill="none" stroke="#3f6fb0" stroke-width="1.6"></rect><line x1="765.6666666666666" y1="44" x2="934.6666666666666" y2="44" stroke="#3f6fb0" stroke-width="1"></line><foreignObject x="765.6666666666666" y="12" width="169" height="32"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-weight:bold;font-size:14px;color:#1c2b36">batchUploadCntrRun</div></foreignObject><foreignObject x="765.6666666666666" y="44" width="169" height="51"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="font-size:13px;line-height:1.55;padding:6px 9px 4px;text-align:left;color:#1c2b36"><div style="white-space:nowrap">•&nbsp;mode</div><div style="white-space:nowrap">•&nbsp;fdName</div></div></foreignObject><rect x="802.1666666666666" y="129" width="96" height="63" rx="7" fill="#eef4fb"></rect><path d="M 809.1666666666666 129 H 891.1666666666666 A 7 7 0 0 1 898.1666666666666 136 V 161 H 802.1666666666666 V 136 A 7 7 0 0 1 809.1666666666666 129 Z" fill="#d2dfef"></path><rect x="802.1666666666666" y="129" width="96" height="63" rx="7" fill="none" stroke="#3f6fb0" stroke-width="1.6"></rect><line x1="802.1666666666666" y1="161" x2="898.1666666666666" y2="161" stroke="#3f6fb0" stroke-width="1"></line><foreignObject x="802.1666666666666" y="129" width="96" height="32"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-weight:bold;font-size:14px;color:#1c2b36">Controller</div></foreignObject><foreignObject x="802.1666666666666" y="161" width="96" height="31"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="font-size:13px;line-height:1.55;padding:6px 9px 4px;text-align:left;color:#1c2b36"><div style="white-space:nowrap">•&nbsp;串列佇列</div></div></foreignObject><rect x="786.1666666666666" y="226" width="128" height="63" rx="7" fill="#eef4fb"></rect><path d="M 793.1666666666666 226 H 907.1666666666666 A 7 7 0 0 1 914.1666666666666 233 V 258 H 786.1666666666666 V 233 A 7 7 0 0 1 793.1666666666666 226 Z" fill="#d2dfef"></path><rect x="786.1666666666666" y="226" width="128" height="63" rx="7" fill="none" stroke="#3f6fb0" stroke-width="1.6"></rect><line x1="786.1666666666666" y1="258" x2="914.1666666666666" y2="258" stroke="#3f6fb0" stroke-width="1"></line><foreignObject x="786.1666666666666" y="226" width="128" height="32"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-weight:bold;font-size:14px;color:#1c2b36">Worker Thread</div></foreignObject><foreignObject x="786.1666666666666" y="258" width="128" height="31"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="font-size:13px;line-height:1.55;padding:6px 9px 4px;text-align:left;color:#1c2b36"><div style="white-space:nowrap">•&nbsp;獨立執行</div></div></foreignObject><rect x="759.5" y="1046" width="224" height="56" rx="7" fill="#eaf4ef" stroke="#256046" stroke-width="1.6"></rect><foreignObject x="759.5" y="1046" width="224" height="56"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-size:14px;color:#256046;line-height:1.4;padding:0 4px;box-sizing:border-box">進度查詢 batchUploadCntrGet(id)</div></foreignObject><polygon points="871.5,1136 909.5,1174 871.5,1212 833.5,1174" fill="#fcf0e2" stroke="#c46e1a" stroke-width="1.8"></polygon><foreignObject x="833.5" y="1136" width="76" height="76"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-size:14px;color:#23303a;line-height:1.4;padding:0 4px;box-sizing:border-box">狀態</div></foreignObject><rect x="522.3" y="1312" width="85" height="63" rx="7" fill="#eaf4ef"></rect><path d="M 529.3 1312 H 600.3 A 7 7 0 0 1 607.3 1319 V 1344 H 522.3 V 1319 A 7 7 0 0 1 529.3 1312 Z" fill="#cadcd4"></path><rect x="522.3" y="1312" width="85" height="63" rx="7" fill="none" stroke="#256046" stroke-width="1.6"></rect><line x1="522.3" y1="1344" x2="607.3" y2="1344" stroke="#256046" stroke-width="1"></line><foreignObject x="522.3" y="1312" width="85" height="32"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-weight:bold;font-size:14px;color:#256046">等待中</div></foreignObject><foreignObject x="522.3" y="1344" width="85" height="31"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="font-size:13px;line-height:1.55;padding:6px 9px 4px;text-align:left;color:#256046"><div style="white-space:nowrap">•&nbsp;waiting</div></div></foreignObject><rect x="637.3" y="1312" width="76" height="63" rx="7" fill="#eaf4ef"></rect><path d="M 644.3 1312 H 706.3 A 7 7 0 0 1 713.3 1319 V 1344 H 637.3 V 1319 A 7 7 0 0 1 644.3 1312 Z" fill="#cadcd4"></path><rect x="637.3" y="1312" width="76" height="63" rx="7" fill="none" stroke="#256046" stroke-width="1.6"></rect><line x1="637.3" y1="1344" x2="713.3" y2="1344" stroke="#256046" stroke-width="1"></line><foreignObject x="637.3" y="1312" width="76" height="32"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-weight:bold;font-size:14px;color:#256046">執行中</div></foreignObject><foreignObject x="637.3" y="1344" width="76" height="31"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="font-size:13px;line-height:1.55;padding:6px 9px 4px;text-align:left;color:#256046"><div style="white-space:nowrap">•&nbsp;doing</div></div></foreignObject><rect x="743.3" y="1312" width="86" height="63" rx="7" fill="#eaf4ef"></rect><path d="M 750.3 1312 H 822.3 A 7 7 0 0 1 829.3 1319 V 1344 H 743.3 V 1319 A 7 7 0 0 1 750.3 1312 Z" fill="#cadcd4"></path><rect x="743.3" y="1312" width="86" height="63" rx="7" fill="none" stroke="#256046" stroke-width="1.6"></rect><line x1="743.3" y1="1344" x2="829.3" y2="1344" stroke="#256046" stroke-width="1"></line><foreignObject x="743.3" y="1312" width="86" height="32"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-weight:bold;font-size:14px;color:#256046">完成</div></foreignObject><foreignObject x="743.3" y="1344" width="86" height="31"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="font-size:13px;line-height:1.55;padding:6px 9px 4px;text-align:left;color:#256046"><div style="white-space:nowrap">•&nbsp;success</div></div></foreignObject><rect x="859.3" y="1312" width="70" height="63" rx="7" fill="#eaf4ef"></rect><path d="M 866.3 1312 H 922.3 A 7 7 0 0 1 929.3 1319 V 1344 H 859.3 V 1319 A 7 7 0 0 1 866.3 1312 Z" fill="#cadcd4"></path><rect x="859.3" y="1312" width="70" height="63" rx="7" fill="none" stroke="#256046" stroke-width="1.6"></rect><line x1="859.3" y1="1344" x2="929.3" y2="1344" stroke="#256046" stroke-width="1"></line><foreignObject x="859.3" y="1312" width="70" height="32"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-weight:bold;font-size:14px;color:#256046">錯誤</div></foreignObject><foreignObject x="859.3" y="1344" width="70" height="31"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="font-size:13px;line-height:1.55;padding:6px 9px 4px;text-align:left;color:#256046"><div style="white-space:nowrap">•&nbsp;error</div></div></foreignObject></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="596" height="785" viewBox="-18 -18 596 785" style="background:#fff"><rect x="180.5" y="12" width="199" height="179" rx="8" fill="#faf7fd" fill-opacity="0.38" stroke="#8163ad" stroke-width="2"></rect><foreignObject x="223" y="17" width="114" height="33"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="text-align:center;font-weight:bold;font-size:15px;color:#8163ad;line-height:1.3">前端頁面元件</div></foreignObject><rect x="163" y="225" width="234" height="260" rx="8" fill="#f5f9fe" fill-opacity="0.38" stroke="#3f6fb0" stroke-width="2"></rect><foreignObject x="238" y="230" width="84" height="33"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="text-align:center;font-weight:bold;font-size:15px;color:#3f6fb0;line-height:1.3">前端共用</div></foreignObject><rect x="12" y="519" width="536" height="92" rx="8" fill="#fdf6ec" fill-opacity="0.38" stroke="#c46e1a" stroke-width="2"></rect><foreignObject x="223" y="524" width="114" height="33"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="text-align:center;font-weight:bold;font-size:15px;color:#c46e1a;line-height:1.3">後端服務程式</div></foreignObject><rect x="30" y="645" width="500" height="92" rx="8" fill="#f0f7f3" fill-opacity="0.38" stroke="#348a5c" stroke-width="2"></rect><foreignObject x="223" y="650" width="114" height="33"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="text-align:center;font-weight:bold;font-size:15px;color:#348a5c;line-height:1.3">後端共用模組</div></foreignObject><path d="M 280 191 L 280 225" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 280 225 L 284 216 L 276 216 Z" fill="#44505a"></path><path d="M 280 485 L 280 519" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 280 519 L 284 510 L 276 510 Z" fill="#44505a"></path><path d="M 280 611 L 280 645" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 280 645 L 284 636 L 276 636 Z" fill="#44505a"></path><rect x="194.5" y="54" width="171" height="123" rx="7" fill="#f4f0fa"></rect><path d="M 201.5 54 H 358.5 A 7 7 0 0 1 365.5 61 V 86 H 194.5 V 61 A 7 7 0 0 1 201.5 54 Z" fill="#e2d9ee"></path><rect x="194.5" y="54" width="171" height="123" rx="7" fill="none" stroke="#8163ad" stroke-width="1.6"></rect><line x1="194.5" y1="86" x2="365.5" y2="86" stroke="#8163ad" stroke-width="1"></line><foreignObject x="194.5" y="54" width="171" height="32"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-weight:bold;font-size:14px;color:#23303a">15 個 LayoutContent*</div></foreignObject><foreignObject x="194.5" y="86" width="171" height="91"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="font-size:13px;line-height:1.55;padding:6px 9px 4px;text-align:left;color:#23303a"><div style="white-space:nowrap">•&nbsp;主要資訊</div><div style="white-space:nowrap">•&nbsp;計畫資料管理</div><div style="white-space:nowrap">•&nbsp;需求</div><div style="white-space:nowrap">•&nbsp;知識…</div></div></foreignObject><rect x="177" y="267" width="81" height="204" rx="7" fill="#eef4fb"></rect><path d="M 184 267 H 251 A 7 7 0 0 1 258 274 V 299 H 177 V 274 A 7 7 0 0 1 184 267 Z" fill="#d2dfef"></path><rect x="177" y="267" width="81" height="204" rx="7" fill="none" stroke="#3f6fb0" stroke-width="1.6"></rect><line x1="177" y1="299" x2="258" y2="299" stroke="#3f6fb0" stroke-width="1"></line><foreignObject x="177" y="267" width="81" height="32"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-weight:bold;font-size:14px;color:#1c2b36">plugins</div></foreignObject><foreignObject x="177" y="299" width="81" height="172"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="font-size:13px;line-height:1.55;padding:6px 9px 4px;text-align:left;color:#1c2b36"><div style="white-space:nowrap">•&nbsp;$fapi</div><div style="white-space:nowrap">•&nbsp;$d1sm</div><div style="white-space:nowrap">•&nbsp;$d3rl</div><div style="white-space:nowrap">•&nbsp;$d4sp</div><div style="white-space:nowrap">•&nbsp;$s</div><div style="white-space:nowrap">•&nbsp;$prm</div><div style="white-space:nowrap">•&nbsp;$ui</div><div style="white-space:nowrap">•&nbsp;$ll</div></div></foreignObject><rect x="286" y="267" width="97" height="103" rx="7" fill="#eef4fb"></rect><path d="M 293 267 H 376 A 7 7 0 0 1 383 274 V 299 H 286 V 274 A 7 7 0 0 1 293 267 Z" fill="#d2dfef"></path><rect x="286" y="267" width="97" height="103" rx="7" fill="none" stroke="#3f6fb0" stroke-width="1.6"></rect><line x1="286" y1="299" x2="383" y2="299" stroke="#3f6fb0" stroke-width="1"></line><foreignObject x="286" y="267" width="97" height="32"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-weight:bold;font-size:14px;color:#1c2b36">共用元件</div></foreignObject><foreignObject x="286" y="299" width="97" height="71"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="font-size:13px;line-height:1.55;padding:6px 9px 4px;text-align:left;color:#1c2b36"><div style="white-space:nowrap">•&nbsp;Common</div><div style="white-space:nowrap">•&nbsp;Meta</div><div style="white-space:nowrap">•&nbsp;Property</div></div></foreignObject><rect x="26" y="561" width="89" height="36" rx="7" fill="#fcf0e2" stroke="#c46e1a" stroke-width="1.6"></rect><foreignObject x="26" y="561" width="89" height="36"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-size:14px;color:#1c2b36;line-height:1.4;padding:0 4px;box-sizing:border-box">srv 主服務</div></foreignObject><rect x="143" y="561" width="98" height="36" rx="7" fill="#fcf0e2" stroke="#c46e1a" stroke-width="1.6"></rect><foreignObject x="143" y="561" width="98" height="36"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-size:14px;color:#1c2b36;line-height:1.4;padding:0 4px;box-sizing:border-box">srvApi 對外</div></foreignObject><rect x="269" y="561" width="112" height="36" rx="7" fill="#fcf0e2" stroke="#c46e1a" stroke-width="1.6"></rect><foreignObject x="269" y="561" width="112" height="36"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-size:14px;color:#1c2b36;line-height:1.4;padding:0 4px;box-sizing:border-box">srvBatch 批次</div></foreignObject><rect x="409" y="561" width="125" height="36" rx="7" fill="#fcf0e2" stroke="#c46e1a" stroke-width="1.6"></rect><foreignObject x="409" y="561" width="125" height="36"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-size:14px;color:#1c2b36;line-height:1.4;padding:0 4px;box-sizing:border-box">srvProvide 推送</div></foreignObject><rect x="44" y="687" width="67" height="36" rx="7" fill="#eaf4ef" stroke="#348a5c" stroke-width="1.6"></rect><foreignObject x="44" y="687" width="67" height="36"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-size:14px;color:#1c2b36;line-height:1.4;padding:0 4px;box-sizing:border-box">mOrm</div></foreignObject><rect x="139" y="687" width="74" height="36" rx="7" fill="#eaf4ef" stroke="#348a5c" stroke-width="1.6"></rect><foreignObject x="139" y="687" width="74" height="36"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-size:14px;color:#1c2b36;line-height:1.4;padding:0 4px;box-sizing:border-box">mUsers</div></foreignObject><rect x="241" y="687" width="141" height="36" rx="7" fill="#eaf4ef" stroke="#348a5c" stroke-width="1.6"></rect><foreignObject x="241" y="687" width="141" height="36"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-size:14px;color:#1c2b36;line-height:1.4;padding:0 4px;box-sizing:border-box">batchUpload 系列</div></foreignObject><rect x="410" y="687" width="106" height="36" rx="7" fill="#eaf4ef" stroke="#348a5c" stroke-width="1.6"></rect><foreignObject x="410" y="687" width="106" height="36"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-size:14px;color:#1c2b36;line-height:1.4;padding:0 4px;box-sizing:border-box">provide 系列</div></foreignObject></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="599" height="807" viewBox="-18 -18 599 807" style="background:#fff"><rect x="12" y="12" width="539" height="175" rx="8" fill="#f5f9fe" fill-opacity="0.38" stroke="#3f6fb0" stroke-width="2"></rect><foreignObject x="247" y="17" width="69" height="33"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="text-align:center;font-weight:bold;font-size:15px;color:#3f6fb0;line-height:1.3">前端層</div></foreignObject><rect x="117.5" y="221" width="328" height="119" rx="8" fill="#f0f7f3" fill-opacity="0.38" stroke="#348a5c" stroke-width="2"></rect><foreignObject x="224.5" y="226" width="114" height="33"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="text-align:center;font-weight:bold;font-size:15px;color:#348a5c;line-height:1.3">前後端介面層</div></foreignObject><rect x="185" y="374" width="193" height="385" rx="8" fill="#fdf6ec" fill-opacity="0.38" stroke="#c46e1a" stroke-width="2"></rect><foreignObject x="247" y="379" width="69" height="33"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="text-align:center;font-weight:bold;font-size:15px;color:#c46e1a;line-height:1.3">後端層</div></foreignObject><rect x="148" y="54" width="389" height="119" rx="8" fill="#eef4fb" fill-opacity="0.38" stroke="#3f6fb0" stroke-width="2"></rect><foreignObject x="300.5" y="59" width="84" height="33"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="text-align:center;font-weight:bold;font-size:15px;color:#3f6fb0;line-height:1.3">前端共用</div></foreignObject><path d="M 281.5 539 L 281.5 569" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 281.5 569 L 285.5 560 L 277.5 560 Z" fill="#44505a"></path><path d="M 281.5 632 L 281.5 662" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 281.5 662 L 285.5 653 L 277.5 653 Z" fill="#44505a"></path><path d="M 281.5 187 L 281.5 221" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 281.5 221 L 285.5 212 L 277.5 212 Z" fill="#44505a"></path><path d="M 281.5 340 L 281.5 374" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 281.5 374 L 285.5 365 L 277.5 365 Z" fill="#44505a"></path><rect x="162" y="96" width="105" height="63" rx="7" fill="#eef4fb"></rect><path d="M 169 96 H 260 A 7 7 0 0 1 267 103 V 128 H 162 V 103 A 7 7 0 0 1 169 96 Z" fill="#d2dfef"></path><rect x="162" y="96" width="105" height="63" rx="7" fill="none" stroke="#3f6fb0" stroke-width="1.6"></rect><line x1="162" y1="128" x2="267" y2="128" stroke="#3f6fb0" stroke-width="1"></line><foreignObject x="162" y="96" width="105" height="32"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-weight:bold;font-size:14px;color:#1c2b36">通用組件</div></foreignObject><foreignObject x="162" y="128" width="105" height="31"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="font-size:13px;line-height:1.55;padding:6px 9px 4px;text-align:left;color:#1c2b36"><div style="white-space:nowrap">•&nbsp;共用組件庫</div></div></foreignObject><rect x="295" y="96" width="114" height="63" rx="7" fill="#eef4fb"></rect><path d="M 302 96 H 402 A 7 7 0 0 1 409 103 V 128 H 295 V 103 A 7 7 0 0 1 302 96 Z" fill="#d2dfef"></path><rect x="295" y="96" width="114" height="63" rx="7" fill="none" stroke="#3f6fb0" stroke-width="1.6"></rect><line x1="295" y1="128" x2="409" y2="128" stroke="#3f6fb0" stroke-width="1"></line><foreignObject x="295" y="96" width="114" height="32"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-weight:bold;font-size:14px;color:#1c2b36">資料驅動框架</div></foreignObject><foreignObject x="295" y="128" width="114" height="31"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="font-size:13px;line-height:1.55;padding:6px 9px 4px;text-align:left;color:#1c2b36"><div style="white-space:nowrap">•&nbsp;plugins</div></div></foreignObject><rect x="437" y="96" width="86" height="63" rx="7" fill="#eef4fb"></rect><path d="M 444 96 H 516 A 7 7 0 0 1 523 103 V 128 H 437 V 103 A 7 7 0 0 1 444 96 Z" fill="#d2dfef"></path><rect x="437" y="96" width="86" height="63" rx="7" fill="none" stroke="#3f6fb0" stroke-width="1.6"></rect><line x1="437" y1="128" x2="523" y2="128" stroke="#3f6fb0" stroke-width="1"></line><foreignObject x="437" y="96" width="86" height="32"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-weight:bold;font-size:14px;color:#1c2b36">狀態管理</div></foreignObject><foreignObject x="437" y="128" width="86" height="31"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="font-size:13px;line-height:1.55;padding:6px 9px 4px;text-align:left;color:#1c2b36"><div style="white-space:nowrap">•&nbsp;Vuex</div></div></foreignObject><rect x="26" y="54" width="94" height="83" rx="7" fill="#eef4fb"></rect><path d="M 33 54 H 113 A 7 7 0 0 1 120 61 V 86 H 26 V 61 A 7 7 0 0 1 33 54 Z" fill="#d2dfef"></path><rect x="26" y="54" width="94" height="83" rx="7" fill="none" stroke="#3f6fb0" stroke-width="1.6"></rect><line x1="26" y1="86" x2="120" y2="86" stroke="#3f6fb0" stroke-width="1"></line><foreignObject x="26" y="54" width="94" height="32"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-weight:bold;font-size:14px;color:#1c2b36">前端應用</div></foreignObject><foreignObject x="26" y="86" width="94" height="51"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="font-size:13px;line-height:1.55;padding:6px 9px 4px;text-align:left;color:#1c2b36"><div style="white-space:nowrap">•&nbsp;App</div><div style="white-space:nowrap">•&nbsp;AppMod</div></div></foreignObject><rect x="131.5" y="263" width="86" height="63" rx="7" fill="#eaf4ef"></rect><path d="M 138.5 263 H 210.5 A 7 7 0 0 1 217.5 270 V 295 H 131.5 V 270 A 7 7 0 0 1 138.5 263 Z" fill="#cde3d7"></path><rect x="131.5" y="263" width="86" height="63" rx="7" fill="none" stroke="#348a5c" stroke-width="1.6"></rect><line x1="131.5" y1="295" x2="217.5" y2="295" stroke="#348a5c" stroke-width="1"></line><foreignObject x="131.5" y="263" width="86" height="32"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-weight:bold;font-size:14px;color:#1c2b36">單一登入</div></foreignObject><foreignObject x="131.5" y="295" width="86" height="31"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="font-size:13px;line-height:1.55;padding:6px 9px 4px;text-align:left;color:#1c2b36"><div style="white-space:nowrap">•&nbsp;SSO</div></div></foreignObject><rect x="245.5" y="263" width="80" height="36" rx="7" fill="#eaf4ef" stroke="#348a5c" stroke-width="1.6"></rect><foreignObject x="245.5" y="263" width="80" height="36"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-size:14px;color:#1c2b36;line-height:1.4;padding:0 4px;box-sizing:border-box">權限管控</div></foreignObject><rect x="353.5" y="263" width="78" height="36" rx="7" fill="#eaf4ef" stroke="#348a5c" stroke-width="1.6"></rect><foreignObject x="353.5" y="263" width="78" height="36"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-size:14px;color:#1c2b36;line-height:1.4;padding:0 4px;box-sizing:border-box">API 管理</div></foreignObject><rect x="221" y="416" width="121" height="123" rx="7" fill="#fcf0e2"></rect><path d="M 228 416 H 335 A 7 7 0 0 1 342 423 V 448 H 221 V 423 A 7 7 0 0 1 228 416 Z" fill="#f3dbc2"></path><rect x="221" y="416" width="121" height="123" rx="7" fill="none" stroke="#c46e1a" stroke-width="1.6"></rect><line x1="221" y1="448" x2="342" y2="448" stroke="#c46e1a" stroke-width="1"></line><foreignObject x="221" y="416" width="121" height="32"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-weight:bold;font-size:14px;color:#1c2b36">Hapi 應用服務</div></foreignObject><foreignObject x="221" y="448" width="121" height="91"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="font-size:13px;line-height:1.55;padding:6px 9px 4px;text-align:left;color:#1c2b36"><div style="white-space:nowrap">•&nbsp;srv</div><div style="white-space:nowrap">•&nbsp;srvApi</div><div style="white-space:nowrap">•&nbsp;srvBatch</div><div style="white-space:nowrap">•&nbsp;srvProvide</div></div></foreignObject><rect x="222.5" y="569" width="118" height="63" rx="7" fill="#fcf0e2"></rect><path d="M 229.5 569 H 333.5 A 7 7 0 0 1 340.5 576 V 601 H 222.5 V 576 A 7 7 0 0 1 229.5 569 Z" fill="#f3dbc2"></path><rect x="222.5" y="569" width="118" height="63" rx="7" fill="none" stroke="#c46e1a" stroke-width="1.6"></rect><line x1="222.5" y1="601" x2="340.5" y2="601" stroke="#c46e1a" stroke-width="1"></line><foreignObject x="222.5" y="569" width="118" height="32"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-weight:bold;font-size:14px;color:#1c2b36">ORM 層</div></foreignObject><foreignObject x="222.5" y="601" width="118" height="31"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="font-size:13px;line-height:1.55;padding:6px 9px 4px;text-align:left;color:#1c2b36"><div style="white-space:nowrap">•&nbsp;物件關聯對映</div></div></foreignObject><rect x="199" y="662" width="165" height="83" rx="7" fill="#fcf0e2"></rect><path d="M 206 662 H 357 A 7 7 0 0 1 364 669 V 694 H 199 V 669 A 7 7 0 0 1 206 662 Z" fill="#f3dbc2"></path><rect x="199" y="662" width="165" height="83" rx="7" fill="none" stroke="#c46e1a" stroke-width="1.6"></rect><line x1="199" y1="694" x2="364" y2="694" stroke="#c46e1a" stroke-width="1"></line><foreignObject x="199" y="662" width="165" height="32"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-weight:bold;font-size:14px;color:#1c2b36">資料庫</div></foreignObject><foreignObject x="199" y="694" width="165" height="51"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="font-size:13px;line-height:1.55;padding:6px 9px 4px;text-align:left;color:#1c2b36"><div style="white-space:nowrap">•&nbsp;LMDB</div><div style="white-space:nowrap">•&nbsp;可切換 SQL Server 等</div></div></foreignObject></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="702" height="538" viewBox="-18 -18 702 538" style="background:#fff"><rect x="188" y="12" width="290" height="159" rx="8" fill="#f5f9fe" fill-opacity="0.38" stroke="#3f6fb0" stroke-width="2"></rect><foreignObject x="298.5" y="17" width="69" height="33"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="text-align:center;font-weight:bold;font-size:15px;color:#3f6fb0;line-height:1.3">前端層</div></foreignObject><rect x="156.5" y="205" width="353" height="92" rx="8" fill="#f0f7f3" fill-opacity="0.38" stroke="#348a5c" stroke-width="2"></rect><foreignObject x="276" y="210" width="114" height="33"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="text-align:center;font-weight:bold;font-size:15px;color:#348a5c;line-height:1.3">前後端介面層</div></foreignObject><rect x="12" y="331" width="642" height="159" rx="8" fill="#fdf6ec" fill-opacity="0.38" stroke="#c46e1a" stroke-width="2"></rect><foreignObject x="298.5" y="336" width="69" height="33"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="text-align:center;font-weight:bold;font-size:15px;color:#c46e1a;line-height:1.3">後端層</div></foreignObject><path d="M 333 171 L 333 205" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 333 205 L 337 196 L 329 196 Z" fill="#44505a"></path><path d="M 333 297 L 333 331" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 333 331 L 337 322 L 329 322 Z" fill="#44505a"></path><rect x="202" y="54" width="109" height="36" rx="7" fill="#eef4fb" stroke="#3f6fb0" stroke-width="1.6"></rect><foreignObject x="202" y="54" width="109" height="36"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-size:14px;color:#1c2b36;line-height:1.4;padding:0 4px;box-sizing:border-box">Vue 應用服務</div></foreignObject><rect x="339" y="54" width="125" height="103" rx="7" fill="#eef4fb"></rect><path d="M 346 54 H 457 A 7 7 0 0 1 464 61 V 86 H 339 V 61 A 7 7 0 0 1 346 54 Z" fill="#d2dfef"></path><rect x="339" y="54" width="125" height="103" rx="7" fill="none" stroke="#3f6fb0" stroke-width="1.6"></rect><line x1="339" y1="86" x2="464" y2="86" stroke="#3f6fb0" stroke-width="1"></line><foreignObject x="339" y="54" width="125" height="32"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-weight:bold;font-size:14px;color:#1c2b36">前端共用</div></foreignObject><foreignObject x="339" y="86" width="125" height="71"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="font-size:13px;line-height:1.55;padding:6px 9px 4px;text-align:left;color:#1c2b36"><div style="white-space:nowrap">•&nbsp;通用組件</div><div style="white-space:nowrap">•&nbsp;資料驅動框架</div><div style="white-space:nowrap">•&nbsp;狀態管理 Vuex</div></div></foreignObject><rect x="170.5" y="247" width="111" height="36" rx="7" fill="#eaf4ef" stroke="#348a5c" stroke-width="1.6"></rect><foreignObject x="170.5" y="247" width="111" height="36"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-size:14px;color:#1c2b36;line-height:1.4;padding:0 4px;box-sizing:border-box">單一登入 SSO</div></foreignObject><rect x="309.5" y="247" width="80" height="36" rx="7" fill="#eaf4ef" stroke="#348a5c" stroke-width="1.6"></rect><foreignObject x="309.5" y="247" width="80" height="36"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-size:14px;color:#1c2b36;line-height:1.4;padding:0 4px;box-sizing:border-box">權限管控</div></foreignObject><rect x="417.5" y="247" width="78" height="36" rx="7" fill="#eaf4ef" stroke="#348a5c" stroke-width="1.6"></rect><foreignObject x="417.5" y="247" width="78" height="36"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-size:14px;color:#1c2b36;line-height:1.4;padding:0 4px;box-sizing:border-box">API 管理</div></foreignObject><rect x="26" y="373" width="115" height="36" rx="7" fill="#fcf0e2" stroke="#c46e1a" stroke-width="1.6"></rect><foreignObject x="26" y="373" width="115" height="36"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-size:14px;color:#1c2b36;line-height:1.4;padding:0 4px;box-sizing:border-box">Hapi 應用服務</div></foreignObject><rect x="169" y="373" width="92" height="103" rx="7" fill="#fcf0e2"></rect><path d="M 176 373 H 254 A 7 7 0 0 1 261 380 V 405 H 169 V 380 A 7 7 0 0 1 176 373 Z" fill="#f3dbc2"></path><rect x="169" y="373" width="92" height="103" rx="7" fill="none" stroke="#c46e1a" stroke-width="1.6"></rect><line x1="169" y1="405" x2="261" y2="405" stroke="#c46e1a" stroke-width="1"></line><foreignObject x="169" y="373" width="92" height="32"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-weight:bold;font-size:14px;color:#1c2b36">中間服務</div></foreignObject><foreignObject x="169" y="405" width="92" height="71"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="font-size:13px;line-height:1.55;padding:6px 9px 4px;text-align:left;color:#1c2b36"><div style="white-space:nowrap">•&nbsp;佇列</div><div style="white-space:nowrap">•&nbsp;消息通知</div><div style="white-space:nowrap">•&nbsp;事件紀錄</div></div></foreignObject><rect x="289" y="373" width="158" height="83" rx="7" fill="#fcf0e2"></rect><path d="M 296 373 H 440 A 7 7 0 0 1 447 380 V 405 H 289 V 380 A 7 7 0 0 1 296 373 Z" fill="#f3dbc2"></path><rect x="289" y="373" width="158" height="83" rx="7" fill="none" stroke="#c46e1a" stroke-width="1.6"></rect><line x1="289" y1="405" x2="447" y2="405" stroke="#c46e1a" stroke-width="1"></line><foreignObject x="289" y="373" width="158" height="32"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-weight:bold;font-size:14px;color:#1c2b36">基礎服務</div></foreignObject><foreignObject x="289" y="405" width="158" height="51"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="font-size:13px;line-height:1.55;padding:6px 9px 4px;text-align:left;color:#1c2b36"><div style="white-space:nowrap">•&nbsp;檔案儲存 File Server</div><div style="white-space:nowrap">•&nbsp;圖資/靜態資源</div></div></foreignObject><rect x="475" y="373" width="165" height="83" rx="7" fill="#fcf0e2"></rect><path d="M 482 373 H 633 A 7 7 0 0 1 640 380 V 405 H 475 V 380 A 7 7 0 0 1 482 373 Z" fill="#f3dbc2"></path><rect x="475" y="373" width="165" height="83" rx="7" fill="none" stroke="#c46e1a" stroke-width="1.6"></rect><line x1="475" y1="405" x2="640" y2="405" stroke="#c46e1a" stroke-width="1"></line><foreignObject x="475" y="373" width="165" height="32"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-weight:bold;font-size:14px;color:#1c2b36">資料庫</div></foreignObject><foreignObject x="475" y="405" width="165" height="51"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="font-size:13px;line-height:1.55;padding:6px 9px 4px;text-align:left;color:#1c2b36"><div style="white-space:nowrap">•&nbsp;LMDB</div><div style="white-space:nowrap">•&nbsp;可切換 SQL Server 等</div></div></foreignObject></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="1007" height="694" viewBox="-18 -18 1007 694" style="background:#fff"><rect x="335" y="170" width="136" height="476" rx="8" fill="#faf7fd" fill-opacity="0.38" stroke="#8163ad" stroke-width="2"></rect><foreignObject x="361" y="175" width="84" height="33"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="text-align:center;font-weight:bold;font-size:15px;color:#8163ad;line-height:1.3">應用系統</div></foreignObject><path d="M 471 408 L 665 408" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 665 408 L 656 404 L 656 412 Z" fill="#44505a"></path><foreignObject x="521.5" y="411" width="81" height="22"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="font-size:12.5px;color:#4a5560;text-shadow:0 0 3px #ffffff,0 0 3px #ffffff,0 0 3px #ffffff,0 0 3px #ffffff;white-space:nowrap">取用詮釋資料</div></foreignObject><path d="M 771 402 L 797 402 L 797 85 L 823 85" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 823 85 L 814 81 L 814 89 Z" fill="#44505a"></path><path d="M 613 76 L 823 76" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 823 76 L 814 72 L 814 80 Z" fill="#44505a"></path><foreignObject x="705.5" y="79" width="31" height="22"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="font-size:12.5px;color:#4a5560;text-shadow:0 0 3px #ffffff,0 0 3px #ffffff,0 0 3px #ffffff,0 0 3px #ffffff;white-space:nowrap">匯入</div></foreignObject><path d="M 162 328.66666666666663 L 335 328.66666666666663" fill="none" stroke="#44505a" stroke-width="2" stroke-dasharray="6 4"></path><path d="M 335 328.66666666666663 L 326 324.66666666666663 L 326 332.66666666666663 Z" fill="#44505a"></path><foreignObject x="244.5" y="331.66666666666663" width="56" height="22"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="font-size:12.5px;color:#4a5560;text-shadow:0 0 3px #ffffff,0 0 3px #ffffff,0 0 3px #ffffff,0 0 3px #ffffff;white-space:nowrap">共用驗證</div></foreignObject><path d="M 162 310.66666666666663 L 188 310.66666666666663 L 188 33 L 797 33 L 797 67 L 823 67" fill="none" stroke="#44505a" stroke-width="2" stroke-dasharray="6 4"></path><path d="M 823 67 L 814 63 L 814 71 Z" fill="#44505a"></path><foreignObject x="378" y="12" width="56" height="22"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="font-size:12.5px;color:#4a5560;text-shadow:0 0 3px #ffffff,0 0 3px #ffffff,0 0 3px #ffffff,0 0 3px #ffffff;white-space:nowrap">共用驗證</div></foreignObject><path d="M 162 319.66666666666663 L 212 319.66666666666663 L 212 118 L 639 118 L 639 396 L 665 396" fill="none" stroke="#44505a" stroke-width="2" stroke-dasharray="6 4"></path><path d="M 665 396 L 656 392 L 656 400 Z" fill="#44505a"></path><foreignObject x="378" y="121" width="56" height="22"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="font-size:12.5px;color:#4a5560;text-shadow:0 0 3px #ffffff,0 0 3px #ffffff,0 0 3px #ffffff,0 0 3px #ffffff;white-space:nowrap">共用驗證</div></foreignObject><path d="M 162 487.3333333333333 L 335 487.3333333333333" fill="none" stroke="#44505a" stroke-width="2" stroke-dasharray="6 4"></path><path d="M 335 487.3333333333333 L 326 483.3333333333333 L 326 491.3333333333333 Z" fill="#44505a"></path><foreignObject x="238" y="490.3333333333333" width="69" height="22"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="font-size:12.5px;color:#4a5560;text-shadow:0 0 3px #ffffff,0 0 3px #ffffff,0 0 3px #ffffff,0 0 3px #ffffff;white-space:nowrap">跨系統調閱</div></foreignObject><rect x="370" y="212" width="66" height="36" rx="7" fill="#f4f0fa" stroke="#8163ad" stroke-width="1.6"></rect><foreignObject x="370" y="212" width="66" height="36"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-size:14px;color:#23303a;line-height:1.4;padding:0 4px;box-sizing:border-box">GIS2D</div></foreignObject><rect x="370" y="276" width="66" height="36" rx="7" fill="#f4f0fa" stroke="#8163ad" stroke-width="1.6"></rect><foreignObject x="370" y="276" width="66" height="36"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-size:14px;color:#23303a;line-height:1.4;padding:0 4px;box-sizing:border-box">GIS3D</div></foreignObject><rect x="363" y="340" width="80" height="36" rx="7" fill="#f4f0fa" stroke="#8163ad" stroke-width="1.6"></rect><foreignObject x="363" y="340" width="80" height="36"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-size:14px;color:#23303a;line-height:1.4;padding:0 4px;box-sizing:border-box">需求管理</div></foreignObject><rect x="363" y="404" width="80" height="36" rx="7" fill="#f4f0fa" stroke="#8163ad" stroke-width="1.6"></rect><foreignObject x="363" y="404" width="80" height="36"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-size:14px;color:#23303a;line-height:1.4;padding:0 4px;box-sizing:border-box">知識管理</div></foreignObject><rect x="349" y="468" width="108" height="36" rx="7" fill="#f4f0fa" stroke="#8163ad" stroke-width="1.6"></rect><foreignObject x="349" y="468" width="108" height="36"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-size:14px;color:#23303a;line-height:1.4;padding:0 4px;box-sizing:border-box">特徵事件作用</div></foreignObject><rect x="349" y="532" width="108" height="36" rx="7" fill="#f4f0fa" stroke="#8163ad" stroke-width="1.6"></rect><foreignObject x="349" y="532" width="108" height="36"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-size:14px;color:#23303a;line-height:1.4;padding:0 4px;box-sizing:border-box">評估模式流程</div></foreignObject><rect x="377" y="596" width="52" height="36" rx="7" fill="#f4f0fa" stroke="#8163ad" stroke-width="1.6"></rect><foreignObject x="377" y="596" width="52" height="36"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-size:14px;color:#23303a;line-height:1.4;padding:0 4px;box-sizing:border-box">源項</div></foreignObject><rect x="665" y="384" width="106" height="36" rx="7" fill="#eef4fb" stroke="#3f6fb0" stroke-width="1.6"></rect><foreignObject x="665" y="384" width="106" height="36"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-size:14px;color:#1c2b36;line-height:1.4;padding:0 4px;box-sizing:border-box">API 管理系統</div></foreignObject><rect x="823" y="58" width="136" height="36" rx="7" fill="#eef4fb" stroke="#3f6fb0" stroke-width="1.6"></rect><foreignObject x="823" y="58" width="136" height="36"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-size:14px;color:#1c2b36;line-height:1.4;padding:0 4px;box-sizing:border-box">計畫資料管理系統</div></foreignObject><rect x="505" y="58" width="108" height="36" rx="7" fill="#fcf0e2" stroke="#c46e1a" stroke-width="1.6"></rect><foreignObject x="505" y="58" width="108" height="36"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-size:14px;color:#1c2b36;line-height:1.4;padding:0 4px;box-sizing:border-box">批次上傳系統</div></foreignObject><rect x="12" y="301.66666666666663" width="150" height="36" rx="7" fill="#fbecea" stroke="#c0392b" stroke-width="1.6"></rect><foreignObject x="12" y="301.66666666666663" width="150" height="36"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-size:14px;color:#23303a;line-height:1.4;padding:0 4px;box-sizing:border-box">單一登入+權限管理</div></foreignObject><rect x="26" y="469.3333333333333" width="136" height="36" rx="7" fill="#fcf0e2" stroke="#c46e1a" stroke-width="1.6"></rect><foreignObject x="26" y="469.3333333333333" width="136" height="36"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-size:14px;color:#1c2b36;line-height:1.4;padding:0 4px;box-sizing:border-box">輔助網址控制系統</div></foreignObject></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="704" height="1020" viewBox="-18 -18 704 1020" style="background:#fff"><path d="M 78 57.5625 L 112 57.5625" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 112 57.5625 L 103 53.5625 L 103 61.5625 Z" fill="#44505a"></path><path d="M 184 30 L 548 30" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 548 30 L 539 26 L 539 34 Z" fill="#44505a"></path><path d="M 184 33.9375 L 522 33.9375 L 522 96 L 548 96" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 548 96 L 539 92 L 539 100 Z" fill="#44505a"></path><path d="M 184 37.875 L 498 37.875 L 498 162 L 548 162" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 548 162 L 539 158 L 539 166 Z" fill="#44505a"></path><path d="M 184 41.8125 L 474 41.8125 L 474 228 L 548 228" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 548 228 L 539 224 L 539 232 Z" fill="#44505a"></path><path d="M 184 45.75 L 450 45.75 L 450 294 L 548 294" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 548 294 L 539 290 L 539 298 Z" fill="#44505a"></path><path d="M 184 49.6875 L 426 49.6875 L 426 360 L 548 360" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 548 360 L 539 356 L 539 364 Z" fill="#44505a"></path><path d="M 184 53.625 L 402 53.625 L 402 426 L 548 426" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 548 426 L 539 422 L 539 430 Z" fill="#44505a"></path><path d="M 184 57.5625 L 378 57.5625 L 378 492 L 548 492" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 548 492 L 539 488 L 539 496 Z" fill="#44505a"></path><path d="M 184 61.5 L 354 61.5 L 354 558 L 548 558" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 548 558 L 539 554 L 539 562 Z" fill="#44505a"></path><path d="M 184 65.4375 L 330 65.4375 L 330 624 L 548 624" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 548 624 L 539 620 L 539 628 Z" fill="#44505a"></path><path d="M 184 69.375 L 306 69.375 L 306 690 L 548 690" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 548 690 L 539 686 L 539 694 Z" fill="#44505a"></path><path d="M 184 73.3125 L 282 73.3125 L 282 756 L 548 756" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 548 756 L 539 752 L 539 760 Z" fill="#44505a"></path><path d="M 184 77.25 L 258 77.25 L 258 822 L 548 822" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 548 822 L 539 818 L 539 826 Z" fill="#44505a"></path><path d="M 184 81.1875 L 234 81.1875 L 234 888 L 548 888" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 548 888 L 539 884 L 539 892 Z" fill="#44505a"></path><path d="M 184 85.125 L 210 85.125 L 210 954 L 548 954" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 548 954 L 539 950 L 539 958 Z" fill="#44505a"></path><rect x="12" y="26.0625" width="66" height="63" rx="7" fill="#fbecea"></rect><path d="M 19 26.0625 H 71 A 7 7 0 0 1 78 33.0625 V 58.0625 H 12 V 33.0625 A 7 7 0 0 1 19 26.0625 Z" fill="#f2cfcb"></path><rect x="12" y="26.0625" width="66" height="63" rx="7" fill="none" stroke="#c0392b" stroke-width="1.6"></rect><line x1="12" y1="58.0625" x2="78" y2="58.0625" stroke="#c0392b" stroke-width="1"></line><foreignObject x="12" y="26.0625" width="66" height="32"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-weight:bold;font-size:14px;color:#23303a">登入</div></foreignObject><foreignObject x="12" y="58.0625" width="66" height="31"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="font-size:13px;line-height:1.55;padding:6px 9px 4px;text-align:left;color:#23303a"><div style="white-space:nowrap">•&nbsp;SSO</div></div></foreignObject><rect x="112" y="26.0625" width="72" height="63" rx="7" fill="#eef4fb"></rect><path d="M 119 26.0625 H 177 A 7 7 0 0 1 184 33.0625 V 58.0625 H 112 V 33.0625 A 7 7 0 0 1 119 26.0625 Z" fill="#d2dfef"></path><rect x="112" y="26.0625" width="72" height="63" rx="7" fill="none" stroke="#3f6fb0" stroke-width="1.6"></rect><line x1="112" y1="58.0625" x2="184" y2="58.0625" stroke="#3f6fb0" stroke-width="1"></line><foreignObject x="112" y="26.0625" width="72" height="32"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-weight:bold;font-size:14px;color:#1c2b36">主畫面</div></foreignObject><foreignObject x="112" y="58.0625" width="72" height="31"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="font-size:13px;line-height:1.55;padding:6px 9px 4px;text-align:left;color:#1c2b36"><div style="white-space:nowrap">•&nbsp;選單</div></div></foreignObject><rect x="548" y="12" width="80" height="36" rx="7" fill="#f4f0fa" stroke="#8163ad" stroke-width="1.6"></rect><foreignObject x="548" y="12" width="80" height="36"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-size:14px;color:#23303a;line-height:1.4;padding:0 4px;box-sizing:border-box">主要資訊</div></foreignObject><rect x="548" y="78" width="108" height="36" rx="7" fill="#f4f0fa" stroke="#8163ad" stroke-width="1.6"></rect><foreignObject x="548" y="78" width="108" height="36"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-size:14px;color:#23303a;line-height:1.4;padding:0 4px;box-sizing:border-box">計畫資料管理</div></foreignObject><rect x="548" y="144" width="108" height="36" rx="7" fill="#f4f0fa" stroke="#8163ad" stroke-width="1.6"></rect><foreignObject x="548" y="144" width="108" height="36"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-size:14px;color:#23303a;line-height:1.4;padding:0 4px;box-sizing:border-box">輔助參考文獻</div></foreignObject><rect x="548" y="210" width="80" height="36" rx="7" fill="#f4f0fa" stroke="#8163ad" stroke-width="1.6"></rect><foreignObject x="548" y="210" width="80" height="36"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-size:14px;color:#23303a;line-height:1.4;padding:0 4px;box-sizing:border-box">需求管理</div></foreignObject><rect x="548" y="276" width="80" height="36" rx="7" fill="#f4f0fa" stroke="#8163ad" stroke-width="1.6"></rect><foreignObject x="548" y="276" width="80" height="36"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-size:14px;color:#23303a;line-height:1.4;padding:0 4px;box-sizing:border-box">知識管理</div></foreignObject><rect x="548" y="342" width="108" height="36" rx="7" fill="#f4f0fa" stroke="#8163ad" stroke-width="1.6"></rect><foreignObject x="548" y="342" width="108" height="36"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-size:14px;color:#23303a;line-height:1.4;padding:0 4px;box-sizing:border-box">特徵事件作用</div></foreignObject><rect x="548" y="408" width="108" height="36" rx="7" fill="#f4f0fa" stroke="#8163ad" stroke-width="1.6"></rect><foreignObject x="548" y="408" width="108" height="36"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-size:14px;color:#23303a;line-height:1.4;padding:0 4px;box-sizing:border-box">評估模式流程</div></foreignObject><rect x="548" y="474" width="52" height="36" rx="7" fill="#f4f0fa" stroke="#8163ad" stroke-width="1.6"></rect><foreignObject x="548" y="474" width="52" height="36"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-size:14px;color:#23303a;line-height:1.4;padding:0 4px;box-sizing:border-box">源項</div></foreignObject><rect x="548" y="540" width="66" height="36" rx="7" fill="#f4f0fa" stroke="#8163ad" stroke-width="1.6"></rect><foreignObject x="548" y="540" width="66" height="36"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-size:14px;color:#23303a;line-height:1.4;padding:0 4px;box-sizing:border-box">GIS2D</div></foreignObject><rect x="548" y="606" width="66" height="36" rx="7" fill="#f4f0fa" stroke="#8163ad" stroke-width="1.6"></rect><foreignObject x="548" y="606" width="66" height="36"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-size:14px;color:#23303a;line-height:1.4;padding:0 4px;box-sizing:border-box">GIS3D</div></foreignObject><rect x="548" y="672" width="80" height="36" rx="7" fill="#f4f0fa" stroke="#8163ad" stroke-width="1.6"></rect><foreignObject x="548" y="672" width="80" height="36"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-size:14px;color:#23303a;line-height:1.4;padding:0 4px;box-sizing:border-box">模板下載</div></foreignObject><rect x="548" y="738" width="80" height="36" rx="7" fill="#f4f0fa" stroke="#8163ad" stroke-width="1.6"></rect><foreignObject x="548" y="738" width="80" height="36"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-size:14px;color:#23303a;line-height:1.4;padding:0 4px;box-sizing:border-box">輔助工具</div></foreignObject><rect x="548" y="804" width="80" height="36" rx="7" fill="#f4f0fa" stroke="#8163ad" stroke-width="1.6"></rect><foreignObject x="548" y="804" width="80" height="36"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-size:14px;color:#23303a;line-height:1.4;padding:0 4px;box-sizing:border-box">批次上傳</div></foreignObject><rect x="548" y="870" width="78" height="36" rx="7" fill="#f4f0fa" stroke="#8163ad" stroke-width="1.6"></rect><foreignObject x="548" y="870" width="78" height="36"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-size:14px;color:#23303a;line-height:1.4;padding:0 4px;box-sizing:border-box">API 管理</div></foreignObject><rect x="548" y="936" width="80" height="36" rx="7" fill="#f4f0fa" stroke="#8163ad" stroke-width="1.6"></rect><foreignObject x="548" y="936" width="80" height="36"><div xmlns="http://www.w3.org/1999/xhtml" class="lbl" style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-size:14px;color:#23303a;line-height:1.4;padding:0 4px;box-sizing:border-box">後台管理</div></foreignObject></svg>
@@ -0,0 +1,41 @@
1
+ // WFlowchart 統一入口(mocha) — p1~p10 各以真圖數據渲染一張, 驗 PNG 合法性; 並驗入參檢查與 inp 不可變
2
+ import assert from 'assert'
3
+ import fs from 'fs'
4
+ import { fileURLToPath } from 'url'
5
+ import { dirname, resolve } from 'path'
6
+ import WFlowchart from '../src/WFlowchart.mjs'
7
+
8
+ const __dir = dirname(fileURLToPath(import.meta.url))
9
+ const inp = JSON.parse(fs.readFileSync(resolve(__dir, 'data', '系統架構圖.json'), 'utf8'))
10
+
11
+ const isPng = (buf) => Buffer.isBuffer(buf) && buf[0] === 0x89 && buf[1] === 0x50 && buf[2] === 0x4e && buf[3] === 0x47
12
+
13
+ describe('WFlowchart(mode, inp) → PNG Buffer', function() {
14
+
15
+ for (let i = 1; i <= 10; i++) {
16
+ const m = 'p' + i
17
+ it(`${m} 產出合法 PNG`, async function() {
18
+ const buf = await WFlowchart(m, inp)
19
+ assert.ok(isPng(buf), '非合法 PNG Buffer')
20
+ assert.ok(buf.length > 10000, 'PNG 過小: ' + buf.length)
21
+ })
22
+ }
23
+
24
+ it('拒絕非法 mode', async function() {
25
+ await assert.rejects(() => WFlowchart('p99', inp), /invalid mode/)
26
+ await assert.rejects(() => WFlowchart(123, inp), /invalid mode/)
27
+ })
28
+
29
+ it('拒絕非法 inp', async function() {
30
+ await assert.rejects(() => WFlowchart('p1', {}), /invalid inp/)
31
+ await assert.rejects(() => WFlowchart('p1', { dir: 'TB', nodes: [], edges: [] }), /invalid inp/)
32
+ await assert.rejects(() => WFlowchart('p1', { dir: 'TB', nodes: [{ id: 'a', label: 'A', cls: 'blue' }] }), /invalid inp/)
33
+ })
34
+
35
+ it('不改動 caller 傳入之 inp', async function() {
36
+ const snap = JSON.stringify(inp)
37
+ await WFlowchart('p10', inp)
38
+ assert.strictEqual(JSON.stringify(inp), snap)
39
+ })
40
+
41
+ })
@@ -0,0 +1,4 @@
1
+ import addVersion from 'w-package-tools/src/addVersion.mjs'
2
+
3
+
4
+ addVersion()
@@ -0,0 +1,4 @@
1
+ import cleanFolder from 'w-package-tools/src/cleanFolder.mjs'
2
+
3
+
4
+ cleanFolder('docs')
@@ -0,0 +1,51 @@
1
+ import path from 'path'
2
+ import rollupFiles from 'w-package-tools/src/rollupFiles.mjs'
3
+ import rollupWorker from 'w-package-tools/src/rollupWorker.mjs'
4
+
5
+
6
+ let fdSrc = './src'
7
+ let fdTar = './dist'
8
+
9
+ async function core() {
10
+
11
+ await rollupFiles({ //rollupFiles預設會clean folder
12
+ fns: 'WFlowchart.mjs',
13
+ fdSrc,
14
+ fdTar,
15
+ nameDistType: 'kebabCase',
16
+ globals: {
17
+ '@terrastruct/d2': '@terrastruct/d2',
18
+ 'playwright': 'playwright',
19
+ 'sharp': 'sharp',
20
+ },
21
+ external: [ //繪圖庫多為 fs 直讀內聯注入頁面(非 import), 仍列 external 保險, 避免任何路徑被打包進 dist
22
+ '@terrastruct/d2',
23
+ 'playwright',
24
+ 'sharp',
25
+ 'mermaid10',
26
+ 'mermaid11',
27
+ '@mermaid-js/layout-elk',
28
+ 'nomnoml',
29
+ 'graphre',
30
+ 'cytoscape',
31
+ 'cytoscape-dagre',
32
+ 'dagre',
33
+ '@antv/g6',
34
+ '@joint/core',
35
+ '@logicflow/core',
36
+ 'react',
37
+ 'react-dom',
38
+ '@xyflow/react',
39
+ '@dagrejs/dagre',
40
+ 'elkjs',
41
+ ],
42
+ })
43
+ .catch((err) => {
44
+ console.log(err)
45
+ })
46
+
47
+ }
48
+ core()
49
+ .catch((err) => {
50
+ console.log(err)
51
+ })
@@ -0,0 +1,4 @@
1
+ import modifyReadme from 'w-package-tools/src/modifyReadme.mjs'
2
+
3
+
4
+ modifyReadme()