1!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},t=(new e.Error).stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="29f57e3d-8df9-4c5c-901b-a7c7f3f65b23",e._sentryDebugIdIdentifier="sentry-dbid-29f57e3d-8df9-4c5c-901b-a7c7f3f65b23")}catch(e){}}();"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[3323],{93323:(e,t,n)=>{n.r(t),n.d(t,{DealBoard:()=>v});var r=n(95155),a=n(12115),s=n(44521),l=n(18720),o=n(64269),i=n(5074),d=n(61581),c=n(7783),u=n(18380);function m(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:new Date().toISOString(),n=Date.parse(e.slice(0,10)),r=Date.parse(t.slice(0,10));return Number.isFinite(n)&&Number.isFinite(r)?Math.max(1,Math.round((r-n)/864e5)):0}function x(e){let{deal:t,members:n,onOpen:a,overlay:l=!1}=e,{attributes:i,listeners:x,setNodeRef:p,isDragging:f}=(0,s.PM)({id:t.id,disabled:l}),h=(0,d.Je)({nextStep:t.nextStep,nextStepDue:t.nextStepDue,stage:t.stage,stageEnteredAt:t.stageEnteredAt,lastActivityAt:t.lastActivityAt});return(0,r.jsxs)("div",{ref:l?void 0:p,...l?{}:x,...l?{}:i,onClick:()=>null==a?void 0:a(t.id),className:(0,o.cn)("relative rounded-lg border border-border bg-surface p-3 [touch-action:manipulation]",l?"rotate-2 scale-[1.02] cursor-grabbing shadow-e2":"cursor-grab transition-colors duration-motion hover:border-border-strong",f&&!l&&"opacity-40"),children:[t.hasLiveSignals&&(0,r.jsx)("span",{"aria-hidden":"true",className:"absolute left-0 top-2 bottom-2 w-0.5 rounded-full bg-signal"}),(0,r.jsxs)("div",{className:"flex items-center gap-1.5",children:[(0,r.jsx)(c.StoreFavicon,{domain:t.domain,name:t.accountName,size:16}),(0,r.jsx)("span",{className:"min-w-0 flex-1 truncate text-body-sm font-medium text-text",children:t.name}),null!=t.value?(0,r.jsxs)("span",{className:"shrink-0 text-caption font-medium tabular-nums text-text",children:[(0,u.Pp)(t.value,t.currency),"retainer"===t.dealKind?(0,r.jsx)("span",{className:"text-text-subtle",children:"/mo"}):null]}):null]}),(0,r.jsx)("div",{className:"truncate text-caption",children:t.nextStep?(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("span",{className:"text-text-muted",children:t.nextStep}),t.nextStepDue&&(0,r.jsxs)(r.Fragment,{children:[" \xb7 ",(0,r.jsx)("span",{className:h.overdue?"font-medium text-danger":"text-text-subtle",children:h.overdue?"".concat(m(t.nextStepDue),"d overdue"):t.nextStepDue})]})]}):(0,r.jsx)("span",{className:"text-text-subtle",children:"No next step"})}),(0,r.jsx)("div",{className:"flex flex-wrap items-center gap-1.5",children:h.overdue?(0,r.jsxs)("span",{className:"rounded-md bg-signal-soft px-1.5 py-0.5 text-micro font-medium text-signal-fg",children:[m(t.nextStepDue),"d overdue"]}):h.missingNextStep?(0,r.jsx)("span",{className:"rounded-md border border-border px-1.5 py-0.5 text-micro text-text-muted",children:"No next step"}):h.stale?(0,r.jsx)("span",{className:"rounded-md border border-border px-1.5 py-0.5 text-micro text-text-muted",children:"Stale"}):(0,r.jsx)("span",{className:"text-micro text-text-subtle",children:"On track"})})]})}var p=n(47719);function f(e){let{stage:t,bucket:n,members:a,onOpen:l}=e,{setNodeRef:i,isOver:d}=(0,s.zM)({id:t}),c=[...n.totals].sort((e,t)=>t.value-e.value),m=[...n.monthlyTotals].sort((e,t)=>t.value-e.value),f=c[0],h=m[0],g=[c.length?"One-off: ".concat(c.map(e=>(0,u.Pp)(e.value,e.currency)).join(" \xb7 ")):null,m.length?"Monthly: ".concat(m.map(e=>"".concat((0,u.Pp)(e.value,e.currency),"/mo")).join(" \xb7 ")):null].filter(Boolean).join("; ");return(0,r.jsxs)("div",{ref:i,className:(0,o.cn)("min-w-[14rem] flex-1 snap-start rounded-lg border border-border bg-surface-sunken",d&&"ring-2 ring-primary"),children:[(0,r.jsxs)("div",{className:"px-3 py-2.5",title:g||void 0,children:[(0,r.jsx)("div",{className:"text-body-sm font-medium capitalize text-text",children:(0,p.Hn)(t)}),(0,r.jsxs)("div",{className:"mt-0.5 text-micro tabular-nums text-text-subtle",children:[n.count," ",1===n.count?"deal":"deals",f?(0,r.jsxs)(r.Fragment,{children:[" \xb7 ",(0,r.jsx)("span",{className:"text-text",children:(0,u.Pp)(f.value,f.currency)})]}):null,h?(0,r.jsxs)(r.Fragment,{children:[f?" + ":" \xb7 ",(0,r.jsxs)("span",{className:"text-text",children:[(0,u.Pp)(h.value,h.currency),(0,r.jsx)("span",{className:"text-text-subtle",children:"/mo"})]})]}):null]})]}),(0,r.jsxs)("div",{className:"min-h-24 space-y-2 px-2 pb-2",children:[n.rows.map(e=>(0,r.jsx)(x,{deal:e,members:a,onOpen:l},e.id)),0===n.rows.length&&(0,r.jsx)("p",{className:"px-1 py-6 text-center text-body-sm text-text-subtle",children:"No deals"})]})]})}let h=new Set(i.vG),g=(e,t)=>{let{context:n}=t,r=n.collisionRect;if(!r)return;let a=e.code;if("ArrowUp"===a||"ArrowDown"===a)return e.preventDefault(),{x:r.left,y:r.top+("ArrowUp"===a?-80:80)};if("ArrowLeft"===a||"ArrowRight"===a){e.preventDefault();let t=Array.from(n.droppableContainers.values()).filter(e=>h.has(String(e.id))&&e.rect.current).map(e=>({id:String(e.id),rect:e.rect.current})).sort((e,t)=>
1e.rect.left-t.rect.left);if(0===t.length)return;let s=r.left+r.width/2,l=0,o=1/0;t.forEach((e,t)=>{let n=Math.abs(e.rect.left+e.rect.width/2-s);n<o&&(o=n,l=t)});let i="ArrowRight"===a?Math.min(l+1,t.length-1):Math.max(l-1,0),d=t[i].rect;return{x:d.left+d.width/2-r.width/2,y:r.top}}};var b=n(67692);function v(e){var t;let{deals:n,members:c,onUpdated:u,onOpen:m}=e,p=(0,a.useMemo)(()=>(function(e,t){let n={};for(let e of i.vG)n[e]={rows:[],count:0,totals:[],monthlyTotals:[],hiddenClosed:0};let r=t.getTime()-2592e6;for(let t of e){if(t.archivedAt)continue;let e=n[t.stage];if(e){if(("won"===t.stage||"lost"===t.stage)&&t.closedAt&&Date.parse(t.closedAt)<r){e.hiddenClosed+=1;continue}e.rows.push(t)}}for(let e of i.vG){let t=n[e];t.rows.sort((e,t)=>Date.parse(t.stageEnteredAt)-Date.parse(e.stageEnteredAt)),t.count=t.rows.length;let r=(0,d.x6)(t.rows);t.totals=r.oneOff,t.monthlyTotals=r.monthly}return n})(n,new Date),[n]),[h,v]=(0,a.useState)(null),[N,j]=(0,a.useState)(!0),w=(0,a.useRef)(!1),y=(0,s.FR)((0,s.MS)(s.AN,{activationConstraint:{distance:6}}),(0,s.MS)(s.IG,{activationConstraint:{delay:250,tolerance:8}}),(0,s.MS)(s.uN,{coordinateGetter:g})),S=h&&null!=(t=n.find(e=>e.id===h))?t:null,D=e=>{w.current||m(e)};return(0,r.jsx)(r.Fragment,{children:(0,r.jsxs)(s.Mp,{sensors:y,onDragStart:function(e){w.current=!0,v(String(e.active.id)),j(!1)},onDragEnd:function(e){var t;v(null),j(!0),setTimeout(()=>{w.current=!1},0);let r=null==(t=e.over)?void 0:t.id;if(!r)return;let a=String(r),s=n.find(t=>t.id===String(e.active.id));s&&i.M.includes(a)&&s.stage!==a&&(u({...s,stage:a}),(0,b.Uv)(s,{stage:a}).then(e=>{if(e.ok)u({...s,...e.row,accountName:s.accountName,domain:s.domain});else{var t;u("conflict"===e.kind?{...s,...e.freshRow,accountName:s.accountName,domain:s.domain}:s),l.oR.error("conflict"===e.kind?"A teammate moved this deal. The card was refreshed.":null!=(t=e.message)?t:"Could not move the deal.")}}))},onDragCancel:()=>{v(null),j(!0)},children:[(0,r.jsx)("div",{className:(0,o.cn)("flex gap-3 overflow-x-auto pb-3 lg:snap-none",N&&"snap-x"),children:i.M.map(e=>(0,r.jsx)(f,{stage:e,bucket:p[e],members:c,onOpen:D},e))}),(0,r.jsx)(s.Hd,{children:S&&(0,r.jsx)(x,{deal:S,members:c,overlay:!0})})]})})}}}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.