spiracha 1.0.0 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +28 -1
- package/README.md +47 -7
- package/apps/ui/AGENTS.md +70 -0
- package/apps/ui/README.md +72 -0
- package/apps/ui/dist/client/assets/_threadId-CAIeH5mq.js +1 -0
- package/apps/ui/dist/client/assets/analytics-BjYaHqXk.js +1 -0
- package/apps/ui/dist/client/assets/checkbox-wPoGG3of.js +1 -0
- package/apps/ui/dist/client/assets/data-table-6yDgAdtf.js +4 -0
- package/apps/ui/dist/client/assets/delete-confirm-dialog-DJUAk7ha.js +11 -0
- package/apps/ui/dist/client/assets/download-BhWd-Pm5.js +1 -0
- package/apps/ui/dist/client/assets/es2015-BlyMI4CF.js +41 -0
- package/apps/ui/dist/client/assets/formatters-BxjZwWSE.js +1 -0
- package/apps/ui/dist/client/assets/index-T01rPkb4.js +22 -0
- package/apps/ui/dist/client/assets/input-B3YN8gzg.js +1 -0
- package/apps/ui/dist/client/assets/metric-card-BWW7TWER.js +1 -0
- package/apps/ui/dist/client/assets/page-header-BZ8Gnxgs.js +1 -0
- package/apps/ui/dist/client/assets/projects._project-B7XcpoLt.js +1 -0
- package/apps/ui/dist/client/assets/projects._project-EfBhCHPY.js +1 -0
- package/apps/ui/dist/client/assets/projects.index-4vfIwLjw.js +1 -0
- package/apps/ui/dist/client/assets/projects.index-DzEZ4pAJ.js +1 -0
- package/apps/ui/dist/client/assets/routes-CWCCZykE.js +1 -0
- package/apps/ui/dist/client/assets/select-DLXGsyZ4.js +1 -0
- package/apps/ui/dist/client/assets/settings-b0Xthfae.js +1 -0
- package/apps/ui/dist/client/assets/styles-8Wtc8YJw.css +1 -0
- package/apps/ui/dist/client/assets/threads._threadId-CgtoCqTb.js +1 -0
- package/apps/ui/dist/client/assets/threads._threadId-DBiDb38K.js +7 -0
- package/apps/ui/dist/client/favicon.ico +0 -0
- package/apps/ui/dist/client/logo192.png +0 -0
- package/apps/ui/dist/client/logo512.png +0 -0
- package/apps/ui/dist/client/manifest.json +25 -0
- package/apps/ui/dist/client/robots.txt +3 -0
- package/apps/ui/dist/server/assets/__23tanstack-start-plugin-adapters-BzCA6dXo.js +5 -0
- package/apps/ui/dist/server/assets/_tanstack-start-manifest_v-BjsXNYgm.js +99 -0
- package/apps/ui/dist/server/assets/_threadId-B6SrBR9E.js +6 -0
- package/apps/ui/dist/server/assets/analytics-Br_fZB6a.js +139 -0
- package/apps/ui/dist/server/assets/button-CmTDnzOn.js +46 -0
- package/apps/ui/dist/server/assets/checkbox-C0hovF41.js +19 -0
- package/apps/ui/dist/server/assets/codex-queries-CAF6HYiG.js +109 -0
- package/apps/ui/dist/server/assets/codex-server-Cqh0hb93.js +1995 -0
- package/apps/ui/dist/server/assets/data-table-Cdct823O.js +189 -0
- package/apps/ui/dist/server/assets/delete-confirm-dialog-CWqcTXTF.js +139 -0
- package/apps/ui/dist/server/assets/download-CzHmFWGk.js +286 -0
- package/apps/ui/dist/server/assets/formatters-B6o5pTY9.js +72 -0
- package/apps/ui/dist/server/assets/input-B4tEzctc.js +46 -0
- package/apps/ui/dist/server/assets/loading-panel-DbLdvjtR.js +27 -0
- package/apps/ui/dist/server/assets/metric-card-ByEeLu0r.js +23 -0
- package/apps/ui/dist/server/assets/page-header-CxdZM86z.js +25 -0
- package/apps/ui/dist/server/assets/path-transforms-DD1e7rhY.js +31 -0
- package/apps/ui/dist/server/assets/projects._project-Bwf6iJC-.js +335 -0
- package/apps/ui/dist/server/assets/projects._project-CLSohrBp.js +26 -0
- package/apps/ui/dist/server/assets/projects._project-DdVSdfPe.js +18 -0
- package/apps/ui/dist/server/assets/projects.index-CaplpeMy.js +26 -0
- package/apps/ui/dist/server/assets/projects.index-DKeVeqUZ.js +171 -0
- package/apps/ui/dist/server/assets/router-ve2Hrl2Y.js +307 -0
- package/apps/ui/dist/server/assets/routes-BJyx5OmO.js +34 -0
- package/apps/ui/dist/server/assets/routes-pkOwjjYc.js +168 -0
- package/apps/ui/dist/server/assets/select-GW76p-ld.js +76 -0
- package/apps/ui/dist/server/assets/settings-MvWDgc1u.js +100 -0
- package/apps/ui/dist/server/assets/settings-store-DpEJEQ7M.js +52 -0
- package/apps/ui/dist/server/assets/sqlite-error-LZDrnxdd.js +13 -0
- package/apps/ui/dist/server/assets/start-BAvbjjfs.js +4 -0
- package/apps/ui/dist/server/assets/threads._threadId-BSSK4nkI.js +26 -0
- package/apps/ui/dist/server/assets/threads._threadId-D3PYZIwl.js +18 -0
- package/apps/ui/dist/server/assets/threads._threadId-D3xaWM86.js +1037 -0
- package/apps/ui/dist/server/assets/utils-C_uf36nf.js +8 -0
- package/apps/ui/dist/server/server.js +5678 -0
- package/package.json +47 -7
- package/src/export-chats.ts +1 -14
- package/src/lib/codex-analytics.ts +100 -0
- package/src/lib/codex-browser-db.ts +518 -0
- package/src/lib/codex-browser-export.ts +418 -0
- package/src/lib/codex-browser-types.ts +224 -0
- package/src/lib/codex-exporter-cli.ts +5 -0
- package/src/lib/codex-exporter-transcript.ts +143 -32
- package/src/lib/codex-exporter-types.ts +8 -0
- package/src/lib/codex-thread-cache.ts +58 -0
- package/src/lib/codex-thread-parser.ts +604 -0
- package/src/lib/interactive-cli.ts +5 -13
- package/src/lib/native-open.ts +54 -0
- package/src/lib/path-transforms.ts +45 -0
- package/src/lib/shared.ts +37 -1
- package/src/lib/sqlite-error.ts +14 -0
- package/src/lib/sqlite-retry.ts +39 -0
- package/src/lib/ui-cache.ts +96 -0
- package/src/lib/ui-export-files.ts +77 -0
- package/src/mcp-server.ts +1 -0
- package/src/spiracha.ts +14 -1
- 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,31 +58,52 @@ 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
|
|
85
109
|
rtk bun run test:perf
|
|
@@ -88,13 +112,14 @@ rtk bun start -- --help
|
|
|
88
112
|
rtk bun start --interactive
|
|
89
113
|
rtk bun run export:claude -- --help
|
|
90
114
|
rtk bun run mcp
|
|
115
|
+
rtk bun run ui:dev
|
|
91
116
|
```
|
|
92
117
|
|
|
93
118
|
Packed tarball smoke test:
|
|
94
119
|
|
|
95
120
|
```bash
|
|
96
121
|
rtk bun pm pack
|
|
97
|
-
package_tgz="$PWD/
|
|
122
|
+
package_tgz="$PWD/spiracha-<version>.tgz"
|
|
98
123
|
tmp_dir=$(mktemp -d)
|
|
99
124
|
cd "$tmp_dir"
|
|
100
125
|
printf '{"name":"codex-chats-smoke","private":true}\n' > package.json
|
|
@@ -126,3 +151,5 @@ rtk bun run export:claude -- /path/to/export-dir --output-format txt
|
|
|
126
151
|
- Codex MCP exports must be scoped by at least one of `deeplinks`, `project`, or `cwd`.
|
|
127
152
|
- `txt` output is intentionally real plain text, not Markdown with a `.txt` extension.
|
|
128
153
|
- The published package is Bun-first. `bin` entrypoints target Bun shebang execution.
|
|
154
|
+
- The UI package runs `vite` through `bun --bun ...` because its server functions depend on Bun-only modules like `bun:sqlite`.
|
|
155
|
+
- `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.md)
|
|
6
6
|
[](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](
|
|
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,11 @@ 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 ui:dev
|
|
171
|
+
cd apps/ui && bun run test
|
|
136
172
|
bun run test:perf
|
|
137
173
|
bun start
|
|
138
174
|
bun start --interactive
|
|
@@ -145,23 +181,27 @@ Packed-tarball smoke test before publishing:
|
|
|
145
181
|
|
|
146
182
|
```bash
|
|
147
183
|
bun pm pack
|
|
148
|
-
package_tgz="$PWD/
|
|
184
|
+
package_tgz="$PWD/spiracha-<version>.tgz"
|
|
149
185
|
tmp_dir=$(mktemp -d)
|
|
150
186
|
cd "$tmp_dir"
|
|
151
187
|
printf '{"name":"codex-chats-smoke","private":true}\n' > package.json
|
|
152
188
|
bun add "$package_tgz"
|
|
153
|
-
bunx spiracha --help
|
|
154
|
-
bunx spiracha
|
|
155
|
-
bunx
|
|
156
|
-
bunx codex-chats
|
|
189
|
+
bunx --package "$package_tgz" spiracha --help
|
|
190
|
+
bunx --package "$package_tgz" spiracha ui --help
|
|
191
|
+
bunx --package "$package_tgz" spiracha claude --help
|
|
192
|
+
bunx --package "$package_tgz" codex-chats --help
|
|
193
|
+
bunx --package "$package_tgz" codex-chats-claude --help
|
|
157
194
|
```
|
|
158
195
|
|
|
159
196
|
## Project Layout
|
|
160
197
|
|
|
198
|
+
- `apps/ui/`: TanStack Start browser app for browsing, analytics, export, and delete flows
|
|
161
199
|
- `src/export-chats.ts`: Codex CLI wrapper
|
|
162
200
|
- `src/export-claude.ts`: Claude CLI wrapper
|
|
163
201
|
- `src/mcp-server.ts`: MCP server entrypoint
|
|
164
202
|
- `src/lib/codex-exporter-*.ts`: Codex exporter modules
|
|
203
|
+
- `src/lib/codex-browser-*.ts`: shared browser/UI data, analytics, and export helpers
|
|
204
|
+
- `src/lib/codex-thread-*.ts`: structured transcript parsing and caching helpers
|
|
165
205
|
- `src/lib/claude-exporter.ts`: Claude exporter implementation
|
|
166
206
|
- `plugins/codex-chats-export/`: local Codex plugin bundle
|
|
167
207
|
|
|
@@ -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-BxjZwWSE.js";import{n as r,t as i}from"./data-table-6yDgAdtf.js";import{a,i as o,n as s,r as c,t as l}from"./select-DLXGsyZ4.js";import{dt as u,i as d,mt as f,pt as p,s as m}from"./index-T01rPkb4.js";import{t as h}from"./metric-card-BWW7TWER.js";import{t as g}from"./page-header-BZ8Gnxgs.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-T01rPkb4.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-wPoGG3of.js";import{H as t,W as n,dt as r,mt as i,pt as a}from"./index-T01rPkb4.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-wPoGG3of.js";import{a as t,i as n,n as r,o as i,r as a,t as o}from"./es2015-BlyMI4CF.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-T01rPkb4.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-DJUAk7ha.js";import{t as s}from"./checkbox-wPoGG3of.js";import{a as c,i as l,n as u,r as d,t as f}from"./select-DLXGsyZ4.js";import{H as p,W as m,dt as h,g,mt as _,pt as v}from"./index-T01rPkb4.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,{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,{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,{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};
|