w-flowchart 1.0.0 → 1.0.2

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 (435) hide show
  1. package/README.md +5 -1
  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 +169 -0
  5. package/docs/global.html +657 -0
  6. package/docs/index.html +2 -2
  7. package/package.json +52 -49
  8. package/src/WFlowchart.mjs +97 -0
  9. package/src/p1/README.md +2 -2
  10. package/src/p1/gen.mjs +54 -20
  11. package/src/p10/README.md +6 -2
  12. package/src/p10/gen.mjs +235 -15
  13. package/src/p2/README.md +1 -1
  14. package/src/p2/gen.mjs +52 -7
  15. package/src/p3/README.md +1 -1
  16. package/src/p3/gen.mjs +24 -2
  17. package/src/p4/README.md +1 -1
  18. package/src/p4/gen.mjs +36 -10
  19. package/src/p5/README.md +1 -1
  20. package/src/p5/gen.mjs +45 -18
  21. package/src/p6/README.md +1 -1
  22. package/src/p6/gen.mjs +108 -5
  23. package/src/p7/README.md +1 -1
  24. package/src/p7/gen.mjs +42 -3
  25. package/src/p8/README.md +1 -1
  26. package/src/p8/gen.mjs +41 -2
  27. package/src/p9/README.md +1 -1
  28. package/src/p9/gen.mjs +14 -7
  29. package/src/p9/page9.html +13 -5
  30. package/test/cases-diamond.mjs +221 -0
  31. package/test/cases.mjs +17 -1
  32. package/test/data//345/267/245/345/226/256/350/231/225/347/220/206/346/265/201/347/250/213/345/234/226.json +43 -0
  33. package/test/data//345/276/256/346/234/215/345/213/231/345/217/242/351/233/206/346/236/266/346/247/213/345/234/226.json +132 -0
  34. package/test/data//346/234/203/345/223/241/350/250/273/345/206/212/346/265/201/347/250/213/345/234/226.json +27 -0
  35. package/test/data//346/250/241/347/265/204/347/265/204/346/210/220/345/234/226.json +111 -0
  36. package/test/data//346/254/212/351/231/220/350/247/222/350/211/262/351/227/234/350/201/257/345/234/226.json +117 -0
  37. package/test/data//347/211/251/350/201/257/347/266/262/345/271/263/345/217/260/346/236/266/346/247/213/345/234/226.json +203 -0
  38. package/test/data//347/263/273/347/265/261/345/210/206/345/261/244/346/236/266/346/247/213/345/234/226.json +156 -0
  39. package/test/data//350/250/202/345/226/256/350/231/225/347/220/206/346/265/201/347/250/213/345/234/226.json +46 -0
  40. package/test/data//350/263/207/346/226/231/346/265/201/345/220/221/345/234/226.json +137 -0
  41. package/test/data//350/263/207/346/226/231/346/270/205/346/264/227/346/265/201/347/250/213/345/234/226.json +28 -0
  42. package/test/data//351/233/273/345/225/206/345/271/263/345/217/260/346/236/266/346/247/213/345/234/226.json +134 -0
  43. package/test/data//351/240/201/351/235/242/345/260/216/350/246/275/351/227/234/350/201/257/345/234/226.json +178 -0
  44. package/test/figures.mjs +3 -2
  45. package/test/lib.mjs +3 -1
  46. package/test/p1.test.mjs +5 -0
  47. package/test/p10.test.mjs +54 -2
  48. package/test/p2.test.mjs +5 -0
  49. package/test/p3.test.mjs +5 -0
  50. package/test/p4.test.mjs +5 -0
  51. package/test/p5.test.mjs +6 -0
  52. package/test/p6.test.mjs +5 -0
  53. package/test/p7.test.mjs +5 -0
  54. package/test/p8.test.mjs +5 -0
  55. package/test/p9.test.mjs +5 -0
  56. package/test/pics/p1/cycle.png +0 -0
  57. package/test/pics/p1/deep-nest.png +0 -0
  58. package/test/pics/p1/diamond.png +0 -0
  59. package/test/pics/p1/edges-mix.png +0 -0
  60. package/test/pics/p1/english.png +0 -0
  61. package/test/pics/p1/flat-tb.png +0 -0
  62. package/test/pics/p1/fold-tall.png +0 -0
  63. package/test/pics/p1/fold-wide.png +0 -0
  64. package/test/pics/p1/group-edge.png +0 -0
  65. package/test/pics/p1/items-node.png +0 -0
  66. package/test/pics/p1/long-label.png +0 -0
  67. package/test/pics/p1/lr-flat.png +0 -0
  68. package/test/pics/p1/nested-group.png +0 -0
  69. package/test/pics/p1/no-edges.png +0 -0
  70. package/test/pics/p1/title-overflow.png +0 -0
  71. package/test/pics/p1/valign.png +0 -0
  72. package/test/pics/p1//345/267/245/345/226/256/350/231/225/347/220/206/346/265/201/347/250/213/345/234/226.png +0 -0
  73. package/test/pics/p1//345/276/256/346/234/215/345/213/231/345/217/242/351/233/206/346/236/266/346/247/213/345/234/226.png +0 -0
  74. package/test/pics/p1//346/234/203/345/223/241/350/250/273/345/206/212/346/265/201/347/250/213/345/234/226.png +0 -0
  75. package/test/pics/p1//346/250/241/347/265/204/347/265/204/346/210/220/345/234/226.png +0 -0
  76. package/test/pics/p1//346/254/212/351/231/220/350/247/222/350/211/262/351/227/234/350/201/257/345/234/226.png +0 -0
  77. package/test/pics/p1//347/211/251/350/201/257/347/266/262/345/271/263/345/217/260/346/236/266/346/247/213/345/234/226.png +0 -0
  78. package/test/pics/p1//347/263/273/347/265/261/345/210/206/345/261/244/346/236/266/346/247/213/345/234/226.png +0 -0
  79. package/test/pics/p1//350/250/202/345/226/256/350/231/225/347/220/206/346/265/201/347/250/213/345/234/226.png +0 -0
  80. package/test/pics/p1//350/263/207/346/226/231/346/265/201/345/220/221/345/234/226.png +0 -0
  81. package/test/pics/p1//350/263/207/346/226/231/346/270/205/346/264/227/346/265/201/347/250/213/345/234/226.png +0 -0
  82. package/test/pics/p1//351/233/273/345/225/206/345/271/263/345/217/260/346/236/266/346/247/213/345/234/226.png +0 -0
  83. package/test/pics/p1//351/240/201/351/235/242/345/260/216/350/246/275/351/227/234/350/201/257/345/234/226.png +0 -0
  84. package/test/pics/p10/cycle.png +0 -0
  85. package/test/pics/p10/cycle.svg +1 -0
  86. package/test/pics/p10/deep-nest.svg +1 -0
  87. package/test/pics/p10/dia-1in-1out.png +0 -0
  88. package/test/pics/p10/dia-1in-1out.svg +1 -0
  89. package/test/pics/p10/dia-1in-2out.png +0 -0
  90. package/test/pics/p10/dia-1in-2out.svg +1 -0
  91. package/test/pics/p10/dia-1in.png +0 -0
  92. package/test/pics/p10/dia-1in.svg +1 -0
  93. package/test/pics/p10/dia-1out.png +0 -0
  94. package/test/pics/p10/dia-1out.svg +1 -0
  95. package/test/pics/p10/dia-2in-1out.png +0 -0
  96. package/test/pics/p10/dia-2in-1out.svg +1 -0
  97. package/test/pics/p10/dia-2in-2out-dd.png +0 -0
  98. package/test/pics/p10/dia-2in-2out-dd.svg +1 -0
  99. package/test/pics/p10/dia-2in-2out-ss.png +0 -0
  100. package/test/pics/p10/dia-2in-2out-ss.svg +1 -0
  101. package/test/pics/p10/dia-2in.png +0 -0
  102. package/test/pics/p10/dia-2in.svg +1 -0
  103. package/test/pics/p10/dia-2out.png +0 -0
  104. package/test/pics/p10/dia-2out.svg +1 -0
  105. package/test/pics/p10/diamond.png +0 -0
  106. package/test/pics/p10/diamond.svg +1 -0
  107. package/test/pics/p10/edges-mix.png +0 -0
  108. package/test/pics/p10/edges-mix.svg +1 -0
  109. package/test/pics/p10/english.png +0 -0
  110. package/test/pics/p10/english.svg +1 -0
  111. package/test/pics/p10/flat-tb.svg +1 -0
  112. package/test/pics/p10/fold-tall.svg +1 -0
  113. package/test/pics/p10/fold-wide.svg +1 -0
  114. package/test/pics/p10/group-edge.png +0 -0
  115. package/test/pics/p10/group-edge.svg +1 -0
  116. package/test/pics/p10/items-node.svg +1 -0
  117. package/test/pics/p10/long-label.svg +1 -0
  118. package/test/pics/p10/lr-flat.svg +1 -0
  119. package/test/pics/p10/nested-group.png +0 -0
  120. package/test/pics/p10/nested-group.svg +1 -0
  121. package/test/pics/p10/no-edges.svg +1 -0
  122. package/test/pics/p10/title-overflow.svg +1 -0
  123. package/test/pics/p10/valign.svg +1 -0
  124. 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.png +0 -0
  125. 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 -0
  126. 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.png +0 -0
  127. 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 -0
  128. 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.png +0 -0
  129. 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 -0
  130. package/test/pics/p10//346/250/241/347/265/204/347/265/204/346/210/220/345/234/226.png +0 -0
  131. package/test/pics/p10//346/250/241/347/265/204/347/265/204/346/210/220/345/234/226.svg +1 -0
  132. 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.png +0 -0
  133. 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 -0
  134. 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.png +0 -0
  135. 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 -0
  136. 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.png +0 -0
  137. 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 -0
  138. 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.png +0 -0
  139. 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 -0
  140. package/test/pics/p10//350/263/207/346/226/231/346/265/201/345/220/221/345/234/226.png +0 -0
  141. package/test/pics/p10//350/263/207/346/226/231/346/265/201/345/220/221/345/234/226.svg +1 -0
  142. 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.png +0 -0
  143. 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 -0
  144. 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.png +0 -0
  145. 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 -0
  146. 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.png +0 -0
  147. 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 -0
  148. package/test/pics/p2/cycle.png +0 -0
  149. package/test/pics/p2/deep-nest.png +0 -0
  150. package/test/pics/p2/diamond.png +0 -0
  151. package/test/pics/p2/edges-mix.png +0 -0
  152. package/test/pics/p2/english.png +0 -0
  153. package/test/pics/p2/flat-tb.png +0 -0
  154. package/test/pics/p2/fold-tall.png +0 -0
  155. package/test/pics/p2/fold-wide.png +0 -0
  156. package/test/pics/p2/group-edge.png +0 -0
  157. package/test/pics/p2/items-node.png +0 -0
  158. package/test/pics/p2/long-label.png +0 -0
  159. package/test/pics/p2/lr-flat.png +0 -0
  160. package/test/pics/p2/nested-group.png +0 -0
  161. package/test/pics/p2/no-edges.png +0 -0
  162. package/test/pics/p2/title-overflow.png +0 -0
  163. package/test/pics/p2/valign.png +0 -0
  164. package/test/pics/p2//345/267/245/345/226/256/350/231/225/347/220/206/346/265/201/347/250/213/345/234/226.png +0 -0
  165. package/test/pics/p2//345/276/256/346/234/215/345/213/231/345/217/242/351/233/206/346/236/266/346/247/213/345/234/226.png +0 -0
  166. package/test/pics/p2//346/234/203/345/223/241/350/250/273/345/206/212/346/265/201/347/250/213/345/234/226.png +0 -0
  167. package/test/pics/p2//346/250/241/347/265/204/347/265/204/346/210/220/345/234/226.png +0 -0
  168. package/test/pics/p2//346/254/212/351/231/220/350/247/222/350/211/262/351/227/234/350/201/257/345/234/226.png +0 -0
  169. package/test/pics/p2//347/211/251/350/201/257/347/266/262/345/271/263/345/217/260/346/236/266/346/247/213/345/234/226.png +0 -0
  170. package/test/pics/p2//347/263/273/347/265/261/345/210/206/345/261/244/346/236/266/346/247/213/345/234/226.png +0 -0
  171. package/test/pics/p2//350/250/202/345/226/256/350/231/225/347/220/206/346/265/201/347/250/213/345/234/226.png +0 -0
  172. package/test/pics/p2//350/263/207/346/226/231/346/265/201/345/220/221/345/234/226.png +0 -0
  173. package/test/pics/p2//350/263/207/346/226/231/346/270/205/346/264/227/346/265/201/347/250/213/345/234/226.png +0 -0
  174. package/test/pics/p2//351/233/273/345/225/206/345/271/263/345/217/260/346/236/266/346/247/213/345/234/226.png +0 -0
  175. package/test/pics/p2//351/240/201/351/235/242/345/260/216/350/246/275/351/227/234/350/201/257/345/234/226.png +0 -0
  176. package/test/pics/p3/cycle.png +0 -0
  177. package/test/pics/p3/deep-nest.png +0 -0
  178. package/test/pics/p3/diamond.png +0 -0
  179. package/test/pics/p3/edges-mix.png +0 -0
  180. package/test/pics/p3/english.png +0 -0
  181. package/test/pics/p3/flat-tb.png +0 -0
  182. package/test/pics/p3/fold-tall.png +0 -0
  183. package/test/pics/p3/fold-wide.png +0 -0
  184. package/test/pics/p3/group-edge.png +0 -0
  185. package/test/pics/p3/items-node.png +0 -0
  186. package/test/pics/p3/long-label.png +0 -0
  187. package/test/pics/p3/lr-flat.png +0 -0
  188. package/test/pics/p3/nested-group.png +0 -0
  189. package/test/pics/p3/no-edges.png +0 -0
  190. package/test/pics/p3/title-overflow.png +0 -0
  191. package/test/pics/p3/valign.png +0 -0
  192. package/test/pics/p3//345/267/245/345/226/256/350/231/225/347/220/206/346/265/201/347/250/213/345/234/226.png +0 -0
  193. package/test/pics/p3//345/276/256/346/234/215/345/213/231/345/217/242/351/233/206/346/236/266/346/247/213/345/234/226.png +0 -0
  194. package/test/pics/p3//346/234/203/345/223/241/350/250/273/345/206/212/346/265/201/347/250/213/345/234/226.png +0 -0
  195. package/test/pics/p3//346/250/241/347/265/204/347/265/204/346/210/220/345/234/226.png +0 -0
  196. package/test/pics/p3//346/254/212/351/231/220/350/247/222/350/211/262/351/227/234/350/201/257/345/234/226.png +0 -0
  197. package/test/pics/p3//347/211/251/350/201/257/347/266/262/345/271/263/345/217/260/346/236/266/346/247/213/345/234/226.png +0 -0
  198. package/test/pics/p3//347/263/273/347/265/261/345/210/206/345/261/244/346/236/266/346/247/213/345/234/226.png +0 -0
  199. package/test/pics/p3//350/250/202/345/226/256/350/231/225/347/220/206/346/265/201/347/250/213/345/234/226.png +0 -0
  200. package/test/pics/p3//350/263/207/346/226/231/346/265/201/345/220/221/345/234/226.png +0 -0
  201. package/test/pics/p3//350/263/207/346/226/231/346/270/205/346/264/227/346/265/201/347/250/213/345/234/226.png +0 -0
  202. package/test/pics/p3//351/233/273/345/225/206/345/271/263/345/217/260/346/236/266/346/247/213/345/234/226.png +0 -0
  203. package/test/pics/p3//351/240/201/351/235/242/345/260/216/350/246/275/351/227/234/350/201/257/345/234/226.png +0 -0
  204. package/test/pics/p4/cycle.png +0 -0
  205. package/test/pics/p4/deep-nest.png +0 -0
  206. package/test/pics/p4/diamond.png +0 -0
  207. package/test/pics/p4/edges-mix.png +0 -0
  208. package/test/pics/p4/english.png +0 -0
  209. package/test/pics/p4/flat-tb.png +0 -0
  210. package/test/pics/p4/fold-tall.png +0 -0
  211. package/test/pics/p4/fold-wide.png +0 -0
  212. package/test/pics/p4/group-edge.png +0 -0
  213. package/test/pics/p4/items-node.png +0 -0
  214. package/test/pics/p4/long-label.png +0 -0
  215. package/test/pics/p4/lr-flat.png +0 -0
  216. package/test/pics/p4/nested-group.png +0 -0
  217. package/test/pics/p4/no-edges.png +0 -0
  218. package/test/pics/p4/title-overflow.png +0 -0
  219. package/test/pics/p4/valign.png +0 -0
  220. package/test/pics/p4//345/267/245/345/226/256/350/231/225/347/220/206/346/265/201/347/250/213/345/234/226.png +0 -0
  221. package/test/pics/p4//345/276/256/346/234/215/345/213/231/345/217/242/351/233/206/346/236/266/346/247/213/345/234/226.png +0 -0
  222. package/test/pics/p4//346/234/203/345/223/241/350/250/273/345/206/212/346/265/201/347/250/213/345/234/226.png +0 -0
  223. package/test/pics/p4//346/250/241/347/265/204/347/265/204/346/210/220/345/234/226.png +0 -0
  224. package/test/pics/p4//346/254/212/351/231/220/350/247/222/350/211/262/351/227/234/350/201/257/345/234/226.png +0 -0
  225. package/test/pics/p4//347/211/251/350/201/257/347/266/262/345/271/263/345/217/260/346/236/266/346/247/213/345/234/226.png +0 -0
  226. package/test/pics/p4//347/263/273/347/265/261/345/210/206/345/261/244/346/236/266/346/247/213/345/234/226.png +0 -0
  227. package/test/pics/p4//350/250/202/345/226/256/350/231/225/347/220/206/346/265/201/347/250/213/345/234/226.png +0 -0
  228. package/test/pics/p4//350/263/207/346/226/231/346/265/201/345/220/221/345/234/226.png +0 -0
  229. package/test/pics/p4//350/263/207/346/226/231/346/270/205/346/264/227/346/265/201/347/250/213/345/234/226.png +0 -0
  230. package/test/pics/p4//351/233/273/345/225/206/345/271/263/345/217/260/346/236/266/346/247/213/345/234/226.png +0 -0
  231. package/test/pics/p4//351/240/201/351/235/242/345/260/216/350/246/275/351/227/234/350/201/257/345/234/226.png +0 -0
  232. package/test/pics/p5/cycle.png +0 -0
  233. package/test/pics/p5/deep-nest.png +0 -0
  234. package/test/pics/p5/diamond.png +0 -0
  235. package/test/pics/p5/edges-mix.png +0 -0
  236. package/test/pics/p5/english.png +0 -0
  237. package/test/pics/p5/flat-tb.png +0 -0
  238. package/test/pics/p5/fold-tall.png +0 -0
  239. package/test/pics/p5/fold-wide.png +0 -0
  240. package/test/pics/p5/group-edge.png +0 -0
  241. package/test/pics/p5/items-node.png +0 -0
  242. package/test/pics/p5/long-label.png +0 -0
  243. package/test/pics/p5/lr-flat.png +0 -0
  244. package/test/pics/p5/nested-group.png +0 -0
  245. package/test/pics/p5/no-edges.png +0 -0
  246. package/test/pics/p5/title-overflow.png +0 -0
  247. package/test/pics/p5/valign.png +0 -0
  248. package/test/pics/p5//345/267/245/345/226/256/350/231/225/347/220/206/346/265/201/347/250/213/345/234/226.png +0 -0
  249. package/test/pics/p5//345/276/256/346/234/215/345/213/231/345/217/242/351/233/206/346/236/266/346/247/213/345/234/226.png +0 -0
  250. package/test/pics/p5//346/234/203/345/223/241/350/250/273/345/206/212/346/265/201/347/250/213/345/234/226.png +0 -0
  251. package/test/pics/p5//346/250/241/347/265/204/347/265/204/346/210/220/345/234/226.png +0 -0
  252. package/test/pics/p5//346/254/212/351/231/220/350/247/222/350/211/262/351/227/234/350/201/257/345/234/226.png +0 -0
  253. package/test/pics/p5//347/211/251/350/201/257/347/266/262/345/271/263/345/217/260/346/236/266/346/247/213/345/234/226.png +0 -0
  254. package/test/pics/p5//347/263/273/347/265/261/345/210/206/345/261/244/346/236/266/346/247/213/345/234/226.png +0 -0
  255. package/test/pics/p5//350/250/202/345/226/256/350/231/225/347/220/206/346/265/201/347/250/213/345/234/226.png +0 -0
  256. package/test/pics/p5//350/263/207/346/226/231/346/265/201/345/220/221/345/234/226.png +0 -0
  257. package/test/pics/p5//350/263/207/346/226/231/346/270/205/346/264/227/346/265/201/347/250/213/345/234/226.png +0 -0
  258. package/test/pics/p5//351/233/273/345/225/206/345/271/263/345/217/260/346/236/266/346/247/213/345/234/226.png +0 -0
  259. package/test/pics/p5//351/240/201/351/235/242/345/260/216/350/246/275/351/227/234/350/201/257/345/234/226.png +0 -0
  260. package/test/pics/p6/cycle.png +0 -0
  261. package/test/pics/p6/deep-nest.png +0 -0
  262. package/test/pics/p6/diamond.png +0 -0
  263. package/test/pics/p6/edges-mix.png +0 -0
  264. package/test/pics/p6/english.png +0 -0
  265. package/test/pics/p6/flat-tb.png +0 -0
  266. package/test/pics/p6/fold-tall.png +0 -0
  267. package/test/pics/p6/fold-wide.png +0 -0
  268. package/test/pics/p6/group-edge.png +0 -0
  269. package/test/pics/p6/items-node.png +0 -0
  270. package/test/pics/p6/long-label.png +0 -0
  271. package/test/pics/p6/lr-flat.png +0 -0
  272. package/test/pics/p6/nested-group.png +0 -0
  273. package/test/pics/p6/no-edges.png +0 -0
  274. package/test/pics/p6/title-overflow.png +0 -0
  275. package/test/pics/p6/valign.png +0 -0
  276. package/test/pics/p6//345/267/245/345/226/256/350/231/225/347/220/206/346/265/201/347/250/213/345/234/226.png +0 -0
  277. package/test/pics/p6//345/276/256/346/234/215/345/213/231/345/217/242/351/233/206/346/236/266/346/247/213/345/234/226.png +0 -0
  278. package/test/pics/p6//346/234/203/345/223/241/350/250/273/345/206/212/346/265/201/347/250/213/345/234/226.png +0 -0
  279. package/test/pics/p6//346/250/241/347/265/204/347/265/204/346/210/220/345/234/226.png +0 -0
  280. package/test/pics/p6//346/254/212/351/231/220/350/247/222/350/211/262/351/227/234/350/201/257/345/234/226.png +0 -0
  281. 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.alt.png +0 -0
  282. 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
  283. 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.png +0 -0
  284. package/test/pics/p6//347/263/273/347/265/261/345/210/206/345/261/244/346/236/266/346/247/213/345/234/226.png +0 -0
  285. package/test/pics/p6//350/250/202/345/226/256/350/231/225/347/220/206/346/265/201/347/250/213/345/234/226.png +0 -0
  286. package/test/pics/p6//350/263/207/346/226/231/346/265/201/345/220/221/345/234/226.png +0 -0
  287. package/test/pics/p6//350/263/207/346/226/231/346/270/205/346/264/227/346/265/201/347/250/213/345/234/226.png +0 -0
  288. package/test/pics/p6//351/233/273/345/225/206/345/271/263/345/217/260/346/236/266/346/247/213/345/234/226.png +0 -0
  289. package/test/pics/p6//351/240/201/351/235/242/345/260/216/350/246/275/351/227/234/350/201/257/345/234/226.png +0 -0
  290. package/test/pics/p7/cycle.png +0 -0
  291. package/test/pics/p7/deep-nest.png +0 -0
  292. package/test/pics/p7/diamond.png +0 -0
  293. package/test/pics/p7/edges-mix.png +0 -0
  294. package/test/pics/p7/english.png +0 -0
  295. package/test/pics/p7/flat-tb.png +0 -0
  296. package/test/pics/p7/fold-tall.png +0 -0
  297. package/test/pics/p7/fold-wide.png +0 -0
  298. package/test/pics/p7/group-edge.png +0 -0
  299. package/test/pics/p7/items-node.png +0 -0
  300. package/test/pics/p7/long-label.png +0 -0
  301. package/test/pics/p7/lr-flat.png +0 -0
  302. package/test/pics/p7/nested-group.png +0 -0
  303. package/test/pics/p7/no-edges.png +0 -0
  304. package/test/pics/p7/title-overflow.png +0 -0
  305. package/test/pics/p7/valign.png +0 -0
  306. package/test/pics/p7//345/267/245/345/226/256/350/231/225/347/220/206/346/265/201/347/250/213/345/234/226.png +0 -0
  307. package/test/pics/p7//345/276/256/346/234/215/345/213/231/345/217/242/351/233/206/346/236/266/346/247/213/345/234/226.png +0 -0
  308. package/test/pics/p7//346/234/203/345/223/241/350/250/273/345/206/212/346/265/201/347/250/213/345/234/226.png +0 -0
  309. package/test/pics/p7//346/250/241/347/265/204/347/265/204/346/210/220/345/234/226.png +0 -0
  310. package/test/pics/p7//346/254/212/351/231/220/350/247/222/350/211/262/351/227/234/350/201/257/345/234/226.png +0 -0
  311. package/test/pics/p7//347/211/251/350/201/257/347/266/262/345/271/263/345/217/260/346/236/266/346/247/213/345/234/226.png +0 -0
  312. package/test/pics/p7//347/263/273/347/265/261/345/210/206/345/261/244/346/236/266/346/247/213/345/234/226.png +0 -0
  313. package/test/pics/p7//350/250/202/345/226/256/350/231/225/347/220/206/346/265/201/347/250/213/345/234/226.png +0 -0
  314. package/test/pics/p7//350/263/207/346/226/231/346/265/201/345/220/221/345/234/226.png +0 -0
  315. package/test/pics/p7//350/263/207/346/226/231/346/270/205/346/264/227/346/265/201/347/250/213/345/234/226.png +0 -0
  316. package/test/pics/p7//351/233/273/345/225/206/345/271/263/345/217/260/346/236/266/346/247/213/345/234/226.png +0 -0
  317. package/test/pics/p7//351/240/201/351/235/242/345/260/216/350/246/275/351/227/234/350/201/257/345/234/226.png +0 -0
  318. package/test/pics/p8/cycle.png +0 -0
  319. package/test/pics/p8/deep-nest.png +0 -0
  320. package/test/pics/p8/diamond.png +0 -0
  321. package/test/pics/p8/edges-mix.png +0 -0
  322. package/test/pics/p8/english.png +0 -0
  323. package/test/pics/p8/flat-tb.png +0 -0
  324. package/test/pics/p8/fold-tall.png +0 -0
  325. package/test/pics/p8/fold-wide.png +0 -0
  326. package/test/pics/p8/group-edge.png +0 -0
  327. package/test/pics/p8/items-node.png +0 -0
  328. package/test/pics/p8/long-label.png +0 -0
  329. package/test/pics/p8/lr-flat.png +0 -0
  330. package/test/pics/p8/nested-group.png +0 -0
  331. package/test/pics/p8/no-edges.png +0 -0
  332. package/test/pics/p8/title-overflow.png +0 -0
  333. package/test/pics/p8/valign.png +0 -0
  334. package/test/pics/p8//345/267/245/345/226/256/350/231/225/347/220/206/346/265/201/347/250/213/345/234/226.png +0 -0
  335. package/test/pics/p8//345/276/256/346/234/215/345/213/231/345/217/242/351/233/206/346/236/266/346/247/213/345/234/226.png +0 -0
  336. package/test/pics/p8//346/234/203/345/223/241/350/250/273/345/206/212/346/265/201/347/250/213/345/234/226.png +0 -0
  337. package/test/pics/p8//346/250/241/347/265/204/347/265/204/346/210/220/345/234/226.png +0 -0
  338. package/test/pics/p8//346/254/212/351/231/220/350/247/222/350/211/262/351/227/234/350/201/257/345/234/226.png +0 -0
  339. package/test/pics/p8//347/211/251/350/201/257/347/266/262/345/271/263/345/217/260/346/236/266/346/247/213/345/234/226.png +0 -0
  340. package/test/pics/p8//347/263/273/347/265/261/345/210/206/345/261/244/346/236/266/346/247/213/345/234/226.png +0 -0
  341. package/test/pics/p8//350/250/202/345/226/256/350/231/225/347/220/206/346/265/201/347/250/213/345/234/226.png +0 -0
  342. package/test/pics/p8//350/263/207/346/226/231/346/265/201/345/220/221/345/234/226.png +0 -0
  343. package/test/pics/p8//350/263/207/346/226/231/346/270/205/346/264/227/346/265/201/347/250/213/345/234/226.png +0 -0
  344. package/test/pics/p8//351/233/273/345/225/206/345/271/263/345/217/260/346/236/266/346/247/213/345/234/226.png +0 -0
  345. package/test/pics/p8//351/240/201/351/235/242/345/260/216/350/246/275/351/227/234/350/201/257/345/234/226.png +0 -0
  346. package/test/pics/p9/cycle.png +0 -0
  347. package/test/pics/p9/deep-nest.png +0 -0
  348. package/test/pics/p9/diamond.png +0 -0
  349. package/test/pics/p9/edges-mix.png +0 -0
  350. package/test/pics/p9/english.png +0 -0
  351. package/test/pics/p9/flat-tb.png +0 -0
  352. package/test/pics/p9/fold-tall.png +0 -0
  353. package/test/pics/p9/fold-wide.png +0 -0
  354. package/test/pics/p9/group-edge.png +0 -0
  355. package/test/pics/p9/items-node.png +0 -0
  356. package/test/pics/p9/long-label.png +0 -0
  357. package/test/pics/p9/lr-flat.png +0 -0
  358. package/test/pics/p9/nested-group.png +0 -0
  359. package/test/pics/p9/no-edges.png +0 -0
  360. package/test/pics/p9/title-overflow.png +0 -0
  361. package/test/pics/p9/valign.png +0 -0
  362. package/test/pics/p9//345/267/245/345/226/256/350/231/225/347/220/206/346/265/201/347/250/213/345/234/226.png +0 -0
  363. package/test/pics/p9//345/276/256/346/234/215/345/213/231/345/217/242/351/233/206/346/236/266/346/247/213/345/234/226.png +0 -0
  364. package/test/pics/p9//346/234/203/345/223/241/350/250/273/345/206/212/346/265/201/347/250/213/345/234/226.png +0 -0
  365. package/test/pics/p9//346/250/241/347/265/204/347/265/204/346/210/220/345/234/226.png +0 -0
  366. package/test/pics/p9//346/254/212/351/231/220/350/247/222/350/211/262/351/227/234/350/201/257/345/234/226.png +0 -0
  367. package/test/pics/p9//347/211/251/350/201/257/347/266/262/345/271/263/345/217/260/346/236/266/346/247/213/345/234/226.png +0 -0
  368. package/test/pics/p9//347/263/273/347/265/261/345/210/206/345/261/244/346/236/266/346/247/213/345/234/226.png +0 -0
  369. package/test/pics/p9//350/250/202/345/226/256/350/231/225/347/220/206/346/265/201/347/250/213/345/234/226.png +0 -0
  370. package/test/pics/p9//350/263/207/346/226/231/346/265/201/345/220/221/345/234/226.png +0 -0
  371. package/test/pics/p9//350/263/207/346/226/231/346/270/205/346/264/227/346/265/201/347/250/213/345/234/226.png +0 -0
  372. package/test/pics/p9//351/233/273/345/225/206/345/271/263/345/217/260/346/236/266/346/247/213/345/234/226.png +0 -0
  373. package/test/pics/p9//351/240/201/351/235/242/345/260/216/350/246/275/351/227/234/350/201/257/345/234/226.png +0 -0
  374. package/test/snapshot.mjs +67 -0
  375. package/test/wflowchart.test.mjs +57 -11
  376. package/toolg/gDistRollup.mjs +3 -0
  377. package/test/data//344/275/234/346/245/255/346/265/201/347/250/213/345/234/226.json +0 -92
  378. 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 +0 -112
  379. 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 +0 -116
  380. 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 +0 -251
  381. 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 +0 -126
  382. 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 +0 -133
  383. package/test/data//347/263/273/347/265/261/346/236/266/346/247/213/345/234/226.json +0 -102
  384. package/test/data//347/263/273/347/265/261/351/227/234/350/201/257/345/234/226.json +0 -117
  385. 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 +0 -162
  386. package/test/pics/cycle.png +0 -0
  387. package/test/pics/cycle.svg +0 -1
  388. package/test/pics/deep-nest.svg +0 -1
  389. package/test/pics/diamond.png +0 -0
  390. package/test/pics/diamond.svg +0 -1
  391. package/test/pics/edges-mix.png +0 -0
  392. package/test/pics/edges-mix.svg +0 -1
  393. package/test/pics/english.png +0 -0
  394. package/test/pics/english.svg +0 -1
  395. package/test/pics/flat-tb.svg +0 -1
  396. package/test/pics/fold-tall.svg +0 -1
  397. package/test/pics/fold-wide.svg +0 -1
  398. package/test/pics/group-edge.png +0 -0
  399. package/test/pics/group-edge.svg +0 -1
  400. package/test/pics/items-node.svg +0 -1
  401. package/test/pics/long-label.svg +0 -1
  402. package/test/pics/lr-flat.svg +0 -1
  403. package/test/pics/nested-group.png +0 -0
  404. package/test/pics/nested-group.svg +0 -1
  405. package/test/pics/no-edges.svg +0 -1
  406. package/test/pics/title-overflow.svg +0 -1
  407. package/test/pics/valign.svg +0 -1
  408. package/test/pics//344/275/234/346/245/255/346/265/201/347/250/213/345/234/226.png +0 -0
  409. package/test/pics//344/275/234/346/245/255/346/265/201/347/250/213/345/234/226.svg +0 -1
  410. 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
  411. 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 +0 -1
  412. 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
  413. 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 +0 -1
  414. 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
  415. 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 +0 -1
  416. 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
  417. 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 +0 -1
  418. 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
  419. 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 +0 -1
  420. package/test/pics//347/263/273/347/265/261/346/236/266/346/247/213/345/234/226.png +0 -0
  421. package/test/pics//347/263/273/347/265/261/346/236/266/346/247/213/345/234/226.svg +0 -1
  422. package/test/pics//347/263/273/347/265/261/351/227/234/350/201/257/345/234/226.png +0 -0
  423. package/test/pics//347/263/273/347/265/261/351/227/234/350/201/257/345/234/226.svg +0 -1
  424. 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
  425. 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 +0 -1
  426. /package/test/pics/{deep-nest.png → p10/deep-nest.png} +0 -0
  427. /package/test/pics/{flat-tb.png → p10/flat-tb.png} +0 -0
  428. /package/test/pics/{fold-tall.png → p10/fold-tall.png} +0 -0
  429. /package/test/pics/{fold-wide.png → p10/fold-wide.png} +0 -0
  430. /package/test/pics/{items-node.png → p10/items-node.png} +0 -0
  431. /package/test/pics/{long-label.png → p10/long-label.png} +0 -0
  432. /package/test/pics/{lr-flat.png → p10/lr-flat.png} +0 -0
  433. /package/test/pics/{no-edges.png → p10/no-edges.png} +0 -0
  434. /package/test/pics/{title-overflow.png → p10/title-overflow.png} +0 -0
  435. /package/test/pics/{valign.png → p10/valign.png} +0 -0
