llm-simple-router 0.11.4 → 0.11.5
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/dist/admin/retry-rules.js +79 -5
- package/frontend-dist/assets/{CardContent-B88j9H0z.js → CardContent-BpezvZs3.js} +1 -1
- package/frontend-dist/assets/{CardTitle-B8a97nPD.js → CardTitle-DGE-0Oy-.js} +1 -1
- package/frontend-dist/assets/{CascadingModelSelect-C0yNZoXy.js → CascadingModelSelect-Cm8SOfvy.js} +1 -1
- package/frontend-dist/assets/{Checkbox-BqTMZz2v.js → Checkbox-WeiIpTOy.js} +1 -1
- package/frontend-dist/assets/{CollapsibleContent-96COn5t_.js → CollapsibleContent-CmDbVrkh.js} +1 -1
- package/frontend-dist/assets/{CollapsibleTrigger-BhoqUmdk.js → CollapsibleTrigger-BXzK-Ixj.js} +1 -1
- package/frontend-dist/assets/{Dashboard-DS1huRbF.js → Dashboard-BR2CJ3cj.js} +1 -1
- package/frontend-dist/assets/{Input-Bu0i-HPR.js → Input-oTBwkQba.js} +1 -1
- package/frontend-dist/assets/{Label-67a8eQwX.js → Label-Bd9CgUhC.js} +1 -1
- package/frontend-dist/assets/{Login-DuJrav5s.js → Login-DUFnfFIU.js} +1 -1
- package/frontend-dist/assets/{Logs-Di2rtHWg.js → Logs-rClEHKtY.js} +1 -1
- package/frontend-dist/assets/{MappingEntryEditor-C_wjxov1.js → MappingEntryEditor-BbhYb7UZ.js} +1 -1
- package/frontend-dist/assets/{ModelMappings-CJKFlKoo.js → ModelMappings-CHfRgKOc.js} +1 -1
- package/frontend-dist/assets/{Monitor-C_KYa39G.js → Monitor-BxX3NJ6B.js} +1 -1
- package/frontend-dist/assets/{Providers-OSQlM_k9.js → Providers-DtpzIBBK.js} +1 -1
- package/frontend-dist/assets/{ProxyEnhancement-Cj7_GBQe.js → ProxyEnhancement-CwXkuoUt.js} +1 -1
- package/frontend-dist/assets/{QuickSetup-_dHnO9A_.js → QuickSetup-CyVSAFVv.js} +1 -1
- package/frontend-dist/assets/{RetryRules-D1wNRCPz.js → RetryRules-DumH9Gsl.js} +1 -1
- package/frontend-dist/assets/{RouterKeys-CZ2Vw6vB.js → RouterKeys-WQw9THbd.js} +1 -1
- package/frontend-dist/assets/{RovingFocusItem-tLhdCrJ2.js → RovingFocusItem-BRjpvwsE.js} +1 -1
- package/frontend-dist/assets/{Schedules-BBBE5rzH.js → Schedules-C7Kuve1s.js} +1 -1
- package/frontend-dist/assets/{Settings-CNEWKmas.js → Settings-D4Ybryvp.js} +1 -1
- package/frontend-dist/assets/{Setup-BJy7Hluo.js → Setup-jcy-ADqe.js} +1 -1
- package/frontend-dist/assets/{Switch-B2K6kTfF.js → Switch-Djefuot9.js} +1 -1
- package/frontend-dist/assets/{TooltipTrigger-qc84ev_b.js → TooltipTrigger-90_Rc8W6.js} +1 -1
- package/frontend-dist/assets/{TransformRulesForm-DdSMMv3Z.js → TransformRulesForm-Ds37qMrv.js} +1 -1
- package/frontend-dist/assets/{UnifiedRequestDialog-BtsWE0wO.js → UnifiedRequestDialog-cXmSFFit.js} +1 -1
- package/frontend-dist/assets/{VisuallyHiddenInput-C6J7cjvG.js → VisuallyHiddenInput-CRvhHFE3.js} +1 -1
- package/frontend-dist/assets/{button-CSFUPP0s.js → button-0YdRDsHo.js} +2 -2
- package/frontend-dist/assets/{copy-C9YdGmGg.js → copy-Kb93f3pX.js} +1 -1
- package/frontend-dist/assets/{dialog-Dvd1Jkzx.js → dialog-CJYBiMC2.js} +1 -1
- package/frontend-dist/assets/{index-BXsU7o6J.js → index-Cpt-6ePL.js} +2 -2
- package/frontend-dist/assets/{model-patches-C_Vq5bRS.js → model-patches-D5JUBh-5.js} +1 -1
- package/frontend-dist/assets/{sparkles-C6fYCgIz.js → sparkles-BUhc67Q2.js} +1 -1
- package/frontend-dist/assets/{trash-2-2cawWyKR.js → trash-2-EvdcnMxN.js} +1 -1
- package/frontend-dist/assets/{useClipboard-Bk__77zn.js → useClipboard-C7DExKK3.js} +1 -1
- package/frontend-dist/assets/{useLogRetention-BhmlsZRl.js → useLogRetention-DdntmZh0.js} +1 -1
- package/frontend-dist/index.html +2 -2
- package/package.json +2 -2
|
@@ -1,6 +1,3 @@
|
|
|
1
|
-
import { readFileSync } from "node:fs";
|
|
2
|
-
import { join, dirname } from "node:path";
|
|
3
|
-
import { fileURLToPath } from "node:url";
|
|
4
1
|
import { Type } from "@sinclair/typebox";
|
|
5
2
|
import { getAllRetryRules, getRetryRuleById, createRetryRule, updateRetryRule, deleteRetryRule, } from "../db/index.js";
|
|
6
3
|
import { callLLM } from "../utils/llm-client.js";
|
|
@@ -11,8 +8,85 @@ import { getSetting } from "../db/settings.js";
|
|
|
11
8
|
import { decrypt } from "../utils/crypto.js";
|
|
12
9
|
import { HTTP_OK, HTTP_BAD_REQUEST, HTTP_CREATED, HTTP_NOT_FOUND } from "./constants.js";
|
|
13
10
|
import { API_CODE, apiError } from "./api-response.js";
|
|
14
|
-
//
|
|
15
|
-
const AI_RETRY_PROMPT_TEMPLATE =
|
|
11
|
+
// AI 重试规则的 system prompt 模板(内联避免运行时文件依赖)
|
|
12
|
+
const AI_RETRY_PROMPT_TEMPLATE = `You are an API retry rule expert. Your ONLY job is to analyze the error response and output a JSON retry rule.
|
|
13
|
+
|
|
14
|
+
## STEP 1: Check if the response contains an error
|
|
15
|
+
If the response is successful (no error content), output this JSON:
|
|
16
|
+
{"error":"Unable to generate rule: normal response"}
|
|
17
|
+
|
|
18
|
+
## STEP 2: Extract the error identifier from Response Body
|
|
19
|
+
Look at the Response Body JSON. Find the specific error identifier:
|
|
20
|
+
- If JSON has \`{"error":{"code":"..."}}\` → the identifier is the value of \`error.code\`
|
|
21
|
+
- If JSON has \`{"error":{"type":"..."}}\` → the identifier is the value of \`error.type\`
|
|
22
|
+
- If JSON has \`{"error":{"message":"..."}}\` → extract a short distinctive keyword from the message
|
|
23
|
+
- If none of these, look for any structured error field
|
|
24
|
+
|
|
25
|
+
## STEP 3: Build body_pattern
|
|
26
|
+
\`body_pattern\` is a regex that matches the JSON structure of this error.
|
|
27
|
+
|
|
28
|
+
Rules:
|
|
29
|
+
- MUST be a regex against JSON text, NOT plain text
|
|
30
|
+
- MUST include the JSON key path to anchor the match (e.g. \`"error".*"code"\`)
|
|
31
|
+
- MUST match the actual keys in the response. If response has \`"code"\`, use \`"code"\`. If response has \`"type"\`, use \`"type"\`. Do NOT guess keys that don't exist in the response.
|
|
32
|
+
- Use \`\\s*:\\s*\` between key and value (allows optional spaces around colon)
|
|
33
|
+
- Do NOT use \`.*\` to match everything — be specific
|
|
34
|
+
|
|
35
|
+
Correct examples (what you output in body_pattern):
|
|
36
|
+
- Response \`{"error":{"code":"1305"}}\` → \`"error".*"code"\\s*:\\s*"1305"\`
|
|
37
|
+
- Response \`{"error":{"code":"rate_limit_error"}}\` → \`"error".*"code"\\s*:\\s*"rate_limit_error"\`
|
|
38
|
+
- Response \`{"error":{"message":"请稍后重试"}}\` → \`"error".*"请稍后重试"\`
|
|
39
|
+
|
|
40
|
+
Wrong examples (DO NOT do this):
|
|
41
|
+
- \`rate_limit_error\` (missing JSON key context — matches anywhere in body)
|
|
42
|
+
- \`"type".*"rate_limit"\` (response has \`"code"\` not \`"type"\` — wrong key)
|
|
43
|
+
|
|
44
|
+
## STEP 4: Determine retry parameters
|
|
45
|
+
ALWAYS use these values, never change them:
|
|
46
|
+
- retry_strategy: "exponential"
|
|
47
|
+
- retry_delay_ms: 5000
|
|
48
|
+
- max_retries: 10
|
|
49
|
+
- max_delay_ms: 60000
|
|
50
|
+
|
|
51
|
+
## STEP 5: Build the name field
|
|
52
|
+
\`name\` is the display name shown in the UI rules list. Follow these rules EXACTLY:
|
|
53
|
+
|
|
54
|
+
1. **Provider**: Use the Provider value from the user prompt (e.g. "ZAI", "OpenCode", "DeepSeek"). This is a human-readable name. NEVER use a UUID or provider_id like "f822eb4a".
|
|
55
|
+
2. **Description**: A SHORT Chinese phrase describing the error type:
|
|
56
|
+
- 速率限制 (rate limit)
|
|
57
|
+
- 认证错误 (authentication error)
|
|
58
|
+
- 模型过载 (model overloaded)
|
|
59
|
+
- 临时不可用 (temporarily unavailable)
|
|
60
|
+
- 网络错误 (network error)
|
|
61
|
+
- SSE错误 (SSE streaming error)
|
|
62
|
+
- 操作失败 (operation failed)
|
|
63
|
+
3. **HTTP info**: Always include HTTP status code in parentheses. If you found a specific error code/type in Step 2, include it after the status code.
|
|
64
|
+
4. **Model name**: Do NOT include model name by default. Only include it if the Response Body text explicitly mentions a specific model causing the error (e.g. "model deepseek-chat is overloaded"). Rate limits, auth errors, generic server errors — these are provider-level, do NOT include model name.
|
|
65
|
+
|
|
66
|
+
Format:
|
|
67
|
+
- Without error code: \`{Provider} {描述} (HTTP {status})\`
|
|
68
|
+
- With error code: \`{Provider} {描述} (HTTP {status}, code {error_code})\`
|
|
69
|
+
- With model (only if response mentions model): \`{Provider} {model} {描述} (HTTP {status}, code {error_code})\`
|
|
70
|
+
|
|
71
|
+
Reference names from production rules:
|
|
72
|
+
- \`ZAI 速率限制 (HTTP 200, code 1302)\`
|
|
73
|
+
- \`ZAI 临时不可用 (HTTP 200)\`
|
|
74
|
+
- \`ZAI 模型过载 (HTTP 429, code 1305)\`
|
|
75
|
+
- \`KIMI 401 认证错误\`
|
|
76
|
+
- \`OpenCode DeepSeek 速率限制 (HTTP 429, type rate_limit_error)\`
|
|
77
|
+
|
|
78
|
+
## STEP 6: Build the summary field
|
|
79
|
+
\`summary\` is a one-line Chinese description. Same content as \`name\` but use Chinese full-width parentheses:
|
|
80
|
+
- Without error code: \`{Provider} {描述}(HTTP {status})\`
|
|
81
|
+
- With error code: \`{Provider} {描述}(HTTP {status},code {error_code})\`
|
|
82
|
+
|
|
83
|
+
## STEP 7: Check for duplicates
|
|
84
|
+
Compare against the Existing Rules list. If a rule already covers this exact \`status_code\` + \`body_pattern\` combination, output:
|
|
85
|
+
{"error":"Duplicate rule: similar to [existing rule name]"}
|
|
86
|
+
|
|
87
|
+
## STEP 8: Output the final JSON
|
|
88
|
+
Output ONLY this JSON object, no other text:
|
|
89
|
+
{"summary":"...","name":"...","status_code":200,"body_pattern":"...","retry_strategy":"exponential","retry_delay_ms":5000,"max_retries":10,"max_delay_ms":60000}`;
|
|
16
90
|
const DEFAULT_RETRY_DELAY_MS = 5000;
|
|
17
91
|
const DEFAULT_MAX_RETRIES = 10;
|
|
18
92
|
const DEFAULT_MAX_DELAY_MS = 60000;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{$ as e,Kt as t,Wt as n,ht as r,r as i,rt as a,vt as o}from"./button-
|
|
1
|
+
import{$ as e,Kt as t,Wt as n,ht as r,r as i,rt as a,vt as o}from"./button-0YdRDsHo.js";var s=[`data-size`],c=a({__name:`Card`,props:{class:{type:[Boolean,null,String,Object,Array]},size:{default:`default`}},setup(a){let c=a;return(l,u)=>(r(),e(`div`,{"data-slot":`card`,"data-size":a.size,class:t(n(i)(`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))},[o(l.$slots,`default`)],10,s))}}),l=a({__name:`CardContent`,props:{class:{type:[Boolean,null,String,Object,Array]}},setup(a){let s=a;return(a,c)=>(r(),e(`div`,{"data-slot":`card-content`,class:t(n(i)(`px-4 group-data-[size=sm]/card:px-3`,s.class))},[o(a.$slots,`default`)],2))}});export{c as n,l as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{$ as e,Kt as t,Wt as n,ht as r,r as i,rt as a,vt as o}from"./button-
|
|
1
|
+
import{$ as e,Kt as t,Wt as n,ht as r,r as i,rt as a,vt as o}from"./button-0YdRDsHo.js";var s=a({__name:`CardHeader`,props:{class:{type:[Boolean,null,String,Object,Array]}},setup(a){let s=a;return(a,c)=>(r(),e(`div`,{"data-slot":`card-header`,class:t(n(i)(`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))},[o(a.$slots,`default`)],2))}}),c=a({__name:`CardTitle`,props:{class:{type:[Boolean,null,String,Object,Array]}},setup(a){let s=a;return(a,c)=>(r(),e(`div`,{"data-slot":`card-title`,class:t(n(i)(`text-base leading-snug font-medium group-data-[size=sm]/card:text-sm cn-font-heading`,s.class))},[o(a.$slots,`default`)],2))}});export{s as n,c as t};
|
package/frontend-dist/assets/{CascadingModelSelect-C0yNZoXy.js → CascadingModelSelect-Cm8SOfvy.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{$ as e,I as t,It as n,Kt as r,Ot as i,Q as a,V as o,Wt as s,X as c,Y as l,Yt as u,Z as d,_t as f,ht as p,nt as m,q as h,rt as g}from"./button-
|
|
1
|
+
import{$ as e,I as t,It as n,Kt as r,Ot as i,Q as a,V as o,Wt as s,X as c,Y as l,Yt as u,Z as d,_t as f,ht as p,nt as m,q as h,rt as g}from"./button-0YdRDsHo.js";import{b as _,ft as v,ht as y,v as b,y as x}from"./index-Cpt-6ePL.js";var S=t(`chevron-right`,[[`path`,{d:`m9 18 6-6-6-6`,key:`mthhwq`}]]),C=t(`plus`,[[`path`,{d:`M5 12h14`,key:`1ays0h`}],[`path`,{d:`M12 5v14`,key:`s699le`}]]),w=[`onMouseenter`],T={class:`truncate max-w-40`},E={key:0,class:`ml-1 text-[10px] px-1 py-px rounded bg-emerald-500/15 text-emerald-400 shrink-0`},D=[`onMouseenter`],O=[`onClick`],k={class:`truncate`},A={key:0,class:`shrink-0 text-xs text-muted-foreground`},j={key:0,class:`px-2 py-1.5 text-sm text-muted-foreground`},M=g({__name:`CascadingSelect`,props:{groups:{},modelValue:{},placeholder:{default:``},compact:{type:Boolean,default:!1}},emits:[`update:modelValue`],setup(t,{emit:g}){let{t:y}=o(),C=t,M=l(()=>C.placeholder||y(`common.selectPlaceholder`)),N=g,P=n(!1),F=n(null),I=l(()=>{if(!C.modelValue)return``;let e=C.groups.find(e=>e.key===C.modelValue.groupKey);if(!e)return``;let t=e.options.find(e=>e.value===C.modelValue.value);return t?`${e.label} / ${t.label}`:``});function L(e,t){N(`update:modelValue`,{groupKey:e,value:t}),P.value=!1}function R(e){P.value=e,e||(F.value=null)}return(n,o)=>(p(),d(s(_),{open:P.value,"onUpdate:open":R},{default:i(()=>[m(s(b),{"as-child":``},{default:i(()=>[c(`div`,{class:r([`flex h-10 w-full items-center justify-between rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background cursor-pointer hover:bg-accent hover:text-accent-foreground`,[t.compact?`h-8 text-xs px-2.5 py-1`:`h-10 text-sm px-3 py-2`,{"ring-2 ring-ring ring-offset-2":P.value}]])},[c(`span`,{class:r([`truncate`,t.modelValue?`text-foreground`:`text-muted-foreground`])},u(I.value||M.value),3),m(s(v),{class:`h-4 w-4 shrink-0 opacity-50`})],2)]),_:1}),m(s(x),{align:`start`,"side-offset":4,class:`z-[200] w-auto min-w-56 overflow-visible p-1`},{default:i(()=>[(p(!0),e(h,null,f(t.groups,n=>(p(),e(`div`,{key:n.key,class:r([`relative flex cursor-pointer items-center justify-between rounded-sm px-2 py-1.5 text-sm hover:bg-accent hover:text-accent-foreground`,{"bg-accent text-accent-foreground z-10":F.value===n.key}]),onMouseenter:e=>F.value=n.key},[c(`span`,T,u(n.label),1),n.badge?(p(),e(`span`,E,u(n.badge),1)):a(``,!0),m(s(S),{class:`ml-1 h-4 w-4 shrink-0 opacity-50`}),F.value===n.key&&n.options.length>0?(p(),e(`div`,{key:1,class:`absolute left-full top-0 ml-0.5 min-w-48 rounded-md border bg-popover p-1 text-popover-foreground shadow-md`,onMouseenter:e=>F.value=n.key},[(p(!0),e(h,null,f(n.options,i=>(p(),e(`div`,{key:i.value,class:r([`flex cursor-pointer items-center justify-between gap-2 rounded-sm px-2 py-1.5 text-sm hover:bg-accent hover:text-accent-foreground`,{"bg-accent text-accent-foreground":t.modelValue?.groupKey===n.key&&t.modelValue?.value===i.value}]),onClick:e=>L(n.key,i.value)},[c(`span`,k,u(i.label),1),i.tag?(p(),e(`span`,A,u(i.tag),1)):a(``,!0)],10,O))),128))],40,D)):a(``,!0)],42,w))),128)),t.groups.length===0?(p(),e(`div`,j,u(s(y)(`common.noOptions`)),1)):a(``,!0)]),_:1})]),_:1},8,[`open`]))}}),N=g({__name:`CascadingModelSelect`,props:{providers:{},modelValue:{},placeholder:{default:``},compact:{type:Boolean}},emits:[`update:modelValue`],setup(e,{emit:t}){let{t:n}=o(),r=e,i=l(()=>r.placeholder||n(`mappings.selectProviderModel`)),a=t,s=l(()=>r.providers.map(e=>({key:e.provider.id,label:e.provider.name,badge:e.isNew?n(`common.new`):void 0,options:e.models.map(e=>({value:e.name,label:e.name,tag:y(e.contextWindow)}))}))),c=l(()=>r.modelValue?{groupKey:r.modelValue.provider_id,value:r.modelValue.model}:void 0);function u(e){a(`update:modelValue`,{provider_id:e.groupKey,model:e.value})}return(t,n)=>(p(),d(M,{groups:s.value,"model-value":c.value,placeholder:i.value,compact:e.compact,"onUpdate:modelValue":u},null,8,[`groups`,`model-value`,`placeholder`,`compact`]))}});export{C as n,N as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{G as e,K as t,Ot as n,Q as r,Wt as i,Y as a,Z as o,at as s,bt as c,ht as l,i as u,m as d,nt as f,o as p,qt as m,r as h,rt as g,ut as _,vt as v,x as y}from"./button-
|
|
1
|
+
import{G as e,K as t,Ot as n,Q as r,Wt as i,Y as a,Z as o,at as s,bt as c,ht as l,i as u,m as d,nt as f,o as p,qt as m,r as h,rt as g,ut as _,vt as v,x as y}from"./button-0YdRDsHo.js";import{t as b}from"./VisuallyHiddenInput-CRvhHFE3.js";import{t as x}from"./RovingFocusItem-BRjpvwsE.js";import{J as S,K as C,R as w,U as T,V as E,X as D,pt as O}from"./index-Cpt-6ePL.js";function k(e,t){return C(e)?!1:Array.isArray(e)?e.some(e=>D(e,t)):D(e,t)}var[A,j]=S(`CheckboxGroupRoot`);function M(e){return e===`indeterminate`}function N(e){return M(e)?`indeterminate`:e?`checked`:`unchecked`}var[P,F]=S(`CheckboxRoot`),I=g({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(s,{emit:f}){let m=s,h=f,{forwardRef:g,currentElement:y}=p(),S=A(null),w=d(m,`modelValue`,h,{defaultValue:m.defaultValue??m.falseValue,passive:m.modelValue===void 0}),E=a(()=>S?.disabled.value||m.disabled),O=a(()=>D(w.value,m.trueValue)),j=a(()=>C(S?.modelValue.value)?w.value===`indeterminate`?`indeterminate`:O.value:k(S.modelValue.value,m.value));function P(){if(C(S?.modelValue.value))w.value===`indeterminate`?w.value=m.trueValue:w.value=O.value?m.falseValue:m.trueValue;else{let e=[...S.modelValue.value||[]];if(k(e,m.value)){let t=e.findIndex(e=>D(e,m.value));e.splice(t,1)}else e.push(m.value);S.modelValue.value=e}}let I=T(y),L=a(()=>m.id&&y.value?document.querySelector(`[for="${m.id}"]`)?.innerText:void 0);return F({disabled:E,state:j}),(a,s)=>(l(),o(c(i(S)?.rovingFocus.value?i(x):i(u)),_(a.$attrs,{id:a.id,ref:i(g),role:`checkbox`,"as-child":a.asChild,as:a.as,type:a.as===`button`?`button`:void 0,"aria-checked":i(M)(j.value)?`mixed`:j.value,"aria-required":a.required,"aria-label":a.$attrs[`aria-label`]||L.value,"data-state":i(N)(j.value),"data-disabled":E.value?``:void 0,disabled:E.value,focusable:i(S)?.rovingFocus.value?!E.value:void 0,onKeydown:e(t(()=>{},[`prevent`]),[`enter`]),onClick:P}),{default:n(()=>[v(a.$slots,`default`,{modelValue:i(w),state:j.value}),i(I)&&a.name&&!i(S)?(l(),o(i(b),{key:0,type:`checkbox`,checked:!!j.value,name:a.name,value:a.value,disabled:E.value,required:a.required},null,8,[`checked`,`name`,`value`,`disabled`,`required`])):r(`v-if`,!0)]),_:3},16,[`id`,`as-child`,`as`,`type`,`aria-checked`,`aria-required`,`aria-label`,`data-state`,`data-disabled`,`disabled`,`focusable`,`onKeydown`]))}}),L=g({__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(),r=P();return(e,a)=>(l(),o(i(w),{present:e.forceMount||i(M)(i(r).state.value)||i(r).state.value===!0},{default:n(()=>[f(i(u),_({ref:i(t),"data-state":i(N)(i(r).state.value),"data-disabled":i(r).disabled.value?``:void 0,style:{pointerEvents:`none`},"as-child":e.asChild,as:e.as},e.$attrs),{default:n(()=>[v(e.$slots,`default`)]),_:3},16,[`data-state`,`data-disabled`,`as-child`,`as`])]),_:3},8,[`present`]))}}),R=g({__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 r=e,a=t,c=E(y(r,`class`),a);return(e,t)=>(l(),o(i(I),_({"data-slot":`checkbox`},i(c),{class:i(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`,r.class)}),{default:n(t=>[f(i(L),{"data-slot":`checkbox-indicator`,class:`[&>svg]:size-3.5 grid place-content-center text-current transition-none`},{default:n(()=>[v(e.$slots,`default`,m(s(t)),()=>[f(i(O))])]),_:2},1024)]),_:3},16,[`class`]))}});export{R as t};
|
package/frontend-dist/assets/{CollapsibleContent-96COn5t_.js → CollapsibleContent-CmDbVrkh.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{It as e,Ot as t,Q as n,Tt as r,Vt as i,Wt as a,Y as o,Z as s,at as c,d as l,dt as u,ht as d,i as f,m as p,nt as m,o as h,pt as g,qt as _,rt as v,ut as y,vt as b}from"./button-
|
|
1
|
+
import{It as e,Ot as t,Q as n,Tt as r,Vt as i,Wt as a,Y as o,Z as s,at as c,d as l,dt as u,ht as d,i as f,m as p,nt as m,o as h,pt as g,qt as _,rt as v,ut as y,vt as b}from"./button-0YdRDsHo.js";import{B as x,J as S,R as C,V as w}from"./index-Cpt-6ePL.js";var[T,E]=S(`CollapsibleRoot`),D=v({__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:n,emit:r}){let o=e,c=p(o,`open`,r,{defaultValue:o.defaultOpen,passive:o.open===void 0}),{disabled:l,unmountOnHide:u}=i(o);return E({contentId:``,disabled:l,open:c,unmountOnHide:u,onOpenToggle:()=>{l.value||(c.value=!c.value)}}),n({open:c}),h(),(e,n)=>(d(),s(a(f),{as:e.as,"as-child":o.asChild,"data-state":a(c)?`open`:`closed`,"data-disabled":a(l)?``:void 0},{default:t(()=>[b(e.$slots,`default`,{open:a(c)})]),_:3},8,[`as`,`as-child`,`data-state`,`data-disabled`]))}}),O=v({inheritAttrs:!1,__name:`CollapsibleContent`,props:{forceMount:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},emits:[`contentFound`],setup(i,{emit:c}){let p=i,_=c,v=T();v.contentId||=x(void 0,`reka-collapsible-content`);let S=e(),{forwardRef:w,currentElement:E}=h(),D=e(0),O=e(0),k=o(()=>v.open.value),A=e(k.value),j=e();r(()=>[k.value,S.value?.present],async()=>{await u();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=o(()=>A.value&&v.open.value);return g(()=>{requestAnimationFrame(()=>{A.value=!1})}),l(E,`beforematch`,e=>{requestAnimationFrame(()=>{v.onOpenToggle(),_(`contentFound`)})}),(e,r)=>(d(),s(a(C),{ref_key:`presentRef`,ref:S,present:e.forceMount||a(v).open.value,"force-mount":!0},{default:t(({present:r})=>[m(a(f),y(e.$attrs,{id:a(v).contentId,ref:a(w),"as-child":p.asChild,as:e.as,hidden:r?void 0:a(v).unmountOnHide.value?``:`until-found`,"data-state":M.value?void 0:a(v).open.value?`open`:`closed`,"data-disabled":a(v).disabled?.value?``:void 0,style:{"--reka-collapsible-content-height":`${O.value}px`,"--reka-collapsible-content-width":`${D.value}px`}}),{default:t(()=>[!a(v).unmountOnHide.value||r?b(e.$slots,`default`,{key:0}):n(`v-if`,!0)]),_:2},1040,[`id`,`as-child`,`as`,`hidden`,`data-state`,`data-disabled`,`style`])]),_:3},8,[`present`]))}}),k=v({__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:n}){let r=w(e,n);return(e,n)=>(d(),s(a(D),y({"data-slot":`collapsible`},a(r)),{default:t(t=>[b(e.$slots,`default`,_(c(t)))]),_:3},16))}}),A=v({__name:`CollapsibleContent`,props:{forceMount:{type:Boolean},asChild:{type:Boolean},as:{}},setup(e){let n=e;return(e,r)=>(d(),s(a(O),y({"data-slot":`collapsible-content`},n),{default:t(()=>[b(e.$slots,`default`)]),_:3},16))}});export{k as n,T as r,A as t};
|
package/frontend-dist/assets/{CollapsibleTrigger-BhoqUmdk.js → CollapsibleTrigger-BXzK-Ixj.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{Ot as e,Wt as t,Z as n,ht as r,i,o as a,rt as o,ut as s,vt as c}from"./button-
|
|
1
|
+
import{Ot as e,Wt as t,Z as n,ht as r,i,o as a,rt as o,ut as s,vt as c}from"./button-0YdRDsHo.js";import{r as l}from"./CollapsibleContent-CmDbVrkh.js";var u=o({__name:`CollapsibleTrigger`,props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:`button`}},setup(o){let s=o;a();let u=l();return(a,o)=>(r(),n(t(i),{type:a.as===`button`?`button`:void 0,as:a.as,"as-child":s.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(()=>[c(a.$slots,`default`)]),_:3},8,[`type`,`as`,`as-child`,`aria-controls`,`aria-expanded`,`data-state`,`data-disabled`,`disabled`,`onClick`]))}}),d=o({__name:`CollapsibleTrigger`,props:{asChild:{type:Boolean},as:{}},setup(i){let a=i;return(i,o)=>(r(),n(t(u),s({"data-slot":`collapsible-trigger`},a),{default:e(()=>[c(i.$slots,`default`)]),_:3},16))}});export{d as t};
|