spiracha 1.0.0 → 1.1.1

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 (92) hide show
  1. package/AGENTS.md +31 -1
  2. package/README.md +61 -7
  3. package/apps/ui/AGENTS.md +70 -0
  4. package/apps/ui/README.md +72 -0
  5. package/apps/ui/dist/client/assets/_threadId-CAIeH5mq.js +1 -0
  6. package/apps/ui/dist/client/assets/analytics-CqWZmyV6.js +1 -0
  7. package/apps/ui/dist/client/assets/checkbox-DXM4lkJq.js +1 -0
  8. package/apps/ui/dist/client/assets/data-table-DnPYMPCD.js +4 -0
  9. package/apps/ui/dist/client/assets/delete-confirm-dialog-CcZaRX33.js +11 -0
  10. package/apps/ui/dist/client/assets/download-DOwxk-cG.js +1 -0
  11. package/apps/ui/dist/client/assets/es2015-Bm0kEzx2.js +41 -0
  12. package/apps/ui/dist/client/assets/formatters-C12LmYaa.js +1 -0
  13. package/apps/ui/dist/client/assets/index-DdJ7ahIt.js +22 -0
  14. package/apps/ui/dist/client/assets/input-CEsI7EpI.js +1 -0
  15. package/apps/ui/dist/client/assets/metric-card-9jwBF7rG.js +1 -0
  16. package/apps/ui/dist/client/assets/page-header-Dr_h1CVv.js +1 -0
  17. package/apps/ui/dist/client/assets/projects._project-uyNGnpjH.js +1 -0
  18. package/apps/ui/dist/client/assets/projects._project-zoM8d2nH.js +1 -0
  19. package/apps/ui/dist/client/assets/projects.index-D1CWVN-O.js +1 -0
  20. package/apps/ui/dist/client/assets/projects.index-DukMuny6.js +1 -0
  21. package/apps/ui/dist/client/assets/routes-Gr2Wwh83.js +1 -0
  22. package/apps/ui/dist/client/assets/select-CFim44gT.js +1 -0
  23. package/apps/ui/dist/client/assets/settings-DqhyDxo2.js +1 -0
  24. package/apps/ui/dist/client/assets/styles-CMrP9Jb4.css +1 -0
  25. package/apps/ui/dist/client/assets/threads._threadId-DT75NiBa.js +1 -0
  26. package/apps/ui/dist/client/assets/threads._threadId-Df5VXIuZ.js +7 -0
  27. package/apps/ui/dist/client/favicon.ico +0 -0
  28. package/apps/ui/dist/client/logo192.png +0 -0
  29. package/apps/ui/dist/client/logo512.png +0 -0
  30. package/apps/ui/dist/client/manifest.json +25 -0
  31. package/apps/ui/dist/client/robots.txt +3 -0
  32. package/apps/ui/dist/server/assets/__23tanstack-start-plugin-adapters-BzCA6dXo.js +5 -0
  33. package/apps/ui/dist/server/assets/_tanstack-start-manifest_v-C0V305Nt.js +99 -0
  34. package/apps/ui/dist/server/assets/_threadId-B6SrBR9E.js +6 -0
  35. package/apps/ui/dist/server/assets/analytics-BMxW_bZL.js +139 -0
  36. package/apps/ui/dist/server/assets/button-CmTDnzOn.js +46 -0
  37. package/apps/ui/dist/server/assets/checkbox-C0hovF41.js +19 -0
  38. package/apps/ui/dist/server/assets/codex-queries-CAF6HYiG.js +109 -0
  39. package/apps/ui/dist/server/assets/codex-server-BFZq2Y2O.js +2062 -0
  40. package/apps/ui/dist/server/assets/data-table-Cdct823O.js +189 -0
  41. package/apps/ui/dist/server/assets/delete-confirm-dialog-CWqcTXTF.js +139 -0
  42. package/apps/ui/dist/server/assets/download-C5rkk_Bo.js +289 -0
  43. package/apps/ui/dist/server/assets/formatters-FJaGZgJk.js +91 -0
  44. package/apps/ui/dist/server/assets/input-B4tEzctc.js +46 -0
  45. package/apps/ui/dist/server/assets/loading-panel-DbLdvjtR.js +27 -0
  46. package/apps/ui/dist/server/assets/metric-card-ByEeLu0r.js +23 -0
  47. package/apps/ui/dist/server/assets/model-label-B1NWGc65.js +13 -0
  48. package/apps/ui/dist/server/assets/page-header-CxdZM86z.js +25 -0
  49. package/apps/ui/dist/server/assets/path-transforms-DL2IwtYd.js +31 -0
  50. package/apps/ui/dist/server/assets/projects._project-CJ7l0ynC.js +18 -0
  51. package/apps/ui/dist/server/assets/projects._project-CLSohrBp.js +26 -0
  52. package/apps/ui/dist/server/assets/projects._project-CcJLp_A8.js +337 -0
  53. package/apps/ui/dist/server/assets/projects.index-CaplpeMy.js +26 -0
  54. package/apps/ui/dist/server/assets/projects.index-srtogpuF.js +172 -0
  55. package/apps/ui/dist/server/assets/router-C_w-haH6.js +307 -0
  56. package/apps/ui/dist/server/assets/routes-BhbxvJE7.js +34 -0
  57. package/apps/ui/dist/server/assets/routes-CPe-ppmC.js +169 -0
  58. package/apps/ui/dist/server/assets/select-GW76p-ld.js +76 -0
  59. package/apps/ui/dist/server/assets/settings-MvWDgc1u.js +100 -0
  60. package/apps/ui/dist/server/assets/settings-store-DpEJEQ7M.js +52 -0
  61. package/apps/ui/dist/server/assets/sqlite-error-LZDrnxdd.js +13 -0
  62. package/apps/ui/dist/server/assets/start-HeKLHD9b.js +4 -0
  63. package/apps/ui/dist/server/assets/threads._threadId-BSSK4nkI.js +26 -0
  64. package/apps/ui/dist/server/assets/threads._threadId-Ba7vv6-K.js +18 -0
  65. package/apps/ui/dist/server/assets/threads._threadId-euyNckhj.js +1059 -0
  66. package/apps/ui/dist/server/assets/utils-C_uf36nf.js +8 -0
  67. package/apps/ui/dist/server/server.js +5678 -0
  68. package/package.json +53 -7
  69. package/src/export-chats.ts +4 -18
  70. package/src/lib/claude-exporter.ts +1 -1
  71. package/src/lib/codex-analytics.ts +100 -0
  72. package/src/lib/codex-browser-db.ts +605 -0
  73. package/src/lib/codex-browser-export.ts +429 -0
  74. package/src/lib/codex-browser-types.ts +224 -0
  75. package/src/lib/codex-exporter-cli.ts +6 -1
  76. package/src/lib/codex-exporter-db.ts +19 -20
  77. package/src/lib/codex-exporter-transcript.ts +158 -34
  78. package/src/lib/codex-exporter-types.ts +8 -0
  79. package/src/lib/codex-thread-cache.ts +58 -0
  80. package/src/lib/codex-thread-parser.ts +604 -0
  81. package/src/lib/interactive-cli.ts +10 -25
  82. package/src/lib/model-label.ts +24 -0
  83. package/src/lib/native-open.ts +54 -0
  84. package/src/lib/path-transforms.ts +46 -0
  85. package/src/lib/shared.ts +15 -1
  86. package/src/lib/sqlite-error.ts +14 -0
  87. package/src/lib/sqlite-retry.ts +53 -0
  88. package/src/lib/ui-cache.ts +96 -0
  89. package/src/lib/ui-export-files.ts +77 -0
  90. package/src/mcp-server.ts +1 -0
  91. package/src/spiracha.ts +16 -4
  92. package/src/ui-cli.ts +310 -0
package/AGENTS.md CHANGED
@@ -9,6 +9,7 @@ Main entrypoints:
9
9
  - `bun start` for interactive export mode
10
10
  - `bun run export:claude -- ...` for Claude transcript export
11
11
  - `bun run mcp` for the MCP server used by the local Codex plugin
12
+ - `bun run ui:dev` for the local browser UI
12
13
  - published package goal:
13
14
  - `bunx codex-chats`
14
15
  - `bunx codex-chats ...`
@@ -32,8 +33,10 @@ Main entrypoints:
32
33
 
33
34
  - Use `rtk` as the default wrapper for shell commands that produce meaningful stdout or stderr.
34
35
  - Prefer `bun test` for verification. Run it after non-trivial changes.
36
+ - Run `bun run lint` in addition to `bun test` and `bun run typecheck` before completion.
35
37
  - When changing package/distribution behavior, also run a local packed-tarball smoke test.
36
38
  - When changing the interactive flow, validate it in a real TTY session; piped stdin is not a reliable substitute.
39
+ - When changing the UI package, validate it in a browser after the build or dev server is up.
37
40
  - Use `apply_patch` for manual edits.
38
41
  - Keep output compatibility stable. The exported transcript format is user-facing.
39
42
  - Preserve the behavior of existing flags unless the task explicitly changes CLI semantics.
@@ -55,52 +58,77 @@ Codex exporter modules:
55
58
  Other important files:
56
59
  - `src/lib/claude-exporter.ts`
57
60
  - Claude transcript export pipeline
61
+ - `src/lib/codex-browser-db.ts`
62
+ - project/thread browsing queries, delete flows, dashboard summaries, DB path resolution
63
+ - `src/lib/codex-browser-export.ts`
64
+ - UI-facing thread export download rendering
65
+ - `src/lib/codex-thread-parser.ts`
66
+ - structured Codex event parsing used by analytics and the UI
67
+ - `src/lib/codex-analytics.ts`
68
+ - token/tool analytics derived from thread rows plus parsed transcripts
69
+ - `src/lib/ui-cache.ts`
70
+ - temporary cache under `os.tmpdir()` for transcript and analytics lookups
58
71
  - `src/mcp-server.ts`
59
72
  - MCP server exposing `export_codex_chats` and `export_claude_transcript`
60
73
  - `plugins/codex-chats-export/`
61
74
  - local Codex plugin manifest, skill, and MCP wiring
75
+ - `apps/ui/`
76
+ - TanStack Start browser UI package
62
77
 
63
78
  ## Test Strategy
64
79
 
65
80
  Current tests cover:
66
81
  - exporter end-to-end behavior for Codex and Claude
82
+ - structured Codex transcript parsing
83
+ - project/thread browsing and destructive DB flows
84
+ - analytics aggregation
85
+ - browser-export rendering helpers
67
86
  - Codex CLI parsing helpers
68
87
  - interactive-mode inference helpers
69
88
  - transcript formatting helpers
70
89
  - MCP stdio protocol round-trips using the real server process
90
+ - wrapped UI Vitest suite via `src/ui-package.test.ts`
71
91
  - type-checking via `bun run typecheck`
72
92
 
73
93
  When changing risky areas:
74
94
  - CLI changes: update/add tests in `src/lib/codex-exporter-cli.test.ts`
75
95
  - transcript parsing/rendering: update/add tests in `src/lib/codex-exporter-transcript.test.ts`
96
+ - structured transcript parsing/UI event extraction: update/add tests in `src/lib/codex-thread-parser.test.ts`
76
97
  - DB/filter/target logic: prefer focused unit tests against `src/lib/codex-exporter-db.ts`
98
+ - project/thread browsing, delete semantics, and analytics: update/add tests in `src/lib/codex-browser-db.test.ts` and `src/lib/codex-analytics.test.ts`
77
99
  - MCP contract changes: update `src/mcp-server.test.ts`
100
+ - UI component behavior: update/add Vitest files under `apps/ui/src/**/*.vitest.tsx`
78
101
 
79
102
  ## Common Commands
80
103
 
81
104
  ```bash
82
105
  rtk bun test
106
+ rtk bun run lint
83
107
  rtk bun run typecheck
84
108
  rtk bun run build
109
+ rtk bun run coverage
110
+ rtk bun run smoke:package-ui
85
111
  rtk bun run test:perf
86
112
  rtk bun start
87
113
  rtk bun start -- --help
88
114
  rtk bun start --interactive
89
115
  rtk bun run export:claude -- --help
90
116
  rtk bun run mcp
117
+ rtk bun run ui:dev
91
118
  ```
92
119
 
93
120
  Packed tarball smoke test:
94
121
 
95
122
  ```bash
96
123
  rtk bun pm pack
97
- package_tgz="$PWD/codex-chats-<version>.tgz"
124
+ package_tgz="$PWD/spiracha-<version>.tgz"
98
125
  tmp_dir=$(mktemp -d)
99
126
  cd "$tmp_dir"
100
127
  printf '{"name":"codex-chats-smoke","private":true}\n' > package.json
101
128
  rtk bun add "$package_tgz"
102
129
  rtk bunx codex-chats --help
103
130
  rtk bunx codex-chats-claude --help
131
+ rtk bun run smoke:package-ui
104
132
  ```
105
133
 
106
134
  Example Codex export:
@@ -126,3 +154,5 @@ rtk bun run export:claude -- /path/to/export-dir --output-format txt
126
154
  - Codex MCP exports must be scoped by at least one of `deeplinks`, `project`, or `cwd`.
127
155
  - `txt` output is intentionally real plain text, not Markdown with a `.txt` extension.
128
156
  - The published package is Bun-first. `bin` entrypoints target Bun shebang execution.