@@ -0,0 +1,134 @@
1
+ {
2
+ "dir": "TB",
3
+ "nodes": [
4
+ {
5
+ "id": "FE",
6
+ "label": "前台層",
7
+ "cls": "blueG"
8
+ },
9
+ {
10
+ "id": "SV",
11
+ "label": "服務層",
12
+ "cls": "greenG"
13
+ },
14
+ {
15
+ "id": "DB",
16
+ "label": "資料層",
17
+ "cls": "orangeG"
18
+ },
19
+ {
20
+ "id": "fe1",
21
+ "label": "網頁前端",
22
+ "cls": "blue",
23
+ "group": "FE"
24
+ },
25
+ {
26
+ "id": "fe2",
27
+ "label": "行動應用",
28
+ "cls": "blue",
29
+ "group": "FE"
30
+ },
31
+ {
32
+ "id": "fe3",
33
+ "title": "前端共用元件",
34
+ "items": [
35
+ "元件庫",
36
+ "狀態管理",
37
+ "路由設定"
38
+ ],
39
+ "cls": "blue",
40
+ "group": "FE"
41
+ },
42
+ {
43
+ "id": "sv1",
44
+ "label": "API 閘道",
45
+ "cls": "green",
46
+ "group": "SV"
47
+ },
48
+ {
49
+ "id": "sv2",
50
+ "title": "訂單服務",
51
+ "items": [
52
+ "訂單建立",
53
+ "訂單查詢",
54
+ "退款處理"
55
+ ],
56
+ "cls": "green",
57
+ "group": "SV"
58
+ },
59
+ {
60
+ "id": "sv3",
61
+ "title": "會員服務",
62
+ "items": [
63
+ "註冊登入",
64
+ "權限驗證"
65
+ ],
66
+ "cls": "green",
67
+ "group": "SV"
68
+ },
69
+ {
70
+ "id": "sv4",
71
+ "label": "通知服務",
72
+ "cls": "green",
73
+ "group": "SV"
74
+ },
75
+ {
76
+ "id": "db1",
77
+ "label": "主要資料庫",
78
+ "cls": "orange",
79
+ "group": "DB"
80
+ },
81
+ {
82
+ "id": "db2",
83
+ "label": "快取",
84
+ "cls": "orange",
85
+ "group": "DB"
86
+ },
87
+ {
88
+ "id": "db3",
89
+ "label": "訊息佇列",
90
+ "cls": "orange",
91
+ "group": "DB"
92
+ }
93
+ ],
94
+ "edges": [
95
+ {
96
+ "from": "FE",
97
+ "to": "SV",
98
+ "label": "前台請求"
99
+ },
100
+ {
101
+ "from": "SV",
102
+ "to": "DB",
103
+ "label": "資料存取"
104
+ },
105
+ {
106
+ "from": "fe1",
107
+ "to": "sv1",
108
+ "label": "呼叫 API"
109
+ },
110
+ {
111
+ "from": "fe2",
112
+ "to": "sv1",
113
+ "label": "呼叫 API"
114
+ },
115
+ {
116
+ "from": "sv2",
117
+ "to": "db1"
118
+ },
119
+ {
120
+ "from": "sv3",
121
+ "to": "db1"
122
+ },
123
+ {
124
+ "from": "sv2",
125
+ "to": "db2",
126
+ "label": "快取查詢",
127
+ "kind": "dashed"
128
+ },
129
+ {
130
+ "from": "sv4",
131
+ "to": "db3"
132
+ }
133
+ ]
134
+ }
@@ -0,0 +1,178 @@
1
+ {
2
+ "dir": "TB",
3
+ "nodes": [
4
+ {
5
+ "id": "SITE",
6
+ "label": "入口網站",
7
+ "cls": "purpleG"
8
+ },
9
+ {
10
+ "id": "SEC_A",
11
+ "label": "商品瀏覽區",
12
+ "cls": "blueG2",
13
+ "group": "SITE"
14
+ },
15
+ {
16
+ "id": "SEC_B",
17
+ "label": "會員專區",
18
+ "cls": "greenG2",
19
+ "group": "SITE"
20
+ },
21
+ {
22
+ "id": "SEC_C",
23
+ "label": "購物流程",
24
+ "cls": "orangeG",
25
+ "group": "SITE"
26
+ },
27
+ {
28
+ "id": "a1",
29
+ "label": "首頁",
30
+ "cls": "blue",
31
+ "group": "SEC_A"
32
+ },
33
+ {
34
+ "id": "a2",
35
+ "label": "分類列表",
36
+ "cls": "blue",
37
+ "group": "SEC_A"
38
+ },
39
+ {
40
+ "id": "a3",
41
+ "label": "商品清單",
42
+ "cls": "blue",
43
+ "group": "SEC_A"
44
+ },
45
+ {
46
+ "id": "a4",
47
+ "label": "商品詳情",
48
+ "cls": "blue",
49
+ "group": "SEC_A"
50
+ },
51
+ {
52
+ "id": "b1",
53
+ "label": "登入頁",
54
+ "cls": "green",
55
+ "group": "SEC_B"
56
+ },
57
+ {
58
+ "id": "b2",
59
+ "label": "註冊頁",
60
+ "cls": "green",
61
+ "group": "SEC_B"
62
+ },
63
+ {
64
+ "id": "b3",
65
+ "label": "會員中心",
66
+ "cls": "green",
67
+ "group": "SEC_B"
68
+ },
69
+ {
70
+ "id": "b4",
71
+ "label": "訂單紀錄",
72
+ "cls": "green",
73
+ "group": "SEC_B"
74
+ },
75
+ {
76
+ "id": "c1",
77
+ "label": "購物車",
78
+ "cls": "orange",
79
+ "group": "SEC_C"
80
+ },
81
+ {
82
+ "id": "c2",
83
+ "label": "結帳頁",
84
+ "cls": "orange",
85
+ "group": "SEC_C"
86
+ },
87
+ {
88
+ "id": "c3",
89
+ "label": "付款頁",
90
+ "cls": "orange",
91
+ "group": "SEC_C"
92
+ },
93
+ {
94
+ "id": "c4",
95
+ "label": "完成頁",
96
+ "cls": "orange",
97
+ "group": "SEC_C"
98
+ },
99
+ {
100
+ "id": "d1",
101
+ "label": "客服頁",
102
+ "cls": "purple"
103
+ },
104
+ {
105
+ "id": "d2",
106
+ "label": "常見問題",
107
+ "cls": "purple"
108
+ }
109
+ ],
110
+ "edges": [
111
+ {
112
+ "from": "a1",
113
+ "to": "a2",
114
+ "label": "點擊"
115
+ },
116
+ {
117
+ "from": "a2",
118
+ "to": "a3",
119
+ "label": "點擊"
120
+ },
121
+ {
122
+ "from": "a3",
123
+ "to": "a4",
124
+ "label": "點擊"
125
+ },
126
+ {
127
+ "from": "b1",
128
+ "to": "b2",
129
+ "label": "點擊"
130
+ },
131
+ {
132
+ "from": "b1",
133
+ "to": "b3",
134
+ "label": "登入成功"
135
+ },
136
+ {
137
+ "from": "b3",
138
+ "to": "b4",
139
+ "label": "點擊"
140
+ },
141
+ {
142
+ "from": "c1",
143
+ "to": "c2",
144
+ "label": "點擊"
145
+ },
146
+ {
147
+ "from": "c2",
148
+ "to": "c3",
149
+ "label": "點擊"
150
+ },
151
+ {
152
+ "from": "c3",
153
+ "to": "c4",
154
+ "label": "付款完成"
155
+ },
156
+ {
157
+ "from": "a4",
158
+ "to": "d1",
159
+ "label": "點擊"
160
+ },
161
+ {
162
+ "from": "b1",
163
+ "to": "d1",
164
+ "label": "忘記密碼",
165
+ "kind": "dashed"
166
+ },
167
+ {
168
+ "from": "c1",
169
+ "to": "d1",
170
+ "label": "需要協助"
171
+ },
172
+ {
173
+ "from": "d1",
174
+ "to": "d2",
175
+ "label": "點擊"
176
+ }
177
+ ]
178
+ }
package/test/figures.mjs CHANGED
@@ -1,10 +1,11 @@
1
- // 9 張真圖正規化數據索引(供回歸測試): 讀 test/data/*.json, 衍生 rich 節點 label
1
+ // 12 張範例圖正規化數據索引(供回歸測試): 讀 test/data/*.json, 衍生 rich 節點 label
2
+ // 數據皆為泛用虛構情境(架構類/流程類/關聯組成類), 結構覆蓋: 巢狀容器/富節點/菱形循環/LR與TB/群組邊/A4折排/align
2
3
  import fs from 'fs'
