Build the node graph frontend with placeholder graph info (#581)

* Build the node graph frontend

* Graph pan and zoom

* Graph's dot grid now pans/zooms also

* Interactive horisontal to vertical curves

* Data types and zooming on wires

* Icon definitions code beautification

* Add a visibility toggle

Co-authored-by: 0hypercube <0hypercube@gmail.com>
This commit is contained in:
Keavon Chambers
2022-05-10 22:34:25 -07:00
co-authored by 0hypercube
parent 5571f39b41
commit 19b2d3f859
32 changed files with 826 additions and 145 deletions
@@ -154,7 +154,14 @@ function makeMenuEntries(editor: EditorState): MenuListEntries {
{
label: "View",
ref: undefined,
children: [[{ label: "Menu entries coming soon" }]],
children: [
[
{
label: "Show/Hide Node Graph (In Development)",
action: async (): Promise<void> => editor.instance.toggle_node_graph_visibility(),
},
],
],
},
{
label: "Help",
@@ -190,7 +197,7 @@ function makeMenuEntries(editor: EditorState): MenuListEntries {
}
export default defineComponent({
inject: ["editor", "dialog"],
inject: ["workspace", "editor", "dialog"],
methods: {
setEntryRefs(menuEntry: MenuListEntry, ref: typeof MenuList) {
if (ref) menuEntry.ref = ref;
@@ -1,5 +1,5 @@
<template>
<LayoutRow class="icon-label" :class="`size-${icons[icon].size}`">
<LayoutRow :class="['icon-label', iconSize, iconStyle]">
<component :is="icon" />
</LayoutRow>
</template>
@@ -23,13 +23,19 @@
width: 24px;
height: 24px;
}
&.node-style {
border-radius: 2px;
background: var(--color-node-background);
fill: var(--color-node-icon);
}
}
</style>
<script lang="ts">
import { defineComponent, PropType } from "vue";
import { IconName, icons } from "@/utilities/icons";
import { IconName, IconStyle, icons, iconComponents } from "@/utilities/icons";
import LayoutRow from "@/components/layout/LayoutRow.vue";
@@ -37,16 +43,20 @@ export default defineComponent({
props: {
icon: { type: String as PropType<IconName>, required: true },
gapAfter: { type: Boolean as PropType<boolean>, default: false },
style: { type: String as PropType<IconStyle>, default: "" },
},
data() {
return {
icons,
};
computed: {
iconSize(): string {
return `size-${icons[this.icon].size}`;
},
iconStyle(): string {
if (!this.style) return "";
return `${this.style}-style`;
},
},
components: {
LayoutRow,
// Import the components of all the icons
...Object.fromEntries(Object.entries(icons).map(([name, data]) => [name, data.component])),
...iconComponents,
},
});
</script>