From 32ef89159a0623a9d4a5dee24a5f3da27ca37ef7 Mon Sep 17 00:00:00 2001 From: a2nr Date: Sun, 26 Jul 2026 11:49:01 +0700 Subject: [PATCH] refactor(DeployTab): mode toggle inline in serial monitor + deploy FAB --- .../src/routes/lesson/[slug]/DeployTab.svelte | 102 +++++++++++++----- 1 file changed, 75 insertions(+), 27 deletions(-) diff --git a/frontend/src/routes/lesson/[slug]/DeployTab.svelte b/frontend/src/routes/lesson/[slug]/DeployTab.svelte index 6876215..ebc6fde 100644 --- a/frontend/src/routes/lesson/[slug]/DeployTab.svelte +++ b/frontend/src/routes/lesson/[slug]/DeployTab.svelte @@ -60,14 +60,10 @@ return () => mq.removeEventListener('change', handler); }); - function detectMode() { - usbSupported = typeof navigator !== 'undefined' && 'serial' in navigator; - isDesktop = typeof window !== 'undefined' && window.matchMedia('(min-width: 1024px)').matches; - if (usbSupported && isDesktop) { - deployMode = 'usb'; - } else { - deployMode = 'ble'; - } + function detectDeviceMode(): DeployMode { + const hasWebSerial = typeof navigator !== 'undefined' && 'serial' in navigator; + const isDesktop = typeof window !== 'undefined' && window.matchMedia('(hover: hover)').matches; + return hasWebSerial && isDesktop ? 'usb' : 'ble'; } function createDeployer(mode: DeployMode): HardwareDeployer { @@ -76,7 +72,8 @@ } function initDeployer() { - detectMode(); + deployMode = detectDeviceMode(); + usbSupported = typeof navigator !== 'undefined' && 'serial' in navigator; deployer = createDeployer(deployMode); bleSupported = deployer.checkSupport(); if (!bleSupported) { @@ -296,24 +293,6 @@

{deployMode === 'usb' ? 'USB Deployer' : 'BLE Deployer'}

- {#if usbSupported && isDesktop} -
- - -
- {/if}
{isPaired ? (deployer?.deviceName ? `Terhubung (${deployer.deviceName})` : 'Terhubung') : 'Terputus'} @@ -359,6 +338,20 @@
Serial Monitor + {#if usbSupported && bleSupported && deployState === 'idle'} +
+ + +
+ {/if}