llm-simple-router 0.10.8 → 0.10.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/dist/core/monitor/request-tracker.d.ts +1 -1
  2. package/dist/core/monitor/request-tracker.js +14 -5
  3. package/dist/core/monitor/stream-content-accumulator.d.ts +2 -2
  4. package/dist/core/monitor/stream-content-accumulator.js +2 -2
  5. package/dist/core/monitor/stream-extractor.js +1 -1
  6. package/dist/metrics/metrics-extractor.js +6 -5
  7. package/dist/metrics/sse-metrics-transform.js +2 -0
  8. package/frontend-dist/assets/{CardContent-B4vB3Kxw.js → CardContent-VHoT9rgw.js} +1 -1
  9. package/frontend-dist/assets/{CardTitle-BSki67ff.js → CardTitle-BSx_tBcL.js} +1 -1
  10. package/frontend-dist/assets/{Checkbox-dvUbwMMH.js → Checkbox-TieofFS-.js} +1 -1
  11. package/frontend-dist/assets/{CollapsibleContent-DRIfmabo.js → CollapsibleContent-Dnt-UfRz.js} +1 -1
  12. package/frontend-dist/assets/{CollapsibleTrigger-jbSdCpiC.js → CollapsibleTrigger-NW8lciwZ.js} +1 -1
  13. package/frontend-dist/assets/{Dashboard-eXf2n3wh.js → Dashboard-BbzVyAgq.js} +1 -1
  14. package/frontend-dist/assets/{Input-CbiXfK8n.js → Input-BRW038ir.js} +1 -1
  15. package/frontend-dist/assets/{Label-CoK65l1t.js → Label-D7a61NN6.js} +1 -1
  16. package/frontend-dist/assets/{Login-NhjpJfPs.js → Login-CQtZ3Okd.js} +1 -1
  17. package/frontend-dist/assets/{Logs-X2RH5tcC.js → Logs-DYTA66To.js} +1 -1
  18. package/frontend-dist/assets/{MappingEntryEditor-CjHMOGsf.js → MappingEntryEditor-CHFARLUr.js} +1 -1
  19. package/frontend-dist/assets/{ModelCard-DJwfR5SC.js → ModelCard-DArtFLqF.js} +1 -1
  20. package/frontend-dist/assets/{ModelMappings-C1yFuU0K.js → ModelMappings-dT8omnXQ.js} +1 -1
  21. package/frontend-dist/assets/Monitor-B5BNg5oz.js +1 -0
  22. package/frontend-dist/assets/{Providers-Cw9Ba8PT.js → Providers-DLd-sAsh.js} +1 -1
  23. package/frontend-dist/assets/{ProxyEnhancement-PXI_P4Da.js → ProxyEnhancement-D3s6ihsi.js} +1 -1
  24. package/frontend-dist/assets/{QuickSetup-CAmUIwv2.js → QuickSetup-BjLJXdQm.js} +1 -1
  25. package/frontend-dist/assets/{RetryRules-D2ykGSLa.js → RetryRules-C5LT8jA4.js} +1 -1
  26. package/frontend-dist/assets/{RouterKeys-BvvL8qcy.js → RouterKeys-VDfx0YUM.js} +1 -1
  27. package/frontend-dist/assets/{RovingFocusItem-gP6WU5WD.js → RovingFocusItem-Dvp7T0YJ.js} +1 -1
  28. package/frontend-dist/assets/{Schedules-DvfShW7S.js → Schedules-CGk4VMEW.js} +1 -1
  29. package/frontend-dist/assets/{Settings-BnUEzcvF.js → Settings-C0Bq5Vlz.js} +1 -1
  30. package/frontend-dist/assets/{Setup-BIZZg-XO.js → Setup-CkKRbnLE.js} +1 -1
  31. package/frontend-dist/assets/{Switch-CXemfUY5.js → Switch-DPzewpLO.js} +1 -1
  32. package/frontend-dist/assets/{TooltipTrigger-BwLkoBZK.js → TooltipTrigger-CySCLI9s.js} +1 -1
  33. package/frontend-dist/assets/{TransformRulesForm-0xoRLIOz.js → TransformRulesForm-BFhiXjTu.js} +1 -1
  34. package/frontend-dist/assets/{UnifiedRequestDialog-CFrJXdaw.js → UnifiedRequestDialog-COo6SGUN.js} +2 -2
  35. package/frontend-dist/assets/{VisuallyHiddenInput-CvUbgFmg.js → VisuallyHiddenInput-D7rPKtIA.js} +1 -1
  36. package/frontend-dist/assets/{button-BqYUfybJ.js → button-Cd7Qd3fz.js} +2 -2
  37. package/frontend-dist/assets/{copy-AYfsh6Pt.js → copy-JcgwJljq.js} +1 -1
  38. package/frontend-dist/assets/{dialog-CqEJe3JV.js → dialog-BZpiHm7Q.js} +1 -1
  39. package/frontend-dist/assets/{index-DcD6M87r.js → index-D6ACTK1W.js} +2 -2
  40. package/frontend-dist/assets/{trash-2-BNKlpO30.js → trash-2-CJq-sfA4.js} +1 -1
  41. package/frontend-dist/assets/{useClipboard-ByGWVweg.js → useClipboard-C2mKqlsb.js} +1 -1
  42. package/frontend-dist/assets/{useLogRetention-BASEOb38.js → useLogRetention-DYo82fwB.js} +1 -1
  43. package/frontend-dist/index.html +2 -2
  44. package/package.json +1 -1
  45. package/frontend-dist/assets/Monitor-4HZvjdBX.js +0 -1
