ember-mug 0.1.5 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/components/App.js
CHANGED
|
@@ -94,7 +94,7 @@ export function App() {
|
|
|
94
94
|
}
|
|
95
95
|
// Only handle these if we're in main view with no active control
|
|
96
96
|
if (viewMode === "main" && activeControl === "none") {
|
|
97
|
-
if (input === "s" && !mugState.connected) {
|
|
97
|
+
if (input === "s" && !mugState.connected && !isScanning) {
|
|
98
98
|
startScanning();
|
|
99
99
|
return;
|
|
100
100
|
}
|
|
@@ -127,5 +127,5 @@ export function App() {
|
|
|
127
127
|
/* Narrow terminal: stack all panels vertically */
|
|
128
128
|
_jsxs(_Fragment, { children: [_jsx(TemperatureDisplay, { currentTemp: mugState.currentTemp, targetTemp: mugState.targetTemp, liquidState: mugState.liquidState, temperatureUnit: localTempUnit, width: panelWidth, theme: theme, tempRate: tempRate }), _jsx(Box, { marginTop: 1, children: _jsx(BatteryDisplay, { batteryLevel: mugState.batteryLevel, isCharging: mugState.isCharging, liquidState: mugState.liquidState, width: panelWidth, theme: theme, batteryRate: batteryRate }) }), _jsx(Box, { marginTop: 1, children: _jsx(TemperatureControl, { targetTemp: mugState.targetTemp, temperatureUnit: localTempUnit, onTempChange: handleTempChange, isActive: true, width: panelWidth, theme: theme }) }), _jsx(Box, { marginTop: 1, children: _jsx(Presets, { presets: presets, selectedIndex: selectedPresetIndex, temperatureUnit: localTempUnit, onSelect: handlePresetSelect, isActive: activeControl === "none", width: panelWidth, theme: theme }) })] })) : (
|
|
129
129
|
/* Wide terminal: 2x2 grid layout */
|
|
130
|
-
_jsxs(_Fragment, { children: [_jsxs(Box, { justifyContent: "center", gap: 2, children: [_jsx(TemperatureDisplay, { currentTemp: mugState.currentTemp, targetTemp: mugState.targetTemp, liquidState: mugState.liquidState, temperatureUnit: localTempUnit, width: panelWidth, height: 8, theme: theme, tempRate: tempRate }), _jsx(BatteryDisplay, { batteryLevel: mugState.batteryLevel, isCharging: mugState.isCharging, liquidState: mugState.liquidState, width: panelWidth, height: 8, theme: theme, batteryRate: batteryRate })] }), _jsxs(Box, { justifyContent: "center", gap: 2, marginTop: 1, children: [_jsx(TemperatureControl, { targetTemp: mugState.targetTemp, temperatureUnit: localTempUnit, onTempChange: handleTempChange, isActive: true, width: panelWidth, height: 9, theme: theme }), _jsx(Presets, { presets: presets, selectedIndex: selectedPresetIndex, temperatureUnit: localTempUnit, onSelect: handlePresetSelect, isActive: activeControl === "none", width: panelWidth, height: 9, theme: theme })] })] })) })), _jsx(HelpDisplay, { isConnected: mugState.connected, theme: theme })] }));
|
|
130
|
+
_jsxs(_Fragment, { children: [_jsxs(Box, { justifyContent: "center", gap: 2, children: [_jsx(TemperatureDisplay, { currentTemp: mugState.currentTemp, targetTemp: mugState.targetTemp, liquidState: mugState.liquidState, temperatureUnit: localTempUnit, width: panelWidth, height: 8, theme: theme, tempRate: tempRate }), _jsx(BatteryDisplay, { batteryLevel: mugState.batteryLevel, isCharging: mugState.isCharging, liquidState: mugState.liquidState, width: panelWidth, height: 8, theme: theme, batteryRate: batteryRate })] }), _jsxs(Box, { justifyContent: "center", gap: 2, marginTop: 1, children: [_jsx(TemperatureControl, { targetTemp: mugState.targetTemp, temperatureUnit: localTempUnit, onTempChange: handleTempChange, isActive: true, width: panelWidth, height: 9, theme: theme }), _jsx(Presets, { presets: presets, selectedIndex: selectedPresetIndex, temperatureUnit: localTempUnit, onSelect: handlePresetSelect, isActive: activeControl === "none", width: panelWidth, height: 9, theme: theme })] })] })) })), _jsx(HelpDisplay, { isConnected: mugState.connected, isScanning: isScanning, error: error, theme: theme })] }));
|
|
131
131
|
}
|
|
@@ -3,7 +3,9 @@ import { TERMINAL_COLORS } from "../lib/theme.js";
|
|
|
3
3
|
type TerminalTheme = (typeof TERMINAL_COLORS)[keyof typeof TERMINAL_COLORS];
|
|
4
4
|
interface HelpDisplayProps {
|
|
5
5
|
isConnected: boolean;
|
|
6
|
+
isScanning?: boolean;
|
|
7
|
+
error?: string | null;
|
|
6
8
|
theme: TerminalTheme;
|
|
7
9
|
}
|
|
8
|
-
export declare function HelpDisplay({ isConnected, theme, }: HelpDisplayProps): React.ReactElement;
|
|
10
|
+
export declare function HelpDisplay({ isConnected, isScanning, error, theme, }: HelpDisplayProps): React.ReactElement;
|
|
9
11
|
export {};
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { Box, Text, useStdout } from "ink";
|
|
3
|
-
export function HelpDisplay({ isConnected, theme, }) {
|
|
3
|
+
export function HelpDisplay({ isConnected, isScanning, error, theme, }) {
|
|
4
4
|
const { stdout } = useStdout();
|
|
5
5
|
const width = stdout?.columns || 80;
|
|
6
|
-
return (_jsxs(Box, { flexDirection: "column", marginTop: 1, children: [_jsx(Text, { color: theme.border, children: "─".repeat(width) }), _jsx(Box, { paddingY: 1, justifyContent: "center", gap: 2, children: isConnected ? (_jsxs(_Fragment, { children: [_jsx(HelpKey, { keyChar: "t", label: "temp", color: theme.primary }), _jsx(HelpKey, { keyChar: "1-3", label: "presets", color: theme.primary }), _jsx(HelpKey, { keyChar: "u", label: "unit", color: theme.primary }), _jsx(HelpKey, { keyChar: "o", label: "settings", color: theme.primary }), _jsx(HelpKey, { keyChar: "q", label: "quit", color: theme.primary })] })) : (_jsxs(_Fragment, { children: [_jsx(HelpKey, { keyChar: "s", label: "scan", color: theme.primary }), _jsx(HelpKey, { keyChar: "r", label: "retry", color: theme.primary }), _jsx(HelpKey, { keyChar: "q", label: "quit", color: theme.primary })] })) })] }));
|
|
6
|
+
return (_jsxs(Box, { flexDirection: "column", marginTop: 1, children: [_jsx(Text, { color: theme.border, children: "─".repeat(width) }), _jsx(Box, { paddingY: 1, justifyContent: "center", gap: 2, children: isConnected ? (_jsxs(_Fragment, { children: [_jsx(HelpKey, { keyChar: "t", label: "temp", color: theme.primary }), _jsx(HelpKey, { keyChar: "1-3", label: "presets", color: theme.primary }), _jsx(HelpKey, { keyChar: "u", label: "unit", color: theme.primary }), _jsx(HelpKey, { keyChar: "o", label: "settings", color: theme.primary }), _jsx(HelpKey, { keyChar: "q", label: "quit", color: theme.primary })] })) : (_jsxs(_Fragment, { children: [!isScanning && !error && (_jsx(HelpKey, { keyChar: "s", label: "scan", color: theme.primary })), error && (_jsx(HelpKey, { keyChar: "r", label: "retry", color: theme.primary })), _jsx(HelpKey, { keyChar: "q", label: "quit", color: theme.primary })] })) })] }));
|
|
7
7
|
}
|
|
8
8
|
function HelpKey({ keyChar, label, color }) {
|
|
9
9
|
return (_jsxs(Text, { children: [_jsxs(Text, { color: color, bold: true, children: ["[", keyChar, "]"] }), _jsxs(Text, { dimColor: true, children: [" ", label] })] }));
|
package/dist/lib/bluetooth.js
CHANGED
|
@@ -38,7 +38,12 @@ export class BluetoothManager extends EventEmitter {
|
|
|
38
38
|
this.emit('mugFound', name);
|
|
39
39
|
await this.stopScanning();
|
|
40
40
|
this.peripheral = peripheral;
|
|
41
|
-
|
|
41
|
+
try {
|
|
42
|
+
await this.connect();
|
|
43
|
+
}
|
|
44
|
+
catch (err) {
|
|
45
|
+
this.emit('error', err instanceof Error ? err : new Error(String(err)));
|
|
46
|
+
}
|
|
42
47
|
}
|
|
43
48
|
});
|
|
44
49
|
}
|