pinokiod 3.180.0 → 3.182.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 (51) hide show
  1. package/kernel/favicon.js +91 -34
  2. package/kernel/peer.js +73 -0
  3. package/kernel/util.js +28 -4
  4. package/package.json +1 -1
  5. package/server/index.js +237 -35
  6. package/server/public/common.js +677 -240
  7. package/server/public/files-app/app.css +64 -0
  8. package/server/public/files-app/app.js +87 -0
  9. package/server/public/install.js +8 -1
  10. package/server/public/layout.js +124 -0
  11. package/server/public/nav.js +227 -64
  12. package/server/public/sound/beep.mp3 +0 -0
  13. package/server/public/sound/bell.mp3 +0 -0
  14. package/server/public/sound/bright-ring.mp3 +0 -0
  15. package/server/public/sound/clap.mp3 +0 -0
  16. package/server/public/sound/deep-ring.mp3 +0 -0
  17. package/server/public/sound/gasp.mp3 +0 -0
  18. package/server/public/sound/hehe.mp3 +0 -0
  19. package/server/public/sound/levelup.mp3 +0 -0
  20. package/server/public/sound/light-pop.mp3 +0 -0
  21. package/server/public/sound/light-ring.mp3 +0 -0
  22. package/server/public/sound/meow.mp3 +0 -0
  23. package/server/public/sound/piano.mp3 +0 -0
  24. package/server/public/sound/pop.mp3 +0 -0
  25. package/server/public/sound/uhoh.mp3 +0 -0
  26. package/server/public/sound/whistle.mp3 +0 -0
  27. package/server/public/style.css +195 -4
  28. package/server/public/tab-idle-notifier.js +700 -4
  29. package/server/public/terminal-settings.js +1131 -0
  30. package/server/public/urldropdown.css +28 -1
  31. package/server/socket.js +71 -4
  32. package/server/views/{terminals.ejs → agents.ejs} +108 -32
  33. package/server/views/app.ejs +321 -104
  34. package/server/views/bootstrap.ejs +8 -0
  35. package/server/views/connect.ejs +10 -1
  36. package/server/views/d.ejs +172 -18
  37. package/server/views/editor.ejs +8 -0
  38. package/server/views/file_browser.ejs +4 -0
  39. package/server/views/index.ejs +10 -1
  40. package/server/views/init/index.ejs +18 -3
  41. package/server/views/install.ejs +8 -0
  42. package/server/views/layout.ejs +2 -0
  43. package/server/views/net.ejs +10 -1
  44. package/server/views/network.ejs +10 -1
  45. package/server/views/pro.ejs +8 -0
  46. package/server/views/prototype/index.ejs +8 -0
  47. package/server/views/screenshots.ejs +10 -2
  48. package/server/views/settings.ejs +10 -2
  49. package/server/views/shell.ejs +8 -0
  50. package/server/views/terminal.ejs +8 -0
  51. package/server/views/tools.ejs +10 -2
@@ -161,7 +161,7 @@ body.dark .dynamic.selected {
161
161
  */
162
162
  }
163
163
  aside .tab.submenu {
164
- padding-left: 25px;
164
+ padding-left: 25px !important;
165
165
  box-sizing: border-box;
166
166
  }
167
167
  #genlog, #downloadlogs {
@@ -1132,18 +1132,189 @@ header a.path {
1132
1132
  max-width: 100%;
1133
1133
  box-sizing: border-box;
1134
1134
  }
1135
+ header,
1136
+ header h1,
1137
+ header .runner {
1138
+ overflow: visible;
1139
+ }
1135
1140
  header .runner {
1136
1141
  padding: 0 10px;
1137
1142
  box-sizing: border-box;
1138
1143
  display: flex;
1139
1144
  align-items: center;
1145
+ gap: 10px;
1146
+ width: 100%;
1147
+ flex-wrap: wrap;
1140
1148
  }
1141
1149
  header .runner .btn {
1142
1150
  padding: 5px 10px;
1143
1151
  font-size: 12px;
1144
- margin-right: 10px;
1152
+ margin-right: 0;
1145
1153
  flex-shrink: 0;
1146
1154
  }
