specrails-hub 1.22.0 → 1.23.0

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.
Files changed (43) hide show
  1. package/README.md +25 -3
  2. package/client/dist/assets/ActivityFeedPage-CpJodidG.js +1 -0
  3. package/client/dist/assets/AnalyticsPage-CXjTf3Sy.js +4 -0
  4. package/client/dist/assets/BarChart-BOsGtbqJ.js +33 -0
  5. package/client/dist/assets/DocsDialog-leCSaW_5.js +11 -0
  6. package/client/dist/assets/DocsPage-Cr6tjqxJ.js +11 -0
  7. package/client/dist/assets/ExportDropdown-DrRETS4C.js +1 -0
  8. package/client/dist/assets/HubAnalyticsPage-BKbvhXP2.js +1 -0
  9. package/client/dist/assets/HubOverviewPage-DQKARJ_f.js +1 -0
  10. package/client/dist/assets/JobDetailPage-D373P2wh.js +16 -0
  11. package/client/dist/assets/JobsPage-BJjMGRZk.js +1 -0
  12. package/client/dist/assets/en-US-DUO_uYan.js +1 -0
  13. package/client/dist/assets/index-DFp3-tao.js +112 -0
  14. package/client/dist/assets/index-Q9LLXgmf.css +2 -0
  15. package/client/dist/assets/{lib-Bs0a4O-2.js → lib-BaV4P009.js} +2 -2
  16. package/client/dist/assets/{useHub-CJSykCwQ.js → useHub-pbTRebEn.js} +1 -1
  17. package/client/dist/index.html +6 -5
  18. package/docs/product/tickets.md +170 -0
  19. package/package.json +1 -1
  20. package/server/dist/analytics.js +2 -2
  21. package/server/dist/chat-manager.js +8 -2
  22. package/server/dist/db.js +14 -1
  23. package/server/dist/docs-router.js +3 -1
  24. package/server/dist/project-registry.js +51 -1
  25. package/server/dist/project-router.js +42 -2
  26. package/server/dist/queue-manager.js +6 -1
  27. package/server/dist/rails-router.js +137 -0
  28. package/server/dist/rails-store.js +49 -0
  29. package/server/dist/ticket-store.js +1 -1
  30. package/server/dist/ticket-watcher.js +2 -2
  31. package/client/dist/assets/ActivityFeedPage-CuGuNi9J.js +0 -1
  32. package/client/dist/assets/AnalyticsPage-C5TnjVZM.js +0 -4
  33. package/client/dist/assets/DocsDialog-C_qXOHVZ.js +0 -11
  34. package/client/dist/assets/DocsPage-9q2a9m0b.js +0 -11
  35. package/client/dist/assets/HubAnalyticsPage-C1HRkceE.js +0 -1
  36. package/client/dist/assets/HubOverviewPage--NS37L98.js +0 -1
  37. package/client/dist/assets/JobDetailPage-Bp2ydYgk.js +0 -18
  38. package/client/dist/assets/PeriodSelector-CNweUkiH.js +0 -1
  39. package/client/dist/assets/index-DMvJNfmv.css +0 -2
  40. package/client/dist/assets/index-V5l1qIne.js +0 -152
  41. /package/client/dist/assets/{dracula-colors-BCHCzYjF.js → dracula-colors-B0g266RC.js} +0 -0
  42. /package/client/dist/assets/{useSharedWebSocket-B3JjQYKi.js → useSharedWebSocket-j0gqXR8o.js} +0 -0
  43. /package/client/dist/assets/{x-Cn1YKSd_.js → x-C53vXlx8.js} +0 -0
