pinokiod 3.40.0 → 3.42.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 (82) hide show
  1. package/kernel/api/browser/index.js +3 -1
  2. package/kernel/api/cloudflare/index.js +3 -3
  3. package/kernel/api/index.js +187 -51
  4. package/kernel/api/loading/index.js +15 -0
  5. package/kernel/api/process/index.js +7 -0
  6. package/kernel/api/shell/index.js +0 -2
  7. package/kernel/bin/browserless.js +22 -0
  8. package/kernel/bin/caddy.js +36 -4
  9. package/kernel/bin/index.js +4 -1
  10. package/kernel/bin/setup.js +38 -5
  11. package/kernel/connect/backend.js +110 -0
  12. package/kernel/connect/config.js +171 -0
  13. package/kernel/connect/index.js +18 -7
  14. package/kernel/connect/providers/huggingface/index.js +98 -0
  15. package/kernel/connect/providers/x/index.js +0 -1
  16. package/kernel/environment.js +91 -19
  17. package/kernel/git.js +46 -3
  18. package/kernel/index.js +119 -39
  19. package/kernel/peer.js +40 -5
  20. package/kernel/plugin.js +3 -2
  21. package/kernel/procs.js +27 -20
  22. package/kernel/prototype.js +30 -16
  23. package/kernel/router/common.js +1 -1
  24. package/kernel/router/connector.js +1 -3
  25. package/kernel/router/index.js +38 -4
  26. package/kernel/router/localhost_home_router.js +5 -1
  27. package/kernel/router/localhost_port_router.js +27 -1
  28. package/kernel/router/localhost_static_router.js +93 -0
  29. package/kernel/router/localhost_variable_router.js +14 -9
  30. package/kernel/router/peer_peer_router.js +3 -0
  31. package/kernel/router/peer_static_router.js +43 -0
  32. package/kernel/router/peer_variable_router.js +15 -14
  33. package/kernel/router/processor.js +26 -1
  34. package/kernel/router/rewriter.js +59 -0
  35. package/kernel/scripts/git/commit +11 -1
  36. package/kernel/shell.js +8 -3
  37. package/kernel/util.js +65 -6
  38. package/package.json +2 -1
  39. package/server/index.js +1048 -970
  40. package/server/public/common.js +382 -1
  41. package/server/public/fscreator.js +0 -1
  42. package/server/public/loading.js +17 -0
  43. package/server/public/notifyinput.js +0 -1
  44. package/server/public/opener.js +4 -2
  45. package/server/public/style.css +310 -11
  46. package/server/socket.js +7 -1
  47. package/server/views/app.ejs +1747 -351
  48. package/server/views/columns.ejs +338 -0
  49. package/server/views/connect/huggingface.ejs +353 -0
  50. package/server/views/connect/index.ejs +410 -0
  51. package/server/views/connect/x.ejs +43 -9
  52. package/server/views/connect.ejs +709 -49
  53. package/server/views/container.ejs +357 -0
  54. package/server/views/d.ejs +251 -62
  55. package/server/views/download.ejs +54 -10
  56. package/server/views/editor.ejs +11 -0
  57. package/server/views/explore.ejs +40 -15
  58. package/server/views/file_explorer.ejs +25 -246
  59. package/server/views/form.ejs +44 -1
  60. package/server/views/frame.ejs +39 -1
  61. package/server/views/github.ejs +48 -11
  62. package/server/views/help.ejs +48 -7
  63. package/server/views/index.ejs +119 -58
  64. package/server/views/index2.ejs +3 -4
  65. package/server/views/init/index.ejs +651 -197
  66. package/server/views/install.ejs +1 -1
  67. package/server/views/mini.ejs +47 -18
  68. package/server/views/net.ejs +199 -67
  69. package/server/views/network.ejs +229 -93
  70. package/server/views/network2.ejs +3 -4
  71. package/server/views/old_network.ejs +3 -3
  72. package/server/views/prototype/index.ejs +48 -11
  73. package/server/views/review.ejs +1005 -0
  74. package/server/views/rows.ejs +341 -0
  75. package/server/views/screenshots.ejs +1020 -0
  76. package/server/views/settings.ejs +160 -23
  77. package/server/views/setup.ejs +49 -7
  78. package/server/views/setup_home.ejs +43 -10
  79. package/server/views/shell.ejs +7 -1
  80. package/server/views/start.ejs +14 -9
  81. package/server/views/terminal.ejs +13 -2
  82. package/server/views/tools.ejs +1015 -0
