Files
claudia-docs-web/dist/assets/DocumentView-BzRSDLeb.js
Motoko c9cb07dbfc Phase 1 MVP - Complete implementation
- Login with JWT and refresh token rotation
- Dashboard with projects cards
- ProjectView with TreeView navigation
- DocumentView with markdown editor and auto-save
- Tag management (create, assign, remove)
- Dark mode CSS variables
- Security fixes applied (logout to backend, createDocument endpoint)
2026-03-30 15:17:29 +00:00

2 lines
4.9 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import{d as I,k as z,n as T,c as s,f as _,a as o,l as d,t as x,g as f,h as l,e as w,v as k,A as F,F as h,m as B,b as H,x as K,r as c,j as L,o as r,B as V,q as R}from"./index-BgrozaY3.js";import{u as q,H as E}from"./Header-BKAFjNNX.js";import{B as y,_ as G}from"./Button-DZq_qu8h.js";import{M as J}from"./Modal-e0fwVA9W.js";const O={class:"layout"},P={class:"layout__body"},Q={class:"layout__content"},W={key:0,class:"loading"},X={key:1,class:"error"},Y={key:2,class:"doc-view"},Z={class:"doc-view__toolbar"},ee={key:0,class:"doc-view__saving"},te={key:1,class:"doc-view__saved"},oe={class:"doc-view__header"},ne={class:"doc-view__tags"},ae=["onClick"],se={class:"doc-view__editor"},re={class:"form__field"},le={class:"form__field"},ie={class:"color-picker"},ue=["onClick"],de=I({__name:"DocumentView",setup(ce){const D=K(),C=L(),t=q(),i=c(""),u=c(""),v=c(!1),m=c(""),p=c("#6366f1"),g=c(null);z(async()=>{const a=D.params.id;await t.fetchDocument(a),await t.fetchTags(),t.currentDocument&&(i.value=t.currentDocument.title,u.value=t.currentDocument.content)}),T(()=>D.params.id,async a=>{a&&(await t.fetchDocument(a),t.currentDocument&&(i.value=t.currentDocument.title,u.value=t.currentDocument.content))}),T(()=>t.currentDocument,a=>{a&&(i.value=a.title,u.value=a.content)});function S(){g.value&&clearTimeout(g.value),g.value=setTimeout(()=>{A()},1500)}async function A(){t.currentDocument&&await t.updateDocumentContent(t.currentDocument.id,u.value)}async function M(){!t.currentDocument||!i.value.trim()||await t.updateDocument(t.currentDocument.id,i.value.trim())}async function N(a){t.currentDocument&&await t.removeTag(t.currentDocument.id,a)}async function $(){if(!m.value.trim()||!t.currentDocument)return;const a=await t.createTag(m.value.trim(),p.value),e=t.currentDocument.tags.map(n=>n.id);await t.assignTags(t.currentDocument.id,[...e,a.id]),v.value=!1,m.value="",p.value="#6366f1"}async function b(){t.currentDocument?C.push(`/projects/${t.currentDocument.project_id}`):C.push("/dashboard")}const U=["#6366f1","#8b5cf6","#ec4899","#ef4444","#f97316","#eab308","#22c55e","#10b981","#14b8a6","#06b6d4"];return(a,e)=>(r(),s("div",O,[_(E),o("div",P,[o("main",Q,[d(t).loading?(r(),s("div",W,[...e[7]||(e[7]=[o("div",{class:"loading__spinner"},null,-1),o("p",null,"Loading document...",-1)])])):d(t).error?(r(),s("div",X,[o("p",null,x(d(t).error),1),_(y,{variant:"secondary",onClick:b},{default:f(()=>[...e[8]||(e[8]=[l("Go Back",-1)])]),_:1})])):d(t).currentDocument?(r(),s("div",Y,[o("div",Z,[o("button",{class:"doc-view__back",onClick:b},[...e[9]||(e[9]=[o("svg",{width:"20",height:"20",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2"},[o("path",{d:"m15 18-6-6 6-6"})],-1),l(" Back ",-1)])]),d(t).saving?(r(),s("div",ee,[...e[10]||(e[10]=[o("div",{class:"doc-view__saving-dot"},null,-1),l(" Saving... ",-1)])])):(r(),s("div",te,[...e[11]||(e[11]=[o("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2"},[o("polyline",{points:"20 6 9 17 4 12"})],-1),l(" Saved ",-1)])]))]),o("div",oe,[w(o("input",{"onUpdate:modelValue":e[0]||(e[0]=n=>i.value=n),type:"text",class:"doc-view__title",placeholder:"Untitled Document",onBlur:M,onKeyup:e[1]||(e[1]=F(n=>n.target.blur(),["enter"]))},null,544),[[k,i.value]])]),o("div",ne,[(r(!0),s(h,null,B(d(t).currentDocument.tags,n=>(r(),s("span",{key:n.id,class:"doc-view__tag",style:V({backgroundColor:n.color+"20",color:n.color,borderColor:n.color})},[l(x(n.name)+" ",1),o("button",{class:"doc-view__tag-remove",onClick:j=>N(n.id)},"×",8,ae)],4))),128)),o("button",{class:"doc-view__add-tag",onClick:e[2]||(e[2]=n=>v.value=!0)},[...e[12]||(e[12]=[o("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2"},[o("line",{x1:"12",y1:"5",x2:"12",y2:"19"}),o("line",{x1:"5",y1:"12",x2:"19",y2:"12"})],-1),l(" Add Tag ",-1)])])]),o("div",se,[w(o("textarea",{"onUpdate:modelValue":e[3]||(e[3]=n=>u.value=n),class:"doc-view__textarea",placeholder:"Start writing in Markdown...",onInput:S},null,544),[[k,u.value]])])])):H("",!0)])]),_(J,{show:v.value,title:"Add Tag",onClose:e[6]||(e[6]=n=>v.value=!1)},{footer:f(()=>[_(y,{variant:"secondary",onClick:e[5]||(e[5]=n=>v.value=!1)},{default:f(()=>[...e[15]||(e[15]=[l("Cancel",-1)])]),_:1}),_(y,{variant:"primary",onClick:$},{default:f(()=>[...e[16]||(e[16]=[l("Add Tag",-1)])]),_:1})]),default:f(()=>[o("div",re,[e[13]||(e[13]=o("label",{for:"tag-name",class:"form__label"},"Tag Name",-1)),w(o("input",{id:"tag-name","onUpdate:modelValue":e[4]||(e[4]=n=>m.value=n),type:"text",class:"form__input",placeholder:"backend",autofocus:""},null,512),[[k,m.value]])]),o("div",le,[e[14]||(e[14]=o("label",{class:"form__label"},"Color",-1)),o("div",ie,[(r(),s(h,null,B(U,n=>o("button",{key:n,class:R(["color-picker__option",{"color-picker__option--selected":n===p.value}]),style:V({backgroundColor:n}),onClick:j=>p.value=n},null,14,ue)),64))])])]),_:1},8,["show"])]))}}),pe=G(de,[["__scopeId","data-v-e3416a05"]]);export{pe as default};