@apisurf/wireui 0.1.2 → 0.1.3
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/README.md +42 -26
- package/bin/wireui.mjs +1 -1
- package/dist/nitro.json +1 -1
- package/dist/public/assets/environments-299O-03t.js +1 -0
- package/dist/public/assets/feed-B8L4GK9D.js +1 -0
- package/dist/public/assets/globals-k1eOASJT.css +1 -0
- package/dist/public/assets/history-EqPRzguE.js +1 -0
- package/dist/public/assets/index-D3MuiLlr.js +11 -0
- package/dist/public/assets/kv-table-Dv6o68aD.js +2 -0
- package/dist/public/assets/preload-helper-CIs162tl.js +3 -0
- package/dist/public/assets/query-DE41dcUO.js +19 -0
- package/dist/public/assets/requests._requestId-DSbe2mSh.js +1 -0
- package/dist/public/assets/rolldown-runtime-CbXtAM7H.js +1 -0
- package/dist/public/assets/routes-CRl6TZP9.js +1 -0
- package/dist/public/assets/runs._runId-BGRrB0cL.js +1 -0
- package/dist/public/assets/scoped-DoOxDjHI.js +1 -0
- package/dist/public/assets/session-header-wONyPgx_.js +1 -0
- package/dist/public/assets/sessions-CqjoUG4A.js +1 -0
- package/dist/public/assets/split-Ddiw3mOT.js +1 -0
- package/dist/public/assets/tabs-C1EijW_Z.js +2 -0
- package/dist/server/_ssr/{api-Dw1Zb_PK.mjs → api-DUem3i24.mjs} +28 -17
- package/dist/server/_ssr/environments-BFBtf7iL.mjs +146 -0
- package/dist/server/_ssr/feed-BgweoqQ4.mjs +108 -0
- package/dist/server/_ssr/history-CbfbTHg9.mjs +195 -0
- package/dist/server/_ssr/{kv-table-DQUkoItO.mjs → kv-table-BONnSOLb.mjs} +2 -2
- package/dist/server/_ssr/{router-CPcgc_kh.mjs → prefs-iPvYd_Vz.mjs} +246 -1551
- package/dist/server/_ssr/{query-D4so9xiY.mjs → query-DBNlR5hk.mjs} +7 -6
- package/dist/server/_ssr/{requests._requestId-BFukRwqL.mjs → requests._requestId-DX2svRx4.mjs} +7 -23
- package/dist/server/_ssr/router-BpH2DFcQ.mjs +1068 -0
- package/dist/server/_ssr/{routes-DaV9vGHn.mjs → routes-DGIQrvhg.mjs} +18 -8
- package/dist/server/_ssr/runs._runId-DZ-DQirQ.mjs +850 -0
- package/dist/server/_ssr/{scoped-CnQ56K8h.mjs → scoped-CNX8KOhL.mjs} +2 -2
- package/dist/server/_ssr/session-header-CH-Pbd1E.mjs +153 -0
- package/dist/server/_ssr/{collections-CqidTQpw.mjs → sessions-D3LBcKOI.mjs} +35 -72
- package/dist/server/_ssr/{split-DWrMIs7K.mjs → split-qGbYHKc9.mjs} +2 -2
- package/dist/server/_ssr/ssr.mjs +10 -14
- package/dist/server/_tanstack-start-manifest_v-B2rWFyf7.mjs +79 -0
- package/dist/server/index.mjs +100 -51
- package/package.json +3 -3
- package/dist/public/assets/collections-CLHcfRfi.js +0 -1
- package/dist/public/assets/globals-CZiNFGaK.css +0 -1
- package/dist/public/assets/index-D5VFd_3H.js +0 -14
- package/dist/public/assets/kv-table-oB5gcq0i.js +0 -2
- package/dist/public/assets/query-BKAhHNIi.js +0 -19
- package/dist/public/assets/requests._requestId-Bu7E2eoI.js +0 -1
- package/dist/public/assets/routes-DDY2CfzA.js +0 -1
- package/dist/public/assets/runs._runId-CzwtVjYq.js +0 -1
- package/dist/public/assets/scoped-DB8raIWx.js +0 -1
- package/dist/public/assets/split-Br1RX2I4.js +0 -1
- package/dist/server/_ssr/runs._runId-Df_LmPHa.mjs +0 -836
- package/dist/server/_tanstack-start-manifest_v-CARKjHfs.mjs +0 -50
package/README.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# wireui
|
|
2
2
|
|
|
3
3
|
A local, read-only browser UI for a database recorded by
|
|
4
|
-
[wire](https://github.com/apisurf/wire), laid out like an API client:
|
|
4
|
+
[wire](https://github.com/apisurf/wire), laid out like an API client: sessions
|
|
5
5
|
down the left, open tabs across the top, and each request shown the way Postman
|
|
6
6
|
or Insomnia shows one, with the request on one side and the response on the other.
|
|
7
7
|
Nothing can be sent or edited. It is a window onto what your scripts already did.
|
|
@@ -55,29 +55,35 @@ once a run writes to it.
|
|
|
55
55
|
```
|
|
56
56
|
┌ wireui / wire.sqlite [All environments ▾] [● Live] ⟳ ◫ ☾ ┐
|
|
57
57
|
├──────┬──────────────────────┬────────────────────────────────────────┤
|
|
58
|
-
│
|
|
59
|
-
│
|
|
60
|
-
│ ◷ │
|
|
61
|
-
│ Hist │
|
|
62
|
-
│ ◎ │
|
|
63
|
-
│ Envs │
|
|
64
|
-
│
|
|
65
|
-
|
|
58
|
+
│ ⌂ │ Sessions ‹ │ Overview × checks.ts #6 × History × │
|
|
59
|
+
│ Over │ scripts/api/ ├────────────────────────────────────────┤
|
|
60
|
+
│ ◷ │ catalog.ts 2 │ checks.ts Failing scripts/checks.ts │
|
|
61
|
+
│ Hist │ checks.ts ● 1 │ ● Run #6 1 failed check ‹ › │
|
|
62
|
+
│ ◎ │ scripts/streams/ │ │Wall time│Requests│Failed│Checks 11/12│ │
|
|
63
|
+
│ Envs │ sse.ts 1 │ Timeline Requests Checks Details │
|
|
64
|
+
│ ⛁ │ websocket.ts 1 ├────────────────────────────────────────┤
|
|
65
|
+
└──────┴──────────────────────┴────────────────────────────────────────┘
|
|
66
66
|
```
|
|
67
67
|
|
|
68
|
-
**The sidebar**
|
|
68
|
+
**The sidebar** is the session list: every script is a session, grouped by
|
|
69
|
+
the folder it lives in, relative to the database, with its run count and a red
|
|
70
|
+
dot when its latest run failed. Its runs are on its page, and a run's requests on
|
|
71
|
+
the run's. The chevron in its header collapses it to a slim strip; click the
|
|
72
|
+
strip to expand it again.
|
|
69
73
|
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
74
|
+
**The rail** opens pages, each in a tab like any other:
|
|
75
|
+
|
|
76
|
+
- **Overview** and **SQL**, below.
|
|
73
77
|
- **History.** Every request across every run, newest first, under day headings.
|
|
74
78
|
Search by URL, method or status, narrow to HTTP, WebSocket/SSE or failures, and
|
|
75
79
|
turn on **In payloads** to search request and response bodies through the FTS
|
|
76
|
-
index.
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
80
|
+
index. Its filters are kept in the URL, so its tab reopens on the same view.
|
|
81
|
+
`/` focuses its search box there, and the session filter elsewhere.
|
|
82
|
+
- **Environments.** The `--env` each run was recorded against, with its runs,
|
|
83
|
+
sessions and failures. Picking one scopes the sessions, History, the
|
|
84
|
+
overview and every session page to it; so does the picker in the top bar.
|
|
85
|
+
wire records the environment's name, not its variables, so this page switches
|
|
86
|
+
scope and does not edit anything.
|
|
81
87
|
|
|
82
88
|
**Tabs** work the way they do in an API client. A single click opens a _preview_
|
|
83
89
|
tab (italic), which the next single click reuses; double-click a tab or a sidebar
|
|
@@ -97,18 +103,28 @@ WebSocket and SSE connections open on **Messages** instead: every frame or event
|
|
|
97
103
|
in order, filterable by direction, with the selected payload shown below. `[` and
|
|
98
104
|
`]` step to the previous or next request in the run and keep the same pane open.
|
|
99
105
|
|
|
100
|
-
**A run**
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
106
|
+
**A run** opens under its session's header, in one tinted band with it whose
|
|
107
|
+
edge takes the run's colour, and reads like collection-runner results. The band
|
|
108
|
+
shows the verdict, and a strip of wall time, requests, failed requests, checks
|
|
109
|
+
and bytes; the script's name goes back to the
|
|
110
|
+
session. `[` and `]` step to the previous or next run of the same script and keep
|
|
111
|
+
the same tab open. The tabs are:
|
|
112
|
+
|
|
113
|
+
- **Timeline**: every request on one waterfall, with the run's
|
|
114
|
+
`check()`/`assert()` results interleaved at the moment they were made, each
|
|
115
|
+
marked CHECK or ASSERT where a request shows its method
|
|
116
|
+
- **Requests**: the same table with the requests alone, under the run's
|
|
117
|
+
p50/p95/p99 and status mix. With more than one host, each host is a chip
|
|
118
|
+
(calls, errors) that narrows the table to it; **Slowest first** sorts it by
|
|
119
|
+
duration
|
|
105
120
|
- **Checks**
|
|
106
|
-
- **Insights**: p50/p95/p99, status mix, per-host breakdown, slowest calls
|
|
107
121
|
- **Details**: run metadata, tags, and the snippet for inline runs
|
|
108
122
|
|
|
109
|
-
**A
|
|
123
|
+
**A session** is one script across all its runs. Its header — the script, its
|
|
124
|
+
path, how its latest run went — stays put above its tabs and above any run of it:
|
|
110
125
|
|
|
111
|
-
- **Runs**, with a wall-time bar for each run so regressions stand out
|
|
126
|
+
- **Runs**, with a wall-time bar for each run so regressions stand out; a row
|
|
127
|
+
opens that run
|
|
112
128
|
- **Requests**: the endpoints it calls, one row each, with call count, error count
|
|
113
129
|
and last status
|
|
114
130
|
- **Checks**: each assertion's pass rate over time
|
package/bin/wireui.mjs
CHANGED
|
@@ -36,7 +36,7 @@ const USAGE = `wireui — browse a recorded wire.sqlite in your browser.
|
|
|
36
36
|
Usage
|
|
37
37
|
wireui [options]
|
|
38
38
|
|
|
39
|
-
Serves a prebuilt web UI over one recording:
|
|
39
|
+
Serves a prebuilt web UI over one recording: sessions of scripts, their runs,
|
|
40
40
|
every request with its headers, payloads and timings, WebSocket frames, SSE
|
|
41
41
|
events and checks, plus a read-only SQL console. Binds to 127.0.0.1 only and
|
|
42
42
|
opens the database read-only, so it is unreachable from the network and cannot
|
package/dist/nitro.json
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{B as e,Dt as t,O as n,Ot as r,S as i,U as a,V as o,Vt as s,dt as c,jt as l,n as u,o as d,r as f,u as p,x as m}from"./tabs-C1EijW_Z.js";import{d as h,l as g,u as _}from"./index-D3MuiLlr.js";import{r as v}from"./feed-B8L4GK9D.js";var y=s(),b=l(`__root__`);function x(){f({key:u.environments(),title:`Environments`,icon:`environments`});let s=h(),l=b.useLoaderData(),x=g(l.now,6e4),{prefs:S,set:C}=_();if(s)return s;let w=[{value:`*`,name:`All environments`,runs:l.envs.reduce((e,t)=>e+t.run_count,0),scripts:l.scripts.length,failed:l.envs.reduce((e,t)=>e+t.failed_run_count,0),last:l.envs[0]?.last_started_at??null},...l.envs.map(e=>({value:e.env??``,name:e.env??`No environment`,runs:e.run_count,scripts:e.script_count,failed:e.failed_run_count,last:e.last_started_at}))];return(0,y.jsxs)(`div`,{className:r({display:`flex`,flexDir:`column`,h:`full`,minH:`0`}),children:[(0,y.jsx)(v,{title:`Environments`,subtitle:`The --env each run was recorded against. Pick one to scope every page to it.`}),(0,y.jsx)(`div`,{className:e,children:l.envs.length===0?(0,y.jsxs)(i,{title:`No environments`,icon:(0,y.jsx)(c,{size:20}),children:[`Runs made with `,(0,y.jsx)(`code`,{children:`wire execute --env staging`}),` are grouped here.`]}):(0,y.jsxs)(`table`,{className:o,children:[(0,y.jsx)(`thead`,{children:(0,y.jsxs)(`tr`,{children:[(0,y.jsx)(`th`,{children:`Environment`}),(0,y.jsx)(`th`,{className:`num`,children:`Runs`}),(0,y.jsx)(`th`,{className:`num`,children:`Sessions`}),(0,y.jsx)(`th`,{className:`num`,children:`Threw`}),(0,y.jsx)(`th`,{className:`num`,children:`Last run`})]})}),(0,y.jsx)(`tbody`,{children:w.map(e=>{let i=S.env===e.value;return(0,y.jsxs)(`tr`,{"data-link":!0,"aria-selected":i,onClick:()=>C(`env`,e.value),children:[(0,y.jsx)(`td`,{className:r({maxW:`0`,w:`full`}),children:(0,y.jsxs)(`div`,{className:r({display:`flex`,alignItems:`center`,gap:`2`,minW:`0`}),children:[(0,y.jsx)(`span`,{className:r({display:`inline-flex`,color:i?`accent`:`faint`}),children:(0,y.jsx)(c,{size:14})}),(0,y.jsx)(`span`,{className:t(a,r({fontWeight:`500`})),children:e.name}),i?(0,y.jsx)(n,{tone:`info`,children:`Selected`}):null]})}),(0,y.jsx)(`td`,{className:`num`,children:p(e.runs)}),(0,y.jsx)(`td`,{className:`num`,children:p(e.scripts)}),(0,y.jsx)(`td`,{className:`num`,children:e.failed?(0,y.jsxs)(`span`,{className:r({display:`inline-flex`,alignItems:`center`,gap:`1.5`,color:`bad`}),children:[(0,y.jsx)(m,{tone:`bad`}),p(e.failed)]}):(0,y.jsx)(`span`,{className:r({color:`faint`}),children:`0`})}),(0,y.jsx)(`td`,{className:t(`num`,r({color:`muted`})),children:e.last?d(x,e.last):`—`})]},e.value)})})]})})]})}export{x as component};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{n as e}from"./rolldown-runtime-CbXtAM7H.js";import{C as t,Ot as n,Vt as r,_n as i}from"./tabs-C1EijW_Z.js";var a=e(i(),1),o=r();function s({title:e,subtitle:t,children:r}){return(0,o.jsxs)(`header`,{className:n({px:`5`,pt:`4`,pb:`3`,flexShrink:0}),children:[(0,o.jsx)(`h1`,{className:n({fontSize:`18px`,fontWeight:`600`,m:`0`}),children:e}),(0,o.jsx)(`p`,{className:n({color:`muted`,fontSize:`12px`,m:`0`,mt:`0.5`}),children:t}),r?(0,o.jsx)(`div`,{className:n({display:`flex`,alignItems:`center`,gap:`2`,flexWrap:`wrap`,mt:`3`}),children:r}):null]})}function c({value:e,onCommit:r,placeholder:i}){let[s,c]=a.useState(e);return a.useEffect(()=>c(e),[e]),a.useEffect(()=>{if(s===e)return;let t=window.setTimeout(()=>r(s),180);return()=>window.clearTimeout(t)},[s,e,r]),(0,o.jsx)(t,{"data-page-filter":!0,placeholder:i,shortcut:`/`,value:s,onChange:e=>c(e.target.value),className:n({w:`320px`,maxW:`full`})})}function l({day:e,columns:t}){return(0,o.jsx)(`tr`,{children:(0,o.jsx)(`td`,{colSpan:t,className:n({position:`sticky`,top:`29px`,bg:`canvas`,fontSize:`10.5px`,fontWeight:`600`,textTransform:`uppercase`,letterSpacing:`0.06em`,color:`faint`,pt:`3`,pb:`1`}),children:e})})}function u({shown:e,limit:t}){return e<t?null:(0,o.jsxs)(`p`,{className:n({color:`faint`,fontSize:`12px`,px:`5`,py:`3`,m:`0`}),children:[`Showing the newest `,t,`. Narrow the filters, or the SQL console reaches the rest.`]})}export{c as i,u as n,s as r,l as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@layer reset{html,:host{--font-fallback:ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";-webkit-text-size-adjust:100%;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;tab-size:4;line-height:1.5;font-family:var(--global-font-body,var(--font-fallback));-webkit-tap-highlight-color:transparent}*,:before,:after,::backdrop{border-style:solid;border-width:0;border-color:var(--global-color-border,currentcolor);box-sizing:border-box;margin:0;padding:0}::file-selector-button{border-style:solid;border-width:0;border-color:var(--global-color-border,currentcolor);box-sizing:border-box;margin:0;padding:0}hr{color:inherit;border-top-width:1px;height:0}body{line-height:inherit;height:100%}img{border-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}h1,h2,h3,h4,h5,h6{text-wrap:balance;font-size:inherit;font-weight:inherit}p,h1,h2,h3,h4,h5,h6{overflow-wrap:break-word}ol,ul,menu{list-style:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}button,input,optgroup,select,textarea{font:inherit;background:var(--colors-transparent);font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit}::file-selector-button{font:inherit;background:var(--colors-transparent);font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit}::placeholder{--placeholder-fallback:#00000080;opacity:1;color:var(--global-color-placeholder,var(--placeholder-fallback))}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{--placeholder-fallback:color-mix(in oklab, currentcolor 50%, transparent)}}::selection{background-color:var(--global-color-selection,#0073ff4d)}textarea{resize:vertical}table{border-color:inherit;text-indent:0;border-collapse:collapse}summary{display:list-item}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}dialog{padding:0}a{-webkit-text-decoration:inherit;text-decoration:inherit;color:inherit}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp,pre{--font-mono-fallback:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New";font-family:var(--global-font-mono,var(--font-mono-fallback));font-feature-settings:normal;font-variation-settings:normal;font-size:1em}progress{vertical-align:baseline}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-search-cancel-button{-webkit-appearance:none}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}:-moz-ui-invalid{box-shadow:none}:-moz-focusring{outline:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer base{:root{--made-with-panda:"🐼"}html,body{height:100%;overflow:hidden}body{background:var(--colors-canvas);margin:var(--spacing-0);font-family:var(--fonts-body);color:var(--colors-fg);-webkit-font-smoothing:antialiased;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;font-size:13px;line-height:1.45}[data-theme=dark] body{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}input,button,select,textarea{font-family:inherit;font-size:inherit;color:inherit}::selection{background:var(--colors-accent-soft)}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-thumb{background:var(--colors-line-strong);-webkit-background-clip:content-box;background-clip:content-box;border:3px solid #0000;border-radius:999px}::-webkit-scrollbar-corner{background:var(--colors-transparent)}*,:before,:after,::backdrop{--blur: ;--brightness: ;--contrast: ;--grayscale: ;--hue-rotate: ;--invert: ;--saturate: ;--sepia: ;--drop-shadow: ;--backdrop-blur: ;--backdrop-brightness: ;--backdrop-contrast: ;--backdrop-grayscale: ;--backdrop-hue-rotate: ;--backdrop-invert: ;--backdrop-opacity: ;--backdrop-saturate: ;--backdrop-sepia: ;--gradient-from-position: ;--gradient-to-position: ;--gradient-via-position: ;--scroll-snap-strictness:proximity;--border-spacing-x:0;--border-spacing-y:0;--translate-x:0;--translate-y:0;--rotate:0;--rotate-x:0;--rotate-y:0;--skew-x:0;--skew-y:0;--scale-x:1;--scale-y:1}}@layer tokens{:where(:root,:host){--aspect-ratios-square:1 / 1;--aspect-ratios-landscape:4 / 3;--aspect-ratios-portrait:3 / 4;--aspect-ratios-wide:16 / 9;--aspect-ratios-ultrawide:18 / 5;--aspect-ratios-golden:1.618 / 1;--borders-none:none;--easings-default:cubic-bezier(.4, 0, .2, 1);--easings-linear:linear;--easings-in:cubic-bezier(.4, 0, 1, 1);--easings-out:cubic-bezier(0, 0, .2, 1);--easings-in-out:cubic-bezier(.4, 0, .2, 1);--durations-fastest:50ms;--durations-faster:.1s;--durations-fast:.15s;--durations-normal:.2s;--durations-slow:.3s;--durations-slower:.4s;--durations-slowest:.5s;--font-weights-thin:100;--font-weights-extralight:200;--font-weights-light:300;--font-weights-normal:400;--font-weights-medium:500;--font-weights-semibold:600;--font-weights-bold:700;--font-weights-extrabold:800;--font-weights-black:900;--line-heights-none:1;--line-heights-tight:1.25;--line-heights-snug:1.375;--line-heights-normal:1.5;--line-heights-relaxed:1.625;--line-heights-loose:2;--letter-spacings-tighter:-.05em;--letter-spacings-tight:-.025em;--letter-spacings-normal:0em;--letter-spacings-wide:.025em;--letter-spacings-wider:.05em;--letter-spacings-widest:.1em;--font-sizes-2xs:.5rem;--font-sizes-xs:.75rem;--font-sizes-sm:.875rem;--font-sizes-md:1rem;--font-sizes-lg:1.125rem;--font-sizes-xl:1.25rem;--font-sizes-2xl:1.5rem;--font-sizes-3xl:1.875rem;--font-sizes-4xl:2.25rem;--font-sizes-5xl:3rem;--font-sizes-6xl:3.75rem;--font-sizes-7xl:4.5rem;--font-sizes-8xl:6rem;--font-sizes-9xl:8rem;--shadows-2xs:0 1px #0000000d;--shadows-xs:0 1px 2px 0 #0000000d;--shadows-sm:0 1px 3px 0 #0000001a, 0 1px 2px -1px #0000001a;--shadows-md:0 4px 6px -1px #0000001a, 0 2px 4px -2px #0000001a;--shadows-lg:0 10px 15px -3px #0000001a, 0 4px 6px -4px #0000001a;--shadows-xl:0 20px 25px -5px #0000001a, 0 8px 10px -6px #0000001a;--shadows-2xl:0 25px 50px -12px #00000040;--shadows-inset-2xs:inset 0 1px #0000000d;--shadows-inset-xs:inset 0 1px 1px #0000000d;--shadows-inset-sm:inset 0 2px 4px #0000000d;--colors-current:currentColor;--colors-black:#000;--colors-white:#fff;--colors-transparent:#0000;--colors-rose-50:#fff1f2;--colors-rose-100:#ffe4e6;--colors-rose-200:#fecdd3;--colors-rose-300:#fda4af;--colors-rose-400:#fb7185;--colors-rose-500:#f43f5e;--colors-rose-600:#e11d48;--colors-rose-700:#be123c;--colors-rose-800:#9f1239;--colors-rose-900:#881337;--colors-rose-950:#4c0519;--colors-pink-50:#fdf2f8;--colors-pink-100:#fce7f3;--colors-pink-200:#fbcfe8;--colors-pink-300:#f9a8d4;--colors-pink-400:#f472b6;--colors-pink-500:#ec4899;--colors-pink-600:#db2777;--colors-pink-700:#be185d;--colors-pink-800:#9d174d;--colors-pink-900:#831843;--colors-pink-950:#500724;--colors-fuchsia-50:#fdf4ff;--colors-fuchsia-100:#fae8ff;--colors-fuchsia-200:#f5d0fe;--colors-fuchsia-300:#f0abfc;--colors-fuchsia-400:#e879f9;--colors-fuchsia-500:#d946ef;--colors-fuchsia-600:#c026d3;--colors-fuchsia-700:#a21caf;--colors-fuchsia-800:#86198f;--colors-fuchsia-900:#701a75;--colors-fuchsia-950:#4a044e;--colors-purple-50:#faf5ff;--colors-purple-100:#f3e8ff;--colors-purple-200:#e9d5ff;--colors-purple-300:#d8b4fe;--colors-purple-400:#c084fc;--colors-purple-500:#a855f7;--colors-purple-600:#9333ea;--colors-purple-700:#7e22ce;--colors-purple-800:#6b21a8;--colors-purple-900:#581c87;--colors-purple-950:#3b0764;--colors-violet-50:#f5f3ff;--colors-violet-100:#ede9fe;--colors-violet-200:#ddd6fe;--colors-violet-300:#c4b5fd;--colors-violet-400:#a78bfa;--colors-violet-500:#8b5cf6;--colors-violet-600:#7c3aed;--colors-violet-700:#6d28d9;--colors-violet-800:#5b21b6;--colors-violet-900:#4c1d95;--colors-violet-950:#2e1065;--colors-indigo-50:#eef2ff;--colors-indigo-100:#e0e7ff;--colors-indigo-200:#c7d2fe;--colors-indigo-300:#a5b4fc;--colors-indigo-400:#818cf8;--colors-indigo-500:#6366f1;--colors-indigo-600:#4f46e5;--colors-indigo-700:#4338ca;--colors-indigo-800:#3730a3;--colors-indigo-900:#312e81;--colors-indigo-950:#1e1b4b;--colors-blue-50:#eff6ff;--colors-blue-100:#dbeafe;--colors-blue-200:#bfdbfe;--colors-blue-300:#93c5fd;--colors-blue-400:#60a5fa;--colors-blue-500:#3b82f6;--colors-blue-600:#2563eb;--colors-blue-700:#1d4ed8;--colors-blue-800:#1e40af;--colors-blue-900:#1e3a8a;--colors-blue-950:#172554;--colors-sky-50:#f0f9ff;--colors-sky-100:#e0f2fe;--colors-sky-200:#bae6fd;--colors-sky-300:#7dd3fc;--colors-sky-400:#38bdf8;--colors-sky-500:#0ea5e9;--colors-sky-600:#0284c7;--colors-sky-700:#0369a1;--colors-sky-800:#075985;--colors-sky-900:#0c4a6e;--colors-sky-950:#082f49;--colors-cyan-50:#ecfeff;--colors-cyan-100:#cffafe;--colors-cyan-200:#a5f3fc;--colors-cyan-300:#67e8f9;--colors-cyan-400:#22d3ee;--colors-cyan-500:#06b6d4;--colors-cyan-600:#0891b2;--colors-cyan-700:#0e7490;--colors-cyan-800:#155e75;--colors-cyan-900:#164e63;--colors-cyan-950:#083344;--colors-teal-50:#f0fdfa;--colors-teal-100:#ccfbf1;--colors-teal-200:#99f6e4;--colors-teal-300:#5eead4;--colors-teal-400:#2dd4bf;--colors-teal-500:#14b8a6;--colors-teal-600:#0d9488;--colors-teal-700:#0f766e;--colors-teal-800:#115e59;--colors-teal-900:#134e4a;--colors-teal-950:#042f2e;--colors-emerald-50:#ecfdf5;--colors-emerald-100:#d1fae5;--colors-emerald-200:#a7f3d0;--colors-emerald-300:#6ee7b7;--colors-emerald-400:#34d399;--colors-emerald-500:#10b981;--colors-emerald-600:#059669;--colors-emerald-700:#047857;--colors-emerald-800:#065f46;--colors-emerald-900:#064e3b;--colors-emerald-950:#022c22;--colors-green-50:#f0fdf4;--colors-green-100:#dcfce7;--colors-green-200:#bbf7d0;--colors-green-300:#86efac;--colors-green-400:#4ade80;--colors-green-500:#22c55e;--colors-green-600:#16a34a;--colors-green-700:#15803d;--colors-green-800:#166534;--colors-green-900:#14532d;--colors-green-950:#052e16;--colors-lime-50:#f7fee7;--colors-lime-100:#ecfccb;--colors-lime-200:#d9f99d;--colors-lime-300:#bef264;--colors-lime-400:#a3e635;--colors-lime-500:#84cc16;--colors-lime-600:#65a30d;--colors-lime-700:#4d7c0f;--colors-lime-800:#3f6212;--colors-lime-900:#365314;--colors-lime-950:#1a2e05;--colors-yellow-50:#fefce8;--colors-yellow-100:#fef9c3;--colors-yellow-200:#fef08a;--colors-yellow-300:#fde047;--colors-yellow-400:#facc15;--colors-yellow-500:#eab308;--colors-yellow-600:#ca8a04;--colors-yellow-700:#a16207;--colors-yellow-800:#854d0e;--colors-yellow-900:#713f12;--colors-yellow-950:#422006;--colors-amber-50:#fffbeb;--colors-amber-100:#fef3c7;--colors-amber-200:#fde68a;--colors-amber-300:#fcd34d;--colors-amber-400:#fbbf24;--colors-amber-500:#f59e0b;--colors-amber-600:#d97706;--colors-amber-700:#b45309;--colors-amber-800:#92400e;--colors-amber-900:#78350f;--colors-amber-950:#451a03;--colors-orange-50:#fff7ed;--colors-orange-100:#ffedd5;--colors-orange-200:#fed7aa;--colors-orange-300:#fdba74;--colors-orange-400:#fb923c;--colors-orange-500:#f97316;--colors-orange-600:#ea580c;--colors-orange-700:#c2410c;--colors-orange-800:#9a3412;--colors-orange-900:#7c2d12;--colors-orange-950:#431407;--colors-red-50:#fef2f2;--colors-red-100:#fee2e2;--colors-red-200:#fecaca;--colors-red-300:#fca5a5;--colors-red-400:#f87171;--colors-red-500:#ef4444;--colors-red-600:#dc2626;--colors-red-700:#b91c1c;--colors-red-800:#991b1b;--colors-red-900:#7f1d1d;--colors-red-950:#450a0a;--colors-neutral-50:#fafafa;--colors-neutral-100:#f5f5f5;--colors-neutral-200:#e5e5e5;--colors-neutral-300:#d4d4d4;--colors-neutral-400:#a3a3a3;--colors-neutral-500:#737373;--colors-neutral-600:#525252;--colors-neutral-700:#404040;--colors-neutral-800:#262626;--colors-neutral-900:#171717;--colors-neutral-950:#0a0a0a;--colors-stone-50:#fafaf9;--colors-stone-100:#f5f5f4;--colors-stone-200:#e7e5e4;--colors-stone-300:#d6d3d1;--colors-stone-400:#a8a29e;--colors-stone-500:#78716c;--colors-stone-600:#57534e;--colors-stone-700:#44403c;--colors-stone-800:#292524;--colors-stone-900:#1c1917;--colors-stone-950:#0c0a09;--colors-zinc-50:#fafafa;--colors-zinc-100:#f4f4f5;--colors-zinc-200:#e4e4e7;--colors-zinc-300:#d4d4d8;--colors-zinc-400:#a1a1aa;--colors-zinc-500:#71717a;--colors-zinc-600:#52525b;--colors-zinc-700:#3f3f46;--colors-zinc-800:#27272a;--colors-zinc-900:#18181b;--colors-zinc-950:#09090b;--colors-gray-50:#f9fafb;--colors-gray-100:#f3f4f6;--colors-gray-200:#e5e7eb;--colors-gray-300:#d1d5db;--colors-gray-400:#9ca3af;--colors-gray-500:#6b7280;--colors-gray-600:#4b5563;--colors-gray-700:#374151;--colors-gray-800:#1f2937;--colors-gray-900:#111827;--colors-gray-950:#030712;--colors-slate-50:#f8fafc;--colors-slate-100:#f1f5f9;--colors-slate-200:#e2e8f0;--colors-slate-300:#cbd5e1;--colors-slate-400:#94a3b8;--colors-slate-500:#64748b;--colors-slate-600:#475569;--colors-slate-700:#334155;--colors-slate-800:#1e293b;--colors-slate-900:#0f172a;--colors-slate-950:#020617;--blurs-xs:4px;--blurs-sm:8px;--blurs-md:12px;--blurs-lg:16px;--blurs-xl:24px;--blurs-2xl:40px;--blurs-3xl:64px;--spacing-0:0rem;--spacing-1:.25rem;--spacing-2:.5rem;--spacing-3:.75rem;--spacing-4:1rem;--spacing-5:1.25rem;--spacing-6:1.5rem;--spacing-7:1.75rem;--spacing-8:2rem;--spacing-9:2.25rem;--spacing-10:2.5rem;--spacing-11:2.75rem;--spacing-12:3rem;--spacing-14:3.5rem;--spacing-16:4rem;--spacing-20:5rem;--spacing-24:6rem;--spacing-28:7rem;--spacing-32:8rem;--spacing-36:9rem;--spacing-40:10rem;--spacing-44:11rem;--spacing-48:12rem;--spacing-52:13rem;--spacing-56:14rem;--spacing-60:15rem;--spacing-64:16rem;--spacing-72:18rem;--spacing-80:20rem;--spacing-96:24rem;--spacing-0\.5:.125rem;--spacing-1\.5:.375rem;--spacing-2\.5:.625rem;--spacing-3\.5:.875rem;--spacing-4\.5:1.125rem;--spacing-5\.5:1.375rem;--sizes-0:0rem;--sizes-1:.25rem;--sizes-2:.5rem;--sizes-3:.75rem;--sizes-4:1rem;--sizes-5:1.25rem;--sizes-6:1.5rem;--sizes-7:1.75rem;--sizes-8:2rem;--sizes-9:2.25rem;--sizes-10:2.5rem;--sizes-11:2.75rem;--sizes-12:3rem;--sizes-14:3.5rem;--sizes-16:4rem;--sizes-20:5rem;--sizes-24:6rem;--sizes-28:7rem;--sizes-32:8rem;--sizes-36:9rem;--sizes-40:10rem;--sizes-44:11rem;--sizes-48:12rem;--sizes-52:13rem;--sizes-56:14rem;--sizes-60:15rem;--sizes-64:16rem;--sizes-72:18rem;--sizes-80:20rem;--sizes-96:24rem;--sizes-0\.5:.125rem;--sizes-1\.5:.375rem;--sizes-2\.5:.625rem;--sizes-3\.5:.875rem;--sizes-4\.5:1.125rem;--sizes-5\.5:1.375rem;--sizes-xs:20rem;--sizes-sm:24rem;--sizes-md:28rem;--sizes-lg:32rem;--sizes-xl:36rem;--sizes-2xl:42rem;--sizes-3xl:48rem;--sizes-4xl:56rem;--sizes-5xl:64rem;--sizes-6xl:72rem;--sizes-7xl:80rem;--sizes-8xl:90rem;--sizes-prose:65ch;--sizes-full:100%;--sizes-min:min-content;--sizes-max:max-content;--sizes-fit:fit-content;--sizes-breakpoint-sm:640px;--sizes-breakpoint-md:768px;--sizes-breakpoint-lg:1024px;--sizes-breakpoint-xl:1280px;--sizes-breakpoint-2xl:1536px;--animations-spin:spin 1s linear infinite;--animations-ping:ping 1s cubic-bezier(0, 0, .2, 1) infinite;--animations-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--animations-bounce:bounce 1s infinite;--fonts-sans:ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--fonts-serif:ui-serif, Georgia, Cambria, "Times New Roman", Times, serif;--fonts-body:Inter, ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;--fonts-mono:"JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;--radii-xl:.75rem;--radii-2xl:1rem;--radii-3xl:1.5rem;--radii-4xl:2rem;--radii-full:9999px;--radii-xs:3px;--radii-sm:4px;--radii-md:6px;--radii-lg:8px;--breakpoints-sm:640px;--breakpoints-md:768px;--breakpoints-lg:1024px;--breakpoints-xl:1280px;--breakpoints-2xl:1536px;--colors-chrome:#f3f4f6;--colors-canvas:#fff;--colors-raised:#fff;--colors-well:#f8f9fb;--colors-hover:#eceef2;--colors-selected:#e5edff;--colors-masthead:#edf2fb;--colors-fg:#18181b;--colors-muted:#5f6572;--colors-faint:#9097a3;--colors-line:#e3e5ea;--colors-line-strong:#cfd3da;--colors-accent:#1f6feb;--colors-accent-fg:#fff;--colors-accent-soft:#e8f0fe;--colors-ok:#15803d;--colors-ok-soft:#e7f6ec;--colors-warn:#b45309;--colors-warn-soft:#fdf3e3;--colors-bad:#c62828;--colors-bad-soft:#fdecec;--colors-info:#1d4ed8;--colors-get:#15803d;--colors-post:#b45309;--colors-put:#1d4ed8;--colors-patch:#7e22ce;--colors-delete:#c62828;--colors-other:#64748b;--colors-ws:#7c3aed;--colors-sse:#0f766e;--colors-syn-key:#9a3412;--colors-syn-string:#15803d;--colors-syn-number:#1d4ed8;--colors-syn-bool:#7e22ce;--colors-syn-null:#6b7280;--colors-syn-punct:#6b7280}[data-theme=dark]{--colors-chrome:#18181b;--colors-canvas:#1f1f23;--colors-raised:#26262b;--colors-well:#19191c;--colors-hover:#2c2c32;--colors-selected:#2b3350;--colors-masthead:#1d2230;--colors-fg:#e7e7ea;--colors-muted:#a1a1aa;--colors-faint:#6c6c75;--colors-line:#303036;--colors-line-strong:#43434b;--colors-accent:#6ea8fe;--colors-accent-fg:#0b1220;--colors-accent-soft:#1e2a44;--colors-ok:#4ade80;--colors-ok-soft:#16301f;--colors-warn:#fbbf24;--colors-warn-soft:#352a12;--colors-bad:#f87171;--colors-bad-soft:#3a1d1f;--colors-info:#60a5fa;--colors-get:#4ade80;--colors-post:#fbbf24;--colors-put:#60a5fa;--colors-patch:#c084fc;--colors-delete:#f87171;--colors-other:#94a3b8;--colors-ws:#a78bfa;--colors-sse:#2dd4bf;--colors-syn-key:#f0abfc;--colors-syn-string:#86efac;--colors-syn-number:#93c5fd;--colors-syn-bool:#c4b5fd;--colors-syn-null:#9ca3af;--colors-syn-punct:#71717a}@keyframes spin{to{transform:rotate(360deg)}}@keyframes ping{75%,to{opacity:0;transform:scale(2)}}@keyframes pulse{50%{opacity:.5}}@keyframes bounce{0%,to{animation-timing-function:cubic-bezier(.8,0,1,1);transform:translateY(-25%)}50%{animation-timing-function:cubic-bezier(0,0,.2,1);transform:none}}}@layer recipes;@layer utilities{.bg_well{background:var(--colors-well)}.p_4{padding:var(--spacing-4)}.bd_none{border:var(--borders-none)}.bg_white{background:var(--colors-white)}.m_0{margin:var(--spacing-0)}.bg_canvas{background:var(--colors-canvas)}.bg_transparent{background:var(--colors-transparent)}.bg_okSoft{background:var(--colors-ok-soft)}.bg_accentSoft{background:var(--colors-accent-soft)}.bg_warnSoft{background:var(--colors-warn-soft)}.bg_badSoft{background:var(--colors-bad-soft)}.bg_hover{background:var(--colors-hover)}.bg_ok{background:var(--colors-ok)}.bg_info{background:var(--colors-info)}.bg_warn{background:var(--colors-warn)}.bg_bad{background:var(--colors-bad)}.bg_faint{background:var(--colors-faint)}.bd_1px_solid{border:1px solid}.bg_raised{background:var(--colors-raised)}.p_2px{padding:2px}.bg_lineStrong{background:var(--colors-line-strong)}.bg_masthead{background:var(--colors-masthead)}.bg_chrome{background:var(--colors-chrome)}.anim_pulse_1\.6s_ease-in-out_infinite{animation:1.6s ease-in-out infinite pulse}.bg_accent{background:var(--colors-accent)}.bg_line{background:var(--colors-line)}.bg_sse{background:var(--colors-sse)}.bg_patch{background:var(--colors-patch)}.bg_post{background:var(--colors-post)}.bg_get{background:var(--colors-get)}.p_3{padding:var(--spacing-3)}.p_2\.5{padding:var(--spacing-2\.5)}.p_0{padding:var(--spacing-0)}.gap_2{gap:var(--spacing-2)}.px_3{padding-inline:var(--spacing-3)}.py_1\.5{padding-block:var(--spacing-1\.5)}.bd-b_1px_solid{border-bottom:1px solid}.bd-c_line{border-color:var(--colors-line)}.flex_1{flex:1}.gap_1\.5{gap:var(--spacing-1\.5)}.ov_auto{overflow:auto}.bg-p_0_0\,_0_8px\,_8px_-8px\,_-8px_0{background-position:0 0,0 8px,8px -8px,-8px 0}.py_2{padding-block:var(--spacing-2)}.px_5{padding-inline:var(--spacing-5)}.py_3{padding-block:var(--spacing-3)}.bdr_xs{border-radius:var(--radii-xs)}.px_1{padding-inline:var(--spacing-1)}.py_1{padding-block:var(--spacing-1)}.ov_hidden{overflow:hidden}.gap_1{gap:var(--spacing-1)}.px_2{padding-inline:var(--spacing-2)}.py_0\.5{padding-block:var(--spacing-0\.5)}.bdr_sm{border-radius:var(--radii-sm)}.bdr_full{border-radius:var(--radii-full)}.px_1\.5{padding-inline:var(--spacing-1\.5)}.py_0{padding-block:var(--spacing-0)}.px_2\.5{padding-inline:var(--spacing-2\.5)}.bdr_md{border-radius:var(--radii-md)}.trs_background_80ms{transition:background 80ms}.px_0\.5{padding-inline:var(--spacing-0\.5)}.gap_2px{gap:2px}.ring_none{outline:var(--borders-none)}.gap_0\.5{gap:var(--spacing-0\.5)}.px_3\.5{padding-inline:var(--spacing-3\.5)}.py_2\.5{padding-block:var(--spacing-2\.5)}.bdr_lg{border-radius:var(--radii-lg)}.bd-c_lineStrong{border-color:var(--colors-line-strong)}.bd-r_1px_solid{border-right:1px solid}.gap_2\.5{gap:var(--spacing-2\.5)}.px_6{padding-inline:var(--spacing-6)}.py_10{padding-block:var(--spacing-10)}.py_4{padding-block:var(--spacing-4)}.gap_5{gap:var(--spacing-5)}.td_none{text-decoration:none}.bd-l_1px_solid{border-left:1px solid}.bd-t_1px_solid{border-top:1px solid}.gap_3{gap:var(--spacing-3)}.bd-c_accent{border-color:var(--colors-accent)}.gap_4{gap:var(--spacing-4)}.px_4{padding-inline:var(--spacing-4)}.py_6{padding-block:var(--spacing-6)}.d_flex{display:flex}.flex-d_column{flex-direction:column}.ai_center{align-items:center}.flex-sh_0{flex-shrink:0}.fs_11px{font-size:11px}.jc_center{justify-content:center}.bg-i_linear-gradient\(45deg\,_token\(colors\.hover\)_25\%\,_transparent_25\%\)\,_linear-gradient\(-45deg\,_token\(colors\.hover\)_25\%\,_transparent_25\%\)\,_linear-gradient\(45deg\,_transparent_75\%\,_token\(colors\.hover\)_75\%\)\,_linear-gradient\(-45deg\,_transparent_75\%\,_token\(colors\.hover\)_75\%\){background-image:linear-gradient(45deg, var(--colors-hover) 25%, transparent 25%), linear-gradient(-45deg, var(--colors-hover) 25%, transparent 25%), linear-gradient(45deg, transparent 75%, var(--colors-hover) 75%), linear-gradient(-45deg, transparent 75%, var(--colors-hover) 75%)}.bg-s_16px_16px{background-size:16px 16px}.obj-f_contain{object-fit:contain}.lh_1\.6{line-height:1.6}.c_faint{color:var(--colors-faint)}.ta_right{text-align:right}.us_none{-webkit-user-select:none;user-select:none}.white-space_pre-wrap{white-space:pre-wrap}.wb_break-all{word-break:break-all}.white-space_pre{white-space:pre}.fs_18px{font-size:18px}.fw_600{font-weight:600}.c_muted{color:var(--colors-muted)}.fs_12px{font-size:12px}.flex-wrap_wrap{flex-wrap:wrap}.pos_sticky{position:sticky}.fs_10\.5px{font-size:10.5px}.tt_uppercase{text-transform:uppercase}.ls_0\.06em{letter-spacing:.06em}.c_synKey{color:var(--colors-syn-key)}.c_synString{color:var(--colors-syn-string)}.c_synNumber{color:var(--colors-syn-number)}.c_synBool{color:var(--colors-syn-bool)}.c_synNull{color:var(--colors-syn-null)}.c_synPunct{color:var(--colors-syn-punct)}.ff_mono{font-family:var(--fonts-mono)}.lh_1\.65{line-height:1.65}.wb_break-word{word-break:break-word}.cursor_pointer{cursor:pointer}.pos_relative{position:relative}.pos_absolute{position:absolute}.d_inline-flex{display:inline-flex}.font-style_italic{font-style:italic}.va_top{vertical-align:top}.ta_center{text-align:center}.d_grid{display:grid}.grid-tc_18px_76px_70px_1fr_64px{grid-template-columns:18px 76px 70px 1fr 64px}.ta_left{text-align:left}.c_post{color:var(--colors-post)}.c_get{color:var(--colors-get)}.tov_ellipsis{text-overflow:ellipsis}.white-space_nowrap{white-space:nowrap}.c_put{color:var(--colors-put)}.c_patch{color:var(--colors-patch)}.c_delete{color:var(--colors-delete)}.c_other{color:var(--colors-other)}.c_ws{color:var(--colors-ws)}.c_sse{color:var(--colors-sse)}.fw_700{font-weight:700}.ls_0\.02em{letter-spacing:.02em}.d_inline-block{display:inline-block}.c_ok{color:var(--colors-ok)}.c_info{color:var(--colors-info)}.c_warn{color:var(--colors-warn)}.c_bad{color:var(--colors-bad)}.fw_500{font-weight:500}.lh_18px{line-height:18px}.c_fg{color:var(--colors-fg)}.ai_stretch{align-items:stretch}.scr-bar-w_none{scrollbar-width:none}.fs_13px{font-size:13px}.fv-num_tabular-nums{font-variant-numeric:tabular-nums}.lh_16px{line-height:16px}.c_accent{color:var(--colors-accent)}.fs_10px{font-size:10px}.fs_20px{font-size:20px}.lh_1\.2{line-height:1.2}.ai_baseline{align-items:baseline}.as_flex-start{align-self:flex-start}.fs_15px{font-size:15px}.lh_1\.35{line-height:1.35}.grid-tc_repeat\(auto-fill\,_minmax\(150px\,_1fr\)\){grid-template-columns:repeat(auto-fill,minmax(150px,1fr))}.ai_flex-start{align-items:flex-start}.fs_14px{font-size:14px}.bd-cl_separate{border-collapse:separate}.bd-sp_0{border-spacing:var(--spacing-0)}.fs_12\.5px{font-size:12.5px}.ls_-0\.01em{letter-spacing:-.01em}.c_lineStrong{color:var(--colors-line-strong)}.jc_space-between{justify-content:space-between}.cursor_col-resize{cursor:col-resize}.z_2{z-index:2}.op_0\.4{opacity:.4}.writing-mode_vertical-rl{writing-mode:vertical-rl}.flex-sh_1{flex-shrink:1}.flex-d_row{flex-direction:row}.cursor_row-resize{cursor:row-resize}.d_block{display:block}.grid-tc_150px_1fr_80px{grid-template-columns:150px 1fr 80px}.grid-tc_1fr{grid-template-columns:1fr}.c_accentFg{color:var(--colors-accent-fg)}.resize_none{resize:none}.tab-size_2{tab-size:2}.op_0\.6{opacity:.6}.op_1{opacity:1}.us_all{-webkit-user-select:all;user-select:all}.va_middle{vertical-align:middle}.rg_2{row-gap:var(--spacing-2)}.cg_5{column-gap:var(--spacing-5)}.ai_flex-end{align-items:flex-end}.bdr-t_sm{border-top-left-radius:var(--radii-sm);border-top-right-radius:var(--radii-sm)}.h_full{height:var(--sizes-full)}.min-h_0{min-height:var(--sizes-0)}.min-w_0{min-width:var(--sizes-0)}.ml_auto{margin-left:auto}.pt_2{padding-top:var(--spacing-2)}.min-h_full{min-height:var(--sizes-full)}.max-w_full{max-width:var(--sizes-full)}.w_full{width:var(--sizes-full)}.w_max-content{width:max-content}.min-w_full{min-width:var(--sizes-full)}.pr_3{padding-right:var(--spacing-3)}.pt_4{padding-top:var(--spacing-4)}.pb_3{padding-bottom:var(--spacing-3)}.mt_0\.5{margin-top:var(--spacing-0\.5)}.mt_3{margin-top:var(--spacing-3)}.w_320px{width:320px}.top_29px{top:29px}.pt_3{padding-top:var(--spacing-3)}.pb_1{padding-bottom:var(--spacing-1)}.pl_6{padding-left:var(--spacing-6)}.ml_-14px{margin-left:-14px}.pl_14px{padding-left:14px}.left_0{left:var(--spacing-0)}.top_2px{top:2px}.w_32\%{width:32%}.max-w_240px{max-width:240px}.w_46px{width:46px}.w_7px{width:7px}.h_7px{height:7px}.h_28px{height:28px}.w_28px{width:28px}.ov-x_auto{overflow-x:auto}.h_36px{height:36px}.h_42px{height:42px}.min-w_16px{min-width:16px}.pl_2{padding-left:var(--spacing-2)}.h_26px{height:26px}.h_22px{height:22px}.min-w_88px{min-width:88px}.mb_2{margin-bottom:var(--spacing-2)}.mt_1{margin-top:var(--spacing-1)}.mt_1px{margin-top:1px}.mb_1{margin-bottom:var(--spacing-1)}.max-w_440px{max-width:440px}.top_0{top:var(--spacing-0)}.bottom_0{bottom:var(--spacing-0)}.w_3px{width:3px}.pt_2\.5{padding-top:var(--spacing-2\.5)}.ml_1{margin-left:var(--spacing-1)}.pl_26px{padding-left:26px}.h_100vh{height:100vh}.bdr-tl_lg{border-top-left-radius:var(--radii-lg)}.h_44px{height:44px}.pr_1{padding-right:var(--spacing-1)}.max-w_180px{max-width:180px}.w_56px{width:56px}.w_64px{width:64px}.pt_1{padding-top:var(--spacing-1)}.pb_2{padding-bottom:var(--spacing-2)}.h_30px{height:30px}.pl_3{padding-left:var(--spacing-3)}.pr_1\.5{padding-right:var(--spacing-1\.5)}.right_-3px{right:-3px}.w_6px{width:6px}.max-w_220px{max-width:220px}.w_20px{width:20px}.h_20px{height:20px}.h_24px{height:24px}.pr_2{padding-right:var(--spacing-2)}.pt_1\.5{padding-top:var(--spacing-1\.5)}.pb_0\.5{padding-bottom:var(--spacing-0\.5)}.w_1px{width:1px}.h_1px{height:1px}.h_10px{height:10px}.mt_2{margin-top:var(--spacing-2)}.max-w_0{max-width:var(--sizes-0)}.mt_-2{margin-top:calc(var(--spacing-2) * -1)}.max-w_260px{max-width:260px}.pt_1px{padding-top:1px}.h_40px{height:40px}.w_260px{width:260px}.h_32px{height:32px}.w_auto{width:auto}.pb_2\.5{padding-bottom:var(--spacing-2\.5)}.w_280px{width:280px}.h_8px{height:8px}.min-w_2px{min-width:2px}.top_-1px{top:-1px}.w_2px{width:2px}.mr_1{margin-right:var(--spacing-1)}.w_160px{width:160px}.min-w_4px{min-width:4px}.h_88px{height:88px}.max-w_22px{max-width:22px}.w_8px{width:8px}.\[\&\[aria-selected\=true\]\]\:bg_selected[aria-selected=true]{background:var(--colors-selected)}.\[\&\[aria-pressed\=true\]\]\:bg_accentSoft[aria-pressed=true]{background:var(--colors-accent-soft)}.\[\&\[aria-pressed\=true\]\]\:bg_raised[aria-pressed=true]{background:var(--colors-raised)}.\[\&_th\]\:bg_chrome th{background:var(--colors-chrome)}.\[\&\[aria-pressed\=true\]\]\:bg_okSoft[aria-pressed=true]{background:var(--colors-ok-soft)}.\[\&\[data-active\=true\]\]\:bg_hover[data-active=true]{background:var(--colors-hover)}.\[\&\[aria-selected\=true\]\]\:bg_canvas[aria-selected=true]{background:var(--colors-canvas)}.\[\&\[data-active\=true\]\]\:bg_selected[data-active=true]{background:var(--colors-selected)}.\[\&_\>_\.tab-label\]\:gap_1\.5>.tab-label{gap:var(--spacing-1\.5)}.\[\&_\>_\.tab-label\]\:px_2\.5>.tab-label{padding-inline:var(--spacing-2\.5)}.\[\&_\>_\.tab-label\]\:bdr_md>.tab-label{border-radius:var(--radii-md)}.\[\&_\>_\.tab-label\]\:trs_background_80ms\,_color_80ms>.tab-label{transition:background 80ms,color 80ms}.\[\&\[aria-pressed\=true\]\]\:bd-c_accent[aria-pressed=true]{border-color:var(--colors-accent)}.last\:bd-r_none:last-child{border-right:var(--borders-none)}.\[\&_th\]\:px_3 th{padding-inline:var(--spacing-3)}.\[\&_th\]\:py_1\.5 th{padding-block:var(--spacing-1\.5)}.\[\&_th\]\:bd-b_1px_solid th{border-bottom:1px solid}.\[\&_th\]\:bd-c_line th{border-color:var(--colors-line)}.\[\&_td\]\:px_3 td{padding-inline:var(--spacing-3)}.\[\&_td\]\:py_1\.5 td{padding-block:var(--spacing-1\.5)}.\[\&_td\]\:bd-b_1px_solid td{border-bottom:1px solid}.\[\&_td\]\:bd-c_line td{border-color:var(--colors-line)}.\[\&_\>_\[role\=tablist\]\]\:bd-b_none>[role=tablist]{border-bottom:var(--borders-none)}.\[\&\[aria-pressed\=true\]\]\:bd-c_ok[aria-pressed=true]{border-color:var(--colors-ok)}.last\:bd-b_none:last-child{border-bottom:var(--borders-none)}.disabled\:op_0\.45:is(:disabled,[disabled],[data-disabled],[aria-disabled=true]){opacity:.45}.disabled\:cursor_default:is(:disabled,[disabled],[data-disabled],[aria-disabled=true]){cursor:default}.disabled\:op_0\.35:is(:disabled,[disabled],[data-disabled],[aria-disabled=true]){opacity:.35}.\[\&\[aria-pressed\=true\]\]\:c_accent[aria-pressed=true]{color:var(--colors-accent)}.\[\&_\>_\.tab-label\]\:d_inline-flex>.tab-label{display:inline-flex}.\[\&_\>_\.tab-label\]\:ai_center>.tab-label{align-items:center}.\[\&\[aria-selected\=true\]\]\:c_fg[aria-selected=true]{color:var(--colors-fg)}.\[\&\[aria-selected\=true\]\]\:fw_600[aria-selected=true]{font-weight:600}.\[\&\[aria-pressed\=true\]\]\:c_fg[aria-pressed=true]{color:var(--colors-fg)}.\[\&\[aria-pressed\=true\]\]\:bx-sh_0_1px_2px_rgba\(0\,0\,0\,0\.08\)[aria-pressed=true]{box-shadow:0 1px 2px #00000014}.\[\&\:\:placeholder\]\:c_faint::placeholder{color:var(--colors-faint)}.\[\&\:\:-webkit-search-cancel-button\]\:d_none::-webkit-search-cancel-button{display:none}.\[\&_th\]\:pos_sticky th{position:sticky}.\[\&_th\]\:z_1 th{z-index:1}.\[\&_th\]\:ta_left th{text-align:left}.\[\&_th\]\:fw_500 th{font-weight:500}.\[\&_th\]\:fs_11px th{font-size:11px}.\[\&_th\]\:c_muted th{color:var(--colors-muted)}.\[\&_th\]\:white-space_nowrap th{white-space:nowrap}.\[\&_td\]\:va_middle td{vertical-align:middle}.\[\&_tbody_tr\]\:cursor_default tbody tr{cursor:default}.\[\&_tbody_tr\[data-link\]\]\:cursor_pointer tbody tr[data-link]{cursor:pointer}.\[\&_td\.num\,_\&_th\.num\]\:ta_right td.num,.\[\&_td\.num\,_\&_th\.num\]\:ta_right th.num{text-align:right}.\[\&_td\.num\,_\&_th\.num\]\:fv-num_tabular-nums td.num,.\[\&_td\.num\,_\&_th\.num\]\:fv-num_tabular-nums th.num{font-variant-numeric:tabular-nums}.\[\&_td\.num\,_\&_th\.num\]\:white-space_nowrap td.num,.\[\&_td\.num\,_\&_th\.num\]\:white-space_nowrap th.num{white-space:nowrap}.\[\&\[aria-pressed\=true\]\]\:c_ok[aria-pressed=true]{color:var(--colors-ok)}.\[\&\[data-active\=true\]\]\:c_fg[data-active=true]{color:var(--colors-fg)}.\[\&\[data-active\=true\]_svg\]\:c_accent[data-active=true] svg{color:var(--colors-accent)}.\[\&\[data-preview\=true\]_\.tab-title\]\:font-style_italic[data-preview=true] .tab-title{font-style:italic}.\[\&_\.tab-close\]\:op_0 .tab-close{opacity:0}.after\:content_\"\":after{content:""}.after\:pos_absolute:after{position:absolute}.\[\&_td\]\:ff_mono td{font-family:var(--fonts-mono)}.\[\&_td\]\:fs_12px td,.\[\&_\>_span\]\:fs_12px>span{font-size:12px}.\[\&_\>_\.tab-label\]\:h_calc\(100\%_-_10px\)>.tab-label{height:calc(100% - 10px)}.\[\&_th\]\:top_0 th,.after\:top_0:after{top:var(--spacing-0)}.after\:bottom_0:after{bottom:var(--spacing-0)}.after\:left_-3px:after{left:-3px}.after\:right_-3px:after{right:-3px}.after\:left_0:after{left:var(--spacing-0)}.after\:right_0:after{right:var(--spacing-0)}.after\:top_-3px:after{top:-3px}.after\:bottom_-3px:after{bottom:-3px}.\[\&_td\]\:max-w_420px td{max-width:420px}.focusWithin\:bd-c_accent:focus-within{border-color:var(--colors-accent)}.focusWithin\:c_muted:focus-within{color:var(--colors-muted)}.focusVisible\:ring_2px_solid:is(:focus-visible,[data-focus-visible]){outline:2px solid}.focusVisible\:ring_none:is(:focus-visible,[data-focus-visible]){outline:var(--borders-none)}.\[\&\:focus-visible_\>_\.tab-label\]\:ring_2px_solid:focus-visible>.tab-label{outline:2px solid}.focusVisible\:ring-c_accent:is(:focus-visible,[data-focus-visible]){outline-color:var(--colors-accent)}.focusVisible\:ring-o_1px:is(:focus-visible,[data-focus-visible]){outline-offset:1px}.\[\&\:focus-visible_\>_\.tab-label\]\:ring-c_accent:focus-visible>.tab-label{outline-color:var(--colors-accent)}.\[\&\:focus-visible_\>_\.tab-label\]\:ring-o_-2px:focus-visible>.tab-label{outline-offset:-2px}.hover\:bg_hover:is(:hover,[data-hover]),.\[\&_tbody_tr\:hover_td\]\:bg_hover tbody tr:hover td{background:var(--colors-hover)}.hover\:bg_accent:is(:hover,[data-hover]){background:var(--colors-accent)}.hover\:td_underline:is(:hover,[data-hover]){text-decoration:underline}.hover\:bd-c_lineStrong:is(:hover,[data-hover]){border-color:var(--colors-line-strong)}.hover\:c_fg:is(:hover,[data-hover]){color:var(--colors-fg)}.hover\:c_accent:is(:hover,[data-hover]){color:var(--colors-accent)}.hover\:op_0\.4:is(:hover,[data-hover]){opacity:.4}.\[\&\:hover_\.tab-close\,_\&\[aria-selected\=true\]_\.tab-close\]\:op_1:hover .tab-close,.\[\&\:hover_\.tab-close\,_\&\[aria-selected\=true\]_\.tab-close\]\:op_1[aria-selected=true] .tab-close{opacity:1}.hover\:op_0\.9:is(:hover,[data-hover]){opacity:.9}.disabled\:hover\:bg_raised:is(:disabled,[disabled],[data-disabled],[aria-disabled=true]):is(:hover,[data-hover]){background:var(--colors-raised)}.disabled\:hover\:bg_transparent:is(:disabled,[disabled],[data-disabled],[aria-disabled=true]):is(:hover,[data-hover]){background:var(--colors-transparent)}.\[\&\[aria-selected\=true\]\]\:after\:bg_accent[aria-selected=true]:after,.\[\&\[aria-selected\=true\]\]\:before\:bg_accent[aria-selected=true]:before{background:var(--colors-accent)}.\[\&\[aria-selected\=true\]\]\:after\:content_\"\"[aria-selected=true]:after{content:""}.\[\&\[aria-selected\=true\]\]\:after\:pos_absolute[aria-selected=true]:after{position:absolute}.\[\&\[aria-selected\=true\]\]\:after\:bdr-t_full[aria-selected=true]:after{border-top-left-radius:var(--radii-full);border-top-right-radius:var(--radii-full)}.\[\&\[aria-selected\=true\]\]\:before\:content_\"\"[aria-selected=true]:before{content:""}.\[\&\[aria-selected\=true\]\]\:before\:pos_absolute[aria-selected=true]:before{position:absolute}.\[\&\[aria-selected\=true\]\]\:after\:left_2[aria-selected=true]:after{left:var(--spacing-2)}.\[\&\[aria-selected\=true\]\]\:after\:right_2[aria-selected=true]:after{right:var(--spacing-2)}.\[\&\[aria-selected\=true\]\]\:after\:bottom_-1px[aria-selected=true]:after{bottom:-1px}.\[\&\[aria-selected\=true\]\]\:after\:h_2px[aria-selected=true]:after{height:2px}.\[\&\[aria-selected\=true\]\]\:before\:left_0[aria-selected=true]:before{left:var(--spacing-0)}.\[\&\[aria-selected\=true\]\]\:before\:right_0[aria-selected=true]:before{right:var(--spacing-0)}.\[\&\[aria-selected\=true\]\]\:before\:top_0[aria-selected=true]:before{top:var(--spacing-0)}.\[\&\[aria-selected\=true\]\]\:before\:h_2px[aria-selected=true]:before{height:2px}.hover\:\[\&_\>_\.tab-label\]\:bg_hover:is(:hover,[data-hover])>.tab-label{background:var(--colors-hover)}@media screen and (width>=80rem){.xl\:grid-tc_3fr_2fr{grid-template-columns:3fr 2fr}}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{n as e}from"./rolldown-runtime-CbXtAM7H.js";import{A as t,B as n,Dt as r,E as i,I as a,Nt as o,Ot as s,P as c,R as l,S as u,U as d,V as f,Vt as p,_n as m,c as h,h as g,jt as _,n as v,p as y,pt as b,r as x,s as S}from"./tabs-C1EijW_Z.js";import{n as C}from"./preload-helper-CIs162tl.js";import{a as w,d as T,l as E,u as D}from"./index-D3MuiLlr.js";import{i as O,n as k,r as A,t as j}from"./feed-B8L4GK9D.js";import{t as M}from"./scoped-DoOxDjHI.js";var N=e(m()),P=p(),F=_(`__root__`);function I(){x({key:v.history(),title:`History`,icon:`history`});let e=T(),p=F.useLoaderData(),m=E(p.now,6e4),{prefs:_}=D(),I=w.useSearch(),{data:L}=M(w.useLoaderData(),e=>C({data:{...I,env:e,limit:500}})),R=o({from:w.fullPath}),z=N.useCallback(e=>void R({search:t=>({...t,...e}),replace:!0}),[R]),B=N.useCallback(e=>z({q:e||void 0}),[z]);if(e)return e;let V=I.kind??`all`,H=!!(I.q||I.kind||I.failed),U=_.env===`*`?null:_.env===``?`No environment`:_.env;return(0,P.jsxs)(`div`,{className:s({display:`flex`,flexDir:`column`,h:`full`,minH:`0`}),children:[(0,P.jsxs)(A,{title:`History`,subtitle:(0,P.jsxs)(P.Fragment,{children:[`Every request across every run, newest first.`,U?(0,P.jsxs)(P.Fragment,{children:[` `,`Scoped to `,(0,P.jsx)(`b`,{children:U}),`.`]}):null]}),children:[(0,P.jsx)(O,{value:I.q??``,onCommit:B,placeholder:I.bodies?`Search URLs and payloads`:`Search URL, method or status`}),(0,P.jsx)(t,{items:[{id:`all`,label:`All`},{id:`http`,label:`HTTP`},{id:`stream`,label:`WS/SSE`}],value:V,onSelect:e=>z({kind:e===`all`?void 0:e})}),(0,P.jsx)(a,{checked:!!I.failed,onChange:e=>z({failed:e||void 0}),label:`Failed`}),(0,P.jsx)(a,{checked:!!I.bodies,onChange:e=>z({bodies:e||void 0}),label:`In payloads`})]}),(0,P.jsx)(`div`,{className:n,children:L.length===0?(0,P.jsx)(u,{title:`No requests`,icon:(0,P.jsx)(b,{size:20}),children:H?`Nothing matches these filters.`:`Nothing recorded in this environment yet.`}):(0,P.jsxs)(P.Fragment,{children:[(0,P.jsxs)(`table`,{className:f,children:[(0,P.jsx)(`thead`,{children:(0,P.jsxs)(`tr`,{children:[(0,P.jsx)(`th`,{className:`num`,style:{width:80},children:`Time`}),(0,P.jsx)(`th`,{children:`Request`}),(0,P.jsx)(`th`,{children:`Status`}),(0,P.jsx)(`th`,{children:`Session`}),(0,P.jsx)(`th`,{className:`num`,children:`Size`}),(0,P.jsx)(`th`,{className:`num`,children:`Duration`})]})}),(0,P.jsx)(`tbody`,{children:g(L,m,e=>e.ts).map(e=>(0,P.jsxs)(N.Fragment,{children:[(0,P.jsx)(j,{day:e.day,columns:6}),e.rows.map(e=>(0,P.jsxs)(`tr`,{"data-link":!0,title:`${e.method} ${e.host}${e.path}${e.query?`?${e.query}`:``}`,onClick:()=>void R({to:`/requests/$requestId`,params:{requestId:String(e.id)}}),children:[(0,P.jsx)(`td`,{className:r(`num`,l,s({color:`muted`})),children:h(e.ts)}),(0,P.jsx)(`td`,{className:s({maxW:`0`,w:`full`}),children:(0,P.jsxs)(`div`,{className:s({display:`flex`,alignItems:`center`,gap:`2`,minW:`0`}),children:[(0,P.jsx)(i,{method:e.method,kind:e.kind,width:`list`}),(0,P.jsxs)(`span`,{className:r(d,l),children:[(0,P.jsx)(`span`,{className:s({color:`faint`}),children:e.host}),e.path]})]})}),(0,P.jsx)(`td`,{children:(0,P.jsx)(c,{status:e.status,error:e.error_name})}),(0,P.jsx)(`td`,{className:s({maxW:`220px`}),children:(0,P.jsxs)(`div`,{className:s({display:`flex`,gap:`1.5`,minW:`0`}),children:[(0,P.jsx)(`span`,{className:d,title:e.rel,children:e.file}),(0,P.jsxs)(`span`,{className:r(l,s({color:`faint`})),children:[`#`,e.run_id]})]})}),(0,P.jsx)(`td`,{className:r(`num`,l,s({color:`muted`})),children:S(e.response_bytes)}),(0,P.jsx)(`td`,{className:r(`num`,l),children:y(e.duration_ms)})]},e.id))]},e.day))})]}),(0,P.jsx)(k,{shown:L.length,limit:500})]})})]})}export{I as component};
|