electrobun 0.4.1 → 0.6.0-beta.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.
Files changed (78) hide show
  1. package/{templates/multitab-browser/bun.lock → bun.lock} +20 -13
  2. package/dist/api/bun/proc/native.ts +84 -16
  3. package/package.json +14 -16
  4. package/BETA_RELEASE.md +0 -67
  5. package/BUILD.md +0 -90
  6. package/LICENSE +0 -21
  7. package/README.md +0 -102
  8. package/debug.js +0 -5
  9. package/templates/hello-world/README.md +0 -57
  10. package/templates/hello-world/bun.lock +0 -225
  11. package/templates/hello-world/electrobun.config.ts +0 -28
  12. package/templates/hello-world/package.json +0 -16
  13. package/templates/hello-world/src/bun/index.ts +0 -15
  14. package/templates/hello-world/src/mainview/index.css +0 -124
  15. package/templates/hello-world/src/mainview/index.html +0 -46
  16. package/templates/hello-world/src/mainview/index.ts +0 -1
  17. package/templates/interactive-playground/README.md +0 -26
  18. package/templates/interactive-playground/assets/tray-icon.png +0 -0
  19. package/templates/interactive-playground/electrobun.config.ts +0 -36
  20. package/templates/interactive-playground/package-lock.json +0 -1112
  21. package/templates/interactive-playground/package.json +0 -15
  22. package/templates/interactive-playground/src/bun/demos/files.ts +0 -70
  23. package/templates/interactive-playground/src/bun/demos/menus.ts +0 -139
  24. package/templates/interactive-playground/src/bun/demos/rpc.ts +0 -83
  25. package/templates/interactive-playground/src/bun/demos/system.ts +0 -72
  26. package/templates/interactive-playground/src/bun/demos/updates.ts +0 -105
  27. package/templates/interactive-playground/src/bun/demos/windows.ts +0 -90
  28. package/templates/interactive-playground/src/bun/index.ts +0 -124
  29. package/templates/interactive-playground/src/bun/types/rpc.ts +0 -109
  30. package/templates/interactive-playground/src/mainview/components/EventLog.ts +0 -107
  31. package/templates/interactive-playground/src/mainview/components/Sidebar.ts +0 -65
  32. package/templates/interactive-playground/src/mainview/components/Toast.ts +0 -57
  33. package/templates/interactive-playground/src/mainview/demos/FileDemo.ts +0 -211
  34. package/templates/interactive-playground/src/mainview/demos/MenuDemo.ts +0 -102
  35. package/templates/interactive-playground/src/mainview/demos/RPCDemo.ts +0 -229
  36. package/templates/interactive-playground/src/mainview/demos/TrayDemo.ts +0 -132
  37. package/templates/interactive-playground/src/mainview/demos/WebViewDemo.ts +0 -465
  38. package/templates/interactive-playground/src/mainview/demos/WindowDemo.ts +0 -207
  39. package/templates/interactive-playground/src/mainview/index.css +0 -538
  40. package/templates/interactive-playground/src/mainview/index.html +0 -103
  41. package/templates/interactive-playground/src/mainview/index.ts +0 -238
  42. package/templates/multitab-browser/README.md +0 -34
  43. package/templates/multitab-browser/electrobun.config.ts +0 -32
  44. package/templates/multitab-browser/package-lock.json +0 -20
  45. package/templates/multitab-browser/package.json +0 -12
  46. package/templates/multitab-browser/src/bun/index.ts +0 -144
  47. package/templates/multitab-browser/src/bun/tabManager.ts +0 -200
  48. package/templates/multitab-browser/src/bun/types/rpc.ts +0 -78
  49. package/templates/multitab-browser/src/mainview/index.css +0 -487
  50. package/templates/multitab-browser/src/mainview/index.html +0 -94
  51. package/templates/multitab-browser/src/mainview/index.ts +0 -634
  52. package/templates/photo-booth/README.md +0 -108
  53. package/templates/photo-booth/bun.lock +0 -239
  54. package/templates/photo-booth/electrobun.config.ts +0 -32
  55. package/templates/photo-booth/package.json +0 -17
  56. package/templates/photo-booth/src/bun/index.ts +0 -92
  57. package/templates/photo-booth/src/mainview/index.css +0 -465
  58. package/templates/photo-booth/src/mainview/index.html +0 -124
  59. package/templates/photo-booth/src/mainview/index.ts +0 -499
  60. package/test-new-window-events.ts +0 -26
  61. package/test-new-window.html +0 -75
  62. package/test-npm-install.sh +0 -34
  63. package/tests/bun.lock +0 -14
  64. package/tests/electrobun.config.ts +0 -45
  65. package/tests/package-lock.json +0 -36
  66. package/tests/package.json +0 -13
  67. package/tests/src/bun/index.ts +0 -100
  68. package/tests/src/bun/test-runner.ts +0 -508
  69. package/tests/src/mainview/index.html +0 -110
  70. package/tests/src/mainview/index.ts +0 -458
  71. package/tests/src/mainview/styles/main.css +0 -451
  72. package/tests/src/testviews/tray-test.html +0 -57
  73. package/tests/src/testviews/webview-mask.html +0 -114
  74. package/tests/src/testviews/webview-navigation.html +0 -36
  75. package/tests/src/testviews/window-create.html +0 -17
  76. package/tests/src/testviews/window-events.html +0 -29
  77. package/tests/src/testviews/window-focus.html +0 -37
  78. package/tests/src/webviewtag/index.ts +0 -11
