electrobun 0.5.0-beta.0 → 0.7.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 (80) hide show
  1. package/{templates/multitab-browser/bun.lock → bun.lock} +20 -13
  2. package/dist/api/bun/core/BrowserView.ts +5 -1
  3. package/dist/api/bun/events/webviewEvents.ts +8 -0
  4. package/dist/api/bun/proc/native.ts +95 -21
  5. package/package.json +14 -16
  6. package/BETA_RELEASE.md +0 -67
  7. package/BUILD.md +0 -90
  8. package/LICENSE +0 -21
  9. package/README.md +0 -102
  10. package/debug.js +0 -5
  11. package/templates/hello-world/README.md +0 -57
  12. package/templates/hello-world/bun.lock +0 -225
  13. package/templates/hello-world/electrobun.config.ts +0 -28
  14. package/templates/hello-world/package.json +0 -16
  15. package/templates/hello-world/src/bun/index.ts +0 -15
  16. package/templates/hello-world/src/mainview/index.css +0 -124
  17. package/templates/hello-world/src/mainview/index.html +0 -46
  18. package/templates/hello-world/src/mainview/index.ts +0 -1
  19. package/templates/interactive-playground/README.md +0 -26
  20. package/templates/interactive-playground/assets/tray-icon.png +0 -0
  21. package/templates/interactive-playground/electrobun.config.ts +0 -36
  22. package/templates/interactive-playground/package-lock.json +0 -1112
  23. package/templates/interactive-playground/package.json +0 -15
  24. package/templates/interactive-playground/src/bun/demos/files.ts +0 -70
  25. package/templates/interactive-playground/src/bun/demos/menus.ts +0 -139
  26. package/templates/interactive-playground/src/bun/demos/rpc.ts +0 -83
  27. package/templates/interactive-playground/src/bun/demos/system.ts +0 -72
  28. package/templates/interactive-playground/src/bun/demos/updates.ts +0 -105
  29. package/templates/interactive-playground/src/bun/demos/windows.ts +0 -90
  30. package/templates/interactive-playground/src/bun/index.ts +0 -124
  31. package/templates/interactive-playground/src/bun/types/rpc.ts +0 -109
  32. package/templates/interactive-playground/src/mainview/components/EventLog.ts +0 -107
  33. package/templates/interactive-playground/src/mainview/components/Sidebar.ts +0 -65
  34. package/templates/interactive-playground/src/mainview/components/Toast.ts +0 -57
  35. package/templates/interactive-playground/src/mainview/demos/FileDemo.ts +0 -211
  36. package/templates/interactive-playground/src/mainview/demos/MenuDemo.ts +0 -102
  37. package/templates/interactive-playground/src/mainview/demos/RPCDemo.ts +0 -229
  38. package/templates/interactive-playground/src/mainview/demos/TrayDemo.ts +0 -132
  39. package/templates/interactive-playground/src/mainview/demos/WebViewDemo.ts +0 -465
  40. package/templates/interactive-playground/src/mainview/demos/WindowDemo.ts +0 -207
  41. package/templates/interactive-playground/src/mainview/index.css +0 -538
  42. package/templates/interactive-playground/src/mainview/index.html +0 -103
  43. package/templates/interactive-playground/src/mainview/index.ts +0 -238
  44. package/templates/multitab-browser/README.md +0 -34
  45. package/templates/multitab-browser/electrobun.config.ts +0 -32
  46. package/templates/multitab-browser/package-lock.json +0 -20
  47. package/templates/multitab-browser/package.json +0 -12
  48. package/templates/multitab-browser/src/bun/index.ts +0 -144
  49. package/templates/multitab-browser/src/bun/tabManager.ts +0 -200
  50. package/templates/multitab-browser/src/bun/types/rpc.ts +0 -78
  51. package/templates/multitab-browser/src/mainview/index.css +0 -487
  52. package/templates/multitab-browser/src/mainview/index.html +0 -94
  53. package/templates/multitab-browser/src/mainview/index.ts +0 -634
  54. package/templates/photo-booth/README.md +0 -108
  55. package/templates/photo-booth/bun.lock +0 -239
  56. package/templates/photo-booth/electrobun.config.ts +0 -32
  57. package/templates/photo-booth/package.json +0 -17
  58. package/templates/photo-booth/src/bun/index.ts +0 -92
  59. package/templates/photo-booth/src/mainview/index.css +0 -465
  60. package/templates/photo-booth/src/mainview/index.html +0 -124
  61. package/templates/photo-booth/src/mainview/index.ts +0 -499
  62. package/test-new-window-events.ts +0 -26
  63. package/test-new-window.html +0 -75
  64. package/test-npm-install.sh +0 -34
  65. package/tests/bun.lock +0 -14
  66. package/tests/electrobun.config.ts +0 -45
  67. package/tests/package-lock.json +0 -36
  68. package/tests/package.json +0 -13
  69. package/tests/src/bun/index.ts +0 -100
  70. package/tests/src/bun/test-runner.ts +0 -508
  71. package/tests/src/mainview/index.html +0 -110
  72. package/tests/src/mainview/index.ts +0 -458
  73. package/tests/src/mainview/styles/main.css +0 -451
  74. package/tests/src/testviews/tray-test.html +0 -57
  75. package/tests/src/testviews/webview-mask.html +0 -114
  76. package/tests/src/testviews/webview-navigation.html +0 -36
  77. package/tests/src/testviews/window-create.html +0 -17
  78. package/tests/src/testviews/window-events.html +0 -29
  79. package/tests/src/testviews/window-focus.html +0 -37
  80. 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>