diff --git a/src/App.vue b/src/App.vue
index c83e3bb..c3af7df 100644
--- a/src/App.vue
+++ b/src/App.vue
@@ -3,6 +3,7 @@ import { ref, computed, reactive, onMounted, onBeforeUnmount, watch } from 'vue'
import DeterminationMachine from './components/DeterminationMachine.vue';
//@ts-ignore
import SilverKnob from './components/SilverKnob.vue';
+import DraggableInstrumentWrapper from './components/DraggableInstrumentWrapper.vue';
import Oscilloscope from './components/Oscilloscope.vue';
import SignalGen from './components/SignalGen.vue';
import Notebook from './components/Notebook.vue';
@@ -788,92 +789,29 @@ onBeforeUnmount(() => {
-
-
-
-
+
-
+ @register-pin="registerPin" @unregister-pin="unregisterPin" @pin-click="onPinClick"
+ @change="onDistanceChange" />
+
-
-
-
-
+
-
+ :signal-frequency-k-hz="signalFrequencyKHz" :lissajous-line-streak="lissajousLineStreak" />
+
-
-
-
-
-
-
+
+
+
-
-
-
-
-
-
+
+
+
@@ -941,62 +879,10 @@ onBeforeUnmount(() => {
stroke-linejoin: round;
}
-.instrument-wrapper {
- position: absolute;
- filter: drop-shadow(0 10px 10px black);
- transition: filter 0.2s;
-}
-
.machine {
pointer-events: auto;
}
-.drag-handle {
- touch-action: none;
- position: absolute;
- top: -12px;
- left: 50%;
- transform: translateX(-50%);
- width: 40px;
- height: 24px;
- background: linear-gradient(135deg, rgba(100, 100, 100, 0.9), rgba(60, 60, 60, 0.95));
- border-radius: 12px;
- display: flex;
- align-items: center;
- justify-content: center;
- cursor: grab;
- z-index: 1000;
- box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3), inset 0 1px 2px rgba(255, 255, 255, 0.2);
- opacity: 0.7;
- transition: all 0.2s;
- border: 1px solid rgba(255, 255, 255, 0.1);
- backdrop-filter: blur(4px);
-}
-
-.drag-handle:hover {
- opacity: 1;
- background: linear-gradient(135deg, rgba(120, 120, 120, 0.95), rgba(80, 80, 80, 1));
- box-shadow: 0 3px 12px rgba(0, 0, 0, 0.5), inset 0 1px 2px rgba(255, 255, 255, 0.3);
- transform: translateX(-50%) scale(1.1);
-}
-
-.drag-handle:active {
- cursor: grabbing;
- background: linear-gradient(135deg, rgba(80, 80, 80, 1), rgba(50, 50, 50, 1));
- box-shadow: 0 1px 4px rgba(0, 0, 0, 0.6), inset 0 1px 2px rgba(255, 255, 255, 0.2);
-}
-
-.drag-handle svg {
- width: 20px;
- height: 20px;
- color: rgba(255, 255, 255, 0.8);
- filter: drop-shadow(0 1px 1px rgba(0, 0, 0, 0.5));
-}
-
-.instrument-wrapper:hover .drag-handle {
- opacity: 0.9;
-}
-
.tooltip {
position: absolute;
z-index: 9000;
diff --git a/src/components/DraggableInstrumentWrapper.vue b/src/components/DraggableInstrumentWrapper.vue
new file mode 100644
index 0000000..38dd389
--- /dev/null
+++ b/src/components/DraggableInstrumentWrapper.vue
@@ -0,0 +1,104 @@
+
+
+
+
+
+
+
+
+
+
+
+
+