llm-simple-router 0.9.28 → 0.9.29

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 (42) hide show
  1. package/dist/proxy/patch/deepseek/index.d.ts +3 -2
  2. package/dist/proxy/patch/deepseek/index.js +4 -2
  3. package/dist/proxy/patch/deepseek/patch-non-deepseek-tools.d.ts +4 -0
  4. package/dist/proxy/patch/deepseek/patch-non-deepseek-tools.js +7 -0
  5. package/dist/proxy/transform/message-mapper.js +51 -5
  6. package/frontend-dist/assets/{CardContent-CWAKELrs.js → CardContent-B7Q1YCsK.js} +1 -1
  7. package/frontend-dist/assets/{CardTitle-BaEU1LKt.js → CardTitle-C5Bsezde.js} +1 -1
  8. package/frontend-dist/assets/{Checkbox-DEjEG5IG.js → Checkbox-wJzvSjuY.js} +1 -1
  9. package/frontend-dist/assets/{CollapsibleContent-D6M9ckiV.js → CollapsibleContent-B5pPNqRd.js} +1 -1
  10. package/frontend-dist/assets/{CollapsibleTrigger-D7ytblFT.js → CollapsibleTrigger-CSexuQRq.js} +1 -1
  11. package/frontend-dist/assets/{Dashboard-DSjJiwNK.js → Dashboard-BqOhqB5M.js} +1 -1
  12. package/frontend-dist/assets/{Input-Dr54RO9b.js → Input-DMQL4BIA.js} +1 -1
  13. package/frontend-dist/assets/{Label-C1VeclKG.js → Label-hAkd1fSw.js} +1 -1
  14. package/frontend-dist/assets/{Login-COerl_FG.js → Login-n5g90q7F.js} +1 -1
  15. package/frontend-dist/assets/{Logs-ftRRcovp.js → Logs-BdptXdAL.js} +1 -1
  16. package/frontend-dist/assets/{MappingEntryEditor-Ee3Ry8SV.js → MappingEntryEditor-DrLuHu98.js} +1 -1
  17. package/frontend-dist/assets/{ModelCard-6HxVZety.js → ModelCard-gEWqLgeY.js} +1 -1
  18. package/frontend-dist/assets/{ModelMappings-DP-sSMpU.js → ModelMappings-CYeT2Zks.js} +1 -1
  19. package/frontend-dist/assets/{Monitor-Cr2YZJCL.js → Monitor-BUr4LnM-.js} +1 -1
  20. package/frontend-dist/assets/{Providers-qtUyzL0Z.js → Providers-CcfxF8po.js} +1 -1
  21. package/frontend-dist/assets/{ProxyEnhancement-BtDp94lW.js → ProxyEnhancement-BxGYl9qc.js} +1 -1
  22. package/frontend-dist/assets/{QuickSetup-T77OBpL5.js → QuickSetup-B3Hc_tfI.js} +1 -1
  23. package/frontend-dist/assets/{RetryRules-DTvmG0lP.js → RetryRules-2T_w2dsY.js} +1 -1
  24. package/frontend-dist/assets/{RouterKeys-Bt-w46oq.js → RouterKeys-C0iULDvk.js} +1 -1
  25. package/frontend-dist/assets/{RovingFocusItem-DqFdv_fr.js → RovingFocusItem-WInkGN79.js} +1 -1
  26. package/frontend-dist/assets/{Schedules-nMIfQGMv.js → Schedules-DC3-3teO.js} +1 -1
  27. package/frontend-dist/assets/{Settings-DX97J988.js → Settings-DGd7p1_A.js} +1 -1
  28. package/frontend-dist/assets/{Setup-Dt5SDW8y.js → Setup-CfojnNyj.js} +1 -1
  29. package/frontend-dist/assets/{Switch-D5SINcHm.js → Switch-Bs4rq7IS.js} +1 -1
  30. package/frontend-dist/assets/{TooltipTrigger-DKHvvL_R.js → TooltipTrigger-C-z-Bt9A.js} +1 -1
  31. package/frontend-dist/assets/{TransformRulesForm-CfTPnICK.js → TransformRulesForm-BWeHl75r.js} +1 -1
  32. package/frontend-dist/assets/{UnifiedRequestDialog-7DjuW5T4.js → UnifiedRequestDialog-B6aqWGh6.js} +1 -1
  33. package/frontend-dist/assets/{VisuallyHiddenInput-3MxuNxns.js → VisuallyHiddenInput-CbZDCpY7.js} +1 -1
  34. package/frontend-dist/assets/{button-BNzpd1Az.js → button-m0I0MyCI.js} +2 -2
  35. package/frontend-dist/assets/{copy-C2UqbqTe.js → copy-JCnKoTiJ.js} +1 -1
  36. package/frontend-dist/assets/{dialog-D6gMAMVo.js → dialog-Cq89SQbS.js} +1 -1
  37. package/frontend-dist/assets/{index-BrEL_SHx.js → index-CjaxcyJj.js} +2 -2
  38. package/frontend-dist/assets/{trash-2-Cyi3HM86.js → trash-2-PnXybHnJ.js} +1 -1
  39. package/frontend-dist/assets/{useClipboard-DiljKUdS.js → useClipboard-C5CZy9d2.js} +1 -1
  40. package/frontend-dist/assets/{useLogRetention-Cfxr7tWP.js → useLogRetention-CLjR8sEq.js} +1 -1
  41. package/frontend-dist/index.html +2 -2
  42. package/package.json +1 -1
