\ No newline at end of file
+404: This page could not be found.Routstr
404
This page could not be found.
\ No newline at end of file
diff --git a/ui_out/404/index.html b/ui_out/404/index.html
index 280148a4..b8438748 100644
--- a/ui_out/404/index.html
+++ b/ui_out/404/index.html
@@ -1 +1 @@
-404: This page could not be found.Routstr
404
This page could not be found.
\ No newline at end of file
+404: This page could not be found.Routstr
404
This page could not be found.
\ No newline at end of file
diff --git a/ui_out/_next/static/vzojcgD75PgXdcu6NGfSb/_buildManifest.js b/ui_out/_next/static/MTOFXU9tRAr2QXrmYwVxq/_buildManifest.js
similarity index 100%
rename from ui_out/_next/static/vzojcgD75PgXdcu6NGfSb/_buildManifest.js
rename to ui_out/_next/static/MTOFXU9tRAr2QXrmYwVxq/_buildManifest.js
diff --git a/ui_out/_next/static/vzojcgD75PgXdcu6NGfSb/_ssgManifest.js b/ui_out/_next/static/MTOFXU9tRAr2QXrmYwVxq/_ssgManifest.js
similarity index 100%
rename from ui_out/_next/static/vzojcgD75PgXdcu6NGfSb/_ssgManifest.js
rename to ui_out/_next/static/MTOFXU9tRAr2QXrmYwVxq/_ssgManifest.js
diff --git a/ui_out/_next/static/chunks/255-a44a63a7b4273784.js b/ui_out/_next/static/chunks/255-a44a63a7b4273784.js
deleted file mode 100644
index 078be24e..00000000
--- a/ui_out/_next/static/chunks/255-a44a63a7b4273784.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[255],{2738:(e,t,r)=>{r.d(t,{BT:()=>d,Wu:()=>l,ZB:()=>s,Zp:()=>a,aR:()=>n,wL:()=>p});var i=r(3422);r(4398);var o=r(9183);function a(e){let{className:t,...r}=e;return(0,i.jsx)("div",{"data-slot":"card",className:(0,o.cn)("bg-card text-card-foreground flex flex-col gap-6 rounded-xl border py-6 shadow-sm",t),...r})}function n(e){let{className:t,...r}=e;return(0,i.jsx)("div",{"data-slot":"card-header",className:(0,o.cn)("@container/card-header grid auto-rows-min grid-rows-[auto_auto] items-start gap-1.5 px-6 has-data-[slot=card-action]:grid-cols-[1fr_auto] [.border-b]:pb-6",t),...r})}function s(e){let{className:t,...r}=e;return(0,i.jsx)("div",{"data-slot":"card-title",className:(0,o.cn)("leading-none font-semibold",t),...r})}function d(e){let{className:t,...r}=e;return(0,i.jsx)("div",{"data-slot":"card-description",className:(0,o.cn)("text-muted-foreground text-sm",t),...r})}function l(e){let{className:t,...r}=e;return(0,i.jsx)("div",{"data-slot":"card-content",className:(0,o.cn)("px-6",t),...r})}function p(e){let{className:t,...r}=e;return(0,i.jsx)("div",{"data-slot":"card-footer",className:(0,o.cn)("flex items-center px-6 [.border-t]:pt-6",t),...r})}},3130:(e,t,r)=>{r.d(t,{J:()=>n});var i=r(3422);r(4398);var o=r(2996),a=r(9183);function n(e){let{className:t,...r}=e;return(0,i.jsx)(o.b,{"data-slot":"label",className:(0,a.cn)("flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50",t),...r})}},6839:(e,t,r)=>{r.d(t,{Xi:()=>d,av:()=>l,j7:()=>s,tU:()=>n});var i=r(3422);r(4398);var o=r(1749),a=r(9183);function n(e){let{className:t,...r}=e;return(0,i.jsx)(o.bL,{"data-slot":"tabs",className:(0,a.cn)("flex flex-col gap-2",t),...r})}function s(e){let{className:t,...r}=e;return(0,i.jsx)(o.B8,{"data-slot":"tabs-list",className:(0,a.cn)("bg-muted text-muted-foreground inline-flex h-9 w-fit items-center justify-center rounded-lg p-[3px]",t),...r})}function d(e){let{className:t,...r}=e;return(0,i.jsx)(o.l9,{"data-slot":"tabs-trigger",className:(0,a.cn)("data-[state=active]:bg-background dark:data-[state=active]:text-foreground focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:outline-ring dark:data-[state=active]:border-input dark:data-[state=active]:bg-input/30 text-foreground dark:text-muted-foreground inline-flex h-[calc(100%-1px)] flex-1 items-center justify-center gap-1.5 rounded-md border border-transparent px-2 py-1 text-sm font-medium whitespace-nowrap transition-[color,box-shadow] focus-visible:ring-[3px] focus-visible:outline-1 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:shadow-sm [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",t),...r})}function l(e){let{className:t,...r}=e;return(0,i.jsx)(o.UC,{"data-slot":"tabs-content",className:(0,a.cn)("flex-1 outline-none",t),...r})}},8561:(e,t,r)=>{r.d(t,{E:()=>s});var i=r(3422);r(4398);var o=r(4676),a=r(9183);let n=(0,o.F)("inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2",{variants:{variant:{default:"border-transparent bg-primary text-primary-foreground hover:bg-primary/80",secondary:"border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80",destructive:"border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80",outline:"text-foreground",success:"border-transparent bg-green-500 text-white hover:bg-green-500/80",warning:"border-transparent bg-yellow-500 text-white hover:bg-yellow-500/80",error:"border-transparent bg-red-500 text-white hover:bg-red-500/80"}},defaultVariants:{variant:"default"}});function s(e){let{className:t,variant:r,...o}=e;return(0,i.jsx)("div",{className:(0,a.cn)(n({variant:r}),t),...o})}},9119:(e,t,r)=>{r.d(t,{zQ:()=>d});var i=r(7916),o=r(9945);o.Ik({id:o.ai(),provider_type:o.Yj(),base_url:o.Yj(),api_key:o.Yj().optional(),api_version:o.Yj().nullable().optional(),enabled:o.zM(),provider_fee:o.ai().optional()}),o.Ik({provider_type:o.Yj(),base_url:o.Yj(),api_key:o.Yj(),api_version:o.Yj().nullable().optional(),enabled:o.zM().default(!0),provider_fee:o.ai().optional()}),o.Ik({provider_type:o.Yj().optional(),base_url:o.Yj().optional(),api_key:o.Yj().optional(),api_version:o.Yj().nullable().optional(),enabled:o.zM().optional(),provider_fee:o.ai().optional()});let a=o.Ik({prompt:o.ai().optional(),completion:o.ai().optional(),request:o.ai().optional(),image:o.ai().optional(),web_search:o.ai().optional(),internal_reasoning:o.ai().optional()}),n=o.Ik({modality:o.Yj().optional(),input_modalities:o.YO(o.Yj()).optional(),output_modalities:o.YO(o.Yj()).optional(),tokenizer:o.Yj().optional(),instruct_type:o.Yj().nullable().optional()}),s=o.Ik({id:o.Yj(),name:o.Yj(),description:o.Yj(),created:o.ai(),context_length:o.ai(),architecture:n.or(o.g1(o.bz())),pricing:a.or(o.g1(o.bz())),per_request_limits:o.g1(o.bz()).nullable().optional(),top_provider:o.g1(o.bz()).nullable().optional(),upstream_provider_id:o.ai().nullable().optional(),enabled:o.zM().default(!0)});o.Ik({provider:o.Ik({id:o.ai(),provider_type:o.Yj(),base_url:o.Yj()}),db_models:o.YO(s),remote_models:o.YO(s)});class d{static convertPricingToPerMillionTokens(e){if(!e)return e;let t={...e};return"number"==typeof t.prompt&&(t.prompt=1e6*t.prompt),"number"==typeof t.completion&&(t.completion=1e6*t.completion),"number"==typeof t.request&&(t.request=1e6*t.request),"number"==typeof t.image&&(t.image=1e6*t.image),t}static convertPricingToPerToken(e){if(!e)return e;let t={...e};return"number"==typeof t.prompt&&(t.prompt=t.prompt/1e6),"number"==typeof t.completion&&(t.completion=t.completion/1e6),"number"==typeof t.request&&(t.request=t.request/1e6),"number"==typeof t.image&&(t.image=t.image/1e6),t}static transformAdminModelToModel(e,t){var r,i;let o=this.convertPricingToPerMillionTokens(e.pricing),a=(null==o?void 0:o.prompt)||0,n=(null==o?void 0:o.completion)||0,s=(null==o?void 0:o.request)||0;return{id:e.id,name:e.name,full_name:e.name,description:e.description,modelType:(null==(r=e.architecture)?void 0:r.modality)||"text",isEnabled:e.enabled,createdAt:new Date(1e3*e.created).toISOString(),updatedAt:new Date(1e3*e.created).toISOString(),provider:t||"Unknown",url:"",api_key:void 0,input_cost:a,output_cost:n,min_cost_per_request:s,min_cash_per_request:0,contextLength:e.context_length,apiKeyRequired:!0,provider_id:null==(i=e.upstream_provider_id)?void 0:i.toString(),is_free:0===a&&0===n,soft_deleted:!e.enabled,has_own_api_key:!1,api_key_type:"group"}}static transformModelToAdminModel(e){let t=this.convertPricingToPerToken({prompt:e.input_cost,completion:e.output_cost,request:e.min_cost_per_request,image:0,web_search:0,internal_reasoning:0});return{id:e.id,name:e.name,description:e.description||"",created:Math.floor(new Date(e.createdAt).getTime()/1e3),context_length:e.contextLength||0,architecture:{modality:e.modelType,input_modalities:[e.modelType],output_modalities:[e.modelType],tokenizer:"",instruct_type:null},pricing:t,per_request_limits:null,top_provider:null,upstream_provider_id:e.provider_id?parseInt(e.provider_id):null,enabled:e.isEnabled}}static async getUpstreamProviders(){return await i.apiClient.get("/admin/api/upstream-providers")}static async getUpstreamProvider(e){return await i.apiClient.get("/admin/api/upstream-providers/".concat(e))}static async createUpstreamProvider(e){return await i.apiClient.post("/admin/api/upstream-providers",e)}static async updateUpstreamProvider(e,t){return await i.apiClient.patch("/admin/api/upstream-providers/".concat(e),t)}static async deleteUpstreamProvider(e){return await i.apiClient.delete("/admin/api/upstream-providers/".concat(e))}static async getProviderModels(e){return await i.apiClient.get("/admin/api/upstream-providers/".concat(e,"/models"))}static async createProviderModel(e,t){let r={...t,pricing:this.convertPricingToPerToken(t.pricing)};console.log("Creating provider model - pricing conversion:",{original:t.pricing,converted:r.pricing});let o=await i.apiClient.post("/admin/api/upstream-providers/".concat(e,"/models"),r);return{...o,pricing:this.convertPricingToPerMillionTokens(o.pricing)}}static async getProviderModel(e,t){let r=await i.apiClient.get("/admin/api/upstream-providers/".concat(e,"/models/").concat(encodeURIComponent(t)));return{...r,pricing:this.convertPricingToPerMillionTokens(r.pricing)}}static async getModel(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,r=await i.apiClient.post("/admin/api/models/get",{model_id:e,provider_id:t});return{...r,pricing:this.convertPricingToPerMillionTokens(r.pricing)}}static async updateProviderModel(e,t,r){let o={...r,pricing:this.convertPricingToPerToken(r.pricing)};console.log("Updating provider model - pricing conversion:",{original:r.pricing,converted:o.pricing});let a=await i.apiClient.patch("/admin/api/upstream-providers/".concat(e,"/models/").concat(encodeURIComponent(t)),o);return{...a,pricing:this.convertPricingToPerMillionTokens(a.pricing)}}static async deleteProviderModel(e,t){return await i.apiClient.delete("/admin/api/upstream-providers/".concat(e,"/models/").concat(encodeURIComponent(t)))}static async deleteAllProviderModels(e){return await i.apiClient.delete("/admin/api/upstream-providers/".concat(e,"/models"))}static async getModelsWithProviders(){let e=await this.getUpstreamProviders(),t=e.map(e=>({id:e.id.toString(),provider:e.provider_type,group_api_key:e.api_key,group_url:e.base_url,created_at:new Date().toISOString(),updated_at:new Date().toISOString()})),r=[],i=new Set;for(let t of e)try{let e=await this.getProviderModels(t.id);e.db_models.forEach(e=>{i.add(e.id);let o={...e,upstream_provider_id:t.id};r.push({...this.transformAdminModelToModel(o,t.provider_type),has_own_api_key:!1,api_key_type:"group"})}),e.remote_models.forEach(e=>{if(!i.has(e.id)){let i={...e,upstream_provider_id:t.id};r.push({...this.transformAdminModelToModel(i,t.provider_type),has_own_api_key:!1,api_key_type:"remote",soft_deleted:!1})}})}catch(e){console.error("Failed to fetch models for provider ".concat(t.id,":"),e)}return{models:r,groups:t}}static async createModelGroup(e){let t=await this.createUpstreamProvider({provider_type:e.provider,base_url:e.group_url||"",api_key:e.group_api_key||"",enabled:!0});return{id:t.id.toString(),provider:t.provider_type,group_api_key:t.api_key,group_url:t.base_url,created_at:new Date().toISOString(),updated_at:new Date().toISOString()}}static async updateModelGroup(e,t){let r=await this.updateUpstreamProvider(parseInt(e),{provider_type:t.provider,base_url:t.group_url,api_key:t.group_api_key});return{id:r.id.toString(),provider:r.provider_type,group_api_key:r.api_key,group_url:r.base_url,created_at:new Date().toISOString(),updated_at:new Date().toISOString()}}static async createModel(e){let t=e.provider_id?parseInt(e.provider_id):null,r={prompt:e.input_cost/1e6,completion:e.output_cost/1e6,request:e.min_cost_per_request||0,image:0,web_search:0,internal_reasoning:0},o={model_id:e.id||e.full_name,provider_id:t,name:e.name||e.full_name,description:e.description||"",created:Math.floor(Date.now()/1e3),context_length:e.contextLength||0,architecture:{modality:e.modelType||"text",input_modalities:[e.modelType||"text"],output_modalities:[e.modelType||"text"],tokenizer:"",instruct_type:null},pricing:this.convertPricingToPerToken(r),per_request_limits:null,top_provider:null,enabled:!1!==e.isEnabled},a=await i.apiClient.post("/admin/api/models/create",o);return this.transformAdminModelToModel({...a,pricing:this.convertPricingToPerMillionTokens(a.pricing)},e.provider)}static async updateModel(e,t){let r=t.provider_id?parseInt(t.provider_id):null,o=await this.getModel(e,r),a={prompt:t.input_cost/1e6,completion:t.output_cost/1e6,request:t.min_cost_per_request||0,image:0,web_search:0,internal_reasoning:0},n={...o,model_id:e,provider_id:r,pricing:a};t.name&&(n.name=t.name),t.description&&(n.description=t.description),void 0!==t.contextLength&&(n.context_length=t.contextLength),void 0!==t.isEnabled&&(n.enabled=t.isEnabled);let s=await i.apiClient.post("/admin/api/models/update",{...n,pricing:this.convertPricingToPerToken(n.pricing)});return this.transformAdminModelToModel({...s,pricing:this.convertPricingToPerMillionTokens(s.pricing)},t.provider)}static async deleteModel(e,t){let r=t?parseInt(t):null;return await i.apiClient.post("/admin/api/models/delete",{model_id:e,provider_id:r}),{message:"Model deleted successfully"}}static async softDeleteModel(e,t){let r=t?parseInt(t):null,o=await this.getModel(e,r);return await i.apiClient.post("/admin/api/models/update",{model_id:e,provider_id:r,...o,enabled:!1,pricing:this.convertPricingToPerToken(o.pricing)}),{message:"Model soft deleted successfully"}}static async deleteModels(e,t){if(!t)throw Error("provider_id is required to delete models");let r=parseInt(t);for(let t of e)await this.deleteProviderModel(r,t);return{deleted_count:e.length,message:"Models deleted successfully"}}static async softDeleteModels(e,t){if(!t)throw Error("provider_id is required to soft delete models");let r=parseInt(t);for(let t of e){let e=await this.getProviderModel(r,t);await this.updateProviderModel(r,t,{...e,enabled:!1})}return{deleted_count:e.length,message:"Models soft deleted successfully"}}static async bulkUpdateModels(e,t,r){if(!r)throw Error("provider_id is required for bulk updates");let i=[],o=0,a=parseInt(r);for(let r of(console.log("Bulk update not implemented, ignoring updates:",t),e))try{let e=await this.getProviderModel(a,r);await this.updateProviderModel(a,r,e),o++}catch(t){let e=t instanceof Error?t.message:"Unknown error";i.push("Failed to update ".concat(r,": ").concat(e))}return{updated_count:o,total_count:e.length,message:"Bulk update completed",errors:i}}static async deleteAllModels(){let e=await this.getUpstreamProviders(),t=0;for(let r of e)t+=(await this.deleteAllProviderModels(r.id)).deleted;return{deleted_count:t,message:"All models deleted successfully"}}static async deleteModelsByProvider(e){return{deleted_count:(await this.deleteAllProviderModels(parseInt(e))).deleted,message:"Provider models deleted successfully"}}static async restoreModels(e,t){if(!t)throw Error("provider_id is required to restore models");let r=parseInt(t);for(let t of e){let e=await this.getProviderModel(r,t);await this.updateProviderModel(r,t,{...e,enabled:!0})}return{restored_count:e.length,message:"Models restored successfully"}}static async refreshAllModels(){return{message:"Refresh not implemented for admin API"}}static async refreshModels(e){return console.log("Refresh models not implemented for admin API, ignoring data:",e),{message:"Refresh not implemented for admin API"}}static async getOpenRouterPresets(){return(await i.apiClient.get("/admin/api/openrouter-presets")).map(e=>({...e,pricing:this.convertPricingToPerMillionTokens(e.pricing)}))}static async getSettings(){return await i.apiClient.get("/admin/api/settings")}static async updateSettings(e){return await i.apiClient.patch("/admin/api/settings",e)}static async login(e){return await i.apiClient.post("/admin/api/login",{password:e})}static async logout(){return await i.apiClient.post("/admin/api/logout",{})}}},9442:(e,t,r)=>{r.d(t,{Fc:()=>s,TN:()=>d});var i=r(3422);r(4398);var o=r(4676),a=r(9183);let n=(0,o.F)("relative w-full rounded-lg border px-4 py-3 text-sm grid has-[>svg]:grid-cols-[calc(var(--spacing)*4)_1fr] grid-cols-[0_1fr] has-[>svg]:gap-x-3 gap-y-0.5 items-start [&>svg]:size-4 [&>svg]:translate-y-0.5 [&>svg]:text-current",{variants:{variant:{default:"bg-card text-card-foreground",destructive:"text-destructive bg-card [&>svg]:text-current *:data-[slot=alert-description]:text-destructive/90"}},defaultVariants:{variant:"default"}});function s(e){let{className:t,variant:r,...o}=e;return(0,i.jsx)("div",{"data-slot":"alert",role:"alert",className:(0,a.cn)(n({variant:r}),t),...o})}function d(e){let{className:t,...r}=e;return(0,i.jsx)("div",{"data-slot":"alert-description",className:(0,a.cn)("text-muted-foreground col-start-2 grid justify-items-start gap-1 text-sm [&_p]:leading-relaxed",t),...r})}}}]);
\ No newline at end of file
diff --git a/ui_out/_next/static/chunks/601-bd77b408e968f9da.js b/ui_out/_next/static/chunks/601-bd77b408e968f9da.js
new file mode 100644
index 00000000..841900af
--- /dev/null
+++ b/ui_out/_next/static/chunks/601-bd77b408e968f9da.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[601],{2738:(e,t,i)=>{i.d(t,{BT:()=>l,Wu:()=>s,ZB:()=>d,Zp:()=>a,aR:()=>n,wL:()=>p});var r=i(3422);i(4398);var o=i(9183);function a(e){let{className:t,...i}=e;return(0,r.jsx)("div",{"data-slot":"card",className:(0,o.cn)("bg-card text-card-foreground flex flex-col gap-6 rounded-xl border py-6 shadow-sm",t),...i})}function n(e){let{className:t,...i}=e;return(0,r.jsx)("div",{"data-slot":"card-header",className:(0,o.cn)("@container/card-header grid auto-rows-min grid-rows-[auto_auto] items-start gap-1.5 px-6 has-data-[slot=card-action]:grid-cols-[1fr_auto] [.border-b]:pb-6",t),...i})}function d(e){let{className:t,...i}=e;return(0,r.jsx)("div",{"data-slot":"card-title",className:(0,o.cn)("leading-none font-semibold",t),...i})}function l(e){let{className:t,...i}=e;return(0,r.jsx)("div",{"data-slot":"card-description",className:(0,o.cn)("text-muted-foreground text-sm",t),...i})}function s(e){let{className:t,...i}=e;return(0,r.jsx)("div",{"data-slot":"card-content",className:(0,o.cn)("px-6",t),...i})}function p(e){let{className:t,...i}=e;return(0,r.jsx)("div",{"data-slot":"card-footer",className:(0,o.cn)("flex items-center px-6 [.border-t]:pt-6",t),...i})}},3130:(e,t,i)=>{i.d(t,{J:()=>n});var r=i(3422);i(4398);var o=i(2996),a=i(9183);function n(e){let{className:t,...i}=e;return(0,r.jsx)(o.b,{"data-slot":"label",className:(0,a.cn)("flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50",t),...i})}},9119:(e,t,i)=>{i.d(t,{zQ:()=>l});var r=i(7916),o=i(9945);o.Ik({id:o.ai(),provider_type:o.Yj(),base_url:o.Yj(),api_key:o.Yj().optional(),api_version:o.Yj().nullable().optional(),enabled:o.zM(),provider_fee:o.ai().optional()}),o.Ik({provider_type:o.Yj(),base_url:o.Yj(),api_key:o.Yj(),api_version:o.Yj().nullable().optional(),enabled:o.zM().default(!0),provider_fee:o.ai().optional()}),o.Ik({provider_type:o.Yj().optional(),base_url:o.Yj().optional(),api_key:o.Yj().optional(),api_version:o.Yj().nullable().optional(),enabled:o.zM().optional(),provider_fee:o.ai().optional()});let a=o.Ik({prompt:o.ai().optional(),completion:o.ai().optional(),request:o.ai().optional(),image:o.ai().optional(),web_search:o.ai().optional(),internal_reasoning:o.ai().optional()}),n=o.Ik({modality:o.Yj().optional(),input_modalities:o.YO(o.Yj()).optional(),output_modalities:o.YO(o.Yj()).optional(),tokenizer:o.Yj().optional(),instruct_type:o.Yj().nullable().optional()}),d=o.Ik({id:o.Yj(),name:o.Yj(),description:o.Yj(),created:o.ai(),context_length:o.ai(),architecture:n.or(o.g1(o.bz())),pricing:a.or(o.g1(o.bz())),per_request_limits:o.g1(o.bz()).nullable().optional(),top_provider:o.g1(o.bz()).nullable().optional(),upstream_provider_id:o.ai().nullable().optional(),enabled:o.zM().default(!0)});o.Ik({provider:o.Ik({id:o.ai(),provider_type:o.Yj(),base_url:o.Yj()}),db_models:o.YO(d),remote_models:o.YO(d)});class l{static convertPricingToPerMillionTokens(e){if(!e)return e;let t={...e};return"number"==typeof t.prompt&&(t.prompt=1e6*t.prompt),"number"==typeof t.completion&&(t.completion=1e6*t.completion),"number"==typeof t.request&&(t.request=1e6*t.request),"number"==typeof t.image&&(t.image=1e6*t.image),t}static convertPricingToPerToken(e){if(!e)return e;let t={...e};return"number"==typeof t.prompt&&(t.prompt=t.prompt/1e6),"number"==typeof t.completion&&(t.completion=t.completion/1e6),"number"==typeof t.request&&(t.request=t.request/1e6),"number"==typeof t.image&&(t.image=t.image/1e6),t}static transformAdminModelToModel(e,t){var i,r;let o=this.convertPricingToPerMillionTokens(e.pricing),a=(null==o?void 0:o.prompt)||0,n=(null==o?void 0:o.completion)||0,d=(null==o?void 0:o.request)||0;return{id:e.id,name:e.name,full_name:e.name,description:e.description,modelType:(null==(i=e.architecture)?void 0:i.modality)||"text",isEnabled:e.enabled,createdAt:new Date(1e3*e.created).toISOString(),updatedAt:new Date(1e3*e.created).toISOString(),provider:t||"Unknown",url:"",api_key:void 0,input_cost:a,output_cost:n,min_cost_per_request:d,min_cash_per_request:0,contextLength:e.context_length,apiKeyRequired:!0,provider_id:null==(r=e.upstream_provider_id)?void 0:r.toString(),is_free:0===a&&0===n,soft_deleted:!e.enabled,has_own_api_key:!1,api_key_type:"group"}}static transformModelToAdminModel(e){let t=this.convertPricingToPerToken({prompt:e.input_cost,completion:e.output_cost,request:e.min_cost_per_request,image:0,web_search:0,internal_reasoning:0});return{id:e.id,name:e.name,description:e.description||"",created:Math.floor(new Date(e.createdAt).getTime()/1e3),context_length:e.contextLength||0,architecture:{modality:e.modelType,input_modalities:[e.modelType],output_modalities:[e.modelType],tokenizer:"",instruct_type:null},pricing:t,per_request_limits:null,top_provider:null,upstream_provider_id:e.provider_id?parseInt(e.provider_id):null,enabled:e.isEnabled}}static async getUpstreamProviders(){return await r.apiClient.get("/admin/api/upstream-providers")}static async getUpstreamProvider(e){return await r.apiClient.get("/admin/api/upstream-providers/".concat(e))}static async createUpstreamProvider(e){return await r.apiClient.post("/admin/api/upstream-providers",e)}static async updateUpstreamProvider(e,t){return await r.apiClient.patch("/admin/api/upstream-providers/".concat(e),t)}static async deleteUpstreamProvider(e){return await r.apiClient.delete("/admin/api/upstream-providers/".concat(e))}static async getProviderModels(e){return await r.apiClient.get("/admin/api/upstream-providers/".concat(e,"/models"))}static async createProviderModel(e,t){let i={...t,pricing:this.convertPricingToPerToken(t.pricing)};console.log("Creating provider model - pricing conversion:",{original:t.pricing,converted:i.pricing});let o=await r.apiClient.post("/admin/api/upstream-providers/".concat(e,"/models"),i);return{...o,pricing:this.convertPricingToPerMillionTokens(o.pricing)}}static async getProviderModel(e,t){let i=await r.apiClient.get("/admin/api/upstream-providers/".concat(e,"/models/").concat(encodeURIComponent(t)));return{...i,pricing:this.convertPricingToPerMillionTokens(i.pricing)}}static async getModel(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,i=await r.apiClient.post("/admin/api/models/get",{model_id:e,provider_id:t});return{...i,pricing:this.convertPricingToPerMillionTokens(i.pricing)}}static async updateProviderModel(e,t,i){let o={...i,pricing:this.convertPricingToPerToken(i.pricing)};console.log("Updating provider model - pricing conversion:",{original:i.pricing,converted:o.pricing});let a=await r.apiClient.patch("/admin/api/upstream-providers/".concat(e,"/models/").concat(encodeURIComponent(t)),o);return{...a,pricing:this.convertPricingToPerMillionTokens(a.pricing)}}static async deleteProviderModel(e,t){return await r.apiClient.delete("/admin/api/upstream-providers/".concat(e,"/models/").concat(encodeURIComponent(t)))}static async deleteAllProviderModels(e){return await r.apiClient.delete("/admin/api/upstream-providers/".concat(e,"/models"))}static async getModelsWithProviders(){let e=await this.getUpstreamProviders(),t=e.map(e=>({id:e.id.toString(),provider:e.provider_type,group_api_key:e.api_key,group_url:e.base_url,created_at:new Date().toISOString(),updated_at:new Date().toISOString()})),i=[],r=new Set;for(let t of e)try{let e=await this.getProviderModels(t.id);e.db_models.forEach(e=>{r.add(e.id);let o={...e,upstream_provider_id:t.id};i.push({...this.transformAdminModelToModel(o,t.provider_type),has_own_api_key:!1,api_key_type:"group"})}),e.remote_models.forEach(e=>{if(!r.has(e.id)){let r={...e,upstream_provider_id:t.id};i.push({...this.transformAdminModelToModel(r,t.provider_type),has_own_api_key:!1,api_key_type:"remote",soft_deleted:!1})}})}catch(e){console.error("Failed to fetch models for provider ".concat(t.id,":"),e)}return{models:i,groups:t}}static async createModelGroup(e){let t=await this.createUpstreamProvider({provider_type:e.provider,base_url:e.group_url||"",api_key:e.group_api_key||"",enabled:!0});return{id:t.id.toString(),provider:t.provider_type,group_api_key:t.api_key,group_url:t.base_url,created_at:new Date().toISOString(),updated_at:new Date().toISOString()}}static async updateModelGroup(e,t){let i=await this.updateUpstreamProvider(parseInt(e),{provider_type:t.provider,base_url:t.group_url,api_key:t.group_api_key});return{id:i.id.toString(),provider:i.provider_type,group_api_key:i.api_key,group_url:i.base_url,created_at:new Date().toISOString(),updated_at:new Date().toISOString()}}static async createModel(e){let t=e.provider_id?parseInt(e.provider_id):null,i={prompt:e.input_cost/1e6,completion:e.output_cost/1e6,request:e.min_cost_per_request||0,image:0,web_search:0,internal_reasoning:0},o={model_id:e.id||e.full_name,provider_id:t,name:e.name||e.full_name,description:e.description||"",created:Math.floor(Date.now()/1e3),context_length:e.contextLength||0,architecture:{modality:e.modelType||"text",input_modalities:[e.modelType||"text"],output_modalities:[e.modelType||"text"],tokenizer:"",instruct_type:null},pricing:this.convertPricingToPerToken(i),per_request_limits:null,top_provider:null,enabled:!1!==e.isEnabled},a=await r.apiClient.post("/admin/api/models/create",o);return this.transformAdminModelToModel({...a,pricing:this.convertPricingToPerMillionTokens(a.pricing)},e.provider)}static async updateModel(e,t){let i=t.provider_id?parseInt(t.provider_id):null,o=await this.getModel(e,i),a={prompt:t.input_cost/1e6,completion:t.output_cost/1e6,request:t.min_cost_per_request||0,image:0,web_search:0,internal_reasoning:0},n={...o,model_id:e,provider_id:i,pricing:a};t.name&&(n.name=t.name),t.description&&(n.description=t.description),void 0!==t.contextLength&&(n.context_length=t.contextLength),void 0!==t.isEnabled&&(n.enabled=t.isEnabled);let d=await r.apiClient.post("/admin/api/models/update",{...n,pricing:this.convertPricingToPerToken(n.pricing)});return this.transformAdminModelToModel({...d,pricing:this.convertPricingToPerMillionTokens(d.pricing)},t.provider)}static async deleteModel(e,t){let i=t?parseInt(t):null;return await r.apiClient.post("/admin/api/models/delete",{model_id:e,provider_id:i}),{message:"Model deleted successfully"}}static async softDeleteModel(e,t){let i=t?parseInt(t):null,o=await this.getModel(e,i);return await r.apiClient.post("/admin/api/models/update",{model_id:e,provider_id:i,...o,enabled:!1,pricing:this.convertPricingToPerToken(o.pricing)}),{message:"Model soft deleted successfully"}}static async deleteModels(e,t){if(!t)throw Error("provider_id is required to delete models");let i=parseInt(t);for(let t of e)await this.deleteProviderModel(i,t);return{deleted_count:e.length,message:"Models deleted successfully"}}static async softDeleteModels(e,t){if(!t)throw Error("provider_id is required to soft delete models");let i=parseInt(t);for(let t of e){let e=await this.getProviderModel(i,t);await this.updateProviderModel(i,t,{...e,enabled:!1})}return{deleted_count:e.length,message:"Models soft deleted successfully"}}static async bulkUpdateModels(e,t,i){if(!i)throw Error("provider_id is required for bulk updates");let r=[],o=0,a=parseInt(i);for(let i of(console.log("Bulk update not implemented, ignoring updates:",t),e))try{let e=await this.getProviderModel(a,i);await this.updateProviderModel(a,i,e),o++}catch(t){let e=t instanceof Error?t.message:"Unknown error";r.push("Failed to update ".concat(i,": ").concat(e))}return{updated_count:o,total_count:e.length,message:"Bulk update completed",errors:r}}static async deleteAllModels(){let e=await this.getUpstreamProviders(),t=0;for(let i of e)t+=(await this.deleteAllProviderModels(i.id)).deleted;return{deleted_count:t,message:"All models deleted successfully"}}static async deleteModelsByProvider(e){return{deleted_count:(await this.deleteAllProviderModels(parseInt(e))).deleted,message:"Provider models deleted successfully"}}static async restoreModels(e,t){if(!t)throw Error("provider_id is required to restore models");let i=parseInt(t);for(let t of e){let e=await this.getProviderModel(i,t);await this.updateProviderModel(i,t,{...e,enabled:!0})}return{restored_count:e.length,message:"Models restored successfully"}}static async refreshAllModels(){return{message:"Refresh not implemented for admin API"}}static async refreshModels(e){return console.log("Refresh models not implemented for admin API, ignoring data:",e),{message:"Refresh not implemented for admin API"}}static async getOpenRouterPresets(){return(await r.apiClient.get("/admin/api/openrouter-presets")).map(e=>({...e,pricing:this.convertPricingToPerMillionTokens(e.pricing)}))}static async getSettings(){return await r.apiClient.get("/admin/api/settings")}static async updateSettings(e){return await r.apiClient.patch("/admin/api/settings",e)}static async login(e){return await r.apiClient.post("/admin/api/login",{password:e})}static async logout(){return await r.apiClient.post("/admin/api/logout",{})}static async getTemporaryBalances(){return await r.apiClient.get("/admin/api/temporary-balances")}}o.Ik({hashed_key:o.Yj(),balance:o.ai(),total_spent:o.ai(),total_requests:o.ai(),refund_address:o.Yj().nullable(),key_expiry_time:o.ai().nullable()})}}]);
\ No newline at end of file
diff --git a/ui_out/_next/static/chunks/826-c15935d1c2416e5d.js b/ui_out/_next/static/chunks/826-c15935d1c2416e5d.js
new file mode 100644
index 00000000..c8f329db
--- /dev/null
+++ b/ui_out/_next/static/chunks/826-c15935d1c2416e5d.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[826],{246:(e,r,t)=>{t.d(r,{A:()=>n});let n=(0,t(3929).A)("circle-check-big",[["path",{d:"M21.801 10A10 10 0 1 1 17 3.335",key:"yps3ct"}],["path",{d:"m9 11 3 3L22 4",key:"1pflzl"}]])},413:(e,r,t)=>{t.d(r,{A:()=>n});let n=(0,t(3929).A)("image",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",ry:"2",key:"1m3agn"}],["circle",{cx:"9",cy:"9",r:"2",key:"af1f0g"}],["path",{d:"m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21",key:"1xmnt7"}]])},484:(e,r,t)=>{t.d(r,{A:()=>n});let n=(0,t(3929).A)("search",[["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}],["path",{d:"m21 21-4.3-4.3",key:"1qie3q"}]])},552:(e,r,t)=>{t.d(r,{u:()=>_});var n=t(1407);let a=(e,r,t)=>{if(e&&"reportValidity"in e){let a=(0,n.Jt)(t,r);e.setCustomValidity(a&&a.message||""),e.reportValidity()}},l=(e,r)=>{for(let t in r.fields){let n=r.fields[t];n&&n.ref&&"reportValidity"in n.ref?a(n.ref,t,e):n&&n.refs&&n.refs.forEach(r=>a(r,t,e))}},o=(e,r)=>{r.shouldUseNativeValidation&&l(e,r);let t={};for(let a in e){let l=(0,n.Jt)(r.fields,a),o=Object.assign(e[a]||{},{ref:l&&l.ref});if(i(r.names||Object.keys(e),a)){let e=Object.assign({},(0,n.Jt)(t,a));(0,n.hZ)(e,"root",o),(0,n.hZ)(t,a,e)}else(0,n.hZ)(t,a,o)}return t},i=(e,r)=>{let t=s(r);return e.some(e=>s(e).match(`^${t}\\.\\d+`))};function s(e){return e.replace(/\]|\[/g,"")}function u(e,r,t){function n(t,n){var a;for(let l in Object.defineProperty(t,"_zod",{value:t._zod??{},enumerable:!1}),(a=t._zod).traits??(a.traits=new Set),t._zod.traits.add(e),r(t,n),o.prototype)l in t||Object.defineProperty(t,l,{value:o.prototype[l].bind(t)});t._zod.constr=o,t._zod.def=n}let a=t?.Parent??Object;class l extends a{}function o(e){var r;let a=t?.Parent?new l:this;for(let t of(n(a,e),(r=a._zod).deferred??(r.deferred=[]),a._zod.deferred))t();return a}return Object.defineProperty(l,"name",{value:e}),Object.defineProperty(o,"init",{value:n}),Object.defineProperty(o,Symbol.hasInstance,{value:r=>!!t?.Parent&&r instanceof t.Parent||r?._zod?.traits?.has(e)}),Object.defineProperty(o,"name",{value:e}),o}Object.freeze({status:"aborted"}),Symbol("zod_brand");class d extends Error{constructor(){super("Encountered Promise during synchronous parse. Use .parseAsync() instead.")}}let c={};function f(e){return e&&Object.assign(c,e),c}function p(e,r){return"bigint"==typeof r?r.toString():r}let h=Error.captureStackTrace?Error.captureStackTrace:(...e)=>{};function y(e){return"string"==typeof e?e:e?.message}function m(e,r,t){let n={...e,path:e.path??[]};return e.message||(n.message=y(e.inst?._zod.def?.error?.(e))??y(r?.error?.(e))??y(t.customError?.(e))??y(t.localeError?.(e))??"Invalid input"),delete n.inst,delete n.continue,r?.reportInput||delete n.input,n}Number.MIN_SAFE_INTEGER,Number.MAX_SAFE_INTEGER,Number.MAX_VALUE,Number.MAX_VALUE;let v=(e,r)=>{e.name="$ZodError",Object.defineProperty(e,"_zod",{value:e._zod,enumerable:!1}),Object.defineProperty(e,"issues",{value:r,enumerable:!1}),Object.defineProperty(e,"message",{get:()=>JSON.stringify(r,p,2),enumerable:!0}),Object.defineProperty(e,"toString",{value:()=>e.message,enumerable:!1})},g=u("$ZodError",v),b=u("$ZodError",v,{Parent:Error}),w=(e,r,t,n)=>{let a=t?Object.assign(t,{async:!1}):{async:!1},l=e._zod.run({value:r,issues:[]},a);if(l instanceof Promise)throw new d;if(l.issues.length){let e=new(n?.Err??b)(l.issues.map(e=>m(e,a,f())));throw h(e,n?.callee),e}return l.value},x=async(e,r,t,n)=>{let a=t?Object.assign(t,{async:!0}):{async:!0},l=e._zod.run({value:r,issues:[]},a);if(l instanceof Promise&&(l=await l),l.issues.length){let e=new(n?.Err??b)(l.issues.map(e=>m(e,a,f())));throw h(e,n?.callee),e}return l.value};function k(e,r){try{var t=e()}catch(e){return r(e)}return t&&t.then?t.then(void 0,r):t}function _(e,r,t){if(void 0===t&&(t={}),"_def"in e&&"object"==typeof e._def&&"typeName"in e._def)return function(a,i,s){try{return Promise.resolve(k(function(){return Promise.resolve(e["sync"===t.mode?"parse":"parseAsync"](a,r)).then(function(e){return s.shouldUseNativeValidation&&l({},s),{errors:{},values:t.raw?Object.assign({},a):e}})},function(e){if(Array.isArray(null==e?void 0:e.issues))return{values:{},errors:o(function(e,r){for(var t={};e.length;){var a=e[0],l=a.code,o=a.message,i=a.path.join(".");if(!t[i])if("unionErrors"in a){var s=a.unionErrors[0].errors[0];t[i]={message:s.message,type:s.code}}else t[i]={message:o,type:l};if("unionErrors"in a&&a.unionErrors.forEach(function(r){return r.errors.forEach(function(r){return e.push(r)})}),r){var u=t[i].types,d=u&&u[a.code];t[i]=(0,n.Gb)(i,r,t,l,d?[].concat(d,a.message):a.message)}e.shift()}return t}(e.errors,!s.shouldUseNativeValidation&&"all"===s.criteriaMode),s)};throw e}))}catch(e){return Promise.reject(e)}};if("_zod"in e&&"object"==typeof e._zod)return function(a,i,s){try{return Promise.resolve(k(function(){return Promise.resolve(("sync"===t.mode?w:x)(e,a,r)).then(function(e){return s.shouldUseNativeValidation&&l({},s),{errors:{},values:t.raw?Object.assign({},a):e}})},function(e){if(e instanceof g)return{values:{},errors:o(function(e,r){for(var t={};e.length;){var a=e[0],l=a.code,o=a.message,i=a.path.join(".");if(!t[i])if("invalid_union"===a.code&&a.errors.length>0){var s=a.errors[0][0];t[i]={message:s.message,type:s.code}}else t[i]={message:o,type:l};if("invalid_union"===a.code&&a.errors.forEach(function(r){return r.forEach(function(r){return e.push(r)})}),r){var u=t[i].types,d=u&&u[a.code];t[i]=(0,n.Gb)(i,r,t,l,d?[].concat(d,a.message):a.message)}e.shift()}return t}(e.issues,!s.shouldUseNativeValidation&&"all"===s.criteriaMode),s)};throw e}))}catch(e){return Promise.reject(e)}};throw Error("Invalid input: not a Zod schema")}},1220:(e,r,t)=>{t.d(r,{A:()=>n});let n=(0,t(3929).A)("info",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 16v-4",key:"1dtifu"}],["path",{d:"M12 8h.01",key:"e9boi3"}]])},1407:(e,r,t)=>{t.d(r,{Gb:()=>L,Jt:()=>b,Op:()=>j,hZ:()=>x,lN:()=>M,mN:()=>eA,xI:()=>O,xW:()=>C});var n=t(4398),a=e=>"checkbox"===e.type,l=e=>e instanceof Date,o=e=>null==e;let i=e=>"object"==typeof e;var s=e=>!o(e)&&!Array.isArray(e)&&i(e)&&!l(e),u=e=>s(e)&&e.target?a(e.target)?e.target.checked:e.target.value:e,d=e=>e.substring(0,e.search(/\.\d+(\.|$)/))||e,c=(e,r)=>e.has(d(r)),f=e=>{let r=e.constructor&&e.constructor.prototype;return s(r)&&r.hasOwnProperty("isPrototypeOf")},p="undefined"!=typeof window&&void 0!==window.HTMLElement&&"undefined"!=typeof document;function h(e){let r,t=Array.isArray(e),n="undefined"!=typeof FileList&&e instanceof FileList;if(e instanceof Date)r=new Date(e);else if(!(!(p&&(e instanceof Blob||n))&&(t||s(e))))return e;else if(r=t?[]:Object.create(Object.getPrototypeOf(e)),t||f(e))for(let t in e)e.hasOwnProperty(t)&&(r[t]=h(e[t]));else r=e;return r}var y=e=>/^\w*$/.test(e),m=e=>void 0===e,v=e=>Array.isArray(e)?e.filter(Boolean):[],g=e=>v(e.replace(/["|']|\]/g,"").split(/\.|\[/)),b=(e,r,t)=>{if(!r||!s(e))return t;let n=(y(r)?[r]:g(r)).reduce((e,r)=>o(e)?e:e[r],e);return m(n)||n===e?m(e[r])?t:e[r]:n},w=e=>"boolean"==typeof e,x=(e,r,t)=>{let n=-1,a=y(r)?[r]:g(r),l=a.length,o=l-1;for(;++nn.useContext(S),j=e=>{let{children:r,...t}=e;return n.createElement(S.Provider,{value:t},r)};var E=(e,r,t,n=!0)=>{let a={defaultValues:r._defaultValues};for(let l in e)Object.defineProperty(a,l,{get:()=>(r._proxyFormState[l]!==_.all&&(r._proxyFormState[l]=!n||_.all),t&&(t[l]=!0),e[l])});return a};let D="undefined"!=typeof window?n.useLayoutEffect:n.useEffect;function M(e){let r=C(),{control:t=r.control,disabled:a,name:l,exact:o}=e||{},[i,s]=n.useState(t._formState),u=n.useRef({isDirty:!1,isLoading:!1,dirtyFields:!1,touchedFields:!1,validatingFields:!1,isValidating:!1,isValid:!1,errors:!1});return D(()=>t._subscribe({name:l,formState:u.current,exact:o,callback:e=>{a||s({...t._formState,...e})}}),[l,a,o]),n.useEffect(()=>{u.current.isValid&&t._setValid(!0)},[t]),n.useMemo(()=>E(i,t,u.current,!1),[i,t])}var R=e=>"string"==typeof e,V=(e,r,t,n,a)=>R(e)?(n&&r.watch.add(e),b(t,e,a)):Array.isArray(e)?e.map(e=>(n&&r.watch.add(e),b(t,e))):(n&&(r.watchAll=!0),t),F=e=>o(e)||!i(e);function P(e,r,t=new WeakSet){if(F(e)||F(r))return e===r;if(l(e)&&l(r))return e.getTime()===r.getTime();let n=Object.keys(e),a=Object.keys(r);if(n.length!==a.length)return!1;if(t.has(e)||t.has(r))return!0;for(let o of(t.add(e),t.add(r),n)){let n=e[o];if(!a.includes(o))return!1;if("ref"!==o){let e=r[o];if(l(n)&&l(e)||s(n)&&s(e)||Array.isArray(n)&&Array.isArray(e)?!P(n,e,t):n!==e)return!1}}return!0}let O=e=>e.render(function(e){let r=C(),{name:t,disabled:a,control:l=r.control,shouldUnregister:o,defaultValue:i}=e,s=c(l._names.array,t),d=n.useMemo(()=>b(l._formValues,t,b(l._defaultValues,t,i)),[l,t,i]),f=function(e){let r=C(),{control:t=r.control,name:a,defaultValue:l,disabled:o,exact:i,compute:s}=e||{},u=n.useRef(l),d=n.useRef(s),c=n.useRef(void 0);d.current=s;let f=n.useMemo(()=>t._getWatch(a,u.current),[t,a]),[p,h]=n.useState(d.current?d.current(f):f);return D(()=>t._subscribe({name:a,formState:{values:!0},exact:i,callback:e=>{if(!o){let r=V(a,t._names,e.values||t._formValues,!1,u.current);if(d.current){let e=d.current(r);P(e,c.current)||(h(e),c.current=e)}else h(r)}}}),[t,o,a,i]),n.useEffect(()=>t._removeUnmounted()),p}({control:l,name:t,defaultValue:d,exact:!0}),p=M({control:l,name:t,exact:!0}),y=n.useRef(e),v=n.useRef(void 0),g=n.useRef(l.register(t,{...e.rules,value:f,...w(e.disabled)?{disabled:e.disabled}:{}}));y.current=e;let _=n.useMemo(()=>Object.defineProperties({},{invalid:{enumerable:!0,get:()=>!!b(p.errors,t)},isDirty:{enumerable:!0,get:()=>!!b(p.dirtyFields,t)},isTouched:{enumerable:!0,get:()=>!!b(p.touchedFields,t)},isValidating:{enumerable:!0,get:()=>!!b(p.validatingFields,t)},error:{enumerable:!0,get:()=>b(p.errors,t)}}),[p,t]),A=n.useCallback(e=>g.current.onChange({target:{value:u(e),name:t},type:k.CHANGE}),[t]),S=n.useCallback(()=>g.current.onBlur({target:{value:b(l._formValues,t),name:t},type:k.BLUR}),[t,l._formValues]),j=n.useCallback(e=>{let r=b(l._fields,t);r&&e&&(r._f.ref={focus:()=>e.focus&&e.focus(),select:()=>e.select&&e.select(),setCustomValidity:r=>e.setCustomValidity(r),reportValidity:()=>e.reportValidity()})},[l._fields,t]),E=n.useMemo(()=>({name:t,value:f,...w(a)||p.disabled?{disabled:p.disabled||a}:{},onChange:A,onBlur:S,ref:j}),[t,a,p.disabled,A,S,j,f]);return n.useEffect(()=>{let e=l._options.shouldUnregister||o,r=v.current;r&&r!==t&&!s&&l.unregister(r),l.register(t,{...y.current.rules,...w(y.current.disabled)?{disabled:y.current.disabled}:{}});let n=(e,r)=>{let t=b(l._fields,e);t&&t._f&&(t._f.mount=r)};if(n(t,!0),e){let e=h(b(l._options.defaultValues,t,y.current.defaultValue));x(l._defaultValues,t,e),m(b(l._formValues,t))&&x(l._formValues,t,e)}return s||l.register(t),v.current=t,()=>{(s?e&&!l._state.action:e)?l.unregister(t):n(t,!1)}},[t,l,s,o]),n.useEffect(()=>{l._setDisabledField({disabled:a,name:t})},[a,t,l]),n.useMemo(()=>({field:E,formState:p,fieldState:_}),[E,p,_])}(e));var L=(e,r,t,n,a)=>r?{...t[e],types:{...t[e]&&t[e].types?t[e].types:{},[n]:a||!0}}:{},T=e=>Array.isArray(e)?e:[e],N=()=>{let e=[];return{get observers(){return e},next:r=>{for(let t of e)t.next&&t.next(r)},subscribe:r=>(e.push(r),{unsubscribe:()=>{e=e.filter(e=>e!==r)}}),unsubscribe:()=>{e=[]}}},I=e=>s(e)&&!Object.keys(e).length,z=e=>"file"===e.type,K=e=>"function"==typeof e,U=e=>{if(!p)return!1;let r=e?e.ownerDocument:0;return e instanceof(r&&r.defaultView?r.defaultView.HTMLElement:HTMLElement)},H=e=>"select-multiple"===e.type,q=e=>"radio"===e.type,B=e=>q(e)||a(e),G=e=>U(e)&&e.isConnected;function W(e,r){let t=Array.isArray(r)?r:y(r)?[r]:g(r),n=1===t.length?e:function(e,r){let t=r.slice(0,-1).length,n=0;for(;n{for(let r in e)if(K(e[r]))return!0;return!1};function Z(e){return Array.isArray(e)||s(e)&&!X(e)}function Y(e,r={}){for(let t in e)Z(e[t])?(r[t]=Array.isArray(e[t])?[]:{},Y(e[t],r[t])):m(e[t])||(r[t]=!0);return r}function $(e,r,t){for(let n in t||(t=Y(r)),e)Z(e[n])?m(r)||F(t[n])?t[n]=Y(e[n],Array.isArray(e[n])?[]:{}):$(e[n],o(r)?{}:r[n],t[n]):t[n]=!P(e[n],r[n]);return t}let J={value:!1,isValid:!1},Q={value:!0,isValid:!0};var ee=e=>{if(Array.isArray(e)){if(e.length>1){let r=e.filter(e=>e&&e.checked&&!e.disabled).map(e=>e.value);return{value:r,isValid:!!r.length}}return e[0].checked&&!e[0].disabled?e[0].attributes&&!m(e[0].attributes.value)?m(e[0].value)||""===e[0].value?Q:{value:e[0].value,isValid:!0}:Q:J}return J},er=(e,{valueAsNumber:r,valueAsDate:t,setValueAs:n})=>m(e)?e:r?""===e?NaN:e?+e:e:t&&R(e)?new Date(e):n?n(e):e;let et={isValid:!1,value:null};var en=e=>Array.isArray(e)?e.reduce((e,r)=>r&&r.checked&&!r.disabled?{isValid:!0,value:r.value}:e,et):et;function ea(e){let r=e.ref;return z(r)?r.files:q(r)?en(e.refs).value:H(r)?[...r.selectedOptions].map(({value:e})=>e):a(r)?ee(e.refs).value:er(m(r.value)?e.ref.value:r.value,e)}var el=(e,r,t,n)=>{let a={};for(let t of e){let e=b(r,t);e&&x(a,t,e._f)}return{criteriaMode:t,names:[...e],fields:a,shouldUseNativeValidation:n}},eo=e=>e instanceof RegExp,ei=e=>m(e)?e:eo(e)?e.source:s(e)?eo(e.value)?e.value.source:e.value:e,es=e=>({isOnSubmit:!e||e===_.onSubmit,isOnBlur:e===_.onBlur,isOnChange:e===_.onChange,isOnAll:e===_.all,isOnTouch:e===_.onTouched});let eu="AsyncFunction";var ed=e=>!!e&&!!e.validate&&!!(K(e.validate)&&e.validate.constructor.name===eu||s(e.validate)&&Object.values(e.validate).find(e=>e.constructor.name===eu)),ec=e=>e.mount&&(e.required||e.min||e.max||e.maxLength||e.minLength||e.pattern||e.validate),ef=(e,r,t)=>!t&&(r.watchAll||r.watch.has(e)||[...r.watch].some(r=>e.startsWith(r)&&/^\.\w+/.test(e.slice(r.length))));let ep=(e,r,t,n)=>{for(let a of t||Object.keys(e)){let t=b(e,a);if(t){let{_f:e,...l}=t;if(e){if(e.refs&&e.refs[0]&&r(e.refs[0],a)&&!n)return!0;else if(e.ref&&r(e.ref,e.name)&&!n)return!0;else if(ep(l,r))break}else if(s(l)&&ep(l,r))break}}};function eh(e,r,t){let n=b(e,t);if(n||y(t))return{error:n,name:t};let a=t.split(".");for(;a.length;){let n=a.join("."),l=b(r,n),o=b(e,n);if(l&&!Array.isArray(l)&&t!==n)break;if(o&&o.type)return{name:n,error:o};if(o&&o.root&&o.root.type)return{name:`${n}.root`,error:o.root};a.pop()}return{name:t}}var ey=(e,r,t,n)=>{t(e);let{name:a,...l}=e;return I(l)||Object.keys(l).length>=Object.keys(r).length||Object.keys(l).find(e=>r[e]===(!n||_.all))},em=(e,r,t)=>!e||!r||e===r||T(e).some(e=>e&&(t?e===r:e.startsWith(r)||r.startsWith(e))),ev=(e,r,t,n,a)=>!a.isOnAll&&(!t&&a.isOnTouch?!(r||e):(t?n.isOnBlur:a.isOnBlur)?!e:(t?!n.isOnChange:!a.isOnChange)||e),eg=(e,r)=>!v(b(e,r)).length&&W(e,r),eb=(e,r,t)=>{let n=T(b(e,t));return x(n,"root",r[t]),x(e,t,n),e};function ew(e,r,t="validate"){if(R(e)||Array.isArray(e)&&e.every(R)||w(e)&&!e)return{type:t,message:R(e)?e:"",ref:r}}var ex=e=>s(e)&&!eo(e)?e:{value:e,message:""},ek=async(e,r,t,n,l,i)=>{let{ref:u,refs:d,required:c,maxLength:f,minLength:p,min:h,max:y,pattern:v,validate:g,name:x,valueAsNumber:k,mount:_}=e._f,S=b(t,x);if(!_||r.has(x))return{};let C=d?d[0]:u,j=e=>{l&&C.reportValidity&&(C.setCustomValidity(w(e)?"":e||""),C.reportValidity())},E={},D=q(u),M=a(u),V=(k||z(u))&&m(u.value)&&m(S)||U(u)&&""===u.value||""===S||Array.isArray(S)&&!S.length,F=L.bind(null,x,n,E),P=(e,r,t,n=A.maxLength,a=A.minLength)=>{let l=e?r:t;E[x]={type:e?n:a,message:l,ref:u,...F(e?n:a,l)}};if(i?!Array.isArray(S)||!S.length:c&&(!(D||M)&&(V||o(S))||w(S)&&!S||M&&!ee(d).isValid||D&&!en(d).isValid)){let{value:e,message:r}=R(c)?{value:!!c,message:c}:ex(c);if(e&&(E[x]={type:A.required,message:r,ref:C,...F(A.required,r)},!n))return j(r),E}if(!V&&(!o(h)||!o(y))){let e,r,t=ex(y),a=ex(h);if(o(S)||isNaN(S)){let n=u.valueAsDate||new Date(S),l=e=>new Date(new Date().toDateString()+" "+e),o="time"==u.type,i="week"==u.type;R(t.value)&&S&&(e=o?l(S)>l(t.value):i?S>t.value:n>new Date(t.value)),R(a.value)&&S&&(r=o?l(S)t.value),o(a.value)||(r=n+e.value,a=!o(r.value)&&S.length<+r.value;if((t||a)&&(P(t,e.message,r.message),!n))return j(E[x].message),E}if(v&&!V&&R(S)){let{value:e,message:r}=ex(v);if(eo(e)&&!S.match(e)&&(E[x]={type:A.pattern,message:r,ref:u,...F(A.pattern,r)},!n))return j(r),E}if(g){if(K(g)){let e=ew(await g(S,t),C);if(e&&(E[x]={...e,...F(A.validate,e.message)},!n))return j(e.message),E}else if(s(g)){let e={};for(let r in g){if(!I(e)&&!n)break;let a=ew(await g[r](S,t),C,r);a&&(e={...a,...F(r,a.message)},j(a.message),n&&(E[x]=e))}if(!I(e)&&(E[x]={ref:C,...e},!n))return E}}return j(!0),E};let e_={mode:_.onSubmit,reValidateMode:_.onChange,shouldFocusError:!0};function eA(e={}){let r=n.useRef(void 0),t=n.useRef(void 0),[i,d]=n.useState({isDirty:!1,isValidating:!1,isLoading:K(e.defaultValues),isSubmitted:!1,isSubmitting:!1,isSubmitSuccessful:!1,isValid:!1,submitCount:0,dirtyFields:{},touchedFields:{},validatingFields:{},errors:e.errors||{},disabled:e.disabled||!1,isReady:!1,defaultValues:K(e.defaultValues)?void 0:e.defaultValues});if(!r.current)if(e.formControl)r.current={...e.formControl,formState:i},e.defaultValues&&!K(e.defaultValues)&&e.formControl.reset(e.defaultValues,e.resetOptions);else{let{formControl:t,...n}=function(e={}){let r,t={...e_,...e},n={submitCount:0,isDirty:!1,isReady:!1,isLoading:K(t.defaultValues),isValidating:!1,isSubmitted:!1,isSubmitting:!1,isSubmitSuccessful:!1,isValid:!1,touchedFields:{},dirtyFields:{},validatingFields:{},errors:t.errors||{},disabled:t.disabled||!1},i={},d=(s(t.defaultValues)||s(t.values))&&h(t.defaultValues||t.values)||{},f=t.shouldUnregister?{}:h(d),y={action:!1,mount:!1,watch:!1},g={mount:new Set,disabled:new Set,unMount:new Set,array:new Set,watch:new Set},A=0,S={isDirty:!1,dirtyFields:!1,validatingFields:!1,touchedFields:!1,isValidating:!1,isValid:!1,errors:!1},C={...S},j={array:N(),state:N()},E=t.criteriaMode===_.all,D=e=>r=>{clearTimeout(A),A=setTimeout(e,r)},M=async e=>{if(!t.disabled&&(S.isValid||C.isValid||e)){let e=t.resolver?I((await Z()).errors):await J(i,!0);e!==n.isValid&&j.state.next({isValid:e})}},F=(e,r)=>{!t.disabled&&(S.isValidating||S.validatingFields||C.isValidating||C.validatingFields)&&((e||Array.from(g.mount)).forEach(e=>{e&&(r?x(n.validatingFields,e,r):W(n.validatingFields,e))}),j.state.next({validatingFields:n.validatingFields,isValidating:!I(n.validatingFields)}))},O=(e,r)=>{x(n.errors,e,r),j.state.next({errors:n.errors})},L=(e,r,t,n)=>{let a=b(i,e);if(a){let l=b(f,e,m(t)?b(d,e):t);m(l)||n&&n.defaultChecked||r?x(f,e,r?l:ea(a._f)):et(e,l),y.mount&&M()}},q=(e,r,a,l,o)=>{let i=!1,s=!1,u={name:e};if(!t.disabled){if(!a||l){(S.isDirty||C.isDirty)&&(s=n.isDirty,n.isDirty=u.isDirty=Q(),i=s!==u.isDirty);let t=P(b(d,e),r);s=!!b(n.dirtyFields,e),t?W(n.dirtyFields,e):x(n.dirtyFields,e,!0),u.dirtyFields=n.dirtyFields,i=i||(S.dirtyFields||C.dirtyFields)&&!t!==s}if(a){let r=b(n.touchedFields,e);r||(x(n.touchedFields,e,a),u.touchedFields=n.touchedFields,i=i||(S.touchedFields||C.touchedFields)&&r!==a)}i&&o&&j.state.next(u)}return i?u:{}},X=(e,a,l,o)=>{let i=b(n.errors,e),s=(S.isValid||C.isValid)&&w(a)&&n.isValid!==a;if(t.delayError&&l?(r=D(()=>O(e,l)))(t.delayError):(clearTimeout(A),r=null,l?x(n.errors,e,l):W(n.errors,e)),(l?!P(i,l):i)||!I(o)||s){let r={...o,...s&&w(a)?{isValid:a}:{},errors:n.errors,name:e};n={...n,...r},j.state.next(r)}},Z=async e=>{F(e,!0);let r=await t.resolver(f,t.context,el(e||g.mount,i,t.criteriaMode,t.shouldUseNativeValidation));return F(e),r},Y=async e=>{let{errors:r}=await Z(e);if(e)for(let t of e){let e=b(r,t);e?x(n.errors,t,e):W(n.errors,t)}else n.errors=r;return r},J=async(e,r,a={valid:!0})=>{for(let l in e){let o=e[l];if(o){let{_f:e,...l}=o;if(e){let l=g.array.has(e.name),i=o._f&&ed(o._f);i&&S.validatingFields&&F([e.name],!0);let s=await ek(o,g.disabled,f,E,t.shouldUseNativeValidation&&!r,l);if(i&&S.validatingFields&&F([e.name]),s[e.name]&&(a.valid=!1,r))break;r||(b(s,e.name)?l?eb(n.errors,s,e.name):x(n.errors,e.name,s[e.name]):W(n.errors,e.name))}I(l)||await J(l,r,a)}}return a.valid},Q=(e,r)=>!t.disabled&&(e&&r&&x(f,e,r),!P(eA(),d)),ee=(e,r,t)=>V(e,g,{...y.mount?f:m(r)?d:R(e)?{[e]:r}:r},t,r),et=(e,r,t={})=>{let n=b(i,e),l=r;if(n){let t=n._f;t&&(t.disabled||x(f,e,er(r,t)),l=U(t.ref)&&o(r)?"":r,H(t.ref)?[...t.ref.options].forEach(e=>e.selected=l.includes(e.value)):t.refs?a(t.ref)?t.refs.forEach(e=>{e.defaultChecked&&e.disabled||(Array.isArray(l)?e.checked=!!l.find(r=>r===e.value):e.checked=l===e.value||!!l)}):t.refs.forEach(e=>e.checked=e.value===l):z(t.ref)?t.ref.value="":(t.ref.value=l,t.ref.type||j.state.next({name:e,values:h(f)})))}(t.shouldDirty||t.shouldTouch)&&q(e,l,t.shouldTouch,t.shouldDirty,!0),t.shouldValidate&&ex(e)},en=(e,r,t)=>{for(let n in r){if(!r.hasOwnProperty(n))return;let a=r[n],o=e+"."+n,u=b(i,o);(g.array.has(e)||s(a)||u&&!u._f)&&!l(a)?en(o,a,t):et(o,a,t)}},eo=(e,r,t={})=>{let a=b(i,e),l=g.array.has(e),s=h(r);x(f,e,s),l?(j.array.next({name:e,values:h(f)}),(S.isDirty||S.dirtyFields||C.isDirty||C.dirtyFields)&&t.shouldDirty&&j.state.next({name:e,dirtyFields:$(d,f),isDirty:Q(e,s)})):!a||a._f||o(s)?et(e,s,t):en(e,s,t),ef(e,g)&&j.state.next({...n,name:e}),j.state.next({name:y.mount?e:void 0,values:h(f)})},eu=async e=>{y.mount=!0;let a=e.target,o=a.name,s=!0,d=b(i,o),c=e=>{s=Number.isNaN(e)||l(e)&&isNaN(e.getTime())||P(e,b(f,o,e))},p=es(t.mode),m=es(t.reValidateMode);if(d){let l,y,v=a.type?ea(d._f):u(e),w=e.type===k.BLUR||e.type===k.FOCUS_OUT,_=!ec(d._f)&&!t.resolver&&!b(n.errors,o)&&!d._f.deps||ev(w,b(n.touchedFields,o),n.isSubmitted,m,p),A=ef(o,g,w);x(f,o,v),w?a&&a.readOnly||(d._f.onBlur&&d._f.onBlur(e),r&&r(0)):d._f.onChange&&d._f.onChange(e);let D=q(o,v,w),R=!I(D)||A;if(w||j.state.next({name:o,type:e.type,values:h(f)}),_)return(S.isValid||C.isValid)&&("onBlur"===t.mode?w&&M():w||M()),R&&j.state.next({name:o,...A?{}:D});if(!w&&A&&j.state.next({...n}),t.resolver){let{errors:e}=await Z([o]);if(c(v),s){let r=eh(n.errors,i,o),t=eh(e,i,r.name||o);l=t.error,o=t.name,y=I(e)}}else F([o],!0),l=(await ek(d,g.disabled,f,E,t.shouldUseNativeValidation))[o],F([o]),c(v),s&&(l?y=!1:(S.isValid||C.isValid)&&(y=await J(i,!0)));s&&(d._f.deps&&(!Array.isArray(d._f.deps)||d._f.deps.length>0)&&ex(d._f.deps),X(o,y,l,D))}},ew=(e,r)=>{if(b(n.errors,r)&&e.focus)return e.focus(),1},ex=async(e,r={})=>{let a,l,o=T(e);if(t.resolver){let r=await Y(m(e)?e:o);a=I(r),l=e?!o.some(e=>b(r,e)):a}else e?((l=(await Promise.all(o.map(async e=>{let r=b(i,e);return await J(r&&r._f?{[e]:r}:r)}))).every(Boolean))||n.isValid)&&M():l=a=await J(i);return j.state.next({...!R(e)||(S.isValid||C.isValid)&&a!==n.isValid?{}:{name:e},...t.resolver||!e?{isValid:a}:{},errors:n.errors}),r.shouldFocus&&!l&&ep(i,ew,e?o:g.mount),l},eA=(e,r)=>{let t={...y.mount?f:d};return r&&(t=function e(r,t){let n={};for(let a in r)if(r.hasOwnProperty(a)){let l=r[a],o=t[a];if(l&&s(l)&&o){let r=e(l,o);s(r)&&(n[a]=r)}else r[a]&&(n[a]=o)}return n}(r.dirtyFields?n.dirtyFields:n.touchedFields,t)),m(e)?t:R(e)?b(t,e):e.map(e=>b(t,e))},eS=(e,r)=>({invalid:!!b((r||n).errors,e),isDirty:!!b((r||n).dirtyFields,e),error:b((r||n).errors,e),isValidating:!!b(n.validatingFields,e),isTouched:!!b((r||n).touchedFields,e)}),eC=(e,r,t)=>{let a=(b(i,e,{_f:{}})._f||{}).ref,{ref:l,message:o,type:s,...u}=b(n.errors,e)||{};x(n.errors,e,{...u,...r,ref:a}),j.state.next({name:e,errors:n.errors,isValid:!1}),t&&t.shouldFocus&&a&&a.focus&&a.focus()},ej=e=>j.state.subscribe({next:r=>{em(e.name,r.name,e.exact)&&ey(r,e.formState||S,eO,e.reRenderRoot)&&e.callback({values:{...f},...n,...r,defaultValues:d})}}).unsubscribe,eE=(e,r={})=>{for(let a of e?T(e):g.mount)g.mount.delete(a),g.array.delete(a),r.keepValue||(W(i,a),W(f,a)),r.keepError||W(n.errors,a),r.keepDirty||W(n.dirtyFields,a),r.keepTouched||W(n.touchedFields,a),r.keepIsValidating||W(n.validatingFields,a),t.shouldUnregister||r.keepDefaultValue||W(d,a);j.state.next({values:h(f)}),j.state.next({...n,...!r.keepDirty?{}:{isDirty:Q()}}),r.keepIsValid||M()},eD=({disabled:e,name:r})=>{(w(e)&&y.mount||e||g.disabled.has(r))&&(e?g.disabled.add(r):g.disabled.delete(r))},eM=(e,r={})=>{let n=b(i,e),a=w(r.disabled)||w(t.disabled);return x(i,e,{...n||{},_f:{...n&&n._f?n._f:{ref:{name:e}},name:e,mount:!0,...r}}),g.mount.add(e),n?eD({disabled:w(r.disabled)?r.disabled:t.disabled,name:e}):L(e,!0,r.value),{...a?{disabled:r.disabled||t.disabled}:{},...t.progressive?{required:!!r.required,min:ei(r.min),max:ei(r.max),minLength:ei(r.minLength),maxLength:ei(r.maxLength),pattern:ei(r.pattern)}:{},name:e,onChange:eu,onBlur:eu,ref:a=>{if(a){eM(e,r),n=b(i,e);let t=m(a.value)&&a.querySelectorAll&&a.querySelectorAll("input,select,textarea")[0]||a,l=B(t),o=n._f.refs||[];(l?o.find(e=>e===t):t===n._f.ref)||(x(i,e,{_f:{...n._f,...l?{refs:[...o.filter(G),t,...Array.isArray(b(d,e))?[{}]:[]],ref:{type:t.type,name:e}}:{ref:t}}}),L(e,!1,void 0,t))}else(n=b(i,e,{}))._f&&(n._f.mount=!1),(t.shouldUnregister||r.shouldUnregister)&&!(c(g.array,e)&&y.action)&&g.unMount.add(e)}}},eR=()=>t.shouldFocusError&&ep(i,ew,g.mount),eV=(e,r)=>async a=>{let l;a&&(a.preventDefault&&a.preventDefault(),a.persist&&a.persist());let o=h(f);if(j.state.next({isSubmitting:!0}),t.resolver){let{errors:e,values:r}=await Z();n.errors=e,o=h(r)}else await J(i);if(g.disabled.size)for(let e of g.disabled)W(o,e);if(W(n.errors,"root"),I(n.errors)){j.state.next({errors:{}});try{await e(o,a)}catch(e){l=e}}else r&&await r({...n.errors},a),eR(),setTimeout(eR);if(j.state.next({isSubmitted:!0,isSubmitting:!1,isSubmitSuccessful:I(n.errors)&&!l,submitCount:n.submitCount+1,errors:n.errors}),l)throw l},eF=(e,r={})=>{let a=e?h(e):d,l=h(a),o=I(e),s=o?d:l;if(r.keepDefaultValues||(d=a),!r.keepValues){if(r.keepDirtyValues)for(let e of Array.from(new Set([...g.mount,...Object.keys($(d,f))])))b(n.dirtyFields,e)?x(s,e,b(f,e)):eo(e,b(s,e));else{if(p&&m(e))for(let e of g.mount){let r=b(i,e);if(r&&r._f){let e=Array.isArray(r._f.refs)?r._f.refs[0]:r._f.ref;if(U(e)){let r=e.closest("form");if(r){r.reset();break}}}}if(r.keepFieldsRef)for(let e of g.mount)eo(e,b(s,e));else i={}}f=t.shouldUnregister?r.keepDefaultValues?h(d):{}:h(s),j.array.next({values:{...s}}),j.state.next({values:{...s}})}g={mount:r.keepDirtyValues?g.mount:new Set,unMount:new Set,array:new Set,disabled:new Set,watch:new Set,watchAll:!1,focus:""},y.mount=!S.isValid||!!r.keepIsValid||!!r.keepDirtyValues,y.watch=!!t.shouldUnregister,j.state.next({submitCount:r.keepSubmitCount?n.submitCount:0,isDirty:!o&&(r.keepDirty?n.isDirty:!!(r.keepDefaultValues&&!P(e,d))),isSubmitted:!!r.keepIsSubmitted&&n.isSubmitted,dirtyFields:o?{}:r.keepDirtyValues?r.keepDefaultValues&&f?$(d,f):n.dirtyFields:r.keepDefaultValues&&e?$(d,e):r.keepDirty?n.dirtyFields:{},touchedFields:r.keepTouched?n.touchedFields:{},errors:r.keepErrors?n.errors:{},isSubmitSuccessful:!!r.keepIsSubmitSuccessful&&n.isSubmitSuccessful,isSubmitting:!1,defaultValues:d})},eP=(e,r)=>eF(K(e)?e(f):e,r),eO=e=>{n={...n,...e}},eL={control:{register:eM,unregister:eE,getFieldState:eS,handleSubmit:eV,setError:eC,_subscribe:ej,_runSchema:Z,_focusError:eR,_getWatch:ee,_getDirty:Q,_setValid:M,_setFieldArray:(e,r=[],a,l,o=!0,s=!0)=>{if(l&&a&&!t.disabled){if(y.action=!0,s&&Array.isArray(b(i,e))){let r=a(b(i,e),l.argA,l.argB);o&&x(i,e,r)}if(s&&Array.isArray(b(n.errors,e))){let r=a(b(n.errors,e),l.argA,l.argB);o&&x(n.errors,e,r),eg(n.errors,e)}if((S.touchedFields||C.touchedFields)&&s&&Array.isArray(b(n.touchedFields,e))){let r=a(b(n.touchedFields,e),l.argA,l.argB);o&&x(n.touchedFields,e,r)}(S.dirtyFields||C.dirtyFields)&&(n.dirtyFields=$(d,f)),j.state.next({name:e,isDirty:Q(e,r),dirtyFields:n.dirtyFields,errors:n.errors,isValid:n.isValid})}else x(f,e,r)},_setDisabledField:eD,_setErrors:e=>{n.errors=e,j.state.next({errors:n.errors,isValid:!1})},_getFieldArray:e=>v(b(y.mount?f:d,e,t.shouldUnregister?b(d,e,[]):[])),_reset:eF,_resetDefaultValues:()=>K(t.defaultValues)&&t.defaultValues().then(e=>{eP(e,t.resetOptions),j.state.next({isLoading:!1})}),_removeUnmounted:()=>{for(let e of g.unMount){let r=b(i,e);r&&(r._f.refs?r._f.refs.every(e=>!G(e)):!G(r._f.ref))&&eE(e)}g.unMount=new Set},_disableForm:e=>{w(e)&&(j.state.next({disabled:e}),ep(i,(r,t)=>{let n=b(i,t);n&&(r.disabled=n._f.disabled||e,Array.isArray(n._f.refs)&&n._f.refs.forEach(r=>{r.disabled=n._f.disabled||e}))},0,!1))},_subjects:j,_proxyFormState:S,get _fields(){return i},get _formValues(){return f},get _state(){return y},set _state(value){y=value},get _defaultValues(){return d},get _names(){return g},set _names(value){g=value},get _formState(){return n},get _options(){return t},set _options(value){t={...t,...value}}},subscribe:e=>(y.mount=!0,C={...C,...e.formState},ej({...e,formState:C})),trigger:ex,register:eM,handleSubmit:eV,watch:(e,r)=>K(e)?j.state.subscribe({next:t=>"values"in t&&e(ee(void 0,r),t)}):ee(e,r,!0),setValue:eo,getValues:eA,reset:eP,resetField:(e,r={})=>{b(i,e)&&(m(r.defaultValue)?eo(e,h(b(d,e))):(eo(e,r.defaultValue),x(d,e,h(r.defaultValue))),r.keepTouched||W(n.touchedFields,e),r.keepDirty||(W(n.dirtyFields,e),n.isDirty=r.defaultValue?Q(e,h(b(d,e))):Q()),!r.keepError&&(W(n.errors,e),S.isValid&&M()),j.state.next({...n}))},clearErrors:e=>{e&&T(e).forEach(e=>W(n.errors,e)),j.state.next({errors:e?n.errors:{}})},unregister:eE,setError:eC,setFocus:(e,r={})=>{let t=b(i,e),n=t&&t._f;if(n){let e=n.refs?n.refs[0]:n.ref;e.focus&&(e.focus(),r.shouldSelect&&K(e.select)&&e.select())}},getFieldState:eS};return{...eL,formControl:eL}}(e);r.current={...n,formState:i}}let f=r.current.control;return f._options=e,D(()=>{let e=f._subscribe({formState:f._proxyFormState,callback:()=>d({...f._formState}),reRenderRoot:!0});return d(e=>({...e,isReady:!0})),f._formState.isReady=!0,e},[f]),n.useEffect(()=>f._disableForm(e.disabled),[f,e.disabled]),n.useEffect(()=>{e.mode&&(f._options.mode=e.mode),e.reValidateMode&&(f._options.reValidateMode=e.reValidateMode)},[f,e.mode,e.reValidateMode]),n.useEffect(()=>{e.errors&&(f._setErrors(e.errors),f._focusError())},[f,e.errors]),n.useEffect(()=>{e.shouldUnregister&&f._subjects.state.next({values:f._getWatch()})},[f,e.shouldUnregister]),n.useEffect(()=>{if(f._proxyFormState.isDirty){let e=f._getDirty();e!==i.isDirty&&f._subjects.state.next({isDirty:e})}},[f,i.isDirty]),n.useEffect(()=>{e.values&&!P(e.values,t.current)?(f._reset(e.values,{keepFieldsRef:!0,...f._options.resetOptions}),t.current=e.values,d(e=>({...e}))):f._resetDefaultValues()},[f,e.values]),n.useEffect(()=>{f._state.mount||(f._setValid(),f._state.mount=!0),f._state.watch&&(f._state.watch=!1,f._subjects.state.next({...f._formState})),f._removeUnmounted()}),r.current.formState=E(i,f),r.current}},1853:(e,r,t)=>{t.d(r,{C1:()=>_,bL:()=>x});var n=t(4398),a=t(2050),l=t(940),o=t(6687),i=t(6657),s=t(6017),u=t(4753),d=t(6175),c=t(3780),f=t(3422),p="Checkbox",[h,y]=(0,l.A)(p),[m,v]=h(p);function g(e){let{__scopeCheckbox:r,checked:t,children:a,defaultChecked:l,disabled:o,form:s,name:u,onCheckedChange:d,required:c,value:h="on",internal_do_not_use_render:y}=e,[v,g]=(0,i.i)({prop:t,defaultProp:null!=l&&l,onChange:d,caller:p}),[b,w]=n.useState(null),[x,k]=n.useState(null),_=n.useRef(!1),A=!b||!!s||!!b.closest("form"),S={checked:v,disabled:o,setChecked:g,control:b,setControl:w,name:u,form:s,value:h,hasConsumerStoppedPropagationRef:_,required:c,defaultChecked:!C(l)&&l,isFormControl:A,bubbleInput:x,setBubbleInput:k};return(0,f.jsx)(m,{scope:r,...S,children:"function"==typeof y?y(S):a})}var b="CheckboxTrigger",w=n.forwardRef((e,r)=>{let{__scopeCheckbox:t,onKeyDown:l,onClick:i,...s}=e,{control:u,value:d,disabled:p,checked:h,required:y,setControl:m,setChecked:g,hasConsumerStoppedPropagationRef:w,isFormControl:x,bubbleInput:k}=v(b,t),_=(0,a.s)(r,m),A=n.useRef(h);return n.useEffect(()=>{let e=null==u?void 0:u.form;if(e){let r=()=>g(A.current);return e.addEventListener("reset",r),()=>e.removeEventListener("reset",r)}},[u,g]),(0,f.jsx)(c.sG.button,{type:"button",role:"checkbox","aria-checked":C(h)?"mixed":h,"aria-required":y,"data-state":j(h),"data-disabled":p?"":void 0,disabled:p,value:d,...s,ref:_,onKeyDown:(0,o.mK)(l,e=>{"Enter"===e.key&&e.preventDefault()}),onClick:(0,o.mK)(i,e=>{g(e=>!!C(e)||!e),k&&x&&(w.current=e.isPropagationStopped(),w.current||e.stopPropagation())})})});w.displayName=b;var x=n.forwardRef((e,r)=>{let{__scopeCheckbox:t,name:n,checked:a,defaultChecked:l,required:o,disabled:i,value:s,onCheckedChange:u,form:d,...c}=e;return(0,f.jsx)(g,{__scopeCheckbox:t,checked:a,defaultChecked:l,disabled:i,required:o,onCheckedChange:u,name:n,form:d,value:s,internal_do_not_use_render:e=>{let{isFormControl:n}=e;return(0,f.jsxs)(f.Fragment,{children:[(0,f.jsx)(w,{...c,ref:r,__scopeCheckbox:t}),n&&(0,f.jsx)(S,{__scopeCheckbox:t})]})}})});x.displayName=p;var k="CheckboxIndicator",_=n.forwardRef((e,r)=>{let{__scopeCheckbox:t,forceMount:n,...a}=e,l=v(k,t);return(0,f.jsx)(d.C,{present:n||C(l.checked)||!0===l.checked,children:(0,f.jsx)(c.sG.span,{"data-state":j(l.checked),"data-disabled":l.disabled?"":void 0,...a,ref:r,style:{pointerEvents:"none",...e.style}})})});_.displayName=k;var A="CheckboxBubbleInput",S=n.forwardRef((e,r)=>{let{__scopeCheckbox:t,...l}=e,{control:o,hasConsumerStoppedPropagationRef:i,checked:d,defaultChecked:p,required:h,disabled:y,name:m,value:g,form:b,bubbleInput:w,setBubbleInput:x}=v(A,t),k=(0,a.s)(r,x),_=(0,s.Z)(d),S=(0,u.X)(o);n.useEffect(()=>{if(!w)return;let e=Object.getOwnPropertyDescriptor(window.HTMLInputElement.prototype,"checked").set,r=!i.current;if(_!==d&&e){let t=new Event("click",{bubbles:r});w.indeterminate=C(d),e.call(w,!C(d)&&d),w.dispatchEvent(t)}},[w,_,d,i]);let j=n.useRef(!C(d)&&d);return(0,f.jsx)(c.sG.input,{type:"checkbox","aria-hidden":!0,defaultChecked:null!=p?p:j.current,required:h,disabled:y,name:m,value:g,form:b,...l,tabIndex:-1,ref:k,style:{...l.style,...S,position:"absolute",pointerEvents:"none",opacity:0,margin:0,transform:"translateX(-100%)"}})});function C(e){return"indeterminate"===e}function j(e){return C(e)?"indeterminate":e?"checked":"unchecked"}S.displayName=A},1935:(e,r,t)=>{t.d(r,{A:()=>n});let n=(0,t(3929).A)("users",[["path",{d:"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2",key:"1yyitq"}],["circle",{cx:"9",cy:"7",r:"4",key:"nufk8"}],["path",{d:"M22 21v-2a4 4 0 0 0-3-3.87",key:"kshegd"}],["path",{d:"M16 3.13a4 4 0 0 1 0 7.75",key:"1da9ce"}]])},2034:(e,r,t)=>{t.d(r,{A:()=>n});let n=(0,t(3929).A)("cpu",[["path",{d:"M12 20v2",key:"1lh1kg"}],["path",{d:"M12 2v2",key:"tus03m"}],["path",{d:"M17 20v2",key:"1rnc9c"}],["path",{d:"M17 2v2",key:"11trls"}],["path",{d:"M2 12h2",key:"1t8f8n"}],["path",{d:"M2 17h2",key:"7oei6x"}],["path",{d:"M2 7h2",key:"asdhe0"}],["path",{d:"M20 12h2",key:"1q8mjw"}],["path",{d:"M20 17h2",key:"1fpfkl"}],["path",{d:"M20 7h2",key:"1o8tra"}],["path",{d:"M7 20v2",key:"4gnj0m"}],["path",{d:"M7 2v2",key:"1i4yhu"}],["rect",{x:"4",y:"4",width:"16",height:"16",rx:"2",key:"1vbyd7"}],["rect",{x:"8",y:"8",width:"8",height:"8",rx:"1",key:"z9xiuo"}]])},2267:(e,r,t)=>{t.d(r,{A:()=>n});let n=(0,t(3929).A)("triangle-alert",[["path",{d:"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3",key:"wmoenq"}],["path",{d:"M12 9v4",key:"juzpu7"}],["path",{d:"M12 17h.01",key:"p32p05"}]])},2390:(e,r,t)=>{t.d(r,{A:()=>n});let n=(0,t(3929).A)("send",[["path",{d:"M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z",key:"1ffxy3"}],["path",{d:"m21.854 2.147-10.94 10.939",key:"12cjpa"}]])},2434:(e,r,t)=>{t.d(r,{A:()=>n});let n=(0,t(3929).A)("loader-circle",[["path",{d:"M21 12a9 9 0 1 1-6.219-8.56",key:"13zald"}]])},2612:(e,r,t)=>{t.d(r,{A:()=>n});let n=(0,t(3929).A)("funnel",[["path",{d:"M10 20a1 1 0 0 0 .553.895l2 1A1 1 0 0 0 14 21v-7a2 2 0 0 1 .517-1.341L21.74 4.67A1 1 0 0 0 21 3H3a1 1 0 0 0-.742 1.67l7.225 7.989A2 2 0 0 1 10 14z",key:"sc7q7i"}]])},3545:(e,r,t)=>{t.d(r,{A:()=>n});let n=(0,t(3929).A)("square-check-big",[["path",{d:"M21 10.5V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h12.5",key:"1uzm8b"}],["path",{d:"m9 11 3 3L22 4",key:"1pflzl"}]])},3728:(e,r,t)=>{t.d(r,{A:()=>n});let n=(0,t(3929).A)("refresh-cw",[["path",{d:"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8",key:"v9h5vc"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}],["path",{d:"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16",key:"3uifl3"}],["path",{d:"M8 16H3v5",key:"1cv678"}]])},3732:(e,r,t)=>{t.d(r,{A:()=>n});let n=(0,t(3929).A)("ellipsis-vertical",[["circle",{cx:"12",cy:"12",r:"1",key:"41hilf"}],["circle",{cx:"12",cy:"5",r:"1",key:"gxeob9"}],["circle",{cx:"12",cy:"19",r:"1",key:"lyex9k"}]])},4713:(e,r,t)=>{t.d(r,{A:()=>n});let n=(0,t(3929).A)("volume-2",[["path",{d:"M11 4.702a.705.705 0 0 0-1.203-.498L6.413 7.587A1.4 1.4 0 0 1 5.416 8H3a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h2.416a1.4 1.4 0 0 1 .997.413l3.383 3.384A.705.705 0 0 0 11 19.298z",key:"uqj9uw"}],["path",{d:"M16 9a5 5 0 0 1 0 6",key:"1q6k2b"}],["path",{d:"M19.364 18.364a9 9 0 0 0 0-12.728",key:"ijwkga"}]])},4717:(e,r,t)=>{t.d(r,{A:()=>n});let n=(0,t(3929).A)("circle-x",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m15 9-6 6",key:"1uzhvr"}],["path",{d:"m9 9 6 6",key:"z0biqf"}]])},4938:(e,r,t)=>{t.d(r,{A:()=>n});let n=(0,t(3929).A)("file-text",[["path",{d:"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z",key:"1rqfz7"}],["path",{d:"M14 2v4a2 2 0 0 0 2 2h4",key:"tnqrlb"}],["path",{d:"M10 9H8",key:"b1mrlr"}],["path",{d:"M16 13H8",key:"t4e002"}],["path",{d:"M16 17H8",key:"z1uh3a"}]])},4963:(e,r,t)=>{t.d(r,{A:()=>n});let n=(0,t(3929).A)("square",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}]])},5195:(e,r,t)=>{t.d(r,{A:()=>n});let n=(0,t(3929).A)("key",[["path",{d:"m15.5 7.5 2.3 2.3a1 1 0 0 0 1.4 0l2.1-2.1a1 1 0 0 0 0-1.4L19 4",key:"g0fldk"}],["path",{d:"m21 2-9.6 9.6",key:"1j0ho8"}],["circle",{cx:"7.5",cy:"15.5",r:"5.5",key:"yqb3hr"}]])},6049:(e,r,t)=>{t.d(r,{UC:()=>eW,q7:()=>eX,ZL:()=>eG,bL:()=>eq,wv:()=>eZ,l9:()=>eB});var n=t(4398),a=t(6687),l=t(2050),o=t(940),i=t(6657),s=t(3780),u=t(6383),d=t(7689),c=t(3213),f=t(7),p=t(3138),h=t(6565),y=t(6387),m=t(1732),v=t(6175),g=t(718),b=t(6950),w=t(7589),x=t(3871),k=t(3338),_=t(3422),A=["Enter"," "],S=["ArrowUp","PageDown","End"],C=["ArrowDown","PageUp","Home",...S],j={ltr:[...A,"ArrowRight"],rtl:[...A,"ArrowLeft"]},E={ltr:["ArrowLeft"],rtl:["ArrowRight"]},D="Menu",[M,R,V]=(0,u.N)(D),[F,P]=(0,o.A)(D,[V,y.Bk,g.RG]),O=(0,y.Bk)(),L=(0,g.RG)(),[T,N]=F(D),[I,z]=F(D),K=e=>{let{__scopeMenu:r,open:t=!1,children:a,dir:l,onOpenChange:o,modal:i=!0}=e,s=O(r),[u,c]=n.useState(null),f=n.useRef(!1),p=(0,w.c)(o),h=(0,d.jH)(l);return n.useEffect(()=>{let e=()=>{f.current=!0,document.addEventListener("pointerdown",r,{capture:!0,once:!0}),document.addEventListener("pointermove",r,{capture:!0,once:!0})},r=()=>f.current=!1;return document.addEventListener("keydown",e,{capture:!0}),()=>{document.removeEventListener("keydown",e,{capture:!0}),document.removeEventListener("pointerdown",r,{capture:!0}),document.removeEventListener("pointermove",r,{capture:!0})}},[]),(0,_.jsx)(y.bL,{...s,children:(0,_.jsx)(T,{scope:r,open:t,onOpenChange:p,content:u,onContentChange:c,children:(0,_.jsx)(I,{scope:r,onClose:n.useCallback(()=>p(!1),[p]),isUsingKeyboardRef:f,dir:h,modal:i,children:a})})})};K.displayName=D;var U=n.forwardRef((e,r)=>{let{__scopeMenu:t,...n}=e,a=O(t);return(0,_.jsx)(y.Mz,{...a,...n,ref:r})});U.displayName="MenuAnchor";var H="MenuPortal",[q,B]=F(H,{forceMount:void 0}),G=e=>{let{__scopeMenu:r,forceMount:t,children:n,container:a}=e,l=N(H,r);return(0,_.jsx)(q,{scope:r,forceMount:t,children:(0,_.jsx)(v.C,{present:t||l.open,children:(0,_.jsx)(m.Z,{asChild:!0,container:a,children:n})})})};G.displayName=H;var W="MenuContent",[X,Z]=F(W),Y=n.forwardRef((e,r)=>{let t=B(W,e.__scopeMenu),{forceMount:n=t.forceMount,...a}=e,l=N(W,e.__scopeMenu),o=z(W,e.__scopeMenu);return(0,_.jsx)(M.Provider,{scope:e.__scopeMenu,children:(0,_.jsx)(v.C,{present:n||l.open,children:(0,_.jsx)(M.Slot,{scope:e.__scopeMenu,children:o.modal?(0,_.jsx)($,{...a,ref:r}):(0,_.jsx)(J,{...a,ref:r})})})})}),$=n.forwardRef((e,r)=>{let t=N(W,e.__scopeMenu),o=n.useRef(null),i=(0,l.s)(r,o);return n.useEffect(()=>{let e=o.current;if(e)return(0,x.Eq)(e)},[]),(0,_.jsx)(ee,{...e,ref:i,trapFocus:t.open,disableOutsidePointerEvents:t.open,disableOutsideScroll:!0,onFocusOutside:(0,a.mK)(e.onFocusOutside,e=>e.preventDefault(),{checkForDefaultPrevented:!1}),onDismiss:()=>t.onOpenChange(!1)})}),J=n.forwardRef((e,r)=>{let t=N(W,e.__scopeMenu);return(0,_.jsx)(ee,{...e,ref:r,trapFocus:!1,disableOutsidePointerEvents:!1,disableOutsideScroll:!1,onDismiss:()=>t.onOpenChange(!1)})}),Q=(0,b.TL)("MenuContent.ScrollLock"),ee=n.forwardRef((e,r)=>{let{__scopeMenu:t,loop:o=!1,trapFocus:i,onOpenAutoFocus:s,onCloseAutoFocus:u,disableOutsidePointerEvents:d,onEntryFocus:h,onEscapeKeyDown:m,onPointerDownOutside:v,onFocusOutside:b,onInteractOutside:w,onDismiss:x,disableOutsideScroll:A,...j}=e,E=N(W,t),D=z(W,t),M=O(t),V=L(t),F=R(t),[P,T]=n.useState(null),I=n.useRef(null),K=(0,l.s)(r,I,E.onContentChange),U=n.useRef(0),H=n.useRef(""),q=n.useRef(0),B=n.useRef(null),G=n.useRef("right"),Z=n.useRef(0),Y=A?k.A:n.Fragment,$=e=>{var r,t;let n=H.current+e,a=F().filter(e=>!e.disabled),l=document.activeElement,o=null==(r=a.find(e=>e.ref.current===l))?void 0:r.textValue,i=function(e,r,t){var n;let a=r.length>1&&Array.from(r).every(e=>e===r[0])?r[0]:r,l=t?e.indexOf(t):-1,o=(n=Math.max(l,0),e.map((r,t)=>e[(n+t)%e.length]));1===a.length&&(o=o.filter(e=>e!==t));let i=o.find(e=>e.toLowerCase().startsWith(a.toLowerCase()));return i!==t?i:void 0}(a.map(e=>e.textValue),n,o),s=null==(t=a.find(e=>e.textValue===i))?void 0:t.ref.current;!function e(r){H.current=r,window.clearTimeout(U.current),""!==r&&(U.current=window.setTimeout(()=>e(""),1e3))}(n),s&&setTimeout(()=>s.focus())};n.useEffect(()=>()=>window.clearTimeout(U.current),[]),(0,f.Oh)();let J=n.useCallback(e=>{var r,t;return G.current===(null==(r=B.current)?void 0:r.side)&&function(e,r){return!!r&&function(e,r){let{x:t,y:n}=e,a=!1;for(let e=0,l=r.length-1;en!=c>n&&t<(d-s)*(n-u)/(c-u)+s&&(a=!a)}return a}({x:e.clientX,y:e.clientY},r)}(e,null==(t=B.current)?void 0:t.area)},[]);return(0,_.jsx)(X,{scope:t,searchRef:H,onItemEnter:n.useCallback(e=>{J(e)&&e.preventDefault()},[J]),onItemLeave:n.useCallback(e=>{var r;J(e)||(null==(r=I.current)||r.focus(),T(null))},[J]),onTriggerLeave:n.useCallback(e=>{J(e)&&e.preventDefault()},[J]),pointerGraceTimerRef:q,onPointerGraceIntentChange:n.useCallback(e=>{B.current=e},[]),children:(0,_.jsx)(Y,{...A?{as:Q,allowPinchZoom:!0}:void 0,children:(0,_.jsx)(p.n,{asChild:!0,trapped:i,onMountAutoFocus:(0,a.mK)(s,e=>{var r;e.preventDefault(),null==(r=I.current)||r.focus({preventScroll:!0})}),onUnmountAutoFocus:u,children:(0,_.jsx)(c.qW,{asChild:!0,disableOutsidePointerEvents:d,onEscapeKeyDown:m,onPointerDownOutside:v,onFocusOutside:b,onInteractOutside:w,onDismiss:x,children:(0,_.jsx)(g.bL,{asChild:!0,...V,dir:D.dir,orientation:"vertical",loop:o,currentTabStopId:P,onCurrentTabStopIdChange:T,onEntryFocus:(0,a.mK)(h,e=>{D.isUsingKeyboardRef.current||e.preventDefault()}),preventScrollOnEntryFocus:!0,children:(0,_.jsx)(y.UC,{role:"menu","aria-orientation":"vertical","data-state":eC(E.open),"data-radix-menu-content":"",dir:D.dir,...M,...j,ref:K,style:{outline:"none",...j.style},onKeyDown:(0,a.mK)(j.onKeyDown,e=>{let r=e.target.closest("[data-radix-menu-content]")===e.currentTarget,t=e.ctrlKey||e.altKey||e.metaKey,n=1===e.key.length;r&&("Tab"===e.key&&e.preventDefault(),!t&&n&&$(e.key));let a=I.current;if(e.target!==a||!C.includes(e.key))return;e.preventDefault();let l=F().filter(e=>!e.disabled).map(e=>e.ref.current);S.includes(e.key)&&l.reverse(),function(e){let r=document.activeElement;for(let t of e)if(t===r||(t.focus(),document.activeElement!==r))return}(l)}),onBlur:(0,a.mK)(e.onBlur,e=>{e.currentTarget.contains(e.target)||(window.clearTimeout(U.current),H.current="")}),onPointerMove:(0,a.mK)(e.onPointerMove,eD(e=>{let r=e.target,t=Z.current!==e.clientX;e.currentTarget.contains(r)&&t&&(G.current=e.clientX>Z.current?"right":"left",Z.current=e.clientX)}))})})})})})})});Y.displayName=W;var er=n.forwardRef((e,r)=>{let{__scopeMenu:t,...n}=e;return(0,_.jsx)(s.sG.div,{role:"group",...n,ref:r})});er.displayName="MenuGroup";var et=n.forwardRef((e,r)=>{let{__scopeMenu:t,...n}=e;return(0,_.jsx)(s.sG.div,{...n,ref:r})});et.displayName="MenuLabel";var en="MenuItem",ea="menu.itemSelect",el=n.forwardRef((e,r)=>{let{disabled:t=!1,onSelect:o,...i}=e,u=n.useRef(null),d=z(en,e.__scopeMenu),c=Z(en,e.__scopeMenu),f=(0,l.s)(r,u),p=n.useRef(!1);return(0,_.jsx)(eo,{...i,ref:f,disabled:t,onClick:(0,a.mK)(e.onClick,()=>{let e=u.current;if(!t&&e){let r=new CustomEvent(ea,{bubbles:!0,cancelable:!0});e.addEventListener(ea,e=>null==o?void 0:o(e),{once:!0}),(0,s.hO)(e,r),r.defaultPrevented?p.current=!1:d.onClose()}}),onPointerDown:r=>{var t;null==(t=e.onPointerDown)||t.call(e,r),p.current=!0},onPointerUp:(0,a.mK)(e.onPointerUp,e=>{var r;p.current||null==(r=e.currentTarget)||r.click()}),onKeyDown:(0,a.mK)(e.onKeyDown,e=>{let r=""!==c.searchRef.current;t||r&&" "===e.key||A.includes(e.key)&&(e.currentTarget.click(),e.preventDefault())})})});el.displayName=en;var eo=n.forwardRef((e,r)=>{let{__scopeMenu:t,disabled:o=!1,textValue:i,...u}=e,d=Z(en,t),c=L(t),f=n.useRef(null),p=(0,l.s)(r,f),[h,y]=n.useState(!1),[m,v]=n.useState("");return n.useEffect(()=>{let e=f.current;if(e){var r;v((null!=(r=e.textContent)?r:"").trim())}},[u.children]),(0,_.jsx)(M.ItemSlot,{scope:t,disabled:o,textValue:null!=i?i:m,children:(0,_.jsx)(g.q7,{asChild:!0,...c,focusable:!o,children:(0,_.jsx)(s.sG.div,{role:"menuitem","data-highlighted":h?"":void 0,"aria-disabled":o||void 0,"data-disabled":o?"":void 0,...u,ref:p,onPointerMove:(0,a.mK)(e.onPointerMove,eD(e=>{o?d.onItemLeave(e):(d.onItemEnter(e),e.defaultPrevented||e.currentTarget.focus({preventScroll:!0}))})),onPointerLeave:(0,a.mK)(e.onPointerLeave,eD(e=>d.onItemLeave(e))),onFocus:(0,a.mK)(e.onFocus,()=>y(!0)),onBlur:(0,a.mK)(e.onBlur,()=>y(!1))})})})}),ei=n.forwardRef((e,r)=>{let{checked:t=!1,onCheckedChange:n,...l}=e;return(0,_.jsx)(ey,{scope:e.__scopeMenu,checked:t,children:(0,_.jsx)(el,{role:"menuitemcheckbox","aria-checked":ej(t)?"mixed":t,...l,ref:r,"data-state":eE(t),onSelect:(0,a.mK)(l.onSelect,()=>null==n?void 0:n(!!ej(t)||!t),{checkForDefaultPrevented:!1})})})});ei.displayName="MenuCheckboxItem";var es="MenuRadioGroup",[eu,ed]=F(es,{value:void 0,onValueChange:()=>{}}),ec=n.forwardRef((e,r)=>{let{value:t,onValueChange:n,...a}=e,l=(0,w.c)(n);return(0,_.jsx)(eu,{scope:e.__scopeMenu,value:t,onValueChange:l,children:(0,_.jsx)(er,{...a,ref:r})})});ec.displayName=es;var ef="MenuRadioItem",ep=n.forwardRef((e,r)=>{let{value:t,...n}=e,l=ed(ef,e.__scopeMenu),o=t===l.value;return(0,_.jsx)(ey,{scope:e.__scopeMenu,checked:o,children:(0,_.jsx)(el,{role:"menuitemradio","aria-checked":o,...n,ref:r,"data-state":eE(o),onSelect:(0,a.mK)(n.onSelect,()=>{var e;return null==(e=l.onValueChange)?void 0:e.call(l,t)},{checkForDefaultPrevented:!1})})})});ep.displayName=ef;var eh="MenuItemIndicator",[ey,em]=F(eh,{checked:!1}),ev=n.forwardRef((e,r)=>{let{__scopeMenu:t,forceMount:n,...a}=e,l=em(eh,t);return(0,_.jsx)(v.C,{present:n||ej(l.checked)||!0===l.checked,children:(0,_.jsx)(s.sG.span,{...a,ref:r,"data-state":eE(l.checked)})})});ev.displayName=eh;var eg=n.forwardRef((e,r)=>{let{__scopeMenu:t,...n}=e;return(0,_.jsx)(s.sG.div,{role:"separator","aria-orientation":"horizontal",...n,ref:r})});eg.displayName="MenuSeparator";var eb=n.forwardRef((e,r)=>{let{__scopeMenu:t,...n}=e,a=O(t);return(0,_.jsx)(y.i3,{...a,...n,ref:r})});eb.displayName="MenuArrow";var[ew,ex]=F("MenuSub"),ek="MenuSubTrigger",e_=n.forwardRef((e,r)=>{let t=N(ek,e.__scopeMenu),o=z(ek,e.__scopeMenu),i=ex(ek,e.__scopeMenu),s=Z(ek,e.__scopeMenu),u=n.useRef(null),{pointerGraceTimerRef:d,onPointerGraceIntentChange:c}=s,f={__scopeMenu:e.__scopeMenu},p=n.useCallback(()=>{u.current&&window.clearTimeout(u.current),u.current=null},[]);return n.useEffect(()=>p,[p]),n.useEffect(()=>{let e=d.current;return()=>{window.clearTimeout(e),c(null)}},[d,c]),(0,_.jsx)(U,{asChild:!0,...f,children:(0,_.jsx)(eo,{id:i.triggerId,"aria-haspopup":"menu","aria-expanded":t.open,"aria-controls":i.contentId,"data-state":eC(t.open),...e,ref:(0,l.t)(r,i.onTriggerChange),onClick:r=>{var n;null==(n=e.onClick)||n.call(e,r),e.disabled||r.defaultPrevented||(r.currentTarget.focus(),t.open||t.onOpenChange(!0))},onPointerMove:(0,a.mK)(e.onPointerMove,eD(r=>{s.onItemEnter(r),!r.defaultPrevented&&(e.disabled||t.open||u.current||(s.onPointerGraceIntentChange(null),u.current=window.setTimeout(()=>{t.onOpenChange(!0),p()},100)))})),onPointerLeave:(0,a.mK)(e.onPointerLeave,eD(e=>{var r,n;p();let a=null==(r=t.content)?void 0:r.getBoundingClientRect();if(a){let r=null==(n=t.content)?void 0:n.dataset.side,l="right"===r,o=a[l?"left":"right"],i=a[l?"right":"left"];s.onPointerGraceIntentChange({area:[{x:e.clientX+(l?-5:5),y:e.clientY},{x:o,y:a.top},{x:i,y:a.top},{x:i,y:a.bottom},{x:o,y:a.bottom}],side:r}),window.clearTimeout(d.current),d.current=window.setTimeout(()=>s.onPointerGraceIntentChange(null),300)}else{if(s.onTriggerLeave(e),e.defaultPrevented)return;s.onPointerGraceIntentChange(null)}})),onKeyDown:(0,a.mK)(e.onKeyDown,r=>{let n=""!==s.searchRef.current;if(!e.disabled&&(!n||" "!==r.key)&&j[o.dir].includes(r.key)){var a;t.onOpenChange(!0),null==(a=t.content)||a.focus(),r.preventDefault()}})})})});e_.displayName=ek;var eA="MenuSubContent",eS=n.forwardRef((e,r)=>{let t=B(W,e.__scopeMenu),{forceMount:o=t.forceMount,...i}=e,s=N(W,e.__scopeMenu),u=z(W,e.__scopeMenu),d=ex(eA,e.__scopeMenu),c=n.useRef(null),f=(0,l.s)(r,c);return(0,_.jsx)(M.Provider,{scope:e.__scopeMenu,children:(0,_.jsx)(v.C,{present:o||s.open,children:(0,_.jsx)(M.Slot,{scope:e.__scopeMenu,children:(0,_.jsx)(ee,{id:d.contentId,"aria-labelledby":d.triggerId,...i,ref:f,align:"start",side:"rtl"===u.dir?"left":"right",disableOutsidePointerEvents:!1,disableOutsideScroll:!1,trapFocus:!1,onOpenAutoFocus:e=>{var r;u.isUsingKeyboardRef.current&&(null==(r=c.current)||r.focus()),e.preventDefault()},onCloseAutoFocus:e=>e.preventDefault(),onFocusOutside:(0,a.mK)(e.onFocusOutside,e=>{e.target!==d.trigger&&s.onOpenChange(!1)}),onEscapeKeyDown:(0,a.mK)(e.onEscapeKeyDown,e=>{u.onClose(),e.preventDefault()}),onKeyDown:(0,a.mK)(e.onKeyDown,e=>{let r=e.currentTarget.contains(e.target),t=E[u.dir].includes(e.key);if(r&&t){var n;s.onOpenChange(!1),null==(n=d.trigger)||n.focus(),e.preventDefault()}})})})})})});function eC(e){return e?"open":"closed"}function ej(e){return"indeterminate"===e}function eE(e){return ej(e)?"indeterminate":e?"checked":"unchecked"}function eD(e){return r=>"mouse"===r.pointerType?e(r):void 0}eS.displayName=eA;var eM="DropdownMenu",[eR,eV]=(0,o.A)(eM,[P]),eF=P(),[eP,eO]=eR(eM),eL=e=>{let{__scopeDropdownMenu:r,children:t,dir:a,open:l,defaultOpen:o,onOpenChange:s,modal:u=!0}=e,d=eF(r),c=n.useRef(null),[f,p]=(0,i.i)({prop:l,defaultProp:null!=o&&o,onChange:s,caller:eM});return(0,_.jsx)(eP,{scope:r,triggerId:(0,h.B)(),triggerRef:c,contentId:(0,h.B)(),open:f,onOpenChange:p,onOpenToggle:n.useCallback(()=>p(e=>!e),[p]),modal:u,children:(0,_.jsx)(K,{...d,open:f,onOpenChange:p,dir:a,modal:u,children:t})})};eL.displayName=eM;var eT="DropdownMenuTrigger",eN=n.forwardRef((e,r)=>{let{__scopeDropdownMenu:t,disabled:n=!1,...o}=e,i=eO(eT,t),u=eF(t);return(0,_.jsx)(U,{asChild:!0,...u,children:(0,_.jsx)(s.sG.button,{type:"button",id:i.triggerId,"aria-haspopup":"menu","aria-expanded":i.open,"aria-controls":i.open?i.contentId:void 0,"data-state":i.open?"open":"closed","data-disabled":n?"":void 0,disabled:n,...o,ref:(0,l.t)(r,i.triggerRef),onPointerDown:(0,a.mK)(e.onPointerDown,e=>{!n&&0===e.button&&!1===e.ctrlKey&&(i.onOpenToggle(),i.open||e.preventDefault())}),onKeyDown:(0,a.mK)(e.onKeyDown,e=>{!n&&(["Enter"," "].includes(e.key)&&i.onOpenToggle(),"ArrowDown"===e.key&&i.onOpenChange(!0),["Enter"," ","ArrowDown"].includes(e.key)&&e.preventDefault())})})})});eN.displayName=eT;var eI=e=>{let{__scopeDropdownMenu:r,...t}=e,n=eF(r);return(0,_.jsx)(G,{...n,...t})};eI.displayName="DropdownMenuPortal";var ez="DropdownMenuContent",eK=n.forwardRef((e,r)=>{let{__scopeDropdownMenu:t,...l}=e,o=eO(ez,t),i=eF(t),s=n.useRef(!1);return(0,_.jsx)(Y,{id:o.contentId,"aria-labelledby":o.triggerId,...i,...l,ref:r,onCloseAutoFocus:(0,a.mK)(e.onCloseAutoFocus,e=>{var r;s.current||null==(r=o.triggerRef.current)||r.focus(),s.current=!1,e.preventDefault()}),onInteractOutside:(0,a.mK)(e.onInteractOutside,e=>{let r=e.detail.originalEvent,t=0===r.button&&!0===r.ctrlKey,n=2===r.button||t;(!o.modal||n)&&(s.current=!0)}),style:{...e.style,"--radix-dropdown-menu-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-dropdown-menu-content-available-width":"var(--radix-popper-available-width)","--radix-dropdown-menu-content-available-height":"var(--radix-popper-available-height)","--radix-dropdown-menu-trigger-width":"var(--radix-popper-anchor-width)","--radix-dropdown-menu-trigger-height":"var(--radix-popper-anchor-height)"}})});eK.displayName=ez,n.forwardRef((e,r)=>{let{__scopeDropdownMenu:t,...n}=e,a=eF(t);return(0,_.jsx)(er,{...a,...n,ref:r})}).displayName="DropdownMenuGroup",n.forwardRef((e,r)=>{let{__scopeDropdownMenu:t,...n}=e,a=eF(t);return(0,_.jsx)(et,{...a,...n,ref:r})}).displayName="DropdownMenuLabel";var eU=n.forwardRef((e,r)=>{let{__scopeDropdownMenu:t,...n}=e,a=eF(t);return(0,_.jsx)(el,{...a,...n,ref:r})});eU.displayName="DropdownMenuItem",n.forwardRef((e,r)=>{let{__scopeDropdownMenu:t,...n}=e,a=eF(t);return(0,_.jsx)(ei,{...a,...n,ref:r})}).displayName="DropdownMenuCheckboxItem",n.forwardRef((e,r)=>{let{__scopeDropdownMenu:t,...n}=e,a=eF(t);return(0,_.jsx)(ec,{...a,...n,ref:r})}).displayName="DropdownMenuRadioGroup",n.forwardRef((e,r)=>{let{__scopeDropdownMenu:t,...n}=e,a=eF(t);return(0,_.jsx)(ep,{...a,...n,ref:r})}).displayName="DropdownMenuRadioItem",n.forwardRef((e,r)=>{let{__scopeDropdownMenu:t,...n}=e,a=eF(t);return(0,_.jsx)(ev,{...a,...n,ref:r})}).displayName="DropdownMenuItemIndicator";var eH=n.forwardRef((e,r)=>{let{__scopeDropdownMenu:t,...n}=e,a=eF(t);return(0,_.jsx)(eg,{...a,...n,ref:r})});eH.displayName="DropdownMenuSeparator",n.forwardRef((e,r)=>{let{__scopeDropdownMenu:t,...n}=e,a=eF(t);return(0,_.jsx)(eb,{...a,...n,ref:r})}).displayName="DropdownMenuArrow",n.forwardRef((e,r)=>{let{__scopeDropdownMenu:t,...n}=e,a=eF(t);return(0,_.jsx)(e_,{...a,...n,ref:r})}).displayName="DropdownMenuSubTrigger",n.forwardRef((e,r)=>{let{__scopeDropdownMenu:t,...n}=e,a=eF(t);return(0,_.jsx)(eS,{...a,...n,ref:r,style:{...e.style,"--radix-dropdown-menu-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-dropdown-menu-content-available-width":"var(--radix-popper-available-width)","--radix-dropdown-menu-content-available-height":"var(--radix-popper-available-height)","--radix-dropdown-menu-trigger-width":"var(--radix-popper-anchor-width)","--radix-dropdown-menu-trigger-height":"var(--radix-popper-anchor-height)"}})}).displayName="DropdownMenuSubContent";var eq=eL,eB=eN,eG=eI,eW=eK,eX=eU,eZ=eH},7228:(e,r,t)=>{t.d(r,{A:()=>n});let n=(0,t(3929).A)("download",[["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}],["polyline",{points:"7 10 12 15 17 10",key:"2ggqvy"}],["line",{x1:"12",x2:"12",y1:"15",y2:"3",key:"1vk2je"}]])},7996:(e,r,t)=>{t.d(r,{A:()=>n});let n=(0,t(3929).A)("pen-line",[["path",{d:"M12 20h9",key:"t2du7b"}],["path",{d:"M16.376 3.622a1 1 0 0 1 3.002 3.002L7.368 18.635a2 2 0 0 1-.855.506l-2.872.838a.5.5 0 0 1-.62-.62l.838-2.872a2 2 0 0 1 .506-.854z",key:"1ykcvy"}]])},8815:(e,r,t)=>{t.d(r,{UC:()=>F,VY:()=>T,ZD:()=>O,ZL:()=>R,bL:()=>M,hE:()=>L,hJ:()=>V,rc:()=>P});var n=t(4398),a=t(940),l=t(2050),o=t(4316),i=t(6687),s=t(6950),u=t(3422),d="AlertDialog",[c,f]=(0,a.A)(d,[o.Hs]),p=(0,o.Hs)(),h=e=>{let{__scopeAlertDialog:r,...t}=e,n=p(r);return(0,u.jsx)(o.bL,{...n,...t,modal:!0})};h.displayName=d,n.forwardRef((e,r)=>{let{__scopeAlertDialog:t,...n}=e,a=p(t);return(0,u.jsx)(o.l9,{...a,...n,ref:r})}).displayName="AlertDialogTrigger";var y=e=>{let{__scopeAlertDialog:r,...t}=e,n=p(r);return(0,u.jsx)(o.ZL,{...n,...t})};y.displayName="AlertDialogPortal";var m=n.forwardRef((e,r)=>{let{__scopeAlertDialog:t,...n}=e,a=p(t);return(0,u.jsx)(o.hJ,{...a,...n,ref:r})});m.displayName="AlertDialogOverlay";var v="AlertDialogContent",[g,b]=c(v),w=(0,s.Dc)("AlertDialogContent"),x=n.forwardRef((e,r)=>{let{__scopeAlertDialog:t,children:a,...s}=e,d=p(t),c=n.useRef(null),f=(0,l.s)(r,c),h=n.useRef(null);return(0,u.jsx)(o.G$,{contentName:v,titleName:k,docsSlug:"alert-dialog",children:(0,u.jsx)(g,{scope:t,cancelRef:h,children:(0,u.jsxs)(o.UC,{role:"alertdialog",...d,...s,ref:f,onOpenAutoFocus:(0,i.mK)(s.onOpenAutoFocus,e=>{var r;e.preventDefault(),null==(r=h.current)||r.focus({preventScroll:!0})}),onPointerDownOutside:e=>e.preventDefault(),onInteractOutside:e=>e.preventDefault(),children:[(0,u.jsx)(w,{children:a}),(0,u.jsx)(D,{contentRef:c})]})})})});x.displayName=v;var k="AlertDialogTitle",_=n.forwardRef((e,r)=>{let{__scopeAlertDialog:t,...n}=e,a=p(t);return(0,u.jsx)(o.hE,{...a,...n,ref:r})});_.displayName=k;var A="AlertDialogDescription",S=n.forwardRef((e,r)=>{let{__scopeAlertDialog:t,...n}=e,a=p(t);return(0,u.jsx)(o.VY,{...a,...n,ref:r})});S.displayName=A;var C=n.forwardRef((e,r)=>{let{__scopeAlertDialog:t,...n}=e,a=p(t);return(0,u.jsx)(o.bm,{...a,...n,ref:r})});C.displayName="AlertDialogAction";var j="AlertDialogCancel",E=n.forwardRef((e,r)=>{let{__scopeAlertDialog:t,...n}=e,{cancelRef:a}=b(j,t),i=p(t),s=(0,l.s)(r,a);return(0,u.jsx)(o.bm,{...i,...n,ref:s})});E.displayName=j;var D=e=>{let{contentRef:r}=e,t="`".concat(v,"` requires a description for the component to be accessible for screen reader users.\n\nYou can add a description to the `").concat(v,"` by passing a `").concat(A,"` component as a child, which also benefits sighted users by adding visible context to the dialog.\n\nAlternatively, you can use your own component as a description by assigning it an `id` and passing the same value to the `aria-describedby` prop in `").concat(v,"`. If the description is confusing or duplicative for sighted users, you can use the `@radix-ui/react-visually-hidden` primitive as a wrapper around your description component.\n\nFor more information, see https://radix-ui.com/primitives/docs/components/alert-dialog");return n.useEffect(()=>{var e;document.getElementById(null==(e=r.current)?void 0:e.getAttribute("aria-describedby"))||console.warn(t)},[t,r]),null},M=h,R=y,V=m,F=x,P=C,O=E,L=_,T=S},9197:(e,r,t)=>{t.d(r,{A:()=>n});let n=(0,t(3929).A)("ban",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m4.9 4.9 14.2 14.2",key:"1m5liu"}]])},9472:(e,r,t)=>{t.d(r,{A:()=>n});let n=(0,t(3929).A)("list",[["path",{d:"M3 12h.01",key:"nlz23k"}],["path",{d:"M3 18h.01",key:"1tta3j"}],["path",{d:"M3 6h.01",key:"1rqtza"}],["path",{d:"M8 12h13",key:"1za7za"}],["path",{d:"M8 18h13",key:"1lx6n3"}],["path",{d:"M8 6h13",key:"ik3vkj"}]])},9625:(e,r,t)=>{t.d(r,{LM:()=>X,OK:()=>Z,VM:()=>_,bL:()=>W,lr:()=>P});var n=t(4398),a=t(3780),l=t(6175),o=t(940),i=t(2050),s=t(7589),u=t(7689),d=t(3177),c=t(1537),f=t(6687),p=t(3422),h="ScrollArea",[y,m]=(0,o.A)(h),[v,g]=y(h),b=n.forwardRef((e,r)=>{let{__scopeScrollArea:t,type:l="hover",dir:o,scrollHideDelay:s=600,...d}=e,[c,f]=n.useState(null),[h,y]=n.useState(null),[m,g]=n.useState(null),[b,w]=n.useState(null),[x,k]=n.useState(null),[_,A]=n.useState(0),[S,C]=n.useState(0),[j,E]=n.useState(!1),[D,M]=n.useState(!1),R=(0,i.s)(r,e=>f(e)),V=(0,u.jH)(o);return(0,p.jsx)(v,{scope:t,type:l,dir:V,scrollHideDelay:s,scrollArea:c,viewport:h,onViewportChange:y,content:m,onContentChange:g,scrollbarX:b,onScrollbarXChange:w,scrollbarXEnabled:j,onScrollbarXEnabledChange:E,scrollbarY:x,onScrollbarYChange:k,scrollbarYEnabled:D,onScrollbarYEnabledChange:M,onCornerWidthChange:A,onCornerHeightChange:C,children:(0,p.jsx)(a.sG.div,{dir:V,...d,ref:R,style:{position:"relative","--radix-scroll-area-corner-width":_+"px","--radix-scroll-area-corner-height":S+"px",...e.style}})})});b.displayName=h;var w="ScrollAreaViewport",x=n.forwardRef((e,r)=>{let{__scopeScrollArea:t,children:l,nonce:o,...s}=e,u=g(w,t),d=n.useRef(null),c=(0,i.s)(r,d,u.onViewportChange);return(0,p.jsxs)(p.Fragment,{children:[(0,p.jsx)("style",{dangerouslySetInnerHTML:{__html:"[data-radix-scroll-area-viewport]{scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;}[data-radix-scroll-area-viewport]::-webkit-scrollbar{display:none}"},nonce:o}),(0,p.jsx)(a.sG.div,{"data-radix-scroll-area-viewport":"",...s,ref:c,style:{overflowX:u.scrollbarXEnabled?"scroll":"hidden",overflowY:u.scrollbarYEnabled?"scroll":"hidden",...e.style},children:(0,p.jsx)("div",{ref:u.onContentChange,style:{minWidth:"100%",display:"table"},children:l})})]})});x.displayName=w;var k="ScrollAreaScrollbar",_=n.forwardRef((e,r)=>{let{forceMount:t,...a}=e,l=g(k,e.__scopeScrollArea),{onScrollbarXEnabledChange:o,onScrollbarYEnabledChange:i}=l,s="horizontal"===e.orientation;return n.useEffect(()=>(s?o(!0):i(!0),()=>{s?o(!1):i(!1)}),[s,o,i]),"hover"===l.type?(0,p.jsx)(A,{...a,ref:r,forceMount:t}):"scroll"===l.type?(0,p.jsx)(S,{...a,ref:r,forceMount:t}):"auto"===l.type?(0,p.jsx)(C,{...a,ref:r,forceMount:t}):"always"===l.type?(0,p.jsx)(j,{...a,ref:r}):null});_.displayName=k;var A=n.forwardRef((e,r)=>{let{forceMount:t,...a}=e,o=g(k,e.__scopeScrollArea),[i,s]=n.useState(!1);return n.useEffect(()=>{let e=o.scrollArea,r=0;if(e){let t=()=>{window.clearTimeout(r),s(!0)},n=()=>{r=window.setTimeout(()=>s(!1),o.scrollHideDelay)};return e.addEventListener("pointerenter",t),e.addEventListener("pointerleave",n),()=>{window.clearTimeout(r),e.removeEventListener("pointerenter",t),e.removeEventListener("pointerleave",n)}}},[o.scrollArea,o.scrollHideDelay]),(0,p.jsx)(l.C,{present:t||i,children:(0,p.jsx)(C,{"data-state":i?"visible":"hidden",...a,ref:r})})}),S=n.forwardRef((e,r)=>{var t,a;let{forceMount:o,...i}=e,s=g(k,e.__scopeScrollArea),u="horizontal"===e.orientation,d=B(()=>h("SCROLL_END"),100),[c,h]=(t="hidden",a={hidden:{SCROLL:"scrolling"},scrolling:{SCROLL_END:"idle",POINTER_ENTER:"interacting"},interacting:{SCROLL:"interacting",POINTER_LEAVE:"idle"},idle:{HIDE:"hidden",SCROLL:"scrolling",POINTER_ENTER:"interacting"}},n.useReducer((e,r)=>{let t=a[e][r];return null!=t?t:e},t));return n.useEffect(()=>{if("idle"===c){let e=window.setTimeout(()=>h("HIDE"),s.scrollHideDelay);return()=>window.clearTimeout(e)}},[c,s.scrollHideDelay,h]),n.useEffect(()=>{let e=s.viewport,r=u?"scrollLeft":"scrollTop";if(e){let t=e[r],n=()=>{let n=e[r];t!==n&&(h("SCROLL"),d()),t=n};return e.addEventListener("scroll",n),()=>e.removeEventListener("scroll",n)}},[s.viewport,u,h,d]),(0,p.jsx)(l.C,{present:o||"hidden"!==c,children:(0,p.jsx)(j,{"data-state":"hidden"===c?"hidden":"visible",...i,ref:r,onPointerEnter:(0,f.mK)(e.onPointerEnter,()=>h("POINTER_ENTER")),onPointerLeave:(0,f.mK)(e.onPointerLeave,()=>h("POINTER_LEAVE"))})})}),C=n.forwardRef((e,r)=>{let t=g(k,e.__scopeScrollArea),{forceMount:a,...o}=e,[i,s]=n.useState(!1),u="horizontal"===e.orientation,d=B(()=>{if(t.viewport){let e=t.viewport.offsetWidth{let{orientation:t="vertical",...a}=e,l=g(k,e.__scopeScrollArea),o=n.useRef(null),i=n.useRef(0),[s,u]=n.useState({content:0,viewport:0,scrollbar:{size:0,paddingStart:0,paddingEnd:0}}),d=z(s.viewport,s.content),c={...a,sizes:s,onSizesChange:u,hasThumb:!!(d>0&&d<1),onThumbChange:e=>o.current=e,onThumbPointerUp:()=>i.current=0,onThumbPointerDown:e=>i.current=e};function f(e,r){return function(e,r,t){let n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"ltr",a=K(t),l=r||a/2,o=t.scrollbar.paddingStart+l,i=t.scrollbar.size-t.scrollbar.paddingEnd-(a-l),s=t.content-t.viewport;return H([o,i],"ltr"===n?[0,s]:[-1*s,0])(e)}(e,i.current,s,r)}return"horizontal"===t?(0,p.jsx)(E,{...c,ref:r,onThumbPositionChange:()=>{if(l.viewport&&o.current){let e=U(l.viewport.scrollLeft,s,l.dir);o.current.style.transform="translate3d(".concat(e,"px, 0, 0)")}},onWheelScroll:e=>{l.viewport&&(l.viewport.scrollLeft=e)},onDragScroll:e=>{l.viewport&&(l.viewport.scrollLeft=f(e,l.dir))}}):"vertical"===t?(0,p.jsx)(D,{...c,ref:r,onThumbPositionChange:()=>{if(l.viewport&&o.current){let e=U(l.viewport.scrollTop,s);o.current.style.transform="translate3d(0, ".concat(e,"px, 0)")}},onWheelScroll:e=>{l.viewport&&(l.viewport.scrollTop=e)},onDragScroll:e=>{l.viewport&&(l.viewport.scrollTop=f(e))}}):null}),E=n.forwardRef((e,r)=>{let{sizes:t,onSizesChange:a,...l}=e,o=g(k,e.__scopeScrollArea),[s,u]=n.useState(),d=n.useRef(null),c=(0,i.s)(r,d,o.onScrollbarXChange);return n.useEffect(()=>{d.current&&u(getComputedStyle(d.current))},[d]),(0,p.jsx)(V,{"data-orientation":"horizontal",...l,ref:c,sizes:t,style:{bottom:0,left:"rtl"===o.dir?"var(--radix-scroll-area-corner-width)":0,right:"ltr"===o.dir?"var(--radix-scroll-area-corner-width)":0,"--radix-scroll-area-thumb-width":K(t)+"px",...e.style},onThumbPointerDown:r=>e.onThumbPointerDown(r.x),onDragScroll:r=>e.onDragScroll(r.x),onWheelScroll:(r,t)=>{if(o.viewport){let n=o.viewport.scrollLeft+r.deltaX;e.onWheelScroll(n),function(e,r){return e>0&&e{d.current&&o.viewport&&s&&a({content:o.viewport.scrollWidth,viewport:o.viewport.offsetWidth,scrollbar:{size:d.current.clientWidth,paddingStart:I(s.paddingLeft),paddingEnd:I(s.paddingRight)}})}})}),D=n.forwardRef((e,r)=>{let{sizes:t,onSizesChange:a,...l}=e,o=g(k,e.__scopeScrollArea),[s,u]=n.useState(),d=n.useRef(null),c=(0,i.s)(r,d,o.onScrollbarYChange);return n.useEffect(()=>{d.current&&u(getComputedStyle(d.current))},[d]),(0,p.jsx)(V,{"data-orientation":"vertical",...l,ref:c,sizes:t,style:{top:0,right:"ltr"===o.dir?0:void 0,left:"rtl"===o.dir?0:void 0,bottom:"var(--radix-scroll-area-corner-height)","--radix-scroll-area-thumb-height":K(t)+"px",...e.style},onThumbPointerDown:r=>e.onThumbPointerDown(r.y),onDragScroll:r=>e.onDragScroll(r.y),onWheelScroll:(r,t)=>{if(o.viewport){let n=o.viewport.scrollTop+r.deltaY;e.onWheelScroll(n),function(e,r){return e>0&&e{d.current&&o.viewport&&s&&a({content:o.viewport.scrollHeight,viewport:o.viewport.offsetHeight,scrollbar:{size:d.current.clientHeight,paddingStart:I(s.paddingTop),paddingEnd:I(s.paddingBottom)}})}})}),[M,R]=y(k),V=n.forwardRef((e,r)=>{let{__scopeScrollArea:t,sizes:l,hasThumb:o,onThumbChange:u,onThumbPointerUp:d,onThumbPointerDown:c,onThumbPositionChange:h,onDragScroll:y,onWheelScroll:m,onResize:v,...b}=e,w=g(k,t),[x,_]=n.useState(null),A=(0,i.s)(r,e=>_(e)),S=n.useRef(null),C=n.useRef(""),j=w.viewport,E=l.content-l.viewport,D=(0,s.c)(m),R=(0,s.c)(h),V=B(v,10);function F(e){S.current&&y({x:e.clientX-S.current.left,y:e.clientY-S.current.top})}return n.useEffect(()=>{let e=e=>{let r=e.target;(null==x?void 0:x.contains(r))&&D(e,E)};return document.addEventListener("wheel",e,{passive:!1}),()=>document.removeEventListener("wheel",e,{passive:!1})},[j,x,E,D]),n.useEffect(R,[l,R]),G(x,V),G(w.content,V),(0,p.jsx)(M,{scope:t,scrollbar:x,hasThumb:o,onThumbChange:(0,s.c)(u),onThumbPointerUp:(0,s.c)(d),onThumbPositionChange:R,onThumbPointerDown:(0,s.c)(c),children:(0,p.jsx)(a.sG.div,{...b,ref:A,style:{position:"absolute",...b.style},onPointerDown:(0,f.mK)(e.onPointerDown,e=>{0===e.button&&(e.target.setPointerCapture(e.pointerId),S.current=x.getBoundingClientRect(),C.current=document.body.style.webkitUserSelect,document.body.style.webkitUserSelect="none",w.viewport&&(w.viewport.style.scrollBehavior="auto"),F(e))}),onPointerMove:(0,f.mK)(e.onPointerMove,F),onPointerUp:(0,f.mK)(e.onPointerUp,e=>{let r=e.target;r.hasPointerCapture(e.pointerId)&&r.releasePointerCapture(e.pointerId),document.body.style.webkitUserSelect=C.current,w.viewport&&(w.viewport.style.scrollBehavior=""),S.current=null})})})}),F="ScrollAreaThumb",P=n.forwardRef((e,r)=>{let{forceMount:t,...n}=e,a=R(F,e.__scopeScrollArea);return(0,p.jsx)(l.C,{present:t||a.hasThumb,children:(0,p.jsx)(O,{ref:r,...n})})}),O=n.forwardRef((e,r)=>{let{__scopeScrollArea:t,style:l,...o}=e,s=g(F,t),u=R(F,t),{onThumbPositionChange:d}=u,c=(0,i.s)(r,e=>u.onThumbChange(e)),h=n.useRef(void 0),y=B(()=>{h.current&&(h.current(),h.current=void 0)},100);return n.useEffect(()=>{let e=s.viewport;if(e){let r=()=>{y(),h.current||(h.current=q(e,d),d())};return d(),e.addEventListener("scroll",r),()=>e.removeEventListener("scroll",r)}},[s.viewport,y,d]),(0,p.jsx)(a.sG.div,{"data-state":u.hasThumb?"visible":"hidden",...o,ref:c,style:{width:"var(--radix-scroll-area-thumb-width)",height:"var(--radix-scroll-area-thumb-height)",...l},onPointerDownCapture:(0,f.mK)(e.onPointerDownCapture,e=>{let r=e.target.getBoundingClientRect(),t=e.clientX-r.left,n=e.clientY-r.top;u.onThumbPointerDown({x:t,y:n})}),onPointerUp:(0,f.mK)(e.onPointerUp,u.onThumbPointerUp)})});P.displayName=F;var L="ScrollAreaCorner",T=n.forwardRef((e,r)=>{let t=g(L,e.__scopeScrollArea),n=!!(t.scrollbarX&&t.scrollbarY);return"scroll"!==t.type&&n?(0,p.jsx)(N,{...e,ref:r}):null});T.displayName=L;var N=n.forwardRef((e,r)=>{let{__scopeScrollArea:t,...l}=e,o=g(L,t),[i,s]=n.useState(0),[u,d]=n.useState(0),c=!!(i&&u);return G(o.scrollbarX,()=>{var e;let r=(null==(e=o.scrollbarX)?void 0:e.offsetHeight)||0;o.onCornerHeightChange(r),d(r)}),G(o.scrollbarY,()=>{var e;let r=(null==(e=o.scrollbarY)?void 0:e.offsetWidth)||0;o.onCornerWidthChange(r),s(r)}),c?(0,p.jsx)(a.sG.div,{...l,ref:r,style:{width:i,height:u,position:"absolute",right:"ltr"===o.dir?0:void 0,left:"rtl"===o.dir?0:void 0,bottom:0,...e.style}}):null});function I(e){return e?parseInt(e,10):0}function z(e,r){let t=e/r;return isNaN(t)?0:t}function K(e){let r=z(e.viewport,e.content),t=e.scrollbar.paddingStart+e.scrollbar.paddingEnd;return Math.max((e.scrollbar.size-t)*r,18)}function U(e,r){let t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"ltr",n=K(r),a=r.scrollbar.paddingStart+r.scrollbar.paddingEnd,l=r.scrollbar.size-a,o=r.content-r.viewport,i=(0,c.q)(e,"ltr"===t?[0,o]:[-1*o,0]);return H([0,o],[0,l-n])(i)}function H(e,r){return t=>{if(e[0]===e[1]||r[0]===r[1])return r[0];let n=(r[1]-r[0])/(e[1]-e[0]);return r[0]+n*(t-e[0])}}var q=function(e){let r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:()=>{},t={left:e.scrollLeft,top:e.scrollTop},n=0;return!function a(){let l={left:e.scrollLeft,top:e.scrollTop},o=t.left!==l.left,i=t.top!==l.top;(o||i)&&r(),t=l,n=window.requestAnimationFrame(a)}(),()=>window.cancelAnimationFrame(n)};function B(e,r){let t=(0,s.c)(e),a=n.useRef(0);return n.useEffect(()=>()=>window.clearTimeout(a.current),[]),n.useCallback(()=>{window.clearTimeout(a.current),a.current=window.setTimeout(t,r)},[t,r])}function G(e,r){let t=(0,s.c)(r);(0,d.N)(()=>{let r=0;if(e){let n=new ResizeObserver(()=>{cancelAnimationFrame(r),r=window.requestAnimationFrame(t)});return n.observe(e),()=>{window.cancelAnimationFrame(r),n.unobserve(e)}}},[e,t])}var W=b,X=x,Z=T},9906:(e,r,t)=>{t.d(r,{A:()=>n});let n=(0,t(3929).A)("globe",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20",key:"13o1zl"}],["path",{d:"M2 12h20",key:"9i4pu4"}]])},9911:(e,r,t)=>{t.d(r,{A:()=>n});let n=(0,t(3929).A)("mic",[["path",{d:"M12 2a3 3 0 0 0-3 3v7a3 3 0 0 0 6 0V5a3 3 0 0 0-3-3Z",key:"131961"}],["path",{d:"M19 10v2a7 7 0 0 1-14 0v-2",key:"1vc78b"}],["line",{x1:"12",x2:"12",y1:"19",y2:"22",key:"x3vr5v"}]])},9935:(e,r,t)=>{t.d(r,{A:()=>n});let n=(0,t(3929).A)("mic-off",[["line",{x1:"2",x2:"22",y1:"2",y2:"22",key:"a6p6uj"}],["path",{d:"M18.89 13.23A7.12 7.12 0 0 0 19 12v-2",key:"80xlxr"}],["path",{d:"M5 10v2a7 7 0 0 0 12 5",key:"p2k8kg"}],["path",{d:"M15 9.34V5a3 3 0 0 0-5.68-1.33",key:"1gzdoj"}],["path",{d:"M9 9v3a3 3 0 0 0 5.12 2.12",key:"r2i35w"}],["line",{x1:"12",x2:"12",y1:"19",y2:"22",key:"x3vr5v"}]])},9987:(e,r,t)=>{t.d(r,{A:()=>n});let n=(0,t(3929).A)("zap",[["path",{d:"M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z",key:"1xq2db"}]])}}]);
\ No newline at end of file
diff --git a/ui_out/_next/static/chunks/938-08cea0300e0df70a.js b/ui_out/_next/static/chunks/938-08cea0300e0df70a.js
deleted file mode 100644
index aa57aee2..00000000
--- a/ui_out/_next/static/chunks/938-08cea0300e0df70a.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[938],{246:(e,r,t)=>{t.d(r,{A:()=>n});let n=(0,t(3929).A)("circle-check-big",[["path",{d:"M21.801 10A10 10 0 1 1 17 3.335",key:"yps3ct"}],["path",{d:"m9 11 3 3L22 4",key:"1pflzl"}]])},413:(e,r,t)=>{t.d(r,{A:()=>n});let n=(0,t(3929).A)("image",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",ry:"2",key:"1m3agn"}],["circle",{cx:"9",cy:"9",r:"2",key:"af1f0g"}],["path",{d:"m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21",key:"1xmnt7"}]])},552:(e,r,t)=>{t.d(r,{u:()=>_});var n=t(1407);let a=(e,r,t)=>{if(e&&"reportValidity"in e){let a=(0,n.Jt)(t,r);e.setCustomValidity(a&&a.message||""),e.reportValidity()}},l=(e,r)=>{for(let t in r.fields){let n=r.fields[t];n&&n.ref&&"reportValidity"in n.ref?a(n.ref,t,e):n&&n.refs&&n.refs.forEach(r=>a(r,t,e))}},o=(e,r)=>{r.shouldUseNativeValidation&&l(e,r);let t={};for(let a in e){let l=(0,n.Jt)(r.fields,a),o=Object.assign(e[a]||{},{ref:l&&l.ref});if(i(r.names||Object.keys(e),a)){let e=Object.assign({},(0,n.Jt)(t,a));(0,n.hZ)(e,"root",o),(0,n.hZ)(t,a,e)}else(0,n.hZ)(t,a,o)}return t},i=(e,r)=>{let t=s(r);return e.some(e=>s(e).match(`^${t}\\.\\d+`))};function s(e){return e.replace(/\]|\[/g,"")}function u(e,r,t){function n(t,n){var a;for(let l in Object.defineProperty(t,"_zod",{value:t._zod??{},enumerable:!1}),(a=t._zod).traits??(a.traits=new Set),t._zod.traits.add(e),r(t,n),o.prototype)l in t||Object.defineProperty(t,l,{value:o.prototype[l].bind(t)});t._zod.constr=o,t._zod.def=n}let a=t?.Parent??Object;class l extends a{}function o(e){var r;let a=t?.Parent?new l:this;for(let t of(n(a,e),(r=a._zod).deferred??(r.deferred=[]),a._zod.deferred))t();return a}return Object.defineProperty(l,"name",{value:e}),Object.defineProperty(o,"init",{value:n}),Object.defineProperty(o,Symbol.hasInstance,{value:r=>!!t?.Parent&&r instanceof t.Parent||r?._zod?.traits?.has(e)}),Object.defineProperty(o,"name",{value:e}),o}Object.freeze({status:"aborted"}),Symbol("zod_brand");class d extends Error{constructor(){super("Encountered Promise during synchronous parse. Use .parseAsync() instead.")}}let c={};function f(e){return e&&Object.assign(c,e),c}function p(e,r){return"bigint"==typeof r?r.toString():r}let h=Error.captureStackTrace?Error.captureStackTrace:(...e)=>{};function y(e){return"string"==typeof e?e:e?.message}function m(e,r,t){let n={...e,path:e.path??[]};return e.message||(n.message=y(e.inst?._zod.def?.error?.(e))??y(r?.error?.(e))??y(t.customError?.(e))??y(t.localeError?.(e))??"Invalid input"),delete n.inst,delete n.continue,r?.reportInput||delete n.input,n}Number.MIN_SAFE_INTEGER,Number.MAX_SAFE_INTEGER,Number.MAX_VALUE,Number.MAX_VALUE;let v=(e,r)=>{e.name="$ZodError",Object.defineProperty(e,"_zod",{value:e._zod,enumerable:!1}),Object.defineProperty(e,"issues",{value:r,enumerable:!1}),Object.defineProperty(e,"message",{get:()=>JSON.stringify(r,p,2),enumerable:!0}),Object.defineProperty(e,"toString",{value:()=>e.message,enumerable:!1})},g=u("$ZodError",v),b=u("$ZodError",v,{Parent:Error}),w=(e,r,t,n)=>{let a=t?Object.assign(t,{async:!1}):{async:!1},l=e._zod.run({value:r,issues:[]},a);if(l instanceof Promise)throw new d;if(l.issues.length){let e=new(n?.Err??b)(l.issues.map(e=>m(e,a,f())));throw h(e,n?.callee),e}return l.value},x=async(e,r,t,n)=>{let a=t?Object.assign(t,{async:!0}):{async:!0},l=e._zod.run({value:r,issues:[]},a);if(l instanceof Promise&&(l=await l),l.issues.length){let e=new(n?.Err??b)(l.issues.map(e=>m(e,a,f())));throw h(e,n?.callee),e}return l.value};function k(e,r){try{var t=e()}catch(e){return r(e)}return t&&t.then?t.then(void 0,r):t}function _(e,r,t){if(void 0===t&&(t={}),"_def"in e&&"object"==typeof e._def&&"typeName"in e._def)return function(a,i,s){try{return Promise.resolve(k(function(){return Promise.resolve(e["sync"===t.mode?"parse":"parseAsync"](a,r)).then(function(e){return s.shouldUseNativeValidation&&l({},s),{errors:{},values:t.raw?Object.assign({},a):e}})},function(e){if(Array.isArray(null==e?void 0:e.issues))return{values:{},errors:o(function(e,r){for(var t={};e.length;){var a=e[0],l=a.code,o=a.message,i=a.path.join(".");if(!t[i])if("unionErrors"in a){var s=a.unionErrors[0].errors[0];t[i]={message:s.message,type:s.code}}else t[i]={message:o,type:l};if("unionErrors"in a&&a.unionErrors.forEach(function(r){return r.errors.forEach(function(r){return e.push(r)})}),r){var u=t[i].types,d=u&&u[a.code];t[i]=(0,n.Gb)(i,r,t,l,d?[].concat(d,a.message):a.message)}e.shift()}return t}(e.errors,!s.shouldUseNativeValidation&&"all"===s.criteriaMode),s)};throw e}))}catch(e){return Promise.reject(e)}};if("_zod"in e&&"object"==typeof e._zod)return function(a,i,s){try{return Promise.resolve(k(function(){return Promise.resolve(("sync"===t.mode?w:x)(e,a,r)).then(function(e){return s.shouldUseNativeValidation&&l({},s),{errors:{},values:t.raw?Object.assign({},a):e}})},function(e){if(e instanceof g)return{values:{},errors:o(function(e,r){for(var t={};e.length;){var a=e[0],l=a.code,o=a.message,i=a.path.join(".");if(!t[i])if("invalid_union"===a.code&&a.errors.length>0){var s=a.errors[0][0];t[i]={message:s.message,type:s.code}}else t[i]={message:o,type:l};if("invalid_union"===a.code&&a.errors.forEach(function(r){return r.forEach(function(r){return e.push(r)})}),r){var u=t[i].types,d=u&&u[a.code];t[i]=(0,n.Gb)(i,r,t,l,d?[].concat(d,a.message):a.message)}e.shift()}return t}(e.issues,!s.shouldUseNativeValidation&&"all"===s.criteriaMode),s)};throw e}))}catch(e){return Promise.reject(e)}};throw Error("Invalid input: not a Zod schema")}},1220:(e,r,t)=>{t.d(r,{A:()=>n});let n=(0,t(3929).A)("info",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 16v-4",key:"1dtifu"}],["path",{d:"M12 8h.01",key:"e9boi3"}]])},1407:(e,r,t)=>{t.d(r,{Gb:()=>T,Jt:()=>b,Op:()=>j,hZ:()=>x,lN:()=>M,mN:()=>eA,xI:()=>O,xW:()=>C});var n=t(4398),a=e=>"checkbox"===e.type,l=e=>e instanceof Date,o=e=>null==e;let i=e=>"object"==typeof e;var s=e=>!o(e)&&!Array.isArray(e)&&i(e)&&!l(e),u=e=>s(e)&&e.target?a(e.target)?e.target.checked:e.target.value:e,d=e=>e.substring(0,e.search(/\.\d+(\.|$)/))||e,c=(e,r)=>e.has(d(r)),f=e=>{let r=e.constructor&&e.constructor.prototype;return s(r)&&r.hasOwnProperty("isPrototypeOf")},p="undefined"!=typeof window&&void 0!==window.HTMLElement&&"undefined"!=typeof document;function h(e){let r,t=Array.isArray(e),n="undefined"!=typeof FileList&&e instanceof FileList;if(e instanceof Date)r=new Date(e);else if(!(!(p&&(e instanceof Blob||n))&&(t||s(e))))return e;else if(r=t?[]:Object.create(Object.getPrototypeOf(e)),t||f(e))for(let t in e)e.hasOwnProperty(t)&&(r[t]=h(e[t]));else r=e;return r}var y=e=>/^\w*$/.test(e),m=e=>void 0===e,v=e=>Array.isArray(e)?e.filter(Boolean):[],g=e=>v(e.replace(/["|']|\]/g,"").split(/\.|\[/)),b=(e,r,t)=>{if(!r||!s(e))return t;let n=(y(r)?[r]:g(r)).reduce((e,r)=>o(e)?e:e[r],e);return m(n)||n===e?m(e[r])?t:e[r]:n},w=e=>"boolean"==typeof e,x=(e,r,t)=>{let n=-1,a=y(r)?[r]:g(r),l=a.length,o=l-1;for(;++nn.useContext(S),j=e=>{let{children:r,...t}=e;return n.createElement(S.Provider,{value:t},r)};var E=(e,r,t,n=!0)=>{let a={defaultValues:r._defaultValues};for(let l in e)Object.defineProperty(a,l,{get:()=>(r._proxyFormState[l]!==_.all&&(r._proxyFormState[l]=!n||_.all),t&&(t[l]=!0),e[l])});return a};let D="undefined"!=typeof window?n.useLayoutEffect:n.useEffect;function M(e){let r=C(),{control:t=r.control,disabled:a,name:l,exact:o}=e||{},[i,s]=n.useState(t._formState),u=n.useRef({isDirty:!1,isLoading:!1,dirtyFields:!1,touchedFields:!1,validatingFields:!1,isValidating:!1,isValid:!1,errors:!1});return D(()=>t._subscribe({name:l,formState:u.current,exact:o,callback:e=>{a||s({...t._formState,...e})}}),[l,a,o]),n.useEffect(()=>{u.current.isValid&&t._setValid(!0)},[t]),n.useMemo(()=>E(i,t,u.current,!1),[i,t])}var R=e=>"string"==typeof e,V=(e,r,t,n,a)=>R(e)?(n&&r.watch.add(e),b(t,e,a)):Array.isArray(e)?e.map(e=>(n&&r.watch.add(e),b(t,e))):(n&&(r.watchAll=!0),t),F=e=>o(e)||!i(e);function P(e,r,t=new WeakSet){if(F(e)||F(r))return e===r;if(l(e)&&l(r))return e.getTime()===r.getTime();let n=Object.keys(e),a=Object.keys(r);if(n.length!==a.length)return!1;if(t.has(e)||t.has(r))return!0;for(let o of(t.add(e),t.add(r),n)){let n=e[o];if(!a.includes(o))return!1;if("ref"!==o){let e=r[o];if(l(n)&&l(e)||s(n)&&s(e)||Array.isArray(n)&&Array.isArray(e)?!P(n,e,t):n!==e)return!1}}return!0}let O=e=>e.render(function(e){let r=C(),{name:t,disabled:a,control:l=r.control,shouldUnregister:o,defaultValue:i}=e,s=c(l._names.array,t),d=n.useMemo(()=>b(l._formValues,t,b(l._defaultValues,t,i)),[l,t,i]),f=function(e){let r=C(),{control:t=r.control,name:a,defaultValue:l,disabled:o,exact:i,compute:s}=e||{},u=n.useRef(l),d=n.useRef(s),c=n.useRef(void 0);d.current=s;let f=n.useMemo(()=>t._getWatch(a,u.current),[t,a]),[p,h]=n.useState(d.current?d.current(f):f);return D(()=>t._subscribe({name:a,formState:{values:!0},exact:i,callback:e=>{if(!o){let r=V(a,t._names,e.values||t._formValues,!1,u.current);if(d.current){let e=d.current(r);P(e,c.current)||(h(e),c.current=e)}else h(r)}}}),[t,o,a,i]),n.useEffect(()=>t._removeUnmounted()),p}({control:l,name:t,defaultValue:d,exact:!0}),p=M({control:l,name:t,exact:!0}),y=n.useRef(e),v=n.useRef(void 0),g=n.useRef(l.register(t,{...e.rules,value:f,...w(e.disabled)?{disabled:e.disabled}:{}}));y.current=e;let _=n.useMemo(()=>Object.defineProperties({},{invalid:{enumerable:!0,get:()=>!!b(p.errors,t)},isDirty:{enumerable:!0,get:()=>!!b(p.dirtyFields,t)},isTouched:{enumerable:!0,get:()=>!!b(p.touchedFields,t)},isValidating:{enumerable:!0,get:()=>!!b(p.validatingFields,t)},error:{enumerable:!0,get:()=>b(p.errors,t)}}),[p,t]),A=n.useCallback(e=>g.current.onChange({target:{value:u(e),name:t},type:k.CHANGE}),[t]),S=n.useCallback(()=>g.current.onBlur({target:{value:b(l._formValues,t),name:t},type:k.BLUR}),[t,l._formValues]),j=n.useCallback(e=>{let r=b(l._fields,t);r&&e&&(r._f.ref={focus:()=>e.focus&&e.focus(),select:()=>e.select&&e.select(),setCustomValidity:r=>e.setCustomValidity(r),reportValidity:()=>e.reportValidity()})},[l._fields,t]),E=n.useMemo(()=>({name:t,value:f,...w(a)||p.disabled?{disabled:p.disabled||a}:{},onChange:A,onBlur:S,ref:j}),[t,a,p.disabled,A,S,j,f]);return n.useEffect(()=>{let e=l._options.shouldUnregister||o,r=v.current;r&&r!==t&&!s&&l.unregister(r),l.register(t,{...y.current.rules,...w(y.current.disabled)?{disabled:y.current.disabled}:{}});let n=(e,r)=>{let t=b(l._fields,e);t&&t._f&&(t._f.mount=r)};if(n(t,!0),e){let e=h(b(l._options.defaultValues,t,y.current.defaultValue));x(l._defaultValues,t,e),m(b(l._formValues,t))&&x(l._formValues,t,e)}return s||l.register(t),v.current=t,()=>{(s?e&&!l._state.action:e)?l.unregister(t):n(t,!1)}},[t,l,s,o]),n.useEffect(()=>{l._setDisabledField({disabled:a,name:t})},[a,t,l]),n.useMemo(()=>({field:E,formState:p,fieldState:_}),[E,p,_])}(e));var T=(e,r,t,n,a)=>r?{...t[e],types:{...t[e]&&t[e].types?t[e].types:{},[n]:a||!0}}:{},L=e=>Array.isArray(e)?e:[e],N=()=>{let e=[];return{get observers(){return e},next:r=>{for(let t of e)t.next&&t.next(r)},subscribe:r=>(e.push(r),{unsubscribe:()=>{e=e.filter(e=>e!==r)}}),unsubscribe:()=>{e=[]}}},I=e=>s(e)&&!Object.keys(e).length,z=e=>"file"===e.type,K=e=>"function"==typeof e,U=e=>{if(!p)return!1;let r=e?e.ownerDocument:0;return e instanceof(r&&r.defaultView?r.defaultView.HTMLElement:HTMLElement)},B=e=>"select-multiple"===e.type,H=e=>"radio"===e.type,q=e=>H(e)||a(e),G=e=>U(e)&&e.isConnected;function W(e,r){let t=Array.isArray(r)?r:y(r)?[r]:g(r),n=1===t.length?e:function(e,r){let t=r.slice(0,-1).length,n=0;for(;n{for(let r in e)if(K(e[r]))return!0;return!1};function Z(e){return Array.isArray(e)||s(e)&&!X(e)}function Y(e,r={}){for(let t in e)Z(e[t])?(r[t]=Array.isArray(e[t])?[]:{},Y(e[t],r[t])):m(e[t])||(r[t]=!0);return r}function $(e,r,t){for(let n in t||(t=Y(r)),e)Z(e[n])?m(r)||F(t[n])?t[n]=Y(e[n],Array.isArray(e[n])?[]:{}):$(e[n],o(r)?{}:r[n],t[n]):t[n]=!P(e[n],r[n]);return t}let J={value:!1,isValid:!1},Q={value:!0,isValid:!0};var ee=e=>{if(Array.isArray(e)){if(e.length>1){let r=e.filter(e=>e&&e.checked&&!e.disabled).map(e=>e.value);return{value:r,isValid:!!r.length}}return e[0].checked&&!e[0].disabled?e[0].attributes&&!m(e[0].attributes.value)?m(e[0].value)||""===e[0].value?Q:{value:e[0].value,isValid:!0}:Q:J}return J},er=(e,{valueAsNumber:r,valueAsDate:t,setValueAs:n})=>m(e)?e:r?""===e?NaN:e?+e:e:t&&R(e)?new Date(e):n?n(e):e;let et={isValid:!1,value:null};var en=e=>Array.isArray(e)?e.reduce((e,r)=>r&&r.checked&&!r.disabled?{isValid:!0,value:r.value}:e,et):et;function ea(e){let r=e.ref;return z(r)?r.files:H(r)?en(e.refs).value:B(r)?[...r.selectedOptions].map(({value:e})=>e):a(r)?ee(e.refs).value:er(m(r.value)?e.ref.value:r.value,e)}var el=(e,r,t,n)=>{let a={};for(let t of e){let e=b(r,t);e&&x(a,t,e._f)}return{criteriaMode:t,names:[...e],fields:a,shouldUseNativeValidation:n}},eo=e=>e instanceof RegExp,ei=e=>m(e)?e:eo(e)?e.source:s(e)?eo(e.value)?e.value.source:e.value:e,es=e=>({isOnSubmit:!e||e===_.onSubmit,isOnBlur:e===_.onBlur,isOnChange:e===_.onChange,isOnAll:e===_.all,isOnTouch:e===_.onTouched});let eu="AsyncFunction";var ed=e=>!!e&&!!e.validate&&!!(K(e.validate)&&e.validate.constructor.name===eu||s(e.validate)&&Object.values(e.validate).find(e=>e.constructor.name===eu)),ec=e=>e.mount&&(e.required||e.min||e.max||e.maxLength||e.minLength||e.pattern||e.validate),ef=(e,r,t)=>!t&&(r.watchAll||r.watch.has(e)||[...r.watch].some(r=>e.startsWith(r)&&/^\.\w+/.test(e.slice(r.length))));let ep=(e,r,t,n)=>{for(let a of t||Object.keys(e)){let t=b(e,a);if(t){let{_f:e,...l}=t;if(e){if(e.refs&&e.refs[0]&&r(e.refs[0],a)&&!n)return!0;else if(e.ref&&r(e.ref,e.name)&&!n)return!0;else if(ep(l,r))break}else if(s(l)&&ep(l,r))break}}};function eh(e,r,t){let n=b(e,t);if(n||y(t))return{error:n,name:t};let a=t.split(".");for(;a.length;){let n=a.join("."),l=b(r,n),o=b(e,n);if(l&&!Array.isArray(l)&&t!==n)break;if(o&&o.type)return{name:n,error:o};if(o&&o.root&&o.root.type)return{name:`${n}.root`,error:o.root};a.pop()}return{name:t}}var ey=(e,r,t,n)=>{t(e);let{name:a,...l}=e;return I(l)||Object.keys(l).length>=Object.keys(r).length||Object.keys(l).find(e=>r[e]===(!n||_.all))},em=(e,r,t)=>!e||!r||e===r||L(e).some(e=>e&&(t?e===r:e.startsWith(r)||r.startsWith(e))),ev=(e,r,t,n,a)=>!a.isOnAll&&(!t&&a.isOnTouch?!(r||e):(t?n.isOnBlur:a.isOnBlur)?!e:(t?!n.isOnChange:!a.isOnChange)||e),eg=(e,r)=>!v(b(e,r)).length&&W(e,r),eb=(e,r,t)=>{let n=L(b(e,t));return x(n,"root",r[t]),x(e,t,n),e};function ew(e,r,t="validate"){if(R(e)||Array.isArray(e)&&e.every(R)||w(e)&&!e)return{type:t,message:R(e)?e:"",ref:r}}var ex=e=>s(e)&&!eo(e)?e:{value:e,message:""},ek=async(e,r,t,n,l,i)=>{let{ref:u,refs:d,required:c,maxLength:f,minLength:p,min:h,max:y,pattern:v,validate:g,name:x,valueAsNumber:k,mount:_}=e._f,S=b(t,x);if(!_||r.has(x))return{};let C=d?d[0]:u,j=e=>{l&&C.reportValidity&&(C.setCustomValidity(w(e)?"":e||""),C.reportValidity())},E={},D=H(u),M=a(u),V=(k||z(u))&&m(u.value)&&m(S)||U(u)&&""===u.value||""===S||Array.isArray(S)&&!S.length,F=T.bind(null,x,n,E),P=(e,r,t,n=A.maxLength,a=A.minLength)=>{let l=e?r:t;E[x]={type:e?n:a,message:l,ref:u,...F(e?n:a,l)}};if(i?!Array.isArray(S)||!S.length:c&&(!(D||M)&&(V||o(S))||w(S)&&!S||M&&!ee(d).isValid||D&&!en(d).isValid)){let{value:e,message:r}=R(c)?{value:!!c,message:c}:ex(c);if(e&&(E[x]={type:A.required,message:r,ref:C,...F(A.required,r)},!n))return j(r),E}if(!V&&(!o(h)||!o(y))){let e,r,t=ex(y),a=ex(h);if(o(S)||isNaN(S)){let n=u.valueAsDate||new Date(S),l=e=>new Date(new Date().toDateString()+" "+e),o="time"==u.type,i="week"==u.type;R(t.value)&&S&&(e=o?l(S)>l(t.value):i?S>t.value:n>new Date(t.value)),R(a.value)&&S&&(r=o?l(S)t.value),o(a.value)||(r=n+e.value,a=!o(r.value)&&S.length<+r.value;if((t||a)&&(P(t,e.message,r.message),!n))return j(E[x].message),E}if(v&&!V&&R(S)){let{value:e,message:r}=ex(v);if(eo(e)&&!S.match(e)&&(E[x]={type:A.pattern,message:r,ref:u,...F(A.pattern,r)},!n))return j(r),E}if(g){if(K(g)){let e=ew(await g(S,t),C);if(e&&(E[x]={...e,...F(A.validate,e.message)},!n))return j(e.message),E}else if(s(g)){let e={};for(let r in g){if(!I(e)&&!n)break;let a=ew(await g[r](S,t),C,r);a&&(e={...a,...F(r,a.message)},j(a.message),n&&(E[x]=e))}if(!I(e)&&(E[x]={ref:C,...e},!n))return E}}return j(!0),E};let e_={mode:_.onSubmit,reValidateMode:_.onChange,shouldFocusError:!0};function eA(e={}){let r=n.useRef(void 0),t=n.useRef(void 0),[i,d]=n.useState({isDirty:!1,isValidating:!1,isLoading:K(e.defaultValues),isSubmitted:!1,isSubmitting:!1,isSubmitSuccessful:!1,isValid:!1,submitCount:0,dirtyFields:{},touchedFields:{},validatingFields:{},errors:e.errors||{},disabled:e.disabled||!1,isReady:!1,defaultValues:K(e.defaultValues)?void 0:e.defaultValues});if(!r.current)if(e.formControl)r.current={...e.formControl,formState:i},e.defaultValues&&!K(e.defaultValues)&&e.formControl.reset(e.defaultValues,e.resetOptions);else{let{formControl:t,...n}=function(e={}){let r,t={...e_,...e},n={submitCount:0,isDirty:!1,isReady:!1,isLoading:K(t.defaultValues),isValidating:!1,isSubmitted:!1,isSubmitting:!1,isSubmitSuccessful:!1,isValid:!1,touchedFields:{},dirtyFields:{},validatingFields:{},errors:t.errors||{},disabled:t.disabled||!1},i={},d=(s(t.defaultValues)||s(t.values))&&h(t.defaultValues||t.values)||{},f=t.shouldUnregister?{}:h(d),y={action:!1,mount:!1,watch:!1},g={mount:new Set,disabled:new Set,unMount:new Set,array:new Set,watch:new Set},A=0,S={isDirty:!1,dirtyFields:!1,validatingFields:!1,touchedFields:!1,isValidating:!1,isValid:!1,errors:!1},C={...S},j={array:N(),state:N()},E=t.criteriaMode===_.all,D=e=>r=>{clearTimeout(A),A=setTimeout(e,r)},M=async e=>{if(!t.disabled&&(S.isValid||C.isValid||e)){let e=t.resolver?I((await Z()).errors):await J(i,!0);e!==n.isValid&&j.state.next({isValid:e})}},F=(e,r)=>{!t.disabled&&(S.isValidating||S.validatingFields||C.isValidating||C.validatingFields)&&((e||Array.from(g.mount)).forEach(e=>{e&&(r?x(n.validatingFields,e,r):W(n.validatingFields,e))}),j.state.next({validatingFields:n.validatingFields,isValidating:!I(n.validatingFields)}))},O=(e,r)=>{x(n.errors,e,r),j.state.next({errors:n.errors})},T=(e,r,t,n)=>{let a=b(i,e);if(a){let l=b(f,e,m(t)?b(d,e):t);m(l)||n&&n.defaultChecked||r?x(f,e,r?l:ea(a._f)):et(e,l),y.mount&&M()}},H=(e,r,a,l,o)=>{let i=!1,s=!1,u={name:e};if(!t.disabled){if(!a||l){(S.isDirty||C.isDirty)&&(s=n.isDirty,n.isDirty=u.isDirty=Q(),i=s!==u.isDirty);let t=P(b(d,e),r);s=!!b(n.dirtyFields,e),t?W(n.dirtyFields,e):x(n.dirtyFields,e,!0),u.dirtyFields=n.dirtyFields,i=i||(S.dirtyFields||C.dirtyFields)&&!t!==s}if(a){let r=b(n.touchedFields,e);r||(x(n.touchedFields,e,a),u.touchedFields=n.touchedFields,i=i||(S.touchedFields||C.touchedFields)&&r!==a)}i&&o&&j.state.next(u)}return i?u:{}},X=(e,a,l,o)=>{let i=b(n.errors,e),s=(S.isValid||C.isValid)&&w(a)&&n.isValid!==a;if(t.delayError&&l?(r=D(()=>O(e,l)))(t.delayError):(clearTimeout(A),r=null,l?x(n.errors,e,l):W(n.errors,e)),(l?!P(i,l):i)||!I(o)||s){let r={...o,...s&&w(a)?{isValid:a}:{},errors:n.errors,name:e};n={...n,...r},j.state.next(r)}},Z=async e=>{F(e,!0);let r=await t.resolver(f,t.context,el(e||g.mount,i,t.criteriaMode,t.shouldUseNativeValidation));return F(e),r},Y=async e=>{let{errors:r}=await Z(e);if(e)for(let t of e){let e=b(r,t);e?x(n.errors,t,e):W(n.errors,t)}else n.errors=r;return r},J=async(e,r,a={valid:!0})=>{for(let l in e){let o=e[l];if(o){let{_f:e,...l}=o;if(e){let l=g.array.has(e.name),i=o._f&&ed(o._f);i&&S.validatingFields&&F([e.name],!0);let s=await ek(o,g.disabled,f,E,t.shouldUseNativeValidation&&!r,l);if(i&&S.validatingFields&&F([e.name]),s[e.name]&&(a.valid=!1,r))break;r||(b(s,e.name)?l?eb(n.errors,s,e.name):x(n.errors,e.name,s[e.name]):W(n.errors,e.name))}I(l)||await J(l,r,a)}}return a.valid},Q=(e,r)=>!t.disabled&&(e&&r&&x(f,e,r),!P(eA(),d)),ee=(e,r,t)=>V(e,g,{...y.mount?f:m(r)?d:R(e)?{[e]:r}:r},t,r),et=(e,r,t={})=>{let n=b(i,e),l=r;if(n){let t=n._f;t&&(t.disabled||x(f,e,er(r,t)),l=U(t.ref)&&o(r)?"":r,B(t.ref)?[...t.ref.options].forEach(e=>e.selected=l.includes(e.value)):t.refs?a(t.ref)?t.refs.forEach(e=>{e.defaultChecked&&e.disabled||(Array.isArray(l)?e.checked=!!l.find(r=>r===e.value):e.checked=l===e.value||!!l)}):t.refs.forEach(e=>e.checked=e.value===l):z(t.ref)?t.ref.value="":(t.ref.value=l,t.ref.type||j.state.next({name:e,values:h(f)})))}(t.shouldDirty||t.shouldTouch)&&H(e,l,t.shouldTouch,t.shouldDirty,!0),t.shouldValidate&&ex(e)},en=(e,r,t)=>{for(let n in r){if(!r.hasOwnProperty(n))return;let a=r[n],o=e+"."+n,u=b(i,o);(g.array.has(e)||s(a)||u&&!u._f)&&!l(a)?en(o,a,t):et(o,a,t)}},eo=(e,r,t={})=>{let a=b(i,e),l=g.array.has(e),s=h(r);x(f,e,s),l?(j.array.next({name:e,values:h(f)}),(S.isDirty||S.dirtyFields||C.isDirty||C.dirtyFields)&&t.shouldDirty&&j.state.next({name:e,dirtyFields:$(d,f),isDirty:Q(e,s)})):!a||a._f||o(s)?et(e,s,t):en(e,s,t),ef(e,g)&&j.state.next({...n,name:e}),j.state.next({name:y.mount?e:void 0,values:h(f)})},eu=async e=>{y.mount=!0;let a=e.target,o=a.name,s=!0,d=b(i,o),c=e=>{s=Number.isNaN(e)||l(e)&&isNaN(e.getTime())||P(e,b(f,o,e))},p=es(t.mode),m=es(t.reValidateMode);if(d){let l,y,v=a.type?ea(d._f):u(e),w=e.type===k.BLUR||e.type===k.FOCUS_OUT,_=!ec(d._f)&&!t.resolver&&!b(n.errors,o)&&!d._f.deps||ev(w,b(n.touchedFields,o),n.isSubmitted,m,p),A=ef(o,g,w);x(f,o,v),w?a&&a.readOnly||(d._f.onBlur&&d._f.onBlur(e),r&&r(0)):d._f.onChange&&d._f.onChange(e);let D=H(o,v,w),R=!I(D)||A;if(w||j.state.next({name:o,type:e.type,values:h(f)}),_)return(S.isValid||C.isValid)&&("onBlur"===t.mode?w&&M():w||M()),R&&j.state.next({name:o,...A?{}:D});if(!w&&A&&j.state.next({...n}),t.resolver){let{errors:e}=await Z([o]);if(c(v),s){let r=eh(n.errors,i,o),t=eh(e,i,r.name||o);l=t.error,o=t.name,y=I(e)}}else F([o],!0),l=(await ek(d,g.disabled,f,E,t.shouldUseNativeValidation))[o],F([o]),c(v),s&&(l?y=!1:(S.isValid||C.isValid)&&(y=await J(i,!0)));s&&(d._f.deps&&(!Array.isArray(d._f.deps)||d._f.deps.length>0)&&ex(d._f.deps),X(o,y,l,D))}},ew=(e,r)=>{if(b(n.errors,r)&&e.focus)return e.focus(),1},ex=async(e,r={})=>{let a,l,o=L(e);if(t.resolver){let r=await Y(m(e)?e:o);a=I(r),l=e?!o.some(e=>b(r,e)):a}else e?((l=(await Promise.all(o.map(async e=>{let r=b(i,e);return await J(r&&r._f?{[e]:r}:r)}))).every(Boolean))||n.isValid)&&M():l=a=await J(i);return j.state.next({...!R(e)||(S.isValid||C.isValid)&&a!==n.isValid?{}:{name:e},...t.resolver||!e?{isValid:a}:{},errors:n.errors}),r.shouldFocus&&!l&&ep(i,ew,e?o:g.mount),l},eA=(e,r)=>{let t={...y.mount?f:d};return r&&(t=function e(r,t){let n={};for(let a in r)if(r.hasOwnProperty(a)){let l=r[a],o=t[a];if(l&&s(l)&&o){let r=e(l,o);s(r)&&(n[a]=r)}else r[a]&&(n[a]=o)}return n}(r.dirtyFields?n.dirtyFields:n.touchedFields,t)),m(e)?t:R(e)?b(t,e):e.map(e=>b(t,e))},eS=(e,r)=>({invalid:!!b((r||n).errors,e),isDirty:!!b((r||n).dirtyFields,e),error:b((r||n).errors,e),isValidating:!!b(n.validatingFields,e),isTouched:!!b((r||n).touchedFields,e)}),eC=(e,r,t)=>{let a=(b(i,e,{_f:{}})._f||{}).ref,{ref:l,message:o,type:s,...u}=b(n.errors,e)||{};x(n.errors,e,{...u,...r,ref:a}),j.state.next({name:e,errors:n.errors,isValid:!1}),t&&t.shouldFocus&&a&&a.focus&&a.focus()},ej=e=>j.state.subscribe({next:r=>{em(e.name,r.name,e.exact)&&ey(r,e.formState||S,eO,e.reRenderRoot)&&e.callback({values:{...f},...n,...r,defaultValues:d})}}).unsubscribe,eE=(e,r={})=>{for(let a of e?L(e):g.mount)g.mount.delete(a),g.array.delete(a),r.keepValue||(W(i,a),W(f,a)),r.keepError||W(n.errors,a),r.keepDirty||W(n.dirtyFields,a),r.keepTouched||W(n.touchedFields,a),r.keepIsValidating||W(n.validatingFields,a),t.shouldUnregister||r.keepDefaultValue||W(d,a);j.state.next({values:h(f)}),j.state.next({...n,...!r.keepDirty?{}:{isDirty:Q()}}),r.keepIsValid||M()},eD=({disabled:e,name:r})=>{(w(e)&&y.mount||e||g.disabled.has(r))&&(e?g.disabled.add(r):g.disabled.delete(r))},eM=(e,r={})=>{let n=b(i,e),a=w(r.disabled)||w(t.disabled);return x(i,e,{...n||{},_f:{...n&&n._f?n._f:{ref:{name:e}},name:e,mount:!0,...r}}),g.mount.add(e),n?eD({disabled:w(r.disabled)?r.disabled:t.disabled,name:e}):T(e,!0,r.value),{...a?{disabled:r.disabled||t.disabled}:{},...t.progressive?{required:!!r.required,min:ei(r.min),max:ei(r.max),minLength:ei(r.minLength),maxLength:ei(r.maxLength),pattern:ei(r.pattern)}:{},name:e,onChange:eu,onBlur:eu,ref:a=>{if(a){eM(e,r),n=b(i,e);let t=m(a.value)&&a.querySelectorAll&&a.querySelectorAll("input,select,textarea")[0]||a,l=q(t),o=n._f.refs||[];(l?o.find(e=>e===t):t===n._f.ref)||(x(i,e,{_f:{...n._f,...l?{refs:[...o.filter(G),t,...Array.isArray(b(d,e))?[{}]:[]],ref:{type:t.type,name:e}}:{ref:t}}}),T(e,!1,void 0,t))}else(n=b(i,e,{}))._f&&(n._f.mount=!1),(t.shouldUnregister||r.shouldUnregister)&&!(c(g.array,e)&&y.action)&&g.unMount.add(e)}}},eR=()=>t.shouldFocusError&&ep(i,ew,g.mount),eV=(e,r)=>async a=>{let l;a&&(a.preventDefault&&a.preventDefault(),a.persist&&a.persist());let o=h(f);if(j.state.next({isSubmitting:!0}),t.resolver){let{errors:e,values:r}=await Z();n.errors=e,o=h(r)}else await J(i);if(g.disabled.size)for(let e of g.disabled)W(o,e);if(W(n.errors,"root"),I(n.errors)){j.state.next({errors:{}});try{await e(o,a)}catch(e){l=e}}else r&&await r({...n.errors},a),eR(),setTimeout(eR);if(j.state.next({isSubmitted:!0,isSubmitting:!1,isSubmitSuccessful:I(n.errors)&&!l,submitCount:n.submitCount+1,errors:n.errors}),l)throw l},eF=(e,r={})=>{let a=e?h(e):d,l=h(a),o=I(e),s=o?d:l;if(r.keepDefaultValues||(d=a),!r.keepValues){if(r.keepDirtyValues)for(let e of Array.from(new Set([...g.mount,...Object.keys($(d,f))])))b(n.dirtyFields,e)?x(s,e,b(f,e)):eo(e,b(s,e));else{if(p&&m(e))for(let e of g.mount){let r=b(i,e);if(r&&r._f){let e=Array.isArray(r._f.refs)?r._f.refs[0]:r._f.ref;if(U(e)){let r=e.closest("form");if(r){r.reset();break}}}}if(r.keepFieldsRef)for(let e of g.mount)eo(e,b(s,e));else i={}}f=t.shouldUnregister?r.keepDefaultValues?h(d):{}:h(s),j.array.next({values:{...s}}),j.state.next({values:{...s}})}g={mount:r.keepDirtyValues?g.mount:new Set,unMount:new Set,array:new Set,disabled:new Set,watch:new Set,watchAll:!1,focus:""},y.mount=!S.isValid||!!r.keepIsValid||!!r.keepDirtyValues,y.watch=!!t.shouldUnregister,j.state.next({submitCount:r.keepSubmitCount?n.submitCount:0,isDirty:!o&&(r.keepDirty?n.isDirty:!!(r.keepDefaultValues&&!P(e,d))),isSubmitted:!!r.keepIsSubmitted&&n.isSubmitted,dirtyFields:o?{}:r.keepDirtyValues?r.keepDefaultValues&&f?$(d,f):n.dirtyFields:r.keepDefaultValues&&e?$(d,e):r.keepDirty?n.dirtyFields:{},touchedFields:r.keepTouched?n.touchedFields:{},errors:r.keepErrors?n.errors:{},isSubmitSuccessful:!!r.keepIsSubmitSuccessful&&n.isSubmitSuccessful,isSubmitting:!1,defaultValues:d})},eP=(e,r)=>eF(K(e)?e(f):e,r),eO=e=>{n={...n,...e}},eT={control:{register:eM,unregister:eE,getFieldState:eS,handleSubmit:eV,setError:eC,_subscribe:ej,_runSchema:Z,_focusError:eR,_getWatch:ee,_getDirty:Q,_setValid:M,_setFieldArray:(e,r=[],a,l,o=!0,s=!0)=>{if(l&&a&&!t.disabled){if(y.action=!0,s&&Array.isArray(b(i,e))){let r=a(b(i,e),l.argA,l.argB);o&&x(i,e,r)}if(s&&Array.isArray(b(n.errors,e))){let r=a(b(n.errors,e),l.argA,l.argB);o&&x(n.errors,e,r),eg(n.errors,e)}if((S.touchedFields||C.touchedFields)&&s&&Array.isArray(b(n.touchedFields,e))){let r=a(b(n.touchedFields,e),l.argA,l.argB);o&&x(n.touchedFields,e,r)}(S.dirtyFields||C.dirtyFields)&&(n.dirtyFields=$(d,f)),j.state.next({name:e,isDirty:Q(e,r),dirtyFields:n.dirtyFields,errors:n.errors,isValid:n.isValid})}else x(f,e,r)},_setDisabledField:eD,_setErrors:e=>{n.errors=e,j.state.next({errors:n.errors,isValid:!1})},_getFieldArray:e=>v(b(y.mount?f:d,e,t.shouldUnregister?b(d,e,[]):[])),_reset:eF,_resetDefaultValues:()=>K(t.defaultValues)&&t.defaultValues().then(e=>{eP(e,t.resetOptions),j.state.next({isLoading:!1})}),_removeUnmounted:()=>{for(let e of g.unMount){let r=b(i,e);r&&(r._f.refs?r._f.refs.every(e=>!G(e)):!G(r._f.ref))&&eE(e)}g.unMount=new Set},_disableForm:e=>{w(e)&&(j.state.next({disabled:e}),ep(i,(r,t)=>{let n=b(i,t);n&&(r.disabled=n._f.disabled||e,Array.isArray(n._f.refs)&&n._f.refs.forEach(r=>{r.disabled=n._f.disabled||e}))},0,!1))},_subjects:j,_proxyFormState:S,get _fields(){return i},get _formValues(){return f},get _state(){return y},set _state(value){y=value},get _defaultValues(){return d},get _names(){return g},set _names(value){g=value},get _formState(){return n},get _options(){return t},set _options(value){t={...t,...value}}},subscribe:e=>(y.mount=!0,C={...C,...e.formState},ej({...e,formState:C})),trigger:ex,register:eM,handleSubmit:eV,watch:(e,r)=>K(e)?j.state.subscribe({next:t=>"values"in t&&e(ee(void 0,r),t)}):ee(e,r,!0),setValue:eo,getValues:eA,reset:eP,resetField:(e,r={})=>{b(i,e)&&(m(r.defaultValue)?eo(e,h(b(d,e))):(eo(e,r.defaultValue),x(d,e,h(r.defaultValue))),r.keepTouched||W(n.touchedFields,e),r.keepDirty||(W(n.dirtyFields,e),n.isDirty=r.defaultValue?Q(e,h(b(d,e))):Q()),!r.keepError&&(W(n.errors,e),S.isValid&&M()),j.state.next({...n}))},clearErrors:e=>{e&&L(e).forEach(e=>W(n.errors,e)),j.state.next({errors:e?n.errors:{}})},unregister:eE,setError:eC,setFocus:(e,r={})=>{let t=b(i,e),n=t&&t._f;if(n){let e=n.refs?n.refs[0]:n.ref;e.focus&&(e.focus(),r.shouldSelect&&K(e.select)&&e.select())}},getFieldState:eS};return{...eT,formControl:eT}}(e);r.current={...n,formState:i}}let f=r.current.control;return f._options=e,D(()=>{let e=f._subscribe({formState:f._proxyFormState,callback:()=>d({...f._formState}),reRenderRoot:!0});return d(e=>({...e,isReady:!0})),f._formState.isReady=!0,e},[f]),n.useEffect(()=>f._disableForm(e.disabled),[f,e.disabled]),n.useEffect(()=>{e.mode&&(f._options.mode=e.mode),e.reValidateMode&&(f._options.reValidateMode=e.reValidateMode)},[f,e.mode,e.reValidateMode]),n.useEffect(()=>{e.errors&&(f._setErrors(e.errors),f._focusError())},[f,e.errors]),n.useEffect(()=>{e.shouldUnregister&&f._subjects.state.next({values:f._getWatch()})},[f,e.shouldUnregister]),n.useEffect(()=>{if(f._proxyFormState.isDirty){let e=f._getDirty();e!==i.isDirty&&f._subjects.state.next({isDirty:e})}},[f,i.isDirty]),n.useEffect(()=>{e.values&&!P(e.values,t.current)?(f._reset(e.values,{keepFieldsRef:!0,...f._options.resetOptions}),t.current=e.values,d(e=>({...e}))):f._resetDefaultValues()},[f,e.values]),n.useEffect(()=>{f._state.mount||(f._setValid(),f._state.mount=!0),f._state.watch&&(f._state.watch=!1,f._subjects.state.next({...f._formState})),f._removeUnmounted()}),r.current.formState=E(i,f),r.current}},1853:(e,r,t)=>{t.d(r,{C1:()=>_,bL:()=>x});var n=t(4398),a=t(2050),l=t(940),o=t(6687),i=t(6657),s=t(6017),u=t(4753),d=t(6175),c=t(3780),f=t(3422),p="Checkbox",[h,y]=(0,l.A)(p),[m,v]=h(p);function g(e){let{__scopeCheckbox:r,checked:t,children:a,defaultChecked:l,disabled:o,form:s,name:u,onCheckedChange:d,required:c,value:h="on",internal_do_not_use_render:y}=e,[v,g]=(0,i.i)({prop:t,defaultProp:null!=l&&l,onChange:d,caller:p}),[b,w]=n.useState(null),[x,k]=n.useState(null),_=n.useRef(!1),A=!b||!!s||!!b.closest("form"),S={checked:v,disabled:o,setChecked:g,control:b,setControl:w,name:u,form:s,value:h,hasConsumerStoppedPropagationRef:_,required:c,defaultChecked:!C(l)&&l,isFormControl:A,bubbleInput:x,setBubbleInput:k};return(0,f.jsx)(m,{scope:r,...S,children:"function"==typeof y?y(S):a})}var b="CheckboxTrigger",w=n.forwardRef((e,r)=>{let{__scopeCheckbox:t,onKeyDown:l,onClick:i,...s}=e,{control:u,value:d,disabled:p,checked:h,required:y,setControl:m,setChecked:g,hasConsumerStoppedPropagationRef:w,isFormControl:x,bubbleInput:k}=v(b,t),_=(0,a.s)(r,m),A=n.useRef(h);return n.useEffect(()=>{let e=null==u?void 0:u.form;if(e){let r=()=>g(A.current);return e.addEventListener("reset",r),()=>e.removeEventListener("reset",r)}},[u,g]),(0,f.jsx)(c.sG.button,{type:"button",role:"checkbox","aria-checked":C(h)?"mixed":h,"aria-required":y,"data-state":j(h),"data-disabled":p?"":void 0,disabled:p,value:d,...s,ref:_,onKeyDown:(0,o.mK)(l,e=>{"Enter"===e.key&&e.preventDefault()}),onClick:(0,o.mK)(i,e=>{g(e=>!!C(e)||!e),k&&x&&(w.current=e.isPropagationStopped(),w.current||e.stopPropagation())})})});w.displayName=b;var x=n.forwardRef((e,r)=>{let{__scopeCheckbox:t,name:n,checked:a,defaultChecked:l,required:o,disabled:i,value:s,onCheckedChange:u,form:d,...c}=e;return(0,f.jsx)(g,{__scopeCheckbox:t,checked:a,defaultChecked:l,disabled:i,required:o,onCheckedChange:u,name:n,form:d,value:s,internal_do_not_use_render:e=>{let{isFormControl:n}=e;return(0,f.jsxs)(f.Fragment,{children:[(0,f.jsx)(w,{...c,ref:r,__scopeCheckbox:t}),n&&(0,f.jsx)(S,{__scopeCheckbox:t})]})}})});x.displayName=p;var k="CheckboxIndicator",_=n.forwardRef((e,r)=>{let{__scopeCheckbox:t,forceMount:n,...a}=e,l=v(k,t);return(0,f.jsx)(d.C,{present:n||C(l.checked)||!0===l.checked,children:(0,f.jsx)(c.sG.span,{"data-state":j(l.checked),"data-disabled":l.disabled?"":void 0,...a,ref:r,style:{pointerEvents:"none",...e.style}})})});_.displayName=k;var A="CheckboxBubbleInput",S=n.forwardRef((e,r)=>{let{__scopeCheckbox:t,...l}=e,{control:o,hasConsumerStoppedPropagationRef:i,checked:d,defaultChecked:p,required:h,disabled:y,name:m,value:g,form:b,bubbleInput:w,setBubbleInput:x}=v(A,t),k=(0,a.s)(r,x),_=(0,s.Z)(d),S=(0,u.X)(o);n.useEffect(()=>{if(!w)return;let e=Object.getOwnPropertyDescriptor(window.HTMLInputElement.prototype,"checked").set,r=!i.current;if(_!==d&&e){let t=new Event("click",{bubbles:r});w.indeterminate=C(d),e.call(w,!C(d)&&d),w.dispatchEvent(t)}},[w,_,d,i]);let j=n.useRef(!C(d)&&d);return(0,f.jsx)(c.sG.input,{type:"checkbox","aria-hidden":!0,defaultChecked:null!=p?p:j.current,required:h,disabled:y,name:m,value:g,form:b,...l,tabIndex:-1,ref:k,style:{...l.style,...S,position:"absolute",pointerEvents:"none",opacity:0,margin:0,transform:"translateX(-100%)"}})});function C(e){return"indeterminate"===e}function j(e){return C(e)?"indeterminate":e?"checked":"unchecked"}S.displayName=A},1935:(e,r,t)=>{t.d(r,{A:()=>n});let n=(0,t(3929).A)("users",[["path",{d:"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2",key:"1yyitq"}],["circle",{cx:"9",cy:"7",r:"4",key:"nufk8"}],["path",{d:"M22 21v-2a4 4 0 0 0-3-3.87",key:"kshegd"}],["path",{d:"M16 3.13a4 4 0 0 1 0 7.75",key:"1da9ce"}]])},2034:(e,r,t)=>{t.d(r,{A:()=>n});let n=(0,t(3929).A)("cpu",[["path",{d:"M12 20v2",key:"1lh1kg"}],["path",{d:"M12 2v2",key:"tus03m"}],["path",{d:"M17 20v2",key:"1rnc9c"}],["path",{d:"M17 2v2",key:"11trls"}],["path",{d:"M2 12h2",key:"1t8f8n"}],["path",{d:"M2 17h2",key:"7oei6x"}],["path",{d:"M2 7h2",key:"asdhe0"}],["path",{d:"M20 12h2",key:"1q8mjw"}],["path",{d:"M20 17h2",key:"1fpfkl"}],["path",{d:"M20 7h2",key:"1o8tra"}],["path",{d:"M7 20v2",key:"4gnj0m"}],["path",{d:"M7 2v2",key:"1i4yhu"}],["rect",{x:"4",y:"4",width:"16",height:"16",rx:"2",key:"1vbyd7"}],["rect",{x:"8",y:"8",width:"8",height:"8",rx:"1",key:"z9xiuo"}]])},2267:(e,r,t)=>{t.d(r,{A:()=>n});let n=(0,t(3929).A)("triangle-alert",[["path",{d:"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3",key:"wmoenq"}],["path",{d:"M12 9v4",key:"juzpu7"}],["path",{d:"M12 17h.01",key:"p32p05"}]])},2390:(e,r,t)=>{t.d(r,{A:()=>n});let n=(0,t(3929).A)("send",[["path",{d:"M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z",key:"1ffxy3"}],["path",{d:"m21.854 2.147-10.94 10.939",key:"12cjpa"}]])},2434:(e,r,t)=>{t.d(r,{A:()=>n});let n=(0,t(3929).A)("loader-circle",[["path",{d:"M21 12a9 9 0 1 1-6.219-8.56",key:"13zald"}]])},3545:(e,r,t)=>{t.d(r,{A:()=>n});let n=(0,t(3929).A)("square-check-big",[["path",{d:"M21 10.5V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h12.5",key:"1uzm8b"}],["path",{d:"m9 11 3 3L22 4",key:"1pflzl"}]])},3728:(e,r,t)=>{t.d(r,{A:()=>n});let n=(0,t(3929).A)("refresh-cw",[["path",{d:"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8",key:"v9h5vc"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}],["path",{d:"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16",key:"3uifl3"}],["path",{d:"M8 16H3v5",key:"1cv678"}]])},3732:(e,r,t)=>{t.d(r,{A:()=>n});let n=(0,t(3929).A)("ellipsis-vertical",[["circle",{cx:"12",cy:"12",r:"1",key:"41hilf"}],["circle",{cx:"12",cy:"5",r:"1",key:"gxeob9"}],["circle",{cx:"12",cy:"19",r:"1",key:"lyex9k"}]])},4713:(e,r,t)=>{t.d(r,{A:()=>n});let n=(0,t(3929).A)("volume-2",[["path",{d:"M11 4.702a.705.705 0 0 0-1.203-.498L6.413 7.587A1.4 1.4 0 0 1 5.416 8H3a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h2.416a1.4 1.4 0 0 1 .997.413l3.383 3.384A.705.705 0 0 0 11 19.298z",key:"uqj9uw"}],["path",{d:"M16 9a5 5 0 0 1 0 6",key:"1q6k2b"}],["path",{d:"M19.364 18.364a9 9 0 0 0 0-12.728",key:"ijwkga"}]])},4717:(e,r,t)=>{t.d(r,{A:()=>n});let n=(0,t(3929).A)("circle-x",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m15 9-6 6",key:"1uzhvr"}],["path",{d:"m9 9 6 6",key:"z0biqf"}]])},4938:(e,r,t)=>{t.d(r,{A:()=>n});let n=(0,t(3929).A)("file-text",[["path",{d:"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z",key:"1rqfz7"}],["path",{d:"M14 2v4a2 2 0 0 0 2 2h4",key:"tnqrlb"}],["path",{d:"M10 9H8",key:"b1mrlr"}],["path",{d:"M16 13H8",key:"t4e002"}],["path",{d:"M16 17H8",key:"z1uh3a"}]])},4963:(e,r,t)=>{t.d(r,{A:()=>n});let n=(0,t(3929).A)("square",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}]])},5195:(e,r,t)=>{t.d(r,{A:()=>n});let n=(0,t(3929).A)("key",[["path",{d:"m15.5 7.5 2.3 2.3a1 1 0 0 0 1.4 0l2.1-2.1a1 1 0 0 0 0-1.4L19 4",key:"g0fldk"}],["path",{d:"m21 2-9.6 9.6",key:"1j0ho8"}],["circle",{cx:"7.5",cy:"15.5",r:"5.5",key:"yqb3hr"}]])},6049:(e,r,t)=>{t.d(r,{UC:()=>eW,q7:()=>eX,ZL:()=>eG,bL:()=>eH,wv:()=>eZ,l9:()=>eq});var n=t(4398),a=t(6687),l=t(2050),o=t(940),i=t(6657),s=t(3780),u=t(6383),d=t(7689),c=t(3213),f=t(7),p=t(3138),h=t(6565),y=t(6387),m=t(1732),v=t(6175),g=t(718),b=t(6950),w=t(7589),x=t(3871),k=t(3338),_=t(3422),A=["Enter"," "],S=["ArrowUp","PageDown","End"],C=["ArrowDown","PageUp","Home",...S],j={ltr:[...A,"ArrowRight"],rtl:[...A,"ArrowLeft"]},E={ltr:["ArrowLeft"],rtl:["ArrowRight"]},D="Menu",[M,R,V]=(0,u.N)(D),[F,P]=(0,o.A)(D,[V,y.Bk,g.RG]),O=(0,y.Bk)(),T=(0,g.RG)(),[L,N]=F(D),[I,z]=F(D),K=e=>{let{__scopeMenu:r,open:t=!1,children:a,dir:l,onOpenChange:o,modal:i=!0}=e,s=O(r),[u,c]=n.useState(null),f=n.useRef(!1),p=(0,w.c)(o),h=(0,d.jH)(l);return n.useEffect(()=>{let e=()=>{f.current=!0,document.addEventListener("pointerdown",r,{capture:!0,once:!0}),document.addEventListener("pointermove",r,{capture:!0,once:!0})},r=()=>f.current=!1;return document.addEventListener("keydown",e,{capture:!0}),()=>{document.removeEventListener("keydown",e,{capture:!0}),document.removeEventListener("pointerdown",r,{capture:!0}),document.removeEventListener("pointermove",r,{capture:!0})}},[]),(0,_.jsx)(y.bL,{...s,children:(0,_.jsx)(L,{scope:r,open:t,onOpenChange:p,content:u,onContentChange:c,children:(0,_.jsx)(I,{scope:r,onClose:n.useCallback(()=>p(!1),[p]),isUsingKeyboardRef:f,dir:h,modal:i,children:a})})})};K.displayName=D;var U=n.forwardRef((e,r)=>{let{__scopeMenu:t,...n}=e,a=O(t);return(0,_.jsx)(y.Mz,{...a,...n,ref:r})});U.displayName="MenuAnchor";var B="MenuPortal",[H,q]=F(B,{forceMount:void 0}),G=e=>{let{__scopeMenu:r,forceMount:t,children:n,container:a}=e,l=N(B,r);return(0,_.jsx)(H,{scope:r,forceMount:t,children:(0,_.jsx)(v.C,{present:t||l.open,children:(0,_.jsx)(m.Z,{asChild:!0,container:a,children:n})})})};G.displayName=B;var W="MenuContent",[X,Z]=F(W),Y=n.forwardRef((e,r)=>{let t=q(W,e.__scopeMenu),{forceMount:n=t.forceMount,...a}=e,l=N(W,e.__scopeMenu),o=z(W,e.__scopeMenu);return(0,_.jsx)(M.Provider,{scope:e.__scopeMenu,children:(0,_.jsx)(v.C,{present:n||l.open,children:(0,_.jsx)(M.Slot,{scope:e.__scopeMenu,children:o.modal?(0,_.jsx)($,{...a,ref:r}):(0,_.jsx)(J,{...a,ref:r})})})})}),$=n.forwardRef((e,r)=>{let t=N(W,e.__scopeMenu),o=n.useRef(null),i=(0,l.s)(r,o);return n.useEffect(()=>{let e=o.current;if(e)return(0,x.Eq)(e)},[]),(0,_.jsx)(ee,{...e,ref:i,trapFocus:t.open,disableOutsidePointerEvents:t.open,disableOutsideScroll:!0,onFocusOutside:(0,a.mK)(e.onFocusOutside,e=>e.preventDefault(),{checkForDefaultPrevented:!1}),onDismiss:()=>t.onOpenChange(!1)})}),J=n.forwardRef((e,r)=>{let t=N(W,e.__scopeMenu);return(0,_.jsx)(ee,{...e,ref:r,trapFocus:!1,disableOutsidePointerEvents:!1,disableOutsideScroll:!1,onDismiss:()=>t.onOpenChange(!1)})}),Q=(0,b.TL)("MenuContent.ScrollLock"),ee=n.forwardRef((e,r)=>{let{__scopeMenu:t,loop:o=!1,trapFocus:i,onOpenAutoFocus:s,onCloseAutoFocus:u,disableOutsidePointerEvents:d,onEntryFocus:h,onEscapeKeyDown:m,onPointerDownOutside:v,onFocusOutside:b,onInteractOutside:w,onDismiss:x,disableOutsideScroll:A,...j}=e,E=N(W,t),D=z(W,t),M=O(t),V=T(t),F=R(t),[P,L]=n.useState(null),I=n.useRef(null),K=(0,l.s)(r,I,E.onContentChange),U=n.useRef(0),B=n.useRef(""),H=n.useRef(0),q=n.useRef(null),G=n.useRef("right"),Z=n.useRef(0),Y=A?k.A:n.Fragment,$=e=>{var r,t;let n=B.current+e,a=F().filter(e=>!e.disabled),l=document.activeElement,o=null==(r=a.find(e=>e.ref.current===l))?void 0:r.textValue,i=function(e,r,t){var n;let a=r.length>1&&Array.from(r).every(e=>e===r[0])?r[0]:r,l=t?e.indexOf(t):-1,o=(n=Math.max(l,0),e.map((r,t)=>e[(n+t)%e.length]));1===a.length&&(o=o.filter(e=>e!==t));let i=o.find(e=>e.toLowerCase().startsWith(a.toLowerCase()));return i!==t?i:void 0}(a.map(e=>e.textValue),n,o),s=null==(t=a.find(e=>e.textValue===i))?void 0:t.ref.current;!function e(r){B.current=r,window.clearTimeout(U.current),""!==r&&(U.current=window.setTimeout(()=>e(""),1e3))}(n),s&&setTimeout(()=>s.focus())};n.useEffect(()=>()=>window.clearTimeout(U.current),[]),(0,f.Oh)();let J=n.useCallback(e=>{var r,t;return G.current===(null==(r=q.current)?void 0:r.side)&&function(e,r){return!!r&&function(e,r){let{x:t,y:n}=e,a=!1;for(let e=0,l=r.length-1;en!=c>n&&t<(d-s)*(n-u)/(c-u)+s&&(a=!a)}return a}({x:e.clientX,y:e.clientY},r)}(e,null==(t=q.current)?void 0:t.area)},[]);return(0,_.jsx)(X,{scope:t,searchRef:B,onItemEnter:n.useCallback(e=>{J(e)&&e.preventDefault()},[J]),onItemLeave:n.useCallback(e=>{var r;J(e)||(null==(r=I.current)||r.focus(),L(null))},[J]),onTriggerLeave:n.useCallback(e=>{J(e)&&e.preventDefault()},[J]),pointerGraceTimerRef:H,onPointerGraceIntentChange:n.useCallback(e=>{q.current=e},[]),children:(0,_.jsx)(Y,{...A?{as:Q,allowPinchZoom:!0}:void 0,children:(0,_.jsx)(p.n,{asChild:!0,trapped:i,onMountAutoFocus:(0,a.mK)(s,e=>{var r;e.preventDefault(),null==(r=I.current)||r.focus({preventScroll:!0})}),onUnmountAutoFocus:u,children:(0,_.jsx)(c.qW,{asChild:!0,disableOutsidePointerEvents:d,onEscapeKeyDown:m,onPointerDownOutside:v,onFocusOutside:b,onInteractOutside:w,onDismiss:x,children:(0,_.jsx)(g.bL,{asChild:!0,...V,dir:D.dir,orientation:"vertical",loop:o,currentTabStopId:P,onCurrentTabStopIdChange:L,onEntryFocus:(0,a.mK)(h,e=>{D.isUsingKeyboardRef.current||e.preventDefault()}),preventScrollOnEntryFocus:!0,children:(0,_.jsx)(y.UC,{role:"menu","aria-orientation":"vertical","data-state":eC(E.open),"data-radix-menu-content":"",dir:D.dir,...M,...j,ref:K,style:{outline:"none",...j.style},onKeyDown:(0,a.mK)(j.onKeyDown,e=>{let r=e.target.closest("[data-radix-menu-content]")===e.currentTarget,t=e.ctrlKey||e.altKey||e.metaKey,n=1===e.key.length;r&&("Tab"===e.key&&e.preventDefault(),!t&&n&&$(e.key));let a=I.current;if(e.target!==a||!C.includes(e.key))return;e.preventDefault();let l=F().filter(e=>!e.disabled).map(e=>e.ref.current);S.includes(e.key)&&l.reverse(),function(e){let r=document.activeElement;for(let t of e)if(t===r||(t.focus(),document.activeElement!==r))return}(l)}),onBlur:(0,a.mK)(e.onBlur,e=>{e.currentTarget.contains(e.target)||(window.clearTimeout(U.current),B.current="")}),onPointerMove:(0,a.mK)(e.onPointerMove,eD(e=>{let r=e.target,t=Z.current!==e.clientX;e.currentTarget.contains(r)&&t&&(G.current=e.clientX>Z.current?"right":"left",Z.current=e.clientX)}))})})})})})})});Y.displayName=W;var er=n.forwardRef((e,r)=>{let{__scopeMenu:t,...n}=e;return(0,_.jsx)(s.sG.div,{role:"group",...n,ref:r})});er.displayName="MenuGroup";var et=n.forwardRef((e,r)=>{let{__scopeMenu:t,...n}=e;return(0,_.jsx)(s.sG.div,{...n,ref:r})});et.displayName="MenuLabel";var en="MenuItem",ea="menu.itemSelect",el=n.forwardRef((e,r)=>{let{disabled:t=!1,onSelect:o,...i}=e,u=n.useRef(null),d=z(en,e.__scopeMenu),c=Z(en,e.__scopeMenu),f=(0,l.s)(r,u),p=n.useRef(!1);return(0,_.jsx)(eo,{...i,ref:f,disabled:t,onClick:(0,a.mK)(e.onClick,()=>{let e=u.current;if(!t&&e){let r=new CustomEvent(ea,{bubbles:!0,cancelable:!0});e.addEventListener(ea,e=>null==o?void 0:o(e),{once:!0}),(0,s.hO)(e,r),r.defaultPrevented?p.current=!1:d.onClose()}}),onPointerDown:r=>{var t;null==(t=e.onPointerDown)||t.call(e,r),p.current=!0},onPointerUp:(0,a.mK)(e.onPointerUp,e=>{var r;p.current||null==(r=e.currentTarget)||r.click()}),onKeyDown:(0,a.mK)(e.onKeyDown,e=>{let r=""!==c.searchRef.current;t||r&&" "===e.key||A.includes(e.key)&&(e.currentTarget.click(),e.preventDefault())})})});el.displayName=en;var eo=n.forwardRef((e,r)=>{let{__scopeMenu:t,disabled:o=!1,textValue:i,...u}=e,d=Z(en,t),c=T(t),f=n.useRef(null),p=(0,l.s)(r,f),[h,y]=n.useState(!1),[m,v]=n.useState("");return n.useEffect(()=>{let e=f.current;if(e){var r;v((null!=(r=e.textContent)?r:"").trim())}},[u.children]),(0,_.jsx)(M.ItemSlot,{scope:t,disabled:o,textValue:null!=i?i:m,children:(0,_.jsx)(g.q7,{asChild:!0,...c,focusable:!o,children:(0,_.jsx)(s.sG.div,{role:"menuitem","data-highlighted":h?"":void 0,"aria-disabled":o||void 0,"data-disabled":o?"":void 0,...u,ref:p,onPointerMove:(0,a.mK)(e.onPointerMove,eD(e=>{o?d.onItemLeave(e):(d.onItemEnter(e),e.defaultPrevented||e.currentTarget.focus({preventScroll:!0}))})),onPointerLeave:(0,a.mK)(e.onPointerLeave,eD(e=>d.onItemLeave(e))),onFocus:(0,a.mK)(e.onFocus,()=>y(!0)),onBlur:(0,a.mK)(e.onBlur,()=>y(!1))})})})}),ei=n.forwardRef((e,r)=>{let{checked:t=!1,onCheckedChange:n,...l}=e;return(0,_.jsx)(ey,{scope:e.__scopeMenu,checked:t,children:(0,_.jsx)(el,{role:"menuitemcheckbox","aria-checked":ej(t)?"mixed":t,...l,ref:r,"data-state":eE(t),onSelect:(0,a.mK)(l.onSelect,()=>null==n?void 0:n(!!ej(t)||!t),{checkForDefaultPrevented:!1})})})});ei.displayName="MenuCheckboxItem";var es="MenuRadioGroup",[eu,ed]=F(es,{value:void 0,onValueChange:()=>{}}),ec=n.forwardRef((e,r)=>{let{value:t,onValueChange:n,...a}=e,l=(0,w.c)(n);return(0,_.jsx)(eu,{scope:e.__scopeMenu,value:t,onValueChange:l,children:(0,_.jsx)(er,{...a,ref:r})})});ec.displayName=es;var ef="MenuRadioItem",ep=n.forwardRef((e,r)=>{let{value:t,...n}=e,l=ed(ef,e.__scopeMenu),o=t===l.value;return(0,_.jsx)(ey,{scope:e.__scopeMenu,checked:o,children:(0,_.jsx)(el,{role:"menuitemradio","aria-checked":o,...n,ref:r,"data-state":eE(o),onSelect:(0,a.mK)(n.onSelect,()=>{var e;return null==(e=l.onValueChange)?void 0:e.call(l,t)},{checkForDefaultPrevented:!1})})})});ep.displayName=ef;var eh="MenuItemIndicator",[ey,em]=F(eh,{checked:!1}),ev=n.forwardRef((e,r)=>{let{__scopeMenu:t,forceMount:n,...a}=e,l=em(eh,t);return(0,_.jsx)(v.C,{present:n||ej(l.checked)||!0===l.checked,children:(0,_.jsx)(s.sG.span,{...a,ref:r,"data-state":eE(l.checked)})})});ev.displayName=eh;var eg=n.forwardRef((e,r)=>{let{__scopeMenu:t,...n}=e;return(0,_.jsx)(s.sG.div,{role:"separator","aria-orientation":"horizontal",...n,ref:r})});eg.displayName="MenuSeparator";var eb=n.forwardRef((e,r)=>{let{__scopeMenu:t,...n}=e,a=O(t);return(0,_.jsx)(y.i3,{...a,...n,ref:r})});eb.displayName="MenuArrow";var[ew,ex]=F("MenuSub"),ek="MenuSubTrigger",e_=n.forwardRef((e,r)=>{let t=N(ek,e.__scopeMenu),o=z(ek,e.__scopeMenu),i=ex(ek,e.__scopeMenu),s=Z(ek,e.__scopeMenu),u=n.useRef(null),{pointerGraceTimerRef:d,onPointerGraceIntentChange:c}=s,f={__scopeMenu:e.__scopeMenu},p=n.useCallback(()=>{u.current&&window.clearTimeout(u.current),u.current=null},[]);return n.useEffect(()=>p,[p]),n.useEffect(()=>{let e=d.current;return()=>{window.clearTimeout(e),c(null)}},[d,c]),(0,_.jsx)(U,{asChild:!0,...f,children:(0,_.jsx)(eo,{id:i.triggerId,"aria-haspopup":"menu","aria-expanded":t.open,"aria-controls":i.contentId,"data-state":eC(t.open),...e,ref:(0,l.t)(r,i.onTriggerChange),onClick:r=>{var n;null==(n=e.onClick)||n.call(e,r),e.disabled||r.defaultPrevented||(r.currentTarget.focus(),t.open||t.onOpenChange(!0))},onPointerMove:(0,a.mK)(e.onPointerMove,eD(r=>{s.onItemEnter(r),!r.defaultPrevented&&(e.disabled||t.open||u.current||(s.onPointerGraceIntentChange(null),u.current=window.setTimeout(()=>{t.onOpenChange(!0),p()},100)))})),onPointerLeave:(0,a.mK)(e.onPointerLeave,eD(e=>{var r,n;p();let a=null==(r=t.content)?void 0:r.getBoundingClientRect();if(a){let r=null==(n=t.content)?void 0:n.dataset.side,l="right"===r,o=a[l?"left":"right"],i=a[l?"right":"left"];s.onPointerGraceIntentChange({area:[{x:e.clientX+(l?-5:5),y:e.clientY},{x:o,y:a.top},{x:i,y:a.top},{x:i,y:a.bottom},{x:o,y:a.bottom}],side:r}),window.clearTimeout(d.current),d.current=window.setTimeout(()=>s.onPointerGraceIntentChange(null),300)}else{if(s.onTriggerLeave(e),e.defaultPrevented)return;s.onPointerGraceIntentChange(null)}})),onKeyDown:(0,a.mK)(e.onKeyDown,r=>{let n=""!==s.searchRef.current;if(!e.disabled&&(!n||" "!==r.key)&&j[o.dir].includes(r.key)){var a;t.onOpenChange(!0),null==(a=t.content)||a.focus(),r.preventDefault()}})})})});e_.displayName=ek;var eA="MenuSubContent",eS=n.forwardRef((e,r)=>{let t=q(W,e.__scopeMenu),{forceMount:o=t.forceMount,...i}=e,s=N(W,e.__scopeMenu),u=z(W,e.__scopeMenu),d=ex(eA,e.__scopeMenu),c=n.useRef(null),f=(0,l.s)(r,c);return(0,_.jsx)(M.Provider,{scope:e.__scopeMenu,children:(0,_.jsx)(v.C,{present:o||s.open,children:(0,_.jsx)(M.Slot,{scope:e.__scopeMenu,children:(0,_.jsx)(ee,{id:d.contentId,"aria-labelledby":d.triggerId,...i,ref:f,align:"start",side:"rtl"===u.dir?"left":"right",disableOutsidePointerEvents:!1,disableOutsideScroll:!1,trapFocus:!1,onOpenAutoFocus:e=>{var r;u.isUsingKeyboardRef.current&&(null==(r=c.current)||r.focus()),e.preventDefault()},onCloseAutoFocus:e=>e.preventDefault(),onFocusOutside:(0,a.mK)(e.onFocusOutside,e=>{e.target!==d.trigger&&s.onOpenChange(!1)}),onEscapeKeyDown:(0,a.mK)(e.onEscapeKeyDown,e=>{u.onClose(),e.preventDefault()}),onKeyDown:(0,a.mK)(e.onKeyDown,e=>{let r=e.currentTarget.contains(e.target),t=E[u.dir].includes(e.key);if(r&&t){var n;s.onOpenChange(!1),null==(n=d.trigger)||n.focus(),e.preventDefault()}})})})})})});function eC(e){return e?"open":"closed"}function ej(e){return"indeterminate"===e}function eE(e){return ej(e)?"indeterminate":e?"checked":"unchecked"}function eD(e){return r=>"mouse"===r.pointerType?e(r):void 0}eS.displayName=eA;var eM="DropdownMenu",[eR,eV]=(0,o.A)(eM,[P]),eF=P(),[eP,eO]=eR(eM),eT=e=>{let{__scopeDropdownMenu:r,children:t,dir:a,open:l,defaultOpen:o,onOpenChange:s,modal:u=!0}=e,d=eF(r),c=n.useRef(null),[f,p]=(0,i.i)({prop:l,defaultProp:null!=o&&o,onChange:s,caller:eM});return(0,_.jsx)(eP,{scope:r,triggerId:(0,h.B)(),triggerRef:c,contentId:(0,h.B)(),open:f,onOpenChange:p,onOpenToggle:n.useCallback(()=>p(e=>!e),[p]),modal:u,children:(0,_.jsx)(K,{...d,open:f,onOpenChange:p,dir:a,modal:u,children:t})})};eT.displayName=eM;var eL="DropdownMenuTrigger",eN=n.forwardRef((e,r)=>{let{__scopeDropdownMenu:t,disabled:n=!1,...o}=e,i=eO(eL,t),u=eF(t);return(0,_.jsx)(U,{asChild:!0,...u,children:(0,_.jsx)(s.sG.button,{type:"button",id:i.triggerId,"aria-haspopup":"menu","aria-expanded":i.open,"aria-controls":i.open?i.contentId:void 0,"data-state":i.open?"open":"closed","data-disabled":n?"":void 0,disabled:n,...o,ref:(0,l.t)(r,i.triggerRef),onPointerDown:(0,a.mK)(e.onPointerDown,e=>{!n&&0===e.button&&!1===e.ctrlKey&&(i.onOpenToggle(),i.open||e.preventDefault())}),onKeyDown:(0,a.mK)(e.onKeyDown,e=>{!n&&(["Enter"," "].includes(e.key)&&i.onOpenToggle(),"ArrowDown"===e.key&&i.onOpenChange(!0),["Enter"," ","ArrowDown"].includes(e.key)&&e.preventDefault())})})})});eN.displayName=eL;var eI=e=>{let{__scopeDropdownMenu:r,...t}=e,n=eF(r);return(0,_.jsx)(G,{...n,...t})};eI.displayName="DropdownMenuPortal";var ez="DropdownMenuContent",eK=n.forwardRef((e,r)=>{let{__scopeDropdownMenu:t,...l}=e,o=eO(ez,t),i=eF(t),s=n.useRef(!1);return(0,_.jsx)(Y,{id:o.contentId,"aria-labelledby":o.triggerId,...i,...l,ref:r,onCloseAutoFocus:(0,a.mK)(e.onCloseAutoFocus,e=>{var r;s.current||null==(r=o.triggerRef.current)||r.focus(),s.current=!1,e.preventDefault()}),onInteractOutside:(0,a.mK)(e.onInteractOutside,e=>{let r=e.detail.originalEvent,t=0===r.button&&!0===r.ctrlKey,n=2===r.button||t;(!o.modal||n)&&(s.current=!0)}),style:{...e.style,"--radix-dropdown-menu-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-dropdown-menu-content-available-width":"var(--radix-popper-available-width)","--radix-dropdown-menu-content-available-height":"var(--radix-popper-available-height)","--radix-dropdown-menu-trigger-width":"var(--radix-popper-anchor-width)","--radix-dropdown-menu-trigger-height":"var(--radix-popper-anchor-height)"}})});eK.displayName=ez,n.forwardRef((e,r)=>{let{__scopeDropdownMenu:t,...n}=e,a=eF(t);return(0,_.jsx)(er,{...a,...n,ref:r})}).displayName="DropdownMenuGroup",n.forwardRef((e,r)=>{let{__scopeDropdownMenu:t,...n}=e,a=eF(t);return(0,_.jsx)(et,{...a,...n,ref:r})}).displayName="DropdownMenuLabel";var eU=n.forwardRef((e,r)=>{let{__scopeDropdownMenu:t,...n}=e,a=eF(t);return(0,_.jsx)(el,{...a,...n,ref:r})});eU.displayName="DropdownMenuItem",n.forwardRef((e,r)=>{let{__scopeDropdownMenu:t,...n}=e,a=eF(t);return(0,_.jsx)(ei,{...a,...n,ref:r})}).displayName="DropdownMenuCheckboxItem",n.forwardRef((e,r)=>{let{__scopeDropdownMenu:t,...n}=e,a=eF(t);return(0,_.jsx)(ec,{...a,...n,ref:r})}).displayName="DropdownMenuRadioGroup",n.forwardRef((e,r)=>{let{__scopeDropdownMenu:t,...n}=e,a=eF(t);return(0,_.jsx)(ep,{...a,...n,ref:r})}).displayName="DropdownMenuRadioItem",n.forwardRef((e,r)=>{let{__scopeDropdownMenu:t,...n}=e,a=eF(t);return(0,_.jsx)(ev,{...a,...n,ref:r})}).displayName="DropdownMenuItemIndicator";var eB=n.forwardRef((e,r)=>{let{__scopeDropdownMenu:t,...n}=e,a=eF(t);return(0,_.jsx)(eg,{...a,...n,ref:r})});eB.displayName="DropdownMenuSeparator",n.forwardRef((e,r)=>{let{__scopeDropdownMenu:t,...n}=e,a=eF(t);return(0,_.jsx)(eb,{...a,...n,ref:r})}).displayName="DropdownMenuArrow",n.forwardRef((e,r)=>{let{__scopeDropdownMenu:t,...n}=e,a=eF(t);return(0,_.jsx)(e_,{...a,...n,ref:r})}).displayName="DropdownMenuSubTrigger",n.forwardRef((e,r)=>{let{__scopeDropdownMenu:t,...n}=e,a=eF(t);return(0,_.jsx)(eS,{...a,...n,ref:r,style:{...e.style,"--radix-dropdown-menu-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-dropdown-menu-content-available-width":"var(--radix-popper-available-width)","--radix-dropdown-menu-content-available-height":"var(--radix-popper-available-height)","--radix-dropdown-menu-trigger-width":"var(--radix-popper-anchor-width)","--radix-dropdown-menu-trigger-height":"var(--radix-popper-anchor-height)"}})}).displayName="DropdownMenuSubContent";var eH=eT,eq=eN,eG=eI,eW=eK,eX=eU,eZ=eB},7228:(e,r,t)=>{t.d(r,{A:()=>n});let n=(0,t(3929).A)("download",[["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}],["polyline",{points:"7 10 12 15 17 10",key:"2ggqvy"}],["line",{x1:"12",x2:"12",y1:"15",y2:"3",key:"1vk2je"}]])},7996:(e,r,t)=>{t.d(r,{A:()=>n});let n=(0,t(3929).A)("pen-line",[["path",{d:"M12 20h9",key:"t2du7b"}],["path",{d:"M16.376 3.622a1 1 0 0 1 3.002 3.002L7.368 18.635a2 2 0 0 1-.855.506l-2.872.838a.5.5 0 0 1-.62-.62l.838-2.872a2 2 0 0 1 .506-.854z",key:"1ykcvy"}]])},8815:(e,r,t)=>{t.d(r,{UC:()=>F,VY:()=>L,ZD:()=>O,ZL:()=>R,bL:()=>M,hE:()=>T,hJ:()=>V,rc:()=>P});var n=t(4398),a=t(940),l=t(2050),o=t(4316),i=t(6687),s=t(6950),u=t(3422),d="AlertDialog",[c,f]=(0,a.A)(d,[o.Hs]),p=(0,o.Hs)(),h=e=>{let{__scopeAlertDialog:r,...t}=e,n=p(r);return(0,u.jsx)(o.bL,{...n,...t,modal:!0})};h.displayName=d,n.forwardRef((e,r)=>{let{__scopeAlertDialog:t,...n}=e,a=p(t);return(0,u.jsx)(o.l9,{...a,...n,ref:r})}).displayName="AlertDialogTrigger";var y=e=>{let{__scopeAlertDialog:r,...t}=e,n=p(r);return(0,u.jsx)(o.ZL,{...n,...t})};y.displayName="AlertDialogPortal";var m=n.forwardRef((e,r)=>{let{__scopeAlertDialog:t,...n}=e,a=p(t);return(0,u.jsx)(o.hJ,{...a,...n,ref:r})});m.displayName="AlertDialogOverlay";var v="AlertDialogContent",[g,b]=c(v),w=(0,s.Dc)("AlertDialogContent"),x=n.forwardRef((e,r)=>{let{__scopeAlertDialog:t,children:a,...s}=e,d=p(t),c=n.useRef(null),f=(0,l.s)(r,c),h=n.useRef(null);return(0,u.jsx)(o.G$,{contentName:v,titleName:k,docsSlug:"alert-dialog",children:(0,u.jsx)(g,{scope:t,cancelRef:h,children:(0,u.jsxs)(o.UC,{role:"alertdialog",...d,...s,ref:f,onOpenAutoFocus:(0,i.mK)(s.onOpenAutoFocus,e=>{var r;e.preventDefault(),null==(r=h.current)||r.focus({preventScroll:!0})}),onPointerDownOutside:e=>e.preventDefault(),onInteractOutside:e=>e.preventDefault(),children:[(0,u.jsx)(w,{children:a}),(0,u.jsx)(D,{contentRef:c})]})})})});x.displayName=v;var k="AlertDialogTitle",_=n.forwardRef((e,r)=>{let{__scopeAlertDialog:t,...n}=e,a=p(t);return(0,u.jsx)(o.hE,{...a,...n,ref:r})});_.displayName=k;var A="AlertDialogDescription",S=n.forwardRef((e,r)=>{let{__scopeAlertDialog:t,...n}=e,a=p(t);return(0,u.jsx)(o.VY,{...a,...n,ref:r})});S.displayName=A;var C=n.forwardRef((e,r)=>{let{__scopeAlertDialog:t,...n}=e,a=p(t);return(0,u.jsx)(o.bm,{...a,...n,ref:r})});C.displayName="AlertDialogAction";var j="AlertDialogCancel",E=n.forwardRef((e,r)=>{let{__scopeAlertDialog:t,...n}=e,{cancelRef:a}=b(j,t),i=p(t),s=(0,l.s)(r,a);return(0,u.jsx)(o.bm,{...i,...n,ref:s})});E.displayName=j;var D=e=>{let{contentRef:r}=e,t="`".concat(v,"` requires a description for the component to be accessible for screen reader users.\n\nYou can add a description to the `").concat(v,"` by passing a `").concat(A,"` component as a child, which also benefits sighted users by adding visible context to the dialog.\n\nAlternatively, you can use your own component as a description by assigning it an `id` and passing the same value to the `aria-describedby` prop in `").concat(v,"`. If the description is confusing or duplicative for sighted users, you can use the `@radix-ui/react-visually-hidden` primitive as a wrapper around your description component.\n\nFor more information, see https://radix-ui.com/primitives/docs/components/alert-dialog");return n.useEffect(()=>{var e;document.getElementById(null==(e=r.current)?void 0:e.getAttribute("aria-describedby"))||console.warn(t)},[t,r]),null},M=h,R=y,V=m,F=x,P=C,O=E,T=_,L=S},9197:(e,r,t)=>{t.d(r,{A:()=>n});let n=(0,t(3929).A)("ban",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m4.9 4.9 14.2 14.2",key:"1m5liu"}]])},9472:(e,r,t)=>{t.d(r,{A:()=>n});let n=(0,t(3929).A)("list",[["path",{d:"M3 12h.01",key:"nlz23k"}],["path",{d:"M3 18h.01",key:"1tta3j"}],["path",{d:"M3 6h.01",key:"1rqtza"}],["path",{d:"M8 12h13",key:"1za7za"}],["path",{d:"M8 18h13",key:"1lx6n3"}],["path",{d:"M8 6h13",key:"ik3vkj"}]])},9625:(e,r,t)=>{t.d(r,{LM:()=>X,OK:()=>Z,VM:()=>_,bL:()=>W,lr:()=>P});var n=t(4398),a=t(3780),l=t(6175),o=t(940),i=t(2050),s=t(7589),u=t(7689),d=t(3177),c=t(1537),f=t(6687),p=t(3422),h="ScrollArea",[y,m]=(0,o.A)(h),[v,g]=y(h),b=n.forwardRef((e,r)=>{let{__scopeScrollArea:t,type:l="hover",dir:o,scrollHideDelay:s=600,...d}=e,[c,f]=n.useState(null),[h,y]=n.useState(null),[m,g]=n.useState(null),[b,w]=n.useState(null),[x,k]=n.useState(null),[_,A]=n.useState(0),[S,C]=n.useState(0),[j,E]=n.useState(!1),[D,M]=n.useState(!1),R=(0,i.s)(r,e=>f(e)),V=(0,u.jH)(o);return(0,p.jsx)(v,{scope:t,type:l,dir:V,scrollHideDelay:s,scrollArea:c,viewport:h,onViewportChange:y,content:m,onContentChange:g,scrollbarX:b,onScrollbarXChange:w,scrollbarXEnabled:j,onScrollbarXEnabledChange:E,scrollbarY:x,onScrollbarYChange:k,scrollbarYEnabled:D,onScrollbarYEnabledChange:M,onCornerWidthChange:A,onCornerHeightChange:C,children:(0,p.jsx)(a.sG.div,{dir:V,...d,ref:R,style:{position:"relative","--radix-scroll-area-corner-width":_+"px","--radix-scroll-area-corner-height":S+"px",...e.style}})})});b.displayName=h;var w="ScrollAreaViewport",x=n.forwardRef((e,r)=>{let{__scopeScrollArea:t,children:l,nonce:o,...s}=e,u=g(w,t),d=n.useRef(null),c=(0,i.s)(r,d,u.onViewportChange);return(0,p.jsxs)(p.Fragment,{children:[(0,p.jsx)("style",{dangerouslySetInnerHTML:{__html:"[data-radix-scroll-area-viewport]{scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;}[data-radix-scroll-area-viewport]::-webkit-scrollbar{display:none}"},nonce:o}),(0,p.jsx)(a.sG.div,{"data-radix-scroll-area-viewport":"",...s,ref:c,style:{overflowX:u.scrollbarXEnabled?"scroll":"hidden",overflowY:u.scrollbarYEnabled?"scroll":"hidden",...e.style},children:(0,p.jsx)("div",{ref:u.onContentChange,style:{minWidth:"100%",display:"table"},children:l})})]})});x.displayName=w;var k="ScrollAreaScrollbar",_=n.forwardRef((e,r)=>{let{forceMount:t,...a}=e,l=g(k,e.__scopeScrollArea),{onScrollbarXEnabledChange:o,onScrollbarYEnabledChange:i}=l,s="horizontal"===e.orientation;return n.useEffect(()=>(s?o(!0):i(!0),()=>{s?o(!1):i(!1)}),[s,o,i]),"hover"===l.type?(0,p.jsx)(A,{...a,ref:r,forceMount:t}):"scroll"===l.type?(0,p.jsx)(S,{...a,ref:r,forceMount:t}):"auto"===l.type?(0,p.jsx)(C,{...a,ref:r,forceMount:t}):"always"===l.type?(0,p.jsx)(j,{...a,ref:r}):null});_.displayName=k;var A=n.forwardRef((e,r)=>{let{forceMount:t,...a}=e,o=g(k,e.__scopeScrollArea),[i,s]=n.useState(!1);return n.useEffect(()=>{let e=o.scrollArea,r=0;if(e){let t=()=>{window.clearTimeout(r),s(!0)},n=()=>{r=window.setTimeout(()=>s(!1),o.scrollHideDelay)};return e.addEventListener("pointerenter",t),e.addEventListener("pointerleave",n),()=>{window.clearTimeout(r),e.removeEventListener("pointerenter",t),e.removeEventListener("pointerleave",n)}}},[o.scrollArea,o.scrollHideDelay]),(0,p.jsx)(l.C,{present:t||i,children:(0,p.jsx)(C,{"data-state":i?"visible":"hidden",...a,ref:r})})}),S=n.forwardRef((e,r)=>{var t,a;let{forceMount:o,...i}=e,s=g(k,e.__scopeScrollArea),u="horizontal"===e.orientation,d=q(()=>h("SCROLL_END"),100),[c,h]=(t="hidden",a={hidden:{SCROLL:"scrolling"},scrolling:{SCROLL_END:"idle",POINTER_ENTER:"interacting"},interacting:{SCROLL:"interacting",POINTER_LEAVE:"idle"},idle:{HIDE:"hidden",SCROLL:"scrolling",POINTER_ENTER:"interacting"}},n.useReducer((e,r)=>{let t=a[e][r];return null!=t?t:e},t));return n.useEffect(()=>{if("idle"===c){let e=window.setTimeout(()=>h("HIDE"),s.scrollHideDelay);return()=>window.clearTimeout(e)}},[c,s.scrollHideDelay,h]),n.useEffect(()=>{let e=s.viewport,r=u?"scrollLeft":"scrollTop";if(e){let t=e[r],n=()=>{let n=e[r];t!==n&&(h("SCROLL"),d()),t=n};return e.addEventListener("scroll",n),()=>e.removeEventListener("scroll",n)}},[s.viewport,u,h,d]),(0,p.jsx)(l.C,{present:o||"hidden"!==c,children:(0,p.jsx)(j,{"data-state":"hidden"===c?"hidden":"visible",...i,ref:r,onPointerEnter:(0,f.mK)(e.onPointerEnter,()=>h("POINTER_ENTER")),onPointerLeave:(0,f.mK)(e.onPointerLeave,()=>h("POINTER_LEAVE"))})})}),C=n.forwardRef((e,r)=>{let t=g(k,e.__scopeScrollArea),{forceMount:a,...o}=e,[i,s]=n.useState(!1),u="horizontal"===e.orientation,d=q(()=>{if(t.viewport){let e=t.viewport.offsetWidth{let{orientation:t="vertical",...a}=e,l=g(k,e.__scopeScrollArea),o=n.useRef(null),i=n.useRef(0),[s,u]=n.useState({content:0,viewport:0,scrollbar:{size:0,paddingStart:0,paddingEnd:0}}),d=z(s.viewport,s.content),c={...a,sizes:s,onSizesChange:u,hasThumb:!!(d>0&&d<1),onThumbChange:e=>o.current=e,onThumbPointerUp:()=>i.current=0,onThumbPointerDown:e=>i.current=e};function f(e,r){return function(e,r,t){let n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"ltr",a=K(t),l=r||a/2,o=t.scrollbar.paddingStart+l,i=t.scrollbar.size-t.scrollbar.paddingEnd-(a-l),s=t.content-t.viewport;return B([o,i],"ltr"===n?[0,s]:[-1*s,0])(e)}(e,i.current,s,r)}return"horizontal"===t?(0,p.jsx)(E,{...c,ref:r,onThumbPositionChange:()=>{if(l.viewport&&o.current){let e=U(l.viewport.scrollLeft,s,l.dir);o.current.style.transform="translate3d(".concat(e,"px, 0, 0)")}},onWheelScroll:e=>{l.viewport&&(l.viewport.scrollLeft=e)},onDragScroll:e=>{l.viewport&&(l.viewport.scrollLeft=f(e,l.dir))}}):"vertical"===t?(0,p.jsx)(D,{...c,ref:r,onThumbPositionChange:()=>{if(l.viewport&&o.current){let e=U(l.viewport.scrollTop,s);o.current.style.transform="translate3d(0, ".concat(e,"px, 0)")}},onWheelScroll:e=>{l.viewport&&(l.viewport.scrollTop=e)},onDragScroll:e=>{l.viewport&&(l.viewport.scrollTop=f(e))}}):null}),E=n.forwardRef((e,r)=>{let{sizes:t,onSizesChange:a,...l}=e,o=g(k,e.__scopeScrollArea),[s,u]=n.useState(),d=n.useRef(null),c=(0,i.s)(r,d,o.onScrollbarXChange);return n.useEffect(()=>{d.current&&u(getComputedStyle(d.current))},[d]),(0,p.jsx)(V,{"data-orientation":"horizontal",...l,ref:c,sizes:t,style:{bottom:0,left:"rtl"===o.dir?"var(--radix-scroll-area-corner-width)":0,right:"ltr"===o.dir?"var(--radix-scroll-area-corner-width)":0,"--radix-scroll-area-thumb-width":K(t)+"px",...e.style},onThumbPointerDown:r=>e.onThumbPointerDown(r.x),onDragScroll:r=>e.onDragScroll(r.x),onWheelScroll:(r,t)=>{if(o.viewport){let n=o.viewport.scrollLeft+r.deltaX;e.onWheelScroll(n),function(e,r){return e>0&&e{d.current&&o.viewport&&s&&a({content:o.viewport.scrollWidth,viewport:o.viewport.offsetWidth,scrollbar:{size:d.current.clientWidth,paddingStart:I(s.paddingLeft),paddingEnd:I(s.paddingRight)}})}})}),D=n.forwardRef((e,r)=>{let{sizes:t,onSizesChange:a,...l}=e,o=g(k,e.__scopeScrollArea),[s,u]=n.useState(),d=n.useRef(null),c=(0,i.s)(r,d,o.onScrollbarYChange);return n.useEffect(()=>{d.current&&u(getComputedStyle(d.current))},[d]),(0,p.jsx)(V,{"data-orientation":"vertical",...l,ref:c,sizes:t,style:{top:0,right:"ltr"===o.dir?0:void 0,left:"rtl"===o.dir?0:void 0,bottom:"var(--radix-scroll-area-corner-height)","--radix-scroll-area-thumb-height":K(t)+"px",...e.style},onThumbPointerDown:r=>e.onThumbPointerDown(r.y),onDragScroll:r=>e.onDragScroll(r.y),onWheelScroll:(r,t)=>{if(o.viewport){let n=o.viewport.scrollTop+r.deltaY;e.onWheelScroll(n),function(e,r){return e>0&&e{d.current&&o.viewport&&s&&a({content:o.viewport.scrollHeight,viewport:o.viewport.offsetHeight,scrollbar:{size:d.current.clientHeight,paddingStart:I(s.paddingTop),paddingEnd:I(s.paddingBottom)}})}})}),[M,R]=y(k),V=n.forwardRef((e,r)=>{let{__scopeScrollArea:t,sizes:l,hasThumb:o,onThumbChange:u,onThumbPointerUp:d,onThumbPointerDown:c,onThumbPositionChange:h,onDragScroll:y,onWheelScroll:m,onResize:v,...b}=e,w=g(k,t),[x,_]=n.useState(null),A=(0,i.s)(r,e=>_(e)),S=n.useRef(null),C=n.useRef(""),j=w.viewport,E=l.content-l.viewport,D=(0,s.c)(m),R=(0,s.c)(h),V=q(v,10);function F(e){S.current&&y({x:e.clientX-S.current.left,y:e.clientY-S.current.top})}return n.useEffect(()=>{let e=e=>{let r=e.target;(null==x?void 0:x.contains(r))&&D(e,E)};return document.addEventListener("wheel",e,{passive:!1}),()=>document.removeEventListener("wheel",e,{passive:!1})},[j,x,E,D]),n.useEffect(R,[l,R]),G(x,V),G(w.content,V),(0,p.jsx)(M,{scope:t,scrollbar:x,hasThumb:o,onThumbChange:(0,s.c)(u),onThumbPointerUp:(0,s.c)(d),onThumbPositionChange:R,onThumbPointerDown:(0,s.c)(c),children:(0,p.jsx)(a.sG.div,{...b,ref:A,style:{position:"absolute",...b.style},onPointerDown:(0,f.mK)(e.onPointerDown,e=>{0===e.button&&(e.target.setPointerCapture(e.pointerId),S.current=x.getBoundingClientRect(),C.current=document.body.style.webkitUserSelect,document.body.style.webkitUserSelect="none",w.viewport&&(w.viewport.style.scrollBehavior="auto"),F(e))}),onPointerMove:(0,f.mK)(e.onPointerMove,F),onPointerUp:(0,f.mK)(e.onPointerUp,e=>{let r=e.target;r.hasPointerCapture(e.pointerId)&&r.releasePointerCapture(e.pointerId),document.body.style.webkitUserSelect=C.current,w.viewport&&(w.viewport.style.scrollBehavior=""),S.current=null})})})}),F="ScrollAreaThumb",P=n.forwardRef((e,r)=>{let{forceMount:t,...n}=e,a=R(F,e.__scopeScrollArea);return(0,p.jsx)(l.C,{present:t||a.hasThumb,children:(0,p.jsx)(O,{ref:r,...n})})}),O=n.forwardRef((e,r)=>{let{__scopeScrollArea:t,style:l,...o}=e,s=g(F,t),u=R(F,t),{onThumbPositionChange:d}=u,c=(0,i.s)(r,e=>u.onThumbChange(e)),h=n.useRef(void 0),y=q(()=>{h.current&&(h.current(),h.current=void 0)},100);return n.useEffect(()=>{let e=s.viewport;if(e){let r=()=>{y(),h.current||(h.current=H(e,d),d())};return d(),e.addEventListener("scroll",r),()=>e.removeEventListener("scroll",r)}},[s.viewport,y,d]),(0,p.jsx)(a.sG.div,{"data-state":u.hasThumb?"visible":"hidden",...o,ref:c,style:{width:"var(--radix-scroll-area-thumb-width)",height:"var(--radix-scroll-area-thumb-height)",...l},onPointerDownCapture:(0,f.mK)(e.onPointerDownCapture,e=>{let r=e.target.getBoundingClientRect(),t=e.clientX-r.left,n=e.clientY-r.top;u.onThumbPointerDown({x:t,y:n})}),onPointerUp:(0,f.mK)(e.onPointerUp,u.onThumbPointerUp)})});P.displayName=F;var T="ScrollAreaCorner",L=n.forwardRef((e,r)=>{let t=g(T,e.__scopeScrollArea),n=!!(t.scrollbarX&&t.scrollbarY);return"scroll"!==t.type&&n?(0,p.jsx)(N,{...e,ref:r}):null});L.displayName=T;var N=n.forwardRef((e,r)=>{let{__scopeScrollArea:t,...l}=e,o=g(T,t),[i,s]=n.useState(0),[u,d]=n.useState(0),c=!!(i&&u);return G(o.scrollbarX,()=>{var e;let r=(null==(e=o.scrollbarX)?void 0:e.offsetHeight)||0;o.onCornerHeightChange(r),d(r)}),G(o.scrollbarY,()=>{var e;let r=(null==(e=o.scrollbarY)?void 0:e.offsetWidth)||0;o.onCornerWidthChange(r),s(r)}),c?(0,p.jsx)(a.sG.div,{...l,ref:r,style:{width:i,height:u,position:"absolute",right:"ltr"===o.dir?0:void 0,left:"rtl"===o.dir?0:void 0,bottom:0,...e.style}}):null});function I(e){return e?parseInt(e,10):0}function z(e,r){let t=e/r;return isNaN(t)?0:t}function K(e){let r=z(e.viewport,e.content),t=e.scrollbar.paddingStart+e.scrollbar.paddingEnd;return Math.max((e.scrollbar.size-t)*r,18)}function U(e,r){let t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"ltr",n=K(r),a=r.scrollbar.paddingStart+r.scrollbar.paddingEnd,l=r.scrollbar.size-a,o=r.content-r.viewport,i=(0,c.q)(e,"ltr"===t?[0,o]:[-1*o,0]);return B([0,o],[0,l-n])(i)}function B(e,r){return t=>{if(e[0]===e[1]||r[0]===r[1])return r[0];let n=(r[1]-r[0])/(e[1]-e[0]);return r[0]+n*(t-e[0])}}var H=function(e){let r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:()=>{},t={left:e.scrollLeft,top:e.scrollTop},n=0;return!function a(){let l={left:e.scrollLeft,top:e.scrollTop},o=t.left!==l.left,i=t.top!==l.top;(o||i)&&r(),t=l,n=window.requestAnimationFrame(a)}(),()=>window.cancelAnimationFrame(n)};function q(e,r){let t=(0,s.c)(e),a=n.useRef(0);return n.useEffect(()=>()=>window.clearTimeout(a.current),[]),n.useCallback(()=>{window.clearTimeout(a.current),a.current=window.setTimeout(t,r)},[t,r])}function G(e,r){let t=(0,s.c)(r);(0,d.N)(()=>{let r=0;if(e){let n=new ResizeObserver(()=>{cancelAnimationFrame(r),r=window.requestAnimationFrame(t)});return n.observe(e),()=>{window.cancelAnimationFrame(r),n.unobserve(e)}}},[e,t])}var W=b,X=x,Z=L},9906:(e,r,t)=>{t.d(r,{A:()=>n});let n=(0,t(3929).A)("globe",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20",key:"13o1zl"}],["path",{d:"M2 12h20",key:"9i4pu4"}]])},9911:(e,r,t)=>{t.d(r,{A:()=>n});let n=(0,t(3929).A)("mic",[["path",{d:"M12 2a3 3 0 0 0-3 3v7a3 3 0 0 0 6 0V5a3 3 0 0 0-3-3Z",key:"131961"}],["path",{d:"M19 10v2a7 7 0 0 1-14 0v-2",key:"1vc78b"}],["line",{x1:"12",x2:"12",y1:"19",y2:"22",key:"x3vr5v"}]])},9935:(e,r,t)=>{t.d(r,{A:()=>n});let n=(0,t(3929).A)("mic-off",[["line",{x1:"2",x2:"22",y1:"2",y2:"22",key:"a6p6uj"}],["path",{d:"M18.89 13.23A7.12 7.12 0 0 0 19 12v-2",key:"80xlxr"}],["path",{d:"M5 10v2a7 7 0 0 0 12 5",key:"p2k8kg"}],["path",{d:"M15 9.34V5a3 3 0 0 0-5.68-1.33",key:"1gzdoj"}],["path",{d:"M9 9v3a3 3 0 0 0 5.12 2.12",key:"r2i35w"}],["line",{x1:"12",x2:"12",y1:"19",y2:"22",key:"x3vr5v"}]])},9987:(e,r,t)=>{t.d(r,{A:()=>n});let n=(0,t(3929).A)("zap",[["path",{d:"M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z",key:"1xq2db"}]])}}]);
\ No newline at end of file
diff --git a/ui_out/_next/static/chunks/app/model/page-54703515a5590901.js b/ui_out/_next/static/chunks/app/model/page-54703515a5590901.js
deleted file mode 100644
index 509e664f..00000000
--- a/ui_out/_next/static/chunks/app/model/page-54703515a5590901.js
+++ /dev/null
@@ -1 +0,0 @@
-(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[552],{834:(e,s,t)=>{"use strict";t.d(s,{T:()=>l});var a=t(3422);t(4398);var r=t(9183);function l(e){let{className:s,...t}=e;return(0,a.jsx)("textarea",{"data-slot":"textarea",className:(0,r.cn)("border-input placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 flex field-sizing-content min-h-16 w-full rounded-md border bg-transparent px-3 py-2 text-base shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 md:text-sm",s),...t})}},2264:(e,s,t)=>{"use strict";t.d(s,{bq:()=>u,eb:()=>p,gC:()=>m,l6:()=>d,yv:()=>c});var a=t(3422);t(4398);var r=t(3439),l=t(9994),i=t(8940),n=t(4967),o=t(9183);function d(e){let{...s}=e;return(0,a.jsx)(r.bL,{"data-slot":"select",...s})}function c(e){let{...s}=e;return(0,a.jsx)(r.WT,{"data-slot":"select-value",...s})}function u(e){let{className:s,size:t="default",children:i,...n}=e;return(0,a.jsxs)(r.l9,{"data-slot":"select-trigger","data-size":t,className:(0,o.cn)("border-input data-[placeholder]:text-muted-foreground [&_svg:not([class*='text-'])]:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 dark:hover:bg-input/50 flex w-fit items-center justify-between gap-2 rounded-md border bg-transparent px-3 py-2 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",s),...n,children:[i,(0,a.jsx)(r.In,{asChild:!0,children:(0,a.jsx)(l.A,{className:"size-4 opacity-50"})})]})}function m(e){let{className:s,children:t,position:l="popper",...i}=e;return(0,a.jsx)(r.ZL,{children:(0,a.jsxs)(r.UC,{"data-slot":"select-content",className:(0,o.cn)("bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 relative z-50 max-h-(--radix-select-content-available-height) min-w-[8rem] origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border shadow-md","popper"===l&&"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",s),position:l,...i,children:[(0,a.jsx)(h,{}),(0,a.jsx)(r.LM,{className:(0,o.cn)("p-1","popper"===l&&"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1"),children:t}),(0,a.jsx)(x,{})]})})}function p(e){let{className:s,children:t,...l}=e;return(0,a.jsxs)(r.q7,{"data-slot":"select-item",className:(0,o.cn)("focus:bg-accent focus:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2",s),...l,children:[(0,a.jsx)("span",{className:"absolute right-2 flex size-3.5 items-center justify-center",children:(0,a.jsx)(r.VF,{children:(0,a.jsx)(i.A,{className:"size-4"})})}),(0,a.jsx)(r.p4,{children:t})]})}function h(e){let{className:s,...t}=e;return(0,a.jsx)(r.PP,{"data-slot":"select-scroll-up-button",className:(0,o.cn)("flex cursor-default items-center justify-center py-1",s),...t,children:(0,a.jsx)(n.A,{className:"size-4"})})}function x(e){let{className:s,...t}=e;return(0,a.jsx)(r.wn,{"data-slot":"select-scroll-down-button",className:(0,o.cn)("flex cursor-default items-center justify-center py-1",s),...t,children:(0,a.jsx)(l.A,{className:"size-4"})})}},6320:(e,s,t)=>{"use strict";t.d(s,{Cf:()=>u,Es:()=>p,L3:()=>h,c7:()=>m,lG:()=>n,rr:()=>x,zM:()=>o});var a=t(3422);t(4398);var r=t(4316),l=t(9680),i=t(9183);function n(e){let{...s}=e;return(0,a.jsx)(r.bL,{"data-slot":"dialog",...s})}function o(e){let{...s}=e;return(0,a.jsx)(r.l9,{"data-slot":"dialog-trigger",...s})}function d(e){let{...s}=e;return(0,a.jsx)(r.ZL,{"data-slot":"dialog-portal",...s})}function c(e){let{className:s,...t}=e;return(0,a.jsx)(r.hJ,{"data-slot":"dialog-overlay",className:(0,i.cn)("data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50",s),...t})}function u(e){let{className:s,children:t,...n}=e;return(0,a.jsxs)(d,{"data-slot":"dialog-portal",children:[(0,a.jsx)(c,{}),(0,a.jsxs)(r.UC,{"data-slot":"dialog-content",className:(0,i.cn)("bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-lg",s),...n,children:[t,(0,a.jsxs)(r.bm,{className:"ring-offset-background focus:ring-ring data-[state=open]:bg-accent data-[state=open]:text-muted-foreground absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",children:[(0,a.jsx)(l.A,{}),(0,a.jsx)("span",{className:"sr-only",children:"Close"})]})]})]})}function m(e){let{className:s,...t}=e;return(0,a.jsx)("div",{"data-slot":"dialog-header",className:(0,i.cn)("flex flex-col gap-2 text-center sm:text-left",s),...t})}function p(e){let{className:s,...t}=e;return(0,a.jsx)("div",{"data-slot":"dialog-footer",className:(0,i.cn)("flex flex-col-reverse gap-2 sm:flex-row sm:justify-end",s),...t})}function h(e){let{className:s,...t}=e;return(0,a.jsx)(r.hE,{"data-slot":"dialog-title",className:(0,i.cn)("text-lg leading-none font-semibold",s),...t})}function x(e){let{className:s,...t}=e;return(0,a.jsx)(r.VY,{"data-slot":"dialog-description",className:(0,i.cn)("text-muted-foreground text-sm",s),...t})}},6568:(e,s,t)=>{"use strict";t.d(s,{d:()=>i});var a=t(3422);t(4398);var r=t(2495),l=t(9183);function i(e){let{className:s,...t}=e;return(0,a.jsx)(r.bL,{"data-slot":"switch",className:(0,l.cn)("peer data-[state=checked]:bg-primary data-[state=unchecked]:bg-input focus-visible:border-ring focus-visible:ring-ring/50 dark:data-[state=unchecked]:bg-input/80 inline-flex h-[1.15rem] w-8 shrink-0 items-center rounded-full border border-transparent shadow-xs transition-all outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50",s),...t,children:(0,a.jsx)(r.zi,{"data-slot":"switch-thumb",className:(0,l.cn)("bg-background dark:data-[state=unchecked]:bg-foreground dark:data-[state=checked]:bg-primary-foreground pointer-events-none block size-4 rounded-full ring-0 transition-transform data-[state=checked]:translate-x-[calc(100%-2px)] data-[state=unchecked]:translate-x-0")})})}},6715:(e,s,t)=>{Promise.resolve().then(t.bind(t,7557))},7557:(e,s,t)=>{"use strict";t.r(s),t.d(s,{default:()=>e1});var a=t(3422),r=t(4398),l=t(100),i=t(2349),n=t(6013),o=t(9119),d=t(1407),c=t(552),u=t(9945);let m=u.Ik({id:u.Yj(),name:u.Yj(),full_name:u.Yj(),description:u.Yj().optional(),modelType:u.Yj(),isEnabled:u.zM(),createdAt:u.Yj().datetime(),updatedAt:u.Yj().datetime(),provider:u.Yj(),url:u.Yj().url(),api_key:u.Yj().optional(),input_cost:u.ai().min(0),output_cost:u.ai().min(0),min_cost_per_request:u.ai().min(0,"Minimum cost per request must be non-negative").default(0),min_cash_per_request:u.ai().min(0,"Minimum cash per request must be non-negative").default(0),contextLength:u.ai().int().optional(),apiKeyRequired:u.zM().default(!0),provider_id:u.Yj().optional(),is_free:u.zM().default(!1),soft_deleted:u.zM().optional(),has_own_api_key:u.zM(),api_key_type:u.Yj()});m.extend({settings:u.g1(u.L5()).optional(),pricing:u.Ik({inputCostPer1kTokens:u.ai().optional(),outputCostPer1kTokens:u.ai().optional(),unitCost:u.ai().optional()}).optional()}),m.omit({id:!0,createdAt:!0,updatedAt:!0,has_own_api_key:!0,api_key_type:!0}).extend({settings:u.g1(u.L5()).optional()}),m.partial().omit({id:!0,createdAt:!0,updatedAt:!0,has_own_api_key:!0,api_key_type:!0});let p=u.Ik({name:u.Yj().min(1,"Name is required"),full_name:u.Yj().optional(),input_cost:u.ai().min(0,"Input cost must be non-negative"),output_cost:u.ai().min(0,"Output cost must be non-negative"),provider:u.Yj().min(1,"Provider is required"),modelType:u.k5(["text","embedding","image","audio","multimodal"]),description:u.Yj().optional().transform(e=>""===e?void 0:e),contextLength:u.ai().int().min(0).optional().transform(e=>0===e?void 0:e)}).transform(e=>({...e})),h=u.Ik({provider:u.Yj().min(1,"Provider is required"),group_api_key:u.Yj().transform(e=>""===e?void 0:e).optional(),group_url:u.Yj().transform(e=>""===e?void 0:e).pipe(u.Yj().url("Please enter a valid URL").optional()).optional()});u.Ik({data:u.YO(m),pagination:u.Ik({total:u.ai(),page:u.ai(),pageSize:u.ai(),totalPages:u.ai()})}),u.Ik({modelId:u.Yj(),input:u.Yj(),parameters:u.g1(u.L5()).optional()}),u.Ik({output:u.Yj(),usage:u.Ik({promptTokens:u.ai().optional(),completionTokens:u.ai().optional(),totalTokens:u.ai().optional()}).optional(),timings:u.Ik({totalMs:u.ai()}).optional()});var x=t(3648),g=t(268),j=t(834),v=t(6320),f=t(2264),y=t(6950),b=t(9183),N=t(3130);let w=d.Op,_=r.createContext({}),k=e=>{let{...s}=e;return(0,a.jsx)(_.Provider,{value:{name:s.name},children:(0,a.jsx)(d.xI,{...s})})},C=()=>{let e=r.useContext(_),s=r.useContext(M),{getFieldState:t}=(0,d.xW)(),a=(0,d.lN)({name:e.name}),l=t(e.name,a);if(!e)throw Error("useFormField should be used within ");let{id:i}=s;return{id:i,name:e.name,formItemId:"".concat(i,"-form-item"),formDescriptionId:"".concat(i,"-form-item-description"),formMessageId:"".concat(i,"-form-item-message"),...l}},M=r.createContext({});function A(e){let{className:s,...t}=e,l=r.useId();return(0,a.jsx)(M.Provider,{value:{id:l},children:(0,a.jsx)("div",{"data-slot":"form-item",className:(0,b.cn)("grid gap-2",s),...t})})}function S(e){let{className:s,...t}=e,{error:r,formItemId:l}=C();return(0,a.jsx)(N.J,{"data-slot":"form-label","data-error":!!r,className:(0,b.cn)("data-[error=true]:text-destructive",s),htmlFor:l,...t})}function F(e){let{...s}=e,{error:t,formItemId:r,formDescriptionId:l,formMessageId:i}=C();return(0,a.jsx)(y.DX,{"data-slot":"form-control",id:r,"aria-describedby":t?"".concat(l," ").concat(i):"".concat(l),"aria-invalid":!!t,...s})}function P(e){let{className:s,...t}=e,{formDescriptionId:r}=C();return(0,a.jsx)("p",{"data-slot":"form-description",id:r,className:(0,b.cn)("text-muted-foreground text-sm",s),...t})}function R(e){var s;let{className:t,...r}=e,{error:l,formMessageId:i}=C(),n=l?String(null!=(s=null==l?void 0:l.message)?s:""):r.children;return n?(0,a.jsx)("p",{"data-slot":"form-message",id:i,className:(0,b.cn)("text-destructive text-sm",t),...r,children:n}):null}var T=t(856),z=t(2434),E=t(3831);function I(e){let{onModelAdd:s,onCancel:t,isOpen:l}=e,[i,n]=(0,r.useState)(!1),o=(0,d.mN)({resolver:(0,c.u)(p),defaultValues:{name:"",full_name:"",input_cost:0,output_cost:0,provider:"",modelType:"text",description:"",contextLength:void 0}}),u=async e=>{n(!0);try{await s(e),E.oR.success("Model added successfully!"),o.reset(),null==t||t()}catch(e){E.oR.error("Failed to add model. Please try again."),console.error("Error adding model:",e)}finally{n(!1)}},m=()=>{i||(o.reset(),null==t||t())};return(0,a.jsx)(v.lG,{open:l,onOpenChange:m,children:(0,a.jsxs)(v.Cf,{className:"max-h-[90vh] overflow-y-auto sm:max-w-[600px]",children:[(0,a.jsxs)(v.c7,{children:[(0,a.jsxs)(v.L3,{className:"flex items-center gap-2",children:[(0,a.jsx)(T.A,{className:"h-5 w-5"}),"Add New Model"]}),(0,a.jsx)(v.rr,{children:"Manually add a new AI model to your collection"})]}),(0,a.jsx)(w,{...o,children:(0,a.jsxs)("form",{onSubmit:o.handleSubmit(u),className:"space-y-4",children:[(0,a.jsxs)("div",{className:"grid grid-cols-1 gap-4 sm:grid-cols-2",children:[(0,a.jsx)(k,{control:o.control,name:"name",render:e=>{let{field:s}=e;return(0,a.jsxs)(A,{children:[(0,a.jsx)(S,{children:"Model Name *"}),(0,a.jsx)(F,{children:(0,a.jsx)(g.p,{placeholder:"e.g., GPT-4o",...s,className:"w-full"})}),(0,a.jsx)(P,{children:"Display name for the model"}),(0,a.jsx)(R,{})]})}}),(0,a.jsx)(k,{control:o.control,name:"provider",render:e=>{let{field:s}=e;return(0,a.jsxs)(A,{children:[(0,a.jsx)(S,{children:"Provider *"}),(0,a.jsx)(F,{children:(0,a.jsx)(g.p,{placeholder:"e.g., OpenAI, Anthropic",...s,className:"w-full"})}),(0,a.jsx)(P,{children:"AI model provider or company"}),(0,a.jsx)(R,{})]})}})]}),(0,a.jsxs)("div",{className:"grid grid-cols-1 gap-4 sm:grid-cols-2",children:[(0,a.jsx)(k,{control:o.control,name:"input_cost",render:e=>{let{field:s}=e;return(0,a.jsxs)(A,{children:[(0,a.jsx)(S,{children:"Input Cost (per 1M tokens) *"}),(0,a.jsx)(F,{children:(0,a.jsx)(g.p,{type:"number",step:"0.001",min:"0",placeholder:"5.00",...s,value:s.value?parseFloat(s.value.toFixed(3)):"",onChange:e=>{let t=Math.round(1e3*(parseFloat(e.target.value)||0))/1e3;s.onChange(t)},className:"w-full"})}),(0,a.jsx)(P,{children:"Cost in USD per 1,000,000 input tokens (max 3 decimals)"}),(0,a.jsx)(R,{})]})}}),(0,a.jsx)(k,{control:o.control,name:"output_cost",render:e=>{let{field:s}=e;return(0,a.jsxs)(A,{children:[(0,a.jsx)(S,{children:"Output Cost (per 1M tokens) *"}),(0,a.jsx)(F,{children:(0,a.jsx)(g.p,{type:"number",step:"0.001",min:"0",placeholder:"15.00",...s,value:s.value?parseFloat(s.value.toFixed(3)):"",onChange:e=>{let t=Math.round(1e3*(parseFloat(e.target.value)||0))/1e3;s.onChange(t)},className:"w-full"})}),(0,a.jsx)(P,{children:"Cost in USD per 1,000,000 output tokens (max 3 decimals)"}),(0,a.jsx)(R,{})]})}})]}),(0,a.jsxs)("div",{className:"grid grid-cols-1 gap-4 sm:grid-cols-2",children:[(0,a.jsx)(k,{control:o.control,name:"modelType",render:e=>{let{field:s}=e;return(0,a.jsxs)(A,{children:[(0,a.jsx)(S,{children:"Model Type"}),(0,a.jsxs)(f.l6,{onValueChange:s.onChange,defaultValue:s.value,children:[(0,a.jsx)(F,{children:(0,a.jsx)(f.bq,{children:(0,a.jsx)(f.yv,{placeholder:"Select model type"})})}),(0,a.jsxs)(f.gC,{children:[(0,a.jsx)(f.eb,{value:"text",children:"Text/Chat"}),(0,a.jsx)(f.eb,{value:"embedding",children:"Embedding"}),(0,a.jsx)(f.eb,{value:"image",children:"Image Generation"}),(0,a.jsx)(f.eb,{value:"audio",children:"Audio"}),(0,a.jsx)(f.eb,{value:"multimodal",children:"Multimodal"})]})]}),(0,a.jsx)(P,{children:"Type of AI model functionality"}),(0,a.jsx)(R,{})]})}}),(0,a.jsx)(k,{control:o.control,name:"contextLength",render:e=>{let{field:s}=e;return(0,a.jsxs)(A,{children:[(0,a.jsx)(S,{children:"Context Length"}),(0,a.jsx)(F,{children:(0,a.jsx)(g.p,{type:"number",min:"0",placeholder:"8192",value:s.value||"",onChange:e=>{let t=parseInt(e.target.value);s.onChange(isNaN(t)||0===t?void 0:t)},className:"w-full"})}),(0,a.jsx)(P,{children:"Maximum context length in tokens (optional, leave empty for default)"}),(0,a.jsx)(R,{})]})}})]}),(0,a.jsx)(k,{control:o.control,name:"description",render:e=>{let{field:s}=e;return(0,a.jsxs)(A,{children:[(0,a.jsx)(S,{children:"Description"}),(0,a.jsx)(F,{children:(0,a.jsx)(j.T,{placeholder:"Brief description of the model...",...s,rows:3,className:"w-full"})}),(0,a.jsx)(P,{children:"Optional description or notes about the model"}),(0,a.jsx)(R,{})]})}}),(0,a.jsxs)("div",{className:"flex justify-end gap-2 pt-4",children:[(0,a.jsx)(x.$,{type:"button",variant:"outline",onClick:m,disabled:i,children:"Cancel"}),(0,a.jsx)(x.$,{type:"submit",disabled:i,children:i?(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(z.A,{className:"mr-2 h-4 w-4 animate-spin"}),"Adding..."]}):"Add Model"})]})]})})]})})}var q=t(7996),L=t(6568);let Y=u.Ik({name:u.Yj().min(1,"Name is required"),description:u.Yj().optional(),context_length:u.au.number().min(0),prompt:u.au.number().min(0),completion:u.au.number().min(0),enabled:u.zM()}),O=e=>null==e||isNaN(e)?0:Math.round(1e5*e)/1e5;function U(e){let{model:s,providerId:t,onModelUpdate:l,onCancel:i,isOpen:n}=e,[u,m]=(0,r.useState)(!1),[p,h]=(0,r.useState)(null),[f,y]=(0,r.useState)(!1),b=(0,d.mN)({resolver:(0,c.u)(Y),defaultValues:{name:s.name,description:s.description||"",context_length:s.contextLength||4096,prompt:O(s.input_cost),completion:O(s.output_cost),enabled:!1!==s.isEnabled}}),N=(0,r.useCallback)(async()=>{if(!t)return void console.error("loadAdminModel called without providerId");try{console.log("Loading admin model:",{providerId:t,modelId:s.full_name});let e=await o.zQ.getProviderModel(t,s.full_name);h(e),y(!1),b.reset({name:e.name,description:e.description||"",context_length:e.context_length,prompt:O(e.pricing.prompt),completion:O(e.pricing.completion),enabled:!1!==e.enabled})}catch(e){console.log("Model not in database, will create new override:",e),y(!0),h({id:s.full_name,name:s.name,description:s.description||"",created:Math.floor(Date.now()/1e3),context_length:s.contextLength||4096,architecture:{modality:s.modelType||"text",input_modalities:[s.modelType||"text"],output_modalities:[s.modelType||"text"],tokenizer:"",instruct_type:null},pricing:{prompt:O(s.input_cost),completion:O(s.output_cost),request:0,image:0,web_search:0,internal_reasoning:0},per_request_limits:null,top_provider:null,upstream_provider_id:t,enabled:!1!==s.isEnabled}),b.reset({name:s.name,description:s.description||"",context_length:s.contextLength||4096,prompt:O(s.input_cost),completion:O(s.output_cost),enabled:!1!==s.isEnabled})}},[t,s,b]);(0,r.useEffect)(()=>{n&&t?N():n&&!t&&(console.error("EditModelForm opened without providerId",{model:s,providerId:t}),E.oR.error("Missing provider information for this model"))},[n,t,s,N]);let _=async e=>{if(!t){console.error("onSubmit called without providerId",{model:s,providerId:t}),E.oR.error("Missing provider ID - cannot update model");return}if(!p){console.error("onSubmit called without adminModelData",{model:s,providerId:t,adminModelData:p}),E.oR.error("Model data not loaded - please try reopening the form");return}m(!0);try{let s={id:p.id,name:e.name,description:e.description||"",created:p.created||Math.floor(Date.now()/1e3),context_length:e.context_length,architecture:p.architecture||{modality:"text",input_modalities:["text"],output_modalities:["text"],tokenizer:"",instruct_type:null},pricing:{prompt:O(e.prompt),completion:O(e.completion),request:0,image:0,web_search:0,internal_reasoning:0},per_request_limits:p.per_request_limits,top_provider:p.top_provider,upstream_provider_id:t,enabled:e.enabled};f?(console.log("Creating new model override"),await o.zQ.createProviderModel(t,s),E.oR.success("Model override created successfully!")):(console.log("Updating existing model override"),await o.zQ.updateProviderModel(t,p.id,s),E.oR.success("Model updated successfully!")),null==l||l(),null==i||i()}catch(s){let e=f?"create":"update";E.oR.error("Failed to ".concat(e," model. Please try again.")),console.error("Error ".concat(e,"ing model:"),s)}finally{m(!1)}},C=()=>{u||null==i||i()};return(0,a.jsx)(v.lG,{open:n,onOpenChange:C,children:(0,a.jsxs)(v.Cf,{className:"max-h-[90vh] overflow-y-auto sm:max-w-[600px]",children:[(0,a.jsxs)(v.c7,{children:[(0,a.jsxs)(v.L3,{className:"flex items-center gap-2",children:[(0,a.jsx)(q.A,{className:"h-5 w-5"}),f?"Create Model Override":"Edit Model Override"]}),(0,a.jsx)(v.rr,{children:f?"Create an override for "".concat(s.name,"""):"Update the model override for "".concat(s.name,""")})]}),(0,a.jsx)(w,{...b,children:(0,a.jsxs)("form",{onSubmit:b.handleSubmit(_),className:"space-y-4",children:[(0,a.jsxs)("div",{className:"grid grid-cols-1 gap-4 sm:grid-cols-2",children:[(0,a.jsx)(k,{control:b.control,name:"name",render:e=>{let{field:s}=e;return(0,a.jsxs)(A,{children:[(0,a.jsx)(S,{children:"Display Name *"}),(0,a.jsx)(F,{children:(0,a.jsx)(g.p,{placeholder:"e.g., GPT-4",...s,className:"w-full"})}),(0,a.jsx)(P,{children:"Custom display name for the model"}),(0,a.jsx)(R,{})]})}}),(0,a.jsx)(k,{control:b.control,name:"context_length",render:e=>{let{field:s}=e;return(0,a.jsxs)(A,{children:[(0,a.jsx)(S,{children:"Context Length *"}),(0,a.jsx)(F,{children:(0,a.jsx)(g.p,{type:"number",min:"0",placeholder:"4096",...s,className:"w-full"})}),(0,a.jsx)(P,{children:"Maximum context window size"}),(0,a.jsx)(R,{})]})}})]}),(0,a.jsx)(k,{control:b.control,name:"description",render:e=>{let{field:s}=e;return(0,a.jsxs)(A,{children:[(0,a.jsx)(S,{children:"Description"}),(0,a.jsx)(F,{children:(0,a.jsx)(j.T,{placeholder:"Brief description of the model...",...s,rows:3,className:"w-full"})}),(0,a.jsx)(P,{children:"Optional description or notes about the model"}),(0,a.jsx)(R,{})]})}}),(0,a.jsxs)("div",{className:"grid grid-cols-1 gap-4 sm:grid-cols-2",children:[(0,a.jsx)(k,{control:b.control,name:"prompt",render:e=>{var s;let{field:t}=e;return(0,a.jsxs)(A,{children:[(0,a.jsx)(S,{children:"Input Cost (per 1M tokens) *"}),(0,a.jsx)(F,{children:(0,a.jsx)(g.p,{type:"number",step:"0.00001",min:"0",placeholder:"5.00000",value:null!=(s=t.value)?s:"",onChange:e=>{let s=e.target.value;t.onChange(""===s?0:parseFloat(s))},onBlur:e=>{let s=parseFloat(e.target.value);t.onChange(O(s))},className:"w-full"})}),(0,a.jsx)(P,{children:"Cost in USD per 1,000,000 input tokens (max 5 decimals)"}),(0,a.jsx)(R,{})]})}}),(0,a.jsx)(k,{control:b.control,name:"completion",render:e=>{var s;let{field:t}=e;return(0,a.jsxs)(A,{children:[(0,a.jsx)(S,{children:"Output Cost (per 1M tokens) *"}),(0,a.jsx)(F,{children:(0,a.jsx)(g.p,{type:"number",step:"0.00001",min:"0",placeholder:"15.00000",value:null!=(s=t.value)?s:"",onChange:e=>{let s=e.target.value;t.onChange(""===s?0:parseFloat(s))},onBlur:e=>{let s=parseFloat(e.target.value);t.onChange(O(s))},className:"w-full"})}),(0,a.jsx)(P,{children:"Cost in USD per 1,000,000 output tokens (max 5 decimals)"}),(0,a.jsx)(R,{})]})}})]}),(0,a.jsx)(k,{control:b.control,name:"enabled",render:e=>{let{field:s}=e;return(0,a.jsxs)(A,{className:"flex flex-row items-center justify-between rounded-lg border p-4",children:[(0,a.jsxs)("div",{className:"space-y-0.5",children:[(0,a.jsx)(S,{className:"text-base",children:"Model Enabled"}),(0,a.jsx)(P,{children:"Enable or disable this model override"})]}),(0,a.jsx)(F,{children:(0,a.jsx)(L.d,{checked:s.value,onCheckedChange:s.onChange})})]})}}),(0,a.jsxs)("div",{className:"flex justify-end gap-2 pt-4",children:[(0,a.jsx)(x.$,{type:"button",variant:"outline",onClick:C,disabled:u,children:"Cancel"}),(0,a.jsx)(x.$,{type:"submit",disabled:u,children:u?(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(z.A,{className:"mr-2 h-4 w-4 animate-spin"}),f?"Creating...":"Updating..."]}):f?"Create Override":"Update Model"})]})]})})]})})}var J=t(1935),Q=t(5195),K=t(9906),D=t(2267),G=t(1220),$=t(9442);function V(e){let{provider:s,models:t,groupSettings:l,onGroupUpdate:i,onCancel:n,isOpen:o}=e,[u,m]=(0,r.useState)(!1),[p,j]=(0,r.useState)(!1),[f,y]=(0,r.useState)(!!(null==l?void 0:l.group_url)),b=(0,d.mN)({resolver:(0,c.u)(h),defaultValues:{provider:s,group_api_key:(null==l?void 0:l.group_api_key)||"",group_url:(null==l?void 0:l.group_url)||""}}),N=async e=>{m(!0);try{var t,a;let r={...e,group_api_key:(null==(t=e.group_api_key)?void 0:t.trim())||void 0,group_url:f&&(null==(a=e.group_url)?void 0:a.trim())||void 0};await i(s,r),E.oR.success('Group "'.concat(s,'" updated successfully!')),null==n||n()}catch(e){E.oR.error("Failed to update group. Please try again."),console.error("Error updating group:",e)}finally{m(!1)}},_=t.filter(e=>!e.api_key).length,C=t.filter(e=>!e.api_key&&(!e.url||e.url.startsWith("/"))).length,M=()=>{u||null==n||n()};return(0,a.jsx)(v.lG,{open:o,onOpenChange:M,children:(0,a.jsxs)(v.Cf,{className:"max-h-[90vh] overflow-y-auto sm:max-w-[700px]",children:[(0,a.jsxs)(v.c7,{children:[(0,a.jsxs)(v.L3,{className:"flex items-center gap-2",children:[(0,a.jsx)(J.A,{className:"h-5 w-5"}),"Edit Provider Group: ",s]}),(0,a.jsxs)(v.rr,{children:["Update settings for all ",t.length," models in this group. Group settings provide defaults for models without individual configurations."]})]}),(0,a.jsxs)("div",{className:"mb-6 space-y-4",children:[(0,a.jsxs)("div",{className:"rounded-md border p-4",children:[(0,a.jsxs)("h4",{className:"mb-2 flex items-center gap-2 text-sm font-medium",children:[(0,a.jsx)(Q.A,{className:"h-4 w-4"}),"API Key Configuration"]}),(0,a.jsx)("div",{className:"space-y-2 text-sm",children:(0,a.jsxs)("div",{className:"flex justify-between",children:[(0,a.jsx)("span",{children:"Models using group API key:"}),(0,a.jsx)("span",{className:"font-medium text-blue-600",children:_})]})})]}),(0,a.jsxs)("div",{className:"rounded-md border p-4",children:[(0,a.jsxs)("h4",{className:"mb-2 flex items-center gap-2 text-sm font-medium",children:[(0,a.jsx)(K.A,{className:"h-4 w-4"}),"URL Configuration"]}),(0,a.jsxs)("div",{className:"space-y-2 text-sm",children:[(0,a.jsxs)("div",{className:"flex justify-between",children:[(0,a.jsx)("span",{children:"Models using group URL:"}),(0,a.jsx)("span",{className:"font-medium text-blue-600",children:C})]}),(0,a.jsxs)("div",{className:"flex justify-between",children:[(0,a.jsx)("span",{children:"Models with individual URLs:"}),(0,a.jsx)("span",{className:"font-medium text-green-600",children:t.length-C})]}),(null==l?void 0:l.group_url)&&(0,a.jsxs)("div",{className:"mt-2 rounded bg-blue-50 p-2 text-xs",children:[(0,a.jsx)("span",{className:"font-medium",children:"Current group URL:"})," ",l.group_url]})]})]}),(0,a.jsxs)("div",{className:"rounded-md border p-4",children:[(0,a.jsx)("h4",{className:"mb-2 text-sm font-medium",children:"Models in this group:"}),(0,a.jsx)("div",{className:"max-h-32 overflow-y-auto",children:(0,a.jsx)("div",{className:"flex flex-wrap gap-2",children:t.map(e=>(0,a.jsxs)("span",{className:"inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium ".concat(e.api_key?"bg-green-100 text-green-800":"bg-blue-100 text-blue-800"),title:e.api_key?"Has individual API key and URL":"Uses group API key and URL",children:[e.name,e.api_key&&" \uD83D\uDD11",e.url&&!e.url.startsWith("/")&&e.api_key&&" \uD83C\uDF10"]},e.id))})})]})]}),(0,a.jsx)(w,{...b,children:(0,a.jsxs)("form",{onSubmit:b.handleSubmit(N),className:"space-y-6",children:[(0,a.jsx)(k,{control:b.control,name:"provider",render:e=>{let{field:s}=e;return(0,a.jsxs)(A,{children:[(0,a.jsx)(S,{children:"Provider Name *"}),(0,a.jsx)(F,{children:(0,a.jsx)(g.p,{placeholder:"e.g., OpenAI, Anthropic",...s,className:"w-full"})}),(0,a.jsx)(P,{children:"This will update the provider name for all models in this group"}),(0,a.jsx)(R,{})]})}}),(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsxs)("div",{className:"flex items-center justify-between",children:[(0,a.jsxs)("div",{className:"space-y-0.5",children:[(0,a.jsx)(S,{className:"text-base",children:"Group Base URL"}),(0,a.jsx)(P,{children:"Provide a custom base URL for this provider group"})]}),(0,a.jsx)(L.d,{checked:f,onCheckedChange:y})]}),f&&(0,a.jsx)(k,{control:b.control,name:"group_url",render:e=>{let{field:s}=e;return(0,a.jsxs)(A,{children:[(0,a.jsx)(S,{children:"Base URL"}),(0,a.jsx)(F,{children:(0,a.jsx)(g.p,{placeholder:"https://api.openai.com/v1 or https://your-proxy.com/v1",...s,className:"w-full"})}),(0,a.jsx)(P,{children:"This base URL will be used for models without individual URLs. Models will append their endpoint path (e.g., /chat/completions) to this base."}),(0,a.jsx)(R,{})]})}}),!f&&(null==l?void 0:l.group_url)&&(0,a.jsxs)($.Fc,{children:[(0,a.jsx)(D.A,{className:"h-4 w-4"}),(0,a.jsx)($.TN,{children:"Removing the group URL will make models in this group fall back to the default system endpoint. Models with individual URLs will be unaffected."})]}),f&&!(null==l?void 0:l.group_url)&&(0,a.jsxs)($.Fc,{children:[(0,a.jsx)(G.A,{className:"h-4 w-4"}),(0,a.jsx)($.TN,{children:"Adding a group URL will allow models in this group to use a custom endpoint instead of the default system endpoint."})]})]}),(0,a.jsx)(k,{control:b.control,name:"group_api_key",render:e=>{let{field:s}=e;return(0,a.jsxs)(A,{children:[(0,a.jsx)(S,{children:"Group API Key"}),(0,a.jsxs)("div",{className:"relative",children:[(0,a.jsx)(F,{children:(0,a.jsx)(g.p,{type:p?"text":"password",placeholder:"sk-... (leave empty to remove)",...s,className:"w-full pr-24"})}),(0,a.jsx)(x.$,{type:"button",variant:"ghost",size:"sm",className:"absolute top-0 right-0 h-full px-3 py-2 hover:bg-transparent",onClick:()=>j(!p),children:p?"Hide":"Show"})]}),(0,a.jsxs)(P,{children:["This API key will be used for models that don't have individual API keys (",_," models). Leave empty to remove the group API key."]}),(0,a.jsx)(R,{})]})}}),(0,a.jsxs)("div",{className:"rounded-md border border-amber-200 bg-amber-50 p-4",children:[(0,a.jsx)("p",{className:"text-sm text-amber-800",children:(0,a.jsx)("strong",{children:"How group settings work:"})}),(0,a.jsxs)("ul",{className:"mt-2 list-inside list-disc space-y-1 text-sm text-amber-800",children:[(0,a.jsx)("li",{children:"Models with individual API keys and URLs will keep their specific settings"}),(0,a.jsx)("li",{children:"Models without individual settings will use the group defaults"}),(0,a.jsx)("li",{children:"Removing the group URL makes models fall back to the system default endpoint"}),(0,a.jsx)("li",{children:'You can use "Apply Group Settings" to force models to use group configurations'})]})]}),(0,a.jsxs)("div",{className:"flex justify-end gap-2 pt-4",children:[(0,a.jsx)(x.$,{type:"button",variant:"outline",onClick:M,disabled:u,children:"Cancel"}),(0,a.jsx)(x.$,{type:"submit",disabled:u,children:u?(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(z.A,{className:"mr-2 h-4 w-4 animate-spin"}),"Updating..."]}):"Update Group"})]})]})})]})})}var B=t(7228),W=t(9675),Z=t(246),H=t(1853),X=t(8940);function ee(e){let{className:s,...t}=e;return(0,a.jsx)(H.bL,{"data-slot":"checkbox",className:(0,b.cn)("peer 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 focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive size-4 shrink-0 rounded-[4px] border shadow-xs transition-shadow outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50",s),...t,children:(0,a.jsx)(H.C1,{"data-slot":"checkbox-indicator",className:"flex items-center justify-center text-current transition-none",children:(0,a.jsx)(X.A,{className:"size-3.5"})})})}var es=t(9625);function et(e){let{className:s,children:t,...r}=e;return(0,a.jsxs)(es.bL,{"data-slot":"scroll-area",className:(0,b.cn)("relative",s),...r,children:[(0,a.jsx)(es.LM,{"data-slot":"scroll-area-viewport",className:"focus-visible:ring-ring/50 size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:outline-1",children:t}),(0,a.jsx)(ea,{}),(0,a.jsx)(es.OK,{})]})}function ea(e){let{className:s,orientation:t="vertical",...r}=e;return(0,a.jsx)(es.VM,{"data-slot":"scroll-area-scrollbar",orientation:t,className:(0,b.cn)("flex touch-none p-px transition-colors select-none","vertical"===t&&"h-full w-2.5 border-l border-l-transparent","horizontal"===t&&"h-2.5 flex-col border-t border-t-transparent",s),...r,children:(0,a.jsx)(es.lr,{"data-slot":"scroll-area-thumb",className:"bg-border relative flex-1 rounded-full"})})}var er=t(8561);function el(e){let{isOpen:s,onClose:t,onSuccess:l}=e,[i,n]=(0,r.useState)(null),[d,c]=(0,r.useState)([]),[u,m]=(0,r.useState)([]),[p,h]=(0,r.useState)(new Set),[g,j]=(0,r.useState)(!1),[y,b]=(0,r.useState)(!1),[N,w]=(0,r.useState)(!1),[_,k]=(0,r.useState)(null),C=(0,r.useCallback)(async()=>{if(i){b(!0),m([]),h(new Set);try{let e=await o.zQ.getProviderModels(i),s=new Set(e.db_models.map(e=>e.id)),t=e.remote_models.filter(e=>!s.has(e.id));m(t)}catch(e){E.oR.error("Failed to fetch models from provider")}finally{b(!1)}}},[i]);(0,r.useEffect)(()=>{s&&M()},[s]),(0,r.useEffect)(()=>{i&&C()},[i,C]);let M=async()=>{j(!0);try{let e=await o.zQ.getUpstreamProviders();c(e)}catch(e){E.oR.error("Failed to load providers")}finally{j(!1)}},A=e=>{let s=new Set(p);s.has(e)?s.delete(e):s.add(e),h(s)},S=async()=>{if(0===p.size)return void E.oR.error("Please select at least one model");w(!0);let e=0,s=0,t=[];try{for(let a of Array.from(p)){let r=u.find(e=>e.id===a);if(r)try{await o.zQ.createModel({...r,upstream_provider_id:i,enabled:!0,created:Math.floor(Date.now()/1e3)}),e++}catch(r){let e=r instanceof Error?r.message:"Unknown error";e.includes("already exists")?s++:t.push("".concat(a,": ").concat(e))}}k({added:e,skipped:s,errors:t}),e>0&&(E.oR.success("Successfully added ".concat(e," models")),null==l||l()),t.length>0&&E.oR.warning("Completed with ".concat(t.length," errors"))}catch(e){E.oR.error("Failed to collect models")}finally{w(!1)}},F=()=>{N||(n(null),m([]),h(new Set),k(null),t())};return(0,a.jsx)(v.lG,{open:s,onOpenChange:F,children:(0,a.jsxs)(v.Cf,{className:"max-h-[80vh] sm:max-w-[700px]",children:[(0,a.jsxs)(v.c7,{children:[(0,a.jsxs)(v.L3,{className:"flex items-center gap-2",children:[(0,a.jsx)(B.A,{className:"h-5 w-5"}),"Collect Models from Provider"]}),(0,a.jsx)(v.rr,{children:"Fetch models from an upstream provider and add them to your database"})]}),(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)("label",{className:"text-sm font-medium",children:"Select Provider"}),(0,a.jsxs)(f.l6,{value:null==i?void 0:i.toString(),onValueChange:e=>n(parseInt(e)),disabled:g,children:[(0,a.jsx)(f.bq,{children:(0,a.jsx)(f.yv,{placeholder:"Choose an upstream provider"})}),(0,a.jsx)(f.gC,{children:d.map(e=>(0,a.jsxs)(f.eb,{value:e.id.toString(),children:[e.provider_type," - ",e.base_url]},e.id))})]})]}),y&&(0,a.jsxs)("div",{className:"flex items-center justify-center py-8",children:[(0,a.jsx)(z.A,{className:"h-8 w-8 animate-spin"}),(0,a.jsx)("span",{className:"ml-2",children:"Loading models from provider..."})]}),!y&&i&&u.length>0&&(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)("div",{className:"flex items-center justify-between",children:[(0,a.jsxs)("div",{className:"text-sm font-medium",children:[u.length," models available"]}),(0,a.jsxs)("div",{className:"flex gap-2",children:[(0,a.jsx)(x.$,{variant:"outline",size:"sm",onClick:()=>{h(new Set(u.map(e=>e.id)))},disabled:N,children:"Select All"}),(0,a.jsx)(x.$,{variant:"outline",size:"sm",onClick:()=>{h(new Set)},disabled:N,children:"Deselect All"})]})]}),(0,a.jsx)(et,{className:"h-[300px] rounded-md border p-4",children:(0,a.jsx)("div",{className:"space-y-2",children:u.map(e=>(0,a.jsxs)("div",{className:"hover:bg-accent flex items-start space-x-3 rounded-lg border p-3",children:[(0,a.jsx)(ee,{checked:p.has(e.id),onCheckedChange:()=>A(e.id),disabled:N}),(0,a.jsxs)("div",{className:"flex-1 space-y-1",children:[(0,a.jsx)("div",{className:"font-mono text-sm font-medium",children:e.id}),(0,a.jsx)("div",{className:"text-muted-foreground text-xs",children:e.description||e.name}),e.context_length&&(0,a.jsxs)(er.E,{variant:"secondary",className:"text-xs",children:[e.context_length.toLocaleString()," tokens"]})]})]},e.id))})})]}),!y&&i&&0===u.length&&(0,a.jsxs)($.Fc,{children:[(0,a.jsx)(W.A,{className:"h-4 w-4"}),(0,a.jsx)($.TN,{children:"No new models available from this provider. All models may already be in your database."})]}),_&&(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsxs)($.Fc,{children:[(0,a.jsx)(Z.A,{className:"h-4 w-4"}),(0,a.jsxs)($.TN,{children:[(0,a.jsx)("strong",{children:"Collection Results:"}),(0,a.jsx)("br",{}),"• ",_.added," models added",(0,a.jsx)("br",{}),"• ",_.skipped," models skipped",_.errors.length>0&&(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)("br",{}),"• ",_.errors.length," errors occurred"]})]})]}),_.errors.length>0&&(0,a.jsxs)($.Fc,{variant:"destructive",children:[(0,a.jsx)(W.A,{className:"h-4 w-4"}),(0,a.jsxs)($.TN,{children:[(0,a.jsx)("strong",{children:"Errors:"}),(0,a.jsxs)("ul",{className:"mt-1 list-inside list-disc text-sm",children:[_.errors.slice(0,3).map((e,s)=>(0,a.jsx)("li",{children:e},s)),_.errors.length>3&&(0,a.jsxs)("li",{children:["... and ",_.errors.length-3," more errors"]})]})]})]})]}),(0,a.jsxs)("div",{className:"flex justify-end gap-2 pt-4",children:[(0,a.jsx)(x.$,{variant:"outline",onClick:F,disabled:N,children:_?"Close":"Cancel"}),(0,a.jsx)(x.$,{onClick:S,disabled:N||!i||0===p.size||y,children:N?(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(z.A,{className:"mr-2 h-4 w-4 animate-spin"}),"Adding Models..."]}):(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(B.A,{className:"mr-2 h-4 w-4"}),"Add ",p.size," Models"]})})]})]})]})})}function ei(e){return 0===e?"Free":e<1e-6?"$".concat(e.toFixed(8)):e<.001?"$".concat(e.toFixed(6)):e<.01?"$".concat(e.toFixed(4)):"$".concat(e.toFixed(3))}var en=t(2738),eo=t(2745),ed=t(8815);function ec(e){let{...s}=e;return(0,a.jsx)(ed.bL,{"data-slot":"alert-dialog",...s})}function eu(e){let{...s}=e;return(0,a.jsx)(ed.ZL,{"data-slot":"alert-dialog-portal",...s})}function em(e){let{className:s,...t}=e;return(0,a.jsx)(ed.hJ,{"data-slot":"alert-dialog-overlay",className:(0,b.cn)("data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50",s),...t})}function ep(e){let{className:s,...t}=e;return(0,a.jsxs)(eu,{children:[(0,a.jsx)(em,{}),(0,a.jsx)(ed.UC,{"data-slot":"alert-dialog-content",className:(0,b.cn)("bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-lg",s),...t})]})}function eh(e){let{className:s,...t}=e;return(0,a.jsx)("div",{"data-slot":"alert-dialog-header",className:(0,b.cn)("flex flex-col gap-2 text-center sm:text-left",s),...t})}function ex(e){let{className:s,...t}=e;return(0,a.jsx)("div",{"data-slot":"alert-dialog-footer",className:(0,b.cn)("flex flex-col-reverse gap-2 sm:flex-row sm:justify-end",s),...t})}function eg(e){let{className:s,...t}=e;return(0,a.jsx)(ed.hE,{"data-slot":"alert-dialog-title",className:(0,b.cn)("text-lg font-semibold",s),...t})}function ej(e){let{className:s,...t}=e;return(0,a.jsx)(ed.VY,{"data-slot":"alert-dialog-description",className:(0,b.cn)("text-muted-foreground text-sm",s),...t})}function ev(e){let{className:s,...t}=e;return(0,a.jsx)(ed.rc,{className:(0,b.cn)((0,x.r)(),s),...t})}function ef(e){let{className:s,...t}=e;return(0,a.jsx)(ed.ZD,{className:(0,b.cn)((0,x.r)({variant:"outline"}),s),...t})}var ey=t(6049);function eb(e){let{...s}=e;return(0,a.jsx)(ey.bL,{"data-slot":"dropdown-menu",...s})}function eN(e){let{...s}=e;return(0,a.jsx)(ey.l9,{"data-slot":"dropdown-menu-trigger",...s})}function ew(e){let{className:s,sideOffset:t=4,...r}=e;return(0,a.jsx)(ey.ZL,{children:(0,a.jsx)(ey.UC,{"data-slot":"dropdown-menu-content",sideOffset:t,className:(0,b.cn)("bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 max-h-(--radix-dropdown-menu-content-available-height) min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border p-1 shadow-md",s),...r})})}function e_(e){let{className:s,inset:t,variant:r="default",...l}=e;return(0,a.jsx)(ey.q7,{"data-slot":"dropdown-menu-item","data-inset":t,"data-variant":r,className:(0,b.cn)("focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:!text-destructive [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",s),...l})}function ek(e){let{className:s,...t}=e;return(0,a.jsx)(ey.wv,{"data-slot":"dropdown-menu-separator",className:(0,b.cn)("bg-border -mx-1 my-1 h-px",s),...t})}var eC=t(2034),eM=t(9987),eA=t(3545),eS=t(4963),eF=t(6541),eP=t(9197),eR=t(3732),eT=t(3728);function ez(e){let{filterProvider:s,groupData:t,showProviderActions:d=!1}=e,[c,u]=(0,r.useState)(""),[,m]=(0,r.useState)(null),[p,h]=(0,r.useState)(!1),[g,j]=(0,r.useState)(null),[v,f]=(0,r.useState)(null),[y,N]=(0,r.useState)(!1),[w,_]=(0,r.useState)(new Set),[k,C]=(0,r.useState)(!1),[M,A]=(0,r.useState)(!1),[S,F]=(0,r.useState)(!1),P=(0,l.jE)(),{data:R,isLoading:T,error:z,refetch:L}=(0,i.I)({queryKey:["models-with-providers"],queryFn:()=>o.zQ.getModelsWithProviders(),refetchOnWindowFocus:!1}),{models:Y=[],groups:O=[]}=R||{},G=(0,r.useMemo)(()=>s?Y.filter(e=>e.provider===s):Y,[Y,s]),$=(0,n.n)({mutationFn:async e=>{let s=Y.filter(s=>e.includes(s.id)).reduce((e,s)=>{let t=s.provider_id||"unknown";return e[t]||(e[t]=[]),e[t].push(s),e},{}),t=0;for(let[e,a]of Object.entries(s)){if("unknown"===e)continue;let s=a.map(e=>e.full_name);t+=(await o.zQ.deleteModels(s,e)).deleted_count}return{deleted_count:t,message:"Models deleted"}},onSuccess:e=>{E.oR.success("Successfully deleted ".concat(e.deleted_count," model overrides")),_(new Set),P.invalidateQueries({queryKey:["models-with-providers"]}),P.invalidateQueries({queryKey:["all-provider-models"]}),P.invalidateQueries({queryKey:["upstream-providers"]})},onError:e=>{E.oR.error("Failed to delete model overrides: ".concat(e.message))}}),B=(0,n.n)({mutationFn:async e=>{let s=Y.filter(s=>e.includes(s.id)).reduce((e,s)=>{let t=s.provider_id||"unknown";return e[t]||(e[t]=[]),e[t].push(s),e},{}),t=0;for(let[e,r]of Object.entries(s))if("unknown"!==e)for(let s of r){let r=parseInt(e);try{let e=await o.zQ.getProviderModel(r,s.full_name);await o.zQ.updateProviderModel(r,s.full_name,{...e,enabled:!1}),t++}catch(e){var a;if((null==(a=e.message)?void 0:a.includes("404"))||404===e.status){let e={id:s.full_name,name:s.name,description:s.description||"",created:Math.floor(Date.now()/1e3),context_length:s.contextLength||4096,architecture:{modality:s.modelType||"text",input_modalities:[s.modelType||"text"],output_modalities:[s.modelType||"text"],tokenizer:"",instruct_type:null},pricing:{prompt:s.input_cost,completion:s.output_cost,request:0,image:0,web_search:0,internal_reasoning:0},per_request_limits:null,top_provider:null,upstream_provider_id:r,enabled:!1};await o.zQ.createProviderModel(r,e),t++}}}return{deleted_count:t,message:"Models disabled"}},onSuccess:e=>{E.oR.success("Successfully disabled ".concat(e.deleted_count," models")),_(new Set),P.invalidateQueries({queryKey:["models-with-providers"]}),P.invalidateQueries({queryKey:["all-provider-models"]}),P.invalidateQueries({queryKey:["upstream-providers"]})},onError:e=>{E.oR.error("Failed to disable models: ".concat(e.message))}}),W=(0,n.n)({mutationFn:async e=>{if(!t)throw Error("No group data available");let s={};return s.api_key="",t.group_url&&(s.url=t.group_url),o.zQ.bulkUpdateModels(e,s)},onSuccess:e=>{E.oR.success("Successfully applied group settings to ".concat(e.updated_count," models")),e.errors.length>0&&(E.oR.warning("".concat(e.errors.length," models had errors during update")),console.warn("Bulk update errors:",e.errors)),_(new Set),P.invalidateQueries({queryKey:["models-with-providers"]}),P.invalidateQueries({queryKey:["all-provider-models"]}),P.invalidateQueries({queryKey:["upstream-providers"]})},onError:e=>{E.oR.error("Failed to apply group settings: ".concat(e.message))}}),H=(0,n.n)({mutationFn:()=>o.zQ.deleteAllModels(),onSuccess:e=>{E.oR.success("Successfully permanently deleted ".concat(e.deleted_count," models")),_(new Set),P.invalidateQueries({queryKey:["models-with-providers"]}),P.invalidateQueries({queryKey:["all-provider-models"]}),P.invalidateQueries({queryKey:["upstream-providers"]})},onError:e=>{E.oR.error("Failed to permanently delete all models: ".concat(e.message))}}),es=(0,n.n)({mutationFn:e=>o.zQ.deleteModelsByProvider(e),onSuccess:e=>{E.oR.success("Successfully permanently deleted ".concat(e.deleted_count," models from provider")),_(new Set),P.invalidateQueries({queryKey:["models-with-providers"]}),P.invalidateQueries({queryKey:["all-provider-models"]}),P.invalidateQueries({queryKey:["upstream-providers"]})},onError:e=>{E.oR.error("Failed to permanently delete provider models: ".concat(e.message))}}),et=(0,n.n)({mutationFn:async e=>{let s=Y.find(s=>s.id===e);if(!s)throw Error("Model not found");if(!s.provider_id)throw Error("Provider ID not available for this model");let t=parseInt(s.provider_id),a=await o.zQ.getProviderModel(t,s.full_name);return await o.zQ.updateProviderModel(t,s.full_name,{...a,enabled:!0}),{restored_count:1}},onSuccess:()=>{E.oR.success("Model enabled successfully"),P.invalidateQueries({queryKey:["models-with-providers"]}),P.invalidateQueries({queryKey:["all-provider-models"]}),P.invalidateQueries({queryKey:["upstream-providers"]})},onError:e=>{E.oR.error("Failed to enable model: ".concat(e.message))}}),ea=(0,n.n)({mutationFn:async e=>{let s=Y.filter(s=>e.includes(s.id)).reduce((e,s)=>{let t=s.provider_id||"unknown";return e[t]||(e[t]=[]),e[t].push(s),e},{}),t=0;for(let[e,a]of Object.entries(s))if("unknown"!==e)for(let s of a){let a=parseInt(e);try{let e=await o.zQ.getProviderModel(a,s.full_name);await o.zQ.updateProviderModel(a,s.full_name,{...e,enabled:!0}),t++}catch(e){console.error("Failed to enable model ".concat(s.full_name,":"),e)}}return{restored_count:t,message:"Models enabled"}},onSuccess:e=>{E.oR.success("Successfully enabled ".concat(e.restored_count," models")),_(new Set),P.invalidateQueries({queryKey:["models-with-providers"]}),P.invalidateQueries({queryKey:["all-provider-models"]}),P.invalidateQueries({queryKey:["upstream-providers"]})},onError:e=>{E.oR.error("Failed to enable models: ".concat(e.message))}}),er=(0,r.useMemo)(()=>s?{[s]:G}:Y?Y.reduce((e,s)=>{let t=s.provider;return e[t]||(e[t]=[]),e[t].push(s),e},{}):{},[Y,G,s]),ed=(0,r.useMemo)(()=>new Map(O.map(e=>[e.provider,e])),[O]),eu=(0,r.useMemo)(()=>{let e={};return O.forEach(s=>{e[s.provider]={group_api_key:s.group_api_key,group_url:s.group_url}}),e},[O]),em=e=>{var s;return e.api_key?e.api_key:null==(s=eu[e.provider])?void 0:s.group_api_key},ey=e=>{let s=ed.get(e.provider),t=!!(e.api_key&&"string"==typeof e.api_key&&e.api_key!==(null==s?void 0:s.group_api_key)),a=!!(e.url&&"string"==typeof e.url&&!e.url.startsWith("/")&&e.url!==(null==s?void 0:s.group_url));return t||a},ez=async e=>{try{let s=O.find(s=>s.provider===e.provider);s||(s=await o.zQ.createModelGroup({provider:e.provider,group_api_key:void 0}));let t={name:e.name,full_name:e.name,input_cost:e.input_cost,output_cost:e.output_cost,provider:e.provider,modelType:e.modelType,description:e.description||void 0,contextLength:e.contextLength};await o.zQ.createModel(t),await L(),E.oR.success('Model "'.concat(e.name,'" added successfully!'))}catch(e){throw console.error("Error adding model:",e),E.oR.error("Failed to add model. Please try again."),e}},eE=async()=>{await L(),j(null)},eI=async(e,s)=>{try{let t=ed.get(e);t&&(await o.zQ.updateModelGroup(t.id,{provider:s.provider,group_api_key:s.group_api_key||void 0,group_url:s.group_url||void 0}),await L(),f(null),E.oR.success("Group updated successfully!"))}catch(e){console.error("Error updating group:",e),E.oR.error("Failed to update group. Please try again.")}},eq=async()=>{await L(),N(!1)},eL=async e=>{let s=ed.get(e);if(!(null==s?void 0:s.id))return void E.oR.error("No group configuration found for this provider");try{let e=await o.zQ.refreshModels({provider_id:s.id});E.oR.info(e.message),await L(),P.invalidateQueries({queryKey:["models-with-providers"]}),P.invalidateQueries({queryKey:["all-provider-models"]}),P.invalidateQueries({queryKey:["upstream-providers"]})}catch(t){console.error("Error refreshing provider models:",t);let s=t instanceof Error?t.message:"Unknown error";E.oR.error("Failed to refresh ".concat(e," models: ").concat(s))}},eY=e=>{switch(e.toLowerCase()){case"text":default:return(0,a.jsx)(eC.A,{className:"h-4 w-4"});case"embedding":return(0,a.jsx)(eM.A,{className:"h-4 w-4"});case"image":return(0,a.jsx)(K.A,{className:"h-4 w-4"})}},eO=e=>{switch(e.toLowerCase()){case"text":return"bg-blue-100 text-blue-800";case"embedding":return"bg-purple-100 text-purple-800";case"image":return"bg-green-100 text-green-800";case"audio":return"bg-orange-100 text-orange-800";case"multimodal":return"bg-pink-100 text-pink-800";default:return"bg-gray-100 text-gray-800"}},eU=e=>{let s=new Set(w);s.has(e)?s.delete(e):s.add(e),_(s)},eJ=e=>{let s=G.filter(s=>s.provider===e).map(e=>e.id),t=new Set(w);s.forEach(e=>t.add(e)),_(t)},eQ=e=>{let s=ed.get(e);(null==s?void 0:s.id)&&es.mutate(s.id)},eK=async e=>{let s=Y.find(s=>s.id===e);if(!s)return void E.oR.error("Model not found");if(!s.provider_id)return void E.oR.error("Provider ID not available for this model");try{let e=parseInt(s.provider_id);await o.zQ.deleteProviderModel(e,s.full_name),E.oR.success("Model override deleted successfully"),P.invalidateQueries({queryKey:["models-with-providers"]}),P.invalidateQueries({queryKey:["all-provider-models"]}),P.invalidateQueries({queryKey:["upstream-providers"]})}catch(s){let e=s instanceof Error?s.message:"Unknown error";E.oR.error("Failed to delete model override: ".concat(e))}},eD=async e=>{let s=Y.find(s=>s.id===e);if(!s)return void E.oR.error("Model not found");if(!s.provider_id)return void E.oR.error("Provider ID not available for this model");try{let e=parseInt(s.provider_id);try{let t=await o.zQ.getProviderModel(e,s.full_name);await o.zQ.updateProviderModel(e,s.full_name,{...t,enabled:!1}),E.oR.success("Model disabled successfully")}catch(a){var t;if((null==(t=a.message)?void 0:t.includes("404"))||404===a.status){let t={id:s.full_name,name:s.name,description:s.description||"",created:Math.floor(Date.now()/1e3),context_length:s.contextLength||4096,architecture:{modality:s.modelType||"text",input_modalities:[s.modelType||"text"],output_modalities:[s.modelType||"text"],tokenizer:"",instruct_type:null},pricing:{prompt:s.input_cost,completion:s.output_cost,request:0,image:0,web_search:0,internal_reasoning:0},per_request_limits:null,top_provider:null,upstream_provider_id:e,enabled:!1};await o.zQ.createProviderModel(e,t),E.oR.success("Model disabled successfully")}else throw a}P.invalidateQueries({queryKey:["models-with-providers"]}),P.invalidateQueries({queryKey:["all-provider-models"]}),P.invalidateQueries({queryKey:["upstream-providers"]})}catch(s){let e=s instanceof Error?s.message:"Unknown error";E.oR.error("Failed to disable model: ".concat(e))}};return T?(0,a.jsxs)("div",{className:"grid gap-4",children:[(0,a.jsx)(eo.E,{className:"h-[200px]"}),(0,a.jsx)(eo.E,{className:"h-[200px]"})]}):z?(0,a.jsx)("div",{className:"rounded-lg border border-red-200 bg-red-50 p-4",children:(0,a.jsx)("p",{className:"text-sm text-red-800",children:"Error loading models. Please try again later."})}):(0,a.jsxs)("div",{className:"grid gap-6",children:[(0,a.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[d&&(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)("div",{className:"bg-border h-6 w-px"}),(0,a.jsxs)(x.$,{onClick:()=>{let e=G.map(e=>e.id),s=new Set(w);e.forEach(e=>s.add(e)),_(s)},variant:"outline",size:"sm",className:"gap-2",children:[(0,a.jsx)(eA.A,{className:"h-4 w-4"}),"Select All (",G.length,")"]}),w.size>0&&(0,a.jsxs)(x.$,{onClick:()=>{if(s){let e=G.map(e=>e.id),s=new Set(w);e.forEach(e=>s.delete(e)),_(s)}else _(new Set)},variant:"outline",size:"sm",className:"gap-2",children:[(0,a.jsx)(eS.A,{className:"h-4 w-4"}),"Deselect All"]})]}),w.size>0&&(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)("div",{className:"bg-border h-6 w-px"}),(0,a.jsxs)("span",{className:"text-muted-foreground text-sm",children:[w.size," selected"]}),(()=>{let e=G.filter(e=>w.has(e.id)&&e.soft_deleted);return e.length>0&&(0,a.jsxs)(x.$,{onClick:()=>ea.mutate(e.map(e=>e.id)),variant:"outline",size:"sm",className:"gap-2 border-green-300 text-green-600 hover:border-green-400 hover:text-green-700",disabled:ea.isPending,children:[(0,a.jsx)(Z.A,{className:"h-4 w-4"}),"Enable Selected (",e.length,")"]})})(),(0,a.jsxs)(x.$,{onClick:()=>{C(!0)},variant:"destructive",size:"sm",className:"gap-2",disabled:$.isPending,children:[(0,a.jsx)(eF.A,{className:"h-4 w-4"}),"Delete Selected Overrides"]}),(0,a.jsxs)(x.$,{onClick:()=>{B.mutate(Array.from(w))},variant:"outline",size:"sm",className:"gap-2 border-orange-300 text-orange-600 hover:border-orange-400 hover:text-orange-700",disabled:B.isPending,children:[(0,a.jsx)(eP.A,{className:"h-4 w-4"}),"Disable Selected"]})]}),!d&&(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)("div",{className:"bg-border h-6 w-px"}),(0,a.jsxs)(eb,{children:[(0,a.jsx)(eN,{asChild:!0,children:(0,a.jsxs)(x.$,{variant:"outline",size:"sm",className:"gap-2",children:[(0,a.jsx)(eR.A,{className:"h-4 w-4"}),"More Actions"]})}),(0,a.jsxs)(ew,{align:"end",children:[(0,a.jsxs)(e_,{onClick:()=>{_(new Set(G.map(e=>e.id)))},children:[(0,a.jsx)(eA.A,{className:"mr-2 h-4 w-4"}),"Select All Models"]}),(0,a.jsxs)(e_,{onClick:()=>{_(new Set)},children:[(0,a.jsx)(eS.A,{className:"mr-2 h-4 w-4"}),"Deselect All"]}),(0,a.jsx)(ek,{}),(0,a.jsxs)(e_,{onClick:()=>{A(!0)},className:"text-destructive focus:text-destructive",children:[(0,a.jsx)(D.A,{className:"mr-2 h-4 w-4"}),"Delete All Models Permanently"]})]})]})]})]}),Object.entries(er).map(e=>{let[t,r]=e;if(s&&t!==s)return null;let l=ed.get(t),i=r.every(e=>w.has(e.id)),n=r.some(e=>w.has(e.id));return(0,a.jsxs)(en.Zp,{className:"overflow-hidden",children:[!s&&(0,a.jsx)(en.aR,{className:"pb-3",children:(0,a.jsxs)("div",{className:"flex items-center justify-between",children:[(0,a.jsxs)("div",{className:"flex items-center gap-3",children:[(0,a.jsx)(ee,{checked:i,ref:e=>{e&&"indeterminate"in e&&(e.indeterminate=n&&!i)},onCheckedChange:e=>{if(e)eJ(t);else{let e=r.map(e=>e.id),s=new Set(w);e.forEach(e=>s.delete(e)),_(s)}}}),(0,a.jsxs)("div",{children:[(0,a.jsxs)(en.ZB,{className:"flex items-center gap-2 text-lg",children:[(0,a.jsx)(J.A,{className:"h-5 w-5"}),t,(0,a.jsxs)("span",{className:"text-muted-foreground text-sm font-normal",children:["(",r.length," models)"]})]}),(0,a.jsxs)(en.BT,{children:[(null==l?void 0:l.group_url)?(0,a.jsxs)("span",{className:"flex items-center gap-1",children:[(0,a.jsx)(K.A,{className:"h-3 w-3"}),l.group_url]}):"Using default endpoint",(null==l?void 0:l.group_api_key)&&(0,a.jsxs)("span",{className:"ml-2 flex items-center gap-1",children:[(0,a.jsx)(Q.A,{className:"h-3 w-3"}),"Group API Key"]})]})]})]}),(0,a.jsx)("div",{className:"flex items-center gap-2",children:(0,a.jsxs)(eb,{children:[(0,a.jsx)(eN,{asChild:!0,children:(0,a.jsx)(x.$,{variant:"ghost",size:"sm",children:(0,a.jsx)(eR.A,{className:"h-4 w-4"})})}),(0,a.jsxs)(ew,{align:"end",children:[(0,a.jsxs)(e_,{onClick:()=>{l&&f({provider:t,models:r,groupData:l})},children:[(0,a.jsx)(q.A,{className:"mr-2 h-4 w-4"}),"Edit Group"]}),(0,a.jsxs)(e_,{onClick:()=>eJ(t),children:[(0,a.jsx)(eA.A,{className:"mr-2 h-4 w-4"}),"Select All"]}),(0,a.jsxs)(e_,{onClick:()=>eL(t),children:[(0,a.jsx)(eT.A,{className:"mr-2 h-4 w-4"}),"Refresh Models"]}),(0,a.jsx)(ek,{}),(0,a.jsxs)(e_,{onClick:()=>eQ(t),className:"text-destructive focus:text-destructive",children:[(0,a.jsx)(eF.A,{className:"mr-2 h-4 w-4"}),"Delete All Models Permanently"]})]})]})})]})}),(0,a.jsx)(en.Wu,{className:s?"pt-6":"pt-0",children:(0,a.jsx)("div",{className:"grid gap-3 md:grid-cols-2 lg:grid-cols-3",children:r.map(e=>(0,a.jsxs)(en.Zp,{className:(0,b.cn)("relative cursor-pointer overflow-hidden transition-all duration-200 hover:shadow-md",w.has(e.id)&&"ring-primary ring-2",c===e.id&&"ring-2 ring-blue-500",e.soft_deleted&&"border-red-200 bg-red-50 opacity-75"),onMouseEnter:()=>m(e.id),onMouseLeave:()=>m(null),children:[(0,a.jsx)(en.aR,{className:"pb-2",children:(0,a.jsxs)("div",{className:"flex items-start gap-2 pr-10",children:[(0,a.jsx)(ee,{checked:w.has(e.id),onCheckedChange:()=>eU(e.id),onClick:e=>e.stopPropagation(),className:"mt-1 flex-shrink-0"}),(0,a.jsxs)("div",{className:"flex w-[calc(100%-3rem)] items-start gap-2 overflow-hidden",children:[(0,a.jsx)("div",{className:"mt-1 flex-shrink-0",children:eY(e.modelType)}),(0,a.jsxs)("div",{className:"w-full overflow-hidden",children:[(0,a.jsx)("h3",{className:(0,b.cn)("overflow-hidden text-sm font-medium text-ellipsis whitespace-nowrap",e.soft_deleted&&"text-red-600 line-through"),children:e.name}),e.full_name!==e.name&&(0,a.jsx)("p",{className:"text-muted-foreground overflow-hidden text-xs text-ellipsis whitespace-nowrap",children:e.full_name})]})]}),(0,a.jsx)("div",{className:"absolute top-3 right-2",children:(0,a.jsxs)(eb,{children:[(0,a.jsx)(eN,{asChild:!0,children:(0,a.jsx)(x.$,{variant:"ghost",size:"sm",onClick:e=>e.stopPropagation(),className:"h-8 w-8 p-0",children:(0,a.jsx)(eR.A,{className:"h-4 w-4"})})}),(0,a.jsxs)(ew,{align:"end",children:[(0,a.jsxs)(e_,{onClick:s=>{s.stopPropagation(),u(e.id)},children:[(0,a.jsx)(X.A,{className:"mr-2 h-4 w-4"}),"Select for Test"]}),(0,a.jsxs)(e_,{onClick:s=>{s.stopPropagation(),j(e)},children:[(0,a.jsx)(q.A,{className:"mr-2 h-4 w-4"}),"Edit Model"]}),(0,a.jsx)(ek,{}),e.soft_deleted?(0,a.jsxs)(e_,{onClick:s=>{s.stopPropagation(),et.mutate(e.id)},className:"text-green-600 focus:text-green-700",children:[(0,a.jsx)(Z.A,{className:"mr-2 h-4 w-4"}),"Enable Model"]}):(0,a.jsxs)(e_,{onClick:s=>{s.stopPropagation(),eD(e.id)},className:"text-orange-600 focus:text-orange-700",children:[(0,a.jsx)(eP.A,{className:"mr-2 h-4 w-4"}),"Disable Model"]}),(0,a.jsxs)(e_,{onClick:s=>{s.stopPropagation(),eK(e.id)},className:"text-destructive focus:text-destructive",children:[(0,a.jsx)(eF.A,{className:"mr-2 h-4 w-4"}),"Delete"]})]})]})})]})}),(0,a.jsxs)(en.Wu,{className:"space-y-2 pt-0",onClick:()=>u(e.id),children:[(0,a.jsxs)("div",{className:"flex flex-wrap gap-1",children:[(0,a.jsx)("span",{className:(0,b.cn)("inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium",eO(e.modelType)),children:e.modelType}),"remote"===e.api_key_type&&(0,a.jsx)("span",{className:"inline-flex items-center rounded-full border border-blue-200 bg-blue-100 px-2.5 py-0.5 text-xs font-medium text-blue-800",children:"Remote"}),"remote"!==e.api_key_type&&(0,a.jsx)("span",{className:"inline-flex items-center rounded-full border border-emerald-200 bg-emerald-100 px-2.5 py-0.5 text-xs font-medium text-emerald-800",children:"Database"}),e.is_free&&(0,a.jsx)("span",{className:"inline-flex items-center rounded-full bg-yellow-100 px-2.5 py-0.5 text-xs font-medium text-yellow-800",children:"Free"}),!em(e)&&(0,a.jsxs)("span",{className:"inline-flex items-center rounded-full bg-red-100 px-2.5 py-0.5 text-xs font-medium text-red-800",children:[(0,a.jsx)(Q.A,{className:"mr-1 h-3 w-3"}),"No API Key"]}),em(e)&&!ey(e)&&(0,a.jsxs)("span",{className:"inline-flex items-center rounded-full bg-green-100 px-2.5 py-0.5 text-xs font-medium text-green-800",children:[(0,a.jsx)(J.A,{className:"mr-1 h-3 w-3"}),"Group Key"]}),ey(e)&&(0,a.jsxs)("span",{className:"inline-flex items-center rounded-full bg-purple-100 px-2.5 py-0.5 text-xs font-medium text-purple-800",children:[(0,a.jsx)(Q.A,{className:"mr-1 h-3 w-3"}),"Individual Key"]}),e.soft_deleted&&(0,a.jsxs)("span",{className:"inline-flex items-center rounded-full border border-red-300 bg-red-100 px-2.5 py-0.5 text-xs font-medium text-red-800",children:[(0,a.jsx)(eF.A,{className:"mr-1 h-3 w-3"}),"Deleted"]})]}),!e.is_free&&(0,a.jsxs)("div",{className:"text-muted-foreground space-y-1 text-xs",children:[(0,a.jsxs)("div",{className:"flex justify-between",children:[(0,a.jsx)("span",{className:"truncate",children:"Input:"}),(0,a.jsxs)("span",{className:"ml-2 truncate",children:[ei(e.input_cost),"/1M tokens"]})]}),(0,a.jsxs)("div",{className:"flex justify-between",children:[(0,a.jsx)("span",{className:"truncate",children:"Output:"}),(0,a.jsxs)("span",{className:"ml-2 truncate",children:[ei(e.output_cost),"/1M tokens"]})]})]}),e.description&&(0,a.jsx)("p",{className:"text-muted-foreground line-clamp-2 overflow-hidden text-xs break-words text-ellipsis",children:e.description})]})]},e.id))})})]},t)}),(0,a.jsx)(I,{isOpen:p,onModelAdd:ez,onCancel:()=>h(!1)}),g&&(0,a.jsx)(U,{model:g,providerId:g.provider_id?parseInt(g.provider_id):void 0,onModelUpdate:eE,onCancel:()=>j(null),isOpen:!!g}),v&&(0,a.jsx)(V,{provider:v.provider,models:v.models,groupSettings:{group_api_key:v.groupData.group_api_key,group_url:v.groupData.group_url},onGroupUpdate:eI,onCancel:()=>f(null),isOpen:!!v}),(0,a.jsx)(el,{isOpen:y,onClose:()=>N(!1),onSuccess:eq}),(0,a.jsx)(ec,{open:k,onOpenChange:C,children:(0,a.jsxs)(ep,{children:[(0,a.jsxs)(eh,{children:[(0,a.jsx)(eg,{children:"Permanently Delete Selected Models"}),(0,a.jsxs)(ej,{children:["Are you sure you want to permanently delete ",w.size," ","selected models? This will completely remove them from the database and cannot be undone."]})]}),(0,a.jsxs)(ex,{children:[(0,a.jsx)(ef,{children:"Cancel"}),(0,a.jsx)(ev,{onClick:()=>{$.mutate(Array.from(w)),C(!1)},className:"bg-destructive text-destructive-foreground hover:bg-destructive/90",children:"Delete Models"})]})]})}),(0,a.jsx)(ec,{open:S,onOpenChange:F,children:(0,a.jsxs)(ep,{children:[(0,a.jsxs)(eh,{children:[(0,a.jsxs)(eg,{children:["Apply Group Settings to"," ",w.size===G.length&&s?"All Models in ".concat(s):"Selected Models"]}),(0,a.jsxs)(ej,{children:[w.size===G.length&&s?(0,a.jsxs)("div",{children:[(0,a.jsxs)("p",{children:["Are you sure you want to force ALL ",w.size," ","models in the ",(0,a.jsx)("strong",{children:s})," group to use group settings?"]}),(0,a.jsx)("p",{className:"mt-2 text-sm text-amber-600",children:(0,a.jsx)("strong",{children:"⚠️ This will override individual model configurations:"})})]}):(0,a.jsxs)("p",{children:["Are you sure you want to apply the group settings to"," ",w.size," selected models?"]}),(0,a.jsxs)("ul",{className:"mt-2 list-inside list-disc space-y-1 text-sm",children:[(0,a.jsx)("li",{children:"Remove individual API keys (models will use the group API key)"}),(null==t?void 0:t.group_url)&&(0,a.jsxs)("li",{children:["Set the URL to:"," ",(0,a.jsx)("code",{className:"rounded bg-gray-100 px-1",children:t.group_url})]}),(0,a.jsx)("li",{children:"Force models to use group configurations"}),w.size===G.length&&s&&(0,a.jsx)("li",{className:"font-medium text-amber-600",children:"This will affect ALL models in this provider group"})]})]})]}),(0,a.jsxs)(ex,{children:[(0,a.jsx)(ef,{children:"Cancel"}),(0,a.jsx)(ev,{onClick:()=>{W.mutate(Array.from(w)),F(!1)},className:"bg-blue-600 text-white hover:bg-blue-700",children:w.size===G.length&&s?"Force All ".concat(w.size," Models"):"Apply Group Settings"})]})]})}),(0,a.jsx)(ec,{open:M,onOpenChange:A,children:(0,a.jsxs)(ep,{children:[(0,a.jsxs)(eh,{children:[(0,a.jsx)(eg,{children:"Permanently Delete All Models"}),(0,a.jsxs)(ej,{children:["Are you sure you want to permanently delete ALL models? This will completely remove all ",Y.length," models from the database. This action cannot be undone."]})]}),(0,a.jsxs)(ex,{children:[(0,a.jsx)(ef,{children:"Cancel"}),(0,a.jsx)(ev,{onClick:()=>{H.mutate(),A(!1)},className:"bg-destructive text-destructive-foreground hover:bg-destructive/90",children:"Delete All Models"})]})]})})]})}var eE=t(7916);u.Ik({id:u.Yj(),created_at:u.Yj(),updated_at:u.Yj(),provider:u.Yj(),group_api_key:u.Yj().optional(),group_url:u.Yj().optional()}),u.Ik({provider:u.Yj(),group_api_key:u.Yj().optional(),group_url:u.Yj().optional()}),u.Ik({provider:u.Yj().optional(),group_api_key:u.Yj().optional(),group_url:u.Yj().optional()}),u.Ik({base_endpoint:u.Yj(),api_key:u.Yj().optional(),provider_name:u.Yj(),default_input_cost:u.ai(),default_output_cost:u.ai(),default_min_cost:u.ai()}),u.Ik({collected_count:u.ai(),skipped_count:u.ai(),models:u.YO(u.bz()),errors:u.YO(u.Yj())}),u.Ik({provider_id:u.Yj()}),u.Ik({refreshed_count:u.ai(),created_count:u.ai(),restored_count:u.ai(),deleted_count:u.ai(),errors:u.YO(u.Yj())}),u.Ik({total_refreshed_count:u.ai(),total_created_count:u.ai(),total_restored_count:u.ai(),total_deleted_count:u.ai(),provider_results:u.YO(u.Ik({provider_name:u.Yj(),refreshed_count:u.ai(),created_count:u.ai(),restored_count:u.ai(),deleted_count:u.ai(),errors:u.YO(u.Yj())})),errors:u.YO(u.Yj())});let eI=u.Ik({id:u.Yj(),canonical_slug:u.Yj().optional(),hugging_face_id:u.Yj().optional(),name:u.Yj().optional(),created:u.ai(),description:u.Yj().optional(),context_length:u.ai().optional(),architecture:u.bz().optional(),pricing:u.bz().optional(),top_provider:u.bz().optional(),per_request_limits:u.bz().optional(),supported_parameters:u.YO(u.Yj()).optional(),provider_url:u.Yj(),provider_name:u.Yj().optional(),group_id:u.Yj().optional()});function eq(e,s){var t,a;return{id:e.id,name:e.name,full_name:e.full_name,description:e.description,modelType:e.model_type||"text",isEnabled:!e.soft_deleted,createdAt:e.created_at,updatedAt:e.updated_at,provider:e.provider||s||"",url:e.url,api_key:e.api_key,input_cost:Number(e.input_cost),output_cost:Number(e.output_cost),min_cost_per_request:Number(e.min_cost_per_request||"0"),min_cash_per_request:Number(e.min_cash_per_request||"0"),contextLength:e.context_length,apiKeyRequired:!0,provider_id:e.provider_id,is_free:null!=(t=e.is_free)&&t,soft_deleted:null!=(a=e.soft_deleted)&&a,has_own_api_key:e.has_own_api_key,api_key_type:e.api_key_type}}u.Ik({object:u.Yj(),data:u.YO(eI)}),u.Ik({id:u.Yj(),created_at:u.Yj(),updated_at:u.Yj(),full_name:u.Yj(),name:u.Yj(),url:u.Yj(),input_cost:u.Yj(),output_cost:u.Yj(),api_key:u.Yj().optional(),min_cash_per_request:u.Yj(),min_cost_per_request:u.Yj().optional(),provider_id:u.Yj().optional(),provider:u.Yj().optional(),soft_deleted:u.zM().optional(),architecture:u.bz().optional(),model_type:u.Yj().optional(),description:u.Yj().optional(),context_length:u.ai().optional(),is_free:u.zM().optional(),has_own_api_key:u.zM(),api_key_type:u.Yj()});class eL{static async createModelGroup(e){return await eE.apiClient.post("/api/model-groups",{provider:e.provider,group_api_key:e.group_api_key,group_url:e.group_url})}static async getModelGroups(){return await eE.apiClient.get("/api/model-groups")}static async getModelGroup(e){return await eE.apiClient.get("/api/model-groups/".concat(e))}static async updateModelGroup(e,s){return await eE.apiClient.put("/api/model-groups/".concat(e),{provider:s.provider,group_api_key:s.group_api_key,group_url:s.group_url})}static async deleteModelGroup(e){return await eE.apiClient.delete("/api/model-groups/".concat(e))}static async createModel(e){let s={full_name:e.name,name:e.name,url:e.url,api_key:e.api_key,input_cost:e.input_cost,output_cost:e.output_cost,min_cost_per_request:e.min_cost_per_request,min_cash_per_request:e.min_cash_per_request,provider:e.provider,model_type:e.modelType,description:e.description,context_length:e.contextLength,is_free:e.is_free};return eq(await eE.apiClient.post("/api/models",s))}static async getModels(){return(await eE.apiClient.get("/api/models")).map(e=>eq(e))}static async getModel(e){return eq(await eE.apiClient.get("/api/models/".concat(e)))}static async getModelsByProvider(e){return(await eE.apiClient.get("/api/models/provider/".concat(e))).map(e=>eq(e))}static async updateModel(e,s){let t={name:s.name,url:s.url,api_key:s.api_key,input_cost:s.input_cost,output_cost:s.output_cost,min_cost_per_request:s.min_cost_per_request,min_cash_per_request:s.min_cash_per_request,provider:s.provider,model_type:s.modelType,description:s.description,context_length:s.contextLength,is_free:s.is_free};return eq(await eE.apiClient.put("/api/models/".concat(e),t))}static async deleteModel(e){return await eE.apiClient.delete("/api/models/".concat(e))}static async softDeleteModel(e){return await eE.apiClient.put("/api/models/".concat(e,"/soft-delete"),{})}static async deleteModels(e){return await eE.apiClient.post("/api/models/bulk/delete",{model_ids:e})}static async softDeleteModels(e){return await eE.apiClient.post("/api/models/bulk/soft-delete",{model_ids:e})}static async bulkUpdateModels(e,s){return await eE.apiClient.post("/api/models/bulk/update",{model_ids:e,api_key:s.api_key,url:s.url})}static async deleteAllModels(){return await eE.apiClient.post("/api/models/all/delete",{})}static async deleteModelsByProvider(e){return await eE.apiClient.post("/api/models/provider/".concat(e,"/delete"),{})}static async restoreModels(e){return await eE.apiClient.post("/api/models/bulk/restore",{model_ids:e})}static async getSoftDeletedModels(){return(await eE.apiClient.get("/api/models/deleted")).map(e=>eq(e))}static async collectModels(e){return await eE.apiClient.post("/api/models/collect",e)}static async getModelsWithProviders(){let[e,s]=await Promise.all([eE.apiClient.get("/api/models"),this.getModelGroups()]),t=new Map(s.map(e=>[e.id,e.provider]));return{models:e.map(e=>eq(e,t.get(e.provider_id||"")||"Unknown")),groups:s}}static async listModels(e){let{models:s}=await this.getModelsWithProviders();return(null==e?void 0:e.enabled)!==!1?s.filter(e=>e.isEnabled):s}static async getModelInfo(e){return await this.getModel(e)}static async refreshModels(e){return await eE.apiClient.post("/api/models/refresh",e)}static async refreshAllModels(){return await eE.apiClient.post("/api/models/refresh-all",{})}static async getEnhancedModels(){return await eE.apiClient.get("/api/enhanced-models")}static async getEnhancedModelsByProvider(e){return await eE.apiClient.get("/api/enhanced-models/".concat(encodeURIComponent(e)))}static downloadModelsAsJson(e){let s=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"models.json",t=new Blob([JSON.stringify(e,null,2)],{type:"application/json"}),a=URL.createObjectURL(t),r=document.createElement("a");r.href=a,r.download=s,r.click(),URL.revokeObjectURL(a)}static async downloadAllEnhancedModels(){try{let e=await this.getEnhancedModels();this.downloadModelsAsJson(e,"enhanced-models-all.json")}catch(e){throw console.error("Error downloading all enhanced models:",e),e}}static async downloadEnhancedModelsByProvider(e){try{let s=await this.getEnhancedModelsByProvider(e);this.downloadModelsAsJson(s,"enhanced-models-".concat(e.toLowerCase(),".json"))}catch(s){throw console.error("Error downloading enhanced models for provider ".concat(e,":"),s),s}}static async testModel(e,s,t){return await eE.apiClient.post("/api/models/test",{model_id:e,endpoint_type:s,request_data:t})}}var eY=t(2390),eO=t(4717);function eU(e){var s,t;let{models:l}=e,[o,d]=(0,r.useState)(""),[c,u]=(0,r.useState)("You are a helpful assistant. Please respond concisely."),[m,p]=(0,r.useState)("Hello! Can you tell me what model you are and confirm that you are working correctly?"),[h,g]=(0,r.useState)(150),[v,y]=(0,r.useState)(.7),[b,w]=(0,r.useState)(null),[_,k]=(0,r.useState)(null),{data:C=[]}=(0,i.I)({queryKey:["model-groups"],queryFn:()=>eL.getModelGroups(),refetchOnWindowFocus:!1}),M=l.find(e=>e.id===o),A=(0,n.n)({mutationFn:async e=>{if(!M)throw Error("No model selected");k(null),w(null);try{console.log("Testing model via proxy: ".concat(M.name)),console.log("Request payload:",e);let s=await eL.testModel(M.id,"chat-completions",e);if(!s.success)throw Error(s.error||"Test failed");return s.data}catch(e){throw console.error("Model test error via proxy:",e),Error(e instanceof Error?e.message:"Failed to test model via proxy")}},onSuccess:e=>{w(e),E.oR.success("Model test completed successfully!")},onError:e=>{let s=(null==e?void 0:e.message)||"Unknown error occurred";k(s),E.oR.error("Model test failed: ".concat(s))}}),S=async()=>{if(!M)return void E.oR.error("Please select a model to test");if(!m.trim())return void E.oR.error("Please enter a test message");let e=[];c.trim()&&e.push({role:"system",content:c.trim()}),e.push({role:"user",content:m.trim()});let s={model:M.name,messages:e,max_tokens:h,temperature:v};A.mutate(s)},F=l.filter(e=>e.isEnabled),P=M?(e=>{let s=C.find(s=>s.provider===e.provider),t=e.api_key||(null==s?void 0:s.group_api_key),a=e.url;return e.url.startsWith("/")&&(null==s?void 0:s.group_url)&&(a="".concat(s.group_url.replace(/\/$/,"")).concat(e.url)),"text"!==e.modelType||a.includes("/chat/completions")||(a=a.replace(/\/$/,"")+"/chat/completions"),{apiKey:t,endpointUrl:a,group:s}})(M):null;return(0,a.jsxs)(en.Zp,{className:"w-full",children:[(0,a.jsxs)(en.aR,{children:[(0,a.jsxs)(en.ZB,{className:"flex items-center gap-2",children:[(0,a.jsx)(eY.A,{className:"h-5 w-5"}),"Model Credential Tester"]}),(0,a.jsx)(en.BT,{children:"Test model functionality by sending chat completion requests through the secure proxy (resolves CORS and network issues)"})]}),(0,a.jsxs)(en.Wu,{className:"space-y-6",children:[(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(N.J,{htmlFor:"model-select",children:"Select Model"}),(0,a.jsxs)(f.l6,{value:o,onValueChange:d,children:[(0,a.jsx)(f.bq,{id:"model-select",children:(0,a.jsx)(f.yv,{placeholder:"Choose a model to test..."})}),(0,a.jsx)(f.gC,{children:F.map(e=>(0,a.jsx)(f.eb,{value:e.id,children:(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)("span",{children:e.name}),(0,a.jsx)(er.E,{variant:"outline",className:"text-xs",children:e.provider}),e.is_free&&(0,a.jsx)(er.E,{variant:"secondary",className:"text-xs",children:"Free"})]})},e.id))})]}),M&&P&&(0,a.jsxs)("div",{className:"text-muted-foreground bg-muted space-y-2 rounded-md p-3 text-sm",children:[(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)(K.A,{className:"h-4 w-4"}),(0,a.jsxs)("span",{children:[(0,a.jsx)("strong",{children:"Endpoint:"})," ",P.endpointUrl]})]}),(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)(Q.A,{className:"h-4 w-4"}),(0,a.jsxs)("span",{children:[(0,a.jsx)("strong",{children:"API Key:"})," ",P.apiKey?"".concat(P.apiKey.substring(0,8),"..."):"Not configured"]}),(0,a.jsx)(er.E,{variant:P.apiKey?"default":"destructive",className:"text-xs",children:M.api_key_type||"Unknown"})]}),(0,a.jsx)("div",{children:(0,a.jsxs)("span",{children:[(0,a.jsx)("strong",{children:"Provider:"})," ",M.provider]})}),(0,a.jsx)("div",{children:(0,a.jsxs)("span",{children:[(0,a.jsx)("strong",{children:"Type:"})," ",M.modelType]})}),M.contextLength&&(0,a.jsx)("div",{children:(0,a.jsxs)("span",{children:[(0,a.jsx)("strong",{children:"Context Length:"})," ",M.contextLength.toLocaleString()]})}),!P.apiKey&&(0,a.jsxs)($.Fc,{variant:"default",className:"mt-2",children:[(0,a.jsx)(G.A,{className:"h-4 w-4"}),(0,a.jsx)($.TN,{children:"No API key configured for this model. Testing may still work if the model is free or if authentication is handled elsewhere. For models requiring authentication, please add an API key to the model or its provider group."})]})]})]}),(0,a.jsxs)("div",{className:"grid grid-cols-1 gap-4 md:grid-cols-2",children:[(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(N.J,{htmlFor:"max-tokens",children:"Max Tokens"}),(0,a.jsx)("input",{id:"max-tokens",type:"number",min:1,max:4e3,value:h,onChange:e=>g(parseInt(e.target.value)||150),className:"border-input bg-background w-full rounded-md border px-3 py-2 text-sm"})]}),(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(N.J,{htmlFor:"temperature",children:"Temperature"}),(0,a.jsx)("input",{id:"temperature",type:"number",min:0,max:2,step:.1,value:v,onChange:e=>y(parseFloat(e.target.value)||.7),className:"border-input bg-background w-full rounded-md border px-3 py-2 text-sm"})]})]}),(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(N.J,{htmlFor:"system-message",children:"System Message (Optional)"}),(0,a.jsx)(j.T,{id:"system-message",placeholder:"Enter system message...",value:c,onChange:e=>u(e.target.value),rows:2})]}),(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(N.J,{htmlFor:"user-message",children:"Test Message"}),(0,a.jsx)(j.T,{id:"user-message",placeholder:"Enter your test message...",value:m,onChange:e=>p(e.target.value),rows:3})]}),(0,a.jsx)(x.$,{onClick:S,disabled:!o||A.isPending,className:"w-full",children:A.isPending?(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(z.A,{className:"mr-2 h-4 w-4 animate-spin"}),"Testing Model..."]}):(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(eY.A,{className:"mr-2 h-4 w-4"}),"Test Model (via Proxy)"]})}),_&&(0,a.jsxs)($.Fc,{variant:"destructive",children:[(0,a.jsx)(eO.A,{className:"h-4 w-4"}),(0,a.jsxs)($.TN,{children:[(0,a.jsx)("strong",{children:"Test Failed:"})," ",_]})]}),b&&(0,a.jsxs)($.Fc,{children:[(0,a.jsx)(Z.A,{className:"h-4 w-4"}),(0,a.jsxs)($.TN,{children:[(0,a.jsx)("strong",{children:"Test Successful!"})," Model responded correctly via secure proxy."]})]}),b&&(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(N.J,{children:"Model Response"}),(0,a.jsx)("div",{className:"bg-muted rounded-md p-4",children:(0,a.jsx)("p",{className:"text-sm whitespace-pre-wrap",children:(null==(t=b.choices[0])||null==(s=t.message)?void 0:s.content)||"No content in response"})})]}),b.usage&&(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(N.J,{children:"Usage Statistics"}),(0,a.jsxs)("div",{className:"grid grid-cols-3 gap-4 text-sm",children:[(0,a.jsxs)("div",{className:"bg-muted rounded p-2 text-center",children:[(0,a.jsx)("div",{className:"font-semibold",children:b.usage.prompt_tokens}),(0,a.jsx)("div",{className:"text-muted-foreground",children:"Prompt Tokens"})]}),(0,a.jsxs)("div",{className:"bg-muted rounded p-2 text-center",children:[(0,a.jsx)("div",{className:"font-semibold",children:b.usage.completion_tokens}),(0,a.jsx)("div",{className:"text-muted-foreground",children:"Completion Tokens"})]}),(0,a.jsxs)("div",{className:"bg-muted rounded p-2 text-center",children:[(0,a.jsx)("div",{className:"font-semibold",children:b.usage.total_tokens}),(0,a.jsx)("div",{className:"text-muted-foreground",children:"Total Tokens"})]})]})]}),(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(N.J,{children:"Raw Response"}),(0,a.jsxs)("details",{className:"group",children:[(0,a.jsxs)("summary",{className:"text-muted-foreground hover:text-foreground cursor-pointer text-sm",children:[(0,a.jsx)(G.A,{className:"mr-1 inline h-4 w-4"}),"Show detailed response data"]}),(0,a.jsx)("pre",{className:"bg-muted mt-2 max-h-60 overflow-auto rounded-md p-4 text-xs",children:JSON.stringify(b,null,2)})]})]})]})]})]})}var eJ=t(4938),eQ=t(7137),eK=t(9472),eD=t(413),eG=t(9911),e$=t(4713),eV=t(9935),eB=t(8019);let eW={"chat-completions":{name:"Chat Completions",path:"/chat/completions",icon:eJ.A,description:"Test conversational AI with chat completion requests"},"vision-chat":{name:"Vision Chat (Image + Text)",path:"/chat/completions",icon:eQ.A,description:"Analyze images with text prompts using vision models"},embeddings:{name:"Embeddings",path:"/embeddings",icon:eK.A,description:"Generate embeddings for text input"},images:{name:"Image Generation",path:"/images/generations",icon:eD.A,description:"Generate images from text prompts"},"audio-speech":{name:"Text-to-Speech",path:"/audio/speech",icon:eG.A,description:"Convert text to speech audio"},"audio-transcription":{name:"Audio Transcription",path:"/audio/transcriptions",icon:e$.A,description:"Transcribe audio files to text"},models:{name:"List Models",path:"/model",icon:eK.A,description:"List all available models from the provider"}},eZ={"chat-completions":{systemMessage:"You are a helpful assistant. Please respond concisely.",userMessage:"Hello! Can you tell me what model you are and confirm that you are working correctly?",maxTokens:150,temperature:.7},"vision-chat":{systemMessage:"You are a helpful assistant that can analyze images. Please describe what you see.",userMessage:"What do you see in this image? Please provide a detailed description.",maxTokens:300,temperature:.7,imageDetail:"auto"},embeddings:{input:"The quick brown fox jumps over the lazy dog.",encoding_format:"float"},images:{prompt:"A beautiful sunset over a mountain landscape",n:1,size:"1024x1024",quality:"standard",style:"vivid"},"audio-speech":{input:"Hello, this is a test of the text-to-speech functionality.",voice:"alloy",response_format:"mp3",speed:1},"audio-transcription":{prompt:"This is a test transcription.",response_format:"json",temperature:0,language:""}};function eH(e){var s,t,l,o,d,c,u,m,p,h,v;let y,b,w,_,k,C,{models:M}=e,[A,S]=(0,r.useState)(""),[F,P]=(0,r.useState)("chat-completions"),[R,T]=(0,r.useState)(null),[I,q]=(0,r.useState)(null),[L,Y]=(0,r.useState)(eZ["chat-completions"].systemMessage),[O,U]=(0,r.useState)(eZ["chat-completions"].userMessage),[J,D]=(0,r.useState)(eZ["chat-completions"].maxTokens),[V,B]=(0,r.useState)(eZ["chat-completions"].temperature),[W,H]=(0,r.useState)(eZ["vision-chat"].systemMessage),[X,ee]=(0,r.useState)(eZ["vision-chat"].userMessage),[es,et]=(0,r.useState)(eZ["vision-chat"].maxTokens),[ea,el]=(0,r.useState)(eZ["vision-chat"].temperature),[ei,eo]=(0,r.useState)(eZ["vision-chat"].imageDetail),[ed,ec]=(0,r.useState)(null),[eu,em]=(0,r.useState)(null),[ep,eh]=(0,r.useState)(!1),[ex,eg]=(0,r.useState)(null),[ej,ev]=(0,r.useState)(null),[ef,ey]=(0,r.useState)(null),[eb,eN]=(0,r.useState)(eZ["audio-transcription"].prompt),[ew,e_]=(0,r.useState)(eZ["audio-transcription"].response_format),[ek,eC]=(0,r.useState)(eZ["audio-transcription"].temperature),[eM,eA]=(0,r.useState)(eZ["audio-transcription"].language),eS=(0,r.useRef)(null),eF=(0,r.useRef)(null),[eP,eR]=(0,r.useState)(eZ.embeddings.input),[eT,ez]=(0,r.useState)(eZ.embeddings.encoding_format),[eE,eI]=(0,r.useState)(eZ.images.prompt),[eq,eU]=(0,r.useState)(eZ.images.n),[eJ,eQ]=(0,r.useState)(eZ.images.size),[eH,eX]=(0,r.useState)(eZ.images.quality),[e0,e2]=(0,r.useState)(eZ.images.style),[e4,e1]=(0,r.useState)(eZ["audio-speech"].input),[e5,e3]=(0,r.useState)(eZ["audio-speech"].voice),[e6,e9]=(0,r.useState)(eZ["audio-speech"].response_format),[e8,e7]=(0,r.useState)(eZ["audio-speech"].speed),{data:se=[]}=(0,i.I)({queryKey:["model-groups"],queryFn:()=>eL.getModelGroups(),refetchOnWindowFocus:!1}),ss=M.find(e=>e.id===A),st=e=>{var s;let t=null==(s=e.target.files)?void 0:s[0];t&&(t.type.startsWith("image/")?(ec(t),em(URL.createObjectURL(t))):E.oR.error("Please select a valid image file"))},sa=e=>{var s;let t=null==(s=e.target.files)?void 0:s[0];t&&(t.type.startsWith("audio/")?(eg(t),ev(URL.createObjectURL(t))):E.oR.error("Please select a valid audio file"))},sr=async()=>{try{let e=await navigator.mediaDevices.getUserMedia({audio:!0}),s=new MediaRecorder(e),t=[];s.ondataavailable=e=>{e.data.size>0&&t.push(e.data)},s.onstop=()=>{let s=new Blob(t,{type:"audio/webm"}),a=new File([s],"recording.webm",{type:"audio/webm"});eg(a);let r=URL.createObjectURL(s);ev(r),e.getTracks().forEach(e=>e.stop())},s.start(),ey(s),eh(!0),E.oR.success("Recording started")}catch(e){console.error("Error starting recording:",e),E.oR.error("Failed to start recording. Please check microphone permissions.")}},sl=()=>{ef&&(ef.stop(),ey(null),eh(!1),E.oR.success("Recording stopped"))},si=e=>new Promise((s,t)=>{let a=new FileReader;a.readAsDataURL(e),a.onload=()=>s(a.result),a.onerror=e=>t(e)}),sn=async()=>{if(!ss)return null;switch(F){case"chat-completions":let e=[];return L.trim()&&e.push({role:"system",content:L.trim()}),e.push({role:"user",content:O.trim()}),{model:ss.name,messages:e,max_tokens:J,temperature:V};case"vision-chat":if(!ed)throw Error("Please select an image for vision analysis");let s=await si(ed),t=[];return W.trim()&&t.push({role:"system",content:W.trim()}),t.push({role:"user",content:[{type:"text",text:X.trim()},{type:"image_url",image_url:{url:s,detail:ei}}]}),{model:ss.name,messages:t,max_tokens:es,temperature:ea};case"embeddings":return{model:ss.name,input:eP,encoding_format:eT};case"images":return{model:ss.name,prompt:eE,n:eq,size:eJ,quality:eH,style:e0};case"audio-speech":return{model:ss.name,input:e4,voice:e5,response_format:e6,speed:e8};case"audio-transcription":if(!ex)throw Error("Please record or upload an audio file for transcription");return{model:ss.name,file:ex,prompt:eb.trim()||void 0,response_format:ew,temperature:ek,language:eM.trim()||void 0};default:return null}},so=(0,n.n)({mutationFn:async e=>{if(!ss)throw Error("No model selected");q(null),T(null);try{console.log("Testing endpoint via proxy: ".concat(F)),console.log("Request payload:",e);let s=await eL.testModel(ss.id,F,e);if(!s.success)throw Error(s.error||"Test failed");return s.data}catch(e){throw console.error("API endpoint test error via proxy:",e),Error(e instanceof Error?e.message:"Failed to test endpoint via proxy")}},onSuccess:e=>{T(e),E.oR.success("".concat(eW[F].name," test completed successfully!"))},onError:e=>{let s=(null==e?void 0:e.message)||"Unknown error occurred";q(s),E.oR.error("".concat(eW[F].name," test failed: ").concat(s))}}),sd=async()=>{if(!ss)return void E.oR.error("Please select a model to test");if("chat-completions"===F&&!O.trim())return void E.oR.error("Please enter a test message");if("vision-chat"===F){if(!X.trim())return void E.oR.error("Please enter a test message");if(!ed)return void E.oR.error("Please select an image for vision analysis")}if("embeddings"===F&&!eP.trim())return void E.oR.error("Please enter text for embedding");if("images"===F&&!eE.trim())return void E.oR.error("Please enter an image prompt");if("audio-speech"===F&&!e4.trim())return void E.oR.error("Please enter text for speech synthesis");if("audio-transcription"===F&&!ex)return void E.oR.error("Please record or upload an audio file for transcription");let e=await sn();so.mutate(e)},sc=M.filter(e=>e.isEnabled),su=ss?(e=>{let s=se.find(s=>s.provider===e.provider),t=e.api_key||(null==s?void 0:s.group_api_key),a=e.url;return e.url.startsWith("/")&&(null==s?void 0:s.group_url)&&(a="".concat(s.group_url.replace(/\/$/,"")).concat(e.url)),{apiKey:t,baseUrl:a=a.replace(/\/v1\/.*$/,"").replace(/\/$/,""),group:s}})(ss):null,sm=su?(k=su.baseUrl,C=eW[F].path,"".concat(k).concat(C)):"";return(0,a.jsxs)(en.Zp,{className:"w-full",children:[(0,a.jsxs)(en.aR,{children:[(0,a.jsxs)(en.ZB,{className:"flex items-center gap-2",children:[(0,a.jsx)(eY.A,{className:"h-5 w-5"}),"API Endpoint Tester"]}),(0,a.jsx)(en.BT,{children:"Comprehensive testing of OpenAI-compatible API endpoints through the secure proxy (resolves CORS and network issues)"})]}),(0,a.jsxs)(en.Wu,{className:"space-y-6",children:[(0,a.jsxs)("div",{className:"grid grid-cols-1 gap-4 md:grid-cols-2",children:[(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(N.J,{htmlFor:"model-select",children:"Select Model"}),(0,a.jsxs)(f.l6,{value:A,onValueChange:S,children:[(0,a.jsx)(f.bq,{id:"model-select",children:(0,a.jsx)(f.yv,{placeholder:"Choose a model to test..."})}),(0,a.jsx)(f.gC,{children:sc.map(e=>(0,a.jsx)(f.eb,{value:e.id,children:(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)("span",{children:e.name}),(0,a.jsx)(er.E,{variant:"outline",className:"text-xs",children:e.provider}),e.is_free&&(0,a.jsx)(er.E,{variant:"secondary",className:"text-xs",children:"Free"})]})},e.id))})]})]}),(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(N.J,{htmlFor:"endpoint-select",children:"API Endpoint"}),(0,a.jsxs)(f.l6,{value:F,onValueChange:e=>P(e),children:[(0,a.jsx)(f.bq,{id:"endpoint-select",children:(0,a.jsx)(f.yv,{})}),(0,a.jsx)(f.gC,{children:Object.entries(eW).map(e=>{let[s,t]=e,r=t.icon;return(0,a.jsx)(f.eb,{value:s,children:(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)(r,{className:"h-4 w-4"}),(0,a.jsx)("span",{children:t.name})]})},s)})})]})]})]}),ss&&su&&(0,a.jsxs)("div",{className:"text-muted-foreground bg-muted space-y-2 rounded-md p-3 text-sm",children:[(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)(K.A,{className:"h-4 w-4"}),(0,a.jsxs)("span",{children:[(0,a.jsx)("strong",{children:"Endpoint:"})," ",sm]})]}),(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)(Q.A,{className:"h-4 w-4"}),(0,a.jsxs)("span",{children:[(0,a.jsx)("strong",{children:"API Key:"})," ",su.apiKey?"".concat(su.apiKey.substring(0,8),"..."):"Not configured"]}),(0,a.jsx)(er.E,{variant:su.apiKey?"default":"destructive",className:"text-xs",children:ss.api_key_type||"Unknown"})]}),(0,a.jsx)("div",{children:(0,a.jsxs)("span",{children:[(0,a.jsx)("strong",{children:"Provider:"})," ",ss.provider]})}),(0,a.jsx)("div",{children:(0,a.jsxs)("span",{children:[(0,a.jsx)("strong",{children:"Description:"})," ",eW[F].description]})}),!su.apiKey&&(0,a.jsxs)($.Fc,{variant:"default",className:"mt-2",children:[(0,a.jsx)(G.A,{className:"h-4 w-4"}),(0,a.jsx)($.TN,{children:"No API key configured for this model. Testing may still work if the model is free or if authentication is handled elsewhere. For models requiring authentication, please add an API key to the model or its provider group."})]})]}),(()=>{switch(F){case"chat-completions":return(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsxs)("div",{className:"grid grid-cols-1 gap-4 md:grid-cols-2",children:[(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(N.J,{htmlFor:"max-tokens",children:"Max Tokens"}),(0,a.jsx)(g.p,{id:"max-tokens",type:"number",min:1,max:4e3,value:J,onChange:e=>D(parseInt(e.target.value)||150)})]}),(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(N.J,{htmlFor:"temperature",children:"Temperature"}),(0,a.jsx)(g.p,{id:"temperature",type:"number",min:0,max:2,step:.1,value:V,onChange:e=>B(parseFloat(e.target.value)||.7)})]})]}),(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(N.J,{htmlFor:"system-message",children:"System Message (Optional)"}),(0,a.jsx)(j.T,{id:"system-message",placeholder:"Enter system message...",value:L,onChange:e=>Y(e.target.value),rows:2})]}),(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(N.J,{htmlFor:"user-message",children:"Test Message"}),(0,a.jsx)(j.T,{id:"user-message",placeholder:"Enter your test message...",value:O,onChange:e=>U(e.target.value),rows:3})]})]});case"vision-chat":return(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsxs)("div",{className:"grid grid-cols-1 gap-4 md:grid-cols-2",children:[(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(N.J,{htmlFor:"vision-max-tokens",children:"Max Tokens"}),(0,a.jsx)(g.p,{id:"vision-max-tokens",type:"number",min:1,max:4e3,value:es,onChange:e=>et(parseInt(e.target.value)||300)})]}),(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(N.J,{htmlFor:"vision-temperature",children:"Temperature"}),(0,a.jsx)(g.p,{id:"vision-temperature",type:"number",min:0,max:2,step:.1,value:ea,onChange:e=>el(parseFloat(e.target.value)||.7)})]})]}),(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(N.J,{htmlFor:"vision-system-message",children:"System Message (Optional)"}),(0,a.jsx)(j.T,{id:"vision-system-message",placeholder:"Enter system message...",value:W,onChange:e=>H(e.target.value),rows:2})]}),(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(N.J,{htmlFor:"vision-user-message",children:"Test Message"}),(0,a.jsx)(j.T,{id:"vision-user-message",placeholder:"Enter your test message...",value:X,onChange:e=>ee(e.target.value),rows:3})]}),(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(N.J,{htmlFor:"image-detail",children:"Image Detail"}),(0,a.jsxs)(f.l6,{value:ei,onValueChange:e=>eo(e),children:[(0,a.jsx)(f.bq,{children:(0,a.jsx)(f.yv,{})}),(0,a.jsxs)(f.gC,{children:[(0,a.jsx)(f.eb,{value:"low",children:"Low"}),(0,a.jsx)(f.eb,{value:"high",children:"High"}),(0,a.jsx)(f.eb,{value:"auto",children:"Auto"})]})]})]}),(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(N.J,{htmlFor:"image-upload",children:"Upload Image (Optional)"}),(0,a.jsx)(g.p,{type:"file",accept:"image/*",onChange:st,ref:eS,className:"file:mr-4 file:rounded-full file:border-0 file:bg-blue-50 file:px-4 file:py-2 file:text-sm file:font-semibold file:text-blue-700 hover:file:bg-blue-100"}),ed&&(0,a.jsxs)("div",{className:"mt-2 flex items-center gap-2",children:[(0,a.jsx)(eD.A,{className:"h-5 w-5 text-blue-500"}),(0,a.jsxs)("span",{className:"text-muted-foreground text-sm",children:["Selected image: ",ed.name]}),(0,a.jsx)(x.$,{variant:"outline",size:"sm",onClick:()=>ec(null),className:"ml-auto",children:"Remove"})]}),eu&&(0,a.jsx)("div",{className:"relative mt-2 aspect-square w-32 overflow-hidden rounded-md border",children:(0,a.jsx)(eB.default,{src:eu,alt:"Image preview",fill:!0,className:"object-cover"})})]})]});case"embeddings":return(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(N.J,{htmlFor:"encoding-format",children:"Encoding Format"}),(0,a.jsxs)(f.l6,{value:eT,onValueChange:e=>ez(e),children:[(0,a.jsx)(f.bq,{children:(0,a.jsx)(f.yv,{})}),(0,a.jsxs)(f.gC,{children:[(0,a.jsx)(f.eb,{value:"float",children:"Float"}),(0,a.jsx)(f.eb,{value:"base64",children:"Base64"})]})]})]}),(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(N.J,{htmlFor:"embedding-input",children:"Text Input"}),(0,a.jsx)(j.T,{id:"embedding-input",placeholder:"Enter text to generate embeddings for...",value:eP,onChange:e=>eR(e.target.value),rows:4})]})]});case"images":return(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsxs)("div",{className:"grid grid-cols-1 gap-4 md:grid-cols-2 lg:grid-cols-3",children:[(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(N.J,{htmlFor:"image-count",children:"Number of Images"}),(0,a.jsx)(g.p,{id:"image-count",type:"number",min:1,max:10,value:eq,onChange:e=>eU(parseInt(e.target.value)||1)})]}),(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(N.J,{htmlFor:"image-size",children:"Size"}),(0,a.jsxs)(f.l6,{value:eJ,onValueChange:e=>eQ(e),children:[(0,a.jsx)(f.bq,{children:(0,a.jsx)(f.yv,{})}),(0,a.jsxs)(f.gC,{children:[(0,a.jsx)(f.eb,{value:"256x256",children:"256x256"}),(0,a.jsx)(f.eb,{value:"512x512",children:"512x512"}),(0,a.jsx)(f.eb,{value:"1024x1024",children:"1024x1024"}),(0,a.jsx)(f.eb,{value:"1792x1024",children:"1792x1024"}),(0,a.jsx)(f.eb,{value:"1024x1792",children:"1024x1792"})]})]})]}),(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(N.J,{htmlFor:"image-quality",children:"Quality"}),(0,a.jsxs)(f.l6,{value:eH,onValueChange:e=>eX(e),children:[(0,a.jsx)(f.bq,{children:(0,a.jsx)(f.yv,{})}),(0,a.jsxs)(f.gC,{children:[(0,a.jsx)(f.eb,{value:"standard",children:"Standard"}),(0,a.jsx)(f.eb,{value:"hd",children:"HD"})]})]})]})]}),(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(N.J,{htmlFor:"image-style",children:"Style"}),(0,a.jsxs)(f.l6,{value:e0,onValueChange:e=>e2(e),children:[(0,a.jsx)(f.bq,{children:(0,a.jsx)(f.yv,{})}),(0,a.jsxs)(f.gC,{children:[(0,a.jsx)(f.eb,{value:"vivid",children:"Vivid"}),(0,a.jsx)(f.eb,{value:"natural",children:"Natural"})]})]})]}),(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(N.J,{htmlFor:"image-prompt",children:"Image Prompt"}),(0,a.jsx)(j.T,{id:"image-prompt",placeholder:"Describe the image you want to generate...",value:eE,onChange:e=>eI(e.target.value),rows:3})]})]});case"audio-speech":return(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsxs)("div",{className:"grid grid-cols-1 gap-4 md:grid-cols-3",children:[(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(N.J,{htmlFor:"speech-voice",children:"Voice"}),(0,a.jsxs)(f.l6,{value:e5,onValueChange:e=>e3(e),children:[(0,a.jsx)(f.bq,{children:(0,a.jsx)(f.yv,{})}),(0,a.jsxs)(f.gC,{children:[(0,a.jsx)(f.eb,{value:"alloy",children:"Alloy"}),(0,a.jsx)(f.eb,{value:"echo",children:"Echo"}),(0,a.jsx)(f.eb,{value:"fable",children:"Fable"}),(0,a.jsx)(f.eb,{value:"onyx",children:"Onyx"}),(0,a.jsx)(f.eb,{value:"nova",children:"Nova"}),(0,a.jsx)(f.eb,{value:"shimmer",children:"Shimmer"})]})]})]}),(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(N.J,{htmlFor:"speech-format",children:"Response Format"}),(0,a.jsxs)(f.l6,{value:e6,onValueChange:e=>e9(e),children:[(0,a.jsx)(f.bq,{children:(0,a.jsx)(f.yv,{})}),(0,a.jsxs)(f.gC,{children:[(0,a.jsx)(f.eb,{value:"mp3",children:"MP3"}),(0,a.jsx)(f.eb,{value:"opus",children:"Opus"}),(0,a.jsx)(f.eb,{value:"aac",children:"AAC"}),(0,a.jsx)(f.eb,{value:"flac",children:"FLAC"}),(0,a.jsx)(f.eb,{value:"wav",children:"WAV"}),(0,a.jsx)(f.eb,{value:"pcm",children:"PCM"})]})]})]}),(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(N.J,{htmlFor:"speech-speed",children:"Speed"}),(0,a.jsx)(g.p,{id:"speech-speed",type:"number",min:.25,max:4,step:.25,value:e8,onChange:e=>e7(parseFloat(e.target.value)||1)})]})]}),(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(N.J,{htmlFor:"speech-input",children:"Text to Synthesize"}),(0,a.jsx)(j.T,{id:"speech-input",placeholder:"Enter text to convert to speech...",value:e4,onChange:e=>e1(e.target.value),rows:4})]})]});case"audio-transcription":return(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsxs)("div",{className:"grid grid-cols-1 gap-4 md:grid-cols-2",children:[(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(N.J,{htmlFor:"audio-transcription-prompt",children:"Prompt (Optional)"}),(0,a.jsx)(j.T,{id:"audio-transcription-prompt",placeholder:"Enter a prompt for the transcription...",value:eb,onChange:e=>eN(e.target.value),rows:2})]}),(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(N.J,{htmlFor:"audio-transcription-temperature",children:"Temperature"}),(0,a.jsx)(g.p,{id:"audio-transcription-temperature",type:"number",min:0,max:1,step:.1,value:ek,onChange:e=>eC(parseFloat(e.target.value)||0)})]})]}),(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(N.J,{htmlFor:"audio-transcription-language",children:"Language (Optional)"}),(0,a.jsx)(g.p,{id:"audio-transcription-language",placeholder:"e.g., en-US, fr-FR",value:eM,onChange:e=>eA(e.target.value)})]}),(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(N.J,{htmlFor:"audio-transcription-response-format",children:"Response Format"}),(0,a.jsxs)(f.l6,{value:ew,onValueChange:e=>e_(e),children:[(0,a.jsx)(f.bq,{children:(0,a.jsx)(f.yv,{})}),(0,a.jsxs)(f.gC,{children:[(0,a.jsx)(f.eb,{value:"json",children:"JSON"}),(0,a.jsx)(f.eb,{value:"text",children:"Text"}),(0,a.jsx)(f.eb,{value:"srt",children:"SRT"}),(0,a.jsx)(f.eb,{value:"verbose_json",children:"Verbose JSON"}),(0,a.jsx)(f.eb,{value:"vtt",children:"VTT"})]})]})]}),(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(N.J,{children:"Voice Recording"}),(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)(x.$,{type:"button",variant:ep?"destructive":"default",size:"sm",onClick:ep?sl:sr,className:"flex items-center gap-2",children:ep?(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(eV.A,{className:"h-4 w-4"}),"Stop Recording"]}):(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(eG.A,{className:"h-4 w-4"}),"Start Recording"]})}),ep&&(0,a.jsxs)("div",{className:"flex items-center gap-2 text-red-600",children:[(0,a.jsx)("div",{className:"h-2 w-2 animate-pulse rounded-full bg-red-600"}),(0,a.jsx)("span",{className:"text-sm",children:"Recording..."})]})]})]}),(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(N.J,{htmlFor:"audio-transcription-upload",children:"Or Upload Audio File"}),(0,a.jsx)(g.p,{type:"file",accept:"audio/*",onChange:sa,ref:eF,className:"file:mr-4 file:rounded-full file:border-0 file:bg-blue-50 file:px-4 file:py-2 file:text-sm file:font-semibold file:text-blue-700 hover:file:bg-blue-100"}),ex&&(0,a.jsxs)("div",{className:"mt-2 flex items-center gap-2",children:[(0,a.jsx)(e$.A,{className:"h-5 w-5 text-blue-500"}),(0,a.jsxs)("span",{className:"text-muted-foreground text-sm",children:["Selected audio: ",ex.name]}),(0,a.jsx)(x.$,{variant:"outline",size:"sm",onClick:()=>{eg(null),ev(null)},className:"ml-auto",children:"Remove"})]}),ej&&(0,a.jsx)("div",{className:"bg-muted mt-2 rounded-md p-4",children:(0,a.jsx)("audio",{controls:!0,src:ej,className:"w-full",children:"Your browser does not support the audio element."})})]})]})]});case"models":return(0,a.jsx)("div",{className:"space-y-4",children:(0,a.jsxs)($.Fc,{children:[(0,a.jsx)(eK.A,{className:"h-4 w-4"}),(0,a.jsx)($.TN,{children:"This endpoint lists all available models from the provider. No additional parameters are required."})]})});default:return null}})(),(0,a.jsx)(x.$,{onClick:sd,disabled:!A||so.isPending,className:"w-full",children:so.isPending?(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(z.A,{className:"mr-2 h-4 w-4 animate-spin"}),"Testing ",eW[F].name,"..."]}):(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(eY.A,{className:"mr-2 h-4 w-4"}),"Test ",eW[F].name]})}),I&&(0,a.jsxs)($.Fc,{variant:"destructive",children:[(0,a.jsx)(eO.A,{className:"h-4 w-4"}),(0,a.jsxs)($.TN,{children:[(0,a.jsx)("strong",{children:"Test Failed:"})," ",I]})]}),R&&(0,a.jsxs)($.Fc,{children:[(0,a.jsx)(Z.A,{className:"h-4 w-4"}),(0,a.jsxs)($.TN,{children:[(0,a.jsx)("strong",{children:"Test Successful!"})," ",eW[F].name," endpoint responded correctly."]})]}),R&&(R?"type"in(y=R)&&"audio"===y.type?(0,a.jsx)("div",{className:"space-y-4",children:(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(N.J,{children:"Generated Audio"}),(0,a.jsxs)("div",{className:"bg-muted rounded-md p-4",children:[(0,a.jsx)("audio",{controls:!0,src:R.url,className:"w-full",children:"Your browser does not support the audio element."}),(0,a.jsxs)("p",{className:"text-muted-foreground mt-2 text-sm",children:["Audio file size: ",(R.size/1024).toFixed(2)," KB"]})]})]})}):"text"in R?(0,a.jsx)("div",{className:"space-y-4",children:(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(N.J,{children:"Transcription Result"}),(0,a.jsx)("div",{className:"bg-muted rounded-md p-4",children:(0,a.jsx)("p",{className:"text-sm whitespace-pre-wrap",children:R.text||"No transcription result available"})})]})}):"choices"in R?(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(N.J,{children:"Model Response"}),(0,a.jsx)("div",{className:"bg-muted rounded-md p-4",children:(0,a.jsx)("p",{className:"text-sm whitespace-pre-wrap",children:(null==(l=R.choices)||null==(t=l[0])||null==(s=t.message)?void 0:s.content)||"No content in response"})})]}),R.usage&&(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(N.J,{children:"Usage Statistics"}),(0,a.jsxs)("div",{className:"grid grid-cols-3 gap-4 text-sm",children:[(0,a.jsxs)("div",{className:"bg-muted rounded p-2 text-center",children:[(0,a.jsx)("div",{className:"font-semibold",children:R.usage.prompt_tokens}),(0,a.jsx)("div",{className:"text-muted-foreground",children:"Prompt Tokens"})]}),(0,a.jsxs)("div",{className:"bg-muted rounded p-2 text-center",children:[(0,a.jsx)("div",{className:"font-semibold",children:R.usage.completion_tokens}),(0,a.jsx)("div",{className:"text-muted-foreground",children:"Completion Tokens"})]}),(0,a.jsxs)("div",{className:"bg-muted rounded p-2 text-center",children:[(0,a.jsx)("div",{className:"font-semibold",children:R.usage.total_tokens}),(0,a.jsx)("div",{className:"text-muted-foreground",children:"Total Tokens"})]})]})]})]}):"data"in(b=R)&&Array.isArray(b.data)&&b.data.length>0&&"embedding"in b.data[0]?(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(N.J,{children:"Embedding Vector"}),(0,a.jsxs)("div",{className:"bg-muted rounded-md p-4",children:[(0,a.jsxs)("p",{className:"text-muted-foreground mb-2 text-sm",children:["Generated ",(null==(c=R.data)||null==(d=c[0])||null==(o=d.embedding)?void 0:o.length)||0," ","dimensional embedding vector"]}),(0,a.jsxs)("details",{className:"group",children:[(0,a.jsx)("summary",{className:"hover:text-foreground cursor-pointer text-sm",children:"Show first 10 values"}),(0,a.jsxs)("pre",{className:"mt-2 text-xs",children:[JSON.stringify(null==(p=R.data)||null==(m=p[0])||null==(u=m.embedding)?void 0:u.slice(0,10),null,2),"..."]})]})]})]}),R.usage&&(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(N.J,{children:"Usage Statistics"}),(0,a.jsxs)("div",{className:"bg-muted rounded p-2 text-center text-sm",children:[(0,a.jsx)("div",{className:"font-semibold",children:R.usage.total_tokens}),(0,a.jsx)("div",{className:"text-muted-foreground",children:"Total Tokens"})]})]})]}):"data"in(w=R)&&Array.isArray(w.data)&&w.data.length>0&&"url"in w.data[0]?(0,a.jsx)("div",{className:"space-y-4",children:(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(N.J,{children:"Generated Images"}),(0,a.jsx)("div",{className:"grid grid-cols-1 gap-4 md:grid-cols-2",children:null==(h=R.data)?void 0:h.map((e,s)=>(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)("div",{className:"relative aspect-square w-full",children:(0,a.jsx)(eB.default,{src:e.url,alt:"Generated image ".concat(s+1),fill:!0,className:"rounded-md border object-cover",unoptimized:!0})}),e.revised_prompt&&(0,a.jsxs)("p",{className:"text-muted-foreground text-xs",children:["Revised prompt: ",e.revised_prompt]})]},s))})]})}):"data"in(_=R)&&Array.isArray(_.data)&&_.data.length>0&&"id"in _.data[0]?(0,a.jsx)("div",{className:"space-y-4",children:(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(N.J,{children:"Available Models"}),(0,a.jsx)("div",{className:"max-h-60 overflow-auto",children:(0,a.jsx)("div",{className:"grid gap-2",children:null==(v=R.data)?void 0:v.map(e=>(0,a.jsxs)("div",{className:"bg-muted rounded-md p-3",children:[(0,a.jsx)("div",{className:"font-medium",children:e.id}),e.object&&(0,a.jsxs)("div",{className:"text-muted-foreground text-sm",children:["Type: ",e.object]}),e.created&&(0,a.jsxs)("div",{className:"text-muted-foreground text-sm",children:["Created:"," ",new Date(1e3*e.created).toLocaleDateString()]})]},e.id))})})]})}):null:null),R&&(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(N.J,{children:"Raw Response"}),(0,a.jsxs)("details",{className:"group",children:[(0,a.jsxs)("summary",{className:"text-muted-foreground hover:text-foreground cursor-pointer text-sm",children:[(0,a.jsx)(G.A,{className:"mr-1 inline h-4 w-4"}),"Show detailed response data"]}),(0,a.jsx)("pre",{className:"bg-muted mt-2 max-h-60 overflow-auto rounded-md p-4 text-xs",children:JSON.stringify(R,null,2)})]})]})]})]})}var eX=t(953),e0=t(7569),e2=t(4756),e4=t(6839);function e1(){let{data:e,isLoading:s,error:t}=(0,i.I)({queryKey:["admin-models-with-providers"],queryFn:()=>o.zQ.getModelsWithProviders(),refetchOnWindowFocus:!1}),{models:l=[],groups:n=[]}=e||{},d=(0,r.useMemo)(()=>l?l.reduce((e,s)=>{let t=s.provider;return e[t]||(e[t]=[]),e[t].push(s),e},{}):{},[l]),c=(0,r.useMemo)(()=>new Map(n.map(e=>[e.provider,e])),[n]),u=(0,r.useMemo)(()=>Object.entries(d).map(e=>{let[s,t]=e,a=c.get(s);return{provider:s,activeModels:t.filter(e=>!e.soft_deleted).length,totalModels:t.length,groupData:a,hasGroupUrl:!!(null==a?void 0:a.group_url),hasGroupApiKey:!!(null==a?void 0:a.group_api_key)}}),[d,c]);return(0,a.jsxs)(eX.SidebarProvider,{children:[(0,a.jsx)(e0.AppSidebar,{variant:"inset"}),(0,a.jsxs)(eX.SidebarInset,{children:[(0,a.jsx)(e2.SiteHeader,{}),(0,a.jsx)("div",{className:"flex flex-1 flex-col",children:(0,a.jsxs)("div",{className:"@container/main flex flex-1 flex-col gap-4 p-4 md:gap-8 md:p-8",children:[(0,a.jsx)("div",{className:"mb-6 flex items-center justify-between",children:(0,a.jsx)("h1",{className:"text-2xl font-bold tracking-tight",children:"Model Management & API Testing"})}),(0,a.jsxs)(e4.tU,{defaultValue:"manage",className:"w-full",children:[(0,a.jsx)(e4.j7,{className:"grid w-full grid-cols-3",children:(0,a.jsx)(e4.Xi,{value:"manage",children:"Manage Models"})}),(0,a.jsxs)(e4.av,{value:"manage",className:"space-y-4",children:[(0,a.jsx)("div",{className:"text-muted-foreground text-sm",children:"Manage your AI models organized by provider groups. Configure API keys, and organize models by provider groups."}),s?(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsx)(eo.E,{className:"h-[60px] w-full"}),(0,a.jsx)(eo.E,{className:"h-[400px] w-full"})]}):t?(0,a.jsxs)($.Fc,{variant:"destructive",children:[(0,a.jsx)(W.A,{className:"h-4 w-4"}),(0,a.jsx)($.TN,{children:"Failed to load models. Please try refreshing the page."})]}):(0,a.jsx)(e4.tU,{defaultValue:"all",className:"w-full",children:(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsx)("div",{className:"rounded-lg border p-1",children:(0,a.jsxs)(e4.j7,{className:"grid w-full max-w-full auto-cols-fr grid-flow-col overflow-x-auto",children:[(0,a.jsxs)(e4.Xi,{value:"all",className:"flex items-center gap-2",children:[(0,a.jsx)(K.A,{className:"h-4 w-4"}),"All Models",(0,a.jsx)(er.E,{variant:"secondary",className:"ml-1",children:l.length})]}),u.map(e=>{let{provider:s,activeModels:t,totalModels:r}=e;return(0,a.jsxs)(e4.Xi,{value:s,className:"flex min-w-fit items-center gap-2",children:[(0,a.jsx)(J.A,{className:"h-4 w-4"}),s,(0,a.jsx)("div",{className:"flex items-center gap-1",children:(0,a.jsxs)(er.E,{variant:"secondary",className:"ml-1",children:[t,"/",r]})})]},s)})]})}),(0,a.jsx)(e4.av,{value:"all",children:(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsx)("div",{className:"text-muted-foreground text-sm",children:"Overview of all models across all provider groups."}),(0,a.jsx)(ez,{})]})}),Object.entries(d).map(e=>{let[s,t]=e,r=c.get(s);return(0,a.jsx)(e4.av,{value:s,children:(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsx)("div",{className:"flex items-center justify-between",children:(0,a.jsxs)("div",{children:[(0,a.jsxs)("h3",{className:"flex items-center gap-2 text-lg font-semibold",children:[(0,a.jsx)(J.A,{className:"h-5 w-5"}),s]}),(0,a.jsxs)("div",{className:"text-muted-foreground flex items-center gap-4 text-sm",children:[t.filter(e=>e.soft_deleted).length>0&&(0,a.jsxs)("span",{className:"text-orange-600",children:[t.filter(e=>e.soft_deleted).length," ","soft deleted"]}),(null==r?void 0:r.group_url)&&(0,a.jsxs)("span",{className:"flex items-center gap-1",children:[(0,a.jsx)(K.A,{className:"h-3 w-3"}),r.group_url]})]})]})}),(0,a.jsx)(ez,{filterProvider:s,groupData:r,showProviderActions:!0})]})},s)})]})})]}),(0,a.jsxs)(e4.av,{value:"test-basic",className:"space-y-4",children:[(0,a.jsx)("div",{className:"text-muted-foreground text-sm",children:"Test model credentials and connectivity with basic chat completion requests through the secure proxy (resolves CORS and Docker network issues). Models can be tested even without API keys configured (useful for free models or when authentication is handled elsewhere)."}),s?(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsx)(eo.E,{className:"h-[200px] w-full"}),(0,a.jsx)(eo.E,{className:"h-[100px] w-full"})]}):t?(0,a.jsxs)($.Fc,{variant:"destructive",children:[(0,a.jsx)(W.A,{className:"h-4 w-4"}),(0,a.jsx)($.TN,{children:"Failed to load models for testing. Please try refreshing the page."})]}):(0,a.jsx)(eU,{models:l})]}),(0,a.jsxs)(e4.av,{value:"test-api",className:"space-y-4",children:[(0,a.jsx)("div",{className:"text-muted-foreground text-sm",children:"Comprehensive testing of all OpenAI API endpoints including chat completions, embeddings, image generation, audio synthesis, and model listing through the secure proxy (resolves CORS and Docker network issues). Models can be tested with or without API keys configured."}),s?(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsx)(eo.E,{className:"h-[300px] w-full"}),(0,a.jsx)(eo.E,{className:"h-[200px] w-full"})]}):t?(0,a.jsxs)($.Fc,{variant:"destructive",children:[(0,a.jsx)(W.A,{className:"h-4 w-4"}),(0,a.jsx)($.TN,{children:"Failed to load models for API testing. Please try refreshing the page."})]}):(0,a.jsx)(eH,{models:l})]})]})]})})]})]})}}},e=>{var s=s=>e(e.s=s);e.O(0,[363,222,808,29,730,978,481,982,938,236,255,945,497,358],()=>s(6715)),_N_E=e.O()}]);
\ No newline at end of file
diff --git a/ui_out/_next/static/chunks/app/model/page-ffdaf3929a2720ec.js b/ui_out/_next/static/chunks/app/model/page-ffdaf3929a2720ec.js
new file mode 100644
index 00000000..4226e4fc
--- /dev/null
+++ b/ui_out/_next/static/chunks/app/model/page-ffdaf3929a2720ec.js
@@ -0,0 +1 @@
+(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[552],{834:(e,s,t)=>{"use strict";t.d(s,{T:()=>l});var a=t(3422);t(4398);var r=t(9183);function l(e){let{className:s,...t}=e;return(0,a.jsx)("textarea",{"data-slot":"textarea",className:(0,r.cn)("border-input placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 flex field-sizing-content min-h-16 w-full rounded-md border bg-transparent px-3 py-2 text-base shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 md:text-sm",s),...t})}},2264:(e,s,t)=>{"use strict";t.d(s,{bq:()=>u,eb:()=>p,gC:()=>m,l6:()=>d,yv:()=>c});var a=t(3422);t(4398);var r=t(3439),l=t(9994),i=t(8940),n=t(4967),o=t(9183);function d(e){let{...s}=e;return(0,a.jsx)(r.bL,{"data-slot":"select",...s})}function c(e){let{...s}=e;return(0,a.jsx)(r.WT,{"data-slot":"select-value",...s})}function u(e){let{className:s,size:t="default",children:i,...n}=e;return(0,a.jsxs)(r.l9,{"data-slot":"select-trigger","data-size":t,className:(0,o.cn)("border-input data-[placeholder]:text-muted-foreground [&_svg:not([class*='text-'])]:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 dark:hover:bg-input/50 flex w-fit items-center justify-between gap-2 rounded-md border bg-transparent px-3 py-2 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",s),...n,children:[i,(0,a.jsx)(r.In,{asChild:!0,children:(0,a.jsx)(l.A,{className:"size-4 opacity-50"})})]})}function m(e){let{className:s,children:t,position:l="popper",...i}=e;return(0,a.jsx)(r.ZL,{children:(0,a.jsxs)(r.UC,{"data-slot":"select-content",className:(0,o.cn)("bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 relative z-50 max-h-(--radix-select-content-available-height) min-w-[8rem] origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border shadow-md","popper"===l&&"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",s),position:l,...i,children:[(0,a.jsx)(h,{}),(0,a.jsx)(r.LM,{className:(0,o.cn)("p-1","popper"===l&&"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1"),children:t}),(0,a.jsx)(x,{})]})})}function p(e){let{className:s,children:t,...l}=e;return(0,a.jsxs)(r.q7,{"data-slot":"select-item",className:(0,o.cn)("focus:bg-accent focus:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2",s),...l,children:[(0,a.jsx)("span",{className:"absolute right-2 flex size-3.5 items-center justify-center",children:(0,a.jsx)(r.VF,{children:(0,a.jsx)(i.A,{className:"size-4"})})}),(0,a.jsx)(r.p4,{children:t})]})}function h(e){let{className:s,...t}=e;return(0,a.jsx)(r.PP,{"data-slot":"select-scroll-up-button",className:(0,o.cn)("flex cursor-default items-center justify-center py-1",s),...t,children:(0,a.jsx)(n.A,{className:"size-4"})})}function x(e){let{className:s,...t}=e;return(0,a.jsx)(r.wn,{"data-slot":"select-scroll-down-button",className:(0,o.cn)("flex cursor-default items-center justify-center py-1",s),...t,children:(0,a.jsx)(l.A,{className:"size-4"})})}},6320:(e,s,t)=>{"use strict";t.d(s,{Cf:()=>u,Es:()=>p,L3:()=>h,c7:()=>m,lG:()=>n,rr:()=>x,zM:()=>o});var a=t(3422);t(4398);var r=t(4316),l=t(9680),i=t(9183);function n(e){let{...s}=e;return(0,a.jsx)(r.bL,{"data-slot":"dialog",...s})}function o(e){let{...s}=e;return(0,a.jsx)(r.l9,{"data-slot":"dialog-trigger",...s})}function d(e){let{...s}=e;return(0,a.jsx)(r.ZL,{"data-slot":"dialog-portal",...s})}function c(e){let{className:s,...t}=e;return(0,a.jsx)(r.hJ,{"data-slot":"dialog-overlay",className:(0,i.cn)("data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50",s),...t})}function u(e){let{className:s,children:t,...n}=e;return(0,a.jsxs)(d,{"data-slot":"dialog-portal",children:[(0,a.jsx)(c,{}),(0,a.jsxs)(r.UC,{"data-slot":"dialog-content",className:(0,i.cn)("bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-lg",s),...n,children:[t,(0,a.jsxs)(r.bm,{className:"ring-offset-background focus:ring-ring data-[state=open]:bg-accent data-[state=open]:text-muted-foreground absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",children:[(0,a.jsx)(l.A,{}),(0,a.jsx)("span",{className:"sr-only",children:"Close"})]})]})]})}function m(e){let{className:s,...t}=e;return(0,a.jsx)("div",{"data-slot":"dialog-header",className:(0,i.cn)("flex flex-col gap-2 text-center sm:text-left",s),...t})}function p(e){let{className:s,...t}=e;return(0,a.jsx)("div",{"data-slot":"dialog-footer",className:(0,i.cn)("flex flex-col-reverse gap-2 sm:flex-row sm:justify-end",s),...t})}function h(e){let{className:s,...t}=e;return(0,a.jsx)(r.hE,{"data-slot":"dialog-title",className:(0,i.cn)("text-lg leading-none font-semibold",s),...t})}function x(e){let{className:s,...t}=e;return(0,a.jsx)(r.VY,{"data-slot":"dialog-description",className:(0,i.cn)("text-muted-foreground text-sm",s),...t})}},6568:(e,s,t)=>{"use strict";t.d(s,{d:()=>i});var a=t(3422);t(4398);var r=t(2495),l=t(9183);function i(e){let{className:s,...t}=e;return(0,a.jsx)(r.bL,{"data-slot":"switch",className:(0,l.cn)("peer data-[state=checked]:bg-primary data-[state=unchecked]:bg-input focus-visible:border-ring focus-visible:ring-ring/50 dark:data-[state=unchecked]:bg-input/80 inline-flex h-[1.15rem] w-8 shrink-0 items-center rounded-full border border-transparent shadow-xs transition-all outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50",s),...t,children:(0,a.jsx)(r.zi,{"data-slot":"switch-thumb",className:(0,l.cn)("bg-background dark:data-[state=unchecked]:bg-foreground dark:data-[state=checked]:bg-primary-foreground pointer-events-none block size-4 rounded-full ring-0 transition-transform data-[state=checked]:translate-x-[calc(100%-2px)] data-[state=unchecked]:translate-x-0")})})}},6715:(e,s,t)=>{Promise.resolve().then(t.bind(t,7678))},6839:(e,s,t)=>{"use strict";t.d(s,{Xi:()=>o,av:()=>d,j7:()=>n,tU:()=>i});var a=t(3422);t(4398);var r=t(1749),l=t(9183);function i(e){let{className:s,...t}=e;return(0,a.jsx)(r.bL,{"data-slot":"tabs",className:(0,l.cn)("flex flex-col gap-2",s),...t})}function n(e){let{className:s,...t}=e;return(0,a.jsx)(r.B8,{"data-slot":"tabs-list",className:(0,l.cn)("bg-muted text-muted-foreground inline-flex h-9 w-fit items-center justify-center rounded-lg p-[3px]",s),...t})}function o(e){let{className:s,...t}=e;return(0,a.jsx)(r.l9,{"data-slot":"tabs-trigger",className:(0,l.cn)("data-[state=active]:bg-background dark:data-[state=active]:text-foreground focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:outline-ring dark:data-[state=active]:border-input dark:data-[state=active]:bg-input/30 text-foreground dark:text-muted-foreground inline-flex h-[calc(100%-1px)] flex-1 items-center justify-center gap-1.5 rounded-md border border-transparent px-2 py-1 text-sm font-medium whitespace-nowrap transition-[color,box-shadow] focus-visible:ring-[3px] focus-visible:outline-1 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:shadow-sm [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",s),...t})}function d(e){let{className:s,...t}=e;return(0,a.jsx)(r.UC,{"data-slot":"tabs-content",className:(0,l.cn)("flex-1 outline-none",s),...t})}},7678:(e,s,t)=>{"use strict";t.r(s),t.d(s,{default:()=>e9});var a=t(3422),r=t(4398),l=t(100),i=t(2349),n=t(6013),o=t(9119),d=t(1407),c=t(552),u=t(9945);let m=u.Ik({id:u.Yj(),name:u.Yj(),full_name:u.Yj(),description:u.Yj().optional(),modelType:u.Yj(),isEnabled:u.zM(),createdAt:u.Yj().datetime(),updatedAt:u.Yj().datetime(),provider:u.Yj(),url:u.Yj().url(),api_key:u.Yj().optional(),input_cost:u.ai().min(0),output_cost:u.ai().min(0),min_cost_per_request:u.ai().min(0,"Minimum cost per request must be non-negative").default(0),min_cash_per_request:u.ai().min(0,"Minimum cash per request must be non-negative").default(0),contextLength:u.ai().int().optional(),apiKeyRequired:u.zM().default(!0),provider_id:u.Yj().optional(),is_free:u.zM().default(!1),soft_deleted:u.zM().optional(),has_own_api_key:u.zM(),api_key_type:u.Yj()});m.extend({settings:u.g1(u.L5()).optional(),pricing:u.Ik({inputCostPer1kTokens:u.ai().optional(),outputCostPer1kTokens:u.ai().optional(),unitCost:u.ai().optional()}).optional()}),m.omit({id:!0,createdAt:!0,updatedAt:!0,has_own_api_key:!0,api_key_type:!0}).extend({settings:u.g1(u.L5()).optional()}),m.partial().omit({id:!0,createdAt:!0,updatedAt:!0,has_own_api_key:!0,api_key_type:!0});let p=u.Ik({name:u.Yj().min(1,"Name is required"),full_name:u.Yj().optional(),input_cost:u.ai().min(0,"Input cost must be non-negative"),output_cost:u.ai().min(0,"Output cost must be non-negative"),provider:u.Yj().min(1,"Provider is required"),modelType:u.k5(["text","embedding","image","audio","multimodal"]),description:u.Yj().optional().transform(e=>""===e?void 0:e),contextLength:u.ai().int().min(0).optional().transform(e=>0===e?void 0:e)}).transform(e=>({...e})),h=u.Ik({provider:u.Yj().min(1,"Provider is required"),group_api_key:u.Yj().transform(e=>""===e?void 0:e).optional(),group_url:u.Yj().transform(e=>""===e?void 0:e).pipe(u.Yj().url("Please enter a valid URL").optional()).optional()});u.Ik({data:u.YO(m),pagination:u.Ik({total:u.ai(),page:u.ai(),pageSize:u.ai(),totalPages:u.ai()})}),u.Ik({modelId:u.Yj(),input:u.Yj(),parameters:u.g1(u.L5()).optional()}),u.Ik({output:u.Yj(),usage:u.Ik({promptTokens:u.ai().optional(),completionTokens:u.ai().optional(),totalTokens:u.ai().optional()}).optional(),timings:u.Ik({totalMs:u.ai()}).optional()});var x=t(3648),g=t(268),v=t(834),j=t(6320),f=t(2264),y=t(6950),b=t(9183),N=t(3130);let w=d.Op,_=r.createContext({}),k=e=>{let{...s}=e;return(0,a.jsx)(_.Provider,{value:{name:s.name},children:(0,a.jsx)(d.xI,{...s})})},C=()=>{let e=r.useContext(_),s=r.useContext(M),{getFieldState:t}=(0,d.xW)(),a=(0,d.lN)({name:e.name}),l=t(e.name,a);if(!e)throw Error("useFormField should be used within ");let{id:i}=s;return{id:i,name:e.name,formItemId:"".concat(i,"-form-item"),formDescriptionId:"".concat(i,"-form-item-description"),formMessageId:"".concat(i,"-form-item-message"),...l}},M=r.createContext({});function A(e){let{className:s,...t}=e,l=r.useId();return(0,a.jsx)(M.Provider,{value:{id:l},children:(0,a.jsx)("div",{"data-slot":"form-item",className:(0,b.cn)("grid gap-2",s),...t})})}function S(e){let{className:s,...t}=e,{error:r,formItemId:l}=C();return(0,a.jsx)(N.J,{"data-slot":"form-label","data-error":!!r,className:(0,b.cn)("data-[error=true]:text-destructive",s),htmlFor:l,...t})}function F(e){let{...s}=e,{error:t,formItemId:r,formDescriptionId:l,formMessageId:i}=C();return(0,a.jsx)(y.DX,{"data-slot":"form-control",id:r,"aria-describedby":t?"".concat(l," ").concat(i):"".concat(l),"aria-invalid":!!t,...s})}function P(e){let{className:s,...t}=e,{formDescriptionId:r}=C();return(0,a.jsx)("p",{"data-slot":"form-description",id:r,className:(0,b.cn)("text-muted-foreground text-sm",s),...t})}function R(e){var s;let{className:t,...r}=e,{error:l,formMessageId:i}=C(),n=l?String(null!=(s=null==l?void 0:l.message)?s:""):r.children;return n?(0,a.jsx)("p",{"data-slot":"form-message",id:i,className:(0,b.cn)("text-destructive text-sm",t),...r,children:n}):null}var T=t(856),z=t(2434),E=t(3831);function I(e){let{onModelAdd:s,onCancel:t,isOpen:l}=e,[i,n]=(0,r.useState)(!1),o=(0,d.mN)({resolver:(0,c.u)(p),defaultValues:{name:"",full_name:"",input_cost:0,output_cost:0,provider:"",modelType:"text",description:"",contextLength:void 0}}),u=async e=>{n(!0);try{await s(e),E.oR.success("Model added successfully!"),o.reset(),null==t||t()}catch(e){E.oR.error("Failed to add model. Please try again."),console.error("Error adding model:",e)}finally{n(!1)}},m=()=>{i||(o.reset(),null==t||t())};return(0,a.jsx)(j.lG,{open:l,onOpenChange:m,children:(0,a.jsxs)(j.Cf,{className:"max-h-[90vh] overflow-y-auto sm:max-w-[600px]",children:[(0,a.jsxs)(j.c7,{children:[(0,a.jsxs)(j.L3,{className:"flex items-center gap-2",children:[(0,a.jsx)(T.A,{className:"h-5 w-5"}),"Add New Model"]}),(0,a.jsx)(j.rr,{children:"Manually add a new AI model to your collection"})]}),(0,a.jsx)(w,{...o,children:(0,a.jsxs)("form",{onSubmit:o.handleSubmit(u),className:"space-y-4",children:[(0,a.jsxs)("div",{className:"grid grid-cols-1 gap-4 sm:grid-cols-2",children:[(0,a.jsx)(k,{control:o.control,name:"name",render:e=>{let{field:s}=e;return(0,a.jsxs)(A,{children:[(0,a.jsx)(S,{children:"Model Name *"}),(0,a.jsx)(F,{children:(0,a.jsx)(g.p,{placeholder:"e.g., GPT-4o",...s,className:"w-full"})}),(0,a.jsx)(P,{children:"Display name for the model"}),(0,a.jsx)(R,{})]})}}),(0,a.jsx)(k,{control:o.control,name:"provider",render:e=>{let{field:s}=e;return(0,a.jsxs)(A,{children:[(0,a.jsx)(S,{children:"Provider *"}),(0,a.jsx)(F,{children:(0,a.jsx)(g.p,{placeholder:"e.g., OpenAI, Anthropic",...s,className:"w-full"})}),(0,a.jsx)(P,{children:"AI model provider or company"}),(0,a.jsx)(R,{})]})}})]}),(0,a.jsxs)("div",{className:"grid grid-cols-1 gap-4 sm:grid-cols-2",children:[(0,a.jsx)(k,{control:o.control,name:"input_cost",render:e=>{let{field:s}=e;return(0,a.jsxs)(A,{children:[(0,a.jsx)(S,{children:"Input Cost (per 1M tokens) *"}),(0,a.jsx)(F,{children:(0,a.jsx)(g.p,{type:"number",step:"0.001",min:"0",placeholder:"5.00",...s,value:s.value?parseFloat(s.value.toFixed(3)):"",onChange:e=>{let t=Math.round(1e3*(parseFloat(e.target.value)||0))/1e3;s.onChange(t)},className:"w-full"})}),(0,a.jsx)(P,{children:"Cost in USD per 1,000,000 input tokens (max 3 decimals)"}),(0,a.jsx)(R,{})]})}}),(0,a.jsx)(k,{control:o.control,name:"output_cost",render:e=>{let{field:s}=e;return(0,a.jsxs)(A,{children:[(0,a.jsx)(S,{children:"Output Cost (per 1M tokens) *"}),(0,a.jsx)(F,{children:(0,a.jsx)(g.p,{type:"number",step:"0.001",min:"0",placeholder:"15.00",...s,value:s.value?parseFloat(s.value.toFixed(3)):"",onChange:e=>{let t=Math.round(1e3*(parseFloat(e.target.value)||0))/1e3;s.onChange(t)},className:"w-full"})}),(0,a.jsx)(P,{children:"Cost in USD per 1,000,000 output tokens (max 3 decimals)"}),(0,a.jsx)(R,{})]})}})]}),(0,a.jsxs)("div",{className:"grid grid-cols-1 gap-4 sm:grid-cols-2",children:[(0,a.jsx)(k,{control:o.control,name:"modelType",render:e=>{let{field:s}=e;return(0,a.jsxs)(A,{children:[(0,a.jsx)(S,{children:"Model Type"}),(0,a.jsxs)(f.l6,{onValueChange:s.onChange,defaultValue:s.value,children:[(0,a.jsx)(F,{children:(0,a.jsx)(f.bq,{children:(0,a.jsx)(f.yv,{placeholder:"Select model type"})})}),(0,a.jsxs)(f.gC,{children:[(0,a.jsx)(f.eb,{value:"text",children:"Text/Chat"}),(0,a.jsx)(f.eb,{value:"embedding",children:"Embedding"}),(0,a.jsx)(f.eb,{value:"image",children:"Image Generation"}),(0,a.jsx)(f.eb,{value:"audio",children:"Audio"}),(0,a.jsx)(f.eb,{value:"multimodal",children:"Multimodal"})]})]}),(0,a.jsx)(P,{children:"Type of AI model functionality"}),(0,a.jsx)(R,{})]})}}),(0,a.jsx)(k,{control:o.control,name:"contextLength",render:e=>{let{field:s}=e;return(0,a.jsxs)(A,{children:[(0,a.jsx)(S,{children:"Context Length"}),(0,a.jsx)(F,{children:(0,a.jsx)(g.p,{type:"number",min:"0",placeholder:"8192",value:s.value||"",onChange:e=>{let t=parseInt(e.target.value);s.onChange(isNaN(t)||0===t?void 0:t)},className:"w-full"})}),(0,a.jsx)(P,{children:"Maximum context length in tokens (optional, leave empty for default)"}),(0,a.jsx)(R,{})]})}})]}),(0,a.jsx)(k,{control:o.control,name:"description",render:e=>{let{field:s}=e;return(0,a.jsxs)(A,{children:[(0,a.jsx)(S,{children:"Description"}),(0,a.jsx)(F,{children:(0,a.jsx)(v.T,{placeholder:"Brief description of the model...",...s,rows:3,className:"w-full"})}),(0,a.jsx)(P,{children:"Optional description or notes about the model"}),(0,a.jsx)(R,{})]})}}),(0,a.jsxs)("div",{className:"flex justify-end gap-2 pt-4",children:[(0,a.jsx)(x.$,{type:"button",variant:"outline",onClick:m,disabled:i,children:"Cancel"}),(0,a.jsx)(x.$,{type:"submit",disabled:i,children:i?(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(z.A,{className:"mr-2 h-4 w-4 animate-spin"}),"Adding..."]}):"Add Model"})]})]})})]})})}var q=t(7996),L=t(6568);let Y=u.Ik({name:u.Yj().min(1,"Name is required"),description:u.Yj().optional(),context_length:u.au.number().min(0),prompt:u.au.number().min(0),completion:u.au.number().min(0),enabled:u.zM()}),U=e=>null==e||isNaN(e)?0:Math.round(1e5*e)/1e5;function O(e){let{model:s,providerId:t,onModelUpdate:l,onCancel:i,isOpen:n}=e,[u,m]=(0,r.useState)(!1),[p,h]=(0,r.useState)(null),[f,y]=(0,r.useState)(!1),b=(0,d.mN)({resolver:(0,c.u)(Y),defaultValues:{name:s.name,description:s.description||"",context_length:s.contextLength||4096,prompt:U(s.input_cost),completion:U(s.output_cost),enabled:!1!==s.isEnabled}}),N=(0,r.useCallback)(async()=>{if(!t)return void console.error("loadAdminModel called without providerId");try{console.log("Loading admin model:",{providerId:t,modelId:s.full_name});let e=await o.zQ.getProviderModel(t,s.full_name);h(e),y(!1),b.reset({name:e.name,description:e.description||"",context_length:e.context_length,prompt:U(e.pricing.prompt),completion:U(e.pricing.completion),enabled:!1!==e.enabled})}catch(e){console.log("Model not in database, will create new override:",e),y(!0),h({id:s.full_name,name:s.name,description:s.description||"",created:Math.floor(Date.now()/1e3),context_length:s.contextLength||4096,architecture:{modality:s.modelType||"text",input_modalities:[s.modelType||"text"],output_modalities:[s.modelType||"text"],tokenizer:"",instruct_type:null},pricing:{prompt:U(s.input_cost),completion:U(s.output_cost),request:0,image:0,web_search:0,internal_reasoning:0},per_request_limits:null,top_provider:null,upstream_provider_id:t,enabled:!1!==s.isEnabled}),b.reset({name:s.name,description:s.description||"",context_length:s.contextLength||4096,prompt:U(s.input_cost),completion:U(s.output_cost),enabled:!1!==s.isEnabled})}},[t,s,b]);(0,r.useEffect)(()=>{n&&t?N():n&&!t&&(console.error("EditModelForm opened without providerId",{model:s,providerId:t}),E.oR.error("Missing provider information for this model"))},[n,t,s,N]);let _=async e=>{if(!t){console.error("onSubmit called without providerId",{model:s,providerId:t}),E.oR.error("Missing provider ID - cannot update model");return}if(!p){console.error("onSubmit called without adminModelData",{model:s,providerId:t,adminModelData:p}),E.oR.error("Model data not loaded - please try reopening the form");return}m(!0);try{let s={id:p.id,name:e.name,description:e.description||"",created:p.created||Math.floor(Date.now()/1e3),context_length:e.context_length,architecture:p.architecture||{modality:"text",input_modalities:["text"],output_modalities:["text"],tokenizer:"",instruct_type:null},pricing:{prompt:U(e.prompt),completion:U(e.completion),request:0,image:0,web_search:0,internal_reasoning:0},per_request_limits:p.per_request_limits,top_provider:p.top_provider,upstream_provider_id:t,enabled:e.enabled};f?(console.log("Creating new model override"),await o.zQ.createProviderModel(t,s),E.oR.success("Model override created successfully!")):(console.log("Updating existing model override"),await o.zQ.updateProviderModel(t,p.id,s),E.oR.success("Model updated successfully!")),null==l||l(),null==i||i()}catch(s){let e=f?"create":"update";E.oR.error("Failed to ".concat(e," model. Please try again.")),console.error("Error ".concat(e,"ing model:"),s)}finally{m(!1)}},C=()=>{u||null==i||i()};return(0,a.jsx)(j.lG,{open:n,onOpenChange:C,children:(0,a.jsxs)(j.Cf,{className:"max-h-[90vh] overflow-y-auto sm:max-w-[600px]",children:[(0,a.jsxs)(j.c7,{children:[(0,a.jsxs)(j.L3,{className:"flex items-center gap-2",children:[(0,a.jsx)(q.A,{className:"h-5 w-5"}),f?"Create Model Override":"Edit Model Override"]}),(0,a.jsx)(j.rr,{children:f?"Create an override for "".concat(s.name,"""):"Update the model override for "".concat(s.name,""")})]}),(0,a.jsx)(w,{...b,children:(0,a.jsxs)("form",{onSubmit:b.handleSubmit(_),className:"space-y-4",children:[(0,a.jsxs)("div",{className:"grid grid-cols-1 gap-4 sm:grid-cols-2",children:[(0,a.jsx)(k,{control:b.control,name:"name",render:e=>{let{field:s}=e;return(0,a.jsxs)(A,{children:[(0,a.jsx)(S,{children:"Display Name *"}),(0,a.jsx)(F,{children:(0,a.jsx)(g.p,{placeholder:"e.g., GPT-4",...s,className:"w-full"})}),(0,a.jsx)(P,{children:"Custom display name for the model"}),(0,a.jsx)(R,{})]})}}),(0,a.jsx)(k,{control:b.control,name:"context_length",render:e=>{let{field:s}=e;return(0,a.jsxs)(A,{children:[(0,a.jsx)(S,{children:"Context Length *"}),(0,a.jsx)(F,{children:(0,a.jsx)(g.p,{type:"number",min:"0",placeholder:"4096",...s,className:"w-full"})}),(0,a.jsx)(P,{children:"Maximum context window size"}),(0,a.jsx)(R,{})]})}})]}),(0,a.jsx)(k,{control:b.control,name:"description",render:e=>{let{field:s}=e;return(0,a.jsxs)(A,{children:[(0,a.jsx)(S,{children:"Description"}),(0,a.jsx)(F,{children:(0,a.jsx)(v.T,{placeholder:"Brief description of the model...",...s,rows:3,className:"w-full"})}),(0,a.jsx)(P,{children:"Optional description or notes about the model"}),(0,a.jsx)(R,{})]})}}),(0,a.jsxs)("div",{className:"grid grid-cols-1 gap-4 sm:grid-cols-2",children:[(0,a.jsx)(k,{control:b.control,name:"prompt",render:e=>{var s;let{field:t}=e;return(0,a.jsxs)(A,{children:[(0,a.jsx)(S,{children:"Input Cost (per 1M tokens) *"}),(0,a.jsx)(F,{children:(0,a.jsx)(g.p,{type:"number",step:"0.00001",min:"0",placeholder:"5.00000",value:null!=(s=t.value)?s:"",onChange:e=>{let s=e.target.value;t.onChange(""===s?0:parseFloat(s))},onBlur:e=>{let s=parseFloat(e.target.value);t.onChange(U(s))},className:"w-full"})}),(0,a.jsx)(P,{children:"Cost in USD per 1,000,000 input tokens (max 5 decimals)"}),(0,a.jsx)(R,{})]})}}),(0,a.jsx)(k,{control:b.control,name:"completion",render:e=>{var s;let{field:t}=e;return(0,a.jsxs)(A,{children:[(0,a.jsx)(S,{children:"Output Cost (per 1M tokens) *"}),(0,a.jsx)(F,{children:(0,a.jsx)(g.p,{type:"number",step:"0.00001",min:"0",placeholder:"15.00000",value:null!=(s=t.value)?s:"",onChange:e=>{let s=e.target.value;t.onChange(""===s?0:parseFloat(s))},onBlur:e=>{let s=parseFloat(e.target.value);t.onChange(U(s))},className:"w-full"})}),(0,a.jsx)(P,{children:"Cost in USD per 1,000,000 output tokens (max 5 decimals)"}),(0,a.jsx)(R,{})]})}})]}),(0,a.jsx)(k,{control:b.control,name:"enabled",render:e=>{let{field:s}=e;return(0,a.jsxs)(A,{className:"flex flex-row items-center justify-between rounded-lg border p-4",children:[(0,a.jsxs)("div",{className:"space-y-0.5",children:[(0,a.jsx)(S,{className:"text-base",children:"Model Enabled"}),(0,a.jsx)(P,{children:"Enable or disable this model override"})]}),(0,a.jsx)(F,{children:(0,a.jsx)(L.d,{checked:s.value,onCheckedChange:s.onChange})})]})}}),(0,a.jsxs)("div",{className:"flex justify-end gap-2 pt-4",children:[(0,a.jsx)(x.$,{type:"button",variant:"outline",onClick:C,disabled:u,children:"Cancel"}),(0,a.jsx)(x.$,{type:"submit",disabled:u,children:u?(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(z.A,{className:"mr-2 h-4 w-4 animate-spin"}),f?"Creating...":"Updating..."]}):f?"Create Override":"Update Model"})]})]})})]})})}var J=t(1935),Q=t(5195),K=t(9906),D=t(2267),G=t(1220),V=t(9442);function $(e){let{provider:s,models:t,groupSettings:l,onGroupUpdate:i,onCancel:n,isOpen:o}=e,[u,m]=(0,r.useState)(!1),[p,v]=(0,r.useState)(!1),[f,y]=(0,r.useState)(!!(null==l?void 0:l.group_url)),b=(0,d.mN)({resolver:(0,c.u)(h),defaultValues:{provider:s,group_api_key:(null==l?void 0:l.group_api_key)||"",group_url:(null==l?void 0:l.group_url)||""}}),N=async e=>{m(!0);try{var t,a;let r={...e,group_api_key:(null==(t=e.group_api_key)?void 0:t.trim())||void 0,group_url:f&&(null==(a=e.group_url)?void 0:a.trim())||void 0};await i(s,r),E.oR.success('Group "'.concat(s,'" updated successfully!')),null==n||n()}catch(e){E.oR.error("Failed to update group. Please try again."),console.error("Error updating group:",e)}finally{m(!1)}},_=t.filter(e=>!e.api_key).length,C=t.filter(e=>!e.api_key&&(!e.url||e.url.startsWith("/"))).length,M=()=>{u||null==n||n()};return(0,a.jsx)(j.lG,{open:o,onOpenChange:M,children:(0,a.jsxs)(j.Cf,{className:"max-h-[90vh] overflow-y-auto sm:max-w-[700px]",children:[(0,a.jsxs)(j.c7,{children:[(0,a.jsxs)(j.L3,{className:"flex items-center gap-2",children:[(0,a.jsx)(J.A,{className:"h-5 w-5"}),"Edit Provider Group: ",s]}),(0,a.jsxs)(j.rr,{children:["Update settings for all ",t.length," models in this group. Group settings provide defaults for models without individual configurations."]})]}),(0,a.jsxs)("div",{className:"mb-6 space-y-4",children:[(0,a.jsxs)("div",{className:"rounded-md border p-4",children:[(0,a.jsxs)("h4",{className:"mb-2 flex items-center gap-2 text-sm font-medium",children:[(0,a.jsx)(Q.A,{className:"h-4 w-4"}),"API Key Configuration"]}),(0,a.jsx)("div",{className:"space-y-2 text-sm",children:(0,a.jsxs)("div",{className:"flex justify-between",children:[(0,a.jsx)("span",{children:"Models using group API key:"}),(0,a.jsx)("span",{className:"font-medium text-blue-600",children:_})]})})]}),(0,a.jsxs)("div",{className:"rounded-md border p-4",children:[(0,a.jsxs)("h4",{className:"mb-2 flex items-center gap-2 text-sm font-medium",children:[(0,a.jsx)(K.A,{className:"h-4 w-4"}),"URL Configuration"]}),(0,a.jsxs)("div",{className:"space-y-2 text-sm",children:[(0,a.jsxs)("div",{className:"flex justify-between",children:[(0,a.jsx)("span",{children:"Models using group URL:"}),(0,a.jsx)("span",{className:"font-medium text-blue-600",children:C})]}),(0,a.jsxs)("div",{className:"flex justify-between",children:[(0,a.jsx)("span",{children:"Models with individual URLs:"}),(0,a.jsx)("span",{className:"font-medium text-green-600",children:t.length-C})]}),(null==l?void 0:l.group_url)&&(0,a.jsxs)("div",{className:"mt-2 rounded bg-blue-50 p-2 text-xs",children:[(0,a.jsx)("span",{className:"font-medium",children:"Current group URL:"})," ",l.group_url]})]})]}),(0,a.jsxs)("div",{className:"rounded-md border p-4",children:[(0,a.jsx)("h4",{className:"mb-2 text-sm font-medium",children:"Models in this group:"}),(0,a.jsx)("div",{className:"max-h-32 overflow-y-auto",children:(0,a.jsx)("div",{className:"flex flex-wrap gap-2",children:t.map(e=>(0,a.jsxs)("span",{className:"inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium ".concat(e.api_key?"bg-green-100 text-green-800":"bg-blue-100 text-blue-800"),title:e.api_key?"Has individual API key and URL":"Uses group API key and URL",children:[e.name,e.api_key&&" \uD83D\uDD11",e.url&&!e.url.startsWith("/")&&e.api_key&&" \uD83C\uDF10"]},e.id))})})]})]}),(0,a.jsx)(w,{...b,children:(0,a.jsxs)("form",{onSubmit:b.handleSubmit(N),className:"space-y-6",children:[(0,a.jsx)(k,{control:b.control,name:"provider",render:e=>{let{field:s}=e;return(0,a.jsxs)(A,{children:[(0,a.jsx)(S,{children:"Provider Name *"}),(0,a.jsx)(F,{children:(0,a.jsx)(g.p,{placeholder:"e.g., OpenAI, Anthropic",...s,className:"w-full"})}),(0,a.jsx)(P,{children:"This will update the provider name for all models in this group"}),(0,a.jsx)(R,{})]})}}),(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsxs)("div",{className:"flex items-center justify-between",children:[(0,a.jsxs)("div",{className:"space-y-0.5",children:[(0,a.jsx)(S,{className:"text-base",children:"Group Base URL"}),(0,a.jsx)(P,{children:"Provide a custom base URL for this provider group"})]}),(0,a.jsx)(L.d,{checked:f,onCheckedChange:y})]}),f&&(0,a.jsx)(k,{control:b.control,name:"group_url",render:e=>{let{field:s}=e;return(0,a.jsxs)(A,{children:[(0,a.jsx)(S,{children:"Base URL"}),(0,a.jsx)(F,{children:(0,a.jsx)(g.p,{placeholder:"https://api.openai.com/v1 or https://your-proxy.com/v1",...s,className:"w-full"})}),(0,a.jsx)(P,{children:"This base URL will be used for models without individual URLs. Models will append their endpoint path (e.g., /chat/completions) to this base."}),(0,a.jsx)(R,{})]})}}),!f&&(null==l?void 0:l.group_url)&&(0,a.jsxs)(V.Fc,{children:[(0,a.jsx)(D.A,{className:"h-4 w-4"}),(0,a.jsx)(V.TN,{children:"Removing the group URL will make models in this group fall back to the default system endpoint. Models with individual URLs will be unaffected."})]}),f&&!(null==l?void 0:l.group_url)&&(0,a.jsxs)(V.Fc,{children:[(0,a.jsx)(G.A,{className:"h-4 w-4"}),(0,a.jsx)(V.TN,{children:"Adding a group URL will allow models in this group to use a custom endpoint instead of the default system endpoint."})]})]}),(0,a.jsx)(k,{control:b.control,name:"group_api_key",render:e=>{let{field:s}=e;return(0,a.jsxs)(A,{children:[(0,a.jsx)(S,{children:"Group API Key"}),(0,a.jsxs)("div",{className:"relative",children:[(0,a.jsx)(F,{children:(0,a.jsx)(g.p,{type:p?"text":"password",placeholder:"sk-... (leave empty to remove)",...s,className:"w-full pr-24"})}),(0,a.jsx)(x.$,{type:"button",variant:"ghost",size:"sm",className:"absolute top-0 right-0 h-full px-3 py-2 hover:bg-transparent",onClick:()=>v(!p),children:p?"Hide":"Show"})]}),(0,a.jsxs)(P,{children:["This API key will be used for models that don't have individual API keys (",_," models). Leave empty to remove the group API key."]}),(0,a.jsx)(R,{})]})}}),(0,a.jsxs)("div",{className:"rounded-md border border-amber-200 bg-amber-50 p-4",children:[(0,a.jsx)("p",{className:"text-sm text-amber-800",children:(0,a.jsx)("strong",{children:"How group settings work:"})}),(0,a.jsxs)("ul",{className:"mt-2 list-inside list-disc space-y-1 text-sm text-amber-800",children:[(0,a.jsx)("li",{children:"Models with individual API keys and URLs will keep their specific settings"}),(0,a.jsx)("li",{children:"Models without individual settings will use the group defaults"}),(0,a.jsx)("li",{children:"Removing the group URL makes models fall back to the system default endpoint"}),(0,a.jsx)("li",{children:'You can use "Apply Group Settings" to force models to use group configurations'})]})]}),(0,a.jsxs)("div",{className:"flex justify-end gap-2 pt-4",children:[(0,a.jsx)(x.$,{type:"button",variant:"outline",onClick:M,disabled:u,children:"Cancel"}),(0,a.jsx)(x.$,{type:"submit",disabled:u,children:u?(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(z.A,{className:"mr-2 h-4 w-4 animate-spin"}),"Updating..."]}):"Update Group"})]})]})})]})})}var B=t(7228),W=t(9675),Z=t(246),H=t(1853),X=t(8940);function ee(e){let{className:s,...t}=e;return(0,a.jsx)(H.bL,{"data-slot":"checkbox",className:(0,b.cn)("peer 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 focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive size-4 shrink-0 rounded-[4px] border shadow-xs transition-shadow outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50",s),...t,children:(0,a.jsx)(H.C1,{"data-slot":"checkbox-indicator",className:"flex items-center justify-center text-current transition-none",children:(0,a.jsx)(X.A,{className:"size-3.5"})})})}var es=t(9625);function et(e){let{className:s,children:t,...r}=e;return(0,a.jsxs)(es.bL,{"data-slot":"scroll-area",className:(0,b.cn)("relative",s),...r,children:[(0,a.jsx)(es.LM,{"data-slot":"scroll-area-viewport",className:"focus-visible:ring-ring/50 size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:outline-1",children:t}),(0,a.jsx)(ea,{}),(0,a.jsx)(es.OK,{})]})}function ea(e){let{className:s,orientation:t="vertical",...r}=e;return(0,a.jsx)(es.VM,{"data-slot":"scroll-area-scrollbar",orientation:t,className:(0,b.cn)("flex touch-none p-px transition-colors select-none","vertical"===t&&"h-full w-2.5 border-l border-l-transparent","horizontal"===t&&"h-2.5 flex-col border-t border-t-transparent",s),...r,children:(0,a.jsx)(es.lr,{"data-slot":"scroll-area-thumb",className:"bg-border relative flex-1 rounded-full"})})}var er=t(8561);function el(e){let{isOpen:s,onClose:t,onSuccess:l}=e,[i,n]=(0,r.useState)(null),[d,c]=(0,r.useState)([]),[u,m]=(0,r.useState)([]),[p,h]=(0,r.useState)(new Set),[g,v]=(0,r.useState)(!1),[y,b]=(0,r.useState)(!1),[N,w]=(0,r.useState)(!1),[_,k]=(0,r.useState)(null),C=(0,r.useCallback)(async()=>{if(i){b(!0),m([]),h(new Set);try{let e=await o.zQ.getProviderModels(i),s=new Set(e.db_models.map(e=>e.id)),t=e.remote_models.filter(e=>!s.has(e.id));m(t)}catch(e){E.oR.error("Failed to fetch models from provider")}finally{b(!1)}}},[i]);(0,r.useEffect)(()=>{s&&M()},[s]),(0,r.useEffect)(()=>{i&&C()},[i,C]);let M=async()=>{v(!0);try{let e=await o.zQ.getUpstreamProviders();c(e)}catch(e){E.oR.error("Failed to load providers")}finally{v(!1)}},A=e=>{let s=new Set(p);s.has(e)?s.delete(e):s.add(e),h(s)},S=async()=>{if(0===p.size)return void E.oR.error("Please select at least one model");w(!0);let e=0,s=0,t=[];try{for(let a of Array.from(p)){let r=u.find(e=>e.id===a);if(r)try{await o.zQ.createModel({...r,upstream_provider_id:i,enabled:!0,created:Math.floor(Date.now()/1e3)}),e++}catch(r){let e=r instanceof Error?r.message:"Unknown error";e.includes("already exists")?s++:t.push("".concat(a,": ").concat(e))}}k({added:e,skipped:s,errors:t}),e>0&&(E.oR.success("Successfully added ".concat(e," models")),null==l||l()),t.length>0&&E.oR.warning("Completed with ".concat(t.length," errors"))}catch(e){E.oR.error("Failed to collect models")}finally{w(!1)}},F=()=>{N||(n(null),m([]),h(new Set),k(null),t())};return(0,a.jsx)(j.lG,{open:s,onOpenChange:F,children:(0,a.jsxs)(j.Cf,{className:"max-h-[80vh] sm:max-w-[700px]",children:[(0,a.jsxs)(j.c7,{children:[(0,a.jsxs)(j.L3,{className:"flex items-center gap-2",children:[(0,a.jsx)(B.A,{className:"h-5 w-5"}),"Collect Models from Provider"]}),(0,a.jsx)(j.rr,{children:"Fetch models from an upstream provider and add them to your database"})]}),(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)("label",{className:"text-sm font-medium",children:"Select Provider"}),(0,a.jsxs)(f.l6,{value:null==i?void 0:i.toString(),onValueChange:e=>n(parseInt(e)),disabled:g,children:[(0,a.jsx)(f.bq,{children:(0,a.jsx)(f.yv,{placeholder:"Choose an upstream provider"})}),(0,a.jsx)(f.gC,{children:d.map(e=>(0,a.jsxs)(f.eb,{value:e.id.toString(),children:[e.provider_type," - ",e.base_url]},e.id))})]})]}),y&&(0,a.jsxs)("div",{className:"flex items-center justify-center py-8",children:[(0,a.jsx)(z.A,{className:"h-8 w-8 animate-spin"}),(0,a.jsx)("span",{className:"ml-2",children:"Loading models from provider..."})]}),!y&&i&&u.length>0&&(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)("div",{className:"flex items-center justify-between",children:[(0,a.jsxs)("div",{className:"text-sm font-medium",children:[u.length," models available"]}),(0,a.jsxs)("div",{className:"flex gap-2",children:[(0,a.jsx)(x.$,{variant:"outline",size:"sm",onClick:()=>{h(new Set(u.map(e=>e.id)))},disabled:N,children:"Select All"}),(0,a.jsx)(x.$,{variant:"outline",size:"sm",onClick:()=>{h(new Set)},disabled:N,children:"Deselect All"})]})]}),(0,a.jsx)(et,{className:"h-[300px] rounded-md border p-4",children:(0,a.jsx)("div",{className:"space-y-2",children:u.map(e=>(0,a.jsxs)("div",{className:"hover:bg-accent flex items-start space-x-3 rounded-lg border p-3",children:[(0,a.jsx)(ee,{checked:p.has(e.id),onCheckedChange:()=>A(e.id),disabled:N}),(0,a.jsxs)("div",{className:"flex-1 space-y-1",children:[(0,a.jsx)("div",{className:"font-mono text-sm font-medium",children:e.id}),(0,a.jsx)("div",{className:"text-muted-foreground text-xs",children:e.description||e.name}),e.context_length&&(0,a.jsxs)(er.E,{variant:"secondary",className:"text-xs",children:[e.context_length.toLocaleString()," tokens"]})]})]},e.id))})})]}),!y&&i&&0===u.length&&(0,a.jsxs)(V.Fc,{children:[(0,a.jsx)(W.A,{className:"h-4 w-4"}),(0,a.jsx)(V.TN,{children:"No new models available from this provider. All models may already be in your database."})]}),_&&(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsxs)(V.Fc,{children:[(0,a.jsx)(Z.A,{className:"h-4 w-4"}),(0,a.jsxs)(V.TN,{children:[(0,a.jsx)("strong",{children:"Collection Results:"}),(0,a.jsx)("br",{}),"• ",_.added," models added",(0,a.jsx)("br",{}),"• ",_.skipped," models skipped",_.errors.length>0&&(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)("br",{}),"• ",_.errors.length," errors occurred"]})]})]}),_.errors.length>0&&(0,a.jsxs)(V.Fc,{variant:"destructive",children:[(0,a.jsx)(W.A,{className:"h-4 w-4"}),(0,a.jsxs)(V.TN,{children:[(0,a.jsx)("strong",{children:"Errors:"}),(0,a.jsxs)("ul",{className:"mt-1 list-inside list-disc text-sm",children:[_.errors.slice(0,3).map((e,s)=>(0,a.jsx)("li",{children:e},s)),_.errors.length>3&&(0,a.jsxs)("li",{children:["... and ",_.errors.length-3," more errors"]})]})]})]})]}),(0,a.jsxs)("div",{className:"flex justify-end gap-2 pt-4",children:[(0,a.jsx)(x.$,{variant:"outline",onClick:F,disabled:N,children:_?"Close":"Cancel"}),(0,a.jsx)(x.$,{onClick:S,disabled:N||!i||0===p.size||y,children:N?(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(z.A,{className:"mr-2 h-4 w-4 animate-spin"}),"Adding Models..."]}):(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(B.A,{className:"mr-2 h-4 w-4"}),"Add ",p.size," Models"]})})]})]})]})})}function ei(e){return 0===e?"Free":e<1e-6?"$".concat(e.toFixed(8)):e<.001?"$".concat(e.toFixed(6)):e<.01?"$".concat(e.toFixed(4)):"$".concat(e.toFixed(3))}var en=t(2738),eo=t(2745),ed=t(8815);function ec(e){let{...s}=e;return(0,a.jsx)(ed.bL,{"data-slot":"alert-dialog",...s})}function eu(e){let{...s}=e;return(0,a.jsx)(ed.ZL,{"data-slot":"alert-dialog-portal",...s})}function em(e){let{className:s,...t}=e;return(0,a.jsx)(ed.hJ,{"data-slot":"alert-dialog-overlay",className:(0,b.cn)("data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50",s),...t})}function ep(e){let{className:s,...t}=e;return(0,a.jsxs)(eu,{children:[(0,a.jsx)(em,{}),(0,a.jsx)(ed.UC,{"data-slot":"alert-dialog-content",className:(0,b.cn)("bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-lg",s),...t})]})}function eh(e){let{className:s,...t}=e;return(0,a.jsx)("div",{"data-slot":"alert-dialog-header",className:(0,b.cn)("flex flex-col gap-2 text-center sm:text-left",s),...t})}function ex(e){let{className:s,...t}=e;return(0,a.jsx)("div",{"data-slot":"alert-dialog-footer",className:(0,b.cn)("flex flex-col-reverse gap-2 sm:flex-row sm:justify-end",s),...t})}function eg(e){let{className:s,...t}=e;return(0,a.jsx)(ed.hE,{"data-slot":"alert-dialog-title",className:(0,b.cn)("text-lg font-semibold",s),...t})}function ev(e){let{className:s,...t}=e;return(0,a.jsx)(ed.VY,{"data-slot":"alert-dialog-description",className:(0,b.cn)("text-muted-foreground text-sm",s),...t})}function ej(e){let{className:s,...t}=e;return(0,a.jsx)(ed.rc,{className:(0,b.cn)((0,x.r)(),s),...t})}function ef(e){let{className:s,...t}=e;return(0,a.jsx)(ed.ZD,{className:(0,b.cn)((0,x.r)({variant:"outline"}),s),...t})}var ey=t(6049);function eb(e){let{...s}=e;return(0,a.jsx)(ey.bL,{"data-slot":"dropdown-menu",...s})}function eN(e){let{...s}=e;return(0,a.jsx)(ey.l9,{"data-slot":"dropdown-menu-trigger",...s})}function ew(e){let{className:s,sideOffset:t=4,...r}=e;return(0,a.jsx)(ey.ZL,{children:(0,a.jsx)(ey.UC,{"data-slot":"dropdown-menu-content",sideOffset:t,className:(0,b.cn)("bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 max-h-(--radix-dropdown-menu-content-available-height) min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border p-1 shadow-md",s),...r})})}function e_(e){let{className:s,inset:t,variant:r="default",...l}=e;return(0,a.jsx)(ey.q7,{"data-slot":"dropdown-menu-item","data-inset":t,"data-variant":r,className:(0,b.cn)("focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:!text-destructive [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",s),...l})}function ek(e){let{className:s,...t}=e;return(0,a.jsx)(ey.wv,{"data-slot":"dropdown-menu-separator",className:(0,b.cn)("bg-border -mx-1 my-1 h-px",s),...t})}var eC=t(2034),eM=t(9987),eA=t(3545),eS=t(4963),eF=t(6541),eP=t(9197),eR=t(3732),eT=t(3728);function ez(e){let{filterProvider:s,groupData:t,filteredModels:d}=e,[c,u]=(0,r.useState)(""),[,m]=(0,r.useState)(null),[p,h]=(0,r.useState)(!1),[g,v]=(0,r.useState)(null),[j,f]=(0,r.useState)(null),[y,N]=(0,r.useState)(!1),[w,_]=(0,r.useState)(new Set),[k,C]=(0,r.useState)(!1),[M,A]=(0,r.useState)(!1),[S,F]=(0,r.useState)(!1),[P]=(0,r.useState)([]),R=(0,l.jE)(),{data:T,isLoading:z,error:L,refetch:Y}=(0,i.I)({queryKey:["models-with-providers"],queryFn:()=>o.zQ.getModelsWithProviders(),refetchOnWindowFocus:!1}),{models:U=[],groups:G=[]}=T||{},V=(0,r.useMemo)(()=>s?U.filter(e=>e.provider===s):U,[U,s]),B=(0,n.n)({mutationFn:async e=>{let s=U.filter(s=>e.includes(s.id)).reduce((e,s)=>{let t=s.provider_id||"unknown";return e[t]||(e[t]=[]),e[t].push(s),e},{}),t=0;for(let[e,a]of Object.entries(s)){if("unknown"===e)continue;let s=a.map(e=>e.full_name);t+=(await o.zQ.deleteModels(s,e)).deleted_count}return{deleted_count:t,message:"Models deleted"}},onSuccess:e=>{E.oR.success("Successfully deleted ".concat(e.deleted_count," model overrides")),_(new Set),R.invalidateQueries({queryKey:["models-with-providers"]}),R.invalidateQueries({queryKey:["all-provider-models"]}),R.invalidateQueries({queryKey:["upstream-providers"]})},onError:e=>{E.oR.error("Failed to delete model overrides: ".concat(e.message))}}),W=(0,n.n)({mutationFn:async e=>{let s=U.filter(s=>e.includes(s.id)).reduce((e,s)=>{let t=s.provider_id||"unknown";return e[t]||(e[t]=[]),e[t].push(s),e},{}),t=0;for(let[e,r]of Object.entries(s))if("unknown"!==e)for(let s of r){let r=parseInt(e);try{let e=await o.zQ.getProviderModel(r,s.full_name);await o.zQ.updateProviderModel(r,s.full_name,{...e,enabled:!1}),t++}catch(e){var a;if((null==(a=e.message)?void 0:a.includes("404"))||404===e.status){let e={id:s.full_name,name:s.name,description:s.description||"",created:Math.floor(Date.now()/1e3),context_length:s.contextLength||4096,architecture:{modality:s.modelType||"text",input_modalities:[s.modelType||"text"],output_modalities:[s.modelType||"text"],tokenizer:"",instruct_type:null},pricing:{prompt:s.input_cost,completion:s.output_cost,request:0,image:0,web_search:0,internal_reasoning:0},per_request_limits:null,top_provider:null,upstream_provider_id:r,enabled:!1};await o.zQ.createProviderModel(r,e),t++}}}return{deleted_count:t,message:"Models disabled"}},onSuccess:e=>{E.oR.success("Successfully disabled ".concat(e.deleted_count," models")),_(new Set),R.invalidateQueries({queryKey:["models-with-providers"]}),R.invalidateQueries({queryKey:["all-provider-models"]}),R.invalidateQueries({queryKey:["upstream-providers"]})},onError:e=>{E.oR.error("Failed to disable models: ".concat(e.message))}}),H=(0,n.n)({mutationFn:async e=>{if(!t)throw Error("No group data available");let s={};return s.api_key="",t.group_url&&(s.url=t.group_url),o.zQ.bulkUpdateModels(e,s)},onSuccess:e=>{E.oR.success("Successfully applied group settings to ".concat(e.updated_count," models")),e.errors.length>0&&(E.oR.warning("".concat(e.errors.length," models had errors during update")),console.warn("Bulk update errors:",e.errors)),_(new Set),R.invalidateQueries({queryKey:["models-with-providers"]}),R.invalidateQueries({queryKey:["all-provider-models"]}),R.invalidateQueries({queryKey:["upstream-providers"]})},onError:e=>{E.oR.error("Failed to apply group settings: ".concat(e.message))}}),X=(0,n.n)({mutationFn:()=>o.zQ.deleteAllModels(),onSuccess:e=>{E.oR.success("Successfully permanently deleted ".concat(e.deleted_count," models")),_(new Set),R.invalidateQueries({queryKey:["models-with-providers"]}),R.invalidateQueries({queryKey:["all-provider-models"]}),R.invalidateQueries({queryKey:["upstream-providers"]})},onError:e=>{E.oR.error("Failed to permanently delete all models: ".concat(e.message))}}),es=(0,n.n)({mutationFn:e=>o.zQ.deleteModelsByProvider(e),onSuccess:e=>{E.oR.success("Successfully permanently deleted ".concat(e.deleted_count," models from provider")),_(new Set),R.invalidateQueries({queryKey:["models-with-providers"]}),R.invalidateQueries({queryKey:["all-provider-models"]}),R.invalidateQueries({queryKey:["upstream-providers"]})},onError:e=>{E.oR.error("Failed to permanently delete provider models: ".concat(e.message))}}),et=(0,n.n)({mutationFn:async e=>{let s=U.find(s=>s.id===e);if(!s)throw Error("Model not found");if(!s.provider_id)throw Error("Provider ID not available for this model");let t=parseInt(s.provider_id),a=await o.zQ.getProviderModel(t,s.full_name);return await o.zQ.updateProviderModel(t,s.full_name,{...a,enabled:!0}),{restored_count:1}},onSuccess:()=>{E.oR.success("Model enabled successfully"),R.invalidateQueries({queryKey:["models-with-providers"]}),R.invalidateQueries({queryKey:["all-provider-models"]}),R.invalidateQueries({queryKey:["upstream-providers"]})},onError:e=>{E.oR.error("Failed to enable model: ".concat(e.message))}}),ea=(0,n.n)({mutationFn:async e=>{let s=U.filter(s=>e.includes(s.id)).reduce((e,s)=>{let t=s.provider_id||"unknown";return e[t]||(e[t]=[]),e[t].push(s),e},{}),t=0;for(let[e,a]of Object.entries(s))if("unknown"!==e)for(let s of a){let a=parseInt(e);try{let e=await o.zQ.getProviderModel(a,s.full_name);await o.zQ.updateProviderModel(a,s.full_name,{...e,enabled:!0}),t++}catch(e){console.error("Failed to enable model ".concat(s.full_name,":"),e)}}return{restored_count:t,message:"Models enabled"}},onSuccess:e=>{E.oR.success("Successfully enabled ".concat(e.restored_count," models")),_(new Set),R.invalidateQueries({queryKey:["models-with-providers"]}),R.invalidateQueries({queryKey:["all-provider-models"]}),R.invalidateQueries({queryKey:["upstream-providers"]})},onError:e=>{E.oR.error("Failed to enable models: ".concat(e.message))}}),er=(0,r.useMemo)(()=>{let e=d&&d.length>0?d:P.length>0?P:V;return s?{[s]:e}:e?e.reduce((e,s)=>{let t=s.provider;return e[t]||(e[t]=[]),e[t].push(s),e},{}):{}},[V,P,d,s]),ed=(0,r.useMemo)(()=>new Map(G.map(e=>[e.provider,e])),[G]),eu=(0,r.useMemo)(()=>{let e={};return G.forEach(s=>{e[s.provider]={group_api_key:s.group_api_key,group_url:s.group_url}}),e},[G]),em=e=>{var s;return e.api_key?e.api_key:null==(s=eu[e.provider])?void 0:s.group_api_key},ey=e=>{let s=ed.get(e.provider),t=!!(e.api_key&&"string"==typeof e.api_key&&e.api_key!==(null==s?void 0:s.group_api_key)),a=!!(e.url&&"string"==typeof e.url&&!e.url.startsWith("/")&&e.url!==(null==s?void 0:s.group_url));return t||a},ez=async e=>{try{let s=G.find(s=>s.provider===e.provider);s||(s=await o.zQ.createModelGroup({provider:e.provider,group_api_key:void 0}));let t={name:e.name,full_name:e.name,input_cost:e.input_cost,output_cost:e.output_cost,provider:e.provider,modelType:e.modelType,description:e.description||void 0,contextLength:e.contextLength};await o.zQ.createModel(t),await Y(),E.oR.success('Model "'.concat(e.name,'" added successfully!'))}catch(e){throw console.error("Error adding model:",e),E.oR.error("Failed to add model. Please try again."),e}},eE=async()=>{await Y(),v(null)},eI=async(e,s)=>{try{let t=ed.get(e);t&&(await o.zQ.updateModelGroup(t.id,{provider:s.provider,group_api_key:s.group_api_key||void 0,group_url:s.group_url||void 0}),await Y(),f(null),E.oR.success("Group updated successfully!"))}catch(e){console.error("Error updating group:",e),E.oR.error("Failed to update group. Please try again.")}},eq=async()=>{await Y(),N(!1)},eL=async e=>{let s=ed.get(e);if(!(null==s?void 0:s.id))return void E.oR.error("No group configuration found for this provider");try{let e=await o.zQ.refreshModels({provider_id:s.id});E.oR.info(e.message),await Y(),R.invalidateQueries({queryKey:["models-with-providers"]}),R.invalidateQueries({queryKey:["all-provider-models"]}),R.invalidateQueries({queryKey:["upstream-providers"]})}catch(t){console.error("Error refreshing provider models:",t);let s=t instanceof Error?t.message:"Unknown error";E.oR.error("Failed to refresh ".concat(e," models: ").concat(s))}},eY=e=>{switch(e.toLowerCase()){case"text":default:return(0,a.jsx)(eC.A,{className:"h-4 w-4"});case"embedding":return(0,a.jsx)(eM.A,{className:"h-4 w-4"});case"image":return(0,a.jsx)(K.A,{className:"h-4 w-4"})}},eU=e=>{switch(e.toLowerCase()){case"text":return"bg-blue-100 text-blue-800";case"embedding":return"bg-purple-100 text-purple-800";case"image":return"bg-green-100 text-green-800";case"audio":return"bg-orange-100 text-orange-800";case"multimodal":return"bg-pink-100 text-pink-800";default:return"bg-gray-100 text-gray-800"}},eO=e=>{let s=new Set(w);s.has(e)?s.delete(e):s.add(e),_(s)},eJ=e=>{let s=(d&&d.length>0?d:P.length>0?P:V).filter(s=>s.provider===e).map(e=>e.id),t=new Set(w);s.forEach(e=>t.add(e)),_(t)},eQ=e=>{let s=ed.get(e);(null==s?void 0:s.id)&&es.mutate(s.id)},eK=async e=>{let s=U.find(s=>s.id===e);if(!s)return void E.oR.error("Model not found");if(!s.provider_id)return void E.oR.error("Provider ID not available for this model");try{let e=parseInt(s.provider_id);await o.zQ.deleteProviderModel(e,s.full_name),E.oR.success("Model override deleted successfully"),R.invalidateQueries({queryKey:["models-with-providers"]}),R.invalidateQueries({queryKey:["all-provider-models"]}),R.invalidateQueries({queryKey:["upstream-providers"]})}catch(s){let e=s instanceof Error?s.message:"Unknown error";E.oR.error("Failed to delete model override: ".concat(e))}},eD=async e=>{let s=U.find(s=>s.id===e);if(!s)return void E.oR.error("Model not found");if(!s.provider_id)return void E.oR.error("Provider ID not available for this model");try{let e=parseInt(s.provider_id);try{let t=await o.zQ.getProviderModel(e,s.full_name);await o.zQ.updateProviderModel(e,s.full_name,{...t,enabled:!1}),E.oR.success("Model disabled successfully")}catch(a){var t;if((null==(t=a.message)?void 0:t.includes("404"))||404===a.status){let t={id:s.full_name,name:s.name,description:s.description||"",created:Math.floor(Date.now()/1e3),context_length:s.contextLength||4096,architecture:{modality:s.modelType||"text",input_modalities:[s.modelType||"text"],output_modalities:[s.modelType||"text"],tokenizer:"",instruct_type:null},pricing:{prompt:s.input_cost,completion:s.output_cost,request:0,image:0,web_search:0,internal_reasoning:0},per_request_limits:null,top_provider:null,upstream_provider_id:e,enabled:!1};await o.zQ.createProviderModel(e,t),E.oR.success("Model disabled successfully")}else throw a}R.invalidateQueries({queryKey:["models-with-providers"]}),R.invalidateQueries({queryKey:["all-provider-models"]}),R.invalidateQueries({queryKey:["upstream-providers"]})}catch(s){let e=s instanceof Error?s.message:"Unknown error";E.oR.error("Failed to disable model: ".concat(e))}};return z?(0,a.jsxs)("div",{className:"grid gap-4",children:[(0,a.jsx)(eo.E,{className:"h-[200px]"}),(0,a.jsx)(eo.E,{className:"h-[200px]"})]}):L?(0,a.jsx)("div",{className:"rounded-lg border border-red-200 bg-red-50 p-4",children:(0,a.jsx)("p",{className:"text-sm text-red-800",children:"Error loading models. Please try again later."})}):(0,a.jsxs)("div",{className:"grid gap-6",children:[(0,a.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,a.jsxs)(x.$,{onClick:()=>{_(new Set((d&&d.length>0?d:P.length>0?P:V).map(e=>e.id)))},children:[(0,a.jsx)(eA.A,{className:"mr-2 h-4 w-4"}),"Select All Models"]}),(0,a.jsxs)(x.$,{onClick:()=>{_(new Set)},children:[(0,a.jsx)(eS.A,{className:"mr-2 h-4 w-4"}),"Deselect All"]}),(0,a.jsxs)(x.$,{onClick:()=>{A(!0)},className:"text-destructive focus:text-destructive",children:[(0,a.jsx)(D.A,{className:"mr-2 h-4 w-4"}),"Delete All Models Permanently"]}),w.size>0&&(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)("div",{className:"bg-border h-6 w-px"}),(0,a.jsxs)("span",{className:"text-muted-foreground text-sm",children:[w.size," selected"]}),(()=>{let e=(d&&d.length>0?d:P.length>0?P:V).filter(e=>w.has(e.id)&&e.soft_deleted);return e.length>0&&(0,a.jsxs)(x.$,{onClick:()=>ea.mutate(e.map(e=>e.id)),variant:"outline",size:"sm",className:"gap-2 border-green-300 text-green-600 hover:border-green-400 hover:text-green-700",disabled:ea.isPending,children:[(0,a.jsx)(Z.A,{className:"h-4 w-4"}),"Enable Selected (",e.length,")"]})})(),(0,a.jsxs)(x.$,{onClick:()=>{C(!0)},variant:"destructive",size:"sm",className:"gap-2",disabled:B.isPending,children:[(0,a.jsx)(eF.A,{className:"h-4 w-4"}),"Delete Selected Overrides"]}),(0,a.jsxs)(x.$,{onClick:()=>{W.mutate(Array.from(w))},variant:"outline",size:"sm",className:"gap-2 border-orange-300 text-orange-600 hover:border-orange-400 hover:text-orange-700",disabled:W.isPending,children:[(0,a.jsx)(eP.A,{className:"h-4 w-4"}),"Disable Selected"]})]})]}),Object.entries(er).map(e=>{let[t,r]=e;if(s&&t!==s)return null;let l=ed.get(t),i=r.every(e=>w.has(e.id)),n=r.some(e=>w.has(e.id));return(0,a.jsxs)(en.Zp,{className:"overflow-hidden",children:[!s&&(0,a.jsx)(en.aR,{className:"pb-3",children:(0,a.jsxs)("div",{className:"flex items-center justify-between",children:[(0,a.jsxs)("div",{className:"flex items-center gap-3",children:[(0,a.jsx)(ee,{checked:i,ref:e=>{e&&"indeterminate"in e&&(e.indeterminate=n&&!i)},onCheckedChange:e=>{if(e)eJ(t);else{let e=r.map(e=>e.id),s=new Set(w);e.forEach(e=>s.delete(e)),_(s)}}}),(0,a.jsxs)("div",{children:[(0,a.jsxs)(en.ZB,{className:"flex items-center gap-2 text-lg",children:[(0,a.jsx)(J.A,{className:"h-5 w-5"}),t,(0,a.jsxs)("span",{className:"text-muted-foreground text-sm font-normal",children:["(",r.length," models)"]})]}),(0,a.jsxs)(en.BT,{children:[(null==l?void 0:l.group_url)?(0,a.jsxs)("span",{className:"flex items-center gap-1",children:[(0,a.jsx)(K.A,{className:"h-3 w-3"}),l.group_url]}):"Using default endpoint",(null==l?void 0:l.group_api_key)&&(0,a.jsxs)("span",{className:"ml-2 flex items-center gap-1",children:[(0,a.jsx)(Q.A,{className:"h-3 w-3"}),"Group API Key"]})]})]})]}),(0,a.jsx)("div",{className:"flex items-center gap-2",children:(0,a.jsxs)(eb,{children:[(0,a.jsx)(eN,{asChild:!0,children:(0,a.jsx)(x.$,{variant:"ghost",size:"sm",children:(0,a.jsx)(eR.A,{className:"h-4 w-4"})})}),(0,a.jsxs)(ew,{align:"end",children:[(0,a.jsxs)(e_,{onClick:()=>{l&&f({provider:t,models:r,groupData:l})},children:[(0,a.jsx)(q.A,{className:"mr-2 h-4 w-4"}),"Edit Group"]}),(0,a.jsxs)(e_,{onClick:()=>eJ(t),children:[(0,a.jsx)(eA.A,{className:"mr-2 h-4 w-4"}),"Select All"]}),(0,a.jsxs)(e_,{onClick:()=>eL(t),children:[(0,a.jsx)(eT.A,{className:"mr-2 h-4 w-4"}),"Refresh Models"]}),(0,a.jsx)(ek,{}),(0,a.jsxs)(e_,{onClick:()=>eQ(t),className:"text-destructive focus:text-destructive",children:[(0,a.jsx)(eF.A,{className:"mr-2 h-4 w-4"}),"Delete All Models Permanently"]})]})]})})]})}),(0,a.jsx)(en.Wu,{className:s?"pt-6":"pt-0",children:(0,a.jsx)("div",{className:"grid gap-3 md:grid-cols-2 lg:grid-cols-3",children:r.map(e=>(0,a.jsxs)(en.Zp,{className:(0,b.cn)("relative cursor-pointer overflow-hidden transition-all duration-200 hover:shadow-md",w.has(e.id)&&"ring-primary ring-2",c===e.id&&"ring-2 ring-blue-500",e.soft_deleted&&"border-red-200 bg-red-50 opacity-75"),onMouseEnter:()=>m(e.id),onMouseLeave:()=>m(null),children:[(0,a.jsx)(en.aR,{className:"pb-2",children:(0,a.jsxs)("div",{className:"flex items-start gap-2 pr-10",children:[(0,a.jsx)(ee,{checked:w.has(e.id),onCheckedChange:()=>eO(e.id),onClick:e=>e.stopPropagation(),className:"mt-1 flex-shrink-0"}),(0,a.jsxs)("div",{className:"flex w-[calc(100%-3rem)] items-start gap-2 overflow-hidden",children:[(0,a.jsx)("div",{className:"mt-1 flex-shrink-0",children:eY(e.modelType)}),(0,a.jsxs)("div",{className:"w-full overflow-hidden",children:[(0,a.jsx)("h3",{className:(0,b.cn)("overflow-hidden text-sm font-medium text-ellipsis whitespace-nowrap",e.soft_deleted&&"text-red-600 line-through"),children:e.name}),e.full_name!==e.name&&(0,a.jsx)("p",{className:"text-muted-foreground overflow-hidden text-xs text-ellipsis whitespace-nowrap",children:e.full_name})]})]}),(0,a.jsx)("div",{className:"absolute top-3 right-2",children:(0,a.jsxs)(eb,{children:[(0,a.jsx)(eN,{asChild:!0,children:(0,a.jsx)(x.$,{variant:"ghost",size:"sm",onClick:e=>e.stopPropagation(),className:"h-8 w-8 p-0",children:(0,a.jsx)(eR.A,{className:"h-4 w-4"})})}),(0,a.jsxs)(ew,{align:"end",children:[(0,a.jsxs)(e_,{onClick:s=>{s.stopPropagation(),v(e)},children:[(0,a.jsx)(q.A,{className:"mr-2 h-4 w-4"}),"Edit Model"]}),(0,a.jsx)(ek,{}),e.soft_deleted?(0,a.jsxs)(e_,{onClick:s=>{s.stopPropagation(),et.mutate(e.id)},className:"text-green-600 focus:text-green-700",children:[(0,a.jsx)(Z.A,{className:"mr-2 h-4 w-4"}),"Enable Model"]}):(0,a.jsxs)(e_,{onClick:s=>{s.stopPropagation(),eD(e.id)},className:"text-orange-600 focus:text-orange-700",children:[(0,a.jsx)(eP.A,{className:"mr-2 h-4 w-4"}),"Disable Model"]}),(0,a.jsxs)(e_,{onClick:s=>{s.stopPropagation(),eK(e.id)},className:"text-destructive focus:text-destructive",children:[(0,a.jsx)(eF.A,{className:"mr-2 h-4 w-4"}),"Delete"]})]})]})})]})}),(0,a.jsxs)(en.Wu,{className:"space-y-2 pt-0",onClick:()=>u(e.id),children:[(0,a.jsxs)("div",{className:"flex flex-wrap gap-1",children:[(0,a.jsx)("span",{className:(0,b.cn)("inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium",eU(e.modelType)),children:e.modelType}),"remote"===e.api_key_type&&(0,a.jsx)("span",{className:"inline-flex items-center rounded-full border border-blue-200 bg-blue-100 px-2.5 py-0.5 text-xs font-medium text-blue-800",children:"Remote"}),"remote"!==e.api_key_type&&(0,a.jsx)("span",{className:"inline-flex items-center rounded-full border border-emerald-200 bg-emerald-100 px-2.5 py-0.5 text-xs font-medium text-emerald-800",children:"Database"}),e.is_free&&(0,a.jsx)("span",{className:"inline-flex items-center rounded-full bg-yellow-100 px-2.5 py-0.5 text-xs font-medium text-yellow-800",children:"Free"}),!em(e)&&(0,a.jsxs)("span",{className:"inline-flex items-center rounded-full bg-red-100 px-2.5 py-0.5 text-xs font-medium text-red-800",children:[(0,a.jsx)(Q.A,{className:"mr-1 h-3 w-3"}),"No API Key"]}),em(e)&&!ey(e)&&(0,a.jsxs)("span",{className:"inline-flex items-center rounded-full bg-green-100 px-2.5 py-0.5 text-xs font-medium text-green-800",children:[(0,a.jsx)(J.A,{className:"mr-1 h-3 w-3"}),"Group Key"]}),ey(e)&&(0,a.jsxs)("span",{className:"inline-flex items-center rounded-full bg-purple-100 px-2.5 py-0.5 text-xs font-medium text-purple-800",children:[(0,a.jsx)(Q.A,{className:"mr-1 h-3 w-3"}),"Individual Key"]}),e.soft_deleted&&(0,a.jsxs)("span",{className:"inline-flex items-center rounded-full border border-red-300 bg-red-100 px-2.5 py-0.5 text-xs font-medium text-red-800",children:[(0,a.jsx)(eF.A,{className:"mr-1 h-3 w-3"}),"Deleted"]})]}),!e.is_free&&(0,a.jsxs)("div",{className:"text-muted-foreground space-y-1 text-xs",children:[(0,a.jsxs)("div",{className:"flex justify-between",children:[(0,a.jsx)("span",{className:"truncate",children:"Input:"}),(0,a.jsxs)("span",{className:"ml-2 truncate",children:[ei(e.input_cost),"/1M tokens"]})]}),(0,a.jsxs)("div",{className:"flex justify-between",children:[(0,a.jsx)("span",{className:"truncate",children:"Output:"}),(0,a.jsxs)("span",{className:"ml-2 truncate",children:[ei(e.output_cost),"/1M tokens"]})]})]}),e.description&&(0,a.jsx)("p",{className:"text-muted-foreground line-clamp-2 overflow-hidden text-xs break-words text-ellipsis",children:e.description})]})]},e.id))})})]},t)}),(0,a.jsx)(I,{isOpen:p,onModelAdd:ez,onCancel:()=>h(!1)}),g&&(0,a.jsx)(O,{model:g,providerId:g.provider_id?parseInt(g.provider_id):void 0,onModelUpdate:eE,onCancel:()=>v(null),isOpen:!!g}),j&&(0,a.jsx)($,{provider:j.provider,models:j.models,groupSettings:{group_api_key:j.groupData.group_api_key,group_url:j.groupData.group_url},onGroupUpdate:eI,onCancel:()=>f(null),isOpen:!!j}),(0,a.jsx)(el,{isOpen:y,onClose:()=>N(!1),onSuccess:eq}),(0,a.jsx)(ec,{open:k,onOpenChange:C,children:(0,a.jsxs)(ep,{children:[(0,a.jsxs)(eh,{children:[(0,a.jsx)(eg,{children:"Permanently Delete Selected Models"}),(0,a.jsxs)(ev,{children:["Are you sure you want to permanently delete ",w.size," ","selected models? This will completely remove them from the database and cannot be undone."]})]}),(0,a.jsxs)(ex,{children:[(0,a.jsx)(ef,{children:"Cancel"}),(0,a.jsx)(ej,{onClick:()=>{B.mutate(Array.from(w)),C(!1)},className:"bg-destructive text-destructive-foreground hover:bg-destructive/90",children:"Delete Models"})]})]})}),(0,a.jsx)(ec,{open:S,onOpenChange:F,children:(0,a.jsxs)(ep,{children:[(0,a.jsxs)(eh,{children:[(0,a.jsxs)(eg,{children:["Apply Group Settings to"," ",w.size===P.length&&s?"All Models in ".concat(s):"Selected Models"]}),(0,a.jsxs)(ev,{children:[w.size===P.length&&s?(0,a.jsxs)("div",{children:[(0,a.jsxs)("p",{children:["Are you sure you want to force ALL ",w.size," ","models in the ",(0,a.jsx)("strong",{children:s})," group to use group settings?"]}),(0,a.jsx)("p",{className:"mt-2 text-sm text-amber-600",children:(0,a.jsx)("strong",{children:"⚠️ This will override individual model configurations:"})})]}):(0,a.jsxs)("p",{children:["Are you sure you want to apply the group settings to"," ",w.size," selected models?"]}),(0,a.jsxs)("ul",{className:"mt-2 list-inside list-disc space-y-1 text-sm",children:[(0,a.jsx)("li",{children:"Remove individual API keys (models will use the group API key)"}),(null==t?void 0:t.group_url)&&(0,a.jsxs)("li",{children:["Set the URL to:"," ",(0,a.jsx)("code",{className:"rounded bg-gray-100 px-1",children:t.group_url})]}),(0,a.jsx)("li",{children:"Force models to use group configurations"}),w.size===P.length&&s&&(0,a.jsx)("li",{className:"font-medium text-amber-600",children:"This will affect ALL models in this provider group"})]})]})]}),(0,a.jsxs)(ex,{children:[(0,a.jsx)(ef,{children:"Cancel"}),(0,a.jsx)(ej,{onClick:()=>{H.mutate(Array.from(w)),F(!1)},className:"bg-blue-600 text-white hover:bg-blue-700",children:w.size===P.length&&s?"Force All ".concat(w.size," Models"):"Apply Group Settings"})]})]})}),(0,a.jsx)(ec,{open:M,onOpenChange:A,children:(0,a.jsxs)(ep,{children:[(0,a.jsxs)(eh,{children:[(0,a.jsx)(eg,{children:"Permanently Delete All Models"}),(0,a.jsxs)(ev,{children:["Are you sure you want to permanently delete ALL models? This will completely remove all ",U.length," models from the database. This action cannot be undone."]})]}),(0,a.jsxs)(ex,{children:[(0,a.jsx)(ef,{children:"Cancel"}),(0,a.jsx)(ej,{onClick:()=>{X.mutate(),A(!1)},className:"bg-destructive text-destructive-foreground hover:bg-destructive/90",children:"Delete All Models"})]})]})})]})}var eE=t(7916);u.Ik({id:u.Yj(),created_at:u.Yj(),updated_at:u.Yj(),provider:u.Yj(),group_api_key:u.Yj().optional(),group_url:u.Yj().optional()}),u.Ik({provider:u.Yj(),group_api_key:u.Yj().optional(),group_url:u.Yj().optional()}),u.Ik({provider:u.Yj().optional(),group_api_key:u.Yj().optional(),group_url:u.Yj().optional()}),u.Ik({base_endpoint:u.Yj(),api_key:u.Yj().optional(),provider_name:u.Yj(),default_input_cost:u.ai(),default_output_cost:u.ai(),default_min_cost:u.ai()}),u.Ik({collected_count:u.ai(),skipped_count:u.ai(),models:u.YO(u.bz()),errors:u.YO(u.Yj())}),u.Ik({provider_id:u.Yj()}),u.Ik({refreshed_count:u.ai(),created_count:u.ai(),restored_count:u.ai(),deleted_count:u.ai(),errors:u.YO(u.Yj())}),u.Ik({total_refreshed_count:u.ai(),total_created_count:u.ai(),total_restored_count:u.ai(),total_deleted_count:u.ai(),provider_results:u.YO(u.Ik({provider_name:u.Yj(),refreshed_count:u.ai(),created_count:u.ai(),restored_count:u.ai(),deleted_count:u.ai(),errors:u.YO(u.Yj())})),errors:u.YO(u.Yj())});let eI=u.Ik({id:u.Yj(),canonical_slug:u.Yj().optional(),hugging_face_id:u.Yj().optional(),name:u.Yj().optional(),created:u.ai(),description:u.Yj().optional(),context_length:u.ai().optional(),architecture:u.bz().optional(),pricing:u.bz().optional(),top_provider:u.bz().optional(),per_request_limits:u.bz().optional(),supported_parameters:u.YO(u.Yj()).optional(),provider_url:u.Yj(),provider_name:u.Yj().optional(),group_id:u.Yj().optional()});function eq(e,s){var t,a;return{id:e.id,name:e.name,full_name:e.full_name,description:e.description,modelType:e.model_type||"text",isEnabled:!e.soft_deleted,createdAt:e.created_at,updatedAt:e.updated_at,provider:e.provider||s||"",url:e.url,api_key:e.api_key,input_cost:Number(e.input_cost),output_cost:Number(e.output_cost),min_cost_per_request:Number(e.min_cost_per_request||"0"),min_cash_per_request:Number(e.min_cash_per_request||"0"),contextLength:e.context_length,apiKeyRequired:!0,provider_id:e.provider_id,is_free:null!=(t=e.is_free)&&t,soft_deleted:null!=(a=e.soft_deleted)&&a,has_own_api_key:e.has_own_api_key,api_key_type:e.api_key_type}}u.Ik({object:u.Yj(),data:u.YO(eI)}),u.Ik({id:u.Yj(),created_at:u.Yj(),updated_at:u.Yj(),full_name:u.Yj(),name:u.Yj(),url:u.Yj(),input_cost:u.Yj(),output_cost:u.Yj(),api_key:u.Yj().optional(),min_cash_per_request:u.Yj(),min_cost_per_request:u.Yj().optional(),provider_id:u.Yj().optional(),provider:u.Yj().optional(),soft_deleted:u.zM().optional(),architecture:u.bz().optional(),model_type:u.Yj().optional(),description:u.Yj().optional(),context_length:u.ai().optional(),is_free:u.zM().optional(),has_own_api_key:u.zM(),api_key_type:u.Yj()});class eL{static async createModelGroup(e){return await eE.apiClient.post("/api/model-groups",{provider:e.provider,group_api_key:e.group_api_key,group_url:e.group_url})}static async getModelGroups(){return await eE.apiClient.get("/api/model-groups")}static async getModelGroup(e){return await eE.apiClient.get("/api/model-groups/".concat(e))}static async updateModelGroup(e,s){return await eE.apiClient.put("/api/model-groups/".concat(e),{provider:s.provider,group_api_key:s.group_api_key,group_url:s.group_url})}static async deleteModelGroup(e){return await eE.apiClient.delete("/api/model-groups/".concat(e))}static async createModel(e){let s={full_name:e.name,name:e.name,url:e.url,api_key:e.api_key,input_cost:e.input_cost,output_cost:e.output_cost,min_cost_per_request:e.min_cost_per_request,min_cash_per_request:e.min_cash_per_request,provider:e.provider,model_type:e.modelType,description:e.description,context_length:e.contextLength,is_free:e.is_free};return eq(await eE.apiClient.post("/api/models",s))}static async getModels(){return(await eE.apiClient.get("/api/models")).map(e=>eq(e))}static async getModel(e){return eq(await eE.apiClient.get("/api/models/".concat(e)))}static async getModelsByProvider(e){return(await eE.apiClient.get("/api/models/provider/".concat(e))).map(e=>eq(e))}static async updateModel(e,s){let t={name:s.name,url:s.url,api_key:s.api_key,input_cost:s.input_cost,output_cost:s.output_cost,min_cost_per_request:s.min_cost_per_request,min_cash_per_request:s.min_cash_per_request,provider:s.provider,model_type:s.modelType,description:s.description,context_length:s.contextLength,is_free:s.is_free};return eq(await eE.apiClient.put("/api/models/".concat(e),t))}static async deleteModel(e){return await eE.apiClient.delete("/api/models/".concat(e))}static async softDeleteModel(e){return await eE.apiClient.put("/api/models/".concat(e,"/soft-delete"),{})}static async deleteModels(e){return await eE.apiClient.post("/api/models/bulk/delete",{model_ids:e})}static async softDeleteModels(e){return await eE.apiClient.post("/api/models/bulk/soft-delete",{model_ids:e})}static async bulkUpdateModels(e,s){return await eE.apiClient.post("/api/models/bulk/update",{model_ids:e,api_key:s.api_key,url:s.url})}static async deleteAllModels(){return await eE.apiClient.post("/api/models/all/delete",{})}static async deleteModelsByProvider(e){return await eE.apiClient.post("/api/models/provider/".concat(e,"/delete"),{})}static async restoreModels(e){return await eE.apiClient.post("/api/models/bulk/restore",{model_ids:e})}static async getSoftDeletedModels(){return(await eE.apiClient.get("/api/models/deleted")).map(e=>eq(e))}static async collectModels(e){return await eE.apiClient.post("/api/models/collect",e)}static async getModelsWithProviders(){let[e,s]=await Promise.all([eE.apiClient.get("/api/models"),this.getModelGroups()]),t=new Map(s.map(e=>[e.id,e.provider]));return{models:e.map(e=>eq(e,t.get(e.provider_id||"")||"Unknown")),groups:s}}static async listModels(e){let{models:s}=await this.getModelsWithProviders();return(null==e?void 0:e.enabled)!==!1?s.filter(e=>e.isEnabled):s}static async getModelInfo(e){return await this.getModel(e)}static async refreshModels(e){return await eE.apiClient.post("/api/models/refresh",e)}static async refreshAllModels(){return await eE.apiClient.post("/api/models/refresh-all",{})}static async getEnhancedModels(){return await eE.apiClient.get("/api/enhanced-models")}static async getEnhancedModelsByProvider(e){return await eE.apiClient.get("/api/enhanced-models/".concat(encodeURIComponent(e)))}static downloadModelsAsJson(e){let s=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"models.json",t=new Blob([JSON.stringify(e,null,2)],{type:"application/json"}),a=URL.createObjectURL(t),r=document.createElement("a");r.href=a,r.download=s,r.click(),URL.revokeObjectURL(a)}static async downloadAllEnhancedModels(){try{let e=await this.getEnhancedModels();this.downloadModelsAsJson(e,"enhanced-models-all.json")}catch(e){throw console.error("Error downloading all enhanced models:",e),e}}static async downloadEnhancedModelsByProvider(e){try{let s=await this.getEnhancedModelsByProvider(e);this.downloadModelsAsJson(s,"enhanced-models-".concat(e.toLowerCase(),".json"))}catch(s){throw console.error("Error downloading enhanced models for provider ".concat(e,":"),s),s}}static async testModel(e,s,t){return await eE.apiClient.post("/api/models/test",{model_id:e,endpoint_type:s,request_data:t})}}var eY=t(2390),eU=t(4717);function eO(e){var s,t;let{models:l}=e,[o,d]=(0,r.useState)(""),[c,u]=(0,r.useState)("You are a helpful assistant. Please respond concisely."),[m,p]=(0,r.useState)("Hello! Can you tell me what model you are and confirm that you are working correctly?"),[h,g]=(0,r.useState)(150),[j,y]=(0,r.useState)(.7),[b,w]=(0,r.useState)(null),[_,k]=(0,r.useState)(null),{data:C=[]}=(0,i.I)({queryKey:["model-groups"],queryFn:()=>eL.getModelGroups(),refetchOnWindowFocus:!1}),M=l.find(e=>e.id===o),A=(0,n.n)({mutationFn:async e=>{if(!M)throw Error("No model selected");k(null),w(null);try{console.log("Testing model via proxy: ".concat(M.name)),console.log("Request payload:",e);let s=await eL.testModel(M.id,"chat-completions",e);if(!s.success)throw Error(s.error||"Test failed");return s.data}catch(e){throw console.error("Model test error via proxy:",e),Error(e instanceof Error?e.message:"Failed to test model via proxy")}},onSuccess:e=>{w(e),E.oR.success("Model test completed successfully!")},onError:e=>{let s=(null==e?void 0:e.message)||"Unknown error occurred";k(s),E.oR.error("Model test failed: ".concat(s))}}),S=async()=>{if(!M)return void E.oR.error("Please select a model to test");if(!m.trim())return void E.oR.error("Please enter a test message");let e=[];c.trim()&&e.push({role:"system",content:c.trim()}),e.push({role:"user",content:m.trim()});let s={model:M.name,messages:e,max_tokens:h,temperature:j};A.mutate(s)},F=l.filter(e=>e.isEnabled),P=M?(e=>{let s=C.find(s=>s.provider===e.provider),t=e.api_key||(null==s?void 0:s.group_api_key),a=e.url;return e.url.startsWith("/")&&(null==s?void 0:s.group_url)&&(a="".concat(s.group_url.replace(/\/$/,"")).concat(e.url)),"text"!==e.modelType||a.includes("/chat/completions")||(a=a.replace(/\/$/,"")+"/chat/completions"),{apiKey:t,endpointUrl:a,group:s}})(M):null;return(0,a.jsxs)(en.Zp,{className:"w-full",children:[(0,a.jsxs)(en.aR,{children:[(0,a.jsxs)(en.ZB,{className:"flex items-center gap-2",children:[(0,a.jsx)(eY.A,{className:"h-5 w-5"}),"Model Credential Tester"]}),(0,a.jsx)(en.BT,{children:"Test model functionality by sending chat completion requests through the secure proxy (resolves CORS and network issues)"})]}),(0,a.jsxs)(en.Wu,{className:"space-y-6",children:[(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(N.J,{htmlFor:"model-select",children:"Select Model"}),(0,a.jsxs)(f.l6,{value:o,onValueChange:d,children:[(0,a.jsx)(f.bq,{id:"model-select",children:(0,a.jsx)(f.yv,{placeholder:"Choose a model to test..."})}),(0,a.jsx)(f.gC,{children:F.map(e=>(0,a.jsx)(f.eb,{value:e.id,children:(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)("span",{children:e.name}),(0,a.jsx)(er.E,{variant:"outline",className:"text-xs",children:e.provider}),e.is_free&&(0,a.jsx)(er.E,{variant:"secondary",className:"text-xs",children:"Free"})]})},e.id))})]}),M&&P&&(0,a.jsxs)("div",{className:"text-muted-foreground bg-muted space-y-2 rounded-md p-3 text-sm",children:[(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)(K.A,{className:"h-4 w-4"}),(0,a.jsxs)("span",{children:[(0,a.jsx)("strong",{children:"Endpoint:"})," ",P.endpointUrl]})]}),(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)(Q.A,{className:"h-4 w-4"}),(0,a.jsxs)("span",{children:[(0,a.jsx)("strong",{children:"API Key:"})," ",P.apiKey?"".concat(P.apiKey.substring(0,8),"..."):"Not configured"]}),(0,a.jsx)(er.E,{variant:P.apiKey?"default":"destructive",className:"text-xs",children:M.api_key_type||"Unknown"})]}),(0,a.jsx)("div",{children:(0,a.jsxs)("span",{children:[(0,a.jsx)("strong",{children:"Provider:"})," ",M.provider]})}),(0,a.jsx)("div",{children:(0,a.jsxs)("span",{children:[(0,a.jsx)("strong",{children:"Type:"})," ",M.modelType]})}),M.contextLength&&(0,a.jsx)("div",{children:(0,a.jsxs)("span",{children:[(0,a.jsx)("strong",{children:"Context Length:"})," ",M.contextLength.toLocaleString()]})}),!P.apiKey&&(0,a.jsxs)(V.Fc,{variant:"default",className:"mt-2",children:[(0,a.jsx)(G.A,{className:"h-4 w-4"}),(0,a.jsx)(V.TN,{children:"No API key configured for this model. Testing may still work if the model is free or if authentication is handled elsewhere. For models requiring authentication, please add an API key to the model or its provider group."})]})]})]}),(0,a.jsxs)("div",{className:"grid grid-cols-1 gap-4 md:grid-cols-2",children:[(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(N.J,{htmlFor:"max-tokens",children:"Max Tokens"}),(0,a.jsx)("input",{id:"max-tokens",type:"number",min:1,max:4e3,value:h,onChange:e=>g(parseInt(e.target.value)||150),className:"border-input bg-background w-full rounded-md border px-3 py-2 text-sm"})]}),(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(N.J,{htmlFor:"temperature",children:"Temperature"}),(0,a.jsx)("input",{id:"temperature",type:"number",min:0,max:2,step:.1,value:j,onChange:e=>y(parseFloat(e.target.value)||.7),className:"border-input bg-background w-full rounded-md border px-3 py-2 text-sm"})]})]}),(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(N.J,{htmlFor:"system-message",children:"System Message (Optional)"}),(0,a.jsx)(v.T,{id:"system-message",placeholder:"Enter system message...",value:c,onChange:e=>u(e.target.value),rows:2})]}),(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(N.J,{htmlFor:"user-message",children:"Test Message"}),(0,a.jsx)(v.T,{id:"user-message",placeholder:"Enter your test message...",value:m,onChange:e=>p(e.target.value),rows:3})]}),(0,a.jsx)(x.$,{onClick:S,disabled:!o||A.isPending,className:"w-full",children:A.isPending?(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(z.A,{className:"mr-2 h-4 w-4 animate-spin"}),"Testing Model..."]}):(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(eY.A,{className:"mr-2 h-4 w-4"}),"Test Model (via Proxy)"]})}),_&&(0,a.jsxs)(V.Fc,{variant:"destructive",children:[(0,a.jsx)(eU.A,{className:"h-4 w-4"}),(0,a.jsxs)(V.TN,{children:[(0,a.jsx)("strong",{children:"Test Failed:"})," ",_]})]}),b&&(0,a.jsxs)(V.Fc,{children:[(0,a.jsx)(Z.A,{className:"h-4 w-4"}),(0,a.jsxs)(V.TN,{children:[(0,a.jsx)("strong",{children:"Test Successful!"})," Model responded correctly via secure proxy."]})]}),b&&(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(N.J,{children:"Model Response"}),(0,a.jsx)("div",{className:"bg-muted rounded-md p-4",children:(0,a.jsx)("p",{className:"text-sm whitespace-pre-wrap",children:(null==(t=b.choices[0])||null==(s=t.message)?void 0:s.content)||"No content in response"})})]}),b.usage&&(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(N.J,{children:"Usage Statistics"}),(0,a.jsxs)("div",{className:"grid grid-cols-3 gap-4 text-sm",children:[(0,a.jsxs)("div",{className:"bg-muted rounded p-2 text-center",children:[(0,a.jsx)("div",{className:"font-semibold",children:b.usage.prompt_tokens}),(0,a.jsx)("div",{className:"text-muted-foreground",children:"Prompt Tokens"})]}),(0,a.jsxs)("div",{className:"bg-muted rounded p-2 text-center",children:[(0,a.jsx)("div",{className:"font-semibold",children:b.usage.completion_tokens}),(0,a.jsx)("div",{className:"text-muted-foreground",children:"Completion Tokens"})]}),(0,a.jsxs)("div",{className:"bg-muted rounded p-2 text-center",children:[(0,a.jsx)("div",{className:"font-semibold",children:b.usage.total_tokens}),(0,a.jsx)("div",{className:"text-muted-foreground",children:"Total Tokens"})]})]})]}),(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(N.J,{children:"Raw Response"}),(0,a.jsxs)("details",{className:"group",children:[(0,a.jsxs)("summary",{className:"text-muted-foreground hover:text-foreground cursor-pointer text-sm",children:[(0,a.jsx)(G.A,{className:"mr-1 inline h-4 w-4"}),"Show detailed response data"]}),(0,a.jsx)("pre",{className:"bg-muted mt-2 max-h-60 overflow-auto rounded-md p-4 text-xs",children:JSON.stringify(b,null,2)})]})]})]})]})]})}var eJ=t(4938),eQ=t(7137),eK=t(9472),eD=t(413),eG=t(9911),eV=t(4713),e$=t(9935),eB=t(8019);let eW={"chat-completions":{name:"Chat Completions",path:"/chat/completions",icon:eJ.A,description:"Test conversational AI with chat completion requests"},"vision-chat":{name:"Vision Chat (Image + Text)",path:"/chat/completions",icon:eQ.A,description:"Analyze images with text prompts using vision models"},embeddings:{name:"Embeddings",path:"/embeddings",icon:eK.A,description:"Generate embeddings for text input"},images:{name:"Image Generation",path:"/images/generations",icon:eD.A,description:"Generate images from text prompts"},"audio-speech":{name:"Text-to-Speech",path:"/audio/speech",icon:eG.A,description:"Convert text to speech audio"},"audio-transcription":{name:"Audio Transcription",path:"/audio/transcriptions",icon:eV.A,description:"Transcribe audio files to text"},models:{name:"List Models",path:"/model",icon:eK.A,description:"List all available models from the provider"}},eZ={"chat-completions":{systemMessage:"You are a helpful assistant. Please respond concisely.",userMessage:"Hello! Can you tell me what model you are and confirm that you are working correctly?",maxTokens:150,temperature:.7},"vision-chat":{systemMessage:"You are a helpful assistant that can analyze images. Please describe what you see.",userMessage:"What do you see in this image? Please provide a detailed description.",maxTokens:300,temperature:.7,imageDetail:"auto"},embeddings:{input:"The quick brown fox jumps over the lazy dog.",encoding_format:"float"},images:{prompt:"A beautiful sunset over a mountain landscape",n:1,size:"1024x1024",quality:"standard",style:"vivid"},"audio-speech":{input:"Hello, this is a test of the text-to-speech functionality.",voice:"alloy",response_format:"mp3",speed:1},"audio-transcription":{prompt:"This is a test transcription.",response_format:"json",temperature:0,language:""}};function eH(e){var s,t,l,o,d,c,u,m,p,h,j;let y,b,w,_,k,C,{models:M}=e,[A,S]=(0,r.useState)(""),[F,P]=(0,r.useState)("chat-completions"),[R,T]=(0,r.useState)(null),[I,q]=(0,r.useState)(null),[L,Y]=(0,r.useState)(eZ["chat-completions"].systemMessage),[U,O]=(0,r.useState)(eZ["chat-completions"].userMessage),[J,D]=(0,r.useState)(eZ["chat-completions"].maxTokens),[$,B]=(0,r.useState)(eZ["chat-completions"].temperature),[W,H]=(0,r.useState)(eZ["vision-chat"].systemMessage),[X,ee]=(0,r.useState)(eZ["vision-chat"].userMessage),[es,et]=(0,r.useState)(eZ["vision-chat"].maxTokens),[ea,el]=(0,r.useState)(eZ["vision-chat"].temperature),[ei,eo]=(0,r.useState)(eZ["vision-chat"].imageDetail),[ed,ec]=(0,r.useState)(null),[eu,em]=(0,r.useState)(null),[ep,eh]=(0,r.useState)(!1),[ex,eg]=(0,r.useState)(null),[ev,ej]=(0,r.useState)(null),[ef,ey]=(0,r.useState)(null),[eb,eN]=(0,r.useState)(eZ["audio-transcription"].prompt),[ew,e_]=(0,r.useState)(eZ["audio-transcription"].response_format),[ek,eC]=(0,r.useState)(eZ["audio-transcription"].temperature),[eM,eA]=(0,r.useState)(eZ["audio-transcription"].language),eS=(0,r.useRef)(null),eF=(0,r.useRef)(null),[eP,eR]=(0,r.useState)(eZ.embeddings.input),[eT,ez]=(0,r.useState)(eZ.embeddings.encoding_format),[eE,eI]=(0,r.useState)(eZ.images.prompt),[eq,eO]=(0,r.useState)(eZ.images.n),[eJ,eQ]=(0,r.useState)(eZ.images.size),[eH,eX]=(0,r.useState)(eZ.images.quality),[e0,e2]=(0,r.useState)(eZ.images.style),[e4,e1]=(0,r.useState)(eZ["audio-speech"].input),[e5,e3]=(0,r.useState)(eZ["audio-speech"].voice),[e6,e9]=(0,r.useState)(eZ["audio-speech"].response_format),[e8,e7]=(0,r.useState)(eZ["audio-speech"].speed),{data:se=[]}=(0,i.I)({queryKey:["model-groups"],queryFn:()=>eL.getModelGroups(),refetchOnWindowFocus:!1}),ss=M.find(e=>e.id===A),st=e=>{var s;let t=null==(s=e.target.files)?void 0:s[0];t&&(t.type.startsWith("image/")?(ec(t),em(URL.createObjectURL(t))):E.oR.error("Please select a valid image file"))},sa=e=>{var s;let t=null==(s=e.target.files)?void 0:s[0];t&&(t.type.startsWith("audio/")?(eg(t),ej(URL.createObjectURL(t))):E.oR.error("Please select a valid audio file"))},sr=async()=>{try{let e=await navigator.mediaDevices.getUserMedia({audio:!0}),s=new MediaRecorder(e),t=[];s.ondataavailable=e=>{e.data.size>0&&t.push(e.data)},s.onstop=()=>{let s=new Blob(t,{type:"audio/webm"}),a=new File([s],"recording.webm",{type:"audio/webm"});eg(a);let r=URL.createObjectURL(s);ej(r),e.getTracks().forEach(e=>e.stop())},s.start(),ey(s),eh(!0),E.oR.success("Recording started")}catch(e){console.error("Error starting recording:",e),E.oR.error("Failed to start recording. Please check microphone permissions.")}},sl=()=>{ef&&(ef.stop(),ey(null),eh(!1),E.oR.success("Recording stopped"))},si=e=>new Promise((s,t)=>{let a=new FileReader;a.readAsDataURL(e),a.onload=()=>s(a.result),a.onerror=e=>t(e)}),sn=async()=>{if(!ss)return null;switch(F){case"chat-completions":let e=[];return L.trim()&&e.push({role:"system",content:L.trim()}),e.push({role:"user",content:U.trim()}),{model:ss.name,messages:e,max_tokens:J,temperature:$};case"vision-chat":if(!ed)throw Error("Please select an image for vision analysis");let s=await si(ed),t=[];return W.trim()&&t.push({role:"system",content:W.trim()}),t.push({role:"user",content:[{type:"text",text:X.trim()},{type:"image_url",image_url:{url:s,detail:ei}}]}),{model:ss.name,messages:t,max_tokens:es,temperature:ea};case"embeddings":return{model:ss.name,input:eP,encoding_format:eT};case"images":return{model:ss.name,prompt:eE,n:eq,size:eJ,quality:eH,style:e0};case"audio-speech":return{model:ss.name,input:e4,voice:e5,response_format:e6,speed:e8};case"audio-transcription":if(!ex)throw Error("Please record or upload an audio file for transcription");return{model:ss.name,file:ex,prompt:eb.trim()||void 0,response_format:ew,temperature:ek,language:eM.trim()||void 0};default:return null}},so=(0,n.n)({mutationFn:async e=>{if(!ss)throw Error("No model selected");q(null),T(null);try{console.log("Testing endpoint via proxy: ".concat(F)),console.log("Request payload:",e);let s=await eL.testModel(ss.id,F,e);if(!s.success)throw Error(s.error||"Test failed");return s.data}catch(e){throw console.error("API endpoint test error via proxy:",e),Error(e instanceof Error?e.message:"Failed to test endpoint via proxy")}},onSuccess:e=>{T(e),E.oR.success("".concat(eW[F].name," test completed successfully!"))},onError:e=>{let s=(null==e?void 0:e.message)||"Unknown error occurred";q(s),E.oR.error("".concat(eW[F].name," test failed: ").concat(s))}}),sd=async()=>{if(!ss)return void E.oR.error("Please select a model to test");if("chat-completions"===F&&!U.trim())return void E.oR.error("Please enter a test message");if("vision-chat"===F){if(!X.trim())return void E.oR.error("Please enter a test message");if(!ed)return void E.oR.error("Please select an image for vision analysis")}if("embeddings"===F&&!eP.trim())return void E.oR.error("Please enter text for embedding");if("images"===F&&!eE.trim())return void E.oR.error("Please enter an image prompt");if("audio-speech"===F&&!e4.trim())return void E.oR.error("Please enter text for speech synthesis");if("audio-transcription"===F&&!ex)return void E.oR.error("Please record or upload an audio file for transcription");let e=await sn();so.mutate(e)},sc=M.filter(e=>e.isEnabled),su=ss?(e=>{let s=se.find(s=>s.provider===e.provider),t=e.api_key||(null==s?void 0:s.group_api_key),a=e.url;return e.url.startsWith("/")&&(null==s?void 0:s.group_url)&&(a="".concat(s.group_url.replace(/\/$/,"")).concat(e.url)),{apiKey:t,baseUrl:a=a.replace(/\/v1\/.*$/,"").replace(/\/$/,""),group:s}})(ss):null,sm=su?(k=su.baseUrl,C=eW[F].path,"".concat(k).concat(C)):"";return(0,a.jsxs)(en.Zp,{className:"w-full",children:[(0,a.jsxs)(en.aR,{children:[(0,a.jsxs)(en.ZB,{className:"flex items-center gap-2",children:[(0,a.jsx)(eY.A,{className:"h-5 w-5"}),"API Endpoint Tester"]}),(0,a.jsx)(en.BT,{children:"Comprehensive testing of OpenAI-compatible API endpoints through the secure proxy (resolves CORS and network issues)"})]}),(0,a.jsxs)(en.Wu,{className:"space-y-6",children:[(0,a.jsxs)("div",{className:"grid grid-cols-1 gap-4 md:grid-cols-2",children:[(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(N.J,{htmlFor:"model-select",children:"Select Model"}),(0,a.jsxs)(f.l6,{value:A,onValueChange:S,children:[(0,a.jsx)(f.bq,{id:"model-select",children:(0,a.jsx)(f.yv,{placeholder:"Choose a model to test..."})}),(0,a.jsx)(f.gC,{children:sc.map(e=>(0,a.jsx)(f.eb,{value:e.id,children:(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)("span",{children:e.name}),(0,a.jsx)(er.E,{variant:"outline",className:"text-xs",children:e.provider}),e.is_free&&(0,a.jsx)(er.E,{variant:"secondary",className:"text-xs",children:"Free"})]})},e.id))})]})]}),(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(N.J,{htmlFor:"endpoint-select",children:"API Endpoint"}),(0,a.jsxs)(f.l6,{value:F,onValueChange:e=>P(e),children:[(0,a.jsx)(f.bq,{id:"endpoint-select",children:(0,a.jsx)(f.yv,{})}),(0,a.jsx)(f.gC,{children:Object.entries(eW).map(e=>{let[s,t]=e,r=t.icon;return(0,a.jsx)(f.eb,{value:s,children:(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)(r,{className:"h-4 w-4"}),(0,a.jsx)("span",{children:t.name})]})},s)})})]})]})]}),ss&&su&&(0,a.jsxs)("div",{className:"text-muted-foreground bg-muted space-y-2 rounded-md p-3 text-sm",children:[(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)(K.A,{className:"h-4 w-4"}),(0,a.jsxs)("span",{children:[(0,a.jsx)("strong",{children:"Endpoint:"})," ",sm]})]}),(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)(Q.A,{className:"h-4 w-4"}),(0,a.jsxs)("span",{children:[(0,a.jsx)("strong",{children:"API Key:"})," ",su.apiKey?"".concat(su.apiKey.substring(0,8),"..."):"Not configured"]}),(0,a.jsx)(er.E,{variant:su.apiKey?"default":"destructive",className:"text-xs",children:ss.api_key_type||"Unknown"})]}),(0,a.jsx)("div",{children:(0,a.jsxs)("span",{children:[(0,a.jsx)("strong",{children:"Provider:"})," ",ss.provider]})}),(0,a.jsx)("div",{children:(0,a.jsxs)("span",{children:[(0,a.jsx)("strong",{children:"Description:"})," ",eW[F].description]})}),!su.apiKey&&(0,a.jsxs)(V.Fc,{variant:"default",className:"mt-2",children:[(0,a.jsx)(G.A,{className:"h-4 w-4"}),(0,a.jsx)(V.TN,{children:"No API key configured for this model. Testing may still work if the model is free or if authentication is handled elsewhere. For models requiring authentication, please add an API key to the model or its provider group."})]})]}),(()=>{switch(F){case"chat-completions":return(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsxs)("div",{className:"grid grid-cols-1 gap-4 md:grid-cols-2",children:[(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(N.J,{htmlFor:"max-tokens",children:"Max Tokens"}),(0,a.jsx)(g.p,{id:"max-tokens",type:"number",min:1,max:4e3,value:J,onChange:e=>D(parseInt(e.target.value)||150)})]}),(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(N.J,{htmlFor:"temperature",children:"Temperature"}),(0,a.jsx)(g.p,{id:"temperature",type:"number",min:0,max:2,step:.1,value:$,onChange:e=>B(parseFloat(e.target.value)||.7)})]})]}),(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(N.J,{htmlFor:"system-message",children:"System Message (Optional)"}),(0,a.jsx)(v.T,{id:"system-message",placeholder:"Enter system message...",value:L,onChange:e=>Y(e.target.value),rows:2})]}),(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(N.J,{htmlFor:"user-message",children:"Test Message"}),(0,a.jsx)(v.T,{id:"user-message",placeholder:"Enter your test message...",value:U,onChange:e=>O(e.target.value),rows:3})]})]});case"vision-chat":return(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsxs)("div",{className:"grid grid-cols-1 gap-4 md:grid-cols-2",children:[(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(N.J,{htmlFor:"vision-max-tokens",children:"Max Tokens"}),(0,a.jsx)(g.p,{id:"vision-max-tokens",type:"number",min:1,max:4e3,value:es,onChange:e=>et(parseInt(e.target.value)||300)})]}),(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(N.J,{htmlFor:"vision-temperature",children:"Temperature"}),(0,a.jsx)(g.p,{id:"vision-temperature",type:"number",min:0,max:2,step:.1,value:ea,onChange:e=>el(parseFloat(e.target.value)||.7)})]})]}),(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(N.J,{htmlFor:"vision-system-message",children:"System Message (Optional)"}),(0,a.jsx)(v.T,{id:"vision-system-message",placeholder:"Enter system message...",value:W,onChange:e=>H(e.target.value),rows:2})]}),(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(N.J,{htmlFor:"vision-user-message",children:"Test Message"}),(0,a.jsx)(v.T,{id:"vision-user-message",placeholder:"Enter your test message...",value:X,onChange:e=>ee(e.target.value),rows:3})]}),(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(N.J,{htmlFor:"image-detail",children:"Image Detail"}),(0,a.jsxs)(f.l6,{value:ei,onValueChange:e=>eo(e),children:[(0,a.jsx)(f.bq,{children:(0,a.jsx)(f.yv,{})}),(0,a.jsxs)(f.gC,{children:[(0,a.jsx)(f.eb,{value:"low",children:"Low"}),(0,a.jsx)(f.eb,{value:"high",children:"High"}),(0,a.jsx)(f.eb,{value:"auto",children:"Auto"})]})]})]}),(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(N.J,{htmlFor:"image-upload",children:"Upload Image (Optional)"}),(0,a.jsx)(g.p,{type:"file",accept:"image/*",onChange:st,ref:eS,className:"file:mr-4 file:rounded-full file:border-0 file:bg-blue-50 file:px-4 file:py-2 file:text-sm file:font-semibold file:text-blue-700 hover:file:bg-blue-100"}),ed&&(0,a.jsxs)("div",{className:"mt-2 flex items-center gap-2",children:[(0,a.jsx)(eD.A,{className:"h-5 w-5 text-blue-500"}),(0,a.jsxs)("span",{className:"text-muted-foreground text-sm",children:["Selected image: ",ed.name]}),(0,a.jsx)(x.$,{variant:"outline",size:"sm",onClick:()=>ec(null),className:"ml-auto",children:"Remove"})]}),eu&&(0,a.jsx)("div",{className:"relative mt-2 aspect-square w-32 overflow-hidden rounded-md border",children:(0,a.jsx)(eB.default,{src:eu,alt:"Image preview",fill:!0,className:"object-cover"})})]})]});case"embeddings":return(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(N.J,{htmlFor:"encoding-format",children:"Encoding Format"}),(0,a.jsxs)(f.l6,{value:eT,onValueChange:e=>ez(e),children:[(0,a.jsx)(f.bq,{children:(0,a.jsx)(f.yv,{})}),(0,a.jsxs)(f.gC,{children:[(0,a.jsx)(f.eb,{value:"float",children:"Float"}),(0,a.jsx)(f.eb,{value:"base64",children:"Base64"})]})]})]}),(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(N.J,{htmlFor:"embedding-input",children:"Text Input"}),(0,a.jsx)(v.T,{id:"embedding-input",placeholder:"Enter text to generate embeddings for...",value:eP,onChange:e=>eR(e.target.value),rows:4})]})]});case"images":return(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsxs)("div",{className:"grid grid-cols-1 gap-4 md:grid-cols-2 lg:grid-cols-3",children:[(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(N.J,{htmlFor:"image-count",children:"Number of Images"}),(0,a.jsx)(g.p,{id:"image-count",type:"number",min:1,max:10,value:eq,onChange:e=>eO(parseInt(e.target.value)||1)})]}),(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(N.J,{htmlFor:"image-size",children:"Size"}),(0,a.jsxs)(f.l6,{value:eJ,onValueChange:e=>eQ(e),children:[(0,a.jsx)(f.bq,{children:(0,a.jsx)(f.yv,{})}),(0,a.jsxs)(f.gC,{children:[(0,a.jsx)(f.eb,{value:"256x256",children:"256x256"}),(0,a.jsx)(f.eb,{value:"512x512",children:"512x512"}),(0,a.jsx)(f.eb,{value:"1024x1024",children:"1024x1024"}),(0,a.jsx)(f.eb,{value:"1792x1024",children:"1792x1024"}),(0,a.jsx)(f.eb,{value:"1024x1792",children:"1024x1792"})]})]})]}),(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(N.J,{htmlFor:"image-quality",children:"Quality"}),(0,a.jsxs)(f.l6,{value:eH,onValueChange:e=>eX(e),children:[(0,a.jsx)(f.bq,{children:(0,a.jsx)(f.yv,{})}),(0,a.jsxs)(f.gC,{children:[(0,a.jsx)(f.eb,{value:"standard",children:"Standard"}),(0,a.jsx)(f.eb,{value:"hd",children:"HD"})]})]})]})]}),(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(N.J,{htmlFor:"image-style",children:"Style"}),(0,a.jsxs)(f.l6,{value:e0,onValueChange:e=>e2(e),children:[(0,a.jsx)(f.bq,{children:(0,a.jsx)(f.yv,{})}),(0,a.jsxs)(f.gC,{children:[(0,a.jsx)(f.eb,{value:"vivid",children:"Vivid"}),(0,a.jsx)(f.eb,{value:"natural",children:"Natural"})]})]})]}),(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(N.J,{htmlFor:"image-prompt",children:"Image Prompt"}),(0,a.jsx)(v.T,{id:"image-prompt",placeholder:"Describe the image you want to generate...",value:eE,onChange:e=>eI(e.target.value),rows:3})]})]});case"audio-speech":return(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsxs)("div",{className:"grid grid-cols-1 gap-4 md:grid-cols-3",children:[(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(N.J,{htmlFor:"speech-voice",children:"Voice"}),(0,a.jsxs)(f.l6,{value:e5,onValueChange:e=>e3(e),children:[(0,a.jsx)(f.bq,{children:(0,a.jsx)(f.yv,{})}),(0,a.jsxs)(f.gC,{children:[(0,a.jsx)(f.eb,{value:"alloy",children:"Alloy"}),(0,a.jsx)(f.eb,{value:"echo",children:"Echo"}),(0,a.jsx)(f.eb,{value:"fable",children:"Fable"}),(0,a.jsx)(f.eb,{value:"onyx",children:"Onyx"}),(0,a.jsx)(f.eb,{value:"nova",children:"Nova"}),(0,a.jsx)(f.eb,{value:"shimmer",children:"Shimmer"})]})]})]}),(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(N.J,{htmlFor:"speech-format",children:"Response Format"}),(0,a.jsxs)(f.l6,{value:e6,onValueChange:e=>e9(e),children:[(0,a.jsx)(f.bq,{children:(0,a.jsx)(f.yv,{})}),(0,a.jsxs)(f.gC,{children:[(0,a.jsx)(f.eb,{value:"mp3",children:"MP3"}),(0,a.jsx)(f.eb,{value:"opus",children:"Opus"}),(0,a.jsx)(f.eb,{value:"aac",children:"AAC"}),(0,a.jsx)(f.eb,{value:"flac",children:"FLAC"}),(0,a.jsx)(f.eb,{value:"wav",children:"WAV"}),(0,a.jsx)(f.eb,{value:"pcm",children:"PCM"})]})]})]}),(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(N.J,{htmlFor:"speech-speed",children:"Speed"}),(0,a.jsx)(g.p,{id:"speech-speed",type:"number",min:.25,max:4,step:.25,value:e8,onChange:e=>e7(parseFloat(e.target.value)||1)})]})]}),(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(N.J,{htmlFor:"speech-input",children:"Text to Synthesize"}),(0,a.jsx)(v.T,{id:"speech-input",placeholder:"Enter text to convert to speech...",value:e4,onChange:e=>e1(e.target.value),rows:4})]})]});case"audio-transcription":return(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsxs)("div",{className:"grid grid-cols-1 gap-4 md:grid-cols-2",children:[(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(N.J,{htmlFor:"audio-transcription-prompt",children:"Prompt (Optional)"}),(0,a.jsx)(v.T,{id:"audio-transcription-prompt",placeholder:"Enter a prompt for the transcription...",value:eb,onChange:e=>eN(e.target.value),rows:2})]}),(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(N.J,{htmlFor:"audio-transcription-temperature",children:"Temperature"}),(0,a.jsx)(g.p,{id:"audio-transcription-temperature",type:"number",min:0,max:1,step:.1,value:ek,onChange:e=>eC(parseFloat(e.target.value)||0)})]})]}),(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(N.J,{htmlFor:"audio-transcription-language",children:"Language (Optional)"}),(0,a.jsx)(g.p,{id:"audio-transcription-language",placeholder:"e.g., en-US, fr-FR",value:eM,onChange:e=>eA(e.target.value)})]}),(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(N.J,{htmlFor:"audio-transcription-response-format",children:"Response Format"}),(0,a.jsxs)(f.l6,{value:ew,onValueChange:e=>e_(e),children:[(0,a.jsx)(f.bq,{children:(0,a.jsx)(f.yv,{})}),(0,a.jsxs)(f.gC,{children:[(0,a.jsx)(f.eb,{value:"json",children:"JSON"}),(0,a.jsx)(f.eb,{value:"text",children:"Text"}),(0,a.jsx)(f.eb,{value:"srt",children:"SRT"}),(0,a.jsx)(f.eb,{value:"verbose_json",children:"Verbose JSON"}),(0,a.jsx)(f.eb,{value:"vtt",children:"VTT"})]})]})]}),(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(N.J,{children:"Voice Recording"}),(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)(x.$,{type:"button",variant:ep?"destructive":"default",size:"sm",onClick:ep?sl:sr,className:"flex items-center gap-2",children:ep?(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(e$.A,{className:"h-4 w-4"}),"Stop Recording"]}):(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(eG.A,{className:"h-4 w-4"}),"Start Recording"]})}),ep&&(0,a.jsxs)("div",{className:"flex items-center gap-2 text-red-600",children:[(0,a.jsx)("div",{className:"h-2 w-2 animate-pulse rounded-full bg-red-600"}),(0,a.jsx)("span",{className:"text-sm",children:"Recording..."})]})]})]}),(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(N.J,{htmlFor:"audio-transcription-upload",children:"Or Upload Audio File"}),(0,a.jsx)(g.p,{type:"file",accept:"audio/*",onChange:sa,ref:eF,className:"file:mr-4 file:rounded-full file:border-0 file:bg-blue-50 file:px-4 file:py-2 file:text-sm file:font-semibold file:text-blue-700 hover:file:bg-blue-100"}),ex&&(0,a.jsxs)("div",{className:"mt-2 flex items-center gap-2",children:[(0,a.jsx)(eV.A,{className:"h-5 w-5 text-blue-500"}),(0,a.jsxs)("span",{className:"text-muted-foreground text-sm",children:["Selected audio: ",ex.name]}),(0,a.jsx)(x.$,{variant:"outline",size:"sm",onClick:()=>{eg(null),ej(null)},className:"ml-auto",children:"Remove"})]}),ev&&(0,a.jsx)("div",{className:"bg-muted mt-2 rounded-md p-4",children:(0,a.jsx)("audio",{controls:!0,src:ev,className:"w-full",children:"Your browser does not support the audio element."})})]})]})]});case"models":return(0,a.jsx)("div",{className:"space-y-4",children:(0,a.jsxs)(V.Fc,{children:[(0,a.jsx)(eK.A,{className:"h-4 w-4"}),(0,a.jsx)(V.TN,{children:"This endpoint lists all available models from the provider. No additional parameters are required."})]})});default:return null}})(),(0,a.jsx)(x.$,{onClick:sd,disabled:!A||so.isPending,className:"w-full",children:so.isPending?(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(z.A,{className:"mr-2 h-4 w-4 animate-spin"}),"Testing ",eW[F].name,"..."]}):(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(eY.A,{className:"mr-2 h-4 w-4"}),"Test ",eW[F].name]})}),I&&(0,a.jsxs)(V.Fc,{variant:"destructive",children:[(0,a.jsx)(eU.A,{className:"h-4 w-4"}),(0,a.jsxs)(V.TN,{children:[(0,a.jsx)("strong",{children:"Test Failed:"})," ",I]})]}),R&&(0,a.jsxs)(V.Fc,{children:[(0,a.jsx)(Z.A,{className:"h-4 w-4"}),(0,a.jsxs)(V.TN,{children:[(0,a.jsx)("strong",{children:"Test Successful!"})," ",eW[F].name," endpoint responded correctly."]})]}),R&&(R?"type"in(y=R)&&"audio"===y.type?(0,a.jsx)("div",{className:"space-y-4",children:(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(N.J,{children:"Generated Audio"}),(0,a.jsxs)("div",{className:"bg-muted rounded-md p-4",children:[(0,a.jsx)("audio",{controls:!0,src:R.url,className:"w-full",children:"Your browser does not support the audio element."}),(0,a.jsxs)("p",{className:"text-muted-foreground mt-2 text-sm",children:["Audio file size: ",(R.size/1024).toFixed(2)," KB"]})]})]})}):"text"in R?(0,a.jsx)("div",{className:"space-y-4",children:(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(N.J,{children:"Transcription Result"}),(0,a.jsx)("div",{className:"bg-muted rounded-md p-4",children:(0,a.jsx)("p",{className:"text-sm whitespace-pre-wrap",children:R.text||"No transcription result available"})})]})}):"choices"in R?(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(N.J,{children:"Model Response"}),(0,a.jsx)("div",{className:"bg-muted rounded-md p-4",children:(0,a.jsx)("p",{className:"text-sm whitespace-pre-wrap",children:(null==(l=R.choices)||null==(t=l[0])||null==(s=t.message)?void 0:s.content)||"No content in response"})})]}),R.usage&&(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(N.J,{children:"Usage Statistics"}),(0,a.jsxs)("div",{className:"grid grid-cols-3 gap-4 text-sm",children:[(0,a.jsxs)("div",{className:"bg-muted rounded p-2 text-center",children:[(0,a.jsx)("div",{className:"font-semibold",children:R.usage.prompt_tokens}),(0,a.jsx)("div",{className:"text-muted-foreground",children:"Prompt Tokens"})]}),(0,a.jsxs)("div",{className:"bg-muted rounded p-2 text-center",children:[(0,a.jsx)("div",{className:"font-semibold",children:R.usage.completion_tokens}),(0,a.jsx)("div",{className:"text-muted-foreground",children:"Completion Tokens"})]}),(0,a.jsxs)("div",{className:"bg-muted rounded p-2 text-center",children:[(0,a.jsx)("div",{className:"font-semibold",children:R.usage.total_tokens}),(0,a.jsx)("div",{className:"text-muted-foreground",children:"Total Tokens"})]})]})]})]}):"data"in(b=R)&&Array.isArray(b.data)&&b.data.length>0&&"embedding"in b.data[0]?(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(N.J,{children:"Embedding Vector"}),(0,a.jsxs)("div",{className:"bg-muted rounded-md p-4",children:[(0,a.jsxs)("p",{className:"text-muted-foreground mb-2 text-sm",children:["Generated ",(null==(c=R.data)||null==(d=c[0])||null==(o=d.embedding)?void 0:o.length)||0," ","dimensional embedding vector"]}),(0,a.jsxs)("details",{className:"group",children:[(0,a.jsx)("summary",{className:"hover:text-foreground cursor-pointer text-sm",children:"Show first 10 values"}),(0,a.jsxs)("pre",{className:"mt-2 text-xs",children:[JSON.stringify(null==(p=R.data)||null==(m=p[0])||null==(u=m.embedding)?void 0:u.slice(0,10),null,2),"..."]})]})]})]}),R.usage&&(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(N.J,{children:"Usage Statistics"}),(0,a.jsxs)("div",{className:"bg-muted rounded p-2 text-center text-sm",children:[(0,a.jsx)("div",{className:"font-semibold",children:R.usage.total_tokens}),(0,a.jsx)("div",{className:"text-muted-foreground",children:"Total Tokens"})]})]})]}):"data"in(w=R)&&Array.isArray(w.data)&&w.data.length>0&&"url"in w.data[0]?(0,a.jsx)("div",{className:"space-y-4",children:(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(N.J,{children:"Generated Images"}),(0,a.jsx)("div",{className:"grid grid-cols-1 gap-4 md:grid-cols-2",children:null==(h=R.data)?void 0:h.map((e,s)=>(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)("div",{className:"relative aspect-square w-full",children:(0,a.jsx)(eB.default,{src:e.url,alt:"Generated image ".concat(s+1),fill:!0,className:"rounded-md border object-cover",unoptimized:!0})}),e.revised_prompt&&(0,a.jsxs)("p",{className:"text-muted-foreground text-xs",children:["Revised prompt: ",e.revised_prompt]})]},s))})]})}):"data"in(_=R)&&Array.isArray(_.data)&&_.data.length>0&&"id"in _.data[0]?(0,a.jsx)("div",{className:"space-y-4",children:(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(N.J,{children:"Available Models"}),(0,a.jsx)("div",{className:"max-h-60 overflow-auto",children:(0,a.jsx)("div",{className:"grid gap-2",children:null==(j=R.data)?void 0:j.map(e=>(0,a.jsxs)("div",{className:"bg-muted rounded-md p-3",children:[(0,a.jsx)("div",{className:"font-medium",children:e.id}),e.object&&(0,a.jsxs)("div",{className:"text-muted-foreground text-sm",children:["Type: ",e.object]}),e.created&&(0,a.jsxs)("div",{className:"text-muted-foreground text-sm",children:["Created:"," ",new Date(1e3*e.created).toLocaleDateString()]})]},e.id))})})]})}):null:null),R&&(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(N.J,{children:"Raw Response"}),(0,a.jsxs)("details",{className:"group",children:[(0,a.jsxs)("summary",{className:"text-muted-foreground hover:text-foreground cursor-pointer text-sm",children:[(0,a.jsx)(G.A,{className:"mr-1 inline h-4 w-4"}),"Show detailed response data"]}),(0,a.jsx)("pre",{className:"bg-muted mt-2 max-h-60 overflow-auto rounded-md p-4 text-xs",children:JSON.stringify(R,null,2)})]})]})]})]})}var eX=t(484),e0=t(2612),e2=t(9680);function e4(e){let{models:s,onFilteredModelsChange:t,className:l}=e,[i,n]=(0,r.useState)(""),[o,d]=(0,r.useState)("name-asc"),c=(0,r.useMemo)(()=>{let e=[...s];if(i.trim()){let s=i.toLowerCase().trim();e=e.filter(e=>e.name.toLowerCase().includes(s)||e.full_name.toLowerCase().includes(s)||e.provider.toLowerCase().includes(s)||e.description&&e.description.toLowerCase().includes(s)||e.modelType.toLowerCase().includes(s))}return e.sort((e,s)=>{switch(o){case"name-asc":return e.name.localeCompare(s.name);case"name-desc":return s.name.localeCompare(e.name);case"price-asc":return(e.is_free?0:(e.input_cost||0)+(e.output_cost||0))-(s.is_free?0:(s.input_cost||0)+(s.output_cost||0));case"price-desc":{let t=e.is_free?0:(e.input_cost||0)+(e.output_cost||0);return(s.is_free?0:(s.input_cost||0)+(s.output_cost||0))-t}default:return 0}}),e},[s,i,o]);r.useEffect(()=>{t(c)},[c,t]);let u=""!==i.trim()||"name-asc"!==o;return(0,a.jsxs)("div",{className:(0,b.cn)("flex flex-col gap-4 sm:flex-row sm:items-center sm:gap-3",l),children:[(0,a.jsxs)("div",{className:"relative flex-1",children:[(0,a.jsx)(eX.A,{className:"absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground"}),(0,a.jsx)(g.p,{placeholder:"Search models by name, provider, or description...",value:i,onChange:e=>n(e.target.value),className:"pl-9"})]}),(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsxs)(f.l6,{value:o,onValueChange:e=>d(e),children:[(0,a.jsxs)(f.bq,{className:"w-full sm:w-[180px]",children:[(0,a.jsx)(e0.A,{className:"mr-2 h-4 w-4"}),(0,a.jsx)(f.yv,{placeholder:"Sort by"})]}),(0,a.jsxs)(f.gC,{children:[(0,a.jsx)(f.eb,{value:"name-asc",children:"Name (A-Z)"}),(0,a.jsx)(f.eb,{value:"name-desc",children:"Name (Z-A)"}),(0,a.jsx)(f.eb,{value:"price-asc",children:"Price (Low to High)"}),(0,a.jsx)(f.eb,{value:"price-desc",children:"Price (High to Low)"})]})]}),u&&(0,a.jsx)(x.$,{variant:"outline",size:"icon",onClick:()=>{n(""),d("name-asc")},className:"h-9 w-9",title:"Clear filters",children:(0,a.jsx)(e2.A,{className:"h-4 w-4"})})]})]})}var e1=t(953),e5=t(7569),e3=t(4756),e6=t(6839);function e9(){let[e,s]=(0,r.useState)([]),{data:t,isLoading:l,error:n}=(0,i.I)({queryKey:["admin-models-with-providers"],queryFn:()=>o.zQ.getModelsWithProviders(),refetchOnWindowFocus:!1}),{models:d=[],groups:c=[]}=t||{},u=(0,r.useMemo)(()=>d?d.reduce((e,s)=>{let t=s.provider;return e[t]||(e[t]=[]),e[t].push(s),e},{}):{},[d]),m=(0,r.useMemo)(()=>new Map(c.map(e=>[e.provider,e])),[c]),p=(0,r.useMemo)(()=>Object.entries(u).map(e=>{let[s,t]=e,a=m.get(s);return{provider:s,activeModels:t.filter(e=>!e.soft_deleted).length,totalModels:t.length,groupData:a,hasGroupUrl:!!(null==a?void 0:a.group_url),hasGroupApiKey:!!(null==a?void 0:a.group_api_key)}}),[u,m]);return(0,a.jsxs)(e1.SidebarProvider,{children:[(0,a.jsx)(e5.AppSidebar,{variant:"inset"}),(0,a.jsxs)(e1.SidebarInset,{children:[(0,a.jsx)(e3.SiteHeader,{}),(0,a.jsx)("div",{className:"flex flex-1 flex-col",children:(0,a.jsxs)("div",{className:"@container/main flex flex-1 flex-col gap-4 p-4 md:gap-8 md:p-8",children:[(0,a.jsx)("div",{className:"mb-6 flex items-center justify-between",children:(0,a.jsx)("h1",{className:"text-2xl font-bold tracking-tight",children:"Model Management & API Testing"})}),(0,a.jsxs)(e6.tU,{defaultValue:"manage",className:"w-full",children:[(0,a.jsx)(e6.j7,{className:"grid w-full grid-cols-3",children:(0,a.jsx)(e6.Xi,{value:"manage",children:"Manage Models"})}),(0,a.jsxs)(e6.av,{value:"manage",className:"space-y-4",children:[(0,a.jsx)("div",{className:"text-muted-foreground text-sm",children:"Manage your AI models organized by provider groups. Configure API keys, and organize models by provider groups."}),l?(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsx)(eo.E,{className:"h-[60px] w-full"}),(0,a.jsx)(eo.E,{className:"h-[400px] w-full"})]}):n?(0,a.jsxs)(V.Fc,{variant:"destructive",children:[(0,a.jsx)(W.A,{className:"h-4 w-4"}),(0,a.jsx)(V.TN,{children:"Failed to load models. Please try refreshing the page."})]}):(0,a.jsx)(e6.tU,{defaultValue:"all",className:"w-full",children:(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsx)("div",{className:"rounded-lg border p-1",children:(0,a.jsxs)(e6.j7,{className:"grid w-full max-w-full auto-cols-fr grid-flow-col overflow-x-auto",children:[(0,a.jsxs)(e6.Xi,{value:"all",className:"flex items-center gap-2",children:[(0,a.jsx)(K.A,{className:"h-4 w-4"}),"All Models",(0,a.jsx)(er.E,{variant:"secondary",className:"ml-1",children:d.length})]}),p.map(e=>{let{provider:s,activeModels:t,totalModels:r}=e;return(0,a.jsxs)(e6.Xi,{value:s,className:"flex min-w-fit items-center gap-2",children:[(0,a.jsx)(J.A,{className:"h-4 w-4"}),s,(0,a.jsx)("div",{className:"flex items-center gap-1",children:(0,a.jsxs)(er.E,{variant:"secondary",className:"ml-1",children:[t,"/",r]})})]},s)})]})}),(0,a.jsx)(e6.av,{value:"all",children:(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsx)("div",{className:"text-muted-foreground text-sm",children:"Overview of all models across all provider groups."}),(0,a.jsx)(e4,{models:d,onFilteredModelsChange:s}),(0,a.jsx)(ez,{filteredModels:e})]})}),Object.entries(u).map(e=>{let[s,t]=e,r=m.get(s);return(0,a.jsx)(e6.av,{value:s,children:(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsx)("div",{className:"flex items-center justify-between",children:(0,a.jsxs)("div",{children:[(0,a.jsxs)("h3",{className:"flex items-center gap-2 text-lg font-semibold",children:[(0,a.jsx)(J.A,{className:"h-5 w-5"}),s]}),(0,a.jsxs)("div",{className:"text-muted-foreground flex items-center gap-4 text-sm",children:[t.filter(e=>e.soft_deleted).length>0&&(0,a.jsxs)("span",{className:"text-orange-600",children:[t.filter(e=>e.soft_deleted).length," ","soft deleted"]}),(null==r?void 0:r.group_url)&&(0,a.jsxs)("span",{className:"flex items-center gap-1",children:[(0,a.jsx)(K.A,{className:"h-3 w-3"}),r.group_url]})]})]})}),(0,a.jsx)(ez,{filterProvider:s,groupData:r,showProviderActions:!0})]})},s)})]})})]}),(0,a.jsxs)(e6.av,{value:"test-basic",className:"space-y-4",children:[(0,a.jsx)("div",{className:"text-muted-foreground text-sm",children:"Test model credentials and connectivity with basic chat completion requests through the secure proxy (resolves CORS and Docker network issues). Models can be tested even without API keys configured (useful for free models or when authentication is handled elsewhere)."}),l?(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsx)(eo.E,{className:"h-[200px] w-full"}),(0,a.jsx)(eo.E,{className:"h-[100px] w-full"})]}):n?(0,a.jsxs)(V.Fc,{variant:"destructive",children:[(0,a.jsx)(W.A,{className:"h-4 w-4"}),(0,a.jsx)(V.TN,{children:"Failed to load models for testing. Please try refreshing the page."})]}):(0,a.jsx)(eO,{models:d})]}),(0,a.jsxs)(e6.av,{value:"test-api",className:"space-y-4",children:[(0,a.jsx)("div",{className:"text-muted-foreground text-sm",children:"Comprehensive testing of all OpenAI API endpoints including chat completions, embeddings, image generation, audio synthesis, and model listing through the secure proxy (resolves CORS and Docker network issues). Models can be tested with or without API keys configured."}),l?(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsx)(eo.E,{className:"h-[300px] w-full"}),(0,a.jsx)(eo.E,{className:"h-[200px] w-full"})]}):n?(0,a.jsxs)(V.Fc,{variant:"destructive",children:[(0,a.jsx)(W.A,{className:"h-4 w-4"}),(0,a.jsx)(V.TN,{children:"Failed to load models for API testing. Please try refreshing the page."})]}):(0,a.jsx)(eH,{models:d})]})]})]})})]})]})}},8561:(e,s,t)=>{"use strict";t.d(s,{E:()=>n});var a=t(3422);t(4398);var r=t(4676),l=t(9183);let i=(0,r.F)("inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2",{variants:{variant:{default:"border-transparent bg-primary text-primary-foreground hover:bg-primary/80",secondary:"border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80",destructive:"border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80",outline:"text-foreground",success:"border-transparent bg-green-500 text-white hover:bg-green-500/80",warning:"border-transparent bg-yellow-500 text-white hover:bg-yellow-500/80",error:"border-transparent bg-red-500 text-white hover:bg-red-500/80"}},defaultVariants:{variant:"default"}});function n(e){let{className:s,variant:t,...r}=e;return(0,a.jsx)("div",{className:(0,l.cn)(i({variant:t}),s),...r})}},9442:(e,s,t)=>{"use strict";t.d(s,{Fc:()=>n,TN:()=>o});var a=t(3422);t(4398);var r=t(4676),l=t(9183);let i=(0,r.F)("relative w-full rounded-lg border px-4 py-3 text-sm grid has-[>svg]:grid-cols-[calc(var(--spacing)*4)_1fr] grid-cols-[0_1fr] has-[>svg]:gap-x-3 gap-y-0.5 items-start [&>svg]:size-4 [&>svg]:translate-y-0.5 [&>svg]:text-current",{variants:{variant:{default:"bg-card text-card-foreground",destructive:"text-destructive bg-card [&>svg]:text-current *:data-[slot=alert-description]:text-destructive/90"}},defaultVariants:{variant:"default"}});function n(e){let{className:s,variant:t,...r}=e;return(0,a.jsx)("div",{"data-slot":"alert",role:"alert",className:(0,l.cn)(i({variant:t}),s),...r})}function o(e){let{className:s,...t}=e;return(0,a.jsx)("div",{"data-slot":"alert-description",className:(0,l.cn)("text-muted-foreground col-start-2 grid justify-items-start gap-1 text-sm [&_p]:leading-relaxed",s),...t})}}},e=>{var s=s=>e(e.s=s);e.O(0,[363,222,808,29,730,978,481,982,826,236,601,945,497,358],()=>s(6715)),_N_E=e.O()}]);
\ No newline at end of file
diff --git a/ui_out/_next/static/chunks/app/page-521ee9b11aefe1b2.js b/ui_out/_next/static/chunks/app/page-521ee9b11aefe1b2.js
new file mode 100644
index 00000000..b8a483a2
--- /dev/null
+++ b/ui_out/_next/static/chunks/app/page-521ee9b11aefe1b2.js
@@ -0,0 +1 @@
+(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[974],{159:(e,t,s)=>{"use strict";s.d(t,{DetailedWalletBalance:()=>k});var a=s(3422),l=s(4398),n=s(2349);let r=(0,s(3929).A)("wallet",[["path",{d:"M19 7V4a1 1 0 0 0-1-1H5a2 2 0 0 0 0 4h15a1 1 0 0 1 1 1v4h-3a2 2 0 0 0 0 4h3a1 1 0 0 0 1-1v-2a1 1 0 0 0-1-1",key:"18etb6"}],["path",{d:"M3 5v14a2 2 0 0 0 2 2h15a1 1 0 0 0 1-1v-4",key:"xoc0q4"}]]);var i=s(3728),c=s(2434),d=s(9675),o=s(9945),x=s(7916);o.Ik({token:o.Yj().min(1)}),o.Ik({success:o.zM(),amount:o.ai().optional(),message:o.Yj().optional()}),o.Ik({amount:o.ai().positive(),offline:o.zM().optional()}),o.Ik({token:o.Yj(),balance:o.ai(),npub:o.Yj().optional()});class m{static async redeemToken(e){try{return await x.apiClient.post("/api/wallet/redeem",{token:e})}catch(e){return console.error("Error redeeming token:",e),{success:!1,message:"Failed to redeem token. Please try again."}}}static async sendToken(e){try{return await x.apiClient.post("/api/wallet/send",{amount:e})}catch(e){throw console.error("Error generating token:",e),Error("Failed to generate token. Please try again.")}}static async getBalance(){try{return await x.apiClient.get("/api/wallet/balance")}catch(e){throw console.error("Error fetching balance:",e),e}}static async getDetailedBalances(){try{return await x.apiClient.get("/admin/api/balances")}catch(e){throw console.error("Error fetching detailed balances:",e),e}}static async withdraw(e,t){let s=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"sat";try{return await x.apiClient.post("/admin/withdraw",{amount:e,mint_url:t,unit:s})}catch(e){throw console.error("Error withdrawing funds:",e),e}}}var h=s(2738),u=s(3648),p=s(6013),g=s(6320),f=s(268),j=s(3130),v=s(2264),b=s(246),N=s(2533);function y(e){let{open:t,onOpenChange:s,balances:n,onSuccess:r}=e,[i,c]=(0,l.useState)(""),[o,x]=(0,l.useState)(""),[h,y]=(0,l.useState)(""),[w,k]=(0,l.useState)(!1),_=n.filter(e=>!e.error&&e.wallet_balance>0),C=_.find(e=>"".concat(e.mint_url,"|").concat(e.unit)===i),A=(0,p.n)({mutationFn:async()=>{if(!C)throw Error("No balance selected");let e=parseInt(o);if(isNaN(e)||e<=0)throw Error("Invalid amount");return m.withdraw(e,C.mint_url,C.unit)},onSuccess:e=>{y(e.token),null==r||r()}});(0,l.useEffect)(()=>{C&&x((C.owner_balance>0?C.owner_balance:0).toString())},[C]),(0,l.useEffect)(()=>{t||(y(""),x(""),c(""),k(!1))},[t]);let z=parseInt(o)||0,S=C&&z>C.owner_balance&&z<=C.wallet_balance;return h?(0,a.jsx)(g.lG,{open:t,onOpenChange:s,children:(0,a.jsxs)(g.Cf,{className:"sm:max-w-xl",children:[(0,a.jsxs)(g.c7,{children:[(0,a.jsx)(g.L3,{children:"Withdrawal Successful"}),(0,a.jsx)(g.rr,{children:"Save this token! It represents your withdrawn balance."})]}),(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsxs)("div",{className:"rounded-lg border border-green-200 bg-green-50 p-4 dark:border-green-800 dark:bg-green-950",children:[(0,a.jsxs)("div",{className:"mb-2 flex items-center gap-2",children:[(0,a.jsx)(b.A,{className:"h-5 w-5 text-green-600"}),(0,a.jsx)("span",{className:"font-semibold text-green-900 dark:text-green-100",children:"Withdrawal Token"})]}),(0,a.jsx)("div",{className:"rounded-md bg-gray-900 p-3 font-mono text-xs break-all text-green-400",children:h})]}),(0,a.jsxs)("div",{className:"flex gap-2",children:[(0,a.jsx)(u.$,{onClick:()=>{navigator.clipboard.writeText(h),k(!0),setTimeout(()=>k(!1),2e3)},className:"flex-1",variant:w?"outline":"default",children:w?(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(b.A,{className:"mr-2 h-4 w-4"}),"Copied!"]}):(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(N.A,{className:"mr-2 h-4 w-4"}),"Copy Token"]})}),(0,a.jsx)(u.$,{onClick:()=>s(!1),variant:"outline",children:"Close"})]})]})]})}):(0,a.jsx)(g.lG,{open:t,onOpenChange:s,children:(0,a.jsxs)(g.Cf,{className:"sm:max-w-md",children:[(0,a.jsxs)(g.c7,{children:[(0,a.jsx)(g.L3,{children:"Withdraw Balance"}),(0,a.jsx)(g.rr,{children:"Select mint and currency, then enter the amount to withdraw."})]}),(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(j.J,{htmlFor:"mint-select",children:"Mint / Currency"}),(0,a.jsxs)(v.l6,{value:i,onValueChange:c,children:[(0,a.jsx)(v.bq,{id:"mint-select",children:(0,a.jsx)(v.yv,{placeholder:"Select mint and currency"})}),(0,a.jsx)(v.gC,{children:_.map(e=>(0,a.jsxs)(v.eb,{value:"".concat(e.mint_url,"|").concat(e.unit),children:[e.mint_url.replace("https://","").replace("http://","")," ","• ",e.unit.toUpperCase()," (",e.owner_balance,")"]},"".concat(e.mint_url,"|").concat(e.unit)))})]})]}),(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(j.J,{htmlFor:"amount",children:"Amount"}),(0,a.jsx)(f.p,{id:"amount",type:"number",min:"1",value:o,onChange:e=>x(e.target.value),placeholder:"Enter amount"}),C&&(0,a.jsxs)("div",{className:"space-y-1 text-xs",children:[(0,a.jsxs)("p",{className:"text-muted-foreground",children:["Maximum:"," ",(0,a.jsxs)("span",{className:"font-semibold",children:[C.wallet_balance," ",C.unit]})]}),(0,a.jsxs)("p",{className:"text-muted-foreground",children:["Your recommended balance:"," ",(0,a.jsxs)("span",{className:"font-semibold",children:[C.owner_balance," ",C.unit]})]})]})]}),S&&(0,a.jsxs)("div",{className:"bg-destructive/10 text-destructive flex items-start gap-2 rounded-md p-3 text-sm",children:[(0,a.jsx)(d.A,{className:"mt-0.5 h-5 w-5 flex-shrink-0"}),(0,a.jsx)("span",{children:"Warning: Withdrawing more than your balance will use user funds!"})]}),A.isError&&(0,a.jsxs)("div",{className:"bg-destructive/10 text-destructive flex items-start gap-2 rounded-md p-3 text-sm",children:[(0,a.jsx)(d.A,{className:"mt-0.5 h-5 w-5 flex-shrink-0"}),(0,a.jsx)("span",{children:A.error.message||"Failed to withdraw"})]}),(0,a.jsxs)("div",{className:"flex gap-2",children:[(0,a.jsx)(u.$,{onClick:()=>A.mutate(),disabled:!i||!o||A.isPending||z<=0||C&&z>C.wallet_balance,className:"flex-1",children:A.isPending?"Withdrawing...":"Withdraw"}),(0,a.jsx)(u.$,{onClick:()=>s(!1),variant:"outline",disabled:A.isPending,children:"Cancel"})]})]})]})})}var w=s(9183);function k(e){let t,s,o,{refreshInterval:x=1e4}=e,[p,g]=(0,l.useState)(!1),{data:f,isLoading:j,isError:v,error:b,isFetching:N,refetch:k}=(0,n.I)({queryKey:["detailed-wallet-balance"],queryFn:async()=>m.getDetailedBalances(),refetchInterval:x}),_=f?(t=0,s=0,o=0,f.forEach(e=>{e.error||(t+=e.wallet_balance||0,s+=e.user_balance||0,o+=e.owner_balance||0)}),{totalWallet:t,totalUser:s,totalOwner:o}):{totalWallet:0,totalUser:0,totalOwner:0};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)(h.Zp,{className:"h-full w-full shadow-sm",children:[(0,a.jsxs)(h.aR,{className:"pb-4",children:[(0,a.jsxs)("div",{className:"flex items-center justify-between",children:[(0,a.jsx)(h.ZB,{className:"text-xl",children:"Cashu Wallet Balance"}),(0,a.jsxs)("div",{className:"flex gap-2",children:[(0,a.jsxs)(u.$,{variant:"default",size:"sm",onClick:()=>g(!0),disabled:j||!f||0===f.length,children:[(0,a.jsx)(r,{className:"mr-2 h-4 w-4"}),"Withdraw"]}),(0,a.jsxs)(u.$,{variant:"ghost",size:"icon",onClick:()=>k(),disabled:j||N,className:"h-8 w-8",children:[(0,a.jsx)(i.A,{className:(0,w.cn)("h-4 w-4",(N||j)&&"animate-spin")}),(0,a.jsx)("span",{className:"sr-only",children:"Refresh balance"})]})]})]}),(0,a.jsx)(h.BT,{children:"Detailed balance breakdown by mint and currency"})]}),(0,a.jsx)(h.Wu,{children:j?(0,a.jsx)("div",{className:"flex items-center justify-center py-8",children:(0,a.jsx)(c.A,{className:"text-primary h-8 w-8 animate-spin"})}):v?(0,a.jsxs)("div",{className:"bg-destructive/10 text-destructive flex items-center space-x-2 rounded-md p-4",children:[(0,a.jsx)(d.A,{className:"h-5 w-5"}),(0,a.jsxs)("span",{children:["Error loading balance: ",b.message]})]}):(0,a.jsxs)("div",{className:"space-y-6",children:[(0,a.jsxs)("div",{className:"space-y-3",children:[(0,a.jsxs)("div",{className:"flex items-center justify-between",children:[(0,a.jsx)("span",{className:"text-muted-foreground text-sm",children:"Your Balance (Total)"}),(0,a.jsxs)("span",{className:"text-2xl font-bold text-green-600",children:[_.totalOwner.toLocaleString()," sats"]})]}),(0,a.jsxs)("div",{className:"flex items-center justify-between",children:[(0,a.jsx)("span",{className:"text-muted-foreground text-sm",children:"Total Wallet"}),(0,a.jsxs)("span",{className:"text-lg font-semibold",children:[_.totalWallet.toLocaleString()," sats"]})]}),(0,a.jsxs)("div",{className:"flex items-center justify-between",children:[(0,a.jsx)("span",{className:"text-muted-foreground text-sm",children:"User Balance"}),(0,a.jsxs)("span",{className:"text-lg font-semibold",children:[_.totalUser.toLocaleString()," sats"]})]})]}),(0,a.jsx)("p",{className:"text-muted-foreground text-xs",children:"Your balance = Total wallet - User balance"}),(0,a.jsxs)("div",{className:"overflow-hidden rounded-lg border",children:[(0,a.jsxs)("div",{className:"bg-muted grid grid-cols-4 gap-2 p-3 text-sm font-semibold",children:[(0,a.jsx)("div",{children:"Mint / Unit"}),(0,a.jsx)("div",{className:"text-right",children:"Wallet"}),(0,a.jsx)("div",{className:"text-right",children:"Users"}),(0,a.jsx)("div",{className:"text-right",children:"Owner"})]}),f&&f.length>0?f.filter(e=>e.wallet_balance&&e.wallet_balance>0||e.error).map((e,t)=>(0,a.jsxs)("div",{className:(0,w.cn)("grid grid-cols-4 gap-2 border-t p-3 text-sm",e.error&&"bg-destructive/10 text-destructive"),children:[(0,a.jsxs)("div",{className:"text-xs break-all",children:[e.mint_url.replace("https://","").replace("http://","")," ","• ",e.unit.toUpperCase()]}),(0,a.jsx)("div",{className:"text-right font-mono",children:e.error?"error":e.wallet_balance.toLocaleString()}),(0,a.jsx)("div",{className:"text-right font-mono",children:e.error?"-":e.user_balance.toLocaleString()}),(0,a.jsx)("div",{className:(0,w.cn)("text-right font-mono",!e.error&&e.owner_balance>0&&"font-semibold text-green-600"),children:e.error?"-":e.owner_balance.toLocaleString()})]},t)):(0,a.jsx)("div",{className:"text-muted-foreground p-4 text-center text-sm",children:"No balances to display"})]})]})})]}),(0,a.jsx)(y,{open:p,onOpenChange:g,balances:f||[],onSuccess:()=>{k()}})]})}},246:(e,t,s)=>{"use strict";s.d(t,{A:()=>a});let a=(0,s(3929).A)("circle-check-big",[["path",{d:"M21.801 10A10 10 0 1 1 17 3.335",key:"yps3ct"}],["path",{d:"m9 11 3 3L22 4",key:"1pflzl"}]])},1551:(e,t,s)=>{Promise.resolve().then(s.bind(s,7569)),Promise.resolve().then(s.bind(s,159)),Promise.resolve().then(s.bind(s,4756)),Promise.resolve().then(s.bind(s,2483)),Promise.resolve().then(s.bind(s,953))},2264:(e,t,s)=>{"use strict";s.d(t,{bq:()=>x,eb:()=>h,gC:()=>m,l6:()=>d,yv:()=>o});var a=s(3422);s(4398);var l=s(3439),n=s(9994),r=s(8940),i=s(4967),c=s(9183);function d(e){let{...t}=e;return(0,a.jsx)(l.bL,{"data-slot":"select",...t})}function o(e){let{...t}=e;return(0,a.jsx)(l.WT,{"data-slot":"select-value",...t})}function x(e){let{className:t,size:s="default",children:r,...i}=e;return(0,a.jsxs)(l.l9,{"data-slot":"select-trigger","data-size":s,className:(0,c.cn)("border-input data-[placeholder]:text-muted-foreground [&_svg:not([class*='text-'])]:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 dark:hover:bg-input/50 flex w-fit items-center justify-between gap-2 rounded-md border bg-transparent px-3 py-2 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",t),...i,children:[r,(0,a.jsx)(l.In,{asChild:!0,children:(0,a.jsx)(n.A,{className:"size-4 opacity-50"})})]})}function m(e){let{className:t,children:s,position:n="popper",...r}=e;return(0,a.jsx)(l.ZL,{children:(0,a.jsxs)(l.UC,{"data-slot":"select-content",className:(0,c.cn)("bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 relative z-50 max-h-(--radix-select-content-available-height) min-w-[8rem] origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border shadow-md","popper"===n&&"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",t),position:n,...r,children:[(0,a.jsx)(u,{}),(0,a.jsx)(l.LM,{className:(0,c.cn)("p-1","popper"===n&&"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1"),children:s}),(0,a.jsx)(p,{})]})})}function h(e){let{className:t,children:s,...n}=e;return(0,a.jsxs)(l.q7,{"data-slot":"select-item",className:(0,c.cn)("focus:bg-accent focus:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2",t),...n,children:[(0,a.jsx)("span",{className:"absolute right-2 flex size-3.5 items-center justify-center",children:(0,a.jsx)(l.VF,{children:(0,a.jsx)(r.A,{className:"size-4"})})}),(0,a.jsx)(l.p4,{children:s})]})}function u(e){let{className:t,...s}=e;return(0,a.jsx)(l.PP,{"data-slot":"select-scroll-up-button",className:(0,c.cn)("flex cursor-default items-center justify-center py-1",t),...s,children:(0,a.jsx)(i.A,{className:"size-4"})})}function p(e){let{className:t,...s}=e;return(0,a.jsx)(l.wn,{"data-slot":"select-scroll-down-button",className:(0,c.cn)("flex cursor-default items-center justify-center py-1",t),...s,children:(0,a.jsx)(n.A,{className:"size-4"})})}},2434:(e,t,s)=>{"use strict";s.d(t,{A:()=>a});let a=(0,s(3929).A)("loader-circle",[["path",{d:"M21 12a9 9 0 1 1-6.219-8.56",key:"13zald"}]])},2483:(e,t,s)=>{"use strict";s.d(t,{TemporaryBalances:()=>j});var a=s(3422),l=s(4398),n=s(2349),r=s(5195),i=s(3728),c=s(2434),d=s(9675),o=s(3929);let x=(0,o.A)("dollar-sign",[["line",{x1:"12",x2:"12",y1:"2",y2:"22",key:"7eqyqh"}],["path",{d:"M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6",key:"1b0p4s"}]]),m=(0,o.A)("activity",[["path",{d:"M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2",key:"169zse"}]]),h=(0,o.A)("clock",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["polyline",{points:"12 6 12 12 16 14",key:"68esgv"}]]);var u=s(9119),p=s(2738),g=s(3648),f=s(9183);function j(e){let t,s,o,{refreshInterval:j=1e4}=e,[v,b]=(0,l.useState)(""),{data:N,isLoading:y,isError:w,error:k,isFetching:_,refetch:C}=(0,n.I)({queryKey:["temporary-balances"],queryFn:async()=>u.zQ.getTemporaryBalances(),refetchInterval:j}),A=e=>"".concat(e.toLocaleString()," msat"),z=N?N.filter(e=>{var t;return e.hashed_key.toLowerCase().includes(v.toLowerCase())||(null==(t=e.refund_address)?void 0:t.toLowerCase().includes(v.toLowerCase()))}):[],S=N?(t=0,s=0,o=0,N.forEach(e=>{t+=e.balance||0,s+=e.total_spent||0,o+=e.total_requests||0}),{totalBalance:t,totalSpent:s,totalRequests:o}):{totalBalance:0,totalSpent:0,totalRequests:0};return(0,a.jsx)(a.Fragment,{children:(0,a.jsxs)(p.Zp,{className:"h-full w-full shadow-sm",children:[(0,a.jsxs)(p.aR,{className:"pb-4",children:[(0,a.jsxs)("div",{className:"flex items-center justify-between",children:[(0,a.jsxs)(p.ZB,{className:"flex items-center gap-2 text-xl",children:[(0,a.jsx)(r.A,{className:"h-5 w-5"}),"Temporary Balances"]}),(0,a.jsxs)("div",{className:"flex gap-2",children:[(0,a.jsxs)("div",{className:"relative",children:[(0,a.jsx)("input",{type:"text",placeholder:"Search by key or address...",value:v,onChange:e=>b(e.target.value),className:"focus:ring-primary/20 w-64 rounded-md border py-2 pr-3 pl-8 text-sm focus:ring-2 focus:outline-none"}),(0,a.jsx)(r.A,{className:"text-muted-foreground absolute top-2.5 left-2 h-4 w-4"})]}),(0,a.jsxs)(g.$,{variant:"ghost",size:"icon",onClick:()=>C(),disabled:y||_,className:"h-8 w-8",children:[(0,a.jsx)(i.A,{className:(0,f.cn)("h-4 w-4",(_||y)&&"animate-spin")}),(0,a.jsx)("span",{className:"sr-only",children:"Refresh temporary balances"})]})]})]}),(0,a.jsx)(p.BT,{children:"API keys with their current balances and usage statistics"})]}),(0,a.jsx)(p.Wu,{children:y?(0,a.jsx)("div",{className:"flex items-center justify-center py-8",children:(0,a.jsx)(c.A,{className:"text-primary h-8 w-8 animate-spin"})}):w?(0,a.jsxs)("div",{className:"bg-destructive/10 text-destructive flex items-center space-x-2 rounded-md p-4",children:[(0,a.jsx)(d.A,{className:"h-5 w-5"}),(0,a.jsxs)("span",{children:["Error loading temporary balances: ",k.message]})]}):(0,a.jsxs)("div",{className:"space-y-6",children:[(0,a.jsxs)("div",{className:"mb-6 grid grid-cols-1 gap-4 md:grid-cols-3",children:[(0,a.jsxs)("div",{className:"rounded-lg border border-blue-200 bg-gradient-to-r from-blue-50 to-indigo-50 p-4",children:[(0,a.jsx)("div",{className:"flex items-center justify-between",children:(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)(x,{className:"h-5 w-5 text-blue-600"}),(0,a.jsx)("span",{className:"text-sm font-medium text-blue-800",children:"Total Balance"})]})}),(0,a.jsx)("div",{className:"mt-2 text-2xl font-bold text-blue-900",children:A(S.totalBalance)})]}),(0,a.jsxs)("div",{className:"rounded-lg border border-green-200 bg-gradient-to-r from-green-50 to-emerald-50 p-4",children:[(0,a.jsx)("div",{className:"flex items-center justify-between",children:(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)(m,{className:"h-5 w-5 text-green-600"}),(0,a.jsx)("span",{className:"text-sm font-medium text-green-800",children:"Total Spent"})]})}),(0,a.jsx)("div",{className:"mt-2 text-2xl font-bold text-green-900",children:A(S.totalSpent)})]}),(0,a.jsxs)("div",{className:"rounded-lg border border-purple-200 bg-gradient-to-r from-purple-50 to-pink-50 p-4",children:[(0,a.jsx)("div",{className:"flex items-center justify-between",children:(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)(r.A,{className:"h-5 w-5 text-purple-600"}),(0,a.jsx)("span",{className:"text-sm font-medium text-purple-800",children:"Total Requests"})]})}),(0,a.jsx)("div",{className:"mt-2 text-2xl font-bold text-purple-900",children:S.totalRequests.toLocaleString()})]})]}),(0,a.jsxs)("div",{className:"overflow-hidden rounded-lg border",children:[(0,a.jsxs)("div",{className:"bg-muted grid grid-cols-6 gap-2 p-3 text-sm font-semibold",children:[(0,a.jsx)("div",{children:"Hashed Key"}),(0,a.jsx)("div",{className:"text-right",children:"Balance"}),(0,a.jsx)("div",{className:"text-right",children:"Total Spent"}),(0,a.jsx)("div",{className:"text-right",children:"Total Requests"}),(0,a.jsx)("div",{children:"Refund Address"}),(0,a.jsx)("div",{className:"text-right",children:"Expiry Time"})]}),z.length>0?z.map((e,t)=>(0,a.jsxs)("div",{className:(0,f.cn)("hover:bg-muted/50 grid grid-cols-6 gap-2 border-t p-3 text-sm transition-colors",0===e.balance&&"opacity-60"),children:[(0,a.jsx)("div",{className:"max-w-32 truncate font-mono text-xs break-all",children:e.hashed_key}),(0,a.jsx)("div",{className:"text-right font-mono",children:A(e.balance)}),(0,a.jsx)("div",{className:"text-right font-mono",children:A(e.total_spent)}),(0,a.jsx)("div",{className:"text-right font-mono",children:e.total_requests.toLocaleString()}),(0,a.jsx)("div",{className:"max-w-32 truncate font-mono text-xs break-all",children:e.refund_address||"-"}),(0,a.jsx)("div",{className:"text-right font-mono text-xs",children:e.key_expiry_time?(0,a.jsxs)("div",{className:"flex items-center justify-end gap-1",children:[(0,a.jsx)(h,{className:"h-3 w-3"}),(0,a.jsx)("span",{children:new Date(1e3*e.key_expiry_time).toLocaleDateString()})]}):"-"})]},t)):(0,a.jsx)("div",{className:"text-muted-foreground p-8 text-center text-sm",children:v?(0,a.jsxs)("div",{className:"flex flex-col items-center gap-2",children:[(0,a.jsx)(d.A,{className:"h-8 w-8"}),(0,a.jsx)("span",{children:"No temporary balances match your search"})]}):(0,a.jsxs)("div",{className:"flex flex-col items-center gap-2",children:[(0,a.jsx)(r.A,{className:"h-8 w-8"}),(0,a.jsx)("span",{children:"No temporary balances found"})]})})]}),N&&N.length>0&&(0,a.jsxs)("div",{className:"text-muted-foreground mt-4 text-xs",children:["Showing ",z.length," of ",N.length," temporary balances"]})]})})]})})}},2533:(e,t,s)=>{"use strict";s.d(t,{A:()=>a});let a=(0,s(3929).A)("copy",[["rect",{width:"14",height:"14",x:"8",y:"8",rx:"2",ry:"2",key:"17jyea"}],["path",{d:"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2",key:"zix9uf"}]])},3728:(e,t,s)=>{"use strict";s.d(t,{A:()=>a});let a=(0,s(3929).A)("refresh-cw",[["path",{d:"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8",key:"v9h5vc"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}],["path",{d:"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16",key:"3uifl3"}],["path",{d:"M8 16H3v5",key:"1cv678"}]])},5195:(e,t,s)=>{"use strict";s.d(t,{A:()=>a});let a=(0,s(3929).A)("key",[["path",{d:"m15.5 7.5 2.3 2.3a1 1 0 0 0 1.4 0l2.1-2.1a1 1 0 0 0 0-1.4L19 4",key:"g0fldk"}],["path",{d:"m21 2-9.6 9.6",key:"1j0ho8"}],["circle",{cx:"7.5",cy:"15.5",r:"5.5",key:"yqb3hr"}]])},6320:(e,t,s)=>{"use strict";s.d(t,{Cf:()=>x,Es:()=>h,L3:()=>u,c7:()=>m,lG:()=>i,rr:()=>p,zM:()=>c});var a=s(3422);s(4398);var l=s(4316),n=s(9680),r=s(9183);function i(e){let{...t}=e;return(0,a.jsx)(l.bL,{"data-slot":"dialog",...t})}function c(e){let{...t}=e;return(0,a.jsx)(l.l9,{"data-slot":"dialog-trigger",...t})}function d(e){let{...t}=e;return(0,a.jsx)(l.ZL,{"data-slot":"dialog-portal",...t})}function o(e){let{className:t,...s}=e;return(0,a.jsx)(l.hJ,{"data-slot":"dialog-overlay",className:(0,r.cn)("data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50",t),...s})}function x(e){let{className:t,children:s,...i}=e;return(0,a.jsxs)(d,{"data-slot":"dialog-portal",children:[(0,a.jsx)(o,{}),(0,a.jsxs)(l.UC,{"data-slot":"dialog-content",className:(0,r.cn)("bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-lg",t),...i,children:[s,(0,a.jsxs)(l.bm,{className:"ring-offset-background focus:ring-ring data-[state=open]:bg-accent data-[state=open]:text-muted-foreground absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",children:[(0,a.jsx)(n.A,{}),(0,a.jsx)("span",{className:"sr-only",children:"Close"})]})]})]})}function m(e){let{className:t,...s}=e;return(0,a.jsx)("div",{"data-slot":"dialog-header",className:(0,r.cn)("flex flex-col gap-2 text-center sm:text-left",t),...s})}function h(e){let{className:t,...s}=e;return(0,a.jsx)("div",{"data-slot":"dialog-footer",className:(0,r.cn)("flex flex-col-reverse gap-2 sm:flex-row sm:justify-end",t),...s})}function u(e){let{className:t,...s}=e;return(0,a.jsx)(l.hE,{"data-slot":"dialog-title",className:(0,r.cn)("text-lg leading-none font-semibold",t),...s})}function p(e){let{className:t,...s}=e;return(0,a.jsx)(l.VY,{"data-slot":"dialog-description",className:(0,r.cn)("text-muted-foreground text-sm",t),...s})}}},e=>{var t=t=>e(e.s=t);e.O(0,[363,222,808,29,730,978,481,236,601,945,497,358],()=>t(1551)),_N_E=e.O()}]);
\ No newline at end of file
diff --git a/ui_out/_next/static/chunks/app/page-cbf91667e39e2dcb.js b/ui_out/_next/static/chunks/app/page-cbf91667e39e2dcb.js
deleted file mode 100644
index 40b2d85a..00000000
--- a/ui_out/_next/static/chunks/app/page-cbf91667e39e2dcb.js
+++ /dev/null
@@ -1 +0,0 @@
-(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[974],{159:(e,t,a)=>{"use strict";a.d(t,{DetailedWalletBalance:()=>k});var s=a(3422),n=a(4398),r=a(2349);let l=(0,a(3929).A)("wallet",[["path",{d:"M19 7V4a1 1 0 0 0-1-1H5a2 2 0 0 0 0 4h15a1 1 0 0 1 1 1v4h-3a2 2 0 0 0 0 4h3a1 1 0 0 0 1-1v-2a1 1 0 0 0-1-1",key:"18etb6"}],["path",{d:"M3 5v14a2 2 0 0 0 2 2h15a1 1 0 0 0 1-1v-4",key:"xoc0q4"}]]);var i=a(3728),c=a(2434),d=a(9675),o=a(9945),u=a(7916);o.Ik({token:o.Yj().min(1)}),o.Ik({success:o.zM(),amount:o.ai().optional(),message:o.Yj().optional()}),o.Ik({amount:o.ai().positive(),offline:o.zM().optional()}),o.Ik({token:o.Yj(),balance:o.ai(),npub:o.Yj().optional()});class m{static async redeemToken(e){try{return await u.apiClient.post("/api/wallet/redeem",{token:e})}catch(e){return console.error("Error redeeming token:",e),{success:!1,message:"Failed to redeem token. Please try again."}}}static async sendToken(e){try{return await u.apiClient.post("/api/wallet/send",{amount:e})}catch(e){throw console.error("Error generating token:",e),Error("Failed to generate token. Please try again.")}}static async getBalance(){try{return await u.apiClient.get("/api/wallet/balance")}catch(e){throw console.error("Error fetching balance:",e),e}}static async getDetailedBalances(){try{return await u.apiClient.get("/admin/api/balances")}catch(e){throw console.error("Error fetching detailed balances:",e),e}}static async withdraw(e,t){let a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"sat";try{return await u.apiClient.post("/admin/withdraw",{amount:e,mint_url:t,unit:a})}catch(e){throw console.error("Error withdrawing funds:",e),e}}}var x=a(2738),h=a(3648),p=a(6013),g=a(6320),f=a(268),j=a(3130),b=a(2264),v=a(246),w=a(2533);function N(e){let{open:t,onOpenChange:a,balances:r,onSuccess:l}=e,[i,c]=(0,n.useState)(""),[o,u]=(0,n.useState)(""),[x,N]=(0,n.useState)(""),[y,k]=(0,n.useState)(!1),_=r.filter(e=>!e.error&&e.wallet_balance>0),C=_.find(e=>"".concat(e.mint_url,"|").concat(e.unit)===i),z=(0,p.n)({mutationFn:async()=>{if(!C)throw Error("No balance selected");let e=parseInt(o);if(isNaN(e)||e<=0)throw Error("Invalid amount");return m.withdraw(e,C.mint_url,C.unit)},onSuccess:e=>{N(e.token),null==l||l()}});(0,n.useEffect)(()=>{C&&u((C.owner_balance>0?C.owner_balance:0).toString())},[C]),(0,n.useEffect)(()=>{t||(N(""),u(""),c(""),k(!1))},[t]);let A=parseInt(o)||0,E=C&&A>C.owner_balance&&A<=C.wallet_balance;return x?(0,s.jsx)(g.lG,{open:t,onOpenChange:a,children:(0,s.jsxs)(g.Cf,{className:"sm:max-w-xl",children:[(0,s.jsxs)(g.c7,{children:[(0,s.jsx)(g.L3,{children:"Withdrawal Successful"}),(0,s.jsx)(g.rr,{children:"Save this token! It represents your withdrawn balance."})]}),(0,s.jsxs)("div",{className:"space-y-4",children:[(0,s.jsxs)("div",{className:"rounded-lg border border-green-200 bg-green-50 p-4 dark:border-green-800 dark:bg-green-950",children:[(0,s.jsxs)("div",{className:"mb-2 flex items-center gap-2",children:[(0,s.jsx)(v.A,{className:"h-5 w-5 text-green-600"}),(0,s.jsx)("span",{className:"font-semibold text-green-900 dark:text-green-100",children:"Withdrawal Token"})]}),(0,s.jsx)("div",{className:"rounded-md bg-gray-900 p-3 font-mono text-xs break-all text-green-400",children:x})]}),(0,s.jsxs)("div",{className:"flex gap-2",children:[(0,s.jsx)(h.$,{onClick:()=>{navigator.clipboard.writeText(x),k(!0),setTimeout(()=>k(!1),2e3)},className:"flex-1",variant:y?"outline":"default",children:y?(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(v.A,{className:"mr-2 h-4 w-4"}),"Copied!"]}):(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(w.A,{className:"mr-2 h-4 w-4"}),"Copy Token"]})}),(0,s.jsx)(h.$,{onClick:()=>a(!1),variant:"outline",children:"Close"})]})]})]})}):(0,s.jsx)(g.lG,{open:t,onOpenChange:a,children:(0,s.jsxs)(g.Cf,{className:"sm:max-w-md",children:[(0,s.jsxs)(g.c7,{children:[(0,s.jsx)(g.L3,{children:"Withdraw Balance"}),(0,s.jsx)(g.rr,{children:"Select mint and currency, then enter the amount to withdraw."})]}),(0,s.jsxs)("div",{className:"space-y-4",children:[(0,s.jsxs)("div",{className:"space-y-2",children:[(0,s.jsx)(j.J,{htmlFor:"mint-select",children:"Mint / Currency"}),(0,s.jsxs)(b.l6,{value:i,onValueChange:c,children:[(0,s.jsx)(b.bq,{id:"mint-select",children:(0,s.jsx)(b.yv,{placeholder:"Select mint and currency"})}),(0,s.jsx)(b.gC,{children:_.map(e=>(0,s.jsxs)(b.eb,{value:"".concat(e.mint_url,"|").concat(e.unit),children:[e.mint_url.replace("https://","").replace("http://","")," ","• ",e.unit.toUpperCase()," (",e.owner_balance,")"]},"".concat(e.mint_url,"|").concat(e.unit)))})]})]}),(0,s.jsxs)("div",{className:"space-y-2",children:[(0,s.jsx)(j.J,{htmlFor:"amount",children:"Amount"}),(0,s.jsx)(f.p,{id:"amount",type:"number",min:"1",value:o,onChange:e=>u(e.target.value),placeholder:"Enter amount"}),C&&(0,s.jsxs)("div",{className:"space-y-1 text-xs",children:[(0,s.jsxs)("p",{className:"text-muted-foreground",children:["Maximum:"," ",(0,s.jsxs)("span",{className:"font-semibold",children:[C.wallet_balance," ",C.unit]})]}),(0,s.jsxs)("p",{className:"text-muted-foreground",children:["Your recommended balance:"," ",(0,s.jsxs)("span",{className:"font-semibold",children:[C.owner_balance," ",C.unit]})]})]})]}),E&&(0,s.jsxs)("div",{className:"bg-destructive/10 text-destructive flex items-start gap-2 rounded-md p-3 text-sm",children:[(0,s.jsx)(d.A,{className:"mt-0.5 h-5 w-5 flex-shrink-0"}),(0,s.jsx)("span",{children:"Warning: Withdrawing more than your balance will use user funds!"})]}),z.isError&&(0,s.jsxs)("div",{className:"bg-destructive/10 text-destructive flex items-start gap-2 rounded-md p-3 text-sm",children:[(0,s.jsx)(d.A,{className:"mt-0.5 h-5 w-5 flex-shrink-0"}),(0,s.jsx)("span",{children:z.error.message||"Failed to withdraw"})]}),(0,s.jsxs)("div",{className:"flex gap-2",children:[(0,s.jsx)(h.$,{onClick:()=>z.mutate(),disabled:!i||!o||z.isPending||A<=0||C&&A>C.wallet_balance,className:"flex-1",children:z.isPending?"Withdrawing...":"Withdraw"}),(0,s.jsx)(h.$,{onClick:()=>a(!1),variant:"outline",disabled:z.isPending,children:"Cancel"})]})]})]})})}var y=a(9183);function k(e){let t,a,o,{refreshInterval:u=1e4}=e,[p,g]=(0,n.useState)(!1),{data:f,isLoading:j,isError:b,error:v,isFetching:w,refetch:k}=(0,r.I)({queryKey:["detailed-wallet-balance"],queryFn:async()=>m.getDetailedBalances(),refetchInterval:u}),_=f?(t=0,a=0,o=0,f.forEach(e=>{e.error||(t+=e.wallet_balance||0,a+=e.user_balance||0,o+=e.owner_balance||0)}),{totalWallet:t,totalUser:a,totalOwner:o}):{totalWallet:0,totalUser:0,totalOwner:0};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)(x.Zp,{className:"h-full w-full shadow-sm",children:[(0,s.jsxs)(x.aR,{className:"pb-4",children:[(0,s.jsxs)("div",{className:"flex items-center justify-between",children:[(0,s.jsx)(x.ZB,{className:"text-xl",children:"Cashu Wallet Balance"}),(0,s.jsxs)("div",{className:"flex gap-2",children:[(0,s.jsxs)(h.$,{variant:"default",size:"sm",onClick:()=>g(!0),disabled:j||!f||0===f.length,children:[(0,s.jsx)(l,{className:"mr-2 h-4 w-4"}),"Withdraw"]}),(0,s.jsxs)(h.$,{variant:"ghost",size:"icon",onClick:()=>k(),disabled:j||w,className:"h-8 w-8",children:[(0,s.jsx)(i.A,{className:(0,y.cn)("h-4 w-4",(w||j)&&"animate-spin")}),(0,s.jsx)("span",{className:"sr-only",children:"Refresh balance"})]})]})]}),(0,s.jsx)(x.BT,{children:"Detailed balance breakdown by mint and currency"})]}),(0,s.jsx)(x.Wu,{children:j?(0,s.jsx)("div",{className:"flex items-center justify-center py-8",children:(0,s.jsx)(c.A,{className:"text-primary h-8 w-8 animate-spin"})}):b?(0,s.jsxs)("div",{className:"bg-destructive/10 text-destructive flex items-center space-x-2 rounded-md p-4",children:[(0,s.jsx)(d.A,{className:"h-5 w-5"}),(0,s.jsxs)("span",{children:["Error loading balance: ",v.message]})]}):(0,s.jsxs)("div",{className:"space-y-6",children:[(0,s.jsxs)("div",{className:"space-y-3",children:[(0,s.jsxs)("div",{className:"flex items-center justify-between",children:[(0,s.jsx)("span",{className:"text-muted-foreground text-sm",children:"Your Balance (Total)"}),(0,s.jsxs)("span",{className:"text-2xl font-bold text-green-600",children:[_.totalOwner.toLocaleString()," sats"]})]}),(0,s.jsxs)("div",{className:"flex items-center justify-between",children:[(0,s.jsx)("span",{className:"text-muted-foreground text-sm",children:"Total Wallet"}),(0,s.jsxs)("span",{className:"text-lg font-semibold",children:[_.totalWallet.toLocaleString()," sats"]})]}),(0,s.jsxs)("div",{className:"flex items-center justify-between",children:[(0,s.jsx)("span",{className:"text-muted-foreground text-sm",children:"User Balance"}),(0,s.jsxs)("span",{className:"text-lg font-semibold",children:[_.totalUser.toLocaleString()," sats"]})]})]}),(0,s.jsx)("p",{className:"text-muted-foreground text-xs",children:"Your balance = Total wallet - User balance"}),(0,s.jsxs)("div",{className:"overflow-hidden rounded-lg border",children:[(0,s.jsxs)("div",{className:"bg-muted grid grid-cols-4 gap-2 p-3 text-sm font-semibold",children:[(0,s.jsx)("div",{children:"Mint / Unit"}),(0,s.jsx)("div",{className:"text-right",children:"Wallet"}),(0,s.jsx)("div",{className:"text-right",children:"Users"}),(0,s.jsx)("div",{className:"text-right",children:"Owner"})]}),f&&f.length>0?f.filter(e=>e.wallet_balance&&e.wallet_balance>0||e.error).map((e,t)=>(0,s.jsxs)("div",{className:(0,y.cn)("grid grid-cols-4 gap-2 border-t p-3 text-sm",e.error&&"bg-destructive/10 text-destructive"),children:[(0,s.jsxs)("div",{className:"text-xs break-all",children:[e.mint_url.replace("https://","").replace("http://","")," ","• ",e.unit.toUpperCase()]}),(0,s.jsx)("div",{className:"text-right font-mono",children:e.error?"error":e.wallet_balance.toLocaleString()}),(0,s.jsx)("div",{className:"text-right font-mono",children:e.error?"-":e.user_balance.toLocaleString()}),(0,s.jsx)("div",{className:(0,y.cn)("text-right font-mono",!e.error&&e.owner_balance>0&&"font-semibold text-green-600"),children:e.error?"-":e.owner_balance.toLocaleString()})]},t)):(0,s.jsx)("div",{className:"text-muted-foreground p-4 text-center text-sm",children:"No balances to display"})]})]})})]}),(0,s.jsx)(N,{open:p,onOpenChange:g,balances:f||[],onSuccess:()=>{k()}})]})}},246:(e,t,a)=>{"use strict";a.d(t,{A:()=>s});let s=(0,a(3929).A)("circle-check-big",[["path",{d:"M21.801 10A10 10 0 1 1 17 3.335",key:"yps3ct"}],["path",{d:"m9 11 3 3L22 4",key:"1pflzl"}]])},2264:(e,t,a)=>{"use strict";a.d(t,{bq:()=>u,eb:()=>x,gC:()=>m,l6:()=>d,yv:()=>o});var s=a(3422);a(4398);var n=a(3439),r=a(9994),l=a(8940),i=a(4967),c=a(9183);function d(e){let{...t}=e;return(0,s.jsx)(n.bL,{"data-slot":"select",...t})}function o(e){let{...t}=e;return(0,s.jsx)(n.WT,{"data-slot":"select-value",...t})}function u(e){let{className:t,size:a="default",children:l,...i}=e;return(0,s.jsxs)(n.l9,{"data-slot":"select-trigger","data-size":a,className:(0,c.cn)("border-input data-[placeholder]:text-muted-foreground [&_svg:not([class*='text-'])]:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 dark:hover:bg-input/50 flex w-fit items-center justify-between gap-2 rounded-md border bg-transparent px-3 py-2 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",t),...i,children:[l,(0,s.jsx)(n.In,{asChild:!0,children:(0,s.jsx)(r.A,{className:"size-4 opacity-50"})})]})}function m(e){let{className:t,children:a,position:r="popper",...l}=e;return(0,s.jsx)(n.ZL,{children:(0,s.jsxs)(n.UC,{"data-slot":"select-content",className:(0,c.cn)("bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 relative z-50 max-h-(--radix-select-content-available-height) min-w-[8rem] origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border shadow-md","popper"===r&&"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",t),position:r,...l,children:[(0,s.jsx)(h,{}),(0,s.jsx)(n.LM,{className:(0,c.cn)("p-1","popper"===r&&"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1"),children:a}),(0,s.jsx)(p,{})]})})}function x(e){let{className:t,children:a,...r}=e;return(0,s.jsxs)(n.q7,{"data-slot":"select-item",className:(0,c.cn)("focus:bg-accent focus:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2",t),...r,children:[(0,s.jsx)("span",{className:"absolute right-2 flex size-3.5 items-center justify-center",children:(0,s.jsx)(n.VF,{children:(0,s.jsx)(l.A,{className:"size-4"})})}),(0,s.jsx)(n.p4,{children:a})]})}function h(e){let{className:t,...a}=e;return(0,s.jsx)(n.PP,{"data-slot":"select-scroll-up-button",className:(0,c.cn)("flex cursor-default items-center justify-center py-1",t),...a,children:(0,s.jsx)(i.A,{className:"size-4"})})}function p(e){let{className:t,...a}=e;return(0,s.jsx)(n.wn,{"data-slot":"select-scroll-down-button",className:(0,c.cn)("flex cursor-default items-center justify-center py-1",t),...a,children:(0,s.jsx)(r.A,{className:"size-4"})})}},2434:(e,t,a)=>{"use strict";a.d(t,{A:()=>s});let s=(0,a(3929).A)("loader-circle",[["path",{d:"M21 12a9 9 0 1 1-6.219-8.56",key:"13zald"}]])},2533:(e,t,a)=>{"use strict";a.d(t,{A:()=>s});let s=(0,a(3929).A)("copy",[["rect",{width:"14",height:"14",x:"8",y:"8",rx:"2",ry:"2",key:"17jyea"}],["path",{d:"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2",key:"zix9uf"}]])},2738:(e,t,a)=>{"use strict";a.d(t,{BT:()=>c,Wu:()=>d,ZB:()=>i,Zp:()=>r,aR:()=>l,wL:()=>o});var s=a(3422);a(4398);var n=a(9183);function r(e){let{className:t,...a}=e;return(0,s.jsx)("div",{"data-slot":"card",className:(0,n.cn)("bg-card text-card-foreground flex flex-col gap-6 rounded-xl border py-6 shadow-sm",t),...a})}function l(e){let{className:t,...a}=e;return(0,s.jsx)("div",{"data-slot":"card-header",className:(0,n.cn)("@container/card-header grid auto-rows-min grid-rows-[auto_auto] items-start gap-1.5 px-6 has-data-[slot=card-action]:grid-cols-[1fr_auto] [.border-b]:pb-6",t),...a})}function i(e){let{className:t,...a}=e;return(0,s.jsx)("div",{"data-slot":"card-title",className:(0,n.cn)("leading-none font-semibold",t),...a})}function c(e){let{className:t,...a}=e;return(0,s.jsx)("div",{"data-slot":"card-description",className:(0,n.cn)("text-muted-foreground text-sm",t),...a})}function d(e){let{className:t,...a}=e;return(0,s.jsx)("div",{"data-slot":"card-content",className:(0,n.cn)("px-6",t),...a})}function o(e){let{className:t,...a}=e;return(0,s.jsx)("div",{"data-slot":"card-footer",className:(0,n.cn)("flex items-center px-6 [.border-t]:pt-6",t),...a})}},2801:(e,t,a)=>{Promise.resolve().then(a.bind(a,7569)),Promise.resolve().then(a.bind(a,159)),Promise.resolve().then(a.bind(a,4756)),Promise.resolve().then(a.bind(a,953))},3130:(e,t,a)=>{"use strict";a.d(t,{J:()=>l});var s=a(3422);a(4398);var n=a(2996),r=a(9183);function l(e){let{className:t,...a}=e;return(0,s.jsx)(n.b,{"data-slot":"label",className:(0,r.cn)("flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50",t),...a})}},3728:(e,t,a)=>{"use strict";a.d(t,{A:()=>s});let s=(0,a(3929).A)("refresh-cw",[["path",{d:"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8",key:"v9h5vc"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}],["path",{d:"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16",key:"3uifl3"}],["path",{d:"M8 16H3v5",key:"1cv678"}]])},6320:(e,t,a)=>{"use strict";a.d(t,{Cf:()=>u,Es:()=>x,L3:()=>h,c7:()=>m,lG:()=>i,rr:()=>p,zM:()=>c});var s=a(3422);a(4398);var n=a(4316),r=a(9680),l=a(9183);function i(e){let{...t}=e;return(0,s.jsx)(n.bL,{"data-slot":"dialog",...t})}function c(e){let{...t}=e;return(0,s.jsx)(n.l9,{"data-slot":"dialog-trigger",...t})}function d(e){let{...t}=e;return(0,s.jsx)(n.ZL,{"data-slot":"dialog-portal",...t})}function o(e){let{className:t,...a}=e;return(0,s.jsx)(n.hJ,{"data-slot":"dialog-overlay",className:(0,l.cn)("data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50",t),...a})}function u(e){let{className:t,children:a,...i}=e;return(0,s.jsxs)(d,{"data-slot":"dialog-portal",children:[(0,s.jsx)(o,{}),(0,s.jsxs)(n.UC,{"data-slot":"dialog-content",className:(0,l.cn)("bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-lg",t),...i,children:[a,(0,s.jsxs)(n.bm,{className:"ring-offset-background focus:ring-ring data-[state=open]:bg-accent data-[state=open]:text-muted-foreground absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",children:[(0,s.jsx)(r.A,{}),(0,s.jsx)("span",{className:"sr-only",children:"Close"})]})]})]})}function m(e){let{className:t,...a}=e;return(0,s.jsx)("div",{"data-slot":"dialog-header",className:(0,l.cn)("flex flex-col gap-2 text-center sm:text-left",t),...a})}function x(e){let{className:t,...a}=e;return(0,s.jsx)("div",{"data-slot":"dialog-footer",className:(0,l.cn)("flex flex-col-reverse gap-2 sm:flex-row sm:justify-end",t),...a})}function h(e){let{className:t,...a}=e;return(0,s.jsx)(n.hE,{"data-slot":"dialog-title",className:(0,l.cn)("text-lg leading-none font-semibold",t),...a})}function p(e){let{className:t,...a}=e;return(0,s.jsx)(n.VY,{"data-slot":"dialog-description",className:(0,l.cn)("text-muted-foreground text-sm",t),...a})}}},e=>{var t=t=>e(e.s=t);e.O(0,[363,222,808,29,730,978,481,236,945,497,358],()=>t(2801)),_N_E=e.O()}]);
\ No newline at end of file
diff --git a/ui_out/_next/static/chunks/app/providers/page-24027db6adfd0b9b.js b/ui_out/_next/static/chunks/app/providers/page-24027db6adfd0b9b.js
new file mode 100644
index 00000000..6d9c957f
--- /dev/null
+++ b/ui_out/_next/static/chunks/app/providers/page-24027db6adfd0b9b.js
@@ -0,0 +1 @@
+(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[387],{989:(e,s,t)=>{"use strict";t.d(s,{A:()=>a});let a=(0,t(3929).A)("eye-off",[["path",{d:"M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49",key:"ct8e1f"}],["path",{d:"M14.084 14.158a3 3 0 0 1-4.242-4.242",key:"151rxh"}],["path",{d:"M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143",key:"13bj9a"}],["path",{d:"m2 2 20 20",key:"1ooewy"}]])},2264:(e,s,t)=>{"use strict";t.d(s,{bq:()=>u,eb:()=>p,gC:()=>x,l6:()=>o,yv:()=>c});var a=t(3422);t(4398);var r=t(3439),n=t(9994),i=t(8940),l=t(4967),d=t(9183);function o(e){let{...s}=e;return(0,a.jsx)(r.bL,{"data-slot":"select",...s})}function c(e){let{...s}=e;return(0,a.jsx)(r.WT,{"data-slot":"select-value",...s})}function u(e){let{className:s,size:t="default",children:i,...l}=e;return(0,a.jsxs)(r.l9,{"data-slot":"select-trigger","data-size":t,className:(0,d.cn)("border-input data-[placeholder]:text-muted-foreground [&_svg:not([class*='text-'])]:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 dark:hover:bg-input/50 flex w-fit items-center justify-between gap-2 rounded-md border bg-transparent px-3 py-2 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",s),...l,children:[i,(0,a.jsx)(r.In,{asChild:!0,children:(0,a.jsx)(n.A,{className:"size-4 opacity-50"})})]})}function x(e){let{className:s,children:t,position:n="popper",...i}=e;return(0,a.jsx)(r.ZL,{children:(0,a.jsxs)(r.UC,{"data-slot":"select-content",className:(0,d.cn)("bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 relative z-50 max-h-(--radix-select-content-available-height) min-w-[8rem] origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border shadow-md","popper"===n&&"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",s),position:n,...i,children:[(0,a.jsx)(m,{}),(0,a.jsx)(r.LM,{className:(0,d.cn)("p-1","popper"===n&&"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1"),children:t}),(0,a.jsx)(h,{})]})})}function p(e){let{className:s,children:t,...n}=e;return(0,a.jsxs)(r.q7,{"data-slot":"select-item",className:(0,d.cn)("focus:bg-accent focus:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2",s),...n,children:[(0,a.jsx)("span",{className:"absolute right-2 flex size-3.5 items-center justify-center",children:(0,a.jsx)(r.VF,{children:(0,a.jsx)(i.A,{className:"size-4"})})}),(0,a.jsx)(r.p4,{children:t})]})}function m(e){let{className:s,...t}=e;return(0,a.jsx)(r.PP,{"data-slot":"select-scroll-up-button",className:(0,d.cn)("flex cursor-default items-center justify-center py-1",s),...t,children:(0,a.jsx)(l.A,{className:"size-4"})})}function h(e){let{className:s,...t}=e;return(0,a.jsx)(r.wn,{"data-slot":"select-scroll-down-button",className:(0,d.cn)("flex cursor-default items-center justify-center py-1",s),...t,children:(0,a.jsx)(n.A,{className:"size-4"})})}},6078:(e,s,t)=>{Promise.resolve().then(t.bind(t,8288))},6320:(e,s,t)=>{"use strict";t.d(s,{Cf:()=>u,Es:()=>p,L3:()=>m,c7:()=>x,lG:()=>l,rr:()=>h,zM:()=>d});var a=t(3422);t(4398);var r=t(4316),n=t(9680),i=t(9183);function l(e){let{...s}=e;return(0,a.jsx)(r.bL,{"data-slot":"dialog",...s})}function d(e){let{...s}=e;return(0,a.jsx)(r.l9,{"data-slot":"dialog-trigger",...s})}function o(e){let{...s}=e;return(0,a.jsx)(r.ZL,{"data-slot":"dialog-portal",...s})}function c(e){let{className:s,...t}=e;return(0,a.jsx)(r.hJ,{"data-slot":"dialog-overlay",className:(0,i.cn)("data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50",s),...t})}function u(e){let{className:s,children:t,...l}=e;return(0,a.jsxs)(o,{"data-slot":"dialog-portal",children:[(0,a.jsx)(c,{}),(0,a.jsxs)(r.UC,{"data-slot":"dialog-content",className:(0,i.cn)("bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-lg",s),...l,children:[t,(0,a.jsxs)(r.bm,{className:"ring-offset-background focus:ring-ring data-[state=open]:bg-accent data-[state=open]:text-muted-foreground absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",children:[(0,a.jsx)(n.A,{}),(0,a.jsx)("span",{className:"sr-only",children:"Close"})]})]})]})}function x(e){let{className:s,...t}=e;return(0,a.jsx)("div",{"data-slot":"dialog-header",className:(0,i.cn)("flex flex-col gap-2 text-center sm:text-left",s),...t})}function p(e){let{className:s,...t}=e;return(0,a.jsx)("div",{"data-slot":"dialog-footer",className:(0,i.cn)("flex flex-col-reverse gap-2 sm:flex-row sm:justify-end",s),...t})}function m(e){let{className:s,...t}=e;return(0,a.jsx)(r.hE,{"data-slot":"dialog-title",className:(0,i.cn)("text-lg leading-none font-semibold",s),...t})}function h(e){let{className:s,...t}=e;return(0,a.jsx)(r.VY,{"data-slot":"dialog-description",className:(0,i.cn)("text-muted-foreground text-sm",s),...t})}},6568:(e,s,t)=>{"use strict";t.d(s,{d:()=>i});var a=t(3422);t(4398);var r=t(2495),n=t(9183);function i(e){let{className:s,...t}=e;return(0,a.jsx)(r.bL,{"data-slot":"switch",className:(0,n.cn)("peer data-[state=checked]:bg-primary data-[state=unchecked]:bg-input focus-visible:border-ring focus-visible:ring-ring/50 dark:data-[state=unchecked]:bg-input/80 inline-flex h-[1.15rem] w-8 shrink-0 items-center rounded-full border border-transparent shadow-xs transition-all outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50",s),...t,children:(0,a.jsx)(r.zi,{"data-slot":"switch-thumb",className:(0,n.cn)("bg-background dark:data-[state=unchecked]:bg-foreground dark:data-[state=checked]:bg-primary-foreground pointer-events-none block size-4 rounded-full ring-0 transition-transform data-[state=checked]:translate-x-[calc(100%-2px)] data-[state=unchecked]:translate-x-0")})})}},6839:(e,s,t)=>{"use strict";t.d(s,{Xi:()=>d,av:()=>o,j7:()=>l,tU:()=>i});var a=t(3422);t(4398);var r=t(1749),n=t(9183);function i(e){let{className:s,...t}=e;return(0,a.jsx)(r.bL,{"data-slot":"tabs",className:(0,n.cn)("flex flex-col gap-2",s),...t})}function l(e){let{className:s,...t}=e;return(0,a.jsx)(r.B8,{"data-slot":"tabs-list",className:(0,n.cn)("bg-muted text-muted-foreground inline-flex h-9 w-fit items-center justify-center rounded-lg p-[3px]",s),...t})}function d(e){let{className:s,...t}=e;return(0,a.jsx)(r.l9,{"data-slot":"tabs-trigger",className:(0,n.cn)("data-[state=active]:bg-background dark:data-[state=active]:text-foreground focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:outline-ring dark:data-[state=active]:border-input dark:data-[state=active]:bg-input/30 text-foreground dark:text-muted-foreground inline-flex h-[calc(100%-1px)] flex-1 items-center justify-center gap-1.5 rounded-md border border-transparent px-2 py-1 text-sm font-medium whitespace-nowrap transition-[color,box-shadow] focus-visible:ring-[3px] focus-visible:outline-1 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:shadow-sm [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",s),...t})}function o(e){let{className:s,...t}=e;return(0,a.jsx)(r.UC,{"data-slot":"tabs-content",className:(0,n.cn)("flex-1 outline-none",s),...t})}},8288:(e,s,t)=>{"use strict";t.r(s),t.d(s,{default:()=>L});var a=t(3422),r=t(953),n=t(7569),i=t(4756),l=t(3648),d=t(2738),o=t(8561),c=t(100),u=t(2349),x=t(6013),p=t(9119),m=t(2745),h=t(856),v=t(9675),g=t(2335),f=t(9285),j=t(4967),b=t(9994);let y=(0,t(3929).A)("pencil",[["path",{d:"M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z",key:"1a8usu"}],["path",{d:"m15 5 4 4",key:"1mk7zo"}]]);var N=t(6541),_=t(989),w=t(7137),k=t(9442),z=t(6320),C=t(268),A=t(3130),P=t(2264),E=t(6568),F=t(6839),S=t(4398),I=t(3831);function L(){let e=(0,c.jE)(),[s,t]=(0,S.useState)(null),[L,U]=(0,S.useState)(!1),[O,R]=(0,S.useState)(!1),[M,q]=(0,S.useState)(null),[J,V]=(0,S.useState)(new Set),[$,K]=(0,S.useState)(null),[Q,T]=(0,S.useState)({provider_type:"openrouter",base_url:"",api_key:"",api_version:null,enabled:!0}),{data:D=[],isLoading:G,error:B}=(0,u.I)({queryKey:["upstream-providers"],queryFn:()=>p.zQ.getUpstreamProviders(),refetchOnWindowFocus:!1}),{data:W,isLoading:Z}=(0,u.I)({queryKey:["provider-models",$],queryFn:()=>$?p.zQ.getProviderModels($):Promise.resolve(null),enabled:!!$,refetchOnWindowFocus:!1}),X=(0,x.n)({mutationFn:e=>p.zQ.createUpstreamProvider(e),onSuccess:()=>{e.invalidateQueries({queryKey:["upstream-providers"]}),U(!1),I.oR.success("Provider created successfully"),ee()},onError:e=>{I.oR.error("Failed to create provider: ".concat(e.message))}}),H=(0,x.n)({mutationFn:e=>{let{id:s,data:t}=e;return p.zQ.updateUpstreamProvider(s,t)},onSuccess:()=>{e.invalidateQueries({queryKey:["upstream-providers"]}),R(!1),t(null),I.oR.success("Provider updated successfully")},onError:e=>{I.oR.error("Failed to update provider: ".concat(e.message))}}),Y=(0,x.n)({mutationFn:e=>p.zQ.deleteUpstreamProvider(e),onSuccess:()=>{e.invalidateQueries({queryKey:["upstream-providers"]}),I.oR.success("Provider deleted successfully")},onError:e=>{I.oR.error("Failed to delete provider: ".concat(e.message))}}),ee=()=>{T({provider_type:"openrouter",base_url:"",api_key:"",api_version:null,enabled:!0})},es=e=>{t(e),T({provider_type:e.provider_type,base_url:e.base_url,api_key:"",api_version:e.api_version||null,enabled:e.enabled}),R(!0)},et=e=>{confirm("Are you sure you want to delete this provider?")&&Y.mutate(e)},ea=e=>({openrouter:"https://openrouter.ai/api/v1",openai:"https://api.openai.com/v1",anthropic:"https://api.anthropic.com/v1",azure:"",ollama:"http://localhost:11434",generic:""})[e]||"",er=e=>{let s=new Set(J);s.has(e)?s.delete(e):s.add(e),V(s),s.has(e)?K(e):K(null)};return(0,a.jsxs)(r.SidebarProvider,{children:[(0,a.jsx)(n.AppSidebar,{variant:"inset"}),(0,a.jsxs)(r.SidebarInset,{children:[(0,a.jsx)(i.SiteHeader,{}),(0,a.jsx)("div",{className:"flex flex-1 flex-col",children:(0,a.jsxs)("div",{className:"@container/main flex flex-1 flex-col gap-4 p-4 md:gap-8 md:p-8",children:[(0,a.jsxs)("div",{className:"mb-6 flex items-center justify-between",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("h1",{className:"text-2xl font-bold tracking-tight",children:"Upstream Providers"}),(0,a.jsx)("p",{className:"text-muted-foreground mt-2 text-sm",children:"Manage your AI provider connections and credentials"})]}),(0,a.jsxs)(z.lG,{open:L,onOpenChange:U,children:[(0,a.jsx)(z.zM,{asChild:!0,children:(0,a.jsxs)(l.$,{className:"flex items-center gap-2",children:[(0,a.jsx)(h.A,{className:"h-4 w-4"}),"Add Provider"]})}),(0,a.jsxs)(z.Cf,{className:"sm:max-w-[500px]",children:[(0,a.jsxs)(z.c7,{children:[(0,a.jsx)(z.L3,{children:"Add Upstream Provider"}),(0,a.jsx)(z.rr,{children:"Configure a new AI provider connection"})]}),(0,a.jsxs)("div",{className:"grid gap-4 py-4",children:[(0,a.jsxs)("div",{className:"grid gap-2",children:[(0,a.jsx)(A.J,{htmlFor:"provider_type",children:"Provider Type"}),(0,a.jsxs)(P.l6,{value:Q.provider_type,onValueChange:e=>{T({...Q,provider_type:e,base_url:ea(e)})},children:[(0,a.jsx)(P.bq,{children:(0,a.jsx)(P.yv,{})}),(0,a.jsxs)(P.gC,{children:[(0,a.jsx)(P.eb,{value:"openrouter",children:"OpenRouter"}),(0,a.jsx)(P.eb,{value:"openai",children:"OpenAI"}),(0,a.jsx)(P.eb,{value:"anthropic",children:"Anthropic"}),(0,a.jsx)(P.eb,{value:"azure",children:"Azure OpenAI"}),(0,a.jsx)(P.eb,{value:"ollama",children:"Ollama"}),(0,a.jsx)(P.eb,{value:"generic",children:"Generic"})]})]})]}),(0,a.jsxs)("div",{className:"grid gap-2",children:[(0,a.jsx)(A.J,{htmlFor:"base_url",children:"Base URL"}),(0,a.jsx)(C.p,{id:"base_url",value:Q.base_url,onChange:e=>T({...Q,base_url:e.target.value}),placeholder:"https://api.example.com/v1"})]}),(0,a.jsxs)("div",{className:"grid gap-2",children:[(0,a.jsx)(A.J,{htmlFor:"api_key",children:"API Key"}),(0,a.jsx)(C.p,{id:"api_key",type:"password",value:Q.api_key,onChange:e=>T({...Q,api_key:e.target.value}),placeholder:"sk-..."})]}),"azure"===Q.provider_type&&(0,a.jsxs)("div",{className:"grid gap-2",children:[(0,a.jsx)(A.J,{htmlFor:"api_version",children:"API Version"}),(0,a.jsx)(C.p,{id:"api_version",value:Q.api_version||"",onChange:e=>T({...Q,api_version:e.target.value||null}),placeholder:"2024-02-15-preview"})]}),(0,a.jsxs)("div",{className:"flex items-center space-x-2",children:[(0,a.jsx)(E.d,{id:"enabled",checked:Q.enabled,onCheckedChange:e=>T({...Q,enabled:e})}),(0,a.jsx)(A.J,{htmlFor:"enabled",children:"Enabled"})]})]}),(0,a.jsxs)(z.Es,{children:[(0,a.jsx)(l.$,{variant:"outline",onClick:()=>U(!1),children:"Cancel"}),(0,a.jsx)(l.$,{onClick:()=>{X.mutate(Q)},disabled:X.isPending,children:X.isPending?"Creating...":"Create"})]})]})]})]}),G?(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsx)(m.E,{className:"h-[100px] w-full"}),(0,a.jsx)(m.E,{className:"h-[100px] w-full"})]}):B?(0,a.jsxs)(k.Fc,{variant:"destructive",children:[(0,a.jsx)(v.A,{className:"h-4 w-4"}),(0,a.jsx)(k.TN,{children:"Failed to load providers. Please try refreshing the page."})]}):0===D.length?(0,a.jsx)(d.Zp,{children:(0,a.jsxs)(d.Wu,{className:"flex flex-col items-center justify-center py-12",children:[(0,a.jsx)(g.A,{className:"text-muted-foreground mb-4 h-12 w-12"}),(0,a.jsx)("h3",{className:"mb-2 text-lg font-semibold",children:"No providers configured"}),(0,a.jsx)("p",{className:"text-muted-foreground mb-4 text-sm",children:"Get started by adding your first upstream provider"}),(0,a.jsxs)(l.$,{onClick:()=>U(!0),children:[(0,a.jsx)(h.A,{className:"mr-2 h-4 w-4"}),"Add Provider"]})]})}):(0,a.jsx)("div",{className:"grid gap-4",children:D.map(e=>(0,a.jsxs)(d.Zp,{children:[(0,a.jsx)(d.aR,{children:(0,a.jsxs)("div",{className:"flex items-start justify-between",children:[(0,a.jsxs)("div",{className:"flex-1",children:[(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)(d.ZB,{className:"text-lg",children:e.provider_type}),(0,a.jsx)(o.E,{variant:e.enabled?"default":"secondary",children:e.enabled?"Enabled":"Disabled"})]}),(0,a.jsx)(d.BT,{className:"mt-1",children:e.base_url})]}),(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsxs)(l.$,{variant:"outline",size:"sm",onClick:()=>er(e.id),children:[(0,a.jsx)(f.A,{className:"mr-1 h-4 w-4"}),"Models",J.has(e.id)?(0,a.jsx)(j.A,{className:"ml-1 h-4 w-4"}):(0,a.jsx)(b.A,{className:"ml-1 h-4 w-4"})]}),(0,a.jsx)(l.$,{variant:"outline",size:"sm",onClick:()=>es(e),children:(0,a.jsx)(y,{className:"h-4 w-4"})}),(0,a.jsx)(l.$,{variant:"outline",size:"sm",onClick:()=>et(e.id),children:(0,a.jsx)(N.A,{className:"h-4 w-4"})})]})]})}),(0,a.jsx)(d.Wu,{children:(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsxs)("div",{className:"flex items-center justify-between text-sm",children:[(0,a.jsx)("span",{className:"text-muted-foreground",children:"Provider ID:"}),(0,a.jsx)("span",{className:"font-mono",children:e.id})]}),e.api_version&&(0,a.jsxs)("div",{className:"flex items-center justify-between text-sm",children:[(0,a.jsx)("span",{className:"text-muted-foreground",children:"API Version:"}),(0,a.jsx)("span",{className:"font-mono",children:e.api_version})]}),(0,a.jsxs)("div",{className:"flex items-center justify-between text-sm",children:[(0,a.jsx)("span",{className:"text-muted-foreground",children:"API Key:"}),(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)("span",{className:"font-mono",children:M===e.id?e.api_key||"[REDACTED]":"••••••••"}),(0,a.jsx)(l.$,{variant:"ghost",size:"sm",onClick:()=>q(M===e.id?null:e.id),children:M===e.id?(0,a.jsx)(_.A,{className:"h-4 w-4"}):(0,a.jsx)(w.A,{className:"h-4 w-4"})})]})]})]}),J.has(e.id)&&(0,a.jsx)("div",{className:"mt-4 border-t pt-4",children:Z&&$===e.id?(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(m.E,{className:"h-[40px] w-full"}),(0,a.jsx)(m.E,{className:"h-[40px] w-full"})]}):W&&$===e.id?(0,a.jsxs)(F.tU,{defaultValue:"remote",className:"w-full",children:[(0,a.jsxs)(F.j7,{className:"grid w-full grid-cols-2",children:[(0,a.jsxs)(F.Xi,{value:"remote",children:["Remote Models",(0,a.jsx)(o.E,{variant:"secondary",className:"ml-2",children:W.remote_models.length})]}),(0,a.jsxs)(F.Xi,{value:"db",children:["Database Models",(0,a.jsx)(o.E,{variant:"secondary",className:"ml-2",children:W.db_models.length})]})]}),(0,a.jsx)(F.av,{value:"db",className:"mt-4 space-y-2",children:0===W.db_models.length?(0,a.jsx)("div",{className:"text-muted-foreground py-4 text-center text-sm",children:"No database models configured"}):(0,a.jsx)("div",{className:"space-y-2",children:W.db_models.map(e=>{var s;return(0,a.jsxs)("div",{className:"hover:bg-accent flex items-center justify-between rounded-lg border p-3 transition-colors",children:[(0,a.jsxs)("div",{className:"flex-1",children:[(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)("span",{className:"font-mono text-sm font-medium",children:e.id}),(0,a.jsx)(o.E,{variant:e.enabled?"default":"secondary",className:"text-xs",children:e.enabled?"Enabled":"Disabled"})]}),(0,a.jsx)("div",{className:"text-muted-foreground mt-1 text-xs",children:e.description||e.name})]}),(0,a.jsxs)("div",{className:"text-muted-foreground text-xs",children:[null==(s=e.context_length)?void 0:s.toLocaleString()," ","tokens"]})]},e.id)})})}),(0,a.jsx)(F.av,{value:"remote",className:"mt-4 space-y-2",children:0===W.remote_models.length?(0,a.jsx)("div",{className:"text-muted-foreground py-4 text-center text-sm",children:"No remote models available"}):(0,a.jsx)("div",{className:"space-y-2",children:W.remote_models.map(e=>{var s;return(0,a.jsxs)("div",{className:"hover:bg-accent flex items-center justify-between rounded-lg border p-3 transition-colors",children:[(0,a.jsxs)("div",{className:"flex-1",children:[(0,a.jsx)("div",{className:"font-mono text-sm font-medium",children:e.id}),(0,a.jsx)("div",{className:"text-muted-foreground mt-1 text-xs",children:e.description||e.name})]}),(0,a.jsxs)("div",{className:"text-muted-foreground text-xs",children:[null==(s=e.context_length)?void 0:s.toLocaleString()," ","tokens"]})]},e.id)})})})]}):null})]})})]},e.id))})]})}),(0,a.jsx)(z.lG,{open:O,onOpenChange:R,children:(0,a.jsxs)(z.Cf,{className:"sm:max-w-[500px]",children:[(0,a.jsxs)(z.c7,{children:[(0,a.jsx)(z.L3,{children:"Edit Upstream Provider"}),(0,a.jsx)(z.rr,{children:"Update provider configuration"})]}),(0,a.jsxs)("div",{className:"grid gap-4 py-4",children:[(0,a.jsxs)("div",{className:"grid gap-2",children:[(0,a.jsx)(A.J,{htmlFor:"edit_provider_type",children:"Provider Type"}),(0,a.jsxs)(P.l6,{value:Q.provider_type,onValueChange:e=>{T({...Q,provider_type:e})},children:[(0,a.jsx)(P.bq,{children:(0,a.jsx)(P.yv,{})}),(0,a.jsxs)(P.gC,{children:[(0,a.jsx)(P.eb,{value:"openrouter",children:"OpenRouter"}),(0,a.jsx)(P.eb,{value:"openai",children:"OpenAI"}),(0,a.jsx)(P.eb,{value:"anthropic",children:"Anthropic"}),(0,a.jsx)(P.eb,{value:"azure",children:"Azure OpenAI"}),(0,a.jsx)(P.eb,{value:"ollama",children:"Ollama"}),(0,a.jsx)(P.eb,{value:"generic",children:"Generic"})]})]})]}),(0,a.jsxs)("div",{className:"grid gap-2",children:[(0,a.jsx)(A.J,{htmlFor:"edit_base_url",children:"Base URL"}),(0,a.jsx)(C.p,{id:"edit_base_url",value:Q.base_url,onChange:e=>T({...Q,base_url:e.target.value}),placeholder:"https://api.example.com/v1"})]}),(0,a.jsxs)("div",{className:"grid gap-2",children:[(0,a.jsx)(A.J,{htmlFor:"edit_api_key",children:"API Key (leave blank to keep current)"}),(0,a.jsx)(C.p,{id:"edit_api_key",type:"password",value:Q.api_key,onChange:e=>T({...Q,api_key:e.target.value}),placeholder:"Leave blank to keep current"})]}),"azure"===Q.provider_type&&(0,a.jsxs)("div",{className:"grid gap-2",children:[(0,a.jsx)(A.J,{htmlFor:"edit_api_version",children:"API Version"}),(0,a.jsx)(C.p,{id:"edit_api_version",value:Q.api_version||"",onChange:e=>T({...Q,api_version:e.target.value||null}),placeholder:"2024-02-15-preview"})]}),(0,a.jsxs)("div",{className:"flex items-center space-x-2",children:[(0,a.jsx)(E.d,{id:"edit_enabled",checked:Q.enabled,onCheckedChange:e=>T({...Q,enabled:e})}),(0,a.jsx)(A.J,{htmlFor:"edit_enabled",children:"Enabled"})]})]}),(0,a.jsxs)(z.Es,{children:[(0,a.jsx)(l.$,{variant:"outline",onClick:()=>R(!1),children:"Cancel"}),(0,a.jsx)(l.$,{onClick:()=>{if(!s)return;let e={provider_type:Q.provider_type,base_url:Q.base_url,api_version:Q.api_version,enabled:Q.enabled};Q.api_key&&(e.api_key=Q.api_key),H.mutate({id:s.id,data:e})},disabled:H.isPending,children:H.isPending?"Updating...":"Update"})]})]})})]})]})}},8561:(e,s,t)=>{"use strict";t.d(s,{E:()=>l});var a=t(3422);t(4398);var r=t(4676),n=t(9183);let i=(0,r.F)("inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2",{variants:{variant:{default:"border-transparent bg-primary text-primary-foreground hover:bg-primary/80",secondary:"border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80",destructive:"border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80",outline:"text-foreground",success:"border-transparent bg-green-500 text-white hover:bg-green-500/80",warning:"border-transparent bg-yellow-500 text-white hover:bg-yellow-500/80",error:"border-transparent bg-red-500 text-white hover:bg-red-500/80"}},defaultVariants:{variant:"default"}});function l(e){let{className:s,variant:t,...r}=e;return(0,a.jsx)("div",{className:(0,n.cn)(i({variant:t}),s),...r})}},9442:(e,s,t)=>{"use strict";t.d(s,{Fc:()=>l,TN:()=>d});var a=t(3422);t(4398);var r=t(4676),n=t(9183);let i=(0,r.F)("relative w-full rounded-lg border px-4 py-3 text-sm grid has-[>svg]:grid-cols-[calc(var(--spacing)*4)_1fr] grid-cols-[0_1fr] has-[>svg]:gap-x-3 gap-y-0.5 items-start [&>svg]:size-4 [&>svg]:translate-y-0.5 [&>svg]:text-current",{variants:{variant:{default:"bg-card text-card-foreground",destructive:"text-destructive bg-card [&>svg]:text-current *:data-[slot=alert-description]:text-destructive/90"}},defaultVariants:{variant:"default"}});function l(e){let{className:s,variant:t,...r}=e;return(0,a.jsx)("div",{"data-slot":"alert",role:"alert",className:(0,n.cn)(i({variant:t}),s),...r})}function d(e){let{className:s,...t}=e;return(0,a.jsx)("div",{"data-slot":"alert-description",className:(0,n.cn)("text-muted-foreground col-start-2 grid justify-items-start gap-1 text-sm [&_p]:leading-relaxed",s),...t})}}},e=>{var s=s=>e(e.s=s);e.O(0,[363,222,808,29,730,978,481,982,236,601,945,497,358],()=>s(6078)),_N_E=e.O()}]);
\ No newline at end of file
diff --git a/ui_out/_next/static/chunks/app/providers/page-284d295c40b8f18c.js b/ui_out/_next/static/chunks/app/providers/page-284d295c40b8f18c.js
deleted file mode 100644
index 58a4db04..00000000
--- a/ui_out/_next/static/chunks/app/providers/page-284d295c40b8f18c.js
+++ /dev/null
@@ -1 +0,0 @@
-(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[387],{989:(e,s,a)=>{"use strict";a.d(s,{A:()=>t});let t=(0,a(3929).A)("eye-off",[["path",{d:"M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49",key:"ct8e1f"}],["path",{d:"M14.084 14.158a3 3 0 0 1-4.242-4.242",key:"151rxh"}],["path",{d:"M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143",key:"13bj9a"}],["path",{d:"m2 2 20 20",key:"1ooewy"}]])},2264:(e,s,a)=>{"use strict";a.d(s,{bq:()=>u,eb:()=>p,gC:()=>x,l6:()=>o,yv:()=>c});var t=a(3422);a(4398);var r=a(3439),l=a(9994),i=a(8940),n=a(4967),d=a(9183);function o(e){let{...s}=e;return(0,t.jsx)(r.bL,{"data-slot":"select",...s})}function c(e){let{...s}=e;return(0,t.jsx)(r.WT,{"data-slot":"select-value",...s})}function u(e){let{className:s,size:a="default",children:i,...n}=e;return(0,t.jsxs)(r.l9,{"data-slot":"select-trigger","data-size":a,className:(0,d.cn)("border-input data-[placeholder]:text-muted-foreground [&_svg:not([class*='text-'])]:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 dark:hover:bg-input/50 flex w-fit items-center justify-between gap-2 rounded-md border bg-transparent px-3 py-2 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",s),...n,children:[i,(0,t.jsx)(r.In,{asChild:!0,children:(0,t.jsx)(l.A,{className:"size-4 opacity-50"})})]})}function x(e){let{className:s,children:a,position:l="popper",...i}=e;return(0,t.jsx)(r.ZL,{children:(0,t.jsxs)(r.UC,{"data-slot":"select-content",className:(0,d.cn)("bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 relative z-50 max-h-(--radix-select-content-available-height) min-w-[8rem] origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border shadow-md","popper"===l&&"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",s),position:l,...i,children:[(0,t.jsx)(m,{}),(0,t.jsx)(r.LM,{className:(0,d.cn)("p-1","popper"===l&&"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1"),children:a}),(0,t.jsx)(h,{})]})})}function p(e){let{className:s,children:a,...l}=e;return(0,t.jsxs)(r.q7,{"data-slot":"select-item",className:(0,d.cn)("focus:bg-accent focus:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2",s),...l,children:[(0,t.jsx)("span",{className:"absolute right-2 flex size-3.5 items-center justify-center",children:(0,t.jsx)(r.VF,{children:(0,t.jsx)(i.A,{className:"size-4"})})}),(0,t.jsx)(r.p4,{children:a})]})}function m(e){let{className:s,...a}=e;return(0,t.jsx)(r.PP,{"data-slot":"select-scroll-up-button",className:(0,d.cn)("flex cursor-default items-center justify-center py-1",s),...a,children:(0,t.jsx)(n.A,{className:"size-4"})})}function h(e){let{className:s,...a}=e;return(0,t.jsx)(r.wn,{"data-slot":"select-scroll-down-button",className:(0,d.cn)("flex cursor-default items-center justify-center py-1",s),...a,children:(0,t.jsx)(l.A,{className:"size-4"})})}},6078:(e,s,a)=>{Promise.resolve().then(a.bind(a,8288))},6320:(e,s,a)=>{"use strict";a.d(s,{Cf:()=>u,Es:()=>p,L3:()=>m,c7:()=>x,lG:()=>n,rr:()=>h,zM:()=>d});var t=a(3422);a(4398);var r=a(4316),l=a(9680),i=a(9183);function n(e){let{...s}=e;return(0,t.jsx)(r.bL,{"data-slot":"dialog",...s})}function d(e){let{...s}=e;return(0,t.jsx)(r.l9,{"data-slot":"dialog-trigger",...s})}function o(e){let{...s}=e;return(0,t.jsx)(r.ZL,{"data-slot":"dialog-portal",...s})}function c(e){let{className:s,...a}=e;return(0,t.jsx)(r.hJ,{"data-slot":"dialog-overlay",className:(0,i.cn)("data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50",s),...a})}function u(e){let{className:s,children:a,...n}=e;return(0,t.jsxs)(o,{"data-slot":"dialog-portal",children:[(0,t.jsx)(c,{}),(0,t.jsxs)(r.UC,{"data-slot":"dialog-content",className:(0,i.cn)("bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-lg",s),...n,children:[a,(0,t.jsxs)(r.bm,{className:"ring-offset-background focus:ring-ring data-[state=open]:bg-accent data-[state=open]:text-muted-foreground absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",children:[(0,t.jsx)(l.A,{}),(0,t.jsx)("span",{className:"sr-only",children:"Close"})]})]})]})}function x(e){let{className:s,...a}=e;return(0,t.jsx)("div",{"data-slot":"dialog-header",className:(0,i.cn)("flex flex-col gap-2 text-center sm:text-left",s),...a})}function p(e){let{className:s,...a}=e;return(0,t.jsx)("div",{"data-slot":"dialog-footer",className:(0,i.cn)("flex flex-col-reverse gap-2 sm:flex-row sm:justify-end",s),...a})}function m(e){let{className:s,...a}=e;return(0,t.jsx)(r.hE,{"data-slot":"dialog-title",className:(0,i.cn)("text-lg leading-none font-semibold",s),...a})}function h(e){let{className:s,...a}=e;return(0,t.jsx)(r.VY,{"data-slot":"dialog-description",className:(0,i.cn)("text-muted-foreground text-sm",s),...a})}},6568:(e,s,a)=>{"use strict";a.d(s,{d:()=>i});var t=a(3422);a(4398);var r=a(2495),l=a(9183);function i(e){let{className:s,...a}=e;return(0,t.jsx)(r.bL,{"data-slot":"switch",className:(0,l.cn)("peer data-[state=checked]:bg-primary data-[state=unchecked]:bg-input focus-visible:border-ring focus-visible:ring-ring/50 dark:data-[state=unchecked]:bg-input/80 inline-flex h-[1.15rem] w-8 shrink-0 items-center rounded-full border border-transparent shadow-xs transition-all outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50",s),...a,children:(0,t.jsx)(r.zi,{"data-slot":"switch-thumb",className:(0,l.cn)("bg-background dark:data-[state=unchecked]:bg-foreground dark:data-[state=checked]:bg-primary-foreground pointer-events-none block size-4 rounded-full ring-0 transition-transform data-[state=checked]:translate-x-[calc(100%-2px)] data-[state=unchecked]:translate-x-0")})})}},8288:(e,s,a)=>{"use strict";a.r(s),a.d(s,{default:()=>L});var t=a(3422),r=a(953),l=a(7569),i=a(4756),n=a(3648),d=a(2738),o=a(8561),c=a(100),u=a(2349),x=a(6013),p=a(9119),m=a(2745),h=a(856),v=a(9675),j=a(2335),g=a(9285),f=a(4967),b=a(9994);let y=(0,a(3929).A)("pencil",[["path",{d:"M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z",key:"1a8usu"}],["path",{d:"m15 5 4 4",key:"1mk7zo"}]]);var N=a(6541),_=a(989),k=a(7137),w=a(9442),z=a(6320),C=a(268),A=a(3130),P=a(2264),E=a(6568),F=a(6839),S=a(4398),I=a(3831);function L(){let e=(0,c.jE)(),[s,a]=(0,S.useState)(null),[L,U]=(0,S.useState)(!1),[O,R]=(0,S.useState)(!1),[M,q]=(0,S.useState)(null),[J,$]=(0,S.useState)(new Set),[K,Q]=(0,S.useState)(null),[V,D]=(0,S.useState)({provider_type:"openrouter",base_url:"",api_key:"",api_version:null,enabled:!0}),{data:G=[],isLoading:T,error:W}=(0,u.I)({queryKey:["upstream-providers"],queryFn:()=>p.zQ.getUpstreamProviders(),refetchOnWindowFocus:!1}),{data:Z,isLoading:B}=(0,u.I)({queryKey:["provider-models",K],queryFn:()=>K?p.zQ.getProviderModels(K):Promise.resolve(null),enabled:!!K,refetchOnWindowFocus:!1}),X=(0,x.n)({mutationFn:e=>p.zQ.createUpstreamProvider(e),onSuccess:()=>{e.invalidateQueries({queryKey:["upstream-providers"]}),U(!1),I.oR.success("Provider created successfully"),ee()},onError:e=>{I.oR.error("Failed to create provider: ".concat(e.message))}}),H=(0,x.n)({mutationFn:e=>{let{id:s,data:a}=e;return p.zQ.updateUpstreamProvider(s,a)},onSuccess:()=>{e.invalidateQueries({queryKey:["upstream-providers"]}),R(!1),a(null),I.oR.success("Provider updated successfully")},onError:e=>{I.oR.error("Failed to update provider: ".concat(e.message))}}),Y=(0,x.n)({mutationFn:e=>p.zQ.deleteUpstreamProvider(e),onSuccess:()=>{e.invalidateQueries({queryKey:["upstream-providers"]}),I.oR.success("Provider deleted successfully")},onError:e=>{I.oR.error("Failed to delete provider: ".concat(e.message))}}),ee=()=>{D({provider_type:"openrouter",base_url:"",api_key:"",api_version:null,enabled:!0})},es=e=>{a(e),D({provider_type:e.provider_type,base_url:e.base_url,api_key:"",api_version:e.api_version||null,enabled:e.enabled}),R(!0)},ea=e=>{confirm("Are you sure you want to delete this provider?")&&Y.mutate(e)},et=e=>({openrouter:"https://openrouter.ai/api/v1",openai:"https://api.openai.com/v1",anthropic:"https://api.anthropic.com/v1",azure:"",ollama:"http://localhost:11434",generic:""})[e]||"",er=e=>{let s=new Set(J);s.has(e)?s.delete(e):s.add(e),$(s),s.has(e)?Q(e):Q(null)};return(0,t.jsxs)(r.SidebarProvider,{children:[(0,t.jsx)(l.AppSidebar,{variant:"inset"}),(0,t.jsxs)(r.SidebarInset,{children:[(0,t.jsx)(i.SiteHeader,{}),(0,t.jsx)("div",{className:"flex flex-1 flex-col",children:(0,t.jsxs)("div",{className:"@container/main flex flex-1 flex-col gap-4 p-4 md:gap-8 md:p-8",children:[(0,t.jsxs)("div",{className:"mb-6 flex items-center justify-between",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("h1",{className:"text-2xl font-bold tracking-tight",children:"Upstream Providers"}),(0,t.jsx)("p",{className:"text-muted-foreground mt-2 text-sm",children:"Manage your AI provider connections and credentials"})]}),(0,t.jsxs)(z.lG,{open:L,onOpenChange:U,children:[(0,t.jsx)(z.zM,{asChild:!0,children:(0,t.jsxs)(n.$,{className:"flex items-center gap-2",children:[(0,t.jsx)(h.A,{className:"h-4 w-4"}),"Add Provider"]})}),(0,t.jsxs)(z.Cf,{className:"sm:max-w-[500px]",children:[(0,t.jsxs)(z.c7,{children:[(0,t.jsx)(z.L3,{children:"Add Upstream Provider"}),(0,t.jsx)(z.rr,{children:"Configure a new AI provider connection"})]}),(0,t.jsxs)("div",{className:"grid gap-4 py-4",children:[(0,t.jsxs)("div",{className:"grid gap-2",children:[(0,t.jsx)(A.J,{htmlFor:"provider_type",children:"Provider Type"}),(0,t.jsxs)(P.l6,{value:V.provider_type,onValueChange:e=>{D({...V,provider_type:e,base_url:et(e)})},children:[(0,t.jsx)(P.bq,{children:(0,t.jsx)(P.yv,{})}),(0,t.jsxs)(P.gC,{children:[(0,t.jsx)(P.eb,{value:"openrouter",children:"OpenRouter"}),(0,t.jsx)(P.eb,{value:"openai",children:"OpenAI"}),(0,t.jsx)(P.eb,{value:"anthropic",children:"Anthropic"}),(0,t.jsx)(P.eb,{value:"azure",children:"Azure OpenAI"}),(0,t.jsx)(P.eb,{value:"ollama",children:"Ollama"}),(0,t.jsx)(P.eb,{value:"generic",children:"Generic"})]})]})]}),(0,t.jsxs)("div",{className:"grid gap-2",children:[(0,t.jsx)(A.J,{htmlFor:"base_url",children:"Base URL"}),(0,t.jsx)(C.p,{id:"base_url",value:V.base_url,onChange:e=>D({...V,base_url:e.target.value}),placeholder:"https://api.example.com/v1"})]}),(0,t.jsxs)("div",{className:"grid gap-2",children:[(0,t.jsx)(A.J,{htmlFor:"api_key",children:"API Key"}),(0,t.jsx)(C.p,{id:"api_key",type:"password",value:V.api_key,onChange:e=>D({...V,api_key:e.target.value}),placeholder:"sk-..."})]}),"azure"===V.provider_type&&(0,t.jsxs)("div",{className:"grid gap-2",children:[(0,t.jsx)(A.J,{htmlFor:"api_version",children:"API Version"}),(0,t.jsx)(C.p,{id:"api_version",value:V.api_version||"",onChange:e=>D({...V,api_version:e.target.value||null}),placeholder:"2024-02-15-preview"})]}),(0,t.jsxs)("div",{className:"flex items-center space-x-2",children:[(0,t.jsx)(E.d,{id:"enabled",checked:V.enabled,onCheckedChange:e=>D({...V,enabled:e})}),(0,t.jsx)(A.J,{htmlFor:"enabled",children:"Enabled"})]})]}),(0,t.jsxs)(z.Es,{children:[(0,t.jsx)(n.$,{variant:"outline",onClick:()=>U(!1),children:"Cancel"}),(0,t.jsx)(n.$,{onClick:()=>{X.mutate(V)},disabled:X.isPending,children:X.isPending?"Creating...":"Create"})]})]})]})]}),T?(0,t.jsxs)("div",{className:"space-y-4",children:[(0,t.jsx)(m.E,{className:"h-[100px] w-full"}),(0,t.jsx)(m.E,{className:"h-[100px] w-full"})]}):W?(0,t.jsxs)(w.Fc,{variant:"destructive",children:[(0,t.jsx)(v.A,{className:"h-4 w-4"}),(0,t.jsx)(w.TN,{children:"Failed to load providers. Please try refreshing the page."})]}):0===G.length?(0,t.jsx)(d.Zp,{children:(0,t.jsxs)(d.Wu,{className:"flex flex-col items-center justify-center py-12",children:[(0,t.jsx)(j.A,{className:"text-muted-foreground mb-4 h-12 w-12"}),(0,t.jsx)("h3",{className:"mb-2 text-lg font-semibold",children:"No providers configured"}),(0,t.jsx)("p",{className:"text-muted-foreground mb-4 text-sm",children:"Get started by adding your first upstream provider"}),(0,t.jsxs)(n.$,{onClick:()=>U(!0),children:[(0,t.jsx)(h.A,{className:"mr-2 h-4 w-4"}),"Add Provider"]})]})}):(0,t.jsx)("div",{className:"grid gap-4",children:G.map(e=>(0,t.jsxs)(d.Zp,{children:[(0,t.jsx)(d.aR,{children:(0,t.jsxs)("div",{className:"flex items-start justify-between",children:[(0,t.jsxs)("div",{className:"flex-1",children:[(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsx)(d.ZB,{className:"text-lg",children:e.provider_type}),(0,t.jsx)(o.E,{variant:e.enabled?"default":"secondary",children:e.enabled?"Enabled":"Disabled"})]}),(0,t.jsx)(d.BT,{className:"mt-1",children:e.base_url})]}),(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsxs)(n.$,{variant:"outline",size:"sm",onClick:()=>er(e.id),children:[(0,t.jsx)(g.A,{className:"mr-1 h-4 w-4"}),"Models",J.has(e.id)?(0,t.jsx)(f.A,{className:"ml-1 h-4 w-4"}):(0,t.jsx)(b.A,{className:"ml-1 h-4 w-4"})]}),(0,t.jsx)(n.$,{variant:"outline",size:"sm",onClick:()=>es(e),children:(0,t.jsx)(y,{className:"h-4 w-4"})}),(0,t.jsx)(n.$,{variant:"outline",size:"sm",onClick:()=>ea(e.id),children:(0,t.jsx)(N.A,{className:"h-4 w-4"})})]})]})}),(0,t.jsx)(d.Wu,{children:(0,t.jsxs)("div",{className:"space-y-4",children:[(0,t.jsxs)("div",{className:"space-y-2",children:[(0,t.jsxs)("div",{className:"flex items-center justify-between text-sm",children:[(0,t.jsx)("span",{className:"text-muted-foreground",children:"Provider ID:"}),(0,t.jsx)("span",{className:"font-mono",children:e.id})]}),e.api_version&&(0,t.jsxs)("div",{className:"flex items-center justify-between text-sm",children:[(0,t.jsx)("span",{className:"text-muted-foreground",children:"API Version:"}),(0,t.jsx)("span",{className:"font-mono",children:e.api_version})]}),(0,t.jsxs)("div",{className:"flex items-center justify-between text-sm",children:[(0,t.jsx)("span",{className:"text-muted-foreground",children:"API Key:"}),(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsx)("span",{className:"font-mono",children:M===e.id?e.api_key||"[REDACTED]":"••••••••"}),(0,t.jsx)(n.$,{variant:"ghost",size:"sm",onClick:()=>q(M===e.id?null:e.id),children:M===e.id?(0,t.jsx)(_.A,{className:"h-4 w-4"}):(0,t.jsx)(k.A,{className:"h-4 w-4"})})]})]})]}),J.has(e.id)&&(0,t.jsx)("div",{className:"mt-4 border-t pt-4",children:B&&K===e.id?(0,t.jsxs)("div",{className:"space-y-2",children:[(0,t.jsx)(m.E,{className:"h-[40px] w-full"}),(0,t.jsx)(m.E,{className:"h-[40px] w-full"})]}):Z&&K===e.id?(0,t.jsxs)(F.tU,{defaultValue:"remote",className:"w-full",children:[(0,t.jsxs)(F.j7,{className:"grid w-full grid-cols-2",children:[(0,t.jsxs)(F.Xi,{value:"remote",children:["Remote Models",(0,t.jsx)(o.E,{variant:"secondary",className:"ml-2",children:Z.remote_models.length})]}),(0,t.jsxs)(F.Xi,{value:"db",children:["Database Models",(0,t.jsx)(o.E,{variant:"secondary",className:"ml-2",children:Z.db_models.length})]})]}),(0,t.jsx)(F.av,{value:"db",className:"mt-4 space-y-2",children:0===Z.db_models.length?(0,t.jsx)("div",{className:"text-muted-foreground py-4 text-center text-sm",children:"No database models configured"}):(0,t.jsx)("div",{className:"space-y-2",children:Z.db_models.map(e=>{var s;return(0,t.jsxs)("div",{className:"hover:bg-accent flex items-center justify-between rounded-lg border p-3 transition-colors",children:[(0,t.jsxs)("div",{className:"flex-1",children:[(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsx)("span",{className:"font-mono text-sm font-medium",children:e.id}),(0,t.jsx)(o.E,{variant:e.enabled?"default":"secondary",className:"text-xs",children:e.enabled?"Enabled":"Disabled"})]}),(0,t.jsx)("div",{className:"text-muted-foreground mt-1 text-xs",children:e.description||e.name})]}),(0,t.jsxs)("div",{className:"text-muted-foreground text-xs",children:[null==(s=e.context_length)?void 0:s.toLocaleString()," ","tokens"]})]},e.id)})})}),(0,t.jsx)(F.av,{value:"remote",className:"mt-4 space-y-2",children:0===Z.remote_models.length?(0,t.jsx)("div",{className:"text-muted-foreground py-4 text-center text-sm",children:"No remote models available"}):(0,t.jsx)("div",{className:"space-y-2",children:Z.remote_models.map(e=>{var s;return(0,t.jsxs)("div",{className:"hover:bg-accent flex items-center justify-between rounded-lg border p-3 transition-colors",children:[(0,t.jsxs)("div",{className:"flex-1",children:[(0,t.jsx)("div",{className:"font-mono text-sm font-medium",children:e.id}),(0,t.jsx)("div",{className:"text-muted-foreground mt-1 text-xs",children:e.description||e.name})]}),(0,t.jsxs)("div",{className:"text-muted-foreground text-xs",children:[null==(s=e.context_length)?void 0:s.toLocaleString()," ","tokens"]})]},e.id)})})})]}):null})]})})]},e.id))})]})}),(0,t.jsx)(z.lG,{open:O,onOpenChange:R,children:(0,t.jsxs)(z.Cf,{className:"sm:max-w-[500px]",children:[(0,t.jsxs)(z.c7,{children:[(0,t.jsx)(z.L3,{children:"Edit Upstream Provider"}),(0,t.jsx)(z.rr,{children:"Update provider configuration"})]}),(0,t.jsxs)("div",{className:"grid gap-4 py-4",children:[(0,t.jsxs)("div",{className:"grid gap-2",children:[(0,t.jsx)(A.J,{htmlFor:"edit_provider_type",children:"Provider Type"}),(0,t.jsxs)(P.l6,{value:V.provider_type,onValueChange:e=>{D({...V,provider_type:e})},children:[(0,t.jsx)(P.bq,{children:(0,t.jsx)(P.yv,{})}),(0,t.jsxs)(P.gC,{children:[(0,t.jsx)(P.eb,{value:"openrouter",children:"OpenRouter"}),(0,t.jsx)(P.eb,{value:"openai",children:"OpenAI"}),(0,t.jsx)(P.eb,{value:"anthropic",children:"Anthropic"}),(0,t.jsx)(P.eb,{value:"azure",children:"Azure OpenAI"}),(0,t.jsx)(P.eb,{value:"ollama",children:"Ollama"}),(0,t.jsx)(P.eb,{value:"generic",children:"Generic"})]})]})]}),(0,t.jsxs)("div",{className:"grid gap-2",children:[(0,t.jsx)(A.J,{htmlFor:"edit_base_url",children:"Base URL"}),(0,t.jsx)(C.p,{id:"edit_base_url",value:V.base_url,onChange:e=>D({...V,base_url:e.target.value}),placeholder:"https://api.example.com/v1"})]}),(0,t.jsxs)("div",{className:"grid gap-2",children:[(0,t.jsx)(A.J,{htmlFor:"edit_api_key",children:"API Key (leave blank to keep current)"}),(0,t.jsx)(C.p,{id:"edit_api_key",type:"password",value:V.api_key,onChange:e=>D({...V,api_key:e.target.value}),placeholder:"Leave blank to keep current"})]}),"azure"===V.provider_type&&(0,t.jsxs)("div",{className:"grid gap-2",children:[(0,t.jsx)(A.J,{htmlFor:"edit_api_version",children:"API Version"}),(0,t.jsx)(C.p,{id:"edit_api_version",value:V.api_version||"",onChange:e=>D({...V,api_version:e.target.value||null}),placeholder:"2024-02-15-preview"})]}),(0,t.jsxs)("div",{className:"flex items-center space-x-2",children:[(0,t.jsx)(E.d,{id:"edit_enabled",checked:V.enabled,onCheckedChange:e=>D({...V,enabled:e})}),(0,t.jsx)(A.J,{htmlFor:"edit_enabled",children:"Enabled"})]})]}),(0,t.jsxs)(z.Es,{children:[(0,t.jsx)(n.$,{variant:"outline",onClick:()=>R(!1),children:"Cancel"}),(0,t.jsx)(n.$,{onClick:()=>{if(!s)return;let e={provider_type:V.provider_type,base_url:V.base_url,api_version:V.api_version,enabled:V.enabled};V.api_key&&(e.api_key=V.api_key),H.mutate({id:s.id,data:e})},disabled:H.isPending,children:H.isPending?"Updating...":"Update"})]})]})})]})]})}}},e=>{var s=s=>e(e.s=s);e.O(0,[363,222,808,29,730,978,481,982,236,255,945,497,358],()=>s(6078)),_N_E=e.O()}]);
\ No newline at end of file
diff --git a/ui_out/_next/static/chunks/app/settings/page-a90352a6b8bf0df3.js b/ui_out/_next/static/chunks/app/settings/page-a90352a6b8bf0df3.js
deleted file mode 100644
index c02092c4..00000000
--- a/ui_out/_next/static/chunks/app/settings/page-a90352a6b8bf0df3.js
+++ /dev/null
@@ -1 +0,0 @@
-(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[662],{834:(e,s,a)=>{"use strict";a.d(s,{T:()=>t});var r=a(3422);a(4398);var n=a(9183);function t(e){let{className:s,...a}=e;return(0,r.jsx)("textarea",{"data-slot":"textarea",className:(0,n.cn)("border-input placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 flex field-sizing-content min-h-16 w-full rounded-md border bg-transparent px-3 py-2 text-base shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 md:text-sm",s),...a})}},2739:(e,s,a)=>{Promise.resolve().then(a.bind(a,4961))},4961:(e,s,a)=>{"use strict";a.r(s),a.d(s,{default:()=>R});var r=a(3422),n=a(4398),t=a(6839),i=a(3234),l=a(3831),c=a(2738),d=a(268),o=a(3130),h=a(3648),u=a(8561),x=a(9675),p=a(246),m=a(4717);function j(){let{config:e,updateField:s,saveConfig:a,isSyncing:t}=function(){let[e,s]=(0,n.useState)({endpoint:"",apiKey:"",enabled:!1}),[a,r]=(0,n.useState)(!1),[t,c]=(0,n.useState)(!1);(0,n.useEffect)(()=>{(async()=>{s(i.s.getServerConfig()),r(!0);try{c(!0);let e=await i.s.loadServerConfigFromBackend();e&&s(e)}catch(e){console.error("Error loading configuration from backend:",e)}finally{c(!1)}})()},[]);let d=(0,n.useCallback)(async e=>{i.s.saveServerConfig(e),s(e);try{c(!0),await i.s.saveServerConfigToBackend(e)||l.oR.warning("Configuration saved locally, but failed to sync with server")}catch(e){console.error("Error saving configuration to backend:",e),l.oR.error("Failed to sync configuration with server")}finally{c(!1)}},[]),o=(0,n.useCallback)((s,a)=>{d({...e,[s]:a})},[e,d]),h=(0,n.useCallback)(()=>{d({...e,enabled:!e.enabled})},[e,d]);return{config:e,isLoaded:a,isSyncing:t,saveConfig:d,updateField:o,toggleEnabled:h,isConfigValid:(0,n.useCallback)(()=>i.s.isServerConfigValid(),[])}}(),[j,v]=(0,n.useState)("idle"),f=(e,a)=>{s(e,a),v("idle")},g=async()=>{if(e.endpoint){v("testing");try{await i.s.testConnection(e)?(v("success"),l.oR.success("Connection successful!")):(v("error"),l.oR.error("Connection failed. Please check your settings."))}catch(e){console.error("Connection test error:",e),v("error"),l.oR.error("Connection failed. Please check your settings.")}}};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)("div",{className:"mb-6 flex items-center justify-between",children:[(0,r.jsx)("h2",{className:"text-xl font-semibold tracking-tight",children:"External Server Configuration"}),t&&(0,r.jsxs)(u.E,{variant:"outline",className:"flex items-center gap-1",children:[(0,r.jsx)(x.A,{className:"h-4 w-4 animate-spin text-blue-500"}),"Syncing..."]})]}),(0,r.jsxs)(c.Zp,{children:[(0,r.jsx)(c.aR,{children:(0,r.jsxs)("div",{className:"flex items-center justify-between",children:[(0,r.jsxs)("div",{children:[(0,r.jsx)(c.ZB,{children:"Request Forwarding Settings"}),(0,r.jsx)(c.BT,{children:"Configure external server endpoint and authentication for API request forwarding"})]}),e.enabled&&("idle"===j?(0,r.jsxs)(u.E,{variant:"outline",className:"flex items-center gap-1",children:[(0,r.jsx)(x.A,{className:"h-4 w-4 text-yellow-500"}),"Not tested"]}):"testing"===j?(0,r.jsxs)(u.E,{variant:"outline",className:"flex items-center gap-1",children:[(0,r.jsx)(x.A,{className:"h-4 w-4 animate-pulse text-blue-500"}),"Testing..."]}):"success"===j?(0,r.jsxs)(u.E,{variant:"outline",className:"flex items-center gap-1",children:[(0,r.jsx)(p.A,{className:"h-4 w-4 text-green-500"}),"Connected"]}):(0,r.jsxs)(u.E,{variant:"outline",className:"flex items-center gap-1",children:[(0,r.jsx)(m.A,{className:"h-4 w-4 text-red-500"}),"Failed"]}))]})}),(0,r.jsx)(c.Wu,{className:"space-y-4",children:(0,r.jsxs)("div",{className:"space-y-2",children:[(0,r.jsx)(o.J,{htmlFor:"server-endpoint",children:"Server Endpoint URL"}),(0,r.jsxs)("div",{className:"relative",children:[(0,r.jsx)(d.p,{id:"server-endpoint",placeholder:"https://ecash.routstr.info",value:e.endpoint,onChange:e=>f("endpoint",e.target.value),className:"pr-24"}),(0,r.jsx)(h.$,{type:"button",variant:"ghost",size:"sm",className:"absolute top-0 right-0 h-full px-3 py-2 text-xs",onClick:()=>f("endpoint","https://ecash.routstr.info"),children:"Use Default"})]})]})}),(0,r.jsxs)(c.wL,{className:"flex justify-between",children:[(0,r.jsx)(h.$,{variant:"outline",onClick:g,disabled:!e.endpoint||"testing"===j,children:"Test Connection"}),(0,r.jsx)(h.$,{onClick:()=>{try{a(e),l.oR.success("Server configuration saved successfully")}catch(e){l.oR.error("Failed to save configuration"),console.error("Configuration save error:",e)}},children:"Save Configuration"})]})]})]})}var v=a(9119),f=a(834),g=a(9442),w=a(989),N=a(7137),y=a(3728),b=a(7829);function C(){let[e,s]=(0,n.useState)({}),[t,i]=(0,n.useState)(!0),[u,p]=(0,n.useState)(!1),[m,j]=(0,n.useState)(""),[C,_]=(0,n.useState)(!1),[S,k]=(0,n.useState)(""),[R,A]=(0,n.useState)({current_password:"",new_password:"",confirm_password:""}),[F,E]=(0,n.useState)(""),[P,B]=(0,n.useState)(!1);(0,n.useEffect)(()=>{T()},[]);let T=async()=>{try{i(!0),j("");let e=await v.zQ.getSettings();s(e)}catch(s){let e=s instanceof Error?s.message:"Failed to load settings";j(e),l.oR.error(e)}finally{i(!1)}},Z=async()=>{try{p(!0),j("");let a=await v.zQ.updateSettings(e);s(a),l.oR.success("Settings saved successfully")}catch(s){let e=s instanceof Error?s.message:"Failed to save settings";j(e),l.oR.error(e)}finally{p(!1)}},J=async()=>{try{if(B(!0),E(""),R.new_password!==R.confirm_password)return void E("New passwords do not match");if(R.new_password.length<6)return void E("New password must be at least 6 characters");let{apiClient:e}=await Promise.resolve().then(a.bind(a,7916));await e.patch("/admin/api/password",{current_password:R.current_password,new_password:R.new_password}),A({current_password:"",new_password:"",confirm_password:""}),l.oR.success("Password updated successfully")}catch(s){let e=s instanceof Error?s.message:"Failed to update password";E(e),l.oR.error(e)}finally{B(!1)}},U=(e,a)=>{s(s=>({...s,[e]:a}))},$=e=>{s(s=>{var a;return{...s,cashu_mints:(null==(a=s.cashu_mints)?void 0:a.filter((s,a)=>a!==e))||[]}})},L=(s,a,n)=>{let t=e[s]||"";return(0,r.jsxs)("div",{className:"space-y-2",children:[(0,r.jsx)(o.J,{htmlFor:s,children:a}),(0,r.jsxs)("div",{className:"flex gap-2",children:[(0,r.jsx)(d.p,{id:s,type:C?"text":"password",value:C?t:t?"••••••••":"",onChange:e=>U(s,e.target.value),placeholder:n,className:"flex-1"}),(0,r.jsx)(h.$,{type:"button",variant:"outline",size:"icon",onClick:()=>_(!C),children:C?(0,r.jsx)(w.A,{className:"h-4 w-4"}):(0,r.jsx)(N.A,{className:"h-4 w-4"})})]})]})};return t?(0,r.jsx)("div",{className:"flex items-center justify-center py-8",children:(0,r.jsx)("div",{className:"text-muted-foreground",children:"Loading settings..."})}):(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)("div",{className:"mb-6",children:[(0,r.jsx)("h2",{className:"text-xl font-semibold tracking-tight",children:"Admin Settings"}),(0,r.jsx)("p",{className:"text-muted-foreground",children:"Configure your Routstr node settings"})]}),m&&(0,r.jsxs)(g.Fc,{variant:"destructive",className:"mb-6",children:[(0,r.jsx)(x.A,{className:"h-4 w-4"}),(0,r.jsx)(g.TN,{children:m})]}),(0,r.jsxs)("div",{className:"space-y-6",children:[(0,r.jsxs)(c.Zp,{children:[(0,r.jsxs)(c.aR,{children:[(0,r.jsx)(c.ZB,{children:"Basic Information"}),(0,r.jsx)(c.BT,{children:"Configure the basic node information and branding"})]}),(0,r.jsxs)(c.Wu,{className:"space-y-4",children:[(0,r.jsxs)("div",{className:"space-y-2",children:[(0,r.jsx)(o.J,{htmlFor:"name",children:"Node Name"}),(0,r.jsx)(d.p,{id:"name",value:e.name||"",onChange:e=>U("name",e.target.value),placeholder:"ARoutstrNode"})]}),(0,r.jsxs)("div",{className:"space-y-2",children:[(0,r.jsx)(o.J,{htmlFor:"description",children:"Description"}),(0,r.jsx)(f.T,{id:"description",value:e.description||"",onChange:e=>U("description",e.target.value),placeholder:"A Routstr Node",rows:3})]}),(0,r.jsxs)("div",{className:"space-y-2",children:[(0,r.jsx)(o.J,{htmlFor:"http_url",children:"HTTP URL"}),(0,r.jsx)(d.p,{id:"http_url",value:e.http_url||"",onChange:e=>U("http_url",e.target.value),placeholder:"https://your-node.com"})]}),(0,r.jsxs)("div",{className:"space-y-2",children:[(0,r.jsx)(o.J,{htmlFor:"onion_url",children:"Onion URL (Optional)"}),(0,r.jsx)(d.p,{id:"onion_url",value:e.onion_url||"",onChange:e=>U("onion_url",e.target.value),placeholder:"http://your-node.onion"})]})]})]}),(0,r.jsxs)(c.Zp,{children:[(0,r.jsxs)(c.aR,{children:[(0,r.jsx)(c.ZB,{children:"Nostr Configuration"}),(0,r.jsx)(c.BT,{children:"Configure Nostr public and private keys"})]}),(0,r.jsxs)(c.Wu,{className:"space-y-4",children:[(0,r.jsxs)("div",{className:"space-y-2",children:[(0,r.jsx)(o.J,{htmlFor:"npub",children:"Public Key (npub)"}),(0,r.jsx)(d.p,{id:"npub",value:e.npub||"",onChange:e=>U("npub",e.target.value),placeholder:"npub1..."})]}),L("nsec","Private Key (nsec)","nsec1...")]})]}),(0,r.jsxs)(c.Zp,{children:[(0,r.jsxs)(c.aR,{children:[(0,r.jsx)(c.ZB,{children:"Security Settings"}),(0,r.jsx)(c.BT,{children:"Configure authentication and API access"})]}),(0,r.jsx)(c.Wu,{className:"space-y-4",children:L("upstream_api_key","Upstream API Key","Enter API key")})]}),(0,r.jsxs)(c.Zp,{children:[(0,r.jsxs)(c.aR,{children:[(0,r.jsx)(c.ZB,{children:"Cashu Mints"}),(0,r.jsx)(c.BT,{children:"Configure Cashu mint endpoints for payments"})]}),(0,r.jsxs)(c.Wu,{className:"space-y-4",children:[(0,r.jsxs)("div",{className:"space-y-2",children:[(0,r.jsx)(o.J,{htmlFor:"newMint",children:"Add Mint URL"}),(0,r.jsxs)("div",{className:"flex gap-2",children:[(0,r.jsx)(d.p,{id:"newMint",value:S,onChange:e=>k(e.target.value),placeholder:"https://mint.example.com"}),(0,r.jsx)(h.$,{onClick:()=>{S.trim()&&(s(e=>({...e,cashu_mints:[...e.cashu_mints||[],S.trim()]})),k(""))},disabled:!S.trim(),children:"Add Mint"})]})]}),e.cashu_mints&&e.cashu_mints.length>0&&(0,r.jsxs)("div",{className:"space-y-2",children:[(0,r.jsx)(o.J,{children:"Configured Mints"}),(0,r.jsx)("div",{className:"space-y-2",children:e.cashu_mints.map((e,s)=>(0,r.jsxs)("div",{className:"flex items-center gap-2 rounded border p-2",children:[(0,r.jsx)("span",{className:"flex-1 text-sm",children:e}),(0,r.jsx)(h.$,{variant:"outline",size:"sm",onClick:()=>$(s),children:"Remove"})]},s))})]})]})]}),(0,r.jsx)(c.Zp,{className:"mt-6",children:(0,r.jsxs)(c.wL,{className:"flex justify-between",children:[(0,r.jsxs)(h.$,{variant:"outline",onClick:T,disabled:t||u,children:[(0,r.jsx)(y.A,{className:"mr-2 h-4 w-4"}),"Reload"]}),(0,r.jsxs)(h.$,{onClick:Z,disabled:t||u,children:[(0,r.jsx)(b.A,{className:"mr-2 h-4 w-4"}),u?"Saving...":"Save Settings"]})]})}),(0,r.jsxs)(c.Zp,{children:[(0,r.jsxs)(c.aR,{children:[(0,r.jsx)(c.ZB,{children:"Change Admin Password"}),(0,r.jsx)(c.BT,{children:"Update your admin password for enhanced security"})]}),(0,r.jsxs)(c.Wu,{className:"space-y-4",children:[F&&(0,r.jsxs)(g.Fc,{variant:"destructive",children:[(0,r.jsx)(x.A,{className:"h-4 w-4"}),(0,r.jsx)(g.TN,{children:F})]}),(0,r.jsxs)("div",{className:"space-y-2",children:[(0,r.jsx)(o.J,{htmlFor:"current_password",children:"Current Password"}),(0,r.jsx)(d.p,{id:"current_password",type:"password",value:R.current_password,onChange:e=>A(s=>({...s,current_password:e.target.value})),placeholder:"Enter current password"})]}),(0,r.jsxs)("div",{className:"space-y-2",children:[(0,r.jsx)(o.J,{htmlFor:"new_password",children:"New Password"}),(0,r.jsx)(d.p,{id:"new_password",type:"password",value:R.new_password,onChange:e=>A(s=>({...s,new_password:e.target.value})),placeholder:"Enter new password (min 6 characters)"})]}),(0,r.jsxs)("div",{className:"space-y-2",children:[(0,r.jsx)(o.J,{htmlFor:"confirm_password",children:"Confirm New Password"}),(0,r.jsx)(d.p,{id:"confirm_password",type:"password",value:R.confirm_password,onChange:e=>A(s=>({...s,confirm_password:e.target.value})),placeholder:"Confirm new password"})]})]}),(0,r.jsx)(c.wL,{children:(0,r.jsxs)(h.$,{onClick:J,disabled:P||!R.current_password||!R.new_password||!R.confirm_password,children:[(0,r.jsx)(b.A,{className:"mr-2 h-4 w-4"}),P?"Updating...":"Update Password"]})})]})]})]})}var _=a(4756),S=a(7569),k=a(953);function R(){return(0,r.jsxs)(k.SidebarProvider,{children:[(0,r.jsx)(S.AppSidebar,{variant:"inset"}),(0,r.jsxs)(k.SidebarInset,{children:[(0,r.jsx)(_.SiteHeader,{}),(0,r.jsx)("div",{className:"flex flex-1 flex-col",children:(0,r.jsxs)("div",{className:"@container/main flex flex-1 flex-col gap-4 p-4 md:gap-8 md:p-8",children:[(0,r.jsx)("div",{className:"flex items-center",children:(0,r.jsx)("h1",{className:"text-2xl font-bold tracking-tight",children:"Settings"})}),(0,r.jsxs)(t.tU,{defaultValue:"admin",className:"w-full",children:[(0,r.jsx)(t.j7,{className:"mb-4",children:(0,r.jsx)(t.Xi,{value:"admin",children:"Admin Settings"})}),(0,r.jsx)(t.av,{value:"server",children:(0,r.jsx)(j,{})}),(0,r.jsx)(t.av,{value:"admin",children:(0,r.jsx)(C,{})})]})]})})]}),(0,r.jsx)(l.l$,{})]})}}},e=>{var s=s=>e(e.s=s);e.O(0,[363,222,808,978,651,236,255,945,497,358],()=>s(2739)),_N_E=e.O()}]);
\ No newline at end of file
diff --git a/ui_out/_next/static/chunks/app/settings/page-abf398be5044bf9e.js b/ui_out/_next/static/chunks/app/settings/page-abf398be5044bf9e.js
new file mode 100644
index 00000000..1649f93f
--- /dev/null
+++ b/ui_out/_next/static/chunks/app/settings/page-abf398be5044bf9e.js
@@ -0,0 +1 @@
+(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[662],{834:(e,s,r)=>{"use strict";r.d(s,{T:()=>n});var a=r(3422);r(4398);var t=r(9183);function n(e){let{className:s,...r}=e;return(0,a.jsx)("textarea",{"data-slot":"textarea",className:(0,t.cn)("border-input placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 flex field-sizing-content min-h-16 w-full rounded-md border bg-transparent px-3 py-2 text-base shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 md:text-sm",s),...r})}},2739:(e,s,r)=>{Promise.resolve().then(r.bind(r,4961))},4961:(e,s,r)=>{"use strict";r.r(s),r.d(s,{default:()=>R});var a=r(3422),t=r(4398),n=r(6839),i=r(3234),l=r(3831),c=r(2738),o=r(268),d=r(3130),u=r(3648),x=r(8561),h=r(9675),p=r(246),m=r(4717);function g(){let{config:e,updateField:s,saveConfig:r,isSyncing:n}=function(){let[e,s]=(0,t.useState)({endpoint:"",apiKey:"",enabled:!1}),[r,a]=(0,t.useState)(!1),[n,c]=(0,t.useState)(!1);(0,t.useEffect)(()=>{(async()=>{s(i.s.getServerConfig()),a(!0);try{c(!0);let e=await i.s.loadServerConfigFromBackend();e&&s(e)}catch(e){console.error("Error loading configuration from backend:",e)}finally{c(!1)}})()},[]);let o=(0,t.useCallback)(async e=>{i.s.saveServerConfig(e),s(e);try{c(!0),await i.s.saveServerConfigToBackend(e)||l.oR.warning("Configuration saved locally, but failed to sync with server")}catch(e){console.error("Error saving configuration to backend:",e),l.oR.error("Failed to sync configuration with server")}finally{c(!1)}},[]),d=(0,t.useCallback)((s,r)=>{o({...e,[s]:r})},[e,o]),u=(0,t.useCallback)(()=>{o({...e,enabled:!e.enabled})},[e,o]);return{config:e,isLoaded:r,isSyncing:n,saveConfig:o,updateField:d,toggleEnabled:u,isConfigValid:(0,t.useCallback)(()=>i.s.isServerConfigValid(),[])}}(),[g,v]=(0,t.useState)("idle"),f=(e,r)=>{s(e,r),v("idle")},j=async()=>{if(e.endpoint){v("testing");try{await i.s.testConnection(e)?(v("success"),l.oR.success("Connection successful!")):(v("error"),l.oR.error("Connection failed. Please check your settings."))}catch(e){console.error("Connection test error:",e),v("error"),l.oR.error("Connection failed. Please check your settings.")}}};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)("div",{className:"mb-6 flex items-center justify-between",children:[(0,a.jsx)("h2",{className:"text-xl font-semibold tracking-tight",children:"External Server Configuration"}),n&&(0,a.jsxs)(x.E,{variant:"outline",className:"flex items-center gap-1",children:[(0,a.jsx)(h.A,{className:"h-4 w-4 animate-spin text-blue-500"}),"Syncing..."]})]}),(0,a.jsxs)(c.Zp,{children:[(0,a.jsx)(c.aR,{children:(0,a.jsxs)("div",{className:"flex items-center justify-between",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)(c.ZB,{children:"Request Forwarding Settings"}),(0,a.jsx)(c.BT,{children:"Configure external server endpoint and authentication for API request forwarding"})]}),e.enabled&&("idle"===g?(0,a.jsxs)(x.E,{variant:"outline",className:"flex items-center gap-1",children:[(0,a.jsx)(h.A,{className:"h-4 w-4 text-yellow-500"}),"Not tested"]}):"testing"===g?(0,a.jsxs)(x.E,{variant:"outline",className:"flex items-center gap-1",children:[(0,a.jsx)(h.A,{className:"h-4 w-4 animate-pulse text-blue-500"}),"Testing..."]}):"success"===g?(0,a.jsxs)(x.E,{variant:"outline",className:"flex items-center gap-1",children:[(0,a.jsx)(p.A,{className:"h-4 w-4 text-green-500"}),"Connected"]}):(0,a.jsxs)(x.E,{variant:"outline",className:"flex items-center gap-1",children:[(0,a.jsx)(m.A,{className:"h-4 w-4 text-red-500"}),"Failed"]}))]})}),(0,a.jsx)(c.Wu,{className:"space-y-4",children:(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(d.J,{htmlFor:"server-endpoint",children:"Server Endpoint URL"}),(0,a.jsxs)("div",{className:"relative",children:[(0,a.jsx)(o.p,{id:"server-endpoint",placeholder:"https://ecash.routstr.info",value:e.endpoint,onChange:e=>f("endpoint",e.target.value),className:"pr-24"}),(0,a.jsx)(u.$,{type:"button",variant:"ghost",size:"sm",className:"absolute top-0 right-0 h-full px-3 py-2 text-xs",onClick:()=>f("endpoint","https://ecash.routstr.info"),children:"Use Default"})]})]})}),(0,a.jsxs)(c.wL,{className:"flex justify-between",children:[(0,a.jsx)(u.$,{variant:"outline",onClick:j,disabled:!e.endpoint||"testing"===g,children:"Test Connection"}),(0,a.jsx)(u.$,{onClick:()=>{try{r(e),l.oR.success("Server configuration saved successfully")}catch(e){l.oR.error("Failed to save configuration"),console.error("Configuration save error:",e)}},children:"Save Configuration"})]})]})]})}var v=r(9119),f=r(834),j=r(9442),w=r(989),b=r(7137),y=r(3728),N=r(7829);function C(){let[e,s]=(0,t.useState)({}),[n,i]=(0,t.useState)(!0),[x,p]=(0,t.useState)(!1),[m,g]=(0,t.useState)(""),[C,_]=(0,t.useState)(!1),[S,k]=(0,t.useState)(""),[R,F]=(0,t.useState)({current_password:"",new_password:"",confirm_password:""}),[A,E]=(0,t.useState)(""),[P,B]=(0,t.useState)(!1);(0,t.useEffect)(()=>{T()},[]);let T=async()=>{try{i(!0),g("");let e=await v.zQ.getSettings();s(e)}catch(s){let e=s instanceof Error?s.message:"Failed to load settings";g(e),l.oR.error(e)}finally{i(!1)}},Z=async()=>{try{p(!0),g("");let r=await v.zQ.updateSettings(e);s(r),l.oR.success("Settings saved successfully")}catch(s){let e=s instanceof Error?s.message:"Failed to save settings";g(e),l.oR.error(e)}finally{p(!1)}},J=async()=>{try{if(B(!0),E(""),R.new_password!==R.confirm_password)return void E("New passwords do not match");if(R.new_password.length<6)return void E("New password must be at least 6 characters");let{apiClient:e}=await Promise.resolve().then(r.bind(r,7916));await e.patch("/admin/api/password",{current_password:R.current_password,new_password:R.new_password}),F({current_password:"",new_password:"",confirm_password:""}),l.oR.success("Password updated successfully")}catch(s){let e=s instanceof Error?s.message:"Failed to update password";E(e),l.oR.error(e)}finally{B(!1)}},U=(e,r)=>{s(s=>({...s,[e]:r}))},$=e=>{s(s=>{var r;return{...s,cashu_mints:(null==(r=s.cashu_mints)?void 0:r.filter((s,r)=>r!==e))||[]}})},z=(s,r,t)=>{let n=e[s]||"";return(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(d.J,{htmlFor:s,children:r}),(0,a.jsxs)("div",{className:"flex gap-2",children:[(0,a.jsx)(o.p,{id:s,type:C?"text":"password",value:C?n:n?"••••••••":"",onChange:e=>U(s,e.target.value),placeholder:t,className:"flex-1"}),(0,a.jsx)(u.$,{type:"button",variant:"outline",size:"icon",onClick:()=>_(!C),children:C?(0,a.jsx)(w.A,{className:"h-4 w-4"}):(0,a.jsx)(b.A,{className:"h-4 w-4"})})]})]})};return n?(0,a.jsx)("div",{className:"flex items-center justify-center py-8",children:(0,a.jsx)("div",{className:"text-muted-foreground",children:"Loading settings..."})}):(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)("div",{className:"mb-6",children:[(0,a.jsx)("h2",{className:"text-xl font-semibold tracking-tight",children:"Admin Settings"}),(0,a.jsx)("p",{className:"text-muted-foreground",children:"Configure your Routstr node settings"})]}),m&&(0,a.jsxs)(j.Fc,{variant:"destructive",className:"mb-6",children:[(0,a.jsx)(h.A,{className:"h-4 w-4"}),(0,a.jsx)(j.TN,{children:m})]}),(0,a.jsxs)("div",{className:"space-y-6",children:[(0,a.jsxs)(c.Zp,{children:[(0,a.jsxs)(c.aR,{children:[(0,a.jsx)(c.ZB,{children:"Basic Information"}),(0,a.jsx)(c.BT,{children:"Configure the basic node information and branding"})]}),(0,a.jsxs)(c.Wu,{className:"space-y-4",children:[(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(d.J,{htmlFor:"name",children:"Node Name"}),(0,a.jsx)(o.p,{id:"name",value:e.name||"",onChange:e=>U("name",e.target.value),placeholder:"ARoutstrNode"})]}),(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(d.J,{htmlFor:"description",children:"Description"}),(0,a.jsx)(f.T,{id:"description",value:e.description||"",onChange:e=>U("description",e.target.value),placeholder:"A Routstr Node",rows:3})]}),(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(d.J,{htmlFor:"http_url",children:"HTTP URL"}),(0,a.jsx)(o.p,{id:"http_url",value:e.http_url||"",onChange:e=>U("http_url",e.target.value),placeholder:"https://your-node.com"})]}),(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(d.J,{htmlFor:"onion_url",children:"Onion URL (Optional)"}),(0,a.jsx)(o.p,{id:"onion_url",value:e.onion_url||"",onChange:e=>U("onion_url",e.target.value),placeholder:"http://your-node.onion"})]})]})]}),(0,a.jsxs)(c.Zp,{children:[(0,a.jsxs)(c.aR,{children:[(0,a.jsx)(c.ZB,{children:"Nostr Configuration"}),(0,a.jsx)(c.BT,{children:"Configure Nostr public and private keys"})]}),(0,a.jsxs)(c.Wu,{className:"space-y-4",children:[(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(d.J,{htmlFor:"npub",children:"Public Key (npub)"}),(0,a.jsx)(o.p,{id:"npub",value:e.npub||"",onChange:e=>U("npub",e.target.value),placeholder:"npub1..."})]}),z("nsec","Private Key (nsec)","nsec1...")]})]}),(0,a.jsxs)(c.Zp,{children:[(0,a.jsxs)(c.aR,{children:[(0,a.jsx)(c.ZB,{children:"Security Settings"}),(0,a.jsx)(c.BT,{children:"Configure authentication and API access"})]}),(0,a.jsx)(c.Wu,{className:"space-y-4",children:z("upstream_api_key","Upstream API Key","Enter API key")})]}),(0,a.jsxs)(c.Zp,{children:[(0,a.jsxs)(c.aR,{children:[(0,a.jsx)(c.ZB,{children:"Cashu Mints"}),(0,a.jsx)(c.BT,{children:"Configure Cashu mint endpoints for payments"})]}),(0,a.jsxs)(c.Wu,{className:"space-y-4",children:[(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(d.J,{htmlFor:"newMint",children:"Add Mint URL"}),(0,a.jsxs)("div",{className:"flex gap-2",children:[(0,a.jsx)(o.p,{id:"newMint",value:S,onChange:e=>k(e.target.value),placeholder:"https://mint.example.com"}),(0,a.jsx)(u.$,{onClick:()=>{S.trim()&&(s(e=>({...e,cashu_mints:[...e.cashu_mints||[],S.trim()]})),k(""))},disabled:!S.trim(),children:"Add Mint"})]})]}),e.cashu_mints&&e.cashu_mints.length>0&&(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(d.J,{children:"Configured Mints"}),(0,a.jsx)("div",{className:"space-y-2",children:e.cashu_mints.map((e,s)=>(0,a.jsxs)("div",{className:"flex items-center gap-2 rounded border p-2",children:[(0,a.jsx)("span",{className:"flex-1 text-sm",children:e}),(0,a.jsx)(u.$,{variant:"outline",size:"sm",onClick:()=>$(s),children:"Remove"})]},s))})]})]})]}),(0,a.jsx)(c.Zp,{className:"mt-6",children:(0,a.jsxs)(c.wL,{className:"flex justify-between",children:[(0,a.jsxs)(u.$,{variant:"outline",onClick:T,disabled:n||x,children:[(0,a.jsx)(y.A,{className:"mr-2 h-4 w-4"}),"Reload"]}),(0,a.jsxs)(u.$,{onClick:Z,disabled:n||x,children:[(0,a.jsx)(N.A,{className:"mr-2 h-4 w-4"}),x?"Saving...":"Save Settings"]})]})}),(0,a.jsxs)(c.Zp,{children:[(0,a.jsxs)(c.aR,{children:[(0,a.jsx)(c.ZB,{children:"Change Admin Password"}),(0,a.jsx)(c.BT,{children:"Update your admin password for enhanced security"})]}),(0,a.jsxs)(c.Wu,{className:"space-y-4",children:[A&&(0,a.jsxs)(j.Fc,{variant:"destructive",children:[(0,a.jsx)(h.A,{className:"h-4 w-4"}),(0,a.jsx)(j.TN,{children:A})]}),(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(d.J,{htmlFor:"current_password",children:"Current Password"}),(0,a.jsx)(o.p,{id:"current_password",type:"password",value:R.current_password,onChange:e=>F(s=>({...s,current_password:e.target.value})),placeholder:"Enter current password"})]}),(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(d.J,{htmlFor:"new_password",children:"New Password"}),(0,a.jsx)(o.p,{id:"new_password",type:"password",value:R.new_password,onChange:e=>F(s=>({...s,new_password:e.target.value})),placeholder:"Enter new password (min 6 characters)"})]}),(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(d.J,{htmlFor:"confirm_password",children:"Confirm New Password"}),(0,a.jsx)(o.p,{id:"confirm_password",type:"password",value:R.confirm_password,onChange:e=>F(s=>({...s,confirm_password:e.target.value})),placeholder:"Confirm new password"})]})]}),(0,a.jsx)(c.wL,{children:(0,a.jsxs)(u.$,{onClick:J,disabled:P||!R.current_password||!R.new_password||!R.confirm_password,children:[(0,a.jsx)(N.A,{className:"mr-2 h-4 w-4"}),P?"Updating...":"Update Password"]})})]})]})]})}var _=r(4756),S=r(7569),k=r(953);function R(){return(0,a.jsxs)(k.SidebarProvider,{children:[(0,a.jsx)(S.AppSidebar,{variant:"inset"}),(0,a.jsxs)(k.SidebarInset,{children:[(0,a.jsx)(_.SiteHeader,{}),(0,a.jsx)("div",{className:"flex flex-1 flex-col",children:(0,a.jsxs)("div",{className:"@container/main flex flex-1 flex-col gap-4 p-4 md:gap-8 md:p-8",children:[(0,a.jsx)("div",{className:"flex items-center",children:(0,a.jsx)("h1",{className:"text-2xl font-bold tracking-tight",children:"Settings"})}),(0,a.jsxs)(n.tU,{defaultValue:"admin",className:"w-full",children:[(0,a.jsx)(n.j7,{className:"mb-4",children:(0,a.jsx)(n.Xi,{value:"admin",children:"Admin Settings"})}),(0,a.jsx)(n.av,{value:"server",children:(0,a.jsx)(g,{})}),(0,a.jsx)(n.av,{value:"admin",children:(0,a.jsx)(C,{})})]})]})})]}),(0,a.jsx)(l.l$,{})]})}},6839:(e,s,r)=>{"use strict";r.d(s,{Xi:()=>c,av:()=>o,j7:()=>l,tU:()=>i});var a=r(3422);r(4398);var t=r(1749),n=r(9183);function i(e){let{className:s,...r}=e;return(0,a.jsx)(t.bL,{"data-slot":"tabs",className:(0,n.cn)("flex flex-col gap-2",s),...r})}function l(e){let{className:s,...r}=e;return(0,a.jsx)(t.B8,{"data-slot":"tabs-list",className:(0,n.cn)("bg-muted text-muted-foreground inline-flex h-9 w-fit items-center justify-center rounded-lg p-[3px]",s),...r})}function c(e){let{className:s,...r}=e;return(0,a.jsx)(t.l9,{"data-slot":"tabs-trigger",className:(0,n.cn)("data-[state=active]:bg-background dark:data-[state=active]:text-foreground focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:outline-ring dark:data-[state=active]:border-input dark:data-[state=active]:bg-input/30 text-foreground dark:text-muted-foreground inline-flex h-[calc(100%-1px)] flex-1 items-center justify-center gap-1.5 rounded-md border border-transparent px-2 py-1 text-sm font-medium whitespace-nowrap transition-[color,box-shadow] focus-visible:ring-[3px] focus-visible:outline-1 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:shadow-sm [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",s),...r})}function o(e){let{className:s,...r}=e;return(0,a.jsx)(t.UC,{"data-slot":"tabs-content",className:(0,n.cn)("flex-1 outline-none",s),...r})}},8561:(e,s,r)=>{"use strict";r.d(s,{E:()=>l});var a=r(3422);r(4398);var t=r(4676),n=r(9183);let i=(0,t.F)("inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2",{variants:{variant:{default:"border-transparent bg-primary text-primary-foreground hover:bg-primary/80",secondary:"border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80",destructive:"border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80",outline:"text-foreground",success:"border-transparent bg-green-500 text-white hover:bg-green-500/80",warning:"border-transparent bg-yellow-500 text-white hover:bg-yellow-500/80",error:"border-transparent bg-red-500 text-white hover:bg-red-500/80"}},defaultVariants:{variant:"default"}});function l(e){let{className:s,variant:r,...t}=e;return(0,a.jsx)("div",{className:(0,n.cn)(i({variant:r}),s),...t})}},9442:(e,s,r)=>{"use strict";r.d(s,{Fc:()=>l,TN:()=>c});var a=r(3422);r(4398);var t=r(4676),n=r(9183);let i=(0,t.F)("relative w-full rounded-lg border px-4 py-3 text-sm grid has-[>svg]:grid-cols-[calc(var(--spacing)*4)_1fr] grid-cols-[0_1fr] has-[>svg]:gap-x-3 gap-y-0.5 items-start [&>svg]:size-4 [&>svg]:translate-y-0.5 [&>svg]:text-current",{variants:{variant:{default:"bg-card text-card-foreground",destructive:"text-destructive bg-card [&>svg]:text-current *:data-[slot=alert-description]:text-destructive/90"}},defaultVariants:{variant:"default"}});function l(e){let{className:s,variant:r,...t}=e;return(0,a.jsx)("div",{"data-slot":"alert",role:"alert",className:(0,n.cn)(i({variant:r}),s),...t})}function c(e){let{className:s,...r}=e;return(0,a.jsx)("div",{"data-slot":"alert-description",className:(0,n.cn)("text-muted-foreground col-start-2 grid justify-items-start gap-1 text-sm [&_p]:leading-relaxed",s),...r})}}},e=>{var s=s=>e(e.s=s);e.O(0,[363,222,808,978,651,236,601,945,497,358],()=>s(2739)),_N_E=e.O()}]);
\ No newline at end of file
diff --git a/ui_out/_next/static/css/5bf7a4b46c37a9cb.css b/ui_out/_next/static/css/5bf7a4b46c37a9cb.css
deleted file mode 100644
index 0265bf13..00000000
--- a/ui_out/_next/static/css/5bf7a4b46c37a9cb.css
+++ /dev/null
@@ -1 +0,0 @@
-/*! tailwindcss v4.1.14 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,::backdrop,:after,:before{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-space-x-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-duration:initial;--tw-ease:initial;--tw-content:"";--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-animation-delay:0s;--tw-animation-direction:normal;--tw-animation-duration:initial;--tw-animation-fill-mode:none;--tw-animation-iteration-count:1;--tw-enter-blur:0;--tw-enter-opacity:1;--tw-enter-rotate:0;--tw-enter-scale:1;--tw-enter-translate-x:0;--tw-enter-translate-y:0;--tw-exit-blur:0;--tw-exit-opacity:1;--tw-exit-rotate:0;--tw-exit-scale:1;--tw-exit-translate-x:0;--tw-exit-translate-y:0}}}@layer theme{:host,:root{--color-red-50:oklch(97.1% .013 17.38);--color-red-100:oklch(93.6% .032 17.717);--color-red-200:oklch(88.5% .062 18.334);--color-red-300:oklch(80.8% .114 19.571);--color-red-400:oklch(70.4% .191 22.216);--color-red-500:oklch(63.7% .237 25.331);--color-red-600:oklch(57.7% .245 27.325);--color-red-800:oklch(44.4% .177 26.899);--color-orange-100:oklch(95.4% .038 75.164);--color-orange-300:oklch(83.7% .128 66.29);--color-orange-400:oklch(75% .183 55.934);--color-orange-600:oklch(64.6% .222 41.116);--color-orange-700:oklch(55.3% .195 38.402);--color-orange-800:oklch(47% .157 37.304);--color-amber-50:oklch(98.7% .022 95.277);--color-amber-200:oklch(92.4% .12 95.746);--color-amber-600:oklch(66.6% .179 58.318);--color-amber-800:oklch(47.3% .137 46.201);--color-yellow-100:oklch(97.3% .071 103.193);--color-yellow-500:oklch(79.5% .184 86.047);--color-yellow-800:oklch(47.6% .114 61.907);--color-green-50:oklch(98.2% .018 155.826);--color-green-100:oklch(96.2% .044 156.743);--color-green-200:oklch(92.5% .084 155.995);--color-green-300:oklch(87.1% .15 154.449);--color-green-400:oklch(79.2% .209 151.711);--color-green-500:oklch(72.3% .219 149.579);--color-green-600:oklch(62.7% .194 149.214);--color-green-700:oklch(52.7% .154 150.069);--color-green-800:oklch(44.8% .119 151.328);--color-green-900:oklch(39.3% .095 152.535);--color-green-950:oklch(26.6% .065 152.934);--color-emerald-100:oklch(95% .052 163.051);--color-emerald-200:oklch(90.5% .093 164.15);--color-emerald-800:oklch(43.2% .095 166.913);--color-blue-50:oklch(97% .014 254.604);--color-blue-100:oklch(93.2% .032 255.585);--color-blue-200:oklch(88.2% .059 254.128);--color-blue-500:oklch(62.3% .214 259.815);--color-blue-600:oklch(54.6% .245 262.881);--color-blue-700:oklch(48.8% .243 264.376);--color-blue-800:oklch(42.4% .199 265.638);--color-purple-100:oklch(94.6% .033 307.174);--color-purple-800:oklch(43.8% .218 303.724);--color-pink-100:oklch(94.8% .028 342.258);--color-pink-800:oklch(45.9% .187 3.815);--color-gray-50:oklch(98.5% .002 247.839);--color-gray-100:oklch(96.7% .003 264.542);--color-gray-800:oklch(27.8% .033 256.848);--color-gray-900:oklch(21% .034 264.665);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-sm:24rem;--container-md:28rem;--container-lg:32rem;--container-xl:36rem;--container-6xl:72rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--text-base:1rem;--text-base--line-height:calc(1.5/1);--text-lg:1.125rem;--text-lg--line-height:calc(1.75/1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75/1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2/1.5);--text-3xl:1.875rem;--text-3xl--line-height:calc(2.25/1.875);--text-4xl:2.25rem;--text-4xl--line-height:calc(2.5/2.25);--text-5xl:3rem;--text-5xl--line-height:1;--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-tight:-.025em;--tracking-widest:.1em;--leading-tight:1.25;--leading-relaxed:1.625;--radius-xs:.125rem;--ease-in-out:cubic-bezier(.4,0,.2,1);--animate-spin:spin 1s linear infinite;--animate-pulse:pulse 2s cubic-bezier(.4,0,.6,1)infinite;--aspect-video:16/9;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-geist-sans);--default-mono-font-family:var(--font-geist-mono);--color-border:var(--border)}}@layer base{*,::backdrop,:after,:before{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}:host,html{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}menu,ol,ul{list-style:none}audio,canvas,embed,iframe,img,object,svg,video{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,optgroup,select,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit,::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-millisecond-field,::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}*{border-color:var(--border);outline-color:var(--ring)}@supports (color:color-mix(in lab,red,red)){*{outline-color:color-mix(in oklab,var(--ring)50%,transparent)}}body{background-color:var(--background);color:var(--foreground)}}@layer components;@layer utilities{.\@container\/card{container:card/inline-size}.\@container\/card-header{container:card-header/inline-size}.\@container\/main{container:main/inline-size}.pointer-events-auto{pointer-events:auto}.pointer-events-none{pointer-events:none}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden}.absolute,.sr-only{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:calc(var(--spacing)*0)}.inset-x-0{inset-inline:calc(var(--spacing)*0)}.inset-y-0{inset-block:calc(var(--spacing)*0)}.-top-12{top:calc(var(--spacing)*-12)}.top-0{top:calc(var(--spacing)*0)}.top-1\.5{top:calc(var(--spacing)*1.5)}.top-1\/2{top:50%}.top-2{top:calc(var(--spacing)*2)}.top-3{top:calc(var(--spacing)*3)}.top-3\.5{top:calc(var(--spacing)*3.5)}.top-4{top:calc(var(--spacing)*4)}.top-\[1px\]{top:1px}.top-\[50\%\]{top:50%}.top-\[60\%\]{top:60%}.top-full{top:100%}.-right-12{right:calc(var(--spacing)*-12)}.right-0{right:calc(var(--spacing)*0)}.right-1{right:calc(var(--spacing)*1)}.right-2{right:calc(var(--spacing)*2)}.right-3{right:calc(var(--spacing)*3)}.right-4{right:calc(var(--spacing)*4)}.-bottom-12{bottom:calc(var(--spacing)*-12)}.bottom-0{bottom:calc(var(--spacing)*0)}.-left-12{left:calc(var(--spacing)*-12)}.left-0{left:calc(var(--spacing)*0)}.left-1\/2{left:50%}.left-2{left:calc(var(--spacing)*2)}.left-\[50\%\]{left:50%}.isolate{isolation:isolate}.z-0{z-index:0}.z-10{z-index:10}.z-20{z-index:20}.z-50{z-index:50}.z-\[1\]{z-index:1}.z-\[100\]{z-index:100}.col-span-full{grid-column:1/-1}.col-start-2{grid-column-start:2}.row-span-2{grid-row:span 2/span 2}.row-start-1{grid-row-start:1}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.-mx-1{margin-inline:calc(var(--spacing)*-1)}.mx-2{margin-inline:calc(var(--spacing)*2)}.mx-3\.5{margin-inline:calc(var(--spacing)*3.5)}.mx-auto{margin-inline:auto}.my-0\.5{margin-block:calc(var(--spacing)*.5)}.my-1{margin-block:calc(var(--spacing)*1)}.my-2{margin-block:calc(var(--spacing)*2)}.-mt-4{margin-top:calc(var(--spacing)*-4)}.mt-0\.5{margin-top:calc(var(--spacing)*.5)}.mt-1{margin-top:calc(var(--spacing)*1)}.mt-1\.5{margin-top:calc(var(--spacing)*1.5)}.mt-2{margin-top:calc(var(--spacing)*2)}.mt-3{margin-top:calc(var(--spacing)*3)}.mt-4{margin-top:calc(var(--spacing)*4)}.mt-6{margin-top:calc(var(--spacing)*6)}.mt-auto{margin-top:auto}.mr-1{margin-right:calc(var(--spacing)*1)}.mr-2{margin-right:calc(var(--spacing)*2)}.mb-2{margin-bottom:calc(var(--spacing)*2)}.mb-3{margin-bottom:calc(var(--spacing)*3)}.mb-4{margin-bottom:calc(var(--spacing)*4)}.mb-6{margin-bottom:calc(var(--spacing)*6)}.mb-8{margin-bottom:calc(var(--spacing)*8)}.-ml-1{margin-left:calc(var(--spacing)*-1)}.-ml-4{margin-left:calc(var(--spacing)*-4)}.ml-1{margin-left:calc(var(--spacing)*1)}.ml-2{margin-left:calc(var(--spacing)*2)}.ml-auto{margin-left:auto}.line-clamp-1{-webkit-line-clamp:1}.line-clamp-1,.line-clamp-2{-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.line-clamp-2{-webkit-line-clamp:2}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-flex{display:inline-flex}.table{display:table}.table-caption{display:table-caption}.table-cell{display:table-cell}.table-row{display:table-row}.field-sizing-content{field-sizing:content}.aspect-auto{aspect-ratio:auto}.aspect-square{aspect-ratio:1}.aspect-video{aspect-ratio:var(--aspect-video)}.size-2{width:calc(var(--spacing)*2);height:calc(var(--spacing)*2)}.size-2\.5{width:calc(var(--spacing)*2.5);height:calc(var(--spacing)*2.5)}.size-3{width:calc(var(--spacing)*3);height:calc(var(--spacing)*3)}.size-3\.5{width:calc(var(--spacing)*3.5);height:calc(var(--spacing)*3.5)}.size-4{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.size-6{width:calc(var(--spacing)*6);height:calc(var(--spacing)*6)}.size-7{width:calc(var(--spacing)*7);height:calc(var(--spacing)*7)}.size-8{width:calc(var(--spacing)*8);height:calc(var(--spacing)*8)}.size-9{width:calc(var(--spacing)*9);height:calc(var(--spacing)*9)}.size-full{width:100%;height:100%}.h-1\.5{height:calc(var(--spacing)*1.5)}.h-2{height:calc(var(--spacing)*2)}.h-2\.5{height:calc(var(--spacing)*2.5)}.h-3{height:calc(var(--spacing)*3)}.h-4{height:calc(var(--spacing)*4)}.h-5{height:calc(var(--spacing)*5)}.h-6{height:calc(var(--spacing)*6)}.h-7{height:calc(var(--spacing)*7)}.h-8{height:calc(var(--spacing)*8)}.h-9{height:calc(var(--spacing)*9)}.h-10{height:calc(var(--spacing)*10)}.h-12{height:calc(var(--spacing)*12)}.h-24{height:calc(var(--spacing)*24)}.h-\[1\.15rem\]{height:1.15rem}.h-\[40px\]{height:40px}.h-\[60px\]{height:60px}.h-\[100px\]{height:100px}.h-\[120px\]{height:120px}.h-\[200px\]{height:200px}.h-\[250px\]{height:250px}.h-\[300px\]{height:300px}.h-\[400px\]{height:400px}.h-\[calc\(100\%-1px\)\]{height:calc(100% - 1px)}.h-\[var\(--radix-navigation-menu-viewport-height\)\]{height:var(--radix-navigation-menu-viewport-height)}.h-\[var\(--radix-select-trigger-height\)\]{height:var(--radix-select-trigger-height)}.h-auto{height:auto}.h-full{height:100%}.h-px{height:1px}.h-svh{height:100svh}.max-h-\(--radix-context-menu-content-available-height\){max-height:var(--radix-context-menu-content-available-height)}.max-h-\(--radix-dropdown-menu-content-available-height\){max-height:var(--radix-dropdown-menu-content-available-height)}.max-h-\(--radix-select-content-available-height\){max-height:var(--radix-select-content-available-height)}.max-h-32{max-height:calc(var(--spacing)*32)}.max-h-60{max-height:calc(var(--spacing)*60)}.max-h-\[80vh\]{max-height:80vh}.max-h-\[90vh\]{max-height:90vh}.max-h-\[300px\]{max-height:300px}.max-h-screen{max-height:100vh}.min-h-0{min-height:calc(var(--spacing)*0)}.min-h-4{min-height:calc(var(--spacing)*4)}.min-h-16{min-height:calc(var(--spacing)*16)}.min-h-screen{min-height:100vh}.min-h-svh{min-height:100svh}.w-\(--sidebar-width\){width:var(--sidebar-width)}.w-0{width:calc(var(--spacing)*0)}.w-1{width:calc(var(--spacing)*1)}.w-2{width:calc(var(--spacing)*2)}.w-2\.5{width:calc(var(--spacing)*2.5)}.w-3{width:calc(var(--spacing)*3)}.w-3\/4{width:75%}.w-4{width:calc(var(--spacing)*4)}.w-5{width:calc(var(--spacing)*5)}.w-8{width:calc(var(--spacing)*8)}.w-9{width:calc(var(--spacing)*9)}.w-12{width:calc(var(--spacing)*12)}.w-16{width:calc(var(--spacing)*16)}.w-20{width:calc(var(--spacing)*20)}.w-24{width:calc(var(--spacing)*24)}.w-32{width:calc(var(--spacing)*32)}.w-40{width:calc(var(--spacing)*40)}.w-56{width:calc(var(--spacing)*56)}.w-64{width:calc(var(--spacing)*64)}.w-72{width:calc(var(--spacing)*72)}.w-\[--radix-dropdown-menu-trigger-width\]{width:--radix-dropdown-menu-trigger-width}.w-\[60px\]{width:60px}.w-\[100px\]{width:100px}.w-\[400px\]{width:400px}.w-\[calc\(100\%-3rem\)\]{width:calc(100% - 3rem)}.w-auto{width:auto}.w-fit{width:fit-content}.w-full{width:100%}.w-max{width:max-content}.w-px{width:1px}.max-w-\(--skeleton-width\){max-width:var(--skeleton-width)}.max-w-6xl{max-width:var(--container-6xl)}.max-w-\[300px\]{max-width:300px}.max-w-\[calc\(100\%-2rem\)\]{max-width:calc(100% - 2rem)}.max-w-full{max-width:100%}.max-w-max{max-width:max-content}.max-w-md{max-width:var(--container-md)}.min-w-0{min-width:calc(var(--spacing)*0)}.min-w-5{min-width:calc(var(--spacing)*5)}.min-w-8{min-width:calc(var(--spacing)*8)}.min-w-9{min-width:calc(var(--spacing)*9)}.min-w-10{min-width:calc(var(--spacing)*10)}.min-w-56{min-width:calc(var(--spacing)*56)}.min-w-\[8rem\]{min-width:8rem}.min-w-\[12rem\]{min-width:12rem}.min-w-\[var\(--radix-select-trigger-width\)\]{min-width:var(--radix-select-trigger-width)}.min-w-fit{min-width:fit-content}.flex-1{flex:1}.flex-shrink-0,.shrink-0{flex-shrink:0}.grow-0{flex-grow:0}.basis-full{flex-basis:100%}.caption-bottom{caption-side:bottom}.origin-\(--radix-context-menu-content-transform-origin\){transform-origin:var(--radix-context-menu-content-transform-origin)}.origin-\(--radix-dropdown-menu-content-transform-origin\){transform-origin:var(--radix-dropdown-menu-content-transform-origin)}.origin-\(--radix-hover-card-content-transform-origin\){transform-origin:var(--radix-hover-card-content-transform-origin)}.origin-\(--radix-menubar-content-transform-origin\){transform-origin:var(--radix-menubar-content-transform-origin)}.origin-\(--radix-popover-content-transform-origin\){transform-origin:var(--radix-popover-content-transform-origin)}.origin-\(--radix-select-content-transform-origin\){transform-origin:var(--radix-select-content-transform-origin)}.origin-\(--radix-tooltip-content-transform-origin\){transform-origin:var(--radix-tooltip-content-transform-origin)}.-translate-x-1\/2{--tw-translate-x:calc(calc(1/2*100%)*-1)}.-translate-x-1\/2,.-translate-x-px{translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-x-px{--tw-translate-x:-1px}.translate-x-\[-50\%\]{--tw-translate-x:-50%}.translate-x-\[-50\%\],.translate-x-px{translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-px{--tw-translate-x:1px}.-translate-y-1\/2{--tw-translate-y:calc(calc(1/2*100%)*-1)}.-translate-y-1\/2,.translate-y-\[-50\%\]{translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-\[-50\%\]{--tw-translate-y:-50%}.translate-y-\[calc\(-50\%_-_2px\)\]{--tw-translate-y:calc(-50% - 2px);translate:var(--tw-translate-x)var(--tw-translate-y)}.rotate-45{rotate:45deg}.rotate-90{rotate:90deg}.transform{transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.animate-caret-blink{animation:caret-blink 1.25s ease-out infinite}.animate-in{animation:enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:var(--animate-spin)}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.touch-none{touch-action:none}.scroll-my-1{scroll-margin-block:calc(var(--spacing)*1)}.scroll-py-1{scroll-padding-block:calc(var(--spacing)*1)}.list-inside{list-style-position:inside}.list-disc{list-style-type:disc}.list-none{list-style-type:none}.auto-cols-fr{grid-auto-columns:minmax(0,1fr)}.grid-flow-col{grid-auto-flow:column}.auto-rows-min{grid-auto-rows:min-content}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.grid-cols-\[0_1fr\]{grid-template-columns:0 1fr}.grid-rows-\[auto_auto\]{grid-template-rows:auto auto}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-row{flex-direction:row}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.items-stretch{align-items:stretch}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.justify-start{justify-content:flex-start}.justify-items-start{justify-items:start}.gap-1{gap:calc(var(--spacing)*1)}.gap-1\.5{gap:calc(var(--spacing)*1.5)}.gap-2{gap:calc(var(--spacing)*2)}.gap-3{gap:calc(var(--spacing)*3)}.gap-4{gap:calc(var(--spacing)*4)}.gap-6{gap:calc(var(--spacing)*6)}.gap-8{gap:calc(var(--spacing)*8)}:where(.space-y-0\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*.5)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*.5)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*1)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*1)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*2)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*3)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*3)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*4)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*4)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*6)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*6)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-x-1>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*1)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*1)*calc(1 - var(--tw-space-x-reverse)))}:where(.space-x-2>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*2)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-x-reverse)))}:where(.space-x-3>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*3)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*3)*calc(1 - var(--tw-space-x-reverse)))}:where(.space-x-4>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*4)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*4)*calc(1 - var(--tw-space-x-reverse)))}.gap-y-0\.5{row-gap:calc(var(--spacing)*.5)}.self-start{align-self:flex-start}.justify-self-end{justify-self:flex-end}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-x-hidden{overflow-x:hidden}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-\[2px\]{border-radius:2px}.rounded-\[4px\]{border-radius:4px}.rounded-\[inherit\]{border-radius:inherit}.rounded-full{border-radius:3.40282e+38px}.rounded-lg{border-radius:var(--radius)}.rounded-md{border-radius:calc(var(--radius) - 2px)}.rounded-none{border-radius:0}.rounded-sm{border-radius:calc(var(--radius) - 4px)}.rounded-xl{border-radius:calc(var(--radius) + 4px)}.rounded-xs{border-radius:var(--radius-xs)}.rounded-tl-sm{border-top-left-radius:calc(var(--radius) - 4px)}.border{border-style:var(--tw-border-style);border-width:1px}.border-\[1\.5px\]{border-style:var(--tw-border-style);border-width:1.5px}.border-y{border-block-style:var(--tw-border-style);border-block-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-\(--color-border\){border-color:var(--color-border)}.border-amber-200{border-color:var(--color-amber-200)}.border-blue-200{border-color:var(--color-blue-200)}.border-border\/50{border-color:var(--border)}@supports (color:color-mix(in lab,red,red)){.border-border\/50{border-color:color-mix(in oklab,var(--border)50%,transparent)}}.border-destructive{border-color:var(--destructive)}.border-emerald-200{border-color:var(--color-emerald-200)}.border-green-200{border-color:var(--color-green-200)}.border-green-300{border-color:var(--color-green-300)}.border-green-500{border-color:var(--color-green-500)}.border-input{border-color:var(--input)}.border-orange-300{border-color:var(--color-orange-300)}.border-red-200{border-color:var(--color-red-200)}.border-red-300{border-color:var(--color-red-300)}.border-sidebar-border{border-color:var(--sidebar-border)}.border-transparent{border-color:#0000}.border-t-transparent{border-top-color:#0000}.border-l-transparent{border-left-color:#0000}.bg-\(--color-bg\){background-color:var(--color-bg)}.bg-accent{background-color:var(--accent)}.bg-amber-50{background-color:var(--color-amber-50)}.bg-background{background-color:var(--background)}.bg-black\/50{background-color:#00000080}@supports (color:color-mix(in lab,red,red)){.bg-black\/50{background-color:color-mix(in oklab,var(--color-black)50%,transparent)}}.bg-blue-50{background-color:var(--color-blue-50)}.bg-blue-100{background-color:var(--color-blue-100)}.bg-blue-600{background-color:var(--color-blue-600)}.bg-border{background-color:var(--border)}.bg-card{background-color:var(--card)}.bg-destructive,.bg-destructive\/10{background-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.bg-destructive\/10{background-color:color-mix(in oklab,var(--destructive)10%,transparent)}}.bg-emerald-100{background-color:var(--color-emerald-100)}.bg-foreground{background-color:var(--foreground)}.bg-gray-50{background-color:var(--color-gray-50)}.bg-gray-100{background-color:var(--color-gray-100)}.bg-gray-900{background-color:var(--color-gray-900)}.bg-green-50{background-color:var(--color-green-50)}.bg-green-100{background-color:var(--color-green-100)}.bg-green-500{background-color:var(--color-green-500)}.bg-muted{background-color:var(--muted)}.bg-muted-foreground\/30{background-color:var(--muted-foreground)}@supports (color:color-mix(in lab,red,red)){.bg-muted-foreground\/30{background-color:color-mix(in oklab,var(--muted-foreground)30%,transparent)}}.bg-muted\/50{background-color:var(--muted)}@supports (color:color-mix(in lab,red,red)){.bg-muted\/50{background-color:color-mix(in oklab,var(--muted)50%,transparent)}}.bg-orange-100{background-color:var(--color-orange-100)}.bg-pink-100{background-color:var(--color-pink-100)}.bg-popover{background-color:var(--popover)}.bg-primary,.bg-primary\/20{background-color:var(--primary)}@supports (color:color-mix(in lab,red,red)){.bg-primary\/20{background-color:color-mix(in oklab,var(--primary)20%,transparent)}}.bg-purple-100{background-color:var(--color-purple-100)}.bg-red-50{background-color:var(--color-red-50)}.bg-red-100{background-color:var(--color-red-100)}.bg-red-500{background-color:var(--color-red-500)}.bg-red-600{background-color:var(--color-red-600)}.bg-secondary{background-color:var(--secondary)}.bg-sidebar{background-color:var(--sidebar)}.bg-sidebar-border{background-color:var(--sidebar-border)}.bg-transparent{background-color:#0000}.bg-white{background-color:var(--color-white)}.bg-yellow-100{background-color:var(--color-yellow-100)}.bg-yellow-500{background-color:var(--color-yellow-500)}.fill-current{fill:currentColor}.fill-primary{fill:var(--primary)}.object-cover{object-fit:cover}.p-0{padding:calc(var(--spacing)*0)}.p-1{padding:calc(var(--spacing)*1)}.p-2{padding:calc(var(--spacing)*2)}.p-3{padding:calc(var(--spacing)*3)}.p-4{padding:calc(var(--spacing)*4)}.p-6{padding:calc(var(--spacing)*6)}.p-\[3px\]{padding:3px}.p-px{padding:1px}.px-0{padding-inline:calc(var(--spacing)*0)}.px-1{padding-inline:calc(var(--spacing)*1)}.px-1\.5{padding-inline:calc(var(--spacing)*1.5)}.px-2{padding-inline:calc(var(--spacing)*2)}.px-2\.5{padding-inline:calc(var(--spacing)*2.5)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-4{padding-inline:calc(var(--spacing)*4)}.px-6{padding-inline:calc(var(--spacing)*6)}.py-0\.5{padding-block:calc(var(--spacing)*.5)}.py-1{padding-block:calc(var(--spacing)*1)}.py-1\.5{padding-block:calc(var(--spacing)*1.5)}.py-2{padding-block:calc(var(--spacing)*2)}.py-3{padding-block:calc(var(--spacing)*3)}.py-4{padding-block:calc(var(--spacing)*4)}.py-6{padding-block:calc(var(--spacing)*6)}.py-8{padding-block:calc(var(--spacing)*8)}.py-12{padding-block:calc(var(--spacing)*12)}.pt-0{padding-top:calc(var(--spacing)*0)}.pt-3{padding-top:calc(var(--spacing)*3)}.pt-4{padding-top:calc(var(--spacing)*4)}.pt-6{padding-top:calc(var(--spacing)*6)}.pr-2{padding-right:calc(var(--spacing)*2)}.pr-2\.5{padding-right:calc(var(--spacing)*2.5)}.pr-8{padding-right:calc(var(--spacing)*8)}.pr-10{padding-right:calc(var(--spacing)*10)}.pr-24{padding-right:calc(var(--spacing)*24)}.pb-2{padding-bottom:calc(var(--spacing)*2)}.pb-3{padding-bottom:calc(var(--spacing)*3)}.pb-4{padding-bottom:calc(var(--spacing)*4)}.pl-2{padding-left:calc(var(--spacing)*2)}.pl-4{padding-left:calc(var(--spacing)*4)}.pl-8{padding-left:calc(var(--spacing)*8)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.align-middle{vertical-align:middle}.font-mono{font-family:var(--font-geist-mono)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.text-5xl{font-size:var(--text-5xl);line-height:var(--tw-leading,var(--text-5xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.leading-none{--tw-leading:1;line-height:1}.leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-widest{--tw-tracking:var(--tracking-widest);letter-spacing:var(--tracking-widest)}.text-balance{text-wrap:balance}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.text-ellipsis{text-overflow:ellipsis}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.text-amber-600{color:var(--color-amber-600)}.text-amber-800{color:var(--color-amber-800)}.text-blue-500{color:var(--color-blue-500)}.text-blue-600{color:var(--color-blue-600)}.text-blue-800{color:var(--color-blue-800)}.text-card-foreground{color:var(--card-foreground)}.text-current{color:currentColor}.text-destructive{color:var(--destructive)}.text-emerald-800{color:var(--color-emerald-800)}.text-foreground,.text-foreground\/50{color:var(--foreground)}@supports (color:color-mix(in lab,red,red)){.text-foreground\/50{color:color-mix(in oklab,var(--foreground)50%,transparent)}}.text-gray-800{color:var(--color-gray-800)}.text-green-400{color:var(--color-green-400)}.text-green-500{color:var(--color-green-500)}.text-green-600{color:var(--color-green-600)}.text-green-800{color:var(--color-green-800)}.text-green-900{color:var(--color-green-900)}.text-muted-foreground{color:var(--muted-foreground)}.text-orange-600{color:var(--color-orange-600)}.text-orange-800{color:var(--color-orange-800)}.text-pink-800{color:var(--color-pink-800)}.text-popover-foreground{color:var(--popover-foreground)}.text-primary{color:var(--primary)}.text-primary-foreground{color:var(--primary-foreground)}.text-purple-800{color:var(--color-purple-800)}.text-red-500{color:var(--color-red-500)}.text-red-600{color:var(--color-red-600)}.text-red-800{color:var(--color-red-800)}.text-secondary-foreground{color:var(--secondary-foreground)}.text-sidebar-foreground,.text-sidebar-foreground\/70{color:var(--sidebar-foreground)}@supports (color:color-mix(in lab,red,red)){.text-sidebar-foreground\/70{color:color-mix(in oklab,var(--sidebar-foreground)70%,transparent)}}.text-white{color:var(--color-white)}.text-yellow-500{color:var(--color-yellow-500)}.text-yellow-800{color:var(--color-yellow-800)}.capitalize{text-transform:capitalize}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,)var(--tw-slashed-zero,)var(--tw-numeric-figure,)var(--tw-numeric-spacing,)var(--tw-numeric-fraction,)}.line-through{text-decoration-line:line-through}.underline{text-decoration-line:underline}.underline-offset-4{text-underline-offset:4px}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.opacity-0{opacity:0}.opacity-50{opacity:.5}.opacity-70{opacity:.7}.opacity-75{opacity:.75}.opacity-90{opacity:.9}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a)}.shadow,.shadow-\[0_0_0_1px_hsl\(var\(--sidebar-border\)\)\]{box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_0_0_1px_hsl\(var\(--sidebar-border\)\)\]{--tw-shadow:0 0 0 1px var(--tw-shadow-color,hsl(var(--sidebar-border)))}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a)}.shadow-lg,.shadow-md{box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-shadow-color,#0000001a)}.shadow-none{--tw-shadow:0 0 #0000}.shadow-none,.shadow-sm{box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a),0 8px 10px -6px var(--tw-shadow-color,#0000001a)}.shadow-xl,.shadow-xs{box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xs{--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d)}.ring-0{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(0px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor)}.ring-0,.ring-2{box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-2{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor)}.ring-blue-500{--tw-ring-color:var(--color-blue-500)}.ring-primary{--tw-ring-color:var(--primary)}.ring-sidebar-ring{--tw-ring-color:var(--sidebar-ring)}.ring-offset-background{--tw-ring-offset-color:var(--background)}.outline-hidden{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.outline-hidden{outline-offset:2px;outline:2px solid #0000}}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.grayscale{--tw-grayscale:grayscale(100%)}.filter,.grayscale{filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[color\,box-shadow\]{transition-property:color,box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[left\,right\,width\]{transition-property:left,right,width;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[margin\,opacity\]{transition-property:margin,opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[width\,height\,padding\]{transition-property:width,height,padding;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[width\,height\]{transition-property:width,height;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[width\]{transition-property:width;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-shadow{transition-property:box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-none{transition-property:none}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.duration-1000{--tw-duration:1s;transition-duration:1s}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.ease-linear{--tw-ease:linear;transition-timing-function:linear}.fade-in-0{--tw-enter-opacity:0}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}.zoom-in-95{--tw-enter-scale:.95}.running{animation-play-state:running}.group-focus-within\/menu-item\:opacity-100:is(:where(.group\/menu-item):focus-within *){opacity:1}@media (hover:hover){.group-hover\/menu-item\:opacity-100:is(:where(.group\/menu-item):hover *),.group-hover\:opacity-100:is(:where(.group):hover *){opacity:1}}.group-has-data-\[collapsible\=icon\]\/sidebar-wrapper\:h-12:is(:where(.group\/sidebar-wrapper):has([data-collapsible=icon]) *){height:calc(var(--spacing)*12)}.group-has-data-\[sidebar\=menu-action\]\/menu-item\:pr-8:is(:where(.group\/menu-item):has([data-sidebar=menu-action]) *){padding-right:calc(var(--spacing)*8)}.group-data-\[collapsible\=icon\]\:-mt-8:is(:where(.group)[data-collapsible=icon] *){margin-top:calc(var(--spacing)*-8)}.group-data-\[collapsible\=icon\]\:hidden:is(:where(.group)[data-collapsible=icon] *){display:none}.group-data-\[collapsible\=icon\]\:size-8\!:is(:where(.group)[data-collapsible=icon] *){width:calc(var(--spacing)*8)!important;height:calc(var(--spacing)*8)!important}.group-data-\[collapsible\=icon\]\:w-\(--sidebar-width-icon\):is(:where(.group)[data-collapsible=icon] *){width:var(--sidebar-width-icon)}.group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)\+\(--spacing\(4\)\)\)\]:is(:where(.group)[data-collapsible=icon] *){width:calc(var(--sidebar-width-icon) + (calc(var(--spacing)*4)))}.group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)\+\(--spacing\(4\)\)\+2px\)\]:is(:where(.group)[data-collapsible=icon] *){width:calc(var(--sidebar-width-icon) + (calc(var(--spacing)*4)) + 2px)}.group-data-\[collapsible\=icon\]\:overflow-hidden:is(:where(.group)[data-collapsible=icon] *){overflow:hidden}.group-data-\[collapsible\=icon\]\:p-0\!:is(:where(.group)[data-collapsible=icon] *){padding:calc(var(--spacing)*0)!important}.group-data-\[collapsible\=icon\]\:p-2\!:is(:where(.group)[data-collapsible=icon] *){padding:calc(var(--spacing)*2)!important}.group-data-\[collapsible\=icon\]\:opacity-0:is(:where(.group)[data-collapsible=icon] *){opacity:0}.group-data-\[collapsible\=offcanvas\]\:right-\[calc\(var\(--sidebar-width\)\*-1\)\]:is(:where(.group)[data-collapsible=offcanvas] *){right:calc(var(--sidebar-width)*-1)}.group-data-\[collapsible\=offcanvas\]\:left-\[calc\(var\(--sidebar-width\)\*-1\)\]:is(:where(.group)[data-collapsible=offcanvas] *){left:calc(var(--sidebar-width)*-1)}.group-data-\[collapsible\=offcanvas\]\:w-0:is(:where(.group)[data-collapsible=offcanvas] *){width:calc(var(--spacing)*0)}.group-data-\[collapsible\=offcanvas\]\:translate-x-0:is(:where(.group)[data-collapsible=offcanvas] *){--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.group-data-\[disabled\=true\]\:pointer-events-none:is(:where(.group)[data-disabled=true] *){pointer-events:none}.group-data-\[disabled\=true\]\:opacity-50:is(:where(.group)[data-disabled=true] *){opacity:.5}.group-data-\[side\=left\]\:-right-4:is(:where(.group)[data-side=left] *){right:calc(var(--spacing)*-4)}.group-data-\[side\=left\]\:border-r:is(:where(.group)[data-side=left] *){border-right-style:var(--tw-border-style);border-right-width:1px}.group-data-\[side\=right\]\:left-0:is(:where(.group)[data-side=right] *){left:calc(var(--spacing)*0)}.group-data-\[side\=right\]\:rotate-180:is(:where(.group)[data-side=right] *){rotate:180deg}.group-data-\[side\=right\]\:border-l:is(:where(.group)[data-side=right] *){border-left-style:var(--tw-border-style);border-left-width:1px}.group-data-\[state\=open\]\:rotate-180:is(:where(.group)[data-state=open] *){rotate:180deg}.group-data-\[variant\=floating\]\:rounded-lg:is(:where(.group)[data-variant=floating] *){border-radius:var(--radius)}.group-data-\[variant\=floating\]\:border:is(:where(.group)[data-variant=floating] *){border-style:var(--tw-border-style);border-width:1px}.group-data-\[variant\=floating\]\:border-sidebar-border:is(:where(.group)[data-variant=floating] *){border-color:var(--sidebar-border)}.group-data-\[variant\=floating\]\:shadow-sm:is(:where(.group)[data-variant=floating] *){--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.group-data-\[viewport\=false\]\/navigation-menu\:top-full:is(:where(.group\/navigation-menu)[data-viewport=false] *){top:100%}.group-data-\[viewport\=false\]\/navigation-menu\:mt-1\.5:is(:where(.group\/navigation-menu)[data-viewport=false] *){margin-top:calc(var(--spacing)*1.5)}.group-data-\[viewport\=false\]\/navigation-menu\:overflow-hidden:is(:where(.group\/navigation-menu)[data-viewport=false] *){overflow:hidden}.group-data-\[viewport\=false\]\/navigation-menu\:rounded-md:is(:where(.group\/navigation-menu)[data-viewport=false] *){border-radius:calc(var(--radius) - 2px)}.group-data-\[viewport\=false\]\/navigation-menu\:border:is(:where(.group\/navigation-menu)[data-viewport=false] *){border-style:var(--tw-border-style);border-width:1px}.group-data-\[viewport\=false\]\/navigation-menu\:bg-popover:is(:where(.group\/navigation-menu)[data-viewport=false] *){background-color:var(--popover)}.group-data-\[viewport\=false\]\/navigation-menu\:text-popover-foreground:is(:where(.group\/navigation-menu)[data-viewport=false] *){color:var(--popover-foreground)}.group-data-\[viewport\=false\]\/navigation-menu\:shadow:is(:where(.group\/navigation-menu)[data-viewport=false] *){--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.group-data-\[viewport\=false\]\/navigation-menu\:duration-200:is(:where(.group\/navigation-menu)[data-viewport=false] *){--tw-duration:.2s;transition-duration:.2s}.group-\[\.destructive\]\:border-muted\/40:is(:where(.group).destructive *){border-color:var(--muted)}@supports (color:color-mix(in lab,red,red)){.group-\[\.destructive\]\:border-muted\/40:is(:where(.group).destructive *){border-color:color-mix(in oklab,var(--muted)40%,transparent)}}.group-\[\.destructive\]\:text-red-300:is(:where(.group).destructive *){color:var(--color-red-300)}@media (hover:hover){.peer-hover\/menu-button\:text-sidebar-accent-foreground:is(:where(.peer\/menu-button):hover~*){color:var(--sidebar-accent-foreground)}}.peer-disabled\:cursor-not-allowed:is(:where(.peer):disabled~*){cursor:not-allowed}.peer-disabled\:opacity-50:is(:where(.peer):disabled~*){opacity:.5}.peer-data-\[active\=true\]\/menu-button\:text-sidebar-accent-foreground:is(:where(.peer\/menu-button)[data-active=true]~*){color:var(--sidebar-accent-foreground)}.peer-data-\[size\=default\]\/menu-button\:top-1\.5:is(:where(.peer\/menu-button)[data-size=default]~*){top:calc(var(--spacing)*1.5)}.peer-data-\[size\=lg\]\/menu-button\:top-2\.5:is(:where(.peer\/menu-button)[data-size=lg]~*){top:calc(var(--spacing)*2.5)}.peer-data-\[size\=sm\]\/menu-button\:top-1:is(:where(.peer\/menu-button)[data-size=sm]~*){top:calc(var(--spacing)*1)}.selection\:bg-primary ::selection{background-color:var(--primary)}.selection\:bg-primary::selection{background-color:var(--primary)}.selection\:text-primary-foreground ::selection{color:var(--primary-foreground)}.selection\:text-primary-foreground::selection{color:var(--primary-foreground)}.file\:mr-4::file-selector-button{margin-right:calc(var(--spacing)*4)}.file\:inline-flex::file-selector-button{display:inline-flex}.file\:h-7::file-selector-button{height:calc(var(--spacing)*7)}.file\:rounded-full::file-selector-button{border-radius:3.40282e+38px}.file\:border-0::file-selector-button{border-style:var(--tw-border-style);border-width:0}.file\:bg-blue-50::file-selector-button{background-color:var(--color-blue-50)}.file\:bg-transparent::file-selector-button{background-color:#0000}.file\:px-4::file-selector-button{padding-inline:calc(var(--spacing)*4)}.file\:py-2::file-selector-button{padding-block:calc(var(--spacing)*2)}.file\:text-sm::file-selector-button{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.file\:font-medium::file-selector-button{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.file\:font-semibold::file-selector-button{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.file\:text-blue-700::file-selector-button{color:var(--color-blue-700)}.file\:text-foreground::file-selector-button{color:var(--foreground)}.placeholder\:text-muted-foreground::placeholder{color:var(--muted-foreground)}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:-inset-2:after{content:var(--tw-content);inset:calc(var(--spacing)*-2)}.after\:inset-0:after{content:var(--tw-content);inset:calc(var(--spacing)*0)}.after\:inset-y-0:after{content:var(--tw-content);inset-block:calc(var(--spacing)*0)}.after\:top-1\/2:after{content:var(--tw-content);top:50%}.after\:left-1\/2:after{content:var(--tw-content);left:50%}.after\:z-0:after{content:var(--tw-content);z-index:0}.after\:flex:after{content:var(--tw-content);display:flex}.after\:w-1:after{content:var(--tw-content);width:calc(var(--spacing)*1)}.after\:w-\[2px\]:after{content:var(--tw-content);width:2px}.after\:-translate-x-1\/2:after{content:var(--tw-content);--tw-translate-x:calc(calc(1/2*100%)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.after\:items-center:after{content:var(--tw-content);align-items:center}.after\:border-t:after{content:var(--tw-content);border-top-style:var(--tw-border-style);border-top-width:1px}.after\:border-border:after{content:var(--tw-content);border-color:var(--border)}.group-data-\[collapsible\=offcanvas\]\:after\:left-full:is(:where(.group)[data-collapsible=offcanvas] *):after{content:var(--tw-content);left:100%}.first\:rounded-l-md:first-child{border-top-left-radius:calc(var(--radius) - 2px);border-bottom-left-radius:calc(var(--radius) - 2px)}.first\:border-l:first-child{border-left-style:var(--tw-border-style);border-left-width:1px}.last\:rounded-r-md:last-child{border-top-right-radius:calc(var(--radius) - 2px);border-bottom-right-radius:calc(var(--radius) - 2px)}@media (hover:hover){.hover\:border-green-400:hover{border-color:var(--color-green-400)}.hover\:border-orange-400:hover{border-color:var(--color-orange-400)}.hover\:bg-accent:hover{background-color:var(--accent)}.hover\:bg-blue-700:hover{background-color:var(--color-blue-700)}.hover\:bg-destructive\/80:hover{background-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-destructive\/80:hover{background-color:color-mix(in oklab,var(--destructive)80%,transparent)}}.hover\:bg-destructive\/90:hover{background-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-destructive\/90:hover{background-color:color-mix(in oklab,var(--destructive)90%,transparent)}}.hover\:bg-gray-100:hover{background-color:var(--color-gray-100)}.hover\:bg-green-500\/80:hover{background-color:#00c758cc}@supports (color:color-mix(in lab,red,red)){.hover\:bg-green-500\/80:hover{background-color:color-mix(in oklab,var(--color-green-500)80%,transparent)}}.hover\:bg-input\/30:hover{background-color:var(--input)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-input\/30:hover{background-color:color-mix(in oklab,var(--input)30%,transparent)}}.hover\:bg-muted:hover,.hover\:bg-muted\/50:hover{background-color:var(--muted)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-muted\/50:hover{background-color:color-mix(in oklab,var(--muted)50%,transparent)}}.hover\:bg-primary\/80:hover{background-color:var(--primary)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-primary\/80:hover{background-color:color-mix(in oklab,var(--primary)80%,transparent)}}.hover\:bg-primary\/90:hover{background-color:var(--primary)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-primary\/90:hover{background-color:color-mix(in oklab,var(--primary)90%,transparent)}}.hover\:bg-red-500\/80:hover{background-color:#fb2c36cc}@supports (color:color-mix(in lab,red,red)){.hover\:bg-red-500\/80:hover{background-color:color-mix(in oklab,var(--color-red-500)80%,transparent)}}.hover\:bg-secondary:hover,.hover\:bg-secondary\/80:hover{background-color:var(--secondary)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-secondary\/80:hover{background-color:color-mix(in oklab,var(--secondary)80%,transparent)}}.hover\:bg-sidebar-accent:hover{background-color:var(--sidebar-accent)}.hover\:bg-transparent:hover{background-color:#0000}.hover\:bg-yellow-500\/80:hover{background-color:#edb200cc}@supports (color:color-mix(in lab,red,red)){.hover\:bg-yellow-500\/80:hover{background-color:color-mix(in oklab,var(--color-yellow-500)80%,transparent)}}.hover\:text-accent-foreground:hover{color:var(--accent-foreground)}.hover\:text-foreground:hover{color:var(--foreground)}.hover\:text-green-700:hover{color:var(--color-green-700)}.hover\:text-muted-foreground:hover{color:var(--muted-foreground)}.hover\:text-orange-700:hover{color:var(--color-orange-700)}.hover\:text-sidebar-accent-foreground:hover{color:var(--sidebar-accent-foreground)}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-100:hover{opacity:1}.hover\:shadow-\[0_0_0_1px_hsl\(var\(--sidebar-accent\)\)\]:hover{--tw-shadow:0 0 0 1px var(--tw-shadow-color,hsl(var(--sidebar-accent)))}.hover\:shadow-\[0_0_0_1px_hsl\(var\(--sidebar-accent\)\)\]:hover,.hover\:shadow-md:hover{box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:shadow-md:hover{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-shadow-color,#0000001a)}.hover\:group-data-\[collapsible\=offcanvas\]\:bg-sidebar:hover:is(:where(.group)[data-collapsible=offcanvas] *){background-color:var(--sidebar)}.group-\[\.destructive\]\:hover\:border-destructive\/30:is(:where(.group).destructive *):hover{border-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.group-\[\.destructive\]\:hover\:border-destructive\/30:is(:where(.group).destructive *):hover{border-color:color-mix(in oklab,var(--destructive)30%,transparent)}}.group-\[\.destructive\]\:hover\:bg-destructive:is(:where(.group).destructive *):hover{background-color:var(--destructive)}.group-\[\.destructive\]\:hover\:text-red-50:is(:where(.group).destructive *):hover{color:var(--color-red-50)}.hover\:file\:bg-blue-100:hover::file-selector-button{background-color:var(--color-blue-100)}.hover\:after\:bg-sidebar-border:hover:after{content:var(--tw-content);background-color:var(--sidebar-border)}}.focus\:z-10:focus{z-index:10}.focus\:bg-accent:focus{background-color:var(--accent)}.focus\:text-accent-foreground:focus{color:var(--accent-foreground)}.focus\:text-destructive:focus{color:var(--destructive)}.focus\:text-green-700:focus{color:var(--color-green-700)}.focus\:text-orange-700:focus{color:var(--color-orange-700)}.focus\:opacity-100:focus{opacity:1}.focus\:ring-2:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:ring-ring:focus{--tw-ring-color:var(--ring)}.focus\:ring-offset-2:focus{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus\:outline-hidden:focus{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.focus\:outline-hidden:focus{outline-offset:2px;outline:2px solid #0000}}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.group-\[\.destructive\]\:focus\:ring-destructive:is(:where(.group).destructive *):focus{--tw-ring-color:var(--destructive)}.group-\[\.destructive\]\:focus\:ring-red-400:is(:where(.group).destructive *):focus{--tw-ring-color:var(--color-red-400)}.group-\[\.destructive\]\:focus\:ring-offset-red-600:is(:where(.group).destructive *):focus{--tw-ring-offset-color:var(--color-red-600)}.focus-visible\:z-10:focus-visible{z-index:10}.focus-visible\:border:focus-visible{border-style:var(--tw-border-style);border-width:1px}.focus-visible\:border-ring:focus-visible{border-color:var(--ring)}.focus-visible\:bg-background:focus-visible{background-color:var(--background)}.focus-visible\:ring-1:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\:ring-\[3px\]:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(3px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\:ring-destructive\/20:focus-visible{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.focus-visible\:ring-destructive\/20:focus-visible{--tw-ring-color:color-mix(in oklab,var(--destructive)20%,transparent)}}.focus-visible\:ring-ring:focus-visible,.focus-visible\:ring-ring\/50:focus-visible{--tw-ring-color:var(--ring)}@supports (color:color-mix(in lab,red,red)){.focus-visible\:ring-ring\/50:focus-visible{--tw-ring-color:color-mix(in oklab,var(--ring)50%,transparent)}}.focus-visible\:ring-offset-1:focus-visible{--tw-ring-offset-width:1px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus-visible\:outline-hidden:focus-visible{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.focus-visible\:outline-hidden:focus-visible{outline-offset:2px;outline:2px solid #0000}}.focus-visible\:outline-1:focus-visible{outline-style:var(--tw-outline-style);outline-width:1px}.focus-visible\:outline-ring:focus-visible{outline-color:var(--ring)}.active\:bg-sidebar-accent:active{background-color:var(--sidebar-accent)}.active\:text-sidebar-accent-foreground:active{color:var(--sidebar-accent-foreground)}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}:where([data-side=left]) .in-data-\[side\=left\]\:cursor-w-resize{cursor:w-resize}:where([data-side=right]) .in-data-\[side\=right\]\:cursor-e-resize{cursor:e-resize}.has-disabled\:opacity-50:has(:disabled){opacity:.5}.has-data-\[slot\=card-action\]\:grid-cols-\[1fr_auto\]:has([data-slot=card-action]){grid-template-columns:1fr auto}.has-data-\[variant\=inset\]\:bg-sidebar:has([data-variant=inset]){background-color:var(--sidebar)}.has-\[\>svg\]\:grid-cols-\[calc\(var\(--spacing\)\*4\)_1fr\]:has(>svg){grid-template-columns:calc(var(--spacing)*4)1fr}.has-\[\>svg\]\:gap-x-3:has(>svg){column-gap:calc(var(--spacing)*3)}.has-\[\>svg\]\:px-2\.5:has(>svg){padding-inline:calc(var(--spacing)*2.5)}.has-\[\>svg\]\:px-3:has(>svg){padding-inline:calc(var(--spacing)*3)}.has-\[\>svg\]\:px-4:has(>svg){padding-inline:calc(var(--spacing)*4)}.aria-disabled\:pointer-events-none[aria-disabled=true]{pointer-events:none}.aria-disabled\:opacity-50[aria-disabled=true]{opacity:.5}.aria-invalid\:border-destructive[aria-invalid=true]{border-color:var(--destructive)}.aria-invalid\:ring-destructive\/20[aria-invalid=true]{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.aria-invalid\:ring-destructive\/20[aria-invalid=true]{--tw-ring-color:color-mix(in oklab,var(--destructive)20%,transparent)}}.data-\[active\=true\]\:z-10[data-active=true]{z-index:10}.data-\[active\=true\]\:border-ring[data-active=true]{border-color:var(--ring)}.data-\[active\=true\]\:bg-accent\/50[data-active=true]{background-color:var(--accent)}@supports (color:color-mix(in lab,red,red)){.data-\[active\=true\]\:bg-accent\/50[data-active=true]{background-color:color-mix(in oklab,var(--accent)50%,transparent)}}.data-\[active\=true\]\:bg-sidebar-accent[data-active=true]{background-color:var(--sidebar-accent)}.data-\[active\=true\]\:font-medium[data-active=true]{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.data-\[active\=true\]\:text-accent-foreground[data-active=true]{color:var(--accent-foreground)}.data-\[active\=true\]\:text-sidebar-accent-foreground[data-active=true]{color:var(--sidebar-accent-foreground)}.data-\[active\=true\]\:ring-\[3px\][data-active=true]{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(3px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.data-\[active\=true\]\:ring-ring\/50[data-active=true]{--tw-ring-color:var(--ring)}@supports (color:color-mix(in lab,red,red)){.data-\[active\=true\]\:ring-ring\/50[data-active=true]{--tw-ring-color:color-mix(in oklab,var(--ring)50%,transparent)}}@media (hover:hover){.data-\[active\=true\]\:hover\:bg-accent[data-active=true]:hover{background-color:var(--accent)}}.data-\[active\=true\]\:focus\:bg-accent[data-active=true]:focus{background-color:var(--accent)}.data-\[active\=true\]\:aria-invalid\:border-destructive[data-active=true][aria-invalid=true]{border-color:var(--destructive)}.data-\[active\=true\]\:aria-invalid\:ring-destructive\/20[data-active=true][aria-invalid=true]{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.data-\[active\=true\]\:aria-invalid\:ring-destructive\/20[data-active=true][aria-invalid=true]{--tw-ring-color:color-mix(in oklab,var(--destructive)20%,transparent)}}.data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}.data-\[disabled\=true\]\:pointer-events-none[data-disabled=true]{pointer-events:none}.data-\[disabled\=true\]\:opacity-50[data-disabled=true]{opacity:.5}.data-\[dragging\=true\]\:z-10[data-dragging=true]{z-index:10}.data-\[dragging\=true\]\:opacity-80[data-dragging=true]{opacity:.8}.data-\[error\=true\]\:text-destructive[data-error=true]{color:var(--destructive)}.data-\[inset\]\:pl-8[data-inset]{padding-left:calc(var(--spacing)*8)}.data-\[motion\=from-end\]\:slide-in-from-right-52[data-motion=from-end]{--tw-enter-translate-x:calc(52*var(--spacing))}.data-\[motion\=from-start\]\:slide-in-from-left-52[data-motion=from-start]{--tw-enter-translate-x:calc(52*var(--spacing)*-1)}.data-\[motion\=to-end\]\:slide-out-to-right-52[data-motion=to-end]{--tw-exit-translate-x:calc(52*var(--spacing))}.data-\[motion\=to-start\]\:slide-out-to-left-52[data-motion=to-start]{--tw-exit-translate-x:calc(52*var(--spacing)*-1)}.data-\[motion\^\=from-\]\:animate-in[data-motion^=from-]{animation:enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.data-\[motion\^\=from-\]\:fade-in[data-motion^=from-]{--tw-enter-opacity:0}.data-\[motion\^\=to-\]\:animate-out[data-motion^=to-]{animation:exit var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.data-\[motion\^\=to-\]\:fade-out[data-motion^=to-]{--tw-exit-opacity:0}.data-\[orientation\=horizontal\]\:h-px[data-orientation=horizontal]{height:1px}.data-\[orientation\=horizontal\]\:w-full[data-orientation=horizontal]{width:100%}.data-\[orientation\=vertical\]\:h-4[data-orientation=vertical]{height:calc(var(--spacing)*4)}.data-\[orientation\=vertical\]\:h-full[data-orientation=vertical]{height:100%}.data-\[orientation\=vertical\]\:w-px[data-orientation=vertical]{width:1px}.data-\[panel-group-direction\=vertical\]\:h-px[data-panel-group-direction=vertical]{height:1px}.data-\[panel-group-direction\=vertical\]\:w-full[data-panel-group-direction=vertical]{width:100%}.data-\[panel-group-direction\=vertical\]\:flex-col[data-panel-group-direction=vertical]{flex-direction:column}.data-\[panel-group-direction\=vertical\]\:after\:left-0[data-panel-group-direction=vertical]:after{content:var(--tw-content);left:calc(var(--spacing)*0)}.data-\[panel-group-direction\=vertical\]\:after\:h-1[data-panel-group-direction=vertical]:after{content:var(--tw-content);height:calc(var(--spacing)*1)}.data-\[panel-group-direction\=vertical\]\:after\:w-full[data-panel-group-direction=vertical]:after{content:var(--tw-content);width:100%}.data-\[panel-group-direction\=vertical\]\:after\:translate-x-0[data-panel-group-direction=vertical]:after{content:var(--tw-content);--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[panel-group-direction\=vertical\]\:after\:-translate-y-1\/2[data-panel-group-direction=vertical]:after{content:var(--tw-content);--tw-translate-y:calc(calc(1/2*100%)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[placeholder\]\:text-muted-foreground[data-placeholder]{color:var(--muted-foreground)}.data-\[selected\=true\]\:bg-accent[data-selected=true]{background-color:var(--accent)}.data-\[selected\=true\]\:text-accent-foreground[data-selected=true]{color:var(--accent-foreground)}.data-\[side\=bottom\]\:translate-y-1[data-side=bottom]{--tw-translate-y:calc(var(--spacing)*1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=bottom\]\:slide-in-from-top-2[data-side=bottom]{--tw-enter-translate-y:calc(2*var(--spacing)*-1)}.data-\[side\=left\]\:-translate-x-1[data-side=left]{--tw-translate-x:calc(var(--spacing)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=left\]\:slide-in-from-right-2[data-side=left]{--tw-enter-translate-x:calc(2*var(--spacing))}.data-\[side\=right\]\:translate-x-1[data-side=right]{--tw-translate-x:calc(var(--spacing)*1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=right\]\:slide-in-from-left-2[data-side=right]{--tw-enter-translate-x:calc(2*var(--spacing)*-1)}.data-\[side\=top\]\:-translate-y-1[data-side=top]{--tw-translate-y:calc(var(--spacing)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=top\]\:slide-in-from-bottom-2[data-side=top]{--tw-enter-translate-y:calc(2*var(--spacing))}.data-\[size\=default\]\:h-9[data-size=default]{height:calc(var(--spacing)*9)}.data-\[size\=sm\]\:h-8[data-size=sm]{height:calc(var(--spacing)*8)}:is(.\*\:data-\[slot\=alert-description\]\:text-destructive\/90>*)[data-slot=alert-description]{color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){:is(.\*\:data-\[slot\=alert-description\]\:text-destructive\/90>*)[data-slot=alert-description]{color:color-mix(in oklab,var(--destructive)90%,transparent)}}:is(.\*\:data-\[slot\=card\]\:bg-gradient-to-t>*)[data-slot=card]{--tw-gradient-position:to top in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}:is(.\*\:data-\[slot\=card\]\:from-primary\/5>*)[data-slot=card]{--tw-gradient-from:var(--primary)}@supports (color:color-mix(in lab,red,red)){:is(.\*\:data-\[slot\=card\]\:from-primary\/5>*)[data-slot=card]{--tw-gradient-from:color-mix(in oklab,var(--primary)5%,transparent)}}:is(.\*\:data-\[slot\=card\]\:from-primary\/5>*)[data-slot=card]{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}:is(.\*\:data-\[slot\=card\]\:to-card>*)[data-slot=card]{--tw-gradient-to:var(--card);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}:is(.\*\:data-\[slot\=card\]\:shadow-xs>*)[data-slot=card]{--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}:is(.\*\*\:data-\[slot\=command-input-wrapper\]\:h-12 *)[data-slot=command-input-wrapper]{height:calc(var(--spacing)*12)}:is(.\*\*\:data-\[slot\=navigation-menu-link\]\:focus\:ring-0 *)[data-slot=navigation-menu-link]:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(0px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}:is(.\*\*\:data-\[slot\=navigation-menu-link\]\:focus\:outline-none *)[data-slot=navigation-menu-link]:focus{--tw-outline-style:none;outline-style:none}:is(.\*\:data-\[slot\=select-value\]\:line-clamp-1>*)[data-slot=select-value]{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}:is(.\*\:data-\[slot\=select-value\]\:flex>*)[data-slot=select-value]{display:flex}:is(.\*\:data-\[slot\=select-value\]\:items-center>*)[data-slot=select-value]{align-items:center}:is(.\*\:data-\[slot\=select-value\]\:gap-2>*)[data-slot=select-value]{gap:calc(var(--spacing)*2)}.data-\[slot\=sidebar-menu-button\]\:\!p-1\.5[data-slot=sidebar-menu-button]{padding:calc(var(--spacing)*1.5)!important}:is(.\*\*\:data-\[slot\=table-cell\]\:first\:w-8 *)[data-slot=table-cell]:first-child{width:calc(var(--spacing)*8)}.data-\[state\=active\]\:bg-background[data-state=active]{background-color:var(--background)}.data-\[state\=active\]\:shadow-sm[data-state=active]{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.data-\[state\=checked\]\:translate-x-\[calc\(100\%-2px\)\][data-state=checked]{--tw-translate-x:calc(100% - 2px);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[state\=checked\]\:border-primary[data-state=checked]{border-color:var(--primary)}.data-\[state\=checked\]\:bg-primary[data-state=checked]{background-color:var(--primary)}.data-\[state\=checked\]\:text-primary-foreground[data-state=checked]{color:var(--primary-foreground)}.data-\[state\=closed\]\:animate-out[data-state=closed]{animation:exit var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.data-\[state\=closed\]\:duration-300[data-state=closed]{--tw-duration:.3s;transition-duration:.3s}.data-\[state\=closed\]\:fade-out-0[data-state=closed]{--tw-exit-opacity:0}.data-\[state\=closed\]\:fade-out-80[data-state=closed]{--tw-exit-opacity:.8}.data-\[state\=closed\]\:zoom-out-95[data-state=closed]{--tw-exit-scale:.95}.data-\[state\=closed\]\:slide-out-to-bottom[data-state=closed]{--tw-exit-translate-y:100%}.data-\[state\=closed\]\:slide-out-to-left[data-state=closed]{--tw-exit-translate-x:-100%}.data-\[state\=closed\]\:slide-out-to-right[data-state=closed]{--tw-exit-translate-x:100%}.data-\[state\=closed\]\:slide-out-to-right-full[data-state=closed]{--tw-exit-translate-x:calc(1*100%)}.data-\[state\=closed\]\:slide-out-to-top[data-state=closed]{--tw-exit-translate-y:-100%}.group-data-\[viewport\=false\]\/navigation-menu\:data-\[state\=closed\]\:animate-out:is(:where(.group\/navigation-menu)[data-viewport=false] *)[data-state=closed]{animation:exit var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.group-data-\[viewport\=false\]\/navigation-menu\:data-\[state\=closed\]\:fade-out-0:is(:where(.group\/navigation-menu)[data-viewport=false] *)[data-state=closed]{--tw-exit-opacity:0}.group-data-\[viewport\=false\]\/navigation-menu\:data-\[state\=closed\]\:zoom-out-95:is(:where(.group\/navigation-menu)[data-viewport=false] *)[data-state=closed]{--tw-exit-scale:.95}.data-\[state\=hidden\]\:animate-out[data-state=hidden]{animation:exit var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.data-\[state\=hidden\]\:fade-out[data-state=hidden]{--tw-exit-opacity:0}.data-\[state\=on\]\:bg-accent[data-state=on]{background-color:var(--accent)}.data-\[state\=on\]\:text-accent-foreground[data-state=on]{color:var(--accent-foreground)}.data-\[state\=open\]\:animate-in[data-state=open]{animation:enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.data-\[state\=open\]\:bg-accent[data-state=open],.data-\[state\=open\]\:bg-accent\/50[data-state=open]{background-color:var(--accent)}@supports (color:color-mix(in lab,red,red)){.data-\[state\=open\]\:bg-accent\/50[data-state=open]{background-color:color-mix(in oklab,var(--accent)50%,transparent)}}.data-\[state\=open\]\:bg-muted[data-state=open]{background-color:var(--muted)}.data-\[state\=open\]\:bg-secondary[data-state=open]{background-color:var(--secondary)}.data-\[state\=open\]\:bg-sidebar-accent[data-state=open]{background-color:var(--sidebar-accent)}.data-\[state\=open\]\:text-accent-foreground[data-state=open]{color:var(--accent-foreground)}.data-\[state\=open\]\:text-muted-foreground[data-state=open]{color:var(--muted-foreground)}.data-\[state\=open\]\:text-sidebar-accent-foreground[data-state=open]{color:var(--sidebar-accent-foreground)}.data-\[state\=open\]\:opacity-100[data-state=open]{opacity:1}.data-\[state\=open\]\:duration-500[data-state=open]{--tw-duration:.5s;transition-duration:.5s}.data-\[state\=open\]\:fade-in-0[data-state=open]{--tw-enter-opacity:0}.data-\[state\=open\]\:zoom-in-90[data-state=open]{--tw-enter-scale:.9}.data-\[state\=open\]\:zoom-in-95[data-state=open]{--tw-enter-scale:.95}.data-\[state\=open\]\:slide-in-from-bottom[data-state=open]{--tw-enter-translate-y:100%}.data-\[state\=open\]\:slide-in-from-left[data-state=open]{--tw-enter-translate-x:-100%}.data-\[state\=open\]\:slide-in-from-right[data-state=open]{--tw-enter-translate-x:100%}.data-\[state\=open\]\:slide-in-from-top[data-state=open]{--tw-enter-translate-y:-100%}.data-\[state\=open\]\:slide-in-from-top-full[data-state=open]{--tw-enter-translate-y:calc(1*-100%)}.group-data-\[viewport\=false\]\/navigation-menu\:data-\[state\=open\]\:animate-in:is(:where(.group\/navigation-menu)[data-viewport=false] *)[data-state=open]{animation:enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.group-data-\[viewport\=false\]\/navigation-menu\:data-\[state\=open\]\:fade-in-0:is(:where(.group\/navigation-menu)[data-viewport=false] *)[data-state=open]{--tw-enter-opacity:0}.group-data-\[viewport\=false\]\/navigation-menu\:data-\[state\=open\]\:zoom-in-95:is(:where(.group\/navigation-menu)[data-viewport=false] *)[data-state=open]{--tw-enter-scale:.95}@media (hover:hover){.data-\[state\=open\]\:hover\:bg-accent[data-state=open]:hover{background-color:var(--accent)}.data-\[state\=open\]\:hover\:bg-sidebar-accent[data-state=open]:hover{background-color:var(--sidebar-accent)}.data-\[state\=open\]\:hover\:text-sidebar-accent-foreground[data-state=open]:hover{color:var(--sidebar-accent-foreground)}}.data-\[state\=open\]\:focus\:bg-accent[data-state=open]:focus{background-color:var(--accent)}.data-\[state\=selected\]\:bg-muted[data-state=selected]{background-color:var(--muted)}.data-\[state\=unchecked\]\:translate-x-0[data-state=unchecked]{--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[state\=unchecked\]\:bg-input[data-state=unchecked]{background-color:var(--input)}.data-\[state\=visible\]\:animate-in[data-state=visible]{animation:enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.data-\[state\=visible\]\:fade-in[data-state=visible]{--tw-enter-opacity:0}.data-\[swipe\=cancel\]\:translate-x-0[data-swipe=cancel]{--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[swipe\=end\]\:translate-x-\[var\(--radix-toast-swipe-end-x\)\][data-swipe=end]{--tw-translate-x:var(--radix-toast-swipe-end-x);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[swipe\=end\]\:animate-out[data-swipe=end]{animation:exit var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.data-\[swipe\=move\]\:translate-x-\[var\(--radix-toast-swipe-move-x\)\][data-swipe=move]{--tw-translate-x:var(--radix-toast-swipe-move-x);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[swipe\=move\]\:transition-none[data-swipe=move]{transition-property:none}.data-\[variant\=destructive\]\:text-destructive[data-variant=destructive]{color:var(--destructive)}.data-\[variant\=destructive\]\:focus\:bg-destructive\/10[data-variant=destructive]:focus{background-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.data-\[variant\=destructive\]\:focus\:bg-destructive\/10[data-variant=destructive]:focus{background-color:color-mix(in oklab,var(--destructive)10%,transparent)}}.data-\[variant\=destructive\]\:focus\:text-destructive[data-variant=destructive]:focus{color:var(--destructive)}.data-\[variant\=outline\]\:border-l-0[data-variant=outline]{border-left-style:var(--tw-border-style);border-left-width:0}.data-\[variant\=outline\]\:shadow-xs[data-variant=outline]{--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.data-\[variant\=outline\]\:first\:border-l[data-variant=outline]:first-child{border-left-style:var(--tw-border-style);border-left-width:1px}@media (min-width:40rem){.sm\:top-auto{top:auto}.sm\:right-0{right:calc(var(--spacing)*0)}.sm\:bottom-0{bottom:calc(var(--spacing)*0)}.sm\:flex{display:flex}.sm\:inline{display:inline}.sm\:max-w-\[500px\]{max-width:500px}.sm\:max-w-\[600px\]{max-width:600px}.sm\:max-w-\[700px\]{max-width:700px}.sm\:max-w-lg{max-width:var(--container-lg)}.sm\:max-w-md{max-width:var(--container-md)}.sm\:max-w-sm{max-width:var(--container-sm)}.sm\:max-w-xl{max-width:var(--container-xl)}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:flex-col{flex-direction:column}.sm\:flex-row{flex-direction:row}.sm\:justify-end{justify-content:flex-end}:where(.sm\:space-x-0>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*0)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*0)*calc(1 - var(--tw-space-x-reverse)))}.sm\:px-6{padding-inline:calc(var(--spacing)*6)}.sm\:pt-6{padding-top:calc(var(--spacing)*6)}.sm\:text-left{text-align:left}.data-\[state\=open\]\:sm\:slide-in-from-bottom-full[data-state=open]{--tw-enter-translate-y:calc(1*100%)}}@media (min-width:48rem){.md\:absolute{position:absolute}.md\:block{display:block}.md\:flex{display:flex}.md\:w-\[var\(--radix-navigation-menu-viewport-width\)\]{width:var(--radix-navigation-menu-viewport-width)}.md\:w-auto{width:auto}.md\:max-w-\[420px\]{max-width:420px}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:gap-8{gap:calc(var(--spacing)*8)}.md\:p-8{padding:calc(var(--spacing)*8)}.md\:px-6{padding-inline:calc(var(--spacing)*6)}.md\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.md\:opacity-0{opacity:0}.md\:peer-data-\[variant\=inset\]\:m-2:is(:where(.peer)[data-variant=inset]~*){margin:calc(var(--spacing)*2)}.md\:peer-data-\[variant\=inset\]\:ml-0:is(:where(.peer)[data-variant=inset]~*){margin-left:calc(var(--spacing)*0)}.md\:peer-data-\[variant\=inset\]\:rounded-xl:is(:where(.peer)[data-variant=inset]~*){border-radius:calc(var(--radius) + 4px)}.md\:peer-data-\[variant\=inset\]\:shadow-sm:is(:where(.peer)[data-variant=inset]~*){--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.md\:peer-data-\[variant\=inset\]\:peer-data-\[state\=collapsed\]\:ml-2:is(:where(.peer)[data-variant=inset]~*):is(:where(.peer)[data-state=collapsed]~*){margin-left:calc(var(--spacing)*2)}.md\:after\:hidden:after{content:var(--tw-content);display:none}}@media (min-width:64rem){.lg\:ml-0{margin-left:calc(var(--spacing)*0)}.lg\:flex{display:flex}.lg\:hidden{display:none}.lg\:inline{display:inline}.lg\:w-fit{width:fit-content}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:gap-2{gap:calc(var(--spacing)*2)}.lg\:px-6{padding-inline:calc(var(--spacing)*6)}.lg\:px-8{padding-inline:calc(var(--spacing)*8)}}@container card (min-width:250px){.\@\[250px\]\/card\:text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}}@container card (min-width:540px){.\@\[540px\]\/card\:block{display:block}.\@\[540px\]\/card\:hidden{display:none}}@container card (min-width:767px){.\@\[767px\]\/card\:flex{display:flex}.\@\[767px\]\/card\:hidden{display:none}}@container main (min-width:36rem){.\@xl\/main\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}@container main (min-width:56rem){.\@4xl\/main\:flex{display:flex}.\@4xl\/main\:hidden{display:none}}@container main (min-width:64rem){.\@5xl\/main\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}.dark\:border-green-800:is(.dark *){border-color:var(--color-green-800)}.dark\:border-input:is(.dark *){border-color:var(--input)}.dark\:bg-destructive\/60:is(.dark *){background-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.dark\:bg-destructive\/60:is(.dark *){background-color:color-mix(in oklab,var(--destructive)60%,transparent)}}.dark\:bg-green-950:is(.dark *){background-color:var(--color-green-950)}.dark\:bg-input\/30:is(.dark *){background-color:var(--input)}@supports (color:color-mix(in lab,red,red)){.dark\:bg-input\/30:is(.dark *){background-color:color-mix(in oklab,var(--input)30%,transparent)}}.dark\:text-green-100:is(.dark *){color:var(--color-green-100)}.dark\:text-green-400:is(.dark *){color:var(--color-green-400)}.dark\:text-muted-foreground:is(.dark *){color:var(--muted-foreground)}@media (hover:hover){.dark\:hover\:bg-accent\/50:is(.dark *):hover{background-color:var(--accent)}@supports (color:color-mix(in lab,red,red)){.dark\:hover\:bg-accent\/50:is(.dark *):hover{background-color:color-mix(in oklab,var(--accent)50%,transparent)}}.dark\:hover\:bg-input\/50:is(.dark *):hover{background-color:var(--input)}@supports (color:color-mix(in lab,red,red)){.dark\:hover\:bg-input\/50:is(.dark *):hover{background-color:color-mix(in oklab,var(--input)50%,transparent)}}}.dark\:focus-visible\:ring-destructive\/40:is(.dark *):focus-visible{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.dark\:focus-visible\:ring-destructive\/40:is(.dark *):focus-visible{--tw-ring-color:color-mix(in oklab,var(--destructive)40%,transparent)}}.dark\:aria-invalid\:ring-destructive\/40:is(.dark *)[aria-invalid=true]{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.dark\:aria-invalid\:ring-destructive\/40:is(.dark *)[aria-invalid=true]{--tw-ring-color:color-mix(in oklab,var(--destructive)40%,transparent)}}.dark\:data-\[active\=true\]\:aria-invalid\:ring-destructive\/40:is(.dark *)[data-active=true][aria-invalid=true]{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.dark\:data-\[active\=true\]\:aria-invalid\:ring-destructive\/40:is(.dark *)[data-active=true][aria-invalid=true]{--tw-ring-color:color-mix(in oklab,var(--destructive)40%,transparent)}}:is(.dark\:\*\:data-\[slot\=card\]\:bg-card:is(.dark *)>*)[data-slot=card]{background-color:var(--card)}.dark\:data-\[state\=active\]\:border-input:is(.dark *)[data-state=active]{border-color:var(--input)}.dark\:data-\[state\=active\]\:bg-input\/30:is(.dark *)[data-state=active]{background-color:var(--input)}@supports (color:color-mix(in lab,red,red)){.dark\:data-\[state\=active\]\:bg-input\/30:is(.dark *)[data-state=active]{background-color:color-mix(in oklab,var(--input)30%,transparent)}}.dark\:data-\[state\=active\]\:text-foreground:is(.dark *)[data-state=active]{color:var(--foreground)}.dark\:data-\[state\=checked\]\:bg-primary:is(.dark *)[data-state=checked]{background-color:var(--primary)}.dark\:data-\[state\=checked\]\:bg-primary-foreground:is(.dark *)[data-state=checked]{background-color:var(--primary-foreground)}.dark\:data-\[state\=unchecked\]\:bg-foreground:is(.dark *)[data-state=unchecked]{background-color:var(--foreground)}.dark\:data-\[state\=unchecked\]\:bg-input\/80:is(.dark *)[data-state=unchecked]{background-color:var(--input)}@supports (color:color-mix(in lab,red,red)){.dark\:data-\[state\=unchecked\]\:bg-input\/80:is(.dark *)[data-state=unchecked]{background-color:color-mix(in oklab,var(--input)80%,transparent)}}.dark\:data-\[variant\=destructive\]\:focus\:bg-destructive\/20:is(.dark *)[data-variant=destructive]:focus{background-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.dark\:data-\[variant\=destructive\]\:focus\:bg-destructive\/20:is(.dark *)[data-variant=destructive]:focus{background-color:color-mix(in oklab,var(--destructive)20%,transparent)}}.\[\&_\.recharts-cartesian-axis-tick_text\]\:fill-muted-foreground .recharts-cartesian-axis-tick text{fill:var(--muted-foreground)}.\[\&_\.recharts-cartesian-grid_line\[stroke\=\'\#ccc\'\]\]\:stroke-border\/50 .recharts-cartesian-grid line[stroke=\#ccc]{stroke:var(--border)}@supports (color:color-mix(in lab,red,red)){.\[\&_\.recharts-cartesian-grid_line\[stroke\=\'\#ccc\'\]\]\:stroke-border\/50 .recharts-cartesian-grid line[stroke=\#ccc]{stroke:color-mix(in oklab,var(--border)50%,transparent)}}.\[\&_\.recharts-curve\.recharts-tooltip-cursor\]\:stroke-border .recharts-curve.recharts-tooltip-cursor{stroke:var(--border)}.\[\&_\.recharts-dot\[stroke\=\'\#fff\'\]\]\:stroke-transparent .recharts-dot[stroke=\#fff]{stroke:#0000}.\[\&_\.recharts-layer\]\:outline-hidden .recharts-layer{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.\[\&_\.recharts-layer\]\:outline-hidden .recharts-layer{outline-offset:2px;outline:2px solid #0000}}.\[\&_\.recharts-polar-grid_\[stroke\=\'\#ccc\'\]\]\:stroke-border .recharts-polar-grid [stroke=\#ccc]{stroke:var(--border)}.\[\&_\.recharts-radial-bar-background-sector\]\:fill-muted .recharts-radial-bar-background-sector,.\[\&_\.recharts-rectangle\.recharts-tooltip-cursor\]\:fill-muted .recharts-rectangle.recharts-tooltip-cursor{fill:var(--muted)}.\[\&_\.recharts-reference-line_\[stroke\=\'\#ccc\'\]\]\:stroke-border .recharts-reference-line [stroke=\#ccc]{stroke:var(--border)}.\[\&_\.recharts-sector\]\:outline-hidden .recharts-sector{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.\[\&_\.recharts-sector\]\:outline-hidden .recharts-sector{outline-offset:2px;outline:2px solid #0000}}.\[\&_\.recharts-sector\[stroke\=\'\#fff\'\]\]\:stroke-transparent .recharts-sector[stroke=\#fff]{stroke:#0000}.\[\&_\.recharts-surface\]\:outline-hidden .recharts-surface{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.\[\&_\.recharts-surface\]\:outline-hidden .recharts-surface{outline-offset:2px;outline:2px solid #0000}}.\[\&_\[cmdk-group-heading\]\]\:px-2 [cmdk-group-heading]{padding-inline:calc(var(--spacing)*2)}.\[\&_\[cmdk-group-heading\]\]\:py-1\.5 [cmdk-group-heading]{padding-block:calc(var(--spacing)*1.5)}.\[\&_\[cmdk-group-heading\]\]\:text-xs [cmdk-group-heading]{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.\[\&_\[cmdk-group-heading\]\]\:font-medium [cmdk-group-heading]{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.\[\&_\[cmdk-group-heading\]\]\:text-muted-foreground [cmdk-group-heading]{color:var(--muted-foreground)}.\[\&_\[cmdk-group\]\]\:px-2 [cmdk-group]{padding-inline:calc(var(--spacing)*2)}.\[\&_\[cmdk-group\]\:not\(\[hidden\]\)_\~\[cmdk-group\]\]\:pt-0 [cmdk-group]:not([hidden])~[cmdk-group]{padding-top:calc(var(--spacing)*0)}.\[\&_\[cmdk-input-wrapper\]_svg\]\:h-5 [cmdk-input-wrapper] svg{height:calc(var(--spacing)*5)}.\[\&_\[cmdk-input-wrapper\]_svg\]\:w-5 [cmdk-input-wrapper] svg{width:calc(var(--spacing)*5)}.\[\&_\[cmdk-input\]\]\:h-12 [cmdk-input]{height:calc(var(--spacing)*12)}.\[\&_\[cmdk-item\]\]\:px-2 [cmdk-item]{padding-inline:calc(var(--spacing)*2)}.\[\&_\[cmdk-item\]\]\:py-3 [cmdk-item]{padding-block:calc(var(--spacing)*3)}.\[\&_\[cmdk-item\]_svg\]\:h-5 [cmdk-item] svg{height:calc(var(--spacing)*5)}.\[\&_\[cmdk-item\]_svg\]\:w-5 [cmdk-item] svg{width:calc(var(--spacing)*5)}.\[\&_a\]\:underline a{text-decoration-line:underline}.\[\&_a\]\:underline-offset-4 a{text-underline-offset:4px}@media (hover:hover){.hover\:\[\&_a\]\:text-primary:hover a{color:var(--primary)}}.\[\&_p\]\:leading-relaxed p{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:size-3 svg{width:calc(var(--spacing)*3);height:calc(var(--spacing)*3)}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}.\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-4 svg:not([class*=size-]){width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.\[\&_svg\:not\(\[class\*\=\'text-\'\]\)\]\:text-muted-foreground svg:not([class*=text-]){color:var(--muted-foreground)}.\[\&_tr\]\:border-b tr{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.\[\&_tr\:last-child\]\:border-0 tr:last-child{border-style:var(--tw-border-style);border-width:0}.\[\&\:has\(\[role\=checkbox\]\)\]\:pr-0:has([role=checkbox]){padding-right:calc(var(--spacing)*0)}.\[\.border-b\]\:pb-6.border-b{padding-bottom:calc(var(--spacing)*6)}.\[\.border-t\]\:pt-6.border-t{padding-top:calc(var(--spacing)*6)}:is(.\*\:\[span\]\:last\:flex>*):is(span):last-child{display:flex}:is(.\*\:\[span\]\:last\:items-center>*):is(span):last-child{align-items:center}:is(.\*\:\[span\]\:last\:gap-2>*):is(span):last-child{gap:calc(var(--spacing)*2)}:is(.data-\[variant\=destructive\]\:\*\:\[svg\]\:\!text-destructive[data-variant=destructive]>*):is(svg){color:var(--destructive)!important}.\[\&\>\[role\=checkbox\]\]\:translate-y-\[2px\]>[role=checkbox]{--tw-translate-y:2px;translate:var(--tw-translate-x)var(--tw-translate-y)}.\[\&\>button\]\:hidden>button{display:none}.\[\&\>span\:last-child\]\:truncate>span:last-child{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.\[\&\>svg\]\:size-4>svg{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.\[\&\>svg\]\:h-2\.5>svg{height:calc(var(--spacing)*2.5)}.\[\&\>svg\]\:h-3>svg{height:calc(var(--spacing)*3)}.\[\&\>svg\]\:w-2\.5>svg{width:calc(var(--spacing)*2.5)}.\[\&\>svg\]\:w-3>svg{width:calc(var(--spacing)*3)}.\[\&\>svg\]\:shrink-0>svg{flex-shrink:0}.\[\&\>svg\]\:translate-y-0\.5>svg{--tw-translate-y:calc(var(--spacing)*.5);translate:var(--tw-translate-x)var(--tw-translate-y)}.\[\&\>svg\]\:text-current>svg{color:currentColor}.\[\&\>svg\]\:text-muted-foreground>svg{color:var(--muted-foreground)}.\[\&\>svg\]\:text-sidebar-accent-foreground>svg{color:var(--sidebar-accent-foreground)}.\[\&\>tr\]\:last\:border-b-0>tr:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.\[\&\[data-panel-group-direction\=vertical\]\>div\]\:rotate-90[data-panel-group-direction=vertical]>div{rotate:90deg}[data-side=left][data-collapsible=offcanvas] .\[\[data-side\=left\]\[data-collapsible\=offcanvas\]_\&\]\:-right-2{right:calc(var(--spacing)*-2)}[data-side=left][data-state=collapsed] .\[\[data-side\=left\]\[data-state\=collapsed\]_\&\]\:cursor-e-resize{cursor:e-resize}[data-side=right][data-collapsible=offcanvas] .\[\[data-side\=right\]\[data-collapsible\=offcanvas\]_\&\]\:-left-2{left:calc(var(--spacing)*-2)}[data-side=right][data-state=collapsed] .\[\[data-side\=right\]\[data-state\=collapsed\]_\&\]\:cursor-w-resize{cursor:w-resize}}@property --tw-animation-delay{syntax:"*";inherits:false;initial-value:0s}@property --tw-animation-direction{syntax:"*";inherits:false;initial-value:normal}@property --tw-animation-duration{syntax:"*";inherits:false}@property --tw-animation-fill-mode{syntax:"*";inherits:false;initial-value:none}@property --tw-animation-iteration-count{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-blur{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-opacity{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-rotate{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-scale{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-blur{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-opacity{syntax:"*";inherits:false;initial-value:1}@property --tw-exit-rotate{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-scale{syntax:"*";inherits:false;initial-value:1}@property --tw-exit-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-translate-y{syntax:"*";inherits:false;initial-value:0}:root{--radius:.625rem;--background:oklch(100% 0 0);--foreground:oklch(14.7% .004 49.25);--card:oklch(100% 0 0);--card-foreground:oklch(14.7% .004 49.25);--popover:oklch(100% 0 0);--popover-foreground:oklch(14.7% .004 49.25);--primary:oklch(21.6% .006 56.043);--primary-foreground:oklch(98.5% .001 106.423);--secondary:oklch(97% .001 106.424);--secondary-foreground:oklch(21.6% .006 56.043);--muted:oklch(97% .001 106.424);--muted-foreground:oklch(55.3% .013 58.071);--accent:oklch(97% .001 106.424);--accent-foreground:oklch(21.6% .006 56.043);--destructive:oklch(57.7% .245 27.325);--border:oklch(92.3% .003 48.717);--input:oklch(92.3% .003 48.717);--ring:oklch(70.9% .01 56.259);--chart-1:oklch(64.6% .222 41.116);--chart-2:oklch(60% .118 184.704);--chart-3:oklch(39.8% .07 227.392);--chart-4:oklch(82.8% .189 84.429);--chart-5:oklch(76.9% .188 70.08);--sidebar:oklch(98.5% .001 106.423);--sidebar-foreground:oklch(14.7% .004 49.25);--sidebar-primary:oklch(21.6% .006 56.043);--sidebar-primary-foreground:oklch(98.5% .001 106.423);--sidebar-accent:oklch(97% .001 106.424);--sidebar-accent-foreground:oklch(21.6% .006 56.043);--sidebar-border:oklch(92.3% .003 48.717);--sidebar-ring:oklch(70.9% .01 56.259)}.dark{--background:oklch(14.7% .004 49.25);--foreground:oklch(98.5% .001 106.423);--card:oklch(21.6% .006 56.043);--card-foreground:oklch(98.5% .001 106.423);--popover:oklch(21.6% .006 56.043);--popover-foreground:oklch(98.5% .001 106.423);--primary:oklch(92.3% .003 48.717);--primary-foreground:oklch(21.6% .006 56.043);--secondary:oklch(26.8% .007 34.298);--secondary-foreground:oklch(98.5% .001 106.423);--muted:oklch(26.8% .007 34.298);--muted-foreground:oklch(70.9% .01 56.259);--accent:oklch(26.8% .007 34.298);--accent-foreground:oklch(98.5% .001 106.423);--destructive:oklch(70.4% .191 22.216);--border:oklch(100% 0 0/.1);--input:oklch(100% 0 0/.15);--ring:oklch(55.3% .013 58.071);--chart-1:oklch(48.8% .243 264.376);--chart-2:oklch(69.6% .17 162.48);--chart-3:oklch(76.9% .188 70.08);--chart-4:oklch(62.7% .265 303.9);--chart-5:oklch(64.5% .246 16.439);--sidebar:oklch(21.6% .006 56.043);--sidebar-foreground:oklch(98.5% .001 106.423);--sidebar-primary:oklch(48.8% .243 264.376);--sidebar-primary-foreground:oklch(98.5% .001 106.423);--sidebar-accent:oklch(26.8% .007 34.298);--sidebar-accent-foreground:oklch(98.5% .001 106.423);--sidebar-border:oklch(100% 0 0/.1);--sidebar-ring:oklch(55.3% .013 58.071)}@keyframes shimmer{0%{transform:translate(-100%)}to{transform:translate(100%)}}.animate-shimmer{animation:shimmer 2s infinite}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-space-x-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-content{syntax:"*";inherits:false;initial-value:""}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"";inherits:false;initial-value:0}@property --tw-gradient-via-position{syntax:"";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"";inherits:false;initial-value:100%}@keyframes spin{to{transform:rotate(1turn)}}@keyframes pulse{50%{opacity:.5}}@keyframes enter{0%{opacity:var(--tw-enter-opacity,1);transform:translate3d(var(--tw-enter-translate-x,0),var(--tw-enter-translate-y,0),0)scale3d(var(--tw-enter-scale,1),var(--tw-enter-scale,1),var(--tw-enter-scale,1))rotate(var(--tw-enter-rotate,0));filter:blur(var(--tw-enter-blur,0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity,1);transform:translate3d(var(--tw-exit-translate-x,0),var(--tw-exit-translate-y,0),0)scale3d(var(--tw-exit-scale,1),var(--tw-exit-scale,1),var(--tw-exit-scale,1))rotate(var(--tw-exit-rotate,0));filter:blur(var(--tw-exit-blur,0))}}@keyframes caret-blink{0%,70%,to{opacity:1}20%,50%{opacity:0}}
\ No newline at end of file
diff --git a/ui_out/_next/static/css/6b70638fbb45b4f2.css b/ui_out/_next/static/css/6b70638fbb45b4f2.css
new file mode 100644
index 00000000..07baf955
--- /dev/null
+++ b/ui_out/_next/static/css/6b70638fbb45b4f2.css
@@ -0,0 +1 @@
+/*! tailwindcss v4.1.14 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,::backdrop,:after,:before{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-space-x-reverse:0;--tw-border-style:solid;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-duration:initial;--tw-ease:initial;--tw-content:"";--tw-animation-delay:0s;--tw-animation-direction:normal;--tw-animation-duration:initial;--tw-animation-fill-mode:none;--tw-animation-iteration-count:1;--tw-enter-blur:0;--tw-enter-opacity:1;--tw-enter-rotate:0;--tw-enter-scale:1;--tw-enter-translate-x:0;--tw-enter-translate-y:0;--tw-exit-blur:0;--tw-exit-opacity:1;--tw-exit-rotate:0;--tw-exit-scale:1;--tw-exit-translate-x:0;--tw-exit-translate-y:0}}}@layer theme{:host,:root{--color-red-50:oklch(97.1% .013 17.38);--color-red-100:oklch(93.6% .032 17.717);--color-red-200:oklch(88.5% .062 18.334);--color-red-300:oklch(80.8% .114 19.571);--color-red-400:oklch(70.4% .191 22.216);--color-red-500:oklch(63.7% .237 25.331);--color-red-600:oklch(57.7% .245 27.325);--color-red-800:oklch(44.4% .177 26.899);--color-orange-100:oklch(95.4% .038 75.164);--color-orange-300:oklch(83.7% .128 66.29);--color-orange-400:oklch(75% .183 55.934);--color-orange-600:oklch(64.6% .222 41.116);--color-orange-700:oklch(55.3% .195 38.402);--color-orange-800:oklch(47% .157 37.304);--color-amber-50:oklch(98.7% .022 95.277);--color-amber-200:oklch(92.4% .12 95.746);--color-amber-600:oklch(66.6% .179 58.318);--color-amber-800:oklch(47.3% .137 46.201);--color-yellow-100:oklch(97.3% .071 103.193);--color-yellow-500:oklch(79.5% .184 86.047);--color-yellow-800:oklch(47.6% .114 61.907);--color-green-50:oklch(98.2% .018 155.826);--color-green-100:oklch(96.2% .044 156.743);--color-green-200:oklch(92.5% .084 155.995);--color-green-300:oklch(87.1% .15 154.449);--color-green-400:oklch(79.2% .209 151.711);--color-green-500:oklch(72.3% .219 149.579);--color-green-600:oklch(62.7% .194 149.214);--color-green-700:oklch(52.7% .154 150.069);--color-green-800:oklch(44.8% .119 151.328);--color-green-900:oklch(39.3% .095 152.535);--color-green-950:oklch(26.6% .065 152.934);--color-emerald-50:oklch(97.9% .021 166.113);--color-emerald-100:oklch(95% .052 163.051);--color-emerald-200:oklch(90.5% .093 164.15);--color-emerald-800:oklch(43.2% .095 166.913);--color-blue-50:oklch(97% .014 254.604);--color-blue-100:oklch(93.2% .032 255.585);--color-blue-200:oklch(88.2% .059 254.128);--color-blue-500:oklch(62.3% .214 259.815);--color-blue-600:oklch(54.6% .245 262.881);--color-blue-700:oklch(48.8% .243 264.376);--color-blue-800:oklch(42.4% .199 265.638);--color-blue-900:oklch(37.9% .146 265.522);--color-indigo-50:oklch(96.2% .018 272.314);--color-purple-50:oklch(97.7% .014 308.299);--color-purple-100:oklch(94.6% .033 307.174);--color-purple-200:oklch(90.2% .063 306.703);--color-purple-600:oklch(55.8% .288 302.321);--color-purple-800:oklch(43.8% .218 303.724);--color-purple-900:oklch(38.1% .176 304.987);--color-pink-50:oklch(97.1% .014 343.198);--color-pink-100:oklch(94.8% .028 342.258);--color-pink-800:oklch(45.9% .187 3.815);--color-gray-50:oklch(98.5% .002 247.839);--color-gray-100:oklch(96.7% .003 264.542);--color-gray-800:oklch(27.8% .033 256.848);--color-gray-900:oklch(21% .034 264.665);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-sm:24rem;--container-md:28rem;--container-lg:32rem;--container-xl:36rem;--container-6xl:72rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--text-base:1rem;--text-base--line-height:calc(1.5/1);--text-lg:1.125rem;--text-lg--line-height:calc(1.75/1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75/1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2/1.5);--text-3xl:1.875rem;--text-3xl--line-height:calc(2.25/1.875);--text-4xl:2.25rem;--text-4xl--line-height:calc(2.5/2.25);--text-5xl:3rem;--text-5xl--line-height:1;--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-tight:-.025em;--tracking-widest:.1em;--leading-tight:1.25;--leading-relaxed:1.625;--radius-xs:.125rem;--ease-in-out:cubic-bezier(.4,0,.2,1);--animate-spin:spin 1s linear infinite;--animate-pulse:pulse 2s cubic-bezier(.4,0,.6,1)infinite;--aspect-video:16/9;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-geist-sans);--default-mono-font-family:var(--font-geist-mono);--color-border:var(--border)}}@layer base{*,::backdrop,:after,:before{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}:host,html{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}menu,ol,ul{list-style:none}audio,canvas,embed,iframe,img,object,svg,video{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,optgroup,select,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit,::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-millisecond-field,::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}*{border-color:var(--border);outline-color:var(--ring)}@supports (color:color-mix(in lab,red,red)){*{outline-color:color-mix(in oklab,var(--ring)50%,transparent)}}body{background-color:var(--background);color:var(--foreground)}}@layer components;@layer utilities{.\@container\/card{container:card/inline-size}.\@container\/card-header{container:card-header/inline-size}.\@container\/main{container:main/inline-size}.pointer-events-auto{pointer-events:auto}.pointer-events-none{pointer-events:none}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden}.absolute,.sr-only{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:calc(var(--spacing)*0)}.inset-x-0{inset-inline:calc(var(--spacing)*0)}.inset-y-0{inset-block:calc(var(--spacing)*0)}.-top-12{top:calc(var(--spacing)*-12)}.top-0{top:calc(var(--spacing)*0)}.top-1\.5{top:calc(var(--spacing)*1.5)}.top-1\/2{top:50%}.top-2{top:calc(var(--spacing)*2)}.top-2\.5{top:calc(var(--spacing)*2.5)}.top-3{top:calc(var(--spacing)*3)}.top-3\.5{top:calc(var(--spacing)*3.5)}.top-4{top:calc(var(--spacing)*4)}.top-\[1px\]{top:1px}.top-\[50\%\]{top:50%}.top-\[60\%\]{top:60%}.top-full{top:100%}.-right-12{right:calc(var(--spacing)*-12)}.right-0{right:calc(var(--spacing)*0)}.right-1{right:calc(var(--spacing)*1)}.right-2{right:calc(var(--spacing)*2)}.right-3{right:calc(var(--spacing)*3)}.right-4{right:calc(var(--spacing)*4)}.-bottom-12{bottom:calc(var(--spacing)*-12)}.bottom-0{bottom:calc(var(--spacing)*0)}.-left-12{left:calc(var(--spacing)*-12)}.left-0{left:calc(var(--spacing)*0)}.left-1\/2{left:50%}.left-2{left:calc(var(--spacing)*2)}.left-3{left:calc(var(--spacing)*3)}.left-\[50\%\]{left:50%}.isolate{isolation:isolate}.z-0{z-index:0}.z-10{z-index:10}.z-20{z-index:20}.z-50{z-index:50}.z-\[1\]{z-index:1}.z-\[100\]{z-index:100}.col-span-full{grid-column:1/-1}.col-start-2{grid-column-start:2}.row-span-2{grid-row:span 2/span 2}.row-start-1{grid-row-start:1}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.-mx-1{margin-inline:calc(var(--spacing)*-1)}.mx-2{margin-inline:calc(var(--spacing)*2)}.mx-3\.5{margin-inline:calc(var(--spacing)*3.5)}.mx-auto{margin-inline:auto}.my-0\.5{margin-block:calc(var(--spacing)*.5)}.my-1{margin-block:calc(var(--spacing)*1)}.my-2{margin-block:calc(var(--spacing)*2)}.-mt-4{margin-top:calc(var(--spacing)*-4)}.mt-0\.5{margin-top:calc(var(--spacing)*.5)}.mt-1{margin-top:calc(var(--spacing)*1)}.mt-1\.5{margin-top:calc(var(--spacing)*1.5)}.mt-2{margin-top:calc(var(--spacing)*2)}.mt-3{margin-top:calc(var(--spacing)*3)}.mt-4{margin-top:calc(var(--spacing)*4)}.mt-6{margin-top:calc(var(--spacing)*6)}.mt-auto{margin-top:auto}.mr-1{margin-right:calc(var(--spacing)*1)}.mr-2{margin-right:calc(var(--spacing)*2)}.mb-2{margin-bottom:calc(var(--spacing)*2)}.mb-3{margin-bottom:calc(var(--spacing)*3)}.mb-4{margin-bottom:calc(var(--spacing)*4)}.mb-6{margin-bottom:calc(var(--spacing)*6)}.mb-8{margin-bottom:calc(var(--spacing)*8)}.-ml-1{margin-left:calc(var(--spacing)*-1)}.-ml-4{margin-left:calc(var(--spacing)*-4)}.ml-1{margin-left:calc(var(--spacing)*1)}.ml-2{margin-left:calc(var(--spacing)*2)}.ml-auto{margin-left:auto}.line-clamp-1{-webkit-line-clamp:1}.line-clamp-1,.line-clamp-2{-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.line-clamp-2{-webkit-line-clamp:2}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-flex{display:inline-flex}.table{display:table}.table-caption{display:table-caption}.table-cell{display:table-cell}.table-row{display:table-row}.field-sizing-content{field-sizing:content}.aspect-auto{aspect-ratio:auto}.aspect-square{aspect-ratio:1}.aspect-video{aspect-ratio:var(--aspect-video)}.size-2{width:calc(var(--spacing)*2);height:calc(var(--spacing)*2)}.size-2\.5{width:calc(var(--spacing)*2.5);height:calc(var(--spacing)*2.5)}.size-3{width:calc(var(--spacing)*3);height:calc(var(--spacing)*3)}.size-3\.5{width:calc(var(--spacing)*3.5);height:calc(var(--spacing)*3.5)}.size-4{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.size-6{width:calc(var(--spacing)*6);height:calc(var(--spacing)*6)}.size-7{width:calc(var(--spacing)*7);height:calc(var(--spacing)*7)}.size-8{width:calc(var(--spacing)*8);height:calc(var(--spacing)*8)}.size-9{width:calc(var(--spacing)*9);height:calc(var(--spacing)*9)}.size-full{width:100%;height:100%}.h-1\.5{height:calc(var(--spacing)*1.5)}.h-2{height:calc(var(--spacing)*2)}.h-2\.5{height:calc(var(--spacing)*2.5)}.h-3{height:calc(var(--spacing)*3)}.h-4{height:calc(var(--spacing)*4)}.h-5{height:calc(var(--spacing)*5)}.h-6{height:calc(var(--spacing)*6)}.h-7{height:calc(var(--spacing)*7)}.h-8{height:calc(var(--spacing)*8)}.h-9{height:calc(var(--spacing)*9)}.h-10{height:calc(var(--spacing)*10)}.h-12{height:calc(var(--spacing)*12)}.h-24{height:calc(var(--spacing)*24)}.h-\[1\.15rem\]{height:1.15rem}.h-\[40px\]{height:40px}.h-\[60px\]{height:60px}.h-\[100px\]{height:100px}.h-\[120px\]{height:120px}.h-\[200px\]{height:200px}.h-\[250px\]{height:250px}.h-\[300px\]{height:300px}.h-\[400px\]{height:400px}.h-\[calc\(100\%-1px\)\]{height:calc(100% - 1px)}.h-\[var\(--radix-navigation-menu-viewport-height\)\]{height:var(--radix-navigation-menu-viewport-height)}.h-\[var\(--radix-select-trigger-height\)\]{height:var(--radix-select-trigger-height)}.h-auto{height:auto}.h-full{height:100%}.h-px{height:1px}.h-svh{height:100svh}.max-h-\(--radix-context-menu-content-available-height\){max-height:var(--radix-context-menu-content-available-height)}.max-h-\(--radix-dropdown-menu-content-available-height\){max-height:var(--radix-dropdown-menu-content-available-height)}.max-h-\(--radix-select-content-available-height\){max-height:var(--radix-select-content-available-height)}.max-h-32{max-height:calc(var(--spacing)*32)}.max-h-60{max-height:calc(var(--spacing)*60)}.max-h-\[80vh\]{max-height:80vh}.max-h-\[90vh\]{max-height:90vh}.max-h-\[300px\]{max-height:300px}.max-h-screen{max-height:100vh}.min-h-0{min-height:calc(var(--spacing)*0)}.min-h-4{min-height:calc(var(--spacing)*4)}.min-h-16{min-height:calc(var(--spacing)*16)}.min-h-screen{min-height:100vh}.min-h-svh{min-height:100svh}.w-\(--sidebar-width\){width:var(--sidebar-width)}.w-0{width:calc(var(--spacing)*0)}.w-1{width:calc(var(--spacing)*1)}.w-2{width:calc(var(--spacing)*2)}.w-2\.5{width:calc(var(--spacing)*2.5)}.w-3{width:calc(var(--spacing)*3)}.w-3\/4{width:75%}.w-4{width:calc(var(--spacing)*4)}.w-5{width:calc(var(--spacing)*5)}.w-8{width:calc(var(--spacing)*8)}.w-9{width:calc(var(--spacing)*9)}.w-12{width:calc(var(--spacing)*12)}.w-16{width:calc(var(--spacing)*16)}.w-20{width:calc(var(--spacing)*20)}.w-24{width:calc(var(--spacing)*24)}.w-32{width:calc(var(--spacing)*32)}.w-40{width:calc(var(--spacing)*40)}.w-56{width:calc(var(--spacing)*56)}.w-64{width:calc(var(--spacing)*64)}.w-72{width:calc(var(--spacing)*72)}.w-\[--radix-dropdown-menu-trigger-width\]{width:--radix-dropdown-menu-trigger-width}.w-\[60px\]{width:60px}.w-\[100px\]{width:100px}.w-\[400px\]{width:400px}.w-\[calc\(100\%-3rem\)\]{width:calc(100% - 3rem)}.w-auto{width:auto}.w-fit{width:fit-content}.w-full{width:100%}.w-max{width:max-content}.w-px{width:1px}.max-w-\(--skeleton-width\){max-width:var(--skeleton-width)}.max-w-6xl{max-width:var(--container-6xl)}.max-w-32{max-width:calc(var(--spacing)*32)}.max-w-\[300px\]{max-width:300px}.max-w-\[calc\(100\%-2rem\)\]{max-width:calc(100% - 2rem)}.max-w-full{max-width:100%}.max-w-max{max-width:max-content}.max-w-md{max-width:var(--container-md)}.min-w-0{min-width:calc(var(--spacing)*0)}.min-w-5{min-width:calc(var(--spacing)*5)}.min-w-8{min-width:calc(var(--spacing)*8)}.min-w-9{min-width:calc(var(--spacing)*9)}.min-w-10{min-width:calc(var(--spacing)*10)}.min-w-56{min-width:calc(var(--spacing)*56)}.min-w-\[8rem\]{min-width:8rem}.min-w-\[12rem\]{min-width:12rem}.min-w-\[var\(--radix-select-trigger-width\)\]{min-width:var(--radix-select-trigger-width)}.min-w-fit{min-width:fit-content}.flex-1{flex:1}.flex-shrink-0,.shrink-0{flex-shrink:0}.grow-0{flex-grow:0}.basis-full{flex-basis:100%}.caption-bottom{caption-side:bottom}.origin-\(--radix-context-menu-content-transform-origin\){transform-origin:var(--radix-context-menu-content-transform-origin)}.origin-\(--radix-dropdown-menu-content-transform-origin\){transform-origin:var(--radix-dropdown-menu-content-transform-origin)}.origin-\(--radix-hover-card-content-transform-origin\){transform-origin:var(--radix-hover-card-content-transform-origin)}.origin-\(--radix-menubar-content-transform-origin\){transform-origin:var(--radix-menubar-content-transform-origin)}.origin-\(--radix-popover-content-transform-origin\){transform-origin:var(--radix-popover-content-transform-origin)}.origin-\(--radix-select-content-transform-origin\){transform-origin:var(--radix-select-content-transform-origin)}.origin-\(--radix-tooltip-content-transform-origin\){transform-origin:var(--radix-tooltip-content-transform-origin)}.-translate-x-1\/2{--tw-translate-x:calc(calc(1/2*100%)*-1)}.-translate-x-1\/2,.-translate-x-px{translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-x-px{--tw-translate-x:-1px}.translate-x-\[-50\%\]{--tw-translate-x:-50%}.translate-x-\[-50\%\],.translate-x-px{translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-px{--tw-translate-x:1px}.-translate-y-1\/2{--tw-translate-y:calc(calc(1/2*100%)*-1)}.-translate-y-1\/2,.translate-y-\[-50\%\]{translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-\[-50\%\]{--tw-translate-y:-50%}.translate-y-\[calc\(-50\%_-_2px\)\]{--tw-translate-y:calc(-50% - 2px);translate:var(--tw-translate-x)var(--tw-translate-y)}.rotate-45{rotate:45deg}.rotate-90{rotate:90deg}.transform{transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.animate-caret-blink{animation:caret-blink 1.25s ease-out infinite}.animate-in{animation:enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:var(--animate-spin)}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.touch-none{touch-action:none}.scroll-my-1{scroll-margin-block:calc(var(--spacing)*1)}.scroll-py-1{scroll-padding-block:calc(var(--spacing)*1)}.list-inside{list-style-position:inside}.list-disc{list-style-type:disc}.list-none{list-style-type:none}.auto-cols-fr{grid-auto-columns:minmax(0,1fr)}.grid-flow-col{grid-auto-flow:column}.auto-rows-min{grid-auto-rows:min-content}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.grid-cols-\[0_1fr\]{grid-template-columns:0 1fr}.grid-rows-\[auto_auto\]{grid-template-rows:auto auto}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-row{flex-direction:row}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.items-stretch{align-items:stretch}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.justify-start{justify-content:flex-start}.justify-items-start{justify-items:start}.gap-1{gap:calc(var(--spacing)*1)}.gap-1\.5{gap:calc(var(--spacing)*1.5)}.gap-2{gap:calc(var(--spacing)*2)}.gap-3{gap:calc(var(--spacing)*3)}.gap-4{gap:calc(var(--spacing)*4)}.gap-6{gap:calc(var(--spacing)*6)}.gap-8{gap:calc(var(--spacing)*8)}:where(.space-y-0\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*.5)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*.5)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*1)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*1)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*2)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*3)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*3)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*4)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*4)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*6)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*6)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-x-1>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*1)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*1)*calc(1 - var(--tw-space-x-reverse)))}:where(.space-x-2>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*2)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-x-reverse)))}:where(.space-x-3>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*3)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*3)*calc(1 - var(--tw-space-x-reverse)))}:where(.space-x-4>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*4)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*4)*calc(1 - var(--tw-space-x-reverse)))}.gap-y-0\.5{row-gap:calc(var(--spacing)*.5)}.self-start{align-self:flex-start}.justify-self-end{justify-self:flex-end}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-x-hidden{overflow-x:hidden}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-\[2px\]{border-radius:2px}.rounded-\[4px\]{border-radius:4px}.rounded-\[inherit\]{border-radius:inherit}.rounded-full{border-radius:3.40282e+38px}.rounded-lg{border-radius:var(--radius)}.rounded-md{border-radius:calc(var(--radius) - 2px)}.rounded-none{border-radius:0}.rounded-sm{border-radius:calc(var(--radius) - 4px)}.rounded-xl{border-radius:calc(var(--radius) + 4px)}.rounded-xs{border-radius:var(--radius-xs)}.rounded-tl-sm{border-top-left-radius:calc(var(--radius) - 4px)}.border{border-style:var(--tw-border-style);border-width:1px}.border-\[1\.5px\]{border-style:var(--tw-border-style);border-width:1.5px}.border-y{border-block-style:var(--tw-border-style);border-block-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-\(--color-border\){border-color:var(--color-border)}.border-amber-200{border-color:var(--color-amber-200)}.border-blue-200{border-color:var(--color-blue-200)}.border-border\/50{border-color:var(--border)}@supports (color:color-mix(in lab,red,red)){.border-border\/50{border-color:color-mix(in oklab,var(--border)50%,transparent)}}.border-destructive{border-color:var(--destructive)}.border-emerald-200{border-color:var(--color-emerald-200)}.border-green-200{border-color:var(--color-green-200)}.border-green-300{border-color:var(--color-green-300)}.border-green-500{border-color:var(--color-green-500)}.border-input{border-color:var(--input)}.border-orange-300{border-color:var(--color-orange-300)}.border-purple-200{border-color:var(--color-purple-200)}.border-red-200{border-color:var(--color-red-200)}.border-red-300{border-color:var(--color-red-300)}.border-sidebar-border{border-color:var(--sidebar-border)}.border-transparent{border-color:#0000}.border-t-transparent{border-top-color:#0000}.border-l-transparent{border-left-color:#0000}.bg-\(--color-bg\){background-color:var(--color-bg)}.bg-accent{background-color:var(--accent)}.bg-amber-50{background-color:var(--color-amber-50)}.bg-background{background-color:var(--background)}.bg-black\/50{background-color:#00000080}@supports (color:color-mix(in lab,red,red)){.bg-black\/50{background-color:color-mix(in oklab,var(--color-black)50%,transparent)}}.bg-blue-50{background-color:var(--color-blue-50)}.bg-blue-100{background-color:var(--color-blue-100)}.bg-blue-600{background-color:var(--color-blue-600)}.bg-border{background-color:var(--border)}.bg-card{background-color:var(--card)}.bg-destructive,.bg-destructive\/10{background-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.bg-destructive\/10{background-color:color-mix(in oklab,var(--destructive)10%,transparent)}}.bg-emerald-100{background-color:var(--color-emerald-100)}.bg-foreground{background-color:var(--foreground)}.bg-gray-50{background-color:var(--color-gray-50)}.bg-gray-100{background-color:var(--color-gray-100)}.bg-gray-900{background-color:var(--color-gray-900)}.bg-green-50{background-color:var(--color-green-50)}.bg-green-100{background-color:var(--color-green-100)}.bg-green-500{background-color:var(--color-green-500)}.bg-muted{background-color:var(--muted)}.bg-muted-foreground\/30{background-color:var(--muted-foreground)}@supports (color:color-mix(in lab,red,red)){.bg-muted-foreground\/30{background-color:color-mix(in oklab,var(--muted-foreground)30%,transparent)}}.bg-muted\/50{background-color:var(--muted)}@supports (color:color-mix(in lab,red,red)){.bg-muted\/50{background-color:color-mix(in oklab,var(--muted)50%,transparent)}}.bg-orange-100{background-color:var(--color-orange-100)}.bg-pink-100{background-color:var(--color-pink-100)}.bg-popover{background-color:var(--popover)}.bg-primary,.bg-primary\/20{background-color:var(--primary)}@supports (color:color-mix(in lab,red,red)){.bg-primary\/20{background-color:color-mix(in oklab,var(--primary)20%,transparent)}}.bg-purple-100{background-color:var(--color-purple-100)}.bg-red-50{background-color:var(--color-red-50)}.bg-red-100{background-color:var(--color-red-100)}.bg-red-500{background-color:var(--color-red-500)}.bg-red-600{background-color:var(--color-red-600)}.bg-secondary{background-color:var(--secondary)}.bg-sidebar{background-color:var(--sidebar)}.bg-sidebar-border{background-color:var(--sidebar-border)}.bg-transparent{background-color:#0000}.bg-white{background-color:var(--color-white)}.bg-yellow-100{background-color:var(--color-yellow-100)}.bg-yellow-500{background-color:var(--color-yellow-500)}.bg-gradient-to-r{--tw-gradient-position:to right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.from-blue-50{--tw-gradient-from:var(--color-blue-50);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-green-50{--tw-gradient-from:var(--color-green-50);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-purple-50{--tw-gradient-from:var(--color-purple-50);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-emerald-50{--tw-gradient-to:var(--color-emerald-50);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-indigo-50{--tw-gradient-to:var(--color-indigo-50);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-pink-50{--tw-gradient-to:var(--color-pink-50);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.fill-current{fill:currentColor}.fill-primary{fill:var(--primary)}.object-cover{object-fit:cover}.p-0{padding:calc(var(--spacing)*0)}.p-1{padding:calc(var(--spacing)*1)}.p-2{padding:calc(var(--spacing)*2)}.p-3{padding:calc(var(--spacing)*3)}.p-4{padding:calc(var(--spacing)*4)}.p-6{padding:calc(var(--spacing)*6)}.p-8{padding:calc(var(--spacing)*8)}.p-\[3px\]{padding:3px}.p-px{padding:1px}.px-0{padding-inline:calc(var(--spacing)*0)}.px-1{padding-inline:calc(var(--spacing)*1)}.px-1\.5{padding-inline:calc(var(--spacing)*1.5)}.px-2{padding-inline:calc(var(--spacing)*2)}.px-2\.5{padding-inline:calc(var(--spacing)*2.5)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-4{padding-inline:calc(var(--spacing)*4)}.px-6{padding-inline:calc(var(--spacing)*6)}.py-0\.5{padding-block:calc(var(--spacing)*.5)}.py-1{padding-block:calc(var(--spacing)*1)}.py-1\.5{padding-block:calc(var(--spacing)*1.5)}.py-2{padding-block:calc(var(--spacing)*2)}.py-3{padding-block:calc(var(--spacing)*3)}.py-4{padding-block:calc(var(--spacing)*4)}.py-6{padding-block:calc(var(--spacing)*6)}.py-8{padding-block:calc(var(--spacing)*8)}.py-12{padding-block:calc(var(--spacing)*12)}.pt-0{padding-top:calc(var(--spacing)*0)}.pt-3{padding-top:calc(var(--spacing)*3)}.pt-4{padding-top:calc(var(--spacing)*4)}.pt-6{padding-top:calc(var(--spacing)*6)}.pr-2{padding-right:calc(var(--spacing)*2)}.pr-2\.5{padding-right:calc(var(--spacing)*2.5)}.pr-3{padding-right:calc(var(--spacing)*3)}.pr-8{padding-right:calc(var(--spacing)*8)}.pr-10{padding-right:calc(var(--spacing)*10)}.pr-24{padding-right:calc(var(--spacing)*24)}.pb-2{padding-bottom:calc(var(--spacing)*2)}.pb-3{padding-bottom:calc(var(--spacing)*3)}.pb-4{padding-bottom:calc(var(--spacing)*4)}.pl-2{padding-left:calc(var(--spacing)*2)}.pl-4{padding-left:calc(var(--spacing)*4)}.pl-8{padding-left:calc(var(--spacing)*8)}.pl-9{padding-left:calc(var(--spacing)*9)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.align-middle{vertical-align:middle}.font-mono{font-family:var(--font-geist-mono)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.text-5xl{font-size:var(--text-5xl);line-height:var(--tw-leading,var(--text-5xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.leading-none{--tw-leading:1;line-height:1}.leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-widest{--tw-tracking:var(--tracking-widest);letter-spacing:var(--tracking-widest)}.text-balance{text-wrap:balance}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.text-ellipsis{text-overflow:ellipsis}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.text-amber-600{color:var(--color-amber-600)}.text-amber-800{color:var(--color-amber-800)}.text-blue-500{color:var(--color-blue-500)}.text-blue-600{color:var(--color-blue-600)}.text-blue-800{color:var(--color-blue-800)}.text-blue-900{color:var(--color-blue-900)}.text-card-foreground{color:var(--card-foreground)}.text-current{color:currentColor}.text-destructive{color:var(--destructive)}.text-emerald-800{color:var(--color-emerald-800)}.text-foreground,.text-foreground\/50{color:var(--foreground)}@supports (color:color-mix(in lab,red,red)){.text-foreground\/50{color:color-mix(in oklab,var(--foreground)50%,transparent)}}.text-gray-800{color:var(--color-gray-800)}.text-green-400{color:var(--color-green-400)}.text-green-500{color:var(--color-green-500)}.text-green-600{color:var(--color-green-600)}.text-green-800{color:var(--color-green-800)}.text-green-900{color:var(--color-green-900)}.text-muted-foreground{color:var(--muted-foreground)}.text-orange-600{color:var(--color-orange-600)}.text-orange-800{color:var(--color-orange-800)}.text-pink-800{color:var(--color-pink-800)}.text-popover-foreground{color:var(--popover-foreground)}.text-primary{color:var(--primary)}.text-primary-foreground{color:var(--primary-foreground)}.text-purple-600{color:var(--color-purple-600)}.text-purple-800{color:var(--color-purple-800)}.text-purple-900{color:var(--color-purple-900)}.text-red-500{color:var(--color-red-500)}.text-red-600{color:var(--color-red-600)}.text-red-800{color:var(--color-red-800)}.text-secondary-foreground{color:var(--secondary-foreground)}.text-sidebar-foreground,.text-sidebar-foreground\/70{color:var(--sidebar-foreground)}@supports (color:color-mix(in lab,red,red)){.text-sidebar-foreground\/70{color:color-mix(in oklab,var(--sidebar-foreground)70%,transparent)}}.text-white{color:var(--color-white)}.text-yellow-500{color:var(--color-yellow-500)}.text-yellow-800{color:var(--color-yellow-800)}.capitalize{text-transform:capitalize}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,)var(--tw-slashed-zero,)var(--tw-numeric-figure,)var(--tw-numeric-spacing,)var(--tw-numeric-fraction,)}.line-through{text-decoration-line:line-through}.underline{text-decoration-line:underline}.underline-offset-4{text-underline-offset:4px}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.opacity-0{opacity:0}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-75{opacity:.75}.opacity-90{opacity:.9}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a)}.shadow,.shadow-\[0_0_0_1px_hsl\(var\(--sidebar-border\)\)\]{box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_0_0_1px_hsl\(var\(--sidebar-border\)\)\]{--tw-shadow:0 0 0 1px var(--tw-shadow-color,hsl(var(--sidebar-border)))}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a)}.shadow-lg,.shadow-md{box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-shadow-color,#0000001a)}.shadow-none{--tw-shadow:0 0 #0000}.shadow-none,.shadow-sm{box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a),0 8px 10px -6px var(--tw-shadow-color,#0000001a)}.shadow-xl,.shadow-xs{box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xs{--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d)}.ring-0{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(0px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor)}.ring-0,.ring-2{box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-2{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor)}.ring-blue-500{--tw-ring-color:var(--color-blue-500)}.ring-primary{--tw-ring-color:var(--primary)}.ring-sidebar-ring{--tw-ring-color:var(--sidebar-ring)}.ring-offset-background{--tw-ring-offset-color:var(--background)}.outline-hidden{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.outline-hidden{outline-offset:2px;outline:2px solid #0000}}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.grayscale{--tw-grayscale:grayscale(100%)}.filter,.grayscale{filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[color\,box-shadow\]{transition-property:color,box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[left\,right\,width\]{transition-property:left,right,width;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[margin\,opacity\]{transition-property:margin,opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[width\,height\,padding\]{transition-property:width,height,padding;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[width\,height\]{transition-property:width,height;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[width\]{transition-property:width;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-shadow{transition-property:box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-none{transition-property:none}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.duration-1000{--tw-duration:1s;transition-duration:1s}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.ease-linear{--tw-ease:linear;transition-timing-function:linear}.fade-in-0{--tw-enter-opacity:0}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}.zoom-in-95{--tw-enter-scale:.95}.running{animation-play-state:running}.group-focus-within\/menu-item\:opacity-100:is(:where(.group\/menu-item):focus-within *){opacity:1}@media (hover:hover){.group-hover\/menu-item\:opacity-100:is(:where(.group\/menu-item):hover *),.group-hover\:opacity-100:is(:where(.group):hover *){opacity:1}}.group-has-data-\[collapsible\=icon\]\/sidebar-wrapper\:h-12:is(:where(.group\/sidebar-wrapper):has([data-collapsible=icon]) *){height:calc(var(--spacing)*12)}.group-has-data-\[sidebar\=menu-action\]\/menu-item\:pr-8:is(:where(.group\/menu-item):has([data-sidebar=menu-action]) *){padding-right:calc(var(--spacing)*8)}.group-data-\[collapsible\=icon\]\:-mt-8:is(:where(.group)[data-collapsible=icon] *){margin-top:calc(var(--spacing)*-8)}.group-data-\[collapsible\=icon\]\:hidden:is(:where(.group)[data-collapsible=icon] *){display:none}.group-data-\[collapsible\=icon\]\:size-8\!:is(:where(.group)[data-collapsible=icon] *){width:calc(var(--spacing)*8)!important;height:calc(var(--spacing)*8)!important}.group-data-\[collapsible\=icon\]\:w-\(--sidebar-width-icon\):is(:where(.group)[data-collapsible=icon] *){width:var(--sidebar-width-icon)}.group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)\+\(--spacing\(4\)\)\)\]:is(:where(.group)[data-collapsible=icon] *){width:calc(var(--sidebar-width-icon) + (calc(var(--spacing)*4)))}.group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)\+\(--spacing\(4\)\)\+2px\)\]:is(:where(.group)[data-collapsible=icon] *){width:calc(var(--sidebar-width-icon) + (calc(var(--spacing)*4)) + 2px)}.group-data-\[collapsible\=icon\]\:overflow-hidden:is(:where(.group)[data-collapsible=icon] *){overflow:hidden}.group-data-\[collapsible\=icon\]\:p-0\!:is(:where(.group)[data-collapsible=icon] *){padding:calc(var(--spacing)*0)!important}.group-data-\[collapsible\=icon\]\:p-2\!:is(:where(.group)[data-collapsible=icon] *){padding:calc(var(--spacing)*2)!important}.group-data-\[collapsible\=icon\]\:opacity-0:is(:where(.group)[data-collapsible=icon] *){opacity:0}.group-data-\[collapsible\=offcanvas\]\:right-\[calc\(var\(--sidebar-width\)\*-1\)\]:is(:where(.group)[data-collapsible=offcanvas] *){right:calc(var(--sidebar-width)*-1)}.group-data-\[collapsible\=offcanvas\]\:left-\[calc\(var\(--sidebar-width\)\*-1\)\]:is(:where(.group)[data-collapsible=offcanvas] *){left:calc(var(--sidebar-width)*-1)}.group-data-\[collapsible\=offcanvas\]\:w-0:is(:where(.group)[data-collapsible=offcanvas] *){width:calc(var(--spacing)*0)}.group-data-\[collapsible\=offcanvas\]\:translate-x-0:is(:where(.group)[data-collapsible=offcanvas] *){--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.group-data-\[disabled\=true\]\:pointer-events-none:is(:where(.group)[data-disabled=true] *){pointer-events:none}.group-data-\[disabled\=true\]\:opacity-50:is(:where(.group)[data-disabled=true] *){opacity:.5}.group-data-\[side\=left\]\:-right-4:is(:where(.group)[data-side=left] *){right:calc(var(--spacing)*-4)}.group-data-\[side\=left\]\:border-r:is(:where(.group)[data-side=left] *){border-right-style:var(--tw-border-style);border-right-width:1px}.group-data-\[side\=right\]\:left-0:is(:where(.group)[data-side=right] *){left:calc(var(--spacing)*0)}.group-data-\[side\=right\]\:rotate-180:is(:where(.group)[data-side=right] *){rotate:180deg}.group-data-\[side\=right\]\:border-l:is(:where(.group)[data-side=right] *){border-left-style:var(--tw-border-style);border-left-width:1px}.group-data-\[state\=open\]\:rotate-180:is(:where(.group)[data-state=open] *){rotate:180deg}.group-data-\[variant\=floating\]\:rounded-lg:is(:where(.group)[data-variant=floating] *){border-radius:var(--radius)}.group-data-\[variant\=floating\]\:border:is(:where(.group)[data-variant=floating] *){border-style:var(--tw-border-style);border-width:1px}.group-data-\[variant\=floating\]\:border-sidebar-border:is(:where(.group)[data-variant=floating] *){border-color:var(--sidebar-border)}.group-data-\[variant\=floating\]\:shadow-sm:is(:where(.group)[data-variant=floating] *){--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.group-data-\[viewport\=false\]\/navigation-menu\:top-full:is(:where(.group\/navigation-menu)[data-viewport=false] *){top:100%}.group-data-\[viewport\=false\]\/navigation-menu\:mt-1\.5:is(:where(.group\/navigation-menu)[data-viewport=false] *){margin-top:calc(var(--spacing)*1.5)}.group-data-\[viewport\=false\]\/navigation-menu\:overflow-hidden:is(:where(.group\/navigation-menu)[data-viewport=false] *){overflow:hidden}.group-data-\[viewport\=false\]\/navigation-menu\:rounded-md:is(:where(.group\/navigation-menu)[data-viewport=false] *){border-radius:calc(var(--radius) - 2px)}.group-data-\[viewport\=false\]\/navigation-menu\:border:is(:where(.group\/navigation-menu)[data-viewport=false] *){border-style:var(--tw-border-style);border-width:1px}.group-data-\[viewport\=false\]\/navigation-menu\:bg-popover:is(:where(.group\/navigation-menu)[data-viewport=false] *){background-color:var(--popover)}.group-data-\[viewport\=false\]\/navigation-menu\:text-popover-foreground:is(:where(.group\/navigation-menu)[data-viewport=false] *){color:var(--popover-foreground)}.group-data-\[viewport\=false\]\/navigation-menu\:shadow:is(:where(.group\/navigation-menu)[data-viewport=false] *){--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.group-data-\[viewport\=false\]\/navigation-menu\:duration-200:is(:where(.group\/navigation-menu)[data-viewport=false] *){--tw-duration:.2s;transition-duration:.2s}.group-\[\.destructive\]\:border-muted\/40:is(:where(.group).destructive *){border-color:var(--muted)}@supports (color:color-mix(in lab,red,red)){.group-\[\.destructive\]\:border-muted\/40:is(:where(.group).destructive *){border-color:color-mix(in oklab,var(--muted)40%,transparent)}}.group-\[\.destructive\]\:text-red-300:is(:where(.group).destructive *){color:var(--color-red-300)}@media (hover:hover){.peer-hover\/menu-button\:text-sidebar-accent-foreground:is(:where(.peer\/menu-button):hover~*){color:var(--sidebar-accent-foreground)}}.peer-disabled\:cursor-not-allowed:is(:where(.peer):disabled~*){cursor:not-allowed}.peer-disabled\:opacity-50:is(:where(.peer):disabled~*){opacity:.5}.peer-data-\[active\=true\]\/menu-button\:text-sidebar-accent-foreground:is(:where(.peer\/menu-button)[data-active=true]~*){color:var(--sidebar-accent-foreground)}.peer-data-\[size\=default\]\/menu-button\:top-1\.5:is(:where(.peer\/menu-button)[data-size=default]~*){top:calc(var(--spacing)*1.5)}.peer-data-\[size\=lg\]\/menu-button\:top-2\.5:is(:where(.peer\/menu-button)[data-size=lg]~*){top:calc(var(--spacing)*2.5)}.peer-data-\[size\=sm\]\/menu-button\:top-1:is(:where(.peer\/menu-button)[data-size=sm]~*){top:calc(var(--spacing)*1)}.selection\:bg-primary ::selection{background-color:var(--primary)}.selection\:bg-primary::selection{background-color:var(--primary)}.selection\:text-primary-foreground ::selection{color:var(--primary-foreground)}.selection\:text-primary-foreground::selection{color:var(--primary-foreground)}.file\:mr-4::file-selector-button{margin-right:calc(var(--spacing)*4)}.file\:inline-flex::file-selector-button{display:inline-flex}.file\:h-7::file-selector-button{height:calc(var(--spacing)*7)}.file\:rounded-full::file-selector-button{border-radius:3.40282e+38px}.file\:border-0::file-selector-button{border-style:var(--tw-border-style);border-width:0}.file\:bg-blue-50::file-selector-button{background-color:var(--color-blue-50)}.file\:bg-transparent::file-selector-button{background-color:#0000}.file\:px-4::file-selector-button{padding-inline:calc(var(--spacing)*4)}.file\:py-2::file-selector-button{padding-block:calc(var(--spacing)*2)}.file\:text-sm::file-selector-button{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.file\:font-medium::file-selector-button{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.file\:font-semibold::file-selector-button{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.file\:text-blue-700::file-selector-button{color:var(--color-blue-700)}.file\:text-foreground::file-selector-button{color:var(--foreground)}.placeholder\:text-muted-foreground::placeholder{color:var(--muted-foreground)}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:-inset-2:after{content:var(--tw-content);inset:calc(var(--spacing)*-2)}.after\:inset-0:after{content:var(--tw-content);inset:calc(var(--spacing)*0)}.after\:inset-y-0:after{content:var(--tw-content);inset-block:calc(var(--spacing)*0)}.after\:top-1\/2:after{content:var(--tw-content);top:50%}.after\:left-1\/2:after{content:var(--tw-content);left:50%}.after\:z-0:after{content:var(--tw-content);z-index:0}.after\:flex:after{content:var(--tw-content);display:flex}.after\:w-1:after{content:var(--tw-content);width:calc(var(--spacing)*1)}.after\:w-\[2px\]:after{content:var(--tw-content);width:2px}.after\:-translate-x-1\/2:after{content:var(--tw-content);--tw-translate-x:calc(calc(1/2*100%)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.after\:items-center:after{content:var(--tw-content);align-items:center}.after\:border-t:after{content:var(--tw-content);border-top-style:var(--tw-border-style);border-top-width:1px}.after\:border-border:after{content:var(--tw-content);border-color:var(--border)}.group-data-\[collapsible\=offcanvas\]\:after\:left-full:is(:where(.group)[data-collapsible=offcanvas] *):after{content:var(--tw-content);left:100%}.first\:rounded-l-md:first-child{border-top-left-radius:calc(var(--radius) - 2px);border-bottom-left-radius:calc(var(--radius) - 2px)}.first\:border-l:first-child{border-left-style:var(--tw-border-style);border-left-width:1px}.last\:rounded-r-md:last-child{border-top-right-radius:calc(var(--radius) - 2px);border-bottom-right-radius:calc(var(--radius) - 2px)}@media (hover:hover){.hover\:border-green-400:hover{border-color:var(--color-green-400)}.hover\:border-orange-400:hover{border-color:var(--color-orange-400)}.hover\:bg-accent:hover{background-color:var(--accent)}.hover\:bg-blue-700:hover{background-color:var(--color-blue-700)}.hover\:bg-destructive\/80:hover{background-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-destructive\/80:hover{background-color:color-mix(in oklab,var(--destructive)80%,transparent)}}.hover\:bg-destructive\/90:hover{background-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-destructive\/90:hover{background-color:color-mix(in oklab,var(--destructive)90%,transparent)}}.hover\:bg-gray-100:hover{background-color:var(--color-gray-100)}.hover\:bg-green-500\/80:hover{background-color:#00c758cc}@supports (color:color-mix(in lab,red,red)){.hover\:bg-green-500\/80:hover{background-color:color-mix(in oklab,var(--color-green-500)80%,transparent)}}.hover\:bg-input\/30:hover{background-color:var(--input)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-input\/30:hover{background-color:color-mix(in oklab,var(--input)30%,transparent)}}.hover\:bg-muted:hover,.hover\:bg-muted\/50:hover{background-color:var(--muted)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-muted\/50:hover{background-color:color-mix(in oklab,var(--muted)50%,transparent)}}.hover\:bg-primary\/80:hover{background-color:var(--primary)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-primary\/80:hover{background-color:color-mix(in oklab,var(--primary)80%,transparent)}}.hover\:bg-primary\/90:hover{background-color:var(--primary)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-primary\/90:hover{background-color:color-mix(in oklab,var(--primary)90%,transparent)}}.hover\:bg-red-500\/80:hover{background-color:#fb2c36cc}@supports (color:color-mix(in lab,red,red)){.hover\:bg-red-500\/80:hover{background-color:color-mix(in oklab,var(--color-red-500)80%,transparent)}}.hover\:bg-secondary:hover,.hover\:bg-secondary\/80:hover{background-color:var(--secondary)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-secondary\/80:hover{background-color:color-mix(in oklab,var(--secondary)80%,transparent)}}.hover\:bg-sidebar-accent:hover{background-color:var(--sidebar-accent)}.hover\:bg-transparent:hover{background-color:#0000}.hover\:bg-yellow-500\/80:hover{background-color:#edb200cc}@supports (color:color-mix(in lab,red,red)){.hover\:bg-yellow-500\/80:hover{background-color:color-mix(in oklab,var(--color-yellow-500)80%,transparent)}}.hover\:text-accent-foreground:hover{color:var(--accent-foreground)}.hover\:text-foreground:hover{color:var(--foreground)}.hover\:text-green-700:hover{color:var(--color-green-700)}.hover\:text-muted-foreground:hover{color:var(--muted-foreground)}.hover\:text-orange-700:hover{color:var(--color-orange-700)}.hover\:text-sidebar-accent-foreground:hover{color:var(--sidebar-accent-foreground)}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-100:hover{opacity:1}.hover\:shadow-\[0_0_0_1px_hsl\(var\(--sidebar-accent\)\)\]:hover{--tw-shadow:0 0 0 1px var(--tw-shadow-color,hsl(var(--sidebar-accent)))}.hover\:shadow-\[0_0_0_1px_hsl\(var\(--sidebar-accent\)\)\]:hover,.hover\:shadow-md:hover{box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:shadow-md:hover{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-shadow-color,#0000001a)}.hover\:group-data-\[collapsible\=offcanvas\]\:bg-sidebar:hover:is(:where(.group)[data-collapsible=offcanvas] *){background-color:var(--sidebar)}.group-\[\.destructive\]\:hover\:border-destructive\/30:is(:where(.group).destructive *):hover{border-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.group-\[\.destructive\]\:hover\:border-destructive\/30:is(:where(.group).destructive *):hover{border-color:color-mix(in oklab,var(--destructive)30%,transparent)}}.group-\[\.destructive\]\:hover\:bg-destructive:is(:where(.group).destructive *):hover{background-color:var(--destructive)}.group-\[\.destructive\]\:hover\:text-red-50:is(:where(.group).destructive *):hover{color:var(--color-red-50)}.hover\:file\:bg-blue-100:hover::file-selector-button{background-color:var(--color-blue-100)}.hover\:after\:bg-sidebar-border:hover:after{content:var(--tw-content);background-color:var(--sidebar-border)}}.focus\:z-10:focus{z-index:10}.focus\:bg-accent:focus{background-color:var(--accent)}.focus\:text-accent-foreground:focus{color:var(--accent-foreground)}.focus\:text-destructive:focus{color:var(--destructive)}.focus\:text-green-700:focus{color:var(--color-green-700)}.focus\:text-orange-700:focus{color:var(--color-orange-700)}.focus\:opacity-100:focus{opacity:1}.focus\:ring-2:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:ring-primary\/20:focus{--tw-ring-color:var(--primary)}@supports (color:color-mix(in lab,red,red)){.focus\:ring-primary\/20:focus{--tw-ring-color:color-mix(in oklab,var(--primary)20%,transparent)}}.focus\:ring-ring:focus{--tw-ring-color:var(--ring)}.focus\:ring-offset-2:focus{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus\:outline-hidden:focus{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.focus\:outline-hidden:focus{outline-offset:2px;outline:2px solid #0000}}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.group-\[\.destructive\]\:focus\:ring-destructive:is(:where(.group).destructive *):focus{--tw-ring-color:var(--destructive)}.group-\[\.destructive\]\:focus\:ring-red-400:is(:where(.group).destructive *):focus{--tw-ring-color:var(--color-red-400)}.group-\[\.destructive\]\:focus\:ring-offset-red-600:is(:where(.group).destructive *):focus{--tw-ring-offset-color:var(--color-red-600)}.focus-visible\:z-10:focus-visible{z-index:10}.focus-visible\:border:focus-visible{border-style:var(--tw-border-style);border-width:1px}.focus-visible\:border-ring:focus-visible{border-color:var(--ring)}.focus-visible\:bg-background:focus-visible{background-color:var(--background)}.focus-visible\:ring-1:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\:ring-\[3px\]:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(3px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\:ring-destructive\/20:focus-visible{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.focus-visible\:ring-destructive\/20:focus-visible{--tw-ring-color:color-mix(in oklab,var(--destructive)20%,transparent)}}.focus-visible\:ring-ring:focus-visible,.focus-visible\:ring-ring\/50:focus-visible{--tw-ring-color:var(--ring)}@supports (color:color-mix(in lab,red,red)){.focus-visible\:ring-ring\/50:focus-visible{--tw-ring-color:color-mix(in oklab,var(--ring)50%,transparent)}}.focus-visible\:ring-offset-1:focus-visible{--tw-ring-offset-width:1px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus-visible\:outline-hidden:focus-visible{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.focus-visible\:outline-hidden:focus-visible{outline-offset:2px;outline:2px solid #0000}}.focus-visible\:outline-1:focus-visible{outline-style:var(--tw-outline-style);outline-width:1px}.focus-visible\:outline-ring:focus-visible{outline-color:var(--ring)}.active\:bg-sidebar-accent:active{background-color:var(--sidebar-accent)}.active\:text-sidebar-accent-foreground:active{color:var(--sidebar-accent-foreground)}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}:where([data-side=left]) .in-data-\[side\=left\]\:cursor-w-resize{cursor:w-resize}:where([data-side=right]) .in-data-\[side\=right\]\:cursor-e-resize{cursor:e-resize}.has-disabled\:opacity-50:has(:disabled){opacity:.5}.has-data-\[slot\=card-action\]\:grid-cols-\[1fr_auto\]:has([data-slot=card-action]){grid-template-columns:1fr auto}.has-data-\[variant\=inset\]\:bg-sidebar:has([data-variant=inset]){background-color:var(--sidebar)}.has-\[\>svg\]\:grid-cols-\[calc\(var\(--spacing\)\*4\)_1fr\]:has(>svg){grid-template-columns:calc(var(--spacing)*4)1fr}.has-\[\>svg\]\:gap-x-3:has(>svg){column-gap:calc(var(--spacing)*3)}.has-\[\>svg\]\:px-2\.5:has(>svg){padding-inline:calc(var(--spacing)*2.5)}.has-\[\>svg\]\:px-3:has(>svg){padding-inline:calc(var(--spacing)*3)}.has-\[\>svg\]\:px-4:has(>svg){padding-inline:calc(var(--spacing)*4)}.aria-disabled\:pointer-events-none[aria-disabled=true]{pointer-events:none}.aria-disabled\:opacity-50[aria-disabled=true]{opacity:.5}.aria-invalid\:border-destructive[aria-invalid=true]{border-color:var(--destructive)}.aria-invalid\:ring-destructive\/20[aria-invalid=true]{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.aria-invalid\:ring-destructive\/20[aria-invalid=true]{--tw-ring-color:color-mix(in oklab,var(--destructive)20%,transparent)}}.data-\[active\=true\]\:z-10[data-active=true]{z-index:10}.data-\[active\=true\]\:border-ring[data-active=true]{border-color:var(--ring)}.data-\[active\=true\]\:bg-accent\/50[data-active=true]{background-color:var(--accent)}@supports (color:color-mix(in lab,red,red)){.data-\[active\=true\]\:bg-accent\/50[data-active=true]{background-color:color-mix(in oklab,var(--accent)50%,transparent)}}.data-\[active\=true\]\:bg-sidebar-accent[data-active=true]{background-color:var(--sidebar-accent)}.data-\[active\=true\]\:font-medium[data-active=true]{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.data-\[active\=true\]\:text-accent-foreground[data-active=true]{color:var(--accent-foreground)}.data-\[active\=true\]\:text-sidebar-accent-foreground[data-active=true]{color:var(--sidebar-accent-foreground)}.data-\[active\=true\]\:ring-\[3px\][data-active=true]{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(3px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.data-\[active\=true\]\:ring-ring\/50[data-active=true]{--tw-ring-color:var(--ring)}@supports (color:color-mix(in lab,red,red)){.data-\[active\=true\]\:ring-ring\/50[data-active=true]{--tw-ring-color:color-mix(in oklab,var(--ring)50%,transparent)}}@media (hover:hover){.data-\[active\=true\]\:hover\:bg-accent[data-active=true]:hover{background-color:var(--accent)}}.data-\[active\=true\]\:focus\:bg-accent[data-active=true]:focus{background-color:var(--accent)}.data-\[active\=true\]\:aria-invalid\:border-destructive[data-active=true][aria-invalid=true]{border-color:var(--destructive)}.data-\[active\=true\]\:aria-invalid\:ring-destructive\/20[data-active=true][aria-invalid=true]{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.data-\[active\=true\]\:aria-invalid\:ring-destructive\/20[data-active=true][aria-invalid=true]{--tw-ring-color:color-mix(in oklab,var(--destructive)20%,transparent)}}.data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}.data-\[disabled\=true\]\:pointer-events-none[data-disabled=true]{pointer-events:none}.data-\[disabled\=true\]\:opacity-50[data-disabled=true]{opacity:.5}.data-\[dragging\=true\]\:z-10[data-dragging=true]{z-index:10}.data-\[dragging\=true\]\:opacity-80[data-dragging=true]{opacity:.8}.data-\[error\=true\]\:text-destructive[data-error=true]{color:var(--destructive)}.data-\[inset\]\:pl-8[data-inset]{padding-left:calc(var(--spacing)*8)}.data-\[motion\=from-end\]\:slide-in-from-right-52[data-motion=from-end]{--tw-enter-translate-x:calc(52*var(--spacing))}.data-\[motion\=from-start\]\:slide-in-from-left-52[data-motion=from-start]{--tw-enter-translate-x:calc(52*var(--spacing)*-1)}.data-\[motion\=to-end\]\:slide-out-to-right-52[data-motion=to-end]{--tw-exit-translate-x:calc(52*var(--spacing))}.data-\[motion\=to-start\]\:slide-out-to-left-52[data-motion=to-start]{--tw-exit-translate-x:calc(52*var(--spacing)*-1)}.data-\[motion\^\=from-\]\:animate-in[data-motion^=from-]{animation:enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.data-\[motion\^\=from-\]\:fade-in[data-motion^=from-]{--tw-enter-opacity:0}.data-\[motion\^\=to-\]\:animate-out[data-motion^=to-]{animation:exit var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.data-\[motion\^\=to-\]\:fade-out[data-motion^=to-]{--tw-exit-opacity:0}.data-\[orientation\=horizontal\]\:h-px[data-orientation=horizontal]{height:1px}.data-\[orientation\=horizontal\]\:w-full[data-orientation=horizontal]{width:100%}.data-\[orientation\=vertical\]\:h-4[data-orientation=vertical]{height:calc(var(--spacing)*4)}.data-\[orientation\=vertical\]\:h-full[data-orientation=vertical]{height:100%}.data-\[orientation\=vertical\]\:w-px[data-orientation=vertical]{width:1px}.data-\[panel-group-direction\=vertical\]\:h-px[data-panel-group-direction=vertical]{height:1px}.data-\[panel-group-direction\=vertical\]\:w-full[data-panel-group-direction=vertical]{width:100%}.data-\[panel-group-direction\=vertical\]\:flex-col[data-panel-group-direction=vertical]{flex-direction:column}.data-\[panel-group-direction\=vertical\]\:after\:left-0[data-panel-group-direction=vertical]:after{content:var(--tw-content);left:calc(var(--spacing)*0)}.data-\[panel-group-direction\=vertical\]\:after\:h-1[data-panel-group-direction=vertical]:after{content:var(--tw-content);height:calc(var(--spacing)*1)}.data-\[panel-group-direction\=vertical\]\:after\:w-full[data-panel-group-direction=vertical]:after{content:var(--tw-content);width:100%}.data-\[panel-group-direction\=vertical\]\:after\:translate-x-0[data-panel-group-direction=vertical]:after{content:var(--tw-content);--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[panel-group-direction\=vertical\]\:after\:-translate-y-1\/2[data-panel-group-direction=vertical]:after{content:var(--tw-content);--tw-translate-y:calc(calc(1/2*100%)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[placeholder\]\:text-muted-foreground[data-placeholder]{color:var(--muted-foreground)}.data-\[selected\=true\]\:bg-accent[data-selected=true]{background-color:var(--accent)}.data-\[selected\=true\]\:text-accent-foreground[data-selected=true]{color:var(--accent-foreground)}.data-\[side\=bottom\]\:translate-y-1[data-side=bottom]{--tw-translate-y:calc(var(--spacing)*1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=bottom\]\:slide-in-from-top-2[data-side=bottom]{--tw-enter-translate-y:calc(2*var(--spacing)*-1)}.data-\[side\=left\]\:-translate-x-1[data-side=left]{--tw-translate-x:calc(var(--spacing)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=left\]\:slide-in-from-right-2[data-side=left]{--tw-enter-translate-x:calc(2*var(--spacing))}.data-\[side\=right\]\:translate-x-1[data-side=right]{--tw-translate-x:calc(var(--spacing)*1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=right\]\:slide-in-from-left-2[data-side=right]{--tw-enter-translate-x:calc(2*var(--spacing)*-1)}.data-\[side\=top\]\:-translate-y-1[data-side=top]{--tw-translate-y:calc(var(--spacing)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=top\]\:slide-in-from-bottom-2[data-side=top]{--tw-enter-translate-y:calc(2*var(--spacing))}.data-\[size\=default\]\:h-9[data-size=default]{height:calc(var(--spacing)*9)}.data-\[size\=sm\]\:h-8[data-size=sm]{height:calc(var(--spacing)*8)}:is(.\*\:data-\[slot\=alert-description\]\:text-destructive\/90>*)[data-slot=alert-description]{color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){:is(.\*\:data-\[slot\=alert-description\]\:text-destructive\/90>*)[data-slot=alert-description]{color:color-mix(in oklab,var(--destructive)90%,transparent)}}:is(.\*\:data-\[slot\=card\]\:bg-gradient-to-t>*)[data-slot=card]{--tw-gradient-position:to top in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}:is(.\*\:data-\[slot\=card\]\:from-primary\/5>*)[data-slot=card]{--tw-gradient-from:var(--primary)}@supports (color:color-mix(in lab,red,red)){:is(.\*\:data-\[slot\=card\]\:from-primary\/5>*)[data-slot=card]{--tw-gradient-from:color-mix(in oklab,var(--primary)5%,transparent)}}:is(.\*\:data-\[slot\=card\]\:from-primary\/5>*)[data-slot=card]{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}:is(.\*\:data-\[slot\=card\]\:to-card>*)[data-slot=card]{--tw-gradient-to:var(--card);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}:is(.\*\:data-\[slot\=card\]\:shadow-xs>*)[data-slot=card]{--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}:is(.\*\*\:data-\[slot\=command-input-wrapper\]\:h-12 *)[data-slot=command-input-wrapper]{height:calc(var(--spacing)*12)}:is(.\*\*\:data-\[slot\=navigation-menu-link\]\:focus\:ring-0 *)[data-slot=navigation-menu-link]:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(0px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}:is(.\*\*\:data-\[slot\=navigation-menu-link\]\:focus\:outline-none *)[data-slot=navigation-menu-link]:focus{--tw-outline-style:none;outline-style:none}:is(.\*\:data-\[slot\=select-value\]\:line-clamp-1>*)[data-slot=select-value]{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}:is(.\*\:data-\[slot\=select-value\]\:flex>*)[data-slot=select-value]{display:flex}:is(.\*\:data-\[slot\=select-value\]\:items-center>*)[data-slot=select-value]{align-items:center}:is(.\*\:data-\[slot\=select-value\]\:gap-2>*)[data-slot=select-value]{gap:calc(var(--spacing)*2)}.data-\[slot\=sidebar-menu-button\]\:\!p-1\.5[data-slot=sidebar-menu-button]{padding:calc(var(--spacing)*1.5)!important}:is(.\*\*\:data-\[slot\=table-cell\]\:first\:w-8 *)[data-slot=table-cell]:first-child{width:calc(var(--spacing)*8)}.data-\[state\=active\]\:bg-background[data-state=active]{background-color:var(--background)}.data-\[state\=active\]\:shadow-sm[data-state=active]{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.data-\[state\=checked\]\:translate-x-\[calc\(100\%-2px\)\][data-state=checked]{--tw-translate-x:calc(100% - 2px);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[state\=checked\]\:border-primary[data-state=checked]{border-color:var(--primary)}.data-\[state\=checked\]\:bg-primary[data-state=checked]{background-color:var(--primary)}.data-\[state\=checked\]\:text-primary-foreground[data-state=checked]{color:var(--primary-foreground)}.data-\[state\=closed\]\:animate-out[data-state=closed]{animation:exit var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.data-\[state\=closed\]\:duration-300[data-state=closed]{--tw-duration:.3s;transition-duration:.3s}.data-\[state\=closed\]\:fade-out-0[data-state=closed]{--tw-exit-opacity:0}.data-\[state\=closed\]\:fade-out-80[data-state=closed]{--tw-exit-opacity:.8}.data-\[state\=closed\]\:zoom-out-95[data-state=closed]{--tw-exit-scale:.95}.data-\[state\=closed\]\:slide-out-to-bottom[data-state=closed]{--tw-exit-translate-y:100%}.data-\[state\=closed\]\:slide-out-to-left[data-state=closed]{--tw-exit-translate-x:-100%}.data-\[state\=closed\]\:slide-out-to-right[data-state=closed]{--tw-exit-translate-x:100%}.data-\[state\=closed\]\:slide-out-to-right-full[data-state=closed]{--tw-exit-translate-x:calc(1*100%)}.data-\[state\=closed\]\:slide-out-to-top[data-state=closed]{--tw-exit-translate-y:-100%}.group-data-\[viewport\=false\]\/navigation-menu\:data-\[state\=closed\]\:animate-out:is(:where(.group\/navigation-menu)[data-viewport=false] *)[data-state=closed]{animation:exit var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.group-data-\[viewport\=false\]\/navigation-menu\:data-\[state\=closed\]\:fade-out-0:is(:where(.group\/navigation-menu)[data-viewport=false] *)[data-state=closed]{--tw-exit-opacity:0}.group-data-\[viewport\=false\]\/navigation-menu\:data-\[state\=closed\]\:zoom-out-95:is(:where(.group\/navigation-menu)[data-viewport=false] *)[data-state=closed]{--tw-exit-scale:.95}.data-\[state\=hidden\]\:animate-out[data-state=hidden]{animation:exit var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.data-\[state\=hidden\]\:fade-out[data-state=hidden]{--tw-exit-opacity:0}.data-\[state\=on\]\:bg-accent[data-state=on]{background-color:var(--accent)}.data-\[state\=on\]\:text-accent-foreground[data-state=on]{color:var(--accent-foreground)}.data-\[state\=open\]\:animate-in[data-state=open]{animation:enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.data-\[state\=open\]\:bg-accent[data-state=open],.data-\[state\=open\]\:bg-accent\/50[data-state=open]{background-color:var(--accent)}@supports (color:color-mix(in lab,red,red)){.data-\[state\=open\]\:bg-accent\/50[data-state=open]{background-color:color-mix(in oklab,var(--accent)50%,transparent)}}.data-\[state\=open\]\:bg-muted[data-state=open]{background-color:var(--muted)}.data-\[state\=open\]\:bg-secondary[data-state=open]{background-color:var(--secondary)}.data-\[state\=open\]\:bg-sidebar-accent[data-state=open]{background-color:var(--sidebar-accent)}.data-\[state\=open\]\:text-accent-foreground[data-state=open]{color:var(--accent-foreground)}.data-\[state\=open\]\:text-muted-foreground[data-state=open]{color:var(--muted-foreground)}.data-\[state\=open\]\:text-sidebar-accent-foreground[data-state=open]{color:var(--sidebar-accent-foreground)}.data-\[state\=open\]\:opacity-100[data-state=open]{opacity:1}.data-\[state\=open\]\:duration-500[data-state=open]{--tw-duration:.5s;transition-duration:.5s}.data-\[state\=open\]\:fade-in-0[data-state=open]{--tw-enter-opacity:0}.data-\[state\=open\]\:zoom-in-90[data-state=open]{--tw-enter-scale:.9}.data-\[state\=open\]\:zoom-in-95[data-state=open]{--tw-enter-scale:.95}.data-\[state\=open\]\:slide-in-from-bottom[data-state=open]{--tw-enter-translate-y:100%}.data-\[state\=open\]\:slide-in-from-left[data-state=open]{--tw-enter-translate-x:-100%}.data-\[state\=open\]\:slide-in-from-right[data-state=open]{--tw-enter-translate-x:100%}.data-\[state\=open\]\:slide-in-from-top[data-state=open]{--tw-enter-translate-y:-100%}.data-\[state\=open\]\:slide-in-from-top-full[data-state=open]{--tw-enter-translate-y:calc(1*-100%)}.group-data-\[viewport\=false\]\/navigation-menu\:data-\[state\=open\]\:animate-in:is(:where(.group\/navigation-menu)[data-viewport=false] *)[data-state=open]{animation:enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.group-data-\[viewport\=false\]\/navigation-menu\:data-\[state\=open\]\:fade-in-0:is(:where(.group\/navigation-menu)[data-viewport=false] *)[data-state=open]{--tw-enter-opacity:0}.group-data-\[viewport\=false\]\/navigation-menu\:data-\[state\=open\]\:zoom-in-95:is(:where(.group\/navigation-menu)[data-viewport=false] *)[data-state=open]{--tw-enter-scale:.95}@media (hover:hover){.data-\[state\=open\]\:hover\:bg-accent[data-state=open]:hover{background-color:var(--accent)}.data-\[state\=open\]\:hover\:bg-sidebar-accent[data-state=open]:hover{background-color:var(--sidebar-accent)}.data-\[state\=open\]\:hover\:text-sidebar-accent-foreground[data-state=open]:hover{color:var(--sidebar-accent-foreground)}}.data-\[state\=open\]\:focus\:bg-accent[data-state=open]:focus{background-color:var(--accent)}.data-\[state\=selected\]\:bg-muted[data-state=selected]{background-color:var(--muted)}.data-\[state\=unchecked\]\:translate-x-0[data-state=unchecked]{--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[state\=unchecked\]\:bg-input[data-state=unchecked]{background-color:var(--input)}.data-\[state\=visible\]\:animate-in[data-state=visible]{animation:enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.data-\[state\=visible\]\:fade-in[data-state=visible]{--tw-enter-opacity:0}.data-\[swipe\=cancel\]\:translate-x-0[data-swipe=cancel]{--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[swipe\=end\]\:translate-x-\[var\(--radix-toast-swipe-end-x\)\][data-swipe=end]{--tw-translate-x:var(--radix-toast-swipe-end-x);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[swipe\=end\]\:animate-out[data-swipe=end]{animation:exit var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.data-\[swipe\=move\]\:translate-x-\[var\(--radix-toast-swipe-move-x\)\][data-swipe=move]{--tw-translate-x:var(--radix-toast-swipe-move-x);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[swipe\=move\]\:transition-none[data-swipe=move]{transition-property:none}.data-\[variant\=destructive\]\:text-destructive[data-variant=destructive]{color:var(--destructive)}.data-\[variant\=destructive\]\:focus\:bg-destructive\/10[data-variant=destructive]:focus{background-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.data-\[variant\=destructive\]\:focus\:bg-destructive\/10[data-variant=destructive]:focus{background-color:color-mix(in oklab,var(--destructive)10%,transparent)}}.data-\[variant\=destructive\]\:focus\:text-destructive[data-variant=destructive]:focus{color:var(--destructive)}.data-\[variant\=outline\]\:border-l-0[data-variant=outline]{border-left-style:var(--tw-border-style);border-left-width:0}.data-\[variant\=outline\]\:shadow-xs[data-variant=outline]{--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.data-\[variant\=outline\]\:first\:border-l[data-variant=outline]:first-child{border-left-style:var(--tw-border-style);border-left-width:1px}@media (min-width:40rem){.sm\:top-auto{top:auto}.sm\:right-0{right:calc(var(--spacing)*0)}.sm\:bottom-0{bottom:calc(var(--spacing)*0)}.sm\:flex{display:flex}.sm\:inline{display:inline}.sm\:w-\[180px\]{width:180px}.sm\:max-w-\[500px\]{max-width:500px}.sm\:max-w-\[600px\]{max-width:600px}.sm\:max-w-\[700px\]{max-width:700px}.sm\:max-w-lg{max-width:var(--container-lg)}.sm\:max-w-md{max-width:var(--container-md)}.sm\:max-w-sm{max-width:var(--container-sm)}.sm\:max-w-xl{max-width:var(--container-xl)}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:flex-col{flex-direction:column}.sm\:flex-row{flex-direction:row}.sm\:items-center{align-items:center}.sm\:justify-end{justify-content:flex-end}.sm\:gap-3{gap:calc(var(--spacing)*3)}:where(.sm\:space-x-0>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*0)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*0)*calc(1 - var(--tw-space-x-reverse)))}.sm\:px-6{padding-inline:calc(var(--spacing)*6)}.sm\:pt-6{padding-top:calc(var(--spacing)*6)}.sm\:text-left{text-align:left}.data-\[state\=open\]\:sm\:slide-in-from-bottom-full[data-state=open]{--tw-enter-translate-y:calc(1*100%)}}@media (min-width:48rem){.md\:absolute{position:absolute}.md\:block{display:block}.md\:flex{display:flex}.md\:w-\[var\(--radix-navigation-menu-viewport-width\)\]{width:var(--radix-navigation-menu-viewport-width)}.md\:w-auto{width:auto}.md\:max-w-\[420px\]{max-width:420px}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:gap-8{gap:calc(var(--spacing)*8)}.md\:p-8{padding:calc(var(--spacing)*8)}.md\:px-6{padding-inline:calc(var(--spacing)*6)}.md\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.md\:opacity-0{opacity:0}.md\:peer-data-\[variant\=inset\]\:m-2:is(:where(.peer)[data-variant=inset]~*){margin:calc(var(--spacing)*2)}.md\:peer-data-\[variant\=inset\]\:ml-0:is(:where(.peer)[data-variant=inset]~*){margin-left:calc(var(--spacing)*0)}.md\:peer-data-\[variant\=inset\]\:rounded-xl:is(:where(.peer)[data-variant=inset]~*){border-radius:calc(var(--radius) + 4px)}.md\:peer-data-\[variant\=inset\]\:shadow-sm:is(:where(.peer)[data-variant=inset]~*){--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.md\:peer-data-\[variant\=inset\]\:peer-data-\[state\=collapsed\]\:ml-2:is(:where(.peer)[data-variant=inset]~*):is(:where(.peer)[data-state=collapsed]~*){margin-left:calc(var(--spacing)*2)}.md\:after\:hidden:after{content:var(--tw-content);display:none}}@media (min-width:64rem){.lg\:ml-0{margin-left:calc(var(--spacing)*0)}.lg\:flex{display:flex}.lg\:hidden{display:none}.lg\:inline{display:inline}.lg\:w-fit{width:fit-content}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:gap-2{gap:calc(var(--spacing)*2)}.lg\:px-6{padding-inline:calc(var(--spacing)*6)}.lg\:px-8{padding-inline:calc(var(--spacing)*8)}}@container card (min-width:250px){.\@\[250px\]\/card\:text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}}@container card (min-width:540px){.\@\[540px\]\/card\:block{display:block}.\@\[540px\]\/card\:hidden{display:none}}@container card (min-width:767px){.\@\[767px\]\/card\:flex{display:flex}.\@\[767px\]\/card\:hidden{display:none}}@container main (min-width:36rem){.\@xl\/main\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}@container main (min-width:56rem){.\@4xl\/main\:flex{display:flex}.\@4xl\/main\:hidden{display:none}}@container main (min-width:64rem){.\@5xl\/main\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}.dark\:border-green-800:is(.dark *){border-color:var(--color-green-800)}.dark\:border-input:is(.dark *){border-color:var(--input)}.dark\:bg-destructive\/60:is(.dark *){background-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.dark\:bg-destructive\/60:is(.dark *){background-color:color-mix(in oklab,var(--destructive)60%,transparent)}}.dark\:bg-green-950:is(.dark *){background-color:var(--color-green-950)}.dark\:bg-input\/30:is(.dark *){background-color:var(--input)}@supports (color:color-mix(in lab,red,red)){.dark\:bg-input\/30:is(.dark *){background-color:color-mix(in oklab,var(--input)30%,transparent)}}.dark\:text-green-100:is(.dark *){color:var(--color-green-100)}.dark\:text-green-400:is(.dark *){color:var(--color-green-400)}.dark\:text-muted-foreground:is(.dark *){color:var(--muted-foreground)}@media (hover:hover){.dark\:hover\:bg-accent\/50:is(.dark *):hover{background-color:var(--accent)}@supports (color:color-mix(in lab,red,red)){.dark\:hover\:bg-accent\/50:is(.dark *):hover{background-color:color-mix(in oklab,var(--accent)50%,transparent)}}.dark\:hover\:bg-input\/50:is(.dark *):hover{background-color:var(--input)}@supports (color:color-mix(in lab,red,red)){.dark\:hover\:bg-input\/50:is(.dark *):hover{background-color:color-mix(in oklab,var(--input)50%,transparent)}}}.dark\:focus-visible\:ring-destructive\/40:is(.dark *):focus-visible{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.dark\:focus-visible\:ring-destructive\/40:is(.dark *):focus-visible{--tw-ring-color:color-mix(in oklab,var(--destructive)40%,transparent)}}.dark\:aria-invalid\:ring-destructive\/40:is(.dark *)[aria-invalid=true]{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.dark\:aria-invalid\:ring-destructive\/40:is(.dark *)[aria-invalid=true]{--tw-ring-color:color-mix(in oklab,var(--destructive)40%,transparent)}}.dark\:data-\[active\=true\]\:aria-invalid\:ring-destructive\/40:is(.dark *)[data-active=true][aria-invalid=true]{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.dark\:data-\[active\=true\]\:aria-invalid\:ring-destructive\/40:is(.dark *)[data-active=true][aria-invalid=true]{--tw-ring-color:color-mix(in oklab,var(--destructive)40%,transparent)}}:is(.dark\:\*\:data-\[slot\=card\]\:bg-card:is(.dark *)>*)[data-slot=card]{background-color:var(--card)}.dark\:data-\[state\=active\]\:border-input:is(.dark *)[data-state=active]{border-color:var(--input)}.dark\:data-\[state\=active\]\:bg-input\/30:is(.dark *)[data-state=active]{background-color:var(--input)}@supports (color:color-mix(in lab,red,red)){.dark\:data-\[state\=active\]\:bg-input\/30:is(.dark *)[data-state=active]{background-color:color-mix(in oklab,var(--input)30%,transparent)}}.dark\:data-\[state\=active\]\:text-foreground:is(.dark *)[data-state=active]{color:var(--foreground)}.dark\:data-\[state\=checked\]\:bg-primary:is(.dark *)[data-state=checked]{background-color:var(--primary)}.dark\:data-\[state\=checked\]\:bg-primary-foreground:is(.dark *)[data-state=checked]{background-color:var(--primary-foreground)}.dark\:data-\[state\=unchecked\]\:bg-foreground:is(.dark *)[data-state=unchecked]{background-color:var(--foreground)}.dark\:data-\[state\=unchecked\]\:bg-input\/80:is(.dark *)[data-state=unchecked]{background-color:var(--input)}@supports (color:color-mix(in lab,red,red)){.dark\:data-\[state\=unchecked\]\:bg-input\/80:is(.dark *)[data-state=unchecked]{background-color:color-mix(in oklab,var(--input)80%,transparent)}}.dark\:data-\[variant\=destructive\]\:focus\:bg-destructive\/20:is(.dark *)[data-variant=destructive]:focus{background-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.dark\:data-\[variant\=destructive\]\:focus\:bg-destructive\/20:is(.dark *)[data-variant=destructive]:focus{background-color:color-mix(in oklab,var(--destructive)20%,transparent)}}.\[\&_\.recharts-cartesian-axis-tick_text\]\:fill-muted-foreground .recharts-cartesian-axis-tick text{fill:var(--muted-foreground)}.\[\&_\.recharts-cartesian-grid_line\[stroke\=\'\#ccc\'\]\]\:stroke-border\/50 .recharts-cartesian-grid line[stroke=\#ccc]{stroke:var(--border)}@supports (color:color-mix(in lab,red,red)){.\[\&_\.recharts-cartesian-grid_line\[stroke\=\'\#ccc\'\]\]\:stroke-border\/50 .recharts-cartesian-grid line[stroke=\#ccc]{stroke:color-mix(in oklab,var(--border)50%,transparent)}}.\[\&_\.recharts-curve\.recharts-tooltip-cursor\]\:stroke-border .recharts-curve.recharts-tooltip-cursor{stroke:var(--border)}.\[\&_\.recharts-dot\[stroke\=\'\#fff\'\]\]\:stroke-transparent .recharts-dot[stroke=\#fff]{stroke:#0000}.\[\&_\.recharts-layer\]\:outline-hidden .recharts-layer{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.\[\&_\.recharts-layer\]\:outline-hidden .recharts-layer{outline-offset:2px;outline:2px solid #0000}}.\[\&_\.recharts-polar-grid_\[stroke\=\'\#ccc\'\]\]\:stroke-border .recharts-polar-grid [stroke=\#ccc]{stroke:var(--border)}.\[\&_\.recharts-radial-bar-background-sector\]\:fill-muted .recharts-radial-bar-background-sector,.\[\&_\.recharts-rectangle\.recharts-tooltip-cursor\]\:fill-muted .recharts-rectangle.recharts-tooltip-cursor{fill:var(--muted)}.\[\&_\.recharts-reference-line_\[stroke\=\'\#ccc\'\]\]\:stroke-border .recharts-reference-line [stroke=\#ccc]{stroke:var(--border)}.\[\&_\.recharts-sector\]\:outline-hidden .recharts-sector{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.\[\&_\.recharts-sector\]\:outline-hidden .recharts-sector{outline-offset:2px;outline:2px solid #0000}}.\[\&_\.recharts-sector\[stroke\=\'\#fff\'\]\]\:stroke-transparent .recharts-sector[stroke=\#fff]{stroke:#0000}.\[\&_\.recharts-surface\]\:outline-hidden .recharts-surface{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.\[\&_\.recharts-surface\]\:outline-hidden .recharts-surface{outline-offset:2px;outline:2px solid #0000}}.\[\&_\[cmdk-group-heading\]\]\:px-2 [cmdk-group-heading]{padding-inline:calc(var(--spacing)*2)}.\[\&_\[cmdk-group-heading\]\]\:py-1\.5 [cmdk-group-heading]{padding-block:calc(var(--spacing)*1.5)}.\[\&_\[cmdk-group-heading\]\]\:text-xs [cmdk-group-heading]{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.\[\&_\[cmdk-group-heading\]\]\:font-medium [cmdk-group-heading]{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.\[\&_\[cmdk-group-heading\]\]\:text-muted-foreground [cmdk-group-heading]{color:var(--muted-foreground)}.\[\&_\[cmdk-group\]\]\:px-2 [cmdk-group]{padding-inline:calc(var(--spacing)*2)}.\[\&_\[cmdk-group\]\:not\(\[hidden\]\)_\~\[cmdk-group\]\]\:pt-0 [cmdk-group]:not([hidden])~[cmdk-group]{padding-top:calc(var(--spacing)*0)}.\[\&_\[cmdk-input-wrapper\]_svg\]\:h-5 [cmdk-input-wrapper] svg{height:calc(var(--spacing)*5)}.\[\&_\[cmdk-input-wrapper\]_svg\]\:w-5 [cmdk-input-wrapper] svg{width:calc(var(--spacing)*5)}.\[\&_\[cmdk-input\]\]\:h-12 [cmdk-input]{height:calc(var(--spacing)*12)}.\[\&_\[cmdk-item\]\]\:px-2 [cmdk-item]{padding-inline:calc(var(--spacing)*2)}.\[\&_\[cmdk-item\]\]\:py-3 [cmdk-item]{padding-block:calc(var(--spacing)*3)}.\[\&_\[cmdk-item\]_svg\]\:h-5 [cmdk-item] svg{height:calc(var(--spacing)*5)}.\[\&_\[cmdk-item\]_svg\]\:w-5 [cmdk-item] svg{width:calc(var(--spacing)*5)}.\[\&_a\]\:underline a{text-decoration-line:underline}.\[\&_a\]\:underline-offset-4 a{text-underline-offset:4px}@media (hover:hover){.hover\:\[\&_a\]\:text-primary:hover a{color:var(--primary)}}.\[\&_p\]\:leading-relaxed p{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:size-3 svg{width:calc(var(--spacing)*3);height:calc(var(--spacing)*3)}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}.\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-4 svg:not([class*=size-]){width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.\[\&_svg\:not\(\[class\*\=\'text-\'\]\)\]\:text-muted-foreground svg:not([class*=text-]){color:var(--muted-foreground)}.\[\&_tr\]\:border-b tr{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.\[\&_tr\:last-child\]\:border-0 tr:last-child{border-style:var(--tw-border-style);border-width:0}.\[\&\:has\(\[role\=checkbox\]\)\]\:pr-0:has([role=checkbox]){padding-right:calc(var(--spacing)*0)}.\[\.border-b\]\:pb-6.border-b{padding-bottom:calc(var(--spacing)*6)}.\[\.border-t\]\:pt-6.border-t{padding-top:calc(var(--spacing)*6)}:is(.\*\:\[span\]\:last\:flex>*):is(span):last-child{display:flex}:is(.\*\:\[span\]\:last\:items-center>*):is(span):last-child{align-items:center}:is(.\*\:\[span\]\:last\:gap-2>*):is(span):last-child{gap:calc(var(--spacing)*2)}:is(.data-\[variant\=destructive\]\:\*\:\[svg\]\:\!text-destructive[data-variant=destructive]>*):is(svg){color:var(--destructive)!important}.\[\&\>\[role\=checkbox\]\]\:translate-y-\[2px\]>[role=checkbox]{--tw-translate-y:2px;translate:var(--tw-translate-x)var(--tw-translate-y)}.\[\&\>button\]\:hidden>button{display:none}.\[\&\>span\:last-child\]\:truncate>span:last-child{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.\[\&\>svg\]\:size-4>svg{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.\[\&\>svg\]\:h-2\.5>svg{height:calc(var(--spacing)*2.5)}.\[\&\>svg\]\:h-3>svg{height:calc(var(--spacing)*3)}.\[\&\>svg\]\:w-2\.5>svg{width:calc(var(--spacing)*2.5)}.\[\&\>svg\]\:w-3>svg{width:calc(var(--spacing)*3)}.\[\&\>svg\]\:shrink-0>svg{flex-shrink:0}.\[\&\>svg\]\:translate-y-0\.5>svg{--tw-translate-y:calc(var(--spacing)*.5);translate:var(--tw-translate-x)var(--tw-translate-y)}.\[\&\>svg\]\:text-current>svg{color:currentColor}.\[\&\>svg\]\:text-muted-foreground>svg{color:var(--muted-foreground)}.\[\&\>svg\]\:text-sidebar-accent-foreground>svg{color:var(--sidebar-accent-foreground)}.\[\&\>tr\]\:last\:border-b-0>tr:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.\[\&\[data-panel-group-direction\=vertical\]\>div\]\:rotate-90[data-panel-group-direction=vertical]>div{rotate:90deg}[data-side=left][data-collapsible=offcanvas] .\[\[data-side\=left\]\[data-collapsible\=offcanvas\]_\&\]\:-right-2{right:calc(var(--spacing)*-2)}[data-side=left][data-state=collapsed] .\[\[data-side\=left\]\[data-state\=collapsed\]_\&\]\:cursor-e-resize{cursor:e-resize}[data-side=right][data-collapsible=offcanvas] .\[\[data-side\=right\]\[data-collapsible\=offcanvas\]_\&\]\:-left-2{left:calc(var(--spacing)*-2)}[data-side=right][data-state=collapsed] .\[\[data-side\=right\]\[data-state\=collapsed\]_\&\]\:cursor-w-resize{cursor:w-resize}}@property --tw-animation-delay{syntax:"*";inherits:false;initial-value:0s}@property --tw-animation-direction{syntax:"*";inherits:false;initial-value:normal}@property --tw-animation-duration{syntax:"*";inherits:false}@property --tw-animation-fill-mode{syntax:"*";inherits:false;initial-value:none}@property --tw-animation-iteration-count{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-blur{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-opacity{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-rotate{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-scale{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-blur{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-opacity{syntax:"*";inherits:false;initial-value:1}@property --tw-exit-rotate{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-scale{syntax:"*";inherits:false;initial-value:1}@property --tw-exit-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-translate-y{syntax:"*";inherits:false;initial-value:0}:root{--radius:.625rem;--background:oklch(100% 0 0);--foreground:oklch(14.7% .004 49.25);--card:oklch(100% 0 0);--card-foreground:oklch(14.7% .004 49.25);--popover:oklch(100% 0 0);--popover-foreground:oklch(14.7% .004 49.25);--primary:oklch(21.6% .006 56.043);--primary-foreground:oklch(98.5% .001 106.423);--secondary:oklch(97% .001 106.424);--secondary-foreground:oklch(21.6% .006 56.043);--muted:oklch(97% .001 106.424);--muted-foreground:oklch(55.3% .013 58.071);--accent:oklch(97% .001 106.424);--accent-foreground:oklch(21.6% .006 56.043);--destructive:oklch(57.7% .245 27.325);--border:oklch(92.3% .003 48.717);--input:oklch(92.3% .003 48.717);--ring:oklch(70.9% .01 56.259);--chart-1:oklch(64.6% .222 41.116);--chart-2:oklch(60% .118 184.704);--chart-3:oklch(39.8% .07 227.392);--chart-4:oklch(82.8% .189 84.429);--chart-5:oklch(76.9% .188 70.08);--sidebar:oklch(98.5% .001 106.423);--sidebar-foreground:oklch(14.7% .004 49.25);--sidebar-primary:oklch(21.6% .006 56.043);--sidebar-primary-foreground:oklch(98.5% .001 106.423);--sidebar-accent:oklch(97% .001 106.424);--sidebar-accent-foreground:oklch(21.6% .006 56.043);--sidebar-border:oklch(92.3% .003 48.717);--sidebar-ring:oklch(70.9% .01 56.259)}.dark{--background:oklch(14.7% .004 49.25);--foreground:oklch(98.5% .001 106.423);--card:oklch(21.6% .006 56.043);--card-foreground:oklch(98.5% .001 106.423);--popover:oklch(21.6% .006 56.043);--popover-foreground:oklch(98.5% .001 106.423);--primary:oklch(92.3% .003 48.717);--primary-foreground:oklch(21.6% .006 56.043);--secondary:oklch(26.8% .007 34.298);--secondary-foreground:oklch(98.5% .001 106.423);--muted:oklch(26.8% .007 34.298);--muted-foreground:oklch(70.9% .01 56.259);--accent:oklch(26.8% .007 34.298);--accent-foreground:oklch(98.5% .001 106.423);--destructive:oklch(70.4% .191 22.216);--border:oklch(100% 0 0/.1);--input:oklch(100% 0 0/.15);--ring:oklch(55.3% .013 58.071);--chart-1:oklch(48.8% .243 264.376);--chart-2:oklch(69.6% .17 162.48);--chart-3:oklch(76.9% .188 70.08);--chart-4:oklch(62.7% .265 303.9);--chart-5:oklch(64.5% .246 16.439);--sidebar:oklch(21.6% .006 56.043);--sidebar-foreground:oklch(98.5% .001 106.423);--sidebar-primary:oklch(48.8% .243 264.376);--sidebar-primary-foreground:oklch(98.5% .001 106.423);--sidebar-accent:oklch(26.8% .007 34.298);--sidebar-accent-foreground:oklch(98.5% .001 106.423);--sidebar-border:oklch(100% 0 0/.1);--sidebar-ring:oklch(55.3% .013 58.071)}@keyframes shimmer{0%{transform:translate(-100%)}to{transform:translate(100%)}}.animate-shimmer{animation:shimmer 2s infinite}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-space-x-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"";inherits:false;initial-value:0}@property --tw-gradient-via-position{syntax:"";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"";inherits:false;initial-value:100%}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-content{syntax:"*";inherits:false;initial-value:""}@keyframes spin{to{transform:rotate(1turn)}}@keyframes pulse{50%{opacity:.5}}@keyframes enter{0%{opacity:var(--tw-enter-opacity,1);transform:translate3d(var(--tw-enter-translate-x,0),var(--tw-enter-translate-y,0),0)scale3d(var(--tw-enter-scale,1),var(--tw-enter-scale,1),var(--tw-enter-scale,1))rotate(var(--tw-enter-rotate,0));filter:blur(var(--tw-enter-blur,0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity,1);transform:translate3d(var(--tw-exit-translate-x,0),var(--tw-exit-translate-y,0),0)scale3d(var(--tw-exit-scale,1),var(--tw-exit-scale,1),var(--tw-exit-scale,1))rotate(var(--tw-exit-rotate,0));filter:blur(var(--tw-exit-blur,0))}}@keyframes caret-blink{0%,70%,to{opacity:1}20%,50%{opacity:0}}
\ No newline at end of file
diff --git a/ui_out/index.html b/ui_out/index.html
index 6c732872..82f25312 100644
--- a/ui_out/index.html
+++ b/ui_out/index.html
@@ -1 +1 @@
-Routstr
API keys with their current balances and usage statistics
\ No newline at end of file
diff --git a/ui_out/index.txt b/ui_out/index.txt
index 0a5e29f6..1c19bf6d 100644
--- a/ui_out/index.txt
+++ b/ui_out/index.txt
@@ -2,26 +2,27 @@
2:I[5414,["363","static/chunks/363-119b32fca35baa33.js","29","static/chunks/29-e3557fb1dd82bdc3.js","578","static/chunks/578-9e08cd45b1eda688.js","177","static/chunks/app/layout-1e4148ea2d359141.js"],"Providers"]
3:I[8754,[],""]
4:I[768,[],""]
-5:I[953,["363","static/chunks/363-119b32fca35baa33.js","222","static/chunks/222-4bb848975c01d467.js","808","static/chunks/808-6da586a06e4a6738.js","29","static/chunks/29-e3557fb1dd82bdc3.js","730","static/chunks/730-892209af1fa345bd.js","978","static/chunks/978-cd938190a9f5efa7.js","481","static/chunks/481-48cd0f8fe547e418.js","236","static/chunks/236-ba64522839e788ad.js","974","static/chunks/app/page-cbf91667e39e2dcb.js"],"SidebarProvider"]
-6:I[7569,["363","static/chunks/363-119b32fca35baa33.js","222","static/chunks/222-4bb848975c01d467.js","808","static/chunks/808-6da586a06e4a6738.js","29","static/chunks/29-e3557fb1dd82bdc3.js","730","static/chunks/730-892209af1fa345bd.js","978","static/chunks/978-cd938190a9f5efa7.js","481","static/chunks/481-48cd0f8fe547e418.js","236","static/chunks/236-ba64522839e788ad.js","974","static/chunks/app/page-cbf91667e39e2dcb.js"],"AppSidebar"]
-7:I[953,["363","static/chunks/363-119b32fca35baa33.js","222","static/chunks/222-4bb848975c01d467.js","808","static/chunks/808-6da586a06e4a6738.js","29","static/chunks/29-e3557fb1dd82bdc3.js","730","static/chunks/730-892209af1fa345bd.js","978","static/chunks/978-cd938190a9f5efa7.js","481","static/chunks/481-48cd0f8fe547e418.js","236","static/chunks/236-ba64522839e788ad.js","974","static/chunks/app/page-cbf91667e39e2dcb.js"],"SidebarInset"]
-8:I[4756,["363","static/chunks/363-119b32fca35baa33.js","222","static/chunks/222-4bb848975c01d467.js","808","static/chunks/808-6da586a06e4a6738.js","29","static/chunks/29-e3557fb1dd82bdc3.js","730","static/chunks/730-892209af1fa345bd.js","978","static/chunks/978-cd938190a9f5efa7.js","481","static/chunks/481-48cd0f8fe547e418.js","236","static/chunks/236-ba64522839e788ad.js","974","static/chunks/app/page-cbf91667e39e2dcb.js"],"SiteHeader"]
-9:I[159,["363","static/chunks/363-119b32fca35baa33.js","222","static/chunks/222-4bb848975c01d467.js","808","static/chunks/808-6da586a06e4a6738.js","29","static/chunks/29-e3557fb1dd82bdc3.js","730","static/chunks/730-892209af1fa345bd.js","978","static/chunks/978-cd938190a9f5efa7.js","481","static/chunks/481-48cd0f8fe547e418.js","236","static/chunks/236-ba64522839e788ad.js","974","static/chunks/app/page-cbf91667e39e2dcb.js"],"DetailedWalletBalance"]
-a:I[4826,[],"MetadataBoundary"]
-c:I[4826,[],"OutletBoundary"]
-f:I[394,[],"AsyncMetadataOutlet"]
-11:I[4826,[],"ViewportBoundary"]
-13:I[6613,[],""]
+5:I[953,["363","static/chunks/363-119b32fca35baa33.js","222","static/chunks/222-4bb848975c01d467.js","808","static/chunks/808-6da586a06e4a6738.js","29","static/chunks/29-e3557fb1dd82bdc3.js","730","static/chunks/730-892209af1fa345bd.js","978","static/chunks/978-cd938190a9f5efa7.js","481","static/chunks/481-48cd0f8fe547e418.js","236","static/chunks/236-ba64522839e788ad.js","601","static/chunks/601-bd77b408e968f9da.js","974","static/chunks/app/page-521ee9b11aefe1b2.js"],"SidebarProvider"]
+6:I[7569,["363","static/chunks/363-119b32fca35baa33.js","222","static/chunks/222-4bb848975c01d467.js","808","static/chunks/808-6da586a06e4a6738.js","29","static/chunks/29-e3557fb1dd82bdc3.js","730","static/chunks/730-892209af1fa345bd.js","978","static/chunks/978-cd938190a9f5efa7.js","481","static/chunks/481-48cd0f8fe547e418.js","236","static/chunks/236-ba64522839e788ad.js","601","static/chunks/601-bd77b408e968f9da.js","974","static/chunks/app/page-521ee9b11aefe1b2.js"],"AppSidebar"]
+7:I[953,["363","static/chunks/363-119b32fca35baa33.js","222","static/chunks/222-4bb848975c01d467.js","808","static/chunks/808-6da586a06e4a6738.js","29","static/chunks/29-e3557fb1dd82bdc3.js","730","static/chunks/730-892209af1fa345bd.js","978","static/chunks/978-cd938190a9f5efa7.js","481","static/chunks/481-48cd0f8fe547e418.js","236","static/chunks/236-ba64522839e788ad.js","601","static/chunks/601-bd77b408e968f9da.js","974","static/chunks/app/page-521ee9b11aefe1b2.js"],"SidebarInset"]
+8:I[4756,["363","static/chunks/363-119b32fca35baa33.js","222","static/chunks/222-4bb848975c01d467.js","808","static/chunks/808-6da586a06e4a6738.js","29","static/chunks/29-e3557fb1dd82bdc3.js","730","static/chunks/730-892209af1fa345bd.js","978","static/chunks/978-cd938190a9f5efa7.js","481","static/chunks/481-48cd0f8fe547e418.js","236","static/chunks/236-ba64522839e788ad.js","601","static/chunks/601-bd77b408e968f9da.js","974","static/chunks/app/page-521ee9b11aefe1b2.js"],"SiteHeader"]
+9:I[159,["363","static/chunks/363-119b32fca35baa33.js","222","static/chunks/222-4bb848975c01d467.js","808","static/chunks/808-6da586a06e4a6738.js","29","static/chunks/29-e3557fb1dd82bdc3.js","730","static/chunks/730-892209af1fa345bd.js","978","static/chunks/978-cd938190a9f5efa7.js","481","static/chunks/481-48cd0f8fe547e418.js","236","static/chunks/236-ba64522839e788ad.js","601","static/chunks/601-bd77b408e968f9da.js","974","static/chunks/app/page-521ee9b11aefe1b2.js"],"DetailedWalletBalance"]
+a:I[2483,["363","static/chunks/363-119b32fca35baa33.js","222","static/chunks/222-4bb848975c01d467.js","808","static/chunks/808-6da586a06e4a6738.js","29","static/chunks/29-e3557fb1dd82bdc3.js","730","static/chunks/730-892209af1fa345bd.js","978","static/chunks/978-cd938190a9f5efa7.js","481","static/chunks/481-48cd0f8fe547e418.js","236","static/chunks/236-ba64522839e788ad.js","601","static/chunks/601-bd77b408e968f9da.js","974","static/chunks/app/page-521ee9b11aefe1b2.js"],"TemporaryBalances"]
+b:I[4826,[],"MetadataBoundary"]
+d:I[4826,[],"OutletBoundary"]
+10:I[394,[],"AsyncMetadataOutlet"]
+12:I[4826,[],"ViewportBoundary"]
+14:I[6613,[],""]
:HL["/_next/static/media/4cf2300e9c8272f7-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
:HL["/_next/static/media/93f479601ee12b01-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
:HL["/_next/static/css/de70bee13400563f.css","style"]
-:HL["/_next/static/css/5bf7a4b46c37a9cb.css","style"]
-0:{"P":null,"b":"vzojcgD75PgXdcu6NGfSb","p":"","c":["",""],"i":false,"f":[[["",{"children":["__PAGE__",{}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/de70bee13400563f.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/_next/static/css/5bf7a4b46c37a9cb.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"__variable_188709 __variable_9a8899 antialiased","children":["$","$L2",null,{"children":["$","$L3",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]]}],{"children":["__PAGE__",["$","$1","c",{"children":[["$","$L5",null,{"children":[["$","$L6",null,{"variant":"inset"}],["$","$L7",null,{"className":"p-0","children":[["$","$L8",null,{}],["$","div",null,{"className":"container max-w-6xl px-4 py-8 md:px-6 lg:px-8","children":[["$","div",null,{"className":"mb-8","children":[["$","h1",null,{"className":"text-3xl font-bold tracking-tight","children":"Admin Dashboard"}],["$","p",null,{"className":"text-muted-foreground mt-2","children":"Monitor and manage wallet balances"}]]}],["$","div",null,{"className":"grid gap-6","children":["$","div",null,{"className":"col-span-full","children":["$","$L9",null,{"refreshInterval":5000}]}]}]]}]]}]]}],["$","$La",null,{"children":"$Lb"}],null,["$","$Lc",null,{"children":["$Ld","$Le",["$","$Lf",null,{"promise":"$@10"}]]}]]}],{},null,false]},null,false],["$","$1","h",{"children":[null,["$","$1","bpBC-ONQIJfOfFwWDcSsU",{"children":[["$","$L11",null,{"children":"$L12"}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],null]}],false]],"m":"$undefined","G":["$13","$undefined"],"s":false,"S":true}
-14:"$Sreact.suspense"
-15:I[394,[],"AsyncMetadata"]
-b:["$","$14",null,{"fallback":null,"children":["$","$L15",null,{"promise":"$@16"}]}]
+:HL["/_next/static/css/6b70638fbb45b4f2.css","style"]
+0:{"P":null,"b":"MTOFXU9tRAr2QXrmYwVxq","p":"","c":["",""],"i":false,"f":[[["",{"children":["__PAGE__",{}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/de70bee13400563f.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/_next/static/css/6b70638fbb45b4f2.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"__variable_188709 __variable_9a8899 antialiased","children":["$","$L2",null,{"children":["$","$L3",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]]}],{"children":["__PAGE__",["$","$1","c",{"children":[["$","$L5",null,{"children":[["$","$L6",null,{"variant":"inset"}],["$","$L7",null,{"className":"p-0","children":[["$","$L8",null,{}],["$","div",null,{"className":"container max-w-6xl px-4 py-8 md:px-6 lg:px-8","children":[["$","div",null,{"className":"mb-8","children":[["$","h1",null,{"className":"text-3xl font-bold tracking-tight","children":"Admin Dashboard"}],["$","p",null,{"className":"text-muted-foreground mt-2","children":"Monitor and manage wallet balances"}]]}],["$","div",null,{"className":"grid gap-6","children":[["$","div",null,{"className":"col-span-full","children":["$","$L9",null,{"refreshInterval":5000}]}],["$","div",null,{"className":"col-span-full","children":["$","$La",null,{"refreshInterval":10000}]}]]}]]}]]}]]}],["$","$Lb",null,{"children":"$Lc"}],null,["$","$Ld",null,{"children":["$Le","$Lf",["$","$L10",null,{"promise":"$@11"}]]}]]}],{},null,false]},null,false],["$","$1","h",{"children":[null,["$","$1","1zRnluoM-lBicTDRV0w4Q",{"children":[["$","$L12",null,{"children":"$L13"}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],null]}],false]],"m":"$undefined","G":["$14","$undefined"],"s":false,"S":true}
+15:"$Sreact.suspense"
+16:I[394,[],"AsyncMetadata"]
+c:["$","$15",null,{"fallback":null,"children":["$","$L16",null,{"promise":"$@17"}]}]
+f:null
+13:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]
e:null
-12:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]
-d:null
-16:{"metadata":[["$","title","0",{"children":"Routstr"}],["$","meta","1",{"name":"description","content":"Routstr model management"}],["$","link","2",{"rel":"icon","href":"/favicon.ico","type":"image/x-icon","sizes":"16x16"}],["$","link","3",{"rel":"icon","href":"/icon.ico"}]],"error":null,"digest":"$undefined"}
-10:{"metadata":"$16:metadata","error":null,"digest":"$undefined"}
+17:{"metadata":[["$","title","0",{"children":"Routstr"}],["$","meta","1",{"name":"description","content":"Routstr model management"}],["$","link","2",{"rel":"icon","href":"/favicon.ico","type":"image/x-icon","sizes":"16x16"}],["$","link","3",{"rel":"icon","href":"/icon.ico"}]],"error":null,"digest":"$undefined"}
+11:{"metadata":"$17:metadata","error":null,"digest":"$undefined"}
diff --git a/ui_out/login/index.html b/ui_out/login/index.html
index 74bd2e1d..0175b45d 100644
--- a/ui_out/login/index.html
+++ b/ui_out/login/index.html
@@ -1 +1 @@
-Routstr
Admin Login
Enter your admin password to access the dashboard
\ No newline at end of file
+Routstr
Admin Login
Enter your admin password to access the dashboard
\ No newline at end of file
diff --git a/ui_out/login/index.txt b/ui_out/login/index.txt
index 92645c7f..470ca5e5 100644
--- a/ui_out/login/index.txt
+++ b/ui_out/login/index.txt
@@ -12,8 +12,8 @@ e:I[394,[],"AsyncMetadataOutlet"]
:HL["/_next/static/media/4cf2300e9c8272f7-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
:HL["/_next/static/media/93f479601ee12b01-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
:HL["/_next/static/css/de70bee13400563f.css","style"]
-:HL["/_next/static/css/5bf7a4b46c37a9cb.css","style"]
-0:{"P":null,"b":"vzojcgD75PgXdcu6NGfSb","p":"","c":["","login",""],"i":false,"f":[[["",{"children":["login",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/de70bee13400563f.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/_next/static/css/5bf7a4b46c37a9cb.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"__variable_188709 __variable_9a8899 antialiased","children":["$","$L2",null,{"children":["$","$L3",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]]}],{"children":["login",["$","$1","c",{"children":[null,["$","$L3",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["__PAGE__",["$","$1","c",{"children":[["$","$L5",null,{"Component":"$6","searchParams":{},"params":{},"promises":["$@7","$@8"]}],["$","$L9",null,{"children":"$La"}],null,["$","$Lb",null,{"children":["$Lc","$Ld",["$","$Le",null,{"promise":"$@f"}]]}]]}],{},null,false]},null,false]},null,false],["$","$1","h",{"children":[null,["$","$1","f1IgdDFyuxS_tC4eNhcCV",{"children":[["$","$L10",null,{"children":"$L11"}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],null]}],false]],"m":"$undefined","G":["$12","$undefined"],"s":false,"S":true}
+:HL["/_next/static/css/6b70638fbb45b4f2.css","style"]
+0:{"P":null,"b":"MTOFXU9tRAr2QXrmYwVxq","p":"","c":["","login",""],"i":false,"f":[[["",{"children":["login",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/de70bee13400563f.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/_next/static/css/6b70638fbb45b4f2.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"__variable_188709 __variable_9a8899 antialiased","children":["$","$L2",null,{"children":["$","$L3",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]]}],{"children":["login",["$","$1","c",{"children":[null,["$","$L3",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["__PAGE__",["$","$1","c",{"children":[["$","$L5",null,{"Component":"$6","searchParams":{},"params":{},"promises":["$@7","$@8"]}],["$","$L9",null,{"children":"$La"}],null,["$","$Lb",null,{"children":["$Lc","$Ld",["$","$Le",null,{"promise":"$@f"}]]}]]}],{},null,false]},null,false]},null,false],["$","$1","h",{"children":[null,["$","$1","MWKTi5nKzexhj8S-SFBip",{"children":[["$","$L10",null,{"children":"$L11"}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],null]}],false]],"m":"$undefined","G":["$12","$undefined"],"s":false,"S":true}
13:"$Sreact.suspense"
14:I[394,[],"AsyncMetadata"]
7:{}
diff --git a/ui_out/model/index.html b/ui_out/model/index.html
index c0f243dd..7c3712f8 100644
--- a/ui_out/model/index.html
+++ b/ui_out/model/index.html
@@ -1 +1 @@
-Routstr
Manage your AI models organized by provider groups. Configure API keys, and organize models by provider groups.
\ No newline at end of file
diff --git a/ui_out/model/index.txt b/ui_out/model/index.txt
index f4ac823f..5c09c6c9 100644
--- a/ui_out/model/index.txt
+++ b/ui_out/model/index.txt
@@ -3,7 +3,7 @@
3:I[8754,[],""]
4:I[768,[],""]
5:I[3971,[],"ClientPageRoot"]
-6:I[7557,["363","static/chunks/363-119b32fca35baa33.js","222","static/chunks/222-4bb848975c01d467.js","808","static/chunks/808-6da586a06e4a6738.js","29","static/chunks/29-e3557fb1dd82bdc3.js","730","static/chunks/730-892209af1fa345bd.js","978","static/chunks/978-cd938190a9f5efa7.js","481","static/chunks/481-48cd0f8fe547e418.js","982","static/chunks/982-5588ad0e30e6255e.js","938","static/chunks/938-08cea0300e0df70a.js","236","static/chunks/236-ba64522839e788ad.js","255","static/chunks/255-a44a63a7b4273784.js","552","static/chunks/app/model/page-54703515a5590901.js"],"default"]
+6:I[7678,["363","static/chunks/363-119b32fca35baa33.js","222","static/chunks/222-4bb848975c01d467.js","808","static/chunks/808-6da586a06e4a6738.js","29","static/chunks/29-e3557fb1dd82bdc3.js","730","static/chunks/730-892209af1fa345bd.js","978","static/chunks/978-cd938190a9f5efa7.js","481","static/chunks/481-48cd0f8fe547e418.js","982","static/chunks/982-5588ad0e30e6255e.js","826","static/chunks/826-c15935d1c2416e5d.js","236","static/chunks/236-ba64522839e788ad.js","601","static/chunks/601-bd77b408e968f9da.js","552","static/chunks/app/model/page-ffdaf3929a2720ec.js"],"default"]
9:I[4826,[],"MetadataBoundary"]
b:I[4826,[],"OutletBoundary"]
e:I[394,[],"AsyncMetadataOutlet"]
@@ -12,8 +12,8 @@ e:I[394,[],"AsyncMetadataOutlet"]
:HL["/_next/static/media/4cf2300e9c8272f7-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
:HL["/_next/static/media/93f479601ee12b01-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
:HL["/_next/static/css/de70bee13400563f.css","style"]
-:HL["/_next/static/css/5bf7a4b46c37a9cb.css","style"]
-0:{"P":null,"b":"vzojcgD75PgXdcu6NGfSb","p":"","c":["","model",""],"i":false,"f":[[["",{"children":["model",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/de70bee13400563f.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/_next/static/css/5bf7a4b46c37a9cb.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"__variable_188709 __variable_9a8899 antialiased","children":["$","$L2",null,{"children":["$","$L3",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]]}],{"children":["model",["$","$1","c",{"children":[null,["$","$L3",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["__PAGE__",["$","$1","c",{"children":[["$","$L5",null,{"Component":"$6","searchParams":{},"params":{},"promises":["$@7","$@8"]}],["$","$L9",null,{"children":"$La"}],null,["$","$Lb",null,{"children":["$Lc","$Ld",["$","$Le",null,{"promise":"$@f"}]]}]]}],{},null,false]},null,false]},null,false],["$","$1","h",{"children":[null,["$","$1","TdNwfYh9clyHCCnHOISkg",{"children":[["$","$L10",null,{"children":"$L11"}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],null]}],false]],"m":"$undefined","G":["$12","$undefined"],"s":false,"S":true}
+:HL["/_next/static/css/6b70638fbb45b4f2.css","style"]
+0:{"P":null,"b":"MTOFXU9tRAr2QXrmYwVxq","p":"","c":["","model",""],"i":false,"f":[[["",{"children":["model",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/de70bee13400563f.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/_next/static/css/6b70638fbb45b4f2.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"__variable_188709 __variable_9a8899 antialiased","children":["$","$L2",null,{"children":["$","$L3",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]]}],{"children":["model",["$","$1","c",{"children":[null,["$","$L3",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["__PAGE__",["$","$1","c",{"children":[["$","$L5",null,{"Component":"$6","searchParams":{},"params":{},"promises":["$@7","$@8"]}],["$","$L9",null,{"children":"$La"}],null,["$","$Lb",null,{"children":["$Lc","$Ld",["$","$Le",null,{"promise":"$@f"}]]}]]}],{},null,false]},null,false]},null,false],["$","$1","h",{"children":[null,["$","$1","uCWxpf_6s4ahEgRHYe56p",{"children":[["$","$L10",null,{"children":"$L11"}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],null]}],false]],"m":"$undefined","G":["$12","$undefined"],"s":false,"S":true}
13:"$Sreact.suspense"
14:I[394,[],"AsyncMetadata"]
7:{}
diff --git a/ui_out/out/404.html b/ui_out/out/404.html
index 600fa34d..367d24d2 100644
--- a/ui_out/out/404.html
+++ b/ui_out/out/404.html
@@ -1 +1 @@
-404: This page could not be found.Routstr
404
This page could not be found.
\ No newline at end of file
+404: This page could not be found.Routstr
404
This page could not be found.
\ No newline at end of file
diff --git a/ui_out/out/404/index.html b/ui_out/out/404/index.html
index 600fa34d..367d24d2 100644
--- a/ui_out/out/404/index.html
+++ b/ui_out/out/404/index.html
@@ -1 +1 @@
-404: This page could not be found.Routstr
404
This page could not be found.
\ No newline at end of file
+404: This page could not be found.Routstr
404
This page could not be found.
\ No newline at end of file
diff --git a/ui_out/out/_next/static/lKQa3FSkSrZjnFggXV6Av/_buildManifest.js b/ui_out/out/_next/static/hGLTswdpyRID1jim9jOTQ/_buildManifest.js
similarity index 100%
rename from ui_out/out/_next/static/lKQa3FSkSrZjnFggXV6Av/_buildManifest.js
rename to ui_out/out/_next/static/hGLTswdpyRID1jim9jOTQ/_buildManifest.js
diff --git a/ui_out/out/_next/static/lKQa3FSkSrZjnFggXV6Av/_ssgManifest.js b/ui_out/out/_next/static/hGLTswdpyRID1jim9jOTQ/_ssgManifest.js
similarity index 100%
rename from ui_out/out/_next/static/lKQa3FSkSrZjnFggXV6Av/_ssgManifest.js
rename to ui_out/out/_next/static/hGLTswdpyRID1jim9jOTQ/_ssgManifest.js
diff --git a/ui_out/out/index.html b/ui_out/out/index.html
index 48ef46dc..1bcb4961 100644
--- a/ui_out/out/index.html
+++ b/ui_out/out/index.html
@@ -1 +1 @@
-Routstr
API keys with their current balances and usage statistics
\ No newline at end of file
diff --git a/ui_out/out/index.txt b/ui_out/out/index.txt
index df475415..625ffa5f 100644
--- a/ui_out/out/index.txt
+++ b/ui_out/out/index.txt
@@ -17,7 +17,7 @@ d:I[4826,[],"OutletBoundary"]
:HL["/_next/static/media/93f479601ee12b01-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
:HL["/_next/static/css/de70bee13400563f.css","style"]
:HL["/_next/static/css/6b70638fbb45b4f2.css","style"]
-0:{"P":null,"b":"lKQa3FSkSrZjnFggXV6Av","p":"","c":["",""],"i":false,"f":[[["",{"children":["__PAGE__",{}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/de70bee13400563f.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/_next/static/css/6b70638fbb45b4f2.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"__variable_188709 __variable_9a8899 antialiased","children":["$","$L2",null,{"children":["$","$L3",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]]}],{"children":["__PAGE__",["$","$1","c",{"children":[["$","$L5",null,{"children":[["$","$L6",null,{"variant":"inset"}],["$","$L7",null,{"className":"p-0","children":[["$","$L8",null,{}],["$","div",null,{"className":"container max-w-6xl px-4 py-8 md:px-6 lg:px-8","children":[["$","div",null,{"className":"mb-8","children":[["$","h1",null,{"className":"text-3xl font-bold tracking-tight","children":"Admin Dashboard"}],["$","p",null,{"className":"text-muted-foreground mt-2","children":"Monitor and manage wallet balances"}]]}],["$","div",null,{"className":"grid gap-6","children":[["$","div",null,{"className":"col-span-full","children":["$","$L9",null,{"refreshInterval":5000}]}],["$","div",null,{"className":"col-span-full","children":["$","$La",null,{"refreshInterval":10000}]}]]}]]}]]}]]}],["$","$Lb",null,{"children":"$Lc"}],null,["$","$Ld",null,{"children":["$Le","$Lf",["$","$L10",null,{"promise":"$@11"}]]}]]}],{},null,false]},null,false],["$","$1","h",{"children":[null,["$","$1","1j_3kheSQcvDBvXEjiDiR",{"children":[["$","$L12",null,{"children":"$L13"}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],null]}],false]],"m":"$undefined","G":["$14","$undefined"],"s":false,"S":true}
+0:{"P":null,"b":"hGLTswdpyRID1jim9jOTQ","p":"","c":["",""],"i":false,"f":[[["",{"children":["__PAGE__",{}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/de70bee13400563f.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/_next/static/css/6b70638fbb45b4f2.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"__variable_188709 __variable_9a8899 antialiased","children":["$","$L2",null,{"children":["$","$L3",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]]}],{"children":["__PAGE__",["$","$1","c",{"children":[["$","$L5",null,{"children":[["$","$L6",null,{"variant":"inset"}],["$","$L7",null,{"className":"p-0","children":[["$","$L8",null,{}],["$","div",null,{"className":"container max-w-6xl px-4 py-8 md:px-6 lg:px-8","children":[["$","div",null,{"className":"mb-8","children":[["$","h1",null,{"className":"text-3xl font-bold tracking-tight","children":"Admin Dashboard"}],["$","p",null,{"className":"text-muted-foreground mt-2","children":"Monitor and manage wallet balances"}]]}],["$","div",null,{"className":"grid gap-6","children":[["$","div",null,{"className":"col-span-full","children":["$","$L9",null,{"refreshInterval":5000}]}],["$","div",null,{"className":"col-span-full","children":["$","$La",null,{"refreshInterval":10000}]}]]}]]}]]}]]}],["$","$Lb",null,{"children":"$Lc"}],null,["$","$Ld",null,{"children":["$Le","$Lf",["$","$L10",null,{"promise":"$@11"}]]}]]}],{},null,false]},null,false],["$","$1","h",{"children":[null,["$","$1","_neu5YsMbxeFR0hn8csdc",{"children":[["$","$L12",null,{"children":"$L13"}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],null]}],false]],"m":"$undefined","G":["$14","$undefined"],"s":false,"S":true}
15:"$Sreact.suspense"
16:I[394,[],"AsyncMetadata"]
c:["$","$15",null,{"fallback":null,"children":["$","$L16",null,{"promise":"$@17"}]}]
diff --git a/ui_out/out/login/index.html b/ui_out/out/login/index.html
index 4d302561..33f32510 100644
--- a/ui_out/out/login/index.html
+++ b/ui_out/out/login/index.html
@@ -1 +1 @@
-Routstr
Admin Login
Enter your admin password to access the dashboard
\ No newline at end of file
+Routstr
Admin Login
Enter your admin password to access the dashboard
\ No newline at end of file
diff --git a/ui_out/out/login/index.txt b/ui_out/out/login/index.txt
index d6dce4e0..1a49f9f9 100644
--- a/ui_out/out/login/index.txt
+++ b/ui_out/out/login/index.txt
@@ -13,7 +13,7 @@ e:I[394,[],"AsyncMetadataOutlet"]
:HL["/_next/static/media/93f479601ee12b01-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
:HL["/_next/static/css/de70bee13400563f.css","style"]
:HL["/_next/static/css/6b70638fbb45b4f2.css","style"]
-0:{"P":null,"b":"lKQa3FSkSrZjnFggXV6Av","p":"","c":["","login",""],"i":false,"f":[[["",{"children":["login",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/de70bee13400563f.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/_next/static/css/6b70638fbb45b4f2.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"__variable_188709 __variable_9a8899 antialiased","children":["$","$L2",null,{"children":["$","$L3",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]]}],{"children":["login",["$","$1","c",{"children":[null,["$","$L3",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["__PAGE__",["$","$1","c",{"children":[["$","$L5",null,{"Component":"$6","searchParams":{},"params":{},"promises":["$@7","$@8"]}],["$","$L9",null,{"children":"$La"}],null,["$","$Lb",null,{"children":["$Lc","$Ld",["$","$Le",null,{"promise":"$@f"}]]}]]}],{},null,false]},null,false]},null,false],["$","$1","h",{"children":[null,["$","$1","Vqi2TCa5RZ0nOgBkPdKKp",{"children":[["$","$L10",null,{"children":"$L11"}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],null]}],false]],"m":"$undefined","G":["$12","$undefined"],"s":false,"S":true}
+0:{"P":null,"b":"hGLTswdpyRID1jim9jOTQ","p":"","c":["","login",""],"i":false,"f":[[["",{"children":["login",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/de70bee13400563f.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/_next/static/css/6b70638fbb45b4f2.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"__variable_188709 __variable_9a8899 antialiased","children":["$","$L2",null,{"children":["$","$L3",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]]}],{"children":["login",["$","$1","c",{"children":[null,["$","$L3",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["__PAGE__",["$","$1","c",{"children":[["$","$L5",null,{"Component":"$6","searchParams":{},"params":{},"promises":["$@7","$@8"]}],["$","$L9",null,{"children":"$La"}],null,["$","$Lb",null,{"children":["$Lc","$Ld",["$","$Le",null,{"promise":"$@f"}]]}]]}],{},null,false]},null,false]},null,false],["$","$1","h",{"children":[null,["$","$1","57HSdZZIU1_KFwllbDwzY",{"children":[["$","$L10",null,{"children":"$L11"}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],null]}],false]],"m":"$undefined","G":["$12","$undefined"],"s":false,"S":true}
13:"$Sreact.suspense"
14:I[394,[],"AsyncMetadata"]
7:{}
diff --git a/ui_out/out/model/index.html b/ui_out/out/model/index.html
index bb684a94..9b1be6c1 100644
--- a/ui_out/out/model/index.html
+++ b/ui_out/out/model/index.html
@@ -1 +1 @@
-Routstr
Manage your AI models organized by provider groups. Configure API keys, and organize models by provider groups.
\ No newline at end of file
diff --git a/ui_out/out/model/index.txt b/ui_out/out/model/index.txt
index a4f143ad..4f97dbfe 100644
--- a/ui_out/out/model/index.txt
+++ b/ui_out/out/model/index.txt
@@ -13,7 +13,7 @@ e:I[394,[],"AsyncMetadataOutlet"]
:HL["/_next/static/media/93f479601ee12b01-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
:HL["/_next/static/css/de70bee13400563f.css","style"]
:HL["/_next/static/css/6b70638fbb45b4f2.css","style"]
-0:{"P":null,"b":"lKQa3FSkSrZjnFggXV6Av","p":"","c":["","model",""],"i":false,"f":[[["",{"children":["model",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/de70bee13400563f.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/_next/static/css/6b70638fbb45b4f2.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"__variable_188709 __variable_9a8899 antialiased","children":["$","$L2",null,{"children":["$","$L3",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]]}],{"children":["model",["$","$1","c",{"children":[null,["$","$L3",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["__PAGE__",["$","$1","c",{"children":[["$","$L5",null,{"Component":"$6","searchParams":{},"params":{},"promises":["$@7","$@8"]}],["$","$L9",null,{"children":"$La"}],null,["$","$Lb",null,{"children":["$Lc","$Ld",["$","$Le",null,{"promise":"$@f"}]]}]]}],{},null,false]},null,false]},null,false],["$","$1","h",{"children":[null,["$","$1","FV0FcfgQxWGSHKvIK56xj",{"children":[["$","$L10",null,{"children":"$L11"}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],null]}],false]],"m":"$undefined","G":["$12","$undefined"],"s":false,"S":true}
+0:{"P":null,"b":"hGLTswdpyRID1jim9jOTQ","p":"","c":["","model",""],"i":false,"f":[[["",{"children":["model",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/de70bee13400563f.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/_next/static/css/6b70638fbb45b4f2.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"__variable_188709 __variable_9a8899 antialiased","children":["$","$L2",null,{"children":["$","$L3",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]]}],{"children":["model",["$","$1","c",{"children":[null,["$","$L3",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["__PAGE__",["$","$1","c",{"children":[["$","$L5",null,{"Component":"$6","searchParams":{},"params":{},"promises":["$@7","$@8"]}],["$","$L9",null,{"children":"$La"}],null,["$","$Lb",null,{"children":["$Lc","$Ld",["$","$Le",null,{"promise":"$@f"}]]}]]}],{},null,false]},null,false]},null,false],["$","$1","h",{"children":[null,["$","$1","6uW7Fbq1NM9n9CDzy4KxK",{"children":[["$","$L10",null,{"children":"$L11"}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],null]}],false]],"m":"$undefined","G":["$12","$undefined"],"s":false,"S":true}
13:"$Sreact.suspense"
14:I[394,[],"AsyncMetadata"]
7:{}
diff --git a/ui_out/out/providers/index.html b/ui_out/out/providers/index.html
index aa59eb5d..e336cc92 100644
--- a/ui_out/out/providers/index.html
+++ b/ui_out/out/providers/index.html
@@ -1 +1 @@
-Routstr
Manage your AI provider connections and credentials
\ No newline at end of file
diff --git a/ui_out/out/providers/index.txt b/ui_out/out/providers/index.txt
index 4e4da739..dfe8ed3b 100644
--- a/ui_out/out/providers/index.txt
+++ b/ui_out/out/providers/index.txt
@@ -13,7 +13,7 @@ e:I[394,[],"AsyncMetadataOutlet"]
:HL["/_next/static/media/93f479601ee12b01-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
:HL["/_next/static/css/de70bee13400563f.css","style"]
:HL["/_next/static/css/6b70638fbb45b4f2.css","style"]
-0:{"P":null,"b":"lKQa3FSkSrZjnFggXV6Av","p":"","c":["","providers",""],"i":false,"f":[[["",{"children":["providers",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/de70bee13400563f.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/_next/static/css/6b70638fbb45b4f2.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"__variable_188709 __variable_9a8899 antialiased","children":["$","$L2",null,{"children":["$","$L3",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]]}],{"children":["providers",["$","$1","c",{"children":[null,["$","$L3",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["__PAGE__",["$","$1","c",{"children":[["$","$L5",null,{"Component":"$6","searchParams":{},"params":{},"promises":["$@7","$@8"]}],["$","$L9",null,{"children":"$La"}],null,["$","$Lb",null,{"children":["$Lc","$Ld",["$","$Le",null,{"promise":"$@f"}]]}]]}],{},null,false]},null,false]},null,false],["$","$1","h",{"children":[null,["$","$1","vHvMf0SRTpXXa9hsxQ5zM",{"children":[["$","$L10",null,{"children":"$L11"}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],null]}],false]],"m":"$undefined","G":["$12","$undefined"],"s":false,"S":true}
+0:{"P":null,"b":"hGLTswdpyRID1jim9jOTQ","p":"","c":["","providers",""],"i":false,"f":[[["",{"children":["providers",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/de70bee13400563f.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/_next/static/css/6b70638fbb45b4f2.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"__variable_188709 __variable_9a8899 antialiased","children":["$","$L2",null,{"children":["$","$L3",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]]}],{"children":["providers",["$","$1","c",{"children":[null,["$","$L3",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["__PAGE__",["$","$1","c",{"children":[["$","$L5",null,{"Component":"$6","searchParams":{},"params":{},"promises":["$@7","$@8"]}],["$","$L9",null,{"children":"$La"}],null,["$","$Lb",null,{"children":["$Lc","$Ld",["$","$Le",null,{"promise":"$@f"}]]}]]}],{},null,false]},null,false]},null,false],["$","$1","h",{"children":[null,["$","$1","VBv_vHcmDB0QFfW744o7O",{"children":[["$","$L10",null,{"children":"$L11"}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],null]}],false]],"m":"$undefined","G":["$12","$undefined"],"s":false,"S":true}
13:"$Sreact.suspense"
14:I[394,[],"AsyncMetadata"]
7:{}
diff --git a/ui_out/out/settings/index.html b/ui_out/out/settings/index.html
index 7daad88a..7f5c5124 100644
--- a/ui_out/out/settings/index.html
+++ b/ui_out/out/settings/index.html
@@ -1 +1 @@
-Routstr
\ No newline at end of file
diff --git a/ui_out/out/settings/index.txt b/ui_out/out/settings/index.txt
index 57b29285..84d83bde 100644
--- a/ui_out/out/settings/index.txt
+++ b/ui_out/out/settings/index.txt
@@ -13,7 +13,7 @@ e:I[394,[],"AsyncMetadataOutlet"]
:HL["/_next/static/media/93f479601ee12b01-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
:HL["/_next/static/css/de70bee13400563f.css","style"]
:HL["/_next/static/css/6b70638fbb45b4f2.css","style"]
-0:{"P":null,"b":"lKQa3FSkSrZjnFggXV6Av","p":"","c":["","settings",""],"i":false,"f":[[["",{"children":["settings",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/de70bee13400563f.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/_next/static/css/6b70638fbb45b4f2.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"__variable_188709 __variable_9a8899 antialiased","children":["$","$L2",null,{"children":["$","$L3",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]]}],{"children":["settings",["$","$1","c",{"children":[null,["$","$L3",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["__PAGE__",["$","$1","c",{"children":[["$","$L5",null,{"Component":"$6","searchParams":{},"params":{},"promises":["$@7","$@8"]}],["$","$L9",null,{"children":"$La"}],null,["$","$Lb",null,{"children":["$Lc","$Ld",["$","$Le",null,{"promise":"$@f"}]]}]]}],{},null,false]},null,false]},null,false],["$","$1","h",{"children":[null,["$","$1","h8QyTboOorI4NPZJFTRZE",{"children":[["$","$L10",null,{"children":"$L11"}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],null]}],false]],"m":"$undefined","G":["$12","$undefined"],"s":false,"S":true}
+0:{"P":null,"b":"hGLTswdpyRID1jim9jOTQ","p":"","c":["","settings",""],"i":false,"f":[[["",{"children":["settings",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/de70bee13400563f.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/_next/static/css/6b70638fbb45b4f2.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"__variable_188709 __variable_9a8899 antialiased","children":["$","$L2",null,{"children":["$","$L3",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]]}],{"children":["settings",["$","$1","c",{"children":[null,["$","$L3",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["__PAGE__",["$","$1","c",{"children":[["$","$L5",null,{"Component":"$6","searchParams":{},"params":{},"promises":["$@7","$@8"]}],["$","$L9",null,{"children":"$La"}],null,["$","$Lb",null,{"children":["$Lc","$Ld",["$","$Le",null,{"promise":"$@f"}]]}]]}],{},null,false]},null,false]},null,false],["$","$1","h",{"children":[null,["$","$1","-saMwSeVdt1mn-zDNg3a3",{"children":[["$","$L10",null,{"children":"$L11"}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],null]}],false]],"m":"$undefined","G":["$12","$undefined"],"s":false,"S":true}
13:"$Sreact.suspense"
14:I[394,[],"AsyncMetadata"]
7:{}
diff --git a/ui_out/out/transactions/index.html b/ui_out/out/transactions/index.html
index c1b5c2e5..e4443c18 100644
--- a/ui_out/out/transactions/index.html
+++ b/ui_out/out/transactions/index.html
@@ -1 +1 @@
-Routstr
View all Cashu token transactions processed by the system
\ No newline at end of file
diff --git a/ui_out/out/transactions/index.txt b/ui_out/out/transactions/index.txt
index 2db5e6a7..d7d42929 100644
--- a/ui_out/out/transactions/index.txt
+++ b/ui_out/out/transactions/index.txt
@@ -13,7 +13,7 @@ e:I[394,[],"AsyncMetadataOutlet"]
:HL["/_next/static/media/93f479601ee12b01-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
:HL["/_next/static/css/de70bee13400563f.css","style"]
:HL["/_next/static/css/6b70638fbb45b4f2.css","style"]
-0:{"P":null,"b":"lKQa3FSkSrZjnFggXV6Av","p":"","c":["","transactions",""],"i":false,"f":[[["",{"children":["transactions",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/de70bee13400563f.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/_next/static/css/6b70638fbb45b4f2.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"__variable_188709 __variable_9a8899 antialiased","children":["$","$L2",null,{"children":["$","$L3",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]]}],{"children":["transactions",["$","$1","c",{"children":[null,["$","$L3",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["__PAGE__",["$","$1","c",{"children":[["$","$L5",null,{"Component":"$6","searchParams":{},"params":{},"promises":["$@7","$@8"]}],["$","$L9",null,{"children":"$La"}],null,["$","$Lb",null,{"children":["$Lc","$Ld",["$","$Le",null,{"promise":"$@f"}]]}]]}],{},null,false]},null,false]},null,false],["$","$1","h",{"children":[null,["$","$1","4IQVXbWCyHOJWpCIV_WUr",{"children":[["$","$L10",null,{"children":"$L11"}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],null]}],false]],"m":"$undefined","G":["$12","$undefined"],"s":false,"S":true}
+0:{"P":null,"b":"hGLTswdpyRID1jim9jOTQ","p":"","c":["","transactions",""],"i":false,"f":[[["",{"children":["transactions",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/de70bee13400563f.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/_next/static/css/6b70638fbb45b4f2.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"__variable_188709 __variable_9a8899 antialiased","children":["$","$L2",null,{"children":["$","$L3",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]]}],{"children":["transactions",["$","$1","c",{"children":[null,["$","$L3",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["__PAGE__",["$","$1","c",{"children":[["$","$L5",null,{"Component":"$6","searchParams":{},"params":{},"promises":["$@7","$@8"]}],["$","$L9",null,{"children":"$La"}],null,["$","$Lb",null,{"children":["$Lc","$Ld",["$","$Le",null,{"promise":"$@f"}]]}]]}],{},null,false]},null,false]},null,false],["$","$1","h",{"children":[null,["$","$1","N18hORzEArk171vfwRG6X",{"children":[["$","$L10",null,{"children":"$L11"}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],null]}],false]],"m":"$undefined","G":["$12","$undefined"],"s":false,"S":true}
13:"$Sreact.suspense"
14:I[394,[],"AsyncMetadata"]
7:{}
diff --git a/ui_out/out/unauthorized/index.html b/ui_out/out/unauthorized/index.html
index aa7434eb..e2db2969 100644
--- a/ui_out/out/unauthorized/index.html
+++ b/ui_out/out/unauthorized/index.html
@@ -1 +1 @@
-Routstr
Access Denied
You don't have permission to access this page. Please contact your administrator if you believe this is an error.
\ No newline at end of file
+Routstr
Access Denied
You don't have permission to access this page. Please contact your administrator if you believe this is an error.
\ No newline at end of file
diff --git a/ui_out/out/unauthorized/index.txt b/ui_out/out/unauthorized/index.txt
index 8ceb9e27..36d21ea4 100644
--- a/ui_out/out/unauthorized/index.txt
+++ b/ui_out/out/unauthorized/index.txt
@@ -13,7 +13,7 @@ e:I[394,[],"AsyncMetadataOutlet"]
:HL["/_next/static/media/93f479601ee12b01-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
:HL["/_next/static/css/de70bee13400563f.css","style"]
:HL["/_next/static/css/6b70638fbb45b4f2.css","style"]
-0:{"P":null,"b":"lKQa3FSkSrZjnFggXV6Av","p":"","c":["","unauthorized",""],"i":false,"f":[[["",{"children":["unauthorized",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/de70bee13400563f.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/_next/static/css/6b70638fbb45b4f2.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"__variable_188709 __variable_9a8899 antialiased","children":["$","$L2",null,{"children":["$","$L3",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]]}],{"children":["unauthorized",["$","$1","c",{"children":[null,["$","$L3",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["__PAGE__",["$","$1","c",{"children":[["$","$L5",null,{"Component":"$6","searchParams":{},"params":{},"promises":["$@7","$@8"]}],["$","$L9",null,{"children":"$La"}],null,["$","$Lb",null,{"children":["$Lc","$Ld",["$","$Le",null,{"promise":"$@f"}]]}]]}],{},null,false]},null,false]},null,false],["$","$1","h",{"children":[null,["$","$1","r6y3OxBtFBfGp-78WIMd7",{"children":[["$","$L10",null,{"children":"$L11"}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],null]}],false]],"m":"$undefined","G":["$12","$undefined"],"s":false,"S":true}
+0:{"P":null,"b":"hGLTswdpyRID1jim9jOTQ","p":"","c":["","unauthorized",""],"i":false,"f":[[["",{"children":["unauthorized",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/de70bee13400563f.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/_next/static/css/6b70638fbb45b4f2.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"__variable_188709 __variable_9a8899 antialiased","children":["$","$L2",null,{"children":["$","$L3",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]]}],{"children":["unauthorized",["$","$1","c",{"children":[null,["$","$L3",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["__PAGE__",["$","$1","c",{"children":[["$","$L5",null,{"Component":"$6","searchParams":{},"params":{},"promises":["$@7","$@8"]}],["$","$L9",null,{"children":"$La"}],null,["$","$Lb",null,{"children":["$Lc","$Ld",["$","$Le",null,{"promise":"$@f"}]]}]]}],{},null,false]},null,false]},null,false],["$","$1","h",{"children":[null,["$","$1","GOMdpCfK5DBHDj0O6xgy8",{"children":[["$","$L10",null,{"children":"$L11"}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],null]}],false]],"m":"$undefined","G":["$12","$undefined"],"s":false,"S":true}
13:"$Sreact.suspense"
14:I[394,[],"AsyncMetadata"]
7:{}
diff --git a/ui_out/providers/index.html b/ui_out/providers/index.html
index 99f1a252..c65e6fe0 100644
--- a/ui_out/providers/index.html
+++ b/ui_out/providers/index.html
@@ -1 +1 @@
-Routstr
Manage your AI provider connections and credentials
\ No newline at end of file
diff --git a/ui_out/providers/index.txt b/ui_out/providers/index.txt
index 02907458..640824f8 100644
--- a/ui_out/providers/index.txt
+++ b/ui_out/providers/index.txt
@@ -3,7 +3,7 @@
3:I[8754,[],""]
4:I[768,[],""]
5:I[3971,[],"ClientPageRoot"]
-6:I[8288,["363","static/chunks/363-119b32fca35baa33.js","222","static/chunks/222-4bb848975c01d467.js","808","static/chunks/808-6da586a06e4a6738.js","29","static/chunks/29-e3557fb1dd82bdc3.js","730","static/chunks/730-892209af1fa345bd.js","978","static/chunks/978-cd938190a9f5efa7.js","481","static/chunks/481-48cd0f8fe547e418.js","982","static/chunks/982-5588ad0e30e6255e.js","236","static/chunks/236-ba64522839e788ad.js","255","static/chunks/255-a44a63a7b4273784.js","387","static/chunks/app/providers/page-284d295c40b8f18c.js"],"default"]
+6:I[8288,["363","static/chunks/363-119b32fca35baa33.js","222","static/chunks/222-4bb848975c01d467.js","808","static/chunks/808-6da586a06e4a6738.js","29","static/chunks/29-e3557fb1dd82bdc3.js","730","static/chunks/730-892209af1fa345bd.js","978","static/chunks/978-cd938190a9f5efa7.js","481","static/chunks/481-48cd0f8fe547e418.js","982","static/chunks/982-5588ad0e30e6255e.js","236","static/chunks/236-ba64522839e788ad.js","601","static/chunks/601-bd77b408e968f9da.js","387","static/chunks/app/providers/page-24027db6adfd0b9b.js"],"default"]
9:I[4826,[],"MetadataBoundary"]
b:I[4826,[],"OutletBoundary"]
e:I[394,[],"AsyncMetadataOutlet"]
@@ -12,8 +12,8 @@ e:I[394,[],"AsyncMetadataOutlet"]
:HL["/_next/static/media/4cf2300e9c8272f7-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
:HL["/_next/static/media/93f479601ee12b01-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
:HL["/_next/static/css/de70bee13400563f.css","style"]
-:HL["/_next/static/css/5bf7a4b46c37a9cb.css","style"]
-0:{"P":null,"b":"vzojcgD75PgXdcu6NGfSb","p":"","c":["","providers",""],"i":false,"f":[[["",{"children":["providers",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/de70bee13400563f.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/_next/static/css/5bf7a4b46c37a9cb.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"__variable_188709 __variable_9a8899 antialiased","children":["$","$L2",null,{"children":["$","$L3",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]]}],{"children":["providers",["$","$1","c",{"children":[null,["$","$L3",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["__PAGE__",["$","$1","c",{"children":[["$","$L5",null,{"Component":"$6","searchParams":{},"params":{},"promises":["$@7","$@8"]}],["$","$L9",null,{"children":"$La"}],null,["$","$Lb",null,{"children":["$Lc","$Ld",["$","$Le",null,{"promise":"$@f"}]]}]]}],{},null,false]},null,false]},null,false],["$","$1","h",{"children":[null,["$","$1","qmNEsMKsJLgfCLCu4VPoq",{"children":[["$","$L10",null,{"children":"$L11"}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],null]}],false]],"m":"$undefined","G":["$12","$undefined"],"s":false,"S":true}
+:HL["/_next/static/css/6b70638fbb45b4f2.css","style"]
+0:{"P":null,"b":"MTOFXU9tRAr2QXrmYwVxq","p":"","c":["","providers",""],"i":false,"f":[[["",{"children":["providers",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/de70bee13400563f.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/_next/static/css/6b70638fbb45b4f2.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"__variable_188709 __variable_9a8899 antialiased","children":["$","$L2",null,{"children":["$","$L3",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]]}],{"children":["providers",["$","$1","c",{"children":[null,["$","$L3",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["__PAGE__",["$","$1","c",{"children":[["$","$L5",null,{"Component":"$6","searchParams":{},"params":{},"promises":["$@7","$@8"]}],["$","$L9",null,{"children":"$La"}],null,["$","$Lb",null,{"children":["$Lc","$Ld",["$","$Le",null,{"promise":"$@f"}]]}]]}],{},null,false]},null,false]},null,false],["$","$1","h",{"children":[null,["$","$1","bbfLcZJj6TpxucvgVUWNM",{"children":[["$","$L10",null,{"children":"$L11"}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],null]}],false]],"m":"$undefined","G":["$12","$undefined"],"s":false,"S":true}
13:"$Sreact.suspense"
14:I[394,[],"AsyncMetadata"]
7:{}
diff --git a/ui_out/settings/index.html b/ui_out/settings/index.html
index 4d70c0dc..2c7a9785 100644
--- a/ui_out/settings/index.html
+++ b/ui_out/settings/index.html
@@ -1 +1 @@
-Routstr
\ No newline at end of file
diff --git a/ui_out/settings/index.txt b/ui_out/settings/index.txt
index 0c905d04..d2c914e1 100644
--- a/ui_out/settings/index.txt
+++ b/ui_out/settings/index.txt
@@ -3,7 +3,7 @@
3:I[8754,[],""]
4:I[768,[],""]
5:I[3971,[],"ClientPageRoot"]
-6:I[4961,["363","static/chunks/363-119b32fca35baa33.js","222","static/chunks/222-4bb848975c01d467.js","808","static/chunks/808-6da586a06e4a6738.js","978","static/chunks/978-cd938190a9f5efa7.js","651","static/chunks/651-4a58f299a4aa4df7.js","236","static/chunks/236-ba64522839e788ad.js","255","static/chunks/255-a44a63a7b4273784.js","662","static/chunks/app/settings/page-a90352a6b8bf0df3.js"],"default"]
+6:I[4961,["363","static/chunks/363-119b32fca35baa33.js","222","static/chunks/222-4bb848975c01d467.js","808","static/chunks/808-6da586a06e4a6738.js","978","static/chunks/978-cd938190a9f5efa7.js","651","static/chunks/651-4a58f299a4aa4df7.js","236","static/chunks/236-ba64522839e788ad.js","601","static/chunks/601-bd77b408e968f9da.js","662","static/chunks/app/settings/page-abf398be5044bf9e.js"],"default"]
9:I[4826,[],"MetadataBoundary"]
b:I[4826,[],"OutletBoundary"]
e:I[394,[],"AsyncMetadataOutlet"]
@@ -12,8 +12,8 @@ e:I[394,[],"AsyncMetadataOutlet"]
:HL["/_next/static/media/4cf2300e9c8272f7-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
:HL["/_next/static/media/93f479601ee12b01-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
:HL["/_next/static/css/de70bee13400563f.css","style"]
-:HL["/_next/static/css/5bf7a4b46c37a9cb.css","style"]
-0:{"P":null,"b":"vzojcgD75PgXdcu6NGfSb","p":"","c":["","settings",""],"i":false,"f":[[["",{"children":["settings",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/de70bee13400563f.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/_next/static/css/5bf7a4b46c37a9cb.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"__variable_188709 __variable_9a8899 antialiased","children":["$","$L2",null,{"children":["$","$L3",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]]}],{"children":["settings",["$","$1","c",{"children":[null,["$","$L3",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["__PAGE__",["$","$1","c",{"children":[["$","$L5",null,{"Component":"$6","searchParams":{},"params":{},"promises":["$@7","$@8"]}],["$","$L9",null,{"children":"$La"}],null,["$","$Lb",null,{"children":["$Lc","$Ld",["$","$Le",null,{"promise":"$@f"}]]}]]}],{},null,false]},null,false]},null,false],["$","$1","h",{"children":[null,["$","$1","CkLXoFD2BlyUUG2DPbPh0",{"children":[["$","$L10",null,{"children":"$L11"}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],null]}],false]],"m":"$undefined","G":["$12","$undefined"],"s":false,"S":true}
+:HL["/_next/static/css/6b70638fbb45b4f2.css","style"]
+0:{"P":null,"b":"MTOFXU9tRAr2QXrmYwVxq","p":"","c":["","settings",""],"i":false,"f":[[["",{"children":["settings",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/de70bee13400563f.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/_next/static/css/6b70638fbb45b4f2.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"__variable_188709 __variable_9a8899 antialiased","children":["$","$L2",null,{"children":["$","$L3",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]]}],{"children":["settings",["$","$1","c",{"children":[null,["$","$L3",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["__PAGE__",["$","$1","c",{"children":[["$","$L5",null,{"Component":"$6","searchParams":{},"params":{},"promises":["$@7","$@8"]}],["$","$L9",null,{"children":"$La"}],null,["$","$Lb",null,{"children":["$Lc","$Ld",["$","$Le",null,{"promise":"$@f"}]]}]]}],{},null,false]},null,false]},null,false],["$","$1","h",{"children":[null,["$","$1","AYsJRrtECyyIRr-hy8b2T",{"children":[["$","$L10",null,{"children":"$L11"}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],null]}],false]],"m":"$undefined","G":["$12","$undefined"],"s":false,"S":true}
13:"$Sreact.suspense"
14:I[394,[],"AsyncMetadata"]
7:{}
diff --git a/ui_out/transactions/index.html b/ui_out/transactions/index.html
index 60ecbf97..b25d4aba 100644
--- a/ui_out/transactions/index.html
+++ b/ui_out/transactions/index.html
@@ -1 +1 @@
-Routstr
View all Cashu token transactions processed by the system
\ No newline at end of file
diff --git a/ui_out/transactions/index.txt b/ui_out/transactions/index.txt
index 751c18ef..c5593746 100644
--- a/ui_out/transactions/index.txt
+++ b/ui_out/transactions/index.txt
@@ -12,8 +12,8 @@ e:I[394,[],"AsyncMetadataOutlet"]
:HL["/_next/static/media/4cf2300e9c8272f7-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
:HL["/_next/static/media/93f479601ee12b01-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
:HL["/_next/static/css/de70bee13400563f.css","style"]
-:HL["/_next/static/css/5bf7a4b46c37a9cb.css","style"]
-0:{"P":null,"b":"vzojcgD75PgXdcu6NGfSb","p":"","c":["","transactions",""],"i":false,"f":[[["",{"children":["transactions",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/de70bee13400563f.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/_next/static/css/5bf7a4b46c37a9cb.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"__variable_188709 __variable_9a8899 antialiased","children":["$","$L2",null,{"children":["$","$L3",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]]}],{"children":["transactions",["$","$1","c",{"children":[null,["$","$L3",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["__PAGE__",["$","$1","c",{"children":[["$","$L5",null,{"Component":"$6","searchParams":{},"params":{},"promises":["$@7","$@8"]}],["$","$L9",null,{"children":"$La"}],null,["$","$Lb",null,{"children":["$Lc","$Ld",["$","$Le",null,{"promise":"$@f"}]]}]]}],{},null,false]},null,false]},null,false],["$","$1","h",{"children":[null,["$","$1","KqVZZStNGVmAu8IGJMtWa",{"children":[["$","$L10",null,{"children":"$L11"}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],null]}],false]],"m":"$undefined","G":["$12","$undefined"],"s":false,"S":true}
+:HL["/_next/static/css/6b70638fbb45b4f2.css","style"]
+0:{"P":null,"b":"MTOFXU9tRAr2QXrmYwVxq","p":"","c":["","transactions",""],"i":false,"f":[[["",{"children":["transactions",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/de70bee13400563f.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/_next/static/css/6b70638fbb45b4f2.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"__variable_188709 __variable_9a8899 antialiased","children":["$","$L2",null,{"children":["$","$L3",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]]}],{"children":["transactions",["$","$1","c",{"children":[null,["$","$L3",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["__PAGE__",["$","$1","c",{"children":[["$","$L5",null,{"Component":"$6","searchParams":{},"params":{},"promises":["$@7","$@8"]}],["$","$L9",null,{"children":"$La"}],null,["$","$Lb",null,{"children":["$Lc","$Ld",["$","$Le",null,{"promise":"$@f"}]]}]]}],{},null,false]},null,false]},null,false],["$","$1","h",{"children":[null,["$","$1","auE2K9xv61puGfawyOXyq",{"children":[["$","$L10",null,{"children":"$L11"}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],null]}],false]],"m":"$undefined","G":["$12","$undefined"],"s":false,"S":true}
13:"$Sreact.suspense"
14:I[394,[],"AsyncMetadata"]
7:{}
diff --git a/ui_out/unauthorized/index.html b/ui_out/unauthorized/index.html
index af2a8f92..6d9aaefa 100644
--- a/ui_out/unauthorized/index.html
+++ b/ui_out/unauthorized/index.html
@@ -1 +1 @@
-Routstr
Access Denied
You don't have permission to access this page. Please contact your administrator if you believe this is an error.
\ No newline at end of file
+Routstr
Access Denied
You don't have permission to access this page. Please contact your administrator if you believe this is an error.
\ No newline at end of file
diff --git a/ui_out/unauthorized/index.txt b/ui_out/unauthorized/index.txt
index 7b3b963e..ebc55851 100644
--- a/ui_out/unauthorized/index.txt
+++ b/ui_out/unauthorized/index.txt
@@ -12,8 +12,8 @@ e:I[394,[],"AsyncMetadataOutlet"]
:HL["/_next/static/media/4cf2300e9c8272f7-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
:HL["/_next/static/media/93f479601ee12b01-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
:HL["/_next/static/css/de70bee13400563f.css","style"]
-:HL["/_next/static/css/5bf7a4b46c37a9cb.css","style"]
-0:{"P":null,"b":"vzojcgD75PgXdcu6NGfSb","p":"","c":["","unauthorized",""],"i":false,"f":[[["",{"children":["unauthorized",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/de70bee13400563f.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/_next/static/css/5bf7a4b46c37a9cb.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"__variable_188709 __variable_9a8899 antialiased","children":["$","$L2",null,{"children":["$","$L3",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]]}],{"children":["unauthorized",["$","$1","c",{"children":[null,["$","$L3",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["__PAGE__",["$","$1","c",{"children":[["$","$L5",null,{"Component":"$6","searchParams":{},"params":{},"promises":["$@7","$@8"]}],["$","$L9",null,{"children":"$La"}],null,["$","$Lb",null,{"children":["$Lc","$Ld",["$","$Le",null,{"promise":"$@f"}]]}]]}],{},null,false]},null,false]},null,false],["$","$1","h",{"children":[null,["$","$1","qiwH95X8-b8P9f5RsRStJ",{"children":[["$","$L10",null,{"children":"$L11"}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],null]}],false]],"m":"$undefined","G":["$12","$undefined"],"s":false,"S":true}
+:HL["/_next/static/css/6b70638fbb45b4f2.css","style"]
+0:{"P":null,"b":"MTOFXU9tRAr2QXrmYwVxq","p":"","c":["","unauthorized",""],"i":false,"f":[[["",{"children":["unauthorized",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/de70bee13400563f.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/_next/static/css/6b70638fbb45b4f2.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"__variable_188709 __variable_9a8899 antialiased","children":["$","$L2",null,{"children":["$","$L3",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]]}],{"children":["unauthorized",["$","$1","c",{"children":[null,["$","$L3",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["__PAGE__",["$","$1","c",{"children":[["$","$L5",null,{"Component":"$6","searchParams":{},"params":{},"promises":["$@7","$@8"]}],["$","$L9",null,{"children":"$La"}],null,["$","$Lb",null,{"children":["$Lc","$Ld",["$","$Le",null,{"promise":"$@f"}]]}]]}],{},null,false]},null,false]},null,false],["$","$1","h",{"children":[null,["$","$1","gPN6C01KAZVNXY-EtNpqN",{"children":[["$","$L10",null,{"children":"$L11"}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],null]}],false]],"m":"$undefined","G":["$12","$undefined"],"s":false,"S":true}
13:"$Sreact.suspense"
14:I[394,[],"AsyncMetadata"]
7:{}