claude-session-dashboard 0.2.1 → 0.3.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 (31) hide show
  1. package/README.md +156 -14
  2. package/dist/client/assets/_dashboard-I7m6D7BE.js +1 -0
  3. package/dist/client/assets/_sessionId-DEliIff6.js +12 -0
  4. package/dist/client/assets/app-D7yorIIh.css +1 -0
  5. package/dist/client/assets/{createServerFn-B0pEGqTk.js → createServerFn-Bn6_ISOt.js} +1 -1
  6. package/dist/client/assets/index-BkqRvnEf.js +1 -0
  7. package/dist/client/assets/{main-CM5g2n-_.js → main-CfJIADCp.js} +7 -7
  8. package/dist/client/assets/{sessions.queries-AUVV0tJj.js → sessions.queries-CrJg4dYU.js} +1 -1
  9. package/dist/client/assets/settings-C4_lsEzl.js +1 -0
  10. package/dist/client/assets/{settings.types-BRNIMHGJ.js → settings.types-9Qf5WcRY.js} +1 -1
  11. package/dist/client/assets/stats-_r1gmaTe.js +4 -0
  12. package/dist/client/assets/{useSessionCost-DgFKglaG.js → useSessionCost-DPZ-ubM1.js} +1 -1
  13. package/dist/client/favicon.svg +3 -0
  14. package/dist/server/assets/_dashboard-TUzgwLqB.js +112 -0
  15. package/dist/server/assets/{_sessionId-BZf2Aqy5.js → _sessionId-C-XZIPqn.js} +31 -32
  16. package/dist/server/assets/_tanstack-start-manifest_v-B51mSkGz.js +4 -0
  17. package/dist/server/assets/{index-Do0HxVmM.js → index-CKfH7HpA.js} +22 -21
  18. package/dist/server/assets/{router-ChxlsPNU.js → router-Cb_hBXHI.js} +55 -29
  19. package/dist/server/assets/{settings-ko61yfVs.js → settings-C0_KyVQQ.js} +66 -20
  20. package/dist/server/assets/{stats-C9cZXTP5.js → stats-BtgVene-.js} +261 -24
  21. package/dist/server/assets/{stats.server-52mNk2Yw.js → stats.server-qTOvID9-.js} +61 -2
  22. package/dist/server/server.js +12 -12
  23. package/package.json +7 -1
  24. package/dist/client/assets/_dashboard-Bxw4OxIS.js +0 -1
  25. package/dist/client/assets/_sessionId-CNR4Ln7m.js +0 -12
  26. package/dist/client/assets/app-u2nTs9ny.css +0 -1
  27. package/dist/client/assets/index-BbdJ1jMA.js +0 -1
  28. package/dist/client/assets/settings-CIwZDakc.js +0 -1
  29. package/dist/client/assets/stats-CjWSMX3y.js +0 -4
  30. package/dist/server/assets/_dashboard-CAO6-qAS.js +0 -116
  31. package/dist/server/assets/_tanstack-start-manifest_v-C5hwNzs-.js +0 -4
package/README.md CHANGED
@@ -1,23 +1,118 @@
1
1
  # Claude Session Dashboard
2
2
 