@@ -12,7 +12,8 @@
12
12
  * 4. patchOrphanToolResults — 清理孤儿 tool_result
13
13
  *
14
14
  * OpenAI 格式执行顺序(参考 docs/deepseek-patch-investigation.md §5.5):
15
- * 1. patchNonDeepSeekToolMessages将非 DeepSeek 生成的 tool_calls 降级为 text
16
- * 2. patchOrphanToolResultsOA处理孤儿 tool 消息
15
+ * 1. patchThinkingParam检测历史 reasoning_content,注入 thinking 参数
16
+ * 2. patchNonDeepSeekToolMessages将非 DeepSeek 生成的 tool_calls 降级为 text
17
+ * 3. patchOrphanToolResultsOA — 处理孤儿 tool 消息
17
18
  */
18
19
  export declare function applyDeepSeekPatches(body: Record<string, unknown>, apiType: "openai" | "openai-responses" | "anthropic"): void;
@@ -17,8 +17,9 @@ import { patchOrphanToolResults, patchOrphanToolResultsOA } from "./patch-orphan
17
17
  * 4. patchOrphanToolResults — 清理孤儿 tool_result
18
18
  *
19
19
  * OpenAI 格式执行顺序(参考 docs/deepseek-patch-investigation.md §5.5):
20
- * 1. patchNonDeepSeekToolMessages将非 DeepSeek 生成的 tool_calls 降级为 text
21
- * 2. patchOrphanToolResultsOA处理孤儿 tool 消息
20
+ * 1. patchThinkingParam检测历史 reasoning_content,注入 thinking 参数
21
+ * 2. patchNonDeepSeekToolMessages将非 DeepSeek 生成的 tool_calls 降级为 text
22
+ * 3. patchOrphanToolResultsOA — 处理孤儿 tool 消息
22
23
  */
