@bobfrankston/msger 0.1.49 → 0.1.51
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/clihandler.d.ts.map +1 -1
- package/clihandler.js +13 -1
- package/clihandler.js.map +1 -1
- package/clihandler.ts +13 -1
- package/msger-native/ARM64-SETUP.md +131 -0
- package/msger-native/setup-arm64-toolchain.sh +63 -0
- package/msger-native/src/main.rs +82 -1
- package/msgernative-linux-x64 +0 -0
- package/msgernative-win32-x64.exe +0 -0
- package/package.json +4 -2
- package/postinstall.js +39 -0
- package/shower.d.ts +3 -0
- package/shower.d.ts.map +1 -1
- package/shower.js +6 -1
- package/shower.js.map +1 -1
- package/shower.ts +10 -2
package/clihandler.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"clihandler.d.ts","sourceRoot":"","sources":["clihandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"clihandler.d.ts","sourceRoot":"","sources":["clihandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAgEhD;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG;IAAE,OAAO,EAAE,iBAAiB,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAC;IAAC,WAAW,EAAE,OAAO,CAAA;CAAE,CAuIpH;AAED,wBAAgB,QAAQ,IAAI,IAAI,CAE/B;AAED,wBAAgB,WAAW,IAAI,IAAI,CAElC"}
|
package/clihandler.js
CHANGED
|
@@ -18,8 +18,10 @@ Options:
|
|
|
18
18
|
-input Include an input field
|
|
19
19
|
-default <text> Default value for input field
|
|
20
20
|
-size <width,height> Set window size (e.g., -size 800,600)
|
|
21
|
+
-zoom <percent> Set zoom level as percentage (e.g., -zoom 150 for 150%)
|
|
21
22
|
-timeout <seconds> Auto-close after specified seconds
|
|
22
23
|
-detach Leave window open after app exits (parent process returns immediately)
|
|
24
|
+
-ontop Keep window always on top of other windows
|
|
23
25
|
-v, -version, --version Show version number
|
|
24
26
|
-help, -?, --help Show this help message
|
|
25
27
|
|
|
@@ -112,6 +114,10 @@ export function parseCliArgs(args) {
|
|
|
112
114
|
cli.detach = true;
|
|
113
115
|
i++;
|
|
114
116
|
}
|
|
117
|
+
else if (arg === '-ontop' || arg === '--ontop' || arg === '-alwaysontop' || arg === '--alwaysontop') {
|
|
118
|
+
cli.alwaysOnTop = true;
|
|
119
|
+
i++;
|
|
120
|
+
}
|
|
115
121
|
else if (arg === '-size' || arg === '--size') {
|
|
116
122
|
const size = args[++i];
|
|
117
123
|
const [w, h] = size.split(',').map(s => parseInt(s.trim(), 10));
|
|
@@ -121,6 +127,10 @@ export function parseCliArgs(args) {
|
|
|
121
127
|
cli.height = h;
|
|
122
128
|
i++;
|
|
123
129
|
}
|
|
130
|
+
else if (arg === '-zoom' || arg === '--zoom') {
|
|
131
|
+
cli.zoomPercent = parseFloat(args[++i]);
|
|
132
|
+
i++;
|
|
133
|
+
}
|
|
124
134
|
else if (!arg.startsWith('-')) {
|
|
125
135
|
// Non-option argument - part of the message
|
|
126
136
|
messageWords.push(arg);
|
|
@@ -178,7 +188,9 @@ export function parseCliArgs(args) {
|
|
|
178
188
|
height: cli.height || defaultHeight,
|
|
179
189
|
},
|
|
180
190
|
timeout: cli.timeout,
|
|
181
|
-
detach: cli.detach
|
|
191
|
+
detach: cli.detach,
|
|
192
|
+
alwaysOnTop: cli.alwaysOnTop,
|
|
193
|
+
zoomPercent: cli.zoomPercent
|
|
182
194
|
};
|
|
183
195
|
return { options, showHelp: cli.help || false, showVersion: cli.version || false };
|
|
184
196
|
}
|
package/clihandler.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"clihandler.js","sourceRoot":"","sources":["clihandler.ts"],"names":[],"mappings":"AACA,OAAO,WAAW,MAAM,gBAAgB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"clihandler.js","sourceRoot":"","sources":["clihandler.ts"],"names":[],"mappings":"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"}
|
package/clihandler.ts
CHANGED
|
@@ -13,6 +13,8 @@ interface CliOptions {
|
|
|
13
13
|
defaultValue?: string;
|
|
14
14
|
timeout?: number;
|
|
15
15
|
detach?: boolean;
|
|
16
|
+
alwaysOnTop?: boolean;
|
|
17
|
+
zoomPercent?: number;
|
|
16
18
|
help?: boolean;
|
|
17
19
|
version?: boolean;
|
|
18
20
|
}
|
|
@@ -36,8 +38,10 @@ Options:
|
|
|
36
38
|
-input Include an input field
|
|
37
39
|
-default <text> Default value for input field
|
|
38
40
|
-size <width,height> Set window size (e.g., -size 800,600)
|
|
41
|
+
-zoom <percent> Set zoom level as percentage (e.g., -zoom 150 for 150%)
|
|
39
42
|
-timeout <seconds> Auto-close after specified seconds
|
|
40
43
|
-detach Leave window open after app exits (parent process returns immediately)
|
|
44
|
+
-ontop Keep window always on top of other windows
|
|
41
45
|
-v, -version, --version Show version number
|
|
42
46
|
-help, -?, --help Show this help message
|
|
43
47
|
|
|
@@ -121,12 +125,18 @@ export function parseCliArgs(args: string[]): { options: MessageBoxOptions; show
|
|
|
121
125
|
} else if (arg === '-detach' || arg === '--detach') {
|
|
122
126
|
cli.detach = true;
|
|
123
127
|
i++;
|
|
128
|
+
} else if (arg === '-ontop' || arg === '--ontop' || arg === '-alwaysontop' || arg === '--alwaysontop') {
|
|
129
|
+
cli.alwaysOnTop = true;
|
|
130
|
+
i++;
|
|
124
131
|
} else if (arg === '-size' || arg === '--size') {
|
|
125
132
|
const size = args[++i];
|
|
126
133
|
const [w, h] = size.split(',').map(s => parseInt(s.trim(), 10));
|
|
127
134
|
if (w) cli.width = w;
|
|
128
135
|
if (h) cli.height = h;
|
|
129
136
|
i++;
|
|
137
|
+
} else if (arg === '-zoom' || arg === '--zoom') {
|
|
138
|
+
cli.zoomPercent = parseFloat(args[++i]);
|
|
139
|
+
i++;
|
|
130
140
|
} else if (!arg.startsWith('-')) {
|
|
131
141
|
// Non-option argument - part of the message
|
|
132
142
|
messageWords.push(arg);
|
|
@@ -184,7 +194,9 @@ export function parseCliArgs(args: string[]): { options: MessageBoxOptions; show
|
|
|
184
194
|
height: cli.height || defaultHeight,
|
|
185
195
|
},
|
|
186
196
|
timeout: cli.timeout,
|
|
187
|
-
detach: cli.detach
|
|
197
|
+
detach: cli.detach,
|
|
198
|
+
alwaysOnTop: cli.alwaysOnTop,
|
|
199
|
+
zoomPercent: cli.zoomPercent
|
|
188
200
|
};
|
|
189
201
|
|
|
190
202
|
return { options, showHelp: cli.help || false, showVersion: cli.version || false };
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
# ARM64 Cross-Compilation Setup
|
|
2
|
+
|
|
3
|
+
This guide explains how to set up ARM64 cross-compilation for building `msger` binaries that run on Raspberry Pi and other ARM64 Linux systems.
|
|
4
|
+
|
|
5
|
+
## Prerequisites
|
|
6
|
+
|
|
7
|
+
- WSL2 or Linux development environment
|
|
8
|
+
- Rust toolchain installed (`rustup`)
|
|
9
|
+
- Node.js and npm
|
|
10
|
+
|
|
11
|
+
## Quick Setup
|
|
12
|
+
|
|
13
|
+
Run this command to automatically install the ARM64 cross-compilation toolchain:
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
npm run setup:arm64
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
This will:
|
|
20
|
+
- Install GCC ARM64 cross-compiler
|
|
21
|
+
- Install required development libraries
|
|
22
|
+
- Add Rust ARM64 target (`aarch64-unknown-linux-gnu`)
|
|
23
|
+
|
|
24
|
+
## Manual Setup
|
|
25
|
+
|
|
26
|
+
If you prefer to install manually or the script doesn't work for your distribution:
|
|
27
|
+
|
|
28
|
+
### Ubuntu/Debian
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
sudo apt update
|
|
32
|
+
sudo apt install -y \
|
|
33
|
+
gcc-aarch64-linux-gnu \
|
|
34
|
+
g++-aarch64-linux-gnu \
|
|
35
|
+
libc6-dev-arm64-cross \
|
|
36
|
+
libwebkit2gtk-4.1-dev \
|
|
37
|
+
libgtk-3-dev \
|
|
38
|
+
pkg-config
|
|
39
|
+
|
|
40
|
+
rustup target add aarch64-unknown-linux-gnu
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
### Fedora/RHEL
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
sudo dnf install -y \
|
|
47
|
+
gcc-aarch64-linux-gnu \
|
|
48
|
+
gcc-c++-aarch64-linux-gnu \
|
|
49
|
+
webkit2gtk4.1-devel \
|
|
50
|
+
gtk3-devel \
|
|
51
|
+
pkg-config
|
|
52
|
+
|
|
53
|
+
rustup target add aarch64-unknown-linux-gnu
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
### Arch Linux
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
sudo pacman -S --needed \
|
|
60
|
+
aarch64-linux-gnu-gcc \
|
|
61
|
+
webkit2gtk \
|
|
62
|
+
gtk3 \
|
|
63
|
+
pkg-config
|
|
64
|
+
|
|
65
|
+
rustup target add aarch64-unknown-linux-gnu
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
## Building ARM64 Binaries
|
|
69
|
+
|
|
70
|
+
Once the toolchain is set up, build the ARM64 binary:
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
npm run build:native:arm64
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
This creates `msgernative-linux-arm64` which can be deployed to Raspberry Pi or other ARM64 Linux systems.
|
|
77
|
+
|
|
78
|
+
## Testing on ARM64
|
|
79
|
+
|
|
80
|
+
To test the binary on a Raspberry Pi:
|
|
81
|
+
|
|
82
|
+
1. Copy the binary to your Pi:
|
|
83
|
+
```bash
|
|
84
|
+
scp msgernative-linux-arm64 pi@raspberrypi.local:~/
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
2. SSH to the Pi and make it executable:
|
|
88
|
+
```bash
|
|
89
|
+
ssh pi@raspberrypi.local
|
|
90
|
+
chmod +x msgernative-linux-arm64
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
3. Install required libraries on the Pi:
|
|
94
|
+
```bash
|
|
95
|
+
sudo apt install libwebkit2gtk-4.1-0 libgtk-3-0
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
4. Test it:
|
|
99
|
+
```bash
|
|
100
|
+
echo '{"message":"Hello from ARM64!"}' | ./msgernative-linux-arm64
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
## Troubleshooting
|
|
104
|
+
|
|
105
|
+
### "linker 'aarch64-linux-gnu-gcc' not found"
|
|
106
|
+
|
|
107
|
+
The ARM64 cross-compiler is not installed. Run:
|
|
108
|
+
```bash
|
|
109
|
+
sudo apt install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
### "error: failed to run custom build command for `webkit2gtk-sys`"
|
|
113
|
+
|
|
114
|
+
WebKit development libraries are missing:
|
|
115
|
+
```bash
|
|
116
|
+
sudo apt install libwebkit2gtk-4.1-dev libgtk-3-dev pkg-config
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
### Binary works locally but fails on Raspberry Pi
|
|
120
|
+
|
|
121
|
+
The Pi may be missing runtime libraries:
|
|
122
|
+
```bash
|
|
123
|
+
# On the Raspberry Pi:
|
|
124
|
+
sudo apt update
|
|
125
|
+
sudo apt install libwebkit2gtk-4.1-0 libgtk-3-0
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
Check what's missing with:
|
|
129
|
+
```bash
|
|
130
|
+
ldd ./msgernative-linux-arm64
|
|
131
|
+
```
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Setup ARM64 cross-compilation toolchain for building msger on WSL/Linux
|
|
3
|
+
|
|
4
|
+
echo "🔧 Setting up ARM64 cross-compilation toolchain..."
|
|
5
|
+
|
|
6
|
+
# Detect distro
|
|
7
|
+
if [ -f /etc/os-release ]; then
|
|
8
|
+
. /etc/os-release
|
|
9
|
+
DISTRO=$ID
|
|
10
|
+
else
|
|
11
|
+
echo "❌ Cannot detect Linux distribution"
|
|
12
|
+
exit 1
|
|
13
|
+
fi
|
|
14
|
+
|
|
15
|
+
echo "📍 Detected distribution: $DISTRO"
|
|
16
|
+
|
|
17
|
+
# Install cross-compilation tools based on distro
|
|
18
|
+
case "$DISTRO" in
|
|
19
|
+
ubuntu|debian)
|
|
20
|
+
echo "📦 Installing packages for Debian/Ubuntu..."
|
|
21
|
+
sudo apt update
|
|
22
|
+
sudo apt install -y \
|
|
23
|
+
gcc-aarch64-linux-gnu \
|
|
24
|
+
g++-aarch64-linux-gnu \
|
|
25
|
+
libc6-dev-arm64-cross \
|
|
26
|
+
libwebkit2gtk-4.1-dev \
|
|
27
|
+
libgtk-3-dev \
|
|
28
|
+
pkg-config
|
|
29
|
+
;;
|
|
30
|
+
fedora|rhel|centos)
|
|
31
|
+
echo "📦 Installing packages for Fedora/RHEL..."
|
|
32
|
+
sudo dnf install -y \
|
|
33
|
+
gcc-aarch64-linux-gnu \
|
|
34
|
+
gcc-c++-aarch64-linux-gnu \
|
|
35
|
+
webkit2gtk4.1-devel \
|
|
36
|
+
gtk3-devel \
|
|
37
|
+
pkg-config
|
|
38
|
+
;;
|
|
39
|
+
arch|manjaro)
|
|
40
|
+
echo "📦 Installing packages for Arch..."
|
|
41
|
+
sudo pacman -S --needed \
|
|
42
|
+
aarch64-linux-gnu-gcc \
|
|
43
|
+
webkit2gtk \
|
|
44
|
+
gtk3 \
|
|
45
|
+
pkg-config
|
|
46
|
+
;;
|
|
47
|
+
*)
|
|
48
|
+
echo "❌ Unsupported distribution: $DISTRO"
|
|
49
|
+
echo " Please install ARM64 cross-compilation tools manually"
|
|
50
|
+
exit 1
|
|
51
|
+
;;
|
|
52
|
+
esac
|
|
53
|
+
|
|
54
|
+
# Add Rust ARM64 target
|
|
55
|
+
echo "🦀 Adding Rust ARM64 target..."
|
|
56
|
+
rustup target add aarch64-unknown-linux-gnu
|
|
57
|
+
|
|
58
|
+
echo ""
|
|
59
|
+
echo "✅ ARM64 toolchain setup complete!"
|
|
60
|
+
echo ""
|
|
61
|
+
echo "You can now build ARM64 binaries with:"
|
|
62
|
+
echo " npm run build:native:arm64"
|
|
63
|
+
echo ""
|
package/msger-native/src/main.rs
CHANGED
|
@@ -30,6 +30,12 @@ struct MessageBoxOptions {
|
|
|
30
30
|
allow_input: bool,
|
|
31
31
|
#[serde(default)]
|
|
32
32
|
timeout: Option<u64>,
|
|
33
|
+
#[serde(default)]
|
|
34
|
+
auto_size: bool,
|
|
35
|
+
#[serde(default)]
|
|
36
|
+
always_on_top: bool,
|
|
37
|
+
#[serde(default)]
|
|
38
|
+
zoom_percent: Option<f64>,
|
|
33
39
|
}
|
|
34
40
|
|
|
35
41
|
#[derive(Serialize, Deserialize, Debug)]
|
|
@@ -187,6 +193,51 @@ fn generate_html(options: &MessageBoxOptions) -> String {
|
|
|
187
193
|
window.ipc.postMessage(JSON.stringify(result));
|
|
188
194
|
}}
|
|
189
195
|
|
|
196
|
+
// Auto-size window to content
|
|
197
|
+
const autoSize = {};
|
|
198
|
+
if (autoSize) {{
|
|
199
|
+
window.addEventListener('DOMContentLoaded', function() {{
|
|
200
|
+
// Wait a tick for content to render
|
|
201
|
+
setTimeout(() => {{
|
|
202
|
+
const content = document.getElementById('content');
|
|
203
|
+
const buttons = document.getElementById('buttons');
|
|
204
|
+
const inputField = document.getElementById('inputField');
|
|
205
|
+
|
|
206
|
+
// Calculate required height
|
|
207
|
+
let contentHeight = content.scrollHeight;
|
|
208
|
+
let buttonsHeight = buttons.offsetHeight;
|
|
209
|
+
let inputHeight = inputField ? inputField.offsetHeight + 15 : 0;
|
|
210
|
+
let padding = 40; // body padding
|
|
211
|
+
|
|
212
|
+
let totalHeight = contentHeight + buttonsHeight + inputHeight + padding;
|
|
213
|
+
|
|
214
|
+
// Calculate required width (estimate based on content)
|
|
215
|
+
let contentWidth = Math.max(
|
|
216
|
+
content.scrollWidth,
|
|
217
|
+
buttons.offsetWidth
|
|
218
|
+
);
|
|
219
|
+
let totalWidth = Math.min(Math.max(contentWidth + 40, 400), 1200);
|
|
220
|
+
|
|
221
|
+
// Constrain to reasonable bounds
|
|
222
|
+
totalHeight = Math.min(Math.max(totalHeight, 150), 800);
|
|
223
|
+
|
|
224
|
+
// Send resize message
|
|
225
|
+
window.ipc.postMessage(JSON.stringify({{
|
|
226
|
+
_resize: true,
|
|
227
|
+
width: totalWidth,
|
|
228
|
+
height: totalHeight
|
|
229
|
+
}}));
|
|
230
|
+
}}, 50);
|
|
231
|
+
}});
|
|
232
|
+
}}
|
|
233
|
+
|
|
234
|
+
// Set initial zoom level if specified
|
|
235
|
+
const initialZoom = {};
|
|
236
|
+
if (initialZoom) {{
|
|
237
|
+
zoomLevel = initialZoom / 100.0;
|
|
238
|
+
document.body.style.zoom = zoomLevel;
|
|
239
|
+
}}
|
|
240
|
+
|
|
190
241
|
// Zoom support with mouse wheel
|
|
191
242
|
let zoomLevel = 1.0;
|
|
192
243
|
document.addEventListener('wheel', function(e) {{
|
|
@@ -237,6 +288,8 @@ fn generate_html(options: &MessageBoxOptions) -> String {
|
|
|
237
288
|
html_content,
|
|
238
289
|
input_html,
|
|
239
290
|
buttons_html,
|
|
291
|
+
if options.auto_size { "true" } else { "false" },
|
|
292
|
+
options.zoom_percent.unwrap_or(100.0),
|
|
240
293
|
options.buttons.first().unwrap_or(&"Cancel".to_string())
|
|
241
294
|
)
|
|
242
295
|
}
|
|
@@ -256,9 +309,18 @@ fn main() {
|
|
|
256
309
|
.read_to_string(&mut input)
|
|
257
310
|
.expect("Failed to read stdin");
|
|
258
311
|
|
|
259
|
-
let options: MessageBoxOptions =
|
|
312
|
+
let mut options: MessageBoxOptions =
|
|
260
313
|
serde_json::from_str(&input).expect("Failed to parse JSON input");
|
|
261
314
|
|
|
315
|
+
// Adjust default size for URLs (more browser-like)
|
|
316
|
+
if options.url.is_some() {
|
|
317
|
+
// If width/height are still at defaults (600x400), upgrade to browser-like size
|
|
318
|
+
if options.width == 600 && options.height == 400 {
|
|
319
|
+
options.width = 1024;
|
|
320
|
+
options.height = 768;
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
|
|
262
324
|
// Create event loop and window
|
|
263
325
|
let event_loop = EventLoop::new();
|
|
264
326
|
let window = WindowBuilder::new()
|
|
@@ -268,6 +330,7 @@ fn main() {
|
|
|
268
330
|
options.height as f64,
|
|
269
331
|
))
|
|
270
332
|
.with_resizable(true)
|
|
333
|
+
.with_always_on_top(options.always_on_top)
|
|
271
334
|
.build(&event_loop)
|
|
272
335
|
.expect("Failed to create window");
|
|
273
336
|
|
|
@@ -292,6 +355,15 @@ fn main() {
|
|
|
292
355
|
.with_url(url)
|
|
293
356
|
.with_devtools(true)
|
|
294
357
|
.with_ipc_handler(move |msg| {
|
|
358
|
+
// Check for resize message first
|
|
359
|
+
if let Ok(resize_msg) = serde_json::from_str::<serde_json::Value>(msg.body()) {
|
|
360
|
+
if resize_msg.get("_resize").and_then(|v| v.as_bool()).unwrap_or(false) {
|
|
361
|
+
// This is a resize message - we'll handle it in the event loop
|
|
362
|
+
// For now, just ignore it (window resize from IPC is complex in wry/tao)
|
|
363
|
+
return;
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
|
|
295
367
|
// Parse the result from JavaScript (msg is now a Request<String>)
|
|
296
368
|
if let Ok(res) = serde_json::from_str::<MessageBoxResult>(msg.body()) {
|
|
297
369
|
let mut result_lock = result_clone.lock().unwrap();
|
|
@@ -306,6 +378,15 @@ fn main() {
|
|
|
306
378
|
.with_html(&html)
|
|
307
379
|
.with_devtools(true)
|
|
308
380
|
.with_ipc_handler(move |msg| {
|
|
381
|
+
// Check for resize message first
|
|
382
|
+
if let Ok(resize_msg) = serde_json::from_str::<serde_json::Value>(msg.body()) {
|
|
383
|
+
if resize_msg.get("_resize").and_then(|v| v.as_bool()).unwrap_or(false) {
|
|
384
|
+
// This is a resize message - we'll handle it in the event loop
|
|
385
|
+
// For now, just ignore it (window resize from IPC is complex in wry/tao)
|
|
386
|
+
return;
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
|
|
309
390
|
// Parse the result from JavaScript (msg is now a Request<String>)
|
|
310
391
|
if let Ok(res) = serde_json::from_str::<MessageBoxResult>(msg.body()) {
|
|
311
392
|
let mut result_lock = result_clone.lock().unwrap();
|
package/msgernative-linux-x64
CHANGED
|
Binary file
|
|
Binary file
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bobfrankston/msger",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.51",
|
|
4
4
|
"description": "Fast, lightweight, cross-platform message box - Rust-powered alternative to msgview",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./index.js",
|
|
@@ -17,9 +17,11 @@
|
|
|
17
17
|
"build": "npm run build:ts && npm run build:native",
|
|
18
18
|
"build:native": "cd msger-native && npm run build",
|
|
19
19
|
"build:native:wsl": "cd msger-native && npm run build:wsl",
|
|
20
|
+
"build:native:arm64": "cd msger-native && npm run build:arm64",
|
|
20
21
|
"build:native:pi": "cd msger-native && npm run build:pi",
|
|
21
22
|
"build:native:all": "npm run build:native && npm run build:native:wsl",
|
|
22
23
|
"build:native:allpiignored": "npm run build:native:pi",
|
|
24
|
+
"setup:arm64": "wsl bash msger-native/setup-arm64-toolchain.sh",
|
|
23
25
|
"build:ts": "tsc",
|
|
24
26
|
"watch": "tsc -w",
|
|
25
27
|
"clean": "rm -rf *.js *.d.ts *.js.map bin && cd msger-native && cargo clean",
|
|
@@ -30,7 +32,7 @@
|
|
|
30
32
|
"preversion": "npm run build:ts && npm run build:native:all && git add -A",
|
|
31
33
|
"postversion": "git push && git push --tags",
|
|
32
34
|
"release": "npm run prerelease:local && npm version patch && npm publish",
|
|
33
|
-
"installer": "npm run release && npm install -g @bobfrankston/msger && wsl npm install -g
|
|
35
|
+
"installer": "npm run release && npm cache clean --force && npm install -g @bobfrankston/msger@latest && wsl npm cache clean --force && wsl npm install -g @bobfrankston/msger@latest"
|
|
34
36
|
},
|
|
35
37
|
"keywords": [
|
|
36
38
|
"message-box",
|
package/postinstall.js
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
import fs from 'fs';
|
|
3
3
|
import path from 'path';
|
|
4
4
|
import { fileURLToPath } from 'url';
|
|
5
|
+
import { execSync } from 'child_process';
|
|
5
6
|
|
|
6
7
|
const __filename = fileURLToPath(import.meta.url);
|
|
7
8
|
const __dirname = path.dirname(__filename);
|
|
@@ -21,7 +22,45 @@ if (!isWindows) {
|
|
|
21
22
|
console.warn(`⚠️ Could not set execute permission on ${binaryPath}: ${error.message}`);
|
|
22
23
|
console.warn(` You may need to run: sudo chmod +x ${binaryPath}`);
|
|
23
24
|
}
|
|
25
|
+
|
|
26
|
+
// Check for required system libraries
|
|
27
|
+
try {
|
|
28
|
+
const lddOutput = execSync(`ldd "${binaryPath}" 2>&1`, { encoding: 'utf8' });
|
|
29
|
+
if (lddOutput.includes('not found')) {
|
|
30
|
+
console.warn('\n⚠️ Missing system dependencies detected!');
|
|
31
|
+
console.warn(' Install required libraries with:\n');
|
|
32
|
+
|
|
33
|
+
// Detect distro and provide appropriate command
|
|
34
|
+
let distro = 'unknown';
|
|
35
|
+
try {
|
|
36
|
+
if (fs.existsSync('/etc/os-release')) {
|
|
37
|
+
const osRelease = fs.readFileSync('/etc/os-release', 'utf8');
|
|
38
|
+
if (osRelease.includes('ubuntu') || osRelease.includes('debian')) {
|
|
39
|
+
distro = 'debian';
|
|
40
|
+
} else if (osRelease.includes('fedora') || osRelease.includes('rhel') || osRelease.includes('centos')) {
|
|
41
|
+
distro = 'fedora';
|
|
42
|
+
} else if (osRelease.includes('arch')) {
|
|
43
|
+
distro = 'arch';
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
} catch (e) { /* ignore */ }
|
|
47
|
+
|
|
48
|
+
if (distro === 'debian') {
|
|
49
|
+
console.warn(' sudo apt update');
|
|
50
|
+
console.warn(' sudo apt install libwebkit2gtk-4.1-0 libgtk-3-0\n');
|
|
51
|
+
} else if (distro === 'fedora') {
|
|
52
|
+
console.warn(' sudo dnf install webkit2gtk4.1 gtk3\n');
|
|
53
|
+
} else if (distro === 'arch') {
|
|
54
|
+
console.warn(' sudo pacman -S webkit2gtk gtk3\n');
|
|
55
|
+
} else {
|
|
56
|
+
console.warn(' Install webkit2gtk and gtk3 for your distribution\n');
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
} catch (error) {
|
|
60
|
+
// ldd command failed, might not be installed
|
|
61
|
+
}
|
|
24
62
|
} else {
|
|
25
63
|
console.warn(`⚠️ Binary not found at ${binaryPath}`);
|
|
64
|
+
console.warn(` The msger package may not support your platform (${process.platform} ${arch})`);
|
|
26
65
|
}
|
|
27
66
|
}
|
package/shower.d.ts
CHANGED
|
@@ -7,6 +7,9 @@ export interface MessageBoxOptions {
|
|
|
7
7
|
width: number; /** Window width */
|
|
8
8
|
height: number; /** Window height */
|
|
9
9
|
};
|
|
10
|
+
zoomPercent?: number; /** Initial zoom level as percentage (100=100%, 150=150%, 50=50%, etc.) */
|
|
11
|
+
autoSize?: boolean; /** Automatically resize window to fit content (default: false) */
|
|
12
|
+
alwaysOnTop?: boolean; /** Keep window on top of other windows (default: false) */
|
|
10
13
|
buttons?: string[]; /** Array of button labels to display (default: ['OK']) */
|
|
11
14
|
defaultValue?: string; /** Default value for input field when allowInput is true */
|
|
12
15
|
allowInput?: boolean; /** Enable an input field in the message box (default: false) */
|
package/shower.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shower.d.ts","sourceRoot":"","sources":["shower.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,iBAAiB;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC,CAAW,uDAAuD;IACjF,OAAO,CAAC,EAAE,MAAM,CAAC,CAAS,8EAA8E;IACxG,IAAI,CAAC,EAAE,MAAM,CAAC,CAAY,iDAAiD;IAC3E,GAAG,CAAC,EAAE,MAAM,CAAC,CAAa,0DAA0D;IAEpF,IAAI,CAAC,EAAE;QACH,KAAK,EAAE,MAAM,CAAC,CAAQ,mBAAmB;QACzC,MAAM,EAAE,MAAM,CAAC,CAAO,oBAAoB;KAC7C,CAAC;
|
|
1
|
+
{"version":3,"file":"shower.d.ts","sourceRoot":"","sources":["shower.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,iBAAiB;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC,CAAW,uDAAuD;IACjF,OAAO,CAAC,EAAE,MAAM,CAAC,CAAS,8EAA8E;IACxG,IAAI,CAAC,EAAE,MAAM,CAAC,CAAY,iDAAiD;IAC3E,GAAG,CAAC,EAAE,MAAM,CAAC,CAAa,0DAA0D;IAEpF,IAAI,CAAC,EAAE;QACH,KAAK,EAAE,MAAM,CAAC,CAAQ,mBAAmB;QACzC,MAAM,EAAE,MAAM,CAAC,CAAO,oBAAoB;KAC7C,CAAC;IAMF,WAAW,CAAC,EAAE,MAAM,CAAC,CAAK,0EAA0E;IACpG,QAAQ,CAAC,EAAE,OAAO,CAAC,CAAO,kEAAkE;IAC5F,WAAW,CAAC,EAAE,OAAO,CAAC,CAAI,2DAA2D;IACrF,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC,CAAO,0DAA0D;IACpF,YAAY,CAAC,EAAE,MAAM,CAAC,CAAI,4DAA4D;IACtF,UAAU,CAAC,EAAE,OAAO,CAAC,CAAK,gEAAgE;IAE1F,OAAO,CAAC,EAAE,MAAM,CAAC,CAAS,yDAAyD;IACnF,MAAM,CAAC,EAAE,OAAO,CAAC,CAAS,0DAA0D;CACvF;AAED,MAAM,WAAW,gBAAgB;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC3B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;CACrB;AAED;;;;GAIG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAkH1F"}
|
package/shower.js
CHANGED
|
@@ -91,7 +91,12 @@ export async function showMessageBox(options) {
|
|
|
91
91
|
});
|
|
92
92
|
// Send options to stdin
|
|
93
93
|
try {
|
|
94
|
-
|
|
94
|
+
// If autoSize is not explicitly set, enable it when no size is specified
|
|
95
|
+
const optionsToSend = { ...options };
|
|
96
|
+
if (optionsToSend.autoSize === undefined && !optionsToSend.size) {
|
|
97
|
+
optionsToSend.autoSize = true;
|
|
98
|
+
}
|
|
99
|
+
child.stdin.write(JSON.stringify(optionsToSend));
|
|
95
100
|
child.stdin.end();
|
|
96
101
|
// If detached, resolve immediately after sending options
|
|
97
102
|
if (options.detach) {
|
package/shower.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shower.js","sourceRoot":"","sources":["shower.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC;AAC9B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"shower.js","sourceRoot":"","sources":["shower.ts"],"names":[],"mappings":"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"}
|
package/shower.ts
CHANGED
|
@@ -19,7 +19,9 @@ export interface MessageBoxOptions {
|
|
|
19
19
|
// y: number; /** Window Y position in pixels */
|
|
20
20
|
// screen?: number; /** Optional screen index (0-based, Windows only) */
|
|
21
21
|
// };
|
|
22
|
-
|
|
22
|
+
zoomPercent?: number; /** Initial zoom level as percentage (100=100%, 150=150%, 50=50%, etc.) */
|
|
23
|
+
autoSize?: boolean; /** Automatically resize window to fit content (default: false) */
|
|
24
|
+
alwaysOnTop?: boolean; /** Keep window on top of other windows (default: false) */
|
|
23
25
|
buttons?: string[]; /** Array of button labels to display (default: ['OK']) */
|
|
24
26
|
defaultValue?: string; /** Default value for input field when allowInput is true */
|
|
25
27
|
allowInput?: boolean; /** Enable an input field in the message box (default: false) */
|
|
@@ -139,7 +141,13 @@ export async function showMessageBox(options: MessageBoxOptions): Promise<Messag
|
|
|
139
141
|
|
|
140
142
|
// Send options to stdin
|
|
141
143
|
try {
|
|
142
|
-
|
|
144
|
+
// If autoSize is not explicitly set, enable it when no size is specified
|
|
145
|
+
const optionsToSend = { ...options };
|
|
146
|
+
if (optionsToSend.autoSize === undefined && !optionsToSend.size) {
|
|
147
|
+
optionsToSend.autoSize = true;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
child.stdin.write(JSON.stringify(optionsToSend));
|
|
143
151
|
child.stdin.end();
|
|
144
152
|
|
|
145
153
|
// If detached, resolve immediately after sending options
|