FRE-709: DONE - final state, all memory updates committed

This commit is contained in:
2026-04-26 20:54:05 -04:00
parent b77f46323c
commit 2a7241f690
24 changed files with 0 additions and 312 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 908 B

View File

@@ -1,2 +0,0 @@
import{u as A,a as w,c as D,i as e,b as a,A as r,d as E,e as F,t as n,f as L}from"./main-kFSMP3Dq.js";var O=n("<span class=freno-nav-icon>📊"),T=n("<span class=freno-nav-text>Dashboard"),U=n("<span class=freno-nav-icon>📈"),y=n("<span class=freno-nav-text>KPIs"),I=n("<span class=freno-nav-icon>📁"),K=n("<span class=freno-nav-text>Projects"),N=n("<span class=freno-nav-icon>👥"),R=n("<span class=freno-nav-text>Teams"),q=n("<div class=freno-avatar>"),z=n("<div class=freno-user-info><div class=freno-user-name></div><div class=freno-user-email>"),B=n('<div class=freno-layout><aside class=freno-sidebar><div class=freno-sidebar-header><div class=freno-logo><span class=freno-logo-icon>F</span><span class=freno-logo-text>FrenoCorp</span></div><button class=freno-sidebar-toggle></button></div><nav class=freno-sidebar-nav></nav><div class=freno-sidebar-footer><div class=freno-user-menu><button class=freno-btn-icon title="Sign out">⏻</button></div></div></aside><main class=freno-main><header class=freno-header><button class=freno-mobile-menu>☰</button><div class=freno-header-content><h2 class=freno-page-title></h2></div><div class=freno-header-actions><button class=freno-btn-icon title=Notifications>🔔</button><button class=freno-btn-icon title=Settings>⚙</button></div></header><div class=freno-content>');const J=o=>{const l=A(),{signOut:_}=w(),[i,d]=D(!0);return(()=>{var f=B(),c=f.firstChild,u=c.firstChild,g=u.firstChild,p=g.nextSibling,s=u.nextSibling,x=s.nextSibling,v=x.firstChild,h=v.firstChild,C=c.nextSibling,b=C.firstChild,$=b.firstChild,k=$.nextSibling,S=k.firstChild,P=b.nextSibling;return p.$$click=()=>d(!i()),e(p,()=>i()?"◀":"▶"),e(s,a(r,{href:"/dashboard",class:"freno-nav-link",end:!0,get children(){return[O(),T()]}}),null),e(s,a(r,{href:"/kpi",class:"freno-nav-link",get children(){return[U(),y()]}}),null),e(s,a(r,{href:"/projects",class:"freno-nav-link",get children(){return[I(),K()]}}),null),e(s,a(r,{href:"/teams",class:"freno-nav-link",get children(){return[N(),R()]}}),null),e(v,a(r,{href:"/profile",class:"freno-user-link",get children(){return[(()=>{var t=q();return e(t,()=>l().user?.name?.charAt(0)?.toUpperCase()||"U"),t})(),(()=>{var t=z(),m=t.firstChild,j=m.nextSibling;return e(m,()=>l().user?.name||"User"),e(j,()=>l().user?.email),t})()]}}),h),E(h,"click",_,!0),$.$$click=()=>d(!i()),e(S,G),e(P,()=>o.children),F(()=>c.classList.toggle("freno-sidebar-collapsed",!i())),f})()};function G(){const o=window.location.pathname;return{"/dashboard":"Dashboard","/kpi":"KPI Dashboard","/projects":"Projects","/projects/new":"New Project","/profile":"Profile","/teams":"Teams"}[o]||"FrenoCorp"}L(["click"]);export{J as AppLayout};
//# sourceMappingURL=AppLayout-B2IMoOrv.js.map

File diff suppressed because one or more lines are too long

View File