3
- A read-only, local observability dashboard for [Claude Code](https://docs.anthropic.com/en/docs/claude-code) sessions. Scans your `~/.claude` directory to visualize session details, tool usage, agent dispatches, token consumption, and execution timelines.
3
+ A read-only, local observability dashboard for [Claude Code](https://docs.anthropic.com/en/docs/claude-code) sessions. Scans your `~/.claude` directory to visualize session history, tool usage, token consumption, cost estimates, and activity trends -- all without sending data anywhere.
4
4
 
5
- ## Usage
5
+ ![Sessions Page](https://raw.githubusercontent.com/dlupiak/claude-session-dashboard/main/screenshots/sessions-page.png)
6
+
7
+ ## Why?
8
+
9
+ Claude Code stores all session data locally in `~/.claude/projects/`, but there is no built-in way to browse, search, or analyze past sessions. As you accumulate hundreds of sessions across dozens of projects, questions start piling up:
10
+
11
+ - How many tokens did that refactoring session actually use?
12
+ - Which tools does Claude call most often in my codebase?
13
+ - How much am I spending per project, per day, per model?
14
+ - Is the context window filling up mid-session?
15
+ - When am I most active -- mornings or late nights?
16
+
17
+ This dashboard gives you answers. It reads your local session files, parses the JSONL logs, and presents everything in a fast, searchable web UI that runs entirely on your machine.
18
+
19
+ ## Features
20
+
21
+ **Session browsing and search**
22
+ - Full-text search across session names, projects, and branches
23
+ - Filter by status (active / completed), project, model, and date range
24
+ - Sortable columns with pagination
25
+ - Active session indicator with real-time status polling
26
+
27
+ **Session detail view**
28
+ - Context window utilization breakdown (input, output, cache read, cache creation)
29
+ - Tool usage frequency and duration statistics
30
+ - Agent dispatch history with nested tool calls
31
+ - Gantt-style timeline chart with zoom controls for tool calls, agent runs, and skill invocations
32
+ - Per-session and per-agent cost estimates with per-model and per-category breakdowns
33
+
34
+ ![Session Detail](https://raw.githubusercontent.com/dlupiak/claude-session-dashboard/main/screenshots/session-detail-full.png)
35
+
36
+ **Analytics and stats**
37
+ - GitHub-style contribution heatmap showing token usage intensity over the past year
38
+ - Token usage over time -- stacked area chart with daily/weekly toggle, top 5 models + "Other"
39
+ - Model usage distribution across all sessions
40
+ - Hourly activity distribution chart
41
+ - Aggregate metrics: total sessions, messages, tokens, estimated cost
42
+
43
+ ![Stats Overview](https://raw.githubusercontent.com/dlupiak/claude-session-dashboard/main/screenshots/stats-overview.png)
44
+
45
+ **Per-project analytics**
46
+ - Dedicated "Projects" tab with sortable table
47
+ - Sessions, messages, tokens, and duration aggregated per project
48
+ - Drill-down links to filtered session lists
49
+
50
+ ![Per-Project Analytics](https://raw.githubusercontent.com/dlupiak/claude-session-dashboard/main/screenshots/stats-projects.png)
51
+
52
+ **Cost estimation**
53
+ - Configurable API pricing per model (Claude Sonnet 4, Opus 4, Haiku, etc.)
54
+ - Subscription tier support (Free, Pro, Max 5x/20x) with appropriate rate adjustments
55
+ - Settings persisted to `~/.claude-dashboard/settings.json`
56
+
57
+ ![Settings Page](https://raw.githubusercontent.com/dlupiak/claude-session-dashboard/main/screenshots/settings-page.png)
58
+
59
+ **Data export**
60
+ - Export stats and session data in CSV or JSON format
61
+ - Four export formats: session summaries, model usage, daily activity, project analytics
62
+ - Client-side export -- no server round-trip needed
63
+
64
+ **Real-time monitoring**
65
+ - Active sessions badge in the sidebar with 3-second status polling
66
+ - Active session banner on detail pages with adaptive refresh intervals
67
+ - Automatic data refresh for in-progress sessions
68
+
69
+ **Privacy mode**
70
+ - Toggle to anonymize project names, file paths, branch names, and usernames
71
+ - Analytics data anonymized consistently across all views
72
+ - Safe for screenshot sharing and presentations
73
+
74
+ ## Quick Start
75
+
76
+ ### Using npx (recommended)
6
77
 
7
78
  ```bash
8
79
  npx claude-session-dashboard
9
80
  ```
10
81
 
11
- Or install globally:
82
+ ### Using npm (global install)
12
83
 
13
84
  ```bash
14
85
  npm install -g claude-session-dashboard
15
86
  claude-dashboard
16
87
  ```
17
88
 
89
+ ### Using Docker
90
+
91
+ ```bash
92
+ docker run -v ~/.claude:/home/node/.claude:ro -p 3000:3000 ghcr.io/dlupiak/claude-session-dashboard
93
+ ```
94
+
95
+ Or with Docker Compose:
96
+
97
+ ```bash
98
+ git clone https://github.com/dlupiak/claude-session-dashboard.git
99
+ cd claude-session-dashboard
100
+ docker compose up
101
+ ```
102
+
103
+ ### From source
104
+
105
+ ```bash
106
+ git clone https://github.com/dlupiak/claude-session-dashboard.git
107
+ cd claude-session-dashboard/apps/web
108
+ npm install
109
+ npm run build
110
+ npm start
111
+ ```
112
+
18
113
  Open [http://localhost:3000](http://localhost:3000) in your browser.
19
114
 
20
- ### CLI Options
115
+ ## CLI Options
21
116
 
22
117
  ```
23
118
  -p, --port <number> Port to listen on (default: 3000)
@@ -27,25 +122,72 @@ Open [http://localhost:3000](http://localhost:3000) in your browser.
27
122
  -h, --help Show this help message
28
123
  ```
29
124
 
30
- ## Features
125
+ > **Note:** The dashboard runs entirely on localhost and only reads files from `~/.claude`. It never modifies any Claude Code data and never sends data over the network.
31
126
 
32
- - **Sessions list** with search, status filters, project filters, and pagination
33
- - **Session detail** with context window breakdown, tool usage stats, agent dispatch history
34
- - **Cost estimation** per session and per agent based on Anthropic API pricing
35
- - **Timeline chart** showing tool calls, agent runs, and skill invocations
36
- - **Stats page** with aggregate metrics across all sessions
37
- - **Live updates** for active sessions
38
- - **Privacy mode** to anonymize paths and usernames for safe screenshot sharing
127
+ ## Tech Stack
128
+
129
+ - [TanStack Start](https://tanstack.com/start) -- SSR framework on Vite
130
+ - [TanStack Router](https://tanstack.com/router) -- file-based routing with type-safe search params
131
+ - [TanStack Query](https://tanstack.com/query) -- data fetching with caching and automatic background refetch
132
+ - [Tailwind CSS v4](https://tailwindcss.com/) -- utility-first styling with CSS-first configuration
133
+ - [Recharts](https://recharts.org/) -- composable charting library for timeline, heatmap, and stats visualizations
134
+ - [Zod](https://zod.dev/) -- runtime validation for server functions and URL params
135
+ - Node.js >= 18
136
+
137
+ ## Project Structure
138
+
139
+ ```
140
+ apps/web/src/
141
+ routes/ # File-based routes (TanStack Router)
142
+ _dashboard/
143
+ sessions/
144
+ index.tsx # Sessions list page
145
+ $sessionId.tsx # Session detail page
146
+ stats.tsx # Stats + per-project analytics page
147
+ settings.tsx # Settings page
148
+ features/ # Vertical Slice Architecture
149
+ sessions/ # Session list, filters, active badge
150
+ session-detail/ # Session detail, timeline, context window
151
+ stats/ # Activity chart, heatmap, token trends, model usage
152
+ project-analytics/ # Per-project aggregated metrics
153
+ cost-estimation/ # Cost calculation and display
154
+ settings/ # Subscription tier, pricing editor
155
+ privacy/ # Privacy mode toggle and anonymization
156
+ lib/
157
+ scanner/ # Filesystem scanner for ~/.claude
158
+ parsers/ # JSONL session file parsers
159
+ cache/ # Persistent disk cache (heatmap data)
160
+ utils/ # Formatting, export utilities
161
+ components/ # Shared UI components (ExportDropdown, etc.)
162
+ ```
39
163
 
40
164
  ## How It Works
41
165
 
42
- The dashboard runs a local server that reads `~/.claude/projects/` to discover session `.jsonl` files. It parses them to extract metadata, tool calls, agent dispatches, and token usage, then displays everything in a web UI. No data leaves your machine.
166
+ 1. **Scanning** -- The server reads `~/.claude/projects/` to discover all session `.jsonl` files. An mtime-based cache avoids re-parsing unchanged files.
167
+ 2. **Parsing** -- Session files are parsed to extract metadata (project, branch, duration, model), tool calls, agent dispatches, token usage, and errors.
168
+ 3. **Server Functions** -- TanStack Start server functions (`createServerFn`) expose parsed data to the client via type-safe RPC. All file I/O stays on the server.
169
+ 4. **React Query** -- The UI fetches data through React Query with automatic background refetch for live updates. Active sessions use adaptive polling intervals.
170
+ 5. **Caching** -- Parsed session summaries and heatmap data are cached in memory (mtime-based invalidation) and on disk (`~/.claude-dashboard/cache/`) for fast startup.
171
+
172
+ ## Development
173
+
174
+ ```bash
175
+ cd apps/web
176
+
177
+ npm run dev # Dev server on localhost:3000
178
+ npm run build # Production build
179
+ npm run typecheck # TypeScript type checking
180
+ npm run lint # ESLint
181
+ npm run test # Unit tests (Vitest)
182
+ npm run e2e # End-to-end tests (Playwright)
183
+ ```
43
184
 
44
185
  ## Links
45
186
 
46
187
  - [GitHub](https://github.com/dlupiak/claude-session-dashboard)
47
- - [Issues](https://github.com/dlupiak/claude-session-dashboard/issues)
188
+ - [npm](https://www.npmjs.com/package/claude-session-dashboard)
48
189
  - [Docker](https://github.com/dlupiak/claude-session-dashboard/pkgs/container/claude-session-dashboard)
190
+ - [Issues](https://github.com/dlupiak/claude-session-dashboard/issues)
49
191
 
50
192
  ## License
51
193
 
@@ -0,0 +1 @@
1
+ import{j as e,u as o,L as r,O as i}from"./main-CfJIADCp.js";import{u as c}from"./createServerFn-Bn6_ISOt.js";import{a as x}from"./sessions.queries-CrJg4dYU.js";function h(){const{data:t}=c(x),a=t?.length??0;return a===0?null:e.jsx("span",{className:"ml-auto rounded-full bg-emerald-500/20 px-1.5 py-0.5 text-[10px] font-medium text-emerald-400",children:a})}const d=[{to:"/sessions",label:"Sessions",icon:e.jsxs("svg",{className:"h-4 w-4",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"1.5",children:[e.jsx("line",{x1:"2",y1:"4",x2:"14",y2:"4"}),e.jsx("line",{x1:"2",y1:"8",x2:"14",y2:"8"}),e.jsx("line",{x1:"2",y1:"12",x2:"14",y2:"12"})]})},{to:"/stats",label:"Stats",icon:e.jsxs("svg",{className:"h-4 w-4",viewBox:"0 0 16 16",fill:"currentColor",children:[e.jsx("rect",{x:"1",y:"8",width:"3",height:"7",rx:"0.5"}),e.jsx("rect",{x:"6.5",y:"4",width:"3",height:"11",rx:"0.5"}),e.jsx("rect",{x:"12",y:"1",width:"3",height:"14",rx:"0.5"})]})},{to:"/settings",label:"Settings",icon:e.jsxs("svg",{className:"h-4 w-4",viewBox:"0 0 16 16",fill:"currentColor",children:[e.jsx("path",{d:"M8 10a2 2 0 100-4 2 2 0 000 4z"}),e.jsx("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M6.5.8a1 1 0 011-.8h1a1 1 0 011 .8l.15.9a5.5 5.5 0 011.1.64l.86-.36a1 1 0 011.17.36l.5.86a1 1 0 01-.18 1.17l-.7.55a5.5 5.5 0 010 1.27l.7.55a1 1 0 01.18 1.17l-.5.86a1 1 0 01-1.17.36l-.86-.36a5.5 5.5 0 01-1.1.64l-.14.9a1 1 0 01-1 .8h-1a1 1 0 01-1-.8l-.14-.9a5.5 5.5 0 01-1.1-.64l-.87.36a1 1 0 01-1.17-.36l-.5-.86a1 1 0 01.18-1.17l.7-.55a5.5 5.5 0 010-1.27l-.7-.55a1 1 0 01-.18-1.17l.5-.86a1 1 0 011.17-.36l.87.36a5.5 5.5 0 011.1-.64L6.5.8zM8 11a3 3 0 100-6 3 3 0 000 6z"})]})}];function m({children:t}){const a=o(),l=a[a.length-1]?.pathname??"";return e.jsxs("div",{className:"flex min-h-screen",children:[e.jsxs("aside",{className:"flex w-56 shrink-0 flex-col border-r border-gray-800 bg-gray-950",children:[e.jsx("div",{className:"flex h-14 items-center border-b border-gray-800 px-4",children:e.jsxs(r,{to:"/sessions",className:"text-sm font-bold text-white",children:[e.jsx("span",{className:"text-brand-500",children:"Claude"})," Dashboard"]})}),e.jsx("nav",{className:"flex-1 p-3",children:d.map(s=>{const n=l.startsWith(s.to);return e.jsxs(r,{to:s.to,className:`flex items-center gap-2.5 rounded-lg px-3 py-2 text-sm transition-colors ${n?"bg-gray-800 text-white":"text-gray-400 hover:bg-gray-800/50 hover:text-gray-200"}`,children:[e.jsx("span",{className:"text-gray-500",children:s.icon}),s.label,s.to==="/sessions"&&e.jsx(h,{})]},s.to)})}),e.jsx("div",{className:"border-t border-gray-800 p-3",children:e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("a",{href:"https://github.com/dlupiak/claude-session-dashboard",target:"_blank",rel:"noopener noreferrer",className:"text-gray-500 hover:text-gray-300 transition-colors",title:"GitHub Repository",children:e.jsx("svg",{className:"w-4 h-4",viewBox:"0 0 16 16",fill:"currentColor",children:e.jsx("path",{d:"M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0016 8c0-4.42-3.58-8-8-8z"})})}),e.jsx("a",{href:"https://www.npmjs.com/package/claude-session-dashboard",target:"_blank",rel:"noopener noreferrer",className:"text-gray-500 hover:text-gray-300 transition-colors",title:"npm Package",children:e.jsx("svg",{className:"w-4 h-4",viewBox:"0 0 16 16",fill:"currentColor",children:e.jsx("path",{d:"M0 0v16h16V0H0zm13 13H8V5H5v8H3V3h10v10z"})})})]}),e.jsx("p",{className:"text-xs text-gray-600",children:"Read-only"})]})})]}),e.jsx("main",{className:"flex-1 overflow-auto",children:e.jsx("div",{className:"mx-auto max-w-5xl px-6 py-6",children:t})})]})}function j(){return e.jsx(m,{children:e.jsx(i,{})})}export{j as component};
@@ -0,0 +1,12 @@
1
+ import{c as K,r as M,j as e,L as E,h as B,b as Z}from"./main-CfJIADCp.js";import{c as J,q as V,u as O}from"./createServerFn-Bn6_ISOt.js";import{f as C,d as P,b as w,i as G,g as U}from"./format-Bsprb3az.js";import{R as ee,V as te,Y as se,U as ae,a5 as X,W as ne,a6 as le,a7 as re,_ as z,$ as oe,a0 as ie,a8 as ce}from"./useSessionCost-DPZ-ubM1.js";import{s as de}from"./settings.types-9Qf5WcRY.js";import{a as xe}from"./sessions.queries-CrJg4dYU.js";const me=J({method:"GET"}).handler(K("ff8a3161afdfa175e9c519e4146a56ab5bce6e80745e99cfc2191ebbb7a859bb"));function pe(t,s,a){return V({queryKey:["session","detail",t],queryFn:()=>me({data:{sessionId:t,projectPath:s}}),staleTime:a?2e3:3e4,refetchInterval:a?5e3:void 0})}function ue(t,s,a,n){const r=[];for(const i of t)if(i.timestamp){const p=new Date(i.timestamp).getTime();isNaN(p)||r.push(p)}for(const i of s)if(i.timestamp){const p=new Date(i.timestamp).getTime();isNaN(p)||r.push(p)}for(const i of a)if(i.timestamp){const p=new Date(i.timestamp).getTime();isNaN(p)||r.push(p)}if(r.length===0)return{startMs:0,endMs:0,durationMs:0,mainLane:[],agentLanes:[],skillMarkers:[],errorMarkers:[]};const g=Math.min(...r),c=Math.max(...r),f=Math.max(c-g,1);function m(i){return(i-g)/f}const y=new Set(s.map(i=>i.toolUseId)),l=new Set(a.map(i=>i.toolUseId)),d=[];for(const i of t){if(i.type!=="assistant"||i.toolCalls.length===0)continue;const p=new Date(i.timestamp).getTime();if(!isNaN(p))for(const o of i.toolCalls)y.has(o.toolUseId)||l.has(o.toolUseId)||d.push({timestampMs:p,toolName:o.toolName,toolUseId:o.toolUseId,relativeX:m(p)})}const u=s.map(i=>{const p=new Date(i.timestamp).getTime(),o=i.durationMs?p+i.durationMs:p+f*.02,j=[];if(i.toolCalls){const x=Object.entries(i.toolCalls).sort(([,T],[,R])=>R-T),b=x.reduce((T,[,R])=>T+R,0);let h=0;for(const[T,R]of x)for(let _=0;_<R;_++){const q=b>1?h/(b-1):.5,Q=p+(o-p)*q;j.push({toolName:T,count:1,relativeX:m(Q)}),h++}}return{subagentType:i.subagentType,description:i.description,startMs:p,endMs:o,startX:m(p),endX:m(o),durationMs:i.durationMs??null,totalTokens:i.totalTokens??null,totalToolUseCount:i.totalToolUseCount??null,toolDots:j}}),N=a.map(i=>{const p=new Date(i.timestamp).getTime();return isNaN(p)?null:{skill:i.skill,args:i.args,timestampMs:p,relativeX:m(p)}}).filter(i=>i!==null),k=n.map(i=>{const p=new Date(i.timestamp).getTime();return isNaN(p)?null:{message:i.message,type:i.type,timestampMs:p,relativeX:m(p)}}).filter(i=>i!==null);return{startMs:g,endMs:c,durationMs:f,mainLane:d,agentLanes:u,skillMarkers:N,errorMarkers:k}}function W(t){const s=t.match(/^mcp__[^_]+_[^_]+_[^_]+__(.+)$/);return s?s[1]:t}const he={Read:"#e09070",Grep:"#e09070",Glob:"#e09070",Write:"#34d399",Edit:"#34d399",NotebookEdit:"#34d399",Bash:"#fbbf24",Task:"#818cf8",TaskCreate:"#c084fc",TaskUpdate:"#c084fc",TaskList:"#c084fc",TaskGet:"#c084fc",Skill:"#fcd34d",WebSearch:"#22d3ee",WebFetch:"#22d3ee",EnterPlanMode:"#f472b6",ExitPlanMode:"#f472b6",AskUserQuestion:"#a78bfa"},ge="#9ca3af";function F(t){return he[t]??ge}const S=90,$=16,D=24,v=32,A=8,Y=4;function fe(t,s,a){const n=s-t;if(n<=0)return[];const r=Math.max(3,Math.round(a/120)),g=n/r,c=[5e3,1e4,15e3,3e4,6e4,2*6e4,5*6e4,10*6e4,15*6e4,30*6e4,60*6e4,120*6e4],f=c.find(u=>u>=g)??c[c.length-1],y=n<5*6e4?"HH:mm:ss":"HH:mm",l=Math.ceil(t/f)*f,d=[];for(let u=l;u<=s;u+=f){const N=(u-t)/n;d.push({ms:u,label:C(new Date(u),y),x:S+N*(a-S-$)})}return d}function ye({data:t,width:s,onHover:a}){const n=M.useRef(null),r=s,g=r-S-$,c=t.skillMarkers.length>0,f=t.errorMarkers.length>0;let m=D;const y=m;m+=v;const l=[];for(let o=0;o<t.agentLanes.length;o++)m+=A,l.push(m),m+=v;let d=0;c&&(m+=A,d=m,m+=v);let u=0;f&&(m+=A,u=m,m+=v);const N=Math.max(m+8,80);function k(o){return S+o*g}const i=M.useCallback(o=>{if(!n.current)return{x:0,y:0};const j=n.current.getBoundingClientRect();return{x:o.clientX-j.left,y:o.clientY-j.top}},[]),p=fe(t.startMs,t.endMs,r);return e.jsxs("svg",{ref:n,width:r,height:N,className:"select-none",role:"img","aria-label":"Session timeline showing tool calls, agent runs, and skill invocations",onMouseLeave:()=>a(null,{x:0,y:0}),children:[e.jsx("line",{x1:S,y1:D-4,x2:r-$,y2:D-4,stroke:"#374151",strokeWidth:1}),p.map(o=>e.jsxs("g",{children:[e.jsx("line",{x1:o.x,y1:D-8,x2:o.x,y2:D-4,stroke:"#4b5563",strokeWidth:1}),e.jsx("text",{x:o.x,y:D-12,textAnchor:"middle",className:"fill-gray-500 text-[10px]",children:o.label})]},o.ms)),e.jsx("text",{x:4,y:y+v/2+4,className:"fill-gray-500 text-[11px] font-medium",children:"Main"}),e.jsx("line",{x1:S,y1:y+v/2,x2:r-$,y2:y+v/2,stroke:"#1f2937",strokeWidth:1,strokeDasharray:"2,4"}),t.mainLane.map(o=>e.jsx("circle",{cx:k(o.relativeX),cy:y+v/2,r:Y,fill:F(o.toolName),opacity:.85,className:"cursor-pointer transition-transform hover:opacity-100",onMouseEnter:j=>a({kind:"tool",toolName:o.toolName,timestamp:new Date(o.timestampMs).toISOString(),toolUseId:o.toolUseId},i(j)),onMouseLeave:()=>a(null,{x:0,y:0}),children:e.jsx("title",{children:o.toolName})},o.toolUseId)),t.agentLanes.map((o,j)=>e.jsx(be,{lane:o,y:l[j],toX:k,laneHeight:v,onHover:a,getPosition:i},`${o.subagentType}-${j}`)),c&&e.jsxs(e.Fragment,{children:[e.jsx("text",{x:4,y:d+v/2+4,className:"fill-amber-400/70 text-[11px] font-medium",children:"Skills"}),e.jsx("line",{x1:S,y1:d+v/2,x2:r-$,y2:d+v/2,stroke:"#1f2937",strokeWidth:1,strokeDasharray:"2,4"}),t.skillMarkers.map((o,j)=>{const x=k(o.relativeX),b=d+v/2,h=5;return e.jsx("polygon",{points:`${x},${b-h} ${x+h},${b} ${x},${b+h} ${x-h},${b}`,fill:"#fbbf24",opacity:.85,className:"cursor-pointer hover:opacity-100",onMouseEnter:T=>a({kind:"skill",skill:o.skill,args:o.args,timestamp:new Date(o.timestampMs).toISOString()},i(T)),onMouseLeave:()=>a(null,{x:0,y:0}),children:e.jsxs("title",{children:["/",o.skill]})},`${o.skill}-${j}`)})]}),f&&e.jsxs(e.Fragment,{children:[e.jsx("text",{x:4,y:u+v/2+4,className:"fill-red-400/70 text-[11px] font-medium",children:"Errors"}),e.jsx("line",{x1:S,y1:u+v/2,x2:r-$,y2:u+v/2,stroke:"#1f2937",strokeWidth:1,strokeDasharray:"2,4"}),t.errorMarkers.map((o,j)=>{const x=k(o.relativeX),b=u+v/2,h=5;return e.jsxs("g",{className:"cursor-pointer hover:opacity-100",opacity:.85,onMouseEnter:T=>a({kind:"error",message:o.message,type:o.type,timestamp:new Date(o.timestampMs).toISOString()},i(T)),onMouseLeave:()=>a(null,{x:0,y:0}),children:[e.jsx("line",{x1:x-h,y1:b-h,x2:x+h,y2:b+h,stroke:"#f87171",strokeWidth:2,strokeLinecap:"round"}),e.jsx("line",{x1:x+h,y1:b-h,x2:x-h,y2:b+h,stroke:"#f87171",strokeWidth:2,strokeLinecap:"round"}),e.jsxs("title",{children:[o.type,": ",o.message]})]},`err-${j}`)})]})]})}function be({lane:t,y:s,toX:a,laneHeight:n,onHover:r,getPosition:g}){const c=a(t.startX),f=Math.max(a(t.endX)-c,8),m=s+n/2,y=t.subagentType.length>10?t.subagentType.slice(0,10)+"...":t.subagentType;return e.jsxs("g",{children:[e.jsx("text",{x:4,y:m+4,className:"fill-indigo-400/70 text-[11px] font-medium",children:y}),e.jsx("rect",{x:c,y:s+2,width:f,height:n-4,rx:6,fill:"rgba(99, 102, 241, 0.08)",stroke:"rgba(99, 102, 241, 0.2)",strokeWidth:1,className:"cursor-pointer hover:fill-indigo-500/15",onMouseEnter:l=>r({kind:"agent",agent:t},g(l)),onMouseLeave:()=>r(null,{x:0,y:0}),children:e.jsxs("title",{children:[t.subagentType,": ",t.description]})}),e.jsx("line",{x1:c+4,y1:m,x2:c+f-4,y2:m,stroke:"rgba(99, 102, 241, 0.15)",strokeWidth:1}),t.toolDots.map((l,d)=>e.jsx("circle",{cx:a(l.relativeX),cy:m,r:Y-.5,fill:F(l.toolName),opacity:.75,className:"cursor-pointer hover:opacity-100",onMouseEnter:u=>r({kind:"tool",toolName:l.toolName,timestamp:new Date(t.startMs+(l.relativeX-t.startX)/(t.endX-t.startX)*(t.endMs-t.startMs)).toISOString(),toolUseId:`${t.subagentType}-${l.toolName}-${d}`},g(u)),onMouseLeave:()=>r(null,{x:0,y:0}),children:e.jsxs("title",{children:[l.toolName," (",t.subagentType,")"]})},`${l.toolName}-${d}`))]})}function je({item:t,position:s}){return e.jsxs("div",{className:"pointer-events-none absolute z-50 rounded-lg border border-gray-700 bg-gray-900 px-3 py-2 text-xs shadow-xl",style:{left:s.x,top:s.y,transform:"translate(-50%, -100%) translateY(-8px)"},children:[t.kind==="tool"&&e.jsxs("div",{children:[e.jsx("div",{className:"font-semibold text-gray-100",children:W(t.toolName)}),e.jsx("div",{className:"text-gray-400",children:C(new Date(t.timestamp),"HH:mm:ss")}),e.jsxs("div",{className:"font-mono text-[10px] text-gray-600",children:[t.toolUseId.slice(0,16),"..."]})]}),t.kind==="agent"&&e.jsxs("div",{children:[e.jsx("div",{className:"font-semibold text-indigo-300",children:t.agent.subagentType}),e.jsx("div",{className:"max-w-48 truncate text-gray-400",children:t.agent.description}),e.jsx("div",{className:"mt-1 flex items-center gap-2 text-gray-500",children:t.agent.durationMs!=null&&e.jsxs("span",{children:[C(new Date(t.agent.startMs),"HH:mm")," -"," ",C(new Date(t.agent.endMs),"HH:mm")," (",P(t.agent.durationMs),")"]})}),e.jsxs("div",{className:"flex items-center gap-2 text-gray-500",children:[t.agent.totalTokens!=null&&e.jsxs("span",{children:[w(t.agent.totalTokens)," tokens"]}),t.agent.totalToolUseCount!=null&&e.jsxs("span",{children:[t.agent.totalToolUseCount," tools"]})]})]}),t.kind==="skill"&&e.jsxs("div",{children:[e.jsxs("div",{className:"font-semibold text-amber-300",children:["/",t.skill]}),t.args&&e.jsx("div",{className:"text-gray-400",children:t.args}),e.jsx("div",{className:"text-gray-500",children:C(new Date(t.timestamp),"HH:mm:ss")})]}),t.kind==="error"&&e.jsxs("div",{children:[e.jsx("div",{className:"font-semibold text-red-400",children:t.type}),e.jsx("div",{className:"max-w-48 truncate text-gray-400",children:t.message}),e.jsx("div",{className:"text-gray-500",children:C(new Date(t.timestamp),"HH:mm:ss")})]})]})}function Ne({toolNames:t}){const s=[...new Set(t)].slice(0,12);return s.length===0?null:e.jsxs("div",{className:"flex flex-wrap items-center gap-x-3 gap-y-1 px-1 text-[10px] text-gray-500",children:[s.map(a=>e.jsxs("div",{className:"flex items-center gap-1",children:[e.jsx("span",{className:"inline-block h-2 w-2 rounded-full",style:{backgroundColor:F(a)}}),e.jsx("span",{children:W(a)})]},a)),e.jsxs("div",{className:"flex items-center gap-1",children:[e.jsx("span",{className:"inline-block h-2 w-2 rotate-45 bg-amber-400"}),e.jsx("span",{children:"Skill"})]}),e.jsxs("div",{className:"flex items-center gap-1",children:[e.jsx("span",{className:"text-red-400 font-bold leading-none",children:"×"}),e.jsx("span",{children:"Error"})]})]})}function ve({turns:t,agents:s,skills:a,errors:n}){const r=M.useRef(null),[g,c]=M.useState(0),[f,m]=M.useState(1),[y,l]=M.useState(null);M.useEffect(()=>{if(!r.current)return;const x=new ResizeObserver(b=>{const h=b[0];h&&c(h.contentRect.width)});return x.observe(r.current),()=>x.disconnect()},[]);const d=M.useMemo(()=>ue(t,s,a,n),[t,s,a,n]),u=M.useMemo(()=>{const x=d.mainLane.map(h=>h.toolName);for(const h of d.agentLanes)for(const T of h.toolDots)x.push(T.toolName);const b={};for(const h of x)b[h]=(b[h]??0)+1;return Object.entries(b).sort(([,h],[,T])=>T-h).map(([h])=>h)},[d]),N=(x,b)=>{l(x?{item:x,position:b}:null)};if(t.length===0)return e.jsx("div",{className:"py-8 text-center text-sm text-gray-500",children:"No timeline data available"});const k=new Set(s.map(x=>x.toolUseId)),i=new Set(a.map(x=>x.toolUseId));let p=0,o=0,j=0;for(const x of t)if(x.type==="user"&&x.message?.trim()&&p++,x.type==="assistant"){o++;for(const b of x.toolCalls)!k.has(b.toolUseId)&&!i.has(b.toolUseId)&&j++}return e.jsxs("div",{className:"rounded-xl border border-gray-800 bg-gray-900/50 p-4",children:[e.jsxs("div",{className:"mb-3 flex flex-wrap items-center gap-4",children:[e.jsx(I,{label:"User commands",value:p,color:"blue"}),e.jsx(I,{label:"AI responses",value:o,color:"purple"}),j>0&&e.jsx(I,{label:"Tool calls",value:j,color:"gray"}),s.length>0&&e.jsx(I,{label:"Agents",value:s.length,color:"indigo"}),a.length>0&&e.jsx(I,{label:"Skills",value:a.length,color:"amber"}),n.length>0&&e.jsx(I,{label:"Errors",value:n.length,color:"red"})]}),e.jsxs("div",{className:"mb-3 flex items-start justify-between gap-2",children:[e.jsx("div",{className:"flex-1",children:u.length>0&&e.jsx(Ne,{toolNames:u})}),e.jsxs("div",{className:"flex shrink-0 items-center gap-1",children:[e.jsx("button",{type:"button",onClick:()=>m(x=>Math.max(1,x-.5)),disabled:f<=1,className:"rounded bg-gray-800 px-2 py-0.5 text-xs text-gray-300 transition-colors hover:bg-gray-700 disabled:opacity-30",title:"Zoom out",children:"−"}),e.jsx("span",{className:"min-w-[3rem] text-center text-[10px] tabular-nums text-gray-500",children:f===1?"Fit":`${f.toFixed(1)}x`}),e.jsx("button",{type:"button",onClick:()=>m(x=>Math.min(8,x+.5)),disabled:f>=8,className:"rounded bg-gray-800 px-2 py-0.5 text-xs text-gray-300 transition-colors hover:bg-gray-700 disabled:opacity-30",title:"Zoom in",children:"+"}),f>1&&e.jsx("button",{type:"button",onClick:()=>m(1),className:"ml-1 rounded bg-gray-800 px-2 py-0.5 text-[10px] text-gray-400 transition-colors hover:bg-gray-700",title:"Reset zoom",children:"Reset"})]})]}),e.jsx("div",{ref:r,className:"relative overflow-x-auto",children:g>0&&e.jsxs(e.Fragment,{children:[e.jsx(ye,{data:d,width:Math.max(g*f,400),onHover:N}),y&&e.jsx(je,{item:y.item,position:y.position})]})})]})}function I({label:t,value:s,color:a}){const n={blue:"bg-brand-500/15 text-brand-400",purple:"bg-purple-500/15 text-purple-400",gray:"bg-gray-800 text-gray-300",indigo:"bg-indigo-500/15 text-indigo-400",amber:"bg-amber-500/15 text-amber-400",red:"bg-red-500/15 text-red-400"};return e.jsxs("div",{className:"flex items-center gap-1.5",children:[e.jsx("span",{className:`rounded-md px-2 py-1 text-sm font-bold tabular-nums ${n[a]}`,children:s}),e.jsx("span",{className:"text-[11px] text-gray-500",children:t})]})}function ke({contextWindow:t,tokens:s}){const[a,n]=M.useState(!1);if(!t)return e.jsx(Te,{tokens:s});const{contextLimit:r,modelName:g,systemOverhead:c,currentContextSize:f,messagesEstimate:m,freeSpace:y,autocompactBuffer:l,usagePercent:d,snapshots:u}=t,N=c/r*100,k=m/r*100,i=l/r*100,p=Math.max(0,100-N-k),o=g.replace(/^claude-/,"").split("-202")[0],j=u.map(x=>({turn:x.turnIndex,context:x.contextSize}));return e.jsxs("div",{className:"rounded-xl border border-gray-800 bg-gray-900/50 p-4",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx("h3",{className:"text-sm font-semibold text-gray-300",children:"Context Window"}),e.jsx("span",{className:"rounded bg-gray-800 px-1.5 py-0.5 text-[10px] font-mono text-gray-400",children:o})]}),e.jsxs("div",{className:"mt-1 flex items-baseline gap-1",children:[e.jsx("span",{className:"text-2xl font-bold text-white",children:w(f)}),e.jsxs("span",{className:"text-sm text-gray-500",children:["/ ",w(r)]}),e.jsxs("span",{className:"text-sm text-gray-400",children:["(",d,"%)"]})]}),e.jsx("p",{className:"text-[10px] text-gray-500",children:"~estimated from token usage"}),e.jsxs("div",{className:"mt-3 flex h-3 overflow-hidden rounded-full bg-gray-800",children:[e.jsx("div",{className:"bg-purple-500",style:{width:`${N}%`},title:`System: ~${w(c)}`}),e.jsx("div",{className:"bg-brand-500",style:{width:`${k}%`},title:`Messages: ~${w(m)}`}),p>0&&e.jsx(e.Fragment,{children:p>i?e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"bg-gray-700",style:{width:`${p-i}%`}}),e.jsx("div",{className:"autocompact-stripe",style:{width:`${Math.min(i,p)}%`}})]}):e.jsx("div",{className:"autocompact-stripe",style:{width:`${p}%`}})})]}),e.jsxs("div",{className:"mt-1 flex gap-3 text-[10px] text-gray-500",children:[e.jsxs("span",{className:"flex items-center gap-1",children:[e.jsx("span",{className:"inline-block h-2 w-2 rounded-sm bg-purple-500"}),"system"]}),e.jsxs("span",{className:"flex items-center gap-1",children:[e.jsx("span",{className:"inline-block h-2 w-2 rounded-sm bg-brand-500"}),"messages"]}),e.jsxs("span",{className:"flex items-center gap-1",children:[e.jsx("span",{className:"inline-block h-2 w-2 rounded-sm bg-gray-700"}),"free"]})]}),e.jsxs("div",{className:"mt-3 space-y-1.5",children:[e.jsx(L,{label:"System overhead",value:c,total:r,color:"bg-purple-500",prefix:"~"}),e.jsx(L,{label:"Messages",value:m,total:r,color:"bg-brand-500",prefix:"~"}),e.jsx(L,{label:"Autocompact buffer",value:l,total:r,color:"bg-amber-500"}),e.jsx(L,{label:"Free space",value:y,total:r,color:"bg-gray-600"})]}),j.length>1&&e.jsxs("div",{className:"mt-3",children:[e.jsx("p",{className:"mb-1 text-[10px] text-gray-500",children:"Context growth"}),e.jsx(ee,{width:"100%",height:96,children:e.jsxs(te,{data:j,children:[e.jsx("defs",{children:e.jsxs("linearGradient",{id:"contextGrad",x1:"0",y1:"0",x2:"0",y2:"1",children:[e.jsx("stop",{offset:"0%",stopColor:"#d97757",stopOpacity:.3}),e.jsx("stop",{offset:"100%",stopColor:"#d97757",stopOpacity:.05})]})}),e.jsx(se,{domain:[0,r],hide:!0}),e.jsx(ae,{contentStyle:{background:"#1c1c1a",border:"1px solid #3d3b36",borderRadius:"8px",fontSize:"11px"},labelFormatter:x=>`Turn ${x}`,formatter:x=>[w(x),"Context"]}),e.jsx(X,{y:r,stroke:"#ef4444",strokeDasharray:"4 4",strokeOpacity:.5}),e.jsx(X,{y:r-l,stroke:"#f59e0b",strokeDasharray:"2 4",strokeOpacity:.3}),e.jsx(ne,{type:"stepAfter",dataKey:"context",stroke:"#d97757",fill:"url(#contextGrad)",strokeWidth:1.5,dot:!1})]})})]}),e.jsxs("button",{onClick:()=>n(!a),className:"mt-3 flex w-full items-center gap-1 text-xs text-gray-400 hover:text-gray-300 transition-colors",children:[e.jsx("span",{className:"text-[10px]",children:a?"▾":"▸"}),"Token Details"]}),a&&e.jsx(we,{tokens:s}),e.jsx("style",{children:`
2
+ .autocompact-stripe {
3
+ background: repeating-linear-gradient(
4
+ -45deg,
5
+ #78716c,
6
+ #78716c 2px,
7
+ #f59e0b 2px,
8
+ #f59e0b 4px
9
+ );
10
+ opacity: 0.4;
11
+ }
12
+ `})]})}function L({label:t,value:s,total:a,color:n,prefix:r=""}){const g=Math.max(0,Math.min(100,s/a*100));return e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"w-32 text-xs text-gray-400 shrink-0",children:t}),e.jsxs("span",{className:"w-16 text-right text-xs font-mono text-gray-300 shrink-0",children:[r,w(s)]}),e.jsx("div",{className:"flex-1 h-1.5 rounded-full bg-gray-800 overflow-hidden",children:e.jsx("div",{className:`h-full rounded-full ${n}`,style:{width:`${g}%`,opacity:.7}})})]})}function we({tokens:t}){const s=t.inputTokens+t.outputTokens+t.cacheReadInputTokens+t.cacheCreationInputTokens,a=[{label:"Input",value:t.inputTokens,color:"bg-brand-400"},{label:"Output",value:t.outputTokens,color:"bg-emerald-400"},{label:"Cache Read",value:t.cacheReadInputTokens,color:"bg-amber-400"},{label:"Cache Create",value:t.cacheCreationInputTokens,color:"bg-purple-400"}];return e.jsxs("div",{className:"mt-2 space-y-1.5",children:[a.map(n=>e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx("span",{className:"text-xs text-gray-400",children:n.label}),e.jsx("span",{className:"text-xs font-mono text-gray-300",children:w(n.value)})]},n.label)),s>0&&e.jsx("div",{className:"flex h-2 overflow-hidden rounded-full bg-gray-800",children:a.filter(n=>n.value>0).map(n=>e.jsx("div",{className:`${n.color} opacity-60`,style:{width:`${n.value/s*100}%`}},n.label))})]})}function Te({tokens:t}){const s=t.inputTokens+t.outputTokens,a=s+t.cacheReadInputTokens+t.cacheCreationInputTokens,n=[{label:"Input",value:t.inputTokens,color:"text-brand-400"},{label:"Output",value:t.outputTokens,color:"text-emerald-400"},{label:"Cache Read",value:t.cacheReadInputTokens,color:"text-amber-400"},{label:"Cache Create",value:t.cacheCreationInputTokens,color:"text-purple-400"}];return e.jsxs("div",{className:"rounded-xl border border-gray-800 bg-gray-900/50 p-4",children:[e.jsx("h3",{className:"text-sm font-semibold text-gray-300",children:"Token Usage"}),e.jsx("p",{className:"mt-1 text-2xl font-bold text-white",children:w(s)}),e.jsxs("p",{className:"text-[10px] text-gray-500",children:["input + output (",w(a)," incl. cache)"]}),e.jsx("div",{className:"mt-3 space-y-2",children:n.map(r=>e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx("span",{className:"text-xs text-gray-400",children:r.label}),e.jsx("span",{className:`text-xs font-mono ${r.color}`,children:w(r.value)})]},r.label))}),a>0&&e.jsx("div",{className:"mt-3 flex h-2 overflow-hidden rounded-full bg-gray-800",children:n.filter(r=>r.value>0).map(r=>e.jsx("div",{className:`${r.color.replace("text-","bg-")} opacity-60`,style:{width:`${r.value/a*100}%`}},r.label))})]})}function Me({toolFrequency:t}){const s=Object.entries(t).sort(([,n],[,r])=>r-n),a=s[0]?.[1]??1;return s.length===0?e.jsxs("div",{className:"rounded-xl border border-gray-800 bg-gray-900/50 p-4",children:[e.jsx("h3",{className:"text-sm font-semibold text-gray-300",children:"Tool Usage"}),e.jsx("p",{className:"mt-2 text-xs text-gray-500",children:"No tools used"})]}):e.jsxs("div",{className:"rounded-xl border border-gray-800 bg-gray-900/50 p-4",children:[e.jsx("h3",{className:"text-sm font-semibold text-gray-300",children:"Tool Usage"}),e.jsxs("p",{className:"mt-1 text-xs text-gray-500",children:[s.length," tools, ",s.reduce((n,[,r])=>n+r,0)," calls"]}),e.jsx("div",{className:"mt-3 space-y-1.5",children:s.slice(0,15).map(([n,r])=>e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"w-32 shrink-0 truncate text-xs font-mono text-gray-400",title:n,children:W(n)}),e.jsx("div",{className:"flex-1",children:e.jsx("div",{className:"h-4 rounded bg-brand-500/20",style:{width:`${r/a*100}%`},children:e.jsx("span",{className:"px-1.5 text-xs text-brand-300",children:r})})})]},n))})]})}function Ce({errors:t}){return t.length===0?null:e.jsxs("div",{className:"rounded-xl border border-red-900/50 bg-red-950/20 p-4",children:[e.jsxs("h3",{className:"text-sm font-semibold text-red-400",children:["Errors (",t.length,")"]}),e.jsx("div",{className:"mt-3 max-h-64 space-y-2 overflow-y-auto",children:t.map((s,a)=>e.jsxs("div",{className:"rounded-lg bg-red-950/30 p-2.5",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx("span",{className:"text-xs font-mono text-red-300",children:s.type}),s.timestamp&&e.jsx("span",{className:"text-xs text-gray-500",children:G(s.timestamp)})]}),e.jsx("p",{className:"mt-1 text-xs text-red-200/80",children:s.message})]},a))})]})}function Se({agents:t,skills:s}){const{data:a}=O(de),{agentCosts:n,totalAgentCost:r}=M.useMemo(()=>{if(!a)return{agentCosts:new Map,totalAgentCost:0};const l=le(a),d=new Map;let u=0;for(let N=0;N<t.length;N++){const k=t[N];if(!k.tokens)continue;const p={[k.model??"claude-sonnet-4"]:k.tokens},o=re(p,l);d.set(N,o.totalUSD),u+=o.totalUSD}return{agentCosts:d,totalAgentCost:u}},[a,t]);if(t.length===0&&s.length===0)return null;const g=new Map;for(const l of t)g.set(l.subagentType,(g.get(l.subagentType)??0)+1);const c=[...g.entries()].sort(([,l],[,d])=>d-l),f=t.reduce((l,d)=>l+(d.totalTokens??H(d)??0),0),m=new Map;for(const l of s)m.set(l.skill,(m.get(l.skill)??0)+1);const y=[...m.entries()].sort(([,l],[,d])=>d-l);return e.jsxs("div",{className:"rounded-xl border border-gray-800 bg-gray-900/50 p-4",children:[e.jsx("h3",{className:"text-sm font-semibold text-gray-300",children:"Agents & Skills"}),e.jsxs("p",{className:"mt-1 text-xs text-gray-500",children:[t.length," agent dispatch",t.length!==1?"es":"",f>0&&e.jsxs("span",{className:"ml-1 text-indigo-400",children:["(",w(f)," tokens",r>0&&` · ~${U(r)}`,")"]}),s.length>0&&`, ${s.length} skill invocation${s.length!==1?"s":""}`]}),c.length>0&&e.jsxs("div",{className:"mt-3",children:[e.jsx("p",{className:"mb-1.5 text-[10px] font-semibold uppercase tracking-wider text-gray-500",children:"Agent Types"}),e.jsx("div",{className:"flex flex-wrap gap-1.5",children:c.map(([l,d])=>e.jsxs("span",{className:"inline-flex items-center gap-1 rounded-md bg-indigo-500/15 px-2 py-0.5 text-xs text-indigo-300",children:[l,d>1&&e.jsxs("span",{className:"text-indigo-400/60",children:["×",d]})]},l))})]}),y.length>0&&e.jsxs("div",{className:"mt-3",children:[e.jsx("p",{className:"mb-1.5 text-[10px] font-semibold uppercase tracking-wider text-gray-500",children:"Skills"}),e.jsx("div",{className:"flex flex-wrap gap-1.5",children:y.map(([l,d])=>e.jsxs("span",{className:"inline-flex items-center gap-1 rounded-md bg-amber-500/15 px-2 py-0.5 text-xs text-amber-300",children:["/",l,d>1&&e.jsxs("span",{className:"text-amber-400/60",children:["×",d]})]},l))})]}),t.length>0&&e.jsxs("div",{className:"mt-3 space-y-1",children:[e.jsx("p",{className:"mb-1.5 text-[10px] font-semibold uppercase tracking-wider text-gray-500",children:"Agent Dispatches"}),t.map((l,d)=>{const u=l.totalTokens??H(l),N=n.get(d);return e.jsxs("div",{className:"flex items-start gap-2 rounded bg-gray-950/40 px-2 py-1.5",children:[e.jsx("span",{className:"shrink-0 rounded bg-indigo-500/20 px-1.5 py-0.5 text-[10px] font-semibold text-indigo-300",children:l.subagentType}),l.model&&e.jsx("span",{className:"shrink-0 rounded bg-gray-800 px-1.5 py-0.5 text-[10px] font-mono text-gray-400",children:l.model.replace(/^claude-/,"").replace(/-\d{8}$/,"")}),e.jsx("span",{className:"min-w-0 flex-1 truncate text-xs text-gray-400",children:l.description}),e.jsxs("div",{className:"flex shrink-0 items-center gap-2",children:[u!=null&&u>0&&e.jsx("span",{className:"text-[10px] font-mono text-indigo-400/80",children:w(u)}),N!=null&&N>0&&e.jsxs("span",{className:"text-[10px] font-mono text-emerald-400/80",children:["~",U(N)]}),l.totalToolUseCount!=null&&e.jsxs("span",{className:"text-[10px] text-gray-500",children:[l.totalToolUseCount," tools"]}),l.durationMs!=null&&e.jsx("span",{className:"text-[10px] text-gray-600",children:P(l.durationMs)}),l.timestamp&&e.jsx("span",{className:"text-[10px] text-gray-600",children:C(new Date(l.timestamp),"HH:mm:ss")})]})]},`a-${d}`)})]}),s.length>0&&e.jsxs("div",{className:"mt-3 space-y-1",children:[e.jsx("p",{className:"mb-1.5 text-[10px] font-semibold uppercase tracking-wider text-gray-500",children:"Skill Invocations"}),s.map((l,d)=>e.jsxs("div",{className:"flex items-start gap-2 rounded bg-gray-950/40 px-2 py-1.5",children:[e.jsxs("span",{className:"shrink-0 rounded bg-amber-500/20 px-1.5 py-0.5 text-[10px] font-semibold text-amber-300",children:["/",l.skill]}),l.args&&e.jsx("span",{className:"min-w-0 flex-1 truncate text-xs font-mono text-gray-500",children:l.args}),l.timestamp&&e.jsx("span",{className:"ml-auto shrink-0 text-[10px] text-gray-600",children:C(new Date(l.timestamp),"HH:mm:ss")})]},`s-${d}`))]})]})}function H(t){if(t.tokens)return t.tokens.inputTokens+t.tokens.outputTokens}const De={pending:{label:"Pending",bg:"bg-gray-500/20",text:"text-gray-400"},in_progress:{label:"In Progress",bg:"bg-brand-500/20",text:"text-brand-400"},completed:{label:"Done",bg:"bg-emerald-500/20",text:"text-emerald-400"},deleted:{label:"Deleted",bg:"bg-red-500/20",text:"text-red-400"}};function Ie({tasks:t}){if(t.length===0)return null;const s=t.filter(n=>n.status==="completed").length,a=t.filter(n=>n.status!=="deleted").length;return e.jsxs("div",{className:"rounded-xl border border-gray-800 bg-gray-900/50 p-4",children:[e.jsx("h3",{className:"text-sm font-semibold text-gray-300",children:"Tasks"}),e.jsxs("p",{className:"mt-1 text-xs text-gray-500",children:[s,"/",a," completed"]}),e.jsx("div",{className:"mt-3 space-y-1",children:t.map((n,r)=>{const g=De[n.status];return e.jsxs("div",{className:"flex items-start gap-2 rounded bg-gray-950/40 px-2 py-1.5",children:[e.jsx("span",{className:`shrink-0 rounded px-1.5 py-0.5 text-[10px] font-semibold ${g.bg} ${g.text}`,children:g.label}),e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsx("span",{className:"text-xs text-gray-300",children:n.subject}),n.description&&e.jsx("p",{className:"mt-0.5 truncate text-[10px] text-gray-500",children:n.description})]}),n.taskId&&e.jsxs("span",{className:"shrink-0 text-[10px] font-mono text-gray-600",children:["#",n.taskId]}),n.timestamp&&e.jsx("span",{className:"shrink-0 text-[10px] text-gray-600",children:C(new Date(n.timestamp),"HH:mm:ss")})]},n.taskId||r)})})]})}function $e({tokensByModel:t}){const{cost:s,isLoading:a}=z(t);return a?e.jsx("div",{className:"rounded-xl border border-gray-800 bg-gray-900/50 p-4",children:e.jsx("div",{className:"h-6 w-32 animate-pulse rounded bg-gray-800"})}):!s||s.totalUSD===0?e.jsxs("div",{className:"rounded-xl border border-gray-800 bg-gray-900/50 p-4",children:[e.jsx("h3",{className:"text-sm font-semibold text-gray-300",children:"Cost Estimation"}),e.jsx("p",{className:"mt-2 text-xs text-gray-500",children:"No token data available"})]}):e.jsxs("div",{className:"rounded-xl border border-gray-800 bg-gray-900/50 p-4",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx("h3",{className:"text-sm font-semibold text-gray-300",children:"Cost Estimation"}),e.jsxs("span",{className:"font-mono text-lg font-bold text-white",children:["~",U(s.totalUSD)]})]}),e.jsxs("div",{className:"mt-4",children:[e.jsx("p",{className:"text-xs font-medium text-gray-400",children:"By Category"}),e.jsx(Ue,{cost:s}),e.jsx(Re,{cost:s})]}),e.jsxs("div",{className:"mt-4",children:[e.jsx("p",{className:"text-xs font-medium text-gray-400",children:"By Model"}),e.jsx(Le,{cost:s})]}),e.jsxs("div",{className:"mt-3 flex items-center justify-between border-t border-gray-800 pt-3",children:[e.jsx("p",{className:"text-[10px] text-gray-600",children:"Estimated based on API pricing. Actual costs may vary."}),e.jsx(E,{to:"/settings",className:"text-[10px] text-gray-500 hover:text-gray-300",children:"Configure pricing"})]})]})}function Ue({cost:t}){const s=[{label:"Input tokens",value:t.byCategory.input,color:"text-brand-400"},{label:"Output tokens",value:t.byCategory.output,color:"text-emerald-400"},{label:"Cache read",value:t.byCategory.cacheRead,color:"text-amber-400"},{label:"Cache write",value:t.byCategory.cacheWrite,color:"text-purple-400"}];return e.jsx("div",{className:"mt-2 space-y-1",children:s.map(a=>e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx("span",{className:"text-xs text-gray-400",children:a.label}),e.jsx("span",{className:`font-mono text-xs ${a.color}`,children:U(a.value)})]},a.label))})}function Re({cost:t}){if(t.totalUSD===0)return null;const s=[{key:"input",value:t.byCategory.input,color:"bg-brand-400"},{key:"output",value:t.byCategory.output,color:"bg-emerald-400"},{key:"cacheRead",value:t.byCategory.cacheRead,color:"bg-amber-400"},{key:"cacheWrite",value:t.byCategory.cacheWrite,color:"bg-purple-400"}];return e.jsx("div",{className:"mt-2 flex h-2 overflow-hidden rounded-full bg-gray-800",children:s.map(a=>{const n=a.value/t.totalUSD*100;return n<.5?null:e.jsx("div",{className:`${a.color} opacity-60`,style:{width:`${n}%`}},a.key)})})}function Le({cost:t}){const s=Object.values(t.byModel).sort((a,n)=>n.totalCost-a.totalCost);return s.length===0?null:e.jsx("div",{className:"mt-2 space-y-1",children:s.map(a=>{const n=t.totalUSD>0?Math.round(a.totalCost/t.totalUSD*100):0;return e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx("span",{className:"font-mono text-xs text-gray-300",children:a.displayName}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"font-mono text-xs text-gray-300",children:U(a.totalCost)}),e.jsxs("span",{className:"text-[10px] text-gray-500",children:["(",n,"%)"]}),e.jsxs("span",{className:"text-[10px] text-gray-600",children:[w(a.tokens.inputTokens+a.tokens.outputTokens+a.tokens.cacheReadInputTokens+a.tokens.cacheCreationInputTokens)," ","tok"]})]})]},a.modelId)})})}function Ae({tokensByModel:t}){const{cost:s,isLoading:a}=z(t);return a||!s||s.totalUSD===0?null:e.jsxs("span",{className:"font-mono text-xs text-emerald-400",title:"Estimated cost based on API pricing",children:["~",U(s.totalUSD)]})}function Ee(){return e.jsxs("div",{className:"mb-4 flex items-center gap-2 rounded-lg border border-emerald-800 bg-emerald-900/30 px-4 py-2 text-sm text-emerald-300",children:[e.jsxs("span",{className:"relative flex h-2 w-2",children:[e.jsx("span",{className:"absolute inline-flex h-full w-full animate-ping rounded-full bg-emerald-400 opacity-75"}),e.jsx("span",{className:"relative inline-flex h-2 w-2 rounded-full bg-emerald-500"})]}),"This session is currently active. Data refreshes automatically."]})}function Oe(t){const{data:s}=O(xe);return s?.some(a=>a.sessionId===t)??!1}function He(){const{sessionId:t}=B.useParams(),{project:s=""}=B.useSearch(),{privacyMode:a,anonymizeProjectName:n,anonymizeBranch:r}=Z(),g=Oe(t),{data:c,isLoading:f,error:m}=O(pe(t,s,g));if(f)return e.jsxs("div",{className:"space-y-4",children:[e.jsx("div",{className:"h-8 w-48 animate-pulse rounded bg-gray-800"}),e.jsx("div",{className:"h-64 animate-pulse rounded-xl bg-gray-900/50"})]});if(m||!c)return e.jsxs("div",{className:"py-12 text-center",children:[e.jsxs("p",{className:"text-sm text-red-400",children:["Failed to load session: ",m?.message??"Not found"]}),e.jsx(E,{to:"/sessions",className:"mt-2 inline-block text-sm text-brand-300 hover:underline",children:"Back to sessions"})]});const y=c.turns[0]?.timestamp,l=c.turns[c.turns.length-1]?.timestamp,d=y&&l?new Date(l).getTime()-new Date(y).getTime():0;return e.jsxs("div",{children:[g&&e.jsx(Ee,{}),e.jsxs("div",{className:"flex items-start justify-between",children:[e.jsxs("div",{children:[e.jsx(E,{to:"/sessions",className:"text-xs text-gray-500 hover:text-gray-300",children:"← Sessions"}),e.jsx("h1",{className:"mt-1 text-xl font-bold text-white",children:a?n(c.projectName):c.projectName}),e.jsxs("div",{className:"mt-1 flex items-center gap-3 text-xs text-gray-400",children:[c.branch&&e.jsx("span",{className:"font-mono",children:r(c.branch)}),y&&e.jsx("span",{children:G(y)}),e.jsx("span",{children:P(d)}),e.jsxs("span",{children:[c.turns.length," turns"]}),e.jsx(Ae,{tokensByModel:c.tokensByModel})]}),c.models.length>0&&e.jsx("div",{className:"mt-1 flex gap-1",children:c.models.map(u=>e.jsx("span",{className:"rounded bg-gray-800 px-1.5 py-0.5 text-[10px] font-mono text-gray-400",children:u.replace(/^claude-/,"").split("-202")[0]},u))})]}),e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx(oe,{options:[{label:"Export Session (JSON)",onClick:()=>ie(ce(c),`session-${t.slice(0,8)}.json`,"application/json")}]}),e.jsx("span",{className:"font-mono text-xs text-gray-600",children:t.slice(0,8)})]})]}),e.jsxs("div",{className:"mt-6 grid grid-cols-1 gap-4 md:grid-cols-2",children:[e.jsx(ke,{contextWindow:c.contextWindow,tokens:c.totalTokens}),e.jsx(Me,{toolFrequency:c.toolFrequency})]}),e.jsx("div",{className:"mt-4",children:e.jsx($e,{tokensByModel:c.tokensByModel})}),(c.agents.length>0||c.skills.length>0)&&e.jsx("div",{className:"mt-4",children:e.jsx(Se,{agents:c.agents,skills:c.skills})}),c.tasks.length>0&&e.jsx("div",{className:"mt-4",children:e.jsx(Ie,{tasks:c.tasks})}),e.jsx("div",{className:"mt-4",children:e.jsx(Ce,{errors:c.errors})}),e.jsxs("div",{className:"mt-6",children:[e.jsx("h2",{className:"mb-3 text-sm font-semibold text-gray-300",children:"Timeline"}),e.jsx(ve,{turns:c.turns,agents:c.agents,skills:c.skills,errors:c.errors})]})]})}export{He as component};
@@ -0,0 +1 @@
1
+ @layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial}}}@layer theme{:root,:host{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-red-200:oklch(88.5% .062 18.334);--color-red-300:oklch(80.8% .114 19.571);--color-red-400:oklch(70.4% .191 22.216);--color-red-500:oklch(63.7% .237 25.331);--color-red-900:oklch(39.6% .141 25.723);--color-red-950:oklch(25.8% .092 26.042);--color-amber-300:oklch(87.9% .169 91.605);--color-amber-400:oklch(82.8% .189 84.429);--color-amber-500:oklch(76.9% .188 70.08);--color-emerald-300:oklch(84.5% .143 164.978);--color-emerald-400:oklch(76.5% .177 163.223);--color-emerald-500:oklch(69.6% .17 162.48);--color-emerald-800:oklch(43.2% .095 166.913);--color-emerald-900:oklch(37.8% .077 168.94);--color-cyan-400:oklch(78.9% .154 211.53);--color-indigo-300:oklch(78.5% .115 274.713);--color-indigo-400:oklch(67.3% .182 276.935);--color-indigo-500:oklch(58.5% .233 277.117);--color-indigo-900:oklch(35.9% .144 278.697);--color-indigo-950:oklch(25.7% .09 281.288);--color-violet-400:oklch(70.2% .183 293.541);--color-purple-400:oklch(71.4% .203 305.504);--color-purple-500:oklch(62.7% .265 303.9);--color-pink-400:oklch(71.8% .202 349.761);--color-gray-100:#eae6dc;--color-gray-200:#e0dbd0;--color-gray-300:#cdc8b8;--color-gray-400:#a39e90;--color-gray-500:#7a7668;--color-gray-600:#565349;--color-gray-700:#3d3b36;--color-gray-800:#2a2926;--color-gray-900:#1c1c1a;--color-gray-950:#141413;--color-white:#fff;--spacing:.25rem;--container-5xl:64rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--text-lg:1.125rem;--text-lg--line-height:calc(1.75/1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75/1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2/1.5);--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-wider:.05em;--radius-sm:.25rem;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--animate-ping:ping 1s cubic-bezier(0,0,.2,1)infinite;--animate-pulse:pulse 2s cubic-bezier(.4,0,.6,1)infinite;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--color-brand-300:#f0b8a0;--color-brand-400:#e09070;--color-brand-500:#d97757;--color-brand-600:#c4643f}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.pointer-events-none{pointer-events:none}.visible{visibility:visible}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.-top-8{top:calc(var(--spacing)*-8)}.right-0{right:calc(var(--spacing)*0)}.bottom-0{bottom:calc(var(--spacing)*0)}.left-1\/2{left:50%}.z-10{z-index:10}.z-50{z-index:50}.container{width:100%}@media(min-width:40rem){.container{max-width:40rem}}@media(min-width:48rem){.container{max-width:48rem}}@media(min-width:64rem){.container{max-width:64rem}}@media(min-width:80rem){.container{max-width:80rem}}@media(min-width:96rem){.container{max-width:96rem}}.mx-auto{margin-inline:auto}.mt-0\.5{margin-top:calc(var(--spacing)*.5)}.mt-1{margin-top:calc(var(--spacing)*1)}.mt-1\.5{margin-top:calc(var(--spacing)*1.5)}.mt-2{margin-top:calc(var(--spacing)*2)}.mt-3{margin-top:calc(var(--spacing)*3)}.mt-4{margin-top:calc(var(--spacing)*4)}.mt-6{margin-top:calc(var(--spacing)*6)}.mb-1{margin-bottom:calc(var(--spacing)*1)}.mb-1\.5{margin-bottom:calc(var(--spacing)*1.5)}.mb-2{margin-bottom:calc(var(--spacing)*2)}.mb-3{margin-bottom:calc(var(--spacing)*3)}.mb-4{margin-bottom:calc(var(--spacing)*4)}.ml-1{margin-left:calc(var(--spacing)*1)}.ml-2{margin-left:calc(var(--spacing)*2)}.ml-auto{margin-left:auto}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.table{display:table}.h-1\.5{height:calc(var(--spacing)*1.5)}.h-2{height:calc(var(--spacing)*2)}.h-3{height:calc(var(--spacing)*3)}.h-3\.5{height:calc(var(--spacing)*3.5)}.h-4{height:calc(var(--spacing)*4)}.h-5{height:calc(var(--spacing)*5)}.h-6{height:calc(var(--spacing)*6)}.h-8{height:calc(var(--spacing)*8)}.h-14{height:calc(var(--spacing)*14)}.h-20{height:calc(var(--spacing)*20)}.h-28{height:calc(var(--spacing)*28)}.h-32{height:calc(var(--spacing)*32)}.h-64{height:calc(var(--spacing)*64)}.h-72{height:calc(var(--spacing)*72)}.h-full{height:100%}.max-h-64{max-height:calc(var(--spacing)*64)}.min-h-screen{min-height:100vh}.w-2{width:calc(var(--spacing)*2)}.w-3{width:calc(var(--spacing)*3)}.w-3\.5{width:calc(var(--spacing)*3.5)}.w-4{width:calc(var(--spacing)*4)}.w-9{width:calc(var(--spacing)*9)}.w-16{width:calc(var(--spacing)*16)}.w-20{width:calc(var(--spacing)*20)}.w-32{width:calc(var(--spacing)*32)}.w-48{width:calc(var(--spacing)*48)}.w-56{width:calc(var(--spacing)*56)}.w-full{width:100%}.max-w-5xl{max-width:var(--container-5xl)}.max-w-48{max-width:calc(var(--spacing)*48)}.min-w-0{min-width:calc(var(--spacing)*0)}.min-w-\[2rem\]{min-width:2rem}.min-w-\[3rem\]{min-width:3rem}.min-w-\[200px\]{min-width:200px}.flex-1{flex:1}.shrink-0{flex-shrink:0}.-translate-x-1\/2{--tw-translate-x: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-\[3px\]{--tw-translate-x:3px;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-\[18px\]{--tw-translate-x:18px;translate:var(--tw-translate-x)var(--tw-translate-y)}.rotate-45{rotate:45deg}.rotate-180{rotate:180deg}.transform{transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.animate-ping{animation:var(--animate-ping)}.animate-pulse{animation:var(--animate-pulse)}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-baseline{align-items:baseline}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.gap-0\.5{gap:calc(var(--spacing)*.5)}.gap-1{gap:calc(var(--spacing)*1)}.gap-1\.5{gap:calc(var(--spacing)*1.5)}.gap-2{gap:calc(var(--spacing)*2)}.gap-2\.5{gap:calc(var(--spacing)*2.5)}.gap-3{gap:calc(var(--spacing)*3)}.gap-4{gap:calc(var(--spacing)*4)}:where(.space-y-0\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*.5)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*.5)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*1)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*1)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*1.5)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*1.5)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*2)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*3)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*3)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*4)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*4)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*6)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*6)*calc(1 - var(--tw-space-y-reverse)))}.gap-x-3{column-gap:calc(var(--spacing)*3)}.gap-y-1{row-gap:calc(var(--spacing)*1)}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-sm{border-radius:var(--radius-sm)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-t{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.rounded-l-lg{border-top-left-radius:var(--radius-lg);border-bottom-left-radius:var(--radius-lg)}.rounded-r-lg{border-top-right-radius:var(--radius-lg);border-bottom-right-radius:var(--radius-lg)}.border{border-style:var(--tw-border-style);border-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-b-2{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.border-brand-500{border-color:var(--color-brand-500)}.border-brand-500\/50{border-color:#d9775780}@supports (color:color-mix(in lab,red,red)){.border-brand-500\/50{border-color:color-mix(in oklab,var(--color-brand-500)50%,transparent)}}.border-emerald-800{border-color:var(--color-emerald-800)}.border-gray-700{border-color:var(--color-gray-700)}.border-gray-800{border-color:var(--color-gray-800)}.border-gray-800\/50{border-color:#2a292680}@supports (color:color-mix(in lab,red,red)){.border-gray-800\/50{border-color:color-mix(in oklab,var(--color-gray-800)50%,transparent)}}.border-indigo-500\/10{border-color:#625fff1a}@supports (color:color-mix(in lab,red,red)){.border-indigo-500\/10{border-color:color-mix(in oklab,var(--color-indigo-500)10%,transparent)}}.border-indigo-500\/20{border-color:#625fff33}@supports (color:color-mix(in lab,red,red)){.border-indigo-500\/20{border-color:color-mix(in oklab,var(--color-indigo-500)20%,transparent)}}.border-red-900\/50{border-color:#82181a80}@supports (color:color-mix(in lab,red,red)){.border-red-900\/50{border-color:color-mix(in oklab,var(--color-red-900)50%,transparent)}}.border-transparent{border-color:#0000}.bg-amber-400{background-color:var(--color-amber-400)}.bg-amber-500{background-color:var(--color-amber-500)}.bg-amber-500\/15{background-color:#f99c0026}@supports (color:color-mix(in lab,red,red)){.bg-amber-500\/15{background-color:color-mix(in oklab,var(--color-amber-500)15%,transparent)}}.bg-amber-500\/20{background-color:#f99c0033}@supports (color:color-mix(in lab,red,red)){.bg-amber-500\/20{background-color:color-mix(in oklab,var(--color-amber-500)20%,transparent)}}.bg-brand-400{background-color:var(--color-brand-400)}.bg-brand-500{background-color:var(--color-brand-500)}.bg-brand-500\/10{background-color:#d977571a}@supports (color:color-mix(in lab,red,red)){.bg-brand-500\/10{background-color:color-mix(in oklab,var(--color-brand-500)10%,transparent)}}.bg-brand-500\/15{background-color:#d9775726}@supports (color:color-mix(in lab,red,red)){.bg-brand-500\/15{background-color:color-mix(in oklab,var(--color-brand-500)15%,transparent)}}.bg-brand-500\/20{background-color:#d9775733}@supports (color:color-mix(in lab,red,red)){.bg-brand-500\/20{background-color:color-mix(in oklab,var(--color-brand-500)20%,transparent)}}.bg-brand-600{background-color:var(--color-brand-600)}.bg-emerald-400{background-color:var(--color-emerald-400)}.bg-emerald-500{background-color:var(--color-emerald-500)}.bg-emerald-500\/15{background-color:#00bb7f26}@supports (color:color-mix(in lab,red,red)){.bg-emerald-500\/15{background-color:color-mix(in oklab,var(--color-emerald-500)15%,transparent)}}.bg-emerald-500\/20{background-color:#00bb7f33}@supports (color:color-mix(in lab,red,red)){.bg-emerald-500\/20{background-color:color-mix(in oklab,var(--color-emerald-500)20%,transparent)}}.bg-emerald-900\/30{background-color:#004e3b4d}@supports (color:color-mix(in lab,red,red)){.bg-emerald-900\/30{background-color:color-mix(in oklab,var(--color-emerald-900)30%,transparent)}}.bg-gray-500{background-color:var(--color-gray-500)}.bg-gray-500\/15{background-color:#7a766826}@supports (color:color-mix(in lab,red,red)){.bg-gray-500\/15{background-color:color-mix(in oklab,var(--color-gray-500)15%,transparent)}}.bg-gray-500\/20{background-color:#7a766833}@supports (color:color-mix(in lab,red,red)){.bg-gray-500\/20{background-color:color-mix(in oklab,var(--color-gray-500)20%,transparent)}}.bg-gray-600{background-color:var(--color-gray-600)}.bg-gray-700{background-color:var(--color-gray-700)}.bg-gray-800{background-color:var(--color-gray-800)}.bg-gray-800\/50{background-color:#2a292680}@supports (color:color-mix(in lab,red,red)){.bg-gray-800\/50{background-color:color-mix(in oklab,var(--color-gray-800)50%,transparent)}}.bg-gray-900{background-color:var(--color-gray-900)}.bg-gray-900\/50{background-color:#1c1c1a80}@supports (color:color-mix(in lab,red,red)){.bg-gray-900\/50{background-color:color-mix(in oklab,var(--color-gray-900)50%,transparent)}}.bg-gray-950{background-color:var(--color-gray-950)}.bg-gray-950\/40{background-color:#14141366}@supports (color:color-mix(in lab,red,red)){.bg-gray-950\/40{background-color:color-mix(in oklab,var(--color-gray-950)40%,transparent)}}.bg-indigo-500\/15{background-color:#625fff26}@supports (color:color-mix(in lab,red,red)){.bg-indigo-500\/15{background-color:color-mix(in oklab,var(--color-indigo-500)15%,transparent)}}.bg-indigo-500\/20{background-color:#625fff33}@supports (color:color-mix(in lab,red,red)){.bg-indigo-500\/20{background-color:color-mix(in oklab,var(--color-indigo-500)20%,transparent)}}.bg-indigo-900\/30{background-color:#312c854d}@supports (color:color-mix(in lab,red,red)){.bg-indigo-900\/30{background-color:color-mix(in oklab,var(--color-indigo-900)30%,transparent)}}.bg-indigo-950\/15{background-color:#1e1a4d26}@supports (color:color-mix(in lab,red,red)){.bg-indigo-950\/15{background-color:color-mix(in oklab,var(--color-indigo-950)15%,transparent)}}.bg-purple-400{background-color:var(--color-purple-400)}.bg-purple-500{background-color:var(--color-purple-500)}.bg-purple-500\/15{background-color:#ac4bff26}@supports (color:color-mix(in lab,red,red)){.bg-purple-500\/15{background-color:color-mix(in oklab,var(--color-purple-500)15%,transparent)}}.bg-red-500\/15{background-color:#fb2c3626}@supports (color:color-mix(in lab,red,red)){.bg-red-500\/15{background-color:color-mix(in oklab,var(--color-red-500)15%,transparent)}}.bg-red-500\/20{background-color:#fb2c3633}@supports (color:color-mix(in lab,red,red)){.bg-red-500\/20{background-color:color-mix(in oklab,var(--color-red-500)20%,transparent)}}.bg-red-950\/20{background-color:#46080933}@supports (color:color-mix(in lab,red,red)){.bg-red-950\/20{background-color:color-mix(in oklab,var(--color-red-950)20%,transparent)}}.bg-red-950\/30{background-color:#4608094d}@supports (color:color-mix(in lab,red,red)){.bg-red-950\/30{background-color:color-mix(in oklab,var(--color-red-950)30%,transparent)}}.bg-white{background-color:var(--color-white)}.fill-amber-400\/70{fill:#fcbb00b3}@supports (color:color-mix(in lab,red,red)){.fill-amber-400\/70{fill:color-mix(in oklab,var(--color-amber-400)70%,transparent)}}.fill-gray-500{fill:var(--color-gray-500)}.fill-indigo-400\/70{fill:#7d87ffb3}@supports (color:color-mix(in lab,red,red)){.fill-indigo-400\/70{fill:color-mix(in oklab,var(--color-indigo-400)70%,transparent)}}.fill-red-400\/70{fill:#ff6568b3}@supports (color:color-mix(in lab,red,red)){.fill-red-400\/70{fill:color-mix(in oklab,var(--color-red-400)70%,transparent)}}.p-2\.5{padding:calc(var(--spacing)*2.5)}.p-3{padding:calc(var(--spacing)*3)}.p-4{padding:calc(var(--spacing)*4)}.px-1{padding-inline:calc(var(--spacing)*1)}.px-1\.5{padding-inline:calc(var(--spacing)*1.5)}.px-2{padding-inline:calc(var(--spacing)*2)}.px-2\.5{padding-inline:calc(var(--spacing)*2.5)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-4{padding-inline:calc(var(--spacing)*4)}.px-6{padding-inline:calc(var(--spacing)*6)}.py-0\.5{padding-block:calc(var(--spacing)*.5)}.py-1{padding-block:calc(var(--spacing)*1)}.py-1\.5{padding-block:calc(var(--spacing)*1.5)}.py-2{padding-block:calc(var(--spacing)*2)}.py-3{padding-block:calc(var(--spacing)*3)}.py-6{padding-block:calc(var(--spacing)*6)}.py-8{padding-block:calc(var(--spacing)*8)}.py-12{padding-block:calc(var(--spacing)*12)}.pt-1\.5{padding-top:calc(var(--spacing)*1.5)}.pt-2{padding-top:calc(var(--spacing)*2)}.pt-3{padding-top:calc(var(--spacing)*3)}.pr-4{padding-right:calc(var(--spacing)*4)}.pb-2{padding-bottom:calc(var(--spacing)*2)}.pb-3{padding-bottom:calc(var(--spacing)*3)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.font-mono{font-family:var(--font-mono)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.leading-none{--tw-leading:1;line-height:1}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.whitespace-nowrap{white-space:nowrap}.text-amber-300{color:var(--color-amber-300)}.text-amber-400{color:var(--color-amber-400)}.text-amber-400\/60{color:#fcbb0099}@supports (color:color-mix(in lab,red,red)){.text-amber-400\/60{color:color-mix(in oklab,var(--color-amber-400)60%,transparent)}}.text-brand-300{color:var(--color-brand-300)}.text-brand-400{color:var(--color-brand-400)}.text-brand-500{color:var(--color-brand-500)}.text-cyan-400{color:var(--color-cyan-400)}.text-emerald-300{color:var(--color-emerald-300)}.text-emerald-400{color:var(--color-emerald-400)}.text-emerald-400\/80{color:#00d294cc}@supports (color:color-mix(in lab,red,red)){.text-emerald-400\/80{color:color-mix(in oklab,var(--color-emerald-400)80%,transparent)}}.text-gray-100{color:var(--color-gray-100)}.text-gray-200{color:var(--color-gray-200)}.text-gray-300{color:var(--color-gray-300)}.text-gray-400{color:var(--color-gray-400)}.text-gray-500{color:var(--color-gray-500)}.text-gray-600{color:var(--color-gray-600)}.text-indigo-300{color:var(--color-indigo-300)}.text-indigo-300\/70{color:#a4b3ffb3}@supports (color:color-mix(in lab,red,red)){.text-indigo-300\/70{color:color-mix(in oklab,var(--color-indigo-300)70%,transparent)}}.text-indigo-400{color:var(--color-indigo-400)}.text-indigo-400\/50{color:#7d87ff80}@supports (color:color-mix(in lab,red,red)){.text-indigo-400\/50{color:color-mix(in oklab,var(--color-indigo-400)50%,transparent)}}.text-indigo-400\/60{color:#7d87ff99}@supports (color:color-mix(in lab,red,red)){.text-indigo-400\/60{color:color-mix(in oklab,var(--color-indigo-400)60%,transparent)}}.text-indigo-400\/80{color:#7d87ffcc}@supports (color:color-mix(in lab,red,red)){.text-indigo-400\/80{color:color-mix(in oklab,var(--color-indigo-400)80%,transparent)}}.text-pink-400{color:var(--color-pink-400)}.text-purple-400{color:var(--color-purple-400)}.text-red-200\/80{color:#ffcacacc}@supports (color:color-mix(in lab,red,red)){.text-red-200\/80{color:color-mix(in oklab,var(--color-red-200)80%,transparent)}}.text-red-300{color:var(--color-red-300)}.text-red-400{color:var(--color-red-400)}.text-violet-400{color:var(--color-violet-400)}.text-white{color:var(--color-white)}.capitalize{text-transform:capitalize}.uppercase{text-transform:uppercase}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,)var(--tw-slashed-zero,)var(--tw-numeric-figure,)var(--tw-numeric-spacing,)var(--tw-numeric-fraction,)}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.placeholder-gray-500::placeholder{color:var(--color-gray-500)}.opacity-60{opacity:.6}.opacity-75{opacity:.75}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a),0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.filter{filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}@media(hover:hover){.group-hover\:block:is(:where(.group):hover *){display:block}.hover\:border-gray-600:hover{border-color:var(--color-gray-600)}.hover\:border-gray-700:hover{border-color:var(--color-gray-700)}.hover\:bg-brand-500:hover{background-color:var(--color-brand-500)}.hover\:bg-gray-700:hover{background-color:var(--color-gray-700)}.hover\:bg-gray-800\/30:hover{background-color:#2a29264d}@supports (color:color-mix(in lab,red,red)){.hover\:bg-gray-800\/30:hover{background-color:color-mix(in oklab,var(--color-gray-800)30%,transparent)}}.hover\:bg-gray-800\/50:hover{background-color:#2a292680}@supports (color:color-mix(in lab,red,red)){.hover\:bg-gray-800\/50:hover{background-color:color-mix(in oklab,var(--color-gray-800)50%,transparent)}}.hover\:bg-gray-900:hover{background-color:var(--color-gray-900)}.hover\:bg-indigo-950\/30:hover{background-color:#1e1a4d4d}@supports (color:color-mix(in lab,red,red)){.hover\:bg-indigo-950\/30:hover{background-color:color-mix(in oklab,var(--color-indigo-950)30%,transparent)}}.hover\:fill-indigo-500\/15:hover{fill:#625fff26}@supports (color:color-mix(in lab,red,red)){.hover\:fill-indigo-500\/15:hover{fill:color-mix(in oklab,var(--color-indigo-500)15%,transparent)}}.hover\:text-gray-200:hover{color:var(--color-gray-200)}.hover\:text-gray-300:hover{color:var(--color-gray-300)}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-100:hover{opacity:1}}.focus\:border-brand-500:focus{border-color:var(--color-brand-500)}.focus\:ring-1:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:ring-brand-500:focus{--tw-ring-color:var(--color-brand-500)}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-30:disabled{opacity:.3}.disabled\:opacity-40:disabled{opacity:.4}@media(hover:hover){.disabled\:hover\:bg-gray-800:disabled:hover{background-color:var(--color-gray-800)}.disabled\:hover\:text-gray-400:disabled:hover{color:var(--color-gray-400)}}@media(min-width:40rem){.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:flex-row{flex-direction:row}.sm\:justify-between{justify-content:space-between}}@media(min-width:48rem){.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.md\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}}@media(min-width:64rem){.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@keyframes ping{75%,to{opacity:0;transform:scale(2)}}@keyframes pulse{50%{opacity:.5}}
@@ -1 +1 @@
1
- import{S as te,A as L,B as v,s as _,C as m,o as F,D as Q,E as V,F as se,G as E,H as re,I as ne,J as k,n as Y,r as w,p as q,m as ie,K as ae,T as B,M as oe,N as ce}from"./main-CM5g2n-_.js";function $(e){if(Array.isArray(e))return e.flatMap(a=>$(a));if(typeof e!="string")return[];const t=[];let s=0,n,i,c,r,o;const d=()=>{for(;s<e.length&&/\s/.test(e.charAt(s));)s+=1;return s<e.length},h=()=>(i=e.charAt(s),i!=="="&&i!==";"&&i!==",");for(;s<e.length;){for(n=s,o=!1;d();)if(i=e.charAt(s),i===","){for(c=s,s+=1,d(),r=s;s<e.length&&h();)s+=1;s<e.length&&e.charAt(s)==="="?(o=!0,s=r,t.push(e.slice(n,c)),n=s):s=c+1}else s+=1;(!o||s>=e.length)&&t.push(e.slice(n))}return t}function he(e){return e instanceof Headers?e:Array.isArray(e)?new Headers(e):typeof e=="object"?new Headers(e):null}function le(...e){return e.reduce((t,s)=>{const n=he(s);if(!n)return t;for(const[i,c]of n.entries())i==="set-cookie"?$(c).forEach(o=>t.append("set-cookie",o)):t.set(i,c);return t},new Headers)}var ue=class extends te{constructor(e,t){super(),this.options=t,this.#s=e,this.#n=null,this.#r=L(),this.bindMethods(),this.setOptions(t)}#s;#e=void 0;#p=void 0;#t=void 0;#a;#l;#r;#n;#v;#u;#d;#o;#c;#i;#f=new Set;bindMethods(){this.refetch=this.refetch.bind(this)}onSubscribe(){this.listeners.size===1&&(this.#e.addObserver(this),W(this.#e,this.options)?this.#h():this.updateResult(),this.#R())}onUnsubscribe(){this.hasListeners()||this.destroy()}shouldFetchOnReconnect(){return P(this.#e,this.options,this.options.refetchOnReconnect)}shouldFetchOnWindowFocus(){return P(this.#e,this.options,this.options.refetchOnWindowFocus)}destroy(){this.listeners=new Set,this.#m(),this.#O(),this.#e.removeObserver(this)}setOptions(e){const t=this.options,s=this.#e;if(this.options=this.#s.defaultQueryOptions(e),this.options.enabled!==void 0&&typeof this.options.enabled!="boolean"&&typeof this.options.enabled!="function"&&typeof v(this.options.enabled,this.#e)!="boolean")throw new Error("Expected enabled to be a boolean or a callback that returns a boolean");this.#g(),this.#e.setOptions(this.options),t._defaulted&&!_(this.options,t)&&this.#s.getQueryCache().notify({type:"observerOptionsUpdated",query:this.#e,observer:this});const n=this.hasListeners();n&&G(this.#e,s,this.options,t)&&this.#h(),this.updateResult(),n&&(this.#e!==s||v(this.options.enabled,this.#e)!==v(t.enabled,this.#e)||m(this.options.staleTime,this.#e)!==m(t.staleTime,this.#e))&&this.#y();const i=this.#w();n&&(this.#e!==s||v(this.options.enabled,this.#e)!==v(t.enabled,this.#e)||i!==this.#i)&&this.#b(i)}getOptimisticResult(e){const t=this.#s.getQueryCache().build(this.#s,e),s=this.createResult(t,e);return fe(this,s)&&(this.#t=s,this.#l=this.options,this.#a=this.#e.state),s}getCurrentResult(){return this.#t}trackResult(e,t){return new Proxy(e,{get:(s,n)=>(this.trackProp(n),t?.(n),n==="promise"&&(this.trackProp("data"),!this.options.experimental_prefetchInRender&&this.#r.status==="pending"&&this.#r.reject(new Error("experimental_prefetchInRender feature flag is not enabled"))),Reflect.get(s,n))})}trackProp(e){this.#f.add(e)}getCurrentQuery(){return this.#e}refetch({...e}={}){return this.fetch({...e})}fetchOptimistic(e){const t=this.#s.defaultQueryOptions(e),s=this.#s.getQueryCache().build(this.#s,t);return s.fetch().then(()=>this.createResult(s,t))}fetch(e){return this.#h({...e,cancelRefetch:e.cancelRefetch??!0}).then(()=>(this.updateResult(),this.#t))}#h(e){this.#g();let t=this.#e.fetch(this.options,e);return e?.throwOnError||(t=t.catch(F)),t}#y(){this.#m();const e=m(this.options.staleTime,this.#e);if(Q||this.#t.isStale||!V(e))return;const s=se(this.#t.dataUpdatedAt,e)+1;this.#o=E.setTimeout(()=>{this.#t.isStale||this.updateResult()},s)}#w(){return(typeof this.options.refetchInterval=="function"?this.options.refetchInterval(this.#e):this.options.refetchInterval)??!1}#b(e){this.#O(),this.#i=e,!(Q||v(this.options.enabled,this.#e)===!1||!V(this.#i)||this.#i===0)&&(this.#c=E.setInterval(()=>{(this.options.refetchIntervalInBackground||re.isFocused())&&this.#h()},this.#i))}#R(){this.#y(),this.#b(this.#w())}#m(){this.#o&&(E.clearTimeout(this.#o),this.#o=void 0)}#O(){this.#c&&(E.clearInterval(this.#c),this.#c=void 0)}createResult(e,t){const s=this.#e,n=this.options,i=this.#t,c=this.#a,r=this.#l,d=e!==s?e.state:this.#p,{state:h}=e;let a={...h},l=!1,u;if(t._optimisticResults){const f=this.hasListeners(),R=!f&&W(e,t),O=f&&G(e,s,t,n);(R||O)&&(a={...a,...ne(h.data,e.options)}),t._optimisticResults==="isRestoring"&&(a.fetchStatus="idle")}let{error:y,errorUpdatedAt:C,status:p}=a;u=a.data;let D=!1;if(t.placeholderData!==void 0&&u===void 0&&p==="pending"){let f;i?.isPlaceholderData&&t.placeholderData===r?.placeholderData?(f=i.data,D=!0):f=typeof t.placeholderData=="function"?t.placeholderData(this.#d?.state.data,this.#d):t.placeholderData,f!==void 0&&(p="success",u=k(i?.data,f,t),l=!0)}if(t.select&&u!==void 0&&!D)if(i&&u===c?.data&&t.select===this.#v)u=this.#u;else try{this.#v=t.select,u=t.select(u),u=k(i?.data,u,t),this.#u=u,this.#n=null}catch(f){this.#n=f}this.#n&&(y=this.#n,u=this.#u,C=Date.now(),p="error");const M=a.fetchStatus==="fetching",I=p==="pending",x=p==="error",N=I&&M,j=u!==void 0,b={status:p,fetchStatus:a.fetchStatus,isPending:I,isSuccess:p==="success",isError:x,isInitialLoading:N,isLoading:N,data:u,dataUpdatedAt:a.dataUpdatedAt,error:y,errorUpdatedAt:C,failureCount:a.fetchFailureCount,failureReason:a.fetchFailureReason,errorUpdateCount:a.errorUpdateCount,isFetched:a.dataUpdateCount>0||a.errorUpdateCount>0,isFetchedAfterMount:a.dataUpdateCount>d.dataUpdateCount||a.errorUpdateCount>d.errorUpdateCount,isFetching:M,isRefetching:M&&!I,isLoadingError:x&&!j,isPaused:a.fetchStatus==="paused",isPlaceholderData:l,isRefetchError:x&&j,isStale:A(e,t),refetch:this.refetch,promise:this.#r,isEnabled:v(t.enabled,e)!==!1};if(this.options.experimental_prefetchInRender){const f=b.data!==void 0,R=b.status==="error"&&!f,O=S=>{R?S.reject(b.error):f&&S.resolve(b.data)},H=()=>{const S=this.#r=b.promise=L();O(S)},g=this.#r;switch(g.status){case"pending":e.queryHash===s.queryHash&&O(g);break;case"fulfilled":(R||b.data!==g.value)&&H();break;case"rejected":(!R||b.error!==g.reason)&&H();break}}return b}updateResult(){const e=this.#t,t=this.createResult(this.#e,this.options);if(this.#a=this.#e.state,this.#l=this.options,this.#a.data!==void 0&&(this.#d=this.#e),_(t,e))return;this.#t=t;const s=()=>{if(!e)return!0;const{notifyOnChangeProps:n}=this.options,i=typeof n=="function"?n():n;if(i==="all"||!i&&!this.#f.size)return!0;const c=new Set(i??this.#f);return this.options.throwOnError&&c.add("error"),Object.keys(this.#t).some(r=>{const o=r;return this.#t[o]!==e[o]&&c.has(o)})};this.#S({listeners:s()})}#g(){const e=this.#s.getQueryCache().build(this.#s,this.options);if(e===this.#e)return;const t=this.#e;this.#e=e,this.#p=e.state,this.hasListeners()&&(t?.removeObserver(this),e.addObserver(this))}onQueryUpdate(){this.updateResult(),this.hasListeners()&&this.#R()}#S(e){Y.batch(()=>{e.listeners&&this.listeners.forEach(t=>{t(this.#t)}),this.#s.getQueryCache().notify({query:this.#e,type:"observerResultsUpdated"})})}};function de(e,t){return v(t.enabled,e)!==!1&&e.state.data===void 0&&!(e.state.status==="error"&&t.retryOnMount===!1)}function W(e,t){return de(e,t)||e.state.data!==void 0&&P(e,t,t.refetchOnMount)}function P(e,t,s){if(v(t.enabled,e)!==!1&&m(t.staleTime,e)!=="static"){const n=typeof s=="function"?s(e):s;return n==="always"||n!==!1&&A(e,t)}return!1}function G(e,t,s,n){return(e!==t||v(n.enabled,e)===!1)&&(!s.suspense||e.state.status!=="error")&&A(e,s)}function A(e,t){return v(t.enabled,e)!==!1&&e.isStaleByTime(m(t.staleTime,e))}function fe(e,t){return!_(e.getCurrentResult(),t)}var X=w.createContext(!1),pe=()=>w.useContext(X);X.Provider;function ve(){let e=!1;return{clearReset:()=>{e=!1},reset:()=>{e=!0},isReset:()=>e}}var ye=w.createContext(ve()),we=()=>w.useContext(ye),be=(e,t,s)=>{const n=s?.state.error&&typeof e.throwOnError=="function"?q(e.throwOnError,[s.state.error,s]):e.throwOnError;(e.suspense||e.experimental_prefetchInRender||n)&&(t.isReset()||(e.retryOnMount=!1))},Re=e=>{w.useEffect(()=>{e.clearReset()},[e])},me=({result:e,errorResetBoundary:t,throwOnError:s,query:n,suspense:i})=>e.isError&&!t.isReset()&&!e.isFetching&&n&&(i&&e.data===void 0||q(s,[e.error,n])),Oe=e=>{if(e.suspense){const s=i=>i==="static"?i:Math.max(i??1e3,1e3),n=e.staleTime;e.staleTime=typeof n=="function"?(...i)=>s(n(...i)):s(n),typeof e.gcTime=="number"&&(e.gcTime=Math.max(e.gcTime,1e3))}},ge=(e,t)=>e.isLoading&&e.isFetching&&!t,Se=(e,t)=>e?.suspense&&t.isPending,z=(e,t,s)=>t.fetchOptimistic(e).catch(()=>{s.clearReset()});function Ee(e,t,s){const n=pe(),i=we(),c=ie(),r=c.defaultQueryOptions(e);c.getDefaultOptions().queries?._experimental_beforeQuery?.(r);const o=c.getQueryCache().get(r.queryHash);r._optimisticResults=n?"isRestoring":"optimistic",Oe(r),be(r,i,o),Re(i);const d=!c.getQueryCache().get(r.queryHash),[h]=w.useState(()=>new t(c,r)),a=h.getOptimisticResult(r),l=!n&&e.subscribed!==!1;if(w.useSyncExternalStore(w.useCallback(u=>{const y=l?h.subscribe(Y.batchCalls(u)):F;return h.updateResult(),y},[h,l]),()=>h.getCurrentResult(),()=>h.getCurrentResult()),w.useEffect(()=>{h.setOptions(r)},[r,h]),Se(r,a))throw z(r,h,i);if(me({result:a,errorResetBoundary:i,throwOnError:r.throwOnError,query:o,suspense:r.suspense}))throw a.error;return c.getDefaultOptions().queries?._experimental_afterQuery?.(r,a),r.experimental_prefetchInRender&&!Q&&ge(a,n)&&(d?z(r,h,i):o?.promise)?.catch(F).finally(()=>{h.updateResult()}),r.notifyOnChangeProps?a:h.trackResult(a)}function _e(e,t){return Ee(e,ue)}function Fe(e){return e}const Z=()=>{throw new Error("createServerOnlyFn() functions can only be called on the server!")};function K(e){return e!=="__proto__"&&e!=="constructor"&&e!=="prototype"}function U(e,t){const s=Object.create(null);if(e)for(const n of Object.keys(e))K(n)&&(s[n]=e[n]);if(t&&typeof t=="object")for(const n of Object.keys(t))K(n)&&(s[n]=t[n]);return s}function ee(e){return Object.create(null)}const T=(e,t)=>{const s=t||e||{};return typeof s.method>"u"&&(s.method="GET"),Object.assign(c=>{const r={...s,...c};return T(void 0,r)},{options:s,middleware:c=>{const r=[...s.middleware||[]];c.map(h=>{B in h?h.options.middleware&&r.push(...h.options.middleware):r.push(h)});const o={...s,middleware:r},d=T(void 0,o);return d[B]=!0,d},inputValidator:c=>{const r={...s,inputValidator:c};return T(void 0,r)},handler:(...c)=>{const[r,o]=c,d={...s,extractedFn:r,serverFn:o},h=[...d.middleware||[],Ie(d)];return Object.assign(async a=>{const l=await J(h,"client",{...r,...d,data:a?.data,headers:a?.headers,signal:a?.signal,fetch:a?.fetch,context:ee()}),u=ae(l.error);if(u)throw u;if(l.error)throw l.error;return l.result},{...r,__executeServer:async a=>{const l=Z(),u=l.contextAfterGlobalMiddlewares,y={...r,...a,serverFnMeta:r.serverFnMeta,context:U(u,a.context),request:l.request};return await J(h,"server",y).then(p=>({result:p.result,error:p.error,context:p.sendContext}))}})}})};async function J(e,t,s){const n=oe()?.functionMiddleware||[];let i=Ce([...n,...e]);if(t==="server"){const r=Z();r?.executedRequestMiddlewares&&(i=i.filter(o=>!r.executedRequestMiddlewares.has(o)))}const c=async r=>{const o=i.shift();if(!o)return r;try{"inputValidator"in o.options&&o.options.inputValidator&&t==="server"&&(r.data=await Me(o.options.inputValidator,r.data));let d;if(t==="client"?"client"in o.options&&(d=o.options.client):"server"in o.options&&(d=o.options.server),d){const a=await d({...r,next:async(l={})=>{const u={...r,...l,context:U(r.context,l.context),sendContext:U(r.sendContext,l.sendContext),headers:le(r.headers,l.headers),_callSiteFetch:r._callSiteFetch,fetch:r._callSiteFetch??l.fetch??r.fetch,result:l.result!==void 0?l.result:l instanceof Response?l:r.result,error:l.error??r.error},y=await c(u);if(y.error)throw y.error;return y}});if(ce(a))return{...r,error:a};if(a instanceof Response)return{...r,result:a};if(!a)throw new Error("User middleware returned undefined. You must call next() or return a result in your middlewares.");return a}return c(r)}catch(d){return{...r,error:d}}};return c({...s,headers:s.headers||{},sendContext:s.sendContext||{},context:s.context||ee(),_callSiteFetch:s.fetch})}function Ce(e,t=100){const s=new Set,n=[],i=(c,r)=>{if(r>t)throw new Error(`Middleware nesting depth exceeded maximum of ${t}. Check for circular references.`);c.forEach(o=>{o.options.middleware&&i(o.options.middleware,r+1),s.has(o)||(s.add(o),n.push(o))})};return i(e,0),n}async function Me(e,t){if(e==null)return{};if("~standard"in e){const s=await e["~standard"].validate(t);if(s.issues)throw new Error(JSON.stringify(s.issues,void 0,2));return s.value}if("parse"in e)return e.parse(t);if(typeof e=="function")return e(t);throw new Error("Invalid validator type!")}function Ie(e){return{"~types":void 0,options:{inputValidator:e.inputValidator,client:async({next:t,sendContext:s,fetch:n,...i})=>{const c={...i,context:s,fetch:n},r=await e.extractedFn?.(c);return t(r)},server:async({next:t,...s})=>{const n=await e.serverFn?.(s);return t({...s,result:n})}}}}export{T as c,Fe as q,_e as u};
1
+ import{S as te,B as L,C as v,s as _,D as m,p as F,E as Q,F as V,G as se,H as E,I as re,J as ne,K as k,n as J,r as w,q as Y,o as ie,M as ae,T as B,N as oe,P as ce}from"./main-CfJIADCp.js";function $(e){if(Array.isArray(e))return e.flatMap(a=>$(a));if(typeof e!="string")return[];const t=[];let s=0,n,i,c,r,o;const d=()=>{for(;s<e.length&&/\s/.test(e.charAt(s));)s+=1;return s<e.length},h=()=>(i=e.charAt(s),i!=="="&&i!==";"&&i!==",");for(;s<e.length;){for(n=s,o=!1;d();)if(i=e.charAt(s),i===","){for(c=s,s+=1,d(),r=s;s<e.length&&h();)s+=1;s<e.length&&e.charAt(s)==="="?(o=!0,s=r,t.push(e.slice(n,c)),n=s):s=c+1}else s+=1;(!o||s>=e.length)&&t.push(e.slice(n))}return t}function he(e){return e instanceof Headers?e:Array.isArray(e)?new Headers(e):typeof e=="object"?new Headers(e):null}function le(...e){return e.reduce((t,s)=>{const n=he(s);if(!n)return t;for(const[i,c]of n.entries())i==="set-cookie"?$(c).forEach(o=>t.append("set-cookie",o)):t.set(i,c);return t},new Headers)}var ue=class extends te{constructor(e,t){super(),this.options=t,this.#s=e,this.#n=null,this.#r=L(),this.bindMethods(),this.setOptions(t)}#s;#e=void 0;#p=void 0;#t=void 0;#a;#l;#r;#n;#v;#u;#d;#o;#c;#i;#f=new Set;bindMethods(){this.refetch=this.refetch.bind(this)}onSubscribe(){this.listeners.size===1&&(this.#e.addObserver(this),W(this.#e,this.options)?this.#h():this.updateResult(),this.#R())}onUnsubscribe(){this.hasListeners()||this.destroy()}shouldFetchOnReconnect(){return P(this.#e,this.options,this.options.refetchOnReconnect)}shouldFetchOnWindowFocus(){return P(this.#e,this.options,this.options.refetchOnWindowFocus)}destroy(){this.listeners=new Set,this.#m(),this.#O(),this.#e.removeObserver(this)}setOptions(e){const t=this.options,s=this.#e;if(this.options=this.#s.defaultQueryOptions(e),this.options.enabled!==void 0&&typeof this.options.enabled!="boolean"&&typeof this.options.enabled!="function"&&typeof v(this.options.enabled,this.#e)!="boolean")throw new Error("Expected enabled to be a boolean or a callback that returns a boolean");this.#g(),this.#e.setOptions(this.options),t._defaulted&&!_(this.options,t)&&this.#s.getQueryCache().notify({type:"observerOptionsUpdated",query:this.#e,observer:this});const n=this.hasListeners();n&&G(this.#e,s,this.options,t)&&this.#h(),this.updateResult(),n&&(this.#e!==s||v(this.options.enabled,this.#e)!==v(t.enabled,this.#e)||m(this.options.staleTime,this.#e)!==m(t.staleTime,this.#e))&&this.#y();const i=this.#w();n&&(this.#e!==s||v(this.options.enabled,this.#e)!==v(t.enabled,this.#e)||i!==this.#i)&&this.#b(i)}getOptimisticResult(e){const t=this.#s.getQueryCache().build(this.#s,e),s=this.createResult(t,e);return fe(this,s)&&(this.#t=s,this.#l=this.options,this.#a=this.#e.state),s}getCurrentResult(){return this.#t}trackResult(e,t){return new Proxy(e,{get:(s,n)=>(this.trackProp(n),t?.(n),n==="promise"&&(this.trackProp("data"),!this.options.experimental_prefetchInRender&&this.#r.status==="pending"&&this.#r.reject(new Error("experimental_prefetchInRender feature flag is not enabled"))),Reflect.get(s,n))})}trackProp(e){this.#f.add(e)}getCurrentQuery(){return this.#e}refetch({...e}={}){return this.fetch({...e})}fetchOptimistic(e){const t=this.#s.defaultQueryOptions(e),s=this.#s.getQueryCache().build(this.#s,t);return s.fetch().then(()=>this.createResult(s,t))}fetch(e){return this.#h({...e,cancelRefetch:e.cancelRefetch??!0}).then(()=>(this.updateResult(),this.#t))}#h(e){this.#g();let t=this.#e.fetch(this.options,e);return e?.throwOnError||(t=t.catch(F)),t}#y(){this.#m();const e=m(this.options.staleTime,this.#e);if(Q||this.#t.isStale||!V(e))return;const s=se(this.#t.dataUpdatedAt,e)+1;this.#o=E.setTimeout(()=>{this.#t.isStale||this.updateResult()},s)}#w(){return(typeof this.options.refetchInterval=="function"?this.options.refetchInterval(this.#e):this.options.refetchInterval)??!1}#b(e){this.#O(),this.#i=e,!(Q||v(this.options.enabled,this.#e)===!1||!V(this.#i)||this.#i===0)&&(this.#c=E.setInterval(()=>{(this.options.refetchIntervalInBackground||re.isFocused())&&this.#h()},this.#i))}#R(){this.#y(),this.#b(this.#w())}#m(){this.#o&&(E.clearTimeout(this.#o),this.#o=void 0)}#O(){this.#c&&(E.clearInterval(this.#c),this.#c=void 0)}createResult(e,t){const s=this.#e,n=this.options,i=this.#t,c=this.#a,r=this.#l,d=e!==s?e.state:this.#p,{state:h}=e;let a={...h},l=!1,u;if(t._optimisticResults){const f=this.hasListeners(),R=!f&&W(e,t),O=f&&G(e,s,t,n);(R||O)&&(a={...a,...ne(h.data,e.options)}),t._optimisticResults==="isRestoring"&&(a.fetchStatus="idle")}let{error:y,errorUpdatedAt:C,status:p}=a;u=a.data;let N=!1;if(t.placeholderData!==void 0&&u===void 0&&p==="pending"){let f;i?.isPlaceholderData&&t.placeholderData===r?.placeholderData?(f=i.data,N=!0):f=typeof t.placeholderData=="function"?t.placeholderData(this.#d?.state.data,this.#d):t.placeholderData,f!==void 0&&(p="success",u=k(i?.data,f,t),l=!0)}if(t.select&&u!==void 0&&!N)if(i&&u===c?.data&&t.select===this.#v)u=this.#u;else try{this.#v=t.select,u=t.select(u),u=k(i?.data,u,t),this.#u=u,this.#n=null}catch(f){this.#n=f}this.#n&&(y=this.#n,u=this.#u,C=Date.now(),p="error");const M=a.fetchStatus==="fetching",I=p==="pending",x=p==="error",A=I&&M,j=u!==void 0,b={status:p,fetchStatus:a.fetchStatus,isPending:I,isSuccess:p==="success",isError:x,isInitialLoading:A,isLoading:A,data:u,dataUpdatedAt:a.dataUpdatedAt,error:y,errorUpdatedAt:C,failureCount:a.fetchFailureCount,failureReason:a.fetchFailureReason,errorUpdateCount:a.errorUpdateCount,isFetched:a.dataUpdateCount>0||a.errorUpdateCount>0,isFetchedAfterMount:a.dataUpdateCount>d.dataUpdateCount||a.errorUpdateCount>d.errorUpdateCount,isFetching:M,isRefetching:M&&!I,isLoadingError:x&&!j,isPaused:a.fetchStatus==="paused",isPlaceholderData:l,isRefetchError:x&&j,isStale:D(e,t),refetch:this.refetch,promise:this.#r,isEnabled:v(t.enabled,e)!==!1};if(this.options.experimental_prefetchInRender){const f=b.data!==void 0,R=b.status==="error"&&!f,O=S=>{R?S.reject(b.error):f&&S.resolve(b.data)},H=()=>{const S=this.#r=b.promise=L();O(S)},g=this.#r;switch(g.status){case"pending":e.queryHash===s.queryHash&&O(g);break;case"fulfilled":(R||b.data!==g.value)&&H();break;case"rejected":(!R||b.error!==g.reason)&&H();break}}return b}updateResult(){const e=this.#t,t=this.createResult(this.#e,this.options);if(this.#a=this.#e.state,this.#l=this.options,this.#a.data!==void 0&&(this.#d=this.#e),_(t,e))return;this.#t=t;const s=()=>{if(!e)return!0;const{notifyOnChangeProps:n}=this.options,i=typeof n=="function"?n():n;if(i==="all"||!i&&!this.#f.size)return!0;const c=new Set(i??this.#f);return this.options.throwOnError&&c.add("error"),Object.keys(this.#t).some(r=>{const o=r;return this.#t[o]!==e[o]&&c.has(o)})};this.#S({listeners:s()})}#g(){const e=this.#s.getQueryCache().build(this.#s,this.options);if(e===this.#e)return;const t=this.#e;this.#e=e,this.#p=e.state,this.hasListeners()&&(t?.removeObserver(this),e.addObserver(this))}onQueryUpdate(){this.updateResult(),this.hasListeners()&&this.#R()}#S(e){J.batch(()=>{e.listeners&&this.listeners.forEach(t=>{t(this.#t)}),this.#s.getQueryCache().notify({query:this.#e,type:"observerResultsUpdated"})})}};function de(e,t){return v(t.enabled,e)!==!1&&e.state.data===void 0&&!(e.state.status==="error"&&t.retryOnMount===!1)}function W(e,t){return de(e,t)||e.state.data!==void 0&&P(e,t,t.refetchOnMount)}function P(e,t,s){if(v(t.enabled,e)!==!1&&m(t.staleTime,e)!=="static"){const n=typeof s=="function"?s(e):s;return n==="always"||n!==!1&&D(e,t)}return!1}function G(e,t,s,n){return(e!==t||v(n.enabled,e)===!1)&&(!s.suspense||e.state.status!=="error")&&D(e,s)}function D(e,t){return v(t.enabled,e)!==!1&&e.isStaleByTime(m(t.staleTime,e))}function fe(e,t){return!_(e.getCurrentResult(),t)}var X=w.createContext(!1),pe=()=>w.useContext(X);X.Provider;function ve(){let e=!1;return{clearReset:()=>{e=!1},reset:()=>{e=!0},isReset:()=>e}}var ye=w.createContext(ve()),we=()=>w.useContext(ye),be=(e,t,s)=>{const n=s?.state.error&&typeof e.throwOnError=="function"?Y(e.throwOnError,[s.state.error,s]):e.throwOnError;(e.suspense||e.experimental_prefetchInRender||n)&&(t.isReset()||(e.retryOnMount=!1))},Re=e=>{w.useEffect(()=>{e.clearReset()},[e])},me=({result:e,errorResetBoundary:t,throwOnError:s,query:n,suspense:i})=>e.isError&&!t.isReset()&&!e.isFetching&&n&&(i&&e.data===void 0||Y(s,[e.error,n])),Oe=e=>{if(e.suspense){const s=i=>i==="static"?i:Math.max(i??1e3,1e3),n=e.staleTime;e.staleTime=typeof n=="function"?(...i)=>s(n(...i)):s(n),typeof e.gcTime=="number"&&(e.gcTime=Math.max(e.gcTime,1e3))}},ge=(e,t)=>e.isLoading&&e.isFetching&&!t,Se=(e,t)=>e?.suspense&&t.isPending,z=(e,t,s)=>t.fetchOptimistic(e).catch(()=>{s.clearReset()});function Ee(e,t,s){const n=pe(),i=we(),c=ie(),r=c.defaultQueryOptions(e);c.getDefaultOptions().queries?._experimental_beforeQuery?.(r);const o=c.getQueryCache().get(r.queryHash);r._optimisticResults=n?"isRestoring":"optimistic",Oe(r),be(r,i,o),Re(i);const d=!c.getQueryCache().get(r.queryHash),[h]=w.useState(()=>new t(c,r)),a=h.getOptimisticResult(r),l=!n&&e.subscribed!==!1;if(w.useSyncExternalStore(w.useCallback(u=>{const y=l?h.subscribe(J.batchCalls(u)):F;return h.updateResult(),y},[h,l]),()=>h.getCurrentResult(),()=>h.getCurrentResult()),w.useEffect(()=>{h.setOptions(r)},[r,h]),Se(r,a))throw z(r,h,i);if(me({result:a,errorResetBoundary:i,throwOnError:r.throwOnError,query:o,suspense:r.suspense}))throw a.error;return c.getDefaultOptions().queries?._experimental_afterQuery?.(r,a),r.experimental_prefetchInRender&&!Q&&ge(a,n)&&(d?z(r,h,i):o?.promise)?.catch(F).finally(()=>{h.updateResult()}),r.notifyOnChangeProps?a:h.trackResult(a)}function _e(e,t){return Ee(e,ue)}function Fe(e){return e}const Z=()=>{throw new Error("createServerOnlyFn() functions can only be called on the server!")};function K(e){return e!=="__proto__"&&e!=="constructor"&&e!=="prototype"}function U(e,t){const s=Object.create(null);if(e)for(const n of Object.keys(e))K(n)&&(s[n]=e[n]);if(t&&typeof t=="object")for(const n of Object.keys(t))K(n)&&(s[n]=t[n]);return s}function ee(e){return Object.create(null)}const T=(e,t)=>{const s=t||e||{};return typeof s.method>"u"&&(s.method="GET"),Object.assign(c=>{const r={...s,...c};return T(void 0,r)},{options:s,middleware:c=>{const r=[...s.middleware||[]];c.map(h=>{B in h?h.options.middleware&&r.push(...h.options.middleware):r.push(h)});const o={...s,middleware:r},d=T(void 0,o);return d[B]=!0,d},inputValidator:c=>{const r={...s,inputValidator:c};return T(void 0,r)},handler:(...c)=>{const[r,o]=c,d={...s,extractedFn:r,serverFn:o},h=[...d.middleware||[],Ie(d)];return Object.assign(async a=>{const l=await q(h,"client",{...r,...d,data:a?.data,headers:a?.headers,signal:a?.signal,fetch:a?.fetch,context:ee()}),u=ae(l.error);if(u)throw u;if(l.error)throw l.error;return l.result},{...r,__executeServer:async a=>{const l=Z(),u=l.contextAfterGlobalMiddlewares,y={...r,...a,serverFnMeta:r.serverFnMeta,context:U(u,a.context),request:l.request};return await q(h,"server",y).then(p=>({result:p.result,error:p.error,context:p.sendContext}))}})}})};async function q(e,t,s){const n=oe()?.functionMiddleware||[];let i=Ce([...n,...e]);if(t==="server"){const r=Z();r?.executedRequestMiddlewares&&(i=i.filter(o=>!r.executedRequestMiddlewares.has(o)))}const c=async r=>{const o=i.shift();if(!o)return r;try{"inputValidator"in o.options&&o.options.inputValidator&&t==="server"&&(r.data=await Me(o.options.inputValidator,r.data));let d;if(t==="client"?"client"in o.options&&(d=o.options.client):"server"in o.options&&(d=o.options.server),d){const a=await d({...r,next:async(l={})=>{const u={...r,...l,context:U(r.context,l.context),sendContext:U(r.sendContext,l.sendContext),headers:le(r.headers,l.headers),_callSiteFetch:r._callSiteFetch,fetch:r._callSiteFetch??l.fetch??r.fetch,result:l.result!==void 0?l.result:l instanceof Response?l:r.result,error:l.error??r.error},y=await c(u);if(y.error)throw y.error;return y}});if(ce(a))return{...r,error:a};if(a instanceof Response)return{...r,result:a};if(!a)throw new Error("User middleware returned undefined. You must call next() or return a result in your middlewares.");return a}return c(r)}catch(d){return{...r,error:d}}};return c({...s,headers:s.headers||{},sendContext:s.sendContext||{},context:s.context||ee(),_callSiteFetch:s.fetch})}function Ce(e,t=100){const s=new Set,n=[],i=(c,r)=>{if(r>t)throw new Error(`Middleware nesting depth exceeded maximum of ${t}. Check for circular references.`);c.forEach(o=>{o.options.middleware&&i(o.options.middleware,r+1),s.has(o)||(s.add(o),n.push(o))})};return i(e,0),n}async function Me(e,t){if(e==null)return{};if("~standard"in e){const s=await e["~standard"].validate(t);if(s.issues)throw new Error(JSON.stringify(s.issues,void 0,2));return s.value}if("parse"in e)return e.parse(t);if(typeof e=="function")return e(t);throw new Error("Invalid validator type!")}function Ie(e){return{"~types":void 0,options:{inputValidator:e.inputValidator,client:async({next:t,sendContext:s,fetch:n,...i})=>{const c={...i,context:s,fetch:n},r=await e.extractedFn?.(c);return t(r)},server:async({next:t,...s})=>{const n=await e.serverFn?.(s);return t({...s,result:n})}}}}export{T as c,Fe as q,_e as u};
@@ -0,0 +1 @@
1
+ import{j as e,r as g,b as v,L as T,e as N,f as S}from"./main-CfJIADCp.js";import{u as j}from"./createServerFn-Bn6_ISOt.js";import{p as k,a as D}from"./sessions.queries-CrJg4dYU.js";import{d as w,e as R,h as L}from"./format-Bsprb3az.js";function M({isActive:t}){return t?e.jsxs("span",{className:"inline-flex items-center gap-1.5 rounded-full bg-emerald-500/15 px-2.5 py-0.5 text-xs font-medium text-emerald-400",children:[e.jsxs("span",{className:"relative flex h-2 w-2",children:[e.jsx("span",{className:"absolute inline-flex h-full w-full animate-ping rounded-full bg-emerald-400 opacity-75"}),e.jsx("span",{className:"relative inline-flex h-2 w-2 rounded-full bg-emerald-500"})]}),"Active"]}):e.jsxs("span",{className:"inline-flex items-center gap-1.5 rounded-full bg-gray-500/15 px-2.5 py-0.5 text-xs font-medium text-gray-400",children:[e.jsx("span",{className:"h-2 w-2 rounded-full bg-gray-500"}),"Completed"]})}function $({startedAt:t}){const[n,a]=g.useState(()=>Date.now()-new Date(t).getTime());return g.useEffect(()=>{const l=setInterval(()=>{a(Date.now()-new Date(t).getTime())},1e3);return()=>clearInterval(l)},[t]),e.jsx("span",{className:"text-emerald-400",children:w(n)})}function B({session:t}){const{privacyMode:n,anonymizePath:a,anonymizeProjectName:l,anonymizeBranch:i}=v(),r=n?l(t.projectName):t.projectName,c=t.cwd?a(t.cwd,t.projectName):null,m=t.branch?i(t.branch):null;return e.jsxs(T,{to:"/sessions/$sessionId",params:{sessionId:t.sessionId},search:{project:t.projectPath},className:"group block rounded-xl border border-gray-800 bg-gray-900/50 p-4 transition-all hover:border-gray-700 hover:bg-gray-900",children:[e.jsxs("div",{className:"flex items-start justify-between gap-3",children:[e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("h3",{className:"truncate text-sm font-semibold text-white",children:r}),e.jsx(M,{isActive:t.isActive})]}),m&&e.jsx("p",{className:"mt-1 truncate text-xs text-gray-500",children:e.jsx("span",{className:"font-mono",children:m})})]}),e.jsx("span",{className:"shrink-0 text-xs text-gray-500",children:R(t.lastActiveAt)})]}),e.jsxs("div",{className:"mt-3 flex items-center gap-4 text-xs text-gray-400",children:[e.jsx("span",{title:"Duration",children:t.isActive?e.jsx($,{startedAt:t.startedAt}):w(t.durationMs)}),e.jsxs("span",{title:"Messages",children:[t.messageCount," msgs"]}),t.model&&e.jsx("span",{title:"Model",className:"truncate font-mono text-gray-500",children:t.model.replace(/^claude-/,"").split("-202")[0]}),e.jsx("span",{title:"File size",className:"text-gray-500",children:L(t.fileSizeBytes)})]}),c&&e.jsx("p",{className:"mt-2 truncate text-xs font-mono text-gray-600",children:c})]})}function _({projects:t,activeCount:n}){const a=N(),{search:l,status:i,project:r}=S.useSearch(),{privacyMode:c,anonymizeProjectName:m}=v(),[p,d]=g.useState(l),o=g.useRef(null);g.useEffect(()=>()=>{o.current&&clearTimeout(o.current)},[]),g.useEffect(()=>{d(l)},[l]);function f(s){d(s),o.current&&clearTimeout(o.current),o.current=setTimeout(()=>{a({to:"/sessions",search:h=>({...h,search:s,page:1})})},300)}function y(s){a({to:"/sessions",search:h=>({...h,status:s,page:1})})}function b(s){a({to:"/sessions",search:h=>({...h,project:s,page:1})})}return e.jsxs("div",{className:"flex flex-wrap items-center gap-3",children:[e.jsx("input",{type:"text",placeholder:"Search sessions...",value:p,onChange:s=>f(s.target.value),className:"rounded-lg border border-gray-700 bg-gray-800/50 px-3 py-1.5 text-sm text-gray-200 placeholder-gray-500 outline-none focus:border-brand-500 focus:ring-1 focus:ring-brand-500"}),e.jsx("div",{className:"flex rounded-lg border border-gray-700 text-xs",children:["all","active","completed"].map(s=>e.jsxs("button",{onClick:()=>y(s),className:`px-3 py-1.5 capitalize transition-colors ${i===s?"bg-gray-700 text-white":"text-gray-400 hover:text-gray-200"} ${s==="all"?"rounded-l-lg":""} ${s==="completed"?"rounded-r-lg":""}`,children:[s,s==="active"&&n>0&&e.jsxs("span",{className:"ml-1 text-emerald-400",children:["(",n,")"]})]},s))}),t.length>1&&e.jsxs("select",{value:r,onChange:s=>b(s.target.value),className:"rounded-lg border border-gray-700 bg-gray-800/50 px-3 py-1.5 text-sm text-gray-200 outline-none focus:border-brand-500",children:[e.jsx("option",{value:"",children:"All projects"}),t.map(s=>e.jsx("option",{value:s,children:c?m(s):s},s))]})]})}const P="claude-dashboard:page-size",C=[5,10,25,50];function A(t){return C.includes(t)}function Q(){if(typeof window>"u")return null;try{const t=localStorage.getItem(P);if(t!==null){const n=Number(t);if(A(n))return n}}catch{}return null}function F(){const[t,n]=g.useState(Q),a=g.useCallback(l=>{if(A(l))try{localStorage.setItem(P,String(l)),n(l)}catch{}},[]);return{storedPageSize:t,setPageSize:a}}function V({page:t,totalPages:n,totalCount:a,pageSize:l,onPageChange:i,onPageSizeChange:r}){if(a===0)return null;const c=(t-1)*l+1,m=Math.min(t*l,a),p=n>1,d=p?G(t,n):[];return e.jsxs("div",{className:"flex flex-col items-center gap-3 sm:flex-row sm:justify-between",children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("select",{value:l,onChange:o=>r(Number(o.target.value)),className:"rounded-lg border border-gray-700 bg-gray-800/50 px-2 py-1 text-xs text-gray-200 outline-none focus:border-brand-500",children:C.map(o=>e.jsxs("option",{value:o,children:[o," / page"]},o))}),e.jsxs("p",{className:"text-xs text-gray-400",children:["Showing"," ",e.jsxs("span",{className:"font-mono text-gray-300",children:[c,"-",m]})," ","of"," ",e.jsx("span",{className:"font-mono text-gray-300",children:a})," sessions"]})]}),p&&e.jsxs("div",{className:"flex items-center gap-1",children:[e.jsx("button",{onClick:()=>i(t-1),disabled:t<=1,className:"rounded-lg border border-gray-700 bg-gray-800 px-2.5 py-1.5 text-xs text-gray-400 transition-colors hover:bg-gray-700 hover:text-gray-200 disabled:cursor-not-allowed disabled:opacity-40 disabled:hover:bg-gray-800 disabled:hover:text-gray-400",children:"Previous"}),d.map((o,f)=>o==="ellipsis"?e.jsx("span",{className:"px-1.5 text-xs text-gray-500",children:"..."},`ellipsis-${f}`):e.jsx("button",{onClick:()=>i(o),className:`min-w-[2rem] rounded-lg px-2 py-1.5 text-xs font-mono transition-colors ${o===t?"bg-brand-600 text-white":"border border-gray-700 bg-gray-800 text-gray-400 hover:bg-gray-700 hover:text-gray-200"}`,children:o},o)),e.jsx("button",{onClick:()=>i(t+1),disabled:t>=n,className:"rounded-lg border border-gray-700 bg-gray-800 px-2.5 py-1.5 text-xs text-gray-400 transition-colors hover:bg-gray-700 hover:text-gray-200 disabled:cursor-not-allowed disabled:opacity-40 disabled:hover:bg-gray-800 disabled:hover:text-gray-400",children:"Next"})]})]})}function G(t,n){if(n<=7)return Array.from({length:n},(r,c)=>c+1);const a=new Set;a.add(1),a.add(n);for(let r=t-2;r<=t+2;r++)r>=1&&r<=n&&a.add(r);const l=Array.from(a).sort((r,c)=>r-c),i=[];for(let r=0;r<l.length;r++)r>0&&l[r]-l[r-1]>1&&i.push("ellipsis"),i.push(l[r]);return i}function K(){const t=N(),{page:n,pageSize:a,search:l,status:i,project:r}=S.useSearch(),{storedPageSize:c,setPageSize:m}=F(),p=g.useRef(!1);g.useEffect(()=>{c!==null&&!p.current&&c!==a&&(p.current=!0,t({to:"/sessions",search:u=>({...u,pageSize:c,page:1}),replace:!0}))},[c,a,t]);const{data:d,isLoading:o}=j(k({page:n,pageSize:a,search:l,status:i,project:r})),{data:f=[]}=j(D),y=g.useMemo(()=>{if(!d)return[];const u=new Set(f.map(x=>x.sessionId));return d.sessions.map(x=>({...x,isActive:u.has(x.sessionId)||x.isActive}))},[d,f]);function b(u){t({to:"/sessions",search:x=>({...x,page:u})})}function s(u){m(u),t({to:"/sessions",search:x=>({...x,pageSize:u,page:1})})}if(o)return e.jsx("div",{className:"space-y-3",children:Array.from({length:a}).map((u,x)=>e.jsx("div",{className:"h-28 animate-pulse rounded-xl border border-gray-800 bg-gray-900/50"},x))});const h=d?.totalCount??0,z=d?.totalPages??1,I=d?.projects??[],E=f.length;return e.jsxs("div",{children:[e.jsx(_,{projects:I,activeCount:E}),e.jsx("div",{className:"mt-4 space-y-2",children:y.length===0?e.jsx("div",{className:"py-12 text-center text-sm text-gray-500",children:h===0&&!l&&i==="all"&&!r?"No sessions found in ~/.claude":"No sessions match your filters"}):y.map(u=>e.jsx(B,{session:u},u.sessionId))}),e.jsx("div",{className:"mt-4",children:e.jsx(V,{page:d?.page??n,totalPages:z,totalCount:h,pageSize:a,onPageChange:b,onPageSizeChange:s})})]})}function H(){return e.jsxs("div",{children:[e.jsx("h1",{className:"text-2xl font-bold text-white",children:"Sessions"}),e.jsx("p",{className:"mt-1 text-sm text-gray-400",children:"All Claude Code sessions from ~/.claude"}),e.jsx("div",{className:"mt-6",children:e.jsx(K,{})})]})}export{H as component};