157
+ - The UI package runs `vite` through `bun --bun ...` because its server functions depend on Bun-only modules like `bun:sqlite`.
158
+ - `apps/ui/src/routeTree.gen.ts` is generated and should not be manually edited or lint-formatted.
package/README.md CHANGED
@@ -5,7 +5,7 @@
5
5
  [![license](https://img.shields.io/npm/l/spiracha)](LICENSE.md)
6
6
  [![runtime](https://img.shields.io/badge/runtime-Bun-000000?logo=bun)](https://bun.sh)
7
7
 
8
- Export local Codex chats and Claude Code transcripts to Markdown or plain text.
8
+ Export local Codex chats and Claude Code transcripts to Markdown or plain text, and inspect local Codex history through a browser UI.
9
9
 
10
10
  ## Quick Start
11
11
 
@@ -13,18 +13,25 @@ For repo-local development:
13
13
 
14
14
  ```bash
15
15
  bun start
16
+ bun run ui:dev
16
17
  ```
17
18
 
18
19
  Published package usage, once the package is available on npm:
19
20
 
20
21
  ```bash
21
22
  bunx spiracha
23
+ bunx spiracha ui
22
24
  bunx spiracha claude /path/to/session-export.jsonl --output-format txt
23
25
  ```
24
26
 
25
27
  ## Features
26
28
 
27
29
  - Export Codex session transcripts from local `.codex` history
30
+ - Browse local Codex projects and threads in a TanStack Start UI
31
+ - Inspect transcript timelines, tool calls, thread metadata, and raw Codex event context
32
+ - Delete threads or derived projects from the Codex SQLite database after confirmation
33
+ - Download thread exports directly from the UI as Markdown or plain text, with optional optimized mode and tool-call inclusion
34
+ - View dashboard and analytics summaries, including token totals and tool-call frequency
28
35
  - Filter Codex exports by:
29
36
  - exact `cwd`
30
37
  - project basename via `--project`
@@ -44,6 +51,7 @@ For package use after publish, no local install is required:
44
51
 
45
52
  ```bash
46
53
  bunx spiracha --help
54
+ bunx spiracha ui --help
47
55
  ```
48
56
 
49
57
  ## Usage
@@ -81,6 +89,31 @@ Important flags:
81
89
  - `--flat`: write files into a single output folder
82
90
  - `--output-format md|txt`: output as Markdown or plain text
83
91
 
92
+ ### Browser UI
93
+
94
+ ```bash
95
+ bunx spiracha ui
96
+ ```
97
+
98
+ This launches the packaged production UI server, opens your browser by default, and keeps running in the foreground.
99
+ Large download bundles are written to a Spiracha-managed directory under your OS temp folder and served directly by the UI server, so packaged `bunx spiracha ui` exports do not depend on your current working directory.
100
+
101
+ Useful flags:
102
+ - `--port <port>`: bind a specific port, default `3000`
103
+ - `--host <host>`: bind a specific host, default `127.0.0.1`
104
+ - `--db <path>`: override the Codex SQLite path used by the UI
105
+ - `--no-open`: do not open the browser automatically
106
+
107
+ Examples:
108
+
109
+ ```bash
110
+ bunx spiracha ui
111
+ bunx spiracha ui --port 43123 --no-open
112
+ bunx spiracha ui --db ~/.codex/state_5.sqlite
113
+ ```
114
+
115
+ Stop the UI with `Ctrl+C`.
116
+
84
117
  ### Claude exports
85
118
 
86
119
  ```bash
@@ -123,7 +156,7 @@ Exposed tools:
123
156
  - `export_codex_chats`
124
157
  - `export_claude_transcript`
125
158
 
126
- The local plugin lives in [plugins/codex-chats-export](~/workspace/codex-chats/plugins/codex-chats-export) and is registered through [plugins/codex-chats-export/.mcp.json](~/workspace/codex-chats/plugins/codex-chats-export/.mcp.json).
159
+ The local plugin lives in [plugins/codex-chats-export](plugins/codex-chats-export) and is registered through [plugins/codex-chats-export/.mcp.json](plugins/codex-chats-export/.mcp.json).
127
160
 
128
161
  ## Development
129
162
 
@@ -131,8 +164,12 @@ Useful commands:
131
164
 
132
165
  ```bash
133
166
  bun test
167
+ bun run lint
134
168
  bun run typecheck
135
169
  bun run build
170
+ bun run coverage
171
+ bun run ui:dev
172
+ cd apps/ui && bun run test
136
173
  bun run test:perf
137
174
  bun start
138
175
  bun start --interactive
@@ -145,23 +182,35 @@ Packed-tarball smoke test before publishing:
145
182
 
146
183
  ```bash
147
184
  bun pm pack
148
- package_tgz="$PWD/codex-chats-<version>.tgz"
185
+ package_tgz="$PWD/spiracha-<version>.tgz"
149
186
  tmp_dir=$(mktemp -d)
150
187
  cd "$tmp_dir"
151
188
  printf '{"name":"codex-chats-smoke","private":true}\n' > package.json
152
189
  bun add "$package_tgz"
153
- bunx spiracha --help
154
- bunx spiracha claude --help
155
- bunx codex-chats --help
156
- bunx codex-chats-claude --help
190
+ bunx --package "$package_tgz" spiracha --help
191
+ bunx --package "$package_tgz" spiracha ui --help
192
+ bunx --package "$package_tgz" spiracha claude --help
193
+ bunx --package "$package_tgz" codex-chats --help
194
+ bunx --package "$package_tgz" codex-chats-claude --help
157
195
  ```
158
196
 
197
+ For the exact packaged UI launch path, run:
198
+
199
+ ```bash
200
+ bun run smoke:package-ui
201
+ ```
202
+
203
+ This builds the app, packs the tarball, launches `bunx --package <tgz> spiracha ui --no-open` from a clean temp directory, probes the running UI over HTTP, and shuts it down.
204
+
159
205
  ## Project Layout
160
206
 
207
+ - `apps/ui/`: TanStack Start browser app for browsing, analytics, export, and delete flows
161
208
  - `src/export-chats.ts`: Codex CLI wrapper
162
209
  - `src/export-claude.ts`: Claude CLI wrapper
163
210
  - `src/mcp-server.ts`: MCP server entrypoint
164
211
  - `src/lib/codex-exporter-*.ts`: Codex exporter modules
212
+ - `src/lib/codex-browser-*.ts`: shared browser/UI data, analytics, and export helpers
213
+ - `src/lib/codex-thread-*.ts`: structured transcript parsing and caching helpers
165
214
  - `src/lib/claude-exporter.ts`: Claude exporter implementation
166
215
  - `plugins/codex-chats-export/`: local Codex plugin bundle
167
216
 
@@ -175,6 +224,11 @@ The test suite includes:
175
224
  - MCP stdio protocol round-trip tests
176
225
  - local packaging should be smoke-tested with a packed tarball before publishing
177
226
 
227
+ Coverage enforcement:
228
+ - `bun run coverage:root` checks the root Bun unit-test surface at a minimum of 90% line coverage.
229
+ - `bun run coverage:ui` checks the UI unit-test surface at a minimum of 90% line coverage.
230
+ - `bun run coverage` runs both checks.
231
+
178
232
  Run:
179
233
 
180
234
  ```bash
@@ -0,0 +1,70 @@
1
+ # AGENTS.md
2
+
3
+ ## Purpose
4
+
5
+ This package is the local browser UI for Spiracha. It reads the Codex SQLite database and rollout JSONL files through TanStack Start server functions and shared root-package helpers.
6
+
7
+ ## Commands
8
+
9
+ ```bash
10
+ rtk bun run dev
11
+ rtk bun run build
12
+ rtk bun run test
13
+ rtk bun run typecheck
14
+ ```
15
+
16
+ Important:
17
+
18
+ - `dev`, `build`, and `preview` run through `bun --bun ...` on purpose. Do not switch them back to plain `vite` or Node execution, because the server functions import Bun-only modules such as `bun:sqlite`.
19
+
20
+ ## Routing
21
+
22
+ - This package uses TanStack Start with file-based routes in `src/routes/`.
23
+ - `src/routeTree.gen.ts` is generated. Do not edit it manually.
24
+ - If route typing behaves strangely, delete `src/routeTree.gen.ts` and rebuild with `rtk bun run build` to regenerate it cleanly.
25
+
26
+ ## Shared Data Layer
27
+
28
+ The UI depends on root-package helpers via `@spiracha/*` path aliases:
29
+
30
+ - `@spiracha/lib/codex-browser-db`
31
+ - `@spiracha/lib/codex-browser-export`
32
+ - `@spiracha/lib/codex-thread-cache`
33
+ - `@spiracha/lib/codex-analytics`
34
+
35
+ Keep server-only imports inside server functions or route loaders. Do not import Bun-only modules into purely client-side components.
36
+
37
+ ## Data Access Patterns
38
+
39
+ Use the existing layers consistently:
40
+
41
+ - TanStack Start server functions in `src/lib/codex-server.ts`
42
+ - Use for any browser-triggered read/write that needs Bun-only modules, DB access, filesystem access, or shared root-package helpers.
43
+ - TanStack Query query options in `src/lib/codex-queries.ts`
44
+ - Use for client-side fetching, caching, retries, and invalidation of server-function results.
45
+ - Shared root-package helpers under `@spiracha/lib/*`
46
+ - Extend these when the behavior should stay shared between the UI, CLI, and packaged launcher.
47
+ - `settings-store.tsx`
48
+ - Use only for browser-local UI preferences. Do not put server-derived Codex data here.
49
+
50
+ If a feature needs new Codex data, prefer:
51
+ 1. shared root-package helper changes
52
+ 2. server-function exposure in `codex-server.ts`
53
+ 3. TanStack Query wiring in `codex-queries.ts`
54
+ 4. client component consumption
55
+
56
+ ## Testing
57
+
58
+ - UI component tests live under `src/**/*.vitest.tsx`.
59
+ - The root package wraps this Vitest suite from `src/ui-package.test.ts` so `rtk bun test` at the repo root exercises both the Bun suite and the UI suite.
60
+
61
+ ## Design
62
+
63
+ - The UI is intentionally compact, text-first, and operational. Avoid adding decorative cards, large gradients, or chat-bubble styling.
64
+ - Prefer deterministic date formatting to avoid hydration mismatches between server and client.
65
+
66
+ ## Constraints
67
+
68
+ - Do not add a second database.
69
+ - Do not duplicate transcript parsing or export rendering in this package.
70
+ - Use the shared root-package helpers instead.
@@ -0,0 +1,72 @@
1
+ # Spiracha UI
2
+
3
+ The browser UI for browsing local Codex history, inspecting thread details, exporting chats, and analyzing usage patterns.
4
+
5
+ ## Stack
6
+
7
+ - Bun
8
+ - TanStack Start
9
+ - TanStack Query
10
+ - TanStack Table
11
+ - TanStack Virtual
12
+ - Tailwind CSS v4
13
+ - shadcn/ui
14
+ - Biome
15
+
16
+ ## What It Does
17
+
18
+ - lists derived projects from the Codex SQLite database
19
+ - lists threads within a project in chronological order
20
+ - shows thread timelines, tool calls, metadata, and raw event context
21
+ - exports a single thread as Markdown or plain text
22
+ - supports optimized transcript downloads and optional tool-call inclusion
23
+ - deletes a thread or all threads in a derived project from the Codex DB after confirmation
24
+ - shows dashboard and analytics summaries, including token totals and tool-call frequency
25
+
26
+ ## Commands
27
+
28
+ ```bash
29
+ rtk bun run dev
30
+ rtk bun run build
31
+ rtk bun run test
32
+ rtk bun run typecheck
33
+ ```
34
+
35
+ ## Runtime Note
36
+
37
+ This package runs `vite` through `bun --bun ...`.
38
+
39
+ That is required because the TanStack Start server functions import shared root-package modules that use Bun-only features such as `bun:sqlite`.
40
+
41
+ If you change the scripts back to plain `vite` or a Node execution path, the UI server functions will fail at runtime.
42
+
43
+ ## Configuration
44
+
45
+ Runtime configuration is intentionally small:
46
+
47
+ - `SPIRACHA_CODEX_DB`
48
+ - Optional absolute path to the Codex SQLite database.
49
+ - If unset, Spiracha probes the default Codex locations from the shared root package.
50
+ - `SPIRACHA_UI_EXPORT_DIR`
51
+ - Optional directory for temporary browser-download artifacts such as zipped thread exports.
52
+ - If unset, Spiracha uses an OS temp directory under `spiracha-ui-exports`.
53
+
54
+ Export artifacts are served through the UI as attachment downloads from `/__exports/*`. The packaged `spiracha ui` launcher and the local dev server both use the same export-directory contract.
55
+
56
+ ## Routes
57
+
58
+ - `/`
59
+ - dashboard
60
+ - `/projects`
61
+ - project inventory and search
62
+ - `/projects/$project`
63
+ - project thread listing
64
+ - `/threads/$threadId`
65
+ - thread detail, transcript, export, and delete
66
+ - `/analytics`
67
+ - token and tool-call analytics with project filter
68
+
69
+ ## Testing
70
+
71
+ - UI component tests live under `src/**/*.vitest.tsx`.
72
+ - The repo root wraps this Vitest suite from `src/ui-package.test.ts`, so `rtk bun test` at the root covers both the Bun tests and the UI tests.
@@ -0,0 +1 @@
1
+ function e(){return null}export{e as component};
@@ -0,0 +1 @@
1
+ import{c as e,o as t,s as n}from"./formatters-C12LmYaa.js";import{n as r,t as i}from"./data-table-DnPYMPCD.js";import{a,i as o,n as s,r as c,t as l}from"./select-CFim44gT.js";import{dt as u,i as d,mt as f,pt as p,s as m}from"./index-DdJ7ahIt.js";import{t as h}from"./metric-card-9jwBF7rG.js";import{t as g}from"./page-header-Dr_h1CVv.js";var _=f(p()),v=u(),y=r(),b=[y.accessor(`name`,{cell:e=>(0,v.jsx)(`span`,{className:`font-mono text-sm`,children:e.getValue()}),header:`Tool`}),y.accessor(`count`,{cell:e=>(0,v.jsx)(`span`,{className:`font-mono text-sm`,children:t(e.getValue())}),header:`Calls`})],x=r(),S=[x.accessor(`model`,{cell:e=>(0,v.jsx)(`span`,{className:`font-mono text-sm`,children:e.getValue()}),header:`Model`}),x.accessor(`threadCount`,{cell:e=>(0,v.jsx)(`span`,{className:`font-mono text-sm`,children:t(e.getValue())}),header:`Threads`}),x.accessor(`totalTokens`,{cell:e=>(0,v.jsx)(`span`,{className:`font-mono text-sm`,children:n(e.getValue())}),header:`Tokens`})];function C(){let r=e(m()).data,[u,f]=(0,_.useState)(null),p=e(d(u)).data;return(0,v.jsxs)(`div`,{className:`space-y-6`,children:[(0,v.jsx)(g,{actions:(0,v.jsxs)(l,{value:u??`__all__`,onValueChange:e=>{(0,_.startTransition)(()=>{f(e===`__all__`?null:e)})},children:[(0,v.jsx)(o,{className:`h-10 w-full rounded-full border-[var(--border)] bg-[var(--panel)] sm:w-[15rem]`,children:(0,v.jsx)(a,{placeholder:`Filter by project`})}),(0,v.jsxs)(s,{children:[(0,v.jsx)(c,{value:`__all__`,children:`All projects`}),r.map(e=>(0,v.jsx)(c,{value:e.name,children:e.name},e.name))]})]}),eyebrow:`Analytics`,subtitle:`Inspect token load, tool-call distribution, and project-scoped usage patterns to understand where Codex is spending effort.`,title:`Analytics`}),(0,v.jsxs)(`div`,{className:`grid gap-4 md:grid-cols-2 xl:grid-cols-5`,children:[(0,v.jsx)(h,{label:`Threads`,value:t(p.summary.totalThreads)}),(0,v.jsx)(h,{label:`Projects`,value:t(p.summary.totalProjects)}),(0,v.jsx)(h,{label:`Tokens`,value:n(p.summary.totalTokens)}),(0,v.jsx)(h,{label:`Average per thread`,value:n(Math.round(p.summary.averageTokensPerThread))}),(0,v.jsx)(h,{label:`Web search threads`,value:t(p.summary.threadsWithWebSearch)})]}),(0,v.jsxs)(`div`,{className:`grid gap-4 xl:grid-cols-2`,children:[(0,v.jsxs)(`section`,{className:`space-y-4`,children:[(0,v.jsxs)(`div`,{children:[(0,v.jsx)(`h3`,{className:`font-semibold text-sm`,children:`Most frequent tool calls`}),(0,v.jsx)(`p`,{className:`mt-1 text-[var(--muted-foreground)] text-sm`,children:`Useful for future prompt and tool optimization work.`})]}),(0,v.jsx)(i,{columns:b,data:p.toolUsage,emptyMessage:`No tool calls recorded.`})]}),(0,v.jsxs)(`section`,{className:`space-y-4`,children:[(0,v.jsxs)(`div`,{children:[(0,v.jsx)(`h3`,{className:`font-semibold text-sm`,children:`Model token breakdown`}),(0,v.jsx)(`p`,{className:`mt-1 text-[var(--muted-foreground)] text-sm`,children:`Compare model usage and token concentration within the current project scope.`})]}),(0,v.jsx)(i,{columns:S,data:p.modelsByTokens,emptyMessage:`No model usage recorded.`})]})]})]})}export{C as component};
@@ -0,0 +1 @@
1
+ import{A as e,B as t,D as n,H as r,M as i,O as a,P as o,S as s,W as c,dt as l,mt as u,pt as d}from"./index-DdJ7ahIt.js";var f=c(`check`,[[`path`,{d:`M20 6 9 17l-5-5`,key:`1gmf2c`}]]),p=u(d(),1);function m(e){let t=p.useRef({value:e,previous:e});return p.useMemo(()=>(t.current.value!==e&&(t.current.previous=t.current.value,t.current.value=e),t.current.previous),[e])}var h=l(),g=`Checkbox`,[_,v]=i(g),[y,b]=_(g);function x(e){let{__scopeCheckbox:t,checked:n,children:r,defaultChecked:i,disabled:o,form:s,name:c,onCheckedChange:l,required:u,value:d=`on`,internal_do_not_use_render:f}=e,[m,_]=a({prop:n,defaultProp:i??!1,onChange:l,caller:g}),[v,b]=p.useState(null),[x,S]=p.useState(null),C=p.useRef(!1),w=v?!!s||!!v.closest(`form`):!0,T={checked:m,disabled:o,setChecked:_,control:v,setControl:b,name:c,form:s,value:d,hasConsumerStoppedPropagationRef:C,required:u,defaultChecked:A(i)?!1:i,isFormControl:w,bubbleInput:x,setBubbleInput:S};return(0,h.jsx)(y,{scope:t,...T,children:k(f)?f(T):r})}var S=`CheckboxTrigger`,C=p.forwardRef(({__scopeCheckbox:n,onKeyDown:r,onClick:i,...a},s)=>{let{control:c,value:l,disabled:u,checked:d,required:f,setControl:m,setChecked:g,hasConsumerStoppedPropagationRef:_,isFormControl:v,bubbleInput:y}=b(S,n),x=t(s,m),C=p.useRef(d);return p.useEffect(()=>{let e=c?.form;if(e){let t=()=>g(C.current);return e.addEventListener(`reset`,t),()=>e.removeEventListener(`reset`,t)}},[c,g]),(0,h.jsx)(o.button,{type:`button`,role:`checkbox`,"aria-checked":A(d)?`mixed`:d,"aria-required":f,"data-state":j(d),"data-disabled":u?``:void 0,disabled:u,value:l,...a,ref:x,onKeyDown:e(r,e=>{e.key===`Enter`&&e.preventDefault()}),onClick:e(i,e=>{g(e=>A(e)?!0:!e),y&&v&&(_.current=e.isPropagationStopped(),_.current||e.stopPropagation())})})});C.displayName=S;var w=p.forwardRef((e,t)=>{let{__scopeCheckbox:n,name:r,checked:i,defaultChecked:a,required:o,disabled:s,value:c,onCheckedChange:l,form:u,...d}=e;return(0,h.jsx)(x,{__scopeCheckbox:n,checked:i,defaultChecked:a,disabled:s,required:o,onCheckedChange:l,name:r,form:u,value:c,internal_do_not_use_render:({isFormControl:e})=>(0,h.jsxs)(h.Fragment,{children:[(0,h.jsx)(C,{...d,ref:t,__scopeCheckbox:n}),e&&(0,h.jsx)(O,{__scopeCheckbox:n})]})})});w.displayName=g;var T=`CheckboxIndicator`,E=p.forwardRef((e,t)=>{let{__scopeCheckbox:r,forceMount:i,...a}=e,s=b(T,r);return(0,h.jsx)(n,{present:i||A(s.checked)||s.checked===!0,children:(0,h.jsx)(o.span,{"data-state":j(s.checked),"data-disabled":s.disabled?``:void 0,...a,ref:t,style:{pointerEvents:`none`,...e.style}})})});E.displayName=T;var D=`CheckboxBubbleInput`,O=p.forwardRef(({__scopeCheckbox:e,...n},r)=>{let{control:i,hasConsumerStoppedPropagationRef:a,checked:c,defaultChecked:l,required:u,disabled:d,name:f,value:g,form:_,bubbleInput:v,setBubbleInput:y}=b(D,e),x=t(r,y),S=m(c),C=s(i);p.useEffect(()=>{let e=v;if(!e)return;let t=window.HTMLInputElement.prototype,n=Object.getOwnPropertyDescriptor(t,`checked`).set,r=!a.current;if(S!==c&&n){let t=new Event(`click`,{bubbles:r});e.indeterminate=A(c),n.call(e,A(c)?!1:c),e.dispatchEvent(t)}},[v,S,c,a]);let w=p.useRef(A(c)?!1:c);return(0,h.jsx)(o.input,{type:`checkbox`,"aria-hidden":!0,defaultChecked:l??w.current,required:u,disabled:d,name:f,value:g,form:_,...n,tabIndex:-1,ref:x,style:{...n.style,...C,position:`absolute`,pointerEvents:`none`,opacity:0,margin:0,transform:`translateX(-100%)`}})});O.displayName=D;function k(e){return typeof e==`function`}function A(e){return e===`indeterminate`}function j(e){return A(e)?`indeterminate`:e?`checked`:`unchecked`}function M({className:e,...t}){return(0,h.jsx)(w,{"data-slot":`checkbox`,className:r(`peer size-4 shrink-0 rounded-[4px] border border-input shadow-xs outline-none transition-shadow focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 data-[state=checked]:border-primary data-[state=checked]:bg-primary data-[state=checked]:text-white dark:bg-input/30 dark:data-[state=checked]:bg-primary dark:data-[state=checked]:text-primary-foreground dark:aria-invalid:ring-destructive/40`,e),...t,children:(0,h.jsx)(E,{"data-slot":`checkbox-indicator`,className:`grid place-content-center text-current transition-none`,children:(0,h.jsx)(f,{className:`size-3.5`})})})}export{m as n,f as r,M as t};
@@ -0,0 +1,4 @@
1
+ import{t as e}from"./checkbox-DXM4lkJq.js";import{H as t,W as n,dt as r,mt as i,pt as a}from"./index-DdJ7ahIt.js";var o=n(`arrow-down-up`,[[`path`,{d:`m3 16 4 4 4-4`,key:`1co6wj`}],[`path`,{d:`M7 20V4`,key:`1yoxec`}],[`path`,{d:`m21 8-4-4-4 4`,key:`1c9v7m`}],[`path`,{d:`M17 4v16`,key:`7dpous`}]]),s=i(a(),1);function c(){return{accessor:(e,t)=>typeof e==`function`?{...t,accessorFn:e}:{...t,accessorKey:e},display:e=>e,group:e=>e}}function l(e,t){return typeof e==`function`?e(t):e}function u(e,t){return n=>{t.setState(t=>({...t,[e]:l(n,t[e])}))}}function d(e){return e instanceof Function}function f(e){return Array.isArray(e)&&e.every(e=>typeof e==`number`)}function p(e,t){let n=[],r=e=>{e.forEach(e=>{n.push(e);let i=t(e);i!=null&&i.length&&r(i)})};return r(e),n}function m(e,t,n){let r=[],i;return a=>{let o;n.key&&n.debug&&(o=Date.now());let s=e(a);if(!(s.length!==r.length||s.some((e,t)=>r[t]!==e)))return i;r=s;let c;if(n.key&&n.debug&&(c=Date.now()),i=t(...s),n==null||n.onChange==null||n.onChange(i),n.key&&n.debug&&n!=null&&n.debug()){let e=Math.round((Date.now()-o)*100)/100,t=Math.round((Date.now()-c)*100)/100,r=t/16,i=(e,t)=>{for(e=String(e);e.length<t;)e=` `+e;return e};console.info(`%c⏱ ${i(t,5)} /${i(e,5)} ms`,`
2
+ font-size: .6rem;
3
+ font-weight: bold;
4
+ color: hsl(${Math.max(0,Math.min(120-120*r,120))}deg 100% 31%);`,n?.key)}return i}}function h(e,t,n,r){return{debug:()=>e?.debugAll??e[t],key:!1,onChange:r}}function g(e,t,n,r){let i={id:`${t.id}_${n.id}`,row:t,column:n,getValue:()=>t.getValue(r),renderValue:()=>i.getValue()??e.options.renderFallbackValue,getContext:m(()=>[e,n,t,i],(e,t,n,r)=>({table:e,column:t,row:n,cell:r,getValue:r.getValue,renderValue:r.renderValue}),h(e.options,`debugCells`,`cell.getContext`))};return e._features.forEach(r=>{r.createCell==null||r.createCell(i,n,t,e)},{}),i}function _(e,t,n,r){let i={...e._getDefaultColumnDef(),...t},a=i.accessorKey,o=i.id??(a?typeof String.prototype.replaceAll==`function`?a.replaceAll(`.`,`_`):a.replace(/\./g,`_`):void 0)??(typeof i.header==`string`?i.header:void 0),s;if(i.accessorFn?s=i.accessorFn:a&&(s=a.includes(`.`)?e=>{let t=e;for(let e of a.split(`.`))t=t?.[e];return t}:e=>e[i.accessorKey]),!o)throw Error();let c={id:`${String(o)}`,accessorFn:s,parent:r,depth:n,columnDef:i,columns:[],getFlatColumns:m(()=>[!0],()=>[c,...c.columns?.flatMap(e=>e.getFlatColumns())],h(e.options,`debugColumns`,`column.getFlatColumns`)),getLeafColumns:m(()=>[e._getOrderColumnsFn()],e=>{var t;return(t=c.columns)!=null&&t.length?e(c.columns.flatMap(e=>e.getLeafColumns())):[c]},h(e.options,`debugColumns`,`column.getLeafColumns`))};for(let t of e._features)t.createColumn==null||t.createColumn(c,e);return c}var v=`debugHeaders`;function y(e,t,n){let r={id:n.id??t.id,column:t,index:n.index,isPlaceholder:!!n.isPlaceholder,placeholderId:n.placeholderId,depth:n.depth,subHeaders:[],colSpan:0,rowSpan:0,headerGroup:null,getLeafHeaders:()=>{let e=[],t=n=>{n.subHeaders&&n.subHeaders.length&&n.subHeaders.map(t),e.push(n)};return t(r),e},getContext:()=>({table:e,header:r,column:t})};return e._features.forEach(t=>{t.createHeader==null||t.createHeader(r,e)}),r}var b={createTable:e=>{e.getHeaderGroups=m(()=>[e.getAllColumns(),e.getVisibleLeafColumns(),e.getState().columnPinning.left,e.getState().columnPinning.right],(t,n,r,i)=>{let a=r?.map(e=>n.find(t=>t.id===e)).filter(Boolean)??[],o=i?.map(e=>n.find(t=>t.id===e)).filter(Boolean)??[],s=n.filter(e=>!(r!=null&&r.includes(e.id))&&!(i!=null&&i.includes(e.id)));return x(t,[...a,...s,...o],e)},h(e.options,v,`getHeaderGroups`)),e.getCenterHeaderGroups=m(()=>[e.getAllColumns(),e.getVisibleLeafColumns(),e.getState().columnPinning.left,e.getState().columnPinning.right],(t,n,r,i)=>(n=n.filter(e=>!(r!=null&&r.includes(e.id))&&!(i!=null&&i.includes(e.id))),x(t,n,e,`center`)),h(e.options,v,`getCenterHeaderGroups`)),e.getLeftHeaderGroups=m(()=>[e.getAllColumns(),e.getVisibleLeafColumns(),e.getState().columnPinning.left],(t,n,r)=>x(t,r?.map(e=>n.find(t=>t.id===e)).filter(Boolean)??[],e,`left`),h(e.options,v,`getLeftHeaderGroups`)),e.getRightHeaderGroups=m(()=>[e.getAllColumns(),e.getVisibleLeafColumns(),e.getState().columnPinning.right],(t,n,r)=>x(t,r?.map(e=>n.find(t=>t.id===e)).filter(Boolean)??[],e,`right`),h(e.options,v,`getRightHeaderGroups`)),e.getFooterGroups=m(()=>[e.getHeaderGroups()],e=>[...e].reverse(),h(e.options,v,`getFooterGroups`)),e.getLeftFooterGroups=m(()=>[e.getLeftHeaderGroups()],e=>[...e].reverse(),h(e.options,v,`getLeftFooterGroups`)),e.getCenterFooterGroups=m(()=>[e.getCenterHeaderGroups()],e=>[...e].reverse(),h(e.options,v,`getCenterFooterGroups`)),e.getRightFooterGroups=m(()=>[e.getRightHeaderGroups()],e=>[...e].reverse(),h(e.options,v,`getRightFooterGroups`)),e.getFlatHeaders=m(()=>[e.getHeaderGroups()],e=>e.map(e=>e.headers).flat(),h(e.options,v,`getFlatHeaders`)),e.getLeftFlatHeaders=m(()=>[e.getLeftHeaderGroups()],e=>e.map(e=>e.headers).flat(),h(e.options,v,`getLeftFlatHeaders`)),e.getCenterFlatHeaders=m(()=>[e.getCenterHeaderGroups()],e=>e.map(e=>e.headers).flat(),h(e.options,v,`getCenterFlatHeaders`)),e.getRightFlatHeaders=m(()=>[e.getRightHeaderGroups()],e=>e.map(e=>e.headers).flat(),h(e.options,v,`getRightFlatHeaders`)),e.getCenterLeafHeaders=m(()=>[e.getCenterFlatHeaders()],e=>e.filter(e=>{var t;return!((t=e.subHeaders)!=null&&t.length)}),h(e.options,v,`getCenterLeafHeaders`)),e.getLeftLeafHeaders=m(()=>[e.getLeftFlatHeaders()],e=>e.filter(e=>{var t;return!((t=e.subHeaders)!=null&&t.length)}),h(e.options,v,`getLeftLeafHeaders`)),e.getRightLeafHeaders=m(()=>[e.getRightFlatHeaders()],e=>e.filter(e=>{var t;return!((t=e.subHeaders)!=null&&t.length)}),h(e.options,v,`getRightLeafHeaders`)),e.getLeafHeaders=m(()=>[e.getLeftHeaderGroups(),e.getCenterHeaderGroups(),e.getRightHeaderGroups()],(e,t,n)=>[...e[0]?.headers??[],...t[0]?.headers??[],...n[0]?.headers??[]].map(e=>e.getLeafHeaders()).flat(),h(e.options,v,`getLeafHeaders`))}};function x(e,t,n,r){let i=0,a=function(e,t){t===void 0&&(t=1),i=Math.max(i,t),e.filter(e=>e.getIsVisible()).forEach(e=>{var n;(n=e.columns)!=null&&n.length&&a(e.columns,t+1)},0)};a(e);let o=[],s=(e,t)=>{let i={depth:t,id:[r,`${t}`].filter(Boolean).join(`_`),headers:[]},a=[];e.forEach(e=>{let o=[...a].reverse()[0],s=e.column.depth===i.depth,c,l=!1;if(s&&e.column.parent?c=e.column.parent:(c=e.column,l=!0),o&&o?.column===c)o.subHeaders.push(e);else{let i=y(n,c,{id:[r,t,c.id,e?.id].filter(Boolean).join(`_`),isPlaceholder:l,placeholderId:l?`${a.filter(e=>e.column===c).length}`:void 0,depth:t,index:a.length});i.subHeaders.push(e),a.push(i)}i.headers.push(e),e.headerGroup=i}),o.push(i),t>0&&s(a,t-1)};s(t.map((e,t)=>y(n,e,{depth:i,index:t})),i-1),o.reverse();let c=e=>e.filter(e=>e.column.getIsVisible()).map(e=>{let t=0,n=0,r=[0];e.subHeaders&&e.subHeaders.length?(r=[],c(e.subHeaders).forEach(e=>{let{colSpan:n,rowSpan:i}=e;t+=n,r.push(i)})):t=1;let i=Math.min(...r);return n+=i,e.colSpan=t,e.rowSpan=n,{colSpan:t,rowSpan:n}});return c(o[0]?.headers??[]),o}var S=(e,t,n,r,i,a,o)=>{let s={id:t,index:r,original:n,depth:i,parentId:o,_valuesCache:{},_uniqueValuesCache:{},getValue:t=>{if(s._valuesCache.hasOwnProperty(t))return s._valuesCache[t];let n=e.getColumn(t);if(n!=null&&n.accessorFn)return s._valuesCache[t]=n.accessorFn(s.original,r),s._valuesCache[t]},getUniqueValues:t=>{if(s._uniqueValuesCache.hasOwnProperty(t))return s._uniqueValuesCache[t];let n=e.getColumn(t);if(n!=null&&n.accessorFn)return n.columnDef.getUniqueValues?(s._uniqueValuesCache[t]=n.columnDef.getUniqueValues(s.original,r),s._uniqueValuesCache[t]):(s._uniqueValuesCache[t]=[s.getValue(t)],s._uniqueValuesCache[t])},renderValue:t=>s.getValue(t)??e.options.renderFallbackValue,subRows:a??[],getLeafRows:()=>p(s.subRows,e=>e.subRows),getParentRow:()=>s.parentId?e.getRow(s.parentId,!0):void 0,getParentRows:()=>{let e=[],t=s;for(;;){let n=t.getParentRow();if(!n)break;e.push(n),t=n}return e.reverse()},getAllCells:m(()=>[e.getAllLeafColumns()],t=>t.map(t=>g(e,s,t,t.id)),h(e.options,`debugRows`,`getAllCells`)),_getAllCellsByColumnId:m(()=>[s.getAllCells()],e=>e.reduce((e,t)=>(e[t.column.id]=t,e),{}),h(e.options,`debugRows`,`getAllCellsByColumnId`))};for(let t=0;t<e._features.length;t++){let n=e._features[t];n==null||n.createRow==null||n.createRow(s,e)}return s},ee={createColumn:(e,t)=>{e._getFacetedRowModel=t.options.getFacetedRowModel&&t.options.getFacetedRowModel(t,e.id),e.getFacetedRowModel=()=>e._getFacetedRowModel?e._getFacetedRowModel():t.getPreFilteredRowModel(),e._getFacetedUniqueValues=t.options.getFacetedUniqueValues&&t.options.getFacetedUniqueValues(t,e.id),e.getFacetedUniqueValues=()=>e._getFacetedUniqueValues?e._getFacetedUniqueValues():new Map,e._getFacetedMinMaxValues=t.options.getFacetedMinMaxValues&&t.options.getFacetedMinMaxValues(t,e.id),e.getFacetedMinMaxValues=()=>{if(e._getFacetedMinMaxValues)return e._getFacetedMinMaxValues()}}},C=(e,t,n)=>{var r,i;let a=n==null||(r=n.toString())==null?void 0:r.toLowerCase();return!!(!((i=e.getValue(t))==null||(i=i.toString())==null||(i=i.toLowerCase())==null)&&i.includes(a))};C.autoRemove=e=>A(e);var w=(e,t,n)=>{var r;return!!(!((r=e.getValue(t))==null||(r=r.toString())==null)&&r.includes(n))};w.autoRemove=e=>A(e);var T=(e,t,n)=>{var r;return((r=e.getValue(t))==null||(r=r.toString())==null?void 0:r.toLowerCase())===n?.toLowerCase()};T.autoRemove=e=>A(e);var E=(e,t,n)=>e.getValue(t)?.includes(n);E.autoRemove=e=>A(e);var te=(e,t,n)=>!n.some(n=>{var r;return!((r=e.getValue(t))!=null&&r.includes(n))});te.autoRemove=e=>A(e)||!(e!=null&&e.length);var ne=(e,t,n)=>n.some(n=>e.getValue(t)?.includes(n));ne.autoRemove=e=>A(e)||!(e!=null&&e.length);var re=(e,t,n)=>e.getValue(t)===n;re.autoRemove=e=>A(e);var D=(e,t,n)=>e.getValue(t)==n;D.autoRemove=e=>A(e);var O=(e,t,n)=>{let[r,i]=n,a=e.getValue(t);return a>=r&&a<=i};O.resolveFilterValue=e=>{let[t,n]=e,r=typeof t==`number`?t:parseFloat(t),i=typeof n==`number`?n:parseFloat(n),a=t===null||Number.isNaN(r)?-1/0:r,o=n===null||Number.isNaN(i)?1/0:i;if(a>o){let e=a;a=o,o=e}return[a,o]},O.autoRemove=e=>A(e)||A(e[0])&&A(e[1]);var k={includesString:C,includesStringSensitive:w,equalsString:T,arrIncludes:E,arrIncludesAll:te,arrIncludesSome:ne,equals:re,weakEquals:D,inNumberRange:O};function A(e){return e==null||e===``}var ie={getDefaultColumnDef:()=>({filterFn:`auto`}),getInitialState:e=>({columnFilters:[],...e}),getDefaultOptions:e=>({onColumnFiltersChange:u(`columnFilters`,e),filterFromLeafRows:!1,maxLeafRowFilterDepth:100}),createColumn:(e,t)=>{e.getAutoFilterFn=()=>{let n=t.getCoreRowModel().flatRows[0]?.getValue(e.id);return typeof n==`string`?k.includesString:typeof n==`number`?k.inNumberRange:typeof n==`boolean`||typeof n==`object`&&n?k.equals:Array.isArray(n)?k.arrIncludes:k.weakEquals},e.getFilterFn=()=>d(e.columnDef.filterFn)?e.columnDef.filterFn:e.columnDef.filterFn===`auto`?e.getAutoFilterFn():t.options.filterFns?.[e.columnDef.filterFn]??k[e.columnDef.filterFn],e.getCanFilter=()=>(e.columnDef.enableColumnFilter??!0)&&(t.options.enableColumnFilters??!0)&&(t.options.enableFilters??!0)&&!!e.accessorFn,e.getIsFiltered=()=>e.getFilterIndex()>-1,e.getFilterValue=()=>{var n;return(n=t.getState().columnFilters)==null||(n=n.find(t=>t.id===e.id))==null?void 0:n.value},e.getFilterIndex=()=>t.getState().columnFilters?.findIndex(t=>t.id===e.id)??-1,e.setFilterValue=n=>{t.setColumnFilters(t=>{let r=e.getFilterFn(),i=t?.find(t=>t.id===e.id),a=l(n,i?i.value:void 0);if(j(r,a,e))return t?.filter(t=>t.id!==e.id)??[];let o={id:e.id,value:a};return i?t?.map(t=>t.id===e.id?o:t)??[]:t!=null&&t.length?[...t,o]:[o]})}},createRow:(e,t)=>{e.columnFilters={},e.columnFiltersMeta={}},createTable:e=>{e.setColumnFilters=t=>{let n=e.getAllLeafColumns();e.options.onColumnFiltersChange==null||e.options.onColumnFiltersChange(e=>l(t,e)?.filter(e=>{let t=n.find(t=>t.id===e.id);return!(t&&j(t.getFilterFn(),e.value,t))}))},e.resetColumnFilters=t=>{e.setColumnFilters(t?[]:e.initialState?.columnFilters??[])},e.getPreFilteredRowModel=()=>e.getCoreRowModel(),e.getFilteredRowModel=()=>(!e._getFilteredRowModel&&e.options.getFilteredRowModel&&(e._getFilteredRowModel=e.options.getFilteredRowModel(e)),e.options.manualFiltering||!e._getFilteredRowModel?e.getPreFilteredRowModel():e._getFilteredRowModel())}};function j(e,t,n){return(e&&e.autoRemove?e.autoRemove(t,n):!1)||t===void 0||typeof t==`string`&&!t}var M={sum:(e,t,n)=>n.reduce((t,n)=>{let r=n.getValue(e);return t+(typeof r==`number`?r:0)},0),min:(e,t,n)=>{let r;return n.forEach(t=>{let n=t.getValue(e);n!=null&&(r>n||r===void 0&&n>=n)&&(r=n)}),r},max:(e,t,n)=>{let r;return n.forEach(t=>{let n=t.getValue(e);n!=null&&(r<n||r===void 0&&n>=n)&&(r=n)}),r},extent:(e,t,n)=>{let r,i;return n.forEach(t=>{let n=t.getValue(e);n!=null&&(r===void 0?n>=n&&(r=i=n):(r>n&&(r=n),i<n&&(i=n)))}),[r,i]},mean:(e,t)=>{let n=0,r=0;if(t.forEach(t=>{let i=t.getValue(e);i!=null&&(i=+i)>=i&&(++n,r+=i)}),n)return r/n},median:(e,t)=>{if(!t.length)return;let n=t.map(t=>t.getValue(e));if(!f(n))return;if(n.length===1)return n[0];let r=Math.floor(n.length/2),i=n.sort((e,t)=>e-t);return n.length%2==0?(i[r-1]+i[r])/2:i[r]},unique:(e,t)=>Array.from(new Set(t.map(t=>t.getValue(e))).values()),uniqueCount:(e,t)=>new Set(t.map(t=>t.getValue(e))).size,count:(e,t)=>t.length},ae={getDefaultColumnDef:()=>({aggregatedCell:e=>{var t;return((t=e.getValue())==null||t.toString==null?void 0:t.toString())??null},aggregationFn:`auto`}),getInitialState:e=>({grouping:[],...e}),getDefaultOptions:e=>({onGroupingChange:u(`grouping`,e),groupedColumnMode:`reorder`}),createColumn:(e,t)=>{e.toggleGrouping=()=>{t.setGrouping(t=>t!=null&&t.includes(e.id)?t.filter(t=>t!==e.id):[...t??[],e.id])},e.getCanGroup=()=>(e.columnDef.enableGrouping??!0)&&(t.options.enableGrouping??!0)&&(!!e.accessorFn||!!e.columnDef.getGroupingValue),e.getIsGrouped=()=>t.getState().grouping?.includes(e.id),e.getGroupedIndex=()=>t.getState().grouping?.indexOf(e.id),e.getToggleGroupingHandler=()=>{let t=e.getCanGroup();return()=>{t&&e.toggleGrouping()}},e.getAutoAggregationFn=()=>{let n=t.getCoreRowModel().flatRows[0]?.getValue(e.id);if(typeof n==`number`)return M.sum;if(Object.prototype.toString.call(n)===`[object Date]`)return M.extent},e.getAggregationFn=()=>{if(!e)throw Error();return d(e.columnDef.aggregationFn)?e.columnDef.aggregationFn:e.columnDef.aggregationFn===`auto`?e.getAutoAggregationFn():t.options.aggregationFns?.[e.columnDef.aggregationFn]??M[e.columnDef.aggregationFn]}},createTable:e=>{e.setGrouping=t=>e.options.onGroupingChange==null?void 0:e.options.onGroupingChange(t),e.resetGrouping=t=>{e.setGrouping(t?[]:e.initialState?.grouping??[])},e.getPreGroupedRowModel=()=>e.getFilteredRowModel(),e.getGroupedRowModel=()=>(!e._getGroupedRowModel&&e.options.getGroupedRowModel&&(e._getGroupedRowModel=e.options.getGroupedRowModel(e)),e.options.manualGrouping||!e._getGroupedRowModel?e.getPreGroupedRowModel():e._getGroupedRowModel())},createRow:(e,t)=>{e.getIsGrouped=()=>!!e.groupingColumnId,e.getGroupingValue=n=>{if(e._groupingValuesCache.hasOwnProperty(n))return e._groupingValuesCache[n];let r=t.getColumn(n);return r!=null&&r.columnDef.getGroupingValue?(e._groupingValuesCache[n]=r.columnDef.getGroupingValue(e.original),e._groupingValuesCache[n]):e.getValue(n)},e._groupingValuesCache={}},createCell:(e,t,n,r)=>{e.getIsGrouped=()=>t.getIsGrouped()&&t.id===n.groupingColumnId,e.getIsPlaceholder=()=>!e.getIsGrouped()&&t.getIsGrouped(),e.getIsAggregated=()=>{var t;return!e.getIsGrouped()&&!e.getIsPlaceholder()&&!!((t=n.subRows)!=null&&t.length)}}};function oe(e,t,n){if(!(t!=null&&t.length)||!n)return e;let r=e.filter(e=>!t.includes(e.id));return n===`remove`?r:[...t.map(t=>e.find(e=>e.id===t)).filter(Boolean),...r]}var se={getInitialState:e=>({columnOrder:[],...e}),getDefaultOptions:e=>({onColumnOrderChange:u(`columnOrder`,e)}),createColumn:(e,t)=>{e.getIndex=m(e=>[R(t,e)],t=>t.findIndex(t=>t.id===e.id),h(t.options,`debugColumns`,`getIndex`)),e.getIsFirstColumn=n=>R(t,n)[0]?.id===e.id,e.getIsLastColumn=n=>{let r=R(t,n);return r[r.length-1]?.id===e.id}},createTable:e=>{e.setColumnOrder=t=>e.options.onColumnOrderChange==null?void 0:e.options.onColumnOrderChange(t),e.resetColumnOrder=t=>{e.setColumnOrder(t?[]:e.initialState.columnOrder??[])},e._getOrderColumnsFn=m(()=>[e.getState().columnOrder,e.getState().grouping,e.options.groupedColumnMode],(e,t,n)=>r=>{let i=[];if(!(e!=null&&e.length))i=r;else{let t=[...e],n=[...r];for(;n.length&&t.length;){let e=t.shift(),r=n.findIndex(t=>t.id===e);r>-1&&i.push(n.splice(r,1)[0])}i=[...i,...n]}return oe(i,t,n)},h(e.options,`debugTable`,`_getOrderColumnsFn`))}},N=()=>({left:[],right:[]}),ce={getInitialState:e=>({columnPinning:N(),...e}),getDefaultOptions:e=>({onColumnPinningChange:u(`columnPinning`,e)}),createColumn:(e,t)=>{e.pin=n=>{let r=e.getLeafColumns().map(e=>e.id).filter(Boolean);t.setColumnPinning(e=>n===`right`?{left:(e?.left??[]).filter(e=>!(r!=null&&r.includes(e))),right:[...(e?.right??[]).filter(e=>!(r!=null&&r.includes(e))),...r]}:n===`left`?{left:[...(e?.left??[]).filter(e=>!(r!=null&&r.includes(e))),...r],right:(e?.right??[]).filter(e=>!(r!=null&&r.includes(e)))}:{left:(e?.left??[]).filter(e=>!(r!=null&&r.includes(e))),right:(e?.right??[]).filter(e=>!(r!=null&&r.includes(e)))})},e.getCanPin=()=>e.getLeafColumns().some(e=>(e.columnDef.enablePinning??!0)&&(t.options.enableColumnPinning??t.options.enablePinning??!0)),e.getIsPinned=()=>{let n=e.getLeafColumns().map(e=>e.id),{left:r,right:i}=t.getState().columnPinning,a=n.some(e=>r?.includes(e)),o=n.some(e=>i?.includes(e));return a?`left`:o?`right`:!1},e.getPinnedIndex=()=>{var n;let r=e.getIsPinned();return r?((n=t.getState().columnPinning)==null||(n=n[r])==null?void 0:n.indexOf(e.id))??-1:0}},createRow:(e,t)=>{e.getCenterVisibleCells=m(()=>[e._getAllVisibleCells(),t.getState().columnPinning.left,t.getState().columnPinning.right],(e,t,n)=>{let r=[...t??[],...n??[]];return e.filter(e=>!r.includes(e.column.id))},h(t.options,`debugRows`,`getCenterVisibleCells`)),e.getLeftVisibleCells=m(()=>[e._getAllVisibleCells(),t.getState().columnPinning.left],(e,t)=>(t??[]).map(t=>e.find(e=>e.column.id===t)).filter(Boolean).map(e=>({...e,position:`left`})),h(t.options,`debugRows`,`getLeftVisibleCells`)),e.getRightVisibleCells=m(()=>[e._getAllVisibleCells(),t.getState().columnPinning.right],(e,t)=>(t??[]).map(t=>e.find(e=>e.column.id===t)).filter(Boolean).map(e=>({...e,position:`right`})),h(t.options,`debugRows`,`getRightVisibleCells`))},createTable:e=>{e.setColumnPinning=t=>e.options.onColumnPinningChange==null?void 0:e.options.onColumnPinningChange(t),e.resetColumnPinning=t=>e.setColumnPinning(t?N():e.initialState?.columnPinning??N()),e.getIsSomeColumnsPinned=t=>{let n=e.getState().columnPinning;return t?!!n[t]?.length:!!(n.left?.length||n.right?.length)},e.getLeftLeafColumns=m(()=>[e.getAllLeafColumns(),e.getState().columnPinning.left],(e,t)=>(t??[]).map(t=>e.find(e=>e.id===t)).filter(Boolean),h(e.options,`debugColumns`,`getLeftLeafColumns`)),e.getRightLeafColumns=m(()=>[e.getAllLeafColumns(),e.getState().columnPinning.right],(e,t)=>(t??[]).map(t=>e.find(e=>e.id===t)).filter(Boolean),h(e.options,`debugColumns`,`getRightLeafColumns`)),e.getCenterLeafColumns=m(()=>[e.getAllLeafColumns(),e.getState().columnPinning.left,e.getState().columnPinning.right],(e,t,n)=>{let r=[...t??[],...n??[]];return e.filter(e=>!r.includes(e.id))},h(e.options,`debugColumns`,`getCenterLeafColumns`))}};function le(e){return e||(typeof document<`u`?document:null)}var P={size:150,minSize:20,maxSize:2**53-1},F=()=>({startOffset:null,startSize:null,deltaOffset:null,deltaPercentage:null,isResizingColumn:!1,columnSizingStart:[]}),ue={getDefaultColumnDef:()=>P,getInitialState:e=>({columnSizing:{},columnSizingInfo:F(),...e}),getDefaultOptions:e=>({columnResizeMode:`onEnd`,columnResizeDirection:`ltr`,onColumnSizingChange:u(`columnSizing`,e),onColumnSizingInfoChange:u(`columnSizingInfo`,e)}),createColumn:(e,t)=>{e.getSize=()=>{let n=t.getState().columnSizing[e.id];return Math.min(Math.max(e.columnDef.minSize??P.minSize,n??e.columnDef.size??P.size),e.columnDef.maxSize??P.maxSize)},e.getStart=m(e=>[e,R(t,e),t.getState().columnSizing],(t,n)=>n.slice(0,e.getIndex(t)).reduce((e,t)=>e+t.getSize(),0),h(t.options,`debugColumns`,`getStart`)),e.getAfter=m(e=>[e,R(t,e),t.getState().columnSizing],(t,n)=>n.slice(e.getIndex(t)+1).reduce((e,t)=>e+t.getSize(),0),h(t.options,`debugColumns`,`getAfter`)),e.resetSize=()=>{t.setColumnSizing(t=>{let{[e.id]:n,...r}=t;return r})},e.getCanResize=()=>(e.columnDef.enableResizing??!0)&&(t.options.enableColumnResizing??!0),e.getIsResizing=()=>t.getState().columnSizingInfo.isResizingColumn===e.id},createHeader:(e,t)=>{e.getSize=()=>{let t=0,n=e=>{e.subHeaders.length?e.subHeaders.forEach(n):t+=e.column.getSize()??0};return n(e),t},e.getStart=()=>{if(e.index>0){let t=e.headerGroup.headers[e.index-1];return t.getStart()+t.getSize()}return 0},e.getResizeHandler=n=>{let r=t.getColumn(e.column.id),i=r?.getCanResize();return a=>{if(!r||!i||(a.persist==null||a.persist(),L(a)&&a.touches&&a.touches.length>1))return;let o=e.getSize(),s=e?e.getLeafHeaders().map(e=>[e.column.id,e.column.getSize()]):[[r.id,r.getSize()]],c=L(a)?Math.round(a.touches[0].clientX):a.clientX,l={},u=(e,n)=>{typeof n==`number`&&(t.setColumnSizingInfo(e=>{let r=t.options.columnResizeDirection===`rtl`?-1:1,i=(n-(e?.startOffset??0))*r,a=Math.max(i/(e?.startSize??0),-.999999);return e.columnSizingStart.forEach(e=>{let[t,n]=e;l[t]=Math.round(Math.max(n+n*a,0)*100)/100}),{...e,deltaOffset:i,deltaPercentage:a}}),(t.options.columnResizeMode===`onChange`||e===`end`)&&t.setColumnSizing(e=>({...e,...l})))},d=e=>u(`move`,e),f=e=>{u(`end`,e),t.setColumnSizingInfo(e=>({...e,isResizingColumn:!1,startOffset:null,startSize:null,deltaOffset:null,deltaPercentage:null,columnSizingStart:[]}))},p=le(n),m={moveHandler:e=>d(e.clientX),upHandler:e=>{p?.removeEventListener(`mousemove`,m.moveHandler),p?.removeEventListener(`mouseup`,m.upHandler),f(e.clientX)}},h={moveHandler:e=>(e.cancelable&&(e.preventDefault(),e.stopPropagation()),d(e.touches[0].clientX),!1),upHandler:e=>{p?.removeEventListener(`touchmove`,h.moveHandler),p?.removeEventListener(`touchend`,h.upHandler),e.cancelable&&(e.preventDefault(),e.stopPropagation()),f(e.touches[0]?.clientX)}},g=de()?{passive:!1}:!1;L(a)?(p?.addEventListener(`touchmove`,h.moveHandler,g),p?.addEventListener(`touchend`,h.upHandler,g)):(p?.addEventListener(`mousemove`,m.moveHandler,g),p?.addEventListener(`mouseup`,m.upHandler,g)),t.setColumnSizingInfo(e=>({...e,startOffset:c,startSize:o,deltaOffset:0,deltaPercentage:0,columnSizingStart:s,isResizingColumn:r.id}))}}},createTable:e=>{e.setColumnSizing=t=>e.options.onColumnSizingChange==null?void 0:e.options.onColumnSizingChange(t),e.setColumnSizingInfo=t=>e.options.onColumnSizingInfoChange==null?void 0:e.options.onColumnSizingInfoChange(t),e.resetColumnSizing=t=>{e.setColumnSizing(t?{}:e.initialState.columnSizing??{})},e.resetHeaderSizeInfo=t=>{e.setColumnSizingInfo(t?F():e.initialState.columnSizingInfo??F())},e.getTotalSize=()=>e.getHeaderGroups()[0]?.headers.reduce((e,t)=>e+t.getSize(),0)??0,e.getLeftTotalSize=()=>e.getLeftHeaderGroups()[0]?.headers.reduce((e,t)=>e+t.getSize(),0)??0,e.getCenterTotalSize=()=>e.getCenterHeaderGroups()[0]?.headers.reduce((e,t)=>e+t.getSize(),0)??0,e.getRightTotalSize=()=>e.getRightHeaderGroups()[0]?.headers.reduce((e,t)=>e+t.getSize(),0)??0}},I=null;function de(){if(typeof I==`boolean`)return I;let e=!1;try{let t={get passive(){return e=!0,!1}},n=()=>{};window.addEventListener(`test`,n,t),window.removeEventListener(`test`,n)}catch{e=!1}return I=e,I}function L(e){return e.type===`touchstart`}var fe={getInitialState:e=>({columnVisibility:{},...e}),getDefaultOptions:e=>({onColumnVisibilityChange:u(`columnVisibility`,e)}),createColumn:(e,t)=>{e.toggleVisibility=n=>{e.getCanHide()&&t.setColumnVisibility(t=>({...t,[e.id]:n??!e.getIsVisible()}))},e.getIsVisible=()=>{let n=e.columns;return(n.length?n.some(e=>e.getIsVisible()):t.getState().columnVisibility?.[e.id])??!0},e.getCanHide=()=>(e.columnDef.enableHiding??!0)&&(t.options.enableHiding??!0),e.getToggleVisibilityHandler=()=>t=>{e.toggleVisibility==null||e.toggleVisibility(t.target.checked)}},createRow:(e,t)=>{e._getAllVisibleCells=m(()=>[e.getAllCells(),t.getState().columnVisibility],e=>e.filter(e=>e.column.getIsVisible()),h(t.options,`debugRows`,`_getAllVisibleCells`)),e.getVisibleCells=m(()=>[e.getLeftVisibleCells(),e.getCenterVisibleCells(),e.getRightVisibleCells()],(e,t,n)=>[...e,...t,...n],h(t.options,`debugRows`,`getVisibleCells`))},createTable:e=>{let t=(t,n)=>m(()=>[n(),n().filter(e=>e.getIsVisible()).map(e=>e.id).join(`_`)],e=>e.filter(e=>e.getIsVisible==null?void 0:e.getIsVisible()),h(e.options,`debugColumns`,t));e.getVisibleFlatColumns=t(`getVisibleFlatColumns`,()=>e.getAllFlatColumns()),e.getVisibleLeafColumns=t(`getVisibleLeafColumns`,()=>e.getAllLeafColumns()),e.getLeftVisibleLeafColumns=t(`getLeftVisibleLeafColumns`,()=>e.getLeftLeafColumns()),e.getRightVisibleLeafColumns=t(`getRightVisibleLeafColumns`,()=>e.getRightLeafColumns()),e.getCenterVisibleLeafColumns=t(`getCenterVisibleLeafColumns`,()=>e.getCenterLeafColumns()),e.setColumnVisibility=t=>e.options.onColumnVisibilityChange==null?void 0:e.options.onColumnVisibilityChange(t),e.resetColumnVisibility=t=>{e.setColumnVisibility(t?{}:e.initialState.columnVisibility??{})},e.toggleAllColumnsVisible=t=>{t??=!e.getIsAllColumnsVisible(),e.setColumnVisibility(e.getAllLeafColumns().reduce((e,n)=>({...e,[n.id]:t||!(n.getCanHide!=null&&n.getCanHide())}),{}))},e.getIsAllColumnsVisible=()=>!e.getAllLeafColumns().some(e=>!(e.getIsVisible!=null&&e.getIsVisible())),e.getIsSomeColumnsVisible=()=>e.getAllLeafColumns().some(e=>e.getIsVisible==null?void 0:e.getIsVisible()),e.getToggleAllColumnsVisibilityHandler=()=>t=>{e.toggleAllColumnsVisible(t.target?.checked)}}};function R(e,t){return t?t===`center`?e.getCenterVisibleLeafColumns():t===`left`?e.getLeftVisibleLeafColumns():e.getRightVisibleLeafColumns():e.getVisibleLeafColumns()}var pe={createTable:e=>{e._getGlobalFacetedRowModel=e.options.getFacetedRowModel&&e.options.getFacetedRowModel(e,`__global__`),e.getGlobalFacetedRowModel=()=>e.options.manualFiltering||!e._getGlobalFacetedRowModel?e.getPreFilteredRowModel():e._getGlobalFacetedRowModel(),e._getGlobalFacetedUniqueValues=e.options.getFacetedUniqueValues&&e.options.getFacetedUniqueValues(e,`__global__`),e.getGlobalFacetedUniqueValues=()=>e._getGlobalFacetedUniqueValues?e._getGlobalFacetedUniqueValues():new Map,e._getGlobalFacetedMinMaxValues=e.options.getFacetedMinMaxValues&&e.options.getFacetedMinMaxValues(e,`__global__`),e.getGlobalFacetedMinMaxValues=()=>{if(e._getGlobalFacetedMinMaxValues)return e._getGlobalFacetedMinMaxValues()}}},me={getInitialState:e=>({globalFilter:void 0,...e}),getDefaultOptions:e=>({onGlobalFilterChange:u(`globalFilter`,e),globalFilterFn:`auto`,getColumnCanGlobalFilter:t=>{var n;let r=(n=e.getCoreRowModel().flatRows[0])==null||(n=n._getAllCellsByColumnId()[t.id])==null?void 0:n.getValue();return typeof r==`string`||typeof r==`number`}}),createColumn:(e,t)=>{e.getCanGlobalFilter=()=>(e.columnDef.enableGlobalFilter??!0)&&(t.options.enableGlobalFilter??!0)&&(t.options.enableFilters??!0)&&((t.options.getColumnCanGlobalFilter==null?void 0:t.options.getColumnCanGlobalFilter(e))??!0)&&!!e.accessorFn},createTable:e=>{e.getGlobalAutoFilterFn=()=>k.includesString,e.getGlobalFilterFn=()=>{let{globalFilterFn:t}=e.options;return d(t)?t:t===`auto`?e.getGlobalAutoFilterFn():e.options.filterFns?.[t]??k[t]},e.setGlobalFilter=t=>{e.options.onGlobalFilterChange==null||e.options.onGlobalFilterChange(t)},e.resetGlobalFilter=t=>{e.setGlobalFilter(t?void 0:e.initialState.globalFilter)}}},he={getInitialState:e=>({expanded:{},...e}),getDefaultOptions:e=>({onExpandedChange:u(`expanded`,e),paginateExpandedRows:!0}),createTable:e=>{let t=!1,n=!1;e._autoResetExpanded=()=>{if(!t){e._queue(()=>{t=!0});return}if(e.options.autoResetAll??e.options.autoResetExpanded??!e.options.manualExpanding){if(n)return;n=!0,e._queue(()=>{e.resetExpanded(),n=!1})}},e.setExpanded=t=>e.options.onExpandedChange==null?void 0:e.options.onExpandedChange(t),e.toggleAllRowsExpanded=t=>{t??!e.getIsAllRowsExpanded()?e.setExpanded(!0):e.setExpanded({})},e.resetExpanded=t=>{e.setExpanded(t?{}:e.initialState?.expanded??{})},e.getCanSomeRowsExpand=()=>e.getPrePaginationRowModel().flatRows.some(e=>e.getCanExpand()),e.getToggleAllRowsExpandedHandler=()=>t=>{t.persist==null||t.persist(),e.toggleAllRowsExpanded()},e.getIsSomeRowsExpanded=()=>{let t=e.getState().expanded;return t===!0||Object.values(t).some(Boolean)},e.getIsAllRowsExpanded=()=>{let t=e.getState().expanded;return typeof t==`boolean`?t===!0:!(!Object.keys(t).length||e.getRowModel().flatRows.some(e=>!e.getIsExpanded()))},e.getExpandedDepth=()=>{let t=0;return(e.getState().expanded===!0?Object.keys(e.getRowModel().rowsById):Object.keys(e.getState().expanded)).forEach(e=>{let n=e.split(`.`);t=Math.max(t,n.length)}),t},e.getPreExpandedRowModel=()=>e.getSortedRowModel(),e.getExpandedRowModel=()=>(!e._getExpandedRowModel&&e.options.getExpandedRowModel&&(e._getExpandedRowModel=e.options.getExpandedRowModel(e)),e.options.manualExpanding||!e._getExpandedRowModel?e.getPreExpandedRowModel():e._getExpandedRowModel())},createRow:(e,t)=>{e.toggleExpanded=n=>{t.setExpanded(r=>{let i=r===!0?!0:!!(r!=null&&r[e.id]),a={};if(r===!0?Object.keys(t.getRowModel().rowsById).forEach(e=>{a[e]=!0}):a=r,n??=!i,!i&&n)return{...a,[e.id]:!0};if(i&&!n){let{[e.id]:t,...n}=a;return n}return r})},e.getIsExpanded=()=>{let n=t.getState().expanded;return!!((t.options.getIsRowExpanded==null?void 0:t.options.getIsRowExpanded(e))??(n===!0||n?.[e.id]))},e.getCanExpand=()=>{var n;return(t.options.getRowCanExpand==null?void 0:t.options.getRowCanExpand(e))??((t.options.enableExpanding??!0)&&!!((n=e.subRows)!=null&&n.length))},e.getIsAllParentsExpanded=()=>{let n=!0,r=e;for(;n&&r.parentId;)r=t.getRow(r.parentId,!0),n=r.getIsExpanded();return n},e.getToggleExpandedHandler=()=>{let t=e.getCanExpand();return()=>{t&&e.toggleExpanded()}}}},z=0,B=10,V=()=>({pageIndex:z,pageSize:B}),ge={getInitialState:e=>({...e,pagination:{...V(),...e?.pagination}}),getDefaultOptions:e=>({onPaginationChange:u(`pagination`,e)}),createTable:e=>{let t=!1,n=!1;e._autoResetPageIndex=()=>{if(!t){e._queue(()=>{t=!0});return}if(e.options.autoResetAll??e.options.autoResetPageIndex??!e.options.manualPagination){if(n)return;n=!0,e._queue(()=>{e.resetPageIndex(),n=!1})}},e.setPagination=t=>e.options.onPaginationChange==null?void 0:e.options.onPaginationChange(e=>l(t,e)),e.resetPagination=t=>{e.setPagination(t?V():e.initialState.pagination??V())},e.setPageIndex=t=>{e.setPagination(n=>{let r=l(t,n.pageIndex),i=e.options.pageCount===void 0||e.options.pageCount===-1?2**53-1:e.options.pageCount-1;return r=Math.max(0,Math.min(r,i)),{...n,pageIndex:r}})},e.resetPageIndex=t=>{var n;e.setPageIndex(t?z:((n=e.initialState)==null||(n=n.pagination)==null?void 0:n.pageIndex)??z)},e.resetPageSize=t=>{var n;e.setPageSize(t?B:((n=e.initialState)==null||(n=n.pagination)==null?void 0:n.pageSize)??B)},e.setPageSize=t=>{e.setPagination(e=>{let n=Math.max(1,l(t,e.pageSize)),r=e.pageSize*e.pageIndex,i=Math.floor(r/n);return{...e,pageIndex:i,pageSize:n}})},e.setPageCount=t=>e.setPagination(n=>{let r=l(t,e.options.pageCount??-1);return typeof r==`number`&&(r=Math.max(-1,r)),{...n,pageCount:r}}),e.getPageOptions=m(()=>[e.getPageCount()],e=>{let t=[];return e&&e>0&&(t=[...Array(e)].fill(null).map((e,t)=>t)),t},h(e.options,`debugTable`,`getPageOptions`)),e.getCanPreviousPage=()=>e.getState().pagination.pageIndex>0,e.getCanNextPage=()=>{let{pageIndex:t}=e.getState().pagination,n=e.getPageCount();return n===-1?!0:n===0?!1:t<n-1},e.previousPage=()=>e.setPageIndex(e=>e-1),e.nextPage=()=>e.setPageIndex(e=>e+1),e.firstPage=()=>e.setPageIndex(0),e.lastPage=()=>e.setPageIndex(e.getPageCount()-1),e.getPrePaginationRowModel=()=>e.getExpandedRowModel(),e.getPaginationRowModel=()=>(!e._getPaginationRowModel&&e.options.getPaginationRowModel&&(e._getPaginationRowModel=e.options.getPaginationRowModel(e)),e.options.manualPagination||!e._getPaginationRowModel?e.getPrePaginationRowModel():e._getPaginationRowModel()),e.getPageCount=()=>e.options.pageCount??Math.ceil(e.getRowCount()/e.getState().pagination.pageSize),e.getRowCount=()=>e.options.rowCount??e.getPrePaginationRowModel().rows.length}},H=()=>({top:[],bottom:[]}),_e={getInitialState:e=>({rowPinning:H(),...e}),getDefaultOptions:e=>({onRowPinningChange:u(`rowPinning`,e)}),createRow:(e,t)=>{e.pin=(n,r,i)=>{let a=r?e.getLeafRows().map(e=>{let{id:t}=e;return t}):[],o=i?e.getParentRows().map(e=>{let{id:t}=e;return t}):[],s=new Set([...o,e.id,...a]);t.setRowPinning(e=>n===`bottom`?{top:(e?.top??[]).filter(e=>!(s!=null&&s.has(e))),bottom:[...(e?.bottom??[]).filter(e=>!(s!=null&&s.has(e))),...Array.from(s)]}:n===`top`?{top:[...(e?.top??[]).filter(e=>!(s!=null&&s.has(e))),...Array.from(s)],bottom:(e?.bottom??[]).filter(e=>!(s!=null&&s.has(e)))}:{top:(e?.top??[]).filter(e=>!(s!=null&&s.has(e))),bottom:(e?.bottom??[]).filter(e=>!(s!=null&&s.has(e)))})},e.getCanPin=()=>{let{enableRowPinning:n,enablePinning:r}=t.options;return typeof n==`function`?n(e):n??r??!0},e.getIsPinned=()=>{let n=[e.id],{top:r,bottom:i}=t.getState().rowPinning,a=n.some(e=>r?.includes(e)),o=n.some(e=>i?.includes(e));return a?`top`:o?`bottom`:!1},e.getPinnedIndex=()=>{let n=e.getIsPinned();return n?((n===`top`?t.getTopRows():t.getBottomRows())?.map(e=>{let{id:t}=e;return t}))?.indexOf(e.id)??-1:-1}},createTable:e=>{e.setRowPinning=t=>e.options.onRowPinningChange==null?void 0:e.options.onRowPinningChange(t),e.resetRowPinning=t=>e.setRowPinning(t?H():e.initialState?.rowPinning??H()),e.getIsSomeRowsPinned=t=>{let n=e.getState().rowPinning;return t?!!n[t]?.length:!!(n.top?.length||n.bottom?.length)},e._getPinnedRows=(t,n,r)=>(e.options.keepPinnedRows??!0?(n??[]).map(t=>{let n=e.getRow(t,!0);return n.getIsAllParentsExpanded()?n:null}):(n??[]).map(e=>t.find(t=>t.id===e))).filter(Boolean).map(e=>({...e,position:r})),e.getTopRows=m(()=>[e.getRowModel().rows,e.getState().rowPinning.top],(t,n)=>e._getPinnedRows(t,n,`top`),h(e.options,`debugRows`,`getTopRows`)),e.getBottomRows=m(()=>[e.getRowModel().rows,e.getState().rowPinning.bottom],(t,n)=>e._getPinnedRows(t,n,`bottom`),h(e.options,`debugRows`,`getBottomRows`)),e.getCenterRows=m(()=>[e.getRowModel().rows,e.getState().rowPinning.top,e.getState().rowPinning.bottom],(e,t,n)=>{let r=new Set([...t??[],...n??[]]);return e.filter(e=>!r.has(e.id))},h(e.options,`debugRows`,`getCenterRows`))}},ve={getInitialState:e=>({rowSelection:{},...e}),getDefaultOptions:e=>({onRowSelectionChange:u(`rowSelection`,e),enableRowSelection:!0,enableMultiRowSelection:!0,enableSubRowSelection:!0}),createTable:e=>{e.setRowSelection=t=>e.options.onRowSelectionChange==null?void 0:e.options.onRowSelectionChange(t),e.resetRowSelection=t=>e.setRowSelection(t?{}:e.initialState.rowSelection??{}),e.toggleAllRowsSelected=t=>{e.setRowSelection(n=>{t=t===void 0?!e.getIsAllRowsSelected():t;let r={...n},i=e.getPreGroupedRowModel().flatRows;return t?i.forEach(e=>{e.getCanSelect()&&(r[e.id]=!0)}):i.forEach(e=>{delete r[e.id]}),r})},e.toggleAllPageRowsSelected=t=>e.setRowSelection(n=>{let r=t===void 0?!e.getIsAllPageRowsSelected():t,i={...n};return e.getRowModel().rows.forEach(t=>{U(i,t.id,r,!0,e)}),i}),e.getPreSelectedRowModel=()=>e.getCoreRowModel(),e.getSelectedRowModel=m(()=>[e.getState().rowSelection,e.getCoreRowModel()],(t,n)=>Object.keys(t).length?W(e,n):{rows:[],flatRows:[],rowsById:{}},h(e.options,`debugTable`,`getSelectedRowModel`)),e.getFilteredSelectedRowModel=m(()=>[e.getState().rowSelection,e.getFilteredRowModel()],(t,n)=>Object.keys(t).length?W(e,n):{rows:[],flatRows:[],rowsById:{}},h(e.options,`debugTable`,`getFilteredSelectedRowModel`)),e.getGroupedSelectedRowModel=m(()=>[e.getState().rowSelection,e.getSortedRowModel()],(t,n)=>Object.keys(t).length?W(e,n):{rows:[],flatRows:[],rowsById:{}},h(e.options,`debugTable`,`getGroupedSelectedRowModel`)),e.getIsAllRowsSelected=()=>{let t=e.getFilteredRowModel().flatRows,{rowSelection:n}=e.getState(),r=!!(t.length&&Object.keys(n).length);return r&&t.some(e=>e.getCanSelect()&&!n[e.id])&&(r=!1),r},e.getIsAllPageRowsSelected=()=>{let t=e.getPaginationRowModel().flatRows.filter(e=>e.getCanSelect()),{rowSelection:n}=e.getState(),r=!!t.length;return r&&t.some(e=>!n[e.id])&&(r=!1),r},e.getIsSomeRowsSelected=()=>{let t=Object.keys(e.getState().rowSelection??{}).length;return t>0&&t<e.getFilteredRowModel().flatRows.length},e.getIsSomePageRowsSelected=()=>{let t=e.getPaginationRowModel().flatRows;return e.getIsAllPageRowsSelected()?!1:t.filter(e=>e.getCanSelect()).some(e=>e.getIsSelected()||e.getIsSomeSelected())},e.getToggleAllRowsSelectedHandler=()=>t=>{e.toggleAllRowsSelected(t.target.checked)},e.getToggleAllPageRowsSelectedHandler=()=>t=>{e.toggleAllPageRowsSelected(t.target.checked)}},createRow:(e,t)=>{e.toggleSelected=(n,r)=>{let i=e.getIsSelected();t.setRowSelection(a=>{if(n=n===void 0?!i:n,e.getCanSelect()&&i===n)return a;let o={...a};return U(o,e.id,n,r?.selectChildren??!0,t),o})},e.getIsSelected=()=>{let{rowSelection:n}=t.getState();return G(e,n)},e.getIsSomeSelected=()=>{let{rowSelection:n}=t.getState();return K(e,n)===`some`},e.getIsAllSubRowsSelected=()=>{let{rowSelection:n}=t.getState();return K(e,n)===`all`},e.getCanSelect=()=>typeof t.options.enableRowSelection==`function`?t.options.enableRowSelection(e):t.options.enableRowSelection??!0,e.getCanSelectSubRows=()=>typeof t.options.enableSubRowSelection==`function`?t.options.enableSubRowSelection(e):t.options.enableSubRowSelection??!0,e.getCanMultiSelect=()=>typeof t.options.enableMultiRowSelection==`function`?t.options.enableMultiRowSelection(e):t.options.enableMultiRowSelection??!0,e.getToggleSelectedHandler=()=>{let t=e.getCanSelect();return n=>{t&&e.toggleSelected(n.target?.checked)}}}},U=(e,t,n,r,i)=>{var a;let o=i.getRow(t,!0);n?(o.getCanMultiSelect()||Object.keys(e).forEach(t=>delete e[t]),o.getCanSelect()&&(e[t]=!0)):delete e[t],r&&(a=o.subRows)!=null&&a.length&&o.getCanSelectSubRows()&&o.subRows.forEach(t=>U(e,t.id,n,r,i))};function W(e,t){let n=e.getState().rowSelection,r=[],i={},a=function(e,t){return e.map(e=>{var t;let o=G(e,n);if(o&&(r.push(e),i[e.id]=e),(t=e.subRows)!=null&&t.length&&(e={...e,subRows:a(e.subRows)}),o)return e}).filter(Boolean)};return{rows:a(t.rows),flatRows:r,rowsById:i}}function G(e,t){return t[e.id]??!1}function K(e,t,n){var r;if(!((r=e.subRows)!=null&&r.length))return!1;let i=!0,a=!1;return e.subRows.forEach(e=>{if(!(a&&!i)&&(e.getCanSelect()&&(G(e,t)?a=!0:i=!1),e.subRows&&e.subRows.length)){let n=K(e,t);n===`all`?a=!0:(n===`some`&&(a=!0),i=!1)}}),i?`all`:a?`some`:!1}var q=/([0-9]+)/gm,ye=(e,t,n)=>Te(Y(e.getValue(n)).toLowerCase(),Y(t.getValue(n)).toLowerCase()),be=(e,t,n)=>Te(Y(e.getValue(n)),Y(t.getValue(n))),xe=(e,t,n)=>J(Y(e.getValue(n)).toLowerCase(),Y(t.getValue(n)).toLowerCase()),Se=(e,t,n)=>J(Y(e.getValue(n)),Y(t.getValue(n))),Ce=(e,t,n)=>{let r=e.getValue(n),i=t.getValue(n);return r>i?1:r<i?-1:0},we=(e,t,n)=>J(e.getValue(n),t.getValue(n));function J(e,t){return e===t?0:e>t?1:-1}function Y(e){return typeof e==`number`?isNaN(e)||e===1/0||e===-1/0?``:String(e):typeof e==`string`?e:``}function Te(e,t){let n=e.split(q).filter(Boolean),r=t.split(q).filter(Boolean);for(;n.length&&r.length;){let e=n.shift(),t=r.shift(),i=parseInt(e,10),a=parseInt(t,10),o=[i,a].sort();if(isNaN(o[0])){if(e>t)return 1;if(t>e)return-1;continue}if(isNaN(o[1]))return isNaN(i)?-1:1;if(i>a)return 1;if(a>i)return-1}return n.length-r.length}var X={alphanumeric:ye,alphanumericCaseSensitive:be,text:xe,textCaseSensitive:Se,datetime:Ce,basic:we},Ee=[b,fe,se,ce,ee,ie,pe,me,{getInitialState:e=>({sorting:[],...e}),getDefaultColumnDef:()=>({sortingFn:`auto`,sortUndefined:1}),getDefaultOptions:e=>({onSortingChange:u(`sorting`,e),isMultiSortEvent:e=>e.shiftKey}),createColumn:(e,t)=>{e.getAutoSortingFn=()=>{let n=t.getFilteredRowModel().flatRows.slice(10),r=!1;for(let t of n){let n=t?.getValue(e.id);if(Object.prototype.toString.call(n)===`[object Date]`)return X.datetime;if(typeof n==`string`&&(r=!0,n.split(q).length>1))return X.alphanumeric}return r?X.text:X.basic},e.getAutoSortDir=()=>typeof t.getFilteredRowModel().flatRows[0]?.getValue(e.id)==`string`?`asc`:`desc`,e.getSortingFn=()=>{if(!e)throw Error();return d(e.columnDef.sortingFn)?e.columnDef.sortingFn:e.columnDef.sortingFn===`auto`?e.getAutoSortingFn():t.options.sortingFns?.[e.columnDef.sortingFn]??X[e.columnDef.sortingFn]},e.toggleSorting=(n,r)=>{let i=e.getNextSortingOrder(),a=n!=null;t.setSorting(o=>{let s=o?.find(t=>t.id===e.id),c=o?.findIndex(t=>t.id===e.id),l=[],u,d=a?n:i===`desc`;return u=o!=null&&o.length&&e.getCanMultiSort()&&r?s?`toggle`:`add`:o!=null&&o.length&&c!==o.length-1?`replace`:s?`toggle`:`replace`,u===`toggle`&&(a||i||(u=`remove`)),u===`add`?(l=[...o,{id:e.id,desc:d}],l.splice(0,l.length-(t.options.maxMultiSortColCount??2**53-1))):l=u===`toggle`?o.map(t=>t.id===e.id?{...t,desc:d}:t):u===`remove`?o.filter(t=>t.id!==e.id):[{id:e.id,desc:d}],l})},e.getFirstSortDir=()=>e.columnDef.sortDescFirst??t.options.sortDescFirst??e.getAutoSortDir()===`desc`?`desc`:`asc`,e.getNextSortingOrder=n=>{let r=e.getFirstSortDir(),i=e.getIsSorted();return i?i!==r&&(t.options.enableSortingRemoval??!0)&&(!n||(t.options.enableMultiRemove??!0))?!1:i===`desc`?`asc`:`desc`:r},e.getCanSort=()=>(e.columnDef.enableSorting??!0)&&(t.options.enableSorting??!0)&&!!e.accessorFn,e.getCanMultiSort=()=>e.columnDef.enableMultiSort??t.options.enableMultiSort??!!e.accessorFn,e.getIsSorted=()=>{let n=t.getState().sorting?.find(t=>t.id===e.id);return n?n.desc?`desc`:`asc`:!1},e.getSortIndex=()=>t.getState().sorting?.findIndex(t=>t.id===e.id)??-1,e.clearSorting=()=>{t.setSorting(t=>t!=null&&t.length?t.filter(t=>t.id!==e.id):[])},e.getToggleSortingHandler=()=>{let n=e.getCanSort();return r=>{n&&(r.persist==null||r.persist(),e.toggleSorting==null||e.toggleSorting(void 0,e.getCanMultiSort()?t.options.isMultiSortEvent==null?void 0:t.options.isMultiSortEvent(r):!1))}}},createTable:e=>{e.setSorting=t=>e.options.onSortingChange==null?void 0:e.options.onSortingChange(t),e.resetSorting=t=>{e.setSorting(t?[]:e.initialState?.sorting??[])},e.getPreSortedRowModel=()=>e.getGroupedRowModel(),e.getSortedRowModel=()=>(!e._getSortedRowModel&&e.options.getSortedRowModel&&(e._getSortedRowModel=e.options.getSortedRowModel(e)),e.options.manualSorting||!e._getSortedRowModel?e.getPreSortedRowModel():e._getSortedRowModel())}},ae,he,ge,_e,ve,ue];function De(e){let t=[...Ee,...e._features??[]],n={_features:t},r=n._features.reduce((e,t)=>Object.assign(e,t.getDefaultOptions==null?void 0:t.getDefaultOptions(n)),{}),i=e=>n.options.mergeOptions?n.options.mergeOptions(r,e):{...r,...e},a={...e.initialState??{}};n._features.forEach(e=>{a=(e.getInitialState==null?void 0:e.getInitialState(a))??a});let o=[],s=!1,c={_features:t,options:{...r,...e},initialState:a,_queue:e=>{o.push(e),s||(s=!0,Promise.resolve().then(()=>{for(;o.length;)o.shift()();s=!1}).catch(e=>setTimeout(()=>{throw e})))},reset:()=>{n.setState(n.initialState)},setOptions:e=>{n.options=i(l(e,n.options))},getState:()=>n.options.state,setState:e=>{n.options.onStateChange==null||n.options.onStateChange(e)},_getRowId:(e,t,r)=>(n.options.getRowId==null?void 0:n.options.getRowId(e,t,r))??`${r?[r.id,t].join(`.`):t}`,getCoreRowModel:()=>(n._getCoreRowModel||=n.options.getCoreRowModel(n),n._getCoreRowModel()),getRowModel:()=>n.getPaginationRowModel(),getRow:(e,t)=>{let r=(t?n.getPrePaginationRowModel():n.getRowModel()).rowsById[e];if(!r&&(r=n.getCoreRowModel().rowsById[e],!r))throw Error();return r},_getDefaultColumnDef:m(()=>[n.options.defaultColumn],e=>(e??={},{header:e=>{let t=e.header.column.columnDef;return t.accessorKey?t.accessorKey:t.accessorFn?t.id:null},cell:e=>{var t;return((t=e.renderValue())==null||t.toString==null?void 0:t.toString())??null},...n._features.reduce((e,t)=>Object.assign(e,t.getDefaultColumnDef==null?void 0:t.getDefaultColumnDef()),{}),...e}),h(e,`debugColumns`,`_getDefaultColumnDef`)),_getColumnDefs:()=>n.options.columns,getAllColumns:m(()=>[n._getColumnDefs()],e=>{let t=function(e,r,i){return i===void 0&&(i=0),e.map(e=>{let a=_(n,e,i,r),o=e;return a.columns=o.columns?t(o.columns,a,i+1):[],a})};return t(e)},h(e,`debugColumns`,`getAllColumns`)),getAllFlatColumns:m(()=>[n.getAllColumns()],e=>e.flatMap(e=>e.getFlatColumns()),h(e,`debugColumns`,`getAllFlatColumns`)),_getAllFlatColumnsById:m(()=>[n.getAllFlatColumns()],e=>e.reduce((e,t)=>(e[t.id]=t,e),{}),h(e,`debugColumns`,`getAllFlatColumnsById`)),getAllLeafColumns:m(()=>[n.getAllColumns(),n._getOrderColumnsFn()],(e,t)=>t(e.flatMap(e=>e.getLeafColumns())),h(e,`debugColumns`,`getAllLeafColumns`)),getColumn:e=>n._getAllFlatColumnsById()[e]};Object.assign(n,c);for(let e=0;e<n._features.length;e++){let t=n._features[e];t==null||t.createTable==null||t.createTable(n)}return n}function Oe(){return e=>m(()=>[e.options.data],t=>{let n={rows:[],flatRows:[],rowsById:{}},r=function(t,i,a){i===void 0&&(i=0);let o=[];for(let c=0;c<t.length;c++){let l=S(e,e._getRowId(t[c],c,a),t[c],c,i,void 0,a?.id);if(n.flatRows.push(l),n.rowsById[l.id]=l,o.push(l),e.options.getSubRows){var s;l.originalSubRows=e.options.getSubRows(t[c],c),(s=l.originalSubRows)!=null&&s.length&&(l.subRows=r(l.originalSubRows,i+1,l))}}return o};return n.rows=r(t),n},h(e.options,`debugTable`,`getRowModel`,()=>e._autoResetPageIndex()))}function ke(e,t,n){return n.options.filterFromLeafRows?Ae(e,t,n):je(e,t,n)}function Ae(e,t,n){let r=[],i={},a=n.options.maxLeafRowFilterDepth??100,o=function(e,s){s===void 0&&(s=0);let c=[];for(let u=0;u<e.length;u++){var l;let d=e[u],f=S(n,d.id,d.original,d.index,d.depth,void 0,d.parentId);if(f.columnFilters=d.columnFilters,(l=d.subRows)!=null&&l.length&&s<a){if(f.subRows=o(d.subRows,s+1),d=f,t(d)&&!f.subRows.length){c.push(d),i[d.id]=d,r.push(d);continue}if(t(d)||f.subRows.length){c.push(d),i[d.id]=d,r.push(d);continue}}else d=f,t(d)&&(c.push(d),i[d.id]=d,r.push(d))}return c};return{rows:o(e),flatRows:r,rowsById:i}}function je(e,t,n){let r=[],i={},a=n.options.maxLeafRowFilterDepth??100,o=function(e,s){s===void 0&&(s=0);let c=[];for(let u=0;u<e.length;u++){let d=e[u];if(t(d)){var l;if((l=d.subRows)!=null&&l.length&&s<a){let e=S(n,d.id,d.original,d.index,d.depth,void 0,d.parentId);e.subRows=o(d.subRows,s+1),d=e}c.push(d),r.push(d),i[d.id]=d}}return c};return{rows:o(e),flatRows:r,rowsById:i}}function Me(){return e=>m(()=>[e.getPreFilteredRowModel(),e.getState().columnFilters,e.getState().globalFilter],(t,n,r)=>{if(!t.rows.length||!(n!=null&&n.length)&&!r){for(let e=0;e<t.flatRows.length;e++)t.flatRows[e].columnFilters={},t.flatRows[e].columnFiltersMeta={};return t}let i=[],a=[];(n??[]).forEach(t=>{let n=e.getColumn(t.id);if(!n)return;let r=n.getFilterFn();r&&i.push({id:t.id,filterFn:r,resolvedValue:(r.resolveFilterValue==null?void 0:r.resolveFilterValue(t.value))??t.value})});let o=(n??[]).map(e=>e.id),s=e.getGlobalFilterFn(),c=e.getAllLeafColumns().filter(e=>e.getCanGlobalFilter());r&&s&&c.length&&(o.push(`__global__`),c.forEach(e=>{a.push({id:e.id,filterFn:s,resolvedValue:(s.resolveFilterValue==null?void 0:s.resolveFilterValue(r))??r})}));let l,u;for(let e=0;e<t.flatRows.length;e++){let n=t.flatRows[e];if(n.columnFilters={},i.length)for(let e=0;e<i.length;e++){l=i[e];let t=l.id;n.columnFilters[t]=l.filterFn(n,t,l.resolvedValue,e=>{n.columnFiltersMeta[t]=e})}if(a.length){for(let e=0;e<a.length;e++){u=a[e];let t=u.id;if(u.filterFn(n,t,u.resolvedValue,e=>{n.columnFiltersMeta[t]=e})){n.columnFilters.__global__=!0;break}}n.columnFilters.__global__!==!0&&(n.columnFilters.__global__=!1)}}return ke(t.rows,e=>{for(let t=0;t<o.length;t++)if(e.columnFilters[o[t]]===!1)return!1;return!0},e)},h(e.options,`debugTable`,`getFilteredRowModel`,()=>e._autoResetPageIndex()))}function Ne(){return e=>m(()=>[e.getState().sorting,e.getPreSortedRowModel()],(t,n)=>{if(!n.rows.length||!(t!=null&&t.length))return n;let r=e.getState().sorting,i=[],a=r.filter(t=>e.getColumn(t.id)?.getCanSort()),o={};a.forEach(t=>{let n=e.getColumn(t.id);n&&(o[t.id]={sortUndefined:n.columnDef.sortUndefined,invertSorting:n.columnDef.invertSorting,sortingFn:n.getSortingFn()})});let s=e=>{let t=e.map(e=>({...e}));return t.sort((e,t)=>{for(let n=0;n<a.length;n+=1){let r=a[n],i=o[r.id],s=i.sortUndefined,c=r?.desc??!1,l=0;if(s){let n=e.getValue(r.id),i=t.getValue(r.id),a=n===void 0,o=i===void 0;if(a||o){if(s===`first`)return a?-1:1;if(s===`last`)return a?1:-1;l=a&&o?0:a?s:-s}}if(l===0&&(l=i.sortingFn(e,t,r.id)),l!==0)return c&&(l*=-1),i.invertSorting&&(l*=-1),l}return e.index-t.index}),t.forEach(e=>{var t;i.push(e),(t=e.subRows)!=null&&t.length&&(e.subRows=s(e.subRows))}),t};return{rows:s(n.rows),flatRows:i,rowsById:n.rowsById}},h(e.options,`debugTable`,`getSortedRowModel`,()=>e._autoResetPageIndex()))}function Z(e,t){return e?Pe(e)?s.createElement(e,t):e:null}function Pe(e){return Fe(e)||typeof e==`function`||Ie(e)}function Fe(e){return typeof e==`function`&&(()=>{let t=Object.getPrototypeOf(e);return t.prototype&&t.prototype.isReactComponent})()}function Ie(e){return typeof e==`object`&&typeof e.$$typeof==`symbol`&&[`react.memo`,`react.forward_ref`].includes(e.$$typeof.description)}function Le(e){let t={state:{},onStateChange:()=>{},renderFallbackValue:null,...e},[n]=s.useState(()=>({current:De(t)})),[r,i]=s.useState(()=>n.current.initialState);return n.current.setOptions(t=>({...t,...e,state:{...r,...e.state},onStateChange:t=>{i(t),e.onStateChange==null||e.onStateChange(t)}})),n.current}var Q=r();function Re({className:e,...n}){return(0,Q.jsx)(`div`,{"data-slot":`table-container`,className:`relative w-full overflow-x-auto`,children:(0,Q.jsx)(`table`,{"data-slot":`table`,className:t(`w-full caption-bottom text-sm`,e),...n})})}function ze({className:e,...n}){return(0,Q.jsx)(`thead`,{"data-slot":`table-header`,className:t(`[&_tr]:border-b`,e),...n})}function Be({className:e,...n}){return(0,Q.jsx)(`tbody`,{"data-slot":`table-body`,className:t(`[&_tr:last-child]:border-0`,e),...n})}function $({className:e,...n}){return(0,Q.jsx)(`tr`,{"data-slot":`table-row`,className:t(`border-b transition-colors hover:bg-muted/50 has-aria-expanded:bg-muted/50 data-[state=selected]:bg-muted`,e),...n})}function Ve({className:e,...n}){return(0,Q.jsx)(`th`,{"data-slot":`table-head`,className:t(`h-10 whitespace-nowrap px-2 text-left align-middle font-medium text-foreground [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]`,e),...n})}function He({className:e,...n}){return(0,Q.jsx)(`td`,{"data-slot":`table-cell`,className:t(`whitespace-nowrap p-2 align-middle [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]`,e),...n})}var Ue=e=>e===`asc`?`↑`:e===`desc`?`↓`:(0,Q.jsx)(o,{className:`size-3`}),We=(e,t,n)=>{let r=e.indexOf(t),i=e.indexOf(n);if(r===-1||i===-1)return null;let[a,o]=r<=i?[r,i]:[i,r];return e.slice(a,o+1)},Ge=(e,t,n)=>{let r={...e};for(let e of t){if(n){r[e]=!0;continue}delete r[e]}return r};function Ke({className:n,columns:r,data:i,emptyMessage:a,enableRowSelection:o=!1,getRowId:c,initialSorting:l=[],onRowClick:u,renderToolbar:d}){let[f,p]=(0,s.useState)(l),[m,h]=(0,s.useState)({}),g=(0,s.useRef)(null),_=(e,t,n)=>{let r=y.getRowModel().rows.map(e=>e.id);if(n&&g.current){let n=We(r,g.current,e);if(n){h(Ge(m,n,t)),g.current=e;return}}h(Ge(m,[e],t)),g.current=e},v=o?[{cell:({row:t})=>(0,Q.jsx)(e,{"aria-label":`Select row ${t.id}`,checked:t.getIsSelected(),onClick:e=>{e.stopPropagation(),e.preventDefault(),_(t.id,!t.getIsSelected(),e.shiftKey)},onCheckedChange:e=>{typeof e==`boolean`&&_(t.id,e,!1)}}),enableSorting:!1,header:({table:t})=>(0,Q.jsx)(e,{"aria-label":`Select all rows`,checked:t.getIsAllPageRowsSelected()?!0:t.getIsSomePageRowsSelected()?`indeterminate`:!1,onCheckedChange:e=>t.toggleAllPageRowsSelected(e===!0)}),id:`select`},...r]:[...r],y=Le({autoResetPageIndex:!1,columns:v,data:i,enableRowSelection:o,enableSortingRemoval:!1,getCoreRowModel:Oe(),getFilteredRowModel:Me(),getRowId:c,getSortedRowModel:Ne(),onRowSelectionChange:h,onSortingChange:p,sortDescFirst:!1,state:{rowSelection:m,sorting:f}}),b=y.getSelectedRowModel().rows.map(e=>e.original);return(0,Q.jsxs)(`div`,{className:t(`w-full overflow-x-auto rounded-[1.5rem] border border-[var(--border)] bg-[var(--panel)]`,n),children:[d?(0,Q.jsx)(`div`,{className:`border-[var(--border)] border-b px-4 py-3`,children:d({clearSelection:()=>h({}),selectedRows:b})}):null,(0,Q.jsxs)(Re,{className:`min-w-full`,children:[(0,Q.jsx)(ze,{className:`bg-[var(--panel-secondary)]`,children:y.getHeaderGroups().map(e=>(0,Q.jsx)($,{className:`border-[var(--border)] hover:bg-transparent`,children:e.headers.map(e=>(0,Q.jsx)(Ve,{className:`h-10 whitespace-nowrap px-4 font-semibold text-[11px] text-[var(--muted-foreground)] uppercase tracking-[0.18em]`,children:e.isPlaceholder?null:e.column.getCanSort()?(0,Q.jsxs)(`button`,{className:`inline-flex items-center gap-1.5 text-left`,type:`button`,onClick:e.column.getToggleSortingHandler(),children:[(0,Q.jsx)(`span`,{children:Z(e.column.columnDef.header,e.getContext())}),(0,Q.jsx)(`span`,{"aria-hidden":`true`,className:`text-[10px]`,children:Ue(e.column.getIsSorted())})]}):Z(e.column.columnDef.header,e.getContext())},e.id))},e.id))}),(0,Q.jsx)(Be,{children:y.getRowModel().rows.length===0?(0,Q.jsx)($,{className:`border-[var(--border)]`,children:(0,Q.jsx)(He,{className:`px-4 py-10 text-center text-[var(--muted-foreground)] text-sm`,colSpan:v.length,children:a})}):y.getRowModel().rows.map(e=>(0,Q.jsx)($,{className:t(`border-[var(--border)] hover:bg-[var(--panel-secondary)]/75`,u?`cursor-pointer`:``),onClick:()=>{u&&u(e.original)},children:e.getVisibleCells().map(e=>(0,Q.jsx)(He,{className:`px-4 py-2.5 align-top`,children:Z(e.column.columnDef.cell,e.getContext())},e.id))},e.id))})]})]})}export{c as n,Ke as t};
@@ -0,0 +1,11 @@
1
+ import{t as e}from"./checkbox-DXM4lkJq.js";import{a as t,i as n,n as r,o as i,r as a,t as o}from"./es2015-Bm0kEzx2.js";import{$ as s,A as c,B as l,C as u,D as d,E as f,G as p,H as m,J as h,K as g,L as _,M as v,O as y,P as b,R as x,T as ee,W as S,Z as C,ct as w,dt as te,g as T,it as ne,j as E,mt as re,pt as ie,rt as ae,w as oe}from"./index-DdJ7ahIt.js";var se=class extends w{#e;#t=void 0;#n;#r;constructor(e,t){super(),this.#e=e,this.setOptions(t),this.bindMethods(),this.#i()}bindMethods(){this.mutate=this.mutate.bind(this),this.reset=this.reset.bind(this)}setOptions(e){let t=this.options;this.options=this.#e.defaultMutationOptions(e),ae(this.options,t)||this.#e.getMutationCache().notify({type:`observerOptionsUpdated`,mutation:this.#n,observer:this}),t?.mutationKey&&this.options.mutationKey&&C(t.mutationKey)!==C(this.options.mutationKey)?this.reset():this.#n?.state.status===`pending`&&this.#n.setOptions(this.options)}onUnsubscribe(){this.hasListeners()||this.#n?.removeObserver(this)}onMutationUpdate(e){this.#i(),this.#a(e)}getCurrentResult(){return this.#t}reset(){this.#n?.removeObserver(this),this.#n=void 0,this.#i(),this.#a()}mutate(e,t){return this.#r=t,this.#n?.removeObserver(this),this.#n=this.#e.getMutationCache().build(this.#e,this.options),this.#n.addObserver(this),this.#n.execute(e)}#i(){let e=this.#n?.state??g();this.#t={...e,isPending:e.status===`pending`,isSuccess:e.status===`success`,isError:e.status===`error`,isIdle:e.status===`idle`,mutate:this.mutate,reset:this.reset}}#a(e){h.batch(()=>{if(this.#r&&this.hasListeners()){let t=this.#t.variables,n=this.#t.context,r={client:this.#e,meta:this.options.meta,mutationKey:this.options.mutationKey};if(e?.type===`success`){try{this.#r.onSuccess?.(e.data,t,n,r)}catch(e){Promise.reject(e)}try{this.#r.onSettled?.(e.data,null,t,n,r)}catch(e){Promise.reject(e)}}else if(e?.type===`error`){try{this.#r.onError?.(e.error,t,n,r)}catch(e){Promise.reject(e)}try{this.#r.onSettled?.(void 0,e.error,t,n,r)}catch(e){Promise.reject(e)}}}this.listeners.forEach(e=>{e(this.#t)})})}},D=re(ie(),1);function ce(e,t){let n=p(t),[r]=D.useState(()=>new se(n,e));D.useEffect(()=>{r.setOptions(e)},[r,e]);let i=D.useSyncExternalStore(D.useCallback(e=>r.subscribe(h.batchCalls(e)),[r]),()=>r.getCurrentResult(),()=>r.getCurrentResult()),a=D.useCallback((e,t)=>{r.mutate(e,t).catch(s)},[r]);if(i.error&&ne(r.options.throwOnError,[i.error]))throw i.error;return{...i,mutate:a,mutateAsync:i.mutate}}var le=S(`trash-2`,[[`path`,{d:`M10 11v6`,key:`nco0om`}],[`path`,{d:`M14 11v6`,key:`outv1u`}],[`path`,{d:`M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6`,key:`miytrc`}],[`path`,{d:`M3 6h18`,key:`d0wm0j`}],[`path`,{d:`M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2`,key:`e791ji`}]]),O=te(),k=`Dialog`,[ue,A]=v(k),[de,j]=ue(k),fe=e=>{let{__scopeDialog:t,children:n,open:r,defaultOpen:i,onOpenChange:a,modal:o=!0}=e,s=D.useRef(null),c=D.useRef(null),[l,u]=y({prop:r,defaultProp:i??!1,onChange:a,caller:k});return(0,O.jsx)(de,{scope:t,triggerRef:s,contentRef:c,contentId:f(),titleId:f(),descriptionId:f(),open:l,onOpenChange:u,onOpenToggle:D.useCallback(()=>u(e=>!e),[u]),modal:o,children:n})};fe.displayName=k;var pe=`DialogTrigger`,me=D.forwardRef((e,t)=>{let{__scopeDialog:n,...r}=e,i=j(pe,n),a=l(t,i.triggerRef);return(0,O.jsx)(b.button,{type:`button`,"aria-haspopup":`dialog`,"aria-expanded":i.open,"aria-controls":i.contentId,"data-state":U(i.open),...r,ref:a,onClick:c(e.onClick,i.onOpenToggle)})});me.displayName=pe;var M=`DialogPortal`,[he,ge]=ue(M,{forceMount:void 0}),_e=e=>{let{__scopeDialog:t,forceMount:n,children:r,container:i}=e,a=j(M,t);return(0,O.jsx)(he,{scope:t,forceMount:n,children:D.Children.map(r,e=>(0,O.jsx)(d,{present:n||a.open,children:(0,O.jsx)(u,{asChild:!0,container:i,children:e})}))})};_e.displayName=M;var N=`DialogOverlay`,ve=D.forwardRef((e,t)=>{let n=ge(N,e.__scopeDialog),{forceMount:r=n.forceMount,...i}=e,a=j(N,e.__scopeDialog);return a.modal?(0,O.jsx)(d,{present:r||a.open,children:(0,O.jsx)(be,{...i,ref:t})}):null});ve.displayName=N;var ye=_(`DialogOverlay.RemoveScroll`),be=D.forwardRef((e,t)=>{let{__scopeDialog:n,...i}=e,a=j(N,n);return(0,O.jsx)(r,{as:ye,allowPinchZoom:!0,shards:[a.contentRef],children:(0,O.jsx)(b.div,{"data-state":U(a.open),...i,ref:t,style:{pointerEvents:`auto`,...i.style}})})}),P=`DialogContent`,F=D.forwardRef((e,t)=>{let n=ge(P,e.__scopeDialog),{forceMount:r=n.forceMount,...i}=e,a=j(P,e.__scopeDialog);return(0,O.jsx)(d,{present:r||a.open,children:a.modal?(0,O.jsx)(xe,{...i,ref:t}):(0,O.jsx)(Se,{...i,ref:t})})});F.displayName=P;var xe=D.forwardRef((e,t)=>{let n=j(P,e.__scopeDialog),r=D.useRef(null),i=l(t,n.contentRef,r);return D.useEffect(()=>{let e=r.current;if(e)return o(e)},[]),(0,O.jsx)(I,{...e,ref:i,trapFocus:n.open,disableOutsidePointerEvents:!0,onCloseAutoFocus:c(e.onCloseAutoFocus,e=>{e.preventDefault(),n.triggerRef.current?.focus()}),onPointerDownOutside:c(e.onPointerDownOutside,e=>{let t=e.detail.originalEvent,n=t.button===0&&t.ctrlKey===!0;(t.button===2||n)&&e.preventDefault()}),onFocusOutside:c(e.onFocusOutside,e=>e.preventDefault())})}),Se=D.forwardRef((e,t)=>{let n=j(P,e.__scopeDialog),r=D.useRef(!1),i=D.useRef(!1);return(0,O.jsx)(I,{...e,ref:t,trapFocus:!1,disableOutsidePointerEvents:!1,onCloseAutoFocus:t=>{e.onCloseAutoFocus?.(t),t.defaultPrevented||(r.current||n.triggerRef.current?.focus(),t.preventDefault()),r.current=!1,i.current=!1},onInteractOutside:t=>{e.onInteractOutside?.(t),t.defaultPrevented||(r.current=!0,t.detail.originalEvent.type===`pointerdown`&&(i.current=!0));let a=t.target;n.triggerRef.current?.contains(a)&&t.preventDefault(),t.detail.originalEvent.type===`focusin`&&i.current&&t.preventDefault()}})}),I=D.forwardRef((e,t)=>{let{__scopeDialog:r,trapFocus:i,onOpenAutoFocus:o,onCloseAutoFocus:s,...c}=e,u=j(P,r),d=D.useRef(null),f=l(t,d);return a(),(0,O.jsxs)(O.Fragment,{children:[(0,O.jsx)(n,{asChild:!0,loop:!0,trapped:i,onMountAutoFocus:o,onUnmountAutoFocus:s,children:(0,O.jsx)(oe,{role:`dialog`,id:u.contentId,"aria-describedby":u.descriptionId,"aria-labelledby":u.titleId,"data-state":U(u.open),...c,ref:f,onDismiss:()=>u.onOpenChange(!1)})}),(0,O.jsxs)(O.Fragment,{children:[(0,O.jsx)(we,{titleId:u.titleId}),(0,O.jsx)(Ee,{contentRef:d,descriptionId:u.descriptionId})]})]})}),L=`DialogTitle`,R=D.forwardRef((e,t)=>{let{__scopeDialog:n,...r}=e,i=j(L,n);return(0,O.jsx)(b.h2,{id:i.titleId,...r,ref:t})});R.displayName=L;var z=`DialogDescription`,B=D.forwardRef((e,t)=>{let{__scopeDialog:n,...r}=e,i=j(z,n);return(0,O.jsx)(b.p,{id:i.descriptionId,...r,ref:t})});B.displayName=z;var V=`DialogClose`,H=D.forwardRef((e,t)=>{let{__scopeDialog:n,...r}=e,i=j(V,n);return(0,O.jsx)(b.button,{type:`button`,...r,ref:t,onClick:c(e.onClick,()=>i.onOpenChange(!1))})});H.displayName=V;function U(e){return e?`open`:`closed`}var W=`DialogTitleWarning`,[Ce,G]=E(W,{contentName:P,titleName:L,docsSlug:`dialog`}),we=({titleId:e})=>{let t=G(W),n=`\`${t.contentName}\` requires a \`${t.titleName}\` for the component to be accessible for screen reader users.
2
+
3
+ If you want to hide the \`${t.titleName}\`, you can wrap it with our VisuallyHidden component.
4
+
5
+ For more information, see https://radix-ui.com/primitives/docs/components/${t.docsSlug}`;return D.useEffect(()=>{e&&(document.getElementById(e)||console.error(n))},[n,e]),null},Te=`DialogDescriptionWarning`,Ee=({contentRef:e,descriptionId:t})=>{let n=`Warning: Missing \`Description\` or \`aria-describedby={undefined}\` for {${G(Te).contentName}}.`;return D.useEffect(()=>{let r=e.current?.getAttribute(`aria-describedby`);t&&r&&(document.getElementById(t)||console.warn(n))},[n,e,t]),null},K=fe,De=me,Oe=_e,ke=ve,Ae=F,je=R,Me=B,q=H,Ne=`AlertDialog`,[Pe,Fe]=v(Ne,[A]),J=A(),Ie=e=>{let{__scopeAlertDialog:t,...n}=e,r=J(t);return(0,O.jsx)(K,{...r,...n,modal:!0})};Ie.displayName=Ne;var Le=`AlertDialogTrigger`,Re=D.forwardRef((e,t)=>{let{__scopeAlertDialog:n,...r}=e,i=J(n);return(0,O.jsx)(De,{...i,...r,ref:t})});Re.displayName=Le;var ze=`AlertDialogPortal`,Be=e=>{let{__scopeAlertDialog:t,...n}=e,r=J(t);return(0,O.jsx)(Oe,{...r,...n})};Be.displayName=ze;var Ve=`AlertDialogOverlay`,He=D.forwardRef((e,t)=>{let{__scopeAlertDialog:n,...r}=e,i=J(n);return(0,O.jsx)(ke,{...i,...r,ref:t})});He.displayName=Ve;var Y=`AlertDialogContent`,[Ue,We]=Pe(Y),Ge=x(`AlertDialogContent`),Ke=D.forwardRef((e,t)=>{let{__scopeAlertDialog:n,children:r,...i}=e,a=J(n),o=D.useRef(null),s=l(t,o),u=D.useRef(null);return(0,O.jsx)(Ce,{contentName:Y,titleName:qe,docsSlug:`alert-dialog`,children:(0,O.jsx)(Ue,{scope:n,cancelRef:u,children:(0,O.jsxs)(Ae,{role:`alertdialog`,...a,...i,ref:s,onOpenAutoFocus:c(i.onOpenAutoFocus,e=>{e.preventDefault(),u.current?.focus({preventScroll:!0})}),onPointerDownOutside:e=>e.preventDefault(),onInteractOutside:e=>e.preventDefault(),children:[(0,O.jsx)(Ge,{children:r}),(0,O.jsx)(et,{contentRef:o})]})})})});Ke.displayName=Y;var qe=`AlertDialogTitle`,Je=D.forwardRef((e,t)=>{let{__scopeAlertDialog:n,...r}=e,i=J(n);return(0,O.jsx)(je,{...i,...r,ref:t})});Je.displayName=qe;var Ye=`AlertDialogDescription`,Xe=D.forwardRef((e,t)=>{let{__scopeAlertDialog:n,...r}=e,i=J(n);return(0,O.jsx)(Me,{...i,...r,ref:t})});Xe.displayName=Ye;var Ze=`AlertDialogAction`,Qe=D.forwardRef((e,t)=>{let{__scopeAlertDialog:n,...r}=e,i=J(n);return(0,O.jsx)(q,{...i,...r,ref:t})});Qe.displayName=Ze;var $e=`AlertDialogCancel`,X=D.forwardRef((e,t)=>{let{__scopeAlertDialog:n,...r}=e,{cancelRef:i}=We($e,n),a=J(n),o=l(t,i);return(0,O.jsx)(q,{...a,...r,ref:o})});X.displayName=$e;var et=({contentRef:e})=>{let t=`\`${Y}\` requires a description for the component to be accessible for screen reader users.
6
+
7
+ You can add a description to the \`${Y}\` by passing a \`${Ye}\` component as a child, which also benefits sighted users by adding visible context to the dialog.
8
+
9
+ Alternatively, you can use your own component as a description by assigning it an \`id\` and passing the same value to the \`aria-describedby\` prop in \`${Y}\`. If the description is confusing or duplicative for sighted users, you can use the \`@radix-ui/react-visually-hidden\` primitive as a wrapper around your description component.
10
+
11
+ For more information, see https://radix-ui.com/primitives/docs/components/alert-dialog`;return D.useEffect(()=>{document.getElementById(e.current?.getAttribute(`aria-describedby`))||console.warn(t)},[t,e]),null},tt=Ie,nt=Be,rt=He,it=Ke,at=Qe,ot=X,st=Je,ct=Xe,Z=`rovingFocusGroup.onEntryFocus`,lt={bubbles:!1,cancelable:!0},Q=`RovingFocusGroup`,[$,ut,dt]=i(Q),[ft,pt]=v(Q,[dt]),[mt,ht]=ft(Q),gt=D.forwardRef((e,t)=>(0,O.jsx)($.Provider,{scope:e.__scopeRovingFocusGroup,children:(0,O.jsx)($.Slot,{scope:e.__scopeRovingFocusGroup,children:(0,O.jsx)(_t,{...e,ref:t})})}));gt.displayName=Q;var _t=D.forwardRef((e,n)=>{let{__scopeRovingFocusGroup:r,orientation:i,loop:a=!1,dir:o,currentTabStopId:s,defaultCurrentTabStopId:u,onCurrentTabStopIdChange:d,onEntryFocus:f,preventScrollOnEntryFocus:p=!1,...m}=e,h=D.useRef(null),g=l(n,h),_=t(o),[v,x]=y({prop:s,defaultProp:u??null,onChange:d,caller:Q}),[S,C]=D.useState(!1),w=ee(f),te=ut(r),T=D.useRef(!1),[ne,E]=D.useState(0);return D.useEffect(()=>{let e=h.current;if(e)return e.addEventListener(Z,w),()=>e.removeEventListener(Z,w)},[w]),(0,O.jsx)(mt,{scope:r,orientation:i,dir:_,loop:a,currentTabStopId:v,onItemFocus:D.useCallback(e=>x(e),[x]),onItemShiftTab:D.useCallback(()=>C(!0),[]),onFocusableItemAdd:D.useCallback(()=>E(e=>e+1),[]),onFocusableItemRemove:D.useCallback(()=>E(e=>e-1),[]),children:(0,O.jsx)(b.div,{tabIndex:S||ne===0?-1:0,"data-orientation":i,...m,ref:g,style:{outline:`none`,...e.style},onMouseDown:c(e.onMouseDown,()=>{T.current=!0}),onFocus:c(e.onFocus,e=>{let t=!T.current;if(e.target===e.currentTarget&&t&&!S){let t=new CustomEvent(Z,lt);if(e.currentTarget.dispatchEvent(t),!t.defaultPrevented){let e=te().filter(e=>e.focusable);Ct([e.find(e=>e.active),e.find(e=>e.id===v),...e].filter(Boolean).map(e=>e.ref.current),p)}}T.current=!1}),onBlur:c(e.onBlur,()=>C(!1))})})}),vt=`RovingFocusGroupItem`,yt=D.forwardRef((e,t)=>{let{__scopeRovingFocusGroup:n,focusable:r=!0,active:i=!1,tabStopId:a,children:o,...s}=e,l=f(),u=a||l,d=ht(vt,n),p=d.currentTabStopId===u,m=ut(n),{onFocusableItemAdd:h,onFocusableItemRemove:g,currentTabStopId:_}=d;return D.useEffect(()=>{if(r)return h(),()=>g()},[r,h,g]),(0,O.jsx)($.ItemSlot,{scope:n,id:u,focusable:r,active:i,children:(0,O.jsx)(b.span,{tabIndex:p?0:-1,"data-orientation":d.orientation,...s,ref:t,onMouseDown:c(e.onMouseDown,e=>{r?d.onItemFocus(u):e.preventDefault()}),onFocus:c(e.onFocus,()=>d.onItemFocus(u)),onKeyDown:c(e.onKeyDown,e=>{if(e.key===`Tab`&&e.shiftKey){d.onItemShiftTab();return}if(e.target!==e.currentTarget)return;let t=St(e,d.orientation,d.dir);if(t!==void 0){if(e.metaKey||e.ctrlKey||e.altKey||e.shiftKey)return;e.preventDefault();let n=m().filter(e=>e.focusable).map(e=>e.ref.current);if(t===`last`)n.reverse();else if(t===`prev`||t===`next`){t===`prev`&&n.reverse();let r=n.indexOf(e.currentTarget);n=d.loop?wt(n,r+1):n.slice(r+1)}setTimeout(()=>Ct(n))}}),children:typeof o==`function`?o({isCurrentTabStop:p,hasTabStop:_!=null}):o})})});yt.displayName=vt;var bt={ArrowLeft:`prev`,ArrowUp:`prev`,ArrowRight:`next`,ArrowDown:`next`,PageUp:`first`,Home:`first`,PageDown:`last`,End:`last`};function xt(e,t){return t===`rtl`?e===`ArrowLeft`?`ArrowRight`:e===`ArrowRight`?`ArrowLeft`:e:e}function St(e,t,n){let r=xt(e.key,n);if(!(t===`vertical`&&[`ArrowLeft`,`ArrowRight`].includes(r))&&!(t===`horizontal`&&[`ArrowUp`,`ArrowDown`].includes(r)))return bt[r]}function Ct(e,t=!1){let n=document.activeElement;for(let r of e)if(r===n||(r.focus({preventScroll:t}),document.activeElement!==n))return}function wt(e,t){return e.map((n,r)=>e[(t+r)%e.length])}var Tt=gt,Et=yt;function Dt({...e}){return(0,O.jsx)(tt,{"data-slot":`alert-dialog`,...e})}function Ot({...e}){return(0,O.jsx)(nt,{"data-slot":`alert-dialog-portal`,...e})}function kt({className:e,...t}){return(0,O.jsx)(rt,{"data-slot":`alert-dialog-overlay`,className:m(`data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50 data-[state=closed]:animate-out data-[state=open]:animate-in`,e),...t})}function At({className:e,size:t=`default`,...n}){return(0,O.jsxs)(Ot,{children:[(0,O.jsx)(kt,{}),(0,O.jsx)(it,{"data-slot":`alert-dialog-content`,"data-size":t,className:m(`group/alert-dialog-content data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border bg-background p-6 shadow-lg duration-200 data-[size=sm]:max-w-xs data-[state=closed]:animate-out data-[state=open]:animate-in data-[size=default]:sm:max-w-lg`,e),...n})]})}function jt({className:e,...t}){return(0,O.jsx)(`div`,{"data-slot":`alert-dialog-header`,className:m(`grid grid-rows-[auto_1fr] place-items-center gap-1.5 text-center has-data-[slot=alert-dialog-media]:grid-rows-[auto_auto_1fr] has-data-[slot=alert-dialog-media]:gap-x-6 sm:group-data-[size=default]/alert-dialog-content:place-items-start sm:group-data-[size=default]/alert-dialog-content:text-left sm:group-data-[size=default]/alert-dialog-content:has-data-[slot=alert-dialog-media]:grid-rows-[auto_1fr]`,e),...t})}function Mt({className:e,...t}){return(0,O.jsx)(`div`,{"data-slot":`alert-dialog-footer`,className:m(`flex flex-col-reverse gap-2 group-data-[size=sm]/alert-dialog-content:grid group-data-[size=sm]/alert-dialog-content:grid-cols-2 sm:flex-row sm:justify-end`,e),...t})}function Nt({className:e,...t}){return(0,O.jsx)(st,{"data-slot":`alert-dialog-title`,className:m(`font-semibold text-lg sm:group-data-[size=default]/alert-dialog-content:group-has-data-[slot=alert-dialog-media]/alert-dialog-content:col-start-2`,e),...t})}function Pt({className:e,...t}){return(0,O.jsx)(ct,{"data-slot":`alert-dialog-description`,className:m(`text-muted-foreground text-sm`,e),...t})}function Ft({className:e,variant:t=`default`,size:n=`default`,...r}){return(0,O.jsx)(T,{variant:t,size:n,asChild:!0,children:(0,O.jsx)(at,{"data-slot":`alert-dialog-action`,className:m(e),...r})})}function It({className:e,variant:t=`outline`,size:n=`default`,...r}){return(0,O.jsx)(T,{variant:t,size:n,asChild:!0,children:(0,O.jsx)(ot,{"data-slot":`alert-dialog-cancel`,className:m(e),...r})})}function Lt({confirmLabel:t=`Delete`,description:n,open:r,showDeleteSessionFilesOption:i=!1,title:a,onConfirm:o,onOpenChange:s}){let c=(0,D.useId)(),l=(0,D.useId)(),[u,d]=(0,D.useState)(!1);return(0,D.useEffect)(()=>{r||d(!1)},[r]),(0,O.jsx)(Dt,{open:r,onOpenChange:s,children:(0,O.jsxs)(At,{className:`border-[var(--border)] bg-[var(--panel)] text-[var(--foreground)]`,children:[(0,O.jsxs)(jt,{children:[(0,O.jsx)(Nt,{children:a}),(0,O.jsx)(Pt,{className:`text-[var(--muted-foreground)]`,children:n})]}),i?(0,O.jsxs)(`div`,{className:`flex items-start gap-3 rounded-xl border border-[var(--border)] bg-[var(--background)]/70 px-4 py-3 text-sm`,children:[(0,O.jsx)(e,{"aria-describedby":l,checked:u,id:c,onCheckedChange:e=>d(e===!0)}),(0,O.jsxs)(`span`,{className:`space-y-1`,children:[(0,O.jsx)(`label`,{className:`block font-medium`,htmlFor:c,children:`Delete Session files`}),(0,O.jsx)(`span`,{className:`block text-[var(--muted-foreground)] text-xs`,id:l,children:`Remove the rollout JSONL from disk as well, so Codex cannot backfill this thread later.`})]})]}):null,(0,O.jsxs)(Mt,{children:[(0,O.jsx)(It,{className:`border-[var(--border)]`,children:`Cancel`}),(0,O.jsx)(Ft,{className:`bg-[var(--destructive)] text-[var(--destructive-foreground)] hover:bg-[var(--destructive)]/90`,onClick:()=>o({deleteSessionFiles:u}),children:t})]})]})})}export{q as a,ke as c,je as d,le as f,pt as i,Oe as l,Et as n,Ae as o,ce as p,Tt as r,Me as s,Lt as t,K as u};
@@ -0,0 +1 @@
1
+ import{a as e,c as t,d as n,l as r,o as i,s as a,u as o}from"./delete-confirm-dialog-CcZaRX33.js";import{t as s}from"./checkbox-DXM4lkJq.js";import{a as c,i as l,n as u,r as d,t as f}from"./select-CFim44gT.js";import{H as p,W as m,dt as h,g,mt as _,pt as v}from"./index-DdJ7ahIt.js";var y=m(`download`,[[`path`,{d:`M12 15V3`,key:`m9g1x1`}],[`path`,{d:`M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4`,key:`ih7n3h`}],[`path`,{d:`m7 10 5 5 5-5`,key:`brsn70`}]]),b=m(`x`,[[`path`,{d:`M18 6 6 18`,key:`1bl5f8`}],[`path`,{d:`m6 6 12 12`,key:`d8bk6v`}]]),x=_(v(),1),S=h();function C({...e}){return(0,S.jsx)(o,{"data-slot":`dialog`,...e})}function w({...e}){return(0,S.jsx)(r,{"data-slot":`dialog-portal`,...e})}function T({className:e,...n}){return(0,S.jsx)(t,{"data-slot":`dialog-overlay`,className:p(`data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50 data-[state=closed]:animate-out data-[state=open]:animate-in`,e),...n})}function E({className:t,children:n,showCloseButton:r=!0,...a}){return(0,S.jsxs)(w,{"data-slot":`dialog-portal`,children:[(0,S.jsx)(T,{}),(0,S.jsxs)(i,{"data-slot":`dialog-content`,className:p(`data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border bg-background p-6 shadow-lg outline-none duration-200 data-[state=closed]:animate-out data-[state=open]:animate-in sm:max-w-lg`,t),...a,children:[n,r&&(0,S.jsxs)(e,{"data-slot":`dialog-close`,className:`absolute top-4 right-4 rounded-xs opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-hidden focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground [&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0`,children:[(0,S.jsx)(b,{}),(0,S.jsx)(`span`,{className:`sr-only`,children:`Close`})]})]})]})}function D({className:e,...t}){return(0,S.jsx)(`div`,{"data-slot":`dialog-header`,className:p(`flex flex-col gap-2 text-center sm:text-left`,e),...t})}function O({className:t,showCloseButton:n=!1,children:r,...i}){return(0,S.jsxs)(`div`,{"data-slot":`dialog-footer`,className:p(`flex flex-col-reverse gap-2 sm:flex-row sm:justify-end`,t),...i,children:[r,n&&(0,S.jsx)(e,{asChild:!0,children:(0,S.jsx)(g,{variant:`outline`,children:`Close`})})]})}function k({className:e,...t}){return(0,S.jsx)(n,{"data-slot":`dialog-title`,className:p(`font-semibold text-lg leading-none`,e),...t})}function A({className:e,...t}){return(0,S.jsx)(a,{"data-slot":`dialog-description`,className:p(`text-muted-foreground text-sm`,e),...t})}function j({open:e,pending:t=!1,title:n=`Export thread`,onExport:r,onOpenChange:i}){let[a,o]=(0,x.useState)(`md`),[p,m]=(0,x.useState)(!1),[h,_]=(0,x.useState)(!1),[v,y]=(0,x.useState)(!0);return(0,S.jsx)(C,{open:e,onOpenChange:i,children:(0,S.jsxs)(E,{className:`border-[var(--border)] bg-[var(--panel)] text-[var(--foreground)]`,children:[(0,S.jsxs)(D,{children:[(0,S.jsx)(k,{children:n}),(0,S.jsx)(A,{className:`text-[var(--muted-foreground)]`,children:`Choose the transcript format and whether the export includes tool calls.`})]}),(0,S.jsxs)(`div`,{className:`space-y-5 py-2`,children:[(0,S.jsxs)(`div`,{className:`space-y-2`,children:[(0,S.jsx)(`label`,{className:`font-medium text-sm`,htmlFor:`output-format`,children:`Output format`}),(0,S.jsxs)(f,{value:a,onValueChange:e=>o(e),children:[(0,S.jsx)(l,{id:`output-format`,className:`border-[var(--border)] bg-[var(--panel-secondary)]`,children:(0,S.jsx)(c,{placeholder:`Choose a format`})}),(0,S.jsxs)(u,{children:[(0,S.jsx)(d,{value:`md`,children:`Markdown (.md)`}),(0,S.jsx)(d,{value:`txt`,children:`Plain text (.txt)`})]})]})]}),(0,S.jsxs)(`div`,{className:`flex items-center gap-3 rounded-2xl border border-[var(--border)] bg-[var(--panel-secondary)] p-3`,children:[(0,S.jsx)(s,{"aria-label":`Optimized transcript`,checked:p,onCheckedChange:e=>m(e===!0)}),(0,S.jsxs)(`span`,{className:`space-y-1`,children:[(0,S.jsx)(`span`,{className:`block font-medium text-sm`,children:`Optimized transcript`}),(0,S.jsx)(`span`,{className:`block text-[var(--muted-foreground)] text-sm`,children:`Removes metadata and condenses the transcript for readability and token efficiency.`})]})]}),(0,S.jsxs)(`div`,{className:`flex items-center gap-3 rounded-2xl border border-[var(--border)] bg-[var(--panel-secondary)] p-3`,children:[(0,S.jsx)(s,{"aria-label":`Include commentary`,checked:h,onCheckedChange:e=>_(e===!0)}),(0,S.jsxs)(`span`,{className:`space-y-1`,children:[(0,S.jsx)(`span`,{className:`block font-medium text-sm`,children:`Include commentary`}),(0,S.jsx)(`span`,{className:`block text-[var(--muted-foreground)] text-sm`,children:`Includes assistant commentary-phase updates in the exported transcript.`})]})]}),(0,S.jsxs)(`div`,{className:`flex items-center gap-3 rounded-2xl border border-[var(--border)] bg-[var(--panel-secondary)] p-3`,children:[(0,S.jsx)(s,{"aria-label":`Include tool calls`,checked:v,onCheckedChange:e=>y(e===!0)}),(0,S.jsxs)(`span`,{className:`space-y-1`,children:[(0,S.jsx)(`span`,{className:`block font-medium text-sm`,children:`Include tool calls`}),(0,S.jsx)(`span`,{className:`block text-[var(--muted-foreground)] text-sm`,children:`Includes tool-call summaries and tool-output summaries in the export.`})]})]})]}),(0,S.jsxs)(O,{children:[(0,S.jsx)(g,{className:`rounded-full`,variant:`outline`,onClick:()=>i(!1),children:`Cancel`}),(0,S.jsx)(g,{className:`rounded-full`,disabled:t,onClick:()=>r({includeCommentary:h,includeTools:v,optimized:p,outputFormat:a}),children:t?`Exporting...`:`Download export`})]})]})})}var M=6,N=250,P=3e4,F=(e,t,n,r)=>{e[t](`[spiracha:download] ${n}`,r)},I=e=>new Promise(t=>{window.setTimeout(t,e)}),L=(e,t,n)=>{let r=e.createElement(`a`);r.href=t,r.download=n,e.body.append(r),r.click(),r.remove()},R=e=>e>=200&&e<400||e===405,z=async(e,t,{fetchImpl:n=fetch,logger:r=console,maxAttempts:i=M,retryDelayMs:a=N,sleep:o=I}={})=>{for(let s=1;s<=i;s+=1){try{let i=await n(e,{cache:`no-store`,method:`HEAD`});if(R(i.status)){F(r,`info`,`url_ready`,{attempt:s,downloadUrl:e,fileName:t,status:i.status});return}F(r,`warn`,`url_not_ready`,{attempt:s,downloadUrl:e,fileName:t,status:i.status})}catch(n){F(r,`warn`,`url_probe_failed`,{attempt:s,downloadUrl:e,error:n instanceof Error?n.message:String(n),fileName:t})}s<i&&await o(a)}throw Error(`Download file was not available after ${i} attempts: ${t}`)},B=async(e,t,{documentRef:n=document,fetchImpl:r=fetch,logger:i=console,maxAttempts:a=M,retryDelayMs:o=N,sleep:s=I}={})=>{F(i,`info`,`start`,{downloadUrl:t,fileName:e}),await z(t,e,{fetchImpl:r,logger:i,maxAttempts:a,retryDelayMs:o,sleep:s}),L(n,t,e),F(i,`info`,`triggered`,{downloadUrl:t,fileName:e})},V=(e,t,n,{createObjectUrl:r=e=>URL.createObjectURL(e),documentRef:i=document,logger:a=console,revokeDelayMs:o=P,revokeObjectUrl:s=e=>URL.revokeObjectURL(e),schedule:c=(e,t)=>{window.setTimeout(e,t)}}={})=>{F(a,`info`,`inline_start`,{fileName:e,mimeType:n,sizeBytes:t.length});let l=r(new Blob([t],{type:n}));L(i,l,e),c(()=>s(l),o),F(a,`info`,`inline_triggered`,{fileName:e,mimeType:n,sizeBytes:t.length})};export{y as a,b as i,B as n,j as r,V as t};