w-flowchart 1.0.2 → 1.0.4

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 (103) hide show
  1. package/README.md +2 -0
  2. package/dist/w-flowchart.umd.js +2 -2
  3. package/dist/w-flowchart.umd.js.map +1 -1
  4. package/docs/WFlowchart.mjs.html +3 -3
  5. package/docs/global.html +3 -3
  6. package/docs/index.html +1 -1
  7. package/package.json +3 -22
  8. package/src/WFlowchart.mjs +2 -2
  9. package/src/common/cdn.mjs +72 -0
  10. package/src/p1/README.md +1 -1
  11. package/src/p1/gen.mjs +11 -8
  12. package/src/p10/README.md +1 -1
  13. package/src/p10/gen.mjs +11 -11
  14. package/src/p2/README.md +2 -2
  15. package/src/p2/gen.mjs +6 -20
  16. package/src/p3/README.md +2 -2
  17. package/src/p3/gen.mjs +18 -14
  18. package/src/p4/README.md +2 -2
  19. package/src/p4/gen.mjs +7 -11
  20. package/src/p5/gen.mjs +2 -2
  21. package/src/p6/README.md +1 -1
  22. package/src/p6/gen.mjs +6 -9
  23. package/src/p7/README.md +2 -2
  24. package/src/p7/gen.mjs +18 -15
  25. package/src/p8/README.md +2 -2
  26. package/src/p8/gen.mjs +11 -11
  27. package/src/p9/README.md +1 -1
  28. package/src/p9/gen.mjs +8 -8
  29. package/src/p9/page9.html +1 -1
  30. package/test/cases.mjs +82 -1
  31. package/test/pics/p1/newline-label.png +0 -0
  32. package/test/pics/p1/newline-lr.png +0 -0
  33. package/test/pics/p1/newline-multi.png +0 -0
  34. package/test/pics/p10/cycle.svg +1 -1
  35. package/test/pics/p10/deep-nest.svg +1 -1
  36. package/test/pics/p10/dia-1in-1out.svg +1 -1
  37. package/test/pics/p10/dia-1in-2out.svg +1 -1
  38. package/test/pics/p10/dia-1in.svg +1 -1
  39. package/test/pics/p10/dia-1out.svg +1 -1
  40. package/test/pics/p10/dia-2in-1out.svg +1 -1
  41. package/test/pics/p10/dia-2in-2out-dd.svg +1 -1
  42. package/test/pics/p10/dia-2in-2out-ss.svg +1 -1
  43. package/test/pics/p10/dia-2in.svg +1 -1
  44. package/test/pics/p10/dia-2out.svg +1 -1
  45. package/test/pics/p10/diamond.svg +1 -1
  46. package/test/pics/p10/edges-mix.svg +1 -1
  47. package/test/pics/p10/english.svg +1 -1
  48. package/test/pics/p10/flat-tb.svg +1 -1
  49. package/test/pics/p10/fold-tall.svg +1 -1
  50. package/test/pics/p10/fold-wide.svg +1 -1
  51. package/test/pics/p10/group-edge.svg +1 -1
  52. package/test/pics/p10/items-node.svg +1 -1
  53. package/test/pics/p10/long-label.svg +1 -1
  54. package/test/pics/p10/lr-flat.svg +1 -1
  55. package/test/pics/p10/nested-group.svg +1 -1
  56. package/test/pics/p10/newline-label.png +0 -0
  57. package/test/pics/p10/newline-label.svg +5 -0
  58. package/test/pics/p10/newline-lr.png +0 -0
  59. package/test/pics/p10/newline-lr.svg +7 -0
  60. package/test/pics/p10/newline-multi.png +0 -0
  61. package/test/pics/p10/newline-multi.svg +7 -0
  62. package/test/pics/p10/no-edges.svg +1 -1
  63. package/test/pics/p10/title-overflow.svg +1 -1
  64. package/test/pics/p10/valign.svg +1 -1
  65. package/test/pics/p10//345/267/245/345/226/256/350/231/225/347/220/206/346/265/201/347/250/213/345/234/226.svg +1 -1
  66. package/test/pics/p10//345/276/256/346/234/215/345/213/231/345/217/242/351/233/206/346/236/266/346/247/213/345/234/226.svg +1 -1
  67. package/test/pics/p10//346/234/203/345/223/241/350/250/273/345/206/212/346/265/201/347/250/213/345/234/226.svg +1 -1
  68. package/test/pics/p10//346/250/241/347/265/204/347/265/204/346/210/220/345/234/226.svg +1 -1
  69. package/test/pics/p10//346/254/212/351/231/220/350/247/222/350/211/262/351/227/234/350/201/257/345/234/226.svg +1 -1
  70. package/test/pics/p10//347/211/251/350/201/257/347/266/262/345/271/263/345/217/260/346/236/266/346/247/213/345/234/226.svg +1 -1
  71. package/test/pics/p10//347/263/273/347/265/261/345/210/206/345/261/244/346/236/266/346/247/213/345/234/226.svg +1 -1
  72. package/test/pics/p10//350/250/202/345/226/256/350/231/225/347/220/206/346/265/201/347/250/213/345/234/226.svg +1 -1
  73. package/test/pics/p10//350/263/207/346/226/231/346/265/201/345/220/221/345/234/226.svg +1 -1
  74. package/test/pics/p10//350/263/207/346/226/231/346/270/205/346/264/227/346/265/201/347/250/213/345/234/226.svg +1 -1
  75. package/test/pics/p10//351/233/273/345/225/206/345/271/263/345/217/260/346/236/266/346/247/213/345/234/226.svg +1 -1
  76. package/test/pics/p10//351/240/201/351/235/242/345/260/216/350/246/275/351/227/234/350/201/257/345/234/226.svg +1 -1
  77. package/test/pics/p2/newline-label.png +0 -0
  78. package/test/pics/p2/newline-lr.png +0 -0
  79. package/test/pics/p2/newline-multi.png +0 -0
  80. package/test/pics/p3/newline-label.png +0 -0
  81. package/test/pics/p3/newline-lr.png +0 -0
  82. package/test/pics/p3/newline-multi.png +0 -0
  83. package/test/pics/p4/newline-label.png +0 -0
  84. package/test/pics/p4/newline-lr.png +0 -0
  85. package/test/pics/p4/newline-multi.png +0 -0
  86. package/test/pics/p5/newline-label.png +0 -0
  87. package/test/pics/p5/newline-lr.png +0 -0
  88. package/test/pics/p5/newline-multi.png +0 -0
  89. package/test/pics/p6/newline-label.png +0 -0
  90. package/test/pics/p6/newline-lr.png +0 -0
  91. package/test/pics/p6/newline-multi.png +0 -0
  92. package/test/pics/p7/newline-label.png +0 -0
  93. package/test/pics/p7/newline-lr.png +0 -0
  94. package/test/pics/p7/newline-multi.png +0 -0
  95. package/test/pics/p8/newline-label.png +0 -0
  96. package/test/pics/p8/newline-lr.png +0 -0
  97. package/test/pics/p8/newline-multi.png +0 -0
  98. package/test/pics/p9/newline-label.png +0 -0
  99. package/test/pics/p9/newline-lr.png +0 -0
  100. package/test/pics/p9/newline-multi.png +0 -0
  101. package/toolg/gDistRollup.mjs +1 -20
  102. package/src/common/pkg.mjs +0 -31
  103. package/test/pics/p6//347/211/251/350/201/257/347/266/262/345/271/263/345/217/260/346/236/266/346/247/213/345/234/226.new.png +0 -0
