From 9f45e49f5aa70131dbabd8bbfb00dde255f9820e Mon Sep 17 00:00:00 2001 From: itsrubberduck Date: Fri, 10 Jul 2026 16:48:45 +0200 Subject: [PATCH] feat(live-atc): add TextInputPanel, LastTransmissionCard, CommLogRail MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Moves the last three inline cockpit blocks out of the page into components, re-skinned onto the navy/instrument-panel language the rest of the cockpit already uses (the v-card bg-white/5 glass treatment is gone). LastTransmissionCard collapses the old four-button row (Mark as faulty / Edit issue / Reset / Delete) to two icon buttons, per the design doc. Nothing is lost: "Reset" was a duplicate of the issue dialog's own "Remove flag" action, so the amber flag icon opens that dialog and a plain × dismisses the card. resetLastTransmissionFault therefore has no caller left on the page. CommLogRail wraps the readback-check block plus CommLog for the desktop rail; the .pm-readback-* styles move with it. The mobile Log tab keeps using CommLog directly, as the design doc specifies. Verified by rendering all three on a throwaway route with fake data: the suggestion chip fills the text field through v-model, the flag button flips the card into its faulty skin, and the readback rows render matched/missing. Typecheck clean, 167/167 tests green. Co-Authored-By: Claude Opus 4.8 --- .../live-atc/cockpit/CommLogRail.vue | 89 ++++++++ .../live-atc/cockpit/LastTransmissionCard.vue | 172 +++++++++++++++ .../live-atc/cockpit/TextInputPanel.vue | 109 +++++++++ app/pages/live-atc.vue | 206 ++---------------- 4 files changed, 392 insertions(+), 184 deletions(-) create mode 100644 app/components/live-atc/cockpit/CommLogRail.vue create mode 100644 app/components/live-atc/cockpit/LastTransmissionCard.vue create mode 100644 app/components/live-atc/cockpit/TextInputPanel.vue diff --git a/app/components/live-atc/cockpit/CommLogRail.vue b/app/components/live-atc/cockpit/CommLogRail.vue new file mode 100644 index 0000000..200a098 --- /dev/null +++ b/app/components/live-atc/cockpit/CommLogRail.vue @@ -0,0 +1,89 @@ + + + + + diff --git a/app/components/live-atc/cockpit/LastTransmissionCard.vue b/app/components/live-atc/cockpit/LastTransmissionCard.vue new file mode 100644 index 0000000..48f1590 --- /dev/null +++ b/app/components/live-atc/cockpit/LastTransmissionCard.vue @@ -0,0 +1,172 @@ + + + + + diff --git a/app/components/live-atc/cockpit/TextInputPanel.vue b/app/components/live-atc/cockpit/TextInputPanel.vue new file mode 100644 index 0000000..aff00db --- /dev/null +++ b/app/components/live-atc/cockpit/TextInputPanel.vue @@ -0,0 +1,109 @@ + + + + + diff --git a/app/pages/live-atc.vue b/app/pages/live-atc.vue index 80b7475..07dbf9c 100644 --- a/app/pages/live-atc.vue +++ b/app/pages/live-atc.vue @@ -305,39 +305,12 @@
- - -
-

Text Input

- {{ frequencies.active || '---' }} -
- - -
-

Suggested phrase

-
- - {{ backendExpectedPhrase }} - -
-
-
-
+
@@ -346,92 +319,13 @@ v-if="lastTransmission" class="pm-block" > - - -
-
- - - Last transmission - -
-
- - Faulty - - - - {{ lastTransmissionFaulty ? 'Edit issue' : 'Mark as faulty' }} - - - - Reset - - - - Delete - -
-
-

{{ lastTransmission }}

-
-

Issue description

-

- {{ lastTransmissionFaultNote }} -

-

- Marked as faulty. -

-
-
-
+ @@ -444,32 +338,12 @@ @@ -608,6 +482,9 @@ import { useFrequencyPresets } from '~/composables/useFrequencyPresets' import RadioPanel from '~/components/live-atc/cockpit/RadioPanel.vue' import ExpectedCommStrip from '~/components/live-atc/cockpit/ExpectedCommStrip.vue' import PttPad from '~/components/live-atc/cockpit/PttPad.vue' +import TextInputPanel from '~/components/live-atc/cockpit/TextInputPanel.vue' +import LastTransmissionCard from '~/components/live-atc/cockpit/LastTransmissionCard.vue' +import CommLogRail from '~/components/live-atc/cockpit/CommLogRail.vue' import { useAtisPlayback } from '~/composables/useAtisPlayback' import { usePttRecording } from '~/composables/usePttRecording' import { useBugReport } from '~/composables/useBugReport' @@ -750,7 +627,6 @@ const { transmissionIssueNote, setLastTransmission, clearLastTransmission, - resetLastTransmissionFault, startTransmissionIssueFlow, confirmTransmissionIssue, removeTransmissionIssue, @@ -1564,44 +1440,6 @@ onUnmounted(() => { display: none; } -.pm-readback-check { - margin-bottom: 10px; - padding: 10px 12px; - border: 1px solid var(--border); - border-radius: 12px; - background: color-mix(in srgb, var(--text) 4%, transparent); - font-size: 11.5px; -} -.pm-readback-head { - display: flex; - align-items: center; - gap: 6px; - text-transform: uppercase; - letter-spacing: .12em; - font-size: 10px; - font-weight: 600; - color: color-mix(in srgb, var(--text) 55%, transparent); - margin-bottom: 6px; -} -.pm-readback-heard { - font-family: ui-monospace, SFMono-Regular, Menlo, monospace; - color: color-mix(in srgb, var(--text) 50%, transparent); - margin-bottom: 6px; - font-size: 11px; -} -.pm-readback-row { - display: flex; - align-items: flex-start; - gap: 6px; - font-family: ui-monospace, SFMono-Regular, Menlo, monospace; - line-height: 1.5; -} -.pm-readback-row.is-ok { color: #6ee7a8; } -.pm-readback-row.is-missing { color: #fca5a5; } -.pm-readback-field { color: var(--t2); } -.pm-readback-expected { color: var(--text); font-weight: 600; } -.pm-readback-forms { color: var(--t4); } - /* Setup screens sit above the shared radar backdrop. */ .pm-setup { position: relative;