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 @@ + + + + +