@@ -0,0 +1,1005 @@
1
+ <html>
2
+ <head>
3
+ <title><%=title%></title>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1" />
6
+ <link href="/css/fontawesome.min.css" rel="stylesheet">
7
+ <link href="/css/solid.min.css" rel="stylesheet">
8
+ <link href="/css/regular.min.css" rel="stylesheet">
9
+ <link href="/css/brands.min.css" rel="stylesheet">
10
+ <link href="/markdown.css" rel="stylesheet"/>
11
+ <link href="/noty.css" rel="stylesheet"/>
12
+ <link href="/filepond.min.css" rel="stylesheet" />
13
+ <link href="/filepond-plugin-image-preview.min.css" rel="stylesheet" />
14
+ <link href="/filepond-plugin-image-edit.min.css" rel="stylesheet" />
15
+ <link href="/style.css" rel="stylesheet"/>
16
+ <script src="/modalinput.js"></script>
17
+ <% if (agent === "electron") { %>
18
+ <link href="/electron.css" rel="stylesheet"/>
19
+ <% } %>
20
+ <style>
21
+ .menu-container {
22
+ overflow: auto;
23
+ }
24
+ body.dark .mode-display {
25
+ background: rgba(255,255,255,0.04);
26
+ color: rgba(255,255,255,0.7);
27
+ }
28
+ .mode-display {
29
+ padding: 5px 10px;
30
+ background: rgba(0,0,0,0.04);
31
+ /*
32
+ text-align: center;
33
+ color: royalblue;
34
+ */
35
+ color: rgba(0, 0, 0, 0.7);
36
+ font-size: 12px;
37
+ font-weight: bold;
38
+ }
39
+ .online {
40
+ width: 10px;
41
+ height: 10px;
42
+ background: yellowgreen;
43
+ border-radius: 10px;
44
+ }
45
+ #menu {
46
+ display: flex;
47
+ }
48
+ #menu i {
49
+ display: block;
50
+ }
51
+ #menu img {
52
+ display: none;
53
+ height: 30px;
54
+ object-fit: contain;
55
+ /*
56
+ border-radius: 20px
57
+ */
58
+ }
59
+ #menu.margin {
60
+ /*
61
+ padding: 5px;
62
+ */
63
+ }
64
+ #menu.margin i {
65
+ display: none;
66
+ }
67
+ #menu.margin img {
68
+ display: block;
69
+ }
70
+ html, body {
71
+ width: 100%;
72
+ height: 100%;
73
+ margin: 0;
74
+ }
75
+ body {
76
+ display: flex;
77
+ flex-direction: column;
78
+ }
79
+ .menu {
80
+ overflow: auto;
81
+ }
82
+ body.dark .m {
83
+ border-top: 1px solid rgba(255,255,255,0.04);
84
+ }
85
+ .m {
86
+ border-top: 1px solid rgba(0,0,0,0.04);
87
+ }
88
+ .container {
89
+ position: relative;
90
+ display: flex;
91
+ flex-direction: column;
92
+ flex-grow: 1;
93
+ }
94
+ body aside {
95
+ /*
96
+ background: var(--light-bg);
97
+ */
98
+ position: relative;
99
+ border-right: 1px solid rgba(0,0,0,0.04);
100
+ height: 100%;
101
+ display: flex;
102
+ flex-direction: column;
103
+ /*
104
+ padding-bottom: 100px;
105
+ */
106
+ box-sizing: border-box;
107
+ }
108
+ body.dark aside {
109
+ background: var(--dark-bg);
110
+ border-right: 1px solid rgba(255,255,255,0.04);
111
+ }
112
+ /*
113
+ aside #collapse {
114
+ text-align: center;
115
+ padding: 5px;
116
+ }
117
+ */
118
+ aside {
119
+ /*
120
+ display: flex;
121
+ flex-direction: column;
122
+ */
123
+ width: 200px;
124
+ overflow: auto;
125
+ box-sizing: border-box;
126
+ flex-shrink: 0;
127
+ }
128
+ main {
129
+ flex-grow: 1;
130
+ min-height: 0;
131
+ /*
132
+ height: 100%;
133
+ */
134
+ }
135
+ main iframe[name^=http] {
136
+ background: white;
137
+ }
138
+ main iframe {
139
+ width: 100%;
140
+ height: 100%;
141
+ border: none;
142
+ }
143
+ /*
144
+ .header-item.indent {
145
+ padding-left: 23px !important;
146
+ }
147
+ */
148
+ .header-item {
149
+ /*
150
+ display: block;
151
+ */
152
+ display: flex;
153
+ font-size: 12px;
154
+ text-decoration: none;
155
+ align-items: center;
156
+ border-radius: 0;
157
+ cursor: pointer;
158
+ }
159
+ .header-item.selected {
160
+ }
161
+ .header-item .btn2 {
162
+ margin: 0;
163
+ border: none;
164
+ /*
165
+ color: var(--light-color);
166
+ */
167
+ }
168
+ body.dark .header-item .btn2 {
169
+ /*
170
+ color: var(--darkt-color);
171
+ */
172
+ }
173
+ .bar .btn2 i {
174
+ display: block;
175
+ margin-right: 5px;
176
+ }
177
+ .header-item > * {
178
+ display: block;
179
+ }
180
+ .header-item img {
181
+ /*
182
+ width: 60px;
183
+ */
184
+ height: 80px;
185
+ width: 80px;
186
+ /*
187
+ border-radius: 10px;
188
+ */
189
+ object-fit: contain;
190
+ display: inline-block;
191
+ /*
192
+ border-radius: 30px;
193
+ */
194
+ }
195
+ body.dark .header-item.btn {
196
+ /*
197
+ color: white;
198
+ */
199
+ color: var(--dark-color);
200
+ }
201
+ .header-item.btn {
202
+ /*
203
+ padding: 5px 8px;
204
+ */
205
+ padding: 7px;
206
+ background: none !important;
207
+ color: var(--light-color);
208
+ }
209
+ .logo {
210
+ font-size: 20px;
211
+ padding: 20px;
212
+ }
213
+ body .logo {
214
+ color: var(--light-color);
215
+ }
216
+ body.dark .logo {
217
+ color: var(--dark-btn-color);
218
+ /*
219
+ color: white;
220
+ */
221
+ }
222
+ body #new-window {
223
+ color: var(--light-color);
224
+ }
225
+ body.dark #new-window {
226
+ color: var(--dark-btn-color);
227
+ /*
228
+ color: white;
229
+ */
230
+ }
231
+ /*
232
+ .dark .app-info {
233
+ background: rgba(255,255,255,0.04);
234
+ }
235
+ */
236
+ .app-info-card img {
237
+ margin: 10px;
238
+ }
239
+ .app-info {
240
+
241
+ /*
242
+ display: flex;
243
+ */
244
+ box-sizing: border-box;
245
+ text-align: center;;
246
+ align-items: center;
247
+ /*
248
+ background: rgba(0,0,0,0.04);
249
+ */
250
+ }
251
+ .folderbuttons {
252
+ display: grid;
253
+ grid-template-columns: repeat(4, 1fr);
254
+ gap: 0px;
255
+ }
256
+ .header-btns {
257
+ padding: 0 !important;
258
+ }
259
+ body.dark .header-btns {
260
+ border-top: 1px solid rgba(255,255,255,0.04);
261
+ }
262
+ .app-info-edit {
263
+ text-decoration: none;
264
+ color: black;
265
+ border-bottom: 1px solid rgba(255,255,255,0.1);
266
+ }
267
+ /*
268
+ .dark .app-info-edit {
269
+ border-top: 1px solid rgba(255,255,255,0.2);
270
+ border-bottom: 1px solid rgba(255,255,255,0.2);
271
+ }
272
+ */
273
+ .dark .app-info-edit:hover {
274
+ background: rgba(0,0,0,0.2);
275
+ }
276
+ .app-info-edit:hover{
277
+ background: rgba(0,0,0,0.05);
278
+ }
279
+ .app-info-edit i{
280
+ display: block;
281
+ }
282
+ .app-info-edit, .app-info-copy {
283
+ font-weight: normal;
284
+
285
+ /*
286
+ border-radius: 20px;
287
+ */
288
+ font-size: 12px;
289
+ padding: 15px 5px;
290
+ /*
291
+ margin: 10px 20px 0;
292
+ */
293
+ }
294
+ .app-info-card {
295
+ /*
296
+ padding: 10px !important;
297
+ */
298
+ display: flex;
299
+ text-align: left;
300
+ }
301
+ .app-info .btn {
302
+ width: 100%;
303
+ box-sizing: border-box;
304
+ }
305
+ body.dark .app-info .mode-section {
306
+ background: rgba(0,0,0,0.4);
307
+ }
308
+ .app-info .mode-section {
309
+ background: rgba(0,0,0,0.06);
310
+ padding: 10px;
311
+ box-sizing: border-box;
312
+ width: 100%;
313
+ text-align: left;
314
+ }
315
+ .app-info .mode-section .desc {
316
+ font-weight: normal;
317
+ opacity: 0.7;
318
+ margin-bottom: 10px;
319
+ }
320
+ .app-info .mode-section h3 {
321
+ font-size: 18px;
322
+ line-height: 26px;
323
+ margin: 0;
324
+ }
325
+ body.dark .app-info .mode-section .btn {
326
+ border: 1px solid rgba(255,255,255,0.1);
327
+ }
328
+ .app-info .mode-section .btn {
329
+ text-align: center;
330
+ }
331
+ .app-info-card > * {
332
+ /*
333
+ padding: 5px;
334
+ */
335
+ color: var(--light-color);
336
+ text-decoration: none;
337
+ box-sizing: border-box;
338
+ }
339
+ body.dark .app-info-card > * {
340
+ color: var(--dark-color);
341
+ }
342
+ .app-info-container {
343
+ padding: 10px 5px;
344
+ min-width: 0;
345
+ text-overflow: ellipsis;
346
+ }
347
+ .app-info-title {
348
+ width: 100%;
349
+ font-weight: bold;
350
+ font-size: 16px;
351
+ /*
352
+ padding: 15px 0;
353
+ */
354
+ }
355
+ .app-info-description.collapsed {
356
+ display: -webkit-box;
357
+ -webkit-line-clamp: 3;
358
+ -webkit-box-orient: vertical;
359
+
360
+ display: box; /* For the future */
361
+ line-clamp: 3; /* For future spec */
362
+ box-orient: vertical;
363
+
364
+ overflow: hidden;
365
+ }
366
+ .app-info-description {
367
+ margin-top: 5px;
368
+ word-wrap: break-word;
369
+ width: 100%;
370
+ opacity: 0.7;
371
+ }
372
+ .footer {
373
+ /*
374
+ display: flex;
375
+ */
376
+ display: grid;
377
+ grid-template-columns: repeat(4, 1fr);
378
+ }
379
+ .footer > * {
380
+ padding: 10px !important;
381
+ display: block;
382
+ box-sizing: border-box;
383
+ font-size: 12px !important;
384
+ text-align: center;
385
+ }
386
+ .footer i {
387
+ margin: 0 !important;
388
+ padding: 5px;
389
+ }
390
+ .footer a {
391
+ font-size: 14px;
392
+ }
393
+ body .footer {
394
+ border-bottom: 1px solid rgba(0,0,0,0.04);
395
+ }
396
+ body.dark .footer {
397
+ border-bottom: 1px solid rgba(255,255,255,0.04);
398
+ }
399
+ body.dark .header-item.cursor {
400
+ background: rgba(0,0,0, 0.2) !important;
401
+ }
402
+ .header-item.cursor {
403
+ background: rgba(0,0,100, 0.03) !important;
404
+ /*
405
+ border-left: 5px solid gold;
406
+ */
407
+ }
408
+ .frame-link {
409
+ cursor: pointer;
410
+ }
411
+ body .frame-link.selected {
412
+ /*
413
+ border-right: 10px solid gold;
414
+ */
415
+ /*
416
+ background: black !important;
417
+ color: white;
418
+ */
419
+ background: rgba(0,0,0,0.06) !important;
420
+ /*
421
+ background: rgba(0,0,100,0.06) !important;
422
+ */
423
+ }
424
+ .frame-link.selected .del {
425
+ color: white;
426
+ }
427
+ body.dark .frame-link.selected {
428
+ /*
429
+ background: rgba(0,0,0,0.7) !important;
430
+ */
431
+ background: rgba(255,255,255,0.04) !important;
432
+ }
433
+ .frame-link .loader {
434
+ /*
435
+ padding: 5px;
436
+ */
437
+ }
438
+ .loader {
439
+ flex-shrink: 0;
440
+ }
441
+ .loader .btn:hover {
442
+ color: royalblue;
443
+ border-color: royalblue;
444
+ }
445
+ .loader .btn {
446
+ padding: 4px 8px;
447
+ /*
448
+ border: 1px solid rgba(255,255,255,0.3);
449
+ */
450
+ }
451
+ .frame-link .tab {
452
+ flex-grow: 1;
453
+ /*
454
+ width: 100%;
455
+ */
456
+ word-break: break-word;
457
+ padding-right: 10px;
458
+ /*
459
+ margin-right: 10px;
460
+ */
461
+ }
462
+ .frame-link .tab .flexible {
463
+ min-width: 5px;
464
+ }
465
+ .frame-link .tab .display {
466
+ word-break: break-word;
467
+ }
468
+ body.dark .grid-btns {
469
+ border-top: 1px solid rgba(255,255,255,0.04);
470
+ border-bottom: 1px solid rgba(255,255,255,0.04);
471
+ }
472
+ .grid-btns {
473
+ border-top: 1px solid rgba(0,0,0,0.04);
474
+ border-bottom: 1px solid rgba(0,0,0,0.04);
475
+ display: grid;
476
+ grid-template-columns: repeat(2, 1fr);
477
+ grid-template-rows: repeat(2, 1fr);
478
+ /*
479
+ grid-template-columns: repeat(3, 1fr);
480
+ grid-template-rows: repeat(1, 1fr);
481
+ */
482
+ box-sizing: border-box;
483
+ }
484
+ .grid-btns .btn2 {
485
+ padding: 10px 10px;
486
+ color: var(--light-color);
487
+ border-radius: 0;
488
+ cursor: pointer;
489
+ font-size: 11px;
490
+ }
491
+ body.dark .grid-btns .btn2 {
492
+ /*
493
+ color: white;
494
+ */
495
+ color: var(--dark-btn-color);
496
+ }
497
+ .footer {
498
+ width: 100%;
499
+ }
500
+ .tab {
501
+ flex-grow: 1;
502
+ display: flex;
503
+ align-items: center;
504
+ padding-right: 10px;
505
+ }
506
+ .label i {
507
+ margin-right: 10px;
508
+ }
509
+ .tab i {
510
+ margin-right: 6px;
511
+ font-size: 14px;
512
+ padding: 2px;
513
+ border-radius: 4px;
514
+ }
515
+ body.dark aside .btn {
516
+ background: rgba(255,255,255,0.05);
517
+ }
518
+ .fa-circle {
519
+ color: yellowgreen;
520
+ margin-right: 10px;
521
+ }
522
+ .dynamic .submenu .tab i {
523
+ display: flex;
524
+ justify-content: center;
525
+ align-items: center;
526
+ font-size: 15px;
527
+ width: 20px;
528
+ height: 20px;
529
+ padding: 0;
530
+ }
531
+ /*
532
+ body.dark .dynamic .submenu {
533
+ border-left: 5px solid white;
534
+ }
535
+ */
536
+ .dynamic .submenu {
537
+ margin-left: 0px;
538
+ /*
539
+ border-left: 5px solid black;
540
+ */
541
+ }
542
+ .menu-item-image {
543
+ width: 20px !important;
544
+ height: 20px !important;
545
+ margin-right: 6px;
546
+ background: white;
547
+ /*
548
+ padding: 2px;
549
+ */
550
+ border-radius: 2px;
551
+ }
552
+ .temp-menu {
553
+ /*
554
+ border-top: 1px solid rgba(0,0,0,0.1);
555
+ */
556
+ }
557
+ .temp-menu .del i {
558
+ margin: 0;
559
+ }
560
+ #delete {
561
+ color: brown;
562
+ }
563
+ body .footer {
564
+ }
565
+ body.dark nav {
566
+ /*
567
+ border-bottom: 1px solid rgba(255,255,255,0.04);
568
+ */
569
+ border-top: 1px solid rgba(255,255,255,0.04);
570
+ }
571
+ /*
572
+ .container:hover nav {
573
+ display: block;
574
+ }
575
+ */
576
+ nav {
577
+ /*
578
+ overflow: hidden;
579
+ max-height: 0;
580
+ transition: max-height 0.4s ease-out;
581
+ display: none;
582
+ */
583
+
584
+ background: white;
585
+ /*
586
+ position: absolute;
587
+ bottom: 0;
588
+ left: 0;
589
+ right: 0;
590
+ */
591
+ /*
592
+ padding: 5px;
593
+ */
594
+ padding: 0;
595
+ cursor: grab !important;
596
+ -webkit-app-region: drag !important;
597
+ /*
598
+ border-bottom: 1px solid rgba(0,0,0,0.04);
599
+ */
600
+ border-top: 1px solid rgba(0,0,0,0.04);
601
+ box-sizing: border-box;
602
+ }
603
+ body.dark nav .btn2 {
604
+ border-right: 1px solid rgba(255,255,255,0.04);
605
+ }
606
+ nav .btn2 {
607
+ padding: 15px;
608
+ font-size: 12px;
609
+ /*
610
+ width: 70px;
611
+ */
612
+ box-sizing: border-box;
613
+ border-right: 1px solid rgba(0,0,0,0.04);
614
+ border-radius: 0;
615
+ text-transform: lowercase;
616
+ flex-shrink: 0;
617
+
618
+ display: flex;
619
+ /*
620
+ flex-direction: column;
621
+ */
622
+ justify-content: center;
623
+ align-items: center;
624
+ }
625
+ nav .logo {
626
+ font-size: 14px;
627
+ padding: 10px;
628
+ }
629
+ .error-message .btn i {
630
+ margin-right: 10px;
631
+ }
632
+ .error-message .btn {
633
+ margin-top: 20px;
634
+ align-items: center;
635
+ display: flex;
636
+ letter-spacing: 0px;
637
+ background: black;
638
+ color: yellow;
639
+ font-size: 20px;
640
+ padding: 10px 30px;
641
+ }
642
+ .error-message > div {
643
+ width: 500px;
644
+ }
645
+ .error-message {
646
+ width: 100%;
647
+ /*
648
+ background: royalblue !important;
649
+ */
650
+ color: white;
651
+ display: flex;
652
+ justify-content: center;
653
+ align-items: center;
654
+ /*
655
+ display: flex;
656
+ flex-direction: column;
657
+ justify-content: center;
658
+ align-items: center;
659
+ font-weight: bold;
660
+ background: yellow !important;
661
+ flex-grow: 1;
662
+ padding: 0 50px;
663
+ font-size: 40px;
664
+ line-height: 40px;
665
+ color: black;
666
+ letter-spacing: -2px;
667
+ */
668
+ }
669
+ body.dark #location {
670
+ color: white;
671
+ background: rgba(255,255,255,0.03);
672
+ }
673
+ #location {
674
+ background: rgba(0,0,0,0.04);
675
+ padding: 10px;
676
+ margin: 0 0 0 10px;
677
+ font-size: 12px;
678
+ font-family: verdana;
679
+ box-sizing: border-box;
680
+ flex-grow: 1;
681
+ border: none;
682
+ outline: none;
683
+ }
684
+ body.dark #open-location {
685
+ background: rgba(255,255,255,0.03);
686
+ color: white;
687
+ }
688
+ #open-location {
689
+ border: none;
690
+ color: black;
691
+ background: rgba(0,0,0,0.04);
692
+ padding: 10px;
693
+ margin-right: 10px;
694
+ font-size: 14px;
695
+ }
696
+ .bar {
697
+ -webkit-app-region: no-drag !important;
698
+ cursor: auto;
699
+ display: flex;
700
+ align-items: stretch;
701
+ width: 100%;
702
+ flex-wrap: wrap;
703
+ }
704
+ body.dark .header-item.cursor.header-top {
705
+ background: none !important;
706
+ }
707
+ .header-item.cursor.header-top {
708
+ background: none !important;
709
+ }
710
+ .header-menu {
711
+ position: sticky;
712
+ top: 0;
713
+ background: white;
714
+ border-bottom: 1px solid rgba(0, 0,0 ,0.04);
715
+ }
716
+ body.dark .header-menu {
717
+ border-bottom: 1px solid rgba(255,255,255,0.04);
718
+ background: var(--dark-bg);
719
+ }
720
+ .header-item.header-top {
721
+ display: block;
722
+ }
723
+ #new-tab:hover {
724
+ background: rgba(0,0,0,0.06) !important;
725
+ color: rgb(200,0,0) !important;
726
+ }
727
+
728
+ #new-tab {
729
+ cursor: pointer !important;
730
+ justify-content: center;
731
+ /*
732
+ border-top: 1px solid rgba(0,0,0,0.04);
733
+ */
734
+ }
735
+
736
+ body.dark #new-tab {
737
+ /*
738
+ border-top: 1px solid rgba(255,255,255,0.04);
739
+ */
740
+ }
741
+ /*
742
+ body.dark .submenu {
743
+ border-left: 1px solid rgba(255,255,255,0.3);
744
+ }
745
+ */
746
+ .submenu {
747
+ /*
748
+ border-left: 1px solid black;
749
+ */
750
+ margin-left: 15px;
751
+ box-sizing: border-box;
752
+ }
753
+ #menu-mobile {
754
+ display: none;
755
+ }
756
+ .tabmenu .label {
757
+ padding: 10px;
758
+ border-bottom: 1px solid rgba(255,255,255,0.04);
759
+ text-transform: uppercase;
760
+ font-size: 12px;
761
+ font-weight: bold;
762
+ }
763
+ .disk-usage {
764
+ flex-grow: 1;
765
+ font-weight: bold;
766
+ text-align: right;
767
+ }
768
+ .disk-usage i {
769
+ margin-right: 5px;
770
+ font-size: 16px !important;
771
+ }
772
+
773
+
774
+ .custom-label {
775
+ position: absolute;
776
+ top: 0;
777
+ left: 0;
778
+ right: 0;
779
+ bottom: 0;
780
+ display: flex;
781
+ align-items: center;
782
+ justify-content: center;
783
+ pointer-events: none; /* Let clicks fall through to FilePond */
784
+ font-size: 14px;
785
+ color: rgba(0, 0, 0, 0.5);
786
+ z-index: 5;
787
+ }
788
+ .appcanvas {
789
+ overflow: auto;
790
+ display: flex;
791
+ flex-grow: 1;
792
+ /*
793
+ border-top: 1px solid rgba(0, 0,0 ,0.04);
794
+ */
795
+ }
796
+ /*
797
+ body.dark .appcanvas {
798
+ border-top: 1px solid rgba(255,255,255,0.04);
799
+ }
800
+
801
+ */
802
+ .appcanvas iframe {
803
+ border: none;
804
+ background: white;
805
+ width: 100%;
806
+ height: 100%;
807
+ }
808
+ .filler {
809
+ display: none;
810
+ }
811
+ body .app-icon img {
812
+ height: 35px;
813
+ border-radius: 35px;
814
+ cursor: pointer;
815
+ }
816
+ body .app-icon {
817
+ display: none;
818
+ margin-right: 10px;
819
+ }
820
+ body.minimized .app-icon {
821
+ display: block;
822
+ }
823
+ body.minimized aside {
824
+ display: none;
825
+ }
826
+ .top-menu {
827
+ padding: 10px;
828
+ text-align: center;
829
+ }
830
+ .top-menu .btn2 {
831
+ padding: 3px 10px;
832
+ border-radius: 3px;
833
+ }
834
+ body.dark .top-menu .btn2.selected {
835
+ background: white;
836
+ color: black;
837
+ }
838
+ .top-menu .btn2.selected {
839
+ background: black;
840
+ color: white;
841
+ }
842
+ body.dark.minimized #collapse {
843
+ color: white;
844
+ }
845
+ body.minimized #collapse {
846
+ border: none !important;
847
+ color: black;
848
+ }
849
+ #collapse {
850
+ border-bottom: 5px solid royalblue;
851
+ color: royalblue;
852
+ border-radius: 0;
853
+ }
854
+ #browserview-container {
855
+ flex-grow: 1;
856
+ position: relative;
857
+ }
858
+
859
+ @media only screen and (max-width: 1000px) {
860
+ .url-bar {
861
+ display: none;
862
+ }
863
+ .filler {
864
+ display: block;
865
+ }
866
+ }
867
+
868
+ @media only screen and (max-width: 480px) {
869
+ nav .btn2 {
870
+ width: auto !important;
871
+ min-width: 40px;
872
+ border-right: none;
873
+ flex-direction: column;
874
+ }
875
+ .app-info {
876
+ display: flex;
877
+ padding: 10px;
878
+ }
879
+ .app-info img {
880
+ width: 60px;
881
+ height: 60px;
882
+ }
883
+
884
+ .header-item {
885
+ font-size: 16px;
886
+ }
887
+ aside.active {
888
+ width: 100%;
889
+ z-index: 10000000;
890
+ }
891
+ aside:not(.active) {
892
+ display: none;
893
+ }
894
+ .container {
895
+ display: none;
896
+ }
897
+ .container.active {
898
+ display: block;
899
+ position: absolute;
900
+ z-index: 10000000;
901
+ width: 100%;
902
+ height: 100%;
903
+ }
904
+ /*
905
+ .grid-btns {
906
+ display: none;
907
+ }
908
+ */
909
+ #menu {
910
+ display: none;
911
+ }
912
+ #menu-mobile {
913
+ display: flex;
914
+ }
915
+ }
916
+ </style>
917
+ <link href="/app.css" rel="stylesheet"/>
918
+ <script src="/hotkeys.min.js"></script>
919
+ <script src="/sweetalert2.js"></script>
920
+ <script src="/nav.js"></script>
921
+ <script src="/common.js"></script>
922
+ <script src="/opener.js"></script>
923
+ <script src="/report.js"></script>
924
+ <script src="/normalize.js"></script>
925
+ <script src="/Socket.js"></script>
926
+ <script src="/noty.js"></script>
927
+ <script src="/notyq.js"></script>
928
+ <script src="/filepond-plugin-file-validate-type.min.js"></script>
929
+ <script src="/filepond-plugin-image-exif-orientation.min.js"></script>
930
+ <script src="/filepond-plugin-image-preview.min.js"></script>
931
+ <script src="/filepond-plugin-image-edit.min.js"></script>
932
+ <script src="/filepond-plugin-image-crop.min.js"></script>
933
+ <script src="/filepond-plugin-image-resize.min.js"></script>
934
+ <script src="/filepond-plugin-image-transform.min.js"></script>
935
+ <script src="/filepond.min.js"></script>
936
+ <script src="/fseditor.js"></script>
937
+ <script src="/popper.min.js"></script>
938
+ <script src="/tippy-bundle.umd.min.js"></script>
939
+ </head>
940
+ <body class='<%=theme%>' data-platform="<%=platform%>" data-agent="<%=agent%>">
941
+ <header class='navheader grabbable'>
942
+ <h1>
943
+ <a class='home' href="/">
944
+ <img class='icon' src="/pinokio-black.png">
945
+ </a>
946
+ <button class='btn2' id='back' data-tippy-content="back"><div><i class="fa-solid fa-chevron-left"></i></div></button>
947
+ <button class='btn2' id='forward' data-tippy-content="forward"><div><i class="fa-solid fa-chevron-right"></i></div></button>
948
+ <button class='btn2' id='refresh-page' data-tippy-content="refresh"><div><i class="fa-solid fa-rotate-right"></i></div></button>
949
+ <button class='btn2' id='screenshot' data-tippy-content="take a screenshot"><i class="fa-solid fa-camera"></i></button>
950
+ <div class='mode-selector'>
951
+ <a class="btn2 <%=type === 'review' ? 'selected' : ''%>" href="<%=review_tab%>"><div><i class="fa-regular fa-message"></i></div><div>Community</div></a>
952
+ <a class="btn2 <%=type === 'browse' ? 'selected' : ''%>" href="<%=dev_tab%>"><div><i class="fa-solid fa-code"></i></div><div>Dev</div></a>
953
+ <a class="btn2 <%=type === 'run' ? 'selected' : ''%>" href="<%=run_tab%>"><div><i class="fa-solid fa-circle-play"></i></div><div>Run</div></a>
954
+ </div>
955
+ <button class='btn2' id='popout-link' data-tippy-content="open in a web browser"><i class="fa-solid fa-arrow-up-right-from-square"></i></button>
956
+ <a class='btn2' href="/columns" data-tippy-content="split into 2 columns">
957
+ <div><i class="fa-solid fa-table-columns"></i></div>
958
+ </a>
959
+ <a class='btn2' href="/rows" data-tippy-content="split into 2 rows">
960
+ <div><i class="fa-solid fa-table-columns fa-rotate-270"></i></div>
961
+ </a>
962
+ <div class="dropdown btn2">
963
+ <button class='btn2' id='window-management'>
964
+ <div><i class="fa-solid fa-plus"></i></div>
965
+ </button>
966
+ <div class="dropdown-content" id="dropdown-content">
967
+ <button class='btn2' id='clone-win' data-tippy-content="clone this window">
968
+ <div><i class="fa-solid fa-clone"></i><div>clone this window</div></div>
969
+ </button>
970
+ <button id='new-window' data-tippy-content="open a new window" title='open a new window' class='btn2' data-agent="<%=agent%>">
971
+ <div><i class="fa-solid fa-plus"></i><div>new window</div></div>
972
+ </button>
973
+ </div>
974
+ </div>
975
+ <!--
976
+ <div class="dropdown btn2">
977
+ <button class='btn2' id='window-management'>
978
+ <div><i class="fa-regular fa-window-restore"></i></div>
979
+ </button>
980
+ <div class="dropdown-content" id="dropdown-content">
981
+ <button class='btn2' id='clone-win' data-tippy-content="clone this window">
982
+ <div><i class="fa-solid fa-clone"></i><div>clone this window</div></div>
983
+ </button>
984
+ <a class='btn2' href="/columns" data-tippy-content="split into 2 columns">
985
+ <div><i class="fa-solid fa-table-columns"></i><div>split columns</div></div>
986
+ </a>
987
+ <a class='btn2' href="/rows" data-tippy-content="split into 2 rows">
988
+ <div><i class="fa-solid fa-table-columns fa-rotate-270"></i><div>split rows</div></div>
989
+ </a>
990
+ <button id='new-window' data-tippy-content="open a new window" title='open a new window' class='btn2' data-agent="<%=agent%>">
991
+ <div><i class="fa-solid fa-plus"></i><div>new window</div></div>
992
+ </button>
993
+ </div>
994
+ </div>
995
+ -->
996
+ <button class='btn2 hidden' id='close-window' data-tippy-content='close this section'>
997
+ <div><i class="fa-solid fa-xmark"></i></div>
998
+ </button>
999
+ </h1>
1000
+ </header>
1001
+ <div class='appcanvas'>
1002
+ <iframe src="<%=redirect_uri%>"></iframe>
1003
+ </div>
1004
+ </body>
1005
+ </html>