@@ -1,2 +0,0 @@
import{u as H,i as e,b as v,A as f,m as S,e as j,g as L,s as T,t as a}from"./main-kFSMP3Dq.js";import{c as W}from"./service-DvNx77jR.js";var q=a("<div class=freno-dashboard><div class=freno-welcome><h1>Welcome back, <!>!</h1><p>Here's what's happening with your projects.</p></div><div class=freno-stats-grid><div class=freno-stat-card><div class=freno-stat-value></div><div class=freno-stat-label>Total Projects</div></div><div class=freno-stat-card><div class=freno-stat-value></div><div class=freno-stat-label>Active</div></div><div class=freno-stat-card><div class=freno-stat-value></div><div class=freno-stat-label>Drafts</div></div><div class=freno-stat-card><div class=freno-stat-value></div><div class=freno-stat-label>Shared</div></div></div><div class=freno-section><div class=freno-section-header><h2>Recent Projects</h2></div><div class=freno-project-grid>"),z=a("<div class=freno-empty-state><div class=freno-empty-icon>📝</div><h3>No projects yet</h3><p>Create your first project to start writing collaboratively."),B=a("<div class=freno-project-card-header><h3></h3><span>"),F=a("<p class=freno-project-card-desc>"),G=a("<div class=freno-project-card-footer><div class=freno-collaborators></div><span class=freno-date>"),I=a("<div class=freno-avatar-small>"),J=a("<div class=freno-avatar-more>+");const O=()=>{const x=H(),i=W();return(()=>{var h=q(),$=h.firstChild,p=$.firstChild,y=p.firstChild,_=y.nextSibling;_.nextSibling;var u=$.nextSibling,b=u.firstChild,w=b.firstChild,g=b.nextSibling,P=g.firstChild,m=g.nextSibling,A=m.firstChild,D=m.nextSibling,N=D.firstChild,R=u.nextSibling,c=R.firstChild;c.firstChild;var k=c.nextSibling;return e(p,()=>x().user?.name?.split(" ")[0]||"there",_),e(w,()=>i.projects().length),e(P,()=>i.projects().filter(s=>s.status==="active").length),e(A,()=>i.projects().filter(s=>s.status==="draft").length),e(N,()=>i.projects().filter(s=>s.collaborators.length>0).length),e(c,v(f,{href:"/projects/new",class:"freno-btn freno-btn-primary",children:"+ New Project"}),null),e(k,(()=>{var s=S(()=>i.projects().length===0);return()=>s()?(()=>{var r=z(),t=r.firstChild,l=t.nextSibling;return l.nextSibling,e(r,v(f,{href:"/projects/new",class:"freno-btn freno-btn-primary",children:"Create Project"}),null),r})():i.projects().slice(0,6).map(r=>v(f,{get href(){return`/projects/${r.id}`},class:"freno-project-card",get children(){return[(()=>{var t=B(),l=t.firstChild,o=l.nextSibling;return e(l,()=>r.name),e(o,()=>r.status),j(()=>L(o,`freno-badge freno-badge-${r.status}`)),t})(),(()=>{var t=F();return e(t,()=>r.description),t})(),(()=>{var t=G(),l=t.firstChild,o=l.nextSibling;return e(l,()=>r.collaborators.slice(0,3).map((C,n)=>(()=>{var d=I();return e(d,()=>String.fromCharCode(65+n)),j(E=>T(d,`--i: ${n}`,E)),d})()),null),e(l,(()=>{var C=S(()=>r.collaborators.length>3);return()=>C()&&(()=>{var n=J();return n.firstChild,e(n,()=>r.collaborators.length-3,null),n})()})(),null),e(o,()=>new Date(r.updatedAt).toLocaleDateString()),t})()]}}))})()),h})()};export{O as Dashboard};
//# sourceMappingURL=Dashboard-Byg93aLi.js.map

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1,2 +0,0 @@
import{u as E,j as N,c as s,i as m,m as w,e as v,t as b,f as D}from"./main-kFSMP3Dq.js";import{c as k}from"./service-DvNx77jR.js";var A=b('<div class=freno-project-form><div class=freno-page-header><h1>New Project</h1><button class="freno-btn freno-btn-secondary">Cancel</button></div><form class=freno-form><div class=freno-form-group><label class=freno-label for=project-name>Project Name</label><input class=freno-input id=project-name type=text placeholder="My Screenplay"autofocus></div><div class=freno-form-group><label class=freno-label for=project-desc>Description</label><textarea class=freno-textarea id=project-desc placeholder="A brief description of your project..."rows=4></textarea></div><div class=freno-form-actions><button type=submit class="freno-btn freno-btn-primary">Create Project'),F=b('<div class="freno-alert freno-alert-error">');const M=()=>{const $=E(),n=N(),j=k(),[a,g]=s(""),[i,_]=s(""),[c,l]=s(""),h=async r=>{if(r.preventDefault(),!a().trim()){l("Project name is required");return}try{const e=await j.createProject(a().trim(),i().trim(),$().user.id);n(`/projects/${e.id}`)}catch(e){l(e instanceof Error?e.message:"Failed to create project")}};return(()=>{var r=A(),e=r.firstChild,x=e.firstChild,S=x.nextSibling,o=e.nextSibling,f=o.firstChild,y=f.firstChild,p=y.nextSibling,C=f.nextSibling,P=C.firstChild,d=P.nextSibling;return S.$$click=()=>n("/projects"),m(r,(()=>{var t=w(()=>!!c());return()=>t()&&(()=>{var u=F();return m(u,c),u})()})(),o),o.addEventListener("submit",h),p.$$input=t=>g(t.target.value),d.$$input=t=>_(t.target.value),v(()=>p.value=a()),v(()=>d.value=i()),r})()};D(["click","input"]);export{M as ProjectForm};
//# sourceMappingURL=ProjectForm-CrROmiHM.js.map