23
24
  export function applyDeepSeekPatches(body, apiType) {
24
25
  if (apiType === "anthropic") {
@@ -28,6 +29,7 @@ export function applyDeepSeekPatches(body, apiType) {
28
29
  patchOrphanToolResults(body);
29
30
  }
30
31
  else {
32
+ patchThinkingParam(body, apiType);
31
33
  patchNonDeepSeekToolMessages(body);
32
34
  patchOrphanToolResultsOA(body);
33
35
  }
@@ -5,6 +5,10 @@
5
5
  * 可能不包含 DeepSeek 要求的 reasoning_content,导致上游校验失败或
6
6
  * 工具调用无限循环。
7
7
  *
8
+ * 前置条件:仅 thinking 模式激活时执行。
9
+ * DeepSeek 只在 thinking 模式下才要求 reasoning_content,未激活时
10
+ * 降级既无必要又可能导致模型学会以文本形式输出 tool_calls。
11
+ *
8
12
  * 判断标准:assistant 消息有 tool_calls 但无 reasoning_content → 非 DeepSeek 生成。
9
13
  *
10
14
  * 转换:
@@ -5,6 +5,10 @@
5
5
  * 可能不包含 DeepSeek 要求的 reasoning_content,导致上游校验失败或
6
6
  * 工具调用无限循环。
7
7
  *
8
+ * 前置条件:仅 thinking 模式激活时执行。
9
+ * DeepSeek 只在 thinking 模式下才要求 reasoning_content,未激活时
10
+ * 降级既无必要又可能导致模型学会以文本形式输出 tool_calls。
11
+ *
8
12
  * 判断标准:assistant 消息有 tool_calls 但无 reasoning_content → 非 DeepSeek 生成。
9
13
  *
10
14
  * 转换:
@@ -14,6 +18,9 @@
14
18
  * 设计文档:docs/deepseek-patch-investigation.md §5
15
19
  */
16
20
  export function patchNonDeepSeekToolMessages(body) {
21
+ // thinking 模式未激活时,DeepSeek 不要求 reasoning_content,无需降级
22
+ if (!body.thinking && !body.reasoning)
23
+ return;
17
24
  const messages = body.messages;
18
25
  if (!messages || !Array.isArray(messages))
19
26
  return;
@@ -1,3 +1,4 @@
1
+ import { randomUUID } from "crypto";
1
2
  import { sanitizeToolUseId, ensureNonEmptyContent, parseToolArguments } from "./sanitize.js";
2
3
  // ---------- extractSystemMessages ----------
3
4
  export function extractSystemMessages(messages) {
@@ -115,6 +116,42 @@ export function convertMessagesOA2Ant(messages) {
115
116
  // ---------- Anthropic → OpenAI ----------
116
117
  export function convertMessagesAnt2OA(system, messages) {
117
118
  const result = [];
119
+ // 预扫描:收集无 id 的 tool_use,为每个生成唯一 UUID。
120
+ // 返回 assistant 索引 → { tool_use 数组索引 → UUID } 的映射,
121
+ // 以及空 tool_use_id 的 tool_result → UUID 的顺序配对列表。
122
+ // OpenAI 格式要求 tool_calls[].id 非空,且 tool.tool_call_id 与之匹配。
123
+ const syntheticIds = [];
124
+ const assistantToolMap = new Map();
125
+ {
126
+ let assistantIdx = 0;
127
+ for (const msg of messages) {
128
+ const m = msg;
129
+ if (m.role !== "assistant")
130
+ continue;
131
+ const content = m.content;
132
+ if (!content) {
133
+ assistantIdx++;
134
+ continue;
135
+ }
136
+ const toolBlocks = content.filter(b => b.type === "tool_use");
137
+ if (toolBlocks.length > 0) {
138
+ const idxMap = new Map();
139
+ for (let i = 0; i < toolBlocks.length; i++) {
140
+ if (!toolBlocks[i].id) {
141
+ const uid = randomUUID();
142
+ idxMap.set(i, uid);
143
+ syntheticIds.push(uid);
144
+ }
145
+ }
146
+ if (idxMap.size > 0)
147
+ assistantToolMap.set(assistantIdx, idxMap);
148
+ }
149
+ assistantIdx++;
150
+ }
151
+ }
152
+ // 空 tool_use_id 的 tool_result 按出现顺序配对到 syntheticIds
153
+ let syntheticCursor = 0;
154
+ let assistantCounter = 0;
118
155
  // system → role:"system"
119
156
  if (system != null) {
120
157
  const text = typeof system === "string"
@@ -137,12 +174,19 @@ export function convertMessagesAnt2OA(system, messages) {
137
174
  result.push({ role: "user", content: textParts.map(b => b.text ?? "").join("") });
138
175
  }
139
176
  for (const tr of toolResults) {
140
- result.push({ role: "tool", tool_call_id: tr.tool_use_id, content: tr.content ?? "" });
177
+ let toolCallId = String(tr.tool_use_id ?? "");
178
+ // 空 tool_use_id → 按顺序配对到预生成的 UUID
179
+ if (!toolCallId && syntheticCursor < syntheticIds.length) {
180
+ toolCallId = syntheticIds[syntheticCursor++];
181
+ }
182
+ result.push({ role: "tool", tool_call_id: toolCallId, content: tr.content ?? "" });
141
183
  }
142
184
  }
143
185
  else if (m.role === "assistant") {
144
- if (!content || !Array.isArray(content))
186
+ if (!content || !Array.isArray(content)) {
187
+ assistantCounter++;
145
188
  continue;
189
+ }
146
190
  const textBlocks = content.filter(b => b.type === "text");
147
191
  const toolBlocks = content.filter(b => b.type === "tool_use");
148
192
  const oaiMsg = { role: "assistant" };
@@ -156,10 +200,11 @@ export function convertMessagesAnt2OA(system, messages) {
156
200
  if (textBlocks.length > 0) {
157
201
  oaiMsg.content = textBlocks.map(b => b.text ?? "").join("");
158
202
  }
159
- // tool_use → tool_calls
203
+ // tool_use → tool_calls(无 id 的 tool_use 使用预生成的 UUID)
160
204
  if (toolBlocks.length > 0) {
161
- oaiMsg.tool_calls = toolBlocks.map(b => ({
162
- id: b.id,
205
+ const idMap = assistantToolMap.get(assistantCounter);
206
+ oaiMsg.tool_calls = toolBlocks.map((b, i) => ({
207
+ id: b.id || (idMap ? idMap.get(i) || randomUUID() : randomUUID()),
163
208
  type: "function",
164
209
  function: { name: b.name, arguments: JSON.stringify(b.input ?? {}) },
165
210
  }));
@@ -167,6 +212,7 @@ export function convertMessagesAnt2OA(system, messages) {
167
212
  if (oaiMsg.content || oaiMsg.tool_calls) {
168
213
  result.push(oaiMsg);
169
214
  }
215
+ assistantCounter++;
170
216
  }
171
217
  }
172
218
  return result;
@@ -1 +1 @@
1
- import{$ as e,Vt as t,X as n,dt as r,mt as i,r as a,zt as o}from"./button-BNzpd1Az.js";var s=[`data-size`],c=e({__name:`Card`,props:{class:{type:[Boolean,null,String,Object,Array]},size:{default:`default`}},setup(e){let c=e;return(l,u)=>(r(),n(`div`,{"data-slot":`card`,"data-size":e.size,class:t(o(a)(`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))},[i(l.$slots,`default`)],10,s))}}),l=e({__name:`CardContent`,props:{class:{type:[Boolean,null,String,Object,Array]}},setup(e){let s=e;return(e,c)=>(r(),n(`div`,{"data-slot":`card-content`,class:t(o(a)(`px-4 group-data-[size=sm]/card:px-3`,s.class))},[i(e.$slots,`default`)],2))}});export{c as n,l as t};
1
+ import{$ as e,Vt as t,X as n,dt as r,mt as i,r as a,zt as o}from"./button-m0I0MyCI.js";var s=[`data-size`],c=e({__name:`Card`,props:{class:{type:[Boolean,null,String,Object,Array]},size:{default:`default`}},setup(e){let c=e;return(l,u)=>(r(),n(`div`,{"data-slot":`card`,"data-size":e.size,class:t(o(a)(`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))},[i(l.$slots,`default`)],10,s))}}),l=e({__name:`CardContent`,props:{class:{type:[Boolean,null,String,Object,Array]}},setup(e){let s=e;return(e,c)=>(r(),n(`div`,{"data-slot":`card-content`,class:t(o(a)(`px-4 group-data-[size=sm]/card:px-3`,s.class))},[i(e.$slots,`default`)],2))}});export{c as n,l as t};
@@ -1 +1 @@
1
- import{$ as e,Vt as t,X as n,dt as r,mt as i,r as a,zt as o}from"./button-BNzpd1Az.js";var s=e({__name:`CardHeader`,props:{class:{type:[Boolean,null,String,Object,Array]}},setup(e){let s=e;return(e,c)=>(r(),n(`div`,{"data-slot":`card-header`,class:t(o(a)(`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))},[i(e.$slots,`default`)],2))}}),c=e({__name:`CardTitle`,props:{class:{type:[Boolean,null,String,Object,Array]}},setup(e){let s=e;return(e,c)=>(r(),n(`div`,{"data-slot":`card-title`,class:t(o(a)(`text-base leading-snug font-medium group-data-[size=sm]/card:text-sm cn-font-heading`,s.class))},[i(e.$slots,`default`)],2))}});export{s as n,c as t};
1
+ import{$ as e,Vt as t,X as n,dt as r,mt as i,r as a,zt as o}from"./button-m0I0MyCI.js";var s=e({__name:`CardHeader`,props:{class:{type:[Boolean,null,String,Object,Array]}},setup(e){let s=e;return(e,c)=>(r(),n(`div`,{"data-slot":`card-header`,class:t(o(a)(`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))},[i(e.$slots,`default`)],2))}}),c=e({__name:`CardTitle`,props:{class:{type:[Boolean,null,String,Object,Array]}},setup(e){let s=e;return(e,c)=>(r(),n(`div`,{"data-slot":`card-title`,class:t(o(a)(`text-base leading-snug font-medium group-data-[size=sm]/card:text-sm cn-font-heading`,s.class))},[i(e.$slots,`default`)],2))}});export{s as n,c as t};
@@ -1 +1 @@
1
- import{$ as e,H as t,Ht as n,J as r,K as i,Q as a,U as o,Y as s,dt as c,gt as l,i as u,m as d,mt as f,o as p,ot as m,r as h,tt as g,wt as _,x as v,zt as y}from"./button-BNzpd1Az.js";import{t as b}from"./VisuallyHiddenInput-3MxuNxns.js";import{t as x}from"./RovingFocusItem-DqFdv_fr.js";import{B as S,G as C,H as w,L as T,Y as E,nt as D,q as O}from"./index-BrEL_SHx.js";function k(e,t){return C(e)?!1:Array.isArray(e)?e.some(e=>E(e,t)):E(e,t)}var[A,j]=O(`CheckboxGroupRoot`);function M(e){return e===`indeterminate`}function N(e){return M(e)?`indeterminate`:e?`checked`:`unchecked`}var[P,F]=O(`CheckboxRoot`),I=e({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:n}){let a=e,h=n,{forwardRef:g,currentElement:v}=p(),S=A(null),T=d(a,`modelValue`,h,{defaultValue:a.defaultValue??a.falseValue,passive:a.modelValue===void 0}),D=i(()=>S?.disabled.value||a.disabled),O=i(()=>E(T.value,a.trueValue)),j=i(()=>C(S?.modelValue.value)?T.value===`indeterminate`?`indeterminate`:O.value:k(S.modelValue.value,a.value));function P(){if(C(S?.modelValue.value))T.value===`indeterminate`?T.value=a.trueValue:T.value=O.value?a.falseValue:a.trueValue;else{let e=[...S.modelValue.value||[]];if(k(e,a.value)){let t=e.findIndex(e=>E(e,a.value));e.splice(t,1)}else e.push(a.value);S.modelValue.value=e}}let I=w(v),L=i(()=>a.id&&v.value?document.querySelector(`[for="${a.id}"]`)?.innerText:void 0);return F({disabled:D,state:j}),(e,n)=>(c(),r(l(y(S)?.rovingFocus.value?y(x):y(u)),m(e.$attrs,{id:e.id,ref:y(g),role:`checkbox`,"as-child":e.asChild,as:e.as,type:e.as===`button`?`button`:void 0,"aria-checked":y(M)(j.value)?`mixed`:j.value,"aria-required":e.required,"aria-label":e.$attrs[`aria-label`]||L.value,"data-state":y(N)(j.value),"data-disabled":D.value?``:void 0,disabled:D.value,focusable:y(S)?.rovingFocus.value?!D.value:void 0,onKeydown:t(o(()=>{},[`prevent`]),[`enter`]),onClick:P}),{default:_(()=>[f(e.$slots,`default`,{modelValue:y(T),state:j.value}),y(I)&&e.name&&!y(S)?(c(),r(y(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`])):s(`v-if`,!0)]),_:3},16,[`id`,`as-child`,`as`,`type`,`aria-checked`,`aria-required`,`aria-label`,`data-state`,`data-disabled`,`disabled`,`focusable`,`onKeydown`]))}}),L=e({__name:`CheckboxIndicator`,props:{forceMount:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:`span`}},setup(e){let{forwardRef:t}=p(),n=P();return(e,i)=>(c(),r(y(T),{present:e.forceMount||y(M)(y(n).state.value)||y(n).state.value===!0},{default:_(()=>[a(y(u),m({ref:y(t),"data-state":y(N)(y(n).state.value),"data-disabled":y(n).disabled.value?``:void 0,style:{pointerEvents:`none`},"as-child":e.asChild,as:e.as},e.$attrs),{default:_(()=>[f(e.$slots,`default`)]),_:3},16,[`data-state`,`data-disabled`,`as-child`,`as`])]),_:3},8,[`present`]))}}),R=e({__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(e,{emit:t}){let i=e,o=t,s=S(v(i,`class`),o);return(e,t)=>(c(),r(y(I),m({"data-slot":`checkbox`},y(s),{class:y(h)(`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`,i.class)}),{default:_(t=>[a(y(L),{"data-slot":`checkbox-indicator`,class:`[&>svg]:size-3.5 grid place-content-center text-current transition-none`},{default:_(()=>[f(e.$slots,`default`,n(g(t)),()=>[a(y(D))])]),_:2},1024)]),_:3},16,[`class`]))}});export{R as t};
1
+ import{$ as e,H as t,Ht as n,J as r,K as i,Q as a,U as o,Y as s,dt as c,gt as l,i as u,m as d,mt as f,o as p,ot as m,r as h,tt as g,wt as _,x as v,zt as y}from"./button-m0I0MyCI.js";import{t as b}from"./VisuallyHiddenInput-CbZDCpY7.js";import{t as x}from"./RovingFocusItem-WInkGN79.js";import{B as S,G as C,H as w,L as T,Y as E,nt as D,q as O}from"./index-CjaxcyJj.js";function k(e,t){return C(e)?!1:Array.isArray(e)?e.some(e=>E(e,t)):E(e,t)}var[A,j]=O(`CheckboxGroupRoot`);function M(e){return e===`indeterminate`}function N(e){return M(e)?`indeterminate`:e?`checked`:`unchecked`}var[P,F]=O(`CheckboxRoot`),I=e({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:n}){let a=e,h=n,{forwardRef:g,currentElement:v}=p(),S=A(null),T=d(a,`modelValue`,h,{defaultValue:a.defaultValue??a.falseValue,passive:a.modelValue===void 0}),D=i(()=>S?.disabled.value||a.disabled),O=i(()=>E(T.value,a.trueValue)),j=i(()=>C(S?.modelValue.value)?T.value===`indeterminate`?`indeterminate`:O.value:k(S.modelValue.value,a.value));function P(){if(C(S?.modelValue.value))T.value===`indeterminate`?T.value=a.trueValue:T.value=O.value?a.falseValue:a.trueValue;else{let e=[...S.modelValue.value||[]];if(k(e,a.value)){let t=e.findIndex(e=>E(e,a.value));e.splice(t,1)}else e.push(a.value);S.modelValue.value=e}}let I=w(v),L=i(()=>a.id&&v.value?document.querySelector(`[for="${a.id}"]`)?.innerText:void 0);return F({disabled:D,state:j}),(e,n)=>(c(),r(l(y(S)?.rovingFocus.value?y(x):y(u)),m(e.$attrs,{id:e.id,ref:y(g),role:`checkbox`,"as-child":e.asChild,as:e.as,type:e.as===`button`?`button`:void 0,"aria-checked":y(M)(j.value)?`mixed`:j.value,"aria-required":e.required,"aria-label":e.$attrs[`aria-label`]||L.value,"data-state":y(N)(j.value),"data-disabled":D.value?``:void 0,disabled:D.value,focusable:y(S)?.rovingFocus.value?!D.value:void 0,onKeydown:t(o(()=>{},[`prevent`]),[`enter`]),onClick:P}),{default:_(()=>[f(e.$slots,`default`,{modelValue:y(T),state:j.value}),y(I)&&e.name&&!y(S)?(c(),r(y(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`])):s(`v-if`,!0)]),_:3},16,[`id`,`as-child`,`as`,`type`,`aria-checked`,`aria-required`,`aria-label`,`data-state`,`data-disabled`,`disabled`,`focusable`,`onKeydown`]))}}),L=e({__name:`CheckboxIndicator`,props:{forceMount:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:`span`}},setup(e){let{forwardRef:t}=p(),n=P();return(e,i)=>(c(),r(y(T),{present:e.forceMount||y(M)(y(n).state.value)||y(n).state.value===!0},{default:_(()=>[a(y(u),m({ref:y(t),"data-state":y(N)(y(n).state.value),"data-disabled":y(n).disabled.value?``:void 0,style:{pointerEvents:`none`},"as-child":e.asChild,as:e.as},e.$attrs),{default:_(()=>[f(e.$slots,`default`)]),_:3},16,[`data-state`,`data-disabled`,`as-child`,`as`])]),_:3},8,[`present`]))}}),R=e({__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(e,{emit:t}){let i=e,o=t,s=S(v(i,`class`),o);return(e,t)=>(c(),r(y(I),m({"data-slot":`checkbox`},y(s),{class:y(h)(`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`,i.class)}),{default:_(t=>[a(y(L),{"data-slot":`checkbox-indicator`,class:`[&>svg]:size-3.5 grid place-content-center text-current transition-none`},{default:_(()=>[f(e.$slots,`default`,n(g(t)),()=>[a(y(D))])]),_:2},1024)]),_:3},16,[`class`]))}});export{R as t};
@@ -1 +1 @@
1
- import{$ as e,Ht as t,J as n,K as r,Lt as i,Mt as a,Q as o,Y as s,d as c,dt as l,i as u,lt as d,m as f,mt as p,o as m,ot as h,st as g,tt as _,wt as v,xt as y,zt as b}from"./button-BNzpd1Az.js";import{B as x,L as S,q as C,z as w}from"./index-BrEL_SHx.js";var[T,E]=C(`CollapsibleRoot`),D=e({__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 a=e,o=f(a,`open`,r,{defaultValue:a.defaultOpen,passive:a.open===void 0}),{disabled:s,unmountOnHide:c}=i(a);return E({contentId:``,disabled:s,open:o,unmountOnHide:c,onOpenToggle:()=>{s.value||(o.value=!o.value)}}),t({open:o}),m(),(e,t)=>(l(),n(b(u),{as:e.as,"as-child":a.asChild,"data-state":b(o)?`open`:`closed`,"data-disabled":b(s)?``:void 0},{default:v(()=>[p(e.$slots,`default`,{open:b(o)})]),_:3},8,[`as`,`as-child`,`data-state`,`data-disabled`]))}}),O=e({inheritAttrs:!1,__name:`CollapsibleContent`,props:{forceMount:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},emits:[`contentFound`],setup(e,{emit:t}){let i=e,f=t,_=T();_.contentId||=w(void 0,`reka-collapsible-content`);let x=a(),{forwardRef:C,currentElement:E}=m(),D=a(0),O=a(0),k=r(()=>_.open.value),A=a(k.value),j=a();y(()=>[k.value,x.value?.present],async()=>{await g();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=r(()=>A.value&&_.open.value);return d(()=>{requestAnimationFrame(()=>{A.value=!1})}),c(E,`beforematch`,e=>{requestAnimationFrame(()=>{_.onOpenToggle(),f(`contentFound`)})}),(e,t)=>(l(),n(b(S),{ref_key:`presentRef`,ref:x,present:e.forceMount||b(_).open.value,"force-mount":!0},{default:v(({present:t})=>[o(b(u),h(e.$attrs,{id:b(_).contentId,ref:b(C),"as-child":i.asChild,as:e.as,hidden:t?void 0:b(_).unmountOnHide.value?``:`until-found`,"data-state":M.value?void 0:b(_).open.value?`open`:`closed`,"data-disabled":b(_).disabled?.value?``:void 0,style:{"--reka-collapsible-content-height":`${O.value}px`,"--reka-collapsible-content-width":`${D.value}px`}}),{default:v(()=>[!b(_).unmountOnHide.value||t?p(e.$slots,`default`,{key:0}):s(`v-if`,!0)]),_:2},1040,[`id`,`as-child`,`as`,`hidden`,`data-state`,`data-disabled`,`style`])]),_:3},8,[`present`]))}}),k=e({__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:r}){let i=x(e,r);return(e,r)=>(l(),n(b(D),h({"data-slot":`collapsible`},b(i)),{default:v(n=>[p(e.$slots,`default`,t(_(n)))]),_:3},16))}}),A=e({__name:`CollapsibleContent`,props:{forceMount:{type:Boolean},asChild:{type:Boolean},as:{}},setup(e){let t=e;return(e,r)=>(l(),n(b(O),h({"data-slot":`collapsible-content`},t),{default:v(()=>[p(e.$slots,`default`)]),_:3},16))}});export{k as n,T as r,A as t};
1
+ import{$ as e,Ht as t,J as n,K as r,Lt as i,Mt as a,Q as o,Y as s,d as c,dt as l,i as u,lt as d,m as f,mt as p,o as m,ot as h,st as g,tt as _,wt as v,xt as y,zt as b}from"./button-m0I0MyCI.js";import{B as x,L as S,q as C,z as w}from"./index-CjaxcyJj.js";var[T,E]=C(`CollapsibleRoot`),D=e({__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 a=e,o=f(a,`open`,r,{defaultValue:a.defaultOpen,passive:a.open===void 0}),{disabled:s,unmountOnHide:c}=i(a);return E({contentId:``,disabled:s,open:o,unmountOnHide:c,onOpenToggle:()=>{s.value||(o.value=!o.value)}}),t({open:o}),m(),(e,t)=>(l(),n(b(u),{as:e.as,"as-child":a.asChild,"data-state":b(o)?`open`:`closed`,"data-disabled":b(s)?``:void 0},{default:v(()=>[p(e.$slots,`default`,{open:b(o)})]),_:3},8,[`as`,`as-child`,`data-state`,`data-disabled`]))}}),O=e({inheritAttrs:!1,__name:`CollapsibleContent`,props:{forceMount:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},emits:[`contentFound`],setup(e,{emit:t}){let i=e,f=t,_=T();_.contentId||=w(void 0,`reka-collapsible-content`);let x=a(),{forwardRef:C,currentElement:E}=m(),D=a(0),O=a(0),k=r(()=>_.open.value),A=a(k.value),j=a();y(()=>[k.value,x.value?.present],async()=>{await g();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=r(()=>A.value&&_.open.value);return d(()=>{requestAnimationFrame(()=>{A.value=!1})}),c(E,`beforematch`,e=>{requestAnimationFrame(()=>{_.onOpenToggle(),f(`contentFound`)})}),(e,t)=>(l(),n(b(S),{ref_key:`presentRef`,ref:x,present:e.forceMount||b(_).open.value,"force-mount":!0},{default:v(({present:t})=>[o(b(u),h(e.$attrs,{id:b(_).contentId,ref:b(C),"as-child":i.asChild,as:e.as,hidden:t?void 0:b(_).unmountOnHide.value?``:`until-found`,"data-state":M.value?void 0:b(_).open.value?`open`:`closed`,"data-disabled":b(_).disabled?.value?``:void 0,style:{"--reka-collapsible-content-height":`${O.value}px`,"--reka-collapsible-content-width":`${D.value}px`}}),{default:v(()=>[!b(_).unmountOnHide.value||t?p(e.$slots,`default`,{key:0}):s(`v-if`,!0)]),_:2},1040,[`id`,`as-child`,`as`,`hidden`,`data-state`,`data-disabled`,`style`])]),_:3},8,[`present`]))}}),k=e({__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:r}){let i=x(e,r);return(e,r)=>(l(),n(b(D),h({"data-slot":`collapsible`},b(i)),{default:v(n=>[p(e.$slots,`default`,t(_(n)))]),_:3},16))}}),A=e({__name:`CollapsibleContent`,props:{forceMount:{type:Boolean},asChild:{type:Boolean},as:{}},setup(e){let t=e;return(e,r)=>(l(),n(b(O),h({"data-slot":`collapsible-content`},t),{default:v(()=>[p(e.$slots,`default`)]),_:3},16))}});export{k as n,T as r,A as t};
@@ -1 +1 @@
1
- import{$ as e,J as t,dt as n,i as r,mt as i,o as a,ot as o,wt as s,zt as c}from"./button-BNzpd1Az.js";import{r as l}from"./CollapsibleContent-D6M9ckiV.js";var u=e({__name:`CollapsibleTrigger`,props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:`button`}},setup(e){let o=e;a();let u=l();return(e,a)=>(n(),t(c(r),{type:e.as===`button`?`button`:void 0,as:e.as,"as-child":o.asChild,"aria-controls":c(u).contentId,"aria-expanded":c(u).open.value,"data-state":c(u).open.value?`open`:`closed`,"data-disabled":c(u).disabled?.value?``:void 0,disabled:c(u).disabled?.value,onClick:c(u).onOpenToggle},{default:s(()=>[i(e.$slots,`default`)]),_:3},8,[`type`,`as`,`as-child`,`aria-controls`,`aria-expanded`,`data-state`,`data-disabled`,`disabled`,`onClick`]))}}),d=e({__name:`CollapsibleTrigger`,props:{asChild:{type:Boolean},as:{}},setup(e){let r=e;return(e,a)=>(n(),t(c(u),o({"data-slot":`collapsible-trigger`},r),{default:s(()=>[i(e.$slots,`default`)]),_:3},16))}});export{d as t};
1
+ import{$ as e,J as t,dt as n,i as r,mt as i,o as a,ot as o,wt as s,zt as c}from"./button-m0I0MyCI.js";import{r as l}from"./CollapsibleContent-B5pPNqRd.js";var u=e({__name:`CollapsibleTrigger`,props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:`button`}},setup(e){let o=e;a();let u=l();return(e,a)=>(n(),t(c(r),{type:e.as===`button`?`button`:void 0,as:e.as,"as-child":o.asChild,"aria-controls":c(u).contentId,"aria-expanded":c(u).open.value,"data-state":c(u).open.value?`open`:`closed`,"data-disabled":c(u).disabled?.value?``:void 0,disabled:c(u).disabled?.value,onClick:c(u).onOpenToggle},{default:s(()=>[i(e.$slots,`default`)]),_:3},8,[`type`,`as`,`as-child`,`aria-controls`,`aria-expanded`,`data-state`,`data-disabled`,`disabled`,`onClick`]))}}),d=e({__name:`CollapsibleTrigger`,props:{asChild:{type:Boolean},as:{}},setup(e){let r=e;return(e,a)=>(n(),t(c(u),o({"data-slot":`collapsible-trigger`},r),{default:s(()=>[i(e.$slots,`default`)]),_:3},16))}});export{d as t};