@@ -1 +1 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" width="555" height="826" viewBox="-18 -18 555 826" style="background:#fff"><rect x="30" y="12" width="358" height="159" rx="8" fill="#f5f9fe" fill-opacity="0.38" stroke="#3f6fb0" stroke-width="2"></rect><foreignObject x="174.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;overflow-wrap:break-word;word-break:normal">前台層</div></foreignObject><rect x="53" y="339" width="454" height="159" rx="8" fill="#f0f7f3" fill-opacity="0.38" stroke="#348a5c" stroke-width="2"></rect><foreignObject x="245.5" y="344" 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;overflow-wrap:break-word;word-break:normal">服務層</div></foreignObject><rect x="170" y="666" width="310" height="112" rx="8" fill="#fdf6ec" fill-opacity="0.38" stroke="#c46e1a" stroke-width="2"></rect><foreignObject x="290.5" y="671" 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;overflow-wrap:break-word;word-break:normal">資料層</div></foreignObject><path d="M 138 171 L 138 208 L 137 208 L 137 278 L 106 278 L 106 339" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 106 339 L 110 330 L 102 330 Z" fill="#44505a"></path><foreignObject x="85" y="234" 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 463 498 L 463 535 L 474 535 L 474 605 L 436 605 L 436 666" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 436 666 L 440 657 L 432 657 Z" fill="#44505a"></path><foreignObject x="422" y="561" 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 84 90 L 84 208 L 62 208 L 62 278 L 93 278 L 93 381" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 93 381 L 97 372 L 89 372 Z" fill="#44505a"></path><foreignObject x="12" y="234" width="54" 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">呼叫 API</div></foreignObject><path d="M 192 90 L 192 208 L 210 208 L 210 302 L 119 302 L 119 381" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 119 381 L 123 372 L 115 372 Z" fill="#44505a"></path><foreignObject x="160" y="234" width="54" 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">呼叫 API</div></foreignObject><path d="M 203.66666666666666 484 L 203.66666666666669 535 L 215.33333333333334 535 L 215.33333333333334 728" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 215.33333333333334 728 L 219.33333333333334 719 L 211.33333333333334 719 Z" fill="#44505a"></path><path d="M 339 464 L 339 605 L 246.66666666666666 605 L 246.66666666666666 728" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 246.66666666666666 728 L 250.66666666666666 719 L 242.66666666666666 719 Z" fill="#44505a"></path><path d="M 234.33333333333334 484 L 234.33333333333334 535 L 314 535 L 314 629 L 332 629 L 332 728" fill="none" stroke="#44505a" stroke-width="2" stroke-dasharray="6 4"></path><path d="M 332 728 L 336 719 L 328 719 Z" fill="#44505a"></path><foreignObject x="262" y="561" 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 453 417 L 453 535 L 397 535 L 397 605 L 426 605 L 426 728" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 426 728 L 430 719 L 422 719 Z" fill="#44505a"></path><rect x="44" y="54" width="80" height="36" rx="7" fill="#eef4fb" stroke="#3f6fb0" stroke-width="1.6"></rect><foreignObject x="44" y="54" 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 style="width:100%;min-width:0;overflow-wrap:break-word;word-break:normal">網頁前端</div></div></foreignObject><rect x="152" y="54" width="80" height="36" rx="7" fill="#eef4fb" stroke="#3f6fb0" stroke-width="1.6"></rect><foreignObject x="152" y="54" 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 style="width:100%;min-width:0;overflow-wrap:break-word;word-break:normal">行動應用</div></div></foreignObject><rect x="260" y="54" width="114" height="103" rx="7" fill="#eef4fb"></rect><path d="M 267 54 H 367 A 7 7 0 0 1 374 61 V 86 H 260 V 61 A 7 7 0 0 1 267 54 Z" fill="#d2dfef"></path><rect x="260" y="54" width="114" height="103" rx="7" fill="none" stroke="#3f6fb0" stroke-width="1.6"></rect><line x1="260" y1="86" x2="374" y2="86" stroke="#3f6fb0" stroke-width="1"></line><foreignObject x="260" y="54" 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 style="width:100%;min-width:0;overflow-wrap:break-word;word-break:normal">前端共用元件</div></div></foreignObject><foreignObject x="260" y="86" width="114" 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">•&#160;元件庫</div><div style="white-space:nowrap">•&#160;狀態管理</div><div style="white-space:nowrap">•&#160;路由設定</div></div></foreignObject><rect x="67" y="381" width="78" height="36" rx="7" fill="#eaf4ef" stroke="#348a5c" stroke-width="1.6"></rect><foreignObject x="67" y="381" 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"><div style="width:100%;min-width:0;overflow-wrap:break-word;word-break:normal">API 閘道</div></div></foreignObject><rect x="173" y="381" width="92" height="103" rx="7" fill="#eaf4ef"></rect><path d="M 180 381 H 258 A 7 7 0 0 1 265 388 V 413 H 173 V 388 A 7 7 0 0 1 180 381 Z" fill="#cde3d7"></path><rect x="173" y="381" width="92" height="103" rx="7" fill="none" stroke="#348a5c" stroke-width="1.6"></rect><line x1="173" y1="413" x2="265" y2="413" stroke="#348a5c" stroke-width="1"></line><foreignObject x="173" y="381" 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 style="width:100%;min-width:0;overflow-wrap:break-word;word-break:normal">訂單服務</div></div></foreignObject><foreignObject x="173" y="413" 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">•&#160;訂單建立</div><div style="white-space:nowrap">•&#160;訂單查詢</div><div style="white-space:nowrap">•&#160;退款處理</div></div></foreignObject><rect x="293" y="381" width="92" height="83" rx="7" fill="#eaf4ef"></rect><path d="M 300 381 H 378 A 7 7 0 0 1 385 388 V 413 H 293 V 388 A 7 7 0 0 1 300 381 Z" fill="#cde3d7"></path><rect x="293" y="381" width="92" height="83" rx="7" fill="none" stroke="#348a5c" stroke-width="1.6"></rect><line x1="293" y1="413" x2="385" y2="413" stroke="#348a5c" stroke-width="1"></line><foreignObject x="293" y="381" 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 style="width:100%;min-width:0;overflow-wrap:break-word;word-break:normal">會員服務</div></div></foreignObject><foreignObject x="293" y="413" width="92" 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">•&#160;註冊登入</div><div style="white-space:nowrap">•&#160;權限驗證</div></div></foreignObject><rect x="413" y="381" width="80" height="36" rx="7" fill="#eaf4ef" stroke="#348a5c" stroke-width="1.6"></rect><foreignObject x="413" y="381" 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 style="width:100%;min-width:0;overflow-wrap:break-word;word-break:normal">通知服務</div></div></foreignObject><rect x="184" y="728" width="94" height="36" rx="7" fill="#fcf0e2" stroke="#c46e1a" stroke-width="1.6"></rect><foreignObject x="184" y="728" 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 style="width:100%;min-width:0;overflow-wrap:break-word;word-break:normal">主要資料庫</div></div></foreignObject><rect x="306" y="728" width="52" height="36" rx="7" fill="#fcf0e2" stroke="#c46e1a" stroke-width="1.6"></rect><foreignObject x="306" y="728" 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 style="width:100%;min-width:0;overflow-wrap:break-word;word-break:normal">快取</div></div></foreignObject><rect x="386" y="728" width="80" height="36" rx="7" fill="#fcf0e2" stroke="#c46e1a" stroke-width="1.6"></rect><foreignObject x="386" y="728" 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 style="width:100%;min-width:0;overflow-wrap:break-word;word-break:normal">訊息佇列</div></div></foreignObject></svg>
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="555" height="826" viewBox="-18 -18 555 826" style="background:#fff"><rect x="30" y="12" width="358" height="159" rx="8" fill="#f5f9fe" fill-opacity="0.38" stroke="#3f6fb0" stroke-width="2"></rect><foreignObject x="174.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;white-space:pre-line;overflow-wrap:break-word;word-break:normal">前台層</div></foreignObject><rect x="53" y="339" width="454" height="159" rx="8" fill="#f0f7f3" fill-opacity="0.38" stroke="#348a5c" stroke-width="2"></rect><foreignObject x="245.5" y="344" 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;white-space:pre-line;overflow-wrap:break-word;word-break:normal">服務層</div></foreignObject><rect x="170" y="666" width="310" height="112" rx="8" fill="#fdf6ec" fill-opacity="0.38" stroke="#c46e1a" stroke-width="2"></rect><foreignObject x="290.5" y="671" 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;white-space:pre-line;overflow-wrap:break-word;word-break:normal">資料層</div></foreignObject><path d="M 138 171 L 138 208 L 137 208 L 137 278 L 106 278 L 106 339" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 106 339 L 110 330 L 102 330 Z" fill="#44505a"></path><foreignObject x="85" y="234" 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:pre-line">前台請求</div></foreignObject><path d="M 463 498 L 463 535 L 474 535 L 474 605 L 436 605 L 436 666" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 436 666 L 440 657 L 432 657 Z" fill="#44505a"></path><foreignObject x="422" y="561" 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:pre-line">資料存取</div></foreignObject><path d="M 84 90 L 84 208 L 62 208 L 62 278 L 93 278 L 93 381" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 93 381 L 97 372 L 89 372 Z" fill="#44505a"></path><foreignObject x="12" y="234" width="54" 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:pre-line">呼叫 API</div></foreignObject><path d="M 192 90 L 192 208 L 210 208 L 210 302 L 119 302 L 119 381" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 119 381 L 123 372 L 115 372 Z" fill="#44505a"></path><foreignObject x="160" y="234" width="54" 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:pre-line">呼叫 API</div></foreignObject><path d="M 203.66666666666666 484 L 203.66666666666669 535 L 215.33333333333334 535 L 215.33333333333334 728" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 215.33333333333334 728 L 219.33333333333334 719 L 211.33333333333334 719 Z" fill="#44505a"></path><path d="M 339 464 L 339 605 L 246.66666666666666 605 L 246.66666666666666 728" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 246.66666666666666 728 L 250.66666666666666 719 L 242.66666666666666 719 Z" fill="#44505a"></path><path d="M 234.33333333333334 484 L 234.33333333333334 535 L 314 535 L 314 629 L 332 629 L 332 728" fill="none" stroke="#44505a" stroke-width="2" stroke-dasharray="6 4"></path><path d="M 332 728 L 336 719 L 328 719 Z" fill="#44505a"></path><foreignObject x="262" y="561" 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:pre-line">快取查詢</div></foreignObject><path d="M 453 417 L 453 535 L 397 535 L 397 605 L 426 605 L 426 728" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 426 728 L 430 719 L 422 719 Z" fill="#44505a"></path><rect x="44" y="54" width="80" height="36" rx="7" fill="#eef4fb" stroke="#3f6fb0" stroke-width="1.6"></rect><foreignObject x="44" y="54" 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 style="width:100%;min-width:0;white-space:pre-line;overflow-wrap:break-word;word-break:normal">網頁前端</div></div></foreignObject><rect x="152" y="54" width="80" height="36" rx="7" fill="#eef4fb" stroke="#3f6fb0" stroke-width="1.6"></rect><foreignObject x="152" y="54" 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 style="width:100%;min-width:0;white-space:pre-line;overflow-wrap:break-word;word-break:normal">行動應用</div></div></foreignObject><rect x="260" y="54" width="114" height="103" rx="7" fill="#eef4fb"></rect><path d="M 267 54 H 367 A 7 7 0 0 1 374 61 V 86 H 260 V 61 A 7 7 0 0 1 267 54 Z" fill="#d2dfef"></path><rect x="260" y="54" width="114" height="103" rx="7" fill="none" stroke="#3f6fb0" stroke-width="1.6"></rect><line x1="260" y1="86" x2="374" y2="86" stroke="#3f6fb0" stroke-width="1"></line><foreignObject x="260" y="54" 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 style="width:100%;min-width:0;white-space:pre-line;overflow-wrap:break-word;word-break:normal">前端共用元件</div></div></foreignObject><foreignObject x="260" y="86" width="114" 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">•&#160;元件庫</div><div style="white-space:nowrap">•&#160;狀態管理</div><div style="white-space:nowrap">•&#160;路由設定</div></div></foreignObject><rect x="67" y="381" width="78" height="36" rx="7" fill="#eaf4ef" stroke="#348a5c" stroke-width="1.6"></rect><foreignObject x="67" y="381" 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"><div style="width:100%;min-width:0;white-space:pre-line;overflow-wrap:break-word;word-break:normal">API 閘道</div></div></foreignObject><rect x="173" y="381" width="92" height="103" rx="7" fill="#eaf4ef"></rect><path d="M 180 381 H 258 A 7 7 0 0 1 265 388 V 413 H 173 V 388 A 7 7 0 0 1 180 381 Z" fill="#cde3d7"></path><rect x="173" y="381" width="92" height="103" rx="7" fill="none" stroke="#348a5c" stroke-width="1.6"></rect><line x1="173" y1="413" x2="265" y2="413" stroke="#348a5c" stroke-width="1"></line><foreignObject x="173" y="381" 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 style="width:100%;min-width:0;white-space:pre-line;overflow-wrap:break-word;word-break:normal">訂單服務</div></div></foreignObject><foreignObject x="173" y="413" 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">•&#160;訂單建立</div><div style="white-space:nowrap">•&#160;訂單查詢</div><div style="white-space:nowrap">•&#160;退款處理</div></div></foreignObject><rect x="293" y="381" width="92" height="83" rx="7" fill="#eaf4ef"></rect><path d="M 300 381 H 378 A 7 7 0 0 1 385 388 V 413 H 293 V 388 A 7 7 0 0 1 300 381 Z" fill="#cde3d7"></path><rect x="293" y="381" width="92" height="83" rx="7" fill="none" stroke="#348a5c" stroke-width="1.6"></rect><line x1="293" y1="413" x2="385" y2="413" stroke="#348a5c" stroke-width="1"></line><foreignObject x="293" y="381" 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 style="width:100%;min-width:0;white-space:pre-line;overflow-wrap:break-word;word-break:normal">會員服務</div></div></foreignObject><foreignObject x="293" y="413" width="92" 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">•&#160;註冊登入</div><div style="white-space:nowrap">•&#160;權限驗證</div></div></foreignObject><rect x="413" y="381" width="80" height="36" rx="7" fill="#eaf4ef" stroke="#348a5c" stroke-width="1.6"></rect><foreignObject x="413" y="381" 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 style="width:100%;min-width:0;white-space:pre-line;overflow-wrap:break-word;word-break:normal">通知服務</div></div></foreignObject><rect x="184" y="728" width="94" height="36" rx="7" fill="#fcf0e2" stroke="#c46e1a" stroke-width="1.6"></rect><foreignObject x="184" y="728" 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 style="width:100%;min-width:0;white-space:pre-line;overflow-wrap:break-word;word-break:normal">主要資料庫</div></div></foreignObject><rect x="306" y="728" width="52" height="36" rx="7" fill="#fcf0e2" stroke="#c46e1a" stroke-width="1.6"></rect><foreignObject x="306" y="728" 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 style="width:100%;min-width:0;white-space:pre-line;overflow-wrap:break-word;word-break:normal">快取</div></div></foreignObject><rect x="386" y="728" width="80" height="36" rx="7" fill="#fcf0e2" stroke="#c46e1a" stroke-width="1.6"></rect><foreignObject x="386" y="728" 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 style="width:100%;min-width:0;white-space:pre-line;overflow-wrap:break-word;word-break:normal">訊息佇列</div></div></foreignObject></svg>
@@ -1 +1 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" width="600" height="852" viewBox="-18 -18 600 852" style="background:#fff"><rect x="12" y="12" width="539.5" height="501" rx="8" fill="#faf7fd" fill-opacity="0.38" stroke="#8163ad" stroke-width="2"></rect><foreignObject x="239.75" 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:#8163ad;line-height:1.3;overflow-wrap:break-word;word-break:normal">入口網站</div></foreignObject><rect x="26" y="54" width="108" height="434" rx="8" fill="#eef4fb" fill-opacity="0.38" stroke="#3f6fb0" stroke-width="2"></rect><foreignObject x="30.5" y="59" width="99" 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;overflow-wrap:break-word;word-break:normal">商品瀏覽區</div></foreignObject><rect x="162" y="168" width="213" height="320" rx="8" fill="#eaf4ef" fill-opacity="0.38" stroke="#348a5c" stroke-width="2"></rect><foreignObject x="226.5" y="173" 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;overflow-wrap:break-word;word-break:normal">會員專區</div></foreignObject><rect x="403" y="54" width="134.5" height="434" rx="8" fill="#fdf6ec" fill-opacity="0.38" stroke="#c46e1a" stroke-width="2"></rect><foreignObject x="428.25" 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:#c46e1a;line-height:1.3;overflow-wrap:break-word;word-break:normal">購物流程</div></foreignObject><path d="M 80 132 L 80 210" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 80 210 L 84 201 L 76 201 Z" fill="#44505a"></path><foreignObject x="53" y="162" 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 80 246 L 80 324" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 80 324 L 84 315 L 76 315 Z" fill="#44505a"></path><foreignObject x="53" y="276" 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 80 360 L 80 438" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 80 438 L 84 429 L 76 429 Z" fill="#44505a"></path><foreignObject x="53" y="390" 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 293.5 246 L 293.5 264 L 209 264 L 209 324" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 209 324 L 213 315 L 205 315 Z" fill="#44505a"></path><foreignObject x="182" y="276" 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 310 246 L 310 324" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 310 324 L 314 315 L 306 315 Z" fill="#44505a"></path><foreignObject x="258" y="276" 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 310 360 L 310 438" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 310 438 L 314 429 L 306 429 Z" fill="#44505a"></path><foreignObject x="283" y="390" 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 479.5 132 L 479.5 150 L 469 150 L 469 210" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 469 210 L 473 201 L 465 201 Z" fill="#44505a"></path><foreignObject x="442" y="162" 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 469 246 L 469 324" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 469 324 L 473 315 L 465 315 Z" fill="#44505a"></path><foreignObject x="442" y="276" 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 469 360 L 469 438" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 469 438 L 473 429 L 465 429 Z" fill="#44505a"></path><foreignObject x="417" y="390" 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 80 474 L 80 550 L 182.5 550 L 182.5 620 L 343.5 620 L 343.5 646" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 343.5 646 L 347.5 637 L 339.5 637 Z" fill="#44505a"></path><foreignObject x="155.5" y="576" 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 326.5 246 L 326.5 264 L 360 264 L 360 646" fill="none" stroke="#44505a" stroke-width="2" stroke-dasharray="6 4"></path><path d="M 360 646 L 364 637 L 356 637 Z" fill="#44505a"></path><foreignObject x="308" y="576" 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 501.5 132 L 501.5 150 L 512 150 L 512 550 L 473.5 550 L 473.5 620 L 376.5 620 L 376.5 646" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 376.5 646 L 380.5 637 L 372.5 637 Z" fill="#44505a"></path><foreignObject x="421.5" y="576" 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 360 682 L 360 768" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 360 768 L 364 759 L 356 759 Z" fill="#44505a"></path><foreignObject x="333" y="716" 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="54" y="96" width="52" height="36" rx="7" fill="#eef4fb" stroke="#3f6fb0" stroke-width="1.6"></rect><foreignObject x="54" y="96" 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 style="width:100%;min-width:0;overflow-wrap:break-word;word-break:normal">首頁</div></div></foreignObject><rect x="40" y="210" width="80" height="36" rx="7" fill="#eef4fb" stroke="#3f6fb0" stroke-width="1.6"></rect><foreignObject x="40" 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:#1c2b36;line-height:1.4;padding:0 4px;box-sizing:border-box"><div style="width:100%;min-width:0;overflow-wrap:break-word;word-break:normal">分類列表</div></div></foreignObject><rect x="40" y="324" width="80" height="36" rx="7" fill="#eef4fb" stroke="#3f6fb0" stroke-width="1.6"></rect><foreignObject x="40" y="324" 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 style="width:100%;min-width:0;overflow-wrap:break-word;word-break:normal">商品清單</div></div></foreignObject><rect x="40" y="438" width="80" height="36" rx="7" fill="#eef4fb" stroke="#3f6fb0" stroke-width="1.6"></rect><foreignObject x="40" y="438" 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 style="width:100%;min-width:0;overflow-wrap:break-word;word-break:normal">商品詳情</div></div></foreignObject><rect x="277" y="210" width="66" height="36" rx="7" fill="#eaf4ef" stroke="#348a5c" stroke-width="1.6"></rect><foreignObject x="277" y="210" 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 style="width:100%;min-width:0;overflow-wrap:break-word;word-break:normal">登入頁</div></div></foreignObject><rect x="176" y="324" width="66" height="36" rx="7" fill="#eaf4ef" stroke="#348a5c" stroke-width="1.6"></rect><foreignObject x="176" y="324" 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 style="width:100%;min-width:0;overflow-wrap:break-word;word-break:normal">註冊頁</div></div></foreignObject><rect x="270" y="324" width="80" height="36" rx="7" fill="#eaf4ef" stroke="#348a5c" stroke-width="1.6"></rect><foreignObject x="270" y="324" 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 style="width:100%;min-width:0;overflow-wrap:break-word;word-break:normal">會員中心</div></div></foreignObject><rect x="270" y="438" width="80" height="36" rx="7" fill="#eaf4ef" stroke="#348a5c" stroke-width="1.6"></rect><foreignObject x="270" y="438" 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 style="width:100%;min-width:0;overflow-wrap:break-word;word-break:normal">訂單紀錄</div></div></foreignObject><rect x="457.5" y="96" width="66" height="36" rx="7" fill="#fcf0e2" stroke="#c46e1a" stroke-width="1.6"></rect><foreignObject x="457.5" y="96" 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 style="width:100%;min-width:0;overflow-wrap:break-word;word-break:normal">購物車</div></div></foreignObject><rect x="436" y="210" width="66" height="36" rx="7" fill="#fcf0e2" stroke="#c46e1a" stroke-width="1.6"></rect><foreignObject x="436" y="210" 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 style="width:100%;min-width:0;overflow-wrap:break-word;word-break:normal">結帳頁</div></div></foreignObject><rect x="436" y="324" width="66" height="36" rx="7" fill="#fcf0e2" stroke="#c46e1a" stroke-width="1.6"></rect><foreignObject x="436" y="324" 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 style="width:100%;min-width:0;overflow-wrap:break-word;word-break:normal">付款頁</div></div></foreignObject><rect x="436" y="438" width="66" height="36" rx="7" fill="#fcf0e2" stroke="#c46e1a" stroke-width="1.6"></rect><foreignObject x="436" y="438" 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 style="width:100%;min-width:0;overflow-wrap:break-word;word-break:normal">完成頁</div></div></foreignObject><rect x="327" y="646" width="66" height="36" rx="7" fill="#f4f0fa" stroke="#8163ad" stroke-width="1.6"></rect><foreignObject x="327" y="646" 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"><div style="width:100%;min-width:0;overflow-wrap:break-word;word-break:normal">客服頁</div></div></foreignObject><rect x="320" y="768" width="80" height="36" rx="7" fill="#f4f0fa" stroke="#8163ad" stroke-width="1.6"></rect><foreignObject x="320" y="768" 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 style="width:100%;min-width:0;overflow-wrap:break-word;word-break:normal">常見問題</div></div></foreignObject></svg>
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="600" height="852" viewBox="-18 -18 600 852" style="background:#fff"><rect x="12" y="12" width="539.5" height="501" rx="8" fill="#faf7fd" fill-opacity="0.38" stroke="#8163ad" stroke-width="2"></rect><foreignObject x="239.75" 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:#8163ad;line-height:1.3;white-space:pre-line;overflow-wrap:break-word;word-break:normal">入口網站</div></foreignObject><rect x="26" y="54" width="108" height="434" rx="8" fill="#eef4fb" fill-opacity="0.38" stroke="#3f6fb0" stroke-width="2"></rect><foreignObject x="30.5" y="59" width="99" 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;white-space:pre-line;overflow-wrap:break-word;word-break:normal">商品瀏覽區</div></foreignObject><rect x="162" y="168" width="213" height="320" rx="8" fill="#eaf4ef" fill-opacity="0.38" stroke="#348a5c" stroke-width="2"></rect><foreignObject x="226.5" y="173" 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;white-space:pre-line;overflow-wrap:break-word;word-break:normal">會員專區</div></foreignObject><rect x="403" y="54" width="134.5" height="434" rx="8" fill="#fdf6ec" fill-opacity="0.38" stroke="#c46e1a" stroke-width="2"></rect><foreignObject x="428.25" 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:#c46e1a;line-height:1.3;white-space:pre-line;overflow-wrap:break-word;word-break:normal">購物流程</div></foreignObject><path d="M 80 132 L 80 210" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 80 210 L 84 201 L 76 201 Z" fill="#44505a"></path><foreignObject x="53" y="162" 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:pre-line">點擊</div></foreignObject><path d="M 80 246 L 80 324" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 80 324 L 84 315 L 76 315 Z" fill="#44505a"></path><foreignObject x="53" y="276" 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:pre-line">點擊</div></foreignObject><path d="M 80 360 L 80 438" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 80 438 L 84 429 L 76 429 Z" fill="#44505a"></path><foreignObject x="53" y="390" 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:pre-line">點擊</div></foreignObject><path d="M 293.5 246 L 293.5 264 L 209 264 L 209 324" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 209 324 L 213 315 L 205 315 Z" fill="#44505a"></path><foreignObject x="182" y="276" 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:pre-line">點擊</div></foreignObject><path d="M 310 246 L 310 324" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 310 324 L 314 315 L 306 315 Z" fill="#44505a"></path><foreignObject x="258" y="276" 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:pre-line">登入成功</div></foreignObject><path d="M 310 360 L 310 438" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 310 438 L 314 429 L 306 429 Z" fill="#44505a"></path><foreignObject x="283" y="390" 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:pre-line">點擊</div></foreignObject><path d="M 479.5 132 L 479.5 150 L 469 150 L 469 210" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 469 210 L 473 201 L 465 201 Z" fill="#44505a"></path><foreignObject x="442" y="162" 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:pre-line">點擊</div></foreignObject><path d="M 469 246 L 469 324" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 469 324 L 473 315 L 465 315 Z" fill="#44505a"></path><foreignObject x="442" y="276" 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:pre-line">點擊</div></foreignObject><path d="M 469 360 L 469 438" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 469 438 L 473 429 L 465 429 Z" fill="#44505a"></path><foreignObject x="417" y="390" 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:pre-line">付款完成</div></foreignObject><path d="M 80 474 L 80 550 L 182.5 550 L 182.5 620 L 343.5 620 L 343.5 646" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 343.5 646 L 347.5 637 L 339.5 637 Z" fill="#44505a"></path><foreignObject x="155.5" y="576" 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:pre-line">點擊</div></foreignObject><path d="M 326.5 246 L 326.5 264 L 360 264 L 360 646" fill="none" stroke="#44505a" stroke-width="2" stroke-dasharray="6 4"></path><path d="M 360 646 L 364 637 L 356 637 Z" fill="#44505a"></path><foreignObject x="308" y="576" 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:pre-line">忘記密碼</div></foreignObject><path d="M 501.5 132 L 501.5 150 L 512 150 L 512 550 L 473.5 550 L 473.5 620 L 376.5 620 L 376.5 646" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 376.5 646 L 380.5 637 L 372.5 637 Z" fill="#44505a"></path><foreignObject x="421.5" y="576" 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:pre-line">需要協助</div></foreignObject><path d="M 360 682 L 360 768" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 360 768 L 364 759 L 356 759 Z" fill="#44505a"></path><foreignObject x="333" y="716" 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:pre-line">點擊</div></foreignObject><rect x="54" y="96" width="52" height="36" rx="7" fill="#eef4fb" stroke="#3f6fb0" stroke-width="1.6"></rect><foreignObject x="54" y="96" 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 style="width:100%;min-width:0;white-space:pre-line;overflow-wrap:break-word;word-break:normal">首頁</div></div></foreignObject><rect x="40" y="210" width="80" height="36" rx="7" fill="#eef4fb" stroke="#3f6fb0" stroke-width="1.6"></rect><foreignObject x="40" 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:#1c2b36;line-height:1.4;padding:0 4px;box-sizing:border-box"><div style="width:100%;min-width:0;white-space:pre-line;overflow-wrap:break-word;word-break:normal">分類列表</div></div></foreignObject><rect x="40" y="324" width="80" height="36" rx="7" fill="#eef4fb" stroke="#3f6fb0" stroke-width="1.6"></rect><foreignObject x="40" y="324" 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 style="width:100%;min-width:0;white-space:pre-line;overflow-wrap:break-word;word-break:normal">商品清單</div></div></foreignObject><rect x="40" y="438" width="80" height="36" rx="7" fill="#eef4fb" stroke="#3f6fb0" stroke-width="1.6"></rect><foreignObject x="40" y="438" 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 style="width:100%;min-width:0;white-space:pre-line;overflow-wrap:break-word;word-break:normal">商品詳情</div></div></foreignObject><rect x="277" y="210" width="66" height="36" rx="7" fill="#eaf4ef" stroke="#348a5c" stroke-width="1.6"></rect><foreignObject x="277" y="210" 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 style="width:100%;min-width:0;white-space:pre-line;overflow-wrap:break-word;word-break:normal">登入頁</div></div></foreignObject><rect x="176" y="324" width="66" height="36" rx="7" fill="#eaf4ef" stroke="#348a5c" stroke-width="1.6"></rect><foreignObject x="176" y="324" 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 style="width:100%;min-width:0;white-space:pre-line;overflow-wrap:break-word;word-break:normal">註冊頁</div></div></foreignObject><rect x="270" y="324" width="80" height="36" rx="7" fill="#eaf4ef" stroke="#348a5c" stroke-width="1.6"></rect><foreignObject x="270" y="324" 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 style="width:100%;min-width:0;white-space:pre-line;overflow-wrap:break-word;word-break:normal">會員中心</div></div></foreignObject><rect x="270" y="438" width="80" height="36" rx="7" fill="#eaf4ef" stroke="#348a5c" stroke-width="1.6"></rect><foreignObject x="270" y="438" 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 style="width:100%;min-width:0;white-space:pre-line;overflow-wrap:break-word;word-break:normal">訂單紀錄</div></div></foreignObject><rect x="457.5" y="96" width="66" height="36" rx="7" fill="#fcf0e2" stroke="#c46e1a" stroke-width="1.6"></rect><foreignObject x="457.5" y="96" 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 style="width:100%;min-width:0;white-space:pre-line;overflow-wrap:break-word;word-break:normal">購物車</div></div></foreignObject><rect x="436" y="210" width="66" height="36" rx="7" fill="#fcf0e2" stroke="#c46e1a" stroke-width="1.6"></rect><foreignObject x="436" y="210" 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 style="width:100%;min-width:0;white-space:pre-line;overflow-wrap:break-word;word-break:normal">結帳頁</div></div></foreignObject><rect x="436" y="324" width="66" height="36" rx="7" fill="#fcf0e2" stroke="#c46e1a" stroke-width="1.6"></rect><foreignObject x="436" y="324" 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 style="width:100%;min-width:0;white-space:pre-line;overflow-wrap:break-word;word-break:normal">付款頁</div></div></foreignObject><rect x="436" y="438" width="66" height="36" rx="7" fill="#fcf0e2" stroke="#c46e1a" stroke-width="1.6"></rect><foreignObject x="436" y="438" 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 style="width:100%;min-width:0;white-space:pre-line;overflow-wrap:break-word;word-break:normal">完成頁</div></div></foreignObject><rect x="327" y="646" width="66" height="36" rx="7" fill="#f4f0fa" stroke="#8163ad" stroke-width="1.6"></rect><foreignObject x="327" y="646" 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"><div style="width:100%;min-width:0;white-space:pre-line;overflow-wrap:break-word;word-break:normal">客服頁</div></div></foreignObject><rect x="320" y="768" width="80" height="36" rx="7" fill="#f4f0fa" stroke="#8163ad" stroke-width="1.6"></rect><foreignObject x="320" y="768" 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 style="width:100%;min-width:0;white-space:pre-line;overflow-wrap:break-word;word-break:normal">常見問題</div></div></foreignObject></svg>
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
@@ -18,29 +18,10 @@ async function core() {
18
18
  'playwright': 'playwright',
19
19
  'sharp': 'sharp',
20
20
  },
