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.
- package/README.md +5 -1
- package/dist/w-flowchart.umd.js +2 -2
- package/dist/w-flowchart.umd.js.map +1 -1
- package/docs/WFlowchart.mjs.html +169 -0
- package/docs/global.html +657 -0
- package/docs/index.html +2 -2
- package/package.json +52 -49
- package/src/WFlowchart.mjs +97 -0
- package/src/p1/README.md +2 -2
- package/src/p1/gen.mjs +54 -20
- package/src/p10/README.md +6 -2
- package/src/p10/gen.mjs +235 -15
- package/src/p2/README.md +1 -1
- package/src/p2/gen.mjs +52 -7
- package/src/p3/README.md +1 -1
- package/src/p3/gen.mjs +24 -2
- package/src/p4/README.md +1 -1
- package/src/p4/gen.mjs +36 -10
- package/src/p5/README.md +1 -1
- package/src/p5/gen.mjs +45 -18
- package/src/p6/README.md +1 -1
- package/src/p6/gen.mjs +108 -5
- package/src/p7/README.md +1 -1
- package/src/p7/gen.mjs +42 -3
- package/src/p8/README.md +1 -1
- package/src/p8/gen.mjs +41 -2
- package/src/p9/README.md +1 -1
- package/src/p9/gen.mjs +14 -7
- package/src/p9/page9.html +13 -5
- package/test/cases-diamond.mjs +221 -0
- package/test/cases.mjs +17 -1
- 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
- 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
- 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
- package/test/data//346/250/241/347/265/204/347/265/204/346/210/220/345/234/226.json +111 -0
- 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
- 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
- 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
- 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
- package/test/data//350/263/207/346/226/231/346/265/201/345/220/221/345/234/226.json +137 -0
- 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
- 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
- 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
- package/test/figures.mjs +3 -2
- package/test/lib.mjs +3 -1
- package/test/p1.test.mjs +5 -0
- package/test/p10.test.mjs +54 -2
- package/test/p2.test.mjs +5 -0
- package/test/p3.test.mjs +5 -0
- package/test/p4.test.mjs +5 -0
- package/test/p5.test.mjs +6 -0
- package/test/p6.test.mjs +5 -0
- package/test/p7.test.mjs +5 -0
- package/test/p8.test.mjs +5 -0
- package/test/p9.test.mjs +5 -0
- package/test/pics/p1/cycle.png +0 -0
- package/test/pics/p1/deep-nest.png +0 -0
- package/test/pics/p1/diamond.png +0 -0
- package/test/pics/p1/edges-mix.png +0 -0
- package/test/pics/p1/english.png +0 -0
- package/test/pics/p1/flat-tb.png +0 -0
- package/test/pics/p1/fold-tall.png +0 -0
- package/test/pics/p1/fold-wide.png +0 -0
- package/test/pics/p1/group-edge.png +0 -0
- package/test/pics/p1/items-node.png +0 -0
- package/test/pics/p1/long-label.png +0 -0
- package/test/pics/p1/lr-flat.png +0 -0
- package/test/pics/p1/nested-group.png +0 -0
- package/test/pics/p1/no-edges.png +0 -0
- package/test/pics/p1/title-overflow.png +0 -0
- package/test/pics/p1/valign.png +0 -0
- 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
- 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
- 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
- package/test/pics/p1//346/250/241/347/265/204/347/265/204/346/210/220/345/234/226.png +0 -0
- 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
- 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
- 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
- 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
- package/test/pics/p1//350/263/207/346/226/231/346/265/201/345/220/221/345/234/226.png +0 -0
- 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
- 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
- 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
- package/test/pics/p10/cycle.png +0 -0
- package/test/pics/p10/cycle.svg +1 -0
- package/test/pics/p10/deep-nest.svg +1 -0
- package/test/pics/p10/dia-1in-1out.png +0 -0
- package/test/pics/p10/dia-1in-1out.svg +1 -0
- package/test/pics/p10/dia-1in-2out.png +0 -0
- package/test/pics/p10/dia-1in-2out.svg +1 -0
- package/test/pics/p10/dia-1in.png +0 -0
- package/test/pics/p10/dia-1in.svg +1 -0
- package/test/pics/p10/dia-1out.png +0 -0
- package/test/pics/p10/dia-1out.svg +1 -0
- package/test/pics/p10/dia-2in-1out.png +0 -0
- package/test/pics/p10/dia-2in-1out.svg +1 -0
- package/test/pics/p10/dia-2in-2out-dd.png +0 -0
- package/test/pics/p10/dia-2in-2out-dd.svg +1 -0
- package/test/pics/p10/dia-2in-2out-ss.png +0 -0
- package/test/pics/p10/dia-2in-2out-ss.svg +1 -0
- package/test/pics/p10/dia-2in.png +0 -0
- package/test/pics/p10/dia-2in.svg +1 -0
- package/test/pics/p10/dia-2out.png +0 -0
- package/test/pics/p10/dia-2out.svg +1 -0
- package/test/pics/p10/diamond.png +0 -0
- package/test/pics/p10/diamond.svg +1 -0
- package/test/pics/p10/edges-mix.png +0 -0
- package/test/pics/p10/edges-mix.svg +1 -0
- package/test/pics/p10/english.png +0 -0
- package/test/pics/p10/english.svg +1 -0
- package/test/pics/p10/flat-tb.svg +1 -0
- package/test/pics/p10/fold-tall.svg +1 -0
- package/test/pics/p10/fold-wide.svg +1 -0
- package/test/pics/p10/group-edge.png +0 -0
- package/test/pics/p10/group-edge.svg +1 -0
- package/test/pics/p10/items-node.svg +1 -0
- package/test/pics/p10/long-label.svg +1 -0
- package/test/pics/p10/lr-flat.svg +1 -0
- package/test/pics/p10/nested-group.png +0 -0
- package/test/pics/p10/nested-group.svg +1 -0
- package/test/pics/p10/no-edges.svg +1 -0
- package/test/pics/p10/title-overflow.svg +1 -0
- package/test/pics/p10/valign.svg +1 -0
- 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
- 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
- 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
- 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
- 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
- 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
- package/test/pics/p10//346/250/241/347/265/204/347/265/204/346/210/220/345/234/226.png +0 -0
- package/test/pics/p10//346/250/241/347/265/204/347/265/204/346/210/220/345/234/226.svg +1 -0
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- package/test/pics/p10//350/263/207/346/226/231/346/265/201/345/220/221/345/234/226.png +0 -0
- package/test/pics/p10//350/263/207/346/226/231/346/265/201/345/220/221/345/234/226.svg +1 -0
- 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
- 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
- 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
- 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
- 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
- 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
- package/test/pics/p2/cycle.png +0 -0
- package/test/pics/p2/deep-nest.png +0 -0
- package/test/pics/p2/diamond.png +0 -0
- package/test/pics/p2/edges-mix.png +0 -0
- package/test/pics/p2/english.png +0 -0
- package/test/pics/p2/flat-tb.png +0 -0
- package/test/pics/p2/fold-tall.png +0 -0
- package/test/pics/p2/fold-wide.png +0 -0
- package/test/pics/p2/group-edge.png +0 -0
- package/test/pics/p2/items-node.png +0 -0
- package/test/pics/p2/long-label.png +0 -0
- package/test/pics/p2/lr-flat.png +0 -0
- package/test/pics/p2/nested-group.png +0 -0
- package/test/pics/p2/no-edges.png +0 -0
- package/test/pics/p2/title-overflow.png +0 -0
- package/test/pics/p2/valign.png +0 -0
- 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
- 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
- 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
- package/test/pics/p2//346/250/241/347/265/204/347/265/204/346/210/220/345/234/226.png +0 -0
- 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
- 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
- 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
- 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
- package/test/pics/p2//350/263/207/346/226/231/346/265/201/345/220/221/345/234/226.png +0 -0
- 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
- 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
- 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
- package/test/pics/p3/cycle.png +0 -0
- package/test/pics/p3/deep-nest.png +0 -0
- package/test/pics/p3/diamond.png +0 -0
- package/test/pics/p3/edges-mix.png +0 -0
- package/test/pics/p3/english.png +0 -0
- package/test/pics/p3/flat-tb.png +0 -0
- package/test/pics/p3/fold-tall.png +0 -0
- package/test/pics/p3/fold-wide.png +0 -0
- package/test/pics/p3/group-edge.png +0 -0
- package/test/pics/p3/items-node.png +0 -0
- package/test/pics/p3/long-label.png +0 -0
- package/test/pics/p3/lr-flat.png +0 -0
- package/test/pics/p3/nested-group.png +0 -0
- package/test/pics/p3/no-edges.png +0 -0
- package/test/pics/p3/title-overflow.png +0 -0
- package/test/pics/p3/valign.png +0 -0
- 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
- 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
- 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
- package/test/pics/p3//346/250/241/347/265/204/347/265/204/346/210/220/345/234/226.png +0 -0
- 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
- 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
- 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
- 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
- package/test/pics/p3//350/263/207/346/226/231/346/265/201/345/220/221/345/234/226.png +0 -0
- 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
- 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
- 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
- package/test/pics/p4/cycle.png +0 -0
- package/test/pics/p4/deep-nest.png +0 -0
- package/test/pics/p4/diamond.png +0 -0
- package/test/pics/p4/edges-mix.png +0 -0
- package/test/pics/p4/english.png +0 -0
- package/test/pics/p4/flat-tb.png +0 -0
- package/test/pics/p4/fold-tall.png +0 -0
- package/test/pics/p4/fold-wide.png +0 -0
- package/test/pics/p4/group-edge.png +0 -0
- package/test/pics/p4/items-node.png +0 -0
- package/test/pics/p4/long-label.png +0 -0
- package/test/pics/p4/lr-flat.png +0 -0
- package/test/pics/p4/nested-group.png +0 -0
- package/test/pics/p4/no-edges.png +0 -0
- package/test/pics/p4/title-overflow.png +0 -0
- package/test/pics/p4/valign.png +0 -0
- 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
- 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
- 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
- package/test/pics/p4//346/250/241/347/265/204/347/265/204/346/210/220/345/234/226.png +0 -0
- 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
- 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
- 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
- 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
- package/test/pics/p4//350/263/207/346/226/231/346/265/201/345/220/221/345/234/226.png +0 -0
- 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
- 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
- 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
- package/test/pics/p5/cycle.png +0 -0
- package/test/pics/p5/deep-nest.png +0 -0
- package/test/pics/p5/diamond.png +0 -0
- package/test/pics/p5/edges-mix.png +0 -0
- package/test/pics/p5/english.png +0 -0
- package/test/pics/p5/flat-tb.png +0 -0
- package/test/pics/p5/fold-tall.png +0 -0
- package/test/pics/p5/fold-wide.png +0 -0
- package/test/pics/p5/group-edge.png +0 -0
- package/test/pics/p5/items-node.png +0 -0
- package/test/pics/p5/long-label.png +0 -0
- package/test/pics/p5/lr-flat.png +0 -0
- package/test/pics/p5/nested-group.png +0 -0
- package/test/pics/p5/no-edges.png +0 -0
- package/test/pics/p5/title-overflow.png +0 -0
- package/test/pics/p5/valign.png +0 -0
- 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
- 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
- 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
- package/test/pics/p5//346/250/241/347/265/204/347/265/204/346/210/220/345/234/226.png +0 -0
- 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
- 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
- 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
- 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
- package/test/pics/p5//350/263/207/346/226/231/346/265/201/345/220/221/345/234/226.png +0 -0
- 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
- 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
- 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
- package/test/pics/p6/cycle.png +0 -0
- package/test/pics/p6/deep-nest.png +0 -0
- package/test/pics/p6/diamond.png +0 -0
- package/test/pics/p6/edges-mix.png +0 -0
- package/test/pics/p6/english.png +0 -0
- package/test/pics/p6/flat-tb.png +0 -0
- package/test/pics/p6/fold-tall.png +0 -0
- package/test/pics/p6/fold-wide.png +0 -0
- package/test/pics/p6/group-edge.png +0 -0
- package/test/pics/p6/items-node.png +0 -0
- package/test/pics/p6/long-label.png +0 -0
- package/test/pics/p6/lr-flat.png +0 -0
- package/test/pics/p6/nested-group.png +0 -0
- package/test/pics/p6/no-edges.png +0 -0
- package/test/pics/p6/title-overflow.png +0 -0
- package/test/pics/p6/valign.png +0 -0
- 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
- 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
- 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
- package/test/pics/p6//346/250/241/347/265/204/347/265/204/346/210/220/345/234/226.png +0 -0
- 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
- 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
- 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
- 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
- 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
- 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
- package/test/pics/p6//350/263/207/346/226/231/346/265/201/345/220/221/345/234/226.png +0 -0
- 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
- 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
- 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
- package/test/pics/p7/cycle.png +0 -0
- package/test/pics/p7/deep-nest.png +0 -0
- package/test/pics/p7/diamond.png +0 -0
- package/test/pics/p7/edges-mix.png +0 -0
- package/test/pics/p7/english.png +0 -0
- package/test/pics/p7/flat-tb.png +0 -0
- package/test/pics/p7/fold-tall.png +0 -0
- package/test/pics/p7/fold-wide.png +0 -0
- package/test/pics/p7/group-edge.png +0 -0
- package/test/pics/p7/items-node.png +0 -0
- package/test/pics/p7/long-label.png +0 -0
- package/test/pics/p7/lr-flat.png +0 -0
- package/test/pics/p7/nested-group.png +0 -0
- package/test/pics/p7/no-edges.png +0 -0
- package/test/pics/p7/title-overflow.png +0 -0
- package/test/pics/p7/valign.png +0 -0
- 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
- 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
- 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
- package/test/pics/p7//346/250/241/347/265/204/347/265/204/346/210/220/345/234/226.png +0 -0
- 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
- 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
- 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
- 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
- package/test/pics/p7//350/263/207/346/226/231/346/265/201/345/220/221/345/234/226.png +0 -0
- 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
- 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
- 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
- package/test/pics/p8/cycle.png +0 -0
- package/test/pics/p8/deep-nest.png +0 -0
- package/test/pics/p8/diamond.png +0 -0
- package/test/pics/p8/edges-mix.png +0 -0
- package/test/pics/p8/english.png +0 -0
- package/test/pics/p8/flat-tb.png +0 -0
- package/test/pics/p8/fold-tall.png +0 -0
- package/test/pics/p8/fold-wide.png +0 -0
- package/test/pics/p8/group-edge.png +0 -0
- package/test/pics/p8/items-node.png +0 -0
- package/test/pics/p8/long-label.png +0 -0
- package/test/pics/p8/lr-flat.png +0 -0
- package/test/pics/p8/nested-group.png +0 -0
- package/test/pics/p8/no-edges.png +0 -0
- package/test/pics/p8/title-overflow.png +0 -0
- package/test/pics/p8/valign.png +0 -0
- 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
- 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
- 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
- package/test/pics/p8//346/250/241/347/265/204/347/265/204/346/210/220/345/234/226.png +0 -0
- 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
- 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
- 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
- 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
- package/test/pics/p8//350/263/207/346/226/231/346/265/201/345/220/221/345/234/226.png +0 -0
- 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
- 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
- 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
- package/test/pics/p9/cycle.png +0 -0
- package/test/pics/p9/deep-nest.png +0 -0
- package/test/pics/p9/diamond.png +0 -0
- package/test/pics/p9/edges-mix.png +0 -0
- package/test/pics/p9/english.png +0 -0
- package/test/pics/p9/flat-tb.png +0 -0
- package/test/pics/p9/fold-tall.png +0 -0
- package/test/pics/p9/fold-wide.png +0 -0
- package/test/pics/p9/group-edge.png +0 -0
- package/test/pics/p9/items-node.png +0 -0
- package/test/pics/p9/long-label.png +0 -0
- package/test/pics/p9/lr-flat.png +0 -0
- package/test/pics/p9/nested-group.png +0 -0
- package/test/pics/p9/no-edges.png +0 -0
- package/test/pics/p9/title-overflow.png +0 -0
- package/test/pics/p9/valign.png +0 -0
- 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
- 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
- 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
- package/test/pics/p9//346/250/241/347/265/204/347/265/204/346/210/220/345/234/226.png +0 -0
- 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
- 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
- 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
- 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
- package/test/pics/p9//350/263/207/346/226/231/346/265/201/345/220/221/345/234/226.png +0 -0
- 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
- 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
- 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
- package/test/snapshot.mjs +67 -0
- package/test/wflowchart.test.mjs +57 -11
- package/toolg/gDistRollup.mjs +3 -0
- package/test/data//344/275/234/346/245/255/346/265/201/347/250/213/345/234/226.json +0 -92
- 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
- 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
- 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
- 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
- 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
- package/test/data//347/263/273/347/265/261/346/236/266/346/247/213/345/234/226.json +0 -102
- package/test/data//347/263/273/347/265/261/351/227/234/350/201/257/345/234/226.json +0 -117
- 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
- package/test/pics/cycle.png +0 -0
- package/test/pics/cycle.svg +0 -1
- package/test/pics/deep-nest.svg +0 -1
- package/test/pics/diamond.png +0 -0
- package/test/pics/diamond.svg +0 -1
- package/test/pics/edges-mix.png +0 -0
- package/test/pics/edges-mix.svg +0 -1
- package/test/pics/english.png +0 -0
- package/test/pics/english.svg +0 -1
- package/test/pics/flat-tb.svg +0 -1
- package/test/pics/fold-tall.svg +0 -1
- package/test/pics/fold-wide.svg +0 -1
- package/test/pics/group-edge.png +0 -0
- package/test/pics/group-edge.svg +0 -1
- package/test/pics/items-node.svg +0 -1
- package/test/pics/long-label.svg +0 -1
- package/test/pics/lr-flat.svg +0 -1
- package/test/pics/nested-group.png +0 -0
- package/test/pics/nested-group.svg +0 -1
- package/test/pics/no-edges.svg +0 -1
- package/test/pics/title-overflow.svg +0 -1
- package/test/pics/valign.svg +0 -1
- package/test/pics//344/275/234/346/245/255/346/265/201/347/250/213/345/234/226.png +0 -0
- package/test/pics//344/275/234/346/245/255/346/265/201/347/250/213/345/234/226.svg +0 -1
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- package/test/pics//347/263/273/347/265/261/346/236/266/346/247/213/345/234/226.png +0 -0
- package/test/pics//347/263/273/347/265/261/346/236/266/346/247/213/345/234/226.svg +0 -1
- package/test/pics//347/263/273/347/265/261/351/227/234/350/201/257/345/234/226.png +0 -0
- package/test/pics//347/263/273/347/265/261/351/227/234/350/201/257/345/234/226.svg +0 -1
- 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
- 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
- /package/test/pics/{deep-nest.png → p10/deep-nest.png} +0 -0
- /package/test/pics/{flat-tb.png → p10/flat-tb.png} +0 -0
- /package/test/pics/{fold-tall.png → p10/fold-tall.png} +0 -0
- /package/test/pics/{fold-wide.png → p10/fold-wide.png} +0 -0
- /package/test/pics/{items-node.png → p10/items-node.png} +0 -0
- /package/test/pics/{long-label.png → p10/long-label.png} +0 -0
- /package/test/pics/{lr-flat.png → p10/lr-flat.png} +0 -0
- /package/test/pics/{no-edges.png → p10/no-edges.png} +0 -0
- /package/test/pics/{title-overflow.png → p10/title-overflow.png} +0 -0
- /package/test/pics/{valign.png → p10/valign.png} +0 -0
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
// 菱形進出組合視覺案 — 僅供 p10 套件(不進 p1~p9 矩陣)
|
|
2
|
+
// 規則(共進共出, 每側獨立): 出=一律由該側「頂點」分岔; 進=純進側匯「頂點」、混合側依「半側」匯「斜邊中點」。
|
|
3
|
+
// check 即規則之可執行翻譯: 斷言各邊實際繪製端點等於規劃錨點。
|
|
4
|
+
//
|
|
5
|
+
// 組合覆蓋說明(13 種進出組合):
|
|
6
|
+
// - 本檔為「ELK 佈局可自然構造」之 9 種視覺案(產標準圖供人工檢視)。
|
|
7
|
+
// - 純進側只在「頂側」可構造(分層佈局中, 菱形要位於來源上方就必有向下路徑=底側出)。
|
|
8
|
+
// - 「同半側」類組合(2進同半側+1出、2出同半側+1進、進出同/異交叉之 ds/sd)受 ELK 交叉最小化
|
|
9
|
+
// 埠序限制, 乾淨合成圖排不出來(實驗多種構圖皆收斂為置中/對稱分佈或 ss 型); 此 4 種組合
|
|
10
|
+
// 連同其餘 9 種, 全數由 p10.test.mjs 之「菱形 13 種進出組合規則(單元驗證)」直接對繪製函式驗證。
|
|
11
|
+
// - dia-2in-2out-ss 為單欄壅塞下自然出現之「進同半側+出同半側」實例(視覺可見共進共出)。
|
|
12
|
+
|
|
13
|
+
const EPS = 2.5
|
|
14
|
+
const near = (p, q) => !!p && !!q && Math.abs(p.x - q.x) <= EPS && Math.abs(p.y - q.y) <= EPS
|
|
15
|
+
|
|
16
|
+
// 菱形各錨點: 底/頂頂點, 底側左右半斜邊中點
|
|
17
|
+
function anchors(D) {
|
|
18
|
+
const cx = D.x + D.w / 2, cy = D.y + D.h / 2, hw = D.w / 2, hh = D.h / 2
|
|
19
|
+
return {
|
|
20
|
+
vB: { x: cx, y: D.y + D.h },
|
|
21
|
+
vT: { x: cx, y: D.y },
|
|
22
|
+
mBL: { x: cx - hw / 2, y: cy + hh / 2 },
|
|
23
|
+
mBR: { x: cx + hw / 2, y: cy + hh / 2 },
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
const edgeOf = (geom, id) => geom.edges.find(e => e.id === id)
|
|
27
|
+
const segStart = (geom, id) => { const g = edgeOf(geom, id); const s = g && g.segs[0]; return s && s[0] }
|
|
28
|
+
const segEnd = (geom, id) => { const g = edgeOf(geom, id); const s = g && g.segs[g.segs.length - 1]; return s && s[s.length - 1] }
|
|
29
|
+
const fmt = (p) => p ? `(${p.x.toFixed(1)},${p.y.toFixed(1)})` : '(無)'
|
|
30
|
+
|
|
31
|
+
// 通用斷言組合器
|
|
32
|
+
const outAtVB = (geom, h, id) => { const D = h.node('D'), A = anchors(D), s = segStart(geom, id); return { name: `${id} 出=底頂點`, pass: near(s, A.vB), detail: `${fmt(s)} vs ${fmt(A.vB)}` } }
|
|
33
|
+
const inAtVT = (geom, h, id) => { const D = h.node('D'), A = anchors(D), s = segEnd(geom, id); return { name: `${id} 進=頂點(純進側)`, pass: near(s, A.vT), detail: `${fmt(s)} vs ${fmt(A.vT)}` } }
|
|
34
|
+
const inAtMid = (geom, h, id) => { const D = h.node('D'), A = anchors(D), s = segEnd(geom, id); return { name: `${id} 進=半側斜邊中點(混合側)`, pass: near(s, A.mBL) || near(s, A.mBR), detail: `${fmt(s)} vs L${fmt(A.mBL)}/R${fmt(A.mBR)}` } }
|
|
35
|
+
const insSameMid = (geom, h, a, b) => { const sa = segEnd(geom, a), sb = segEnd(geom, b); return { name: `${a},${b} 共進同一匯點(同半側)`, pass: near(sa, sb), detail: `${fmt(sa)} vs ${fmt(sb)}` } }
|
|
36
|
+
const insDiffMid = (geom, h, a, b) => { const D = h.node('D'), A = anchors(D), sa = segEnd(geom, a), sb = segEnd(geom, b); const ok = (near(sa, A.mBL) && near(sb, A.mBR)) || (near(sa, A.mBR) && near(sb, A.mBL)); return { name: `${a},${b} 分匯左右斜邊中點(不同半側)`, pass: ok, detail: `${fmt(sa)} / ${fmt(sb)}` } }
|
|
37
|
+
|
|
38
|
+
export const DIAMOND_CASES = [
|
|
39
|
+
|
|
40
|
+
// 1) 純進側 1 進(頂側示範): 匯頂點
|
|
41
|
+
{
|
|
42
|
+
name: 'dia-1in', desc: '菱形純進側 — 1進(匯頂點)',
|
|
43
|
+
data: {
|
|
44
|
+
dir: 'TB',
|
|
45
|
+
nodes: [
|
|
46
|
+
{ id: 'S', label: '來源', cls: 'blue' },
|
|
47
|
+
{ id: 'D', label: '判斷?', cls: 'diamond' },
|
|
48
|
+
],
|
|
49
|
+
edges: [{ from: 'S', to: 'D' }], //e0 頂側進
|
|
50
|
+
},
|
|
51
|
+
check: (spec, geom, h) => [inAtVT(geom, h, 'e0')],
|
|
52
|
+
},
|
|
53
|
+
|
|
54
|
+
// 2) 底側 1 出: 出=頂點
|
|
55
|
+
{
|
|
56
|
+
name: 'dia-1out', desc: '菱形底側 — 1出(頂點)',
|
|
57
|
+
data: {
|
|
58
|
+
dir: 'TB',
|
|
59
|
+
nodes: [
|
|
60
|
+
{ id: 'S', label: '開始', cls: 'blue' },
|
|
61
|
+
{ id: 'D', label: '判斷?', cls: 'diamond' },
|
|
62
|
+
{ id: 'T', label: '結果', cls: 'green' },
|
|
63
|
+
],
|
|
64
|
+
edges: [{ from: 'S', to: 'D' }, { from: 'D', to: 'T' }], //e0,e1
|
|
65
|
+
},
|
|
66
|
+
check: (spec, geom, h) => [outAtVB(geom, h, 'e1')],
|
|
67
|
+
},
|
|
68
|
+
|
|
69
|
+
// 3) 純進側 2 進(頂側示範): 共進頂點(共用末段, 箭頭重合)
|
|
70
|
+
{
|
|
71
|
+
name: 'dia-2in', desc: '菱形純進側 — 2進(共進頂點)',
|
|
72
|
+
data: {
|
|
73
|
+
dir: 'TB',
|
|
74
|
+
nodes: [
|
|
75
|
+
{ id: 'S1', label: '來源一', cls: 'blue' },
|
|
76
|
+
{ id: 'S2', label: '來源二', cls: 'purple' },
|
|
77
|
+
{ id: 'D', label: '判斷?', cls: 'diamond' },
|
|
78
|
+
],
|
|
79
|
+
edges: [{ from: 'S1', to: 'D' }, { from: 'S2', to: 'D' }], //e0,e1 頂側進
|
|
80
|
+
},
|
|
81
|
+
check: (spec, geom, h) => [inAtVT(geom, h, 'e0'), inAtVT(geom, h, 'e1')],
|
|
82
|
+
},
|
|
83
|
+
|
|
84
|
+
// 4) 底側 2 出: 共出頂點分岔
|
|
85
|
+
{
|
|
86
|
+
name: 'dia-2out', desc: '菱形底側 — 2出(共出頂點分岔)',
|
|
87
|
+
data: {
|
|
88
|
+
dir: 'TB',
|
|
89
|
+
nodes: [
|
|
90
|
+
{ id: 'S', label: '開始', cls: 'blue' },
|
|
91
|
+
{ id: 'D', label: '判斷?', cls: 'diamond' },
|
|
92
|
+
{ id: 'T1', label: '結果一', cls: 'green' },
|
|
93
|
+
{ id: 'T2', label: '結果二', cls: 'orange' },
|
|
94
|
+
],
|
|
95
|
+
edges: [{ from: 'S', to: 'D' }, { from: 'D', to: 'T1', label: '是' }, { from: 'D', to: 'T2', label: '否' }], //e0,e1,e2
|
|
96
|
+
},
|
|
97
|
+
check: (spec, geom, h) => [outAtVB(geom, h, 'e1'), outAtVB(geom, h, 'e2')],
|
|
98
|
+
},
|
|
99
|
+
|
|
100
|
+
// 5) 底側 1進1出(混合): 出=頂點, 進=半側斜邊中點
|
|
101
|
+
{
|
|
102
|
+
name: 'dia-1in-1out', desc: '菱形底側 — 1進1出(出頂點/進斜邊中點)',
|
|
103
|
+
data: {
|
|
104
|
+
dir: 'TB',
|
|
105
|
+
nodes: [
|
|
106
|
+
{ id: 'S', label: '開始', cls: 'blue' },
|
|
107
|
+
{ id: 'D', label: '判斷?', cls: 'diamond' },
|
|
108
|
+
{ id: 'T', label: '結果', cls: 'green' },
|
|
109
|
+
{ id: 'X', label: '回饋來源', cls: 'red' },
|
|
110
|
+
],
|
|
111
|
+
edges: [
|
|
112
|
+
{ from: 'S', to: 'D' }, //e0
|
|
113
|
+
{ from: 'D', to: 'T', label: '通過' }, //e1 底側出
|
|
114
|
+
{ from: 'T', to: 'X' }, //e2
|
|
115
|
+
{ from: 'X', to: 'D', kind: 'dashed', label: '退回' }, //e3 底側進
|
|
116
|
+
],
|
|
117
|
+
},
|
|
118
|
+
check: (spec, geom, h) => [outAtVB(geom, h, 'e1'), inAtMid(geom, h, 'e3')],
|
|
119
|
+
},
|
|
120
|
+
|
|
121
|
+
// 6) 底側 2進1出(2進不同半側): 出=頂點, 兩進分匯左右斜邊中點
|
|
122
|
+
{
|
|
123
|
+
name: 'dia-2in-1out', desc: '菱形底側 — 2進1出(2進分匯左右)',
|
|
124
|
+
data: {
|
|
125
|
+
dir: 'TB',
|
|
126
|
+
nodes: [
|
|
127
|
+
{ id: 'S', label: '開始', cls: 'blue' },
|
|
128
|
+
{ id: 'D', label: '判斷?', cls: 'diamond' },
|
|
129
|
+
{ id: 'T', label: '結果', cls: 'green' },
|
|
130
|
+
{ id: 'X1', label: '來源一', cls: 'red' },
|
|
131
|
+
{ id: 'X2', label: '來源二', cls: 'red' },
|
|
132
|
+
],
|
|
133
|
+
edges: [
|
|
134
|
+
{ from: 'S', to: 'D' }, //e0
|
|
135
|
+
{ from: 'D', to: 'T' }, //e1 底側出
|
|
136
|
+
{ from: 'T', to: 'X1' }, //e2(X1,X2 兄弟展開 → 進不同半側)
|
|
137
|
+
{ from: 'T', to: 'X2' }, //e3
|
|
138
|
+
{ from: 'X1', to: 'D', kind: 'dashed' }, //e4 底側進
|
|
139
|
+
{ from: 'X2', to: 'D', kind: 'dashed' }, //e5 底側進
|
|
140
|
+
],
|
|
141
|
+
},
|
|
142
|
+
check: (spec, geom, h) => [outAtVB(geom, h, 'e1'), insDiffMid(geom, h, 'e4', 'e5')],
|
|
143
|
+
},
|
|
144
|
+
|
|
145
|
+
// 7) 底側 1進2出(2出不同半側): 共出頂點左右分岔, 進=半側斜邊中點
|
|
146
|
+
{
|
|
147
|
+
name: 'dia-1in-2out', desc: '菱形底側 — 1進2出(2出左右分岔)',
|
|
148
|
+
data: {
|
|
149
|
+
dir: 'TB',
|
|
150
|
+
nodes: [
|
|
151
|
+
{ id: 'S', label: '開始', cls: 'blue' },
|
|
152
|
+
{ id: 'D', label: '判斷?', cls: 'diamond' },
|
|
153
|
+
{ id: 'T1', label: '結果一', cls: 'green' },
|
|
154
|
+
{ id: 'T2', label: '結果二', cls: 'orange' },
|
|
155
|
+
{ id: 'X', label: '回饋來源', cls: 'red' },
|
|
156
|
+
],
|
|
157
|
+
edges: [
|
|
158
|
+
{ from: 'S', to: 'D' }, //e0
|
|
159
|
+
{ from: 'D', to: 'T1', label: '是' }, //e1 底側出
|
|
160
|
+
{ from: 'D', to: 'T2', label: '否' }, //e2 底側出
|
|
161
|
+
{ from: 'T1', to: 'X' }, //e3
|
|
162
|
+
{ from: 'X', to: 'D', kind: 'dashed' }, //e4 底側進
|
|
163
|
+
],
|
|
164
|
+
},
|
|
165
|
+
check: (spec, geom, h) => [outAtVB(geom, h, 'e1'), outAtVB(geom, h, 'e2'), inAtMid(geom, h, 'e4')],
|
|
166
|
+
},
|
|
167
|
+
|
|
168
|
+
// 8) 底側 2進2出(單欄壅塞 → 自然形成進同半側+出同半側之實例)
|
|
169
|
+
{
|
|
170
|
+
name: 'dia-2in-2out-ss', desc: '菱形底側 — 2進2出(進同/出同)',
|
|
171
|
+
data: {
|
|
172
|
+
dir: 'TB',
|
|
173
|
+
nodes: [
|
|
174
|
+
{ id: 'S', label: '開始', cls: 'blue' },
|
|
175
|
+
{ id: 'D', label: '判斷?', cls: 'diamond' },
|
|
176
|
+
{ id: 'T1', label: '結果一', cls: 'green' },
|
|
177
|
+
{ id: 'T2', label: '結果二', cls: 'orange' },
|
|
178
|
+
{ id: 'X1', label: '來源一', cls: 'red' },
|
|
179
|
+
{ id: 'X2', label: '來源二', cls: 'red' },
|
|
180
|
+
],
|
|
181
|
+
edges: [
|
|
182
|
+
{ from: 'S', to: 'D' }, //e0
|
|
183
|
+
{ from: 'D', to: 'T1' }, //e1 底側出
|
|
184
|
+
{ from: 'D', to: 'T2' }, //e2 底側出(T 疊欄)
|
|
185
|
+
{ from: 'T1', to: 'T2' }, //e3
|
|
186
|
+
{ from: 'T2', to: 'X1' }, //e4
|
|
187
|
+
{ from: 'X1', to: 'X2' }, //e5(X 疊欄)
|
|
188
|
+
{ from: 'X1', to: 'D', kind: 'dashed' }, //e6 底側進
|
|
189
|
+
{ from: 'X2', to: 'D', kind: 'dashed' }, //e7 底側進
|
|
190
|
+
],
|
|
191
|
+
},
|
|
192
|
+
check: (spec, geom, h) => [outAtVB(geom, h, 'e1'), outAtVB(geom, h, 'e2'), insSameMid(geom, h, 'e6', 'e7'), inAtMid(geom, h, 'e6')],
|
|
193
|
+
},
|
|
194
|
+
|
|
195
|
+
// 9) 底側 2進2出(進不同半側, 出不同半側)
|
|
196
|
+
{
|
|
197
|
+
name: 'dia-2in-2out-dd', desc: '菱形底側 — 2進2出(進不同/出不同)',
|
|
198
|
+
data: {
|
|
199
|
+
dir: 'TB',
|
|
200
|
+
nodes: [
|
|
201
|
+
{ id: 'S', label: '開始', cls: 'blue' },
|
|
202
|
+
{ id: 'D', label: '判斷?', cls: 'diamond' },
|
|
203
|
+
{ id: 'T1', label: '結果一', cls: 'green' },
|
|
204
|
+
{ id: 'T2', label: '結果二', cls: 'orange' },
|
|
205
|
+
{ id: 'X1', label: '來源一', cls: 'red' },
|
|
206
|
+
{ id: 'X2', label: '來源二', cls: 'red' },
|
|
207
|
+
],
|
|
208
|
+
edges: [
|
|
209
|
+
{ from: 'S', to: 'D' }, //e0
|
|
210
|
+
{ from: 'D', to: 'T1', label: '是' }, //e1 底側出
|
|
211
|
+
{ from: 'D', to: 'T2', label: '否' }, //e2 底側出
|
|
212
|
+
{ from: 'T1', to: 'X1' }, //e3
|
|
213
|
+
{ from: 'T2', to: 'X2' }, //e4
|
|
214
|
+
{ from: 'X1', to: 'D', kind: 'dashed' }, //e5 底側進
|
|
215
|
+
{ from: 'X2', to: 'D', kind: 'dashed' }, //e6 底側進
|
|
216
|
+
],
|
|
217
|
+
},
|
|
218
|
+
check: (spec, geom, h) => [outAtVB(geom, h, 'e1'), outAtVB(geom, h, 'e2'), insDiffMid(geom, h, 'e5', 'e6')],
|
|
219
|
+
},
|
|
220
|
+
|
|
221
|
+
]
|
package/test/cases.mjs
CHANGED
|
@@ -104,7 +104,23 @@ export const CASES = [
|
|
|
104
104
|
},
|
|
105
105
|
check(spec, geom, h) {
|
|
106
106
|
const D = h.node('D')
|
|
107
|
-
|
|
107
|
+
const out = [{ name: 'D 為菱形', pass: !!D && D.kind === 'diamond', detail: D && `kind=${D.kind}` }]
|
|
108
|
+
// 菱形多條外連邊皆由底部「頂點」連出(不與斜邊空接; e1=D→Y, e2=D→N)
|
|
109
|
+
if (D) {
|
|
110
|
+
const vx = D.x + D.w / 2, vy = D.y + D.h
|
|
111
|
+
for (const eid of ['e1', 'e2']) {
|
|
112
|
+
const ge = geom.edges.find(e => e.id === eid)
|
|
113
|
+
const s0 = ge && ge.segs[0] && ge.segs[0][0]
|
|
114
|
+
out.push({ name: `${eid} 由菱形底角連出`, pass: !!s0 && Math.abs(s0.x - vx) <= 2 && Math.abs(s0.y - vy) <= 2, detail: s0 && `s0=(${s0.x.toFixed(1)},${s0.y.toFixed(1)}) 頂點=(${vx.toFixed(1)},${vy.toFixed(1)})` })
|
|
115
|
+
}
|
|
116
|
+
// 連入邊終點貼菱形「斜邊」(菱形方程 |dx|/hw+|dy|/hh ≈ 1; e0=P→D)
|
|
117
|
+
const ge0 = geom.edges.find(e => e.id === 'e0')
|
|
118
|
+
const seg0 = ge0 && ge0.segs[0]
|
|
119
|
+
const pE = seg0 && seg0[seg0.length - 1]
|
|
120
|
+
const eq = pE && (Math.abs(pE.x - (D.x + D.w / 2)) / (D.w / 2) + Math.abs(pE.y - (D.y + D.h / 2)) / (D.h / 2))
|
|
121
|
+
out.push({ name: 'e0 連入端點貼斜邊', pass: !!pE && eq > 0.9 && eq < 1.1, detail: pE && `eq=${eq.toFixed(3)}` })
|
|
122
|
+
}
|
|
123
|
+
return out
|
|
108
124
|
},
|
|
109
125
|
},
|
|
110
126
|
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
{
|
|
2
|
+
"dir": "TB",
|
|
3
|
+
"nodes": [
|
|
4
|
+
{ "id": "FRONT", "label": "前台受理", "cls": "blueG" },
|
|
5
|
+
{ "id": "f1", "label": "客戶提出報修申請", "cls": "blue", "group": "FRONT" },
|
|
6
|
+
{ "id": "f2", "label": "客服人員登錄工單", "cls": "blue", "group": "FRONT" },
|
|
7
|
+
{ "id": "f6", "label": "確認聯絡方式與地址", "cls": "blue", "group": "FRONT" },
|
|
8
|
+
{ "id": "d1", "label": "案件類型判斷", "cls": "diamond", "group": "FRONT" },
|
|
9
|
+
{ "id": "f3", "label": "標記為一般排程", "cls": "green", "group": "FRONT" },
|
|
10
|
+
{ "id": "f4", "label": "標記為優先處理", "cls": "orange", "group": "FRONT" },
|
|
11
|
+
{ "id": "f4c", "label": "轉交專案小組評估", "cls": "orange", "group": "FRONT" },
|
|
12
|
+
{ "id": "BACK", "label": "後台處理", "cls": "purpleG" },
|
|
13
|
+
{ "id": "b1", "label": "派工人員指派", "cls": "purple", "group": "BACK" },
|
|
14
|
+
{ "id": "b2", "label": "技術人員到場檢修", "cls": "purple", "group": "BACK" },
|
|
15
|
+
{ "id": "d2", "label": "是否修復成功", "cls": "diamond", "group": "BACK" },
|
|
16
|
+
{ "id": "b3", "label": "更換零件", "cls": "red", "group": "BACK" },
|
|
17
|
+
{ "id": "b4", "label": "填寫維修報告", "cls": "green", "group": "BACK" },
|
|
18
|
+
{ "id": "b6", "label": "拍照存證並歸檔", "cls": "green", "group": "BACK" },
|
|
19
|
+
{ "id": "b5", "label": "回報前台結案", "cls": "green", "group": "BACK" },
|
|
20
|
+
{ "id": "f5", "label": "通知客戶結案", "cls": "blue" },
|
|
21
|
+
{ "id": "end", "label": "工單結案", "cls": "done" }
|
|
22
|
+
],
|
|
23
|
+
"edges": [
|
|
24
|
+
{ "from": "f1", "to": "f2" },
|
|
25
|
+
{ "from": "f2", "to": "f6" },
|
|
26
|
+
{ "from": "f6", "to": "d1" },
|
|
27
|
+
{ "from": "d1", "to": "f3", "label": "一般" },
|
|
28
|
+
{ "from": "d1", "to": "f4", "label": "緊急" },
|
|
29
|
+
{ "from": "d1", "to": "f4c", "label": "特殊申訴" },
|
|
30
|
+
{ "from": "f3", "to": "b1", "label": "派工" },
|
|
31
|
+
{ "from": "f4", "to": "b1", "label": "派工" },
|
|
32
|
+
{ "from": "f4c", "to": "b1", "label": "派工" },
|
|
33
|
+
{ "from": "b1", "to": "b2" },
|
|
34
|
+
{ "from": "b2", "to": "d2" },
|
|
35
|
+
{ "from": "d2", "to": "b4", "label": "是" },
|
|
36
|
+
{ "from": "d2", "to": "b3", "label": "否" },
|
|
37
|
+
{ "from": "b3", "to": "b2", "kind": "dashed", "label": "退回重測" },
|
|
38
|
+
{ "from": "b4", "to": "b6" },
|
|
39
|
+
{ "from": "b6", "to": "b5" },
|
|
40
|
+
{ "from": "b5", "to": "f5", "label": "結案回報" },
|
|
41
|
+
{ "from": "f5", "to": "end" }
|
|
42
|
+
]
|
|
43
|
+
}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
{
|
|
2
|
+
"dir": "TB",
|
|
3
|
+
"nodes": [
|
|
4
|
+
{
|
|
5
|
+
"id": "CLU",
|
|
6
|
+
"label": "服務叢集",
|
|
7
|
+
"cls": "blueG"
|
|
8
|
+
},
|
|
9
|
+
{
|
|
10
|
+
"id": "NS1",
|
|
11
|
+
"label": "訂單命名空間",
|
|
12
|
+
"cls": "greenG",
|
|
13
|
+
"group": "CLU"
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
"id": "NS2",
|
|
17
|
+
"label": "帳務命名空間",
|
|
18
|
+
"cls": "greenG",
|
|
19
|
+
"group": "CLU"
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"id": "SG1",
|
|
23
|
+
"label": "訂單服務群",
|
|
24
|
+
"cls": "orangeG",
|
|
25
|
+
"group": "NS1"
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"id": "SG2",
|
|
29
|
+
"label": "庫存服務群",
|
|
30
|
+
"cls": "orangeG",
|
|
31
|
+
"group": "NS1"
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"id": "SG3",
|
|
35
|
+
"label": "帳務服務群",
|
|
36
|
+
"cls": "orangeG",
|
|
37
|
+
"group": "NS2"
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
"id": "o1",
|
|
41
|
+
"label": "訂單 API",
|
|
42
|
+
"cls": "orange",
|
|
43
|
+
"group": "SG1"
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
"id": "o2",
|
|
47
|
+
"title": "訂單背景任務",
|
|
48
|
+
"items": [
|
|
49
|
+
"排程掃描",
|
|
50
|
+
"失敗重試"
|
|
51
|
+
],
|
|
52
|
+
"cls": "orange",
|
|
53
|
+
"group": "SG1"
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
"id": "i1",
|
|
57
|
+
"label": "庫存 API",
|
|
58
|
+
"cls": "orange",
|
|
59
|
+
"group": "SG2"
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
"id": "i2",
|
|
63
|
+
"label": "庫存快取",
|
|
64
|
+
"cls": "orange",
|
|
65
|
+
"group": "SG2"
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
"id": "p1",
|
|
69
|
+
"title": "付款服務",
|
|
70
|
+
"items": [
|
|
71
|
+
"扣款",
|
|
72
|
+
"對帳"
|
|
73
|
+
],
|
|
74
|
+
"cls": "orange",
|
|
75
|
+
"group": "SG3"
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
"id": "p2",
|
|
79
|
+
"label": "帳務 API",
|
|
80
|
+
"cls": "orange",
|
|
81
|
+
"group": "SG3"
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
"id": "GW",
|
|
85
|
+
"label": "API 閘道",
|
|
86
|
+
"cls": "purple"
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
"id": "MQ",
|
|
90
|
+
"label": "訊息佇列",
|
|
91
|
+
"cls": "purple"
|
|
92
|
+
}
|
|
93
|
+
],
|
|
94
|
+
"edges": [
|
|
95
|
+
{
|
|
96
|
+
"from": "GW",
|
|
97
|
+
"to": "NS1",
|
|
98
|
+
"label": "路由請求"
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
"from": "GW",
|
|
102
|
+
"to": "NS2",
|
|
103
|
+
"label": "路由請求"
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
"from": "SG1",
|
|
107
|
+
"to": "SG2",
|
|
108
|
+
"label": "查詢庫存"
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
"from": "SG1",
|
|
112
|
+
"to": "MQ",
|
|
113
|
+
"label": "發布訂單事件",
|
|
114
|
+
"kind": "dashed"
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
"from": "SG3",
|
|
118
|
+
"to": "MQ",
|
|
119
|
+
"label": "訂閱付款事件",
|
|
120
|
+
"kind": "dashed"
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
"from": "o1",
|
|
124
|
+
"to": "i1",
|
|
125
|
+
"label": "扣減庫存"
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
"from": "p1",
|
|
129
|
+
"to": "p2"
|
|
130
|
+
}
|
|
131
|
+
]
|
|
132
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
{
|
|
2
|
+
"dir": "TB",
|
|
3
|
+
"nodes": [
|
|
4
|
+
{ "id": "GRP", "label": "會員註冊流程", "cls": "blueG" },
|
|
5
|
+
{ "id": "n1", "label": "使用者進入註冊頁", "cls": "blue", "group": "GRP" },
|
|
6
|
+
{ "id": "n2", "label": "填寫帳號密碼與信箱", "cls": "blue", "group": "GRP" },
|
|
7
|
+
{ "id": "d1", "label": "格式驗證是否通過", "cls": "diamond", "group": "GRP" },
|
|
8
|
+
{ "id": "n3", "label": "顯示錯誤提示", "cls": "red", "group": "GRP" },
|
|
9
|
+
{ "id": "n4", "label": "檢查帳號是否已存在", "cls": "green", "group": "GRP" },
|
|
10
|
+
{ "id": "d2", "label": "帳號是否重複", "cls": "diamond", "group": "GRP" },
|
|
11
|
+
{ "id": "n5", "label": "建立會員資料並寄送驗證信", "cls": "green", "group": "GRP" },
|
|
12
|
+
{ "id": "n6", "label": "使用者點擊驗證連結啟用帳號", "cls": "orange", "group": "GRP" },
|
|
13
|
+
{ "id": "end", "label": "註冊完成", "cls": "done", "group": "GRP" }
|
|
14
|
+
],
|
|
15
|
+
"edges": [
|
|
16
|
+
{ "from": "n1", "to": "n2" },
|
|
17
|
+
{ "from": "n2", "to": "d1" },
|
|
18
|
+
{ "from": "d1", "to": "n4", "label": "是" },
|
|
19
|
+
{ "from": "d1", "to": "n3", "label": "否" },
|
|
20
|
+
{ "from": "n3", "to": "n2", "kind": "dashed" },
|
|
21
|
+
{ "from": "n4", "to": "d2" },
|
|
22
|
+
{ "from": "d2", "to": "n5", "label": "否" },
|
|
23
|
+
{ "from": "d2", "to": "n3", "label": "是" },
|
|
24
|
+
{ "from": "n5", "to": "n6" },
|
|
25
|
+
{ "from": "n6", "to": "end" }
|
|
26
|
+
]
|
|
27
|
+
}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
{
|
|
2
|
+
"dir": "TB",
|
|
3
|
+
"nodes": [
|
|
4
|
+
{
|
|
5
|
+
"id": "G1",
|
|
6
|
+
"label": "使用者模組",
|
|
7
|
+
"cls": "blueG"
|
|
8
|
+
},
|
|
9
|
+
{
|
|
10
|
+
"id": "G2",
|
|
11
|
+
"label": "訂單模組",
|
|
12
|
+
"cls": "greenG"
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
"id": "G3",
|
|
16
|
+
"label": "共用模組",
|
|
17
|
+
"cls": "orangeG"
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"id": "g1a",
|
|
21
|
+
"title": "帳號管理",
|
|
22
|
+
"items": [
|
|
23
|
+
"註冊",
|
|
24
|
+
"登入",
|
|
25
|
+
"密碼重設",
|
|
26
|
+
"權限設定"
|
|
27
|
+
],
|
|
28
|
+
"cls": "blue",
|
|
29
|
+
"group": "G1"
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
"id": "g1b",
|
|
33
|
+
"title": "個人資料",
|
|
34
|
+
"items": [
|
|
35
|
+
"基本資料",
|
|
36
|
+
"收件地址",
|
|
37
|
+
"偏好設定"
|
|
38
|
+
],
|
|
39
|
+
"cls": "blue",
|
|
40
|
+
"group": "G1"
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
"id": "g2a",
|
|
44
|
+
"title": "訂單處理",
|
|
45
|
+
"items": [
|
|
46
|
+
"建立訂單",
|
|
47
|
+
"訂單查詢",
|
|
48
|
+
"訂單取消",
|
|
49
|
+
"訂單狀態"
|
|
50
|
+
],
|
|
51
|
+
"cls": "green",
|
|
52
|
+
"group": "G2"
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
"id": "g2b",
|
|
56
|
+
"title": "金流處理",
|
|
57
|
+
"items": [
|
|
58
|
+
"付款",
|
|
59
|
+
"退款",
|
|
60
|
+
"發票開立"
|
|
61
|
+
],
|
|
62
|
+
"cls": "green",
|
|
63
|
+
"group": "G2"
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
"id": "g3a",
|
|
67
|
+
"title": "訊息通知",
|
|
68
|
+
"items": [
|
|
69
|
+
"站內信",
|
|
70
|
+
"電子郵件",
|
|
71
|
+
"簡訊"
|
|
72
|
+
],
|
|
73
|
+
"cls": "orange",
|
|
74
|
+
"group": "G3"
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
"id": "g3b",
|
|
78
|
+
"title": "紀錄稽核",
|
|
79
|
+
"items": [
|
|
80
|
+
"操作紀錄",
|
|
81
|
+
"錯誤紀錄"
|
|
82
|
+
],
|
|
83
|
+
"cls": "orange",
|
|
84
|
+
"group": "G3"
|
|
85
|
+
}
|
|
86
|
+
],
|
|
87
|
+
"edges": [
|
|
88
|
+
{
|
|
89
|
+
"from": "G1",
|
|
90
|
+
"to": "G3",
|
|
91
|
+
"label": "呼叫共用"
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
"from": "G2",
|
|
95
|
+
"to": "G3",
|
|
96
|
+
"label": "觸發通知"
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
"from": "g2a",
|
|
100
|
+
"to": "g3a",
|
|
101
|
+
"label": "訂單通知",
|
|
102
|
+
"kind": "dashed"
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
"from": "g1a",
|
|
106
|
+
"to": "g3b",
|
|
107
|
+
"label": "登入紀錄",
|
|
108
|
+
"kind": "dashed"
|
|
109
|
+
}
|
|
110
|
+
]
|
|
111
|
+
}
|