From 2487d3bbaa7c731efa4ec1ec63defced4f98e613 Mon Sep 17 00:00:00 2001
From: mirivlad
Date: Mon, 1 Jun 2026 01:16:51 +0800
Subject: [PATCH] Files tab: multi-selection, drag-and-drop, keyboard
shortcuts, custom confirm modal, SVG icons
---
cmd/verstak-gui/app.go | 131 +++-
.../frontend-dist/assets/main-684Z-cFJ.css | 1 +
.../frontend-dist/assets/main-6cuAgDnH.css | 1 +
.../frontend-dist/assets/main-BQpRpEfX.js | 6 +
.../frontend-dist/assets/main-BjkBVutb.js | 3 +
.../frontend-dist/assets/main-BqdVWy5o.js | 3 -
.../frontend-dist/assets/main-CFGnr13n.css | 1 +
.../frontend-dist/assets/main-CHeI8Z54.js | 6 +
.../frontend-dist/assets/main-CRcfl7JD.css | 1 +
.../frontend-dist/assets/main-CXzqY-OQ.js | 3 +
.../frontend-dist/assets/main-CmkweTP0.js | 3 +
.../frontend-dist/assets/main-D8LYjC_e.css | 1 -
.../frontend-dist/assets/main-DMZ01wSM.js | 3 +
.../frontend-dist/assets/main-DTAZ0AQ4.css | 1 +
.../frontend-dist/assets/main-DcPiQSbo.css | 1 +
.../frontend-dist/assets/main-a-M2pafQ.js | 8 +
.../frontend-dist/assets/main-rybDIgHs.js | 3 +
cmd/verstak-gui/frontend-dist/index.html | 4 +-
cmd/verstak-gui/main.go | 7 +-
frontend/src/App.svelte | 649 +++++++++++++++++-
frontend/src/FileTreeRow.svelte | 346 ++++++++++
frontend/src/api/verstak.js | 16 +
frontend/src/lib/ConfirmModal.svelte | 101 +++
frontend/src/lib/FileActions.svelte | 85 +++
frontend/src/lib/FileBreadcrumbs.svelte | 69 ++
frontend/src/lib/FileIcon.svelte | 63 ++
frontend/src/lib/FilePreviewModal.svelte | 262 +++++++
frontend/src/lib/fileUtils.js | 114 +++
frontend/src/wailsjs/go/main/App.js | 16 +
internal/core/files/file.go | 290 +++++++-
internal/core/files/file_test.go | 173 ++++-
internal/core/notes/note_test.go | 2 +-
internal/gui/server.go | 2 +-
33 files changed, 2325 insertions(+), 50 deletions(-)
create mode 100644 cmd/verstak-gui/frontend-dist/assets/main-684Z-cFJ.css
create mode 100644 cmd/verstak-gui/frontend-dist/assets/main-6cuAgDnH.css
create mode 100644 cmd/verstak-gui/frontend-dist/assets/main-BQpRpEfX.js
create mode 100644 cmd/verstak-gui/frontend-dist/assets/main-BjkBVutb.js
delete mode 100644 cmd/verstak-gui/frontend-dist/assets/main-BqdVWy5o.js
create mode 100644 cmd/verstak-gui/frontend-dist/assets/main-CFGnr13n.css
create mode 100644 cmd/verstak-gui/frontend-dist/assets/main-CHeI8Z54.js
create mode 100644 cmd/verstak-gui/frontend-dist/assets/main-CRcfl7JD.css
create mode 100644 cmd/verstak-gui/frontend-dist/assets/main-CXzqY-OQ.js
create mode 100644 cmd/verstak-gui/frontend-dist/assets/main-CmkweTP0.js
delete mode 100644 cmd/verstak-gui/frontend-dist/assets/main-D8LYjC_e.css
create mode 100644 cmd/verstak-gui/frontend-dist/assets/main-DMZ01wSM.js
create mode 100644 cmd/verstak-gui/frontend-dist/assets/main-DTAZ0AQ4.css
create mode 100644 cmd/verstak-gui/frontend-dist/assets/main-DcPiQSbo.css
create mode 100644 cmd/verstak-gui/frontend-dist/assets/main-a-M2pafQ.js
create mode 100644 cmd/verstak-gui/frontend-dist/assets/main-rybDIgHs.js
create mode 100644 frontend/src/FileTreeRow.svelte
create mode 100644 frontend/src/lib/ConfirmModal.svelte
create mode 100644 frontend/src/lib/FileActions.svelte
create mode 100644 frontend/src/lib/FileBreadcrumbs.svelte
create mode 100644 frontend/src/lib/FileIcon.svelte
create mode 100644 frontend/src/lib/FilePreviewModal.svelte
create mode 100644 frontend/src/lib/fileUtils.js
diff --git a/cmd/verstak-gui/app.go b/cmd/verstak-gui/app.go
index 6848108..1040202 100644
--- a/cmd/verstak-gui/app.go
+++ b/cmd/verstak-gui/app.go
@@ -19,6 +19,8 @@ import (
"verstak/internal/core/worklog"
)
+
+
// App is the Wails v2 application adapter. It wraps core services.
type App struct {
ctx context.Context
@@ -32,9 +34,14 @@ type App struct {
vault string
}
-// startup is called when the app starts. Store context.
+// startup is called when the app starts. Store context and wire drag-and-drop.
func (a *App) startup(ctx context.Context) {
a.ctx = ctx
+ wailsruntime.OnFileDrop(ctx, func(x, y int, paths []string) {
+ if len(paths) > 0 {
+ wailsruntime.EventsEmit(ctx, "files-dropped", paths)
+ }
+ })
}
// ============================================================
@@ -75,6 +82,16 @@ type FileDTO struct {
Missing bool `json:"missing"`
}
+type FileTreeItemDTO struct {
+ ID string `json:"id"`
+ Name string `json:"name"`
+ Type string `json:"type"` // "folder" | "file"
+ FileID string `json:"fileId,omitempty"`
+ Size int64 `json:"size,omitempty"`
+ Mime string `json:"mime,omitempty"`
+ HasKids bool `json:"hasKids"`
+}
+
type ActionDTO struct {
ID string `json:"id"`
NodeID string `json:"nodeId"`
@@ -199,6 +216,7 @@ func (a *App) SaveNote(noteID, content string) error {
// Files
// ============================================================
+// ListFiles returns file records directly linked to a node (non-recursive).
func (a *App) ListFiles(nodeID string) ([]FileDTO, error) {
records, err := a.files.ListByNode(nodeID)
if err != nil {
@@ -206,22 +224,105 @@ func (a *App) ListFiles(nodeID string) ([]FileDTO, error) {
}
result := make([]FileDTO, len(records))
for i := range records {
- isDir := records[i].MIME == "inode/directory"
- missing := false
+ rec := &records[i]
result[i] = FileDTO{
- ID: records[i].ID,
- NodeID: records[i].NodeID,
- Name: records[i].Filename,
- Path: records[i].Path,
- Size: records[i].Size,
- Mime: records[i].MIME,
- IsDir: isDir,
- Missing: missing,
+ ID: rec.ID,
+ NodeID: rec.NodeID,
+ Name: rec.Filename,
+ Path: rec.Path,
+ Size: rec.Size,
+ Mime: rec.MIME,
+ IsDir: rec.MIME == "inode/directory",
+ Missing: rec.Missing,
}
}
return result, nil
}
+// ListItems returns children of a node for the file tree view.
+// Folders can be expanded; files include their file record info.
+func (a *App) ListItems(nodeID string) ([]FileTreeItemDTO, error) {
+ children, err := a.nodes.ListChildren(nodeID, false)
+ if err != nil {
+ return nil, err
+ }
+ result := make([]FileTreeItemDTO, 0, len(children))
+ for i := range children {
+ if children[i].Type != nodes.TypeFolder && children[i].Type != nodes.TypeFile {
+ continue
+ }
+ item := FileTreeItemDTO{
+ ID: children[i].ID,
+ Name: children[i].Title,
+ Type: children[i].Type,
+ }
+ if children[i].Type == nodes.TypeFolder {
+ // Check if this folder has children
+ kids, _ := a.nodes.ListChildren(children[i].ID, false)
+ item.HasKids = len(kids) > 0
+ } else if children[i].Type == nodes.TypeFile {
+ records, _ := a.files.ListByNode(children[i].ID)
+ if len(records) > 0 {
+ item.FileID = records[0].ID
+ item.Size = records[0].Size
+ item.Mime = records[0].MIME
+ }
+ }
+ result = append(result, item)
+ }
+ return result, nil
+}
+
+func (a *App) AddPathCopy(nodeID, sourcePath string) ([]NodeDTO, error) {
+ nodes, err := a.files.AddPathCopy(nodeID, sourcePath)
+ if err != nil {
+ return nil, err
+ }
+ return toNodeDTOs(nodes), nil
+}
+
+func (a *App) AddPathLink(nodeID, sourcePath string) ([]NodeDTO, error) {
+ nodes, err := a.files.AddPathLink(nodeID, sourcePath)
+ if err != nil {
+ return nil, err
+ }
+ return toNodeDTOs(nodes), nil
+}
+
+func (a *App) DeleteFileOrFolder(nodeID string) error {
+ return a.files.DeleteNodeAndChildren(nodeID)
+}
+
+func (a *App) CreateEmptyFile(parentID, filename string) (*NodeDTO, error) {
+ node, err := a.files.CreateEmptyFile(parentID, filename)
+ if err != nil {
+ return nil, err
+ }
+ dto := toNodeDTO(node)
+ return &dto, nil
+}
+
+func (a *App) DuplicateNode(nodeID string) (*NodeDTO, error) {
+ node, err := a.files.Duplicate(nodeID)
+ if err != nil {
+ return nil, err
+ }
+ dto := toNodeDTO(node)
+ return &dto, nil
+}
+
+func (a *App) RenameNode(nodeID, newTitle string) error {
+ return a.nodes.UpdateTitle(nodeID, newTitle)
+}
+
+func (a *App) MoveNode(nodeID, newParentID string) error {
+ return a.nodes.Move(nodeID, newParentID, 0)
+}
+
+func (a *App) PreviewImport(sourcePath string) (*files.ImportSummary, error) {
+ return a.files.PreviewImport(sourcePath)
+}
+
// ============================================================
// Actions
// ============================================================
@@ -352,6 +453,14 @@ func (a *App) OpenFile(fileID string) error {
return a.files.Open(fileID)
}
+func (a *App) ReadFileText(fileID string) (string, error) {
+ return a.files.ReadText(fileID)
+}
+
+func (a *App) GetFileBase64(fileID string) (string, error) {
+ return a.files.ReadBase64(fileID)
+}
+
func (a *App) OpenFolder(nodeID string) error {
n, err := a.nodes.GetActive(nodeID)
if err != nil {
diff --git a/cmd/verstak-gui/frontend-dist/assets/main-684Z-cFJ.css b/cmd/verstak-gui/frontend-dist/assets/main-684Z-cFJ.css
new file mode 100644
index 0000000..5838622
--- /dev/null
+++ b/cmd/verstak-gui/frontend-dist/assets/main-684Z-cFJ.css
@@ -0,0 +1 @@
+.file-actions.svelte-7ixqek{display:flex;gap:2px;align-items:center;opacity:0;transition:opacity .15s ease}.file-row:hover .file-actions.svelte-7ixqek{opacity:1}.action-btn.svelte-7ixqek{display:flex;align-items:center;justify-content:center;width:28px;height:28px;border:none;border-radius:4px;background:transparent;color:#666;cursor:pointer;transition:background .12s,color .12s}.action-btn.svelte-7ixqek:hover{background:#2a2a3c;color:#ccc}.action-btn-danger.svelte-7ixqek:hover{background:#3a2222;color:#ff6b6b}.action-btn.svelte-7ixqek:focus-visible{outline:2px solid #5588ff;outline-offset:1px}.file-row.svelte-15klzc3.svelte-15klzc3{display:flex;align-items:center;gap:10px;padding:8px 12px;border-radius:6px;cursor:default;transition:background .12s;min-height:52px;-webkit-user-select:none;user-select:none}.file-row.svelte-15klzc3.svelte-15klzc3:hover{background:#1e1e30}.file-row.svelte-15klzc3.svelte-15klzc3:focus-visible{outline:2px solid #5588ff;outline-offset:-2px}.file-row-icon.svelte-15klzc3.svelte-15klzc3{flex-shrink:0;display:flex;align-items:center;justify-content:center;width:32px;height:32px;color:#888}.file-row-body.svelte-15klzc3.svelte-15klzc3{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}.file-row-name.svelte-15klzc3.svelte-15klzc3{font-size:13px;color:#ddd;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:1.3}.file-row-meta.svelte-15klzc3.svelte-15klzc3{display:flex;align-items:center;gap:4px;font-size:11px;color:#666}.meta-sep.svelte-15klzc3.svelte-15klzc3{color:#444}.file-row-actions.svelte-15klzc3.svelte-15klzc3{display:flex;gap:2px;align-items:center;opacity:0;transition:opacity .15s ease;flex-shrink:0}.file-row.svelte-15klzc3:hover .file-row-actions.svelte-15klzc3{opacity:1}.action-btn.svelte-15klzc3.svelte-15klzc3{display:flex;align-items:center;justify-content:center;width:28px;height:28px;border:none;border-radius:4px;background:transparent;color:#666;cursor:pointer;transition:background .12s,color .12s}.action-btn.svelte-15klzc3.svelte-15klzc3:hover{background:#2a2a3c;color:#ccc}.action-btn-danger.svelte-15klzc3.svelte-15klzc3:hover{background:#3a2222;color:#ff6b6b}.action-btn.svelte-15klzc3.svelte-15klzc3:focus-visible{outline:2px solid #5588ff;outline-offset:1px}.breadcrumbs.svelte-csi2lb{display:flex;align-items:center;gap:4px;padding:8px 0;font-size:13px;color:#999}.sep.svelte-csi2lb{color:#444}.crumb.svelte-csi2lb{font-size:13px}.crumb--current.svelte-csi2lb{color:#ccc}.crumb--link.svelte-csi2lb{background:none;border:none;padding:2px 4px;color:#888;cursor:pointer;border-radius:3px;font-family:inherit;font-size:13px;transition:color .12s,background .12s}.crumb--link.svelte-csi2lb:hover{color:#ccc;background:#1e1e30}.crumb--link.svelte-csi2lb:focus-visible{outline:2px solid #5588ff;outline-offset:1px}.overlay.svelte-1ybaoro{position:fixed;top:0;right:0;bottom:0;left:0;background:#000000a6;display:flex;align-items:center;justify-content:center;z-index:1000}.modal.svelte-1ybaoro{background:#14141f;border:1px solid #2a2a3c;border-radius:10px;width:90vw;max-width:900px;height:85vh;max-height:700px;display:flex;flex-direction:column;overflow:hidden}.preview-header.svelte-1ybaoro{display:flex;align-items:center;gap:10px;padding:12px 16px;border-bottom:1px solid #2a2a3c;flex-shrink:0}.preview-title.svelte-1ybaoro{display:flex;align-items:center;gap:8px;color:#ddd;font-size:14px;min-width:0}.preview-name.svelte-1ybaoro{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.preview-meta.svelte-1ybaoro{font-size:11px;color:#666;margin-left:auto;white-space:nowrap}.preview-actions.svelte-1ybaoro{display:flex;gap:4px;flex-shrink:0;margin-left:8px}.action-btn.svelte-1ybaoro{display:flex;align-items:center;justify-content:center;width:30px;height:30px;border:none;border-radius:4px;background:transparent;color:#666;cursor:pointer;transition:background .12s,color .12s}.action-btn.svelte-1ybaoro:hover{background:#2a2a3c;color:#ccc}.action-btn.svelte-1ybaoro:focus-visible{outline:2px solid #5588ff;outline-offset:1px}.preview-body.svelte-1ybaoro{flex:1;overflow:auto;min-height:0}.preview-status.svelte-1ybaoro{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;padding:48px 24px;color:#888;font-size:14px}.preview-image-container.svelte-1ybaoro{display:flex;align-items:center;justify-content:center;padding:16px;min-height:200px;background:#0e0e18}.preview-image.svelte-1ybaoro{max-width:100%;max-height:calc(85vh - 100px);object-fit:contain;border-radius:4px}.preview-text.svelte-1ybaoro{margin:0;padding:16px;font-family:SF Mono,Fira Code,Cascadia Code,Consolas,monospace;font-size:12px;line-height:1.5;color:#ccc;white-space:pre-wrap;word-wrap:break-word;overflow:auto}.preview-pdf-container.svelte-1ybaoro{width:100%;height:100%}.preview-pdf.svelte-1ybaoro{width:100%;height:100%;border:none}.btn-sm.svelte-1ybaoro{padding:6px 14px;border:1px solid #2a2a3c;background:#1a1a28;color:#ccc;border-radius:6px;cursor:pointer;font-size:12px;font-family:inherit;transition:background .12s}.btn-sm.svelte-1ybaoro:hover{background:#223}.svelte-1rwjkun.svelte-1rwjkun,.svelte-1rwjkun.svelte-1rwjkun:before,.svelte-1rwjkun.svelte-1rwjkun:after{box-sizing:border-box;margin:0;padding:0}.app.svelte-1rwjkun.svelte-1rwjkun{display:flex;width:100vw;height:100vh;overflow:hidden;background:#13131f;color:#e4e4ef;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;font-size:14px}.sidebar.svelte-1rwjkun.svelte-1rwjkun{width:260px;min-width:200px;height:100vh;display:flex;flex-direction:column;background:#1a1a28;border-right:1px solid #2a2a3c;flex-shrink:0;overflow:hidden}.sidebar-brand.svelte-1rwjkun.svelte-1rwjkun{padding:16px 20px;display:flex;align-items:center;gap:10px;border-bottom:1px solid #2a2a3c;flex-shrink:0}.logo.svelte-1rwjkun.svelte-1rwjkun{font-size:20px;line-height:1}.brand-name.svelte-1rwjkun.svelte-1rwjkun{font-size:16px;font-weight:600}.sidebar-nav.svelte-1rwjkun.svelte-1rwjkun{flex:1;overflow-y:auto;padding:12px 0}.nav-group.svelte-1rwjkun.svelte-1rwjkun{margin-bottom:16px}.nav-label.svelte-1rwjkun.svelte-1rwjkun{font-size:10px;text-transform:uppercase;letter-spacing:.5px;color:#666;padding:4px 20px;margin-bottom:4px}.nav-item.svelte-1rwjkun.svelte-1rwjkun{display:block;width:100%;padding:8px 20px;border:none;background:none;color:#ccc;font-size:13px;text-align:left;cursor:pointer;border-radius:0;font-family:inherit}.nav-item.svelte-1rwjkun.svelte-1rwjkun:hover{background:#223}.nav-item.selected.svelte-1rwjkun.svelte-1rwjkun{background:#2a2a4a;color:#fff;font-weight:500}.nav-empty.svelte-1rwjkun.svelte-1rwjkun{padding:8px 20px;color:#555;font-size:12px}.sidebar-footer.svelte-1rwjkun.svelte-1rwjkun{padding:12px 20px;border-top:1px solid #2a2a3c;flex-shrink:0}.version.svelte-1rwjkun.svelte-1rwjkun{font-size:11px;color:#555}.main.svelte-1rwjkun.svelte-1rwjkun{flex:1;display:flex;flex-direction:column;height:100vh;min-width:0;overflow:hidden;background:#13131f}.header.svelte-1rwjkun.svelte-1rwjkun{padding:12px 24px;border-bottom:1px solid #2a2a3c;display:flex;align-items:center;flex-shrink:0;min-height:48px}.crumb.svelte-1rwjkun.svelte-1rwjkun{font-size:14px;font-weight:500}.crumb.placeholder.svelte-1rwjkun.svelte-1rwjkun{color:#666}.crumb-type.svelte-1rwjkun.svelte-1rwjkun{font-size:11px;color:#555;background:#1e1e2e;padding:2px 8px;border-radius:10px;margin-left:8px}.error-banner.svelte-1rwjkun.svelte-1rwjkun{background:#3a2222;color:#f88;padding:8px 24px;font-size:12px;border-bottom:1px solid #4a2222;flex-shrink:0;cursor:pointer;display:flex;justify-content:space-between}.dismiss.svelte-1rwjkun.svelte-1rwjkun{opacity:.6}.tabs.svelte-1rwjkun.svelte-1rwjkun{display:flex;border-bottom:1px solid #2a2a3c;flex-shrink:0;padding:0 24px}.tab.svelte-1rwjkun.svelte-1rwjkun{padding:10px 16px;border:none;background:none;color:#888;font-size:13px;cursor:pointer;border-bottom:2px solid transparent;font-family:inherit}.tab.svelte-1rwjkun.svelte-1rwjkun:hover{color:#ccc}.tab.active.svelte-1rwjkun.svelte-1rwjkun{color:#e4e4ef;border-bottom-color:#6366f1}.tab-content.svelte-1rwjkun.svelte-1rwjkun{flex:1;overflow-y:auto}.note-editor.svelte-1rwjkun.svelte-1rwjkun{flex:1;display:flex;flex-direction:column;height:100%}.note-editor-header.svelte-1rwjkun.svelte-1rwjkun{padding:12px 24px;border-bottom:1px solid #2a2a3c;display:flex;align-items:center;gap:12px;flex-shrink:0}.note-title.svelte-1rwjkun.svelte-1rwjkun{font-size:16px;font-weight:500}.dirty-mark.svelte-1rwjkun.svelte-1rwjkun{color:#f59e0b;font-size:10px}.note-editor-actions.svelte-1rwjkun.svelte-1rwjkun{margin-left:auto;display:flex;gap:8px}.note-textarea.svelte-1rwjkun.svelte-1rwjkun{flex:1;width:100%;border:none;outline:none;background:#13131f;color:#e4e4ef;font-family:SF Mono,Fira Code,monospace;font-size:14px;line-height:1.6;padding:24px;resize:none}.overview.svelte-1rwjkun.svelte-1rwjkun{padding:24px}.overview.svelte-1rwjkun h2.svelte-1rwjkun{font-size:24px;margin-bottom:16px}.meta-grid.svelte-1rwjkun.svelte-1rwjkun{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:12px;margin-bottom:24px}.meta-item.svelte-1rwjkun.svelte-1rwjkun{background:#1a1a28;padding:12px 16px;border-radius:8px}.meta-label.svelte-1rwjkun.svelte-1rwjkun{display:block;font-size:11px;color:#666;margin-bottom:4px;text-transform:uppercase}.quick-actions.svelte-1rwjkun.svelte-1rwjkun{display:flex;gap:8px;margin-bottom:24px;flex-wrap:wrap}.qa-btn.svelte-1rwjkun.svelte-1rwjkun{padding:10px 16px;border:1px solid #2a2a3c;background:#1a1a28;color:#ccc;border-radius:8px;cursor:pointer;font-size:13px;font-family:inherit}.qa-btn.svelte-1rwjkun.svelte-1rwjkun:hover{background:#223}.qa-btn.svelte-1rwjkun.svelte-1rwjkun:disabled{opacity:.4;cursor:not-allowed}.recent-section.svelte-1rwjkun.svelte-1rwjkun{margin-bottom:24px}.recent-section.svelte-1rwjkun h3.svelte-1rwjkun{font-size:13px;color:#666;text-transform:uppercase;margin-bottom:8px}.recent-note.svelte-1rwjkun.svelte-1rwjkun{padding:8px 12px;border-radius:6px;cursor:pointer;display:flex;justify-content:space-between}.recent-note.svelte-1rwjkun.svelte-1rwjkun:hover{background:#1a1a28}.recent-date.svelte-1rwjkun.svelte-1rwjkun{font-size:11px;color:#555}.recent-entry.svelte-1rwjkun.svelte-1rwjkun{padding:6px 0;font-size:13px;color:#888;border-bottom:1px solid #1a1a28}.notes-tab.svelte-1rwjkun.svelte-1rwjkun{padding:24px}.tab-toolbar.svelte-1rwjkun.svelte-1rwjkun{margin-bottom:16px}.create-form.svelte-1rwjkun.svelte-1rwjkun{background:#1a1a28;padding:16px;border-radius:8px;margin-bottom:16px}.create-form.svelte-1rwjkun input.svelte-1rwjkun{width:100%;padding:8px 12px;border:1px solid #2a2a3c;background:#13131f;color:#e4e4ef;border-radius:4px;font-size:14px;font-family:inherit;margin-bottom:8px}.create-form.svelte-1rwjkun input.svelte-1rwjkun:focus{outline:none;border-color:#6366f1}.form-actions.svelte-1rwjkun.svelte-1rwjkun{display:flex;gap:8px}.notes-list.svelte-1rwjkun.svelte-1rwjkun{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:12px}.note-card.svelte-1rwjkun.svelte-1rwjkun{background:#1a1a28;border:1px solid #2a2a3c;border-radius:8px;padding:16px;cursor:pointer}.note-card.svelte-1rwjkun.svelte-1rwjkun:hover{border-color:#3a3a5c}.note-card-title.svelte-1rwjkun.svelte-1rwjkun{font-size:14px;font-weight:500;margin-bottom:4px}.note-card-date.svelte-1rwjkun.svelte-1rwjkun{font-size:11px;color:#555}.worklog-tab.svelte-1rwjkun.svelte-1rwjkun{padding:24px}.worklog-form.svelte-1rwjkun.svelte-1rwjkun{display:flex;gap:8px;margin-bottom:24px;align-items:center}.worklog-form.svelte-1rwjkun input.svelte-1rwjkun{padding:8px 12px;border:1px solid #2a2a3c;background:#13131f;color:#e4e4ef;border-radius:4px;font-size:14px;font-family:inherit}.worklog-form.svelte-1rwjkun input.svelte-1rwjkun:focus{outline:none;border-color:#6366f1}.worklog-form.svelte-1rwjkun input[type=text].svelte-1rwjkun{flex:1}.worklog-form.svelte-1rwjkun input[type=number].svelte-1rwjkun{width:70px}.worklog-entry.svelte-1rwjkun.svelte-1rwjkun{padding:12px 0;border-bottom:1px solid #1a1a28}.wl-meta.svelte-1rwjkun.svelte-1rwjkun{font-size:11px;color:#555;margin-top:2px}.action-card.svelte-1rwjkun.svelte-1rwjkun{background:#1a1a28;padding:12px 16px;border-radius:8px;display:flex;align-items:center;gap:12px;margin-bottom:8px}.action-type.svelte-1rwjkun.svelte-1rwjkun{font-size:11px;color:#888;background:#223;padding:2px 8px;border-radius:10px}.empty-state.svelte-1rwjkun.svelte-1rwjkun{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:48px 24px;text-align:center}.empty-state.svelte-1rwjkun p.svelte-1rwjkun{margin:0;font-size:14px;color:#666}.empty-state.svelte-1rwjkun .empty-icon.svelte-1rwjkun{margin-bottom:12px;color:#444}.empty-state.svelte-1rwjkun .hint.svelte-1rwjkun{font-size:12px;color:#555;margin-top:6px}.empty-state.svelte-1rwjkun .empty-actions.svelte-1rwjkun{display:flex;gap:8px;justify-content:center;margin-top:16px}.empty-note.svelte-1rwjkun.svelte-1rwjkun{font-size:12px;color:#444;margin-top:16px}.welcome.svelte-1rwjkun.svelte-1rwjkun{padding:48px 24px;text-align:center}.welcome.svelte-1rwjkun h2.svelte-1rwjkun{font-size:32px;font-weight:300;color:#8888a4;margin-bottom:16px}.welcome.svelte-1rwjkun p.svelte-1rwjkun{color:#666;font-size:14px}.error-text.svelte-1rwjkun.svelte-1rwjkun{color:#f88}.fab.svelte-1rwjkun.svelte-1rwjkun{position:fixed;bottom:24px;right:24px;width:56px;height:56px;border-radius:50%;background:#6366f1;color:#fff;font-size:28px;display:flex;align-items:center;justify-content:center;cursor:pointer;box-shadow:0 4px 12px #6366f166}.fab.svelte-1rwjkun.svelte-1rwjkun:hover{background:#4f46e5}.modal-overlay.svelte-1rwjkun.svelte-1rwjkun{position:fixed;top:0;right:0;bottom:0;left:0;background:#0009;display:flex;align-items:center;justify-content:center;z-index:100}.modal.svelte-1rwjkun.svelte-1rwjkun{background:#1a1a28;border:1px solid #2a2a3c;border-radius:12px;padding:24px;width:400px;max-width:90vw}.modal.svelte-1rwjkun h3.svelte-1rwjkun{font-size:18px;margin-bottom:16px}.form-group.svelte-1rwjkun.svelte-1rwjkun{margin-bottom:12px}.form-group.svelte-1rwjkun label.svelte-1rwjkun{display:block;font-size:12px;color:#666;margin-bottom:4px}.form-group.svelte-1rwjkun input.svelte-1rwjkun,.form-group.svelte-1rwjkun select.svelte-1rwjkun{width:100%;padding:8px 12px;border:1px solid #2a2a3c;background:#13131f;color:#e4e4ef;border-radius:4px;font-size:14px;font-family:inherit}.form-group.svelte-1rwjkun select.svelte-1rwjkun{-moz-appearance:none;appearance:none;-webkit-appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%23888' d='M2 4l4 4 4-4'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 10px center;padding-right:32px}.form-group.svelte-1rwjkun input.svelte-1rwjkun:focus,.form-group.svelte-1rwjkun select.svelte-1rwjkun:focus{outline:none;border-color:#6366f1}.modal-actions.svelte-1rwjkun.svelte-1rwjkun{display:flex;gap:8px;justify-content:flex-end;margin-top:16px}.btn.svelte-1rwjkun.svelte-1rwjkun{padding:8px 16px;border:1px solid #2a2a3c;background:#1a1a28;color:#ccc;border-radius:6px;cursor:pointer;font-size:13px;font-family:inherit}.btn.svelte-1rwjkun.svelte-1rwjkun:hover{background:#223}.btn-primary.svelte-1rwjkun.svelte-1rwjkun{background:#6366f1;border-color:#6366f1;color:#fff}.btn-primary.svelte-1rwjkun.svelte-1rwjkun:hover{background:#4f46e5}.btn.svelte-1rwjkun.svelte-1rwjkun:disabled{opacity:.4;cursor:not-allowed}.btn-sm.svelte-1rwjkun.svelte-1rwjkun{padding:4px 10px;font-size:12px}.btn-danger.svelte-1rwjkun.svelte-1rwjkun{color:#ff6b6b;border-color:#4a2222}.btn-danger.svelte-1rwjkun.svelte-1rwjkun:hover{background:#3a2222}.files-tab.svelte-1rwjkun.svelte-1rwjkun{padding:20px}.files-tab.svelte-1rwjkun .tab-toolbar.svelte-1rwjkun{display:flex;gap:8px;align-items:center;margin-bottom:16px}.file-list.svelte-1rwjkun.svelte-1rwjkun{display:flex;flex-direction:column}.back-btn.svelte-1rwjkun.svelte-1rwjkun{margin-bottom:4px}.import-summary.svelte-1rwjkun.svelte-1rwjkun{margin-bottom:16px}.summary-row.svelte-1rwjkun.svelte-1rwjkun{display:flex;justify-content:space-between;padding:6px 0;font-size:14px;border-bottom:1px solid #2a2a3c}.summary-warn.svelte-1rwjkun.svelte-1rwjkun{margin-top:8px;padding:8px 12px;background:#3a2a22;border-radius:6px;color:#fa6;font-size:13px}
diff --git a/cmd/verstak-gui/frontend-dist/assets/main-6cuAgDnH.css b/cmd/verstak-gui/frontend-dist/assets/main-6cuAgDnH.css
new file mode 100644
index 0000000..8ced395
--- /dev/null
+++ b/cmd/verstak-gui/frontend-dist/assets/main-6cuAgDnH.css
@@ -0,0 +1 @@
+.file-row.svelte-18mry1k.svelte-18mry1k{display:flex;align-items:center;gap:10px;padding:8px 12px;border-radius:6px;cursor:default;transition:background .12s;min-height:52px;-webkit-user-select:none;user-select:none}.file-row.svelte-18mry1k.svelte-18mry1k:hover{background:#1e1e30}.file-row--selected.svelte-18mry1k.svelte-18mry1k{background:#1e1e3a;outline:1px solid #3a3a6c}.file-row--selected.svelte-18mry1k.svelte-18mry1k:hover{background:#252545}.file-row.svelte-18mry1k.svelte-18mry1k:focus-visible{outline:2px solid #5588ff;outline-offset:-2px}.file-row-icon.svelte-18mry1k.svelte-18mry1k{flex-shrink:0;display:flex;align-items:center;justify-content:center;width:32px;height:32px;color:#888}.file-row-body.svelte-18mry1k.svelte-18mry1k{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}.file-row-name.svelte-18mry1k.svelte-18mry1k{font-size:13px;color:#ddd;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:1.3}.file-row-meta.svelte-18mry1k.svelte-18mry1k{display:flex;align-items:center;gap:4px;font-size:11px;color:#666}.meta-sep.svelte-18mry1k.svelte-18mry1k{color:#444}.file-row-actions.svelte-18mry1k.svelte-18mry1k{display:flex;gap:2px;align-items:center;opacity:0;transition:opacity .15s ease;flex-shrink:0}.file-row.svelte-18mry1k:hover .file-row-actions.svelte-18mry1k{opacity:1}.action-btn.svelte-18mry1k.svelte-18mry1k{display:flex;align-items:center;justify-content:center;width:28px;height:28px;border:none;border-radius:4px;background:transparent;color:#666;cursor:pointer;transition:background .12s,color .12s}.action-btn.svelte-18mry1k.svelte-18mry1k:hover{background:#2a2a3c;color:#ccc}.action-btn-danger.svelte-18mry1k.svelte-18mry1k:hover{background:#3a2222;color:#ff6b6b}.action-btn.svelte-18mry1k.svelte-18mry1k:focus-visible{outline:2px solid #5588ff;outline-offset:1px}.menu-backdrop.svelte-18mry1k.svelte-18mry1k{position:fixed;top:0;right:0;bottom:0;left:0;z-index:99}.menu.svelte-18mry1k.svelte-18mry1k{position:absolute;right:12px;margin-top:4px;background:#1a1a28;border:1px solid #2a2a3c;border-radius:6px;padding:4px;z-index:100;min-width:140px;box-shadow:0 4px 12px #0006}.menu-item.svelte-18mry1k.svelte-18mry1k{display:block;width:100%;padding:6px 12px;border:none;background:transparent;color:#ccc;font-size:12px;text-align:left;cursor:pointer;border-radius:4px;font-family:inherit}.menu-item.svelte-18mry1k.svelte-18mry1k:hover{background:#2a2a3c}.menu-item.svelte-18mry1k.svelte-18mry1k:focus-visible{outline:2px solid #5588ff;outline-offset:1px}.breadcrumbs.svelte-csi2lb{display:flex;align-items:center;gap:4px;padding:8px 0;font-size:13px;color:#999}.sep.svelte-csi2lb{color:#444}.crumb.svelte-csi2lb{font-size:13px}.crumb--current.svelte-csi2lb{color:#ccc}.crumb--link.svelte-csi2lb{background:none;border:none;padding:2px 4px;color:#888;cursor:pointer;border-radius:3px;font-family:inherit;font-size:13px;transition:color .12s,background .12s}.crumb--link.svelte-csi2lb:hover{color:#ccc;background:#1e1e30}.crumb--link.svelte-csi2lb:focus-visible{outline:2px solid #5588ff;outline-offset:1px}.overlay.svelte-1cw3u0m{position:fixed;top:0;right:0;bottom:0;left:0;background:#000000a6;display:flex;align-items:center;justify-content:center;z-index:1000}.modal.svelte-1cw3u0m{background:#14141f;border:1px solid #2a2a3c;border-radius:10px;width:90vw;max-width:900px;height:85vh;max-height:700px;display:flex;flex-direction:column;overflow:hidden}.preview-header.svelte-1cw3u0m{display:flex;align-items:center;gap:10px;padding:12px 16px;border-bottom:1px solid #2a2a3c;flex-shrink:0}.preview-title.svelte-1cw3u0m{display:flex;align-items:center;gap:8px;color:#ddd;font-size:14px;min-width:0}.preview-name.svelte-1cw3u0m{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.preview-meta.svelte-1cw3u0m{font-size:11px;color:#666;margin-left:auto;white-space:nowrap}.preview-actions.svelte-1cw3u0m{display:flex;gap:4px;flex-shrink:0;margin-left:8px}.action-btn.svelte-1cw3u0m{display:flex;align-items:center;justify-content:center;width:30px;height:30px;border:none;border-radius:4px;background:transparent;color:#666;cursor:pointer;transition:background .12s,color .12s}.action-btn.svelte-1cw3u0m:hover{background:#2a2a3c;color:#ccc}.action-btn.svelte-1cw3u0m:focus-visible{outline:2px solid #5588ff;outline-offset:1px}.action-btn-close.svelte-1cw3u0m{color:#ff6b6b}.action-btn-close.svelte-1cw3u0m:hover{background:#3a2222;color:#f44}.preview-body.svelte-1cw3u0m{flex:1;overflow:auto;min-height:0}.preview-status.svelte-1cw3u0m{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;padding:48px 24px;color:#888;font-size:14px}.preview-image-container.svelte-1cw3u0m{display:flex;align-items:center;justify-content:center;padding:16px;min-height:200px;background:#0e0e18}.preview-image.svelte-1cw3u0m{max-width:100%;max-height:calc(85vh - 100px);object-fit:contain;border-radius:4px}.preview-text.svelte-1cw3u0m{margin:0;padding:16px;font-family:SF Mono,Fira Code,Cascadia Code,Consolas,monospace;font-size:12px;line-height:1.5;color:#ccc;white-space:pre-wrap;word-wrap:break-word;overflow:auto}.preview-pdf-container.svelte-1cw3u0m{width:100%;height:100%}.preview-pdf.svelte-1cw3u0m{width:100%;height:100%;border:none}.btn-sm.svelte-1cw3u0m{padding:6px 14px;border:1px solid #2a2a3c;background:#1a1a28;color:#ccc;border-radius:6px;cursor:pointer;font-size:12px;font-family:inherit;transition:background .12s}.btn-sm.svelte-1cw3u0m:hover{background:#223}.overlay.svelte-1fv6yyk{position:fixed;top:0;right:0;bottom:0;left:0;background:#0009;display:flex;align-items:center;justify-content:center;z-index:200}.modal.svelte-1fv6yyk{background:#1a1a28;border:1px solid #2a2a3c;border-radius:12px;padding:24px;width:360px;max-width:90vw}h3.svelte-1fv6yyk{font-size:18px;margin-bottom:12px;color:#e4e4ef}.message.svelte-1fv6yyk{font-size:14px;color:#aaa;margin-bottom:20px;line-height:1.4}.actions.svelte-1fv6yyk{display:flex;gap:8px;justify-content:flex-end}.btn.svelte-1fv6yyk{padding:8px 16px;border:1px solid #2a2a3c;background:#1a1a28;color:#ccc;border-radius:6px;cursor:pointer;font-size:13px;font-family:inherit}.btn.svelte-1fv6yyk:hover{background:#223}.btn-primary.svelte-1fv6yyk{background:#6366f1;border-color:#6366f1;color:#fff}.btn-primary.svelte-1fv6yyk:hover{background:#4f46e5}.btn-danger.svelte-1fv6yyk{background:#dc2626;border-color:#dc2626;color:#fff}.btn-danger.svelte-1fv6yyk:hover{background:#b91c1c}.btn.svelte-1fv6yyk:focus-visible{outline:2px solid #5588ff;outline-offset:1px}.svelte-9y78h7.svelte-9y78h7,.svelte-9y78h7.svelte-9y78h7:before,.svelte-9y78h7.svelte-9y78h7:after{box-sizing:border-box;margin:0;padding:0}.app.svelte-9y78h7.svelte-9y78h7{display:flex;width:100vw;height:100vh;overflow:hidden;background:#13131f;color:#e4e4ef;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;font-size:14px}.sidebar.svelte-9y78h7.svelte-9y78h7{width:260px;min-width:200px;height:100vh;display:flex;flex-direction:column;background:#1a1a28;border-right:1px solid #2a2a3c;flex-shrink:0;overflow:hidden}.sidebar-brand.svelte-9y78h7.svelte-9y78h7{padding:16px 20px;display:flex;align-items:center;gap:10px;border-bottom:1px solid #2a2a3c;flex-shrink:0}.logo.svelte-9y78h7.svelte-9y78h7{font-size:20px;line-height:1}.brand-name.svelte-9y78h7.svelte-9y78h7{font-size:16px;font-weight:600}.sidebar-nav.svelte-9y78h7.svelte-9y78h7{flex:1;overflow-y:auto;padding:12px 0}.nav-group.svelte-9y78h7.svelte-9y78h7{margin-bottom:16px}.nav-label.svelte-9y78h7.svelte-9y78h7{font-size:10px;text-transform:uppercase;letter-spacing:.5px;color:#666;padding:4px 20px;margin-bottom:4px}.nav-item.svelte-9y78h7.svelte-9y78h7{display:block;width:100%;padding:8px 20px;border:none;background:none;color:#ccc;font-size:13px;text-align:left;cursor:pointer;border-radius:0;font-family:inherit}.nav-item.svelte-9y78h7.svelte-9y78h7:hover{background:#223}.nav-item.selected.svelte-9y78h7.svelte-9y78h7{background:#2a2a4a;color:#fff;font-weight:500}.nav-empty.svelte-9y78h7.svelte-9y78h7{padding:8px 20px;color:#555;font-size:12px}.sidebar-footer.svelte-9y78h7.svelte-9y78h7{padding:12px 20px;border-top:1px solid #2a2a3c;flex-shrink:0}.version.svelte-9y78h7.svelte-9y78h7{font-size:11px;color:#555}.main.svelte-9y78h7.svelte-9y78h7{flex:1;display:flex;flex-direction:column;height:100vh;min-width:0;overflow:hidden;background:#13131f}.header.svelte-9y78h7.svelte-9y78h7{padding:12px 24px;border-bottom:1px solid #2a2a3c;display:flex;align-items:center;flex-shrink:0;min-height:48px}.crumb.svelte-9y78h7.svelte-9y78h7{font-size:14px;font-weight:500}.crumb.placeholder.svelte-9y78h7.svelte-9y78h7{color:#666}.crumb-type.svelte-9y78h7.svelte-9y78h7{font-size:11px;color:#555;background:#1e1e2e;padding:2px 8px;border-radius:10px;margin-left:8px}.error-banner.svelte-9y78h7.svelte-9y78h7{background:#3a2222;color:#f88;padding:8px 24px;font-size:12px;border-bottom:1px solid #4a2222;flex-shrink:0;cursor:pointer;display:flex;justify-content:space-between;align-items:center}.dismiss-btn.svelte-9y78h7.svelte-9y78h7{background:none;border:none;color:#f66;cursor:pointer;padding:2px;display:flex;align-items:center;border-radius:2px}.dismiss-btn.svelte-9y78h7.svelte-9y78h7:hover{color:#f44}.tabs.svelte-9y78h7.svelte-9y78h7{display:flex;border-bottom:1px solid #2a2a3c;flex-shrink:0;padding:0 24px}.tab.svelte-9y78h7.svelte-9y78h7{padding:10px 16px;border:none;background:none;color:#888;font-size:13px;cursor:pointer;border-bottom:2px solid transparent;font-family:inherit}.tab.svelte-9y78h7.svelte-9y78h7:hover{color:#ccc}.tab.active.svelte-9y78h7.svelte-9y78h7{color:#e4e4ef;border-bottom-color:#6366f1}.tab-content.svelte-9y78h7.svelte-9y78h7{flex:1;overflow-y:auto}.note-editor.svelte-9y78h7.svelte-9y78h7{flex:1;display:flex;flex-direction:column;height:100%}.note-editor-header.svelte-9y78h7.svelte-9y78h7{padding:12px 24px;border-bottom:1px solid #2a2a3c;display:flex;align-items:center;gap:12px;flex-shrink:0}.note-title.svelte-9y78h7.svelte-9y78h7{font-size:16px;font-weight:500}.dirty-mark.svelte-9y78h7.svelte-9y78h7{color:#f59e0b;font-size:10px}.note-editor-actions.svelte-9y78h7.svelte-9y78h7{margin-left:auto;display:flex;gap:8px}.note-textarea.svelte-9y78h7.svelte-9y78h7{flex:1;width:100%;border:none;outline:none;background:#13131f;color:#e4e4ef;font-family:SF Mono,Fira Code,monospace;font-size:14px;line-height:1.6;padding:24px;resize:none}.overview.svelte-9y78h7.svelte-9y78h7{padding:24px}.overview.svelte-9y78h7 h2.svelte-9y78h7{font-size:24px;margin-bottom:16px}.meta-grid.svelte-9y78h7.svelte-9y78h7{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:12px;margin-bottom:24px}.meta-item.svelte-9y78h7.svelte-9y78h7{background:#1a1a28;padding:12px 16px;border-radius:8px}.meta-label.svelte-9y78h7.svelte-9y78h7{display:block;font-size:11px;color:#666;margin-bottom:4px;text-transform:uppercase}.quick-actions.svelte-9y78h7.svelte-9y78h7{display:flex;gap:8px;margin-bottom:24px;flex-wrap:wrap}.qa-btn.svelte-9y78h7.svelte-9y78h7{padding:10px 16px;border:1px solid #2a2a3c;background:#1a1a28;color:#ccc;border-radius:8px;cursor:pointer;font-size:13px;font-family:inherit;display:inline-flex;align-items:center;gap:6px}.qa-btn.svelte-9y78h7.svelte-9y78h7:hover{background:#223}.qa-btn.svelte-9y78h7.svelte-9y78h7:disabled{opacity:.4;cursor:not-allowed}.recent-section.svelte-9y78h7.svelte-9y78h7{margin-bottom:24px}.recent-section.svelte-9y78h7 h3.svelte-9y78h7{font-size:13px;color:#666;text-transform:uppercase;margin-bottom:8px}.recent-note.svelte-9y78h7.svelte-9y78h7{padding:8px 12px;border-radius:6px;cursor:pointer;display:flex;justify-content:space-between}.recent-note.svelte-9y78h7.svelte-9y78h7:hover{background:#1a1a28}.recent-date.svelte-9y78h7.svelte-9y78h7{font-size:11px;color:#555}.recent-entry.svelte-9y78h7.svelte-9y78h7{padding:6px 0;font-size:13px;color:#888;border-bottom:1px solid #1a1a28}.notes-tab.svelte-9y78h7.svelte-9y78h7{padding:24px}.tab-toolbar.svelte-9y78h7.svelte-9y78h7{margin-bottom:16px}.create-form.svelte-9y78h7.svelte-9y78h7{background:#1a1a28;padding:16px;border-radius:8px;margin-bottom:16px}.create-form.svelte-9y78h7 input.svelte-9y78h7{width:100%;padding:8px 12px;border:1px solid #2a2a3c;background:#13131f;color:#e4e4ef;border-radius:4px;font-size:14px;font-family:inherit;margin-bottom:8px}.create-form.svelte-9y78h7 input.svelte-9y78h7:focus{outline:none;border-color:#6366f1}.form-actions.svelte-9y78h7.svelte-9y78h7{display:flex;gap:8px}.notes-list.svelte-9y78h7.svelte-9y78h7{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:12px}.note-card.svelte-9y78h7.svelte-9y78h7{background:#1a1a28;border:1px solid #2a2a3c;border-radius:8px;padding:16px;cursor:pointer}.note-card.svelte-9y78h7.svelte-9y78h7:hover{border-color:#3a3a5c}.note-card-title.svelte-9y78h7.svelte-9y78h7{font-size:14px;font-weight:500;margin-bottom:4px}.note-card-date.svelte-9y78h7.svelte-9y78h7{font-size:11px;color:#555}.worklog-tab.svelte-9y78h7.svelte-9y78h7{padding:24px}.worklog-form.svelte-9y78h7.svelte-9y78h7{display:flex;gap:8px;margin-bottom:24px;align-items:center}.worklog-form.svelte-9y78h7 input.svelte-9y78h7{padding:8px 12px;border:1px solid #2a2a3c;background:#13131f;color:#e4e4ef;border-radius:4px;font-size:14px;font-family:inherit}.worklog-form.svelte-9y78h7 input.svelte-9y78h7:focus{outline:none;border-color:#6366f1}.worklog-form.svelte-9y78h7 input[type=text].svelte-9y78h7{flex:1}.worklog-form.svelte-9y78h7 input[type=number].svelte-9y78h7{width:70px}.worklog-entry.svelte-9y78h7.svelte-9y78h7{padding:12px 0;border-bottom:1px solid #1a1a28}.wl-meta.svelte-9y78h7.svelte-9y78h7{font-size:11px;color:#555;margin-top:2px}.action-card.svelte-9y78h7.svelte-9y78h7{background:#1a1a28;padding:12px 16px;border-radius:8px;display:flex;align-items:center;gap:12px;margin-bottom:8px}.action-type.svelte-9y78h7.svelte-9y78h7{font-size:11px;color:#888;background:#223;padding:2px 8px;border-radius:10px}.empty-state.svelte-9y78h7.svelte-9y78h7{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:48px 24px;text-align:center}.empty-state.svelte-9y78h7 p.svelte-9y78h7{margin:0;font-size:14px;color:#666}.empty-state.svelte-9y78h7 .empty-icon.svelte-9y78h7{margin-bottom:12px;color:#444}.empty-state.svelte-9y78h7 .hint.svelte-9y78h7{font-size:12px;color:#555;margin-top:6px}.empty-state.svelte-9y78h7 .empty-actions.svelte-9y78h7{display:flex;gap:8px;justify-content:center;margin-top:16px}.empty-note.svelte-9y78h7.svelte-9y78h7{font-size:12px;color:#444;margin-top:16px}.welcome.svelte-9y78h7.svelte-9y78h7{padding:48px 24px;text-align:center}.welcome.svelte-9y78h7 h2.svelte-9y78h7{font-size:32px;font-weight:300;color:#8888a4;margin-bottom:16px}.welcome.svelte-9y78h7 p.svelte-9y78h7{color:#666;font-size:14px}.error-text.svelte-9y78h7.svelte-9y78h7{color:#f88}.fab.svelte-9y78h7.svelte-9y78h7{position:fixed;bottom:24px;right:24px;width:56px;height:56px;border-radius:50%;background:#6366f1;color:#fff;font-size:28px;display:flex;align-items:center;justify-content:center;cursor:pointer;box-shadow:0 4px 12px #6366f166}.fab.svelte-9y78h7.svelte-9y78h7:hover{background:#4f46e5}.modal-overlay.svelte-9y78h7.svelte-9y78h7{position:fixed;top:0;right:0;bottom:0;left:0;background:#0009;display:flex;align-items:center;justify-content:center;z-index:100}.modal.svelte-9y78h7.svelte-9y78h7{background:#1a1a28;border:1px solid #2a2a3c;border-radius:12px;padding:24px;width:400px;max-width:90vw}.modal.svelte-9y78h7 h3.svelte-9y78h7{font-size:18px;margin-bottom:16px}.form-group.svelte-9y78h7.svelte-9y78h7{margin-bottom:12px}.form-group.svelte-9y78h7 label.svelte-9y78h7{display:block;font-size:12px;color:#666;margin-bottom:4px}.form-group.svelte-9y78h7 input.svelte-9y78h7,.form-group.svelte-9y78h7 select.svelte-9y78h7{width:100%;padding:8px 12px;border:1px solid #2a2a3c;background:#13131f;color:#e4e4ef;border-radius:4px;font-size:14px;font-family:inherit}.form-group.svelte-9y78h7 select.svelte-9y78h7{-moz-appearance:none;appearance:none;-webkit-appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%23888' d='M2 4l4 4 4-4'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 10px center;padding-right:32px}.form-group.svelte-9y78h7 input.svelte-9y78h7:focus,.form-group.svelte-9y78h7 select.svelte-9y78h7:focus{outline:none;border-color:#6366f1}.modal-actions.svelte-9y78h7.svelte-9y78h7{display:flex;gap:8px;justify-content:flex-end;margin-top:16px}.btn.svelte-9y78h7.svelte-9y78h7{padding:8px 16px;border:1px solid #2a2a3c;background:#1a1a28;color:#ccc;border-radius:6px;cursor:pointer;font-size:13px;font-family:inherit}.btn.svelte-9y78h7.svelte-9y78h7:hover{background:#223}.btn-primary.svelte-9y78h7.svelte-9y78h7{background:#6366f1;border-color:#6366f1;color:#fff}.btn-primary.svelte-9y78h7.svelte-9y78h7:hover{background:#4f46e5}.btn.svelte-9y78h7.svelte-9y78h7:disabled{opacity:.4;cursor:not-allowed}.btn-sm.svelte-9y78h7.svelte-9y78h7{padding:4px 10px;font-size:12px}.btn-danger.svelte-9y78h7.svelte-9y78h7{color:#ff6b6b;border-color:#4a2222}.btn-danger.svelte-9y78h7.svelte-9y78h7:hover{background:#3a2222}.files-tab.svelte-9y78h7.svelte-9y78h7{padding:20px}.files-tab.svelte-9y78h7 .tab-toolbar.svelte-9y78h7{display:flex;gap:8px;align-items:center;margin-bottom:16px}.file-list.svelte-9y78h7.svelte-9y78h7{display:flex;flex-direction:column}.back-btn.svelte-9y78h7.svelte-9y78h7{margin-bottom:4px;display:inline-flex;align-items:center;gap:4px}.import-summary.svelte-9y78h7.svelte-9y78h7{margin-bottom:16px}.summary-row.svelte-9y78h7.svelte-9y78h7{display:flex;justify-content:space-between;padding:6px 0;font-size:14px;border-bottom:1px solid #2a2a3c}.summary-warn.svelte-9y78h7.svelte-9y78h7{margin-top:8px;padding:8px 12px;background:#3a2a22;border-radius:6px;color:#fa6;font-size:13px}
diff --git a/cmd/verstak-gui/frontend-dist/assets/main-BQpRpEfX.js b/cmd/verstak-gui/frontend-dist/assets/main-BQpRpEfX.js
new file mode 100644
index 0000000..6226274
--- /dev/null
+++ b/cmd/verstak-gui/frontend-dist/assets/main-BQpRpEfX.js
@@ -0,0 +1,6 @@
+var Il=Object.defineProperty;var El=(l,e,t)=>e in l?Il(l,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):l[e]=t;var Pe=(l,e,t)=>El(l,typeof e!="symbol"?e+"":e,t);(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const i of document.querySelectorAll('link[rel="modulepreload"]'))n(i);new MutationObserver(i=>{for(const s of i)if(s.type==="childList")for(const o of s.addedNodes)o.tagName==="LINK"&&o.rel==="modulepreload"&&n(o)}).observe(document,{childList:!0,subtree:!0});function t(i){const s={};return i.integrity&&(s.integrity=i.integrity),i.referrerPolicy&&(s.referrerPolicy=i.referrerPolicy),i.crossOrigin==="use-credentials"?s.credentials="include":i.crossOrigin==="anonymous"?s.credentials="omit":s.credentials="same-origin",s}function n(i){if(i.ep)return;i.ep=!0;const s=t(i);fetch(i.href,s)}})();function D(){}const Ll=l=>l;function qt(l){return l()}function Ue(){return Object.create(null)}function te(l){l.forEach(qt)}function Re(l){return typeof l=="function"}function Ee(l,e){return l!=l?e==e:l!==e||l&&typeof l=="object"||typeof l=="function"}function Al(l){return Object.keys(l).length===0}function Ol(l){return l??""}const Wt=typeof window<"u";let jl=Wt?()=>window.performance.now():()=>Date.now(),qe=Wt?l=>requestAnimationFrame(l):D;const ve=new Set;function Gt(l){ve.forEach(e=>{e.c(l)||(ve.delete(e),e.f())}),ve.size!==0&&qe(Gt)}function Pl(l){let e;return ve.size===0&&qe(Gt),{promise:new Promise(t=>{ve.add(e={c:l,f:t})}),abort(){ve.delete(e)}}}function a(l,e){l.appendChild(e)}function Kt(l){if(!l)return document;const e=l.getRootNode?l.getRootNode():l.ownerDocument;return e&&e.host?e:l.ownerDocument}function Dl(l){const e=_("style");return e.textContent="/* empty */",Hl(Kt(l),e),e.sheet}function Hl(l,e){return a(l.head||l,e),e.sheet}function v(l,e,t){l.insertBefore(e,t||null)}function h(l){l.parentNode&&l.parentNode.removeChild(l)}function re(l,e){for(let t=0;tl.removeEventListener(e,t,n)}function Jt(l){return function(e){e.target===this&&l.call(this,e)}}function r(l,e,t){t==null?l.removeAttribute(e):l.getAttribute(e)!==t&&l.setAttribute(e,t)}function Ut(l){return l===""?null:+l}function Tl(l){return Array.from(l.childNodes)}function B(l,e){e=""+e,l.data!==e&&(l.data=e)}function oe(l,e){l.value=e??""}function Ze(l,e,t,n){t==null?l.style.removeProperty(e):l.style.setProperty(e,t,"")}function Xe(l,e,t){for(let n=0;n>>0}function ql(l,e){const t={stylesheet:Dl(e),rules:{}};return xe.set(l,t),t}function Ye(l,e,t,n,i,s,o,c=0){const f=16.666/n;let u=`{
+`;for(let k=0;k<=1;k+=f){const x=e+(t-e)*s(k);u+=k*100+`%{${o(x,1-x)}}
+`}const d=u+`100% {${o(t,1-t)}}
+}`,m=`__svelte_${Rl(d)}_${c}`,p=Kt(l),{stylesheet:b,rules:z}=xe.get(p)||ql(p,l);z[m]||(z[m]=!0,b.insertRule(`@keyframes ${m} ${d}`,b.cssRules.length));const g=l.style.animation||"";return l.style.animation=`${g?`${g}, `:""}${m} ${n}ms linear ${i}ms 1 both`,Ne+=1,m}function Wl(l,e){const t=(l.style.animation||"").split(", "),n=t.filter(e?s=>s.indexOf(e)<0:s=>s.indexOf("__svelte")===-1),i=t.length-n.length;i&&(l.style.animation=n.join(", "),Ne-=i,Ne||Gl())}function Gl(){qe(()=>{Ne||(xe.forEach(l=>{const{ownerNode:e}=l.stylesheet;e&&h(e)}),xe.clear())})}let we;function ye(l){we=l}function We(){if(!we)throw new Error("Function called outside component initialization");return we}function Kl(l){We().$$.on_mount.push(l)}function Jl(l){We().$$.on_destroy.push(l)}function Xt(){const l=We();return(e,t,{cancelable:n=!1}={})=>{const i=l.$$.callbacks[e];if(i){const s=Zt(e,t,{cancelable:n});return i.slice().forEach(o=>{o.call(l,s)}),!s.defaultPrevented}return!0}}function De(l,e){const t=l.$$.callbacks[e.type];t&&t.slice().forEach(n=>n.call(this,e))}const he=[],Se=[];let be=[];const Be=[],Ul=Promise.resolve();let Ve=!1;function Zl(){Ve||(Ve=!0,Ul.then(Yt))}function ze(l){be.push(l)}function Qe(l){Be.push(l)}const He=new Set;let me=0;function Yt(){if(me!==0)return;const l=we;do{try{for(;mel.indexOf(n)===-1?e.push(n):t.push(n)),t.forEach(n=>n()),be=e}let ke;function Ql(){return ke||(ke=Promise.resolve(),ke.then(()=>{ke=null})),ke}function Te(l,e,t){l.dispatchEvent(Zt(`${e?"intro":"outro"}${t}`))}const Fe=new Set;let ce;function de(){ce={r:0,c:[],p:ce}}function pe(){ce.r||te(ce.c),ce=ce.p}function Q(l,e){l&&l.i&&(Fe.delete(l),l.i(e))}function ee(l,e,t,n){if(l&&l.o){if(Fe.has(l))return;Fe.add(l),ce.c.push(()=>{Fe.delete(l),n&&(t&&l.d(1),n())}),l.o(e)}else n&&n()}const $l={duration:0};function $e(l,e,t,n){let s=e(l,t,{direction:"both"}),o=n?0:1,c=null,f=null,u=null,d;function m(){u&&Wl(l,u)}function p(z,g){const k=z.b-o;return g*=Math.abs(k),{a:o,b:z.b,d:k,duration:g,start:z.start,end:z.start+g,group:z.group}}function b(z){const{delay:g=0,duration:k=300,easing:x=Ll,tick:C=D,css:L}=s||$l,O={start:jl()+g,b:z};z||(O.group=ce,ce.r+=1),"inert"in l&&(z?d!==void 0&&(l.inert=d):(d=l.inert,l.inert=!0)),c||f?f=O:(L&&(m(),u=Ye(l,o,z,k,g,x,L)),z&&C(0,1),c=p(O,k),ze(()=>Te(l,z,"start")),Pl(A=>{if(f&&A>f.start&&(c=p(f,k),f=null,Te(l,c.b,"start"),L&&(m(),u=Ye(l,o,c.b,c.duration,0,x,s.css))),c){if(A>=c.end)C(o=c.b,1-o),Te(l,c.b,"end"),f||(c.b?m():--c.group.r||te(c.group.c)),c=null;else if(A>=c.start){const H=A-c.start;o=c.a+c.d*x(H/c.duration),C(o,1-o)}}return!!(c||f)}))}return{run(z){Re(s)?Ql().then(()=>{s=s({direction:z?"in":"out"}),b(z)}):b(z)},end(){m(),c=f=null}}}function Z(l){return(l==null?void 0:l.length)!==void 0?l:Array.from(l)}function en(l,e){ee(l,1,1,()=>{e.delete(l.key)})}function tn(l,e,t,n,i,s,o,c,f,u,d,m){let p=l.length,b=s.length,z=p;const g={};for(;z--;)g[l[z].key]=z;const k=[],x=new Map,C=new Map,L=[];for(z=b;z--;){const N=m(i,s,z),S=t(N);let y=o.get(S);y?L.push(()=>y.p(N,e)):(y=u(S,N),y.c()),x.set(S,k[z]=y),S in g&&C.set(S,Math.abs(z-g[S]))}const O=new Set,A=new Set;function H(N){Q(N,1),N.m(c,d),o.set(N.key,N),d=N.first,b--}for(;p&&b;){const N=k[b-1],S=l[p-1],y=N.key,P=S.key;N===S?(d=N.first,p--,b--):x.has(P)?!o.has(y)||O.has(y)?H(N):A.has(P)?p--:C.get(y)>C.get(P)?(A.add(y),H(N)):(O.add(P),p--):(f(S,o),p--)}for(;p--;){const N=l[p];x.has(N.key)||f(N,o)}for(;b;)H(k[b-1]);return te(L),k}function et(l,e,t){const n=l.$$.props[e];n!==void 0&&(l.$$.bound[n]=t,t(l.$$.ctx[n]))}function Ie(l){l&&l.c()}function Ce(l,e,t){const{fragment:n,after_update:i}=l.$$;n&&n.m(e,t),ze(()=>{const s=l.$$.on_mount.map(qt).filter(Re);l.$$.on_destroy?l.$$.on_destroy.push(...s):te(s),l.$$.on_mount=[]}),i.forEach(ze)}function Me(l,e){const t=l.$$;t.fragment!==null&&(Yl(t.after_update),te(t.on_destroy),t.fragment&&t.fragment.d(e),t.on_destroy=t.fragment=null,t.ctx=[])}function ln(l,e){l.$$.dirty[0]===-1&&(he.push(l),Zl(),l.$$.dirty.fill(0)),l.$$.dirty[e/31|0]|=1<{const z=b.length?b[0]:p;return u.ctx&&i(u.ctx[m],u.ctx[m]=z)&&(!u.skip_bound&&u.bound[m]&&u.bound[m](z),d&&ln(l,m)),p}):[],u.update(),d=!0,te(u.before_update),u.fragment=n?n(u.ctx):!1,e.target){if(e.hydrate){const m=Tl(e.target);u.fragment&&u.fragment.l(m),m.forEach(h)}else u.fragment&&u.fragment.c();e.intro&&Q(l.$$.fragment),Ce(l,e.target,e.anchor),Yt()}ye(f)}class Ae{constructor(){Pe(this,"$$");Pe(this,"$$set")}$destroy(){Me(this,1),this.$destroy=D}$on(e,t){if(!Re(t))return D;const n=this.$$.callbacks[e]||(this.$$.callbacks[e]=[]);return n.push(t),()=>{const i=n.indexOf(t);i!==-1&&n.splice(i,1)}}$set(e){this.$$set&&!Al(e)&&(this.$$.skip_bound=!0,this.$$set(e),this.$$.skip_bound=!1)}}const nn="4";typeof window<"u"&&(window.__svelte||(window.__svelte={v:new Set})).v.add(nn);function sn(l){let e,t;return{c(){e=E("path"),t=E("polyline"),r(e,"d","M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"),r(t,"points","14 2 14 8 20 8")},m(n,i){v(n,e,i),v(n,t,i)},d(n){n&&(h(e),h(t))}}}function on(l){let e,t,n,i,s;return{c(){e=E("path"),t=E("polyline"),n=E("line"),i=E("line"),s=E("polyline"),r(e,"d","M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"),r(t,"points","14 2 14 8 20 8"),r(n,"x1","16"),r(n,"y1","13"),r(n,"x2","8"),r(n,"y2","13"),r(i,"x1","16"),r(i,"y1","17"),r(i,"x2","8"),r(i,"y2","17"),r(s,"points","10 9 9 9 8 9")},m(o,c){v(o,e,c),v(o,t,c),v(o,n,c),v(o,i,c),v(o,s,c)},d(o){o&&(h(e),h(t),h(n),h(i),h(s))}}}function rn(l){let e,t;return{c(){e=E("polyline"),t=E("polyline"),r(e,"points","16 18 22 12 16 6"),r(t,"points","8 6 2 12 8 18")},m(n,i){v(n,e,i),v(n,t,i)},d(n){n&&(h(e),h(t))}}}function fn(l){let e,t,n,i;return{c(){e=E("path"),t=E("polyline"),n=E("line"),i=E("rect"),r(e,"d","M21 8v13a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8"),r(t,"points","7 3 12 8 17 3"),r(n,"x1","3"),r(n,"y1","8"),r(n,"x2","21"),r(n,"y2","8"),r(i,"x","10"),r(i,"y","12"),r(i,"width","4"),r(i,"height","4"),r(i,"rx","1")},m(s,o){v(s,e,o),v(s,t,o),v(s,n,o),v(s,i,o)},d(s){s&&(h(e),h(t),h(n),h(i))}}}function cn(l){let e,t,n,i,s;return{c(){e=E("path"),t=E("polyline"),n=E("line"),i=E("line"),s=E("line"),r(e,"d","M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"),r(t,"points","14 2 14 8 20 8"),r(n,"x1","9"),r(n,"y1","12"),r(n,"x2","15"),r(n,"y2","12"),r(i,"x1","9"),r(i,"y1","15"),r(i,"x2","13"),r(i,"y2","15"),r(s,"x1","12"),r(s,"y1","15"),r(s,"x2","12"),r(s,"y2","18")},m(o,c){v(o,e,c),v(o,t,c),v(o,n,c),v(o,i,c),v(o,s,c)},d(o){o&&(h(e),h(t),h(n),h(i),h(s))}}}function an(l){let e,t,n,i,s,o;return{c(){e=E("path"),t=E("polyline"),n=E("line"),i=E("line"),s=E("line"),o=E("line"),r(e,"d","M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"),r(t,"points","14 2 14 8 20 8"),r(n,"x1","8"),r(n,"y1","12"),r(n,"x2","16"),r(n,"y2","12"),r(i,"x1","8"),r(i,"y1","16"),r(i,"x2","16"),r(i,"y2","16"),r(s,"x1","8"),r(s,"y1","14"),r(s,"x2","12"),r(s,"y2","14"),r(o,"x1","12"),r(o,"y1","12"),r(o,"x2","12"),r(o,"y2","18")},m(c,f){v(c,e,f),v(c,t,f),v(c,n,f),v(c,i,f),v(c,s,f),v(c,o,f)},d(c){c&&(h(e),h(t),h(n),h(i),h(s),h(o))}}}function un(l){let e,t,n,i;return{c(){e=E("path"),t=E("polyline"),n=E("line"),i=E("line"),r(e,"d","M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"),r(t,"points","14 2 14 8 20 8"),r(n,"x1","16"),r(n,"y1","13"),r(n,"x2","8"),r(n,"y2","13"),r(i,"x1","16"),r(i,"y1","17"),r(i,"x2","8"),r(i,"y2","17")},m(s,o){v(s,e,o),v(s,t,o),v(s,n,o),v(s,i,o)},d(s){s&&(h(e),h(t),h(n),h(i))}}}function dn(l){let e,t,n,i,s;return{c(){e=E("path"),t=E("polyline"),n=E("line"),i=E("line"),s=E("line"),r(e,"d","M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"),r(t,"points","14 2 14 8 20 8"),r(n,"x1","8"),r(n,"y1","12"),r(n,"x2","16"),r(n,"y2","12"),r(i,"x1","8"),r(i,"y1","16"),r(i,"x2","16"),r(i,"y2","16"),r(s,"x1","8"),r(s,"y1","14"),r(s,"x2","12"),r(s,"y2","14")},m(o,c){v(o,e,c),v(o,t,c),v(o,n,c),v(o,i,c),v(o,s,c)},d(o){o&&(h(e),h(t),h(n),h(i),h(s))}}}function pn(l){let e,t,n;return{c(){e=E("path"),t=E("circle"),n=E("circle"),r(e,"d","M9 18V5l12-2v13"),r(t,"cx","6"),r(t,"cy","18"),r(t,"r","3"),r(n,"cx","18"),r(n,"cy","16"),r(n,"r","3")},m(i,s){v(i,e,s),v(i,t,s),v(i,n,s)},d(i){i&&(h(e),h(t),h(n))}}}function _n(l){let e,t;return{c(){e=E("rect"),t=E("polyline"),r(e,"x","2"),r(e,"y","4"),r(e,"width","20"),r(e,"height","16"),r(e,"rx","2"),r(t,"points","10 9 16 12 10 15 10 9")},m(n,i){v(n,e,i),v(n,t,i)},d(n){n&&(h(e),h(t))}}}function mn(l){let e,t,n;return{c(){e=E("rect"),t=E("circle"),n=E("polyline"),r(e,"x","3"),r(e,"y","3"),r(e,"width","18"),r(e,"height","18"),r(e,"rx","2"),r(e,"ry","2"),r(t,"cx","8.5"),r(t,"cy","8.5"),r(t,"r","1.5"),r(n,"points","21 15 16 10 5 21")},m(i,s){v(i,e,s),v(i,t,s),v(i,n,s)},d(i){i&&(h(e),h(t),h(n))}}}function hn(l){let e;return{c(){e=E("path"),r(e,"d","M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z")},m(t,n){v(t,e,n)},d(t){t&&h(e)}}}function vn(l){let e;function t(s,o){return s[0]==="folder"?hn:s[0]==="image"?mn:s[0]==="video"?_n:s[0]==="audio"?pn:s[0]==="pdf"?dn:s[0]==="document"?un:s[0]==="spreadsheet"?an:s[0]==="presentation"?cn:s[0]==="archive"?fn:s[0]==="code"?rn:s[0]==="text"?on:sn}let n=t(l),i=n(l);return{c(){e=E("svg"),i.c(),r(e,"width",l[1]),r(e,"height",l[1]),r(e,"viewBox","0 0 24 24"),r(e,"fill","none"),r(e,"stroke","currentColor"),r(e,"stroke-width","1.5"),r(e,"stroke-linecap","round"),r(e,"stroke-linejoin","round"),r(e,"xmlns","http://www.w3.org/2000/svg")},m(s,o){v(s,e,o),i.m(e,null)},p(s,[o]){n!==(n=t(s))&&(i.d(1),i=n(s),i&&(i.c(),i.m(e,null))),o&2&&r(e,"width",s[1]),o&2&&r(e,"height",s[1])},i:D,o:D,d(s){s&&h(e),i.d()}}}function bn(l,e,t){let{kind:n="generic"}=e,{size:i=20}=e;return l.$$set=s=>{"kind"in s&&t(0,n=s.kind),"size"in s&&t(1,i=s.size)},[n,i]}class zn extends Ae{constructor(e){super(),Le(this,e,bn,vn,Ee,{kind:0,size:1})}}function gn(l){let e,t,n;return{c(){e=E("path"),t=E("polyline"),n=E("line"),r(e,"d","M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"),r(t,"points","15 3 21 3 21 9"),r(n,"x1","10"),r(n,"y1","14"),r(n,"x2","21"),r(n,"y2","3")},m(i,s){v(i,e,s),v(i,t,s),v(i,n,s)},d(i){i&&(h(e),h(t),h(n))}}}function kn(l){let e,t;return{c(){e=E("path"),t=E("line"),r(e,"d","M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z"),r(t,"x1","9"),r(t,"y1","14"),r(t,"x2","15"),r(t,"y2","14")},m(n,i){v(n,e,i),v(n,t,i)},d(n){n&&(h(e),h(t))}}}function yn(l){let e,t,n,i,s,o,c,f,u;function d(b,z){return b[0]?kn:gn}let m=d(l),p=m(l);return{c(){e=_("div"),t=_("button"),n=E("svg"),p.c(),o=F(),c=_("button"),c.innerHTML=' ',r(n,"width","16"),r(n,"height","16"),r(n,"viewBox","0 0 24 24"),r(n,"fill","none"),r(n,"stroke","currentColor"),r(n,"stroke-width","2"),r(n,"stroke-linecap","round"),r(n,"stroke-linejoin","round"),r(t,"class","action-btn svelte-7ixqek"),r(t,"title",i=l[0]?"Open folder":"Open file"),r(t,"aria-label",s=l[0]?"Open folder":"Open file"),r(c,"class","action-btn action-btn-danger svelte-7ixqek"),r(c,"title","Delete"),r(c,"aria-label","Delete"),r(e,"class","file-actions svelte-7ixqek")},m(b,z){v(b,e,z),a(e,t),a(t,n),p.m(n,null),a(e,o),a(e,c),f||(u=[T(t,"click",l[1]),T(c,"click",l[2])],f=!0)},p(b,[z]){m!==(m=d(b))&&(p.d(1),p=m(b),p&&(p.c(),p.m(n,null))),z&1&&i!==(i=b[0]?"Open folder":"Open file")&&r(t,"title",i),z&1&&s!==(s=b[0]?"Open folder":"Open file")&&r(t,"aria-label",s)},i:D,o:D,d(b){b&&h(e),p.d(),f=!1,te(u)}}}function wn(l,e,t){let{isFolder:n=!1}=e,{fileId:i=""}=e,{nodeId:s=""}=e;const o=Xt();function c(){n?o("openFolder",s):o("open",i)}function f(){o("delete",s)}return l.$$set=u=>{"isFolder"in u&&t(0,n=u.isFolder),"fileId"in u&&t(3,i=u.fileId),"nodeId"in u&&t(4,s=u.nodeId)},[n,c,f,i,s]}class Cn extends Ae{constructor(e){super(),Le(this,e,wn,yn,Ee,{isFolder:0,fileId:3,nodeId:4})}}function tt(l){if(l==null||l<0)return"—";if(l===0)return"0 B";const e=["B","KB","MB","GB"],t=Math.min(Math.floor(Math.log(l)/Math.log(1024)),e.length-1),n=l/Math.pow(1024,t);return(t===0?n.toFixed(0):n.toFixed(1))+" "+e[t]}const Mn={"image/jpeg":"JPEG image","image/png":"PNG image","image/gif":"GIF image","image/webp":"WebP image","image/svg+xml":"SVG image","image/bmp":"BMP image","image/tiff":"TIFF image","image/avif":"AVIF image","application/pdf":"PDF document","application/msword":"Word document","application/vnd.openxmlformats-officedocument.wordprocessingml.document":"Word document","application/vnd.ms-excel":"Excel spreadsheet","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":"Excel spreadsheet","application/vnd.ms-powerpoint":"PowerPoint presentation","application/vnd.openxmlformats-officedocument.presentationml.presentation":"PowerPoint presentation","application/zip":"ZIP archive","application/gzip":"GZIP archive","application/x-tar":"TAR archive","application/x-7z-compressed":"7z archive","application/x-rar-compressed":"RAR archive","text/plain":"Text file","text/html":"HTML file","text/css":"CSS file","text/javascript":"JavaScript file","application/json":"JSON file","application/xml":"XML file","application/x-yaml":"YAML file","application/octet-stream":"Binary file","application/x-msdos-program":"Executable","inode/directory":"Folder"};function lt(l){return l?Mn[l]||l:"Unknown"}function Fn(l){if(l.type==="folder")return"folder";const e=(l.mime||"").toLowerCase();if(e.startsWith("image/"))return"image";if(e.startsWith("video/"))return"video";if(e.startsWith("audio/"))return"audio";if(e.startsWith("text/"))return"text";if(e.includes("pdf"))return"pdf";if(e.includes("word")||e.includes("document"))return"document";if(e.includes("spreadsheet")||e.includes("excel"))return"spreadsheet";if(e.includes("presentation")||e.includes("powerpoint"))return"presentation";if(e.includes("zip")||e.includes("tar")||e.includes("gzip")||e.includes("rar")||e.includes("7z")||e.includes("compress"))return"archive";if(e.includes("json")||e.includes("xml")||e.includes("yaml")||e.includes("javascript")||e.includes("css")||e.includes("html"))return"code";const n=(l.name||"").toLowerCase().split(".").pop();return["js","ts","jsx","tsx","vue","svelte","py","rs","go","c","cpp","h","hpp","java","kt","swift","rb","php","pl","sh","bash","zsh","fish","yml","yaml","json","xml","toml","ini","cfg","conf","md","markdown","css","scss","less","sass","sql","graphql","proto","gradle","cmake","makefile","dockerfile","env","gitignore"].includes(n)?"code":"generic"}function nt(l,e,t){const n=l.slice();return n[15]=e[t],n}function xn(l){let e;return{c(){e=_("span"),r(e,"class","expand-spacer svelte-1fc98j1")},m(t,n){v(t,e,n)},p:D,d(t){t&&h(e)}}}function Nn(l){let e,t,n,i,s,o;const c=[In,Sn],f=[];function u(d,m){return d[4]?0:1}return t=u(l),n=f[t]=c[t](l),{c(){e=_("button"),n.c(),r(e,"class","expand-toggle svelte-1fc98j1"),r(e,"aria-label",i=l[0][l[2].id]?"Collapse":"Expand")},m(d,m){v(d,e,m),f[t].m(e,null),s||(o=T(e,"click",l[6]),s=!0)},p(d,m){let p=t;t=u(d),t===p?f[t].p(d,m):(de(),ee(f[p],1,1,()=>{f[p]=null}),pe(),n=f[t],n?n.p(d,m):(n=f[t]=c[t](d),n.c()),Q(n,1),n.m(e,null)),m&5&&i!==(i=d[0][d[2].id]?"Collapse":"Expand")&&r(e,"aria-label",i)},d(d){d&&h(e),f[t].d(),s=!1,o()}}}function Sn(l){let e,t,n,i;return{c(){e=E("svg"),t=E("path"),r(t,"d","M9 18l6-6-6-6"),r(e,"width","10"),r(e,"height","10"),r(e,"viewBox","0 0 24 24"),r(e,"fill","currentColor")},m(s,o){v(s,e,o),a(e,t),i=!0},p(s,o){l=s},i(s){i||(s&&ze(()=>{i&&(n||(n=$e(e,rotate,l[0][l[2].id]?90:0,!0)),n.run(1))}),i=!0)},o(s){s&&(n||(n=$e(e,rotate,l[0][l[2].id]?90:0,!1)),n.run(0)),i=!1},d(s){s&&h(e),s&&n&&n.end()}}}function In(l){let e,t;return{c(){e=E("svg"),t=E("path"),r(t,"d","M12 2v4M12 18v4M4.93 4.93l2.83 2.83M16.24 16.24l2.83 2.83M2 12h4M18 12h4M4.93 19.07l2.83-2.83M16.24 7.76l2.83-2.83"),r(e,"width","10"),r(e,"height","10"),r(e,"viewBox","0 0 24 24"),r(e,"fill","currentColor"),r(e,"class","spin svelte-1fc98j1")},m(n,i){v(n,e,i),a(e,t)},p:D,i:D,o:D,d(n){n&&h(e)}}}function En(l){let e,t=tt(l[2].size)+"",n,i,s,o,c,f=lt(l[2].mime)+"",u;return{c(){e=_("span"),n=I(t),i=F(),s=_("span"),s.textContent="·",o=F(),c=_("span"),u=I(f),r(s,"class","meta-sep svelte-1fc98j1")},m(d,m){v(d,e,m),a(e,n),v(d,i,m),v(d,s,m),v(d,o,m),v(d,c,m),a(c,u)},p(d,m){m&4&&t!==(t=tt(d[2].size)+"")&&B(n,t),m&4&&f!==(f=lt(d[2].mime)+"")&&B(u,f)},d(d){d&&(h(e),h(i),h(s),h(o),h(c))}}}function Ln(l){let e,t,n,i=l[1][l[2].id]&&l[1][l[2].id].length>0&&it(l);return{c(){e=_("span"),e.textContent="Folder",t=F(),i&&i.c(),n=ue()},m(s,o){v(s,e,o),v(s,t,o),i&&i.m(s,o),v(s,n,o)},p(s,o){s[1][s[2].id]&&s[1][s[2].id].length>0?i?i.p(s,o):(i=it(s),i.c(),i.m(n.parentNode,n)):i&&(i.d(1),i=null)},d(s){s&&(h(e),h(t),h(n)),i&&i.d(s)}}}function it(l){let e,t,n,i=l[1][l[2].id].length+"",s,o,c=l[1][l[2].id].length===1?"item":"items",f;return{c(){e=_("span"),e.textContent="·",t=F(),n=_("span"),s=I(i),o=F(),f=I(c),r(e,"class","meta-sep svelte-1fc98j1")},m(u,d){v(u,e,d),v(u,t,d),v(u,n,d),a(n,s),a(n,o),a(n,f)},p(u,d){d&6&&i!==(i=u[1][u[2].id].length+"")&&B(s,i),d&6&&c!==(c=u[1][u[2].id].length===1?"item":"items")&&B(f,c)},d(u){u&&(h(e),h(t),h(n))}}}function st(l){let e,t,n=Z(l[1][l[2].id]),i=[];for(let o=0;oee(i[o],1,1,()=>{i[o]=null});return{c(){for(let o=0;o{S=null}),pe())},i(y){x||(Q(i.$$.fragment,y),Q(z.$$.fragment,y),Q(S),x=!0)},o(y){ee(i.$$.fragment,y),ee(z.$$.fragment,y),ee(S),x=!1},d(y){y&&(h(e),h(g),h(k)),O.d(),Me(i),N.d(),Me(z),S&&S.d(y)}}}function On(l,...e){var t,n,i;try{const s=(i=(n=(t=window==null?void 0:window.go)==null?void 0:t.main)==null?void 0:n.App)==null?void 0:i[l];if(typeof s=="function")return s(...e)}catch(s){console.error("Wails call error:",l,s)}}function jn(l,e,t){let{item:n}=e,{expanded:i={}}=e,{childrenMap:s={}}=e,{depth:o=0}=e;const c=Xt();let f=!1;async function u(){const C=n.id;if(i[C]){t(0,i={...i,[C]:!1});return}if(t(4,f=!0),t(0,i={...i,[C]:!0}),!s[C]){try{t(1,s[C]=await On("ListItems",C)||[],s)}catch{t(1,s[C]=[],s)}t(1,s={...s})}t(4,f=!1)}const d=Fn(n),m=n.type==="folder",p=C=>c("open",C.detail),b=C=>c("openFolder",C.detail),z=C=>c("delete",C.detail);function g(C){De.call(this,l,C)}function k(C){De.call(this,l,C)}function x(C){De.call(this,l,C)}return l.$$set=C=>{"item"in C&&t(2,n=C.item),"expanded"in C&&t(0,i=C.expanded),"childrenMap"in C&&t(1,s=C.childrenMap),"depth"in C&&t(3,o=C.depth)},[i,s,n,o,f,c,u,d,m,p,b,z,g,k,x]}class Qt extends Ae{constructor(e){super(),Le(this,e,jn,An,Ee,{item:2,expanded:0,childrenMap:1,depth:3})}}function rt(l,e,t){const n=l.slice();return n[80]=e[t],n}function ft(l,e,t){const n=l.slice();return n[83]=e[t],n}function ct(l,e,t){const n=l.slice();return n[94]=e[t],n}function at(l,e,t){const n=l.slice();return n[91]=e[t],n}function ut(l,e,t){const n=l.slice();return n[86]=e[t],n}function dt(l,e,t){const n=l.slice();return n[83]=e[t],n}function pt(l,e,t){const n=l.slice();return n[86]=e[t],n}function _t(l,e,t){const n=l.slice();return n[99]=e[t],n}function mt(l,e,t){const n=l.slice();return n[80]=e[t],n}function ht(l,e,t){const n=l.slice();return n[104]=e[t],n}function vt(l,e,t){const n=l.slice();return n[107]=e[t],n}function bt(l){let e,t=l[107].label+"",n,i,s,o,c;function f(){return l[48](l[107])}return{c(){e=_("button"),n=I(t),i=F(),r(e,"class",s="nav-item "+(l[4]===l[107].id?"selected":"")+" svelte-1dzzaxf")},m(u,d){v(u,e,d),a(e,n),a(e,i),o||(c=T(e,"click",f),o=!0)},p(u,d){l=u,d[0]&1&&t!==(t=l[107].label+"")&&B(n,t),d[0]&17&&s!==(s="nav-item "+(l[4]===l[107].id?"selected":"")+" svelte-1dzzaxf")&&r(e,"class",s)},d(u){u&&h(e),o=!1,c()}}}function zt(l){let e,t,n,i,s,o=l[1].length>0&>(l),c=Z(l[1]),f=[];for(let d=0;d0?o?o.p(d,m):(o=gt(d),o.c(),o.m(t,null)):o&&(o.d(1),o=null),m[0]&268435490){c=Z(d[1]);let p;for(p=0;p0)return qn;if(c[3])return Rn}let s=i(l),o=s&&s(l);return{c(){e=_("div"),t=_("h2"),t.textContent="Верстак",n=F(),o&&o.c(),r(t,"class","svelte-1dzzaxf"),r(e,"class","welcome svelte-1dzzaxf")},m(c,f){v(c,e,f),a(e,t),a(e,n),o&&o.m(e,null)},p(c,f){s===(s=i(c))&&o?o.p(c,f):(o&&o.d(1),o=s&&s(c),o&&(o.c(),o.m(e,null)))},i:D,o:D,d(c){c&&h(e),o&&o.d()}}}function Bn(l){let e,t,n,i,s,o,c=Z(l[26]),f=[];for(let p=0;p{d[z]=null}),pe()),~i?(s=d[i],s?s.p(p,b):(s=d[i]=u[i](p),s.c()),Q(s,1),s.m(n,null)):s=null)},i(p){o||(Q(s),o=!0)},o(p){ee(s),o=!1},d(p){p&&(h(e),h(t),h(n)),re(f,p),~i&&d[i].d()}}}function Vn(l){let e,t,n,i=l[8].title+"",s,o,c,f,u,d,m,p,b,z,g,k=l[8].dirty&&Pt();return{c(){e=_("div"),t=_("div"),n=_("span"),s=I(i),o=F(),k&&k.c(),c=F(),f=_("div"),u=_("button"),u.textContent="Сохранить",d=F(),m=_("button"),m.textContent="Закрыть",p=F(),b=_("textarea"),r(n,"class","note-title svelte-1dzzaxf"),r(u,"class","btn btn-primary svelte-1dzzaxf"),r(m,"class","btn svelte-1dzzaxf"),r(f,"class","note-editor-actions svelte-1dzzaxf"),r(t,"class","note-editor-header svelte-1dzzaxf"),r(b,"class","note-textarea svelte-1dzzaxf"),r(b,"placeholder","Начните писать..."),r(e,"class","note-editor svelte-1dzzaxf")},m(x,C){v(x,e,C),a(e,t),a(t,n),a(n,s),a(t,o),k&&k.m(t,null),a(t,c),a(t,f),a(f,u),a(f,d),a(f,m),a(e,p),a(e,b),oe(b,l[8].content),z||(g=[T(u,"click",l[39]),T(m,"click",l[37]),T(b,"input",l[51]),T(b,"input",l[38])],z=!0)},p(x,C){C[0]&256&&i!==(i=x[8].title+"")&&B(s,i),x[8].dirty?k||(k=Pt(),k.c(),k.m(t,c)):k&&(k.d(1),k=null),C[0]&256&&oe(b,x[8].content)},i:D,o:D,d(x){x&&h(e),k&&k.d(),z=!1,te(g)}}}function Rn(l){let e,t,n;return{c(){e=_("p"),t=I("Ошибка: "),n=I(l[3]),r(e,"class","error-text svelte-1dzzaxf")},m(i,s){v(i,e,s),a(e,t),a(e,n)},p(i,s){s[0]&8&&B(n,i[3])},d(i){i&&h(e)}}}function qn(l){let e,t,n;return{c(){e=_("p"),e.textContent="Выберите раздел в боковой панели.",t=F(),n=_("p"),n.textContent="Или создайте новое дело кнопкой «+».",r(e,"class","svelte-1dzzaxf"),r(n,"class","hint svelte-1dzzaxf")},m(i,s){v(i,e,s),v(i,t,s),v(i,n,s)},p:D,d(i){i&&(h(e),h(t),h(n))}}}function Wn(l){let e;return{c(){e=_("p"),e.textContent="Загрузка...",r(e,"class","svelte-1dzzaxf")},m(t,n){v(t,e,n)},p:D,d(t){t&&h(e)}}}function Mt(l){let e,t=l[99].label+"",n,i,s;function o(){return l[52](l[99])}return{c(){e=_("button"),n=I(t),r(e,"class",Ol(l[47](l[99].id))+" svelte-1dzzaxf")},m(c,f){v(c,e,f),a(e,n),i||(s=T(e,"click",o),i=!0)},p(c,f){l=c},d(c){c&&h(e),i=!1,s()}}}function Gn(l){let e;return{c(){e=_("div"),e.innerHTML='Активность появится позже
',r(e,"class","empty-state svelte-1dzzaxf")},m(t,n){v(t,e,n)},p:D,i:D,o:D,d(t){t&&h(e)}}}function Kn(l){let e,t,n,i,s,o,c,f,u,d,m,p;function b(k,x){return k[10].length===0?Qn:Yn}let z=b(l),g=z(l);return{c(){e=_("div"),t=_("div"),n=_("input"),i=F(),s=_("input"),o=F(),c=_("button"),f=I("Записать"),d=F(),g.c(),r(n,"type","text"),r(n,"placeholder","Что сделано"),r(n,"class","svelte-1dzzaxf"),r(s,"type","number"),r(s,"placeholder","Мин"),r(s,"min","1"),r(s,"class","svelte-1dzzaxf"),r(c,"class","btn btn-primary svelte-1dzzaxf"),c.disabled=u=!l[12].trim()||!l[11],r(t,"class","worklog-form svelte-1dzzaxf"),r(e,"class","worklog-tab svelte-1dzzaxf")},m(k,x){v(k,e,x),a(e,t),a(t,n),oe(n,l[12]),a(t,i),a(t,s),oe(s,l[11]),a(t,o),a(t,c),a(c,f),a(e,d),g.m(e,null),m||(p=[T(n,"input",l[66]),T(s,"input",l[67]),T(c,"click",l[40])],m=!0)},p(k,x){x[0]&4096&&n.value!==k[12]&&oe(n,k[12]),x[0]&2048&&Ut(s.value)!==k[11]&&oe(s,k[11]),x[0]&6144&&u!==(u=!k[12].trim()||!k[11])&&(c.disabled=u),z===(z=b(k))&&g?g.p(k,x):(g.d(1),g=z(k),g&&(g.c(),g.m(e,null)))},i:D,o:D,d(k){k&&h(e),g.d(),m=!1,te(p)}}}function Jn(l){let e;function t(s,o){return s[9].length===0?ei:$n}let n=t(l),i=n(l);return{c(){i.c(),e=ue()},m(s,o){i.m(s,o),v(s,e,o)},p(s,o){n===(n=t(s))&&i?i.p(s,o):(i.d(1),i=n(s),i&&(i.c(),i.m(e.parentNode,e)))},i:D,o:D,d(s){s&&h(e),i.d(s)}}}function Un(l){let e,t,n,i,s,o,c,f,u,d,m,p,b,z;const g=[ni,li,ti],k=[];function x(L,O){return L[25]?0:L[22].length===0?1:2}u=x(l),d=k[u]=g[u](l);let C=l[19]&&!l[21]&&St();return{c(){e=_("div"),t=_("div"),n=_("button"),i=I("+ Добавить файл"),s=F(),o=_("button"),c=I("+ Добавить папку"),f=F(),d.c(),m=F(),C&&C.c(),r(n,"class","btn btn-primary svelte-1dzzaxf"),n.disabled=l[19],r(o,"class","btn svelte-1dzzaxf"),o.disabled=l[19],r(t,"class","tab-toolbar svelte-1dzzaxf"),r(e,"class","files-tab svelte-1dzzaxf")},m(L,O){v(L,e,O),a(e,t),a(t,n),a(n,i),a(t,s),a(t,o),a(o,c),a(e,f),k[u].m(e,null),a(e,m),C&&C.m(e,null),p=!0,b||(z=[T(n,"click",l[41]),T(o,"click",l[42])],b=!0)},p(L,O){(!p||O[0]&524288)&&(n.disabled=L[19]),(!p||O[0]&524288)&&(o.disabled=L[19]);let A=u;u=x(L),u===A?k[u].p(L,O):(de(),ee(k[A],1,1,()=>{k[A]=null}),pe(),d=k[u],d?d.p(L,O):(d=k[u]=g[u](L),d.c()),Q(d,1),d.m(e,m)),L[19]&&!L[21]?C||(C=St(),C.c(),C.m(e,null)):C&&(C.d(1),C=null)},i(L){p||(Q(d),p=!0)},o(L){ee(d),p=!1},d(L){L&&h(e),k[u].d(),C&&C.d(),b=!1,te(z)}}}function Zn(l){let e,t,n,i,s,o,c,f=l[16]&&It(l);function u(p,b){return p[7].length===0&&!p[16]?si:ii}let d=u(l),m=d(l);return{c(){e=_("div"),t=_("div"),n=_("button"),n.textContent="+ Добавить заметку",i=F(),f&&f.c(),s=F(),m.c(),r(n,"class","btn btn-primary svelte-1dzzaxf"),r(t,"class","tab-toolbar svelte-1dzzaxf"),r(e,"class","notes-tab svelte-1dzzaxf")},m(p,b){v(p,e,b),a(e,t),a(t,n),a(e,i),f&&f.m(e,null),a(e,s),m.m(e,null),o||(c=T(n,"click",l[33]),o=!0)},p(p,b){p[16]?f?f.p(p,b):(f=It(p),f.c(),f.m(e,s)):f&&(f.d(1),f=null),d===(d=u(p))&&m?m.p(p,b):(m.d(1),m=d(p),m&&(m.c(),m.m(e,null)))},i:D,o:D,d(p){p&&h(e),f&&f.d(),m.d(),o=!1,c()}}}function Xn(l){let e,t,n=l[5].title+"",i,s,o,c,f,u,d=l[5].type+"",m,p,b,z,g,k=(l[5].section||"—")+"",x,C,L,O,A,H=ae(l[5].createdAt)+"",N,S,y,P,q,G,le,U,X,K,ne,$,ie,J,R=l[7].length>0&&Lt(l),j=l[10].length>0&&Ot(l);return{c(){e=_("div"),t=_("h2"),i=I(n),s=F(),o=_("div"),c=_("div"),f=_("span"),f.textContent="Тип",u=_("span"),m=I(d),p=F(),b=_("div"),z=_("span"),z.textContent="Раздел",g=_("span"),x=I(k),C=F(),L=_("div"),O=_("span"),O.textContent="Создано",A=_("span"),N=I(H),S=F(),y=_("div"),P=_("button"),P.textContent="✏️ Новая заметка",q=F(),G=_("button"),G.textContent="📎 Добавить файл",le=F(),U=_("button"),U.textContent="⚡ Добавить действие",X=F(),K=_("button"),K.textContent="🕐 Записать время",ne=F(),R&&R.c(),$=F(),j&&j.c(),r(t,"class","svelte-1dzzaxf"),r(f,"class","meta-label svelte-1dzzaxf"),r(u,"class","svelte-1dzzaxf"),r(c,"class","meta-item svelte-1dzzaxf"),r(z,"class","meta-label svelte-1dzzaxf"),r(g,"class","svelte-1dzzaxf"),r(b,"class","meta-item svelte-1dzzaxf"),r(O,"class","meta-label svelte-1dzzaxf"),r(A,"class","svelte-1dzzaxf"),r(L,"class","meta-item svelte-1dzzaxf"),r(o,"class","meta-grid svelte-1dzzaxf"),r(P,"class","qa-btn svelte-1dzzaxf"),r(G,"class","qa-btn svelte-1dzzaxf"),r(U,"class","qa-btn svelte-1dzzaxf"),U.disabled=!0,r(U,"title","Следующий этап"),r(K,"class","qa-btn svelte-1dzzaxf"),r(y,"class","quick-actions svelte-1dzzaxf"),r(e,"class","overview svelte-1dzzaxf")},m(M,V){v(M,e,V),a(e,t),a(t,i),a(e,s),a(e,o),a(o,c),a(c,f),a(c,u),a(u,m),a(o,p),a(o,b),a(b,z),a(b,g),a(g,x),a(o,C),a(o,L),a(L,O),a(L,A),a(A,N),a(e,S),a(e,y),a(y,P),a(y,q),a(y,G),a(y,le),a(y,U),a(y,X),a(y,K),a(e,ne),R&&R.m(e,null),a(e,$),j&&j.m(e,null),ie||(J=[T(P,"click",l[53]),T(G,"click",l[54]),T(K,"click",l[55])],ie=!0)},p(M,V){V[0]&32&&n!==(n=M[5].title+"")&&B(i,n),V[0]&32&&d!==(d=M[5].type+"")&&B(m,d),V[0]&32&&k!==(k=(M[5].section||"—")+"")&&B(x,k),V[0]&32&&H!==(H=ae(M[5].createdAt)+"")&&B(N,H),M[7].length>0?R?R.p(M,V):(R=Lt(M),R.c(),R.m(e,$)):R&&(R.d(1),R=null),M[10].length>0?j?j.p(M,V):(j=Ot(M),j.c(),j.m(e,null)):j&&(j.d(1),j=null)},i:D,o:D,d(M){M&&h(e),R&&R.d(),j&&j.d(),ie=!1,te(J)}}}function Yn(l){let e,t=Z(l[10]),n=[];for(let i=0;iЗаписей работы пока нет
',r(e,"class","empty-state svelte-1dzzaxf")},m(t,n){v(t,e,n)},p:D,d(t){t&&h(e)}}}function Ft(l){let e,t,n=l[83].summary+"",i,s,o,c=l[83].minutes+"",f,u,d=ae(l[83].createdAt)+"",m,p;return{c(){e=_("div"),t=_("div"),i=I(n),s=F(),o=_("div"),f=I(c),u=I(" мин · "),m=I(d),p=F(),r(t,"class","svelte-1dzzaxf"),r(o,"class","wl-meta svelte-1dzzaxf"),r(e,"class","worklog-entry svelte-1dzzaxf")},m(b,z){v(b,e,z),a(e,t),a(t,i),a(e,s),a(e,o),a(o,f),a(o,u),a(o,m),a(e,p)},p(b,z){z[0]&1024&&n!==(n=b[83].summary+"")&&B(i,n),z[0]&1024&&c!==(c=b[83].minutes+"")&&B(f,c),z[0]&1024&&d!==(d=ae(b[83].createdAt)+"")&&B(m,d)},d(b){b&&h(e)}}}function $n(l){let e,t=Z(l[9]),n=[];for(let i=0;iДействий пока нет',r(e,"class","empty-state svelte-1dzzaxf")},m(t,n){v(t,e,n)},p:D,d(t){t&&h(e)}}}function xt(l){let e,t,n=l[94].title+"",i,s,o=l[94].type+"",c,f,u,d,m,p;function b(){return l[65](l[94])}return{c(){e=_("div"),t=_("span"),i=I(n),s=_("span"),c=I(o),f=F(),u=_("button"),u.textContent="Запустить",d=F(),r(t,"class","svelte-1dzzaxf"),r(s,"class","action-type svelte-1dzzaxf"),r(u,"class","btn btn-sm svelte-1dzzaxf"),r(e,"class","action-card svelte-1dzzaxf")},m(z,g){v(z,e,g),a(e,t),a(t,i),a(e,s),a(s,c),a(e,f),a(e,u),a(e,d),m||(p=T(u,"click",b),m=!0)},p(z,g){l=z,g[0]&512&&n!==(n=l[94].title+"")&&B(i,n),g[0]&512&&o!==(o=l[94].type+"")&&B(c,o)},d(z){z&&h(e),m=!1,p()}}}function ti(l){let e,t=[],n=new Map,i,s=Z(l[22]);const o=c=>c[91].id;for(let c=0;c ',n=F(),i=_("p"),i.textContent="В этом проекте пока нет файлов",s=F(),o=_("p"),o.textContent="Добавьте файл или папку, чтобы сохранить материалы проекта.",c=F(),f=_("div"),u=_("button"),u.textContent="Добавить файл",d=F(),m=_("button"),m.textContent="Добавить папку",r(t,"class","empty-icon svelte-1dzzaxf"),r(i,"class","svelte-1dzzaxf"),r(o,"class","hint svelte-1dzzaxf"),r(u,"class","btn btn-primary svelte-1dzzaxf"),r(m,"class","btn svelte-1dzzaxf"),r(f,"class","empty-actions svelte-1dzzaxf"),r(e,"class","empty-state svelte-1dzzaxf")},m(z,g){v(z,e,g),a(e,t),a(e,n),a(e,i),a(e,s),a(e,o),a(e,c),a(e,f),a(f,u),a(f,d),a(f,m),p||(b=[T(u,"click",l[41]),T(m,"click",l[42])],p=!0)},p:D,i:D,o:D,d(z){z&&h(e),p=!1,te(b)}}}function ni(l){let e;return{c(){e=_("div"),e.innerHTML='Загрузка...
',r(e,"class","empty-state svelte-1dzzaxf")},m(t,n){v(t,e,n)},p:D,i:D,o:D,d(t){t&&h(e)}}}function Nt(l,e){let t,n,i,s,o;function c(d){e[60](d)}function f(d){e[61](d)}let u={item:e[91]};return e[23]!==void 0&&(u.expanded=e[23]),e[24]!==void 0&&(u.childrenMap=e[24]),n=new Qt({props:u}),Se.push(()=>et(n,"expanded",c)),Se.push(()=>et(n,"childrenMap",f)),n.$on("delete",e[62]),n.$on("open",e[63]),n.$on("openFolder",e[64]),{key:l,first:null,c(){t=ue(),Ie(n.$$.fragment),this.first=t},m(d,m){v(d,t,m),Ce(n,d,m),o=!0},p(d,m){e=d;const p={};m[0]&4194304&&(p.item=e[91]),!i&&m[0]&8388608&&(i=!0,p.expanded=e[23],Qe(()=>i=!1)),!s&&m[0]&16777216&&(s=!0,p.childrenMap=e[24],Qe(()=>s=!1)),n.$set(p)},i(d){o||(Q(n.$$.fragment,d),o=!0)},o(d){ee(n.$$.fragment,d),o=!1},d(d){d&&h(t),Me(n,d)}}}function St(l){let e;return{c(){e=_("div"),e.innerHTML='Сканирование...
',r(e,"class","empty-state svelte-1dzzaxf")},m(t,n){v(t,e,n)},d(t){t&&h(e)}}}function It(l){let e,t,n,i,s,o,c,f,u;return{c(){e=_("div"),t=_("input"),n=F(),i=_("div"),s=_("button"),s.textContent="Создать",o=F(),c=_("button"),c.textContent="Отмена",r(t,"type","text"),r(t,"placeholder","Название заметки"),r(t,"class","svelte-1dzzaxf"),r(s,"class","btn btn-primary svelte-1dzzaxf"),r(c,"class","btn svelte-1dzzaxf"),r(i,"class","form-actions svelte-1dzzaxf"),r(e,"class","create-form svelte-1dzzaxf")},m(d,m){v(d,e,m),a(e,t),oe(t,l[17]),a(e,n),a(e,i),a(i,s),a(i,o),a(i,c),f||(u=[T(t,"input",l[57]),T(t,"keydown",l[58]),T(s,"click",l[35]),T(c,"click",l[34])],f=!0)},p(d,m){m[0]&131072&&t.value!==d[17]&&oe(t,d[17])},d(d){d&&h(e),f=!1,te(u)}}}function ii(l){let e,t=Z(l[7]),n=[];for(let i=0;iНет заметокСоздайте первую заметку для этого дела.
',r(e,"class","empty-state svelte-1dzzaxf")},m(t,n){v(t,e,n)},p:D,d(t){t&&h(e)}}}function Et(l){let e,t,n=l[86].title+"",i,s,o,c=ae(l[86].createdAt)+"",f,u,d,m;function p(){return l[59](l[86])}return{c(){e=_("div"),t=_("div"),i=I(n),s=F(),o=_("div"),f=I(c),u=F(),r(t,"class","note-card-title svelte-1dzzaxf"),r(o,"class","note-card-date svelte-1dzzaxf"),r(e,"class","note-card svelte-1dzzaxf")},m(b,z){v(b,e,z),a(e,t),a(t,i),a(e,s),a(e,o),a(o,f),a(e,u),d||(m=T(e,"click",p),d=!0)},p(b,z){l=b,z[0]&128&&n!==(n=l[86].title+"")&&B(i,n),z[0]&128&&c!==(c=ae(l[86].createdAt)+"")&&B(f,c)},d(b){b&&h(e),d=!1,m()}}}function Lt(l){let e,t,n,i=Z(l[7].slice(0,5)),s=[];for(let o=0;ol[70].call(b)),r(d,"class","form-group svelte-1dzzaxf"),r(k,"class","btn btn-primary svelte-1dzzaxf"),r(C,"class","btn svelte-1dzzaxf"),r(g,"class","modal-actions svelte-1dzzaxf"),r(t,"class","modal svelte-1dzzaxf"),r(e,"class","modal-overlay svelte-1dzzaxf")},m(N,S){v(N,e,S),a(e,t),a(t,n),a(t,i),a(t,s),a(s,o),a(s,c),a(s,f),oe(f,l[14]),a(t,u),a(t,d),a(d,m),a(d,p),a(d,b);for(let y=0;y⚒ Верстак ',i=F(),s=_("nav"),o=_("div"),c=_("div"),c.textContent="Разделы",f=F();for(let M=0;M{$[fe]=null}),pe(),A=$[O],A?A.p(M,V):(A=$[O]=ne[O](M),A.c()),Q(A,1),A.m(g,H)),!M[8]&&!M[5]?J?J.p(M,V):(J=Dt(M),J.c(),J.m(g,N)):J&&(J.d(1),J=null),M[13]?R?R.p(M,V):(R=Ht(M),R.c(),R.m(g,S)):R&&(R.d(1),R=null),M[21]&&M[20]?j?j.p(M,V):(j=Bt(M),j.c(),j.m(g,null)):j&&(j.d(1),j=null)},i(M){y||(Q(A),y=!0)},o(M){ee(A),y=!1},d(M){M&&h(e),re(q,M),G&&G.d(),X.d(),K&&K.d(),$[O].d(),J&&J.d(),R&&R.d(),j&&j.d()}}}function Y(l,...e){try{if(window.go&&window.go.main&&window.go.main.App){const t=window.go.main.App[l];if(typeof t=="function")return t(...e)}}catch(t){console.error("Wails call error:",l,t)}return Promise.reject(new Error("Wails not connected: "+l))}function ae(l){if(!l)return"";try{return new Date(l).toLocaleDateString("ru-RU",{day:"numeric",month:"short"})}catch{return l}}const Rt=l=>l.id!=="today"&&l.id!=="inbox";function ri(l,e,t){let n=[],i=[],s="",o="",c="",f=null,u="overview",d=[],m=null,p=[],b=[],z=[],g="",k="",x=!1,C="",L="clients",O=!1,A="",H=!0,N=!1,S=null,y=!1,P="",q=[],G={},le={},U=!1;const X=[{id:"overview",label:"Обзор"},{id:"notes",label:"Заметки"},{id:"files",label:"Файлы"},{id:"actions",label:"Действия"},{id:"worklog",label:"Журнал"},{id:"activity",label:"Активность"}];let K=null;Kl(async()=>{try{t(2,s=await Y("VerstakVersion")||"verstak-gui/v2"),t(0,n=await Y("ListSections")||[])}catch(w){t(3,o=String(w)),t(0,n=[{id:"today",label:"Сегодня"},{id:"inbox",label:"Неразобранное"},{id:"clients",label:"Клиенты"},{id:"projects",label:"Проекты"},{id:"recipes",label:"Рецепты"},{id:"documents",label:"Документы"},{id:"archive",label:"Архив"}])}window.runtime&&window.runtime.EventsOn&&(window.runtime.EventsOn("files-dropped",sl),K=()=>window.runtime.EventsOff("files-dropped")),t(18,H=!1)}),Jl(()=>{K&&K()});async function ne(w){t(4,c=w),t(5,f=null),t(6,u="overview"),t(7,d=[]),p=[],t(9,b=[]),t(10,z=[]),t(13,x=!1),t(3,o="");try{t(1,i=await Y("ListNodesBySection",w)||[])}catch(W){t(3,o=String(W)),t(1,i=[])}}async function $(w){t(5,f=w),t(6,u="overview"),t(7,d=[]),p=[],t(9,b=[]),t(10,z=[]),t(22,q=[]),t(23,G={}),t(24,le={}),t(8,m=null),t(13,x=!1),t(16,O=!1),t(3,o=""),await ie(w.id)}async function ie(w){try{t(7,d=await Y("ListNotes",w)||[])}catch{}try{p=await Y("ListFiles",w)||[]}catch{}try{t(9,b=await Y("ListActions",w)||[])}catch{}try{t(10,z=await Y("ListWorklog",w)||[])}catch{}}async function J(w){t(25,U=!0);try{t(22,q=await Y("ListItems",w)||[])}catch{t(22,q=[])}t(25,U=!1)}function R(){t(13,x=!0),t(14,C=""),t(15,L=c||"clients")}function j(){t(13,x=!1),t(14,C="")}async function M(){if(C.trim())try{const w=await Y("CreateNode","","case",C.trim(),L);t(13,x=!1),t(14,C=""),await ne(L)}catch(w){t(3,o=String(w))}}function V(){t(16,O=!0),t(17,A="")}function fe(){t(16,O=!1),t(17,A="")}async function se(){if(!(!A.trim()||!f))try{const w=await Y("CreateNote",f.id,A.trim());t(7,d=[...d,w&&w.id?w:{id:Date.now().toString(),title:A.trim(),createdAt:new Date().toISOString()}]),t(16,O=!1),t(17,A="")}catch{const W={id:Date.now().toString(),title:A.trim(),createdAt:new Date().toISOString()};t(7,d=[...d,W]),t(16,O=!1),t(17,A="")}}async function _e(w){if(!(m&&m.dirty&&!confirm("Несохранённые изменения. Закрыть?")))try{const W=await Y("ReadNote",w.id);t(8,m={id:w.id,title:w.title,content:W||"",dirty:!1})}catch{t(8,m={id:w.id,title:w.title,content:"# "+w.title+`
+
+`,dirty:!1})}}function $t(){m&&m.dirty&&!confirm("Несохранённые изменения. Закрыть?")||t(8,m=null)}function el(w){m&&(t(8,m.content=w.target.value,m),t(8,m.dirty=!0,m))}async function tl(){if(m)try{await Y("SaveNote",m.id,m.content),t(8,m.dirty=!1,m)}catch{t(8,m.dirty=!1,m)}}async function ll(){const w=parseInt(g,10);if(!(!k.trim()||isNaN(w)||w<=0||!f)){try{const W=await Y("CreateWorklog",f.id,k.trim(),w);t(10,z=[...z,W&&W.id?W:{id:Date.now().toString(),nodeId:f.id,summary:k.trim(),minutes:w,createdAt:new Date().toISOString()}])}catch{t(10,z=[...z,{id:Date.now().toString(),nodeId:f.id,summary:k.trim(),minutes:w,createdAt:new Date().toISOString()}])}t(12,k=""),t(11,g="")}}async function Ge(){const w=await Y("PickFile");w&&await Oe(f.id,w)}async function nl(){const w=await Y("PickDirectory");w&&await Oe(f.id,w)}async function Oe(w,W){t(19,N=!0);try{const ge=await Y("PreviewImport",W);t(20,S=ge),P=W,t(21,y=!0)}catch(ge){t(3,o=String(ge))}t(19,N=!1)}async function je(w){try{const W=w==="copy"?await Y("AddPathCopy",f.id,P):await Y("AddPathLink",f.id,P);t(21,y=!1),t(20,S=null),t(23,G={}),t(24,le={}),await Promise.all([ie(f.id),J(f.id)])}catch(W){t(3,o=String(W))}}function il(){t(21,y=!1),t(20,S=null)}async function Ke(w){if(confirm("Удалить файл?")){console.log("deleteFile called with:",w);try{const W=await Y("DeleteFileOrFolder",w);console.log("DeleteFileOrFolder result:",W),p=p.filter(ge=>ge.nodeId!==w),t(23,G={}),t(24,le={}),await J(f.id),console.log("Tree reloaded, items:",q.length)}catch(W){console.error("deleteFile error:",W),t(3,o=String(W))}}}async function Je(w){try{await Y("OpenFile",w)}catch(W){t(3,o=String(W))}}async function sl(w){if(!w||w.length===0)return;if(!f){t(3,o="Сначала выберите дело для добавления файлов");return}const W=w[0];await Oe(f.id,W)}function ol(w){return u===w?"tab active":"tab"}const rl=w=>ne(w.id),fl=w=>$(w),cl=()=>t(3,o="");function al(){m.content=this.value,t(8,m)}const ul=w=>{t(6,u=w.id),w.id==="files"&&f&&q.length===0&&J(f.id)},dl=()=>{t(6,u="notes"),V()},pl=()=>{t(6,u="files"),Ge()},_l=()=>t(6,u="worklog"),ml=w=>_e(w);function hl(){A=this.value,t(17,A)}const vl=w=>w.key==="Enter"&&se(),bl=w=>_e(w);function zl(w){G=w,t(23,G)}function gl(w){le=w,t(24,le)}const kl=w=>Ke(w.detail),yl=w=>Je(w.detail),wl=w=>console.log("open folder",w.detail),Cl=w=>Y("RunAction",w.id);function Ml(){k=this.value,t(12,k)}function Fl(){g=Ut(this.value),t(11,g)}function xl(){C=this.value,t(14,C)}const Nl=w=>w.key==="Enter"&&M();function Sl(){L=Bl(this),t(15,L),t(0,n)}return[n,i,s,o,c,f,u,d,m,b,z,g,k,x,C,L,O,A,H,N,S,y,q,G,le,U,X,ne,$,J,R,j,M,V,fe,se,_e,$t,el,tl,ll,Ge,nl,je,il,Ke,Je,ol,rl,fl,cl,al,ul,dl,pl,_l,ml,hl,vl,bl,zl,gl,kl,yl,wl,Cl,Ml,Fl,xl,Nl,Sl,()=>je("copy"),()=>je("link")]}class fi extends Ae{constructor(e){super(),Le(this,e,ri,oi,Ee,{},null,[-1,-1,-1,-1])}}new fi({target:document.getElementById("app")});
diff --git a/cmd/verstak-gui/frontend-dist/assets/main-BjkBVutb.js b/cmd/verstak-gui/frontend-dist/assets/main-BjkBVutb.js
new file mode 100644
index 0000000..ead8961
--- /dev/null
+++ b/cmd/verstak-gui/frontend-dist/assets/main-BjkBVutb.js
@@ -0,0 +1,3 @@
+var bl=Object.defineProperty;var zl=(l,e,t)=>e in l?bl(l,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):l[e]=t;var Le=(l,e,t)=>zl(l,typeof e!="symbol"?e+"":e,t);(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const i of document.querySelectorAll('link[rel="modulepreload"]'))n(i);new MutationObserver(i=>{for(const s of i)if(s.type==="childList")for(const o of s.addedNodes)o.tagName==="LINK"&&o.rel==="modulepreload"&&n(o)}).observe(document,{childList:!0,subtree:!0});function t(i){const s={};return i.integrity&&(s.integrity=i.integrity),i.referrerPolicy&&(s.referrerPolicy=i.referrerPolicy),i.crossOrigin==="use-credentials"?s.credentials="include":i.crossOrigin==="anonymous"?s.credentials="omit":s.credentials="same-origin",s}function n(i){if(i.ep)return;i.ep=!0;const s=t(i);fetch(i.href,s)}})();function T(){}function Ot(l){return l()}function Ve(){return Object.create(null)}function se(l){l.forEach(Ot)}function jt(l){return typeof l=="function"}function xe(l,e){return l!=l?e==e:l!==e||l&&typeof l=="object"||typeof l=="function"}function kl(l){return Object.keys(l).length===0}function gl(l){return l??""}function a(l,e){l.appendChild(e)}function v(l,e,t){l.insertBefore(e,t||null)}function h(l){l.parentNode&&l.parentNode.removeChild(l)}function fe(l,e){for(let t=0;tl.removeEventListener(e,t,n)}function Pt(l){return function(e){e.target===this&&l.call(this,e)}}function f(l,e,t){t==null?l.removeAttribute(e):l.getAttribute(e)!==t&&l.setAttribute(e,t)}function Dt(l){return l===""?null:+l}function yl(l){return Array.from(l.childNodes)}function B(l,e){e=""+e,l.data!==e&&(l.data=e)}function oe(l,e){l.value=e??""}function We(l,e,t,n){t==null?l.style.removeProperty(e):l.style.setProperty(e,t,"")}function qe(l,e,t){for(let n=0;n{const i=l.$$.callbacks[e];if(i){const s=Ml(e,t,{cancelable:n});return i.slice().forEach(o=>{o.call(l,s)}),!s.defaultPrevented}return!0}}function Ae(l,e){const t=l.$$.callbacks[e.type];t&&t.slice().forEach(n=>n.call(this,e))}const _e=[],we=[];let me=[];const je=[],Fl=Promise.resolve();let Pe=!1;function Nl(){Pe||(Pe=!0,Fl.then(Bt))}function Ce(l){me.push(l)}function Re(l){je.push(l)}const Oe=new Set;let pe=0;function Bt(){if(pe!==0)return;const l=ze;do{try{for(;pe<_e.length;){const e=_e[pe];pe++,be(e),Il(e.$$)}}catch(e){throw _e.length=0,pe=0,e}for(be(null),_e.length=0,pe=0;we.length;)we.pop()();for(let e=0;el.indexOf(n)===-1?e.push(n):t.push(n)),t.forEach(n=>n()),me=e}const ye=new Set;let ae;function he(){ae={r:0,c:[],p:ae}}function ve(){ae.r||se(ae.c),ae=ae.p}function Q(l,e){l&&l.i&&(ye.delete(l),l.i(e))}function ee(l,e,t,n){if(l&&l.o){if(ye.has(l))return;ye.add(l),ae.c.push(()=>{ye.delete(l),n&&(t&&l.d(1),n())}),l.o(e)}else n&&n()}function Z(l){return(l==null?void 0:l.length)!==void 0?l:Array.from(l)}function Ll(l,e){ee(l,1,1,()=>{e.delete(l.key)})}function Al(l,e,t,n,i,s,o,r,c,u,d,m){let _=l.length,b=s.length,z=_;const k={};for(;z--;)k[l[z].key]=z;const y=[],F=new Map,M=new Map,L=[];for(z=b;z--;){const S=m(i,s,z),N=t(S);let g=o.get(N);g?L.push(()=>g.p(S,e)):(g=u(N,S),g.c()),F.set(N,y[z]=g),N in k&&M.set(N,Math.abs(z-k[N]))}const A=new Set,O=new Set;function H(S){Q(S,1),S.m(r,d),o.set(S.key,S),d=S.first,b--}for(;_&&b;){const S=y[b-1],N=l[_-1],g=S.key,P=N.key;S===N?(d=S.first,_--,b--):F.has(P)?!o.has(g)||A.has(g)?H(S):O.has(P)?_--:M.get(g)>M.get(P)?(O.add(g),H(S)):(A.add(P),_--):(c(N,o),_--)}for(;_--;){const S=l[_];F.has(S.key)||c(S,o)}for(;b;)H(y[b-1]);return se(L),y}function Ge(l,e,t){const n=l.$$.props[e];n!==void 0&&(l.$$.bound[n]=t,t(l.$$.ctx[n]))}function Me(l){l&&l.c()}function ke(l,e,t){const{fragment:n,after_update:i}=l.$$;n&&n.m(e,t),Ce(()=>{const s=l.$$.on_mount.map(Ot).filter(jt);l.$$.on_destroy?l.$$.on_destroy.push(...s):se(s),l.$$.on_mount=[]}),i.forEach(Ce)}function ge(l,e){const t=l.$$;t.fragment!==null&&(El(t.after_update),se(t.on_destroy),t.fragment&&t.fragment.d(e),t.on_destroy=t.fragment=null,t.ctx=[])}function Ol(l,e){l.$$.dirty[0]===-1&&(_e.push(l),Nl(),l.$$.dirty.fill(0)),l.$$.dirty[e/31|0]|=1<{const z=b.length?b[0]:_;return u.ctx&&i(u.ctx[m],u.ctx[m]=z)&&(!u.skip_bound&&u.bound[m]&&u.bound[m](z),d&&Ol(l,m)),_}):[],u.update(),d=!0,se(u.before_update),u.fragment=n?n(u.ctx):!1,e.target){if(e.hydrate){const m=yl(e.target);u.fragment&&u.fragment.l(m),m.forEach(h)}else u.fragment&&u.fragment.c();e.intro&&Q(l.$$.fragment),ke(l,e.target,e.anchor),Bt()}be(c)}class Fe{constructor(){Le(this,"$$");Le(this,"$$set")}$destroy(){ge(this,1),this.$destroy=T}$on(e,t){if(!jt(t))return T;const n=this.$$.callbacks[e]||(this.$$.callbacks[e]=[]);return n.push(t),()=>{const i=n.indexOf(t);i!==-1&&n.splice(i,1)}}$set(e){this.$$set&&!kl(e)&&(this.$$.skip_bound=!0,this.$$set(e),this.$$.skip_bound=!1)}}const jl="4";typeof window<"u"&&(window.__svelte||(window.__svelte={v:new Set})).v.add(jl);function Pl(l){let e,t;return{c(){e=E("path"),t=E("polyline"),f(e,"d","M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"),f(t,"points","14 2 14 8 20 8")},m(n,i){v(n,e,i),v(n,t,i)},d(n){n&&(h(e),h(t))}}}function Dl(l){let e,t,n,i,s;return{c(){e=E("path"),t=E("polyline"),n=E("line"),i=E("line"),s=E("polyline"),f(e,"d","M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"),f(t,"points","14 2 14 8 20 8"),f(n,"x1","16"),f(n,"y1","13"),f(n,"x2","8"),f(n,"y2","13"),f(i,"x1","16"),f(i,"y1","17"),f(i,"x2","8"),f(i,"y2","17"),f(s,"points","10 9 9 9 8 9")},m(o,r){v(o,e,r),v(o,t,r),v(o,n,r),v(o,i,r),v(o,s,r)},d(o){o&&(h(e),h(t),h(n),h(i),h(s))}}}function Hl(l){let e,t;return{c(){e=E("polyline"),t=E("polyline"),f(e,"points","16 18 22 12 16 6"),f(t,"points","8 6 2 12 8 18")},m(n,i){v(n,e,i),v(n,t,i)},d(n){n&&(h(e),h(t))}}}function Bl(l){let e,t,n,i;return{c(){e=E("path"),t=E("polyline"),n=E("line"),i=E("rect"),f(e,"d","M21 8v13a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8"),f(t,"points","7 3 12 8 17 3"),f(n,"x1","3"),f(n,"y1","8"),f(n,"x2","21"),f(n,"y2","8"),f(i,"x","10"),f(i,"y","12"),f(i,"width","4"),f(i,"height","4"),f(i,"rx","1")},m(s,o){v(s,e,o),v(s,t,o),v(s,n,o),v(s,i,o)},d(s){s&&(h(e),h(t),h(n),h(i))}}}function Tl(l){let e,t,n,i,s;return{c(){e=E("path"),t=E("polyline"),n=E("line"),i=E("line"),s=E("line"),f(e,"d","M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"),f(t,"points","14 2 14 8 20 8"),f(n,"x1","9"),f(n,"y1","12"),f(n,"x2","15"),f(n,"y2","12"),f(i,"x1","9"),f(i,"y1","15"),f(i,"x2","13"),f(i,"y2","15"),f(s,"x1","12"),f(s,"y1","15"),f(s,"x2","12"),f(s,"y2","18")},m(o,r){v(o,e,r),v(o,t,r),v(o,n,r),v(o,i,r),v(o,s,r)},d(o){o&&(h(e),h(t),h(n),h(i),h(s))}}}function Vl(l){let e,t,n,i,s,o;return{c(){e=E("path"),t=E("polyline"),n=E("line"),i=E("line"),s=E("line"),o=E("line"),f(e,"d","M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"),f(t,"points","14 2 14 8 20 8"),f(n,"x1","8"),f(n,"y1","12"),f(n,"x2","16"),f(n,"y2","12"),f(i,"x1","8"),f(i,"y1","16"),f(i,"x2","16"),f(i,"y2","16"),f(s,"x1","8"),f(s,"y1","14"),f(s,"x2","12"),f(s,"y2","14"),f(o,"x1","12"),f(o,"y1","12"),f(o,"x2","12"),f(o,"y2","18")},m(r,c){v(r,e,c),v(r,t,c),v(r,n,c),v(r,i,c),v(r,s,c),v(r,o,c)},d(r){r&&(h(e),h(t),h(n),h(i),h(s),h(o))}}}function Wl(l){let e,t,n,i;return{c(){e=E("path"),t=E("polyline"),n=E("line"),i=E("line"),f(e,"d","M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"),f(t,"points","14 2 14 8 20 8"),f(n,"x1","16"),f(n,"y1","13"),f(n,"x2","8"),f(n,"y2","13"),f(i,"x1","16"),f(i,"y1","17"),f(i,"x2","8"),f(i,"y2","17")},m(s,o){v(s,e,o),v(s,t,o),v(s,n,o),v(s,i,o)},d(s){s&&(h(e),h(t),h(n),h(i))}}}function ql(l){let e,t,n,i,s;return{c(){e=E("path"),t=E("polyline"),n=E("line"),i=E("line"),s=E("line"),f(e,"d","M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"),f(t,"points","14 2 14 8 20 8"),f(n,"x1","8"),f(n,"y1","12"),f(n,"x2","16"),f(n,"y2","12"),f(i,"x1","8"),f(i,"y1","16"),f(i,"x2","16"),f(i,"y2","16"),f(s,"x1","8"),f(s,"y1","14"),f(s,"x2","12"),f(s,"y2","14")},m(o,r){v(o,e,r),v(o,t,r),v(o,n,r),v(o,i,r),v(o,s,r)},d(o){o&&(h(e),h(t),h(n),h(i),h(s))}}}function Rl(l){let e,t,n;return{c(){e=E("path"),t=E("circle"),n=E("circle"),f(e,"d","M9 18V5l12-2v13"),f(t,"cx","6"),f(t,"cy","18"),f(t,"r","3"),f(n,"cx","18"),f(n,"cy","16"),f(n,"r","3")},m(i,s){v(i,e,s),v(i,t,s),v(i,n,s)},d(i){i&&(h(e),h(t),h(n))}}}function Gl(l){let e,t;return{c(){e=E("rect"),t=E("polyline"),f(e,"x","2"),f(e,"y","4"),f(e,"width","20"),f(e,"height","16"),f(e,"rx","2"),f(t,"points","10 9 16 12 10 15 10 9")},m(n,i){v(n,e,i),v(n,t,i)},d(n){n&&(h(e),h(t))}}}function Kl(l){let e,t,n;return{c(){e=E("rect"),t=E("circle"),n=E("polyline"),f(e,"x","3"),f(e,"y","3"),f(e,"width","18"),f(e,"height","18"),f(e,"rx","2"),f(e,"ry","2"),f(t,"cx","8.5"),f(t,"cy","8.5"),f(t,"r","1.5"),f(n,"points","21 15 16 10 5 21")},m(i,s){v(i,e,s),v(i,t,s),v(i,n,s)},d(i){i&&(h(e),h(t),h(n))}}}function Jl(l){let e;return{c(){e=E("path"),f(e,"d","M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z")},m(t,n){v(t,e,n)},d(t){t&&h(e)}}}function Ul(l){let e;function t(s,o){return s[0]==="folder"?Jl:s[0]==="image"?Kl:s[0]==="video"?Gl:s[0]==="audio"?Rl:s[0]==="pdf"?ql:s[0]==="document"?Wl:s[0]==="spreadsheet"?Vl:s[0]==="presentation"?Tl:s[0]==="archive"?Bl:s[0]==="code"?Hl:s[0]==="text"?Dl:Pl}let n=t(l),i=n(l);return{c(){e=E("svg"),i.c(),f(e,"width",l[1]),f(e,"height",l[1]),f(e,"viewBox","0 0 24 24"),f(e,"fill","none"),f(e,"stroke","currentColor"),f(e,"stroke-width","1.5"),f(e,"stroke-linecap","round"),f(e,"stroke-linejoin","round"),f(e,"xmlns","http://www.w3.org/2000/svg")},m(s,o){v(s,e,o),i.m(e,null)},p(s,[o]){n!==(n=t(s))&&(i.d(1),i=n(s),i&&(i.c(),i.m(e,null))),o&2&&f(e,"width",s[1]),o&2&&f(e,"height",s[1])},i:T,o:T,d(s){s&&h(e),i.d()}}}function Zl(l,e,t){let{kind:n="generic"}=e,{size:i=20}=e;return l.$$set=s=>{"kind"in s&&t(0,n=s.kind),"size"in s&&t(1,i=s.size)},[n,i]}class Xl extends Fe{constructor(e){super(),Se(this,e,Zl,Ul,xe,{kind:0,size:1})}}function Yl(l){let e,t,n;return{c(){e=E("path"),t=E("polyline"),n=E("line"),f(e,"d","M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"),f(t,"points","15 3 21 3 21 9"),f(n,"x1","10"),f(n,"y1","14"),f(n,"x2","21"),f(n,"y2","3")},m(i,s){v(i,e,s),v(i,t,s),v(i,n,s)},d(i){i&&(h(e),h(t),h(n))}}}function Ql(l){let e,t;return{c(){e=E("path"),t=E("line"),f(e,"d","M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z"),f(t,"x1","9"),f(t,"y1","14"),f(t,"x2","15"),f(t,"y2","14")},m(n,i){v(n,e,i),v(n,t,i)},d(n){n&&(h(e),h(t))}}}function $l(l){let e,t,n,i,s,o,r,c,u;function d(b,z){return b[0]?Ql:Yl}let m=d(l),_=m(l);return{c(){e=p("div"),t=p("button"),n=E("svg"),_.c(),o=x(),r=p("button"),r.innerHTML=' ',f(n,"width","16"),f(n,"height","16"),f(n,"viewBox","0 0 24 24"),f(n,"fill","none"),f(n,"stroke","currentColor"),f(n,"stroke-width","2"),f(n,"stroke-linecap","round"),f(n,"stroke-linejoin","round"),f(t,"class","action-btn svelte-7ixqek"),f(t,"title",i=l[0]?"Open folder":"Open file"),f(t,"aria-label",s=l[0]?"Open folder":"Open file"),f(r,"class","action-btn action-btn-danger svelte-7ixqek"),f(r,"title","Delete"),f(r,"aria-label","Delete"),f(e,"class","file-actions svelte-7ixqek")},m(b,z){v(b,e,z),a(e,t),a(t,n),_.m(n,null),a(e,o),a(e,r),c||(u=[D(t,"click",l[1]),D(r,"click",l[2])],c=!0)},p(b,[z]){m!==(m=d(b))&&(_.d(1),_=m(b),_&&(_.c(),_.m(n,null))),z&1&&i!==(i=b[0]?"Open folder":"Open file")&&f(t,"title",i),z&1&&s!==(s=b[0]?"Open folder":"Open file")&&f(t,"aria-label",s)},i:T,o:T,d(b){b&&h(e),_.d(),c=!1,se(u)}}}function en(l,e,t){let{isFolder:n=!1}=e,{fileId:i=""}=e,{nodeId:s=""}=e;const o=Ht();function r(){n?o("openFolder",s):o("open",i)}function c(){o("delete",s)}return l.$$set=u=>{"isFolder"in u&&t(0,n=u.isFolder),"fileId"in u&&t(3,i=u.fileId),"nodeId"in u&&t(4,s=u.nodeId)},[n,r,c,i,s]}class tn extends Fe{constructor(e){super(),Se(this,e,en,$l,xe,{isFolder:0,fileId:3,nodeId:4})}}function Ke(l){if(l==null||l<0)return"—";if(l===0)return"0 B";const e=["B","KB","MB","GB"],t=Math.min(Math.floor(Math.log(l)/Math.log(1024)),e.length-1),n=l/Math.pow(1024,t);return(t===0?n.toFixed(0):n.toFixed(1))+" "+e[t]}const ln={"image/jpeg":"JPEG image","image/png":"PNG image","image/gif":"GIF image","image/webp":"WebP image","image/svg+xml":"SVG image","image/bmp":"BMP image","image/tiff":"TIFF image","image/avif":"AVIF image","application/pdf":"PDF document","application/msword":"Word document","application/vnd.openxmlformats-officedocument.wordprocessingml.document":"Word document","application/vnd.ms-excel":"Excel spreadsheet","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":"Excel spreadsheet","application/vnd.ms-powerpoint":"PowerPoint presentation","application/vnd.openxmlformats-officedocument.presentationml.presentation":"PowerPoint presentation","application/zip":"ZIP archive","application/gzip":"GZIP archive","application/x-tar":"TAR archive","application/x-7z-compressed":"7z archive","application/x-rar-compressed":"RAR archive","text/plain":"Text file","text/html":"HTML file","text/css":"CSS file","text/javascript":"JavaScript file","application/json":"JSON file","application/xml":"XML file","application/x-yaml":"YAML file","application/octet-stream":"Binary file","application/x-msdos-program":"Executable","inode/directory":"Folder"};function Je(l){return l?ln[l]||l:"Unknown"}function nn(l){if(l.type==="folder")return"folder";const e=(l.mime||"").toLowerCase();if(e.startsWith("image/"))return"image";if(e.startsWith("video/"))return"video";if(e.startsWith("audio/"))return"audio";if(e.startsWith("text/"))return"text";if(e.includes("pdf"))return"pdf";if(e.includes("word")||e.includes("document"))return"document";if(e.includes("spreadsheet")||e.includes("excel"))return"spreadsheet";if(e.includes("presentation")||e.includes("powerpoint"))return"presentation";if(e.includes("zip")||e.includes("tar")||e.includes("gzip")||e.includes("rar")||e.includes("7z")||e.includes("compress"))return"archive";if(e.includes("json")||e.includes("xml")||e.includes("yaml")||e.includes("javascript")||e.includes("css")||e.includes("html"))return"code";const n=(l.name||"").toLowerCase().split(".").pop();return["js","ts","jsx","tsx","vue","svelte","py","rs","go","c","cpp","h","hpp","java","kt","swift","rb","php","pl","sh","bash","zsh","fish","yml","yaml","json","xml","toml","ini","cfg","conf","md","markdown","css","scss","less","sass","sql","graphql","proto","gradle","cmake","makefile","dockerfile","env","gitignore"].includes(n)?"code":"generic"}function Ue(l,e,t){const n=l.slice();return n[15]=e[t],n}function sn(l){let e;return{c(){e=p("span"),f(e,"class","expand-spacer svelte-1fc98j1")},m(t,n){v(t,e,n)},p:T,d(t){t&&h(e)}}}function on(l){let e,t,n,i;function s(c,u){return c[4]?cn:fn}let o=s(l),r=o(l);return{c(){e=p("button"),r.c(),f(e,"class","expand-toggle svelte-1fc98j1"),f(e,"aria-label",t=l[0][l[2].id]?"Collapse":"Expand")},m(c,u){v(c,e,u),r.m(e,null),n||(i=D(e,"click",l[6]),n=!0)},p(c,u){o!==(o=s(c))&&(r.d(1),r=o(c),r&&(r.c(),r.m(e,null))),u&5&&t!==(t=c[0][c[2].id]?"Collapse":"Expand")&&f(e,"aria-label",t)},d(c){c&&h(e),r.d(),n=!1,i()}}}function fn(l){let e,t;return{c(){e=E("svg"),t=E("path"),f(t,"d","M9 18l6-6-6-6"),f(e,"width","10"),f(e,"height","10"),f(e,"viewBox","0 0 24 24"),f(e,"fill","currentColor")},m(n,i){v(n,e,i),a(e,t)},d(n){n&&h(e)}}}function cn(l){let e,t;return{c(){e=E("svg"),t=E("path"),f(t,"d","M12 2v4M12 18v4M4.93 4.93l2.83 2.83M16.24 16.24l2.83 2.83M2 12h4M18 12h4M4.93 19.07l2.83-2.83M16.24 7.76l2.83-2.83"),f(e,"width","10"),f(e,"height","10"),f(e,"viewBox","0 0 24 24"),f(e,"fill","currentColor"),f(e,"class","spin svelte-1fc98j1")},m(n,i){v(n,e,i),a(e,t)},d(n){n&&h(e)}}}function rn(l){let e,t=Ke(l[2].size)+"",n,i,s,o,r,c=Je(l[2].mime)+"",u;return{c(){e=p("span"),n=I(t),i=x(),s=p("span"),s.textContent="·",o=x(),r=p("span"),u=I(c),f(s,"class","meta-sep svelte-1fc98j1")},m(d,m){v(d,e,m),a(e,n),v(d,i,m),v(d,s,m),v(d,o,m),v(d,r,m),a(r,u)},p(d,m){m&4&&t!==(t=Ke(d[2].size)+"")&&B(n,t),m&4&&c!==(c=Je(d[2].mime)+"")&&B(u,c)},d(d){d&&(h(e),h(i),h(s),h(o),h(r))}}}function an(l){let e,t,n,i=l[1][l[2].id]&&l[1][l[2].id].length>0&&Ze(l);return{c(){e=p("span"),e.textContent="Folder",t=x(),i&&i.c(),n=ue()},m(s,o){v(s,e,o),v(s,t,o),i&&i.m(s,o),v(s,n,o)},p(s,o){s[1][s[2].id]&&s[1][s[2].id].length>0?i?i.p(s,o):(i=Ze(s),i.c(),i.m(n.parentNode,n)):i&&(i.d(1),i=null)},d(s){s&&(h(e),h(t),h(n)),i&&i.d(s)}}}function Ze(l){let e,t,n,i=l[1][l[2].id].length+"",s,o,r=l[1][l[2].id].length===1?"item":"items",c;return{c(){e=p("span"),e.textContent="·",t=x(),n=p("span"),s=I(i),o=x(),c=I(r),f(e,"class","meta-sep svelte-1fc98j1")},m(u,d){v(u,e,d),v(u,t,d),v(u,n,d),a(n,s),a(n,o),a(n,c)},p(u,d){d&6&&i!==(i=u[1][u[2].id].length+"")&&B(s,i),d&6&&r!==(r=u[1][u[2].id].length===1?"item":"items")&&B(c,r)},d(u){u&&(h(e),h(t),h(n))}}}function Xe(l){let e,t,n=Z(l[1][l[2].id]),i=[];for(let o=0;oee(i[o],1,1,()=>{i[o]=null});return{c(){for(let o=0;o{N=null}),ve())},i(g){F||(Q(i.$$.fragment,g),Q(z.$$.fragment,g),Q(N),F=!0)},o(g){ee(i.$$.fragment,g),ee(z.$$.fragment,g),ee(N),F=!1},d(g){g&&(h(e),h(k),h(y)),A.d(),ge(i),S.d(),ge(z),N&&N.d(g)}}}function dn(l,...e){var t,n,i;try{const s=(i=(n=(t=window==null?void 0:window.go)==null?void 0:t.main)==null?void 0:n.App)==null?void 0:i[l];if(typeof s=="function")return s(...e)}catch(s){console.error("Wails call error:",l,s)}}function pn(l,e,t){let{item:n}=e,{expanded:i={}}=e,{childrenMap:s={}}=e,{depth:o=0}=e;const r=Ht();let c=!1;async function u(){const M=n.id;if(i[M]){t(0,i={...i,[M]:!1});return}if(t(4,c=!0),t(0,i={...i,[M]:!0}),!s[M]){try{t(1,s[M]=await dn("ListItems",M)||[],s)}catch{t(1,s[M]=[],s)}t(1,s={...s})}t(4,c=!1)}const d=nn(n),m=n.type==="folder",_=M=>r("open",M.detail),b=M=>r("openFolder",M.detail),z=M=>r("delete",M.detail);function k(M){Ae.call(this,l,M)}function y(M){Ae.call(this,l,M)}function F(M){Ae.call(this,l,M)}return l.$$set=M=>{"item"in M&&t(2,n=M.item),"expanded"in M&&t(0,i=M.expanded),"childrenMap"in M&&t(1,s=M.childrenMap),"depth"in M&&t(3,o=M.depth)},[i,s,n,o,c,r,u,d,m,_,b,z,k,y,F]}class Tt extends Fe{constructor(e){super(),Se(this,e,pn,un,xe,{item:2,expanded:0,childrenMap:1,depth:3})}}function Qe(l,e,t){const n=l.slice();return n[80]=e[t],n}function $e(l,e,t){const n=l.slice();return n[83]=e[t],n}function et(l,e,t){const n=l.slice();return n[94]=e[t],n}function tt(l,e,t){const n=l.slice();return n[91]=e[t],n}function lt(l,e,t){const n=l.slice();return n[86]=e[t],n}function nt(l,e,t){const n=l.slice();return n[83]=e[t],n}function it(l,e,t){const n=l.slice();return n[86]=e[t],n}function st(l,e,t){const n=l.slice();return n[99]=e[t],n}function ot(l,e,t){const n=l.slice();return n[80]=e[t],n}function ft(l,e,t){const n=l.slice();return n[104]=e[t],n}function ct(l,e,t){const n=l.slice();return n[107]=e[t],n}function rt(l){let e,t=l[107].label+"",n,i,s,o,r;function c(){return l[48](l[107])}return{c(){e=p("button"),n=I(t),i=x(),f(e,"class",s="nav-item "+(l[4]===l[107].id?"selected":"")+" svelte-1dzzaxf")},m(u,d){v(u,e,d),a(e,n),a(e,i),o||(r=D(e,"click",c),o=!0)},p(u,d){l=u,d[0]&1&&t!==(t=l[107].label+"")&&B(n,t),d[0]&17&&s!==(s="nav-item "+(l[4]===l[107].id?"selected":"")+" svelte-1dzzaxf")&&f(e,"class",s)},d(u){u&&h(e),o=!1,r()}}}function at(l){let e,t,n,i,s,o=l[1].length>0&&ut(l),r=Z(l[1]),c=[];for(let d=0;d0?o?o.p(d,m):(o=ut(d),o.c(),o.m(t,null)):o&&(o.d(1),o=null),m[0]&268435490){r=Z(d[1]);let _;for(_=0;_0)return gn;if(r[3])return kn}let s=i(l),o=s&&s(l);return{c(){e=p("div"),t=p("h2"),t.textContent="Верстак",n=x(),o&&o.c(),f(t,"class","svelte-1dzzaxf"),f(e,"class","welcome svelte-1dzzaxf")},m(r,c){v(r,e,c),a(e,t),a(e,n),o&&o.m(e,null)},p(r,c){s===(s=i(r))&&o?o.p(r,c):(o&&o.d(1),o=s&&s(r),o&&(o.c(),o.m(e,null)))},i:T,o:T,d(r){r&&h(e),o&&o.d()}}}function bn(l){let e,t,n,i,s,o,r=Z(l[26]),c=[];for(let _=0;_{d[z]=null}),ve()),~i?(s=d[i],s?s.p(_,b):(s=d[i]=u[i](_),s.c()),Q(s,1),s.m(n,null)):s=null)},i(_){o||(Q(s),o=!0)},o(_){ee(s),o=!1},d(_){_&&(h(e),h(t),h(n)),fe(c,_),~i&&d[i].d()}}}function zn(l){let e,t,n,i=l[8].title+"",s,o,r,c,u,d,m,_,b,z,k,y=l[8].dirty&&St();return{c(){e=p("div"),t=p("div"),n=p("span"),s=I(i),o=x(),y&&y.c(),r=x(),c=p("div"),u=p("button"),u.textContent="Сохранить",d=x(),m=p("button"),m.textContent="Закрыть",_=x(),b=p("textarea"),f(n,"class","note-title svelte-1dzzaxf"),f(u,"class","btn btn-primary svelte-1dzzaxf"),f(m,"class","btn svelte-1dzzaxf"),f(c,"class","note-editor-actions svelte-1dzzaxf"),f(t,"class","note-editor-header svelte-1dzzaxf"),f(b,"class","note-textarea svelte-1dzzaxf"),f(b,"placeholder","Начните писать..."),f(e,"class","note-editor svelte-1dzzaxf")},m(F,M){v(F,e,M),a(e,t),a(t,n),a(n,s),a(t,o),y&&y.m(t,null),a(t,r),a(t,c),a(c,u),a(c,d),a(c,m),a(e,_),a(e,b),oe(b,l[8].content),z||(k=[D(u,"click",l[39]),D(m,"click",l[37]),D(b,"input",l[51]),D(b,"input",l[38])],z=!0)},p(F,M){M[0]&256&&i!==(i=F[8].title+"")&&B(s,i),F[8].dirty?y||(y=St(),y.c(),y.m(t,r)):y&&(y.d(1),y=null),M[0]&256&&oe(b,F[8].content)},i:T,o:T,d(F){F&&h(e),y&&y.d(),z=!1,se(k)}}}function kn(l){let e,t,n;return{c(){e=p("p"),t=I("Ошибка: "),n=I(l[3]),f(e,"class","error-text svelte-1dzzaxf")},m(i,s){v(i,e,s),a(e,t),a(e,n)},p(i,s){s[0]&8&&B(n,i[3])},d(i){i&&h(e)}}}function gn(l){let e,t,n;return{c(){e=p("p"),e.textContent="Выберите раздел в боковой панели.",t=x(),n=p("p"),n.textContent="Или создайте новое дело кнопкой «+».",f(e,"class","svelte-1dzzaxf"),f(n,"class","hint svelte-1dzzaxf")},m(i,s){v(i,e,s),v(i,t,s),v(i,n,s)},p:T,d(i){i&&(h(e),h(t),h(n))}}}function yn(l){let e;return{c(){e=p("p"),e.textContent="Загрузка...",f(e,"class","svelte-1dzzaxf")},m(t,n){v(t,e,n)},p:T,d(t){t&&h(e)}}}function ht(l){let e,t=l[99].label+"",n,i,s;function o(){return l[52](l[99])}return{c(){e=p("button"),n=I(t),f(e,"class",gl(l[47](l[99].id))+" svelte-1dzzaxf")},m(r,c){v(r,e,c),a(e,n),i||(s=D(e,"click",o),i=!0)},p(r,c){l=r},d(r){r&&h(e),i=!1,s()}}}function wn(l){let e;return{c(){e=p("div"),e.innerHTML='Активность появится позже
',f(e,"class","empty-state svelte-1dzzaxf")},m(t,n){v(t,e,n)},p:T,i:T,o:T,d(t){t&&h(e)}}}function Cn(l){let e,t,n,i,s,o,r,c,u,d,m,_;function b(y,F){return y[10].length===0?In:Nn}let z=b(l),k=z(l);return{c(){e=p("div"),t=p("div"),n=p("input"),i=x(),s=p("input"),o=x(),r=p("button"),c=I("Записать"),d=x(),k.c(),f(n,"type","text"),f(n,"placeholder","Что сделано"),f(n,"class","svelte-1dzzaxf"),f(s,"type","number"),f(s,"placeholder","Мин"),f(s,"min","1"),f(s,"class","svelte-1dzzaxf"),f(r,"class","btn btn-primary svelte-1dzzaxf"),r.disabled=u=!l[12].trim()||!l[11],f(t,"class","worklog-form svelte-1dzzaxf"),f(e,"class","worklog-tab svelte-1dzzaxf")},m(y,F){v(y,e,F),a(e,t),a(t,n),oe(n,l[12]),a(t,i),a(t,s),oe(s,l[11]),a(t,o),a(t,r),a(r,c),a(e,d),k.m(e,null),m||(_=[D(n,"input",l[66]),D(s,"input",l[67]),D(r,"click",l[40])],m=!0)},p(y,F){F[0]&4096&&n.value!==y[12]&&oe(n,y[12]),F[0]&2048&&Dt(s.value)!==y[11]&&oe(s,y[11]),F[0]&6144&&u!==(u=!y[12].trim()||!y[11])&&(r.disabled=u),z===(z=b(y))&&k?k.p(y,F):(k.d(1),k=z(y),k&&(k.c(),k.m(e,null)))},i:T,o:T,d(y){y&&h(e),k.d(),m=!1,se(_)}}}function Mn(l){let e;function t(s,o){return s[9].length===0?Ln:En}let n=t(l),i=n(l);return{c(){i.c(),e=ue()},m(s,o){i.m(s,o),v(s,e,o)},p(s,o){n===(n=t(s))&&i?i.p(s,o):(i.d(1),i=n(s),i&&(i.c(),i.m(e.parentNode,e)))},i:T,o:T,d(s){s&&h(e),i.d(s)}}}function xn(l){let e,t,n,i,s,o,r,c,u,d,m,_,b,z;const k=[jn,On,An],y=[];function F(L,A){return L[25]?0:L[22].length===0?1:2}u=F(l),d=y[u]=k[u](l);let M=l[19]&&!l[21]&&kt();return{c(){e=p("div"),t=p("div"),n=p("button"),i=I("+ Добавить файл"),s=x(),o=p("button"),r=I("+ Добавить папку"),c=x(),d.c(),m=x(),M&&M.c(),f(n,"class","btn btn-primary svelte-1dzzaxf"),n.disabled=l[19],f(o,"class","btn svelte-1dzzaxf"),o.disabled=l[19],f(t,"class","tab-toolbar svelte-1dzzaxf"),f(e,"class","files-tab svelte-1dzzaxf")},m(L,A){v(L,e,A),a(e,t),a(t,n),a(n,i),a(t,s),a(t,o),a(o,r),a(e,c),y[u].m(e,null),a(e,m),M&&M.m(e,null),_=!0,b||(z=[D(n,"click",l[41]),D(o,"click",l[42])],b=!0)},p(L,A){(!_||A[0]&524288)&&(n.disabled=L[19]),(!_||A[0]&524288)&&(o.disabled=L[19]);let O=u;u=F(L),u===O?y[u].p(L,A):(he(),ee(y[O],1,1,()=>{y[O]=null}),ve(),d=y[u],d?d.p(L,A):(d=y[u]=k[u](L),d.c()),Q(d,1),d.m(e,m)),L[19]&&!L[21]?M||(M=kt(),M.c(),M.m(e,null)):M&&(M.d(1),M=null)},i(L){_||(Q(d),_=!0)},o(L){ee(d),_=!1},d(L){L&&h(e),y[u].d(),M&&M.d(),b=!1,se(z)}}}function Sn(l){let e,t,n,i,s,o,r,c=l[16]&>(l);function u(_,b){return _[7].length===0&&!_[16]?Dn:Pn}let d=u(l),m=d(l);return{c(){e=p("div"),t=p("div"),n=p("button"),n.textContent="+ Добавить заметку",i=x(),c&&c.c(),s=x(),m.c(),f(n,"class","btn btn-primary svelte-1dzzaxf"),f(t,"class","tab-toolbar svelte-1dzzaxf"),f(e,"class","notes-tab svelte-1dzzaxf")},m(_,b){v(_,e,b),a(e,t),a(t,n),a(e,i),c&&c.m(e,null),a(e,s),m.m(e,null),o||(r=D(n,"click",l[33]),o=!0)},p(_,b){_[16]?c?c.p(_,b):(c=gt(_),c.c(),c.m(e,s)):c&&(c.d(1),c=null),d===(d=u(_))&&m?m.p(_,b):(m.d(1),m=d(_),m&&(m.c(),m.m(e,null)))},i:T,o:T,d(_){_&&h(e),c&&c.d(),m.d(),o=!1,r()}}}function Fn(l){let e,t,n=l[5].title+"",i,s,o,r,c,u,d=l[5].type+"",m,_,b,z,k,y=(l[5].section||"—")+"",F,M,L,A,O,H=re(l[5].createdAt)+"",S,N,g,P,q,R,te,U,X,K,le,$,ne,J,W=l[7].length>0&&wt(l),j=l[10].length>0&&Mt(l);return{c(){e=p("div"),t=p("h2"),i=I(n),s=x(),o=p("div"),r=p("div"),c=p("span"),c.textContent="Тип",u=p("span"),m=I(d),_=x(),b=p("div"),z=p("span"),z.textContent="Раздел",k=p("span"),F=I(y),M=x(),L=p("div"),A=p("span"),A.textContent="Создано",O=p("span"),S=I(H),N=x(),g=p("div"),P=p("button"),P.textContent="✏️ Новая заметка",q=x(),R=p("button"),R.textContent="📎 Добавить файл",te=x(),U=p("button"),U.textContent="⚡ Добавить действие",X=x(),K=p("button"),K.textContent="🕐 Записать время",le=x(),W&&W.c(),$=x(),j&&j.c(),f(t,"class","svelte-1dzzaxf"),f(c,"class","meta-label svelte-1dzzaxf"),f(u,"class","svelte-1dzzaxf"),f(r,"class","meta-item svelte-1dzzaxf"),f(z,"class","meta-label svelte-1dzzaxf"),f(k,"class","svelte-1dzzaxf"),f(b,"class","meta-item svelte-1dzzaxf"),f(A,"class","meta-label svelte-1dzzaxf"),f(O,"class","svelte-1dzzaxf"),f(L,"class","meta-item svelte-1dzzaxf"),f(o,"class","meta-grid svelte-1dzzaxf"),f(P,"class","qa-btn svelte-1dzzaxf"),f(R,"class","qa-btn svelte-1dzzaxf"),f(U,"class","qa-btn svelte-1dzzaxf"),U.disabled=!0,f(U,"title","Следующий этап"),f(K,"class","qa-btn svelte-1dzzaxf"),f(g,"class","quick-actions svelte-1dzzaxf"),f(e,"class","overview svelte-1dzzaxf")},m(C,V){v(C,e,V),a(e,t),a(t,i),a(e,s),a(e,o),a(o,r),a(r,c),a(r,u),a(u,m),a(o,_),a(o,b),a(b,z),a(b,k),a(k,F),a(o,M),a(o,L),a(L,A),a(L,O),a(O,S),a(e,N),a(e,g),a(g,P),a(g,q),a(g,R),a(g,te),a(g,U),a(g,X),a(g,K),a(e,le),W&&W.m(e,null),a(e,$),j&&j.m(e,null),ne||(J=[D(P,"click",l[53]),D(R,"click",l[54]),D(K,"click",l[55])],ne=!0)},p(C,V){V[0]&32&&n!==(n=C[5].title+"")&&B(i,n),V[0]&32&&d!==(d=C[5].type+"")&&B(m,d),V[0]&32&&y!==(y=(C[5].section||"—")+"")&&B(F,y),V[0]&32&&H!==(H=re(C[5].createdAt)+"")&&B(S,H),C[7].length>0?W?W.p(C,V):(W=wt(C),W.c(),W.m(e,$)):W&&(W.d(1),W=null),C[10].length>0?j?j.p(C,V):(j=Mt(C),j.c(),j.m(e,null)):j&&(j.d(1),j=null)},i:T,o:T,d(C){C&&h(e),W&&W.d(),j&&j.d(),ne=!1,se(J)}}}function Nn(l){let e,t=Z(l[10]),n=[];for(let i=0;iЗаписей работы пока нет',f(e,"class","empty-state svelte-1dzzaxf")},m(t,n){v(t,e,n)},p:T,d(t){t&&h(e)}}}function vt(l){let e,t,n=l[83].summary+"",i,s,o,r=l[83].minutes+"",c,u,d=re(l[83].createdAt)+"",m,_;return{c(){e=p("div"),t=p("div"),i=I(n),s=x(),o=p("div"),c=I(r),u=I(" мин · "),m=I(d),_=x(),f(t,"class","svelte-1dzzaxf"),f(o,"class","wl-meta svelte-1dzzaxf"),f(e,"class","worklog-entry svelte-1dzzaxf")},m(b,z){v(b,e,z),a(e,t),a(t,i),a(e,s),a(e,o),a(o,c),a(o,u),a(o,m),a(e,_)},p(b,z){z[0]&1024&&n!==(n=b[83].summary+"")&&B(i,n),z[0]&1024&&r!==(r=b[83].minutes+"")&&B(c,r),z[0]&1024&&d!==(d=re(b[83].createdAt)+"")&&B(m,d)},d(b){b&&h(e)}}}function En(l){let e,t=Z(l[9]),n=[];for(let i=0;iДействий пока нет',f(e,"class","empty-state svelte-1dzzaxf")},m(t,n){v(t,e,n)},p:T,d(t){t&&h(e)}}}function bt(l){let e,t,n=l[94].title+"",i,s,o=l[94].type+"",r,c,u,d,m,_;function b(){return l[65](l[94])}return{c(){e=p("div"),t=p("span"),i=I(n),s=p("span"),r=I(o),c=x(),u=p("button"),u.textContent="Запустить",d=x(),f(t,"class","svelte-1dzzaxf"),f(s,"class","action-type svelte-1dzzaxf"),f(u,"class","btn btn-sm svelte-1dzzaxf"),f(e,"class","action-card svelte-1dzzaxf")},m(z,k){v(z,e,k),a(e,t),a(t,i),a(e,s),a(s,r),a(e,c),a(e,u),a(e,d),m||(_=D(u,"click",b),m=!0)},p(z,k){l=z,k[0]&512&&n!==(n=l[94].title+"")&&B(i,n),k[0]&512&&o!==(o=l[94].type+"")&&B(r,o)},d(z){z&&h(e),m=!1,_()}}}function An(l){let e,t=[],n=new Map,i,s=Z(l[22]);const o=r=>r[91].id;for(let r=0;r ',n=x(),i=p("p"),i.textContent="В этом проекте пока нет файлов",s=x(),o=p("p"),o.textContent="Добавьте файл или папку, чтобы сохранить материалы проекта.",r=x(),c=p("div"),u=p("button"),u.textContent="Добавить файл",d=x(),m=p("button"),m.textContent="Добавить папку",f(t,"class","empty-icon svelte-1dzzaxf"),f(i,"class","svelte-1dzzaxf"),f(o,"class","hint svelte-1dzzaxf"),f(u,"class","btn btn-primary svelte-1dzzaxf"),f(m,"class","btn svelte-1dzzaxf"),f(c,"class","empty-actions svelte-1dzzaxf"),f(e,"class","empty-state svelte-1dzzaxf")},m(z,k){v(z,e,k),a(e,t),a(e,n),a(e,i),a(e,s),a(e,o),a(e,r),a(e,c),a(c,u),a(c,d),a(c,m),_||(b=[D(u,"click",l[41]),D(m,"click",l[42])],_=!0)},p:T,i:T,o:T,d(z){z&&h(e),_=!1,se(b)}}}function jn(l){let e;return{c(){e=p("div"),e.innerHTML='Загрузка...
',f(e,"class","empty-state svelte-1dzzaxf")},m(t,n){v(t,e,n)},p:T,i:T,o:T,d(t){t&&h(e)}}}function zt(l,e){let t,n,i,s,o;function r(d){e[60](d)}function c(d){e[61](d)}let u={item:e[91]};return e[23]!==void 0&&(u.expanded=e[23]),e[24]!==void 0&&(u.childrenMap=e[24]),n=new Tt({props:u}),we.push(()=>Ge(n,"expanded",r)),we.push(()=>Ge(n,"childrenMap",c)),n.$on("delete",e[62]),n.$on("open",e[63]),n.$on("openFolder",e[64]),{key:l,first:null,c(){t=ue(),Me(n.$$.fragment),this.first=t},m(d,m){v(d,t,m),ke(n,d,m),o=!0},p(d,m){e=d;const _={};m[0]&4194304&&(_.item=e[91]),!i&&m[0]&8388608&&(i=!0,_.expanded=e[23],Re(()=>i=!1)),!s&&m[0]&16777216&&(s=!0,_.childrenMap=e[24],Re(()=>s=!1)),n.$set(_)},i(d){o||(Q(n.$$.fragment,d),o=!0)},o(d){ee(n.$$.fragment,d),o=!1},d(d){d&&h(t),ge(n,d)}}}function kt(l){let e;return{c(){e=p("div"),e.innerHTML='Сканирование...
',f(e,"class","empty-state svelte-1dzzaxf")},m(t,n){v(t,e,n)},d(t){t&&h(e)}}}function gt(l){let e,t,n,i,s,o,r,c,u;return{c(){e=p("div"),t=p("input"),n=x(),i=p("div"),s=p("button"),s.textContent="Создать",o=x(),r=p("button"),r.textContent="Отмена",f(t,"type","text"),f(t,"placeholder","Название заметки"),f(t,"class","svelte-1dzzaxf"),f(s,"class","btn btn-primary svelte-1dzzaxf"),f(r,"class","btn svelte-1dzzaxf"),f(i,"class","form-actions svelte-1dzzaxf"),f(e,"class","create-form svelte-1dzzaxf")},m(d,m){v(d,e,m),a(e,t),oe(t,l[17]),a(e,n),a(e,i),a(i,s),a(i,o),a(i,r),c||(u=[D(t,"input",l[57]),D(t,"keydown",l[58]),D(s,"click",l[35]),D(r,"click",l[34])],c=!0)},p(d,m){m[0]&131072&&t.value!==d[17]&&oe(t,d[17])},d(d){d&&h(e),c=!1,se(u)}}}function Pn(l){let e,t=Z(l[7]),n=[];for(let i=0;iНет заметокСоздайте первую заметку для этого дела.
',f(e,"class","empty-state svelte-1dzzaxf")},m(t,n){v(t,e,n)},p:T,d(t){t&&h(e)}}}function yt(l){let e,t,n=l[86].title+"",i,s,o,r=re(l[86].createdAt)+"",c,u,d,m;function _(){return l[59](l[86])}return{c(){e=p("div"),t=p("div"),i=I(n),s=x(),o=p("div"),c=I(r),u=x(),f(t,"class","note-card-title svelte-1dzzaxf"),f(o,"class","note-card-date svelte-1dzzaxf"),f(e,"class","note-card svelte-1dzzaxf")},m(b,z){v(b,e,z),a(e,t),a(t,i),a(e,s),a(e,o),a(o,c),a(e,u),d||(m=D(e,"click",_),d=!0)},p(b,z){l=b,z[0]&128&&n!==(n=l[86].title+"")&&B(i,n),z[0]&128&&r!==(r=re(l[86].createdAt)+"")&&B(c,r)},d(b){b&&h(e),d=!1,m()}}}function wt(l){let e,t,n,i=Z(l[7].slice(0,5)),s=[];for(let o=0;ol[70].call(b)),f(d,"class","form-group svelte-1dzzaxf"),f(y,"class","btn btn-primary svelte-1dzzaxf"),f(M,"class","btn svelte-1dzzaxf"),f(k,"class","modal-actions svelte-1dzzaxf"),f(t,"class","modal svelte-1dzzaxf"),f(e,"class","modal-overlay svelte-1dzzaxf")},m(S,N){v(S,e,N),a(e,t),a(t,n),a(t,i),a(t,s),a(s,o),a(s,r),a(s,c),oe(c,l[14]),a(t,u),a(t,d),a(d,m),a(d,_),a(d,b);for(let g=0;g⚒ Верстак ',i=x(),s=p("nav"),o=p("div"),r=p("div"),r.textContent="Разделы",c=x();for(let C=0;C{$[ce]=null}),ve(),O=$[A],O?O.p(C,V):(O=$[A]=le[A](C),O.c()),Q(O,1),O.m(k,H)),!C[8]&&!C[5]?J?J.p(C,V):(J=Ft(C),J.c(),J.m(k,S)):J&&(J.d(1),J=null),C[13]?W?W.p(C,V):(W=Nt(C),W.c(),W.m(k,N)):W&&(W.d(1),W=null),C[21]&&C[20]?j?j.p(C,V):(j=Et(C),j.c(),j.m(k,null)):j&&(j.d(1),j=null)},i(C){g||(Q(O),g=!0)},o(C){ee(O),g=!1},d(C){C&&h(e),fe(q,C),R&&R.d(),X.d(),K&&K.d(),$[A].d(),J&&J.d(),W&&W.d(),j&&j.d()}}}function Y(l,...e){try{if(window.go&&window.go.main&&window.go.main.App){const t=window.go.main.App[l];if(typeof t=="function")return t(...e)}}catch(t){console.error("Wails call error:",l,t)}return Promise.reject(new Error("Wails not connected: "+l))}function re(l){if(!l)return"";try{return new Date(l).toLocaleDateString("ru-RU",{day:"numeric",month:"short"})}catch{return l}}const At=l=>l.id!=="today"&&l.id!=="inbox";function Bn(l,e,t){let n=[],i=[],s="",o="",r="",c=null,u="overview",d=[],m=null,_=[],b=[],z=[],k="",y="",F=!1,M="",L="clients",A=!1,O="",H=!0,S=!1,N=null,g=!1,P="",q=[],R={},te={},U=!1;const X=[{id:"overview",label:"Обзор"},{id:"notes",label:"Заметки"},{id:"files",label:"Файлы"},{id:"actions",label:"Действия"},{id:"worklog",label:"Журнал"},{id:"activity",label:"Активность"}];let K=null;xl(async()=>{try{t(2,s=await Y("VerstakVersion")||"verstak-gui/v2"),t(0,n=await Y("ListSections")||[])}catch(w){t(3,o=String(w)),t(0,n=[{id:"today",label:"Сегодня"},{id:"inbox",label:"Неразобранное"},{id:"clients",label:"Клиенты"},{id:"projects",label:"Проекты"},{id:"recipes",label:"Рецепты"},{id:"documents",label:"Документы"},{id:"archive",label:"Архив"}])}window.runtime&&window.runtime.EventsOn&&(window.runtime.EventsOn("files-dropped",Jt),K=()=>window.runtime.EventsOff("files-dropped")),t(18,H=!1)}),Sl(()=>{K&&K()});async function le(w){t(4,r=w),t(5,c=null),t(6,u="overview"),t(7,d=[]),_=[],t(9,b=[]),t(10,z=[]),t(13,F=!1),t(3,o="");try{t(1,i=await Y("ListNodesBySection",w)||[])}catch(G){t(3,o=String(G)),t(1,i=[])}}async function $(w){t(5,c=w),t(6,u="overview"),t(7,d=[]),_=[],t(9,b=[]),t(10,z=[]),t(22,q=[]),t(23,R={}),t(24,te={}),t(8,m=null),t(13,F=!1),t(16,A=!1),t(3,o=""),await ne(w.id)}async function ne(w){try{t(7,d=await Y("ListNotes",w)||[])}catch{}try{_=await Y("ListFiles",w)||[]}catch{}try{t(9,b=await Y("ListActions",w)||[])}catch{}try{t(10,z=await Y("ListWorklog",w)||[])}catch{}}async function J(w){t(25,U=!0);try{t(22,q=await Y("ListItems",w)||[])}catch{t(22,q=[])}t(25,U=!1)}function W(){t(13,F=!0),t(14,M=""),t(15,L=r||"clients")}function j(){t(13,F=!1),t(14,M="")}async function C(){if(M.trim())try{const w=await Y("CreateNode","","case",M.trim(),L);t(13,F=!1),t(14,M=""),await le(L)}catch(w){t(3,o=String(w))}}function V(){t(16,A=!0),t(17,O="")}function ce(){t(16,A=!1),t(17,O="")}async function ie(){if(!(!O.trim()||!c))try{const w=await Y("CreateNote",c.id,O.trim());t(7,d=[...d,w&&w.id?w:{id:Date.now().toString(),title:O.trim(),createdAt:new Date().toISOString()}]),t(16,A=!1),t(17,O="")}catch{const G={id:Date.now().toString(),title:O.trim(),createdAt:new Date().toISOString()};t(7,d=[...d,G]),t(16,A=!1),t(17,O="")}}async function de(w){if(!(m&&m.dirty&&!confirm("Несохранённые изменения. Закрыть?")))try{const G=await Y("ReadNote",w.id);t(8,m={id:w.id,title:w.title,content:G||"",dirty:!1})}catch{t(8,m={id:w.id,title:w.title,content:"# "+w.title+`
+
+`,dirty:!1})}}function Vt(){m&&m.dirty&&!confirm("Несохранённые изменения. Закрыть?")||t(8,m=null)}function Wt(w){m&&(t(8,m.content=w.target.value,m),t(8,m.dirty=!0,m))}async function qt(){if(m)try{await Y("SaveNote",m.id,m.content),t(8,m.dirty=!1,m)}catch{t(8,m.dirty=!1,m)}}async function Rt(){const w=parseInt(k,10);if(!(!y.trim()||isNaN(w)||w<=0||!c)){try{const G=await Y("CreateWorklog",c.id,y.trim(),w);t(10,z=[...z,G&&G.id?G:{id:Date.now().toString(),nodeId:c.id,summary:y.trim(),minutes:w,createdAt:new Date().toISOString()}])}catch{t(10,z=[...z,{id:Date.now().toString(),nodeId:c.id,summary:y.trim(),minutes:w,createdAt:new Date().toISOString()}])}t(12,y=""),t(11,k="")}}async function He(){const w=await Y("PickFile");w&&await Ne(c.id,w)}async function Gt(){const w=await Y("PickDirectory");w&&await Ne(c.id,w)}async function Ne(w,G){t(19,S=!0);try{const Ee=await Y("PreviewImport",G);t(20,N=Ee),P=G,t(21,g=!0)}catch(Ee){t(3,o=String(Ee))}t(19,S=!1)}async function Ie(w){try{const G=w==="copy"?await Y("AddPathCopy",c.id,P):await Y("AddPathLink",c.id,P);t(21,g=!1),t(20,N=null),t(23,R={}),t(24,te={}),await Promise.all([ne(c.id),J(c.id)])}catch(G){t(3,o=String(G))}}function Kt(){t(21,g=!1),t(20,N=null)}async function Be(w){if(confirm("Удалить файл?"))try{await Y("DeleteFileOrFolder",w),_=_.filter(G=>G.nodeId!==w),t(23,R={}),t(24,te={}),await J(c.id)}catch(G){t(3,o=String(G))}}async function Te(w){try{await Y("OpenFile",w)}catch(G){t(3,o=String(G))}}async function Jt(w){if(!w||w.length===0)return;if(!c){t(3,o="Сначала выберите дело для добавления файлов");return}const G=w[0];await Ne(c.id,G)}function Ut(w){return u===w?"tab active":"tab"}const Zt=w=>le(w.id),Xt=w=>$(w),Yt=()=>t(3,o="");function Qt(){m.content=this.value,t(8,m)}const $t=w=>{t(6,u=w.id),w.id==="files"&&c&&q.length===0&&J(c.id)},el=()=>{t(6,u="notes"),V()},tl=()=>{t(6,u="files"),He()},ll=()=>t(6,u="worklog"),nl=w=>de(w);function il(){O=this.value,t(17,O)}const sl=w=>w.key==="Enter"&&ie(),ol=w=>de(w);function fl(w){R=w,t(23,R)}function cl(w){te=w,t(24,te)}const rl=w=>Be(w.detail),al=w=>Te(w.detail),ul=w=>console.log("open folder",w.detail),dl=w=>Y("RunAction",w.id);function pl(){y=this.value,t(12,y)}function _l(){k=Dt(this.value),t(11,k)}function ml(){M=this.value,t(14,M)}const hl=w=>w.key==="Enter"&&C();function vl(){L=wl(this),t(15,L),t(0,n)}return[n,i,s,o,r,c,u,d,m,b,z,k,y,F,M,L,A,O,H,S,N,g,q,R,te,U,X,le,$,J,W,j,C,V,ce,ie,de,Vt,Wt,qt,Rt,He,Gt,Ie,Kt,Be,Te,Ut,Zt,Xt,Yt,Qt,$t,el,tl,ll,nl,il,sl,ol,fl,cl,rl,al,ul,dl,pl,_l,ml,hl,vl,()=>Ie("copy"),()=>Ie("link")]}class Tn extends Fe{constructor(e){super(),Se(this,e,Bn,Hn,xe,{},null,[-1,-1,-1,-1])}}new Tn({target:document.getElementById("app")});
diff --git a/cmd/verstak-gui/frontend-dist/assets/main-BqdVWy5o.js b/cmd/verstak-gui/frontend-dist/assets/main-BqdVWy5o.js
deleted file mode 100644
index 41a9e02..0000000
--- a/cmd/verstak-gui/frontend-dist/assets/main-BqdVWy5o.js
+++ /dev/null
@@ -1,3 +0,0 @@
-var pt=Object.defineProperty;var ht=(l,e,t)=>e in l?pt(l,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):l[e]=t;var ae=(l,e,t)=>ht(l,typeof e!="symbol"?e+"":e,t);(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const s of document.querySelectorAll('link[rel="modulepreload"]'))n(s);new MutationObserver(s=>{for(const c of s)if(c.type==="childList")for(const i of c.addedNodes)i.tagName==="LINK"&&i.rel==="modulepreload"&&n(i)}).observe(document,{childList:!0,subtree:!0});function t(s){const c={};return s.integrity&&(c.integrity=s.integrity),s.referrerPolicy&&(c.referrerPolicy=s.referrerPolicy),s.crossOrigin==="use-credentials"?c.credentials="include":s.crossOrigin==="anonymous"?c.credentials="omit":c.credentials="same-origin",c}function n(s){if(s.ep)return;s.ep=!0;const c=t(s);fetch(s.href,c)}})();function Z(){}function Ye(l){return l()}function pe(){return Object.create(null)}function le(l){l.forEach(Ye)}function Ze(l){return typeof l=="function"}function vt(l,e){return l!=l?e==e:l!==e||l&&typeof l=="object"||typeof l=="function"}function bt(l){return Object.keys(l).length===0}function gt(l){return l??""}function f(l,e){l.appendChild(e)}function y(l,e,t){l.insertBefore(e,t||null)}function q(l){l.parentNode&&l.parentNode.removeChild(l)}function te(l,e){for(let t=0;tl.removeEventListener(e,t,n)}function kt(l){return function(e){e.target===this&&l.call(this,e)}}function a(l,e,t){t==null?l.removeAttribute(e):l.getAttribute(e)!==t&&l.setAttribute(e,t)}function $e(l){return l===""?null:+l}function qt(l){return Array.from(l.childNodes)}function D(l,e){e=""+e,l.data!==e&&(l.data=e)}function x(l,e){l.value=e??""}function he(l,e,t){for(let n=0;nl.indexOf(n)===-1?e.push(n):t.push(n)),t.forEach(n=>n()),oe=e}const Et=new Set;function Ot(l,e){l&&l.i&&(Et.delete(l),l.i(e))}function R(l){return(l==null?void 0:l.length)!==void 0?l:Array.from(l)}function Tt(l,e,t){const{fragment:n,after_update:s}=l.$$;n&&n.m(e,t),ue(()=>{const c=l.$$.on_mount.map(Ye).filter(Ze);l.$$.on_destroy?l.$$.on_destroy.push(...c):le(c),l.$$.on_mount=[]}),s.forEach(ue)}function Mt(l,e){const t=l.$$;t.fragment!==null&&(Lt(t.after_update),le(t.on_destroy),t.fragment&&t.fragment.d(e),t.on_destroy=t.fragment=null,t.ctx=[])}function Dt(l,e){l.$$.dirty[0]===-1&&(ce.push(l),St(),l.$$.dirty.fill(0)),l.$$.dirty[e/31|0]|=1<{const w=h.length?h[0]:p;return r.ctx&&s(r.ctx[d],r.ctx[d]=w)&&(!r.skip_bound&&r.bound[d]&&r.bound[d](w),m&&Dt(l,d)),p}):[],r.update(),m=!0,le(r.before_update),r.fragment=n?n(r.ctx):!1,e.target){if(e.hydrate){const d=qt(e.target);r.fragment&&r.fragment.l(d),d.forEach(q)}else r.fragment&&r.fragment.c();e.intro&&Ot(l.$$.fragment),Tt(l,e.target,e.anchor),xe()}fe(o)}class Pt{constructor(){ae(this,"$$");ae(this,"$$set")}$destroy(){Mt(this,1),this.$destroy=Z}$on(e,t){if(!Ze(t))return Z;const n=this.$$.callbacks[e]||(this.$$.callbacks[e]=[]);return n.push(t),()=>{const s=n.indexOf(t);s!==-1&&n.splice(s,1)}}$set(e){this.$$set&&!bt(e)&&(this.$$.skip_bound=!0,this.$$set(e),this.$$.skip_bound=!1)}}const jt="4";typeof window<"u"&&(window.__svelte||(window.__svelte={v:new Set})).v.add(jt);function ge(l,e,t){const n=l.slice();return n[53]=e[t],n}function ke(l,e,t){const n=l.slice();return n[56]=e[t],n}function qe(l,e,t){const n=l.slice();return n[64]=e[t],n}function ye(l,e,t){const n=l.slice();return n[59]=e[t],n}function we(l,e,t){const n=l.slice();return n[56]=e[t],n}function Ce(l,e,t){const n=l.slice();return n[59]=e[t],n}function Ne(l,e,t){const n=l.slice();return n[69]=e[t],n}function Se(l,e,t){const n=l.slice();return n[53]=e[t],n}function Ae(l,e,t){const n=l.slice();return n[74]=e[t],n}function Le(l,e,t){const n=l.slice();return n[77]=e[t],n}function Ee(l){let e,t=l[77].label+"",n,s,c,i,u;function o(){return l[34](l[77])}return{c(){e=_("button"),n=S(t),s=k(),a(e,"class",c="nav-item "+(l[4]===l[77].id?"selected":"")+" svelte-1n16qmf")},m(r,m){y(r,e,m),f(e,n),f(e,s),i||(u=T(e,"click",o),i=!0)},p(r,m){l=r,m[0]&1&&t!==(t=l[77].label+"")&&D(n,t),m[0]&17&&c!==(c="nav-item "+(l[4]===l[77].id?"selected":"")+" svelte-1n16qmf")&&a(e,"class",c)},d(r){r&&q(e),i=!1,u()}}}function Oe(l){let e,t,n,s,c,i=l[1].length>0&&Te(l),u=R(l[1]),o=[];for(let m=0;m0?i?i.p(m,d):(i=Te(m),i.c(),i.m(t,null)):i&&(i.d(1),i=null),d[0]&2097186){u=R(m[1]);let p;for(p=0;p0)return zt;if(u[3])return Ut}let c=s(l),i=c&&c(l);return{c(){e=_("div"),t=_("h2"),t.textContent="Верстак",n=k(),i&&i.c(),a(t,"class","svelte-1n16qmf"),a(e,"class","welcome svelte-1n16qmf")},m(u,o){y(u,e,o),f(e,t),f(e,n),i&&i.m(e,null)},p(u,o){c===(c=s(u))&&i?i.p(u,o):(i&&i.d(1),i=c&&c(u),i&&(i.c(),i.m(e,null)))},d(u){u&&q(e),i&&i.d()}}}function Ft(l){let e,t,n,s=R(l[19]),c=[];for(let r=0;rАктивность появится позже',a(e,"class","empty-state svelte-1n16qmf")},m(t,n){y(t,e,n)},p:Z,d(t){t&&q(e)}}}function Jt(l){let e,t,n,s,c,i,u,o,r,m,d,p;function h(v,A){return v[10].length===0?xt:$t}let w=h(l),g=w(l);return{c(){e=_("div"),t=_("div"),n=_("input"),s=k(),c=_("input"),i=k(),u=_("button"),o=S("Записать"),m=k(),g.c(),a(n,"type","text"),a(n,"placeholder","Что сделано"),a(n,"class","svelte-1n16qmf"),a(c,"type","number"),a(c,"placeholder","Мин"),a(c,"min","1"),a(c,"class","svelte-1n16qmf"),a(u,"class","btn btn-primary svelte-1n16qmf"),u.disabled=r=!l[12].trim()||!l[11],a(t,"class","worklog-form svelte-1n16qmf"),a(e,"class","worklog-tab svelte-1n16qmf")},m(v,A){y(v,e,A),f(e,t),f(t,n),x(n,l[12]),f(t,s),f(t,c),x(c,l[11]),f(t,i),f(t,u),f(u,o),f(e,m),g.m(e,null),d||(p=[T(n,"input",l[46]),T(c,"input",l[47]),T(u,"click",l[32])],d=!0)},p(v,A){A[0]&4096&&n.value!==v[12]&&x(n,v[12]),A[0]&2048&&$e(c.value)!==v[11]&&x(c,v[11]),A[0]&6144&&r!==(r=!v[12].trim()||!v[11])&&(u.disabled=r),w===(w=h(v))&&g?g.p(v,A):(g.d(1),g=w(v),g&&(g.c(),g.m(e,null)))},d(v){v&&q(e),g.d(),d=!1,le(p)}}}function Qt(l){let e;function t(c,i){return c[9].length===0?tl:el}let n=t(l),s=n(l);return{c(){s.c(),e=me()},m(c,i){s.m(c,i),y(c,e,i)},p(c,i){n===(n=t(c))&&s?s.p(c,i):(s.d(1),s=n(c),s&&(s.c(),s.m(e.parentNode,e)))},d(c){c&&q(e),s.d(c)}}}function Xt(l){let e;return{c(){e=_("div"),e.innerHTML='Нет файлов
Добавьте документы, скриншоты или папку с материалами.
+ Добавить файл + Добавить папку
Полноценная работа с файлами — следующий этап.
',a(e,"class","empty-state svelte-1n16qmf")},m(t,n){y(t,e,n)},p:Z,d(t){t&&q(e)}}}function Yt(l){let e,t,n,s,c,i,u,o=l[16]&&Be(l);function r(p,h){return p[7].length===0&&!p[16]?nl:ll}let m=r(l),d=m(l);return{c(){e=_("div"),t=_("div"),n=_("button"),n.textContent="+ Добавить заметку",s=k(),o&&o.c(),c=k(),d.c(),a(n,"class","btn btn-primary svelte-1n16qmf"),a(t,"class","tab-toolbar svelte-1n16qmf"),a(e,"class","notes-tab svelte-1n16qmf")},m(p,h){y(p,e,h),f(e,t),f(t,n),f(e,s),o&&o.m(e,null),f(e,c),d.m(e,null),i||(u=T(n,"click",l[25]),i=!0)},p(p,h){p[16]?o?o.p(p,h):(o=Be(p),o.c(),o.m(e,c)):o&&(o.d(1),o=null),m===(m=r(p))&&d?d.p(p,h):(d.d(1),d=m(p),d&&(d.c(),d.m(e,null)))},d(p){p&&q(e),o&&o.d(),d.d(),i=!1,u()}}}function Zt(l){let e,t,n=l[5].title+"",s,c,i,u,o,r,m=l[5].type+"",d,p,h,w,g,v=(l[5].section||"—")+"",A,I,B,U,M,E=ie(l[5].createdAt)+"",N,O,L,G,J,P,ne,Y,Q,j,W,C,F,H,V=l[7].length>0&&Fe(l),z=l[10].length>0&&Ue(l);return{c(){e=_("div"),t=_("h2"),s=S(n),c=k(),i=_("div"),u=_("div"),o=_("span"),o.textContent="Тип",r=_("span"),d=S(m),p=k(),h=_("div"),w=_("span"),w.textContent="Раздел",g=_("span"),A=S(v),I=k(),B=_("div"),U=_("span"),U.textContent="Создано",M=_("span"),N=S(E),O=k(),L=_("div"),G=_("button"),G.textContent="✏️ Новая заметка",J=k(),P=_("button"),P.textContent="📎 Добавить файл",ne=k(),Y=_("button"),Y.textContent="⚡ Добавить действие",Q=k(),j=_("button"),j.textContent="🕐 Записать время",W=k(),V&&V.c(),C=k(),z&&z.c(),a(t,"class","svelte-1n16qmf"),a(o,"class","meta-label svelte-1n16qmf"),a(r,"class","svelte-1n16qmf"),a(u,"class","meta-item svelte-1n16qmf"),a(w,"class","meta-label svelte-1n16qmf"),a(g,"class","svelte-1n16qmf"),a(h,"class","meta-item svelte-1n16qmf"),a(U,"class","meta-label svelte-1n16qmf"),a(M,"class","svelte-1n16qmf"),a(B,"class","meta-item svelte-1n16qmf"),a(i,"class","meta-grid svelte-1n16qmf"),a(G,"class","qa-btn svelte-1n16qmf"),a(P,"class","qa-btn svelte-1n16qmf"),P.disabled=!0,a(P,"title","Следующий этап"),a(Y,"class","qa-btn svelte-1n16qmf"),Y.disabled=!0,a(Y,"title","Следующий этап"),a(j,"class","qa-btn svelte-1n16qmf"),a(L,"class","quick-actions svelte-1n16qmf"),a(e,"class","overview svelte-1n16qmf")},m(K,ee){y(K,e,ee),f(e,t),f(t,s),f(e,c),f(e,i),f(i,u),f(u,o),f(u,r),f(r,d),f(i,p),f(i,h),f(h,w),f(h,g),f(g,A),f(i,I),f(i,B),f(B,U),f(B,M),f(M,N),f(e,O),f(e,L),f(L,G),f(L,J),f(L,P),f(L,ne),f(L,Y),f(L,Q),f(L,j),f(e,W),V&&V.m(e,null),f(e,C),z&&z.m(e,null),F||(H=[T(G,"click",l[39]),T(j,"click",l[40])],F=!0)},p(K,ee){ee[0]&32&&n!==(n=K[5].title+"")&&D(s,n),ee[0]&32&&m!==(m=K[5].type+"")&&D(d,m),ee[0]&32&&v!==(v=(K[5].section||"—")+"")&&D(A,v),ee[0]&32&&E!==(E=ie(K[5].createdAt)+"")&&D(N,E),K[7].length>0?V?V.p(K,ee):(V=Fe(K),V.c(),V.m(e,C)):V&&(V.d(1),V=null),K[10].length>0?z?z.p(K,ee):(z=Ue(K),z.c(),z.m(e,null)):z&&(z.d(1),z=null)},d(K){K&&q(e),V&&V.d(),z&&z.d(),F=!1,le(H)}}}function $t(l){let e,t=R(l[10]),n=[];for(let s=0;sЗаписей работы пока нет',a(e,"class","empty-state svelte-1n16qmf")},m(t,n){y(t,e,n)},p:Z,d(t){t&&q(e)}}}function He(l){let e,t,n=l[56].summary+"",s,c,i,u=l[56].minutes+"",o,r,m=ie(l[56].createdAt)+"",d,p;return{c(){e=_("div"),t=_("div"),s=S(n),c=k(),i=_("div"),o=S(u),r=S(" мин · "),d=S(m),p=k(),a(t,"class","svelte-1n16qmf"),a(i,"class","wl-meta svelte-1n16qmf"),a(e,"class","worklog-entry svelte-1n16qmf")},m(h,w){y(h,e,w),f(e,t),f(t,s),f(e,c),f(e,i),f(i,o),f(i,r),f(i,d),f(e,p)},p(h,w){w[0]&1024&&n!==(n=h[56].summary+"")&&D(s,n),w[0]&1024&&u!==(u=h[56].minutes+"")&&D(o,u),w[0]&1024&&m!==(m=ie(h[56].createdAt)+"")&&D(d,m)},d(h){h&&q(e)}}}function el(l){let e,t=R(l[9]),n=[];for(let s=0;sДействий пока нет',a(e,"class","empty-state svelte-1n16qmf")},m(t,n){y(t,e,n)},p:Z,d(t){t&&q(e)}}}function We(l){let e,t,n=l[64].title+"",s,c,i=l[64].type+"",u,o,r,m,d,p;function h(){return l[45](l[64])}return{c(){e=_("div"),t=_("span"),s=S(n),c=_("span"),u=S(i),o=k(),r=_("button"),r.textContent="Запустить",m=k(),a(t,"class","svelte-1n16qmf"),a(c,"class","action-type svelte-1n16qmf"),a(r,"class","btn btn-sm svelte-1n16qmf"),a(e,"class","action-card svelte-1n16qmf")},m(w,g){y(w,e,g),f(e,t),f(t,s),f(e,c),f(c,u),f(e,o),f(e,r),f(e,m),d||(p=T(r,"click",h),d=!0)},p(w,g){l=w,g[0]&512&&n!==(n=l[64].title+"")&&D(s,n),g[0]&512&&i!==(i=l[64].type+"")&&D(u,i)},d(w){w&&q(e),d=!1,p()}}}function Be(l){let e,t,n,s,c,i,u,o,r;return{c(){e=_("div"),t=_("input"),n=k(),s=_("div"),c=_("button"),c.textContent="Создать",i=k(),u=_("button"),u.textContent="Отмена",a(t,"type","text"),a(t,"placeholder","Название заметки"),a(t,"class","svelte-1n16qmf"),a(c,"class","btn btn-primary svelte-1n16qmf"),a(u,"class","btn svelte-1n16qmf"),a(s,"class","form-actions svelte-1n16qmf"),a(e,"class","create-form svelte-1n16qmf")},m(m,d){y(m,e,d),f(e,t),x(t,l[17]),f(e,n),f(e,s),f(s,c),f(s,i),f(s,u),o||(r=[T(t,"input",l[42]),T(t,"keydown",l[43]),T(c,"click",l[27]),T(u,"click",l[26])],o=!0)},p(m,d){d[0]&131072&&t.value!==m[17]&&x(t,m[17])},d(m){m&&q(e),o=!1,le(r)}}}function ll(l){let e,t=R(l[7]),n=[];for(let s=0;sНет заметокСоздайте первую заметку для этого дела.
',a(e,"class","empty-state svelte-1n16qmf")},m(t,n){y(t,e,n)},p:Z,d(t){t&&q(e)}}}function Re(l){let e,t,n=l[59].title+"",s,c,i,u=ie(l[59].createdAt)+"",o,r,m,d;function p(){return l[44](l[59])}return{c(){e=_("div"),t=_("div"),s=S(n),c=k(),i=_("div"),o=S(u),r=k(),a(t,"class","note-card-title svelte-1n16qmf"),a(i,"class","note-card-date svelte-1n16qmf"),a(e,"class","note-card svelte-1n16qmf")},m(h,w){y(h,e,w),f(e,t),f(t,s),f(e,c),f(e,i),f(i,o),f(e,r),m||(d=T(e,"click",p),m=!0)},p(h,w){l=h,w[0]&128&&n!==(n=l[59].title+"")&&D(s,n),w[0]&128&&u!==(u=ie(l[59].createdAt)+"")&&D(o,u)},d(h){h&&q(e),m=!1,d()}}}function Fe(l){let e,t,n,s=R(l[7].slice(0,5)),c=[];for(let i=0;il[50].call(h)),a(m,"class","form-group svelte-1n16qmf"),a(v,"class","btn btn-primary svelte-1n16qmf"),a(I,"class","btn svelte-1n16qmf"),a(g,"class","modal-actions svelte-1n16qmf"),a(t,"class","modal svelte-1n16qmf"),a(e,"class","modal-overlay svelte-1n16qmf")},m(N,O){y(N,e,O),f(e,t),f(t,n),f(t,s),f(t,c),f(c,i),f(c,u),f(c,o),x(o,l[14]),f(t,r),f(t,m),f(m,d),f(m,p),f(m,h);for(let L=0;L⚒ Верстак ',s=k(),c=_("nav"),i=_("div"),u=_("div"),u.textContent="Разделы",o=k();for(let C=0;Cl.id!=="today"&&l.id!=="inbox";function sl(l,e,t){let n=[],s=[],c="",i="",u="",o=null,r="overview",m=[],d=null,p=[],h=[],w=[],g="",v="",A=!1,I="",B="clients",U=!1,M="",E=!0;const N=[{id:"overview",label:"Обзор"},{id:"notes",label:"Заметки"},{id:"files",label:"Файлы"},{id:"actions",label:"Действия"},{id:"worklog",label:"Журнал"},{id:"activity",label:"Активность"}];Ct(async()=>{try{t(2,c=await $("VerstakVersion")||"verstak-gui/v2"),t(0,n=await $("ListSections")||[])}catch(b){t(3,i=String(b)),t(0,n=[{id:"today",label:"Сегодня"},{id:"inbox",label:"Неразобранное"},{id:"clients",label:"Клиенты"},{id:"projects",label:"Проекты"},{id:"recipes",label:"Рецепты"},{id:"documents",label:"Документы"},{id:"archive",label:"Архив"}])}t(18,E=!1)});async function O(b){t(4,u=b),t(5,o=null),t(6,r="overview"),t(7,m=[]),p=[],t(9,h=[]),t(10,w=[]),t(13,A=!1),t(3,i="");try{t(1,s=await $("ListNodesBySection",b)||[])}catch(X){t(3,i=String(X)),t(1,s=[])}}async function L(b){t(5,o=b),t(6,r="overview"),t(7,m=[]),p=[],t(9,h=[]),t(10,w=[]),t(8,d=null),t(13,A=!1),t(16,U=!1),t(3,i=""),await G(b.id)}async function G(b){try{t(7,m=await $("ListNotes",b)||[])}catch{}try{p=await $("ListFiles",b)||[]}catch{}try{t(9,h=await $("ListActions",b)||[])}catch{}try{t(10,w=await $("ListWorklog",b)||[])}catch{}}function J(){t(13,A=!0),t(14,I=""),t(15,B=u||"clients")}function P(){t(13,A=!1),t(14,I="")}async function ne(){if(I.trim())try{const b=await $("CreateNode","","case",I.trim(),B);t(13,A=!1),t(14,I=""),await O(B)}catch(b){t(3,i=String(b))}}function Y(){t(16,U=!0),t(17,M="")}function Q(){t(16,U=!1),t(17,M="")}async function j(){if(!(!M.trim()||!o))try{const b=await $("CreateNote",o.id,M.trim());t(7,m=[...m,b&&b.id?b:{id:Date.now().toString(),title:M.trim(),createdAt:new Date().toISOString()}]),t(16,U=!1),t(17,M="")}catch{const X={id:Date.now().toString(),title:M.trim(),createdAt:new Date().toISOString()};t(7,m=[...m,X]),t(16,U=!1),t(17,M="")}}async function W(b){if(!(d&&d.dirty&&!confirm("Несохранённые изменения. Закрыть?")))try{const X=await $("ReadNote",b.id);t(8,d={id:b.id,title:b.title,content:X||"",dirty:!1})}catch{t(8,d={id:b.id,title:b.title,content:"# "+b.title+`
-
-`,dirty:!1})}}function C(){d&&d.dirty&&!confirm("Несохранённые изменения. Закрыть?")||t(8,d=null)}function F(b){d&&(t(8,d.content=b.target.value,d),t(8,d.dirty=!0,d))}async function H(){if(d)try{await $("SaveNote",d.id,d.content),t(8,d.dirty=!1,d)}catch{t(8,d.dirty=!1,d)}}async function V(){const b=parseInt(g,10);if(!(!v.trim()||isNaN(b)||b<=0||!o)){try{const X=await $("CreateWorklog",o.id,v.trim(),b);t(10,w=[...w,X&&X.id?X:{id:Date.now().toString(),nodeId:o.id,summary:v.trim(),minutes:b,createdAt:new Date().toISOString()}])}catch{t(10,w=[...w,{id:Date.now().toString(),nodeId:o.id,summary:v.trim(),minutes:b,createdAt:new Date().toISOString()}])}t(12,v=""),t(11,g="")}}function z(b){return r===b?"tab active":"tab"}const K=b=>O(b.id),ee=b=>L(b),et=()=>t(3,i="");function tt(){d.content=this.value,t(8,d)}const lt=b=>t(6,r=b.id),nt=()=>{t(6,r="notes"),Y()},it=()=>t(6,r="worklog"),st=b=>W(b);function ct(){M=this.value,t(17,M)}const ot=b=>b.key==="Enter"&&j(),ft=b=>W(b),rt=b=>$("RunAction",b.id);function ut(){v=this.value,t(12,v)}function at(){g=$e(this.value),t(11,g)}function dt(){I=this.value,t(14,I)}const _t=b=>b.key==="Enter"&&ne();function mt(){B=yt(this),t(15,B),t(0,n)}return[n,s,c,i,u,o,r,m,d,h,w,g,v,A,I,B,U,M,E,N,O,L,J,P,ne,Y,Q,j,W,C,F,H,V,z,K,ee,et,tt,lt,nt,it,st,ct,ot,ft,rt,ut,at,dt,_t,mt]}class cl extends Pt{constructor(e){super(),It(this,e,sl,il,vt,{},null,[-1,-1,-1])}}new cl({target:document.getElementById("app")});
diff --git a/cmd/verstak-gui/frontend-dist/assets/main-CFGnr13n.css b/cmd/verstak-gui/frontend-dist/assets/main-CFGnr13n.css
new file mode 100644
index 0000000..6437856
--- /dev/null
+++ b/cmd/verstak-gui/frontend-dist/assets/main-CFGnr13n.css
@@ -0,0 +1 @@
+.file-row.svelte-18mry1k.svelte-18mry1k{display:flex;align-items:center;gap:10px;padding:8px 12px;border-radius:6px;cursor:default;transition:background .12s;min-height:52px;-webkit-user-select:none;user-select:none}.file-row.svelte-18mry1k.svelte-18mry1k:hover{background:#1e1e30}.file-row--selected.svelte-18mry1k.svelte-18mry1k{background:#1e1e3a;outline:1px solid #3a3a6c}.file-row--selected.svelte-18mry1k.svelte-18mry1k:hover{background:#252545}.file-row.svelte-18mry1k.svelte-18mry1k:focus-visible{outline:2px solid #5588ff;outline-offset:-2px}.file-row-icon.svelte-18mry1k.svelte-18mry1k{flex-shrink:0;display:flex;align-items:center;justify-content:center;width:32px;height:32px;color:#888}.file-row-body.svelte-18mry1k.svelte-18mry1k{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}.file-row-name.svelte-18mry1k.svelte-18mry1k{font-size:13px;color:#ddd;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:1.3}.file-row-meta.svelte-18mry1k.svelte-18mry1k{display:flex;align-items:center;gap:4px;font-size:11px;color:#666}.meta-sep.svelte-18mry1k.svelte-18mry1k{color:#444}.file-row-actions.svelte-18mry1k.svelte-18mry1k{display:flex;gap:2px;align-items:center;opacity:0;transition:opacity .15s ease;flex-shrink:0}.file-row.svelte-18mry1k:hover .file-row-actions.svelte-18mry1k{opacity:1}.action-btn.svelte-18mry1k.svelte-18mry1k{display:flex;align-items:center;justify-content:center;width:28px;height:28px;border:none;border-radius:4px;background:transparent;color:#666;cursor:pointer;transition:background .12s,color .12s}.action-btn.svelte-18mry1k.svelte-18mry1k:hover{background:#2a2a3c;color:#ccc}.action-btn-danger.svelte-18mry1k.svelte-18mry1k:hover{background:#3a2222;color:#ff6b6b}.action-btn.svelte-18mry1k.svelte-18mry1k:focus-visible{outline:2px solid #5588ff;outline-offset:1px}.menu-backdrop.svelte-18mry1k.svelte-18mry1k{position:fixed;top:0;right:0;bottom:0;left:0;z-index:99}.menu.svelte-18mry1k.svelte-18mry1k{position:absolute;right:12px;margin-top:4px;background:#1a1a28;border:1px solid #2a2a3c;border-radius:6px;padding:4px;z-index:100;min-width:140px;box-shadow:0 4px 12px #0006}.menu-item.svelte-18mry1k.svelte-18mry1k{display:block;width:100%;padding:6px 12px;border:none;background:transparent;color:#ccc;font-size:12px;text-align:left;cursor:pointer;border-radius:4px;font-family:inherit}.menu-item.svelte-18mry1k.svelte-18mry1k:hover{background:#2a2a3c}.menu-item.svelte-18mry1k.svelte-18mry1k:focus-visible{outline:2px solid #5588ff;outline-offset:1px}.breadcrumbs.svelte-csi2lb{display:flex;align-items:center;gap:4px;padding:8px 0;font-size:13px;color:#999}.sep.svelte-csi2lb{color:#444}.crumb.svelte-csi2lb{font-size:13px}.crumb--current.svelte-csi2lb{color:#ccc}.crumb--link.svelte-csi2lb{background:none;border:none;padding:2px 4px;color:#888;cursor:pointer;border-radius:3px;font-family:inherit;font-size:13px;transition:color .12s,background .12s}.crumb--link.svelte-csi2lb:hover{color:#ccc;background:#1e1e30}.crumb--link.svelte-csi2lb:focus-visible{outline:2px solid #5588ff;outline-offset:1px}.overlay.svelte-1ybaoro{position:fixed;top:0;right:0;bottom:0;left:0;background:#000000a6;display:flex;align-items:center;justify-content:center;z-index:1000}.modal.svelte-1ybaoro{background:#14141f;border:1px solid #2a2a3c;border-radius:10px;width:90vw;max-width:900px;height:85vh;max-height:700px;display:flex;flex-direction:column;overflow:hidden}.preview-header.svelte-1ybaoro{display:flex;align-items:center;gap:10px;padding:12px 16px;border-bottom:1px solid #2a2a3c;flex-shrink:0}.preview-title.svelte-1ybaoro{display:flex;align-items:center;gap:8px;color:#ddd;font-size:14px;min-width:0}.preview-name.svelte-1ybaoro{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.preview-meta.svelte-1ybaoro{font-size:11px;color:#666;margin-left:auto;white-space:nowrap}.preview-actions.svelte-1ybaoro{display:flex;gap:4px;flex-shrink:0;margin-left:8px}.action-btn.svelte-1ybaoro{display:flex;align-items:center;justify-content:center;width:30px;height:30px;border:none;border-radius:4px;background:transparent;color:#666;cursor:pointer;transition:background .12s,color .12s}.action-btn.svelte-1ybaoro:hover{background:#2a2a3c;color:#ccc}.action-btn.svelte-1ybaoro:focus-visible{outline:2px solid #5588ff;outline-offset:1px}.preview-body.svelte-1ybaoro{flex:1;overflow:auto;min-height:0}.preview-status.svelte-1ybaoro{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;padding:48px 24px;color:#888;font-size:14px}.preview-image-container.svelte-1ybaoro{display:flex;align-items:center;justify-content:center;padding:16px;min-height:200px;background:#0e0e18}.preview-image.svelte-1ybaoro{max-width:100%;max-height:calc(85vh - 100px);object-fit:contain;border-radius:4px}.preview-text.svelte-1ybaoro{margin:0;padding:16px;font-family:SF Mono,Fira Code,Cascadia Code,Consolas,monospace;font-size:12px;line-height:1.5;color:#ccc;white-space:pre-wrap;word-wrap:break-word;overflow:auto}.preview-pdf-container.svelte-1ybaoro{width:100%;height:100%}.preview-pdf.svelte-1ybaoro{width:100%;height:100%;border:none}.btn-sm.svelte-1ybaoro{padding:6px 14px;border:1px solid #2a2a3c;background:#1a1a28;color:#ccc;border-radius:6px;cursor:pointer;font-size:12px;font-family:inherit;transition:background .12s}.btn-sm.svelte-1ybaoro:hover{background:#223}.svelte-1rwjkun.svelte-1rwjkun,.svelte-1rwjkun.svelte-1rwjkun:before,.svelte-1rwjkun.svelte-1rwjkun:after{box-sizing:border-box;margin:0;padding:0}.app.svelte-1rwjkun.svelte-1rwjkun{display:flex;width:100vw;height:100vh;overflow:hidden;background:#13131f;color:#e4e4ef;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;font-size:14px}.sidebar.svelte-1rwjkun.svelte-1rwjkun{width:260px;min-width:200px;height:100vh;display:flex;flex-direction:column;background:#1a1a28;border-right:1px solid #2a2a3c;flex-shrink:0;overflow:hidden}.sidebar-brand.svelte-1rwjkun.svelte-1rwjkun{padding:16px 20px;display:flex;align-items:center;gap:10px;border-bottom:1px solid #2a2a3c;flex-shrink:0}.logo.svelte-1rwjkun.svelte-1rwjkun{font-size:20px;line-height:1}.brand-name.svelte-1rwjkun.svelte-1rwjkun{font-size:16px;font-weight:600}.sidebar-nav.svelte-1rwjkun.svelte-1rwjkun{flex:1;overflow-y:auto;padding:12px 0}.nav-group.svelte-1rwjkun.svelte-1rwjkun{margin-bottom:16px}.nav-label.svelte-1rwjkun.svelte-1rwjkun{font-size:10px;text-transform:uppercase;letter-spacing:.5px;color:#666;padding:4px 20px;margin-bottom:4px}.nav-item.svelte-1rwjkun.svelte-1rwjkun{display:block;width:100%;padding:8px 20px;border:none;background:none;color:#ccc;font-size:13px;text-align:left;cursor:pointer;border-radius:0;font-family:inherit}.nav-item.svelte-1rwjkun.svelte-1rwjkun:hover{background:#223}.nav-item.selected.svelte-1rwjkun.svelte-1rwjkun{background:#2a2a4a;color:#fff;font-weight:500}.nav-empty.svelte-1rwjkun.svelte-1rwjkun{padding:8px 20px;color:#555;font-size:12px}.sidebar-footer.svelte-1rwjkun.svelte-1rwjkun{padding:12px 20px;border-top:1px solid #2a2a3c;flex-shrink:0}.version.svelte-1rwjkun.svelte-1rwjkun{font-size:11px;color:#555}.main.svelte-1rwjkun.svelte-1rwjkun{flex:1;display:flex;flex-direction:column;height:100vh;min-width:0;overflow:hidden;background:#13131f}.header.svelte-1rwjkun.svelte-1rwjkun{padding:12px 24px;border-bottom:1px solid #2a2a3c;display:flex;align-items:center;flex-shrink:0;min-height:48px}.crumb.svelte-1rwjkun.svelte-1rwjkun{font-size:14px;font-weight:500}.crumb.placeholder.svelte-1rwjkun.svelte-1rwjkun{color:#666}.crumb-type.svelte-1rwjkun.svelte-1rwjkun{font-size:11px;color:#555;background:#1e1e2e;padding:2px 8px;border-radius:10px;margin-left:8px}.error-banner.svelte-1rwjkun.svelte-1rwjkun{background:#3a2222;color:#f88;padding:8px 24px;font-size:12px;border-bottom:1px solid #4a2222;flex-shrink:0;cursor:pointer;display:flex;justify-content:space-between}.dismiss.svelte-1rwjkun.svelte-1rwjkun{opacity:.6}.tabs.svelte-1rwjkun.svelte-1rwjkun{display:flex;border-bottom:1px solid #2a2a3c;flex-shrink:0;padding:0 24px}.tab.svelte-1rwjkun.svelte-1rwjkun{padding:10px 16px;border:none;background:none;color:#888;font-size:13px;cursor:pointer;border-bottom:2px solid transparent;font-family:inherit}.tab.svelte-1rwjkun.svelte-1rwjkun:hover{color:#ccc}.tab.active.svelte-1rwjkun.svelte-1rwjkun{color:#e4e4ef;border-bottom-color:#6366f1}.tab-content.svelte-1rwjkun.svelte-1rwjkun{flex:1;overflow-y:auto}.note-editor.svelte-1rwjkun.svelte-1rwjkun{flex:1;display:flex;flex-direction:column;height:100%}.note-editor-header.svelte-1rwjkun.svelte-1rwjkun{padding:12px 24px;border-bottom:1px solid #2a2a3c;display:flex;align-items:center;gap:12px;flex-shrink:0}.note-title.svelte-1rwjkun.svelte-1rwjkun{font-size:16px;font-weight:500}.dirty-mark.svelte-1rwjkun.svelte-1rwjkun{color:#f59e0b;font-size:10px}.note-editor-actions.svelte-1rwjkun.svelte-1rwjkun{margin-left:auto;display:flex;gap:8px}.note-textarea.svelte-1rwjkun.svelte-1rwjkun{flex:1;width:100%;border:none;outline:none;background:#13131f;color:#e4e4ef;font-family:SF Mono,Fira Code,monospace;font-size:14px;line-height:1.6;padding:24px;resize:none}.overview.svelte-1rwjkun.svelte-1rwjkun{padding:24px}.overview.svelte-1rwjkun h2.svelte-1rwjkun{font-size:24px;margin-bottom:16px}.meta-grid.svelte-1rwjkun.svelte-1rwjkun{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:12px;margin-bottom:24px}.meta-item.svelte-1rwjkun.svelte-1rwjkun{background:#1a1a28;padding:12px 16px;border-radius:8px}.meta-label.svelte-1rwjkun.svelte-1rwjkun{display:block;font-size:11px;color:#666;margin-bottom:4px;text-transform:uppercase}.quick-actions.svelte-1rwjkun.svelte-1rwjkun{display:flex;gap:8px;margin-bottom:24px;flex-wrap:wrap}.qa-btn.svelte-1rwjkun.svelte-1rwjkun{padding:10px 16px;border:1px solid #2a2a3c;background:#1a1a28;color:#ccc;border-radius:8px;cursor:pointer;font-size:13px;font-family:inherit}.qa-btn.svelte-1rwjkun.svelte-1rwjkun:hover{background:#223}.qa-btn.svelte-1rwjkun.svelte-1rwjkun:disabled{opacity:.4;cursor:not-allowed}.recent-section.svelte-1rwjkun.svelte-1rwjkun{margin-bottom:24px}.recent-section.svelte-1rwjkun h3.svelte-1rwjkun{font-size:13px;color:#666;text-transform:uppercase;margin-bottom:8px}.recent-note.svelte-1rwjkun.svelte-1rwjkun{padding:8px 12px;border-radius:6px;cursor:pointer;display:flex;justify-content:space-between}.recent-note.svelte-1rwjkun.svelte-1rwjkun:hover{background:#1a1a28}.recent-date.svelte-1rwjkun.svelte-1rwjkun{font-size:11px;color:#555}.recent-entry.svelte-1rwjkun.svelte-1rwjkun{padding:6px 0;font-size:13px;color:#888;border-bottom:1px solid #1a1a28}.notes-tab.svelte-1rwjkun.svelte-1rwjkun{padding:24px}.tab-toolbar.svelte-1rwjkun.svelte-1rwjkun{margin-bottom:16px}.create-form.svelte-1rwjkun.svelte-1rwjkun{background:#1a1a28;padding:16px;border-radius:8px;margin-bottom:16px}.create-form.svelte-1rwjkun input.svelte-1rwjkun{width:100%;padding:8px 12px;border:1px solid #2a2a3c;background:#13131f;color:#e4e4ef;border-radius:4px;font-size:14px;font-family:inherit;margin-bottom:8px}.create-form.svelte-1rwjkun input.svelte-1rwjkun:focus{outline:none;border-color:#6366f1}.form-actions.svelte-1rwjkun.svelte-1rwjkun{display:flex;gap:8px}.notes-list.svelte-1rwjkun.svelte-1rwjkun{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:12px}.note-card.svelte-1rwjkun.svelte-1rwjkun{background:#1a1a28;border:1px solid #2a2a3c;border-radius:8px;padding:16px;cursor:pointer}.note-card.svelte-1rwjkun.svelte-1rwjkun:hover{border-color:#3a3a5c}.note-card-title.svelte-1rwjkun.svelte-1rwjkun{font-size:14px;font-weight:500;margin-bottom:4px}.note-card-date.svelte-1rwjkun.svelte-1rwjkun{font-size:11px;color:#555}.worklog-tab.svelte-1rwjkun.svelte-1rwjkun{padding:24px}.worklog-form.svelte-1rwjkun.svelte-1rwjkun{display:flex;gap:8px;margin-bottom:24px;align-items:center}.worklog-form.svelte-1rwjkun input.svelte-1rwjkun{padding:8px 12px;border:1px solid #2a2a3c;background:#13131f;color:#e4e4ef;border-radius:4px;font-size:14px;font-family:inherit}.worklog-form.svelte-1rwjkun input.svelte-1rwjkun:focus{outline:none;border-color:#6366f1}.worklog-form.svelte-1rwjkun input[type=text].svelte-1rwjkun{flex:1}.worklog-form.svelte-1rwjkun input[type=number].svelte-1rwjkun{width:70px}.worklog-entry.svelte-1rwjkun.svelte-1rwjkun{padding:12px 0;border-bottom:1px solid #1a1a28}.wl-meta.svelte-1rwjkun.svelte-1rwjkun{font-size:11px;color:#555;margin-top:2px}.action-card.svelte-1rwjkun.svelte-1rwjkun{background:#1a1a28;padding:12px 16px;border-radius:8px;display:flex;align-items:center;gap:12px;margin-bottom:8px}.action-type.svelte-1rwjkun.svelte-1rwjkun{font-size:11px;color:#888;background:#223;padding:2px 8px;border-radius:10px}.empty-state.svelte-1rwjkun.svelte-1rwjkun{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:48px 24px;text-align:center}.empty-state.svelte-1rwjkun p.svelte-1rwjkun{margin:0;font-size:14px;color:#666}.empty-state.svelte-1rwjkun .empty-icon.svelte-1rwjkun{margin-bottom:12px;color:#444}.empty-state.svelte-1rwjkun .hint.svelte-1rwjkun{font-size:12px;color:#555;margin-top:6px}.empty-state.svelte-1rwjkun .empty-actions.svelte-1rwjkun{display:flex;gap:8px;justify-content:center;margin-top:16px}.empty-note.svelte-1rwjkun.svelte-1rwjkun{font-size:12px;color:#444;margin-top:16px}.welcome.svelte-1rwjkun.svelte-1rwjkun{padding:48px 24px;text-align:center}.welcome.svelte-1rwjkun h2.svelte-1rwjkun{font-size:32px;font-weight:300;color:#8888a4;margin-bottom:16px}.welcome.svelte-1rwjkun p.svelte-1rwjkun{color:#666;font-size:14px}.error-text.svelte-1rwjkun.svelte-1rwjkun{color:#f88}.fab.svelte-1rwjkun.svelte-1rwjkun{position:fixed;bottom:24px;right:24px;width:56px;height:56px;border-radius:50%;background:#6366f1;color:#fff;font-size:28px;display:flex;align-items:center;justify-content:center;cursor:pointer;box-shadow:0 4px 12px #6366f166}.fab.svelte-1rwjkun.svelte-1rwjkun:hover{background:#4f46e5}.modal-overlay.svelte-1rwjkun.svelte-1rwjkun{position:fixed;top:0;right:0;bottom:0;left:0;background:#0009;display:flex;align-items:center;justify-content:center;z-index:100}.modal.svelte-1rwjkun.svelte-1rwjkun{background:#1a1a28;border:1px solid #2a2a3c;border-radius:12px;padding:24px;width:400px;max-width:90vw}.modal.svelte-1rwjkun h3.svelte-1rwjkun{font-size:18px;margin-bottom:16px}.form-group.svelte-1rwjkun.svelte-1rwjkun{margin-bottom:12px}.form-group.svelte-1rwjkun label.svelte-1rwjkun{display:block;font-size:12px;color:#666;margin-bottom:4px}.form-group.svelte-1rwjkun input.svelte-1rwjkun,.form-group.svelte-1rwjkun select.svelte-1rwjkun{width:100%;padding:8px 12px;border:1px solid #2a2a3c;background:#13131f;color:#e4e4ef;border-radius:4px;font-size:14px;font-family:inherit}.form-group.svelte-1rwjkun select.svelte-1rwjkun{-moz-appearance:none;appearance:none;-webkit-appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%23888' d='M2 4l4 4 4-4'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 10px center;padding-right:32px}.form-group.svelte-1rwjkun input.svelte-1rwjkun:focus,.form-group.svelte-1rwjkun select.svelte-1rwjkun:focus{outline:none;border-color:#6366f1}.modal-actions.svelte-1rwjkun.svelte-1rwjkun{display:flex;gap:8px;justify-content:flex-end;margin-top:16px}.btn.svelte-1rwjkun.svelte-1rwjkun{padding:8px 16px;border:1px solid #2a2a3c;background:#1a1a28;color:#ccc;border-radius:6px;cursor:pointer;font-size:13px;font-family:inherit}.btn.svelte-1rwjkun.svelte-1rwjkun:hover{background:#223}.btn-primary.svelte-1rwjkun.svelte-1rwjkun{background:#6366f1;border-color:#6366f1;color:#fff}.btn-primary.svelte-1rwjkun.svelte-1rwjkun:hover{background:#4f46e5}.btn.svelte-1rwjkun.svelte-1rwjkun:disabled{opacity:.4;cursor:not-allowed}.btn-sm.svelte-1rwjkun.svelte-1rwjkun{padding:4px 10px;font-size:12px}.btn-danger.svelte-1rwjkun.svelte-1rwjkun{color:#ff6b6b;border-color:#4a2222}.btn-danger.svelte-1rwjkun.svelte-1rwjkun:hover{background:#3a2222}.files-tab.svelte-1rwjkun.svelte-1rwjkun{padding:20px}.files-tab.svelte-1rwjkun .tab-toolbar.svelte-1rwjkun{display:flex;gap:8px;align-items:center;margin-bottom:16px}.file-list.svelte-1rwjkun.svelte-1rwjkun{display:flex;flex-direction:column}.back-btn.svelte-1rwjkun.svelte-1rwjkun{margin-bottom:4px}.import-summary.svelte-1rwjkun.svelte-1rwjkun{margin-bottom:16px}.summary-row.svelte-1rwjkun.svelte-1rwjkun{display:flex;justify-content:space-between;padding:6px 0;font-size:14px;border-bottom:1px solid #2a2a3c}.summary-warn.svelte-1rwjkun.svelte-1rwjkun{margin-top:8px;padding:8px 12px;background:#3a2a22;border-radius:6px;color:#fa6;font-size:13px}
diff --git a/cmd/verstak-gui/frontend-dist/assets/main-CHeI8Z54.js b/cmd/verstak-gui/frontend-dist/assets/main-CHeI8Z54.js
new file mode 100644
index 0000000..d093452
--- /dev/null
+++ b/cmd/verstak-gui/frontend-dist/assets/main-CHeI8Z54.js
@@ -0,0 +1,6 @@
+var Il=Object.defineProperty;var El=(l,e,t)=>e in l?Il(l,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):l[e]=t;var Pe=(l,e,t)=>El(l,typeof e!="symbol"?e+"":e,t);(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const i of document.querySelectorAll('link[rel="modulepreload"]'))n(i);new MutationObserver(i=>{for(const s of i)if(s.type==="childList")for(const o of s.addedNodes)o.tagName==="LINK"&&o.rel==="modulepreload"&&n(o)}).observe(document,{childList:!0,subtree:!0});function t(i){const s={};return i.integrity&&(s.integrity=i.integrity),i.referrerPolicy&&(s.referrerPolicy=i.referrerPolicy),i.crossOrigin==="use-credentials"?s.credentials="include":i.crossOrigin==="anonymous"?s.credentials="omit":s.credentials="same-origin",s}function n(i){if(i.ep)return;i.ep=!0;const s=t(i);fetch(i.href,s)}})();function D(){}const Ll=l=>l;function qt(l){return l()}function Ue(){return Object.create(null)}function te(l){l.forEach(qt)}function Re(l){return typeof l=="function"}function Ie(l,e){return l!=l?e==e:l!==e||l&&typeof l=="object"||typeof l=="function"}function Al(l){return Object.keys(l).length===0}function Ol(l){return l??""}const Wt=typeof window<"u";let jl=Wt?()=>window.performance.now():()=>Date.now(),qe=Wt?l=>requestAnimationFrame(l):D;const ve=new Set;function Gt(l){ve.forEach(e=>{e.c(l)||(ve.delete(e),e.f())}),ve.size!==0&&qe(Gt)}function Pl(l){let e;return ve.size===0&&qe(Gt),{promise:new Promise(t=>{ve.add(e={c:l,f:t})}),abort(){ve.delete(e)}}}function a(l,e){l.appendChild(e)}function Kt(l){if(!l)return document;const e=l.getRootNode?l.getRootNode():l.ownerDocument;return e&&e.host?e:l.ownerDocument}function Dl(l){const e=_("style");return e.textContent="/* empty */",Hl(Kt(l),e),e.sheet}function Hl(l,e){return a(l.head||l,e),e.sheet}function v(l,e,t){l.insertBefore(e,t||null)}function h(l){l.parentNode&&l.parentNode.removeChild(l)}function re(l,e){for(let t=0;tl.removeEventListener(e,t,n)}function Jt(l){return function(e){e.target===this&&l.call(this,e)}}function r(l,e,t){t==null?l.removeAttribute(e):l.getAttribute(e)!==t&&l.setAttribute(e,t)}function Ut(l){return l===""?null:+l}function Bl(l){return Array.from(l.childNodes)}function T(l,e){e=""+e,l.data!==e&&(l.data=e)}function oe(l,e){l.value=e??""}function Ze(l,e,t,n){t==null?l.style.removeProperty(e):l.style.setProperty(e,t,"")}function Xe(l,e,t){for(let n=0;n>>0}function ql(l,e){const t={stylesheet:Dl(e),rules:{}};return xe.set(l,t),t}function Ye(l,e,t,n,i,s,o,c=0){const f=16.666/n;let u=`{
+`;for(let k=0;k<=1;k+=f){const N=e+(t-e)*s(k);u+=k*100+`%{${o(N,1-N)}}
+`}const d=u+`100% {${o(t,1-t)}}
+}`,m=`__svelte_${Rl(d)}_${c}`,p=Kt(l),{stylesheet:b,rules:z}=xe.get(p)||ql(p,l);z[m]||(z[m]=!0,b.insertRule(`@keyframes ${m} ${d}`,b.cssRules.length));const g=l.style.animation||"";return l.style.animation=`${g?`${g}, `:""}${m} ${n}ms linear ${i}ms 1 both`,Ne+=1,m}function Wl(l,e){const t=(l.style.animation||"").split(", "),n=t.filter(e?s=>s.indexOf(e)<0:s=>s.indexOf("__svelte")===-1),i=t.length-n.length;i&&(l.style.animation=n.join(", "),Ne-=i,Ne||Gl())}function Gl(){qe(()=>{Ne||(xe.forEach(l=>{const{ownerNode:e}=l.stylesheet;e&&h(e)}),xe.clear())})}let ye;function ke(l){ye=l}function We(){if(!ye)throw new Error("Function called outside component initialization");return ye}function Kl(l){We().$$.on_mount.push(l)}function Jl(l){We().$$.on_destroy.push(l)}function Xt(){const l=We();return(e,t,{cancelable:n=!1}={})=>{const i=l.$$.callbacks[e];if(i){const s=Zt(e,t,{cancelable:n});return i.slice().forEach(o=>{o.call(l,s)}),!s.defaultPrevented}return!0}}function De(l,e){const t=l.$$.callbacks[e.type];t&&t.slice().forEach(n=>n.call(this,e))}const he=[],Se=[];let be=[];const Te=[],Ul=Promise.resolve();let Ve=!1;function Zl(){Ve||(Ve=!0,Ul.then(Yt))}function ze(l){be.push(l)}function Qe(l){Te.push(l)}const He=new Set;let me=0;function Yt(){if(me!==0)return;const l=ye;do{try{for(;mel.indexOf(n)===-1?e.push(n):t.push(n)),t.forEach(n=>n()),be=e}let ge;function Ql(){return ge||(ge=Promise.resolve(),ge.then(()=>{ge=null})),ge}function Be(l,e,t){l.dispatchEvent(Zt(`${e?"intro":"outro"}${t}`))}const Me=new Set;let ce;function de(){ce={r:0,c:[],p:ce}}function pe(){ce.r||te(ce.c),ce=ce.p}function Q(l,e){l&&l.i&&(Me.delete(l),l.i(e))}function ee(l,e,t,n){if(l&&l.o){if(Me.has(l))return;Me.add(l),ce.c.push(()=>{Me.delete(l),n&&(t&&l.d(1),n())}),l.o(e)}else n&&n()}const $l={duration:0};function $e(l,e,t,n){let s=e(l,t,{direction:"both"}),o=n?0:1,c=null,f=null,u=null,d;function m(){u&&Wl(l,u)}function p(z,g){const k=z.b-o;return g*=Math.abs(k),{a:o,b:z.b,d:k,duration:g,start:z.start,end:z.start+g,group:z.group}}function b(z){const{delay:g=0,duration:k=300,easing:N=Ll,tick:C=D,css:L}=s||$l,O={start:jl()+g,b:z};z||(O.group=ce,ce.r+=1),"inert"in l&&(z?d!==void 0&&(l.inert=d):(d=l.inert,l.inert=!0)),c||f?f=O:(L&&(m(),u=Ye(l,o,z,k,g,N,L)),z&&C(0,1),c=p(O,k),ze(()=>Be(l,z,"start")),Pl(A=>{if(f&&A>f.start&&(c=p(f,k),f=null,Be(l,c.b,"start"),L&&(m(),u=Ye(l,o,c.b,c.duration,0,N,s.css))),c){if(A>=c.end)C(o=c.b,1-o),Be(l,c.b,"end"),f||(c.b?m():--c.group.r||te(c.group.c)),c=null;else if(A>=c.start){const H=A-c.start;o=c.a+c.d*N(H/c.duration),C(o,1-o)}}return!!(c||f)}))}return{run(z){Re(s)?Ql().then(()=>{s=s({direction:z?"in":"out"}),b(z)}):b(z)},end(){m(),c=f=null}}}function Z(l){return(l==null?void 0:l.length)!==void 0?l:Array.from(l)}function en(l,e){ee(l,1,1,()=>{e.delete(l.key)})}function tn(l,e,t,n,i,s,o,c,f,u,d,m){let p=l.length,b=s.length,z=p;const g={};for(;z--;)g[l[z].key]=z;const k=[],N=new Map,C=new Map,L=[];for(z=b;z--;){const S=m(i,s,z),F=t(S);let y=o.get(F);y?L.push(()=>y.p(S,e)):(y=u(F,S),y.c()),N.set(F,k[z]=y),F in g&&C.set(F,Math.abs(z-g[F]))}const O=new Set,A=new Set;function H(S){Q(S,1),S.m(c,d),o.set(S.key,S),d=S.first,b--}for(;p&&b;){const S=k[b-1],F=l[p-1],y=S.key,P=F.key;S===F?(d=S.first,p--,b--):N.has(P)?!o.has(y)||O.has(y)?H(S):A.has(P)?p--:C.get(y)>C.get(P)?(A.add(y),H(S)):(O.add(P),p--):(f(F,o),p--)}for(;p--;){const S=l[p];N.has(S.key)||f(S,o)}for(;b;)H(k[b-1]);return te(L),k}function et(l,e,t){const n=l.$$.props[e];n!==void 0&&(l.$$.bound[n]=t,t(l.$$.ctx[n]))}function Fe(l){l&&l.c()}function we(l,e,t){const{fragment:n,after_update:i}=l.$$;n&&n.m(e,t),ze(()=>{const s=l.$$.on_mount.map(qt).filter(Re);l.$$.on_destroy?l.$$.on_destroy.push(...s):te(s),l.$$.on_mount=[]}),i.forEach(ze)}function Ce(l,e){const t=l.$$;t.fragment!==null&&(Yl(t.after_update),te(t.on_destroy),t.fragment&&t.fragment.d(e),t.on_destroy=t.fragment=null,t.ctx=[])}function ln(l,e){l.$$.dirty[0]===-1&&(he.push(l),Zl(),l.$$.dirty.fill(0)),l.$$.dirty[e/31|0]|=1<{const z=b.length?b[0]:p;return u.ctx&&i(u.ctx[m],u.ctx[m]=z)&&(!u.skip_bound&&u.bound[m]&&u.bound[m](z),d&&ln(l,m)),p}):[],u.update(),d=!0,te(u.before_update),u.fragment=n?n(u.ctx):!1,e.target){if(e.hydrate){const m=Bl(e.target);u.fragment&&u.fragment.l(m),m.forEach(h)}else u.fragment&&u.fragment.c();e.intro&&Q(l.$$.fragment),we(l,e.target,e.anchor),Yt()}ke(f)}class Le{constructor(){Pe(this,"$$");Pe(this,"$$set")}$destroy(){Ce(this,1),this.$destroy=D}$on(e,t){if(!Re(t))return D;const n=this.$$.callbacks[e]||(this.$$.callbacks[e]=[]);return n.push(t),()=>{const i=n.indexOf(t);i!==-1&&n.splice(i,1)}}$set(e){this.$$set&&!Al(e)&&(this.$$.skip_bound=!0,this.$$set(e),this.$$.skip_bound=!1)}}const nn="4";typeof window<"u"&&(window.__svelte||(window.__svelte={v:new Set})).v.add(nn);function sn(l){let e,t;return{c(){e=E("path"),t=E("polyline"),r(e,"d","M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"),r(t,"points","14 2 14 8 20 8")},m(n,i){v(n,e,i),v(n,t,i)},d(n){n&&(h(e),h(t))}}}function on(l){let e,t,n,i,s;return{c(){e=E("path"),t=E("polyline"),n=E("line"),i=E("line"),s=E("polyline"),r(e,"d","M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"),r(t,"points","14 2 14 8 20 8"),r(n,"x1","16"),r(n,"y1","13"),r(n,"x2","8"),r(n,"y2","13"),r(i,"x1","16"),r(i,"y1","17"),r(i,"x2","8"),r(i,"y2","17"),r(s,"points","10 9 9 9 8 9")},m(o,c){v(o,e,c),v(o,t,c),v(o,n,c),v(o,i,c),v(o,s,c)},d(o){o&&(h(e),h(t),h(n),h(i),h(s))}}}function rn(l){let e,t;return{c(){e=E("polyline"),t=E("polyline"),r(e,"points","16 18 22 12 16 6"),r(t,"points","8 6 2 12 8 18")},m(n,i){v(n,e,i),v(n,t,i)},d(n){n&&(h(e),h(t))}}}function fn(l){let e,t,n,i;return{c(){e=E("path"),t=E("polyline"),n=E("line"),i=E("rect"),r(e,"d","M21 8v13a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8"),r(t,"points","7 3 12 8 17 3"),r(n,"x1","3"),r(n,"y1","8"),r(n,"x2","21"),r(n,"y2","8"),r(i,"x","10"),r(i,"y","12"),r(i,"width","4"),r(i,"height","4"),r(i,"rx","1")},m(s,o){v(s,e,o),v(s,t,o),v(s,n,o),v(s,i,o)},d(s){s&&(h(e),h(t),h(n),h(i))}}}function cn(l){let e,t,n,i,s;return{c(){e=E("path"),t=E("polyline"),n=E("line"),i=E("line"),s=E("line"),r(e,"d","M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"),r(t,"points","14 2 14 8 20 8"),r(n,"x1","9"),r(n,"y1","12"),r(n,"x2","15"),r(n,"y2","12"),r(i,"x1","9"),r(i,"y1","15"),r(i,"x2","13"),r(i,"y2","15"),r(s,"x1","12"),r(s,"y1","15"),r(s,"x2","12"),r(s,"y2","18")},m(o,c){v(o,e,c),v(o,t,c),v(o,n,c),v(o,i,c),v(o,s,c)},d(o){o&&(h(e),h(t),h(n),h(i),h(s))}}}function an(l){let e,t,n,i,s,o;return{c(){e=E("path"),t=E("polyline"),n=E("line"),i=E("line"),s=E("line"),o=E("line"),r(e,"d","M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"),r(t,"points","14 2 14 8 20 8"),r(n,"x1","8"),r(n,"y1","12"),r(n,"x2","16"),r(n,"y2","12"),r(i,"x1","8"),r(i,"y1","16"),r(i,"x2","16"),r(i,"y2","16"),r(s,"x1","8"),r(s,"y1","14"),r(s,"x2","12"),r(s,"y2","14"),r(o,"x1","12"),r(o,"y1","12"),r(o,"x2","12"),r(o,"y2","18")},m(c,f){v(c,e,f),v(c,t,f),v(c,n,f),v(c,i,f),v(c,s,f),v(c,o,f)},d(c){c&&(h(e),h(t),h(n),h(i),h(s),h(o))}}}function un(l){let e,t,n,i;return{c(){e=E("path"),t=E("polyline"),n=E("line"),i=E("line"),r(e,"d","M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"),r(t,"points","14 2 14 8 20 8"),r(n,"x1","16"),r(n,"y1","13"),r(n,"x2","8"),r(n,"y2","13"),r(i,"x1","16"),r(i,"y1","17"),r(i,"x2","8"),r(i,"y2","17")},m(s,o){v(s,e,o),v(s,t,o),v(s,n,o),v(s,i,o)},d(s){s&&(h(e),h(t),h(n),h(i))}}}function dn(l){let e,t,n,i,s;return{c(){e=E("path"),t=E("polyline"),n=E("line"),i=E("line"),s=E("line"),r(e,"d","M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"),r(t,"points","14 2 14 8 20 8"),r(n,"x1","8"),r(n,"y1","12"),r(n,"x2","16"),r(n,"y2","12"),r(i,"x1","8"),r(i,"y1","16"),r(i,"x2","16"),r(i,"y2","16"),r(s,"x1","8"),r(s,"y1","14"),r(s,"x2","12"),r(s,"y2","14")},m(o,c){v(o,e,c),v(o,t,c),v(o,n,c),v(o,i,c),v(o,s,c)},d(o){o&&(h(e),h(t),h(n),h(i),h(s))}}}function pn(l){let e,t,n;return{c(){e=E("path"),t=E("circle"),n=E("circle"),r(e,"d","M9 18V5l12-2v13"),r(t,"cx","6"),r(t,"cy","18"),r(t,"r","3"),r(n,"cx","18"),r(n,"cy","16"),r(n,"r","3")},m(i,s){v(i,e,s),v(i,t,s),v(i,n,s)},d(i){i&&(h(e),h(t),h(n))}}}function _n(l){let e,t;return{c(){e=E("rect"),t=E("polyline"),r(e,"x","2"),r(e,"y","4"),r(e,"width","20"),r(e,"height","16"),r(e,"rx","2"),r(t,"points","10 9 16 12 10 15 10 9")},m(n,i){v(n,e,i),v(n,t,i)},d(n){n&&(h(e),h(t))}}}function mn(l){let e,t,n;return{c(){e=E("rect"),t=E("circle"),n=E("polyline"),r(e,"x","3"),r(e,"y","3"),r(e,"width","18"),r(e,"height","18"),r(e,"rx","2"),r(e,"ry","2"),r(t,"cx","8.5"),r(t,"cy","8.5"),r(t,"r","1.5"),r(n,"points","21 15 16 10 5 21")},m(i,s){v(i,e,s),v(i,t,s),v(i,n,s)},d(i){i&&(h(e),h(t),h(n))}}}function hn(l){let e;return{c(){e=E("path"),r(e,"d","M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z")},m(t,n){v(t,e,n)},d(t){t&&h(e)}}}function vn(l){let e;function t(s,o){return s[0]==="folder"?hn:s[0]==="image"?mn:s[0]==="video"?_n:s[0]==="audio"?pn:s[0]==="pdf"?dn:s[0]==="document"?un:s[0]==="spreadsheet"?an:s[0]==="presentation"?cn:s[0]==="archive"?fn:s[0]==="code"?rn:s[0]==="text"?on:sn}let n=t(l),i=n(l);return{c(){e=E("svg"),i.c(),r(e,"width",l[1]),r(e,"height",l[1]),r(e,"viewBox","0 0 24 24"),r(e,"fill","none"),r(e,"stroke","currentColor"),r(e,"stroke-width","1.5"),r(e,"stroke-linecap","round"),r(e,"stroke-linejoin","round"),r(e,"xmlns","http://www.w3.org/2000/svg")},m(s,o){v(s,e,o),i.m(e,null)},p(s,[o]){n!==(n=t(s))&&(i.d(1),i=n(s),i&&(i.c(),i.m(e,null))),o&2&&r(e,"width",s[1]),o&2&&r(e,"height",s[1])},i:D,o:D,d(s){s&&h(e),i.d()}}}function bn(l,e,t){let{kind:n="generic"}=e,{size:i=20}=e;return l.$$set=s=>{"kind"in s&&t(0,n=s.kind),"size"in s&&t(1,i=s.size)},[n,i]}class zn extends Le{constructor(e){super(),Ee(this,e,bn,vn,Ie,{kind:0,size:1})}}function gn(l){let e,t,n;return{c(){e=E("path"),t=E("polyline"),n=E("line"),r(e,"d","M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"),r(t,"points","15 3 21 3 21 9"),r(n,"x1","10"),r(n,"y1","14"),r(n,"x2","21"),r(n,"y2","3")},m(i,s){v(i,e,s),v(i,t,s),v(i,n,s)},d(i){i&&(h(e),h(t),h(n))}}}function kn(l){let e,t;return{c(){e=E("path"),t=E("line"),r(e,"d","M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z"),r(t,"x1","9"),r(t,"y1","14"),r(t,"x2","15"),r(t,"y2","14")},m(n,i){v(n,e,i),v(n,t,i)},d(n){n&&(h(e),h(t))}}}function yn(l){let e,t,n,i,s,o,c,f,u;function d(b,z){return b[0]?kn:gn}let m=d(l),p=m(l);return{c(){e=_("div"),t=_("button"),n=E("svg"),p.c(),o=x(),c=_("button"),c.innerHTML=' ',r(n,"width","16"),r(n,"height","16"),r(n,"viewBox","0 0 24 24"),r(n,"fill","none"),r(n,"stroke","currentColor"),r(n,"stroke-width","2"),r(n,"stroke-linecap","round"),r(n,"stroke-linejoin","round"),r(t,"class","action-btn svelte-7ixqek"),r(t,"title",i=l[0]?"Open folder":"Open file"),r(t,"aria-label",s=l[0]?"Open folder":"Open file"),r(c,"class","action-btn action-btn-danger svelte-7ixqek"),r(c,"title","Delete"),r(c,"aria-label","Delete"),r(e,"class","file-actions svelte-7ixqek")},m(b,z){v(b,e,z),a(e,t),a(t,n),p.m(n,null),a(e,o),a(e,c),f||(u=[B(t,"click",l[1]),B(c,"click",l[2])],f=!0)},p(b,[z]){m!==(m=d(b))&&(p.d(1),p=m(b),p&&(p.c(),p.m(n,null))),z&1&&i!==(i=b[0]?"Open folder":"Open file")&&r(t,"title",i),z&1&&s!==(s=b[0]?"Open folder":"Open file")&&r(t,"aria-label",s)},i:D,o:D,d(b){b&&h(e),p.d(),f=!1,te(u)}}}function wn(l,e,t){let{isFolder:n=!1}=e,{fileId:i=""}=e,{nodeId:s=""}=e;const o=Xt();function c(){n?o("openFolder",s):o("open",i)}function f(){o("delete",s)}return l.$$set=u=>{"isFolder"in u&&t(0,n=u.isFolder),"fileId"in u&&t(3,i=u.fileId),"nodeId"in u&&t(4,s=u.nodeId)},[n,c,f,i,s]}class Cn extends Le{constructor(e){super(),Ee(this,e,wn,yn,Ie,{isFolder:0,fileId:3,nodeId:4})}}function tt(l){if(l==null||l<0)return"—";if(l===0)return"0 B";const e=["B","KB","MB","GB"],t=Math.min(Math.floor(Math.log(l)/Math.log(1024)),e.length-1),n=l/Math.pow(1024,t);return(t===0?n.toFixed(0):n.toFixed(1))+" "+e[t]}const Mn={"image/jpeg":"JPEG image","image/png":"PNG image","image/gif":"GIF image","image/webp":"WebP image","image/svg+xml":"SVG image","image/bmp":"BMP image","image/tiff":"TIFF image","image/avif":"AVIF image","application/pdf":"PDF document","application/msword":"Word document","application/vnd.openxmlformats-officedocument.wordprocessingml.document":"Word document","application/vnd.ms-excel":"Excel spreadsheet","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":"Excel spreadsheet","application/vnd.ms-powerpoint":"PowerPoint presentation","application/vnd.openxmlformats-officedocument.presentationml.presentation":"PowerPoint presentation","application/zip":"ZIP archive","application/gzip":"GZIP archive","application/x-tar":"TAR archive","application/x-7z-compressed":"7z archive","application/x-rar-compressed":"RAR archive","text/plain":"Text file","text/html":"HTML file","text/css":"CSS file","text/javascript":"JavaScript file","application/json":"JSON file","application/xml":"XML file","application/x-yaml":"YAML file","application/octet-stream":"Binary file","application/x-msdos-program":"Executable","inode/directory":"Folder"};function lt(l){return l?Mn[l]||l:"Unknown"}function xn(l){if(l.type==="folder")return"folder";const e=(l.mime||"").toLowerCase();if(e.startsWith("image/"))return"image";if(e.startsWith("video/"))return"video";if(e.startsWith("audio/"))return"audio";if(e.startsWith("text/"))return"text";if(e.includes("pdf"))return"pdf";if(e.includes("word")||e.includes("document"))return"document";if(e.includes("spreadsheet")||e.includes("excel"))return"spreadsheet";if(e.includes("presentation")||e.includes("powerpoint"))return"presentation";if(e.includes("zip")||e.includes("tar")||e.includes("gzip")||e.includes("rar")||e.includes("7z")||e.includes("compress"))return"archive";if(e.includes("json")||e.includes("xml")||e.includes("yaml")||e.includes("javascript")||e.includes("css")||e.includes("html"))return"code";const n=(l.name||"").toLowerCase().split(".").pop();return["js","ts","jsx","tsx","vue","svelte","py","rs","go","c","cpp","h","hpp","java","kt","swift","rb","php","pl","sh","bash","zsh","fish","yml","yaml","json","xml","toml","ini","cfg","conf","md","markdown","css","scss","less","sass","sql","graphql","proto","gradle","cmake","makefile","dockerfile","env","gitignore"].includes(n)?"code":"generic"}function nt(l,e,t){const n=l.slice();return n[15]=e[t],n}function Nn(l){let e;return{c(){e=_("span"),r(e,"class","expand-spacer svelte-1fc98j1")},m(t,n){v(t,e,n)},p:D,d(t){t&&h(e)}}}function Sn(l){let e,t,n,i,s,o;const c=[In,Fn],f=[];function u(d,m){return d[4]?0:1}return t=u(l),n=f[t]=c[t](l),{c(){e=_("button"),n.c(),r(e,"class","expand-toggle svelte-1fc98j1"),r(e,"aria-label",i=l[0][l[2].id]?"Collapse":"Expand")},m(d,m){v(d,e,m),f[t].m(e,null),s||(o=B(e,"click",l[6]),s=!0)},p(d,m){let p=t;t=u(d),t===p?f[t].p(d,m):(de(),ee(f[p],1,1,()=>{f[p]=null}),pe(),n=f[t],n?n.p(d,m):(n=f[t]=c[t](d),n.c()),Q(n,1),n.m(e,null)),m&5&&i!==(i=d[0][d[2].id]?"Collapse":"Expand")&&r(e,"aria-label",i)},d(d){d&&h(e),f[t].d(),s=!1,o()}}}function Fn(l){let e,t,n,i;return{c(){e=E("svg"),t=E("path"),r(t,"d","M9 18l6-6-6-6"),r(e,"width","10"),r(e,"height","10"),r(e,"viewBox","0 0 24 24"),r(e,"fill","currentColor")},m(s,o){v(s,e,o),a(e,t),i=!0},p(s,o){l=s},i(s){i||(s&&ze(()=>{i&&(n||(n=$e(e,rotate,l[0][l[2].id]?90:0,!0)),n.run(1))}),i=!0)},o(s){s&&(n||(n=$e(e,rotate,l[0][l[2].id]?90:0,!1)),n.run(0)),i=!1},d(s){s&&h(e),s&&n&&n.end()}}}function In(l){let e,t;return{c(){e=E("svg"),t=E("path"),r(t,"d","M12 2v4M12 18v4M4.93 4.93l2.83 2.83M16.24 16.24l2.83 2.83M2 12h4M18 12h4M4.93 19.07l2.83-2.83M16.24 7.76l2.83-2.83"),r(e,"width","10"),r(e,"height","10"),r(e,"viewBox","0 0 24 24"),r(e,"fill","currentColor"),r(e,"class","spin svelte-1fc98j1")},m(n,i){v(n,e,i),a(e,t)},p:D,i:D,o:D,d(n){n&&h(e)}}}function En(l){let e,t=tt(l[2].size)+"",n,i,s,o,c,f=lt(l[2].mime)+"",u;return{c(){e=_("span"),n=I(t),i=x(),s=_("span"),s.textContent="·",o=x(),c=_("span"),u=I(f),r(s,"class","meta-sep svelte-1fc98j1")},m(d,m){v(d,e,m),a(e,n),v(d,i,m),v(d,s,m),v(d,o,m),v(d,c,m),a(c,u)},p(d,m){m&4&&t!==(t=tt(d[2].size)+"")&&T(n,t),m&4&&f!==(f=lt(d[2].mime)+"")&&T(u,f)},d(d){d&&(h(e),h(i),h(s),h(o),h(c))}}}function Ln(l){let e,t,n,i=l[1][l[2].id]&&l[1][l[2].id].length>0&&it(l);return{c(){e=_("span"),e.textContent="Folder",t=x(),i&&i.c(),n=ue()},m(s,o){v(s,e,o),v(s,t,o),i&&i.m(s,o),v(s,n,o)},p(s,o){s[1][s[2].id]&&s[1][s[2].id].length>0?i?i.p(s,o):(i=it(s),i.c(),i.m(n.parentNode,n)):i&&(i.d(1),i=null)},d(s){s&&(h(e),h(t),h(n)),i&&i.d(s)}}}function it(l){let e,t,n,i=l[1][l[2].id].length+"",s,o,c=l[1][l[2].id].length===1?"item":"items",f;return{c(){e=_("span"),e.textContent="·",t=x(),n=_("span"),s=I(i),o=x(),f=I(c),r(e,"class","meta-sep svelte-1fc98j1")},m(u,d){v(u,e,d),v(u,t,d),v(u,n,d),a(n,s),a(n,o),a(n,f)},p(u,d){d&6&&i!==(i=u[1][u[2].id].length+"")&&T(s,i),d&6&&c!==(c=u[1][u[2].id].length===1?"item":"items")&&T(f,c)},d(u){u&&(h(e),h(t),h(n))}}}function st(l){let e,t,n=Z(l[1][l[2].id]),i=[];for(let o=0;oee(i[o],1,1,()=>{i[o]=null});return{c(){for(let o=0;o{F=null}),pe())},i(y){N||(Q(i.$$.fragment,y),Q(z.$$.fragment,y),Q(F),N=!0)},o(y){ee(i.$$.fragment,y),ee(z.$$.fragment,y),ee(F),N=!1},d(y){y&&(h(e),h(g),h(k)),O.d(),Ce(i),S.d(),Ce(z),F&&F.d(y)}}}function On(l,...e){var t,n,i;try{const s=(i=(n=(t=window==null?void 0:window.go)==null?void 0:t.main)==null?void 0:n.App)==null?void 0:i[l];if(typeof s=="function")return s(...e)}catch(s){console.error("Wails call error:",l,s)}}function jn(l,e,t){let{item:n}=e,{expanded:i={}}=e,{childrenMap:s={}}=e,{depth:o=0}=e;const c=Xt();let f=!1;async function u(){const C=n.id;if(i[C]){t(0,i={...i,[C]:!1});return}if(t(4,f=!0),t(0,i={...i,[C]:!0}),!s[C]){try{t(1,s[C]=await On("ListItems",C)||[],s)}catch{t(1,s[C]=[],s)}t(1,s={...s})}t(4,f=!1)}const d=xn(n),m=n.type==="folder",p=C=>c("open",C.detail),b=C=>c("openFolder",C.detail),z=C=>c("delete",C.detail);function g(C){De.call(this,l,C)}function k(C){De.call(this,l,C)}function N(C){De.call(this,l,C)}return l.$$set=C=>{"item"in C&&t(2,n=C.item),"expanded"in C&&t(0,i=C.expanded),"childrenMap"in C&&t(1,s=C.childrenMap),"depth"in C&&t(3,o=C.depth)},[i,s,n,o,f,c,u,d,m,p,b,z,g,k,N]}class Qt extends Le{constructor(e){super(),Ee(this,e,jn,An,Ie,{item:2,expanded:0,childrenMap:1,depth:3})}}function rt(l,e,t){const n=l.slice();return n[80]=e[t],n}function ft(l,e,t){const n=l.slice();return n[83]=e[t],n}function ct(l,e,t){const n=l.slice();return n[94]=e[t],n}function at(l,e,t){const n=l.slice();return n[91]=e[t],n}function ut(l,e,t){const n=l.slice();return n[86]=e[t],n}function dt(l,e,t){const n=l.slice();return n[83]=e[t],n}function pt(l,e,t){const n=l.slice();return n[86]=e[t],n}function _t(l,e,t){const n=l.slice();return n[99]=e[t],n}function mt(l,e,t){const n=l.slice();return n[80]=e[t],n}function ht(l,e,t){const n=l.slice();return n[104]=e[t],n}function vt(l,e,t){const n=l.slice();return n[107]=e[t],n}function bt(l){let e,t=l[107].label+"",n,i,s,o,c;function f(){return l[48](l[107])}return{c(){e=_("button"),n=I(t),i=x(),r(e,"class",s="nav-item "+(l[4]===l[107].id?"selected":"")+" svelte-1dzzaxf")},m(u,d){v(u,e,d),a(e,n),a(e,i),o||(c=B(e,"click",f),o=!0)},p(u,d){l=u,d[0]&1&&t!==(t=l[107].label+"")&&T(n,t),d[0]&17&&s!==(s="nav-item "+(l[4]===l[107].id?"selected":"")+" svelte-1dzzaxf")&&r(e,"class",s)},d(u){u&&h(e),o=!1,c()}}}function zt(l){let e,t,n,i,s,o=l[1].length>0&>(l),c=Z(l[1]),f=[];for(let d=0;d0?o?o.p(d,m):(o=gt(d),o.c(),o.m(t,null)):o&&(o.d(1),o=null),m[0]&268435490){c=Z(d[1]);let p;for(p=0;p0)return qn;if(c[3])return Rn}let s=i(l),o=s&&s(l);return{c(){e=_("div"),t=_("h2"),t.textContent="Верстак",n=x(),o&&o.c(),r(t,"class","svelte-1dzzaxf"),r(e,"class","welcome svelte-1dzzaxf")},m(c,f){v(c,e,f),a(e,t),a(e,n),o&&o.m(e,null)},p(c,f){s===(s=i(c))&&o?o.p(c,f):(o&&o.d(1),o=s&&s(c),o&&(o.c(),o.m(e,null)))},i:D,o:D,d(c){c&&h(e),o&&o.d()}}}function Tn(l){let e,t,n,i,s,o,c=Z(l[26]),f=[];for(let p=0;p{d[z]=null}),pe()),~i?(s=d[i],s?s.p(p,b):(s=d[i]=u[i](p),s.c()),Q(s,1),s.m(n,null)):s=null)},i(p){o||(Q(s),o=!0)},o(p){ee(s),o=!1},d(p){p&&(h(e),h(t),h(n)),re(f,p),~i&&d[i].d()}}}function Vn(l){let e,t,n,i=l[8].title+"",s,o,c,f,u,d,m,p,b,z,g,k=l[8].dirty&&Pt();return{c(){e=_("div"),t=_("div"),n=_("span"),s=I(i),o=x(),k&&k.c(),c=x(),f=_("div"),u=_("button"),u.textContent="Сохранить",d=x(),m=_("button"),m.textContent="Закрыть",p=x(),b=_("textarea"),r(n,"class","note-title svelte-1dzzaxf"),r(u,"class","btn btn-primary svelte-1dzzaxf"),r(m,"class","btn svelte-1dzzaxf"),r(f,"class","note-editor-actions svelte-1dzzaxf"),r(t,"class","note-editor-header svelte-1dzzaxf"),r(b,"class","note-textarea svelte-1dzzaxf"),r(b,"placeholder","Начните писать..."),r(e,"class","note-editor svelte-1dzzaxf")},m(N,C){v(N,e,C),a(e,t),a(t,n),a(n,s),a(t,o),k&&k.m(t,null),a(t,c),a(t,f),a(f,u),a(f,d),a(f,m),a(e,p),a(e,b),oe(b,l[8].content),z||(g=[B(u,"click",l[39]),B(m,"click",l[37]),B(b,"input",l[51]),B(b,"input",l[38])],z=!0)},p(N,C){C[0]&256&&i!==(i=N[8].title+"")&&T(s,i),N[8].dirty?k||(k=Pt(),k.c(),k.m(t,c)):k&&(k.d(1),k=null),C[0]&256&&oe(b,N[8].content)},i:D,o:D,d(N){N&&h(e),k&&k.d(),z=!1,te(g)}}}function Rn(l){let e,t,n;return{c(){e=_("p"),t=I("Ошибка: "),n=I(l[3]),r(e,"class","error-text svelte-1dzzaxf")},m(i,s){v(i,e,s),a(e,t),a(e,n)},p(i,s){s[0]&8&&T(n,i[3])},d(i){i&&h(e)}}}function qn(l){let e,t,n;return{c(){e=_("p"),e.textContent="Выберите раздел в боковой панели.",t=x(),n=_("p"),n.textContent="Или создайте новое дело кнопкой «+».",r(e,"class","svelte-1dzzaxf"),r(n,"class","hint svelte-1dzzaxf")},m(i,s){v(i,e,s),v(i,t,s),v(i,n,s)},p:D,d(i){i&&(h(e),h(t),h(n))}}}function Wn(l){let e;return{c(){e=_("p"),e.textContent="Загрузка...",r(e,"class","svelte-1dzzaxf")},m(t,n){v(t,e,n)},p:D,d(t){t&&h(e)}}}function Mt(l){let e,t=l[99].label+"",n,i,s;function o(){return l[52](l[99])}return{c(){e=_("button"),n=I(t),r(e,"class",Ol(l[47](l[99].id))+" svelte-1dzzaxf")},m(c,f){v(c,e,f),a(e,n),i||(s=B(e,"click",o),i=!0)},p(c,f){l=c},d(c){c&&h(e),i=!1,s()}}}function Gn(l){let e;return{c(){e=_("div"),e.innerHTML='Активность появится позже
',r(e,"class","empty-state svelte-1dzzaxf")},m(t,n){v(t,e,n)},p:D,i:D,o:D,d(t){t&&h(e)}}}function Kn(l){let e,t,n,i,s,o,c,f,u,d,m,p;function b(k,N){return k[10].length===0?Qn:Yn}let z=b(l),g=z(l);return{c(){e=_("div"),t=_("div"),n=_("input"),i=x(),s=_("input"),o=x(),c=_("button"),f=I("Записать"),d=x(),g.c(),r(n,"type","text"),r(n,"placeholder","Что сделано"),r(n,"class","svelte-1dzzaxf"),r(s,"type","number"),r(s,"placeholder","Мин"),r(s,"min","1"),r(s,"class","svelte-1dzzaxf"),r(c,"class","btn btn-primary svelte-1dzzaxf"),c.disabled=u=!l[12].trim()||!l[11],r(t,"class","worklog-form svelte-1dzzaxf"),r(e,"class","worklog-tab svelte-1dzzaxf")},m(k,N){v(k,e,N),a(e,t),a(t,n),oe(n,l[12]),a(t,i),a(t,s),oe(s,l[11]),a(t,o),a(t,c),a(c,f),a(e,d),g.m(e,null),m||(p=[B(n,"input",l[66]),B(s,"input",l[67]),B(c,"click",l[40])],m=!0)},p(k,N){N[0]&4096&&n.value!==k[12]&&oe(n,k[12]),N[0]&2048&&Ut(s.value)!==k[11]&&oe(s,k[11]),N[0]&6144&&u!==(u=!k[12].trim()||!k[11])&&(c.disabled=u),z===(z=b(k))&&g?g.p(k,N):(g.d(1),g=z(k),g&&(g.c(),g.m(e,null)))},i:D,o:D,d(k){k&&h(e),g.d(),m=!1,te(p)}}}function Jn(l){let e;function t(s,o){return s[9].length===0?ei:$n}let n=t(l),i=n(l);return{c(){i.c(),e=ue()},m(s,o){i.m(s,o),v(s,e,o)},p(s,o){n===(n=t(s))&&i?i.p(s,o):(i.d(1),i=n(s),i&&(i.c(),i.m(e.parentNode,e)))},i:D,o:D,d(s){s&&h(e),i.d(s)}}}function Un(l){let e,t,n,i,s,o,c,f,u,d,m,p,b,z;const g=[ni,li,ti],k=[];function N(L,O){return L[25]?0:L[22].length===0?1:2}u=N(l),d=k[u]=g[u](l);let C=l[19]&&!l[21]&&Ft();return{c(){e=_("div"),t=_("div"),n=_("button"),i=I("+ Добавить файл"),s=x(),o=_("button"),c=I("+ Добавить папку"),f=x(),d.c(),m=x(),C&&C.c(),r(n,"class","btn btn-primary svelte-1dzzaxf"),n.disabled=l[19],r(o,"class","btn svelte-1dzzaxf"),o.disabled=l[19],r(t,"class","tab-toolbar svelte-1dzzaxf"),r(e,"class","files-tab svelte-1dzzaxf")},m(L,O){v(L,e,O),a(e,t),a(t,n),a(n,i),a(t,s),a(t,o),a(o,c),a(e,f),k[u].m(e,null),a(e,m),C&&C.m(e,null),p=!0,b||(z=[B(n,"click",l[41]),B(o,"click",l[42])],b=!0)},p(L,O){(!p||O[0]&524288)&&(n.disabled=L[19]),(!p||O[0]&524288)&&(o.disabled=L[19]);let A=u;u=N(L),u===A?k[u].p(L,O):(de(),ee(k[A],1,1,()=>{k[A]=null}),pe(),d=k[u],d?d.p(L,O):(d=k[u]=g[u](L),d.c()),Q(d,1),d.m(e,m)),L[19]&&!L[21]?C||(C=Ft(),C.c(),C.m(e,null)):C&&(C.d(1),C=null)},i(L){p||(Q(d),p=!0)},o(L){ee(d),p=!1},d(L){L&&h(e),k[u].d(),C&&C.d(),b=!1,te(z)}}}function Zn(l){let e,t,n,i,s,o,c,f=l[16]&&It(l);function u(p,b){return p[7].length===0&&!p[16]?si:ii}let d=u(l),m=d(l);return{c(){e=_("div"),t=_("div"),n=_("button"),n.textContent="+ Добавить заметку",i=x(),f&&f.c(),s=x(),m.c(),r(n,"class","btn btn-primary svelte-1dzzaxf"),r(t,"class","tab-toolbar svelte-1dzzaxf"),r(e,"class","notes-tab svelte-1dzzaxf")},m(p,b){v(p,e,b),a(e,t),a(t,n),a(e,i),f&&f.m(e,null),a(e,s),m.m(e,null),o||(c=B(n,"click",l[33]),o=!0)},p(p,b){p[16]?f?f.p(p,b):(f=It(p),f.c(),f.m(e,s)):f&&(f.d(1),f=null),d===(d=u(p))&&m?m.p(p,b):(m.d(1),m=d(p),m&&(m.c(),m.m(e,null)))},i:D,o:D,d(p){p&&h(e),f&&f.d(),m.d(),o=!1,c()}}}function Xn(l){let e,t,n=l[5].title+"",i,s,o,c,f,u,d=l[5].type+"",m,p,b,z,g,k=(l[5].section||"—")+"",N,C,L,O,A,H=ae(l[5].createdAt)+"",S,F,y,P,q,W,le,U,X,K,ne,$,ie,J,R=l[7].length>0&&Lt(l),j=l[10].length>0&&Ot(l);return{c(){e=_("div"),t=_("h2"),i=I(n),s=x(),o=_("div"),c=_("div"),f=_("span"),f.textContent="Тип",u=_("span"),m=I(d),p=x(),b=_("div"),z=_("span"),z.textContent="Раздел",g=_("span"),N=I(k),C=x(),L=_("div"),O=_("span"),O.textContent="Создано",A=_("span"),S=I(H),F=x(),y=_("div"),P=_("button"),P.textContent="✏️ Новая заметка",q=x(),W=_("button"),W.textContent="📎 Добавить файл",le=x(),U=_("button"),U.textContent="⚡ Добавить действие",X=x(),K=_("button"),K.textContent="🕐 Записать время",ne=x(),R&&R.c(),$=x(),j&&j.c(),r(t,"class","svelte-1dzzaxf"),r(f,"class","meta-label svelte-1dzzaxf"),r(u,"class","svelte-1dzzaxf"),r(c,"class","meta-item svelte-1dzzaxf"),r(z,"class","meta-label svelte-1dzzaxf"),r(g,"class","svelte-1dzzaxf"),r(b,"class","meta-item svelte-1dzzaxf"),r(O,"class","meta-label svelte-1dzzaxf"),r(A,"class","svelte-1dzzaxf"),r(L,"class","meta-item svelte-1dzzaxf"),r(o,"class","meta-grid svelte-1dzzaxf"),r(P,"class","qa-btn svelte-1dzzaxf"),r(W,"class","qa-btn svelte-1dzzaxf"),r(U,"class","qa-btn svelte-1dzzaxf"),U.disabled=!0,r(U,"title","Следующий этап"),r(K,"class","qa-btn svelte-1dzzaxf"),r(y,"class","quick-actions svelte-1dzzaxf"),r(e,"class","overview svelte-1dzzaxf")},m(M,V){v(M,e,V),a(e,t),a(t,i),a(e,s),a(e,o),a(o,c),a(c,f),a(c,u),a(u,m),a(o,p),a(o,b),a(b,z),a(b,g),a(g,N),a(o,C),a(o,L),a(L,O),a(L,A),a(A,S),a(e,F),a(e,y),a(y,P),a(y,q),a(y,W),a(y,le),a(y,U),a(y,X),a(y,K),a(e,ne),R&&R.m(e,null),a(e,$),j&&j.m(e,null),ie||(J=[B(P,"click",l[53]),B(W,"click",l[54]),B(K,"click",l[55])],ie=!0)},p(M,V){V[0]&32&&n!==(n=M[5].title+"")&&T(i,n),V[0]&32&&d!==(d=M[5].type+"")&&T(m,d),V[0]&32&&k!==(k=(M[5].section||"—")+"")&&T(N,k),V[0]&32&&H!==(H=ae(M[5].createdAt)+"")&&T(S,H),M[7].length>0?R?R.p(M,V):(R=Lt(M),R.c(),R.m(e,$)):R&&(R.d(1),R=null),M[10].length>0?j?j.p(M,V):(j=Ot(M),j.c(),j.m(e,null)):j&&(j.d(1),j=null)},i:D,o:D,d(M){M&&h(e),R&&R.d(),j&&j.d(),ie=!1,te(J)}}}function Yn(l){let e,t=Z(l[10]),n=[];for(let i=0;iЗаписей работы пока нет',r(e,"class","empty-state svelte-1dzzaxf")},m(t,n){v(t,e,n)},p:D,d(t){t&&h(e)}}}function xt(l){let e,t,n=l[83].summary+"",i,s,o,c=l[83].minutes+"",f,u,d=ae(l[83].createdAt)+"",m,p;return{c(){e=_("div"),t=_("div"),i=I(n),s=x(),o=_("div"),f=I(c),u=I(" мин · "),m=I(d),p=x(),r(t,"class","svelte-1dzzaxf"),r(o,"class","wl-meta svelte-1dzzaxf"),r(e,"class","worklog-entry svelte-1dzzaxf")},m(b,z){v(b,e,z),a(e,t),a(t,i),a(e,s),a(e,o),a(o,f),a(o,u),a(o,m),a(e,p)},p(b,z){z[0]&1024&&n!==(n=b[83].summary+"")&&T(i,n),z[0]&1024&&c!==(c=b[83].minutes+"")&&T(f,c),z[0]&1024&&d!==(d=ae(b[83].createdAt)+"")&&T(m,d)},d(b){b&&h(e)}}}function $n(l){let e,t=Z(l[9]),n=[];for(let i=0;iДействий пока нет',r(e,"class","empty-state svelte-1dzzaxf")},m(t,n){v(t,e,n)},p:D,d(t){t&&h(e)}}}function Nt(l){let e,t,n=l[94].title+"",i,s,o=l[94].type+"",c,f,u,d,m,p;function b(){return l[65](l[94])}return{c(){e=_("div"),t=_("span"),i=I(n),s=_("span"),c=I(o),f=x(),u=_("button"),u.textContent="Запустить",d=x(),r(t,"class","svelte-1dzzaxf"),r(s,"class","action-type svelte-1dzzaxf"),r(u,"class","btn btn-sm svelte-1dzzaxf"),r(e,"class","action-card svelte-1dzzaxf")},m(z,g){v(z,e,g),a(e,t),a(t,i),a(e,s),a(s,c),a(e,f),a(e,u),a(e,d),m||(p=B(u,"click",b),m=!0)},p(z,g){l=z,g[0]&512&&n!==(n=l[94].title+"")&&T(i,n),g[0]&512&&o!==(o=l[94].type+"")&&T(c,o)},d(z){z&&h(e),m=!1,p()}}}function ti(l){let e,t=[],n=new Map,i,s=Z(l[22]);const o=c=>c[91].id;for(let c=0;c ',n=x(),i=_("p"),i.textContent="В этом проекте пока нет файлов",s=x(),o=_("p"),o.textContent="Добавьте файл или папку, чтобы сохранить материалы проекта.",c=x(),f=_("div"),u=_("button"),u.textContent="Добавить файл",d=x(),m=_("button"),m.textContent="Добавить папку",r(t,"class","empty-icon svelte-1dzzaxf"),r(i,"class","svelte-1dzzaxf"),r(o,"class","hint svelte-1dzzaxf"),r(u,"class","btn btn-primary svelte-1dzzaxf"),r(m,"class","btn svelte-1dzzaxf"),r(f,"class","empty-actions svelte-1dzzaxf"),r(e,"class","empty-state svelte-1dzzaxf")},m(z,g){v(z,e,g),a(e,t),a(e,n),a(e,i),a(e,s),a(e,o),a(e,c),a(e,f),a(f,u),a(f,d),a(f,m),p||(b=[B(u,"click",l[41]),B(m,"click",l[42])],p=!0)},p:D,i:D,o:D,d(z){z&&h(e),p=!1,te(b)}}}function ni(l){let e;return{c(){e=_("div"),e.innerHTML='Загрузка...
',r(e,"class","empty-state svelte-1dzzaxf")},m(t,n){v(t,e,n)},p:D,i:D,o:D,d(t){t&&h(e)}}}function St(l,e){let t,n,i,s,o;function c(d){e[60](d)}function f(d){e[61](d)}let u={item:e[91]};return e[23]!==void 0&&(u.expanded=e[23]),e[24]!==void 0&&(u.childrenMap=e[24]),n=new Qt({props:u}),Se.push(()=>et(n,"expanded",c)),Se.push(()=>et(n,"childrenMap",f)),n.$on("delete",e[62]),n.$on("open",e[63]),n.$on("openFolder",e[64]),{key:l,first:null,c(){t=ue(),Fe(n.$$.fragment),this.first=t},m(d,m){v(d,t,m),we(n,d,m),o=!0},p(d,m){e=d;const p={};m[0]&4194304&&(p.item=e[91]),!i&&m[0]&8388608&&(i=!0,p.expanded=e[23],Qe(()=>i=!1)),!s&&m[0]&16777216&&(s=!0,p.childrenMap=e[24],Qe(()=>s=!1)),n.$set(p)},i(d){o||(Q(n.$$.fragment,d),o=!0)},o(d){ee(n.$$.fragment,d),o=!1},d(d){d&&h(t),Ce(n,d)}}}function Ft(l){let e;return{c(){e=_("div"),e.innerHTML='Сканирование...
',r(e,"class","empty-state svelte-1dzzaxf")},m(t,n){v(t,e,n)},d(t){t&&h(e)}}}function It(l){let e,t,n,i,s,o,c,f,u;return{c(){e=_("div"),t=_("input"),n=x(),i=_("div"),s=_("button"),s.textContent="Создать",o=x(),c=_("button"),c.textContent="Отмена",r(t,"type","text"),r(t,"placeholder","Название заметки"),r(t,"class","svelte-1dzzaxf"),r(s,"class","btn btn-primary svelte-1dzzaxf"),r(c,"class","btn svelte-1dzzaxf"),r(i,"class","form-actions svelte-1dzzaxf"),r(e,"class","create-form svelte-1dzzaxf")},m(d,m){v(d,e,m),a(e,t),oe(t,l[17]),a(e,n),a(e,i),a(i,s),a(i,o),a(i,c),f||(u=[B(t,"input",l[57]),B(t,"keydown",l[58]),B(s,"click",l[35]),B(c,"click",l[34])],f=!0)},p(d,m){m[0]&131072&&t.value!==d[17]&&oe(t,d[17])},d(d){d&&h(e),f=!1,te(u)}}}function ii(l){let e,t=Z(l[7]),n=[];for(let i=0;iНет заметокСоздайте первую заметку для этого дела.
',r(e,"class","empty-state svelte-1dzzaxf")},m(t,n){v(t,e,n)},p:D,d(t){t&&h(e)}}}function Et(l){let e,t,n=l[86].title+"",i,s,o,c=ae(l[86].createdAt)+"",f,u,d,m;function p(){return l[59](l[86])}return{c(){e=_("div"),t=_("div"),i=I(n),s=x(),o=_("div"),f=I(c),u=x(),r(t,"class","note-card-title svelte-1dzzaxf"),r(o,"class","note-card-date svelte-1dzzaxf"),r(e,"class","note-card svelte-1dzzaxf")},m(b,z){v(b,e,z),a(e,t),a(t,i),a(e,s),a(e,o),a(o,f),a(e,u),d||(m=B(e,"click",p),d=!0)},p(b,z){l=b,z[0]&128&&n!==(n=l[86].title+"")&&T(i,n),z[0]&128&&c!==(c=ae(l[86].createdAt)+"")&&T(f,c)},d(b){b&&h(e),d=!1,m()}}}function Lt(l){let e,t,n,i=Z(l[7].slice(0,5)),s=[];for(let o=0;ol[70].call(b)),r(d,"class","form-group svelte-1dzzaxf"),r(k,"class","btn btn-primary svelte-1dzzaxf"),r(C,"class","btn svelte-1dzzaxf"),r(g,"class","modal-actions svelte-1dzzaxf"),r(t,"class","modal svelte-1dzzaxf"),r(e,"class","modal-overlay svelte-1dzzaxf")},m(S,F){v(S,e,F),a(e,t),a(t,n),a(t,i),a(t,s),a(s,o),a(s,c),a(s,f),oe(f,l[14]),a(t,u),a(t,d),a(d,m),a(d,p),a(d,b);for(let y=0;y⚒ Верстак ',i=x(),s=_("nav"),o=_("div"),c=_("div"),c.textContent="Разделы",f=x();for(let M=0;M{$[fe]=null}),pe(),A=$[O],A?A.p(M,V):(A=$[O]=ne[O](M),A.c()),Q(A,1),A.m(g,H)),!M[8]&&!M[5]?J?J.p(M,V):(J=Dt(M),J.c(),J.m(g,S)):J&&(J.d(1),J=null),M[13]?R?R.p(M,V):(R=Ht(M),R.c(),R.m(g,F)):R&&(R.d(1),R=null),M[21]&&M[20]?j?j.p(M,V):(j=Tt(M),j.c(),j.m(g,null)):j&&(j.d(1),j=null)},i(M){y||(Q(A),y=!0)},o(M){ee(A),y=!1},d(M){M&&h(e),re(q,M),W&&W.d(),X.d(),K&&K.d(),$[O].d(),J&&J.d(),R&&R.d(),j&&j.d()}}}function Y(l,...e){try{if(window.go&&window.go.main&&window.go.main.App){const t=window.go.main.App[l];if(typeof t=="function")return t(...e)}}catch(t){console.error("Wails call error:",l,t)}return Promise.reject(new Error("Wails not connected: "+l))}function ae(l){if(!l)return"";try{return new Date(l).toLocaleDateString("ru-RU",{day:"numeric",month:"short"})}catch{return l}}const Rt=l=>l.id!=="today"&&l.id!=="inbox";function ri(l,e,t){let n=[],i=[],s="",o="",c="",f=null,u="overview",d=[],m=null,p=[],b=[],z=[],g="",k="",N=!1,C="",L="clients",O=!1,A="",H=!0,S=!1,F=null,y=!1,P="",q=[],W={},le={},U=!1;const X=[{id:"overview",label:"Обзор"},{id:"notes",label:"Заметки"},{id:"files",label:"Файлы"},{id:"actions",label:"Действия"},{id:"worklog",label:"Журнал"},{id:"activity",label:"Активность"}];let K=null;Kl(async()=>{try{t(2,s=await Y("VerstakVersion")||"verstak-gui/v2"),t(0,n=await Y("ListSections")||[])}catch(w){t(3,o=String(w)),t(0,n=[{id:"today",label:"Сегодня"},{id:"inbox",label:"Неразобранное"},{id:"clients",label:"Клиенты"},{id:"projects",label:"Проекты"},{id:"recipes",label:"Рецепты"},{id:"documents",label:"Документы"},{id:"archive",label:"Архив"}])}window.runtime&&window.runtime.EventsOn&&(window.runtime.EventsOn("files-dropped",sl),K=()=>window.runtime.EventsOff("files-dropped")),t(18,H=!1)}),Jl(()=>{K&&K()});async function ne(w){t(4,c=w),t(5,f=null),t(6,u="overview"),t(7,d=[]),p=[],t(9,b=[]),t(10,z=[]),t(13,N=!1),t(3,o="");try{t(1,i=await Y("ListNodesBySection",w)||[])}catch(G){t(3,o=String(G)),t(1,i=[])}}async function $(w){t(5,f=w),t(6,u="overview"),t(7,d=[]),p=[],t(9,b=[]),t(10,z=[]),t(22,q=[]),t(23,W={}),t(24,le={}),t(8,m=null),t(13,N=!1),t(16,O=!1),t(3,o=""),await ie(w.id)}async function ie(w){try{t(7,d=await Y("ListNotes",w)||[])}catch{}try{p=await Y("ListFiles",w)||[]}catch{}try{t(9,b=await Y("ListActions",w)||[])}catch{}try{t(10,z=await Y("ListWorklog",w)||[])}catch{}}async function J(w){t(25,U=!0);try{t(22,q=await Y("ListItems",w)||[])}catch{t(22,q=[])}t(25,U=!1)}function R(){t(13,N=!0),t(14,C=""),t(15,L=c||"clients")}function j(){t(13,N=!1),t(14,C="")}async function M(){if(C.trim())try{const w=await Y("CreateNode","","case",C.trim(),L);t(13,N=!1),t(14,C=""),await ne(L)}catch(w){t(3,o=String(w))}}function V(){t(16,O=!0),t(17,A="")}function fe(){t(16,O=!1),t(17,A="")}async function se(){if(!(!A.trim()||!f))try{const w=await Y("CreateNote",f.id,A.trim());t(7,d=[...d,w&&w.id?w:{id:Date.now().toString(),title:A.trim(),createdAt:new Date().toISOString()}]),t(16,O=!1),t(17,A="")}catch{const G={id:Date.now().toString(),title:A.trim(),createdAt:new Date().toISOString()};t(7,d=[...d,G]),t(16,O=!1),t(17,A="")}}async function _e(w){if(!(m&&m.dirty&&!confirm("Несохранённые изменения. Закрыть?")))try{const G=await Y("ReadNote",w.id);t(8,m={id:w.id,title:w.title,content:G||"",dirty:!1})}catch{t(8,m={id:w.id,title:w.title,content:"# "+w.title+`
+
+`,dirty:!1})}}function $t(){m&&m.dirty&&!confirm("Несохранённые изменения. Закрыть?")||t(8,m=null)}function el(w){m&&(t(8,m.content=w.target.value,m),t(8,m.dirty=!0,m))}async function tl(){if(m)try{await Y("SaveNote",m.id,m.content),t(8,m.dirty=!1,m)}catch{t(8,m.dirty=!1,m)}}async function ll(){const w=parseInt(g,10);if(!(!k.trim()||isNaN(w)||w<=0||!f)){try{const G=await Y("CreateWorklog",f.id,k.trim(),w);t(10,z=[...z,G&&G.id?G:{id:Date.now().toString(),nodeId:f.id,summary:k.trim(),minutes:w,createdAt:new Date().toISOString()}])}catch{t(10,z=[...z,{id:Date.now().toString(),nodeId:f.id,summary:k.trim(),minutes:w,createdAt:new Date().toISOString()}])}t(12,k=""),t(11,g="")}}async function Ge(){const w=await Y("PickFile");w&&await Ae(f.id,w)}async function nl(){const w=await Y("PickDirectory");w&&await Ae(f.id,w)}async function Ae(w,G){t(19,S=!0);try{const je=await Y("PreviewImport",G);t(20,F=je),P=G,t(21,y=!0)}catch(je){t(3,o=String(je))}t(19,S=!1)}async function Oe(w){try{const G=w==="copy"?await Y("AddPathCopy",f.id,P):await Y("AddPathLink",f.id,P);t(21,y=!1),t(20,F=null),t(23,W={}),t(24,le={}),await Promise.all([ie(f.id),J(f.id)])}catch(G){t(3,o=String(G))}}function il(){t(21,y=!1),t(20,F=null)}async function Ke(w){if(confirm("Удалить файл?"))try{await Y("DeleteFileOrFolder",w),p=p.filter(G=>G.nodeId!==w),t(23,W={}),t(24,le={}),await J(f.id)}catch(G){t(3,o=String(G))}}async function Je(w){try{await Y("OpenFile",w)}catch(G){t(3,o=String(G))}}async function sl(w){if(!w||w.length===0)return;if(!f){t(3,o="Сначала выберите дело для добавления файлов");return}const G=w[0];await Ae(f.id,G)}function ol(w){return u===w?"tab active":"tab"}const rl=w=>ne(w.id),fl=w=>$(w),cl=()=>t(3,o="");function al(){m.content=this.value,t(8,m)}const ul=w=>{t(6,u=w.id),w.id==="files"&&f&&q.length===0&&J(f.id)},dl=()=>{t(6,u="notes"),V()},pl=()=>{t(6,u="files"),Ge()},_l=()=>t(6,u="worklog"),ml=w=>_e(w);function hl(){A=this.value,t(17,A)}const vl=w=>w.key==="Enter"&&se(),bl=w=>_e(w);function zl(w){W=w,t(23,W)}function gl(w){le=w,t(24,le)}const kl=w=>Ke(w.detail),yl=w=>Je(w.detail),wl=w=>console.log("open folder",w.detail),Cl=w=>Y("RunAction",w.id);function Ml(){k=this.value,t(12,k)}function xl(){g=Ut(this.value),t(11,g)}function Nl(){C=this.value,t(14,C)}const Sl=w=>w.key==="Enter"&&M();function Fl(){L=Tl(this),t(15,L),t(0,n)}return[n,i,s,o,c,f,u,d,m,b,z,g,k,N,C,L,O,A,H,S,F,y,q,W,le,U,X,ne,$,J,R,j,M,V,fe,se,_e,$t,el,tl,ll,Ge,nl,Oe,il,Ke,Je,ol,rl,fl,cl,al,ul,dl,pl,_l,ml,hl,vl,bl,zl,gl,kl,yl,wl,Cl,Ml,xl,Nl,Sl,Fl,()=>Oe("copy"),()=>Oe("link")]}class fi extends Le{constructor(e){super(),Ee(this,e,ri,oi,Ie,{},null,[-1,-1,-1,-1])}}new fi({target:document.getElementById("app")});
diff --git a/cmd/verstak-gui/frontend-dist/assets/main-CRcfl7JD.css b/cmd/verstak-gui/frontend-dist/assets/main-CRcfl7JD.css
new file mode 100644
index 0000000..e986233
--- /dev/null
+++ b/cmd/verstak-gui/frontend-dist/assets/main-CRcfl7JD.css
@@ -0,0 +1 @@
+.svelte-awis0l.svelte-awis0l,.svelte-awis0l.svelte-awis0l:before,.svelte-awis0l.svelte-awis0l:after{box-sizing:border-box;margin:0;padding:0}.app.svelte-awis0l.svelte-awis0l{display:flex;width:100vw;height:100vh;overflow:hidden;background:#13131f;color:#e4e4ef;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;font-size:14px}.sidebar.svelte-awis0l.svelte-awis0l{width:260px;min-width:200px;height:100vh;display:flex;flex-direction:column;background:#1a1a28;border-right:1px solid #2a2a3c;flex-shrink:0;overflow:hidden}.sidebar-brand.svelte-awis0l.svelte-awis0l{padding:16px 20px;display:flex;align-items:center;gap:10px;border-bottom:1px solid #2a2a3c;flex-shrink:0}.logo.svelte-awis0l.svelte-awis0l{font-size:20px;line-height:1}.brand-name.svelte-awis0l.svelte-awis0l{font-size:16px;font-weight:600}.sidebar-nav.svelte-awis0l.svelte-awis0l{flex:1;overflow-y:auto;padding:12px 0}.nav-group.svelte-awis0l.svelte-awis0l{margin-bottom:16px}.nav-label.svelte-awis0l.svelte-awis0l{font-size:10px;text-transform:uppercase;letter-spacing:.5px;color:#666;padding:4px 20px;margin-bottom:4px}.nav-item.svelte-awis0l.svelte-awis0l{display:block;width:100%;padding:8px 20px;border:none;background:none;color:#ccc;font-size:13px;text-align:left;cursor:pointer;border-radius:0;font-family:inherit}.nav-item.svelte-awis0l.svelte-awis0l:hover{background:#223}.nav-item.selected.svelte-awis0l.svelte-awis0l{background:#2a2a4a;color:#fff;font-weight:500}.nav-empty.svelte-awis0l.svelte-awis0l{padding:8px 20px;color:#555;font-size:12px}.sidebar-footer.svelte-awis0l.svelte-awis0l{padding:12px 20px;border-top:1px solid #2a2a3c;flex-shrink:0}.version.svelte-awis0l.svelte-awis0l{font-size:11px;color:#555}.main.svelte-awis0l.svelte-awis0l{flex:1;display:flex;flex-direction:column;height:100vh;min-width:0;overflow:hidden;background:#13131f}.header.svelte-awis0l.svelte-awis0l{padding:12px 24px;border-bottom:1px solid #2a2a3c;display:flex;align-items:center;flex-shrink:0;min-height:48px}.crumb.svelte-awis0l.svelte-awis0l{font-size:14px;font-weight:500}.crumb.placeholder.svelte-awis0l.svelte-awis0l{color:#666}.crumb-type.svelte-awis0l.svelte-awis0l{font-size:11px;color:#555;background:#1e1e2e;padding:2px 8px;border-radius:10px;margin-left:8px}.error-banner.svelte-awis0l.svelte-awis0l{background:#3a2222;color:#f88;padding:8px 24px;font-size:12px;border-bottom:1px solid #4a2222;flex-shrink:0;cursor:pointer;display:flex;justify-content:space-between}.dismiss.svelte-awis0l.svelte-awis0l{opacity:.6}.tabs.svelte-awis0l.svelte-awis0l{display:flex;border-bottom:1px solid #2a2a3c;flex-shrink:0;padding:0 24px}.tab.svelte-awis0l.svelte-awis0l{padding:10px 16px;border:none;background:none;color:#888;font-size:13px;cursor:pointer;border-bottom:2px solid transparent;font-family:inherit}.tab.svelte-awis0l.svelte-awis0l:hover{color:#ccc}.tab.active.svelte-awis0l.svelte-awis0l{color:#e4e4ef;border-bottom-color:#6366f1}.tab-content.svelte-awis0l.svelte-awis0l{flex:1;overflow-y:auto}.note-editor.svelte-awis0l.svelte-awis0l{flex:1;display:flex;flex-direction:column;height:100%}.note-editor-header.svelte-awis0l.svelte-awis0l{padding:12px 24px;border-bottom:1px solid #2a2a3c;display:flex;align-items:center;gap:12px;flex-shrink:0}.note-title.svelte-awis0l.svelte-awis0l{font-size:16px;font-weight:500}.dirty-mark.svelte-awis0l.svelte-awis0l{color:#f59e0b;font-size:10px}.note-editor-actions.svelte-awis0l.svelte-awis0l{margin-left:auto;display:flex;gap:8px}.note-textarea.svelte-awis0l.svelte-awis0l{flex:1;width:100%;border:none;outline:none;background:#13131f;color:#e4e4ef;font-family:SF Mono,Fira Code,monospace;font-size:14px;line-height:1.6;padding:24px;resize:none}.overview.svelte-awis0l.svelte-awis0l{padding:24px}.overview.svelte-awis0l h2.svelte-awis0l{font-size:24px;margin-bottom:16px}.meta-grid.svelte-awis0l.svelte-awis0l{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:12px;margin-bottom:24px}.meta-item.svelte-awis0l.svelte-awis0l{background:#1a1a28;padding:12px 16px;border-radius:8px}.meta-label.svelte-awis0l.svelte-awis0l{display:block;font-size:11px;color:#666;margin-bottom:4px;text-transform:uppercase}.quick-actions.svelte-awis0l.svelte-awis0l{display:flex;gap:8px;margin-bottom:24px;flex-wrap:wrap}.qa-btn.svelte-awis0l.svelte-awis0l{padding:10px 16px;border:1px solid #2a2a3c;background:#1a1a28;color:#ccc;border-radius:8px;cursor:pointer;font-size:13px;font-family:inherit}.qa-btn.svelte-awis0l.svelte-awis0l:hover{background:#223}.qa-btn.svelte-awis0l.svelte-awis0l:disabled{opacity:.4;cursor:not-allowed}.recent-section.svelte-awis0l.svelte-awis0l{margin-bottom:24px}.recent-section.svelte-awis0l h3.svelte-awis0l{font-size:13px;color:#666;text-transform:uppercase;margin-bottom:8px}.recent-note.svelte-awis0l.svelte-awis0l{padding:8px 12px;border-radius:6px;cursor:pointer;display:flex;justify-content:space-between}.recent-note.svelte-awis0l.svelte-awis0l:hover{background:#1a1a28}.recent-date.svelte-awis0l.svelte-awis0l{font-size:11px;color:#555}.recent-entry.svelte-awis0l.svelte-awis0l{padding:6px 0;font-size:13px;color:#888;border-bottom:1px solid #1a1a28}.notes-tab.svelte-awis0l.svelte-awis0l{padding:24px}.tab-toolbar.svelte-awis0l.svelte-awis0l{margin-bottom:16px}.create-form.svelte-awis0l.svelte-awis0l{background:#1a1a28;padding:16px;border-radius:8px;margin-bottom:16px}.create-form.svelte-awis0l input.svelte-awis0l{width:100%;padding:8px 12px;border:1px solid #2a2a3c;background:#13131f;color:#e4e4ef;border-radius:4px;font-size:14px;font-family:inherit;margin-bottom:8px}.create-form.svelte-awis0l input.svelte-awis0l:focus{outline:none;border-color:#6366f1}.form-actions.svelte-awis0l.svelte-awis0l{display:flex;gap:8px}.notes-list.svelte-awis0l.svelte-awis0l{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:12px}.note-card.svelte-awis0l.svelte-awis0l{background:#1a1a28;border:1px solid #2a2a3c;border-radius:8px;padding:16px;cursor:pointer}.note-card.svelte-awis0l.svelte-awis0l:hover{border-color:#3a3a5c}.note-card-title.svelte-awis0l.svelte-awis0l{font-size:14px;font-weight:500;margin-bottom:4px}.note-card-date.svelte-awis0l.svelte-awis0l{font-size:11px;color:#555}.worklog-tab.svelte-awis0l.svelte-awis0l{padding:24px}.worklog-form.svelte-awis0l.svelte-awis0l{display:flex;gap:8px;margin-bottom:24px;align-items:center}.worklog-form.svelte-awis0l input.svelte-awis0l{padding:8px 12px;border:1px solid #2a2a3c;background:#13131f;color:#e4e4ef;border-radius:4px;font-size:14px;font-family:inherit}.worklog-form.svelte-awis0l input.svelte-awis0l:focus{outline:none;border-color:#6366f1}.worklog-form.svelte-awis0l input[type=text].svelte-awis0l{flex:1}.worklog-form.svelte-awis0l input[type=number].svelte-awis0l{width:70px}.worklog-entry.svelte-awis0l.svelte-awis0l{padding:12px 0;border-bottom:1px solid #1a1a28}.wl-meta.svelte-awis0l.svelte-awis0l{font-size:11px;color:#555;margin-top:2px}.action-card.svelte-awis0l.svelte-awis0l{background:#1a1a28;padding:12px 16px;border-radius:8px;display:flex;align-items:center;gap:12px;margin-bottom:8px}.action-type.svelte-awis0l.svelte-awis0l{font-size:11px;color:#888;background:#223;padding:2px 8px;border-radius:10px}.empty-state.svelte-awis0l.svelte-awis0l{padding:48px 24px;text-align:center}.empty-state.svelte-awis0l p.svelte-awis0l{color:#666;margin-bottom:8px}.hint.svelte-awis0l.svelte-awis0l{font-size:13px;color:#555}.empty-actions.svelte-awis0l.svelte-awis0l{display:flex;gap:8px;justify-content:center;margin:16px 0}.empty-note.svelte-awis0l.svelte-awis0l{font-size:12px;color:#444;margin-top:16px}.welcome.svelte-awis0l.svelte-awis0l{padding:48px 24px;text-align:center}.welcome.svelte-awis0l h2.svelte-awis0l{font-size:32px;font-weight:300;color:#8888a4;margin-bottom:16px}.welcome.svelte-awis0l p.svelte-awis0l{color:#666;font-size:14px}.error-text.svelte-awis0l.svelte-awis0l{color:#f88}.fab.svelte-awis0l.svelte-awis0l{position:fixed;bottom:24px;right:24px;width:56px;height:56px;border-radius:50%;background:#6366f1;color:#fff;font-size:28px;display:flex;align-items:center;justify-content:center;cursor:pointer;box-shadow:0 4px 12px #6366f166}.fab.svelte-awis0l.svelte-awis0l:hover{background:#4f46e5}.modal-overlay.svelte-awis0l.svelte-awis0l{position:fixed;top:0;right:0;bottom:0;left:0;background:#0009;display:flex;align-items:center;justify-content:center;z-index:100}.modal.svelte-awis0l.svelte-awis0l{background:#1a1a28;border:1px solid #2a2a3c;border-radius:12px;padding:24px;width:400px;max-width:90vw}.modal.svelte-awis0l h3.svelte-awis0l{font-size:18px;margin-bottom:16px}.form-group.svelte-awis0l.svelte-awis0l{margin-bottom:12px}.form-group.svelte-awis0l label.svelte-awis0l{display:block;font-size:12px;color:#666;margin-bottom:4px}.form-group.svelte-awis0l input.svelte-awis0l,.form-group.svelte-awis0l select.svelte-awis0l{width:100%;padding:8px 12px;border:1px solid #2a2a3c;background:#13131f;color:#e4e4ef;border-radius:4px;font-size:14px;font-family:inherit}.form-group.svelte-awis0l select.svelte-awis0l{-moz-appearance:none;appearance:none;-webkit-appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%23888' d='M2 4l4 4 4-4'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 10px center;padding-right:32px}.form-group.svelte-awis0l input.svelte-awis0l:focus,.form-group.svelte-awis0l select.svelte-awis0l:focus{outline:none;border-color:#6366f1}.modal-actions.svelte-awis0l.svelte-awis0l{display:flex;gap:8px;justify-content:flex-end;margin-top:16px}.btn.svelte-awis0l.svelte-awis0l{padding:8px 16px;border:1px solid #2a2a3c;background:#1a1a28;color:#ccc;border-radius:6px;cursor:pointer;font-size:13px;font-family:inherit}.btn.svelte-awis0l.svelte-awis0l:hover{background:#223}.btn-primary.svelte-awis0l.svelte-awis0l{background:#6366f1;border-color:#6366f1;color:#fff}.btn-primary.svelte-awis0l.svelte-awis0l:hover{background:#4f46e5}.btn.svelte-awis0l.svelte-awis0l:disabled{opacity:.4;cursor:not-allowed}.btn-sm.svelte-awis0l.svelte-awis0l{padding:4px 10px;font-size:12px}.btn-danger.svelte-awis0l.svelte-awis0l{color:#ff6b6b;border-color:#4a2222}.btn-danger.svelte-awis0l.svelte-awis0l:hover{background:#3a2222}.files-tab.svelte-awis0l.svelte-awis0l{padding:24px}.file-list.svelte-awis0l.svelte-awis0l{display:flex;flex-direction:column;gap:4px}.file-row.svelte-awis0l.svelte-awis0l{display:flex;align-items:center;gap:12px;padding:8px 12px;border-radius:6px;background:#1a1a28}.file-row.svelte-awis0l.svelte-awis0l:hover{background:#223}.file-icon.svelte-awis0l.svelte-awis0l{font-size:16px;width:24px;text-align:center}.file-name.svelte-awis0l.svelte-awis0l{flex:1;font-size:13px}.file-size.svelte-awis0l.svelte-awis0l{font-size:11px;color:#555;width:70px;text-align:right}.file-mime.svelte-awis0l.svelte-awis0l{font-size:11px;color:#555;width:120px;overflow:hidden;text-overflow:ellipsis}.file-actions.svelte-awis0l.svelte-awis0l{display:flex;gap:4px}.file-tree.svelte-awis0l.svelte-awis0l{display:flex;flex-direction:column}.tree-item.svelte-awis0l.svelte-awis0l{display:flex;align-items:center;gap:8px;padding:4px 8px;border-radius:4px}.tree-item.svelte-awis0l.svelte-awis0l:hover{background:#223}.tree-toggle.svelte-awis0l.svelte-awis0l{cursor:pointer;font-size:10px;width:16px;text-align:center;-webkit-user-select:none;user-select:none}.tree-toggle-placeholder.svelte-awis0l.svelte-awis0l{width:16px}.tree-icon.svelte-awis0l.svelte-awis0l{font-size:14px;width:20px;text-align:center}.tree-name.svelte-awis0l.svelte-awis0l{flex:1;font-size:13px;cursor:default}.import-summary.svelte-awis0l.svelte-awis0l{margin-bottom:16px}.summary-row.svelte-awis0l.svelte-awis0l{display:flex;justify-content:space-between;padding:6px 0;font-size:14px;border-bottom:1px solid #2a2a3c}.summary-warn.svelte-awis0l.svelte-awis0l{margin-top:8px;padding:8px 12px;background:#3a2a22;border-radius:6px;color:#fa6;font-size:13px}
diff --git a/cmd/verstak-gui/frontend-dist/assets/main-CXzqY-OQ.js b/cmd/verstak-gui/frontend-dist/assets/main-CXzqY-OQ.js
new file mode 100644
index 0000000..17c6de8
--- /dev/null
+++ b/cmd/verstak-gui/frontend-dist/assets/main-CXzqY-OQ.js
@@ -0,0 +1,3 @@
+var _n=Object.defineProperty;var mn=(n,e,t)=>e in n?_n(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t;var Ve=(n,e,t)=>mn(n,typeof e!="symbol"?e+"":e,t);(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const i of document.querySelectorAll('link[rel="modulepreload"]'))l(i);new MutationObserver(i=>{for(const r of i)if(r.type==="childList")for(const s of r.addedNodes)s.tagName==="LINK"&&s.rel==="modulepreload"&&l(s)}).observe(document,{childList:!0,subtree:!0});function t(i){const r={};return i.integrity&&(r.integrity=i.integrity),i.referrerPolicy&&(r.referrerPolicy=i.referrerPolicy),i.crossOrigin==="use-credentials"?r.credentials="include":i.crossOrigin==="anonymous"?r.credentials="omit":r.credentials="same-origin",r}function l(i){if(i.ep)return;i.ep=!0;const r=t(i);fetch(i.href,r)}})();function J(){}function tl(n){return n()}function ut(){return Object.create(null)}function re(n){n.forEach(tl)}function ll(n){return typeof n=="function"}function Me(n,e){return n!=n?e==e:n!==e||n&&typeof n=="object"||typeof n=="function"}let Fe;function Oe(n,e){return n===e?!0:(Fe||(Fe=document.createElement("a")),Fe.href=e,n===Fe.href)}function kn(n){return Object.keys(n).length===0}function vn(n){return n??""}function a(n,e){n.appendChild(e)}function b(n,e,t){n.insertBefore(e,t||null)}function k(n){n.parentNode&&n.parentNode.removeChild(n)}function fe(n,e){for(let t=0;tn.removeEventListener(e,t,l)}function me(n){return function(e){return e.stopPropagation(),n.call(this,e)}}function qe(n){return function(e){e.target===this&&n.call(this,e)}}function o(n,e,t){t==null?n.removeAttribute(e):n.getAttribute(e)!==t&&n.setAttribute(e,t)}function nl(n){return n===""?null:+n}function bn(n){return Array.from(n.childNodes)}function U(n,e){e=""+e,n.data!==e&&(n.data=e)}function ue(n,e){n.value=e??""}function at(n,e,t){for(let l=0;l{const i=n.$$.callbacks[e];if(i){const r=wn(e,t,{cancelable:l});return i.slice().forEach(s=>{s.call(n,r)}),!r.defaultPrevented}return!0}}function gn(n,e){const t=n.$$.callbacks[e.type];t&&t.slice().forEach(l=>l.call(this,e))}const ge=[],ft=[];let ye=[];const dt=[],yn=Promise.resolve();let Ke=!1;function jn(){Ke||(Ke=!0,yn.then(rl))}function Ie(n){ye.push(n)}const Re=new Set;let we=0;function rl(){if(we!==0)return;const n=De;do{try{for(;wen.indexOf(l)===-1?e.push(l):t.push(l)),t.forEach(l=>l()),ye=e}const Le=new Set;let _e;function ke(){_e={r:0,c:[],p:_e}}function ve(){_e.r||re(_e.c),_e=_e.p}function ne(n,e){n&&n.i&&(Le.delete(n),n.i(e))}function ie(n,e,t,l){if(n&&n.o){if(Le.has(n))return;Le.add(n),_e.c.push(()=>{Le.delete(n),l&&(t&&n.d(1),l())}),n.o(e)}else l&&l()}function te(n){return(n==null?void 0:n.length)!==void 0?n:Array.from(n)}function Dn(n,e){ie(n,1,1,()=>{e.delete(n.key)})}function Mn(n,e,t,l,i,r,s,u,c,d,m,h){let _=n.length,v=r.length,w=_;const g={};for(;w--;)g[n[w].key]=w;const y=[],M=new Map,W=new Map,q=[];for(w=v;w--;){const E=h(i,r,w),L=t(E);let C=s.get(L);C?q.push(()=>C.p(E,e)):(C=d(L,E),C.c()),M.set(L,y[w]=C),L in g&&W.set(L,Math.abs(w-g[L]))}const O=new Set,P=new Set;function T(E){ne(E,1),E.m(u,m),s.set(E.key,E),m=E.first,v--}for(;_&&v;){const E=y[v-1],L=n[_-1],C=E.key,N=L.key;E===L?(m=E.first,_--,v--):M.has(N)?!s.has(C)||O.has(C)?T(E):P.has(N)?_--:W.get(C)>W.get(N)?(P.add(C),T(E)):(O.add(N),_--):(c(L,s),_--)}for(;_--;){const E=n[_];M.has(E.key)||c(E,s)}for(;v;)T(y[v-1]);return re(q),y}function je(n){n&&n.c()}function be(n,e,t){const{fragment:l,after_update:i}=n.$$;l&&l.m(e,t),Ie(()=>{const r=n.$$.on_mount.map(tl).filter(ll);n.$$.on_destroy?n.$$.on_destroy.push(...r):re(r),n.$$.on_mount=[]}),i.forEach(Ie)}function he(n,e){const t=n.$$;t.fragment!==null&&(Sn(t.after_update),re(t.on_destroy),t.fragment&&t.fragment.d(e),t.on_destroy=t.fragment=null,t.ctx=[])}function Nn(n,e){n.$$.dirty[0]===-1&&(ge.push(n),jn(),n.$$.dirty.fill(0)),n.$$.dirty[e/31|0]|=1<{const w=v.length?v[0]:_;return d.ctx&&i(d.ctx[h],d.ctx[h]=w)&&(!d.skip_bound&&d.bound[h]&&d.bound[h](w),m&&Nn(n,h)),_}):[],d.update(),m=!0,re(d.before_update),d.fragment=l?l(d.ctx):!1,e.target){if(e.hydrate){const h=bn(e.target);d.fragment&&d.fragment.l(h),h.forEach(k)}else d.fragment&&d.fragment.c();e.intro&&ne(n.$$.fragment),be(n,e.target,e.anchor),rl()}Se(c)}class Ee{constructor(){Ve(this,"$$");Ve(this,"$$set")}$destroy(){he(this,1),this.$destroy=J}$on(e,t){if(!ll(t))return J;const l=this.$$.callbacks[e]||(this.$$.callbacks[e]=[]);return l.push(t),()=>{const i=l.indexOf(t);i!==-1&&l.splice(i,1)}}$set(e){this.$$set&&!kn(e)&&(this.$$.skip_bound=!0,this.$$set(e),this.$$.skip_bound=!1)}}const En="4";typeof window<"u"&&(window.__svelte||(window.__svelte={v:new Set})).v.add(En);function Fn(n){let e,t;return{c(){e=K("path"),t=K("polyline"),o(e,"d","M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"),o(t,"points","14 2 14 8 20 8")},m(l,i){b(l,e,i),b(l,t,i)},d(l){l&&(k(e),k(t))}}}function Ln(n){let e,t,l,i,r;return{c(){e=K("path"),t=K("polyline"),l=K("line"),i=K("line"),r=K("polyline"),o(e,"d","M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"),o(t,"points","14 2 14 8 20 8"),o(l,"x1","16"),o(l,"y1","13"),o(l,"x2","8"),o(l,"y2","13"),o(i,"x1","16"),o(i,"y1","17"),o(i,"x2","8"),o(i,"y2","17"),o(r,"points","10 9 9 9 8 9")},m(s,u){b(s,e,u),b(s,t,u),b(s,l,u),b(s,i,u),b(s,r,u)},d(s){s&&(k(e),k(t),k(l),k(i),k(r))}}}function On(n){let e,t;return{c(){e=K("polyline"),t=K("polyline"),o(e,"points","16 18 22 12 16 6"),o(t,"points","8 6 2 12 8 18")},m(l,i){b(l,e,i),b(l,t,i)},d(l){l&&(k(e),k(t))}}}function In(n){let e,t,l,i;return{c(){e=K("path"),t=K("polyline"),l=K("line"),i=K("rect"),o(e,"d","M21 8v13a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8"),o(t,"points","7 3 12 8 17 3"),o(l,"x1","3"),o(l,"y1","8"),o(l,"x2","21"),o(l,"y2","8"),o(i,"x","10"),o(i,"y","12"),o(i,"width","4"),o(i,"height","4"),o(i,"rx","1")},m(r,s){b(r,e,s),b(r,t,s),b(r,l,s),b(r,i,s)},d(r){r&&(k(e),k(t),k(l),k(i))}}}function Tn(n){let e,t,l,i,r;return{c(){e=K("path"),t=K("polyline"),l=K("line"),i=K("line"),r=K("line"),o(e,"d","M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"),o(t,"points","14 2 14 8 20 8"),o(l,"x1","9"),o(l,"y1","12"),o(l,"x2","15"),o(l,"y2","12"),o(i,"x1","9"),o(i,"y1","15"),o(i,"x2","13"),o(i,"y2","15"),o(r,"x1","12"),o(r,"y1","15"),o(r,"x2","12"),o(r,"y2","18")},m(s,u){b(s,e,u),b(s,t,u),b(s,l,u),b(s,i,u),b(s,r,u)},d(s){s&&(k(e),k(t),k(l),k(i),k(r))}}}function Pn(n){let e,t,l,i,r,s;return{c(){e=K("path"),t=K("polyline"),l=K("line"),i=K("line"),r=K("line"),s=K("line"),o(e,"d","M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"),o(t,"points","14 2 14 8 20 8"),o(l,"x1","8"),o(l,"y1","12"),o(l,"x2","16"),o(l,"y2","12"),o(i,"x1","8"),o(i,"y1","16"),o(i,"x2","16"),o(i,"y2","16"),o(r,"x1","8"),o(r,"y1","14"),o(r,"x2","12"),o(r,"y2","14"),o(s,"x1","12"),o(s,"y1","12"),o(s,"x2","12"),o(s,"y2","18")},m(u,c){b(u,e,c),b(u,t,c),b(u,l,c),b(u,i,c),b(u,r,c),b(u,s,c)},d(u){u&&(k(e),k(t),k(l),k(i),k(r),k(s))}}}function An(n){let e,t,l,i;return{c(){e=K("path"),t=K("polyline"),l=K("line"),i=K("line"),o(e,"d","M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"),o(t,"points","14 2 14 8 20 8"),o(l,"x1","16"),o(l,"y1","13"),o(l,"x2","8"),o(l,"y2","13"),o(i,"x1","16"),o(i,"y1","17"),o(i,"x2","8"),o(i,"y2","17")},m(r,s){b(r,e,s),b(r,t,s),b(r,l,s),b(r,i,s)},d(r){r&&(k(e),k(t),k(l),k(i))}}}function zn(n){let e,t,l,i,r;return{c(){e=K("path"),t=K("polyline"),l=K("line"),i=K("line"),r=K("line"),o(e,"d","M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"),o(t,"points","14 2 14 8 20 8"),o(l,"x1","8"),o(l,"y1","12"),o(l,"x2","16"),o(l,"y2","12"),o(i,"x1","8"),o(i,"y1","16"),o(i,"x2","16"),o(i,"y2","16"),o(r,"x1","8"),o(r,"y1","14"),o(r,"x2","12"),o(r,"y2","14")},m(s,u){b(s,e,u),b(s,t,u),b(s,l,u),b(s,i,u),b(s,r,u)},d(s){s&&(k(e),k(t),k(l),k(i),k(r))}}}function Bn(n){let e,t,l;return{c(){e=K("path"),t=K("circle"),l=K("circle"),o(e,"d","M9 18V5l12-2v13"),o(t,"cx","6"),o(t,"cy","18"),o(t,"r","3"),o(l,"cx","18"),o(l,"cy","16"),o(l,"r","3")},m(i,r){b(i,e,r),b(i,t,r),b(i,l,r)},d(i){i&&(k(e),k(t),k(l))}}}function Hn(n){let e,t;return{c(){e=K("rect"),t=K("polyline"),o(e,"x","2"),o(e,"y","4"),o(e,"width","20"),o(e,"height","16"),o(e,"rx","2"),o(t,"points","10 9 16 12 10 15 10 9")},m(l,i){b(l,e,i),b(l,t,i)},d(l){l&&(k(e),k(t))}}}function Vn(n){let e,t,l;return{c(){e=K("rect"),t=K("circle"),l=K("polyline"),o(e,"x","3"),o(e,"y","3"),o(e,"width","18"),o(e,"height","18"),o(e,"rx","2"),o(e,"ry","2"),o(t,"cx","8.5"),o(t,"cy","8.5"),o(t,"r","1.5"),o(l,"points","21 15 16 10 5 21")},m(i,r){b(i,e,r),b(i,t,r),b(i,l,r)},d(i){i&&(k(e),k(t),k(l))}}}function Wn(n){let e;return{c(){e=K("path"),o(e,"d","M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z")},m(t,l){b(t,e,l)},d(t){t&&k(e)}}}function Rn(n){let e;function t(r,s){return r[0]==="folder"?Wn:r[0]==="image"?Vn:r[0]==="video"?Hn:r[0]==="audio"?Bn:r[0]==="pdf"?zn:r[0]==="document"?An:r[0]==="spreadsheet"?Pn:r[0]==="presentation"?Tn:r[0]==="archive"?In:r[0]==="code"?On:r[0]==="text"?Ln:Fn}let l=t(n),i=l(n);return{c(){e=K("svg"),i.c(),o(e,"width",n[1]),o(e,"height",n[1]),o(e,"viewBox","0 0 24 24"),o(e,"fill","none"),o(e,"stroke","currentColor"),o(e,"stroke-width","1.5"),o(e,"stroke-linecap","round"),o(e,"stroke-linejoin","round"),o(e,"xmlns","http://www.w3.org/2000/svg")},m(r,s){b(r,e,s),i.m(e,null)},p(r,[s]){l!==(l=t(r))&&(i.d(1),i=l(r),i&&(i.c(),i.m(e,null))),s&2&&o(e,"width",r[1]),s&2&&o(e,"height",r[1])},i:J,o:J,d(r){r&&k(e),i.d()}}}function Kn(n,e,t){let{kind:l="generic"}=e,{size:i=20}=e;return n.$$set=r=>{"kind"in r&&t(0,l=r.kind),"size"in r&&t(1,i=r.size)},[l,i]}class ol extends Ee{constructor(e){super(),Ne(this,e,Kn,Rn,Me,{kind:0,size:1})}}function Te(n){if(n==null||n<0)return"—";if(n===0)return"0 B";const e=["B","KB","MB","GB"],t=Math.min(Math.floor(Math.log(n)/Math.log(1024)),e.length-1),l=n/Math.pow(1024,t);return(t===0?l.toFixed(0):l.toFixed(1))+" "+e[t]}const qn={"image/jpeg":"JPEG image","image/png":"PNG image","image/gif":"GIF image","image/webp":"WebP image","image/svg+xml":"SVG image","image/bmp":"BMP image","image/tiff":"TIFF image","image/avif":"AVIF image","application/pdf":"PDF document","application/msword":"Word document","application/vnd.openxmlformats-officedocument.wordprocessingml.document":"Word document","application/vnd.ms-excel":"Excel spreadsheet","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":"Excel spreadsheet","application/vnd.ms-powerpoint":"PowerPoint presentation","application/vnd.openxmlformats-officedocument.presentationml.presentation":"PowerPoint presentation","application/zip":"ZIP archive","application/gzip":"GZIP archive","application/x-tar":"TAR archive","application/x-7z-compressed":"7z archive","application/x-rar-compressed":"RAR archive","text/plain":"Text file","text/html":"HTML file","text/css":"CSS file","text/javascript":"JavaScript file","application/json":"JSON file","application/xml":"XML file","application/x-yaml":"YAML file","application/octet-stream":"Binary file","application/x-msdos-program":"Executable","inode/directory":"Folder"};function Pe(n){return n?qn[n]||n:"Unknown"}function cl(n){if(n.type==="folder")return"folder";const e=(n.mime||"").toLowerCase();if(e.startsWith("image/"))return"image";if(e.startsWith("video/"))return"video";if(e.startsWith("audio/"))return"audio";if(e.startsWith("text/"))return"text";if(e.includes("pdf"))return"pdf";if(e.includes("word")||e.includes("document"))return"document";if(e.includes("spreadsheet")||e.includes("excel"))return"spreadsheet";if(e.includes("presentation")||e.includes("powerpoint"))return"presentation";if(e.includes("zip")||e.includes("tar")||e.includes("gzip")||e.includes("rar")||e.includes("7z")||e.includes("compress"))return"archive";if(e.includes("json")||e.includes("xml")||e.includes("yaml")||e.includes("javascript")||e.includes("css")||e.includes("html"))return"code";const l=(n.name||"").toLowerCase().split(".").pop();return["js","ts","jsx","tsx","vue","svelte","py","rs","go","c","cpp","h","hpp","java","kt","swift","rb","php","pl","sh","bash","zsh","fish","yml","yaml","json","xml","toml","ini","cfg","conf","md","markdown","css","scss","less","sass","sql","graphql","proto","gradle","cmake","makefile","dockerfile","env","gitignore"].includes(l)?"code":"generic"}const Gn=["image/jpeg","image/png","image/gif","image/webp","image/bmp","image/tiff","image/avif","image/svg+xml"],Un=["text/plain","text/html","text/css","text/javascript","application/json","application/xml","application/x-yaml","text/x-shellscript"],Jn=["txt","log","conf","ini","yaml","yml","json","xml","csv","sh","py","js","ts","css","html","md","markdown","cfg"],Xn=["jpg","jpeg","png","gif","webp","bmp","tiff","tif","avif","svg"];function ul(n){const e=(n.mime||"").toLowerCase(),l=(n.name||"").toLowerCase().split(".").pop();return Gn.includes(e)||Xn.includes(l)}function al(n){const e=(n.mime||"").toLowerCase(),l=(n.name||"").toLowerCase().split(".").pop();return Un.includes(e)||Jn.includes(l)&&l!=="md"&&l!=="markdown"}function fl(n){return(n.mime||"").toLowerCase().includes("pdf")}function dl(n){const e=(n.name||"").toLowerCase();return e.endsWith(".md")||e.endsWith(".markdown")}function Zn(n){return ul(n)||fl(n)}function Yn(n){return al(n)||dl(n)}function Qn(n){let e,t=Te(n[0].size)+"",l,i,r,s=n[0].mime&&pt(n);return{c(){e=f("span"),l=I(t),i=j(),s&&s.c(),r=de()},m(u,c){b(u,e,c),a(e,l),b(u,i,c),s&&s.m(u,c),b(u,r,c)},p(u,c){c&1&&t!==(t=Te(u[0].size)+"")&&U(l,t),u[0].mime?s?s.p(u,c):(s=pt(u),s.c(),s.m(r.parentNode,r)):s&&(s.d(1),s=null)},d(u){u&&(k(e),k(i),k(r)),s&&s.d(u)}}}function xn(n){let e;return{c(){e=f("span"),e.textContent="Folder"},m(t,l){b(t,e,l)},p:J,d(t){t&&k(e)}}}function pt(n){let e,t,l,i=Pe(n[0].mime)+"",r;return{c(){e=f("span"),e.textContent="·",t=j(),l=f("span"),r=I(i),o(e,"class","meta-sep svelte-18mry1k")},m(s,u){b(s,e,u),b(s,t,u),b(s,l,u),a(l,r)},p(s,u){u&1&&i!==(i=Pe(s[0].mime)+"")&&U(r,i)},d(s){s&&(k(e),k(t),k(l))}}}function $n(n){let e,t,l;return{c(){e=f("button"),e.innerHTML=' ',o(e,"class","action-btn svelte-18mry1k"),o(e,"title","Open folder"),o(e,"aria-label","Open folder")},m(i,r){b(i,e,r),t||(l=F(e,"click",me(n[24])),t=!0)},p:J,d(i){i&&k(e),t=!1,l()}}}function ei(n){let e,t,l,i,r;return{c(){e=f("button"),e.innerHTML=' ',t=j(),l=f("button"),l.innerHTML=' ',o(e,"class","action-btn svelte-18mry1k"),o(e,"title","Preview"),o(e,"aria-label","Preview"),o(l,"class","action-btn svelte-18mry1k"),o(l,"title","Open in external program"),o(l,"aria-label","Open externally")},m(s,u){b(s,e,u),b(s,t,u),b(s,l,u),i||(r=[F(e,"click",me(n[23])),F(l,"click",me(n[8]))],i=!0)},p:J,d(s){s&&(k(e),k(t),k(l)),i=!1,re(r)}}}function _t(n){let e,t,l,i,r,s,u,c,d,m,h,_;return{c(){e=f("div"),t=j(),l=f("div"),i=f("button"),i.textContent="Rename",r=j(),s=f("button"),s.textContent="Duplicate",u=j(),c=f("button"),c.textContent="Cut",d=j(),m=f("button"),m.textContent="Copy",o(e,"class","menu-backdrop svelte-18mry1k"),o(e,"role","presentation"),o(i,"class","menu-item svelte-18mry1k"),o(i,"role","menuitem"),o(s,"class","menu-item svelte-18mry1k"),o(s,"role","menuitem"),o(c,"class","menu-item svelte-18mry1k"),o(c,"role","menuitem"),o(m,"class","menu-item svelte-18mry1k"),o(m,"role","menuitem"),o(l,"class","menu svelte-18mry1k"),o(l,"role","menu")},m(v,w){b(v,e,w),b(v,t,w),b(v,l,w),a(l,i),a(l,r),a(l,s),a(l,u),a(l,c),a(l,d),a(l,m),h||(_=[F(e,"click",me(n[15])),F(i,"click",n[10]),F(s,"click",n[11]),F(c,"click",n[12]),F(m,"click",n[13]),F(l,"click",me(n[22]))],h=!0)},p:J,d(v){v&&(k(e),k(t),k(l)),h=!1,re(_)}}}function ti(n){let e,t,l,i,r,s,u=n[0].name+"",c,d,m,h,_,v,w,g,y,M,W,q,O,P,T,E,L,C,N,R;l=new ol({props:{kind:n[4],size:22}});function V(H,A){return H[5]?xn:Qn}let X=V(n)(n);function Y(H,A){return H[5]?$n:ei}let ee=Y(n)(n),x=n[2]&&_t(n);return{c(){e=f("div"),t=f("div"),je(l.$$.fragment),i=j(),r=f("div"),s=f("div"),c=I(u),m=j(),h=f("div"),X.c(),_=j(),v=f("div"),ee.c(),w=j(),g=f("button"),y=K("svg"),M=K("circle"),W=K("circle"),q=K("circle"),O=j(),P=f("button"),P.innerHTML=' ',E=j(),x&&x.c(),L=de(),o(t,"class","file-row-icon svelte-18mry1k"),o(s,"class","file-row-name svelte-18mry1k"),o(s,"title",d=n[0].name),o(h,"class","file-row-meta svelte-18mry1k"),o(r,"class","file-row-body svelte-18mry1k"),o(M,"cx","12"),o(M,"cy","5"),o(M,"r","2"),o(W,"cx","12"),o(W,"cy","12"),o(W,"r","2"),o(q,"cx","12"),o(q,"cy","19"),o(q,"r","2"),o(y,"width","16"),o(y,"height","16"),o(y,"viewBox","0 0 24 24"),o(y,"fill","currentColor"),o(g,"class","action-btn svelte-18mry1k"),o(g,"title","More actions"),o(g,"aria-label","More actions"),o(g,"aria-expanded",n[2]),o(P,"class","action-btn action-btn-danger svelte-18mry1k"),o(P,"title","Delete"),o(P,"aria-label","Delete"),o(v,"class","file-row-actions svelte-18mry1k"),o(e,"class","file-row svelte-18mry1k"),o(e,"role","button"),o(e,"tabindex","0"),o(e,"draggable","true"),o(e,"aria-label",T=n[5]?`Folder ${n[0].name}`:`File ${n[0].name}`),We(e,"file-row--selected",n[1]),We(e,"file-row--dragover",!1)},m(H,A){b(H,e,A),a(e,t),be(l,t,null),a(e,i),a(e,r),a(r,s),a(s,c),a(r,m),a(r,h),X.m(h,null),a(e,_),a(e,v),ee.m(v,null),a(v,w),a(v,g),a(g,y),a(y,M),a(y,W),a(y,q),a(v,O),a(v,P),b(H,E,A),x&&x.m(H,A),b(H,L,A),C=!0,N||(R=[F(window,"click",n[15]),F(g,"click",me(n[14])),F(P,"click",me(n[9])),F(e,"click",n[6]),F(e,"keydown",n[7]),F(e,"dragstart",n[16]),F(e,"dragover",n[17]),F(e,"drop",n[18])],N=!0)},p(H,[A]){(!C||A&1)&&u!==(u=H[0].name+"")&&U(c,u),(!C||A&1&&d!==(d=H[0].name))&&o(s,"title",d),X.p(H,A),ee.p(H,A),(!C||A&4)&&o(g,"aria-expanded",H[2]),(!C||A&1&&T!==(T=H[5]?`Folder ${H[0].name}`:`File ${H[0].name}`))&&o(e,"aria-label",T),(!C||A&2)&&We(e,"file-row--selected",H[1]),H[2]?x?x.p(H,A):(x=_t(H),x.c(),x.m(L.parentNode,L)):x&&(x.d(1),x=null)},i(H){C||(ne(l.$$.fragment,H),C=!0)},o(H){ie(l.$$.fragment,H),C=!1},d(H){H&&(k(e),k(E),k(L)),he(l),X.d(),ee.d(),x&&x.d(H),N=!1,re(R)}}}function li(n,e,t){let{item:l}=e,{selected:i=!1}=e,{onDragStart:r}=e,{onDragOver:s}=e,{onDrop:u}=e;const c=Ue(),d=cl(l),m=l.type==="folder";let h=!1,_=null;function v(B){B.ctrlKey||B.metaKey?c("toggleSelect",l.id):B.shiftKey?c("rangeSelect",l.id):_?(clearTimeout(_),_=null,m?c("navigate",l.id):c("preview",l)):_=setTimeout(()=>{_=null,i?m?c("navigate",l.id):c("preview",l):c("selectOne",l.id)},250)}function w(B){B.key==="Enter"&&(m?c("navigate",l.id):c("preview",l))}function g(){c("openExternal",l.fileId)}function y(){c("delete",{id:l.id,type:l.type})}function M(){t(2,h=!1),c("rename",{id:l.id,name:l.name})}function W(){t(2,h=!1),c("duplicate",l.id)}function q(){t(2,h=!1),c("cut",l.id)}function O(){t(2,h=!1),c("copy",l.id)}function P(){t(2,h=!h)}function T(){t(2,h=!1)}function E(B){r&&r(B,l.id)}function L(B){s&&m&&s(B,l.id)}function C(B){u&&m&&u(B,l.id)}function N(B){gn.call(this,n,B)}const R=()=>c("preview",l),V=()=>c("navigate",l.id);return n.$$set=B=>{"item"in B&&t(0,l=B.item),"selected"in B&&t(1,i=B.selected),"onDragStart"in B&&t(19,r=B.onDragStart),"onDragOver"in B&&t(20,s=B.onDragOver),"onDrop"in B&&t(21,u=B.onDrop)},[l,i,h,c,d,m,v,w,g,y,M,W,q,O,P,T,E,L,C,r,s,u,N,R,V]}class ni extends Ee{constructor(e){super(),Ne(this,e,li,ti,Me,{item:0,selected:1,onDragStart:19,onDragOver:20,onDrop:21})}}function mt(n,e,t){const l=n.slice();return l[4]=e[t],l[6]=t,l}function ii(n){let e;return{c(){e=f("span"),e.textContent="/",o(e,"class","sep svelte-csi2lb")},m(t,l){b(t,e,l)},d(t){t&&k(e)}}}function si(n){let e,t=n[4].name+"",l,i,r;function s(){return n[2](n[6])}return{c(){e=f("button"),l=I(t),o(e,"class","crumb crumb--link svelte-csi2lb")},m(u,c){b(u,e,c),a(e,l),i||(r=F(e,"click",s),i=!0)},p(u,c){n=u,c&1&&t!==(t=n[4].name+"")&&U(l,t)},d(u){u&&k(e),i=!1,r()}}}function ri(n){let e,t=n[4].name+"",l;return{c(){e=f("span"),l=I(t),o(e,"class","crumb crumb--current svelte-csi2lb")},m(i,r){b(i,e,r),a(e,l)},p(i,r){r&1&&t!==(t=i[4].name+"")&&U(l,t)},d(i){i&&k(e)}}}function kt(n){let e,t,l=n[6]>0&&ii();function i(u,c){return u[6]===u[0].length-1?ri:si}let r=i(n),s=r(n);return{c(){l&&l.c(),e=j(),s.c(),t=de()},m(u,c){l&&l.m(u,c),b(u,e,c),s.m(u,c),b(u,t,c)},p(u,c){r===(r=i(u))&&s?s.p(u,c):(s.d(1),s=r(u),s&&(s.c(),s.m(t.parentNode,t)))},d(u){u&&(k(e),k(t)),l&&l.d(u),s.d(u)}}}function oi(n){let e,t=te(n[0]),l=[];for(let i=0;ir(u);return n.$$set=u=>{"crumbs"in u&&t(0,l=u.crumbs)},[l,r,s]}class pl extends Ee{constructor(e){super(),Ne(this,e,ci,oi,Me,{crumbs:0})}}function ui(n){let e,t,l,i,r,s;return{c(){e=f("div"),t=f("p"),t.textContent="Preview is not available for this file type.",l=j(),i=f("button"),i.textContent="Open in external program",o(i,"class","btn btn-sm svelte-1ybaoro"),o(e,"class","preview-status svelte-1ybaoro")},m(u,c){b(u,e,c),a(e,t),a(e,l),a(e,i),r||(s=F(i,"click",n[9]),r=!0)},p:J,d(u){u&&k(e),r=!1,s()}}}function ai(n){let e,t;function l(s,u){return u&2&&(e=null),e==null&&(e=!!(s[1]&&s[1].startsWith("data:"))),e?ki:mi}let i=l(n,-1),r=i(n);return{c(){r.c(),t=de()},m(s,u){r.m(s,u),b(s,t,u)},p(s,u){i===(i=l(s,u))&&r?r.p(s,u):(r.d(1),r=i(s),r&&(r.c(),r.m(t.parentNode,t)))},d(s){s&&k(t),r.d(s)}}}function fi(n){let e,t,l;return{c(){e=f("pre"),t=f("code"),l=I(n[1]),o(e,"class","preview-text svelte-1ybaoro")},m(i,r){b(i,e,r),a(e,t),a(t,l)},p(i,r){r&2&&U(l,i[1])},d(i){i&&k(e)}}}function di(n){let e,t,l,i;return{c(){e=f("div"),t=f("img"),Oe(t.src,l=n[1])||o(t,"src",l),o(t,"alt",i=n[0].name),o(t,"class","preview-image svelte-1ybaoro"),o(e,"class","preview-image-container svelte-1ybaoro")},m(r,s){b(r,e,s),a(e,t)},p(r,s){s&2&&!Oe(t.src,l=r[1])&&o(t,"src",l),s&1&&i!==(i=r[0].name)&&o(t,"alt",i)},d(r){r&&k(e)}}}function pi(n){let e,t,l,i,r,s,u;return{c(){e=f("div"),t=f("p"),l=I(n[3]),i=j(),r=f("button"),r.textContent="Open in external program",o(r,"class","btn btn-sm svelte-1ybaoro"),o(e,"class","preview-status svelte-1ybaoro")},m(c,d){b(c,e,d),a(e,t),a(t,l),a(e,i),a(e,r),s||(u=F(r,"click",n[9]),s=!0)},p(c,d){d&8&&U(l,c[3])},d(c){c&&k(e),s=!1,u()}}}function _i(n){let e;return{c(){e=f("div"),e.innerHTML="Loading preview...
",o(e,"class","preview-status svelte-1ybaoro")},m(t,l){b(t,e,l)},p:J,d(t){t&&k(e)}}}function mi(n){let e,t,l,i,r,s;return{c(){e=f("div"),t=f("p"),t.textContent="PDF preview is not available in this environment.",l=j(),i=f("button"),i.textContent="Open in external program",o(i,"class","btn btn-sm svelte-1ybaoro"),o(e,"class","preview-status svelte-1ybaoro")},m(u,c){b(u,e,c),a(e,t),a(e,l),a(e,i),r||(s=F(i,"click",n[9]),r=!0)},p:J,d(u){u&&k(e),r=!1,s()}}}function ki(n){let e,t,l;return{c(){e=f("div"),t=f("embed"),Oe(t.src,l=n[1])||o(t,"src",l),o(t,"type","application/pdf"),o(t,"class","preview-pdf svelte-1ybaoro"),o(e,"class","preview-pdf-container svelte-1ybaoro")},m(i,r){b(i,e,r),a(e,t)},p(i,r){r&2&&!Oe(t.src,l=i[1])&&o(t,"src",l)},d(i){i&&k(e)}}}function vi(n){let e,t,l,i,r,s,u,c=n[0].name+"",d,m,h,_,v=Te(n[0].size)+"",w,g,y=Pe(n[0].mime)+"",M,W,q,O,P,T,E,L,C,N,R,V;r=new ol({props:{kind:n[8],size:18}});function B(z,ee){return z[2]?_i:z[3]?pi:z[6]&&z[1]?di:z[5]&&z[1]?fi:z[4]?ai:ui}let X=B(n),Y=X(n);return{c(){e=f("div"),t=f("div"),l=f("header"),i=f("div"),je(r.$$.fragment),s=j(),u=f("span"),d=I(c),h=j(),_=f("div"),w=I(v),g=I(" · "),M=I(y),W=j(),q=f("div"),O=f("button"),O.innerHTML=' ',P=j(),T=f("button"),T.innerHTML=' ',E=j(),L=f("div"),Y.c(),o(u,"class","preview-name svelte-1ybaoro"),o(u,"title",m=n[0].name),o(i,"class","preview-title svelte-1ybaoro"),o(_,"class","preview-meta svelte-1ybaoro"),o(O,"class","action-btn svelte-1ybaoro"),o(O,"title","Open in external program"),o(O,"aria-label","Open externally"),o(T,"class","action-btn svelte-1ybaoro"),o(T,"title","Close"),o(T,"aria-label","Close preview"),o(q,"class","preview-actions svelte-1ybaoro"),o(l,"class","preview-header svelte-1ybaoro"),o(L,"class","preview-body svelte-1ybaoro"),o(t,"class","modal svelte-1ybaoro"),o(e,"class","overlay svelte-1ybaoro"),o(e,"role","dialog"),o(e,"aria-modal","true"),o(e,"aria-label",C=`Preview: ${n[0].name}`)},m(z,ee){b(z,e,ee),a(e,t),a(t,l),a(l,i),be(r,i,null),a(i,s),a(i,u),a(u,d),a(l,h),a(l,_),a(_,w),a(_,g),a(_,M),a(l,W),a(l,q),a(q,O),a(q,P),a(q,T),a(t,E),a(t,L),Y.m(L,null),N=!0,R||(V=[F(O,"click",n[9]),F(T,"click",n[10]),F(e,"click",qe(n[11]))],R=!0)},p(z,[ee]){(!N||ee&1)&&c!==(c=z[0].name+"")&&U(d,c),(!N||ee&1&&m!==(m=z[0].name))&&o(u,"title",m),(!N||ee&1)&&v!==(v=Te(z[0].size)+"")&&U(w,v),(!N||ee&1)&&y!==(y=Pe(z[0].mime)+"")&&U(M,y),X===(X=B(z))&&Y?Y.p(z,ee):(Y.d(1),Y=X(z),Y&&(Y.c(),Y.m(L,null))),(!N||ee&1&&C!==(C=`Preview: ${z[0].name}`))&&o(e,"aria-label",C)},i(z){N||(ne(r.$$.fragment,z),N=!0)},o(z){ie(r.$$.fragment,z),N=!1},d(z){z&&k(e),he(r),Y.d(),R=!1,re(V)}}}function bi(n,e,t){let l,i,r,{item:s}=e,{content:u=""}=e,{loading:c=!1}=e,{error:d=""}=e;const m=Ue(),h=cl(s);function _(y){y.key==="Escape"&&m("close")}function v(){m("openExternal",s.fileId)}il(()=>{window.addEventListener("keydown",_)}),sl(()=>{window.removeEventListener("keydown",_)});const w=()=>m("close"),g=()=>m("close");return n.$$set=y=>{"item"in y&&t(0,s=y.item),"content"in y&&t(1,u=y.content),"loading"in y&&t(2,c=y.loading),"error"in y&&t(3,d=y.error)},n.$$.update=()=>{n.$$.dirty&3&&t(6,l=ul(s)&&u&&u.startsWith("data:")),n.$$.dirty&1&&t(5,i=al(s)||dl(s)),n.$$.dirty&1&&t(4,r=fl(s))},[s,u,c,d,r,i,l,m,h,v,w,g]}class hi extends Ee{constructor(e){super(),Ne(this,e,bi,vi,Me,{item:0,content:1,loading:2,error:3})}}function vt(n,e,t){const l=n.slice();return l[121]=e[t],l}function bt(n,e,t){const l=n.slice();return l[124]=e[t],l}function ht(n,e,t){const l=n.slice();return l[135]=e[t],l}function wt(n,e,t){const l=n.slice();return l[132]=e[t],l}function gt(n,e,t){const l=n.slice();return l[127]=e[t],l}function yt(n,e,t){const l=n.slice();return l[124]=e[t],l}function jt(n,e,t){const l=n.slice();return l[127]=e[t],l}function Ct(n,e,t){const l=n.slice();return l[140]=e[t],l}function St(n,e,t){const l=n.slice();return l[121]=e[t],l}function Dt(n,e,t){const l=n.slice();return l[145]=e[t],l}function Mt(n,e,t){const l=n.slice();return l[148]=e[t],l}function Nt(n){let e,t=n[148].label+"",l,i,r,s,u;function c(){return n[69](n[148])}return{c(){e=f("button"),l=I(t),i=j(),o(e,"class",r="nav-item "+(n[4]===n[148].id?"selected":"")+" svelte-1rwjkun")},m(d,m){b(d,e,m),a(e,l),a(e,i),s||(u=F(e,"click",c),s=!0)},p(d,m){n=d,m[0]&1&&t!==(t=n[148].label+"")&&U(l,t),m[0]&17&&r!==(r="nav-item "+(n[4]===n[148].id?"selected":"")+" svelte-1rwjkun")&&o(e,"class",r)},d(d){d&&k(e),s=!1,u()}}}function Et(n){let e,t,l,i,r,s=n[1].length>0&&Ft(n),u=te(n[1]),c=[];for(let m=0;m0?s?s.p(m,h):(s=Ft(m),s.c(),s.m(t,null)):s&&(s.d(1),s=null),h[0]&34|h[1]&8){u=te(m[1]);let _;for(_=0;_0)return Mi;if(u[3])return Di}let r=i(n),s=r&&r(n);return{c(){e=f("div"),t=f("h2"),t.textContent="Верстак",l=j(),s&&s.c(),o(t,"class","svelte-1rwjkun"),o(e,"class","welcome svelte-1rwjkun")},m(u,c){b(u,e,c),a(e,t),a(e,l),s&&s.m(e,null)},p(u,c){r===(r=i(u))&&s?s.p(u,c):(s&&s.d(1),s=r&&r(u),s&&(s.c(),s.m(e,null)))},i:J,o:J,d(u){u&&k(e),s&&s.d()}}}function Ci(n){let e,t,l,i,r,s,u=te(n[32]),c=[];for(let _=0;_{m[w]=null}),ve()),~i?(r=m[i],r?r.p(_,v):(r=m[i]=d[i](_),r.c()),ne(r,1),r.m(l,null)):r=null)},i(_){s||(ne(r),s=!0)},o(_){ie(r),s=!1},d(_){_&&(k(e),k(t),k(l)),fe(c,_),~i&&m[i].d()}}}function Si(n){let e,t,l,i=n[8].title+"",r,s,u,c,d,m,h,_,v,w,g,y=n[8].dirty&&Xt();return{c(){e=f("div"),t=f("div"),l=f("span"),r=I(i),s=j(),y&&y.c(),u=j(),c=f("div"),d=f("button"),d.textContent="Сохранить",m=j(),h=f("button"),h.textContent="Закрыть",_=j(),v=f("textarea"),o(l,"class","note-title svelte-1rwjkun"),o(d,"class","btn btn-primary svelte-1rwjkun"),o(h,"class","btn svelte-1rwjkun"),o(c,"class","note-editor-actions svelte-1rwjkun"),o(t,"class","note-editor-header svelte-1rwjkun"),o(v,"class","note-textarea svelte-1rwjkun"),o(v,"placeholder","Начните писать..."),o(e,"class","note-editor svelte-1rwjkun")},m(M,W){b(M,e,W),a(e,t),a(t,l),a(l,r),a(t,s),y&&y.m(t,null),a(t,u),a(t,c),a(c,d),a(c,m),a(c,h),a(e,_),a(e,v),ue(v,n[8].content),w||(g=[F(d,"click",n[61]),F(h,"click",n[59]),F(v,"input",n[72]),F(v,"input",n[60])],w=!0)},p(M,W){W[0]&256&&i!==(i=M[8].title+"")&&U(r,i),M[8].dirty?y||(y=Xt(),y.c(),y.m(t,u)):y&&(y.d(1),y=null),W[0]&256&&ue(v,M[8].content)},i:J,o:J,d(M){M&&k(e),y&&y.d(),w=!1,re(g)}}}function Di(n){let e,t,l;return{c(){e=f("p"),t=I("Ошибка: "),l=I(n[3]),o(e,"class","error-text svelte-1rwjkun")},m(i,r){b(i,e,r),a(e,t),a(e,l)},p(i,r){r[0]&8&&U(l,i[3])},d(i){i&&k(e)}}}function Mi(n){let e,t,l;return{c(){e=f("p"),e.textContent="Выберите раздел в боковой панели.",t=j(),l=f("p"),l.textContent="Или создайте новое дело кнопкой «+».",o(e,"class","svelte-1rwjkun"),o(l,"class","hint svelte-1rwjkun")},m(i,r){b(i,e,r),b(i,t,r),b(i,l,r)},p:J,d(i){i&&(k(e),k(t),k(l))}}}function Ni(n){let e;return{c(){e=f("p"),e.textContent="Загрузка...",o(e,"class","svelte-1rwjkun")},m(t,l){b(t,e,l)},p:J,d(t){t&&k(e)}}}function Pt(n){let e,t=n[140].label+"",l,i,r;function s(){return n[73](n[140])}return{c(){e=f("button"),l=I(t),o(e,"class",vn(n[68](n[140].id))+" svelte-1rwjkun")},m(u,c){b(u,e,c),a(e,l),i||(r=F(e,"click",s),i=!0)},p(u,c){n=u},d(u){u&&k(e),i=!1,r()}}}function Ei(n){let e;return{c(){e=f("div"),e.innerHTML='Активность появится позже
',o(e,"class","empty-state svelte-1rwjkun")},m(t,l){b(t,e,l)},p:J,i:J,o:J,d(t){t&&k(e)}}}function Fi(n){let e,t,l,i,r,s,u,c,d,m,h,_;function v(y,M){return y[10].length===0?Ai:Pi}let w=v(n),g=w(n);return{c(){e=f("div"),t=f("div"),l=f("input"),i=j(),r=f("input"),s=j(),u=f("button"),c=I("Записать"),m=j(),g.c(),o(l,"type","text"),o(l,"placeholder","Что сделано"),o(l,"class","svelte-1rwjkun"),o(r,"type","number"),o(r,"placeholder","Мин"),o(r,"min","1"),o(r,"class","svelte-1rwjkun"),o(u,"class","btn btn-primary svelte-1rwjkun"),u.disabled=d=!n[12].trim()||!n[11],o(t,"class","worklog-form svelte-1rwjkun"),o(e,"class","worklog-tab svelte-1rwjkun")},m(y,M){b(y,e,M),a(e,t),a(t,l),ue(l,n[12]),a(t,i),a(t,r),ue(r,n[11]),a(t,s),a(t,u),a(u,c),a(e,m),g.m(e,null),h||(_=[F(l,"input",n[94]),F(r,"input",n[95]),F(u,"click",n[62])],h=!0)},p(y,M){M[0]&4096&&l.value!==y[12]&&ue(l,y[12]),M[0]&2048&&nl(r.value)!==y[11]&&ue(r,y[11]),M[0]&6144&&d!==(d=!y[12].trim()||!y[11])&&(u.disabled=d),w===(w=v(y))&&g?g.p(y,M):(g.d(1),g=w(y),g&&(g.c(),g.m(e,null)))},i:J,o:J,d(y){y&&k(e),g.d(),h=!1,re(_)}}}function Li(n){let e;function t(r,s){return r[9].length===0?Bi:zi}let l=t(n),i=l(n);return{c(){i.c(),e=de()},m(r,s){i.m(r,s),b(r,e,s)},p(r,s){l===(l=t(r))&&i?i.p(r,s):(i.d(1),i=l(r),i&&(i.c(),i.m(e.parentNode,e)))},i:J,o:J,d(r){r&&k(e),i.d(r)}}}function Oi(n){let e,t,l,i,r,s,u,c,d,m,h,_,v,w,g,y,M,W,q,O=n[30].items.length>0&&Bt(n);const P=[Vi,Hi],T=[];function E(N,R){return N[22]?0:1}_=E(n),v=T[_]=P[_](n);let L=n[19]&&!n[21]&&Vt(),C=n[26]&&Wt(n);return{c(){e=f("div"),t=f("div"),l=f("button"),i=I("+ Добавить файл"),r=j(),s=f("button"),u=I("+ Добавить папку"),c=j(),d=f("button"),d.textContent="+ Новый файл",m=j(),O&&O.c(),h=j(),v.c(),w=j(),L&&L.c(),g=j(),C&&C.c(),y=de(),o(l,"class","btn btn-primary svelte-1rwjkun"),l.disabled=n[19],o(s,"class","btn svelte-1rwjkun"),s.disabled=n[19],o(d,"class","btn svelte-1rwjkun"),o(t,"class","tab-toolbar svelte-1rwjkun"),o(e,"class","files-tab svelte-1rwjkun")},m(N,R){b(N,e,R),a(e,t),a(t,l),a(l,i),a(t,r),a(t,s),a(s,u),a(t,c),a(t,d),a(t,m),O&&O.m(t,null),a(e,h),T[_].m(e,null),a(e,w),L&&L.m(e,null),b(N,g,R),C&&C.m(N,R),b(N,y,R),M=!0,W||(q=[F(l,"click",n[63]),F(s,"click",n[64]),F(d,"click",n[41])],W=!0)},p(N,R){(!M||R[0]&524288)&&(l.disabled=N[19]),(!M||R[0]&524288)&&(s.disabled=N[19]),N[30].items.length>0?O?O.p(N,R):(O=Bt(N),O.c(),O.m(t,null)):O&&(O.d(1),O=null);let V=_;_=E(N),_===V?T[_].p(N,R):(ke(),ie(T[V],1,1,()=>{T[V]=null}),ve(),v=T[_],v?v.p(N,R):(v=T[_]=P[_](N),v.c()),ne(v,1),v.m(e,w)),N[19]&&!N[21]?L||(L=Vt(),L.c(),L.m(e,null)):L&&(L.d(1),L=null),N[26]?C?(C.p(N,R),R[0]&67108864&&ne(C,1)):(C=Wt(N),C.c(),ne(C,1),C.m(y.parentNode,y)):C&&(ke(),ie(C,1,1,()=>{C=null}),ve())},i(N){M||(ne(v),ne(C),M=!0)},o(N){ie(v),ie(C),M=!1},d(N){N&&(k(e),k(g),k(y)),O&&O.d(),T[_].d(),L&&L.d(),C&&C.d(N),W=!1,re(q)}}}function Ii(n){let e,t,l,i,r,s,u,c=n[16]&&Rt(n);function d(_,v){return _[7].length===0&&!_[16]?Ui:Gi}let m=d(n),h=m(n);return{c(){e=f("div"),t=f("div"),l=f("button"),l.textContent="+ Добавить заметку",i=j(),c&&c.c(),r=j(),h.c(),o(l,"class","btn btn-primary svelte-1rwjkun"),o(t,"class","tab-toolbar svelte-1rwjkun"),o(e,"class","notes-tab svelte-1rwjkun")},m(_,v){b(_,e,v),a(e,t),a(t,l),a(e,i),c&&c.m(e,null),a(e,r),h.m(e,null),s||(u=F(l,"click",n[55]),s=!0)},p(_,v){_[16]?c?c.p(_,v):(c=Rt(_),c.c(),c.m(e,r)):c&&(c.d(1),c=null),m===(m=d(_))&&h?h.p(_,v):(h.d(1),h=m(_),h&&(h.c(),h.m(e,null)))},i:J,o:J,d(_){_&&k(e),c&&c.d(),h.d(),s=!1,u()}}}function Ti(n){let e,t,l=n[5].title+"",i,r,s,u,c,d,m=n[5].type+"",h,_,v,w,g,y=(n[5].section||"—")+"",M,W,q,O,P,T=pe(n[5].createdAt)+"",E,L,C,N,R,V,B,X,Y,z,ee,x,H,A,Z=n[7].length>0&&qt(n),G=n[10].length>0&&Ut(n);return{c(){e=f("div"),t=f("h2"),i=I(l),r=j(),s=f("div"),u=f("div"),c=f("span"),c.textContent="Тип",d=f("span"),h=I(m),_=j(),v=f("div"),w=f("span"),w.textContent="Раздел",g=f("span"),M=I(y),W=j(),q=f("div"),O=f("span"),O.textContent="Создано",P=f("span"),E=I(T),L=j(),C=f("div"),N=f("button"),N.textContent="✏️ Новая заметка",R=j(),V=f("button"),V.textContent="📎 Добавить файл",B=j(),X=f("button"),X.textContent="⚡ Добавить действие",Y=j(),z=f("button"),z.textContent="🕐 Записать время",ee=j(),Z&&Z.c(),x=j(),G&&G.c(),o(t,"class","svelte-1rwjkun"),o(c,"class","meta-label svelte-1rwjkun"),o(d,"class","svelte-1rwjkun"),o(u,"class","meta-item svelte-1rwjkun"),o(w,"class","meta-label svelte-1rwjkun"),o(g,"class","svelte-1rwjkun"),o(v,"class","meta-item svelte-1rwjkun"),o(O,"class","meta-label svelte-1rwjkun"),o(P,"class","svelte-1rwjkun"),o(q,"class","meta-item svelte-1rwjkun"),o(s,"class","meta-grid svelte-1rwjkun"),o(N,"class","qa-btn svelte-1rwjkun"),o(V,"class","qa-btn svelte-1rwjkun"),o(X,"class","qa-btn svelte-1rwjkun"),X.disabled=!0,o(X,"title","Следующий этап"),o(z,"class","qa-btn svelte-1rwjkun"),o(C,"class","quick-actions svelte-1rwjkun"),o(e,"class","overview svelte-1rwjkun")},m(S,Q){b(S,e,Q),a(e,t),a(t,i),a(e,r),a(e,s),a(s,u),a(u,c),a(u,d),a(d,h),a(s,_),a(s,v),a(v,w),a(v,g),a(g,M),a(s,W),a(s,q),a(q,O),a(q,P),a(P,E),a(e,L),a(e,C),a(C,N),a(C,R),a(C,V),a(C,B),a(C,X),a(C,Y),a(C,z),a(e,ee),Z&&Z.m(e,null),a(e,x),G&&G.m(e,null),H||(A=[F(N,"click",n[74]),F(V,"click",n[75]),F(z,"click",n[76])],H=!0)},p(S,Q){Q[0]&32&&l!==(l=S[5].title+"")&&U(i,l),Q[0]&32&&m!==(m=S[5].type+"")&&U(h,m),Q[0]&32&&y!==(y=(S[5].section||"—")+"")&&U(M,y),Q[0]&32&&T!==(T=pe(S[5].createdAt)+"")&&U(E,T),S[7].length>0?Z?Z.p(S,Q):(Z=qt(S),Z.c(),Z.m(e,x)):Z&&(Z.d(1),Z=null),S[10].length>0?G?G.p(S,Q):(G=Ut(S),G.c(),G.m(e,null)):G&&(G.d(1),G=null)},i:J,o:J,d(S){S&&k(e),Z&&Z.d(),G&&G.d(),H=!1,re(A)}}}function Pi(n){let e,t=te(n[10]),l=[];for(let i=0;iЗаписей работы пока нет',o(e,"class","empty-state svelte-1rwjkun")},m(t,l){b(t,e,l)},p:J,d(t){t&&k(e)}}}function At(n){let e,t,l=n[124].summary+"",i,r,s,u=n[124].minutes+"",c,d,m=pe(n[124].createdAt)+"",h,_;return{c(){e=f("div"),t=f("div"),i=I(l),r=j(),s=f("div"),c=I(u),d=I(" мин · "),h=I(m),_=j(),o(t,"class","svelte-1rwjkun"),o(s,"class","wl-meta svelte-1rwjkun"),o(e,"class","worklog-entry svelte-1rwjkun")},m(v,w){b(v,e,w),a(e,t),a(t,i),a(e,r),a(e,s),a(s,c),a(s,d),a(s,h),a(e,_)},p(v,w){w[0]&1024&&l!==(l=v[124].summary+"")&&U(i,l),w[0]&1024&&u!==(u=v[124].minutes+"")&&U(c,u),w[0]&1024&&m!==(m=pe(v[124].createdAt)+"")&&U(h,m)},d(v){v&&k(e)}}}function zi(n){let e,t=te(n[9]),l=[];for(let i=0;iДействий пока нет',o(e,"class","empty-state svelte-1rwjkun")},m(t,l){b(t,e,l)},p:J,d(t){t&&k(e)}}}function zt(n){let e,t,l=n[135].title+"",i,r,s=n[135].type+"",u,c,d,m,h,_;function v(){return n[93](n[135])}return{c(){e=f("div"),t=f("span"),i=I(l),r=f("span"),u=I(s),c=j(),d=f("button"),d.textContent="Запустить",m=j(),o(t,"class","svelte-1rwjkun"),o(r,"class","action-type svelte-1rwjkun"),o(d,"class","btn btn-sm svelte-1rwjkun"),o(e,"class","action-card svelte-1rwjkun")},m(w,g){b(w,e,g),a(e,t),a(t,i),a(e,r),a(r,u),a(e,c),a(e,d),a(e,m),h||(_=F(d,"click",v),h=!0)},p(w,g){n=w,g[0]&512&&l!==(l=n[135].title+"")&&U(i,l),g[0]&512&&s!==(s=n[135].type+"")&&U(u,s)},d(w){w&&k(e),h=!1,_()}}}function Bt(n){let e,t,l=n[30].items.length+"",i,r,s;return{c(){e=f("button"),t=I("Вставить "),i=I(l),o(e,"class","btn svelte-1rwjkun")},m(u,c){b(u,e,c),a(e,t),a(e,i),r||(s=F(e,"click",n[46]),r=!0)},p(u,c){c[0]&1073741824&&l!==(l=u[30].items.length+"")&&U(i,l)},d(u){u&&k(e),r=!1,s()}}}function Hi(n){let e,t,l,i,r,s,u;const c=[Ri,Wi],d=[];function m(w,g){return w[24].length>0?0:1}e=m(n),t=d[e]=c[e](n);const h=[qi,Ki],_=[];function v(w,g){return w[25].length===0?0:1}return i=v(n),r=_[i]=h[i](n),{c(){t.c(),l=j(),r.c(),s=de()},m(w,g){d[e].m(w,g),b(w,l,g),_[i].m(w,g),b(w,s,g),u=!0},p(w,g){let y=e;e=m(w),e===y?d[e].p(w,g):(ke(),ie(d[y],1,1,()=>{d[y]=null}),ve(),t=d[e],t?t.p(w,g):(t=d[e]=c[e](w),t.c()),ne(t,1),t.m(l.parentNode,l));let M=i;i=v(w),i===M?_[i].p(w,g):(ke(),ie(_[M],1,1,()=>{_[M]=null}),ve(),r=_[i],r?r.p(w,g):(r=_[i]=h[i](w),r.c()),ne(r,1),r.m(s.parentNode,s))},i(w){u||(ne(t),ne(r),u=!0)},o(w){ie(t),ie(r),u=!1},d(w){w&&(k(l),k(s)),d[e].d(w),_[i].d(w)}}}function Vi(n){let e;return{c(){e=f("div"),e.innerHTML='Загрузка...
',o(e,"class","empty-state svelte-1rwjkun")},m(t,l){b(t,e,l)},p:J,i:J,o:J,d(t){t&&k(e)}}}function Wi(n){let e,t;return e=new pl({props:{crumbs:[{name:"Files"}]}}),{c(){je(e.$$.fragment)},m(l,i){be(e,l,i),t=!0},p:J,i(l){t||(ne(e.$$.fragment,l),t=!0)},o(l){ie(e.$$.fragment,l),t=!1},d(l){he(e,l)}}}function Ri(n){let e,t,l,i,r,s;return e=new pl({props:{crumbs:[{name:"Files"},...n[24]]}}),e.$on("navigate",n[81]),{c(){je(e.$$.fragment),t=j(),l=f("button"),l.textContent="← Back",o(l,"class","btn btn-sm back-btn svelte-1rwjkun")},m(u,c){be(e,u,c),b(u,t,c),b(u,l,c),i=!0,r||(s=F(l,"click",n[37]),r=!0)},p(u,c){const d={};c[0]&16777216&&(d.crumbs=[{name:"Files"},...u[24]]),e.$set(d)},i(u){i||(ne(e.$$.fragment,u),i=!0)},o(u){ie(e.$$.fragment,u),i=!1},d(u){u&&(k(t),k(l)),he(e,u),r=!1,s()}}}function Ki(n){let e,t=[],l=new Map,i,r=te(n[25]);const s=u=>u[132].id;for(let u=0;u0?"В этой папке пока нет файлов":"В этом проекте пока нет файлов",s,u,c,d,m,h,_,v,w,g;return{c(){e=f("div"),t=f("div"),t.innerHTML=' ',l=j(),i=f("p"),s=I(r),u=j(),c=f("p"),c.textContent="Добавьте файл или папку, чтобы сохранить материалы проекта.",d=j(),m=f("div"),h=f("button"),h.textContent="Добавить файл",_=j(),v=f("button"),v.textContent="Добавить папку",o(t,"class","empty-icon svelte-1rwjkun"),o(i,"class","svelte-1rwjkun"),o(c,"class","hint svelte-1rwjkun"),o(h,"class","btn btn-primary svelte-1rwjkun"),o(v,"class","btn svelte-1rwjkun"),o(m,"class","empty-actions svelte-1rwjkun"),o(e,"class","empty-state svelte-1rwjkun")},m(y,M){b(y,e,M),a(e,t),a(e,l),a(e,i),a(i,s),a(e,u),a(e,c),a(e,d),a(e,m),a(m,h),a(m,_),a(m,v),w||(g=[F(h,"click",n[63]),F(v,"click",n[64])],w=!0)},p(y,M){M[0]&16777216&&r!==(r=y[24].length>0?"В этой папке пока нет файлов":"В этом проекте пока нет файлов")&&U(s,r)},i:J,o:J,d(y){y&&k(e),w=!1,re(g)}}}function Ht(n,e){let t,l,i;return l=new ni({props:{item:e[132],selected:e[31].includes(e[132].id),onDragStart:e[49],onDragOver:e[50],onDrop:e[51]}}),l.$on("navigate",e[82]),l.$on("preview",e[83]),l.$on("openExternal",e[84]),l.$on("delete",e[85]),l.$on("rename",e[86]),l.$on("duplicate",e[87]),l.$on("cut",e[88]),l.$on("copy",e[89]),l.$on("selectOne",e[90]),l.$on("toggleSelect",e[91]),{key:n,first:null,c(){t=de(),je(l.$$.fragment),this.first=t},m(r,s){b(r,t,s),be(l,r,s),i=!0},p(r,s){e=r;const u={};s[0]&33554432&&(u.item=e[132]),s[0]&33554432|s[1]&1&&(u.selected=e[31].includes(e[132].id)),l.$set(u)},i(r){i||(ne(l.$$.fragment,r),i=!0)},o(r){ie(l.$$.fragment,r),i=!1},d(r){r&&k(t),he(l,r)}}}function Vt(n){let e;return{c(){e=f("div"),e.innerHTML='Сканирование...
',o(e,"class","empty-state svelte-1rwjkun")},m(t,l){b(t,e,l)},d(t){t&&k(e)}}}function Wt(n){let e,t;return e=new hi({props:{item:n[26],content:n[27],loading:n[28],error:n[29]}}),e.$on("close",n[40]),e.$on("openExternal",n[92]),{c(){je(e.$$.fragment)},m(l,i){be(e,l,i),t=!0},p(l,i){const r={};i[0]&67108864&&(r.item=l[26]),i[0]&134217728&&(r.content=l[27]),i[0]&268435456&&(r.loading=l[28]),i[0]&536870912&&(r.error=l[29]),e.$set(r)},i(l){t||(ne(e.$$.fragment,l),t=!0)},o(l){ie(e.$$.fragment,l),t=!1},d(l){he(e,l)}}}function Rt(n){let e,t,l,i,r,s,u,c,d;return{c(){e=f("div"),t=f("input"),l=j(),i=f("div"),r=f("button"),r.textContent="Создать",s=j(),u=f("button"),u.textContent="Отмена",o(t,"type","text"),o(t,"placeholder","Название заметки"),o(t,"class","svelte-1rwjkun"),o(r,"class","btn btn-primary svelte-1rwjkun"),o(u,"class","btn svelte-1rwjkun"),o(i,"class","form-actions svelte-1rwjkun"),o(e,"class","create-form svelte-1rwjkun")},m(m,h){b(m,e,h),a(e,t),ue(t,n[17]),a(e,l),a(e,i),a(i,r),a(i,s),a(i,u),c||(d=[F(t,"input",n[78]),F(t,"keydown",n[79]),F(r,"click",n[57]),F(u,"click",n[56])],c=!0)},p(m,h){h[0]&131072&&t.value!==m[17]&&ue(t,m[17])},d(m){m&&k(e),c=!1,re(d)}}}function Gi(n){let e,t=te(n[7]),l=[];for(let i=0;iНет заметокСоздайте первую заметку для этого дела.
',o(e,"class","empty-state svelte-1rwjkun")},m(t,l){b(t,e,l)},p:J,d(t){t&&k(e)}}}function Kt(n){let e,t,l=n[127].title+"",i,r,s,u=pe(n[127].createdAt)+"",c,d,m,h;function _(){return n[80](n[127])}return{c(){e=f("div"),t=f("div"),i=I(l),r=j(),s=f("div"),c=I(u),d=j(),o(t,"class","note-card-title svelte-1rwjkun"),o(s,"class","note-card-date svelte-1rwjkun"),o(e,"class","note-card svelte-1rwjkun")},m(v,w){b(v,e,w),a(e,t),a(t,i),a(e,r),a(e,s),a(s,c),a(e,d),m||(h=F(e,"click",_),m=!0)},p(v,w){n=v,w[0]&128&&l!==(l=n[127].title+"")&&U(i,l),w[0]&128&&u!==(u=pe(n[127].createdAt)+"")&&U(c,u)},d(v){v&&k(e),m=!1,h()}}}function qt(n){let e,t,l,i=te(n[7].slice(0,5)),r=[];for(let s=0;sn[98].call(v)),o(m,"class","form-group svelte-1rwjkun"),o(y,"class","btn btn-primary svelte-1rwjkun"),o(W,"class","btn svelte-1rwjkun"),o(g,"class","modal-actions svelte-1rwjkun"),o(t,"class","modal svelte-1rwjkun"),o(e,"class","modal-overlay svelte-1rwjkun")},m(E,L){b(E,e,L),a(e,t),a(t,l),a(t,i),a(t,r),a(r,s),a(r,u),a(r,c),ue(c,n[14]),a(t,d),a(t,m),a(m,h),a(m,_),a(m,v);for(let C=0;C⚒ Верстак ',i=j(),r=f("nav"),s=f("div"),u=f("div"),u.textContent="Разделы",c=j();for(let S=0;S{x[ae]=null}),ve(),P=x[O],P?P.p(S,Q):(P=x[O]=ee[O](S),P.c()),ne(P,1),P.m(g,T)),!S[8]&&!S[5]?A?A.p(S,Q):(A=Zt(S),A.c(),A.m(g,E)):A&&(A.d(1),A=null),S[13]?Z?Z.p(S,Q):(Z=Yt(S),Z.c(),Z.m(g,L)):Z&&(Z.d(1),Z=null),S[21]&&S[20]?G?G.p(S,Q):(G=xt(S),G.c(),G.m(g,null)):G&&(G.d(1),G=null)},i(S){C||(ne(P),C=!0)},o(S){ie(P),C=!1},d(S){S&&k(e),fe(R,S),V&&V.d(),Y.d(),z&&z.d(),x[O].d(),A&&A.d(),Z&&Z.d(),G&&G.d()}}}function $(n,...e){try{if(window.go&&window.go.main&&window.go.main.App){const t=window.go.main.App[n];if(typeof t=="function")return t(...e)}}catch(t){console.error("Wails call error:",n,t)}return Promise.reject(new Error("Wails not connected: "+n))}function pe(n){if(!n)return"";try{return new Date(n).toLocaleDateString("ru-RU",{day:"numeric",month:"short"})}catch{return n}}const el=n=>n.id!=="today"&&n.id!=="inbox";function Xi(n,e,t){let l=[],i=[],r="",s="",u="",c=null,d="overview",m=[],h=null,_=[],v=[],w=[],g="",y="",M=!1,W="",q="clients",O=!1,P="",T=!0,E=!1,L=null,C=!1,N="",R=!1,V=null,B=[],X=[],Y=null,z="",ee=!1,x="",H={items:[],mode:"copy"},A=[],Z=[];const G=[{id:"overview",label:"Обзор"},{id:"notes",label:"Заметки"},{id:"files",label:"Файлы"},{id:"actions",label:"Действия"},{id:"worklog",label:"Журнал"},{id:"activity",label:"Активность"}];let S=null;il(async()=>{try{t(2,r=await $("VerstakVersion")||"verstak-gui/v2"),t(0,l=await $("ListSections")||[])}catch(p){t(3,s=String(p)),t(0,l=[{id:"today",label:"Сегодня"},{id:"inbox",label:"Неразобранное"},{id:"clients",label:"Клиенты"},{id:"projects",label:"Проекты"},{id:"recipes",label:"Рецепты"},{id:"documents",label:"Документы"},{id:"archive",label:"Архив"}])}window.runtime&&window.runtime.EventsOn&&(window.runtime.EventsOn("files-dropped",Tl),S=()=>window.runtime.EventsOff("files-dropped")),window.addEventListener("keydown",nt),t(18,T=!1)}),sl(()=>{S&&S(),window.removeEventListener("keydown",nt)});async function Q(p){t(4,u=p),t(5,c=null),t(6,d="overview"),t(7,m=[]),_=[],t(9,v=[]),t(10,w=[]),t(13,M=!1),t(3,s="");try{t(1,i=await $("ListNodesBySection",p)||[])}catch(D){t(3,s=String(D)),t(1,i=[])}}async function ae(p){t(5,c=p),t(6,d="overview"),t(7,m=[]),_=[],t(9,v=[]),t(10,w=[]),t(25,X=[]),t(24,B=[]),t(23,V=null),t(26,Y=null),t(27,z=""),t(31,A=[]),Z=[],t(8,h=null),t(13,M=!1),t(16,O=!1),t(3,s=""),await oe(p.id)}async function oe(p){try{t(7,m=await $("ListNotes",p)||[])}catch{}try{_=await $("ListFiles",p)||[]}catch{}try{t(9,v=await $("ListActions",p)||[])}catch{}try{t(10,w=await $("ListWorklog",p)||[])}catch{}}async function se(p){t(22,R=!0);try{let D=await $("ListItems",p)||[];D.sort((le,ce)=>le.type!==ce.type?le.type==="folder"?-1:1:(le.name||"").localeCompare(ce.name||"")),t(25,X=D)}catch{t(25,X=[])}t(22,R=!1)}async function Je(p){if(c){try{const D=await $("GetNodeDetail",p);D&&t(24,B=[...B,{id:p,name:D.title}])}catch{t(24,B=[...B,{id:p,name:"..."}])}t(23,V=p),await se(p)}}function _l(){if(B.length<2)t(24,B=[]),t(23,V=null),se(c.id);else{const p=B[B.length-2];t(24,B=B.slice(0,-1)),t(23,V=p.id),se(p.id)}}function Xe(p){const D=B[p];t(24,B=B.slice(0,p+1)),t(23,V=D.id),se(D.id)}async function Ze(p){t(26,Y=p),t(27,z=""),t(29,x=""),t(28,ee=!0);try{Zn(p)?t(27,z=await $("GetFileBase64",p.fileId)||""):Yn(p)&&t(27,z=await $("ReadFileText",p.fileId)||"")}catch(D){t(29,x=String(D))}t(28,ee=!1)}function ml(){t(26,Y=null),t(27,z=""),t(29,x="")}async function kl(){const p=prompt("Введите имя файла:");if(!(!p||!p.trim()))try{const D=V||c.id;await $("CreateEmptyFile",D,p.trim()),await se(D)}catch(D){t(3,s=String(D))}}async function Ye(p){try{await $("DuplicateNode",p);const D=V||c.id;await se(D)}catch(D){t(3,s=String(D))}}function Qe(p){const D=prompt("Новое имя:");!D||!D.trim()||vl(p,D.trim())}async function vl(p,D){try{await $("RenameNode",p,D);const le=V||c.id;await se(le)}catch(le){t(3,s=String(le))}}function xe(p){t(30,H={items:[p],mode:"cut"})}function $e(p){t(30,H={items:[p],mode:"copy"})}async function et(){if(H.items.length===0)return;const p=V||c.id;try{if(H.mode==="copy")for(const D of H.items)await $("DuplicateNode",D);else for(const D of H.items)await $("MoveNode",D,p);t(30,H={items:[],mode:"copy"}),await se(p)}catch(D){t(3,s=String(D))}}function tt(p){A.includes(p)?t(31,A=A.filter(D=>D!==p)):t(31,A=[...A,p])}function lt(p){t(31,A=[p])}function bl(){t(31,A=X.map(p=>p.id))}function Ae(p){return p.length>0?p:X.map(D=>D.id)}async function hl(){var ce;const p=Ae(A),D=p.length===1&&((ce=X.find(Ce=>Ce.id===p[0]))==null?void 0:ce.type)==="folder"?"папку":`файлов (${p.length})`;if(!confirm(`Удалить ${D}?`))return;for(const Ce of p)try{await $("DeleteFileOrFolder",Ce)}catch(pn){t(3,s=String(pn))}t(31,A=[]);const le=V||c.id;await se(le)}function wl(){const p=Ae(A);t(30,H={items:p,mode:"cut"}),t(31,A=[])}function gl(){const p=Ae(A);t(30,H={items:p,mode:"copy"}),t(31,A=[])}function yl(p,D){const le=A.includes(D)?A:[D];Z=le,p.dataTransfer.effectAllowed="move",p.dataTransfer.setData("text/plain",le.join(","))}function jl(p,D){const le=X.find(ce=>ce.id===D);le&&le.type==="folder"&&(p.preventDefault(),p.dataTransfer.dropEffect="move")}async function Cl(p,D){if(p.preventDefault(),Z.length!==0){for(const le of Z)try{await $("MoveNode",le,D)}catch(ce){t(3,s=String(ce))}Z=[],t(31,A=[]),await se(V||c.id)}}function nt(p){d==="files"&&(p.target.tagName==="INPUT"||p.target.tagName==="TEXTAREA"||(p.ctrlKey||p.metaKey?p.key==="c"?(p.preventDefault(),gl()):p.key==="x"?(p.preventDefault(),wl()):p.key==="v"?(p.preventDefault(),et()):p.key==="a"&&(p.preventDefault(),bl()):(p.key==="Delete"||p.key==="Backspace")&&A.length>0&&(p.preventDefault(),hl())))}function Sl(){t(13,M=!0),t(14,W=""),t(15,q=u||"clients")}function Dl(){t(13,M=!1),t(14,W="")}async function it(){if(W.trim())try{const p=await $("CreateNode","","case",W.trim(),q);t(13,M=!1),t(14,W=""),await Q(q)}catch(p){t(3,s=String(p))}}function st(){t(16,O=!0),t(17,P="")}function Ml(){t(16,O=!1),t(17,P="")}async function rt(){if(!(!P.trim()||!c))try{const p=await $("CreateNote",c.id,P.trim());t(7,m=[...m,p&&p.id?p:{id:Date.now().toString(),title:P.trim(),createdAt:new Date().toISOString()}]),t(16,O=!1),t(17,P="")}catch{const D={id:Date.now().toString(),title:P.trim(),createdAt:new Date().toISOString()};t(7,m=[...m,D]),t(16,O=!1),t(17,P="")}}async function ze(p){if(!(h&&h.dirty&&!confirm("Несохранённые изменения. Закрыть?")))try{const D=await $("ReadNote",p.id);t(8,h={id:p.id,title:p.title,content:D||"",dirty:!1})}catch{t(8,h={id:p.id,title:p.title,content:"# "+p.title+`
+
+`,dirty:!1})}}function Nl(){h&&h.dirty&&!confirm("Несохранённые изменения. Закрыть?")||t(8,h=null)}function El(p){h&&(t(8,h.content=p.target.value,h),t(8,h.dirty=!0,h))}async function Fl(){if(h)try{await $("SaveNote",h.id,h.content),t(8,h.dirty=!1,h)}catch{t(8,h.dirty=!1,h)}}async function Ll(){const p=parseInt(g,10);if(!(!y.trim()||isNaN(p)||p<=0||!c)){try{const D=await $("CreateWorklog",c.id,y.trim(),p);t(10,w=[...w,D&&D.id?D:{id:Date.now().toString(),nodeId:c.id,summary:y.trim(),minutes:p,createdAt:new Date().toISOString()}])}catch{t(10,w=[...w,{id:Date.now().toString(),nodeId:c.id,summary:y.trim(),minutes:p,createdAt:new Date().toISOString()}])}t(12,y=""),t(11,g="")}}async function ot(){const p=await $("PickFile");p&&await Be(c.id,p)}async function Ol(){const p=await $("PickDirectory");p&&await Be(c.id,p)}async function Be(p,D){t(19,E=!0);try{const le=await $("PreviewImport",D);t(20,L=le),N=D,t(21,C=!0)}catch(le){t(3,s=String(le))}t(19,E=!1)}async function He(p){try{const D=p==="copy"?await $("AddPathCopy",c.id,N):await $("AddPathLink",c.id,N);t(21,C=!1),t(20,L=null),t(24,B=[]),t(23,V=null),await Promise.all([oe(c.id),se(c.id)])}catch(D){t(3,s=String(D))}}function Il(){t(21,C=!1),t(20,L=null)}async function ct({id:p,type:D}){if(confirm(`Удалить ${D==="folder"?"папку":"файл"}?`))try{await $("DeleteFileOrFolder",p),_=_.filter(Ce=>Ce.nodeId!==p);const ce=V||c.id;await se(ce)}catch(ce){t(3,s=String(ce))}}async function Tl(p){if(!p||p.length===0)return;if(!c){t(3,s="Сначала выберите дело для добавления файлов");return}const D=p[0];await Be(c.id,D)}function Pl(p){return d===p?"tab active":"tab"}const Al=p=>Q(p.id),zl=p=>ae(p),Bl=()=>t(3,s="");function Hl(){h.content=this.value,t(8,h)}const Vl=p=>{t(6,d=p.id),p.id==="files"&&c&&X.length===0&&!V&&se(c.id)},Wl=()=>{t(6,d="notes"),st()},Rl=()=>{t(6,d="files"),ot()},Kl=()=>t(6,d="worklog"),ql=p=>ze(p);function Gl(){P=this.value,t(17,P)}const Ul=p=>p.key==="Enter"&&rt(),Jl=p=>ze(p),Xl=p=>{const D=p.detail;D===0?(t(24,B=[]),t(23,V=null),se(c.id)):Xe(D-1)},Zl=p=>Je(p.detail),Yl=p=>Ze(p.detail),Ql=p=>$("OpenFile",p.detail),xl=p=>ct(p.detail),$l=p=>Qe(p.detail.id),en=p=>Ye(p.detail),tn=p=>xe(p.detail),ln=p=>$e(p.detail),nn=p=>lt(p.detail),sn=p=>tt(p.detail),rn=p=>$("OpenFile",p.detail),on=p=>$("RunAction",p.id);function cn(){y=this.value,t(12,y)}function un(){g=nl(this.value),t(11,g)}function an(){W=this.value,t(14,W)}const fn=p=>p.key==="Enter"&&it();function dn(){q=hn(this),t(15,q),t(0,l)}return[l,i,r,s,u,c,d,m,h,v,w,g,y,M,W,q,O,P,T,E,L,C,R,V,B,X,Y,z,ee,x,H,A,G,Q,ae,se,Je,_l,Xe,Ze,ml,kl,Ye,Qe,xe,$e,et,tt,lt,yl,jl,Cl,Sl,Dl,it,st,Ml,rt,ze,Nl,El,Fl,Ll,ot,Ol,He,Il,ct,Pl,Al,zl,Bl,Hl,Vl,Wl,Rl,Kl,ql,Gl,Ul,Jl,Xl,Zl,Yl,Ql,xl,$l,en,tn,ln,nn,sn,rn,on,cn,un,an,fn,dn,()=>He("copy"),()=>He("link")]}class Zi extends Ee{constructor(e){super(),Ne(this,e,Xi,Ji,Me,{},null,[-1,-1,-1,-1,-1])}}new Zi({target:document.getElementById("app")});
diff --git a/cmd/verstak-gui/frontend-dist/assets/main-CmkweTP0.js b/cmd/verstak-gui/frontend-dist/assets/main-CmkweTP0.js
new file mode 100644
index 0000000..3f88270
--- /dev/null
+++ b/cmd/verstak-gui/frontend-dist/assets/main-CmkweTP0.js
@@ -0,0 +1,3 @@
+var _l=Object.defineProperty;var pl=(l,e,t)=>e in l?_l(l,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):l[e]=t;var Se=(l,e,t)=>pl(l,typeof e!="symbol"?e+"":e,t);(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const s of document.querySelectorAll('link[rel="modulepreload"]'))n(s);new MutationObserver(s=>{for(const o of s)if(o.type==="childList")for(const i of o.addedNodes)i.tagName==="LINK"&&i.rel==="modulepreload"&&n(i)}).observe(document,{childList:!0,subtree:!0});function t(s){const o={};return s.integrity&&(o.integrity=s.integrity),s.referrerPolicy&&(o.referrerPolicy=s.referrerPolicy),s.crossOrigin==="use-credentials"?o.credentials="include":s.crossOrigin==="anonymous"?o.credentials="omit":o.credentials="same-origin",o}function n(s){if(s.ep)return;s.ep=!0;const o=t(s);fetch(s.href,o)}})();function j(){}function Mt(l){return l()}function Be(){return Object.create(null)}function ne(l){l.forEach(Mt)}function At(l){return typeof l=="function"}function Lt(l,e){return l!=l?e==e:l!==e||l&&typeof l=="object"||typeof l=="function"}function ml(l){return Object.keys(l).length===0}function hl(l){return l??""}function a(l,e){l.appendChild(e)}function C(l,e,t){l.insertBefore(e,t||null)}function y(l){l.parentNode&&l.parentNode.removeChild(l)}function oe(l,e){for(let t=0;tl.removeEventListener(e,t,n)}function Et(l){return function(e){e.target===this&&l.call(this,e)}}function u(l,e,t){t==null?l.removeAttribute(e):l.getAttribute(e)!==t&&l.setAttribute(e,t)}function Ft(l){return l===""?null:+l}function vl(l){return Array.from(l.childNodes)}function H(l,e){e=""+e,l.data!==e&&(l.data=e)}function se(l,e){l.value=e??""}function He(l,e,t,n){t==null?l.style.removeProperty(e):l.style.setProperty(e,t,"")}function qe(l,e,t){for(let n=0;n{const s=l.$$.callbacks[e];if(s){const o=wl(e,t,{cancelable:n});return s.slice().forEach(i=>{i.call(l,o)}),!o.defaultPrevented}return!0}}function Me(l,e){const t=l.$$.callbacks[e.type];t&&t.slice().forEach(n=>n.call(this,e))}const de=[],ge=[];let _e=[];const Le=[],Cl=Promise.resolve();let Ee=!1;function Nl(){Ee||(Ee=!0,Cl.then(Ot))}function ke(l){_e.push(l)}function Re(l){Le.push(l)}const Ae=new Set;let ue=0;function Ot(){if(ue!==0)return;const l=be;do{try{for(;uel.indexOf(n)===-1?e.push(n):t.push(n)),t.forEach(n=>n()),_e=e}const we=new Set;let ae;function me(){ae={r:0,c:[],p:ae}}function he(){ae.r||ne(ae.c),ae=ae.p}function $(l,e){l&&l.i&&(we.delete(l),l.i(e))}function ie(l,e,t,n){if(l&&l.o){if(we.has(l))return;we.add(l),ae.c.push(()=>{we.delete(l),n&&(t&&l.d(1),n())}),l.o(e)}else n&&n()}function Q(l){return(l==null?void 0:l.length)!==void 0?l:Array.from(l)}function Al(l,e){ie(l,1,1,()=>{e.delete(l.key)})}function Ll(l,e,t,n,s,o,i,r,c,f,d,m){let p=l.length,h=o.length,w=p;const b={};for(;w--;)b[l[w].key]=w;const v=[],M=new Map,A=new Map,O=[];for(w=h;w--;){const N=m(s,o,w),F=t(N);let L=i.get(F);L?O.push(()=>L.p(N,e)):(L=f(F,N),L.c()),M.set(F,v[w]=L),F in b&&A.set(F,Math.abs(w-b[F]))}const I=new Set,D=new Set;function T(N){$(N,1),N.m(r,d),i.set(N.key,N),d=N.first,h--}for(;p&&h;){const N=v[h-1],F=l[p-1],L=N.key,K=F.key;N===F?(d=N.first,p--,h--):M.has(K)?!i.has(L)||I.has(L)?T(N):D.has(K)?p--:A.get(L)>A.get(K)?(D.add(L),T(N)):(I.add(K),p--):(c(F,i),p--)}for(;p--;){const N=l[p];M.has(N.key)||c(N,i)}for(;h;)T(v[h-1]);return ne(O),v}function je(l,e,t){const n=l.$$.props[e];n!==void 0&&(l.$$.bound[n]=t,t(l.$$.ctx[n]))}function It(l){l&&l.c()}function Oe(l,e,t){const{fragment:n,after_update:s}=l.$$;n&&n.m(e,t),ke(()=>{const o=l.$$.on_mount.map(Mt).filter(At);l.$$.on_destroy?l.$$.on_destroy.push(...o):ne(o),l.$$.on_mount=[]}),s.forEach(ke)}function Ie(l,e){const t=l.$$;t.fragment!==null&&(Ml(t.after_update),ne(t.on_destroy),t.fragment&&t.fragment.d(e),t.on_destroy=t.fragment=null,t.ctx=[])}function El(l,e){l.$$.dirty[0]===-1&&(de.push(l),Nl(),l.$$.dirty.fill(0)),l.$$.dirty[e/31|0]|=1<{const w=h.length?h[0]:p;return f.ctx&&s(f.ctx[m],f.ctx[m]=w)&&(!f.skip_bound&&f.bound[m]&&f.bound[m](w),d&&El(l,m)),p}):[],f.update(),d=!0,ne(f.before_update),f.fragment=n?n(f.ctx):!1,e.target){if(e.hydrate){const m=vl(e.target);f.fragment&&f.fragment.l(m),m.forEach(y)}else f.fragment&&f.fragment.c();e.intro&&$(l.$$.fragment),Oe(l,e.target,e.anchor),Ot()}ve(c)}class Pt{constructor(){Se(this,"$$");Se(this,"$$set")}$destroy(){Ie(this,1),this.$destroy=j}$on(e,t){if(!At(t))return j;const n=this.$$.callbacks[e]||(this.$$.callbacks[e]=[]);return n.push(t),()=>{const s=n.indexOf(t);s!==-1&&n.splice(s,1)}}$set(e){this.$$set&&!ml(e)&&(this.$$.skip_bound=!0,this.$$set(e),this.$$.skip_bound=!1)}}const Fl="4";typeof window<"u"&&(window.__svelte||(window.__svelte={v:new Set})).v.add(Fl);function ze(l,e,t){const n=l.slice();return n[13]=e[t],n}function Ol(l){let e,t,n,s,o,i=l[2].name+"",r,c,f,d=l[2].size>0?(l[2].size/1024).toFixed(1)+" KB":"—",m,p,h,w=(l[2].mime||"")+"",b,v,M,A,O,I,D,T;return{c(){e=_("span"),t=S(),n=_("span"),n.textContent="📄",s=S(),o=_("span"),r=E(i),c=S(),f=_("span"),m=E(d),p=S(),h=_("span"),b=E(w),v=S(),M=_("div"),A=_("button"),A.textContent="▶",O=S(),I=_("button"),I.textContent="✕",u(e,"class","tree-toggle-placeholder"),u(n,"class","tree-icon"),u(o,"class","tree-name"),u(f,"class","file-size"),u(h,"class","file-mime"),u(A,"class","btn btn-sm"),u(A,"title","Открыть"),u(I,"class","btn btn-sm btn-danger"),u(I,"title","Удалить"),u(M,"class","file-actions")},m(N,F){C(N,e,F),C(N,t,F),C(N,n,F),C(N,s,F),C(N,o,F),a(o,r),C(N,c,F),C(N,f,F),a(f,m),C(N,p,F),C(N,h,F),a(h,b),C(N,v,F),C(N,M,F),a(M,A),a(M,O),a(M,I),D||(T=[B(A,"click",l[7]),B(I,"click",l[6])],D=!0)},p(N,F){F&4&&i!==(i=N[2].name+"")&&H(r,i),F&4&&d!==(d=N[2].size>0?(N[2].size/1024).toFixed(1)+" KB":"—")&&H(m,d),F&4&&w!==(w=(N[2].mime||"")+"")&&H(b,w)},d(N){N&&(y(e),y(t),y(n),y(s),y(o),y(c),y(f),y(p),y(h),y(v),y(M)),D=!1,ne(T)}}}function Il(l){let e,t=l[4]?"⏳":l[0][l[2].id]?"▼":"▶",n,s,o,i,r,c=l[2].name+"",f,d,m,p,h,w,b,v;return{c(){e=_("button"),n=E(t),s=S(),o=_("span"),o.textContent="📁",i=S(),r=_("span"),f=E(c),d=S(),m=_("div"),p=_("button"),p.textContent="📂",h=S(),w=_("button"),w.textContent="✕",u(e,"class","tree-toggle-btn"),u(o,"class","tree-icon"),u(r,"class","tree-name"),u(p,"class","btn btn-sm"),u(p,"title","Открыть папку"),u(w,"class","btn btn-sm btn-danger"),u(w,"title","Удалить"),u(m,"class","file-actions")},m(M,A){C(M,e,A),a(e,n),C(M,s,A),C(M,o,A),C(M,i,A),C(M,r,A),a(r,f),C(M,d,A),C(M,m,A),a(m,p),a(m,h),a(m,w),b||(v=[B(e,"click",l[5]),B(p,"click",l[8]),B(w,"click",l[6])],b=!0)},p(M,A){A&21&&t!==(t=M[4]?"⏳":M[0][M[2].id]?"▼":"▶")&&H(n,t),A&4&&c!==(c=M[2].name+"")&&H(f,c)},d(M){M&&(y(e),y(s),y(o),y(i),y(r),y(d),y(m)),b=!1,ne(v)}}}function We(l){let e,t,n=Q(l[1][l[2].id]),s=[];for(let i=0;iie(s[i],1,1,()=>{s[i]=null});return{c(){for(let i=0;i{c=null}),he())},i(f){s||($(c),s=!0)},o(f){ie(c),s=!1},d(f){f&&(y(e),y(t),y(n)),r.d(),c&&c.d(f)}}}function Pl(l,...e){var t,n,s;try{const o=(s=(n=(t=window==null?void 0:window.go)==null?void 0:t.main)==null?void 0:n.App)==null?void 0:s[l];if(typeof o=="function")return o(...e)}catch(o){console.error("Wails call error:",l,o)}}function Tl(l,e,t){let{item:n}=e,{expanded:s={}}=e,{childrenMap:o={}}=e,{depth:i=0}=e;const r=yl();let c=!1;async function f(){const v=n.id;if(s[v]){t(0,s={...s,[v]:!1});return}if(t(4,c=!0),t(0,s={...s,[v]:!0}),!o[v]){try{t(1,o[v]=await Pl("ListItems",v)||[],o)}catch{t(1,o[v]=[],o)}t(1,o={...o})}t(4,c=!1)}function d(){r("delete",n.id)}function m(){r("open",n.fileId)}function p(){r("openFolder",n.id)}function h(v){Me.call(this,l,v)}function w(v){Me.call(this,l,v)}function b(v){Me.call(this,l,v)}return l.$$set=v=>{"item"in v&&t(2,n=v.item),"expanded"in v&&t(0,s=v.expanded),"childrenMap"in v&&t(1,o=v.childrenMap),"depth"in v&&t(3,i=v.depth)},[s,o,n,i,c,f,d,m,p,h,w,b]}class Tt extends Pt{constructor(e){super(),Dt(this,e,Tl,Dl,Lt,{item:2,expanded:0,childrenMap:1,depth:3})}}function Ve(l,e,t){const n=l.slice();return n[80]=e[t],n}function Ue(l,e,t){const n=l.slice();return n[83]=e[t],n}function Ge(l,e,t){const n=l.slice();return n[94]=e[t],n}function Je(l,e,t){const n=l.slice();return n[91]=e[t],n}function Qe(l,e,t){const n=l.slice();return n[86]=e[t],n}function Xe(l,e,t){const n=l.slice();return n[83]=e[t],n}function Ye(l,e,t){const n=l.slice();return n[86]=e[t],n}function Ze(l,e,t){const n=l.slice();return n[99]=e[t],n}function $e(l,e,t){const n=l.slice();return n[80]=e[t],n}function xe(l,e,t){const n=l.slice();return n[104]=e[t],n}function et(l,e,t){const n=l.slice();return n[107]=e[t],n}function tt(l){let e,t=l[107].label+"",n,s,o,i,r;function c(){return l[48](l[107])}return{c(){e=_("button"),n=E(t),s=S(),u(e,"class",o="nav-item "+(l[4]===l[107].id?"selected":"")+" svelte-awis0l")},m(f,d){C(f,e,d),a(e,n),a(e,s),i||(r=B(e,"click",c),i=!0)},p(f,d){l=f,d[0]&1&&t!==(t=l[107].label+"")&&H(n,t),d[0]&17&&o!==(o="nav-item "+(l[4]===l[107].id?"selected":"")+" svelte-awis0l")&&u(e,"class",o)},d(f){f&&y(e),i=!1,r()}}}function lt(l){let e,t,n,s,o,i=l[1].length>0&&nt(l),r=Q(l[1]),c=[];for(let d=0;d0?i?i.p(d,m):(i=nt(d),i.c(),i.m(t,null)):i&&(i.d(1),i=null),m[0]&268435490){r=Q(d[1]);let p;for(p=0;p0)return Kl;if(r[3])return Wl}let o=s(l),i=o&&o(l);return{c(){e=_("div"),t=_("h2"),t.textContent="Верстак",n=S(),i&&i.c(),u(t,"class","svelte-awis0l"),u(e,"class","welcome svelte-awis0l")},m(r,c){C(r,e,c),a(e,t),a(e,n),i&&i.m(e,null)},p(r,c){o===(o=s(r))&&i?i.p(r,c):(i&&i.d(1),i=o&&o(r),i&&(i.c(),i.m(e,null)))},i:j,o:j,d(r){r&&y(e),i&&i.d()}}}function jl(l){let e,t,n,s,o,i,r=Q(l[26]),c=[];for(let p=0;p{d[w]=null}),he()),~s?(o=d[s],o?o.p(p,h):(o=d[s]=f[s](p),o.c()),$(o,1),o.m(n,null)):o=null)},i(p){i||($(o),i=!0)},o(p){ie(o),i=!1},d(p){p&&(y(e),y(t),y(n)),oe(c,p),~s&&d[s].d()}}}function zl(l){let e,t,n,s=l[8].title+"",o,i,r,c,f,d,m,p,h,w,b,v=l[8].dirty&&wt();return{c(){e=_("div"),t=_("div"),n=_("span"),o=E(s),i=S(),v&&v.c(),r=S(),c=_("div"),f=_("button"),f.textContent="Сохранить",d=S(),m=_("button"),m.textContent="Закрыть",p=S(),h=_("textarea"),u(n,"class","note-title svelte-awis0l"),u(f,"class","btn btn-primary svelte-awis0l"),u(m,"class","btn svelte-awis0l"),u(c,"class","note-editor-actions svelte-awis0l"),u(t,"class","note-editor-header svelte-awis0l"),u(h,"class","note-textarea svelte-awis0l"),u(h,"placeholder","Начните писать..."),u(e,"class","note-editor svelte-awis0l")},m(M,A){C(M,e,A),a(e,t),a(t,n),a(n,o),a(t,i),v&&v.m(t,null),a(t,r),a(t,c),a(c,f),a(c,d),a(c,m),a(e,p),a(e,h),se(h,l[8].content),w||(b=[B(f,"click",l[39]),B(m,"click",l[37]),B(h,"input",l[51]),B(h,"input",l[38])],w=!0)},p(M,A){A[0]&256&&s!==(s=M[8].title+"")&&H(o,s),M[8].dirty?v||(v=wt(),v.c(),v.m(t,r)):v&&(v.d(1),v=null),A[0]&256&&se(h,M[8].content)},i:j,o:j,d(M){M&&y(e),v&&v.d(),w=!1,ne(b)}}}function Wl(l){let e,t,n;return{c(){e=_("p"),t=E("Ошибка: "),n=E(l[3]),u(e,"class","error-text svelte-awis0l")},m(s,o){C(s,e,o),a(e,t),a(e,n)},p(s,o){o[0]&8&&H(n,s[3])},d(s){s&&y(e)}}}function Kl(l){let e,t,n;return{c(){e=_("p"),e.textContent="Выберите раздел в боковой панели.",t=S(),n=_("p"),n.textContent="Или создайте новое дело кнопкой «+».",u(e,"class","svelte-awis0l"),u(n,"class","hint svelte-awis0l")},m(s,o){C(s,e,o),C(s,t,o),C(s,n,o)},p:j,d(s){s&&(y(e),y(t),y(n))}}}function Vl(l){let e;return{c(){e=_("p"),e.textContent="Загрузка...",u(e,"class","svelte-awis0l")},m(t,n){C(t,e,n)},p:j,d(t){t&&y(e)}}}function rt(l){let e,t=l[99].label+"",n,s,o;function i(){return l[52](l[99])}return{c(){e=_("button"),n=E(t),u(e,"class",hl(l[47](l[99].id))+" svelte-awis0l")},m(r,c){C(r,e,c),a(e,n),s||(o=B(e,"click",i),s=!0)},p(r,c){l=r},d(r){r&&y(e),s=!1,o()}}}function Ul(l){let e;return{c(){e=_("div"),e.innerHTML='Активность появится позже
',u(e,"class","empty-state svelte-awis0l")},m(t,n){C(t,e,n)},p:j,i:j,o:j,d(t){t&&y(e)}}}function Gl(l){let e,t,n,s,o,i,r,c,f,d,m,p;function h(v,M){return v[10].length===0?$l:Zl}let w=h(l),b=w(l);return{c(){e=_("div"),t=_("div"),n=_("input"),s=S(),o=_("input"),i=S(),r=_("button"),c=E("Записать"),d=S(),b.c(),u(n,"type","text"),u(n,"placeholder","Что сделано"),u(n,"class","svelte-awis0l"),u(o,"type","number"),u(o,"placeholder","Мин"),u(o,"min","1"),u(o,"class","svelte-awis0l"),u(r,"class","btn btn-primary svelte-awis0l"),r.disabled=f=!l[12].trim()||!l[11],u(t,"class","worklog-form svelte-awis0l"),u(e,"class","worklog-tab svelte-awis0l")},m(v,M){C(v,e,M),a(e,t),a(t,n),se(n,l[12]),a(t,s),a(t,o),se(o,l[11]),a(t,i),a(t,r),a(r,c),a(e,d),b.m(e,null),m||(p=[B(n,"input",l[66]),B(o,"input",l[67]),B(r,"click",l[40])],m=!0)},p(v,M){M[0]&4096&&n.value!==v[12]&&se(n,v[12]),M[0]&2048&&Ft(o.value)!==v[11]&&se(o,v[11]),M[0]&6144&&f!==(f=!v[12].trim()||!v[11])&&(r.disabled=f),w===(w=h(v))&&b?b.p(v,M):(b.d(1),b=w(v),b&&(b.c(),b.m(e,null)))},i:j,o:j,d(v){v&&y(e),b.d(),m=!1,ne(p)}}}function Jl(l){let e;function t(o,i){return o[9].length===0?en:xl}let n=t(l),s=n(l);return{c(){s.c(),e=pe()},m(o,i){s.m(o,i),C(o,e,i)},p(o,i){n===(n=t(o))&&s?s.p(o,i):(s.d(1),s=n(o),s&&(s.c(),s.m(e.parentNode,e)))},i:j,o:j,d(o){o&&y(e),s.d(o)}}}function Ql(l){let e,t,n,s,o,i,r,c,f,d,m,p,h,w;const b=[nn,ln,tn],v=[];function M(O,I){return O[25]?0:O[22].length===0?1:2}f=M(l),d=v[f]=b[f](l);let A=l[19]&&!l[21]&&dt();return{c(){e=_("div"),t=_("div"),n=_("button"),s=E("+ Добавить файл"),o=S(),i=_("button"),r=E("+ Добавить папку"),c=S(),d.c(),m=S(),A&&A.c(),u(n,"class","btn btn-primary svelte-awis0l"),n.disabled=l[19],u(i,"class","btn svelte-awis0l"),i.disabled=l[19],u(t,"class","tab-toolbar svelte-awis0l"),u(e,"class","files-tab svelte-awis0l")},m(O,I){C(O,e,I),a(e,t),a(t,n),a(n,s),a(t,o),a(t,i),a(i,r),a(e,c),v[f].m(e,null),a(e,m),A&&A.m(e,null),p=!0,h||(w=[B(n,"click",l[41]),B(i,"click",l[42])],h=!0)},p(O,I){(!p||I[0]&524288)&&(n.disabled=O[19]),(!p||I[0]&524288)&&(i.disabled=O[19]);let D=f;f=M(O),f===D?v[f].p(O,I):(me(),ie(v[D],1,1,()=>{v[D]=null}),he(),d=v[f],d?d.p(O,I):(d=v[f]=b[f](O),d.c()),$(d,1),d.m(e,m)),O[19]&&!O[21]?A||(A=dt(),A.c(),A.m(e,null)):A&&(A.d(1),A=null)},i(O){p||($(d),p=!0)},o(O){ie(d),p=!1},d(O){O&&y(e),v[f].d(),A&&A.d(),h=!1,ne(w)}}}function Xl(l){let e,t,n,s,o,i,r,c=l[16]&&_t(l);function f(p,h){return p[7].length===0&&!p[16]?on:sn}let d=f(l),m=d(l);return{c(){e=_("div"),t=_("div"),n=_("button"),n.textContent="+ Добавить заметку",s=S(),c&&c.c(),o=S(),m.c(),u(n,"class","btn btn-primary svelte-awis0l"),u(t,"class","tab-toolbar svelte-awis0l"),u(e,"class","notes-tab svelte-awis0l")},m(p,h){C(p,e,h),a(e,t),a(t,n),a(e,s),c&&c.m(e,null),a(e,o),m.m(e,null),i||(r=B(n,"click",l[33]),i=!0)},p(p,h){p[16]?c?c.p(p,h):(c=_t(p),c.c(),c.m(e,o)):c&&(c.d(1),c=null),d===(d=f(p))&&m?m.p(p,h):(m.d(1),m=d(p),m&&(m.c(),m.m(e,null)))},i:j,o:j,d(p){p&&y(e),c&&c.d(),m.d(),i=!1,r()}}}function Yl(l){let e,t,n=l[5].title+"",s,o,i,r,c,f,d=l[5].type+"",m,p,h,w,b,v=(l[5].section||"—")+"",M,A,O,I,D,T=re(l[5].createdAt)+"",N,F,L,K,V,z,x,J,X,U,ee,Z,te,G,R=l[7].length>0&&mt(l),P=l[10].length>0&&vt(l);return{c(){e=_("div"),t=_("h2"),s=E(n),o=S(),i=_("div"),r=_("div"),c=_("span"),c.textContent="Тип",f=_("span"),m=E(d),p=S(),h=_("div"),w=_("span"),w.textContent="Раздел",b=_("span"),M=E(v),A=S(),O=_("div"),I=_("span"),I.textContent="Создано",D=_("span"),N=E(T),F=S(),L=_("div"),K=_("button"),K.textContent="✏️ Новая заметка",V=S(),z=_("button"),z.textContent="📎 Добавить файл",x=S(),J=_("button"),J.textContent="⚡ Добавить действие",X=S(),U=_("button"),U.textContent="🕐 Записать время",ee=S(),R&&R.c(),Z=S(),P&&P.c(),u(t,"class","svelte-awis0l"),u(c,"class","meta-label svelte-awis0l"),u(f,"class","svelte-awis0l"),u(r,"class","meta-item svelte-awis0l"),u(w,"class","meta-label svelte-awis0l"),u(b,"class","svelte-awis0l"),u(h,"class","meta-item svelte-awis0l"),u(I,"class","meta-label svelte-awis0l"),u(D,"class","svelte-awis0l"),u(O,"class","meta-item svelte-awis0l"),u(i,"class","meta-grid svelte-awis0l"),u(K,"class","qa-btn svelte-awis0l"),u(z,"class","qa-btn svelte-awis0l"),u(J,"class","qa-btn svelte-awis0l"),J.disabled=!0,u(J,"title","Следующий этап"),u(U,"class","qa-btn svelte-awis0l"),u(L,"class","quick-actions svelte-awis0l"),u(e,"class","overview svelte-awis0l")},m(k,q){C(k,e,q),a(e,t),a(t,s),a(e,o),a(e,i),a(i,r),a(r,c),a(r,f),a(f,m),a(i,p),a(i,h),a(h,w),a(h,b),a(b,M),a(i,A),a(i,O),a(O,I),a(O,D),a(D,N),a(e,F),a(e,L),a(L,K),a(L,V),a(L,z),a(L,x),a(L,J),a(L,X),a(L,U),a(e,ee),R&&R.m(e,null),a(e,Z),P&&P.m(e,null),te||(G=[B(K,"click",l[53]),B(z,"click",l[54]),B(U,"click",l[55])],te=!0)},p(k,q){q[0]&32&&n!==(n=k[5].title+"")&&H(s,n),q[0]&32&&d!==(d=k[5].type+"")&&H(m,d),q[0]&32&&v!==(v=(k[5].section||"—")+"")&&H(M,v),q[0]&32&&T!==(T=re(k[5].createdAt)+"")&&H(N,T),k[7].length>0?R?R.p(k,q):(R=mt(k),R.c(),R.m(e,Z)):R&&(R.d(1),R=null),k[10].length>0?P?P.p(k,q):(P=vt(k),P.c(),P.m(e,null)):P&&(P.d(1),P=null)},i:j,o:j,d(k){k&&y(e),R&&R.d(),P&&P.d(),te=!1,ne(G)}}}function Zl(l){let e,t=Q(l[10]),n=[];for(let s=0;sЗаписей работы пока нет',u(e,"class","empty-state svelte-awis0l")},m(t,n){C(t,e,n)},p:j,d(t){t&&y(e)}}}function at(l){let e,t,n=l[83].summary+"",s,o,i,r=l[83].minutes+"",c,f,d=re(l[83].createdAt)+"",m,p;return{c(){e=_("div"),t=_("div"),s=E(n),o=S(),i=_("div"),c=E(r),f=E(" мин · "),m=E(d),p=S(),u(t,"class","svelte-awis0l"),u(i,"class","wl-meta svelte-awis0l"),u(e,"class","worklog-entry svelte-awis0l")},m(h,w){C(h,e,w),a(e,t),a(t,s),a(e,o),a(e,i),a(i,c),a(i,f),a(i,m),a(e,p)},p(h,w){w[0]&1024&&n!==(n=h[83].summary+"")&&H(s,n),w[0]&1024&&r!==(r=h[83].minutes+"")&&H(c,r),w[0]&1024&&d!==(d=re(h[83].createdAt)+"")&&H(m,d)},d(h){h&&y(e)}}}function xl(l){let e,t=Q(l[9]),n=[];for(let s=0;sДействий пока нет',u(e,"class","empty-state svelte-awis0l")},m(t,n){C(t,e,n)},p:j,d(t){t&&y(e)}}}function ft(l){let e,t,n=l[94].title+"",s,o,i=l[94].type+"",r,c,f,d,m,p;function h(){return l[65](l[94])}return{c(){e=_("div"),t=_("span"),s=E(n),o=_("span"),r=E(i),c=S(),f=_("button"),f.textContent="Запустить",d=S(),u(t,"class","svelte-awis0l"),u(o,"class","action-type svelte-awis0l"),u(f,"class","btn btn-sm svelte-awis0l"),u(e,"class","action-card svelte-awis0l")},m(w,b){C(w,e,b),a(e,t),a(t,s),a(e,o),a(o,r),a(e,c),a(e,f),a(e,d),m||(p=B(f,"click",h),m=!0)},p(w,b){l=w,b[0]&512&&n!==(n=l[94].title+"")&&H(s,n),b[0]&512&&i!==(i=l[94].type+"")&&H(r,i)},d(w){w&&y(e),m=!1,p()}}}function tn(l){let e,t=[],n=new Map,s,o=Q(l[22]);const i=r=>r[91].id;for(let r=0;rНет файловДобавьте документы, скриншоты или папку с материалами.
',u(e,"class","empty-state svelte-awis0l")},m(t,n){C(t,e,n)},p:j,i:j,o:j,d(t){t&&y(e)}}}function nn(l){let e;return{c(){e=_("div"),e.innerHTML='Загрузка...
',u(e,"class","empty-state svelte-awis0l")},m(t,n){C(t,e,n)},p:j,i:j,o:j,d(t){t&&y(e)}}}function ut(l,e){let t,n,s,o,i;function r(d){e[60](d)}function c(d){e[61](d)}let f={item:e[91]};return e[23]!==void 0&&(f.expanded=e[23]),e[24]!==void 0&&(f.childrenMap=e[24]),n=new Tt({props:f}),ge.push(()=>je(n,"expanded",r)),ge.push(()=>je(n,"childrenMap",c)),n.$on("delete",e[62]),n.$on("open",e[63]),n.$on("openFolder",e[64]),{key:l,first:null,c(){t=pe(),It(n.$$.fragment),this.first=t},m(d,m){C(d,t,m),Oe(n,d,m),i=!0},p(d,m){e=d;const p={};m[0]&4194304&&(p.item=e[91]),!s&&m[0]&8388608&&(s=!0,p.expanded=e[23],Re(()=>s=!1)),!o&&m[0]&16777216&&(o=!0,p.childrenMap=e[24],Re(()=>o=!1)),n.$set(p)},i(d){i||($(n.$$.fragment,d),i=!0)},o(d){ie(n.$$.fragment,d),i=!1},d(d){d&&y(t),Ie(n,d)}}}function dt(l){let e;return{c(){e=_("div"),e.innerHTML='Сканирование...
',u(e,"class","empty-state svelte-awis0l")},m(t,n){C(t,e,n)},d(t){t&&y(e)}}}function _t(l){let e,t,n,s,o,i,r,c,f;return{c(){e=_("div"),t=_("input"),n=S(),s=_("div"),o=_("button"),o.textContent="Создать",i=S(),r=_("button"),r.textContent="Отмена",u(t,"type","text"),u(t,"placeholder","Название заметки"),u(t,"class","svelte-awis0l"),u(o,"class","btn btn-primary svelte-awis0l"),u(r,"class","btn svelte-awis0l"),u(s,"class","form-actions svelte-awis0l"),u(e,"class","create-form svelte-awis0l")},m(d,m){C(d,e,m),a(e,t),se(t,l[17]),a(e,n),a(e,s),a(s,o),a(s,i),a(s,r),c||(f=[B(t,"input",l[57]),B(t,"keydown",l[58]),B(o,"click",l[35]),B(r,"click",l[34])],c=!0)},p(d,m){m[0]&131072&&t.value!==d[17]&&se(t,d[17])},d(d){d&&y(e),c=!1,ne(f)}}}function sn(l){let e,t=Q(l[7]),n=[];for(let s=0;sНет заметокСоздайте первую заметку для этого дела.
',u(e,"class","empty-state svelte-awis0l")},m(t,n){C(t,e,n)},p:j,d(t){t&&y(e)}}}function pt(l){let e,t,n=l[86].title+"",s,o,i,r=re(l[86].createdAt)+"",c,f,d,m;function p(){return l[59](l[86])}return{c(){e=_("div"),t=_("div"),s=E(n),o=S(),i=_("div"),c=E(r),f=S(),u(t,"class","note-card-title svelte-awis0l"),u(i,"class","note-card-date svelte-awis0l"),u(e,"class","note-card svelte-awis0l")},m(h,w){C(h,e,w),a(e,t),a(t,s),a(e,o),a(e,i),a(i,c),a(e,f),d||(m=B(e,"click",p),d=!0)},p(h,w){l=h,w[0]&128&&n!==(n=l[86].title+"")&&H(s,n),w[0]&128&&r!==(r=re(l[86].createdAt)+"")&&H(c,r)},d(h){h&&y(e),d=!1,m()}}}function mt(l){let e,t,n,s=Q(l[7].slice(0,5)),o=[];for(let i=0;il[70].call(h)),u(d,"class","form-group svelte-awis0l"),u(v,"class","btn btn-primary svelte-awis0l"),u(A,"class","btn svelte-awis0l"),u(b,"class","modal-actions svelte-awis0l"),u(t,"class","modal svelte-awis0l"),u(e,"class","modal-overlay svelte-awis0l")},m(N,F){C(N,e,F),a(e,t),a(t,n),a(t,s),a(t,o),a(o,i),a(o,r),a(o,c),se(c,l[14]),a(t,f),a(t,d),a(d,m),a(d,p),a(d,h);for(let L=0;L⚒ Верстак ',s=S(),o=_("nav"),i=_("div"),r=_("div"),r.textContent="Разделы",c=S();for(let k=0;k{Z[ce]=null}),he(),D=Z[I],D?D.p(k,q):(D=Z[I]=ee[I](k),D.c()),$(D,1),D.m(b,T)),!k[8]&&!k[5]?G?G.p(k,q):(G=gt(k),G.c(),G.m(b,N)):G&&(G.d(1),G=null),k[13]?R?R.p(k,q):(R=kt(k),R.c(),R.m(b,F)):R&&(R.d(1),R=null),k[21]&&k[20]?P?P.p(k,q):(P=Ct(k),P.c(),P.m(b,null)):P&&(P.d(1),P=null)},i(k){L||($(D),L=!0)},o(k){ie(D),L=!1},d(k){k&&y(e),oe(V,k),z&&z.d(),X.d(),U&&U.d(),Z[I].d(),G&&G.d(),R&&R.d(),P&&P.d()}}}function Y(l,...e){try{if(window.go&&window.go.main&&window.go.main.App){const t=window.go.main.App[l];if(typeof t=="function")return t(...e)}}catch(t){console.error("Wails call error:",l,t)}return Promise.reject(new Error("Wails not connected: "+l))}function re(l){if(!l)return"";try{return new Date(l).toLocaleDateString("ru-RU",{day:"numeric",month:"short"})}catch{return l}}const St=l=>l.id!=="today"&&l.id!=="inbox";function rn(l,e,t){let n=[],s=[],o="",i="",r="",c=null,f="overview",d=[],m=null,p=[],h=[],w=[],b="",v="",M=!1,A="",O="clients",I=!1,D="",T=!0,N=!1,F=null,L=!1,K="",V=[],z={},x={},J=!1;const X=[{id:"overview",label:"Обзор"},{id:"notes",label:"Заметки"},{id:"files",label:"Файлы"},{id:"actions",label:"Действия"},{id:"worklog",label:"Журнал"},{id:"activity",label:"Активность"}];let U=null;gl(async()=>{try{t(2,o=await Y("VerstakVersion")||"verstak-gui/v2"),t(0,n=await Y("ListSections")||[])}catch(g){t(3,i=String(g)),t(0,n=[{id:"today",label:"Сегодня"},{id:"inbox",label:"Неразобранное"},{id:"clients",label:"Клиенты"},{id:"projects",label:"Проекты"},{id:"recipes",label:"Рецепты"},{id:"documents",label:"Документы"},{id:"archive",label:"Архив"}])}window.runtime&&window.runtime.EventsOn&&(window.runtime.EventsOn("files-dropped",Wt),U=()=>window.runtime.EventsOff("files-dropped")),t(18,T=!1)}),kl(()=>{U&&U()});async function ee(g){t(4,r=g),t(5,c=null),t(6,f="overview"),t(7,d=[]),p=[],t(9,h=[]),t(10,w=[]),t(13,M=!1),t(3,i="");try{t(1,s=await Y("ListNodesBySection",g)||[])}catch(W){t(3,i=String(W)),t(1,s=[])}}async function Z(g){t(5,c=g),t(6,f="overview"),t(7,d=[]),p=[],t(9,h=[]),t(10,w=[]),t(22,V=[]),t(23,z={}),t(24,x={}),t(8,m=null),t(13,M=!1),t(16,I=!1),t(3,i=""),await te(g.id)}async function te(g){try{t(7,d=await Y("ListNotes",g)||[])}catch{}try{p=await Y("ListFiles",g)||[]}catch{}try{t(9,h=await Y("ListActions",g)||[])}catch{}try{t(10,w=await Y("ListWorklog",g)||[])}catch{}}async function G(g){t(25,J=!0);try{t(22,V=await Y("ListItems",g)||[])}catch{t(22,V=[])}t(25,J=!1)}function R(){t(13,M=!0),t(14,A=""),t(15,O=r||"clients")}function P(){t(13,M=!1),t(14,A="")}async function k(){if(A.trim())try{const g=await Y("CreateNode","","case",A.trim(),O);t(13,M=!1),t(14,A=""),await ee(O)}catch(g){t(3,i=String(g))}}function q(){t(16,I=!0),t(17,D="")}function ce(){t(16,I=!1),t(17,D="")}async function le(){if(!(!D.trim()||!c))try{const g=await Y("CreateNote",c.id,D.trim());t(7,d=[...d,g&&g.id?g:{id:Date.now().toString(),title:D.trim(),createdAt:new Date().toISOString()}]),t(16,I=!1),t(17,D="")}catch{const W={id:Date.now().toString(),title:D.trim(),createdAt:new Date().toISOString()};t(7,d=[...d,W]),t(16,I=!1),t(17,D="")}}async function fe(g){if(!(m&&m.dirty&&!confirm("Несохранённые изменения. Закрыть?")))try{const W=await Y("ReadNote",g.id);t(8,m={id:g.id,title:g.title,content:W||"",dirty:!1})}catch{t(8,m={id:g.id,title:g.title,content:"# "+g.title+`
+
+`,dirty:!1})}}function Bt(){m&&m.dirty&&!confirm("Несохранённые изменения. Закрыть?")||t(8,m=null)}function Ht(g){m&&(t(8,m.content=g.target.value,m),t(8,m.dirty=!0,m))}async function qt(){if(m)try{await Y("SaveNote",m.id,m.content),t(8,m.dirty=!1,m)}catch{t(8,m.dirty=!1,m)}}async function Rt(){const g=parseInt(b,10);if(!(!v.trim()||isNaN(g)||g<=0||!c)){try{const W=await Y("CreateWorklog",c.id,v.trim(),g);t(10,w=[...w,W&&W.id?W:{id:Date.now().toString(),nodeId:c.id,summary:v.trim(),minutes:g,createdAt:new Date().toISOString()}])}catch{t(10,w=[...w,{id:Date.now().toString(),nodeId:c.id,summary:v.trim(),minutes:g,createdAt:new Date().toISOString()}])}t(12,v=""),t(11,b="")}}async function De(){const g=await Y("PickFile");g&&await ye(c.id,g)}async function jt(){const g=await Y("PickDirectory");g&&await ye(c.id,g)}async function ye(g,W){t(19,N=!0);try{const Ne=await Y("PreviewImport",W);t(20,F=Ne),K=W,t(21,L=!0)}catch(Ne){t(3,i=String(Ne))}t(19,N=!1)}async function Ce(g){try{const W=g==="copy"?await Y("AddPathCopy",c.id,K):await Y("AddPathLink",c.id,K);t(21,L=!1),t(20,F=null),t(23,z={}),t(24,x={}),await Promise.all([te(c.id),G(c.id)])}catch(W){t(3,i=String(W))}}function zt(){t(21,L=!1),t(20,F=null)}async function Pe(g){if(confirm("Удалить файл?"))try{await Y("DeleteFileOrFolder",g),p=p.filter(W=>W.nodeId!==g),t(23,z={}),t(24,x={}),await G(c.id)}catch(W){t(3,i=String(W))}}async function Te(g){try{await Y("OpenFile",g)}catch(W){t(3,i=String(W))}}async function Wt(g){if(!g||g.length===0)return;if(!c){t(3,i="Сначала выберите дело для добавления файлов");return}const W=g[0];await ye(c.id,W)}function Kt(g){return f===g?"tab active":"tab"}const Vt=g=>ee(g.id),Ut=g=>Z(g),Gt=()=>t(3,i="");function Jt(){m.content=this.value,t(8,m)}const Qt=g=>{t(6,f=g.id),g.id==="files"&&c&&V.length===0&&G(c.id)},Xt=()=>{t(6,f="notes"),q()},Yt=()=>{t(6,f="files"),De()},Zt=()=>t(6,f="worklog"),$t=g=>fe(g);function xt(){D=this.value,t(17,D)}const el=g=>g.key==="Enter"&&le(),tl=g=>fe(g);function ll(g){z=g,t(23,z)}function nl(g){x=g,t(24,x)}const il=g=>Pe(g.detail),sl=g=>Te(g.detail),ol=g=>console.log("open folder",g.detail),cl=g=>Y("RunAction",g.id);function rl(){v=this.value,t(12,v)}function al(){b=Ft(this.value),t(11,b)}function fl(){A=this.value,t(14,A)}const ul=g=>g.key==="Enter"&&k();function dl(){O=bl(this),t(15,O),t(0,n)}return[n,s,o,i,r,c,f,d,m,h,w,b,v,M,A,O,I,D,T,N,F,L,V,z,x,J,X,ee,Z,G,R,P,k,q,ce,le,fe,Bt,Ht,qt,Rt,De,jt,Ce,zt,Pe,Te,Kt,Vt,Ut,Gt,Jt,Qt,Xt,Yt,Zt,$t,xt,el,tl,ll,nl,il,sl,ol,cl,rl,al,fl,ul,dl,()=>Ce("copy"),()=>Ce("link")]}class an extends Pt{constructor(e){super(),Dt(this,e,rn,cn,Lt,{},null,[-1,-1,-1,-1])}}new an({target:document.getElementById("app")});
diff --git a/cmd/verstak-gui/frontend-dist/assets/main-D8LYjC_e.css b/cmd/verstak-gui/frontend-dist/assets/main-D8LYjC_e.css
deleted file mode 100644
index 349b8d9..0000000
--- a/cmd/verstak-gui/frontend-dist/assets/main-D8LYjC_e.css
+++ /dev/null
@@ -1 +0,0 @@
-.svelte-1n16qmf.svelte-1n16qmf,.svelte-1n16qmf.svelte-1n16qmf:before,.svelte-1n16qmf.svelte-1n16qmf:after{box-sizing:border-box;margin:0;padding:0}.app.svelte-1n16qmf.svelte-1n16qmf{display:flex;width:100vw;height:100vh;overflow:hidden;background:#13131f;color:#e4e4ef;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;font-size:14px}.sidebar.svelte-1n16qmf.svelte-1n16qmf{width:260px;min-width:200px;height:100vh;display:flex;flex-direction:column;background:#1a1a28;border-right:1px solid #2a2a3c;flex-shrink:0;overflow:hidden}.sidebar-brand.svelte-1n16qmf.svelte-1n16qmf{padding:16px 20px;display:flex;align-items:center;gap:10px;border-bottom:1px solid #2a2a3c;flex-shrink:0}.logo.svelte-1n16qmf.svelte-1n16qmf{font-size:20px;line-height:1}.brand-name.svelte-1n16qmf.svelte-1n16qmf{font-size:16px;font-weight:600}.sidebar-nav.svelte-1n16qmf.svelte-1n16qmf{flex:1;overflow-y:auto;padding:12px 0}.nav-group.svelte-1n16qmf.svelte-1n16qmf{margin-bottom:16px}.nav-label.svelte-1n16qmf.svelte-1n16qmf{font-size:10px;text-transform:uppercase;letter-spacing:.5px;color:#666;padding:4px 20px;margin-bottom:4px}.nav-item.svelte-1n16qmf.svelte-1n16qmf{display:block;width:100%;padding:8px 20px;border:none;background:none;color:#ccc;font-size:13px;text-align:left;cursor:pointer;border-radius:0;font-family:inherit}.nav-item.svelte-1n16qmf.svelte-1n16qmf:hover{background:#223}.nav-item.selected.svelte-1n16qmf.svelte-1n16qmf{background:#2a2a4a;color:#fff;font-weight:500}.nav-empty.svelte-1n16qmf.svelte-1n16qmf{padding:8px 20px;color:#555;font-size:12px}.sidebar-footer.svelte-1n16qmf.svelte-1n16qmf{padding:12px 20px;border-top:1px solid #2a2a3c;flex-shrink:0}.version.svelte-1n16qmf.svelte-1n16qmf{font-size:11px;color:#555}.main.svelte-1n16qmf.svelte-1n16qmf{flex:1;display:flex;flex-direction:column;height:100vh;min-width:0;overflow:hidden;background:#13131f}.header.svelte-1n16qmf.svelte-1n16qmf{padding:12px 24px;border-bottom:1px solid #2a2a3c;display:flex;align-items:center;flex-shrink:0;min-height:48px}.crumb.svelte-1n16qmf.svelte-1n16qmf{font-size:14px;font-weight:500}.crumb.placeholder.svelte-1n16qmf.svelte-1n16qmf{color:#666}.crumb-type.svelte-1n16qmf.svelte-1n16qmf{font-size:11px;color:#555;background:#1e1e2e;padding:2px 8px;border-radius:10px;margin-left:8px}.error-banner.svelte-1n16qmf.svelte-1n16qmf{background:#3a2222;color:#f88;padding:8px 24px;font-size:12px;border-bottom:1px solid #4a2222;flex-shrink:0;cursor:pointer;display:flex;justify-content:space-between}.dismiss.svelte-1n16qmf.svelte-1n16qmf{opacity:.6}.tabs.svelte-1n16qmf.svelte-1n16qmf{display:flex;border-bottom:1px solid #2a2a3c;flex-shrink:0;padding:0 24px}.tab.svelte-1n16qmf.svelte-1n16qmf{padding:10px 16px;border:none;background:none;color:#888;font-size:13px;cursor:pointer;border-bottom:2px solid transparent;font-family:inherit}.tab.svelte-1n16qmf.svelte-1n16qmf:hover{color:#ccc}.tab.active.svelte-1n16qmf.svelte-1n16qmf{color:#e4e4ef;border-bottom-color:#6366f1}.tab-content.svelte-1n16qmf.svelte-1n16qmf{flex:1;overflow-y:auto}.note-editor.svelte-1n16qmf.svelte-1n16qmf{flex:1;display:flex;flex-direction:column;height:100%}.note-editor-header.svelte-1n16qmf.svelte-1n16qmf{padding:12px 24px;border-bottom:1px solid #2a2a3c;display:flex;align-items:center;gap:12px;flex-shrink:0}.note-title.svelte-1n16qmf.svelte-1n16qmf{font-size:16px;font-weight:500}.dirty-mark.svelte-1n16qmf.svelte-1n16qmf{color:#f59e0b;font-size:10px}.note-editor-actions.svelte-1n16qmf.svelte-1n16qmf{margin-left:auto;display:flex;gap:8px}.note-textarea.svelte-1n16qmf.svelte-1n16qmf{flex:1;width:100%;border:none;outline:none;background:#13131f;color:#e4e4ef;font-family:SF Mono,Fira Code,monospace;font-size:14px;line-height:1.6;padding:24px;resize:none}.overview.svelte-1n16qmf.svelte-1n16qmf{padding:24px}.overview.svelte-1n16qmf h2.svelte-1n16qmf{font-size:24px;margin-bottom:16px}.meta-grid.svelte-1n16qmf.svelte-1n16qmf{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:12px;margin-bottom:24px}.meta-item.svelte-1n16qmf.svelte-1n16qmf{background:#1a1a28;padding:12px 16px;border-radius:8px}.meta-label.svelte-1n16qmf.svelte-1n16qmf{display:block;font-size:11px;color:#666;margin-bottom:4px;text-transform:uppercase}.quick-actions.svelte-1n16qmf.svelte-1n16qmf{display:flex;gap:8px;margin-bottom:24px;flex-wrap:wrap}.qa-btn.svelte-1n16qmf.svelte-1n16qmf{padding:10px 16px;border:1px solid #2a2a3c;background:#1a1a28;color:#ccc;border-radius:8px;cursor:pointer;font-size:13px;font-family:inherit}.qa-btn.svelte-1n16qmf.svelte-1n16qmf:hover{background:#223}.qa-btn.svelte-1n16qmf.svelte-1n16qmf:disabled{opacity:.4;cursor:not-allowed}.recent-section.svelte-1n16qmf.svelte-1n16qmf{margin-bottom:24px}.recent-section.svelte-1n16qmf h3.svelte-1n16qmf{font-size:13px;color:#666;text-transform:uppercase;margin-bottom:8px}.recent-note.svelte-1n16qmf.svelte-1n16qmf{padding:8px 12px;border-radius:6px;cursor:pointer;display:flex;justify-content:space-between}.recent-note.svelte-1n16qmf.svelte-1n16qmf:hover{background:#1a1a28}.recent-date.svelte-1n16qmf.svelte-1n16qmf{font-size:11px;color:#555}.recent-entry.svelte-1n16qmf.svelte-1n16qmf{padding:6px 0;font-size:13px;color:#888;border-bottom:1px solid #1a1a28}.notes-tab.svelte-1n16qmf.svelte-1n16qmf{padding:24px}.tab-toolbar.svelte-1n16qmf.svelte-1n16qmf{margin-bottom:16px}.create-form.svelte-1n16qmf.svelte-1n16qmf{background:#1a1a28;padding:16px;border-radius:8px;margin-bottom:16px}.create-form.svelte-1n16qmf input.svelte-1n16qmf{width:100%;padding:8px 12px;border:1px solid #2a2a3c;background:#13131f;color:#e4e4ef;border-radius:4px;font-size:14px;font-family:inherit;margin-bottom:8px}.create-form.svelte-1n16qmf input.svelte-1n16qmf:focus{outline:none;border-color:#6366f1}.form-actions.svelte-1n16qmf.svelte-1n16qmf{display:flex;gap:8px}.notes-list.svelte-1n16qmf.svelte-1n16qmf{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:12px}.note-card.svelte-1n16qmf.svelte-1n16qmf{background:#1a1a28;border:1px solid #2a2a3c;border-radius:8px;padding:16px;cursor:pointer}.note-card.svelte-1n16qmf.svelte-1n16qmf:hover{border-color:#3a3a5c}.note-card-title.svelte-1n16qmf.svelte-1n16qmf{font-size:14px;font-weight:500;margin-bottom:4px}.note-card-date.svelte-1n16qmf.svelte-1n16qmf{font-size:11px;color:#555}.worklog-tab.svelte-1n16qmf.svelte-1n16qmf{padding:24px}.worklog-form.svelte-1n16qmf.svelte-1n16qmf{display:flex;gap:8px;margin-bottom:24px;align-items:center}.worklog-form.svelte-1n16qmf input.svelte-1n16qmf{padding:8px 12px;border:1px solid #2a2a3c;background:#13131f;color:#e4e4ef;border-radius:4px;font-size:14px;font-family:inherit}.worklog-form.svelte-1n16qmf input.svelte-1n16qmf:focus{outline:none;border-color:#6366f1}.worklog-form.svelte-1n16qmf input[type=text].svelte-1n16qmf{flex:1}.worklog-form.svelte-1n16qmf input[type=number].svelte-1n16qmf{width:70px}.worklog-entry.svelte-1n16qmf.svelte-1n16qmf{padding:12px 0;border-bottom:1px solid #1a1a28}.wl-meta.svelte-1n16qmf.svelte-1n16qmf{font-size:11px;color:#555;margin-top:2px}.action-card.svelte-1n16qmf.svelte-1n16qmf{background:#1a1a28;padding:12px 16px;border-radius:8px;display:flex;align-items:center;gap:12px;margin-bottom:8px}.action-type.svelte-1n16qmf.svelte-1n16qmf{font-size:11px;color:#888;background:#223;padding:2px 8px;border-radius:10px}.empty-state.svelte-1n16qmf.svelte-1n16qmf{padding:48px 24px;text-align:center}.empty-state.svelte-1n16qmf p.svelte-1n16qmf{color:#666;margin-bottom:8px}.hint.svelte-1n16qmf.svelte-1n16qmf{font-size:13px;color:#555}.empty-actions.svelte-1n16qmf.svelte-1n16qmf{display:flex;gap:8px;justify-content:center;margin:16px 0}.empty-note.svelte-1n16qmf.svelte-1n16qmf{font-size:12px;color:#444;margin-top:16px}.welcome.svelte-1n16qmf.svelte-1n16qmf{padding:48px 24px;text-align:center}.welcome.svelte-1n16qmf h2.svelte-1n16qmf{font-size:32px;font-weight:300;color:#8888a4;margin-bottom:16px}.welcome.svelte-1n16qmf p.svelte-1n16qmf{color:#666;font-size:14px}.error-text.svelte-1n16qmf.svelte-1n16qmf{color:#f88}.fab.svelte-1n16qmf.svelte-1n16qmf{position:fixed;bottom:24px;right:24px;width:56px;height:56px;border-radius:50%;background:#6366f1;color:#fff;font-size:28px;display:flex;align-items:center;justify-content:center;cursor:pointer;box-shadow:0 4px 12px #6366f166}.fab.svelte-1n16qmf.svelte-1n16qmf:hover{background:#4f46e5}.modal-overlay.svelte-1n16qmf.svelte-1n16qmf{position:fixed;top:0;right:0;bottom:0;left:0;background:#0009;display:flex;align-items:center;justify-content:center;z-index:100}.modal.svelte-1n16qmf.svelte-1n16qmf{background:#1a1a28;border:1px solid #2a2a3c;border-radius:12px;padding:24px;width:400px;max-width:90vw}.modal.svelte-1n16qmf h3.svelte-1n16qmf{font-size:18px;margin-bottom:16px}.form-group.svelte-1n16qmf.svelte-1n16qmf{margin-bottom:12px}.form-group.svelte-1n16qmf label.svelte-1n16qmf{display:block;font-size:12px;color:#666;margin-bottom:4px}.form-group.svelte-1n16qmf input.svelte-1n16qmf,.form-group.svelte-1n16qmf select.svelte-1n16qmf{width:100%;padding:8px 12px;border:1px solid #2a2a3c;background:#13131f;color:#e4e4ef;border-radius:4px;font-size:14px;font-family:inherit}.form-group.svelte-1n16qmf select.svelte-1n16qmf{-moz-appearance:none;appearance:none;-webkit-appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%23888' d='M2 4l4 4 4-4'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 10px center;padding-right:32px}.form-group.svelte-1n16qmf input.svelte-1n16qmf:focus,.form-group.svelte-1n16qmf select.svelte-1n16qmf:focus{outline:none;border-color:#6366f1}.modal-actions.svelte-1n16qmf.svelte-1n16qmf{display:flex;gap:8px;justify-content:flex-end;margin-top:16px}.btn.svelte-1n16qmf.svelte-1n16qmf{padding:8px 16px;border:1px solid #2a2a3c;background:#1a1a28;color:#ccc;border-radius:6px;cursor:pointer;font-size:13px;font-family:inherit}.btn.svelte-1n16qmf.svelte-1n16qmf:hover{background:#223}.btn-primary.svelte-1n16qmf.svelte-1n16qmf{background:#6366f1;border-color:#6366f1;color:#fff}.btn-primary.svelte-1n16qmf.svelte-1n16qmf:hover{background:#4f46e5}.btn.svelte-1n16qmf.svelte-1n16qmf:disabled{opacity:.4;cursor:not-allowed}.btn-sm.svelte-1n16qmf.svelte-1n16qmf{padding:4px 10px;font-size:12px}
diff --git a/cmd/verstak-gui/frontend-dist/assets/main-DMZ01wSM.js b/cmd/verstak-gui/frontend-dist/assets/main-DMZ01wSM.js
new file mode 100644
index 0000000..05f3633
--- /dev/null
+++ b/cmd/verstak-gui/frontend-dist/assets/main-DMZ01wSM.js
@@ -0,0 +1,3 @@
+var Yl=Object.defineProperty;var Ql=(n,e,t)=>e in n?Yl(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t;var De=(n,e,t)=>Ql(n,typeof e!="symbol"?e+"":e,t);(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const i of document.querySelectorAll('link[rel="modulepreload"]'))l(i);new MutationObserver(i=>{for(const s of i)if(s.type==="childList")for(const r of s.addedNodes)r.tagName==="LINK"&&r.rel==="modulepreload"&&l(r)}).observe(document,{childList:!0,subtree:!0});function t(i){const s={};return i.integrity&&(s.integrity=i.integrity),i.referrerPolicy&&(s.referrerPolicy=i.referrerPolicy),i.crossOrigin==="use-credentials"?s.credentials="include":i.crossOrigin==="anonymous"?s.credentials="omit":s.credentials="same-origin",s}function l(i){if(i.ep)return;i.ep=!0;const s=t(i);fetch(i.href,s)}})();function K(){}function Ut(n){return n()}function tt(){return Object.create(null)}function se(n){n.forEach(Ut)}function Zt(n){return typeof n=="function"}function Me(n,e){return n!=n?e==e:n!==e||n&&typeof n=="object"||typeof n=="function"}let Le;function Ie(n,e){return n===e?!0:(Le||(Le=document.createElement("a")),Le.href=e,n===Le.href)}function xl(n){return Object.keys(n).length===0}function $l(n){return n??""}function a(n,e){n.appendChild(e)}function k(n,e,t){n.insertBefore(e,t||null)}function m(n){n.parentNode&&n.parentNode.removeChild(n)}function ue(n,e){for(let t=0;tn.removeEventListener(e,t,l)}function pe(n){return function(e){return e.stopPropagation(),n.call(this,e)}}function We(n){return function(e){e.target===this&&n.call(this,e)}}function o(n,e,t){t==null?n.removeAttribute(e):n.getAttribute(e)!==t&&n.setAttribute(e,t)}function Xt(n){return n===""?null:+n}function en(n){return Array.from(n.childNodes)}function G(n,e){e=""+e,n.data!==e&&(n.data=e)}function ce(n,e){n.value=e??""}function lt(n,e,t){for(let l=0;l{const i=n.$$.callbacks[e];if(i){const s=ln(e,t,{cancelable:l});return i.slice().forEach(r=>{r.call(n,s)}),!s.defaultPrevented}return!0}}function nn(n,e){const t=n.$$.callbacks[e.type];t&&t.slice().forEach(l=>l.call(this,e))}const we=[],nt=[];let ge=[];const it=[],sn=Promise.resolve();let Ve=!1;function rn(){Ve||(Ve=!0,sn.then(xt))}function Pe(n){ge.push(n)}const He=new Set;let he=0;function xt(){if(he!==0)return;const n=Ce;do{try{for(;hen.indexOf(l)===-1?e.push(l):t.push(l)),t.forEach(l=>l()),ge=e}const Fe=new Set;let de;function _e(){de={r:0,c:[],p:de}}function me(){de.r||se(de.c),de=de.p}function ne(n,e){n&&n.i&&(Fe.delete(n),n.i(e))}function ie(n,e,t,l){if(n&&n.o){if(Fe.has(n))return;Fe.add(n),de.c.push(()=>{Fe.delete(n),l&&(t&&n.d(1),l())}),n.o(e)}else l&&l()}function te(n){return(n==null?void 0:n.length)!==void 0?n:Array.from(n)}function un(n,e){ie(n,1,1,()=>{e.delete(n.key)})}function an(n,e,t,l,i,s,r,c,u,d,_,b){let p=n.length,v=s.length,w=p;const g={};for(;w--;)g[n[w].key]=w;const y=[],N=new Map,B=new Map,R=[];for(w=v;w--;){const L=b(i,s,w),P=t(L);let C=r.get(P);C?R.push(()=>C.p(L,e)):(C=d(P,L),C.c()),N.set(P,y[w]=C),P in g&&B.set(P,Math.abs(w-g[P]))}const S=new Set,A=new Set;function T(L){ne(L,1),L.m(c,_),r.set(L.key,L),_=L.first,v--}for(;p&&v;){const L=y[v-1],P=n[p-1],C=L.key,E=P.key;L===P?(_=L.first,p--,v--):N.has(E)?!r.has(C)||S.has(C)?T(L):A.has(E)?p--:B.get(C)>B.get(E)?(A.add(C),T(L)):(S.add(E),p--):(u(P,r),p--)}for(;p--;){const L=n[p];N.has(L.key)||u(L,r)}for(;v;)T(y[v-1]);return se(R),y}function ye(n){n&&n.c()}function ve(n,e,t){const{fragment:l,after_update:i}=n.$$;l&&l.m(e,t),Pe(()=>{const s=n.$$.on_mount.map(Ut).filter(Zt);n.$$.on_destroy?n.$$.on_destroy.push(...s):se(s),n.$$.on_mount=[]}),i.forEach(Pe)}function ke(n,e){const t=n.$$;t.fragment!==null&&(cn(t.after_update),se(t.on_destroy),t.fragment&&t.fragment.d(e),t.on_destroy=t.fragment=null,t.ctx=[])}function fn(n,e){n.$$.dirty[0]===-1&&(we.push(n),rn(),n.$$.dirty.fill(0)),n.$$.dirty[e/31|0]|=1<{const w=v.length?v[0]:p;return d.ctx&&i(d.ctx[b],d.ctx[b]=w)&&(!d.skip_bound&&d.bound[b]&&d.bound[b](w),_&&fn(n,b)),p}):[],d.update(),_=!0,se(d.before_update),d.fragment=l?l(d.ctx):!1,e.target){if(e.hydrate){const b=en(e.target);d.fragment&&d.fragment.l(b),b.forEach(m)}else d.fragment&&d.fragment.c();e.intro&&ne(n.$$.fragment),ve(n,e.target,e.anchor),xt()}je(u)}class Se{constructor(){De(this,"$$");De(this,"$$set")}$destroy(){ke(this,1),this.$destroy=K}$on(e,t){if(!Zt(t))return K;const l=this.$$.callbacks[e]||(this.$$.callbacks[e]=[]);return l.push(t),()=>{const i=l.indexOf(t);i!==-1&&l.splice(i,1)}}$set(e){this.$$set&&!xl(e)&&(this.$$.skip_bound=!0,this.$$set(e),this.$$.skip_bound=!1)}}const dn="4";typeof window<"u"&&(window.__svelte||(window.__svelte={v:new Set})).v.add(dn);function pn(n){let e,t;return{c(){e=W("path"),t=W("polyline"),o(e,"d","M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"),o(t,"points","14 2 14 8 20 8")},m(l,i){k(l,e,i),k(l,t,i)},d(l){l&&(m(e),m(t))}}}function _n(n){let e,t,l,i,s;return{c(){e=W("path"),t=W("polyline"),l=W("line"),i=W("line"),s=W("polyline"),o(e,"d","M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"),o(t,"points","14 2 14 8 20 8"),o(l,"x1","16"),o(l,"y1","13"),o(l,"x2","8"),o(l,"y2","13"),o(i,"x1","16"),o(i,"y1","17"),o(i,"x2","8"),o(i,"y2","17"),o(s,"points","10 9 9 9 8 9")},m(r,c){k(r,e,c),k(r,t,c),k(r,l,c),k(r,i,c),k(r,s,c)},d(r){r&&(m(e),m(t),m(l),m(i),m(s))}}}function mn(n){let e,t;return{c(){e=W("polyline"),t=W("polyline"),o(e,"points","16 18 22 12 16 6"),o(t,"points","8 6 2 12 8 18")},m(l,i){k(l,e,i),k(l,t,i)},d(l){l&&(m(e),m(t))}}}function vn(n){let e,t,l,i;return{c(){e=W("path"),t=W("polyline"),l=W("line"),i=W("rect"),o(e,"d","M21 8v13a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8"),o(t,"points","7 3 12 8 17 3"),o(l,"x1","3"),o(l,"y1","8"),o(l,"x2","21"),o(l,"y2","8"),o(i,"x","10"),o(i,"y","12"),o(i,"width","4"),o(i,"height","4"),o(i,"rx","1")},m(s,r){k(s,e,r),k(s,t,r),k(s,l,r),k(s,i,r)},d(s){s&&(m(e),m(t),m(l),m(i))}}}function kn(n){let e,t,l,i,s;return{c(){e=W("path"),t=W("polyline"),l=W("line"),i=W("line"),s=W("line"),o(e,"d","M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"),o(t,"points","14 2 14 8 20 8"),o(l,"x1","9"),o(l,"y1","12"),o(l,"x2","15"),o(l,"y2","12"),o(i,"x1","9"),o(i,"y1","15"),o(i,"x2","13"),o(i,"y2","15"),o(s,"x1","12"),o(s,"y1","15"),o(s,"x2","12"),o(s,"y2","18")},m(r,c){k(r,e,c),k(r,t,c),k(r,l,c),k(r,i,c),k(r,s,c)},d(r){r&&(m(e),m(t),m(l),m(i),m(s))}}}function bn(n){let e,t,l,i,s,r;return{c(){e=W("path"),t=W("polyline"),l=W("line"),i=W("line"),s=W("line"),r=W("line"),o(e,"d","M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"),o(t,"points","14 2 14 8 20 8"),o(l,"x1","8"),o(l,"y1","12"),o(l,"x2","16"),o(l,"y2","12"),o(i,"x1","8"),o(i,"y1","16"),o(i,"x2","16"),o(i,"y2","16"),o(s,"x1","8"),o(s,"y1","14"),o(s,"x2","12"),o(s,"y2","14"),o(r,"x1","12"),o(r,"y1","12"),o(r,"x2","12"),o(r,"y2","18")},m(c,u){k(c,e,u),k(c,t,u),k(c,l,u),k(c,i,u),k(c,s,u),k(c,r,u)},d(c){c&&(m(e),m(t),m(l),m(i),m(s),m(r))}}}function hn(n){let e,t,l,i;return{c(){e=W("path"),t=W("polyline"),l=W("line"),i=W("line"),o(e,"d","M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"),o(t,"points","14 2 14 8 20 8"),o(l,"x1","16"),o(l,"y1","13"),o(l,"x2","8"),o(l,"y2","13"),o(i,"x1","16"),o(i,"y1","17"),o(i,"x2","8"),o(i,"y2","17")},m(s,r){k(s,e,r),k(s,t,r),k(s,l,r),k(s,i,r)},d(s){s&&(m(e),m(t),m(l),m(i))}}}function wn(n){let e,t,l,i,s;return{c(){e=W("path"),t=W("polyline"),l=W("line"),i=W("line"),s=W("line"),o(e,"d","M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"),o(t,"points","14 2 14 8 20 8"),o(l,"x1","8"),o(l,"y1","12"),o(l,"x2","16"),o(l,"y2","12"),o(i,"x1","8"),o(i,"y1","16"),o(i,"x2","16"),o(i,"y2","16"),o(s,"x1","8"),o(s,"y1","14"),o(s,"x2","12"),o(s,"y2","14")},m(r,c){k(r,e,c),k(r,t,c),k(r,l,c),k(r,i,c),k(r,s,c)},d(r){r&&(m(e),m(t),m(l),m(i),m(s))}}}function gn(n){let e,t,l;return{c(){e=W("path"),t=W("circle"),l=W("circle"),o(e,"d","M9 18V5l12-2v13"),o(t,"cx","6"),o(t,"cy","18"),o(t,"r","3"),o(l,"cx","18"),o(l,"cy","16"),o(l,"r","3")},m(i,s){k(i,e,s),k(i,t,s),k(i,l,s)},d(i){i&&(m(e),m(t),m(l))}}}function yn(n){let e,t;return{c(){e=W("rect"),t=W("polyline"),o(e,"x","2"),o(e,"y","4"),o(e,"width","20"),o(e,"height","16"),o(e,"rx","2"),o(t,"points","10 9 16 12 10 15 10 9")},m(l,i){k(l,e,i),k(l,t,i)},d(l){l&&(m(e),m(t))}}}function jn(n){let e,t,l;return{c(){e=W("rect"),t=W("circle"),l=W("polyline"),o(e,"x","3"),o(e,"y","3"),o(e,"width","18"),o(e,"height","18"),o(e,"rx","2"),o(e,"ry","2"),o(t,"cx","8.5"),o(t,"cy","8.5"),o(t,"r","1.5"),o(l,"points","21 15 16 10 5 21")},m(i,s){k(i,e,s),k(i,t,s),k(i,l,s)},d(i){i&&(m(e),m(t),m(l))}}}function Cn(n){let e;return{c(){e=W("path"),o(e,"d","M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z")},m(t,l){k(t,e,l)},d(t){t&&m(e)}}}function Mn(n){let e;function t(s,r){return s[0]==="folder"?Cn:s[0]==="image"?jn:s[0]==="video"?yn:s[0]==="audio"?gn:s[0]==="pdf"?wn:s[0]==="document"?hn:s[0]==="spreadsheet"?bn:s[0]==="presentation"?kn:s[0]==="archive"?vn:s[0]==="code"?mn:s[0]==="text"?_n:pn}let l=t(n),i=l(n);return{c(){e=W("svg"),i.c(),o(e,"width",n[1]),o(e,"height",n[1]),o(e,"viewBox","0 0 24 24"),o(e,"fill","none"),o(e,"stroke","currentColor"),o(e,"stroke-width","1.5"),o(e,"stroke-linecap","round"),o(e,"stroke-linejoin","round"),o(e,"xmlns","http://www.w3.org/2000/svg")},m(s,r){k(s,e,r),i.m(e,null)},p(s,[r]){l!==(l=t(s))&&(i.d(1),i=l(s),i&&(i.c(),i.m(e,null))),r&2&&o(e,"width",s[1]),r&2&&o(e,"height",s[1])},i:K,o:K,d(s){s&&m(e),i.d()}}}function Nn(n,e,t){let{kind:l="generic"}=e,{size:i=20}=e;return n.$$set=s=>{"kind"in s&&t(0,l=s.kind),"size"in s&&t(1,i=s.size)},[l,i]}class $t extends Se{constructor(e){super(),Ne(this,e,Nn,Mn,Me,{kind:0,size:1})}}function Oe(n){if(n==null||n<0)return"—";if(n===0)return"0 B";const e=["B","KB","MB","GB"],t=Math.min(Math.floor(Math.log(n)/Math.log(1024)),e.length-1),l=n/Math.pow(1024,t);return(t===0?l.toFixed(0):l.toFixed(1))+" "+e[t]}const Sn={"image/jpeg":"JPEG image","image/png":"PNG image","image/gif":"GIF image","image/webp":"WebP image","image/svg+xml":"SVG image","image/bmp":"BMP image","image/tiff":"TIFF image","image/avif":"AVIF image","application/pdf":"PDF document","application/msword":"Word document","application/vnd.openxmlformats-officedocument.wordprocessingml.document":"Word document","application/vnd.ms-excel":"Excel spreadsheet","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":"Excel spreadsheet","application/vnd.ms-powerpoint":"PowerPoint presentation","application/vnd.openxmlformats-officedocument.presentationml.presentation":"PowerPoint presentation","application/zip":"ZIP archive","application/gzip":"GZIP archive","application/x-tar":"TAR archive","application/x-7z-compressed":"7z archive","application/x-rar-compressed":"RAR archive","text/plain":"Text file","text/html":"HTML file","text/css":"CSS file","text/javascript":"JavaScript file","application/json":"JSON file","application/xml":"XML file","application/x-yaml":"YAML file","application/octet-stream":"Binary file","application/x-msdos-program":"Executable","inode/directory":"Folder"};function Te(n){return n?Sn[n]||n:"Unknown"}function el(n){if(n.type==="folder")return"folder";const e=(n.mime||"").toLowerCase();if(e.startsWith("image/"))return"image";if(e.startsWith("video/"))return"video";if(e.startsWith("audio/"))return"audio";if(e.startsWith("text/"))return"text";if(e.includes("pdf"))return"pdf";if(e.includes("word")||e.includes("document"))return"document";if(e.includes("spreadsheet")||e.includes("excel"))return"spreadsheet";if(e.includes("presentation")||e.includes("powerpoint"))return"presentation";if(e.includes("zip")||e.includes("tar")||e.includes("gzip")||e.includes("rar")||e.includes("7z")||e.includes("compress"))return"archive";if(e.includes("json")||e.includes("xml")||e.includes("yaml")||e.includes("javascript")||e.includes("css")||e.includes("html"))return"code";const l=(n.name||"").toLowerCase().split(".").pop();return["js","ts","jsx","tsx","vue","svelte","py","rs","go","c","cpp","h","hpp","java","kt","swift","rb","php","pl","sh","bash","zsh","fish","yml","yaml","json","xml","toml","ini","cfg","conf","md","markdown","css","scss","less","sass","sql","graphql","proto","gradle","cmake","makefile","dockerfile","env","gitignore"].includes(l)?"code":"generic"}const En=["image/jpeg","image/png","image/gif","image/webp","image/bmp","image/tiff","image/avif","image/svg+xml"],Ln=["text/plain","text/html","text/css","text/javascript","application/json","application/xml","application/x-yaml","text/x-shellscript"],Fn=["txt","log","conf","ini","yaml","yml","json","xml","csv","sh","py","js","ts","css","html","md","markdown","cfg"],In=["jpg","jpeg","png","gif","webp","bmp","tiff","tif","avif","svg"];function tl(n){const e=(n.mime||"").toLowerCase(),l=(n.name||"").toLowerCase().split(".").pop();return En.includes(e)||In.includes(l)}function ll(n){const e=(n.mime||"").toLowerCase(),l=(n.name||"").toLowerCase().split(".").pop();return Ln.includes(e)||Fn.includes(l)&&l!=="md"&&l!=="markdown"}function nl(n){return(n.mime||"").toLowerCase().includes("pdf")}function il(n){const e=(n.name||"").toLowerCase();return e.endsWith(".md")||e.endsWith(".markdown")}function Pn(n){return tl(n)||nl(n)}function On(n){return ll(n)||il(n)}function Tn(n){let e,t=Oe(n[0].size)+"",l,i,s,r=n[0].mime&&st(n);return{c(){e=f("span"),l=I(t),i=j(),r&&r.c(),s=ae()},m(c,u){k(c,e,u),a(e,l),k(c,i,u),r&&r.m(c,u),k(c,s,u)},p(c,u){u&1&&t!==(t=Oe(c[0].size)+"")&&G(l,t),c[0].mime?r?r.p(c,u):(r=st(c),r.c(),r.m(s.parentNode,s)):r&&(r.d(1),r=null)},d(c){c&&(m(e),m(i),m(s)),r&&r.d(c)}}}function zn(n){let e;return{c(){e=f("span"),e.textContent="Folder"},m(t,l){k(t,e,l)},p:K,d(t){t&&m(e)}}}function st(n){let e,t,l,i=Te(n[0].mime)+"",s;return{c(){e=f("span"),e.textContent="·",t=j(),l=f("span"),s=I(i),o(e,"class","meta-sep svelte-vi5rh0")},m(r,c){k(r,e,c),k(r,t,c),k(r,l,c),a(l,s)},p(r,c){c&1&&i!==(i=Te(r[0].mime)+"")&&G(s,i)},d(r){r&&(m(e),m(t),m(l))}}}function An(n){let e,t,l;return{c(){e=f("button"),e.innerHTML=' ',o(e,"class","action-btn svelte-vi5rh0"),o(e,"title","Open folder"),o(e,"aria-label","Open folder")},m(i,s){k(i,e,s),t||(l=O(e,"click",pe(n[4])),t=!0)},p:K,d(i){i&&m(e),t=!1,l()}}}function Bn(n){let e,t,l,i,s;return{c(){e=f("button"),e.innerHTML=' ',t=j(),l=f("button"),l.innerHTML=' ',o(e,"class","action-btn svelte-vi5rh0"),o(e,"title","Preview"),o(e,"aria-label","Preview"),o(l,"class","action-btn svelte-vi5rh0"),o(l,"title","Open in external program"),o(l,"aria-label","Open externally")},m(r,c){k(r,e,c),k(r,t,c),k(r,l,c),i||(s=[O(e,"click",pe(n[4])),O(l,"click",pe(n[6]))],i=!0)},p:K,d(r){r&&(m(e),m(t),m(l)),i=!1,se(s)}}}function rt(n){let e,t,l,i,s,r,c,u,d,_,b,p;return{c(){e=f("div"),t=j(),l=f("div"),i=f("button"),i.textContent="Rename",s=j(),r=f("button"),r.textContent="Duplicate",c=j(),u=f("button"),u.textContent="Cut",d=j(),_=f("button"),_.textContent="Copy",o(e,"class","menu-backdrop svelte-vi5rh0"),o(e,"role","presentation"),o(i,"class","menu-item svelte-vi5rh0"),o(i,"role","menuitem"),o(r,"class","menu-item svelte-vi5rh0"),o(r,"role","menuitem"),o(u,"class","menu-item svelte-vi5rh0"),o(u,"role","menuitem"),o(_,"class","menu-item svelte-vi5rh0"),o(_,"role","menuitem"),o(l,"class","menu svelte-vi5rh0"),o(l,"role","menu")},m(v,w){k(v,e,w),k(v,t,w),k(v,l,w),a(l,i),a(l,s),a(l,r),a(l,c),a(l,u),a(l,d),a(l,_),b||(p=[O(e,"click",pe(n[13])),O(i,"click",n[8]),O(r,"click",n[9]),O(u,"click",n[10]),O(_,"click",n[11]),O(l,"click",pe(n[15]))],b=!0)},p:K,d(v){v&&(m(e),m(t),m(l)),b=!1,se(p)}}}function Dn(n){let e,t,l,i,s,r,c=n[0].name+"",u,d,_,b,p,v,w,g,y,N,B,R,S,A,T,L,P,C,E,q;l=new $t({props:{kind:n[2],size:22}});function V(D,J){return D[3]?zn:Tn}let Z=V(n)(n);function U(D,J){return D[3]?An:Bn}let $=U(n)(n),Q=n[1]&&rt(n);return{c(){e=f("div"),t=f("div"),ye(l.$$.fragment),i=j(),s=f("div"),r=f("div"),u=I(c),_=j(),b=f("div"),Z.c(),p=j(),v=f("div"),$.c(),w=j(),g=f("button"),y=W("svg"),N=W("circle"),B=W("circle"),R=W("circle"),S=j(),A=f("button"),A.innerHTML=' ',L=j(),Q&&Q.c(),P=ae(),o(t,"class","file-row-icon svelte-vi5rh0"),o(r,"class","file-row-name svelte-vi5rh0"),o(r,"title",d=n[0].name),o(b,"class","file-row-meta svelte-vi5rh0"),o(s,"class","file-row-body svelte-vi5rh0"),o(N,"cx","12"),o(N,"cy","5"),o(N,"r","2"),o(B,"cx","12"),o(B,"cy","12"),o(B,"r","2"),o(R,"cx","12"),o(R,"cy","19"),o(R,"r","2"),o(y,"width","16"),o(y,"height","16"),o(y,"viewBox","0 0 24 24"),o(y,"fill","currentColor"),o(g,"class","action-btn svelte-vi5rh0"),o(g,"title","More actions"),o(g,"aria-label","More actions"),o(g,"aria-expanded",n[1]),o(A,"class","action-btn action-btn-danger svelte-vi5rh0"),o(A,"title","Delete"),o(A,"aria-label","Delete"),o(v,"class","file-row-actions svelte-vi5rh0"),o(e,"class","file-row svelte-vi5rh0"),o(e,"role","button"),o(e,"tabindex","0"),o(e,"aria-label",T=n[3]?`Open folder ${n[0].name}`:`Preview ${n[0].name}`)},m(D,J){k(D,e,J),a(e,t),ve(l,t,null),a(e,i),a(e,s),a(s,r),a(r,u),a(s,_),a(s,b),Z.m(b,null),a(e,p),a(e,v),$.m(v,null),a(v,w),a(v,g),a(g,y),a(y,N),a(y,B),a(y,R),a(v,S),a(v,A),k(D,L,J),Q&&Q.m(D,J),k(D,P,J),C=!0,E||(q=[O(window,"click",n[13]),O(g,"click",pe(n[12])),O(A,"click",pe(n[7])),O(e,"click",n[4]),O(e,"keydown",n[5])],E=!0)},p(D,[J]){(!C||J&1)&&c!==(c=D[0].name+"")&&G(u,c),(!C||J&1&&d!==(d=D[0].name))&&o(r,"title",d),Z.p(D,J),$.p(D,J),(!C||J&2)&&o(g,"aria-expanded",D[1]),(!C||J&1&&T!==(T=D[3]?`Open folder ${D[0].name}`:`Preview ${D[0].name}`))&&o(e,"aria-label",T),D[1]?Q?Q.p(D,J):(Q=rt(D),Q.c(),Q.m(P.parentNode,P)):Q&&(Q.d(1),Q=null)},i(D){C||(ne(l.$$.fragment,D),C=!0)},o(D){ie(l.$$.fragment,D),C=!1},d(D){D&&(m(e),m(L),m(P)),ke(l),Z.d(),$.d(),Q&&Q.d(D),E=!1,se(q)}}}function Hn(n,e,t){let{item:l}=e,{clipboardItems:i=[]}=e;const s=qe(),r=el(l),c=l.type==="folder";let u=!1;function d(){c?s("navigate",l.id):s("preview",l)}function _(S){S.key==="Enter"&&d()}function b(){s("openExternal",l.fileId)}function p(){s("delete",{id:l.id,type:l.type})}function v(){t(1,u=!1),s("rename",{id:l.id,name:l.name})}function w(){t(1,u=!1),s("duplicate",l.id)}function g(){t(1,u=!1),s("cut",l.id)}function y(){t(1,u=!1),s("copy",l.id)}function N(){t(1,u=!u)}function B(){t(1,u=!1)}function R(S){nn.call(this,n,S)}return n.$$set=S=>{"item"in S&&t(0,l=S.item),"clipboardItems"in S&&t(14,i=S.clipboardItems)},[l,u,r,c,d,_,b,p,v,w,g,y,N,B,i,R]}class Vn extends Se{constructor(e){super(),Ne(this,e,Hn,Dn,Me,{item:0,clipboardItems:14})}}function ot(n,e,t){const l=n.slice();return l[4]=e[t],l[6]=t,l}function Wn(n){let e;return{c(){e=f("span"),e.textContent="/",o(e,"class","sep svelte-csi2lb")},m(t,l){k(t,e,l)},d(t){t&&m(e)}}}function Rn(n){let e,t=n[4].name+"",l,i,s;function r(){return n[2](n[6])}return{c(){e=f("button"),l=I(t),o(e,"class","crumb crumb--link svelte-csi2lb")},m(c,u){k(c,e,u),a(e,l),i||(s=O(e,"click",r),i=!0)},p(c,u){n=c,u&1&&t!==(t=n[4].name+"")&&G(l,t)},d(c){c&&m(e),i=!1,s()}}}function qn(n){let e,t=n[4].name+"",l;return{c(){e=f("span"),l=I(t),o(e,"class","crumb crumb--current svelte-csi2lb")},m(i,s){k(i,e,s),a(e,l)},p(i,s){s&1&&t!==(t=i[4].name+"")&&G(l,t)},d(i){i&&m(e)}}}function ct(n){let e,t,l=n[6]>0&&Wn();function i(c,u){return c[6]===c[0].length-1?qn:Rn}let s=i(n),r=s(n);return{c(){l&&l.c(),e=j(),r.c(),t=ae()},m(c,u){l&&l.m(c,u),k(c,e,u),r.m(c,u),k(c,t,u)},p(c,u){s===(s=i(c))&&r?r.p(c,u):(r.d(1),r=s(c),r&&(r.c(),r.m(t.parentNode,t)))},d(c){c&&(m(e),m(t)),l&&l.d(c),r.d(c)}}}function Gn(n){let e,t=te(n[0]),l=[];for(let i=0;is(c);return n.$$set=c=>{"crumbs"in c&&t(0,l=c.crumbs)},[l,s,r]}class sl extends Se{constructor(e){super(),Ne(this,e,Kn,Gn,Me,{crumbs:0})}}function Jn(n){let e,t,l,i,s,r;return{c(){e=f("div"),t=f("p"),t.textContent="Preview is not available for this file type.",l=j(),i=f("button"),i.textContent="Open in external program",o(i,"class","btn btn-sm svelte-1ybaoro"),o(e,"class","preview-status svelte-1ybaoro")},m(c,u){k(c,e,u),a(e,t),a(e,l),a(e,i),s||(r=O(i,"click",n[9]),s=!0)},p:K,d(c){c&&m(e),s=!1,r()}}}function Un(n){let e,t;function l(r,c){return c&2&&(e=null),e==null&&(e=!!(r[1]&&r[1].startsWith("data:"))),e?$n:xn}let i=l(n,-1),s=i(n);return{c(){s.c(),t=ae()},m(r,c){s.m(r,c),k(r,t,c)},p(r,c){i===(i=l(r,c))&&s?s.p(r,c):(s.d(1),s=i(r),s&&(s.c(),s.m(t.parentNode,t)))},d(r){r&&m(t),s.d(r)}}}function Zn(n){let e,t,l;return{c(){e=f("pre"),t=f("code"),l=I(n[1]),o(e,"class","preview-text svelte-1ybaoro")},m(i,s){k(i,e,s),a(e,t),a(t,l)},p(i,s){s&2&&G(l,i[1])},d(i){i&&m(e)}}}function Xn(n){let e,t,l,i;return{c(){e=f("div"),t=f("img"),Ie(t.src,l=n[1])||o(t,"src",l),o(t,"alt",i=n[0].name),o(t,"class","preview-image svelte-1ybaoro"),o(e,"class","preview-image-container svelte-1ybaoro")},m(s,r){k(s,e,r),a(e,t)},p(s,r){r&2&&!Ie(t.src,l=s[1])&&o(t,"src",l),r&1&&i!==(i=s[0].name)&&o(t,"alt",i)},d(s){s&&m(e)}}}function Yn(n){let e,t,l,i,s,r,c;return{c(){e=f("div"),t=f("p"),l=I(n[3]),i=j(),s=f("button"),s.textContent="Open in external program",o(s,"class","btn btn-sm svelte-1ybaoro"),o(e,"class","preview-status svelte-1ybaoro")},m(u,d){k(u,e,d),a(e,t),a(t,l),a(e,i),a(e,s),r||(c=O(s,"click",n[9]),r=!0)},p(u,d){d&8&&G(l,u[3])},d(u){u&&m(e),r=!1,c()}}}function Qn(n){let e;return{c(){e=f("div"),e.innerHTML="Loading preview...
",o(e,"class","preview-status svelte-1ybaoro")},m(t,l){k(t,e,l)},p:K,d(t){t&&m(e)}}}function xn(n){let e,t,l,i,s,r;return{c(){e=f("div"),t=f("p"),t.textContent="PDF preview is not available in this environment.",l=j(),i=f("button"),i.textContent="Open in external program",o(i,"class","btn btn-sm svelte-1ybaoro"),o(e,"class","preview-status svelte-1ybaoro")},m(c,u){k(c,e,u),a(e,t),a(e,l),a(e,i),s||(r=O(i,"click",n[9]),s=!0)},p:K,d(c){c&&m(e),s=!1,r()}}}function $n(n){let e,t,l;return{c(){e=f("div"),t=f("embed"),Ie(t.src,l=n[1])||o(t,"src",l),o(t,"type","application/pdf"),o(t,"class","preview-pdf svelte-1ybaoro"),o(e,"class","preview-pdf-container svelte-1ybaoro")},m(i,s){k(i,e,s),a(e,t)},p(i,s){s&2&&!Ie(t.src,l=i[1])&&o(t,"src",l)},d(i){i&&m(e)}}}function ei(n){let e,t,l,i,s,r,c,u=n[0].name+"",d,_,b,p,v=Oe(n[0].size)+"",w,g,y=Te(n[0].mime)+"",N,B,R,S,A,T,L,P,C,E,q,V;s=new $t({props:{kind:n[8],size:18}});function x(z,$){return z[2]?Qn:z[3]?Yn:z[6]&&z[1]?Xn:z[5]&&z[1]?Zn:z[4]?Un:Jn}let Z=x(n),U=Z(n);return{c(){e=f("div"),t=f("div"),l=f("header"),i=f("div"),ye(s.$$.fragment),r=j(),c=f("span"),d=I(u),b=j(),p=f("div"),w=I(v),g=I(" · "),N=I(y),B=j(),R=f("div"),S=f("button"),S.innerHTML=' ',A=j(),T=f("button"),T.innerHTML=' ',L=j(),P=f("div"),U.c(),o(c,"class","preview-name svelte-1ybaoro"),o(c,"title",_=n[0].name),o(i,"class","preview-title svelte-1ybaoro"),o(p,"class","preview-meta svelte-1ybaoro"),o(S,"class","action-btn svelte-1ybaoro"),o(S,"title","Open in external program"),o(S,"aria-label","Open externally"),o(T,"class","action-btn svelte-1ybaoro"),o(T,"title","Close"),o(T,"aria-label","Close preview"),o(R,"class","preview-actions svelte-1ybaoro"),o(l,"class","preview-header svelte-1ybaoro"),o(P,"class","preview-body svelte-1ybaoro"),o(t,"class","modal svelte-1ybaoro"),o(e,"class","overlay svelte-1ybaoro"),o(e,"role","dialog"),o(e,"aria-modal","true"),o(e,"aria-label",C=`Preview: ${n[0].name}`)},m(z,$){k(z,e,$),a(e,t),a(t,l),a(l,i),ve(s,i,null),a(i,r),a(i,c),a(c,d),a(l,b),a(l,p),a(p,w),a(p,g),a(p,N),a(l,B),a(l,R),a(R,S),a(R,A),a(R,T),a(t,L),a(t,P),U.m(P,null),E=!0,q||(V=[O(S,"click",n[9]),O(T,"click",n[10]),O(e,"click",We(n[11]))],q=!0)},p(z,[$]){(!E||$&1)&&u!==(u=z[0].name+"")&&G(d,u),(!E||$&1&&_!==(_=z[0].name))&&o(c,"title",_),(!E||$&1)&&v!==(v=Oe(z[0].size)+"")&&G(w,v),(!E||$&1)&&y!==(y=Te(z[0].mime)+"")&&G(N,y),Z===(Z=x(z))&&U?U.p(z,$):(U.d(1),U=Z(z),U&&(U.c(),U.m(P,null))),(!E||$&1&&C!==(C=`Preview: ${z[0].name}`))&&o(e,"aria-label",C)},i(z){E||(ne(s.$$.fragment,z),E=!0)},o(z){ie(s.$$.fragment,z),E=!1},d(z){z&&m(e),ke(s),U.d(),q=!1,se(V)}}}function ti(n,e,t){let l,i,s,{item:r}=e,{content:c=""}=e,{loading:u=!1}=e,{error:d=""}=e;const _=qe(),b=el(r);function p(y){y.key==="Escape"&&_("close")}function v(){_("openExternal",r.fileId)}Yt(()=>{window.addEventListener("keydown",p)}),Qt(()=>{window.removeEventListener("keydown",p)});const w=()=>_("close"),g=()=>_("close");return n.$$set=y=>{"item"in y&&t(0,r=y.item),"content"in y&&t(1,c=y.content),"loading"in y&&t(2,u=y.loading),"error"in y&&t(3,d=y.error)},n.$$.update=()=>{n.$$.dirty&3&&t(6,l=tl(r)&&c&&c.startsWith("data:")),n.$$.dirty&1&&t(5,i=ll(r)||il(r)),n.$$.dirty&1&&t(4,s=nl(r))},[r,c,u,d,s,i,l,_,b,v,w,g]}class li extends Se{constructor(e){super(),Ne(this,e,ti,ei,Me,{item:0,content:1,loading:2,error:3})}}function ut(n,e,t){const l=n.slice();return l[105]=e[t],l}function at(n,e,t){const l=n.slice();return l[108]=e[t],l}function ft(n,e,t){const l=n.slice();return l[119]=e[t],l}function dt(n,e,t){const l=n.slice();return l[116]=e[t],l}function pt(n,e,t){const l=n.slice();return l[111]=e[t],l}function _t(n,e,t){const l=n.slice();return l[108]=e[t],l}function mt(n,e,t){const l=n.slice();return l[111]=e[t],l}function vt(n,e,t){const l=n.slice();return l[124]=e[t],l}function kt(n,e,t){const l=n.slice();return l[105]=e[t],l}function bt(n,e,t){const l=n.slice();return l[129]=e[t],l}function ht(n,e,t){const l=n.slice();return l[132]=e[t],l}function wt(n){let e,t=n[132].label+"",l,i,s,r,c;function u(){return n[63](n[132])}return{c(){e=f("button"),l=I(t),i=j(),o(e,"class",s="nav-item "+(n[4]===n[132].id?"selected":"")+" svelte-1rwjkun")},m(d,_){k(d,e,_),a(e,l),a(e,i),r||(c=O(e,"click",u),r=!0)},p(d,_){n=d,_[0]&1&&t!==(t=n[132].label+"")&&G(l,t),_[0]&17&&s!==(s="nav-item "+(n[4]===n[132].id?"selected":"")+" svelte-1rwjkun")&&o(e,"class",s)},d(d){d&&m(e),r=!1,c()}}}function gt(n){let e,t,l,i,s,r=n[1].length>0&&yt(n),c=te(n[1]),u=[];for(let _=0;_0?r?r.p(_,b):(r=yt(_),r.c(),r.m(t,null)):r&&(r.d(1),r=null),b[0]&34|b[1]&4){c=te(_[1]);let p;for(p=0;p0)return ai;if(c[3])return ui}let s=i(n),r=s&&s(n);return{c(){e=f("div"),t=f("h2"),t.textContent="Верстак",l=j(),r&&r.c(),o(t,"class","svelte-1rwjkun"),o(e,"class","welcome svelte-1rwjkun")},m(c,u){k(c,e,u),a(e,t),a(e,l),r&&r.m(e,null)},p(c,u){s===(s=i(c))&&r?r.p(c,u):(r&&r.d(1),r=s&&s(c),r&&(r.c(),r.m(e,null)))},i:K,o:K,d(c){c&&m(e),r&&r.d()}}}function oi(n){let e,t,l,i,s,r,c=te(n[31]),u=[];for(let p=0;p{_[w]=null}),me()),~i?(s=_[i],s?s.p(p,v):(s=_[i]=d[i](p),s.c()),ne(s,1),s.m(l,null)):s=null)},i(p){r||(ne(s),r=!0)},o(p){ie(s),r=!1},d(p){p&&(m(e),m(t),m(l)),ue(u,p),~i&&_[i].d()}}}function ci(n){let e,t,l,i=n[8].title+"",s,r,c,u,d,_,b,p,v,w,g,y=n[8].dirty&&Vt();return{c(){e=f("div"),t=f("div"),l=f("span"),s=I(i),r=j(),y&&y.c(),c=j(),u=f("div"),d=f("button"),d.textContent="Сохранить",_=j(),b=f("button"),b.textContent="Закрыть",p=j(),v=f("textarea"),o(l,"class","note-title svelte-1rwjkun"),o(d,"class","btn btn-primary svelte-1rwjkun"),o(b,"class","btn svelte-1rwjkun"),o(u,"class","note-editor-actions svelte-1rwjkun"),o(t,"class","note-editor-header svelte-1rwjkun"),o(v,"class","note-textarea svelte-1rwjkun"),o(v,"placeholder","Начните писать..."),o(e,"class","note-editor svelte-1rwjkun")},m(N,B){k(N,e,B),a(e,t),a(t,l),a(l,s),a(t,r),y&&y.m(t,null),a(t,c),a(t,u),a(u,d),a(u,_),a(u,b),a(e,p),a(e,v),ce(v,n[8].content),w||(g=[O(d,"click",n[55]),O(b,"click",n[53]),O(v,"input",n[66]),O(v,"input",n[54])],w=!0)},p(N,B){B[0]&256&&i!==(i=N[8].title+"")&&G(s,i),N[8].dirty?y||(y=Vt(),y.c(),y.m(t,c)):y&&(y.d(1),y=null),B[0]&256&&ce(v,N[8].content)},i:K,o:K,d(N){N&&m(e),y&&y.d(),w=!1,se(g)}}}function ui(n){let e,t,l;return{c(){e=f("p"),t=I("Ошибка: "),l=I(n[3]),o(e,"class","error-text svelte-1rwjkun")},m(i,s){k(i,e,s),a(e,t),a(e,l)},p(i,s){s[0]&8&&G(l,i[3])},d(i){i&&m(e)}}}function ai(n){let e,t,l;return{c(){e=f("p"),e.textContent="Выберите раздел в боковой панели.",t=j(),l=f("p"),l.textContent="Или создайте новое дело кнопкой «+».",o(e,"class","svelte-1rwjkun"),o(l,"class","hint svelte-1rwjkun")},m(i,s){k(i,e,s),k(i,t,s),k(i,l,s)},p:K,d(i){i&&(m(e),m(t),m(l))}}}function fi(n){let e;return{c(){e=f("p"),e.textContent="Загрузка...",o(e,"class","svelte-1rwjkun")},m(t,l){k(t,e,l)},p:K,d(t){t&&m(e)}}}function St(n){let e,t=n[124].label+"",l,i,s;function r(){return n[67](n[124])}return{c(){e=f("button"),l=I(t),o(e,"class",$l(n[62](n[124].id))+" svelte-1rwjkun")},m(c,u){k(c,e,u),a(e,l),i||(s=O(e,"click",r),i=!0)},p(c,u){n=c},d(c){c&&m(e),i=!1,s()}}}function di(n){let e;return{c(){e=f("div"),e.innerHTML='Активность появится позже
',o(e,"class","empty-state svelte-1rwjkun")},m(t,l){k(t,e,l)},p:K,i:K,o:K,d(t){t&&m(e)}}}function pi(n){let e,t,l,i,s,r,c,u,d,_,b,p;function v(y,N){return y[10].length===0?hi:bi}let w=v(n),g=w(n);return{c(){e=f("div"),t=f("div"),l=f("input"),i=j(),s=f("input"),r=j(),c=f("button"),u=I("Записать"),_=j(),g.c(),o(l,"type","text"),o(l,"placeholder","Что сделано"),o(l,"class","svelte-1rwjkun"),o(s,"type","number"),o(s,"placeholder","Мин"),o(s,"min","1"),o(s,"class","svelte-1rwjkun"),o(c,"class","btn btn-primary svelte-1rwjkun"),c.disabled=d=!n[12].trim()||!n[11],o(t,"class","worklog-form svelte-1rwjkun"),o(e,"class","worklog-tab svelte-1rwjkun")},m(y,N){k(y,e,N),a(e,t),a(t,l),ce(l,n[12]),a(t,i),a(t,s),ce(s,n[11]),a(t,r),a(t,c),a(c,u),a(e,_),g.m(e,null),b||(p=[O(l,"input",n[86]),O(s,"input",n[87]),O(c,"click",n[56])],b=!0)},p(y,N){N[0]&4096&&l.value!==y[12]&&ce(l,y[12]),N[0]&2048&&Xt(s.value)!==y[11]&&ce(s,y[11]),N[0]&6144&&d!==(d=!y[12].trim()||!y[11])&&(c.disabled=d),w===(w=v(y))&&g?g.p(y,N):(g.d(1),g=w(y),g&&(g.c(),g.m(e,null)))},i:K,o:K,d(y){y&&m(e),g.d(),b=!1,se(p)}}}function _i(n){let e;function t(s,r){return s[9].length===0?gi:wi}let l=t(n),i=l(n);return{c(){i.c(),e=ae()},m(s,r){i.m(s,r),k(s,e,r)},p(s,r){l===(l=t(s))&&i?i.p(s,r):(i.d(1),i=l(s),i&&(i.c(),i.m(e.parentNode,e)))},i:K,o:K,d(s){s&&m(e),i.d(s)}}}function mi(n){let e,t,l,i,s,r,c,u,d,_,b,p,v,w,g,y,N,B,R,S=n[30].items.length>0&&Ft(n);const A=[ji,yi],T=[];function L(E,q){return E[22]?0:1}p=L(n),v=T[p]=A[p](n);let P=n[19]&&!n[21]&&Pt(),C=n[26]&&Ot(n);return{c(){e=f("div"),t=f("div"),l=f("button"),i=I("+ Добавить файл"),s=j(),r=f("button"),c=I("+ Добавить папку"),u=j(),d=f("button"),d.textContent="+ Новый файл",_=j(),S&&S.c(),b=j(),v.c(),w=j(),P&&P.c(),g=j(),C&&C.c(),y=ae(),o(l,"class","btn btn-primary svelte-1rwjkun"),l.disabled=n[19],o(r,"class","btn svelte-1rwjkun"),r.disabled=n[19],o(d,"class","btn svelte-1rwjkun"),o(t,"class","tab-toolbar svelte-1rwjkun"),o(e,"class","files-tab svelte-1rwjkun")},m(E,q){k(E,e,q),a(e,t),a(t,l),a(l,i),a(t,s),a(t,r),a(r,c),a(t,u),a(t,d),a(t,_),S&&S.m(t,null),a(e,b),T[p].m(e,null),a(e,w),P&&P.m(e,null),k(E,g,q),C&&C.m(E,q),k(E,y,q),N=!0,B||(R=[O(l,"click",n[57]),O(r,"click",n[58]),O(d,"click",n[40])],B=!0)},p(E,q){(!N||q[0]&524288)&&(l.disabled=E[19]),(!N||q[0]&524288)&&(r.disabled=E[19]),E[30].items.length>0?S?S.p(E,q):(S=Ft(E),S.c(),S.m(t,null)):S&&(S.d(1),S=null);let V=p;p=L(E),p===V?T[p].p(E,q):(_e(),ie(T[V],1,1,()=>{T[V]=null}),me(),v=T[p],v?v.p(E,q):(v=T[p]=A[p](E),v.c()),ne(v,1),v.m(e,w)),E[19]&&!E[21]?P||(P=Pt(),P.c(),P.m(e,null)):P&&(P.d(1),P=null),E[26]?C?(C.p(E,q),q[0]&67108864&&ne(C,1)):(C=Ot(E),C.c(),ne(C,1),C.m(y.parentNode,y)):C&&(_e(),ie(C,1,1,()=>{C=null}),me())},i(E){N||(ne(v),ne(C),N=!0)},o(E){ie(v),ie(C),N=!1},d(E){E&&(m(e),m(g),m(y)),S&&S.d(),T[p].d(),P&&P.d(),C&&C.d(E),B=!1,se(R)}}}function vi(n){let e,t,l,i,s,r,c,u=n[16]&&Tt(n);function d(p,v){return p[7].length===0&&!p[16]?Li:Ei}let _=d(n),b=_(n);return{c(){e=f("div"),t=f("div"),l=f("button"),l.textContent="+ Добавить заметку",i=j(),u&&u.c(),s=j(),b.c(),o(l,"class","btn btn-primary svelte-1rwjkun"),o(t,"class","tab-toolbar svelte-1rwjkun"),o(e,"class","notes-tab svelte-1rwjkun")},m(p,v){k(p,e,v),a(e,t),a(t,l),a(e,i),u&&u.m(e,null),a(e,s),b.m(e,null),r||(c=O(l,"click",n[49]),r=!0)},p(p,v){p[16]?u?u.p(p,v):(u=Tt(p),u.c(),u.m(e,s)):u&&(u.d(1),u=null),_===(_=d(p))&&b?b.p(p,v):(b.d(1),b=_(p),b&&(b.c(),b.m(e,null)))},i:K,o:K,d(p){p&&m(e),u&&u.d(),b.d(),r=!1,c()}}}function ki(n){let e,t,l=n[5].title+"",i,s,r,c,u,d,_=n[5].type+"",b,p,v,w,g,y=(n[5].section||"—")+"",N,B,R,S,A,T=fe(n[5].createdAt)+"",L,P,C,E,q,V,x,Z,U,z,$,Q,D,J,X=n[7].length>0&&At(n),H=n[10].length>0&&Dt(n);return{c(){e=f("div"),t=f("h2"),i=I(l),s=j(),r=f("div"),c=f("div"),u=f("span"),u.textContent="Тип",d=f("span"),b=I(_),p=j(),v=f("div"),w=f("span"),w.textContent="Раздел",g=f("span"),N=I(y),B=j(),R=f("div"),S=f("span"),S.textContent="Создано",A=f("span"),L=I(T),P=j(),C=f("div"),E=f("button"),E.textContent="✏️ Новая заметка",q=j(),V=f("button"),V.textContent="📎 Добавить файл",x=j(),Z=f("button"),Z.textContent="⚡ Добавить действие",U=j(),z=f("button"),z.textContent="🕐 Записать время",$=j(),X&&X.c(),Q=j(),H&&H.c(),o(t,"class","svelte-1rwjkun"),o(u,"class","meta-label svelte-1rwjkun"),o(d,"class","svelte-1rwjkun"),o(c,"class","meta-item svelte-1rwjkun"),o(w,"class","meta-label svelte-1rwjkun"),o(g,"class","svelte-1rwjkun"),o(v,"class","meta-item svelte-1rwjkun"),o(S,"class","meta-label svelte-1rwjkun"),o(A,"class","svelte-1rwjkun"),o(R,"class","meta-item svelte-1rwjkun"),o(r,"class","meta-grid svelte-1rwjkun"),o(E,"class","qa-btn svelte-1rwjkun"),o(V,"class","qa-btn svelte-1rwjkun"),o(Z,"class","qa-btn svelte-1rwjkun"),Z.disabled=!0,o(Z,"title","Следующий этап"),o(z,"class","qa-btn svelte-1rwjkun"),o(C,"class","quick-actions svelte-1rwjkun"),o(e,"class","overview svelte-1rwjkun")},m(M,Y){k(M,e,Y),a(e,t),a(t,i),a(e,s),a(e,r),a(r,c),a(c,u),a(c,d),a(d,b),a(r,p),a(r,v),a(v,w),a(v,g),a(g,N),a(r,B),a(r,R),a(R,S),a(R,A),a(A,L),a(e,P),a(e,C),a(C,E),a(C,q),a(C,V),a(C,x),a(C,Z),a(C,U),a(C,z),a(e,$),X&&X.m(e,null),a(e,Q),H&&H.m(e,null),D||(J=[O(E,"click",n[68]),O(V,"click",n[69]),O(z,"click",n[70])],D=!0)},p(M,Y){Y[0]&32&&l!==(l=M[5].title+"")&&G(i,l),Y[0]&32&&_!==(_=M[5].type+"")&&G(b,_),Y[0]&32&&y!==(y=(M[5].section||"—")+"")&&G(N,y),Y[0]&32&&T!==(T=fe(M[5].createdAt)+"")&&G(L,T),M[7].length>0?X?X.p(M,Y):(X=At(M),X.c(),X.m(e,Q)):X&&(X.d(1),X=null),M[10].length>0?H?H.p(M,Y):(H=Dt(M),H.c(),H.m(e,null)):H&&(H.d(1),H=null)},i:K,o:K,d(M){M&&m(e),X&&X.d(),H&&H.d(),D=!1,se(J)}}}function bi(n){let e,t=te(n[10]),l=[];for(let i=0;iЗаписей работы пока нет',o(e,"class","empty-state svelte-1rwjkun")},m(t,l){k(t,e,l)},p:K,d(t){t&&m(e)}}}function Et(n){let e,t,l=n[108].summary+"",i,s,r,c=n[108].minutes+"",u,d,_=fe(n[108].createdAt)+"",b,p;return{c(){e=f("div"),t=f("div"),i=I(l),s=j(),r=f("div"),u=I(c),d=I(" мин · "),b=I(_),p=j(),o(t,"class","svelte-1rwjkun"),o(r,"class","wl-meta svelte-1rwjkun"),o(e,"class","worklog-entry svelte-1rwjkun")},m(v,w){k(v,e,w),a(e,t),a(t,i),a(e,s),a(e,r),a(r,u),a(r,d),a(r,b),a(e,p)},p(v,w){w[0]&1024&&l!==(l=v[108].summary+"")&&G(i,l),w[0]&1024&&c!==(c=v[108].minutes+"")&&G(u,c),w[0]&1024&&_!==(_=fe(v[108].createdAt)+"")&&G(b,_)},d(v){v&&m(e)}}}function wi(n){let e,t=te(n[9]),l=[];for(let i=0;iДействий пока нет',o(e,"class","empty-state svelte-1rwjkun")},m(t,l){k(t,e,l)},p:K,d(t){t&&m(e)}}}function Lt(n){let e,t,l=n[119].title+"",i,s,r=n[119].type+"",c,u,d,_,b,p;function v(){return n[85](n[119])}return{c(){e=f("div"),t=f("span"),i=I(l),s=f("span"),c=I(r),u=j(),d=f("button"),d.textContent="Запустить",_=j(),o(t,"class","svelte-1rwjkun"),o(s,"class","action-type svelte-1rwjkun"),o(d,"class","btn btn-sm svelte-1rwjkun"),o(e,"class","action-card svelte-1rwjkun")},m(w,g){k(w,e,g),a(e,t),a(t,i),a(e,s),a(s,c),a(e,u),a(e,d),a(e,_),b||(p=O(d,"click",v),b=!0)},p(w,g){n=w,g[0]&512&&l!==(l=n[119].title+"")&&G(i,l),g[0]&512&&r!==(r=n[119].type+"")&&G(c,r)},d(w){w&&m(e),b=!1,p()}}}function Ft(n){let e,t,l=n[30].items.length+"",i,s,r;return{c(){e=f("button"),t=I("Вставить "),i=I(l),o(e,"class","btn svelte-1rwjkun")},m(c,u){k(c,e,u),a(e,t),a(e,i),s||(r=O(e,"click",n[45]),s=!0)},p(c,u){u[0]&1073741824&&l!==(l=c[30].items.length+"")&&G(i,l)},d(c){c&&m(e),s=!1,r()}}}function yi(n){let e,t,l,i,s,r,c;const u=[Mi,Ci],d=[];function _(w,g){return w[24].length>0?0:1}e=_(n),t=d[e]=u[e](n);const b=[Si,Ni],p=[];function v(w,g){return w[25].length===0?0:1}return i=v(n),s=p[i]=b[i](n),{c(){t.c(),l=j(),s.c(),r=ae()},m(w,g){d[e].m(w,g),k(w,l,g),p[i].m(w,g),k(w,r,g),c=!0},p(w,g){let y=e;e=_(w),e===y?d[e].p(w,g):(_e(),ie(d[y],1,1,()=>{d[y]=null}),me(),t=d[e],t?t.p(w,g):(t=d[e]=u[e](w),t.c()),ne(t,1),t.m(l.parentNode,l));let N=i;i=v(w),i===N?p[i].p(w,g):(_e(),ie(p[N],1,1,()=>{p[N]=null}),me(),s=p[i],s?s.p(w,g):(s=p[i]=b[i](w),s.c()),ne(s,1),s.m(r.parentNode,r))},i(w){c||(ne(t),ne(s),c=!0)},o(w){ie(t),ie(s),c=!1},d(w){w&&(m(l),m(r)),d[e].d(w),p[i].d(w)}}}function ji(n){let e;return{c(){e=f("div"),e.innerHTML='Загрузка...
',o(e,"class","empty-state svelte-1rwjkun")},m(t,l){k(t,e,l)},p:K,i:K,o:K,d(t){t&&m(e)}}}function Ci(n){let e,t;return e=new sl({props:{crumbs:[{name:"Files"}]}}),{c(){ye(e.$$.fragment)},m(l,i){ve(e,l,i),t=!0},p:K,i(l){t||(ne(e.$$.fragment,l),t=!0)},o(l){ie(e.$$.fragment,l),t=!1},d(l){ke(e,l)}}}function Mi(n){let e,t,l,i,s,r;return e=new sl({props:{crumbs:[{name:"Files"},...n[24]]}}),e.$on("navigate",n[75]),{c(){ye(e.$$.fragment),t=j(),l=f("button"),l.textContent="← Back",o(l,"class","btn btn-sm back-btn svelte-1rwjkun")},m(c,u){ve(e,c,u),k(c,t,u),k(c,l,u),i=!0,s||(r=O(l,"click",n[36]),s=!0)},p(c,u){const d={};u[0]&16777216&&(d.crumbs=[{name:"Files"},...c[24]]),e.$set(d)},i(c){i||(ne(e.$$.fragment,c),i=!0)},o(c){ie(e.$$.fragment,c),i=!1},d(c){c&&(m(t),m(l)),ke(e,c),s=!1,r()}}}function Ni(n){let e,t=[],l=new Map,i,s=te(n[25]);const r=c=>c[116].id;for(let c=0;c0?"В этой папке пока нет файлов":"В этом проекте пока нет файлов",r,c,u,d,_,b,p,v,w,g;return{c(){e=f("div"),t=f("div"),t.innerHTML=' ',l=j(),i=f("p"),r=I(s),c=j(),u=f("p"),u.textContent="Добавьте файл или папку, чтобы сохранить материалы проекта.",d=j(),_=f("div"),b=f("button"),b.textContent="Добавить файл",p=j(),v=f("button"),v.textContent="Добавить папку",o(t,"class","empty-icon svelte-1rwjkun"),o(i,"class","svelte-1rwjkun"),o(u,"class","hint svelte-1rwjkun"),o(b,"class","btn btn-primary svelte-1rwjkun"),o(v,"class","btn svelte-1rwjkun"),o(_,"class","empty-actions svelte-1rwjkun"),o(e,"class","empty-state svelte-1rwjkun")},m(y,N){k(y,e,N),a(e,t),a(e,l),a(e,i),a(i,r),a(e,c),a(e,u),a(e,d),a(e,_),a(_,b),a(_,p),a(_,v),w||(g=[O(b,"click",n[57]),O(v,"click",n[58])],w=!0)},p(y,N){N[0]&16777216&&s!==(s=y[24].length>0?"В этой папке пока нет файлов":"В этом проекте пока нет файлов")&&G(r,s)},i:K,o:K,d(y){y&&m(e),w=!1,se(g)}}}function It(n,e){let t,l,i;return l=new Vn({props:{item:e[116]}}),l.$on("navigate",e[76]),l.$on("preview",e[77]),l.$on("openExternal",e[78]),l.$on("delete",e[79]),l.$on("rename",e[80]),l.$on("duplicate",e[81]),l.$on("cut",e[82]),l.$on("copy",e[83]),{key:n,first:null,c(){t=ae(),ye(l.$$.fragment),this.first=t},m(s,r){k(s,t,r),ve(l,s,r),i=!0},p(s,r){e=s;const c={};r[0]&33554432&&(c.item=e[116]),l.$set(c)},i(s){i||(ne(l.$$.fragment,s),i=!0)},o(s){ie(l.$$.fragment,s),i=!1},d(s){s&&m(t),ke(l,s)}}}function Pt(n){let e;return{c(){e=f("div"),e.innerHTML='Сканирование...
',o(e,"class","empty-state svelte-1rwjkun")},m(t,l){k(t,e,l)},d(t){t&&m(e)}}}function Ot(n){let e,t;return e=new li({props:{item:n[26],content:n[27],loading:n[28],error:n[29]}}),e.$on("close",n[39]),e.$on("openExternal",n[84]),{c(){ye(e.$$.fragment)},m(l,i){ve(e,l,i),t=!0},p(l,i){const s={};i[0]&67108864&&(s.item=l[26]),i[0]&134217728&&(s.content=l[27]),i[0]&268435456&&(s.loading=l[28]),i[0]&536870912&&(s.error=l[29]),e.$set(s)},i(l){t||(ne(e.$$.fragment,l),t=!0)},o(l){ie(e.$$.fragment,l),t=!1},d(l){ke(e,l)}}}function Tt(n){let e,t,l,i,s,r,c,u,d;return{c(){e=f("div"),t=f("input"),l=j(),i=f("div"),s=f("button"),s.textContent="Создать",r=j(),c=f("button"),c.textContent="Отмена",o(t,"type","text"),o(t,"placeholder","Название заметки"),o(t,"class","svelte-1rwjkun"),o(s,"class","btn btn-primary svelte-1rwjkun"),o(c,"class","btn svelte-1rwjkun"),o(i,"class","form-actions svelte-1rwjkun"),o(e,"class","create-form svelte-1rwjkun")},m(_,b){k(_,e,b),a(e,t),ce(t,n[17]),a(e,l),a(e,i),a(i,s),a(i,r),a(i,c),u||(d=[O(t,"input",n[72]),O(t,"keydown",n[73]),O(s,"click",n[51]),O(c,"click",n[50])],u=!0)},p(_,b){b[0]&131072&&t.value!==_[17]&&ce(t,_[17])},d(_){_&&m(e),u=!1,se(d)}}}function Ei(n){let e,t=te(n[7]),l=[];for(let i=0;iНет заметокСоздайте первую заметку для этого дела.
',o(e,"class","empty-state svelte-1rwjkun")},m(t,l){k(t,e,l)},p:K,d(t){t&&m(e)}}}function zt(n){let e,t,l=n[111].title+"",i,s,r,c=fe(n[111].createdAt)+"",u,d,_,b;function p(){return n[74](n[111])}return{c(){e=f("div"),t=f("div"),i=I(l),s=j(),r=f("div"),u=I(c),d=j(),o(t,"class","note-card-title svelte-1rwjkun"),o(r,"class","note-card-date svelte-1rwjkun"),o(e,"class","note-card svelte-1rwjkun")},m(v,w){k(v,e,w),a(e,t),a(t,i),a(e,s),a(e,r),a(r,u),a(e,d),_||(b=O(e,"click",p),_=!0)},p(v,w){n=v,w[0]&128&&l!==(l=n[111].title+"")&&G(i,l),w[0]&128&&c!==(c=fe(n[111].createdAt)+"")&&G(u,c)},d(v){v&&m(e),_=!1,b()}}}function At(n){let e,t,l,i=te(n[7].slice(0,5)),s=[];for(let r=0;rn[90].call(v)),o(_,"class","form-group svelte-1rwjkun"),o(y,"class","btn btn-primary svelte-1rwjkun"),o(B,"class","btn svelte-1rwjkun"),o(g,"class","modal-actions svelte-1rwjkun"),o(t,"class","modal svelte-1rwjkun"),o(e,"class","modal-overlay svelte-1rwjkun")},m(L,P){k(L,e,P),a(e,t),a(t,l),a(t,i),a(t,s),a(s,r),a(s,c),a(s,u),ce(u,n[14]),a(t,d),a(t,_),a(_,b),a(_,p),a(_,v);for(let C=0;C⚒ Верстак ',i=j(),s=f("nav"),r=f("div"),c=f("div"),c.textContent="Разделы",u=j();for(let M=0;M{Q[le]=null}),me(),A=Q[S],A?A.p(M,Y):(A=Q[S]=$[S](M),A.c()),ne(A,1),A.m(g,T)),!M[8]&&!M[5]?J?J.p(M,Y):(J=Wt(M),J.c(),J.m(g,L)):J&&(J.d(1),J=null),M[13]?X?X.p(M,Y):(X=Rt(M),X.c(),X.m(g,P)):X&&(X.d(1),X=null),M[21]&&M[20]?H?H.p(M,Y):(H=Gt(M),H.c(),H.m(g,null)):H&&(H.d(1),H=null)},i(M){C||(ne(A),C=!0)},o(M){ie(A),C=!1},d(M){M&&m(e),ue(q,M),V&&V.d(),U.d(),z&&z.d(),Q[S].d(),J&&J.d(),X&&X.d(),H&&H.d()}}}function ee(n,...e){try{if(window.go&&window.go.main&&window.go.main.App){const t=window.go.main.App[n];if(typeof t=="function")return t(...e)}}catch(t){console.error("Wails call error:",n,t)}return Promise.reject(new Error("Wails not connected: "+n))}function fe(n){if(!n)return"";try{return new Date(n).toLocaleDateString("ru-RU",{day:"numeric",month:"short"})}catch{return n}}const Jt=n=>n.id!=="today"&&n.id!=="inbox";function Ii(n,e,t){let l=[],i=[],s="",r="",c="",u=null,d="overview",_=[],b=null,p=[],v=[],w=[],g="",y="",N=!1,B="",R="clients",S=!1,A="",T=!0,L=!1,P=null,C=!1,E="",q=!1,V=null,x=[],Z=[],U=null,z="",$=!1,Q="",D={items:[],mode:"copy"};const J=[{id:"overview",label:"Обзор"},{id:"notes",label:"Заметки"},{id:"files",label:"Файлы"},{id:"actions",label:"Действия"},{id:"worklog",label:"Журнал"},{id:"activity",label:"Активность"}];let X=null;Yt(async()=>{try{t(2,s=await ee("VerstakVersion")||"verstak-gui/v2"),t(0,l=await ee("ListSections")||[])}catch(h){t(3,r=String(h)),t(0,l=[{id:"today",label:"Сегодня"},{id:"inbox",label:"Неразобранное"},{id:"clients",label:"Клиенты"},{id:"projects",label:"Проекты"},{id:"recipes",label:"Рецепты"},{id:"documents",label:"Документы"},{id:"archive",label:"Архив"}])}window.runtime&&window.runtime.EventsOn&&(window.runtime.EventsOn("files-dropped",hl),X=()=>window.runtime.EventsOff("files-dropped")),t(18,T=!1)}),Qt(()=>{X&&X()});async function H(h){t(4,c=h),t(5,u=null),t(6,d="overview"),t(7,_=[]),p=[],t(9,v=[]),t(10,w=[]),t(13,N=!1),t(3,r="");try{t(1,i=await ee("ListNodesBySection",h)||[])}catch(F){t(3,r=String(F)),t(1,i=[])}}async function M(h){t(5,u=h),t(6,d="overview"),t(7,_=[]),p=[],t(9,v=[]),t(10,w=[]),t(25,Z=[]),t(24,x=[]),t(23,V=null),t(26,U=null),t(27,z=""),t(8,b=null),t(13,N=!1),t(16,S=!1),t(3,r=""),await Y(h.id)}async function Y(h){try{t(7,_=await ee("ListNotes",h)||[])}catch{}try{p=await ee("ListFiles",h)||[]}catch{}try{t(9,v=await ee("ListActions",h)||[])}catch{}try{t(10,w=await ee("ListWorklog",h)||[])}catch{}}async function le(h){t(22,q=!0);try{let F=await ee("ListItems",h)||[];F.sort((oe,be)=>oe.type!==be.type?oe.type==="folder"?-1:1:(oe.name||"").localeCompare(be.name||"")),t(25,Z=F)}catch{t(25,Z=[])}t(22,q=!1)}async function re(h){if(u){try{const F=await ee("GetNodeDetail",h);F&&t(24,x=[...x,{id:h,name:F.title}])}catch{t(24,x=[...x,{id:h,name:"..."}])}t(23,V=h),await le(h)}}function Ee(){if(x.length<2)t(24,x=[]),t(23,V=null),le(u.id);else{const h=x[x.length-2];t(24,x=x.slice(0,-1)),t(23,V=h.id),le(h.id)}}function Ge(h){const F=x[h];t(24,x=x.slice(0,h+1)),t(23,V=F.id),le(F.id)}async function Ke(h){t(26,U=h),t(27,z=""),t(29,Q=""),t(28,$=!0);try{Pn(h)?t(27,z=await ee("GetFileBase64",h.fileId)||""):On(h)&&t(27,z=await ee("ReadFileText",h.fileId)||"")}catch(F){t(29,Q=String(F))}t(28,$=!1)}function rl(){t(26,U=null),t(27,z=""),t(29,Q="")}async function ol(){const h=prompt("Введите имя файла:");if(!(!h||!h.trim()))try{const F=V||u.id;await ee("CreateEmptyFile",F,h.trim()),await le(F)}catch(F){t(3,r=String(F))}}async function Je(h){try{await ee("DuplicateNode",h);const F=V||u.id;await le(F)}catch(F){t(3,r=String(F))}}function Ue(h){const F=prompt("Новое имя:");!F||!F.trim()||cl(h,F.trim())}async function cl(h,F){try{await ee("RenameNode",h,F);const oe=V||u.id;await le(oe)}catch(oe){t(3,r=String(oe))}}function Ze(h){t(30,D={items:[h],mode:"cut"})}function Xe(h){t(30,D={items:[h],mode:"copy"})}async function ul(){if(D.items.length===0)return;const h=V||u.id;try{if(D.mode==="copy")for(const F of D.items)await ee("DuplicateNode",F);else for(const F of D.items)await ee("MoveNode",F,h);t(30,D={items:[],mode:"copy"}),await le(h)}catch(F){t(3,r=String(F))}}function al(){t(13,N=!0),t(14,B=""),t(15,R=c||"clients")}function fl(){t(13,N=!1),t(14,B="")}async function Ye(){if(B.trim())try{const h=await ee("CreateNode","","case",B.trim(),R);t(13,N=!1),t(14,B=""),await H(R)}catch(h){t(3,r=String(h))}}function Qe(){t(16,S=!0),t(17,A="")}function dl(){t(16,S=!1),t(17,A="")}async function xe(){if(!(!A.trim()||!u))try{const h=await ee("CreateNote",u.id,A.trim());t(7,_=[..._,h&&h.id?h:{id:Date.now().toString(),title:A.trim(),createdAt:new Date().toISOString()}]),t(16,S=!1),t(17,A="")}catch{const F={id:Date.now().toString(),title:A.trim(),createdAt:new Date().toISOString()};t(7,_=[..._,F]),t(16,S=!1),t(17,A="")}}async function ze(h){if(!(b&&b.dirty&&!confirm("Несохранённые изменения. Закрыть?")))try{const F=await ee("ReadNote",h.id);t(8,b={id:h.id,title:h.title,content:F||"",dirty:!1})}catch{t(8,b={id:h.id,title:h.title,content:"# "+h.title+`
+
+`,dirty:!1})}}function pl(){b&&b.dirty&&!confirm("Несохранённые изменения. Закрыть?")||t(8,b=null)}function _l(h){b&&(t(8,b.content=h.target.value,b),t(8,b.dirty=!0,b))}async function ml(){if(b)try{await ee("SaveNote",b.id,b.content),t(8,b.dirty=!1,b)}catch{t(8,b.dirty=!1,b)}}async function vl(){const h=parseInt(g,10);if(!(!y.trim()||isNaN(h)||h<=0||!u)){try{const F=await ee("CreateWorklog",u.id,y.trim(),h);t(10,w=[...w,F&&F.id?F:{id:Date.now().toString(),nodeId:u.id,summary:y.trim(),minutes:h,createdAt:new Date().toISOString()}])}catch{t(10,w=[...w,{id:Date.now().toString(),nodeId:u.id,summary:y.trim(),minutes:h,createdAt:new Date().toISOString()}])}t(12,y=""),t(11,g="")}}async function $e(){const h=await ee("PickFile");h&&await Ae(u.id,h)}async function kl(){const h=await ee("PickDirectory");h&&await Ae(u.id,h)}async function Ae(h,F){t(19,L=!0);try{const oe=await ee("PreviewImport",F);t(20,P=oe),E=F,t(21,C=!0)}catch(oe){t(3,r=String(oe))}t(19,L=!1)}async function Be(h){try{const F=h==="copy"?await ee("AddPathCopy",u.id,E):await ee("AddPathLink",u.id,E);t(21,C=!1),t(20,P=null),t(24,x=[]),t(23,V=null),await Promise.all([Y(u.id),le(u.id)])}catch(F){t(3,r=String(F))}}function bl(){t(21,C=!1),t(20,P=null)}async function et({id:h,type:F}){if(confirm(`Удалить ${F==="folder"?"папку":"файл"}?`))try{await ee("DeleteFileOrFolder",h),p=p.filter(Xl=>Xl.nodeId!==h);const be=V||u.id;await le(be)}catch(be){t(3,r=String(be))}}async function hl(h){if(!h||h.length===0)return;if(!u){t(3,r="Сначала выберите дело для добавления файлов");return}const F=h[0];await Ae(u.id,F)}function wl(h){return d===h?"tab active":"tab"}const gl=h=>H(h.id),yl=h=>M(h),jl=()=>t(3,r="");function Cl(){b.content=this.value,t(8,b)}const Ml=h=>{t(6,d=h.id),h.id==="files"&&u&&Z.length===0&&!V&&le(u.id)},Nl=()=>{t(6,d="notes"),Qe()},Sl=()=>{t(6,d="files"),$e()},El=()=>t(6,d="worklog"),Ll=h=>ze(h);function Fl(){A=this.value,t(17,A)}const Il=h=>h.key==="Enter"&&xe(),Pl=h=>ze(h),Ol=h=>{const F=h.detail;F===0?(t(24,x=[]),t(23,V=null),le(u.id)):Ge(F-1)},Tl=h=>re(h.detail),zl=h=>Ke(h.detail),Al=h=>ee("OpenFile",h.detail),Bl=h=>et(h.detail),Dl=h=>Ue(h.detail.id),Hl=h=>Je(h.detail),Vl=h=>Ze(h.detail),Wl=h=>Xe(h.detail),Rl=h=>ee("OpenFile",h.detail),ql=h=>ee("RunAction",h.id);function Gl(){y=this.value,t(12,y)}function Kl(){g=Xt(this.value),t(11,g)}function Jl(){B=this.value,t(14,B)}const Ul=h=>h.key==="Enter"&&Ye();function Zl(){R=tn(this),t(15,R),t(0,l)}return[l,i,s,r,c,u,d,_,b,v,w,g,y,N,B,R,S,A,T,L,P,C,q,V,x,Z,U,z,$,Q,D,J,H,M,le,re,Ee,Ge,Ke,rl,ol,Je,Ue,Ze,Xe,ul,al,fl,Ye,Qe,dl,xe,ze,pl,_l,ml,vl,$e,kl,Be,bl,et,wl,gl,yl,jl,Cl,Ml,Nl,Sl,El,Ll,Fl,Il,Pl,Ol,Tl,zl,Al,Bl,Dl,Hl,Vl,Wl,Rl,ql,Gl,Kl,Jl,Ul,Zl,()=>Be("copy"),()=>Be("link")]}class Pi extends Se{constructor(e){super(),Ne(this,e,Ii,Fi,Me,{},null,[-1,-1,-1,-1,-1])}}new Pi({target:document.getElementById("app")});
diff --git a/cmd/verstak-gui/frontend-dist/assets/main-DTAZ0AQ4.css b/cmd/verstak-gui/frontend-dist/assets/main-DTAZ0AQ4.css
new file mode 100644
index 0000000..f19a8e4
--- /dev/null
+++ b/cmd/verstak-gui/frontend-dist/assets/main-DTAZ0AQ4.css
@@ -0,0 +1 @@
+.file-actions.svelte-7ixqek{display:flex;gap:2px;align-items:center;opacity:0;transition:opacity .15s ease}.file-row:hover .file-actions.svelte-7ixqek{opacity:1}.action-btn.svelte-7ixqek{display:flex;align-items:center;justify-content:center;width:28px;height:28px;border:none;border-radius:4px;background:transparent;color:#666;cursor:pointer;transition:background .12s,color .12s}.action-btn.svelte-7ixqek:hover{background:#2a2a3c;color:#ccc}.action-btn-danger.svelte-7ixqek:hover{background:#3a2222;color:#ff6b6b}.action-btn.svelte-7ixqek:focus-visible{outline:2px solid #5588ff;outline-offset:1px}.file-row.svelte-1fc98j1{display:flex;align-items:center;gap:10px;padding:8px 12px;border-radius:6px;cursor:default;transition:background .12s;min-height:48px}.file-row.svelte-1fc98j1:hover{background:#1e1e30}.file-row--folder.svelte-1fc98j1{cursor:pointer}.file-row-left.svelte-1fc98j1{display:flex;align-items:center;gap:6px;flex-shrink:0;color:#888}.expand-toggle.svelte-1fc98j1{display:flex;align-items:center;justify-content:center;width:16px;height:16px;padding:0;border:none;background:transparent;color:#777;cursor:pointer;border-radius:3px;transition:color .12s,background .12s}.expand-toggle.svelte-1fc98j1:hover{color:#ccc;background:#2a2a3c}.expand-toggle.svelte-1fc98j1:focus-visible{outline:2px solid #5588ff;outline-offset:1px}.expand-spacer.svelte-1fc98j1{width:16px;flex-shrink:0}.file-row-body.svelte-1fc98j1{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}.file-row-name.svelte-1fc98j1{font-size:13px;color:#ddd;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:1.3}.file-row-meta.svelte-1fc98j1{display:flex;align-items:center;gap:4px;font-size:11px;color:#666}.meta-sep.svelte-1fc98j1{color:#444}@keyframes svelte-1fc98j1-spin{to{transform:rotate(360deg)}}.spin.svelte-1fc98j1{animation:svelte-1fc98j1-spin 1s linear infinite}.svelte-1dzzaxf.svelte-1dzzaxf,.svelte-1dzzaxf.svelte-1dzzaxf:before,.svelte-1dzzaxf.svelte-1dzzaxf:after{box-sizing:border-box;margin:0;padding:0}.app.svelte-1dzzaxf.svelte-1dzzaxf{display:flex;width:100vw;height:100vh;overflow:hidden;background:#13131f;color:#e4e4ef;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;font-size:14px}.sidebar.svelte-1dzzaxf.svelte-1dzzaxf{width:260px;min-width:200px;height:100vh;display:flex;flex-direction:column;background:#1a1a28;border-right:1px solid #2a2a3c;flex-shrink:0;overflow:hidden}.sidebar-brand.svelte-1dzzaxf.svelte-1dzzaxf{padding:16px 20px;display:flex;align-items:center;gap:10px;border-bottom:1px solid #2a2a3c;flex-shrink:0}.logo.svelte-1dzzaxf.svelte-1dzzaxf{font-size:20px;line-height:1}.brand-name.svelte-1dzzaxf.svelte-1dzzaxf{font-size:16px;font-weight:600}.sidebar-nav.svelte-1dzzaxf.svelte-1dzzaxf{flex:1;overflow-y:auto;padding:12px 0}.nav-group.svelte-1dzzaxf.svelte-1dzzaxf{margin-bottom:16px}.nav-label.svelte-1dzzaxf.svelte-1dzzaxf{font-size:10px;text-transform:uppercase;letter-spacing:.5px;color:#666;padding:4px 20px;margin-bottom:4px}.nav-item.svelte-1dzzaxf.svelte-1dzzaxf{display:block;width:100%;padding:8px 20px;border:none;background:none;color:#ccc;font-size:13px;text-align:left;cursor:pointer;border-radius:0;font-family:inherit}.nav-item.svelte-1dzzaxf.svelte-1dzzaxf:hover{background:#223}.nav-item.selected.svelte-1dzzaxf.svelte-1dzzaxf{background:#2a2a4a;color:#fff;font-weight:500}.nav-empty.svelte-1dzzaxf.svelte-1dzzaxf{padding:8px 20px;color:#555;font-size:12px}.sidebar-footer.svelte-1dzzaxf.svelte-1dzzaxf{padding:12px 20px;border-top:1px solid #2a2a3c;flex-shrink:0}.version.svelte-1dzzaxf.svelte-1dzzaxf{font-size:11px;color:#555}.main.svelte-1dzzaxf.svelte-1dzzaxf{flex:1;display:flex;flex-direction:column;height:100vh;min-width:0;overflow:hidden;background:#13131f}.header.svelte-1dzzaxf.svelte-1dzzaxf{padding:12px 24px;border-bottom:1px solid #2a2a3c;display:flex;align-items:center;flex-shrink:0;min-height:48px}.crumb.svelte-1dzzaxf.svelte-1dzzaxf{font-size:14px;font-weight:500}.crumb.placeholder.svelte-1dzzaxf.svelte-1dzzaxf{color:#666}.crumb-type.svelte-1dzzaxf.svelte-1dzzaxf{font-size:11px;color:#555;background:#1e1e2e;padding:2px 8px;border-radius:10px;margin-left:8px}.error-banner.svelte-1dzzaxf.svelte-1dzzaxf{background:#3a2222;color:#f88;padding:8px 24px;font-size:12px;border-bottom:1px solid #4a2222;flex-shrink:0;cursor:pointer;display:flex;justify-content:space-between}.dismiss.svelte-1dzzaxf.svelte-1dzzaxf{opacity:.6}.tabs.svelte-1dzzaxf.svelte-1dzzaxf{display:flex;border-bottom:1px solid #2a2a3c;flex-shrink:0;padding:0 24px}.tab.svelte-1dzzaxf.svelte-1dzzaxf{padding:10px 16px;border:none;background:none;color:#888;font-size:13px;cursor:pointer;border-bottom:2px solid transparent;font-family:inherit}.tab.svelte-1dzzaxf.svelte-1dzzaxf:hover{color:#ccc}.tab.active.svelte-1dzzaxf.svelte-1dzzaxf{color:#e4e4ef;border-bottom-color:#6366f1}.tab-content.svelte-1dzzaxf.svelte-1dzzaxf{flex:1;overflow-y:auto}.note-editor.svelte-1dzzaxf.svelte-1dzzaxf{flex:1;display:flex;flex-direction:column;height:100%}.note-editor-header.svelte-1dzzaxf.svelte-1dzzaxf{padding:12px 24px;border-bottom:1px solid #2a2a3c;display:flex;align-items:center;gap:12px;flex-shrink:0}.note-title.svelte-1dzzaxf.svelte-1dzzaxf{font-size:16px;font-weight:500}.dirty-mark.svelte-1dzzaxf.svelte-1dzzaxf{color:#f59e0b;font-size:10px}.note-editor-actions.svelte-1dzzaxf.svelte-1dzzaxf{margin-left:auto;display:flex;gap:8px}.note-textarea.svelte-1dzzaxf.svelte-1dzzaxf{flex:1;width:100%;border:none;outline:none;background:#13131f;color:#e4e4ef;font-family:SF Mono,Fira Code,monospace;font-size:14px;line-height:1.6;padding:24px;resize:none}.overview.svelte-1dzzaxf.svelte-1dzzaxf{padding:24px}.overview.svelte-1dzzaxf h2.svelte-1dzzaxf{font-size:24px;margin-bottom:16px}.meta-grid.svelte-1dzzaxf.svelte-1dzzaxf{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:12px;margin-bottom:24px}.meta-item.svelte-1dzzaxf.svelte-1dzzaxf{background:#1a1a28;padding:12px 16px;border-radius:8px}.meta-label.svelte-1dzzaxf.svelte-1dzzaxf{display:block;font-size:11px;color:#666;margin-bottom:4px;text-transform:uppercase}.quick-actions.svelte-1dzzaxf.svelte-1dzzaxf{display:flex;gap:8px;margin-bottom:24px;flex-wrap:wrap}.qa-btn.svelte-1dzzaxf.svelte-1dzzaxf{padding:10px 16px;border:1px solid #2a2a3c;background:#1a1a28;color:#ccc;border-radius:8px;cursor:pointer;font-size:13px;font-family:inherit}.qa-btn.svelte-1dzzaxf.svelte-1dzzaxf:hover{background:#223}.qa-btn.svelte-1dzzaxf.svelte-1dzzaxf:disabled{opacity:.4;cursor:not-allowed}.recent-section.svelte-1dzzaxf.svelte-1dzzaxf{margin-bottom:24px}.recent-section.svelte-1dzzaxf h3.svelte-1dzzaxf{font-size:13px;color:#666;text-transform:uppercase;margin-bottom:8px}.recent-note.svelte-1dzzaxf.svelte-1dzzaxf{padding:8px 12px;border-radius:6px;cursor:pointer;display:flex;justify-content:space-between}.recent-note.svelte-1dzzaxf.svelte-1dzzaxf:hover{background:#1a1a28}.recent-date.svelte-1dzzaxf.svelte-1dzzaxf{font-size:11px;color:#555}.recent-entry.svelte-1dzzaxf.svelte-1dzzaxf{padding:6px 0;font-size:13px;color:#888;border-bottom:1px solid #1a1a28}.notes-tab.svelte-1dzzaxf.svelte-1dzzaxf{padding:24px}.tab-toolbar.svelte-1dzzaxf.svelte-1dzzaxf{margin-bottom:16px}.create-form.svelte-1dzzaxf.svelte-1dzzaxf{background:#1a1a28;padding:16px;border-radius:8px;margin-bottom:16px}.create-form.svelte-1dzzaxf input.svelte-1dzzaxf{width:100%;padding:8px 12px;border:1px solid #2a2a3c;background:#13131f;color:#e4e4ef;border-radius:4px;font-size:14px;font-family:inherit;margin-bottom:8px}.create-form.svelte-1dzzaxf input.svelte-1dzzaxf:focus{outline:none;border-color:#6366f1}.form-actions.svelte-1dzzaxf.svelte-1dzzaxf{display:flex;gap:8px}.notes-list.svelte-1dzzaxf.svelte-1dzzaxf{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:12px}.note-card.svelte-1dzzaxf.svelte-1dzzaxf{background:#1a1a28;border:1px solid #2a2a3c;border-radius:8px;padding:16px;cursor:pointer}.note-card.svelte-1dzzaxf.svelte-1dzzaxf:hover{border-color:#3a3a5c}.note-card-title.svelte-1dzzaxf.svelte-1dzzaxf{font-size:14px;font-weight:500;margin-bottom:4px}.note-card-date.svelte-1dzzaxf.svelte-1dzzaxf{font-size:11px;color:#555}.worklog-tab.svelte-1dzzaxf.svelte-1dzzaxf{padding:24px}.worklog-form.svelte-1dzzaxf.svelte-1dzzaxf{display:flex;gap:8px;margin-bottom:24px;align-items:center}.worklog-form.svelte-1dzzaxf input.svelte-1dzzaxf{padding:8px 12px;border:1px solid #2a2a3c;background:#13131f;color:#e4e4ef;border-radius:4px;font-size:14px;font-family:inherit}.worklog-form.svelte-1dzzaxf input.svelte-1dzzaxf:focus{outline:none;border-color:#6366f1}.worklog-form.svelte-1dzzaxf input[type=text].svelte-1dzzaxf{flex:1}.worklog-form.svelte-1dzzaxf input[type=number].svelte-1dzzaxf{width:70px}.worklog-entry.svelte-1dzzaxf.svelte-1dzzaxf{padding:12px 0;border-bottom:1px solid #1a1a28}.wl-meta.svelte-1dzzaxf.svelte-1dzzaxf{font-size:11px;color:#555;margin-top:2px}.action-card.svelte-1dzzaxf.svelte-1dzzaxf{background:#1a1a28;padding:12px 16px;border-radius:8px;display:flex;align-items:center;gap:12px;margin-bottom:8px}.action-type.svelte-1dzzaxf.svelte-1dzzaxf{font-size:11px;color:#888;background:#223;padding:2px 8px;border-radius:10px}.empty-state.svelte-1dzzaxf.svelte-1dzzaxf{padding:48px 24px;text-align:center}.empty-state.svelte-1dzzaxf p.svelte-1dzzaxf{color:#666;margin-bottom:8px}.hint.svelte-1dzzaxf.svelte-1dzzaxf{font-size:13px;color:#555}.empty-actions.svelte-1dzzaxf.svelte-1dzzaxf{display:flex;gap:8px;justify-content:center;margin:16px 0}.empty-note.svelte-1dzzaxf.svelte-1dzzaxf{font-size:12px;color:#444;margin-top:16px}.welcome.svelte-1dzzaxf.svelte-1dzzaxf{padding:48px 24px;text-align:center}.welcome.svelte-1dzzaxf h2.svelte-1dzzaxf{font-size:32px;font-weight:300;color:#8888a4;margin-bottom:16px}.welcome.svelte-1dzzaxf p.svelte-1dzzaxf{color:#666;font-size:14px}.error-text.svelte-1dzzaxf.svelte-1dzzaxf{color:#f88}.fab.svelte-1dzzaxf.svelte-1dzzaxf{position:fixed;bottom:24px;right:24px;width:56px;height:56px;border-radius:50%;background:#6366f1;color:#fff;font-size:28px;display:flex;align-items:center;justify-content:center;cursor:pointer;box-shadow:0 4px 12px #6366f166}.fab.svelte-1dzzaxf.svelte-1dzzaxf:hover{background:#4f46e5}.modal-overlay.svelte-1dzzaxf.svelte-1dzzaxf{position:fixed;top:0;right:0;bottom:0;left:0;background:#0009;display:flex;align-items:center;justify-content:center;z-index:100}.modal.svelte-1dzzaxf.svelte-1dzzaxf{background:#1a1a28;border:1px solid #2a2a3c;border-radius:12px;padding:24px;width:400px;max-width:90vw}.modal.svelte-1dzzaxf h3.svelte-1dzzaxf{font-size:18px;margin-bottom:16px}.form-group.svelte-1dzzaxf.svelte-1dzzaxf{margin-bottom:12px}.form-group.svelte-1dzzaxf label.svelte-1dzzaxf{display:block;font-size:12px;color:#666;margin-bottom:4px}.form-group.svelte-1dzzaxf input.svelte-1dzzaxf,.form-group.svelte-1dzzaxf select.svelte-1dzzaxf{width:100%;padding:8px 12px;border:1px solid #2a2a3c;background:#13131f;color:#e4e4ef;border-radius:4px;font-size:14px;font-family:inherit}.form-group.svelte-1dzzaxf select.svelte-1dzzaxf{-moz-appearance:none;appearance:none;-webkit-appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%23888' d='M2 4l4 4 4-4'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 10px center;padding-right:32px}.form-group.svelte-1dzzaxf input.svelte-1dzzaxf:focus,.form-group.svelte-1dzzaxf select.svelte-1dzzaxf:focus{outline:none;border-color:#6366f1}.modal-actions.svelte-1dzzaxf.svelte-1dzzaxf{display:flex;gap:8px;justify-content:flex-end;margin-top:16px}.btn.svelte-1dzzaxf.svelte-1dzzaxf{padding:8px 16px;border:1px solid #2a2a3c;background:#1a1a28;color:#ccc;border-radius:6px;cursor:pointer;font-size:13px;font-family:inherit}.btn.svelte-1dzzaxf.svelte-1dzzaxf:hover{background:#223}.btn-primary.svelte-1dzzaxf.svelte-1dzzaxf{background:#6366f1;border-color:#6366f1;color:#fff}.btn-primary.svelte-1dzzaxf.svelte-1dzzaxf:hover{background:#4f46e5}.btn.svelte-1dzzaxf.svelte-1dzzaxf:disabled{opacity:.4;cursor:not-allowed}.btn-sm.svelte-1dzzaxf.svelte-1dzzaxf{padding:4px 10px;font-size:12px}.btn-danger.svelte-1dzzaxf.svelte-1dzzaxf{color:#ff6b6b;border-color:#4a2222}.btn-danger.svelte-1dzzaxf.svelte-1dzzaxf:hover{background:#3a2222}.files-tab.svelte-1dzzaxf.svelte-1dzzaxf{padding:20px}.files-tab.svelte-1dzzaxf .tab-toolbar.svelte-1dzzaxf{display:flex;gap:8px;align-items:center;margin-bottom:16px}.empty-state.svelte-1dzzaxf.svelte-1dzzaxf{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:48px 24px;text-align:center}.empty-state.svelte-1dzzaxf p.svelte-1dzzaxf{margin:0;font-size:14px;color:#666}.empty-state.svelte-1dzzaxf .empty-icon.svelte-1dzzaxf{margin-bottom:12px;color:#444}.empty-state.svelte-1dzzaxf .hint.svelte-1dzzaxf{margin-top:6px;font-size:12px;color:#555}.empty-state.svelte-1dzzaxf .empty-actions.svelte-1dzzaxf{display:flex;gap:8px;margin-top:16px}.import-summary.svelte-1dzzaxf.svelte-1dzzaxf{margin-bottom:16px}.summary-row.svelte-1dzzaxf.svelte-1dzzaxf{display:flex;justify-content:space-between;padding:6px 0;font-size:14px;border-bottom:1px solid #2a2a3c}.summary-warn.svelte-1dzzaxf.svelte-1dzzaxf{margin-top:8px;padding:8px 12px;background:#3a2a22;border-radius:6px;color:#fa6;font-size:13px}
diff --git a/cmd/verstak-gui/frontend-dist/assets/main-DcPiQSbo.css b/cmd/verstak-gui/frontend-dist/assets/main-DcPiQSbo.css
new file mode 100644
index 0000000..981888b
--- /dev/null
+++ b/cmd/verstak-gui/frontend-dist/assets/main-DcPiQSbo.css
@@ -0,0 +1 @@
+.file-row.svelte-vi5rh0.svelte-vi5rh0{display:flex;align-items:center;gap:10px;padding:8px 12px;border-radius:6px;cursor:default;transition:background .12s;min-height:52px;-webkit-user-select:none;user-select:none}.file-row.svelte-vi5rh0.svelte-vi5rh0:hover{background:#1e1e30}.file-row.svelte-vi5rh0.svelte-vi5rh0:focus-visible{outline:2px solid #5588ff;outline-offset:-2px}.file-row-icon.svelte-vi5rh0.svelte-vi5rh0{flex-shrink:0;display:flex;align-items:center;justify-content:center;width:32px;height:32px;color:#888}.file-row-body.svelte-vi5rh0.svelte-vi5rh0{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}.file-row-name.svelte-vi5rh0.svelte-vi5rh0{font-size:13px;color:#ddd;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:1.3}.file-row-meta.svelte-vi5rh0.svelte-vi5rh0{display:flex;align-items:center;gap:4px;font-size:11px;color:#666}.meta-sep.svelte-vi5rh0.svelte-vi5rh0{color:#444}.file-row-actions.svelte-vi5rh0.svelte-vi5rh0{display:flex;gap:2px;align-items:center;opacity:0;transition:opacity .15s ease;flex-shrink:0}.file-row.svelte-vi5rh0:hover .file-row-actions.svelte-vi5rh0{opacity:1}.action-btn.svelte-vi5rh0.svelte-vi5rh0{display:flex;align-items:center;justify-content:center;width:28px;height:28px;border:none;border-radius:4px;background:transparent;color:#666;cursor:pointer;transition:background .12s,color .12s}.action-btn.svelte-vi5rh0.svelte-vi5rh0:hover{background:#2a2a3c;color:#ccc}.action-btn-danger.svelte-vi5rh0.svelte-vi5rh0:hover{background:#3a2222;color:#ff6b6b}.action-btn.svelte-vi5rh0.svelte-vi5rh0:focus-visible{outline:2px solid #5588ff;outline-offset:1px}.menu-backdrop.svelte-vi5rh0.svelte-vi5rh0{position:fixed;top:0;right:0;bottom:0;left:0;z-index:99}.menu.svelte-vi5rh0.svelte-vi5rh0{position:absolute;right:12px;margin-top:4px;background:#1a1a28;border:1px solid #2a2a3c;border-radius:6px;padding:4px;z-index:100;min-width:140px;box-shadow:0 4px 12px #0006}.menu-item.svelte-vi5rh0.svelte-vi5rh0{display:block;width:100%;padding:6px 12px;border:none;background:transparent;color:#ccc;font-size:12px;text-align:left;cursor:pointer;border-radius:4px;font-family:inherit}.menu-item.svelte-vi5rh0.svelte-vi5rh0:hover{background:#2a2a3c}.menu-item.svelte-vi5rh0.svelte-vi5rh0:focus-visible{outline:2px solid #5588ff;outline-offset:1px}.breadcrumbs.svelte-csi2lb{display:flex;align-items:center;gap:4px;padding:8px 0;font-size:13px;color:#999}.sep.svelte-csi2lb{color:#444}.crumb.svelte-csi2lb{font-size:13px}.crumb--current.svelte-csi2lb{color:#ccc}.crumb--link.svelte-csi2lb{background:none;border:none;padding:2px 4px;color:#888;cursor:pointer;border-radius:3px;font-family:inherit;font-size:13px;transition:color .12s,background .12s}.crumb--link.svelte-csi2lb:hover{color:#ccc;background:#1e1e30}.crumb--link.svelte-csi2lb:focus-visible{outline:2px solid #5588ff;outline-offset:1px}.overlay.svelte-1ybaoro{position:fixed;top:0;right:0;bottom:0;left:0;background:#000000a6;display:flex;align-items:center;justify-content:center;z-index:1000}.modal.svelte-1ybaoro{background:#14141f;border:1px solid #2a2a3c;border-radius:10px;width:90vw;max-width:900px;height:85vh;max-height:700px;display:flex;flex-direction:column;overflow:hidden}.preview-header.svelte-1ybaoro{display:flex;align-items:center;gap:10px;padding:12px 16px;border-bottom:1px solid #2a2a3c;flex-shrink:0}.preview-title.svelte-1ybaoro{display:flex;align-items:center;gap:8px;color:#ddd;font-size:14px;min-width:0}.preview-name.svelte-1ybaoro{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.preview-meta.svelte-1ybaoro{font-size:11px;color:#666;margin-left:auto;white-space:nowrap}.preview-actions.svelte-1ybaoro{display:flex;gap:4px;flex-shrink:0;margin-left:8px}.action-btn.svelte-1ybaoro{display:flex;align-items:center;justify-content:center;width:30px;height:30px;border:none;border-radius:4px;background:transparent;color:#666;cursor:pointer;transition:background .12s,color .12s}.action-btn.svelte-1ybaoro:hover{background:#2a2a3c;color:#ccc}.action-btn.svelte-1ybaoro:focus-visible{outline:2px solid #5588ff;outline-offset:1px}.preview-body.svelte-1ybaoro{flex:1;overflow:auto;min-height:0}.preview-status.svelte-1ybaoro{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;padding:48px 24px;color:#888;font-size:14px}.preview-image-container.svelte-1ybaoro{display:flex;align-items:center;justify-content:center;padding:16px;min-height:200px;background:#0e0e18}.preview-image.svelte-1ybaoro{max-width:100%;max-height:calc(85vh - 100px);object-fit:contain;border-radius:4px}.preview-text.svelte-1ybaoro{margin:0;padding:16px;font-family:SF Mono,Fira Code,Cascadia Code,Consolas,monospace;font-size:12px;line-height:1.5;color:#ccc;white-space:pre-wrap;word-wrap:break-word;overflow:auto}.preview-pdf-container.svelte-1ybaoro{width:100%;height:100%}.preview-pdf.svelte-1ybaoro{width:100%;height:100%;border:none}.btn-sm.svelte-1ybaoro{padding:6px 14px;border:1px solid #2a2a3c;background:#1a1a28;color:#ccc;border-radius:6px;cursor:pointer;font-size:12px;font-family:inherit;transition:background .12s}.btn-sm.svelte-1ybaoro:hover{background:#223}.svelte-1rwjkun.svelte-1rwjkun,.svelte-1rwjkun.svelte-1rwjkun:before,.svelte-1rwjkun.svelte-1rwjkun:after{box-sizing:border-box;margin:0;padding:0}.app.svelte-1rwjkun.svelte-1rwjkun{display:flex;width:100vw;height:100vh;overflow:hidden;background:#13131f;color:#e4e4ef;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;font-size:14px}.sidebar.svelte-1rwjkun.svelte-1rwjkun{width:260px;min-width:200px;height:100vh;display:flex;flex-direction:column;background:#1a1a28;border-right:1px solid #2a2a3c;flex-shrink:0;overflow:hidden}.sidebar-brand.svelte-1rwjkun.svelte-1rwjkun{padding:16px 20px;display:flex;align-items:center;gap:10px;border-bottom:1px solid #2a2a3c;flex-shrink:0}.logo.svelte-1rwjkun.svelte-1rwjkun{font-size:20px;line-height:1}.brand-name.svelte-1rwjkun.svelte-1rwjkun{font-size:16px;font-weight:600}.sidebar-nav.svelte-1rwjkun.svelte-1rwjkun{flex:1;overflow-y:auto;padding:12px 0}.nav-group.svelte-1rwjkun.svelte-1rwjkun{margin-bottom:16px}.nav-label.svelte-1rwjkun.svelte-1rwjkun{font-size:10px;text-transform:uppercase;letter-spacing:.5px;color:#666;padding:4px 20px;margin-bottom:4px}.nav-item.svelte-1rwjkun.svelte-1rwjkun{display:block;width:100%;padding:8px 20px;border:none;background:none;color:#ccc;font-size:13px;text-align:left;cursor:pointer;border-radius:0;font-family:inherit}.nav-item.svelte-1rwjkun.svelte-1rwjkun:hover{background:#223}.nav-item.selected.svelte-1rwjkun.svelte-1rwjkun{background:#2a2a4a;color:#fff;font-weight:500}.nav-empty.svelte-1rwjkun.svelte-1rwjkun{padding:8px 20px;color:#555;font-size:12px}.sidebar-footer.svelte-1rwjkun.svelte-1rwjkun{padding:12px 20px;border-top:1px solid #2a2a3c;flex-shrink:0}.version.svelte-1rwjkun.svelte-1rwjkun{font-size:11px;color:#555}.main.svelte-1rwjkun.svelte-1rwjkun{flex:1;display:flex;flex-direction:column;height:100vh;min-width:0;overflow:hidden;background:#13131f}.header.svelte-1rwjkun.svelte-1rwjkun{padding:12px 24px;border-bottom:1px solid #2a2a3c;display:flex;align-items:center;flex-shrink:0;min-height:48px}.crumb.svelte-1rwjkun.svelte-1rwjkun{font-size:14px;font-weight:500}.crumb.placeholder.svelte-1rwjkun.svelte-1rwjkun{color:#666}.crumb-type.svelte-1rwjkun.svelte-1rwjkun{font-size:11px;color:#555;background:#1e1e2e;padding:2px 8px;border-radius:10px;margin-left:8px}.error-banner.svelte-1rwjkun.svelte-1rwjkun{background:#3a2222;color:#f88;padding:8px 24px;font-size:12px;border-bottom:1px solid #4a2222;flex-shrink:0;cursor:pointer;display:flex;justify-content:space-between}.dismiss.svelte-1rwjkun.svelte-1rwjkun{opacity:.6}.tabs.svelte-1rwjkun.svelte-1rwjkun{display:flex;border-bottom:1px solid #2a2a3c;flex-shrink:0;padding:0 24px}.tab.svelte-1rwjkun.svelte-1rwjkun{padding:10px 16px;border:none;background:none;color:#888;font-size:13px;cursor:pointer;border-bottom:2px solid transparent;font-family:inherit}.tab.svelte-1rwjkun.svelte-1rwjkun:hover{color:#ccc}.tab.active.svelte-1rwjkun.svelte-1rwjkun{color:#e4e4ef;border-bottom-color:#6366f1}.tab-content.svelte-1rwjkun.svelte-1rwjkun{flex:1;overflow-y:auto}.note-editor.svelte-1rwjkun.svelte-1rwjkun{flex:1;display:flex;flex-direction:column;height:100%}.note-editor-header.svelte-1rwjkun.svelte-1rwjkun{padding:12px 24px;border-bottom:1px solid #2a2a3c;display:flex;align-items:center;gap:12px;flex-shrink:0}.note-title.svelte-1rwjkun.svelte-1rwjkun{font-size:16px;font-weight:500}.dirty-mark.svelte-1rwjkun.svelte-1rwjkun{color:#f59e0b;font-size:10px}.note-editor-actions.svelte-1rwjkun.svelte-1rwjkun{margin-left:auto;display:flex;gap:8px}.note-textarea.svelte-1rwjkun.svelte-1rwjkun{flex:1;width:100%;border:none;outline:none;background:#13131f;color:#e4e4ef;font-family:SF Mono,Fira Code,monospace;font-size:14px;line-height:1.6;padding:24px;resize:none}.overview.svelte-1rwjkun.svelte-1rwjkun{padding:24px}.overview.svelte-1rwjkun h2.svelte-1rwjkun{font-size:24px;margin-bottom:16px}.meta-grid.svelte-1rwjkun.svelte-1rwjkun{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:12px;margin-bottom:24px}.meta-item.svelte-1rwjkun.svelte-1rwjkun{background:#1a1a28;padding:12px 16px;border-radius:8px}.meta-label.svelte-1rwjkun.svelte-1rwjkun{display:block;font-size:11px;color:#666;margin-bottom:4px;text-transform:uppercase}.quick-actions.svelte-1rwjkun.svelte-1rwjkun{display:flex;gap:8px;margin-bottom:24px;flex-wrap:wrap}.qa-btn.svelte-1rwjkun.svelte-1rwjkun{padding:10px 16px;border:1px solid #2a2a3c;background:#1a1a28;color:#ccc;border-radius:8px;cursor:pointer;font-size:13px;font-family:inherit}.qa-btn.svelte-1rwjkun.svelte-1rwjkun:hover{background:#223}.qa-btn.svelte-1rwjkun.svelte-1rwjkun:disabled{opacity:.4;cursor:not-allowed}.recent-section.svelte-1rwjkun.svelte-1rwjkun{margin-bottom:24px}.recent-section.svelte-1rwjkun h3.svelte-1rwjkun{font-size:13px;color:#666;text-transform:uppercase;margin-bottom:8px}.recent-note.svelte-1rwjkun.svelte-1rwjkun{padding:8px 12px;border-radius:6px;cursor:pointer;display:flex;justify-content:space-between}.recent-note.svelte-1rwjkun.svelte-1rwjkun:hover{background:#1a1a28}.recent-date.svelte-1rwjkun.svelte-1rwjkun{font-size:11px;color:#555}.recent-entry.svelte-1rwjkun.svelte-1rwjkun{padding:6px 0;font-size:13px;color:#888;border-bottom:1px solid #1a1a28}.notes-tab.svelte-1rwjkun.svelte-1rwjkun{padding:24px}.tab-toolbar.svelte-1rwjkun.svelte-1rwjkun{margin-bottom:16px}.create-form.svelte-1rwjkun.svelte-1rwjkun{background:#1a1a28;padding:16px;border-radius:8px;margin-bottom:16px}.create-form.svelte-1rwjkun input.svelte-1rwjkun{width:100%;padding:8px 12px;border:1px solid #2a2a3c;background:#13131f;color:#e4e4ef;border-radius:4px;font-size:14px;font-family:inherit;margin-bottom:8px}.create-form.svelte-1rwjkun input.svelte-1rwjkun:focus{outline:none;border-color:#6366f1}.form-actions.svelte-1rwjkun.svelte-1rwjkun{display:flex;gap:8px}.notes-list.svelte-1rwjkun.svelte-1rwjkun{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:12px}.note-card.svelte-1rwjkun.svelte-1rwjkun{background:#1a1a28;border:1px solid #2a2a3c;border-radius:8px;padding:16px;cursor:pointer}.note-card.svelte-1rwjkun.svelte-1rwjkun:hover{border-color:#3a3a5c}.note-card-title.svelte-1rwjkun.svelte-1rwjkun{font-size:14px;font-weight:500;margin-bottom:4px}.note-card-date.svelte-1rwjkun.svelte-1rwjkun{font-size:11px;color:#555}.worklog-tab.svelte-1rwjkun.svelte-1rwjkun{padding:24px}.worklog-form.svelte-1rwjkun.svelte-1rwjkun{display:flex;gap:8px;margin-bottom:24px;align-items:center}.worklog-form.svelte-1rwjkun input.svelte-1rwjkun{padding:8px 12px;border:1px solid #2a2a3c;background:#13131f;color:#e4e4ef;border-radius:4px;font-size:14px;font-family:inherit}.worklog-form.svelte-1rwjkun input.svelte-1rwjkun:focus{outline:none;border-color:#6366f1}.worklog-form.svelte-1rwjkun input[type=text].svelte-1rwjkun{flex:1}.worklog-form.svelte-1rwjkun input[type=number].svelte-1rwjkun{width:70px}.worklog-entry.svelte-1rwjkun.svelte-1rwjkun{padding:12px 0;border-bottom:1px solid #1a1a28}.wl-meta.svelte-1rwjkun.svelte-1rwjkun{font-size:11px;color:#555;margin-top:2px}.action-card.svelte-1rwjkun.svelte-1rwjkun{background:#1a1a28;padding:12px 16px;border-radius:8px;display:flex;align-items:center;gap:12px;margin-bottom:8px}.action-type.svelte-1rwjkun.svelte-1rwjkun{font-size:11px;color:#888;background:#223;padding:2px 8px;border-radius:10px}.empty-state.svelte-1rwjkun.svelte-1rwjkun{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:48px 24px;text-align:center}.empty-state.svelte-1rwjkun p.svelte-1rwjkun{margin:0;font-size:14px;color:#666}.empty-state.svelte-1rwjkun .empty-icon.svelte-1rwjkun{margin-bottom:12px;color:#444}.empty-state.svelte-1rwjkun .hint.svelte-1rwjkun{font-size:12px;color:#555;margin-top:6px}.empty-state.svelte-1rwjkun .empty-actions.svelte-1rwjkun{display:flex;gap:8px;justify-content:center;margin-top:16px}.empty-note.svelte-1rwjkun.svelte-1rwjkun{font-size:12px;color:#444;margin-top:16px}.welcome.svelte-1rwjkun.svelte-1rwjkun{padding:48px 24px;text-align:center}.welcome.svelte-1rwjkun h2.svelte-1rwjkun{font-size:32px;font-weight:300;color:#8888a4;margin-bottom:16px}.welcome.svelte-1rwjkun p.svelte-1rwjkun{color:#666;font-size:14px}.error-text.svelte-1rwjkun.svelte-1rwjkun{color:#f88}.fab.svelte-1rwjkun.svelte-1rwjkun{position:fixed;bottom:24px;right:24px;width:56px;height:56px;border-radius:50%;background:#6366f1;color:#fff;font-size:28px;display:flex;align-items:center;justify-content:center;cursor:pointer;box-shadow:0 4px 12px #6366f166}.fab.svelte-1rwjkun.svelte-1rwjkun:hover{background:#4f46e5}.modal-overlay.svelte-1rwjkun.svelte-1rwjkun{position:fixed;top:0;right:0;bottom:0;left:0;background:#0009;display:flex;align-items:center;justify-content:center;z-index:100}.modal.svelte-1rwjkun.svelte-1rwjkun{background:#1a1a28;border:1px solid #2a2a3c;border-radius:12px;padding:24px;width:400px;max-width:90vw}.modal.svelte-1rwjkun h3.svelte-1rwjkun{font-size:18px;margin-bottom:16px}.form-group.svelte-1rwjkun.svelte-1rwjkun{margin-bottom:12px}.form-group.svelte-1rwjkun label.svelte-1rwjkun{display:block;font-size:12px;color:#666;margin-bottom:4px}.form-group.svelte-1rwjkun input.svelte-1rwjkun,.form-group.svelte-1rwjkun select.svelte-1rwjkun{width:100%;padding:8px 12px;border:1px solid #2a2a3c;background:#13131f;color:#e4e4ef;border-radius:4px;font-size:14px;font-family:inherit}.form-group.svelte-1rwjkun select.svelte-1rwjkun{-moz-appearance:none;appearance:none;-webkit-appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%23888' d='M2 4l4 4 4-4'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 10px center;padding-right:32px}.form-group.svelte-1rwjkun input.svelte-1rwjkun:focus,.form-group.svelte-1rwjkun select.svelte-1rwjkun:focus{outline:none;border-color:#6366f1}.modal-actions.svelte-1rwjkun.svelte-1rwjkun{display:flex;gap:8px;justify-content:flex-end;margin-top:16px}.btn.svelte-1rwjkun.svelte-1rwjkun{padding:8px 16px;border:1px solid #2a2a3c;background:#1a1a28;color:#ccc;border-radius:6px;cursor:pointer;font-size:13px;font-family:inherit}.btn.svelte-1rwjkun.svelte-1rwjkun:hover{background:#223}.btn-primary.svelte-1rwjkun.svelte-1rwjkun{background:#6366f1;border-color:#6366f1;color:#fff}.btn-primary.svelte-1rwjkun.svelte-1rwjkun:hover{background:#4f46e5}.btn.svelte-1rwjkun.svelte-1rwjkun:disabled{opacity:.4;cursor:not-allowed}.btn-sm.svelte-1rwjkun.svelte-1rwjkun{padding:4px 10px;font-size:12px}.btn-danger.svelte-1rwjkun.svelte-1rwjkun{color:#ff6b6b;border-color:#4a2222}.btn-danger.svelte-1rwjkun.svelte-1rwjkun:hover{background:#3a2222}.files-tab.svelte-1rwjkun.svelte-1rwjkun{padding:20px}.files-tab.svelte-1rwjkun .tab-toolbar.svelte-1rwjkun{display:flex;gap:8px;align-items:center;margin-bottom:16px}.file-list.svelte-1rwjkun.svelte-1rwjkun{display:flex;flex-direction:column}.back-btn.svelte-1rwjkun.svelte-1rwjkun{margin-bottom:4px}.import-summary.svelte-1rwjkun.svelte-1rwjkun{margin-bottom:16px}.summary-row.svelte-1rwjkun.svelte-1rwjkun{display:flex;justify-content:space-between;padding:6px 0;font-size:14px;border-bottom:1px solid #2a2a3c}.summary-warn.svelte-1rwjkun.svelte-1rwjkun{margin-top:8px;padding:8px 12px;background:#3a2a22;border-radius:6px;color:#fa6;font-size:13px}
diff --git a/cmd/verstak-gui/frontend-dist/assets/main-a-M2pafQ.js b/cmd/verstak-gui/frontend-dist/assets/main-a-M2pafQ.js
new file mode 100644
index 0000000..f0e089c
--- /dev/null
+++ b/cmd/verstak-gui/frontend-dist/assets/main-a-M2pafQ.js
@@ -0,0 +1,8 @@
+var Ln=Object.defineProperty;var Nn=(n,e,t)=>e in n?Ln(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t;var Xe=(n,e,t)=>Nn(n,typeof e!="symbol"?e+"":e,t);(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const i of document.querySelectorAll('link[rel="modulepreload"]'))l(i);new MutationObserver(i=>{for(const o of i)if(o.type==="childList")for(const s of o.addedNodes)s.tagName==="LINK"&&s.rel==="modulepreload"&&l(s)}).observe(document,{childList:!0,subtree:!0});function t(i){const o={};return i.integrity&&(o.integrity=i.integrity),i.referrerPolicy&&(o.referrerPolicy=i.referrerPolicy),i.crossOrigin==="use-credentials"?o.credentials="include":i.crossOrigin==="anonymous"?o.credentials="omit":o.credentials="same-origin",o}function l(i){if(i.ep)return;i.ep=!0;const o=t(i);fetch(i.href,o)}})();function J(){}function dl(n){return n()}function bt(){return Object.create(null)}function re(n){n.forEach(dl)}function ml(n){return typeof n=="function"}function Te(n,e){return n!=n?e==e:n!==e||n&&typeof n=="object"||typeof n=="function"}let Ie;function je(n,e){return n===e?!0:(Ie||(Ie=document.createElement("a")),Ie.href=e,n===Ie.href)}function En(n){return Object.keys(n).length===0}function Fn(n){return n??""}function f(n,e){n.appendChild(e)}function b(n,e,t){n.insertBefore(e,t||null)}function y(n){n.parentNode&&n.parentNode.removeChild(n)}function me(n,e){for(let t=0;tn.removeEventListener(e,t,l)}function _e(n){return function(e){return e.stopPropagation(),n.call(this,e)}}function ze(n){return function(e){e.target===this&&n.call(this,e)}}function r(n,e,t){t==null?n.removeAttribute(e):n.getAttribute(e)!==t&&n.setAttribute(e,t)}function pl(n){return n===""?null:+n}function On(n){return Array.from(n.childNodes)}function q(n,e){e=""+e,n.data!==e&&(n.data=e)}function de(n,e){n.value=e??""}function kt(n,e,t){for(let l=0;l{const i=n.$$.callbacks[e];if(i){const o=Pn(e,t,{cancelable:l});return i.slice().forEach(s=>{s.call(n,o)}),!o.defaultPrevented}return!0}}function jn(n,e){const t=n.$$.callbacks[e.type];t&&t.slice().forEach(l=>l.call(this,e))}const Me=[],gt=[];let Se=[];const wt=[],Bn=Promise.resolve();let Qe=!1;function An(){Qe||(Qe=!0,Bn.then(vl))}function Be(n){Se.push(n)}const Ye=new Set;let Ce=0;function vl(){if(Ce!==0)return;const n=Ee;do{try{for(;Cen.indexOf(l)===-1?e.push(l):t.push(l)),t.forEach(l=>l()),Se=e}const Pe=new Set;let ge;function he(){ge={r:0,c:[],p:ge}}function ve(){ge.r||re(ge.c),ge=ge.p}function le(n,e){n&&n.i&&(Pe.delete(n),n.i(e))}function se(n,e,t,l){if(n&&n.o){if(Pe.has(n))return;Pe.add(n),ge.c.push(()=>{Pe.delete(n),l&&(t&&n.d(1),l())}),n.o(e)}else l&&l()}function ne(n){return(n==null?void 0:n.length)!==void 0?n:Array.from(n)}function Vn(n,e){se(n,1,1,()=>{e.delete(n.key)})}function Wn(n,e,t,l,i,o,s,a,c,d,_,h){let p=n.length,v=o.length,k=p;const g={};for(;k--;)g[n[k].key]=k;const w=[],T=new Map,j=new Map,H=[];for(k=v;k--;){const N=h(i,o,k),O=t(N);let M=s.get(O);M?H.push(()=>M.p(N,e)):(M=d(O,N),M.c()),T.set(O,w[k]=M),O in g&&j.set(O,Math.abs(k-g[O]))}const I=new Set,A=new Set;function P(N){le(N,1),N.m(a,_),s.set(N.key,N),_=N.first,v--}for(;p&&v;){const N=w[v-1],O=n[p-1],M=N.key,D=O.key;N===O?(_=N.first,p--,v--):T.has(D)?!s.has(M)||I.has(M)?P(N):A.has(D)?p--:j.get(M)>j.get(D)?(A.add(M),P(N)):(I.add(D),p--):(c(O,s),p--)}for(;p--;){const N=n[p];T.has(N.key)||c(N,s)}for(;v;)P(w[v-1]);return re(H),w}function we(n){n&&n.c()}function be(n,e,t){const{fragment:l,after_update:i}=n.$$;l&&l.m(e,t),Be(()=>{const o=n.$$.on_mount.map(dl).filter(ml);n.$$.on_destroy?n.$$.on_destroy.push(...o):re(o),n.$$.on_mount=[]}),i.forEach(Be)}function ke(n,e){const t=n.$$;t.fragment!==null&&(zn(t.after_update),re(t.on_destroy),t.fragment&&t.fragment.d(e),t.on_destroy=t.fragment=null,t.ctx=[])}function Rn(n,e){n.$$.dirty[0]===-1&&(Me.push(n),An(),n.$$.dirty.fill(0)),n.$$.dirty[e/31|0]|=1<{const k=v.length?v[0]:p;return d.ctx&&i(d.ctx[h],d.ctx[h]=k)&&(!d.skip_bound&&d.bound[h]&&d.bound[h](k),_&&Rn(n,h)),p}):[],d.update(),_=!0,re(d.before_update),d.fragment=l?l(d.ctx):!1,e.target){if(e.hydrate){const h=On(e.target);d.fragment&&d.fragment.l(h),h.forEach(y)}else d.fragment&&d.fragment.c();e.intro&&le(n.$$.fragment),be(n,e.target,e.anchor),vl()}Ne(c)}class Le{constructor(){Xe(this,"$$");Xe(this,"$$set")}$destroy(){ke(this,1),this.$destroy=J}$on(e,t){if(!ml(t))return J;const l=this.$$.callbacks[e]||(this.$$.callbacks[e]=[]);return l.push(t),()=>{const i=l.indexOf(t);i!==-1&&l.splice(i,1)}}$set(e){this.$$set&&!En(e)&&(this.$$.skip_bound=!0,this.$$set(e),this.$$.skip_bound=!1)}}const Kn="4";typeof window<"u"&&(window.__svelte||(window.__svelte={v:new Set})).v.add(Kn);function qn(n){let e,t;return{c(){e=R("path"),t=R("polyline"),r(e,"d","M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"),r(t,"points","14 2 14 8 20 8")},m(l,i){b(l,e,i),b(l,t,i)},d(l){l&&(y(e),y(t))}}}function Gn(n){let e,t,l,i,o;return{c(){e=R("path"),t=R("polyline"),l=R("line"),i=R("line"),o=R("polyline"),r(e,"d","M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"),r(t,"points","14 2 14 8 20 8"),r(l,"x1","16"),r(l,"y1","13"),r(l,"x2","8"),r(l,"y2","13"),r(i,"x1","16"),r(i,"y1","17"),r(i,"x2","8"),r(i,"y2","17"),r(o,"points","10 9 9 9 8 9")},m(s,a){b(s,e,a),b(s,t,a),b(s,l,a),b(s,i,a),b(s,o,a)},d(s){s&&(y(e),y(t),y(l),y(i),y(o))}}}function Un(n){let e,t;return{c(){e=R("polyline"),t=R("polyline"),r(e,"points","16 18 22 12 16 6"),r(t,"points","8 6 2 12 8 18")},m(l,i){b(l,e,i),b(l,t,i)},d(l){l&&(y(e),y(t))}}}function Jn(n){let e,t,l,i;return{c(){e=R("path"),t=R("polyline"),l=R("line"),i=R("rect"),r(e,"d","M21 8v13a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8"),r(t,"points","7 3 12 8 17 3"),r(l,"x1","3"),r(l,"y1","8"),r(l,"x2","21"),r(l,"y2","8"),r(i,"x","10"),r(i,"y","12"),r(i,"width","4"),r(i,"height","4"),r(i,"rx","1")},m(o,s){b(o,e,s),b(o,t,s),b(o,l,s),b(o,i,s)},d(o){o&&(y(e),y(t),y(l),y(i))}}}function Xn(n){let e,t,l,i,o;return{c(){e=R("path"),t=R("polyline"),l=R("line"),i=R("line"),o=R("line"),r(e,"d","M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"),r(t,"points","14 2 14 8 20 8"),r(l,"x1","9"),r(l,"y1","12"),r(l,"x2","15"),r(l,"y2","12"),r(i,"x1","9"),r(i,"y1","15"),r(i,"x2","13"),r(i,"y2","15"),r(o,"x1","12"),r(o,"y1","15"),r(o,"x2","12"),r(o,"y2","18")},m(s,a){b(s,e,a),b(s,t,a),b(s,l,a),b(s,i,a),b(s,o,a)},d(s){s&&(y(e),y(t),y(l),y(i),y(o))}}}function Zn(n){let e,t,l,i,o,s;return{c(){e=R("path"),t=R("polyline"),l=R("line"),i=R("line"),o=R("line"),s=R("line"),r(e,"d","M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"),r(t,"points","14 2 14 8 20 8"),r(l,"x1","8"),r(l,"y1","12"),r(l,"x2","16"),r(l,"y2","12"),r(i,"x1","8"),r(i,"y1","16"),r(i,"x2","16"),r(i,"y2","16"),r(o,"x1","8"),r(o,"y1","14"),r(o,"x2","12"),r(o,"y2","14"),r(s,"x1","12"),r(s,"y1","12"),r(s,"x2","12"),r(s,"y2","18")},m(a,c){b(a,e,c),b(a,t,c),b(a,l,c),b(a,i,c),b(a,o,c),b(a,s,c)},d(a){a&&(y(e),y(t),y(l),y(i),y(o),y(s))}}}function Yn(n){let e,t,l,i;return{c(){e=R("path"),t=R("polyline"),l=R("line"),i=R("line"),r(e,"d","M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"),r(t,"points","14 2 14 8 20 8"),r(l,"x1","16"),r(l,"y1","13"),r(l,"x2","8"),r(l,"y2","13"),r(i,"x1","16"),r(i,"y1","17"),r(i,"x2","8"),r(i,"y2","17")},m(o,s){b(o,e,s),b(o,t,s),b(o,l,s),b(o,i,s)},d(o){o&&(y(e),y(t),y(l),y(i))}}}function Qn(n){let e,t,l,i,o;return{c(){e=R("path"),t=R("polyline"),l=R("line"),i=R("line"),o=R("line"),r(e,"d","M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"),r(t,"points","14 2 14 8 20 8"),r(l,"x1","8"),r(l,"y1","12"),r(l,"x2","16"),r(l,"y2","12"),r(i,"x1","8"),r(i,"y1","16"),r(i,"x2","16"),r(i,"y2","16"),r(o,"x1","8"),r(o,"y1","14"),r(o,"x2","12"),r(o,"y2","14")},m(s,a){b(s,e,a),b(s,t,a),b(s,l,a),b(s,i,a),b(s,o,a)},d(s){s&&(y(e),y(t),y(l),y(i),y(o))}}}function xn(n){let e,t,l;return{c(){e=R("path"),t=R("circle"),l=R("circle"),r(e,"d","M9 18V5l12-2v13"),r(t,"cx","6"),r(t,"cy","18"),r(t,"r","3"),r(l,"cx","18"),r(l,"cy","16"),r(l,"r","3")},m(i,o){b(i,e,o),b(i,t,o),b(i,l,o)},d(i){i&&(y(e),y(t),y(l))}}}function $n(n){let e,t;return{c(){e=R("rect"),t=R("polyline"),r(e,"x","2"),r(e,"y","4"),r(e,"width","20"),r(e,"height","16"),r(e,"rx","2"),r(t,"points","10 9 16 12 10 15 10 9")},m(l,i){b(l,e,i),b(l,t,i)},d(l){l&&(y(e),y(t))}}}function ei(n){let e,t,l;return{c(){e=R("rect"),t=R("circle"),l=R("polyline"),r(e,"x","3"),r(e,"y","3"),r(e,"width","18"),r(e,"height","18"),r(e,"rx","2"),r(e,"ry","2"),r(t,"cx","8.5"),r(t,"cy","8.5"),r(t,"r","1.5"),r(l,"points","21 15 16 10 5 21")},m(i,o){b(i,e,o),b(i,t,o),b(i,l,o)},d(i){i&&(y(e),y(t),y(l))}}}function ti(n){let e;return{c(){e=R("path"),r(e,"d","M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z")},m(t,l){b(t,e,l)},d(t){t&&y(e)}}}function li(n){let e;function t(o,s){return o[0]==="folder"?ti:o[0]==="image"?ei:o[0]==="video"?$n:o[0]==="audio"?xn:o[0]==="pdf"?Qn:o[0]==="document"?Yn:o[0]==="spreadsheet"?Zn:o[0]==="presentation"?Xn:o[0]==="archive"?Jn:o[0]==="code"?Un:o[0]==="text"?Gn:qn}let l=t(n),i=l(n);return{c(){e=R("svg"),i.c(),r(e,"width",n[1]),r(e,"height",n[1]),r(e,"viewBox","0 0 24 24"),r(e,"fill","none"),r(e,"stroke","currentColor"),r(e,"stroke-width","1.5"),r(e,"stroke-linecap","round"),r(e,"stroke-linejoin","round"),r(e,"xmlns","http://www.w3.org/2000/svg")},m(o,s){b(o,e,s),i.m(e,null)},p(o,[s]){l!==(l=t(o))&&(i.d(1),i=l(o),i&&(i.c(),i.m(e,null))),s&2&&r(e,"width",o[1]),s&2&&r(e,"height",o[1])},i:J,o:J,d(o){o&&y(e),i.d()}}}function ni(n,e,t){let{kind:l="generic"}=e,{size:i=20}=e;return n.$$set=o=>{"kind"in o&&t(0,l=o.kind),"size"in o&&t(1,i=o.size)},[l,i]}class yl extends Le{constructor(e){super(),De(this,e,ni,li,Te,{kind:0,size:1})}}function Ae(n){if(n==null||n<0)return"—";if(n===0)return"0 B";const e=["B","KB","MB","GB"],t=Math.min(Math.floor(Math.log(n)/Math.log(1024)),e.length-1),l=n/Math.pow(1024,t);return(t===0?l.toFixed(0):l.toFixed(1))+" "+e[t]}const ii={"image/jpeg":"JPEG image","image/png":"PNG image","image/gif":"GIF image","image/webp":"WebP image","image/svg+xml":"SVG image","image/bmp":"BMP image","image/tiff":"TIFF image","image/avif":"AVIF image","application/pdf":"PDF document","application/msword":"Word document","application/vnd.openxmlformats-officedocument.wordprocessingml.document":"Word document","application/vnd.ms-excel":"Excel spreadsheet","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":"Excel spreadsheet","application/vnd.ms-powerpoint":"PowerPoint presentation","application/vnd.openxmlformats-officedocument.presentationml.presentation":"PowerPoint presentation","application/zip":"ZIP archive","application/gzip":"GZIP archive","application/x-tar":"TAR archive","application/x-7z-compressed":"7z archive","application/x-rar-compressed":"RAR archive","text/plain":"Text file","text/html":"HTML file","text/css":"CSS file","text/javascript":"JavaScript file","application/json":"JSON file","application/xml":"XML file","application/x-yaml":"YAML file","application/octet-stream":"Binary file","application/x-msdos-program":"Executable","inode/directory":"Folder"};function He(n){return n?ii[n]||n:"Unknown"}function bl(n){if(n.type==="folder")return"folder";const e=(n.mime||"").toLowerCase();if(e.startsWith("image/"))return"image";if(e.startsWith("video/"))return"video";if(e.startsWith("audio/"))return"audio";if(e.startsWith("text/"))return"text";if(e.includes("pdf"))return"pdf";if(e.includes("word")||e.includes("document"))return"document";if(e.includes("spreadsheet")||e.includes("excel"))return"spreadsheet";if(e.includes("presentation")||e.includes("powerpoint"))return"presentation";if(e.includes("zip")||e.includes("tar")||e.includes("gzip")||e.includes("rar")||e.includes("7z")||e.includes("compress"))return"archive";if(e.includes("json")||e.includes("xml")||e.includes("yaml")||e.includes("javascript")||e.includes("css")||e.includes("html"))return"code";const l=(n.name||"").toLowerCase().split(".").pop();return["js","ts","jsx","tsx","vue","svelte","py","rs","go","c","cpp","h","hpp","java","kt","swift","rb","php","pl","sh","bash","zsh","fish","yml","yaml","json","xml","toml","ini","cfg","conf","md","markdown","css","scss","less","sass","sql","graphql","proto","gradle","cmake","makefile","dockerfile","env","gitignore"].includes(l)?"code":"generic"}const si=["image/jpeg","image/png","image/gif","image/webp","image/bmp","image/tiff","image/avif","image/svg+xml"],oi=["text/plain","text/html","text/css","text/javascript","application/json","application/xml","application/x-yaml","text/x-shellscript"],ri=["txt","log","conf","ini","yaml","yml","json","xml","csv","sh","py","js","ts","css","html","md","markdown","cfg"],ci=["jpg","jpeg","png","gif","webp","bmp","tiff","tif","avif","svg"];function kl(n){const e=(n.mime||"").toLowerCase(),l=(n.name||"").toLowerCase().split(".").pop();return si.includes(e)||ci.includes(l)}function gl(n){const e=(n.mime||"").toLowerCase(),l=(n.name||"").toLowerCase().split(".").pop();return oi.includes(e)||ri.includes(l)&&l!=="md"&&l!=="markdown"}function wl(n){return(n.mime||"").toLowerCase().includes("pdf")}function Cl(n){const e=(n.name||"").toLowerCase();return e.endsWith(".md")||e.endsWith(".markdown")}function ai(n){return kl(n)||wl(n)}function fi(n){return gl(n)||Cl(n)}function ui(n){let e,t=Ae(n[0].size)+"",l,i,o,s=n[0].mime&&Ct(n);return{c(){e=u("span"),l=F(t),i=C(),s&&s.c(),o=pe()},m(a,c){b(a,e,c),f(e,l),b(a,i,c),s&&s.m(a,c),b(a,o,c)},p(a,c){c&1&&t!==(t=Ae(a[0].size)+"")&&q(l,t),a[0].mime?s?s.p(a,c):(s=Ct(a),s.c(),s.m(o.parentNode,o)):s&&(s.d(1),s=null)},d(a){a&&(y(e),y(i),y(o)),s&&s.d(a)}}}function di(n){let e;return{c(){e=u("span"),e.textContent="Folder"},m(t,l){b(t,e,l)},p:J,d(t){t&&y(e)}}}function Ct(n){let e,t,l,i=He(n[0].mime)+"",o;return{c(){e=u("span"),e.textContent="·",t=C(),l=u("span"),o=F(i),r(e,"class","meta-sep svelte-18mry1k")},m(s,a){b(s,e,a),b(s,t,a),b(s,l,a),f(l,o)},p(s,a){a&1&&i!==(i=He(s[0].mime)+"")&&q(o,i)},d(s){s&&(y(e),y(t),y(l))}}}function mi(n){let e,t,l;return{c(){e=u("button"),e.innerHTML=' ',r(e,"class","action-btn svelte-18mry1k"),r(e,"title","Open folder"),r(e,"aria-label","Open folder")},m(i,o){b(i,e,o),t||(l=L(e,"click",_e(n[24])),t=!0)},p:J,d(i){i&&y(e),t=!1,l()}}}function pi(n){let e,t,l,i,o;return{c(){e=u("button"),e.innerHTML=' ',t=C(),l=u("button"),l.innerHTML=' ',r(e,"class","action-btn svelte-18mry1k"),r(e,"title","Preview"),r(e,"aria-label","Preview"),r(l,"class","action-btn svelte-18mry1k"),r(l,"title","Open in external program"),r(l,"aria-label","Open externally")},m(s,a){b(s,e,a),b(s,t,a),b(s,l,a),i||(o=[L(e,"click",_e(n[23])),L(l,"click",_e(n[8]))],i=!0)},p:J,d(s){s&&(y(e),y(t),y(l)),i=!1,re(o)}}}function Mt(n){let e,t,l,i,o,s,a,c,d,_,h,p;return{c(){e=u("div"),t=C(),l=u("div"),i=u("button"),i.textContent="Rename",o=C(),s=u("button"),s.textContent="Duplicate",a=C(),c=u("button"),c.textContent="Cut",d=C(),_=u("button"),_.textContent="Copy",r(e,"class","menu-backdrop svelte-18mry1k"),r(e,"role","presentation"),r(i,"class","menu-item svelte-18mry1k"),r(i,"role","menuitem"),r(s,"class","menu-item svelte-18mry1k"),r(s,"role","menuitem"),r(c,"class","menu-item svelte-18mry1k"),r(c,"role","menuitem"),r(_,"class","menu-item svelte-18mry1k"),r(_,"role","menuitem"),r(l,"class","menu svelte-18mry1k"),r(l,"role","menu")},m(v,k){b(v,e,k),b(v,t,k),b(v,l,k),f(l,i),f(l,o),f(l,s),f(l,a),f(l,c),f(l,d),f(l,_),h||(p=[L(e,"click",_e(n[15])),L(i,"click",n[10]),L(s,"click",n[11]),L(c,"click",n[12]),L(_,"click",n[13]),L(l,"click",_e(n[22]))],h=!0)},p:J,d(v){v&&(y(e),y(t),y(l)),h=!1,re(p)}}}function _i(n){let e,t,l,i,o,s,a=n[0].name+"",c,d,_,h,p,v,k,g,w,T,j,H,I,A,P,N,O,M,D,Z;l=new yl({props:{kind:n[4],size:22}});function V(B,G){return B[5]?di:ui}let Y=V(n)(n);function ee(B,G){return B[5]?mi:pi}let X=ee(n)(n),te=n[2]&&Mt(n);return{c(){e=u("div"),t=u("div"),we(l.$$.fragment),i=C(),o=u("div"),s=u("div"),c=F(a),_=C(),h=u("div"),Y.c(),p=C(),v=u("div"),X.c(),k=C(),g=u("button"),w=R("svg"),T=R("circle"),j=R("circle"),H=R("circle"),I=C(),A=u("button"),A.innerHTML=' ',N=C(),te&&te.c(),O=pe(),r(t,"class","file-row-icon svelte-18mry1k"),r(s,"class","file-row-name svelte-18mry1k"),r(s,"title",d=n[0].name),r(h,"class","file-row-meta svelte-18mry1k"),r(o,"class","file-row-body svelte-18mry1k"),r(T,"cx","12"),r(T,"cy","5"),r(T,"r","2"),r(j,"cx","12"),r(j,"cy","12"),r(j,"r","2"),r(H,"cx","12"),r(H,"cy","19"),r(H,"r","2"),r(w,"width","16"),r(w,"height","16"),r(w,"viewBox","0 0 24 24"),r(w,"fill","currentColor"),r(g,"class","action-btn svelte-18mry1k"),r(g,"title","More actions"),r(g,"aria-label","More actions"),r(g,"aria-expanded",n[2]),r(A,"class","action-btn action-btn-danger svelte-18mry1k"),r(A,"title","Delete"),r(A,"aria-label","Delete"),r(v,"class","file-row-actions svelte-18mry1k"),r(e,"class","file-row svelte-18mry1k"),r(e,"role","button"),r(e,"tabindex","0"),r(e,"draggable","true"),r(e,"aria-label",P=n[5]?`Folder ${n[0].name}`:`File ${n[0].name}`),Ze(e,"file-row--selected",n[1]),Ze(e,"file-row--dragover",!1)},m(B,G){b(B,e,G),f(e,t),be(l,t,null),f(e,i),f(e,o),f(o,s),f(s,c),f(o,_),f(o,h),Y.m(h,null),f(e,p),f(e,v),X.m(v,null),f(v,k),f(v,g),f(g,w),f(w,T),f(w,j),f(w,H),f(v,I),f(v,A),b(B,N,G),te&&te.m(B,G),b(B,O,G),M=!0,D||(Z=[L(window,"click",n[15]),L(g,"click",_e(n[14])),L(A,"click",_e(n[9])),L(e,"click",n[6]),L(e,"keydown",n[7]),L(e,"dragstart",n[16]),L(e,"dragover",n[17]),L(e,"drop",n[18])],D=!0)},p(B,[G]){(!M||G&1)&&a!==(a=B[0].name+"")&&q(c,a),(!M||G&1&&d!==(d=B[0].name))&&r(s,"title",d),Y.p(B,G),X.p(B,G),(!M||G&4)&&r(g,"aria-expanded",B[2]),(!M||G&1&&P!==(P=B[5]?`Folder ${B[0].name}`:`File ${B[0].name}`))&&r(e,"aria-label",P),(!M||G&2)&&Ze(e,"file-row--selected",B[1]),B[2]?te?te.p(B,G):(te=Mt(B),te.c(),te.m(O.parentNode,O)):te&&(te.d(1),te=null)},i(B){M||(le(l.$$.fragment,B),M=!0)},o(B){se(l.$$.fragment,B),M=!1},d(B){B&&(y(e),y(N),y(O)),ke(l),Y.d(),X.d(),te&&te.d(B),D=!1,re(Z)}}}function hi(n,e,t){let{item:l}=e,{selected:i=!1}=e,{onDragStart:o}=e,{onDragOver:s}=e,{onDrop:a}=e;const c=Ve(),d=bl(l),_=l.type==="folder";let h=!1,p=null;function v(E){E.ctrlKey||E.metaKey?c("toggleSelect",l.id):E.shiftKey?c("rangeSelect",l.id):p?(clearTimeout(p),p=null,_?c("navigate",l.id):c("preview",l)):p=setTimeout(()=>{p=null,i?_?c("navigate",l.id):c("preview",l):c("selectOne",l.id)},250)}function k(E){E.key==="Enter"&&(_?c("navigate",l.id):c("preview",l))}function g(){c("openExternal",l.fileId)}function w(){c("delete",{id:l.id,type:l.type})}function T(){t(2,h=!1),c("rename",{id:l.id,name:l.name})}function j(){t(2,h=!1),c("duplicate",l.id)}function H(){t(2,h=!1),c("cut",l.id)}function I(){t(2,h=!1),c("copy",l.id)}function A(){t(2,h=!h)}function P(){t(2,h=!1)}function N(E){o&&o(E,l.id)}function O(E){s&&_&&s(E,l.id)}function M(E){a&&_&&a(E,l.id)}function D(E){jn.call(this,n,E)}const Z=()=>c("preview",l),V=()=>c("navigate",l.id);return n.$$set=E=>{"item"in E&&t(0,l=E.item),"selected"in E&&t(1,i=E.selected),"onDragStart"in E&&t(19,o=E.onDragStart),"onDragOver"in E&&t(20,s=E.onDragOver),"onDrop"in E&&t(21,a=E.onDrop)},[l,i,h,c,d,_,v,k,g,w,T,j,H,I,A,P,N,O,M,o,s,a,D,Z,V]}class vi extends Le{constructor(e){super(),De(this,e,hi,_i,Te,{item:0,selected:1,onDragStart:19,onDragOver:20,onDrop:21})}}function St(n,e,t){const l=n.slice();return l[4]=e[t],l[6]=t,l}function yi(n){let e;return{c(){e=u("span"),e.textContent="/",r(e,"class","sep svelte-csi2lb")},m(t,l){b(t,e,l)},d(t){t&&y(e)}}}function bi(n){let e,t=n[4].name+"",l,i,o;function s(){return n[2](n[6])}return{c(){e=u("button"),l=F(t),r(e,"class","crumb crumb--link svelte-csi2lb")},m(a,c){b(a,e,c),f(e,l),i||(o=L(e,"click",s),i=!0)},p(a,c){n=a,c&1&&t!==(t=n[4].name+"")&&q(l,t)},d(a){a&&y(e),i=!1,o()}}}function ki(n){let e,t=n[4].name+"",l;return{c(){e=u("span"),l=F(t),r(e,"class","crumb crumb--current svelte-csi2lb")},m(i,o){b(i,e,o),f(e,l)},p(i,o){o&1&&t!==(t=i[4].name+"")&&q(l,t)},d(i){i&&y(e)}}}function Tt(n){let e,t,l=n[6]>0&&yi();function i(a,c){return a[6]===a[0].length-1?ki:bi}let o=i(n),s=o(n);return{c(){l&&l.c(),e=C(),s.c(),t=pe()},m(a,c){l&&l.m(a,c),b(a,e,c),s.m(a,c),b(a,t,c)},p(a,c){o===(o=i(a))&&s?s.p(a,c):(s.d(1),s=o(a),s&&(s.c(),s.m(t.parentNode,t)))},d(a){a&&(y(e),y(t)),l&&l.d(a),s.d(a)}}}function gi(n){let e,t=ne(n[0]),l=[];for(let i=0;io(a);return n.$$set=a=>{"crumbs"in a&&t(0,l=a.crumbs)},[l,o,s]}class Ml extends Le{constructor(e){super(),De(this,e,wi,gi,Te,{crumbs:0})}}function Ci(n){let e,t,l,i,o,s;return{c(){e=u("div"),t=u("p"),t.textContent="Preview is not available for this file type.",l=C(),i=u("button"),i.textContent="Open in external program",r(i,"class","btn btn-sm svelte-1cw3u0m"),r(e,"class","preview-status svelte-1cw3u0m")},m(a,c){b(a,e,c),f(e,t),f(e,l),f(e,i),o||(s=L(i,"click",n[9]),o=!0)},p:J,d(a){a&&y(e),o=!1,s()}}}function Mi(n){let e,t;function l(s,a){return a&2&&(e=null),e==null&&(e=!!(s[1]&&s[1].startsWith("data:"))),e?Ei:Ni}let i=l(n,-1),o=i(n);return{c(){o.c(),t=pe()},m(s,a){o.m(s,a),b(s,t,a)},p(s,a){i===(i=l(s,a))&&o?o.p(s,a):(o.d(1),o=i(s),o&&(o.c(),o.m(t.parentNode,t)))},d(s){s&&y(t),o.d(s)}}}function Si(n){let e,t,l;return{c(){e=u("pre"),t=u("code"),l=F(n[1]),r(e,"class","preview-text svelte-1cw3u0m")},m(i,o){b(i,e,o),f(e,t),f(t,l)},p(i,o){o&2&&q(l,i[1])},d(i){i&&y(e)}}}function Ti(n){let e,t,l,i;return{c(){e=u("div"),t=u("img"),je(t.src,l=n[1])||r(t,"src",l),r(t,"alt",i=n[0].name),r(t,"class","preview-image svelte-1cw3u0m"),r(e,"class","preview-image-container svelte-1cw3u0m")},m(o,s){b(o,e,s),f(e,t)},p(o,s){s&2&&!je(t.src,l=o[1])&&r(t,"src",l),s&1&&i!==(i=o[0].name)&&r(t,"alt",i)},d(o){o&&y(e)}}}function Di(n){let e,t,l,i,o,s,a;return{c(){e=u("div"),t=u("p"),l=F(n[3]),i=C(),o=u("button"),o.textContent="Open in external program",r(o,"class","btn btn-sm svelte-1cw3u0m"),r(e,"class","preview-status svelte-1cw3u0m")},m(c,d){b(c,e,d),f(e,t),f(t,l),f(e,i),f(e,o),s||(a=L(o,"click",n[9]),s=!0)},p(c,d){d&8&&q(l,c[3])},d(c){c&&y(e),s=!1,a()}}}function Li(n){let e;return{c(){e=u("div"),e.innerHTML="Loading preview...
",r(e,"class","preview-status svelte-1cw3u0m")},m(t,l){b(t,e,l)},p:J,d(t){t&&y(e)}}}function Ni(n){let e,t,l,i,o,s;return{c(){e=u("div"),t=u("p"),t.textContent="PDF preview is not available in this environment.",l=C(),i=u("button"),i.textContent="Open in external program",r(i,"class","btn btn-sm svelte-1cw3u0m"),r(e,"class","preview-status svelte-1cw3u0m")},m(a,c){b(a,e,c),f(e,t),f(e,l),f(e,i),o||(s=L(i,"click",n[9]),o=!0)},p:J,d(a){a&&y(e),o=!1,s()}}}function Ei(n){let e,t,l;return{c(){e=u("div"),t=u("embed"),je(t.src,l=n[1])||r(t,"src",l),r(t,"type","application/pdf"),r(t,"class","preview-pdf svelte-1cw3u0m"),r(e,"class","preview-pdf-container svelte-1cw3u0m")},m(i,o){b(i,e,o),f(e,t)},p(i,o){o&2&&!je(t.src,l=i[1])&&r(t,"src",l)},d(i){i&&y(e)}}}function Fi(n){let e,t,l,i,o,s,a,c=n[0].name+"",d,_,h,p,v=Ae(n[0].size)+"",k,g,w=He(n[0].mime)+"",T,j,H,I,A,P,N,O,M,D,Z,V;o=new yl({props:{kind:n[8],size:18}});function E(W,X){return W[2]?Li:W[3]?Di:W[6]&&W[1]?Ti:W[5]&&W[1]?Si:W[4]?Mi:Ci}let Y=E(n),ee=Y(n);return{c(){e=u("div"),t=u("div"),l=u("header"),i=u("div"),we(o.$$.fragment),s=C(),a=u("span"),d=F(c),h=C(),p=u("div"),k=F(v),g=F(" · "),T=F(w),j=C(),H=u("div"),I=u("button"),I.innerHTML=' ',A=C(),P=u("button"),P.innerHTML=' ',N=C(),O=u("div"),ee.c(),r(a,"class","preview-name svelte-1cw3u0m"),r(a,"title",_=n[0].name),r(i,"class","preview-title svelte-1cw3u0m"),r(p,"class","preview-meta svelte-1cw3u0m"),r(I,"class","action-btn svelte-1cw3u0m"),r(I,"title","Open in external program"),r(I,"aria-label","Open externally"),r(P,"class","action-btn action-btn-close svelte-1cw3u0m"),r(P,"title","Close"),r(P,"aria-label","Close preview"),r(H,"class","preview-actions svelte-1cw3u0m"),r(l,"class","preview-header svelte-1cw3u0m"),r(O,"class","preview-body svelte-1cw3u0m"),r(t,"class","modal svelte-1cw3u0m"),r(e,"class","overlay svelte-1cw3u0m"),r(e,"role","dialog"),r(e,"aria-modal","true"),r(e,"aria-label",M=`Preview: ${n[0].name}`)},m(W,X){b(W,e,X),f(e,t),f(t,l),f(l,i),be(o,i,null),f(i,s),f(i,a),f(a,d),f(l,h),f(l,p),f(p,k),f(p,g),f(p,T),f(l,j),f(l,H),f(H,I),f(H,A),f(H,P),f(t,N),f(t,O),ee.m(O,null),D=!0,Z||(V=[L(I,"click",n[9]),L(P,"click",n[10]),L(e,"click",ze(n[11]))],Z=!0)},p(W,[X]){(!D||X&1)&&c!==(c=W[0].name+"")&&q(d,c),(!D||X&1&&_!==(_=W[0].name))&&r(a,"title",_),(!D||X&1)&&v!==(v=Ae(W[0].size)+"")&&q(k,v),(!D||X&1)&&w!==(w=He(W[0].mime)+"")&&q(T,w),Y===(Y=E(W))&&ee?ee.p(W,X):(ee.d(1),ee=Y(W),ee&&(ee.c(),ee.m(O,null))),(!D||X&1&&M!==(M=`Preview: ${W[0].name}`))&&r(e,"aria-label",M)},i(W){D||(le(o.$$.fragment,W),D=!0)},o(W){se(o.$$.fragment,W),D=!1},d(W){W&&y(e),ke(o),ee.d(),Z=!1,re(V)}}}function Oi(n,e,t){let l,i,o,{item:s}=e,{content:a=""}=e,{loading:c=!1}=e,{error:d=""}=e;const _=Ve(),h=bl(s);function p(w){w.key==="Escape"&&_("close")}function v(){_("openExternal",s.fileId)}_l(()=>{window.addEventListener("keydown",p)}),hl(()=>{window.removeEventListener("keydown",p)});const k=()=>_("close"),g=()=>_("close");return n.$$set=w=>{"item"in w&&t(0,s=w.item),"content"in w&&t(1,a=w.content),"loading"in w&&t(2,c=w.loading),"error"in w&&t(3,d=w.error)},n.$$.update=()=>{n.$$.dirty&3&&t(6,l=kl(s)&&a&&a.startsWith("data:")),n.$$.dirty&1&&t(5,i=gl(s)||Cl(s)),n.$$.dirty&1&&t(4,o=wl(s))},[s,a,c,d,o,i,l,_,h,v,k,g]}class Ii extends Le{constructor(e){super(),De(this,e,Oi,Fi,Te,{item:0,content:1,loading:2,error:3})}}function Pi(n){let e,t,l,i,o,s,a,c,d,_,h,p,v,k,g,w,T;return{c(){e=u("div"),t=u("div"),l=u("h3"),i=F(n[0]),o=C(),s=u("p"),a=F(n[1]),c=C(),d=u("div"),_=u("button"),h=F(n[2]),v=C(),k=u("button"),g=F(n[3]),r(l,"class","svelte-1fv6yyk"),r(s,"class","message svelte-1fv6yyk"),r(_,"class",p="btn "+(n[4]?"btn-danger":"btn-primary")+" svelte-1fv6yyk"),r(k,"class","btn svelte-1fv6yyk"),r(d,"class","actions svelte-1fv6yyk"),r(t,"class","modal svelte-1fv6yyk"),r(e,"class","overlay svelte-1fv6yyk"),r(e,"role","dialog"),r(e,"aria-modal","true"),r(e,"aria-label",n[0])},m(j,H){b(j,e,H),f(e,t),f(t,l),f(l,i),f(t,o),f(t,s),f(s,a),f(t,c),f(t,d),f(d,_),f(_,h),f(d,v),f(d,k),f(k,g),w||(T=[L(_,"click",n[6]),L(k,"click",n[7]),L(e,"click",ze(n[8]))],w=!0)},p(j,[H]){H&1&&q(i,j[0]),H&2&&q(a,j[1]),H&4&&q(h,j[2]),H&16&&p!==(p="btn "+(j[4]?"btn-danger":"btn-primary")+" svelte-1fv6yyk")&&r(_,"class",p),H&8&&q(g,j[3]),H&1&&r(e,"aria-label",j[0])},i:J,o:J,d(j){j&&y(e),w=!1,re(T)}}}function ji(n,e,t){let{title:l="Подтверждение"}=e,{message:i=""}=e,{confirmText:o="Удалить"}=e,{cancelText:s="Отмена"}=e,{danger:a=!1}=e;const c=Ve(),d=()=>c("confirm"),_=()=>c("cancel"),h=()=>c("cancel");return n.$$set=p=>{"title"in p&&t(0,l=p.title),"message"in p&&t(1,i=p.message),"confirmText"in p&&t(2,o=p.confirmText),"cancelText"in p&&t(3,s=p.cancelText),"danger"in p&&t(4,a=p.danger)},[l,i,o,s,a,c,d,_,h]}class Bi extends Le{constructor(e){super(),De(this,e,ji,Pi,Te,{title:0,message:1,confirmText:2,cancelText:3,danger:4})}}function Dt(n,e,t){const l=n.slice();return l[134]=e[t],l}function Lt(n,e,t){const l=n.slice();return l[137]=e[t],l}function Nt(n,e,t){const l=n.slice();return l[148]=e[t],l}function Et(n,e,t){const l=n.slice();return l[145]=e[t],l}function Ft(n,e,t){const l=n.slice();return l[140]=e[t],l}function Ot(n,e,t){const l=n.slice();return l[137]=e[t],l}function It(n,e,t){const l=n.slice();return l[140]=e[t],l}function Pt(n,e,t){const l=n.slice();return l[153]=e[t],l}function jt(n,e,t){const l=n.slice();return l[134]=e[t],l}function Bt(n,e,t){const l=n.slice();return l[158]=e[t],l}function At(n,e,t){const l=n.slice();return l[161]=e[t],l}function Ht(n){let e,t=n[161].label+"",l,i,o,s,a;function c(){return n[76](n[161])}return{c(){e=u("button"),l=F(t),i=C(),r(e,"class",o="nav-item "+(n[4]===n[161].id?"selected":"")+" svelte-9y78h7")},m(d,_){b(d,e,_),f(e,l),f(e,i),s||(a=L(e,"click",c),s=!0)},p(d,_){n=d,_[0]&1&&t!==(t=n[161].label+"")&&q(l,t),_[0]&17&&o!==(o="nav-item "+(n[4]===n[161].id?"selected":"")+" svelte-9y78h7")&&r(e,"class",o)},d(d){d&&y(e),s=!1,a()}}}function zt(n){let e,t,l,i,o,s=n[1].length>0&&Vt(n),a=ne(n[1]),c=[];for(let _=0;_0?s?s.p(_,h):(s=Vt(_),s.c(),s.m(t,null)):s&&(s.d(1),s=null),h[0]&34|h[1]&256){a=ne(_[1]);let p;for(p=0;p ',r(i,"class","dismiss-btn svelte-9y78h7"),r(i,"aria-label","Dismiss"),r(e,"class","error-banner svelte-9y78h7")},m(a,c){b(a,e,c),f(e,t),f(e,l),f(e,i),o||(s=[L(i,"click",_e(n[78])),L(e,"click",n[79])],o=!0)},p(a,c){c[0]&8&&q(t,a[3])},d(a){a&&y(e),o=!1,re(s)}}}function Vi(n){let e,t,l;function i(a,c){if(a[18])return Gi;if(a[0].length>0)return qi;if(a[3])return Ki}let o=i(n),s=o&&o(n);return{c(){e=u("div"),t=u("h2"),t.textContent="Верстак",l=C(),s&&s.c(),r(t,"class","svelte-9y78h7"),r(e,"class","welcome svelte-9y78h7")},m(a,c){b(a,e,c),f(e,t),f(e,l),s&&s.m(e,null)},p(a,c){o===(o=i(a))&&s?s.p(a,c):(s&&s.d(1),s=o&&o(a),s&&(s.c(),s.m(e,null)))},i:J,o:J,d(a){a&&y(e),s&&s.d()}}}function Wi(n){let e,t,l,i,o,s,a=ne(n[37]),c=[];for(let p=0;p{_[k]=null}),ve()),~i?(o=_[i],o?o.p(p,v):(o=_[i]=d[i](p),o.c()),le(o,1),o.m(l,null)):o=null)},i(p){s||(le(o),s=!0)},o(p){se(o),s=!1},d(p){p&&(y(e),y(t),y(l)),me(c,p),~i&&_[i].d()}}}function Ri(n){let e,t,l,i=n[8].title+"",o,s,a,c,d,_,h,p,v,k,g,w=n[8].dirty&&il();return{c(){e=u("div"),t=u("div"),l=u("span"),o=F(i),s=C(),w&&w.c(),a=C(),c=u("div"),d=u("button"),d.textContent="Сохранить",_=C(),h=u("button"),h.textContent="Закрыть",p=C(),v=u("textarea"),r(l,"class","note-title svelte-9y78h7"),r(d,"class","btn btn-primary svelte-9y78h7"),r(h,"class","btn svelte-9y78h7"),r(c,"class","note-editor-actions svelte-9y78h7"),r(t,"class","note-editor-header svelte-9y78h7"),r(v,"class","note-textarea svelte-9y78h7"),r(v,"placeholder","Начните писать..."),r(e,"class","note-editor svelte-9y78h7")},m(T,j){b(T,e,j),f(e,t),f(t,l),f(l,o),f(t,s),w&&w.m(t,null),f(t,a),f(t,c),f(c,d),f(c,_),f(c,h),f(e,p),f(e,v),de(v,n[8].content),k||(g=[L(d,"click",n[68]),L(h,"click",n[66]),L(v,"input",n[80]),L(v,"input",n[67])],k=!0)},p(T,j){j[0]&256&&i!==(i=T[8].title+"")&&q(o,i),T[8].dirty?w||(w=il(),w.c(),w.m(t,a)):w&&(w.d(1),w=null),j[0]&256&&de(v,T[8].content)},i:J,o:J,d(T){T&&y(e),w&&w.d(),k=!1,re(g)}}}function Ki(n){let e,t,l;return{c(){e=u("p"),t=F("Ошибка: "),l=F(n[3]),r(e,"class","error-text svelte-9y78h7")},m(i,o){b(i,e,o),f(e,t),f(e,l)},p(i,o){o[0]&8&&q(l,i[3])},d(i){i&&y(e)}}}function qi(n){let e,t,l;return{c(){e=u("p"),e.textContent="Выберите раздел в боковой панели.",t=C(),l=u("p"),l.textContent="Или создайте новое дело кнопкой «+».",r(e,"class","svelte-9y78h7"),r(l,"class","hint svelte-9y78h7")},m(i,o){b(i,e,o),b(i,t,o),b(i,l,o)},p:J,d(i){i&&(y(e),y(t),y(l))}}}function Gi(n){let e;return{c(){e=u("p"),e.textContent="Загрузка...",r(e,"class","svelte-9y78h7")},m(t,l){b(t,e,l)},p:J,d(t){t&&y(e)}}}function Gt(n){let e,t=n[153].label+"",l,i,o;function s(){return n[81](n[153])}return{c(){e=u("button"),l=F(t),r(e,"class",Fn(n[75](n[153].id))+" svelte-9y78h7")},m(a,c){b(a,e,c),f(e,l),i||(o=L(e,"click",s),i=!0)},p(a,c){n=a},d(a){a&&y(e),i=!1,o()}}}function Ui(n){let e;return{c(){e=u("div"),e.innerHTML='Активность появится позже
',r(e,"class","empty-state svelte-9y78h7")},m(t,l){b(t,e,l)},p:J,i:J,o:J,d(t){t&&y(e)}}}function Ji(n){let e,t,l,i,o,s,a,c,d,_,h,p;function v(w,T){return w[10].length===0?$i:xi}let k=v(n),g=k(n);return{c(){e=u("div"),t=u("div"),l=u("input"),i=C(),o=u("input"),s=C(),a=u("button"),c=F("Записать"),_=C(),g.c(),r(l,"type","text"),r(l,"placeholder","Что сделано"),r(l,"class","svelte-9y78h7"),r(o,"type","number"),r(o,"placeholder","Мин"),r(o,"min","1"),r(o,"class","svelte-9y78h7"),r(a,"class","btn btn-primary svelte-9y78h7"),a.disabled=d=!n[12].trim()||!n[11],r(t,"class","worklog-form svelte-9y78h7"),r(e,"class","worklog-tab svelte-9y78h7")},m(w,T){b(w,e,T),f(e,t),f(t,l),de(l,n[12]),f(t,i),f(t,o),de(o,n[11]),f(t,s),f(t,a),f(a,c),f(e,_),g.m(e,null),h||(p=[L(l,"input",n[102]),L(o,"input",n[103]),L(a,"click",n[69])],h=!0)},p(w,T){T[0]&4096&&l.value!==w[12]&&de(l,w[12]),T[0]&2048&&pl(o.value)!==w[11]&&de(o,w[11]),T[0]&6144&&d!==(d=!w[12].trim()||!w[11])&&(a.disabled=d),k===(k=v(w))&&g?g.p(w,T):(g.d(1),g=k(w),g&&(g.c(),g.m(e,null)))},i:J,o:J,d(w){w&&y(e),g.d(),h=!1,re(p)}}}function Xi(n){let e;function t(o,s){return o[9].length===0?ts:es}let l=t(n),i=l(n);return{c(){i.c(),e=pe()},m(o,s){i.m(o,s),b(o,e,s)},p(o,s){l===(l=t(o))&&i?i.p(o,s):(i.d(1),i=l(o),i&&(i.c(),i.m(e.parentNode,e)))},i:J,o:J,d(o){o&&y(e),i.d(o)}}}function Zi(n){let e,t,l,i,o,s,a,c,d,_,h,p,v,k,g,w,T,j,H,I=n[30].items.length>0&&Xt(n);const A=[ns,ls],P=[];function N(D,Z){return D[22]?0:1}p=N(n),v=P[p]=A[p](n);let O=n[19]&&!n[21]&&Yt(),M=n[26]&&Qt(n);return{c(){e=u("div"),t=u("div"),l=u("button"),i=F("+ Добавить файл"),o=C(),s=u("button"),a=F("+ Добавить папку"),c=C(),d=u("button"),d.textContent="+ Новый файл",_=C(),I&&I.c(),h=C(),v.c(),k=C(),O&&O.c(),g=C(),M&&M.c(),w=pe(),r(l,"class","btn btn-primary svelte-9y78h7"),l.disabled=n[19],r(s,"class","btn svelte-9y78h7"),s.disabled=n[19],r(d,"class","btn svelte-9y78h7"),r(t,"class","tab-toolbar svelte-9y78h7"),r(e,"class","files-tab svelte-9y78h7")},m(D,Z){b(D,e,Z),f(e,t),f(t,l),f(l,i),f(t,o),f(t,s),f(s,a),f(t,c),f(t,d),f(t,_),I&&I.m(t,null),f(e,h),P[p].m(e,null),f(e,k),O&&O.m(e,null),b(D,g,Z),M&&M.m(D,Z),b(D,w,Z),T=!0,j||(H=[L(l,"click",n[70]),L(s,"click",n[71]),L(d,"click",n[46])],j=!0)},p(D,Z){(!T||Z[0]&524288)&&(l.disabled=D[19]),(!T||Z[0]&524288)&&(s.disabled=D[19]),D[30].items.length>0?I?I.p(D,Z):(I=Xt(D),I.c(),I.m(t,null)):I&&(I.d(1),I=null);let V=p;p=N(D),p===V?P[p].p(D,Z):(he(),se(P[V],1,1,()=>{P[V]=null}),ve(),v=P[p],v?v.p(D,Z):(v=P[p]=A[p](D),v.c()),le(v,1),v.m(e,k)),D[19]&&!D[21]?O||(O=Yt(),O.c(),O.m(e,null)):O&&(O.d(1),O=null),D[26]?M?(M.p(D,Z),Z[0]&67108864&&le(M,1)):(M=Qt(D),M.c(),le(M,1),M.m(w.parentNode,w)):M&&(he(),se(M,1,1,()=>{M=null}),ve())},i(D){T||(le(v),le(M),T=!0)},o(D){se(v),se(M),T=!1},d(D){D&&(y(e),y(g),y(w)),I&&I.d(),P[p].d(),O&&O.d(),M&&M.d(D),j=!1,re(H)}}}function Yi(n){let e,t,l,i,o,s,a,c=n[16]&&xt(n);function d(p,v){return p[7].length===0&&!p[16]?as:cs}let _=d(n),h=_(n);return{c(){e=u("div"),t=u("div"),l=u("button"),l.textContent="+ Добавить заметку",i=C(),c&&c.c(),o=C(),h.c(),r(l,"class","btn btn-primary svelte-9y78h7"),r(t,"class","tab-toolbar svelte-9y78h7"),r(e,"class","notes-tab svelte-9y78h7")},m(p,v){b(p,e,v),f(e,t),f(t,l),f(e,i),c&&c.m(e,null),f(e,o),h.m(e,null),s||(a=L(l,"click",n[62]),s=!0)},p(p,v){p[16]?c?c.p(p,v):(c=xt(p),c.c(),c.m(e,o)):c&&(c.d(1),c=null),_===(_=d(p))&&h?h.p(p,v):(h.d(1),h=_(p),h&&(h.c(),h.m(e,null)))},i:J,o:J,d(p){p&&y(e),c&&c.d(),h.d(),s=!1,a()}}}function Qi(n){let e,t,l=n[5].title+"",i,o,s,a,c,d,_=n[5].type+"",h,p,v,k,g,w=(n[5].section||"—")+"",T,j,H,I,A,P=ye(n[5].createdAt)+"",N,O,M,D,Z,V,E,Y,ee,W,X,te,B,G,Q=n[7].length>0&&el(n),K=n[10].length>0&&ll(n);return{c(){e=u("div"),t=u("h2"),i=F(l),o=C(),s=u("div"),a=u("div"),c=u("span"),c.textContent="Тип",d=u("span"),h=F(_),p=C(),v=u("div"),k=u("span"),k.textContent="Раздел",g=u("span"),T=F(w),j=C(),H=u("div"),I=u("span"),I.textContent="Создано",A=u("span"),N=F(P),O=C(),M=u("div"),D=u("button"),D.innerHTML=`
+ Новая заметка`,Z=C(),V=u("button"),V.innerHTML=`
+ Добавить файл`,E=C(),Y=u("button"),Y.innerHTML=`
+ Добавить действие`,ee=C(),W=u("button"),W.innerHTML=`
+ Записать время`,X=C(),Q&&Q.c(),te=C(),K&&K.c(),r(t,"class","svelte-9y78h7"),r(c,"class","meta-label svelte-9y78h7"),r(d,"class","svelte-9y78h7"),r(a,"class","meta-item svelte-9y78h7"),r(k,"class","meta-label svelte-9y78h7"),r(g,"class","svelte-9y78h7"),r(v,"class","meta-item svelte-9y78h7"),r(I,"class","meta-label svelte-9y78h7"),r(A,"class","svelte-9y78h7"),r(H,"class","meta-item svelte-9y78h7"),r(s,"class","meta-grid svelte-9y78h7"),r(D,"class","qa-btn svelte-9y78h7"),r(V,"class","qa-btn svelte-9y78h7"),r(Y,"class","qa-btn svelte-9y78h7"),Y.disabled=!0,r(Y,"title","Следующий этап"),r(W,"class","qa-btn svelte-9y78h7"),r(M,"class","quick-actions svelte-9y78h7"),r(e,"class","overview svelte-9y78h7")},m(U,x){b(U,e,x),f(e,t),f(t,i),f(e,o),f(e,s),f(s,a),f(a,c),f(a,d),f(d,h),f(s,p),f(s,v),f(v,k),f(v,g),f(g,T),f(s,j),f(s,H),f(H,I),f(H,A),f(A,N),f(e,O),f(e,M),f(M,D),f(M,Z),f(M,V),f(M,E),f(M,Y),f(M,ee),f(M,W),f(e,X),Q&&Q.m(e,null),f(e,te),K&&K.m(e,null),B||(G=[L(D,"click",n[82]),L(V,"click",n[83]),L(W,"click",n[84])],B=!0)},p(U,x){x[0]&32&&l!==(l=U[5].title+"")&&q(i,l),x[0]&32&&_!==(_=U[5].type+"")&&q(h,_),x[0]&32&&w!==(w=(U[5].section||"—")+"")&&q(T,w),x[0]&32&&P!==(P=ye(U[5].createdAt)+"")&&q(N,P),U[7].length>0?Q?Q.p(U,x):(Q=el(U),Q.c(),Q.m(e,te)):Q&&(Q.d(1),Q=null),U[10].length>0?K?K.p(U,x):(K=ll(U),K.c(),K.m(e,null)):K&&(K.d(1),K=null)},i:J,o:J,d(U){U&&y(e),Q&&Q.d(),K&&K.d(),B=!1,re(G)}}}function xi(n){let e,t=ne(n[10]),l=[];for(let i=0;iЗаписей работы пока нет',r(e,"class","empty-state svelte-9y78h7")},m(t,l){b(t,e,l)},p:J,d(t){t&&y(e)}}}function Ut(n){let e,t,l=n[137].summary+"",i,o,s,a=n[137].minutes+"",c,d,_=ye(n[137].createdAt)+"",h,p;return{c(){e=u("div"),t=u("div"),i=F(l),o=C(),s=u("div"),c=F(a),d=F(" мин · "),h=F(_),p=C(),r(t,"class","svelte-9y78h7"),r(s,"class","wl-meta svelte-9y78h7"),r(e,"class","worklog-entry svelte-9y78h7")},m(v,k){b(v,e,k),f(e,t),f(t,i),f(e,o),f(e,s),f(s,c),f(s,d),f(s,h),f(e,p)},p(v,k){k[0]&1024&&l!==(l=v[137].summary+"")&&q(i,l),k[0]&1024&&a!==(a=v[137].minutes+"")&&q(c,a),k[0]&1024&&_!==(_=ye(v[137].createdAt)+"")&&q(h,_)},d(v){v&&y(e)}}}function es(n){let e,t=ne(n[9]),l=[];for(let i=0;iДействий пока нет',r(e,"class","empty-state svelte-9y78h7")},m(t,l){b(t,e,l)},p:J,d(t){t&&y(e)}}}function Jt(n){let e,t,l=n[148].title+"",i,o,s=n[148].type+"",a,c,d,_,h,p;function v(){return n[101](n[148])}return{c(){e=u("div"),t=u("span"),i=F(l),o=u("span"),a=F(s),c=C(),d=u("button"),d.textContent="Запустить",_=C(),r(t,"class","svelte-9y78h7"),r(o,"class","action-type svelte-9y78h7"),r(d,"class","btn btn-sm svelte-9y78h7"),r(e,"class","action-card svelte-9y78h7")},m(k,g){b(k,e,g),f(e,t),f(t,i),f(e,o),f(o,a),f(e,c),f(e,d),f(e,_),h||(p=L(d,"click",v),h=!0)},p(k,g){n=k,g[0]&512&&l!==(l=n[148].title+"")&&q(i,l),g[0]&512&&s!==(s=n[148].type+"")&&q(a,s)},d(k){k&&y(e),h=!1,p()}}}function Xt(n){let e,t,l=n[30].items.length+"",i,o,s;return{c(){e=u("button"),t=F("Вставить "),i=F(l),r(e,"class","btn svelte-9y78h7")},m(a,c){b(a,e,c),f(e,t),f(e,i),o||(s=L(e,"click",n[51]),o=!0)},p(a,c){c[0]&1073741824&&l!==(l=a[30].items.length+"")&&q(i,l)},d(a){a&&y(e),o=!1,s()}}}function ls(n){let e,t,l,i,o,s,a;const c=[ss,is],d=[];function _(k,g){return k[24].length>0?0:1}e=_(n),t=d[e]=c[e](n);const h=[rs,os],p=[];function v(k,g){return k[25].length===0?0:1}return i=v(n),o=p[i]=h[i](n),{c(){t.c(),l=C(),o.c(),s=pe()},m(k,g){d[e].m(k,g),b(k,l,g),p[i].m(k,g),b(k,s,g),a=!0},p(k,g){let w=e;e=_(k),e===w?d[e].p(k,g):(he(),se(d[w],1,1,()=>{d[w]=null}),ve(),t=d[e],t?t.p(k,g):(t=d[e]=c[e](k),t.c()),le(t,1),t.m(l.parentNode,l));let T=i;i=v(k),i===T?p[i].p(k,g):(he(),se(p[T],1,1,()=>{p[T]=null}),ve(),o=p[i],o?o.p(k,g):(o=p[i]=h[i](k),o.c()),le(o,1),o.m(s.parentNode,s))},i(k){a||(le(t),le(o),a=!0)},o(k){se(t),se(o),a=!1},d(k){k&&(y(l),y(s)),d[e].d(k),p[i].d(k)}}}function ns(n){let e;return{c(){e=u("div"),e.innerHTML='Загрузка...
',r(e,"class","empty-state svelte-9y78h7")},m(t,l){b(t,e,l)},p:J,i:J,o:J,d(t){t&&y(e)}}}function is(n){let e,t;return e=new Ml({props:{crumbs:[{name:"Files"}]}}),{c(){we(e.$$.fragment)},m(l,i){be(e,l,i),t=!0},p:J,i(l){t||(le(e.$$.fragment,l),t=!0)},o(l){se(e.$$.fragment,l),t=!1},d(l){ke(e,l)}}}function ss(n){let e,t,l,i,o,s;return e=new Ml({props:{crumbs:[{name:"Files"},...n[24]]}}),e.$on("navigate",n[89]),{c(){we(e.$$.fragment),t=C(),l=u("button"),l.innerHTML=`
+ Back`,r(l,"class","btn btn-sm back-btn svelte-9y78h7")},m(a,c){be(e,a,c),b(a,t,c),b(a,l,c),i=!0,o||(s=L(l,"click",n[42]),o=!0)},p(a,c){const d={};c[0]&16777216&&(d.crumbs=[{name:"Files"},...a[24]]),e.$set(d)},i(a){i||(le(e.$$.fragment,a),i=!0)},o(a){se(e.$$.fragment,a),i=!1},d(a){a&&(y(t),y(l)),ke(e,a),o=!1,s()}}}function os(n){let e,t=[],l=new Map,i,o=ne(n[25]);const s=a=>a[145].id;for(let a=0;a0?"В этой папке пока нет файлов":"В этом проекте пока нет файлов",s,a,c,d,_,h,p,v,k,g;return{c(){e=u("div"),t=u("div"),t.innerHTML=' ',l=C(),i=u("p"),s=F(o),a=C(),c=u("p"),c.textContent="Добавьте файл или папку, чтобы сохранить материалы проекта.",d=C(),_=u("div"),h=u("button"),h.textContent="Добавить файл",p=C(),v=u("button"),v.textContent="Добавить папку",r(t,"class","empty-icon svelte-9y78h7"),r(i,"class","svelte-9y78h7"),r(c,"class","hint svelte-9y78h7"),r(h,"class","btn btn-primary svelte-9y78h7"),r(v,"class","btn svelte-9y78h7"),r(_,"class","empty-actions svelte-9y78h7"),r(e,"class","empty-state svelte-9y78h7")},m(w,T){b(w,e,T),f(e,t),f(e,l),f(e,i),f(i,s),f(e,a),f(e,c),f(e,d),f(e,_),f(_,h),f(_,p),f(_,v),k||(g=[L(h,"click",n[70]),L(v,"click",n[71])],k=!0)},p(w,T){T[0]&16777216&&o!==(o=w[24].length>0?"В этой папке пока нет файлов":"В этом проекте пока нет файлов")&&q(s,o)},i:J,o:J,d(w){w&&y(e),k=!1,re(g)}}}function Zt(n,e){let t,l,i;return l=new vi({props:{item:e[145],selected:e[31].includes(e[145].id),onDragStart:e[54],onDragOver:e[55],onDrop:e[56]}}),l.$on("navigate",e[90]),l.$on("preview",e[91]),l.$on("openExternal",e[92]),l.$on("delete",e[93]),l.$on("rename",e[94]),l.$on("duplicate",e[95]),l.$on("cut",e[96]),l.$on("copy",e[97]),l.$on("selectOne",e[98]),l.$on("toggleSelect",e[99]),{key:n,first:null,c(){t=pe(),we(l.$$.fragment),this.first=t},m(o,s){b(o,t,s),be(l,o,s),i=!0},p(o,s){e=o;const a={};s[0]&33554432&&(a.item=e[145]),s[0]&33554432|s[1]&1&&(a.selected=e[31].includes(e[145].id)),l.$set(a)},i(o){i||(le(l.$$.fragment,o),i=!0)},o(o){se(l.$$.fragment,o),i=!1},d(o){o&&y(t),ke(l,o)}}}function Yt(n){let e;return{c(){e=u("div"),e.innerHTML='Сканирование...
',r(e,"class","empty-state svelte-9y78h7")},m(t,l){b(t,e,l)},d(t){t&&y(e)}}}function Qt(n){let e,t;return e=new Ii({props:{item:n[26],content:n[27],loading:n[28],error:n[29]}}),e.$on("close",n[45]),e.$on("openExternal",n[100]),{c(){we(e.$$.fragment)},m(l,i){be(e,l,i),t=!0},p(l,i){const o={};i[0]&67108864&&(o.item=l[26]),i[0]&134217728&&(o.content=l[27]),i[0]&268435456&&(o.loading=l[28]),i[0]&536870912&&(o.error=l[29]),e.$set(o)},i(l){t||(le(e.$$.fragment,l),t=!0)},o(l){se(e.$$.fragment,l),t=!1},d(l){ke(e,l)}}}function xt(n){let e,t,l,i,o,s,a,c,d;return{c(){e=u("div"),t=u("input"),l=C(),i=u("div"),o=u("button"),o.textContent="Создать",s=C(),a=u("button"),a.textContent="Отмена",r(t,"type","text"),r(t,"placeholder","Название заметки"),r(t,"class","svelte-9y78h7"),r(o,"class","btn btn-primary svelte-9y78h7"),r(a,"class","btn svelte-9y78h7"),r(i,"class","form-actions svelte-9y78h7"),r(e,"class","create-form svelte-9y78h7")},m(_,h){b(_,e,h),f(e,t),de(t,n[17]),f(e,l),f(e,i),f(i,o),f(i,s),f(i,a),c||(d=[L(t,"input",n[86]),L(t,"keydown",n[87]),L(o,"click",n[64]),L(a,"click",n[63])],c=!0)},p(_,h){h[0]&131072&&t.value!==_[17]&&de(t,_[17])},d(_){_&&y(e),c=!1,re(d)}}}function cs(n){let e,t=ne(n[7]),l=[];for(let i=0;iНет заметокСоздайте первую заметку для этого дела.
',r(e,"class","empty-state svelte-9y78h7")},m(t,l){b(t,e,l)},p:J,d(t){t&&y(e)}}}function $t(n){let e,t,l=n[140].title+"",i,o,s,a=ye(n[140].createdAt)+"",c,d,_,h;function p(){return n[88](n[140])}return{c(){e=u("div"),t=u("div"),i=F(l),o=C(),s=u("div"),c=F(a),d=C(),r(t,"class","note-card-title svelte-9y78h7"),r(s,"class","note-card-date svelte-9y78h7"),r(e,"class","note-card svelte-9y78h7")},m(v,k){b(v,e,k),f(e,t),f(t,i),f(e,o),f(e,s),f(s,c),f(e,d),_||(h=L(e,"click",p),_=!0)},p(v,k){n=v,k[0]&128&&l!==(l=n[140].title+"")&&q(i,l),k[0]&128&&a!==(a=ye(n[140].createdAt)+"")&&q(c,a)},d(v){v&&y(e),_=!1,h()}}}function el(n){let e,t,l,i=ne(n[7].slice(0,5)),o=[];for(let s=0;sn[106].call(v)),r(_,"class","form-group svelte-9y78h7"),r(w,"class","btn btn-primary svelte-9y78h7"),r(j,"class","btn svelte-9y78h7"),r(g,"class","modal-actions svelte-9y78h7"),r(t,"class","modal svelte-9y78h7"),r(e,"class","modal-overlay svelte-9y78h7")},m(N,O){b(N,e,O),f(e,t),f(t,l),f(t,i),f(t,o),f(o,s),f(o,a),f(o,c),de(c,n[14]),f(t,d),f(t,_),f(_,h),f(_,p),f(_,v);for(let M=0;M⚒ Верстак ',i=C(),o=u("nav"),s=u("div"),a=u("div"),a.textContent="Разделы",c=C();for(let z=0;z{B[ue]=null}),ve(),A=B[I],A?A.p(z,oe):(A=B[I]=te[I](z),A.c()),le(A,1),A.m(g,P)),!z[8]&&!z[5]?Q?Q.p(z,oe):(Q=sl(z),Q.c(),Q.m(g,N)):Q&&(Q.d(1),Q=null),z[13]?K?K.p(z,oe):(K=ol(z),K.c(),K.m(g,O)):K&&(K.d(1),K=null),z[21]&&z[20]?U?U.p(z,oe):(U=cl(z),U.c(),U.m(g,M)):U&&(U.d(1),U=null),z[32]?x?(x.p(z,oe),oe[1]&2&&le(x,1)):(x=fl(z),x.c(),le(x,1),x.m(g,null)):x&&(he(),se(x,1,1,()=>{x=null}),ve())},i(z){D||(le(A),le(x),D=!0)},o(z){se(A),se(x),D=!1},d(z){z&&y(e),me(V,z),E&&E.d(),W.d(),X&&X.d(),B[I].d(),Q&&Q.d(),K&&K.d(),U&&U.d(),x&&x.d()}}}function $(n,...e){try{if(window.go&&window.go.main&&window.go.main.App){const t=window.go.main.App[n];if(typeof t=="function")return t(...e)}}catch(t){console.error("Wails call error:",n,t)}return Promise.reject(new Error("Wails not connected: "+n))}function ye(n){if(!n)return"";try{return new Date(n).toLocaleDateString("ru-RU",{day:"numeric",month:"short"})}catch{return n}}const ul=n=>n.id!=="today"&&n.id!=="inbox";function us(n,e,t){let l=[],i=[],o="",s="",a="",c=null,d="overview",_=[],h=null,p=[],v=[],k=[],g="",w="",T=!1,j="",H="clients",I=!1,A="",P=!0,N=!1,O=null,M=!1,D="",Z=!1,V=null,E=[],Y=[],ee=null,W="",X=!1,te="",B={items:[],mode:"copy"},G=[],Q=[],K=!1,U="",x="",z=!1,oe="Удалить",ue=null,ce=null;const Fe=[{id:"overview",label:"Обзор"},{id:"notes",label:"Заметки"},{id:"files",label:"Файлы"},{id:"actions",label:"Действия"},{id:"worklog",label:"Журнал"},{id:"activity",label:"Активность"}];let We=null;_l(async()=>{try{t(2,o=await $("VerstakVersion")||"verstak-gui/v2"),t(0,l=await $("ListSections")||[])}catch(m){t(3,s=String(m)),t(0,l=[{id:"today",label:"Сегодня"},{id:"inbox",label:"Неразобранное"},{id:"clients",label:"Клиенты"},{id:"projects",label:"Проекты"},{id:"recipes",label:"Рецепты"},{id:"documents",label:"Документы"},{id:"archive",label:"Архив"}])}window.runtime&&window.runtime.EventsOn&&(window.runtime.EventsOn("files-dropped",Jl),We=()=>window.runtime.EventsOff("files-dropped")),window.addEventListener("keydown",ut),t(18,P=!1)}),hl(()=>{We&&We(),window.removeEventListener("keydown",ut)});async function Re(m){t(4,a=m),t(5,c=null),t(6,d="overview"),t(7,_=[]),p=[],t(9,v=[]),t(10,k=[]),t(13,T=!1),t(3,s="");try{t(1,i=await $("ListNodesBySection",m)||[])}catch(S){t(3,s=String(S)),t(1,i=[])}}async function $e(m){t(5,c=m),t(6,d="overview"),t(7,_=[]),p=[],t(9,v=[]),t(10,k=[]),t(25,Y=[]),t(24,E=[]),t(23,V=null),t(26,ee=null),t(27,W=""),t(31,G=[]),Q=[],t(8,h=null),t(13,T=!1),t(16,I=!1),t(3,s=""),await et(m.id)}async function et(m){try{t(7,_=await $("ListNotes",m)||[])}catch{}try{p=await $("ListFiles",m)||[]}catch{}try{t(9,v=await $("ListActions",m)||[])}catch{}try{t(10,k=await $("ListWorklog",m)||[])}catch{}}async function ae(m){t(22,Z=!0);try{let S=await $("ListItems",m)||[];S.sort((ie,fe)=>ie.type!==fe.type?ie.type==="folder"?-1:1:(ie.name||"").localeCompare(fe.name||"")),t(25,Y=S)}catch{t(25,Y=[])}t(22,Z=!1)}async function tt(m){if(c){try{const S=await $("GetNodeDetail",m);S&&t(24,E=[...E,{id:m,name:S.title}])}catch{t(24,E=[...E,{id:m,name:"..."}])}t(23,V=m),await ae(m)}}function Sl(){if(E.length<2)t(24,E=[]),t(23,V=null),ae(c.id);else{const m=E[E.length-2];t(24,E=E.slice(0,-1)),t(23,V=m.id),ae(m.id)}}function lt(m){const S=E[m];t(24,E=E.slice(0,m+1)),t(23,V=S.id),ae(S.id)}async function nt(m){t(26,ee=m),t(27,W=""),t(29,te=""),t(28,X=!0);try{ai(m)?t(27,W=await $("GetFileBase64",m.fileId)||""):fi(m)&&t(27,W=await $("ReadFileText",m.fileId)||"")}catch(S){t(29,te=String(S))}t(28,X=!1)}function Tl(){t(26,ee=null),t(27,W=""),t(29,te="")}async function Dl(){const m=prompt("Введите имя файла:");if(!(!m||!m.trim()))try{const S=V||c.id;await $("CreateEmptyFile",S,m.trim()),await ae(S)}catch(S){t(3,s=String(S))}}async function it(m){try{await $("DuplicateNode",m);const S=V||c.id;await ae(S)}catch(S){t(3,s=String(S))}}function st(m){const S=prompt("Новое имя:");!S||!S.trim()||Ll(m,S.trim())}async function Ll(m,S){try{await $("RenameNode",m,S);const ie=V||c.id;await ae(ie)}catch(ie){t(3,s=String(ie))}}function ot(m){t(30,B={items:[m],mode:"cut"})}function rt(m){t(30,B={items:[m],mode:"copy"})}async function ct(){if(B.items.length===0)return;const m=V||c.id;try{if(B.mode==="copy")for(const S of B.items)await $("DuplicateNode",S);else for(const S of B.items)await $("MoveNode",S,m);t(30,B={items:[],mode:"copy"}),await ae(m)}catch(S){t(3,s=String(S))}}function at(m){G.includes(m)?t(31,G=G.filter(S=>S!==m)):t(31,G=[...G,m])}function ft(m){t(31,G=[m])}function Nl(){t(31,G=Y.map(m=>m.id))}function Ke(m){return m.length>0?m:Y.map(S=>S.id)}async function El(){var ie;const m=Ke(G),S=m.length===1&&((ie=Y.find(fe=>fe.id===m[0]))==null?void 0:ie.type)==="folder"?"папку":`файлов (${m.length})`;Oe({title:"Удаление",message:`Удалить ${S}?`,confirmText:"Удалить",danger:!0,onConfirm:async()=>{for(const Je of m)try{await $("DeleteFileOrFolder",Je)}catch(Dn){t(3,s=String(Dn))}t(31,G=[]);const fe=V||c.id;await ae(fe)}})}function Fl(){const m=Ke(G);t(30,B={items:m,mode:"cut"}),t(31,G=[])}function Ol(){const m=Ke(G);t(30,B={items:m,mode:"copy"}),t(31,G=[])}function Il(m,S){const ie=G.includes(S)?G:[S];Q=ie,m.dataTransfer.effectAllowed="move",m.dataTransfer.setData("text/plain",ie.join(","))}function Pl(m,S){const ie=Y.find(fe=>fe.id===S);ie&&ie.type==="folder"&&(m.preventDefault(),m.dataTransfer.dropEffect="move")}async function jl(m,S){if(m.preventDefault(),Q.length!==0){for(const ie of Q)try{await $("MoveNode",ie,S)}catch(fe){t(3,s=String(fe))}Q=[],t(31,G=[]),await ae(V||c.id)}}function ut(m){d==="files"&&(m.target.tagName==="INPUT"||m.target.tagName==="TEXTAREA"||(m.ctrlKey||m.metaKey?m.key==="c"?(m.preventDefault(),Ol()):m.key==="x"?(m.preventDefault(),Fl()):m.key==="v"?(m.preventDefault(),ct()):m.key==="a"&&(m.preventDefault(),Nl()):(m.key==="Delete"||m.key==="Backspace")&&G.length>0&&(m.preventDefault(),El())))}function Oe(m){t(33,U=m.title||"Подтверждение"),t(34,x=m.message||""),t(35,z=m.danger!==void 0?m.danger:!0),t(36,oe=m.confirmText||"Удалить"),ue=m.onConfirm||null,ce=m.onCancel||null,t(32,K=!0)}function dt(){t(32,K=!1),ue=null,ce=null}function Bl(){ue&&ue(),dt()}function Al(){ce&&ce(),dt()}function Hl(){t(13,T=!0),t(14,j=""),t(15,H=a||"clients")}function zl(){t(13,T=!1),t(14,j="")}async function mt(){if(j.trim())try{const m=await $("CreateNode","","case",j.trim(),H);t(13,T=!1),t(14,j=""),await Re(H)}catch(m){t(3,s=String(m))}}function pt(){t(16,I=!0),t(17,A="")}function Vl(){t(16,I=!1),t(17,A="")}async function _t(){if(!(!A.trim()||!c))try{const m=await $("CreateNote",c.id,A.trim());t(7,_=[..._,m&&m.id?m:{id:Date.now().toString(),title:A.trim(),createdAt:new Date().toISOString()}]),t(16,I=!1),t(17,A="")}catch{const S={id:Date.now().toString(),title:A.trim(),createdAt:new Date().toISOString()};t(7,_=[..._,S]),t(16,I=!1),t(17,A="")}}async function qe(m){if(h&&h.dirty){Oe({title:"Несохранённые изменения",message:"Закрыть редактор? Все несохранённые изменения будут потеряны.",confirmText:"Закрыть",danger:!1,onConfirm:async()=>{await ht(m)}});return}await ht(m)}async function ht(m){try{const S=await $("ReadNote",m.id);t(8,h={id:m.id,title:m.title,content:S||"",dirty:!1})}catch{t(8,h={id:m.id,title:m.title,content:"# "+m.title+`
+
+`,dirty:!1})}}function Wl(){if(h&&h.dirty){Oe({title:"Несохранённые изменения",message:"Закрыть редактор? Все несохранённые изменения будут потеряны.",confirmText:"Закрыть",danger:!1,onConfirm:()=>{t(8,h=null)}});return}t(8,h=null)}function Rl(m){h&&(t(8,h.content=m.target.value,h),t(8,h.dirty=!0,h))}async function Kl(){if(h)try{await $("SaveNote",h.id,h.content),t(8,h.dirty=!1,h)}catch{t(8,h.dirty=!1,h)}}async function ql(){const m=parseInt(g,10);if(!(!w.trim()||isNaN(m)||m<=0||!c)){try{const S=await $("CreateWorklog",c.id,w.trim(),m);t(10,k=[...k,S&&S.id?S:{id:Date.now().toString(),nodeId:c.id,summary:w.trim(),minutes:m,createdAt:new Date().toISOString()}])}catch{t(10,k=[...k,{id:Date.now().toString(),nodeId:c.id,summary:w.trim(),minutes:m,createdAt:new Date().toISOString()}])}t(12,w=""),t(11,g="")}}async function vt(){const m=await $("PickFile");m&&await Ge(c.id,m)}async function Gl(){const m=await $("PickDirectory");m&&await Ge(c.id,m)}async function Ge(m,S){t(19,N=!0);try{const ie=await $("PreviewImport",S);t(20,O=ie),D=S,t(21,M=!0)}catch(ie){t(3,s=String(ie))}t(19,N=!1)}async function Ue(m){try{const S=m==="copy"?await $("AddPathCopy",c.id,D):await $("AddPathLink",c.id,D);t(21,M=!1),t(20,O=null),t(24,E=[]),t(23,V=null),await Promise.all([et(c.id),ae(c.id)])}catch(S){t(3,s=String(S))}}function Ul(){t(21,M=!1),t(20,O=null)}async function yt({id:m,type:S}){Oe({title:"Удаление",message:`Удалить ${S==="folder"?"папку":"файл"}?`,confirmText:"Удалить",danger:!0,onConfirm:async()=>{try{await $("DeleteFileOrFolder",m),p=p.filter(Je=>Je.nodeId!==m);const fe=V||c.id;await ae(fe)}catch(fe){t(3,s=String(fe))}}})}async function Jl(m){if(!m||m.length===0)return;if(!c){t(3,s="Сначала выберите дело для добавления файлов");return}const S=m[0];await Ge(c.id,S)}function Xl(m){return d===m?"tab active":"tab"}const Zl=m=>Re(m.id),Yl=m=>$e(m),Ql=()=>t(3,s=""),xl=()=>t(3,s="");function $l(){h.content=this.value,t(8,h)}const en=m=>{t(6,d=m.id),m.id==="files"&&c&&Y.length===0&&!V&&ae(c.id)},tn=()=>{t(6,d="notes"),pt()},ln=()=>{t(6,d="files"),vt()},nn=()=>t(6,d="worklog"),sn=m=>qe(m);function on(){A=this.value,t(17,A)}const rn=m=>m.key==="Enter"&&_t(),cn=m=>qe(m),an=m=>{const S=m.detail;S===0?(t(24,E=[]),t(23,V=null),ae(c.id)):lt(S-1)},fn=m=>tt(m.detail),un=m=>nt(m.detail),dn=m=>$("OpenFile",m.detail),mn=m=>yt(m.detail),pn=m=>st(m.detail.id),_n=m=>it(m.detail),hn=m=>ot(m.detail),vn=m=>rt(m.detail),yn=m=>ft(m.detail),bn=m=>at(m.detail),kn=m=>$("OpenFile",m.detail),gn=m=>$("RunAction",m.id);function wn(){w=this.value,t(12,w)}function Cn(){g=pl(this.value),t(11,g)}function Mn(){j=this.value,t(14,j)}const Sn=m=>m.key==="Enter"&&mt();function Tn(){H=In(this),t(15,H),t(0,l)}return[l,i,o,s,a,c,d,_,h,v,k,g,w,T,j,H,I,A,P,N,O,M,Z,V,E,Y,ee,W,X,te,B,G,K,U,x,z,oe,Fe,Re,$e,ae,tt,Sl,lt,nt,Tl,Dl,it,st,ot,rt,ct,at,ft,Il,Pl,jl,Bl,Al,Hl,zl,mt,pt,Vl,_t,qe,Wl,Rl,Kl,ql,vt,Gl,Ue,Ul,yt,Xl,Zl,Yl,Ql,xl,$l,en,tn,ln,nn,sn,on,rn,cn,an,fn,un,dn,mn,pn,_n,hn,vn,yn,bn,kn,gn,wn,Cn,Mn,Sn,Tn,()=>Ue("copy"),()=>Ue("link")]}class ds extends Le{constructor(e){super(),De(this,e,us,fs,Te,{},null,[-1,-1,-1,-1,-1,-1])}}new ds({target:document.getElementById("app")});
diff --git a/cmd/verstak-gui/frontend-dist/assets/main-rybDIgHs.js b/cmd/verstak-gui/frontend-dist/assets/main-rybDIgHs.js
new file mode 100644
index 0000000..3549be9
--- /dev/null
+++ b/cmd/verstak-gui/frontend-dist/assets/main-rybDIgHs.js
@@ -0,0 +1,3 @@
+var Tl=Object.defineProperty;var Al=(n,e,t)=>e in n?Tl(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t;var Ie=(n,e,t)=>Al(n,typeof e!="symbol"?e+"":e,t);(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const i of document.querySelectorAll('link[rel="modulepreload"]'))l(i);new MutationObserver(i=>{for(const s of i)if(s.type==="childList")for(const r of s.addedNodes)r.tagName==="LINK"&&r.rel==="modulepreload"&&l(r)}).observe(document,{childList:!0,subtree:!0});function t(i){const s={};return i.integrity&&(s.integrity=i.integrity),i.referrerPolicy&&(s.referrerPolicy=i.referrerPolicy),i.crossOrigin==="use-credentials"?s.credentials="include":i.crossOrigin==="anonymous"?s.credentials="omit":s.credentials="same-origin",s}function l(i){if(i.ep)return;i.ep=!0;const s=t(i);fetch(i.href,s)}})();function q(){}function Dt(n){return n()}function Xe(){return Object.create(null)}function ne(n){n.forEach(Dt)}function Vt(n){return typeof n=="function"}function Ce(n,e){return n!=n?e==e:n!==e||n&&typeof n=="object"||typeof n=="function"}let Ne;function Se(n,e){return n===e?!0:(Ne||(Ne=document.createElement("a")),Ne.href=e,n===Ne.href)}function Hl(n){return Object.keys(n).length===0}function Il(n){return n??""}function a(n,e){n.appendChild(e)}function v(n,e,t){n.insertBefore(e,t||null)}function m(n){n.parentNode&&n.parentNode.removeChild(n)}function ce(n,e){for(let t=0;tn.removeEventListener(e,t,l)}function Fe(n){return function(e){return e.stopPropagation(),n.call(this,e)}}function Ve(n){return function(e){e.target===this&&n.call(this,e)}}function o(n,e,t){t==null?n.removeAttribute(e):n.getAttribute(e)!==t&&n.setAttribute(e,t)}function Wt(n){return n===""?null:+n}function Bl(n){return Array.from(n.childNodes)}function V(n,e){e=""+e,n.data!==e&&(n.data=e)}function re(n,e){n.value=e??""}function Ye(n,e,t){for(let l=0;l{const i=n.$$.callbacks[e];if(i){const s=Vl(e,t,{cancelable:l});return i.slice().forEach(r=>{r.call(n,s)}),!s.defaultPrevented}return!0}}const ke=[],Qe=[];let be=[];const xe=[],Wl=Promise.resolve();let De=!1;function ql(){De||(De=!0,Wl.then(Gt))}function ze(n){be.push(n)}const Be=new Set;let ve=0;function Gt(){if(ve!==0)return;const n=je;do{try{for(;ven.indexOf(l)===-1?e.push(l):t.push(l)),t.forEach(l=>l()),be=e}const Ee=new Set;let fe;function de(){fe={r:0,c:[],p:fe}}function pe(){fe.r||ne(fe.c),fe=fe.p}function ee(n,e){n&&n.i&&(Ee.delete(n),n.i(e))}function le(n,e,t,l){if(n&&n.o){if(Ee.has(n))return;Ee.add(n),fe.c.push(()=>{Ee.delete(n),l&&(t&&n.d(1),l())}),n.o(e)}else l&&l()}function $(n){return(n==null?void 0:n.length)!==void 0?n:Array.from(n)}function Kl(n,e){le(n,1,1,()=>{e.delete(n.key)})}function Jl(n,e,t,l,i,s,r,c,u,d,_,k){let p=n.length,b=s.length,h=p;const w={};for(;h--;)w[n[h].key]=h;const y=[],N=new Map,A=new Map,W=[];for(h=b;h--;){const L=k(i,s,h),I=t(L);let E=r.get(I);E?W.push(()=>E.p(L,e)):(E=d(I,L),E.c()),N.set(I,y[h]=E),I in w&&A.set(I,Math.abs(h-w[I]))}const z=new Set,S=new Set;function M(L){ee(L,1),L.m(c,_),r.set(L.key,L),_=L.first,b--}for(;p&&b;){const L=y[b-1],I=n[p-1],E=L.key,P=I.key;L===I?(_=L.first,p--,b--):N.has(P)?!r.has(E)||z.has(E)?M(L):S.has(P)?p--:A.get(E)>A.get(P)?(S.add(E),M(L)):(z.add(P),p--):(u(I,r),p--)}for(;p--;){const L=n[p];N.has(L.key)||u(L,r)}for(;b;)M(y[b-1]);return ne(W),y}function he(n){n&&n.c()}function _e(n,e,t){const{fragment:l,after_update:i}=n.$$;l&&l.m(e,t),ze(()=>{const s=n.$$.on_mount.map(Dt).filter(Vt);n.$$.on_destroy?n.$$.on_destroy.push(...s):ne(s),n.$$.on_mount=[]}),i.forEach(ze)}function me(n,e){const t=n.$$;t.fragment!==null&&(Gl(t.after_update),ne(t.on_destroy),t.fragment&&t.fragment.d(e),t.on_destroy=t.fragment=null,t.ctx=[])}function Ul(n,e){n.$$.dirty[0]===-1&&(ke.push(n),ql(),n.$$.dirty.fill(0)),n.$$.dirty[e/31|0]|=1<{const h=b.length?b[0]:p;return d.ctx&&i(d.ctx[k],d.ctx[k]=h)&&(!d.skip_bound&&d.bound[k]&&d.bound[k](h),_&&Ul(n,k)),p}):[],d.update(),_=!0,ne(d.before_update),d.fragment=l?l(d.ctx):!1,e.target){if(e.hydrate){const k=Bl(e.target);d.fragment&&d.fragment.l(k),k.forEach(m)}else d.fragment&&d.fragment.c();e.intro&&ee(n.$$.fragment),_e(n,e.target,e.anchor),Gt()}ye(u)}class Le{constructor(){Ie(this,"$$");Ie(this,"$$set")}$destroy(){me(this,1),this.$destroy=q}$on(e,t){if(!Vt(t))return q;const l=this.$$.callbacks[e]||(this.$$.callbacks[e]=[]);return l.push(t),()=>{const i=l.indexOf(t);i!==-1&&l.splice(i,1)}}$set(e){this.$$set&&!Hl(e)&&(this.$$.skip_bound=!0,this.$$set(e),this.$$.skip_bound=!1)}}const Zl="4";typeof window<"u"&&(window.__svelte||(window.__svelte={v:new Set})).v.add(Zl);function Xl(n){let e,t;return{c(){e=D("path"),t=D("polyline"),o(e,"d","M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"),o(t,"points","14 2 14 8 20 8")},m(l,i){v(l,e,i),v(l,t,i)},d(l){l&&(m(e),m(t))}}}function Yl(n){let e,t,l,i,s;return{c(){e=D("path"),t=D("polyline"),l=D("line"),i=D("line"),s=D("polyline"),o(e,"d","M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"),o(t,"points","14 2 14 8 20 8"),o(l,"x1","16"),o(l,"y1","13"),o(l,"x2","8"),o(l,"y2","13"),o(i,"x1","16"),o(i,"y1","17"),o(i,"x2","8"),o(i,"y2","17"),o(s,"points","10 9 9 9 8 9")},m(r,c){v(r,e,c),v(r,t,c),v(r,l,c),v(r,i,c),v(r,s,c)},d(r){r&&(m(e),m(t),m(l),m(i),m(s))}}}function Ql(n){let e,t;return{c(){e=D("polyline"),t=D("polyline"),o(e,"points","16 18 22 12 16 6"),o(t,"points","8 6 2 12 8 18")},m(l,i){v(l,e,i),v(l,t,i)},d(l){l&&(m(e),m(t))}}}function xl(n){let e,t,l,i;return{c(){e=D("path"),t=D("polyline"),l=D("line"),i=D("rect"),o(e,"d","M21 8v13a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8"),o(t,"points","7 3 12 8 17 3"),o(l,"x1","3"),o(l,"y1","8"),o(l,"x2","21"),o(l,"y2","8"),o(i,"x","10"),o(i,"y","12"),o(i,"width","4"),o(i,"height","4"),o(i,"rx","1")},m(s,r){v(s,e,r),v(s,t,r),v(s,l,r),v(s,i,r)},d(s){s&&(m(e),m(t),m(l),m(i))}}}function $l(n){let e,t,l,i,s;return{c(){e=D("path"),t=D("polyline"),l=D("line"),i=D("line"),s=D("line"),o(e,"d","M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"),o(t,"points","14 2 14 8 20 8"),o(l,"x1","9"),o(l,"y1","12"),o(l,"x2","15"),o(l,"y2","12"),o(i,"x1","9"),o(i,"y1","15"),o(i,"x2","13"),o(i,"y2","15"),o(s,"x1","12"),o(s,"y1","15"),o(s,"x2","12"),o(s,"y2","18")},m(r,c){v(r,e,c),v(r,t,c),v(r,l,c),v(r,i,c),v(r,s,c)},d(r){r&&(m(e),m(t),m(l),m(i),m(s))}}}function en(n){let e,t,l,i,s,r;return{c(){e=D("path"),t=D("polyline"),l=D("line"),i=D("line"),s=D("line"),r=D("line"),o(e,"d","M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"),o(t,"points","14 2 14 8 20 8"),o(l,"x1","8"),o(l,"y1","12"),o(l,"x2","16"),o(l,"y2","12"),o(i,"x1","8"),o(i,"y1","16"),o(i,"x2","16"),o(i,"y2","16"),o(s,"x1","8"),o(s,"y1","14"),o(s,"x2","12"),o(s,"y2","14"),o(r,"x1","12"),o(r,"y1","12"),o(r,"x2","12"),o(r,"y2","18")},m(c,u){v(c,e,u),v(c,t,u),v(c,l,u),v(c,i,u),v(c,s,u),v(c,r,u)},d(c){c&&(m(e),m(t),m(l),m(i),m(s),m(r))}}}function tn(n){let e,t,l,i;return{c(){e=D("path"),t=D("polyline"),l=D("line"),i=D("line"),o(e,"d","M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"),o(t,"points","14 2 14 8 20 8"),o(l,"x1","16"),o(l,"y1","13"),o(l,"x2","8"),o(l,"y2","13"),o(i,"x1","16"),o(i,"y1","17"),o(i,"x2","8"),o(i,"y2","17")},m(s,r){v(s,e,r),v(s,t,r),v(s,l,r),v(s,i,r)},d(s){s&&(m(e),m(t),m(l),m(i))}}}function ln(n){let e,t,l,i,s;return{c(){e=D("path"),t=D("polyline"),l=D("line"),i=D("line"),s=D("line"),o(e,"d","M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"),o(t,"points","14 2 14 8 20 8"),o(l,"x1","8"),o(l,"y1","12"),o(l,"x2","16"),o(l,"y2","12"),o(i,"x1","8"),o(i,"y1","16"),o(i,"x2","16"),o(i,"y2","16"),o(s,"x1","8"),o(s,"y1","14"),o(s,"x2","12"),o(s,"y2","14")},m(r,c){v(r,e,c),v(r,t,c),v(r,l,c),v(r,i,c),v(r,s,c)},d(r){r&&(m(e),m(t),m(l),m(i),m(s))}}}function nn(n){let e,t,l;return{c(){e=D("path"),t=D("circle"),l=D("circle"),o(e,"d","M9 18V5l12-2v13"),o(t,"cx","6"),o(t,"cy","18"),o(t,"r","3"),o(l,"cx","18"),o(l,"cy","16"),o(l,"r","3")},m(i,s){v(i,e,s),v(i,t,s),v(i,l,s)},d(i){i&&(m(e),m(t),m(l))}}}function sn(n){let e,t;return{c(){e=D("rect"),t=D("polyline"),o(e,"x","2"),o(e,"y","4"),o(e,"width","20"),o(e,"height","16"),o(e,"rx","2"),o(t,"points","10 9 16 12 10 15 10 9")},m(l,i){v(l,e,i),v(l,t,i)},d(l){l&&(m(e),m(t))}}}function rn(n){let e,t,l;return{c(){e=D("rect"),t=D("circle"),l=D("polyline"),o(e,"x","3"),o(e,"y","3"),o(e,"width","18"),o(e,"height","18"),o(e,"rx","2"),o(e,"ry","2"),o(t,"cx","8.5"),o(t,"cy","8.5"),o(t,"r","1.5"),o(l,"points","21 15 16 10 5 21")},m(i,s){v(i,e,s),v(i,t,s),v(i,l,s)},d(i){i&&(m(e),m(t),m(l))}}}function on(n){let e;return{c(){e=D("path"),o(e,"d","M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z")},m(t,l){v(t,e,l)},d(t){t&&m(e)}}}function cn(n){let e;function t(s,r){return s[0]==="folder"?on:s[0]==="image"?rn:s[0]==="video"?sn:s[0]==="audio"?nn:s[0]==="pdf"?ln:s[0]==="document"?tn:s[0]==="spreadsheet"?en:s[0]==="presentation"?$l:s[0]==="archive"?xl:s[0]==="code"?Ql:s[0]==="text"?Yl:Xl}let l=t(n),i=l(n);return{c(){e=D("svg"),i.c(),o(e,"width",n[1]),o(e,"height",n[1]),o(e,"viewBox","0 0 24 24"),o(e,"fill","none"),o(e,"stroke","currentColor"),o(e,"stroke-width","1.5"),o(e,"stroke-linecap","round"),o(e,"stroke-linejoin","round"),o(e,"xmlns","http://www.w3.org/2000/svg")},m(s,r){v(s,e,r),i.m(e,null)},p(s,[r]){l!==(l=t(s))&&(i.d(1),i=l(s),i&&(i.c(),i.m(e,null))),r&2&&o(e,"width",s[1]),r&2&&o(e,"height",s[1])},i:q,o:q,d(s){s&&m(e),i.d()}}}function un(n,e,t){let{kind:l="generic"}=e,{size:i=20}=e;return n.$$set=s=>{"kind"in s&&t(0,l=s.kind),"size"in s&&t(1,i=s.size)},[l,i]}class Kt extends Le{constructor(e){super(),Me(this,e,un,cn,Ce,{kind:0,size:1})}}function Pe(n){if(n==null||n<0)return"—";if(n===0)return"0 B";const e=["B","KB","MB","GB"],t=Math.min(Math.floor(Math.log(n)/Math.log(1024)),e.length-1),l=n/Math.pow(1024,t);return(t===0?l.toFixed(0):l.toFixed(1))+" "+e[t]}const an={"image/jpeg":"JPEG image","image/png":"PNG image","image/gif":"GIF image","image/webp":"WebP image","image/svg+xml":"SVG image","image/bmp":"BMP image","image/tiff":"TIFF image","image/avif":"AVIF image","application/pdf":"PDF document","application/msword":"Word document","application/vnd.openxmlformats-officedocument.wordprocessingml.document":"Word document","application/vnd.ms-excel":"Excel spreadsheet","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":"Excel spreadsheet","application/vnd.ms-powerpoint":"PowerPoint presentation","application/vnd.openxmlformats-officedocument.presentationml.presentation":"PowerPoint presentation","application/zip":"ZIP archive","application/gzip":"GZIP archive","application/x-tar":"TAR archive","application/x-7z-compressed":"7z archive","application/x-rar-compressed":"RAR archive","text/plain":"Text file","text/html":"HTML file","text/css":"CSS file","text/javascript":"JavaScript file","application/json":"JSON file","application/xml":"XML file","application/x-yaml":"YAML file","application/octet-stream":"Binary file","application/x-msdos-program":"Executable","inode/directory":"Folder"};function Oe(n){return n?an[n]||n:"Unknown"}function Jt(n){if(n.type==="folder")return"folder";const e=(n.mime||"").toLowerCase();if(e.startsWith("image/"))return"image";if(e.startsWith("video/"))return"video";if(e.startsWith("audio/"))return"audio";if(e.startsWith("text/"))return"text";if(e.includes("pdf"))return"pdf";if(e.includes("word")||e.includes("document"))return"document";if(e.includes("spreadsheet")||e.includes("excel"))return"spreadsheet";if(e.includes("presentation")||e.includes("powerpoint"))return"presentation";if(e.includes("zip")||e.includes("tar")||e.includes("gzip")||e.includes("rar")||e.includes("7z")||e.includes("compress"))return"archive";if(e.includes("json")||e.includes("xml")||e.includes("yaml")||e.includes("javascript")||e.includes("css")||e.includes("html"))return"code";const l=(n.name||"").toLowerCase().split(".").pop();return["js","ts","jsx","tsx","vue","svelte","py","rs","go","c","cpp","h","hpp","java","kt","swift","rb","php","pl","sh","bash","zsh","fish","yml","yaml","json","xml","toml","ini","cfg","conf","md","markdown","css","scss","less","sass","sql","graphql","proto","gradle","cmake","makefile","dockerfile","env","gitignore"].includes(l)?"code":"generic"}const fn=["image/jpeg","image/png","image/gif","image/webp","image/bmp","image/tiff","image/avif","image/svg+xml"],dn=["text/plain","text/html","text/css","text/javascript","application/json","application/xml","application/x-yaml","text/x-shellscript"],pn=["txt","log","conf","ini","yaml","yml","json","xml","csv","sh","py","js","ts","css","html","md","markdown","cfg"],_n=["jpg","jpeg","png","gif","webp","bmp","tiff","tif","avif","svg"];function Ut(n){const e=(n.mime||"").toLowerCase(),l=(n.name||"").toLowerCase().split(".").pop();return fn.includes(e)||_n.includes(l)}function Zt(n){const e=(n.mime||"").toLowerCase(),l=(n.name||"").toLowerCase().split(".").pop();return dn.includes(e)||pn.includes(l)&&l!=="md"&&l!=="markdown"}function Xt(n){return(n.mime||"").toLowerCase().includes("pdf")}function Yt(n){const e=(n.name||"").toLowerCase();return e.endsWith(".md")||e.endsWith(".markdown")}function mn(n){return Ut(n)||Xt(n)}function vn(n){return Zt(n)||Yt(n)}function kn(n){let e,t=Pe(n[0].size)+"",l,i,s,r=n[0].mime&&$e(n);return{c(){e=f("span"),l=F(t),i=j(),r&&r.c(),s=ue()},m(c,u){v(c,e,u),a(e,l),v(c,i,u),r&&r.m(c,u),v(c,s,u)},p(c,u){u&1&&t!==(t=Pe(c[0].size)+"")&&V(l,t),c[0].mime?r?r.p(c,u):(r=$e(c),r.c(),r.m(s.parentNode,s)):r&&(r.d(1),r=null)},d(c){c&&(m(e),m(i),m(s)),r&&r.d(c)}}}function bn(n){let e;return{c(){e=f("span"),e.textContent="Folder"},m(t,l){v(t,e,l)},p:q,d(t){t&&m(e)}}}function $e(n){let e,t,l,i=Oe(n[0].mime)+"",s;return{c(){e=f("span"),e.textContent="·",t=j(),l=f("span"),s=F(i),o(e,"class","meta-sep svelte-15klzc3")},m(r,c){v(r,e,c),v(r,t,c),v(r,l,c),a(l,s)},p(r,c){c&1&&i!==(i=Oe(r[0].mime)+"")&&V(s,i)},d(r){r&&(m(e),m(t),m(l))}}}function hn(n){let e,t,l;return{c(){e=f("button"),e.innerHTML=' ',o(e,"class","action-btn svelte-15klzc3"),o(e,"title","Open folder"),o(e,"aria-label","Open folder")},m(i,s){v(i,e,s),t||(l=T(e,"click",Fe(n[3])),t=!0)},p:q,d(i){i&&m(e),t=!1,l()}}}function wn(n){let e,t,l,i,s;return{c(){e=f("button"),e.innerHTML=' ',t=j(),l=f("button"),l.innerHTML=' ',o(e,"class","action-btn svelte-15klzc3"),o(e,"title","Preview"),o(e,"aria-label","Preview"),o(l,"class","action-btn svelte-15klzc3"),o(l,"title","Open in external program"),o(l,"aria-label","Open externally")},m(r,c){v(r,e,c),v(r,t,c),v(r,l,c),i||(s=[T(e,"click",Fe(n[3])),T(l,"click",Fe(n[5]))],i=!0)},p:q,d(r){r&&(m(e),m(t),m(l)),i=!1,ne(s)}}}function gn(n){let e,t,l,i,s,r,c=n[0].name+"",u,d,_,k,p,b,h,w,y,N,A,W;l=new Kt({props:{kind:n[1],size:22}});function z(P,G){return P[2]?bn:kn}let M=z(n)(n);function L(P,G){return P[2]?hn:wn}let E=L(n)(n);return{c(){e=f("div"),t=f("div"),he(l.$$.fragment),i=j(),s=f("div"),r=f("div"),u=F(c),_=j(),k=f("div"),M.c(),p=j(),b=f("div"),E.c(),h=j(),w=f("button"),w.innerHTML=' ',o(t,"class","file-row-icon svelte-15klzc3"),o(r,"class","file-row-name svelte-15klzc3"),o(r,"title",d=n[0].name),o(k,"class","file-row-meta svelte-15klzc3"),o(s,"class","file-row-body svelte-15klzc3"),o(w,"class","action-btn action-btn-danger svelte-15klzc3"),o(w,"title","Delete"),o(w,"aria-label","Delete"),o(b,"class","file-row-actions svelte-15klzc3"),o(e,"class","file-row svelte-15klzc3"),o(e,"role","button"),o(e,"tabindex","0"),o(e,"aria-label",y=n[2]?`Open folder ${n[0].name}`:`Preview ${n[0].name}`)},m(P,G){v(P,e,G),a(e,t),_e(l,t,null),a(e,i),a(e,s),a(s,r),a(r,u),a(s,_),a(s,k),M.m(k,null),a(e,p),a(e,b),E.m(b,null),a(b,h),a(b,w),N=!0,A||(W=[T(w,"click",Fe(n[6])),T(e,"click",n[3]),T(e,"keydown",n[4])],A=!0)},p(P,[G]){(!N||G&1)&&c!==(c=P[0].name+"")&&V(u,c),(!N||G&1&&d!==(d=P[0].name))&&o(r,"title",d),M.p(P,G),E.p(P,G),(!N||G&1&&y!==(y=P[2]?`Open folder ${P[0].name}`:`Preview ${P[0].name}`))&&o(e,"aria-label",y)},i(P){N||(ee(l.$$.fragment,P),N=!0)},o(P){le(l.$$.fragment,P),N=!1},d(P){P&&m(e),me(l),M.d(),E.d(),A=!1,ne(W)}}}function yn(n,e,t){let{item:l}=e;const i=qe(),s=Jt(l),r=l.type==="folder";function c(){r?i("navigate",l.id):i("preview",l)}function u(k){k.key==="Enter"&&c()}function d(){i("openExternal",l.fileId)}function _(){i("delete",l.id)}return n.$$set=k=>{"item"in k&&t(0,l=k.item)},[l,s,r,c,u,d,_]}class jn extends Le{constructor(e){super(),Me(this,e,yn,gn,Ce,{item:0})}}function et(n,e,t){const l=n.slice();return l[4]=e[t],l[6]=t,l}function Cn(n){let e;return{c(){e=f("span"),e.textContent="/",o(e,"class","sep svelte-csi2lb")},m(t,l){v(t,e,l)},d(t){t&&m(e)}}}function Mn(n){let e,t=n[4].name+"",l,i,s;function r(){return n[2](n[6])}return{c(){e=f("button"),l=F(t),o(e,"class","crumb crumb--link svelte-csi2lb")},m(c,u){v(c,e,u),a(e,l),i||(s=T(e,"click",r),i=!0)},p(c,u){n=c,u&1&&t!==(t=n[4].name+"")&&V(l,t)},d(c){c&&m(e),i=!1,s()}}}function Ln(n){let e,t=n[4].name+"",l;return{c(){e=f("span"),l=F(t),o(e,"class","crumb crumb--current svelte-csi2lb")},m(i,s){v(i,e,s),a(e,l)},p(i,s){s&1&&t!==(t=i[4].name+"")&&V(l,t)},d(i){i&&m(e)}}}function tt(n){let e,t,l=n[6]>0&&Cn();function i(c,u){return c[6]===c[0].length-1?Ln:Mn}let s=i(n),r=s(n);return{c(){l&&l.c(),e=j(),r.c(),t=ue()},m(c,u){l&&l.m(c,u),v(c,e,u),r.m(c,u),v(c,t,u)},p(c,u){s===(s=i(c))&&r?r.p(c,u):(r.d(1),r=s(c),r&&(r.c(),r.m(t.parentNode,t)))},d(c){c&&(m(e),m(t)),l&&l.d(c),r.d(c)}}}function Nn(n){let e,t=$(n[0]),l=[];for(let i=0;is(c);return n.$$set=c=>{"crumbs"in c&&t(0,l=c.crumbs)},[l,s,r]}class Qt extends Le{constructor(e){super(),Me(this,e,En,Nn,Ce,{crumbs:0})}}function Sn(n){let e,t,l,i,s,r;return{c(){e=f("div"),t=f("p"),t.textContent="Preview is not available for this file type.",l=j(),i=f("button"),i.textContent="Open in external program",o(i,"class","btn btn-sm svelte-1ybaoro"),o(e,"class","preview-status svelte-1ybaoro")},m(c,u){v(c,e,u),a(e,t),a(e,l),a(e,i),s||(r=T(i,"click",n[9]),s=!0)},p:q,d(c){c&&m(e),s=!1,r()}}}function Fn(n){let e,t;function l(r,c){return c&2&&(e=null),e==null&&(e=!!(r[1]&&r[1].startsWith("data:"))),e?Hn:An}let i=l(n,-1),s=i(n);return{c(){s.c(),t=ue()},m(r,c){s.m(r,c),v(r,t,c)},p(r,c){i===(i=l(r,c))&&s?s.p(r,c):(s.d(1),s=i(r),s&&(s.c(),s.m(t.parentNode,t)))},d(r){r&&m(t),s.d(r)}}}function zn(n){let e,t,l;return{c(){e=f("pre"),t=f("code"),l=F(n[1]),o(e,"class","preview-text svelte-1ybaoro")},m(i,s){v(i,e,s),a(e,t),a(t,l)},p(i,s){s&2&&V(l,i[1])},d(i){i&&m(e)}}}function Pn(n){let e,t,l,i;return{c(){e=f("div"),t=f("img"),Se(t.src,l=n[1])||o(t,"src",l),o(t,"alt",i=n[0].name),o(t,"class","preview-image svelte-1ybaoro"),o(e,"class","preview-image-container svelte-1ybaoro")},m(s,r){v(s,e,r),a(e,t)},p(s,r){r&2&&!Se(t.src,l=s[1])&&o(t,"src",l),r&1&&i!==(i=s[0].name)&&o(t,"alt",i)},d(s){s&&m(e)}}}function On(n){let e,t,l,i,s,r,c;return{c(){e=f("div"),t=f("p"),l=F(n[3]),i=j(),s=f("button"),s.textContent="Open in external program",o(s,"class","btn btn-sm svelte-1ybaoro"),o(e,"class","preview-status svelte-1ybaoro")},m(u,d){v(u,e,d),a(e,t),a(t,l),a(e,i),a(e,s),r||(c=T(s,"click",n[9]),r=!0)},p(u,d){d&8&&V(l,u[3])},d(u){u&&m(e),r=!1,c()}}}function Tn(n){let e;return{c(){e=f("div"),e.innerHTML="Loading preview...
",o(e,"class","preview-status svelte-1ybaoro")},m(t,l){v(t,e,l)},p:q,d(t){t&&m(e)}}}function An(n){let e,t,l,i,s,r;return{c(){e=f("div"),t=f("p"),t.textContent="PDF preview is not available in this environment.",l=j(),i=f("button"),i.textContent="Open in external program",o(i,"class","btn btn-sm svelte-1ybaoro"),o(e,"class","preview-status svelte-1ybaoro")},m(c,u){v(c,e,u),a(e,t),a(e,l),a(e,i),s||(r=T(i,"click",n[9]),s=!0)},p:q,d(c){c&&m(e),s=!1,r()}}}function Hn(n){let e,t,l;return{c(){e=f("div"),t=f("embed"),Se(t.src,l=n[1])||o(t,"src",l),o(t,"type","application/pdf"),o(t,"class","preview-pdf svelte-1ybaoro"),o(e,"class","preview-pdf-container svelte-1ybaoro")},m(i,s){v(i,e,s),a(e,t)},p(i,s){s&2&&!Se(t.src,l=i[1])&&o(t,"src",l)},d(i){i&&m(e)}}}function In(n){let e,t,l,i,s,r,c,u=n[0].name+"",d,_,k,p,b=Pe(n[0].size)+"",h,w,y=Oe(n[0].mime)+"",N,A,W,z,S,M,L,I,E,P,G,K;s=new Kt({props:{kind:n[5],size:18}});function X(O,Y){return O[2]?Tn:O[3]?On:O[6]&&O[1]?Pn:O[7]&&O[1]?zn:O[8]?Fn:Sn}let Z=X(n),U=Z(n);return{c(){e=f("div"),t=f("div"),l=f("header"),i=f("div"),he(s.$$.fragment),r=j(),c=f("span"),d=F(u),k=j(),p=f("div"),h=F(b),w=F(" · "),N=F(y),A=j(),W=f("div"),z=f("button"),z.innerHTML=' ',S=j(),M=f("button"),M.innerHTML=' ',L=j(),I=f("div"),U.c(),o(c,"class","preview-name svelte-1ybaoro"),o(c,"title",_=n[0].name),o(i,"class","preview-title svelte-1ybaoro"),o(p,"class","preview-meta svelte-1ybaoro"),o(z,"class","action-btn svelte-1ybaoro"),o(z,"title","Open in external program"),o(z,"aria-label","Open externally"),o(M,"class","action-btn svelte-1ybaoro"),o(M,"title","Close"),o(M,"aria-label","Close preview"),o(W,"class","preview-actions svelte-1ybaoro"),o(l,"class","preview-header svelte-1ybaoro"),o(I,"class","preview-body svelte-1ybaoro"),o(t,"class","modal svelte-1ybaoro"),o(e,"class","overlay svelte-1ybaoro"),o(e,"role","dialog"),o(e,"aria-modal","true"),o(e,"aria-label",E=`Preview: ${n[0].name}`)},m(O,Y){v(O,e,Y),a(e,t),a(t,l),a(l,i),_e(s,i,null),a(i,r),a(i,c),a(c,d),a(l,k),a(l,p),a(p,h),a(p,w),a(p,N),a(l,A),a(l,W),a(W,z),a(W,S),a(W,M),a(t,L),a(t,I),U.m(I,null),P=!0,G||(K=[T(z,"click",n[9]),T(M,"click",n[10]),T(e,"click",Ve(n[11]))],G=!0)},p(O,[Y]){(!P||Y&1)&&u!==(u=O[0].name+"")&&V(d,u),(!P||Y&1&&_!==(_=O[0].name))&&o(c,"title",_),(!P||Y&1)&&b!==(b=Pe(O[0].size)+"")&&V(h,b),(!P||Y&1)&&y!==(y=Oe(O[0].mime)+"")&&V(N,y),Z===(Z=X(O))&&U?U.p(O,Y):(U.d(1),U=Z(O),U&&(U.c(),U.m(I,null))),(!P||Y&1&&E!==(E=`Preview: ${O[0].name}`))&&o(e,"aria-label",E)},i(O){P||(ee(s.$$.fragment,O),P=!0)},o(O){le(s.$$.fragment,O),P=!1},d(O){O&&m(e),me(s),U.d(),G=!1,ne(K)}}}function Bn(n,e,t){let{item:l}=e,{content:i=""}=e,{loading:s=!1}=e,{error:r=""}=e;const c=qe(),u=Jt(l),d=Ut(l)&&i&&i.startsWith("data:"),_=Zt(l)||Yt(l),k=Xt(l);function p(y){y.key==="Escape"&&c("close")}function b(){c("openExternal",l.fileId)}qt(()=>{window.addEventListener("keydown",p)}),Rt(()=>{window.removeEventListener("keydown",p)});const h=()=>c("close"),w=()=>c("close");return n.$$set=y=>{"item"in y&&t(0,l=y.item),"content"in y&&t(1,i=y.content),"loading"in y&&t(2,s=y.loading),"error"in y&&t(3,r=y.error)},[l,i,s,r,c,u,d,_,k,b,h,w]}class Dn extends Le{constructor(e){super(),Me(this,e,Bn,In,Ce,{item:0,content:1,loading:2,error:3})}}function lt(n,e,t){const l=n.slice();return l[93]=e[t],l}function nt(n,e,t){const l=n.slice();return l[96]=e[t],l}function it(n,e,t){const l=n.slice();return l[107]=e[t],l}function st(n,e,t){const l=n.slice();return l[104]=e[t],l}function rt(n,e,t){const l=n.slice();return l[99]=e[t],l}function ot(n,e,t){const l=n.slice();return l[96]=e[t],l}function ct(n,e,t){const l=n.slice();return l[99]=e[t],l}function ut(n,e,t){const l=n.slice();return l[112]=e[t],l}function at(n,e,t){const l=n.slice();return l[93]=e[t],l}function ft(n,e,t){const l=n.slice();return l[117]=e[t],l}function dt(n,e,t){const l=n.slice();return l[120]=e[t],l}function pt(n){let e,t=n[120].label+"",l,i,s,r,c;function u(){return n[56](n[120])}return{c(){e=f("button"),l=F(t),i=j(),o(e,"class",s="nav-item "+(n[4]===n[120].id?"selected":"")+" svelte-1rwjkun")},m(d,_){v(d,e,_),a(e,l),a(e,i),r||(c=T(e,"click",u),r=!0)},p(d,_){n=d,_[0]&1&&t!==(t=n[120].label+"")&&V(l,t),_[0]&17&&s!==(s="nav-item "+(n[4]===n[120].id?"selected":"")+" svelte-1rwjkun")&&o(e,"class",s)},d(d){d&&m(e),r=!1,c()}}}function _t(n){let e,t,l,i,s,r=n[1].length>0&&mt(n),c=$(n[1]),u=[];for(let _=0;_0?r?r.p(_,k):(r=mt(_),r.c(),r.m(t,null)):r&&(r.d(1),r=null),k[0]&34|k[1]&2){c=$(_[1]);let p;for(p=0;p0)return Un;if(c[3])return Jn}let s=i(n),r=s&&s(n);return{c(){e=f("div"),t=f("h2"),t.textContent="Верстак",l=j(),r&&r.c(),o(t,"class","svelte-1rwjkun"),o(e,"class","welcome svelte-1rwjkun")},m(c,u){v(c,e,u),a(e,t),a(e,l),r&&r.m(e,null)},p(c,u){s===(s=i(c))&&r?r.p(c,u):(r&&r.d(1),r=s&&s(c),r&&(r.c(),r.m(e,null)))},i:q,o:q,d(c){c&&m(e),r&&r.d()}}}function Gn(n){let e,t,l,i,s,r,c=$(n[30]),u=[];for(let p=0;p{_[h]=null}),pe()),~i?(s=_[i],s?s.p(p,b):(s=_[i]=d[i](p),s.c()),ee(s,1),s.m(l,null)):s=null)},i(p){r||(ee(s),r=!0)},o(p){le(s),r=!1},d(p){p&&(m(e),m(t),m(l)),ce(u,p),~i&&_[i].d()}}}function Kn(n){let e,t,l,i=n[8].title+"",s,r,c,u,d,_,k,p,b,h,w,y=n[8].dirty&&Pt();return{c(){e=f("div"),t=f("div"),l=f("span"),s=F(i),r=j(),y&&y.c(),c=j(),u=f("div"),d=f("button"),d.textContent="Сохранить",_=j(),k=f("button"),k.textContent="Закрыть",p=j(),b=f("textarea"),o(l,"class","note-title svelte-1rwjkun"),o(d,"class","btn btn-primary svelte-1rwjkun"),o(k,"class","btn svelte-1rwjkun"),o(u,"class","note-editor-actions svelte-1rwjkun"),o(t,"class","note-editor-header svelte-1rwjkun"),o(b,"class","note-textarea svelte-1rwjkun"),o(b,"placeholder","Начните писать..."),o(e,"class","note-editor svelte-1rwjkun")},m(N,A){v(N,e,A),a(e,t),a(t,l),a(l,s),a(t,r),y&&y.m(t,null),a(t,c),a(t,u),a(u,d),a(u,_),a(u,k),a(e,p),a(e,b),re(b,n[8].content),h||(w=[T(d,"click",n[48]),T(k,"click",n[46]),T(b,"input",n[59]),T(b,"input",n[47])],h=!0)},p(N,A){A[0]&256&&i!==(i=N[8].title+"")&&V(s,i),N[8].dirty?y||(y=Pt(),y.c(),y.m(t,c)):y&&(y.d(1),y=null),A[0]&256&&re(b,N[8].content)},i:q,o:q,d(N){N&&m(e),y&&y.d(),h=!1,ne(w)}}}function Jn(n){let e,t,l;return{c(){e=f("p"),t=F("Ошибка: "),l=F(n[3]),o(e,"class","error-text svelte-1rwjkun")},m(i,s){v(i,e,s),a(e,t),a(e,l)},p(i,s){s[0]&8&&V(l,i[3])},d(i){i&&m(e)}}}function Un(n){let e,t,l;return{c(){e=f("p"),e.textContent="Выберите раздел в боковой панели.",t=j(),l=f("p"),l.textContent="Или создайте новое дело кнопкой «+».",o(e,"class","svelte-1rwjkun"),o(l,"class","hint svelte-1rwjkun")},m(i,s){v(i,e,s),v(i,t,s),v(i,l,s)},p:q,d(i){i&&(m(e),m(t),m(l))}}}function Zn(n){let e;return{c(){e=f("p"),e.textContent="Загрузка...",o(e,"class","svelte-1rwjkun")},m(t,l){v(t,e,l)},p:q,d(t){t&&m(e)}}}function wt(n){let e,t=n[112].label+"",l,i,s;function r(){return n[60](n[112])}return{c(){e=f("button"),l=F(t),o(e,"class",Il(n[55](n[112].id))+" svelte-1rwjkun")},m(c,u){v(c,e,u),a(e,l),i||(s=T(e,"click",r),i=!0)},p(c,u){n=c},d(c){c&&m(e),i=!1,s()}}}function Xn(n){let e;return{c(){e=f("div"),e.innerHTML='Активность появится позже
',o(e,"class","empty-state svelte-1rwjkun")},m(t,l){v(t,e,l)},p:q,i:q,o:q,d(t){t&&m(e)}}}function Yn(n){let e,t,l,i,s,r,c,u,d,_,k,p;function b(y,N){return y[10].length===0?li:ti}let h=b(n),w=h(n);return{c(){e=f("div"),t=f("div"),l=f("input"),i=j(),s=f("input"),r=j(),c=f("button"),u=F("Записать"),_=j(),w.c(),o(l,"type","text"),o(l,"placeholder","Что сделано"),o(l,"class","svelte-1rwjkun"),o(s,"type","number"),o(s,"placeholder","Мин"),o(s,"min","1"),o(s,"class","svelte-1rwjkun"),o(c,"class","btn btn-primary svelte-1rwjkun"),c.disabled=d=!n[12].trim()||!n[11],o(t,"class","worklog-form svelte-1rwjkun"),o(e,"class","worklog-tab svelte-1rwjkun")},m(y,N){v(y,e,N),a(e,t),a(t,l),re(l,n[12]),a(t,i),a(t,s),re(s,n[11]),a(t,r),a(t,c),a(c,u),a(e,_),w.m(e,null),k||(p=[T(l,"input",n[75]),T(s,"input",n[76]),T(c,"click",n[49])],k=!0)},p(y,N){N[0]&4096&&l.value!==y[12]&&re(l,y[12]),N[0]&2048&&Wt(s.value)!==y[11]&&re(s,y[11]),N[0]&6144&&d!==(d=!y[12].trim()||!y[11])&&(c.disabled=d),h===(h=b(y))&&w?w.p(y,N):(w.d(1),w=h(y),w&&(w.c(),w.m(e,null)))},i:q,o:q,d(y){y&&m(e),w.d(),k=!1,ne(p)}}}function Qn(n){let e;function t(s,r){return s[9].length===0?ii:ni}let l=t(n),i=l(n);return{c(){i.c(),e=ue()},m(s,r){i.m(s,r),v(s,e,r)},p(s,r){l===(l=t(s))&&i?i.p(s,r):(i.d(1),i=l(s),i&&(i.c(),i.m(e.parentNode,e)))},i:q,o:q,d(s){s&&m(e),i.d(s)}}}function xn(n){let e,t,l,i,s,r,c,u,d,_,k,p,b,h,w,y;const N=[ri,si],A=[];function W(M,L){return M[22]?0:1}d=W(n),_=A[d]=N[d](n);let z=n[19]&&!n[21]&&Ct(),S=n[26]&&Mt(n);return{c(){e=f("div"),t=f("div"),l=f("button"),i=F("+ Добавить файл"),s=j(),r=f("button"),c=F("+ Добавить папку"),u=j(),_.c(),k=j(),z&&z.c(),p=j(),S&&S.c(),b=ue(),o(l,"class","btn btn-primary svelte-1rwjkun"),l.disabled=n[19],o(r,"class","btn svelte-1rwjkun"),r.disabled=n[19],o(t,"class","tab-toolbar svelte-1rwjkun"),o(e,"class","files-tab svelte-1rwjkun")},m(M,L){v(M,e,L),a(e,t),a(t,l),a(l,i),a(t,s),a(t,r),a(r,c),a(e,u),A[d].m(e,null),a(e,k),z&&z.m(e,null),v(M,p,L),S&&S.m(M,L),v(M,b,L),h=!0,w||(y=[T(l,"click",n[50]),T(r,"click",n[51])],w=!0)},p(M,L){(!h||L[0]&524288)&&(l.disabled=M[19]),(!h||L[0]&524288)&&(r.disabled=M[19]);let I=d;d=W(M),d===I?A[d].p(M,L):(de(),le(A[I],1,1,()=>{A[I]=null}),pe(),_=A[d],_?_.p(M,L):(_=A[d]=N[d](M),_.c()),ee(_,1),_.m(e,k)),M[19]&&!M[21]?z||(z=Ct(),z.c(),z.m(e,null)):z&&(z.d(1),z=null),M[26]?S?(S.p(M,L),L[0]&67108864&&ee(S,1)):(S=Mt(M),S.c(),ee(S,1),S.m(b.parentNode,b)):S&&(de(),le(S,1,1,()=>{S=null}),pe())},i(M){h||(ee(_),ee(S),h=!0)},o(M){le(_),le(S),h=!1},d(M){M&&(m(e),m(p),m(b)),A[d].d(),z&&z.d(),S&&S.d(M),w=!1,ne(y)}}}function $n(n){let e,t,l,i,s,r,c,u=n[16]&&Lt(n);function d(p,b){return p[7].length===0&&!p[16]?di:fi}let _=d(n),k=_(n);return{c(){e=f("div"),t=f("div"),l=f("button"),l.textContent="+ Добавить заметку",i=j(),u&&u.c(),s=j(),k.c(),o(l,"class","btn btn-primary svelte-1rwjkun"),o(t,"class","tab-toolbar svelte-1rwjkun"),o(e,"class","notes-tab svelte-1rwjkun")},m(p,b){v(p,e,b),a(e,t),a(t,l),a(e,i),u&&u.m(e,null),a(e,s),k.m(e,null),r||(c=T(l,"click",n[42]),r=!0)},p(p,b){p[16]?u?u.p(p,b):(u=Lt(p),u.c(),u.m(e,s)):u&&(u.d(1),u=null),_===(_=d(p))&&k?k.p(p,b):(k.d(1),k=_(p),k&&(k.c(),k.m(e,null)))},i:q,o:q,d(p){p&&m(e),u&&u.d(),k.d(),r=!1,c()}}}function ei(n){let e,t,l=n[5].title+"",i,s,r,c,u,d,_=n[5].type+"",k,p,b,h,w,y=(n[5].section||"—")+"",N,A,W,z,S,M=ae(n[5].createdAt)+"",L,I,E,P,G,K,X,Z,U,O,Y,te,ie,Q,J=n[7].length>0&&Et(n),H=n[10].length>0&&Ft(n);return{c(){e=f("div"),t=f("h2"),i=F(l),s=j(),r=f("div"),c=f("div"),u=f("span"),u.textContent="Тип",d=f("span"),k=F(_),p=j(),b=f("div"),h=f("span"),h.textContent="Раздел",w=f("span"),N=F(y),A=j(),W=f("div"),z=f("span"),z.textContent="Создано",S=f("span"),L=F(M),I=j(),E=f("div"),P=f("button"),P.textContent="✏️ Новая заметка",G=j(),K=f("button"),K.textContent="📎 Добавить файл",X=j(),Z=f("button"),Z.textContent="⚡ Добавить действие",U=j(),O=f("button"),O.textContent="🕐 Записать время",Y=j(),J&&J.c(),te=j(),H&&H.c(),o(t,"class","svelte-1rwjkun"),o(u,"class","meta-label svelte-1rwjkun"),o(d,"class","svelte-1rwjkun"),o(c,"class","meta-item svelte-1rwjkun"),o(h,"class","meta-label svelte-1rwjkun"),o(w,"class","svelte-1rwjkun"),o(b,"class","meta-item svelte-1rwjkun"),o(z,"class","meta-label svelte-1rwjkun"),o(S,"class","svelte-1rwjkun"),o(W,"class","meta-item svelte-1rwjkun"),o(r,"class","meta-grid svelte-1rwjkun"),o(P,"class","qa-btn svelte-1rwjkun"),o(K,"class","qa-btn svelte-1rwjkun"),o(Z,"class","qa-btn svelte-1rwjkun"),Z.disabled=!0,o(Z,"title","Следующий этап"),o(O,"class","qa-btn svelte-1rwjkun"),o(E,"class","quick-actions svelte-1rwjkun"),o(e,"class","overview svelte-1rwjkun")},m(C,B){v(C,e,B),a(e,t),a(t,i),a(e,s),a(e,r),a(r,c),a(c,u),a(c,d),a(d,k),a(r,p),a(r,b),a(b,h),a(b,w),a(w,N),a(r,A),a(r,W),a(W,z),a(W,S),a(S,L),a(e,I),a(e,E),a(E,P),a(E,G),a(E,K),a(E,X),a(E,Z),a(E,U),a(E,O),a(e,Y),J&&J.m(e,null),a(e,te),H&&H.m(e,null),ie||(Q=[T(P,"click",n[61]),T(K,"click",n[62]),T(O,"click",n[63])],ie=!0)},p(C,B){B[0]&32&&l!==(l=C[5].title+"")&&V(i,l),B[0]&32&&_!==(_=C[5].type+"")&&V(k,_),B[0]&32&&y!==(y=(C[5].section||"—")+"")&&V(N,y),B[0]&32&&M!==(M=ae(C[5].createdAt)+"")&&V(L,M),C[7].length>0?J?J.p(C,B):(J=Et(C),J.c(),J.m(e,te)):J&&(J.d(1),J=null),C[10].length>0?H?H.p(C,B):(H=Ft(C),H.c(),H.m(e,null)):H&&(H.d(1),H=null)},i:q,o:q,d(C){C&&m(e),J&&J.d(),H&&H.d(),ie=!1,ne(Q)}}}function ti(n){let e,t=$(n[10]),l=[];for(let i=0;iЗаписей работы пока нет',o(e,"class","empty-state svelte-1rwjkun")},m(t,l){v(t,e,l)},p:q,d(t){t&&m(e)}}}function gt(n){let e,t,l=n[96].summary+"",i,s,r,c=n[96].minutes+"",u,d,_=ae(n[96].createdAt)+"",k,p;return{c(){e=f("div"),t=f("div"),i=F(l),s=j(),r=f("div"),u=F(c),d=F(" мин · "),k=F(_),p=j(),o(t,"class","svelte-1rwjkun"),o(r,"class","wl-meta svelte-1rwjkun"),o(e,"class","worklog-entry svelte-1rwjkun")},m(b,h){v(b,e,h),a(e,t),a(t,i),a(e,s),a(e,r),a(r,u),a(r,d),a(r,k),a(e,p)},p(b,h){h[0]&1024&&l!==(l=b[96].summary+"")&&V(i,l),h[0]&1024&&c!==(c=b[96].minutes+"")&&V(u,c),h[0]&1024&&_!==(_=ae(b[96].createdAt)+"")&&V(k,_)},d(b){b&&m(e)}}}function ni(n){let e,t=$(n[9]),l=[];for(let i=0;iДействий пока нет',o(e,"class","empty-state svelte-1rwjkun")},m(t,l){v(t,e,l)},p:q,d(t){t&&m(e)}}}function yt(n){let e,t,l=n[107].title+"",i,s,r=n[107].type+"",c,u,d,_,k,p;function b(){return n[74](n[107])}return{c(){e=f("div"),t=f("span"),i=F(l),s=f("span"),c=F(r),u=j(),d=f("button"),d.textContent="Запустить",_=j(),o(t,"class","svelte-1rwjkun"),o(s,"class","action-type svelte-1rwjkun"),o(d,"class","btn btn-sm svelte-1rwjkun"),o(e,"class","action-card svelte-1rwjkun")},m(h,w){v(h,e,w),a(e,t),a(t,i),a(e,s),a(s,c),a(e,u),a(e,d),a(e,_),k||(p=T(d,"click",b),k=!0)},p(h,w){n=h,w[0]&512&&l!==(l=n[107].title+"")&&V(i,l),w[0]&512&&r!==(r=n[107].type+"")&&V(c,r)},d(h){h&&m(e),k=!1,p()}}}function si(n){let e,t,l,i,s,r,c;const u=[ci,oi],d=[];function _(h,w){return h[24].length>0?0:1}e=_(n),t=d[e]=u[e](n);const k=[ai,ui],p=[];function b(h,w){return h[25].length===0?0:1}return i=b(n),s=p[i]=k[i](n),{c(){t.c(),l=j(),s.c(),r=ue()},m(h,w){d[e].m(h,w),v(h,l,w),p[i].m(h,w),v(h,r,w),c=!0},p(h,w){let y=e;e=_(h),e===y?d[e].p(h,w):(de(),le(d[y],1,1,()=>{d[y]=null}),pe(),t=d[e],t?t.p(h,w):(t=d[e]=u[e](h),t.c()),ee(t,1),t.m(l.parentNode,l));let N=i;i=b(h),i===N?p[i].p(h,w):(de(),le(p[N],1,1,()=>{p[N]=null}),pe(),s=p[i],s?s.p(h,w):(s=p[i]=k[i](h),s.c()),ee(s,1),s.m(r.parentNode,r))},i(h){c||(ee(t),ee(s),c=!0)},o(h){le(t),le(s),c=!1},d(h){h&&(m(l),m(r)),d[e].d(h),p[i].d(h)}}}function ri(n){let e;return{c(){e=f("div"),e.innerHTML='Загрузка...
',o(e,"class","empty-state svelte-1rwjkun")},m(t,l){v(t,e,l)},p:q,i:q,o:q,d(t){t&&m(e)}}}function oi(n){let e,t;return e=new Qt({props:{crumbs:[{name:"Files"}]}}),{c(){he(e.$$.fragment)},m(l,i){_e(e,l,i),t=!0},p:q,i(l){t||(ee(e.$$.fragment,l),t=!0)},o(l){le(e.$$.fragment,l),t=!1},d(l){me(e,l)}}}function ci(n){let e,t,l,i,s,r;return e=new Qt({props:{crumbs:[{name:"Files"},...n[24]]}}),e.$on("navigate",n[68]),{c(){he(e.$$.fragment),t=j(),l=f("button"),l.textContent="← Back",o(l,"class","btn btn-sm back-btn svelte-1rwjkun")},m(c,u){_e(e,c,u),v(c,t,u),v(c,l,u),i=!0,s||(r=T(l,"click",n[35]),s=!0)},p(c,u){const d={};u[0]&16777216&&(d.crumbs=[{name:"Files"},...c[24]]),e.$set(d)},i(c){i||(ee(e.$$.fragment,c),i=!0)},o(c){le(e.$$.fragment,c),i=!1},d(c){c&&(m(t),m(l)),me(e,c),s=!1,r()}}}function ui(n){let e,t=[],l=new Map,i,s=$(n[25]);const r=c=>c[104].id;for(let c=0;c0?"В этой папке пока нет файлов":"В этом проекте пока нет файлов",r,c,u,d,_,k,p,b,h,w;return{c(){e=f("div"),t=f("div"),t.innerHTML=' ',l=j(),i=f("p"),r=F(s),c=j(),u=f("p"),u.textContent="Добавьте файл или папку, чтобы сохранить материалы проекта.",d=j(),_=f("div"),k=f("button"),k.textContent="Добавить файл",p=j(),b=f("button"),b.textContent="Добавить папку",o(t,"class","empty-icon svelte-1rwjkun"),o(i,"class","svelte-1rwjkun"),o(u,"class","hint svelte-1rwjkun"),o(k,"class","btn btn-primary svelte-1rwjkun"),o(b,"class","btn svelte-1rwjkun"),o(_,"class","empty-actions svelte-1rwjkun"),o(e,"class","empty-state svelte-1rwjkun")},m(y,N){v(y,e,N),a(e,t),a(e,l),a(e,i),a(i,r),a(e,c),a(e,u),a(e,d),a(e,_),a(_,k),a(_,p),a(_,b),h||(w=[T(k,"click",n[50]),T(b,"click",n[51])],h=!0)},p(y,N){N[0]&16777216&&s!==(s=y[24].length>0?"В этой папке пока нет файлов":"В этом проекте пока нет файлов")&&V(r,s)},i:q,o:q,d(y){y&&m(e),h=!1,ne(w)}}}function jt(n,e){let t,l,i;return l=new jn({props:{item:e[104]}}),l.$on("navigate",e[69]),l.$on("preview",e[70]),l.$on("openExternal",e[71]),l.$on("delete",e[72]),{key:n,first:null,c(){t=ue(),he(l.$$.fragment),this.first=t},m(s,r){v(s,t,r),_e(l,s,r),i=!0},p(s,r){e=s;const c={};r[0]&33554432&&(c.item=e[104]),l.$set(c)},i(s){i||(ee(l.$$.fragment,s),i=!0)},o(s){le(l.$$.fragment,s),i=!1},d(s){s&&m(t),me(l,s)}}}function Ct(n){let e;return{c(){e=f("div"),e.innerHTML='Сканирование...
',o(e,"class","empty-state svelte-1rwjkun")},m(t,l){v(t,e,l)},d(t){t&&m(e)}}}function Mt(n){let e,t;return e=new Dn({props:{item:n[26],content:n[27],loading:n[28],error:n[29]}}),e.$on("close",n[38]),e.$on("openExternal",n[73]),{c(){he(e.$$.fragment)},m(l,i){_e(e,l,i),t=!0},p(l,i){const s={};i[0]&67108864&&(s.item=l[26]),i[0]&134217728&&(s.content=l[27]),i[0]&268435456&&(s.loading=l[28]),i[0]&536870912&&(s.error=l[29]),e.$set(s)},i(l){t||(ee(e.$$.fragment,l),t=!0)},o(l){le(e.$$.fragment,l),t=!1},d(l){me(e,l)}}}function Lt(n){let e,t,l,i,s,r,c,u,d;return{c(){e=f("div"),t=f("input"),l=j(),i=f("div"),s=f("button"),s.textContent="Создать",r=j(),c=f("button"),c.textContent="Отмена",o(t,"type","text"),o(t,"placeholder","Название заметки"),o(t,"class","svelte-1rwjkun"),o(s,"class","btn btn-primary svelte-1rwjkun"),o(c,"class","btn svelte-1rwjkun"),o(i,"class","form-actions svelte-1rwjkun"),o(e,"class","create-form svelte-1rwjkun")},m(_,k){v(_,e,k),a(e,t),re(t,n[17]),a(e,l),a(e,i),a(i,s),a(i,r),a(i,c),u||(d=[T(t,"input",n[65]),T(t,"keydown",n[66]),T(s,"click",n[44]),T(c,"click",n[43])],u=!0)},p(_,k){k[0]&131072&&t.value!==_[17]&&re(t,_[17])},d(_){_&&m(e),u=!1,ne(d)}}}function fi(n){let e,t=$(n[7]),l=[];for(let i=0;iНет заметокСоздайте первую заметку для этого дела.
',o(e,"class","empty-state svelte-1rwjkun")},m(t,l){v(t,e,l)},p:q,d(t){t&&m(e)}}}function Nt(n){let e,t,l=n[99].title+"",i,s,r,c=ae(n[99].createdAt)+"",u,d,_,k;function p(){return n[67](n[99])}return{c(){e=f("div"),t=f("div"),i=F(l),s=j(),r=f("div"),u=F(c),d=j(),o(t,"class","note-card-title svelte-1rwjkun"),o(r,"class","note-card-date svelte-1rwjkun"),o(e,"class","note-card svelte-1rwjkun")},m(b,h){v(b,e,h),a(e,t),a(t,i),a(e,s),a(e,r),a(r,u),a(e,d),_||(k=T(e,"click",p),_=!0)},p(b,h){n=b,h[0]&128&&l!==(l=n[99].title+"")&&V(i,l),h[0]&128&&c!==(c=ae(n[99].createdAt)+"")&&V(u,c)},d(b){b&&m(e),_=!1,k()}}}function Et(n){let e,t,l,i=$(n[7].slice(0,5)),s=[];for(let r=0;rn[79].call(b)),o(_,"class","form-group svelte-1rwjkun"),o(y,"class","btn btn-primary svelte-1rwjkun"),o(A,"class","btn svelte-1rwjkun"),o(w,"class","modal-actions svelte-1rwjkun"),o(t,"class","modal svelte-1rwjkun"),o(e,"class","modal-overlay svelte-1rwjkun")},m(L,I){v(L,e,I),a(e,t),a(t,l),a(t,i),a(t,s),a(s,r),a(s,c),a(s,u),re(u,n[14]),a(t,d),a(t,_),a(_,k),a(_,p),a(_,b);for(let E=0;E⚒ Верстак ',i=j(),s=f("nav"),r=f("div"),c=f("div"),c.textContent="Разделы",u=j();for(let C=0;C{te[oe]=null}),pe(),S=te[z],S?S.p(C,B):(S=te[z]=Y[z](C),S.c()),ee(S,1),S.m(w,M)),!C[8]&&!C[5]?Q?Q.p(C,B):(Q=Ot(C),Q.c(),Q.m(w,L)):Q&&(Q.d(1),Q=null),C[13]?J?J.p(C,B):(J=Tt(C),J.c(),J.m(w,I)):J&&(J.d(1),J=null),C[21]&&C[20]?H?H.p(C,B):(H=Ht(C),H.c(),H.m(w,null)):H&&(H.d(1),H=null)},i(C){E||(ee(S),E=!0)},o(C){le(S),E=!1},d(C){C&&m(e),ce(G,C),K&&K.d(),U.d(),O&&O.d(),te[z].d(),Q&&Q.d(),J&&J.d(),H&&H.d()}}}function x(n,...e){try{if(window.go&&window.go.main&&window.go.main.App){const t=window.go.main.App[n];if(typeof t=="function")return t(...e)}}catch(t){console.error("Wails call error:",n,t)}return Promise.reject(new Error("Wails not connected: "+n))}function ae(n){if(!n)return"";try{return new Date(n).toLocaleDateString("ru-RU",{day:"numeric",month:"short"})}catch{return n}}const Bt=n=>n.id!=="today"&&n.id!=="inbox";function _i(n,e,t){let l=[],i=[],s="",r="",c="",u=null,d="overview",_=[],k=null,p=[],b=[],h=[],w="",y="",N=!1,A="",W="clients",z=!1,S="",M=!0,L=!1,I=null,E=!1,P="",G=!1,K=null,X=[],Z=[],U=null,O="",Y=!1,te="";const ie=[{id:"overview",label:"Обзор"},{id:"notes",label:"Заметки"},{id:"files",label:"Файлы"},{id:"actions",label:"Действия"},{id:"worklog",label:"Журнал"},{id:"activity",label:"Активность"}];let Q=null;qt(async()=>{try{t(2,s=await x("VerstakVersion")||"verstak-gui/v2"),t(0,l=await x("ListSections")||[])}catch(g){t(3,r=String(g)),t(0,l=[{id:"today",label:"Сегодня"},{id:"inbox",label:"Неразобранное"},{id:"clients",label:"Клиенты"},{id:"projects",label:"Проекты"},{id:"recipes",label:"Рецепты"},{id:"documents",label:"Документы"},{id:"archive",label:"Архив"}])}window.runtime&&window.runtime.EventsOn&&(window.runtime.EventsOn("files-dropped",cl),Q=()=>window.runtime.EventsOff("files-dropped")),t(18,M=!1)}),Rt(()=>{Q&&Q()});async function J(g){t(4,c=g),t(5,u=null),t(6,d="overview"),t(7,_=[]),p=[],t(9,b=[]),t(10,h=[]),t(13,N=!1),t(3,r="");try{t(1,i=await x("ListNodesBySection",g)||[])}catch(R){t(3,r=String(R)),t(1,i=[])}}async function H(g){t(5,u=g),t(6,d="overview"),t(7,_=[]),p=[],t(9,b=[]),t(10,h=[]),t(25,Z=[]),t(24,X=[]),t(23,K=null),t(26,U=null),t(27,O=""),t(8,k=null),t(13,N=!1),t(16,z=!1),t(3,r=""),await C(g.id)}async function C(g){try{t(7,_=await x("ListNotes",g)||[])}catch{}try{p=await x("ListFiles",g)||[]}catch{}try{t(9,b=await x("ListActions",g)||[])}catch{}try{t(10,h=await x("ListWorklog",g)||[])}catch{}}async function B(g){t(22,G=!0);try{t(25,Z=await x("ListItems",g)||[])}catch{t(25,Z=[])}t(22,G=!1)}async function oe(g){if(u){try{const R=await x("GetNodeDetail",g);R&&t(24,X=[...X,{id:g,name:R.title}])}catch{t(24,X=[...X,{id:g,name:"..."}])}t(23,K=g),await B(g)}}function se(){if(X.length<2)t(24,X=[]),t(23,K=null),B(u.id);else{const g=X[X.length-2];t(24,X=X.slice(0,-1)),t(23,K=g.id),B(g.id)}}function we(g){const R=X[g];t(24,X=X.slice(0,g+1)),t(23,K=R.id),B(R.id)}async function Re(g){t(26,U=g),t(27,O=""),t(29,te=""),t(28,Y=!0);try{mn(g)?t(27,O=await x("GetFileBase64",g.fileId)||""):vn(g)&&t(27,O=await x("ReadFileText",g.fileId)||"")}catch(R){t(29,te=String(R))}t(28,Y=!1)}function xt(){t(26,U=null),t(27,O=""),t(29,te="")}function $t(){t(13,N=!0),t(14,A=""),t(15,W=c||"clients")}function el(){t(13,N=!1),t(14,A="")}async function Ge(){if(A.trim())try{const g=await x("CreateNode","","case",A.trim(),W);t(13,N=!1),t(14,A=""),await J(W)}catch(g){t(3,r=String(g))}}function Ke(){t(16,z=!0),t(17,S="")}function tl(){t(16,z=!1),t(17,S="")}async function Je(){if(!(!S.trim()||!u))try{const g=await x("CreateNote",u.id,S.trim());t(7,_=[..._,g&&g.id?g:{id:Date.now().toString(),title:S.trim(),createdAt:new Date().toISOString()}]),t(16,z=!1),t(17,S="")}catch{const R={id:Date.now().toString(),title:S.trim(),createdAt:new Date().toISOString()};t(7,_=[..._,R]),t(16,z=!1),t(17,S="")}}async function Te(g){if(!(k&&k.dirty&&!confirm("Несохранённые изменения. Закрыть?")))try{const R=await x("ReadNote",g.id);t(8,k={id:g.id,title:g.title,content:R||"",dirty:!1})}catch{t(8,k={id:g.id,title:g.title,content:"# "+g.title+`
+
+`,dirty:!1})}}function ll(){k&&k.dirty&&!confirm("Несохранённые изменения. Закрыть?")||t(8,k=null)}function nl(g){k&&(t(8,k.content=g.target.value,k),t(8,k.dirty=!0,k))}async function il(){if(k)try{await x("SaveNote",k.id,k.content),t(8,k.dirty=!1,k)}catch{t(8,k.dirty=!1,k)}}async function sl(){const g=parseInt(w,10);if(!(!y.trim()||isNaN(g)||g<=0||!u)){try{const R=await x("CreateWorklog",u.id,y.trim(),g);t(10,h=[...h,R&&R.id?R:{id:Date.now().toString(),nodeId:u.id,summary:y.trim(),minutes:g,createdAt:new Date().toISOString()}])}catch{t(10,h=[...h,{id:Date.now().toString(),nodeId:u.id,summary:y.trim(),minutes:g,createdAt:new Date().toISOString()}])}t(12,y=""),t(11,w="")}}async function Ue(){const g=await x("PickFile");g&&await Ae(u.id,g)}async function rl(){const g=await x("PickDirectory");g&&await Ae(u.id,g)}async function Ae(g,R){t(19,L=!0);try{const ge=await x("PreviewImport",R);t(20,I=ge),P=R,t(21,E=!0)}catch(ge){t(3,r=String(ge))}t(19,L=!1)}async function He(g){try{const R=g==="copy"?await x("AddPathCopy",u.id,P):await x("AddPathLink",u.id,P);t(21,E=!1),t(20,I=null),t(24,X=[]),t(23,K=null),await Promise.all([C(u.id),B(u.id)])}catch(R){t(3,r=String(R))}}function ol(){t(21,E=!1),t(20,I=null)}async function Ze(g){if(confirm("Удалить файл?"))try{await x("DeleteFileOrFolder",g),p=p.filter(ge=>ge.nodeId!==g);const R=K||u.id;await B(R)}catch(R){t(3,r=String(R))}}async function cl(g){if(!g||g.length===0)return;if(!u){t(3,r="Сначала выберите дело для добавления файлов");return}const R=g[0];await Ae(u.id,R)}function ul(g){return d===g?"tab active":"tab"}const al=g=>J(g.id),fl=g=>H(g),dl=()=>t(3,r="");function pl(){k.content=this.value,t(8,k)}const _l=g=>{t(6,d=g.id),g.id==="files"&&u&&Z.length===0&&!K&&B(u.id)},ml=()=>{t(6,d="notes"),Ke()},vl=()=>{t(6,d="files"),Ue()},kl=()=>t(6,d="worklog"),bl=g=>Te(g);function hl(){S=this.value,t(17,S)}const wl=g=>g.key==="Enter"&&Je(),gl=g=>Te(g),yl=g=>{const R=g.detail;R===0?(t(24,X=[]),t(23,K=null),B(u.id)):we(R-1)},jl=g=>oe(g.detail),Cl=g=>Re(g.detail),Ml=g=>x("OpenFile",g.detail),Ll=g=>Ze(g.detail),Nl=g=>x("OpenFile",g.detail),El=g=>x("RunAction",g.id);function Sl(){y=this.value,t(12,y)}function Fl(){w=Wt(this.value),t(11,w)}function zl(){A=this.value,t(14,A)}const Pl=g=>g.key==="Enter"&&Ge();function Ol(){W=Dl(this),t(15,W),t(0,l)}return[l,i,s,r,c,u,d,_,k,b,h,w,y,N,A,W,z,S,M,L,I,E,G,K,X,Z,U,O,Y,te,ie,J,H,B,oe,se,we,Re,xt,$t,el,Ge,Ke,tl,Je,Te,ll,nl,il,sl,Ue,rl,He,ol,Ze,ul,al,fl,dl,pl,_l,ml,vl,kl,bl,hl,wl,gl,yl,jl,Cl,Ml,Ll,Nl,El,Sl,Fl,zl,Pl,Ol,()=>He("copy"),()=>He("link")]}class mi extends Le{constructor(e){super(),Me(this,e,_i,pi,Ce,{},null,[-1,-1,-1,-1])}}new mi({target:document.getElementById("app")});
diff --git a/cmd/verstak-gui/frontend-dist/index.html b/cmd/verstak-gui/frontend-dist/index.html
index 34871bb..33d5116 100644
--- a/cmd/verstak-gui/frontend-dist/index.html
+++ b/cmd/verstak-gui/frontend-dist/index.html
@@ -16,8 +16,8 @@
background: #13131f;
}
-
-
+
+
diff --git a/cmd/verstak-gui/main.go b/cmd/verstak-gui/main.go
index a9207b9..a30a374 100644
--- a/cmd/verstak-gui/main.go
+++ b/cmd/verstak-gui/main.go
@@ -43,7 +43,7 @@ func main() {
// Init core services
nodeRepo := nodes.NewRepository(db)
- fileSvc := files.NewService(db, abs)
+ fileSvc := files.NewService(db, abs, nodeRepo)
noteSvc := notes.NewService(db, abs, nodeRepo, fileSvc)
actionSvc := actions.NewService(db)
worklogSvc := worklog.NewService(db)
@@ -72,7 +72,10 @@ func main() {
Assets: assets,
},
OnStartup: app.startup,
- Bind: []interface{}{app},
+ DragAndDrop: &options.DragAndDrop{
+ EnableFileDrop: true,
+ },
+ Bind: []interface{}{app},
})
if err != nil {
diff --git a/frontend/src/App.svelte b/frontend/src/App.svelte
index 9b70196..4f5fff7 100644
--- a/frontend/src/App.svelte
+++ b/frontend/src/App.svelte
@@ -1,5 +1,10 @@
+
+
+
+
+
+
+
+
+
{item.name}
+
+ {#if isFolder}
+ Folder
+ {:else}
+ {formatFileSize(item.size)}
+ {#if item.mime}
+ ·
+ {formatMimeType(item.mime)}
+ {/if}
+ {/if}
+
+
+
+ {#if !isFolder}
+
dispatch('preview', item)} title="Preview" aria-label="Preview">
+
+
+
+
+
+
+
+
+
+
+
+
+ {:else}
+
dispatch('navigate', item.id)} title="Open folder" aria-label="Open folder">
+
+
+
+
+
+ {/if}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+{#if menuOpen}
+
+
+
+{/if}
+
+
diff --git a/frontend/src/api/verstak.js b/frontend/src/api/verstak.js
index 67c7a69..299ab1e 100644
--- a/frontend/src/api/verstak.js
+++ b/frontend/src/api/verstak.js
@@ -15,6 +15,22 @@ export const readNote = (noteID) => App.ReadNote(noteID)
export const saveNote = (noteID, content) => App.SaveNote(noteID, content)
export const listFiles = (nodeID) => App.ListFiles(nodeID)
+export const listItems = (nodeID) => App.ListItems(nodeID)
+export const addPathCopy = (nodeID, sourcePath) => App.AddPathCopy(nodeID, sourcePath)
+export const addPathLink = (nodeID, sourcePath) => App.AddPathLink(nodeID, sourcePath)
+export const deleteFileOrFolder = (nodeID) => App.DeleteFileOrFolder(nodeID)
+export const previewImport = (sourcePath) => App.PreviewImport(sourcePath)
+export const pickFile = () => App.PickFile()
+export const pickFiles = () => App.PickFiles()
+export const pickDirectory = () => App.PickDirectory()
+export const openFile = (id) => App.OpenFile(id)
+export const readFileText = (id) => App.ReadFileText(id)
+export const getFileBase64 = (id) => App.GetFileBase64(id)
+export const createEmptyFile = (parentID, filename) => App.CreateEmptyFile(parentID, filename)
+export const duplicateNode = (nodeID) => App.DuplicateNode(nodeID)
+export const renameNode = (nodeID, newTitle) => App.RenameNode(nodeID, newTitle)
+export const moveNode = (nodeID, newParentID) => App.MoveNode(nodeID, newParentID)
+export const openFolder = (nodeID) => App.OpenFolder(nodeID)
export const listActions = (nodeID) => App.ListActions(nodeID)
export const runAction = (id) => App.RunAction(id)
diff --git a/frontend/src/lib/ConfirmModal.svelte b/frontend/src/lib/ConfirmModal.svelte
new file mode 100644
index 0000000..9c41444
--- /dev/null
+++ b/frontend/src/lib/ConfirmModal.svelte
@@ -0,0 +1,101 @@
+
+
+ dispatch('cancel')} role="dialog" aria-modal="true" aria-label={title}>
+
+
{title}
+
{message}
+
+ dispatch('confirm')}>{confirmText}
+ dispatch('cancel')}>{cancelText}
+
+
+
+
+
diff --git a/frontend/src/lib/FileActions.svelte b/frontend/src/lib/FileActions.svelte
new file mode 100644
index 0000000..de00bda
--- /dev/null
+++ b/frontend/src/lib/FileActions.svelte
@@ -0,0 +1,85 @@
+
+
+
+
+
+ {#if isFolder}
+
+
+ {:else}
+
+
+
+ {/if}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/frontend/src/lib/FileBreadcrumbs.svelte b/frontend/src/lib/FileBreadcrumbs.svelte
new file mode 100644
index 0000000..76d1574
--- /dev/null
+++ b/frontend/src/lib/FileBreadcrumbs.svelte
@@ -0,0 +1,69 @@
+
+
+
+ {#each crumbs as crumb, i}
+ {#if i > 0}
+ /
+ {/if}
+ {#if i === crumbs.length - 1}
+ {crumb.name}
+ {:else}
+ navigateTo(i)}>{crumb.name}
+ {/if}
+ {/each}
+
+
+
diff --git a/frontend/src/lib/FileIcon.svelte b/frontend/src/lib/FileIcon.svelte
new file mode 100644
index 0000000..909e59f
--- /dev/null
+++ b/frontend/src/lib/FileIcon.svelte
@@ -0,0 +1,63 @@
+
+
+
+ {#if kind === 'folder'}
+
+ {:else if kind === 'image'}
+
+
+
+ {:else if kind === 'video'}
+
+
+ {:else if kind === 'audio'}
+
+
+
+ {:else if kind === 'pdf'}
+
+
+
+
+
+ {:else if kind === 'document'}
+
+
+
+
+ {:else if kind === 'spreadsheet'}
+
+
+
+
+
+
+ {:else if kind === 'presentation'}
+
+
+
+
+
+ {:else if kind === 'archive'}
+
+
+
+
+ {:else if kind === 'code'}
+
+
+ {:else if kind === 'text'}
+
+
+
+
+
+ {:else}
+
+
+ {/if}
+
diff --git a/frontend/src/lib/FilePreviewModal.svelte b/frontend/src/lib/FilePreviewModal.svelte
new file mode 100644
index 0000000..4513959
--- /dev/null
+++ b/frontend/src/lib/FilePreviewModal.svelte
@@ -0,0 +1,262 @@
+
+
+ dispatch('close')} role="dialog" aria-modal="true" aria-label={`Preview: ${item.name}`}>
+
+
+
+ {#if loading}
+
+ {:else if error}
+
+
{error}
+
Open in external program
+
+ {:else if showImage && content}
+
+
+
+ {:else if showText && content}
+
{content}
+ {:else if showPdf}
+ {#if content && content.startsWith('data:')}
+
+
+
+ {:else}
+
+
PDF preview is not available in this environment.
+
Open in external program
+
+ {/if}
+ {:else}
+
+
Preview is not available for this file type.
+
Open in external program
+
+ {/if}
+
+
+
+
+
diff --git a/frontend/src/lib/fileUtils.js b/frontend/src/lib/fileUtils.js
new file mode 100644
index 0000000..5d02ee2
--- /dev/null
+++ b/frontend/src/lib/fileUtils.js
@@ -0,0 +1,114 @@
+export function formatFileSize(bytes) {
+ if (bytes == null || bytes < 0) return '—'
+ if (bytes === 0) return '0 B'
+ const units = ['B', 'KB', 'MB', 'GB']
+ const i = Math.min(Math.floor(Math.log(bytes) / Math.log(1024)), units.length - 1)
+ const val = bytes / Math.pow(1024, i)
+ return (i === 0 ? val.toFixed(0) : val.toFixed(1)) + ' ' + units[i]
+}
+
+const mimeLabels = {
+ 'image/jpeg': 'JPEG image',
+ 'image/png': 'PNG image',
+ 'image/gif': 'GIF image',
+ 'image/webp': 'WebP image',
+ 'image/svg+xml': 'SVG image',
+ 'image/bmp': 'BMP image',
+ 'image/tiff': 'TIFF image',
+ 'image/avif': 'AVIF image',
+ 'application/pdf': 'PDF document',
+ 'application/msword': 'Word document',
+ 'application/vnd.openxmlformats-officedocument.wordprocessingml.document': 'Word document',
+ 'application/vnd.ms-excel': 'Excel spreadsheet',
+ 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet': 'Excel spreadsheet',
+ 'application/vnd.ms-powerpoint': 'PowerPoint presentation',
+ 'application/vnd.openxmlformats-officedocument.presentationml.presentation': 'PowerPoint presentation',
+ 'application/zip': 'ZIP archive',
+ 'application/gzip': 'GZIP archive',
+ 'application/x-tar': 'TAR archive',
+ 'application/x-7z-compressed': '7z archive',
+ 'application/x-rar-compressed': 'RAR archive',
+ 'text/plain': 'Text file',
+ 'text/html': 'HTML file',
+ 'text/css': 'CSS file',
+ 'text/javascript': 'JavaScript file',
+ 'application/json': 'JSON file',
+ 'application/xml': 'XML file',
+ 'application/x-yaml': 'YAML file',
+ 'application/octet-stream': 'Binary file',
+ 'application/x-msdos-program': 'Executable',
+ 'inode/directory': 'Folder',
+}
+
+export function formatMimeType(mime) {
+ if (!mime) return 'Unknown'
+ return mimeLabels[mime] || mime
+}
+
+export function getFileKind(item) {
+ if (item.type === 'folder') return 'folder'
+ const mime = (item.mime || '').toLowerCase()
+ if (mime.startsWith('image/')) return 'image'
+ if (mime.startsWith('video/')) return 'video'
+ if (mime.startsWith('audio/')) return 'audio'
+ if (mime.startsWith('text/')) return 'text'
+ if (mime.includes('pdf')) return 'pdf'
+ if (mime.includes('word') || mime.includes('document')) return 'document'
+ if (mime.includes('spreadsheet') || mime.includes('excel')) return 'spreadsheet'
+ if (mime.includes('presentation') || mime.includes('powerpoint')) return 'presentation'
+ if (mime.includes('zip') || mime.includes('tar') || mime.includes('gzip') || mime.includes('rar') || mime.includes('7z') || mime.includes('compress')) return 'archive'
+ if (mime.includes('json') || mime.includes('xml') || mime.includes('yaml') || mime.includes('javascript') || mime.includes('css') || mime.includes('html')) return 'code'
+ const name = (item.name || '').toLowerCase()
+ const ext = name.split('.').pop()
+ const codeExts = ['js','ts','jsx','tsx','vue','svelte','py','rs','go','c','cpp','h','hpp','java','kt','swift','rb','php','pl','sh','bash','zsh','fish','yml','yaml','json','xml','toml','ini','cfg','conf','md','markdown','css','scss','less','sass','sql','graphql','proto','gradle','cmake','makefile','dockerfile','env','gitignore']
+ if (codeExts.includes(ext)) return 'code'
+ return 'generic'
+}
+
+const imageMimes = ['image/jpeg','image/png','image/gif','image/webp','image/bmp','image/tiff','image/avif','image/svg+xml']
+const textMimes = ['text/plain','text/html','text/css','text/javascript','application/json','application/xml','application/x-yaml','text/x-shellscript']
+const codeNames = ['txt','log','conf','ini','yaml','yml','json','xml','csv','sh','py','js','ts','css','html','md','markdown','cfg']
+
+const imageExts = ['jpg','jpeg','png','gif','webp','bmp','tiff','tif','avif','svg']
+
+export function canPreviewFile(item) {
+ if (item.type === 'folder') return false
+ const mime = (item.mime || '').toLowerCase()
+ const name = (item.name || '').toLowerCase()
+ const ext = name.split('.').pop()
+ if (imageMimes.includes(mime) || imageExts.includes(ext)) return true
+ if (mime.includes('pdf')) return true
+ if (textMimes.includes(mime) || codeNames.includes(ext)) return true
+ return false
+}
+
+export function isImageFile(item) {
+ const mime = (item.mime || '').toLowerCase()
+ const name = (item.name || '').toLowerCase()
+ const ext = name.split('.').pop()
+ return imageMimes.includes(mime) || imageExts.includes(ext)
+}
+
+export function isTextFile(item) {
+ const mime = (item.mime || '').toLowerCase()
+ const name = (item.name || '').toLowerCase()
+ const ext = name.split('.').pop()
+ return textMimes.includes(mime) || (codeNames.includes(ext) && ext !== 'md' && ext !== 'markdown')
+}
+
+export function isPdfFile(item) {
+ return (item.mime || '').toLowerCase().includes('pdf')
+}
+
+export function isMarkdownFile(item) {
+ const name = (item.name || '').toLowerCase()
+ return name.endsWith('.md') || name.endsWith('.markdown')
+}
+
+export function needsBase64Preview(item) {
+ return isImageFile(item) || isPdfFile(item)
+}
+
+export function needsTextPreview(item) {
+ return isTextFile(item) || isMarkdownFile(item)
+}
diff --git a/frontend/src/wailsjs/go/main/App.js b/frontend/src/wailsjs/go/main/App.js
index 01da647..6a05776 100644
--- a/frontend/src/wailsjs/go/main/App.js
+++ b/frontend/src/wailsjs/go/main/App.js
@@ -46,6 +46,22 @@ export function ListFiles(arg1) {
return window['go']['main']['App']['ListFiles'](arg1);
}
+export function AddPathCopy(arg1, arg2) {
+ return window['go']['main']['App']['AddPathCopy'](arg1, arg2);
+}
+
+export function AddPathLink(arg1, arg2) {
+ return window['go']['main']['App']['AddPathLink'](arg1, arg2);
+}
+
+export function DeleteFileOrFolder(arg1) {
+ return window['go']['main']['App']['DeleteFileOrFolder'](arg1);
+}
+
+export function PreviewImport(arg1) {
+ return window['go']['main']['App']['PreviewImport'](arg1);
+}
+
export function ListActions(arg1) {
return window['go']['main']['App']['ListActions'](arg1);
}
diff --git a/internal/core/files/file.go b/internal/core/files/file.go
index 01bc1b5..8b5db47 100644
--- a/internal/core/files/file.go
+++ b/internal/core/files/file.go
@@ -3,6 +3,7 @@ package files
import (
"crypto/sha256"
"database/sql"
+ "encoding/base64"
"fmt"
"io"
"os"
@@ -12,6 +13,7 @@ import (
"strings"
"time"
+ "verstak/internal/core/nodes"
"verstak/internal/core/storage"
"verstak/internal/core/util"
)
@@ -32,15 +34,25 @@ type Record struct {
Missing bool `json:"missing"`
}
+// ImportSummary describes a scanned directory before import.
+type ImportSummary struct {
+ Files int `json:"files"`
+ Folders int `json:"folders"`
+ TotalBytes int64 `json:"totalBytes"`
+ IsDangerous bool `json:"isDangerous"`
+ DangerReason string `json:"dangerReason,omitempty"`
+}
+
// Service provides file operations inside a vault.
type Service struct {
db *storage.DB
vaultRoot string
+ nodes *nodes.Repository
}
// NewService creates a file service bound to a vault.
-func NewService(db *storage.DB, vaultRoot string) *Service {
- return &Service{db: db, vaultRoot: vaultRoot}
+func NewService(db *storage.DB, vaultRoot string, nodeRepo *nodes.Repository) *Service {
+ return &Service{db: db, vaultRoot: vaultRoot, nodes: nodeRepo}
}
// DB returns the underlying storage.
@@ -166,6 +178,280 @@ func (s *Service) Open(id string) error {
return openWithSystem(abs)
}
+// maxPreviewSize is the maximum file size (5 MB) for inline preview.
+const maxPreviewSize = 5 * 1024 * 1024
+
+// ReadText reads a file's content as text, up to maxPreviewSize.
+func (s *Service) ReadText(id string) (string, error) {
+ rec, err := s.Get(id)
+ if err != nil {
+ return "", err
+ }
+ if rec.Size > maxPreviewSize {
+ return "", fmt.Errorf("file too large for preview (%d bytes)", rec.Size)
+ }
+ var abs string
+ if rec.StorageMode == "vault" {
+ abs = filepath.Join(s.vaultRoot, rec.Path)
+ } else {
+ abs = rec.Path
+ }
+ b, err := os.ReadFile(abs)
+ if err != nil {
+ return "", fmt.Errorf("read: %w", err)
+ }
+ return string(b), nil
+}
+
+// ReadBase64 reads a file and returns a data URI (base64-encoded).
+func (s *Service) ReadBase64(id string) (string, error) {
+ rec, err := s.Get(id)
+ if err != nil {
+ return "", err
+ }
+ if rec.Size > maxPreviewSize {
+ return "", fmt.Errorf("file too large for preview (%d bytes)", rec.Size)
+ }
+ var abs string
+ if rec.StorageMode == "vault" {
+ abs = filepath.Join(s.vaultRoot, rec.Path)
+ } else {
+ abs = rec.Path
+ }
+ b, err := os.ReadFile(abs)
+ if err != nil {
+ return "", fmt.Errorf("read: %w", err)
+ }
+ mime := rec.MIME
+ if mime == "" {
+ mime = "application/octet-stream"
+ }
+ return fmt.Sprintf("data:%s;base64,%s", mime, base64.StdEncoding.EncodeToString(b)), nil
+}
+
+// CreateEmptyFile creates a file node and an empty vault file.
+func (s *Service) CreateEmptyFile(parentID, filename string) (*nodes.Node, error) {
+ filename = s.uniqueTitle(parentID, filename)
+ node, err := s.nodes.Create(parentID, nodes.TypeFile, filename, "")
+ if err != nil {
+ return nil, err
+ }
+ dir := filepath.Join(s.vaultRoot, "spaces", node.Slug)
+ if err := os.MkdirAll(dir, 0o750); err != nil {
+ return nil, fmt.Errorf("mkdir: %w", err)
+ }
+ dest := filepath.Join(dir, filename)
+ f, err := os.Create(dest)
+ if err != nil {
+ return nil, fmt.Errorf("create file: %w", err)
+ }
+ f.Close()
+ relPath, _ := filepath.Rel(s.vaultRoot, dest)
+ _, err = s.insertRecord(node.ID, filename, relPath, "vault", 0, "")
+ return node, err
+}
+
+// Duplicate creates a copy of a node and its file record under the same parent.
+func (s *Service) Duplicate(nodeID string) (*nodes.Node, error) {
+ original, err := s.nodes.GetActive(nodeID)
+ if err != nil {
+ return nil, err
+ }
+ parentID := ""
+ if original.ParentID != nil {
+ parentID = *original.ParentID
+ }
+ newName := s.uniqueTitle(parentID, original.Title)
+ node, err := s.nodes.Create(parentID, original.Type, newName, original.Section)
+ if err != nil {
+ return nil, err
+ }
+ if original.Type == nodes.TypeFile {
+ records, _ := s.ListByNode(original.ID)
+ if len(records) > 0 {
+ src := &records[0]
+ if src.StorageMode == "vault" {
+ srcPath := filepath.Join(s.vaultRoot, src.Path)
+ dir := filepath.Join(s.vaultRoot, "spaces", node.Slug)
+ os.MkdirAll(dir, 0o750)
+ dst := filepath.Join(dir, newName)
+ hash, err := copyAndHash(srcPath, dst)
+ if err != nil {
+ return nil, fmt.Errorf("copy file: %w", err)
+ }
+ relPath, _ := filepath.Rel(s.vaultRoot, dst)
+ _, err = s.insertRecord(node.ID, newName, relPath, "vault", src.Size, hash)
+ if err != nil {
+ return nil, err
+ }
+ } else {
+ // External file: create a new record pointing to the same absolute path.
+ _, err = s.insertRecord(node.ID, newName, src.Path, "external", src.Size, src.SHA256)
+ if err != nil {
+ return nil, err
+ }
+ }
+ }
+ }
+ return node, nil
+}
+
+// AddPathCopy copies sourcePath (file or directory) into the vault under nodeID.
+func (s *Service) AddPathCopy(nodeID, sourcePath string) ([]nodes.Node, error) {
+ return s.importPath(nodeID, sourcePath, true)
+}
+
+// AddPathLink links sourcePath (file or directory) without copying into vault.
+func (s *Service) AddPathLink(nodeID, sourcePath string) ([]nodes.Node, error) {
+ return s.importPath(nodeID, sourcePath, false)
+}
+
+// PreviewImport scans sourcePath and returns a summary without importing.
+func (s *Service) PreviewImport(sourcePath string) (*ImportSummary, error) {
+ info, err := os.Stat(sourcePath)
+ if err != nil {
+ return nil, fmt.Errorf("stat: %w", err)
+ }
+ if !info.IsDir() {
+ return &ImportSummary{Files: 1, TotalBytes: info.Size()}, nil
+ }
+
+ var sum ImportSummary
+ err = filepath.Walk(sourcePath, func(path string, fi os.FileInfo, err error) error {
+ if err != nil {
+ return filepath.SkipDir
+ }
+ if fi.IsDir() {
+ sum.Folders++
+ name := strings.ToLower(fi.Name())
+ if name == ".git" || name == "node_modules" || name == ".cache" {
+ sum.IsDangerous = true
+ sum.DangerReason = fmt.Sprintf("содержит %s", fi.Name())
+ }
+ return nil
+ }
+ sum.Files++
+ sum.TotalBytes += fi.Size()
+ return nil
+ })
+ if sum.Files > 1000 && !sum.IsDangerous {
+ sum.IsDangerous = true
+ sum.DangerReason = "более 1000 файлов"
+ }
+ if sum.TotalBytes > 1<<30 && !sum.IsDangerous {
+ sum.IsDangerous = true
+ sum.DangerReason = "более 1 GB"
+ }
+ return &sum, err
+}
+
+// DeleteNodeAndChildren soft-deletes a node and all descendants,
+// moving vault files to trash.
+func (s *Service) DeleteNodeAndChildren(nodeID string) error {
+ children, _ := s.nodes.ListChildren(nodeID, false)
+ for i := range children {
+ if err := s.DeleteNodeAndChildren(children[i].ID); err != nil {
+ return err
+ }
+ }
+ _ = s.deleteFileRecords(nodeID)
+ return s.nodes.SoftDelete(nodeID)
+}
+
+func (s *Service) deleteFileRecords(nodeID string) error {
+ records, err := s.ListByNode(nodeID)
+ if err != nil {
+ return err
+ }
+ for _, r := range records {
+ _ = s.DeleteToTrash(r.ID)
+ }
+ return nil
+}
+
+func (s *Service) importPath(parentID, sourcePath string, copyMode bool) ([]nodes.Node, error) {
+ info, err := os.Stat(sourcePath)
+ if err != nil {
+ return nil, fmt.Errorf("stat: %w", err)
+ }
+ if !info.IsDir() {
+ title := s.uniqueTitle(parentID, filepath.Base(sourcePath))
+ node, err := s.nodes.Create(parentID, nodes.TypeFile, title, "")
+ if err != nil {
+ return nil, err
+ }
+ if copyMode {
+ _, err = s.CopyIntoVault(node.ID, sourcePath, node.Slug)
+ } else {
+ _, err = s.AddExternal(node.ID, sourcePath)
+ }
+ if err != nil {
+ return nil, err
+ }
+ return []nodes.Node{*node}, nil
+ }
+ return s.importDir(parentID, sourcePath, info.Name(), copyMode)
+}
+
+func (s *Service) importDir(parentID, sourcePath, dirName string, copyMode bool) ([]nodes.Node, error) {
+ dirName = s.uniqueTitle(parentID, dirName)
+ folderNode, err := s.nodes.Create(parentID, nodes.TypeFolder, dirName, "")
+ if err != nil {
+ return nil, err
+ }
+
+ entries, err := os.ReadDir(sourcePath)
+ if err != nil {
+ return nil, err
+ }
+
+ var all []nodes.Node
+ all = append(all, *folderNode)
+
+ for _, entry := range entries {
+ childPath := filepath.Join(sourcePath, entry.Name())
+ if entry.IsDir() {
+ children, err := s.importDir(folderNode.ID, childPath, entry.Name(), copyMode)
+ if err != nil {
+ return nil, err
+ }
+ all = append(all, children...)
+ } else {
+ childNode, err := s.nodes.Create(folderNode.ID, nodes.TypeFile, entry.Name(), "")
+ if err != nil {
+ return nil, err
+ }
+ if copyMode {
+ _, err = s.CopyIntoVault(childNode.ID, childPath, childNode.Slug)
+ } else {
+ _, err = s.AddExternal(childNode.ID, childPath)
+ }
+ if err != nil {
+ return nil, err
+ }
+ all = append(all, *childNode)
+ }
+ }
+ return all, nil
+}
+
+func (s *Service) uniqueTitle(parentID, desired string) string {
+ children, _ := s.nodes.ListChildren(parentID, false)
+ used := make(map[string]bool, len(children))
+ for i := range children {
+ used[children[i].Title] = true
+ }
+ if !used[desired] {
+ return desired
+ }
+ for n := 2; ; n++ {
+ c := fmt.Sprintf("%s (%d)", desired, n)
+ if !used[c] {
+ return c
+ }
+ }
+}
+
// --- implementation details ---
func (s *Service) insertRecord(nodeID, filename, path, mode string, size int64, sha string) (*Record, error) {
diff --git a/internal/core/files/file_test.go b/internal/core/files/file_test.go
index de3ea13..af50404 100644
--- a/internal/core/files/file_test.go
+++ b/internal/core/files/file_test.go
@@ -5,6 +5,7 @@ import (
"path/filepath"
"testing"
+ "verstak/internal/core/nodes"
"verstak/internal/core/storage"
)
@@ -23,7 +24,7 @@ func TestAddExternal(t *testing.T) {
db := openTestDB(t)
// Run migration 002 manually since storage.Open already applied it.
// We can verify the table exists by inserting.
- filesSvc := NewService(db, t.TempDir())
+ filesSvc := NewService(db, t.TempDir(), nodes.NewRepository(db))
// Create a real temp file to register.
tmpDir := t.TempDir()
@@ -62,7 +63,7 @@ func TestAddExternal(t *testing.T) {
func TestCopyIntoVault(t *testing.T) {
db := openTestDB(t)
vaultRoot := t.TempDir()
- svc := NewService(db, vaultRoot)
+ svc := NewService(db, vaultRoot, nodes.NewRepository(db))
// Source file.
srcDir := t.TempDir()
@@ -88,7 +89,7 @@ func TestCopyIntoVault(t *testing.T) {
func TestListByNode(t *testing.T) {
db := openTestDB(t)
- svc := NewService(db, t.TempDir())
+ svc := NewService(db, t.TempDir(), nodes.NewRepository(db))
os.WriteFile(filepath.Join(t.TempDir(), "a.txt"), []byte("a"), 0o640)
f1 := filepath.Join(t.TempDir(), "a1.txt")
@@ -111,7 +112,7 @@ func TestListByNode(t *testing.T) {
func TestDeleteToTrash(t *testing.T) {
db := openTestDB(t)
vaultRoot := t.TempDir()
- svc := NewService(db, vaultRoot)
+ svc := NewService(db, vaultRoot, nodes.NewRepository(db))
src := filepath.Join(t.TempDir(), "important.pdf")
os.WriteFile(src, []byte("important data"), 0o640)
@@ -140,6 +141,170 @@ func TestDeleteToTrash(t *testing.T) {
}
}
+func TestAddPathCopySingleFile(t *testing.T) {
+ db := openTestDB(t)
+ vaultRoot := t.TempDir()
+ nodeRepo := nodes.NewRepository(db)
+ svc := NewService(db, vaultRoot, nodeRepo)
+
+ parent, _ := nodeRepo.Create("", "case", "Test Case", "")
+ src := filepath.Join(t.TempDir(), "doc.pdf")
+ os.WriteFile(src, []byte("file content"), 0o640)
+
+ nodes, err := svc.AddPathCopy(parent.ID, src)
+ if err != nil {
+ t.Fatalf("AddPathCopy: %v", err)
+ }
+ if len(nodes) != 1 {
+ t.Fatalf("got %d nodes, want 1", len(nodes))
+ }
+ if nodes[0].Type != "file" {
+ t.Errorf("type = %q", nodes[0].Type)
+ }
+ // Source intact.
+ if _, err := os.Stat(src); err != nil {
+ t.Error("source should remain intact")
+ }
+ // File record created.
+ records, _ := svc.ListByNode(nodes[0].ID)
+ if len(records) != 1 {
+ t.Errorf("file records = %d", len(records))
+ }
+}
+
+func TestAddPathLinkSingleFile(t *testing.T) {
+ db := openTestDB(t)
+ vaultRoot := t.TempDir()
+ nodeRepo := nodes.NewRepository(db)
+ svc := NewService(db, vaultRoot, nodeRepo)
+
+ parent, _ := nodeRepo.Create("", "case", "Test Case", "")
+ src := filepath.Join(t.TempDir(), "linked.pdf")
+ os.WriteFile(src, []byte("linked"), 0o640)
+
+ nodes, err := svc.AddPathLink(parent.ID, src)
+ if err != nil {
+ t.Fatalf("AddPathLink: %v", err)
+ }
+ if len(nodes) != 1 {
+ t.Fatalf("got %d nodes, want 1", len(nodes))
+ }
+ // File record should have external storage mode.
+ records, _ := svc.ListByNode(nodes[0].ID)
+ if len(records) != 1 {
+ t.Fatalf("file records = %d", len(records))
+ }
+ if records[0].StorageMode != "external" {
+ t.Errorf("storage mode = %q, want external", records[0].StorageMode)
+ }
+}
+
+func TestAddPathCopyDirectory(t *testing.T) {
+ db := openTestDB(t)
+ vaultRoot := t.TempDir()
+ nodeRepo := nodes.NewRepository(db)
+ svc := NewService(db, vaultRoot, nodeRepo)
+
+ parent, _ := nodeRepo.Create("", "case", "Test Case", "")
+ srcDir := t.TempDir()
+ os.MkdirAll(filepath.Join(srcDir, "sub"), 0o750)
+ os.WriteFile(filepath.Join(srcDir, "a.txt"), []byte("a"), 0o640)
+ os.WriteFile(filepath.Join(srcDir, "sub", "b.txt"), []byte("bb"), 0o640)
+
+ nodes, err := svc.AddPathCopy(parent.ID, srcDir)
+ if err != nil {
+ t.Fatalf("AddPathCopy dir: %v", err)
+ }
+ // Should create: folder node + file node + sub folder node + file node in sub.
+ if len(nodes) < 3 {
+ t.Errorf("expected 3+ nodes, got %d", len(nodes))
+ }
+ // Verify structure: root folder + children.
+ var folders, files int
+ for i := range nodes {
+ if nodes[i].Type == "folder" {
+ folders++
+ } else {
+ files++
+ }
+ }
+ if folders < 1 {
+ t.Error("expected at least 1 folder")
+ }
+ if files < 1 {
+ t.Error("expected at least 1 file")
+ }
+}
+
+func TestDeleteNodeAndChildren(t *testing.T) {
+ db := openTestDB(t)
+ vaultRoot := t.TempDir()
+ nodeRepo := nodes.NewRepository(db)
+ svc := NewService(db, vaultRoot, nodeRepo)
+
+ parent, _ := nodeRepo.Create("", "case", "To Delete", "")
+ child, _ := nodeRepo.Create(parent.ID, "file", "child.txt", "")
+ // Add file record to child.
+ src := filepath.Join(t.TempDir(), "child.txt")
+ os.WriteFile(src, []byte("data"), 0o640)
+ svc.CopyIntoVault(child.ID, src, child.Slug)
+
+ if err := svc.DeleteNodeAndChildren(parent.ID); err != nil {
+ t.Fatalf("DeleteNodeAndChildren: %v", err)
+ }
+ // Parent should be soft-deleted.
+ if _, err := nodeRepo.GetActive(parent.ID); err == nil {
+ t.Error("parent should be deleted")
+ }
+ // Child should be soft-deleted.
+ if _, err := nodeRepo.GetActive(child.ID); err == nil {
+ t.Error("child should be deleted")
+ }
+}
+
+func TestNameConflict(t *testing.T) {
+ db := openTestDB(t)
+ vaultRoot := t.TempDir()
+ nodeRepo := nodes.NewRepository(db)
+ svc := NewService(db, vaultRoot, nodeRepo)
+
+ parent, _ := nodeRepo.Create("", "case", "Test", "")
+ src := filepath.Join(t.TempDir(), "conflict.pdf")
+ os.WriteFile(src, []byte("data"), 0o640)
+
+ // Import twice with same filename.
+ n1, _ := svc.AddPathCopy(parent.ID, src)
+ n2, _ := svc.AddPathCopy(parent.ID, src)
+ if n1[0].Title == n2[0].Title {
+ t.Error("expected unique name on conflict")
+ }
+ if n2[0].Title == "conflict.pdf" {
+ t.Errorf("title unchanged = %q", n2[0].Title)
+ }
+}
+
+func TestPreviewImportDir(t *testing.T) {
+ db := openTestDB(t)
+ vaultRoot := t.TempDir()
+ svc := NewService(db, vaultRoot, nodes.NewRepository(db))
+
+ srcDir := t.TempDir()
+ os.MkdirAll(filepath.Join(srcDir, "sub"), 0o750)
+ os.WriteFile(filepath.Join(srcDir, "f1.txt"), []byte("hello"), 0o640)
+ os.WriteFile(filepath.Join(srcDir, "f2.txt"), []byte("world"), 0o640)
+
+ sum, err := svc.PreviewImport(srcDir)
+ if err != nil {
+ t.Fatalf("PreviewImport: %v", err)
+ }
+ if sum.Files != 2 {
+ t.Errorf("files = %d, want 2", sum.Files)
+ }
+ if sum.Folders != 2 { // root + sub
+ t.Errorf("folders = %d, want 2", sum.Folders)
+ }
+}
+
func TestGuessMIME(t *testing.T) {
cases := map[string]string{
"a.md": "text/plain",
diff --git a/internal/core/notes/note_test.go b/internal/core/notes/note_test.go
index a1612bf..e3ec7ff 100644
--- a/internal/core/notes/note_test.go
+++ b/internal/core/notes/note_test.go
@@ -21,7 +21,7 @@ func setupService(t *testing.T) (*Service, *nodes.Repository, string) {
t.Cleanup(func() { db.Close() })
nodeRepo := nodes.NewRepository(db)
- fileSvc := files.NewService(db, dir)
+ fileSvc := files.NewService(db, dir, nodeRepo)
svc := NewService(db, dir, nodeRepo, fileSvc)
return svc, nodeRepo, dir
}
diff --git a/internal/gui/server.go b/internal/gui/server.go
index 53865d0..0f48aeb 100644
--- a/internal/gui/server.go
+++ b/internal/gui/server.go
@@ -38,7 +38,7 @@ type Server struct {
// NewServer creates a GUI server for the given vault.
func NewServer(db *storage.DB, vaultRoot string) *Server {
nodeRepo := nodes.NewRepository(db)
- fileSvc := files.NewService(db, vaultRoot)
+ fileSvc := files.NewService(db, vaultRoot, nodeRepo)
noteSvc := notes.NewService(db, vaultRoot, nodeRepo, fileSvc)
actionSvc := actions.NewService(db)
workSvc := worklog.NewService(db)