21
- external: [ //繪圖庫多為 fs 直讀內聯注入頁面( import), 仍列 external 保險, 避免任何路徑被打包進 dist
21
+ external: [ //Node 端執行期依賴(原生/重, 不打包進 dist); 繪圖庫已改由 CDN 於頁面內載入, import, 無須列此
22
22
  '@terrastruct/d2',
23
23
  'playwright',
24
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
- '@antv/g-lite',
35
- '@antv/g-svg',
36
- 'cytoscape-svg',
37
- '@joint/core',
38
- '@logicflow/core',
39
- 'react',
40
- 'react-dom',
41
- '@xyflow/react',
42
- '@dagrejs/dagre',
43
- 'elkjs',
44
25
  ],
45
26
  })
46
27
  .catch((err) => {
@@ -1,31 +0,0 @@
1
- // 本機套件檔案定位與讀取: 供各產線把繪圖庫由 CDN 改為 node_modules 內聯注入(斷網環境可用)。
2
- // 以 fs 實體路徑向上逐層找 node_modules/<rel>, 不走 require.resolve(不受套件 exports 白名單限制),
3
- // 亦相容本套件被安裝後 node_modules 被 hoist 至上層的情況。
4
- import fs from 'fs'
5
- import { fileURLToPath } from 'url'
6
- import { dirname, join } from 'path'
7
-
8
- const __dir = dirname(fileURLToPath(import.meta.url))
9
-
10
- // rel 例: 'mermaid10/dist/mermaid.min.js' → 回傳實體絕對路徑
11
- export function pkgFile(rel) {
12
- let dir = __dir
13
- for (let i = 0; i < 10; i++) {
14
- const fp = join(dir, 'node_modules', rel)
15
- if (fs.existsSync(fp)) return fp
16
- const up = dirname(dir)
17
- if (up === dir) break
18
- dir = up
19
- }
20
- throw new Error('找不到本機套件檔案 node_modules/' + rel)
21
- }
22
-
23
- // 讀取套件 JS 內容供 <script> 內聯(轉義 </script> 避免提早關閉標籤)
24
- export function pkgScript(rel) {
25
- return fs.readFileSync(pkgFile(rel), 'utf8').replace(/<\/script/gi, '<\\/script')
26
- }
27
-
28
- // 讀取套件文字內容(CSS 等)
29
- export function pkgText(rel) {
30
- return fs.readFileSync(pkgFile(rel), 'utf8')
31
- }