3
4
  import { fileURLToPath } from 'url'
4
5
  import { dirname, resolve } from 'path'
5
6
  import { deriveLabels } from '../src/common/derive.mjs'
6
7
 
7
8
  const __dir = dirname(fileURLToPath(import.meta.url))
8
- const KEYS = ['系統架構圖', '系統關聯圖', '作業流程圖', '線上畫面關聯圖', '程式分層架構圖', '程式元件組成圖', '後端服務組成圖', '批次上傳處理流程圖', '前端架構與資料流圖']
9
+ const KEYS = ['電商平台架構圖', '微服務叢集架構圖', '物聯網平台架構圖', '系統分層架構圖', '訂單處理流程圖', '會員註冊流程圖', '資料清洗流程圖', '工單處理流程圖', '模組組成圖', '頁面導覽關聯圖', '資料流向圖', '權限角色關聯圖']
9
10
 
10
11
  export const FIGURES = KEYS.map(key => ({ key, data: deriveLabels(JSON.parse(fs.readFileSync(resolve(__dir, 'data', key + '.json'), 'utf8'))) }))
package/test/lib.mjs CHANGED
@@ -28,7 +28,9 @@ export async function renderCase(page, data) {
28
28
  if (!res.ok) return { spec, res, svg: null, png: null }
29
29
  await page.evaluate(() => document.fonts && document.fonts.ready)
30
30
  await page.waitForTimeout(120)
31
- const svg = await page.evaluate(() => document.getElementById('stage').innerHTML)
31
+ // innerHTML HTML 序列化, 會把 U+00A0 輸出成具名實體  (XML 未定義, 存成獨立 .svg 檔用瀏覽器直開會解析失敗)
32
+ // → 正規化回數字實體  , 使基準檔為合法 standalone SVG
33
+ const svg = (await page.evaluate(() => document.getElementById('stage').innerHTML)).replace(/ /g, ' ')
32
34
  const png = await page.locator('#stage svg').screenshot()
33
35
  return { spec, res, svg, png }
34
36
  }
