@chorus-aidlc/chorus 0.6.2 → 0.6.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.next/standalone/.next/BUILD_ID +1 -1
- package/.next/standalone/.next/app-build-manifest.json +108 -108
- package/.next/standalone/.next/app-path-routes-manifest.json +19 -19
- package/.next/standalone/.next/build-manifest.json +2 -2
- package/.next/standalone/.next/prerender-manifest.json +24 -24
- package/.next/standalone/.next/server/app/(dashboard)/project-groups/[uuid]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/activity/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/[ideaUuid]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/page.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/page.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/ideas/[ideaUuid]/page.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/ideas/[ideaUuid]/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/ideas/[ideaUuid]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/ideas/page.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/ideas/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/ideas/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page.js +2 -2
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/new/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/page.js +2 -2
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/page.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/page.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/settings/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/_not-found.html +1 -1
- package/.next/standalone/.next/server/app/_not-found.rsc +1 -1
- package/.next/standalone/.next/server/app/admin/companies/[uuid]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/admin/companies/new/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/admin/companies/new.html +1 -1
- package/.next/standalone/.next/server/app/admin/companies/new.rsc +1 -1
- package/.next/standalone/.next/server/app/admin/companies/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/admin/companies.html +1 -1
- package/.next/standalone/.next/server/app/admin/companies.rsc +1 -1
- package/.next/standalone/.next/server/app/admin/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/admin.html +1 -1
- package/.next/standalone/.next/server/app/admin.rsc +1 -1
- package/.next/standalone/.next/server/app/api/admin/companies/[uuid]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/admin/companies/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/admin/login/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/admin/session/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/agents/[uuid]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/agents/[uuid]/sessions/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/agents/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/api-keys/[uuid]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/api-keys/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/auth/callback/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/auth/check-default/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/auth/default-login/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/auth/identify/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/auth/me/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/auth/refresh/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/auth/session/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/auth/sync-token/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/comments/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/documents/[uuid]/route.js +1 -1
- package/.next/standalone/.next/server/app/api/documents/[uuid]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/events/notifications/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/events/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/health/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/claim/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/release/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/mcp/route.js +1 -1
- package/.next/standalone/.next/server/app/api/mcp/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/me/assignments/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/mentionables/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/notifications/[uuid]/archive/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/notifications/[uuid]/read/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/notifications/preferences/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/notifications/read-all/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/notifications/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/notifications/unread-count/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/project-groups/[uuid]/dashboard/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/project-groups/[uuid]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/project-groups/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/activity/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/available/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/documents/route.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/documents/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/group/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/tracker/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/[proposalUuid]/validate/route.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/[proposalUuid]/validate/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/[proposalUuid]/validate/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/route.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/summary/route.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/summary/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/summary/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/stats/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/dependencies/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/proposals/[uuid]/approve/route.js +1 -1
- package/.next/standalone/.next/server/app/api/proposals/[uuid]/approve/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/proposals/[uuid]/approve/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/proposals/[uuid]/close/route.js +1 -1
- package/.next/standalone/.next/server/app/api/proposals/[uuid]/close/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/proposals/[uuid]/close/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/proposals/[uuid]/reject/route.js +1 -1
- package/.next/standalone/.next/server/app/api/proposals/[uuid]/reject/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/proposals/[uuid]/reject/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/proposals/[uuid]/route.js +1 -1
- package/.next/standalone/.next/server/app/api/proposals/[uuid]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/proposals/[uuid]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/search/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/sessions/[uuid]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[uuid]/claim/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/[dependsOnUuid]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[uuid]/release/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[uuid]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[uuid]/sessions/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/index.html +1 -1
- package/.next/standalone/.next/server/app/index.rsc +1 -1
- package/.next/standalone/.next/server/app/login/admin/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/login/admin.html +1 -1
- package/.next/standalone/.next/server/app/login/admin.rsc +1 -1
- package/.next/standalone/.next/server/app/login/callback/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/login/callback.html +1 -1
- package/.next/standalone/.next/server/app/login/callback.rsc +1 -1
- package/.next/standalone/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/login/silent-refresh/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/login/silent-refresh.html +1 -1
- package/.next/standalone/.next/server/app/login/silent-refresh.rsc +1 -1
- package/.next/standalone/.next/server/app/login.html +1 -1
- package/.next/standalone/.next/server/app/login.rsc +1 -1
- package/.next/standalone/.next/server/app/onboarding/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/onboarding.html +1 -1
- package/.next/standalone/.next/server/app/onboarding.rsc +1 -1
- package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/projects.html +1 -1
- package/.next/standalone/.next/server/app/projects.rsc +1 -1
- package/.next/standalone/.next/server/app/settings.html +1 -1
- package/.next/standalone/.next/server/app/settings.rsc +1 -1
- package/.next/standalone/.next/server/app-paths-manifest.json +19 -19
- package/.next/standalone/.next/server/chunks/1165.js +1 -1
- package/.next/standalone/.next/server/chunks/2618.js +1 -1
- package/.next/standalone/.next/server/chunks/3507.js +1 -0
- package/.next/standalone/.next/server/chunks/{2679.js → 5031.js} +1 -1
- package/.next/standalone/.next/server/chunks/5173.js +13 -0
- package/.next/standalone/.next/server/chunks/7578.js +2 -2
- package/.next/standalone/.next/server/chunks/8204.js +2 -2
- package/.next/standalone/.next/server/chunks/8479.js +2 -2
- package/.next/standalone/.next/server/chunks/849.js +1 -1
- package/.next/standalone/.next/server/chunks/937.js +1 -1
- package/.next/standalone/.next/server/chunks/9408.js +1 -1
- package/.next/standalone/.next/server/middleware-manifest.json +1 -1
- package/.next/standalone/.next/server/pages/404.html +1 -1
- package/.next/standalone/.next/server/pages/500.html +1 -1
- package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/server-reference-manifest.json +1 -1
- package/.next/standalone/package.json +1 -1
- package/README.md +2 -0
- package/README.zh.md +2 -0
- package/chorus.mjs +9 -5
- package/package.json +1 -1
- package/.next/standalone/.next/server/chunks/5254.js +0 -1
- package/.next/standalone/.next/server/chunks/8818.js +0 -13
- /package/.next/standalone/.next/static/{jb5B7m43WYumWWRxjPTSp → uWPfyLQQ7ucUGnHwispnH}/_buildManifest.js +0 -0
- /package/.next/standalone/.next/static/{jb5B7m43WYumWWRxjPTSp → uWPfyLQQ7ucUGnHwispnH}/_ssgManifest.js +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";exports.id=2679,exports.ids=[2679],exports.modules={27380:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{D:()=>Q});var e=c(10837),f=c(21968),g=c(1007),h=c(81512),i=c.n(h),j=c(9222),k=c(24364),l=c(87461),m=c(10694),n=c(16235),o=c(86460),p=c(9810),q=c(97443),r=c(65956),s=c(79543),t=c(49599),u=c(42424),v=c(9994),w=c(20170),x=c(2852),y=c(74645),z=c(10297),A=c(11568),B=c(6019),C=c(80251),D=c(56828);c(35568);var E=c(78714),F=c(69391),G=c(41709),H=c(83457),I=c(76605),J=c(17613),K=c(18789),L=c(94549),M=c(76172),N=c(31009),O=c(45148),P=a([D,H]);[D,H]=P.then?(await P)():P;let R={open:"bg-[#FFF3E0] text-[#E65100]",elaborating:"bg-[#E3F2FD] text-[#1976D2]",elaborated:"bg-[#E0F2F1] text-[#00796B]"},S={open:"open",elaborating:"elaborating",elaborated:"elaborated"};function Q({idea:a,projectUuid:b,currentUserUuid:c,isUsedInProposal:d,onClose:h,onDeleted:P}){let Q=(0,j.c)(),T=(0,g.useRouter)(),[U,V]=(0,f.useState)([]),[W,X]=(0,f.useState)(!0),[Y,Z]=(0,f.useState)(!1),[$,_]=(0,f.useState)(null),aa=(0,f.useCallback)(async()=>{let b=await (0,K.z)(a.uuid);b.success&&b.data&&_(b.data)},[a.uuid]);(0,M.eV)("idea",aa);let[ab,ac]=(0,f.useState)(!1),[ad,ae]=(0,f.useState)(""),[af,ag]=(0,f.useState)(!1),[ah,ai]=(0,f.useState)(null),[aj,ak]=(0,f.useState)(!1),[al,am]=(0,f.useState)(a.title),[an,ao]=(0,f.useState)(a.content||""),[ap,aq]=(0,f.useState)(!1),[ar,as]=(0,f.useState)(null),[at,au]=(0,f.useState)(!1),[av,aw]=(0,f.useState)(!1),[ax,ay]=(0,f.useState)([]),[az,aA]=(0,f.useState)(!1),[aB,aC]=(0,f.useState)(null),[aD,aE]=(0,f.useState)(!1),[aF,aG]=(0,f.useState)(null),[aH,aI]=(0,f.useState)(!1),aJ="elaborated"!==a.status,aK="resolved"===a.elaborationStatus,aL=("elaborating"===a.status||"elaborated"===a.status)&&aK,aM="elaborating"===a.status&&(!a.elaborationStatus||"resolved"!==a.elaborationStatus)&&a.assignee?.uuid===c,aN="elaborated"!==a.status,aO=()=>{ak(!1),am(a.title),ao(a.content||""),as(null)},aP=async()=>{if(!al.trim())return void as(Q("ideas.titleRequired"));aq(!0),as(null);let c=await (0,E.J)({ideaUuid:a.uuid,projectUuid:b,title:al.trim(),content:an.trim()||null});aq(!1),c.success?(ak(!1),T.refresh()):as(c.error||Q("ideas.updateFailed"))},aQ=async()=>{au(!0);let c=await (0,F.Z)(a.uuid,b);au(!1),c.success&&(P?.(),h(),T.refresh())},aR=async()=>{if(!ad.trim())return void ai(Q("elaboration.skipReasonRequired"));ag(!0),ai(null);let b=await (0,L.y)(a.uuid,ad.trim());ag(!1),b.success?(ac(!1),ae(""),T.refresh()):ai(b.error||Q("common.genericError"))},aS=async()=>{aw(!0),aC(null),aG(null),aA(!0);try{let[a,c]=await Promise.all([fetch("/api/projects?pageSize=100"),fetch("/api/project-groups")]),[d,e]=await Promise.all([a.json(),c.json()]);if(d.success){let a=d.data.filter(a=>a.uuid!==b).map(a=>({uuid:a.uuid,name:a.name,groupUuid:a.groupUuid})),c=new Map;if(e.success)for(let a of e.data.groups||e.data)c.set(a.uuid,a.name);let f=new Map,g=[];for(let b of a)b.groupUuid&&c.has(b.groupUuid)?(f.has(b.groupUuid)||f.set(b.groupUuid,{uuid:b.groupUuid,name:c.get(b.groupUuid),projects:[]}),f.get(b.groupUuid).projects.push({uuid:b.uuid,name:b.name})):g.push({uuid:b.uuid,name:b.name});let h=[...f.values()];g.length>0&&h.push({uuid:"ungrouped",name:Q("ideas.ungrouped"),projects:g}),ay(h)}}catch{ay([])}aA(!1)},aT=async()=>{if(aB&&!aD){aE(!0),aG(null);try{let b=await fetch(`/api/ideas/${a.uuid}/move`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({targetProjectUuid:aB.uuid})}),c=await b.json();c.success?(aw(!1),h(),T.refresh()):aG("string"==typeof c.error?c.error:c.error?.message||Q("ideas.moveFailed"))}catch{aG(Q("ideas.moveFailed"))}aE(!1)}};return(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)("div",{className:"fixed inset-0 z-40 bg-black/20",onClick:h}),(0,e.jsxs)("div",{className:`fixed right-0 top-14 md:top-0 z-50 flex h-[calc(100%-3.5rem)] md:h-full w-full md:w-[480px] flex-col bg-white shadow-xl border-l border-[#E5E0D8] ${aH?"":"animate-in slide-in-from-right duration-300"}`,children:[(0,e.jsxs)("div",{className:"flex items-center justify-between border-b border-[#F5F2EC] px-6 py-5",children:[(0,e.jsx)("div",{className:"flex-1 min-w-0",children:aj?(0,e.jsx)("h2",{className:"text-base font-semibold text-[#2C2C2C]",children:Q("ideas.editIdea")}):(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)("h2",{className:"text-base font-semibold text-[#2C2C2C] truncate",children:a.title}),(0,e.jsxs)("div",{className:"mt-1.5 flex items-center gap-2",children:[(0,e.jsx)(t.E,{className:R[a.status]||"",children:Q(`status.${S[a.status]||a.status}`)}),(0,e.jsx)("span",{className:"text-xs text-[#9A9A9A]",children:new Date(a.createdAt).toLocaleDateString()})]})]})}),(0,e.jsxs)("div",{className:"flex items-center gap-2 ml-4",children:[aN&&!aj&&(0,e.jsx)(u.$,{variant:"outline",size:"icon",className:"h-8 w-8 border-[#E5E0D8]",onClick:aS,title:Q("ideas.moveToProject"),children:(0,e.jsx)(k.A,{className:"h-4 w-4 text-[#6B6B6B]"})}),aN&&!aj&&(0,e.jsx)(u.$,{variant:"outline",size:"icon",className:"h-8 w-8 border-[#E5E0D8]",onClick:()=>{am(a.title),ao(a.content||""),as(null),ak(!0)},children:(0,e.jsx)(l.A,{className:"h-4 w-4 text-[#6B6B6B]"})}),(0,e.jsx)(u.$,{variant:"outline",size:"icon",className:"h-8 w-8 border-[#E5E0D8]",onClick:aj?aO:h,children:(0,e.jsx)(m.A,{className:"h-4 w-4 text-[#6B6B6B]"})})]})]}),(0,e.jsx)(y.F,{className:"flex-1 min-h-0 [&_[data-slot=scroll-area-viewport]>div]:!block",children:(0,e.jsx)("div",{className:"flex min-h-full flex-col px-6 py-5",children:aj?(0,e.jsxs)("div",{className:"space-y-5",children:[ar&&(0,e.jsx)("div",{className:"rounded-lg bg-destructive/10 p-3 text-sm text-destructive",children:ar}),(0,e.jsxs)("div",{className:"space-y-2",children:[(0,e.jsx)(x.J,{htmlFor:"edit-title",className:"text-[13px] font-medium text-[#2C2C2C]",children:Q("ideas.titleLabel")}),(0,e.jsx)(v.p,{id:"edit-title",value:al,onChange:a=>am(a.target.value),className:"border-[#E5E0D8] text-sm focus-visible:ring-[#C67A52]",autoFocus:!0})]}),(0,e.jsxs)("div",{className:"space-y-2",children:[(0,e.jsx)(x.J,{htmlFor:"edit-content",className:"text-[13px] font-medium text-[#2C2C2C]",children:Q("common.content")}),(0,e.jsx)(w.T,{id:"edit-content",value:an,onChange:a=>ao(a.target.value),rows:8,className:"border-[#E5E0D8] text-sm resize-none focus-visible:ring-[#C67A52]"})]})]}):(0,e.jsxs)(N.P.div,{variants:O.qG,initial:"initial",animate:"animate",children:[(0,e.jsxs)("div",{children:[(0,e.jsx)("label",{className:"text-[11px] font-medium uppercase tracking-wider text-[#9A9A9A]",children:Q("common.assignee")}),(0,e.jsx)("div",{className:"mt-2 flex items-center gap-2.5 rounded-lg bg-[#FAF8F4] p-3",children:a.assignee?(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)(C.eu,{className:"h-7 w-7",children:(0,e.jsx)(C.q5,{className:"agent"===a.assignee.type?"bg-[#C67A52] text-white":"bg-[#E5E0D8] text-[#6B6B6B]",children:"agent"===a.assignee.type?(0,e.jsx)(n.A,{className:"h-3.5 w-3.5"}):a.assignee.name.charAt(0).toUpperCase()})}),(0,e.jsxs)("div",{children:[(0,e.jsx)("div",{className:"text-sm font-medium text-[#2C2C2C]",children:a.assignee.name}),(0,e.jsx)("div",{className:"text-xs text-[#6B6B6B]",children:"agent"===a.assignee.type?`${Q("common.agent")} • ${a.assignee.assignedAt?new Date(a.assignee.assignedAt).toLocaleDateString():""}`:Q("common.user")})]})]}):(0,e.jsx)("span",{className:"text-sm text-[#9A9A9A]",children:Q("common.unassigned")})})]}),$&&$.rounds.length>0&&(0,e.jsx)("div",{className:"mt-5",children:(0,e.jsx)(J.R,{ideaUuid:a.uuid,elaboration:$,onRefresh:async()=>{let b=await (0,K.z)(a.uuid);b.success&&b.data&&_(b.data)}})}),(0,e.jsxs)("div",{className:"mt-5",children:[(0,e.jsx)("label",{className:"text-[11px] font-medium uppercase tracking-wider text-[#9A9A9A]",children:Q("common.content")}),(0,e.jsx)("div",{className:"mt-2",children:a.content?(0,e.jsx)("div",{className:"prose prose-sm max-w-none text-[13px] leading-relaxed text-[#2C2C2C]",children:(0,e.jsx)(G.jH,{plugins:{code:H.a},children:a.content})}):(0,e.jsx)("p",{className:"text-sm italic text-[#9A9A9A]",children:Q("common.noContent")})})]}),(0,e.jsxs)("div",{className:"mt-5 flex-1",children:[(0,e.jsx)("label",{className:"text-[11px] font-medium uppercase tracking-wider text-[#9A9A9A]",children:Q("common.activity")}),(0,e.jsx)("div",{className:"mt-2 space-y-3",children:W?(0,e.jsx)("div",{className:"flex items-center justify-center py-4",children:(0,e.jsx)(o.A,{className:"h-4 w-4 animate-spin text-[#9A9A9A]"})}):0===U.length?(0,e.jsx)("p",{className:"text-sm text-[#9A9A9A] italic",children:Q("common.noActivity")}):U.map(a=>(0,e.jsxs)("div",{className:"flex items-start gap-2.5",children:[(0,e.jsx)("div",{className:"mt-1.5 h-2 w-2 shrink-0 rounded-full bg-[#9A9A9A]"}),(0,e.jsxs)("div",{className:"flex-1",children:[(0,e.jsx)("p",{className:"text-[13px] text-[#2C2C2C]",children:function(a,b){let{action:c,actorName:d}=a;switch(c){case"created":case"idea_created":return b("activity.ideaCreated",{actor:d});case"assigned":case"idea_assigned":return b("activity.ideaAssigned",{actor:d});case"claimed":case"idea_claimed":return b("activity.ideaClaimed",{actor:d});case"released":case"idea_released":return b("activity.ideaReleased",{actor:d});case"status_changed":case"idea_status_changed":return b("activity.ideaStatusChanged",{actor:d});case"elaboration_started":return b("activity.elaborationStarted",{actor:d});case"elaboration_answered":return b("activity.elaborationAnswered",{actor:d});case"elaboration_skipped":return b("activity.elaborationSkipped",{actor:d});case"elaboration_resolved":return b("activity.elaborationResolved",{actor:d});case"elaboration_followup":return b("activity.elaborationFollowup",{actor:d});default:return`${d}: ${c}`}}(a,Q)}),(0,e.jsx)("p",{className:"text-[11px] text-[#9A9A9A]",children:function(a,b){let c=new Date(a),d=new Date().getTime()-c.getTime(),e=Math.floor(d/6e4),f=Math.floor(d/36e5),g=Math.floor(d/864e5);return e<1?b("time.justNow"):e<60?b("time.minutesAgo",{minutes:e}):f<24?b("time.hoursAgo",{hours:f}):g<7?b("time.daysAgo",{days:g}):c.toLocaleDateString()}(a.createdAt,Q)})]})]},a.uuid))})]}),(0,e.jsxs)("div",{className:"mt-5",children:[(0,e.jsx)("label",{className:"text-[11px] font-medium uppercase tracking-wider text-[#9A9A9A]",children:Q("comments.title")}),(0,e.jsx)("div",{className:"mt-2",children:(0,e.jsx)(D.$,{targetType:"idea",targetUuid:a.uuid,currentUserUuid:c,compact:!0})})]})]})})}),(0,e.jsx)("div",{className:"border-t border-[#F5F2EC] px-6 py-4",children:(0,e.jsx)("div",{className:"flex items-center justify-between gap-3",children:aj?(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)(u.$,{variant:"outline",className:"border-[#E5E0D8]",onClick:aO,disabled:ap,children:Q("common.cancel")}),(0,e.jsx)(u.$,{className:"bg-[#C67A52] hover:bg-[#B56A42] text-white",onClick:aP,disabled:ap||!al.trim(),children:ap?(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)(o.A,{className:"mr-2 h-4 w-4 animate-spin"}),Q("common.saving")]}):(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)(p.A,{className:"mr-2 h-4 w-4"}),Q("ideas.saveChanges")]})})]}):(0,e.jsxs)(e.Fragment,{children:[aJ&&(0,e.jsxs)(u.$,{variant:"outline",className:"shrink-0 border-[#E5E0D8] rounded-md px-4 py-2 text-[13px] font-medium",onClick:()=>Z(!0),children:[(0,e.jsx)(q.A,{className:"mr-2 h-4 w-4"}),a.assignee?Q("common.reassign"):Q("common.assign")]}),(0,e.jsxs)("div",{className:"flex-1 min-w-0",children:[aM&&(0,e.jsx)(u.$,{variant:"outline",size:"sm",className:"border-[#E5E0D8]",onClick:()=>{ae(""),ai(null),ac(!0)},children:Q("elaboration.skipButton")}),aL&&(0,e.jsx)(i(),{href:`/projects/${b}/proposals/new?ideaUuid=${a.uuid}`,children:(0,e.jsxs)(u.$,{className:"bg-[#C67A52] hover:bg-[#B56A42] text-white",children:[(0,e.jsx)(r.A,{className:"mr-2 h-4 w-4"}),Q("proposals.createProposal")]})}),"elaborating"===a.status&&!aK&&!aM&&(0,e.jsx)("span",{className:"text-[11px] text-[#9A9A9A]",children:Q("elaboration.elaborationRequiredHint")})]}),(0,e.jsxs)(B.Lt,{children:[(0,e.jsx)(B.tv,{asChild:!0,children:(0,e.jsx)(u.$,{variant:"outline",size:"icon",className:"shrink-0 h-8 w-8 border-[#E5E0D8] text-[#EF4444] hover:bg-[#FFEBEE] hover:text-[#EF4444] hover:border-[#EF4444]",children:(0,e.jsx)(s.A,{className:"h-4 w-4"})})}),(0,e.jsxs)(B.EO,{children:[(0,e.jsxs)(B.wd,{children:[(0,e.jsx)(B.r7,{children:Q("ideas.deleteIdea")}),(0,e.jsx)(B.$v,{children:Q("ideas.deleteIdeaConfirm",{title:a.title})})]}),(0,e.jsxs)(B.ck,{children:[(0,e.jsx)(B.Zr,{children:Q("common.cancel")}),(0,e.jsx)(B.Rx,{variant:"destructive",onClick:aQ,disabled:at,children:at?(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)(o.A,{className:"mr-2 h-4 w-4 animate-spin"}),Q("common.delete")]}):Q("common.delete")})]})]})]})]})})})]}),(0,e.jsx)(B.Lt,{open:ab,onOpenChange:ac,children:(0,e.jsxs)(B.EO,{children:[(0,e.jsxs)(B.wd,{children:[(0,e.jsx)(B.r7,{children:Q("elaboration.skipConfirmTitle")}),(0,e.jsx)(B.$v,{children:Q("elaboration.skipConfirmDescription")})]}),(0,e.jsxs)("div",{className:"space-y-2 py-2",children:[(0,e.jsx)(x.J,{htmlFor:"skip-reason",className:"text-[13px] font-medium text-[#2C2C2C]",children:Q("elaboration.skipReasonLabel")}),(0,e.jsx)(v.p,{id:"skip-reason",value:ad,onChange:a=>{ae(a.target.value),ah&&ai(null)},placeholder:Q("elaboration.skipReasonPlaceholder"),className:"border-[#E5E0D8] text-sm focus-visible:ring-[#C67A52]",autoFocus:!0}),ah&&(0,e.jsx)("p",{className:"text-xs text-destructive",children:ah})]}),(0,e.jsxs)(B.ck,{children:[(0,e.jsx)(B.Zr,{disabled:af,children:Q("common.cancel")}),(0,e.jsx)(B.Rx,{onClick:a=>{a.preventDefault(),aR()},disabled:af||!ad.trim(),className:"bg-[#C67A52] hover:bg-[#B56A42] text-white",children:af?(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)(o.A,{className:"mr-2 h-4 w-4 animate-spin"}),Q("common.processing")]}):Q("elaboration.skipButton")})]})]})}),(0,e.jsx)(A.lG,{open:av,onOpenChange:aw,children:(0,e.jsxs)(A.Cf,{children:[(0,e.jsxs)(A.c7,{children:[(0,e.jsx)(A.L3,{children:Q("ideas.moveIdeaTitle")}),(0,e.jsx)(A.rr,{children:Q("ideas.moveIdeaDescription")})]}),aF&&(0,e.jsx)("p",{className:"text-xs text-destructive",children:aF}),az?(0,e.jsx)("div",{className:"flex items-center justify-center h-[320px] border border-[#E5E0D8] rounded-lg",children:(0,e.jsx)(o.A,{className:"h-4 w-4 animate-spin text-[#9A9A9A]"})}):(0,e.jsxs)(z.uB,{className:"border border-[#E5E0D8] rounded-lg",filter:(a,b,c)=>{let d=b.toLowerCase();return a.toLowerCase().includes(d)||c?.some(a=>a.toLowerCase().includes(d))?1:0},children:[(0,e.jsx)(z.G7,{placeholder:Q("ideas.searchProjects")}),(0,e.jsxs)(z.oI,{className:"h-[280px]",children:[(0,e.jsx)(z.xL,{children:Q("ideas.noProjectsFound")}),ax.map(a=>(0,e.jsx)(z.L$,{heading:a.name,children:a.projects.map(b=>(0,e.jsxs)(z.h_,{value:b.name,keywords:[a.name],onSelect:()=>aC(b),className:aB?.uuid===b.uuid?"bg-[#C67A52] text-white data-[selected=true]:bg-[#B56A42] data-[selected=true]:text-white":"",children:[(0,e.jsx)(p.A,{className:`mr-2 h-4 w-4 ${aB?.uuid===b.uuid?"opacity-100":"opacity-0"}`}),b.name]},b.uuid))},a.uuid))]})]}),(0,e.jsxs)("div",{className:"flex justify-end gap-3 pt-2",children:[(0,e.jsx)(u.$,{variant:"outline",className:"border-[#E5E0D8]",onClick:()=>aw(!1),disabled:aD,children:Q("common.cancel")}),(0,e.jsx)(u.$,{className:"bg-[#C67A52] hover:bg-[#B56A42] text-white",onClick:aT,disabled:!aB||aD,children:aD?(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)(o.A,{className:"mr-2 h-4 w-4 animate-spin"}),Q("ideas.moving")]}):Q("ideas.moveToProject")})]})]})}),Y&&(0,e.jsx)(I.i,{idea:{uuid:a.uuid,title:a.title,content:a.content,status:a.status,assignee:a.assignee?{type:a.assignee.type,uuid:a.assignee.uuid,name:a.assignee.name}:null},projectUuid:b,currentUserUuid:c,onClose:()=>{Z(!1),h()}})]})}d()}catch(a){d(a)}})},61007:(a,b,c)=>{c.d(b,{A:()=>d});let d=(0,c(91533).A)("lightbulb",[["path",{d:"M15 14c.2-1 .7-1.7 1.5-2.5 1-.9 1.5-2.2 1.5-3.5A6 6 0 0 0 6 8c0 1 .2 2.2 1.5 3.5.7.7 1.3 1.5 1.5 2.5",key:"1gvzjb"}],["path",{d:"M9 18h6",key:"x1upvd"}],["path",{d:"M10 22h4",key:"ceow96"}]])},63413:(a,b,c)=>{c.d(b,{cn:()=>f});var d=c(34269),e=c(42711);function f(...a){return(0,e.QP)((0,d.$)(a))}},74236:(a,b,c)=>{c.d(b,{Wu:()=>i,ZB:()=>h,Zp:()=>f,aR:()=>g});var d=c(10023);c(73426);var e=c(63413);function f({className:a,...b}){return(0,d.jsx)("div",{"data-slot":"card",className:(0,e.cn)("bg-card text-card-foreground flex flex-col gap-6 rounded-xl border py-6 shadow-sm",a),...b})}function g({className:a,...b}){return(0,d.jsx)("div",{"data-slot":"card-header",className:(0,e.cn)("@container/card-header grid auto-rows-min grid-rows-[auto_auto] items-start gap-2 px-6 has-data-[slot=card-action]:grid-cols-[1fr_auto] [.border-b]:pb-6",a),...b})}function h({className:a,...b}){return(0,d.jsx)("div",{"data-slot":"card-title",className:(0,e.cn)("leading-none font-semibold",a),...b})}function i({className:a,...b}){return(0,d.jsx)("div",{"data-slot":"card-content",className:(0,e.cn)("px-6",a),...b})}},94549:(a,b,c)=>{c.d(b,{y:()=>e});var d=c(42377);let e=(0,d.createServerReference)("602890c9422ea07604ec0728f0486c48f543fd709f",d.callServer,void 0,d.findSourceMapURL,"skipElaborationAction")}};
|
|
1
|
+
"use strict";exports.id=5031,exports.ids=[5031],exports.modules={27380:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{D:()=>Q});var e=c(10837),f=c(21968),g=c(1007),h=c(81512),i=c.n(h),j=c(9222),k=c(24364),l=c(87461),m=c(10694),n=c(16235),o=c(86460),p=c(9810),q=c(97443),r=c(65956),s=c(79543),t=c(49599),u=c(42424),v=c(9994),w=c(20170),x=c(2852),y=c(74645),z=c(10297),A=c(11568),B=c(6019),C=c(80251),D=c(56828);c(35568);var E=c(78714),F=c(69391),G=c(41709),H=c(83457),I=c(76605),J=c(17613),K=c(18789),L=c(94549),M=c(76172),N=c(31009),O=c(45148),P=a([D,H]);[D,H]=P.then?(await P)():P;let R={open:"bg-[#FFF3E0] text-[#E65100]",elaborating:"bg-[#E3F2FD] text-[#1976D2]",elaborated:"bg-[#E0F2F1] text-[#00796B]"},S={open:"open",elaborating:"elaborating",elaborated:"elaborated"};function Q({idea:a,projectUuid:b,currentUserUuid:c,isUsedInProposal:d,onClose:h,onDeleted:P}){let Q=(0,j.c)(),T=(0,g.useRouter)(),[U,V]=(0,f.useState)([]),[W,X]=(0,f.useState)(!0),[Y,Z]=(0,f.useState)(!1),[$,_]=(0,f.useState)(null),aa=(0,f.useCallback)(async()=>{let b=await (0,K.z)(a.uuid);b.success&&b.data&&_(b.data)},[a.uuid]);(0,M.eV)("idea",aa);let[ab,ac]=(0,f.useState)(!1),[ad,ae]=(0,f.useState)(""),[af,ag]=(0,f.useState)(!1),[ah,ai]=(0,f.useState)(null),[aj,ak]=(0,f.useState)(!1),[al,am]=(0,f.useState)(a.title),[an,ao]=(0,f.useState)(a.content||""),[ap,aq]=(0,f.useState)(!1),[ar,as]=(0,f.useState)(null),[at,au]=(0,f.useState)(!1),[av,aw]=(0,f.useState)(!1),[ax,ay]=(0,f.useState)([]),[az,aA]=(0,f.useState)(!1),[aB,aC]=(0,f.useState)(null),[aD,aE]=(0,f.useState)(!1),[aF,aG]=(0,f.useState)(null),[aH,aI]=(0,f.useState)(!1),aJ="elaborated"!==a.status,aK="resolved"===a.elaborationStatus,aL=("elaborating"===a.status||"elaborated"===a.status)&&aK,aM="elaborating"===a.status&&(!a.elaborationStatus||"resolved"!==a.elaborationStatus)&&a.assignee?.uuid===c,aN="elaborated"!==a.status,aO=()=>{ak(!1),am(a.title),ao(a.content||""),as(null)},aP=async()=>{if(!al.trim())return void as(Q("ideas.titleRequired"));aq(!0),as(null);let c=await (0,E.J)({ideaUuid:a.uuid,projectUuid:b,title:al.trim(),content:an.trim()||null});aq(!1),c.success?(ak(!1),T.refresh()):as(c.error||Q("ideas.updateFailed"))},aQ=async()=>{au(!0);let c=await (0,F.Z)(a.uuid,b);au(!1),c.success&&(P?.(),h(),T.refresh())},aR=async()=>{if(!ad.trim())return void ai(Q("elaboration.skipReasonRequired"));ag(!0),ai(null);let b=await (0,L.y)(a.uuid,ad.trim());ag(!1),b.success?(ac(!1),ae(""),T.refresh()):ai(b.error||Q("common.genericError"))},aS=async()=>{aw(!0),aC(null),aG(null),aA(!0);try{let[a,c]=await Promise.all([fetch("/api/projects?pageSize=100"),fetch("/api/project-groups")]),[d,e]=await Promise.all([a.json(),c.json()]);if(d.success){let a=d.data.filter(a=>a.uuid!==b).map(a=>({uuid:a.uuid,name:a.name,groupUuid:a.groupUuid})),c=new Map;if(e.success)for(let a of e.data.groups||e.data)c.set(a.uuid,a.name);let f=new Map,g=[];for(let b of a)b.groupUuid&&c.has(b.groupUuid)?(f.has(b.groupUuid)||f.set(b.groupUuid,{uuid:b.groupUuid,name:c.get(b.groupUuid),projects:[]}),f.get(b.groupUuid).projects.push({uuid:b.uuid,name:b.name})):g.push({uuid:b.uuid,name:b.name});let h=[...f.values()];g.length>0&&h.push({uuid:"ungrouped",name:Q("ideas.ungrouped"),projects:g}),ay(h)}}catch{ay([])}aA(!1)},aT=async()=>{if(aB&&!aD){aE(!0),aG(null);try{let b=await fetch(`/api/ideas/${a.uuid}/move`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({targetProjectUuid:aB.uuid})}),c=await b.json();c.success?(aw(!1),h(),T.refresh()):aG("string"==typeof c.error?c.error:c.error?.message||Q("ideas.moveFailed"))}catch{aG(Q("ideas.moveFailed"))}aE(!1)}};return(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)("div",{className:"fixed inset-0 z-40 bg-black/20",onClick:h}),(0,e.jsxs)("div",{className:`fixed right-0 top-14 md:top-0 z-50 flex h-[calc(100%-3.5rem)] md:h-full w-full md:w-[480px] flex-col bg-white shadow-xl border-l border-[#E5E0D8] ${aH?"":"animate-in slide-in-from-right duration-300"}`,children:[(0,e.jsxs)("div",{className:"flex items-center justify-between border-b border-[#F5F2EC] px-6 py-5",children:[(0,e.jsx)("div",{className:"flex-1 min-w-0",children:aj?(0,e.jsx)("h2",{className:"text-base font-semibold text-[#2C2C2C]",children:Q("ideas.editIdea")}):(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)("h2",{className:"text-base font-semibold text-[#2C2C2C] truncate",children:a.title}),(0,e.jsxs)("div",{className:"mt-1.5 flex items-center gap-2",children:[(0,e.jsx)(t.E,{className:R[a.status]||"",children:Q(`status.${S[a.status]||a.status}`)}),(0,e.jsx)("span",{className:"text-xs text-[#9A9A9A]",children:new Date(a.createdAt).toLocaleDateString()})]})]})}),(0,e.jsxs)("div",{className:"flex items-center gap-2 ml-4",children:[aN&&!aj&&(0,e.jsx)(u.$,{variant:"outline",size:"icon",className:"h-8 w-8 border-[#E5E0D8]",onClick:aS,title:Q("ideas.moveToProject"),children:(0,e.jsx)(k.A,{className:"h-4 w-4 text-[#6B6B6B]"})}),aN&&!aj&&(0,e.jsx)(u.$,{variant:"outline",size:"icon",className:"h-8 w-8 border-[#E5E0D8]",onClick:()=>{am(a.title),ao(a.content||""),as(null),ak(!0)},children:(0,e.jsx)(l.A,{className:"h-4 w-4 text-[#6B6B6B]"})}),(0,e.jsx)(u.$,{variant:"outline",size:"icon",className:"h-8 w-8 border-[#E5E0D8]",onClick:aj?aO:h,children:(0,e.jsx)(m.A,{className:"h-4 w-4 text-[#6B6B6B]"})})]})]}),(0,e.jsx)(y.F,{className:"flex-1 min-h-0 [&_[data-slot=scroll-area-viewport]>div]:!block",children:(0,e.jsx)("div",{className:"flex min-h-full flex-col px-6 py-5",children:aj?(0,e.jsxs)("div",{className:"space-y-5",children:[ar&&(0,e.jsx)("div",{className:"rounded-lg bg-destructive/10 p-3 text-sm text-destructive",children:ar}),(0,e.jsxs)("div",{className:"space-y-2",children:[(0,e.jsx)(x.J,{htmlFor:"edit-title",className:"text-[13px] font-medium text-[#2C2C2C]",children:Q("ideas.titleLabel")}),(0,e.jsx)(v.p,{id:"edit-title",value:al,onChange:a=>am(a.target.value),className:"border-[#E5E0D8] text-sm focus-visible:ring-[#C67A52]",autoFocus:!0})]}),(0,e.jsxs)("div",{className:"space-y-2",children:[(0,e.jsx)(x.J,{htmlFor:"edit-content",className:"text-[13px] font-medium text-[#2C2C2C]",children:Q("common.content")}),(0,e.jsx)(w.T,{id:"edit-content",value:an,onChange:a=>ao(a.target.value),rows:8,className:"border-[#E5E0D8] text-sm resize-none focus-visible:ring-[#C67A52]"})]})]}):(0,e.jsxs)(N.P.div,{variants:O.qG,initial:"initial",animate:"animate",children:[(0,e.jsxs)("div",{children:[(0,e.jsx)("label",{className:"text-[11px] font-medium uppercase tracking-wider text-[#9A9A9A]",children:Q("common.assignee")}),(0,e.jsx)("div",{className:"mt-2 flex items-center gap-2.5 rounded-lg bg-[#FAF8F4] p-3",children:a.assignee?(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)(C.eu,{className:"h-7 w-7",children:(0,e.jsx)(C.q5,{className:"agent"===a.assignee.type?"bg-[#C67A52] text-white":"bg-[#E5E0D8] text-[#6B6B6B]",children:"agent"===a.assignee.type?(0,e.jsx)(n.A,{className:"h-3.5 w-3.5"}):a.assignee.name.charAt(0).toUpperCase()})}),(0,e.jsxs)("div",{children:[(0,e.jsx)("div",{className:"text-sm font-medium text-[#2C2C2C]",children:a.assignee.name}),(0,e.jsx)("div",{className:"text-xs text-[#6B6B6B]",children:"agent"===a.assignee.type?`${Q("common.agent")} • ${a.assignee.assignedAt?new Date(a.assignee.assignedAt).toLocaleDateString():""}`:Q("common.user")})]})]}):(0,e.jsx)("span",{className:"text-sm text-[#9A9A9A]",children:Q("common.unassigned")})})]}),$&&$.rounds.length>0&&(0,e.jsx)("div",{className:"mt-5",children:(0,e.jsx)(J.R,{ideaUuid:a.uuid,elaboration:$,onRefresh:async()=>{let b=await (0,K.z)(a.uuid);b.success&&b.data&&_(b.data)}})}),(0,e.jsxs)("div",{className:"mt-5",children:[(0,e.jsx)("label",{className:"text-[11px] font-medium uppercase tracking-wider text-[#9A9A9A]",children:Q("common.content")}),(0,e.jsx)("div",{className:"mt-2",children:a.content?(0,e.jsx)("div",{className:"prose prose-sm max-w-none text-[13px] leading-relaxed text-[#2C2C2C]",children:(0,e.jsx)(G.jH,{plugins:{code:H.a},children:a.content})}):(0,e.jsx)("p",{className:"text-sm italic text-[#9A9A9A]",children:Q("common.noContent")})})]}),(0,e.jsxs)("div",{className:"mt-5 flex-1",children:[(0,e.jsx)("label",{className:"text-[11px] font-medium uppercase tracking-wider text-[#9A9A9A]",children:Q("common.activity")}),(0,e.jsx)("div",{className:"mt-2 space-y-3",children:W?(0,e.jsx)("div",{className:"flex items-center justify-center py-4",children:(0,e.jsx)(o.A,{className:"h-4 w-4 animate-spin text-[#9A9A9A]"})}):0===U.length?(0,e.jsx)("p",{className:"text-sm text-[#9A9A9A] italic",children:Q("common.noActivity")}):U.map(a=>(0,e.jsxs)("div",{className:"flex items-start gap-2.5",children:[(0,e.jsx)("div",{className:"mt-1.5 h-2 w-2 shrink-0 rounded-full bg-[#9A9A9A]"}),(0,e.jsxs)("div",{className:"flex-1",children:[(0,e.jsx)("p",{className:"text-[13px] text-[#2C2C2C]",children:function(a,b){let{action:c,actorName:d}=a;switch(c){case"created":case"idea_created":return b("activity.ideaCreated",{actor:d});case"assigned":case"idea_assigned":return b("activity.ideaAssigned",{actor:d});case"claimed":case"idea_claimed":return b("activity.ideaClaimed",{actor:d});case"released":case"idea_released":return b("activity.ideaReleased",{actor:d});case"status_changed":case"idea_status_changed":return b("activity.ideaStatusChanged",{actor:d});case"elaboration_started":return b("activity.elaborationStarted",{actor:d});case"elaboration_answered":return b("activity.elaborationAnswered",{actor:d});case"elaboration_skipped":return b("activity.elaborationSkipped",{actor:d});case"elaboration_resolved":return b("activity.elaborationResolved",{actor:d});case"elaboration_followup":return b("activity.elaborationFollowup",{actor:d});default:return`${d}: ${c}`}}(a,Q)}),(0,e.jsx)("p",{className:"text-[11px] text-[#9A9A9A]",children:function(a,b){let c=new Date(a),d=new Date().getTime()-c.getTime(),e=Math.floor(d/6e4),f=Math.floor(d/36e5),g=Math.floor(d/864e5);return e<1?b("time.justNow"):e<60?b("time.minutesAgo",{minutes:e}):f<24?b("time.hoursAgo",{hours:f}):g<7?b("time.daysAgo",{days:g}):c.toLocaleDateString()}(a.createdAt,Q)})]})]},a.uuid))})]}),(0,e.jsxs)("div",{className:"mt-5",children:[(0,e.jsx)("label",{className:"text-[11px] font-medium uppercase tracking-wider text-[#9A9A9A]",children:Q("comments.title")}),(0,e.jsx)("div",{className:"mt-2",children:(0,e.jsx)(D.$,{targetType:"idea",targetUuid:a.uuid,currentUserUuid:c,compact:!0})})]})]})})}),(0,e.jsx)("div",{className:"border-t border-[#F5F2EC] px-6 py-4",children:(0,e.jsx)("div",{className:"flex items-center justify-between gap-3",children:aj?(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)(u.$,{variant:"outline",className:"border-[#E5E0D8]",onClick:aO,disabled:ap,children:Q("common.cancel")}),(0,e.jsx)(u.$,{className:"bg-[#C67A52] hover:bg-[#B56A42] text-white",onClick:aP,disabled:ap||!al.trim(),children:ap?(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)(o.A,{className:"mr-2 h-4 w-4 animate-spin"}),Q("common.saving")]}):(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)(p.A,{className:"mr-2 h-4 w-4"}),Q("ideas.saveChanges")]})})]}):(0,e.jsxs)(e.Fragment,{children:[aJ&&(0,e.jsxs)(u.$,{variant:"outline",className:"shrink-0 border-[#E5E0D8] rounded-md px-4 py-2 text-[13px] font-medium",onClick:()=>Z(!0),children:[(0,e.jsx)(q.A,{className:"mr-2 h-4 w-4"}),a.assignee?Q("common.reassign"):Q("common.assign")]}),(0,e.jsxs)("div",{className:"flex-1 min-w-0",children:[aM&&(0,e.jsx)(u.$,{variant:"outline",size:"sm",className:"border-[#E5E0D8]",onClick:()=>{ae(""),ai(null),ac(!0)},children:Q("elaboration.skipButton")}),aL&&(0,e.jsx)(i(),{href:`/projects/${b}/proposals/new?ideaUuid=${a.uuid}`,children:(0,e.jsxs)(u.$,{className:"bg-[#C67A52] hover:bg-[#B56A42] text-white",children:[(0,e.jsx)(r.A,{className:"mr-2 h-4 w-4"}),Q("proposals.createProposal")]})}),"elaborating"===a.status&&!aK&&!aM&&(0,e.jsx)("span",{className:"text-[11px] text-[#9A9A9A]",children:Q("elaboration.elaborationRequiredHint")})]}),(0,e.jsxs)(B.Lt,{children:[(0,e.jsx)(B.tv,{asChild:!0,children:(0,e.jsx)(u.$,{variant:"outline",size:"icon",className:"shrink-0 h-8 w-8 border-[#E5E0D8] text-[#EF4444] hover:bg-[#FFEBEE] hover:text-[#EF4444] hover:border-[#EF4444]",children:(0,e.jsx)(s.A,{className:"h-4 w-4"})})}),(0,e.jsxs)(B.EO,{children:[(0,e.jsxs)(B.wd,{children:[(0,e.jsx)(B.r7,{children:Q("ideas.deleteIdea")}),(0,e.jsx)(B.$v,{children:Q("ideas.deleteIdeaConfirm",{title:a.title})})]}),(0,e.jsxs)(B.ck,{children:[(0,e.jsx)(B.Zr,{children:Q("common.cancel")}),(0,e.jsx)(B.Rx,{variant:"destructive",onClick:aQ,disabled:at,children:at?(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)(o.A,{className:"mr-2 h-4 w-4 animate-spin"}),Q("common.delete")]}):Q("common.delete")})]})]})]})]})})})]}),(0,e.jsx)(B.Lt,{open:ab,onOpenChange:ac,children:(0,e.jsxs)(B.EO,{children:[(0,e.jsxs)(B.wd,{children:[(0,e.jsx)(B.r7,{children:Q("elaboration.skipConfirmTitle")}),(0,e.jsx)(B.$v,{children:Q("elaboration.skipConfirmDescription")})]}),(0,e.jsxs)("div",{className:"space-y-2 py-2",children:[(0,e.jsx)(x.J,{htmlFor:"skip-reason",className:"text-[13px] font-medium text-[#2C2C2C]",children:Q("elaboration.skipReasonLabel")}),(0,e.jsx)(v.p,{id:"skip-reason",value:ad,onChange:a=>{ae(a.target.value),ah&&ai(null)},placeholder:Q("elaboration.skipReasonPlaceholder"),className:"border-[#E5E0D8] text-sm focus-visible:ring-[#C67A52]",autoFocus:!0}),ah&&(0,e.jsx)("p",{className:"text-xs text-destructive",children:ah})]}),(0,e.jsxs)(B.ck,{children:[(0,e.jsx)(B.Zr,{disabled:af,children:Q("common.cancel")}),(0,e.jsx)(B.Rx,{onClick:a=>{a.preventDefault(),aR()},disabled:af||!ad.trim(),className:"bg-[#C67A52] hover:bg-[#B56A42] text-white",children:af?(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)(o.A,{className:"mr-2 h-4 w-4 animate-spin"}),Q("common.processing")]}):Q("elaboration.skipButton")})]})]})}),(0,e.jsx)(A.lG,{open:av,onOpenChange:aw,children:(0,e.jsxs)(A.Cf,{children:[(0,e.jsxs)(A.c7,{children:[(0,e.jsx)(A.L3,{children:Q("ideas.moveIdeaTitle")}),(0,e.jsx)(A.rr,{children:Q("ideas.moveIdeaDescription")})]}),aF&&(0,e.jsx)("p",{className:"text-xs text-destructive",children:aF}),az?(0,e.jsx)("div",{className:"flex items-center justify-center h-[320px] border border-[#E5E0D8] rounded-lg",children:(0,e.jsx)(o.A,{className:"h-4 w-4 animate-spin text-[#9A9A9A]"})}):(0,e.jsxs)(z.uB,{className:"border border-[#E5E0D8] rounded-lg",filter:(a,b,c)=>{let d=b.toLowerCase();return a.toLowerCase().includes(d)||c?.some(a=>a.toLowerCase().includes(d))?1:0},children:[(0,e.jsx)(z.G7,{placeholder:Q("ideas.searchProjects")}),(0,e.jsxs)(z.oI,{className:"h-[280px]",children:[(0,e.jsx)(z.xL,{children:Q("ideas.noProjectsFound")}),ax.map(a=>(0,e.jsx)(z.L$,{heading:a.name,children:a.projects.map(b=>(0,e.jsxs)(z.h_,{value:b.name,keywords:[a.name],onSelect:()=>aC(b),className:aB?.uuid===b.uuid?"bg-[#C67A52] text-white data-[selected=true]:bg-[#B56A42] data-[selected=true]:text-white":"",children:[(0,e.jsx)(p.A,{className:`mr-2 h-4 w-4 ${aB?.uuid===b.uuid?"opacity-100":"opacity-0"}`}),b.name]},b.uuid))},a.uuid))]})]}),(0,e.jsxs)("div",{className:"flex justify-end gap-3 pt-2",children:[(0,e.jsx)(u.$,{variant:"outline",className:"border-[#E5E0D8]",onClick:()=>aw(!1),disabled:aD,children:Q("common.cancel")}),(0,e.jsx)(u.$,{className:"bg-[#C67A52] hover:bg-[#B56A42] text-white",onClick:aT,disabled:!aB||aD,children:aD?(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)(o.A,{className:"mr-2 h-4 w-4 animate-spin"}),Q("ideas.moving")]}):Q("ideas.moveToProject")})]})]})}),Y&&(0,e.jsx)(I.i,{idea:{uuid:a.uuid,title:a.title,content:a.content,status:a.status,assignee:a.assignee?{type:a.assignee.type,uuid:a.assignee.uuid,name:a.assignee.name}:null},projectUuid:b,currentUserUuid:c,onClose:()=>{Z(!1),h()}})]})}d()}catch(a){d(a)}})},54349:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{Hu:()=>n,eT:()=>m,fg:()=>l,uA:()=>q});var e=c(52618),f=c(76872),g=c(90494),h=c(88437),i=c(42558),j=c(65582),k=a([e,f,g,h]);async function l({companyUuid:a,targetType:b,targetUuid:c,skip:d,take:g}){if(!await (0,f._9)(b,c,a))return{comments:[],total:0};let h={companyUuid:a,targetType:b,targetUuid:c},[i,j]=await Promise.all([e.z.comment.findMany({where:h,skip:d,take:g,orderBy:{createdAt:"asc"},select:{uuid:!0,targetType:!0,targetUuid:!0,content:!0,authorType:!0,authorUuid:!0,createdAt:!0,updatedAt:!0}}),e.z.comment.count({where:h})]);return{comments:await Promise.all(i.map(async a=>{let b=await (0,f.lR)(a.authorType,a.authorUuid);return{uuid:a.uuid,targetType:a.targetType,targetUuid:a.targetUuid,content:a.content,author:{type:a.authorType,uuid:a.authorUuid,name:b??"Unknown"},createdAt:a.createdAt.toISOString(),updatedAt:a.updatedAt.toISOString()}})),total:j}}async function m({companyUuid:a,targetType:b,targetUuid:c,content:d,authorType:g,authorUuid:h}){if(!await (0,f._9)(b,c,a))throw Error(`Target ${b} with UUID ${c} not found`);let k=await e.z.comment.create({data:{companyUuid:a,targetType:b,targetUuid:c,content:d,authorType:g,authorUuid:h},select:{uuid:!0,targetType:!0,targetUuid:!0,content:!0,authorType:!0,authorUuid:!0,createdAt:!0,updatedAt:!0}}),l=await (0,f.lR)(k.authorType,k.authorUuid);return n(b,c).then(d=>{d&&i.B.emitChange({companyUuid:a,projectUuid:d,entityType:b,entityUuid:c,action:"updated",actorUuid:h})}).catch(()=>{}),p(a,b,c,k.uuid,d,g,h).catch(a=>j.A.error({err:a},"Failed to process comment mentions")),{uuid:k.uuid,targetType:k.targetType,targetUuid:k.targetUuid,content:k.content,author:{type:k.authorType,uuid:k.authorUuid,name:l??"Unknown"},createdAt:k.createdAt.toISOString(),updatedAt:k.updatedAt.toISOString()}}async function n(a,b,c){let d=c?{companyUuid:c}:{};switch(a){case"task":{let a=await e.z.task.findFirst({where:{uuid:b,...d},select:{projectUuid:!0}});return a?.projectUuid??null}case"idea":{let a=await e.z.idea.findFirst({where:{uuid:b,...d},select:{projectUuid:!0}});return a?.projectUuid??null}case"proposal":{let a=await e.z.proposal.findFirst({where:{uuid:b,...d},select:{projectUuid:!0}});return a?.projectUuid??null}case"document":{let a=await e.z.document.findFirst({where:{uuid:b,...d},select:{projectUuid:!0}});return a?.projectUuid??null}default:return null}}async function o(a,b){switch(a){case"task":{let a=await e.z.task.findUnique({where:{uuid:b},select:{title:!0}});return a?.title??"Unknown Task"}case"idea":{let a=await e.z.idea.findUnique({where:{uuid:b},select:{title:!0}});return a?.title??"Unknown Idea"}case"proposal":{let a=await e.z.proposal.findUnique({where:{uuid:b},select:{title:!0}});return a?.title??"Unknown Proposal"}case"document":{let a=await e.z.document.findUnique({where:{uuid:b},select:{title:!0}});return a?.title??"Unknown Document"}default:return"Unknown"}}async function p(a,b,c,d,e,f,i){let j=g.Xs(e);if(0===j.length)return;let k=await n(b,c);if(!k)return;let l=await o(b,c);for(let m of(await g.AM({companyUuid:a,sourceType:"comment",sourceUuid:d,content:e,actorType:f,actorUuid:i,projectUuid:k,entityTitle:l}),j))(m.type!==f||m.uuid!==i)&&await h.createActivity({companyUuid:a,projectUuid:k,targetType:b,targetUuid:c,actorType:f,actorUuid:i,action:"mentioned",value:{mentionedType:m.type,mentionedUuid:m.uuid,mentionedName:m.displayName,sourceType:"comment",sourceUuid:d}})}async function q(a,b,c){if(0===c.length)return{};let d=await e.z.comment.groupBy({by:["targetUuid"],where:{companyUuid:a,targetType:b,targetUuid:{in:c}},_count:{targetUuid:!0}}),f={};for(let a of c)f[a]=0;for(let a of d)f[a.targetUuid]=a._count.targetUuid;return f}[e,f,g,h]=k.then?(await k)():k,d()}catch(a){d(a)}})},61007:(a,b,c)=>{c.d(b,{A:()=>d});let d=(0,c(91533).A)("lightbulb",[["path",{d:"M15 14c.2-1 .7-1.7 1.5-2.5 1-.9 1.5-2.2 1.5-3.5A6 6 0 0 0 6 8c0 1 .2 2.2 1.5 3.5.7.7 1.3 1.5 1.5 2.5",key:"1gvzjb"}],["path",{d:"M9 18h6",key:"x1upvd"}],["path",{d:"M10 22h4",key:"ceow96"}]])},63413:(a,b,c)=>{c.d(b,{cn:()=>f});var d=c(34269),e=c(42711);function f(...a){return(0,e.QP)((0,d.$)(a))}},74236:(a,b,c)=>{c.d(b,{Wu:()=>i,ZB:()=>h,Zp:()=>f,aR:()=>g});var d=c(10023);c(73426);var e=c(63413);function f({className:a,...b}){return(0,d.jsx)("div",{"data-slot":"card",className:(0,e.cn)("bg-card text-card-foreground flex flex-col gap-6 rounded-xl border py-6 shadow-sm",a),...b})}function g({className:a,...b}){return(0,d.jsx)("div",{"data-slot":"card-header",className:(0,e.cn)("@container/card-header grid auto-rows-min grid-rows-[auto_auto] items-start gap-2 px-6 has-data-[slot=card-action]:grid-cols-[1fr_auto] [.border-b]:pb-6",a),...b})}function h({className:a,...b}){return(0,d.jsx)("div",{"data-slot":"card-title",className:(0,e.cn)("leading-none font-semibold",a),...b})}function i({className:a,...b}){return(0,d.jsx)("div",{"data-slot":"card-content",className:(0,e.cn)("px-6",a),...b})}},94549:(a,b,c)=>{c.d(b,{y:()=>e});var d=c(42377);let e=(0,d.createServerReference)("602890c9422ea07604ec0728f0486c48f543fd709f",d.callServer,void 0,d.findSourceMapURL,"skipElaborationAction")}};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";exports.id=5173,exports.ids=[5173],exports.modules={11573:(a,b,c)=>{c.d(b,{j:()=>e});let d=["#E06C75","#E5C07B","#98C379","#56B6C2","#61AFEF","#C678DD","#D19A66","#BE5046","#7EC8E3","#C3E88D","#F78C6C","#A9DC76"];function e(a){let b=function(a){let b=0;for(let c=0;c<a.length;c++)b=(b<<5)-b+a.charCodeAt(c)|0;return Math.abs(b)}(a)%d.length;return d[b]}},22727:(a,b,c)=>{c.d(b,{D:()=>h});var d=c(10837),e=c(90061),f=c(11573),g=c(16235);function h({entityType:a,entityUuid:b,subEntityType:c,subEntityUuid:g,children:h,badgeInside:j}){let{getPresence:k}=(0,e.xQ)(),l=k(a,b,c,g),m=l.length>0,n=m&&l.some(a=>"mutate"===a.action),o=m?n?l.find(a=>"mutate"===a.action):l[l.length-1]:null,p=o?(0,f.j)(o.agentName):"transparent";return(0,d.jsxs)("div",{className:"relative",style:m?{outline:`2px ${n?"solid":"dashed"} ${p}`,outlineOffset:"-2px",borderRadius:"var(--radius)"}:void 0,children:[m&&(0,d.jsxs)("div",{className:`absolute flex gap-1 z-10 justify-end ${j?"top-0.5 right-1.5 max-w-[70%]":"-top-2.5 right-2 max-w-[80%]"}`,children:[l.slice(0,3).map(a=>(0,d.jsx)(i,{entry:a},a.agentUuid)),l.length>3&&(0,d.jsxs)("span",{className:"inline-flex items-center px-1.5 py-0.5 rounded-full text-[10px] font-medium text-white bg-gray-500 whitespace-nowrap",children:["+",l.length-3]})]}),h]})}function i({entry:a}){let b=(0,f.j)(a.agentName);return(0,d.jsxs)("span",{className:"inline-flex items-center gap-1 px-1.5 py-0.5 rounded-full text-[10px] font-medium text-white whitespace-nowrap animate-in fade-in duration-300 ease-out sm:text-[11px] sm:px-2",style:{backgroundColor:b},children:[(0,d.jsx)(g.A,{className:"h-2.5 w-2.5"}),a.agentName]})}},24433:(a,b,c)=>{c.d(b,{c:()=>n});var d=c(10837),e=c(21968),f=c(87864),g=c(45150),h=c(49101),i=c(96307);let j=h.A.extend({addAttributes(){return{...this.parent?.(),mentionType:{default:"user",parseHTML:a=>a.getAttribute("data-mention-type")||"user",renderHTML:a=>({"data-mention-type":a.mentionType||"user"})}}}});function k(a){let b=a.getJSON();return b.content?b.content.map(a=>(function a(b){if("mention"===b.type){let a=b.attrs;return a?`@[${a.label||a.id}](${a.mentionType||"user"}:${a.id})`:""}if("text"===b.type)return b.text||"";if("hardBreak"===b.type)return"\n";let c=b.content;return c?c.map(a).join(""):""})(a)).join("\n"):""}function l(a){if(!a)return{type:"doc",content:[{type:"paragraph"}]};let b=/@\[([^\]]+)\]\((user|agent):([a-f0-9-]+)\)/g;return{type:"doc",content:a.split("\n").map(a=>{let c,d=[],e=0,f=RegExp(b.source,"g");for(;null!==(c=f.exec(a));)c.index>e&&d.push({type:"text",text:a.slice(e,c.index)}),d.push({type:"mention",attrs:{id:c[3],label:c[1],mentionType:c[2]}}),e=c.index+c[0].length;return e<a.length&&d.push({type:"text",text:a.slice(e)}),{type:"paragraph",content:d.length>0?d:void 0}})}}function m(a,b,c,d,e){if(e.innerHTML="",b){let a=document.createElement("div");a.className="flex items-center justify-center py-3 px-4",a.innerHTML='<div class="h-4 w-4 animate-spin rounded-full border-2 border-[#9A9A9A] border-t-transparent"></div>',e.appendChild(a);return}if(0===a.length){let a=document.createElement("div");a.className="py-2 px-3 text-xs text-[#9A9A9A]",a.textContent="No results",e.appendChild(a);return}let f=document.createElement("div");f.className="py-1";let g=0,h=a=>{c({id:a.uuid,label:a.name,mentionType:a.type})},i=()=>{f.innerHTML="",a.forEach((a,b)=>{let c=document.createElement("button");c.type="button",c.className=`flex w-full items-center gap-2.5 px-3 py-1.5 text-left text-sm transition-colors ${b===g?"bg-[#FAF8F4] text-[#2C2C2C]":"text-[#6B6B6B] hover:bg-[#FAF8F4]"}`,c.onclick=()=>h(a);let d=document.createElement("div");d.className=`flex h-6 w-6 shrink-0 items-center justify-center rounded-full ${"agent"===a.type?"bg-[#C67A52] text-white":"bg-[#E5E0D8] text-[#6B6B6B]"}`,d.innerHTML="agent"===a.type?'<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 8V4H8"/><rect width="16" height="12" x="4" y="8" rx="2"/><path d="M2 14h2"/><path d="M20 14h2"/><path d="M15 13v2"/><path d="M9 13v2"/></svg>':'<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2"/><circle cx="12" cy="7" r="4"/></svg>';let e=document.createElement("div");e.className="min-w-0 flex-1";let i=document.createElement("div");if(i.className="truncate text-xs font-medium",i.textContent=a.name,e.appendChild(i),a.email){let b=document.createElement("div");b.className="truncate text-[10px] text-[#9A9A9A]",b.textContent=a.email,e.appendChild(b)}if("agent"===a.type&&a.roles&&a.roles.length>0){let b=document.createElement("div");b.className="truncate text-[10px] text-[#9A9A9A]",b.textContent=a.roles.join(", "),e.appendChild(b)}c.appendChild(d),c.appendChild(e),f.appendChild(c)})};i(),e.appendChild(f),d.current={onKeyDown:({event:b})=>"ArrowUp"===b.key?(g=g<=0?a.length-1:g-1,i(),!0):"ArrowDown"===b.key?(g=g>=a.length-1?0:g+1,i(),!0):"Enter"===b.key?(a[g]&&h(a[g]),!0):"Escape"===b.key}}let n=(0,e.forwardRef)(({value:a,onChange:b,placeholder:c,className:h,disabled:n,onSubmit:o},p)=>{let q=(0,e.useRef)([]),r=(0,e.useRef)(!1),s=(0,e.useRef)(null),t=(0,e.useRef)(null),u=(0,e.useRef)(null),[,v]=(0,e.useState)(0),w=(0,e.useRef)(!1),x=function(a,b){let c=(0,e.useRef)(null),d=(0,e.useRef)(a);return d.current=a,(0,e.useCallback)(a=>{c.current&&clearTimeout(c.current),c.current=setTimeout(()=>d.current(a),250)},[250])}((0,e.useCallback)(async a=>{r.current=!0,v(a=>a+1);try{let b=await fetch(`/api/mentionables?q=${encodeURIComponent(a)}&limit=10`);if(b.ok){let a=await b.json();a.success&&(q.current=a.data)}}catch{q.current=[]}finally{r.current=!1,v(a=>a+1)}},[]),250);(0,e.useEffect)(()=>{t.current&&u.current&&m(q.current,r.current,u.current,s,t.current)});let y=(0,f.hG)({immediatelyRender:!1,extensions:[g.A.configure({heading:!1,blockquote:!1,codeBlock:!1,bulletList:!1,orderedList:!1,listItem:!1,horizontalRule:!1}),j.configure({HTMLAttributes:{class:"text-blue-600 font-medium"},renderText:({node:a})=>`@${a.attrs.label??a.attrs.id}`,suggestion:{char:"@",allowSpaces:!0,items:({query:a})=>(x(a),q.current),render:()=>({onStart:a=>{let b=document.createElement("div");if(b.className="z-[100] rounded-md border border-[#E5E0D8] bg-white shadow-md min-w-[200px] max-w-[300px] overflow-hidden",t.current=b,u.current=a.command,a.clientRect){let c="function"==typeof a.clientRect?a.clientRect():a.clientRect;c&&(b.style.position="fixed",b.style.left=`${c.left}px`,window.innerHeight-c.bottom<220?b.style.bottom=`${window.innerHeight-c.top+4}px`:b.style.top=`${c.bottom+4}px`)}document.body.appendChild(b),m(q.current,r.current,a.command,s,b)},onUpdate:a=>{if(u.current=a.command,t.current&&a.clientRect){let b="function"==typeof a.clientRect?a.clientRect():a.clientRect;b&&(t.current.style.left=`${b.left}px`,window.innerHeight-b.bottom<220?(t.current.style.top="",t.current.style.bottom=`${window.innerHeight-b.top+4}px`):(t.current.style.bottom="",t.current.style.top=`${b.bottom+4}px`))}t.current&&m(q.current,r.current,a.command,s,t.current)},onKeyDown:a=>!!s.current&&s.current.onKeyDown(a),onExit:()=>{t.current?.remove(),t.current=null,u.current=null,q.current=[],r.current=!1}})}})],content:l(a),editable:!n,editorProps:{attributes:{class:(0,i.cn)("min-h-[36px] max-h-[120px] overflow-y-auto px-3 py-2 text-sm outline-none","prose prose-sm max-w-none [&_p]:my-0"),"data-placeholder":c||""},handleKeyDown:(a,b)=>"Enter"===b.key&&!b.shiftKey&&!t.current&&!!o&&(b.preventDefault(),o(),!0)},onUpdate:({editor:a})=>{w.current=!0,b(k(a))}});return(0,e.useEffect)(()=>{if(!y||w.current){w.current=!1;return}k(y)!==a&&y.commands.setContent(l(a))},[a,y]),(0,e.useEffect)(()=>{y&&y.setEditable(!n)},[n,y]),(0,e.useImperativeHandle)(p,()=>({focus:()=>y?.commands.focus(),clear:()=>{y?.commands.clearContent(),b("")}})),(0,d.jsxs)("div",{className:(0,i.cn)("relative rounded-md border border-input bg-transparent shadow-xs transition-[color,box-shadow]","focus-within:border-ring focus-within:ring-ring/50 focus-within:ring-[3px]",n&&"cursor-not-allowed opacity-50",h),children:[(0,d.jsx)(f.$Z,{editor:y}),(0,d.jsx)("style",{children:`
|
|
2
|
+
.tiptap p.is-editor-empty:first-child::before {
|
|
3
|
+
content: attr(data-placeholder);
|
|
4
|
+
color: #9A9A9A;
|
|
5
|
+
float: left;
|
|
6
|
+
height: 0;
|
|
7
|
+
pointer-events: none;
|
|
8
|
+
}
|
|
9
|
+
.tiptap .mention {
|
|
10
|
+
color: #2563eb;
|
|
11
|
+
font-weight: 500;
|
|
12
|
+
}
|
|
13
|
+
`})]})});n.displayName="MentionEditor"},35198:(a,b,c)=>{c.d(b,{BT:()=>i,Wu:()=>k,X9:()=>j,ZB:()=>h,Zp:()=>f,aR:()=>g,wL:()=>l});var d=c(10837);c(21968);var e=c(96307);function f({className:a,...b}){return(0,d.jsx)("div",{"data-slot":"card",className:(0,e.cn)("bg-card text-card-foreground flex flex-col gap-6 rounded-xl border py-6 shadow-sm",a),...b})}function g({className:a,...b}){return(0,d.jsx)("div",{"data-slot":"card-header",className:(0,e.cn)("@container/card-header grid auto-rows-min grid-rows-[auto_auto] items-start gap-2 px-6 has-data-[slot=card-action]:grid-cols-[1fr_auto] [.border-b]:pb-6",a),...b})}function h({className:a,...b}){return(0,d.jsx)("div",{"data-slot":"card-title",className:(0,e.cn)("leading-none font-semibold",a),...b})}function i({className:a,...b}){return(0,d.jsx)("div",{"data-slot":"card-description",className:(0,e.cn)("text-muted-foreground text-sm",a),...b})}function j({className:a,...b}){return(0,d.jsx)("div",{"data-slot":"card-action",className:(0,e.cn)("col-start-2 row-span-2 row-start-1 self-start justify-self-end",a),...b})}function k({className:a,...b}){return(0,d.jsx)("div",{"data-slot":"card-content",className:(0,e.cn)("px-6",a),...b})}function l({className:a,...b}){return(0,d.jsx)("div",{"data-slot":"card-footer",className:(0,e.cn)("flex items-center px-6 [.border-t]:pt-6",a),...b})}},56828:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{$:()=>x});var e=c(10837),f=c(21968),g=c(9222),h=c(97443),i=c(86460),j=c(24714),k=c(33091),l=c(16235),m=c(42424),n=c(80251),o=c(24433),p=c(75620),q=c(78988),r=c(82831),s=c(76172),t=c(22727),u=c(11573),v=c(76549),w=a([r]);function x({targetType:a,targetUuid:b,currentUserUuid:c,onCountChange:d,compact:l=!1}){let r=(0,g.c)(),[u,w]=(0,f.useState)(""),[x,z]=(0,f.useState)([]),[A,B]=(0,f.useState)(!0),[C,D]=(0,f.useState)(null),[E,F]=(0,f.useState)(!1),G=(0,f.useRef)(null),H=l?"h-6 w-6":"h-[30px] w-[30px]",I=l?"gap-2":"gap-2.5",J=l?"h-3 w-3":"h-[15px] w-[15px]",K=(0,f.useCallback)(async()=>{B(!0),D(null);let c=await (0,p.d)(a,b);c.success?z(c.comments):D(c.error),B(!1)},[a,b]);(0,s.w0)(a,b,d=>{c&&d.actorUuid===c||(0,p.d)(a,b).then(a=>{a.success&&z(a.comments)})});let L=async()=>{if(!u.trim()||E)return;F(!0);let c=await (0,q.s)(a,b,u);F(!1),c.success?(z(a=>[...a,c.comment]),w(""),G.current?.clear()):v.oR.error(c.error)},M=[...x].reverse();return(0,e.jsx)(t.D,{entityType:a,entityUuid:b,subEntityType:"comment",children:(0,e.jsxs)("div",{className:"flex flex-col gap-0",children:[(0,e.jsxs)("div",{className:`flex items-center ${I} pb-3 border-b border-[#F0EDE8]`,children:[(0,e.jsx)(n.eu,{className:`${l?"h-6 w-6":"h-7 w-7"} shrink-0`,children:(0,e.jsx)(n.q5,{className:"bg-[#E5E0D8] text-[#6B6B6B]",children:(0,e.jsx)(h.A,{className:`${l?"h-3 w-3":"h-3.5 w-3.5"}`})})}),(0,e.jsx)("div",{className:"flex-1 min-w-0",children:(0,e.jsx)(o.c,{ref:G,value:u,onChange:w,onSubmit:L,placeholder:r("comments.addComment"),className:"border border-[#E5E0D8] bg-white text-sm rounded-lg",disabled:E})}),(0,e.jsx)(m.$,{size:"sm",className:"shrink-0 gap-1 bg-[#E07A5F] text-white hover:bg-[#D06A4F]",disabled:!u.trim()||E,onClick:L,children:E?(0,e.jsx)(i.A,{className:"h-3.5 w-3.5 animate-spin"}):(0,e.jsx)(j.A,{className:"h-3.5 w-3.5"})})]}),(0,e.jsx)("div",{children:A?(0,e.jsx)("div",{className:"flex items-center justify-center py-8",children:(0,e.jsx)(i.A,{className:"h-4 w-4 animate-spin text-[#9A9A9A]"})}):C?(0,e.jsxs)("div",{className:"flex flex-col items-center gap-2 py-8 text-sm text-[#9A9A9A]",children:[(0,e.jsx)(k.A,{className:"h-4 w-4"}),(0,e.jsx)("p",{children:r("comments.loadError")}),(0,e.jsx)(m.$,{variant:"outline",size:"sm",onClick:K,children:r("comments.retry")})]}):0===M.length?(0,e.jsx)("p",{className:"py-8 text-center text-sm text-[#9A9A9A] italic",children:r("comments.noComments")}):M.map(a=>(0,e.jsx)(y,{comment:a,compact:l,avatarSize:H,gap:I,iconSize:J,t:r},a.uuid))})]})})}function y({comment:a,compact:b,avatarSize:c,gap:d,iconSize:g,t:h}){let[i,j]=(0,f.useState)(!1),k="agent"===a.author.type,o=k?(0,u.j)(a.author.name):null,p=a.content.length>200,q=o?`${o}18`:void 0;return(0,e.jsxs)("div",{className:`flex ${d} py-3 border-b border-[#F0EDE8] last:border-b-0`,children:[(0,e.jsx)(n.eu,{className:`${c} shrink-0`,children:(0,e.jsx)(n.q5,{style:k?{backgroundColor:q,color:o??void 0}:void 0,className:k?"":"bg-[#E5E0D8] text-[#6B6B6B] text-[11px] font-medium",children:k?(0,e.jsx)(l.A,{className:g}):a.author.name.charAt(0).toUpperCase()})}),(0,e.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,e.jsxs)("div",{className:"flex items-center gap-1.5 flex-wrap",children:[(0,e.jsx)("span",{className:`${b?"text-xs":"text-[13px]"} font-semibold text-[#1A1A1A]`,children:a.author.name}),(0,e.jsx)("span",{style:k?{backgroundColor:q,color:o??void 0}:void 0,className:`inline-flex items-center rounded px-1.5 py-px text-[9px] font-medium ${k?"":"bg-[#F0EDE8] text-[#6B6B6B]"}`,children:h(k?"comments.roleAgent":"comments.roleHuman")}),(0,e.jsx)("span",{className:"text-[11px] text-[#BFBFBF]",children:function(a,b){let c=new Date(a),d=new Date().getTime()-c.getTime(),e=Math.floor(d/6e4),f=Math.floor(d/36e5),g=Math.floor(d/864e5);return e<1?b("time.justNow"):e<60?b("time.minutesAgo",{minutes:e}):f<24?b("time.hoursAgo",{hours:f}):g<7?b("time.daysAgo",{days:g}):c.toLocaleDateString()}(a.createdAt,h)})]}),k&&a.author.owner&&(0,e.jsx)("div",{className:"flex items-center gap-1 mt-0.5",children:(0,e.jsx)("span",{className:"text-[11px] text-[#A3A3A3] italic",children:h("comments.onBehalfOf",{name:a.author.owner.name})})}),(0,e.jsx)("div",{className:`mt-1 ${b?"text-xs":"text-[13px]"} leading-relaxed text-[#3D3D3D] max-w-none [&_h1]:text-sm [&_h1]:font-semibold [&_h1]:mt-2 [&_h1]:mb-1 [&_h2]:text-[13px] [&_h2]:font-semibold [&_h2]:mt-2 [&_h2]:mb-1 [&_h3]:text-[13px] [&_h3]:font-semibold [&_h3]:mt-1.5 [&_h3]:mb-0.5 [&_p]:my-1 [&_ul]:my-1 [&_ol]:my-1 [&_li]:my-0.5`,children:p&&!i?(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)(r.z7,{children:a.content.slice(0,200)+"..."}),(0,e.jsx)(m.$,{variant:"link",size:"sm",onClick:()=>j(!0),className:"h-auto p-0 text-[#E07A5F] text-xs font-medium mt-1",children:h("comments.showMore")})]}):(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)(r.z7,{children:a.content}),p&&(0,e.jsx)(m.$,{variant:"link",size:"sm",onClick:()=>j(!1),className:"h-auto p-0 text-[#E07A5F] text-xs font-medium mt-1",children:h("comments.showLess")})]})})]})]})}r=(w.then?(await w)():w)[0],d()}catch(a){d(a)}})},75620:(a,b,c)=>{c.d(b,{d:()=>e});var d=c(42377);let e=(0,d.createServerReference)("60aaaf09814b29767a23a36b59555df07282407555",d.callServer,void 0,d.findSourceMapURL,"getCommentsAction")},78988:(a,b,c)=>{c.d(b,{s:()=>e});var d=c(42377);let e=(0,d.createServerReference)("70b2bba30986179182b8c1ff03c83ce22ac6c8090b",d.callServer,void 0,d.findSourceMapURL,"createCommentAction")},80251:(a,b,c)=>{c.d(b,{eu:()=>g,q5:()=>h});var d=c(10837);c(21968);var e=c(14672),f=c(96307);function g({className:a,size:b="default",...c}){return(0,d.jsx)(e.Root,{"data-slot":"avatar","data-size":b,className:(0,f.cn)("group/avatar relative flex size-8 shrink-0 overflow-hidden rounded-full select-none data-[size=lg]:size-10 data-[size=sm]:size-6",a),...c})}function h({className:a,...b}){return(0,d.jsx)(e.Fallback,{"data-slot":"avatar-fallback",className:(0,f.cn)("bg-muted text-muted-foreground flex size-full items-center justify-center rounded-full text-sm group-data-[size=sm]/avatar:text-xs",a),...b})}},82831:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{z7:()=>k});var e=c(10837),f=c(21968),g=c.n(f),h=c(41709),i=c(83457),j=a([i]);i=(j.then?(await j)():j)[0];let m=/@\[([^\]]+)\]\((user|agent):([a-f0-9-]+)\)/g;function k({children:a}){if(!a||"string"!=typeof a)return null;if(!new RegExp(m.source).test(a))return(0,e.jsx)("div",{className:"overflow-hidden [&_pre]:overflow-x-auto",children:(0,e.jsx)(h.jH,{plugins:{code:i.a},children:a})});let{processed:b,mentions:c}=function(a){let b=[],c=RegExp(m.source,"g");return{processed:a.replace(c,(a,c,d,e)=>{let f=b.length;return b.push({displayName:c,type:d,uuid:e}),`\u200B\u200BMENTION_${f}\u200B\u200B`}),mentions:b}}(a);return(0,e.jsx)(l,{mentions:c,children:(0,e.jsx)(h.jH,{plugins:{code:i.a},children:b})})}function l({children:a,mentions:b}){let c=g().useRef(null);return(0,e.jsx)("div",{ref:c,className:"overflow-hidden [&_pre]:overflow-x-auto",children:a})}d()}catch(a){d(a)}})},90061:(a,b,c)=>{c.d(b,{fv:()=>p,xQ:()=>q});var d=c(21968),e=c(76172);let f=new Map,g=new Map,h=new Map,i=new Set,j=0;function k(a,b,c,d){return c?d?`${a}:${b}:${c}:${d}`:`${a}:${b}:${c}`:`${a}:${b}`}function l(){j++,i.forEach(a=>a())}function m(a){let b=a.subEntityType,c=a.subEntityUuid,d=k(a.entityType,a.entityUuid,b,c),e=function(a,b,c,d,e){let f=k(a,b,d,e);return`${f}:${c}`}(a.entityType,a.entityUuid,a.agentUuid,b,c),i=g.get(e);if(i&&Date.now()-i<3e3)return;g.set(e,Date.now());let j={agentUuid:a.agentUuid,agentName:a.agentName,action:a.action,timestamp:Date.now()},m=(f.get(d)??[]).filter(b=>b.agentUuid!==a.agentUuid);m.push(j),f.set(d,m);let n=h.get(e);n&&clearTimeout(n);let o=setTimeout(()=>{let b=f.get(d);if(b){let c=b.filter(b=>b.agentUuid!==a.agentUuid);0===c.length?f.delete(d):f.set(d,c)}g.delete(e),h.delete(e),l()},3e3);h.set(e,o),l()}function n(){return j}function o(a){return i.add(a),()=>{i.delete(a)}}function p(a){m({type:"presence",companyUuid:"",projectUuid:"",...a,timestamp:Date.now()})}function q(){return(0,d.useSyncExternalStore)(o,n,n),(0,e.S2)(m),{getPresence:(a,b,c,d)=>{if(c)return f.get(k(a,b,c,d))??[];let e=`${a}:${b}`,g=new Map;for(let[a,b]of f)if(a===e||a.startsWith(e+":"))for(let a of b){let b=g.get(a.agentUuid);(!b||a.timestamp>b.timestamp)&&g.set(a.agentUuid,a)}return[...g.values()]}}}},98581:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{d:()=>l,s:()=>m});var e=c(2613);c(50785);var f=c(9259),g=c(466),h=c(67738),i=c(97307),j=c(12217),k=a([f,g,h]);[f,g,h]=k.then?(await k)():k;let n=["idea","proposal","task","document"];async function l(a,b){let c=await (0,f.d)();if(!c)return{success:!1,error:"Unauthorized"};if(!n.includes(a))return{success:!1,error:`Invalid target type: ${a}`};try{let d=await (0,g.fg)({companyUuid:c.companyUuid,targetType:a,targetUuid:b,skip:0,take:100}),e=await (0,g.Yt)(d.comments);return{success:!0,comments:e,total:d.total}}catch(b){return i.A.error({err:b,targetType:a},"Failed to get comments"),{success:!1,error:"Failed to load comments"}}}async function m(a,b,c){let d=await (0,f.d)();if(!d)return{success:!1,error:"Unauthorized"};if(!n.includes(a))return{success:!1,error:`Invalid target type: ${a}`};if(!c.trim())return{success:!1,error:"Comment content is required"};try{let e=await (0,g.eT)({companyUuid:d.companyUuid,targetType:a,targetUuid:b,content:c.trim(),authorType:d.type,authorUuid:d.actorUuid}),f=await (0,g.Hu)(a,b,d.companyUuid);f&&await (0,h.createActivity)({companyUuid:d.companyUuid,projectUuid:f,targetType:a,targetUuid:b,actorType:d.type,actorUuid:d.actorUuid,action:"comment_added"});let[i]=await (0,g.Yt)([e]);return{success:!0,comment:i}}catch(b){return i.A.error({err:b,targetType:a},"Failed to create comment"),{success:!1,error:"Failed to create comment"}}}(0,j.D)([l,m]),(0,e.A)(l,"60aaaf09814b29767a23a36b59555df07282407555",null),(0,e.A)(m,"70b2bba30986179182b8c1ff03c83ce22ac6c8090b",null),d()}catch(a){d(a)}})}};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";exports.id=7578,exports.ids=[7578],exports.modules={8777:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{Cs:()=>k,Nn:()=>n,YE:()=>j,lC:()=>i,lU:()=>m,oS:()=>o,ui:()=>l});var e=c(52618),f=c(76872),g=a([e,f]);async function h(a,b=!1){let c=await (0,f.LS)(a.createdByUuid),d={uuid:a.uuid,type:a.type,title:a.title,version:a.version,proposalUuid:a.proposalUuid,createdBy:c,createdAt:a.createdAt.toISOString(),updatedAt:a.updatedAt.toISOString()};return b&&void 0!==a.content&&(d.content=a.content),a.project&&(d.project=a.project),d}async function i({companyUuid:a,projectUuid:b,skip:c,take:d,type:f}){let g={projectUuid:b,companyUuid:a,...f&&{type:f}},[i,j]=await Promise.all([e.z.document.findMany({where:g,skip:c,take:d,orderBy:{updatedAt:"desc"},select:{uuid:!0,type:!0,title:!0,version:!0,proposalUuid:!0,createdByUuid:!0,createdAt:!0,updatedAt:!0}}),e.z.document.count({where:g})]);return{documents:await Promise.all(i.map(a=>h(a))),total:j}}async function j(a,b){let c=await e.z.document.findFirst({where:{uuid:b,companyUuid:a},include:{project:{select:{uuid:!0,name:!0}}}});return c?h(c,!0):null}async function k(a,b){return e.z.document.findFirst({where:{uuid:b,companyUuid:a}})}async function l(a){let b=await e.z.document.create({data:{companyUuid:a.companyUuid,projectUuid:a.projectUuid,type:a.type,title:a.title,content:a.content,version:1,proposalUuid:a.proposalUuid,createdByUuid:a.createdByUuid},select:{uuid:!0,type:!0,title:!0,content:!0,version:!0,proposalUuid:!0,createdByUuid:!0,createdAt:!0,updatedAt:!0}});return h(b,!0)}async function m(a,{title:b,content:c,incrementVersion:d}){let f={};void 0!==b&&(f.title=b),void 0!==c&&(f.content=c),d&&(f.version={increment:1});let g=await e.z.document.update({where:{uuid:a},data:f,include:{project:{select:{uuid:!0,name:!0}}}});return h(g,!0)}async function n(a){return e.z.document.delete({where:{uuid:a}})}async function o(a,b,c,d,f){let g=await e.z.document.create({data:{companyUuid:a,projectUuid:b,type:f.type||"prd",title:f.title,content:f.content||null,version:1,proposalUuid:c,createdByUuid:d},select:{uuid:!0,type:!0,title:!0,content:!0,version:!0,proposalUuid:!0,createdByUuid:!0,createdAt:!0,updatedAt:!0}});return h(g,!0)}[e,f]=g.then?(await g)():g,d()}catch(a){d(a)}})},57578:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{AU:()=>r,Bf:()=>G,CA:()=>B,Eh:()=>D,FD:()=>z,HF:()=>t,IV:()=>x,LJ:()=>y,M9:()=>A,PK:()=>u,X2:()=>v,e1:()=>q,gF:()=>w,gT:()=>C,lh:()=>F,nW:()=>E,v3:()=>p,wV:()=>s});var e=c(55511),f=c(52618),g=c(18818),h=c(76872),i=c(42558),j=c(8777),k=c(71165),l=a([f,h,j,k]);function m(a){return{...a,uuid:a.uuid||(0,e.randomUUID)()}}function n(a){return{...a,uuid:a.uuid||(0,e.randomUUID)()}}async function o(a){let b="user"===a.createdByType?"user":"agent",[c,d]=await Promise.all([(0,h.LS)(a.createdByUuid,b),(0,h.SJ)(a.reviewedByUuid,a.reviewNote,a.reviewedAt)]),e={uuid:a.uuid,title:a.title,description:a.description,inputType:a.inputType,inputUuids:a.inputUuids,documentDrafts:a.documentDrafts,taskDrafts:a.taskDrafts,status:a.status,createdBy:c,createdByType:a.createdByType,review:d,createdAt:a.createdAt.toISOString(),updatedAt:a.updatedAt.toISOString()};return a.project&&(e.project=a.project),e}async function p(a,b){let c=await f.z.proposal.findFirst({where:{uuid:b,companyUuid:a}});if(!c)throw Error("Proposal not found");let d=[],e=c.documentDrafts||[],g=c.taskDrafts||[],h=c.inputUuids||[];for(let a of(0===e.length&&d.push({id:"E1",level:"error",message:"Proposal must contain at least one document draft"}),e))(!a.content||a.content.length<100)&&d.push({id:"E2",level:"error",message:`Document draft "${a.title}" must have content with at least 100 characters`,field:a.title});if(0===g.length&&d.push({id:"E3",level:"error",message:"Proposal must contain at least one task draft"}),0===h.length&&d.push({id:"E4",level:"error",message:"Proposal must have at least one input (idea or other source)"}),"idea"===c.inputType&&h.length>0)for(let b of(await f.z.idea.findMany({where:{uuid:{in:h},companyUuid:a},select:{uuid:!0,title:!0,elaborationStatus:!0}})))"resolved"!==b.elaborationStatus&&d.push({id:"E5",level:"error",message:`Input idea "${b.title}" has unresolved elaboration (status: ${b.elaborationStatus})`,field:b.title});for(let a of(e.some(a=>"tech_design"===a.type)||d.push({id:"W1",level:"warning",message:"Proposal should contain at least one tech design document draft"}),g))a.description&&0!==a.description.trim().length||d.push({id:"W2",level:"warning",message:`Task draft "${a.title}" is missing a description`,field:a.title});for(let a of g)a.acceptanceCriteriaItems&&0!==a.acceptanceCriteriaItems.length||d.push({id:"E-AC",level:"error",message:`Task draft "${a.title}" is missing acceptance criteria (structured items required)`,field:a.title});for(let a of(g.length>=2&&(g.some(a=>a.dependsOnDraftUuids&&a.dependsOnDraftUuids.length>0)||d.push({id:"W4",level:"warning",message:"When there are multiple tasks, at least one should declare dependencies"})),c.description&&0!==c.description.trim().length||d.push({id:"W5",level:"warning",message:"Proposal description should not be empty"}),g))a.priority||d.push({id:"I1",level:"info",message:`Task draft "${a.title}" does not have a priority set`,field:a.title});for(let a of g)null==a.storyPoints&&d.push({id:"I2",level:"info",message:`Task draft "${a.title}" does not have story points set`,field:a.title});return{valid:!d.some(a=>"error"===a.level),issues:d}}async function q(a,b){let c=await f.z.proposal.findMany({where:{companyUuid:a,inputType:"idea"},select:{uuid:!0,title:!0,inputUuids:!0}}),d=[];for(let a of c){let c=a.inputUuids;for(let e of b)c.includes(e)&&d.push({uuid:e,proposalUuid:a.uuid,proposalTitle:a.title})}return{available:0===d.length,usedIdeas:d}}async function r(a,b,c,d){let e=await f.z.idea.findMany({where:{uuid:{in:b},companyUuid:a},select:{uuid:!0,assigneeType:!0,assigneeUuid:!0}}),g=[];for(let a of e)(a.assigneeType!==d||a.assigneeUuid!==c)&&g.push(a.uuid);return{valid:0===g.length,unassignedIdeas:g}}async function s({companyUuid:a,projectUuid:b,skip:c,take:d,status:e}){let g={projectUuid:b,companyUuid:a,...e&&{status:e}},[h,i]=await Promise.all([f.z.proposal.findMany({where:g,skip:c,take:d,orderBy:{createdAt:"desc"},select:{uuid:!0,title:!0,description:!0,inputType:!0,inputUuids:!0,documentDrafts:!0,taskDrafts:!0,status:!0,createdByUuid:!0,createdByType:!0,reviewedByUuid:!0,reviewNote:!0,reviewedAt:!0,createdAt:!0,updatedAt:!0}}),f.z.proposal.count({where:g})]);return{proposals:await Promise.all(h.map(a=>o(a))),total:i}}async function t(a,b){let c=await f.z.proposal.findFirst({where:{uuid:b,companyUuid:a},include:{project:{select:{uuid:!0,name:!0}}}});return c?o(c):null}async function u(a,b){return f.z.proposal.findFirst({where:{uuid:b,companyUuid:a}})}async function v(a){let b=a.documentDrafts?.map(m),c=a.taskDrafts?.map(n),d=await f.z.proposal.create({data:{companyUuid:a.companyUuid,projectUuid:a.projectUuid,title:a.title,description:a.description,inputType:a.inputType,inputUuids:a.inputUuids,...b&&{documentDrafts:b},...c&&{taskDrafts:c},status:"draft",createdByUuid:a.createdByUuid,createdByType:a.createdByType||"agent"},select:{uuid:!0,title:!0,description:!0,inputType:!0,inputUuids:!0,documentDrafts:!0,taskDrafts:!0,status:!0,createdByUuid:!0,createdByType:!0,reviewedByUuid:!0,reviewNote:!0,reviewedAt:!0,createdAt:!0,updatedAt:!0}});return i.B.emitChange({companyUuid:a.companyUuid,projectUuid:a.projectUuid,entityType:"proposal",entityUuid:d.uuid,action:"created"}),o(d)}async function w(a,b,c,d){let e=await f.z.proposal.findFirst({where:{uuid:a,companyUuid:b}});if(!e)throw Error("Proposal not found");let{updatedProposal:g,materializedTasks:h,materializedDocuments:l}=await f.z.$transaction(async b=>{let f=await b.proposal.update({where:{uuid:a},data:{status:"approved",reviewedByUuid:c,reviewNote:d||null,reviewedAt:new Date},include:{project:{select:{uuid:!0,name:!0}}}}),g=e.documentDrafts,h=e.taskDrafts,i=[],l=[];if(g&&g.length>0)for(let a of g){let b=await (0,j.oS)(e.companyUuid,e.projectUuid,e.uuid,e.createdByUuid,a);l.push({draftUuid:a.uuid,documentUuid:b.uuid,title:b.title})}if(h&&h.length>0){for(let a of h)if(a.acceptanceCriteriaItems&&a.acceptanceCriteriaItems.length>0)for(let b=0;b<a.acceptanceCriteriaItems.length;b++){let c=a.acceptanceCriteriaItems[b];if(!c.description||"string"!=typeof c.description||0===c.description.trim().length)throw Error(`Task draft "${a.title}": acceptanceCriteriaItems[${b}] has an empty or invalid description`)}let{draftToTaskUuidMap:a}=await (0,k.RJ)(e.companyUuid,e.projectUuid,e.uuid,e.createdByUuid,h);for(let b of h){let c=a.get(b.uuid);c&&i.push({draftUuid:b.uuid,taskUuid:c,title:b.title})}for(let c of h){if(c.dependsOnDraftUuids&&c.dependsOnDraftUuids.length>0){let d=a.get(c.uuid);if(!d)continue;for(let e of c.dependsOnDraftUuids){let c=a.get(e);c&&await b.taskDependency.create({data:{taskUuid:d,dependsOnUuid:c}})}}if(c.acceptanceCriteriaItems&&c.acceptanceCriteriaItems.length>0){let d=a.get(c.uuid);if(!d)continue;await b.acceptanceCriterion.createMany({data:c.acceptanceCriteriaItems.map((a,b)=>({taskUuid:d,description:a.description.trim(),required:a.required??!0,sortOrder:b}))})}}}return{updatedProposal:f,materializedTasks:i,materializedDocuments:l}});i.B.emitChange({companyUuid:e.companyUuid,projectUuid:e.projectUuid,entityType:"proposal",entityUuid:a,action:"updated"});let m=await o(g);return h.length>0&&(m.materializedTasks=h),l.length>0&&(m.materializedDocuments=l),m}async function x(a,b,c){let d=await f.z.proposal.update({where:{uuid:a},data:{status:"draft",reviewedByUuid:b,reviewNote:c,reviewedAt:new Date},include:{project:{select:{uuid:!0,name:!0}}}});return i.B.emitChange({companyUuid:d.companyUuid,projectUuid:d.projectUuid,entityType:"proposal",entityUuid:d.uuid,action:"updated"}),o(d)}async function y(a,b,c){let d=await f.z.proposal.update({where:{uuid:a},data:{status:"closed",reviewedByUuid:b,reviewNote:c,reviewedAt:new Date},include:{project:{select:{uuid:!0,name:!0}}}});return i.B.emitChange({companyUuid:d.companyUuid,projectUuid:d.projectUuid,entityType:"proposal",entityUuid:d.uuid,action:"updated"}),o(d)}async function z(a,b){let c=await f.z.proposal.findFirst({where:{uuid:a,companyUuid:b}});if(!c)throw Error("Proposal not found");if("draft"!==c.status)throw Error("Only draft proposals can be submitted for review");let d=await p(b,a);if(!d.valid){let a=d.issues.map(a=>`[${a.level}] ${a.message}`);throw Error(`Proposal validation failed:
|
|
2
|
-
${a.join("\n")}`)}let e=await f.z.proposal.update({where:{uuid:a},data:{status:"pending"},include:{project:{select:{uuid:!0,name:!0}}}});return i.B.emitChange({companyUuid:e.companyUuid,projectUuid:e.projectUuid,entityType:"proposal",entityUuid:e.uuid,action:"updated"}),
|
|
1
|
+
"use strict";exports.id=7578,exports.ids=[7578],exports.modules={57578:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{AU:()=>p,Bf:()=>E,CA:()=>z,Eh:()=>B,FD:()=>x,HF:()=>r,IV:()=>v,LJ:()=>w,M9:()=>y,PK:()=>s,X2:()=>t,e1:()=>o,gF:()=>u,gT:()=>A,lh:()=>D,nW:()=>C,v3:()=>n,wV:()=>q});var e=c(55511),f=c(52618),g=c(18818),h=c(76872),i=c(42558),j=a([f,h]);function k(a){return{...a,uuid:a.uuid||(0,e.randomUUID)()}}function l(a){return{...a,uuid:a.uuid||(0,e.randomUUID)()}}async function m(a){let b="user"===a.createdByType?"user":"agent",[c,d]=await Promise.all([(0,h.LS)(a.createdByUuid,b),(0,h.SJ)(a.reviewedByUuid,a.reviewNote,a.reviewedAt)]),e={uuid:a.uuid,title:a.title,description:a.description,inputType:a.inputType,inputUuids:a.inputUuids,documentDrafts:a.documentDrafts,taskDrafts:a.taskDrafts,status:a.status,createdBy:c,createdByType:a.createdByType,review:d,createdAt:a.createdAt.toISOString(),updatedAt:a.updatedAt.toISOString()};return a.project&&(e.project=a.project),e}async function n(a,b){let c=await f.z.proposal.findFirst({where:{uuid:b,companyUuid:a}});if(!c)throw Error("Proposal not found");let d=[],e=c.documentDrafts||[],g=c.taskDrafts||[],h=c.inputUuids||[];for(let a of(0===e.length&&d.push({id:"E1",level:"error",message:"Proposal must contain at least one document draft"}),e))(!a.content||a.content.length<100)&&d.push({id:"E2",level:"error",message:`Document draft "${a.title}" must have content with at least 100 characters`,field:a.title});if(0===g.length&&d.push({id:"E3",level:"error",message:"Proposal must contain at least one task draft"}),0===h.length&&d.push({id:"E4",level:"error",message:"Proposal must have at least one input (idea or other source)"}),"idea"===c.inputType&&h.length>0)for(let b of(await f.z.idea.findMany({where:{uuid:{in:h},companyUuid:a},select:{uuid:!0,title:!0,elaborationStatus:!0}})))"resolved"!==b.elaborationStatus&&d.push({id:"E5",level:"error",message:`Input idea "${b.title}" has unresolved elaboration (status: ${b.elaborationStatus})`,field:b.title});for(let a of(e.some(a=>"tech_design"===a.type)||d.push({id:"W1",level:"warning",message:"Proposal should contain at least one tech design document draft"}),g))a.description&&0!==a.description.trim().length||d.push({id:"W2",level:"warning",message:`Task draft "${a.title}" is missing a description`,field:a.title});for(let a of g)a.acceptanceCriteriaItems&&0!==a.acceptanceCriteriaItems.length||d.push({id:"E-AC",level:"error",message:`Task draft "${a.title}" is missing acceptance criteria (structured items required)`,field:a.title});for(let a of(g.length>=2&&(g.some(a=>a.dependsOnDraftUuids&&a.dependsOnDraftUuids.length>0)||d.push({id:"W4",level:"warning",message:"When there are multiple tasks, at least one should declare dependencies"})),c.description&&0!==c.description.trim().length||d.push({id:"W5",level:"warning",message:"Proposal description should not be empty"}),g))a.priority||d.push({id:"I1",level:"info",message:`Task draft "${a.title}" does not have a priority set`,field:a.title});for(let a of g)null==a.storyPoints&&d.push({id:"I2",level:"info",message:`Task draft "${a.title}" does not have story points set`,field:a.title});return{valid:!d.some(a=>"error"===a.level),issues:d}}async function o(a,b){let c=await f.z.proposal.findMany({where:{companyUuid:a,inputType:"idea"},select:{uuid:!0,title:!0,inputUuids:!0}}),d=[];for(let a of c){let c=a.inputUuids;for(let e of b)c.includes(e)&&d.push({uuid:e,proposalUuid:a.uuid,proposalTitle:a.title})}return{available:0===d.length,usedIdeas:d}}async function p(a,b,c,d){let e=await f.z.idea.findMany({where:{uuid:{in:b},companyUuid:a},select:{uuid:!0,assigneeType:!0,assigneeUuid:!0}}),g=[];for(let a of e)(a.assigneeType!==d||a.assigneeUuid!==c)&&g.push(a.uuid);return{valid:0===g.length,unassignedIdeas:g}}async function q({companyUuid:a,projectUuid:b,skip:c,take:d,status:e}){let g={projectUuid:b,companyUuid:a,...e&&{status:e}},[h,i]=await Promise.all([f.z.proposal.findMany({where:g,skip:c,take:d,orderBy:{createdAt:"desc"},select:{uuid:!0,title:!0,description:!0,inputType:!0,inputUuids:!0,documentDrafts:!0,taskDrafts:!0,status:!0,createdByUuid:!0,createdByType:!0,reviewedByUuid:!0,reviewNote:!0,reviewedAt:!0,createdAt:!0,updatedAt:!0}}),f.z.proposal.count({where:g})]);return{proposals:await Promise.all(h.map(a=>m(a))),total:i}}async function r(a,b){let c=await f.z.proposal.findFirst({where:{uuid:b,companyUuid:a},include:{project:{select:{uuid:!0,name:!0}}}});return c?m(c):null}async function s(a,b){return f.z.proposal.findFirst({where:{uuid:b,companyUuid:a}})}async function t(a){let b=a.documentDrafts?.map(k),c=a.taskDrafts?.map(l),d=await f.z.proposal.create({data:{companyUuid:a.companyUuid,projectUuid:a.projectUuid,title:a.title,description:a.description,inputType:a.inputType,inputUuids:a.inputUuids,...b&&{documentDrafts:b},...c&&{taskDrafts:c},status:"draft",createdByUuid:a.createdByUuid,createdByType:a.createdByType||"agent"},select:{uuid:!0,title:!0,description:!0,inputType:!0,inputUuids:!0,documentDrafts:!0,taskDrafts:!0,status:!0,createdByUuid:!0,createdByType:!0,reviewedByUuid:!0,reviewNote:!0,reviewedAt:!0,createdAt:!0,updatedAt:!0}});return i.B.emitChange({companyUuid:a.companyUuid,projectUuid:a.projectUuid,entityType:"proposal",entityUuid:d.uuid,action:"created"}),m(d)}async function u(a,b,c,d){let e=await f.z.proposal.findFirst({where:{uuid:a,companyUuid:b}});if(!e)throw Error("Proposal not found");let{updatedProposal:g,materializedTasks:h,materializedDocuments:j}=await f.z.$transaction(async b=>{let f=await b.proposal.update({where:{uuid:a},data:{status:"approved",reviewedByUuid:c,reviewNote:d||null,reviewedAt:new Date},include:{project:{select:{uuid:!0,name:!0}}}}),g=e.documentDrafts,h=e.taskDrafts,i=[],j=[];if(g&&g.length>0){let a=await b.document.createManyAndReturn({data:g.map(a=>({companyUuid:e.companyUuid,projectUuid:e.projectUuid,type:a.type||"prd",title:a.title,content:a.content||null,version:1,proposalUuid:e.uuid,createdByUuid:e.createdByUuid})),select:{uuid:!0,title:!0}});for(let b=0;b<g.length;b++)j.push({draftUuid:g[b].uuid,documentUuid:a[b].uuid,title:a[b].title})}if(h&&h.length>0){for(let a of h)if(a.acceptanceCriteriaItems&&a.acceptanceCriteriaItems.length>0)for(let b=0;b<a.acceptanceCriteriaItems.length;b++){let c=a.acceptanceCriteriaItems[b];if(!c.description||"string"!=typeof c.description||0===c.description.trim().length)throw Error(`Task draft "${a.title}": acceptanceCriteriaItems[${b}] has an empty or invalid description`)}let a=await b.task.createManyAndReturn({data:h.map(a=>({companyUuid:e.companyUuid,projectUuid:e.projectUuid,title:a.title,description:a.description||null,status:"open",priority:a.priority||"medium",storyPoints:a.storyPoints||null,acceptanceCriteria:a.acceptanceCriteria||null,proposalUuid:e.uuid,createdByUuid:e.createdByUuid})),select:{uuid:!0,title:!0}}),c=new Map;for(let b=0;b<h.length;b++)c.set(h[b].uuid,a[b].uuid),i.push({draftUuid:h[b].uuid,taskUuid:a[b].uuid,title:a[b].title});let d=[];for(let a of h)if(a.dependsOnDraftUuids&&a.dependsOnDraftUuids.length>0){let b=c.get(a.uuid);if(!b)continue;for(let e of a.dependsOnDraftUuids){let a=c.get(e);a&&d.push({taskUuid:b,dependsOnUuid:a})}}d.length>0&&await b.taskDependency.createMany({data:d});let f=[];for(let a of h)if(a.acceptanceCriteriaItems&&a.acceptanceCriteriaItems.length>0){let b=c.get(a.uuid);if(!b)continue;for(let c=0;c<a.acceptanceCriteriaItems.length;c++){let d=a.acceptanceCriteriaItems[c];f.push({taskUuid:b,description:d.description.trim(),required:d.required??!0,sortOrder:c})}}f.length>0&&await b.acceptanceCriterion.createMany({data:f})}return{updatedProposal:f,materializedTasks:i,materializedDocuments:j}},{timeout:15e3});i.B.emitChange({companyUuid:e.companyUuid,projectUuid:e.projectUuid,entityType:"proposal",entityUuid:a,action:"updated"});let k=await m(g);return h.length>0&&(k.materializedTasks=h),j.length>0&&(k.materializedDocuments=j),k}async function v(a,b,c){let d=await f.z.proposal.update({where:{uuid:a},data:{status:"draft",reviewedByUuid:b,reviewNote:c,reviewedAt:new Date},include:{project:{select:{uuid:!0,name:!0}}}});return i.B.emitChange({companyUuid:d.companyUuid,projectUuid:d.projectUuid,entityType:"proposal",entityUuid:d.uuid,action:"updated"}),m(d)}async function w(a,b,c){let d=await f.z.proposal.update({where:{uuid:a},data:{status:"closed",reviewedByUuid:b,reviewNote:c,reviewedAt:new Date},include:{project:{select:{uuid:!0,name:!0}}}});return i.B.emitChange({companyUuid:d.companyUuid,projectUuid:d.projectUuid,entityType:"proposal",entityUuid:d.uuid,action:"updated"}),m(d)}async function x(a,b){let c=await f.z.proposal.findFirst({where:{uuid:a,companyUuid:b}});if(!c)throw Error("Proposal not found");if("draft"!==c.status)throw Error("Only draft proposals can be submitted for review");let d=await n(b,a);if(!d.valid){let a=d.issues.map(a=>`[${a.level}] ${a.message}`);throw Error(`Proposal validation failed:
|
|
2
|
+
${a.join("\n")}`)}let e=await f.z.proposal.update({where:{uuid:a},data:{status:"pending"},include:{project:{select:{uuid:!0,name:!0}}}});return i.B.emitChange({companyUuid:e.companyUuid,projectUuid:e.projectUuid,entityType:"proposal",entityUuid:e.uuid,action:"updated"}),m(e)}async function y(a,b,c){let d=await f.z.proposal.findFirst({where:{uuid:a,companyUuid:b,status:"draft"}});if(!d)throw Error("Proposal not found or not in draft status");let e=d.documentDrafts||[],g=k(c),h=[...e,g],j=await f.z.proposal.update({where:{uuid:a},data:{documentDrafts:h},include:{project:{select:{uuid:!0,name:!0}}}});return i.B.emitChange({companyUuid:b,projectUuid:d.projectUuid,entityType:"proposal",entityUuid:a,action:"updated"}),m(j)}async function z(a,b,c){let d=await f.z.proposal.findFirst({where:{uuid:a,companyUuid:b,status:"draft"}});if(!d)throw Error("Proposal not found or not in draft status");let e=d.taskDrafts||[],g=l(c),h=[...e,g],j=await f.z.proposal.update({where:{uuid:a},data:{taskDrafts:h},include:{project:{select:{uuid:!0,name:!0}}}});return i.B.emitChange({companyUuid:b,projectUuid:d.projectUuid,entityType:"proposal",entityUuid:a,action:"updated"}),m(j)}async function A(a,b,c,d){let e=await f.z.proposal.findFirst({where:{uuid:a,companyUuid:b,status:"draft"}});if(!e)throw Error("Proposal not found or not in draft status");let g=e.documentDrafts||[],h=g.findIndex(a=>a.uuid===c);if(-1===h)throw Error("Document draft not found");g[h]={...g[h],...d};let j=await f.z.proposal.update({where:{uuid:a},data:{documentDrafts:g},include:{project:{select:{uuid:!0,name:!0}}}});return i.B.emitChange({companyUuid:b,projectUuid:e.projectUuid,entityType:"proposal",entityUuid:a,action:"updated"}),m(j)}async function B(a,b,c,d){let e=await f.z.proposal.findFirst({where:{uuid:a,companyUuid:b,status:"draft"}});if(!e)throw Error("Proposal not found or not in draft status");let g=e.taskDrafts||[],h=g.findIndex(a=>a.uuid===c);if(-1===h)throw Error("Task draft not found");g[h]={...g[h],...d};let j=await f.z.proposal.update({where:{uuid:a},data:{taskDrafts:g},include:{project:{select:{uuid:!0,name:!0}}}});return i.B.emitChange({companyUuid:b,projectUuid:e.projectUuid,entityType:"proposal",entityUuid:a,action:"updated"}),m(j)}async function C(a,b,c){let d=await f.z.proposal.findFirst({where:{uuid:a,companyUuid:b,status:"draft"}});if(!d)throw Error("Proposal not found or not in draft status");let e=(d.documentDrafts||[]).filter(a=>a.uuid!==c),h=await f.z.proposal.update({where:{uuid:a},data:{documentDrafts:e.length>0?e:g.D1.Fj},include:{project:{select:{uuid:!0,name:!0}}}});return i.B.emitChange({companyUuid:b,projectUuid:d.projectUuid,entityType:"proposal",entityUuid:a,action:"updated"}),m(h)}async function D(a,b,c){let d=await f.z.proposal.findFirst({where:{uuid:a,companyUuid:b,status:"draft"}});if(!d)throw Error("Proposal not found or not in draft status");let e=(d.taskDrafts||[]).filter(a=>a.uuid!==c).map(a=>({...a,dependsOnDraftUuids:a.dependsOnDraftUuids?.filter(a=>a!==c)})),h=await f.z.proposal.update({where:{uuid:a},data:{taskDrafts:e.length>0?e:g.D1.Fj},include:{project:{select:{uuid:!0,name:!0}}}});return i.B.emitChange({companyUuid:b,projectUuid:d.projectUuid,entityType:"proposal",entityUuid:a,action:"updated"}),m(h)}async function E(a,b){let c=await f.z.proposal.findMany({where:{companyUuid:a,projectUuid:b,status:"approved"},select:{uuid:!0,title:!0,createdAt:!0},orderBy:{createdAt:"asc"}}),d=await f.z.task.groupBy({by:["proposalUuid"],where:{companyUuid:a,projectUuid:b,proposalUuid:{in:c.map(a=>a.uuid)}},_count:!0}),e=new Map(d.map(a=>[a.proposalUuid,a._count]));return c.map((a,b)=>({uuid:a.uuid,title:a.title,sequenceNumber:b+1,taskCount:e.get(a.uuid)??0}))}[f,h]=j.then?(await j)():j,d()}catch(a){d(a)}})}};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";exports.id=8204,exports.ids=[8204],exports.modules={2852:(a,b,c)=>{c.d(b,{J:()=>g});var d=c(10837);c(21968);var e=c(13277),f=c(96307);function g({className:a,...b}){return(0,d.jsx)(e.Root,{"data-slot":"label",className:(0,f.cn)("flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50",a),...b})}},6019:(a,b,c)=>{c.d(b,{$v:()=>p,EO:()=>l,Lt:()=>h,Rx:()=>q,Zr:()=>r,ck:()=>n,r7:()=>o,tv:()=>i,wd:()=>m});var d=c(10837);c(21968);var e=c(81093),f=c(96307),g=c(42424);function h({...a}){return(0,d.jsx)(e.Root,{"data-slot":"alert-dialog",...a})}function i({...a}){return(0,d.jsx)(e.Trigger,{"data-slot":"alert-dialog-trigger",...a})}function j({...a}){return(0,d.jsx)(e.Portal,{"data-slot":"alert-dialog-portal",...a})}function k({className:a,...b}){return(0,d.jsx)(e.Overlay,{"data-slot":"alert-dialog-overlay",className:(0,f.cn)("data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50",a),...b})}function l({className:a,size:b="default",...c}){return(0,d.jsxs)(j,{children:[(0,d.jsx)(k,{}),(0,d.jsx)(e.Content,{"data-slot":"alert-dialog-content","data-size":b,className:(0,f.cn)("bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 group/alert-dialog-content fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 data-[size=sm]:max-w-xs data-[size=default]:sm:max-w-lg",a),...c})]})}function m({className:a,...b}){return(0,d.jsx)("div",{"data-slot":"alert-dialog-header",className:(0,f.cn)("grid grid-rows-[auto_1fr] place-items-center gap-1.5 text-center has-data-[slot=alert-dialog-media]:grid-rows-[auto_auto_1fr] has-data-[slot=alert-dialog-media]:gap-x-6 sm:group-data-[size=default]/alert-dialog-content:place-items-start sm:group-data-[size=default]/alert-dialog-content:text-left sm:group-data-[size=default]/alert-dialog-content:has-data-[slot=alert-dialog-media]:grid-rows-[auto_1fr]",a),...b})}function n({className:a,...b}){return(0,d.jsx)("div",{"data-slot":"alert-dialog-footer",className:(0,f.cn)("flex flex-col-reverse gap-2 group-data-[size=sm]/alert-dialog-content:grid group-data-[size=sm]/alert-dialog-content:grid-cols-2 sm:flex-row sm:justify-end",a),...b})}function o({className:a,...b}){return(0,d.jsx)(e.Title,{"data-slot":"alert-dialog-title",className:(0,f.cn)("text-lg font-semibold sm:group-data-[size=default]/alert-dialog-content:group-has-data-[slot=alert-dialog-media]/alert-dialog-content:col-start-2",a),...b})}function p({className:a,...b}){return(0,d.jsx)(e.Description,{"data-slot":"alert-dialog-description",className:(0,f.cn)("text-muted-foreground text-sm",a),...b})}function q({className:a,variant:b="default",size:c="default",...h}){return(0,d.jsx)(g.$,{variant:b,size:c,asChild:!0,children:(0,d.jsx)(e.Action,{"data-slot":"alert-dialog-action",className:(0,f.cn)(a),...h})})}function r({className:a,variant:b="outline",size:c="default",...h}){return(0,d.jsx)(g.$,{variant:b,size:c,asChild:!0,children:(0,d.jsx)(e.Cancel,{"data-slot":"alert-dialog-cancel",className:(0,f.cn)(a),...h})})}},10297:(a,b,c)=>{c.d(b,{G7:()=>i,L$:()=>l,h_:()=>m,oI:()=>j,uB:()=>h,xL:()=>k});var d=c(10837);c(21968);var e=c(28918),f=c(75888),g=c(96307);function h({className:a,...b}){return(0,d.jsx)(e.uB,{"data-slot":"command",className:(0,g.cn)("flex h-full w-full flex-col overflow-hidden rounded-md bg-popover text-popover-foreground",a),...b})}function i({className:a,...b}){return(0,d.jsxs)("div",{"data-slot":"command-input-wrapper",className:"flex h-9 items-center gap-2 border-b px-3",children:[(0,d.jsx)(f.A,{className:"size-4 shrink-0 opacity-50"}),(0,d.jsx)(e.uB.Input,{"data-slot":"command-input",className:(0,g.cn)("flex h-10 w-full rounded-md bg-transparent py-3 text-sm outline-hidden placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50",a),...b})]})}function j({className:a,...b}){return(0,d.jsx)(e.uB.List,{"data-slot":"command-list",className:(0,g.cn)("max-h-[300px] scroll-py-1 overflow-x-hidden overflow-y-auto",a),...b})}function k({...a}){return(0,d.jsx)(e.uB.Empty,{"data-slot":"command-empty",className:"py-6 text-center text-sm",...a})}function l({className:a,...b}){return(0,d.jsx)(e.uB.Group,{"data-slot":"command-group",className:(0,g.cn)("overflow-hidden p-1 text-foreground [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-muted-foreground",a),...b})}function m({className:a,...b}){return(0,d.jsx)(e.uB.Item,{"data-slot":"command-item",className:(0,g.cn)("relative flex cursor-default gap-2 select-none items-center rounded-sm px-2 py-1.5 text-sm outline-hidden data-[disabled=true]:pointer-events-none data-[selected=true]:bg-accent data-[selected=true]:text-accent-foreground data-[disabled=true]:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",a),...b})}},11225:(a,b,c)=>{c.d(b,{C:()=>i,z:()=>h});var d=c(10837);c(21968);var e=c(90856),f=c(28121),g=c(96307);function h({className:a,...b}){return(0,d.jsx)(f.Root,{"data-slot":"radio-group",className:(0,g.cn)("grid gap-3",a),...b})}function i({className:a,...b}){return(0,d.jsx)(f.Item,{"data-slot":"radio-group-item",className:(0,g.cn)("border-input text-primary focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 aspect-square size-4 shrink-0 rounded-full border shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50",a),...b,children:(0,d.jsx)(f.Indicator,{"data-slot":"radio-group-indicator",className:"relative flex items-center justify-center",children:(0,d.jsx)(e.A,{className:"fill-primary absolute top-1/2 left-1/2 size-2 -translate-x-1/2 -translate-y-1/2"})})})}},20170:(a,b,c)=>{c.d(b,{T:()=>f});var d=c(10837);c(21968);var e=c(96307);function f({className:a,...b}){return(0,d.jsx)("textarea",{"data-slot":"textarea",className:(0,e.cn)("border-input placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 flex field-sizing-content min-h-16 w-full rounded-md border bg-transparent px-3 py-2 text-base shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 md:text-sm",a),...b})}},28774:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{A8:()=>p,Ad:()=>o,CG:()=>n,Iq:()=>m,RB:()=>k,Sn:()=>h,d5:()=>l,tN:()=>j,x4:()=>i});var e=c(71255),f=c(77219),g=a([e,f]);async function h({companyUuid:a,name:b,roles:c,ownerUuid:d,persona:f,systemPrompt:g}){return e.z.agent.create({data:{companyUuid:a,name:b,roles:c,ownerUuid:d,persona:f,systemPrompt:g},select:{uuid:!0,name:!0,roles:!0,persona:!0,systemPrompt:!0,ownerUuid:!0,createdAt:!0}})}async function i(a,b,c){if(c&&!await e.z.agent.findFirst({where:{uuid:a,companyUuid:c},select:{uuid:!0}}))throw Error("Agent not found");return e.z.agent.update({where:{uuid:a},data:b,select:{uuid:!0,name:!0,roles:!0,persona:!0,systemPrompt:!0,ownerUuid:!0,lastActiveAt:!0,createdAt:!0}})}async function j(a,b){return e.z.apiKey.updateMany({where:{agentUuid:a,revokedAt:null},data:{name:b}})}async function k(a){return e.z.agent.delete({where:{uuid:a}})}async function l(a,b,c,d){let f={companyUuid:a,revokedAt:null,...d&&{agent:{ownerUuid:d}}},[g,h]=await Promise.all([e.z.apiKey.findMany({where:f,skip:b,take:c,orderBy:{createdAt:"desc"},include:{agent:{select:{uuid:!0,name:!0,roles:!0,persona:!0}}}}),e.z.apiKey.count({where:f})]);return{apiKeys:g,total:h}}async function m({companyUuid:a,agentUuid:b,name:c,expiresAt:d}){let{key:g,hash:h,prefix:i}=(0,f.XH)();return{...await e.z.apiKey.create({data:{companyUuid:a,agentUuid:b,keyHash:h,keyPrefix:i,name:c,expiresAt:d},select:{uuid:!0,keyPrefix:!0,name:!0,expiresAt:!0,createdAt:!0}}),key:g}}async function n(a,b,c){return e.z.apiKey.findFirst({where:{uuid:b,companyUuid:a,...c&&{agent:{ownerUuid:c}}},select:{uuid:!0,agentUuid:!0,revokedAt:!0}})}async function o(a,b,c){return e.z.agent.findMany({where:{companyUuid:a,...c&&{ownerUuid:c},OR:[{roles:{has:b}},{roles:{has:`${b}_agent`}}]},select:{uuid:!0,name:!0,roles:!0,ownerUuid:!0},orderBy:{name:"asc"}})}async function p(a){return e.z.user.findMany({where:{companyUuid:a},select:{uuid:!0,name:!0,email:!0},orderBy:{name:"asc"}})}[e,f]=g.then?(await g)():g,d()}catch(a){d(a)}})},77219:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{XH:()=>h});var e=c(55511),f=c(71255);c(97307);var g=a([f]);f=(g.then?(await g)():g)[0];let i="cho_";function h(){var a;let b=(0,e.randomBytes)(32).toString("base64url"),c=`${i}${b}`,d=(a=c,(0,e.createHash)("sha256").update(a).digest("hex")),f=`${i}${b.slice(0,4)}...${b.slice(-4)}`;return{key:c,hash:d,prefix:f}}d()}catch(a){d(a)}})},97879:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{AU:()=>r,CA:()=>C,Eh:()=>E,FD:()=>A,IV:()=>x,LJ:()=>y,M9:()=>B,MN:()=>z,PK:()=>u,X2:()=>v,e1:()=>q,fS:()=>s,gF:()=>w,gT:()=>D,lh:()=>G,nW:()=>F,wV:()=>t});var e=c(55511),f=c(71255),g=c(69996),h=c(92633),i=c(62729),j=c(53870),k=c(50530),l=a([f,h,j,k]);function m(a){return{...a,uuid:a.uuid||(0,e.randomUUID)()}}function n(a){return{...a,uuid:a.uuid||(0,e.randomUUID)()}}async function o(a){let b="user"===a.createdByType?"user":"agent",[c,d]=await Promise.all([(0,h.LS)(a.createdByUuid,b),(0,h.SJ)(a.reviewedByUuid,a.reviewNote,a.reviewedAt)]),e={uuid:a.uuid,title:a.title,description:a.description,inputType:a.inputType,inputUuids:a.inputUuids,documentDrafts:a.documentDrafts,taskDrafts:a.taskDrafts,status:a.status,createdBy:c,createdByType:a.createdByType,review:d,createdAt:a.createdAt.toISOString(),updatedAt:a.updatedAt.toISOString()};return a.project&&(e.project=a.project),e}async function p(a,b){let c=await f.z.proposal.findFirst({where:{uuid:b,companyUuid:a}});if(!c)throw Error("Proposal not found");let d=[],e=c.documentDrafts||[],g=c.taskDrafts||[],h=c.inputUuids||[];for(let a of(0===e.length&&d.push({id:"E1",level:"error",message:"Proposal must contain at least one document draft"}),e))(!a.content||a.content.length<100)&&d.push({id:"E2",level:"error",message:`Document draft "${a.title}" must have content with at least 100 characters`,field:a.title});if(0===g.length&&d.push({id:"E3",level:"error",message:"Proposal must contain at least one task draft"}),0===h.length&&d.push({id:"E4",level:"error",message:"Proposal must have at least one input (idea or other source)"}),"idea"===c.inputType&&h.length>0)for(let b of(await f.z.idea.findMany({where:{uuid:{in:h},companyUuid:a},select:{uuid:!0,title:!0,elaborationStatus:!0}})))"resolved"!==b.elaborationStatus&&d.push({id:"E5",level:"error",message:`Input idea "${b.title}" has unresolved elaboration (status: ${b.elaborationStatus})`,field:b.title});for(let a of(e.some(a=>"tech_design"===a.type)||d.push({id:"W1",level:"warning",message:"Proposal should contain at least one tech design document draft"}),g))a.description&&0!==a.description.trim().length||d.push({id:"W2",level:"warning",message:`Task draft "${a.title}" is missing a description`,field:a.title});for(let a of g)a.acceptanceCriteriaItems&&0!==a.acceptanceCriteriaItems.length||d.push({id:"E-AC",level:"error",message:`Task draft "${a.title}" is missing acceptance criteria (structured items required)`,field:a.title});for(let a of(g.length>=2&&(g.some(a=>a.dependsOnDraftUuids&&a.dependsOnDraftUuids.length>0)||d.push({id:"W4",level:"warning",message:"When there are multiple tasks, at least one should declare dependencies"})),c.description&&0!==c.description.trim().length||d.push({id:"W5",level:"warning",message:"Proposal description should not be empty"}),g))a.priority||d.push({id:"I1",level:"info",message:`Task draft "${a.title}" does not have a priority set`,field:a.title});for(let a of g)null==a.storyPoints&&d.push({id:"I2",level:"info",message:`Task draft "${a.title}" does not have story points set`,field:a.title});return{valid:!d.some(a=>"error"===a.level),issues:d}}async function q(a,b){let c=await f.z.proposal.findMany({where:{companyUuid:a,inputType:"idea"},select:{uuid:!0,title:!0,inputUuids:!0}}),d=[];for(let a of c){let c=a.inputUuids;for(let e of b)c.includes(e)&&d.push({uuid:e,proposalUuid:a.uuid,proposalTitle:a.title})}return{available:0===d.length,usedIdeas:d}}async function r(a,b,c,d){let e=await f.z.idea.findMany({where:{uuid:{in:b},companyUuid:a},select:{uuid:!0,assigneeType:!0,assigneeUuid:!0}}),g=[];for(let a of e)(a.assigneeType!==d||a.assigneeUuid!==c)&&g.push(a.uuid);return{valid:0===g.length,unassignedIdeas:g}}async function s(a,b,c){let d=(await f.z.proposal.findMany({where:{projectUuid:b,companyUuid:a},orderBy:{createdAt:"desc"},select:{uuid:!0,title:!0,description:!0,inputType:!0,inputUuids:!0,documentDrafts:!0,taskDrafts:!0,status:!0,createdByUuid:!0,createdByType:!0,reviewedByUuid:!0,reviewNote:!0,reviewedAt:!0,createdAt:!0,updatedAt:!0}})).filter(a=>Array.isArray(a.inputUuids)&&a.inputUuids.includes(c));return Promise.all(d.map(a=>o(a)))}async function t({companyUuid:a,projectUuid:b,skip:c,take:d,status:e}){let g={projectUuid:b,companyUuid:a,...e&&{status:e}},[h,i]=await Promise.all([f.z.proposal.findMany({where:g,skip:c,take:d,orderBy:{createdAt:"desc"},select:{uuid:!0,title:!0,description:!0,inputType:!0,inputUuids:!0,documentDrafts:!0,taskDrafts:!0,status:!0,createdByUuid:!0,createdByType:!0,reviewedByUuid:!0,reviewNote:!0,reviewedAt:!0,createdAt:!0,updatedAt:!0}}),f.z.proposal.count({where:g})]);return{proposals:await Promise.all(h.map(a=>o(a))),total:i}}async function u(a,b){return f.z.proposal.findFirst({where:{uuid:b,companyUuid:a}})}async function v(a){let b=a.documentDrafts?.map(m),c=a.taskDrafts?.map(n),d=await f.z.proposal.create({data:{companyUuid:a.companyUuid,projectUuid:a.projectUuid,title:a.title,description:a.description,inputType:a.inputType,inputUuids:a.inputUuids,...b&&{documentDrafts:b},...c&&{taskDrafts:c},status:"draft",createdByUuid:a.createdByUuid,createdByType:a.createdByType||"agent"},select:{uuid:!0,title:!0,description:!0,inputType:!0,inputUuids:!0,documentDrafts:!0,taskDrafts:!0,status:!0,createdByUuid:!0,createdByType:!0,reviewedByUuid:!0,reviewNote:!0,reviewedAt:!0,createdAt:!0,updatedAt:!0}});return i.B.emitChange({companyUuid:a.companyUuid,projectUuid:a.projectUuid,entityType:"proposal",entityUuid:d.uuid,action:"created"}),o(d)}async function w(a,b,c,d){let e=await f.z.proposal.findFirst({where:{uuid:a,companyUuid:b}});if(!e)throw Error("Proposal not found");let{updatedProposal:g,materializedTasks:h,materializedDocuments:l}=await f.z.$transaction(async b=>{let f=await b.proposal.update({where:{uuid:a},data:{status:"approved",reviewedByUuid:c,reviewNote:d||null,reviewedAt:new Date},include:{project:{select:{uuid:!0,name:!0}}}}),g=e.documentDrafts,h=e.taskDrafts,i=[],l=[];if(g&&g.length>0)for(let a of g){let b=await (0,j.oS)(e.companyUuid,e.projectUuid,e.uuid,e.createdByUuid,a);l.push({draftUuid:a.uuid,documentUuid:b.uuid,title:b.title})}if(h&&h.length>0){for(let a of h)if(a.acceptanceCriteriaItems&&a.acceptanceCriteriaItems.length>0)for(let b=0;b<a.acceptanceCriteriaItems.length;b++){let c=a.acceptanceCriteriaItems[b];if(!c.description||"string"!=typeof c.description||0===c.description.trim().length)throw Error(`Task draft "${a.title}": acceptanceCriteriaItems[${b}] has an empty or invalid description`)}let{draftToTaskUuidMap:a}=await (0,k.RJ)(e.companyUuid,e.projectUuid,e.uuid,e.createdByUuid,h);for(let b of h){let c=a.get(b.uuid);c&&i.push({draftUuid:b.uuid,taskUuid:c,title:b.title})}for(let c of h){if(c.dependsOnDraftUuids&&c.dependsOnDraftUuids.length>0){let d=a.get(c.uuid);if(!d)continue;for(let e of c.dependsOnDraftUuids){let c=a.get(e);c&&await b.taskDependency.create({data:{taskUuid:d,dependsOnUuid:c}})}}if(c.acceptanceCriteriaItems&&c.acceptanceCriteriaItems.length>0){let d=a.get(c.uuid);if(!d)continue;await b.acceptanceCriterion.createMany({data:c.acceptanceCriteriaItems.map((a,b)=>({taskUuid:d,description:a.description.trim(),required:a.required??!0,sortOrder:b}))})}}}return{updatedProposal:f,materializedTasks:i,materializedDocuments:l}});i.B.emitChange({companyUuid:e.companyUuid,projectUuid:e.projectUuid,entityType:"proposal",entityUuid:a,action:"updated"});let m=await o(g);return h.length>0&&(m.materializedTasks=h),l.length>0&&(m.materializedDocuments=l),m}async function x(a,b,c){let d=await f.z.proposal.update({where:{uuid:a},data:{status:"draft",reviewedByUuid:b,reviewNote:c,reviewedAt:new Date},include:{project:{select:{uuid:!0,name:!0}}}});return i.B.emitChange({companyUuid:d.companyUuid,projectUuid:d.projectUuid,entityType:"proposal",entityUuid:d.uuid,action:"updated"}),o(d)}async function y(a,b,c){let d=await f.z.proposal.update({where:{uuid:a},data:{status:"closed",reviewedByUuid:b,reviewNote:c,reviewedAt:new Date},include:{project:{select:{uuid:!0,name:!0}}}});return i.B.emitChange({companyUuid:d.companyUuid,projectUuid:d.projectUuid,entityType:"proposal",entityUuid:d.uuid,action:"updated"}),o(d)}async function z(a,b){let c=await f.z.proposal.findFirst({where:{uuid:a,companyUuid:b}});if(!c)throw Error("Proposal not found");await f.z.proposal.delete({where:{uuid:a}}),i.B.emitChange({companyUuid:c.companyUuid,projectUuid:c.projectUuid,entityType:"proposal",entityUuid:c.uuid,action:"deleted"})}async function A(a,b){let c=await f.z.proposal.findFirst({where:{uuid:a,companyUuid:b}});if(!c)throw Error("Proposal not found");if("draft"!==c.status)throw Error("Only draft proposals can be submitted for review");let d=await p(b,a);if(!d.valid){let a=d.issues.map(a=>`[${a.level}] ${a.message}`);throw Error(`Proposal validation failed:
|
|
2
|
-
${a.join("\n")}`)}let e=await f.z.proposal.update({where:{uuid:a},data:{status:"pending"},include:{project:{select:{uuid:!0,name:!0}}}});return i.B.emitChange({companyUuid:e.companyUuid,projectUuid:e.projectUuid,entityType:"proposal",entityUuid:e.uuid,action:"updated"}),
|
|
1
|
+
"use strict";exports.id=8204,exports.ids=[8204],exports.modules={2852:(a,b,c)=>{c.d(b,{J:()=>g});var d=c(10837);c(21968);var e=c(13277),f=c(96307);function g({className:a,...b}){return(0,d.jsx)(e.Root,{"data-slot":"label",className:(0,f.cn)("flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50",a),...b})}},6019:(a,b,c)=>{c.d(b,{$v:()=>p,EO:()=>l,Lt:()=>h,Rx:()=>q,Zr:()=>r,ck:()=>n,r7:()=>o,tv:()=>i,wd:()=>m});var d=c(10837);c(21968);var e=c(81093),f=c(96307),g=c(42424);function h({...a}){return(0,d.jsx)(e.Root,{"data-slot":"alert-dialog",...a})}function i({...a}){return(0,d.jsx)(e.Trigger,{"data-slot":"alert-dialog-trigger",...a})}function j({...a}){return(0,d.jsx)(e.Portal,{"data-slot":"alert-dialog-portal",...a})}function k({className:a,...b}){return(0,d.jsx)(e.Overlay,{"data-slot":"alert-dialog-overlay",className:(0,f.cn)("data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50",a),...b})}function l({className:a,size:b="default",...c}){return(0,d.jsxs)(j,{children:[(0,d.jsx)(k,{}),(0,d.jsx)(e.Content,{"data-slot":"alert-dialog-content","data-size":b,className:(0,f.cn)("bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 group/alert-dialog-content fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 data-[size=sm]:max-w-xs data-[size=default]:sm:max-w-lg",a),...c})]})}function m({className:a,...b}){return(0,d.jsx)("div",{"data-slot":"alert-dialog-header",className:(0,f.cn)("grid grid-rows-[auto_1fr] place-items-center gap-1.5 text-center has-data-[slot=alert-dialog-media]:grid-rows-[auto_auto_1fr] has-data-[slot=alert-dialog-media]:gap-x-6 sm:group-data-[size=default]/alert-dialog-content:place-items-start sm:group-data-[size=default]/alert-dialog-content:text-left sm:group-data-[size=default]/alert-dialog-content:has-data-[slot=alert-dialog-media]:grid-rows-[auto_1fr]",a),...b})}function n({className:a,...b}){return(0,d.jsx)("div",{"data-slot":"alert-dialog-footer",className:(0,f.cn)("flex flex-col-reverse gap-2 group-data-[size=sm]/alert-dialog-content:grid group-data-[size=sm]/alert-dialog-content:grid-cols-2 sm:flex-row sm:justify-end",a),...b})}function o({className:a,...b}){return(0,d.jsx)(e.Title,{"data-slot":"alert-dialog-title",className:(0,f.cn)("text-lg font-semibold sm:group-data-[size=default]/alert-dialog-content:group-has-data-[slot=alert-dialog-media]/alert-dialog-content:col-start-2",a),...b})}function p({className:a,...b}){return(0,d.jsx)(e.Description,{"data-slot":"alert-dialog-description",className:(0,f.cn)("text-muted-foreground text-sm",a),...b})}function q({className:a,variant:b="default",size:c="default",...h}){return(0,d.jsx)(g.$,{variant:b,size:c,asChild:!0,children:(0,d.jsx)(e.Action,{"data-slot":"alert-dialog-action",className:(0,f.cn)(a),...h})})}function r({className:a,variant:b="outline",size:c="default",...h}){return(0,d.jsx)(g.$,{variant:b,size:c,asChild:!0,children:(0,d.jsx)(e.Cancel,{"data-slot":"alert-dialog-cancel",className:(0,f.cn)(a),...h})})}},10297:(a,b,c)=>{c.d(b,{G7:()=>i,L$:()=>l,h_:()=>m,oI:()=>j,uB:()=>h,xL:()=>k});var d=c(10837);c(21968);var e=c(28918),f=c(75888),g=c(96307);function h({className:a,...b}){return(0,d.jsx)(e.uB,{"data-slot":"command",className:(0,g.cn)("flex h-full w-full flex-col overflow-hidden rounded-md bg-popover text-popover-foreground",a),...b})}function i({className:a,...b}){return(0,d.jsxs)("div",{"data-slot":"command-input-wrapper",className:"flex h-9 items-center gap-2 border-b px-3",children:[(0,d.jsx)(f.A,{className:"size-4 shrink-0 opacity-50"}),(0,d.jsx)(e.uB.Input,{"data-slot":"command-input",className:(0,g.cn)("flex h-10 w-full rounded-md bg-transparent py-3 text-sm outline-hidden placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50",a),...b})]})}function j({className:a,...b}){return(0,d.jsx)(e.uB.List,{"data-slot":"command-list",className:(0,g.cn)("max-h-[300px] scroll-py-1 overflow-x-hidden overflow-y-auto",a),...b})}function k({...a}){return(0,d.jsx)(e.uB.Empty,{"data-slot":"command-empty",className:"py-6 text-center text-sm",...a})}function l({className:a,...b}){return(0,d.jsx)(e.uB.Group,{"data-slot":"command-group",className:(0,g.cn)("overflow-hidden p-1 text-foreground [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-muted-foreground",a),...b})}function m({className:a,...b}){return(0,d.jsx)(e.uB.Item,{"data-slot":"command-item",className:(0,g.cn)("relative flex cursor-default gap-2 select-none items-center rounded-sm px-2 py-1.5 text-sm outline-hidden data-[disabled=true]:pointer-events-none data-[selected=true]:bg-accent data-[selected=true]:text-accent-foreground data-[disabled=true]:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",a),...b})}},11225:(a,b,c)=>{c.d(b,{C:()=>i,z:()=>h});var d=c(10837);c(21968);var e=c(90856),f=c(28121),g=c(96307);function h({className:a,...b}){return(0,d.jsx)(f.Root,{"data-slot":"radio-group",className:(0,g.cn)("grid gap-3",a),...b})}function i({className:a,...b}){return(0,d.jsx)(f.Item,{"data-slot":"radio-group-item",className:(0,g.cn)("border-input text-primary focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 aspect-square size-4 shrink-0 rounded-full border shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50",a),...b,children:(0,d.jsx)(f.Indicator,{"data-slot":"radio-group-indicator",className:"relative flex items-center justify-center",children:(0,d.jsx)(e.A,{className:"fill-primary absolute top-1/2 left-1/2 size-2 -translate-x-1/2 -translate-y-1/2"})})})}},20170:(a,b,c)=>{c.d(b,{T:()=>f});var d=c(10837);c(21968);var e=c(96307);function f({className:a,...b}){return(0,d.jsx)("textarea",{"data-slot":"textarea",className:(0,e.cn)("border-input placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 flex field-sizing-content min-h-16 w-full rounded-md border bg-transparent px-3 py-2 text-base shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 md:text-sm",a),...b})}},28774:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{A8:()=>p,Ad:()=>o,CG:()=>n,Iq:()=>m,RB:()=>k,Sn:()=>h,d5:()=>l,tN:()=>j,x4:()=>i});var e=c(71255),f=c(77219),g=a([e,f]);async function h({companyUuid:a,name:b,roles:c,ownerUuid:d,persona:f,systemPrompt:g}){return e.z.agent.create({data:{companyUuid:a,name:b,roles:c,ownerUuid:d,persona:f,systemPrompt:g},select:{uuid:!0,name:!0,roles:!0,persona:!0,systemPrompt:!0,ownerUuid:!0,createdAt:!0}})}async function i(a,b,c){if(c&&!await e.z.agent.findFirst({where:{uuid:a,companyUuid:c},select:{uuid:!0}}))throw Error("Agent not found");return e.z.agent.update({where:{uuid:a},data:b,select:{uuid:!0,name:!0,roles:!0,persona:!0,systemPrompt:!0,ownerUuid:!0,lastActiveAt:!0,createdAt:!0}})}async function j(a,b){return e.z.apiKey.updateMany({where:{agentUuid:a,revokedAt:null},data:{name:b}})}async function k(a){return e.z.agent.delete({where:{uuid:a}})}async function l(a,b,c,d){let f={companyUuid:a,revokedAt:null,...d&&{agent:{ownerUuid:d}}},[g,h]=await Promise.all([e.z.apiKey.findMany({where:f,skip:b,take:c,orderBy:{createdAt:"desc"},include:{agent:{select:{uuid:!0,name:!0,roles:!0,persona:!0}}}}),e.z.apiKey.count({where:f})]);return{apiKeys:g,total:h}}async function m({companyUuid:a,agentUuid:b,name:c,expiresAt:d}){let{key:g,hash:h,prefix:i}=(0,f.XH)();return{...await e.z.apiKey.create({data:{companyUuid:a,agentUuid:b,keyHash:h,keyPrefix:i,name:c,expiresAt:d},select:{uuid:!0,keyPrefix:!0,name:!0,expiresAt:!0,createdAt:!0}}),key:g}}async function n(a,b,c){return e.z.apiKey.findFirst({where:{uuid:b,companyUuid:a,...c&&{agent:{ownerUuid:c}}},select:{uuid:!0,agentUuid:!0,revokedAt:!0}})}async function o(a,b,c){return e.z.agent.findMany({where:{companyUuid:a,...c&&{ownerUuid:c},OR:[{roles:{has:b}},{roles:{has:`${b}_agent`}}]},select:{uuid:!0,name:!0,roles:!0,ownerUuid:!0},orderBy:{name:"asc"}})}async function p(a){return e.z.user.findMany({where:{companyUuid:a},select:{uuid:!0,name:!0,email:!0},orderBy:{name:"asc"}})}[e,f]=g.then?(await g)():g,d()}catch(a){d(a)}})},77219:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{XH:()=>h});var e=c(55511),f=c(71255);c(97307);var g=a([f]);f=(g.then?(await g)():g)[0];let i="cho_";function h(){var a;let b=(0,e.randomBytes)(32).toString("base64url"),c=`${i}${b}`,d=(a=c,(0,e.createHash)("sha256").update(a).digest("hex")),f=`${i}${b.slice(0,4)}...${b.slice(-4)}`;return{key:c,hash:d,prefix:f}}d()}catch(a){d(a)}})},97879:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{AU:()=>p,CA:()=>A,Eh:()=>C,FD:()=>y,IV:()=>v,LJ:()=>w,M9:()=>z,MN:()=>x,PK:()=>s,X2:()=>t,e1:()=>o,fS:()=>q,gF:()=>u,gT:()=>B,lh:()=>E,nW:()=>D,wV:()=>r});var e=c(55511),f=c(71255),g=c(69996),h=c(92633),i=c(62729),j=a([f,h]);function k(a){return{...a,uuid:a.uuid||(0,e.randomUUID)()}}function l(a){return{...a,uuid:a.uuid||(0,e.randomUUID)()}}async function m(a){let b="user"===a.createdByType?"user":"agent",[c,d]=await Promise.all([(0,h.LS)(a.createdByUuid,b),(0,h.SJ)(a.reviewedByUuid,a.reviewNote,a.reviewedAt)]),e={uuid:a.uuid,title:a.title,description:a.description,inputType:a.inputType,inputUuids:a.inputUuids,documentDrafts:a.documentDrafts,taskDrafts:a.taskDrafts,status:a.status,createdBy:c,createdByType:a.createdByType,review:d,createdAt:a.createdAt.toISOString(),updatedAt:a.updatedAt.toISOString()};return a.project&&(e.project=a.project),e}async function n(a,b){let c=await f.z.proposal.findFirst({where:{uuid:b,companyUuid:a}});if(!c)throw Error("Proposal not found");let d=[],e=c.documentDrafts||[],g=c.taskDrafts||[],h=c.inputUuids||[];for(let a of(0===e.length&&d.push({id:"E1",level:"error",message:"Proposal must contain at least one document draft"}),e))(!a.content||a.content.length<100)&&d.push({id:"E2",level:"error",message:`Document draft "${a.title}" must have content with at least 100 characters`,field:a.title});if(0===g.length&&d.push({id:"E3",level:"error",message:"Proposal must contain at least one task draft"}),0===h.length&&d.push({id:"E4",level:"error",message:"Proposal must have at least one input (idea or other source)"}),"idea"===c.inputType&&h.length>0)for(let b of(await f.z.idea.findMany({where:{uuid:{in:h},companyUuid:a},select:{uuid:!0,title:!0,elaborationStatus:!0}})))"resolved"!==b.elaborationStatus&&d.push({id:"E5",level:"error",message:`Input idea "${b.title}" has unresolved elaboration (status: ${b.elaborationStatus})`,field:b.title});for(let a of(e.some(a=>"tech_design"===a.type)||d.push({id:"W1",level:"warning",message:"Proposal should contain at least one tech design document draft"}),g))a.description&&0!==a.description.trim().length||d.push({id:"W2",level:"warning",message:`Task draft "${a.title}" is missing a description`,field:a.title});for(let a of g)a.acceptanceCriteriaItems&&0!==a.acceptanceCriteriaItems.length||d.push({id:"E-AC",level:"error",message:`Task draft "${a.title}" is missing acceptance criteria (structured items required)`,field:a.title});for(let a of(g.length>=2&&(g.some(a=>a.dependsOnDraftUuids&&a.dependsOnDraftUuids.length>0)||d.push({id:"W4",level:"warning",message:"When there are multiple tasks, at least one should declare dependencies"})),c.description&&0!==c.description.trim().length||d.push({id:"W5",level:"warning",message:"Proposal description should not be empty"}),g))a.priority||d.push({id:"I1",level:"info",message:`Task draft "${a.title}" does not have a priority set`,field:a.title});for(let a of g)null==a.storyPoints&&d.push({id:"I2",level:"info",message:`Task draft "${a.title}" does not have story points set`,field:a.title});return{valid:!d.some(a=>"error"===a.level),issues:d}}async function o(a,b){let c=await f.z.proposal.findMany({where:{companyUuid:a,inputType:"idea"},select:{uuid:!0,title:!0,inputUuids:!0}}),d=[];for(let a of c){let c=a.inputUuids;for(let e of b)c.includes(e)&&d.push({uuid:e,proposalUuid:a.uuid,proposalTitle:a.title})}return{available:0===d.length,usedIdeas:d}}async function p(a,b,c,d){let e=await f.z.idea.findMany({where:{uuid:{in:b},companyUuid:a},select:{uuid:!0,assigneeType:!0,assigneeUuid:!0}}),g=[];for(let a of e)(a.assigneeType!==d||a.assigneeUuid!==c)&&g.push(a.uuid);return{valid:0===g.length,unassignedIdeas:g}}async function q(a,b,c){let d=(await f.z.proposal.findMany({where:{projectUuid:b,companyUuid:a},orderBy:{createdAt:"desc"},select:{uuid:!0,title:!0,description:!0,inputType:!0,inputUuids:!0,documentDrafts:!0,taskDrafts:!0,status:!0,createdByUuid:!0,createdByType:!0,reviewedByUuid:!0,reviewNote:!0,reviewedAt:!0,createdAt:!0,updatedAt:!0}})).filter(a=>Array.isArray(a.inputUuids)&&a.inputUuids.includes(c));return Promise.all(d.map(a=>m(a)))}async function r({companyUuid:a,projectUuid:b,skip:c,take:d,status:e}){let g={projectUuid:b,companyUuid:a,...e&&{status:e}},[h,i]=await Promise.all([f.z.proposal.findMany({where:g,skip:c,take:d,orderBy:{createdAt:"desc"},select:{uuid:!0,title:!0,description:!0,inputType:!0,inputUuids:!0,documentDrafts:!0,taskDrafts:!0,status:!0,createdByUuid:!0,createdByType:!0,reviewedByUuid:!0,reviewNote:!0,reviewedAt:!0,createdAt:!0,updatedAt:!0}}),f.z.proposal.count({where:g})]);return{proposals:await Promise.all(h.map(a=>m(a))),total:i}}async function s(a,b){return f.z.proposal.findFirst({where:{uuid:b,companyUuid:a}})}async function t(a){let b=a.documentDrafts?.map(k),c=a.taskDrafts?.map(l),d=await f.z.proposal.create({data:{companyUuid:a.companyUuid,projectUuid:a.projectUuid,title:a.title,description:a.description,inputType:a.inputType,inputUuids:a.inputUuids,...b&&{documentDrafts:b},...c&&{taskDrafts:c},status:"draft",createdByUuid:a.createdByUuid,createdByType:a.createdByType||"agent"},select:{uuid:!0,title:!0,description:!0,inputType:!0,inputUuids:!0,documentDrafts:!0,taskDrafts:!0,status:!0,createdByUuid:!0,createdByType:!0,reviewedByUuid:!0,reviewNote:!0,reviewedAt:!0,createdAt:!0,updatedAt:!0}});return i.B.emitChange({companyUuid:a.companyUuid,projectUuid:a.projectUuid,entityType:"proposal",entityUuid:d.uuid,action:"created"}),m(d)}async function u(a,b,c,d){let e=await f.z.proposal.findFirst({where:{uuid:a,companyUuid:b}});if(!e)throw Error("Proposal not found");let{updatedProposal:g,materializedTasks:h,materializedDocuments:j}=await f.z.$transaction(async b=>{let f=await b.proposal.update({where:{uuid:a},data:{status:"approved",reviewedByUuid:c,reviewNote:d||null,reviewedAt:new Date},include:{project:{select:{uuid:!0,name:!0}}}}),g=e.documentDrafts,h=e.taskDrafts,i=[],j=[];if(g&&g.length>0){let a=await b.document.createManyAndReturn({data:g.map(a=>({companyUuid:e.companyUuid,projectUuid:e.projectUuid,type:a.type||"prd",title:a.title,content:a.content||null,version:1,proposalUuid:e.uuid,createdByUuid:e.createdByUuid})),select:{uuid:!0,title:!0}});for(let b=0;b<g.length;b++)j.push({draftUuid:g[b].uuid,documentUuid:a[b].uuid,title:a[b].title})}if(h&&h.length>0){for(let a of h)if(a.acceptanceCriteriaItems&&a.acceptanceCriteriaItems.length>0)for(let b=0;b<a.acceptanceCriteriaItems.length;b++){let c=a.acceptanceCriteriaItems[b];if(!c.description||"string"!=typeof c.description||0===c.description.trim().length)throw Error(`Task draft "${a.title}": acceptanceCriteriaItems[${b}] has an empty or invalid description`)}let a=await b.task.createManyAndReturn({data:h.map(a=>({companyUuid:e.companyUuid,projectUuid:e.projectUuid,title:a.title,description:a.description||null,status:"open",priority:a.priority||"medium",storyPoints:a.storyPoints||null,acceptanceCriteria:a.acceptanceCriteria||null,proposalUuid:e.uuid,createdByUuid:e.createdByUuid})),select:{uuid:!0,title:!0}}),c=new Map;for(let b=0;b<h.length;b++)c.set(h[b].uuid,a[b].uuid),i.push({draftUuid:h[b].uuid,taskUuid:a[b].uuid,title:a[b].title});let d=[];for(let a of h)if(a.dependsOnDraftUuids&&a.dependsOnDraftUuids.length>0){let b=c.get(a.uuid);if(!b)continue;for(let e of a.dependsOnDraftUuids){let a=c.get(e);a&&d.push({taskUuid:b,dependsOnUuid:a})}}d.length>0&&await b.taskDependency.createMany({data:d});let f=[];for(let a of h)if(a.acceptanceCriteriaItems&&a.acceptanceCriteriaItems.length>0){let b=c.get(a.uuid);if(!b)continue;for(let c=0;c<a.acceptanceCriteriaItems.length;c++){let d=a.acceptanceCriteriaItems[c];f.push({taskUuid:b,description:d.description.trim(),required:d.required??!0,sortOrder:c})}}f.length>0&&await b.acceptanceCriterion.createMany({data:f})}return{updatedProposal:f,materializedTasks:i,materializedDocuments:j}},{timeout:15e3});i.B.emitChange({companyUuid:e.companyUuid,projectUuid:e.projectUuid,entityType:"proposal",entityUuid:a,action:"updated"});let k=await m(g);return h.length>0&&(k.materializedTasks=h),j.length>0&&(k.materializedDocuments=j),k}async function v(a,b,c){let d=await f.z.proposal.update({where:{uuid:a},data:{status:"draft",reviewedByUuid:b,reviewNote:c,reviewedAt:new Date},include:{project:{select:{uuid:!0,name:!0}}}});return i.B.emitChange({companyUuid:d.companyUuid,projectUuid:d.projectUuid,entityType:"proposal",entityUuid:d.uuid,action:"updated"}),m(d)}async function w(a,b,c){let d=await f.z.proposal.update({where:{uuid:a},data:{status:"closed",reviewedByUuid:b,reviewNote:c,reviewedAt:new Date},include:{project:{select:{uuid:!0,name:!0}}}});return i.B.emitChange({companyUuid:d.companyUuid,projectUuid:d.projectUuid,entityType:"proposal",entityUuid:d.uuid,action:"updated"}),m(d)}async function x(a,b){let c=await f.z.proposal.findFirst({where:{uuid:a,companyUuid:b}});if(!c)throw Error("Proposal not found");await f.z.proposal.delete({where:{uuid:a}}),i.B.emitChange({companyUuid:c.companyUuid,projectUuid:c.projectUuid,entityType:"proposal",entityUuid:c.uuid,action:"deleted"})}async function y(a,b){let c=await f.z.proposal.findFirst({where:{uuid:a,companyUuid:b}});if(!c)throw Error("Proposal not found");if("draft"!==c.status)throw Error("Only draft proposals can be submitted for review");let d=await n(b,a);if(!d.valid){let a=d.issues.map(a=>`[${a.level}] ${a.message}`);throw Error(`Proposal validation failed:
|
|
2
|
+
${a.join("\n")}`)}let e=await f.z.proposal.update({where:{uuid:a},data:{status:"pending"},include:{project:{select:{uuid:!0,name:!0}}}});return i.B.emitChange({companyUuid:e.companyUuid,projectUuid:e.projectUuid,entityType:"proposal",entityUuid:e.uuid,action:"updated"}),m(e)}async function z(a,b,c){let d=await f.z.proposal.findFirst({where:{uuid:a,companyUuid:b,status:"draft"}});if(!d)throw Error("Proposal not found or not in draft status");let e=d.documentDrafts||[],g=k(c),h=[...e,g],j=await f.z.proposal.update({where:{uuid:a},data:{documentDrafts:h},include:{project:{select:{uuid:!0,name:!0}}}});return i.B.emitChange({companyUuid:b,projectUuid:d.projectUuid,entityType:"proposal",entityUuid:a,action:"updated"}),m(j)}async function A(a,b,c){let d=await f.z.proposal.findFirst({where:{uuid:a,companyUuid:b,status:"draft"}});if(!d)throw Error("Proposal not found or not in draft status");let e=d.taskDrafts||[],g=l(c),h=[...e,g],j=await f.z.proposal.update({where:{uuid:a},data:{taskDrafts:h},include:{project:{select:{uuid:!0,name:!0}}}});return i.B.emitChange({companyUuid:b,projectUuid:d.projectUuid,entityType:"proposal",entityUuid:a,action:"updated"}),m(j)}async function B(a,b,c,d){let e=await f.z.proposal.findFirst({where:{uuid:a,companyUuid:b,status:"draft"}});if(!e)throw Error("Proposal not found or not in draft status");let g=e.documentDrafts||[],h=g.findIndex(a=>a.uuid===c);if(-1===h)throw Error("Document draft not found");g[h]={...g[h],...d};let j=await f.z.proposal.update({where:{uuid:a},data:{documentDrafts:g},include:{project:{select:{uuid:!0,name:!0}}}});return i.B.emitChange({companyUuid:b,projectUuid:e.projectUuid,entityType:"proposal",entityUuid:a,action:"updated"}),m(j)}async function C(a,b,c,d){let e=await f.z.proposal.findFirst({where:{uuid:a,companyUuid:b,status:"draft"}});if(!e)throw Error("Proposal not found or not in draft status");let g=e.taskDrafts||[],h=g.findIndex(a=>a.uuid===c);if(-1===h)throw Error("Task draft not found");g[h]={...g[h],...d};let j=await f.z.proposal.update({where:{uuid:a},data:{taskDrafts:g},include:{project:{select:{uuid:!0,name:!0}}}});return i.B.emitChange({companyUuid:b,projectUuid:e.projectUuid,entityType:"proposal",entityUuid:a,action:"updated"}),m(j)}async function D(a,b,c){let d=await f.z.proposal.findFirst({where:{uuid:a,companyUuid:b,status:"draft"}});if(!d)throw Error("Proposal not found or not in draft status");let e=(d.documentDrafts||[]).filter(a=>a.uuid!==c),h=await f.z.proposal.update({where:{uuid:a},data:{documentDrafts:e.length>0?e:g.D1.Fj},include:{project:{select:{uuid:!0,name:!0}}}});return i.B.emitChange({companyUuid:b,projectUuid:d.projectUuid,entityType:"proposal",entityUuid:a,action:"updated"}),m(h)}async function E(a,b,c){let d=await f.z.proposal.findFirst({where:{uuid:a,companyUuid:b,status:"draft"}});if(!d)throw Error("Proposal not found or not in draft status");let e=(d.taskDrafts||[]).filter(a=>a.uuid!==c).map(a=>({...a,dependsOnDraftUuids:a.dependsOnDraftUuids?.filter(a=>a!==c)})),h=await f.z.proposal.update({where:{uuid:a},data:{taskDrafts:e.length>0?e:g.D1.Fj},include:{project:{select:{uuid:!0,name:!0}}}});return i.B.emitChange({companyUuid:b,projectUuid:d.projectUuid,entityType:"proposal",entityUuid:a,action:"updated"}),m(h)}[f,h]=j.then?(await j)():j,d()}catch(a){d(a)}})}};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";exports.id=8479,exports.ids=[8479],exports.modules={1284:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.r(b),c.d(b,{"406c09f1fb889b1607ec79823088008667e27a450c":()=>e.v5,"408e7d2b3f6d6158c95860a7adf885fe78e79eb6a7":()=>f.c,"40d6a34177f9c4da3a912c04641793a7d06aca2697":()=>e.Dv,"6019168fa36dbaabc1ab6074c8dfcec6fe090d3465":()=>f.f,"6062fb32640da63dd5c6a61bf200752e626ac4e3e1":()=>e.Tg});var e=c(22299),f=c(61915),g=a([e,f]);[e,f]=g.then?(await g)():g,d()}catch(a){d(a)}})},35198:(a,b,c)=>{c.d(b,{BT:()=>i,Wu:()=>k,X9:()=>j,ZB:()=>h,Zp:()=>f,aR:()=>g,wL:()=>l});var d=c(10837);c(21968);var e=c(96307);function f({className:a,...b}){return(0,d.jsx)("div",{"data-slot":"card",className:(0,e.cn)("bg-card text-card-foreground flex flex-col gap-6 rounded-xl border py-6 shadow-sm",a),...b})}function g({className:a,...b}){return(0,d.jsx)("div",{"data-slot":"card-header",className:(0,e.cn)("@container/card-header grid auto-rows-min grid-rows-[auto_auto] items-start gap-2 px-6 has-data-[slot=card-action]:grid-cols-[1fr_auto] [.border-b]:pb-6",a),...b})}function h({className:a,...b}){return(0,d.jsx)("div",{"data-slot":"card-title",className:(0,e.cn)("leading-none font-semibold",a),...b})}function i({className:a,...b}){return(0,d.jsx)("div",{"data-slot":"card-description",className:(0,e.cn)("text-muted-foreground text-sm",a),...b})}function j({className:a,...b}){return(0,d.jsx)("div",{"data-slot":"card-action",className:(0,e.cn)("col-start-2 row-span-2 row-start-1 self-start justify-self-end",a),...b})}function k({className:a,...b}){return(0,d.jsx)("div",{"data-slot":"card-content",className:(0,e.cn)("px-6",a),...b})}function l({className:a,...b}){return(0,d.jsx)("div",{"data-slot":"card-footer",className:(0,e.cn)("flex items-center px-6 [.border-t]:pt-6",a),...b})}},53870:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{Cs:()=>i,lU:()=>k,oS:()=>l,ui:()=>j});var e=c(71255),f=c(92633),g=a([e,f]);async function h(a,b=!1){let c=await (0,f.LS)(a.createdByUuid),d={uuid:a.uuid,type:a.type,title:a.title,version:a.version,proposalUuid:a.proposalUuid,createdBy:c,createdAt:a.createdAt.toISOString(),updatedAt:a.updatedAt.toISOString()};return b&&void 0!==a.content&&(d.content=a.content),a.project&&(d.project=a.project),d}async function i(a,b){return e.z.document.findFirst({where:{uuid:b,companyUuid:a}})}async function j(a){let b=await e.z.document.create({data:{companyUuid:a.companyUuid,projectUuid:a.projectUuid,type:a.type,title:a.title,content:a.content,version:1,proposalUuid:a.proposalUuid,createdByUuid:a.createdByUuid},select:{uuid:!0,type:!0,title:!0,content:!0,version:!0,proposalUuid:!0,createdByUuid:!0,createdAt:!0,updatedAt:!0}});return h(b,!0)}async function k(a,{title:b,content:c,incrementVersion:d}){let f={};void 0!==b&&(f.title=b),void 0!==c&&(f.content=c),d&&(f.version={increment:1});let g=await e.z.document.update({where:{uuid:a},data:f,include:{project:{select:{uuid:!0,name:!0}}}});return h(g,!0)}async function l(a,b,c,d,f){let g=await e.z.document.create({data:{companyUuid:a,projectUuid:b,type:f.type||"prd",title:f.title,content:f.content||null,version:1,proposalUuid:c,createdByUuid:d},select:{uuid:!0,type:!0,title:!0,content:!0,version:!0,proposalUuid:!0,createdByUuid:!0,createdAt:!0,updatedAt:!0}});return h(g,!0)}[e,f]=g.then?(await g)():g,d()}catch(a){d(a)}})},61915:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{c:()=>n,f:()=>m});var e=c(2613);c(50785);var f=c(5562),g=c(9259),h=c(97879),i=c(33994),j=c(97307),k=c(12217),l=a([g,h,i]);async function m(a,b){let c=await (0,g.d)();if(!c)return{success:!1,error:"Unauthorized"};try{if(!await (0,i.Yi)(c.companyUuid,a))return{success:!1,error:"Project not found"};if(!b.title||""===b.title.trim())return{success:!1,error:"Title is required"};if(!b.inputUuids||0===b.inputUuids.length)return{success:!1,error:"Input sources are required"};if("idea"===b.inputType&&!(await (0,h.AU)(c.companyUuid,b.inputUuids,c.actorUuid,c.type)).valid)return{success:!1,error:"You can only create proposals from ideas assigned to you"};let d=await (0,h.X2)({companyUuid:c.companyUuid,projectUuid:a,title:b.title.trim(),description:b.description?.trim()||null,inputType:b.inputType,inputUuids:b.inputUuids,documentDrafts:b.documentDrafts,taskDrafts:b.taskDrafts,createdByUuid:c.actorUuid,createdByType:"user"});return(0,f.revalidatePath)(`/projects/${a}/proposals`),{success:!0,proposal:d}}catch(a){return j.A.error({err:a},"Failed to create proposal"),{success:!1,error:a instanceof Error?a.message:"Failed to create proposal"}}}async function n(a){let b=await (0,g.d)();if(!b)return{success:!1,error:"Unauthorized"};try{let{proposals:c}=await (0,h.wV)({companyUuid:b.companyUuid,projectUuid:a,skip:0,take:1e3});return{success:!0,data:c}}catch(a){return j.A.error({err:a},"Failed to fetch proposals"),{success:!1,error:"Failed to fetch proposals"}}}[g,h,i]=l.then?(await l)():l,(0,k.D)([m,n]),(0,e.A)(m,"6019168fa36dbaabc1ab6074c8dfcec6fe090d3465",null),(0,e.A)(n,"408e7d2b3f6d6158c95860a7adf885fe78e79eb6a7",null),d()}catch(a){d(a)}})},97879:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{AU:()=>r,CA:()=>C,Eh:()=>E,FD:()=>A,IV:()=>x,LJ:()=>y,M9:()=>B,MN:()=>z,PK:()=>u,X2:()=>v,e1:()=>q,fS:()=>s,gF:()=>w,gT:()=>D,lh:()=>G,nW:()=>F,wV:()=>t});var e=c(55511),f=c(71255),g=c(69996),h=c(92633),i=c(62729),j=c(53870),k=c(50530),l=a([f,h,j,k]);function m(a){return{...a,uuid:a.uuid||(0,e.randomUUID)()}}function n(a){return{...a,uuid:a.uuid||(0,e.randomUUID)()}}async function o(a){let b="user"===a.createdByType?"user":"agent",[c,d]=await Promise.all([(0,h.LS)(a.createdByUuid,b),(0,h.SJ)(a.reviewedByUuid,a.reviewNote,a.reviewedAt)]),e={uuid:a.uuid,title:a.title,description:a.description,inputType:a.inputType,inputUuids:a.inputUuids,documentDrafts:a.documentDrafts,taskDrafts:a.taskDrafts,status:a.status,createdBy:c,createdByType:a.createdByType,review:d,createdAt:a.createdAt.toISOString(),updatedAt:a.updatedAt.toISOString()};return a.project&&(e.project=a.project),e}async function p(a,b){let c=await f.z.proposal.findFirst({where:{uuid:b,companyUuid:a}});if(!c)throw Error("Proposal not found");let d=[],e=c.documentDrafts||[],g=c.taskDrafts||[],h=c.inputUuids||[];for(let a of(0===e.length&&d.push({id:"E1",level:"error",message:"Proposal must contain at least one document draft"}),e))(!a.content||a.content.length<100)&&d.push({id:"E2",level:"error",message:`Document draft "${a.title}" must have content with at least 100 characters`,field:a.title});if(0===g.length&&d.push({id:"E3",level:"error",message:"Proposal must contain at least one task draft"}),0===h.length&&d.push({id:"E4",level:"error",message:"Proposal must have at least one input (idea or other source)"}),"idea"===c.inputType&&h.length>0)for(let b of(await f.z.idea.findMany({where:{uuid:{in:h},companyUuid:a},select:{uuid:!0,title:!0,elaborationStatus:!0}})))"resolved"!==b.elaborationStatus&&d.push({id:"E5",level:"error",message:`Input idea "${b.title}" has unresolved elaboration (status: ${b.elaborationStatus})`,field:b.title});for(let a of(e.some(a=>"tech_design"===a.type)||d.push({id:"W1",level:"warning",message:"Proposal should contain at least one tech design document draft"}),g))a.description&&0!==a.description.trim().length||d.push({id:"W2",level:"warning",message:`Task draft "${a.title}" is missing a description`,field:a.title});for(let a of g)a.acceptanceCriteriaItems&&0!==a.acceptanceCriteriaItems.length||d.push({id:"E-AC",level:"error",message:`Task draft "${a.title}" is missing acceptance criteria (structured items required)`,field:a.title});for(let a of(g.length>=2&&(g.some(a=>a.dependsOnDraftUuids&&a.dependsOnDraftUuids.length>0)||d.push({id:"W4",level:"warning",message:"When there are multiple tasks, at least one should declare dependencies"})),c.description&&0!==c.description.trim().length||d.push({id:"W5",level:"warning",message:"Proposal description should not be empty"}),g))a.priority||d.push({id:"I1",level:"info",message:`Task draft "${a.title}" does not have a priority set`,field:a.title});for(let a of g)null==a.storyPoints&&d.push({id:"I2",level:"info",message:`Task draft "${a.title}" does not have story points set`,field:a.title});return{valid:!d.some(a=>"error"===a.level),issues:d}}async function q(a,b){let c=await f.z.proposal.findMany({where:{companyUuid:a,inputType:"idea"},select:{uuid:!0,title:!0,inputUuids:!0}}),d=[];for(let a of c){let c=a.inputUuids;for(let e of b)c.includes(e)&&d.push({uuid:e,proposalUuid:a.uuid,proposalTitle:a.title})}return{available:0===d.length,usedIdeas:d}}async function r(a,b,c,d){let e=await f.z.idea.findMany({where:{uuid:{in:b},companyUuid:a},select:{uuid:!0,assigneeType:!0,assigneeUuid:!0}}),g=[];for(let a of e)(a.assigneeType!==d||a.assigneeUuid!==c)&&g.push(a.uuid);return{valid:0===g.length,unassignedIdeas:g}}async function s(a,b,c){let d=(await f.z.proposal.findMany({where:{projectUuid:b,companyUuid:a},orderBy:{createdAt:"desc"},select:{uuid:!0,title:!0,description:!0,inputType:!0,inputUuids:!0,documentDrafts:!0,taskDrafts:!0,status:!0,createdByUuid:!0,createdByType:!0,reviewedByUuid:!0,reviewNote:!0,reviewedAt:!0,createdAt:!0,updatedAt:!0}})).filter(a=>Array.isArray(a.inputUuids)&&a.inputUuids.includes(c));return Promise.all(d.map(a=>o(a)))}async function t({companyUuid:a,projectUuid:b,skip:c,take:d,status:e}){let g={projectUuid:b,companyUuid:a,...e&&{status:e}},[h,i]=await Promise.all([f.z.proposal.findMany({where:g,skip:c,take:d,orderBy:{createdAt:"desc"},select:{uuid:!0,title:!0,description:!0,inputType:!0,inputUuids:!0,documentDrafts:!0,taskDrafts:!0,status:!0,createdByUuid:!0,createdByType:!0,reviewedByUuid:!0,reviewNote:!0,reviewedAt:!0,createdAt:!0,updatedAt:!0}}),f.z.proposal.count({where:g})]);return{proposals:await Promise.all(h.map(a=>o(a))),total:i}}async function u(a,b){return f.z.proposal.findFirst({where:{uuid:b,companyUuid:a}})}async function v(a){let b=a.documentDrafts?.map(m),c=a.taskDrafts?.map(n),d=await f.z.proposal.create({data:{companyUuid:a.companyUuid,projectUuid:a.projectUuid,title:a.title,description:a.description,inputType:a.inputType,inputUuids:a.inputUuids,...b&&{documentDrafts:b},...c&&{taskDrafts:c},status:"draft",createdByUuid:a.createdByUuid,createdByType:a.createdByType||"agent"},select:{uuid:!0,title:!0,description:!0,inputType:!0,inputUuids:!0,documentDrafts:!0,taskDrafts:!0,status:!0,createdByUuid:!0,createdByType:!0,reviewedByUuid:!0,reviewNote:!0,reviewedAt:!0,createdAt:!0,updatedAt:!0}});return i.B.emitChange({companyUuid:a.companyUuid,projectUuid:a.projectUuid,entityType:"proposal",entityUuid:d.uuid,action:"created"}),o(d)}async function w(a,b,c,d){let e=await f.z.proposal.findFirst({where:{uuid:a,companyUuid:b}});if(!e)throw Error("Proposal not found");let{updatedProposal:g,materializedTasks:h,materializedDocuments:l}=await f.z.$transaction(async b=>{let f=await b.proposal.update({where:{uuid:a},data:{status:"approved",reviewedByUuid:c,reviewNote:d||null,reviewedAt:new Date},include:{project:{select:{uuid:!0,name:!0}}}}),g=e.documentDrafts,h=e.taskDrafts,i=[],l=[];if(g&&g.length>0)for(let a of g){let b=await (0,j.oS)(e.companyUuid,e.projectUuid,e.uuid,e.createdByUuid,a);l.push({draftUuid:a.uuid,documentUuid:b.uuid,title:b.title})}if(h&&h.length>0){for(let a of h)if(a.acceptanceCriteriaItems&&a.acceptanceCriteriaItems.length>0)for(let b=0;b<a.acceptanceCriteriaItems.length;b++){let c=a.acceptanceCriteriaItems[b];if(!c.description||"string"!=typeof c.description||0===c.description.trim().length)throw Error(`Task draft "${a.title}": acceptanceCriteriaItems[${b}] has an empty or invalid description`)}let{draftToTaskUuidMap:a}=await (0,k.RJ)(e.companyUuid,e.projectUuid,e.uuid,e.createdByUuid,h);for(let b of h){let c=a.get(b.uuid);c&&i.push({draftUuid:b.uuid,taskUuid:c,title:b.title})}for(let c of h){if(c.dependsOnDraftUuids&&c.dependsOnDraftUuids.length>0){let d=a.get(c.uuid);if(!d)continue;for(let e of c.dependsOnDraftUuids){let c=a.get(e);c&&await b.taskDependency.create({data:{taskUuid:d,dependsOnUuid:c}})}}if(c.acceptanceCriteriaItems&&c.acceptanceCriteriaItems.length>0){let d=a.get(c.uuid);if(!d)continue;await b.acceptanceCriterion.createMany({data:c.acceptanceCriteriaItems.map((a,b)=>({taskUuid:d,description:a.description.trim(),required:a.required??!0,sortOrder:b}))})}}}return{updatedProposal:f,materializedTasks:i,materializedDocuments:l}});i.B.emitChange({companyUuid:e.companyUuid,projectUuid:e.projectUuid,entityType:"proposal",entityUuid:a,action:"updated"});let m=await o(g);return h.length>0&&(m.materializedTasks=h),l.length>0&&(m.materializedDocuments=l),m}async function x(a,b,c){let d=await f.z.proposal.update({where:{uuid:a},data:{status:"draft",reviewedByUuid:b,reviewNote:c,reviewedAt:new Date},include:{project:{select:{uuid:!0,name:!0}}}});return i.B.emitChange({companyUuid:d.companyUuid,projectUuid:d.projectUuid,entityType:"proposal",entityUuid:d.uuid,action:"updated"}),o(d)}async function y(a,b,c){let d=await f.z.proposal.update({where:{uuid:a},data:{status:"closed",reviewedByUuid:b,reviewNote:c,reviewedAt:new Date},include:{project:{select:{uuid:!0,name:!0}}}});return i.B.emitChange({companyUuid:d.companyUuid,projectUuid:d.projectUuid,entityType:"proposal",entityUuid:d.uuid,action:"updated"}),o(d)}async function z(a,b){let c=await f.z.proposal.findFirst({where:{uuid:a,companyUuid:b}});if(!c)throw Error("Proposal not found");await f.z.proposal.delete({where:{uuid:a}}),i.B.emitChange({companyUuid:c.companyUuid,projectUuid:c.projectUuid,entityType:"proposal",entityUuid:c.uuid,action:"deleted"})}async function A(a,b){let c=await f.z.proposal.findFirst({where:{uuid:a,companyUuid:b}});if(!c)throw Error("Proposal not found");if("draft"!==c.status)throw Error("Only draft proposals can be submitted for review");let d=await p(b,a);if(!d.valid){let a=d.issues.map(a=>`[${a.level}] ${a.message}`);throw Error(`Proposal validation failed:
|
|
2
|
-
${a.join("\n")}`)}let e=await f.z.proposal.update({where:{uuid:a},data:{status:"pending"},include:{project:{select:{uuid:!0,name:!0}}}});return i.B.emitChange({companyUuid:e.companyUuid,projectUuid:e.projectUuid,entityType:"proposal",entityUuid:e.uuid,action:"updated"}),
|
|
1
|
+
"use strict";exports.id=8479,exports.ids=[8479],exports.modules={1284:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.r(b),c.d(b,{"406c09f1fb889b1607ec79823088008667e27a450c":()=>e.v5,"408e7d2b3f6d6158c95860a7adf885fe78e79eb6a7":()=>f.c,"40d6a34177f9c4da3a912c04641793a7d06aca2697":()=>e.Dv,"6019168fa36dbaabc1ab6074c8dfcec6fe090d3465":()=>f.f,"6062fb32640da63dd5c6a61bf200752e626ac4e3e1":()=>e.Tg});var e=c(22299),f=c(61915),g=a([e,f]);[e,f]=g.then?(await g)():g,d()}catch(a){d(a)}})},35198:(a,b,c)=>{c.d(b,{BT:()=>i,Wu:()=>k,X9:()=>j,ZB:()=>h,Zp:()=>f,aR:()=>g,wL:()=>l});var d=c(10837);c(21968);var e=c(96307);function f({className:a,...b}){return(0,d.jsx)("div",{"data-slot":"card",className:(0,e.cn)("bg-card text-card-foreground flex flex-col gap-6 rounded-xl border py-6 shadow-sm",a),...b})}function g({className:a,...b}){return(0,d.jsx)("div",{"data-slot":"card-header",className:(0,e.cn)("@container/card-header grid auto-rows-min grid-rows-[auto_auto] items-start gap-2 px-6 has-data-[slot=card-action]:grid-cols-[1fr_auto] [.border-b]:pb-6",a),...b})}function h({className:a,...b}){return(0,d.jsx)("div",{"data-slot":"card-title",className:(0,e.cn)("leading-none font-semibold",a),...b})}function i({className:a,...b}){return(0,d.jsx)("div",{"data-slot":"card-description",className:(0,e.cn)("text-muted-foreground text-sm",a),...b})}function j({className:a,...b}){return(0,d.jsx)("div",{"data-slot":"card-action",className:(0,e.cn)("col-start-2 row-span-2 row-start-1 self-start justify-self-end",a),...b})}function k({className:a,...b}){return(0,d.jsx)("div",{"data-slot":"card-content",className:(0,e.cn)("px-6",a),...b})}function l({className:a,...b}){return(0,d.jsx)("div",{"data-slot":"card-footer",className:(0,e.cn)("flex items-center px-6 [.border-t]:pt-6",a),...b})}},61915:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{c:()=>n,f:()=>m});var e=c(2613);c(50785);var f=c(5562),g=c(9259),h=c(97879),i=c(33994),j=c(97307),k=c(12217),l=a([g,h,i]);async function m(a,b){let c=await (0,g.d)();if(!c)return{success:!1,error:"Unauthorized"};try{if(!await (0,i.Yi)(c.companyUuid,a))return{success:!1,error:"Project not found"};if(!b.title||""===b.title.trim())return{success:!1,error:"Title is required"};if(!b.inputUuids||0===b.inputUuids.length)return{success:!1,error:"Input sources are required"};if("idea"===b.inputType&&!(await (0,h.AU)(c.companyUuid,b.inputUuids,c.actorUuid,c.type)).valid)return{success:!1,error:"You can only create proposals from ideas assigned to you"};let d=await (0,h.X2)({companyUuid:c.companyUuid,projectUuid:a,title:b.title.trim(),description:b.description?.trim()||null,inputType:b.inputType,inputUuids:b.inputUuids,documentDrafts:b.documentDrafts,taskDrafts:b.taskDrafts,createdByUuid:c.actorUuid,createdByType:"user"});return(0,f.revalidatePath)(`/projects/${a}/proposals`),{success:!0,proposal:d}}catch(a){return j.A.error({err:a},"Failed to create proposal"),{success:!1,error:a instanceof Error?a.message:"Failed to create proposal"}}}async function n(a){let b=await (0,g.d)();if(!b)return{success:!1,error:"Unauthorized"};try{let{proposals:c}=await (0,h.wV)({companyUuid:b.companyUuid,projectUuid:a,skip:0,take:1e3});return{success:!0,data:c}}catch(a){return j.A.error({err:a},"Failed to fetch proposals"),{success:!1,error:"Failed to fetch proposals"}}}[g,h,i]=l.then?(await l)():l,(0,k.D)([m,n]),(0,e.A)(m,"6019168fa36dbaabc1ab6074c8dfcec6fe090d3465",null),(0,e.A)(n,"408e7d2b3f6d6158c95860a7adf885fe78e79eb6a7",null),d()}catch(a){d(a)}})},97879:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{AU:()=>p,CA:()=>A,Eh:()=>C,FD:()=>y,IV:()=>v,LJ:()=>w,M9:()=>z,MN:()=>x,PK:()=>s,X2:()=>t,e1:()=>o,fS:()=>q,gF:()=>u,gT:()=>B,lh:()=>E,nW:()=>D,wV:()=>r});var e=c(55511),f=c(71255),g=c(69996),h=c(92633),i=c(62729),j=a([f,h]);function k(a){return{...a,uuid:a.uuid||(0,e.randomUUID)()}}function l(a){return{...a,uuid:a.uuid||(0,e.randomUUID)()}}async function m(a){let b="user"===a.createdByType?"user":"agent",[c,d]=await Promise.all([(0,h.LS)(a.createdByUuid,b),(0,h.SJ)(a.reviewedByUuid,a.reviewNote,a.reviewedAt)]),e={uuid:a.uuid,title:a.title,description:a.description,inputType:a.inputType,inputUuids:a.inputUuids,documentDrafts:a.documentDrafts,taskDrafts:a.taskDrafts,status:a.status,createdBy:c,createdByType:a.createdByType,review:d,createdAt:a.createdAt.toISOString(),updatedAt:a.updatedAt.toISOString()};return a.project&&(e.project=a.project),e}async function n(a,b){let c=await f.z.proposal.findFirst({where:{uuid:b,companyUuid:a}});if(!c)throw Error("Proposal not found");let d=[],e=c.documentDrafts||[],g=c.taskDrafts||[],h=c.inputUuids||[];for(let a of(0===e.length&&d.push({id:"E1",level:"error",message:"Proposal must contain at least one document draft"}),e))(!a.content||a.content.length<100)&&d.push({id:"E2",level:"error",message:`Document draft "${a.title}" must have content with at least 100 characters`,field:a.title});if(0===g.length&&d.push({id:"E3",level:"error",message:"Proposal must contain at least one task draft"}),0===h.length&&d.push({id:"E4",level:"error",message:"Proposal must have at least one input (idea or other source)"}),"idea"===c.inputType&&h.length>0)for(let b of(await f.z.idea.findMany({where:{uuid:{in:h},companyUuid:a},select:{uuid:!0,title:!0,elaborationStatus:!0}})))"resolved"!==b.elaborationStatus&&d.push({id:"E5",level:"error",message:`Input idea "${b.title}" has unresolved elaboration (status: ${b.elaborationStatus})`,field:b.title});for(let a of(e.some(a=>"tech_design"===a.type)||d.push({id:"W1",level:"warning",message:"Proposal should contain at least one tech design document draft"}),g))a.description&&0!==a.description.trim().length||d.push({id:"W2",level:"warning",message:`Task draft "${a.title}" is missing a description`,field:a.title});for(let a of g)a.acceptanceCriteriaItems&&0!==a.acceptanceCriteriaItems.length||d.push({id:"E-AC",level:"error",message:`Task draft "${a.title}" is missing acceptance criteria (structured items required)`,field:a.title});for(let a of(g.length>=2&&(g.some(a=>a.dependsOnDraftUuids&&a.dependsOnDraftUuids.length>0)||d.push({id:"W4",level:"warning",message:"When there are multiple tasks, at least one should declare dependencies"})),c.description&&0!==c.description.trim().length||d.push({id:"W5",level:"warning",message:"Proposal description should not be empty"}),g))a.priority||d.push({id:"I1",level:"info",message:`Task draft "${a.title}" does not have a priority set`,field:a.title});for(let a of g)null==a.storyPoints&&d.push({id:"I2",level:"info",message:`Task draft "${a.title}" does not have story points set`,field:a.title});return{valid:!d.some(a=>"error"===a.level),issues:d}}async function o(a,b){let c=await f.z.proposal.findMany({where:{companyUuid:a,inputType:"idea"},select:{uuid:!0,title:!0,inputUuids:!0}}),d=[];for(let a of c){let c=a.inputUuids;for(let e of b)c.includes(e)&&d.push({uuid:e,proposalUuid:a.uuid,proposalTitle:a.title})}return{available:0===d.length,usedIdeas:d}}async function p(a,b,c,d){let e=await f.z.idea.findMany({where:{uuid:{in:b},companyUuid:a},select:{uuid:!0,assigneeType:!0,assigneeUuid:!0}}),g=[];for(let a of e)(a.assigneeType!==d||a.assigneeUuid!==c)&&g.push(a.uuid);return{valid:0===g.length,unassignedIdeas:g}}async function q(a,b,c){let d=(await f.z.proposal.findMany({where:{projectUuid:b,companyUuid:a},orderBy:{createdAt:"desc"},select:{uuid:!0,title:!0,description:!0,inputType:!0,inputUuids:!0,documentDrafts:!0,taskDrafts:!0,status:!0,createdByUuid:!0,createdByType:!0,reviewedByUuid:!0,reviewNote:!0,reviewedAt:!0,createdAt:!0,updatedAt:!0}})).filter(a=>Array.isArray(a.inputUuids)&&a.inputUuids.includes(c));return Promise.all(d.map(a=>m(a)))}async function r({companyUuid:a,projectUuid:b,skip:c,take:d,status:e}){let g={projectUuid:b,companyUuid:a,...e&&{status:e}},[h,i]=await Promise.all([f.z.proposal.findMany({where:g,skip:c,take:d,orderBy:{createdAt:"desc"},select:{uuid:!0,title:!0,description:!0,inputType:!0,inputUuids:!0,documentDrafts:!0,taskDrafts:!0,status:!0,createdByUuid:!0,createdByType:!0,reviewedByUuid:!0,reviewNote:!0,reviewedAt:!0,createdAt:!0,updatedAt:!0}}),f.z.proposal.count({where:g})]);return{proposals:await Promise.all(h.map(a=>m(a))),total:i}}async function s(a,b){return f.z.proposal.findFirst({where:{uuid:b,companyUuid:a}})}async function t(a){let b=a.documentDrafts?.map(k),c=a.taskDrafts?.map(l),d=await f.z.proposal.create({data:{companyUuid:a.companyUuid,projectUuid:a.projectUuid,title:a.title,description:a.description,inputType:a.inputType,inputUuids:a.inputUuids,...b&&{documentDrafts:b},...c&&{taskDrafts:c},status:"draft",createdByUuid:a.createdByUuid,createdByType:a.createdByType||"agent"},select:{uuid:!0,title:!0,description:!0,inputType:!0,inputUuids:!0,documentDrafts:!0,taskDrafts:!0,status:!0,createdByUuid:!0,createdByType:!0,reviewedByUuid:!0,reviewNote:!0,reviewedAt:!0,createdAt:!0,updatedAt:!0}});return i.B.emitChange({companyUuid:a.companyUuid,projectUuid:a.projectUuid,entityType:"proposal",entityUuid:d.uuid,action:"created"}),m(d)}async function u(a,b,c,d){let e=await f.z.proposal.findFirst({where:{uuid:a,companyUuid:b}});if(!e)throw Error("Proposal not found");let{updatedProposal:g,materializedTasks:h,materializedDocuments:j}=await f.z.$transaction(async b=>{let f=await b.proposal.update({where:{uuid:a},data:{status:"approved",reviewedByUuid:c,reviewNote:d||null,reviewedAt:new Date},include:{project:{select:{uuid:!0,name:!0}}}}),g=e.documentDrafts,h=e.taskDrafts,i=[],j=[];if(g&&g.length>0){let a=await b.document.createManyAndReturn({data:g.map(a=>({companyUuid:e.companyUuid,projectUuid:e.projectUuid,type:a.type||"prd",title:a.title,content:a.content||null,version:1,proposalUuid:e.uuid,createdByUuid:e.createdByUuid})),select:{uuid:!0,title:!0}});for(let b=0;b<g.length;b++)j.push({draftUuid:g[b].uuid,documentUuid:a[b].uuid,title:a[b].title})}if(h&&h.length>0){for(let a of h)if(a.acceptanceCriteriaItems&&a.acceptanceCriteriaItems.length>0)for(let b=0;b<a.acceptanceCriteriaItems.length;b++){let c=a.acceptanceCriteriaItems[b];if(!c.description||"string"!=typeof c.description||0===c.description.trim().length)throw Error(`Task draft "${a.title}": acceptanceCriteriaItems[${b}] has an empty or invalid description`)}let a=await b.task.createManyAndReturn({data:h.map(a=>({companyUuid:e.companyUuid,projectUuid:e.projectUuid,title:a.title,description:a.description||null,status:"open",priority:a.priority||"medium",storyPoints:a.storyPoints||null,acceptanceCriteria:a.acceptanceCriteria||null,proposalUuid:e.uuid,createdByUuid:e.createdByUuid})),select:{uuid:!0,title:!0}}),c=new Map;for(let b=0;b<h.length;b++)c.set(h[b].uuid,a[b].uuid),i.push({draftUuid:h[b].uuid,taskUuid:a[b].uuid,title:a[b].title});let d=[];for(let a of h)if(a.dependsOnDraftUuids&&a.dependsOnDraftUuids.length>0){let b=c.get(a.uuid);if(!b)continue;for(let e of a.dependsOnDraftUuids){let a=c.get(e);a&&d.push({taskUuid:b,dependsOnUuid:a})}}d.length>0&&await b.taskDependency.createMany({data:d});let f=[];for(let a of h)if(a.acceptanceCriteriaItems&&a.acceptanceCriteriaItems.length>0){let b=c.get(a.uuid);if(!b)continue;for(let c=0;c<a.acceptanceCriteriaItems.length;c++){let d=a.acceptanceCriteriaItems[c];f.push({taskUuid:b,description:d.description.trim(),required:d.required??!0,sortOrder:c})}}f.length>0&&await b.acceptanceCriterion.createMany({data:f})}return{updatedProposal:f,materializedTasks:i,materializedDocuments:j}},{timeout:15e3});i.B.emitChange({companyUuid:e.companyUuid,projectUuid:e.projectUuid,entityType:"proposal",entityUuid:a,action:"updated"});let k=await m(g);return h.length>0&&(k.materializedTasks=h),j.length>0&&(k.materializedDocuments=j),k}async function v(a,b,c){let d=await f.z.proposal.update({where:{uuid:a},data:{status:"draft",reviewedByUuid:b,reviewNote:c,reviewedAt:new Date},include:{project:{select:{uuid:!0,name:!0}}}});return i.B.emitChange({companyUuid:d.companyUuid,projectUuid:d.projectUuid,entityType:"proposal",entityUuid:d.uuid,action:"updated"}),m(d)}async function w(a,b,c){let d=await f.z.proposal.update({where:{uuid:a},data:{status:"closed",reviewedByUuid:b,reviewNote:c,reviewedAt:new Date},include:{project:{select:{uuid:!0,name:!0}}}});return i.B.emitChange({companyUuid:d.companyUuid,projectUuid:d.projectUuid,entityType:"proposal",entityUuid:d.uuid,action:"updated"}),m(d)}async function x(a,b){let c=await f.z.proposal.findFirst({where:{uuid:a,companyUuid:b}});if(!c)throw Error("Proposal not found");await f.z.proposal.delete({where:{uuid:a}}),i.B.emitChange({companyUuid:c.companyUuid,projectUuid:c.projectUuid,entityType:"proposal",entityUuid:c.uuid,action:"deleted"})}async function y(a,b){let c=await f.z.proposal.findFirst({where:{uuid:a,companyUuid:b}});if(!c)throw Error("Proposal not found");if("draft"!==c.status)throw Error("Only draft proposals can be submitted for review");let d=await n(b,a);if(!d.valid){let a=d.issues.map(a=>`[${a.level}] ${a.message}`);throw Error(`Proposal validation failed:
|
|
2
|
+
${a.join("\n")}`)}let e=await f.z.proposal.update({where:{uuid:a},data:{status:"pending"},include:{project:{select:{uuid:!0,name:!0}}}});return i.B.emitChange({companyUuid:e.companyUuid,projectUuid:e.projectUuid,entityType:"proposal",entityUuid:e.uuid,action:"updated"}),m(e)}async function z(a,b,c){let d=await f.z.proposal.findFirst({where:{uuid:a,companyUuid:b,status:"draft"}});if(!d)throw Error("Proposal not found or not in draft status");let e=d.documentDrafts||[],g=k(c),h=[...e,g],j=await f.z.proposal.update({where:{uuid:a},data:{documentDrafts:h},include:{project:{select:{uuid:!0,name:!0}}}});return i.B.emitChange({companyUuid:b,projectUuid:d.projectUuid,entityType:"proposal",entityUuid:a,action:"updated"}),m(j)}async function A(a,b,c){let d=await f.z.proposal.findFirst({where:{uuid:a,companyUuid:b,status:"draft"}});if(!d)throw Error("Proposal not found or not in draft status");let e=d.taskDrafts||[],g=l(c),h=[...e,g],j=await f.z.proposal.update({where:{uuid:a},data:{taskDrafts:h},include:{project:{select:{uuid:!0,name:!0}}}});return i.B.emitChange({companyUuid:b,projectUuid:d.projectUuid,entityType:"proposal",entityUuid:a,action:"updated"}),m(j)}async function B(a,b,c,d){let e=await f.z.proposal.findFirst({where:{uuid:a,companyUuid:b,status:"draft"}});if(!e)throw Error("Proposal not found or not in draft status");let g=e.documentDrafts||[],h=g.findIndex(a=>a.uuid===c);if(-1===h)throw Error("Document draft not found");g[h]={...g[h],...d};let j=await f.z.proposal.update({where:{uuid:a},data:{documentDrafts:g},include:{project:{select:{uuid:!0,name:!0}}}});return i.B.emitChange({companyUuid:b,projectUuid:e.projectUuid,entityType:"proposal",entityUuid:a,action:"updated"}),m(j)}async function C(a,b,c,d){let e=await f.z.proposal.findFirst({where:{uuid:a,companyUuid:b,status:"draft"}});if(!e)throw Error("Proposal not found or not in draft status");let g=e.taskDrafts||[],h=g.findIndex(a=>a.uuid===c);if(-1===h)throw Error("Task draft not found");g[h]={...g[h],...d};let j=await f.z.proposal.update({where:{uuid:a},data:{taskDrafts:g},include:{project:{select:{uuid:!0,name:!0}}}});return i.B.emitChange({companyUuid:b,projectUuid:e.projectUuid,entityType:"proposal",entityUuid:a,action:"updated"}),m(j)}async function D(a,b,c){let d=await f.z.proposal.findFirst({where:{uuid:a,companyUuid:b,status:"draft"}});if(!d)throw Error("Proposal not found or not in draft status");let e=(d.documentDrafts||[]).filter(a=>a.uuid!==c),h=await f.z.proposal.update({where:{uuid:a},data:{documentDrafts:e.length>0?e:g.D1.Fj},include:{project:{select:{uuid:!0,name:!0}}}});return i.B.emitChange({companyUuid:b,projectUuid:d.projectUuid,entityType:"proposal",entityUuid:a,action:"updated"}),m(h)}async function E(a,b,c){let d=await f.z.proposal.findFirst({where:{uuid:a,companyUuid:b,status:"draft"}});if(!d)throw Error("Proposal not found or not in draft status");let e=(d.taskDrafts||[]).filter(a=>a.uuid!==c).map(a=>({...a,dependsOnDraftUuids:a.dependsOnDraftUuids?.filter(a=>a!==c)})),h=await f.z.proposal.update({where:{uuid:a},data:{taskDrafts:e.length>0?e:g.D1.Fj},include:{project:{select:{uuid:!0,name:!0}}}});return i.B.emitChange({companyUuid:b,projectUuid:d.projectUuid,entityType:"proposal",entityUuid:a,action:"updated"}),m(h)}[f,h]=j.then?(await j)():j,d()}catch(a){d(a)}})}};
|