diff --git a/src/components/RulesOfInferencePlayground.tsx b/src/components/RulesOfInferencePlayground.tsx
index e377d5d..95f6778 100644
--- a/src/components/RulesOfInferencePlayground.tsx
+++ b/src/components/RulesOfInferencePlayground.tsx
@@ -88,12 +88,18 @@ function parseDragData(e: React.DragEvent): { type: DragType; value: string } |
}
}
-function DraggableChip({ label, onDragStart: handle, disabled = false }: { label: string; onDragStart: (e: React.DragEvent) => void; disabled?: boolean }) {
+function DraggableChip({ label, onDragStart: handle, onDoubleClick, disabled = false }: {
+ label: string;
+ onDragStart: (e: React.DragEvent) => void;
+ onDoubleClick?: () => void;
+ disabled?: boolean;
+}) {
return (
setActivePremises((prev) => prev.filter((x) => x !== p));
+ // Double-click handlers
+ const handlePremiseDoubleClick = (premise: string) => {
+ if (reachedTarget) return;
+ if (!availableStatements.includes(premise)) return;
+ setActivePremises((prev) => (prev.includes(premise) ? prev : [...prev, premise]));
+ };
+
+ const handleRuleDoubleClick = (rule: string) => {
+ if (reachedTarget) return;
+ setActiveRule(rule);
+ };
+
+ // Check for invalid rule combination and show error
+ useEffect(() => {
+ if (activeRule && activePremises.length > 0 && candidates.length === 0) {
+ setShowInvalidRuleModal(true);
+ setActiveRule(undefined);
+ }
+ }, [activeRule, activePremises, candidates.length]);
+
return (
{/* Top controls */}
@@ -290,7 +316,13 @@ export default function RulesOfInferencePlayground({ onComplete }: { onComplete?
Initial premises
{example.premises.map((p) => (
- onDragStart(e, "premise", p)} disabled={reachedTarget} />
+ onDragStart(e, "premise", p)}
+ onDoubleClick={() => handlePremiseDoubleClick(p)}
+ disabled={reachedTarget}
+ />
))}
@@ -303,6 +335,7 @@ export default function RulesOfInferencePlayground({ onComplete }: { onComplete?
key={`${s.result}-${idx}`}
label={s.result}
onDragStart={(e) => onDragStart(e, "statement", s.result)}
+ onDoubleClick={() => handlePremiseDoubleClick(s.result)}
disabled={reachedTarget}
/>
))}
@@ -317,7 +350,12 @@ export default function RulesOfInferencePlayground({ onComplete }: { onComplete?
{example.rules.map((r) => (
-
onDragStart(e, "rule", r.id)} disabled={reachedTarget} />
+ onDragStart(e, "rule", r.id)}
+ onDoubleClick={() => handleRuleDoubleClick(r.id)}
+ disabled={reachedTarget}
+ />
{r.help && {r.help}
}
))}