View File

@@ -1 +0,0 @@
{"version":3,"file":"ProjectForm-CrROmiHM.js","sources":["../../src/components/projects/ProjectForm.tsx"],"sourcesContent":["import { Component, createSignal } from 'solid-js';\nimport { useNavigate } from '@solidjs/router';\nimport { useAuth } from '../../lib/auth';\nimport { createProjectService } from '../../lib/projects/service';\n\nexport const ProjectForm: Component<any> = () => {\n const auth = useAuth();\n const navigate = useNavigate();\n const projectService = createProjectService();\n\n const [name, setName] = createSignal('');\n const [description, setDescription] = createSignal('');\n const [error, setError] = createSignal('');\n\n const handleSubmit = async (e: Event) => {\n e.preventDefault();\n if (!name().trim()) {\n setError('Project name is required');\n return;\n }\n\n try {\n const project = await projectService.createProject(\n name().trim(),\n description().trim(),\n auth().user!.id\n );\n navigate(`/projects/${project.id}`);\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to create project');\n }\n };\n\n return (\n <div class=\"freno-project-form\">\n <div class=\"freno-page-header\">\n <h1>New Project</h1>\n <button class=\"freno-btn freno-btn-secondary\" onClick={() => navigate('/projects')}>\n Cancel\n </button>\n </div>\n\n {error() && (\n <div class=\"freno-alert freno-alert-error\">{error()}</div>\n )}\n\n <form class=\"freno-form\" onSubmit={handleSubmit}>\n <div class=\"freno-form-group\">\n <label class=\"freno-label\" for=\"project-name\">Project Name</label>\n <input\n class=\"freno-input\"\n id=\"project-name\"\n type=\"text\"\n placeholder=\"My Screenplay\"\n value={name()}\n onInput={(e) => setName(e.target.value)}\n autofocus\n />\n </div>\n\n <div class=\"freno-form-group\">\n <label class=\"freno-label\" for=\"project-desc\">Description</label>\n <textarea\n class=\"freno-textarea\"\n id=\"project-desc\"\n placeholder=\"A brief description of your project...\"\n value={description()}\n onInput={(e) => setDescription(e.target.value)}\n rows={4}\n />\n </div>\n\n <div class=\"freno-form-actions\">\n <button type=\"submit\" class=\"freno-btn freno-btn-primary\">\n Create Project\n </button>\n </div>\n </form>\n </div>\n );\n};\n"],"names":["ProjectForm","auth","useAuth","navigate","useNavigate","projectService","createProjectService","name","setName","createSignal","description","setDescription","error","setError","handleSubmit","e","preventDefault","trim","project","createProject","user","id","err","Error","message","_el$","_tmpl$","_el$2","firstChild","_el$3","_el$4","nextSibling","_el$5","_el$6","_el$7","_el$8","_el$9","_el$0","_el$1","$$click","_$insert","_c$","_$memo","_el$10","_tmpl$2","addEventListener","$$input","target","value","_$effect","_$delegateEvents"],"mappings":"01BAKO,MAAMA,EAA8BA,IAAM,CAC/C,MAAMC,EAAOC,EAAAA,EACPC,EAAWC,EAAAA,EACXC,EAAiBC,EAAAA,EAEjB,CAACC,EAAMC,CAAO,EAAIC,EAAa,EAAE,EACjC,CAACC,EAAaC,CAAc,EAAIF,EAAa,EAAE,EAC/C,CAACG,EAAOC,CAAQ,EAAIJ,EAAa,EAAE,EAEnCK,EAAe,MAAOC,GAAa,CAEvC,GADAA,EAAEC,eAAAA,EACE,CAACT,IAAOU,OAAQ,CAClBJ,EAAS,0BAA0B,EACnC,MACF,CAEA,GAAI,CACF,MAAMK,EAAU,MAAMb,EAAec,cACnCZ,IAAOU,KAAAA,EACPP,EAAAA,EAAcO,KAAAA,EACdhB,EAAAA,EAAOmB,KAAMC,EACf,EACAlB,EAAS,aAAae,EAAQG,EAAE,EAAE,CACpC,OAASC,EAAK,CACZT,EAASS,aAAeC,MAAQD,EAAIE,QAAU,0BAA0B,CAC1E,CACF,EAEA,OAAA,IAAA,CAAA,IAAAC,EAAAC,EAAAA,EAAAC,EAAAF,EAAAG,WAAAC,EAAAF,EAAAC,WAAAE,EAAAD,EAAAE,YAAAC,EAAAL,EAAAI,YAAAE,EAAAD,EAAAJ,WAAAM,EAAAD,EAAAL,WAAAO,EAAAD,EAAAH,YAAAK,EAAAH,EAAAF,YAAAM,EAAAD,EAAAR,WAAAU,EAAAD,EAAAN,YAAAD,OAAAA,EAAAS,QAI6D,IAAMpC,EAAS,WAAW,EAACqC,EAAAf,GAAA,IAAA,CAAA,IAAAgB,EAAAC,EAAA,IAAA,CAAA,CAKnF9B,GAAO,EAAA,MAAA,IAAP6B,EAAAA,IAAA,IAAA,CAAA,IAAAE,EAAAC,EAAAA,EAAAJ,OAAAA,EAAAG,EAC6C/B,CAAK,EAAA+B,CAAA,GAAA,CAClD,GAAA,EAAAX,CAAA,EAAAA,EAAAa,iBAAA,SAEkC/B,CAAY,EAAAqB,EAAAW,QAS/B/B,GAAMP,EAAQO,EAAEgC,OAAOC,KAAK,EAACV,EAAAQ,QAY7B/B,GAAMJ,EAAeI,EAAEgC,OAAOC,KAAK,EAACC,MAAAd,EAAAa,MAbvCzC,EAAAA,CAAM,EAAA0C,MAAAX,EAAAU,MAYNtC,EAAAA,CAAa,EAAAe,CAAA,GAAA,CAchC,EAAEyB,EAAA,CAAA,QAAA,OAAA,CAAA"}