@@ -0,0 +1,5 @@
1
+ // p1 渲染回歸(mocha) — 與 p10 相同測試輸入之 PNG 快照基準(共用邏輯見 snapshot.mjs)
2
+ import { definePngSuite } from './snapshot.mjs'
3
+ import { genPng } from '../src/p1/gen.mjs'
4
+
5
+ definePngSuite('p1', genPng)
package/test/p10.test.mjs CHANGED
@@ -14,16 +14,18 @@ import pixelmatch from 'pixelmatch'
14
14
  import { PNG } from 'pngjs'
15
15
  import { openStage, renderCase, runInvariants, helpers } from './lib.mjs'
16
16
  import { CASES } from './cases.mjs'
17
+ import { DIAMOND_CASES } from './cases-diamond.mjs'
17
18
  import { FIGURES } from './figures.mjs'
18
19
 
19
20
  const __dir = dirname(fileURLToPath(import.meta.url))
20
- const SNAP = resolve(__dir, 'pics')
21
+ const SNAP = resolve(__dir, 'pics', 'p10')
21
22
  const MAXDIFF = 60 // PNG 容許之反鋸齒雜訊像素上限(真 regression 量級遠超此)
22
23
  const UPDATE = process.env.UPDATE_BASELINE === '1' || process.env.UPDATE_BASELINE === 'true'
