+ {/* Drag handle dots */}
+ {showHandles &&
+ handlePositions.map((pos, i) => (
+
handlePointerDown(e, pos.anchor)}
+ className="pointer-events-auto absolute z-20 flex cursor-crosshair items-center justify-center"
+ style={{
+ left: `${pos.left}px`,
+ top: `${pos.top}px`,
+ width: `${HANDLE_HIT_AREA * 2}px`,
+ height: `${HANDLE_HIT_AREA * 2}px`,
+ transform: "translate(-50%, -50%)",
+ }}
+ >
+
+
+ ))}
+
+ {/* Relation type dropdown */}
+ {pendingArrowId && (
+
+ )}
+
+ );
+};
diff --git a/apps/obsidian/src/components/canvas/overlays/RelationOverlay.tsx b/apps/obsidian/src/components/canvas/overlays/RelationOverlay.tsx
index 048e46b91..a3baff93d 100644
--- a/apps/obsidian/src/components/canvas/overlays/RelationOverlay.tsx
+++ b/apps/obsidian/src/components/canvas/overlays/RelationOverlay.tsx
@@ -87,7 +87,7 @@ export const RelationsOverlay = ({ plugin, file }: RelationsOverlayProps) => {
maxHeight: "calc(100% - 24px)",
pointerEvents: "all",
overflow: "auto",
- zIndex: 10,
+ zIndex: 25,
}}
onMouseDown={(e) => e.stopPropagation()}
onMouseUp={(e) => e.stopPropagation()}
diff --git a/apps/obsidian/src/components/canvas/overlays/RelationTypeDropdown.tsx b/apps/obsidian/src/components/canvas/overlays/RelationTypeDropdown.tsx
new file mode 100644
index 000000000..5c494c401
--- /dev/null
+++ b/apps/obsidian/src/components/canvas/overlays/RelationTypeDropdown.tsx
@@ -0,0 +1,160 @@
+import { useCallback, useEffect, useMemo, useRef } from "react";
+import { TLShapeId, useEditor, useValue } from "tldraw";
+import DiscourseGraphPlugin from "~/index";
+import { DiscourseRelationShape } from "~/components/canvas/shapes/DiscourseRelationShape";
+import {
+ getArrowBindings,
+ getArrowInfo,
+} from "~/components/canvas/utils/relationUtils";
+import {
+ getDiscourseNodeTypeId,
+ getValidRelationTypesForNodePair,
+} from "~/components/canvas/utils/relationTypeUtils";
+
+type RelationTypeDropdownProps = {
+ arrowId: TLShapeId;
+ plugin: DiscourseGraphPlugin;
+ onSelect: (relationTypeId: string) => void;
+ onDismiss: () => void;
+};
+
+export const RelationTypeDropdown = ({
+ arrowId,
+ plugin,
+ onSelect,
+ onDismiss,
+}: RelationTypeDropdownProps) => {
+ const editor = useEditor();
+ const dropdownRef = useRef