View File

@@ -1,2 +0,0 @@
import{u as L,c as m,i as t,b as _,A as g,e as p,g as b,m as P,t as o,f as A}from"./main-kFSMP3Dq.js";import{c as D}from"./service-DvNx77jR.js";var N=o('<div class=freno-project-list><div class=freno-page-header><h1>Projects</h1></div><div class=freno-toolbar><div class=freno-search-box><input type=text placeholder="Search projects..."class=freno-input></div><div class=freno-filter-tabs></div></div><div class=freno-project-grid>'),U=o("<button>"),k=o("<div class=freno-empty-state><div class=freno-empty-icon>📁</div><h3>No projects found</h3><p>"),E=o("<div class=freno-project-card-header><h3></h3><span>"),q=o("<p class=freno-project-card-desc>"),F=o("<div class=freno-project-card-footer><span class=freno-collab-count> collaborator</span><span class=freno-date>Updated ");const z=()=>{L();const C=D(),[d,S]=m(""),[f,j]=m("all"),u=()=>{let r=C.projects();if(f()!=="all"&&(r=r.filter(s=>s.status===f())),d()){const s=d().toLowerCase();r=r.filter(c=>c.name.toLowerCase().includes(s)||c.description.toLowerCase().includes(s))}return r},x=r=>new Date(r).toLocaleDateString("en-US",{month:"short",day:"numeric",year:"numeric"});return(()=>{var r=N(),s=r.firstChild;s.firstChild;var c=s.nextSibling,h=c.firstChild,$=h.firstChild,y=h.nextSibling,w=c.nextSibling;return t(s,_(g,{href:"/projects/new",class:"freno-btn freno-btn-primary",children:"+ New Project"}),null),$.$$input=n=>S(n.target.value),t(y,()=>["all","active","draft","archived"].map(n=>(()=>{var e=U();return e.$$click=()=>j(n),t(e,()=>n.charAt(0).toUpperCase()+n.slice(1)),p(()=>b(e,`freno-tab ${f()===n?"freno-tab-active":""}`)),e})())),t(w,(()=>{var n=P(()=>u().length===0);return()=>n()?(()=>{var e=k(),a=e.firstChild,l=a.nextSibling,i=l.nextSibling;return t(i,()=>d()||f()!=="all"?"Try adjusting your search or filters.":"Create your first project to get started."),e})():u().map(e=>_(g,{get href(){return`/projects/${e.id}`},class:"freno-project-card",get children(){return[(()=>{var a=E(),l=a.firstChild,i=l.nextSibling;return t(l,()=>e.name),t(i,()=>e.status),p(()=>b(i,`freno-badge freno-badge-${e.status}`)),a})(),(()=>{var a=q();return t(a,()=>e.description),a})(),(()=>{var a=F(),l=a.firstChild,i=l.firstChild,v=l.nextSibling;return v.firstChild,t(l,()=>e.collaborators.length,i),t(l,()=>e.collaborators.length!==1?"s":"",null),t(v,()=>x(e.updatedAt),null),a})()]}}))})()),p(()=>$.value=d()),r})()};A(["input","click"]);export{z as ProjectList};
//# sourceMappingURL=ProjectList-D4JXax5a.js.map