23
24
 
24
- // 待測清單: 合成案 + 9 真圖(真圖為最重要之回歸案)
25
+ // 待測清單: 合成案 + 菱形進出組合案 + 範例圖
25
26
  const items = []
26
27
  for (const c of CASES) items.push({ name: c.name, data: c.data, check: c.check, expect: c.expect, kind: '合成' })
28
+ for (const c of DIAMOND_CASES) items.push({ name: c.name, data: c.data, check: c.check, kind: '菱形' })
27
29
  for (const f of FIGURES) items.push({ name: f.key, data: f.data, kind: '真圖' })
28
30
 
29
31
  // PNG 像素比對(反鋸齒容差): 回 { same, detail }
@@ -86,4 +88,54 @@ describe('p10 渲染回歸(結構不變量 + 快照基準)', function() {
86
88
  }
87
89
  })
88
90
  }
91
+
92
+ // 菱形進出組合規則之單元驗證: 直接對頁內繪製函式(window.__dia)驅動 13 種組合,
93
+ // 不受 ELK 佈局埠序限制(其中「同半側」類組合乾淨合成圖排不出來, 僅能在此層驗證; 見 cases-diamond.mjs 檔頭)。
94
+ it('菱形 13 種進出組合規則(單元驗證)', async function() {
95
+ const fails = await page.evaluate(() => {
96
+ const { diamondSlantMid, diamondInAnchor, routeOutFromVertex, routeInToAnchor } = window.__dia
97
+ const box = { x: 0, y: 0, w: 100, h: 100 }
98
+ const bottom = { ax: 'y', sg: 1, v: { x: 50, y: 100 } }
99
+ const near = (p, q) => Math.abs(p.x - q.x) <= 0.5 && Math.abs(p.y - q.y) <= 0.5
100
+ const mL = diamondSlantMid(box, bottom, -1)
101
+ const mR = diamondSlantMid(box, bottom, 1)
102
+ const v = bottom.v
103
+ // 合成路徑: 出=自底邊 x 下行轉出; 進=自下方沿 x 直上進入底邊
104
+ const mkOut = (x) => [{ x, y: 100 }, { x, y: 160 }, { x: x + 25, y: 160 }, { x: x + 25, y: 300 }]
105
+ const mkIn = (x) => [{ x: x + 40, y: 300 }, { x: x + 40, y: 160 }, { x, y: 160 }, { x, y: 100 }]
106
+ const out = []
107
+ function run(name, outXs, inXs, expectIn) {
108
+ const hasOut = outXs.length > 0
109
+ outXs.forEach((x, i) => {
110
+ const p = mkOut(x)
111
+ routeOutFromVertex(p, { ax: 'y', sg: 1, v: { x: 50, y: 100 } })
112
+ if (!near(p[0], v)) out.push(`${name} 出${i} 未自頂點 (${p[0].x},${p[0].y})`)
113
+ })
114
+ inXs.forEach((x, i) => {
115
+ const p = mkIn(x)
116
+ const a = diamondInAnchor(box, bottom, hasOut, p[p.length - 1])
117
+ routeInToAnchor(p, bottom, a)
118
+ const e = p[p.length - 1], want = expectIn[i]
119
+ if (!near(e, want)) out.push(`${name} 進${i} 錨點 (${e.x.toFixed(1)},${e.y.toFixed(1)}) ≠ (${want.x},${want.y})`)
120
+ })
121
+ }
122
+ run('1進', [], [30], [v])
123
+ run('1出', [30], [], [])
124
+ run('2進(同半側)', [], [20, 35], [v, v])
125
+ run('2進(不同半側)', [], [30, 70], [v, v])
126
+ run('2出(同半側)', [20, 35], [], [])
127
+ run('2出(不同半側)', [30, 70], [], [])
128
+ run('1進1出', [30], [70], [mR])
129
+ run('2進1出(進同半側)', [45], [60, 80], [mR, mR])
130
+ run('2進1出(進不同半側)', [45], [20, 80], [mL, mR])
131
+ run('1進2出(出同半側)', [20, 35], [70], [mR])
132
+ run('1進2出(出不同半側)', [20, 80], [45], [mL])
133
+ run('2進2出(進同,出同)', [20, 35], [60, 80], [mR, mR])
134
+ run('2進2出(進不同,出同)', [20, 35], [10, 80], [mL, mR])
135
+ run('2進2出(進同,出不同)', [20, 80], [55, 70], [mR, mR])
136
+ run('2進2出(進不同,出不同)', [20, 80], [40, 60], [mL, mR])
137
+ return out
138
+ })
139
+ assert.deepStrictEqual(fails, [], '規則單元驗證失敗:\n' + fails.join('\n'))
140
+ })
89
141
  })