@@ -1,451 +0,0 @@
1
- * {
2
- margin: 0;
3
- padding: 0;
4
- box-sizing: border-box;
5
- }
6
-
7
- body {
8
- font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
9
- background: #f5f5f5;
10
- height: 100vh;
11
- overflow: hidden;
12
- }
13
-
14
- .app-container {
15
- display: flex;
16
- flex-direction: column;
17
- height: 100vh;
18
- }
19
-
20
- /* Header */
21
- .header {
22
- background: #2c3e50;
23
- color: white;
24
- padding: 15px 20px;
25
- display: flex;
26
- justify-content: space-between;
27
- align-items: center;
28
- box-shadow: 0 2px 4px rgba(0,0,0,0.1);
29
- }
30
-
31
- .header h1 {
32
- font-size: 24px;
33
- font-weight: 600;
34
- }
35
-
36
- .header-actions {
37
- display: flex;
38
- align-items: center;
39
- gap: 15px;
40
- }
41
-
42
- .platform-info {
43
- color: #bdc3c7;
44
- font-size: 14px;
45
- }
46
-
47
- /* Buttons */
48
- .btn {
49
- padding: 8px 16px;
50
- border: none;
51
- border-radius: 6px;
52
- cursor: pointer;
53
- font-size: 14px;
54
- font-weight: 500;
55
- transition: all 0.2s;
56
- }
57
-
58
- .btn-primary {
59
- background: #3498db;
60
- color: white;
61
- }
62
-
63
- .btn-primary:hover {
64
- background: #2980b9;
65
- }
66
-
67
- .btn-secondary {
68
- background: #95a5a6;
69
- color: white;
70
- }
71
-
72
- .btn-secondary:hover {
73
- background: #7f8c8d;
74
- }
75
-
76
- .btn-success {
77
- background: #27ae60;
78
- color: white;
79
- }
80
-
81
- .btn-danger {
82
- background: #e74c3c;
83
- color: white;
84
- }
85
-
86
- .btn-run {
87
- background: #f39c12;
88
- color: white;
89
- padding: 6px 12px;
90
- font-size: 12px;
91
- }
92
-
93
- /* Main content */
94
- .main-content {
95
- display: flex;
96
- flex: 1;
97
- overflow: hidden;
98
- }
99
-
100
- /* Sidebar */
101
- .sidebar {
102
- width: 250px;
103
- background: white;
104
- border-right: 1px solid #e0e0e0;
105
- padding: 20px;
106
- overflow-y: auto;
107
- }
108
-
109
- .sidebar h3 {
110
- font-size: 16px;
111
- margin-bottom: 15px;
112
- color: #2c3e50;
113
- }
114
-
115
- .test-categories {
116
- margin-bottom: 30px;
117
- }
118
-
119
- .filter-item {
120
- display: block;
121
- margin-bottom: 8px;
122
- cursor: pointer;
123
- font-size: 14px;
124
- }
125
-
126
- .filter-item input {
127
- margin-right: 8px;
128
- }
129
-
130
- .test-status-summary {
131
- border-top: 1px solid #e0e0e0;
132
- padding-top: 20px;
133
- }
134
-
135
- .status-counts {
136
- display: flex;
137
- flex-direction: column;
138
- gap: 10px;
139
- }
140
-
141
- .count-item {
142
- display: flex;
143
- justify-content: space-between;
144
- align-items: center;
145
- }
146
-
147
- .count {
148
- font-weight: bold;
149
- font-size: 18px;
150
- }
151
-
152
- .label {
153
- color: #7f8c8d;
154
- font-size: 14px;
155
- }
156
-
157
- /* Test area */
158
- .test-area {
159
- flex: 1;
160
- padding: 20px;
161
- overflow-y: auto;
162
- }
163
-
164
- .test-area h2 {
165
- font-size: 20px;
166
- margin-bottom: 8px;
167
- color: #2c3e50;
168
- }
169
-
170
- .section-description {
171
- color: #7f8c8d;
172
- margin-bottom: 20px;
173
- font-size: 14px;
174
- }
175
-
176
- .tests-container {
177
- margin-bottom: 40px;
178
- }
179
-
180
- /* Test cards */
181
- .test-card {
182
- background: white;
183
- border-radius: 8px;
184
- padding: 20px;
185
- margin-bottom: 15px;
186
- box-shadow: 0 2px 4px rgba(0,0,0,0.05);
187
- border-left: 4px solid #e0e0e0;
188
- transition: all 0.2s;
189
- }
190
-
191
- .test-card.auto {
192
- border-left-color: #3498db;
193
- }
194
-
195
- .test-card.manual {
196
- border-left-color: #f39c12;
197
- background: #fffbf0;
198
- }
199
-
200
- .test-card.hybrid {
201
- border-left-color: #9b59b6;
202
- }
203
-
204
- .test-card.passed {
205
- border-left-color: #27ae60;
206
- background: #f0fff4;
207
- }
208
-
209
- .test-card.failed {
210
- border-left-color: #e74c3c;
211
- background: #fef5f5;
212
- }
213
-
214
- .test-card.running {
215
- border-left-color: #f39c12;
216
- background: #fffef7;
217
- }
218
-
219
- .test-header {
220
- display: flex;
221
- justify-content: space-between;
222
- align-items: flex-start;
223
- margin-bottom: 15px;
224
- }
225
-
226
- .test-title {
227
- font-size: 18px;
228
- font-weight: 600;
229
- color: #2c3e50;
230
- margin-bottom: 5px;
231
- }
232
-
233
- .test-meta {
234
- display: flex;
235
- gap: 10px;
236
- font-size: 12px;
237
- color: #7f8c8d;
238
- }
239
-
240
- .test-badge {
241
- background: #ecf0f1;
242
- padding: 2px 8px;
243
- border-radius: 10px;
244
- font-size: 11px;
245
- font-weight: 500;
246
- }
247
-
248
- .test-description {
249
- color: #5d6d7e;
250
- margin-bottom: 15px;
251
- line-height: 1.4;
252
- }
253
-
254
- .test-status {
255
- display: flex;
256
- align-items: center;
257
- gap: 10px;
258
- margin-bottom: 15px;
259
- }
260
-
261
- .status-indicator {
262
- font-size: 16px;
263
- }
264
-
265
- .status-text {
266
- font-weight: 500;
267
- }
268
-
269
- .status-details {
270
- color: #7f8c8d;
271
- font-size: 14px;
272
- }
273
-
274
- /* Instructions for manual tests */
275
- .test-instructions {
276
- background: #f8f9fa;
277
- border: 1px solid #e9ecef;
278
- border-radius: 6px;
279
- padding: 15px;
280
- margin-bottom: 15px;
281
- }
282
-
283
- .test-instructions h4 {
284
- margin-bottom: 10px;
285
- color: #495057;
286
- font-size: 14px;
287
- font-weight: 600;
288
- }
289
-
290
- .test-instructions ol {
291
- margin-left: 20px;
292
- }
293
-
294
- .test-instructions li {
295
- margin-bottom: 5px;
296
- line-height: 1.4;
297
- }
298
-
299
- /* Test actions */
300
- .test-actions {
301
- display: flex;
302
- gap: 10px;
303
- align-items: center;
304
- }
305
-
306
- .manual-verify {
307
- display: flex;
308
- gap: 10px;
309
- align-items: center;
310
- padding: 10px;
311
- background: #fff3cd;
312
- border: 1px dashed #ffc107;
313
- border-radius: 6px;
314
- margin-top: 15px;
315
- }
316
-
317
- .manual-verify-text {
318
- flex: 1;
319
- font-weight: 500;
320
- color: #856404;
321
- }
322
-
323
- /* Animations */
324
- @keyframes pulse {
325
- 0%, 100% { opacity: 1; }
326
- 50% { opacity: 0.7; }
327
- }
328
-
329
- @keyframes flash-success {
330
- 0%, 100% { background-color: transparent; }
331
- 50% { background-color: #d4f4dd; }
332
- }
333
-
334
- @keyframes flash-error {
335
- 0%, 100% { background-color: transparent; }
336
- 50% { background-color: #f8d7da; }
337
- }
338
-
339
- .flash-success {
340
- animation: flash-success 0.6s ease-in-out;
341
- }
342
-
343
- .flash-error {
344
- animation: flash-error 0.6s ease-in-out;
345
- }
346
-
347
- .pulse {
348
- animation: pulse 1s infinite;
349
- }
350
-
351
- /* Event log */
352
- .event-log {
353
- height: 150px;
354
- background: #2c3e50;
355
- color: white;
356
- border-top: 1px solid #34495e;
357
- }
358
-
359
- .event-log h3 {
360
- padding: 10px 20px;
361
- font-size: 14px;
362
- color: #bdc3c7;
363
- background: #34495e;
364
- }
365
-
366
- .log-content {
367
- height: calc(150px - 35px);
368
- overflow-y: auto;
369
- padding: 10px 20px;
370
- font-family: 'Monaco', 'Consolas', monospace;
371
- font-size: 12px;
372
- }
373
-
374
- .log-entry {
375
- margin-bottom: 5px;
376
- line-height: 1.3;
377
- }
378
-
379
- .timestamp {
380
- color: #95a5a6;
381
- margin-right: 10px;
382
- }
383
-
384
- .log-success {
385
- color: #2ecc71;
386
- }
387
-
388
- .log-error {
389
- color: #e74c3c;
390
- }
391
-
392
- .log-info {
393
- color: #3498db;
394
- }
395
-
396
- /* Modal */
397
- .modal {
398
- position: fixed;
399
- top: 0;
400
- left: 0;
401
- width: 100%;
402
- height: 100%;
403
- background: rgba(0,0,0,0.5);
404
- z-index: 1000;
405
- display: flex;
406
- align-items: center;
407
- justify-content: center;
408
- }
409
-
410
- .modal-content {
411
- background: white;
412
- border-radius: 8px;
413
- max-width: 600px;
414
- max-height: 80vh;
415
- width: 90%;
416
- overflow: hidden;
417
- }
418
-
419
- .modal-header {
420
- padding: 20px;
421
- border-bottom: 1px solid #e0e0e0;
422
- display: flex;
423
- justify-content: space-between;
424
- align-items: center;
425
- }
426
-
427
- .modal-close {
428
- background: none;
429
- border: none;
430
- font-size: 24px;
431
- cursor: pointer;
432
- color: #7f8c8d;
433
- }
434
-
435
- .modal-body {
436
- padding: 20px;
437
- max-height: 400px;
438
- overflow-y: auto;
439
- }
440
-
441
- /* Responsive */
442
- @media (max-width: 768px) {
443
- .main-content {
444
- flex-direction: column;
445
- }
446
-
447
- .sidebar {
448
- width: 100%;
449
- height: auto;
450
- }
451
- }
@@ -1,57 +0,0 @@
1
- <!DOCTYPE html>
2
- <html>
3
- <head>
4
- <meta charset="UTF-8">
5
- <title>Tray Test Instructions</title>
6
- <style>
7
- body {
8
- padding: 20px;
9
- font-family: system-ui, -apple-system, sans-serif;
10
- }
11
- .instructions-box {
12
- background: #e3f2fd;
13
- padding: 15px;
14
- border-radius: 8px;
15
- margin: 20px 0;
16
- }
17
- .instructions-box ol {
18
- margin: 10px 0;
19
- padding-left: 20px;
20
- }
21
- .instructions-box li {
22
- margin: 5px 0;
23
- }
24
- #tray-events {
25
- background: #f0f0f0;
26
- padding: 15px;
27
- border-radius: 8px;
28
- min-height: 100px;
29
- }
30
- .event-item {
31
- margin: 5px 0;
32
- }
33
- </style>
34
- </head>
35
- <body>
36
- <h2>System Tray Test</h2>
37
- <p><strong>Look for the tray icon in your system tray/menu bar</strong></p>
38
-
39
- <div class="instructions-box">
40
- <h3>Instructions:</h3>
41
- <ol>
42
- <li>Find the test tray icon (usually in top-right on macOS, bottom-right on Windows)</li>
43
- <li>Click the tray icon</li>
44
- <li>Click "Test Item 1" and "Test Item 2"</li>
45
- <li>Try the submenu items</li>
46
- <li>When done testing, click "Mark Tray Test as Passed" in the tray menu</li>
47
- </ol>
48
- </div>
49
-
50
- <div>
51
- <h3>Tray Events:</h3>
52
- <div id="tray-events">
53
- No events yet - try clicking tray menu items...
54
- </div>
55
- </div>
56
- </body>
57
- </html>
@@ -1,114 +0,0 @@
1
- <!DOCTYPE html>
2
- <html>
3
- <head>
4
- <meta charset="UTF-8">
5
- <title>WebView Mask Test</title>
6
- <script src="views://webviewtag/index.js"></script>
7
- <style>
8
- body {
9
- height: 2000px;
10
- padding: 20px;
11
- background: linear-gradient(to bottom, white, #e0e0e0);
12
- font-family: system-ui, -apple-system, sans-serif;
13
- }
14
- h2 {
15
- color: #333;
16
- }
17
- .instructions {
18
- font-size: 16px;
19
- line-height: 1.5;
20
- }
21
- .spacer {
22
- height: 600px;
23
- display: flex;
24
- align-items: center;
25
- justify-content: center;
26
- background: rgba(255, 255, 255, 0.8);
27
- border: 2px dashed #999;
28
- border-radius: 8px;
29
- margin: 20px 0;
30
- }
31
- electrobun-webview {
32
- width: 100%;
33
- height: 400px;
34
- border: 2px solid #666;
35
- display: block;
36
- }
37
- </style>
38
- </head>
39
- <body>
40
- <script>
41
- function addMask() {
42
- const webview = document.querySelector('electrobun-webview');
43
- if (webview) {
44
- webview.addMaskSelector('#overlay-button');
45
- console.log('Added mask selector for #overlay-button');
46
- }
47
- }
48
-
49
- function removeMask() {
50
- const webview = document.querySelector('electrobun-webview');
51
- if (webview) {
52
- webview.removeMaskSelector('#overlay-button');
53
- console.log('Removed mask selector for #overlay-button');
54
- }
55
- }
56
- </script>
57
- <h2>WebView Mask Layer Test</h2>
58
- <p class="instructions">
59
- <strong>Instructions:</strong><br>
60
- 1. Scroll down to see the WebView below<br>
61
- 2. Continue scrolling up and down<br>
62
- 3. Watch the RED button - it should ALWAYS stay on top
63
- </p>
64
-
65
- <div style="margin-top: 300px; position: relative; border: 3px dashed #666; padding: 20px;">
66
- <h3>WebView with Overlay Test</h3>
67
- <div style="margin-bottom: 10px;">
68
- <button onclick="addMask()" style="padding: 8px 16px; margin-right: 10px; background: #4CAF50; color: white; border: none; border-radius: 4px; cursor: pointer;">
69
- Add Mask
70
- </button>
71
- <button onclick="removeMask()" style="padding: 8px 16px; background: #f44336; color: white; border: none; border-radius: 4px; cursor: pointer;">
72
- Remove Mask
73
- </button>
74
- </div>
75
- <electrobun-webview
76
- src="https://electrobun.dev"
77
- renderer="cef"
78
- partition=""
79
- masks="#overlay-button"
80
- style="width: 600px; height: 350px; border: 2px solid blue;">
81
- </electrobun-webview>
82
-
83
- <!-- Critical: This button MUST stay on top -->
84
- <button id="overlay-button" style="
85
- position: absolute;
86
- top: 80px;
87
- left: 350px;
88
- padding: 15px 30px;
89
- background: #ff0000;
90
- color: white;
91
- font-size: 18px;
92
- font-weight: bold;
93
- z-index: 9999;
94
- border: 3px solid #cc0000;
95
- border-radius: 8px;
96
- cursor: pointer;
97
- box-shadow: 0 4px 8px rgba(0,0,0,0.3);
98
- " onclick="this.style.background = this.style.background === 'green' ? '#ff0000' : 'green'">
99
- I MUST STAY ON TOP!<br>
100
- <small>Click me to change color</small>
101
- </button>
102
- </div>
103
-
104
- <div style="margin-top: 200px; padding: 20px; background: #f9f9f9; border: 2px solid #ddd;">
105
- <h3>Keep scrolling...</h3>
106
- <p>The red button above should remain visible above the WebView at all times.</p>
107
- <p>If it disappears behind the WebView content, that's a mask layer bug.</p>
108
- </div>
109
-
110
- <div style="margin-top: 200px;">
111
- <p>End of content - scroll back up to test more</p>
112
- </div>
113
- </body>
114
- </html>
@@ -1,36 +0,0 @@
1
- <!DOCTYPE html>
2
- <html>
3
- <head>
4
- <meta charset="UTF-8">
5
- <title>WebView Navigation Test</title>
6
- <script src="views://webviewtag/index.js"></script>
7
- <style>
8
- body {
9
- padding: 20px;
10
- font-family: system-ui, -apple-system, sans-serif;
11
- }
12
- #nav-events {
13
- background: #f0f0f0;
14
- padding: 10px;
15
- border-radius: 4px;
16
- min-height: 50px;
17
- margin-bottom: 20px;
18
- }
19
- electrobun-webview {
20
- width: 100%;
21
- height: 400px;
22
- border: 2px solid #666;
23
- display: block;
24
- }
25
- </style>
26
- </head>
27
- <body>
28
- <h2>WebView Navigation Test</h2>
29
- <div>
30
- <strong>Navigation Events:</strong>
31
- <div id="nav-events">Waiting for navigation...</div>
32
- </div>
33
-
34
- <electrobun-webview src="https://electrobun.dev"></electrobun-webview>
35
- </body>
36
- </html>
@@ -1,17 +0,0 @@
1
- <!DOCTYPE html>
2
- <html>
3
- <head>
4
- <meta charset="UTF-8">
5
- <title>Test Window</title>
6
- <style>
7
- body {
8
- font-family: system-ui, -apple-system, sans-serif;
9
- padding: 20px;
10
- }
11
- </style>
12
- </head>
13
- <body>
14
- <h2>Test Window Created!</h2>
15
- <p>This window should appear and auto-close.</p>
16
- </body>
17
- </html>
@@ -1,29 +0,0 @@
1
- <!DOCTYPE html>
2
- <html>
3
- <head>
4
- <meta charset="UTF-8">
5
- <title>Window Events Test</title>
6
- <style>
7
- body {
8
- font-family: system-ui, -apple-system, sans-serif;
9
- padding: 20px;
10
- }
11
- #status {
12
- margin-top: 20px;
13
- padding: 15px;
14
- background: #f0f0f0;
15
- border-radius: 8px;
16
- }
17
- </style>
18
- </head>
19
- <body>
20
- <h2>Window Event Test</h2>
21
- <p><strong>Try moving this window by dragging the title bar</strong></p>
22
- <p><strong>Try resizing this window by dragging edges/corners</strong></p>
23
- <div id="status">
24
- Events detected:<br>
25
- <div id="events"></div>
26
- </div>
27
- <p style="margin-top: 20px; color: #666;">Close this window manually to complete the test</p>
28
- </body>
29
- </html>