@xcanwin/manyoyo 5.9.3 → 5.10.3
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/README.md +12 -0
- package/bin/manyoyo.js +51 -7
- package/lib/image-build.js +160 -0
- package/lib/runtime-resolver.js +25 -1
- package/lib/web/frontend/app.css +121 -55
- package/lib/web/frontend/app.html +12 -6
- package/lib/web/frontend/app.js +214 -34
- package/lib/web/frontend/codemirror-entry.js +13 -0
- package/lib/web/frontend/codemirror.bundle.js +13 -0
- package/lib/web/frontend/file-browser.js +220 -29
- package/lib/web/server.js +179 -10
- package/lib/worktrees.js +132 -0
- package/package.json +2 -1
package/lib/web/frontend/app.css
CHANGED
|
@@ -371,13 +371,17 @@ textarea:focus-visible {
|
|
|
371
371
|
min-height: 340px;
|
|
372
372
|
border: 1px solid var(--line);
|
|
373
373
|
border-radius: 10px;
|
|
374
|
+
overflow: hidden;
|
|
374
375
|
background: #fffdfa;
|
|
375
|
-
|
|
376
|
-
|
|
376
|
+
}
|
|
377
|
+
|
|
378
|
+
.config-editor .cm-editor {
|
|
379
|
+
height: 340px;
|
|
377
380
|
font-size: 13px;
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
.config-editor .cm-scroller {
|
|
384
|
+
overflow: auto;
|
|
381
385
|
}
|
|
382
386
|
|
|
383
387
|
.form-grid {
|
|
@@ -929,33 +933,23 @@ button.tree-toggle:active {
|
|
|
929
933
|
}
|
|
930
934
|
|
|
931
935
|
.dir-picker-toolbar {
|
|
932
|
-
display: flex;
|
|
933
|
-
justify-content: space-between;
|
|
934
|
-
gap: 8px;
|
|
935
936
|
margin-bottom: 10px;
|
|
937
|
+
padding-left: 0;
|
|
938
|
+
padding-right: 0;
|
|
939
|
+
border-bottom: 0;
|
|
940
|
+
background: transparent;
|
|
936
941
|
}
|
|
937
942
|
|
|
938
|
-
.dir-picker-
|
|
939
|
-
|
|
940
|
-
padding: 10px 12px;
|
|
941
|
-
border: 1px solid rgba(181, 146, 99, 0.38);
|
|
942
|
-
border-radius: 10px;
|
|
943
|
-
background: rgba(255, 251, 244, 0.92);
|
|
944
|
-
color: var(--text);
|
|
945
|
-
font-family: var(--font-mono);
|
|
946
|
-
font-size: 12px;
|
|
947
|
-
word-break: break-all;
|
|
943
|
+
.dir-picker-toolbar-meta {
|
|
944
|
+
flex-wrap: wrap;
|
|
948
945
|
}
|
|
949
946
|
|
|
950
947
|
.dir-picker-list {
|
|
951
|
-
|
|
952
|
-
|
|
953
|
-
|
|
954
|
-
|
|
955
|
-
|
|
956
|
-
.dir-picker-item {
|
|
957
|
-
width: 100%;
|
|
958
|
-
text-align: left;
|
|
948
|
+
max-height: min(52vh, 420px);
|
|
949
|
+
border: 1px solid var(--line);
|
|
950
|
+
border-radius: 14px;
|
|
951
|
+
overflow: auto;
|
|
952
|
+
background: rgba(255, 255, 255, 0.86);
|
|
959
953
|
}
|
|
960
954
|
|
|
961
955
|
.empty {
|
|
@@ -1160,12 +1154,21 @@ body.mobile-actions-open .header-actions {
|
|
|
1160
1154
|
display: flex;
|
|
1161
1155
|
align-items: center;
|
|
1162
1156
|
gap: 8px;
|
|
1157
|
+
flex-wrap: wrap;
|
|
1163
1158
|
padding: 12px 14px;
|
|
1164
1159
|
border-bottom: 1px solid var(--line);
|
|
1165
1160
|
background: rgba(255, 251, 244, 0.96);
|
|
1166
1161
|
}
|
|
1167
1162
|
|
|
1168
|
-
.files-toolbar-path {
|
|
1163
|
+
.files-toolbar-path-group {
|
|
1164
|
+
flex: 1;
|
|
1165
|
+
min-width: 0;
|
|
1166
|
+
display: flex;
|
|
1167
|
+
align-items: center;
|
|
1168
|
+
gap: 8px;
|
|
1169
|
+
}
|
|
1170
|
+
|
|
1171
|
+
.files-toolbar-path-input {
|
|
1169
1172
|
flex: 1;
|
|
1170
1173
|
min-width: 0;
|
|
1171
1174
|
padding: 8px 10px;
|
|
@@ -1176,7 +1179,12 @@ body.mobile-actions-open .header-actions {
|
|
|
1176
1179
|
font-family: var(--font-mono);
|
|
1177
1180
|
font-size: 12px;
|
|
1178
1181
|
line-height: 1.5;
|
|
1179
|
-
|
|
1182
|
+
}
|
|
1183
|
+
|
|
1184
|
+
.files-toolbar-path-input:focus {
|
|
1185
|
+
outline: none;
|
|
1186
|
+
border-color: rgba(120, 78, 27, 0.45);
|
|
1187
|
+
box-shadow: 0 0 0 3px rgba(181, 146, 99, 0.12);
|
|
1180
1188
|
}
|
|
1181
1189
|
|
|
1182
1190
|
.files-toolbar-status {
|
|
@@ -1184,63 +1192,91 @@ body.mobile-actions-open .header-actions {
|
|
|
1184
1192
|
font-size: 12px;
|
|
1185
1193
|
}
|
|
1186
1194
|
|
|
1195
|
+
.files-toolbar-meta {
|
|
1196
|
+
display: flex;
|
|
1197
|
+
align-items: center;
|
|
1198
|
+
gap: 8px;
|
|
1199
|
+
margin-left: auto;
|
|
1200
|
+
}
|
|
1201
|
+
|
|
1187
1202
|
.files-layout {
|
|
1188
1203
|
min-height: 0;
|
|
1189
1204
|
display: grid;
|
|
1190
|
-
grid-template-columns: minmax(
|
|
1205
|
+
grid-template-columns: minmax(220px, 300px) minmax(0, 1fr);
|
|
1191
1206
|
}
|
|
1192
1207
|
|
|
1193
1208
|
.files-sidebar {
|
|
1194
1209
|
min-height: 0;
|
|
1195
1210
|
border-right: 1px solid var(--line);
|
|
1196
|
-
background: rgba(255,
|
|
1211
|
+
background: rgba(255, 255, 255, 0.86);
|
|
1197
1212
|
overflow: auto;
|
|
1198
1213
|
}
|
|
1199
1214
|
|
|
1200
1215
|
.files-list {
|
|
1201
1216
|
display: flex;
|
|
1202
1217
|
flex-direction: column;
|
|
1203
|
-
gap:
|
|
1204
|
-
padding:
|
|
1218
|
+
gap: 0;
|
|
1219
|
+
padding: 4px 0;
|
|
1205
1220
|
}
|
|
1206
1221
|
|
|
1207
1222
|
.files-entry {
|
|
1208
1223
|
width: 100%;
|
|
1209
|
-
display:
|
|
1210
|
-
|
|
1211
|
-
|
|
1224
|
+
display: grid;
|
|
1225
|
+
grid-template-columns: minmax(0, 1fr) auto;
|
|
1226
|
+
align-items: start;
|
|
1212
1227
|
gap: 10px;
|
|
1213
|
-
padding:
|
|
1214
|
-
border:
|
|
1215
|
-
border-
|
|
1216
|
-
|
|
1228
|
+
padding: 7px 12px;
|
|
1229
|
+
border: 0;
|
|
1230
|
+
border-bottom: 1px solid rgba(181, 146, 99, 0.18);
|
|
1231
|
+
border-radius: 0;
|
|
1232
|
+
background: transparent;
|
|
1217
1233
|
color: var(--text);
|
|
1218
1234
|
text-align: left;
|
|
1219
1235
|
cursor: pointer;
|
|
1220
1236
|
}
|
|
1221
1237
|
|
|
1238
|
+
.files-entry:hover {
|
|
1239
|
+
background: rgba(255, 247, 233, 0.72);
|
|
1240
|
+
}
|
|
1241
|
+
|
|
1222
1242
|
.files-entry.is-active {
|
|
1223
|
-
|
|
1224
|
-
|
|
1243
|
+
background: rgba(255, 244, 224, 0.95);
|
|
1244
|
+
box-shadow: inset 3px 0 0 rgba(120, 78, 27, 0.58);
|
|
1245
|
+
}
|
|
1246
|
+
|
|
1247
|
+
.files-entry-parent {
|
|
1248
|
+
font-style: italic;
|
|
1225
1249
|
}
|
|
1226
1250
|
|
|
1227
1251
|
.files-entry-name {
|
|
1252
|
+
flex: 1;
|
|
1228
1253
|
min-width: 0;
|
|
1229
|
-
display: flex;
|
|
1230
|
-
flex-direction: column;
|
|
1231
|
-
gap: 0;
|
|
1232
1254
|
}
|
|
1233
1255
|
|
|
1234
1256
|
.files-entry-title {
|
|
1235
1257
|
font-size: 13px;
|
|
1236
1258
|
font-weight: 600;
|
|
1237
|
-
|
|
1259
|
+
white-space: normal;
|
|
1260
|
+
word-break: break-all;
|
|
1261
|
+
overflow-wrap: anywhere;
|
|
1238
1262
|
}
|
|
1239
1263
|
|
|
1240
1264
|
.files-entry-meta {
|
|
1265
|
+
flex-shrink: 0;
|
|
1241
1266
|
color: var(--muted);
|
|
1242
1267
|
font-size: 11px;
|
|
1243
1268
|
white-space: nowrap;
|
|
1269
|
+
text-align: right;
|
|
1270
|
+
}
|
|
1271
|
+
|
|
1272
|
+
.files-list > .files-empty {
|
|
1273
|
+
padding: 8px 12px;
|
|
1274
|
+
border: 0;
|
|
1275
|
+
border-bottom: 1px solid rgba(181, 146, 99, 0.18);
|
|
1276
|
+
border-radius: 0;
|
|
1277
|
+
background: transparent;
|
|
1278
|
+
color: var(--muted);
|
|
1279
|
+
line-height: 1.5;
|
|
1244
1280
|
}
|
|
1245
1281
|
|
|
1246
1282
|
.files-preview {
|
|
@@ -1251,34 +1287,54 @@ body.mobile-actions-open .header-actions {
|
|
|
1251
1287
|
|
|
1252
1288
|
.files-preview-head {
|
|
1253
1289
|
display: flex;
|
|
1254
|
-
|
|
1255
|
-
|
|
1256
|
-
|
|
1290
|
+
align-items: flex-start;
|
|
1291
|
+
justify-content: space-between;
|
|
1292
|
+
gap: 12px;
|
|
1293
|
+
flex-wrap: wrap;
|
|
1294
|
+
padding: 10px 12px;
|
|
1257
1295
|
border-bottom: 1px solid var(--line);
|
|
1258
1296
|
background: rgba(255, 251, 244, 0.96);
|
|
1259
1297
|
}
|
|
1260
1298
|
|
|
1299
|
+
.files-preview-head-main {
|
|
1300
|
+
flex: 1 1 280px;
|
|
1301
|
+
min-width: 0;
|
|
1302
|
+
display: flex;
|
|
1303
|
+
flex-direction: column;
|
|
1304
|
+
gap: 6px;
|
|
1305
|
+
}
|
|
1306
|
+
|
|
1307
|
+
.files-preview-actions {
|
|
1308
|
+
flex-shrink: 0;
|
|
1309
|
+
display: flex;
|
|
1310
|
+
align-items: center;
|
|
1311
|
+
gap: 8px;
|
|
1312
|
+
margin-left: auto;
|
|
1313
|
+
}
|
|
1314
|
+
|
|
1261
1315
|
.files-preview-title {
|
|
1262
1316
|
font-family: var(--font-display);
|
|
1263
|
-
font-size:
|
|
1317
|
+
font-size: 14px;
|
|
1264
1318
|
font-weight: 700;
|
|
1319
|
+
word-break: break-all;
|
|
1320
|
+
overflow-wrap: anywhere;
|
|
1265
1321
|
}
|
|
1266
1322
|
|
|
1267
1323
|
.files-preview-meta {
|
|
1268
1324
|
color: var(--muted);
|
|
1269
|
-
font-size:
|
|
1325
|
+
font-size: 11px;
|
|
1270
1326
|
word-break: break-all;
|
|
1271
1327
|
}
|
|
1272
1328
|
|
|
1273
1329
|
.files-preview-body {
|
|
1274
1330
|
min-height: 0;
|
|
1275
1331
|
overflow: auto;
|
|
1276
|
-
padding:
|
|
1332
|
+
padding: 8px;
|
|
1277
1333
|
}
|
|
1278
1334
|
|
|
1279
1335
|
.files-empty,
|
|
1280
1336
|
.files-note {
|
|
1281
|
-
padding:
|
|
1337
|
+
padding: 14px;
|
|
1282
1338
|
border: 1px dashed rgba(181, 146, 99, 0.45);
|
|
1283
1339
|
border-radius: 12px;
|
|
1284
1340
|
background: rgba(255, 255, 255, 0.7);
|
|
@@ -1301,14 +1357,24 @@ body.mobile-actions-open .header-actions {
|
|
|
1301
1357
|
|
|
1302
1358
|
.files-editor-host .cm-editor {
|
|
1303
1359
|
height: 100%;
|
|
1304
|
-
border: 1px solid rgba(181, 146, 99, 0.
|
|
1305
|
-
border-radius:
|
|
1360
|
+
border: 1px solid rgba(181, 146, 99, 0.2);
|
|
1361
|
+
border-radius: 8px;
|
|
1306
1362
|
overflow: hidden;
|
|
1307
|
-
background: rgba(255, 255, 255, 0.
|
|
1363
|
+
background: rgba(255, 255, 255, 0.98);
|
|
1308
1364
|
}
|
|
1309
1365
|
|
|
1310
1366
|
.files-editor-host .cm-scroller {
|
|
1311
1367
|
font-family: var(--font-mono);
|
|
1368
|
+
line-height: 1.45;
|
|
1369
|
+
}
|
|
1370
|
+
|
|
1371
|
+
.files-editor-host .cm-gutters {
|
|
1372
|
+
border-right: 1px solid rgba(181, 146, 99, 0.14);
|
|
1373
|
+
background: rgba(252, 248, 241, 0.92);
|
|
1374
|
+
}
|
|
1375
|
+
|
|
1376
|
+
.files-editor-host .cm-lineNumbers .cm-gutterElement {
|
|
1377
|
+
font-size: 11px;
|
|
1312
1378
|
}
|
|
1313
1379
|
|
|
1314
1380
|
.inspector-pane {
|
|
@@ -138,7 +138,7 @@
|
|
|
138
138
|
</header>
|
|
139
139
|
<div class="modal-body">
|
|
140
140
|
<div id="configPath" class="modal-tip"></div>
|
|
141
|
-
<
|
|
141
|
+
<div id="configEditor" class="config-editor"></div>
|
|
142
142
|
<div id="configStatus" class="modal-success" hidden></div>
|
|
143
143
|
<div id="configError" class="modal-error" hidden></div>
|
|
144
144
|
</div>
|
|
@@ -220,13 +220,19 @@
|
|
|
220
220
|
</header>
|
|
221
221
|
<div class="modal-body">
|
|
222
222
|
<div id="directoryPickerTip" class="modal-tip"></div>
|
|
223
|
-
<div class="dir-picker-toolbar">
|
|
224
|
-
<
|
|
225
|
-
|
|
223
|
+
<div class="files-toolbar dir-picker-toolbar">
|
|
224
|
+
<div class="files-toolbar-path-group">
|
|
225
|
+
<input type="text" id="directoryPickerPathInput" class="files-toolbar-path-input" value="/" spellcheck="false" />
|
|
226
|
+
<button type="button" id="directoryPickerVisitBtn" class="secondary">访问</button>
|
|
227
|
+
</div>
|
|
228
|
+
<div class="files-toolbar-meta dir-picker-toolbar-meta">
|
|
229
|
+
<div id="directoryPickerStatus" class="files-toolbar-status">未加载</div>
|
|
230
|
+
<button type="button" id="directoryPickerMkdirBtn" class="secondary">新建目录</button>
|
|
231
|
+
<button type="button" id="directoryPickerSelectBtn">使用当前目录</button>
|
|
232
|
+
</div>
|
|
226
233
|
</div>
|
|
227
|
-
<div id="directoryPickerCurrent" class="dir-picker-current"></div>
|
|
228
234
|
<div id="directoryPickerError" class="modal-error" hidden></div>
|
|
229
|
-
<div id="directoryPickerList" class="dir-picker-list"></div>
|
|
235
|
+
<div id="directoryPickerList" class="dir-picker-list files-list"></div>
|
|
230
236
|
</div>
|
|
231
237
|
</section>
|
|
232
238
|
</div>
|