diff --git a/docs/examples/index.ts b/docs/examples/index.ts
index cf9f6141..9504f687 100644
--- a/docs/examples/index.ts
+++ b/docs/examples/index.ts
@@ -20,7 +20,7 @@ import { NodeResizerApp, ResizableNode } from './node-resizer'
import { ToolbarApp, ToolbarNode } from './node-toolbar'
import { LayoutApp, LayoutEdge, LayoutElements, LayoutIcon, LayoutNode, useLayout, useRunProcess, useShuffle } from './layout'
import { SimpleLayoutApp, SimpleLayoutElements, SimpleLayoutIcon, useSimpleLayout } from './layout-simple'
-
+import { LoopbackApp, LoopbackCSS, LoopbackEdge } from './loopback'
import { MathApp, MathCSS, MathElements, MathIcon, MathOperatorNode, MathResultNode, MathValueNode } from './math'
import { ConfirmApp, ConfirmDialog, useDialog } from './confirm-delete'
@@ -165,4 +165,9 @@ export const exampleImports = {
'Dialog.vue': ConfirmDialog,
'useDialog.js': useDialog,
},
+ loopback: {
+ 'App.vue': LoopbackApp,
+ 'LoopbackEdge.vue': LoopbackEdge,
+ 'style.css': LoopbackCSS,
+ },
}
diff --git a/docs/examples/loopback/App.vue b/docs/examples/loopback/App.vue
new file mode 100644
index 00000000..782b1177
--- /dev/null
+++ b/docs/examples/loopback/App.vue
@@ -0,0 +1,65 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/examples/loopback/LoopbackEdge.vue b/docs/examples/loopback/LoopbackEdge.vue
new file mode 100644
index 00000000..7335fe0e
--- /dev/null
+++ b/docs/examples/loopback/LoopbackEdge.vue
@@ -0,0 +1,113 @@
+
+
+
+
+
+
+
diff --git a/docs/examples/loopback/index.ts b/docs/examples/loopback/index.ts
new file mode 100644
index 00000000..073ee57a
--- /dev/null
+++ b/docs/examples/loopback/index.ts
@@ -0,0 +1,3 @@
+export { default as LoopbackApp } from './App.vue?raw'
+export { default as LoopbackEdge } from './LoopbackEdge.vue?raw'
+export { default as LoopbackCSS } from './style.css?inline'
diff --git a/docs/examples/loopback/style.css b/docs/examples/loopback/style.css
new file mode 100644
index 00000000..c337d1d1
--- /dev/null
+++ b/docs/examples/loopback/style.css
@@ -0,0 +1,26 @@
+.vue-flow__panel {
+ background-color: #2d3748;
+ padding: 10px;
+ border-radius: 8px;
+ box-shadow: 0 0 10px rgba(0, 0, 0, 0.5);
+ color: white;
+ display: flex;
+ flex-direction: column;
+ gap: 1rem;
+ font-size: 12px;
+ font-weight: 600;
+ width: 100px;
+}
+
+
+.vue-flow__panel label {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ gap: 5px;
+ cursor: pointer;
+}
+
+.vue-flow__panel label input {
+ cursor: pointer;
+}
diff --git a/docs/src/.vitepress/config.mts b/docs/src/.vitepress/config.mts
index 8df6d358..82f774f0 100644
--- a/docs/src/.vitepress/config.mts
+++ b/docs/src/.vitepress/config.mts
@@ -245,6 +245,7 @@ export default defineConfigWithTheme({
{ text: 'Custom Connection Line', link: '/examples/edges/connection-line' },
{ text: 'Connection Validation', link: '/examples/edges/validation' },
{ text: 'Connection Radius', link: '/examples/edges/connection-radius' },
+ { text: 'Loopback Edge', link: '/examples/edges/loopback' },
],
},
],
diff --git a/docs/src/examples/edges/loopback.md b/docs/src/examples/edges/loopback.md
new file mode 100644
index 00000000..6a0d8451
--- /dev/null
+++ b/docs/src/examples/edges/loopback.md
@@ -0,0 +1,8 @@
+# Loopback Edges
+
+Loopback edges are edges that connect a node to itself. They are useful for representing self-referential relationships.
+This example walks you through creating loopback edges using Vue Flow and custom edges.
+
+
+
+