diff --git a/cmd/verstak-gui/bindings_suggest.go b/cmd/verstak-gui/bindings_suggest.go index 48d3f8f..6b30872 100644 --- a/cmd/verstak-gui/bindings_suggest.go +++ b/cmd/verstak-gui/bindings_suggest.go @@ -60,6 +60,21 @@ func (a *App) GetSuggestions() ([]activity.Suggestion, error) { min := estimateMinutes(bursts, spread, len(grp.events)) conf, reason := confidence(bursts, spread, len(grp.events)) + eventIDs := make([]string, 0, len(grp.events)) + evDetails := make([]activity.SuggestionDetail, 0, len(grp.events)) + for _, e := range grp.events { + eventIDs = append(eventIDs, e.ID) + evDetails = append(evDetails, activity.SuggestionDetail{ + ID: e.ID, + EventType: e.EventType, + TargetType: e.TargetType, + TargetID: e.TargetID, + Title: e.Title, + CreatedAt: e.CreatedAt, + NodeID: e.NodeID, + }) + } + suggestions = append(suggestions, activity.Suggestion{ NodeID: nodeID, NodeTitle: grp.title, @@ -70,6 +85,8 @@ func (a *App) GetSuggestions() ([]activity.Suggestion, error) { Confidence: conf, ConfidenceReason: reason, TimeSpreadMin: spread, + EventIDs: eventIDs, + Events: evDetails, }) } @@ -95,6 +112,12 @@ func (a *App) AcceptSuggestionWith(s activity.Suggestion, minutes int, date stri if err != nil { return nil, err } + // Link activity events to this worklog entry. + for _, eid := range s.EventIDs { + _, _ = a.db.Exec( + `INSERT OR IGNORE INTO worklog_entry_events (entry_id, event_id) VALUES (?,?)`, + entry.ID, eid) + } _ = a.sync.RecordOp(syncsvc.EntityWorklog, entry.ID, syncsvc.OpCreate, worklogPayload(entry)) mins := 0 if entry.Minutes != nil { diff --git a/cmd/verstak-gui/bindings_worklog.go b/cmd/verstak-gui/bindings_worklog.go index 664a55a..d1806ea 100644 --- a/cmd/verstak-gui/bindings_worklog.go +++ b/cmd/verstak-gui/bindings_worklog.go @@ -1,8 +1,13 @@ package main import ( - syncsvc "verstak/internal/core/sync" + "fmt" + "os" + + wailsruntime "github.com/wailsapp/wails/v2/pkg/runtime" + "verstak/internal/core/worklog" + syncsvc "verstak/internal/core/sync" ) func (a *App) ListWorklog(nodeID string) ([]WorklogDTO, error) { @@ -90,6 +95,94 @@ func buildWorklogFilter(dateFrom, dateTo, nodeID string, includeChildren bool, b } } +// SaveWorklogReport generates a worklog report and opens a SaveFileDialog. +func (a *App) SaveWorklogReport(format, dateFrom, dateTo, nodeID string, includeChildren bool, billableFilter, approxFilter string) (string, error) { + f := buildWorklogFilter(dateFrom, dateTo, nodeID, includeChildren, billableFilter, approxFilter) + + var data []byte + var ext string + switch format { + case "csv": + s, err := a.worklog.ExportCSV(f) + if err != nil { + return "", err + } + data = []byte(s) + ext = ".csv" + case "markdown": + s, err := a.worklog.ExportMarkdown(f) + if err != nil { + return "", err + } + data = []byte(s) + ext = ".md" + case "pdf": + var err error + data, err = a.worklog.ExportPDF(f) + if err != nil { + return "", err + } + ext = ".pdf" + default: + return "", fmt.Errorf("unknown format: %s", format) + } + + from := dateFrom + if from == "" { + from = "all" + } + to := dateTo + if to == "" { + to = "all" + } + defaultName := fmt.Sprintf("verstak-worklog-%s--%s%s", from, to, ext) + + path, err := wailsruntime.SaveFileDialog(a.ctx, wailsruntime.SaveDialogOptions{ + DefaultFilename: defaultName, + Filters: []wailsruntime.FileFilter{ + {DisplayName: format, Pattern: "*" + ext}, + }, + }) + if err != nil { + return "", err + } + if path == "" { + return "", fmt.Errorf("отменено пользователем") + } + + if err := os.WriteFile(path, data, 0o644); err != nil { + return "", fmt.Errorf("не удалось сохранить файл: %w", err) + } + + return fmt.Sprintf("Отчёт сохранён: %s", path), nil +} + +// GetWorklogEntryEvents returns activity events linked to a worklog entry. +func (a *App) GetWorklogEntryEvents(entryID string) ([]EventDTO, error) { + rows, err := a.db.Query( + `SELECT e.id, e.node_id, e.event_type, e.target_type, e.target_id, e.target_path, + e.title, e.details_json, e.created_at + FROM activity_events e + JOIN worklog_entry_events wle ON wle.event_id = e.id + WHERE wle.entry_id = ? + ORDER BY e.created_at ASC`, entryID) + if err != nil { + return nil, err + } + defer rows.Close() + + var out []EventDTO + for rows.Next() { + var d EventDTO + if err := rows.Scan(&d.ID, &d.NodeID, &d.EventType, &d.TargetType, + &d.TargetID, &d.TargetPath, &d.Title, &d.DetailsJSON, &d.CreatedAt); err != nil { + return nil, err + } + out = append(out, d) + } + return out, rows.Err() +} + // --- helpers --- func toWorklogDTOs(list []worklog.Entry) []WorklogDTO { diff --git a/cmd/verstak-gui/frontend-dist/assets/main-BbnSy6IG.js b/cmd/verstak-gui/frontend-dist/assets/main-BbnSy6IG.js new file mode 100644 index 0000000..3cb2dcf --- /dev/null +++ b/cmd/verstak-gui/frontend-dist/assets/main-BbnSy6IG.js @@ -0,0 +1,3 @@ +var mr=Object.defineProperty;var _r=(l,e,t)=>e in l?mr(l,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):l[e]=t;var cl=(l,e,t)=>_r(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 se(){}function ho(l){return l()}function xl(){return Object.create(null)}function be(l){l.forEach(ho)}function Wt(l){return typeof l=="function"}function _t(l,e){return l!=l?e==e:l!==e||l&&typeof l=="object"||typeof l=="function"}let Kt;function Jt(l,e){return l===e?!0:(Kt||(Kt=document.createElement("a")),Kt.href=e,l===Kt.href)}function vr(l){return Object.keys(l).length===0}const kr=typeof window<"u"?window:typeof globalThis<"u"?globalThis:global;function r(l,e){l.appendChild(e)}function C(l,e,t){l.insertBefore(e,t||null)}function q(l){l.parentNode&&l.parentNode.removeChild(l)}function Fe(l,e){for(let t=0;tl.removeEventListener(e,t,n)}function _l(l){return function(e){return e.preventDefault(),l.call(this,e)}}function We(l){return function(e){return e.stopPropagation(),l.call(this,e)}}function Ct(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 Yt(l){return l===""?null:+l}function hr(l){return Array.from(l.childNodes)}function R(l,e){e=""+e,l.data!==e&&(l.data=e)}function Se(l,e){l.value=e??""}function Be(l,e,t,n){t==null?l.style.removeProperty(e):l.style.setProperty(e,t,"")}function Dt(l,e,t){for(let n=0;n{const o=l.$$.callbacks[e];if(o){const s=gr(e,t,{cancelable:n});return o.slice().forEach(a=>{a.call(l,s)}),!s.defaultPrevented}return!0}}function bo(l,e){const t=l.$$.callbacks[e.type];t&&t.slice().forEach(n=>n.call(this,e))}const Nt=[],$l=[];let Mt=[];const en=[],br=Promise.resolve();let fl=!1;function yr(){fl||(fl=!0,br.then(yo))}function Et(l){Mt.push(l)}const ul=new Set;let Tt=0;function yo(){if(Tt!==0)return;const l=Vt;do{try{for(;Ttl.indexOf(n)===-1?e.push(n):t.push(n)),t.forEach(n=>n()),Mt=e}const Gt=new Set;let qt;function $e(){qt={r:0,c:[],p:qt}}function et(){qt.r||be(qt.c),qt=qt.p}function ce(l,e){l&&l.i&&(Gt.delete(l),l.i(e))}function he(l,e,t,n){if(l&&l.o){if(Gt.has(l))return;Gt.add(l),qt.c.push(()=>{Gt.delete(l),n&&(t&&l.d(1),n())}),l.o(e)}else n&&n()}function ae(l){return(l==null?void 0:l.length)!==void 0?l:Array.from(l)}function wo(l,e){he(l,1,1,()=>{e.delete(l.key)})}function qo(l,e,t,n,o,s,a,c,d,f,k,_){let v=l.length,b=s.length,h=v;const y={};for(;h--;)y[l[h].key]=h;const w=[],j=new Map,N=new Map,T=[];for(h=b;h--;){const D=_(o,s,h),P=t(D);let z=a.get(P);z?T.push(()=>z.p(D,e)):(z=f(P,D),z.c()),j.set(P,w[h]=z),P in y&&N.set(P,Math.abs(h-y[P]))}const S=new Set,F=new Set;function A(D){ce(D,1),D.m(c,k),a.set(D.key,D),k=D.first,b--}for(;v&&b;){const D=w[b-1],P=l[v-1],z=D.key,B=P.key;D===P?(k=D.first,v--,b--):j.has(B)?!a.has(z)||S.has(z)?A(D):F.has(B)?v--:N.get(z)>N.get(B)?(F.add(z),A(D)):(S.add(B),v--):(d(P,a),v--)}for(;v--;){const D=l[v];j.has(D.key)||d(D,a)}for(;b;)A(w[b-1]);return be(T),w}function at(l){l&&l.c()}function it(l,e,t){const{fragment:n,after_update:o}=l.$$;n&&n.m(e,t),Et(()=>{const s=l.$$.on_mount.map(ho).filter(Wt);l.$$.on_destroy?l.$$.on_destroy.push(...s):be(s),l.$$.on_mount=[]}),o.forEach(Et)}function ot(l,e){const t=l.$$;t.fragment!==null&&(qr(t.after_update),be(t.on_destroy),t.fragment&&t.fragment.d(e),t.on_destroy=t.fragment=null,t.ctx=[])}function Cr(l,e){l.$$.dirty[0]===-1&&(Nt.push(l),yr(),l.$$.dirty.fill(0)),l.$$.dirty[e/31|0]|=1<{const h=b.length?b[0]:v;return f.ctx&&o(f.ctx[_],f.ctx[_]=h)&&(!f.skip_bound&&f.bound[_]&&f.bound[_](h),k&&Cr(l,_)),v}):[],f.update(),k=!0,be(f.before_update),f.fragment=n?n(f.ctx):!1,e.target){if(e.hydrate){const _=hr(e.target);f.fragment&&f.fragment.l(_),_.forEach(q)}else f.fragment&&f.fragment.c();e.intro&&ce(l.$$.fragment),it(l,e.target,e.anchor),yo()}Ht(d)}class kt{constructor(){cl(this,"$$");cl(this,"$$set")}$destroy(){ot(this,1),this.$destroy=se}$on(e,t){if(!Wt(t))return se;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&&!vr(e)&&(this.$$.skip_bound=!0,this.$$set(e),this.$$.skip_bound=!1)}}const jr="4";typeof window<"u"&&(window.__svelte||(window.__svelte={v:new Set})).v.add(jr);function Sr(l){let e,t;return{c(){e=U("path"),t=U("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){C(n,e,o),C(n,t,o)},d(n){n&&(q(e),q(t))}}}function Tr(l){let e,t,n,o,s;return{c(){e=U("path"),t=U("polyline"),n=U("line"),o=U("line"),s=U("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){C(a,e,c),C(a,t,c),C(a,n,c),C(a,o,c),C(a,s,c)},d(a){a&&(q(e),q(t),q(n),q(o),q(s))}}}function Nr(l){let e,t;return{c(){e=U("polyline"),t=U("polyline"),i(e,"points","16 18 22 12 16 6"),i(t,"points","8 6 2 12 8 18")},m(n,o){C(n,e,o),C(n,t,o)},d(n){n&&(q(e),q(t))}}}function Dr(l){let e,t,n,o;return{c(){e=U("path"),t=U("polyline"),n=U("line"),o=U("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){C(s,e,a),C(s,t,a),C(s,n,a),C(s,o,a)},d(s){s&&(q(e),q(t),q(n),q(o))}}}function Mr(l){let e,t,n,o,s;return{c(){e=U("path"),t=U("polyline"),n=U("line"),o=U("line"),s=U("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){C(a,e,c),C(a,t,c),C(a,n,c),C(a,o,c),C(a,s,c)},d(a){a&&(q(e),q(t),q(n),q(o),q(s))}}}function Er(l){let e,t,n,o,s,a;return{c(){e=U("path"),t=U("polyline"),n=U("line"),o=U("line"),s=U("line"),a=U("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,d){C(c,e,d),C(c,t,d),C(c,n,d),C(c,o,d),C(c,s,d),C(c,a,d)},d(c){c&&(q(e),q(t),q(n),q(o),q(s),q(a))}}}function Ir(l){let e,t,n,o;return{c(){e=U("path"),t=U("polyline"),n=U("line"),o=U("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){C(s,e,a),C(s,t,a),C(s,n,a),C(s,o,a)},d(s){s&&(q(e),q(t),q(n),q(o))}}}function Fr(l){let e,t,n,o,s;return{c(){e=U("path"),t=U("polyline"),n=U("line"),o=U("line"),s=U("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){C(a,e,c),C(a,t,c),C(a,n,c),C(a,o,c),C(a,s,c)},d(a){a&&(q(e),q(t),q(n),q(o),q(s))}}}function Ar(l){let e,t,n;return{c(){e=U("path"),t=U("circle"),n=U("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){C(o,e,s),C(o,t,s),C(o,n,s)},d(o){o&&(q(e),q(t),q(n))}}}function Lr(l){let e,t;return{c(){e=U("rect"),t=U("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){C(n,e,o),C(n,t,o)},d(n){n&&(q(e),q(t))}}}function Pr(l){let e,t,n;return{c(){e=U("rect"),t=U("circle"),n=U("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){C(o,e,s),C(o,t,s),C(o,n,s)},d(o){o&&(q(e),q(t),q(n))}}}function Or(l){let e;return{c(){e=U("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){C(t,e,n)},d(t){t&&q(e)}}}function zr(l){let e;function t(s,a){return s[0]==="folder"?Or:s[0]==="image"?Pr:s[0]==="video"?Lr:s[0]==="audio"?Ar:s[0]==="pdf"?Fr:s[0]==="document"?Ir:s[0]==="spreadsheet"?Er:s[0]==="presentation"?Mr:s[0]==="archive"?Dr:s[0]==="code"?Nr:s[0]==="text"?Tr:Sr}let n=t(l),o=n(l);return{c(){e=U("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){C(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:se,o:se,d(s){s&&q(e),o.d()}}}function Rr(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 Co extends kt{constructor(e){super(),vt(this,e,Rr,zr,_t,{kind:0,size:1})}}const Br={"nav.today":"Сегодня","nav.inbox":"Неразобранное","nav.activity":"Активность","nav.journal":"Журнал","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.all":"Все","common.open":"Открыть","common.no":"Нет","common.date":"Дата","common.search":"Найти","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.details":"Детали","worklog.source":"Источник","worklog.sourceSuggestion":"Предложение activity","worklog.sourceManual":"Ручная запись","worklog.suggestions":"Предложения","worklog.apply":"Применить","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":"событий","journal.title":"Журнал работы","journal.empty":"Нет записей за выбранный период","journal.dateFrom":"От","journal.dateTo":"До","journal.filter":"Фильтр","journal.total":"Всего","journal.exportCSV":"CSV","journal.exportMarkdown":"Markdown","journal.billable":"К оплате","journal.billableYes":"К оплате","journal.billableNo":"Не к оплате","journal.billableHint":"К оплате — можно включать в счёт клиенту","journal.approx":"Тип времени","journal.approxExact":"Точное","journal.approxEstimated":"Оценочное","journal.approxHint":"Оценочное — время предложено системой или введено как примерное","journal.includeChildrenDisabledHint":"Работает только при выбранном деле/клиенте/проекте","journal.node":"Дело","journal.path":"Путь","journal.byDay":"По дням","journal.byNode":"По делам","journal.includeChildren":"С подзадачами","journal.nodeSearch":"Поиск дела...","journal.relatedEvents":"Связанные события","suggest.title":"Предложения на сегодня","suggest.apply":"Записать","suggest.dismiss":"Скрыть","suggest.open":"Открыть","suggest.confidence.low":"Низкая уверенность","suggest.confidence.medium":"Средняя уверенность","suggest.confidence.high":"Высокая уверенность","suggest.minutes":"мин","suggest.edit":"Изменить","suggest.noSuggestions":"Нет предложений для журнала","suggest.detectedEvents":"Что обнаружено","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":"Срок действия токена истёк"},Hr={"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","worklog.title":"Work Log","worklog.whatDone":"What was done","worklog.minutes":"Min","worklog.min":"min","worklog.log":"Log","worklog.empty":"No work logged yet","worklog.details":"Details","worklog.source":"Source","worklog.sourceSuggestion":"Activity suggestion","worklog.sourceManual":"Manual entry","common.all":"All","common.no":"No","common.open":"Open","common.date":"Date","common.search":"Search","nav.journal":"Journal","journal.title":"Work Log","journal.empty":"No entries for the selected period","journal.dateFrom":"From","journal.dateTo":"To","journal.filter":"Filter","journal.total":"Total","journal.exportCSV":"CSV","journal.exportMarkdown":"Markdown","journal.billable":"Billable","journal.billableYes":"Billable","journal.billableNo":"Not billable","journal.billableHint":"Billable — can be included in client invoice","journal.approx":"Time type","journal.approxExact":"Exact","journal.approxEstimated":"Estimated","journal.approxHint":"Estimated — time suggested by the system or entered as approximate","journal.includeChildrenDisabledHint":"Only works when a case/client/project is selected","journal.node":"Case","journal.path":"Path","journal.byDay":"By day","journal.byNode":"By case","journal.includeChildren":"Include subtasks","journal.nodeSearch":"Search case...","journal.relatedEvents":"Related events","suggest.title":"Suggestions","suggest.apply":"Log","suggest.dismiss":"Dismiss","suggest.open":"Open","suggest.confidence.low":"Low confidence","suggest.confidence.medium":"Medium confidence","suggest.confidence.high":"High confidence","suggest.minutes":"min","suggest.edit":"Edit","suggest.noSuggestions":"No suggestions","suggest.detectedEvents":"What was detected"},tn={ru:Br,en:Hr};let ln="ru";function m(l,e){var o;const t=tn[ln];let n=t==null?void 0:t[l];if(n==null&&ln!=="ru"&&(n=(o=tn.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 Xt(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 pl={"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 nn(l){return l?pl[l]||l:m("mime.unknown")}function Vr(l){if(l.type==="folder")return m("mime.folder");const e=(l.mime||"").toLowerCase();if(pl[e])return pl[e];const n=(l.name||"").toLowerCase().split(".").pop();return n?n.toUpperCase():m("mime.file")}function jo(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 Wr=["image/jpeg","image/png","image/gif","image/webp","image/bmp","image/tiff","image/avif","image/svg+xml"],Ur=["text/plain","text/html","text/css","text/javascript","application/json","application/xml","application/x-yaml","text/x-shellscript"],Kr=["txt","log","conf","ini","yaml","yml","json","xml","csv","sh","py","js","ts","css","html","md","markdown","cfg"],Gr=["jpg","jpeg","png","gif","webp","bmp","tiff","tif","avif","svg"];function So(l){const e=(l.mime||"").toLowerCase(),n=(l.name||"").toLowerCase().split(".").pop();return Wr.includes(e)||Gr.includes(n)}function To(l){const e=(l.mime||"").toLowerCase(),n=(l.name||"").toLowerCase().split(".").pop();return Ur.includes(e)||Kr.includes(n)&&n!=="md"&&n!=="markdown"}function No(l){return(l.mime||"").toLowerCase().includes("pdf")}function Do(l){const e=(l.name||"").toLowerCase();return e.endsWith(".md")||e.endsWith(".markdown")}function Jr(l){return So(l)||No(l)}function Yr(l){return To(l)||Do(l)}const{window:Xr}=kr;function Zr(l){let e,t,n,o=Xt(l[0].size)+"",s;return{c(){e=u("span"),e.textContent="·",t=g(),n=u("span"),s=M(o),i(e,"class","meta-sep svelte-1skuef2")},m(a,c){C(a,e,c),C(a,t,c),C(a,n,c),r(n,s)},p(a,c){c[0]&1&&o!==(o=Xt(a[0].size)+"")&&R(s,o)},d(a){a&&(q(e),q(t),q(n))}}}function Qr(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){C(a,e,c),C(a,t,c),C(a,n,c),o||(s=[I(e,"click",We(l[30])),I(n,"click",We(l[11]))],o=!0)},p:se,d(a){a&&(q(e),q(t),q(n)),o=!1,be(s)}}}function xr(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(d,f){C(d,e,f),C(d,t,f),C(d,n,f),C(d,o,f),C(d,s,f),a||(c=[I(e,"click",We(l[29])),I(n,"click",We(l[10])),I(s,"click",We(l[11]))],a=!0)},p:se,d(d){d&&(q(e),q(t),q(n),q(o),q(s)),a=!1,be(c)}}}function on(l){let e,t,n,o,s,a,c,d,f=m("common.open")+"",k,_,v,b,h,y,w,j,N=m("file.openExternal")+"",T,S,F,A,D,P,z=m("file.showInExplorer")+"",B,L,J,X,K,Z,H,G,V,Y=m("common.rename")+"",O,ee,ye,te,ne,ie,ue,Ie=m("common.duplicate")+"",Ce,Je,Me,W,Q,pe,Te,Ee,ze,He=m("common.cut")+"",tt,Ye,me,De,ge,fe,de,_e=m("common.copy")+"",ve,Ne,Ae,Ve,oe,re,ke,Le,Ue,Ge=m("common.delete")+"",Ke,Pe,Re;return{c(){e=u("div"),t=g(),n=u("div"),o=u("button"),s=U("svg"),a=U("path"),c=U("circle"),d=g(),k=M(f),_=g(),v=u("button"),b=U("svg"),h=U("path"),y=U("polyline"),w=U("line"),j=g(),T=M(N),S=g(),F=u("button"),A=U("svg"),D=U("path"),P=g(),B=M(z),L=g(),J=u("div"),X=g(),K=u("button"),Z=U("svg"),H=U("path"),G=U("path"),V=g(),O=M(Y),ee=g(),ye=u("button"),te=U("svg"),ne=U("rect"),ie=U("path"),ue=g(),Ce=M(Ie),Je=g(),Me=u("button"),W=U("svg"),Q=U("circle"),pe=U("circle"),Te=U("line"),Ee=U("line"),ze=g(),tt=M(He),Ye=g(),me=u("button"),De=U("svg"),ge=U("rect"),fe=U("path"),de=g(),ve=M(_e),Ne=g(),Ae=u("div"),Ve=g(),oe=u("button"),re=U("svg"),ke=U("polyline"),Le=U("path"),Ue=g(),Ke=M(Ge),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(h,"d","M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"),i(y,"points","15 3 21 3 21 9"),i(w,"x1","10"),i(w,"y1","14"),i(w,"x2","21"),i(w,"y2","3"),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(v,"class","menu-item svelte-1skuef2"),i(v,"role","menuitem"),i(D,"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(A,"width","14"),i(A,"height","14"),i(A,"viewBox","0 0 24 24"),i(A,"fill","none"),i(A,"stroke","currentColor"),i(A,"stroke-width","2"),i(A,"stroke-linecap","round"),i(A,"stroke-linejoin","round"),i(F,"class","menu-item svelte-1skuef2"),i(F,"role","menuitem"),i(J,"class","menu-sep svelte-1skuef2"),i(H,"d","M12 20h9"),i(G,"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(K,"class","menu-item svelte-1skuef2"),i(K,"role","menuitem"),i(ne,"x","9"),i(ne,"y","9"),i(ne,"width","13"),i(ne,"height","13"),i(ne,"rx","2"),i(ne,"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(te,"width","14"),i(te,"height","14"),i(te,"viewBox","0 0 24 24"),i(te,"fill","none"),i(te,"stroke","currentColor"),i(te,"stroke-width","2"),i(te,"stroke-linecap","round"),i(te,"stroke-linejoin","round"),i(ye,"class","menu-item svelte-1skuef2"),i(ye,"role","menuitem"),i(Q,"cx","6"),i(Q,"cy","6"),i(Q,"r","3"),i(pe,"cx","6"),i(pe,"cy","18"),i(pe,"r","3"),i(Te,"x1","20"),i(Te,"y1","4"),i(Te,"x2","8.12"),i(Te,"y2","15.88"),i(Ee,"x1","8.12"),i(Ee,"y1","8.12"),i(Ee,"x2","20"),i(Ee,"y2","20"),i(W,"width","14"),i(W,"height","14"),i(W,"viewBox","0 0 24 24"),i(W,"fill","none"),i(W,"stroke","currentColor"),i(W,"stroke-width","2"),i(W,"stroke-linecap","round"),i(W,"stroke-linejoin","round"),i(Me,"class","menu-item svelte-1skuef2"),i(Me,"role","menuitem"),i(ge,"x","9"),i(ge,"y","9"),i(ge,"width","13"),i(ge,"height","13"),i(ge,"rx","2"),i(ge,"ry","2"),i(fe,"d","M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"),i(De,"width","14"),i(De,"height","14"),i(De,"viewBox","0 0 24 24"),i(De,"fill","none"),i(De,"stroke","currentColor"),i(De,"stroke-width","2"),i(De,"stroke-linecap","round"),i(De,"stroke-linejoin","round"),i(me,"class","menu-item svelte-1skuef2"),i(me,"role","menuitem"),i(Ae,"class","menu-sep svelte-1skuef2"),i(ke,"points","3 6 5 6 21 6"),i(Le,"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(re,"width","14"),i(re,"height","14"),i(re,"viewBox","0 0 24 24"),i(re,"fill","none"),i(re,"stroke","currentColor"),i(re,"stroke-width","2"),i(re,"stroke-linecap","round"),i(re,"stroke-linejoin","round"),i(oe,"class","menu-item menu-item-danger svelte-1skuef2"),i(oe,"role","menuitem"),i(n,"class","menu svelte-1skuef2"),Be(n,"left",l[3]+"px"),Be(n,"top",l[4]+"px"),Be(n,"position","fixed"),i(n,"role","menu"),i(n,"tabindex","-1")},m(Qe,x){C(Qe,e,x),C(Qe,t,x),C(Qe,n,x),r(n,o),r(o,s),r(s,a),r(s,c),r(o,d),r(o,k),r(n,_),r(n,v),r(v,b),r(b,h),r(b,y),r(b,w),r(v,j),r(v,T),r(n,S),r(n,F),r(F,A),r(A,D),r(F,P),r(F,B),r(n,L),r(n,J),r(n,X),r(n,K),r(K,Z),r(Z,H),r(Z,G),r(K,V),r(K,O),r(n,ee),r(n,ye),r(ye,te),r(te,ne),r(te,ie),r(ye,ue),r(ye,Ce),r(n,Je),r(n,Me),r(Me,W),r(W,Q),r(W,pe),r(W,Te),r(W,Ee),r(Me,ze),r(Me,tt),r(n,Ye),r(n,me),r(me,De),r(De,ge),r(De,fe),r(me,de),r(me,ve),r(n,Ne),r(n,Ae),r(n,Ve),r(n,oe),r(oe,re),r(re,ke),r(re,Le),r(oe,Ue),r(oe,Ke),Pe||(Re=[I(e,"click",We(l[19])),I(o,"click",l[17]),I(v,"click",l[10]),I(F,"click",l[11]),I(K,"click",l[13]),I(ye,"click",l[14]),I(Me,"click",l[15]),I(me,"click",l[16]),I(oe,"click",l[12]),I(n,"click",We(l[28])),I(n,"keydown",l[31])],Pe=!0)},p(Qe,x){x[0]&8&&Be(n,"left",Qe[3]+"px"),x[0]&16&&Be(n,"top",Qe[4]+"px")},d(Qe){Qe&&(q(e),q(t),q(n)),Pe=!1,be(Re)}}}function $r(l){let e,t,n,o,s,a,c=l[0].name+"",d,f,k,_,v,b,h,y,w,j,N,T,S,F,A,D,P,z,B,L,J,X;n=new Co({props:{kind:l[6],size:22}});let K=!l[7]&&Zr(l);function Z(Y,O){return Y[7]?Qr:xr}let G=Z(l)(l),V=l[2]&&on(l);return{c(){e=u("div"),t=u("div"),at(n.$$.fragment),o=g(),s=u("div"),a=u("div"),d=M(c),k=g(),_=u("div"),v=u("span"),v.textContent=`${l[8]}`,b=g(),K&&K.c(),h=g(),y=u("div"),G.c(),w=g(),j=u("button"),N=U("svg"),T=U("circle"),S=U("circle"),F=U("circle"),A=g(),D=u("button"),D.innerHTML='',z=g(),V&&V.c(),B=st(),i(t,"class","file-row-icon svelte-1skuef2"),i(a,"class","file-row-name svelte-1skuef2"),i(a,"title",f=l[0].name),i(_,"class","file-row-meta svelte-1skuef2"),i(s,"class","file-row-body svelte-1skuef2"),i(T,"cx","12"),i(T,"cy","5"),i(T,"r","2"),i(S,"cx","12"),i(S,"cy","12"),i(S,"r","2"),i(F,"cx","12"),i(F,"cy","19"),i(F,"r","2"),i(N,"width","16"),i(N,"height","16"),i(N,"viewBox","0 0 24 24"),i(N,"fill","currentColor"),i(j,"class","action-btn svelte-1skuef2"),i(j,"title",m("file.more")),i(j,"aria-label",m("file.more")),i(j,"aria-expanded",l[2]),i(D,"class","action-btn action-btn-danger svelte-1skuef2"),i(D,"title",m("common.delete")),i(D,"aria-label",m("common.delete")),i(y,"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",P=l[7]?m("file.ariaFolder")+" "+l[0].name:m("file.ariaFile")+" "+l[0].name),we(e,"file-row--selected",l[1])},m(Y,O){C(Y,e,O),r(e,t),it(n,t,null),r(e,o),r(e,s),r(s,a),r(a,d),r(s,k),r(s,_),r(_,v),r(_,b),K&&K.m(_,null),r(e,h),r(e,y),G.m(y,null),r(y,w),r(y,j),r(j,N),r(N,T),r(N,S),r(N,F),r(y,A),r(y,D),C(Y,z,O),V&&V.m(Y,O),C(Y,B,O),L=!0,J||(X=[I(Xr,"click",l[19]),I(j,"click",We(l[18])),I(D,"click",We(l[12])),I(e,"click",l[9]),I(e,"keydown",l[24]),I(e,"contextmenu",l[23]),I(e,"dragstart",l[20]),I(e,"dragover",l[21]),I(e,"drop",l[22])],J=!0)},p(Y,O){(!L||O[0]&1)&&c!==(c=Y[0].name+"")&&R(d,c),(!L||O[0]&1&&f!==(f=Y[0].name))&&i(a,"title",f),Y[7]||K.p(Y,O),G.p(Y,O),(!L||O[0]&4)&&i(j,"aria-expanded",Y[2]),(!L||O[0]&1&&P!==(P=Y[7]?m("file.ariaFolder")+" "+Y[0].name:m("file.ariaFile")+" "+Y[0].name))&&i(e,"aria-label",P),(!L||O[0]&2)&&we(e,"file-row--selected",Y[1]),Y[2]?V?V.p(Y,O):(V=on(Y),V.c(),V.m(B.parentNode,B)):V&&(V.d(1),V=null)},i(Y){L||(ce(n.$$.fragment,Y),L=!0)},o(Y){he(n.$$.fragment,Y),L=!1},d(Y){Y&&(q(e),q(z),q(B)),ot(n),K&&K.d(),G.d(),V&&V.d(Y),J=!1,be(X)}}}function ec(l,e,t){let{item:n}=e,{selected:o=!1}=e,{onDragStart:s}=e,{onDragOver:a}=e,{onDrop:c}=e;const d=Zt(),f=jo(n),k=n.type==="folder",_=Vr(n);let v=!1,b=0,h=0,y=null;function w(O){O.ctrlKey||O.metaKey?d("toggleSelect",n.id):O.shiftKey?d("rangeSelect",n.id):y?(clearTimeout(y),y=null,k?d("navigate",n.id):d("preview",n)):y=setTimeout(()=>{y=null,d("selectOne",n.id)},250)}function j(){d("openExternal",n.fileId)}function N(){t(2,v=!1),d("showInFolder",n.nodeId||n.id)}function T(){t(2,v=!1),d("delete",{id:n.id,type:n.type})}function S(){t(2,v=!1),d("rename",{id:n.id,name:n.name})}function F(){t(2,v=!1),d("duplicate",n.id)}function A(){t(2,v=!1),d("cut",n.id)}function D(){t(2,v=!1),d("copy",n.id)}function P(){t(2,v=!1),k?d("navigate",n.id):d("preview",n)}function z(){t(2,v=!v)}function B(){t(2,v=!1)}function L(O){s&&s(O,n.id)}function J(O){a&&k&&a(O,n.id)}function X(O){c&&k&&c(O,n.id)}function K(O){O.preventDefault(),t(3,b=Math.min(O.clientX,window.innerWidth-240)),t(4,h=Math.min(O.clientY,window.innerHeight-320)),t(2,v=!0)}function Z(O){(O.key==="Enter"||O.key===" ")&&(O.preventDefault(),w(O))}function H(O){bo.call(this,l,O)}const G=()=>d("preview",n),V=()=>d("navigate",n.id),Y=O=>{O.key==="Escape"&&(O.stopPropagation(),B())};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,v,b,h,d,f,k,_,w,j,N,T,S,F,A,D,P,z,B,L,J,X,K,Z,s,a,c,H,G,V,Y]}class tc extends kt{constructor(e){super(),vt(this,e,ec,$r,_t,{item:0,selected:1,onDragStart:25,onDragOver:26,onDrop:27},null,[-1,-1])}}function sn(l,e,t){const n=l.slice();return n[4]=e[t],n[6]=t,n}function lc(l){let e;return{c(){e=u("span"),e.textContent="/",i(e,"class","sep svelte-csi2lb")},m(t,n){C(t,e,n)},d(t){t&&q(e)}}}function nc(l){let e,t=l[4].name+"",n,o,s;function a(){return l[2](l[6])}return{c(){e=u("button"),n=M(t),i(e,"class","crumb crumb--link svelte-csi2lb")},m(c,d){C(c,e,d),r(e,n),o||(s=I(e,"click",a),o=!0)},p(c,d){l=c,d&1&&t!==(t=l[4].name+"")&&R(n,t)},d(c){c&&q(e),o=!1,s()}}}function ic(l){let e,t=l[4].name+"",n;return{c(){e=u("span"),n=M(t),i(e,"class","crumb crumb--current svelte-csi2lb")},m(o,s){C(o,e,s),r(e,n)},p(o,s){s&1&&t!==(t=o[4].name+"")&&R(n,t)},d(o){o&&q(e)}}}function an(l){let e,t,n=l[6]>0&&lc();function o(c,d){return c[6]===c[0].length-1?ic:nc}let s=o(l),a=s(l);return{c(){n&&n.c(),e=g(),a.c(),t=st()},m(c,d){n&&n.m(c,d),C(c,e,d),a.m(c,d),C(c,t,d)},p(c,d){s===(s=o(c))&&a?a.p(c,d):(a.d(1),a=s(c),a&&(a.c(),a.m(t.parentNode,t)))},d(c){c&&(q(e),q(t)),n&&n.d(c),a.d(c)}}}function oc(l){let e,t=ae(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 Mo extends kt{constructor(e){super(),vt(this,e,sc,oc,_t,{crumbs:0})}}function ac(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,d){C(c,e,d),r(e,t),r(e,n),r(e,o),s||(a=I(o,"click",l[9]),s=!0)},p:se,d(c){c&&q(e),s=!1,a()}}}function rc(l){let e,t;function n(a,c){return c&2&&(e=null),e==null&&(e=!!(a[1]&&a[1].startsWith("data:"))),e?mc:pc}let o=n(l,-1),s=o(l);return{c(){s.c(),t=st()},m(a,c){s.m(a,c),C(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&&q(t),s.d(a)}}}function cc(l){let e,t,n;return{c(){e=u("pre"),t=u("code"),n=M(l[1]),i(e,"class","preview-text svelte-1cw3u0m")},m(o,s){C(o,e,s),r(e,t),r(t,n)},p(o,s){s&2&&R(n,o[1])},d(o){o&&q(e)}}}function dc(l){let e,t,n,o;return{c(){e=u("div"),t=u("img"),Jt(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){C(s,e,a),r(e,t)},p(s,a){a&2&&!Jt(t.src,n=s[1])&&i(t,"src",n),a&1&&o!==(o=s[0].name)&&i(t,"alt",o)},d(s){s&&q(e)}}}function uc(l){let e,t,n,o,s,a,c;return{c(){e=u("div"),t=u("p"),n=M(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(d,f){C(d,e,f),r(e,t),r(t,n),r(e,o),r(e,s),a||(c=I(s,"click",l[9]),a=!0)},p(d,f){f&8&&R(n,d[3])},d(d){d&&q(e),a=!1,c()}}}function fc(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){C(n,e,o),r(e,t)},p:se,d(n){n&&q(e)}}}function pc(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,d){C(c,e,d),r(e,t),r(e,n),r(e,o),s||(a=I(o,"click",l[9]),s=!0)},p:se,d(c){c&&q(e),s=!1,a()}}}function mc(l){let e,t,n;return{c(){e=u("div"),t=u("embed"),Jt(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){C(o,e,s),r(e,t)},p(o,s){s&2&&!Jt(t.src,n=o[1])&&i(t,"src",n)},d(o){o&&q(e)}}}function _c(l){let e,t,n,o,s,a,c,d=l[0].name+"",f,k,_,v,b=Xt(l[0].size)+"",h,y,w=nn(l[0].mime)+"",j,N,T,S,F,A,D,P,z,B,L;s=new Co({props:{kind:l[8],size:18}});function J(Z,H){return Z[2]?fc:Z[3]?uc:Z[6]&&Z[1]?dc:Z[5]&&Z[1]?cc:Z[4]?rc:ac}let X=J(l),K=X(l);return{c(){e=u("div"),t=u("div"),n=u("header"),o=u("div"),at(s.$$.fragment),a=g(),c=u("span"),f=M(d),_=g(),v=u("div"),h=M(b),y=M(" · "),j=M(w),N=g(),T=u("div"),S=u("button"),S.innerHTML='',F=g(),A=u("button"),A.innerHTML='',D=g(),P=u("div"),K.c(),i(c,"class","preview-name svelte-1cw3u0m"),i(c,"title",k=l[0].name),i(o,"class","preview-title svelte-1cw3u0m"),i(v,"class","preview-meta svelte-1cw3u0m"),i(S,"class","action-btn svelte-1cw3u0m"),i(S,"title",m("file.openExternal")),i(S,"aria-label",m("file.openExternal")),i(A,"class","action-btn action-btn-close svelte-1cw3u0m"),i(A,"title","Close"),i(A,"aria-label","Close preview"),i(T,"class","preview-actions svelte-1cw3u0m"),i(n,"class","preview-header svelte-1cw3u0m"),i(P,"class","preview-body svelte-1cw3u0m"),i(t,"class","modal svelte-1cw3u0m"),i(e,"class","overlay svelte-1cw3u0m"),i(e,"role","presentation")},m(Z,H){C(Z,e,H),r(e,t),r(t,n),r(n,o),it(s,o,null),r(o,a),r(o,c),r(c,f),r(n,_),r(n,v),r(v,h),r(v,y),r(v,j),r(n,N),r(n,T),r(T,S),r(T,F),r(T,A),r(t,D),r(t,P),K.m(P,null),z=!0,B||(L=[I(S,"click",l[9]),I(A,"click",l[10]),I(e,"click",Ct(l[11])),I(e,"keydown",l[12])],B=!0)},p(Z,[H]){(!z||H&1)&&d!==(d=Z[0].name+"")&&R(f,d),(!z||H&1&&k!==(k=Z[0].name))&&i(c,"title",k),(!z||H&1)&&b!==(b=Xt(Z[0].size)+"")&&R(h,b),(!z||H&1)&&w!==(w=nn(Z[0].mime)+"")&&R(j,w),X===(X=J(Z))&&K?K.p(Z,H):(K.d(1),K=X(Z),K&&(K.c(),K.m(P,null)))},i(Z){z||(ce(s.$$.fragment,Z),z=!0)},o(Z){he(s.$$.fragment,Z),z=!1},d(Z){Z&&q(e),ot(s),K.d(),B=!1,be(L)}}}function vc(l,e,t){let n,o,s,{item:a}=e,{content:c=""}=e,{loading:d=!1}=e,{error:f=""}=e;const k=Zt(),_=jo(a);function v(j){j.key==="Escape"&&k("close")}function b(){k("openExternal",a.fileId)}go(()=>{window.addEventListener("keydown",v)}),kl(()=>{window.removeEventListener("keydown",v)});const h=()=>k("close"),y=()=>k("close"),w=j=>{j.key==="Escape"&&(j.preventDefault(),k("close"))};return l.$$set=j=>{"item"in j&&t(0,a=j.item),"content"in j&&t(1,c=j.content),"loading"in j&&t(2,d=j.loading),"error"in j&&t(3,f=j.error)},l.$$.update=()=>{l.$$.dirty&3&&t(6,n=So(a)&&c&&c.startsWith("data:")),l.$$.dirty&1&&t(5,o=To(a)||Do(a)),l.$$.dirty&1&&t(4,s=No(a))},[a,c,d,f,s,o,n,k,_,b,h,y,w]}class kc extends kt{constructor(e){super(),vt(this,e,vc,_c,_t,{item:0,content:1,loading:2,error:3})}}function hc(l){let e,t,n,o,s,a,c,d,f,k,_,v,b,h,y,w,j;return{c(){e=u("div"),t=u("div"),n=u("h3"),o=M(l[0]),s=g(),a=u("p"),c=M(l[1]),d=g(),f=u("div"),k=u("button"),_=M(l[2]),b=g(),h=u("button"),y=M(l[3]),i(n,"class","svelte-1fv6yyk"),i(a,"class","message svelte-1fv6yyk"),i(k,"class",v="btn "+(l[4]?"btn-danger":"btn-primary")+" svelte-1fv6yyk"),i(h,"class","btn svelte-1fv6yyk"),i(f,"class","actions svelte-1fv6yyk"),i(t,"class","modal svelte-1fv6yyk"),i(e,"class","overlay svelte-1fv6yyk"),i(e,"role","presentation")},m(N,T){C(N,e,T),r(e,t),r(t,n),r(n,o),r(t,s),r(t,a),r(a,c),r(t,d),r(t,f),r(f,k),r(k,_),r(f,b),r(f,h),r(h,y),w||(j=[I(k,"click",l[6]),I(h,"click",l[7]),I(e,"click",Ct(l[8])),I(e,"keydown",l[9])],w=!0)},p(N,[T]){T&1&&R(o,N[0]),T&2&&R(c,N[1]),T&4&&R(_,N[2]),T&16&&v!==(v="btn "+(N[4]?"btn-danger":"btn-primary")+" svelte-1fv6yyk")&&i(k,"class",v),T&8&&R(y,N[3])},i:se,o:se,d(N){N&&q(e),w=!1,be(j)}}}function gc(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 d=Zt(),f=()=>d("confirm"),k=()=>d("cancel"),_=()=>d("cancel"),v=b=>{b.key==="Escape"&&(b.preventDefault(),d("cancel"))};return l.$$set=b=>{"title"in b&&t(0,n=b.title),"message"in b&&t(1,o=b.message),"confirmText"in b&&t(2,s=b.confirmText),"cancelText"in b&&t(3,a=b.cancelText),"danger"in b&&t(4,c=b.danger)},[n,o,s,a,c,d,f,k,_,v]}class bc extends kt{constructor(e){super(),vt(this,e,gc,hc,_t,{title:0,message:1,confirmText:2,cancelText:3,danger:4})}}function yc(l){let e,t,n;return{c(){e=U("circle"),t=U("line"),n=U("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){C(o,e,s),C(o,t,s),C(o,n,s)},d(o){o&&(q(e),q(t),q(n))}}}function wc(l){let e,t,n,o;return{c(){e=U("rect"),t=U("polyline"),n=U("line"),o=U("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){C(s,e,a),C(s,t,a),C(s,n,a),C(s,o,a)},d(s){s&&(q(e),q(t),q(n),q(o))}}}function qc(l){let e,t;return{c(){e=U("path"),t=U("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){C(n,e,o),C(n,t,o)},d(n){n&&(q(e),q(t))}}}function Cc(l){let e,t;return{c(){e=U("path"),t=U("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){C(n,e,o),C(n,t,o)},d(n){n&&(q(e),q(t))}}}function jc(l){let e,t,n,o,s;return{c(){e=U("path"),t=U("path"),n=U("line"),o=U("line"),s=U("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){C(a,e,c),C(a,t,c),C(a,n,c),C(a,o,c),C(a,s,c)},d(a){a&&(q(e),q(t),q(n),q(o),q(s))}}}function Sc(l){let e,t,n,o;return{c(){e=U("path"),t=U("polyline"),n=U("line"),o=U("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){C(s,e,a),C(s,t,a),C(s,n,a),C(s,o,a)},d(s){s&&(q(e),q(t),q(n),q(o))}}}function Tc(l){let e,t;return{c(){e=U("path"),t=U("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){C(n,e,o),C(n,t,o)},d(n){n&&(q(e),q(t))}}}function Nc(l){let e,t,n,o;return{c(){e=U("rect"),t=U("rect"),n=U("rect"),o=U("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){C(s,e,a),C(s,t,a),C(s,n,a),C(s,o,a)},d(s){s&&(q(e),q(t),q(n),q(o))}}}function Dc(l){let e;return{c(){e=U("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){C(t,e,n)},d(t){t&&q(e)}}}function Mc(l){let e;function t(s,a){return s[0]==="folder"?Dc:s[0]==="project"?Nc:s[0]==="client"?Tc:s[0]==="document"?Sc:s[0]==="recipe"?jc:s[0]==="note"?Cc:s[0]==="file"?qc:s[0]==="case"?wc:yc}let n=t(l),o=n(l);return{c(){e=U("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){C(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:se,o:se,d(s){s&&q(e),o.d()}}}function Ec(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 Qt extends kt{constructor(e){super(),vt(this,e,Ec,Mc,_t,{kind:0,size:1})}}function rn(l,e,t){const n=l.slice();return n[44]=e[t],n}function Ic(l){let e;return{c(){e=u("span"),i(e,"class","tree-toggle-placeholder svelte-zj71cl")},m(t,n){C(t,e,n)},p:se,d(t){t&&q(e)}}}function Fc(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=M(n),i(t,"class","tree-arrow"),i(e,"class","tree-toggle svelte-zj71cl")},m(d,f){C(d,e,f),r(e,t),r(t,o),s||(a=I(e,"click",We(c)),s=!0)},p(d,f){l=d,f[0]&3&&n!==(n=l[1][l[44].id]?"▾":"▸")&&R(o,n)},d(d){d&&q(e),s=!1,a()}}}function cn(l){let e,t;return e=new Eo({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(){at(e.$$.fragment)},m(n,o){it(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||(ce(e.$$.fragment,n),t=!0)},o(n){he(e.$$.fragment,n),t=!1},d(n){ot(e,n)}}}function dn(l,e){let t,n,o,s,a,c,d,f=e[44].title+"",k,_,v=e[1][e[44].id]&&ml(e[44]),b,h,y,w;function j(G,V){return V[0]&1&&(n=null),n==null&&(n=!!Rt(G[44])),n?Fc:Ic}let N=j(e,[-1,-1]),T=N(e);a=new Qt({props:{kind:un(e[44]),size:16}});function S(...G){return e[26](e[44],...G)}function F(...G){return e[27](e[44],...G)}function A(){return e[28](e[44])}function D(...G){return e[29](e[44],...G)}function P(...G){return e[30](e[44],...G)}function z(...G){return e[31](e[44],...G)}function B(...G){return e[32](e[44],...G)}function L(...G){return e[33](e[44],...G)}function J(...G){return e[34](e[44],...G)}function X(...G){return e[35](e[44],...G)}function K(...G){return e[36](e[44],...G)}function Z(...G){return e[37](e[44],...G)}let H=v&&cn(e);return{key:l,first:null,c(){t=u("div"),T.c(),o=g(),s=u("span"),at(a.$$.fragment),c=g(),d=u("span"),k=M(f),_=g(),H&&H.c(),b=st(),i(s,"class","tree-icon svelte-zj71cl"),i(s,"role","button"),i(s,"tabindex","-1"),i(d,"class","tree-label svelte-zj71cl"),i(d,"role","button"),i(d,"tabindex","-1"),i(t,"class","tree-item svelte-zj71cl"),Be(t,"padding-left",e[3]*16+4+"px"),i(t,"draggable","true"),i(t,"role","button"),i(t,"tabindex","0"),we(t,"selected",e[2]===e[44].id),we(t,"drop-valid",e[8]===e[44].id&&e[9][e[44].id]),we(t,"drop-invalid",e[8]===e[44].id&&!e[9][e[44].id]),this.first=t},m(G,V){C(G,t,V),T.m(t,null),r(t,o),r(t,s),it(a,s,null),r(t,c),r(t,d),r(d,k),C(G,_,V),H&&H.m(G,V),C(G,b,V),h=!0,y||(w=[I(s,"click",S),I(s,"keydown",F),I(s,"dblclick",We(e[24])),I(d,"click",We(A)),I(d,"keydown",D),I(t,"dragstart",P),I(t,"dragover",z),I(t,"dragleave",B),I(t,"drop",L),I(t,"click",J),I(t,"keydown",X),I(t,"dblclick",K),I(t,"contextmenu",_l(Z))],y=!0)},p(G,V){e=G,N===(N=j(e,V))&&T?T.p(e,V):(T.d(1),T=N(e),T&&(T.c(),T.m(t,o)));const Y={};V[0]&1&&(Y.kind=un(e[44])),a.$set(Y),(!h||V[0]&1)&&f!==(f=e[44].title+"")&&R(k,f),(!h||V[0]&8)&&Be(t,"padding-left",e[3]*16+4+"px"),(!h||V[0]&5)&&we(t,"selected",e[2]===e[44].id),(!h||V[0]&769)&&we(t,"drop-valid",e[8]===e[44].id&&e[9][e[44].id]),(!h||V[0]&769)&&we(t,"drop-invalid",e[8]===e[44].id&&!e[9][e[44].id]),V[0]&3&&(v=e[1][e[44].id]&&ml(e[44])),v?H?(H.p(e,V),V[0]&3&&ce(H,1)):(H=cn(e),H.c(),ce(H,1),H.m(b.parentNode,b)):H&&($e(),he(H,1,1,()=>{H=null}),et())},i(G){h||(ce(a.$$.fragment,G),ce(H),h=!0)},o(G){he(a.$$.fragment,G),he(H),h=!1},d(G){G&&(q(t),q(_),q(b)),T.d(),ot(a),H&&H.d(G),y=!1,be(w)}}}function Ac(l){let e=[],t=new Map,n,o,s,a,c=ae(l[0]);const d=f=>f[44].id;for(let f=0;f0:l.has_children===!0}function fn(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 pn(l){const e=[];function t(n){for(const o of n)e.push(o),o.children&&t(o.children)}return t(l),e}function Lc(l){try{return l.dataTransfer.getData("text/plain")}catch{return""}}function Pc(l,e,t){let n,o,s,{nodes:a=[]}=e,{expanded:c={}}=e,{selectedNodeId:d=""}=e,{level:f=0}=e,{onSelect:k=void 0}=e,{onToggle:_=void 0}=e,{onContextMenu:v=void 0}=e,{onDrop:b=void 0}=e,h={},y=null,w="",j="";const N=["folder","project","client","document","recipe","case"];kl(()=>{for(const W of Object.keys(h))clearTimeout(h[W]);y&&clearInterval(y)});function T(W){return N.includes(W.type)}function S(W,Q,pe){if(!W||!Q||Q===W.id||!T(W))return!1;let Te=W.id;for(;Te;){if(Te===Q)return!1;Te=pe[Te]||""}return!0}function F(W,Q){W.stopPropagation(),W.dataTransfer.effectAllowed="move",W.dataTransfer.setData("text/plain",Q.id),t(21,w=Q.id)}function A(W,Q){W.preventDefault(),W.stopPropagation(),W.dataTransfer.dropEffect="move",j!==Q.id&&t(8,j=Q.id),Rt(Q)&&!c[Q.id]&&!h[Q.id]&&(h[Q.id]=setTimeout(()=>{_&&_(Q.id),delete h[Q.id]},600));const pe=W.currentTarget.closest(".workspace-tree-area");if(pe){const Te=pe.getBoundingClientRect(),Ee=30;W.clientY-Te.top{pe.scrollTop-=10},50)):Te.bottom-W.clientY{pe.scrollTop+=10},50)):y&&(clearInterval(y),y=null)}}function D(W,Q){const pe=W.relatedTarget;pe&&W.currentTarget.contains(pe)||(j===Q.id&&t(8,j=""),h[Q.id]&&(clearTimeout(h[Q.id]),delete h[Q.id]),y&&(clearInterval(y),y=null))}function P(W,Q){W.preventDefault(),W.stopPropagation(),h[Q.id]&&(clearTimeout(h[Q.id]),delete h[Q.id]),y&&(clearInterval(y),y=null);const pe=pn(a),Te=fn(pe),Ee=Lc(W);if(!S(Q,Ee,Te)){t(8,j=""),t(21,w="");return}b&&b(Ee,Q.id),t(8,j=""),t(21,w="")}function z(){t(8,j=""),t(21,w="");for(const W of Object.keys(h))clearTimeout(h[W]),delete h[W];y&&(clearInterval(y),y=null)}function B(W,Q){W.target.closest(".tree-toggle")||W.target.closest(".tree-icon")||k&&k(Q)}function L(W,Q){Rt(Q)&&_&&_(Q.id)}function J(W,Q){(W.key==="Enter"||W.key===" ")&&(W.preventDefault(),k&&k(Q))}function X(W,Q){W.stopPropagation(),Rt(Q)&&_&&_(Q.id)}function K(W,Q){(W.key==="Enter"||W.key===" ")&&(W.preventDefault(),W.stopPropagation(),Rt(Q)&&_&&_(Q.id))}function Z(W,Q){(W.key==="Enter"||W.key===" ")&&(W.preventDefault(),k&&k(Q))}function H(W,Q,pe){const Te={};function Ee(ze){for(const He of ze)Te[He.id]=S(He,Q,pe),He.children&&Ee(He.children)}return Ee(W),Te}function G(W){bo.call(this,l,W)}const V=W=>_&&_(W.id),Y=(W,Q)=>X(Q,W),O=(W,Q)=>K(Q,W),ee=W=>k&&k(W),ye=(W,Q)=>Z(Q,W),te=(W,Q)=>F(Q,W),ne=(W,Q)=>A(Q,W),ie=(W,Q)=>D(Q,W),ue=(W,Q)=>P(Q,W),Ie=(W,Q)=>B(Q,W),Ce=(W,Q)=>J(Q,W),Je=(W,Q)=>L(Q,W),Me=(W,Q)=>v&&v(Q,W);return l.$$set=W=>{"nodes"in W&&t(0,a=W.nodes),"expanded"in W&&t(1,c=W.expanded),"selectedNodeId"in W&&t(2,d=W.selectedNodeId),"level"in W&&t(3,f=W.level),"onSelect"in W&&t(4,k=W.onSelect),"onToggle"in W&&t(5,_=W.onToggle),"onContextMenu"in W&&t(6,v=W.onContextMenu),"onDrop"in W&&t(7,b=W.onDrop)},l.$$.update=()=>{l.$$.dirty[0]&1&&t(23,n=pn(a)),l.$$.dirty[0]&8388608&&t(22,o=fn(n)),l.$$.dirty[0]&14680064&&t(9,s=H(n,w,o))},[a,c,d,f,k,_,v,b,j,s,F,A,D,P,z,B,L,J,X,K,Z,w,o,n,G,V,Y,O,ee,ye,te,ne,ie,ue,Ie,Ce,Je,Me]}class Eo extends kt{constructor(e){super(),vt(this,e,Pc,Ac,_t,{nodes:0,expanded:1,selectedNodeId:2,level:3,onSelect:4,onToggle:5,onContextMenu:6,onDrop:7},null,[-1,-1])}}function mn(l,e,t){const n=l.slice();return n[285]=e[t],n}function _n(l,e,t){const n=l.slice();return n[288]=e[t],n}function vn(l,e,t){const n=l.slice();return n[288]=e[t],n}function kn(l,e,t){const n=l.slice();return n[312]=e[t],n}function hn(l,e,t){const n=l.slice();return n[312]=e[t],n}function gn(l,e,t){const n=l.slice();return n[338]=e[t],n}function bn(l,e,t){const n=l.slice();return n[312]=e[t],n}function yn(l,e,t){const n=l.slice();return n[309]=e[t],n[343]=e,n[344]=t,n}function wn(l,e,t){const n=l.slice();return n[312]=e[t],n}function qn(l,e,t){const n=l.slice();return n[320]=e[t],n}function Cn(l,e,t){const n=l.slice();return n[312]=e[t],n}function jn(l,e,t){const n=l.slice();return n[325]=e[t],n}function Sn(l,e,t){const n=l.slice();return n[325]=e[t],n}function Tn(l,e,t){const n=l.slice();return n[309]=e[t],n[330]=e,n[331]=t,n}function Nn(l,e,t){const n=l.slice();return n[312]=e[t],n}function Dn(l,e,t){const n=l.slice();return n[320]=e[t],n}function Mn(l,e,t){const n=l.slice();return n[312]=e[t],n}function En(l,e,t){const n=l.slice();return n[293]=e[t],n}function In(l,e,t){const n=l.slice();return n[309]=e[t],n[310]=e,n[311]=t,n}function Fn(l,e,t){const n=l.slice();return n[312]=e[t],n}function An(l,e,t){const n=l.slice();return n[304]=e[t],n}function Ln(l,e,t){const n=l.slice();return n[301]=e[t],n}function Pn(l,e,t){const n=l.slice();return n[296]=e[t],n}function On(l,e,t){const n=l.slice();return n[293]=e[t],n}function zn(l,e,t){const n=l.slice();return n[296]=e[t],n}function Rn(l,e,t){const n=l.slice();return n[317]=e[t],n}function Bn(l,e,t){const n=l.slice();return n[349]=e[t],n}function Hn(l,e,t){const n=l.slice();return n[352]=e[t],n}function Vn(l){let e,t;return{c(){e=u("span"),t=M(l[31]),i(e,"class","nav-badge svelte-1dkn1q4")},m(n,o){C(n,e,o),r(e,t)},p(n,o){o[1]&1&&R(t,n[31])},d(n){n&&q(e)}}}function Wn(l){let e,t=l[352].label+"",n,o,s,a,c,d,f=l[352].id==="journal"&&l[31]>0&&Vn(l);function k(){return l[153](l[352])}return{c(){e=u("button"),n=M(t),o=g(),f&&f.c(),s=g(),i(e,"class",a="nav-item "+(l[21]===l[352].id?"selected":"")+" svelte-1dkn1q4")},m(_,v){C(_,e,v),r(e,n),r(e,o),f&&f.m(e,null),r(e,s),c||(d=I(e,"click",k),c=!0)},p(_,v){l=_,v[0]&1&&t!==(t=l[352].label+"")&&R(n,t),l[352].id==="journal"&&l[31]>0?f?f.p(l,v):(f=Vn(l),f.c(),f.m(e,s)):f&&(f.d(1),f=null),v[0]&2097153&&a!==(a="nav-item "+(l[21]===l[352].id?"selected":"")+" svelte-1dkn1q4")&&i(e,"class",a)},d(_){_&&q(e),f&&f.d(),c=!1,d()}}}function Oc(l){let e;return{c(){e=u("div"),e.textContent=`${m("nav.noNodes")}`,i(e,"class","nav-empty svelte-1dkn1q4")},m(t,n){C(t,e,n)},p:se,i:se,o:se,d(t){t&&q(e)}}}function zc(l){var a;let e,t,n,o,s;return t=new Eo({props:{nodes:l[1],expanded:l[47],selectedNodeId:((a=l[22])==null?void 0:a.id)||"",onSelect:l[78],onToggle:l[108],onContextMenu:l[106],onDrop:l[109]}}),{c(){e=u("div"),at(t.$$.fragment),i(e,"class","workspace-tree-area svelte-1dkn1q4"),i(e,"role","region"),i(e,"aria-label",m("nav.workspace")),we(e,"drop-valid",l[58])},m(c,d){C(c,e,d),it(t,e,null),n=!0,o||(s=[I(e,"dragover",_l(l[111])),I(e,"dragleave",l[112]),I(e,"drop",l[110])],o=!0)},p(c,d){var k;const f={};d[0]&2&&(f.nodes=c[1]),d[1]&65536&&(f.expanded=c[47]),d[0]&4194304&&(f.selectedNodeId=((k=c[22])==null?void 0:k.id)||""),t.$set(f),(!n||d[1]&134217728)&&we(e,"drop-valid",c[58])},i(c){n||(ce(t.$$.fragment,c),n=!0)},o(c){he(t.$$.fragment,c),n=!1},d(c){c&&q(e),ot(t),o=!1,be(s)}}}function Rc(l){let e;return{c(){e=u("span"),e.textContent=`${m("nav.selectPrompt")}`,i(e,"class","crumb placeholder svelte-1dkn1q4")},m(t,n){C(t,e,n)},p:se,d(t){t&&q(e)}}}function Bc(l){let e,t=ae(l[0]),n=[];for(let o=0;o0&&Gn(l);return{c(){e=u("button"),t=U("svg"),n=U("polyline"),o=U("polyline"),s=U("path"),a=g(),f&&f.c(),i(n,"points","23 4 23 10 17 10"),i(n,"class","svelte-1dkn1q4"),i(o,"points","1 20 1 14 7 14"),i(o,"class","svelte-1dkn1q4"),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-1dkn1q4"),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-1dkn1q4"),i(e,"class","header-sync-btn svelte-1dkn1q4"),e.disabled=l[69],i(e,"title",m("nav.syncNow"))},m(k,_){C(k,e,_),r(e,t),r(t,n),r(t,o),r(t,s),r(e,a),f&&f.m(e,null),c||(d=I(e,"click",l[151]),c=!0)},p(k,_){k[68].unpushedOps>0?f?f.p(k,_):(f=Gn(k),f.c(),f.m(e,null)):f&&(f.d(1),f=null),_[2]&128&&(e.disabled=k[69])},d(k){k&&q(e),f&&f.d(),c=!1,d()}}}function Gn(l){let e,t=l[68].unpushedOps+"",n;return{c(){e=u("span"),n=M(t),i(e,"class","sync-badge svelte-1dkn1q4")},m(o,s){C(o,e,s),r(e,n)},p(o,s){s[2]&64&&t!==(t=o[68].unpushedOps+"")&&R(n,t)},d(o){o&&q(e)}}}function Jn(l){let e,t,n,o,s,a;return{c(){e=u("div"),t=M(l[20]),n=g(),o=u("button"),o.innerHTML='',i(o,"class","dismiss-btn svelte-1dkn1q4"),i(o,"aria-label","Dismiss"),i(e,"class","error-banner svelte-1dkn1q4"),i(e,"role","button"),i(e,"tabindex","0")},m(c,d){C(c,e,d),r(e,t),r(e,n),r(e,o),s||(a=[I(o,"click",We(l[154])),I(e,"click",l[155]),I(e,"keydown",function(){Wt(dt(l[156]))&&dt(l[156]).apply(this,arguments)})],s=!0)},p(c,d){l=c,d[0]&1048576&&R(t,l[20])},d(c){c&&q(e),s=!1,be(a)}}}function Vc(l){let e,t,n;function o(c,d){if(c[43])return Zc;if(c[0].length>0)return Xc;if(c[20])return Yc}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-1dkn1q4"),i(e,"class","welcome svelte-1dkn1q4")},m(c,d){C(c,e,d),r(e,t),r(e,n),a&&a.m(e,null)},p(c,d){s===(s=o(c))&&a?a.p(c,d):(a&&a.d(1),a=s&&s(c),a&&(a.c(),a.m(e,null)))},i:se,o:se,d(c){c&&q(e),a&&a.d()}}}function Wc(l){let e,t,n,o;function s(d,f){return d[4].length===0?xc:Qc}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-1dkn1q4"),i(t,"class","activity-feed-header svelte-1dkn1q4"),i(e,"class","activity-feed svelte-1dkn1q4")},m(d,f){C(d,e,f),r(e,t),r(t,n),r(e,o),c.m(e,null)},p(d,f){a===(a=s(d))&&c?c.p(d,f):(c.d(1),c=a(d),c&&(c.c(),c.m(e,null)))},i:se,o:se,d(d){d&&q(e),c.d()}}}function Uc(l){let e,t,n,o,s,a=l[3].date+"",c,d,f,k,_=l[3].summary&&Zn(l),v=l[30].length>0&&ei(l);function b(w,j){return w[3].groups&&w[3].groups.length>0?e1:$c}let h=b(l),y=h(l);return{c(){e=u("div"),t=u("div"),n=u("h2"),n.textContent=`${m("today.title")}`,o=g(),s=u("span"),c=M(a),d=g(),_&&_.c(),f=g(),v&&v.c(),k=g(),y.c(),i(n,"class","svelte-1dkn1q4"),i(s,"class","today-date svelte-1dkn1q4"),i(t,"class","today-header svelte-1dkn1q4"),i(e,"class","today-dashboard svelte-1dkn1q4")},m(w,j){C(w,e,j),r(e,t),r(t,n),r(t,o),r(t,s),r(s,c),r(e,d),_&&_.m(e,null),r(e,f),v&&v.m(e,null),r(e,k),y.m(e,null)},p(w,j){j[0]&8&&a!==(a=w[3].date+"")&&R(c,a),w[3].summary?_?_.p(w,j):(_=Zn(w),_.c(),_.m(e,f)):_&&(_.d(1),_=null),w[30].length>0?v?v.p(w,j):(v=ei(w),v.c(),v.m(e,k)):v&&(v.d(1),v=null),h===(h=b(w))&&y?y.p(w,j):(y.d(1),y=h(w),y&&(y.c(),y.m(e,null)))},i:se,o:se,d(w){w&&q(e),_&&_.d(),v&&v.d(),y.d()}}}function Kc(l){let e,t,n,o,s,a,c,d,f,k,_,v,b,h,y,w,j,N,T,S,F,A,D,P,z,B,L,J,X,K,Z,H,G,V,Y,O,ee,ye,te,ne,ie,ue,Ie,Ce,Je,Me,W,Q,pe,Te,Ee,ze,He,tt;function Ye(re,ke){return re[13]?i1:n1}let me=Ye(l),De=me(l);function ge(re,ke){return re[10]?s1:o1}let fe=ge(l),de=fe(l),_e=l[14]&&fi(l),ve=l[30].length>0&&pi(l),Ne=l[6]&&ki(l);function Ae(re,ke){return re[5].length===0?r1:a1}let Ve=Ae(l),oe=Ve(l);return{c(){e=u("div"),t=u("div"),n=u("h2"),n.textContent=`${m("journal.title")}`,o=g(),s=u("div"),a=u("label"),c=u("span"),c.textContent=`${m("journal.dateFrom")}`,d=g(),f=u("input"),k=g(),_=u("label"),v=u("span"),v.textContent=`${m("journal.dateTo")}`,b=g(),h=u("input"),y=g(),w=u("label"),j=u("span"),j.textContent=`${m("journal.node")}`,N=g(),T=u("div"),De.c(),S=g(),F=u("label"),de.c(),A=g(),D=u("span"),D.textContent=`${m("journal.includeChildren")}`,z=g(),B=u("label"),L=u("span"),L.textContent=`${m("journal.billable")}`,J=g(),X=u("select"),K=u("option"),K.textContent=`${m("common.all")}`,Z=u("option"),Z.textContent=`${m("journal.billableYes")}`,H=u("option"),H.textContent=`${m("journal.billableNo")}`,G=g(),V=u("label"),Y=u("span"),Y.textContent=`${m("journal.approx")}`,O=g(),ee=u("select"),ye=u("option"),ye.textContent=`${m("common.all")}`,te=u("option"),te.textContent=`${m("journal.approxExact")}`,ne=u("option"),ne.textContent=`${m("journal.approxEstimated")}`,ie=g(),ue=u("button"),ue.textContent=`${m("journal.filter")}`,Ie=g(),Ce=u("button"),Ce.textContent=`${m("journal.exportCSV")}`,Je=g(),Me=u("button"),Me.textContent=`${m("journal.exportMarkdown")}`,W=g(),Q=u("button"),Q.textContent="PDF",pe=g(),_e&&_e.c(),Te=g(),ve&&ve.c(),Ee=g(),Ne&&Ne.c(),ze=g(),oe.c(),i(n,"class","svelte-1dkn1q4"),i(c,"class","label-text svelte-1dkn1q4"),i(f,"type","date"),i(f,"class","svelte-1dkn1q4"),i(a,"class","svelte-1dkn1q4"),i(v,"class","label-text svelte-1dkn1q4"),i(h,"type","date"),i(h,"class","svelte-1dkn1q4"),i(_,"class","svelte-1dkn1q4"),i(j,"class","label-text svelte-1dkn1q4"),i(T,"class","journal-node-picker svelte-1dkn1q4"),Be(T,"position","relative"),i(w,"class","svelte-1dkn1q4"),i(D,"class","svelte-1dkn1q4"),we(D,"disabled-hint",!l[10]),i(F,"class","checkbox-label svelte-1dkn1q4"),i(F,"title",P=l[10]?"":m("journal.includeChildrenDisabledHint")),i(L,"class","label-text svelte-1dkn1q4"),K.__value="all",Se(K,K.__value),i(K,"class","svelte-1dkn1q4"),Z.__value="yes",Se(Z,Z.__value),i(Z,"class","svelte-1dkn1q4"),H.__value="no",Se(H,H.__value),i(H,"class","svelte-1dkn1q4"),i(X,"class","svelte-1dkn1q4"),l[11]===void 0&&Et(()=>l[198].call(X)),i(B,"title",m("journal.billableHint")),i(B,"class","svelte-1dkn1q4"),i(Y,"class","label-text svelte-1dkn1q4"),ye.__value="all",Se(ye,ye.__value),i(ye,"class","svelte-1dkn1q4"),te.__value="no",Se(te,te.__value),i(te,"class","svelte-1dkn1q4"),ne.__value="yes",Se(ne,ne.__value),i(ne,"class","svelte-1dkn1q4"),i(ee,"class","svelte-1dkn1q4"),l[12]===void 0&&Et(()=>l[199].call(ee)),i(V,"title",m("journal.approxHint")),i(V,"class","svelte-1dkn1q4"),i(ue,"class","btn btn-sm svelte-1dkn1q4"),i(Ce,"class","btn btn-sm svelte-1dkn1q4"),i(Me,"class","btn btn-sm svelte-1dkn1q4"),i(Q,"class","btn btn-sm svelte-1dkn1q4"),i(s,"class","journal-filters svelte-1dkn1q4"),i(t,"class","journal-header svelte-1dkn1q4"),i(e,"class","journal-screen svelte-1dkn1q4")},m(re,ke){C(re,e,ke),r(e,t),r(t,n),r(t,o),r(t,s),r(s,a),r(a,c),r(a,d),r(a,f),Se(f,l[7]),r(s,k),r(s,_),r(_,v),r(_,b),r(_,h),Se(h,l[8]),r(s,y),r(s,w),r(w,j),r(w,N),r(w,T),De.m(T,null),r(s,S),r(s,F),de.m(F,null),r(F,A),r(F,D),r(s,z),r(s,B),r(B,L),r(B,J),r(B,X),r(X,K),r(X,Z),r(X,H),Dt(X,l[11],!0),r(s,G),r(s,V),r(V,Y),r(V,O),r(V,ee),r(ee,ye),r(ee,te),r(ee,ne),Dt(ee,l[12],!0),r(s,ie),r(s,ue),r(s,Ie),r(s,Ce),r(s,Je),r(s,Me),r(s,W),r(s,Q),r(s,pe),_e&&_e.m(s,null),r(e,Te),ve&&ve.m(e,null),r(e,Ee),Ne&&Ne.m(e,null),r(e,ze),oe.m(e,null),He||(tt=[I(f,"input",l[191]),I(h,"input",l[192]),I(X,"change",l[198]),I(ee,"change",l[199]),I(ue,"click",l[127]),I(Ce,"click",l[200]),I(Me,"click",l[201]),I(Q,"click",l[202])],He=!0)},p(re,ke){ke[0]&128&&Se(f,re[7]),ke[0]&256&&Se(h,re[8]),me===(me=Ye(re))&&De?De.p(re,ke):(De.d(1),De=me(re),De&&(De.c(),De.m(T,null))),fe===(fe=ge(re))&&de?de.p(re,ke):(de.d(1),de=fe(re),de&&(de.c(),de.m(F,A))),ke[0]&1024&&we(D,"disabled-hint",!re[10]),ke[0]&1024&&P!==(P=re[10]?"":m("journal.includeChildrenDisabledHint"))&&i(F,"title",P),ke[0]&2048&&Dt(X,re[11]),ke[0]&4096&&Dt(ee,re[12]),re[14]?_e?_e.p(re,ke):(_e=fi(re),_e.c(),_e.m(s,null)):_e&&(_e.d(1),_e=null),re[30].length>0?ve?ve.p(re,ke):(ve=pi(re),ve.c(),ve.m(e,Ee)):ve&&(ve.d(1),ve=null),re[6]?Ne?Ne.p(re,ke):(Ne=ki(re),Ne.c(),Ne.m(e,ze)):Ne&&(Ne.d(1),Ne=null),Ve===(Ve=Ae(re))&&oe?oe.p(re,ke):(oe.d(1),oe=Ve(re),oe&&(oe.c(),oe.m(e,null)))},i:se,o:se,d(re){re&&q(e),De.d(),de.d(),_e&&_e.d(),ve&&ve.d(),Ne&&Ne.d(),oe.d(),He=!1,be(tt)}}}function Gc(l){let e,t,n,o,s,a,c=ae(l[76]),d=[];for(let v=0;v{k[h]=null}),et()),~o?(s=k[o],s?s.p(v,b):(s=k[o]=f[o](v),s.c()),ce(s,1),s.m(n,null)):s=null)},i(v){a||(ce(s),a=!0)},o(v){he(s),a=!1},d(v){v&&(q(e),q(t),q(n)),Fe(d,v),~o&&k[o].d()}}}function Jc(l){let e,t,n,o=l[25].title+"",s,a,c,d,f,k,_,v,b,h,y,w=l[25].dirty&&Yi();return{c(){e=u("div"),t=u("div"),n=u("span"),s=M(o),a=g(),w&&w.c(),c=g(),d=u("div"),f=u("button"),f.textContent=`${m("common.save")}`,k=g(),_=u("button"),_.textContent=`${m("common.close")}`,v=g(),b=u("textarea"),i(n,"class","note-title svelte-1dkn1q4"),i(f,"class","btn btn-primary svelte-1dkn1q4"),i(_,"class","btn svelte-1dkn1q4"),i(d,"class","note-editor-actions svelte-1dkn1q4"),i(t,"class","note-editor-header svelte-1dkn1q4"),i(b,"class","note-textarea svelte-1dkn1q4"),i(b,"placeholder",m("note.placeholder")),i(e,"class","note-editor svelte-1dkn1q4")},m(j,N){C(j,e,N),r(e,t),r(t,n),r(n,s),r(t,a),w&&w.m(t,null),r(t,c),r(t,d),r(d,f),r(d,k),r(d,_),r(e,v),r(e,b),Se(b,l[25].content),h||(y=[I(f,"click",l[123]),I(_,"click",l[121]),I(b,"input",l[157]),I(b,"input",l[122])],h=!0)},p(j,N){N[0]&33554432&&o!==(o=j[25].title+"")&&R(s,o),j[25].dirty?w||(w=Yi(),w.c(),w.m(t,c)):w&&(w.d(1),w=null),N[0]&33554432&&Se(b,j[25].content)},i:se,o:se,d(j){j&&q(e),w&&w.d(),h=!1,be(y)}}}function Yc(l){let e,t=m("common.error")+"",n,o,s;return{c(){e=u("p"),n=M(t),o=g(),s=M(l[20]),i(e,"class","error-text svelte-1dkn1q4")},m(a,c){C(a,e,c),r(e,n),r(e,o),r(e,s)},p(a,c){c[0]&1048576&&R(s,a[20])},d(a){a&&q(e)}}}function Xc(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-1dkn1q4"),i(n,"class","hint svelte-1dkn1q4")},m(o,s){C(o,e,s),C(o,t,s),C(o,n,s)},p:se,d(o){o&&(q(e),q(t),q(n))}}}function Zc(l){let e;return{c(){e=u("p"),e.textContent=`${m("common.loading")}`,i(e,"class","svelte-1dkn1q4")},m(t,n){C(t,e,n)},p:se,d(t){t&&q(e)}}}function Qc(l){let e,t=ae(l[4]),n=[];for(let o=0;o0&&Qn(l),s=l[3].summary.notes>0&&xn(l),a=l[3].summary.files>0&&$n(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-1dkn1q4")},m(c,d){C(c,e,d),o&&o.m(e,null),r(e,t),s&&s.m(e,null),r(e,n),a&&a.m(e,null)},p(c,d){c[3].summary.changedCases>0?o?o.p(c,d):(o=Qn(c),o.c(),o.m(e,t)):o&&(o.d(1),o=null),c[3].summary.notes>0?s?s.p(c,d):(s=xn(c),s.c(),s.m(e,n)):s&&(s.d(1),s=null),c[3].summary.files>0?a?a.p(c,d):(a=$n(c),a.c(),a.m(e,null)):a&&(a.d(1),a=null)},d(c){c&&q(e),o&&o.d(),s&&s.d(),a&&a.d()}}}function Qn(l){let e,t=l[3].summary.changedCases+"",n,o,s=mt(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=M(t),o=g(),a=M(s),i(e,"class","summary-chip svelte-1dkn1q4")},m(c,d){C(c,e,d),r(e,n),r(e,o),r(e,a)},p(c,d){d[0]&8&&t!==(t=c[3].summary.changedCases+"")&&R(n,t),d[0]&8&&s!==(s=mt(c[3].summary.changedCases,m("today.plural.case_one"),m("today.plural.case_few"),m("today.plural.case_many"))+"")&&R(a,s)},d(c){c&&q(e)}}}function xn(l){let e,t=l[3].summary.notes+"",n,o,s=mt(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=M(t),o=g(),a=M(s),i(e,"class","summary-chip svelte-1dkn1q4")},m(c,d){C(c,e,d),r(e,n),r(e,o),r(e,a)},p(c,d){d[0]&8&&t!==(t=c[3].summary.notes+"")&&R(n,t),d[0]&8&&s!==(s=mt(c[3].summary.notes,m("today.plural.note_one"),m("today.plural.note_few"),m("today.plural.note_many"))+"")&&R(a,s)},d(c){c&&q(e)}}}function $n(l){let e,t=l[3].summary.files+"",n,o,s=mt(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=M(t),o=g(),a=M(s),i(e,"class","summary-chip svelte-1dkn1q4")},m(c,d){C(c,e,d),r(e,n),r(e,o),r(e,a)},p(c,d){d[0]&8&&t!==(t=c[3].summary.files+"")&&R(n,t),d[0]&8&&s!==(s=mt(c[3].summary.files,m("today.plural.file_one"),m("today.plural.file_few"),m("today.plural.file_many"))+"")&&R(a,s)},d(c){c&&q(e)}}}function ei(l){let e,t,n,o=ae(l[30]),s=[];for(let a=0;a0&&ti(l);return{c(){e=u("div"),t=u("div"),n=u("div"),o=u("button"),a=M(s),c=g(),d=u("span"),k=M(f),_=g(),v=u("span"),h=M(b),y=g(),w=u("div"),j=u("input"),T=g(),S=u("span"),S.textContent=`${m("suggest.minutes")}`,F=g(),A=u("button"),A.textContent=`${m("suggest.apply")}`,D=g(),H&&H.c(),P=g(),i(o,"class","suggestion-node link-btn svelte-1dkn1q4"),i(d,"class","suggestion-summary svelte-1dkn1q4"),i(v,"class","suggestion-confidence svelte-1dkn1q4"),we(v,"low",l[309].confidence==="low"),we(v,"medium",l[309].confidence==="medium"),we(v,"high",l[309].confidence==="high"),i(n,"class","suggestion-info svelte-1dkn1q4"),i(j,"type","number"),i(j,"class","suggestion-min-input svelte-1dkn1q4"),j.value=N=l[309].suggestedMin,i(j,"min","1"),i(j,"max","480"),i(S,"class","suggestion-min-label svelte-1dkn1q4"),i(A,"class","btn btn-sm btn-primary svelte-1dkn1q4"),i(w,"class","suggestion-actions svelte-1dkn1q4"),i(t,"class","suggestion-main svelte-1dkn1q4"),i(t,"role","button"),i(t,"tabindex","0"),i(e,"class","suggestion-card svelte-1dkn1q4"),we(e,"expanded",l[309]._expanded)},m(G,V){C(G,e,V),r(e,t),r(t,n),r(n,o),r(o,a),r(n,c),r(n,d),r(d,k),r(n,_),r(n,v),r(v,h),r(t,y),r(t,w),r(w,j),r(w,T),r(w,S),r(w,F),r(w,A),r(e,D),H&&H.m(e,null),r(e,P),z||(B=[I(o,"click",We(L)),I(j,"change",We(J)),I(A,"click",We(X)),I(t,"click",K),I(t,"keydown",Z)],z=!0)},p(G,V){l=G,V[0]&1073741824&&s!==(s=l[309].nodeTitle+"")&&R(a,s),V[0]&1073741824&&f!==(f=l[309].summary+"")&&R(k,f),V[0]&1073741824&&b!==(b=m("suggest.confidence."+l[309].confidence)+"")&&R(h,b),V[0]&1073741824&&we(v,"low",l[309].confidence==="low"),V[0]&1073741824&&we(v,"medium",l[309].confidence==="medium"),V[0]&1073741824&&we(v,"high",l[309].confidence==="high"),V[0]&1073741824&&N!==(N=l[309].suggestedMin)&&j.value!==N&&(j.value=N),l[309]._expanded&&l[309].events&&l[309].events.length>0?H?H.p(l,V):(H=ti(l),H.c(),H.m(e,P)):H&&(H.d(1),H=null),V[0]&1073741824&&we(e,"expanded",l[309]._expanded)},d(G){G&&q(e),H&&H.d(),z=!1,be(B)}}}function $c(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-1dkn1q4"),i(o,"class","hint svelte-1dkn1q4"),i(e,"class","today-empty svelte-1dkn1q4")},m(s,a){C(s,e,a),r(e,t),r(e,n),r(e,o)},p:se,d(s){s&&q(e)}}}function e1(l){let e,t,n=ae(l[3].groups),o=[];for(let a=0;a0&&ri(l);return{c(){for(let a=0;a0?s?s.p(a,c):(s=ri(a),s.c(),s.m(t.parentNode,t)):s&&(s.d(1),s=null)},d(a){a&&(q(e),q(t)),Fe(o,a),s&&s.d(a)}}}function ii(l){let e,t=l[338].events.length+"",n,o,s=mt(l[338].events.length,m("today.plural.event_one"),m("today.plural.event_few"),m("today.plural.event_many"))+"",a;return{c(){e=u("span"),n=M(t),o=g(),a=M(s),i(e,"class","today-case-count svelte-1dkn1q4")},m(c,d){C(c,e,d),r(e,n),r(e,o),r(e,a)},p(c,d){d[0]&8&&t!==(t=c[338].events.length+"")&&R(n,t),d[0]&8&&s!==(s=mt(c[338].events.length,m("today.plural.event_one"),m("today.plural.event_few"),m("today.plural.event_many"))+"")&&R(a,s)},d(c){c&&q(e)}}}function t1(l){let e;return{c(){e=u("div"),e.textContent=`${m("today.changedCases")}`,i(e,"class","today-events-empty svelte-1dkn1q4")},m(t,n){C(t,e,n)},p:se,d(t){t&&q(e)}}}function l1(l){let e,t=ae(l[338].events),n=[];for(let o=0;o0?l1:t1}let A=F(l),D=A(l);return{c(){e=u("div"),t=u("div"),n=u("span"),s=M(o),a=g(),c=u("span"),f=M(d),k=g(),N&&N.c(),_=g(),v=u("span"),h=M(b),y=g(),D.c(),i(n,"class","today-case-title svelte-1dkn1q4"),i(c,"class","today-case-type svelte-1dkn1q4"),i(v,"class","today-case-time svelte-1dkn1q4"),i(t,"class","today-case-header svelte-1dkn1q4"),i(t,"role","button"),i(t,"tabindex","0"),i(e,"class","today-case svelte-1dkn1q4")},m(P,z){C(P,e,z),r(e,t),r(t,n),r(n,s),r(t,a),r(t,c),r(c,f),r(t,k),N&&N.m(t,null),r(t,_),r(t,v),r(v,h),r(e,y),D.m(e,null),w||(j=[I(t,"click",T),I(t,"keydown",S)],w=!0)},p(P,z){l=P,z[0]&8&&o!==(o=l[338].nodeTitle+"")&&R(s,o),z[0]&8&&d!==(d=l[138](l[338].nodeKind)+"")&&R(f,d),l[338].events?N?N.p(l,z):(N=ii(l),N.c(),N.m(t,_)):N&&(N.d(1),N=null),z[0]&8&&b!==(b=Xe(l[338].lastActivityAt)+"")&&R(h,b),A===(A=F(l))&&D?D.p(l,z):(D.d(1),D=A(l),D&&(D.c(),D.m(e,null)))},d(P){P&&q(e),N&&N.d(),D.d(),w=!1,be(j)}}}function ri(l){let e,t,n,o=ae(l[3].events),s=[];for(let a=0;a0&&mi(l);return{c(){e=u("div"),t=u("div"),n=u("div"),o=u("button"),a=M(s),c=g(),d=u("span"),k=M(f),_=g(),v=u("span"),h=M(b),y=g(),w=u("div"),j=u("input"),T=g(),S=u("span"),S.textContent=`${m("suggest.minutes")}`,F=g(),A=u("button"),A.textContent=`${m("suggest.apply")}`,D=g(),H&&H.c(),P=g(),i(o,"class","suggestion-node link-btn svelte-1dkn1q4"),i(d,"class","suggestion-summary svelte-1dkn1q4"),i(v,"class","suggestion-confidence svelte-1dkn1q4"),we(v,"low",l[309].confidence==="low"),we(v,"medium",l[309].confidence==="medium"),we(v,"high",l[309].confidence==="high"),i(n,"class","suggestion-info svelte-1dkn1q4"),i(j,"type","number"),i(j,"class","suggestion-min-input svelte-1dkn1q4"),j.value=N=l[309].suggestedMin,i(j,"min","1"),i(j,"max","480"),i(S,"class","suggestion-min-label svelte-1dkn1q4"),i(A,"class","btn btn-sm btn-primary svelte-1dkn1q4"),i(w,"class","suggestion-actions svelte-1dkn1q4"),i(t,"class","suggestion-main svelte-1dkn1q4"),i(t,"role","button"),i(t,"tabindex","0"),i(e,"class","suggestion-card svelte-1dkn1q4"),we(e,"expanded",l[309]._expanded)},m(G,V){C(G,e,V),r(e,t),r(t,n),r(n,o),r(o,a),r(n,c),r(n,d),r(d,k),r(n,_),r(n,v),r(v,h),r(t,y),r(t,w),r(w,j),r(w,T),r(w,S),r(w,F),r(w,A),r(e,D),H&&H.m(e,null),r(e,P),z||(B=[I(o,"click",We(L)),I(j,"change",We(J)),I(A,"click",We(X)),I(t,"click",K),I(t,"keydown",Z)],z=!0)},p(G,V){l=G,V[0]&1073741824&&s!==(s=l[309].nodeTitle+"")&&R(a,s),V[0]&1073741824&&f!==(f=l[309].summary+"")&&R(k,f),V[0]&1073741824&&b!==(b=m("suggest.confidence."+l[309].confidence)+"")&&R(h,b),V[0]&1073741824&&we(v,"low",l[309].confidence==="low"),V[0]&1073741824&&we(v,"medium",l[309].confidence==="medium"),V[0]&1073741824&&we(v,"high",l[309].confidence==="high"),V[0]&1073741824&&N!==(N=l[309].suggestedMin)&&j.value!==N&&(j.value=N),l[309]._expanded&&l[309].events&&l[309].events.length>0?H?H.p(l,V):(H=mi(l),H.c(),H.m(e,P)):H&&(H.d(1),H=null),V[0]&1073741824&&we(e,"expanded",l[309]._expanded)},d(G){G&&q(e),H&&H.d(),z=!1,be(B)}}}function ki(l){let e,t,n=m("journal.total")+"",o,s,a=Math.floor(l[6].totalMinutes/60)+"",c,d,f=l[6].totalMinutes%60+"",k,_,v=l[6].totalEntries+"",b,h,y=m("worklog.min")+"",w,j,N,T,S=l[6].byDay&&l[6].byDay.length>0&&hi(l),F=l[6].byNode&&l[6].byNode.length>0&&bi(l);return{c(){e=u("div"),t=u("div"),o=M(n),s=M(": "),c=M(a),d=M("ч "),k=M(f),_=M("м ("),b=M(v),h=g(),w=M(y),j=M(")"),N=g(),S&&S.c(),T=g(),F&&F.c(),i(t,"class","summary-total svelte-1dkn1q4"),i(e,"class","journal-summary svelte-1dkn1q4")},m(A,D){C(A,e,D),r(e,t),r(t,o),r(t,s),r(t,c),r(t,d),r(t,k),r(t,_),r(t,b),r(t,h),r(t,w),r(t,j),r(e,N),S&&S.m(e,null),r(e,T),F&&F.m(e,null)},p(A,D){D[0]&64&&a!==(a=Math.floor(A[6].totalMinutes/60)+"")&&R(c,a),D[0]&64&&f!==(f=A[6].totalMinutes%60+"")&&R(k,f),D[0]&64&&v!==(v=A[6].totalEntries+"")&&R(b,v),A[6].byDay&&A[6].byDay.length>0?S?S.p(A,D):(S=hi(A),S.c(),S.m(e,T)):S&&(S.d(1),S=null),A[6].byNode&&A[6].byNode.length>0?F?F.p(A,D):(F=bi(A),F.c(),F.m(e,null)):F&&(F.d(1),F=null)},d(A){A&&q(e),S&&S.d(),F&&F.d()}}}function hi(l){let e,t,n,o=ae(l[6].byDay),s=[];for(let a=0;a0,b,h,y,w=v&&Ii(l);function j(S,F){return S[27].length===0?b1:g1}let N=j(l),T=N(l);return{c(){e=u("div"),t=u("div"),n=u("input"),o=g(),s=u("input"),a=g(),c=u("button"),f=M(d),_=g(),w&&w.c(),b=g(),T.c(),i(n,"type","text"),i(n,"placeholder",m("worklog.whatDone")),i(n,"class","svelte-1dkn1q4"),i(s,"type","number"),i(s,"placeholder",m("worklog.minutes")),i(s,"min","1"),i(s,"class","svelte-1dkn1q4"),i(c,"class","btn btn-primary svelte-1dkn1q4"),c.disabled=k=!l[29].trim()||!l[28],i(t,"class","worklog-form svelte-1dkn1q4"),i(e,"class","worklog-tab svelte-1dkn1q4")},m(S,F){C(S,e,F),r(e,t),r(t,n),Se(n,l[29]),r(t,o),r(t,s),Se(s,l[28]),r(t,a),r(t,c),r(c,f),r(e,_),w&&w.m(e,null),r(e,b),T.m(e,null),h||(y=[I(n,"input",l[184]),I(s,"input",l[185]),I(c,"click",l[124])],h=!0)},p(S,F){F[0]&536870912&&n.value!==S[29]&&Se(n,S[29]),F[0]&268435456&&Yt(s.value)!==S[28]&&Se(s,S[28]),F[0]&805306368&&k!==(k=!S[29].trim()||!S[28])&&(c.disabled=k),F[0]&1077936128&&(v=S[22]&&S[30].filter(S[152]).length>0),v?w?w.p(S,F):(w=Ii(S),w.c(),w.m(e,b)):w&&(w.d(1),w=null),N===(N=j(S))&&T?T.p(S,F):(T.d(1),T=N(S),T&&(T.c(),T.m(e,null)))},i:se,o:se,d(S){S&&q(e),w&&w.d(),T.d(),h=!1,be(y)}}}function p1(l){let e,t,n,o,s,a;function c(k,_){return k[26].length===0?w1:y1}let d=c(l),f=d(l);return{c(){e=u("div"),t=u("div"),n=u("button"),n.textContent=`${m("action.addAction")}`,o=g(),f.c(),i(n,"class","btn btn-primary svelte-1dkn1q4"),i(t,"class","tab-toolbar svelte-1dkn1q4"),i(e,"class","actions-tab svelte-1dkn1q4")},m(k,_){C(k,e,_),r(e,t),r(t,n),r(e,o),f.m(e,null),s||(a=I(n,"click",l[139]),s=!0)},p(k,_){d===(d=c(k))&&f?f.p(k,_):(f.d(1),f=d(k),f&&(f.c(),f.m(e,null)))},i:se,o:se,d(k){k&&q(e),f.d(),s=!1,a()}}}function m1(l){let e,t,n,o=m("file.addFile")+"",s,a,c,d=m("file.addFolder")+"",f,k,_,v,b,h,y,w,j,N,T,S,F,A=l[56].items.length>0&&zi(l);const D=[C1,q1],P=[];function z(J,X){return J[48]?0:1}h=z(l),y=P[h]=D[h](l);let B=l[44]&&!l[46]&&Bi(),L=l[52]&&Hi(l);return{c(){e=u("div"),t=u("div"),n=u("button"),s=M(o),a=g(),c=u("button"),f=M(d),k=g(),_=u("button"),_.textContent=`${m("file.newFile")}`,v=g(),A&&A.c(),b=g(),y.c(),w=g(),B&&B.c(),j=g(),L&&L.c(),N=st(),i(n,"class","btn btn-primary svelte-1dkn1q4"),n.disabled=l[44],i(c,"class","btn svelte-1dkn1q4"),c.disabled=l[44],i(_,"class","btn svelte-1dkn1q4"),i(t,"class","tab-toolbar svelte-1dkn1q4"),i(e,"class","files-tab svelte-1dkn1q4")},m(J,X){C(J,e,X),r(e,t),r(t,n),r(n,s),r(t,a),r(t,c),r(c,f),r(t,k),r(t,_),r(t,v),A&&A.m(t,null),r(e,b),P[h].m(e,null),r(e,w),B&&B.m(e,null),C(J,j,X),L&&L.m(J,X),C(J,N,X),T=!0,S||(F=[I(n,"click",l[132]),I(c,"click",l[133]),I(_,"click",l[85])],S=!0)},p(J,X){(!T||X[1]&8192)&&(n.disabled=J[44]),(!T||X[1]&8192)&&(c.disabled=J[44]),J[56].items.length>0?A?A.p(J,X):(A=zi(J),A.c(),A.m(t,null)):A&&(A.d(1),A=null);let K=h;h=z(J),h===K?P[h].p(J,X):($e(),he(P[K],1,1,()=>{P[K]=null}),et(),y=P[h],y?y.p(J,X):(y=P[h]=D[h](J),y.c()),ce(y,1),y.m(e,w)),J[44]&&!J[46]?B||(B=Bi(),B.c(),B.m(e,null)):B&&(B.d(1),B=null),J[52]?L?(L.p(J,X),X[1]&2097152&&ce(L,1)):(L=Hi(J),L.c(),ce(L,1),L.m(N.parentNode,N)):L&&($e(),he(L,1,1,()=>{L=null}),et())},i(J){T||(ce(y),ce(L),T=!0)},o(J){he(y),he(L),T=!1},d(J){J&&(q(e),q(j),q(N)),A&&A.d(),P[h].d(),B&&B.d(),L&&L.d(J),S=!1,be(F)}}}function _1(l){let e,t,n,o,s,a,c,d=l[37]&&Vi(l);function f(v,b){return v[24].length===0&&!v[37]?M1:D1}let k=f(l),_=k(l);return{c(){e=u("div"),t=u("div"),n=u("button"),n.textContent=`${m("note.add")}`,o=g(),d&&d.c(),s=g(),_.c(),i(n,"class","btn btn-primary svelte-1dkn1q4"),i(t,"class","tab-toolbar svelte-1dkn1q4"),i(e,"class","notes-tab svelte-1dkn1q4")},m(v,b){C(v,e,b),r(e,t),r(t,n),r(e,o),d&&d.m(e,null),r(e,s),_.m(e,null),a||(c=I(n,"click",l[117]),a=!0)},p(v,b){v[37]?d?d.p(v,b):(d=Vi(v),d.c(),d.m(e,s)):d&&(d.d(1),d=null),k===(k=f(v))&&_?_.p(v,b):(_.d(1),_=k(v),_&&(_.c(),_.m(e,null)))},i:se,o:se,d(v){v&&q(e),d&&d.d(),_.d(),a=!1,c()}}}function v1(l){let e,t,n=l[22].title+"",o,s,a,c,d,f,k=l[138](l[22].type)+"",_,v,b,h,y,w=(l[22].section||"—")+"",j,N,T,S,F,A=ft(l[22].createdAt)+"",D,P,z,B,L,J,X,K,Z=m("overview.newNote")+"",H,G,V,Y,O,ee,ye=m("overview.addFile")+"",te,ne,ie,ue,Ie,Ce,Je=m("overview.addAction")+"",Me,W,Q,pe,Te,Ee,ze,He=m("overview.logTime")+"",tt,Ye,me,De,ge,fe=l[24].length>0&&Ui(l),de=l[27].length>0&&Gi(l);return{c(){e=u("div"),t=u("h2"),o=M(n),s=g(),a=u("div"),c=u("div"),d=u("span"),d.textContent=`${m("overview.type")}`,f=u("span"),_=M(k),v=g(),b=u("div"),h=u("span"),h.textContent=`${m("overview.section")}`,y=u("span"),j=M(w),N=g(),T=u("div"),S=u("span"),S.textContent=`${m("overview.created")}`,F=u("span"),D=M(A),P=g(),z=u("div"),B=u("button"),L=U("svg"),J=U("path"),X=U("path"),K=g(),H=M(Z),G=g(),V=u("button"),Y=U("svg"),O=U("path"),ee=g(),te=M(ye),ne=g(),ie=u("button"),ue=U("svg"),Ie=U("polygon"),Ce=g(),Me=M(Je),W=g(),Q=u("button"),pe=U("svg"),Te=U("circle"),Ee=U("polyline"),ze=g(),tt=M(He),Ye=g(),fe&&fe.c(),me=g(),de&&de.c(),i(t,"class","svelte-1dkn1q4"),i(d,"class","meta-label svelte-1dkn1q4"),i(f,"class","svelte-1dkn1q4"),i(c,"class","meta-item svelte-1dkn1q4"),i(h,"class","meta-label svelte-1dkn1q4"),i(y,"class","svelte-1dkn1q4"),i(b,"class","meta-item svelte-1dkn1q4"),i(S,"class","meta-label svelte-1dkn1q4"),i(F,"class","svelte-1dkn1q4"),i(T,"class","meta-item svelte-1dkn1q4"),i(a,"class","meta-grid svelte-1dkn1q4"),i(J,"d","M12 20h9"),i(J,"class","svelte-1dkn1q4"),i(X,"d","M16.5 3.5a2.121 2.121 0 0 1 3 3L7 19l-4 1 1-4L16.5 3.5z"),i(X,"class","svelte-1dkn1q4"),i(L,"width","16"),i(L,"height","16"),i(L,"viewBox","0 0 24 24"),i(L,"fill","none"),i(L,"stroke","currentColor"),i(L,"stroke-width","2"),i(L,"stroke-linecap","round"),i(L,"stroke-linejoin","round"),i(L,"class","svelte-1dkn1q4"),i(B,"class","qa-btn svelte-1dkn1q4"),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-1dkn1q4"),i(Y,"width","16"),i(Y,"height","16"),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(Y,"class","svelte-1dkn1q4"),i(V,"class","qa-btn svelte-1dkn1q4"),i(Ie,"points","13 2 3 14 12 14 11 22 21 10 12 10 13 2"),i(Ie,"class","svelte-1dkn1q4"),i(ue,"width","16"),i(ue,"height","16"),i(ue,"viewBox","0 0 24 24"),i(ue,"fill","none"),i(ue,"stroke","currentColor"),i(ue,"stroke-width","2"),i(ue,"stroke-linecap","round"),i(ue,"stroke-linejoin","round"),i(ue,"class","svelte-1dkn1q4"),i(ie,"class","qa-btn svelte-1dkn1q4"),i(Te,"cx","12"),i(Te,"cy","12"),i(Te,"r","10"),i(Te,"class","svelte-1dkn1q4"),i(Ee,"points","12 6 12 12 16 14"),i(Ee,"class","svelte-1dkn1q4"),i(pe,"width","16"),i(pe,"height","16"),i(pe,"viewBox","0 0 24 24"),i(pe,"fill","none"),i(pe,"stroke","currentColor"),i(pe,"stroke-width","2"),i(pe,"stroke-linecap","round"),i(pe,"stroke-linejoin","round"),i(pe,"class","svelte-1dkn1q4"),i(Q,"class","qa-btn svelte-1dkn1q4"),i(z,"class","quick-actions svelte-1dkn1q4"),i(e,"class","overview svelte-1dkn1q4")},m(_e,ve){C(_e,e,ve),r(e,t),r(t,o),r(e,s),r(e,a),r(a,c),r(c,d),r(c,f),r(f,_),r(a,v),r(a,b),r(b,h),r(b,y),r(y,j),r(a,N),r(a,T),r(T,S),r(T,F),r(F,D),r(e,P),r(e,z),r(z,B),r(B,L),r(L,J),r(L,X),r(B,K),r(B,H),r(z,G),r(z,V),r(V,Y),r(Y,O),r(V,ee),r(V,te),r(z,ne),r(z,ie),r(ie,ue),r(ue,Ie),r(ie,Ce),r(ie,Me),r(z,W),r(z,Q),r(Q,pe),r(pe,Te),r(pe,Ee),r(Q,ze),r(Q,tt),r(e,Ye),fe&&fe.m(e,null),r(e,me),de&&de.m(e,null),De||(ge=[I(B,"click",l[159]),I(V,"click",l[160]),I(ie,"click",l[139]),I(Q,"click",l[161])],De=!0)},p(_e,ve){ve[0]&4194304&&n!==(n=_e[22].title+"")&&R(o,n),ve[0]&4194304&&k!==(k=_e[138](_e[22].type)+"")&&R(_,k),ve[0]&4194304&&w!==(w=(_e[22].section||"—")+"")&&R(j,w),ve[0]&4194304&&A!==(A=ft(_e[22].createdAt)+"")&&R(D,A),_e[24].length>0?fe?fe.p(_e,ve):(fe=Ui(_e),fe.c(),fe.m(e,me)):fe&&(fe.d(1),fe=null),_e[27].length>0?de?de.p(_e,ve):(de=Gi(_e),de.c(),de.m(e,null)):de&&(de.d(1),de=null)},i:se,o:se,d(_e){_e&&q(e),fe&&fe.d(),de&&de.d(),De=!1,be(ge)}}}function k1(l){let e,t=ae(l[18]),n=[];for(let o=0;o0&&Fi(l);return{c(){e=u("div"),t=u("div"),n=u("div"),o=u("span"),a=M(s),c=g(),d=u("span"),k=M(f),_=g(),b=M(v),h=M(" · "),w=M(y),j=g(),N=u("div"),T=u("button"),T.textContent=`${m("worklog.apply")}`,S=g(),L&&L.c(),F=g(),i(o,"class","suggestion-summary svelte-1dkn1q4"),i(d,"class","suggestion-meta svelte-1dkn1q4"),i(n,"class","suggestion-info svelte-1dkn1q4"),i(T,"class","btn btn-sm btn-primary svelte-1dkn1q4"),i(N,"class","suggestion-actions svelte-1dkn1q4"),i(t,"class","suggestion-main svelte-1dkn1q4"),i(t,"role","button"),i(t,"tabindex","0"),i(e,"class","suggestion-card svelte-1dkn1q4"),we(e,"expanded",l[309]._expanded)},m(J,X){C(J,e,X),r(e,t),r(t,n),r(n,o),r(o,a),r(n,c),r(n,d),r(d,k),r(d,_),r(d,b),r(d,h),r(d,w),r(t,j),r(t,N),r(N,T),r(e,S),L&&L.m(e,null),r(e,F),A||(D=[I(T,"click",We(P)),I(t,"click",z),I(t,"keydown",B)],A=!0)},p(J,X){l=J,X[0]&1077936128&&s!==(s=l[309].summary+"")&&R(a,s),X[0]&1077936128&&f!==(f=l[309].suggestedMin+"")&&R(k,f),X[0]&1077936128&&y!==(y=m("suggest.confidence."+l[309].confidence)+"")&&R(w,y),l[309]._expanded&&l[309].events&&l[309].events.length>0?L?L.p(l,X):(L=Fi(l),L.c(),L.m(e,F)):L&&(L.d(1),L=null),X[0]&1077936128&&we(e,"expanded",l[309]._expanded)},d(J){J&&q(e),L&&L.d(),A=!1,be(D)}}}function g1(l){let e,t=ae(l[27]),n=[];for(let o=0;o',T=g(),i(n,"class","action-title svelte-1dkn1q4"),i(c,"class","action-type svelte-1dkn1q4"),i(_,"class","action-data svelte-1dkn1q4"),i(t,"class","action-info svelte-1dkn1q4"),i(w,"class","btn btn-sm svelte-1dkn1q4"),i(N,"class","btn btn-sm btn-danger svelte-1dkn1q4"),i(y,"class","action-btns svelte-1dkn1q4"),i(e,"class","action-card svelte-1dkn1q4")},m(P,z){C(P,e,z),r(e,t),r(t,n),r(n,s),r(t,a),r(t,c),r(c,f),r(t,k),r(t,_),r(_,b),r(e,h),r(e,y),r(y,w),r(y,j),r(y,N),r(e,T),S||(F=[I(w,"click",A),I(N,"click",D)],S=!0)},p(P,z){l=P,z[0]&67108864&&o!==(o=l[304].title+"")&&R(s,o),z[0]&67108864&&d!==(d=l[143](l[304].type)+"")&&R(f,d),z[0]&67108864&&v!==(v=l[304].data+"")&&R(b,v)},d(P){P&&q(e),S=!1,be(F)}}}function zi(l){let e,t=m("common.paste")+"",n,o,s=l[56].items.length+"",a,c,d;return{c(){e=u("button"),n=M(t),o=g(),a=M(s),i(e,"class","btn svelte-1dkn1q4")},m(f,k){C(f,e,k),r(e,n),r(e,o),r(e,a),c||(d=I(e,"click",l[90]),c=!0)},p(f,k){k[1]&33554432&&s!==(s=f[56].items.length+"")&&R(a,s)},d(f){f&&q(e),c=!1,d()}}}function q1(l){let e,t,n,o,s,a,c;const d=[S1,j1],f=[];function k(h,y){return h[50].length>0?0:1}e=k(l),t=f[e]=d[e](l);const _=[N1,T1],v=[];function b(h,y){return h[51].length===0?0:1}return o=b(l),s=v[o]=_[o](l),{c(){t.c(),n=g(),s.c(),a=st()},m(h,y){f[e].m(h,y),C(h,n,y),v[o].m(h,y),C(h,a,y),c=!0},p(h,y){let w=e;e=k(h),e===w?f[e].p(h,y):($e(),he(f[w],1,1,()=>{f[w]=null}),et(),t=f[e],t?t.p(h,y):(t=f[e]=d[e](h),t.c()),ce(t,1),t.m(n.parentNode,n));let j=o;o=b(h),o===j?v[o].p(h,y):($e(),he(v[j],1,1,()=>{v[j]=null}),et(),s=v[o],s?s.p(h,y):(s=v[o]=_[o](h),s.c()),ce(s,1),s.m(a.parentNode,a))},i(h){c||(ce(t),ce(s),c=!0)},o(h){he(t),he(s),c=!1},d(h){h&&(q(n),q(a)),f[e].d(h),v[o].d(h)}}}function C1(l){let e,t;return{c(){e=u("div"),t=u("p"),t.textContent=`${m("common.loading")}`,i(t,"class","svelte-1dkn1q4"),i(e,"class","empty-state svelte-1dkn1q4")},m(n,o){C(n,e,o),r(e,t)},p:se,i:se,o:se,d(n){n&&q(e)}}}function j1(l){let e,t;return e=new Mo({props:{crumbs:[{name:m("file.root")}]}}),{c(){at(e.$$.fragment)},m(n,o){it(e,n,o),t=!0},p:se,i(n){t||(ce(e.$$.fragment,n),t=!0)},o(n){he(e.$$.fragment,n),t=!1},d(n){ot(e,n)}}}function S1(l){let e,t,n,o,s,a,c,d=m("common.back")+"",f,k,_,v;return e=new Mo({props:{crumbs:[{name:m("file.root")},...l[50]]}}),e.$on("navigate",l[168]),{c(){at(e.$$.fragment),t=g(),n=u("button"),o=U("svg"),s=U("line"),a=U("polyline"),c=g(),f=M(d),i(s,"x1","19"),i(s,"y1","12"),i(s,"x2","5"),i(s,"y2","12"),i(s,"class","svelte-1dkn1q4"),i(a,"points","12 19 5 12 12 5"),i(a,"class","svelte-1dkn1q4"),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-1dkn1q4"),i(n,"class","btn btn-sm back-btn svelte-1dkn1q4")},m(b,h){it(e,b,h),C(b,t,h),C(b,n,h),r(n,o),r(o,s),r(o,a),r(n,c),r(n,f),k=!0,_||(v=I(n,"click",l[81]),_=!0)},p(b,h){const y={};h[1]&524288&&(y.crumbs=[{name:m("file.root")},...b[50]]),e.$set(y)},i(b){k||(ce(e.$$.fragment,b),k=!0)},o(b){he(e.$$.fragment,b),k=!1},d(b){b&&(q(t),q(n)),ot(e,b),_=!1,v()}}}function T1(l){let e,t=[],n=new Map,o,s=ae(l[51]);const a=c=>c[301].id;for(let c=0;c0?m("file.noFiles"):m("file.noFilesCase"))+"",a,c,d,f,k,_,v,b,h,y;return{c(){e=u("div"),t=u("div"),t.innerHTML='',n=g(),o=u("p"),a=M(s),c=g(),d=u("p"),d.textContent=`${m("file.hint")}`,f=g(),k=u("div"),_=u("button"),_.textContent=`${m("file.addFileSimple")}`,v=g(),b=u("button"),b.textContent=`${m("file.addFolderSimple")}`,i(t,"class","empty-icon svelte-1dkn1q4"),i(o,"class","svelte-1dkn1q4"),i(d,"class","hint svelte-1dkn1q4"),i(_,"class","btn btn-primary svelte-1dkn1q4"),i(b,"class","btn svelte-1dkn1q4"),i(k,"class","empty-actions svelte-1dkn1q4"),i(e,"class","empty-state svelte-1dkn1q4")},m(w,j){C(w,e,j),r(e,t),r(e,n),r(e,o),r(o,a),r(e,c),r(e,d),r(e,f),r(e,k),r(k,_),r(k,v),r(k,b),h||(y=[I(_,"click",l[132]),I(b,"click",l[133])],h=!0)},p(w,j){j[1]&524288&&s!==(s=(w[50].length>0?m("file.noFiles"):m("file.noFilesCase"))+"")&&R(a,s)},i:se,o:se,d(w){w&&q(e),h=!1,be(y)}}}function Ri(l,e){let t,n,o;return n=new tc({props:{item:e[301],selected:e[57].includes(e[301].id),onDragStart:e[94],onDragOver:e[95],onDrop:e[96]}}),n.$on("navigate",e[169]),n.$on("preview",e[170]),n.$on("openExternal",e[171]),n.$on("showInFolder",e[172]),n.$on("delete",e[173]),n.$on("rename",e[174]),n.$on("duplicate",e[175]),n.$on("cut",e[176]),n.$on("copy",e[177]),n.$on("selectOne",e[178]),n.$on("toggleSelect",e[179]),n.$on("rangeSelect",e[180]),{key:l,first:null,c(){t=st(),at(n.$$.fragment),this.first=t},m(s,a){C(s,t,a),it(n,s,a),o=!0},p(s,a){e=s;const c={};a[1]&1048576&&(c.item=e[301]),a[1]&68157440&&(c.selected=e[57].includes(e[301].id)),n.$set(c)},i(s){o||(ce(n.$$.fragment,s),o=!0)},o(s){he(n.$$.fragment,s),o=!1},d(s){s&&q(t),ot(n,s)}}}function Bi(l){let e,t;return{c(){e=u("div"),t=u("p"),t.textContent=`${m("file.scanning")}`,i(t,"class","svelte-1dkn1q4"),i(e,"class","empty-state svelte-1dkn1q4")},m(n,o){C(n,e,o),r(e,t)},d(n){n&&q(e)}}}function Hi(l){let e,t;return e=new kc({props:{item:l[52],content:l[53],loading:l[54],error:l[55]}}),e.$on("close",l[84]),e.$on("openExternal",l[181]),{c(){at(e.$$.fragment)},m(n,o){it(e,n,o),t=!0},p(n,o){const s={};o[1]&2097152&&(s.item=n[52]),o[1]&4194304&&(s.content=n[53]),o[1]&8388608&&(s.loading=n[54]),o[1]&16777216&&(s.error=n[55]),e.$set(s)},i(n){t||(ce(e.$$.fragment,n),t=!0)},o(n){he(e.$$.fragment,n),t=!1},d(n){ot(e,n)}}}function Vi(l){let e,t,n,o,s,a,c,d,f;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-1dkn1q4"),i(s,"class","btn btn-primary svelte-1dkn1q4"),i(c,"class","btn svelte-1dkn1q4"),i(o,"class","form-actions svelte-1dkn1q4"),i(e,"class","create-form svelte-1dkn1q4")},m(k,_){C(k,e,_),r(e,t),Se(t,l[38]),r(e,n),r(e,o),r(o,s),r(o,a),r(o,c),d||(f=[I(t,"input",l[164]),I(t,"keydown",l[165]),I(s,"click",l[119]),I(c,"click",l[118])],d=!0)},p(k,_){_[1]&128&&t.value!==k[38]&&Se(t,k[38])},d(k){k&&q(e),d=!1,be(f)}}}function D1(l){let e,t=ae(l[24]),n=[];for(let o=0;ohe(ee[te],1,1,()=>{ee[te]=null});return{c(){e=u("div"),t=u("div"),n=u("h3"),n.textContent=`${m("nav.createNode")}`,o=g(),Y&&Y.c(),s=g(),a=u("div"),c=u("span"),c.textContent=`${m("template.select")}`,d=g(),f=u("div"),k=u("button"),at(_.$$.fragment),v=g(),b=u("div"),h=u("span"),h.textContent=`${m("template.optionNone")}`,y=g(),w=u("span"),w.textContent=`${m("template.none.desc")}`,j=g();for(let te=0;te{h=null}),et()),w[36].node&&w[36].node.parent_id?y?y.p(w,j):(y=to(w),y.c(),y.m(t,s)):y&&(y.d(1),y=null),(!_||j[1]&32)&&Be(t,"left",w[36].x+"px"),(!_||j[1]&32)&&Be(t,"top",w[36].y+"px")},i(w){_||(ce(h),_=!0)},o(w){he(h),_=!1},d(w){w&&q(e),h&&h.d(),y&&y.d(),v=!1,be(b)}}}function $i(l){let e,t,n,o,s,a=ae(l[2].length>0?l[2]:[{id:"",title:"template.optionNone",icon:"folder"}]),c=[];for(let f=0;fhe(c[f],1,1,()=>{c[f]=null});return{c(){e=u("div"),e.textContent=`${m("common.create")}`,t=g();for(let f=0;f0?f[2]:[{id:"",title:"template.optionNone",icon:"folder"}]);let _;for(_=0;_l[238].call(y)),i(v,"class","svelte-1dkn1q4"),i(_,"class","form-group svelte-1dkn1q4"),i(T,"class","label-text svelte-1dkn1q4"),i(D,"type","text"),i(D,"placeholder",P=l[41]==="open_url"?m("action.urlPlaceholder"):l[41]==="open_folder"||l[41]==="open_file"?m("action.pathPlaceholder"):m("action.commandPlaceholder")),i(D,"class","svelte-1dkn1q4"),i(N,"class","svelte-1dkn1q4"),i(j,"class","form-group svelte-1dkn1q4"),i(L,"class","btn btn-primary svelte-1dkn1q4"),i(X,"class","btn svelte-1dkn1q4"),i(B,"class","modal-actions svelte-1dkn1q4"),i(t,"class","modal svelte-1dkn1q4"),i(e,"class","modal-overlay svelte-1dkn1q4"),i(e,"role","button"),i(e,"tabindex","0")},m(V,Y){C(V,e,Y),r(e,t),r(t,n),r(t,o),r(t,s),r(s,a),r(a,c),r(a,d),r(a,f),Se(f,l[40]),r(t,k),r(t,_),r(_,v),r(v,b),r(v,h),r(v,y);for(let O=0;O0?0:1}T=fe(l),S=ge[T]=De[T](l);function de(x,je){return x[22]?Hc:x[21]?Bc:Rc}let _e=de(l),ve=_e(l),Ne=((Qe=l[68])==null?void 0:Qe.configured)&&Kn(l),Ae=l[20]&&Jn(l);const Ve=[Jc,Gc,Kc,Uc,Wc,Vc],oe=[];function re(x,je){return x[25]?0:x[22]?1:x[21]==="journal"?2:x[21]==="today"&&x[3]?3:x[21]==="activity"?4:5}Ie=re(l),Ce=oe[Ie]=Ve[Ie](l);let ke=l[32]&&Xi(l),Le=l[36].visible&&xi(l),Ue=l[39]&&lo(l),Ge=l[46]&&l[45]&&io(l),Ke=l[64]&&so(l),Pe=l[59]&&ro(l),Re=l[67]&&co(l);return{c(){var x;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(),d=u("nav"),f=u("div"),k=u("div"),k.textContent=`${m("nav.system")}`,_=g();for(let je=0;je{ge[lt]=null}),et(),S=ge[T],S?S.p(x,je):(S=ge[T]=De[T](x),S.c()),ce(S,1),S.m(b,null)),(!ze||je[2]&64)&&we(X,"active",(ht=x[68])==null?void 0:ht.configured),(!ze||je[0]&524288)&&R(V,x[19]),_e===(_e=de(x))&&ve?ve.p(x,je):(ve.d(1),ve=_e(x),ve&&(ve.c(),ve.m(ye,null))),(rt=x[68])!=null&&rt.configured?Ne?Ne.p(x,je):(Ne=Kn(x),Ne.c(),Ne.m(ne,null)):Ne&&(Ne.d(1),Ne=null),x[20]?Ae?Ae.p(x,je):(Ae=Jn(x),Ae.c(),Ae.m(O,ue)):Ae&&(Ae.d(1),Ae=null);let ut=Ie;Ie=re(x),Ie===ut?oe[Ie].p(x,je):($e(),he(oe[ut],1,1,()=>{oe[ut]=null}),et(),Ce=oe[Ie],Ce?Ce.p(x,je):(Ce=oe[Ie]=Ve[Ie](x),Ce.c()),ce(Ce,1),Ce.m(O,Je)),x[32]?ke?(ke.p(x,je),je[1]&2&&ce(ke,1)):(ke=Xi(x),ke.c(),ce(ke,1),ke.m(O,Me)):ke&&($e(),he(ke,1,1,()=>{ke=null}),et()),x[36].visible?Le?(Le.p(x,je),je[1]&32&&ce(Le,1)):(Le=xi(x),Le.c(),ce(Le,1),Le.m(O,W)):Le&&($e(),he(Le,1,1,()=>{Le=null}),et()),x[39]?Ue?Ue.p(x,je):(Ue=lo(x),Ue.c(),Ue.m(O,Q)):Ue&&(Ue.d(1),Ue=null),x[46]&&x[45]?Ge?Ge.p(x,je):(Ge=io(x),Ge.c(),Ge.m(O,pe)):Ge&&(Ge.d(1),Ge=null),x[64]?Ke?Ke.p(x,je):(Ke=so(x),Ke.c(),Ke.m(O,Te)):Ke&&(Ke.d(1),Ke=null),x[59]?Pe?(Pe.p(x,je),je[1]&268435456&&ce(Pe,1)):(Pe=ro(x),Pe.c(),ce(Pe,1),Pe.m(O,Ee)):Pe&&($e(),he(Pe,1,1,()=>{Pe=null}),et()),x[67]?Re?Re.p(x,je):(Re=co(x),Re.c(),Re.m(O,null)):Re&&(Re.d(1),Re=null)},i(x){ze||(ce(S),ce(Ce),ce(ke),ce(Le),ce(Pe),ze=!0)},o(x){he(S),he(Ce),he(ke),he(Le),he(Pe),ze=!1},d(x){x&&q(e),Fe(me,x),ge[T].d(),ve.d(),Ne&&Ne.d(),Ae&&Ae.d(),oe[Ie].d(),ke&&ke.d(),Le&&Le.d(),Ue&&Ue.d(),Ge&&Ge.d(),Ke&&Ke.d(),Pe&&Pe.d(),Re&&Re.d(),He=!1,be(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 Bt(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&&Bt(n.children,e,t))return!0}return!1}function Io(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&&Io(n.children,e,t))return!0}return!1}async function ko(l){if(l._expanded=!l._expanded,l._expanded&&!l._events&&l._hasEvents===void 0)try{l._events=await $("GetWorklogEntryEvents",l.id)||[],l._hasEvents=l._events.length>0}catch{l._events=[],l._hasEvents=!1}}function Xe(l){return l?new Date(l).toLocaleTimeString("ru-RU",{hour:"2-digit",minute:"2-digit"}):""}function It(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 ft(l){if(!l)return"";try{return new Date(l).toLocaleDateString("ru-RU",{day:"numeric",month:"short"})}catch{return l}}function mt(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 dt(l){return e=>{(e.key==="Enter"||e.key===" ")&&(e.preventDefault(),l())}}function z1(l,e,t){let n=[],o=[],s=[],a=null,c=[],d=0,f=!0,k=[],_=null,v="",b="",h=!1,y="",w="all",j="all",N="",T="",S="",F=[],A=!1,D=[],P="",z="",B="",L=null,J="overview",X=[],K=null,Z=[],H=[],G=[],V="",Y="",O=[],ee=0,ye=!1,te="",ne=null,ie=null,ue={visible:!1,x:0,y:0,node:null},Ie=!1,Ce="",Je=!1,Me="",W="open_url",Q="",pe=[{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")}],Te=!0,Ee=!1,ze=null,He=!1,tt="",Ye="",me={},De=!1,ge=null,fe=[],de=[],_e=null,ve="",Ne=!1,Ae="",Ve={items:[],mode:"copy"},oe=[],re=[],ke=!1,Le=!1,Ue="",Ge="",Ke=!1,Pe=m("common.delete"),Re=null,Qe=null,x=!1,je="",lt="",ut="",ht=!1,rt=null,Oe=!1,pt="",gt="",bt="",yt=0,Ze="";const Fo=[{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 xt=null;go(async()=>{try{t(19,P=await $("VerstakVersion")||"verstak-gui/v2"),t(0,n=await $("ListSystemViews")||[]),t(1,o=await $("ListWorkspaceTree")||[]),t(2,s=await $("ListEnabledTemplates")||[])}catch(p){t(20,z=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",fs),xt=()=>window.runtime.EventsOff("files-dropped")),window.addEventListener("keydown",Ml),t(43,Te=!1),Ot()}),kl(()=>{xt&&xt(),window.removeEventListener("keydown",Ml)});async function hl(p){t(21,B=p),t(22,L=null),t(23,J="overview"),t(24,X=[]),Z=[],t(26,H=[]),t(27,G=[]),t(30,O=[]),t(32,ye=!1),t(20,z=""),t(3,a=null),t(4,c=[]),d=0,f=!0,t(5,k=[]),t(6,_=null);try{p==="today"?(t(3,a=await $("ListTodayView")||{cases:[]}),t(30,O=await $("GetSuggestions")||[]),t(31,ee=O.length)):p==="journal"?await Pt():p==="activity"&&(t(4,c=await $("ListActivityFeed",50,0)||[]),d=c.length,f=c.length===50)}catch(E){t(20,z=String(E)),t(3,a={cases:[]}),t(4,c=[])}}async function jt(p){t(22,L=p),t(23,J="overview"),t(24,X=[]),Z=[],t(26,H=[]),t(27,G=[]),t(30,O=[]),t(51,de=[]),t(50,fe=[]),t(49,ge=null),t(52,_e=null),t(53,ve=""),t(57,oe=[]),re=[],t(25,K=null),t(32,ye=!1),t(37,Ie=!1),t(20,z=""),t(18,D=[]),await gl(p.id)}async function gl(p){try{t(24,X=await $("ListNotes",p)||[])}catch{}try{Z=await $("ListFiles",p)||[]}catch{}try{t(26,H=await $("ListActions",p)||[])}catch{}try{t(27,G=await $("ListWorklog",p)||[])}catch{}try{t(30,O=await $("GetSuggestions")||[]),t(31,ee=O.length)}catch{t(30,O=[]),t(31,ee=0)}try{t(18,D=await $("ListActivityByNode",p,50,0)||[])}catch{}}async function nt(p){t(48,De=!0);try{let E=await $("ListItems",p)||[];E.sort((le,qe)=>le.type!==qe.type?le.type==="folder"?-1:1:(le.name||"").localeCompare(qe.name||"")),t(51,de=E)}catch{t(51,de=[])}t(48,De=!1)}async function $t(p){if(!L)return;try{const le=await $("GetNodeDetail",p);le&&t(50,fe=[...fe,{id:p,name:le.title}])}catch{t(50,fe=[...fe,{id:p,name:"..."}])}t(49,ge=p),t(47,me={...me,[p]:!0});const E=await $("ListWorkspaceChildren",p)||[];Bt(o,p,E),t(1,o=[...o]),await nt(p)}function bl(){if(fe.length<2)t(50,fe=[]),t(49,ge=null),nt(L.id);else{const p=fe[fe.length-2];t(50,fe=fe.slice(0,-1)),t(49,ge=p.id),nt(p.id)}}function yl(p){const E=fe[p];t(50,fe=fe.slice(0,p+1)),t(49,ge=E.id),nt(E.id)}async function el(p){t(52,_e=p),t(53,ve=""),t(55,Ae=""),t(54,Ne=!0);try{Jr(p)?t(53,ve=await $("GetFileBase64",p.fileId)||""):Yr(p)&&t(53,ve=await $("ReadFileText",p.fileId)||"")}catch(E){t(55,Ae=String(E))}t(54,Ne=!1)}function tl(){t(52,_e=null),t(53,ve=""),t(55,Ae="")}async function Ao(){const p=prompt(m("file.namePrompt"));if(!(!p||!p.trim()))try{const E=ge||L.id;await $("CreateEmptyFile",E,p.trim()),await nt(E),await il(E)}catch(E){t(20,z=String(E))}}async function wl(p){try{await $("DuplicateNode",p);const E=ge||L.id;await nt(E),await il(E)}catch(E){t(20,z=String(E))}}function ql(p){const E=de.find(le=>le.id===p);E&&nl(E.id,E.name)}function Cl(p){t(56,Ve={items:[p],mode:"cut"})}function jl(p){t(56,Ve={items:[p],mode:"copy"})}async function Sl(){if(Ve.items.length===0)return;const p=ge||L.id;try{if(Ve.mode==="copy")for(const E of Ve.items)await $("DuplicateNode",E);else for(const E of Ve.items)await $("MoveNode",E,p);t(56,Ve={items:[],mode:"copy"}),await nt(p)}catch(E){t(20,z=String(E))}}function Tl(p){oe.includes(p)?t(57,oe=oe.filter(E=>E!==p)):t(57,oe=[...oe,p])}function Nl(p){t(57,oe=[p])}function Lo(){t(57,oe=de.map(p=>p.id))}function Dl(p){if(de.length===0)return;const E=oe.length>0?oe[oe.length-1]:de[0].id,le=de.findIndex(wt=>wt.id===E),qe=de.findIndex(wt=>wt.id===p);if(le===-1||qe===-1)return;const ct=Math.min(le,qe),zt=Math.max(le,qe),pr=de.slice(ct,zt+1).map(wt=>wt.id),Ql=new Set(oe);pr.forEach(wt=>Ql.add(wt)),t(57,oe=[...Ql])}function Po(){t(57,oe=[])}function ll(p){return p.length>0?p:de.map(E=>E.id)}async function Oo(){const p=ll(oe),E=de.find(qe=>qe.id===p[0]);let le;p.length===1&&(E==null?void 0:E.type)==="folder"?le=m("delete.folder"):p.length===1?le=m("delete.file"):le=m("delete.files",{count:p.length}),Ft({title:m("delete.confirmTitle"),message:m("delete.confirmMessage")+" "+le+"?",confirmText:m("common.delete"),danger:!0,onConfirm:async()=>{for(const ct of p)try{await $("DeleteFileOrFolder",ct)}catch(zt){t(20,z=String(zt))}t(57,oe=[]);const qe=ge||L.id;await nt(qe)}})}function zo(){const p=ll(oe);t(56,Ve={items:p,mode:"cut"}),t(57,oe=[])}function Ro(){const p=ll(oe);t(56,Ve={items:p,mode:"copy"}),t(57,oe=[])}function Bo(p,E){const le=oe.includes(E)?oe:[E];re=le,p.dataTransfer.effectAllowed="move",p.dataTransfer.setData("text/plain",le.join(","))}function Ho(p,E){const le=de.find(qe=>qe.id===E);le&&le.type==="folder"&&(p.preventDefault(),p.dataTransfer.dropEffect="move")}async function Vo(p,E){if(p.preventDefault(),re.length!==0){for(const le of re)try{await $("MoveNode",le,E)}catch(qe){t(20,z=String(qe))}re=[],t(57,oe=[]),await nt(ge||L.id)}}function Ml(p){if(J==="files"&&!(p.target.tagName==="INPUT"||p.target.tagName==="TEXTAREA"))if(p.ctrlKey||p.metaKey)p.key==="c"||p.key==="C"?(p.preventDefault(),Ro()):p.key==="x"||p.key==="X"?(p.preventDefault(),zo()):p.key==="v"||p.key==="V"?(p.preventDefault(),Sl()):p.key==="a"||p.key==="A"?(p.preventDefault(),Lo()):p.key==="o"||p.key==="O"?(p.preventDefault(),Wo()):p.key==="Enter"&&(p.preventDefault(),El());else if(p.key==="Enter")p.preventDefault(),El();else if(p.key==="Delete"||p.key==="Backspace"){if(_e){p.preventDefault(),tl();return}if(oe.length>0){p.preventDefault(),Oo();return}if(p.key==="Backspace"&&fe.length>0){p.preventDefault(),bl();return}}else if(p.key==="Escape"){if(_e){tl();return}if(oe.length>0){Po();return}}else p.key==="F2"&&(p.preventDefault(),Uo())}function El(){if(oe.length===1){const p=de.find(E=>E.id===oe[0]);p&&(p.type==="folder"?$t(p.id):el(p))}}function Wo(){if(oe.length===1){const p=de.find(E=>E.id===oe[0]);p&&p.fileId&&$("OpenFile",p.fileId)}}function nl(p,E){je=p,t(65,lt=E),t(66,ut=""),t(64,x=!0)}function Uo(){if(oe.length===1){const p=de.find(E=>E.id===oe[0]);p&&nl(p.id,p.name)}}async function Il(){const p=lt.trim();if(!p){t(66,ut=m("rename.emptyError"));return}try{await $("ValidateName",p)}catch{t(66,ut=m("rename.invalidError"));return}t(64,x=!1);const E=je;je="";try{await $("RenameNode",E,p),L&&L.id===E&&t(22,L={...L,title:p}),await At(),ge&&await nt(ge)}catch(le){t(20,z=String(le))}}function Ko(){t(64,x=!1),je="",t(65,lt=""),t(66,ut="")}function Go(p){p.key==="Enter"?Il():t(66,ut="")}function Ft(p){t(60,Ue=p.title||m("common.confirm")),t(61,Ge=p.message||""),t(62,Ke=p.danger!==void 0?p.danger:!0),t(63,Pe=p.confirmText||m("common.delete")),Re=p.onConfirm||null,Qe=p.onCancel||null,t(59,Le=!0)}function Fl(){t(59,Le=!1),Re=null,Qe=null}function Jo(){Re&&Re(),Fl()}function Yo(){Qe&&Qe(),Fl()}function Al(p){t(34,ne=ue.node),t(35,ie=p),t(33,te=""),t(32,ye=!0),St()}function Xo(){t(34,ne=null),t(35,ie=void 0),t(33,te=""),t(32,ye=!0)}function Zo(){t(32,ye=!1),t(33,te=""),t(34,ne=null),t(35,ie=void 0)}async function Ll(){if(!(!te.trim()||ie===void 0))try{const p=ne?ne.id:"",E=ie?ie.id:"",le=await $("CreateNodeFromTemplate",p,te.trim(),E);t(32,ye=!1),t(33,te="");const qe=le?le.id:null;if(t(34,ne=null),t(35,ie=void 0),p){t(47,me={...me,[p]:!0});const ct=await $("ListWorkspaceChildren",p)||[];Bt(o,p,ct),t(1,o=[...o])}else t(1,o=await $("ListWorkspaceTree")||o);if(qe){const ct=await $("GetNodeDetail",qe);ct&&(t(21,B=""),jt(ct))}}catch(p){t(20,z=String(p))}}function Qo(p,E){t(36,ue={visible:!0,x:p.clientX,y:p.clientY,node:E})}function St(){t(36,ue={visible:!1,x:0,y:0,node:null})}async function xo(p){const E=!me[p];if(t(47,me={...me,[p]:E}),!E)return;const le=await $("ListWorkspaceChildren",p)||[];Bt(o,p,le),t(1,o=[...o])}async function $o(p,E){if(!(!p||!E||p===E))try{const le=await $("MoveNode",p,E);await At();const qe=await $("GetNodeDetail",p);qe&&(t(21,B=""),jt(qe))}catch(le){t(20,z=String(le))}}async function es(p){p.preventDefault();try{const E=p.dataTransfer.getData("text/plain");if(!E)return;const le=await $("GetNodeDetail",E);if(!le||!le.parent_id)return;await $("MoveNode",E,""),await At();const qe=await $("GetNodeDetail",E);qe&&(t(21,B=""),jt(qe))}catch(E){t(20,z=String(E))}}function ts(p){p.preventDefault(),p.dataTransfer.dropEffect="move",t(58,ke=!0)}function ls(p){t(58,ke=!1)}function Pl(p){nl(p.id,p.title),St()}function Ol(p){St(),Ft({title:m("delete.confirmTitle"),message:m("delete.confirmMessage")+" "+p.title+"?",confirmText:m("common.delete"),danger:!0,onConfirm:async()=>{try{await $("DeleteNode",p.id),await At(),L&&L.id===p.id&&t(22,L=null)}catch(E){t(20,z=String(E))}}})}async function zl(p){St();try{await $("OpenFolder",p.id)}catch(E){t(20,z=String(E))}}async function Rl(p){St();try{await $("MoveNode",p.id,""),await At();const E=await $("GetNodeDetail",p.id);E&&(t(21,B=""),jt(E))}catch(E){t(20,z=String(E))}}async function At(){const p=Object.keys(me).filter(le=>me[le]),E=await $("ListWorkspaceTree")||[];for(const le of p){const ct=(await $("ListWorkspaceChildren",le)||[]).map(zt=>({...zt}));Io(E,le,ct)}t(1,o=E)}async function il(p){const E=await $("ListWorkspaceChildren",p)||[];Bt(o,p,E),t(1,o=[...o])}function Bl(){t(37,Ie=!0),t(38,Ce="")}function ns(){t(37,Ie=!1),t(38,Ce="")}async function Hl(){if(!(!Ce.trim()||!L))try{const p=await $("CreateNote",L.id,Ce.trim());t(24,X=[...X,p&&p.id?p:{id:Date.now().toString(),title:Ce.trim(),createdAt:new Date().toISOString()}]),t(37,Ie=!1),t(38,Ce="")}catch{const E={id:Date.now().toString(),title:Ce.trim(),createdAt:new Date().toISOString()};t(24,X=[...X,E]),t(37,Ie=!1),t(38,Ce="")}}async function Lt(p){if(K&&K.dirty){Ft({title:m("note.unsavedTitle"),message:m("note.unsavedMessage"),confirmText:m("note.unsavedClose"),danger:!1,onConfirm:async()=>{await Vl(p)}});return}await Vl(p)}async function Vl(p){try{const E=await $("ReadNote",p.id);t(25,K={id:p.id,title:p.title,content:E||"",dirty:!1})}catch{t(25,K={id:p.id,title:p.title,content:"# "+p.title+` + +`,dirty:!1})}}function is(){if(K&&K.dirty){Ft({title:m("note.unsavedTitle"),message:m("note.unsavedMessage"),confirmText:m("note.unsavedClose"),danger:!1,onConfirm:()=>{t(25,K=null)}});return}t(25,K=null)}function os(p){K&&(t(25,K.content=p.target.value,K),t(25,K.dirty=!0,K))}async function ss(){if(K)try{await $("SaveNote",K.id,K.content),t(25,K.dirty=!1,K)}catch{t(25,K.dirty=!1,K)}}async function as(){const p=parseInt(V,10);if(!(!Y.trim()||isNaN(p)||p<=0||!L)){try{const E=await $("CreateWorklog",L.id,Y.trim(),p);t(27,G=[...G,E&&E.id?E:{id:Date.now().toString(),nodeId:L.id,summary:Y.trim(),minutes:p,createdAt:new Date().toISOString()}])}catch{t(27,G=[...G,{id:Date.now().toString(),nodeId:L.id,summary:Y.trim(),minutes:p,createdAt:new Date().toISOString()}])}t(29,Y=""),t(28,V="")}}async function Wl(){t(30,O=await $("GetSuggestions")||[]),t(31,ee=O.length),L&&t(27,G=await $("ListWorklog",L.id)||[]),B==="journal"&&await Pt()}async function ol(p){try{await $("AcceptSuggestionWith",p,p.suggestedMin,""),await Wl()}catch(E){console.error(E)}}async function Ul(p){try{await $("AcceptSuggestionWith",p,p.suggestedMin,""),await Wl()}catch(E){console.error(E)}}async function Pt(){try{const[p,E,le]=await Promise.all([$("ListWorklogReport",v,b,y,h,w,j),$("WorklogReportSummary",v,b,y,h,w,j),$("GetSuggestions")]);if(t(5,k=p||[]),t(6,_=E||null),t(30,O=le||[]),t(31,ee=O.length),y&&!N)if(p&&p.length>0&&p[0].nodePath)t(13,N=p[0].nodePath);else try{t(13,N=await $("GetNodeTitle",y))}catch{t(13,N="")}}catch{t(5,k=[]),t(6,_=null),t(30,O=[]),t(31,ee=0)}}async function Ut(p){try{const E=await $("SaveWorklogReport",p,v,b,y,h,w,j);t(14,T=E),setTimeout(()=>t(14,T=""),4e3)}catch(E){if(String(E).includes("отменено"))return;t(14,T="Ошибка: "+String(E)),setTimeout(()=>t(14,T=""),6e3)}}let Kl;async function rs(){const p=S.trim();if(!p||p.length<2){t(16,F=[]),t(17,A=!1);return}try{t(16,F=await $("SearchNodes",p)||[]),t(17,A=F.length>0)}catch{t(16,F=[]),t(17,A=!1)}}function cs(){clearTimeout(Kl),Kl=setTimeout(rs,200)}function Gl(p){t(10,y=p.id),t(13,N=p.path||p.title),t(9,h=!0),t(15,S=""),t(16,F=[]),t(17,A=!1),Pt()}function Jl(){t(10,y=""),t(9,h=!1),t(13,N=""),t(15,S=""),t(16,F=[]),t(17,A=!1),Pt()}async function Yl(){const p=await $("PickFile");if(!p)return;const E=ge||L.id;await sl(E,p)}async function ds(){const p=await $("PickDirectory");if(!p)return;const E=ge||L.id;await sl(E,p)}async function sl(p,E){t(44,Ee=!0);try{const le=await $("PreviewImport",E);t(45,ze=le),tt=E,Ye=p,t(46,He=!0)}catch(le){t(20,z=String(le))}t(44,Ee=!1)}async function al(p){try{const E=Ye||L.id,le=p==="copy"?await $("AddPathCopy",E,tt):await $("AddPathLink",E,tt);t(46,He=!1),t(45,ze=null),t(50,fe=[]),t(49,ge=null),await Promise.all([gl(E),nt(E),il(E)])}catch(E){t(20,z=String(E))}}function us(){t(46,He=!1),t(45,ze=null)}async function Xl({id:p,type:E}){const le=m(E==="folder"?"delete.folder":"delete.file");Ft({title:m("delete.confirmTitle"),message:m("delete.confirmMessage")+" "+le+"?",confirmText:m("common.delete"),danger:!0,onConfirm:async()=>{try{await $("DeleteFileOrFolder",p),Z=Z.filter(ct=>ct.nodeId!==p);const qe=ge||L.id;await nt(qe)}catch(qe){t(20,z=String(qe))}}})}async function fs(p){if(!p||p.length===0)return;if(!L){t(20,z=m("error.selectCaseFirst"));return}const E=p[0];await sl(L.id,E)}function ps(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 ms(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 _s(){t(39,Je=!0),t(40,Me=""),t(41,W="open_url"),t(42,Q="")}function vs(){t(39,Je=!1),t(40,Me=""),t(42,Q="")}async function rl(){if(!(!Me.trim()||!Q.trim()||!L))try{const p=await $("CreateAction",L.id,W,Me.trim(),Q.trim());p&&p.id&&t(26,H=[...H,p]),t(39,Je=!1),t(40,Me=""),t(42,Q="")}catch(p){t(20,z=String(p))}}async function Zl(p){try{await $("DeleteAction",p),t(26,H=H.filter(E=>E.id!==p))}catch(E){t(20,z=String(E))}}function ks(p){const E=pe.find(le=>le.id===p);return E?E.label:p}async function xe(p){try{const E=await $("GetNodeDetail",p);E&&jt(E)}catch(E){t(20,z=String(E))}}async function Ot(){try{t(68,rt=await $("SyncStatus"))}catch{t(68,rt={configured:!1,serverUrl:"",deviceId:"",unpushedOps:0,lastSyncAt:"",syncInterval:0})}}function hs(){t(67,ht=!0),t(70,pt=(rt==null?void 0:rt.serverUrl)||""),t(71,gt=""),t(72,bt=""),t(73,yt=(rt==null?void 0:rt.syncInterval)||0),t(74,Ze="")}function gs(){t(67,ht=!1),t(74,Ze="")}async function bs(){t(69,Oe=!0),t(74,Ze="");try{await $("SyncConfigure",pt,gt,bt),yt>0&&await $("SyncSetInterval",yt),t(72,bt=""),t(71,gt=""),await Ot(),t(67,ht=!1)}catch(p){t(74,Ze="err: "+String(p))}t(69,Oe=!1)}async function ys(){t(69,Oe=!0),t(74,Ze="");try{await $("SyncSetInterval",yt),t(74,Ze=m("sync.settingsSaved")),await Ot()}catch(p){t(74,Ze="err: "+String(p))}t(69,Oe=!1)}async function ws(){t(69,Oe=!0),t(74,Ze="");try{await $("SyncTestConnection",pt,gt,bt),t(74,Ze="connection ok")}catch(p){t(74,Ze="connection failed: "+String(p))}t(69,Oe=!1)}async function qs(){t(69,Oe=!0),t(74,Ze="");try{await $("SyncDisconnect"),t(74,Ze="disconnected"),await Ot()}catch(p){t(74,Ze="err: "+String(p))}t(69,Oe=!1)}async function Cs(){t(69,Oe=!0),t(74,Ze="");try{const p=await $("SyncNow");t(74,Ze="pushed "+p.pushed+", pulled "+p.pulled+" (seq "+p.serverSequence+")"),await Ot()}catch(p){t(74,Ze="err: "+String(p))}t(69,Oe=!1)}const js=p=>p.nodeId===L.id,Ss=p=>hl(p.id),Ts=()=>t(20,z=""),Ns=()=>t(20,z=""),Ds=()=>t(20,z="");function Ms(){K.content=this.value,t(25,K)}const Es=p=>{t(23,J=p.id),p.id==="files"&&L&&de.length===0&&!ge&&nt(L.id)},Is=()=>{t(23,J="notes"),Bl()},Fs=()=>{t(23,J="files"),Yl()},As=()=>t(23,J="worklog"),Ls=p=>Lt(p),Ps=p=>Lt(p);function Os(){Ce=this.value,t(38,Ce)}const zs=p=>p.key==="Enter"&&Hl(),Rs=p=>Lt(p),Bs=p=>Lt(p),Hs=p=>{const E=p.detail;E===0?(t(50,fe=[]),t(49,ge=null),nt(L.id)):yl(E-1)},Vs=p=>$t(p.detail),Ws=p=>el(p.detail),Us=p=>$("OpenFile",p.detail),Ks=p=>$("OpenFolder",p.detail),Gs=p=>Xl(p.detail),Js=p=>ql(p.detail.id),Ys=p=>wl(p.detail),Xs=p=>Cl(p.detail),Zs=p=>jl(p.detail),Qs=p=>Nl(p.detail),xs=p=>Tl(p.detail),$s=p=>Dl(p.detail),ea=p=>$("OpenFile",p.detail),ta=p=>$("RunAction",p.id),la=p=>Zl(p.id);function na(){Y=this.value,t(29,Y)}function ia(){V=Yt(this.value),t(28,V)}const oa=p=>p.nodeId===L.id,sa=p=>ol(p),aa=(p,E,le)=>t(30,E[le]._expanded=!p._expanded,O,t(22,L)),ra=(p,E,le,qe)=>qe.key==="Enter"&&t(30,E[le]._expanded=!p._expanded,O,t(22,L)),ca=p=>xe(p.nodeId);function da(){v=this.value,t(7,v)}function ua(){b=this.value,t(8,b)}const fa=()=>{t(15,S=""),t(13,N=""),Jl()};function pa(){S=this.value,t(15,S)}const ma=()=>setTimeout(()=>t(17,A=!1),200),_a=p=>Gl(p);function va(){h=this.checked,t(9,h)}function ka(){w=dl(this),t(11,w)}function ha(){j=dl(this),t(12,j)}const ga=()=>Ut("csv"),ba=()=>Ut("markdown"),ya=()=>Ut("pdf"),wa=p=>xe(p.nodeId),qa=(p,E,le,qe)=>t(30,E[le].suggestedMin=parseInt(qe.target.value),O),Ca=p=>Ul(p),ja=(p,E,le)=>t(30,E[le]._expanded=!p._expanded,O),Sa=(p,E,le,qe)=>qe.key==="Enter"&&t(30,E[le]._expanded=!p._expanded,O),Ta=p=>xe(p.nodeId),Na=p=>xe(p.nodeId),Da=p=>ko(p),Ma=(p,E)=>E.key==="Enter"&&ko(p),Ea=p=>xe(p.nodeId),Ia=p=>xe(p.nodeId),Fa=(p,E,le,qe)=>t(30,E[le].suggestedMin=parseInt(qe.target.value),O),Aa=p=>ol(p),La=(p,E,le)=>t(30,E[le]._expanded=!p._expanded,O),Pa=(p,E,le,qe)=>qe.key==="Enter"&&t(30,E[le]._expanded=!p._expanded,O),Oa=p=>xe(p.nodeId),za=p=>xe(p.nodeId),Ra=(p,E)=>E.key==="Enter"&&xe(p.nodeId),Ba=p=>xe(p.nodeId),Ha=(p,E)=>E.key==="Enter"&&xe(p.nodeId),Va=p=>xe(p.nodeId),Wa=(p,E)=>E.key==="Enter"&&xe(p.nodeId),Ua=p=>xe(p.nodeId),Ka=(p,E)=>E.key==="Enter"&&xe(p.nodeId),Ga=()=>t(35,ie=null),Ja=p=>t(35,ie=p);function Ya(){te=this.value,t(33,te)}const Xa=p=>p.key==="Enter"&&Ll(),Za=p=>Al(p),Qa=()=>Rl(ue.node),xa=()=>Pl(ue.node),$a=()=>Ol(ue.node),er=()=>zl(ue.node);function tr(){Me=this.value,t(40,Me)}const lr=p=>p.key==="Enter"&&rl();function nr(){W=dl(this),t(41,W),t(75,pe)}function ir(){Q=this.value,t(42,Q)}const or=p=>p.key==="Enter"&&rl(),sr=()=>al("copy"),ar=()=>al("link");function rr(){lt=this.value,t(65,lt)}function cr(){pt=this.value,t(70,pt)}function dr(){gt=this.value,t(71,gt)}function ur(){bt=this.value,t(72,bt)}function fr(){yt=Yt(this.value),t(73,yt)}return[n,o,s,a,c,k,_,v,b,h,y,w,j,N,T,S,F,A,D,P,z,B,L,J,X,K,H,G,V,Y,O,ee,ye,te,ne,ie,ue,Ie,Ce,Je,Me,W,Q,Te,Ee,ze,He,me,De,ge,fe,de,_e,ve,Ne,Ae,Ve,oe,ke,Le,Ue,Ge,Ke,Pe,x,lt,ut,ht,rt,Oe,pt,gt,bt,yt,Ze,pe,Fo,hl,jt,nt,$t,bl,yl,el,tl,Ao,wl,ql,Cl,jl,Sl,Tl,Nl,Dl,Bo,Ho,Vo,Il,Ko,Go,Jo,Yo,Al,Xo,Zo,Ll,Qo,St,xo,$o,es,ts,ls,Pl,Ol,zl,Rl,Bl,ns,Hl,Lt,is,os,ss,as,ol,Ul,Pt,Ut,cs,Gl,Jl,Yl,ds,al,us,Xl,ps,ms,_s,vs,rl,Zl,ks,xe,hs,gs,bs,ys,ws,qs,Cs,js,Ss,Ts,Ns,Ds,Ms,Es,Is,Fs,As,Ls,Ps,Os,zs,Rs,Bs,Hs,Vs,Ws,Us,Ks,Gs,Js,Ys,Xs,Zs,Qs,xs,$s,ea,ta,la,na,ia,oa,sa,aa,ra,ca,da,ua,fa,pa,ma,_a,va,ka,ha,ga,ba,ya,wa,qa,Ca,ja,Sa,Ta,Na,Da,Ma,Ea,Ia,Fa,Aa,La,Pa,Oa,za,Ra,Ba,Ha,Va,Wa,Ua,Ka,Ga,Ja,Ya,Xa,Za,Qa,xa,$a,er,tr,lr,nr,ir,or,sr,ar,rr,cr,dr,ur,fr]}class R1 extends kt{constructor(e){super(),vt(this,e,z1,O1,_t,{},null,[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1])}}new R1({target:document.getElementById("app")}); diff --git a/cmd/verstak-gui/frontend-dist/assets/main-Bh5tqssv.css b/cmd/verstak-gui/frontend-dist/assets/main-Bh5tqssv.css new file mode 100644 index 0000000..b712f71 --- /dev/null +++ b/cmd/verstak-gui/frontend-dist/assets/main-Bh5tqssv.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-1dkn1q4.svelte-1dkn1q4,.svelte-1dkn1q4.svelte-1dkn1q4:before,.svelte-1dkn1q4.svelte-1dkn1q4:after{box-sizing:border-box;margin:0;padding:0}.app.svelte-1dkn1q4.svelte-1dkn1q4{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-1dkn1q4.svelte-1dkn1q4{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-1dkn1q4.svelte-1dkn1q4{padding:16px 20px;display:flex;align-items:center;gap:10px;border-bottom:1px solid #2a2a3c;flex-shrink:0}.logo.svelte-1dkn1q4.svelte-1dkn1q4{font-size:20px;line-height:1}.brand-name.svelte-1dkn1q4.svelte-1dkn1q4{font-size:16px;font-weight:600}.sidebar-nav.svelte-1dkn1q4.svelte-1dkn1q4{flex:1;overflow-y:auto;padding:12px 0}.nav-group.svelte-1dkn1q4.svelte-1dkn1q4{margin-bottom:16px}.nav-label.svelte-1dkn1q4.svelte-1dkn1q4{font-size:10px;text-transform:uppercase;letter-spacing:.5px;color:#666;padding:4px 20px;margin-bottom:4px}.nav-item.svelte-1dkn1q4.svelte-1dkn1q4{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-1dkn1q4.svelte-1dkn1q4:hover{background:#223}.nav-item.selected.svelte-1dkn1q4.svelte-1dkn1q4{background:#2a2a4a;color:#fff;font-weight:500}.workspace-tree-area.svelte-1dkn1q4.svelte-1dkn1q4{min-height:32px}.workspace-tree-area.drop-valid.svelte-1dkn1q4.svelte-1dkn1q4{outline:2px dashed #4ade80;outline-offset:-2px;background:#4ade800d}.nav-empty.svelte-1dkn1q4.svelte-1dkn1q4{padding:8px 20px;color:#555;font-size:12px}.nav-label-row.svelte-1dkn1q4.svelte-1dkn1q4{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-1dkn1q4.svelte-1dkn1q4{background:none;border:none;color:#666;cursor:pointer;font-size:16px;padding:0 4px;font-family:inherit;line-height:1}.nav-add-btn.svelte-1dkn1q4.svelte-1dkn1q4:hover{color:#ccc}.context-menu-backdrop.svelte-1dkn1q4.svelte-1dkn1q4{position:fixed;top:0;right:0;bottom:0;left:0;z-index:200}.context-menu.svelte-1dkn1q4.svelte-1dkn1q4{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-1dkn1q4.svelte-1dkn1q4{padding:6px 12px;font-size:10px;text-transform:uppercase;letter-spacing:.5px;color:#666}.context-menu-item.svelte-1dkn1q4.svelte-1dkn1q4{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-1dkn1q4.svelte-1dkn1q4:hover{background:#223;color:#fff}.context-menu-item.danger.svelte-1dkn1q4.svelte-1dkn1q4{color:#ff6b6b}.context-menu-item.danger.svelte-1dkn1q4.svelte-1dkn1q4:hover{background:#3a2222;color:#ff6b6b}.context-menu-divider.svelte-1dkn1q4.svelte-1dkn1q4{height:1px;background:#2a2a3c;margin:4px 0}.create-context.svelte-1dkn1q4.svelte-1dkn1q4{font-size:12px;color:#888;margin-bottom:12px}.sidebar-footer.svelte-1dkn1q4.svelte-1dkn1q4{padding:8px 12px;border-top:1px solid #2a2a3c;flex-shrink:0;display:flex;flex-direction:column;gap:4px}.version.svelte-1dkn1q4.svelte-1dkn1q4{font-size:11px;color:#555;text-align:center}.main.svelte-1dkn1q4.svelte-1dkn1q4{flex:1;display:flex;flex-direction:column;height:100vh;min-width:0;overflow:hidden;background:#13131f}.header.svelte-1dkn1q4.svelte-1dkn1q4{padding:12px 24px;border-bottom:1px solid #2a2a3c;display:flex;align-items:center;flex-shrink:0;min-height:48px}.header-left.svelte-1dkn1q4.svelte-1dkn1q4{display:flex;align-items:center;gap:8px;flex:1}.header-right.svelte-1dkn1q4.svelte-1dkn1q4{display:flex;align-items:center;gap:8px}.header-sync-btn.svelte-1dkn1q4.svelte-1dkn1q4{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-1dkn1q4.svelte-1dkn1q4:hover{background:#2a2a50;color:#e4e4ef;border-color:#818cf8}.header-sync-btn.svelte-1dkn1q4.svelte-1dkn1q4:disabled{opacity:.5;cursor:not-allowed}.sync-badge.svelte-1dkn1q4.svelte-1dkn1q4{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-1dkn1q4.svelte-1dkn1q4{font-size:14px;font-weight:500}.crumb.placeholder.svelte-1dkn1q4.svelte-1dkn1q4{color:#666}.crumb-type.svelte-1dkn1q4.svelte-1dkn1q4{font-size:11px;color:#555;background:#1e1e2e;padding:2px 8px;border-radius:10px;margin-left:8px}.error-banner.svelte-1dkn1q4.svelte-1dkn1q4{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-1dkn1q4.svelte-1dkn1q4{background:none;border:none;color:#f66;cursor:pointer;padding:2px;display:flex;align-items:center;border-radius:2px}.dismiss-btn.svelte-1dkn1q4.svelte-1dkn1q4:hover{color:#f44}.tabs.svelte-1dkn1q4.svelte-1dkn1q4{display:flex;border-bottom:1px solid #2a2a3c;flex-shrink:0;padding:0 24px}.tab.svelte-1dkn1q4.svelte-1dkn1q4{padding:10px 16px;border:none;background:none;color:#888;font-size:13px;cursor:pointer;border-bottom:2px solid transparent;font-family:inherit}.tab.svelte-1dkn1q4.svelte-1dkn1q4:hover{color:#a5b4fc}.tab.active.svelte-1dkn1q4.svelte-1dkn1q4{color:#e4e4ef;border-bottom-color:#818cf8;background:#6366f11f;font-weight:600}.tab-content.svelte-1dkn1q4.svelte-1dkn1q4{flex:1;overflow-y:auto}.note-editor.svelte-1dkn1q4.svelte-1dkn1q4{flex:1;display:flex;flex-direction:column;height:100%}.note-editor-header.svelte-1dkn1q4.svelte-1dkn1q4{padding:12px 24px;border-bottom:1px solid #2a2a3c;display:flex;align-items:center;gap:12px;flex-shrink:0}.note-title.svelte-1dkn1q4.svelte-1dkn1q4{font-size:16px;font-weight:500}.dirty-mark.svelte-1dkn1q4.svelte-1dkn1q4{color:#f59e0b;font-size:10px}.note-editor-actions.svelte-1dkn1q4.svelte-1dkn1q4{margin-left:auto;display:flex;gap:8px}.note-textarea.svelte-1dkn1q4.svelte-1dkn1q4{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-1dkn1q4.svelte-1dkn1q4{padding:24px}.overview.svelte-1dkn1q4 h2.svelte-1dkn1q4{font-size:24px;margin-bottom:16px}.meta-grid.svelte-1dkn1q4.svelte-1dkn1q4{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:12px;margin-bottom:24px}.meta-item.svelte-1dkn1q4.svelte-1dkn1q4{background:#1a1a28;padding:12px 16px;border-radius:8px}.meta-label.svelte-1dkn1q4.svelte-1dkn1q4{display:block;font-size:11px;color:#666;margin-bottom:4px;text-transform:uppercase}.quick-actions.svelte-1dkn1q4.svelte-1dkn1q4{display:flex;gap:8px;margin-bottom:24px;flex-wrap:wrap}.qa-btn.svelte-1dkn1q4.svelte-1dkn1q4{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-1dkn1q4.svelte-1dkn1q4:hover{background:#223}.qa-btn.svelte-1dkn1q4.svelte-1dkn1q4:disabled{opacity:.4;cursor:not-allowed}.recent-section.svelte-1dkn1q4.svelte-1dkn1q4{margin-bottom:24px}.recent-section.svelte-1dkn1q4 h3.svelte-1dkn1q4{font-size:13px;color:#666;text-transform:uppercase;margin-bottom:8px}.recent-note.svelte-1dkn1q4.svelte-1dkn1q4{padding:8px 12px;border-radius:6px;cursor:pointer;display:flex;justify-content:space-between}.recent-note.svelte-1dkn1q4.svelte-1dkn1q4:hover{background:#1a1a28}.recent-date.svelte-1dkn1q4.svelte-1dkn1q4{font-size:11px;color:#555}.recent-entry.svelte-1dkn1q4.svelte-1dkn1q4{padding:6px 0;font-size:13px;color:#888;border-bottom:1px solid #1a1a28}.notes-tab.svelte-1dkn1q4.svelte-1dkn1q4{padding:24px}.tab-toolbar.svelte-1dkn1q4.svelte-1dkn1q4{margin-bottom:16px}.create-form.svelte-1dkn1q4.svelte-1dkn1q4{background:#1a1a28;padding:16px;border-radius:8px;margin-bottom:16px}.create-form.svelte-1dkn1q4 input.svelte-1dkn1q4{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-1dkn1q4 input.svelte-1dkn1q4:focus{outline:none;border-color:#6366f1}.form-actions.svelte-1dkn1q4.svelte-1dkn1q4{display:flex;gap:8px}.notes-list.svelte-1dkn1q4.svelte-1dkn1q4{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:12px}.note-card.svelte-1dkn1q4.svelte-1dkn1q4{background:#1a1a28;border:1px solid #2a2a3c;border-radius:8px;padding:16px;cursor:pointer}.note-card.svelte-1dkn1q4.svelte-1dkn1q4:hover{border-color:#3a3a5c}.note-card-title.svelte-1dkn1q4.svelte-1dkn1q4{font-size:14px;font-weight:500;margin-bottom:4px}.note-card-date.svelte-1dkn1q4.svelte-1dkn1q4{font-size:11px;color:#555}.worklog-tab.svelte-1dkn1q4.svelte-1dkn1q4{padding:24px}.worklog-form.svelte-1dkn1q4.svelte-1dkn1q4{display:flex;gap:8px;margin-bottom:24px;align-items:center}.worklog-form.svelte-1dkn1q4 input.svelte-1dkn1q4{padding:8px 12px;border:1px solid #2a2a3c;background:#13131f;color:#e4e4ef;border-radius:4px;font-size:14px;font-family:inherit}.worklog-form.svelte-1dkn1q4 input.svelte-1dkn1q4:focus{outline:none;border-color:#6366f1}.worklog-form.svelte-1dkn1q4 input[type=text].svelte-1dkn1q4{flex:1}.worklog-form.svelte-1dkn1q4 input[type=number].svelte-1dkn1q4{width:70px}.worklog-entry.svelte-1dkn1q4.svelte-1dkn1q4{padding:12px 0;border-bottom:1px solid #1a1a28}.suggestions-title.svelte-1dkn1q4.svelte-1dkn1q4{font-size:13px;font-weight:600;color:#a5b4fc;margin-bottom:12px;text-transform:uppercase;letter-spacing:.5px}.suggestion-summary.svelte-1dkn1q4.svelte-1dkn1q4{font-size:14px;color:#e4e4ef}.suggestion-meta.svelte-1dkn1q4.svelte-1dkn1q4{font-size:12px;color:#8888a0;margin-top:2px}.suggestion-main.svelte-1dkn1q4.svelte-1dkn1q4{display:flex;align-items:center;justify-content:space-between;padding:10px 12px;cursor:pointer;gap:12px}.suggestion-card.expanded.svelte-1dkn1q4.svelte-1dkn1q4{border-color:#3a3a5c}.suggestion-detail.svelte-1dkn1q4.svelte-1dkn1q4{padding:0 12px 10px;border-top:1px solid #2a2a3c}.suggestion-detail-title.svelte-1dkn1q4.svelte-1dkn1q4{font-size:11px;font-weight:600;color:#a5b4fc;text-transform:uppercase;letter-spacing:.3px;padding:8px 0 4px}.suggestion-detail-event.svelte-1dkn1q4.svelte-1dkn1q4{display:flex;align-items:center;gap:8px;padding:3px 0;font-size:13px;color:#b0b0c0}.suggestion-event-time.svelte-1dkn1q4.svelte-1dkn1q4{color:#a0a0b8;font-variant-numeric:tabular-nums;white-space:nowrap;min-width:48px}.suggestion-event-type.svelte-1dkn1q4.svelte-1dkn1q4{color:#8888a0;font-size:11px;background:#1a1a2e;padding:1px 6px;border-radius:3px}.suggestion-event-title.svelte-1dkn1q4.svelte-1dkn1q4{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.suggestion-card.svelte-1dkn1q4.svelte-1dkn1q4{display:flex;align-items:center;justify-content:space-between;padding:10px 12px;background:#1e1e32;border-radius:6px;margin-bottom:8px;gap:12px}.suggestion-card.svelte-1dkn1q4.svelte-1dkn1q4:last-child{margin-bottom:0}.suggestion-info.svelte-1dkn1q4.svelte-1dkn1q4{flex:1;display:flex;flex-direction:column;gap:2px}.suggestion-node.svelte-1dkn1q4.svelte-1dkn1q4{color:#a5b4fc;font-weight:600;font-size:13px;text-decoration:none;cursor:pointer}.suggestion-node.svelte-1dkn1q4.svelte-1dkn1q4:hover{text-decoration:underline}.suggestion-actions.svelte-1dkn1q4.svelte-1dkn1q4{display:flex;align-items:center;gap:6px;flex-shrink:0}.suggestion-min-input.svelte-1dkn1q4.svelte-1dkn1q4{width:60px;padding:4px 8px;border:1px solid #2a2a3c;background:#13131f;color:#e4e4ef;border-radius:4px;font-size:14px;text-align:center}.suggestion-min-label.svelte-1dkn1q4.svelte-1dkn1q4{font-size:12px;color:#8888a0}.suggestion-confidence.svelte-1dkn1q4.svelte-1dkn1q4{font-size:11px;padding:2px 6px;border-radius:3px}.suggestion-confidence.low.svelte-1dkn1q4.svelte-1dkn1q4{color:#fbbf24}.suggestion-confidence.medium.svelte-1dkn1q4.svelte-1dkn1q4{color:#60a5fa}.suggestion-confidence.high.svelte-1dkn1q4.svelte-1dkn1q4{color:#34d399}.journal-screen.svelte-1dkn1q4.svelte-1dkn1q4{padding:24px;overflow-y:auto;flex:1}.journal-header.svelte-1dkn1q4.svelte-1dkn1q4{margin-bottom:24px}.journal-header.svelte-1dkn1q4 h2.svelte-1dkn1q4{margin:0 0 16px}.journal-filters.svelte-1dkn1q4.svelte-1dkn1q4{display:flex;gap:12px;align-items:flex-end;flex-wrap:wrap}.journal-filters.svelte-1dkn1q4 label.svelte-1dkn1q4{display:flex;flex-direction:column;gap:4px;font-size:12px;color:#8888a0}.journal-filters.svelte-1dkn1q4 input[type=date].svelte-1dkn1q4{padding:6px 10px;border:1px solid #2a2a3c;background:#13131f;color:#e4e4ef;border-radius:4px;font-size:13px;font-family:inherit}.journal-filters.svelte-1dkn1q4 .checkbox-label.svelte-1dkn1q4{flex-direction:row;align-items:center;gap:6px;cursor:pointer}.journal-filters.svelte-1dkn1q4 .checkbox-label input.svelte-1dkn1q4{width:auto}.journal-summary.svelte-1dkn1q4.svelte-1dkn1q4{display:flex;flex-wrap:wrap;gap:24px;margin-bottom:24px;padding:16px;background:#1a1a2e;border-radius:8px;border:1px solid #2a2a3c}.summary-total.svelte-1dkn1q4.svelte-1dkn1q4{font-size:18px;font-weight:700;color:#e4e4ef;width:100%;margin-bottom:4px}.summary-section.svelte-1dkn1q4.svelte-1dkn1q4{flex:1;min-width:200px}.summary-label.svelte-1dkn1q4.svelte-1dkn1q4{font-size:12px;font-weight:600;color:#a5b4fc;text-transform:uppercase;letter-spacing:.5px;margin-bottom:8px}.summary-row.svelte-1dkn1q4.svelte-1dkn1q4{display:flex;gap:8px;font-size:13px;padding:4px 0;border-bottom:1px solid #2a2a3c}.summary-row.svelte-1dkn1q4 span.svelte-1dkn1q4:first-child{flex:1;color:#e4e4ef}.summary-count.svelte-1dkn1q4.svelte-1dkn1q4{color:#8888a0}.journal-table-wrap.svelte-1dkn1q4.svelte-1dkn1q4{overflow-x:auto}.journal-table.svelte-1dkn1q4.svelte-1dkn1q4{width:100%;border-collapse:collapse;font-size:13px}.journal-table.svelte-1dkn1q4 th.svelte-1dkn1q4{text-align:left;padding:8px 12px;border-bottom:2px solid #2a2a3c;color:#b0b0c8;font-weight:600;font-size:12px;text-transform:uppercase;letter-spacing:.5px;white-space:nowrap}.journal-table.svelte-1dkn1q4 td.svelte-1dkn1q4{padding:8px 12px;border-bottom:1px solid #1a1a28;color:#e4e4ef}.journal-table.svelte-1dkn1q4 tr:hover td.svelte-1dkn1q4{background:#1e1e32}.journal-table.svelte-1dkn1q4 .link-btn.svelte-1dkn1q4{color:#a5b4fc}.journal-path-cell.svelte-1dkn1q4.svelte-1dkn1q4{max-width:300px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#a0a0b8;font-size:12px}.journal-min-cell.svelte-1dkn1q4.svelte-1dkn1q4{text-align:right;font-variant-numeric:tabular-nums}.journal-date-cell.svelte-1dkn1q4.svelte-1dkn1q4{color:#b0b0c0;white-space:nowrap}.journal-bool-cell.svelte-1dkn1q4.svelte-1dkn1q4{text-align:center;color:#a0a0b8}.journal-row.svelte-1dkn1q4.svelte-1dkn1q4{cursor:pointer}.journal-row.svelte-1dkn1q4:hover td.svelte-1dkn1q4{background:#1e1e32}.journal-row.expanded.svelte-1dkn1q4 td.svelte-1dkn1q4{background:#1a1a30;border-bottom:none}.journal-summary-cell.svelte-1dkn1q4.svelte-1dkn1q4{max-width:260px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.journal-row-detail.svelte-1dkn1q4 td.svelte-1dkn1q4{padding:0 12px 12px;background:#16162a}.journal-detail-body.svelte-1dkn1q4.svelte-1dkn1q4{display:flex;flex-direction:column;gap:12px;padding:8px 0}.journal-detail-section.svelte-1dkn1q4.svelte-1dkn1q4{font-size:13px}.journal-detail-label.svelte-1dkn1q4.svelte-1dkn1q4{font-size:11px;font-weight:600;color:#a5b4fc;text-transform:uppercase;letter-spacing:.3px;display:block;margin-bottom:4px}.journal-detail-section.svelte-1dkn1q4 p.svelte-1dkn1q4{margin:0;color:#c0c0d0}.journal-event-row.svelte-1dkn1q4.svelte-1dkn1q4{display:flex;align-items:center;gap:8px;padding:4px 0;font-size:13px;color:#b0b0c0}.journal-event-time.svelte-1dkn1q4.svelte-1dkn1q4{color:#a0a0b8;font-variant-numeric:tabular-nums;white-space:nowrap;min-width:48px}.journal-event-type.svelte-1dkn1q4.svelte-1dkn1q4{color:#8888a0;font-size:11px;background:#1a1a2e;padding:1px 6px;border-radius:3px}.journal-event-title.svelte-1dkn1q4.svelte-1dkn1q4{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.journal-node-picker.svelte-1dkn1q4 input[type=text].svelte-1dkn1q4{padding:6px 10px;border:1px solid #2a2a3c;background:#13131f;color:#e4e4ef;border-radius:4px;font-size:13px;font-family:inherit;width:240px}.journal-search-dropdown.svelte-1dkn1q4.svelte-1dkn1q4{position:absolute;top:100%;left:0;right:0;z-index:50;background:#1a1a28;border:1px solid #2a2a3c;border-radius:6px;margin-top:4px;max-height:240px;overflow-y:auto;min-width:260px}.journal-search-item.svelte-1dkn1q4.svelte-1dkn1q4{display:block;width:100%;padding:8px 12px;border:none;background:transparent;color:#e4e4ef;cursor:pointer;font-family:inherit;font-size:13px;text-align:left}.journal-search-item.svelte-1dkn1q4.svelte-1dkn1q4:hover{background:#2a2a4a}.journal-search-title.svelte-1dkn1q4.svelte-1dkn1q4{display:block;font-weight:500}.journal-search-path.svelte-1dkn1q4.svelte-1dkn1q4{display:block;font-size:11px;color:#8888a0;margin-top:2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.journal-selected-node.svelte-1dkn1q4.svelte-1dkn1q4{cursor:pointer;display:inline-flex;align-items:center;gap:6px;padding:6px 10px;background:#1e1e3a;border:1px solid #3a3a5c;border-radius:4px;font-size:13px;color:#a5b4fc;white-space:nowrap;font-family:inherit}.journal-selected-node.svelte-1dkn1q4.svelte-1dkn1q4:hover{background:#2a2a4a}.journal-node-clear.svelte-1dkn1q4.svelte-1dkn1q4{color:#8888a0;font-size:14px;margin-left:4px}.journal-status-msg.svelte-1dkn1q4.svelte-1dkn1q4{font-size:12px;color:#34d399;padding:4px 8px;background:#1a2a1e;border-radius:4px}.disabled-hint.svelte-1dkn1q4.svelte-1dkn1q4{opacity:.5}.today-suggestions.svelte-1dkn1q4.svelte-1dkn1q4{margin-bottom:24px}.link-btn.svelte-1dkn1q4.svelte-1dkn1q4{background:none;border:none;padding:0;color:#a5b4fc;font:inherit;cursor:pointer;text-align:left}.link-btn.svelte-1dkn1q4.svelte-1dkn1q4:hover{text-decoration:underline}.nav-badge.svelte-1dkn1q4.svelte-1dkn1q4{background:#6366f1;color:#fff;font-size:10px;font-weight:700;border-radius:10px;padding:1px 6px;margin-left:6px;line-height:1.4}.wl-meta.svelte-1dkn1q4.svelte-1dkn1q4{font-size:11px;color:#555;margin-top:2px}.actions-tab.svelte-1dkn1q4.svelte-1dkn1q4{padding:24px}.action-card.svelte-1dkn1q4.svelte-1dkn1q4{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-1dkn1q4.svelte-1dkn1q4{display:flex;align-items:center;gap:8px;flex:1;min-width:0}.action-title.svelte-1dkn1q4.svelte-1dkn1q4{font-weight:500}.action-type.svelte-1dkn1q4.svelte-1dkn1q4{font-size:11px;color:#888;background:#223;padding:2px 8px;border-radius:10px;white-space:nowrap}.action-data.svelte-1dkn1q4.svelte-1dkn1q4{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-1dkn1q4.svelte-1dkn1q4{display:flex;gap:4px;flex-shrink:0}.action-btns.svelte-1dkn1q4 .btn-danger.svelte-1dkn1q4{color:#ff6b6b;border-color:#4a2222;padding:4px 8px}.action-btns.svelte-1dkn1q4 .btn-danger.svelte-1dkn1q4:hover{background:#3a2222}.empty-state.svelte-1dkn1q4.svelte-1dkn1q4{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:48px 24px;text-align:center}.empty-state.svelte-1dkn1q4 p.svelte-1dkn1q4{margin:0;font-size:14px;color:#666}.empty-state.svelte-1dkn1q4 .empty-icon.svelte-1dkn1q4{margin-bottom:12px;color:#444}.empty-state.svelte-1dkn1q4 .hint.svelte-1dkn1q4{font-size:12px;color:#555;margin-top:6px}.empty-state.svelte-1dkn1q4 .empty-actions.svelte-1dkn1q4{display:flex;gap:8px;justify-content:center;margin-top:16px}.welcome.svelte-1dkn1q4.svelte-1dkn1q4{padding:48px 24px;text-align:center}.welcome.svelte-1dkn1q4 h2.svelte-1dkn1q4{font-size:32px;font-weight:300;color:#8888a4;margin-bottom:16px}.welcome.svelte-1dkn1q4 p.svelte-1dkn1q4{color:#666;font-size:14px}.error-text.svelte-1dkn1q4.svelte-1dkn1q4{color:#f88}.modal-overlay.svelte-1dkn1q4.svelte-1dkn1q4{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-1dkn1q4.svelte-1dkn1q4{background:#1a1a28;border:1px solid #2a2a3c;border-radius:12px;padding:24px;width:400px;max-width:90vw}.modal.svelte-1dkn1q4 h3.svelte-1dkn1q4{font-size:18px;margin-bottom:16px}.form-group.svelte-1dkn1q4.svelte-1dkn1q4{margin-bottom:12px}.form-group.svelte-1dkn1q4 label.svelte-1dkn1q4{display:block}.form-group.svelte-1dkn1q4 .label-text.svelte-1dkn1q4,.form-group.svelte-1dkn1q4 .form-label.svelte-1dkn1q4{display:block;font-size:12px;color:#666;margin-bottom:4px}.form-group.svelte-1dkn1q4 input.svelte-1dkn1q4,.form-group.svelte-1dkn1q4 select.svelte-1dkn1q4{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-1dkn1q4 select.svelte-1dkn1q4{-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-1dkn1q4 input.svelte-1dkn1q4:focus,.form-group.svelte-1dkn1q4 select.svelte-1dkn1q4:focus{outline:none;border-color:#6366f1}.modal-actions.svelte-1dkn1q4.svelte-1dkn1q4{display:flex;gap:8px;justify-content:flex-end;margin-top:16px}.btn.svelte-1dkn1q4.svelte-1dkn1q4{padding:8px 16px;border:1px solid #2a2a3c;background:#1a1a28;color:#ccc;border-radius:6px;cursor:pointer;font-size:13px;font-family:inherit}.btn.svelte-1dkn1q4.svelte-1dkn1q4:hover{background:#223}.btn-primary.svelte-1dkn1q4.svelte-1dkn1q4{background:#6366f1;border-color:#6366f1;color:#fff}.btn-primary.svelte-1dkn1q4.svelte-1dkn1q4:hover{background:#4f46e5}.btn.svelte-1dkn1q4.svelte-1dkn1q4:disabled{opacity:.4;cursor:not-allowed}.btn-sm.svelte-1dkn1q4.svelte-1dkn1q4{padding:4px 10px;font-size:12px}.btn-danger.svelte-1dkn1q4.svelte-1dkn1q4{color:#ff6b6b;border-color:#4a2222}.btn-danger.svelte-1dkn1q4.svelte-1dkn1q4:hover{background:#3a2222}.files-tab.svelte-1dkn1q4.svelte-1dkn1q4{padding:20px}.files-tab.svelte-1dkn1q4 .tab-toolbar.svelte-1dkn1q4{display:flex;gap:8px;align-items:center;margin-bottom:16px}.file-list.svelte-1dkn1q4.svelte-1dkn1q4{display:flex;flex-direction:column}.back-btn.svelte-1dkn1q4.svelte-1dkn1q4{margin-bottom:4px;display:inline-flex;align-items:center;gap:4px}.import-summary.svelte-1dkn1q4.svelte-1dkn1q4{margin-bottom:16px}.summary-row.svelte-1dkn1q4.svelte-1dkn1q4{display:flex;justify-content:space-between;padding:6px 0;font-size:14px;border-bottom:1px solid #2a2a3c}.summary-warn.svelte-1dkn1q4.svelte-1dkn1q4{margin-top:8px;padding:8px 12px;background:#3a2a22;border-radius:6px;color:#fa6;font-size:13px}.rename-error.svelte-1dkn1q4.svelte-1dkn1q4{color:#ff6b6b;font-size:12px;margin-top:4px}.template-cards.svelte-1dkn1q4.svelte-1dkn1q4{display:flex;flex-direction:column;gap:6px;margin-bottom:8px}.template-card.svelte-1dkn1q4.svelte-1dkn1q4{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-1dkn1q4.svelte-1dkn1q4:hover{background:#1e1e30;border-color:#3a3a5c}.template-card.selected.svelte-1dkn1q4.svelte-1dkn1q4{background:#2a2a50;border-color:#6366f1;color:#e4e4ef}.template-card-text.svelte-1dkn1q4.svelte-1dkn1q4{display:flex;flex-direction:column;gap:2px;min-width:0}.template-card-title.svelte-1dkn1q4.svelte-1dkn1q4{font-weight:500}.template-card-desc.svelte-1dkn1q4.svelte-1dkn1q4{font-size:11px;color:#888}.today-dashboard.svelte-1dkn1q4.svelte-1dkn1q4{padding:24px;overflow-y:auto;flex:1}.today-header.svelte-1dkn1q4.svelte-1dkn1q4{display:flex;align-items:baseline;gap:12px;margin-bottom:16px}.today-header.svelte-1dkn1q4 h2.svelte-1dkn1q4{font-size:24px}.today-date.svelte-1dkn1q4.svelte-1dkn1q4{font-size:13px;color:#666}.today-summary.svelte-1dkn1q4.svelte-1dkn1q4{display:flex;gap:8px;margin-bottom:20px;flex-wrap:wrap}.summary-chip.svelte-1dkn1q4.svelte-1dkn1q4{font-size:12px;color:#b0b0c0;background:#1a1a28;border:1px solid #2a2a3c;padding:4px 12px;border-radius:16px}.today-case.svelte-1dkn1q4.svelte-1dkn1q4{background:#1a1a28;border:1px solid #2a2a3c;border-radius:8px;margin-bottom:12px;overflow:hidden}.today-case-header.svelte-1dkn1q4.svelte-1dkn1q4{padding:12px 16px;display:flex;align-items:center;gap:8px;border-bottom:1px solid #2a2a3c;cursor:pointer}.today-case-header.svelte-1dkn1q4.svelte-1dkn1q4:hover{background:#1e1e30}.today-case-title.svelte-1dkn1q4.svelte-1dkn1q4{font-weight:500}.today-case-type.svelte-1dkn1q4.svelte-1dkn1q4{font-size:11px;color:#888;background:#223;padding:2px 8px;border-radius:10px}.today-case-count.svelte-1dkn1q4.svelte-1dkn1q4{font-size:11px;color:#6366f1;margin-left:4px}.today-case-time.svelte-1dkn1q4.svelte-1dkn1q4{font-size:11px;color:#555;margin-left:auto}.today-events.svelte-1dkn1q4.svelte-1dkn1q4{padding:8px 16px}.today-event.svelte-1dkn1q4.svelte-1dkn1q4{display:flex;align-items:center;gap:8px;padding:4px 0;font-size:13px;color:#b0b0c0;cursor:pointer}.today-event.svelte-1dkn1q4.svelte-1dkn1q4:hover{color:#e4e4ef}.today-event-icon.svelte-1dkn1q4.svelte-1dkn1q4{width:18px;text-align:center;color:#6366f1;font-size:13px}.today-event-title.svelte-1dkn1q4.svelte-1dkn1q4{flex:1}.today-event-type.svelte-1dkn1q4.svelte-1dkn1q4{font-size:11px;color:#666}.today-event-time.svelte-1dkn1q4.svelte-1dkn1q4{font-size:11px;color:#555;margin-left:auto}.today-events-empty.svelte-1dkn1q4.svelte-1dkn1q4{padding:8px 16px;font-size:13px;color:#666;font-style:italic}.today-empty.svelte-1dkn1q4.svelte-1dkn1q4{padding:48px 24px;text-align:center}.today-empty.svelte-1dkn1q4 p.svelte-1dkn1q4{color:#666;font-size:14px;margin:0}.today-empty.svelte-1dkn1q4 .hint.svelte-1dkn1q4{font-size:12px;color:#555;margin-top:8px}.today-timeline.svelte-1dkn1q4.svelte-1dkn1q4{margin-top:24px}.today-timeline.svelte-1dkn1q4 h3.svelte-1dkn1q4{font-size:13px;color:#666;text-transform:uppercase;margin-bottom:12px}.timeline-event.svelte-1dkn1q4.svelte-1dkn1q4{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-1dkn1q4.svelte-1dkn1q4:hover{color:#e4e4ef}.timeline-dot.svelte-1dkn1q4.svelte-1dkn1q4{width:6px;height:6px;border-radius:50%;background:#6366f1;margin-left:-19px;flex-shrink:0}.timeline-title.svelte-1dkn1q4.svelte-1dkn1q4{flex:1}.timeline-type.svelte-1dkn1q4.svelte-1dkn1q4{font-size:11px;color:#666}.timeline-time.svelte-1dkn1q4.svelte-1dkn1q4{font-size:11px;color:#555}.activity-tab.svelte-1dkn1q4.svelte-1dkn1q4{padding:24px}.activity-events.svelte-1dkn1q4.svelte-1dkn1q4{display:flex;flex-direction:column;gap:2px}.activity-event.svelte-1dkn1q4.svelte-1dkn1q4{display:flex;align-items:center;gap:8px;padding:6px 8px;border-radius:6px;font-size:13px;color:#b0b0c0;cursor:pointer}.activity-event.svelte-1dkn1q4.svelte-1dkn1q4:hover{background:#1a1a28;color:#e4e4ef}.activity-event-icon.svelte-1dkn1q4.svelte-1dkn1q4{width:18px;text-align:center;color:#6366f1;font-size:13px;flex-shrink:0}.activity-event-title.svelte-1dkn1q4.svelte-1dkn1q4{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.activity-event-type.svelte-1dkn1q4.svelte-1dkn1q4{font-size:11px;color:#666;flex-shrink:0}.activity-event-target.svelte-1dkn1q4.svelte-1dkn1q4{font-size:10px;color:#555;background:#1e1e2e;padding:1px 6px;border-radius:8px;flex-shrink:0}.activity-event-time.svelte-1dkn1q4.svelte-1dkn1q4{font-size:11px;color:#555;margin-left:8px;flex-shrink:0}.activity-feed.svelte-1dkn1q4.svelte-1dkn1q4{padding:24px;overflow-y:auto;flex:1}.activity-feed-header.svelte-1dkn1q4.svelte-1dkn1q4{margin-bottom:20px}.activity-feed-header.svelte-1dkn1q4 h2.svelte-1dkn1q4{font-size:24px}.activity-feed-events.svelte-1dkn1q4.svelte-1dkn1q4{display:flex;flex-direction:column;gap:2px}.activity-feed-event.svelte-1dkn1q4.svelte-1dkn1q4{display:flex;align-items:flex-start;gap:10px;padding:8px 12px;border-radius:8px;cursor:pointer}.activity-feed-event.svelte-1dkn1q4.svelte-1dkn1q4:hover{background:#1a1a28;color:#e4e4ef}.activity-feed-icon.svelte-1dkn1q4.svelte-1dkn1q4{width:20px;text-align:center;color:#6366f1;font-size:14px;flex-shrink:0;margin-top:1px}.activity-feed-body.svelte-1dkn1q4.svelte-1dkn1q4{flex:1;min-width:0}.activity-feed-title.svelte-1dkn1q4.svelte-1dkn1q4{font-size:14px;color:#e4e4ef}.activity-feed-meta.svelte-1dkn1q4.svelte-1dkn1q4{display:flex;align-items:center;gap:8px;margin-top:2px}.activity-feed-type.svelte-1dkn1q4.svelte-1dkn1q4{font-size:11px;color:#666}.activity-feed-target.svelte-1dkn1q4.svelte-1dkn1q4{font-size:10px;color:#555;background:#1e1e2e;padding:1px 6px;border-radius:8px}.activity-feed-time.svelte-1dkn1q4.svelte-1dkn1q4{font-size:11px;color:#555}.sidebar-sync-btn.svelte-1dkn1q4.svelte-1dkn1q4{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-1dkn1q4.svelte-1dkn1q4:hover{background:#2a2a50;color:#e4e4ef;border-color:#818cf8}.sidebar-sync-label.svelte-1dkn1q4.svelte-1dkn1q4{flex:1;text-align:left}.sync-dot.svelte-1dkn1q4.svelte-1dkn1q4{width:8px;height:8px;border-radius:50%;background:#4a4a4a;flex-shrink:0}.sync-dot.active.svelte-1dkn1q4.svelte-1dkn1q4{background:#4ade80;box-shadow:0 0 6px #4ade8080}.modal-sync.svelte-1dkn1q4.svelte-1dkn1q4{width:460px}.sync-status.svelte-1dkn1q4.svelte-1dkn1q4{background:#13131f;border-radius:8px;padding:12px;margin-bottom:16px}.sync-row.svelte-1dkn1q4.svelte-1dkn1q4{display:flex;justify-content:space-between;padding:4px 0;font-size:13px}.sync-label.svelte-1dkn1q4.svelte-1dkn1q4{color:#666}.sync-value.svelte-1dkn1q4.svelte-1dkn1q4{color:#e4e4ef}.sync-value.mono.svelte-1dkn1q4.svelte-1dkn1q4{font-family:SF Mono,Fira Code,monospace;font-size:12px}.sync-result.svelte-1dkn1q4.svelte-1dkn1q4{font-size:12px;color:#6366f1;padding:4px 0}.sync-connected-actions.svelte-1dkn1q4.svelte-1dkn1q4{display:flex;gap:8px;margin-bottom:16px} diff --git a/cmd/verstak-gui/frontend-dist/index.html b/cmd/verstak-gui/frontend-dist/index.html index fe283cf..a5fbf33 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 afcde76..e108a80 100644 --- a/frontend/src/App.svelte +++ b/frontend/src/App.svelte @@ -43,6 +43,7 @@ let journalBillableFilter = 'all' let journalApproxFilter = 'all' let journalFilteredNodeTitle = '' + let journalStatusMsg = '' let journalSearchQuery = '' let journalSearchResults = [] let journalShowResults = false @@ -988,37 +989,38 @@ } } - async function exportJournalCSV() { + async function saveJournalReport(format) { try { - const csv = await wailsCall('ExportWorklogCSV', journalDateFrom, journalDateTo, journalNodeID, journalIncludeChildren, journalBillableFilter, journalApproxFilter) - downloadFile('worklog.csv', csv, 'text/csv') - } catch (e) { console.error(e) } - } - - async function exportJournalMarkdown() { - try { - const md = await wailsCall('ExportWorklogMarkdown', journalDateFrom, journalDateTo, journalNodeID, journalIncludeChildren, journalBillableFilter, journalApproxFilter) - downloadFile('worklog.md', md, 'text/markdown') - } catch (e) { console.error(e) } - } - - async function exportJournalPDF() { - try { - const data = await wailsCall('ExportWorklogPDF', journalDateFrom, journalDateTo, journalNodeID, journalIncludeChildren, journalBillableFilter, journalApproxFilter) - let pdfBytes = data - if (typeof data === 'string') { - const bin = atob(data) - pdfBytes = new Uint8Array(bin.length) - for (let i = 0; i < bin.length; i++) pdfBytes[i] = bin.charCodeAt(i) - } - const from = journalDateFrom || 'all' - const to = journalDateTo || 'all' - downloadFile(`verstak-worklog-${from}--${to}.pdf`, pdfBytes, 'application/pdf') - } catch (e) { console.error(e) } + const msg = await wailsCall('SaveWorklogReport', format, + journalDateFrom, journalDateTo, journalNodeID, + journalIncludeChildren, journalBillableFilter, journalApproxFilter) + journalStatusMsg = msg + setTimeout(() => journalStatusMsg = '', 4000) + } catch (e) { + if (String(e).includes('отменено')) return + journalStatusMsg = 'Ошибка: ' + String(e) + setTimeout(() => journalStatusMsg = '', 6000) + } } let journalSearchTimer + async function toggleJournalRow(r) { + r._expanded = !r._expanded + if (r._expanded && !r._events && r._hasEvents === undefined) { + try { + r._events = await wailsCall('GetWorklogEntryEvents', r.id) || [] + r._hasEvents = r._events.length > 0 + } catch(e) { r._events = []; r._hasEvents = false } + } + } + + function formatTime(iso) { + if (!iso) return '' + const d = new Date(iso) + return d.toLocaleTimeString('ru-RU', { hour: '2-digit', minute: '2-digit' }) + } + async function searchJournalNodes() { const q = journalSearchQuery.trim() if (!q || q.length < 2) { @@ -1187,10 +1189,6 @@ if (type === 'file_moved') return '→' return '•' } - function formatTime(str) { - if (!str) return '' - try { return new Date(str).toLocaleTimeString('ru-RU', { hour: '2-digit', minute: '2-digit' }) } catch (e) { return '' } - } function formatDate(str) { if (!str) return '' try { return new Date(str).toLocaleDateString('ru-RU', { day: 'numeric', month: 'short' }) } catch (e) { return str } @@ -1671,16 +1669,31 @@
{t('worklog.suggestions')}
{#each suggestions.filter(s => s.nodeId === selectedNode.id) as s} -
-
- {s.summary} - {s.suggestedMin} {t('worklog.min')} · {t('suggest.confidence.' + s.confidence)} -
-
- +
+
s._expanded = !s._expanded} role="button" tabindex="0" on:keydown={(e) => e.key === 'Enter' && (s._expanded = !s._expanded)}> +
+ {s.summary} + {s.suggestedMin} {t('worklog.min')} · {t('suggest.confidence.' + s.confidence)} +
+
+ +
+ {#if s._expanded && s.events && s.events.length > 0} +
+
{t('suggest.detectedEvents')}
+ {#each s.events as ev} +
+ {formatTime(ev.createdAt)} + {t('event.' + ev.eventType) || ev.eventType} + {ev.title} + +
+ {/each} +
+ {/if}
{/each}
@@ -1751,28 +1764,37 @@ {/if}
-
@@ -1780,18 +1802,33 @@
{t('suggest.title')}
{#each suggestions as s} -
-
- - {s.summary} - {t('suggest.confidence.' + s.confidence)} -
-
- s.suggestedMin = parseInt(e.target.value)} /> - {t('suggest.minutes')} - +
+
s._expanded = !s._expanded} role="button" tabindex="0" on:keydown={(e) => e.key === 'Enter' && (s._expanded = !s._expanded)}> +
+ + {s.summary} + {t('suggest.confidence.' + s.confidence)} +
+
+ s.suggestedMin = parseInt(e.target.value)} /> + {t('suggest.minutes')} + +
+ {#if s._expanded && s.events && s.events.length > 0} +
+
{t('suggest.detectedEvents')}
+ {#each s.events as ev} +
+ {formatTime(ev.createdAt)} + {t('event.' + ev.eventType) || ev.eventType} + {ev.title} + +
+ {/each} +
+ {/if}
{/each}
@@ -1831,21 +1868,52 @@ {t('journal.path')} {t('worklog.minutes')} {t('journal.billable')} - {t('journal.approximate')} + {t('journal.approx')} {t('common.date')} {#each journalRows as r} - - {r.summary} - + toggleJournalRow(r)} role="button" tabindex="0" on:keydown={(e) => e.key === 'Enter' && toggleJournalRow(r)}> + {r.summary} + {r.nodePath} {r.minutes} - {#if r.billable}✓{/if} - {#if r.approximate}~{/if} + {#if r.billable}✓{/if} + {#if r.approximate}~{/if} {r.date} + {#if r._expanded} + + +
+ {#if r.details} +
+ {t('worklog.details')} +

{r.details}

+
+ {/if} +
+ {t('worklog.source')} +

{#if r._hasEvents}{t('worklog.sourceSuggestion')}{:else}{t('worklog.sourceManual')}{/if}

+
+ {#if r._events} +
+ {t('journal.relatedEvents')} + {#each r._events as ev} +
+ {formatTime(ev.createdAt)} + {t('event.' + ev.eventType) || ev.eventType} + {ev.title} + +
+ {/each} +
+ {/if} +
+ + + {/if} {/each} @@ -1871,18 +1939,33 @@
{t('suggest.title')}
{#each suggestions as s} -
-
- - {s.summary} - {t('suggest.confidence.' + s.confidence)} -
-
- s.suggestedMin = parseInt(e.target.value)} /> - {t('suggest.minutes')} - +
+
s._expanded = !s._expanded} role="button" tabindex="0" on:keydown={(e) => e.key === 'Enter' && (s._expanded = !s._expanded)}> +
+ + {s.summary} + {t('suggest.confidence.' + s.confidence)} +
+
+ s.suggestedMin = parseInt(e.target.value)} /> + {t('suggest.minutes')} + +
+ {#if s._expanded && s.events && s.events.length > 0} +
+
{t('suggest.detectedEvents')}
+ {#each s.events as ev} +
+ {formatTime(ev.createdAt)} + {t('event.' + ev.eventType) || ev.eventType} + {ev.title} + +
+ {/each} +
+ {/if}
{/each}
@@ -2336,6 +2419,14 @@ .suggestions-title { font-size: 13px; font-weight: 600; color: #a5b4fc; margin-bottom: 12px; text-transform: uppercase; letter-spacing: 0.5px; } .suggestion-summary { font-size: 14px; color: #e4e4ef; } .suggestion-meta { font-size: 12px; color: #8888a0; margin-top: 2px; } +.suggestion-main { display: flex; align-items: center; justify-content: space-between; padding: 10px 12px; cursor: pointer; gap: 12px; } +.suggestion-card.expanded { border-color: #3a3a5c; } +.suggestion-detail { padding: 0 12px 10px; border-top: 1px solid #2a2a3c; } +.suggestion-detail-title { font-size: 11px; font-weight: 600; color: #a5b4fc; text-transform: uppercase; letter-spacing: 0.3px; padding: 8px 0 4px; } +.suggestion-detail-event { display: flex; align-items: center; gap: 8px; padding: 3px 0; font-size: 13px; color: #b0b0c0; } +.suggestion-event-time { color: #a0a0b8; font-variant-numeric: tabular-nums; white-space: nowrap; min-width: 48px; } +.suggestion-event-type { color: #8888a0; font-size: 11px; background: #1a1a2e; padding: 1px 6px; border-radius: 3px; } +.suggestion-event-title { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } /* Suggestion cards */ .suggestion-card { display: flex; align-items: center; justify-content: space-between; padding: 10px 12px; background: #1e1e32; border-radius: 6px; margin-bottom: 8px; gap: 12px; } @@ -2369,12 +2460,27 @@ .summary-count { color: #8888a0; } .journal-table-wrap { overflow-x: auto; } .journal-table { width: 100%; border-collapse: collapse; font-size: 13px; } -.journal-table th { text-align: left; padding: 8px 12px; border-bottom: 2px solid #2a2a3c; color: #8888a0; font-weight: 600; font-size: 12px; text-transform: uppercase; letter-spacing: 0.5px; white-space: nowrap; } +.journal-table th { text-align: left; padding: 8px 12px; border-bottom: 2px solid #2a2a3c; color: #b0b0c8; font-weight: 600; font-size: 12px; text-transform: uppercase; letter-spacing: 0.5px; white-space: nowrap; } .journal-table td { padding: 8px 12px; border-bottom: 1px solid #1a1a28; color: #e4e4ef; } +.journal-table tr:hover td { background: #1e1e32; } .journal-table .link-btn { color: #a5b4fc; } -.journal-path-cell { max-width: 300px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: #8888a0; font-size: 12px; } +.journal-path-cell { max-width: 300px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: #a0a0b8; font-size: 12px; } .journal-min-cell { text-align: right; font-variant-numeric: tabular-nums; } -.journal-date-cell { color: #8888a0; white-space: nowrap; } +.journal-date-cell { color: #b0b0c0; white-space: nowrap; } +.journal-bool-cell { text-align: center; color: #a0a0b8; } +.journal-row { cursor: pointer; } +.journal-row:hover td { background: #1e1e32; } +.journal-row.expanded td { background: #1a1a30; border-bottom: none; } +.journal-summary-cell { max-width: 260px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } +.journal-row-detail td { padding: 0 12px 12px; background: #16162a; } +.journal-detail-body { display: flex; flex-direction: column; gap: 12px; padding: 8px 0; } +.journal-detail-section { font-size: 13px; } +.journal-detail-label { font-size: 11px; font-weight: 600; color: #a5b4fc; text-transform: uppercase; letter-spacing: 0.3px; display: block; margin-bottom: 4px; } +.journal-detail-section p { margin: 0; color: #c0c0d0; } +.journal-event-row { display: flex; align-items: center; gap: 8px; padding: 4px 0; font-size: 13px; color: #b0b0c0; } +.journal-event-time { color: #a0a0b8; font-variant-numeric: tabular-nums; white-space: nowrap; min-width: 48px; } +.journal-event-type { color: #8888a0; font-size: 11px; background: #1a1a2e; padding: 1px 6px; border-radius: 3px; } +.journal-event-title { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .journal-node-picker input[type="text"] { padding: 6px 10px; border: 1px solid #2a2a3c; background: #13131f; color: #e4e4ef; border-radius: 4px; font-size: 13px; font-family: inherit; width: 240px; } .journal-search-dropdown { position: absolute; top: 100%; left: 0; right: 0; z-index: 50; background: #1a1a28; border: 1px solid #2a2a3c; border-radius: 6px; margin-top: 4px; max-height: 240px; overflow-y: auto; min-width: 260px; } .journal-search-item { display: block; width: 100%; padding: 8px 12px; border: none; background: transparent; color: #e4e4ef; cursor: pointer; font-family: inherit; font-size: 13px; text-align: left; } @@ -2384,6 +2490,8 @@ .journal-selected-node { cursor: pointer; display: inline-flex; align-items: center; gap: 6px; padding: 6px 10px; background: #1e1e3a; border: 1px solid #3a3a5c; border-radius: 4px; font-size: 13px; color: #a5b4fc; white-space: nowrap; font-family: inherit; } .journal-selected-node:hover { background: #2a2a4a; } .journal-node-clear { color: #8888a0; font-size: 14px; margin-left: 4px; } +.journal-status-msg { font-size: 12px; color: #34d399; padding: 4px 8px; background: #1a2a1e; border-radius: 4px; } +.disabled-hint { opacity: 0.5; } /* Today suggestions */ .today-suggestions { margin-bottom: 24px; } diff --git a/frontend/src/lib/i18n/locales/en.js b/frontend/src/lib/i18n/locales/en.js index c9d29c5..9e7c6b2 100644 --- a/frontend/src/lib/i18n/locales/en.js +++ b/frontend/src/lib/i18n/locales/en.js @@ -123,9 +123,20 @@ export default { 'worklog.suggestions': 'Suggestions for today', 'worklog.apply': 'Apply', + 'worklog.title': 'Work Log', + 'worklog.whatDone': 'What was done', + 'worklog.minutes': 'Min', + 'worklog.min': 'min', + 'worklog.log': 'Log', + 'worklog.empty': 'No work logged yet', + 'worklog.details': 'Details', + 'worklog.source': 'Source', + 'worklog.sourceSuggestion': 'Activity suggestion', + 'worklog.sourceManual': 'Manual entry', 'common.all': 'All', 'common.no': 'No', + 'common.open': 'Open', 'common.date': 'Date', 'common.search': 'Search', @@ -140,13 +151,21 @@ export default { 'journal.exportCSV': 'CSV', 'journal.exportMarkdown': 'Markdown', 'journal.billable': 'Billable', - 'journal.approximate': 'Approx', + 'journal.billableYes': 'Billable', + 'journal.billableNo': 'Not billable', + 'journal.billableHint': 'Billable — can be included in client invoice', + 'journal.approx': 'Time type', + 'journal.approxExact': 'Exact', + 'journal.approxEstimated': 'Estimated', + 'journal.approxHint': 'Estimated — time suggested by the system or entered as approximate', + 'journal.includeChildrenDisabledHint': 'Only works when a case/client/project is selected', 'journal.node': 'Case', 'journal.path': 'Path', 'journal.byDay': 'By day', 'journal.byNode': 'By case', 'journal.includeChildren': 'Include subtasks', 'journal.nodeSearch': 'Search case...', + 'journal.relatedEvents': 'Related events', 'suggest.title': 'Suggestions', 'suggest.apply': 'Log', @@ -158,4 +177,5 @@ export default { 'suggest.minutes': 'min', 'suggest.edit': 'Edit', 'suggest.noSuggestions': 'No suggestions', + 'suggest.detectedEvents': 'What was detected', } diff --git a/frontend/src/lib/i18n/locales/ru.js b/frontend/src/lib/i18n/locales/ru.js index f0f9801..f436ba8 100644 --- a/frontend/src/lib/i18n/locales/ru.js +++ b/frontend/src/lib/i18n/locales/ru.js @@ -50,6 +50,7 @@ export default { 'common.run': 'Запустить', 'common.test': 'Test', 'common.all': 'Все', + 'common.open': 'Открыть', 'common.no': 'Нет', 'common.date': 'Дата', 'common.search': 'Найти', @@ -156,6 +157,12 @@ export default { 'worklog.min': 'мин', 'worklog.log': 'Записать', 'worklog.empty': 'Записей работы пока нет', + 'worklog.details': 'Детали', + 'worklog.source': 'Источник', + 'worklog.sourceSuggestion': 'Предложение activity', + 'worklog.sourceManual': 'Ручная запись', + 'worklog.suggestions': 'Предложения', + 'worklog.apply': 'Применить', 'worklog.suggestions': 'Предложения на сегодня', 'worklog.apply': 'Применить', @@ -211,14 +218,22 @@ export default { 'journal.total': 'Всего', 'journal.exportCSV': 'CSV', 'journal.exportMarkdown': 'Markdown', - 'journal.billable': 'Оплачиваемое', - 'journal.approximate': 'Примерно', + 'journal.billable': 'К оплате', + 'journal.billableYes': 'К оплате', + 'journal.billableNo': 'Не к оплате', + 'journal.billableHint': 'К оплате — можно включать в счёт клиенту', + 'journal.approx': 'Тип времени', + 'journal.approxExact': 'Точное', + 'journal.approxEstimated': 'Оценочное', + 'journal.approxHint': 'Оценочное — время предложено системой или введено как примерное', + 'journal.includeChildrenDisabledHint': 'Работает только при выбранном деле/клиенте/проекте', 'journal.node': 'Дело', 'journal.path': 'Путь', 'journal.byDay': 'По дням', 'journal.byNode': 'По делам', 'journal.includeChildren': 'С подзадачами', 'journal.nodeSearch': 'Поиск дела...', + 'journal.relatedEvents': 'Связанные события', 'suggest.title': 'Предложения на сегодня', 'suggest.apply': 'Записать', @@ -230,6 +245,7 @@ export default { 'suggest.minutes': 'мин', 'suggest.edit': 'Изменить', 'suggest.noSuggestions': 'Нет предложений для журнала', + 'suggest.detectedEvents': 'Что обнаружено', 'activity.title': 'Активность', 'activity.empty': 'Активность пока не зафиксирована', diff --git a/internal/core/activity/suggest.go b/internal/core/activity/suggest.go index ea6fa3d..53103f5 100644 --- a/internal/core/activity/suggest.go +++ b/internal/core/activity/suggest.go @@ -7,16 +7,29 @@ const ( ConfidenceHigh = "high" ) +// SuggestionDetail is a lightweight event summary for suggestion display. +type SuggestionDetail struct { + ID string `json:"id"` + EventType string `json:"eventType"` + TargetType string `json:"targetType"` + TargetID string `json:"targetId"` + Title string `json:"title"` + CreatedAt string `json:"createdAt"` + NodeID string `json:"nodeId"` +} + // 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"` - Confidence string `json:"confidence"` - ConfidenceReason string `json:"confidenceReason"` - Hidden bool `json:"hidden"` - TimeSpreadMin int `json:"timeSpreadMin"` // minutes between first and last event + NodeID string `json:"nodeId"` + NodeTitle string `json:"nodeTitle"` + Summary string `json:"summary"` + SuggestedMin int `json:"suggestedMin"` + EventCount int `json:"eventCount"` + NodeKind string `json:"nodeKind"` + Confidence string `json:"confidence"` + ConfidenceReason string `json:"confidenceReason"` + Hidden bool `json:"hidden"` + TimeSpreadMin int `json:"timeSpreadMin"` // minutes between first and last event + EventIDs []string `json:"eventIds"` + Events []SuggestionDetail `json:"events,omitempty"` } diff --git a/internal/core/storage/migrations_013.sql.go b/internal/core/storage/migrations_013.sql.go new file mode 100644 index 0000000..1af49d5 --- /dev/null +++ b/internal/core/storage/migrations_013.sql.go @@ -0,0 +1,12 @@ +package storage + +// migration013 — worklog_entry_events table linking entries to activity events. +const migration013 = ` +CREATE TABLE IF NOT EXISTS worklog_entry_events ( + entry_id TEXT NOT NULL REFERENCES worklog_entries(id) ON DELETE CASCADE, + event_id TEXT NOT NULL, + PRIMARY KEY (entry_id, event_id) +); + +CREATE INDEX IF NOT EXISTS idx_wle_events ON worklog_entry_events(event_id); +` diff --git a/internal/core/storage/storage.go b/internal/core/storage/storage.go index 07df42d..58cedca 100644 --- a/internal/core/storage/storage.go +++ b/internal/core/storage/storage.go @@ -69,6 +69,7 @@ var migrationFiles = map[int]string{ 10: migration010, 11: migration011, 12: migration012, + 13: migration013, } func (db *DB) runInitialSchema() error { diff --git a/internal/i18n/locales/en.json b/internal/i18n/locales/en.json index ca2b550..634f057 100644 --- a/internal/i18n/locales/en.json +++ b/internal/i18n/locales/en.json @@ -7,6 +7,17 @@ "nav.recipes": "Recipes", "nav.documents": "Documents", "nav.archive": "Archive", + "nav.journal": "Work Log", + "nav.sections": "Sections", + "nav.cases": "Cases", + "nav.noCases": "No cases", + "nav.sync": "Sync", + "nav.syncSettings": "Sync settings", + "nav.syncNow": "Sync now", + "nav.selectPrompt": "Select a section or case", + "nav.brand": "Verstak", + "nav.createNode": "Create node", + "nav.moveToRoot": "Move to root", "tab.overview": "Overview", "tab.notes": "Notes", diff --git a/internal/i18n/locales/ru.json b/internal/i18n/locales/ru.json index 3478ffc..19f945a 100644 --- a/internal/i18n/locales/ru.json +++ b/internal/i18n/locales/ru.json @@ -10,6 +10,7 @@ "nav.sections": "Разделы", "nav.cases": "Дела", "nav.noCases": "Нет дел", + "nav.journal": "Журнал", "nav.sync": "Синхронизация", "nav.syncSettings": "Настройки синхронизации", "nav.syncNow": "Синхронизировать", @@ -391,6 +392,8 @@ "nav.noNodes": "Нет узлов", "nav.openFolder": "Открыть папку", "nav.createInside": "Создать внутри", + "nav.createNode": "Создать элемент", + "nav.moveToRoot": "Переместить в корень", "template.folder": "Папка", "template.project": "Проект",