diff --git a/cmd/verstak-gui/bindings_suggest.go b/cmd/verstak-gui/bindings_suggest.go new file mode 100644 index 0000000..f5e3171 --- /dev/null +++ b/cmd/verstak-gui/bindings_suggest.go @@ -0,0 +1,129 @@ +package main + +import ( + "fmt" + "sort" + "strings" + + "verstak/internal/core/activity" +) + +// GetSuggestions analyzes today's activity and returns worklog suggestions. +func (a *App) GetSuggestions() ([]activity.Suggestion, error) { + events, err := a.activity.ListTodayEvents() + if err != nil { + return nil, err + } + if len(events) == 0 { + return nil, nil + } + + type acc struct { + title string + kind string + events []activity.Event + } + grouped := make(map[string]*acc) + for _, e := range events { + grp, ok := grouped[e.NodeID] + if !ok { + n, err := a.nodes.GetActive(e.NodeID) + title := "" + kind := "" + if err == nil && n != nil { + title = n.Title + kind = n.Type + } + grp = &acc{title: title, kind: kind} + grouped[e.NodeID] = grp + } + grp.events = append(grp.events, e) + } + + var suggestions []activity.Suggestion + for nodeID, grp := range grouped { + if grp.title == "" { + continue + } + hasEntries, err := a.worklog.HasTodayEntries(nodeID) + if err != nil || hasEntries { + continue + } + + noteCount := 0 + fileCount := 0 + actionCount := 0 + otherCount := 0 + for _, e := range grp.events { + switch e.EventType { + case activity.TypeNoteCreated, activity.TypeNoteUpdated, activity.TypeNoteDeleted: + noteCount++ + case activity.TypeFileAdded, activity.TypeFileDeleted, activity.TypeFileRenamed, + activity.TypeFileCopied, activity.TypeFileMoved, + activity.TypeFolderAdded, activity.TypeFolderDeleted, activity.TypeFolderRenamed: + fileCount++ + case activity.TypeActionCreated, activity.TypeActionDone: + actionCount++ + default: + otherCount++ + } + } + + summary := buildSuggestionSummary(noteCount, fileCount, actionCount, otherCount) + if summary == "" { + continue + } + + suggestions = append(suggestions, activity.Suggestion{ + NodeID: nodeID, + NodeTitle: grp.title, + Summary: summary, + SuggestedMin: suggestMinutes(noteCount + fileCount + actionCount + otherCount), + EventCount: len(grp.events), + NodeKind: grp.kind, + }) + } + + sort.Slice(suggestions, func(i, j int) bool { + return suggestions[i].EventCount > suggestions[j].EventCount + }) + + return suggestions, nil +} + +// AcceptSuggestion creates a worklog entry from a suggestion. +func (a *App) AcceptSuggestion(s activity.Suggestion) (*WorklogDTO, error) { + return a.CreateWorklog(s.NodeID, s.Summary, s.SuggestedMin) +} + +func buildSuggestionSummary(noteCount, fileCount, actionCount, otherCount int) string { + var parts []string + if noteCount > 0 { + parts = append(parts, fmt.Sprintf("заметки (%d)", noteCount)) + } + if fileCount > 0 { + parts = append(parts, fmt.Sprintf("файлы (%d)", fileCount)) + } + if actionCount > 0 { + parts = append(parts, fmt.Sprintf("действия (%d)", actionCount)) + } + if otherCount > 0 { + parts = append(parts, fmt.Sprintf("события (%d)", otherCount)) + } + return strings.Join(parts, ", ") +} + +func suggestMinutes(totalEvents int) int { + switch { + case totalEvents >= 15: + return 120 + case totalEvents >= 10: + return 90 + case totalEvents >= 6: + return 60 + case totalEvents >= 3: + return 30 + default: + return 15 + } +} diff --git a/cmd/verstak-gui/frontend-dist/assets/main-8mzuSvQb.css b/cmd/verstak-gui/frontend-dist/assets/main-8mzuSvQb.css new file mode 100644 index 0000000..8405597 --- /dev/null +++ b/cmd/verstak-gui/frontend-dist/assets/main-8mzuSvQb.css @@ -0,0 +1 @@ +.file-row.svelte-1skuef2.svelte-1skuef2{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;position:relative}.file-row.svelte-1skuef2.svelte-1skuef2:hover{background:#1e1e30}.file-row--selected.svelte-1skuef2.svelte-1skuef2{background:#1e1e3a;outline:1px solid #3a3a6c}.file-row--selected.svelte-1skuef2.svelte-1skuef2:hover{background:#252545}.file-row.svelte-1skuef2.svelte-1skuef2:focus-visible{outline:2px solid #5588ff;outline-offset:-2px}.file-row-icon.svelte-1skuef2.svelte-1skuef2{flex-shrink:0;display:flex;align-items:center;justify-content:center;width:32px;height:32px;color:#888}.file-row-body.svelte-1skuef2.svelte-1skuef2{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}.file-row-name.svelte-1skuef2.svelte-1skuef2{font-size:13px;color:#ddd;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:1.3}.file-row-meta.svelte-1skuef2.svelte-1skuef2{display:flex;align-items:center;gap:4px;font-size:11px;color:#666}.meta-sep.svelte-1skuef2.svelte-1skuef2{color:#444}.file-row-actions.svelte-1skuef2.svelte-1skuef2{display:flex;gap:2px;align-items:center;opacity:0;transition:opacity .15s ease;flex-shrink:0}.file-row.svelte-1skuef2:hover .file-row-actions.svelte-1skuef2{opacity:1}.action-btn.svelte-1skuef2.svelte-1skuef2{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-1skuef2.svelte-1skuef2:hover{background:#2a2a3c;color:#ccc}.action-btn-danger.svelte-1skuef2.svelte-1skuef2:hover{background:#3a2222;color:#ff6b6b}.action-btn.svelte-1skuef2.svelte-1skuef2:focus-visible{outline:2px solid #5588ff;outline-offset:1px}.menu-backdrop.svelte-1skuef2.svelte-1skuef2{position:fixed;top:0;right:0;bottom:0;left:0;z-index:99}.menu.svelte-1skuef2.svelte-1skuef2{position:fixed;background:#1a1a28;border:1px solid #2a2a3c;border-radius:8px;padding:4px;z-index:100;min-width:220px;box-shadow:0 4px 16px #00000080}.menu-item.svelte-1skuef2.svelte-1skuef2{display:flex;align-items:center;gap:8px;width:100%;padding:7px 10px;border:none;background:transparent;color:#ccc;font-size:12px;text-align:left;cursor:pointer;border-radius:4px;font-family:inherit}.menu-item.svelte-1skuef2.svelte-1skuef2:hover{background:#2a2a3c;color:#fff}.menu-item-danger.svelte-1skuef2.svelte-1skuef2{color:#ff6b6b}.menu-item-danger.svelte-1skuef2.svelte-1skuef2:hover{background:#3a2222}.menu-item.svelte-1skuef2.svelte-1skuef2:focus-visible{outline:2px solid #5588ff;outline-offset:1px}.menu-sep.svelte-1skuef2.svelte-1skuef2{height:1px;background:#2a2a3c;margin:4px 8px}.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}.tree-item.svelte-zj71cl.svelte-zj71cl{display:flex;align-items:center;height:32px;padding-right:8px;cursor:default;font-size:13px;color:#ccc;-webkit-user-select:none;user-select:none}.tree-item.svelte-zj71cl.svelte-zj71cl:hover{background:#223}.tree-item.selected.svelte-zj71cl.svelte-zj71cl{background:#2a2a4a;color:#fff;font-weight:500}.tree-item.drop-valid.svelte-zj71cl.svelte-zj71cl{background:#1a3a1a;outline:1px solid #4ade80;outline-offset:-1px}.tree-item.drop-invalid.svelte-zj71cl.svelte-zj71cl{background:#3a1a1a;outline:1px solid #ff6b6b;outline-offset:-1px}.tree-toggle.svelte-zj71cl.svelte-zj71cl{background:none;border:none;color:#666;cursor:pointer;padding:0;width:20px;height:32px;display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;font-family:inherit;line-height:1;font-size:12px}.tree-toggle.svelte-zj71cl.svelte-zj71cl:hover{color:#a5b4fc}.tree-toggle-placeholder.svelte-zj71cl.svelte-zj71cl{display:inline-block;width:20px;flex-shrink:0}.tree-icon.svelte-zj71cl.svelte-zj71cl{display:inline-flex;align-items:center;justify-content:center;width:20px;height:32px;flex-shrink:0;color:#888;margin-right:4px;cursor:pointer}.tree-icon.svelte-zj71cl.svelte-zj71cl:hover,.tree-item.selected.svelte-zj71cl .tree-icon.svelte-zj71cl{color:#a5b4fc}.tree-label.svelte-zj71cl.svelte-zj71cl{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;cursor:pointer;line-height:32px}.svelte-eykba5.svelte-eykba5,.svelte-eykba5.svelte-eykba5:before,.svelte-eykba5.svelte-eykba5:after{box-sizing:border-box;margin:0;padding:0}.app.svelte-eykba5.svelte-eykba5{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-eykba5.svelte-eykba5{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-eykba5.svelte-eykba5{padding:16px 20px;display:flex;align-items:center;gap:10px;border-bottom:1px solid #2a2a3c;flex-shrink:0}.logo.svelte-eykba5.svelte-eykba5{font-size:20px;line-height:1}.brand-name.svelte-eykba5.svelte-eykba5{font-size:16px;font-weight:600}.sidebar-nav.svelte-eykba5.svelte-eykba5{flex:1;overflow-y:auto;padding:12px 0}.nav-group.svelte-eykba5.svelte-eykba5{margin-bottom:16px}.nav-label.svelte-eykba5.svelte-eykba5{font-size:10px;text-transform:uppercase;letter-spacing:.5px;color:#666;padding:4px 20px;margin-bottom:4px}.nav-item.svelte-eykba5.svelte-eykba5{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-eykba5.svelte-eykba5:hover{background:#223}.nav-item.selected.svelte-eykba5.svelte-eykba5{background:#2a2a4a;color:#fff;font-weight:500}.workspace-tree-area.svelte-eykba5.svelte-eykba5{min-height:32px}.workspace-tree-area.drop-valid.svelte-eykba5.svelte-eykba5{outline:2px dashed #4ade80;outline-offset:-2px;background:#4ade800d}.nav-empty.svelte-eykba5.svelte-eykba5{padding:8px 20px;color:#555;font-size:12px}.nav-label-row.svelte-eykba5.svelte-eykba5{font-size:10px;text-transform:uppercase;letter-spacing:.5px;color:#666;padding:4px 20px;margin-bottom:4px;display:flex;align-items:center;justify-content:space-between}.nav-add-btn.svelte-eykba5.svelte-eykba5{background:none;border:none;color:#666;cursor:pointer;font-size:16px;padding:0 4px;font-family:inherit;line-height:1}.nav-add-btn.svelte-eykba5.svelte-eykba5:hover{color:#ccc}.context-menu-backdrop.svelte-eykba5.svelte-eykba5{position:fixed;top:0;right:0;bottom:0;left:0;z-index:200}.context-menu.svelte-eykba5.svelte-eykba5{position:fixed;background:#1a1a28;border:1px solid #2a2a3c;border-radius:8px;padding:4px;min-width:180px;box-shadow:0 8px 24px #0006}.context-menu-section.svelte-eykba5.svelte-eykba5{padding:6px 12px;font-size:10px;text-transform:uppercase;letter-spacing:.5px;color:#666}.context-menu-item.svelte-eykba5.svelte-eykba5{display:flex;width:100%;padding:6px 12px;border:none;background:none;color:#ccc;font-size:13px;text-align:left;cursor:pointer;border-radius:4px;font-family:inherit;align-items:center;gap:6px}.context-menu-item.svelte-eykba5.svelte-eykba5:hover{background:#223;color:#fff}.context-menu-item.danger.svelte-eykba5.svelte-eykba5{color:#ff6b6b}.context-menu-item.danger.svelte-eykba5.svelte-eykba5:hover{background:#3a2222;color:#ff6b6b}.context-menu-divider.svelte-eykba5.svelte-eykba5{height:1px;background:#2a2a3c;margin:4px 0}.create-context.svelte-eykba5.svelte-eykba5{font-size:12px;color:#888;margin-bottom:12px}.sidebar-footer.svelte-eykba5.svelte-eykba5{padding:8px 12px;border-top:1px solid #2a2a3c;flex-shrink:0;display:flex;flex-direction:column;gap:4px}.version.svelte-eykba5.svelte-eykba5{font-size:11px;color:#555;text-align:center}.main.svelte-eykba5.svelte-eykba5{flex:1;display:flex;flex-direction:column;height:100vh;min-width:0;overflow:hidden;background:#13131f}.header.svelte-eykba5.svelte-eykba5{padding:12px 24px;border-bottom:1px solid #2a2a3c;display:flex;align-items:center;flex-shrink:0;min-height:48px}.header-left.svelte-eykba5.svelte-eykba5{display:flex;align-items:center;gap:8px;flex:1}.header-right.svelte-eykba5.svelte-eykba5{display:flex;align-items:center;gap:8px}.header-sync-btn.svelte-eykba5.svelte-eykba5{background:#1e1e38;border:1px solid #6366f1;border-radius:8px;padding:6px 12px;cursor:pointer;display:inline-flex;align-items:center;gap:6px;color:#c0c0f0;font-family:inherit;font-size:13px;position:relative}.header-sync-btn.svelte-eykba5.svelte-eykba5:hover{background:#2a2a50;color:#e4e4ef;border-color:#818cf8}.header-sync-btn.svelte-eykba5.svelte-eykba5:disabled{opacity:.5;cursor:not-allowed}.sync-badge.svelte-eykba5.svelte-eykba5{background:#6366f1;color:#fff;font-size:10px;border-radius:50%;width:16px;height:16px;display:inline-flex;align-items:center;justify-content:center;position:absolute;top:-6px;right:-6px}.crumb.svelte-eykba5.svelte-eykba5{font-size:14px;font-weight:500}.crumb.placeholder.svelte-eykba5.svelte-eykba5{color:#666}.crumb-type.svelte-eykba5.svelte-eykba5{font-size:11px;color:#555;background:#1e1e2e;padding:2px 8px;border-radius:10px;margin-left:8px}.error-banner.svelte-eykba5.svelte-eykba5{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-eykba5.svelte-eykba5{background:none;border:none;color:#f66;cursor:pointer;padding:2px;display:flex;align-items:center;border-radius:2px}.dismiss-btn.svelte-eykba5.svelte-eykba5:hover{color:#f44}.tabs.svelte-eykba5.svelte-eykba5{display:flex;border-bottom:1px solid #2a2a3c;flex-shrink:0;padding:0 24px}.tab.svelte-eykba5.svelte-eykba5{padding:10px 16px;border:none;background:none;color:#888;font-size:13px;cursor:pointer;border-bottom:2px solid transparent;font-family:inherit}.tab.svelte-eykba5.svelte-eykba5:hover{color:#a5b4fc}.tab.active.svelte-eykba5.svelte-eykba5{color:#e4e4ef;border-bottom-color:#818cf8;background:#6366f11f;font-weight:600}.tab-content.svelte-eykba5.svelte-eykba5{flex:1;overflow-y:auto}.note-editor.svelte-eykba5.svelte-eykba5{flex:1;display:flex;flex-direction:column;height:100%}.note-editor-header.svelte-eykba5.svelte-eykba5{padding:12px 24px;border-bottom:1px solid #2a2a3c;display:flex;align-items:center;gap:12px;flex-shrink:0}.note-title.svelte-eykba5.svelte-eykba5{font-size:16px;font-weight:500}.dirty-mark.svelte-eykba5.svelte-eykba5{color:#f59e0b;font-size:10px}.note-editor-actions.svelte-eykba5.svelte-eykba5{margin-left:auto;display:flex;gap:8px}.note-textarea.svelte-eykba5.svelte-eykba5{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-eykba5.svelte-eykba5{padding:24px}.overview.svelte-eykba5 h2.svelte-eykba5{font-size:24px;margin-bottom:16px}.meta-grid.svelte-eykba5.svelte-eykba5{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:12px;margin-bottom:24px}.meta-item.svelte-eykba5.svelte-eykba5{background:#1a1a28;padding:12px 16px;border-radius:8px}.meta-label.svelte-eykba5.svelte-eykba5{display:block;font-size:11px;color:#666;margin-bottom:4px;text-transform:uppercase}.quick-actions.svelte-eykba5.svelte-eykba5{display:flex;gap:8px;margin-bottom:24px;flex-wrap:wrap}.qa-btn.svelte-eykba5.svelte-eykba5{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-eykba5.svelte-eykba5:hover{background:#223}.qa-btn.svelte-eykba5.svelte-eykba5:disabled{opacity:.4;cursor:not-allowed}.recent-section.svelte-eykba5.svelte-eykba5{margin-bottom:24px}.recent-section.svelte-eykba5 h3.svelte-eykba5{font-size:13px;color:#666;text-transform:uppercase;margin-bottom:8px}.recent-note.svelte-eykba5.svelte-eykba5{padding:8px 12px;border-radius:6px;cursor:pointer;display:flex;justify-content:space-between}.recent-note.svelte-eykba5.svelte-eykba5:hover{background:#1a1a28}.recent-date.svelte-eykba5.svelte-eykba5{font-size:11px;color:#555}.recent-entry.svelte-eykba5.svelte-eykba5{padding:6px 0;font-size:13px;color:#888;border-bottom:1px solid #1a1a28}.notes-tab.svelte-eykba5.svelte-eykba5{padding:24px}.tab-toolbar.svelte-eykba5.svelte-eykba5{margin-bottom:16px}.create-form.svelte-eykba5.svelte-eykba5{background:#1a1a28;padding:16px;border-radius:8px;margin-bottom:16px}.create-form.svelte-eykba5 input.svelte-eykba5{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-eykba5 input.svelte-eykba5:focus{outline:none;border-color:#6366f1}.form-actions.svelte-eykba5.svelte-eykba5{display:flex;gap:8px}.notes-list.svelte-eykba5.svelte-eykba5{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:12px}.note-card.svelte-eykba5.svelte-eykba5{background:#1a1a28;border:1px solid #2a2a3c;border-radius:8px;padding:16px;cursor:pointer}.note-card.svelte-eykba5.svelte-eykba5:hover{border-color:#3a3a5c}.note-card-title.svelte-eykba5.svelte-eykba5{font-size:14px;font-weight:500;margin-bottom:4px}.note-card-date.svelte-eykba5.svelte-eykba5{font-size:11px;color:#555}.worklog-tab.svelte-eykba5.svelte-eykba5{padding:24px}.worklog-form.svelte-eykba5.svelte-eykba5{display:flex;gap:8px;margin-bottom:24px;align-items:center}.worklog-form.svelte-eykba5 input.svelte-eykba5{padding:8px 12px;border:1px solid #2a2a3c;background:#13131f;color:#e4e4ef;border-radius:4px;font-size:14px;font-family:inherit}.worklog-form.svelte-eykba5 input.svelte-eykba5:focus{outline:none;border-color:#6366f1}.worklog-form.svelte-eykba5 input[type=text].svelte-eykba5{flex:1}.worklog-form.svelte-eykba5 input[type=number].svelte-eykba5{width:70px}.worklog-entry.svelte-eykba5.svelte-eykba5{padding:12px 0;border-bottom:1px solid #1a1a28}.suggestions.svelte-eykba5.svelte-eykba5{margin-bottom:24px;padding:16px;background:#1a1a2e;border-radius:8px;border:1px solid #2a2a3c}.suggestions-title.svelte-eykba5.svelte-eykba5{font-size:13px;font-weight:600;color:#a5b4fc;margin-bottom:12px;text-transform:uppercase;letter-spacing:.5px}.suggestion.svelte-eykba5.svelte-eykba5{display:flex;align-items:center;justify-content:space-between;padding:10px 0;border-bottom:1px solid #2a2a3c}.suggestion.svelte-eykba5.svelte-eykba5:last-child{border-bottom:none}.suggestion-body.svelte-eykba5.svelte-eykba5{flex:1}.suggestion-summary.svelte-eykba5.svelte-eykba5{font-size:14px;color:#e4e4ef}.suggestion-meta.svelte-eykba5.svelte-eykba5{font-size:12px;color:#8888a0;margin-top:2px}.wl-meta.svelte-eykba5.svelte-eykba5{font-size:11px;color:#555;margin-top:2px}.actions-tab.svelte-eykba5.svelte-eykba5{padding:24px}.action-card.svelte-eykba5.svelte-eykba5{background:#1a1a28;padding:12px 16px;border-radius:8px;display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:8px}.action-info.svelte-eykba5.svelte-eykba5{display:flex;align-items:center;gap:8px;flex:1;min-width:0}.action-title.svelte-eykba5.svelte-eykba5{font-weight:500}.action-type.svelte-eykba5.svelte-eykba5{font-size:11px;color:#888;background:#223;padding:2px 8px;border-radius:10px;white-space:nowrap}.action-data.svelte-eykba5.svelte-eykba5{font-size:11px;color:#555;font-family:SF Mono,Fira Code,monospace;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:200px}.action-btns.svelte-eykba5.svelte-eykba5{display:flex;gap:4px;flex-shrink:0}.action-btns.svelte-eykba5 .btn-danger.svelte-eykba5{color:#ff6b6b;border-color:#4a2222;padding:4px 8px}.action-btns.svelte-eykba5 .btn-danger.svelte-eykba5:hover{background:#3a2222}.empty-state.svelte-eykba5.svelte-eykba5{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:48px 24px;text-align:center}.empty-state.svelte-eykba5 p.svelte-eykba5{margin:0;font-size:14px;color:#666}.empty-state.svelte-eykba5 .empty-icon.svelte-eykba5{margin-bottom:12px;color:#444}.empty-state.svelte-eykba5 .hint.svelte-eykba5{font-size:12px;color:#555;margin-top:6px}.empty-state.svelte-eykba5 .empty-actions.svelte-eykba5{display:flex;gap:8px;justify-content:center;margin-top:16px}.welcome.svelte-eykba5.svelte-eykba5{padding:48px 24px;text-align:center}.welcome.svelte-eykba5 h2.svelte-eykba5{font-size:32px;font-weight:300;color:#8888a4;margin-bottom:16px}.welcome.svelte-eykba5 p.svelte-eykba5{color:#666;font-size:14px}.error-text.svelte-eykba5.svelte-eykba5{color:#f88}.modal-overlay.svelte-eykba5.svelte-eykba5{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-eykba5.svelte-eykba5{background:#1a1a28;border:1px solid #2a2a3c;border-radius:12px;padding:24px;width:400px;max-width:90vw}.modal.svelte-eykba5 h3.svelte-eykba5{font-size:18px;margin-bottom:16px}.form-group.svelte-eykba5.svelte-eykba5{margin-bottom:12px}.form-group.svelte-eykba5 label.svelte-eykba5{display:block}.form-group.svelte-eykba5 .label-text.svelte-eykba5,.form-group.svelte-eykba5 .form-label.svelte-eykba5{display:block;font-size:12px;color:#666;margin-bottom:4px}.form-group.svelte-eykba5 input.svelte-eykba5,.form-group.svelte-eykba5 select.svelte-eykba5{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-eykba5 select.svelte-eykba5{-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-eykba5 input.svelte-eykba5:focus,.form-group.svelte-eykba5 select.svelte-eykba5:focus{outline:none;border-color:#6366f1}.modal-actions.svelte-eykba5.svelte-eykba5{display:flex;gap:8px;justify-content:flex-end;margin-top:16px}.btn.svelte-eykba5.svelte-eykba5{padding:8px 16px;border:1px solid #2a2a3c;background:#1a1a28;color:#ccc;border-radius:6px;cursor:pointer;font-size:13px;font-family:inherit}.btn.svelte-eykba5.svelte-eykba5:hover{background:#223}.btn-primary.svelte-eykba5.svelte-eykba5{background:#6366f1;border-color:#6366f1;color:#fff}.btn-primary.svelte-eykba5.svelte-eykba5:hover{background:#4f46e5}.btn.svelte-eykba5.svelte-eykba5:disabled{opacity:.4;cursor:not-allowed}.btn-sm.svelte-eykba5.svelte-eykba5{padding:4px 10px;font-size:12px}.btn-danger.svelte-eykba5.svelte-eykba5{color:#ff6b6b;border-color:#4a2222}.btn-danger.svelte-eykba5.svelte-eykba5:hover{background:#3a2222}.files-tab.svelte-eykba5.svelte-eykba5{padding:20px}.files-tab.svelte-eykba5 .tab-toolbar.svelte-eykba5{display:flex;gap:8px;align-items:center;margin-bottom:16px}.file-list.svelte-eykba5.svelte-eykba5{display:flex;flex-direction:column}.back-btn.svelte-eykba5.svelte-eykba5{margin-bottom:4px;display:inline-flex;align-items:center;gap:4px}.import-summary.svelte-eykba5.svelte-eykba5{margin-bottom:16px}.summary-row.svelte-eykba5.svelte-eykba5{display:flex;justify-content:space-between;padding:6px 0;font-size:14px;border-bottom:1px solid #2a2a3c}.summary-warn.svelte-eykba5.svelte-eykba5{margin-top:8px;padding:8px 12px;background:#3a2a22;border-radius:6px;color:#fa6;font-size:13px}.rename-error.svelte-eykba5.svelte-eykba5{color:#ff6b6b;font-size:12px;margin-top:4px}.template-cards.svelte-eykba5.svelte-eykba5{display:flex;flex-direction:column;gap:6px;margin-bottom:8px}.template-card.svelte-eykba5.svelte-eykba5{display:flex;align-items:center;gap:12px;padding:10px 14px;border:1px solid #2a2a3c;background:#13131f;color:#ccc;border-radius:8px;cursor:pointer;font-size:13px;font-family:inherit;width:100%;text-align:left}.template-card.svelte-eykba5.svelte-eykba5:hover{background:#1e1e30;border-color:#3a3a5c}.template-card.selected.svelte-eykba5.svelte-eykba5{background:#2a2a50;border-color:#6366f1;color:#e4e4ef}.template-card-text.svelte-eykba5.svelte-eykba5{display:flex;flex-direction:column;gap:2px;min-width:0}.template-card-title.svelte-eykba5.svelte-eykba5{font-weight:500}.template-card-desc.svelte-eykba5.svelte-eykba5{font-size:11px;color:#888}.today-dashboard.svelte-eykba5.svelte-eykba5{padding:24px;overflow-y:auto;flex:1}.today-header.svelte-eykba5.svelte-eykba5{display:flex;align-items:baseline;gap:12px;margin-bottom:16px}.today-header.svelte-eykba5 h2.svelte-eykba5{font-size:24px}.today-date.svelte-eykba5.svelte-eykba5{font-size:13px;color:#666}.today-summary.svelte-eykba5.svelte-eykba5{display:flex;gap:8px;margin-bottom:20px;flex-wrap:wrap}.summary-chip.svelte-eykba5.svelte-eykba5{font-size:12px;color:#b0b0c0;background:#1a1a28;border:1px solid #2a2a3c;padding:4px 12px;border-radius:16px}.today-case.svelte-eykba5.svelte-eykba5{background:#1a1a28;border:1px solid #2a2a3c;border-radius:8px;margin-bottom:12px;overflow:hidden}.today-case-header.svelte-eykba5.svelte-eykba5{padding:12px 16px;display:flex;align-items:center;gap:8px;border-bottom:1px solid #2a2a3c;cursor:pointer}.today-case-header.svelte-eykba5.svelte-eykba5:hover{background:#1e1e30}.today-case-title.svelte-eykba5.svelte-eykba5{font-weight:500}.today-case-type.svelte-eykba5.svelte-eykba5{font-size:11px;color:#888;background:#223;padding:2px 8px;border-radius:10px}.today-case-count.svelte-eykba5.svelte-eykba5{font-size:11px;color:#6366f1;margin-left:4px}.today-case-time.svelte-eykba5.svelte-eykba5{font-size:11px;color:#555;margin-left:auto}.today-events.svelte-eykba5.svelte-eykba5{padding:8px 16px}.today-event.svelte-eykba5.svelte-eykba5{display:flex;align-items:center;gap:8px;padding:4px 0;font-size:13px;color:#b0b0c0;cursor:pointer}.today-event.svelte-eykba5.svelte-eykba5:hover{color:#e4e4ef}.today-event-icon.svelte-eykba5.svelte-eykba5{width:18px;text-align:center;color:#6366f1;font-size:13px}.today-event-title.svelte-eykba5.svelte-eykba5{flex:1}.today-event-type.svelte-eykba5.svelte-eykba5{font-size:11px;color:#666}.today-event-time.svelte-eykba5.svelte-eykba5{font-size:11px;color:#555;margin-left:auto}.today-events-empty.svelte-eykba5.svelte-eykba5{padding:8px 16px;font-size:13px;color:#666;font-style:italic}.today-empty.svelte-eykba5.svelte-eykba5{padding:48px 24px;text-align:center}.today-empty.svelte-eykba5 p.svelte-eykba5{color:#666;font-size:14px;margin:0}.today-empty.svelte-eykba5 .hint.svelte-eykba5{font-size:12px;color:#555;margin-top:8px}.today-timeline.svelte-eykba5.svelte-eykba5{margin-top:24px}.today-timeline.svelte-eykba5 h3.svelte-eykba5{font-size:13px;color:#666;text-transform:uppercase;margin-bottom:12px}.timeline-event.svelte-eykba5.svelte-eykba5{display:flex;align-items:center;gap:10px;font-size:13px;color:#b0b0c0;border-left:2px solid #2a2a3c;padding:6px 0 6px 16px;margin-left:4px;cursor:pointer}.timeline-event.svelte-eykba5.svelte-eykba5:hover{color:#e4e4ef}.timeline-dot.svelte-eykba5.svelte-eykba5{width:6px;height:6px;border-radius:50%;background:#6366f1;margin-left:-19px;flex-shrink:0}.timeline-title.svelte-eykba5.svelte-eykba5{flex:1}.timeline-type.svelte-eykba5.svelte-eykba5{font-size:11px;color:#666}.timeline-time.svelte-eykba5.svelte-eykba5{font-size:11px;color:#555}.activity-tab.svelte-eykba5.svelte-eykba5{padding:24px}.activity-events.svelte-eykba5.svelte-eykba5{display:flex;flex-direction:column;gap:2px}.activity-event.svelte-eykba5.svelte-eykba5{display:flex;align-items:center;gap:8px;padding:6px 8px;border-radius:6px;font-size:13px;color:#b0b0c0;cursor:pointer}.activity-event.svelte-eykba5.svelte-eykba5:hover{background:#1a1a28;color:#e4e4ef}.activity-event-icon.svelte-eykba5.svelte-eykba5{width:18px;text-align:center;color:#6366f1;font-size:13px;flex-shrink:0}.activity-event-title.svelte-eykba5.svelte-eykba5{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.activity-event-type.svelte-eykba5.svelte-eykba5{font-size:11px;color:#666;flex-shrink:0}.activity-event-target.svelte-eykba5.svelte-eykba5{font-size:10px;color:#555;background:#1e1e2e;padding:1px 6px;border-radius:8px;flex-shrink:0}.activity-event-time.svelte-eykba5.svelte-eykba5{font-size:11px;color:#555;margin-left:8px;flex-shrink:0}.activity-feed.svelte-eykba5.svelte-eykba5{padding:24px;overflow-y:auto;flex:1}.activity-feed-header.svelte-eykba5.svelte-eykba5{margin-bottom:20px}.activity-feed-header.svelte-eykba5 h2.svelte-eykba5{font-size:24px}.activity-feed-events.svelte-eykba5.svelte-eykba5{display:flex;flex-direction:column;gap:2px}.activity-feed-event.svelte-eykba5.svelte-eykba5{display:flex;align-items:flex-start;gap:10px;padding:8px 12px;border-radius:8px;cursor:pointer}.activity-feed-event.svelte-eykba5.svelte-eykba5:hover{background:#1a1a28;color:#e4e4ef}.activity-feed-icon.svelte-eykba5.svelte-eykba5{width:20px;text-align:center;color:#6366f1;font-size:14px;flex-shrink:0;margin-top:1px}.activity-feed-body.svelte-eykba5.svelte-eykba5{flex:1;min-width:0}.activity-feed-title.svelte-eykba5.svelte-eykba5{font-size:14px;color:#e4e4ef}.activity-feed-meta.svelte-eykba5.svelte-eykba5{display:flex;align-items:center;gap:8px;margin-top:2px}.activity-feed-type.svelte-eykba5.svelte-eykba5{font-size:11px;color:#666}.activity-feed-target.svelte-eykba5.svelte-eykba5{font-size:10px;color:#555;background:#1e1e2e;padding:1px 6px;border-radius:8px}.activity-feed-time.svelte-eykba5.svelte-eykba5{font-size:11px;color:#555}.sidebar-sync-btn.svelte-eykba5.svelte-eykba5{background:#1e1e38;border:1px solid #6366f1;border-radius:8px;padding:8px 12px;cursor:pointer;width:100%;display:flex;align-items:center;gap:8px;color:#c0c0f0;font-family:inherit;font-size:13px}.sidebar-sync-btn.svelte-eykba5.svelte-eykba5:hover{background:#2a2a50;color:#e4e4ef;border-color:#818cf8}.sidebar-sync-label.svelte-eykba5.svelte-eykba5{flex:1;text-align:left}.sync-dot.svelte-eykba5.svelte-eykba5{width:8px;height:8px;border-radius:50%;background:#4a4a4a;flex-shrink:0}.sync-dot.active.svelte-eykba5.svelte-eykba5{background:#4ade80;box-shadow:0 0 6px #4ade8080}.modal-sync.svelte-eykba5.svelte-eykba5{width:460px}.sync-status.svelte-eykba5.svelte-eykba5{background:#13131f;border-radius:8px;padding:12px;margin-bottom:16px}.sync-row.svelte-eykba5.svelte-eykba5{display:flex;justify-content:space-between;padding:4px 0;font-size:13px}.sync-label.svelte-eykba5.svelte-eykba5{color:#666}.sync-value.svelte-eykba5.svelte-eykba5{color:#e4e4ef}.sync-value.mono.svelte-eykba5.svelte-eykba5{font-family:SF Mono,Fira Code,monospace;font-size:12px}.sync-result.svelte-eykba5.svelte-eykba5{font-size:12px;color:#6366f1;padding:4px 0}.sync-connected-actions.svelte-eykba5.svelte-eykba5{display:flex;gap:8px;margin-bottom:16px} diff --git a/cmd/verstak-gui/frontend-dist/assets/main-C6ZVnS_E.js b/cmd/verstak-gui/frontend-dist/assets/main-C6ZVnS_E.js new file mode 100644 index 0000000..eb71bd3 --- /dev/null +++ b/cmd/verstak-gui/frontend-dist/assets/main-C6ZVnS_E.js @@ -0,0 +1,3 @@ +var Fs=Object.defineProperty;var Es=(l,e,t)=>e in l?Fs(l,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):l[e]=t;var Zt=(l,e,t)=>Es(l,typeof e!="symbol"?e+"":e,t);(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const o of document.querySelectorAll('link[rel="modulepreload"]'))n(o);new MutationObserver(o=>{for(const s of o)if(s.type==="childList")for(const a of s.addedNodes)a.tagName==="LINK"&&a.rel==="modulepreload"&&n(a)}).observe(document,{childList:!0,subtree:!0});function t(o){const s={};return o.integrity&&(s.integrity=o.integrity),o.referrerPolicy&&(s.referrerPolicy=o.referrerPolicy),o.crossOrigin==="use-credentials"?s.credentials="include":o.crossOrigin==="anonymous"?s.credentials="omit":s.credentials="same-origin",s}function n(o){if(o.ep)return;o.ep=!0;const s=t(o);fetch(o.href,s)}})();function te(){}function pi(l){return l()}function Fl(){return Object.create(null)}function _e(l){l.forEach(pi)}function jt(l){return typeof l=="function"}function ut(l,e){return l!=l?e==e:l!==e||l&&typeof l=="object"||typeof l=="function"}let Pt;function zt(l,e){return l===e?!0:(Pt||(Pt=document.createElement("a")),Pt.href=e,l===Pt.href)}function As(l){return Object.keys(l).length===0}const Ls=typeof window<"u"?window:typeof globalThis<"u"?globalThis:global;function r(l,e){l.appendChild(e)}function w(l,e,t){l.insertBefore(e,t||null)}function h(l){l.parentNode&&l.parentNode.removeChild(l)}function Ge(l,e){for(let t=0;tl.removeEventListener(e,t,n)}function tl(l){return function(e){return e.preventDefault(),l.call(this,e)}}function $e(l){return function(e){return e.stopPropagation(),l.call(this,e)}}function vt(l){return function(e){e.target===this&&l.call(this,e)}}function i(l,e,t){t==null?l.removeAttribute(e):l.getAttribute(e)!==t&&l.setAttribute(e,t)}function Bt(l){return l===""?null:+l}function js(l){return Array.from(l.childNodes)}function G(l,e){e=""+e,l.data!==e&&(l.data=e)}function Le(l,e){l.value=e??""}function He(l,e,t,n){t==null?l.style.removeProperty(e):l.style.setProperty(e,t,"")}function El(l,e,t){for(let n=0;n{const o=l.$$.callbacks[e];if(o){const s=Os(e,t,{cancelable:n});return o.slice().forEach(a=>{a.call(l,s)}),!s.defaultPrevented}return!0}}function _i(l,e){const t=l.$$.callbacks[e.type];t&&t.slice().forEach(n=>n.call(this,e))}const gt=[],Al=[];let wt=[];const Ll=[],zs=Promise.resolve();let xt=!1;function Bs(){xt||(xt=!0,zs.then(vi))}function Rt(l){wt.push(l)}const Qt=new Set;let ht=0;function vi(){if(ht!==0)return;const l=Lt;do{try{for(;htl.indexOf(n)===-1?e.push(n):t.push(n)),t.forEach(n=>n()),wt=e}const Ot=new Set;let _t;function Ye(){_t={r:0,c:[],p:_t}}function Xe(){_t.r||_e(_t.c),_t=_t.p}function oe(l,e){l&&l.i&&(Ot.delete(l),l.i(e))}function re(l,e,t,n){if(l&&l.o){if(Ot.has(l))return;Ot.add(l),_t.c.push(()=>{Ot.delete(l),n&&(t&&l.d(1),n())}),l.o(e)}else n&&n()}function de(l){return(l==null?void 0:l.length)!==void 0?l:Array.from(l)}function ki(l,e){re(l,1,1,()=>{e.delete(l.key)})}function bi(l,e,t,n,o,s,a,c,f,d,_,b){let k=l.length,y=s.length,v=k;const C={};for(;v--;)C[l[v].key]=v;const T=[],S=new Map,I=new Map,D=[];for(v=y;v--;){const M=b(o,s,v),j=t(M);let H=a.get(j);H?D.push(()=>H.p(M,e)):(H=d(j,M),H.c()),S.set(j,T[v]=H),j in C&&I.set(j,Math.abs(v-C[j]))}const N=new Set,z=new Set;function B(M){oe(M,1),M.m(c,_),a.set(M.key,M),_=M.first,y--}for(;k&&y;){const M=T[y-1],j=l[k-1],H=M.key,R=j.key;M===j?(_=M.first,k--,y--):S.has(R)?!a.has(H)||N.has(H)?B(M):z.has(R)?k--:I.get(H)>I.get(R)?(z.add(H),B(M)):(N.add(R),k--):(f(j,a),k--)}for(;k--;){const M=l[k];S.has(M.key)||f(M,a)}for(;y;)B(T[y-1]);return _e(D),T}function et(l){l&&l.c()}function Qe(l,e,t){const{fragment:n,after_update:o}=l.$$;n&&n.m(e,t),Rt(()=>{const s=l.$$.on_mount.map(pi).filter(jt);l.$$.on_destroy?l.$$.on_destroy.push(...s):_e(s),l.$$.on_mount=[]}),o.forEach(Rt)}function xe(l,e){const t=l.$$;t.fragment!==null&&(Hs(t.after_update),_e(t.on_destroy),t.fragment&&t.fragment.d(e),t.on_destroy=t.fragment=null,t.ctx=[])}function Vs(l,e){l.$$.dirty[0]===-1&&(gt.push(l),Bs(),l.$$.dirty.fill(0)),l.$$.dirty[e/31|0]|=1<{const v=y.length?y[0]:k;return d.ctx&&o(d.ctx[b],d.ctx[b]=v)&&(!d.skip_bound&&d.bound[b]&&d.bound[b](v),_&&Vs(l,b)),k}):[],d.update(),_=!0,_e(d.before_update),d.fragment=n?n(d.ctx):!1,e.target){if(e.hydrate){const b=js(e.target);d.fragment&&d.fragment.l(b),b.forEach(h)}else d.fragment&&d.fragment.c();e.intro&&oe(l.$$.fragment),Qe(l,e.target,e.anchor),vi()}At(f)}class pt{constructor(){Zt(this,"$$");Zt(this,"$$set")}$destroy(){xe(this,1),this.$destroy=te}$on(e,t){if(!jt(t))return te;const n=this.$$.callbacks[e]||(this.$$.callbacks[e]=[]);return n.push(t),()=>{const o=n.indexOf(t);o!==-1&&n.splice(o,1)}}$set(e){this.$$set&&!As(e)&&(this.$$.skip_bound=!0,this.$$set(e),this.$$.skip_bound=!1)}}const Us="4";typeof window<"u"&&(window.__svelte||(window.__svelte={v:new Set})).v.add(Us);function Ws(l){let e,t;return{c(){e=L("path"),t=L("polyline"),i(e,"d","M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"),i(t,"points","14 2 14 8 20 8")},m(n,o){w(n,e,o),w(n,t,o)},d(n){n&&(h(e),h(t))}}}function Ks(l){let e,t,n,o,s;return{c(){e=L("path"),t=L("polyline"),n=L("line"),o=L("line"),s=L("polyline"),i(e,"d","M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"),i(t,"points","14 2 14 8 20 8"),i(n,"x1","16"),i(n,"y1","13"),i(n,"x2","8"),i(n,"y2","13"),i(o,"x1","16"),i(o,"y1","17"),i(o,"x2","8"),i(o,"y2","17"),i(s,"points","10 9 9 9 8 9")},m(a,c){w(a,e,c),w(a,t,c),w(a,n,c),w(a,o,c),w(a,s,c)},d(a){a&&(h(e),h(t),h(n),h(o),h(s))}}}function Gs(l){let e,t;return{c(){e=L("polyline"),t=L("polyline"),i(e,"points","16 18 22 12 16 6"),i(t,"points","8 6 2 12 8 18")},m(n,o){w(n,e,o),w(n,t,o)},d(n){n&&(h(e),h(t))}}}function qs(l){let e,t,n,o;return{c(){e=L("path"),t=L("polyline"),n=L("line"),o=L("rect"),i(e,"d","M21 8v13a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8"),i(t,"points","7 3 12 8 17 3"),i(n,"x1","3"),i(n,"y1","8"),i(n,"x2","21"),i(n,"y2","8"),i(o,"x","10"),i(o,"y","12"),i(o,"width","4"),i(o,"height","4"),i(o,"rx","1")},m(s,a){w(s,e,a),w(s,t,a),w(s,n,a),w(s,o,a)},d(s){s&&(h(e),h(t),h(n),h(o))}}}function Ys(l){let e,t,n,o,s;return{c(){e=L("path"),t=L("polyline"),n=L("line"),o=L("line"),s=L("line"),i(e,"d","M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"),i(t,"points","14 2 14 8 20 8"),i(n,"x1","9"),i(n,"y1","12"),i(n,"x2","15"),i(n,"y2","12"),i(o,"x1","9"),i(o,"y1","15"),i(o,"x2","13"),i(o,"y2","15"),i(s,"x1","12"),i(s,"y1","15"),i(s,"x2","12"),i(s,"y2","18")},m(a,c){w(a,e,c),w(a,t,c),w(a,n,c),w(a,o,c),w(a,s,c)},d(a){a&&(h(e),h(t),h(n),h(o),h(s))}}}function Xs(l){let e,t,n,o,s,a;return{c(){e=L("path"),t=L("polyline"),n=L("line"),o=L("line"),s=L("line"),a=L("line"),i(e,"d","M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"),i(t,"points","14 2 14 8 20 8"),i(n,"x1","8"),i(n,"y1","12"),i(n,"x2","16"),i(n,"y2","12"),i(o,"x1","8"),i(o,"y1","16"),i(o,"x2","16"),i(o,"y2","16"),i(s,"x1","8"),i(s,"y1","14"),i(s,"x2","12"),i(s,"y2","14"),i(a,"x1","12"),i(a,"y1","12"),i(a,"x2","12"),i(a,"y2","18")},m(c,f){w(c,e,f),w(c,t,f),w(c,n,f),w(c,o,f),w(c,s,f),w(c,a,f)},d(c){c&&(h(e),h(t),h(n),h(o),h(s),h(a))}}}function Js(l){let e,t,n,o;return{c(){e=L("path"),t=L("polyline"),n=L("line"),o=L("line"),i(e,"d","M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"),i(t,"points","14 2 14 8 20 8"),i(n,"x1","16"),i(n,"y1","13"),i(n,"x2","8"),i(n,"y2","13"),i(o,"x1","16"),i(o,"y1","17"),i(o,"x2","8"),i(o,"y2","17")},m(s,a){w(s,e,a),w(s,t,a),w(s,n,a),w(s,o,a)},d(s){s&&(h(e),h(t),h(n),h(o))}}}function Zs(l){let e,t,n,o,s;return{c(){e=L("path"),t=L("polyline"),n=L("line"),o=L("line"),s=L("line"),i(e,"d","M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"),i(t,"points","14 2 14 8 20 8"),i(n,"x1","8"),i(n,"y1","12"),i(n,"x2","16"),i(n,"y2","12"),i(o,"x1","8"),i(o,"y1","16"),i(o,"x2","16"),i(o,"y2","16"),i(s,"x1","8"),i(s,"y1","14"),i(s,"x2","12"),i(s,"y2","14")},m(a,c){w(a,e,c),w(a,t,c),w(a,n,c),w(a,o,c),w(a,s,c)},d(a){a&&(h(e),h(t),h(n),h(o),h(s))}}}function Qs(l){let e,t,n;return{c(){e=L("path"),t=L("circle"),n=L("circle"),i(e,"d","M9 18V5l12-2v13"),i(t,"cx","6"),i(t,"cy","18"),i(t,"r","3"),i(n,"cx","18"),i(n,"cy","16"),i(n,"r","3")},m(o,s){w(o,e,s),w(o,t,s),w(o,n,s)},d(o){o&&(h(e),h(t),h(n))}}}function xs(l){let e,t;return{c(){e=L("rect"),t=L("polyline"),i(e,"x","2"),i(e,"y","4"),i(e,"width","20"),i(e,"height","16"),i(e,"rx","2"),i(t,"points","10 9 16 12 10 15 10 9")},m(n,o){w(n,e,o),w(n,t,o)},d(n){n&&(h(e),h(t))}}}function $s(l){let e,t,n;return{c(){e=L("rect"),t=L("circle"),n=L("polyline"),i(e,"x","3"),i(e,"y","3"),i(e,"width","18"),i(e,"height","18"),i(e,"rx","2"),i(e,"ry","2"),i(t,"cx","8.5"),i(t,"cy","8.5"),i(t,"r","1.5"),i(n,"points","21 15 16 10 5 21")},m(o,s){w(o,e,s),w(o,t,s),w(o,n,s)},d(o){o&&(h(e),h(t),h(n))}}}function ea(l){let e;return{c(){e=L("path"),i(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){w(t,e,n)},d(t){t&&h(e)}}}function ta(l){let e;function t(s,a){return s[0]==="folder"?ea:s[0]==="image"?$s:s[0]==="video"?xs:s[0]==="audio"?Qs:s[0]==="pdf"?Zs:s[0]==="document"?Js:s[0]==="spreadsheet"?Xs:s[0]==="presentation"?Ys:s[0]==="archive"?qs:s[0]==="code"?Gs:s[0]==="text"?Ks:Ws}let n=t(l),o=n(l);return{c(){e=L("svg"),o.c(),i(e,"width",l[1]),i(e,"height",l[1]),i(e,"viewBox","0 0 24 24"),i(e,"fill","none"),i(e,"stroke","currentColor"),i(e,"stroke-width","1.5"),i(e,"stroke-linecap","round"),i(e,"stroke-linejoin","round"),i(e,"xmlns","http://www.w3.org/2000/svg")},m(s,a){w(s,e,a),o.m(e,null)},p(s,[a]){n!==(n=t(s))&&(o.d(1),o=n(s),o&&(o.c(),o.m(e,null))),a&2&&i(e,"width",s[1]),a&2&&i(e,"height",s[1])},i:te,o:te,d(s){s&&h(e),o.d()}}}function la(l,e,t){let{kind:n="generic"}=e,{size:o=20}=e;return l.$$set=s=>{"kind"in s&&t(0,n=s.kind),"size"in s&&t(1,o=s.size)},[n,o]}class yi extends pt{constructor(e){super(),dt(this,e,la,ta,ut,{kind:0,size:1})}}const na={"nav.today":"Сегодня","nav.inbox":"Неразобранное","nav.activity":"Активность","nav.clients":"Клиенты","nav.projects":"Проекты","nav.recipes":"Рецепты","nav.documents":"Документы","nav.archive":"Архив","nav.sections":"Разделы","nav.cases":"Дела","nav.noCases":"Нет дел","nav.sync":"Синхронизация","nav.syncSettings":"Настройки синхронизации","nav.syncNow":"Синхронизировать","nav.selectPrompt":"Выберите раздел или дело","nav.brand":"Верстак","nav.system":"Системное","nav.workspace":"Рабочее пространство","nav.noNodes":"Нет узлов","nav.openFolder":"Открыть папку","nav.createInside":"Создать внутри","nav.createNode":"Создать элемент","nav.moveToRoot":"Переместить в корень","tab.overview":"Обзор","tab.notes":"Заметки","tab.files":"Файлы","tab.actions":"Действия","tab.worklog":"Журнал","tab.activity":"Активность","common.save":"Сохранить","common.cancel":"Отмена","common.delete":"Удалить","common.rename":"Переименовать","common.close":"Закрыть","common.create":"Создать","common.confirm":"Подтверждение","common.back":"← Назад","common.loading":"Загрузка...","common.error":"Ошибка:","common.yes":"Да","common.ok":"OK","common.copy":"Копировать","common.cut":"Вырезать","common.paste":"Вставить","common.duplicate":"Дублировать","common.run":"Запустить","common.test":"Test","common.testAgain":"Проверить","common.connect":"Подключиться","common.disconnect":"Отключиться","common.settings":"Настройки","common.name":"Название","common.type":"Тип","common.section":"Раздел","common.created":"Создано","common.empty":"Нет","common.newName":"Новое имя","welcome.title":"Верстак","welcome.selectSection":"Выберите раздел в боковой панели.","welcome.createCase":"Или создайте новое дело кнопкой «+».","welcome.addCase":"Добавить дело","event.noteCreated":"Заметка создана","event.noteUpdated":"Заметка изменена","event.fileAdded":"Файл добавлен","event.fileDeleted":"Файл удалён","event.fileRenamed":"Файл переименован","event.fileCopied":"Файл скопирован","event.fileMoved":"Файл перемещён","event.folderAdded":"Папка добавлена","event.folderDeleted":"Папка удалена","event.folderRenamed":"Папка переименована","event.caseCreated":"Дело создано","event.caseUpdated":"Дело изменено","kind.project":"Проект","kind.client":"Клиент","kind.document":"Документ","kind.recipe":"Рецепт","kind.folder":"Папка","kind.note":"Заметка","kind.file":"Файл","kind.archive":"Архив","kind.case":"Дело","action.openUrl":"Открыть URL","action.openFile":"Открыть файл","action.openFolder":"Открыть папку","action.runCommand":"Запустить команду","action.runScript":"Запустить скрипт","action.openTerminal":"Открыть терминал","action.launchApp":"Запустить приложение","action.addAction":"+ Добавить действие","action.newAction":"Новое действие","action.noActions":"Действий пока нет","action.run":"Запустить","action.dataUrl":"URL","action.dataPath":"Путь","action.dataCommand":"Команда","action.urlPlaceholder":"https://example.com","action.pathPlaceholder":"/path/to/file","action.commandPlaceholder":"команда","action.namePlaceholder":"Например: Открыть сайт","note.add":"+ Добавить заметку","note.new":"Новая заметка","note.title":"Название заметки","note.noNotes":"Нет заметок","note.createFirst":"Создайте первую заметку для этого дела.","note.placeholder":"Начните писать...","note.unsavedTitle":"Несохранённые изменения","note.unsavedMessage":"Закрыть редактор? Все несохранённые изменения будут потеряны.","note.unsavedClose":"Закрыть","file.addFile":"+ Добавить файл","file.addFolder":"+ Добавить папку","file.newFile":"+ Новый файл","file.addFileSimple":"Добавить файл","file.addFolderSimple":"Добавить папку","file.noFiles":"В этой папке пока нет файлов","file.noFilesCase":"В этом проекте пока нет файлов","file.hint":"Добавьте файл или папку, чтобы сохранить материалы проекта.","file.root":"Файлы","file.preview":"Предпросмотр","file.openExternal":"Открыть во внешней программе","file.openFolder":"Открыть папку","file.showInExplorer":"Показать в проводнике","file.more":"Ещё","file.delete":"Удалить","file.ariaFolder":"Папка","file.ariaFile":"Файл","file.scanning":"Сканирование...","file.pickSingle":"Выберите файл","file.pickMultiple":"Выберите файлы","file.pickDirectory":"Выберите папку","file.importTitle":"Добавить в","file.importFiles":"Файлов:","file.importFolders":"Папок:","file.importSize":"Размер:","file.importCopy":"Скопировать","file.importLink":"Привязать","file.selectCaseFirst":"Сначала выберите дело для добавления файлов","worklog.title":"Журнал","worklog.whatDone":"Что сделано","worklog.minutes":"Мин","worklog.min":"мин","worklog.log":"Записать","worklog.empty":"Записей работы пока нет","worklog.suggestions":"Предложения на сегодня","worklog.apply":"Применить","sync.title":"Синхронизация","sync.settings":"Настройки синхронизации","sync.status":"Статус","sync.server":"Сервер","sync.device":"Устройство","sync.deviceId":"ID устройства","sync.unpushed":"Неотправлено","sync.lastSync":"Последняя синх.","sync.revoked":"Отозвано","sync.connected":"Подключено","sync.notConnected":"Не подключено","sync.disabled":"Отключена","sync.serverUrl":"URL сервера","sync.serverUrlPlaceholder":"https://example.com:47732","sync.username":"Логин","sync.usernamePlaceholder":"username","sync.password":"Пароль","sync.passwordPlaceholder":"password","sync.autoSync":"Автосинхронизация (мин, 0 = отключено)","sync.saveInterval":"Сохранить интервал","sync.syncNow":"Синхронизировать","sync.disconnect":"Отключиться","sync.connect":"Подключиться","sync.test":"Проверить","sync.settingsSaved":"интервал сохранён","today.title":"Сегодня","today.changedCases":"Изменён сегодня","today.timeline":"Лента за сегодня","today.empty":"Сегодня пока тихо","today.emptyHint":"Здесь появятся дела, заметки, файлы и действия, с которыми вы работали сегодня.","today.plural.case_one":"дело","today.plural.case_few":"дела","today.plural.case_many":"дел","today.plural.note_one":"заметка","today.plural.note_few":"заметки","today.plural.note_many":"заметок","today.plural.file_one":"файл","today.plural.file_few":"файла","today.plural.file_many":"файлов","today.plural.event_one":"событие","today.plural.event_few":"события","today.plural.event_many":"событий","activity.title":"Активность","activity.empty":"Активность пока не зафиксирована","activity.perCaseEmpty":"Активность пока не зафиксирована","overview.type":"Тип","overview.section":"Раздел","overview.created":"Создано","overview.newNote":"Новая заметка","overview.addFile":"Добавить файл","overview.addAction":"Добавить действие","overview.logTime":"Записать время","overview.recentNotes":"Последние заметки","overview.recentEntries":"Последние записи","rename.title":"Переименовать","rename.emptyError":"Имя не может быть пустым","rename.invalidError":"Недопустимое имя","delete.confirmTitle":"Удаление","delete.confirmMessage":"Удалить","delete.folder":"папку","delete.file":"файл","template.optionNone":"Пустое дело","template.optional":"Шаблон (опционально)","template.none.desc":"Без шаблона, простой узел-контейнер","template.folder":"Папка","template.folder.desc":"Папка для группировки элементов внутри рабочего пространства","template.project":"Проект","template.project.desc":"Отдельный проект или задача с файлами, заметками и журналом","template.client":"Клиент","template.client.desc":"Организация или человек, для которых ведутся работы","template.document":"Документ","template.document.desc":"Документ с описанием, заметками и файлами","template.recipe":"Рецепт","template.recipe.desc":"Повторяемая процедура или инструкция","template.note":"Заметка","template.file":"Файл","template.select":"Выберите тип","mime.jpeg":"Изображение JPEG","mime.png":"Изображение PNG","mime.gif":"Изображение GIF","mime.webp":"Изображение WebP","mime.svg":"Изображение SVG","mime.bmp":"Изображение BMP","mime.tiff":"Изображение TIFF","mime.avif":"Изображение AVIF","mime.pdf":"PDF документ","mime.word":"Документ Word","mime.excel":"Таблица Excel","mime.ppt":"Презентация PowerPoint","mime.zip":"ZIP архив","mime.gzip":"GZIP архив","mime.tar":"TAR архив","mime.sevenz":"7z архив","mime.rar":"RAR архив","mime.text":"Текстовый файл","mime.html":"HTML файл","mime.css":"CSS файл","mime.js":"JavaScript файл","mime.json":"JSON файл","mime.xml":"XML файл","mime.yaml":"YAML файл","mime.binary":"Бинарный файл","mime.executable":"Исполняемый файл","mime.folder":"Папка","mime.unknown":"Неизвестно","mime.file":"Файл","error.nameEmpty":"Имя не может быть пустым","error.nameInvalid":"Недопустимое имя","error.selectCaseFirst":"Сначала выберите дело","common.open":"Открыть","delete.files":"файлов ({count})","file.namePrompt":"Введите имя файла:","file.pdfUnavailable":"Предпросмотр PDF недоступен.","file.previewUnavailable":"Предпросмотр недоступен для этого типа файлов.","case.new":"Новое дело","case.namePlaceholder":"Название дела","error.generic":"Произошла ошибка","error.invalidCredentials":"Неверный логин или пароль","error.accountBlocked":"Аккаунт заблокирован","error.emailNotConfirmed":"Email не подтверждён","error.tokenInvalid":"Неверный или просроченный токен","error.tokenExpired":"Срок действия токена истёк"},ia={"nav.today":"Today","nav.inbox":"Inbox","nav.activity":"Activity","nav.clients":"Clients","nav.projects":"Projects","nav.recipes":"Recipes","nav.documents":"Documents","nav.archive":"Archive","nav.sections":"Sections","nav.cases":"Cases","nav.noCases":"No cases","nav.system":"System","nav.workspace":"Workspace","nav.noNodes":"No nodes","nav.openFolder":"Open folder","nav.createInside":"Create inside","nav.createNode":"Create element","nav.moveToRoot":"Move to root","nav.selectPrompt":"Select a section or case","nav.brand":"Verstak","tab.overview":"Overview","tab.notes":"Notes","tab.files":"Files","tab.actions":"Actions","tab.worklog":"Work Log","tab.activity":"Activity","common.save":"Save","common.cancel":"Cancel","common.delete":"Delete","common.rename":"Rename","common.close":"Close","common.create":"Create","common.confirm":"Confirm","common.back":"← Back","common.loading":"Loading...","common.error":"Error:","common.yes":"Yes","common.ok":"OK","common.run":"Run","common.name":"Name","common.settings":"Settings","welcome.title":"Verstak","welcome.selectSection":"Select a section in the sidebar.","welcome.addCase":"Add case","event.noteCreated":"Note created","event.noteUpdated":"Note updated","event.fileAdded":"File added","event.fileDeleted":"File deleted","event.fileRenamed":"File renamed","event.fileCopied":"File copied","event.fileMoved":"File moved","event.caseCreated":"Case created","action.openUrl":"Open URL","action.openFile":"Open file","action.openFolder":"Open folder","action.runCommand":"Run command","action.runScript":"Run script","action.openTerminal":"Open terminal","action.launchApp":"Launch app","note.add":"+ Add note","note.noNotes":"No notes","note.title":"Note title","note.placeholder":"Start writing...","file.addFile":"+ Add file","file.addFolder":"+ Add folder","file.preview":"Preview","file.openExternal":"Open in external program","file.openFolder":"Open folder","file.showInExplorer":"Show in explorer","file.delete":"Delete","file.pickSingle":"Select file","file.pickDirectory":"Select folder","sync.title":"Sync","sync.settings":"Sync settings","sync.status":"Status","sync.server":"Server","sync.device":"Device","sync.connected":"Connected","sync.notConnected":"Not connected","sync.disabled":"Disabled","kind.project":"Project","kind.client":"Client","kind.document":"Document","kind.recipe":"Recipe","kind.folder":"Folder","kind.note":"Note","kind.file":"File","kind.archive":"Archive","kind.case":"Case","template.optionNone":"Empty case","template.optional":"Template (optional)","template.none.desc":"No template, simple container node","template.folder":"Folder","template.folder.desc":"A folder to group items inside a workspace","template.project":"Project","template.project.desc":"A distinct project or task with files, notes and work log","template.client":"Client","template.client.desc":"An organization or person for whom work is performed","template.document":"Document","template.document.desc":"A document with description, notes and files","template.recipe":"Recipe","template.recipe.desc":"A repeatable procedure or instruction","template.note":"Note","template.file":"File","template.select":"Select type","case.new":"New case","case.namePlaceholder":"Case name","error.generic":"An error occurred","error.invalidCredentials":"Invalid username or password","worklog.suggestions":"Suggestions for today","worklog.apply":"Apply"},jl={ru:na,en:ia};let Pl="ru";function m(l,e){var o;const t=jl[Pl];let n=t==null?void 0:t[l];if(n==null&&Pl!=="ru"&&(n=(o=jl.ru)==null?void 0:o[l]),n==null&&(n=l),e!=null)for(const[s,a]of Object.entries(e))n=n.replace(`{${s}}`,String(a));return n}function Ht(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 $t={"image/jpeg":m("mime.jpeg"),"image/png":m("mime.png"),"image/gif":m("mime.gif"),"image/webp":m("mime.webp"),"image/svg+xml":m("mime.svg"),"image/bmp":m("mime.bmp"),"image/tiff":m("mime.tiff"),"image/avif":m("mime.avif"),"application/pdf":m("mime.pdf"),"application/msword":m("mime.word"),"application/vnd.openxmlformats-officedocument.wordprocessingml.document":m("mime.word"),"application/vnd.ms-excel":m("mime.excel"),"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":m("mime.excel"),"application/vnd.ms-powerpoint":m("mime.ppt"),"application/vnd.openxmlformats-officedocument.presentationml.presentation":m("mime.ppt"),"application/zip":m("mime.zip"),"application/gzip":m("mime.gzip"),"application/x-tar":m("mime.tar"),"application/x-7z-compressed":m("mime.sevenz"),"application/x-rar-compressed":m("mime.rar"),"text/plain":m("mime.text"),"text/html":m("mime.html"),"text/css":m("mime.css"),"text/javascript":m("mime.js"),"application/json":m("mime.json"),"application/xml":m("mime.xml"),"application/x-yaml":m("mime.yaml"),"application/octet-stream":m("mime.binary"),"application/x-msdos-program":m("mime.executable"),"inode/directory":m("mime.folder")};function Ol(l){return l?$t[l]||l:m("mime.unknown")}function oa(l){if(l.type==="folder")return m("mime.folder");const e=(l.mime||"").toLowerCase();if($t[e])return $t[e];const n=(l.name||"").toLowerCase().split(".").pop();return n?n.toUpperCase():m("mime.file")}function hi(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"}const sa=["image/jpeg","image/png","image/gif","image/webp","image/bmp","image/tiff","image/avif","image/svg+xml"],aa=["text/plain","text/html","text/css","text/javascript","application/json","application/xml","application/x-yaml","text/x-shellscript"],ra=["txt","log","conf","ini","yaml","yml","json","xml","csv","sh","py","js","ts","css","html","md","markdown","cfg"],ca=["jpg","jpeg","png","gif","webp","bmp","tiff","tif","avif","svg"];function gi(l){const e=(l.mime||"").toLowerCase(),n=(l.name||"").toLowerCase().split(".").pop();return sa.includes(e)||ca.includes(n)}function wi(l){const e=(l.mime||"").toLowerCase(),n=(l.name||"").toLowerCase().split(".").pop();return aa.includes(e)||ra.includes(n)&&n!=="md"&&n!=="markdown"}function Ci(l){return(l.mime||"").toLowerCase().includes("pdf")}function Si(l){const e=(l.name||"").toLowerCase();return e.endsWith(".md")||e.endsWith(".markdown")}function fa(l){return gi(l)||Ci(l)}function ua(l){return wi(l)||Si(l)}const{window:da}=Ls;function pa(l){let e,t,n,o=Ht(l[0].size)+"",s;return{c(){e=u("span"),e.textContent="·",t=g(),n=u("span"),s=A(o),i(e,"class","meta-sep svelte-1skuef2")},m(a,c){w(a,e,c),w(a,t,c),w(a,n,c),r(n,s)},p(a,c){c[0]&1&&o!==(o=Ht(a[0].size)+"")&&G(s,o)},d(a){a&&(h(e),h(t),h(n))}}}function ma(l){let e,t,n,o,s;return{c(){e=u("button"),e.innerHTML='',t=g(),n=u("button"),n.innerHTML='',i(e,"class","action-btn svelte-1skuef2"),i(e,"title",m("file.openFolder")),i(e,"aria-label",m("file.openFolder")),i(n,"class","action-btn svelte-1skuef2"),i(n,"title",m("file.showInExplorer")),i(n,"aria-label",m("file.showInExplorer"))},m(a,c){w(a,e,c),w(a,t,c),w(a,n,c),o||(s=[E(e,"click",$e(l[30])),E(n,"click",$e(l[11]))],o=!0)},p:te,d(a){a&&(h(e),h(t),h(n)),o=!1,_e(s)}}}function _a(l){let e,t,n,o,s,a,c;return{c(){e=u("button"),e.innerHTML='',t=g(),n=u("button"),n.innerHTML='',o=g(),s=u("button"),s.innerHTML='',i(e,"class","action-btn svelte-1skuef2"),i(e,"title",m("file.preview")),i(e,"aria-label",m("file.preview")),i(n,"class","action-btn svelte-1skuef2"),i(n,"title",m("file.openExternal")),i(n,"aria-label",m("file.openExternal")),i(s,"class","action-btn svelte-1skuef2"),i(s,"title",m("file.showInExplorer")),i(s,"aria-label",m("file.showInExplorer"))},m(f,d){w(f,e,d),w(f,t,d),w(f,n,d),w(f,o,d),w(f,s,d),a||(c=[E(e,"click",$e(l[29])),E(n,"click",$e(l[10])),E(s,"click",$e(l[11]))],a=!0)},p:te,d(f){f&&(h(e),h(t),h(n),h(o),h(s)),a=!1,_e(c)}}}function zl(l){let e,t,n,o,s,a,c,f,d=m("common.open")+"",_,b,k,y,v,C,T,S,I=m("file.openExternal")+"",D,N,z,B,M,j,H=m("file.showInExplorer")+"",R,V,W,J,U,Z,x,q,K,X=m("common.rename")+"",O,se,ge,ee,le,ie,ce,De=m("common.duplicate")+"",pe,we,ve,P,Y,fe,ke,be,ae,We=m("common.cut")+"",tt,qe,he,ze,Oe,je,Me,Te=m("common.copy")+"",Ne,Be,Ie,lt,Re,Fe,ye,Ce,Ee,Pe=m("common.delete")+"",Ae,ue,Ve;return{c(){e=u("div"),t=g(),n=u("div"),o=u("button"),s=L("svg"),a=L("path"),c=L("circle"),f=g(),_=A(d),b=g(),k=u("button"),y=L("svg"),v=L("path"),C=L("polyline"),T=L("line"),S=g(),D=A(I),N=g(),z=u("button"),B=L("svg"),M=L("path"),j=g(),R=A(H),V=g(),W=u("div"),J=g(),U=u("button"),Z=L("svg"),x=L("path"),q=L("path"),K=g(),O=A(X),se=g(),ge=u("button"),ee=L("svg"),le=L("rect"),ie=L("path"),ce=g(),pe=A(De),we=g(),ve=u("button"),P=L("svg"),Y=L("circle"),fe=L("circle"),ke=L("line"),be=L("line"),ae=g(),tt=A(We),qe=g(),he=u("button"),ze=L("svg"),Oe=L("rect"),je=L("path"),Me=g(),Ne=A(Te),Be=g(),Ie=u("div"),lt=g(),Re=u("button"),Fe=L("svg"),ye=L("polyline"),Ce=L("path"),Ee=g(),Ae=A(Pe),i(e,"class","menu-backdrop svelte-1skuef2"),i(e,"role","presentation"),i(a,"d","M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z"),i(c,"cx","12"),i(c,"cy","12"),i(c,"r","3"),i(s,"width","14"),i(s,"height","14"),i(s,"viewBox","0 0 24 24"),i(s,"fill","none"),i(s,"stroke","currentColor"),i(s,"stroke-width","2"),i(s,"stroke-linecap","round"),i(s,"stroke-linejoin","round"),i(o,"class","menu-item svelte-1skuef2"),i(o,"role","menuitem"),i(v,"d","M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"),i(C,"points","15 3 21 3 21 9"),i(T,"x1","10"),i(T,"y1","14"),i(T,"x2","21"),i(T,"y2","3"),i(y,"width","14"),i(y,"height","14"),i(y,"viewBox","0 0 24 24"),i(y,"fill","none"),i(y,"stroke","currentColor"),i(y,"stroke-width","2"),i(y,"stroke-linecap","round"),i(y,"stroke-linejoin","round"),i(k,"class","menu-item svelte-1skuef2"),i(k,"role","menuitem"),i(M,"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"),i(B,"width","14"),i(B,"height","14"),i(B,"viewBox","0 0 24 24"),i(B,"fill","none"),i(B,"stroke","currentColor"),i(B,"stroke-width","2"),i(B,"stroke-linecap","round"),i(B,"stroke-linejoin","round"),i(z,"class","menu-item svelte-1skuef2"),i(z,"role","menuitem"),i(W,"class","menu-sep svelte-1skuef2"),i(x,"d","M12 20h9"),i(q,"d","M16.5 3.5a2.121 2.121 0 0 1 3 3L7 19l-4 1 1-4L16.5 3.5z"),i(Z,"width","14"),i(Z,"height","14"),i(Z,"viewBox","0 0 24 24"),i(Z,"fill","none"),i(Z,"stroke","currentColor"),i(Z,"stroke-width","2"),i(Z,"stroke-linecap","round"),i(Z,"stroke-linejoin","round"),i(U,"class","menu-item svelte-1skuef2"),i(U,"role","menuitem"),i(le,"x","9"),i(le,"y","9"),i(le,"width","13"),i(le,"height","13"),i(le,"rx","2"),i(le,"ry","2"),i(ie,"d","M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"),i(ee,"width","14"),i(ee,"height","14"),i(ee,"viewBox","0 0 24 24"),i(ee,"fill","none"),i(ee,"stroke","currentColor"),i(ee,"stroke-width","2"),i(ee,"stroke-linecap","round"),i(ee,"stroke-linejoin","round"),i(ge,"class","menu-item svelte-1skuef2"),i(ge,"role","menuitem"),i(Y,"cx","6"),i(Y,"cy","6"),i(Y,"r","3"),i(fe,"cx","6"),i(fe,"cy","18"),i(fe,"r","3"),i(ke,"x1","20"),i(ke,"y1","4"),i(ke,"x2","8.12"),i(ke,"y2","15.88"),i(be,"x1","8.12"),i(be,"y1","8.12"),i(be,"x2","20"),i(be,"y2","20"),i(P,"width","14"),i(P,"height","14"),i(P,"viewBox","0 0 24 24"),i(P,"fill","none"),i(P,"stroke","currentColor"),i(P,"stroke-width","2"),i(P,"stroke-linecap","round"),i(P,"stroke-linejoin","round"),i(ve,"class","menu-item svelte-1skuef2"),i(ve,"role","menuitem"),i(Oe,"x","9"),i(Oe,"y","9"),i(Oe,"width","13"),i(Oe,"height","13"),i(Oe,"rx","2"),i(Oe,"ry","2"),i(je,"d","M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"),i(ze,"width","14"),i(ze,"height","14"),i(ze,"viewBox","0 0 24 24"),i(ze,"fill","none"),i(ze,"stroke","currentColor"),i(ze,"stroke-width","2"),i(ze,"stroke-linecap","round"),i(ze,"stroke-linejoin","round"),i(he,"class","menu-item svelte-1skuef2"),i(he,"role","menuitem"),i(Ie,"class","menu-sep svelte-1skuef2"),i(ye,"points","3 6 5 6 21 6"),i(Ce,"d","M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2"),i(Fe,"width","14"),i(Fe,"height","14"),i(Fe,"viewBox","0 0 24 24"),i(Fe,"fill","none"),i(Fe,"stroke","currentColor"),i(Fe,"stroke-width","2"),i(Fe,"stroke-linecap","round"),i(Fe,"stroke-linejoin","round"),i(Re,"class","menu-item menu-item-danger svelte-1skuef2"),i(Re,"role","menuitem"),i(n,"class","menu svelte-1skuef2"),He(n,"left",l[3]+"px"),He(n,"top",l[4]+"px"),He(n,"position","fixed"),i(n,"role","menu"),i(n,"tabindex","-1")},m(Je,Q){w(Je,e,Q),w(Je,t,Q),w(Je,n,Q),r(n,o),r(o,s),r(s,a),r(s,c),r(o,f),r(o,_),r(n,b),r(n,k),r(k,y),r(y,v),r(y,C),r(y,T),r(k,S),r(k,D),r(n,N),r(n,z),r(z,B),r(B,M),r(z,j),r(z,R),r(n,V),r(n,W),r(n,J),r(n,U),r(U,Z),r(Z,x),r(Z,q),r(U,K),r(U,O),r(n,se),r(n,ge),r(ge,ee),r(ee,le),r(ee,ie),r(ge,ce),r(ge,pe),r(n,we),r(n,ve),r(ve,P),r(P,Y),r(P,fe),r(P,ke),r(P,be),r(ve,ae),r(ve,tt),r(n,qe),r(n,he),r(he,ze),r(ze,Oe),r(ze,je),r(he,Me),r(he,Ne),r(n,Be),r(n,Ie),r(n,lt),r(n,Re),r(Re,Fe),r(Fe,ye),r(Fe,Ce),r(Re,Ee),r(Re,Ae),ue||(Ve=[E(e,"click",$e(l[19])),E(o,"click",l[17]),E(k,"click",l[10]),E(z,"click",l[11]),E(U,"click",l[13]),E(ge,"click",l[14]),E(ve,"click",l[15]),E(he,"click",l[16]),E(Re,"click",l[12]),E(n,"click",$e(l[28])),E(n,"keydown",l[31])],ue=!0)},p(Je,Q){Q[0]&8&&He(n,"left",Je[3]+"px"),Q[0]&16&&He(n,"top",Je[4]+"px")},d(Je){Je&&(h(e),h(t),h(n)),ue=!1,_e(Ve)}}}function va(l){let e,t,n,o,s,a,c=l[0].name+"",f,d,_,b,k,y,v,C,T,S,I,D,N,z,B,M,j,H,R,V,W,J;n=new yi({props:{kind:l[6],size:22}});let U=!l[7]&&pa(l);function Z(X,O){return X[7]?ma:_a}let q=Z(l)(l),K=l[2]&&zl(l);return{c(){e=u("div"),t=u("div"),et(n.$$.fragment),o=g(),s=u("div"),a=u("div"),f=A(c),_=g(),b=u("div"),k=u("span"),k.textContent=`${l[8]}`,y=g(),U&&U.c(),v=g(),C=u("div"),q.c(),T=g(),S=u("button"),I=L("svg"),D=L("circle"),N=L("circle"),z=L("circle"),B=g(),M=u("button"),M.innerHTML='',H=g(),K&&K.c(),R=st(),i(t,"class","file-row-icon svelte-1skuef2"),i(a,"class","file-row-name svelte-1skuef2"),i(a,"title",d=l[0].name),i(b,"class","file-row-meta svelte-1skuef2"),i(s,"class","file-row-body svelte-1skuef2"),i(D,"cx","12"),i(D,"cy","5"),i(D,"r","2"),i(N,"cx","12"),i(N,"cy","12"),i(N,"r","2"),i(z,"cx","12"),i(z,"cy","19"),i(z,"r","2"),i(I,"width","16"),i(I,"height","16"),i(I,"viewBox","0 0 24 24"),i(I,"fill","currentColor"),i(S,"class","action-btn svelte-1skuef2"),i(S,"title",m("file.more")),i(S,"aria-label",m("file.more")),i(S,"aria-expanded",l[2]),i(M,"class","action-btn action-btn-danger svelte-1skuef2"),i(M,"title",m("common.delete")),i(M,"aria-label",m("common.delete")),i(C,"class","file-row-actions svelte-1skuef2"),i(e,"class","file-row svelte-1skuef2"),i(e,"role","button"),i(e,"tabindex","0"),i(e,"draggable","true"),i(e,"aria-label",j=l[7]?m("file.ariaFolder")+" "+l[0].name:m("file.ariaFile")+" "+l[0].name),Ke(e,"file-row--selected",l[1])},m(X,O){w(X,e,O),r(e,t),Qe(n,t,null),r(e,o),r(e,s),r(s,a),r(a,f),r(s,_),r(s,b),r(b,k),r(b,y),U&&U.m(b,null),r(e,v),r(e,C),q.m(C,null),r(C,T),r(C,S),r(S,I),r(I,D),r(I,N),r(I,z),r(C,B),r(C,M),w(X,H,O),K&&K.m(X,O),w(X,R,O),V=!0,W||(J=[E(da,"click",l[19]),E(S,"click",$e(l[18])),E(M,"click",$e(l[12])),E(e,"click",l[9]),E(e,"keydown",l[24]),E(e,"contextmenu",l[23]),E(e,"dragstart",l[20]),E(e,"dragover",l[21]),E(e,"drop",l[22])],W=!0)},p(X,O){(!V||O[0]&1)&&c!==(c=X[0].name+"")&&G(f,c),(!V||O[0]&1&&d!==(d=X[0].name))&&i(a,"title",d),X[7]||U.p(X,O),q.p(X,O),(!V||O[0]&4)&&i(S,"aria-expanded",X[2]),(!V||O[0]&1&&j!==(j=X[7]?m("file.ariaFolder")+" "+X[0].name:m("file.ariaFile")+" "+X[0].name))&&i(e,"aria-label",j),(!V||O[0]&2)&&Ke(e,"file-row--selected",X[1]),X[2]?K?K.p(X,O):(K=zl(X),K.c(),K.m(R.parentNode,R)):K&&(K.d(1),K=null)},i(X){V||(oe(n.$$.fragment,X),V=!0)},o(X){re(n.$$.fragment,X),V=!1},d(X){X&&(h(e),h(H),h(R)),xe(n),U&&U.d(),q.d(),K&&K.d(X),W=!1,_e(J)}}}function ka(l,e,t){let{item:n}=e,{selected:o=!1}=e,{onDragStart:s}=e,{onDragOver:a}=e,{onDrop:c}=e;const f=Vt(),d=hi(n),_=n.type==="folder",b=oa(n);let k=!1,y=0,v=0,C=null;function T(O){O.ctrlKey||O.metaKey?f("toggleSelect",n.id):O.shiftKey?f("rangeSelect",n.id):C?(clearTimeout(C),C=null,_?f("navigate",n.id):f("preview",n)):C=setTimeout(()=>{C=null,f("selectOne",n.id)},250)}function S(){f("openExternal",n.fileId)}function I(){t(2,k=!1),f("showInFolder",n.nodeId||n.id)}function D(){t(2,k=!1),f("delete",{id:n.id,type:n.type})}function N(){t(2,k=!1),f("rename",{id:n.id,name:n.name})}function z(){t(2,k=!1),f("duplicate",n.id)}function B(){t(2,k=!1),f("cut",n.id)}function M(){t(2,k=!1),f("copy",n.id)}function j(){t(2,k=!1),_?f("navigate",n.id):f("preview",n)}function H(){t(2,k=!k)}function R(){t(2,k=!1)}function V(O){s&&s(O,n.id)}function W(O){a&&_&&a(O,n.id)}function J(O){c&&_&&c(O,n.id)}function U(O){O.preventDefault(),t(3,y=Math.min(O.clientX,window.innerWidth-240)),t(4,v=Math.min(O.clientY,window.innerHeight-320)),t(2,k=!0)}function Z(O){(O.key==="Enter"||O.key===" ")&&(O.preventDefault(),T(O))}function x(O){_i.call(this,l,O)}const q=()=>f("preview",n),K=()=>f("navigate",n.id),X=O=>{O.key==="Escape"&&(O.stopPropagation(),R())};return l.$$set=O=>{"item"in O&&t(0,n=O.item),"selected"in O&&t(1,o=O.selected),"onDragStart"in O&&t(25,s=O.onDragStart),"onDragOver"in O&&t(26,a=O.onDragOver),"onDrop"in O&&t(27,c=O.onDrop)},[n,o,k,y,v,f,d,_,b,T,S,I,D,N,z,B,M,j,H,R,V,W,J,U,Z,s,a,c,x,q,K,X]}class ba extends pt{constructor(e){super(),dt(this,e,ka,va,ut,{item:0,selected:1,onDragStart:25,onDragOver:26,onDrop:27},null,[-1,-1])}}function Bl(l,e,t){const n=l.slice();return n[4]=e[t],n[6]=t,n}function ya(l){let e;return{c(){e=u("span"),e.textContent="/",i(e,"class","sep svelte-csi2lb")},m(t,n){w(t,e,n)},d(t){t&&h(e)}}}function ha(l){let e,t=l[4].name+"",n,o,s;function a(){return l[2](l[6])}return{c(){e=u("button"),n=A(t),i(e,"class","crumb crumb--link svelte-csi2lb")},m(c,f){w(c,e,f),r(e,n),o||(s=E(e,"click",a),o=!0)},p(c,f){l=c,f&1&&t!==(t=l[4].name+"")&&G(n,t)},d(c){c&&h(e),o=!1,s()}}}function ga(l){let e,t=l[4].name+"",n;return{c(){e=u("span"),n=A(t),i(e,"class","crumb crumb--current svelte-csi2lb")},m(o,s){w(o,e,s),r(e,n)},p(o,s){s&1&&t!==(t=o[4].name+"")&&G(n,t)},d(o){o&&h(e)}}}function Rl(l){let e,t,n=l[6]>0&&ya();function o(c,f){return c[6]===c[0].length-1?ga:ha}let s=o(l),a=s(l);return{c(){n&&n.c(),e=g(),a.c(),t=st()},m(c,f){n&&n.m(c,f),w(c,e,f),a.m(c,f),w(c,t,f)},p(c,f){s===(s=o(c))&&a?a.p(c,f):(a.d(1),a=s(c),a&&(a.c(),a.m(t.parentNode,t)))},d(c){c&&(h(e),h(t)),n&&n.d(c),a.d(c)}}}function wa(l){let e,t=de(l[0]),n=[];for(let o=0;os(c);return l.$$set=c=>{"crumbs"in c&&t(0,n=c.crumbs)},[n,s,a]}class Ti extends pt{constructor(e){super(),dt(this,e,Ca,wa,ut,{crumbs:0})}}function Sa(l){let e,t,n,o,s,a;return{c(){e=u("div"),t=u("p"),t.textContent=`${m("file.previewUnavailable")}`,n=g(),o=u("button"),o.textContent=`${m("file.openExternal")}`,i(o,"class","btn btn-sm svelte-1cw3u0m"),i(e,"class","preview-status svelte-1cw3u0m")},m(c,f){w(c,e,f),r(e,t),r(e,n),r(e,o),s||(a=E(o,"click",l[9]),s=!0)},p:te,d(c){c&&h(e),s=!1,a()}}}function Ta(l){let e,t;function n(a,c){return c&2&&(e=null),e==null&&(e=!!(a[1]&&a[1].startsWith("data:"))),e?Ea:Fa}let o=n(l,-1),s=o(l);return{c(){s.c(),t=st()},m(a,c){s.m(a,c),w(a,t,c)},p(a,c){o===(o=n(a,c))&&s?s.p(a,c):(s.d(1),s=o(a),s&&(s.c(),s.m(t.parentNode,t)))},d(a){a&&h(t),s.d(a)}}}function Na(l){let e,t,n;return{c(){e=u("pre"),t=u("code"),n=A(l[1]),i(e,"class","preview-text svelte-1cw3u0m")},m(o,s){w(o,e,s),r(e,t),r(t,n)},p(o,s){s&2&&G(n,o[1])},d(o){o&&h(e)}}}function Da(l){let e,t,n,o;return{c(){e=u("div"),t=u("img"),zt(t.src,n=l[1])||i(t,"src",n),i(t,"alt",o=l[0].name),i(t,"class","preview-image svelte-1cw3u0m"),i(e,"class","preview-image-container svelte-1cw3u0m")},m(s,a){w(s,e,a),r(e,t)},p(s,a){a&2&&!zt(t.src,n=s[1])&&i(t,"src",n),a&1&&o!==(o=s[0].name)&&i(t,"alt",o)},d(s){s&&h(e)}}}function Ma(l){let e,t,n,o,s,a,c;return{c(){e=u("div"),t=u("p"),n=A(l[3]),o=g(),s=u("button"),s.textContent=`${m("file.openExternal")}`,i(s,"class","btn btn-sm svelte-1cw3u0m"),i(e,"class","preview-status svelte-1cw3u0m")},m(f,d){w(f,e,d),r(e,t),r(t,n),r(e,o),r(e,s),a||(c=E(s,"click",l[9]),a=!0)},p(f,d){d&8&&G(n,f[3])},d(f){f&&h(e),a=!1,c()}}}function Ia(l){let e,t;return{c(){e=u("div"),t=u("p"),t.textContent=`${m("common.loading")}`,i(e,"class","preview-status svelte-1cw3u0m")},m(n,o){w(n,e,o),r(e,t)},p:te,d(n){n&&h(e)}}}function Fa(l){let e,t,n,o,s,a;return{c(){e=u("div"),t=u("p"),t.textContent=`${m("file.pdfUnavailable")}`,n=g(),o=u("button"),o.textContent=`${m("file.openExternal")}`,i(o,"class","btn btn-sm svelte-1cw3u0m"),i(e,"class","preview-status svelte-1cw3u0m")},m(c,f){w(c,e,f),r(e,t),r(e,n),r(e,o),s||(a=E(o,"click",l[9]),s=!0)},p:te,d(c){c&&h(e),s=!1,a()}}}function Ea(l){let e,t,n;return{c(){e=u("div"),t=u("embed"),zt(t.src,n=l[1])||i(t,"src",n),i(t,"type","application/pdf"),i(t,"class","preview-pdf svelte-1cw3u0m"),i(e,"class","preview-pdf-container svelte-1cw3u0m")},m(o,s){w(o,e,s),r(e,t)},p(o,s){s&2&&!zt(t.src,n=o[1])&&i(t,"src",n)},d(o){o&&h(e)}}}function Aa(l){let e,t,n,o,s,a,c,f=l[0].name+"",d,_,b,k,y=Ht(l[0].size)+"",v,C,T=Ol(l[0].mime)+"",S,I,D,N,z,B,M,j,H,R,V;s=new yi({props:{kind:l[8],size:18}});function W(Z,x){return Z[2]?Ia:Z[3]?Ma:Z[6]&&Z[1]?Da:Z[5]&&Z[1]?Na:Z[4]?Ta:Sa}let J=W(l),U=J(l);return{c(){e=u("div"),t=u("div"),n=u("header"),o=u("div"),et(s.$$.fragment),a=g(),c=u("span"),d=A(f),b=g(),k=u("div"),v=A(y),C=A(" · "),S=A(T),I=g(),D=u("div"),N=u("button"),N.innerHTML='',z=g(),B=u("button"),B.innerHTML='',M=g(),j=u("div"),U.c(),i(c,"class","preview-name svelte-1cw3u0m"),i(c,"title",_=l[0].name),i(o,"class","preview-title svelte-1cw3u0m"),i(k,"class","preview-meta svelte-1cw3u0m"),i(N,"class","action-btn svelte-1cw3u0m"),i(N,"title",m("file.openExternal")),i(N,"aria-label",m("file.openExternal")),i(B,"class","action-btn action-btn-close svelte-1cw3u0m"),i(B,"title","Close"),i(B,"aria-label","Close preview"),i(D,"class","preview-actions svelte-1cw3u0m"),i(n,"class","preview-header svelte-1cw3u0m"),i(j,"class","preview-body svelte-1cw3u0m"),i(t,"class","modal svelte-1cw3u0m"),i(e,"class","overlay svelte-1cw3u0m"),i(e,"role","presentation")},m(Z,x){w(Z,e,x),r(e,t),r(t,n),r(n,o),Qe(s,o,null),r(o,a),r(o,c),r(c,d),r(n,b),r(n,k),r(k,v),r(k,C),r(k,S),r(n,I),r(n,D),r(D,N),r(D,z),r(D,B),r(t,M),r(t,j),U.m(j,null),H=!0,R||(V=[E(N,"click",l[9]),E(B,"click",l[10]),E(e,"click",vt(l[11])),E(e,"keydown",l[12])],R=!0)},p(Z,[x]){(!H||x&1)&&f!==(f=Z[0].name+"")&&G(d,f),(!H||x&1&&_!==(_=Z[0].name))&&i(c,"title",_),(!H||x&1)&&y!==(y=Ht(Z[0].size)+"")&&G(v,y),(!H||x&1)&&T!==(T=Ol(Z[0].mime)+"")&&G(S,T),J===(J=W(Z))&&U?U.p(Z,x):(U.d(1),U=J(Z),U&&(U.c(),U.m(j,null)))},i(Z){H||(oe(s.$$.fragment,Z),H=!0)},o(Z){re(s.$$.fragment,Z),H=!1},d(Z){Z&&h(e),xe(s),U.d(),R=!1,_e(V)}}}function La(l,e,t){let n,o,s,{item:a}=e,{content:c=""}=e,{loading:f=!1}=e,{error:d=""}=e;const _=Vt(),b=hi(a);function k(S){S.key==="Escape"&&_("close")}function y(){_("openExternal",a.fileId)}mi(()=>{window.addEventListener("keydown",k)}),nl(()=>{window.removeEventListener("keydown",k)});const v=()=>_("close"),C=()=>_("close"),T=S=>{S.key==="Escape"&&(S.preventDefault(),_("close"))};return l.$$set=S=>{"item"in S&&t(0,a=S.item),"content"in S&&t(1,c=S.content),"loading"in S&&t(2,f=S.loading),"error"in S&&t(3,d=S.error)},l.$$.update=()=>{l.$$.dirty&3&&t(6,n=gi(a)&&c&&c.startsWith("data:")),l.$$.dirty&1&&t(5,o=wi(a)||Si(a)),l.$$.dirty&1&&t(4,s=Ci(a))},[a,c,f,d,s,o,n,_,b,y,v,C,T]}class ja extends pt{constructor(e){super(),dt(this,e,La,Aa,ut,{item:0,content:1,loading:2,error:3})}}function Pa(l){let e,t,n,o,s,a,c,f,d,_,b,k,y,v,C,T,S;return{c(){e=u("div"),t=u("div"),n=u("h3"),o=A(l[0]),s=g(),a=u("p"),c=A(l[1]),f=g(),d=u("div"),_=u("button"),b=A(l[2]),y=g(),v=u("button"),C=A(l[3]),i(n,"class","svelte-1fv6yyk"),i(a,"class","message svelte-1fv6yyk"),i(_,"class",k="btn "+(l[4]?"btn-danger":"btn-primary")+" svelte-1fv6yyk"),i(v,"class","btn svelte-1fv6yyk"),i(d,"class","actions svelte-1fv6yyk"),i(t,"class","modal svelte-1fv6yyk"),i(e,"class","overlay svelte-1fv6yyk"),i(e,"role","presentation")},m(I,D){w(I,e,D),r(e,t),r(t,n),r(n,o),r(t,s),r(t,a),r(a,c),r(t,f),r(t,d),r(d,_),r(_,b),r(d,y),r(d,v),r(v,C),T||(S=[E(_,"click",l[6]),E(v,"click",l[7]),E(e,"click",vt(l[8])),E(e,"keydown",l[9])],T=!0)},p(I,[D]){D&1&&G(o,I[0]),D&2&&G(c,I[1]),D&4&&G(b,I[2]),D&16&&k!==(k="btn "+(I[4]?"btn-danger":"btn-primary")+" svelte-1fv6yyk")&&i(_,"class",k),D&8&&G(C,I[3])},i:te,o:te,d(I){I&&h(e),T=!1,_e(S)}}}function Oa(l,e,t){let{title:n=m("common.confirm")}=e,{message:o=""}=e,{confirmText:s=m("common.delete")}=e,{cancelText:a=m("common.cancel")}=e,{danger:c=!1}=e;const f=Vt(),d=()=>f("confirm"),_=()=>f("cancel"),b=()=>f("cancel"),k=y=>{y.key==="Escape"&&(y.preventDefault(),f("cancel"))};return l.$$set=y=>{"title"in y&&t(0,n=y.title),"message"in y&&t(1,o=y.message),"confirmText"in y&&t(2,s=y.confirmText),"cancelText"in y&&t(3,a=y.cancelText),"danger"in y&&t(4,c=y.danger)},[n,o,s,a,c,f,d,_,b,k]}class za extends pt{constructor(e){super(),dt(this,e,Oa,Pa,ut,{title:0,message:1,confirmText:2,cancelText:3,danger:4})}}function Ba(l){let e,t,n;return{c(){e=L("circle"),t=L("line"),n=L("line"),i(e,"cx","12"),i(e,"cy","12"),i(e,"r","10"),i(t,"x1","12"),i(t,"y1","16"),i(t,"x2","12"),i(t,"y2","12"),i(n,"x1","12"),i(n,"y1","8"),i(n,"x2","12.01"),i(n,"y2","8")},m(o,s){w(o,e,s),w(o,t,s),w(o,n,s)},d(o){o&&(h(e),h(t),h(n))}}}function Ra(l){let e,t,n,o;return{c(){e=L("rect"),t=L("polyline"),n=L("line"),o=L("line"),i(e,"x","3"),i(e,"y","5"),i(e,"width","18"),i(e,"height","14"),i(e,"rx","2"),i(t,"points","3 10 21 10"),i(n,"x1","8"),i(n,"y1","5"),i(n,"x2","8"),i(n,"y2","19"),i(o,"x1","16"),i(o,"y1","5"),i(o,"x2","16"),i(o,"y2","19")},m(s,a){w(s,e,a),w(s,t,a),w(s,n,a),w(s,o,a)},d(s){s&&(h(e),h(t),h(n),h(o))}}}function Ha(l){let e,t;return{c(){e=L("path"),t=L("polyline"),i(e,"d","M13 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V9z"),i(t,"points","13 2 13 9 20 9")},m(n,o){w(n,e,o),w(n,t,o)},d(n){n&&(h(e),h(t))}}}function Va(l){let e,t;return{c(){e=L("path"),t=L("path"),i(e,"d","M12 20h9"),i(t,"d","M16.5 3.5a2.121 2.121 0 0 1 3 3L7 19l-4 1 1-4L16.5 3.5z")},m(n,o){w(n,e,o),w(n,t,o)},d(n){n&&(h(e),h(t))}}}function Ua(l){let e,t,n,o,s;return{c(){e=L("path"),t=L("path"),n=L("line"),o=L("line"),s=L("line"),i(e,"d","M4 19.5A2.5 2.5 0 0 1 6.5 17H20"),i(t,"d","M6.5 2H20v20H6.5A2.5 2.5 0 0 1 4 19.5v-15A2.5 2.5 0 0 1 6.5 2z"),i(n,"x1","8"),i(n,"y1","7"),i(n,"x2","16"),i(n,"y2","7"),i(o,"x1","8"),i(o,"y1","11"),i(o,"x2","14"),i(o,"y2","11"),i(s,"x1","8"),i(s,"y1","15"),i(s,"x2","12"),i(s,"y2","15")},m(a,c){w(a,e,c),w(a,t,c),w(a,n,c),w(a,o,c),w(a,s,c)},d(a){a&&(h(e),h(t),h(n),h(o),h(s))}}}function Wa(l){let e,t,n,o;return{c(){e=L("path"),t=L("polyline"),n=L("line"),o=L("line"),i(e,"d","M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"),i(t,"points","14 2 14 8 20 8"),i(n,"x1","16"),i(n,"y1","13"),i(n,"x2","8"),i(n,"y2","13"),i(o,"x1","16"),i(o,"y1","17"),i(o,"x2","8"),i(o,"y2","17")},m(s,a){w(s,e,a),w(s,t,a),w(s,n,a),w(s,o,a)},d(s){s&&(h(e),h(t),h(n),h(o))}}}function Ka(l){let e,t;return{c(){e=L("path"),t=L("circle"),i(e,"d","M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2"),i(t,"cx","12"),i(t,"cy","7"),i(t,"r","4")},m(n,o){w(n,e,o),w(n,t,o)},d(n){n&&(h(e),h(t))}}}function Ga(l){let e,t,n,o;return{c(){e=L("rect"),t=L("rect"),n=L("rect"),o=L("rect"),i(e,"x","3"),i(e,"y","3"),i(e,"width","7"),i(e,"height","7"),i(e,"rx","1"),i(t,"x","14"),i(t,"y","3"),i(t,"width","7"),i(t,"height","4"),i(t,"rx","1"),i(n,"x","14"),i(n,"y","10"),i(n,"width","7"),i(n,"height","11"),i(n,"rx","1"),i(o,"x","3"),i(o,"y","14"),i(o,"width","7"),i(o,"height","7"),i(o,"rx","1")},m(s,a){w(s,e,a),w(s,t,a),w(s,n,a),w(s,o,a)},d(s){s&&(h(e),h(t),h(n),h(o))}}}function qa(l){let e;return{c(){e=L("path"),i(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){w(t,e,n)},d(t){t&&h(e)}}}function Ya(l){let e;function t(s,a){return s[0]==="folder"?qa:s[0]==="project"?Ga:s[0]==="client"?Ka:s[0]==="document"?Wa:s[0]==="recipe"?Ua:s[0]==="note"?Va:s[0]==="file"?Ha:s[0]==="case"?Ra:Ba}let n=t(l),o=n(l);return{c(){e=L("svg"),o.c(),i(e,"width",l[1]),i(e,"height",l[1]),i(e,"viewBox","0 0 24 24"),i(e,"fill","none"),i(e,"stroke","currentColor"),i(e,"stroke-width","1.5"),i(e,"stroke-linecap","round"),i(e,"stroke-linejoin","round"),i(e,"xmlns","http://www.w3.org/2000/svg")},m(s,a){w(s,e,a),o.m(e,null)},p(s,[a]){n!==(n=t(s))&&(o.d(1),o=n(s),o&&(o.c(),o.m(e,null))),a&2&&i(e,"width",s[1]),a&2&&i(e,"height",s[1])},i:te,o:te,d(s){s&&h(e),o.d()}}}function Xa(l,e,t){let{kind:n="generic"}=e,{size:o=18}=e;return l.$$set=s=>{"kind"in s&&t(0,n=s.kind),"size"in s&&t(1,o=s.size)},[n,o]}class Ut extends pt{constructor(e){super(),dt(this,e,Xa,Ya,ut,{kind:0,size:1})}}function Hl(l,e,t){const n=l.slice();return n[44]=e[t],n}function Ja(l){let e;return{c(){e=u("span"),i(e,"class","tree-toggle-placeholder svelte-zj71cl")},m(t,n){w(t,e,n)},p:te,d(t){t&&h(e)}}}function Za(l){let e,t,n=l[1][l[44].id]?"▾":"▸",o,s,a;function c(){return l[25](l[44])}return{c(){e=u("button"),t=u("span"),o=A(n),i(t,"class","tree-arrow"),i(e,"class","tree-toggle svelte-zj71cl")},m(f,d){w(f,e,d),r(e,t),r(t,o),s||(a=E(e,"click",$e(c)),s=!0)},p(f,d){l=f,d[0]&3&&n!==(n=l[1][l[44].id]?"▾":"▸")&&G(o,n)},d(f){f&&h(e),s=!1,a()}}}function Vl(l){let e,t;return e=new Ni({props:{nodes:l[44].children||[],expanded:l[1],selectedNodeId:l[2],level:l[3]+1,onSelect:l[4],onToggle:l[5],onContextMenu:l[6],onDrop:l[7]}}),{c(){et(e.$$.fragment)},m(n,o){Qe(e,n,o),t=!0},p(n,o){const s={};o[0]&1&&(s.nodes=n[44].children||[]),o[0]&2&&(s.expanded=n[1]),o[0]&4&&(s.selectedNodeId=n[2]),o[0]&8&&(s.level=n[3]+1),o[0]&16&&(s.onSelect=n[4]),o[0]&32&&(s.onToggle=n[5]),o[0]&64&&(s.onContextMenu=n[6]),o[0]&128&&(s.onDrop=n[7]),e.$set(s)},i(n){t||(oe(e.$$.fragment,n),t=!0)},o(n){re(e.$$.fragment,n),t=!1},d(n){xe(e,n)}}}function Ul(l,e){let t,n,o,s,a,c,f,d=e[44].title+"",_,b,k=e[1][e[44].id]&&el(e[44]),y,v,C,T;function S(q,K){return K[0]&1&&(n=null),n==null&&(n=!!Ft(q[44])),n?Za:Ja}let I=S(e,[-1,-1]),D=I(e);a=new Ut({props:{kind:Wl(e[44]),size:16}});function N(...q){return e[26](e[44],...q)}function z(...q){return e[27](e[44],...q)}function B(){return e[28](e[44])}function M(...q){return e[29](e[44],...q)}function j(...q){return e[30](e[44],...q)}function H(...q){return e[31](e[44],...q)}function R(...q){return e[32](e[44],...q)}function V(...q){return e[33](e[44],...q)}function W(...q){return e[34](e[44],...q)}function J(...q){return e[35](e[44],...q)}function U(...q){return e[36](e[44],...q)}function Z(...q){return e[37](e[44],...q)}let x=k&&Vl(e);return{key:l,first:null,c(){t=u("div"),D.c(),o=g(),s=u("span"),et(a.$$.fragment),c=g(),f=u("span"),_=A(d),b=g(),x&&x.c(),y=st(),i(s,"class","tree-icon svelte-zj71cl"),i(s,"role","button"),i(s,"tabindex","-1"),i(f,"class","tree-label svelte-zj71cl"),i(f,"role","button"),i(f,"tabindex","-1"),i(t,"class","tree-item svelte-zj71cl"),He(t,"padding-left",e[3]*16+4+"px"),i(t,"draggable","true"),i(t,"role","button"),i(t,"tabindex","0"),Ke(t,"selected",e[2]===e[44].id),Ke(t,"drop-valid",e[8]===e[44].id&&e[9][e[44].id]),Ke(t,"drop-invalid",e[8]===e[44].id&&!e[9][e[44].id]),this.first=t},m(q,K){w(q,t,K),D.m(t,null),r(t,o),r(t,s),Qe(a,s,null),r(t,c),r(t,f),r(f,_),w(q,b,K),x&&x.m(q,K),w(q,y,K),v=!0,C||(T=[E(s,"click",N),E(s,"keydown",z),E(s,"dblclick",$e(e[24])),E(f,"click",$e(B)),E(f,"keydown",M),E(t,"dragstart",j),E(t,"dragover",H),E(t,"dragleave",R),E(t,"drop",V),E(t,"click",W),E(t,"keydown",J),E(t,"dblclick",U),E(t,"contextmenu",tl(Z))],C=!0)},p(q,K){e=q,I===(I=S(e,K))&&D?D.p(e,K):(D.d(1),D=I(e),D&&(D.c(),D.m(t,o)));const X={};K[0]&1&&(X.kind=Wl(e[44])),a.$set(X),(!v||K[0]&1)&&d!==(d=e[44].title+"")&&G(_,d),(!v||K[0]&8)&&He(t,"padding-left",e[3]*16+4+"px"),(!v||K[0]&5)&&Ke(t,"selected",e[2]===e[44].id),(!v||K[0]&769)&&Ke(t,"drop-valid",e[8]===e[44].id&&e[9][e[44].id]),(!v||K[0]&769)&&Ke(t,"drop-invalid",e[8]===e[44].id&&!e[9][e[44].id]),K[0]&3&&(k=e[1][e[44].id]&&el(e[44])),k?x?(x.p(e,K),K[0]&3&&oe(x,1)):(x=Vl(e),x.c(),oe(x,1),x.m(y.parentNode,y)):x&&(Ye(),re(x,1,1,()=>{x=null}),Xe())},i(q){v||(oe(a.$$.fragment,q),oe(x),v=!0)},o(q){re(a.$$.fragment,q),re(x),v=!1},d(q){q&&(h(t),h(b),h(y)),D.d(),xe(a),x&&x.d(q),C=!1,_e(T)}}}function Qa(l){let e=[],t=new Map,n,o,s,a,c=de(l[0]);const f=d=>d[44].id;for(let d=0;d0:l.has_children===!0}function Kl(l){const e={};function t(n,o){for(const s of n)e[s.id]=o,s.children&&t(s.children,s.id)}return t(l,""),e}function Gl(l){const e=[];function t(n){for(const o of n)e.push(o),o.children&&t(o.children)}return t(l),e}function xa(l){try{return l.dataTransfer.getData("text/plain")}catch{return""}}function $a(l,e,t){let n,o,s,{nodes:a=[]}=e,{expanded:c={}}=e,{selectedNodeId:f=""}=e,{level:d=0}=e,{onSelect:_=void 0}=e,{onToggle:b=void 0}=e,{onContextMenu:k=void 0}=e,{onDrop:y=void 0}=e,v={},C=null,T="",S="";const I=["folder","project","client","document","recipe","case"];nl(()=>{for(const P of Object.keys(v))clearTimeout(v[P]);C&&clearInterval(C)});function D(P){return I.includes(P.type)}function N(P,Y,fe){if(!P||!Y||Y===P.id||!D(P))return!1;let ke=P.id;for(;ke;){if(ke===Y)return!1;ke=fe[ke]||""}return!0}function z(P,Y){P.stopPropagation(),P.dataTransfer.effectAllowed="move",P.dataTransfer.setData("text/plain",Y.id),t(21,T=Y.id)}function B(P,Y){P.preventDefault(),P.stopPropagation(),P.dataTransfer.dropEffect="move",S!==Y.id&&t(8,S=Y.id),Ft(Y)&&!c[Y.id]&&!v[Y.id]&&(v[Y.id]=setTimeout(()=>{b&&b(Y.id),delete v[Y.id]},600));const fe=P.currentTarget.closest(".workspace-tree-area");if(fe){const ke=fe.getBoundingClientRect(),be=30;P.clientY-ke.top{fe.scrollTop-=10},50)):ke.bottom-P.clientY{fe.scrollTop+=10},50)):C&&(clearInterval(C),C=null)}}function M(P,Y){const fe=P.relatedTarget;fe&&P.currentTarget.contains(fe)||(S===Y.id&&t(8,S=""),v[Y.id]&&(clearTimeout(v[Y.id]),delete v[Y.id]),C&&(clearInterval(C),C=null))}function j(P,Y){P.preventDefault(),P.stopPropagation(),v[Y.id]&&(clearTimeout(v[Y.id]),delete v[Y.id]),C&&(clearInterval(C),C=null);const fe=Gl(a),ke=Kl(fe),be=xa(P);if(!N(Y,be,ke)){t(8,S=""),t(21,T="");return}y&&y(be,Y.id),t(8,S=""),t(21,T="")}function H(){t(8,S=""),t(21,T="");for(const P of Object.keys(v))clearTimeout(v[P]),delete v[P];C&&(clearInterval(C),C=null)}function R(P,Y){P.target.closest(".tree-toggle")||P.target.closest(".tree-icon")||_&&_(Y)}function V(P,Y){Ft(Y)&&b&&b(Y.id)}function W(P,Y){(P.key==="Enter"||P.key===" ")&&(P.preventDefault(),_&&_(Y))}function J(P,Y){P.stopPropagation(),Ft(Y)&&b&&b(Y.id)}function U(P,Y){(P.key==="Enter"||P.key===" ")&&(P.preventDefault(),P.stopPropagation(),Ft(Y)&&b&&b(Y.id))}function Z(P,Y){(P.key==="Enter"||P.key===" ")&&(P.preventDefault(),_&&_(Y))}function x(P,Y,fe){const ke={};function be(ae){for(const We of ae)ke[We.id]=N(We,Y,fe),We.children&&be(We.children)}return be(P),ke}function q(P){_i.call(this,l,P)}const K=P=>b&&b(P.id),X=(P,Y)=>J(Y,P),O=(P,Y)=>U(Y,P),se=P=>_&&_(P),ge=(P,Y)=>Z(Y,P),ee=(P,Y)=>z(Y,P),le=(P,Y)=>B(Y,P),ie=(P,Y)=>M(Y,P),ce=(P,Y)=>j(Y,P),De=(P,Y)=>R(Y,P),pe=(P,Y)=>W(Y,P),we=(P,Y)=>V(Y,P),ve=(P,Y)=>k&&k(Y,P);return l.$$set=P=>{"nodes"in P&&t(0,a=P.nodes),"expanded"in P&&t(1,c=P.expanded),"selectedNodeId"in P&&t(2,f=P.selectedNodeId),"level"in P&&t(3,d=P.level),"onSelect"in P&&t(4,_=P.onSelect),"onToggle"in P&&t(5,b=P.onToggle),"onContextMenu"in P&&t(6,k=P.onContextMenu),"onDrop"in P&&t(7,y=P.onDrop)},l.$$.update=()=>{l.$$.dirty[0]&1&&t(23,n=Gl(a)),l.$$.dirty[0]&8388608&&t(22,o=Kl(n)),l.$$.dirty[0]&14680064&&t(9,s=x(n,T,o))},[a,c,f,d,_,b,k,y,S,s,z,B,M,j,H,R,V,W,J,U,Z,T,o,n,q,K,X,O,se,ge,ee,le,ie,ce,De,pe,we,ve]}class Ni extends pt{constructor(e){super(),dt(this,e,$a,Qa,ut,{nodes:0,expanded:1,selectedNodeId:2,level:3,onSelect:4,onToggle:5,onContextMenu:6,onDrop:7},null,[-1,-1])}}function ql(l,e,t){const n=l.slice();return n[231]=e[t],n}function Yl(l,e,t){const n=l.slice();return n[234]=e[t],n}function Xl(l,e,t){const n=l.slice();return n[234]=e[t],n}function Jl(l,e,t){const n=l.slice();return n[258]=e[t],n}function Zl(l,e,t){const n=l.slice();return n[258]=e[t],n}function Ql(l,e,t){const n=l.slice();return n[266]=e[t],n}function xl(l,e,t){const n=l.slice();return n[258]=e[t],n}function $l(l,e,t){const n=l.slice();return n[258]=e[t],n}function en(l,e,t){const n=l.slice();return n[239]=e[t],n}function tn(l,e,t){const n=l.slice();return n[255]=e[t],n}function ln(l,e,t){const n=l.slice();return n[250]=e[t],n}function nn(l,e,t){const n=l.slice();return n[247]=e[t],n}function on(l,e,t){const n=l.slice();return n[242]=e[t],n}function sn(l,e,t){const n=l.slice();return n[239]=e[t],n}function an(l,e,t){const n=l.slice();return n[242]=e[t],n}function rn(l,e,t){const n=l.slice();return n[261]=e[t],n}function cn(l,e,t){const n=l.slice();return n[273]=e[t],n}function fn(l,e,t){const n=l.slice();return n[276]=e[t],n}function un(l){let e,t=l[276].label+"",n,o,s,a,c;function f(){return l[133](l[276])}return{c(){e=u("button"),n=A(t),o=g(),i(e,"class",s="nav-item "+(l[8]===l[276].id?"selected":"")+" svelte-eykba5")},m(d,_){w(d,e,_),r(e,n),r(e,o),a||(c=E(e,"click",f),a=!0)},p(d,_){l=d,_[0]&1&&t!==(t=l[276].label+"")&&G(n,t),_[0]&257&&s!==(s="nav-item "+(l[8]===l[276].id?"selected":"")+" svelte-eykba5")&&i(e,"class",s)},d(d){d&&h(e),a=!1,c()}}}function er(l){let e;return{c(){e=u("div"),e.textContent=`${m("nav.noNodes")}`,i(e,"class","nav-empty svelte-eykba5")},m(t,n){w(t,e,n)},p:te,i:te,o:te,d(t){t&&h(e)}}}function tr(l){var a;let e,t,n,o,s;return t=new Ni({props:{nodes:l[1],expanded:l[33],selectedNodeId:((a=l[9])==null?void 0:a.id)||"",onSelect:l[64],onToggle:l[94],onContextMenu:l[92],onDrop:l[95]}}),{c(){e=u("div"),et(t.$$.fragment),i(e,"class","workspace-tree-area svelte-eykba5"),i(e,"role","region"),i(e,"aria-label",m("nav.workspace")),Ke(e,"drop-valid",l[44])},m(c,f){w(c,e,f),Qe(t,e,null),n=!0,o||(s=[E(e,"dragover",tl(l[97])),E(e,"dragleave",l[98]),E(e,"drop",l[96])],o=!0)},p(c,f){var _;const d={};f[0]&2&&(d.nodes=c[1]),f[1]&4&&(d.expanded=c[33]),f[0]&512&&(d.selectedNodeId=((_=c[9])==null?void 0:_.id)||""),t.$set(d),(!n||f[1]&8192)&&Ke(e,"drop-valid",c[44])},i(c){n||(oe(t.$$.fragment,c),n=!0)},o(c){re(t.$$.fragment,c),n=!1},d(c){c&&h(e),xe(t),o=!1,_e(s)}}}function lr(l){let e;return{c(){e=u("span"),e.textContent=`${m("nav.selectPrompt")}`,i(e,"class","crumb placeholder svelte-eykba5")},m(t,n){w(t,e,n)},p:te,d(t){t&&h(e)}}}function nr(l){let e,t=de(l[0]),n=[];for(let o=0;o0&&mn(l);return{c(){e=u("button"),t=L("svg"),n=L("polyline"),o=L("polyline"),s=L("path"),a=g(),d&&d.c(),i(n,"points","23 4 23 10 17 10"),i(n,"class","svelte-eykba5"),i(o,"points","1 20 1 14 7 14"),i(o,"class","svelte-eykba5"),i(s,"d","M3.51 9a9 9 0 0 1 14.85-3.36L23 10M1 14l4.64 4.36A9 9 0 0 0 20.49 15"),i(s,"class","svelte-eykba5"),i(t,"width","16"),i(t,"height","16"),i(t,"viewBox","0 0 24 24"),i(t,"fill","none"),i(t,"stroke","currentColor"),i(t,"stroke-width","2"),i(t,"stroke-linecap","round"),i(t,"stroke-linejoin","round"),i(t,"class","svelte-eykba5"),i(e,"class","header-sync-btn svelte-eykba5"),e.disabled=l[55],i(e,"title",m("nav.syncNow"))},m(_,b){w(_,e,b),r(e,t),r(t,n),r(t,o),r(t,s),r(e,a),d&&d.m(e,null),c||(f=E(e,"click",l[131]),c=!0)},p(_,b){_[54].unpushedOps>0?d?d.p(_,b):(d=mn(_),d.c(),d.m(e,null)):d&&(d.d(1),d=null),b[1]&16777216&&(e.disabled=_[55])},d(_){_&&h(e),d&&d.d(),c=!1,f()}}}function mn(l){let e,t=l[54].unpushedOps+"",n;return{c(){e=u("span"),n=A(t),i(e,"class","sync-badge svelte-eykba5")},m(o,s){w(o,e,s),r(e,n)},p(o,s){s[1]&8388608&&t!==(t=o[54].unpushedOps+"")&&G(n,t)},d(o){o&&h(e)}}}function _n(l){let e,t,n,o,s,a;return{c(){e=u("div"),t=A(l[7]),n=g(),o=u("button"),o.innerHTML='',i(o,"class","dismiss-btn svelte-eykba5"),i(o,"aria-label","Dismiss"),i(e,"class","error-banner svelte-eykba5"),i(e,"role","button"),i(e,"tabindex","0")},m(c,f){w(c,e,f),r(e,t),r(e,n),r(e,o),s||(a=[E(o,"click",$e(l[134])),E(e,"click",l[135]),E(e,"keydown",function(){jt(it(l[136]))&&it(l[136]).apply(this,arguments)})],s=!0)},p(c,f){l=c,f[0]&128&&G(t,l[7])},d(c){c&&h(e),s=!1,_e(a)}}}function or(l){let e,t,n;function o(c,f){if(c[29])return dr;if(c[0].length>0)return ur;if(c[7])return fr}let s=o(l),a=s&&s(l);return{c(){e=u("div"),t=u("h2"),t.textContent=`${m("welcome.title")}`,n=g(),a&&a.c(),i(t,"class","svelte-eykba5"),i(e,"class","welcome svelte-eykba5")},m(c,f){w(c,e,f),r(e,t),r(e,n),a&&a.m(e,null)},p(c,f){s===(s=o(c))&&a?a.p(c,f):(a&&a.d(1),a=s&&s(c),a&&(a.c(),a.m(e,null)))},i:te,o:te,d(c){c&&h(e),a&&a.d()}}}function sr(l){let e,t,n,o;function s(f,d){return f[4].length===0?mr:pr}let a=s(l),c=a(l);return{c(){e=u("div"),t=u("div"),n=u("h2"),n.textContent=`${m("activity.title")}`,o=g(),c.c(),i(n,"class","svelte-eykba5"),i(t,"class","activity-feed-header svelte-eykba5"),i(e,"class","activity-feed svelte-eykba5")},m(f,d){w(f,e,d),r(e,t),r(t,n),r(e,o),c.m(e,null)},p(f,d){a===(a=s(f))&&c?c.p(f,d):(c.d(1),c=a(f),c&&(c.c(),c.m(e,null)))},i:te,o:te,d(f){f&&h(e),c.d()}}}function ar(l){let e,t,n,o,s,a=l[3].date+"",c,f,d,_=l[3].summary&&bn(l);function b(v,C){return v[3].groups&&v[3].groups.length>0?vr:_r}let k=b(l),y=k(l);return{c(){e=u("div"),t=u("div"),n=u("h2"),n.textContent=`${m("today.title")}`,o=g(),s=u("span"),c=A(a),f=g(),_&&_.c(),d=g(),y.c(),i(n,"class","svelte-eykba5"),i(s,"class","today-date svelte-eykba5"),i(t,"class","today-header svelte-eykba5"),i(e,"class","today-dashboard svelte-eykba5")},m(v,C){w(v,e,C),r(e,t),r(t,n),r(t,o),r(t,s),r(s,c),r(e,f),_&&_.m(e,null),r(e,d),y.m(e,null)},p(v,C){C[0]&8&&a!==(a=v[3].date+"")&&G(c,a),v[3].summary?_?_.p(v,C):(_=bn(v),_.c(),_.m(e,d)):_&&(_.d(1),_=null),k===(k=b(v))&&y?y.p(v,C):(y.d(1),y=k(v),y&&(y.c(),y.m(e,null)))},i:te,o:te,d(v){v&&h(e),_&&_.d(),y.d()}}}function rr(l){let e,t,n,o,s,a,c=de(l[62]),f=[];for(let k=0;k{_[v]=null}),Xe()),~o?(s=_[o],s?s.p(k,y):(s=_[o]=d[o](k),s.c()),oe(s,1),s.m(n,null)):s=null)},i(k){a||(oe(s),a=!0)},o(k){re(s),a=!1},d(k){k&&(h(e),h(t),h(n)),Ge(f,k),~o&&_[o].d()}}}function cr(l){let e,t,n,o=l[12].title+"",s,a,c,f,d,_,b,k,y,v,C,T=l[12].dirty&&Gn();return{c(){e=u("div"),t=u("div"),n=u("span"),s=A(o),a=g(),T&&T.c(),c=g(),f=u("div"),d=u("button"),d.textContent=`${m("common.save")}`,_=g(),b=u("button"),b.textContent=`${m("common.close")}`,k=g(),y=u("textarea"),i(n,"class","note-title svelte-eykba5"),i(d,"class","btn btn-primary svelte-eykba5"),i(b,"class","btn svelte-eykba5"),i(f,"class","note-editor-actions svelte-eykba5"),i(t,"class","note-editor-header svelte-eykba5"),i(y,"class","note-textarea svelte-eykba5"),i(y,"placeholder",m("note.placeholder")),i(e,"class","note-editor svelte-eykba5")},m(S,I){w(S,e,I),r(e,t),r(t,n),r(n,s),r(t,a),T&&T.m(t,null),r(t,c),r(t,f),r(f,d),r(f,_),r(f,b),r(e,k),r(e,y),Le(y,l[12].content),v||(C=[E(d,"click",l[109]),E(b,"click",l[107]),E(y,"input",l[137]),E(y,"input",l[108])],v=!0)},p(S,I){I[0]&4096&&o!==(o=S[12].title+"")&&G(s,o),S[12].dirty?T||(T=Gn(),T.c(),T.m(t,c)):T&&(T.d(1),T=null),I[0]&4096&&Le(y,S[12].content)},i:te,o:te,d(S){S&&h(e),T&&T.d(),v=!1,_e(C)}}}function fr(l){let e,t=m("common.error")+"",n,o,s;return{c(){e=u("p"),n=A(t),o=g(),s=A(l[7]),i(e,"class","error-text svelte-eykba5")},m(a,c){w(a,e,c),r(e,n),r(e,o),r(e,s)},p(a,c){c[0]&128&&G(s,a[7])},d(a){a&&h(e)}}}function ur(l){let e,t,n;return{c(){e=u("p"),e.textContent=`${m("welcome.selectSection")}`,t=g(),n=u("p"),n.textContent=`${m("welcome.createCase")}`,i(e,"class","svelte-eykba5"),i(n,"class","hint svelte-eykba5")},m(o,s){w(o,e,s),w(o,t,s),w(o,n,s)},p:te,d(o){o&&(h(e),h(t),h(n))}}}function dr(l){let e;return{c(){e=u("p"),e.textContent=`${m("common.loading")}`,i(e,"class","svelte-eykba5")},m(t,n){w(t,e,n)},p:te,d(t){t&&h(e)}}}function pr(l){let e,t=de(l[4]),n=[];for(let o=0;o0&&yn(l),s=l[3].summary.notes>0&&hn(l),a=l[3].summary.files>0&&gn(l);return{c(){e=u("div"),o&&o.c(),t=g(),s&&s.c(),n=g(),a&&a.c(),i(e,"class","today-summary svelte-eykba5")},m(c,f){w(c,e,f),o&&o.m(e,null),r(e,t),s&&s.m(e,null),r(e,n),a&&a.m(e,null)},p(c,f){c[3].summary.changedCases>0?o?o.p(c,f):(o=yn(c),o.c(),o.m(e,t)):o&&(o.d(1),o=null),c[3].summary.notes>0?s?s.p(c,f):(s=hn(c),s.c(),s.m(e,n)):s&&(s.d(1),s=null),c[3].summary.files>0?a?a.p(c,f):(a=gn(c),a.c(),a.m(e,null)):a&&(a.d(1),a=null)},d(c){c&&h(e),o&&o.d(),s&&s.d(),a&&a.d()}}}function yn(l){let e,t=l[3].summary.changedCases+"",n,o,s=ft(l[3].summary.changedCases,m("today.plural.case_one"),m("today.plural.case_few"),m("today.plural.case_many"))+"",a;return{c(){e=u("span"),n=A(t),o=g(),a=A(s),i(e,"class","summary-chip svelte-eykba5")},m(c,f){w(c,e,f),r(e,n),r(e,o),r(e,a)},p(c,f){f[0]&8&&t!==(t=c[3].summary.changedCases+"")&&G(n,t),f[0]&8&&s!==(s=ft(c[3].summary.changedCases,m("today.plural.case_one"),m("today.plural.case_few"),m("today.plural.case_many"))+"")&&G(a,s)},d(c){c&&h(e)}}}function hn(l){let e,t=l[3].summary.notes+"",n,o,s=ft(l[3].summary.notes,m("today.plural.note_one"),m("today.plural.note_few"),m("today.plural.note_many"))+"",a;return{c(){e=u("span"),n=A(t),o=g(),a=A(s),i(e,"class","summary-chip svelte-eykba5")},m(c,f){w(c,e,f),r(e,n),r(e,o),r(e,a)},p(c,f){f[0]&8&&t!==(t=c[3].summary.notes+"")&&G(n,t),f[0]&8&&s!==(s=ft(c[3].summary.notes,m("today.plural.note_one"),m("today.plural.note_few"),m("today.plural.note_many"))+"")&&G(a,s)},d(c){c&&h(e)}}}function gn(l){let e,t=l[3].summary.files+"",n,o,s=ft(l[3].summary.files,m("today.plural.file_one"),m("today.plural.file_few"),m("today.plural.file_many"))+"",a;return{c(){e=u("span"),n=A(t),o=g(),a=A(s),i(e,"class","summary-chip svelte-eykba5")},m(c,f){w(c,e,f),r(e,n),r(e,o),r(e,a)},p(c,f){f[0]&8&&t!==(t=c[3].summary.files+"")&&G(n,t),f[0]&8&&s!==(s=ft(c[3].summary.files,m("today.plural.file_one"),m("today.plural.file_few"),m("today.plural.file_many"))+"")&&G(a,s)},d(c){c&&h(e)}}}function _r(l){let e,t,n,o;return{c(){e=u("div"),t=u("p"),t.textContent=`${m("today.empty")}`,n=g(),o=u("p"),o.textContent=`${m("today.emptyHint")}`,i(t,"class","svelte-eykba5"),i(o,"class","hint svelte-eykba5"),i(e,"class","today-empty svelte-eykba5")},m(s,a){w(s,e,a),r(e,t),r(e,n),r(e,o)},p:te,d(s){s&&h(e)}}}function vr(l){let e,t,n=de(l[3].groups),o=[];for(let a=0;a0&&Nn(l);return{c(){for(let a=0;a0?s?s.p(a,c):(s=Nn(a),s.c(),s.m(t.parentNode,t)):s&&(s.d(1),s=null)},d(a){a&&(h(e),h(t)),Ge(o,a),s&&s.d(a)}}}function wn(l){let e,t=l[266].events.length+"",n,o,s=ft(l[266].events.length,m("today.plural.event_one"),m("today.plural.event_few"),m("today.plural.event_many"))+"",a;return{c(){e=u("span"),n=A(t),o=g(),a=A(s),i(e,"class","today-case-count svelte-eykba5")},m(c,f){w(c,e,f),r(e,n),r(e,o),r(e,a)},p(c,f){f[0]&8&&t!==(t=c[266].events.length+"")&&G(n,t),f[0]&8&&s!==(s=ft(c[266].events.length,m("today.plural.event_one"),m("today.plural.event_few"),m("today.plural.event_many"))+"")&&G(a,s)},d(c){c&&h(e)}}}function kr(l){let e;return{c(){e=u("div"),e.textContent=`${m("today.changedCases")}`,i(e,"class","today-events-empty svelte-eykba5")},m(t,n){w(t,e,n)},p:te,d(t){t&&h(e)}}}function br(l){let e,t=de(l[266].events),n=[];for(let o=0;o0?br:kr}let B=z(l),M=B(l);return{c(){e=u("div"),t=u("div"),n=u("span"),s=A(o),a=g(),c=u("span"),d=A(f),_=g(),I&&I.c(),b=g(),k=u("span"),v=A(y),C=g(),M.c(),i(n,"class","today-case-title svelte-eykba5"),i(c,"class","today-case-type svelte-eykba5"),i(k,"class","today-case-time svelte-eykba5"),i(t,"class","today-case-header svelte-eykba5"),i(t,"role","button"),i(t,"tabindex","0"),i(e,"class","today-case svelte-eykba5")},m(j,H){w(j,e,H),r(e,t),r(t,n),r(n,s),r(t,a),r(t,c),r(c,d),r(t,_),I&&I.m(t,null),r(t,b),r(t,k),r(k,v),r(e,C),M.m(e,null),T||(S=[E(t,"click",D),E(t,"keydown",N)],T=!0)},p(j,H){l=j,H[0]&8&&o!==(o=l[266].nodeTitle+"")&&G(s,o),H[0]&8&&f!==(f=l[118](l[266].nodeKind)+"")&&G(d,f),l[266].events?I?I.p(l,H):(I=wn(l),I.c(),I.m(t,b)):I&&(I.d(1),I=null),H[0]&8&&y!==(y=at(l[266].lastActivityAt)+"")&&G(v,y),B===(B=z(l))&&M?M.p(l,H):(M.d(1),M=B(l),M&&(M.c(),M.m(e,null)))},d(j){j&&h(e),I&&I.d(),M.d(),T=!1,_e(S)}}}function Nn(l){let e,t,n,o=de(l[3].events),s=[];for(let a=0;a0,y,v,C,T=k&&En(l);function S(N,z){return N[14].length===0?Mr:Dr}let I=S(l),D=I(l);return{c(){e=u("div"),t=u("div"),n=u("input"),o=g(),s=u("input"),a=g(),c=u("button"),d=A(f),b=g(),T&&T.c(),y=g(),D.c(),i(n,"type","text"),i(n,"placeholder",m("worklog.whatDone")),i(n,"class","svelte-eykba5"),i(s,"type","number"),i(s,"placeholder",m("worklog.minutes")),i(s,"min","1"),i(s,"class","svelte-eykba5"),i(c,"class","btn btn-primary svelte-eykba5"),c.disabled=_=!l[16].trim()||!l[15],i(t,"class","worklog-form svelte-eykba5"),i(e,"class","worklog-tab svelte-eykba5")},m(N,z){w(N,e,z),r(e,t),r(t,n),Le(n,l[16]),r(t,o),r(t,s),Le(s,l[15]),r(t,a),r(t,c),r(c,d),r(e,b),T&&T.m(e,null),r(e,y),D.m(e,null),v||(C=[E(n,"input",l[164]),E(s,"input",l[165]),E(c,"click",l[110])],v=!0)},p(N,z){z[0]&65536&&n.value!==N[16]&&Le(n,N[16]),z[0]&32768&&Bt(s.value)!==N[15]&&Le(s,N[15]),z[0]&98304&&_!==(_=!N[16].trim()||!N[15])&&(c.disabled=_),z[0]&131584&&(k=N[9]&&N[17].filter(N[132]).length>0),k?T?T.p(N,z):(T=En(N),T.c(),T.m(e,y)):T&&(T.d(1),T=null),I===(I=S(N))&&D?D.p(N,z):(D.d(1),D=I(N),D&&(D.c(),D.m(e,null)))},i:te,o:te,d(N){N&&h(e),T&&T.d(),D.d(),v=!1,_e(C)}}}function gr(l){let e,t,n,o,s,a;function c(_,b){return _[13].length===0?Fr:Ir}let f=c(l),d=f(l);return{c(){e=u("div"),t=u("div"),n=u("button"),n.textContent=`${m("action.addAction")}`,o=g(),d.c(),i(n,"class","btn btn-primary svelte-eykba5"),i(t,"class","tab-toolbar svelte-eykba5"),i(e,"class","actions-tab svelte-eykba5")},m(_,b){w(_,e,b),r(e,t),r(t,n),r(e,o),d.m(e,null),s||(a=E(n,"click",l[119]),s=!0)},p(_,b){f===(f=c(_))&&d?d.p(_,b):(d.d(1),d=f(_),d&&(d.c(),d.m(e,null)))},i:te,o:te,d(_){_&&h(e),d.d(),s=!1,a()}}}function wr(l){let e,t,n,o=m("file.addFile")+"",s,a,c,f=m("file.addFolder")+"",d,_,b,k,y,v,C,T,S,I,D,N,z,B=l[42].items.length>0&&Pn(l);const M=[Ar,Er],j=[];function H(W,J){return W[34]?0:1}v=H(l),C=j[v]=M[v](l);let R=l[30]&&!l[32]&&zn(),V=l[38]&&Bn(l);return{c(){e=u("div"),t=u("div"),n=u("button"),s=A(o),a=g(),c=u("button"),d=A(f),_=g(),b=u("button"),b.textContent=`${m("file.newFile")}`,k=g(),B&&B.c(),y=g(),C.c(),T=g(),R&&R.c(),S=g(),V&&V.c(),I=st(),i(n,"class","btn btn-primary svelte-eykba5"),n.disabled=l[30],i(c,"class","btn svelte-eykba5"),c.disabled=l[30],i(b,"class","btn svelte-eykba5"),i(t,"class","tab-toolbar svelte-eykba5"),i(e,"class","files-tab svelte-eykba5")},m(W,J){w(W,e,J),r(e,t),r(t,n),r(n,s),r(t,a),r(t,c),r(c,d),r(t,_),r(t,b),r(t,k),B&&B.m(t,null),r(e,y),j[v].m(e,null),r(e,T),R&&R.m(e,null),w(W,S,J),V&&V.m(W,J),w(W,I,J),D=!0,N||(z=[E(n,"click",l[112]),E(c,"click",l[113]),E(b,"click",l[71])],N=!0)},p(W,J){(!D||J[0]&1073741824)&&(n.disabled=W[30]),(!D||J[0]&1073741824)&&(c.disabled=W[30]),W[42].items.length>0?B?B.p(W,J):(B=Pn(W),B.c(),B.m(t,null)):B&&(B.d(1),B=null);let U=v;v=H(W),v===U?j[v].p(W,J):(Ye(),re(j[U],1,1,()=>{j[U]=null}),Xe(),C=j[v],C?C.p(W,J):(C=j[v]=M[v](W),C.c()),oe(C,1),C.m(e,T)),W[30]&&!W[32]?R||(R=zn(),R.c(),R.m(e,null)):R&&(R.d(1),R=null),W[38]?V?(V.p(W,J),J[1]&128&&oe(V,1)):(V=Bn(W),V.c(),oe(V,1),V.m(I.parentNode,I)):V&&(Ye(),re(V,1,1,()=>{V=null}),Xe())},i(W){D||(oe(C),oe(V),D=!0)},o(W){re(C),re(V),D=!1},d(W){W&&(h(e),h(S),h(I)),B&&B.d(),j[v].d(),R&&R.d(),V&&V.d(W),N=!1,_e(z)}}}function Cr(l){let e,t,n,o,s,a,c,f=l[23]&&Rn(l);function d(k,y){return k[11].length===0&&!k[23]?Br:zr}let _=d(l),b=_(l);return{c(){e=u("div"),t=u("div"),n=u("button"),n.textContent=`${m("note.add")}`,o=g(),f&&f.c(),s=g(),b.c(),i(n,"class","btn btn-primary svelte-eykba5"),i(t,"class","tab-toolbar svelte-eykba5"),i(e,"class","notes-tab svelte-eykba5")},m(k,y){w(k,e,y),r(e,t),r(t,n),r(e,o),f&&f.m(e,null),r(e,s),b.m(e,null),a||(c=E(n,"click",l[103]),a=!0)},p(k,y){k[23]?f?f.p(k,y):(f=Rn(k),f.c(),f.m(e,s)):f&&(f.d(1),f=null),_===(_=d(k))&&b?b.p(k,y):(b.d(1),b=_(k),b&&(b.c(),b.m(e,null)))},i:te,o:te,d(k){k&&h(e),f&&f.d(),b.d(),a=!1,c()}}}function Sr(l){let e,t,n=l[9].title+"",o,s,a,c,f,d,_=l[118](l[9].type)+"",b,k,y,v,C,T=(l[9].section||"—")+"",S,I,D,N,z,B=rt(l[9].createdAt)+"",M,j,H,R,V,W,J,U,Z=m("overview.newNote")+"",x,q,K,X,O,se,ge=m("overview.addFile")+"",ee,le,ie,ce,De,pe,we=m("overview.addAction")+"",ve,P,Y,fe,ke,be,ae,We=m("overview.logTime")+"",tt,qe,he,ze,Oe,je=l[11].length>0&&Vn(l),Me=l[14].length>0&&Wn(l);return{c(){e=u("div"),t=u("h2"),o=A(n),s=g(),a=u("div"),c=u("div"),f=u("span"),f.textContent=`${m("overview.type")}`,d=u("span"),b=A(_),k=g(),y=u("div"),v=u("span"),v.textContent=`${m("overview.section")}`,C=u("span"),S=A(T),I=g(),D=u("div"),N=u("span"),N.textContent=`${m("overview.created")}`,z=u("span"),M=A(B),j=g(),H=u("div"),R=u("button"),V=L("svg"),W=L("path"),J=L("path"),U=g(),x=A(Z),q=g(),K=u("button"),X=L("svg"),O=L("path"),se=g(),ee=A(ge),le=g(),ie=u("button"),ce=L("svg"),De=L("polygon"),pe=g(),ve=A(we),P=g(),Y=u("button"),fe=L("svg"),ke=L("circle"),be=L("polyline"),ae=g(),tt=A(We),qe=g(),je&&je.c(),he=g(),Me&&Me.c(),i(t,"class","svelte-eykba5"),i(f,"class","meta-label svelte-eykba5"),i(d,"class","svelte-eykba5"),i(c,"class","meta-item svelte-eykba5"),i(v,"class","meta-label svelte-eykba5"),i(C,"class","svelte-eykba5"),i(y,"class","meta-item svelte-eykba5"),i(N,"class","meta-label svelte-eykba5"),i(z,"class","svelte-eykba5"),i(D,"class","meta-item svelte-eykba5"),i(a,"class","meta-grid svelte-eykba5"),i(W,"d","M12 20h9"),i(W,"class","svelte-eykba5"),i(J,"d","M16.5 3.5a2.121 2.121 0 0 1 3 3L7 19l-4 1 1-4L16.5 3.5z"),i(J,"class","svelte-eykba5"),i(V,"width","16"),i(V,"height","16"),i(V,"viewBox","0 0 24 24"),i(V,"fill","none"),i(V,"stroke","currentColor"),i(V,"stroke-width","2"),i(V,"stroke-linecap","round"),i(V,"stroke-linejoin","round"),i(V,"class","svelte-eykba5"),i(R,"class","qa-btn svelte-eykba5"),i(O,"d","M21.44 11.05l-9.19 9.19a6 6 0 0 1-8.49-8.49l9.19-9.19a4 4 0 0 1 5.66 5.66l-9.2 9.19a2 2 0 0 1-2.83-2.83l8.49-8.48"),i(O,"class","svelte-eykba5"),i(X,"width","16"),i(X,"height","16"),i(X,"viewBox","0 0 24 24"),i(X,"fill","none"),i(X,"stroke","currentColor"),i(X,"stroke-width","2"),i(X,"stroke-linecap","round"),i(X,"stroke-linejoin","round"),i(X,"class","svelte-eykba5"),i(K,"class","qa-btn svelte-eykba5"),i(De,"points","13 2 3 14 12 14 11 22 21 10 12 10 13 2"),i(De,"class","svelte-eykba5"),i(ce,"width","16"),i(ce,"height","16"),i(ce,"viewBox","0 0 24 24"),i(ce,"fill","none"),i(ce,"stroke","currentColor"),i(ce,"stroke-width","2"),i(ce,"stroke-linecap","round"),i(ce,"stroke-linejoin","round"),i(ce,"class","svelte-eykba5"),i(ie,"class","qa-btn svelte-eykba5"),i(ke,"cx","12"),i(ke,"cy","12"),i(ke,"r","10"),i(ke,"class","svelte-eykba5"),i(be,"points","12 6 12 12 16 14"),i(be,"class","svelte-eykba5"),i(fe,"width","16"),i(fe,"height","16"),i(fe,"viewBox","0 0 24 24"),i(fe,"fill","none"),i(fe,"stroke","currentColor"),i(fe,"stroke-width","2"),i(fe,"stroke-linecap","round"),i(fe,"stroke-linejoin","round"),i(fe,"class","svelte-eykba5"),i(Y,"class","qa-btn svelte-eykba5"),i(H,"class","quick-actions svelte-eykba5"),i(e,"class","overview svelte-eykba5")},m(Te,Ne){w(Te,e,Ne),r(e,t),r(t,o),r(e,s),r(e,a),r(a,c),r(c,f),r(c,d),r(d,b),r(a,k),r(a,y),r(y,v),r(y,C),r(C,S),r(a,I),r(a,D),r(D,N),r(D,z),r(z,M),r(e,j),r(e,H),r(H,R),r(R,V),r(V,W),r(V,J),r(R,U),r(R,x),r(H,q),r(H,K),r(K,X),r(X,O),r(K,se),r(K,ee),r(H,le),r(H,ie),r(ie,ce),r(ce,De),r(ie,pe),r(ie,ve),r(H,P),r(H,Y),r(Y,fe),r(fe,ke),r(fe,be),r(Y,ae),r(Y,tt),r(e,qe),je&&je.m(e,null),r(e,he),Me&&Me.m(e,null),ze||(Oe=[E(R,"click",l[139]),E(K,"click",l[140]),E(ie,"click",l[119]),E(Y,"click",l[141])],ze=!0)},p(Te,Ne){Ne[0]&512&&n!==(n=Te[9].title+"")&&G(o,n),Ne[0]&512&&_!==(_=Te[118](Te[9].type)+"")&&G(b,_),Ne[0]&512&&T!==(T=(Te[9].section||"—")+"")&&G(S,T),Ne[0]&512&&B!==(B=rt(Te[9].createdAt)+"")&&G(M,B),Te[11].length>0?je?je.p(Te,Ne):(je=Vn(Te),je.c(),je.m(e,he)):je&&(je.d(1),je=null),Te[14].length>0?Me?Me.p(Te,Ne):(Me=Wn(Te),Me.c(),Me.m(e,null)):Me&&(Me.d(1),Me=null)},i:te,o:te,d(Te){Te&&h(e),je&&je.d(),Me&&Me.d(),ze=!1,_e(Oe)}}}function Tr(l){let e,t=de(l[5]),n=[];for(let o=0;o',D=g(),i(n,"class","action-title svelte-eykba5"),i(c,"class","action-type svelte-eykba5"),i(b,"class","action-data svelte-eykba5"),i(t,"class","action-info svelte-eykba5"),i(T,"class","btn btn-sm svelte-eykba5"),i(I,"class","btn btn-sm btn-danger svelte-eykba5"),i(C,"class","action-btns svelte-eykba5"),i(e,"class","action-card svelte-eykba5")},m(j,H){w(j,e,H),r(e,t),r(t,n),r(n,s),r(t,a),r(t,c),r(c,d),r(t,_),r(t,b),r(b,y),r(e,v),r(e,C),r(C,T),r(C,S),r(C,I),r(e,D),N||(z=[E(T,"click",B),E(I,"click",M)],N=!0)},p(j,H){l=j,H[0]&8192&&o!==(o=l[250].title+"")&&G(s,o),H[0]&8192&&f!==(f=l[123](l[250].type)+"")&&G(d,f),H[0]&8192&&k!==(k=l[250].data+"")&&G(y,k)},d(j){j&&h(e),N=!1,_e(z)}}}function Pn(l){let e,t=m("common.paste")+"",n,o,s=l[42].items.length+"",a,c,f;return{c(){e=u("button"),n=A(t),o=g(),a=A(s),i(e,"class","btn svelte-eykba5")},m(d,_){w(d,e,_),r(e,n),r(e,o),r(e,a),c||(f=E(e,"click",l[76]),c=!0)},p(d,_){_[1]&2048&&s!==(s=d[42].items.length+"")&&G(a,s)},d(d){d&&h(e),c=!1,f()}}}function Er(l){let e,t,n,o,s,a,c;const f=[jr,Lr],d=[];function _(v,C){return v[36].length>0?0:1}e=_(l),t=d[e]=f[e](l);const b=[Or,Pr],k=[];function y(v,C){return v[37].length===0?0:1}return o=y(l),s=k[o]=b[o](l),{c(){t.c(),n=g(),s.c(),a=st()},m(v,C){d[e].m(v,C),w(v,n,C),k[o].m(v,C),w(v,a,C),c=!0},p(v,C){let T=e;e=_(v),e===T?d[e].p(v,C):(Ye(),re(d[T],1,1,()=>{d[T]=null}),Xe(),t=d[e],t?t.p(v,C):(t=d[e]=f[e](v),t.c()),oe(t,1),t.m(n.parentNode,n));let S=o;o=y(v),o===S?k[o].p(v,C):(Ye(),re(k[S],1,1,()=>{k[S]=null}),Xe(),s=k[o],s?s.p(v,C):(s=k[o]=b[o](v),s.c()),oe(s,1),s.m(a.parentNode,a))},i(v){c||(oe(t),oe(s),c=!0)},o(v){re(t),re(s),c=!1},d(v){v&&(h(n),h(a)),d[e].d(v),k[o].d(v)}}}function Ar(l){let e,t;return{c(){e=u("div"),t=u("p"),t.textContent=`${m("common.loading")}`,i(t,"class","svelte-eykba5"),i(e,"class","empty-state svelte-eykba5")},m(n,o){w(n,e,o),r(e,t)},p:te,i:te,o:te,d(n){n&&h(e)}}}function Lr(l){let e,t;return e=new Ti({props:{crumbs:[{name:m("file.root")}]}}),{c(){et(e.$$.fragment)},m(n,o){Qe(e,n,o),t=!0},p:te,i(n){t||(oe(e.$$.fragment,n),t=!0)},o(n){re(e.$$.fragment,n),t=!1},d(n){xe(e,n)}}}function jr(l){let e,t,n,o,s,a,c,f=m("common.back")+"",d,_,b,k;return e=new Ti({props:{crumbs:[{name:m("file.root")},...l[36]]}}),e.$on("navigate",l[148]),{c(){et(e.$$.fragment),t=g(),n=u("button"),o=L("svg"),s=L("line"),a=L("polyline"),c=g(),d=A(f),i(s,"x1","19"),i(s,"y1","12"),i(s,"x2","5"),i(s,"y2","12"),i(s,"class","svelte-eykba5"),i(a,"points","12 19 5 12 12 5"),i(a,"class","svelte-eykba5"),i(o,"width","14"),i(o,"height","14"),i(o,"viewBox","0 0 24 24"),i(o,"fill","none"),i(o,"stroke","currentColor"),i(o,"stroke-width","2"),i(o,"stroke-linecap","round"),i(o,"stroke-linejoin","round"),i(o,"class","svelte-eykba5"),i(n,"class","btn btn-sm back-btn svelte-eykba5")},m(y,v){Qe(e,y,v),w(y,t,v),w(y,n,v),r(n,o),r(o,s),r(o,a),r(n,c),r(n,d),_=!0,b||(k=E(n,"click",l[67]),b=!0)},p(y,v){const C={};v[1]&32&&(C.crumbs=[{name:m("file.root")},...y[36]]),e.$set(C)},i(y){_||(oe(e.$$.fragment,y),_=!0)},o(y){re(e.$$.fragment,y),_=!1},d(y){y&&(h(t),h(n)),xe(e,y),b=!1,k()}}}function Pr(l){let e,t=[],n=new Map,o,s=de(l[37]);const a=c=>c[247].id;for(let c=0;c0?m("file.noFiles"):m("file.noFilesCase"))+"",a,c,f,d,_,b,k,y,v,C;return{c(){e=u("div"),t=u("div"),t.innerHTML='',n=g(),o=u("p"),a=A(s),c=g(),f=u("p"),f.textContent=`${m("file.hint")}`,d=g(),_=u("div"),b=u("button"),b.textContent=`${m("file.addFileSimple")}`,k=g(),y=u("button"),y.textContent=`${m("file.addFolderSimple")}`,i(t,"class","empty-icon svelte-eykba5"),i(o,"class","svelte-eykba5"),i(f,"class","hint svelte-eykba5"),i(b,"class","btn btn-primary svelte-eykba5"),i(y,"class","btn svelte-eykba5"),i(_,"class","empty-actions svelte-eykba5"),i(e,"class","empty-state svelte-eykba5")},m(T,S){w(T,e,S),r(e,t),r(e,n),r(e,o),r(o,a),r(e,c),r(e,f),r(e,d),r(e,_),r(_,b),r(_,k),r(_,y),v||(C=[E(b,"click",l[112]),E(y,"click",l[113])],v=!0)},p(T,S){S[1]&32&&s!==(s=(T[36].length>0?m("file.noFiles"):m("file.noFilesCase"))+"")&&G(a,s)},i:te,o:te,d(T){T&&h(e),v=!1,_e(C)}}}function On(l,e){let t,n,o;return n=new ba({props:{item:e[247],selected:e[43].includes(e[247].id),onDragStart:e[80],onDragOver:e[81],onDrop:e[82]}}),n.$on("navigate",e[149]),n.$on("preview",e[150]),n.$on("openExternal",e[151]),n.$on("showInFolder",e[152]),n.$on("delete",e[153]),n.$on("rename",e[154]),n.$on("duplicate",e[155]),n.$on("cut",e[156]),n.$on("copy",e[157]),n.$on("selectOne",e[158]),n.$on("toggleSelect",e[159]),n.$on("rangeSelect",e[160]),{key:l,first:null,c(){t=st(),et(n.$$.fragment),this.first=t},m(s,a){w(s,t,a),Qe(n,s,a),o=!0},p(s,a){e=s;const c={};a[1]&64&&(c.item=e[247]),a[1]&4160&&(c.selected=e[43].includes(e[247].id)),n.$set(c)},i(s){o||(oe(n.$$.fragment,s),o=!0)},o(s){re(n.$$.fragment,s),o=!1},d(s){s&&h(t),xe(n,s)}}}function zn(l){let e,t;return{c(){e=u("div"),t=u("p"),t.textContent=`${m("file.scanning")}`,i(t,"class","svelte-eykba5"),i(e,"class","empty-state svelte-eykba5")},m(n,o){w(n,e,o),r(e,t)},d(n){n&&h(e)}}}function Bn(l){let e,t;return e=new ja({props:{item:l[38],content:l[39],loading:l[40],error:l[41]}}),e.$on("close",l[70]),e.$on("openExternal",l[161]),{c(){et(e.$$.fragment)},m(n,o){Qe(e,n,o),t=!0},p(n,o){const s={};o[1]&128&&(s.item=n[38]),o[1]&256&&(s.content=n[39]),o[1]&512&&(s.loading=n[40]),o[1]&1024&&(s.error=n[41]),e.$set(s)},i(n){t||(oe(e.$$.fragment,n),t=!0)},o(n){re(e.$$.fragment,n),t=!1},d(n){xe(e,n)}}}function Rn(l){let e,t,n,o,s,a,c,f,d;return{c(){e=u("div"),t=u("input"),n=g(),o=u("div"),s=u("button"),s.textContent=`${m("common.create")}`,a=g(),c=u("button"),c.textContent=`${m("common.cancel")}`,i(t,"type","text"),i(t,"placeholder",m("note.title")),i(t,"class","svelte-eykba5"),i(s,"class","btn btn-primary svelte-eykba5"),i(c,"class","btn svelte-eykba5"),i(o,"class","form-actions svelte-eykba5"),i(e,"class","create-form svelte-eykba5")},m(_,b){w(_,e,b),r(e,t),Le(t,l[24]),r(e,n),r(e,o),r(o,s),r(o,a),r(o,c),f||(d=[E(t,"input",l[144]),E(t,"keydown",l[145]),E(s,"click",l[105]),E(c,"click",l[104])],f=!0)},p(_,b){b[0]&16777216&&t.value!==_[24]&&Le(t,_[24])},d(_){_&&h(e),f=!1,_e(d)}}}function zr(l){let e,t=de(l[11]),n=[];for(let o=0;ore(se[ee],1,1,()=>{se[ee]=null});return{c(){e=u("div"),t=u("div"),n=u("h3"),n.textContent=`${m("nav.createNode")}`,o=g(),X&&X.c(),s=g(),a=u("div"),c=u("span"),c.textContent=`${m("template.select")}`,f=g(),d=u("div"),_=u("button"),et(b.$$.fragment),k=g(),y=u("div"),v=u("span"),v.textContent=`${m("template.optionNone")}`,C=g(),T=u("span"),T.textContent=`${m("template.none.desc")}`,S=g();for(let ee=0;ee{v=null}),Xe()),T[22].node&&T[22].node.parent_id?C?C.p(T,S):(C=xn(T),C.c(),C.m(t,s)):C&&(C.d(1),C=null),(!b||S[0]&4194304)&&He(t,"left",T[22].x+"px"),(!b||S[0]&4194304)&&He(t,"top",T[22].y+"px")},i(T){b||(oe(v),b=!0)},o(T){re(v),b=!1},d(T){T&&h(e),v&&v.d(),C&&C.d(),k=!1,_e(y)}}}function Zn(l){let e,t,n,o,s,a=de(l[2].length>0?l[2]:[{id:"",title:"template.optionNone",icon:"folder"}]),c=[];for(let d=0;dre(c[d],1,1,()=>{c[d]=null});return{c(){e=u("div"),e.textContent=`${m("common.create")}`,t=g();for(let d=0;d0?d[2]:[{id:"",title:"template.optionNone",icon:"folder"}]);let b;for(b=0;bl[187].call(C)),i(k,"class","svelte-eykba5"),i(b,"class","form-group svelte-eykba5"),i(D,"class","label-text svelte-eykba5"),i(M,"type","text"),i(M,"placeholder",j=l[27]==="open_url"?m("action.urlPlaceholder"):l[27]==="open_folder"||l[27]==="open_file"?m("action.pathPlaceholder"):m("action.commandPlaceholder")),i(M,"class","svelte-eykba5"),i(I,"class","svelte-eykba5"),i(S,"class","form-group svelte-eykba5"),i(V,"class","btn btn-primary svelte-eykba5"),i(J,"class","btn svelte-eykba5"),i(R,"class","modal-actions svelte-eykba5"),i(t,"class","modal svelte-eykba5"),i(e,"class","modal-overlay svelte-eykba5"),i(e,"role","button"),i(e,"tabindex","0")},m(K,X){w(K,e,X),r(e,t),r(t,n),r(t,o),r(t,s),r(s,a),r(a,c),r(a,f),r(a,d),Le(d,l[26]),r(t,_),r(t,b),r(b,k),r(k,y),r(k,v),r(k,C);for(let O=0;O0?0:1}D=je(l),N=Oe[D]=ze[D](l);function Me(Q,me){return Q[9]?ir:Q[8]?nr:lr}let Te=Me(l),Ne=Te(l),Be=((Je=l[54])==null?void 0:Je.configured)&&pn(l),Ie=l[7]&&_n(l);const lt=[cr,rr,ar,sr,or],Re=[];function Fe(Q,me){return Q[12]?0:Q[9]?1:Q[8]==="today"&&Q[3]?2:Q[8]==="activity"?3:4}De=Fe(l),pe=Re[De]=lt[De](l);let ye=l[18]&&qn(l),Ce=l[22].visible&&Jn(l),Ee=l[25]&&$n(l),Pe=l[32]&&l[31]&&ti(l),Ae=l[50]&&ni(l),ue=l[45]&&oi(l),Ve=l[53]&&si(l);return{c(){var Q;e=u("div"),t=u("aside"),n=u("div"),o=u("span"),o.textContent="⚒",s=g(),a=u("span"),a.textContent=`${m("nav.brand")}`,c=g(),f=u("nav"),d=u("div"),_=u("div"),_.textContent=`${m("nav.system")}`,b=g();for(let me=0;me{Oe[ot]=null}),Xe(),N=Oe[D],N?N.p(Q,me):(N=Oe[D]=ze[D](Q),N.c()),oe(N,1),N.m(y,null)),(!ae||me[1]&8388608)&&Ke(J,"active",(kt=Q[54])==null?void 0:kt.configured),(!ae||me[0]&64)&&G(K,Q[6]),Te===(Te=Me(Q))&&Ne?Ne.p(Q,me):(Ne.d(1),Ne=Te(Q),Ne&&(Ne.c(),Ne.m(ge,null))),(St=Q[54])!=null&&St.configured?Be?Be.p(Q,me):(Be=pn(Q),Be.c(),Be.m(le,null)):Be&&(Be.d(1),Be=null),Q[7]?Ie?Ie.p(Q,me):(Ie=_n(Q),Ie.c(),Ie.m(O,ce)):Ie&&(Ie.d(1),Ie=null);let Ue=De;De=Fe(Q),De===Ue?Re[De].p(Q,me):(Ye(),re(Re[Ue],1,1,()=>{Re[Ue]=null}),Xe(),pe=Re[De],pe?pe.p(Q,me):(pe=Re[De]=lt[De](Q),pe.c()),oe(pe,1),pe.m(O,we)),Q[18]?ye?(ye.p(Q,me),me[0]&262144&&oe(ye,1)):(ye=qn(Q),ye.c(),oe(ye,1),ye.m(O,ve)):ye&&(Ye(),re(ye,1,1,()=>{ye=null}),Xe()),Q[22].visible?Ce?(Ce.p(Q,me),me[0]&4194304&&oe(Ce,1)):(Ce=Jn(Q),Ce.c(),oe(Ce,1),Ce.m(O,P)):Ce&&(Ye(),re(Ce,1,1,()=>{Ce=null}),Xe()),Q[25]?Ee?Ee.p(Q,me):(Ee=$n(Q),Ee.c(),Ee.m(O,Y)):Ee&&(Ee.d(1),Ee=null),Q[32]&&Q[31]?Pe?Pe.p(Q,me):(Pe=ti(Q),Pe.c(),Pe.m(O,fe)):Pe&&(Pe.d(1),Pe=null),Q[50]?Ae?Ae.p(Q,me):(Ae=ni(Q),Ae.c(),Ae.m(O,ke)):Ae&&(Ae.d(1),Ae=null),Q[45]?ue?(ue.p(Q,me),me[1]&16384&&oe(ue,1)):(ue=oi(Q),ue.c(),oe(ue,1),ue.m(O,be)):ue&&(Ye(),re(ue,1,1,()=>{ue=null}),Xe()),Q[53]?Ve?Ve.p(Q,me):(Ve=si(Q),Ve.c(),Ve.m(O,null)):Ve&&(Ve.d(1),Ve=null)},i(Q){ae||(oe(N),oe(pe),oe(ye),oe(Ce),oe(ue),ae=!0)},o(Q){re(N),re(pe),re(ye),re(Ce),re(ue),ae=!1},d(Q){Q&&h(e),Ge(he,Q),Oe[D].d(),Ne.d(),Be&&Be.d(),Ie&&Ie.d(),Re[De].d(),ye&&ye.d(),Ce&&Ce.d(),Ee&&Ee.d(),Pe&&Pe.d(),Ae&&Ae.d(),ue&&ue.d(),Ve&&Ve.d(),We=!1,_e(tt)}}}function $(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 Et(l,e,t){for(const n of l){if(n.id===e)return n.children=t,n.has_children=t.length>0,!0;if(n.children&&Et(n.children,e,t))return!0}return!1}function Di(l,e,t){for(const n of l){if(n.id===e)return n.children=t,n.has_children=t.length>0,!0;if(n.children&&Di(n.children,e,t))return!0}return!1}function Ct(l){return l==="note_created"||l==="file_added"||l==="folder_added"||l==="node_created"?"+":l==="file_deleted"||l==="folder_deleted"?"×":l==="file_renamed"||l==="folder_renamed"||l==="note_updated"||l==="node_updated"?"~":l==="file_copied"?"⧉":l==="file_moved"?"→":"•"}function at(l){if(!l)return"";try{return new Date(l).toLocaleTimeString("ru-RU",{hour:"2-digit",minute:"2-digit"})}catch{return""}}function rt(l){if(!l)return"";try{return new Date(l).toLocaleDateString("ru-RU",{day:"numeric",month:"short"})}catch{return l}}function ft(l,e,t,n){return l=Math.abs(l)%100,l>=5&&l<=20?n:(l%=10,l===1?e:l>=2&&l<=4?t:n)}function it(l){return e=>{(e.key==="Enter"||e.key===" ")&&(e.preventDefault(),l())}}function qr(l,e,t){let n=[],o=[],s=[],a=null,c=[],f=0,d=!0,_=[],b="",k="",y="",v=null,C="overview",T=[],S=null,I=[],D=[],N=[],z="",B="",M=[],j=!1,H="",R=null,V=null,W={visible:!1,x:0,y:0,node:null},J=!1,U="",Z=!1,x="",q="open_url",K="",X=[{id:"open_url",label:m("action.openUrl")},{id:"open_file",label:m("action.openFile")},{id:"open_folder",label:m("action.openFolder")},{id:"run_command",label:m("action.runCommand")},{id:"run_script",label:m("action.runScript")},{id:"open_terminal",label:m("action.openTerminal")},{id:"launch_app",label:m("action.launchApp")}],O=!0,se=!1,ge=null,ee=!1,le="",ie="",ce={},De=!1,pe=null,we=[],ve=[],P=null,Y="",fe=!1,ke="",be={items:[],mode:"copy"},ae=[],We=[],tt=!1,qe=!1,he="",ze="",Oe=!1,je=m("common.delete"),Me=null,Te=null,Ne=!1,Be="",Ie="",lt="",Re=!1,Fe=null,ye=!1,Ce="",Ee="",Pe="",Ae=0,ue="";const Ve=[{id:"overview",label:m("tab.overview")},{id:"notes",label:m("tab.notes")},{id:"files",label:m("tab.files")},{id:"actions",label:m("tab.actions")},{id:"worklog",label:m("tab.worklog")},{id:"activity",label:m("tab.activity")}];let Je=null;mi(async()=>{try{t(6,b=await $("VerstakVersion")||"verstak-gui/v2"),t(0,n=await $("ListSystemViews")||[]),t(1,o=await $("ListWorkspaceTree")||[]),t(2,s=await $("ListEnabledTemplates")||[])}catch(p){t(7,k=String(p)),t(0,n=[{id:"today",label:m("nav.today")},{id:"inbox",label:m("nav.inbox")},{id:"activity",label:m("nav.activity")}]),t(1,o=[]),t(2,s=[])}window.runtime&&window.runtime.EventsOn&&(window.runtime.EventsOn("files-dropped",io),Je=()=>window.runtime.EventsOff("files-dropped")),window.addEventListener("keydown",dl),t(29,O=!1),Mt()}),nl(()=>{Je&&Je(),window.removeEventListener("keydown",dl)});async function Q(p){t(8,y=p),t(9,v=null),t(10,C="overview"),t(11,T=[]),I=[],t(13,D=[]),t(14,N=[]),t(17,M=[]),t(18,j=!1),t(7,k=""),t(3,a=null),t(4,c=[]),f=0,d=!0;try{p==="today"?t(3,a=await $("ListTodayView")||{cases:[]}):p==="activity"&&(t(4,c=await $("ListActivityFeed",50,0)||[]),f=c.length,d=c.length===50)}catch(F){t(7,k=String(F)),t(3,a={cases:[]}),t(4,c=[])}}async function me(p){t(9,v=p),t(10,C="overview"),t(11,T=[]),I=[],t(13,D=[]),t(14,N=[]),t(17,M=[]),t(37,ve=[]),t(36,we=[]),t(35,pe=null),t(38,P=null),t(39,Y=""),t(43,ae=[]),We=[],t(12,S=null),t(18,j=!1),t(23,J=!1),t(7,k=""),t(5,_=[]),await ot(p.id)}async function ot(p){try{t(11,T=await $("ListNotes",p)||[])}catch{}try{I=await $("ListFiles",p)||[]}catch{}try{t(13,D=await $("ListActions",p)||[])}catch{}try{t(14,N=await $("ListWorklog",p)||[])}catch{}try{t(17,M=await $("GetSuggestions")||[])}catch{t(17,M=[])}try{t(5,_=await $("ListActivityByNode",p,50,0)||[])}catch{}}async function Ue(p){t(34,De=!0);try{let F=await $("ListItems",p)||[];F.sort((ne,Se)=>ne.type!==Se.type?ne.type==="folder"?-1:1:(ne.name||"").localeCompare(Se.name||"")),t(37,ve=F)}catch{t(37,ve=[])}t(34,De=!1)}async function kt(p){if(!v)return;try{const ne=await $("GetNodeDetail",p);ne&&t(36,we=[...we,{id:p,name:ne.title}])}catch{t(36,we=[...we,{id:p,name:"..."}])}t(35,pe=p),t(33,ce={...ce,[p]:!0});const F=await $("ListWorkspaceChildren",p)||[];Et(o,p,F),t(1,o=[...o]),await Ue(p)}function St(){if(we.length<2)t(36,we=[]),t(35,pe=null),Ue(v.id);else{const p=we[we.length-2];t(36,we=we.slice(0,-1)),t(35,pe=p.id),Ue(p.id)}}function Ze(p){const F=we[p];t(36,we=we.slice(0,p+1)),t(35,pe=F.id),Ue(F.id)}async function bt(p){t(38,P=p),t(39,Y=""),t(41,ke=""),t(40,fe=!0);try{fa(p)?t(39,Y=await $("GetFileBase64",p.fileId)||""):ua(p)&&t(39,Y=await $("ReadFileText",p.fileId)||"")}catch(F){t(41,ke=String(F))}t(40,fe=!1)}function Wt(){t(38,P=null),t(39,Y=""),t(41,ke="")}async function Mi(){const p=prompt(m("file.namePrompt"));if(!(!p||!p.trim()))try{const F=pe||v.id;await $("CreateEmptyFile",F,p.trim()),await Ue(F),await qt(F)}catch(F){t(7,k=String(F))}}async function il(p){try{await $("DuplicateNode",p);const F=pe||v.id;await Ue(F),await qt(F)}catch(F){t(7,k=String(F))}}function ol(p){const F=ve.find(ne=>ne.id===p);F&&Gt(F.id,F.name)}function sl(p){t(42,be={items:[p],mode:"cut"})}function al(p){t(42,be={items:[p],mode:"copy"})}async function rl(){if(be.items.length===0)return;const p=pe||v.id;try{if(be.mode==="copy")for(const F of be.items)await $("DuplicateNode",F);else for(const F of be.items)await $("MoveNode",F,p);t(42,be={items:[],mode:"copy"}),await Ue(p)}catch(F){t(7,k=String(F))}}function cl(p){ae.includes(p)?t(43,ae=ae.filter(F=>F!==p)):t(43,ae=[...ae,p])}function fl(p){t(43,ae=[p])}function Ii(){t(43,ae=ve.map(p=>p.id))}function ul(p){if(ve.length===0)return;const F=ae.length>0?ae[ae.length-1]:ve[0].id,ne=ve.findIndex(mt=>mt.id===F),Se=ve.findIndex(mt=>mt.id===p);if(ne===-1||Se===-1)return;const nt=Math.min(ne,Se),It=Math.max(ne,Se),Is=ve.slice(nt,It+1).map(mt=>mt.id),Il=new Set(ae);Is.forEach(mt=>Il.add(mt)),t(43,ae=[...Il])}function Fi(){t(43,ae=[])}function Kt(p){return p.length>0?p:ve.map(F=>F.id)}async function Ei(){const p=Kt(ae),F=ve.find(Se=>Se.id===p[0]);let ne;p.length===1&&(F==null?void 0:F.type)==="folder"?ne=m("delete.folder"):p.length===1?ne=m("delete.file"):ne=m("delete.files",{count:p.length}),Tt({title:m("delete.confirmTitle"),message:m("delete.confirmMessage")+" "+ne+"?",confirmText:m("common.delete"),danger:!0,onConfirm:async()=>{for(const nt of p)try{await $("DeleteFileOrFolder",nt)}catch(It){t(7,k=String(It))}t(43,ae=[]);const Se=pe||v.id;await Ue(Se)}})}function Ai(){const p=Kt(ae);t(42,be={items:p,mode:"cut"}),t(43,ae=[])}function Li(){const p=Kt(ae);t(42,be={items:p,mode:"copy"}),t(43,ae=[])}function ji(p,F){const ne=ae.includes(F)?ae:[F];We=ne,p.dataTransfer.effectAllowed="move",p.dataTransfer.setData("text/plain",ne.join(","))}function Pi(p,F){const ne=ve.find(Se=>Se.id===F);ne&&ne.type==="folder"&&(p.preventDefault(),p.dataTransfer.dropEffect="move")}async function Oi(p,F){if(p.preventDefault(),We.length!==0){for(const ne of We)try{await $("MoveNode",ne,F)}catch(Se){t(7,k=String(Se))}We=[],t(43,ae=[]),await Ue(pe||v.id)}}function dl(p){if(C==="files"&&!(p.target.tagName==="INPUT"||p.target.tagName==="TEXTAREA"))if(p.ctrlKey||p.metaKey)p.key==="c"||p.key==="C"?(p.preventDefault(),Li()):p.key==="x"||p.key==="X"?(p.preventDefault(),Ai()):p.key==="v"||p.key==="V"?(p.preventDefault(),rl()):p.key==="a"||p.key==="A"?(p.preventDefault(),Ii()):p.key==="o"||p.key==="O"?(p.preventDefault(),zi()):p.key==="Enter"&&(p.preventDefault(),pl());else if(p.key==="Enter")p.preventDefault(),pl();else if(p.key==="Delete"||p.key==="Backspace"){if(P){p.preventDefault(),Wt();return}if(ae.length>0){p.preventDefault(),Ei();return}if(p.key==="Backspace"&&we.length>0){p.preventDefault(),St();return}}else if(p.key==="Escape"){if(P){Wt();return}if(ae.length>0){Fi();return}}else p.key==="F2"&&(p.preventDefault(),Bi())}function pl(){if(ae.length===1){const p=ve.find(F=>F.id===ae[0]);p&&(p.type==="folder"?kt(p.id):bt(p))}}function zi(){if(ae.length===1){const p=ve.find(F=>F.id===ae[0]);p&&p.fileId&&$("OpenFile",p.fileId)}}function Gt(p,F){Be=p,t(51,Ie=F),t(52,lt=""),t(50,Ne=!0)}function Bi(){if(ae.length===1){const p=ve.find(F=>F.id===ae[0]);p&&Gt(p.id,p.name)}}async function ml(){const p=Ie.trim();if(!p){t(52,lt=m("rename.emptyError"));return}try{await $("ValidateName",p)}catch{t(52,lt=m("rename.invalidError"));return}t(50,Ne=!1);const F=Be;Be="";try{await $("RenameNode",F,p),v&&v.id===F&&t(9,v={...v,title:p}),await Nt(),pe&&await Ue(pe)}catch(ne){t(7,k=String(ne))}}function Ri(){t(50,Ne=!1),Be="",t(51,Ie=""),t(52,lt="")}function Hi(p){p.key==="Enter"?ml():t(52,lt="")}function Tt(p){t(46,he=p.title||m("common.confirm")),t(47,ze=p.message||""),t(48,Oe=p.danger!==void 0?p.danger:!0),t(49,je=p.confirmText||m("common.delete")),Me=p.onConfirm||null,Te=p.onCancel||null,t(45,qe=!0)}function _l(){t(45,qe=!1),Me=null,Te=null}function Vi(){Me&&Me(),_l()}function Ui(){Te&&Te(),_l()}function vl(p){t(20,R=W.node),t(21,V=p),t(19,H=""),t(18,j=!0),yt()}function Wi(){t(20,R=null),t(21,V=void 0),t(19,H=""),t(18,j=!0)}function Ki(){t(18,j=!1),t(19,H=""),t(20,R=null),t(21,V=void 0)}async function kl(){if(!(!H.trim()||V===void 0))try{const p=R?R.id:"",F=V?V.id:"",ne=await $("CreateNodeFromTemplate",p,H.trim(),F);t(18,j=!1),t(19,H="");const Se=ne?ne.id:null;if(t(20,R=null),t(21,V=void 0),p){t(33,ce={...ce,[p]:!0});const nt=await $("ListWorkspaceChildren",p)||[];Et(o,p,nt),t(1,o=[...o])}else t(1,o=await $("ListWorkspaceTree")||o);if(Se){const nt=await $("GetNodeDetail",Se);nt&&(t(8,y=""),me(nt))}}catch(p){t(7,k=String(p))}}function Gi(p,F){t(22,W={visible:!0,x:p.clientX,y:p.clientY,node:F})}function yt(){t(22,W={visible:!1,x:0,y:0,node:null})}async function qi(p){const F=!ce[p];if(t(33,ce={...ce,[p]:F}),!F)return;const ne=await $("ListWorkspaceChildren",p)||[];Et(o,p,ne),t(1,o=[...o])}async function Yi(p,F){if(!(!p||!F||p===F))try{const ne=await $("MoveNode",p,F);await Nt();const Se=await $("GetNodeDetail",p);Se&&(t(8,y=""),me(Se))}catch(ne){t(7,k=String(ne))}}async function Xi(p){p.preventDefault();try{const F=p.dataTransfer.getData("text/plain");if(!F)return;const ne=await $("GetNodeDetail",F);if(!ne||!ne.parent_id)return;await $("MoveNode",F,""),await Nt();const Se=await $("GetNodeDetail",F);Se&&(t(8,y=""),me(Se))}catch(F){t(7,k=String(F))}}function Ji(p){p.preventDefault(),p.dataTransfer.dropEffect="move",t(44,tt=!0)}function Zi(p){t(44,tt=!1)}function bl(p){Gt(p.id,p.title),yt()}function yl(p){yt(),Tt({title:m("delete.confirmTitle"),message:m("delete.confirmMessage")+" "+p.title+"?",confirmText:m("common.delete"),danger:!0,onConfirm:async()=>{try{await $("DeleteNode",p.id),await Nt(),v&&v.id===p.id&&t(9,v=null)}catch(F){t(7,k=String(F))}}})}async function hl(p){yt();try{await $("OpenFolder",p.id)}catch(F){t(7,k=String(F))}}async function gl(p){yt();try{await $("MoveNode",p.id,""),await Nt();const F=await $("GetNodeDetail",p.id);F&&(t(8,y=""),me(F))}catch(F){t(7,k=String(F))}}async function Nt(){const p=Object.keys(ce).filter(ne=>ce[ne]),F=await $("ListWorkspaceTree")||[];for(const ne of p){const nt=(await $("ListWorkspaceChildren",ne)||[]).map(It=>({...It}));Di(F,ne,nt)}t(1,o=F)}async function qt(p){const F=await $("ListWorkspaceChildren",p)||[];Et(o,p,F),t(1,o=[...o])}function wl(){t(23,J=!0),t(24,U="")}function Qi(){t(23,J=!1),t(24,U="")}async function Cl(){if(!(!U.trim()||!v))try{const p=await $("CreateNote",v.id,U.trim());t(11,T=[...T,p&&p.id?p:{id:Date.now().toString(),title:U.trim(),createdAt:new Date().toISOString()}]),t(23,J=!1),t(24,U="")}catch{const F={id:Date.now().toString(),title:U.trim(),createdAt:new Date().toISOString()};t(11,T=[...T,F]),t(23,J=!1),t(24,U="")}}async function Dt(p){if(S&&S.dirty){Tt({title:m("note.unsavedTitle"),message:m("note.unsavedMessage"),confirmText:m("note.unsavedClose"),danger:!1,onConfirm:async()=>{await Sl(p)}});return}await Sl(p)}async function Sl(p){try{const F=await $("ReadNote",p.id);t(12,S={id:p.id,title:p.title,content:F||"",dirty:!1})}catch{t(12,S={id:p.id,title:p.title,content:"# "+p.title+` + +`,dirty:!1})}}function xi(){if(S&&S.dirty){Tt({title:m("note.unsavedTitle"),message:m("note.unsavedMessage"),confirmText:m("note.unsavedClose"),danger:!1,onConfirm:()=>{t(12,S=null)}});return}t(12,S=null)}function $i(p){S&&(t(12,S.content=p.target.value,S),t(12,S.dirty=!0,S))}async function eo(){if(S)try{await $("SaveNote",S.id,S.content),t(12,S.dirty=!1,S)}catch{t(12,S.dirty=!1,S)}}async function to(){const p=parseInt(z,10);if(!(!B.trim()||isNaN(p)||p<=0||!v)){try{const F=await $("CreateWorklog",v.id,B.trim(),p);t(14,N=[...N,F&&F.id?F:{id:Date.now().toString(),nodeId:v.id,summary:B.trim(),minutes:p,createdAt:new Date().toISOString()}])}catch{t(14,N=[...N,{id:Date.now().toString(),nodeId:v.id,summary:B.trim(),minutes:p,createdAt:new Date().toISOString()}])}t(16,B=""),t(15,z="")}}async function Tl(p){try{if(await $("AcceptSuggestion",p),v){try{t(14,N=await $("ListWorklog",v.id)||[])}catch{}try{t(17,M=await $("GetSuggestions")||[])}catch{t(17,M=[])}}}catch(F){console.error("accept suggestion",F)}}async function Nl(){const p=await $("PickFile");if(!p)return;const F=pe||v.id;await Yt(F,p)}async function lo(){const p=await $("PickDirectory");if(!p)return;const F=pe||v.id;await Yt(F,p)}async function Yt(p,F){t(30,se=!0);try{const ne=await $("PreviewImport",F);t(31,ge=ne),le=F,ie=p,t(32,ee=!0)}catch(ne){t(7,k=String(ne))}t(30,se=!1)}async function Xt(p){try{const F=ie||v.id,ne=p==="copy"?await $("AddPathCopy",F,le):await $("AddPathLink",F,le);t(32,ee=!1),t(31,ge=null),t(36,we=[]),t(35,pe=null),await Promise.all([ot(F),Ue(F),qt(F)])}catch(F){t(7,k=String(F))}}function no(){t(32,ee=!1),t(31,ge=null)}async function Dl({id:p,type:F}){const ne=m(F==="folder"?"delete.folder":"delete.file");Tt({title:m("delete.confirmTitle"),message:m("delete.confirmMessage")+" "+ne+"?",confirmText:m("common.delete"),danger:!0,onConfirm:async()=>{try{await $("DeleteFileOrFolder",p),I=I.filter(nt=>nt.nodeId!==p);const Se=pe||v.id;await Ue(Se)}catch(Se){t(7,k=String(Se))}}})}async function io(p){if(!p||p.length===0)return;if(!v){t(7,k=m("error.selectCaseFirst"));return}const F=p[0];await Yt(v.id,F)}function oo(p){return{note_created:m("event.noteCreated"),note_updated:m("event.noteUpdated"),file_added:m("event.fileAdded"),file_deleted:m("event.fileDeleted"),file_renamed:m("event.fileRenamed"),file_copied:m("event.fileCopied"),file_moved:m("event.fileMoved"),folder_added:m("event.folderAdded"),folder_deleted:m("event.folderDeleted"),folder_renamed:m("event.folderRenamed"),node_created:m("event.caseCreated"),node_updated:m("event.caseUpdated")}[p]||p}function so(p){return{project:m("kind.project"),client:m("kind.client"),document:m("kind.document"),recipe:m("kind.recipe"),folder:m("kind.folder"),note:m("kind.note"),file:m("kind.file"),archive:m("kind.archive"),case:m("kind.case")}[p]||p||m("kind.case")}function ao(){t(25,Z=!0),t(26,x=""),t(27,q="open_url"),t(28,K="")}function ro(){t(25,Z=!1),t(26,x=""),t(28,K="")}async function Jt(){if(!(!x.trim()||!K.trim()||!v))try{const p=await $("CreateAction",v.id,q,x.trim(),K.trim());p&&p.id&&t(13,D=[...D,p]),t(25,Z=!1),t(26,x=""),t(28,K="")}catch(p){t(7,k=String(p))}}async function Ml(p){try{await $("DeleteAction",p),t(13,D=D.filter(F=>F.id!==p))}catch(F){t(7,k=String(F))}}function co(p){const F=X.find(ne=>ne.id===p);return F?F.label:p}async function ct(p){try{const F=await $("GetNodeDetail",p);F&&me(F)}catch(F){t(7,k=String(F))}}async function Mt(){try{t(54,Fe=await $("SyncStatus"))}catch{t(54,Fe={configured:!1,serverUrl:"",deviceId:"",unpushedOps:0,lastSyncAt:"",syncInterval:0})}}function fo(){t(53,Re=!0),t(56,Ce=(Fe==null?void 0:Fe.serverUrl)||""),t(57,Ee=""),t(58,Pe=""),t(59,Ae=(Fe==null?void 0:Fe.syncInterval)||0),t(60,ue="")}function uo(){t(53,Re=!1),t(60,ue="")}async function po(){t(55,ye=!0),t(60,ue="");try{await $("SyncConfigure",Ce,Ee,Pe),Ae>0&&await $("SyncSetInterval",Ae),t(58,Pe=""),t(57,Ee=""),await Mt(),t(53,Re=!1)}catch(p){t(60,ue="err: "+String(p))}t(55,ye=!1)}async function mo(){t(55,ye=!0),t(60,ue="");try{await $("SyncSetInterval",Ae),t(60,ue=m("sync.settingsSaved")),await Mt()}catch(p){t(60,ue="err: "+String(p))}t(55,ye=!1)}async function _o(){t(55,ye=!0),t(60,ue="");try{await $("SyncTestConnection",Ce,Ee,Pe),t(60,ue="connection ok")}catch(p){t(60,ue="connection failed: "+String(p))}t(55,ye=!1)}async function vo(){t(55,ye=!0),t(60,ue="");try{await $("SyncDisconnect"),t(60,ue="disconnected"),await Mt()}catch(p){t(60,ue="err: "+String(p))}t(55,ye=!1)}async function ko(){t(55,ye=!0),t(60,ue="");try{const p=await $("SyncNow");t(60,ue="pushed "+p.pushed+", pulled "+p.pulled+" (seq "+p.serverSequence+")"),await Mt()}catch(p){t(60,ue="err: "+String(p))}t(55,ye=!1)}const bo=p=>p.nodeId===v.id,yo=p=>Q(p.id),ho=()=>t(7,k=""),go=()=>t(7,k=""),wo=()=>t(7,k="");function Co(){S.content=this.value,t(12,S)}const So=p=>{t(10,C=p.id),p.id==="files"&&v&&ve.length===0&&!pe&&Ue(v.id)},To=()=>{t(10,C="notes"),wl()},No=()=>{t(10,C="files"),Nl()},Do=()=>t(10,C="worklog"),Mo=p=>Dt(p),Io=p=>Dt(p);function Fo(){U=this.value,t(24,U)}const Eo=p=>p.key==="Enter"&&Cl(),Ao=p=>Dt(p),Lo=p=>Dt(p),jo=p=>{const F=p.detail;F===0?(t(36,we=[]),t(35,pe=null),Ue(v.id)):Ze(F-1)},Po=p=>kt(p.detail),Oo=p=>bt(p.detail),zo=p=>$("OpenFile",p.detail),Bo=p=>$("OpenFolder",p.detail),Ro=p=>Dl(p.detail),Ho=p=>ol(p.detail.id),Vo=p=>il(p.detail),Uo=p=>sl(p.detail),Wo=p=>al(p.detail),Ko=p=>fl(p.detail),Go=p=>cl(p.detail),qo=p=>ul(p.detail),Yo=p=>$("OpenFile",p.detail),Xo=p=>$("RunAction",p.id),Jo=p=>Ml(p.id);function Zo(){B=this.value,t(16,B)}function Qo(){z=Bt(this.value),t(15,z)}const xo=p=>p.nodeId===v.id,$o=p=>Tl(p),es=p=>ct(p.nodeId),ts=(p,F)=>F.key==="Enter"&&ct(p.nodeId),ls=p=>ct(p.nodeId),ns=(p,F)=>F.key==="Enter"&&ct(p.nodeId),is=p=>ct(p.nodeId),os=(p,F)=>F.key==="Enter"&&ct(p.nodeId),ss=p=>ct(p.nodeId),as=(p,F)=>F.key==="Enter"&&ct(p.nodeId),rs=()=>t(21,V=null),cs=p=>t(21,V=p);function fs(){H=this.value,t(19,H)}const us=p=>p.key==="Enter"&&kl(),ds=p=>vl(p),ps=()=>gl(W.node),ms=()=>bl(W.node),_s=()=>yl(W.node),vs=()=>hl(W.node);function ks(){x=this.value,t(26,x)}const bs=p=>p.key==="Enter"&&Jt();function ys(){q=Ps(this),t(27,q),t(61,X)}function hs(){K=this.value,t(28,K)}const gs=p=>p.key==="Enter"&&Jt(),ws=()=>Xt("copy"),Cs=()=>Xt("link");function Ss(){Ie=this.value,t(51,Ie)}function Ts(){Ce=this.value,t(56,Ce)}function Ns(){Ee=this.value,t(57,Ee)}function Ds(){Pe=this.value,t(58,Pe)}function Ms(){Ae=Bt(this.value),t(59,Ae)}return[n,o,s,a,c,_,b,k,y,v,C,T,S,D,N,z,B,M,j,H,R,V,W,J,U,Z,x,q,K,O,se,ge,ee,ce,De,pe,we,ve,P,Y,fe,ke,be,ae,tt,qe,he,ze,Oe,je,Ne,Ie,lt,Re,Fe,ye,Ce,Ee,Pe,Ae,ue,X,Ve,Q,me,Ue,kt,St,Ze,bt,Wt,Mi,il,ol,sl,al,rl,cl,fl,ul,ji,Pi,Oi,ml,Ri,Hi,Vi,Ui,vl,Wi,Ki,kl,Gi,yt,qi,Yi,Xi,Ji,Zi,bl,yl,hl,gl,wl,Qi,Cl,Dt,xi,$i,eo,to,Tl,Nl,lo,Xt,no,Dl,oo,so,ao,ro,Jt,Ml,co,ct,fo,uo,po,mo,_o,vo,ko,bo,yo,ho,go,wo,Co,So,To,No,Do,Mo,Io,Fo,Eo,Ao,Lo,jo,Po,Oo,zo,Bo,Ro,Ho,Vo,Uo,Wo,Ko,Go,qo,Yo,Xo,Jo,Zo,Qo,xo,$o,es,ts,ls,ns,is,os,ss,as,rs,cs,fs,us,ds,ps,ms,_s,vs,ks,bs,ys,hs,gs,ws,Cs,Ss,Ts,Ns,Ds,Ms]}class Yr extends pt{constructor(e){super(),dt(this,e,qr,Gr,ut,{},null,[-1,-1,-1,-1,-1,-1,-1,-1,-1])}}new Yr({target:document.getElementById("app")}); diff --git a/cmd/verstak-gui/frontend-dist/index.html b/cmd/verstak-gui/frontend-dist/index.html index 001a7bc..b3b160d 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/frontend/src/App.svelte b/frontend/src/App.svelte index 3ab56ad..ce11f8c 100644 --- a/frontend/src/App.svelte +++ b/frontend/src/App.svelte @@ -48,6 +48,7 @@ let worklog = [] let worklogMinutes = '' let worklogSummary = '' + let suggestions = [] let showCreateNode = false let newNodeTitle = '' let createInNode = null @@ -169,6 +170,7 @@ files = [] actions = [] worklog = [] + suggestions = [] showCreateNode = false error = '' todayDashboard = null @@ -197,6 +199,7 @@ files = [] actions = [] worklog = [] + suggestions = [] fileItems = [] folderStack = [] currentFolderId = null @@ -217,6 +220,7 @@ try { files = await wailsCall('ListFiles', nodeID) || [] } catch(e) {} try { actions = await wailsCall('ListActions', nodeID) || [] } catch(e) {} try { worklog = await wailsCall('ListWorklog', nodeID) || [] } catch(e) {} + try { suggestions = await wailsCall('GetSuggestions') || [] } catch(e) { suggestions = [] } try { caseActivity = await wailsCall('ListActivityByNode', nodeID, 50, 0) || [] } catch(e) {} } @@ -909,6 +913,18 @@ worklogMinutes = '' } + async function acceptSuggestion(s) { + try { + await wailsCall('AcceptSuggestion', s) + if (selectedNode) { + try { worklog = await wailsCall('ListWorklog', selectedNode.id) || [] } catch(e) {} + try { suggestions = await wailsCall('GetSuggestions') || [] } catch(e) { suggestions = [] } + } + } catch (e) { + console.error('accept suggestion', e) + } + } + // ===== Files ===== async function addFile() { const path = await wailsCall('PickFile') @@ -1505,6 +1521,22 @@ + {#if selectedNode && suggestions.filter(s => s.nodeId === selectedNode.id).length > 0} +
+
{t('worklog.suggestions')}
+ {#each suggestions.filter(s => s.nodeId === selectedNode.id) as s} +
+
+
{s.summary}
+
{s.suggestedMin} {t('worklog.min')}
+
+ +
+ {/each} +
+ {/if} {#if worklog.length === 0}

{t('worklog.empty')}

{:else} @@ -1997,6 +2029,13 @@ .worklog-form input[type="text"] { flex: 1; } .worklog-form input[type="number"] { width: 70px; } .worklog-entry { padding: 12px 0; border-bottom: 1px solid #1a1a28; } +.suggestions { margin-bottom: 24px; padding: 16px; background: #1a1a2e; border-radius: 8px; border: 1px solid #2a2a3c; } +.suggestions-title { font-size: 13px; font-weight: 600; color: #a5b4fc; margin-bottom: 12px; text-transform: uppercase; letter-spacing: 0.5px; } +.suggestion { display: flex; align-items: center; justify-content: space-between; padding: 10px 0; border-bottom: 1px solid #2a2a3c; } +.suggestion:last-child { border-bottom: none; } +.suggestion-body { flex: 1; } +.suggestion-summary { font-size: 14px; color: #e4e4ef; } +.suggestion-meta { font-size: 12px; color: #8888a0; margin-top: 2px; } .wl-meta { font-size: 11px; color: #555; margin-top: 2px; } /* Actions */ diff --git a/frontend/src/lib/i18n/locales/en.js b/frontend/src/lib/i18n/locales/en.js index 17055f2..af5cc0d 100644 --- a/frontend/src/lib/i18n/locales/en.js +++ b/frontend/src/lib/i18n/locales/en.js @@ -120,4 +120,7 @@ export default { 'error.generic': 'An error occurred', 'error.invalidCredentials': 'Invalid username or password', + + 'worklog.suggestions': 'Suggestions for today', + 'worklog.apply': 'Apply', } diff --git a/frontend/src/lib/i18n/locales/ru.js b/frontend/src/lib/i18n/locales/ru.js index d0f9452..c6be5df 100644 --- a/frontend/src/lib/i18n/locales/ru.js +++ b/frontend/src/lib/i18n/locales/ru.js @@ -151,6 +151,8 @@ export default { 'worklog.min': 'мин', 'worklog.log': 'Записать', 'worklog.empty': 'Записей работы пока нет', + 'worklog.suggestions': 'Предложения на сегодня', + 'worklog.apply': 'Применить', 'sync.title': 'Синхронизация', 'sync.settings': 'Настройки синхронизации', diff --git a/internal/core/activity/suggest.go b/internal/core/activity/suggest.go new file mode 100644 index 0000000..345ee4e --- /dev/null +++ b/internal/core/activity/suggest.go @@ -0,0 +1,11 @@ +package activity + +// Suggestion represents a suggested worklog entry derived from today's activity. +type Suggestion struct { + NodeID string `json:"nodeId"` + NodeTitle string `json:"nodeTitle"` + Summary string `json:"summary"` + SuggestedMin int `json:"suggestedMin"` + EventCount int `json:"eventCount"` + NodeKind string `json:"nodeKind"` +} diff --git a/internal/core/worklog/worklog.go b/internal/core/worklog/worklog.go index c88cc9a..ec6cad7 100644 --- a/internal/core/worklog/worklog.go +++ b/internal/core/worklog/worklog.go @@ -140,6 +140,16 @@ func (s *Service) Delete(id string) error { return nil } +// HasTodayEntries checks if any worklog entries exist for today. +func (s *Service) HasTodayEntries(nodeID string) (bool, error) { + today := time.Now().Format("2006-01-02") + var count int + err := s.db.QueryRow( + `SELECT COUNT(*) FROM worklog_entries WHERE node_id=? AND date=?`, + nodeID, today).Scan(&count) + return count > 0, err +} + // SumMinutes returns total minutes for a node. func (s *Service) SumMinutes(nodeID string) (int, error) { var total sql.NullInt64