@xcanwin/manyoyo 6.2.14 → 6.2.15

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.
@@ -1218,7 +1218,7 @@ body.workspace-switcher-open .workspace-switcher-panel {
1218
1218
  align-items: flex-start;
1219
1219
  justify-content: space-between;
1220
1220
  gap: 12px;
1221
- flex-wrap: wrap;
1221
+ flex-wrap: nowrap;
1222
1222
  padding: 10px 12px;
1223
1223
  border-bottom: 1px solid var(--line);
1224
1224
  background: rgba(255, 251, 244, 0.96);
@@ -1240,6 +1240,11 @@ body.workspace-switcher-open .workspace-switcher-panel {
1240
1240
  margin-left: auto;
1241
1241
  }
1242
1242
 
1243
+ .files-back-btn {
1244
+ display: none;
1245
+ flex-shrink: 0;
1246
+ }
1247
+
1243
1248
  .files-preview-title {
1244
1249
  font-family: var(--font-display);
1245
1250
  font-size: 14px;
@@ -2162,7 +2167,7 @@ body.composer-options-open .composer-options-panel {
2162
2167
 
2163
2168
  .files-layout {
2164
2169
  grid-template-columns: minmax(0, 1fr);
2165
- grid-template-rows: minmax(180px, 38%) minmax(0, 1fr);
2170
+ grid-template-rows: minmax(0, 1fr);
2166
2171
  }
2167
2172
 
2168
2173
  .files-sidebar {
@@ -2170,6 +2175,41 @@ body.composer-options-open .composer-options-panel {
2170
2175
  border-bottom: 1px solid var(--line);
2171
2176
  }
2172
2177
 
2178
+ .files-browser[data-mobile-pane="list"] .files-preview {
2179
+ display: none;
2180
+ }
2181
+
2182
+ .files-browser[data-mobile-pane="preview"] .files-sidebar {
2183
+ display: none;
2184
+ }
2185
+
2186
+ .files-browser[data-mobile-pane="preview"] .files-toolbar {
2187
+ display: none;
2188
+ }
2189
+
2190
+ .files-browser[data-mobile-pane="preview"] .files-back-btn {
2191
+ display: inline-flex;
2192
+ order: 1;
2193
+ }
2194
+
2195
+ .files-preview-head {
2196
+ flex-wrap: wrap;
2197
+ align-items: center;
2198
+ }
2199
+
2200
+ .files-preview-actions {
2201
+ order: 2;
2202
+ }
2203
+
2204
+ .files-preview-head-main {
2205
+ order: 3;
2206
+ flex-basis: 100%;
2207
+ }
2208
+
2209
+ .files-preview-meta {
2210
+ display: none;
2211
+ }
2212
+
2173
2213
  .composer-inner {
2174
2214
  align-items: stretch;
2175
2215
  }
@@ -107,6 +107,7 @@
107
107
  </aside>
108
108
  <section class="files-preview">
109
109
  <header class="files-preview-head">
110
+ <button type="button" class="secondary files-back-btn" data-action="back-to-list">← 返回列表</button>
110
111
  <div class="files-preview-head-main">
111
112
  <div class="files-preview-title" data-role="preview-title">未选择文件</div>
112
113
  <div class="files-preview-meta" data-role="preview-meta">请选择左侧文件或目录</div>
@@ -128,10 +129,12 @@
128
129
  const previewTitleNode = root.querySelector('[data-role="preview-title"]');
129
130
  const previewMetaNode = root.querySelector('[data-role="preview-meta"]');
130
131
  const previewBodyNode = root.querySelector('[data-role="preview-body"]');
132
+ const filesBrowserNode = root.querySelector('.files-browser');
131
133
  const visitBtn = root.querySelector('[data-action="visit"]');
132
134
  const mkdirBtn = root.querySelector('[data-action="mkdir"]');
133
135
  const saveBtn = root.querySelector('[data-action="save"]');
134
136
  const toggleMarkdownViewBtn = root.querySelector('[data-action="toggle-markdown-view"]');
137
+ const backToListBtn = root.querySelector('[data-action="back-to-list"]');
135
138
 
136
139
  const state = {
137
140
  visible: false,
@@ -155,9 +158,17 @@
155
158
  editorHost: null,
156
159
  previewReadOnly: true,
157
160
  previewDirty: false,
158
- markdownViewMode: 'rendered'
161
+ markdownViewMode: 'rendered',
162
+ mobileActivePane: 'list'
159
163
  };
160
164
 
165
+ function setMobilePane(pane) {
166
+ state.mobileActivePane = pane === 'preview' ? 'preview' : 'list';
167
+ if (filesBrowserNode) {
168
+ filesBrowserNode.setAttribute('data-mobile-pane', state.mobileActivePane);
169
+ }
170
+ }
171
+
161
172
  function setStatus(text) {
162
173
  if (statusNode) {
163
174
  statusNode.textContent = String(text || '').trim() || '就绪';
@@ -359,12 +370,14 @@
359
370
  listNode.innerHTML = '';
360
371
 
361
372
  if (!state.sessionName) {
373
+ setMobilePane('list');
362
374
  listNode.innerHTML = '<div class="files-empty">请选择左侧会话后再浏览容器文件。</div>';
363
375
  renderPreviewEmpty('未选择会话', '请选择左侧会话后再浏览容器文件。');
364
376
  setStatus('未选择会话');
365
377
  return;
366
378
  }
367
379
  if (state.historyOnly) {
380
+ setMobilePane('list');
368
381
  listNode.innerHTML = '<div class="files-empty">当前会话只有历史记录,没有可访问的运行中容器。</div>';
369
382
  renderPreviewEmpty('容器不可用', '当前会话只有历史记录,没有可访问的运行中容器。');
370
383
  setStatus('容器不可用');
@@ -429,6 +442,7 @@
429
442
  state.pathDraft = pathText;
430
443
  state.selectedPath = '';
431
444
  state.selectedEntry = null;
445
+ setMobilePane('list');
432
446
  renderList();
433
447
  try {
434
448
  const payload = await api('/api/sessions/' + encodeURIComponent(state.sessionName) + '/fs/list?path=' + encodeURIComponent(pathText));
@@ -474,6 +488,7 @@
474
488
  state.selectedPath = pathText;
475
489
  state.selectedEntry = selectedEntry;
476
490
  state.markdownViewMode = 'rendered';
491
+ setMobilePane('preview');
477
492
  renderList();
478
493
  renderPreviewEmpty(pathText, '正在读取文件内容...');
479
494
  try {
@@ -609,6 +624,7 @@
609
624
  state.entries = [];
610
625
  state.selectedPath = '';
611
626
  state.selectedEntry = null;
627
+ setMobilePane('list');
612
628
  renderPreviewEmpty('未选择文件', '请选择左侧文件进行预览。');
613
629
  } else if (containerPathChanged) {
614
630
  state.containerPath = nextContainerPath;
@@ -668,6 +684,13 @@
668
684
  });
669
685
  }
670
686
 
687
+ if (backToListBtn) {
688
+ backToListBtn.addEventListener('click', function () {
689
+ setMobilePane('list');
690
+ });
691
+ }
692
+
693
+ setMobilePane('list');
671
694
  renderList();
672
695
 
673
696
  return {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xcanwin/manyoyo",
3
- "version": "6.2.14",
3
+ "version": "6.2.15",
4
4
  "imageVersion": "1.9.1-common",
5
5
  "playwrightCliVersion": "0.1.18",
6
6
  "description": "AI Agent CLI Security Sandbox for Docker and Podman",