@@ -67,7 +67,7 @@ export declare class RequestTracker {
67
67
  getConcurrency(): ProviderConcurrencySnapshot[];
68
68
  getRuntime(): RuntimeMetrics;
69
69
  addClient(client: SSEClient): void;
70
- /** 向单个客户端发送当前活跃请求快照(保留 clientRequest 以便前端即时展示) */
70
+ /** 向单个客户端发送当前活跃请求快照(strip 大字段以减少初始推送带宽) */
71
71
  private sendInitialSnapshot;
72
72
  removeClient(client: SSEClient): void;
73
73
  /** 主动关闭所有 SSE 客户端连接,确保 app.close() 不会因长连接阻塞 */
@@ -58,7 +58,11 @@ export class RequestTracker {
58
58
  for (const id of this.streamContentPending) {
59
59
  const req = this.activeMap.get(id);
60
60
  if (req) {
61
- updates.push({ id, streamContent: req.streamContent ?? null, streamMetrics: req.streamMetrics ?? null });
61
+ updates.push({
62
+ id,
63
+ totalChars: req.streamContent?.totalChars ?? 0,
64
+ streamMetrics: req.streamMetrics ?? null,
65
+ });
62
66
  }
63
67
  }
64
68
  this.streamContentPending.clear();
@@ -125,6 +129,7 @@ export class RequestTracker {
125
129
  status: wasKilled ? "failed" : result.status,
126
130
  completedAt: now,
127
131
  attempts: result.attempts ?? req.attempts,
132
+ // 保留 streamContent 最后 snapshot,供前端列表页点击已完成请求时展示
128
133
  };
129
134
  this.streamContentPending.delete(id);
130
135
  this.activeMap.delete(id);
@@ -238,11 +243,13 @@ export class RequestTracker {
238
243
  this.clients.delete(client);
239
244
  });
240
245
  }