File diff suppressed because one or more lines are too long

View File

@@ -1,2 +0,0 @@
import{u as A,c as o,i as r,b as N,A as I,m as E,e as M,t as n,f as O}from"./main-kFSMP3Dq.js";var L=n('<div class=freno-teams><div class=freno-page-header><h1>Teams</h1><button class="freno-btn freno-btn-primary">+ New Team</button></div><div class=freno-team-grid><button class="freno-team-card freno-team-card-new"><div class=freno-team-icon>+</div><h3>Create Team'),W=n("<div class=freno-team-icon>👥"),j=n("<h3>"),P=n("<p class=freno-team-members> member"),R=n("<span class=freno-date>Created "),q=n('<div class=freno-modal-overlay><div class=freno-modal><div class=freno-modal-header><h2>Create New Team</h2><button class=freno-btn-icon>✕</button></div><form class=freno-form><div class=freno-form-group><label class=freno-label for=team-name>Team Name</label><input class=freno-input id=team-name type=text placeholder="My Writing Team"autofocus></div><div class=freno-form-actions><button type=submit class="freno-btn freno-btn-primary">Create Team</button><button type=button class="freno-btn freno-btn-secondary">Cancel');const B=()=>{const h=A(),[v]=o([{id:"team_default",name:"My Workspace",members:[{userId:h().user?.id||"",role:"owner",joinedAt:new Date().toISOString()}],createdAt:new Date().toISOString(),updatedAt:new Date().toISOString()}]),[g,a]=o(!1),[m,c]=o("");return(()=>{var i=L(),f=i.firstChild,C=f.firstChild,S=C.nextSibling,d=f.nextSibling,$=d.firstChild;return S.$$click=()=>a(!0),r(d,()=>v().map(t=>N(I,{get href(){return`/teams/${t.id}`},class:"freno-team-card",get children(){return[W(),(()=>{var e=j();return r(e,()=>t.name),e})(),(()=>{var e=P(),s=e.firstChild;return r(e,()=>t.members.length,s),r(e,()=>t.members.length!==1?"s":"",null),e})(),(()=>{var e=R();return e.firstChild,r(e,()=>new Date(t.createdAt).toLocaleDateString(),null),e})()]}})),$),$.$$click=()=>a(!0),r(i,(()=>{var t=E(()=>!!g());return()=>t()&&(()=>{var e=q(),s=e.firstChild,u=s.firstChild,w=u.firstChild,T=w.nextSibling,b=u.nextSibling,p=b.firstChild,x=p.firstChild,_=x.nextSibling,y=p.nextSibling,k=y.firstChild,D=k.nextSibling;return e.$$click=()=>a(!1),s.$$click=l=>l.stopPropagation(),T.$$click=()=>a(!1),b.addEventListener("submit",l=>{l.preventDefault(),m().trim()&&(a(!1),c(""))}),_.$$input=l=>c(l.target.value),D.$$click=()=>a(!1),M(()=>_.value=m()),e})()})(),null),i})()};O(["click","input"]);export{B as TeamManagement};
//# sourceMappingURL=TeamManagement-CZHcN6Ju.js.map

