codexui-android 0.1.72
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/LICENSE +11 -0
- package/README.md +256 -0
- package/dist/assets/ReviewPane-CyugWwTM.css +1 -0
- package/dist/assets/ReviewPane-jxaR-1Q1.js +1 -0
- package/dist/assets/SkillsHub-Bg1Le103.css +1 -0
- package/dist/assets/SkillsHub-BkLIHbuN.js +2 -0
- package/dist/assets/ThreadConversation-1LJi-Pk9.js +36 -0
- package/dist/assets/ThreadConversation-Ct-Pc8bX.css +1 -0
- package/dist/assets/common-BeuopZEI.js +5 -0
- package/dist/assets/index-1Zt4k_jO.css +1 -0
- package/dist/assets/index-Tdn545FN.js +62 -0
- package/dist/assets/index.esm-BilMXo9u.js +376 -0
- package/dist/assets/index.esm-DtVW_dfU.js +1651 -0
- package/dist/assets/index.esm-mbv_PYjX.js +16 -0
- package/dist/icons/apple-touch-icon.png +0 -0
- package/dist/icons/codexui-icon.svg +52 -0
- package/dist/icons/maskable-512x512.png +0 -0
- package/dist/icons/pwa-192x192.png +0 -0
- package/dist/icons/pwa-512x512.png +0 -0
- package/dist/icons/pwa-icon.svg +38 -0
- package/dist/icons/pwa-maskable.svg +36 -0
- package/dist/index.html +21 -0
- package/dist/manifest.webmanifest +36 -0
- package/dist/sw.js +73 -0
- package/dist-cli/index.js +6601 -0
- package/dist-cli/index.js.map +1 -0
- package/package.json +69 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright 2026 Pavel Voronin, Igor Levochkin
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the βSoftwareβ), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
6
|
+
|
|
7
|
+
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
|
8
|
+
|
|
9
|
+
THE SOFTWARE IS PROVIDED βAS ISβ, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
10
|
+
|
|
11
|
+
|
package/README.md
ADDED
|
@@ -0,0 +1,256 @@
|
|
|
1
|
+
# π₯ codexapp
|
|
2
|
+
|
|
3
|
+
### π Run Codex App UI Anywhere: Linux, Windows, or Termux on Android π
|
|
4
|
+
|
|
5
|
+
[](https://www.npmjs.com/package/codexapp)
|
|
6
|
+
[](#-quick-start)
|
|
7
|
+
[](https://nodejs.org/)
|
|
8
|
+
[](./LICENSE)
|
|
9
|
+
|
|
10
|
+
> **Codex UI in your browser. No drama. One command.**
|
|
11
|
+
>
|
|
12
|
+
> **Yes, that is your Codex desktop app experience exposed over web UI. Yes, it runs cross-platform.**
|
|
13
|
+
|
|
14
|
+
```text
|
|
15
|
+
βββββββ βββββββ βββββββ βββββββββββ ββββββ ββββββ
|
|
16
|
+
ββββββββββββββββββββββββββββββββββββββββββββ ββββββ
|
|
17
|
+
βββ βββ ββββββ βββββββββ ββββββ βββ ββββββ
|
|
18
|
+
βββ βββ ββββββ βββββββββ ββββββ βββ ββββββ
|
|
19
|
+
βββββββββββββββββββββββββββββββββββββ βββββββββββββββ
|
|
20
|
+
βββββββ βββββββ βββββββ βββββββββββ βββ βββββββ βββ
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## π€― What Is This?
|
|
26
|
+
**`codexapp`** is a lightweight bridge that gives you a browser-accessible UI for Codex app-server workflows.
|
|
27
|
+
|
|
28
|
+
You run one command. It starts a local web server. You open it from your machine, your LAN, or wherever your setup allows.
|
|
29
|
+
|
|
30
|
+
**TL;DR π§ : Codex app UI, unlocked for Linux, Windows, and Termux-powered Android setups.**
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
## β‘ Quick Start
|
|
35
|
+
> **The main event.**
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
# π Run instantly (recommended)
|
|
39
|
+
npx codexapp
|
|
40
|
+
|
|
41
|
+
# π Then open in browser
|
|
42
|
+
# http://localhost:18923
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
By default, `codexapp` now also starts:
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
cloudflared tunnel --url http://localhost:<port>
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
It prints the tunnel URL, terminal QR code, and password together in startup output.
|
|
52
|
+
Use `--no-tunnel` to disable this behavior.
|
|
53
|
+
|
|
54
|
+
If you are using a provider or AI gateway that is already authenticated and do not want `codexapp` to force `codex login` during startup, use:
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
npx codexapp --no-login
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
### Linux π§
|
|
61
|
+
```bash
|
|
62
|
+
node -v # should be 18+
|
|
63
|
+
npx codexapp
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
### Windows πͺ (PowerShell)
|
|
67
|
+
```powershell
|
|
68
|
+
node -v # 18+
|
|
69
|
+
npx codexapp
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
### Termux (Android) π€
|
|
73
|
+
```bash
|
|
74
|
+
pkg update && pkg upgrade -y
|
|
75
|
+
pkg install nodejs -y
|
|
76
|
+
npx codexapp
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
Android background requirements:
|
|
80
|
+
|
|
81
|
+
1. Keep `codexapp` running in the current Termux session (do not close it).
|
|
82
|
+
2. In Android settings, disable battery optimization for `Termux`.
|
|
83
|
+
3. Keep the persistent Termux notification enabled so Android is less likely to kill it.
|
|
84
|
+
4. Optional but recommended in Termux:
|
|
85
|
+
```bash
|
|
86
|
+
termux-wake-lock
|
|
87
|
+
```
|
|
88
|
+
5. Open the shown URL in your Android browser. If the app is killed, return to Termux and run `npx codexapp` again.
|
|
89
|
+
|
|
90
|
+
---
|
|
91
|
+
|
|
92
|
+
## iPhone / iPad via Tailscale Serve
|
|
93
|
+
|
|
94
|
+
If you want to use codexUI from iPhone or iPad Safari, serving it over HTTPS is recommended.
|
|
95
|
+
|
|
96
|
+
A practical private setup is to run codexUI locally and publish it inside your tailnet with Tailscale Serve:
|
|
97
|
+
|
|
98
|
+
```powershell
|
|
99
|
+
npx codexapp --no-tunnel --port 5999
|
|
100
|
+
tailscale serve --bg 5999
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
Then open:
|
|
104
|
+
|
|
105
|
+
```text
|
|
106
|
+
https://<your-machine>.<your-tailnet>.ts.net
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
This setup worked well in practice for:
|
|
110
|
+
|
|
111
|
+
- iPhone Safari access
|
|
112
|
+
- Add to Home Screen
|
|
113
|
+
- the built-in dictation / transcription feature in the app
|
|
114
|
+
- viewing the same projects and conversations from the Windows host
|
|
115
|
+
|
|
116
|
+
Notes:
|
|
117
|
+
|
|
118
|
+
- Tailscale Serve keeps access private to your tailnet
|
|
119
|
+
- on iOS, HTTPS / secure context appears to be important for mobile browser access and dictation
|
|
120
|
+
- some minor mobile Safari CSS issues may still exist, but they do not prevent normal use
|
|
121
|
+
- depending on proxying details, authentication behavior may differ from direct remote access
|
|
122
|
+
- if conversations created in the web UI do not immediately appear in the Windows app, restarting the Windows app may refresh them
|
|
123
|
+
|
|
124
|
+
---
|
|
125
|
+
|
|
126
|
+
## β¨ Features
|
|
127
|
+
> **The payload.**
|
|
128
|
+
|
|
129
|
+
- π One-command launch with `npx codexapp`
|
|
130
|
+
- π Cross-platform support for Linux, Windows, and Termux on Android
|
|
131
|
+
- π₯οΈ Browser-first Codex UI flow on `http://localhost:18923`
|
|
132
|
+
- π LAN-friendly access from other devices on the same network
|
|
133
|
+
- π§ͺ Remote/headless-friendly setup for server-based Codex usage
|
|
134
|
+
- π Works with reverse proxies and tunneling setups
|
|
135
|
+
- β‘ No global install required for quick experimentation
|
|
136
|
+
- ποΈ Built-in hold-to-dictate voice input with transcription to composer draft
|
|
137
|
+
- π€ Optional Telegram bot bridge: send messages to bot, forward into mapped thread, send assistant reply back to Telegram
|
|
138
|
+
|
|
139
|
+
### Telegram Bot Bridge (Optional)
|
|
140
|
+
|
|
141
|
+
Set these environment variables before starting `codexapp`:
|
|
142
|
+
|
|
143
|
+
```bash
|
|
144
|
+
export TELEGRAM_BOT_TOKEN="<your-telegram-bot-token>"
|
|
145
|
+
export TELEGRAM_DEFAULT_CWD="$PWD" # optional, defaults to current working directory
|
|
146
|
+
npx codexapp
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
Bot commands:
|
|
150
|
+
|
|
151
|
+
- `/newthread` create and map a new Codex thread for this Telegram chat
|
|
152
|
+
- `/thread <threadId>` map current Telegram chat to an existing thread
|
|
153
|
+
- Any other text message is forwarded to the mapped thread
|
|
154
|
+
|
|
155
|
+
---
|
|
156
|
+
|
|
157
|
+
## π§© Recent Product Features (from main commits)
|
|
158
|
+
> **Not just launch. Actual UX upgrades.**
|
|
159
|
+
|
|
160
|
+
- ποΈ Searchable project picker in new-thread flow
|
|
161
|
+
- β Inline "Add new project" input inside picker (no browser prompt)
|
|
162
|
+
- π New projects get pinned to top automatically
|
|
163
|
+
- π§ Smart default new-project name suggestion via server-side free-directory scan (`New Project (N)`)
|
|
164
|
+
- π Project order persisted globally to workspace roots state
|
|
165
|
+
- π§΅ Optimistic in-progress threads preserved during refresh/poll cycles
|
|
166
|
+
- π± Mobile drawer sidebar in desktop layout (teleported overlay + swipe-friendly structure)
|
|
167
|
+
- ποΈ Skills Hub mobile-friendly spacing/toolbar layout improvements
|
|
168
|
+
- πͺ Skill detail modal tuned for mobile sheet-style behavior
|
|
169
|
+
- π§ͺ Skills Hub event typing fix for `SkillCard` select emit compatibility
|
|
170
|
+
- ποΈ Voice dictation flow in composer (`hold to dictate` -> transcribe -> append text)
|
|
171
|
+
|
|
172
|
+
---
|
|
173
|
+
|
|
174
|
+
## π What Can You Do With This?
|
|
175
|
+
|
|
176
|
+
| π₯ Use Case | π₯ What You Get |
|
|
177
|
+
|---|---|
|
|
178
|
+
| π» Linux workstation | Run Codex UI in browser without depending on desktop shell |
|
|
179
|
+
| πͺ Windows machine | Launch web UI and access from Chrome/Edge quickly |
|
|
180
|
+
| π± Termux on Android | Start service in Termux and control from mobile browser |
|
|
181
|
+
| π§ͺ Remote dev box | Keep Codex process on server, view UI from client device |
|
|
182
|
+
| π LAN sharing | Open UI from another device on same network |
|
|
183
|
+
| π§° Headless workflows | Keep terminal + browser split for productivity |
|
|
184
|
+
| π Custom routing | Put behind reverse proxy/tunnel if needed |
|
|
185
|
+
| β‘ Fast experiments | `npx` run without full global setup |
|
|
186
|
+
|
|
187
|
+
---
|
|
188
|
+
|
|
189
|
+
## πΌοΈ Screenshots
|
|
190
|
+
|
|
191
|
+
### Skills Hub
|
|
192
|
+

|
|
193
|
+
|
|
194
|
+
### Chat
|
|
195
|
+

|
|
196
|
+
|
|
197
|
+
### Mobile UI
|
|
198
|
+

|
|
199
|
+

|
|
200
|
+
|
|
201
|
+
---
|
|
202
|
+
|
|
203
|
+
## ποΈ Architecture
|
|
204
|
+
|
|
205
|
+
```text
|
|
206
|
+
βββββββββββββββββββββββββββββββ
|
|
207
|
+
β Browser (Desktop/Mobile) β
|
|
208
|
+
ββββββββββββββββ¬βββββββββββββββ
|
|
209
|
+
β HTTP/WebSocket
|
|
210
|
+
ββββββββββββββββΌβββββββββββββββ
|
|
211
|
+
β codexapp β
|
|
212
|
+
β (Express + Vue UI bridge) β
|
|
213
|
+
ββββββββββββββββ¬βββββββββββββββ
|
|
214
|
+
β RPC/Bridge calls
|
|
215
|
+
ββββββββββββββββΌβββββββββββββββ
|
|
216
|
+
β Codex App Server β
|
|
217
|
+
βββββββββββββββββββββββββββββββ
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
---
|
|
221
|
+
|
|
222
|
+
## π― Requirements
|
|
223
|
+
- β
Node.js `18+`
|
|
224
|
+
- β
Codex app-server environment available
|
|
225
|
+
- β
Browser access to host/port
|
|
226
|
+
- β
Microphone permission (only for voice dictation)
|
|
227
|
+
|
|
228
|
+
---
|
|
229
|
+
|
|
230
|
+
## π Troubleshooting
|
|
231
|
+
|
|
232
|
+
| β Problem | β
Fix |
|
|
233
|
+
|---|---|
|
|
234
|
+
| Port already in use | Run on a free port or stop old process |
|
|
235
|
+
| `npx` fails | Update npm/node, then retry |
|
|
236
|
+
| Termux install fails | `pkg update && pkg upgrade` then reinstall `nodejs` |
|
|
237
|
+
| Canβt open from other device | Check firewall, bind address, and LAN routing |
|
|
238
|
+
|
|
239
|
+
---
|
|
240
|
+
|
|
241
|
+
## π€ Contributing
|
|
242
|
+
Issues and PRs are welcome.
|
|
243
|
+
Bring bug reports, platform notes, and setup improvements.
|
|
244
|
+
|
|
245
|
+
---
|
|
246
|
+
|
|
247
|
+
## β Star This Repo
|
|
248
|
+
If you believe Codex UI should be accessible from **any machine, any OS, any screen**, star this project and share it. β
|
|
249
|
+
|
|
250
|
+
<div align="center">
|
|
251
|
+
Built for speed, portability, and a little bit of chaos π
|
|
252
|
+
</div>
|
|
253
|
+
|
|
254
|
+
---
|
|
255
|
+
|
|
256
|
+
Forked from [pavel-voronin/codex-web-local](https://github.com/pavel-voronin/codex-web-local) by Pavel Voronin.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){[data-v-cf07d06e],[data-v-cf07d06e]:before,[data-v-cf07d06e]:after,[data-v-cf07d06e]::backdrop{--tw-border-style:solid;--tw-tracking:initial;--tw-font-weight:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-leading:initial}}}.review-pane[data-v-cf07d06e]{height:100%;min-height:calc(var(--spacing,.25rem) * 0);min-width:calc(var(--spacing,.25rem) * 0);border-radius:var(--radius-2xl,1rem);border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-zinc-200,oklch(92% .004 286.32));background-color:var(--color-white,#fff);flex-direction:column;display:flex;overflow:hidden}.review-pane.is-mobile[data-v-cf07d06e]{inset:calc(var(--spacing,.25rem) * 0);z-index:40;border-style:var(--tw-border-style);border-width:0;border-radius:0;position:fixed}.review-pane-header[data-v-cf07d06e]{justify-content:space-between;align-items:flex-start;gap:calc(var(--spacing,.25rem) * 3);border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--color-zinc-200,oklch(92% .004 286.32));padding-inline:calc(var(--spacing,.25rem) * 3);padding-block:calc(var(--spacing,.25rem) * 2.5);display:flex}.review-pane-heading[data-v-cf07d06e]{min-width:calc(var(--spacing,.25rem) * 0)}.review-pane-eyebrow[data-v-cf07d06e]{margin:calc(var(--spacing,.25rem) * 0);--tw-tracking:.12em;letter-spacing:.12em;color:var(--color-zinc-400,oklch(70.5% .015 286.067));text-transform:uppercase;font-size:11px}.review-pane-title[data-v-cf07d06e]{margin:calc(var(--spacing,.25rem) * 0);text-overflow:ellipsis;white-space:nowrap;font-size:var(--text-sm,.875rem);line-height:var(--tw-leading,var(--text-sm--line-height,calc(1.25 / .875)));--tw-font-weight:var(--font-weight-medium,500);font-weight:var(--font-weight-medium,500);color:var(--color-zinc-900,oklch(21% .006 285.885));overflow:hidden}.review-pane-header-actions[data-v-cf07d06e]{align-items:center;gap:calc(var(--spacing,.25rem) * 2);display:flex}.review-pane-close[data-v-cf07d06e],.review-pane-mobile-files-button[data-v-cf07d06e],.review-pane-refresh[data-v-cf07d06e],.review-pane-run[data-v-cf07d06e],.review-pane-bulk-button[data-v-cf07d06e],.review-pane-row-button[data-v-cf07d06e],.review-pane-primary-cta[data-v-cf07d06e]{border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-zinc-200,oklch(92% .004 286.32));background-color:var(--color-white,#fff);padding-inline:calc(var(--spacing,.25rem) * 2.5);padding-block:calc(var(--spacing,.25rem) * 1.25);color:var(--color-zinc-700,oklch(37% .013 285.805));transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));border-radius:3.40282e38px;font-size:11px}@media(hover:hover){:is(.review-pane-close[data-v-cf07d06e],.review-pane-mobile-files-button[data-v-cf07d06e],.review-pane-refresh[data-v-cf07d06e],.review-pane-run[data-v-cf07d06e],.review-pane-bulk-button[data-v-cf07d06e],.review-pane-row-button[data-v-cf07d06e],.review-pane-primary-cta[data-v-cf07d06e]):hover{background-color:var(--color-zinc-50,oklch(98.5% 0 0))}}:is(.review-pane-close[data-v-cf07d06e],.review-pane-mobile-files-button[data-v-cf07d06e],.review-pane-refresh[data-v-cf07d06e],.review-pane-run[data-v-cf07d06e],.review-pane-bulk-button[data-v-cf07d06e],.review-pane-row-button[data-v-cf07d06e],.review-pane-primary-cta[data-v-cf07d06e]):disabled{cursor:default;opacity:.5}.review-pane-close[data-v-cf07d06e]{height:calc(var(--spacing,.25rem) * 7.5);width:calc(var(--spacing,.25rem) * 7.5);padding:calc(var(--spacing,.25rem) * 0);border-radius:3.40282e38px;justify-content:center;align-items:center;display:flex}.review-pane-toolbar[data-v-cf07d06e]{gap:calc(var(--spacing,.25rem) * 2);border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--color-zinc-100,oklch(96.7% .001 286.375));padding-inline:calc(var(--spacing,.25rem) * 3);padding-block:calc(var(--spacing,.25rem) * 2.5);flex-direction:column;display:flex}.review-pane-toolbar-tabs[data-v-cf07d06e]{min-width:calc(var(--spacing,.25rem) * 0)}.review-pane-toolbar-controls[data-v-cf07d06e]{align-items:center;gap:calc(var(--spacing,.25rem) * 2);flex-wrap:wrap;display:flex}.review-pane-control-cluster[data-v-cf07d06e]{min-width:calc(var(--spacing,.25rem) * 0);align-items:center;gap:calc(var(--spacing,.25rem) * 1.5);display:flex}.review-pane-control-label[data-v-cf07d06e]{--tw-font-weight:var(--font-weight-medium,500);font-size:10px;font-weight:var(--font-weight-medium,500);--tw-tracking:.08em;letter-spacing:.08em;color:var(--color-zinc-400,oklch(70.5% .015 286.067));text-transform:uppercase;flex-shrink:0}.review-pane-branch-select-wrap[data-v-cf07d06e]{border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-zinc-200,oklch(92% .004 286.32));background-color:var(--color-white,#fff);min-width:9rem;padding-inline:calc(var(--spacing,.25rem) * 2.5);padding-block:calc(var(--spacing,.25rem) * 1);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);border-radius:3.40282e38px;align-items:center;display:inline-flex}.review-pane-branch-select[data-v-cf07d06e]{-webkit-appearance:none;-moz-appearance:none;appearance:none;--tw-font-weight:var(--font-weight-medium,500);width:100%;font-size:11px;font-weight:var(--font-weight-medium,500);color:var(--color-zinc-700,oklch(37% .013 285.805));--tw-outline-style:none;background-color:#0000;outline-style:none}.review-pane-segmented[data-v-cf07d06e]{min-width:calc(var(--spacing,.25rem) * 0);align-items:center;gap:calc(var(--spacing,.25rem) * 1);background-color:var(--color-zinc-100,oklch(96.7% .001 286.375));padding:calc(var(--spacing,.25rem) * 1);border-radius:3.40282e38px;display:inline-flex}.review-pane-segmented-primary[data-v-cf07d06e]{background-color:#f4f4f5cc;flex:1}@supports (color:color-mix(in lab,red,red)){.review-pane-segmented-primary[data-v-cf07d06e]{background-color:color-mix(in oklab,var(--color-zinc-100,oklch(96.7% .001 286.375)) 80%,transparent)}}.review-pane-segmented-button[data-v-cf07d06e]{min-width:calc(var(--spacing,.25rem) * 0);border-style:var(--tw-border-style);padding-inline:calc(var(--spacing,.25rem) * 2.5);padding-block:calc(var(--spacing,.25rem) * 1.25);--tw-font-weight:var(--font-weight-medium,500);font-size:11px;font-weight:var(--font-weight-medium,500);color:var(--color-zinc-500,oklch(55.2% .016 285.938));transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));border-width:1px;border-color:#0000;border-radius:3.40282e38px;position:relative}.review-pane-segmented-button[data-v-cf07d06e]:before{content:"";margin-right:calc(var(--spacing,.25rem) * 1.5);height:calc(var(--spacing,.25rem) * 1.5);width:calc(var(--spacing,.25rem) * 1.5);background-color:var(--color-zinc-300,oklch(87.1% .006 286.286));vertical-align:middle;transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));border-radius:3.40282e38px;display:inline-block}.review-pane-segmented-button[data-active=true][data-v-cf07d06e]{border-color:var(--color-sky-200,oklch(90.1% .058 230.902));background-color:var(--color-sky-600,oklch(58.8% .158 241.966));color:var(--color-white,#fff);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.review-pane-segmented-button[data-active=true][data-v-cf07d06e]:before{background-color:var(--color-white,#fff)}.review-pane-segmented-button[data-v-cf07d06e]:disabled{opacity:.45}.review-pane-toolbar-actions[data-v-cf07d06e]{align-items:center;gap:calc(var(--spacing,.25rem) * 1.5);flex-shrink:0;display:flex}.review-pane-run[data-v-cf07d06e]{border-color:var(--color-emerald-600,oklch(59.6% .145 163.225));background-color:var(--color-emerald-600,oklch(59.6% .145 163.225));color:var(--color-white,#fff)}@media(hover:hover){.review-pane-run[data-v-cf07d06e]:hover{background-color:var(--color-emerald-700,oklch(50.8% .118 165.612))}}.review-pane-refresh[data-v-cf07d06e]{border-color:var(--color-amber-300,oklch(87.9% .169 91.605));background-color:var(--color-amber-50,oklch(98.7% .022 95.277));color:var(--color-amber-900,oklch(41.4% .112 45.904))}@media(hover:hover){.review-pane-refresh[data-v-cf07d06e]:hover{background-color:var(--color-amber-100,oklch(96.2% .059 95.617))}}.review-pane-banner[data-v-cf07d06e]{margin-inline:calc(var(--spacing,.25rem) * 3);margin-top:calc(var(--spacing,.25rem) * 2.5);border-radius:var(--radius-xl,.75rem);border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-amber-200,oklch(92.4% .12 95.746));background-color:var(--color-amber-50,oklch(98.7% .022 95.277));padding-inline:calc(var(--spacing,.25rem) * 3);padding-block:calc(var(--spacing,.25rem) * 2);font-size:var(--text-sm,.875rem);line-height:var(--tw-leading,var(--text-sm--line-height,calc(1.25 / .875)));color:var(--color-amber-800,oklch(47.3% .137 46.201))}.review-pane-banner.is-error[data-v-cf07d06e]{border-color:var(--color-rose-200,oklch(89.2% .058 10.001));background-color:var(--color-rose-50,oklch(96.9% .015 12.422));color:var(--color-rose-700,oklch(51.4% .222 16.935))}.review-pane-meta[data-v-cf07d06e]{align-items:center;gap:calc(var(--spacing,.25rem) * 1.5);padding-inline:calc(var(--spacing,.25rem) * 3);padding-top:calc(var(--spacing,.25rem) * 2.5);color:var(--color-zinc-500,oklch(55.2% .016 285.938));flex-wrap:wrap;font-size:11px;display:flex}.review-pane-meta span[data-v-cf07d06e]{background-color:var(--color-zinc-100,oklch(96.7% .001 286.375));padding-inline:calc(var(--spacing,.25rem) * 2);padding-block:calc(var(--spacing,.25rem) * 1);border-radius:3.40282e38px}.review-pane-summary-pill.review-pane-summary-pill-add[data-v-cf07d06e]{background-color:var(--color-emerald-100,oklch(95% .052 163.051));color:var(--color-emerald-700,oklch(50.8% .118 165.612))}.review-pane-summary-pill.review-pane-summary-pill-remove[data-v-cf07d06e]{background-color:var(--color-rose-100,oklch(94.1% .03 12.58));color:var(--color-rose-700,oklch(51.4% .222 16.935))}.review-pane-content[data-v-cf07d06e],.review-pane-findings[data-v-cf07d06e]{min-height:calc(var(--spacing,.25rem) * 0);flex:1;overflow:hidden}.review-pane-bulk-actions[data-v-cf07d06e]{gap:calc(var(--spacing,.25rem) * 1.5);border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--color-zinc-100,oklch(96.7% .001 286.375));padding-inline:calc(var(--spacing,.25rem) * 3);padding-block:calc(var(--spacing,.25rem) * 2.5);flex-wrap:nowrap;display:flex;overflow-x:auto}.review-pane-main[data-v-cf07d06e]{height:100%;min-height:calc(var(--spacing,.25rem) * 0);grid-template-columns:var(--review-file-list-width,18rem) .5rem minmax(0,1fr);display:grid}.review-pane-file-list[data-v-cf07d06e]{min-width:calc(var(--spacing,.25rem) * 0);border-right-style:var(--tw-border-style);border-right-width:1px;border-color:var(--color-zinc-100,oklch(96.7% .001 286.375));background-color:#fafafa99;display:none;overflow-y:auto}@supports (color:color-mix(in lab,red,red)){.review-pane-file-list[data-v-cf07d06e]{background-color:color-mix(in oklab,var(--color-zinc-50,oklch(98.5% 0 0)) 60%,transparent)}}.review-pane-file-list[data-v-cf07d06e]{padding:calc(var(--spacing,.25rem) * 2)}@media(min-width:48rem){.review-pane-file-list[data-v-cf07d06e]{gap:calc(var(--spacing,.25rem) * 1.5);flex-direction:column;display:flex}}.review-pane-tree-folder[data-v-cf07d06e]{align-items:center;gap:calc(var(--spacing,.25rem) * 1);border-radius:var(--radius-lg,.5rem);border-style:var(--tw-border-style);width:100%;padding-inline:calc(var(--spacing,.25rem) * 2);padding-block:calc(var(--spacing,.25rem) * 1.5);text-align:left;--tw-font-weight:var(--font-weight-medium,500);font-size:12px;font-weight:var(--font-weight-medium,500);color:var(--color-zinc-600,oklch(44.2% .017 285.786));transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));border-width:1px;border-color:#0000;display:flex}@media(hover:hover){.review-pane-tree-folder[data-v-cf07d06e]:hover{background-color:var(--color-white,#fff);color:var(--color-zinc-900,oklch(21% .006 285.885))}}.review-pane-tree-folder[data-expanded=false][data-v-cf07d06e]{color:var(--color-zinc-500,oklch(55.2% .016 285.938))}.review-pane-tree-folder-sheet[data-v-cf07d06e]{border-radius:var(--radius-md,.375rem);background-color:#fafafacc}@supports (color:color-mix(in lab,red,red)){.review-pane-tree-folder-sheet[data-v-cf07d06e]{background-color:color-mix(in oklab,var(--color-zinc-50,oklch(98.5% 0 0)) 80%,transparent)}}.review-pane-tree-caret[data-v-cf07d06e]{height:calc(var(--spacing,.25rem) * 3.5);width:calc(var(--spacing,.25rem) * 3.5);flex-shrink:0;position:relative}.review-pane-tree-caret[data-v-cf07d06e]:before{content:"";top:calc(var(--spacing,.25rem) * 1);left:calc(var(--spacing,.25rem) * 1);height:calc(var(--spacing,.25rem) * 0);width:calc(var(--spacing,.25rem) * 0);border-block-style:var(--tw-border-style);border-block-width:4px;border-left-style:var(--tw-border-style);border-left-width:5px;transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));border-block-color:#0000;border-left-color:currentColor;position:absolute}.review-pane-tree-caret[data-expanded=true][data-v-cf07d06e]:before{transform-origin:2px 4px;transform:rotate(90deg)}.review-pane-tree-folder-name[data-v-cf07d06e]{min-width:calc(var(--spacing,.25rem) * 0);text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}.review-pane-tree-folder-count[data-v-cf07d06e]{background-color:var(--color-zinc-200,oklch(92% .004 286.32));padding-inline:calc(var(--spacing,.25rem) * 1.5);padding-block:calc(var(--spacing,.25rem) * .5);--tw-font-weight:var(--font-weight-medium,500);font-size:10px;font-weight:var(--font-weight-medium,500);color:var(--color-zinc-500,oklch(55.2% .016 285.938));border-radius:3.40282e38px;flex-shrink:0}.review-pane-resizer[data-v-cf07d06e]{cursor:col-resize;background-color:var(--color-zinc-100,oklch(96.7% .001 286.375));display:none;position:relative}@media(min-width:48rem){.review-pane-resizer[data-v-cf07d06e]{display:block}}.review-pane-resizer[data-v-cf07d06e]:before{content:"";inset-block:calc(var(--spacing,.25rem) * 0);--tw-translate-x: -50% ;width:1px;translate:var(--tw-translate-x) var(--tw-translate-y);background-color:var(--color-zinc-300,oklch(87.1% .006 286.286));transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));position:absolute;left:50%}.review-pane-resizer[data-v-cf07d06e]:hover:before{background-color:var(--color-sky-500,oklch(68.5% .169 237.323))}.review-pane-file[data-v-cf07d06e],.review-pane-finding[data-v-cf07d06e]{gap:calc(var(--spacing,.25rem) * .75);border-radius:var(--radius-xl,.75rem);border-style:var(--tw-border-style);width:100%;padding-inline:calc(var(--spacing,.25rem) * 2.5);padding-block:calc(var(--spacing,.25rem) * 2);text-align:left;transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));border-width:1px;border-color:#0000;flex-direction:column;display:flex}@media(hover:hover){:is(.review-pane-file[data-v-cf07d06e],.review-pane-finding[data-v-cf07d06e]):hover{border-color:var(--color-zinc-200,oklch(92% .004 286.32));background-color:var(--color-white,#fff)}}.review-pane-tree-file[data-v-cf07d06e]{border-radius:var(--radius-lg,.5rem);padding-inline:calc(var(--spacing,.25rem) * 2);padding-block:calc(var(--spacing,.25rem) * 1.75)}.review-pane-file-meta-row[data-v-cf07d06e]{justify-content:space-between;align-items:flex-start;gap:calc(var(--spacing,.25rem) * 2);display:flex}.review-pane-file-main[data-v-cf07d06e]{min-width:calc(var(--spacing,.25rem) * 0);align-items:center;gap:calc(var(--spacing,.25rem) * 1.5);display:flex}.review-pane-file[data-active=true][data-v-cf07d06e]{border-color:var(--color-zinc-300,oklch(87.1% .006 286.286));background-color:var(--color-white,#fff);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.review-pane-file-op[data-v-cf07d06e]{width:fit-content;padding-inline:calc(var(--spacing,.25rem) * 2);padding-block:calc(var(--spacing,.25rem) * .5);--tw-font-weight:var(--font-weight-medium,500);font-size:10px;font-weight:var(--font-weight-medium,500);--tw-tracking:.08em;letter-spacing:.08em;text-transform:uppercase;border-radius:3.40282e38px;display:inline-flex}.review-pane-file-op[data-operation=add][data-v-cf07d06e]{background-color:var(--color-emerald-100,oklch(95% .052 163.051));color:var(--color-emerald-800,oklch(43.2% .095 166.913))}.review-pane-file-op[data-operation=delete][data-v-cf07d06e]{background-color:var(--color-rose-100,oklch(94.1% .03 12.58));color:var(--color-rose-700,oklch(51.4% .222 16.935))}.review-pane-file-op[data-operation=rename][data-v-cf07d06e]{background-color:var(--color-sky-100,oklch(95.1% .026 236.824));color:var(--color-sky-700,oklch(50% .134 242.749))}.review-pane-file-op[data-operation=update][data-v-cf07d06e]{background-color:var(--color-amber-100,oklch(96.2% .059 95.617));color:var(--color-amber-800,oklch(47.3% .137 46.201))}.review-pane-file-path[data-v-cf07d06e]{min-width:calc(var(--spacing,.25rem) * 0);font-size:var(--text-sm,.875rem);line-height:var(--tw-leading,var(--text-sm--line-height,calc(1.25 / .875)));word-break:break-all;color:var(--color-zinc-800,oklch(27.4% .006 286.033))}.review-pane-file-delta[data-v-cf07d06e]{align-items:center;gap:calc(var(--spacing,.25rem) * 1);white-space:nowrap;flex-shrink:0;font-size:11px;display:inline-flex}.review-pane-delta-add[data-v-cf07d06e]{color:var(--color-emerald-600,oklch(59.6% .145 163.225))}.review-pane-delta-remove[data-v-cf07d06e]{color:var(--color-rose-600,oklch(58.6% .253 17.585))}.review-pane-delta-separator[data-v-cf07d06e]{color:var(--color-zinc-400,oklch(70.5% .015 286.067))}.review-pane-diff[data-v-cf07d06e]{min-height:calc(var(--spacing,.25rem) * 0);padding-inline:calc(var(--spacing,.25rem) * 3);padding-block:calc(var(--spacing,.25rem) * 3);overflow-y:auto}.review-pane-file-header[data-v-cf07d06e],.review-pane-hunk[data-v-cf07d06e]{border-radius:var(--radius-2xl,1rem);border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-zinc-200,oklch(92% .004 286.32));background-color:var(--color-white,#fff)}.review-pane-file-header[data-v-cf07d06e]{margin-bottom:calc(var(--spacing,.25rem) * 3);justify-content:space-between;align-items:flex-start;gap:calc(var(--spacing,.25rem) * 2);padding-inline:calc(var(--spacing,.25rem) * 3);padding-block:calc(var(--spacing,.25rem) * 2.5);flex-wrap:wrap;display:flex}.review-pane-file-title[data-v-cf07d06e]{margin:calc(var(--spacing,.25rem) * 0);font-size:var(--text-sm,.875rem);line-height:var(--tw-leading,var(--text-sm--line-height,calc(1.25 / .875)));--tw-font-weight:var(--font-weight-medium,500);font-weight:var(--font-weight-medium,500);word-break:break-all;color:var(--color-zinc-900,oklch(21% .006 285.885))}.review-pane-file-subtitle[data-v-cf07d06e],.review-pane-hunk-meta[data-v-cf07d06e],.review-pane-finding-location[data-v-cf07d06e]{margin:calc(var(--spacing,.25rem) * 0);color:var(--color-zinc-500,oklch(55.2% .016 285.938));font-size:11px}.review-pane-row-actions[data-v-cf07d06e]{gap:calc(var(--spacing,.25rem) * 1.5);flex-wrap:wrap;display:flex}.review-pane-hunks[data-v-cf07d06e]{gap:calc(var(--spacing,.25rem) * 2.5);flex-direction:column;display:flex}.review-pane-hunk[data-v-cf07d06e]{overflow:hidden}.review-pane-hunk[data-active=true][data-v-cf07d06e]{border-color:var(--color-zinc-400,oklch(70.5% .015 286.067));--tw-shadow:0 0 0 1px var(--tw-shadow-color,#18181b14);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.review-pane-hunk-header[data-v-cf07d06e]{justify-content:space-between;align-items:flex-start;gap:calc(var(--spacing,.25rem) * 2);border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--color-zinc-100,oklch(96.7% .001 286.375));background-color:#fafafab3;flex-wrap:wrap;display:flex}@supports (color:color-mix(in lab,red,red)){.review-pane-hunk-header[data-v-cf07d06e]{background-color:color-mix(in oklab,var(--color-zinc-50,oklch(98.5% 0 0)) 70%,transparent)}}.review-pane-hunk-header[data-v-cf07d06e]{padding-inline:calc(var(--spacing,.25rem) * 3);padding-block:calc(var(--spacing,.25rem) * 2.5)}.review-pane-hunk-title[data-v-cf07d06e]{margin:calc(var(--spacing,.25rem) * 0);font-family:var(--font-mono,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));color:var(--color-zinc-800,oklch(27.4% .006 286.033))}.review-pane-lines[data-v-cf07d06e]{background-color:var(--color-zinc-950,oklch(14.1% .005 285.823));padding-inline:calc(var(--spacing,.25rem) * 0);padding-block:calc(var(--spacing,.25rem) * 0);font-family:var(--font-mono,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));color:var(--color-zinc-100,oklch(96.7% .001 286.375));overflow-x:auto}.review-pane-line[data-v-cf07d06e]{gap:calc(var(--spacing,.25rem) * 0);grid-template-columns:3.5rem 3.5rem 1.5rem minmax(0,1fr);min-width:max-content;display:grid}.review-pane-line-number[data-v-cf07d06e]{padding-inline:calc(var(--spacing,.25rem) * 2.5);padding-block:calc(var(--spacing,.25rem) * 1);text-align:right;color:var(--color-zinc-500,oklch(55.2% .016 285.938))}.review-pane-line-marker[data-v-cf07d06e]{padding-inline:calc(var(--spacing,.25rem) * 2);padding-block:calc(var(--spacing,.25rem) * 1);text-align:center;color:var(--color-zinc-500,oklch(55.2% .016 285.938))}.review-pane-line-code[data-v-cf07d06e]{padding-inline:calc(var(--spacing,.25rem) * 2.5);padding-block:calc(var(--spacing,.25rem) * 1);word-break:break-all;white-space:pre-wrap;display:block}.review-pane-line[data-kind=add][data-v-cf07d06e]{background-color:#002c2299}@supports (color:color-mix(in lab,red,red)){.review-pane-line[data-kind=add][data-v-cf07d06e]{background-color:color-mix(in oklab,var(--color-emerald-950,oklch(26.2% .051 172.552)) 60%,transparent)}}.review-pane-line[data-kind=add][data-v-cf07d06e]{color:var(--color-emerald-100,oklch(95% .052 163.051))}.review-pane-line[data-kind=remove][data-v-cf07d06e]{background-color:#4d021899}@supports (color:color-mix(in lab,red,red)){.review-pane-line[data-kind=remove][data-v-cf07d06e]{background-color:color-mix(in oklab,var(--color-rose-950,oklch(27.1% .105 12.094)) 60%,transparent)}}.review-pane-line[data-kind=remove][data-v-cf07d06e]{color:var(--color-rose-100,oklch(94.1% .03 12.58))}.review-pane-line[data-kind=add] .review-pane-line-marker[data-v-cf07d06e],.review-pane-line[data-kind=add] .review-pane-line-code[data-v-cf07d06e]{color:var(--color-emerald-300,oklch(84.5% .143 164.978))}.review-pane-line[data-kind=remove] .review-pane-line-marker[data-v-cf07d06e],.review-pane-line[data-kind=remove] .review-pane-line-code[data-v-cf07d06e]{color:var(--color-rose-300,oklch(81% .117 11.638))}.review-pane-line[data-kind=hunk][data-v-cf07d06e]{background-color:#052f4ab3}@supports (color:color-mix(in lab,red,red)){.review-pane-line[data-kind=hunk][data-v-cf07d06e]{background-color:color-mix(in oklab,var(--color-sky-950,oklch(29.3% .066 243.157)) 70%,transparent)}}.review-pane-line[data-kind=hunk][data-v-cf07d06e]{color:var(--color-sky-200,oklch(90.1% .058 230.902))}.review-pane-line[data-kind=meta][data-v-cf07d06e]{background-color:var(--color-zinc-900,oklch(21% .006 285.885));color:var(--color-zinc-400,oklch(70.5% .015 286.067))}.review-pane-raw-diff[data-v-cf07d06e]{border-radius:var(--radius-2xl,1rem);border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-zinc-200,oklch(92% .004 286.32));background-color:var(--color-zinc-950,oklch(14.1% .005 285.823));padding:calc(var(--spacing,.25rem) * 3);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));color:var(--color-zinc-100,oklch(96.7% .001 286.375));overflow-x:auto}.review-pane-raw-diff pre[data-v-cf07d06e],.review-pane-summary-text[data-v-cf07d06e]{margin:calc(var(--spacing,.25rem) * 0);font-family:var(--font-mono,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);word-break:break-all;white-space:pre-wrap}.review-pane-summary-card[data-v-cf07d06e]{margin-inline:calc(var(--spacing,.25rem) * 3);margin-top:calc(var(--spacing,.25rem) * 3);border-radius:var(--radius-2xl,1rem);border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-zinc-200,oklch(92% .004 286.32));background-color:var(--color-zinc-50,oklch(98.5% 0 0));padding-inline:calc(var(--spacing,.25rem) * 3);padding-block:calc(var(--spacing,.25rem) * 2.5)}.review-pane-summary-title[data-v-cf07d06e]{margin:calc(var(--spacing,.25rem) * 0);margin-bottom:calc(var(--spacing,.25rem) * 2);font-size:var(--text-sm,.875rem);line-height:var(--tw-leading,var(--text-sm--line-height,calc(1.25 / .875)));--tw-font-weight:var(--font-weight-medium,500);font-weight:var(--font-weight-medium,500);color:var(--color-zinc-900,oklch(21% .006 285.885))}.review-pane-findings-list[data-v-cf07d06e]{gap:calc(var(--spacing,.25rem) * 2.5);height:100%;padding-inline:calc(var(--spacing,.25rem) * 3);padding-block:calc(var(--spacing,.25rem) * 3);flex-direction:column;display:flex;overflow-y:auto}.review-pane-finding[data-v-cf07d06e]{border-color:var(--color-zinc-200,oklch(92% .004 286.32));background-color:var(--color-white,#fff)}@media(hover:hover){.review-pane-finding[data-v-cf07d06e]:hover{border-color:var(--color-zinc-300,oklch(87.1% .006 286.286))}}.review-pane-finding-title[data-v-cf07d06e]{font-size:var(--text-sm,.875rem);line-height:var(--tw-leading,var(--text-sm--line-height,calc(1.25 / .875)));--tw-font-weight:var(--font-weight-medium,500);font-weight:var(--font-weight-medium,500);color:var(--color-zinc-900,oklch(21% .006 285.885))}.review-pane-finding-body[data-v-cf07d06e]{font-size:var(--text-sm,.875rem);line-height:var(--tw-leading,var(--text-sm--line-height,calc(1.25 / .875)));white-space:pre-wrap;color:var(--color-zinc-600,oklch(44.2% .017 285.786))}.review-pane-empty[data-v-cf07d06e]{height:100%;min-height:calc(var(--spacing,.25rem) * 0);padding-inline:calc(var(--spacing,.25rem) * 6);text-align:center;flex-direction:column;justify-content:center;align-items:center;display:flex}.review-pane-empty-title[data-v-cf07d06e]{margin:calc(var(--spacing,.25rem) * 0);font-size:var(--text-sm,.875rem);line-height:var(--tw-leading,var(--text-sm--line-height,calc(1.25 / .875)));--tw-font-weight:var(--font-weight-medium,500);font-weight:var(--font-weight-medium,500);color:var(--color-zinc-900,oklch(21% .006 285.885))}.review-pane-empty-text[data-v-cf07d06e]{margin-top:calc(var(--spacing,.25rem) * 2);max-width:var(--container-sm,24rem);font-size:var(--text-sm,.875rem);line-height:var(--tw-leading,var(--text-sm--line-height,calc(1.25 / .875)));color:var(--color-zinc-500,oklch(55.2% .016 285.938))}.review-pane-primary-cta[data-v-cf07d06e]{margin-top:calc(var(--spacing,.25rem) * 4);border-color:var(--color-emerald-600,oklch(59.6% .145 163.225));background-color:var(--color-emerald-600,oklch(59.6% .145 163.225));color:var(--color-white,#fff)}@media(hover:hover){.review-pane-primary-cta[data-v-cf07d06e]:hover{background-color:var(--color-emerald-700,oklch(50.8% .118 165.612))}}.review-pane-sheet-backdrop[data-v-cf07d06e]{inset:calc(var(--spacing,.25rem) * 0);z-index:50;background-color:#0000004d;position:fixed}@supports (color:color-mix(in lab,red,red)){.review-pane-sheet-backdrop[data-v-cf07d06e]{background-color:color-mix(in oklab,var(--color-black,#000) 30%,transparent)}}.review-pane-sheet[data-v-cf07d06e]{inset-inline:calc(var(--spacing,.25rem) * 0);bottom:calc(var(--spacing,.25rem) * 0);border-top-left-radius:var(--radius-3xl,1.5rem);border-top-right-radius:var(--radius-3xl,1.5rem);background-color:var(--color-white,#fff);padding-inline:calc(var(--spacing,.25rem) * 4);padding-top:calc(var(--spacing,.25rem) * 3);padding-bottom:calc(var(--spacing,.25rem) * 6);--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);position:absolute}.review-pane-sheet-handle[data-v-cf07d06e]{margin-inline:auto;margin-bottom:calc(var(--spacing,.25rem) * 3);height:calc(var(--spacing,.25rem) * 1.5);width:calc(var(--spacing,.25rem) * 12);background-color:var(--color-zinc-300,oklch(87.1% .006 286.286));border-radius:3.40282e38px}.review-pane-sheet-header[data-v-cf07d06e]{margin-bottom:calc(var(--spacing,.25rem) * 3);justify-content:space-between;align-items:center;display:flex}.review-pane-sheet-title[data-v-cf07d06e]{margin:calc(var(--spacing,.25rem) * 0);font-size:var(--text-sm,.875rem);line-height:var(--tw-leading,var(--text-sm--line-height,calc(1.25 / .875)));--tw-font-weight:var(--font-weight-medium,500);font-weight:var(--font-weight-medium,500);color:var(--color-zinc-900,oklch(21% .006 285.885))}.review-pane-sheet-count[data-v-cf07d06e]{margin:calc(var(--spacing,.25rem) * 0);background-color:var(--color-zinc-100,oklch(96.7% .001 286.375));padding-inline:calc(var(--spacing,.25rem) * 2);padding-block:calc(var(--spacing,.25rem) * 1);color:var(--color-zinc-500,oklch(55.2% .016 285.938));border-radius:3.40282e38px;font-size:11px}.review-pane-sheet-list[data-v-cf07d06e]{gap:calc(var(--spacing,.25rem) * 2);max-height:60vh;padding-bottom:calc(var(--spacing,.25rem) * 3);flex-direction:column;display:flex;overflow-y:auto}.review-pane-sheet-enter-active[data-v-cf07d06e],.review-pane-sheet-leave-active[data-v-cf07d06e]{transition:opacity .16s}.review-pane-sheet-enter-active .review-pane-sheet[data-v-cf07d06e],.review-pane-sheet-leave-active .review-pane-sheet[data-v-cf07d06e]{transition:transform .2s}.review-pane-sheet-enter-from[data-v-cf07d06e],.review-pane-sheet-leave-to[data-v-cf07d06e]{opacity:0}.review-pane-sheet-enter-from .review-pane-sheet[data-v-cf07d06e],.review-pane-sheet-leave-to .review-pane-sheet[data-v-cf07d06e]{transform:translateY(16px)}@media(max-width:767px){.review-pane-header[data-v-cf07d06e]{padding-inline:calc(var(--spacing,.25rem) * 3);padding-block:calc(var(--spacing,.25rem) * 2)}.review-pane-eyebrow[data-v-cf07d06e]{font-size:10px}.review-pane-title[data-v-cf07d06e]{font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-leading:calc(var(--spacing,.25rem) * 5);line-height:calc(var(--spacing,.25rem) * 5)}.review-pane-header-actions[data-v-cf07d06e]{gap:calc(var(--spacing,.25rem) * 1.5)}.review-pane-close[data-v-cf07d06e],.review-pane-mobile-files-button[data-v-cf07d06e],.review-pane-refresh[data-v-cf07d06e],.review-pane-run[data-v-cf07d06e]{padding-inline:calc(var(--spacing,.25rem) * 2.5);padding-block:calc(var(--spacing,.25rem) * 1);font-size:12px}.review-pane-close[data-v-cf07d06e]{height:calc(var(--spacing,.25rem) * 7);width:calc(var(--spacing,.25rem) * 7)}.review-pane-toolbar[data-v-cf07d06e]{gap:calc(var(--spacing,.25rem) * 1.5);padding-inline:calc(var(--spacing,.25rem) * 3);padding-block:calc(var(--spacing,.25rem) * 2)}.review-pane-toolbar-controls[data-v-cf07d06e]{gap:calc(var(--spacing,.25rem) * 1.5);grid-template-columns:repeat(1,minmax(0,1fr));display:grid}.review-pane-control-cluster[data-v-cf07d06e]{gap:calc(var(--spacing,.25rem) * 1)}.review-pane-control-label[data-v-cf07d06e]{font-size:9px}.review-pane-branch-select-wrap[data-v-cf07d06e]{min-width:calc(var(--spacing,.25rem) * 0);padding-inline:calc(var(--spacing,.25rem) * 2);padding-block:calc(var(--spacing,.25rem) * .75);flex:1}.review-pane-branch-select[data-v-cf07d06e]{font-size:12px}.review-pane-segmented[data-v-cf07d06e]{justify-content:space-between;gap:calc(var(--spacing,.25rem) * 1);width:100%;padding:calc(var(--spacing,.25rem) * .75)}.review-pane-segmented-button[data-v-cf07d06e]{padding-inline:calc(var(--spacing,.25rem) * 2);padding-block:calc(var(--spacing,.25rem) * 1);flex:1;font-size:12px}.review-pane-toolbar-actions[data-v-cf07d06e]{gap:calc(var(--spacing,.25rem) * 1);width:auto}.review-pane-refresh[data-v-cf07d06e],.review-pane-run[data-v-cf07d06e]{padding-inline:calc(var(--spacing,.25rem) * 2.5);padding-block:calc(var(--spacing,.25rem) * 1);font-size:12px}.review-pane-banner[data-v-cf07d06e]{margin-inline:calc(var(--spacing,.25rem) * 3);margin-top:calc(var(--spacing,.25rem) * 2);padding-inline:calc(var(--spacing,.25rem) * 2.5);padding-block:calc(var(--spacing,.25rem) * 1.5);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)))}.review-pane-meta[data-v-cf07d06e]{gap:calc(var(--spacing,.25rem) * 1);padding-inline:calc(var(--spacing,.25rem) * 3);padding-top:calc(var(--spacing,.25rem) * 2)}.review-pane-meta span[data-v-cf07d06e]{padding-inline:calc(var(--spacing,.25rem) * 1.75);padding-block:calc(var(--spacing,.25rem) * .75);font-size:11px}.review-pane-bulk-actions[data-v-cf07d06e]{gap:calc(var(--spacing,.25rem) * 1);padding-inline:calc(var(--spacing,.25rem) * 3);padding-block:calc(var(--spacing,.25rem) * 2)}.review-pane-bulk-button[data-v-cf07d06e]{padding-inline:calc(var(--spacing,.25rem) * 2.5);padding-block:calc(var(--spacing,.25rem) * 1);font-size:12px}.review-pane-main[data-v-cf07d06e]{display:block}.review-pane-resizer[data-v-cf07d06e]{display:none}.review-pane-diff[data-v-cf07d06e]{padding-inline:calc(var(--spacing,.25rem) * 2);padding-block:calc(var(--spacing,.25rem) * 2.5)}.review-pane-file-header[data-v-cf07d06e],.review-pane-hunk-header[data-v-cf07d06e]{padding-inline:calc(var(--spacing,.25rem) * 2.5);padding-block:calc(var(--spacing,.25rem) * 2)}.review-pane-sheet[data-v-cf07d06e]{padding-inline:calc(var(--spacing,.25rem) * 3);padding-top:calc(var(--spacing,.25rem) * 2.5);padding-bottom:calc(var(--spacing,.25rem) * 4)}.review-pane-sheet-handle[data-v-cf07d06e]{margin-bottom:calc(var(--spacing,.25rem) * 2);height:calc(var(--spacing,.25rem) * 1.25);width:calc(var(--spacing,.25rem) * 11)}.review-pane-sheet-header[data-v-cf07d06e]{margin-bottom:calc(var(--spacing,.25rem) * 2)}.review-pane-sheet-title[data-v-cf07d06e]{font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)))}.review-pane-sheet-count[data-v-cf07d06e]{padding-inline:calc(var(--spacing,.25rem) * 1.5);padding-block:calc(var(--spacing,.25rem) * .75);font-size:10px}.review-pane-sheet-list[data-v-cf07d06e]{gap:calc(var(--spacing,.25rem) * 1.5);padding-bottom:calc(var(--spacing,.25rem) * 2)}.review-pane-sheet-list .review-pane-tree-folder[data-v-cf07d06e]{gap:calc(var(--spacing,.25rem) * 1);border-radius:var(--radius-md,.375rem);padding-inline:calc(var(--spacing,.25rem) * 2);padding-block:calc(var(--spacing,.25rem) * 1);font-size:12px}.review-pane-sheet-list .review-pane-tree-folder-count[data-v-cf07d06e]{padding-inline:calc(var(--spacing,.25rem) * 1.25);padding-block:calc(var(--spacing,.25rem) * .25);font-size:9px}.review-pane-sheet-list .review-pane-file[data-v-cf07d06e]{gap:calc(var(--spacing,.25rem) * .5);border-radius:var(--radius-lg,.5rem);padding-inline:calc(var(--spacing,.25rem) * 2);padding-block:calc(var(--spacing,.25rem) * 1.5)}.review-pane-sheet-list .review-pane-file-meta-row[data-v-cf07d06e]{gap:calc(var(--spacing,.25rem) * 1.5)}.review-pane-sheet-list .review-pane-file-op[data-v-cf07d06e]{padding-inline:calc(var(--spacing,.25rem) * 1.5);padding-block:calc(var(--spacing,.25rem) * .25);font-size:9px}.review-pane-sheet-list .review-pane-file-main[data-v-cf07d06e]{gap:calc(var(--spacing,.25rem) * 1)}.review-pane-sheet-list .review-pane-file-path[data-v-cf07d06e]{--tw-leading:calc(var(--spacing,.25rem) * 5);font-size:13px;line-height:calc(var(--spacing,.25rem) * 5)}.review-pane-sheet-list .review-pane-file-delta[data-v-cf07d06e]{font-size:11px}}@media(min-width:768px){.review-pane-toolbar[data-v-cf07d06e]{align-items:center;gap:calc(var(--spacing,.25rem) * 2.5);flex-direction:row}.review-pane-toolbar-tabs[data-v-cf07d06e]{flex:1}.review-pane-toolbar-controls[data-v-cf07d06e]{min-width:calc(var(--spacing,.25rem) * 0);flex-wrap:nowrap}.review-pane-control-cluster[data-v-cf07d06e]{flex-shrink:0}.review-pane-toolbar-actions[data-v-cf07d06e]{margin-left:auto}}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-leading{syntax:"*";inherits:false}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{d as et,u as tt,r as w,w as K,b as at,A as st,e as nt,o as i,c as l,a,t as r,v as U,h,m as ke,q as it,F as m,f as x,B as lt,C as rt,g as ge,l as O,x as D,j as ot,s as Ce,T as ut,y as _,D as vt,E as dt,G as ct,n as pt,H as Be,J as ft,_ as wt}from"./index-Tdn545FN.js";const ht={class:"review-pane-header"},yt={class:"review-pane-heading"},mt={class:"review-pane-title"},_t={class:"review-pane-header-actions"},bt={class:"review-pane-toolbar"},kt={class:"review-pane-toolbar-tabs"},gt={class:"review-pane-segmented review-pane-segmented-primary"},Ct=["data-active","onClick"],Bt={class:"review-pane-toolbar-controls"},Lt={class:"review-pane-control-cluster"},Ft={class:"review-pane-segmented"},It=["data-active"],xt=["data-active","disabled"],Rt={key:0,class:"review-pane-control-cluster"},St={class:"review-pane-branch-select-wrap"},$t=["value"],Tt={key:1,class:"review-pane-control-cluster"},At={class:"review-pane-segmented"},Et=["data-active"],Mt=["data-active"],Nt={class:"review-pane-toolbar-actions"},Pt=["disabled"],Dt=["disabled"],Gt={key:1,class:"review-pane-meta"},Wt={class:"review-pane-summary-pill review-pane-summary-pill-add"},zt={class:"review-pane-summary-pill review-pane-summary-pill-remove"},Vt={key:0},Ht={key:1},Kt={key:2,class:"review-pane-content"},Ut={key:0,class:"review-pane-empty"},Ot={key:1,class:"review-pane-empty"},Xt=["disabled"],jt={key:2,class:"review-pane-empty"},Yt={key:0,class:"review-pane-bulk-actions"},qt=["disabled","onClick"],Jt={key:1,class:"review-pane-empty"},Qt={class:"review-pane-empty-text"},Zt={key:0,class:"review-pane-file-list"},ea=["data-expanded","onClick"],ta=["data-expanded"],aa={class:"review-pane-tree-folder-name"},sa={class:"review-pane-tree-folder-count"},na=["data-active","title","onClick"],ia={class:"review-pane-file-meta-row"},la={class:"review-pane-file-main"},ra=["data-operation"],oa={class:"review-pane-file-path"},ua={class:"review-pane-file-delta"},va={class:"review-pane-delta-add"},da={class:"review-pane-delta-remove"},ca={class:"review-pane-diff"},pa={class:"review-pane-file-header"},fa={class:"review-pane-file-header-main"},wa={class:"review-pane-file-title"},ha={class:"review-pane-file-subtitle"},ya={key:0,class:"review-pane-row-actions"},ma=["disabled","onClick"],_a={key:0,class:"review-pane-raw-diff"},ba={key:1,class:"review-pane-hunks"},ka=["data-active","onClick"],ga={class:"review-pane-hunk-header"},Ca={class:"review-pane-hunk-title"},Ba={class:"review-pane-hunk-meta"},La={key:0,class:"review-pane-row-actions"},Fa=["disabled","onClick"],Ia={class:"review-pane-lines"},xa=["data-kind"],Ra={class:"review-pane-line-number"},Sa={class:"review-pane-line-number"},$a={class:"review-pane-line-marker"},Ta={class:"review-pane-line-code"},Aa={key:3,class:"review-pane-findings"},Ea={key:0,class:"review-pane-summary-card"},Ma={class:"review-pane-summary-text"},Na={key:1,class:"review-pane-findings-list"},Pa=["onClick"],Da={class:"review-pane-finding-title"},Ga={key:0,class:"review-pane-finding-location"},Wa={key:1,class:"review-pane-finding-body"},za={key:2,class:"review-pane-empty"},Va={class:"review-pane-empty-text"},Ha={class:"review-pane-sheet-header"},Ka={class:"review-pane-sheet-count"},Ua={class:"review-pane-sheet-list"},Oa=["data-expanded","onClick"],Xa=["data-expanded"],ja={class:"review-pane-tree-folder-name"},Ya={class:"review-pane-tree-folder-count"},qa=["data-active","title","onClick"],Ja={class:"review-pane-file-meta-row"},Qa={class:"review-pane-file-main"},Za=["data-operation"],es={class:"review-pane-file-path"},ts={class:"review-pane-file-delta"},as={class:"review-pane-delta-add"},ss={class:"review-pane-delta-remove"},Le="codex-web-local.review-pane-file-list-width.v1",ns=220,is=420,Fe=288,ls=et({__name:"ReviewPane",props:{threadId:{},cwd:{},isThreadInProgress:{type:Boolean}},emits:["close"],setup(Ie){const b=Ie,{isMobile:F}=tt(),A=w("changes"),p=w("workspace"),C=w("unstaged"),u=w(null),R=w(""),X=w(!1),S=w(""),B=w(""),j=w(!1),ae=w(!1),E=w(!1),T=w(!1),Y=w(!1),G=w(""),L=w(""),M=w(""),N=w({}),q=w(""),se=new Map;let J=null,$=null;const xe=[{value:"changes",label:"Changes"},{value:"findings",label:"Findings"}],Q=_(()=>`${p.value}:${C.value}`),W=_(()=>N.value[Q.value]??null),k=_(()=>{var t,e;return((t=u.value)==null?void 0:t.files.find(n=>n.id===S.value))??((e=u.value)==null?void 0:e.files[0])??null}),P=w({}),Re=_(()=>{var t,e;return(t=u.value)!=null&&t.isGitRepo?p.value==="workspace"?C.value==="staged"?"Staged changes":"Workspace changes":(e=u.value)!=null&&e.baseBranch?`Against ${u.value.baseBranch}`:"Base branch":"Repository review"}),oe=_(()=>{var t,e;return b.threadId.trim().length>0&&b.cwd.trim().length>0&&((t=u.value)==null?void 0:t.isGitRepo)===!0&&!b.isThreadInProgress&&!(p.value==="baseBranch"&&!((e=u.value)!=null&&e.baseBranch))}),ue=_(()=>{var t;return p.value==="workspace"&&((t=u.value)==null?void 0:t.isGitRepo)===!0&&u.value.files.length>0}),ve=_(()=>ue.value&&!E.value),Se=_(()=>C.value==="staged"?[{value:"unstage",label:"Unstage all"}]:[{value:"stage",label:"Stage all"},{value:"revert",label:"Revert all"}]),$e=_(()=>C.value==="staged"?[{value:"unstage",label:"Unstage file"}]:[{value:"stage",label:"Stage file"},{value:"revert",label:"Revert file"}]),Te=_(()=>C.value==="staged"?[{value:"unstage",label:"Unstage hunk"}]:[{value:"stage",label:"Stage hunk"},{value:"revert",label:"Revert hunk"}]),de=_(()=>L.value||G.value||M.value),Ae=_(()=>!!(L.value||G.value)),Z=w(Ne()),Ee=_(()=>{const t={};return F.value||(t["--review-file-list-width"]=`${Z.value}px`),t}),ce=_(()=>{var t;return We(((t=u.value)==null?void 0:t.files)??[],P.value)}),pe=_(()=>ce.value.nodes),Me=_(()=>ce.value.folderIdsByFileId);function ne(t){return Number.isFinite(t)?Math.min(is,Math.max(ns,Math.round(t))):Fe}function Ne(){if(typeof window>"u")return Fe;const t=window.localStorage.getItem(Le),e=t?Number(t):Number.NaN;return ne(e)}function Pe(t){typeof window>"u"||window.localStorage.setItem(Le,String(ne(t)))}function De(t){if(F.value)return;t.preventDefault(),$==null||$();const e=t.clientX,n=Z.value,v=f=>{Z.value=ne(n+(f.clientX-e))},d=()=>{window.removeEventListener("pointermove",v),window.removeEventListener("pointerup",y),$=null},y=()=>{d(),Pe(Z.value)};window.addEventListener("pointermove",v),window.addEventListener("pointerup",y),$=d}function Ge(t){return t==="add"?"+":t==="remove"?"-":t==="hunk"?"@@":" "}function fe(t){const e=t.split("/").filter(Boolean);return e[e.length-1]??t}function we(t,e){return t.localeCompare(e,void 0,{numeric:!0,sensitivity:"base"})}function We(t,e){const n={folders:new Map,files:[]},v={};for(const g of t){const s=g.path.split("/").filter(Boolean),o=s.pop()??g.path;let c=n,I="";const be=[];for(const[Ze,V]of s.entries()){I=I?`${I}/${V}`:V;let H=c.folders.get(V);H||(H={id:I,name:V,depth:Ze,folders:new Map,files:[]},c.folders.set(V,H)),c=H,be.push(H.id)}c.files.push({file:g,name:o,depth:s.length}),v[g.id]=be}const d=[],y=g=>g.files.length+Array.from(g.folders.values()).reduce((s,o)=>s+y(o),0),f=g=>{const s=Array.from(g.folders.values()).sort((c,I)=>we(c.name,I.name)),o=[...g.files].sort((c,I)=>we(c.name,I.name));for(const c of s)d.push({kind:"folder",treeKey:`folder:${c.id}`,id:c.id,name:c.name,depth:c.depth,fileCount:y(c)}),e[c.id]!==!1&&f(c);for(const c of o)d.push({kind:"file",treeKey:`file:${c.file.id}`,id:c.file.id,name:c.name,depth:c.depth,file:c.file})};return f(n),{nodes:d,folderIdsByFileId:v}}function z(t){return P.value[t]!==!1}function he(t){P.value={...P.value,[t]:!z(t)}}function ie(t){const e=Me.value[t]??[];if(e.length===0)return;const n={...P.value};let v=!1;for(const d of e)n[d]===!1&&(n[d]=!0,v=!0);v&&(P.value=n)}function ee(t){const e=F.value?8:10,n=F.value?12:14;return{paddingLeft:`${e+t*n}px`}}function le(t){return t==="add"?"Added":t==="delete"?"Deleted":t==="rename"?"Renamed":"Modified"}function ze(t,e){if(!(e instanceof HTMLElement)){se.delete(t);return}se.set(t,e)}function Ve(t){const e=t.params!==null&&typeof t.params=="object"&&!Array.isArray(t.params)?t.params:null;return typeof(e==null?void 0:e.threadId)=="string"?e.threadId:""}async function te(){var t,e,n;if(b.cwd.trim()){ae.value=!0,G.value="";try{const v=p.value==="baseBranch"?R.value.trim():"",d=await vt(b.cwd,p.value,C.value,v||null);if(d.baseBranchOptions.length>0){const f=d.baseBranch??d.baseBranchOptions[0]??"";R.value!==f&&(X.value=!0,R.value=f)}else R.value!==""&&(X.value=!0,R.value="");u.value=d,d.files.some(f=>f.id===S.value)||(S.value=((t=d.files[0])==null?void 0:t.id)??"",B.value=((n=(e=d.files[0])==null?void 0:e.hunks[0])==null?void 0:n.id)??"")}catch(v){G.value=v instanceof Error?v.message:"Failed to load review snapshot"}finally{ae.value=!1}}}async function He(){if(b.threadId.trim())try{const t=await Be(b.threadId);t.result&&(N.value={...N.value,[Q.value]:t.result})}catch{}}async function ye(){await Promise.all([te(),He()])}function me(t){var n,v;ie(t),S.value=t;const e=((n=u.value)==null?void 0:n.files.find(d=>d.id===t))??null;B.value=((v=e==null?void 0:e.hunks[0])==null?void 0:v.id)??"",F.value&&(j.value=!1)}async function re(t,e,n=""){var v,d,y;if(u.value){E.value=!0,L.value="";try{const f=await ft({cwd:b.cwd,scope:p.value,workspaceView:C.value,action:t,level:e,patch:n});u.value=f,f.files.some(s=>s.id===S.value)||(S.value=((v=f.files[0])==null?void 0:v.id)??"",B.value=((y=(d=f.files[0])==null?void 0:d.hunks[0])==null?void 0:y.id)??"")}catch(f){L.value=f instanceof Error?f.message:"Failed to apply review action"}finally{E.value=!1}}}async function Ke(t){await re(t,"all")}async function Ue(t,e){await re(t,"file",e.diff)}async function Oe(t,e){B.value=e.id,await re(t,"hunk",e.patch)}async function Xe(){if(b.cwd.trim()){Y.value=!0,L.value="";try{await dt(b.cwd),await te()}catch(t){L.value=t instanceof Error?t.message:"Failed to initialize Git"}finally{Y.value=!1}}}async function je(){var t,e;if(!(!oe.value||T.value)){L.value="",M.value=p.value==="workspace"?"Reviewing current changes":`Reviewing against ${((t=u.value)==null?void 0:t.baseBranch)??"base branch"}`,T.value=!0,q.value=Q.value;try{await ct(b.threadId,p.value,C.value,R.value||(((e=u.value)==null?void 0:e.baseBranch)??null))}catch(n){T.value=!1,M.value="",L.value=n instanceof Error?n.message:"Failed to start review"}}}function Ye(t){if(!t.absolutePath)return"";const e=t.startLine?`:${t.startLine}${t.endLine&&t.endLine!==t.startLine?`-${t.endLine}`:""}`:"";return`${t.absolutePath}${e}`}function qe(t,e){if(!e.startLine)return t.hunks[0]??null;for(const n of t.hunks){if(n.newStart!==null){const v=n.newStart+Math.max(n.newLineCount,1)-1;if(e.startLine>=n.newStart&&e.startLine<=v)return n}if(n.oldStart!==null){const v=n.oldStart+Math.max(n.oldLineCount,1)-1;if(e.startLine>=n.oldStart&&e.startLine<=v)return n}}return t.hunks[0]??null}async function _e(t){await pt();const e=se.get(t);e==null||e.scrollIntoView({block:"center",behavior:"smooth"})}async function Je(t){var v;A.value="changes";const e=((v=u.value)==null?void 0:v.files.find(d=>d.absolutePath===t.absolutePath||d.previousAbsolutePath===t.absolutePath))??null;if(!e)return;ie(e.id),S.value=e.id;const n=qe(e,t);B.value=(n==null?void 0:n.id)??"",n!=null&&n.id&&await _e(n.id)}function Qe(t){if(Ve(t)!==b.threadId)return;const e=t.params!==null&&typeof t.params=="object"&&!Array.isArray(t.params)?t.params:null,n=(e==null?void 0:e.item)!==null&&typeof(e==null?void 0:e.item)=="object"&&!Array.isArray(e.item)?e.item:null,v=typeof(n==null?void 0:n.type)=="string"?n.type:"";if(t.method==="item/started"&&v==="enteredReviewMode"){T.value=!0,M.value=typeof(n==null?void 0:n.review)=="string"?n.review:"Review in progress";return}if(t.method==="item/completed"&&v==="exitedReviewMode"){const d=q.value||Q.value;T.value=!1,M.value="",Be(b.threadId).then(y=>{y.result&&(N.value={...N.value,[d]:y.result},A.value="findings")}).catch(y=>{L.value=y instanceof Error?y.message:"Failed to load review result"}).finally(()=>{q.value=""})}}return K(()=>[b.threadId,b.cwd],()=>{S.value="",B.value="",N.value={},q.value="",L.value="",M.value="",ye()},{immediate:!0}),K(()=>[p.value,C.value],()=>{S.value="",B.value="",L.value="",G.value="",te()}),K(R,(t,e)=>{if(X.value){X.value=!1;return}p.value==="baseBranch"&&(!t||t===e||te())}),K(k,t=>{var e;t&&(ie(t.id),t.hunks.some(n=>n.id===B.value)||(B.value=((e=t.hunks[0])==null?void 0:e.id)??""))}),K(B,t=>{t&&_e(t)}),at(()=>{J=st(Qe)}),nt(()=>{J&&(J(),J=null),$==null||$()}),(t,e)=>{var n,v,d,y,f,g;return i(),l("section",{class:ge(["review-pane",{"is-mobile":U(F)}]),onClick:e[9]||(e[9]=Ce(()=>{},["stop"]))},[a("header",ht,[a("div",yt,[e[10]||(e[10]=a("p",{class:"review-pane-eyebrow"},"Review",-1)),a("p",mt,r(Re.value),1)]),a("div",_t,[U(F)&&A.value==="changes"&&((n=u.value)!=null&&n.files.length)?(i(),l("button",{key:0,type:"button",class:"review-pane-mobile-files-button",onClick:e[0]||(e[0]=s=>j.value=!0)}," Files ")):h("",!0),a("button",{type:"button",class:"review-pane-close","aria-label":"Close review pane",onClick:e[1]||(e[1]=s=>t.$emit("close"))},[ke(it,{class:"icon-svg"})])])]),a("div",bt,[a("div",kt,[a("div",gt,[(i(),l(m,null,x(xe,s=>a("button",{key:s.value,type:"button",class:"review-pane-segmented-button review-pane-tab","data-active":A.value===s.value,onClick:o=>A.value=s.value},r(s.label),9,Ct)),64))])]),a("div",Bt,[a("div",Lt,[e[11]||(e[11]=a("span",{class:"review-pane-control-label"},"Compare",-1)),a("div",Ft,[a("button",{type:"button",class:"review-pane-segmented-button review-pane-scope","data-active":p.value==="workspace",onClick:e[2]||(e[2]=s=>p.value="workspace")}," Workspace ",8,It),a("button",{type:"button",class:"review-pane-segmented-button review-pane-scope","data-active":p.value==="baseBranch",disabled:!((v=u.value)!=null&&v.baseBranch),onClick:e[3]||(e[3]=s=>p.value="baseBranch")}," Base branch ",8,xt)])]),p.value==="baseBranch"&&((d=u.value)!=null&&d.baseBranchOptions.length)?(i(),l("div",Rt,[e[12]||(e[12]=a("span",{class:"review-pane-control-label"},"Branch",-1)),a("label",St,[lt(a("select",{"onUpdate:modelValue":e[4]||(e[4]=s=>R.value=s),class:"review-pane-branch-select"},[(i(!0),l(m,null,x(u.value.baseBranchOptions,s=>(i(),l("option",{key:s,value:s},r(s),9,$t))),128))],512),[[rt,R.value]])])])):h("",!0),p.value==="workspace"?(i(),l("div",Tt,[e[13]||(e[13]=a("span",{class:"review-pane-control-label"},"Changes",-1)),a("div",At,[a("button",{type:"button",class:"review-pane-segmented-button review-pane-view","data-active":C.value==="unstaged",onClick:e[5]||(e[5]=s=>C.value="unstaged")}," Unstaged ",8,Et),a("button",{type:"button",class:"review-pane-segmented-button review-pane-view","data-active":C.value==="staged",onClick:e[6]||(e[6]=s=>C.value="staged")}," Staged ",8,Mt)])])):h("",!0)]),a("div",Nt,[a("button",{type:"button",class:"review-pane-run",disabled:!oe.value||T.value,onClick:je},r(T.value?"Reviewingβ¦":"Run review"),9,Pt),a("button",{type:"button",class:"review-pane-refresh",disabled:ae.value,onClick:ye}," Refresh ",8,Dt)])]),de.value?(i(),l("div",{key:0,class:ge(["review-pane-banner",{"is-error":Ae.value}])},r(de.value),3)):h("",!0),u.value?(i(),l("div",Gt,[a("span",null,r(u.value.summary.fileCount)+" files",1),a("span",Wt,"+"+r(u.value.summary.addedLineCount),1),a("span",zt,"-"+r(u.value.summary.removedLineCount),1),u.value.headBranch?(i(),l("span",Vt,r(u.value.headBranch),1)):h("",!0),p.value==="baseBranch"&&u.value.baseBranch?(i(),l("span",Ht,"vs "+r(u.value.baseBranch),1)):h("",!0)])):h("",!0),A.value==="changes"?(i(),l("div",Kt,[u.value?u.value.isGitRepo?p.value==="baseBranch"&&!u.value.baseBranch?(i(),l("div",jt,[...e[17]||(e[17]=[a("p",{class:"review-pane-empty-title"},"Base branch unavailable",-1),a("p",{class:"review-pane-empty-text"},"Could not resolve `origin/HEAD`, `main`, or `master` for this repository.",-1)])])):(i(),l(m,{key:3},[ue.value?(i(),l("div",Yt,[(i(!0),l(m,null,x(Se.value,s=>(i(),l("button",{key:s.value,type:"button",class:"review-pane-bulk-button",disabled:E.value,onClick:o=>Ke(s.value)},r(s.label),9,qt))),128))])):h("",!0),u.value.files.length?(i(),l("div",{key:2,class:"review-pane-main",style:O(Ee.value)},[U(F)?h("",!0):(i(),l("aside",Zt,[(i(!0),l(m,null,x(pe.value,s=>{var o;return i(),l(m,{key:s.treeKey},[s.kind==="folder"?(i(),l("button",{key:0,type:"button",class:"review-pane-tree-folder",style:O(ee(s.depth)),"data-expanded":z(s.id),onClick:c=>he(s.id)},[a("span",{class:"review-pane-tree-caret","data-expanded":z(s.id)},null,8,ta),a("span",aa,r(s.name),1),a("span",sa,r(s.fileCount),1)],12,ea)):(i(),l("button",{key:1,type:"button",class:"review-pane-file review-pane-tree-file",style:O(ee(s.depth)),"data-active":((o=k.value)==null?void 0:o.id)===s.file.id,title:s.file.path,onClick:c=>me(s.file.id)},[a("span",ia,[a("span",la,[a("span",{class:"review-pane-file-op","data-operation":s.file.operation},r(le(s.file.operation)),9,ra),a("span",oa,[D(r(s.name)+" ",1),s.file.previousPath?(i(),l(m,{key:0},[D(" β "+r(fe(s.file.previousPath)),1)],64)):h("",!0)])]),a("span",ua,[a("span",va,"+"+r(s.file.addedLineCount),1),e[19]||(e[19]=a("span",{class:"review-pane-delta-separator"},"/",-1)),a("span",da,"-"+r(s.file.removedLineCount),1)])])],12,na))],64)}),128))])),U(F)?h("",!0):(i(),l("div",{key:1,class:"review-pane-resizer",role:"separator","aria-orientation":"vertical","aria-label":"Resize file list",onPointerdown:De},null,32)),a("section",ca,[k.value?(i(),l(m,{key:0},[a("div",pa,[a("div",fa,[a("p",wa,[D(r(k.value.path)+" ",1),k.value.previousPath?(i(),l(m,{key:0},[D(" β "+r(k.value.previousPath),1)],64)):h("",!0)]),a("p",ha,r(le(k.value.operation))+" Β· +"+r(k.value.addedLineCount)+" / -"+r(k.value.removedLineCount),1)]),ve.value?(i(),l("div",ya,[(i(!0),l(m,null,x($e.value,s=>(i(),l("button",{key:`${k.value.id}:${s.value}`,type:"button",class:"review-pane-row-button",disabled:E.value,onClick:o=>Ue(s.value,k.value)},r(s.label),9,ma))),128))])):h("",!0)]),k.value.hunks.length===0?(i(),l("div",_a,[a("pre",null,r(k.value.diff||"No unified diff available."),1)])):(i(),l("div",ba,[(i(!0),l(m,null,x(k.value.hunks,s=>(i(),l("article",{key:s.id,ref_for:!0,ref:o=>ze(s.id,o),class:"review-pane-hunk","data-active":B.value===s.id,onClick:o=>B.value=s.id},[a("div",ga,[a("div",null,[a("p",Ca,r(s.header),1),a("p",Ba,"+"+r(s.addedLineCount)+" / -"+r(s.removedLineCount),1)]),ve.value?(i(),l("div",La,[(i(!0),l(m,null,x(Te.value,o=>(i(),l("button",{key:`${s.id}:${o.value}`,type:"button",class:"review-pane-row-button",disabled:E.value,onClick:c=>Oe(o.value,s)},r(o.label),9,Fa))),128))])):h("",!0)]),a("div",Ia,[(i(!0),l(m,null,x(s.lines,o=>(i(),l("div",{key:o.key,class:"review-pane-line","data-kind":o.kind},[a("span",Ra,r(o.oldLine??""),1),a("span",Sa,r(o.newLine??""),1),a("span",$a,r(Ge(o.kind)),1),a("code",Ta,r(o.text||" "),1)],8,xa))),128))])],8,ka))),128))]))],64)):h("",!0)])],4)):(i(),l("div",Jt,[e[18]||(e[18]=a("p",{class:"review-pane-empty-title"},"No changes in this scope",-1)),a("p",Qt,r(p.value==="workspace"?"Your current workspace is clean.":"No merge diff found against the base branch."),1)]))],64)):(i(),l("div",Ot,[e[15]||(e[15]=a("p",{class:"review-pane-empty-title"},"This folder is not a Git repository",-1)),e[16]||(e[16]=a("p",{class:"review-pane-empty-text"},"Initialize Git to review local changes and run Codex review.",-1)),a("button",{type:"button",class:"review-pane-primary-cta",disabled:Y.value,onClick:Xe},r(Y.value?"Initializingβ¦":"Initialize Git"),9,Xt)])):(i(),l("div",Ut,[...e[14]||(e[14]=[a("p",{class:"review-pane-empty-title"},"Loading review state",-1)])]))])):(i(),l("div",Aa,[(y=W.value)!=null&&y.summary?(i(),l("div",Ea,[e[20]||(e[20]=a("p",{class:"review-pane-summary-title"},"Summary",-1)),a("pre",Ma,r(W.value.summary),1)])):h("",!0),(f=W.value)!=null&&f.findings.length?(i(),l("div",Na,[(i(!0),l(m,null,x(W.value.findings,s=>(i(),l("button",{key:s.id,type:"button",class:"review-pane-finding",onClick:o=>Je(s)},[a("span",Da,r(s.title),1),s.absolutePath?(i(),l("span",Ga,r(Ye(s)),1)):h("",!0),s.body?(i(),l("span",Wa,r(s.body),1)):h("",!0)],8,Pa))),128))])):(i(),l("div",za,[e[21]||(e[21]=a("p",{class:"review-pane-empty-title"},"No structured findings yet",-1)),a("p",Va,r((g=W.value)!=null&&g.summary?"The latest review only returned summary text.":"Run review to populate this pane."),1)]))])),ke(ut,{name:"review-pane-sheet"},{default:ot(()=>{var s;return[U(F)&&j.value&&((s=u.value)!=null&&s.files.length)?(i(),l("div",{key:0,class:"review-pane-sheet-backdrop",onClick:e[8]||(e[8]=o=>j.value=!1)},[a("div",{class:"review-pane-sheet",onClick:e[7]||(e[7]=Ce(()=>{},["stop"]))},[e[24]||(e[24]=a("div",{class:"review-pane-sheet-handle","aria-hidden":"true"},null,-1)),a("div",Ha,[e[22]||(e[22]=a("p",{class:"review-pane-sheet-title"},"Changed files",-1)),a("p",Ka,r(u.value.files.length),1)]),a("div",Ua,[(i(!0),l(m,null,x(pe.value,o=>{var c;return i(),l(m,{key:`sheet:${o.treeKey}`},[o.kind==="folder"?(i(),l("button",{key:0,type:"button",class:"review-pane-tree-folder review-pane-tree-folder-sheet",style:O(ee(o.depth)),"data-expanded":z(o.id),onClick:I=>he(o.id)},[a("span",{class:"review-pane-tree-caret","data-expanded":z(o.id)},null,8,Xa),a("span",ja,r(o.name),1),a("span",Ya,r(o.fileCount),1)],12,Oa)):(i(),l("button",{key:1,type:"button",class:"review-pane-file review-pane-tree-file",style:O(ee(o.depth)),"data-active":((c=k.value)==null?void 0:c.id)===o.file.id,title:o.file.path,onClick:I=>me(o.file.id)},[a("span",Ja,[a("span",Qa,[a("span",{class:"review-pane-file-op","data-operation":o.file.operation},r(le(o.file.operation)),9,Za),a("span",es,[D(r(o.name)+" ",1),o.file.previousPath?(i(),l(m,{key:0},[D(" β "+r(fe(o.file.previousPath)),1)],64)):h("",!0)])]),a("span",ts,[a("span",as,"+"+r(o.file.addedLineCount),1),e[23]||(e[23]=a("span",{class:"review-pane-delta-separator"},"/",-1)),a("span",ss,"-"+r(o.file.removedLineCount),1)])])],12,qa))],64)}),128))])])])):h("",!0)]}),_:1})],2)}}}),os=wt(ls,[["__scopeId","data-v-cf07d06e"]]);export{os as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){[data-v-49ed14e0],[data-v-49ed14e0]:before,[data-v-49ed14e0]:after,[data-v-49ed14e0]::backdrop{--tw-border-style:solid;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-font-weight:initial;--tw-leading:initial}}}.skill-card[data-v-49ed14e0]{cursor:pointer;gap:calc(var(--spacing,.25rem) * 1.5);border-radius:var(--radius-xl,.75rem);border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-zinc-200,oklch(92% .004 286.32));background-color:var(--color-white,#fff);padding:calc(var(--spacing,.25rem) * 3);text-align:left;transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));flex-direction:column;display:flex}@media(hover:hover){.skill-card[data-v-49ed14e0]:hover{border-color:var(--color-zinc-300,oklch(87.1% .006 286.286));--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}.skill-card.is-disabled[data-v-49ed14e0]{opacity:.5}.skill-card-top[data-v-49ed14e0]{align-items:flex-start;gap:calc(var(--spacing,.25rem) * 2.5);display:flex}.skill-card-avatar[data-v-49ed14e0]{height:calc(var(--spacing,.25rem) * 8);width:calc(var(--spacing,.25rem) * 8);background-color:var(--color-zinc-100,oklch(96.7% .001 286.375));border-radius:3.40282e38px;flex-shrink:0}.skill-card-avatar-fallback[data-v-49ed14e0]{height:calc(var(--spacing,.25rem) * 8);width:calc(var(--spacing,.25rem) * 8);background-color:var(--color-zinc-200,oklch(92% .004 286.32));font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-medium,500);font-weight:var(--font-weight-medium,500);color:var(--color-zinc-500,oklch(55.2% .016 285.938));text-transform:uppercase;border-radius:3.40282e38px;flex-shrink:0;justify-content:center;align-items:center;display:flex}.skill-card-info[data-v-49ed14e0]{min-width:calc(var(--spacing,.25rem) * 0);gap:calc(var(--spacing,.25rem) * .5);flex-direction:column;flex:1;display:flex}.skill-card-header[data-v-49ed14e0]{align-items:center;gap:calc(var(--spacing,.25rem) * 2);display:flex}.skill-card-name[data-v-49ed14e0]{text-overflow:ellipsis;white-space:nowrap;font-size:var(--text-sm,.875rem);line-height:var(--tw-leading,var(--text-sm--line-height,calc(1.25 / .875)));--tw-font-weight:var(--font-weight-medium,500);font-weight:var(--font-weight-medium,500);color:var(--color-zinc-900,oklch(21% .006 285.885));overflow:hidden}.skill-card-badge[data-v-49ed14e0]{border-radius:var(--radius-md,.375rem);border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-emerald-200,oklch(90.5% .093 164.15));background-color:var(--color-emerald-50,oklch(97.9% .021 166.113));padding-inline:calc(var(--spacing,.25rem) * 1.5);padding-block:calc(var(--spacing,.25rem) * .5);--tw-leading:1;--tw-font-weight:var(--font-weight-medium,500);font-size:10px;line-height:1;font-weight:var(--font-weight-medium,500);color:var(--color-emerald-700,oklch(50.8% .118 165.612));flex-shrink:0}.skill-card-badge-disabled[data-v-49ed14e0]{border-radius:var(--radius-md,.375rem);border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-zinc-200,oklch(92% .004 286.32));background-color:var(--color-zinc-100,oklch(96.7% .001 286.375));padding-inline:calc(var(--spacing,.25rem) * 1.5);padding-block:calc(var(--spacing,.25rem) * .5);--tw-leading:1;--tw-font-weight:var(--font-weight-medium,500);font-size:10px;line-height:1;font-weight:var(--font-weight-medium,500);color:var(--color-zinc-500,oklch(55.2% .016 285.938));flex-shrink:0}.skill-card-owner[data-v-49ed14e0]{font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));color:var(--color-zinc-400,oklch(70.5% .015 286.067))}.skill-card-browse[data-v-49ed14e0]{height:calc(var(--spacing,.25rem) * 7);width:calc(var(--spacing,.25rem) * 7);border-radius:var(--radius-lg,.5rem);border-style:var(--tw-border-style);color:var(--color-zinc-300,oklch(87.1% .006 286.286));transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));background-color:#0000;border-width:0;flex-shrink:0;justify-content:center;align-items:center;margin-left:auto;display:flex}@media(hover:hover){.skill-card-browse[data-v-49ed14e0]:hover{background-color:var(--color-zinc-100,oklch(96.7% .001 286.375));color:var(--color-zinc-600,oklch(44.2% .017 285.786))}}.skill-card-browse-icon[data-v-49ed14e0]{height:calc(var(--spacing,.25rem) * 4);width:calc(var(--spacing,.25rem) * 4)}.skill-card-desc[data-v-49ed14e0]{margin:calc(var(--spacing,.25rem) * 0);-webkit-line-clamp:2;font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));color:var(--color-zinc-500,oklch(55.2% .016 285.938));-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.skill-card-date[data-v-49ed14e0]{color:var(--color-zinc-300,oklch(87.1% .006 286.286));font-size:10px}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){[data-v-c758a719],[data-v-c758a719]:before,[data-v-c758a719]:after,[data-v-c758a719]::backdrop{--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-font-weight:initial;--tw-border-style:solid;--tw-leading:initial}}}.sdm-overlay[data-v-c758a719]{inset:calc(var(--spacing,.25rem) * 0);z-index:50;background-color:#0006;justify-content:center;align-items:flex-end;display:flex;position:fixed}@supports (color:color-mix(in lab,red,red)){.sdm-overlay[data-v-c758a719]{background-color:color-mix(in oklab,var(--color-black,#000) 40%,transparent)}}@media(min-width:40rem){.sdm-overlay[data-v-c758a719]{align-items:center}}.sdm-panel[data-v-c758a719]{width:100%;max-height:90vh;max-width:var(--container-lg,32rem);border-top-left-radius:var(--radius-2xl,1rem);border-top-right-radius:var(--radius-2xl,1rem);background-color:var(--color-white,#fff);--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a), 0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);flex-direction:column;display:flex;overflow:hidden}@media(min-width:40rem){.sdm-panel[data-v-c758a719]{border-radius:var(--radius-2xl,1rem);max-height:80vh}}.sdm-header[data-v-c758a719]{justify-content:space-between;align-items:flex-start;gap:calc(var(--spacing,.25rem) * 3);padding:calc(var(--spacing,.25rem) * 4);padding-bottom:calc(var(--spacing,.25rem) * 3);flex-shrink:0;display:flex}@media(min-width:40rem){.sdm-header[data-v-c758a719]{padding:calc(var(--spacing,.25rem) * 5)}}.sdm-title-area[data-v-c758a719]{min-width:calc(var(--spacing,.25rem) * 0);align-items:center;gap:calc(var(--spacing,.25rem) * 3);display:flex}.sdm-avatar[data-v-c758a719]{height:calc(var(--spacing,.25rem) * 10);width:calc(var(--spacing,.25rem) * 10);background-color:var(--color-zinc-100,oklch(96.7% .001 286.375));border-radius:3.40282e38px;flex-shrink:0}.sdm-title-col[data-v-c758a719]{min-width:calc(var(--spacing,.25rem) * 0);gap:calc(var(--spacing,.25rem) * .5);flex-direction:column;display:flex}.sdm-title-row[data-v-c758a719]{min-width:calc(var(--spacing,.25rem) * 0);align-items:center;gap:calc(var(--spacing,.25rem) * 2);display:flex}.sdm-title[data-v-c758a719]{margin:calc(var(--spacing,.25rem) * 0);text-overflow:ellipsis;white-space:nowrap;font-size:var(--text-lg,1.125rem);line-height:var(--tw-leading,var(--text-lg--line-height,calc(1.75 / 1.125)));--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--color-zinc-900,oklch(21% .006 285.885));overflow:hidden}.sdm-badge-disabled[data-v-c758a719]{border-radius:var(--radius-md,.375rem);border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-zinc-200,oklch(92% .004 286.32));background-color:var(--color-zinc-100,oklch(96.7% .001 286.375));padding-inline:calc(var(--spacing,.25rem) * 1.5);padding-block:calc(var(--spacing,.25rem) * .5);--tw-leading:1;--tw-font-weight:var(--font-weight-medium,500);font-size:10px;line-height:1;font-weight:var(--font-weight-medium,500);color:var(--color-zinc-500,oklch(55.2% .016 285.938));flex-shrink:0}.sdm-owner[data-v-c758a719]{font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));color:var(--color-zinc-400,oklch(70.5% .015 286.067))}.sdm-close[data-v-c758a719]{height:calc(var(--spacing,.25rem) * 7);width:calc(var(--spacing,.25rem) * 7);border-radius:var(--radius-lg,.5rem);border-style:var(--tw-border-style);color:var(--color-zinc-400,oklch(70.5% .015 286.067));transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));background-color:#0000;border-width:0;flex-shrink:0;justify-content:center;align-items:center;display:flex}@media(hover:hover){.sdm-close[data-v-c758a719]:hover{background-color:var(--color-zinc-100,oklch(96.7% .001 286.375));color:var(--color-zinc-700,oklch(37% .013 285.805))}}.sdm-close-icon[data-v-c758a719]{height:calc(var(--spacing,.25rem) * 4);width:calc(var(--spacing,.25rem) * 4)}.sdm-body[data-v-c758a719]{min-height:calc(var(--spacing,.25rem) * 0);gap:calc(var(--spacing,.25rem) * 3);padding:calc(var(--spacing,.25rem) * 4);padding-top:calc(var(--spacing,.25rem) * 0);flex-direction:column;flex:1;display:flex;overflow-y:auto}@media(min-width:40rem){.sdm-body[data-v-c758a719]{padding:calc(var(--spacing,.25rem) * 5)}}.sdm-desc[data-v-c758a719]{margin:calc(var(--spacing,.25rem) * 0);font-size:var(--text-sm,.875rem);line-height:var(--tw-leading,var(--text-sm--line-height,calc(1.25 / .875)));--tw-leading:var(--leading-relaxed,1.625);line-height:var(--leading-relaxed,1.625);color:var(--color-zinc-600,oklch(44.2% .017 285.786))}.sdm-readme-loading[data-v-c758a719]{font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));color:var(--color-zinc-400,oklch(70.5% .015 286.067))}.sdm-readme[data-v-c758a719]{border-top-style:var(--tw-border-style);border-top-width:1px;border-color:var(--color-zinc-100,oklch(96.7% .001 286.375));padding-top:calc(var(--spacing,.25rem) * 3);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-leading:var(--leading-relaxed,1.625);line-height:var(--leading-relaxed,1.625);color:var(--color-zinc-700,oklch(37% .013 285.805))}.sdm-readme[data-v-c758a719] h2{margin-top:calc(var(--spacing,.25rem) * 3);margin-bottom:calc(var(--spacing,.25rem) * 1);font-size:var(--text-sm,.875rem);line-height:var(--tw-leading,var(--text-sm--line-height,calc(1.25 / .875)));--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--color-zinc-800,oklch(27.4% .006 286.033))}.sdm-readme[data-v-c758a719] h3{margin-top:calc(var(--spacing,.25rem) * 2);margin-bottom:calc(var(--spacing,.25rem) * 1);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--color-zinc-700,oklch(37% .013 285.805))}.sdm-readme[data-v-c758a719] h4{margin-top:calc(var(--spacing,.25rem) * 2);margin-bottom:calc(var(--spacing,.25rem) * .5);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-medium,500);font-weight:var(--font-weight-medium,500);color:var(--color-zinc-600,oklch(44.2% .017 285.786))}.sdm-readme[data-v-c758a719] code{background-color:var(--color-zinc-100,oklch(96.7% .001 286.375));padding-inline:calc(var(--spacing,.25rem) * 1);padding-block:calc(var(--spacing,.25rem) * .5);font-family:var(--font-mono,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);border-radius:.25rem;font-size:11px}.sdm-readme[data-v-c758a719] ul{margin:calc(var(--spacing,.25rem) * 0);padding-left:calc(var(--spacing,.25rem) * 4);list-style-type:disc}.sdm-readme[data-v-c758a719] li{margin-bottom:calc(var(--spacing,.25rem) * .5)}.sdm-readme[data-v-c758a719] strong{--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600)}.sdm-link[data-v-c758a719]{font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));color:var(--color-blue-600,oklch(54.6% .245 262.881));flex-shrink:0;text-decoration-line:none}@media(hover:hover){.sdm-link[data-v-c758a719]:hover{color:var(--color-blue-700,oklch(48.8% .243 264.376));text-decoration-line:underline}}.sdm-footer[data-v-c758a719]{border-top-style:var(--tw-border-style);border-top-width:1px;border-color:var(--color-zinc-100,oklch(96.7% .001 286.375));padding:calc(var(--spacing,.25rem) * 4);padding-top:calc(var(--spacing,.25rem) * 3);flex-shrink:0}@media(min-width:40rem){.sdm-footer[data-v-c758a719]{padding:calc(var(--spacing,.25rem) * 5)}}.sdm-footer-actions[data-v-c758a719]{align-items:center;gap:calc(var(--spacing,.25rem) * 2);display:flex}.sdm-btn[data-v-c758a719]{border-radius:var(--radius-lg,.5rem);border-style:var(--tw-border-style);padding-inline:calc(var(--spacing,.25rem) * 3);padding-block:calc(var(--spacing,.25rem) * 1.5);font-size:var(--text-sm,.875rem);line-height:var(--tw-leading,var(--text-sm--line-height,calc(1.25 / .875)));--tw-font-weight:var(--font-weight-medium,500);font-weight:var(--font-weight-medium,500);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));border-width:0}.sdm-btn[data-v-c758a719]:disabled{cursor:not-allowed;opacity:.5}.sdm-btn-primary[data-v-c758a719]{background-color:var(--color-zinc-900,oklch(21% .006 285.885));color:var(--color-white,#fff)}@media(hover:hover){.sdm-btn-primary[data-v-c758a719]:hover{background-color:var(--color-black,#000)}}.sdm-btn-danger[data-v-c758a719]{background-color:var(--color-rose-600,oklch(58.6% .253 17.585));color:var(--color-white,#fff)}@media(hover:hover){.sdm-btn-danger[data-v-c758a719]:hover{background-color:var(--color-rose-700,oklch(51.4% .222 16.935))}}.sdm-btn-secondary[data-v-c758a719]{background-color:var(--color-zinc-100,oklch(96.7% .001 286.375));color:var(--color-zinc-700,oklch(37% .013 285.805))}@media(hover:hover){.sdm-btn-secondary[data-v-c758a719]:hover{background-color:var(--color-zinc-200,oklch(92% .004 286.32))}}@property --tw-leading{syntax:"*";inherits:false}/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){[data-v-77953f50],[data-v-77953f50]:before,[data-v-77953f50]:after,[data-v-77953f50]::backdrop{--tw-font-weight:initial;--tw-border-style:solid;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000}}}.skills-hub[data-v-77953f50]{width:100%;height:100%;max-width:var(--container-4xl,56rem);gap:calc(var(--spacing,.25rem) * 3);padding:calc(var(--spacing,.25rem) * 3);flex-direction:column;margin-inline:auto;display:flex;overflow-y:auto}@media(min-width:40rem){.skills-hub[data-v-77953f50]{gap:calc(var(--spacing,.25rem) * 4);padding:calc(var(--spacing,.25rem) * 6)}}.skills-hub-header[data-v-77953f50]{gap:calc(var(--spacing,.25rem) * 1);flex-direction:column;display:flex}.skills-hub-title[data-v-77953f50]{margin:calc(var(--spacing,.25rem) * 0);font-size:var(--text-xl,1.25rem);line-height:var(--tw-leading,var(--text-xl--line-height,calc(1.75 / 1.25)));--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--color-zinc-900,oklch(21% .006 285.885))}@media(min-width:40rem){.skills-hub-title[data-v-77953f50]{font-size:var(--text-2xl,1.5rem);line-height:var(--tw-leading,var(--text-2xl--line-height,calc(2 / 1.5)))}}.skills-hub-subtitle[data-v-77953f50]{margin:calc(var(--spacing,.25rem) * 0);font-size:var(--text-sm,.875rem);line-height:var(--tw-leading,var(--text-sm--line-height,calc(1.25 / .875)));color:var(--color-zinc-500,oklch(55.2% .016 285.938))}.skills-hub-toolbar[data-v-77953f50]{align-items:stretch;gap:calc(var(--spacing,.25rem) * 2);flex-direction:column;display:flex}@media(min-width:40rem){.skills-hub-toolbar[data-v-77953f50]{flex-direction:row;align-items:center}}.skills-hub-search-wrap[data-v-77953f50]{align-items:center;gap:calc(var(--spacing,.25rem) * 2);border-radius:var(--radius-xl,.75rem);border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-zinc-200,oklch(92% .004 286.32));background-color:var(--color-white,#fff);padding-inline:calc(var(--spacing,.25rem) * 3);padding-block:calc(var(--spacing,.25rem) * 2);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));flex:1;display:flex}.skills-hub-search-wrap[data-v-77953f50]:focus-within{border-color:var(--color-zinc-400,oklch(70.5% .015 286.067));--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.skills-hub-search-icon[data-v-77953f50]{height:calc(var(--spacing,.25rem) * 4);width:calc(var(--spacing,.25rem) * 4);color:var(--color-zinc-400,oklch(70.5% .015 286.067));flex-shrink:0}.skills-hub-search[data-v-77953f50]{min-width:calc(var(--spacing,.25rem) * 0);--tw-border-style:none;padding:calc(var(--spacing,.25rem) * 0);font-size:var(--text-sm,.875rem);line-height:var(--tw-leading,var(--text-sm--line-height,calc(1.25 / .875)));color:var(--color-zinc-800,oklch(27.4% .006 286.033));background-color:#0000;border-style:none;flex:1}.skills-hub-search[data-v-77953f50]::placeholder{color:var(--color-zinc-400,oklch(70.5% .015 286.067))}.skills-hub-search[data-v-77953f50]{--tw-outline-style:none;outline-style:none}.skills-hub-search-btn[data-v-77953f50]{cursor:pointer;border-radius:var(--radius-md,.375rem);border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-zinc-200,oklch(92% .004 286.32));background-color:var(--color-white,#fff);padding-inline:calc(var(--spacing,.25rem) * 2);padding-block:calc(var(--spacing,.25rem) * 1);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-medium,500);font-weight:var(--font-weight-medium,500);color:var(--color-zinc-600,oklch(44.2% .017 285.786));transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));flex-shrink:0}@media(hover:hover){.skills-hub-search-btn[data-v-77953f50]:hover{border-color:var(--color-zinc-300,oklch(87.1% .006 286.286));background-color:var(--color-zinc-50,oklch(98.5% 0 0))}}.skills-hub-count[data-v-77953f50]{font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));white-space:nowrap;color:var(--color-zinc-400,oklch(70.5% .015 286.067))}.skills-hub-sort[data-v-77953f50]{cursor:pointer;border-radius:var(--radius-lg,.5rem);border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-zinc-200,oklch(92% .004 286.32));background-color:var(--color-white,#fff);padding-inline:calc(var(--spacing,.25rem) * 2.5);padding-block:calc(var(--spacing,.25rem) * 1.5);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-medium,500);font-weight:var(--font-weight-medium,500);color:var(--color-zinc-600,oklch(44.2% .017 285.786));transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));flex-shrink:0}@media(hover:hover){.skills-hub-sort[data-v-77953f50]:hover{border-color:var(--color-zinc-300,oklch(87.1% .006 286.286));background-color:var(--color-zinc-50,oklch(98.5% 0 0))}}.skills-sync-panel[data-v-77953f50]{gap:calc(var(--spacing,.25rem) * 2);border-radius:var(--radius-xl,.75rem);border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-zinc-200,oklch(92% .004 286.32));background-color:var(--color-zinc-50,oklch(98.5% 0 0));padding:calc(var(--spacing,.25rem) * 3);flex-direction:column;display:flex}.skills-sync-header[data-v-77953f50]{align-items:center;gap:calc(var(--spacing,.25rem) * 2);font-size:var(--text-sm,.875rem);line-height:var(--tw-leading,var(--text-sm--line-height,calc(1.25 / .875)));color:var(--color-zinc-700,oklch(37% .013 285.805));flex-wrap:wrap;display:flex}.skills-sync-badge[data-v-77953f50]{border-radius:var(--radius-md,.375rem);border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-zinc-300,oklch(87.1% .006 286.286));background-color:var(--color-white,#fff);padding-inline:calc(var(--spacing,.25rem) * 2);padding-block:calc(var(--spacing,.25rem) * .5);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)))}.skills-sync-badge-link[data-v-77953f50]{color:var(--color-zinc-700,oklch(37% .013 285.805))}@media(hover:hover){.skills-sync-badge-link[data-v-77953f50]:hover{border-color:var(--color-zinc-400,oklch(70.5% .015 286.067));color:var(--color-zinc-900,oklch(21% .006 285.885))}}.skills-sync-device[data-v-77953f50]{align-items:center;gap:calc(var(--spacing,.25rem) * 2);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));color:var(--color-zinc-600,oklch(44.2% .017 285.786));flex-wrap:wrap;display:flex}.skills-sync-meta[data-v-77953f50]{align-items:center;gap:calc(var(--spacing,.25rem) * 3);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));color:var(--color-zinc-600,oklch(44.2% .017 285.786));flex-wrap:wrap;display:flex}.skills-sync-error[data-v-77953f50]{border-radius:var(--radius-md,.375rem);border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-rose-200,oklch(89.2% .058 10.001));background-color:var(--color-rose-50,oklch(96.9% .015 12.422));padding-inline:calc(var(--spacing,.25rem) * 2);padding-block:calc(var(--spacing,.25rem) * 1);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));color:var(--color-rose-700,oklch(51.4% .222 16.935))}.skills-sync-actions[data-v-77953f50]{gap:calc(var(--spacing,.25rem) * 2);flex-wrap:wrap;display:flex}.skills-hub-toast[data-v-77953f50]{border-radius:var(--radius-lg,.5rem);padding-inline:calc(var(--spacing,.25rem) * 3);padding-block:calc(var(--spacing,.25rem) * 2);font-size:var(--text-sm,.875rem);line-height:var(--tw-leading,var(--text-sm--line-height,calc(1.25 / .875)));--tw-font-weight:var(--font-weight-medium,500);font-weight:var(--font-weight-medium,500)}.skills-hub-toast-success[data-v-77953f50]{border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-emerald-200,oklch(90.5% .093 164.15));background-color:var(--color-emerald-50,oklch(97.9% .021 166.113));color:var(--color-emerald-700,oklch(50.8% .118 165.612))}.skills-hub-toast-error[data-v-77953f50]{border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-rose-200,oklch(89.2% .058 10.001));background-color:var(--color-rose-50,oklch(96.9% .015 12.422));color:var(--color-rose-700,oklch(51.4% .222 16.935))}.skills-hub-section[data-v-77953f50]{gap:calc(var(--spacing,.25rem) * 2);flex-direction:column;display:flex}.skills-hub-section-toggle[data-v-77953f50]{cursor:pointer;align-items:center;gap:calc(var(--spacing,.25rem) * 1.5);border-style:var(--tw-border-style);padding:calc(var(--spacing,.25rem) * 0);font-size:var(--text-sm,.875rem);line-height:var(--tw-leading,var(--text-sm--line-height,calc(1.25 / .875)));--tw-font-weight:var(--font-weight-medium,500);font-weight:var(--font-weight-medium,500);color:var(--color-zinc-600,oklch(44.2% .017 285.786));transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));background-color:#0000;border-width:0;display:flex}@media(hover:hover){.skills-hub-section-toggle[data-v-77953f50]:hover{color:var(--color-zinc-900,oklch(21% .006 285.885))}}.skills-hub-section-title[data-v-77953f50]{font-size:var(--text-sm,.875rem);line-height:var(--tw-leading,var(--text-sm--line-height,calc(1.25 / .875)));--tw-font-weight:var(--font-weight-medium,500);font-weight:var(--font-weight-medium,500)}.skills-hub-section-chevron[data-v-77953f50]{height:calc(var(--spacing,.25rem) * 3.5);width:calc(var(--spacing,.25rem) * 3.5);transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s))}.skills-hub-section-chevron.is-open[data-v-77953f50]{rotate:90deg}.skills-hub-grid[data-v-77953f50]{gap:calc(var(--spacing,.25rem) * 3);grid-template-columns:repeat(1,minmax(0,1fr));display:grid}@media(min-width:40rem){.skills-hub-grid[data-v-77953f50]{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(min-width:64rem){.skills-hub-grid[data-v-77953f50]{grid-template-columns:repeat(3,minmax(0,1fr))}}.skills-hub-loading[data-v-77953f50]{padding-block:calc(var(--spacing,.25rem) * 8);text-align:center;font-size:var(--text-sm,.875rem);line-height:var(--tw-leading,var(--text-sm--line-height,calc(1.25 / .875)));color:var(--color-zinc-400,oklch(70.5% .015 286.067))}.skills-hub-error[data-v-77953f50]{border-radius:var(--radius-lg,.5rem);border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-rose-200,oklch(89.2% .058 10.001));background-color:var(--color-rose-50,oklch(96.9% .015 12.422));padding-block:calc(var(--spacing,.25rem) * 4);text-align:center;font-size:var(--text-sm,.875rem);line-height:var(--tw-leading,var(--text-sm--line-height,calc(1.25 / .875)));color:var(--color-rose-600,oklch(58.6% .253 17.585))}.skills-hub-empty[data-v-77953f50]{padding-block:calc(var(--spacing,.25rem) * 8);text-align:center;font-size:var(--text-sm,.875rem);line-height:var(--tw-leading,var(--text-sm--line-height,calc(1.25 / .875)));color:var(--color-zinc-400,oklch(70.5% .015 286.067))}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/index.esm-mbv_PYjX.js","assets/index.esm-BilMXo9u.js","assets/index.esm-DtVW_dfU.js"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{d as le,o as l,c as r,g as se,a as o,t as h,h as b,s as ae,m as J,K as Pe,y as S,_ as ne,w as Fe,i as te,q as Ae,L as Oe,r as p,z as me,b as Ue,v as i,x as ge,M as Ge,F as X,f as we,N as xe,B as He,O as Ne,P as De}from"./index-Tdn545FN.js";const Re={class:"skill-card-top"},je=["src","alt"],Ke={key:1,class:"skill-card-avatar-fallback"},Be={class:"skill-card-info"},Me={class:"skill-card-header"},Je={class:"skill-card-name"},Ve={key:0,class:"skill-card-badge-disabled"},ze={key:1,class:"skill-card-badge"},We={class:"skill-card-owner"},qe={key:0,class:"skill-card-desc"},Qe={key:1,class:"skill-card-date"},Ze=le({__name:"SkillCard",props:{skill:{}},emits:["select"],setup(t){const L=t,u=S(()=>{const k=L.skill.path;return k?k.endsWith("/SKILL.md")?k.slice(0,-9):k:""});function I(){const k=u.value;k&&window.open(`/codex-local-browse${encodeURI(k)}`,"_blank","noopener,noreferrer")}const f=S(()=>{const k=L.skill.publishedAt;if(!k)return"";const y=new Date(k),$=Date.now()-k;return $<36e5?`${Math.floor($/6e4)}m ago`:$<864e5?`${Math.floor($/36e5)}h ago`:$<2592e6?`${Math.floor($/864e5)}d ago`:y.toLocaleDateString("en-US",{month:"short",day:"numeric"})});function _(k){const y=k.target;y.style.display="none"}return(k,y)=>(l(),r("button",{class:se(["skill-card",{"is-disabled":t.skill.installed&&t.skill.enabled===!1}]),type:"button",onClick:y[0]||(y[0]=C=>k.$emit("select",t.skill))},[o("div",Re,[t.skill.avatarUrl?(l(),r("img",{key:0,class:"skill-card-avatar",src:t.skill.avatarUrl,alt:t.skill.owner,loading:"lazy",onError:_},null,40,je)):(l(),r("div",Ke,h(t.skill.owner.charAt(0)),1)),o("div",Be,[o("div",Me,[o("span",Je,h(t.skill.displayName||t.skill.name),1),t.skill.installed&&t.skill.enabled===!1?(l(),r("span",Ve,"Disabled")):t.skill.installed?(l(),r("span",ze,"Installed")):b("",!0)]),o("span",We,h(t.skill.owner),1)]),t.skill.installed&&u.value?(l(),r("button",{key:2,class:"skill-card-browse",type:"button",title:"Browse files",onClick:ae(I,["stop"])},[J(Pe,{class:"skill-card-browse-icon"})])):b("",!0)]),t.skill.description?(l(),r("p",qe,h(t.skill.description),1)):b("",!0),f.value?(l(),r("span",Qe,h(f.value),1)):b("",!0)],2))}}),Se=ne(Ze,[["__scopeId","data-v-49ed14e0"]]),Ye={class:"sdm-panel"},Xe={class:"sdm-header"},es={class:"sdm-title-area"},ss=["src","alt"],ts={class:"sdm-title-col"},ls={class:"sdm-title-row"},as={class:"sdm-title"},ns={key:0,class:"sdm-badge-disabled"},os={class:"sdm-owner"},is={class:"sdm-body"},rs={key:0,class:"sdm-desc"},cs={key:1,class:"sdm-readme-loading"},us=["innerHTML"],ds=["href"],hs={class:"sdm-footer"},ks={class:"sdm-footer-actions"},vs=["disabled"],ps=["disabled"],bs=["disabled"],fs=le({__name:"SkillDetailModal",props:{skill:{},visible:{type:Boolean},isInstalling:{type:Boolean},isUninstalling:{type:Boolean}},emits:["close","install","uninstall","toggle-enabled"],setup(t,{emit:L}){const u=t,I=L,f=p(null),_=p(""),k=p(""),y=p(!1),C=S(()=>f.value??u.skill.enabled??!0),$=S(()=>u.isInstalling===!0||u.isUninstalling===!0),T=S(()=>_.value||u.skill.description),P=S(()=>{const d=u.skill.path;return d?d.endsWith("/SKILL.md")?d.slice(0,-9):d:""}),G=S(()=>{const d=k.value;if(!d)return"";const g=d.replace(/^---[\s\S]*?---\s*/,"");return F(g)});function F(d){return d.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/^### (.+)$/gm,"<h4>$1</h4>").replace(/^## (.+)$/gm,"<h3>$1</h3>").replace(/^# (.+)$/gm,"<h2>$1</h2>").replace(/\*\*(.+?)\*\*/g,"<strong>$1</strong>").replace(/`([^`]+)`/g,"<code>$1</code>").replace(/^- (.+)$/gm,"<li>$1</li>").replace(/(<li>.*<\/li>\n?)+/g,"<ul>$&</ul>").replace(/\n{2,}/g,"<br/><br/>").replace(/\n/g,"<br/>")}async function A(){if(!(!u.skill.owner||!u.skill.name)){y.value=!0,_.value="",k.value="";try{const d=new URLSearchParams({owner:u.skill.owner,name:u.skill.name});u.skill.installed&&d.set("installed","true"),u.skill.path&&d.set("path",u.skill.path);const g=await fetch(`/codex-api/skills-hub/readme?${d}`);if(!g.ok)return;const E=await g.json();k.value=E.content??"",_.value=E.description??""}catch{}finally{y.value=!1}}}Fe(()=>u.visible,d=>{d&&(f.value=null,_.value="",k.value="",A())});function O(){I("install",u.skill)}function x(){I("uninstall",u.skill)}function a(){const d=!C.value;f.value=d,I("toggle-enabled",u.skill,d)}function c(){const d=P.value;d&&window.open(`/codex-local-browse${encodeURI(d)}`,"_blank","noopener,noreferrer")}return(d,g)=>(l(),te(Oe,{to:"body"},[t.visible?(l(),r("div",{key:0,class:"sdm-overlay",onClick:g[1]||(g[1]=ae(E=>d.$emit("close"),["self"]))},[o("div",Ye,[o("div",Xe,[o("div",es,[t.skill.avatarUrl?(l(),r("img",{key:0,class:"sdm-avatar",src:t.skill.avatarUrl,alt:t.skill.owner,loading:"lazy"},null,8,ss)):b("",!0),o("div",ts,[o("div",ls,[o("h3",as,h(t.skill.displayName||t.skill.name),1),t.skill.installed&&!C.value?(l(),r("span",ns,"Disabled")):b("",!0)]),o("span",os,h(t.skill.owner),1)])]),o("button",{class:"sdm-close",type:"button","aria-label":"Close",onClick:g[0]||(g[0]=E=>d.$emit("close"))},[J(Ae,{class:"sdm-close-icon"})])]),o("div",is,[T.value?(l(),r("p",rs,h(T.value),1)):b("",!0),y.value?(l(),r("div",cs,"Loading skill contents...")):k.value?(l(),r("div",{key:2,class:"sdm-readme",innerHTML:G.value},null,8,us)):b("",!0),o("a",{class:"sdm-link",href:t.skill.url,target:"_blank",rel:"noopener noreferrer"},"View on GitHub",8,ds)]),o("div",hs,[o("div",ks,[t.skill.installed?(l(),r("button",{key:0,class:"sdm-btn sdm-btn-danger",type:"button",disabled:$.value,onClick:x},h(u.isUninstalling?"Uninstalling...":"Uninstall"),9,vs)):(l(),r("button",{key:1,class:"sdm-btn sdm-btn-primary",type:"button",disabled:$.value,onClick:O},h(u.isInstalling?"Installing...":"Install"),9,ps)),t.skill.installed?(l(),r("button",{key:2,class:"sdm-btn sdm-btn-secondary",type:"button",disabled:$.value,onClick:a},h(C.value?"Disable":"Enable"),9,bs)):b("",!0),t.skill.installed&&P.value?(l(),r("button",{key:3,class:"sdm-btn sdm-btn-secondary",type:"button",onClick:c}," Browse files ")):b("",!0)])])])])):b("",!0)]))}}),ys=ne(fs,[["__scopeId","data-v-c758a719"]]),ms={apiKey:"AIzaSyAf0CIHBZ-wEQJ8CCUUWo1Wl9P7typ_ZPI",authDomain:"gptcall-416910.firebaseapp.com",projectId:"gptcall-416910",storageBucket:"gptcall-416910.appspot.com",messagingSenderId:"99275526699",appId:"1:99275526699:web:3b623e1e2996108b52106e"};let ee=null;function gs(){return ee||(ee=Promise.all([me(()=>import("./index.esm-mbv_PYjX.js"),__vite__mapDeps([0,1])),me(()=>import("./index.esm-DtVW_dfU.js"),__vite__mapDeps([2,1]))])),ee}function ws(t){const L=p(null),u=p(""),I=p(""),f=p(""),_=p({loggedIn:!1,githubUsername:"",repoOwner:"",repoName:"",configured:!1,startup:{inProgress:!1,mode:"idle",branch:"main",lastAction:"not-started",lastRunAtIso:"",lastSuccessAtIso:"",lastError:""}}),k=S(()=>f.value==="pull"),y=S(()=>f.value==="push"),C=S(()=>f.value==="startup-sync"),$=S(()=>f.value!=="");async function T(){try{const a=await fetch("/codex-api/skills-sync/status");if(!a.ok)return;const c=await a.json();c.data&&(_.value=c.data)}catch{}}async function P(){try{const a=await fetch("/codex-api/skills-sync/github/start-login",{method:"POST"}),c=await a.json();if(!a.ok||!c.data)throw new Error("Failed to start GitHub login");L.value=c.data;const d=30,g=Math.max((c.data.interval??5)*1e3,3e3);let E=!1;for(let D=0;D<d;D++){await new Promise(j=>setTimeout(j,g));const H=await fetch("/codex-api/skills-sync/github/complete-login",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({deviceCode:c.data.device_code})}),N=await H.json();if(!H.ok)throw new Error(N.error||"Failed to complete GitHub login");if(N.ok){E=!0;break}if(!N.pending)throw new Error(N.error||"Failed to complete GitHub login")}if(!E)throw new Error("GitHub login timed out. Please retry.");L.value=null,await T(),t.showToast("GitHub login successful")}catch(a){t.showToast(a instanceof Error?a.message:"Failed GitHub login","error")}}async function G(){try{const[a,c]=await gs(),{getApp:d,getApps:g,initializeApp:E}=a,{getAuth:D,GithubAuthProvider:H,signInWithPopup:N}=c,j=g().length>0?d():E(ms),V=D(j),R=new H;R.addScope("repo");const U=await N(V,R),K=H.credentialFromResult(U),z=(K==null?void 0:K.accessToken)??"";if(!z)throw new Error("GitHub access token missing from Firebase login");const W=await fetch("/codex-api/skills-sync/github/token-login",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({token:z})}),q=await W.json();if(!W.ok||!q.ok)throw new Error(q.error||"Failed to login with GitHub token");await T(),t.showToast("GitHub login successful")}catch(a){const c=a instanceof Error?a.message:"Failed Firebase GitHub login";t.showToast(c,"error")}}async function F(){I.value="",u.value="pull-started",f.value="pull";try{const a=await fetch("/codex-api/skills-sync/pull",{method:"POST"}),c=await a.json();if(!a.ok||!c.ok)throw new Error(c.error||"Failed to pull synced skills");await t.onPulled(),u.value="pull-success",t.showToast(_.value.loggedIn?"Pulled skills from private sync repo":"Pulled skills from upstream repo")}catch(a){const c=a instanceof Error?a.message:"Failed to pull sync";I.value=c,u.value="pull-failed",t.showToast(c,"error")}finally{f.value=""}}async function A(){I.value="",u.value="push-started",f.value="push";try{const a=await fetch("/codex-api/skills-sync/push",{method:"POST"}),c=await a.json();if(!a.ok||!c.ok)throw new Error(c.error||"Failed to push synced skills");u.value="push-success",t.showToast("Pushed skills to private sync repo")}catch(a){const c=a instanceof Error?a.message:"Failed to push sync";I.value=c,u.value="push-failed",t.showToast(c,"error")}finally{f.value=""}}async function O(){I.value="",u.value="startup-sync-started",f.value="startup-sync";try{const a=await fetch("/codex-api/skills-sync/startup-sync",{method:"POST"}),c=await a.json();if(!a.ok||!c.ok)throw new Error(c.error||"Failed to run startup sync");await t.onPulled(),await T(),u.value="startup-sync-success",t.showToast("Startup sync completed")}catch(a){const c=a instanceof Error?a.message:"Failed startup sync";I.value=c,u.value="startup-sync-failed",t.showToast(c,"error")}finally{f.value=""}}async function x(){try{const a=await fetch("/codex-api/skills-sync/github/logout",{method:"POST"}),c=await a.json();if(!a.ok||!c.ok)throw new Error(c.error||"Failed to logout GitHub");await T(),t.showToast("Logged out from GitHub")}catch(a){t.showToast(a instanceof Error?a.message:"Failed to logout GitHub","error")}}return{deviceLogin:L,isPullInFlight:k,isPushInFlight:y,isStartupSyncInFlight:C,isSyncActionInFlight:$,loadSyncStatus:T,logoutGithub:x,pullSkillsSync:F,pushSkillsSync:A,startupSkillsSync:O,startGithubFirebaseLogin:G,startGithubLogin:P,syncActionError:I,syncActionStatus:u,syncStatus:_}}const Ss={class:"skills-hub"},_s={class:"skills-sync-panel"},$s={class:"skills-sync-header"},Is=["href"],Cs={key:1,class:"skills-sync-badge"},Ts={key:2,class:"skills-sync-badge"},Es={class:"skills-sync-meta"},Ls={key:0,class:"skills-sync-error"},Ps={key:1,class:"skills-sync-meta"},Fs={key:2,class:"skills-sync-error"},As={key:3,class:"skills-sync-device"},Os=["href"],Us={class:"skills-sync-actions"},Gs=["disabled"],xs=["disabled"],Hs=["disabled"],Ns=["disabled"],Ds={key:1,class:"skills-hub-section"},Rs={class:"skills-hub-section-title"},js={key:0,class:"skills-hub-grid"},Ks={class:"skills-hub-toolbar"},Bs={class:"skills-hub-search-wrap"},Ms=["onKeyup"],Js={key:0,class:"skills-hub-count"},Vs={class:"skills-hub-section"},zs={key:0,class:"skills-hub-loading"},Ws={key:1,class:"skills-hub-error"},qs={key:0,class:"skills-hub-grid"},Qs={key:1,class:"skills-hub-empty"},Z="codex-web-local.skills-hub.cache.v1",Zs=le({__name:"SkillsHub",emits:["skills-changed"],setup(t,{emit:L}){const u={name:"",owner:"",description:"",url:"",installed:!1},I=p(null),f=p(""),_=p(""),k=p("date"),y=p([]),C=p([]),$=p(0),T=p(!1),P=p(""),G=p(!0),F=p(!1),A=p(u),O=p(null),x=p(""),a=p(!1),c=p(!1);let d=null;const g=L,E=S(()=>k.value==="date"?"Newest":"A-Z"),D=S(()=>{var s;return((s=O.value)==null?void 0:s.type)==="error"?"skills-hub-toast-error":"skills-hub-toast-success"}),H=S(()=>`${A.value.owner}/${A.value.name}`),N=S(()=>a.value&&x.value===H.value),j=S(()=>c.value&&x.value===H.value),V=S(()=>{if(!w.value.configured)return"";const s=w.value.repoOwner.trim(),e=w.value.repoName.trim();return!s||!e?"":`https://github.com/${encodeURIComponent(s)}/${encodeURIComponent(e)}`}),R=S(()=>{const s=f.value.toLowerCase().trim();return s?C.value.filter(e=>e.name.toLowerCase().includes(s)||e.owner.toLowerCase().includes(s)||(e.displayName??"").toLowerCase().includes(s)):C.value});function U(s,e="success"){O.value={text:s,type:e},d&&clearTimeout(d),d=setTimeout(()=>{O.value=null},3e3)}function K(){k.value=k.value==="date"?"name":"date",B(_.value)}function z(s){return`${k.value}::${s.trim().toLowerCase()}`}function W(s){var e;if(typeof window>"u")return null;try{const n=window.localStorage.getItem(Z);return n?((e=JSON.parse(n).byKey)==null?void 0:e[s])??null:null}catch{return null}}function q(s,e){if(!(typeof window>"u"))try{const n=window.localStorage.getItem(Z),m=(n?JSON.parse(n):{}).byKey??{};m[s]=e,window.localStorage.setItem(Z,JSON.stringify({byKey:m}))}catch{}}function oe(){if(!(typeof window>"u"))try{window.localStorage.removeItem(Z)}catch{}}function ie(s){const e=s.installed??[];C.value=e;const n=new Set(e.map(v=>v.name));y.value=s.data.map(v=>{if(v.installed||n.has(v.name)){const m=e.find(M=>M.name===v.name);return{...v,installed:!0,path:(m==null?void 0:m.path)??v.path,enabled:(m==null?void 0:m.enabled)??v.enabled}}return v}).filter(v=>!v.installed),$.value=s.total}async function B(s){const e=s.trim();_.value=e;const n=z(e),v=W(n);v&&ie(v),T.value=!v,P.value="";try{const m=new URLSearchParams;e&&m.set("q",e),m.set("limit","100"),m.set("sort",k.value);const M=await fetch(`/codex-api/skills-hub?${m}`);if(!M.ok)throw new Error(`HTTP ${M.status}`);const ye=await M.json();ie(ye),q(n,ye)}catch(m){P.value=m instanceof Error?m.message:"Failed to load skills"}finally{T.value=!1}}function re(){B(f.value)}function ce(s){A.value=s,F.value=!0}async function _e(s){x.value=`${s.owner}/${s.name}`,a.value=!0;try{const n=await(await fetch("/codex-api/skills-hub/install",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({owner:s.owner,name:s.name})})).json();if(!n.ok)throw new Error(n.error||"Install failed");const v={...s,installed:!0,path:n.path,enabled:!0};C.value=[...C.value,v],y.value=y.value.filter(m=>m.name!==s.name),A.value=v,U(`${s.displayName||s.name} skill installed`),F.value=!1,oe(),g("skills-changed")}catch(e){U(e instanceof Error?e.message:"Failed to install skill","error")}finally{a.value=!1}}async function $e(s){x.value=`${s.owner}/${s.name}`,c.value=!0;try{const n=await(await fetch("/codex-api/skills-hub/uninstall",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:s.name,path:s.path})})).json();if(!n.ok)throw new Error(n.error||"Uninstall failed");C.value=C.value.filter(v=>v.name!==s.name),s.owner!=="local"&&(y.value=[...y.value,{...s,installed:!1,path:void 0,enabled:void 0}]),U(`${s.displayName||s.name} skill uninstalled`),F.value=!1,oe(),g("skills-changed")}catch(e){U(e instanceof Error?e.message:"Failed to uninstall skill","error")}finally{c.value=!1}}async function Ie(s,e){try{if(!(await fetch("/codex-api/rpc",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({method:"skills/config/write",params:{path:s.path,enabled:e}})})).ok)throw new Error("Failed to update skill");await fetch("/codex-api/skills-sync/push",{method:"POST"}),U(`${s.displayName||s.name} skill ${e?"enabled":"disabled"}`),await B(_.value)}catch(n){U(n instanceof Error?n.message:"Failed to update skill","error")}}const{deviceLogin:Y,isPullInFlight:Ce,isPushInFlight:Te,isStartupSyncInFlight:Ee,isSyncActionInFlight:Q,loadSyncStatus:Le,logoutGithub:ue,pullSkillsSync:de,pushSkillsSync:he,startupSkillsSync:ke,startGithubFirebaseLogin:ve,startGithubLogin:pe,syncActionError:be,syncActionStatus:fe,syncStatus:w}=ws({showToast:U,onPulled:async()=>{await B(_.value),g("skills-changed")}});return Ue(()=>{B(""),Le()}),(s,e)=>(l(),r("div",Ss,[e[12]||(e[12]=o("div",{class:"skills-hub-header"},[o("h2",{class:"skills-hub-title"},"Skills Hub"),o("p",{class:"skills-hub-subtitle"},"Browse and discover skills from the OpenClaw community")],-1)),o("div",_s,[o("div",$s,[e[9]||(e[9]=o("strong",null,"Skills Sync (GitHub)",-1)),i(w).configured&&V.value?(l(),r("a",{key:0,class:"skills-sync-badge skills-sync-badge-link",href:V.value,target:"_blank",rel:"noopener noreferrer"}," Connected: "+h(i(w).repoOwner)+"/"+h(i(w).repoName),9,Is)):i(w).loggedIn?(l(),r("span",Cs,"Logged in as "+h(i(w).githubUsername),1)):(l(),r("span",Ts,"Not connected"))]),o("div",Es,[o("span",null,"Startup: "+h(i(w).startup.mode),1),o("span",null,"Branch: "+h(i(w).startup.branch),1),o("span",null,"Action: "+h(i(w).startup.lastAction),1)]),i(w).startup.lastError?(l(),r("div",Ls,h(i(w).startup.lastError),1)):b("",!0),i(fe)?(l(),r("div",Ps,[o("span",null,"Manual sync: "+h(i(fe)),1)])):b("",!0),i(be)?(l(),r("div",Fs,h(i(be)),1)):b("",!0),i(Y)?(l(),r("div",As,[o("span",null,[e[10]||(e[10]=ge("Open ",-1)),o("a",{href:i(Y).verification_uri,target:"_blank",rel:"noreferrer"},"GitHub device login",8,Os),e[11]||(e[11]=ge(" and enter code:",-1))]),o("code",null,h(i(Y).user_code),1)])):b("",!0),o("div",Us,[i(w).loggedIn?b("",!0):(l(),r("button",{key:0,class:"skills-hub-sort",type:"button",onClick:e[0]||(e[0]=(...n)=>i(ve)&&i(ve)(...n))},"Login with GitHub")),i(w).loggedIn?b("",!0):(l(),r("button",{key:1,class:"skills-hub-sort",type:"button",onClick:e[1]||(e[1]=(...n)=>i(pe)&&i(pe)(...n))},"Device Login")),i(w).loggedIn?(l(),r("button",{key:2,class:"skills-hub-sort",type:"button",onClick:e[2]||(e[2]=(...n)=>i(ue)&&i(ue)(...n)),disabled:i(Q)},"Logout GitHub",8,Gs)):b("",!0),o("button",{class:"skills-hub-sort",type:"button",onClick:e[3]||(e[3]=(...n)=>i(ke)&&i(ke)(...n)),disabled:i(Q)},h(i(Ee)?"Syncing...":"Startup Sync"),9,xs),o("button",{class:"skills-hub-sort",type:"button",onClick:e[4]||(e[4]=(...n)=>i(de)&&i(de)(...n)),disabled:i(Q)},h(i(Ce)?"Pulling...":"Pull"),9,Hs),i(w).loggedIn?(l(),r("button",{key:3,class:"skills-hub-sort",type:"button",onClick:e[5]||(e[5]=(...n)=>i(he)&&i(he)(...n)),disabled:!i(w).configured||i(Q)},h(i(Te)?"Pushing...":"Push"),9,Ns)):b("",!0)])]),O.value?(l(),r("div",{key:0,class:se(["skills-hub-toast",D.value])},h(O.value.text),3)):b("",!0),R.value.length>0?(l(),r("div",Ds,[o("button",{class:"skills-hub-section-toggle",type:"button",onClick:e[6]||(e[6]=n=>G.value=!G.value)},[o("span",Rs,"Installed ("+h(R.value.length)+")",1),J(Ge,{class:se(["skills-hub-section-chevron",{"is-open":G.value}])},null,8,["class"])]),G.value?(l(),r("div",js,[(l(!0),r(X,null,we(R.value,n=>(l(),te(Se,{key:n.name,skill:n,onSelect:v=>ce(v)},null,8,["skill","onSelect"]))),128))])):b("",!0)])):b("",!0),o("div",Ks,[o("div",Bs,[J(xe,{class:"skills-hub-search-icon"}),He(o("input",{ref_key:"searchRef",ref:I,"onUpdate:modelValue":e[7]||(e[7]=n=>f.value=n),class:"skills-hub-search",type:"text",placeholder:"Search skills... (e.g. flight, docker, react)",onKeyup:De(ae(re,["prevent"]),["enter"])},null,40,Ms),[[Ne,f.value]]),o("button",{class:"skills-hub-search-btn",type:"button",onClick:re},"Search"),$.value>0?(l(),r("span",Js,h($.value)+" skills",1)):b("",!0)]),o("button",{class:"skills-hub-sort",type:"button",onClick:K},h(E.value),1)]),o("div",Vs,[T.value?(l(),r("div",zs,"Loading skills...")):P.value?(l(),r("div",Ws,h(P.value),1)):(l(),r(X,{key:2},[y.value.length>0?(l(),r("div",qs,[(l(!0),r(X,null,we(y.value,n=>(l(),te(Se,{key:n.url,skill:n,onSelect:v=>ce(v)},null,8,["skill","onSelect"]))),128))])):_.value.trim()?(l(),r("div",Qs,'No skills found for "'+h(_.value)+'"',1)):b("",!0)],64))]),J(ys,{skill:A.value,visible:F.value,"is-installing":N.value,"is-uninstalling":j.value,onClose:e[8]||(e[8]=n=>F.value=!1),onInstall:_e,onUninstall:$e,onToggleEnabled:Ie},null,8,["skill","visible","is-installing","is-uninstalling"])]))}}),Xs=ne(Zs,[["__scopeId","data-v-77953f50"]]);export{Xs as default};
|