完成基本架构的实现
This commit is contained in:
parent
0ace90c63c
commit
b4900b23e4
425
package-lock.json
generated
425
package-lock.json
generated
@ -9,7 +9,9 @@
|
||||
"version": "0.1.0",
|
||||
"dependencies": {
|
||||
"core-js": "^3.8.3",
|
||||
"d3": "^7.9.0",
|
||||
"element-plus": "^2.9.1",
|
||||
"elkjs": "^0.9.3",
|
||||
"mitt": "^3.0.1",
|
||||
"vue": "^3.2.13",
|
||||
"vue-i18n": "10.0.5"
|
||||
@ -4662,6 +4664,395 @@
|
||||
"resolved": "https://registry.npmmirror.com/csstype/-/csstype-3.1.3.tgz",
|
||||
"integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw=="
|
||||
},
|
||||
"node_modules/d3": {
|
||||
"version": "7.9.0",
|
||||
"resolved": "https://registry.npmjs.org/d3/-/d3-7.9.0.tgz",
|
||||
"integrity": "sha512-e1U46jVP+w7Iut8Jt8ri1YsPOvFpg46k+K8TpCb0P+zjCkjkPnV7WzfDJzMHy1LnA+wj5pLT1wjO901gLXeEhA==",
|
||||
"dependencies": {
|
||||
"d3-array": "3",
|
||||
"d3-axis": "3",
|
||||
"d3-brush": "3",
|
||||
"d3-chord": "3",
|
||||
"d3-color": "3",
|
||||
"d3-contour": "4",
|
||||
"d3-delaunay": "6",
|
||||
"d3-dispatch": "3",
|
||||
"d3-drag": "3",
|
||||
"d3-dsv": "3",
|
||||
"d3-ease": "3",
|
||||
"d3-fetch": "3",
|
||||
"d3-force": "3",
|
||||
"d3-format": "3",
|
||||
"d3-geo": "3",
|
||||
"d3-hierarchy": "3",
|
||||
"d3-interpolate": "3",
|
||||
"d3-path": "3",
|
||||
"d3-polygon": "3",
|
||||
"d3-quadtree": "3",
|
||||
"d3-random": "3",
|
||||
"d3-scale": "4",
|
||||
"d3-scale-chromatic": "3",
|
||||
"d3-selection": "3",
|
||||
"d3-shape": "3",
|
||||
"d3-time": "3",
|
||||
"d3-time-format": "4",
|
||||
"d3-timer": "3",
|
||||
"d3-transition": "3",
|
||||
"d3-zoom": "3"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/d3-array": {
|
||||
"version": "3.2.4",
|
||||
"resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz",
|
||||
"integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==",
|
||||
"dependencies": {
|
||||
"internmap": "1 - 2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/d3-axis": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-3.0.0.tgz",
|
||||
"integrity": "sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==",
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/d3-brush": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-3.0.0.tgz",
|
||||
"integrity": "sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==",
|
||||
"dependencies": {
|
||||
"d3-dispatch": "1 - 3",
|
||||
"d3-drag": "2 - 3",
|
||||
"d3-interpolate": "1 - 3",
|
||||
"d3-selection": "3",
|
||||
"d3-transition": "3"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/d3-chord": {
|
||||
"version": "3.0.1",
|
||||
"resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-3.0.1.tgz",
|
||||
"integrity": "sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==",
|
||||
"dependencies": {
|
||||
"d3-path": "1 - 3"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/d3-color": {
|
||||
"version": "3.1.0",
|
||||
"resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz",
|
||||
"integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==",
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/d3-contour": {
|
||||
"version": "4.0.2",
|
||||
"resolved": "https://registry.npmjs.org/d3-contour/-/d3-contour-4.0.2.tgz",
|
||||
"integrity": "sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==",
|
||||
"dependencies": {
|
||||
"d3-array": "^3.2.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/d3-delaunay": {
|
||||
"version": "6.0.4",
|
||||
"resolved": "https://registry.npmjs.org/d3-delaunay/-/d3-delaunay-6.0.4.tgz",
|
||||
"integrity": "sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==",
|
||||
"dependencies": {
|
||||
"delaunator": "5"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/d3-dispatch": {
|
||||
"version": "3.0.1",
|
||||
"resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz",
|
||||
"integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==",
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/d3-drag": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz",
|
||||
"integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==",
|
||||
"dependencies": {
|
||||
"d3-dispatch": "1 - 3",
|
||||
"d3-selection": "3"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/d3-dsv": {
|
||||
"version": "3.0.1",
|
||||
"resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-3.0.1.tgz",
|
||||
"integrity": "sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==",
|
||||
"dependencies": {
|
||||
"commander": "7",
|
||||
"iconv-lite": "0.6",
|
||||
"rw": "1"
|
||||
},
|
||||
"bin": {
|
||||
"csv2json": "bin/dsv2json.js",
|
||||
"csv2tsv": "bin/dsv2dsv.js",
|
||||
"dsv2dsv": "bin/dsv2dsv.js",
|
||||
"dsv2json": "bin/dsv2json.js",
|
||||
"json2csv": "bin/json2dsv.js",
|
||||
"json2dsv": "bin/json2dsv.js",
|
||||
"json2tsv": "bin/json2dsv.js",
|
||||
"tsv2csv": "bin/dsv2dsv.js",
|
||||
"tsv2json": "bin/dsv2json.js"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/d3-dsv/node_modules/commander": {
|
||||
"version": "7.2.0",
|
||||
"resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz",
|
||||
"integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==",
|
||||
"engines": {
|
||||
"node": ">= 10"
|
||||
}
|
||||
},
|
||||
"node_modules/d3-dsv/node_modules/iconv-lite": {
|
||||
"version": "0.6.3",
|
||||
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
|
||||
"integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
|
||||
"dependencies": {
|
||||
"safer-buffer": ">= 2.1.2 < 3.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=0.10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/d3-ease": {
|
||||
"version": "3.0.1",
|
||||
"resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz",
|
||||
"integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==",
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/d3-fetch": {
|
||||
"version": "3.0.1",
|
||||
"resolved": "https://registry.npmjs.org/d3-fetch/-/d3-fetch-3.0.1.tgz",
|
||||
"integrity": "sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==",
|
||||
"dependencies": {
|
||||
"d3-dsv": "1 - 3"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/d3-force": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/d3-force/-/d3-force-3.0.0.tgz",
|
||||
"integrity": "sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==",
|
||||
"dependencies": {
|
||||
"d3-dispatch": "1 - 3",
|
||||
"d3-quadtree": "1 - 3",
|
||||
"d3-timer": "1 - 3"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/d3-format": {
|
||||
"version": "3.1.0",
|
||||
"resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz",
|
||||
"integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==",
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/d3-geo": {
|
||||
"version": "3.1.1",
|
||||
"resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-3.1.1.tgz",
|
||||
"integrity": "sha512-637ln3gXKXOwhalDzinUgY83KzNWZRKbYubaG+fGVuc/dxO64RRljtCTnf5ecMyE1RIdtqpkVcq0IbtU2S8j2Q==",
|
||||
"dependencies": {
|
||||
"d3-array": "2.5.0 - 3"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/d3-hierarchy": {
|
||||
"version": "3.1.2",
|
||||
"resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz",
|
||||
"integrity": "sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==",
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/d3-interpolate": {
|
||||
"version": "3.0.1",
|
||||
"resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz",
|
||||
"integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==",
|
||||
"dependencies": {
|
||||
"d3-color": "1 - 3"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/d3-path": {
|
||||
"version": "3.1.0",
|
||||
"resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz",
|
||||
"integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==",
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/d3-polygon": {
|
||||
"version": "3.0.1",
|
||||
"resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-3.0.1.tgz",
|
||||
"integrity": "sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==",
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/d3-quadtree": {
|
||||
"version": "3.0.1",
|
||||
"resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-3.0.1.tgz",
|
||||
"integrity": "sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==",
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/d3-random": {
|
||||
"version": "3.0.1",
|
||||
"resolved": "https://registry.npmjs.org/d3-random/-/d3-random-3.0.1.tgz",
|
||||
"integrity": "sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==",
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/d3-scale": {
|
||||
"version": "4.0.2",
|
||||
"resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz",
|
||||
"integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==",
|
||||
"dependencies": {
|
||||
"d3-array": "2.10.0 - 3",
|
||||
"d3-format": "1 - 3",
|
||||
"d3-interpolate": "1.2.0 - 3",
|
||||
"d3-time": "2.1.1 - 3",
|
||||
"d3-time-format": "2 - 4"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/d3-scale-chromatic": {
|
||||
"version": "3.1.0",
|
||||
"resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-3.1.0.tgz",
|
||||
"integrity": "sha512-A3s5PWiZ9YCXFye1o246KoscMWqf8BsD9eRiJ3He7C9OBaxKhAd5TFCdEx/7VbKtxxTsu//1mMJFrEt572cEyQ==",
|
||||
"dependencies": {
|
||||
"d3-color": "1 - 3",
|
||||
"d3-interpolate": "1 - 3"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/d3-selection": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz",
|
||||
"integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==",
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/d3-shape": {
|
||||
"version": "3.2.0",
|
||||
"resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz",
|
||||
"integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==",
|
||||
"dependencies": {
|
||||
"d3-path": "^3.1.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/d3-time": {
|
||||
"version": "3.1.0",
|
||||
"resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz",
|
||||
"integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==",
|
||||
"dependencies": {
|
||||
"d3-array": "2 - 3"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/d3-time-format": {
|
||||
"version": "4.1.0",
|
||||
"resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz",
|
||||
"integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==",
|
||||
"dependencies": {
|
||||
"d3-time": "1 - 3"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/d3-timer": {
|
||||
"version": "3.0.1",
|
||||
"resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz",
|
||||
"integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==",
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/d3-transition": {
|
||||
"version": "3.0.1",
|
||||
"resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz",
|
||||
"integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==",
|
||||
"dependencies": {
|
||||
"d3-color": "1 - 3",
|
||||
"d3-dispatch": "1 - 3",
|
||||
"d3-ease": "1 - 3",
|
||||
"d3-interpolate": "1 - 3",
|
||||
"d3-timer": "1 - 3"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"d3-selection": "2 - 3"
|
||||
}
|
||||
},
|
||||
"node_modules/d3-zoom": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-3.0.0.tgz",
|
||||
"integrity": "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==",
|
||||
"dependencies": {
|
||||
"d3-dispatch": "1 - 3",
|
||||
"d3-drag": "2 - 3",
|
||||
"d3-interpolate": "1 - 3",
|
||||
"d3-selection": "2 - 3",
|
||||
"d3-transition": "2 - 3"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/dayjs": {
|
||||
"version": "1.11.13",
|
||||
"resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.13.tgz",
|
||||
@ -4890,6 +5281,14 @@
|
||||
"url": "https://github.com/sponsors/ljharb"
|
||||
}
|
||||
},
|
||||
"node_modules/delaunator": {
|
||||
"version": "5.0.1",
|
||||
"resolved": "https://registry.npmjs.org/delaunator/-/delaunator-5.0.1.tgz",
|
||||
"integrity": "sha512-8nvh+XBe96aCESrGOqMp/84b13H9cdKbG5P2ejQCh4d4sK9RL4371qou9drQjMhvnPmhWl5hnmqbEE0fXr9Xnw==",
|
||||
"dependencies": {
|
||||
"robust-predicates": "^3.0.2"
|
||||
}
|
||||
},
|
||||
"node_modules/depd": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmmirror.com/depd/-/depd-2.0.0.tgz",
|
||||
@ -5115,6 +5514,11 @@
|
||||
"vue": "^3.2.0"
|
||||
}
|
||||
},
|
||||
"node_modules/elkjs": {
|
||||
"version": "0.9.3",
|
||||
"resolved": "https://registry.npmjs.org/elkjs/-/elkjs-0.9.3.tgz",
|
||||
"integrity": "sha512-f/ZeWvW/BCXbhGEf1Ujp29EASo/lk1FDnETgNKwJrsVvGZhUWCZyg3xLJjAsxfOmt8KjswHmI5EwCQcPMpOYhQ=="
|
||||
},
|
||||
"node_modules/emoji-regex": {
|
||||
"version": "8.0.0",
|
||||
"resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-8.0.0.tgz",
|
||||
@ -6774,6 +7178,14 @@
|
||||
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/internmap": {
|
||||
"version": "2.0.3",
|
||||
"resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz",
|
||||
"integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==",
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/ipaddr.js": {
|
||||
"version": "2.2.0",
|
||||
"resolved": "https://registry.npmmirror.com/ipaddr.js/-/ipaddr.js-2.2.0.tgz",
|
||||
@ -9497,6 +9909,11 @@
|
||||
"url": "https://github.com/sponsors/isaacs"
|
||||
}
|
||||
},
|
||||
"node_modules/robust-predicates": {
|
||||
"version": "3.0.2",
|
||||
"resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.2.tgz",
|
||||
"integrity": "sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg=="
|
||||
},
|
||||
"node_modules/run-parallel": {
|
||||
"version": "1.2.0",
|
||||
"resolved": "https://registry.npmmirror.com/run-parallel/-/run-parallel-1.2.0.tgz",
|
||||
@ -9520,6 +9937,11 @@
|
||||
"queue-microtask": "^1.2.2"
|
||||
}
|
||||
},
|
||||
"node_modules/rw": {
|
||||
"version": "1.3.3",
|
||||
"resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz",
|
||||
"integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ=="
|
||||
},
|
||||
"node_modules/safe-buffer": {
|
||||
"version": "5.2.1",
|
||||
"resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.2.1.tgz",
|
||||
@ -9543,8 +9965,7 @@
|
||||
"node_modules/safer-buffer": {
|
||||
"version": "2.1.2",
|
||||
"resolved": "https://registry.npmmirror.com/safer-buffer/-/safer-buffer-2.1.2.tgz",
|
||||
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
|
||||
"dev": true
|
||||
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
|
||||
},
|
||||
"node_modules/schema-utils": {
|
||||
"version": "2.7.1",
|
||||
|
@ -9,7 +9,9 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"core-js": "^3.8.3",
|
||||
"d3": "^7.9.0",
|
||||
"element-plus": "^2.9.1",
|
||||
"elkjs": "^0.9.3",
|
||||
"mitt": "^3.0.1",
|
||||
"vue": "^3.2.13",
|
||||
"vue-i18n": "10.0.5"
|
||||
|
@ -8,9 +8,19 @@
|
||||
<link rel="icon" href="<%= BASE_URL %>icon.png">
|
||||
<title>Netlist</title>
|
||||
<link rel="stylesheet" href="default-dark.css">
|
||||
<link rel="stylesheet" href="netlist.css">
|
||||
<link rel="stylesheet" href="vscode.css">
|
||||
<link rel="stylesheet" href="iconfont.css">
|
||||
<link rel="stylesheet" href="animation.css">
|
||||
|
||||
<script>
|
||||
window.readNetFile = async () => {
|
||||
let inputVcdFile = 'test.json';
|
||||
const response = await fetch(inputVcdFile);
|
||||
const netJson = await response.json();
|
||||
return [ netJson ];
|
||||
}
|
||||
</script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
125
public/test.json
Normal file
125
public/test.json
Normal file
@ -0,0 +1,125 @@
|
||||
{
|
||||
"creator": "Yosys 0.48+5 (git sha1 7a362f1f7, clang++ 18.1.2-wasi-sdk -Oz)",
|
||||
"modules": {
|
||||
"half_adder": {
|
||||
"attributes": {
|
||||
"top": "00000000000000000000000000000001",
|
||||
"src": "/root/half_adder.v:1.1-8.10"
|
||||
},
|
||||
"ports": {
|
||||
"a": {
|
||||
"direction": "input",
|
||||
"bits": [
|
||||
2
|
||||
]
|
||||
},
|
||||
"b": {
|
||||
"direction": "input",
|
||||
"bits": [
|
||||
3
|
||||
]
|
||||
},
|
||||
"sum": {
|
||||
"direction": "output",
|
||||
"bits": [
|
||||
4
|
||||
]
|
||||
},
|
||||
"carry": {
|
||||
"direction": "output",
|
||||
"bits": [
|
||||
5
|
||||
]
|
||||
}
|
||||
},
|
||||
"cells": {
|
||||
"$auto$simplemap.cc:75:simplemap_bitop$80": {
|
||||
"hide_name": 1,
|
||||
"type": "$_AND_",
|
||||
"parameters": {},
|
||||
"attributes": {
|
||||
"src": "/root/half_adder.v:6.18-6.23"
|
||||
},
|
||||
"port_directions": {
|
||||
"A": "input",
|
||||
"B": "input",
|
||||
"Y": "output"
|
||||
},
|
||||
"connections": {
|
||||
"A": [
|
||||
2
|
||||
],
|
||||
"B": [
|
||||
3
|
||||
],
|
||||
"Y": [
|
||||
5
|
||||
]
|
||||
}
|
||||
},
|
||||
"$auto$simplemap.cc:75:simplemap_bitop$81": {
|
||||
"hide_name": 1,
|
||||
"type": "$_XOR_",
|
||||
"parameters": {},
|
||||
"attributes": {
|
||||
"src": "/root/half_adder.v:7.16-7.21"
|
||||
},
|
||||
"port_directions": {
|
||||
"A": "input",
|
||||
"B": "input",
|
||||
"Y": "output"
|
||||
},
|
||||
"connections": {
|
||||
"A": [
|
||||
2
|
||||
],
|
||||
"B": [
|
||||
3
|
||||
],
|
||||
"Y": [
|
||||
4
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"netnames": {
|
||||
"a": {
|
||||
"hide_name": 0,
|
||||
"bits": [
|
||||
2
|
||||
],
|
||||
"attributes": {
|
||||
"src": "/root/half_adder.v:2.9-2.10"
|
||||
}
|
||||
},
|
||||
"b": {
|
||||
"hide_name": 0,
|
||||
"bits": [
|
||||
3
|
||||
],
|
||||
"attributes": {
|
||||
"src": "/root/half_adder.v:3.9-3.10"
|
||||
}
|
||||
},
|
||||
"carry": {
|
||||
"hide_name": 0,
|
||||
"bits": [
|
||||
5
|
||||
],
|
||||
"attributes": {
|
||||
"src": "/root/half_adder.v:4.10-4.15"
|
||||
}
|
||||
},
|
||||
"sum": {
|
||||
"hide_name": 0,
|
||||
"bits": [
|
||||
4
|
||||
],
|
||||
"attributes": {
|
||||
"src": "/root/half_adder.v:5.10-5.13"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -9,9 +9,11 @@ exclude_files = [
|
||||
|
||||
os.system('npm run build')
|
||||
for file in os.listdir('dist'):
|
||||
if file in exclude_files:
|
||||
if file in exclude_files or file.endswith('.json'):
|
||||
os.remove('dist/' + file)
|
||||
|
||||
|
||||
|
||||
with open('./dist/index.html', 'r', encoding='utf-8') as fp:
|
||||
html = fp.read()
|
||||
|
||||
|
21
src/App.vue
21
src/App.vue
@ -1,13 +1,27 @@
|
||||
<template>
|
||||
<img alt="Vue logo" src="./assets/logo.png">
|
||||
|
||||
<!-- 右侧工具合集 -->
|
||||
<RightNav></RightNav>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { useI18n } from 'vue-i18n';
|
||||
import RightNav from '@/components/right-nav.vue';
|
||||
import { onMounted } from 'vue';
|
||||
import { setDefaultCss } from './hook/css';
|
||||
|
||||
const { t } = useI18n();
|
||||
|
||||
onMounted(async () => {
|
||||
// 设置 css 宏,纠正样式
|
||||
setDefaultCss();
|
||||
|
||||
// 初始化载入 netlist 的 json 文件
|
||||
const [ netJson ] = await window.readNetFile();
|
||||
|
||||
console.log(netJson);
|
||||
|
||||
});
|
||||
|
||||
</script>
|
||||
|
||||
<style>
|
||||
@ -15,8 +29,5 @@ const { t } = useI18n();
|
||||
font-family: Avenir, Helvetica, Arial, sans-serif;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
text-align: center;
|
||||
color: #2c3e50;
|
||||
margin-top: 60px;
|
||||
}
|
||||
</style>
|
||||
|
Binary file not shown.
Before Width: | Height: | Size: 6.7 KiB |
@ -1,7 +1,7 @@
|
||||
<template>
|
||||
<div class="about-wrapper">
|
||||
<div class="usermanual">
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
<br>
|
||||
|
@ -2,7 +2,7 @@
|
||||
<div class="vcd-right-nav">
|
||||
|
||||
<div class="vcd-function-panel">
|
||||
<TreeView :topModules="props.topModules"
|
||||
<TreeView
|
||||
v-show="controlPanel.currentIndex === 0"></TreeView>
|
||||
<Setting
|
||||
v-show="controlPanel.currentIndex === 1"></Setting>
|
||||
@ -38,12 +38,6 @@ import { emitter } from '@/hook/global';
|
||||
import { controlPanel } from './right-nav';
|
||||
|
||||
defineComponent({ name: 'right-nav' });
|
||||
const props = defineProps({
|
||||
topModules: {
|
||||
type: Array,
|
||||
required: true
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
emitter.on('right-nav', index => {
|
||||
|
@ -46,6 +46,73 @@
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { globalSetting } from '@/hook/global';
|
||||
import { reactive, defineComponent, watch, ref } from 'vue';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
|
||||
defineComponent({ name: "dide-setting" });
|
||||
const { t, locale } = useI18n();
|
||||
|
||||
|
||||
watch(
|
||||
() => locale.value,
|
||||
() => {
|
||||
globalSetting.language = locale.value;
|
||||
localStorage.setItem('setting', JSON.stringify(globalSetting));
|
||||
}
|
||||
);
|
||||
|
||||
const languageDialogShow = ref(false);
|
||||
|
||||
function confirmLanguageDialog() {
|
||||
languageDialogShow.value = false;
|
||||
}
|
||||
|
||||
function onlanguagechange() {
|
||||
languageDialogShow.value = true;
|
||||
}
|
||||
|
||||
const languageSetting = reactive({
|
||||
options: [
|
||||
{
|
||||
value: 'en',
|
||||
text: 'English'
|
||||
},
|
||||
{
|
||||
value: 'zh',
|
||||
text: '简体中文'
|
||||
},
|
||||
{
|
||||
value: 'zhTw',
|
||||
text: '繁體中文'
|
||||
},
|
||||
{
|
||||
value: 'ja',
|
||||
text: '日本語'
|
||||
},
|
||||
{
|
||||
value: 'ko',
|
||||
text: '한국어'
|
||||
},
|
||||
{
|
||||
value: 'de',
|
||||
text: 'Deutsch'
|
||||
},
|
||||
{
|
||||
value: 'fr',
|
||||
text: 'Français'
|
||||
},
|
||||
{
|
||||
value: 'ru',
|
||||
text: 'Русский'
|
||||
},
|
||||
{
|
||||
value: 'ar',
|
||||
text: 'العربية'
|
||||
}
|
||||
]
|
||||
});
|
||||
|
||||
|
||||
</script>
|
||||
|
||||
|
@ -0,0 +1,44 @@
|
||||
<template>
|
||||
<div class="netlist-tree-view">
|
||||
<div class="search-nothing">
|
||||
<span class="iconfont icon-empty"></span>
|
||||
<span>Mirror the unknown</span>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { defineComponent } from 'vue';
|
||||
|
||||
defineComponent({ name: 'tree-view' });
|
||||
|
||||
</script>
|
||||
|
||||
<style>
|
||||
.search-nothing {
|
||||
height: 40vh;
|
||||
width: 100%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
font-size: 1.1rem;
|
||||
}
|
||||
|
||||
.search-nothing .iconfont {
|
||||
font-size: 120px;
|
||||
}
|
||||
|
||||
.netlist-tree-view {
|
||||
background-color: var(--sidebar);
|
||||
padding: 10px 10px 10px 10px;
|
||||
height: 98vh;
|
||||
border-radius: 1.0em;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
transition: height .5s ease-in-out;
|
||||
user-select: none;
|
||||
min-width: 220px;
|
||||
}
|
||||
|
||||
</style>
|
92
src/hook/color.js
Normal file
92
src/hook/color.js
Normal file
@ -0,0 +1,92 @@
|
||||
/**
|
||||
* @typedef {Object} RgbColor
|
||||
* @property {number} r
|
||||
* @property {number} g
|
||||
* @property {number} b
|
||||
*/
|
||||
|
||||
/**
|
||||
* @description 解析 rgb 字符串
|
||||
* @param {string} colorString 形如 #1e90ff 或者 rgba(0, 206, 209, 1) 这样的字符串
|
||||
* @returns {RgbColor | undefined}
|
||||
*/
|
||||
export function parseColor(colorString) {
|
||||
// 检查是否是十六进制颜色
|
||||
if (colorString.startsWith('#')) {
|
||||
let hex = colorString.slice(1);
|
||||
if (hex.length === 3) {
|
||||
hex = hex.split('').map(c => c + c).join('');
|
||||
}
|
||||
const r = parseInt(hex.slice(0, 2), 16);
|
||||
const g = parseInt(hex.slice(2, 4), 16);
|
||||
const b = parseInt(hex.slice(4, 6), 16);
|
||||
return { r, g, b };
|
||||
}
|
||||
// 检查是否是 RGBA 颜色
|
||||
else if (colorString.startsWith('rgba')) {
|
||||
const matches = colorString.match(/rgba\((\d+),\s*(\d+),\s*(\d+),\s*(\d+(\.\d+)?)\)/);
|
||||
if (matches) {
|
||||
const r = parseInt(matches[1], 10);
|
||||
const g = parseInt(matches[2], 10);
|
||||
const b = parseInt(matches[3], 10);
|
||||
return { r, g, b };
|
||||
}
|
||||
}
|
||||
// 检查是否是 RGB 颜色
|
||||
else if (colorString.startsWith('rgb')) {
|
||||
const matches = colorString.match(/rgb\((\d+),\s*(\d+),\s*(\d+)\)/);
|
||||
if (matches) {
|
||||
const r = parseInt(matches[1], 10);
|
||||
const g = parseInt(matches[2], 10);
|
||||
const b = parseInt(matches[3], 10);
|
||||
return { r, g, b };
|
||||
}
|
||||
}
|
||||
|
||||
return undefined;
|
||||
}
|
||||
|
||||
/**
|
||||
* @description 提升颜色的亮度
|
||||
* @param {RgbColor} rgb
|
||||
* @param {number} percent 0 - 100 的数字,代表增强的亮度比例
|
||||
* @returns {RgbColor}
|
||||
*/
|
||||
export function increaseBrightness(rgb, percent) {
|
||||
// 确保 percent 在 0 到 100 之间
|
||||
percent = Math.max(0, Math.min(100, percent));
|
||||
|
||||
// 计算每个颜色分量的增量
|
||||
const increment = (percent / 100) * 255;
|
||||
|
||||
// 提升每个颜色分量的亮度
|
||||
const r = Math.min(255, Math.round(rgb.r + increment));
|
||||
const g = Math.min(255, Math.round(rgb.g + increment));
|
||||
const b = Math.min(255, Math.round(rgb.b + increment));
|
||||
|
||||
return { r, g, b };
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @description gamma 修正
|
||||
* @param {number} c 颜色通道值,取值范围为 0 - 255
|
||||
*/
|
||||
function gammaCorrected(c) {
|
||||
c /= 255;
|
||||
return c <= 0.03928 ? c / 12.92 : Math.pow((c + 0.055) / 1.055, 2.4);
|
||||
}
|
||||
|
||||
/**
|
||||
* @description 判断是否为亮色主题
|
||||
* @param {number} r
|
||||
* @param {number} g
|
||||
* @param {number} b
|
||||
*/
|
||||
export function isLightColorTheme(r, g, b) {
|
||||
r = gammaCorrected(r);
|
||||
g = gammaCorrected(g);
|
||||
b = gammaCorrected(b);
|
||||
const luminance = 0.2126 * r + 0.7152 * g + 0.0722 * b;
|
||||
return luminance > 0.5;
|
||||
}
|
48
src/hook/css.js
Normal file
48
src/hook/css.js
Normal file
@ -0,0 +1,48 @@
|
||||
import { isLightColorTheme, parseColor } from "./color";
|
||||
import { globalSetting } from "./global";
|
||||
|
||||
export function setDefaultCss() {
|
||||
// 改变默认颜色
|
||||
document.body.style.setProperty('--el-color-primary', 'var(--main-color)');
|
||||
document.body.style.setProperty('--el-color-primary-light-9', 'var(--main-color)');
|
||||
document.body.style.setProperty('--el-color-primary-light-3', 'var(--main-color)');
|
||||
document.body.style.setProperty('--el-text-color-secondary', 'var(--foreground)');
|
||||
document.body.style.setProperty('--el-text-color-regular', 'var(--foreground)');
|
||||
document.body.style.setProperty('--el-border-color', 'var(--vscode-focusBorder)');
|
||||
document.body.style.setProperty('--el-fill-color-blank', 'var(--sidebar)');
|
||||
document.body.style.setProperty('--el-fill-color-light', 'var(--vscode-button-hoverBackground)');
|
||||
document.body.style.setProperty('--el-switch-on-color', 'var(--main-color)');
|
||||
document.body.style.setProperty('--el-border', 'var(--sidebar)');
|
||||
document.body.style.setProperty('--el-border-color-light', 'var(--sidebar)');
|
||||
document.body.style.setProperty('--el-border-color-lighter', 'var(--sidebar)');
|
||||
document.body.style.setProperty('--el-bg-color-overlay', 'var(--sidebar)');
|
||||
document.body.style.setProperty('--el-color-info-light-9', 'var(--vscode-focusBorder)');
|
||||
document.body.style.setProperty('--el-color-info', 'var(--foreground)');
|
||||
document.body.style.setProperty('--el-color-info-light-8', 'var(--vscode-focusBorder)');
|
||||
// document.body.style.setProperty('--el-color-white', 'var(--background)');
|
||||
|
||||
// 设置全局宏
|
||||
document.body.style.setProperty('--vcd-render-padding', '30px');
|
||||
document.body.style.setProperty('--sidebar-width', '330px');
|
||||
document.body.style.setProperty('--toolbar-height', '60px');
|
||||
|
||||
// 下面是 get style
|
||||
const style = getComputedStyle(document.documentElement);
|
||||
// 根据颜色亮度来设置额外的宏
|
||||
const bgColorString = style.getPropertyValue('--background');
|
||||
|
||||
const { r, g, b } = parseColor(bgColorString);
|
||||
if (isLightColorTheme(r, g, b)) {
|
||||
setExtraLightColorCss();
|
||||
} else {
|
||||
setExtraDarkColorCss();
|
||||
}
|
||||
}
|
||||
|
||||
function setExtraLightColorCss() {
|
||||
document.body.style.setProperty('--vline-stroke-color', '#ddd');
|
||||
}
|
||||
|
||||
function setExtraDarkColorCss() {
|
||||
document.body.style.setProperty('--vline-stroke-color', '#333');
|
||||
}
|
@ -1,3 +1,30 @@
|
||||
import mitt from 'mitt';
|
||||
import { reactive } from 'vue';
|
||||
|
||||
|
||||
export const emitter = mitt();
|
||||
|
||||
export const globalSetting = reactive({
|
||||
language: 'zh'
|
||||
});
|
||||
|
||||
function loadSetting() {
|
||||
const settingString = localStorage.getItem('setting')
|
||||
try {
|
||||
const setting = JSON.parse(settingString);
|
||||
return setting;
|
||||
} catch (error) {
|
||||
return undefined;
|
||||
}
|
||||
}
|
||||
|
||||
export const storedSetting = loadSetting();
|
||||
if (storedSetting) {
|
||||
for (const key of Reflect.ownKeys(storedSetting)) {
|
||||
const value = storedSetting[key];
|
||||
if (value !== undefined) {
|
||||
globalSetting[key] = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export const emitter = mitt();
|
81
src/hook/jsdoc.js
Normal file
81
src/hook/jsdoc.js
Normal file
@ -0,0 +1,81 @@
|
||||
/**
|
||||
* @typedef YosysRawNet
|
||||
* @property {string} creator - JSON 的创建者信息,通常是 Yosys 的版本和构建详情。
|
||||
* @property {Record<string, YosysNetModule>} modules - 模块名称到模块定义的映射。
|
||||
* @property {Record<string, YosysModel>} [models] - 模型定义的映射(仅在使用 `-aig` 选项时存在)。
|
||||
*/
|
||||
|
||||
/**
|
||||
* @typedef YosysNetModule
|
||||
* @property {ModuleAttribute} attributes - 模块的属性,如是否为顶层模块及其源文件。
|
||||
* @property {Record<string, string>} [parameter_default_values] - 参数的默认值。
|
||||
* @property {Record<string, YosysPort>} ports - 端口名称到端口定义的映射。
|
||||
* @property {Record<string, YosysCell>} cells - 单元名称到单元定义的映射。
|
||||
* @property {Record<string, YosysMemory>} [memories] - 内存名称到内存定义的映射。
|
||||
* @property {Record<string, YosysNetname>} netnames - 网络名称到网络定义的映射。
|
||||
*/
|
||||
|
||||
/**
|
||||
* @typedef ModuleAttribute
|
||||
* @property {string} top - 表示该模块是否为顶层模块(1 表示是,0 表示否)。
|
||||
* @property {string} src - 模块定义的源文件和行号。
|
||||
* @property {string} [dynports] - 动态端口标志(1 表示是,0 表示否)。
|
||||
* @property {string} [hdlname] - HDL 名称。
|
||||
*/
|
||||
|
||||
/**
|
||||
* @typedef YosysPort
|
||||
* @property {string} direction - 端口的方向(例如 "input"、"output" 或 "inout")。
|
||||
* @property {number[]} bits - 与端口关联的位索引。
|
||||
* @property {number} [offset] - 使用的最低位索引(如果非 0)。
|
||||
* @property {number} [upto] - 如果端口位索引是 MSB-first,则为 1。
|
||||
* @property {number} [signed] - 如果端口是有符号的,则为 1。
|
||||
*/
|
||||
|
||||
/**
|
||||
* @typedef YosysCell
|
||||
* @property {number} hide_name - 是否隐藏单元名称(1 表示是,0 表示否)。
|
||||
* @property {string} type - 单元的类型(例如 "$_AND_" 或 "$_XOR_")。
|
||||
* @property {string} [model] - AIG 模型名称(仅在使用 `-aig` 选项时存在)。
|
||||
* @property {Record<string, any>} [parameters] - 与单元关联的参数(如果有)。
|
||||
* @property {CellAttribute} attributes - 单元的属性,如源文件和行号。
|
||||
* @property {Record<string, string>} port_directions - 端口名称到端口方向的映射(例如 "input"、"output" 或 "inout")。
|
||||
* @property {Record<string, number[]>} connections - 端口名称到连接位索引的映射。
|
||||
*/
|
||||
|
||||
/**
|
||||
* @typedef CellAttribute
|
||||
* @property {string} src - 单元定义的源文件和行号。
|
||||
*/
|
||||
|
||||
/**
|
||||
* @typedef YosysMemory
|
||||
* @property {number} hide_name - 是否隐藏内存名称(1 表示是,0 表示否)。
|
||||
* @property {Record<string, any>} attributes - 内存的属性。
|
||||
* @property {number} width - 内存的宽度。
|
||||
* @property {number} start_offset - 最低有效内存地址。
|
||||
* @property {number} size - 内存的大小。
|
||||
*/
|
||||
|
||||
/**
|
||||
* @typedef YosysNetname
|
||||
* @property {number} hide_name - 是否隐藏网络名称(1 表示是,0 表示否)。
|
||||
* @property {number[]} bits - 与网络名称关联的位索引。
|
||||
* @property {number} [offset] - 使用的最低位索引(如果非 0)。
|
||||
* @property {number} [upto] - 如果端口位索引是 MSB-first,则为 1。
|
||||
* @property {number} [signed] - 如果端口是有符号的,则为 1。
|
||||
*/
|
||||
|
||||
/**
|
||||
* @typedef YosysModel
|
||||
* @property {Array<Array<any>>} [model_name] - AIG 模型的节点列表。
|
||||
*/
|
||||
|
||||
/**
|
||||
* @typedef YosysAIGNode
|
||||
* @property {string} type - 节点类型(例如 "port"、"nport"、"and"、"nand"、"true"、"false")。
|
||||
* @property {string} [portname] - 端口名称(如果节点类型为 "port" 或 "nport")。
|
||||
* @property {number} [bitindex] - 位索引(如果节点类型为 "port" 或 "nport")。
|
||||
* @property {number} [node_index] - 节点索引(如果节点类型为 "and" 或 "nand")。
|
||||
* @property {Array<string>} [out_list] - 输出端口名称和位索引的列表。
|
||||
*/
|
7
src/hook/render/index.js
Normal file
7
src/hook/render/index.js
Normal file
@ -0,0 +1,7 @@
|
||||
import * as d3 from 'd3';
|
||||
|
||||
class NetlistRender {
|
||||
constructor() {
|
||||
|
||||
}
|
||||
}
|
@ -3,5 +3,10 @@
|
||||
"general-setting": "عام",
|
||||
"appearance-setting": "المظهر",
|
||||
"current-version": "الإصدار الحالي",
|
||||
"copyright": "حقوق النشر مملوكة لفريق مشروع <a href=\"https://github.com/Digital-EDA\" target=\"_blank\">Digital-IDE</a>، نرحب بـ <a href=\"https://github.com/Digital-EDA/Digital-IDE\">Star</a>."
|
||||
"copyright": "حقوق النشر مملوكة لفريق مشروع <a href=\"https://github.com/Digital-EDA\" target=\"_blank\">Digital-IDE</a>، نرحب بـ <a href=\"https://github.com/Digital-EDA/Digital-IDE\">Star</a>.",
|
||||
"confirm": "تأكيد",
|
||||
"cancel": "إلغاء",
|
||||
"tips": "نصائح",
|
||||
"language-setting": "اللغة",
|
||||
"setting.language.change-dialog": "لقد قمت بتغيير اللغة إلى الصينية المبسطة، نوصي بإعادة تشغيل Netlist Viewer"
|
||||
}
|
@ -3,5 +3,10 @@
|
||||
"general-setting": "Allgemein",
|
||||
"appearance-setting": "Aussehen",
|
||||
"current-version": "Aktuelle Version",
|
||||
"copyright": "Dieses Software gehört dem <a href=\"https://github.com/Digital-EDA\" target=\"_blank\">Digital-IDE</a> Projektteam, willkommen <a href=\"https://github.com/Digital-EDA/Digital-IDE\">Star</a>."
|
||||
"copyright": "Dieses Software gehört dem <a href=\"https://github.com/Digital-EDA\" target=\"_blank\">Digital-IDE</a> Projektteam, willkommen <a href=\"https://github.com/Digital-EDA/Digital-IDE\">Star</a>.",
|
||||
"confirm": "Bestätigen",
|
||||
"cancel": "Abbrechen",
|
||||
"tips": "Tipps",
|
||||
"language-setting": "Sprache",
|
||||
"setting.language.change-dialog": "Sie haben die Sprache auf Chinesisch (vereinfacht) geändert, wir empfehlen Ihnen, Netlist Viewer neu zu starten"
|
||||
}
|
@ -3,5 +3,10 @@
|
||||
"general-setting": "General",
|
||||
"appearance-setting": "Appearance",
|
||||
"current-version": "current version",
|
||||
"copyright": "The copyright of this software belongs to <a href=\\\"https://github.com/Digital-EDA\\\" target=\\\"_blank\\\">Digital-IDE</a> project team. Welcome to <a href=\\\"https://github.com/Digital-EDA/Digital-IDE\\\">Star</a>."
|
||||
"copyright": "The copyright of this software belongs to <a href=\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"https://github.com/Digital-EDA\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\" target=\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"_blank\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\">Digital-IDE</a> project team. Welcome to <a href=\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"https://github.com/Digital-EDA/Digital-IDE\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\">Star</a>.",
|
||||
"confirm": "confirm",
|
||||
"cancel": "cancel",
|
||||
"tips": "Tips",
|
||||
"language-setting": "Language",
|
||||
"setting.language.change-dialog": "You've switched language to English, we recommend you reload Netlist Viewer"
|
||||
}
|
@ -1,8 +1,12 @@
|
||||
{
|
||||
"info.common.hello-world": "bonjour le monde",
|
||||
"general-setting": "Général",
|
||||
|
||||
"appearance-setting": "Apparence",
|
||||
"current-version": "Version actuelle",
|
||||
"copyright": "Les droits d'auteur appartiennent au groupe de projet <a href=\"https://github.com/Digital-EDA\" target=\"_blank\">Digital-IDE</a>, bienvenue <a href=\"https://github.com/Digital-EDA/Digital-IDE\">Star</a>."
|
||||
"copyright": "Les droits d'auteur appartiennent au groupe de projet <a href=\"https://github.com/Digital-EDA\" target=\"_blank\">Digital-IDE</a>, bienvenue <a href=\"https://github.com/Digital-EDA/Digital-IDE\">Star</a>.",
|
||||
"confirm": "Confirmer",
|
||||
"cancel": "Annuler",
|
||||
"tips": "Conseils",
|
||||
"language-setting": "Langue",
|
||||
"setting.language.change-dialog": "Vous avez changé la langue en chinois simplifié, nous vous recommandons de redémarrer Netlist Viewer"
|
||||
}
|
@ -1,8 +1,12 @@
|
||||
{
|
||||
"info.common.hello-world": "こんにちは世界",
|
||||
"general-setting": "一般",
|
||||
|
||||
"appearance-setting": "外観",
|
||||
"current-version": "現在のバージョン",
|
||||
"copyright": "このソフトウェアの著作権は <a href=\"https://github.com/Digital-EDA\" target=\"_blank\">Digital-IDE</a> プロジェクトチームに帰属します。<a href=\"https://github.com/Digital-EDA/Digital-IDE\">Star</a> を歓迎します。"
|
||||
"copyright": "このソフトウェアの著作権は <a href=\"https://github.com/Digital-EDA\" target=\"_blank\">Digital-IDE</a> プロジェクトチームに帰属します。<a href=\"https://github.com/Digital-EDA/Digital-IDE\">Star</a> を歓迎します。",
|
||||
"confirm": "確認",
|
||||
"cancel": "キャンセル",
|
||||
"tips": "ヒント",
|
||||
"language-setting": "言語",
|
||||
"setting.language.change-dialog": "言語を簡体字中国語に変更しました。Netlist Viewerを再起動することをお勧めします。"
|
||||
}
|
@ -1,8 +1,12 @@
|
||||
{
|
||||
"info.common.hello-world": "안녕하세요 세계",
|
||||
"general-setting": "일반",
|
||||
|
||||
"appearance-setting": "외관",
|
||||
"current-version": "현재 버전",
|
||||
"copyright": "이 소프트웨어의 저작권은 <a href=\"https://github.com/Digital-EDA\" target=\"_blank\">Digital-IDE</a> 프로젝트 팀에 있으며, <a href=\"https://github.com/Digital-EDA/Digital-IDE\">Star</a>를 환영합니다."
|
||||
"copyright": "이 소프트웨어의 저작권은 <a href=\"https://github.com/Digital-EDA\" target=\"_blank\">Digital-IDE</a> 프로젝트 팀에 있으며, <a href=\"https://github.com/Digital-EDA/Digital-IDE\">Star</a>를 환영합니다.",
|
||||
"confirm": "확인",
|
||||
"cancel": "취소",
|
||||
"tips": "팁",
|
||||
"language-setting": "언어",
|
||||
"setting.language.change-dialog": "언어를 중국어 간체로 변경했습니다. Netlist Viewer를 다시 시작하는 것이 좋습니다."
|
||||
}
|
@ -1,8 +1,12 @@
|
||||
{
|
||||
"info.common.hello-world": "привет мир",
|
||||
"general-setting": "Общие",
|
||||
|
||||
"appearance-setting": "Внешний вид",
|
||||
"current-version": "Текущая версия",
|
||||
"copyright": "Авторские права принадлежат проектной группе <a href=\"https://github.com/Digital-EDA\" target=\"_blank\">Digital-IDE</a>, приветствуем <a href=\"https://github.com/Digital-EDA/Digital-IDE\">Star</a>."
|
||||
"copyright": "Авторские права принадлежат проектной группе <a href=\"https://github.com/Digital-EDA\" target=\"_blank\">Digital-IDE</a>, приветствуем <a href=\"https://github.com/Digital-EDA/Digital-IDE\">Star</a>.",
|
||||
"confirm": "Подтвердить",
|
||||
"cancel": "Отменить",
|
||||
"tips": "Советы",
|
||||
"language-setting": "Язык",
|
||||
"setting.language.change-dialog": "Вы изменили язык на упрощенный китайский, мы рекомендуем вам перезапустить Netlist Viewer"
|
||||
}
|
@ -1,9 +1,12 @@
|
||||
{
|
||||
"info.common.hello-world": "hello world",
|
||||
"general-setting": "通用",
|
||||
|
||||
"appearance-setting": "外观",
|
||||
|
||||
"current-version": "当前版本",
|
||||
"copyright": "本软件版权归 <a href=\"https://github.com/Digital-EDA\" target=\"_blank\">Digital-IDE</a> 项目组所有,欢迎 <a href=\"https://github.com/Digital-EDA/Digital-IDE\">Star</a>。"
|
||||
"copyright": "本软件版权归 <a href=\"https://github.com/Digital-EDA\" target=\"_blank\">Digital-IDE</a> 项目组所有,欢迎 <a href=\"https://github.com/Digital-EDA/Digital-IDE\">Star</a>。",
|
||||
"confirm": "确定",
|
||||
"cancel": "取消",
|
||||
"tips": "提示",
|
||||
"language-setting": "语言",
|
||||
"setting.language.change-dialog": "您已经更换语言为简体中文,我们建议您重启 Netlist Viewer"
|
||||
}
|
@ -1,9 +1,12 @@
|
||||
{
|
||||
"info.common.hello-world": "你好,世界",
|
||||
"general-setting": "通用",
|
||||
|
||||
"appearance-setting": "外觀",
|
||||
|
||||
"current-version": "當前版本",
|
||||
"copyright": "本軟件版權歸 <a href=\"https://github.com/Digital-EDA\" target=\"_blank\">Digital-IDE</a> 項目組所有,歡迎 <a href=\"https://github.com/Digital-EDA/Digital-IDE\">Star</a>。"
|
||||
"copyright": "本軟件版權歸 <a href=\"https://github.com/Digital-EDA\" target=\"_blank\">Digital-IDE</a> 項目組所有,歡迎 <a href=\"https://github.com/Digital-EDA/Digital-IDE\">Star</a>。",
|
||||
"confirm": "確定",
|
||||
"cancel": "取消",
|
||||
"tips": "提示",
|
||||
"language-setting": "語言",
|
||||
"setting.language.change-dialog": "您已經更換語言為簡體中文,我們建議您重啟 Netlist Viewer"
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user