package/README.md CHANGED
@@ -7,6 +7,7 @@ A local dashboard and CLI for managing all your [specrails-core](https://github.
7
7
  - **Multi-project hub** — register multiple specrails projects and switch between them with browser-style tabs
8
8
  - **Live pipeline visualization** — see Architect, Developer, Reviewer, and Ship phases update in real-time
9
9
  - **Streaming logs** — all `claude` CLI output streamed via WebSocket to the browser
10
+ - **Ticket panel** — visual interface for local tickets with List, Kanban, and Post-it views; real-time sync with CLI agents
10
11
  - **Command launcher** — organized into Discovery (propose-spec, auto-propose specs, auto-select specs) and Delivery (implement, batch-implement) sections; other commands available in a collapsible group
11
12
  - **Analytics** — cost, duration, token usage, and throughput metrics per project
12
13
  - **Conversations** — full-page chat interface with Claude, scoped per project
@@ -85,7 +86,8 @@ A single Express process (port 4200) manages all projects. Each project gets its
85
86
  ```
86
87
 
87
88
  - **Tabs** — one per project, green dot when a job is active
88
- - **Home** — command grid (Discovery and Delivery sections), recent jobs, pipeline phase indicators
89
+ - **Home** — command grid (Discovery and Delivery sections), ticket panel, recent jobs, pipeline phase indicators
90
+ - **Tickets** — List, Kanban, and Post-it views of local tickets; real-time sync with CLI agents
89
91
  - **Analytics** — cost and token metrics
90
92
  - **Conversations** — Claude chat sessions scoped to the project
91
93
  - **Settings** (gear icon) — global hub configuration, registered projects
@@ -160,6 +162,12 @@ All under `/api/projects/:projectId/`:
160
162
  | POST | `/chat/conversations` | Create chat conversation |
161
163
  | GET | `/chat/conversations` | List conversations |
162
164
  | POST | `/hooks/events` | Pipeline phase notifications |
165
+ | GET | `/tickets` | List tickets (`?status=`, `?label=`, `?q=` filters supported) |
166
+ | GET | `/tickets/:id` | Get ticket by ID |
167
+ | POST | `/tickets` | Create ticket |
168
+ | PATCH | `/tickets/:id` | Update ticket fields |
169
+ | DELETE | `/tickets/:id` | Delete ticket |
170
+ | GET | `/integration-contract` | Read project integration-contract.json |
163
171
 
164
172
  ## Development
165
173
 
@@ -191,14 +199,16 @@ specrails-hub/
191
199
  │ ├── hub-db.ts # hub SQLite (project registry)
192
200
  │ ├── project-registry.ts # per-project context manager
193
201
  │ ├── hub-router.ts # /api/hub/* routes
194
- │ ├── project-router.ts # /api/projects/:id/* routes
202
+ │ ├── project-router.ts # /api/projects/:id/* routes (includes ticket endpoints)
203
+ │ ├── ticket-store.ts # local-tickets.json read/write with file locking
204
+ │ ├── ticket-watcher.ts # chokidar watcher → WebSocket broadcast
195
205
  │ ├── db.ts # per-project SQLite (jobs, events, chat)
196
206
  │ ├── queue-manager.ts # job queue per project
197
207
  │ ├── chat-manager.ts # Claude chat per project
198
208
  │ ├── config.ts # command discovery
199
209
  │ ├── hooks.ts # pipeline event handler
200
210
  │ ├── analytics.ts # metrics aggregation
201
- │ └── types.ts # shared TypeScript types
211
+ │ └── types.ts # shared TypeScript types (includes ticket WS messages)
202
212
  ├── client/
203
213
  │ └── src/
204
214
  │ ├── App.tsx
@@ -209,9 +219,18 @@ specrails-hub/
209
219
  │ │ ├── ProjectLayout.tsx # per-project wrapper
210
220
  │ │ ├── ProjectNavbar.tsx # Home/Analytics/Conversations nav
211
221
  │ │ ├── CommandGrid.tsx # command launcher
222
+ │ │ ├── TicketsSection.tsx # ticket panel container (view mode toggle)
223
+ │ │ ├── TicketListView.tsx # sortable table view
224
+ │ │ ├── TicketGridView.tsx # kanban drag-and-drop view
225
+ │ │ ├── TicketPostItView.tsx # sticky-note grid view
226
+ │ │ ├── TicketDetailModal.tsx # ticket editor modal
227
+ │ │ ├── CreateTicketModal.tsx # new ticket form
228
+ │ │ ├── TicketStatusIndicator.tsx # status dot, badge, border
229
+ │ │ ├── TicketContextMenu.tsx # right-click menu
212
230
  │ │ └── ...
213
231
  │ ├── hooks/
214
232
  │ │ ├── useHub.tsx # hub state context
233
+ │ │ ├── useTickets.ts # ticket CRUD + WS subscription + toast/glow
215
234
  │ │ ├── useChat.ts # chat operations
216
235
  │ │ ├── usePipeline.ts # pipeline phases
217
236
  │ │ └── useSharedWebSocket.tsx
@@ -240,6 +259,9 @@ The server broadcasts events over a single WebSocket connection. All project-sco
240
259
  | `log` | project | Streaming log line |
241
260
  | `phase` | project | Pipeline phase transition |
242
261
  | `queue_update` | project | Queue state change |
262
+ | `ticket_created` | project | New ticket created (via API or CLI) |
263
+ | `ticket_updated` | project | Ticket updated; if `ticket.id === 0`, signals a full external file change |
264
+ | `ticket_deleted` | project | Ticket deleted |
243
265
  | `hub.project_added` | hub | New project registered |
244
266
  | `hub.project_removed` | hub | Project unregistered |
245
267
 
@@ -0,0 +1 @@
1
+ import{n as e,o as t,r as n}from"./createLucideIcon-j4o5em8U.js";import"./react-dom-CzrF8Nvy.js";import{n as r}from"./useHub-pbTRebEn.js";import"./useSharedWebSocket-j0gqXR8o.js";import{C as i,D as a,N as o,O as s,P as c,t as l,v as u}from"./index-DFp3-tao.js";var d=t(n(),1),f=e();function p(e){let t=Date.now()-new Date(e).getTime(),n=Math.floor(t/1e3);if(n<60)return`${n}s ago`;let r=Math.floor(n/60);if(r<60)return`${r}m ago`;let i=Math.floor(r/60);return i<24?`${i}h ago`:`${Math.floor(i/24)}d ago`}function m({type:e}){switch(e){case`job_completed`:return(0,f.jsx)(s,{className:`w-4 h-4 text-green-500 flex-shrink-0`});case`job_failed`:return(0,f.jsx)(a,{className:`w-4 h-4 text-red-500 flex-shrink-0`});case`job_canceled`:return(0,f.jsx)(o,{className:`w-4 h-4 text-muted-foreground flex-shrink-0`});default:return(0,f.jsx)(u,{className:`w-4 h-4 text-blue-500 flex-shrink-0`})}}function h(e){switch(e){case`job_completed`:return`Completed`;case`job_failed`:return`Failed`;case`job_canceled`:return`Canceled`;default:return`Started`}}function g(e){switch(e){case`job_completed`:return`text-green-500`;case`job_failed`:return`text-red-500`;case`job_canceled`:return`text-muted-foreground`;default:return`text-blue-500`}}function _(){let{activeProjectId:e}=r(),{items:t,loading:n,hasMore:a,loadMore:o}=l({activeProjectId:e}),s=(0,d.useRef)(null);return(0,d.useEffect)(()=>{let e=s.current;if(!e)return;let t=new IntersectionObserver(e=>{e[0].isIntersecting&&a&&!n&&o()},{threshold:.1});return t.observe(e),()=>t.disconnect()},[a,n,o]),(0,f.jsxs)(`div`,{className:`flex flex-col h-full overflow-hidden`,children:[(0,f.jsxs)(`div`,{className:`flex items-center gap-2 px-4 py-3 border-b border-border bg-background/50`,children:[(0,f.jsx)(c,{className:`w-4 h-4 text-muted-foreground`}),(0,f.jsx)(`h1`,{className:`text-sm font-medium`,children:`Activity`})]}),(0,f.jsxs)(`div`,{className:`flex-1 overflow-y-auto`,children:[n&&t.length===0?(0,f.jsx)(`div`,{className:`flex items-center justify-center h-32`,children:(0,f.jsx)(i,{className:`w-4 h-4 animate-spin text-muted-foreground`})}):t.length===0?(0,f.jsxs)(`div`,{className:`flex flex-col items-center justify-center h-48 gap-2 text-muted-foreground`,children:[(0,f.jsx)(c,{className:`w-8 h-8 opacity-40`}),(0,f.jsx)(`p`,{className:`text-sm`,children:`No activity yet`}),(0,f.jsx)(`p`,{className:`text-xs opacity-70`,children:`Job events will appear here when jobs run`})]}):(0,f.jsx)(`ul`,{className:`divide-y divide-border/50`,children:t.map(e=>(0,f.jsxs)(`li`,{className:`flex items-center gap-3 px-4 py-2.5 hover:bg-accent/30 transition-colors`,children:[(0,f.jsx)(m,{type:e.type}),(0,f.jsxs)(`div`,{className:`flex-1 min-w-0`,children:[(0,f.jsx)(`p`,{className:`text-xs text-foreground truncate`,title:e.jobCommand,children:e.jobCommand}),(0,f.jsxs)(`div`,{className:`flex items-center gap-2 mt-0.5`,children:[(0,f.jsx)(`span`,{className:`text-xs font-medium ${g(e.type)}`,children:h(e.type)}),e.costUsd!=null&&(0,f.jsxs)(`span`,{className:`text-xs text-muted-foreground`,children:[`$`,e.costUsd.toFixed(4)]})]})]}),(0,f.jsx)(`span`,{className:`text-xs text-muted-foreground flex-shrink-0 tabular-nums`,children:p(e.timestamp)})]},`${e.type}:${e.jobId}`))}),(0,f.jsx)(`div`,{ref:s,className:`h-1`}),n&&t.length>0&&(0,f.jsx)(`div`,{className:`flex justify-center py-3`,children:(0,f.jsx)(i,{className:`w-4 h-4 animate-spin text-muted-foreground`})}),!a&&t.length>0&&(0,f.jsx)(`p`,{className:`text-center text-xs text-muted-foreground py-3`,children:`All activity loaded`})]})]})}export{_ as default};
@@ -0,0 +1,4 @@
1
+ import{i as e,n as t,o as n,r,t as i}from"./createLucideIcon-j4o5em8U.js";import{t as a}from"./react-dom-CzrF8Nvy.js";import{n as o,r as s}from"./useHub-pbTRebEn.js";import{n as c,t as l}from"./utils-DSsSbmuB.js";import{t as u}from"./ExportDropdown-DrRETS4C.js";import{$ as d,$t as f,A as p,At as m,B as h,Bt as g,C as _,Ct as v,D as y,Dt as b,E as x,Et as S,F as C,Ft as w,G as T,Gt as ee,H as te,Ht as ne,I as re,It as ie,J as ae,Jt as oe,K as se,Kt as ce,L as le,Lt as ue,M as de,Mt as fe,N as E,Nt as pe,O as me,Ot as he,P as ge,Pt as _e,Q as ve,Qt as ye,R as be,Rt as xe,S as Se,St as Ce,T as we,Tt as Te,U as Ee,Ut as De,V as Oe,Vt as D,W as ke,Wt as Ae,X as je,Xt as O,Y as Me,Yt as Ne,Z as Pe,Zt as Fe,_ as Ie,_n as Le,_t as Re,a as ze,an as Be,at as Ve,b as He,bt as Ue,c as We,cn as Ge,ct as Ke,d as k,dn as A,dt as qe,en as Je,et as Ye,f as j,fn as Xe,ft as Ze,g as Qe,gn as $e,gt as et,h as M,hn as tt,ht as nt,i as rt,in as it,it as at,j as ot,jt as st,k as ct,kt as N,l as lt,ln as ut,lt as dt,m as ft,mn as pt,mt,n as ht,nn as gt,nt as _t,o as vt,on as yt,ot as P,p as F,pn as bt,pt as xt,q as St,qt as I,r as Ct,rn as wt,rt as Tt,s as Et,sn as Dt,st as Ot,t as kt,tn as At,tt as jt,u as Mt,un as Nt,ut as Pt,v as Ft,vn as It,vt as Lt,w as Rt,wt as zt,x as Bt,xt as Vt,y as Ht,yt as Ut,z as Wt,zt as L}from"./BarChart-BOsGtbqJ.js";import"./useSharedWebSocket-j0gqXR8o.js";import{S as Gt,j as Kt}from"./index-DFp3-tao.js";import{n as R,r as qt,t as Jt}from"./dracula-colors-B0g266RC.js";var Yt=i(`chevron-up`,[[`path`,{d:`m18 15-6-6-6 6`,key:`153udz`}]]),Xt=i(`chevrons-up-down`,[[`path`,{d:`m7 15 5 5 5-5`,key:`1hf1tw`}],[`path`,{d:`m7 9 5-5 5 5`,key:`sgt6xg`}]]),Zt=i(`minus`,[[`path`,{d:`M5 12h14`,key:`1ays0h`}]]),Qt=i(`trending-down`,[[`path`,{d:`M16 17h6v-6`,key:`t6n2it`}],[`path`,{d:`m22 17-8.5-8.5-5 5L2 7`,key:`x473p`}]]),z=n(r()),B=t();function $t(e){return`$${e.toFixed(4)}`}function en(e){if(e===null)return`—`;let t=Math.round(e/1e3),n=Math.floor(t/60),r=t%60;return n===0?`${r}s`:`${n}m ${r}s`}function tn(e){return`${(e*100).toFixed(1)}%`}function nn(e){return e>=1e6?`${(e/1e6).toFixed(1)}M`:e>=1e3?`${(e/1e3).toFixed(1)}K`:String(e)}function rn(e){return e===null?null:`${e>0?`+`:``}${e.toFixed(1)}%`}function V({delta:e,deltaPct:t,lowerIsBetter:n=!1,formatter:r}){if(e===null)return null;let i=e>0,a=n?e<0:e>0,o=e===0,s=r?r(Math.abs(e)):e>0?`+${e}`:`${e}`,c=rn(t);return(0,B.jsxs)(`span`,{className:l(`inline-flex items-center gap-0.5 text-[10px] font-medium px-1.5 py-0.5 rounded`,o?`text-muted-foreground bg-muted/40`:a?`text-green-400 bg-green-400/10`:`text-red-400 bg-red-400/10`),children:[o?(0,B.jsx)(Zt,{className:`w-2.5 h-2.5`}):i?(0,B.jsx)(It,{className:`w-2.5 h-2.5`}):(0,B.jsx)(Qt,{className:`w-2.5 h-2.5`}),c??s]})}function H({label:e,value:t,previousValue:n,badge:r}){return(0,B.jsxs)(`div`,{className:`rounded-lg border border-border/40 bg-card/50 p-4 space-y-1`,children:[(0,B.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:e}),(0,B.jsxs)(`div`,{className:`flex items-end justify-between gap-2`,children:[(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`p`,{className:`text-xl font-semibold tabular-nums`,children:t}),n!=null&&(0,B.jsxs)(`p`,{className:`text-[10px] text-muted-foreground tabular-nums`,children:[`prev: `,n]})]}),r]})]})}function an({kpi:e}){let t=e.previousPeriod;return(0,B.jsxs)(`div`,{className:`grid grid-cols-2 lg:grid-cols-5 gap-3`,children:[(0,B.jsx)(H,{label:`Total Cost`,value:$t(e.totalCostUsd),previousValue:t?$t(t.totalCostUsd):null,badge:(0,B.jsx)(V,{delta:e.costDelta,deltaPct:e.costDeltaPct,lowerIsBetter:!0,formatter:e=>`$${e.toFixed(4)}`})}),(0,B.jsx)(H,{label:`Total Jobs`,value:String(e.totalJobs),previousValue:t?String(t.totalJobs):null,badge:(0,B.jsx)(V,{delta:e.jobsDelta,deltaPct:e.jobsDeltaPct,lowerIsBetter:!1,formatter:e=>`+${e}`})}),(0,B.jsx)(H,{label:`Success Rate`,value:tn(e.successRate),previousValue:t?tn(t.successRate):null,badge:(0,B.jsx)(V,{delta:e.successRateDelta,deltaPct:e.successRateDeltaPct,lowerIsBetter:!1,formatter:e=>`${(e*100).toFixed(1)}%`})}),(0,B.jsx)(H,{label:`Avg Duration`,value:en(e.avgDurationMs),previousValue:t?en(t.avgDurationMs):null,badge:(0,B.jsx)(V,{delta:e.avgDurationDelta,deltaPct:e.avgDurationDeltaPct,lowerIsBetter:!0,formatter:e=>en(e)})}),(0,B.jsx)(H,{label:`Total Tokens`,value:nn(e.totalTokens),previousValue:t?nn(t.totalTokens):null,badge:(0,B.jsx)(V,{delta:e.totalTokensDelta,deltaPct:e.totalTokensDeltaPct,lowerIsBetter:!0,formatter:e=>nn(e)})})]})}function on(){return on=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},on.apply(null,arguments)}function sn(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function cn(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]==null?{}:arguments[t];t%2?sn(Object(n),!0).forEach(function(t){ln(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):sn(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function ln(e,t,n){return(t=un(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function un(e){var t=dn(e,`string`);return typeof t==`symbol`?t:t+``}function dn(e,t){if(typeof e!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t||`default`);if(typeof r!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}var U=32,fn={align:`center`,iconSize:14,inactiveColor:`#ccc`,layout:`horizontal`,verticalAlign:`middle`,labelStyle:{}};function pn(e){if(typeof e==`object`&&e&&`strokeDasharray`in e)return String(e.strokeDasharray)}function mn(e){var{data:t,iconType:n,inactiveColor:r}=e,i=U/2,a=U/6,o=U/3,s=t.inactive?r:t.color,c=n??t.type;if(c===`none`)return null;if(c===`plainline`)return z.createElement(`line`,{strokeWidth:4,fill:`none`,stroke:s,strokeDasharray:pn(t.payload),x1:0,y1:i,x2:U,y2:i,className:`recharts-legend-icon`});if(c===`line`)return z.createElement(`path`,{strokeWidth:4,fill:`none`,stroke:s,d:`M0,${i}h${o}
2
+ A${a},${a},0,1,1,${2*o},${i}
3
+ H${U}M${2*o},${i}
4
+ A${a},${a},0,1,1,${o},${i}`,className:`recharts-legend-icon`});if(c===`rect`)return z.createElement(`path`,{stroke:`none`,fill:s,d:`M0,${U/8}h${U}v${U*3/4}h${-U}z`,className:`recharts-legend-icon`});if(z.isValidElement(t.legendIcon)){var l=cn({},t);return delete l.legendIcon,z.cloneElement(t.legendIcon,l)}return z.createElement(Ne,{fill:s,cx:i,cy:i,size:U,sizeType:`diameter`,type:c})}function hn(e){var{payload:t,iconSize:n,layout:r,formatter:i,inactiveColor:a,iconType:o,labelStyle:s}=e,l={x:0,y:0,width:U,height:U},u={display:r===`horizontal`?`inline-block`:`block`,marginRight:10},d={display:`inline-block`,verticalAlign:`middle`,marginRight:4};return t.map((t,r)=>{var f=t.formatter||i,p=c({"recharts-legend-item":!0,[`legend-item-${r}`]:!0,inactive:t.inactive});if(t.type===`none`)return null;var m=typeof s==`object`?cn({},s):{};m.color=t.inactive?a:m.color||t.color;var h=f?f(t.value,t,r):t.value;return z.createElement(`li`,on({className:p,style:u,key:`legend-item-${r}`},oe(e,t,r)),z.createElement(Xe,{width:n,height:n,viewBox:l,style:d,"aria-label":`${h} legend icon`},z.createElement(mn,{data:t,iconType:o,inactiveColor:a})),z.createElement(`span`,{className:`recharts-legend-item-text`,style:m},h))})}var gn=e=>{var t=I(e,fn),{payload:n,layout:r,align:i}=t;if(!n||!n.length)return null;var a={padding:0,margin:0,textAlign:r===`horizontal`?i:`left`};return z.createElement(`ul`,{className:`recharts-default-legend`,style:a},z.createElement(hn,on({},t,{payload:n})))};function _n(){return D(xe)}var vn=n(a()),yn=[`contextPayload`];function bn(){return bn=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},bn.apply(null,arguments)}function xn(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function W(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]==null?{}:arguments[t];t%2?xn(Object(n),!0).forEach(function(t){Sn(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):xn(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function Sn(e,t,n){return(t=Cn(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Cn(e){var t=wn(e,`string`);return typeof t==`symbol`?t:t+``}function wn(e,t){if(typeof e!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t||`default`);if(typeof r!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}function Tn(e,t){if(e==null)return{};var n,r,i=En(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)===-1&&{}.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}function En(e,t){if(e==null)return{};var n={};for(var r in e)if({}.hasOwnProperty.call(e,r)){if(t.indexOf(r)!==-1)continue;n[r]=e[r]}return n}function Dn(e){return e.value}function On(e){var{contextPayload:t}=e,n=Tn(e,yn),r=ne(t,e.payloadUniqBy,Dn),i=W(W({},n),{},{payload:r});return z.isValidElement(e.content)?z.cloneElement(e.content,i):typeof e.content==`function`?z.createElement(e.content,i):z.createElement(gn,i)}function kn(e,t,n,r,i,a){var{layout:o,align:s,verticalAlign:c}=t,l,u;return(!e||(e.left===void 0||e.left===null)&&(e.right===void 0||e.right===null))&&(l=s===`center`&&o===`vertical`?{left:((r||0)-a.width)/2}:s===`right`?{right:n&&n.right||0}:{left:n&&n.left||0}),(!e||(e.top===void 0||e.top===null)&&(e.bottom===void 0||e.bottom===null))&&(u=c===`middle`?{top:((i||0)-a.height)/2}:c===`bottom`?{bottom:n&&n.bottom||0}:{top:n&&n.top||0}),W(W({},l),u)}function An(e){var t=g();return(0,z.useEffect)(()=>{t(Ce(e))},[t,e]),null}function jn(e){var t=g();return(0,z.useEffect)(()=>(t(v(e)),()=>{t(v({width:0,height:0}))}),[t,e]),null}function Mn(e,t,n,r){return e===`vertical`&&t!=null?{height:t}:e===`horizontal`?{width:n||r}:null}var Nn={align:`center`,iconSize:14,inactiveColor:`#ccc`,itemSorter:`value`,layout:`horizontal`,verticalAlign:`bottom`};function Pn(e){var t=I(e,Nn),n=_n(),r=Nt(),i=he(),{width:a,height:o,wrapperStyle:s,portal:c}=t,[l,u]=ue([n]),d=b(),f=S();if(d==null||f==null)return null;var p=d-(i?.left||0)-(i?.right||0),m=Mn(t.layout,o,a,p),h=c?s:W(W({position:`absolute`,width:m?.width||a||`auto`,height:m?.height||o||`auto`},kn(s,t,i,d,f,l)),s),g=c??r;return g==null||n==null?null:(0,vn.createPortal)(z.createElement(`div`,{className:`recharts-legend-wrapper`,style:h,ref:u},z.createElement(An,{layout:t.layout,align:t.align,verticalAlign:t.verticalAlign,itemSorter:t.itemSorter}),!c&&z.createElement(jn,{width:l.width,height:l.height}),z.createElement(On,bn({},t,m,{margin:i,chartWidth:d,chartHeight:f,contextPayload:n}))),g)}var G=z.memo(Pn,Vt);G.displayName=`Legend`;var Fn=[`points`,`className`,`baseLinePoints`,`connectNulls`],In;function K(){return K=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},K.apply(null,arguments)}function Ln(e,t){if(e==null)return{};var n,r,i=Rn(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)===-1&&{}.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}function Rn(e,t){if(e==null)return{};var n={};for(var r in e)if({}.hasOwnProperty.call(e,r)){if(t.indexOf(r)!==-1)continue;n[r]=e[r]}return n}function zn(e,t){return t||=e.slice(0),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}var Bn=e=>e!=null&&e.x===+e.x&&e.y===+e.y,Vn=function(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[],t=[[]];e.forEach(e=>{var n=t[t.length-1];Bn(e)?n&&n.push(e):n&&n.length>0&&t.push([])});var n=e[0],r=t[t.length-1];Bn(n)&&r&&r.push(n);var i=t[t.length-1];return i&&i.length<=0&&(t=t.slice(0,-1)),t},q=(e,t)=>{var n=Vn(e);t&&(n=[n.reduce((e,t)=>[...e,...t],[])]);var r=n.map(e=>e.reduce((e,t,n)=>wt(In||=zn([``,``,``,`,`,``]),e,n===0?`M`:`L`,t.x,t.y),``)).join(``);return n.length===1?`${r}Z`:r},Hn=(e,t,n)=>{var r=q(e,n);return`${r.slice(-1)===`Z`?r.slice(0,-1):r}L${q(Array.from(t).reverse(),n).slice(1)}`},Un=e=>{var{points:t,className:n,baseLinePoints:r,connectNulls:i}=e,a=Ln(e,Fn);if(!t||!t.length)return null;var o=c(`recharts-polygon`,n);if(r&&r.length){var s=a.stroke&&a.stroke!==`none`,l=Hn(t,r,i);return z.createElement(`g`,{className:o},z.createElement(`path`,K({},bt(a),{fill:l.slice(-1)===`Z`?a.fill:`none`,stroke:`none`,d:l})),s?z.createElement(`path`,K({},bt(a),{fill:`none`,d:q(t,i)})):null,s?z.createElement(`path`,K({},bt(a),{fill:`none`,d:q(r,i)})):null)}var u=q(t,i);return z.createElement(`path`,K({},bt(a),{fill:u.slice(-1)===`Z`?a.fill:`none`,className:o,d:u}))},Wn=e=>e.graphicalItems.polarItems,Gn=L([Wn,d,L([P,Ve],Pe)],ae),Kn=L([L([Gn],St),dt],T),qn=L([Kn,d,Gn],te);L([Kn,d,Gn],(e,t,n)=>n.length>0?e.flatMap(e=>n.flatMap(n=>({value:w(e,t.dataKey??n.dataKey),errorDomain:[]}))).filter(Boolean):t?.dataKey==null?e.map(e=>({value:e,errorDomain:[]})):e.map(e=>({value:w(e,t.dataKey),errorDomain:[]})));var Jn=()=>void 0,Yn=L([d,Te,Kn,qn,Ke,P,L([d,Ye,jt,Jn,L([Kn,d,Gn,ve,P],se),Jn,Te,P],je)],Ee);L([_t,L([d,Yn,L([Yn,Tt,_t],Me),P],ke)],at);function Xn(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function Zn(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]==null?{}:arguments[t];t%2?Xn(Object(n),!0).forEach(function(t){Qn(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Xn(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function Qn(e,t,n){return(t=$n(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function $n(e){var t=er(e,`string`);return typeof t==`symbol`?t:t+``}function er(e,t){if(typeof e!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t||`default`);if(typeof r!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}var tr=L([Wn,(e,t)=>t],(e,t)=>e.filter(e=>e.type===`pie`).find(e=>e.id===t)),nr=[],rr=(e,t,n)=>n?.length===0?nr:n,ir=L([dt,tr,rr],(e,t,n)=>{var{chartData:r}=e;if(t!=null){var i=t?.data!=null&&t.data.length>0?t.data:r;if((!i||!i.length)&&n!=null&&(i=n.map(e=>Zn(Zn({},t.presentationProps),e.props))),i!=null)return i}}),ar=L([ir,tr,rr],(e,t,n)=>{if(!(e==null||t==null))return e.map((e,r)=>{var i,a=w(e,t.nameKey,t.name),o=n!=null&&(i=n[r])!=null&&(i=i.props)!=null&&i.fill?n[r].props.fill:typeof e==`object`&&e&&`fill`in e?e.fill:t.fill;return{value:_e(a,t.dataKey),color:o,payload:e,type:t.legendType}})}),or=L([ir,tr,rr,m],(e,t,n,r)=>{if(!(t==null||e==null))return Ar({offset:r,pieSettings:t,displayedData:e,cells:n})}),sr=n(it()),cr=[`key`],lr=[`onMouseEnter`,`onClick`,`onMouseLeave`],ur=[`id`],dr=[`id`];function J(){return J=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},J.apply(null,arguments)}function fr(e,t){if(e==null)return{};var n,r,i=pr(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)===-1&&{}.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}function pr(e,t){if(e==null)return{};var n={};for(var r in e)if({}.hasOwnProperty.call(e,r)){if(t.indexOf(r)!==-1)continue;n[r]=e[r]}return n}function mr(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function Y(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]==null?{}:arguments[t];t%2?mr(Object(n),!0).forEach(function(t){hr(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):mr(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function hr(e,t,n){return(t=gr(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function gr(e){var t=_r(e,`string`);return typeof t==`symbol`?t:t+``}function _r(e,t){if(typeof e!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t||`default`);if(typeof r!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}function vr(e){var t=(0,z.useMemo)(()=>x(e.children,de),[e.children]),n=D(n=>ar(n,e.id,t));return n==null?null:z.createElement(Ht,{legendPayload:n})}function yr(e){if(!(e==null||typeof e==`boolean`||typeof e==`function`)){if(z.isValidElement(e)){var t=e.props?.fill;return typeof t==`string`?t:void 0}var{fill:n}=e;return typeof n==`string`?n:void 0}}var br=z.memo(e=>{var{dataKey:t,nameKey:n,sectors:r,stroke:i,strokeWidth:a,fill:o,name:s,hide:c,tooltipType:l,id:u,activeShape:d}=e,f=yr(d),p={dataDefinedOnItem:r.map(e=>{var t=e.tooltipPayload;return f==null||t==null?t:t.map(e=>Y(Y({},e),{},{color:f,fill:f}))}),getPosition:e=>r[Number(e)]?.tooltipPosition,settings:{stroke:i,strokeWidth:a,fill:o,dataKey:t,nameKey:n,name:_e(s,t),hide:c,type:l,color:o,unit:``,graphicalItemId:u}};return z.createElement(He,{tooltipEntrySettings:p})}),xr=(e,t)=>e>t?`start`:e<t?`end`:`middle`,Sr=(e,t,n)=>O(typeof t==`function`?t(e):t,n,n*.8),Cr=(e,t,n)=>{var{top:r,left:i,width:a,height:o}=t,s=qe(a,o);return{cx:i+O(e.cx,a,a/2),cy:r+O(e.cy,o,o/2),innerRadius:O(e.innerRadius,s,0),outerRadius:Sr(n,e.outerRadius,s),maxRadius:e.maxRadius||Math.sqrt(a*a+o*o)/2}},wr=(e,t)=>Je(t-e)*Math.min(Math.abs(t-e),360),Tr=(e,t)=>{if(z.isValidElement(e))return z.cloneElement(e,t);if(typeof e==`function`)return e(t);var n=c(`recharts-pie-label-line`,typeof e==`boolean`?``:e.className),{key:r}=t,i=fr(t,cr);return z.createElement(Lt,J({},i,{type:`linear`,className:n}))},Er=(e,t,n)=>{if(z.isValidElement(e))return z.cloneElement(e,t);var r=n;if(typeof e==`function`&&(r=e(t),z.isValidElement(r)))return r;var i=c(`recharts-pie-label-text`,y(e));return z.createElement(p,J({},t,{alignmentBaseline:`middle`,className:i}),r)};function Dr(e){var{sectors:t,props:n,showLabels:r}=e,{label:i,labelLine:a,dataKey:o}=n;if(!r||!i||!t)return null;var s=pt(n),c=tt(i),l=tt(a),u=typeof i==`object`&&`offsetRadius`in i&&typeof i.offsetRadius==`number`&&i.offsetRadius||20,d=t.map((e,t)=>{var n=(e.startAngle+e.endAngle)/2,r=Ze(e.cx,e.cy,e.outerRadius+u,n),d=Y(Y(Y(Y({},s),e),{},{stroke:`none`},c),{},{index:t,textAnchor:xr(r.x,e.cx)},r),f=Y(Y(Y(Y({},s),e),{},{fill:`none`,stroke:e.fill},l),{},{index:t,points:[Ze(e.cx,e.cy,e.outerRadius,n),r],key:`line`});return z.createElement(re,{zIndex:Ot.label,key:`label-${e.startAngle}-${e.endAngle}-${e.midAngle}-${t}`},z.createElement(A,null,a&&Tr(a,f),Er(i,d,w(e,o))))});return z.createElement(A,{className:`recharts-pie-labels`},d)}function Or(e){var{sectors:t,props:n,showLabels:r}=e,{label:i}=n;return typeof i==`object`&&i&&`position`in i?z.createElement(me,{label:i}):z.createElement(Dr,{sectors:t,props:n,showLabels:r})}function kr(e){var{sectors:t,activeShape:n,inactiveShape:r,allOtherPieProps:i,shape:a,id:o}=e,s=D(Wt),c=D(le),l=D(be),{onMouseEnter:u,onClick:d,onMouseLeave:f}=i,p=fr(i,lr),m=Se(u,i.dataKey,o),h=_(f),g=Bt(d,i.dataKey,o);return t==null||t.length===0?null:z.createElement(z.Fragment,null,t.map((e,u)=>{if(e?.startAngle===0&&e?.endAngle===0&&t.length!==1)return null;var d=l==null||l===o,f=String(u)===s&&(c==null||i.dataKey===c)&&d,_=n&&f?n:s?r:null,v=Y(Y({},e),{},{stroke:e.stroke,tabIndex:-1,[pe]:u,[fe]:o});return z.createElement(A,J({key:`sector-${e?.startAngle}-${e?.endAngle}-${e.midAngle}-${u}`,tabIndex:-1,className:`recharts-pie-sector`},oe(p,e,u),{onMouseEnter:m(e,u),onMouseLeave:h(e,u),onClick:g(e,u)}),z.createElement(Rt,J({option:a??_,index:u,shapeType:`sector`,isActive:f},v)))}))}function Ar(e){var{pieSettings:t,displayedData:n,cells:r,offset:i}=e,{cornerRadius:a,startAngle:o,endAngle:s,dataKey:c,nameKey:l,tooltipType:u}=t,d=Math.abs(t.minAngle),p=wr(o,s),m=Math.abs(p),h=n.length<=1?0:t.paddingAngle??0,g=n.filter(e=>w(e,c,0)!==0).length,_=(m>=360?g:g-1)*h,v=m-g*d-_,y=n.reduce((e,t)=>{var n=w(t,c,0);return e+(f(n)?n:0)},0),b;if(y>0){var x;b=n.map((e,n)=>{var s=w(e,c,0),m=w(e,l,n),g=Cr(t,i,e),_=(f(s)?s:0)/y,b,S=Y(Y({},e),r&&r[n]&&r[n].props),C=S!=null&&`fill`in S&&typeof S.fill==`string`?S.fill:t.fill;b=n?x.endAngle+Je(p)*h*(s===0?0:1):o;var T=b+Je(p)*((s===0?0:d)+_*v),ee=(b+T)/2,te=(g.innerRadius+g.outerRadius)/2,ne=[{name:m,value:s,payload:S,dataKey:c,type:u,color:C,fill:C,graphicalItemId:t.id}],re=Ze(g.cx,g.cy,te,ee);return x=Y(Y(Y(Y({},t.presentationProps),{},{percent:_,cornerRadius:typeof a==`string`?parseFloat(a):a,name:m,tooltipPayload:ne,midAngle:ee,middleRadius:te,tooltipPosition:re},S),g),{},{value:s,dataKey:c,startAngle:b,endAngle:T,payload:S,paddingAngle:Je(p)*h}),x})}return b}function jr(e){var{showLabels:t,sectors:n,children:r}=e,i=(0,z.useMemo)(()=>!t||!n?[]:n.map(e=>({value:e.value,payload:e.payload,clockWise:!1,parentViewBox:void 0,viewBox:{cx:e.cx,cy:e.cy,innerRadius:e.innerRadius,outerRadius:e.outerRadius,startAngle:e.startAngle,endAngle:e.endAngle,clockWise:!1},fill:e.fill})),[n,t]);return z.createElement(ct,{value:t?i:void 0},r)}function Mr(e){var{props:t,previousSectorsRef:n,id:r}=e,{sectors:i,isAnimationActive:a,animationBegin:o,animationDuration:s,animationEasing:c,activeShape:l,inactiveShape:u,onAnimationStart:d,onAnimationEnd:f}=t,p=mt(t,`recharts-pie-`),m=n.current,[h,g]=(0,z.useState)(!1),_=(0,z.useCallback)(()=>{typeof f==`function`&&f(),g(!1)},[f]),v=(0,z.useCallback)(()=>{typeof d==`function`&&d(),g(!0)},[d]);return z.createElement(jr,{showLabels:!h,sectors:i},z.createElement(nt,{animationId:p,begin:o,duration:s,isActive:a,easing:c,onAnimationStart:v,onAnimationEnd:_,key:p},e=>{var a=[],o=(i&&i[0])?.startAngle??0;return i?.forEach((t,n)=>{var r=m&&m[n],i=n>0?(0,sr.default)(t,`paddingAngle`,0):0;if(r){var s=Fe(r.endAngle-r.startAngle,t.endAngle-t.startAngle,e),c=Y(Y({},t),{},{startAngle:o+i,endAngle:o+s+i});a.push(c),o=c.endAngle}else{var{endAngle:l,startAngle:u}=t,d=Fe(0,l-u,e),f=Y(Y({},t),{},{startAngle:o+i,endAngle:o+d+i});a.push(f),o=f.endAngle}}),n.current=a,z.createElement(A,null,z.createElement(kr,{sectors:a,activeShape:l,inactiveShape:u,allOtherPieProps:t,shape:t.shape,id:r}))}),z.createElement(Or,{showLabels:!h,sectors:i,props:t}),t.children)}var Nr={animationBegin:400,animationDuration:1500,animationEasing:`ease`,cx:`50%`,cy:`50%`,dataKey:`value`,endAngle:360,fill:`#808080`,hide:!1,innerRadius:0,isAnimationActive:`auto`,label:!1,labelLine:!0,legendType:`rect`,minAngle:0,nameKey:`name`,outerRadius:`80%`,paddingAngle:0,rootTabIndex:0,startAngle:0,stroke:`#fff`,zIndex:Ot.area};function Pr(e){var{id:t}=e,n=fr(e,ur),{hide:r,className:i,rootTabIndex:a}=e,o=(0,z.useMemo)(()=>x(e.children,de),[e.children]),s=D(e=>or(e,t,o)),l=(0,z.useRef)(null),u=c(`recharts-pie`,i);return r||s==null?(l.current=null,z.createElement(A,{tabIndex:a,className:u})):z.createElement(re,{zIndex:e.zIndex},z.createElement(br,{dataKey:e.dataKey,nameKey:e.nameKey,sectors:s,stroke:e.stroke,strokeWidth:e.strokeWidth,fill:e.fill,name:e.name,hide:e.hide,tooltipType:e.tooltipType,id:t,activeShape:e.activeShape}),z.createElement(A,{tabIndex:a,className:u},z.createElement(Mr,{props:Y(Y({},n),{},{sectors:s}),previousSectorsRef:l,id:t})))}function Fr(e){var t=I(e,Nr),{id:n}=t,r=fr(t,dr),i=pt(r);return z.createElement(Ft,{id:n,type:`pie`},e=>z.createElement(z.Fragment,null,z.createElement(Ie,{type:`pie`,id:e,data:r.data,dataKey:r.dataKey,hide:r.hide,angleAxisId:0,radiusAxisId:0,name:r.name,nameKey:r.nameKey,tooltipType:r.tooltipType,legendType:r.legendType,fill:r.fill,cx:r.cx,cy:r.cy,startAngle:r.startAngle,endAngle:r.endAngle,paddingAngle:r.paddingAngle,minAngle:r.minAngle,innerRadius:r.innerRadius,outerRadius:r.outerRadius,cornerRadius:r.cornerRadius,presentationProps:i,maxRadius:t.maxRadius}),z.createElement(vr,J({},r,{id:e})),z.createElement(Pr,J({},r,{id:e}))))}var Ir=Fr;Ir.displayName=`Pie`;var Lr={begin:0,duration:1e3,easing:`ease`,isActive:!0,canBegin:!0,onAnimationEnd:()=>{},onAnimationStart:()=>{}};function Rr(e){var t=I(e,Lr),{animationId:n,from:r,to:i,attributeName:a,isActive:o,canBegin:s,duration:c,easing:l,begin:u,onAnimationEnd:d,onAnimationStart:f,children:p}=t,m=Ut(),h=o===`auto`?!Ue.isSsr&&!m:o,g=et(n+a,t.animationManager),[_,v]=(0,z.useState)(()=>h?r:i),y=(0,z.useRef)(!1),b=(0,z.useCallback)(()=>{v(r),f()},[r,f]);return(0,z.useEffect)(()=>{if(!h||!s)return At;y.current=!0;var e=g.subscribe(v);return g.start([b,u,i,c,d]),()=>{g.stop(),e&&e(),d()}},[h,s,c,l,u,b,d,g,i,r]),h?s&&y.current?p({transition:Re([a],c,l),[a]:_}):p({[a]:r}):p({[a]:i})}function zr(e){var t=g();return(0,z.useEffect)(()=>{t(Mt(e))},[t,e]),null}var Br=[`layout`];function Vr(){return Vr=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},Vr.apply(null,arguments)}function Hr(e,t){if(e==null)return{};var n,r,i=Ur(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)===-1&&{}.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}function Ur(e,t){if(e==null)return{};var n={};for(var r in e)if({}.hasOwnProperty.call(e,r)){if(t.indexOf(r)!==-1)continue;n[r]=e[r]}return n}function Wr(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function Gr(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]==null?{}:arguments[t];t%2?Wr(Object(n),!0).forEach(function(t){Kr(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Wr(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function Kr(e,t,n){return(t=qr(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function qr(e){var t=Jr(e,`string`);return typeof t==`symbol`?t:t+``}function Jr(e,t){if(typeof e!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t||`default`);if(typeof r!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}var Yr=Gr({accessibilityLayer:!0,stackOffset:`none`,barCategoryGap:`10%`,barGap:4,margin:{top:5,right:5,bottom:5,left:5},reverseStackOrder:!1,syncMethod:`index`,layout:`radial`,responsive:!1,cx:`50%`,cy:`50%`,innerRadius:0,outerRadius:`80%`},lt),Xr=(0,z.forwardRef)(function(e,t){var n=I(e.categoricalChartProps,Yr),{layout:r}=n,i=Hr(n,Br),{chartName:a,defaultTooltipEventType:o,validateTooltipEventTypes:s,tooltipPayloadSearcher:c}=e,l={chartName:a,defaultTooltipEventType:o,validateTooltipEventTypes:s,tooltipPayloadSearcher:c,eventEmitter:void 0};return z.createElement(We,{preloadedState:{options:l},reduxStoreName:n.id??a},z.createElement(Qe,{chartData:n.data}),z.createElement(Et,{layout:r,margin:n.margin}),z.createElement(ze,{throttleDelay:n.throttleDelay,throttledEvents:n.throttledEvents}),z.createElement(vt,{baseValue:void 0,accessibilityLayer:n.accessibilityLayer,barCategoryGap:n.barCategoryGap,maxBarSize:n.maxBarSize,stackOffset:n.stackOffset,barGap:n.barGap,barSize:n.barSize,syncId:n.syncId,syncMethod:n.syncMethod,className:n.className,reverseStackOrder:n.reverseStackOrder}),z.createElement(zr,{cx:n.cx,cy:n.cy,startAngle:n.startAngle,endAngle:n.endAngle,innerRadius:n.innerRadius,outerRadius:n.outerRadius}),z.createElement(Ct,Vr({},i,{ref:t})))});function Zr(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function Qr(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]==null?{}:arguments[t];t%2?Zr(Object(n),!0).forEach(function(t){$r(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Zr(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function $r(e,t,n){return(t=ei(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function ei(e){var t=ti(e,`string`);return typeof t==`symbol`?t:t+``}function ti(e,t){if(typeof e!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t||`default`);if(typeof r!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}var ni=[`item`],ri=Qr(Qr({},Yr),{},{layout:`centric`,startAngle:0,endAngle:360}),ii=(0,z.forwardRef)((e,t)=>{var n=I(e,ri);return z.createElement(Xr,{chartName:`PieChart`,defaultTooltipEventType:`item`,validateTooltipEventTypes:ni,tooltipPayloadSearcher:ge,categoricalChartProps:n,ref:t})}),ai=e((e=>{Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});function t(e){return typeof Buffer<`u`&&Buffer.isBuffer(e)}e.isBuffer=t})),oi=e((e=>{Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});function t(e){let t=e?.constructor;return e===(typeof t==`function`?t.prototype:Object.prototype)}e.isPrototype=t})),si=e((e=>{Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});var t=Ae();function n(e){return t.isTypedArray(e)}e.isTypedArray=n})),ci=e((e=>{Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});var t=Pt();function n(e){let n=t.toFinite(e),r=n%1;return r?n-r:n}e.toInteger=n})),li=e((e=>{Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});var t=ci();function n(e,n){if(e=t.toInteger(e),e<1||!Number.isSafeInteger(e))return[];let r=Array(e);for(let t=0;t<e;t++)r[t]=typeof n==`function`?n(t):t;return r}e.times=n})),ui=e((e=>{Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});var t=ai(),n=oi(),r=ce(),i=si(),a=li();function o(e){if(e==null)return[];switch(typeof e){case`object`:case`function`:return r.isArrayLike(e)?l(e):n.isPrototype(e)?c(e):s(e);default:return s(Object(e))}}function s(e){let t=[];for(let n in e)t.push(n);return t}function c(e){return s(e).filter(e=>e!==`constructor`)}function l(e){let n=a.times(e.length,e=>`${e}`),r=new Set(n);t.isBuffer(e)&&(r.add(`offset`),r.add(`parent`)),i.isTypedArray(e)&&(r.add(`buffer`),r.add(`byteLength`),r.add(`byteOffset`));let o=s(e).filter(e=>!r.has(e));return Array.isArray(e)?[...n,...o]:[...n.filter(t=>Object.hasOwn(e,t)),...o]}e.keysIn=o})),di=e((e=>{Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});var t=Be(),n=ut(),r=Ge(),i=Dt(),a=yt();function o(e,t){if(e==null)return!0;switch(typeof t){case`symbol`:case`number`:case`object`:if(Array.isArray(t))return s(e,t);if(typeof t==`number`?t=i.toKey(t):typeof t==`object`&&(t=Object.is(t?.valueOf(),-0)?`-0`:String(t)),n.isUnsafeProperty(t))return!1;if(e?.[t]===void 0)return!0;try{return delete e[t],!0}catch{return!1}case`string`:if(e?.[t]===void 0&&r.isDeepKey(t))return s(e,a.toPath(t));if(n.isUnsafeProperty(t))return!1;try{return delete e[t],!0}catch{return!1}}}function s(e,r){let i=r.length===1?e:t.get(e,r.slice(0,-1)),a=r[r.length-1];if(i?.[a]===void 0)return!0;if(n.isUnsafeProperty(a))return!1;try{return delete i[a],!0}catch{return!1}}e.unset=o})),fi=e((e=>{Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});var t=ee();function n(e){let n=[];for(;e;)n.push(...t.getSymbols(e)),e=Object.getPrototypeOf(e);return n}e.getSymbolsIn=n})),pi=e((e=>{Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});var t=ce();function n(e,n=1){let r=[],i=Math.floor(n);if(!t.isArrayLike(e))return r;let a=(e,t)=>{for(let n=0;n<e.length;n++){let o=e[n];t<i&&(Array.isArray(o)||o?.[Symbol.isConcatSpreadable]||typeof o==`object`&&o&&Object.prototype.toString.call(o)===`[object Arguments]`)?a(Array.isArray(o)?o:Array.from(o),t+1):r.push(o)}};return a(Array.from(e),0),r}e.flatten=n})),mi=e((e=>{Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});var t=De(),n=ui(),r=di(),i=fi(),a=Ge(),o=pi(),s=we();function c(e,...t){if(e==null)return{};t=o.flatten(t);let n=l(e,t);for(let e=0;e<t.length;e++){let i=t[e];switch(typeof i){case`object`:Array.isArray(i)||(i=Array.from(i));for(let e=0;e<i.length;e++){let t=i[e];r.unset(n,t)}break;case`string`:case`symbol`:case`number`:r.unset(n,i);break}}return n}function l(e,t){return t.some(e=>Array.isArray(e)||a.isDeepKey(e))?d(e):u(e)}function u(e){let t={},r=[...n.keysIn(e),...i.getSymbolsIn(e)];for(let n=0;n<r.length;n++){let i=r[n];t[i]=e[i]}return t}function d(e){let r={},a=[...n.keysIn(e),...i.getSymbolsIn(e)];for(let n=0;n<a.length;n++){let i=a[n];r[i]=t.cloneDeepWith(e[i],e=>{if(!s.isPlainObject(e))return e})}return r}e.omit=c})),hi=n(e(((e,t)=>{t.exports=mi().omit}))()),gi=[`width`,`height`,`className`,`style`,`children`,`type`];function _i(e,t){if(e==null)return{};var n,r,i=vi(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)===-1&&{}.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}function vi(e,t){if(e==null)return{};var n={};for(var r in e)if({}.hasOwnProperty.call(e,r)){if(t.indexOf(r)!==-1)continue;n[r]=e[r]}return n}function X(){return X=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},X.apply(null,arguments)}function yi(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function Z(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]==null?{}:arguments[t];t%2?yi(Object(n),!0).forEach(function(t){Q(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):yi(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function Q(e,t,n){return(t=bi(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function bi(e){var t=xi(e,`string`);return typeof t==`symbol`?t:t+``}function xi(e,t){if(typeof e!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t||`default`);if(typeof r!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}var Si=`value`;function Ci(e){return typeof e==`object`&&!!e&&`x`in e&&`y`in e&&`width`in e&&`height`in e&&typeof e.x==`number`&&typeof e.y==`number`&&typeof e.width==`number`&&typeof e.height==`number`}var wi=(e,t)=>{if(!(!e||!t))return(0,sr.default)(e,t)},Ti=function(e){return`${arguments.length>1&&arguments[1]!==void 0?arguments[1]:``}children[${e}]`},Ei={chartName:`Treemap`,defaultTooltipEventType:`item`,validateTooltipEventTypes:[`item`],tooltipPayloadSearcher:wi,eventEmitter:void 0},Di=e=>{var{depth:t,node:n,index:r,dataKey:i,nameKey:a,nestedActiveTooltipIndex:o}=e,s=t===0?``:Ti(r,o),{children:c}=n,l=t+1,u=c&&c.length?c.map((e,t)=>Di({depth:l,node:e,index:t,dataKey:i,nameKey:a,nestedActiveTooltipIndex:s})):null,d;if(u&&u.length)d=u.reduce((e,t)=>e+t.value,0);else{var f=n[i],p=typeof f==`number`?f:0;d=ye(p)||p<=0?0:p}return Z(Z({},n),{},{children:u,name:w(n,a,``),[Si]:d,depth:t,index:r,tooltipIndex:s})},Oi=e=>({x:e.x,y:e.y,width:e.width,height:e.height}),ki=(e,t)=>{var n=t<0?0:t;return e.map(e=>{var t=e[Si]*n;return Z(Z({},e),{},{area:ye(t)||t<=0?0:t})})},Ai=(e,t,n)=>{var r=t*t,i=e.area*e.area,{min:a,max:o}=e.reduce((e,t)=>({min:Math.min(e.min,t.area),max:Math.max(e.max,t.area)}),{min:1/0,max:0});return i?Math.max(r*o*n/i,i/(r*a*n)):1/0},ji=(e,t,n,r)=>{var i=t?Math.round(e.area/t):0;(r||i>n.height)&&(i=n.height);for(var a=n.x,o,s=0,c=e.length;s<c;s++)o=e[s],o!=null&&(o.x=a,o.y=n.y,o.height=i,o.width=Math.min(i?Math.round(o.area/i):0,n.x+n.width-a),a+=o.width);return o!=null&&(o.width+=n.x+n.width-a),Z(Z({},n),{},{y:n.y+i,height:n.height-i})},Mi=(e,t,n,r)=>{var i=t?Math.round(e.area/t):0;(r||i>n.width)&&(i=n.width);for(var a=n.y,o,s=0,c=e.length;s<c;s++)o=e[s],o!=null&&(o.x=n.x,o.y=a,o.width=i,o.height=Math.min(i?Math.round(o.area/i):0,n.y+n.height-a),a+=o.height);return o&&(o.height+=n.y+n.height-a),Z(Z({},n),{},{x:n.x+i,width:n.width-i})},Ni=(e,t,n,r)=>t===n.width?ji(e,t,n,r):Mi(e,t,n,r),Pi=(e,t)=>{var{children:n}=e;if(n&&n.length){var r=Oi(e),i=[],a=1/0,o,s,c=Math.min(r.width,r.height),l=ki(n,r.width*r.height/e[Si]),u=l.slice();for(i.area=0;u.length>0;)[o]=u,o!=null&&(i.push(o),i.area+=o.area,s=Ai(i,c,t),s<=a?(u.shift(),a=s):(i.area-=i.pop()?.area??0,r=Ni(i,c,r,!1),c=Math.min(r.width,r.height),i.length=i.area=0,a=1/0));return i.length&&=(r=Ni(i,c,r,!0),i.area=0),Z(Z({},e),{},{children:l.map(e=>Pi(e,t))})}return e},Fi=Z({aspectRatio:.5*(1+Math.sqrt(5)),dataKey:`value`,nameKey:`name`,type:`flat`,isAnimationActive:`auto`,isUpdateAnimationActive:`auto`,animationBegin:0,animationDuration:1500,animationEasing:`linear`},lt),Ii={isAnimationFinished:!1,formatRoot:null,currentRoot:void 0,nestIndex:[],prevAspectRatio:Fi.aspectRatio,prevDataKey:Fi.dataKey};function Li(e){var{content:t,nodeProps:n,type:r,colorPanel:i,onMouseEnter:a,onMouseLeave:o,onClick:s}=e;if(z.isValidElement(t))return z.createElement(A,{onMouseEnter:a,onMouseLeave:o,onClick:s},z.cloneElement(t,n));if(typeof t==`function`)return z.createElement(A,{onMouseEnter:a,onMouseLeave:o,onClick:s},t(n));var{x:c,y:l,width:u,height:d,index:f}=n,p=null;u>10&&d>10&&n.children&&r===`nest`&&(p=z.createElement(Un,{points:[{x:c+2,y:l+d/2},{x:c+6,y:l+d/2+3},{x:c+2,y:l+d/2+6}]}));var m=null,h=ot(n.name);u>20&&d>20&&h.width<u&&h.height<d&&(m=z.createElement(`text`,{x:c+8,y:l+d/2+7,fontSize:14},n.name));var g=i||st;return z.createElement(`g`,null,z.createElement(xt,X({fill:n.depth<2?g[f%g.length]:`rgba(255,255,255,0)`,stroke:`#fff`},(0,hi.default)(n,[`children`]),{onMouseEnter:a,onMouseLeave:o,onClick:s,"data-recharts-item-index":n.tooltipIndex})),p,m)}function Ri(e){var t=g(),n={x:e.nodeProps.x+e.nodeProps.width/2,y:e.nodeProps.y+e.nodeProps.height/2};return z.createElement(Li,X({},e,{onMouseEnter:()=>{t(Oe({activeIndex:e.nodeProps.tooltipIndex,activeDataKey:e.dataKey,activeCoordinate:n,activeGraphicalItemId:e.id}))},onMouseLeave:()=>{},onClick:()=>{t(h({activeIndex:e.nodeProps.tooltipIndex,activeDataKey:e.dataKey,activeCoordinate:n,activeGraphicalItemId:e.id}))}}))}var zi=z.memo(e=>{var{dataKey:t,nameKey:n,stroke:r,fill:i,currentRoot:a,id:o}=e,s={dataDefinedOnItem:a,getPosition:At,settings:{stroke:r,strokeWidth:void 0,fill:i,dataKey:t,nameKey:n,name:void 0,hide:!1,type:void 0,color:i,unit:``,graphicalItemId:o}};return z.createElement(He,{tooltipEntrySettings:s})}),Bi={top:0,right:0,bottom:0,left:0};function Vi(e){var{content:t,nodeProps:n,isLeaf:r,treemapProps:i,onNestClick:a}=e,{id:o,isAnimationActive:s,animationBegin:c,animationDuration:l,animationEasing:u,isUpdateAnimationActive:d,type:f,colorPanel:p,dataKey:m,onAnimationStart:h,onAnimationEnd:g,onMouseEnter:_,onClick:v,onMouseLeave:y}=i,{width:b,height:x,x:S,y:C}=n,w=-S-b,T=0,ee=e=>{(r||f===`nest`)&&typeof _==`function`&&_(n,e)},te=e=>{(r||f===`nest`)&&typeof y==`function`&&y(n,e)},ne=()=>{f===`nest`&&a(n),(r||f===`nest`)&&typeof v==`function`&&v(n)},re=(0,z.useCallback)(()=>{typeof g==`function`&&g()},[g]),ie=(0,z.useCallback)(()=>{typeof h==`function`&&h()},[h]);return z.createElement(Rr,{animationId:`treemap-${n.tooltipIndex}`,from:`translate(${w}px, ${T}px)`,to:`translate(0, 0)`,attributeName:`transform`,begin:c,easing:u,isActive:s,duration:l,onAnimationStart:ie,onAnimationEnd:re},e=>z.createElement(A,{onMouseEnter:ee,onMouseLeave:te,onClick:ne,style:Z(Z({},e),{},{transformOrigin:`${S} ${C}`})},z.createElement(Ri,{id:o,content:t,dataKey:m,nodeProps:Z(Z({},n),{},{isAnimationActive:s,isUpdateAnimationActive:!d,width:b,height:x,x:S,y:C}),type:f,colorPanel:p})))}var Hi=class extends z.PureComponent{constructor(){super(...arguments),Q(this,`state`,Z({},Ii)),Q(this,`handleClick`,e=>{var{onClick:t,type:n}=this.props;if(n===`nest`&&e.children){var{width:r,height:i,dataKey:a,nameKey:o,aspectRatio:s}=this.props,c=Di({depth:0,node:Z(Z({},e),{},{x:0,y:0,width:r,height:i}),index:0,dataKey:a,nameKey:o,nestedActiveTooltipIndex:e.tooltipIndex}),l=Pi(c,s),{nestIndex:u}=this.state;u.push(e),this.setState({formatRoot:l,currentRoot:c,nestIndex:u})}t&&t(e)}),Q(this,`handleTouchMove`,e=>{var t=e.touches[0];if(t!=null){var n=document.elementFromPoint(t.clientX,t.clientY);if(!(!n||!n.getAttribute||this.state.formatRoot==null)){var r=n.getAttribute(`data-recharts-item-index`),i=wi(this.state.formatRoot,r);if(Ci(i)){var{dataKey:a,dispatch:o}=this.props;o(Oe({activeIndex:r,activeDataKey:a,activeCoordinate:{x:i.x+i.width/2,y:i.y+i.height/2},activeGraphicalItemId:this.props.id}))}}}})}static getDerivedStateFromProps(e,t){if(e.data!==t.prevData||e.type!==t.prevType||e.width!==t.prevWidth||e.height!==t.prevHeight||e.dataKey!==t.prevDataKey||e.aspectRatio!==t.prevAspectRatio){var n=Di({depth:0,node:{children:e.data,x:0,y:0,width:e.width,height:e.height},index:0,dataKey:e.dataKey,nameKey:e.nameKey}),r=Pi(n,e.aspectRatio);return Z(Z({},t),{},{formatRoot:r,currentRoot:n,nestIndex:[n],prevAspectRatio:e.aspectRatio,prevData:e.data,prevWidth:e.width,prevHeight:e.height,prevDataKey:e.dataKey,prevType:e.type})}return null}handleNestIndex(e,t){var{nestIndex:n}=this.state,{width:r,height:i,dataKey:a,nameKey:o,aspectRatio:s}=this.props,c=Pi(Di({depth:0,node:Z(Z({},e),{},{x:0,y:0,width:r,height:i}),index:0,dataKey:a,nameKey:o,nestedActiveTooltipIndex:e.tooltipIndex}),s);n=n.slice(0,t+1),this.setState({formatRoot:c,currentRoot:e,nestIndex:n})}renderNode(e,t){var{content:n,type:r}=this.props,i=Z(Z(Z({},pt(this.props)),t),{},{root:e}),a=!t.children||!t.children.length,{currentRoot:o}=this.state;return!(o?.children||[]).filter(e=>e.depth===t.depth&&e.name===t.name).length&&e.depth&&r===`nest`?null:z.createElement(A,{key:`recharts-treemap-node-${i.x}-${i.y}-${i.name}`,className:`recharts-treemap-depth-${t.depth}`},z.createElement(Vi,{isLeaf:a,content:n,nodeProps:i,treemapProps:this.props,onNestClick:this.handleClick}),t.children&&t.children.length?t.children.map(e=>this.renderNode(t,e)):null)}renderAllNodes(){var{formatRoot:e}=this.state;return e?this.renderNode(e,e):null}renderNestIndex(){var{nameKey:e,nestIndexContent:t}=this.props,{nestIndex:n}=this.state;return z.createElement(`div`,{className:`recharts-treemap-nest-index-wrapper`,style:{marginTop:`8px`,textAlign:`center`}},n.map((n,r)=>{var i=(0,sr.default)(n,e,`root`),a=typeof i==`string`?i:`root`,o;return z.isValidElement(t)&&(o=z.cloneElement(t,n,r)),o=typeof t==`function`?t(n,r):a,z.createElement(`div`,{onClick:this.handleNestIndex.bind(this,n,r),key:`nest-index-${gt()}`,className:`recharts-treemap-nest-index-box`,style:{cursor:`pointer`,display:`inline-block`,padding:`0 7px`,background:`#000`,color:`#fff`,marginRight:`3px`}},o)}))}render(){var e=this.props,{width:t,height:n,className:r,style:i,children:a,type:o}=e,s=pt(_i(e,gi));return z.createElement(z.Fragment,null,z.createElement(zi,{dataKey:this.props.dataKey,nameKey:this.props.nameKey,stroke:this.props.stroke,fill:this.props.fill,currentRoot:this.state.currentRoot,id:this.props.id}),z.createElement(Xe,X({},s,{width:t,height:o===`nest`?n-30:n,onTouchMove:this.handleTouchMove}),this.renderAllNodes(),a),o===`nest`&&this.renderNestIndex())}};Q(Hi,`displayName`,`Treemap`);function Ui(e){var t=g(),n=b(),r=S();if(!ie(n)||!ie(r))return null;var{id:i}=e;return z.createElement(Ft,{id:i,type:`treemap`},i=>z.createElement(Hi,X({},e,{id:i,width:n,height:r,dispatch:t})))}function Wi(e){var t=I(e,Fi),{className:n,style:r,width:i,height:a,throttleDelay:o,throttledEvents:s}=t,[c,l]=(0,z.useState)(null);return z.createElement(We,{preloadedState:{options:Ei},reduxStoreName:t.className??`Treemap`},z.createElement(zt,{margin:Bi}),z.createElement(ze,{throttleDelay:o,throttledEvents:s}),z.createElement(rt,{dispatchTouchEvents:!1,className:n,style:r,width:i,height:a,responsive:!1,ref:e=>{c==null&&e!=null&&l(e)},onMouseEnter:void 0,onMouseLeave:void 0,onClick:void 0,onMouseMove:void 0,onMouseDown:void 0,onMouseUp:void 0,onContextMenu:void 0,onDoubleClick:void 0,onTouchStart:void 0,onTouchMove:void 0,onTouchEnd:void 0},z.createElement(C.Provider,{value:c},z.createElement(Ui,t))))}function Gi({active:e,payload:t,label:n}){return!e||!t?.length?null:(0,B.jsxs)(`div`,{className:`bg-popover border border-border/30 rounded-lg p-2 text-xs shadow-lg`,children:[(0,B.jsx)(`p`,{className:`text-muted-foreground mb-1`,children:n}),(0,B.jsxs)(`p`,{className:`font-medium`,children:[`$`,t[0].value.toFixed(4)]})]})}function Ki(e){try{return Le(new Date(e),`MMM d`)}catch{return e}}function qi({data:e}){if(!(e.length>0&&e.some(e=>e.costUsd>0)))return(0,B.jsxs)(`div`,{className:`rounded-lg border border-border/40 bg-card/50 p-4`,children:[(0,B.jsx)(`h3`,{className:`text-sm font-medium mb-3`,children:`Cost Over Time`}),(0,B.jsx)(`div`,{className:`h-[220px] flex items-center justify-center text-xs text-muted-foreground`,children:`No cost data for this period`})]});let t=Math.max(1,Math.floor(e.length/7)),n=e.filter((e,n)=>n%t===0).map(e=>e.date);return(0,B.jsxs)(`div`,{className:`rounded-lg border border-border/40 bg-card/50 p-4`,children:[(0,B.jsx)(`h3`,{className:`text-sm font-medium mb-3`,children:`Cost Over Time`}),(0,B.jsx)(N,{width:`100%`,height:220,children:(0,B.jsxs)(ht,{data:e,margin:{top:4,right:8,left:0,bottom:0},children:[(0,B.jsx)(M,{strokeDasharray:`3 3`,stroke:`var(--color-border)`}),(0,B.jsx)(j,{dataKey:`date`,ticks:n,tickFormatter:Ki,tick:{fontSize:10,fill:`var(--color-muted-foreground)`},axisLine:!1,tickLine:!1}),(0,B.jsx)(k,{tickFormatter:e=>`$${e.toFixed(2)}`,tick:{fontSize:10,fill:`var(--color-muted-foreground)`},axisLine:!1,tickLine:!1,width:55}),(0,B.jsx)(E,{content:(0,B.jsx)(Gi,{})}),(0,B.jsx)(ft,{type:`monotone`,dataKey:`costUsd`,stroke:R.purple,strokeWidth:2,dot:!1,activeDot:{r:3,fill:R.purple}})]})})]})}function Ji({active:e,payload:t}){if(!e||!t?.length)return null;let n=t[0];return(0,B.jsxs)(`div`,{className:`bg-popover border border-border/30 rounded-lg p-2 text-xs shadow-lg`,children:[(0,B.jsx)(`p`,{className:`capitalize font-medium`,children:n.name}),(0,B.jsxs)(`p`,{className:`text-muted-foreground`,children:[n.value,` jobs`]})]})}function Yi({data:e}){if(e.length===0)return(0,B.jsxs)(`div`,{className:`rounded-lg border border-border/40 bg-card/50 p-4`,children:[(0,B.jsx)(`h3`,{className:`text-sm font-medium mb-3`,children:`Jobs by Status`}),(0,B.jsx)(`div`,{className:`h-[220px] flex items-center justify-center text-xs text-muted-foreground`,children:`No jobs in this period`})]});let t=e.reduce((e,t)=>e+t.count,0);return(0,B.jsxs)(`div`,{className:`rounded-lg border border-border/40 bg-card/50 p-4`,children:[(0,B.jsx)(`h3`,{className:`text-sm font-medium mb-3`,children:`Jobs by Status`}),(0,B.jsx)(N,{width:`100%`,height:220,children:(0,B.jsxs)(ii,{children:[(0,B.jsx)(Ir,{data:e,dataKey:`count`,nameKey:`status`,cx:`50%`,cy:`50%`,innerRadius:60,outerRadius:90,paddingAngle:2,children:e.map(e=>(0,B.jsx)(de,{fill:qt[e.status]??`var(--color-muted-foreground)`},e.status))}),(0,B.jsx)(E,{content:(0,B.jsx)(Ji,{})}),(0,B.jsx)(G,{formatter:n=>{let r=e.find(e=>e.status===n),i=r?(r.count/t*100).toFixed(0):`0`;return(0,B.jsxs)(`span`,{className:`text-xs capitalize`,children:[n,` (`,r?.count??0,`, `,i,`%)`]})}})]})})]})}var Xi=[`<1m`,`1-3m`,`3-5m`,`5-10m`,`>10m`];function Zi(e){if(e===null)return`—`;let t=Math.round(e/1e3),n=Math.floor(t/60),r=t%60;return n===0?`${r}s`:`${n}m ${r}s`}function Qi({active:e,payload:t,label:n}){return!e||!t?.length?null:(0,B.jsxs)(`div`,{className:`bg-popover border border-border/30 rounded-lg p-2 text-xs shadow-lg`,children:[(0,B.jsx)(`p`,{className:`text-muted-foreground mb-1`,children:n}),(0,B.jsxs)(`p`,{className:`font-medium`,children:[t[0].value,` jobs`]})]})}function $i({data:e,percentiles:t}){let n=Xi.map(t=>({bucket:t,count:e.find(e=>e.bucket===t)?.count??0}));return n.some(e=>e.count>0)?(0,B.jsxs)(`div`,{className:`rounded-lg border border-border/40 bg-card/50 p-4`,children:[(0,B.jsx)(`h3`,{className:`text-sm font-medium mb-3`,children:`Duration Distribution`}),(0,B.jsx)(N,{width:`100%`,height:180,children:(0,B.jsxs)(kt,{data:n,margin:{top:4,right:8,left:0,bottom:0},children:[(0,B.jsx)(M,{strokeDasharray:`3 3`,stroke:`var(--color-border)`,vertical:!1}),(0,B.jsx)(j,{dataKey:`bucket`,tick:{fontSize:10,fill:`var(--color-muted-foreground)`},axisLine:!1,tickLine:!1}),(0,B.jsx)(k,{allowDecimals:!1,tick:{fontSize:10,fill:`var(--color-muted-foreground)`},axisLine:!1,tickLine:!1,width:30}),(0,B.jsx)(E,{content:(0,B.jsx)(Qi,{})}),(0,B.jsx)(F,{dataKey:`count`,fill:R.cyan,radius:[3,3,0,0]})]})}),(0,B.jsx)(`div`,{className:`flex items-center gap-3 mt-2`,children:[`p50`,`p75`,`p95`].map(e=>(0,B.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,B.jsxs)(`span`,{className:`text-[10px] text-muted-foreground uppercase`,children:[e,`:`]}),(0,B.jsx)(`span`,{className:`text-[10px] font-medium tabular-nums`,children:Zi(t[e])})]},e))})]}):(0,B.jsxs)(`div`,{className:`rounded-lg border border-border/40 bg-card/50 p-4`,children:[(0,B.jsx)(`h3`,{className:`text-sm font-medium mb-3`,children:`Duration Distribution`}),(0,B.jsx)(`div`,{className:`h-[220px] flex items-center justify-center text-xs text-muted-foreground`,children:`No duration data available`})]})}function ea({active:e,payload:t,label:n}){return!e||!t?.length?null:(0,B.jsxs)(`div`,{className:`bg-popover border border-border/30 rounded-lg p-2 text-xs shadow-lg`,children:[(0,B.jsx)(`p`,{className:`text-muted-foreground mb-1 font-mono truncate max-w-48`,children:n}),t.map(e=>(0,B.jsxs)(`p`,{style:{color:e.color},children:[e.name,`: `,e.value.toLocaleString()]},e.name))]})}function ta({data:e}){if(e.length===0)return(0,B.jsxs)(`div`,{className:`rounded-lg border border-border/40 bg-card/50 p-4`,children:[(0,B.jsx)(`h3`,{className:`text-sm font-medium mb-3`,children:`Token Efficiency`}),(0,B.jsx)(`div`,{className:`h-[220px] flex items-center justify-center text-xs text-muted-foreground`,children:`No token data for this period`})]});let t=e.map(e=>({...e,name:e.command.length>20?`…${e.command.slice(-18)}`:e.command}));return(0,B.jsxs)(`div`,{className:`rounded-lg border border-border/40 bg-card/50 p-4`,children:[(0,B.jsx)(`h3`,{className:`text-sm font-medium mb-3`,children:`Token Efficiency`}),(0,B.jsx)(N,{width:`100%`,height:220,children:(0,B.jsxs)(kt,{layout:`vertical`,data:t,margin:{top:4,right:8,left:0,bottom:0},children:[(0,B.jsx)(M,{strokeDasharray:`3 3`,stroke:`var(--color-border)`,horizontal:!1}),(0,B.jsx)(j,{type:`number`,tick:{fontSize:10,fill:`var(--color-muted-foreground)`},axisLine:!1,tickLine:!1,tickFormatter:e=>e>=1e3?`${(e/1e3).toFixed(0)}k`:String(e)}),(0,B.jsx)(k,{type:`category`,dataKey:`name`,width:110,tick:{fontSize:9,fill:`var(--color-muted-foreground)`,fontFamily:`monospace`},axisLine:!1,tickLine:!1}),(0,B.jsx)(E,{content:(0,B.jsx)(ea,{})}),(0,B.jsx)(G,{formatter:e=>(0,B.jsx)(`span`,{className:`text-xs`,children:e})}),(0,B.jsx)(F,{dataKey:`tokensOut`,name:`Output tokens`,fill:R.purple,stackId:`a`,radius:[0,3,3,0]}),(0,B.jsx)(F,{dataKey:`tokensCacheRead`,name:`Cached tokens`,fill:R.cyan,stackId:`a`,radius:[0,3,3,0]})]})})]})}function na(e){return e===null?`—`:`$${e.toFixed(4)}`}function ra(e){if(e===null)return`—`;let t=Math.round(e/1e3),n=Math.floor(t/60),r=t%60;return n===0?`${r}s`:`${n}m ${r}s`}function ia({rate:e}){let t=(e*100).toFixed(0);return(0,B.jsxs)(`span`,{className:l(`inline-block px-1.5 py-0.5 rounded text-[10px] font-medium`,e>=.8?`bg-green-400/10 text-green-400`:e>=.5?`bg-orange-400/10 text-orange-400`:`bg-red-400/10 text-red-400`),children:[t,`%`]})}function $({label:e,sortKey:t,current:n,dir:r,onSort:i}){return(0,B.jsx)(`th`,{onClick:()=>i(t),className:`px-3 py-2 text-left text-[10px] font-medium text-muted-foreground uppercase tracking-wide cursor-pointer select-none hover:text-foreground whitespace-nowrap`,children:(0,B.jsxs)(`span`,{className:`inline-flex items-center gap-1`,children:[e,n===t?r===`asc`?(0,B.jsx)(Yt,{className:`w-3 h-3`}):(0,B.jsx)(Kt,{className:`w-3 h-3`}):(0,B.jsx)(Xt,{className:`w-3 h-3 opacity-40`})]})})}function aa({data:e}){let[t,n]=(0,z.useState)(`totalCostUsd`),[r,i]=(0,z.useState)(`desc`);function a(e){e===t?i(e=>e===`asc`?`desc`:`asc`):(n(e),i(`desc`))}let o=[...e].sort((e,n)=>{let i=e[t]??-1/0,a=n[t]??-1/0,o=typeof i==`string`?i.localeCompare(a):i-a;return r===`asc`?o:-o});return e.length===0?(0,B.jsxs)(`div`,{className:`rounded-lg border border-border/40 bg-card/50 p-4`,children:[(0,B.jsx)(`h3`,{className:`text-sm font-medium mb-3`,children:`Command Performance`}),(0,B.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`No command data for this period`})]}):(0,B.jsxs)(`div`,{className:`rounded-lg border border-border/40 bg-card/50 p-4`,children:[(0,B.jsx)(`h3`,{className:`text-sm font-medium mb-3`,children:`Command Performance`}),(0,B.jsx)(`div`,{className:`overflow-x-auto`,children:(0,B.jsxs)(`table`,{className:`w-full text-xs`,children:[(0,B.jsx)(`thead`,{children:(0,B.jsxs)(`tr`,{className:`border-b border-border/30`,children:[(0,B.jsx)($,{label:`Command`,sortKey:`command`,current:t,dir:r,onSort:a}),(0,B.jsx)($,{label:`Runs`,sortKey:`totalRuns`,current:t,dir:r,onSort:a}),(0,B.jsx)($,{label:`Success Rate`,sortKey:`successRate`,current:t,dir:r,onSort:a}),(0,B.jsx)($,{label:`Avg Cost`,sortKey:`avgCostUsd`,current:t,dir:r,onSort:a}),(0,B.jsx)($,{label:`Avg Duration`,sortKey:`avgDurationMs`,current:t,dir:r,onSort:a}),(0,B.jsx)($,{label:`Total Cost`,sortKey:`totalCostUsd`,current:t,dir:r,onSort:a})]})}),(0,B.jsx)(`tbody`,{children:o.map(e=>(0,B.jsxs)(`tr`,{className:`border-b border-border/20 hover:bg-accent/20 transition-colors`,children:[(0,B.jsx)(`td`,{className:`px-3 py-2 font-mono text-[10px] text-foreground`,children:e.command}),(0,B.jsx)(`td`,{className:`px-3 py-2 tabular-nums`,children:e.totalRuns}),(0,B.jsx)(`td`,{className:`px-3 py-2`,children:(0,B.jsx)(ia,{rate:e.successRate})}),(0,B.jsx)(`td`,{className:`px-3 py-2 tabular-nums`,children:na(e.avgCostUsd)}),(0,B.jsx)(`td`,{className:`px-3 py-2 tabular-nums`,children:ra(e.avgDurationMs)}),(0,B.jsx)(`td`,{className:`px-3 py-2 tabular-nums font-medium`,children:na(e.totalCostUsd)})]},e.command))})]})})]})}function oa({active:e,payload:t,label:n}){return!e||!t?.length?null:(0,B.jsxs)(`div`,{className:`bg-popover border border-border/30 rounded-lg p-2 text-xs shadow-lg`,children:[(0,B.jsx)(`p`,{className:`text-muted-foreground mb-1`,children:n}),t.map(e=>(0,B.jsxs)(`p`,{style:{color:e.color},children:[e.name,`: `,e.value]},e.name))]})}function sa(e){try{return Le(new Date(e),`MMM d`)}catch{return e}}function ca({data:e}){if(!(e.length>0&&e.some(e=>e.completed+e.failed+e.canceled>0)))return(0,B.jsxs)(`div`,{className:`rounded-lg border border-border/40 bg-card/50 p-4`,children:[(0,B.jsx)(`h3`,{className:`text-sm font-medium mb-3`,children:`Daily Throughput`}),(0,B.jsx)(`div`,{className:`h-[220px] flex items-center justify-center text-xs text-muted-foreground`,children:`No throughput data for this period`})]});let t=Math.max(1,Math.floor(e.length/7)),n=e.filter((e,n)=>n%t===0).map(e=>e.date);return(0,B.jsxs)(`div`,{className:`rounded-lg border border-border/40 bg-card/50 p-4`,children:[(0,B.jsx)(`h3`,{className:`text-sm font-medium mb-3`,children:`Daily Throughput`}),(0,B.jsx)(N,{width:`100%`,height:220,children:(0,B.jsxs)(kt,{data:e,margin:{top:4,right:8,left:0,bottom:0},children:[(0,B.jsx)(M,{strokeDasharray:`3 3`,stroke:`var(--color-border)`,vertical:!1}),(0,B.jsx)(j,{dataKey:`date`,ticks:n,tickFormatter:sa,tick:{fontSize:10,fill:`var(--color-muted-foreground)`},axisLine:!1,tickLine:!1}),(0,B.jsx)(k,{allowDecimals:!1,tick:{fontSize:10,fill:`var(--color-muted-foreground)`},axisLine:!1,tickLine:!1,width:30}),(0,B.jsx)(E,{content:(0,B.jsx)(oa,{})}),(0,B.jsx)(G,{formatter:e=>(0,B.jsx)(`span`,{className:`text-xs capitalize`,children:e})}),(0,B.jsx)(F,{dataKey:`completed`,name:`Completed`,stackId:`a`,fill:R.purple}),(0,B.jsx)(F,{dataKey:`failed`,name:`Failed`,stackId:`a`,fill:R.pink}),(0,B.jsx)(F,{dataKey:`canceled`,name:`Canceled`,stackId:`a`,fill:R.orange,radius:[3,3,0,0]})]})})]})}function la({x:e=0,y:t=0,width:n=0,height:r=0,name:i=``,size:a=0,colorIndex:o=0}){let s=Jt[o%Jt.length];return(0,B.jsxs)(`g`,{children:[(0,B.jsx)(`rect`,{x:e,y:t,width:n,height:r,style:{fill:s,fillOpacity:.8,stroke:`var(--color-background)`,strokeWidth:2},rx:4}),n>50&&r>30&&(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(`text`,{x:e+6,y:t+16,fill:`var(--color-background)`,fontSize:10,fontFamily:`monospace`,style:{overflow:`hidden`},children:i.length>Math.floor(n/6)?i.slice(0,Math.floor(n/6)-1)+`…`:i}),r>45&&(0,B.jsxs)(`text`,{x:e+6,y:t+30,fill:`hsl(231 15% 18% / 0.7)`,fontSize:9,children:[`$`,a.toFixed(4)]})]})]})}function ua({active:e,payload:t}){if(!e||!t?.length)return null;let n=t[0].payload;return n?(0,B.jsxs)(`div`,{className:`bg-popover border border-border/30 rounded-lg p-2 text-xs shadow-lg`,children:[(0,B.jsx)(`p`,{className:`font-mono font-medium mb-1`,children:n.name}),(0,B.jsxs)(`p`,{className:`text-muted-foreground`,children:[`Cost: $`,n.size.toFixed(4)]}),(0,B.jsxs)(`p`,{className:`text-muted-foreground`,children:[`Jobs: `,n.jobCount]})]}):null}function da({data:e}){let t=e.filter(e=>e.totalCostUsd>0);if(t.length===0)return(0,B.jsxs)(`div`,{className:`rounded-lg border border-border/40 bg-card/50 p-4`,children:[(0,B.jsx)(`h3`,{className:`text-sm font-medium mb-3`,children:`Cost per Command`}),(0,B.jsx)(`div`,{className:`h-[220px] flex items-center justify-center text-xs text-muted-foreground`,children:`No cost data for this period`})]});let n=t.map((e,t)=>({name:e.command,size:e.totalCostUsd,jobCount:e.jobCount,colorIndex:t}));return(0,B.jsxs)(`div`,{className:`rounded-lg border border-border/40 bg-card/50 p-4`,children:[(0,B.jsx)(`h3`,{className:`text-sm font-medium mb-3`,children:`Cost per Command`}),(0,B.jsx)(N,{width:`100%`,height:220,children:(0,B.jsx)(Wi,{data:n,dataKey:`size`,content:(0,B.jsx)(la,{}),children:(0,B.jsx)(E,{content:(0,B.jsx)(ua,{})})})})]})}function fa({label:e,value:t}){return(0,B.jsxs)(`div`,{className:`rounded-lg border border-border/40 bg-card/50 p-3 space-y-1`,children:[(0,B.jsx)(`p`,{className:`text-[10px] text-muted-foreground uppercase tracking-wide`,children:e}),(0,B.jsx)(`p`,{className:`text-base font-semibold tabular-nums`,children:t})]})}function pa({data:e}){let t=e.costPerSuccess===null?`—`:`$${e.costPerSuccess.toFixed(4)}`,n=e.apiEfficiencyPct===null?`—`:`${e.apiEfficiencyPct.toFixed(0)}%`,r=`$${e.failureCostUsd.toFixed(4)}`;return(0,B.jsxs)(`div`,{className:`rounded-lg border border-border/40 bg-card/50 p-4 space-y-4`,children:[(0,B.jsx)(`h3`,{className:`text-sm font-medium`,children:`Bonus Metrics`}),(0,B.jsxs)(`div`,{className:`grid grid-cols-3 gap-3`,children:[(0,B.jsx)(fa,{label:`Cost per Success`,value:t}),(0,B.jsx)(fa,{label:`API Efficiency`,value:n}),(0,B.jsx)(fa,{label:`Failure Cost`,value:r})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`h4`,{className:`text-xs font-medium text-muted-foreground mb-2`,children:`Model Breakdown`}),e.modelBreakdown.length===0?(0,B.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`No model data for this period`}):(0,B.jsx)(`div`,{className:`overflow-x-auto`,children:(0,B.jsxs)(`table`,{className:`w-full text-xs`,children:[(0,B.jsx)(`thead`,{children:(0,B.jsxs)(`tr`,{className:`border-b border-border/30`,children:[(0,B.jsx)(`th`,{className:`px-3 py-1.5 text-left text-[10px] font-medium text-muted-foreground uppercase tracking-wide`,children:`Model`}),(0,B.jsx)(`th`,{className:`px-3 py-1.5 text-left text-[10px] font-medium text-muted-foreground uppercase tracking-wide`,children:`Jobs`}),(0,B.jsx)(`th`,{className:`px-3 py-1.5 text-left text-[10px] font-medium text-muted-foreground uppercase tracking-wide`,children:`Total Cost`})]})}),(0,B.jsx)(`tbody`,{children:e.modelBreakdown.map(e=>(0,B.jsxs)(`tr`,{className:`border-b border-border/20`,children:[(0,B.jsx)(`td`,{className:`px-3 py-1.5 font-mono text-[10px]`,children:e.model}),(0,B.jsx)(`td`,{className:`px-3 py-1.5 tabular-nums`,children:e.jobCount}),(0,B.jsxs)(`td`,{className:`px-3 py-1.5 tabular-nums`,children:[`$`,e.totalCostUsd.toFixed(4)]})]},e.model))})]})})]})]})}var ma=[{key:`cost`,label:`Avg Cost ($)`,color:R.purple},{key:`duration`,label:`Avg Duration (min)`,color:R.cyan},{key:`successRate`,label:`Success Rate (%)`,color:R.green}];function ha({active:e,payload:t,label:n}){return!e||!t?.length?null:(0,B.jsxs)(`div`,{className:`bg-popover border border-border/30 rounded-lg p-2 text-xs shadow-lg space-y-1`,children:[(0,B.jsx)(`p`,{className:`text-muted-foreground mb-1`,children:n}),t.map(e=>(0,B.jsxs)(`p`,{style:{color:e.color},children:[e.name,`: `,(0,B.jsx)(`span`,{className:`font-medium`,children:e.value})]},e.name))]})}function ga(e){try{return Le(new Date(e),`MMM d`)}catch{return e}}function _a({points:e}){let[t,n]=(0,z.useState)(new Set([`cost`,`successRate`])),r=e.some(e=>e.jobCount>0),i=e.map(e=>({date:e.date,cost:e.avgCostUsd===null?0:parseFloat(e.avgCostUsd.toFixed(4)),duration:e.avgDurationMs===null?0:parseFloat((e.avgDurationMs/6e4).toFixed(2)),successRate:parseFloat((e.successRate*100).toFixed(1)),jobCount:e.jobCount})),a=Math.max(1,Math.floor(e.length/7)),o=e.filter((e,t)=>t%a===0).map(e=>e.date);function s(e){n(t=>{let n=new Set(t);return n.has(e)?n.size>1&&n.delete(e):n.add(e),n})}return(0,B.jsxs)(`div`,{className:`rounded-lg border border-border/40 bg-card/50 p-4`,children:[(0,B.jsxs)(`div`,{className:`flex items-center justify-between mb-3`,children:[(0,B.jsx)(`h3`,{className:`text-sm font-medium`,children:`Performance Trends`}),(0,B.jsx)(`div`,{className:`flex items-center gap-2`,children:ma.map(e=>(0,B.jsxs)(`button`,{type:`button`,onClick:()=>s(e.key),className:`flex items-center gap-1 text-[10px] px-2 py-0.5 rounded transition-colors ${t.has(e.key)?`bg-accent text-foreground`:`text-muted-foreground hover:text-foreground hover:bg-accent/50`}`,children:[(0,B.jsx)(`span`,{className:`w-2 h-2 rounded-full inline-block shrink-0`,style:{background:e.color}}),e.label]},e.key))})]}),r?(0,B.jsx)(N,{width:`100%`,height:220,children:(0,B.jsxs)(ht,{data:i,margin:{top:4,right:8,left:0,bottom:0},children:[(0,B.jsx)(M,{strokeDasharray:`3 3`,stroke:`var(--color-border)`}),(0,B.jsx)(j,{dataKey:`date`,ticks:o,tickFormatter:ga,tick:{fontSize:10,fill:`var(--color-muted-foreground)`},axisLine:!1,tickLine:!1}),(0,B.jsx)(k,{tick:{fontSize:10,fill:`var(--color-muted-foreground)`},axisLine:!1,tickLine:!1,width:40}),(0,B.jsx)(E,{content:(0,B.jsx)(ha,{})}),(0,B.jsx)(G,{wrapperStyle:{fontSize:`10px`,paddingTop:`8px`}}),t.has(`cost`)&&(0,B.jsx)(ft,{type:`monotone`,dataKey:`cost`,name:`Avg Cost ($)`,stroke:R.purple,strokeWidth:2,dot:!1,activeDot:{r:3,fill:R.purple}}),t.has(`duration`)&&(0,B.jsx)(ft,{type:`monotone`,dataKey:`duration`,name:`Avg Duration (min)`,stroke:R.cyan,strokeWidth:2,dot:!1,activeDot:{r:3,fill:R.cyan}}),t.has(`successRate`)&&(0,B.jsx)(ft,{type:`monotone`,dataKey:`successRate`,name:`Success Rate (%)`,stroke:R.green,strokeWidth:2,dot:!1,activeDot:{r:3,fill:R.green}})]})}):(0,B.jsx)(`div`,{className:`h-[220px] flex items-center justify-center text-xs text-muted-foreground`,children:`No job data for this period`})]})}function va(){return(0,B.jsxs)(`div`,{className:`space-y-4`,children:[(0,B.jsx)(`div`,{className:`grid grid-cols-2 lg:grid-cols-4 gap-3`,children:Array.from({length:4}).map((e,t)=>(0,B.jsx)(`div`,{className:`h-20 rounded-lg border border-border/40 bg-card/50 animate-pulse`},t))}),(0,B.jsx)(`div`,{className:`grid grid-cols-1 md:grid-cols-2 gap-4`,children:Array.from({length:4}).map((e,t)=>(0,B.jsx)(`div`,{className:`h-[260px] rounded-lg border border-border/40 bg-card/50 animate-pulse`},t))}),(0,B.jsx)(`div`,{className:`h-[180px] rounded-lg border border-border/40 bg-card/50 animate-pulse`})]})}function ya({message:e,onRetry:t}){return(0,B.jsxs)(`div`,{className:`rounded-lg border border-red-400/30 bg-red-400/10 p-4 flex items-center justify-between`,children:[(0,B.jsx)(`p`,{className:`text-sm text-red-400`,children:e}),(0,B.jsxs)(`button`,{onClick:t,className:`flex items-center gap-1.5 h-7 px-3 rounded-md text-xs text-red-400 border border-red-400/30 hover:bg-red-400/10 transition-colors`,children:[(0,B.jsx)(Gt,{className:`w-3 h-3`}),`Retry`]})]})}var ba=[{value:`1d`,label:`1d`},{value:`7d`,label:`7d`},{value:`30d`,label:`30d`}];function xa(){let{activeProjectId:e}=o(),[t,n]=(0,z.useState)(`7d`),[r,i]=(0,z.useState)(``),[a,c]=(0,z.useState)(``),[l,d]=(0,z.useState)(null),[f,p]=(0,z.useState)(!0),[m,h]=(0,z.useState)(null),[g,_]=(0,z.useState)(0),[v,y]=(0,z.useState)(`7d`),[b,x]=(0,z.useState)(null),S=(0,z.useRef)(new Map);(0,z.useEffect)(()=>{if(e){let t=S.current.get(e);t&&(d(t),p(!1))}let n=new AbortController;!l&&!S.current.get(e??``)&&p(!0),h(null);let i=new URLSearchParams({period:t});if(t===`custom`){if(!r||!a){p(!1);return}i.set(`from`,r),i.set(`to`,a)}return fetch(`${s()}/analytics?${i}`,{signal:n.signal}).then(e=>{if(!e.ok)throw Error(`HTTP ${e.status}`);return e.json()}).then(t=>{d(t),e&&S.current.set(e,t),p(!1)}).catch(e=>{e.name!==`AbortError`&&(h(e.message),p(!1))}),()=>n.abort()},[t,r,a,g,e]),(0,z.useEffect)(()=>{let e=new AbortController;return fetch(`${s()}/trends?period=${v}`,{signal:e.signal}).then(e=>e.ok?e.json():Promise.reject(Error(`HTTP ${e.status}`))).then(e=>x(e)).catch(e=>{e.name!==`AbortError`&&console.warn(`[analytics] trends fetch failed:`,e.message)}),()=>e.abort()},[v,e]);function C(e,t,r){n(e),i(t??``),c(r??``)}function w(){_(e=>e+1)}return(0,B.jsxs)(`div`,{className:`flex flex-col gap-4 p-4`,children:[(0,B.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-3`,children:[(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`h1`,{className:`text-base font-semibold`,children:`Analytics`}),l&&(0,B.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:l.period.label})]}),(0,B.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,B.jsx)($e,{period:t,from:r,to:a,onChange:C}),(0,B.jsx)(u,{baseUrl:`${s()}/analytics/export`,params:{period:t,...r?{from:r}:{},...a?{to:a}:{}}})]})]}),f&&(0,B.jsx)(va,{}),!f&&m&&(0,B.jsx)(ya,{message:`Failed to load analytics: ${m}`,onRetry:w}),!f&&!m&&l&&(0,B.jsxs)(`div`,{className:`space-y-6`,children:[(0,B.jsx)(an,{kpi:l.kpi}),(0,B.jsxs)(`div`,{className:`grid grid-cols-1 md:grid-cols-2 gap-4`,children:[(0,B.jsx)(qi,{data:l.costTimeline}),(0,B.jsx)(Yi,{data:l.statusBreakdown}),(0,B.jsx)($i,{data:l.durationHistogram,percentiles:l.durationPercentiles}),(0,B.jsx)(ta,{data:l.tokenEfficiency})]}),(0,B.jsx)(aa,{data:l.commandPerformance}),(0,B.jsxs)(`div`,{className:`grid grid-cols-1 md:grid-cols-2 gap-4`,children:[(0,B.jsx)(ca,{data:l.dailyThroughput}),(0,B.jsx)(da,{data:l.costPerCommand})]}),(0,B.jsx)(pa,{data:l.bonusMetrics}),b&&(0,B.jsxs)(`div`,{children:[(0,B.jsxs)(`div`,{className:`flex items-center gap-2 mb-2`,children:[(0,B.jsx)(`h2`,{className:`text-sm font-medium`,children:`Trends`}),(0,B.jsx)(`div`,{className:`flex items-center gap-1`,children:ba.map(e=>(0,B.jsx)(`button`,{type:`button`,onClick:()=>y(e.value),className:`px-2 py-0.5 rounded text-[10px] font-medium transition-colors ${v===e.value?`bg-accent text-foreground`:`text-muted-foreground hover:text-foreground hover:bg-accent/50`}`,children:e.label},e.value))})]}),(0,B.jsx)(_a,{points:b.points})]})]})]})}export{xa as default};