llm-simple-router 0.9.20 → 0.9.22
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/setup.js +2 -1
- package/dist/middleware/admin-auth.js +2 -1
- package/dist/proxy/orchestration/orchestrator.js +10 -2
- package/dist/utils/cookie-secure.d.ts +3 -0
- package/dist/utils/cookie-secure.js +8 -0
- package/frontend-dist/assets/CardContent-DmBQARma.js +1 -0
- package/frontend-dist/assets/CardTitle-DgwtSVqy.js +1 -0
- package/frontend-dist/assets/Checkbox-DgWzyASL.js +1 -0
- package/frontend-dist/assets/CollapsibleContent-BjJrE5cf.js +1 -0
- package/frontend-dist/assets/CollapsibleTrigger-C73cozLg.js +1 -0
- package/frontend-dist/assets/{Dashboard-niqNN72b.js → Dashboard-D47Lzd5i.js} +2 -2
- package/frontend-dist/assets/{Input--tQLJqtT.js → Input-glS226Q6.js} +1 -1
- package/frontend-dist/assets/Label-B2lstY9k.js +1 -0
- package/frontend-dist/assets/Login-B5v_CIaw.js +1 -0
- package/frontend-dist/assets/Logs-CC6e8ty3.js +1 -0
- package/frontend-dist/assets/MappingEntryEditor-auxWvl8S.js +1 -0
- package/frontend-dist/assets/{ModelCard-BzFBBbml.js → ModelCard-DixuS062.js} +1 -1
- package/frontend-dist/assets/ModelMappings-DtmMS2o6.js +1 -0
- package/frontend-dist/assets/Monitor-F6DD03LF.js +1 -0
- package/frontend-dist/assets/Providers-DZkl5ryZ.js +1 -0
- package/frontend-dist/assets/ProxyEnhancement-C1uXuPZm.js +1 -0
- package/frontend-dist/assets/QuickSetup-BEeZJQ3g.js +1 -0
- package/frontend-dist/assets/RetryRules-plJdXlmH.js +1 -0
- package/frontend-dist/assets/RouterKeys-CLh6XISQ.js +1 -0
- package/frontend-dist/assets/{RovingFocusItem-CP9lqnFp.js → RovingFocusItem-BnqO1JTY.js} +1 -1
- package/frontend-dist/assets/Schedules-btnuRbYc.js +1 -0
- package/frontend-dist/assets/Settings-CbQaUkQ5.js +6 -0
- package/frontend-dist/assets/Setup-8yOUQ97d.js +1 -0
- package/frontend-dist/assets/Switch-BwPbL6O4.js +1 -0
- package/frontend-dist/assets/TooltipTrigger-D4gYyjGF.js +1 -0
- package/frontend-dist/assets/TransformRulesForm-C6PBk8zI.js +1 -0
- package/frontend-dist/assets/UnifiedRequestDialog-rmWxp09D.js +3 -0
- package/frontend-dist/assets/VisuallyHiddenInput-BPy71v35.js +1 -0
- package/frontend-dist/assets/{button-CDY3J7p5.js → button-DRFSckEU.js} +2 -2
- package/frontend-dist/assets/{copy-DyhMBltz.js → copy-BsWNnxok.js} +1 -1
- package/frontend-dist/assets/dialog-DxoN_Irc.js +1 -0
- package/frontend-dist/assets/index-Dr-BkaVu.js +3 -0
- package/frontend-dist/assets/{trash-2-BvFFjoxL.js → trash-2-DZ6KuutY.js} +1 -1
- package/frontend-dist/assets/{useClipboard-BJeJ8Sah.js → useClipboard-B0s-K67s.js} +1 -1
- package/frontend-dist/assets/{useLogRetention-BIEahe9Z.js → useLogRetention-BS-AFvlE.js} +1 -1
- package/frontend-dist/index.html +2 -2
- package/package.json +1 -1
- package/frontend-dist/assets/CardContent-uWoTAlVi.js +0 -1
- package/frontend-dist/assets/CardTitle-Cr8POTL5.js +0 -1
- package/frontend-dist/assets/Checkbox-D2Z17AP8.js +0 -1
- package/frontend-dist/assets/CollapsibleContent-BqCmqNIs.js +0 -1
- package/frontend-dist/assets/CollapsibleTrigger-B--uk4iR.js +0 -1
- package/frontend-dist/assets/Label-C4V5wJj3.js +0 -1
- package/frontend-dist/assets/Login-EWJo401l.js +0 -1
- package/frontend-dist/assets/Logs-Pvhkbrof.js +0 -1
- package/frontend-dist/assets/MappingEntryEditor-Ch7ahw0-.js +0 -1
- package/frontend-dist/assets/ModelMappings-DeNasUhB.js +0 -1
- package/frontend-dist/assets/Monitor-C5FdCHhI.js +0 -1
- package/frontend-dist/assets/Providers-TZCIlKs9.js +0 -1
- package/frontend-dist/assets/ProxyEnhancement-D-pHVAHL.js +0 -1
- package/frontend-dist/assets/QuickSetup-CdKq6YXW.js +0 -1
- package/frontend-dist/assets/RetryRules-Dm0WmD9Z.js +0 -1
- package/frontend-dist/assets/RouterKeys-CVFtDedl.js +0 -1
- package/frontend-dist/assets/Schedules-BB2cufFc.js +0 -1
- package/frontend-dist/assets/Settings-Dc8uJ5Il.js +0 -6
- package/frontend-dist/assets/Setup-15RN4xTV.js +0 -1
- package/frontend-dist/assets/Switch-GUFZnjj9.js +0 -1
- package/frontend-dist/assets/TooltipTrigger-DhZJrVvO.js +0 -1
- package/frontend-dist/assets/TransformRulesForm-D0BEkLYX.js +0 -1
- package/frontend-dist/assets/UnifiedRequestDialog-txL71pYo.js +0 -3
- package/frontend-dist/assets/VisuallyHiddenInput-Itdmiinr.js +0 -1
- package/frontend-dist/assets/dialog-B3bc_Iev.js +0 -1
- package/frontend-dist/assets/index-BZ7-9gPE.js +0 -3
package/dist/admin/setup.js
CHANGED
|
@@ -2,6 +2,7 @@ import { randomBytes } from "node:crypto";
|
|
|
2
2
|
import jwt from "jsonwebtoken";
|
|
3
3
|
import { getSetting, setSetting, isInitialized } from "../db/settings.js";
|
|
4
4
|
import { hashPassword } from "../utils/password.js";
|
|
5
|
+
import { isForwardedProtoHttps } from "../utils/cookie-secure.js";
|
|
5
6
|
import { HTTP_BAD_REQUEST, HTTP_CONFLICT } from "./constants.js";
|
|
6
7
|
import { API_CODE, apiError } from "./api-response.js";
|
|
7
8
|
const CRYPTO_BYTES_LENGTH = 32;
|
|
@@ -38,7 +39,7 @@ export const adminSetupRoutes = (app, options, done) => {
|
|
|
38
39
|
reply.setCookie("admin_token", token, {
|
|
39
40
|
path: "/admin",
|
|
40
41
|
httpOnly: true,
|
|
41
|
-
secure:
|
|
42
|
+
secure: request.protocol === "https" || isForwardedProtoHttps(request),
|
|
42
43
|
sameSite: "lax",
|
|
43
44
|
maxAge: TOKEN_EXPIRY_SECONDS,
|
|
44
45
|
});
|
|
@@ -3,6 +3,7 @@ import cookie from "@fastify/cookie";
|
|
|
3
3
|
import jwt from "jsonwebtoken";
|
|
4
4
|
import { isInitialized, getSetting } from "../db/settings.js";
|
|
5
5
|
import { verifyPassword } from "../utils/password.js";
|
|
6
|
+
import { isForwardedProtoHttps } from "../utils/cookie-secure.js";
|
|
6
7
|
import { API_CODE, apiError } from "../admin/api-response.js";
|
|
7
8
|
const HTTP_UNAUTHORIZED = 401;
|
|
8
9
|
const adminAuthRaw = (app, options, done) => {
|
|
@@ -61,7 +62,7 @@ export const adminLoginRoutes = (app, options, done) => {
|
|
|
61
62
|
reply.setCookie("admin_token", token, {
|
|
62
63
|
path: "/admin",
|
|
63
64
|
httpOnly: true,
|
|
64
|
-
secure:
|
|
65
|
+
secure: request.protocol === "https" || isForwardedProtoHttps(request),
|
|
65
66
|
sameSite: "lax",
|
|
66
67
|
maxAge: TOKEN_EXPIRY_SECONDS,
|
|
67
68
|
});
|
|
@@ -2,6 +2,7 @@ import { ProviderSwitchNeeded } from "../types.js";
|
|
|
2
2
|
import { ResilienceLayer as ResilienceLayerClass } from "./resilience.js";
|
|
3
3
|
import { SemaphoreScope as SemaphoreScopeClass } from "./scope.js";
|
|
4
4
|
import { TrackerScope as TrackerScopeClass } from "./scope.js";
|
|
5
|
+
import { SemaphoreTimeoutError, SemaphoreQueueFullError } from "@llm-router/core";
|
|
5
6
|
const DEFAULT_BASE_DELAY_MS = 1000;
|
|
6
7
|
const DEFAULT_FAILOVER_THRESHOLD = 400;
|
|
7
8
|
/**
|
|
@@ -40,7 +41,10 @@ export class ProxyOrchestrator {
|
|
|
40
41
|
providerId: a.target.provider_id,
|
|
41
42
|
})));
|
|
42
43
|
const { status, statusCode } = this.extractTrackStatus(result);
|
|
43
|
-
|
|
44
|
+
// 如果有重试尝试(非 throw 类型),说明 resilience 层的重试规则匹配了,
|
|
45
|
+
// 意味着这是一个"有意义的失败"——即使上游返回 200 body error 也应该计入退避
|
|
46
|
+
const retryRuleMatched = status === "failed" && result.attempts.length > 1;
|
|
47
|
+
this.deps.adaptiveController?.onRequestComplete(providerId, { success: status === "completed", statusCode, retryRuleMatched, requestId: config.trackerId });
|
|
44
48
|
this.sendResponse(reply, result.result, ctx);
|
|
45
49
|
return result;
|
|
46
50
|
}
|
|
@@ -48,7 +52,11 @@ export class ProxyOrchestrator {
|
|
|
48
52
|
if (e instanceof ProviderSwitchNeeded) {
|
|
49
53
|
const lastResult = e.lastResult;
|
|
50
54
|
const statusCode = lastResult && "statusCode" in lastResult ? lastResult.statusCode : undefined;
|
|
51
|
-
this.deps.adaptiveController?.onRequestComplete(providerId, { success: false, statusCode });
|
|
55
|
+
this.deps.adaptiveController?.onRequestComplete(providerId, { success: false, statusCode, retryRuleMatched: true, requestId: config.trackerId });
|
|
56
|
+
}
|
|
57
|
+
else if (e instanceof SemaphoreTimeoutError || e instanceof SemaphoreQueueFullError) {
|
|
58
|
+
// 信号量超时或队列满:说明并发压力大,上报给自适应控制器
|
|
59
|
+
this.deps.adaptiveController?.onRequestComplete(providerId, { success: false, requestId: config.trackerId });
|
|
52
60
|
}
|
|
53
61
|
throw e;
|
|
54
62
|
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/** 判断请求是否经过 HTTPS(直连或反向代理) */
|
|
2
|
+
export function isForwardedProtoHttps(request) {
|
|
3
|
+
if (request.protocol === "https")
|
|
4
|
+
return true;
|
|
5
|
+
const forwarded = request.headers["x-forwarded-proto"];
|
|
6
|
+
const value = Array.isArray(forwarded) ? forwarded[0] : forwarded;
|
|
7
|
+
return value === "https";
|
|
8
|
+
}
|
|
@@ -0,0 +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-DRFSckEU.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};
|
|
@@ -0,0 +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-DRFSckEU.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};
|
|
@@ -0,0 +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-DRFSckEU.js";import{t as b}from"./VisuallyHiddenInput-BPy71v35.js";import{t as x}from"./RovingFocusItem-BnqO1JTY.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-Dr-BkaVu.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};
|
|
@@ -0,0 +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-DRFSckEU.js";import{B as x,L as S,q as C,z as w}from"./index-Dr-BkaVu.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};
|
|
@@ -0,0 +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-DRFSckEU.js";import{r as l}from"./CollapsibleContent-BjJrE5cf.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};
|