1155
+ .terminal-config {
1156
+ position: relative;
1157
+ display: flex;
1158
+ align-items: center;
1159
+ margin-left: auto;
1160
+ margin-right: 0;
1161
+ }
1162
+ .terminal-config .terminal-config-button,
1163
+ .terminal-config .btn {
1164
+ margin-right: 0;
1165
+ }
1166
+ .terminal-config-menu {
1167
+ position: absolute;
1168
+ top: calc(100% + 8px);
1169
+ right: 0;
1170
+ min-width: 220px;
1171
+ padding: 12px;
1172
+ border-radius: 10px;
1173
+ border: 1px solid rgba(0, 0, 0, 0.12);
1174
+ background: #ffffff;
1175
+ box-shadow: 0 12px 24px rgba(0, 0, 0, 0.18);
1176
+ z-index: 1500;
1177
+ max-height: min(80vh, 560px);
1178
+ overflow-y: auto;
1179
+ }
1180
+ .terminal-config-menu .terminal-config-title {
1181
+ font-size: 11px;
1182
+ font-weight: 600;
1183
+ letter-spacing: 0.06em;
1184
+ text-transform: uppercase;
1185
+ margin-bottom: 8px;
1186
+ opacity: 0.65;
1187
+ }
1188
+ .terminal-config-menu .terminal-config-note {
1189
+ font-size: 11px;
1190
+ margin-bottom: 10px;
1191
+ opacity: 0.7;
1192
+ }
1193
+ .terminal-config-menu .terminal-config-section {
1194
+ border-top: 1px solid rgba(0, 0, 0, 0.08);
1195
+ padding-top: 12px;
1196
+ margin-top: 12px;
1197
+ display: flex;
1198
+ flex-direction: column;
1199
+ gap: 10px;
1200
+ }
1201
+ .terminal-config-menu .terminal-config-section:first-of-type {
1202
+ border-top: none;
1203
+ padding-top: 0;
1204
+ margin-top: 0;
1205
+ }
1206
+ .terminal-config-menu .terminal-config-subtitle {
1207
+ font-size: 11px;
1208
+ font-weight: 600;
1209
+ letter-spacing: 0.04em;
1210
+ text-transform: uppercase;
1211
+ opacity: 0.65;
1212
+ }
1213
+ .terminal-config-menu .terminal-config-help {
1214
+ font-size: 11px;
1215
+ opacity: 0.65;
1216
+ line-height: 1.4;
1217
+ }
1218
+ .terminal-config-menu .terminal-config-group {
1219
+ display: flex;
1220
+ flex-direction: column;
1221
+ gap: 6px;
1222
+ margin-bottom: 12px;
1223
+ }
1224
+ .terminal-config-menu .terminal-config-label {
1225
+ font-size: 11px;
1226
+ font-weight: 600;
1227
+ opacity: 0.75;
1228
+ }
1229
+ .terminal-config-menu .terminal-config-select,
1230
+ .terminal-config-menu .terminal-config-input {
1231
+ font-size: 12px;
1232
+ padding: 6px 8px;
1233
+ border-radius: 6px;
1234
+ border: 1px solid rgba(0, 0, 0, 0.18);
1235
+ background: #ffffff;
1236
+ color: inherit;
1237
+ }
1238
+ .terminal-config-menu .terminal-config-input:focus,
1239
+ .terminal-config-menu .terminal-config-select:focus {
1240
+ outline: none;
1241
+ border-color: rgba(127, 91, 243, 0.65);
1242
+ box-shadow: 0 0 0 3px rgba(127, 91, 243, 0.18);
1243
+ }
1244
+ .terminal-config-menu .terminal-config-actions {
1245
+ display: flex;
1246
+ justify-content: flex-end;
1247
+ gap: 8px;
1248
+ }
1249
+ .terminal-config-menu .terminal-config-reset {
1250
+ font-size: 11px;
1251
+ padding: 4px 10px;
1252
+ }
1253
+ .terminal-config-menu .terminal-config-theme-grid {
1254
+ display: flex;
1255
+ flex-direction: column;
1256
+ gap: 8px;
1257
+ }
1258
+ .terminal-config-menu .terminal-config-theme-row {
1259
+ display: grid;
1260
+ grid-template-columns: minmax(140px, 1fr) 32px minmax(0, 1fr) 28px;
1261
+ align-items: center;
1262
+ gap: 8px;
1263
+ }
1264
+ .terminal-config-menu .terminal-config-color-input {
1265
+ width: 32px;
1266
+ height: 32px;
1267
+ padding: 0;
1268
+ border: none;
1269
+ background: transparent;
1270
+ cursor: pointer;
1271
+ }
1272
+ .terminal-config-menu .terminal-config-color-input[data-invalid='true'] {
1273
+ opacity: 0.35;
1274
+ }
1275
+ .terminal-config-menu .terminal-config-theme-text {
1276
+ width: 100%;
1277
+ }
1278
+ .terminal-config-menu .terminal-config-theme-clear {
1279
+ padding: 4px 6px;
1280
+ font-size: 12px;
1281
+ min-width: 28px;
1282
+ }
1283
+ body.dark .terminal-config-menu {
1284
+ background: rgba(21, 22, 23, 0.96);
1285
+ border-color: rgba(255, 255, 255, 0.12);
1286
+ box-shadow: 0 14px 30px rgba(0, 0, 0, 0.35);
1287
+ }
1288
+ body.dark .terminal-config-menu .terminal-config-label,
1289
+ body.dark .terminal-config-menu .terminal-config-title,
1290
+ body.dark .terminal-config-menu .terminal-config-note {
1291
+ color: rgba(255, 255, 255, 0.85);
1292
+ opacity: 0.85;
1293
+ }
1294
+ body.dark .terminal-config-menu .terminal-config-section {
1295
+ border-color: rgba(255, 255, 255, 0.12);
1296
+ }
1297
+ body.dark .terminal-config-menu .terminal-config-help {
1298
+ color: rgba(255, 255, 255, 0.7);
1299
+ }
1300
+ body.dark .terminal-config-menu .terminal-config-select,
1301
+ body.dark .terminal-config-menu .terminal-config-input {
1302
+ background: rgba(255, 255, 255, 0.08);
1303
+ border-color: rgba(255, 255, 255, 0.16);
1304
+ color: #ffffff;
1305
+ }
1306
+ body.dark .terminal-config-menu .terminal-config-color-input {
1307
+ background: rgba(255, 255, 255, 0.08);
1308
+ border-radius: 6px;
1309
+ }
1310
+ body.dark .terminal-config-menu .terminal-config-select:focus,
1311
+ body.dark .terminal-config-menu .terminal-config-input:focus {
1312
+ border-color: rgba(127, 91, 243, 0.85);
1313
+ box-shadow: 0 0 0 3px rgba(127, 91, 243, 0.24);
1314
+ }
1315
+ .terminal-config-open .terminal-config-menu {
1316
+ display: block;
1317
+ }
1147
1318
  body.dark .memory {
1148
1319
  background: rgba(0,0,0,0.8);
1149
1320
  border-left: 5px solid white;
@@ -2383,6 +2554,8 @@ body.dark .mode-selector .btn2.selected {
2383
2554
 
2384
2555
 
2385
2556
  @media only screen and (max-width: 768px) {
2557
+ /* Hide QR block on small screens */
2558
+ aside .qr { display: none !important; }
2386
2559
  body {
2387
2560
  display: flex;
2388
2561
  align-items: stretch;
@@ -2455,6 +2628,14 @@ body.dark .mode-selector .btn2.selected {
2455
2628
  overflow: auto;
2456
2629
  flex-wrap: nowrap;
2457
2630
  }
2631
+ /* Keep minimized header horizontal on small screens */
2632
+ header.navheader.minimized,
2633
+ header.navheader.minimized h1 {
2634
+ display: inline-flex;
2635
+ flex-direction: row;
2636
+ }
2637
+ /* Avoid stretching buttons to full width inside minimized pill */
2638
+ header.navheader.minimized h1 .btn2 { width: auto; }
2458
2639
  .mode-selector {
2459
2640
  flex-direction: column;
2460
2641
  padding: 0;
@@ -2539,8 +2720,18 @@ header.navheader.minimized h1 {
2539
2720
  padding: 0;
2540
2721
  height: auto;
2541
2722
  overflow: visible;
2542
- }
2543
- header.navheader.minimized h1 > *:not(.home):not(.header-drag-handle) {
2723
+ flex-wrap: nowrap;
2724
+ justify-content: flex-start;
2725
+ }
2726
+ /* Ensure item order inside minimized pill: home, refresh, dragger */
2727
+ header.navheader.minimized h1 .home { order: 0; }
2728
+ header.navheader.minimized h1 #refresh-page { order: 1; }
2729
+ header.navheader.minimized h1 .header-drag-handle { order: 2; }
2730
+ /* Prevent items from stretching */
2731
+ header.navheader.minimized h1 > .home,
2732
+ header.navheader.minimized h1 > #refresh-page,
2733
+ header.navheader.minimized h1 > .header-drag-handle { flex: 0 0 auto; }
2734
+ header.navheader.minimized h1 > *:not(.home):not(.header-drag-handle):not(#refresh-page) {
2544
2735
  display: none !important;
2545
2736
  }
2546
2737
  header.navheader .header-drag-handle {