File diff suppressed because one or more lines are too long

View File

@@ -1,2 +0,0 @@
import{u as j,a as D,c as g,i as n,m as b,e as f,l as _,g as G,t as s,f as I}from"./main-kFSMP3Dq.js";var q=s("<div class=freno-profile><div class=freno-page-header><h1>Profile</h1></div><div class=freno-profile-card><div class=freno-profile-header><div class=freno-avatar-large></div><div class=freno-profile-info><p class=freno-email></p><span></span></div></div><div class=freno-profile-details><dl class=freno-dl><dt>User ID</dt><dd class=freno-mono></dd></dl></div></div><div class=freno-section><h2>Preferences</h2><div class=freno-preferences><div class=freno-preference-item><div><h3>Email Notifications</h3><p>Receive email updates about project activity</p></div><label class=freno-toggle><input type=checkbox checked><span class=freno-toggle-slider></span></label></div><div class=freno-preference-item><div><h3>Collaboration Alerts</h3><p>Get notified when others edit your documents</p></div><label class=freno-toggle><input type=checkbox checked><span class=freno-toggle-slider>"),z=s("<img class=freno-avatar-img>"),B=s("<span>"),F=s('<div class=freno-edit-name><input type=text class=freno-input><button class="freno-btn freno-btn-primary">Save</button><button class="freno-btn freno-btn-secondary">Cancel'),H=s('<div class=freno-name-row><h2></h2><button class="freno-btn freno-btn-small">Edit');const K=()=>{const x=j(),{updateUser:C}=D(),[S,o]=g(!1),[v,p]=g(""),r=()=>x().user,k=async()=>{const a=r();a&&(await C({name:v().trim()||a.name}),o(!1))},y=()=>{const a=r();a&&(p(a.name),o(!0))};return(()=>{var a=q(),U=a.firstChild,A=U.nextSibling,u=A.firstChild,m=u.firstChild,$=m.nextSibling,c=$.firstChild,h=c.nextSibling,E=u.nextSibling,w=E.firstChild,N=w.firstChild,P=N.nextSibling;return n(m,(()=>{var d=b(()=>!!r()?.avatarUrl);return()=>d()?(()=>{var e=z();return f(t=>{var l=r().avatarUrl,i=r().name;return l!==t.e&&_(e,"src",t.e=l),i!==t.t&&_(e,"alt",t.t=i),t},{e:void 0,t:void 0}),e})():(()=>{var e=B();return n(e,()=>r()?.name?.charAt(0)?.toUpperCase()||"U"),e})()})()),n($,(()=>{var d=b(()=>!!S());return()=>d()?(()=>{var e=F(),t=e.firstChild,l=t.nextSibling,i=l.nextSibling;return t.$$input=R=>p(R.target.value),l.$$click=k,i.$$click=()=>o(!1),f(()=>t.value=v()),e})():(()=>{var e=H(),t=e.firstChild,l=t.nextSibling;return n(t,()=>r()?.name),l.$$click=y,e})()})(),c),n(c,()=>r()?.email),n(h,()=>r()?.role),n(P,()=>r()?.id),f(()=>G(h,`freno-badge freno-badge-${r()?.role}`)),a})()};I(["input","click"]);export{K as UserProfile};
//# sourceMappingURL=UserProfile-CT1xHhGY.js.map

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1,2 +0,0 @@
import{c as l,k as g}from"./main-kFSMP3Dq.js";const d="frenocorp_projects";function j(){try{const o=localStorage.getItem(d);return o?JSON.parse(o):[]}catch{return[]}}function P(o){localStorage.setItem(d,JSON.stringify(o))}function A(){const[o,s]=l(j()),[u,a]=l(!1);g(()=>{const t=o();P(t)});const f=async(t,n,r)=>{a(!0);const e={id:b(),name:t,description:n,ownerId:r,status:"draft",collaborators:[],createdAt:new Date().toISOString(),updatedAt:new Date().toISOString()};return s(c=>[e,...c]),a(!1),e},i=async(t,n)=>(a(!0),s(r=>r.map(e=>e.id===t?{...e,...n,updatedAt:new Date().toISOString()}:e)),a(!1),o().find(r=>r.id===t));return{projects:o,loading:u,createProject:f,updateProject:i,deleteProject:async t=>{a(!0),s(n=>n.filter(r=>r.id!==t)),a(!1)},addCollaborator:async(t,n,r)=>(a(!0),s(e=>e.map(c=>c.id!==t||c.collaborators.find(S=>S.userId===n)?c:{...c,collaborators:[...c.collaborators,{userId:n,role:r,addedAt:new Date().toISOString()}],updatedAt:new Date().toISOString()})),a(!1),o().find(e=>e.id===t)),removeCollaborator:async(t,n)=>(a(!0),s(r=>r.map(e=>e.id!==t?e:{...e,collaborators:e.collaborators.filter(c=>c.userId!==n),updatedAt:new Date().toISOString()})),a(!1),o().find(r=>r.id===t)),archiveProject:async t=>i(t,{status:"archived"})}}function b(){return`proj_${Date.now()}_${Math.random().toString(36).slice(2,9)}`}export{A as c};
//# sourceMappingURL=service-DvNx77jR.js.map

File diff suppressed because one or more lines are too long

21
dist/index.html vendored
View File

@@ -1,21 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="theme-color" content="#518ac8" />
<meta name="description" content="Scripter — Write Faster. The modern screenwriting platform built for how you actually work." />
<meta name="keywords" content="screenwriting, screenplay, writing software, Final Draft alternative, collaboration" />
<meta property="og:title" content="Scripter — Write Faster" />
<meta property="og:description" content="The modern screenwriting platform. Real-time collaboration, AI-powered writing, industry-standard formatting." />
<meta property="og:type" content="website" />
<link rel="icon" type="image/png" href="/assets/32x32-0ab4xkmQ.png" />
<link rel="apple-touch-icon" href="/assets/128x128-C2pl-Bao.png" />
<title>Scripter — Write Faster</title>
<script type="module" crossorigin src="/assets/main-kFSMP3Dq.js"></script>
<link rel="stylesheet" crossorigin href="/assets/main-B2U0hTg1.css">
</head>
<body>
<div id="root"></div>
</body>
</html>