241
- /** 向单个客户端发送当前活跃请求快照(保留 clientRequest 以便前端即时展示) */
246
+ /** 向单个客户端发送当前活跃请求快照(strip 大字段以减少初始推送带宽) */
242
247
  sendInitialSnapshot(client) {
243
248
  const active = this.getActive().map((req) => {
244
249
  const copy = { ...req };
245
250
  delete copy.upstreamRequest;
251
+ delete copy.streamContent;
252
+ delete copy.streamMetrics;
246
253
  return copy;
247
254
  });
248
255
  const msg = `event: request_update\ndata: ${JSON.stringify(active)}\n\n`;
@@ -306,15 +313,16 @@ export class RequestTracker {
306
313
  this.runtimeCollector.stop();
307
314
  }
308
315
  broadcast(event, data) {
309
- // request_update: 保留 clientRequest,前端 pending 请求需要即时展示内容
310
- // request_start: 无需处理,已是原始数据
311
- // request_complete: strip clientRequest(完成后从 DB 加载详情)
316
+ // request_update: strip clientRequest/upstreamRequest/streamContent/streamMetrics
317
+ // request_start / request_complete: strip clientRequest/upstreamRequest/streamContent,保留 streamMetrics
312
318
  let payload = data;
313
319
  if (event === "request_update" && Array.isArray(data)) {
314
320
  payload = data.map((req) => {
315
321
  const copy = { ...req };
316
322
  delete copy.clientRequest;
317
323
  delete copy.upstreamRequest;
324
+ delete copy.streamContent;
325
+ delete copy.streamMetrics;
318
326
  return copy;
319
327
  });
320
328
  }
@@ -322,6 +330,7 @@ export class RequestTracker {
322
330
  const copy = { ...data };
323
331
  delete copy.clientRequest;
324
332
  delete copy.upstreamRequest;
333
+ delete copy.streamContent;
325
334
  payload = copy;
326
335
  }
327
336
  const msg = `event: ${event}\ndata: ${JSON.stringify(payload)}\n\n`;
@@ -1,6 +1,6 @@
1
1
  import type { StreamContentSnapshot } from "./types.js";
2
- export declare const DEFAULT_MAX_RAW = 131072;
3
- export declare const DEFAULT_MAX_TEXT = 65536;
2
+ export declare const DEFAULT_MAX_RAW = 32768;
3
+ export declare const DEFAULT_MAX_TEXT = 16384;
4
4
  export declare class StreamContentAccumulator {
5
5
  private readonly maxRaw;
6
6
  private readonly maxText;
@@ -1,6 +1,6 @@
1
1
  import { extractStreamText } from "./stream-extractor.js";
2
- export const DEFAULT_MAX_RAW = 131072;
3
- export const DEFAULT_MAX_TEXT = 65536;
2
+ export const DEFAULT_MAX_RAW = 32768;
3
+ export const DEFAULT_MAX_TEXT = 16384;
4
4
  export class StreamContentAccumulator {
5
5
  maxRaw;
6
6
  maxText;
@@ -16,7 +16,7 @@ export function extractStreamText(line, apiType) {
16
16
  if (apiType === "openai") {
17
17
  const choices = obj.choices;
18
18
  const delta = choices?.[0]?.delta;
19
- const text = delta?.content ?? "";
19
+ const text = delta?.content ?? delta?.reasoning_content ?? "";
20
20
  return { text, block: text ? { index: 0, type: "text", content: text } : null };
21
21
  }
22
22
  if (apiType === "openai-responses") {
@@ -256,15 +256,16 @@ export class MetricsExtractor {
256
256
  const delta = choice.delta;
257
257
  if (!this.firstContentReceived &&
258
258
  delta &&
259
- delta.content !== undefined &&
260
- delta.content !== "") {
259
+ ((delta.content !== undefined && delta.content !== "") ||
260
+ (delta.reasoning_content !== undefined && delta.reasoning_content !== ""))) {
261
261
  this.firstContentReceived = true;
262
262
  this.ttftMs = Date.now() - this.requestStartTime;
263
263
  this.textStreamStartTime = Date.now();
264
264
  }
265
- if (delta?.content && this.textTotalLength < MetricsExtractor.MAX_BUFFER_SIZE) {
266
- this.textChunks.push(delta.content);
267
- this.textTotalLength += delta.content.length;
265
+ const contentText = delta?.content || delta?.reasoning_content || "";
266
+ if (contentText && this.textTotalLength < MetricsExtractor.MAX_BUFFER_SIZE) {
267
+ this.textChunks.push(contentText);
268
+ this.textTotalLength += contentText.length;
268
269
  }
269
270
  if (choice.finish_reason) {
270
271
  this.stopReason = choice.finish_reason;
@@ -103,6 +103,8 @@ export class SSEMetricsTransform extends Transform {
103
103
  const delta = first.delta;
104
104
  if (typeof delta.content === "string")
105
105
  return delta.content;
106
+ if (typeof delta.reasoning_content === "string")
107
+ return delta.reasoning_content;
106
108
  }
107
109
  }
108
110
  catch { /* 非 JSON 数据行,跳过 */ } // eslint-disable-line taste/no-silent-catch
@@ -1 +1 @@
1
- import{Ut as e,Vt as t,Z as n,et as r,ft as i,ht as a,r as o}from"./button-BqYUfybJ.js";var s=[`data-size`],c=r({__name:`Card`,props:{class:{type:[Boolean,null,String,Object,Array]},size:{default:`default`}},setup(r){let c=r;return(l,u)=>(i(),n(`div`,{"data-slot":`card`,"data-size":r.size,class:e(t(o)(`ring-foreground/10 bg-card text-card-foreground gap-4 overflow-hidden rounded-lg py-4 text-sm ring-1 has-data-[slot=card-footer]:pb-0 has-[>img:first-child]:pt-0 data-[size=sm]:gap-3 data-[size=sm]:py-3 data-[size=sm]:has-data-[slot=card-footer]:pb-0 *:[img:first-child]:rounded-t-lg *:[img:last-child]:rounded-b-lg group/card flex flex-col`,c.class))},[a(l.$slots,`default`)],10,s))}}),l=r({__name:`CardContent`,props:{class:{type:[Boolean,null,String,Object,Array]}},setup(r){let s=r;return(r,c)=>(i(),n(`div`,{"data-slot":`card-content`,class:e(t(o)(`px-4 group-data-[size=sm]/card:px-3`,s.class))},[a(r.$slots,`default`)],2))}});export{c as n,l as t};
1
+ import{Ut as e,Vt as t,Z as n,et as r,ft as i,ht as a,r as o}from"./button-Cd7Qd3fz.js";var s=[`data-size`],c=r({__name:`Card`,props:{class:{type:[Boolean,null,String,Object,Array]},size:{default:`default`}},setup(r){let c=r;return(l,u)=>(i(),n(`div`,{"data-slot":`card`,"data-size":r.size,class:e(t(o)(`ring-foreground/10 bg-card text-card-foreground gap-4 overflow-hidden rounded-lg py-4 text-sm ring-1 has-data-[slot=card-footer]:pb-0 has-[>img:first-child]:pt-0 data-[size=sm]:gap-3 data-[size=sm]:py-3 data-[size=sm]:has-data-[slot=card-footer]:pb-0 *:[img:first-child]:rounded-t-lg *:[img:last-child]:rounded-b-lg group/card flex flex-col`,c.class))},[a(l.$slots,`default`)],10,s))}}),l=r({__name:`CardContent`,props:{class:{type:[Boolean,null,String,Object,Array]}},setup(r){let s=r;return(r,c)=>(i(),n(`div`,{"data-slot":`card-content`,class:e(t(o)(`px-4 group-data-[size=sm]/card:px-3`,s.class))},[a(r.$slots,`default`)],2))}});export{c as n,l as t};
@@ -1 +1 @@
1
- import{Ut as e,Vt as t,Z as n,et as r,ft as i,ht as a,r as o}from"./button-BqYUfybJ.js";var s=r({__name:`CardHeader`,props:{class:{type:[Boolean,null,String,Object,Array]}},setup(r){let s=r;return(r,c)=>(i(),n(`div`,{"data-slot":`card-header`,class:e(t(o)(`gap-1 rounded-t-xl px-4 group-data-[size=sm]/card:px-3 [.border-b]:pb-4 group-data-[size=sm]/card:[.border-b]:pb-3 group/card-header @container/card-header grid auto-rows-min items-start has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto]`,s.class))},[a(r.$slots,`default`)],2))}}),c=r({__name:`CardTitle`,props:{class:{type:[Boolean,null,String,Object,Array]}},setup(r){let s=r;return(r,c)=>(i(),n(`div`,{"data-slot":`card-title`,class:e(t(o)(`text-base leading-snug font-medium group-data-[size=sm]/card:text-sm cn-font-heading`,s.class))},[a(r.$slots,`default`)],2))}});export{s as n,c as t};
1
+ import{Ut as e,Vt as t,Z as n,et as r,ft as i,ht as a,r as o}from"./button-Cd7Qd3fz.js";var s=r({__name:`CardHeader`,props:{class:{type:[Boolean,null,String,Object,Array]}},setup(r){let s=r;return(r,c)=>(i(),n(`div`,{"data-slot":`card-header`,class:e(t(o)(`gap-1 rounded-t-xl px-4 group-data-[size=sm]/card:px-3 [.border-b]:pb-4 group-data-[size=sm]/card:[.border-b]:pb-3 group/card-header @container/card-header grid auto-rows-min items-start has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto]`,s.class))},[a(r.$slots,`default`)],2))}}),c=r({__name:`CardTitle`,props:{class:{type:[Boolean,null,String,Object,Array]}},setup(r){let s=r;return(r,c)=>(i(),n(`div`,{"data-slot":`card-title`,class:e(t(o)(`text-base leading-snug font-medium group-data-[size=sm]/card:text-sm cn-font-heading`,s.class))},[a(r.$slots,`default`)],2))}});export{s as n,c as t};
@@ -1 +1 @@
1
- import{$ as e,Tt as t,U as n,Vt as r,W as i,Wt as a,X as o,Y as s,_t as c,et as l,ft as u,ht as d,i as f,m as p,nt as m,o as h,q as g,r as _,st as v,x as y}from"./button-BqYUfybJ.js";import{t as b}from"./VisuallyHiddenInput-CvUbgFmg.js";import{t as x}from"./RovingFocusItem-gP6WU5WD.js";import{B as S,G as C,H as w,L as T,Y as E,q as D,ut as O}from"./index-DcD6M87r.js";function k(e,t){return C(e)?!1:Array.isArray(e)?e.some(e=>E(e,t)):E(e,t)}var[A,j]=D(`CheckboxGroupRoot`);function M(e){return e===`indeterminate`}function N(e){return M(e)?`indeterminate`:e?`checked`:`unchecked`}var[P,F]=D(`CheckboxRoot`),I=l({inheritAttrs:!1,__name:`CheckboxRoot`,props:{defaultValue:{type:null,required:!1},modelValue:{type:null,required:!1,default:void 0},disabled:{type:Boolean,required:!1},value:{type:null,required:!1,default:`on`},id:{type:String,required:!1},trueValue:{type:null,required:!1,default:()=>!0},falseValue:{type:null,required:!1,default:()=>!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:`button`},name:{type:String,required:!1},required:{type:Boolean,required:!1}},emits:[`update:modelValue`],setup(e,{emit:a}){let l=e,m=a,{forwardRef:_,currentElement:y}=h(),S=A(null),T=p(l,`modelValue`,m,{defaultValue:l.defaultValue??l.falseValue,passive:l.modelValue===void 0}),D=g(()=>S?.disabled.value||l.disabled),O=g(()=>E(T.value,l.trueValue)),j=g(()=>C(S?.modelValue.value)?T.value===`indeterminate`?`indeterminate`:O.value:k(S.modelValue.value,l.value));function P(){if(C(S?.modelValue.value))T.value===`indeterminate`?T.value=l.trueValue:T.value=O.value?l.falseValue:l.trueValue;else{let e=[...S.modelValue.value||[]];if(k(e,l.value)){let t=e.findIndex(e=>E(e,l.value));e.splice(t,1)}else e.push(l.value);S.modelValue.value=e}}let I=w(y),L=g(()=>l.id&&y.value?document.querySelector(`[for="${l.id}"]`)?.innerText:void 0);return F({disabled:D,state:j}),(e,a)=>(u(),s(c(r(S)?.rovingFocus.value?r(x):r(f)),v(e.$attrs,{id:e.id,ref:r(_),role:`checkbox`,"as-child":e.asChild,as:e.as,type:e.as===`button`?`button`:void 0,"aria-checked":r(M)(j.value)?`mixed`:j.value,"aria-required":e.required,"aria-label":e.$attrs[`aria-label`]||L.value,"data-state":r(N)(j.value),"data-disabled":D.value?``:void 0,disabled:D.value,focusable:r(S)?.rovingFocus.value?!D.value:void 0,onKeydown:n(i(()=>{},[`prevent`]),[`enter`]),onClick:P}),{default:t(()=>[d(e.$slots,`default`,{modelValue:r(T),state:j.value}),r(I)&&e.name&&!r(S)?(u(),s(r(b),{key:0,type:`checkbox`,checked:!!j.value,name:e.name,value:e.value,disabled:D.value,required:e.required},null,8,[`checked`,`name`,`value`,`disabled`,`required`])):o(`v-if`,!0)]),_:3},16,[`id`,`as-child`,`as`,`type`,`aria-checked`,`aria-required`,`aria-label`,`data-state`,`data-disabled`,`disabled`,`focusable`,`onKeydown`]))}}),L=l({__name:`CheckboxIndicator`,props:{forceMount:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:`span`}},setup(n){let{forwardRef:i}=h(),a=P();return(n,o)=>(u(),s(r(T),{present:n.forceMount||r(M)(r(a).state.value)||r(a).state.value===!0},{default:t(()=>[e(r(f),v({ref:r(i),"data-state":r(N)(r(a).state.value),"data-disabled":r(a).disabled.value?``:void 0,style:{pointerEvents:`none`},"as-child":n.asChild,as:n.as},n.$attrs),{default:t(()=>[d(n.$slots,`default`)]),_:3},16,[`data-state`,`data-disabled`,`as-child`,`as`])]),_:3},8,[`present`]))}}),R=l({__name:`Checkbox`,props:{defaultValue:{},modelValue:{},disabled:{type:Boolean},value:{},id:{},trueValue:{},falseValue:{},asChild:{type:Boolean},as:{},name:{},required:{type:Boolean},class:{type:[Boolean,null,String,Object,Array]}},emits:[`update:modelValue`],setup(n,{emit:i}){let o=n,c=i,l=S(y(o,`class`),c);return(n,i)=>(u(),s(r(I),v({"data-slot":`checkbox`},r(l),{class:r(_)(`border-input dark:bg-input/30 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground dark:data-[state=checked]:bg-primary data-[state=checked]:border-primary aria-invalid:aria-checked:border-primary aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 flex size-4 items-center justify-center rounded-md border transition-colors group-has-disabled/field:opacity-50 focus-visible:ring-3 aria-invalid:ring-3 peer relative shrink-0 outline-none after:absolute after:-inset-x-3 after:-inset-y-2 disabled:cursor-not-allowed disabled:opacity-50`,o.class)}),{default:t(i=>[e(r(L),{"data-slot":`checkbox-indicator`,class:`[&>svg]:size-3.5 grid place-content-center text-current transition-none`},{default:t(()=>[d(n.$slots,`default`,a(m(i)),()=>[e(r(O))])]),_:2},1024)]),_:3},16,[`class`]))}});export{R as t};
1
+ import{$ as e,Tt as t,U as n,Vt as r,W as i,Wt as a,X as o,Y as s,_t as c,et as l,ft as u,ht as d,i as f,m as p,nt as m,o as h,q as g,r as _,st as v,x as y}from"./button-Cd7Qd3fz.js";import{t as b}from"./VisuallyHiddenInput-D7rPKtIA.js";import{t as x}from"./RovingFocusItem-Dvp7T0YJ.js";import{B as S,G as C,H as w,L as T,Y as E,q as D,ut as O}from"./index-D6ACTK1W.js";function k(e,t){return C(e)?!1:Array.isArray(e)?e.some(e=>E(e,t)):E(e,t)}var[A,j]=D(`CheckboxGroupRoot`);function M(e){return e===`indeterminate`}function N(e){return M(e)?`indeterminate`:e?`checked`:`unchecked`}var[P,F]=D(`CheckboxRoot`),I=l({inheritAttrs:!1,__name:`CheckboxRoot`,props:{defaultValue:{type:null,required:!1},modelValue:{type:null,required:!1,default:void 0},disabled:{type:Boolean,required:!1},value:{type:null,required:!1,default:`on`},id:{type:String,required:!1},trueValue:{type:null,required:!1,default:()=>!0},falseValue:{type:null,required:!1,default:()=>!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:`button`},name:{type:String,required:!1},required:{type:Boolean,required:!1}},emits:[`update:modelValue`],setup(e,{emit:a}){let l=e,m=a,{forwardRef:_,currentElement:y}=h(),S=A(null),T=p(l,`modelValue`,m,{defaultValue:l.defaultValue??l.falseValue,passive:l.modelValue===void 0}),D=g(()=>S?.disabled.value||l.disabled),O=g(()=>E(T.value,l.trueValue)),j=g(()=>C(S?.modelValue.value)?T.value===`indeterminate`?`indeterminate`:O.value:k(S.modelValue.value,l.value));function P(){if(C(S?.modelValue.value))T.value===`indeterminate`?T.value=l.trueValue:T.value=O.value?l.falseValue:l.trueValue;else{let e=[...S.modelValue.value||[]];if(k(e,l.value)){let t=e.findIndex(e=>E(e,l.value));e.splice(t,1)}else e.push(l.value);S.modelValue.value=e}}let I=w(y),L=g(()=>l.id&&y.value?document.querySelector(`[for="${l.id}"]`)?.innerText:void 0);return F({disabled:D,state:j}),(e,a)=>(u(),s(c(r(S)?.rovingFocus.value?r(x):r(f)),v(e.$attrs,{id:e.id,ref:r(_),role:`checkbox`,"as-child":e.asChild,as:e.as,type:e.as===`button`?`button`:void 0,"aria-checked":r(M)(j.value)?`mixed`:j.value,"aria-required":e.required,"aria-label":e.$attrs[`aria-label`]||L.value,"data-state":r(N)(j.value),"data-disabled":D.value?``:void 0,disabled:D.value,focusable:r(S)?.rovingFocus.value?!D.value:void 0,onKeydown:n(i(()=>{},[`prevent`]),[`enter`]),onClick:P}),{default:t(()=>[d(e.$slots,`default`,{modelValue:r(T),state:j.value}),r(I)&&e.name&&!r(S)?(u(),s(r(b),{key:0,type:`checkbox`,checked:!!j.value,name:e.name,value:e.value,disabled:D.value,required:e.required},null,8,[`checked`,`name`,`value`,`disabled`,`required`])):o(`v-if`,!0)]),_:3},16,[`id`,`as-child`,`as`,`type`,`aria-checked`,`aria-required`,`aria-label`,`data-state`,`data-disabled`,`disabled`,`focusable`,`onKeydown`]))}}),L=l({__name:`CheckboxIndicator`,props:{forceMount:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:`span`}},setup(n){let{forwardRef:i}=h(),a=P();return(n,o)=>(u(),s(r(T),{present:n.forceMount||r(M)(r(a).state.value)||r(a).state.value===!0},{default:t(()=>[e(r(f),v({ref:r(i),"data-state":r(N)(r(a).state.value),"data-disabled":r(a).disabled.value?``:void 0,style:{pointerEvents:`none`},"as-child":n.asChild,as:n.as},n.$attrs),{default:t(()=>[d(n.$slots,`default`)]),_:3},16,[`data-state`,`data-disabled`,`as-child`,`as`])]),_:3},8,[`present`]))}}),R=l({__name:`Checkbox`,props:{defaultValue:{},modelValue:{},disabled:{type:Boolean},value:{},id:{},trueValue:{},falseValue:{},asChild:{type:Boolean},as:{},name:{},required:{type:Boolean},class:{type:[Boolean,null,String,Object,Array]}},emits:[`update:modelValue`],setup(n,{emit:i}){let o=n,c=i,l=S(y(o,`class`),c);return(n,i)=>(u(),s(r(I),v({"data-slot":`checkbox`},r(l),{class:r(_)(`border-input dark:bg-input/30 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground dark:data-[state=checked]:bg-primary data-[state=checked]:border-primary aria-invalid:aria-checked:border-primary aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 flex size-4 items-center justify-center rounded-md border transition-colors group-has-disabled/field:opacity-50 focus-visible:ring-3 aria-invalid:ring-3 peer relative shrink-0 outline-none after:absolute after:-inset-x-3 after:-inset-y-2 disabled:cursor-not-allowed disabled:opacity-50`,o.class)}),{default:t(i=>[e(r(L),{"data-slot":`checkbox-indicator`,class:`[&>svg]:size-3.5 grid place-content-center text-current transition-none`},{default:t(()=>[d(n.$slots,`default`,a(m(i)),()=>[e(r(O))])]),_:2},1024)]),_:3},16,[`class`]))}});export{R as t};
@@ -1 +1 @@
1
- import{$ as e,Nt as t,Rt as n,St as r,Tt as i,Vt as a,Wt as o,X as s,Y as c,ct as l,d as u,et as d,ft as f,ht as p,i as m,m as h,nt as g,o as _,q as v,st as y,ut as b}from"./button-BqYUfybJ.js";import{B as x,L as S,q as C,z as w}from"./index-DcD6M87r.js";var[T,E]=C(`CollapsibleRoot`),D=d({__name:`CollapsibleRoot`,props:{defaultOpen:{type:Boolean,required:!1,default:!1},open:{type:Boolean,required:!1,default:void 0},disabled:{type:Boolean,required:!1},unmountOnHide:{type:Boolean,required:!1,default:!0},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},emits:[`update:open`],setup(e,{expose:t,emit:r}){let o=e,s=h(o,`open`,r,{defaultValue:o.defaultOpen,passive:o.open===void 0}),{disabled:l,unmountOnHide:u}=n(o);return E({contentId:``,disabled:l,open:s,unmountOnHide:u,onOpenToggle:()=>{l.value||(s.value=!s.value)}}),t({open:s}),_(),(e,t)=>(f(),c(a(m),{as:e.as,"as-child":o.asChild,"data-state":a(s)?`open`:`closed`,"data-disabled":a(l)?``:void 0},{default:i(()=>[p(e.$slots,`default`,{open:a(s)})]),_:3},8,[`as`,`as-child`,`data-state`,`data-disabled`]))}}),O=d({inheritAttrs:!1,__name:`CollapsibleContent`,props:{forceMount:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},emits:[`contentFound`],setup(n,{emit:o}){let d=n,h=o,g=T();g.contentId||=w(void 0,`reka-collapsible-content`);let x=t(),{forwardRef:C,currentElement:E}=_(),D=t(0),O=t(0),k=v(()=>g.open.value),A=t(k.value),j=t();r(()=>[k.value,x.value?.present],async()=>{await l();let e=E.value;if(!e)return;j.value=j.value||{transitionDuration:e.style.transitionDuration,animationName:e.style.animationName},e.style.transitionDuration=`0s`,e.style.animationName=`none`;let t=e.getBoundingClientRect();O.value=t.height,D.value=t.width,A.value||(e.style.transitionDuration=j.value.transitionDuration,e.style.animationName=j.value.animationName)},{immediate:!0});let M=v(()=>A.value&&g.open.value);return b(()=>{requestAnimationFrame(()=>{A.value=!1})}),u(E,`beforematch`,e=>{requestAnimationFrame(()=>{g.onOpenToggle(),h(`contentFound`)})}),(t,n)=>(f(),c(a(S),{ref_key:`presentRef`,ref:x,present:t.forceMount||a(g).open.value,"force-mount":!0},{default:i(({present:n})=>[e(a(m),y(t.$attrs,{id:a(g).contentId,ref:a(C),"as-child":d.asChild,as:t.as,hidden:n?void 0:a(g).unmountOnHide.value?``:`until-found`,"data-state":M.value?void 0:a(g).open.value?`open`:`closed`,"data-disabled":a(g).disabled?.value?``:void 0,style:{"--reka-collapsible-content-height":`${O.value}px`,"--reka-collapsible-content-width":`${D.value}px`}}),{default:i(()=>[!a(g).unmountOnHide.value||n?p(t.$slots,`default`,{key:0}):s(`v-if`,!0)]),_:2},1040,[`id`,`as-child`,`as`,`hidden`,`data-state`,`data-disabled`,`style`])]),_:3},8,[`present`]))}}),k=d({__name:`Collapsible`,props:{defaultOpen:{type:Boolean},open:{type:Boolean},disabled:{type:Boolean},unmountOnHide:{type:Boolean},asChild:{type:Boolean},as:{}},emits:[`update:open`],setup(e,{emit:t}){let n=x(e,t);return(e,t)=>(f(),c(a(D),y({"data-slot":`collapsible`},a(n)),{default:i(t=>[p(e.$slots,`default`,o(g(t)))]),_:3},16))}}),A=d({__name:`CollapsibleContent`,props:{forceMount:{type:Boolean},asChild:{type:Boolean},as:{}},setup(e){let t=e;return(e,n)=>(f(),c(a(O),y({"data-slot":`collapsible-content`},t),{default:i(()=>[p(e.$slots,`default`)]),_:3},16))}});export{k as n,T as r,A as t};
1
+ import{$ as e,Nt as t,Rt as n,St as r,Tt as i,Vt as a,Wt as o,X as s,Y as c,ct as l,d as u,et as d,ft as f,ht as p,i as m,m as h,nt as g,o as _,q as v,st as y,ut as b}from"./button-Cd7Qd3fz.js";import{B as x,L as S,q as C,z as w}from"./index-D6ACTK1W.js";var[T,E]=C(`CollapsibleRoot`),D=d({__name:`CollapsibleRoot`,props:{defaultOpen:{type:Boolean,required:!1,default:!1},open:{type:Boolean,required:!1,default:void 0},disabled:{type:Boolean,required:!1},unmountOnHide:{type:Boolean,required:!1,default:!0},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},emits:[`update:open`],setup(e,{expose:t,emit:r}){let o=e,s=h(o,`open`,r,{defaultValue:o.defaultOpen,passive:o.open===void 0}),{disabled:l,unmountOnHide:u}=n(o);return E({contentId:``,disabled:l,open:s,unmountOnHide:u,onOpenToggle:()=>{l.value||(s.value=!s.value)}}),t({open:s}),_(),(e,t)=>(f(),c(a(m),{as:e.as,"as-child":o.asChild,"data-state":a(s)?`open`:`closed`,"data-disabled":a(l)?``:void 0},{default:i(()=>[p(e.$slots,`default`,{open:a(s)})]),_:3},8,[`as`,`as-child`,`data-state`,`data-disabled`]))}}),O=d({inheritAttrs:!1,__name:`CollapsibleContent`,props:{forceMount:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},emits:[`contentFound`],setup(n,{emit:o}){let d=n,h=o,g=T();g.contentId||=w(void 0,`reka-collapsible-content`);let x=t(),{forwardRef:C,currentElement:E}=_(),D=t(0),O=t(0),k=v(()=>g.open.value),A=t(k.value),j=t();r(()=>[k.value,x.value?.present],async()=>{await l();let e=E.value;if(!e)return;j.value=j.value||{transitionDuration:e.style.transitionDuration,animationName:e.style.animationName},e.style.transitionDuration=`0s`,e.style.animationName=`none`;let t=e.getBoundingClientRect();O.value=t.height,D.value=t.width,A.value||(e.style.transitionDuration=j.value.transitionDuration,e.style.animationName=j.value.animationName)},{immediate:!0});let M=v(()=>A.value&&g.open.value);return b(()=>{requestAnimationFrame(()=>{A.value=!1})}),u(E,`beforematch`,e=>{requestAnimationFrame(()=>{g.onOpenToggle(),h(`contentFound`)})}),(t,n)=>(f(),c(a(S),{ref_key:`presentRef`,ref:x,present:t.forceMount||a(g).open.value,"force-mount":!0},{default:i(({present:n})=>[e(a(m),y(t.$attrs,{id:a(g).contentId,ref:a(C),"as-child":d.asChild,as:t.as,hidden:n?void 0:a(g).unmountOnHide.value?``:`until-found`,"data-state":M.value?void 0:a(g).open.value?`open`:`closed`,"data-disabled":a(g).disabled?.value?``:void 0,style:{"--reka-collapsible-content-height":`${O.value}px`,"--reka-collapsible-content-width":`${D.value}px`}}),{default:i(()=>[!a(g).unmountOnHide.value||n?p(t.$slots,`default`,{key:0}):s(`v-if`,!0)]),_:2},1040,[`id`,`as-child`,`as`,`hidden`,`data-state`,`data-disabled`,`style`])]),_:3},8,[`present`]))}}),k=d({__name:`Collapsible`,props:{defaultOpen:{type:Boolean},open:{type:Boolean},disabled:{type:Boolean},unmountOnHide:{type:Boolean},asChild:{type:Boolean},as:{}},emits:[`update:open`],setup(e,{emit:t}){let n=x(e,t);return(e,t)=>(f(),c(a(D),y({"data-slot":`collapsible`},a(n)),{default:i(t=>[p(e.$slots,`default`,o(g(t)))]),_:3},16))}}),A=d({__name:`CollapsibleContent`,props:{forceMount:{type:Boolean},asChild:{type:Boolean},as:{}},setup(e){let t=e;return(e,n)=>(f(),c(a(O),y({"data-slot":`collapsible-content`},t),{default:i(()=>[p(e.$slots,`default`)]),_:3},16))}});export{k as n,T as r,A as t};
@@ -1 +1 @@
1
- import{Tt as e,Vt as t,Y as n,et as r,ft as i,ht as a,i as o,o as s,st as c}from"./button-BqYUfybJ.js";import{r as l}from"./CollapsibleContent-DRIfmabo.js";var u=r({__name:`CollapsibleTrigger`,props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:`button`}},setup(r){let c=r;s();let u=l();return(r,s)=>(i(),n(t(o),{type:r.as===`button`?`button`:void 0,as:r.as,"as-child":c.asChild,"aria-controls":t(u).contentId,"aria-expanded":t(u).open.value,"data-state":t(u).open.value?`open`:`closed`,"data-disabled":t(u).disabled?.value?``:void 0,disabled:t(u).disabled?.value,onClick:t(u).onOpenToggle},{default:e(()=>[a(r.$slots,`default`)]),_:3},8,[`type`,`as`,`as-child`,`aria-controls`,`aria-expanded`,`data-state`,`data-disabled`,`disabled`,`onClick`]))}}),d=r({__name:`CollapsibleTrigger`,props:{asChild:{type:Boolean},as:{}},setup(r){let o=r;return(r,s)=>(i(),n(t(u),c({"data-slot":`collapsible-trigger`},o),{default:e(()=>[a(r.$slots,`default`)]),_:3},16))}});export{d as t};
1
+ import{Tt as e,Vt as t,Y as n,et as r,ft as i,ht as a,i as o,o as s,st as c}from"./button-Cd7Qd3fz.js";import{r as l}from"./CollapsibleContent-Dnt-UfRz.js";var u=r({__name:`CollapsibleTrigger`,props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:`button`}},setup(r){let c=r;s();let u=l();return(r,s)=>(i(),n(t(o),{type:r.as===`button`?`button`:void 0,as:r.as,"as-child":c.asChild,"aria-controls":t(u).contentId,"aria-expanded":t(u).open.value,"data-state":t(u).open.value?`open`:`closed`,"data-disabled":t(u).disabled?.value?``:void 0,disabled:t(u).disabled?.value,onClick:t(u).onOpenToggle},{default:e(()=>[a(r.$slots,`default`)]),_:3},8,[`type`,`as`,`as-child`,`aria-controls`,`aria-expanded`,`data-state`,`data-disabled`,`disabled`,`onClick`]))}}),d=r({__name:`CollapsibleTrigger`,props:{asChild:{type:Boolean},as:{}},setup(r){let o=r;return(r,s)=>(i(),n(t(u),c({"data-slot":`collapsible-trigger`},o),{default:e(()=>[a(r.$slots,`default`)]),_:3},16))}});export{d as t};