' +
+ lucide.createIcons();
+ return;
+ }
+
+ // Сгруппировать файлы по zip_source
+ var groups = []; // [{zip: "name.zip"|null, files: [f, ...]}]
+ var seen = {};
+ for (var i = 0; i < state.files.length; i++) {
+ var f = state.files[i];
+ var zip = f.zip_source || null;
+ var key = zip || '__naked__';
+ if (!seen[key]) {
+ seen[key] = { zip: zip, files: [] };
+ groups.push(seen[key]);
+ }
+ // Сохраняем оригинальный индекс для id строк
+ f._idx = i;
+ seen[key].files.push(f);
+ }
+
+ // Рендер: заголовок ZIP → файлы с отступом
+ var rows = [];
+ for (var gi = 0; gi < groups.length; gi++) {
+ var g = groups[gi];
+
+ if (g.zip) {
+ // Заголовок-секция ZIP
+ rows.push(
+ '
'
+ );
+ }
+
+ // Файлы внутри группы (с отступом если из ZIP)
+ for (var fi = 0; fi < g.files.length; fi++) {
+ var f = g.files[fi];
+ var i = f._idx;
+ var indent = g.zip ? 'padding-left:24px;' : '';
+
+ rows.push(
+ '
' +
+ '
' +
(f.doc_id ? '▸' : '') +
escHtml(f.name) + '
' +
'
' + formatDate(f.lastModified) + '
' +
@@ -65,10 +106,12 @@ function renderFiles(state) {
'