@rizal72/oc-budget 0.0.0-stage → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +97 -2
- package/budget.ts +66 -0
- package/dist/gui-experimental.cjs +53 -0
- package/index.ts +366 -0
- package/package.json +33 -5
- package/peak.ts +104 -0
- package/rpc.ts +111 -0
- package/tui.js +656 -0
- package/vite.config.ts +6 -0
package/README.md
CHANGED
|
@@ -1,3 +1,98 @@
|
|
|
1
|
-
#
|
|
1
|
+
# oc-budget
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
How much credit is left on the account behind the model you are using — a percentage for the Go subscription,
|
|
4
|
+
a dollar balance for Zen, DeepSeek or OpenRouter. It appears in the sidebar, in the footer, in the desktop
|
|
5
|
+
app's session header, and as `/budget` in the terminal.
|
|
6
|
+
|
|
7
|
+
It reads four wallets, and only the ones you have connected: **OpenCode Go** (the subscription's windows),
|
|
8
|
+
**Zen** (the pay-per-use credit), **DeepSeek** and **OpenRouter**. No configuration file of its own, no token
|
|
9
|
+
stored by the plugin: the credentials are OpenCode's, the ones you already put there with `opencode auth
|
|
10
|
+
login`.
|
|
11
|
+
|
|
12
|
+
## Install
|
|
13
|
+
|
|
14
|
+
```sh
|
|
15
|
+
opencode plugin add @rizal72/oc-budget
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
Or by hand, one line in `~/.config/opencode/opencode.jsonc`:
|
|
19
|
+
|
|
20
|
+
```jsonc
|
|
21
|
+
"plugins": ["@rizal72/oc-budget"]
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
Then connect the wallets you care about, exactly as you would without it:
|
|
25
|
+
|
|
26
|
+
```sh
|
|
27
|
+
opencode auth login # the list, then pick one
|
|
28
|
+
opencode auth login opencode-go # the Go subscription
|
|
29
|
+
opencode auth login opencode # the Console account: this is what reads Zen
|
|
30
|
+
opencode auth login deepseek
|
|
31
|
+
opencode auth login openrouter
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
Nothing else to configure. A wallet you never connected is simply not drawn.
|
|
35
|
+
|
|
36
|
+
## Update
|
|
37
|
+
|
|
38
|
+
V2 checks package plugins at startup and never applies the update, so a package only moves when you ask:
|
|
39
|
+
|
|
40
|
+
```sh
|
|
41
|
+
opencode plugin check # which of the installed packages are behind
|
|
42
|
+
opencode plugin update # apply them, and let the server reload
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
Or install [`@rizal72/oc-plugin-updates`](https://www.npmjs.com/package/@rizal72/oc-plugin-updates): the
|
|
46
|
+
count appears in a pill above the composer, with the update one click away.
|
|
47
|
+
|
|
48
|
+
## What it shows
|
|
49
|
+
|
|
50
|
+
| wallet | what it is | connected with | colour |
|
|
51
|
+
|---|---|---|---|
|
|
52
|
+
| `GO nn%` | the Go subscription, and which of its windows pays | a Go key, or the Console account | green under 90, yellow from 90, red at 100 |
|
|
53
|
+
| `ZEN $x.xx` | the pay-per-use credit | the Console account | green above $5, yellow at or below, red at 0 |
|
|
54
|
+
| `DS $x.xx` | the native DeepSeek balance | a DeepSeek key | green above $2, yellow at or below, red at 0 |
|
|
55
|
+
| `OR $x.xx` | OpenRouter credits | an OpenRouter key | green above $5, yellow at or below, red at 0 |
|
|
56
|
+
|
|
57
|
+
Go prints one line per window with its reset — `5h 4% reset 2h 10m`, `wk 31% reset 3d 14h`, `mo 16% reset
|
|
58
|
+
24d 3h` — and, when more than one Console account is connected, the workspace it is reading, by name. When the
|
|
59
|
+
monthly window is rate-limited the gateway falls back to the pay-per-use credit, so the widget shows ZEN: the
|
|
60
|
+
figure answers "who is paying", not "what did I subscribe to".
|
|
61
|
+
|
|
62
|
+
Each surface decides that from the model *it* is showing, because the terminal and the window have separate
|
|
63
|
+
model pickers on purpose. They agree on everything else.
|
|
64
|
+
|
|
65
|
+
## When something is missing, or wrong
|
|
66
|
+
|
|
67
|
+
The widget distinguishes the two, which is why it is worth a line.
|
|
68
|
+
|
|
69
|
+
- **Never connected → absent.** No line, no dash, no error. A dash would claim a reading that does not exist.
|
|
70
|
+
- **Connected but unreadable → its line, with the reason.** A fault is said, not hidden.
|
|
71
|
+
- **Zen is always there**, because it is OpenCode's own wallet: with no Console connection it reads `ZEN —`
|
|
72
|
+
and says why, instead of disappearing.
|
|
73
|
+
- **Go hides when neither of its two paths can read it**, so a free account does not carry a permanent error.
|
|
74
|
+
- A reading is cached for five minutes; the tooltip and the block say how old it is rather than pretending it
|
|
75
|
+
is fresh.
|
|
76
|
+
|
|
77
|
+
## DeepSeek's two tariffs
|
|
78
|
+
|
|
79
|
+
DeepSeek charges less outside its peak hours, and the plugin marks the peak on the DS line so a price you
|
|
80
|
+
did not expect is explained. The windows are DeepSeek's and are computed in UTC, which makes them right across
|
|
81
|
+
a DST change. A Chinese public holiday is not encoded, so it reads as peak: over-warning, which is the safe
|
|
82
|
+
direction.
|
|
83
|
+
|
|
84
|
+
## Adding a provider of your own
|
|
85
|
+
|
|
86
|
+
The snapshot is a list of wallets, and both surfaces draw whatever it carries — so a new wallet is one
|
|
87
|
+
resolver in the server half (`index.ts`: where to read it, which integration holds the key), one entry in the
|
|
88
|
+
threshold table and one name in the paying-wallet rule (`budget.ts`). Fork the repository, add those three,
|
|
89
|
+
and the surfaces follow without being touched.
|
|
90
|
+
|
|
91
|
+
## Limits
|
|
92
|
+
|
|
93
|
+
- The four wallets are the four implemented. A provider outside them is not shown, and its model's row is the
|
|
94
|
+
model's name without a figure — the plugin never guesses a balance.
|
|
95
|
+
- OpenCode Go's numbers come from the Console when it is connected and from the public usage endpoint
|
|
96
|
+
otherwise; the two round differently by a percent, and the public one rounds down.
|
|
97
|
+
- Every figure is read from the provider's own endpoint, so a change on their side arrives as a fault on that
|
|
98
|
+
line, not as silence.
|
package/budget.ts
ADDED
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
// One home for the two facts both halves must agree on: which wallet pays, and where a figure stops
|
|
2
|
+
// being comfortable. How a line is drawn belongs to each surface — the TUI colours spans, the desktop
|
|
3
|
+
// gives a row a tone — but the rule behind the colour is this.
|
|
4
|
+
import type { BudgetSnapshot, UsageWindow } from "./rpc.ts"
|
|
5
|
+
|
|
6
|
+
export type Wallet = "go" | "zen" | "ds" | "or" | "none"
|
|
7
|
+
|
|
8
|
+
export interface ModelRef {
|
|
9
|
+
providerID?: string
|
|
10
|
+
modelID?: string
|
|
11
|
+
variant?: string
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
// Thresholds, unchanged from pi-budget: the point at which the colour turns is a decision about
|
|
15
|
+
// consequence, not an estimate. Go alerts at 90% of the month; the Zen wallet at the console's own $5
|
|
16
|
+
// auto-recharge threshold; DeepSeek at $2 and OpenRouter at $5 (its credits are bought in blocks and
|
|
17
|
+
// expire, so the useful warning is "time to top up" and $2 would fire too late to act on).
|
|
18
|
+
export const GO_WARN_PERCENT = 90
|
|
19
|
+
export const DS_WARN_USD = 2
|
|
20
|
+
export const OR_WARN_USD = 5
|
|
21
|
+
export const ZEN_WARN_USD = 5
|
|
22
|
+
|
|
23
|
+
/** Which wallet pays, read from the model first: a Zen selection never uses the Go subscription however
|
|
24
|
+
* much of the quota is left, and a Go model falls back to the Zen balance once the month is exhausted. */
|
|
25
|
+
export function payingWallet(model: ModelRef | undefined, snapshot: BudgetSnapshot | null): Wallet {
|
|
26
|
+
const provider = model?.providerID ?? ""
|
|
27
|
+
if (provider === "deepseek") return "ds"
|
|
28
|
+
if (provider === "openrouter") return "or"
|
|
29
|
+
if (provider === "opencode" || provider === "opencode-zen") return "zen"
|
|
30
|
+
if (provider === "opencode-go") return snapshot?.go?.monthly?.status === "rate-limited" ? "zen" : "go"
|
|
31
|
+
return "none"
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/** Whether any wallet exists at all. A snapshot carrying nothing is not an empty reading: it is an
|
|
35
|
+
* account with no provider connected, a state of its own and not a fault, and every surface says so
|
|
36
|
+
* instead of drawing a figure or a title with nothing under it. A wallet that exists and whose read
|
|
37
|
+
* failed still counts: the fault is what must be seen, not an absence. */
|
|
38
|
+
export function connected(snapshot: BudgetSnapshot | null | undefined): boolean {
|
|
39
|
+
return !!(snapshot?.go || snapshot?.zen || snapshot?.ds || snapshot?.or)
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/** How old a reading is, in the shortest form that still says something — both surfaces say it. */
|
|
43
|
+
export function ageText(ms: number): string {
|
|
44
|
+
const minutes = Math.floor(ms / 60_000)
|
|
45
|
+
if (minutes < 60) return `${minutes}m`
|
|
46
|
+
return `${Math.floor(minutes / 60)}h ${minutes % 60}m`
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export function windowPercent(window: UsageWindow | undefined): number | null {
|
|
50
|
+
return typeof window?.percent === "number" ? window.percent : null
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/** How long until a quota window resets, in the shortest form that still says something. */
|
|
54
|
+
export function countdown(iso: string | undefined): string {
|
|
55
|
+
if (!iso) return ""
|
|
56
|
+
const target = Date.parse(iso)
|
|
57
|
+
if (!Number.isFinite(target)) return ""
|
|
58
|
+
const ms = target - Date.now()
|
|
59
|
+
if (ms <= 0) return "now"
|
|
60
|
+
const minutes = Math.floor(ms / 60_000)
|
|
61
|
+
if (minutes < 60) return `${minutes}m`
|
|
62
|
+
const hours = Math.floor(minutes / 60)
|
|
63
|
+
if (hours < 48) return `${hours}h ${minutes % 60}m`
|
|
64
|
+
return `${Math.floor(hours / 24)}d ${hours % 24}h`
|
|
65
|
+
}
|
|
66
|
+
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});let e=require("solid-js/web"),t=require("@opencode/plugin/gui"),n=require("solid-js"),r=require("@opencode/plugin/rpc");function i(e,t){let n=e?.providerID??``;return n===`deepseek`?`ds`:n===`openrouter`?`or`:n===`opencode`||n===`opencode-zen`?`zen`:n===`opencode-go`?t?.go?.monthly?.status===`rate-limited`?`zen`:`go`:`none`}function a(e){return!!(e?.go||e?.zen||e?.ds||e?.or)}function o(e){let t=Math.floor(e/6e4);return t<60?`${t}m`:`${Math.floor(t/60)}h ${t%60}m`}function s(e){return typeof e?.percent==`number`?e.percent:null}function c(e){if(!e)return``;let t=Date.parse(e);if(!Number.isFinite(t))return``;let n=t-Date.now();if(n<=0)return`now`;let r=Math.floor(n/6e4);if(r<60)return`${r}m`;let i=Math.floor(r/60);return i<48?`${i}h ${r%60}m`:`${Math.floor(i/24)}d ${i%24}h`}var l={type:`object`,properties:{status:{type:`string`},percent:{type:`number`},resetsAt:{type:`string`}},additionalProperties:!1},u=r.Rpc.define({id:`budget`,methods:{snapshot:{input:{type:`object`,properties:{force:{type:`boolean`}},additionalProperties:!1},output:{type:`object`,properties:{at:{type:`number`},go:{type:`object`,properties:{rolling:l,weekly:l,monthly:l,error:{type:`string`}},additionalProperties:!1},ds:{type:`object`,properties:{balance:{type:`number`},currency:{type:`string`},error:{type:`string`}},additionalProperties:!1},or:{type:`object`,properties:{balance:{type:`number`},totalCredits:{type:`number`},totalUsage:{type:`number`},usageMonthly:{type:`number`},error:{type:`string`}},additionalProperties:!1},zen:{type:`object`,properties:{balance:{type:`number`},available:{type:`number`},org:{type:`string`},peers:{type:`number`},error:{type:`string`}},additionalProperties:!1}},required:[`at`],additionalProperties:!1}}},events:{}});function d(e){return(...t)=>{for(let n of e)n&&n(...t)}}var f=e=>typeof e==`function`&&!e.length?e():e;function p(e,...t){return typeof e==`function`?e(...t):e}var m=/((?:--)?(?:\w+-?)+)\s*:\s*([^;]*)/g;function h(e){let t={},n;for(;n=m.exec(e);)t[n[1]]=n[2];return t}function g(e,t){if(typeof e==`string`){if(typeof t==`string`)return`${e};${t}`;e=h(e)}else typeof t==`string`&&(t=h(t));return{...e,...t}}function _(...e){return d(e)}function v(e,t){let n=[...e],r=n.indexOf(t);return r!==-1&&n.splice(r,1),n}function y(e){return Object.prototype.toString.call(e)===`[object String]`}function b(e){return typeof e==`function`}function x(e){return t=>`${e()}-${t}`}function S(e,t){return e?e===t||e.contains(t):!1}function C(e,t=!1){let{activeElement:n}=T(e);if(!n?.nodeName)return null;if(E(n)&&n.contentDocument)return C(n.contentDocument.body,t);if(t){let e=n.getAttribute(`aria-activedescendant`);if(e){let t=T(n).getElementById(e);if(t)return t}}return n}function w(e){return T(e).defaultView||window}function T(e){return e?e.ownerDocument||e:document}function E(e){return e.tagName===`IFRAME`}var ee=(e=>(e.Escape=`Escape`,e.Enter=`Enter`,e.Tab=`Tab`,e.Space=` `,e.ArrowDown=`ArrowDown`,e.ArrowLeft=`ArrowLeft`,e.ArrowRight=`ArrowRight`,e.ArrowUp=`ArrowUp`,e.End=`End`,e.Home=`Home`,e.PageDown=`PageDown`,e.PageUp=`PageUp`,e))(ee||{});function te(e){return typeof window<`u`&&window.navigator!=null&&e.test(window.navigator.userAgentData?.platform||window.navigator.platform)}function D(){return te(/^Mac/i)}function O(e,t){return t&&(b(t)?t(e):t[0](t[1],e)),e?.defaultPrevented}function ne(e){return t=>{for(let n of e)O(t,n)}}function re(e){return D()?e.metaKey&&!e.ctrlKey:e.ctrlKey&&!e.metaKey}function k(e){if(e){if(ae())e.focus({preventScroll:!0});else{let t=oe(e);e.focus(),se(t)}}}var ie=null;function ae(){if(ie==null){ie=!1;try{document.createElement(`div`).focus({get preventScroll(){return ie=!0,!0}})}catch{}}return ie}function oe(e){let t=e.parentNode,n=[],r=document.scrollingElement||document.documentElement;for(;t instanceof HTMLElement&&t!==r;)(t.offsetHeight<t.scrollHeight||t.offsetWidth<t.scrollWidth)&&n.push({element:t,scrollTop:t.scrollTop,scrollLeft:t.scrollLeft}),t=t.parentNode;return r instanceof HTMLElement&&n.push({element:r,scrollTop:r.scrollTop,scrollLeft:r.scrollLeft}),n}function se(e){for(let{element:t,scrollTop:n,scrollLeft:r}of e)t.scrollTop=n,t.scrollLeft=r}var ce=[`input:not([type='hidden']):not([disabled])`,`select:not([disabled])`,`textarea:not([disabled])`,`button:not([disabled])`,`a[href]`,`area[href]`,`[tabindex]`,`iframe`,`object`,`embed`,`audio[controls]`,`video[controls]`,`[contenteditable]:not([contenteditable='false'])`],le=[...ce,`[tabindex]:not([tabindex="-1"]):not([disabled])`],ue=`${ce.join(`:not([hidden]),`)},[tabindex]:not([disabled]):not([hidden])`;le.join(`:not([hidden]):not([tabindex="-1"]),`);function de(e,t){let n=Array.from(e.querySelectorAll(ue)).filter(fe);return t&&fe(e)&&n.unshift(e),n.forEach((e,t)=>{if(E(e)&&e.contentDocument){let r=e.contentDocument.body,i=de(r,!1);n.splice(t,1,...i)}}),n}function fe(e){return pe(e)&&!me(e)}function pe(e){return e.matches(ue)&&he(e)}function me(e){return Number.parseInt(e.getAttribute(`tabindex`)||`0`,10)<0}function he(e,t){return e.nodeName!==`#comment`&&ge(e)&&_e(e,t)&&(!e.parentElement||he(e.parentElement,e))}function ge(e){if(!(e instanceof HTMLElement)&&!(e instanceof SVGElement))return!1;let{display:t,visibility:n}=e.style,r=t!==`none`&&n!==`hidden`&&n!==`collapse`;if(r){if(!e.ownerDocument.defaultView)return r;let{getComputedStyle:t}=e.ownerDocument.defaultView,{display:n,visibility:i}=t(e);r=n!==`none`&&i!==`hidden`&&i!==`collapse`}return r}function _e(e,t){return!e.hasAttribute(`hidden`)&&(e.nodeName===`DETAILS`&&t&&t.nodeName!==`SUMMARY`?e.hasAttribute(`open`):!0)}function ve(){}function A(e,t){return(0,n.mergeProps)(e,t)}var ye=new Map,be=new Set;function xe(){if(typeof window>`u`||document.body===null)return;let e=e=>{if(!e.target)return;let n=ye.get(e.target);n||(n=new Set,ye.set(e.target,n),e.target.addEventListener(`transitioncancel`,t)),n.add(e.propertyName)},t=e=>{if(!e.target)return;let n=ye.get(e.target);if(n&&(n.delete(e.propertyName),n.size===0&&(e.target.removeEventListener(`transitioncancel`,t),ye.delete(e.target)),ye.size===0)){for(let e of be)e();be.clear()}};document.body.addEventListener(`transitionrun`,e),document.body.addEventListener(`transitionend`,t)}typeof document<`u`&&(document.readyState===`loading`?document.addEventListener(`DOMContentLoaded`,xe):xe());var Se={border:`0`,clip:`rect(0 0 0 0)`,"clip-path":`inset(50%)`,height:`1px`,margin:`0 -1px -1px 0`,overflow:`hidden`,padding:`0`,position:`absolute`,width:`1px`,"white-space":`nowrap`},Ce=new Set([`Avst`,`Arab`,`Armi`,`Syrc`,`Samr`,`Mand`,`Thaa`,`Mend`,`Nkoo`,`Adlm`,`Rohg`,`Hebr`]),we=new Set([`ae`,`ar`,`arc`,`bcc`,`bqi`,`ckb`,`dv`,`fa`,`glk`,`he`,`ku`,`mzn`,`nqo`,`pnb`,`ps`,`sd`,`ug`,`ur`,`yi`]);function Te(e){if(Intl.Locale){let t=new Intl.Locale(e).maximize().script??``;return Ce.has(t)}let t=e.split(`-`)[0];return we.has(t)}function Ee(e){return Te(e)?`rtl`:`ltr`}function De(){let e=typeof navigator<`u`&&(navigator.language||navigator.userLanguage)||`en-US`;try{Intl.DateTimeFormat.supportedLocalesOf([e])}catch{e=`en-US`}return{locale:e,direction:Ee(e)}}var Oe=De(),ke=new Set;function Ae(){Oe=De();for(let e of ke)e(Oe)}function je(){let t={locale:`en-US`,direction:`ltr`},[r,i]=(0,n.createSignal)(Oe),a=(0,n.createMemo)(()=>e.isServer?t:r());return(0,n.onMount)(()=>{ke.size===0&&window.addEventListener(`languagechange`,Ae),ke.add(i),(0,n.onCleanup)(()=>{ke.delete(i),ke.size===0&&window.removeEventListener(`languagechange`,Ae)})}),{locale:()=>a().locale,direction:()=>a().direction}}var Me=(0,n.createContext)();function Ne(){let e=je();return(0,n.useContext)(Me)||e}function j(t){let[r,i]=(0,n.splitProps)(t,[`as`]);if(!r.as)throw Error("[kobalte]: Polymorphic is missing the required `as` prop.");return(0,e.createComponent)(e.Dynamic,(0,e.mergeProps)(i,{get component(){return r.as}}))}var Pe=[`top`,`right`,`bottom`,`left`],M=Math.min,N=Math.max,Fe=Math.round,Ie=Math.floor,P=e=>({x:e,y:e}),Le={left:`right`,right:`left`,bottom:`top`,top:`bottom`};function Re(e,t,n){return N(e,M(t,n))}function F(e,t){return typeof e==`function`?e(t):e}function I(e){return e.split(`-`)[0]}function ze(e){return e.split(`-`)[1]}function Be(e){return e===`x`?`y`:`x`}function Ve(e){return e===`y`?`height`:`width`}function L(e){let t=e[0];return t===`t`||t===`b`?`y`:`x`}function He(e){return Be(L(e))}function Ue(e,t,n){n===void 0&&(n=!1);let r=ze(e),i=He(e),a=Ve(i),o=i===`x`?r===(n?`end`:`start`)?`right`:`left`:r===`start`?`bottom`:`top`;return t.reference[a]>t.floating[a]&&(o=Qe(o)),[o,Qe(o)]}function We(e){let t=Qe(e);return[Ge(e),t,Ge(t)]}function Ge(e){return e.includes(`start`)?e.replace(`start`,`end`):e.replace(`end`,`start`)}var Ke=[`left`,`right`],qe=[`right`,`left`],Je=[`top`,`bottom`],Ye=[`bottom`,`top`];function Xe(e,t,n){switch(e){case`top`:case`bottom`:return n?t?qe:Ke:t?Ke:qe;case`left`:case`right`:return t?Je:Ye;default:return[]}}function Ze(e,t,n,r){let i=ze(e),a=Xe(I(e),n===`start`,r);return i&&(a=a.map(e=>e+`-`+i),t&&(a=a.concat(a.map(Ge)))),a}function Qe(e){let t=I(e);return Le[t]+e.slice(t.length)}function $e(e){return{top:e.top??0,right:e.right??0,bottom:e.bottom??0,left:e.left??0}}function et(e){return typeof e==`number`?{top:e,right:e,bottom:e,left:e}:$e(e)}function tt(e){let{x:t,y:n,width:r,height:i}=e;return{width:r,height:i,top:n,left:t,right:t+r,bottom:n+i,x:t,y:n}}function nt(e,t,n){let{reference:r,floating:i}=e,a=L(t),o=He(t),s=Ve(o),c=I(t),l=a===`y`,u=r.x+r.width/2-i.width/2,d=r.y+r.height/2-i.height/2,f=r[s]/2-i[s]/2,p;switch(c){case`top`:p={x:u,y:r.y-i.height};break;case`bottom`:p={x:u,y:r.y+r.height};break;case`right`:p={x:r.x+r.width,y:d};break;case`left`:p={x:r.x-i.width,y:d};break;default:p={x:r.x,y:r.y}}let m=ze(t);return m&&(p[o]+=f*(m===`end`?1:-1)*(n&&l?-1:1)),p}async function rt(e,t){t===void 0&&(t={});let{x:n,y:r,platform:i,rects:a,elements:o,strategy:s}=e,{boundary:c=`clippingAncestors`,rootBoundary:l=`viewport`,elementContext:u=`floating`,altBoundary:d=!1,padding:f=0}=F(t,e),p=et(f),m=o[d?u===`floating`?`reference`:`floating`:u],h=tt(await i.getClippingRect({element:await(i.isElement==null?void 0:i.isElement(m))??!0?m:m.contextElement||await(i.getDocumentElement==null?void 0:i.getDocumentElement(o.floating)),boundary:c,rootBoundary:l,strategy:s})),g=u===`floating`?{x:n,y:r,width:a.floating.width,height:a.floating.height}:a.reference,_=await(i.getOffsetParent==null?void 0:i.getOffsetParent(o.floating)),v=await(i.isElement==null?void 0:i.isElement(_))&&await(i.getScale==null?void 0:i.getScale(_))||{x:1,y:1},y=tt(i.convertOffsetParentRelativeRectToViewportRelativeRect?await i.convertOffsetParentRelativeRectToViewportRelativeRect({elements:o,rect:g,offsetParent:_,strategy:s}):g);return{top:(h.top-y.top+p.top)/v.y,bottom:(y.bottom-h.bottom+p.bottom)/v.y,left:(h.left-y.left+p.left)/v.x,right:(y.right-h.right+p.right)/v.x}}var it=50,at=async(e,t,n)=>{let{placement:r=`bottom`,strategy:i=`absolute`,middleware:a=[],platform:o}=n,s=o.detectOverflow?o:{...o,detectOverflow:rt},c=await(o.isRTL==null?void 0:o.isRTL(t)),l=await o.getElementRects({reference:e,floating:t,strategy:i}),{x:u,y:d}=nt(l,r,c),f=r,p=0,m={};for(let n=0;n<a.length;n++){let h=a[n];if(!h)continue;let{name:g,fn:_}=h,{x:v,y,data:b,reset:x}=await _({x:u,y:d,initialPlacement:r,placement:f,strategy:i,middlewareData:m,rects:l,platform:s,elements:{reference:e,floating:t}});u=v??u,d=y??d,m[g]={...m[g],...b},x&&p<it&&(p++,typeof x==`object`&&(x.placement&&(f=x.placement),x.rects&&(l=x.rects===!0?await o.getElementRects({reference:e,floating:t,strategy:i}):x.rects),{x:u,y:d}=nt(l,f,c)),n=-1)}return{x:u,y:d,placement:f,strategy:i,middlewareData:m}},ot=e=>({name:`arrow`,options:e,async fn(t){let{x:n,y:r,placement:i,rects:a,platform:o,elements:s,middlewareData:c}=t,{element:l,padding:u=0}=F(e,t)||{};if(l==null)return{};let d=et(u),f={x:n,y:r},p=He(i),m=Ve(p),h=await o.getDimensions(l),g=p===`y`,_=g?`top`:`left`,v=g?`bottom`:`right`,y=g?`clientHeight`:`clientWidth`,b=a.reference[m]+a.reference[p]-f[p]-a.floating[m],x=f[p]-a.reference[p],S=await(o.getOffsetParent==null?void 0:o.getOffsetParent(l)),C=S?S[y]:0;C&&await(o.isElement==null?void 0:o.isElement(S))||(C=s.floating[y]||a.floating[m]);let w=b/2-x/2,T=C/2-h[m]/2-1,E=M(d[_],T),ee=M(d[v],T),te=C-h[m]-ee,D=C/2-h[m]/2+w,O=Re(E,D,te),ne=!c.arrow&&ze(i)!=null&&D!==O&&a.reference[m]/2-(D<E?E:ee)-h[m]/2<0,re=ne?D<E?D-E:D-te:0;return{[p]:f[p]+re,data:{[p]:O,centerOffset:D-O-re,...ne&&{alignmentOffset:re}},reset:ne}}}),st=function(e){return e===void 0&&(e={}),{name:`flip`,options:e,async fn(t){var n;let{placement:r,middlewareData:i,rects:a,initialPlacement:o,platform:s,elements:c}=t,{mainAxis:l=!0,crossAxis:u=!0,fallbackPlacements:d,fallbackStrategy:f=`bestFit`,fallbackAxisSideDirection:p=`none`,flipAlignment:m=!0,...h}=F(e,t);if((n=i.arrow)!=null&&n.alignmentOffset)return{};let g=I(r),_=L(o),v=I(o)===o,y=await(s.isRTL==null?void 0:s.isRTL(c.floating)),b=d||(v||!m?[Qe(o)]:We(o)),x=p!==`none`;!d&&x&&b.push(...Ze(o,m,p,y));let S=[o,...b],C=await s.detectOverflow(t,h),w=[],T=i.flip?.overflows||[];if(l&&w.push(C[g]),u){let e=Ue(r,a,y);w.push(C[e[0]],C[e[1]])}if(T=[...T,{placement:r,overflows:w}],!w.every(e=>e<=0)){let e=(i.flip?.index||0)+1,t=S[e];if(t&&(u!==`alignment`||_===L(t)||T.every(e=>L(e.placement)!==_||e.overflows[0]>0)))return{data:{index:e,overflows:T},reset:{placement:t}};let n=T.filter(e=>e.overflows[0]<=0).sort((e,t)=>e.overflows[1]-t.overflows[1])[0]?.placement;if(!n)switch(f){case`bestFit`:{let e=T.filter(e=>{if(x){let t=L(e.placement);return t===_||t===`y`}return!0}).map(e=>[e.placement,e.overflows.filter(e=>e>0).reduce((e,t)=>e+t,0)]).sort((e,t)=>e[1]-t[1])[0]?.[0];e&&(n=e);break}case`initialPlacement`:n=o}if(r!==n)return{reset:{placement:n}}}return{}}}};function ct(e,t){return{top:e.top-t.height,right:e.right-t.width,bottom:e.bottom-t.height,left:e.left-t.width}}function lt(e){return Pe.some(t=>e[t]>=0)}var ut=function(e){return e===void 0&&(e={}),{name:`hide`,options:e,async fn(t){let{rects:n,platform:r}=t,{strategy:i=`referenceHidden`,...a}=F(e,t);switch(i){case`referenceHidden`:{let e=ct(await r.detectOverflow(t,{...a,elementContext:`reference`}),n.reference);return{data:{referenceHiddenOffsets:e,referenceHidden:lt(e)}}}case`escaped`:{let e=ct(await r.detectOverflow(t,{...a,altBoundary:!0}),n.floating);return{data:{escapedOffsets:e,escaped:lt(e)}}}default:return{}}}}},dt=new Set([`left`,`top`]);async function ft(e,t){let{placement:n,platform:r,elements:i}=e,a=await(r.isRTL==null?void 0:r.isRTL(i.floating)),o=I(n),s=ze(n),c=L(n)===`y`,l=dt.has(o)?-1:1,u=a&&c?-1:1,d=F(t,e),{mainAxis:f,crossAxis:p,alignmentAxis:m}=typeof d==`number`?{mainAxis:d,crossAxis:0,alignmentAxis:null}:{mainAxis:d.mainAxis||0,crossAxis:d.crossAxis||0,alignmentAxis:d.alignmentAxis};return s&&typeof m==`number`&&(p=s===`end`?m*-1:m),c?{x:p*u,y:f*l}:{x:f*l,y:p*u}}var pt=function(e){return e===void 0&&(e=0),{name:`offset`,options:e,async fn(t){var n;let{x:r,y:i,placement:a,middlewareData:o}=t,s=await ft(t,e);return a===o.offset?.placement&&(n=o.arrow)!=null&&n.alignmentOffset?{}:{x:r+s.x,y:i+s.y,data:{...s,placement:a}}}}},mt=function(e){return e===void 0&&(e={}),{name:`shift`,options:e,async fn(t){let{x:n,y:r,placement:i,platform:a}=t,{mainAxis:o=!0,crossAxis:s=!1,limiter:c={fn:e=>{let{x:t,y:n}=e;return{x:t,y:n}}},...l}=F(e,t),u={x:n,y:r},d=await a.detectOverflow(t,l),f=L(i),p=Be(f),m=u[p],h=u[f],g=(e,t)=>Re(t+d[e===`y`?`top`:`left`],t,t-d[e===`y`?`bottom`:`right`]);o&&(m=g(p,m)),s&&(h=g(f,h));let _=c.fn({...t,[p]:m,[f]:h});return{..._,data:{x:_.x-n,y:_.y-r,enabled:{[p]:o,[f]:s}}}}}},ht=function(e){return e===void 0&&(e={}),{name:`size`,options:e,async fn(t){let{placement:n,rects:r,platform:i,elements:a}=t,{apply:o=()=>{},...s}=F(e,t),c=await i.detectOverflow(t,s),l=I(n),u=ze(n),d=L(n)===`y`,{width:f,height:p}=r.floating,m,h;l===`top`||l===`bottom`?(m=l,h=u===(await(i.isRTL==null?void 0:i.isRTL(a.floating))?`start`:`end`)?`left`:`right`):(h=l,m=u===`end`?`top`:`bottom`);let g=p-c.top-c.bottom,_=f-c.left-c.right,v=M(p-c[m],g),y=M(f-c[h],_),b=t.middlewareData.shift,x=!b,S=v,C=y;b!=null&&b.enabled.x&&(C=_),b!=null&&b.enabled.y&&(S=g),x&&!u&&(d?C=f-2*N(c.left,c.right):S=p-2*N(c.top,c.bottom)),await o({...t,availableWidth:C,availableHeight:S});let w=await i.getDimensions(a.floating);return f!==w.width||p!==w.height?{reset:{rects:!0}}:{}}}};function gt(){return typeof window<`u`}function _t(e){return vt(e)?(e.nodeName||``).toLowerCase():`#document`}function R(e){var t;return(e==null||(t=e.ownerDocument)==null?void 0:t.defaultView)||window}function z(e){return((vt(e)?e.ownerDocument:e.document)||window.document)?.documentElement}function vt(e){return gt()?e instanceof Node||e instanceof R(e).Node:!1}function B(e){return gt()?e instanceof Element||e instanceof R(e).Element:!1}function V(e){return gt()?e instanceof HTMLElement||e instanceof R(e).HTMLElement:!1}function yt(e){return!gt()||typeof ShadowRoot>`u`?!1:e instanceof ShadowRoot||e instanceof R(e).ShadowRoot}function bt(e){let{overflow:t,overflowX:n,overflowY:r,display:i}=U(e);return/auto|scroll|overlay|hidden|clip/.test(t+r+n)&&i!==`inline`&&i!==`contents`}function xt(e){return/^(table|td|th)$/.test(_t(e))}function St(e){try{if(e.matches(`:popover-open`))return!0}catch{}try{return e.matches(`:modal`)}catch{return!1}}var Ct=/transform|translate|scale|rotate|perspective|filter/,wt=/paint|layout|strict|content/,H=e=>!!e&&e!==`none`,Tt;function Et(e){let t=B(e)?U(e):e;return H(t.transform)||H(t.translate)||H(t.scale)||H(t.rotate)||H(t.perspective)||!Ot()&&(H(t.backdropFilter)||H(t.filter))||Ct.test(t.willChange||``)||wt.test(t.contain||``)}function Dt(e){let t=W(e);for(;V(t)&&!kt(t);){if(Et(t))return t;if(St(t))return null;t=W(t)}return null}function Ot(){return Tt??=typeof CSS<`u`&&CSS.supports&&CSS.supports(`-webkit-backdrop-filter`,`none`),Tt}function kt(e){return/^(html|body|#document)$/.test(_t(e))}function U(e){return R(e).getComputedStyle(e)}function At(e){return B(e)?{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}:{scrollLeft:e.scrollX,scrollTop:e.scrollY}}function W(e){if(_t(e)===`html`)return e;let t=e.assignedSlot||e.parentNode||yt(e)&&e.host||z(e);return yt(t)?t.host:t}function jt(e){let t=W(e);return kt(t)?(e.ownerDocument||e).body:V(t)&&bt(t)?t:jt(t)}function Mt(e,t,n){t===void 0&&(t=[]),n===void 0&&(n=!0);let r=jt(e),i=r===e.ownerDocument?.body,a=R(r);if(i){let e=Nt(a);return t.concat(a,a.visualViewport||[],bt(r)?r:[],e&&n?Mt(e):[])}return t.concat(r,Mt(r,[],n))}function Nt(e){return e.parent&&Object.getPrototypeOf(e.parent)?e.frameElement:null}function Pt(e){let t=U(e),n=parseFloat(t.width)||0,r=parseFloat(t.height)||0,i=V(e),a=i?e.offsetWidth:n,o=i?e.offsetHeight:r,s=Fe(n)!==a||Fe(r)!==o;return s&&(n=a,r=o),{width:n,height:r,$:s}}function Ft(e){return B(e)?e:e.contextElement}function It(e){let t=Ft(e);if(!V(t))return P(1);let n=t.getBoundingClientRect(),{width:r,height:i,$:a}=Pt(t),o=(a?Fe(n.width):n.width)/r,s=(a?Fe(n.height):n.height)/i;return o&&Number.isFinite(o)||(o=1),s&&Number.isFinite(s)||(s=1),{x:o,y:s}}var Lt=P(0);function Rt(e){let t=R(e);return!Ot()||!t.visualViewport?Lt:{x:t.visualViewport.offsetLeft,y:t.visualViewport.offsetTop}}function zt(e,t,n){return t===void 0&&(t=!1),!!n&&t&&n===R(e)}function G(e,t,n,r){t===void 0&&(t=!1),n===void 0&&(n=!1);let i=e.getBoundingClientRect(),a=Ft(e),o=P(1);t&&(r?B(r)&&(o=It(r)):o=It(e));let s=zt(a,n,r)?Rt(a):P(0),c=(i.left+s.x)/o.x,l=(i.top+s.y)/o.y,u=i.width/o.x,d=i.height/o.y;if(a&&r){let e=R(a),t=B(r)?R(r):r,n=e,i=Nt(n);for(;i&&t!==n;){let e=It(i),t=i.getBoundingClientRect(),r=U(i),a=t.left+(i.clientLeft+parseFloat(r.paddingLeft))*e.x,o=t.top+(i.clientTop+parseFloat(r.paddingTop))*e.y;c*=e.x,l*=e.y,u*=e.x,d*=e.y,c+=a,l+=o,n=R(i),i=Nt(n)}}return tt({width:u,height:d,x:c,y:l})}function Bt(e,t){let n=At(e).scrollLeft;return t?t.left+n:G(z(e)).left+n}function Vt(e,t){let n=e.getBoundingClientRect();return{x:n.left+t.scrollLeft-Bt(e,n),y:n.top+t.scrollTop}}function Ht(e){let{elements:t,rect:n,offsetParent:r,strategy:i}=e,a=i===`fixed`,o=z(r),s=t?St(t.floating):!1;if(r===o||s&&a)return n;let c={scrollLeft:0,scrollTop:0},l=P(1),u=P(0),d=V(r);if((d||!a)&&((_t(r)!==`body`||bt(o))&&(c=At(r)),d)){let e=G(r);l=It(r),u.x=e.x+r.clientLeft,u.y=e.y+r.clientTop}let f=o&&!d&&!a?Vt(o,c):P(0);return{width:n.width*l.x,height:n.height*l.y,x:n.x*l.x-c.scrollLeft*l.x+u.x+f.x,y:n.y*l.y-c.scrollTop*l.y+u.y+f.y}}function Ut(e){return e.getClientRects?Array.from(e.getClientRects()):[]}function Wt(e){let t=At(e),n=e.ownerDocument.body,r=N(e.scrollWidth,e.clientWidth,n.scrollWidth,n.clientWidth),i=N(e.scrollHeight,e.clientHeight,n.scrollHeight,n.clientHeight),a=-t.scrollLeft+Bt(e),o=-t.scrollTop;return U(n).direction===`rtl`&&(a+=N(e.clientWidth,n.clientWidth)-r),{width:r,height:i,x:a,y:o}}var Gt=25;function Kt(e,t,n){n===void 0&&(n=`viewport`);let r=n===`layoutViewport`,i=R(e),a=z(e),o=i.visualViewport,s=a.clientWidth,c=a.clientHeight,l=0,u=0;if(o){let e=!Ot()||t===`fixed`;r?e||(l=-o.offsetLeft,u=-o.offsetTop):(s=o.width,c=o.height,e&&(l=o.offsetLeft,u=o.offsetTop))}if(Bt(a)<=0){let e=a.ownerDocument,t=e.body,n=getComputedStyle(t),r=e.compatMode===`CSS1Compat`&&parseFloat(n.marginLeft)+parseFloat(n.marginRight)||0,i=Math.abs(a.clientWidth-t.clientWidth-r),o=getComputedStyle(a).scrollbarGutter===`stable both-edges`?i/2:i;o<=Gt&&(s-=o)}return{width:s,height:c,x:l,y:u}}function qt(e,t){let n=G(e,!0,t===`fixed`),r=n.top+e.clientTop,i=n.left+e.clientLeft,a=It(e);return{width:e.clientWidth*a.x,height:e.clientHeight*a.y,x:i*a.x,y:r*a.y}}function Jt(e,t,n){let r;if(t===`viewport`||t===`layoutViewport`)r=Kt(e,n,t);else if(t===`document`)r=Wt(z(e));else if(B(t))r=qt(t,n);else{let n=Rt(e);r={x:t.x-n.x,y:t.y-n.y,width:t.width,height:t.height}}return tt(r)}function Yt(e,t){let n=t.get(e);if(n)return n;let r=Mt(e,[],!1).filter(e=>B(e)&&_t(e)!==`body`),i=null,a=U(e).position===`fixed`,o=a?W(e):e;for(;B(o)&&!kt(o);){let e=U(o),t=Et(o),n=i?i.position:a?`fixed`:``;!t&&(n===`fixed`||n===`absolute`&&e.position===`static`)?r=r.filter(e=>e!==o):i=e,o=W(o)}return t.set(e,r),r}function Xt(e){let{element:t,boundary:n,rootBoundary:r,strategy:i}=e,a=[...n===`clippingAncestors`?St(t)?[]:Yt(t,this._c):[].concat(n),r],o=Jt(t,a[0],i),s=o.top,c=o.right,l=o.bottom,u=o.left;for(let e=1;e<a.length;e++){let n=Jt(t,a[e],i);s=N(n.top,s),c=M(n.right,c),l=M(n.bottom,l),u=N(n.left,u)}return{width:c-u,height:l-s,x:u,y:s}}function Zt(e){let{width:t,height:n}=Pt(e);return{width:t,height:n}}function Qt(e,t,n){let r=V(t),i=z(t),a=n===`fixed`,o=G(e,!0,a,t),s={scrollLeft:0,scrollTop:0},c=P(0);if((r||!a)&&((_t(t)!==`body`||bt(i))&&(s=At(t)),r)){let e=G(t,!0,a,t);c.x=e.x+t.clientLeft,c.y=e.y+t.clientTop}!r&&i&&(c.x=Bt(i));let l=i&&!r&&!a?Vt(i,s):P(0);return{x:o.left+s.scrollLeft-c.x-l.x,y:o.top+s.scrollTop-c.y-l.y,width:o.width,height:o.height}}function $t(e){return U(e).position===`static`}function en(e,t){if(!V(e)||U(e).position===`fixed`)return null;if(t)return t(e);let n=e.offsetParent;return z(e)===n&&(n=n.ownerDocument.body),n}function tn(e,t){let n=R(e);if(St(e))return n;if(!V(e)){let t=W(e);for(;t&&!kt(t);){if(B(t)&&!$t(t))return t;t=W(t)}return n}let r=en(e,t);for(;r&&xt(r)&&$t(r);)r=en(r,t);return r&&kt(r)&&$t(r)&&!Et(r)?n:r||Dt(e)||n}var nn=async function(e){let t=this.getOffsetParent||tn,n=this.getDimensions,r=await n(e.floating);return{reference:Qt(e.reference,await t(e.floating),e.strategy),floating:{x:0,y:0,width:r.width,height:r.height}}};function rn(e){return U(e).direction===`rtl`}var an={convertOffsetParentRelativeRectToViewportRelativeRect:Ht,getDocumentElement:z,getClippingRect:Xt,getOffsetParent:tn,getElementRects:nn,getClientRects:Ut,getDimensions:Zt,getScale:It,isElement:B,isRTL:rn};function on(e,t){return e.x===t.x&&e.y===t.y&&e.width===t.width&&e.height===t.height}function sn(e,t,n){let r=null,i,a=z(e);function o(){var e;clearTimeout(i),(e=r)==null||e.disconnect(),r=null}function s(n,c){n===void 0&&(n=!1),c===void 0&&(c=1),o();let l=e.getBoundingClientRect(),{left:u,top:d,width:f,height:p}=l;if(n||t(),!f||!p)return;let m=Ie(d),h=Ie(a.clientWidth-(u+f)),g=Ie(a.clientHeight-(d+p)),_=Ie(u),v={rootMargin:-m+`px `+-h+`px `+-g+`px `+-_+`px`,threshold:N(0,M(1,c))||1},y=!0;function b(t){let n=t[0].intersectionRatio;if(!on(l,e.getBoundingClientRect()))return s();if(n!==c){if(!y)return s();n?s(!1,n):i=setTimeout(()=>{s(!1,1e-7)},1e3)}y=!1}try{r=new IntersectionObserver(b,{...v,root:a.ownerDocument})}catch{r=new IntersectionObserver(b,v)}r.observe(e)}let c=R(e),l=()=>s(n);return c.addEventListener(`resize`,l),s(!0),()=>{c.removeEventListener(`resize`,l),o()}}function cn(e,t,n,r){r===void 0&&(r={});let{ancestorScroll:i=!0,ancestorResize:a=!0,elementResize:o=typeof ResizeObserver==`function`,layoutShift:s=typeof IntersectionObserver==`function`,animationFrame:c=!1}=r,l=Ft(e),u=i||a?[...l?Mt(l):[],...t?Mt(t):[]]:[];u.forEach(e=>{i&&e.addEventListener(`scroll`,n),a&&e.addEventListener(`resize`,n)});let d=l&&s?sn(l,n,a):null,f=-1,p=null;o&&(p=new ResizeObserver(e=>{let[r]=e;r&&r.target===l&&p&&t&&(p.unobserve(t),cancelAnimationFrame(f),f=requestAnimationFrame(()=>{var e;(e=p)==null||e.observe(t)})),n()}),l&&!c&&p.observe(l),t&&p.observe(t));let m,h=c?G(e):null;c&&g();function g(){let t=G(e);h&&!on(h,t)&&n(),h=t,m=requestAnimationFrame(g)}return n(),()=>{var e;u.forEach(e=>{i&&e.removeEventListener(`scroll`,n),a&&e.removeEventListener(`resize`,n)}),d?.(),(e=p)==null||e.disconnect(),p=null,c&&cancelAnimationFrame(m)}}var ln=pt,un=mt,dn=st,fn=ht,pn=ut,mn=ot,hn=(e,t,n)=>{let r=new Map,i=n??{},a={...an,...i.platform,_c:r};return at(e,t,{...i,platform:a})},gn=(0,e.template)(`<svg display=block viewBox="0 0 30 30"style=transform:scale(1.02)><g><path fill=none d=M23,27.8c1.1,1.2,3.4,2.2,5,2.2h2H0h2c1.7,0,3.9-1,5-2.2l6.6-7.2c0.7-0.8,2-0.8,2.7,0L23,27.8L23,27.8z></path><path stroke=none d=M23,27.8c1.1,1.2,3.4,2.2,5,2.2h2H0h2c1.7,0,3.9-1,5-2.2l6.6-7.2c0.7-0.8,2-0.8,2.7,0L23,27.8L23,27.8z>`),_n=(0,n.createContext)();function vn(){let e=(0,n.useContext)(_n);if(e===void 0)throw Error("[kobalte]: `usePopperContext` must be used within a `Popper` component");return e}var yn=30,bn=yn/2,xn={top:180,right:-90,bottom:0,left:90};function Sn(t){let r=vn(),i=A({size:yn},t),[a,o]=(0,n.splitProps)(i,[`ref`,`style`,`size`]),s=()=>r.currentPlacement().split(`-`)[0],c=Cn(r.contentRef),l=()=>c()?.getPropertyValue(`background-color`)||`none`,u=()=>c()?.getPropertyValue(`border-${s()}-color`)||`none`,d=()=>c()?.getPropertyValue(`border-${s()}-width`)||`0px`,f=()=>Number.parseInt(d())*2*(yn/a.size),p=()=>`rotate(${xn[s()]} ${bn} ${bn}) translate(0 2)`;return(0,e.createComponent)(j,(0,e.mergeProps)({as:`div`,ref(e){var t=_(r.setArrowRef,a.ref);typeof t==`function`&&t(e)},"aria-hidden":`true`,get style(){return g({position:`absolute`,"font-size":`${a.size}px`,width:`1em`,height:`1em`,"pointer-events":`none`,fill:l(),stroke:u(),"stroke-width":f()},a.style)}},o,{get children(){var t=gn(),n=t.firstChild;return n.firstChild.nextSibling,(0,e.effect)(()=>(0,e.setAttribute)(n,`transform`,p())),t}}))}function Cn(e){let[t,r]=(0,n.createSignal)();return(0,n.createEffect)(()=>{let t=e();t&&r(w(t).getComputedStyle(t))}),t}function wn(t){let r=vn(),[i,a]=(0,n.splitProps)(t,[`ref`,`style`]);return(0,e.createComponent)(j,(0,e.mergeProps)({as:`div`,ref(e){var t=_(r.setPositionerRef,i.ref);typeof t==`function`&&t(e)},"data-popper-positioner":``,get style(){return g({position:`absolute`,top:0,left:0,"min-width":`max-content`},i.style)}},a))}function Tn(e){let{x:t=0,y:n=0,width:r=0,height:i=0}=e??{};if(typeof DOMRect==`function`)return new DOMRect(t,n,r,i);let a={x:t,y:n,width:r,height:i,top:n,right:t+r,bottom:n+i,left:t};return{...a,toJSON:()=>a}}function En(e,t){return{contextElement:e,getBoundingClientRect:()=>{let n=t(e);return n?Tn(n):e?e.getBoundingClientRect():Tn()}}}function Dn(e){return/^(?:top|bottom|left|right)(?:-(?:start|end))?$/.test(e)}var On={top:`bottom`,right:`left`,bottom:`top`,left:`right`};function kn(e,t){let[n,r]=e.split(`-`),i=On[n];return r?n===`left`||n===`right`?`${i} ${r===`start`?`top`:`bottom`}`:r===`start`?`${i} ${t===`rtl`?`right`:`left`}`:`${i} ${t===`rtl`?`left`:`right`}`:`${i} center`}function An(t){let r=A({getAnchorRect:e=>e?.getBoundingClientRect(),placement:`bottom`,gutter:0,shift:0,flip:!0,slide:!0,overlap:!1,sameWidth:!1,fitViewport:!1,hideWhenDetached:!1,detachedPadding:0,arrowPadding:4,overflowPadding:8},t),[i,a]=(0,n.createSignal)(),[o,s]=(0,n.createSignal)(),[c,l]=(0,n.createSignal)(r.placement),u=()=>En(r.anchorRef?.(),r.getAnchorRect),{direction:d}=Ne();async function f(){let e=u(),t=i(),n=o();if(!e||!t)return;let a=(n?.clientHeight||0)/2,s=typeof r.gutter==`number`?r.gutter+a:r.gutter??a;t.style.setProperty(`--kb-popper-content-overflow-padding`,`${r.overflowPadding}px`),e.getBoundingClientRect();let c=[ln(({placement:e})=>{let t=!!e.split(`-`)[1];return{mainAxis:s,crossAxis:t?void 0:r.shift,alignmentAxis:r.shift}})];if(r.flip!==!1){let e=typeof r.flip==`string`?r.flip.split(` `):void 0;if(e!==void 0&&!e.every(Dn))throw Error("`flip` expects a spaced-delimited list of placements");c.push(dn({padding:r.overflowPadding,fallbackPlacements:e}))}(r.slide||r.overlap)&&c.push(un({mainAxis:r.slide,crossAxis:r.overlap,padding:r.overflowPadding})),c.push(fn({padding:r.overflowPadding,apply({availableWidth:e,availableHeight:n,rects:i}){let a=Math.round(i.reference.width);e=Math.floor(e),n=Math.floor(n),t.style.setProperty(`--kb-popper-anchor-width`,`${a}px`),t.style.setProperty(`--kb-popper-content-available-width`,`${e}px`),t.style.setProperty(`--kb-popper-content-available-height`,`${n}px`),r.sameWidth&&(t.style.width=`${a}px`),r.fitViewport&&(t.style.maxWidth=`${e}px`,t.style.maxHeight=`${n}px`)}})),r.hideWhenDetached&&c.push(pn({padding:r.detachedPadding})),n&&c.push(mn({element:n,padding:r.arrowPadding}));let f=await hn(e,t,{placement:r.placement,strategy:`absolute`,middleware:c,platform:{...an,isRTL:()=>d()===`rtl`}});if(l(f.placement),r.onCurrentPlacementChange?.(f.placement),!t)return;t.style.setProperty(`--kb-popper-content-transform-origin`,kn(f.placement,d()));let p=Math.round(f.x),m=Math.round(f.y),h;if(r.hideWhenDetached&&(h=f.middlewareData.hide?.referenceHidden?`hidden`:`visible`),Object.assign(t.style,{top:`0`,left:`0`,transform:`translate3d(${p}px, ${m}px, 0)`,visibility:h}),n&&f.middlewareData.arrow){let{x:e,y:t}=f.middlewareData.arrow,r=f.placement.split(`-`)[0];Object.assign(n.style,{left:e==null?``:`${e}px`,top:t==null?``:`${t}px`,[r]:`100%`})}}(0,n.createEffect)(()=>{let e=u(),t=i();if(!e||!t)return;let r=cn(e,t,f,{elementResize:typeof ResizeObserver==`function`});(0,n.onCleanup)(r)}),(0,n.createEffect)(()=>{let e=i(),t=r.contentRef?.();e&&t&&queueMicrotask(()=>{e.style.zIndex=getComputedStyle(t).zIndex})});let p={currentPlacement:c,contentRef:()=>r.contentRef?.(),setPositionerRef:a,setArrowRef:s};return(0,e.createComponent)(_n.Provider,{value:p,get children(){return r.children}})}var jn=Object.assign(An,{Arrow:Sn,Context:_n,usePopperContext:vn,Positioner:wn}),Mn=`data-kb-top-layer`,Nn,Pn=!1,K=[];function Fn(e){return K.findIndex(t=>t.node===e)}function In(e){return K[Fn(e)]}function Ln(e){return K.length>0&&K[K.length-1].node===e}function Rn(){return K.filter(e=>e.isPointerBlocking)}function zn(){return[...Rn()].slice(-1)[0]}function Bn(){return Rn().length>0}function Vn(e){let t=Fn(zn()?.node);return Fn(e)<t}function Hn(e){K.push(e)}function Un(e){let t=Fn(e);t<0||K.splice(t,1)}function Wn(){for(let{node:e}of K)e.style.pointerEvents=Vn(e)?`none`:`auto`}function Gn(e){if(Bn()&&!Pn){let t=T(e);Nn=document.body.style.pointerEvents,t.body.style.pointerEvents=`none`,Pn=!0}}function Kn(e){if(Bn())return;let t=T(e);t.body.style.pointerEvents=Nn,t.body.style.length===0&&t.body.removeAttribute(`style`),Pn=!1}var q={layers:K,isTopMostLayer:Ln,hasPointerBlockingLayer:Bn,isBelowPointerBlockingLayer:Vn,addLayer:Hn,removeLayer:Un,indexOf:Fn,find:In,assignPointerEventToLayers:Wn,disableBodyPointerEvents:Gn,restoreBodyPointerEvents:Kn},qn=`focusScope.autoFocusOnMount`,Jn=`focusScope.autoFocusOnUnmount`,Yn={bubbles:!1,cancelable:!0},Xn={stack:[],active(){return this.stack[0]},add(e){e!==this.active()&&this.active()?.pause(),this.stack=v(this.stack,e),this.stack.unshift(e)},remove(e){this.stack=v(this.stack,e),this.active()?.resume()}};function Zn(t,r){let[i,a]=(0,n.createSignal)(!1),o={pause(){a(!0)},resume(){a(!1)}},s=null,c=e=>t.onMountAutoFocus?.(e),l=e=>t.onUnmountAutoFocus?.(e),u=()=>T(r()),d=()=>{let e=u().createElement(`span`);return e.setAttribute(`data-focus-trap`,``),e.tabIndex=0,Object.assign(e.style,Se),e},p=()=>{let e=r();return e?de(e,!0).filter(e=>!e.hasAttribute(`data-focus-trap`)):[]},m=()=>{let e=p();return e.length>0?e[0]:null},h=()=>{let e=p();return e.length>0?e[e.length-1]:null},g=()=>{let e=r();if(!e)return!1;let t=C(e);return!t||S(e,t)?!1:pe(t)};(0,n.createEffect)(()=>{if(e.isServer)return;let t=r();if(!t)return;Xn.add(o);let i=C(t);if(!S(t,i)){let e=new CustomEvent(qn,Yn);t.addEventListener(qn,c),t.dispatchEvent(e),e.defaultPrevented||setTimeout(()=>{k(m()),C(t)===i&&k(t)},0)}(0,n.onCleanup)(()=>{t.removeEventListener(qn,c),setTimeout(()=>{let e=new CustomEvent(Jn,Yn);g()&&e.preventDefault(),t.addEventListener(Jn,l),t.dispatchEvent(e),e.defaultPrevented||k(i??u().body),t.removeEventListener(Jn,l),Xn.remove(o)},0)})}),(0,n.createEffect)(()=>{if(e.isServer)return;let a=r();if(!a||!f(t.trapFocus)||i())return;let o=e=>{let t=e.target;t?.closest(`[data-kb-top-layer]`)||(S(a,t)?s=t:k(s))},c=e=>{let t=e.relatedTarget??C(a);t?.closest(`[data-kb-top-layer]`)||S(a,t)||k(s)};u().addEventListener(`focusin`,o),u().addEventListener(`focusout`,c),(0,n.onCleanup)(()=>{u().removeEventListener(`focusin`,o),u().removeEventListener(`focusout`,c)})}),(0,n.createEffect)(()=>{if(e.isServer)return;let a=r();if(!a||!f(t.trapFocus)||i())return;let o=d();a.insertAdjacentElement(`afterbegin`,o);let s=d();a.insertAdjacentElement(`beforeend`,s);function c(e){let t=m(),n=h();e.relatedTarget===t?k(n):k(t)}o.addEventListener(`focusin`,c),s.addEventListener(`focusin`,c);let l=new MutationObserver(e=>{for(let t of e)t.previousSibling===s&&(s.remove(),a.insertAdjacentElement(`beforeend`,s)),t.nextSibling===o&&(o.remove(),a.insertAdjacentElement(`afterbegin`,o))});l.observe(a,{childList:!0,subtree:!1}),(0,n.onCleanup)(()=>{o.removeEventListener(`focusin`,c),s.removeEventListener(`focusin`,c),o.remove(),s.remove(),l.disconnect()})})}var Qn=`data-live-announcer`;function $n(e){(0,n.createEffect)(()=>{f(e.isDisabled)||(0,n.onCleanup)(tr(f(e.targets),f(e.root)))})}var er=new WeakMap,J=[];function tr(e,t=document.body){let n=new Set(e),r=new Set,i=e=>{for(let t of e.querySelectorAll(`[${Qn}], [${Mn}]`))n.add(t);let t=e=>{if(n.has(e)||e.parentElement&&r.has(e.parentElement)&&e.parentElement.getAttribute(`role`)!==`row`)return NodeFilter.FILTER_REJECT;for(let t of n)if(e.contains(t))return NodeFilter.FILTER_SKIP;return NodeFilter.FILTER_ACCEPT},i=document.createTreeWalker(e,NodeFilter.SHOW_ELEMENT,{acceptNode:t}),o=t(e);if(o===NodeFilter.FILTER_ACCEPT&&a(e),o!==NodeFilter.FILTER_REJECT){let e=i.nextNode();for(;e!=null;)a(e),e=i.nextNode()}},a=e=>{let t=er.get(e)??0;(e.getAttribute(`aria-hidden`)!==`true`||t!==0)&&(t===0&&setTimeout(()=>requestAnimationFrame(()=>e.setAttribute(`aria-hidden`,`true`))),r.add(e),er.set(e,t+1))};J.length&&J[J.length-1].disconnect(),i(t);let o=new MutationObserver(e=>{for(let t of e)if(t.type===`childList`&&t.addedNodes.length!==0&&![...n,...r].some(e=>e.contains(t.target))){for(let e of t.removedNodes)e instanceof Element&&(n.delete(e),r.delete(e));for(let e of t.addedNodes)(e instanceof HTMLElement||e instanceof SVGElement)&&(e.dataset.liveAnnouncer===`true`||e.dataset.reactAriaTopLayer===`true`)?n.add(e):e instanceof Element&&i(e)}});o.observe(t,{childList:!0,subtree:!0});let s={observe(){o.observe(t,{childList:!0,subtree:!0})},disconnect(){o.disconnect()}};return J.push(s),()=>{o.disconnect();for(let e of r){let t=er.get(e);if(t==null)return;t===1?(setTimeout(()=>requestAnimationFrame(()=>e.removeAttribute(`aria-hidden`))),er.delete(e)):er.set(e,t-1)}s===J[J.length-1]?(J.pop(),J.length&&J[J.length-1].observe()):J.splice(J.indexOf(s),1)}}function nr(t){let r=e=>{e.key===ee.Escape&&t.onEscapeKeyDown?.(e)};(0,n.createEffect)(()=>{if(e.isServer||f(t.isDisabled))return;let i=t.ownerDocument?.()??T();i.addEventListener(`keydown`,r),(0,n.onCleanup)(()=>{i.removeEventListener(`keydown`,r)})})}var rr=`interactOutside.pointerDownOutside`,ir=`interactOutside.focusOutside`;function ar(t,r){let i,a=ve,o=()=>T(r()),s=e=>t.onPointerDownOutside?.(e),c=e=>t.onFocusOutside?.(e),l=e=>t.onInteractOutside?.(e),u=e=>{let n=e.target;return!(n instanceof Element)||n.closest(`[data-kb-top-layer]`)||!S(o(),n)||S(r(),n)?!1:!t.shouldExcludeElement?.(n)},d=e=>{function t(){let t=r(),n=e.target;if(!t||!n||!u(e))return;let i=ne([s,l]);n.addEventListener(rr,i,{once:!0});let a=new CustomEvent(rr,{bubbles:!1,cancelable:!0,detail:{originalEvent:e,isContextMenu:e.button===2||re(e)&&e.button===0}});n.dispatchEvent(a)}e.pointerType===`touch`?(o().removeEventListener(`click`,t),a=t,o().addEventListener(`click`,t,{once:!0})):t()},p=e=>{let t=r(),n=e.target;if(!t||!n||!u(e))return;let i=ne([c,l]);n.addEventListener(ir,i,{once:!0});let a=new CustomEvent(ir,{bubbles:!1,cancelable:!0,detail:{originalEvent:e,isContextMenu:!1}});n.dispatchEvent(a)};(0,n.createEffect)(()=>{e.isServer||f(t.isDisabled)||(i=window.setTimeout(()=>{o().addEventListener(`pointerdown`,d,!0)},0),o().addEventListener(`focusin`,p,!0),(0,n.onCleanup)(()=>{window.clearTimeout(i),o().removeEventListener(`click`,a),o().removeEventListener(`pointerdown`,d,!0),o().removeEventListener(`focusin`,p,!0)}))})}var or=(0,n.createContext)();function sr(){return(0,n.useContext)(or)}function cr(t){let r,i=sr(),[a,o]=(0,n.splitProps)(t,[`ref`,`disableOutsidePointerEvents`,`excludedElements`,`onEscapeKeyDown`,`onPointerDownOutside`,`onFocusOutside`,`onInteractOutside`,`onDismiss`,`bypassTopMostLayerCheck`]),s=new Set([]),c=e=>{s.add(e);let t=i?.registerNestedLayer(e);return()=>{s.delete(e),t?.()}};ar({shouldExcludeElement:e=>r?a.excludedElements?.some(t=>S(t(),e))||[...s].some(t=>S(t,e)):!1,onPointerDownOutside:e=>{r&&!q.isBelowPointerBlockingLayer(r)&&(a.bypassTopMostLayerCheck||q.isTopMostLayer(r))&&(a.onPointerDownOutside?.(e),a.onInteractOutside?.(e),e.defaultPrevented||a.onDismiss?.())},onFocusOutside:e=>{a.onFocusOutside?.(e),a.onInteractOutside?.(e),e.defaultPrevented||a.onDismiss?.()}},()=>r),nr({ownerDocument:()=>T(r),onEscapeKeyDown:e=>{r&&q.isTopMostLayer(r)&&(a.onEscapeKeyDown?.(e),!e.defaultPrevented&&a.onDismiss&&(e.preventDefault(),a.onDismiss()))}}),(0,n.onMount)(()=>{if(!r)return;q.addLayer({node:r,isPointerBlocking:a.disableOutsidePointerEvents,dismiss:a.onDismiss});let e=i?.registerNestedLayer(r);q.assignPointerEventToLayers(),q.disableBodyPointerEvents(r),(0,n.onCleanup)(()=>{r&&(q.removeLayer(r),e?.(),q.assignPointerEventToLayers(),q.restoreBodyPointerEvents(r))})}),(0,n.createEffect)((0,n.on)([()=>r,()=>a.disableOutsidePointerEvents],([e,t])=>{if(!e)return;let r=q.find(e);r&&r.isPointerBlocking!==t&&(r.isPointerBlocking=t,q.assignPointerEventToLayers()),t&&q.disableBodyPointerEvents(e),(0,n.onCleanup)(()=>{q.restoreBodyPointerEvents(e)})},{defer:!0}));let l={registerNestedLayer:c};return(0,e.createComponent)(or.Provider,{value:l,get children(){return(0,e.createComponent)(j,(0,e.mergeProps)({as:`div`,ref(e){var t=_(e=>r=e,a.ref);typeof t==`function`&&t(e)}},o))}})}function lr(e){let[t,r]=(0,n.createSignal)(e.defaultValue?.()),i=(0,n.createMemo)(()=>e.value?.()!==void 0),a=(0,n.createMemo)(()=>i()?e.value?.():t());return[a,t=>{(0,n.untrack)(()=>{let n=p(t,a());return Object.is(n,a())||(i()||r(n),e.onChange?.(n)),n})}]}function ur(e){let[t,n]=lr(e);return[()=>t()??!1,n]}function dr(e={}){let[t,n]=ur({value:()=>f(e.open),defaultValue:()=>!!f(e.defaultOpen),onChange:t=>e.onOpenChange?.(t)}),r=()=>{n(!0)},i=()=>{n(!1)};return{isOpen:t,setIsOpen:n,open:r,close:i,toggle:()=>{t()?i():r()}}}function fr(e,t){let[r,i]=(0,n.createSignal)(pr(t?.()));return(0,n.createEffect)(()=>{i(e()?.tagName.toLowerCase()||pr(t?.()))}),r}function pr(e){return y(e)?e:void 0}var mr=Object.defineProperty,hr=(e,t)=>{for(var n in t)mr(e,n,{get:t[n],enumerable:!0})};hr({},{Button:()=>yr,Root:()=>vr});var gr=[`button`,`color`,`file`,`image`,`reset`,`submit`];function _r(e){let t=e.tagName.toLowerCase();return t===`button`?!0:t===`input`&&e.type?gr.indexOf(e.type)!==-1:!1}function vr(t){let r,i=A({type:`button`},t),[a,o]=(0,n.splitProps)(i,[`ref`,`type`,`disabled`]),s=fr(()=>r,()=>`button`),c=(0,n.createMemo)(()=>{let e=s();return e!=null&&_r({tagName:e,type:a.type})}),l=(0,n.createMemo)(()=>s()===`input`),u=(0,n.createMemo)(()=>s()===`a`&&r?.getAttribute(`href`)!=null);return(0,e.createComponent)(j,(0,e.mergeProps)({as:`button`,ref(e){var t=_(e=>r=e,a.ref);typeof t==`function`&&t(e)},get type(){return(0,e.memo)(()=>!!(c()||l()))()?a.type:void 0},get role(){return!c()&&!u()?`button`:void 0},get tabIndex(){return!c()&&!u()&&!a.disabled?0:void 0},get disabled(){return(0,e.memo)(()=>!!(c()||l()))()?a.disabled:void 0},get"aria-disabled"(){return!c()&&!l()&&a.disabled?!0:void 0},get"data-disabled"(){return a.disabled?``:void 0}},o))}var yr=vr;function br(e){return t=>(e(t),()=>e(void 0))}var Y=e=>typeof e==`function`?e():e,xr=(e,t)=>{if(e.contains(t))return!0;let n=t;for(;n;){if(n===e)return!0;n=n._$host??n.parentElement}return!1},Sr=new Map,Cr=e=>{(0,n.createEffect)(()=>{let t=Y(e.style)??{},r=Y(e.properties)??[],i={};for(let n in t)i[n]=e.element.style[n];let a=Sr.get(e.key);a?a.activeCount++:Sr.set(e.key,{activeCount:1,originalStyles:i,properties:r.map(e=>e.key)}),Object.assign(e.element.style,e.style);for(let t of r)e.element.style.setProperty(t.key,t.value);(0,n.onCleanup)(()=>{let t=Sr.get(e.key);if(t){if(t.activeCount!==1)t.activeCount--;else{Sr.delete(e.key);for(let[n,r]of Object.entries(t.originalStyles))e.element.style[n]=r;for(let n of t.properties)e.element.style.removeProperty(n);e.element.style.length===0&&e.element.removeAttribute(`style`),e.cleanup?.()}}})})},wr=(e,t)=>{switch(t){case`x`:return[e.clientWidth,e.scrollLeft,e.scrollWidth];case`y`:return[e.clientHeight,e.scrollTop,e.scrollHeight]}},Tr=(e,t)=>{let n=getComputedStyle(e),r=t===`x`?n.overflowX:n.overflowY;return r===`auto`||r===`scroll`||e.tagName===`HTML`&&r===`visible`},Er=(e,t,n)=>{let r=t===`x`&&window.getComputedStyle(e).direction===`rtl`?-1:1,i=e,a=0,o=0,s=!1;do{let[e,c,l]=wr(i,t),u=l-e-r*c;(c!==0||u!==0)&&Tr(i,t)&&(a+=u,o+=c),i===(n??document.documentElement)?s=!0:i=i._$host??i.parentElement}while(i&&!s);return[a,o]},[Dr,Or]=(0,n.createSignal)([]),kr=e=>Dr().indexOf(e)===Dr().length-1,Ar=e=>{let t=(0,n.mergeProps)({element:null,enabled:!0,hideScrollbar:!0,preventScrollbarShift:!0,preventScrollbarShiftMode:`padding`,restoreScrollPosition:!0,allowPinchZoom:!1},e),r=(0,n.createUniqueId)(),i=[0,0],a=null,o=null;(0,n.createEffect)(()=>{Y(t.enabled)&&(Or(e=>[...e,r]),(0,n.onCleanup)(()=>{Or(e=>e.filter(e=>e!==r))}))}),(0,n.createEffect)(()=>{if(!Y(t.enabled)||!Y(t.hideScrollbar))return;let{documentElement:e}=document,n=window.innerWidth-e.clientWidth;if(Y(t.preventScrollbarShift)){let r={overflow:`hidden`},i=[];n>0&&(Y(t.preventScrollbarShiftMode)===`padding`?r.paddingRight=`calc(${window.getComputedStyle(e).paddingRight} + ${n}px)`:r.marginRight=`calc(${window.getComputedStyle(e).marginRight} + ${n}px)`,i.push({key:`--scrollbar-width`,value:`${n}px`}));let a=window.scrollY,o=window.scrollX;Cr({key:`prevent-scroll`,element:e,style:r,properties:i,cleanup:()=>{Y(t.restoreScrollPosition)&&n>0&&window.scrollTo(o,a)}})}else Cr({key:`prevent-scroll`,element:e,style:{overflow:`hidden`}})}),(0,n.createEffect)(()=>{kr(r)&&Y(t.enabled)&&(document.addEventListener(`wheel`,c,{passive:!1}),document.addEventListener(`touchstart`,s,{passive:!1}),document.addEventListener(`touchmove`,l,{passive:!1}),(0,n.onCleanup)(()=>{document.removeEventListener(`wheel`,c),document.removeEventListener(`touchstart`,s),document.removeEventListener(`touchmove`,l)}))});let s=e=>{i=Mr(e),a=null,o=null},c=e=>{let n=e.target,r=Y(t.element),i=jr(e),a=Math.abs(i[0])>Math.abs(i[1])?`x`:`y`,o=Nr(n,a,a===`x`?i[0]:i[1],r),s;s=r&&xr(r,n)?!o:!0,s&&e.cancelable&&e.preventDefault()},l=e=>{let n=Y(t.element),r=e.target,s;if(e.touches.length===2)s=!Y(t.allowPinchZoom);else{if(a==null||o===null){let t=Mr(e).map((e,t)=>i[t]-e),n=Math.abs(t[0])>Math.abs(t[1])?`x`:`y`;a=n,o=n===`x`?t[0]:t[1]}if(r.type===`range`)s=!1;else{let e=Nr(r,a,o,n);s=n&&xr(n,r)?!e:!0}}s&&e.cancelable&&e.preventDefault()}},jr=e=>[e.deltaX,e.deltaY],Mr=e=>e.changedTouches[0]?[e.changedTouches[0].clientX,e.changedTouches[0].clientY]:[0,0],Nr=(e,t,n,r)=>{let[i,a]=Er(e,t,r!==null&&xr(r,e)?r:void 0);return!(n>0&&Math.abs(i)<=1||n<0&&Math.abs(a)<1)},Pr=Ar,Fr=e=>{let t=(0,n.createMemo)(()=>{let t=Y(e.element);if(t)return getComputedStyle(t)}),r=()=>t()?.animationName??`none`,[i,a]=(0,n.createSignal)(Y(e.show)?`present`:`hidden`),o=t=>{a(t),e.onStateChange?.(t)},s=`none`;return(0,n.createEffect)(i=>{let a=Y(e.show);return(0,n.untrack)(()=>{if(i===a)return a;let e=s,n=r();a?o(`present`):n===`none`||t()?.display===`none`?o(`hidden`):o(i===!0&&e!==n?`hiding`:`hidden`)}),a},Y(e.show)),(0,n.createEffect)(()=>{let t=Y(e.element);if(!t)return;let a=e=>{e.target===t&&(s=r())},c=e=>{let n=r().includes(e.animationName);e.target===t&&n&&i()===`hiding`&&o(`hidden`)};t.addEventListener(`animationstart`,a),t.addEventListener(`animationcancel`,c),t.addEventListener(`animationend`,c),(0,n.onCleanup)(()=>{t.removeEventListener(`animationstart`,a),t.removeEventListener(`animationcancel`,c),t.removeEventListener(`animationend`,c)})}),{present:()=>i()===`present`||i()===`hiding`,state:i}};hr({},{Anchor:()=>Lr,Arrow:()=>Sn,CloseButton:()=>Rr,Content:()=>zr,Description:()=>Br,Popover:()=>Kr,Portal:()=>Vr,Root:()=>Ur,Title:()=>Wr,Trigger:()=>Gr,usePopoverContext:()=>X});var Ir=(0,n.createContext)();function X(){let e=(0,n.useContext)(Ir);if(e===void 0)throw Error("[kobalte]: `usePopoverContext` must be used within a `Popover` component");return e}function Lr(t){let r=X(),[i,a]=(0,n.splitProps)(t,[`ref`]);return(0,e.createComponent)(j,(0,e.mergeProps)({as:`div`,ref(e){var t=_(r.setDefaultAnchorRef,i.ref);typeof t==`function`&&t(e)}},()=>r.dataset(),a))}function Rr(t){let r=X(),[i,a]=(0,n.splitProps)(t,[`aria-label`,`onClick`]);return(0,e.createComponent)(vr,(0,e.mergeProps)({get"aria-label"(){return i[`aria-label`]||r.translations().dismiss},onClick:e=>{O(e,i.onClick),r.close()}},()=>r.dataset(),a))}function zr(t){let r,i=X(),a=A({id:i.generateId(`content`)},t),[o,s]=(0,n.splitProps)(a,[`ref`,`style`,`onOpenAutoFocus`,`onCloseAutoFocus`,`onPointerDownOutside`,`onFocusOutside`,`onInteractOutside`]),c=!1,l=!1,u=!1,d=e=>{o.onCloseAutoFocus?.(e),i.isModal()?(e.preventDefault(),c||k(i.triggerRef())):(e.defaultPrevented||(l||k(i.triggerRef()),e.preventDefault()),l=!1,u=!1)},f=e=>{o.onPointerDownOutside?.(e),i.isModal()&&(c=e.detail.isContextMenu)},p=e=>{o.onFocusOutside?.(e),i.isOpen()&&i.isModal()&&e.preventDefault()},m=e=>{o.onInteractOutside?.(e),!i.isModal()&&(e.defaultPrevented||(l=!0,e.detail.originalEvent.type===`pointerdown`&&(u=!0)),S(i.triggerRef(),e.target)&&e.preventDefault(),e.detail.originalEvent.type===`focusin`&&u&&e.preventDefault())};return $n({isDisabled:()=>!(i.isOpen()&&i.isModal()),targets:()=>r?[r]:[]}),Pr({element:()=>r??null,enabled:()=>i.contentPresent()&&i.preventScroll()}),Zn({trapFocus:()=>i.isOpen()&&i.isModal(),onMountAutoFocus:o.onOpenAutoFocus,onUnmountAutoFocus:d},()=>r),(0,n.createEffect)(()=>(0,n.onCleanup)(i.registerContentId(s.id))),(0,e.createComponent)(n.Show,{get when(){return i.contentPresent()},get children(){return(0,e.createComponent)(jn.Positioner,{get children(){return(0,e.createComponent)(cr,(0,e.mergeProps)({ref(e){var t=_(e=>{i.setContentRef(e),r=e},o.ref);typeof t==`function`&&t(e)},role:`dialog`,tabIndex:-1,get disableOutsidePointerEvents(){return(0,e.memo)(()=>!!i.isOpen())()&&i.isModal()},get excludedElements(){return[i.triggerRef]},get style(){return g({"--kb-popover-content-transform-origin":`var(--kb-popper-content-transform-origin)`,position:`relative`},o.style)},get"aria-labelledby"(){return i.titleId()},get"aria-describedby"(){return i.descriptionId()},onPointerDownOutside:f,onFocusOutside:p,onInteractOutside:m,get onDismiss(){return i.close}},()=>i.dataset(),s))}})}})}function Br(t){let r=X(),i=A({id:r.generateId(`description`)},t),[a,o]=(0,n.splitProps)(i,[`id`]);return(0,n.createEffect)(()=>(0,n.onCleanup)(r.registerDescriptionId(a.id))),(0,e.createComponent)(j,(0,e.mergeProps)({as:`p`,get id(){return a.id}},()=>r.dataset(),o))}function Vr(t){let r=X();return(0,e.createComponent)(n.Show,{get when(){return r.contentPresent()},get children(){return(0,e.createComponent)(e.Portal,t)}})}var Hr={dismiss:`Dismiss`};function Ur(t){let r=A({id:`popover-${(0,n.createUniqueId)()}`,modal:!1,translations:Hr},t),[i,a]=(0,n.splitProps)(r,[`translations`,`id`,`open`,`defaultOpen`,`onOpenChange`,`modal`,`preventScroll`,`forceMount`,`anchorRef`]),[o,s]=(0,n.createSignal)(),[c,l]=(0,n.createSignal)(),[u,d]=(0,n.createSignal)(),[f,p]=(0,n.createSignal)(),[m,h]=(0,n.createSignal)(),[g,_]=(0,n.createSignal)(),v=dr({open:()=>i.open,defaultOpen:()=>i.defaultOpen,onOpenChange:e=>i.onOpenChange?.(e)}),y=()=>i.anchorRef?.()??o()??c(),{present:b}=Fr({show:()=>i.forceMount||v.isOpen(),element:()=>u()??null}),S={translations:()=>i.translations??Hr,dataset:(0,n.createMemo)(()=>({"data-expanded":v.isOpen()?``:void 0,"data-closed":v.isOpen()?void 0:``})),isOpen:v.isOpen,isModal:()=>i.modal??!1,preventScroll:()=>i.preventScroll??S.isModal(),contentPresent:b,triggerRef:c,contentId:f,titleId:m,descriptionId:g,setDefaultAnchorRef:s,setTriggerRef:l,setContentRef:d,close:v.close,toggle:v.toggle,generateId:x(()=>i.id),registerContentId:br(p),registerTitleId:br(h),registerDescriptionId:br(_)};return(0,e.createComponent)(Ir.Provider,{value:S,get children(){return(0,e.createComponent)(jn,(0,e.mergeProps)({anchorRef:y,contentRef:u},a))}})}function Wr(t){let r=X(),i=A({id:r.generateId(`title`)},t),[a,o]=(0,n.splitProps)(i,[`id`]);return(0,n.createEffect)(()=>(0,n.onCleanup)(r.registerTitleId(a.id))),(0,e.createComponent)(j,(0,e.mergeProps)({as:`h2`,get id(){return a.id}},()=>r.dataset(),o))}function Gr(t){let r=X(),[i,a]=(0,n.splitProps)(t,[`ref`,`onClick`,`onPointerDown`]);return(0,e.createComponent)(vr,(0,e.mergeProps)({ref(e){var t=_(r.setTriggerRef,i.ref);typeof t==`function`&&t(e)},"aria-haspopup":`dialog`,get"aria-expanded"(){return r.isOpen()},get"aria-controls"(){return(0,e.memo)(()=>!!r.isOpen())()?r.contentId():void 0},onPointerDown:e=>{O(e,i.onPointerDown),e.preventDefault()},onClick:e=>{O(e,i.onClick),r.toggle()}},()=>r.dataset(),a))}var Kr=Object.assign(Ur,{Anchor:Lr,Arrow:Sn,CloseButton:Rr,Content:zr,Description:Br,Portal:Vr,Title:Wr,Trigger:Gr});function qr(t){let n=t.tip;return(0,e.createComponent)(Kr,{get open(){return t.open},get onOpenChange(){return t.onOpenChange},placement:`bottom-end`,gutter:6,overflowPadding:12,get children(){return[(0,e.createComponent)(n,{get value(){return t.hint},placement:`bottom`,get children(){return(0,e.createComponent)(Kr.Trigger,{get class(){return`ocb-head ${t.open?`ocb-head-on`:``}`},get"aria-label"(){return t.label},"aria-haspopup":`dialog`,get"aria-expanded"(){return t.open},get children(){return t.trigger}})}}),(0,e.createComponent)(Kr.Portal,{get children(){return(0,e.createComponent)(Kr.Content,{class:`ocb-pop`,role:`dialog`,get"aria-label"(){return t.label},get children(){return t.children}})}})]}})}var Jr=[[1,4],[6,10]],Yr=[1,4,6,10],Xr=e=>new Date(e),Zr=()=>Date.now();function Z(e=Date.now()){let t=Xr(e),n=t.getUTCDay();if(n===0||n===6)return!1;let r=t.getUTCHours()+t.getUTCMinutes()/60;return Jr.some(([e,t])=>r>=e&&r<t)}function Qr(e=Date.now()){let t=Z(e),n=Xr(e);n.setUTCHours(0,0,0,0);let r=[];for(let t=0;t<=10;t++)for(let i of Yr){let a=n.getTime()+t*864e5+i*36e5;a>e&&r.push(a)}r.sort((e,t)=>e-t);for(let e of r)if(Z(e)!==t)return{peak:!t,at:e};return{peak:!t,at:r[r.length-1]}}function Q(e,t,n=Date.now()){if(!Z(n))return!1;let r=e?.providerID??``;return r===`deepseek`||r===`opencode-go`&&t===`go`&&/^deepseek/.test(e?.modelID??``)}if(typeof process<`u`&&process.argv?.[2]===`--self-check`){let e=(e,t)=>{if(!e)throw Error(`self-check: `+t)},t=(e,t=0)=>Date.UTC(2026,9,27,e,t);e(Z(t(2)),`02:00 UTC on a weekday is peak`),e(!Z(t(0,30)),`00:30 UTC is off-peak`),e(!Z(t(4)),`04:00 is the first off-peak minute`),e(Z(t(6)),`06:00 is peak again`),e(!Z(t(10)),`10:00 ends it`),e(!Z((e=>Date.UTC(2026,9,31,e))(2)),`a weekend is never peak`);let n={providerID:`deepseek`,modelID:`deepseek-chat`},r={providerID:`opencode-go`,modelID:`deepseek-v4.1-flash`};e(Q(n,`ds`,t(2)),`native DeepSeek doubles at peak`),e(!Q(n,`ds`,t(4)),`and not off-peak`),e(Q(r,`go`,t(2)),`a Go DeepSeek doubles while Go pays`),e(!Q(r,`ds`,t(2)),`but not while another wallet pays`),e(!Q({providerID:`opencode-go`,modelID:`glm-5.3`},`go`,t(2)),`a Go model that is not DeepSeek never doubles`),e(!Q({providerID:`opencode`,modelID:`deepseek-v4.1-flash`},`zen`,t(2)),`Zen's DeepSeek price is flat`),e(!Q(void 0,`go`,t(2)),`no model, no doubling`);let i=Qr(t(2));e(!i.peak&&i.at===t(4),`the next change from 02:00 is off-peak at 04:00`);let a=Qr(Date.UTC(2026,9,30,23));e(a.peak&&a.at===Date.UTC(2026,10,2,1),`Friday night flips to peak on Monday at 01:00`),console.log(`self-check ok: `+Jr.length+` windows, Zen flat, the weekend never peak`)}var $r=(0,e.template)(`<span class="ocb-dim ocb-figure">reset `),ei=(0,e.template)(`<div class="ocb-line ocb-windows"><span class=ocb-dim></span><span>`),ti=(0,e.template)(`<span class="ocb-bad ocb-mark">`),ni=(0,e.template)(`<div class=ocb-line><span></span><span>`),ri=(0,e.template)(`<div class=ocb-dim>`),ii=(0,e.template)(`<div class=ocb>`),ai=(0,e.template)(`<div class=ocb-warn>stale `),oi=(0,e.template)(`<div class="ocb-dim ocb-empty">no provider connected`),si=(0,e.template)(`<div class="ocb-dim ocb-empty">opencode auth login`),ci=(0,e.template)(`<div class=ocb-line><span class=ocb-dim>workspace</span><span class="ocb-accent ocb-figure">`),li=(0,e.template)(`<div class=ocb-rule>`),ui=(0,e.template)(`<span class="ocb-bad ocb-peak">↗`),di=(0,e.template)(`<div class=ocb-line><span>GO</span><span role=progressbar aria-valuemin=0 aria-valuemax=100><span class=ocb-fill></span></span><span>`),fi=(0,e.template)(`<svg width=16 height=16 viewBox="0 0 16 16"fill=none aria-hidden=true><circle cx=8 cy=8 r=7 stroke=currentColor stroke-opacity=0.18 stroke-width=2></circle><circle cx=8 cy=8 r=7 stroke=currentColor stroke-width=2 transform="rotate(-90 8 8)">`),pi=(0,e.template)(`<svg viewBox="0 0 16 16"width=16 height=16 fill=none aria-hidden=true><rect x=2 y=4.5 width=12 height=8 rx=2 stroke=currentColor stroke-width=1.6></rect><path d="M2 7h12"stroke=currentColor stroke-width=1.6></path><circle cx=11 cy=9.6 r=1.1 fill=currentColor>`),mi=(0,e.template)(`<span>`),hi=(0,e.template)(`<span class=ocb-head-label>`),gi=(0,e.template)(`<span class="ocb-head-label ocb-bad"aria-hidden=true>↗`),_i=`↗`,vi=3e5,yi=3e4,bi=2*vi,xi=15e3,Si=`
|
|
2
|
+
/* The block that opens from the header figure wears that figure's own type: one size, 13px, weight 440, the
|
|
3
|
+
app's tight tracking. Hierarchy here is colour and weight, never a second size. */
|
|
4
|
+
/* anywhere: an error carrying a URL or a token must not paint outside the box. This is our content; the
|
|
5
|
+
overflow is ours too. */
|
|
6
|
+
.ocb { display: flex; flex-direction: column; gap: 5px; width: 100%; font-size: 13px; font-weight: 440;
|
|
7
|
+
letter-spacing: -0.04px; font-variant-numeric: tabular-nums; overflow-wrap: anywhere; }
|
|
8
|
+
.ocb-line { display: flex; align-items: center; gap: 6px; }
|
|
9
|
+
.ocb-name { font-weight: 600; letter-spacing: .02em; min-width: 2.6em; }
|
|
10
|
+
.ocb-figure { margin-left: auto; min-width: 4.2em; text-align: right; }
|
|
11
|
+
.ocb-peak { margin-left: 4px; }
|
|
12
|
+
.ocb-windows { gap: 4px; }
|
|
13
|
+
.ocb-ok { color: var(--v2-state-fg-success, inherit); }
|
|
14
|
+
.ocb-warn { color: var(--v2-state-fg-warning, inherit); }
|
|
15
|
+
.ocb-bad { color: var(--v2-state-fg-danger, inherit); }
|
|
16
|
+
.ocb-dim { color: var(--v2-text-text-muted, inherit); }
|
|
17
|
+
/* The empty state's two lines only: the words are short and the panel is 18em wide, so left-aligned they
|
|
18
|
+
leave a column of dead space under the figure they belong to. They sit against the same edge the figure
|
|
19
|
+
does, and nothing else in this plugin is right-aligned. */
|
|
20
|
+
.ocb-empty { text-align: right; }
|
|
21
|
+
.ocb-accent { color: var(--v2-text-text-accent, inherit); }
|
|
22
|
+
.ocb-bar { flex: 1 1 auto; min-width: 90px; height: 6px; border-radius: 3px; overflow: hidden;
|
|
23
|
+
background: color-mix(in srgb, currentColor 16%, transparent); }
|
|
24
|
+
.ocb-fill { display: block; height: 100%; border-radius: 3px; background: currentColor; }
|
|
25
|
+
.ocb-rule { height: 1px; margin: 2px 0; background: color-mix(in srgb, currentColor 18%, transparent); }
|
|
26
|
+
/* The app's own toolbar button, hand-written: its height and its hover plate are what make the figure read as
|
|
27
|
+
one of the header's controls. */
|
|
28
|
+
.ocb-head { display: inline-flex; align-items: center; gap: 5px; height: 28px; padding: 0 6px; border: 0;
|
|
29
|
+
border-radius: 6px; background: none; color: var(--v2-text-text-faint); font: inherit; font-size: 13px;
|
|
30
|
+
font-weight: 440; letter-spacing: -0.04px; font-variant-numeric: tabular-nums; cursor: pointer; }
|
|
31
|
+
.ocb-head:hover, .ocb-head:focus-visible {
|
|
32
|
+
background: color-mix(in srgb, var(--v2-text-text-base) 8%, transparent);
|
|
33
|
+
color: var(--v2-text-text-base);
|
|
34
|
+
}
|
|
35
|
+
/* Two classes, so the open plate outranks the hover plate while the pointer still rests on the trigger. */
|
|
36
|
+
.ocb-head.ocb-head-on {
|
|
37
|
+
background: color-mix(in srgb, var(--v2-text-text-base) 12%, transparent);
|
|
38
|
+
color: var(--v2-text-text-base);
|
|
39
|
+
}
|
|
40
|
+
.ocb-mark { display: inline-flex; align-items: center; justify-content: center; width: 16px; height: 16px; }
|
|
41
|
+
.ocb-head-label { white-space: nowrap; color: inherit; }
|
|
42
|
+
/* The block: Kobalte puts it in the app's own top layer and positions it from the trigger, so there is no
|
|
43
|
+
position rule here — only the box. */
|
|
44
|
+
.ocb-pop { width: max-content; min-width: 18em;
|
|
45
|
+
max-width: min(22em, calc(100vw - 16px)); padding: 8px 10px; border-radius: 8px;
|
|
46
|
+
border: 1px solid var(--v2-border-border-muted, rgba(255, 255, 255, .12));
|
|
47
|
+
background: var(--v2-background-bg-layer-02, #1b1b1b);
|
|
48
|
+
box-shadow: 0 8px 24px rgba(0, 0, 0, .35); color: var(--v2-text-text-base, inherit); font-size: 13px; }
|
|
49
|
+
/* The hover hint is wider than this panel, so it would show beside it: while any figure's panel is open, no
|
|
50
|
+
tooltip is drawn anywhere. CSS cannot select only ours, and the panel is not modal, so the rest of the header
|
|
51
|
+
stays hoverable — a trade, recorded in docs/oc-budget.md. */
|
|
52
|
+
body:has(.ocb-head[aria-expanded="true"]) [data-component="tooltip-v2"] { display: none; }
|
|
53
|
+
`,Ci={success:`ocb-ok`,warning:`ocb-warn`,danger:`ocb-bad`},$=e=>e?Ci[e]:``,wi=(e,t)=>new Promise((n,r)=>{let i=setTimeout(()=>r(Error(`rpc timeout`)),t);e.then(e=>{clearTimeout(i),n(e)},e=>{clearTimeout(i),r(e)})}),Ti=e=>typeof e==`number`&&Number.isFinite(e)?`$${e.toFixed(2)}`:`—`,Ei=e=>e===null?`—`:`${Math.round(e)}%`,Di=e=>Math.max(0,Math.min(100,e??0)),Oi=(e,t,n)=>{if(e!==null)return e<=n?`danger`:e<=t?`warning`:`success`},ki=e=>{if(e!==null)return e>=100?`danger`:e>=90?`warning`:`success`},Ai={},ji=t.Plugin.define({setup(r){let[l,d]=(0,n.createSignal)(void 0),[f,p]=(0,n.createSignal)(void 0),m,h,g,_;(0,n.createEffect)(()=>{let e=r.sessions.current(),t=e?.server.id;if(m&&clearInterval(m),h&&clearTimeout(h),m=void 0,h=void 0,_=void 0,p(void 0),!t){d(void 0);return}let n=(i=!1)=>{if(g===t)return;g=t;let a=i?{force:!0}:{};wi(e.server.client.rpc(u).snapshot(a),xi).then(e=>{r.sessions.current()?.server.id===t&&(d({server:t,value:e}),p(void 0))}).catch(e=>{r.sessions.current()?.server.id===t&&(p(e instanceof Error?e.message:String(e)),h&&clearTimeout(h),h=setTimeout(n,yi))}).finally(()=>{g===t&&(g=void 0)})};_=()=>n(!0),n(),m=setInterval(n,vi)}),(0,n.onCleanup)(()=>{m&&clearInterval(m),h&&clearTimeout(h)});let v=e=>{let t=l(),n=f(),r=e.screen.composer.model(),o=Zr(),u=Z(o);if(!t||t.server!==e.session.server.id)return{ready:!1,empty:!1,error:n,wallet:`none`,stale:!1,age:0,atPeak:u,marked:!1,...Ai};let d=t.value,p=i(r,d),m=d.go,h=s(m?.rolling),g=s(m?.weekly),_=s(m?.monthly),v=d.zen?.available??d.zen?.balance,y=Date.now()-d.at,b=p===`go`?m?`GO · ${Ei(_)}`:void 0:p===`zen`?d.zen?`ZEN · ${Ti(v)}`:void 0:p===`ds`?d.ds?`DS · ${Ti(d.ds.balance)}`:void 0:p===`or`&&d.or?`OR · ${Ti(d.or.balance)}`:void 0,x=[h,g,_].every(e=>e===null)?void 0:[h,g,_].some(e=>e!==null&&e>=100)?`danger`:[h,g,_].some(e=>e!==null&&e>=90)?`warning`:`success`,S=p===`go`?x:p===`zen`?Oi(v??null,5,0):p===`ds`?Oi(d.ds?.balance??null,2,0):Oi(d.or?.balance??null,5,0);return{ready:!0,empty:!a(d),error:n,label:b,walletTone:S,wallet:p,stale:y>bi,age:y,atPeak:u,marked:Q(r,p,o),go:m?{rolling:h,weekly:g,monthly:_,resets:{rolling:c(m.rolling?.resetsAt),weekly:c(m.weekly?.resetsAt),monthly:c(m.monthly?.resetsAt)},error:m.error}:void 0,workspace:d.zen?.org&&(d.zen.peers??0)>1?d.zen.org:void 0,ds:d.ds&&{figure:d.ds.balance,tone:Oi(d.ds.balance??null,2,0),note:d.ds.error},or:d.or&&{figure:d.or.balance,tone:Oi(d.or.balance??null,5,0),note:d.or.error},zen:d.zen&&{figure:v,tone:Oi(v??null,5,0),note:d.zen.error}}},y=t=>(()=>{var r=ei(),i=r.firstChild,a=i.nextSibling;return(0,e.insert)(i,()=>t.label),(0,e.insert)(a,()=>Ei(t.percent)),(0,e.insert)(r,(0,e.createComponent)(n.Show,{get when(){return t.reset},get children(){var n=$r();return n.firstChild,(0,e.insert)(n,()=>t.reset,null),n}}),null),(0,e.effect)(()=>(0,e.className)(a,$(ki(t.percent)))),r})(),b=t=>[(()=>{var r=ni(),i=r.firstChild,a=i.nextSibling;return(0,e.insert)(i,()=>t.name),(0,e.insert)(a,()=>Ti(t.line.figure)),(0,e.insert)(r,(0,e.createComponent)(n.Show,{get when(){return t.mark},get children(){var n=ti();return(0,e.insert)(n,()=>t.mark),n}}),null),(0,e.effect)(n=>{var r=`ocb-name ${$(t.line.tone)}`,o=`ocb-figure ${$(t.line.tone)}`;return r!==n.e&&(0,e.className)(i,n.e=r),o!==n.t&&(0,e.className)(a,n.t=o),n},{e:void 0,t:void 0}),r})(),(0,e.createComponent)(n.Show,{get when(){return t.line.note},get children(){var n=ri();return(0,e.insert)(n,()=>t.line.note),n}})],x=t=>{let r=(0,n.createMemo)(()=>v(t.input));return(0,n.onMount)(()=>{_?.()}),(()=>{var t=ii();return(0,e.insert)(t,(0,e.createComponent)(n.Show,{get when(){return(0,e.memo)(()=>!!r().ready)()?r():void 0},get fallback(){return(()=>{var t=ri();return(0,e.insert)(t,()=>r().error??`reading…`),t})()},children:t=>[(0,e.createComponent)(n.Show,{get when(){return t().stale},get children(){var n=ai();return n.firstChild,(0,e.insert)(n,()=>o(t().age),null),n}}),(0,e.createComponent)(n.Show,{get when(){return t().error},get children(){var n=ri();return(0,e.insert)(n,()=>t().error),n}}),(0,e.createComponent)(n.Show,{get when(){return t().empty},get children(){return[oi(),si()]}}),(0,e.createComponent)(n.Show,{get when(){return t().go},children:r=>[(()=>{var i=di(),a=i.firstChild,o=a.nextSibling,s=o.firstChild,c=o.nextSibling;return(0,e.insert)(c,()=>Ei(r().monthly)),(0,e.insert)(i,(0,e.createComponent)(n.Show,{get when(){return t().atPeak},get children(){return ui()}}),null),(0,e.effect)(t=>{var n=`ocb-name ${$(ki(r().monthly))}`,i=`ocb-bar ${$(ki(r().monthly))}`,l=Di(r().monthly),u=`${Di(r().monthly)}%`,d=`ocb-figure ${$(ki(r().monthly))}`;return n!==t.e&&(0,e.className)(a,t.e=n),i!==t.t&&(0,e.className)(o,t.t=i),l!==t.a&&(0,e.setAttribute)(o,`aria-valuenow`,t.a=l),u!==t.o&&(0,e.setStyleProperty)(s,`width`,t.o=u),d!==t.i&&(0,e.className)(c,t.i=d),t},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),i})(),(0,e.createComponent)(n.Show,{get when(){return!r().error},get fallback(){return(()=>{var t=ri();return(0,e.insert)(t,()=>r().error),t})()},get children(){return[(0,e.createComponent)(y,{label:`5h`,get percent(){return r().rolling},get reset(){return r().resets.rolling}}),(0,e.createComponent)(y,{label:`wk`,get percent(){return r().weekly},get reset(){return r().resets.weekly}}),(0,e.createComponent)(y,{label:`mo`,get percent(){return r().monthly},get reset(){return r().resets.monthly}})]}})]}),(0,e.createComponent)(n.Show,{get when(){return t().workspace},get children(){var n=ci(),r=n.firstChild.nextSibling;return(0,e.insert)(r,()=>t().workspace),n}}),li(),(0,e.createComponent)(n.Show,{get when(){return t().ds},children:n=>(0,e.createComponent)(b,{name:`DS`,get line(){return n()},get mark(){return t().atPeak?_i:``}})}),(0,e.createComponent)(n.Show,{get when(){return t().or},children:t=>(0,e.createComponent)(b,{name:`OR`,get line(){return t()}})}),(0,e.createComponent)(n.Show,{get when(){return t().zen},children:t=>(0,e.createComponent)(b,{name:`ZEN`,get line(){return t()}})})]})),t})()},S=2*Math.PI*7,C=t=>(()=>{var n=fi(),r=n.firstChild.nextSibling;return(0,e.setAttribute)(r,`stroke-dasharray`,S),(0,e.effect)(()=>(0,e.setAttribute)(r,`stroke-dashoffset`,S*(1-Di(t.percent)/100))),n})(),w=()=>pi(),T=r.ui.Tooltip,E=i=>{let a=()=>v(i.input),[s,c]=(0,n.createSignal)(!1),l=e=>{e&&_?.(),c(e)},u=()=>{let e=a();if(e.ready&&e.label){let t=e.wallet===`go`&&e.go?`ring`:`card`,n=e.stale?`warning`:e.walletTone;return{f:e,text:e.label,tone:n,mark:t}}if(e.error)return{f:e,text:`budget`,tone:`danger`,mark:`error`};if(e.ready&&e.empty)return{f:e,text:`budget`,tone:void 0,mark:`card`}},d=e=>e.error??(e.empty?`Budget · no provider connected`:e.stale?`Budget · last read ${o(e.age)} ago`:`Budget — what pays, and every wallet`);return(0,t.createKeyed)(()=>u()?!0:void 0,()=>{},{otherwise:()=>c(!1)}),(0,e.createComponent)(n.Show,{get when(){return u()},children:t=>(0,e.createComponent)(qr,{get label(){return(0,e.memo)(()=>!!t().f.stale)()?`~${t().text}`:t().text},get hint(){return d(t().f)},tip:T,get open(){return s()},onOpenChange:l,get trigger(){return[(()=>{var i=mi();return(0,e.insert)(i,(0,e.createComponent)(n.Show,{get when(){return t().mark===`ring`},get fallback(){return(0,e.memo)(()=>t().mark===`error`)()?(0,e.createComponent)(r.ui.Icon,{name:`circle-exclamation`,size:`small`}):(0,e.createComponent)(w,{})},get children(){return(0,e.createComponent)(n.Show,{get when(){return t().f.go},children:t=>(0,e.createComponent)(C,{get percent(){return t().monthly}})})}})),(0,e.effect)(()=>(0,e.className)(i,`ocb-mark ${$(t().tone)}`)),i})(),(0,e.createComponent)(n.Show,{get when(){return!i.input.compact},get children(){var n=hi();return(0,e.insert)(n,(()=>{var n=(0,e.memo)(()=>!!t().f.stale);return()=>n()?`~${t().text}`:t().text})()),n}}),(0,e.createComponent)(n.Show,{get when(){return t().f.marked},get children(){return gi()}})]},get children(){return(0,e.createComponent)(x,{get input(){return i.input}})}})})};r.add(t.Style,Si),r.add(t.Slot,{at:`session.header`,order:11,render:t=>(0,e.createComponent)(E,{input:t})})}});exports.default=ji;
|