@@ -0,0 +1,5 @@
1
+ // p2 渲染回歸(mocha) — 與 p10 相同測試輸入之 PNG 快照基準(共用邏輯見 snapshot.mjs)
2
+ import { definePngSuite } from './snapshot.mjs'
3
+ import { genPng } from '../src/p2/gen.mjs'
4
+
5
+ definePngSuite('p2', genPng)
@@ -0,0 +1,5 @@
1
+ // p3 渲染回歸(mocha) — 與 p10 相同測試輸入之 PNG 快照基準(共用邏輯見 snapshot.mjs)
2
+ import { definePngSuite } from './snapshot.mjs'
3
+ import { genPng } from '../src/p3/gen.mjs'
4
+
5
+ definePngSuite('p3', genPng)
@@ -0,0 +1,5 @@
1
+ // p4 渲染回歸(mocha) — 與 p10 相同測試輸入之 PNG 快照基準(共用邏輯見 snapshot.mjs)
2
+ import { definePngSuite } from './snapshot.mjs'
3
+ import { genPng } from '../src/p4/gen.mjs'
4
+
5
+ definePngSuite('p4', genPng)
@@ -0,0 +1,6 @@
1
+ // p5 渲染回歸(mocha) — 與 p10 相同測試輸入之 PNG 快照基準(共用邏輯見 snapshot.mjs)
2
+ // D2 WASM+dagre 對 18-20 節點圖單張可達 20-40s, 平行執行下再受 CPU 競爭 → 放寬單案逾時
3
+ import { definePngSuite } from './snapshot.mjs'
4
+ import { genPng } from '../src/p5/gen.mjs'
5
+
6
+ definePngSuite('p5', genPng, { timeout: 180000 })
@@ -0,0 +1,5 @@
1
+ // p6 渲染回歸(mocha) — 與 p10 相同測試輸入之 PNG 快照基準(共用邏輯見 snapshot.mjs)
2
+ import { definePngSuite } from './snapshot.mjs'
3
+ import { genPng } from '../src/p6/gen.mjs'
4
+
5
+ definePngSuite('p6', genPng)
@@ -0,0 +1,5 @@
1
+ // p7 渲染回歸(mocha) — 與 p10 相同測試輸入之 PNG 快照基準(共用邏輯見 snapshot.mjs)
2
+ import { definePngSuite } from './snapshot.mjs'
3
+ import { genPng } from '../src/p7/gen.mjs'
4
+
5
+ definePngSuite('p7', genPng)
@@ -0,0 +1,5 @@
1
+ // p8 渲染回歸(mocha) — 與 p10 相同測試輸入之 PNG 快照基準(共用邏輯見 snapshot.mjs)
2
+ import { definePngSuite } from './snapshot.mjs'
3
+ import { genPng } from '../src/p8/gen.mjs'
4
+
5
+ definePngSuite('p8', genPng)
@@ -0,0 +1,5 @@
1
+ // p9 渲染回歸(mocha) — 與 p10 相同測試輸入之 PNG 快照基準(共用邏輯見 snapshot.mjs)
2
+ import { definePngSuite } from './snapshot.mjs'
3
+ import { genPng } from '../src/p9/gen.mjs'
4
+
5
+ definePngSuite('p9', genPng)
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
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="147" height="479" viewBox="-18 -18 147 479" style="background:#fff"><path d="M 55.5 48 L 55.5 82" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 55.5 82 L 59.5 73 L 51.5 73 Z" fill="#44505a"></path><path d="M 64.16666666666666 118 L 64.16666666666666 144 L 77.25 144 L 77.25 243.75" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 77.25 243.75 L 81.25 234.75 L 73.25 234.75 Z" fill="#44505a"></path><path d="M 55.5 309 L 55.5 395" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 55.5 395 L 59.5 386 L 51.5 386 Z" fill="#44505a"></path><foreignObject x="28.5" y="343" 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 55.5 222 L 55.5 144 L 46.83333333333333 144 L 46.83333333333333 118" fill="none" stroke="#44505a" stroke-width="2" stroke-dasharray="6 4"></path><path d="M 46.83333333333333 118 L 42.83333333333333 127 L 50.83333333333333 127 Z" fill="#44505a"></path><foreignObject x="14" y="170" 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="29.5" y="12" width="52" height="36" rx="7" fill="#eef4fb" stroke="#3f6fb0" stroke-width="1.6"></rect><foreignObject x="29.5" y="12" 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="29.5" y="82" width="52" height="36" rx="7" fill="#eaf4ef" stroke="#348a5c" stroke-width="1.6"></rect><foreignObject x="29.5" y="82" 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><polygon points="55.5,222 99,265.5 55.5,309 12,265.5" fill="#fcf0e2" stroke="#c46e1a" stroke-width="1.8"></polygon><foreignObject x="12" y="222" width="87" height="87"><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="29.5" y="395" width="52" height="36" rx="7" fill="#eaf4ef" stroke="#256046" stroke-width="1.6"></rect><foreignObject x="29.5" y="395" 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:#256046;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>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="224" height="419" viewBox="-18 -18 224 419" style="background:#fff"><rect x="12" y="12" width="164" height="226" rx="8" fill="#f5f9fe" fill-opacity="0.38" stroke="#3f6fb0" stroke-width="2"></rect><foreignObject x="59.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="26" y="54" width="136" height="159" rx="8" fill="#f0f7f3" fill-opacity="0.38" stroke="#348a5c" stroke-width="2"></rect><foreignObject x="59.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;overflow-wrap:break-word;word-break:normal">第二層</div></foreignObject><rect x="40" y="96" width="108" height="92" rx="8" fill="#fdf6ec" fill-opacity="0.38" stroke="#c46e1a" stroke-width="2"></rect><foreignObject x="59.5" y="101" 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 94 174 L 94 335" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 94 335 L 98 326 L 90 326 Z" fill="#44505a"></path><foreignObject x="54" y="283" 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><rect x="54" y="138" width="80" height="36" rx="7" fill="#fcf0e2" stroke="#c46e1a" stroke-width="1.6"></rect><foreignObject x="54" y="138" 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="54" y="335" width="80" height="36" rx="7" fill="#eef4fb" stroke="#3f6fb0" stroke-width="1.6"></rect><foreignObject x="54" y="335" 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>
Binary file
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="166" height="445" viewBox="-18 -18 166 445" style="background:#fff"><path d="M 64.5 48 L 64.5 82" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 64.5 82 L 68.5 73 L 60.5 73 Z" fill="#44505a"></path><path d="M 64.5 169 L 64.5 195 L 90 195 L 90 273" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 90 273 L 94 264 L 86 264 Z" fill="#44505a"></path><foreignObject x="93" y="221" 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 90 309 L 90 335 L 77.83333333333334 335 L 77.83333333333334 361" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 77.83333333333334 361 L 81.83333333333334 352 L 73.83333333333334 352 Z" fill="#44505a"></path><path d="M 51.166666666666664 361 L 51.166666666666664 335 L 39 335 L 39 195 L 42.75 195 L 42.75 147.25" fill="none" stroke="#44505a" stroke-width="2" stroke-dasharray="6 4"></path><path d="M 42.75 147.25 L 38.75 156.25 L 46.75 156.25 Z" fill="#44505a"></path><foreignObject x="12" y="221" 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="38.5" y="12" width="52" height="36" rx="7" fill="#eef4fb" stroke="#3f6fb0" stroke-width="1.6"></rect><foreignObject x="38.5" y="12" 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><polygon points="64.5,82 108,125.5 64.5,169 21,125.5" fill="#fcf0e2" stroke="#c46e1a" stroke-width="1.8"></polygon><foreignObject x="21" y="82" width="87" height="87"><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="64" y="273" width="52" height="36" rx="7" fill="#eaf4ef" stroke="#348a5c" stroke-width="1.6"></rect><foreignObject x="64" y="273" 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="24.5" y="361" width="80" height="36" rx="7" fill="#fbecea" stroke="#c0392b" stroke-width="1.6"></rect><foreignObject x="24.5" y="361" 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>
Binary file
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="241" height="445" viewBox="-18 -18 241 445" style="background:#fff"><path d="M 102 48 L 102 82" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 102 82 L 106 73 L 98 73 Z" fill="#44505a"></path><path d="M 102 169 L 102 195 L 160 195 L 160 273" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 160 273 L 164 264 L 156 264 Z" fill="#44505a"></path><foreignObject x="145" y="221" width="19" 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 169 L 102 195 L 45 195 L 45 273" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 45 273 L 49 264 L 41 264 Z" fill="#44505a"></path><foreignObject x="30" y="221" width="19" 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 160 309 L 160 335 L 144.33333333333334 335 L 144.33333333333334 361" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 144.33333333333334 361 L 148.33333333333334 352 L 140.33333333333334 352 Z" fill="#44505a"></path><path d="M 117.66666666666667 361 L 117.66666666666667 335 L 123.75 335 L 123.75 147.25" fill="none" stroke="#44505a" stroke-width="2" stroke-dasharray="6 4"></path><path d="M 123.75 147.25 L 119.75 156.25 L 127.75 156.25 Z" fill="#44505a"></path><rect x="76" y="12" width="52" height="36" rx="7" fill="#eef4fb" stroke="#3f6fb0" stroke-width="1.6"></rect><foreignObject x="76" y="12" 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><polygon points="102,82 145.5,125.5 102,169 58.5,125.5" fill="#fcf0e2" stroke="#c46e1a" stroke-width="1.8"></polygon><foreignObject x="58.5" y="82" width="87" height="87"><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="127" y="273" width="66" height="36" rx="7" fill="#eaf4ef" stroke="#348a5c" stroke-width="1.6"></rect><foreignObject x="127" y="273" 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="12" y="273" width="66" height="36" rx="7" fill="#fcf0e2" stroke="#c46e1a" stroke-width="1.6"></rect><foreignObject x="12" y="273" 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="91" y="361" width="80" height="36" rx="7" fill="#fbecea" stroke="#c0392b" stroke-width="1.6"></rect><foreignObject x="91" y="361" 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>
Binary file
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="147" height="217" viewBox="-18 -18 147 217" style="background:#fff"><path d="M 55.5 48 L 55.5 82" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 55.5 82 L 59.5 73 L 51.5 73 Z" fill="#44505a"></path><rect x="29.5" y="12" width="52" height="36" rx="7" fill="#eef4fb" stroke="#3f6fb0" stroke-width="1.6"></rect><foreignObject x="29.5" y="12" 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><polygon points="55.5,82 99,125.5 55.5,169 12,125.5" fill="#fcf0e2" stroke="#c46e1a" stroke-width="1.8"></polygon><foreignObject x="12" y="82" width="87" height="87"><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>
Binary file
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="147" height="287" viewBox="-18 -18 147 287" style="background:#fff"><path d="M 55.5 48 L 55.5 82" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 55.5 82 L 59.5 73 L 51.5 73 Z" fill="#44505a"></path><path d="M 55.5 169 L 55.5 203" fill="none" stroke="#44505a" stroke-width="2"></path><path d="M 55.5 203 L 59.5 194 L 51.5 194 Z" fill="#44505a"></path><rect x="29.5" y="12" width="52" height="36" rx="7" fill="#eef4fb" stroke="#3f6fb0" stroke-width="1.6"></rect><foreignObject x="29.5" y="12" 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><polygon points="55.5,82 99,125.5 55.5,169 12,125.5" fill="#fcf0e2" stroke="#c46e1a" stroke-width="1.8"></polygon><foreignObject x="12" y="82" width="87" height="87"><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="29.5" y="203" width="52" height="36" rx="7" fill="#eaf4ef" stroke="#348a5c" stroke-width="1.6"></rect><foreignObject x="29.5" y="203" 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></svg>
Binary file