From 3d9d85ba7fd085ae69baac7107b03c686a1175b9 Mon Sep 17 00:00:00 2001 From: Patrick Mulligan Date: Sun, 1 Mar 2026 12:18:46 -0500 Subject: [PATCH] feat(machine): redesign cash-out with split-screen layout Split-screen for displayingInvoice (info left, QR right), full-width for selectingAmount. Add StepIndicator with warning flow accent header. Replace Skeleton with BounceDots, remove ScrollArea and Card wrappers, wrap states in Transition for fade animations. Co-Authored-By: Claude Opus 4.6 --- apps/machine/src/views/CashOutView.vue | 471 +++++++++++++------------ 1 file changed, 248 insertions(+), 223 deletions(-) diff --git a/apps/machine/src/views/CashOutView.vue b/apps/machine/src/views/CashOutView.vue index 8c9819e..5a4e426 100644 --- a/apps/machine/src/views/CashOutView.vue +++ b/apps/machine/src/views/CashOutView.vue @@ -3,17 +3,31 @@ import { watch, computed, ref } from 'vue' import { useRouter } from 'vue-router' import { useAtmStore } from '@/stores/atm' import { Button } from '@/components/ui/button' -import { Card, CardContent, CardHeader, CardTitle, CardDescription } from '@/components/ui/card' import { Badge } from '@/components/ui/badge' import { Alert, AlertDescription } from '@/components/ui/alert' -import { Skeleton } from '@/components/ui/skeleton' -import { ScrollArea } from '@/components/ui/scroll-area' import QRCode from '@/components/QRCode.vue' +import BounceDots from '@/components/BounceDots.vue' +import StepIndicator from '@/components/StepIndicator.vue' const router = useRouter() const atmStore = useAtmStore() const isElectron = typeof window !== 'undefined' && window.electronAPI !== undefined +const cashOutSteps = ['Select', 'Pay', 'Collect'] + +const currentStepIndex = computed(() => { + switch (nestedState.value) { + case 'fetchingRate': + case 'selectingAmount': + return 0 + case 'generatingInvoice': + case 'displayingInvoice': + return 1 + default: + return 2 + } +}) + // Copy invoice functionality const copyButtonText = ref('Copy Invoice') @@ -99,172 +113,168 @@ function formatFiat(cents: number): string {